summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorSVN Migration <svn@php.net>2002-05-28 01:22:43 +0000
committerSVN Migration <svn@php.net>2002-05-28 01:22:43 +0000
commitfe9cd86c5dd9af436ff2431b8c4b1800bed6894c (patch)
tree1d2376b2c6d208ff3177bd3c599ab86fe77c10ae /ext
parent43beb1deda6c4d40fab8719478efd0750b0a06da (diff)
downloadphp-git-RELEASE_0_11.tar.gz
This commit was manufactured by cvs2svn to create tag 'RELEASE_0_11'.RELEASE_0_11
Diffstat (limited to 'ext')
-rw-r--r--ext/aspell/CREDITS2
-rw-r--r--ext/aspell/aspell.c228
-rw-r--r--ext/aspell/config.m430
-rw-r--r--ext/aspell/php_aspell.h41
-rw-r--r--ext/bcmath/CREDITS2
-rw-r--r--ext/bcmath/bcmath.c506
-rw-r--r--ext/bcmath/config.m417
-rw-r--r--ext/bcmath/libbcmath/AUTHORS3
-rw-r--r--ext/bcmath/libbcmath/COPYING.LIB515
-rw-r--r--ext/bcmath/libbcmath/ChangeLog10
-rw-r--r--ext/bcmath/libbcmath/FAQ21
-rw-r--r--ext/bcmath/libbcmath/INSTALL9
-rw-r--r--ext/bcmath/libbcmath/Makefile.am12
-rw-r--r--ext/bcmath/libbcmath/NEWS3
-rw-r--r--ext/bcmath/libbcmath/README9
-rw-r--r--ext/bcmath/libbcmath/acconfig.h9
-rw-r--r--ext/bcmath/libbcmath/aclocal.m4127
-rw-r--r--ext/bcmath/libbcmath/config.h.in41
-rw-r--r--ext/bcmath/libbcmath/configure1859
-rw-r--r--ext/bcmath/libbcmath/configure.in18
-rw-r--r--ext/bcmath/libbcmath/install-sh238
-rw-r--r--ext/bcmath/libbcmath/missing134
-rw-r--r--ext/bcmath/libbcmath/mkinstalldirs36
-rw-r--r--ext/bcmath/libbcmath/src/Makefile.am22
-rw-r--r--ext/bcmath/libbcmath/src/add.c88
-rw-r--r--ext/bcmath/libbcmath/src/bcmath.h158
-rw-r--r--ext/bcmath/libbcmath/src/compare.c161
-rw-r--r--ext/bcmath/libbcmath/src/config.h9
-rw-r--r--ext/bcmath/libbcmath/src/debug.c70
-rw-r--r--ext/bcmath/libbcmath/src/div.c276
-rw-r--r--ext/bcmath/libbcmath/src/divmod.c91
-rw-r--r--ext/bcmath/libbcmath/src/doaddsub.c232
-rw-r--r--ext/bcmath/libbcmath/src/init.c135
-rw-r--r--ext/bcmath/libbcmath/src/int2num.c84
-rw-r--r--ext/bcmath/libbcmath/src/nearzero.c69
-rw-r--r--ext/bcmath/libbcmath/src/neg.c49
-rw-r--r--ext/bcmath/libbcmath/src/num2long.c70
-rw-r--r--ext/bcmath/libbcmath/src/num2str.c79
-rw-r--r--ext/bcmath/libbcmath/src/outofmem.c46
-rw-r--r--ext/bcmath/libbcmath/src/output.c212
-rw-r--r--ext/bcmath/libbcmath/src/private.h41
-rw-r--r--ext/bcmath/libbcmath/src/raise.c126
-rw-r--r--ext/bcmath/libbcmath/src/raisemod.c99
-rw-r--r--ext/bcmath/libbcmath/src/recmul.c304
-rw-r--r--ext/bcmath/libbcmath/src/rmzero.c55
-rw-r--r--ext/bcmath/libbcmath/src/rt.c65
-rw-r--r--ext/bcmath/libbcmath/src/sqrt.c131
-rw-r--r--ext/bcmath/libbcmath/src/str2num.c112
-rw-r--r--ext/bcmath/libbcmath/src/sub.c90
-rw-r--r--ext/bcmath/libbcmath/src/zero.c65
-rw-r--r--ext/bcmath/php_bcmath.h50
-rw-r--r--ext/calendar/CREDITS2
-rw-r--r--ext/calendar/cal_unix.c88
-rw-r--r--ext/calendar/calendar.c550
-rw-r--r--ext/calendar/config.m411
-rw-r--r--ext/calendar/dow.c76
-rw-r--r--ext/calendar/easter.c132
-rw-r--r--ext/calendar/french.c160
-rw-r--r--ext/calendar/gregor.c265
-rw-r--r--ext/calendar/jewish.c741
-rw-r--r--ext/calendar/julian.c249
-rw-r--r--ext/calendar/php_calendar.h50
-rw-r--r--ext/calendar/sdncal.h96
-rw-r--r--ext/ccvs/CREDITS2
-rw-r--r--ext/ccvs/TODO7
-rw-r--r--ext/ccvs/ccvs.c607
-rw-r--r--ext/ccvs/ccvs.h59
-rw-r--r--ext/ccvs/config.m427
-rw-r--r--ext/com/COM.c2341
-rw-r--r--ext/com/CREDITS2
-rw-r--r--ext/com/TODO28
-rw-r--r--ext/com/VARIANT.c341
-rw-r--r--ext/com/com.h79
-rw-r--r--ext/com/conversion.c868
-rw-r--r--ext/com/conversion.h23
-rw-r--r--ext/com/dispatch.c626
-rw-r--r--ext/com/php_COM.h74
-rw-r--r--ext/com/php_VARIANT.h19
-rw-r--r--ext/com/variant.h32
-rw-r--r--ext/cpdf/CREDITS2
-rw-r--r--ext/cpdf/config.m470
-rw-r--r--ext/cpdf/cpdf.c2719
-rw-r--r--ext/cpdf/cpdf.dsp111
-rw-r--r--ext/cpdf/php_cpdf.h121
-rw-r--r--ext/crack/CREDITS4
-rw-r--r--ext/crack/EXPERIMENTAL5
-rw-r--r--ext/crack/config.m433
-rw-r--r--ext/crack/crack.c277
-rw-r--r--ext/crack/crack.dsp114
-rw-r--r--ext/crack/php_crack.h72
-rw-r--r--ext/crack/tests/001.phpt23
-rw-r--r--ext/ctype/CREDITS2
-rw-r--r--ext/ctype/README5
-rw-r--r--ext/ctype/config.m411
-rw-r--r--ext/ctype/ctype.c216
-rw-r--r--ext/ctype/ctype.dsp107
-rw-r--r--ext/ctype/ctype.xml245
-rw-r--r--ext/ctype/php_ctype.h83
-rw-r--r--ext/ctype/tests/001.phpt41
-rw-r--r--ext/ctype/tests/002.phpt50
-rw-r--r--ext/curl/CREDITS2
-rw-r--r--ext/curl/config.m462
-rw-r--r--ext/curl/curl.c1090
-rw-r--r--ext/curl/curl.dsp177
-rw-r--r--ext/curl/php_curl.h101
-rw-r--r--ext/cybercash/CREDITS2
-rw-r--r--ext/cybercash/config.m429
-rw-r--r--ext/cybercash/cybercash.c230
-rw-r--r--ext/cybercash/cybercash.dsp110
-rw-r--r--ext/cybercash/cybercash.h40
-rw-r--r--ext/cybercash/cyberlib.php215
-rw-r--r--ext/cybercash/test.php26
-rw-r--r--ext/cybermut/config.m448
-rw-r--r--ext/cybermut/cybermut.c178
-rw-r--r--ext/cybermut/cybermut.xml214
-rw-r--r--ext/cybermut/php_cybermut.h72
-rw-r--r--ext/cybermut/tests/001.phpt23
-rw-r--r--ext/cyrus/CREDITS2
-rw-r--r--ext/cyrus/config.m447
-rw-r--r--ext/cyrus/cyrus.c516
-rw-r--r--ext/cyrus/php_cyrus.h78
-rw-r--r--ext/db/CREDITS2
-rw-r--r--ext/db/config.m458
-rw-r--r--ext/db/db.c1209
-rw-r--r--ext/db/db.dsp122
-rw-r--r--ext/db/php_db.h81
-rw-r--r--ext/db/tests/001.phpt13
-rw-r--r--ext/db/tests/002.phpt16
-rw-r--r--ext/db/tests/003.phpt17
-rw-r--r--ext/db/tests/004.phpt21
-rw-r--r--ext/db/tests/005.phpt25
-rw-r--r--ext/db/tests/006.phpt27
-rw-r--r--ext/dba/CREDITS2
-rw-r--r--ext/dba/config.m4237
-rw-r--r--ext/dba/dba.c523
-rw-r--r--ext/dba/dba.dsp157
-rw-r--r--ext/dba/dba_cdb.c222
-rw-r--r--ext/dba/dba_db2.c198
-rw-r--r--ext/dba/dba_db3.c212
-rw-r--r--ext/dba/dba_dbm.c188
-rw-r--r--ext/dba/dba_gdbm.c191
-rw-r--r--ext/dba/dba_ndbm.c168
-rw-r--r--ext/dba/php_cdb.h12
-rw-r--r--ext/dba/php_db2.h12
-rw-r--r--ext/dba/php_db3.h12
-rw-r--r--ext/dba/php_dba.h104
-rw-r--r--ext/dba/php_dbm.h12
-rw-r--r--ext/dba/php_gdbm.h12
-rw-r--r--ext/dba/php_ndbm.h12
-rw-r--r--ext/dbase/CREDITS2
-rw-r--r--ext/dbase/config.m413
-rw-r--r--ext/dbase/dbase.c842
-rw-r--r--ext/dbase/dbase.dsp151
-rw-r--r--ext/dbase/dbf.h94
-rw-r--r--ext/dbase/dbf_head.c290
-rw-r--r--ext/dbase/dbf_head.h11
-rw-r--r--ext/dbase/dbf_misc.c179
-rw-r--r--ext/dbase/dbf_misc.h13
-rw-r--r--ext/dbase/dbf_ndx.c191
-rw-r--r--ext/dbase/dbf_ndx.h98
-rw-r--r--ext/dbase/dbf_rec.c201
-rw-r--r--ext/dbase/dbf_rec.h10
-rw-r--r--ext/dbase/php_dbase.h44
-rw-r--r--ext/dbx/CREDITS2
-rw-r--r--ext/dbx/INSTALL25
-rw-r--r--ext/dbx/config.m410
-rw-r--r--ext/dbx/dbx.c818
-rw-r--r--ext/dbx/dbx.dsp173
-rw-r--r--ext/dbx/dbx.h58
-rw-r--r--ext/dbx/dbx_fbsql.c257
-rw-r--r--ext/dbx/dbx_fbsql.h61
-rw-r--r--ext/dbx/dbx_mssql.c257
-rw-r--r--ext/dbx/dbx_mssql.h60
-rw-r--r--ext/dbx/dbx_mysql.c263
-rw-r--r--ext/dbx/dbx_mysql.h60
-rw-r--r--ext/dbx/dbx_oci8.c244
-rw-r--r--ext/dbx/dbx_oci8.h60
-rw-r--r--ext/dbx/dbx_odbc.c281
-rw-r--r--ext/dbx/dbx_odbc.h60
-rw-r--r--ext/dbx/dbx_pgsql.c283
-rw-r--r--ext/dbx/dbx_pgsql.h56
-rw-r--r--ext/dbx/dbx_sybasect.c282
-rw-r--r--ext/dbx/dbx_sybasect.h60
-rw-r--r--ext/dbx/howto_extend_dbx.html316
-rw-r--r--ext/dbx/php_dbx.h87
-rw-r--r--ext/dbx/tests/001.phpt12
-rw-r--r--ext/dbx/tests/002.phpt28
-rw-r--r--ext/dbx/tests/003.phpt107
-rw-r--r--ext/dbx/tests/004.phpt30
-rw-r--r--ext/dbx/tests/005.phpt93
-rw-r--r--ext/dbx/tests/006.phpt55
-rw-r--r--ext/dbx/tests/007.phpt74
-rw-r--r--ext/dbx/tests/008.phpt146
-rw-r--r--ext/dbx/tests/dbx_test.p62
-rw-r--r--ext/dbx/tests/dbx_test.pgsql.script37
-rw-r--r--ext/dbx/tests/dbx_test.script38
-rw-r--r--ext/dio/EXPERIMENTAL0
-rw-r--r--ext/dio/config.m410
-rw-r--r--ext/dio/dio.c434
-rw-r--r--ext/dio/php_dio.h61
-rw-r--r--ext/dio/tests/001.phpt23
-rw-r--r--ext/domxml/CREDITS2
-rw-r--r--ext/domxml/EXPERIMENTAL5
-rw-r--r--ext/domxml/TODO17
-rw-r--r--ext/domxml/config.m4193
-rw-r--r--ext/domxml/domxml.dsp114
-rw-r--r--ext/domxml/php_domxml.c4369
-rw-r--r--ext/domxml/php_domxml.h202
-rw-r--r--ext/domxml/tests/001.phpt289
-rw-r--r--ext/domxml/tests/domxml_test.inc42
-rw-r--r--ext/dotnet/CREDITS2
-rw-r--r--ext/dotnet/EXPERIMENTAL5
-rw-r--r--ext/dotnet/README32
-rw-r--r--ext/dotnet/dotnet.cpp237
-rw-r--r--ext/dotnet/dotnet.dsp167
-rw-r--r--ext/dotnet/dotnet.php8
-rw-r--r--ext/dotnet/php_dotnet.h21
-rw-r--r--ext/ereg/ereg.c658
-rw-r--r--ext/ereg/php_ereg.h50
-rw-r--r--ext/ereg/php_regex.h45
-rw-r--r--ext/ereg/regex/COPYRIGHT20
-rw-r--r--ext/ereg/regex/README32
-rw-r--r--ext/ereg/regex/WHATSNEW92
-rw-r--r--ext/ereg/regex/cclass.h30
-rw-r--r--ext/ereg/regex/cname.h102
-rw-r--r--ext/ereg/regex/debug.c242
-rw-r--r--ext/ereg/regex/debug.ih14
-rw-r--r--ext/ereg/regex/engine.c1019
-rw-r--r--ext/ereg/regex/engine.ih35
-rw-r--r--ext/ereg/regex/main.c510
-rw-r--r--ext/ereg/regex/main.ih19
-rw-r--r--ext/ereg/regex/mkh76
-rw-r--r--ext/ereg/regex/regcomp.c1608
-rw-r--r--ext/ereg/regex/regcomp.ih53
-rw-r--r--ext/ereg/regex/regerror.c126
-rw-r--r--ext/ereg/regex/regerror.ih12
-rw-r--r--ext/ereg/regex/regex.3502
-rw-r--r--ext/ereg/regex/regex.7233
-rw-r--r--ext/ereg/regex/regex.dsp106
-rw-r--r--ext/ereg/regex/regex.dsw29
-rw-r--r--ext/ereg/regex/regex.h83
-rw-r--r--ext/ereg/regex/regex.mak304
-rw-r--r--ext/ereg/regex/regex2.h140
-rw-r--r--ext/ereg/regex/regex_extra.h23
-rw-r--r--ext/ereg/regex/regexec.c138
-rw-r--r--ext/ereg/regex/regfree.c37
-rw-r--r--ext/ereg/regex/split.c316
-rw-r--r--ext/ereg/regex/tests475
-rw-r--r--ext/ereg/regex/utils.h25
-rw-r--r--ext/ereg/tests/001.phpt9
-rw-r--r--ext/ereg/tests/002.phpt9
-rw-r--r--ext/ereg/tests/003.phpt10
-rw-r--r--ext/ereg/tests/004.phpt16
-rw-r--r--ext/ereg/tests/005.phpt20
-rw-r--r--ext/ereg/tests/006.phpt10
-rw-r--r--ext/ereg/tests/007.phpt12
-rw-r--r--ext/ereg/tests/008.phpt10
-rw-r--r--ext/ereg/tests/009.phpt19
-rw-r--r--ext/ereg/tests/010.phpt9
-rw-r--r--ext/ereg/tests/011.phpt9
-rw-r--r--ext/ereg/tests/012.phpt9
-rw-r--r--ext/ereg/tests/013.phpt9
-rw-r--r--ext/ereg/tests/014.phpt9
-rw-r--r--ext/ereg/tests/015.phpt8
-rw-r--r--ext/ereg/tests/016.phpt8
-rw-r--r--ext/exif/CREDITS2
-rw-r--r--ext/exif/config.m411
-rw-r--r--ext/exif/example.php23
-rw-r--r--ext/exif/exif.c3534
-rw-r--r--ext/exif/exif.dsp113
-rw-r--r--ext/exif/php_exif.h30
-rw-r--r--ext/exif/test.php3
-rw-r--r--ext/exif/test.txt365
-rw-r--r--ext/exif/tests/001.phpt28
-rw-r--r--ext/exif/tests/002.phpt26
-rw-r--r--ext/exif/tests/003.phpt30
-rw-r--r--ext/exif/tests/test1.jpgbin523 -> 0 bytes
-rw-r--r--ext/exif/tests/test2.jpgbin1240 -> 0 bytes
-rw-r--r--ext/exif/tests/test3.jpgbin1237 -> 0 bytes
-rwxr-xr-xext/ext_skel274
-rw-r--r--ext/fbsql/CREDITS2
-rw-r--r--ext/fbsql/Readme_w32.txt22
-rw-r--r--ext/fbsql/config.m442
-rw-r--r--ext/fbsql/fbsql.dsp171
-rw-r--r--ext/fbsql/php_fbsql.c3521
-rw-r--r--ext/fbsql/php_fbsql.h145
-rw-r--r--ext/fdf/CREDITS2
-rw-r--r--ext/fdf/config.m439
-rw-r--r--ext/fdf/fdf.c802
-rw-r--r--ext/fdf/fdf.dsp114
-rw-r--r--ext/fdf/php_fdf.h66
-rw-r--r--ext/filepro/CREDITS2
-rw-r--r--ext/filepro/config.m413
-rw-r--r--ext/filepro/filepro.c592
-rw-r--r--ext/filepro/filepro.dsp109
-rw-r--r--ext/filepro/php_filepro.h48
-rw-r--r--ext/fribidi/CREDITS2
-rw-r--r--ext/fribidi/README53
-rw-r--r--ext/fribidi/config.m479
-rwxr-xr-xext/fribidi/fribidi.c257
-rw-r--r--ext/fribidi/fribidi.php10
-rw-r--r--ext/fribidi/php_fribidi.h89
-rw-r--r--ext/ftp/CREDITS2
-rw-r--r--ext/ftp/config.m411
-rw-r--r--ext/ftp/ftp.c1291
-rw-r--r--ext/ftp/ftp.h156
-rw-r--r--ext/ftp/php_ftp.c770
-rw-r--r--ext/ftp/php_ftp.h65
-rw-r--r--ext/gd/CREDITS2
-rw-r--r--ext/gd/config.m4283
-rw-r--r--ext/gd/gd.c3649
-rw-r--r--ext/gd/gd.dsp203
-rw-r--r--ext/gd/gd_ctx.c106
-rw-r--r--ext/gd/gdcache.c201
-rw-r--r--ext/gd/gdcache.h87
-rw-r--r--ext/gd/gdt1.c548
-rw-r--r--ext/gd/gdt1.h35
-rw-r--r--ext/gd/gdttf.c868
-rw-r--r--ext/gd/gdttf.h16
-rw-r--r--ext/gd/libgd/README72
-rw-r--r--ext/gd/libgd/gd.c2545
-rw-r--r--ext/gd/libgd/gd.h509
-rw-r--r--ext/gd/libgd/gd2copypal.c64
-rw-r--r--ext/gd/libgd/gd2time.c60
-rw-r--r--ext/gd/libgd/gd2topng.c45
-rw-r--r--ext/gd/libgd/gd_arc_f_buggy.c741
-rw-r--r--ext/gd/libgd/gd_gd.c272
-rw-r--r--ext/gd/libgd/gd_gd2.c923
-rw-r--r--ext/gd/libgd/gd_io.c175
-rw-r--r--ext/gd/libgd/gd_io.h39
-rw-r--r--ext/gd/libgd/gd_io_dp.c419
-rw-r--r--ext/gd/libgd/gd_io_file.c145
-rw-r--r--ext/gd/libgd/gd_io_ss.c165
-rw-r--r--ext/gd/libgd/gd_jpeg.c852
-rw-r--r--ext/gd/libgd/gd_png.c753
-rw-r--r--ext/gd/libgd/gd_ss.c38
-rw-r--r--ext/gd/libgd/gd_topal.c1688
-rw-r--r--ext/gd/libgd/gd_wbmp.c218
-rw-r--r--ext/gd/libgd/gdcache.c214
-rw-r--r--ext/gd/libgd/gdcache.h83
-rw-r--r--ext/gd/libgd/gddemo.c118
-rw-r--r--ext/gd/libgd/gdfontg.c4384
-rw-r--r--ext/gd/libgd/gdfontg.h29
-rw-r--r--ext/gd/libgd/gdfontl.c4641
-rw-r--r--ext/gd/libgd/gdfontl.h30
-rw-r--r--ext/gd/libgd/gdfontmb.c3871
-rw-r--r--ext/gd/libgd/gdfontmb.h28
-rw-r--r--ext/gd/libgd/gdfonts.c3871
-rw-r--r--ext/gd/libgd/gdfonts.h28
-rw-r--r--ext/gd/libgd/gdfontt.c2592
-rw-r--r--ext/gd/libgd/gdfontt.h29
-rw-r--r--ext/gd/libgd/gdft.c932
-rw-r--r--ext/gd/libgd/gdhelpers.c95
-rw-r--r--ext/gd/libgd/gdhelpers.h17
-rw-r--r--ext/gd/libgd/gdkanji.c626
-rw-r--r--ext/gd/libgd/gdparttopng.c55
-rw-r--r--ext/gd/libgd/gdtables.c728
-rw-r--r--ext/gd/libgd/gdtest.c409
-rw-r--r--ext/gd/libgd/gdtestft.c108
-rw-r--r--ext/gd/libgd/gdtopng.c44
-rw-r--r--ext/gd/libgd/gdxpm.c148
-rw-r--r--ext/gd/libgd/jisx0208.h1205
-rw-r--r--ext/gd/libgd/mathmake.c52
-rw-r--r--ext/gd/libgd/pngtogd.c45
-rw-r--r--ext/gd/libgd/pngtogd2.c52
-rw-r--r--ext/gd/libgd/testac.c129
-rw-r--r--ext/gd/libgd/wbmp.c369
-rw-r--r--ext/gd/libgd/wbmp.h47
-rw-r--r--ext/gd/libgd/webpng.c289
-rw-r--r--ext/gd/php_gd.h180
-rw-r--r--ext/gettext/CREDITS2
-rw-r--r--ext/gettext/config.m452
-rw-r--r--ext/gettext/gettext.c311
-rw-r--r--ext/gettext/gettext.dsp113
-rw-r--r--ext/gettext/php_gettext.h58
-rw-r--r--ext/gmp/CREDITS2
-rw-r--r--ext/gmp/README5
-rw-r--r--ext/gmp/TODO22
-rw-r--r--ext/gmp/config.m425
-rw-r--r--ext/gmp/gmp.c1253
-rw-r--r--ext/gmp/php_gmp.h115
-rw-r--r--ext/gmp/tests/001.phpt23
-rw-r--r--ext/gmp/tests/002.phpt19
-rw-r--r--ext/gmp/tests/003.phpt49
-rw-r--r--ext/hwapi/CREDITS2
-rw-r--r--ext/hwapi/config.m440
-rw-r--r--ext/hwapi/hwapi.cpp5028
-rw-r--r--ext/hyperwave/CREDITS2
-rw-r--r--ext/hyperwave/config.m420
-rw-r--r--ext/hyperwave/debug.h206
-rw-r--r--ext/hyperwave/hg_comm.c5846
-rw-r--r--ext/hyperwave/hg_comm.h238
-rw-r--r--ext/hyperwave/hw.c4482
-rw-r--r--ext/hyperwave/hw_error.h111
-rw-r--r--ext/hyperwave/hyperwave.dsp120
-rw-r--r--ext/hyperwave/php_hyperwave.h147
-rw-r--r--ext/icap/CREDITS2
-rw-r--r--ext/icap/config.m417
-rw-r--r--ext/icap/php_icap.c949
-rw-r--r--ext/icap/php_icap.h42
-rw-r--r--ext/iconv/EXPERIMENTAL5
-rw-r--r--ext/iconv/config.m417
-rw-r--r--ext/iconv/iconv.c399
-rw-r--r--ext/iconv/iconv.dsp107
-rw-r--r--ext/iconv/php_iconv.h79
-rw-r--r--ext/iconv/tests/001.phpt18
-rw-r--r--ext/iconv/tests/002.inc14
-rw-r--r--ext/iconv/tests/002.phpt11
-rw-r--r--ext/iconv/tests/eucjp2iso2022jp.inc47
-rw-r--r--ext/iconv/tests/eucjp2iso2022jp.phpt10
-rw-r--r--ext/iconv/tests/eucjp2sjis.inc47
-rw-r--r--ext/iconv/tests/eucjp2sjis.phpt11
-rw-r--r--ext/iconv/tests/eucjp2utf8.inc47
-rw-r--r--ext/iconv/tests/eucjp2utf8.phpt10
-rw-r--r--ext/iconv/tests/skipif.inc11
-rw-r--r--ext/imap/CREDITS2
-rw-r--r--ext/imap/IMAP_Win32_HOWTO.txt32
-rw-r--r--ext/imap/config.m4169
-rw-r--r--ext/imap/imap.dsp183
-rw-r--r--ext/imap/imap.h103
-rw-r--r--ext/imap/php_imap.c4156
-rw-r--r--ext/imap/php_imap.h230
-rw-r--r--ext/informix/CREDITS2
-rw-r--r--ext/informix/Makefile.frag10
-rw-r--r--ext/informix/config.m496
-rw-r--r--ext/informix/ifx.dsp134
-rw-r--r--ext/informix/ifx.ec4261
-rw-r--r--ext/informix/php_informix.h180
-rw-r--r--ext/informix/stub.c0
-rw-r--r--ext/ingres_ii/CREDITS2
-rw-r--r--ext/ingres_ii/EXPERIMENTAL5
-rw-r--r--ext/ingres_ii/README13
-rw-r--r--ext/ingres_ii/config.m435
-rw-r--r--ext/ingres_ii/ii.c1467
-rw-r--r--ext/ingres_ii/ii.h65
-rw-r--r--ext/ingres_ii/ingres.dsp111
-rw-r--r--ext/ingres_ii/php_ii.h100
-rw-r--r--ext/interbase/CREDITS2
-rw-r--r--ext/interbase/config.m423
-rw-r--r--ext/interbase/interbase.c3140
-rw-r--r--ext/interbase/interbase.dsp113
-rw-r--r--ext/interbase/php_interbase.h185
-rw-r--r--ext/interbase/tests/001.phpt39
-rw-r--r--ext/interbase/tests/002.phpt35
-rw-r--r--ext/interbase/tests/003.phpt93
-rw-r--r--ext/interbase/tests/004.phpt179
-rw-r--r--ext/interbase/tests/005.phpt274
-rw-r--r--ext/interbase/tests/006.phpt227
-rwxr-xr-xext/interbase/tests/extension1
-rwxr-xr-xext/interbase/tests/interbase.inc77
-rw-r--r--ext/java/CREDITS2
-rw-r--r--ext/java/EXPERIMENTAL5
-rw-r--r--ext/java/Makefile.frag13
-rw-r--r--ext/java/README243
-rw-r--r--ext/java/config.m4133
-rw-r--r--ext/java/except.php23
-rw-r--r--ext/java/java.c786
-rw-r--r--ext/java/java.dsp254
-rw-r--r--ext/java/jawt.php27
-rw-r--r--ext/java/jver.php17
-rw-r--r--ext/java/reflect.java419
-rw-r--r--ext/ldap/CREDITS2
-rw-r--r--ext/ldap/LDAP_Win32_HOWTO.txt33
-rw-r--r--ext/ldap/config.m4108
-rw-r--r--ext/ldap/ldap.c2199
-rw-r--r--ext/ldap/ldap.dsp230
-rw-r--r--ext/ldap/php_ldap.h119
-rw-r--r--ext/mbstring/CREDITS2
-rw-r--r--ext/mbstring/README_PHP3-i18n-ja774
-rw-r--r--ext/mbstring/config.m450
-rw-r--r--ext/mbstring/cp932_table.h66
-rw-r--r--ext/mbstring/mbfilter.c9318
-rw-r--r--ext/mbstring/mbfilter.h577
-rw-r--r--ext/mbstring/mbfilter_cn.c417
-rw-r--r--ext/mbstring/mbfilter_cn.h33
-rw-r--r--ext/mbstring/mbfilter_ja.c1291
-rw-r--r--ext/mbstring/mbfilter_ja.h98
-rw-r--r--ext/mbstring/mbfilter_kr.c534
-rw-r--r--ext/mbstring/mbfilter_kr.h33
-rw-r--r--ext/mbstring/mbfilter_ru.c240
-rw-r--r--ext/mbstring/mbfilter_ru.h38
-rw-r--r--ext/mbstring/mbfilter_tw.c337
-rw-r--r--ext/mbstring/mbfilter_tw.h30
-rw-r--r--ext/mbstring/mbregex.c4686
-rw-r--r--ext/mbstring/mbregex.h213
-rw-r--r--ext/mbstring/mbstring.c3401
-rw-r--r--ext/mbstring/mbstring.dsp179
-rw-r--r--ext/mbstring/mbstring.h209
-rw-r--r--ext/mbstring/php_mbregex.c969
-rw-r--r--ext/mbstring/tests/001.phpt34
-rw-r--r--ext/mbstring/tests/002.inc44
-rw-r--r--ext/mbstring/tests/002.phpt28
-rw-r--r--ext/mbstring/tests/003.inc32
-rw-r--r--ext/mbstring/tests/003.phpt20
-rw-r--r--ext/mbstring/tests/004.inc56
-rw-r--r--ext/mbstring/tests/004.phpt32
-rw-r--r--ext/mbstring/tests/005.inc40
-rw-r--r--ext/mbstring/tests/005.phpt21
-rw-r--r--ext/mbstring/tests/006.inc32
-rw-r--r--ext/mbstring/tests/006.phpt19
-rw-r--r--ext/mbstring/tests/007.inc11
-rw-r--r--ext/mbstring/tests/007.phpt11
-rw-r--r--ext/mbstring/tests/008.inc41
-rw-r--r--ext/mbstring/tests/008.phpt22
-rw-r--r--ext/mbstring/tests/009.inc70
-rw-r--r--ext/mbstring/tests/009.phpt33
-rw-r--r--ext/mbstring/tests/010.inc110
-rw-r--r--ext/mbstring/tests/010.phpt67
-rw-r--r--ext/mbstring/tests/011.inc57
-rw-r--r--ext/mbstring/tests/011.phpt31
-rw-r--r--ext/mbstring/tests/012.inc19
-rw-r--r--ext/mbstring/tests/012.phpt15
-rw-r--r--ext/mbstring/tests/013.inc19
-rw-r--r--ext/mbstring/tests/013.phpt15
-rw-r--r--ext/mbstring/tests/014.inc23
-rw-r--r--ext/mbstring/tests/014.phpt20
-rw-r--r--ext/mbstring/tests/015.inc127
-rw-r--r--ext/mbstring/tests/015.phpt36
-rw-r--r--ext/mbstring/tests/016.inc102
-rw-r--r--ext/mbstring/tests/016.phpt35
-rw-r--r--ext/mbstring/tests/017.inc91
-rw-r--r--ext/mbstring/tests/017.phpt30
-rw-r--r--ext/mbstring/tests/018.inc24
-rw-r--r--ext/mbstring/tests/018.phpt10
-rw-r--r--ext/mbstring/tests/019.inc68
-rw-r--r--ext/mbstring/tests/019.phpt38
-rw-r--r--ext/mbstring/tests/common.inc53
-rw-r--r--ext/mbstring/tests/skipif.inc11
-rw-r--r--ext/mbstring/unicode_table.h347
-rw-r--r--ext/mbstring/unicode_table_cn.h6463
-rw-r--r--ext/mbstring/unicode_table_ja.h5961
-rw-r--r--ext/mbstring/unicode_table_kr.h6934
-rw-r--r--ext/mbstring/unicode_table_ru.h69
-rw-r--r--ext/mbstring/unicode_table_tw.h11215
-rw-r--r--ext/mcal/CREDITS2
-rw-r--r--ext/mcal/config.m445
-rw-r--r--ext/mcal/php_mcal.c1631
-rw-r--r--ext/mcal/php_mcal.h68
-rw-r--r--ext/mcrypt/CREDITS2
-rw-r--r--ext/mcrypt/TODO6
-rw-r--r--ext/mcrypt/config.m451
-rw-r--r--ext/mcrypt/mcrypt.c1646
-rw-r--r--ext/mcrypt/mcrypt.dsp117
-rw-r--r--ext/mcrypt/php_mcrypt.h106
-rw-r--r--ext/mcrypt/tests/001.phpt32
-rw-r--r--ext/mcve/CREDITS2
-rw-r--r--ext/mcve/config.m425
-rw-r--r--ext/mcve/mcve.c1712
-rw-r--r--ext/mcve/mcve.php12
-rw-r--r--ext/mcve/mcve_simple_test.php19
-rw-r--r--ext/mcve/mcve_test1.php83
-rw-r--r--ext/mcve/mcve_test2.php68
-rw-r--r--ext/mcve/php_mcve.h97
-rw-r--r--ext/mcve/tests/001.phpt23
-rw-r--r--ext/mhash/CREDITS2
-rw-r--r--ext/mhash/config.m425
-rw-r--r--ext/mhash/mhash.c284
-rw-r--r--ext/mhash/mhash.dsp115
-rw-r--r--ext/mhash/php_mhash.h27
-rw-r--r--ext/mime_magic/CREDITS2
-rw-r--r--ext/mime_magic/EXPERIMENTAL0
-rw-r--r--ext/mime_magic/TODO3
-rw-r--r--ext/mime_magic/config.m411
-rw-r--r--ext/mime_magic/mime_magic.c2023
-rw-r--r--ext/mime_magic/php_mime_magic.h426
-rw-r--r--ext/ming/CREDITS2
-rw-r--r--ext/ming/EXPERIMENTAL5
-rw-r--r--ext/ming/config.m434
-rw-r--r--ext/ming/ming.c2844
-rw-r--r--ext/ming/ming.dsp107
-rw-r--r--ext/ming/php_ming.h160
-rw-r--r--ext/mnogosearch/CREDITS2
-rw-r--r--ext/mnogosearch/README17
-rw-r--r--ext/mnogosearch/config.m454
-rw-r--r--ext/mnogosearch/index.php996
-rw-r--r--ext/mnogosearch/php_mnogo.c1688
-rw-r--r--ext/mnogosearch/php_mnogo.h103
-rw-r--r--ext/msession/CREDITS3
-rw-r--r--ext/msession/README33
-rw-r--r--ext/msession/config.m434
-rw-r--r--ext/msession/msession-test.php125
-rw-r--r--ext/msession/msession.c1268
-rw-r--r--ext/msession/msession.php10
-rw-r--r--ext/msession/php_msession.h107
-rw-r--r--ext/msession/reqclient.h153
-rw-r--r--ext/msql/CREDITS2
-rw-r--r--ext/msql/config.m442
-rw-r--r--ext/msql/msql.dsp107
-rw-r--r--ext/msql/php_msql.c1321
-rw-r--r--ext/msql/php_msql.h82
-rw-r--r--ext/mssql/CREDITS2
-rw-r--r--ext/mssql/mssql.dsp117
-rw-r--r--ext/mssql/mssql_win32_howto.txt35
-rw-r--r--ext/mssql/php_mssql.c2145
-rw-r--r--ext/mssql/php_mssql.h161
-rw-r--r--ext/mysql/CREDITS2
-rw-r--r--ext/mysql/config.m4133
-rw-r--r--ext/mysql/libmysql/acinclude.m4380
-rw-r--r--ext/mysql/libmysql/array.c163
-rw-r--r--ext/mysql/libmysql/bchange.c25
-rw-r--r--ext/mysql/libmysql/bmove.c63
-rw-r--r--ext/mysql/libmysql/bmove_upp.c37
-rw-r--r--ext/mysql/libmysql/charset.c551
-rw-r--r--ext/mysql/libmysql/config-win.h293
-rw-r--r--ext/mysql/libmysql/ctype.c54
-rw-r--r--ext/mysql/libmysql/ctype_autoconf.c44
-rw-r--r--ext/mysql/libmysql/ctype_extra_sources.c82
-rw-r--r--ext/mysql/libmysql/dbug.c2076
-rw-r--r--ext/mysql/libmysql/dbug.h80
-rw-r--r--ext/mysql/libmysql/default.c384
-rw-r--r--ext/mysql/libmysql/dll.c98
-rw-r--r--ext/mysql/libmysql/errmsg.c68
-rw-r--r--ext/mysql/libmysql/errmsg.h41
-rw-r--r--ext/mysql/libmysql/errors.c78
-rwxr-xr-xext/mysql/libmysql/fix_copyright35
-rw-r--r--ext/mysql/libmysql/get_password.c198
-rw-r--r--ext/mysql/libmysql/global.h917
-rw-r--r--ext/mysql/libmysql/int2str.c141
-rw-r--r--ext/mysql/libmysql/is_prefix.c20
-rw-r--r--ext/mysql/libmysql/libmysql.c2566
-rw-r--r--ext/mysql/libmysql/libmysql.dsp585
-rw-r--r--ext/mysql/libmysql/list.c102
-rw-r--r--ext/mysql/libmysql/longlong2str.c129
-rw-r--r--ext/mysql/libmysql/m_ctype.h144
-rw-r--r--ext/mysql/libmysql/m_string.h227
-rw-r--r--ext/mysql/libmysql/mf_casecnv.c238
-rw-r--r--ext/mysql/libmysql/mf_dirname.c92
-rw-r--r--ext/mysql/libmysql/mf_fn_ext.c32
-rw-r--r--ext/mysql/libmysql/mf_format.c142
-rw-r--r--ext/mysql/libmysql/mf_loadpath.c40
-rw-r--r--ext/mysql/libmysql/mf_pack.c518
-rw-r--r--ext/mysql/libmysql/mf_path.c106
-rw-r--r--ext/mysql/libmysql/mf_unixpath.c19
-rw-r--r--ext/mysql/libmysql/mf_wcomp.c54
-rw-r--r--ext/mysql/libmysql/mulalloc.c39
-rw-r--r--ext/mysql/libmysql/my_alarm.h46
-rw-r--r--ext/mysql/libmysql/my_alloc.c140
-rw-r--r--ext/mysql/libmysql/my_compress.c73
-rw-r--r--ext/mysql/libmysql/my_config.h15
-rw-r--r--ext/mysql/libmysql/my_create.c50
-rw-r--r--ext/mysql/libmysql/my_delete.c22
-rw-r--r--ext/mysql/libmysql/my_dir.h86
-rw-r--r--ext/mysql/libmysql/my_div.c17
-rw-r--r--ext/mysql/libmysql/my_error.c110
-rw-r--r--ext/mysql/libmysql/my_fopen.c160
-rw-r--r--ext/mysql/libmysql/my_getwd.c172
-rw-r--r--ext/mysql/libmysql/my_init.c312
-rw-r--r--ext/mysql/libmysql/my_lib.c597
-rw-r--r--ext/mysql/libmysql/my_list.h33
-rw-r--r--ext/mysql/libmysql/my_malloc.c70
-rw-r--r--ext/mysql/libmysql/my_messnc.c22
-rw-r--r--ext/mysql/libmysql/my_net.c35
-rw-r--r--ext/mysql/libmysql/my_net.h27
-rw-r--r--ext/mysql/libmysql/my_once.c74
-rw-r--r--ext/mysql/libmysql/my_open.c113
-rw-r--r--ext/mysql/libmysql/my_pthread.c462
-rw-r--r--ext/mysql/libmysql/my_pthread.h565
-rw-r--r--ext/mysql/libmysql/my_read.c52
-rw-r--r--ext/mysql/libmysql/my_realloc.c51
-rw-r--r--ext/mysql/libmysql/my_static.c86
-rw-r--r--ext/mysql/libmysql/my_static.h56
-rw-r--r--ext/mysql/libmysql/my_sys.h589
-rw-r--r--ext/mysql/libmysql/my_tempnam.c128
-rw-r--r--ext/mysql/libmysql/my_thr_init.c212
-rw-r--r--ext/mysql/libmysql/my_wincond.c128
-rw-r--r--ext/mysql/libmysql/my_winthread.c105
-rw-r--r--ext/mysql/libmysql/my_write.c75
-rw-r--r--ext/mysql/libmysql/mysql.h294
-rw-r--r--ext/mysql/libmysql/mysql.m416
-rw-r--r--ext/mysql/libmysql/mysql_com.h225
-rw-r--r--ext/mysql/libmysql/mysql_version.h27
-rw-r--r--ext/mysql/libmysql/mysqld_error.h211
-rw-r--r--ext/mysql/libmysql/mysys_err.h47
-rw-r--r--ext/mysql/libmysql/mysys_priv.h18
-rw-r--r--ext/mysql/libmysql/net.c664
-rw-r--r--ext/mysql/libmysql/password.c178
-rw-r--r--ext/mysql/libmysql/raid.h147
-rw-r--r--ext/mysql/libmysql/safemalloc.c510
-rw-r--r--ext/mysql/libmysql/stamp-h.in1
-rw-r--r--ext/mysql/libmysql/str2int.c188
-rw-r--r--ext/mysql/libmysql/strcend.c42
-rw-r--r--ext/mysql/libmysql/strcont.c32
-rw-r--r--ext/mysql/libmysql/strend.c33
-rw-r--r--ext/mysql/libmysql/strfill.c22
-rw-r--r--ext/mysql/libmysql/string.c113
-rw-r--r--ext/mysql/libmysql/strinstr.c36
-rw-r--r--ext/mysql/libmysql/strmake.c39
-rw-r--r--ext/mysql/libmysql/strmov.c45
-rw-r--r--ext/mysql/libmysql/strnmov.c22
-rw-r--r--ext/mysql/libmysql/strto.c190
-rw-r--r--ext/mysql/libmysql/strtoll.c11
-rw-r--r--ext/mysql/libmysql/strtoull.c12
-rw-r--r--ext/mysql/libmysql/strxmov.c33
-rw-r--r--ext/mysql/libmysql/thr_alarm.h98
-rw-r--r--ext/mysql/libmysql/thr_mutex.c217
-rw-r--r--ext/mysql/libmysql/typelib.c92
-rwxr-xr-xext/mysql/libmysql/update_sources103
-rw-r--r--ext/mysql/libmysql/violite.c411
-rw-r--r--ext/mysql/libmysql/violite.h103
-rw-r--r--ext/mysql/mysql.dsp171
-rw-r--r--ext/mysql/php_mysql.c2288
-rw-r--r--ext/mysql/php_mysql.h122
-rw-r--r--ext/ncurses/CREDITS2
-rw-r--r--ext/ncurses/EXPERIMENTAL0
-rw-r--r--ext/ncurses/c-prototypes263
-rw-r--r--ext/ncurses/config.m455
-rw-r--r--ext/ncurses/example1.php28
-rw-r--r--ext/ncurses/ncurses.c306
-rw-r--r--ext/ncurses/ncurses.php10
-rw-r--r--ext/ncurses/ncurses_fe.c175
-rw-r--r--ext/ncurses/ncurses_functions.c1746
-rw-r--r--ext/ncurses/php_ncurses.h78
-rw-r--r--ext/ncurses/php_ncurses_fe.h161
-rw-r--r--ext/ncurses/tests/001.phpt23
-rw-r--r--ext/notes/notes.dsp202
-rw-r--r--ext/notes/notes.dsw29
-rw-r--r--ext/notes/php_notes.c2712
-rw-r--r--ext/notes/php_notes.h47
-rw-r--r--ext/oci8/CREDITS2
-rw-r--r--ext/oci8/config.m486
-rw-r--r--ext/oci8/oci8.c5356
-rw-r--r--ext/oci8/oci8.dsp113
-rw-r--r--ext/oci8/oci8.dsw29
-rw-r--r--ext/oci8/php_oci8.h214
-rw-r--r--ext/odbc/CREDITS2
-rw-r--r--ext/odbc/birdstep.c715
-rw-r--r--ext/odbc/config.m4552
-rw-r--r--ext/odbc/php_birdstep.h92
-rw-r--r--ext/odbc/php_odbc.c3552
-rw-r--r--ext/odbc/php_odbc.h356
-rw-r--r--ext/openssl/CREDITS2
-rw-r--r--ext/openssl/EXPERIMENTAL5
-rw-r--r--ext/openssl/README321
-rw-r--r--ext/openssl/config.m410
-rw-r--r--ext/openssl/openssl.c2843
-rw-r--r--ext/openssl/openssl.dsp107
-rw-r--r--ext/openssl/php_openssl.h81
-rw-r--r--ext/openssl/tests/001.phpt64
-rw-r--r--ext/openssl/tests/skipif.inc11
-rw-r--r--ext/oracle/CREDITS2
-rw-r--r--ext/oracle/config.m4160
-rw-r--r--ext/oracle/oracle.c1791
-rw-r--r--ext/oracle/oracle.dsp113
-rw-r--r--ext/oracle/php_oracle.h137
-rw-r--r--ext/overload/CREDITS2
-rw-r--r--ext/overload/README94
-rw-r--r--ext/overload/config.m411
-rw-r--r--ext/overload/overload.c706
-rw-r--r--ext/overload/overload.dsp108
-rw-r--r--ext/overload/php_overload.h65
-rw-r--r--ext/ovrimos/CREDITS2
-rw-r--r--ext/ovrimos/config.m428
-rw-r--r--ext/ovrimos/ovrimos.c1326
-rw-r--r--ext/ovrimos/php_ovrimos.h44
-rw-r--r--ext/pcntl/CREDITS2
-rw-r--r--ext/pcntl/EXPERIMENTAL5
-rw-r--r--ext/pcntl/README16
-rw-r--r--ext/pcntl/config.m418
-rwxr-xr-xext/pcntl/pcntl.c652
-rw-r--r--ext/pcntl/php_pcntl.h84
-rw-r--r--ext/pcntl/php_signal.c46
-rw-r--r--ext/pcntl/php_signal.h28
-rwxr-xr-xext/pcntl/test-pcntl.php35
-rw-r--r--ext/pcntl/tests/001.phpt81
-rw-r--r--ext/pcre/CREDITS2
-rw-r--r--ext/pcre/config.m455
-rw-r--r--ext/pcre/config0.m455
-rw-r--r--ext/pcre/pcrelib/AUTHORS6
-rw-r--r--ext/pcre/pcrelib/COPYING46
-rw-r--r--ext/pcre/pcrelib/ChangeLog655
-rw-r--r--ext/pcre/pcrelib/INSTALL185
-rw-r--r--ext/pcre/pcrelib/LICENCE46
-rw-r--r--ext/pcre/pcrelib/NEWS54
-rw-r--r--ext/pcre/pcrelib/NON-UNIX-USE50
-rw-r--r--ext/pcre/pcrelib/README270
-rwxr-xr-xext/pcre/pcrelib/RunTest148
-rw-r--r--ext/pcre/pcrelib/chartables.c183
-rw-r--r--ext/pcre/pcrelib/dftables.c148
-rw-r--r--ext/pcre/pcrelib/dll.mk60
-rw-r--r--ext/pcre/pcrelib/doc/Tech.Notes243
-rw-r--r--ext/pcre/pcrelib/doc/pcre.31810
-rw-r--r--ext/pcre/pcrelib/doc/pcre.html2397
-rw-r--r--ext/pcre/pcrelib/doc/pcre.txt2125
-rw-r--r--ext/pcre/pcrelib/doc/pcregrep.176
-rw-r--r--ext/pcre/pcrelib/doc/pcregrep.html105
-rw-r--r--ext/pcre/pcrelib/doc/pcregrep.txt87
-rw-r--r--ext/pcre/pcrelib/doc/pcreposix.3149
-rw-r--r--ext/pcre/pcrelib/doc/pcreposix.html191
-rw-r--r--ext/pcre/pcrelib/doc/pcreposix.txt159
-rw-r--r--ext/pcre/pcrelib/doc/pcretest.txt246
-rw-r--r--ext/pcre/pcrelib/doc/perltest.txt29
-rw-r--r--ext/pcre/pcrelib/get.c227
-rw-r--r--ext/pcre/pcrelib/internal.h385
-rw-r--r--ext/pcre/pcrelib/maketables.c132
-rw-r--r--ext/pcre/pcrelib/pcre-config.in59
-rw-r--r--ext/pcre/pcrelib/pcre.c5151
-rw-r--r--ext/pcre/pcrelib/pcre.def19
-rw-r--r--ext/pcre/pcrelib/pcre.h111
-rw-r--r--ext/pcre/pcrelib/pcregrep.c228
-rw-r--r--ext/pcre/pcrelib/pcreposix.c280
-rw-r--r--ext/pcre/pcrelib/pcreposix.h88
-rw-r--r--ext/pcre/pcrelib/pcretest.c1225
-rwxr-xr-xext/pcre/pcrelib/perltest169
-rwxr-xr-xext/pcre/pcrelib/perltest8208
-rw-r--r--ext/pcre/pcrelib/study.c397
-rw-r--r--ext/pcre/pcrelib/testdata/testinput11922
-rw-r--r--ext/pcre/pcrelib/testdata/testinput2712
-rw-r--r--ext/pcre/pcrelib/testdata/testinput31724
-rw-r--r--ext/pcre/pcrelib/testdata/testinput465
-rw-r--r--ext/pcre/pcrelib/testdata/testinput5118
-rw-r--r--ext/pcre/pcrelib/testdata/testinput652
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput12966
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput22075
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput32991
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput4116
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput5242
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput6185
-rw-r--r--ext/pcre/php_pcre.c1465
-rw-r--r--ext/pcre/php_pcre.h78
-rw-r--r--ext/pdf/CREDITS2
-rw-r--r--ext/pdf/config.m4124
-rw-r--r--ext/pdf/pdf.c3219
-rw-r--r--ext/pdf/pdf.dsp114
-rw-r--r--ext/pdf/php_pdf.h179
-rw-r--r--ext/pfpro/CREDITS2
-rw-r--r--ext/pfpro/TODO12
-rw-r--r--ext/pfpro/config.m464
-rw-r--r--ext/pfpro/pfpro.c600
-rw-r--r--ext/pfpro/php_pfpro.h86
-rw-r--r--ext/pgsql/CREDITS2
-rw-r--r--ext/pgsql/README223
-rw-r--r--ext/pgsql/config.m472
-rw-r--r--ext/pgsql/pgsql.c4286
-rw-r--r--ext/pgsql/pgsql.dsp167
-rw-r--r--ext/pgsql/php_pgsql.h257
-rw-r--r--ext/pgsql/tests/01createdb.phpt10
-rw-r--r--ext/pgsql/tests/02connection.phpt10
-rw-r--r--ext/pgsql/tests/03sync_query.phpt10
-rw-r--r--ext/pgsql/tests/04async_query.phpt10
-rw-r--r--ext/pgsql/tests/05large_object.phpt11
-rw-r--r--ext/pgsql/tests/06copy.phpt10
-rw-r--r--ext/pgsql/tests/07optional.phpt10
-rw-r--r--ext/pgsql/tests/08escape.phpt14
-rw-r--r--ext/pgsql/tests/09notice.phpt13
-rw-r--r--ext/pgsql/tests/10pg_convert.phpt17
-rw-r--r--ext/pgsql/tests/11pg_metadata.phpt50
-rw-r--r--ext/pgsql/tests/12pg_insert.phpt11
-rw-r--r--ext/pgsql/tests/13pg_select.phpt22
-rw-r--r--ext/pgsql/tests/14pg_update.phpt11
-rw-r--r--ext/pgsql/tests/15pg_delete.phpt10
-rw-r--r--ext/pgsql/tests/16pg_result_status.phpt11
-rw-r--r--ext/pgsql/tests/17result.phpt40
-rw-r--r--ext/pgsql/tests/98old_api.phpt10
-rw-r--r--ext/pgsql/tests/9999dropdb.phpt10
-rw-r--r--ext/pgsql/tests/async_query.inc59
-rw-r--r--ext/pgsql/tests/config.inc12
-rw-r--r--ext/pgsql/tests/connection.inc44
-rw-r--r--ext/pgsql/tests/copy.inc8
-rw-r--r--ext/pgsql/tests/createdb.inc22
-rw-r--r--ext/pgsql/tests/dropdb.inc11
-rw-r--r--ext/pgsql/tests/escape.inc59
-rw-r--r--ext/pgsql/tests/informational.inc47
-rw-r--r--ext/pgsql/tests/large_object.inc49
-rw-r--r--ext/pgsql/tests/notice.inc18
-rw-r--r--ext/pgsql/tests/old_api.inc26
-rw-r--r--ext/pgsql/tests/optional.inc13
-rw-r--r--ext/pgsql/tests/pg_convert.inc14
-rw-r--r--ext/pgsql/tests/pg_delete.inc17
-rw-r--r--ext/pgsql/tests/pg_insert.inc13
-rw-r--r--ext/pgsql/tests/pg_metadata.inc13
-rw-r--r--ext/pgsql/tests/pg_result_status.inc13
-rw-r--r--ext/pgsql/tests/pg_select.inc15
-rw-r--r--ext/pgsql/tests/pg_update.inc15
-rw-r--r--ext/pgsql/tests/php.gifbin3872 -> 0 bytes
-rw-r--r--ext/pgsql/tests/result.inc21
-rw-r--r--ext/pgsql/tests/skipif.inc22
-rw-r--r--ext/pgsql/tests/sync_query.inc47
-rw-r--r--ext/posix/CREDITS2
-rw-r--r--ext/posix/config.m413
-rw-r--r--ext/posix/php_posix.h124
-rw-r--r--ext/posix/posix.c1011
-rw-r--r--ext/pspell/CREDITS2
-rw-r--r--ext/pspell/README51
-rw-r--r--ext/pspell/config.m435
-rw-r--r--ext/pspell/php_pspell.h52
-rw-r--r--ext/pspell/pspell.c821
-rw-r--r--ext/pspell/tests/01pspell_basic.phpt138
-rw-r--r--ext/qtdom/CREDITS2
-rw-r--r--ext/qtdom/EXPERIMENTAL5
-rw-r--r--ext/qtdom/config.m434
-rw-r--r--ext/qtdom/qtdom.c272
-rw-r--r--ext/qtdom/qtdom.h74
-rw-r--r--ext/qtdom/qtdom.php10
-rw-r--r--ext/qtdom/qtdom_qt.cpp371
-rw-r--r--ext/qtdom/qtdom_qt.h67
-rw-r--r--ext/readline/CREDITS2
-rw-r--r--ext/readline/README.libedit4
-rw-r--r--ext/readline/config.m492
-rw-r--r--ext/readline/php_readline.h39
-rw-r--r--ext/readline/readline.c437
-rw-r--r--ext/recode/CREDITS2
-rw-r--r--ext/recode/config.m463
-rw-r--r--ext/recode/php_recode.h39
-rw-r--r--ext/recode/recode.c252
-rw-r--r--ext/rpc/CREDITS2
-rw-r--r--ext/rpc/EXPERIMENTAL5
-rw-r--r--ext/rpc/RPC_HOWTO97
-rw-r--r--ext/rpc/com/CREDITS2
-rw-r--r--ext/rpc/com/TODO28
-rw-r--r--ext/rpc/com/com.c115
-rw-r--r--ext/rpc/com/com_wrapper.c2341
-rw-r--r--ext/rpc/com/com_wrapper.h79
-rw-r--r--ext/rpc/com/conversion.c868
-rw-r--r--ext/rpc/com/conversion.h23
-rw-r--r--ext/rpc/com/dispatch.c626
-rw-r--r--ext/rpc/com/php_com.h74
-rw-r--r--ext/rpc/com/php_variant.h19
-rw-r--r--ext/rpc/com/variant.c341
-rw-r--r--ext/rpc/com/variant.h32
-rw-r--r--ext/rpc/dotnet/CREDITS2
-rw-r--r--ext/rpc/dotnet/EXPERIMENTAL5
-rw-r--r--ext/rpc/dotnet/README32
-rw-r--r--ext/rpc/dotnet/dotnet.cpp237
-rw-r--r--ext/rpc/dotnet/dotnet.dsp167
-rw-r--r--ext/rpc/dotnet/dotnet.php8
-rw-r--r--ext/rpc/dotnet/php_dotnet.h21
-rw-r--r--ext/rpc/handler.h117
-rw-r--r--ext/rpc/java/CREDITS2
-rw-r--r--ext/rpc/java/EXPERIMENTAL5
-rw-r--r--ext/rpc/java/Makefile.frag13
-rw-r--r--ext/rpc/java/README243
-rw-r--r--ext/rpc/java/config.m4133
-rw-r--r--ext/rpc/java/except.php23
-rw-r--r--ext/rpc/java/java.c786
-rw-r--r--ext/rpc/java/java.dsp254
-rw-r--r--ext/rpc/java/jawt.php27
-rw-r--r--ext/rpc/java/jver.php17
-rw-r--r--ext/rpc/java/reflect.java419
-rw-r--r--ext/rpc/layer.h12
-rw-r--r--ext/rpc/php_rpc.h40
-rw-r--r--ext/rpc/rpc.c847
-rw-r--r--ext/rpc/rpc.h124
-rw-r--r--ext/rpc/rpc_proxy.c136
-rw-r--r--ext/rpc/rpc_proxy.h4
-rw-r--r--ext/rpc/tests/test1.php39
-rw-r--r--ext/rpc/xmlrpc/CREDITS2
-rw-r--r--ext/rpc/xmlrpc/EXPERIMENTAL5
-rw-r--r--ext/rpc/xmlrpc/config.m482
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/README17
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/acinclude.m432
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/base64.c193
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/base64.h38
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/encodings.c109
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/encodings.h46
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/queue.c981
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/queue.h89
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/simplestring.c234
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/simplestring.h75
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/system_methods.c371
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/system_methods_private.h91
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_element.c714
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_element.h202
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.c319
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.h44
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.c673
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.h44
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.c390
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.h45
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc.c2798
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc.h441
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc.m412
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.c594
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.h101
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h106
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc_private.h178
-rw-r--r--ext/rpc/xmlrpc/libxmlrpc/xmlrpc_win32.h11
-rw-r--r--ext/rpc/xmlrpc/php_xmlrpc.h119
-rw-r--r--ext/rpc/xmlrpc/xmlrpc-epi-php.c1464
-rw-r--r--ext/rpc/xmlrpc/xmlrpc.dsp211
-rw-r--r--ext/satellite/CREDITS2
-rw-r--r--ext/satellite/EXPERIMENTAL5
-rw-r--r--ext/satellite/README8
-rw-r--r--ext/session/CREDITS2
-rw-r--r--ext/session/config.m435
-rw-r--r--ext/session/mod_files.c349
-rw-r--r--ext/session/mod_files.h27
-rw-r--r--ext/session/mod_files.sh16
-rw-r--r--ext/session/mod_mm.c446
-rw-r--r--ext/session/mod_mm.h41
-rw-r--r--ext/session/mod_user.c184
-rw-r--r--ext/session/mod_user.h39
-rw-r--r--ext/session/php_session.h221
-rw-r--r--ext/session/session.c1489
-rw-r--r--ext/session/tests/001.phpt31
-rw-r--r--ext/session/tests/002.phpt12
-rw-r--r--ext/session/tests/003.phpt40
-rw-r--r--ext/session/tests/004.phpt108
-rw-r--r--ext/session/tests/005.phpt144
-rw-r--r--ext/session/tests/006.phpt68
-rw-r--r--ext/session/tests/skipif.inc13
-rw-r--r--ext/shmop/CREDITS2
-rw-r--r--ext/shmop/README69
-rw-r--r--ext/shmop/config.m48
-rw-r--r--ext/shmop/php_shmop.h84
-rw-r--r--ext/shmop/shmop.c380
-rw-r--r--ext/shmop/shmop.dsp107
-rw-r--r--ext/skeleton/CREDITS1
-rw-r--r--ext/skeleton/EXPERIMENTAL0
-rwxr-xr-xext/skeleton/create_stubs282
-rw-r--r--ext/skeleton/php_skeleton.h56
-rw-r--r--ext/skeleton/skeleton.c167
-rw-r--r--ext/skeleton/skeleton.php19
-rw-r--r--ext/skeleton/tests/001.phpt23
-rw-r--r--ext/snmp/CREDITS2
-rw-r--r--ext/snmp/config.m484
-rw-r--r--ext/snmp/php_snmp.h49
-rw-r--r--ext/snmp/snmp.c453
-rw-r--r--ext/snmp/snmp.dsp109
-rw-r--r--ext/snmp/winsnmp.c252
-rw-r--r--ext/sockets/CREDITS2
-rw-r--r--ext/sockets/EXPERIMENTAL5
-rw-r--r--ext/sockets/config.m421
-rw-r--r--ext/sockets/php_sockets.h127
-rw-r--r--ext/sockets/php_sockets_win.c177
-rw-r--r--ext/sockets/php_sockets_win.h82
-rw-r--r--ext/sockets/sockets.c1994
-rw-r--r--ext/sockets/sockets.dsp117
-rw-r--r--ext/sockets/sockets.php10
-rw-r--r--ext/standard/CREDITS3
-rw-r--r--ext/standard/Makefile.frag9
-rw-r--r--ext/standard/aggregation.c646
-rw-r--r--ext/standard/aggregation.h51
-rw-r--r--ext/standard/array.c3374
-rw-r--r--ext/standard/assert.c301
-rw-r--r--ext/standard/base64.c245
-rw-r--r--ext/standard/base64.h37
-rw-r--r--ext/standard/basic_functions.c2591
-rw-r--r--ext/standard/basic_functions.h209
-rw-r--r--ext/standard/browscap.c270
-rw-r--r--ext/standard/config.m4244
-rw-r--r--ext/standard/crc32.c52
-rw-r--r--ext/standard/crc32.h109
-rw-r--r--ext/standard/credits.c125
-rw-r--r--ext/standard/credits.h42
-rw-r--r--ext/standard/credits_ext.h98
-rw-r--r--ext/standard/credits_sapi.h28
-rw-r--r--ext/standard/crypt.c173
-rw-r--r--ext/standard/cyr_convert.c299
-rw-r--r--ext/standard/cyr_convert.h29
-rw-r--r--ext/standard/datetime.c854
-rw-r--r--ext/standard/datetime.h45
-rw-r--r--ext/standard/dir.c379
-rw-r--r--ext/standard/dl.c269
-rw-r--r--ext/standard/dl.h34
-rw-r--r--ext/standard/dns.c355
-rw-r--r--ext/standard/dns.h41
-rw-r--r--ext/standard/exec.c1008
-rw-r--r--ext/standard/exec.h38
-rw-r--r--ext/standard/file.c2282
-rw-r--r--ext/standard/file.h128
-rw-r--r--ext/standard/filestat.c873
-rw-r--r--ext/standard/flock_compat.c225
-rw-r--r--ext/standard/flock_compat.h49
-rw-r--r--ext/standard/formatted_print.c720
-rw-r--r--ext/standard/fsock.c275
-rw-r--r--ext/standard/fsock.h46
-rw-r--r--ext/standard/ftok.c66
-rw-r--r--ext/standard/ftp_fopen_wrapper.c329
-rw-r--r--ext/standard/head.c177
-rw-r--r--ext/standard/head.h32
-rw-r--r--ext/standard/html.c872
-rw-r--r--ext/standard/html.h41
-rw-r--r--ext/standard/http_fopen_wrapper.c382
-rw-r--r--ext/standard/image.c841
-rw-r--r--ext/standard/incomplete_class.c151
-rw-r--r--ext/standard/info.c662
-rw-r--r--ext/standard/info.h80
-rw-r--r--ext/standard/iptc.c393
-rw-r--r--ext/standard/lcg.c126
-rw-r--r--ext/standard/levenshtein.c155
-rw-r--r--ext/standard/link.c173
-rw-r--r--ext/standard/mail.c232
-rw-r--r--ext/standard/math.c1068
-rw-r--r--ext/standard/md5.c437
-rw-r--r--ext/standard/md5.h65
-rw-r--r--ext/standard/metaphone.c483
-rw-r--r--ext/standard/microtime.c149
-rw-r--r--ext/standard/microtime.h28
-rw-r--r--ext/standard/pack.c903
-rw-r--r--ext/standard/pack.h28
-rw-r--r--ext/standard/pageinfo.c166
-rw-r--r--ext/standard/pageinfo.h35
-rw-r--r--ext/standard/parsedate.y1041
-rw-r--r--ext/standard/php_array.h102
-rw-r--r--ext/standard/php_assert.h32
-rw-r--r--ext/standard/php_browscap.h29
-rw-r--r--ext/standard/php_crypt.h39
-rw-r--r--ext/standard/php_dir.h39
-rw-r--r--ext/standard/php_ext_syslog.h39
-rw-r--r--ext/standard/php_filestat.h78
-rw-r--r--ext/standard/php_fopen_wrapper.c79
-rw-r--r--ext/standard/php_fopen_wrappers.h32
-rw-r--r--ext/standard/php_ftok.h30
-rw-r--r--ext/standard/php_image.h51
-rw-r--r--ext/standard/php_incomplete_class.h62
-rw-r--r--ext/standard/php_iptc.h27
-rw-r--r--ext/standard/php_lcg.h44
-rw-r--r--ext/standard/php_link.h33
-rw-r--r--ext/standard/php_mail.h33
-rw-r--r--ext/standard/php_math.h151
-rw-r--r--ext/standard/php_metaphone.h26
-rw-r--r--ext/standard/php_parsedate.h26
-rw-r--r--ext/standard/php_rand.h50
-rw-r--r--ext/standard/php_smart_str.h143
-rw-r--r--ext/standard/php_smart_str_public.h30
-rw-r--r--ext/standard/php_standard.h70
-rw-r--r--ext/standard/php_string.h156
-rw-r--r--ext/standard/php_type.h41
-rw-r--r--ext/standard/php_var.h66
-rw-r--r--ext/standard/php_versioning.h30
-rw-r--r--ext/standard/quot_print.c128
-rw-r--r--ext/standard/quot_print.h26
-rw-r--r--ext/standard/rand.c414
-rw-r--r--ext/standard/reg.c658
-rw-r--r--ext/standard/reg.h50
-rw-r--r--ext/standard/scanf.c1253
-rw-r--r--ext/standard/scanf.h50
-rw-r--r--ext/standard/soundex.c115
-rw-r--r--ext/standard/string.c3937
-rw-r--r--ext/standard/strnatcmp.c175
-rw-r--r--ext/standard/syslog.c283
-rw-r--r--ext/standard/tests/aggregation/aggregate.lib65
-rw-r--r--ext/standard/tests/aggregation/aggregate.phpt19
-rw-r--r--ext/standard/tests/aggregation/aggregate_methods.phpt25
-rw-r--r--ext/standard/tests/aggregation/aggregate_methods_by_list.phpt22
-rw-r--r--ext/standard/tests/aggregation/aggregate_methods_by_regexp.phpt20
-rw-r--r--ext/standard/tests/aggregation/aggregate_properties.phpt19
-rw-r--r--ext/standard/tests/aggregation/aggregate_properties_by_list.phpt20
-rw-r--r--ext/standard/tests/aggregation/aggregate_properties_by_regexp.phpt20
-rw-r--r--ext/standard/tests/aggregation/aggregation_info.phpt31
-rw-r--r--ext/standard/tests/aggregation/deaggregate.phpt72
-rw-r--r--ext/standard/tests/array/001.phpt153
-rw-r--r--ext/standard/tests/array/002.phpt570
-rw-r--r--ext/standard/tests/array/003.phpt98
-rw-r--r--ext/standard/tests/array/004.phpt59
-rw-r--r--ext/standard/tests/array/array_search.phpt25
-rw-r--r--ext/standard/tests/array/count_recursive.phpt54
-rw-r--r--ext/standard/tests/array/data.inc13
-rw-r--r--ext/standard/tests/assert/assert.phpt39
-rw-r--r--ext/standard/tests/file/001.phpt150
-rw-r--r--ext/standard/tests/file/002.phpt54
-rw-r--r--ext/standard/tests/file/003.inc27
-rw-r--r--ext/standard/tests/file/003.phpt17
-rw-r--r--ext/standard/tests/general_functions/001.phpt55
-rw-r--r--ext/standard/tests/general_functions/002.phpt13
-rw-r--r--ext/standard/tests/general_functions/003.phpt60
-rw-r--r--ext/standard/tests/general_functions/004.data4
-rw-r--r--ext/standard/tests/general_functions/004.phpt18
-rw-r--r--ext/standard/tests/general_functions/005.phpt26
-rw-r--r--ext/standard/tests/general_functions/006.phpt13
-rw-r--r--ext/standard/tests/general_functions/proc_open.phpt29
-rw-r--r--ext/standard/tests/math/abs.phpt26
-rw-r--r--ext/standard/tests/math/floorceil.phpt47
-rw-r--r--ext/standard/tests/math/pow.phpt151
-rw-r--r--ext/standard/tests/math/round.phpt39
-rw-r--r--ext/standard/tests/reg/001.phpt9
-rw-r--r--ext/standard/tests/reg/002.phpt9
-rw-r--r--ext/standard/tests/reg/003.phpt10
-rw-r--r--ext/standard/tests/reg/004.phpt16
-rw-r--r--ext/standard/tests/reg/005.phpt20
-rw-r--r--ext/standard/tests/reg/006.phpt10
-rw-r--r--ext/standard/tests/reg/007.phpt12
-rw-r--r--ext/standard/tests/reg/008.phpt10
-rw-r--r--ext/standard/tests/reg/009.phpt19
-rw-r--r--ext/standard/tests/reg/010.phpt9
-rw-r--r--ext/standard/tests/reg/011.phpt9
-rw-r--r--ext/standard/tests/reg/012.phpt9
-rw-r--r--ext/standard/tests/reg/013.phpt9
-rw-r--r--ext/standard/tests/reg/014.phpt9
-rw-r--r--ext/standard/tests/reg/015.phpt8
-rw-r--r--ext/standard/tests/reg/016.phpt8
-rw-r--r--ext/standard/tests/serialize/001.phpt115
-rw-r--r--ext/standard/tests/serialize/002.phpt36
-rw-r--r--ext/standard/tests/strings/strtr.phpt11
-rw-r--r--ext/standard/tests/strings/trim.phpt29
-rw-r--r--ext/standard/tests/strings/wordwrap.phpt37
-rw-r--r--ext/standard/tests/time/001.phpt24
-rw-r--r--ext/standard/tests/time/002.phpt62
-rw-r--r--ext/standard/tests/versioning/version_compare.phpt600
-rw-r--r--ext/standard/type.c369
-rw-r--r--ext/standard/uniqid.c99
-rw-r--r--ext/standard/uniqid.h26
-rw-r--r--ext/standard/url.c446
-rw-r--r--ext/standard/url.h54
-rw-r--r--ext/standard/url_scanner.c382
-rw-r--r--ext/standard/url_scanner.h54
-rw-r--r--ext/standard/url_scanner_ex.c971
-rw-r--r--ext/standard/url_scanner_ex.h65
-rw-r--r--ext/standard/url_scanner_ex.re487
-rw-r--r--ext/standard/var.c697
-rw-r--r--ext/standard/var_unserializer.c768
-rw-r--r--ext/standard/var_unserializer.re407
-rw-r--r--ext/standard/versioning.c228
-rw-r--r--ext/swf/CREDITS2
-rw-r--r--ext/swf/config.m435
-rw-r--r--ext/swf/php_swf.h119
-rw-r--r--ext/swf/swf.c1267
-rw-r--r--ext/sybase/CREDITS2
-rw-r--r--ext/sybase/config.m430
-rw-r--r--ext/sybase/php_sybase_db.c1429
-rw-r--r--ext/sybase/php_sybase_db.h89
-rw-r--r--ext/sybase_ct/CREDITS2
-rw-r--r--ext/sybase_ct/config.m451
-rw-r--r--ext/sybase_ct/php_sybase_ct.c1715
-rw-r--r--ext/sybase_ct/php_sybase_ct.h112
-rw-r--r--ext/sybase_ct/sybase_ct.dsp114
-rw-r--r--ext/sysvmsg/CREDITS2
-rw-r--r--ext/sysvmsg/EXPERIMENTAL0
-rw-r--r--ext/sysvmsg/config.m49
-rw-r--r--ext/sysvmsg/php_sysvmsg.h69
-rw-r--r--ext/sysvmsg/sysvmsg.c379
-rw-r--r--ext/sysvmsg/tests/001.phpt24
-rw-r--r--ext/sysvsem/CREDITS2
-rw-r--r--ext/sysvsem/config.m429
-rw-r--r--ext/sysvsem/php_sysvsem.h57
-rw-r--r--ext/sysvsem/sysvsem.c418
-rw-r--r--ext/sysvshm/CREDITS2
-rw-r--r--ext/sysvshm/config.m411
-rw-r--r--ext/sysvshm/php_sysvshm.h85
-rw-r--r--ext/sysvshm/sysvshm.c434
-rw-r--r--ext/tokenizer/CREDITS2
-rw-r--r--ext/tokenizer/EXPERIMENTAL0
-rw-r--r--ext/tokenizer/Makefile.frag1
-rw-r--r--ext/tokenizer/config.m412
-rw-r--r--ext/tokenizer/php_tokenizer.h80
-rw-r--r--ext/tokenizer/tokenizer.c518
-rw-r--r--ext/tokenizer/tokenizer.dsp108
-rw-r--r--ext/tokenizer/tokenizer.php35
-rw-r--r--ext/vpopmail/CREDITS2
-rw-r--r--ext/vpopmail/EXPERIMENTAL5
-rw-r--r--ext/vpopmail/README194
-rw-r--r--ext/vpopmail/config.m494
-rw-r--r--ext/vpopmail/php_vpopmail.c938
-rw-r--r--ext/vpopmail/php_vpopmail.h97
-rw-r--r--ext/w32api/CREDITS2
-rw-r--r--ext/w32api/EXPERIMENTAL0
-rw-r--r--ext/w32api/README49
-rw-r--r--ext/w32api/TODO5
-rw-r--r--ext/w32api/examples/uptime.php64
-rw-r--r--ext/w32api/php_w32api.h137
-rw-r--r--ext/w32api/test_dll/dll_test.h31
-rw-r--r--ext/w32api/test_dll/test.php10
-rw-r--r--ext/w32api/test_dll/test_dll.c33
-rw-r--r--ext/w32api/test_dll/test_dll.def2
-rw-r--r--ext/w32api/test_dll/test_dll.dsp110
-rw-r--r--ext/w32api/test_dll/test_dll.dsw29
-rw-r--r--ext/w32api/w32api.c899
-rw-r--r--ext/w32api/w32api.dsp114
-rw-r--r--ext/wddx/CREDITS2
-rw-r--r--ext/wddx/config.m415
-rw-r--r--ext/wddx/php_wddx.h46
-rw-r--r--ext/wddx/php_wddx_api.h66
-rw-r--r--ext/wddx/wddx.c1305
-rw-r--r--ext/xml/CREDITS2
-rw-r--r--ext/xml/config.m448
-rw-r--r--ext/xml/expat/Changes46
-rw-r--r--ext/xml/expat/README72
-rw-r--r--ext/xml/expat/README.php11
-rw-r--r--ext/xml/expat/ascii.h86
-rw-r--r--ext/xml/expat/asciitab.h37
-rw-r--r--ext/xml/expat/expat.h736
-rw-r--r--ext/xml/expat/iasciitab.h38
-rw-r--r--ext/xml/expat/latin1tab.h37
-rw-r--r--ext/xml/expat/nametab.h150
-rw-r--r--ext/xml/expat/utf8tab.h38
-rw-r--r--ext/xml/expat/winconfig.h27
-rw-r--r--ext/xml/expat/xmlparse.c4637
-rw-r--r--ext/xml/expat/xmlrole.c1277
-rw-r--r--ext/xml/expat/xmlrole.h100
-rw-r--r--ext/xml/expat/xmltok.c1568
-rw-r--r--ext/xml/expat/xmltok.h299
-rw-r--r--ext/xml/expat/xmltok_impl.c1770
-rw-r--r--ext/xml/expat/xmltok_impl.h46
-rw-r--r--ext/xml/expat/xmltok_ns.c100
-rw-r--r--ext/xml/php_xml.h154
-rw-r--r--ext/xml/tests/001.phpt97
-rw-r--r--ext/xml/tests/002.phpt91
-rw-r--r--ext/xml/tests/003.phpt90
-rw-r--r--ext/xml/tests/004.phpt60
-rw-r--r--ext/xml/tests/006.phpt14
-rw-r--r--ext/xml/tests/007.phpt42
-rw-r--r--ext/xml/tests/inc.ent1
-rw-r--r--ext/xml/tests/skipif.inc9
-rw-r--r--ext/xml/tests/xmltest.xml20
-rw-r--r--ext/xml/xml.c1623
-rw-r--r--ext/xmlrpc/CREDITS2
-rw-r--r--ext/xmlrpc/EXPERIMENTAL5
-rw-r--r--ext/xmlrpc/config.m482
-rw-r--r--ext/xmlrpc/libxmlrpc/README17
-rw-r--r--ext/xmlrpc/libxmlrpc/acinclude.m432
-rw-r--r--ext/xmlrpc/libxmlrpc/base64.c193
-rw-r--r--ext/xmlrpc/libxmlrpc/base64.h38
-rw-r--r--ext/xmlrpc/libxmlrpc/encodings.c109
-rw-r--r--ext/xmlrpc/libxmlrpc/encodings.h46
-rw-r--r--ext/xmlrpc/libxmlrpc/queue.c981
-rw-r--r--ext/xmlrpc/libxmlrpc/queue.h89
-rw-r--r--ext/xmlrpc/libxmlrpc/simplestring.c234
-rw-r--r--ext/xmlrpc/libxmlrpc/simplestring.h75
-rw-r--r--ext/xmlrpc/libxmlrpc/system_methods.c371
-rw-r--r--ext/xmlrpc/libxmlrpc/system_methods_private.h91
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_element.c714
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_element.h202
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c319
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h44
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_soap.c673
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_soap.h44
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c390
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h45
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.c2798
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.h441
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.m412
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c594
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h101
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h106
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_private.h178
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_win32.h11
-rw-r--r--ext/xmlrpc/php_xmlrpc.h119
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c1464
-rw-r--r--ext/xmlrpc/xmlrpc.dsp211
-rw-r--r--ext/xslt/README.XSLT-BACKENDS284
-rw-r--r--ext/xslt/config.m4111
-rw-r--r--ext/xslt/php_sablot.h131
-rw-r--r--ext/xslt/php_xslt.h63
-rw-r--r--ext/xslt/sablot.c1635
-rw-r--r--ext/xslt/tests/001.phpt12
-rw-r--r--ext/xslt/xslt.c258
-rw-r--r--ext/xslt/xslt.dsp115
-rw-r--r--ext/yaz/CREDITS2
-rw-r--r--ext/yaz/README5
-rw-r--r--ext/yaz/config.m441
-rw-r--r--ext/yaz/php_yaz.c2688
-rw-r--r--ext/yaz/php_yaz.h82
-rw-r--r--ext/yaz/yaz.dsp111
-rw-r--r--ext/yp/CREDITS2
-rw-r--r--ext/yp/config.m415
-rw-r--r--ext/yp/php_yp.h69
-rw-r--r--ext/yp/yp.c418
-rw-r--r--ext/zip/CREDITS2
-rw-r--r--ext/zip/config.m437
-rw-r--r--ext/zip/php_zip.h70
-rw-r--r--ext/zip/tests/001.phpt23
-rw-r--r--ext/zip/zip.c328
-rw-r--r--ext/zip/zip.dsp108
-rw-r--r--ext/zlib/CREDITS2
-rw-r--r--ext/zlib/config0.m452
-rw-r--r--ext/zlib/php_zlib.h77
-rw-r--r--ext/zlib/tests/001.phpt26
-rw-r--r--ext/zlib/tests/002.phpt17
-rw-r--r--ext/zlib/tests/003.phpt16
-rw-r--r--ext/zlib/zlib.c997
-rw-r--r--ext/zlib/zlib.dsp117
-rw-r--r--ext/zlib/zlib_fopen_wrapper.c154
-rw-r--r--ext/zlib/zlib_win32_howto.txt16
1363 files changed, 0 insertions, 426011 deletions
diff --git a/ext/aspell/CREDITS b/ext/aspell/CREDITS
deleted file mode 100644
index 38addc2b8d..0000000000
--- a/ext/aspell/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-aspell
-Rasmus Lerdorf
diff --git a/ext/aspell/aspell.c b/ext/aspell/aspell.c
deleted file mode 100644
index ae6d61d632..0000000000
--- a/ext/aspell/aspell.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#ifdef COMPILE_DL_ASPELL
-#include "phpdl.h"
-#endif
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-
-#if HAVE_ASPELL
-
-#include "php_aspell.h"
-#include <aspell-c.h>
-#include "ext/standard/info.h"
-
-/* {{{ aspell_functions[]
- */
-function_entry aspell_functions[] = {
- PHP_FE(aspell_new, NULL)
- PHP_FE(aspell_check, NULL)
- PHP_FE(aspell_check_raw, NULL)
- PHP_FE(aspell_suggest, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-static int le_aspell;
-
-zend_module_entry aspell_module_entry = {
- STANDARD_MODULE_HEADER,
- "aspell", aspell_functions, PHP_MINIT(aspell), NULL, NULL, NULL, PHP_MINFO(aspell), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_ASPELL
-ZEND_GET_MODULE(aspell)
-#endif
-
-/* {{{ php_aspell_close
- */
-static void php_aspell_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- aspell *sc = (aspell *)rsrc->ptr;
-
- aspell_free(sc);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(aspell)
-{
- le_aspell = zend_register_list_destructors_ex(php_aspell_close, NULL, "aspell", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int aspell_new(string master [, string personal])
- Load a dictionary */
-PHP_FUNCTION(aspell_new)
-{
- pval **master, **personal;
- int argc;
- aspell *sc;
- int ind;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &master, &personal) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(master);
- if(argc==2)
- {
- convert_to_string_ex(personal) ;
- sc=aspell_new(Z_STRVAL_PP(master), Z_STRVAL_PP(personal));
- }
- else
- sc=aspell_new(Z_STRVAL_PP(master), "");
-
- ind = zend_list_insert(sc, le_aspell);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto array aspell_suggest(aspell int, string word)
- Return array of Suggestions */
-PHP_FUNCTION(aspell_suggest)
-{
- pval **scin, **word;
- int argc;
- aspell *sc;
- int ind, type;
- aspellSuggestions *sug;
- size_t i;
-
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin, &word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- sc = (aspell *)zend_list_find(Z_LVAL_PP(scin), &type);
- if(!sc)
- {
- php_error(E_WARNING, "%d is not an ASPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- sug = aspell_suggest(sc, Z_STRVAL_PP(word));
- for (i = 0; i != sug->size; ++i) {
- add_next_index_string(return_value, (char *)sug->data[i], 1);
- }
- aspell_free_suggestions(sug);
-}
-/* }}} */
-
-/* {{{ proto int aspell_check(aspell int, string word)
- Return if word is valid */
-PHP_FUNCTION(aspell_check)
-{
- int type;
- pval **scin, **word;
- aspell *sc;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin, &word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- sc= (aspell *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!sc)
- {
- php_error(E_WARNING, "%d is not an ASPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
- if (aspell_check(sc, Z_STRVAL_PP(word)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int aspell_check_raw(aspell int, string word)
- Return if word is valid, ignoring case or trying to trim it in any way */
-PHP_FUNCTION(aspell_check_raw)
-{
- pval **scin, **word;
- int type;
- int argc;
- aspell *sc;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin, &word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- sc = (aspell *)zend_list_find(Z_LVAL_PP(scin), &type);
- if(!sc)
- {
- php_error(E_WARNING, "%d is not an ASPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
- if (aspell_check_raw(sc, Z_STRVAL_PP(word)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(aspell)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "ASpell Support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/aspell/config.m4 b/ext/aspell/config.m4
deleted file mode 100644
index a82ad6ca02..0000000000
--- a/ext/aspell/config.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for ASPELL support)
-AC_ARG_WITH(aspell,
-[ --with-aspell[=DIR] Include ASPELL support.],
-[
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ASPELL_DIR=/usr/local
- else
- ASPELL_DIR=$withval
- fi
-
- PHP_ADD_INCLUDE($ASPELL_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(aspell, $ASPELL_DIR/lib)
-
- if test ! -f "$ASPELL_DIR/include/aspell-c.h"; then
- AC_MSG_ERROR(Could not find aspell-c.h in $ASPELL_DIR/include - please copy it manually from the aspell sources to $ASPELL_DIR/include)
- fi
- AC_DEFINE(HAVE_ASPELL,1,[Whether you have aspell])
- AC_MSG_RESULT(yes)
- PHP_NEW_EXTENSION(aspell, aspell.c)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
diff --git a/ext/aspell/php_aspell.h b/ext/aspell/php_aspell.h
deleted file mode 100644
index 15461960e2..0000000000
--- a/ext/aspell/php_aspell.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ASPELL_H
-#define PHP_ASPELL_H
-#if HAVE_ASPELL
-extern zend_module_entry aspell_module_entry;
-#define aspell_module_ptr &aspell_module_entry
-
-PHP_MINIT_FUNCTION(aspell);
-PHP_MINFO_FUNCTION(aspell);
-
-PHP_FUNCTION(aspell_new);
-PHP_FUNCTION(aspell_check);
-PHP_FUNCTION(aspell_check_raw);
-PHP_FUNCTION(aspell_suggest);
-
-#else
-#define aspell_module_ptr NULL
-#endif
-
-#define phpext_aspell_ptr aspell_module_ptr
-
-#endif /* PHP_ASPELL_H */
diff --git a/ext/bcmath/CREDITS b/ext/bcmath/CREDITS
deleted file mode 100644
index 7b4083ea13..0000000000
--- a/ext/bcmath/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-BC Math
-Andi Gutmans
diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c
deleted file mode 100644
index c999478da8..0000000000
--- a/ext/bcmath/bcmath.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andi Gutmans <andi@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if WITH_BCMATH
-
-#include "ext/standard/info.h"
-#include "php_bcmath.h"
-#include "ext/bcmath/libbcmath/src/bcmath.h"
-
-function_entry bcmath_functions[] = {
- PHP_FE(bcadd, NULL)
- PHP_FE(bcsub, NULL)
- PHP_FE(bcmul, NULL)
- PHP_FE(bcdiv, NULL)
- PHP_FE(bcmod, NULL)
- PHP_FE(bcpow, NULL)
- PHP_FE(bcsqrt, NULL)
- PHP_FE(bcscale, NULL)
- PHP_FE(bccomp, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry bcmath_module_entry = {
- STANDARD_MODULE_HEADER,
- "bcmath",
- bcmath_functions,
- PHP_MINIT(bcmath),
- PHP_MSHUTDOWN(bcmath),
- PHP_RINIT(bcmath),
- NULL,
- PHP_MINFO(bcmath),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_BCMATH
-ZEND_GET_MODULE(bcmath)
-#endif
-
-#ifndef THREAD_SAFE
-static long bc_precision;
-#endif
-
-/* Storage used for special numbers. */
-bc_num _zero_;
-bc_num _one_;
-bc_num _two_;
-
-
-/* Make a copy of a number! Just increments the reference count! */
-bc_num copy_num (bc_num num)
-{
- num->n_refs++;
- return num;
-}
-
-
-/* Initialize a number NUM by making it a copy of zero. */
-void init_num (bc_num *num)
-{
- *num = copy_num (_zero_);
-}
-
-
-PHP_MINIT_FUNCTION(bcmath)
-{
- extern bc_num _zero_;
- extern bc_num _one_;
- extern bc_num _two_;
-
- _zero_ = bc_new_num (1, 0);
- _one_ = bc_new_num (1, 0);
- _one_->n_value[0] = 1;
- _two_ = bc_new_num (1, 0);
- _two_->n_value[0] = 2;
- persist_alloc(_zero_);
- persist_alloc(_one_);
- persist_alloc(_two_);
- persist_alloc(_zero_->n_ptr);
- persist_alloc(_one_->n_ptr);
- persist_alloc(_two_->n_ptr);
-
- return SUCCESS;
-}
-
-
-
-PHP_MSHUTDOWN_FUNCTION(bcmath)
-{
- bc_free_num(&_zero_);
- bc_free_num(&_one_);
- bc_free_num(&_two_);
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(bcmath)
-{
- if (cfg_get_long("bcmath.scale", &bc_precision)==FAILURE) {
- bc_precision=0;
- }
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(bcmath)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "BCMath support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto string bcadd(string left_operand, string right_operand [, int scale])
- Returns the sum of two arbitrary precision numbers */
-PHP_FUNCTION(bcadd)
-{
- pval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
- bc_init_num(&result);
- bc_str2num(&first, Z_STRVAL_PP(left), scale);
- bc_str2num(&second, Z_STRVAL_PP(right), scale);
- bc_add (first, second, &result, scale);
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcsub(string left_operand, string right_operand [, int scale])
- Returns the difference between two arbitrary precision numbers */
-PHP_FUNCTION(bcsub)
-{
- pval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
- bc_init_num(&result);
- bc_str2num(&first, Z_STRVAL_PP(left), scale);
- bc_str2num(&second, Z_STRVAL_PP(right), scale);
- bc_sub (first, second, &result, scale);
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcmul(string left_operand, string right_operand [, int scale])
- Returns the multiplication of two arbitrary precision numbers */
-PHP_FUNCTION(bcmul)
-{
- pval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
- bc_init_num(&result);
- bc_str2num(&first, Z_STRVAL_PP(left), scale);
- bc_str2num(&second, Z_STRVAL_PP(right), scale);
- bc_multiply (first, second, &result, scale);
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcdiv(string left_operand, string right_operand [, int scale])
- Returns the quotient of two arbitrary precision numbers (division) */
-PHP_FUNCTION(bcdiv)
-{
- pval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
- bc_init_num(&result);
- bc_str2num(&first, Z_STRVAL_PP(left), scale);
- bc_str2num(&second, Z_STRVAL_PP(right), scale);
- switch (bc_divide (first, second, &result, scale)) {
- case 0: /* OK */
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case -1: /* division by zero */
- php_error(E_WARNING, "Division by zero");
- break;
- }
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcmod(string left_operand, string right_operand)
- Returns the modulus of the two arbitrary precision operands */
-PHP_FUNCTION(bcmod)
-{
- pval **left, **right;
- bc_num first, second, result;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
- bc_init_num(&result);
- bc_str2num(&first, Z_STRVAL_PP(left), 0);
- bc_str2num(&second, Z_STRVAL_PP(right), 0);
- switch (bc_modulo(first, second, &result, 0)) {
- case 0:
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case -1:
- php_error(E_WARNING, "Division by zero");
- break;
- }
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcpow(string x, string y [, int scale])
- Returns the value of an arbitrary precision number raised to the power of another */
-PHP_FUNCTION(bcpow)
-{
- pval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
- bc_init_num(&result);
- bc_str2num(&first, Z_STRVAL_PP(left), scale);
- bc_str2num(&second, Z_STRVAL_PP(right), scale);
- bc_raise (first, second, &result, scale);
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcsqrt(string operand [, int scale])
- Returns the square root of an arbitray precision number */
-PHP_FUNCTION(bcsqrt)
-{
- pval **left, **scale_param;
- bc_num result;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &left)== FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &left, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- bc_init_num(&result);
- bc_str2num(&result, Z_STRVAL_PP(left), scale);
- if (bc_sqrt (&result, scale) != 0) {
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- php_error(E_WARNING, "Square root of negative number");
- }
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bccomp(string left_operand, string right_operand [, int scale])
- Compares two arbitrary precision numbers */
-PHP_FUNCTION(bccomp)
-{
- pval **left, **right, **scale_param;
- bc_num first, second;
- int scale=bc_precision;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first);
- bc_init_num(&second);
-
- bc_str2num(&first, Z_STRVAL_PP(left), scale);
- bc_str2num(&second, Z_STRVAL_PP(right), scale);
- Z_LVAL_P(return_value) = bc_compare(first, second);
- Z_TYPE_P(return_value) = IS_LONG;
-
- bc_free_num(&first);
- bc_free_num(&second);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcscale(int scale)
- Sets default scale parameter for all bc math functions */
-PHP_FUNCTION(bcscale)
-{
- pval **new_scale;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &new_scale)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(new_scale);
- bc_precision = Z_LVAL_PP(new_scale);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/bcmath/config.m4 b/ext/bcmath/config.m4
deleted file mode 100644
index a4fbb60030..0000000000
--- a/ext/bcmath/config.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(bcmath, whether to enable bc style precision math functions,
-[ --enable-bcmath Enable bc style precision math functions.])
-
-if test "$PHP_BCMATH" != "no"; then
- AC_DEFINE(WITH_BCMATH, 1, [Whether you have bcmath])
- PHP_NEW_EXTENSION(bcmath, bcmath.c number.c \
-libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/outofmem.c libbcmath/src/raisemod.c libbcmath/src/rt.c libbcmath/src/sub.c \
-libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \
-libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/debug.c libbcmath/src/doaddsub.c libbcmath/src/nearzero.c libbcmath/src/num2str.c libbcmath/src/raise.c \
-libbcmath/src/rmzero.c libbcmath/src/str2num.c,
- $ext_shared,,-I@ext_srcdir@/libbcmath/src)
- PHP_ADD_BUILD_DIR($ext_builddir/libbcmath/src)
-fi
diff --git a/ext/bcmath/libbcmath/AUTHORS b/ext/bcmath/libbcmath/AUTHORS
deleted file mode 100644
index 982db9dc40..0000000000
--- a/ext/bcmath/libbcmath/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Phil Nelson <philnelson@acm.org> wrote bcmath library.
-
-
diff --git a/ext/bcmath/libbcmath/COPYING.LIB b/ext/bcmath/libbcmath/COPYING.LIB
deleted file mode 100644
index c4792dd27a..0000000000
--- a/ext/bcmath/libbcmath/COPYING.LIB
+++ /dev/null
@@ -1,515 +0,0 @@
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-^L
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-^L
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-^L
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-^L
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-^L
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-^L
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply, and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-^L
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-^L
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
- To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-
- <one line to give the library's name and a brief idea of what it
-does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper
-mail.
-
-You should also get your employer (if you work as a programmer) or
-your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James
-Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/ext/bcmath/libbcmath/ChangeLog b/ext/bcmath/libbcmath/ChangeLog
deleted file mode 100644
index b8d459a2bb..0000000000
--- a/ext/bcmath/libbcmath/ChangeLog
+++ /dev/null
@@ -1,10 +0,0 @@
-Wed Jun 7 09:39:02 2000 Phil Nelson <phil@cs.wwu.edu>
-
- * configure.in and many others: version number now at 0.2.
- Many other changes/additions for getting a distribution
- to work.
-
-2000-05-21 Phil Nelson <phil@cs.wwu.edu>
-
- * Initial setup of bcmath library., calling it version 0.1.
-
diff --git a/ext/bcmath/libbcmath/FAQ b/ext/bcmath/libbcmath/FAQ
deleted file mode 100644
index 6499b1cffb..0000000000
--- a/ext/bcmath/libbcmath/FAQ
+++ /dev/null
@@ -1,21 +0,0 @@
-BCMATH FAQ:
-
-1) Why BCMATH?
-
-The math routines of GNU bc become more generally useful in a
-library form. By separating the BCMATH library from GNU bc,
-GNU bc can be under the GPL and BCMATH can be under the LGPL.
-
-2) Why BCMATH when GMP exists?
-
-GMP has "integers" (no digits after a decimal), "rational numbers"
-(stored as 2 integers) and "floats". None of these will correctly
-represent a POSIX BC number. Floats are the closest, but will not
-behave correctly for many computations. For example, BC numbers have
-a "scale" that represent the number of digits to represent after the
-decimal point. The multiplying two of these numbers requires one to
-calculate an exact number of digits after the decimal point regardless
-of the number of digits in the integer part. GMP floats have a
-"fixed, but arbitrary" mantissa and so multiplying two floats will end
-up dropping digits BC must calculate.
-
diff --git a/ext/bcmath/libbcmath/INSTALL b/ext/bcmath/libbcmath/INSTALL
deleted file mode 100644
index 8893a07827..0000000000
--- a/ext/bcmath/libbcmath/INSTALL
+++ /dev/null
@@ -1,9 +0,0 @@
-Currently, only libbcmath.a is built. To build and install it, do
-
- configure
- make
- make install
-
-Typical configure parameters are available. (e.g. PREFIX)
-
-Bugs and comments to philnelson@acm.org.
diff --git a/ext/bcmath/libbcmath/Makefile.am b/ext/bcmath/libbcmath/Makefile.am
deleted file mode 100644
index e5be8201b3..0000000000
--- a/ext/bcmath/libbcmath/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS= src doc
-
-MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in \
- stamp-h.in *~
-
-dist-hook:
- cp $(srcdir)/doc/bcmath.1 $(distdir)/doc
- cp $(srcdir)/src/private.h $(distdir)/src
- cp $(srcdir)/FAQ $(distdir)
-
diff --git a/ext/bcmath/libbcmath/NEWS b/ext/bcmath/libbcmath/NEWS
deleted file mode 100644
index 431d7b315d..0000000000
--- a/ext/bcmath/libbcmath/NEWS
+++ /dev/null
@@ -1,3 +0,0 @@
-NEWS for bcmath library:
-
- May 2000: The library is created.
diff --git a/ext/bcmath/libbcmath/README b/ext/bcmath/libbcmath/README
deleted file mode 100644
index cae5e5dc43..0000000000
--- a/ext/bcmath/libbcmath/README
+++ /dev/null
@@ -1,9 +0,0 @@
-This is bcmath, a library of arbitrary precision math routines.
-These routines, in a different form, are the routines that to
-the arbitrary precision calculations for GNU bc and GNU dc.
-
-This library is provided to make these routines useful in a
-larger context with less restrictions on the use of them.
-
-These routines do not duplicate functionality of the GNU gmp
-library. gmp is similar, but the actual computation is different.
diff --git a/ext/bcmath/libbcmath/acconfig.h b/ext/bcmath/libbcmath/acconfig.h
deleted file mode 100644
index 4d301dcacf..0000000000
--- a/ext/bcmath/libbcmath/acconfig.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/* PACKAGE name */
-#undef PACKAGE
-
-/* Package VERSION number */
-#undef VERSION
-
-/* Define to `size_t' if <sys/types.h> and <stddef.h> don't define. */
-#undef ptrdiff_t
-
diff --git a/ext/bcmath/libbcmath/aclocal.m4 b/ext/bcmath/libbcmath/aclocal.m4
deleted file mode 100644
index f23ba2904e..0000000000
--- a/ext/bcmath/libbcmath/aclocal.m4
+++ /dev/null
@@ -1,127 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4
-
-dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# Do all the work for Automake. This macro actually does too much --
-# some checks are only needed if your package does certain things.
-# But this isn't really a big deal.
-
-# serial 1
-
-dnl Usage:
-dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-
-AC_DEFUN(AM_INIT_AUTOMAKE,
-[AC_REQUIRE([AC_PROG_INSTALL])
-PACKAGE=[$1]
-AC_SUBST(PACKAGE)
-VERSION=[$2]
-AC_SUBST(VERSION)
-dnl test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-ifelse([$3],,
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
-AC_REQUIRE([AM_SANITY_CHECK])
-AC_REQUIRE([AC_ARG_PROGRAM])
-dnl FIXME This is truly gross.
-missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
-AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
-AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
-AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_REQUIRE([AC_PROG_MAKE_SET])])
-
-#
-# Check to make sure that the build environment is sane.
-#
-
-AC_DEFUN(AM_SANITY_CHECK,
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
- if test "[$]*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftestfile`
- fi
- if test "[$]*" != "X $srcdir/configure conftestfile" \
- && test "[$]*" != "X conftestfile $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "[$]2" = conftestfile
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-rm -f conftest*
-AC_MSG_RESULT(yes)])
-
-dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
-dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
-[AC_MSG_CHECKING(for working $2)
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if ($2 --version) < /dev/null > /dev/null 2>&1; then
- $1=$2
- AC_MSG_RESULT(found)
-else
- $1="$3/missing $2"
- AC_MSG_RESULT(missing)
-fi
-AC_SUBST($1)])
-
-# Like AC_CONFIG_HEADER, but automatically create stamp file.
-
-AC_DEFUN(AM_CONFIG_HEADER,
-[AC_PREREQ([2.12])
-AC_CONFIG_HEADER([$1])
-dnl When config.status generates a header, we must update the stamp-h file.
-dnl This file resides in the same directory as the config header
-dnl that is generated. We must strip everything past the first ":",
-dnl and everything past the last "/".
-AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
-ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
-<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
-<<am_indx=1
-for am_file in <<$1>>; do
- case " <<$>>CONFIG_HEADERS " in
- *" <<$>>am_file "*<<)>>
- echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
- ;;
- esac
- am_indx=`expr "<<$>>am_indx" + 1`
-done<<>>dnl>>)
-changequote([,]))])
-
diff --git a/ext/bcmath/libbcmath/config.h.in b/ext/bcmath/libbcmath/config.h.in
deleted file mode 100644
index 21cfb9255f..0000000000
--- a/ext/bcmath/libbcmath/config.h.in
+++ /dev/null
@@ -1,41 +0,0 @@
-/* config.h.in. Generated automatically from configure.in by autoheader. */
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to `size_t' if <sys/types.h> and <stddef.h> don't define. */
-#undef ptrdiff_t
-
-/* Define if you have the <lib.h> header file. */
-#undef HAVE_LIB_H
-
-/* Define if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Name of package */
-#undef PACKAGE
-
-/* Version number of package */
-#undef VERSION
-
diff --git a/ext/bcmath/libbcmath/configure b/ext/bcmath/libbcmath/configure
deleted file mode 100644
index 026fd039c7..0000000000
--- a/ext/bcmath/libbcmath/configure
+++ /dev/null
@@ -1,1859 +0,0 @@
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case "$ac_option" in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir="$ac_optarg" ;;
-
- -disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host="$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)
- 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 ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
-
- -with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "with_${ac_package}='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- 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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
- ;;
-
- *)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
- esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# 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
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=doc/bcmath.1
-
-# 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_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- 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 "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
- else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# 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 "loading site script $ac_site_file"
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-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
- fi
-done
-if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$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
-# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:556: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/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
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
-
-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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:609: checking whether build environment is sane" >&5
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftestfile`
- fi
- if test "$*" != "X $srcdir/configure conftestfile" \
- && test "$*" != "X conftestfile $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" 1>&2; exit 1; }
- fi
-
- test "$2" = conftestfile
- )
-then
- # Ok.
- :
-else
- { echo "configure: error: newly created file is older than distributed files!
-Check your system clock" 1>&2; exit 1; }
-fi
-rm -f conftest*
-echo "$ac_t""yes" 1>&6
-if test "$program_transform_name" = s,x,x,; then
- program_transform_name=
-else
- # Double any \ or $. echo might interpret backslashes.
- cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
- program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
- rm -f conftestsed
-fi
-test "$program_prefix" != NONE &&
- program_transform_name="s,^,${program_prefix},; $program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
-
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 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 conftestmake
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- SET_MAKE=
-else
- echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-PACKAGE="bcmath"
-
-VERSION="0.2"
-
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
-fi
-cat >> confdefs.h <<EOF
-#define PACKAGE "$PACKAGE"
-EOF
-
-cat >> confdefs.h <<EOF
-#define VERSION "$VERSION"
-EOF
-
-
-
-missing_dir=`cd $ac_aux_dir && pwd`
-echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:712: checking for working aclocal" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (aclocal --version) < /dev/null > /dev/null 2>&1; then
- ACLOCAL=aclocal
- echo "$ac_t""found" 1>&6
-else
- ACLOCAL="$missing_dir/missing aclocal"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:725: checking for working autoconf" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (autoconf --version) < /dev/null > /dev/null 2>&1; then
- AUTOCONF=autoconf
- echo "$ac_t""found" 1>&6
-else
- AUTOCONF="$missing_dir/missing autoconf"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:738: checking for working automake" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (automake --version) < /dev/null > /dev/null 2>&1; then
- AUTOMAKE=automake
- echo "$ac_t""found" 1>&6
-else
- AUTOMAKE="$missing_dir/missing automake"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:751: checking for working autoheader" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (autoheader --version) < /dev/null > /dev/null 2>&1; then
- AUTOHEADER=autoheader
- echo "$ac_t""found" 1>&6
-else
- AUTOHEADER="$missing_dir/missing autoheader"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:764: checking for working makeinfo" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
- MAKEINFO=makeinfo
- echo "$ac_t""found" 1>&6
-else
- MAKEINFO="$missing_dir/missing makeinfo"
- echo "$ac_t""missing" 1>&6
-fi
-
-
-
-
-
-
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:784: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:814: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-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 $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:865: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
- ;;
- esac
- fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:897: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext << EOF
-
-#line 908 "configure"
-#include "confdefs.h"
-
-main(){return(0);}
-EOF
-if { (eval echo configure:913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
- fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:944: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
-else
- GCC=
-fi
-
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:972: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
- ac_cv_prog_cc_g=yes
-else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&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
-
-
-# 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
-# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1016: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/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
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
-
-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 "$ac_t""$INSTALL" 1>&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_PROGRAM}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1071: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1099: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 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 conftestmake
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- SET_MAKE=
-else
- echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1127: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 1142 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 1159 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-#line 1176 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-for ac_hdr in stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1210: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1215 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1247: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1252 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* 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;
-}
-
-; return 0; }
-EOF
-if { (eval echo configure:1301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
-if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1322: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1327 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1352 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- 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 <<EOF
-#line 1370 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- 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 <<EOF
-#line 1391 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#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); }
-
-EOF
-if { (eval echo configure:1402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1426: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1431 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_size_t=yes
-else
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
-
-fi
-
-echo $ac_n "checking for ptrdiff_t""... $ac_c" 1>&6
-echo "configure:1459: checking for ptrdiff_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_ptrdiff_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1464 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])ptrdiff_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_ptrdiff_t=yes
-else
- rm -rf conftest*
- ac_cv_type_ptrdiff_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_ptrdiff_t" 1>&6
-if test $ac_cv_type_ptrdiff_t = no; then
- cat >> confdefs.h <<\EOF
-#define ptrdiff_t size_t
-EOF
-
-fi
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# 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. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# 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 \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "Makefile src/Makefile doc/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@PACKAGE@%$PACKAGE%g
-s%@VERSION@%$VERSION%g
-s%@ACLOCAL@%$ACLOCAL%g
-s%@AUTOCONF@%$AUTOCONF%g
-s%@AUTOMAKE@%$AUTOMAKE%g
-s%@AUTOHEADER@%$AUTOHEADER%g
-s%@MAKEINFO@%$MAKEINFO%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@CC@%$CC%g
-s%@RANLIB@%$RANLIB%g
-s%@CPP@%$CPP%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# 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_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
- fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile src/Makefile doc/Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- esac
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# 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='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. 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.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# 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.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
- echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
- else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- fi
- rm -f $ac_file
- mv conftest.h $ac_file
- fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
-
diff --git a/ext/bcmath/libbcmath/configure.in b/ext/bcmath/libbcmath/configure.in
deleted file mode 100644
index 3da89e949f..0000000000
--- a/ext/bcmath/libbcmath/configure.in
+++ /dev/null
@@ -1,18 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(doc/bcmath.1)
-AM_INIT_AUTOMAKE("bcmath", "0.2")
-AM_CONFIG_HEADER(config.h)
-
-AC_PROG_CC
-
-AC_PROG_INSTALL
-AC_PROG_RANLIB
-AC_PROG_MAKE_SET
-
-AC_CHECK_HEADERS(stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h)
-AC_C_CONST
-AC_TYPE_SIZE_T
-AC_CHECK_TYPE(ptrdiff_t, size_t)
-
-AC_OUTPUT(Makefile src/Makefile doc/Makefile)
-
diff --git a/ext/bcmath/libbcmath/install-sh b/ext/bcmath/libbcmath/install-sh
deleted file mode 100644
index ab74c882e9..0000000000
--- a/ext/bcmath/libbcmath/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/ext/bcmath/libbcmath/missing b/ext/bcmath/libbcmath/missing
deleted file mode 100644
index e4b838ca92..0000000000
--- a/ext/bcmath/libbcmath/missing
+++ /dev/null
@@ -1,134 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# 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.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-case "$1" in
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- automake touch all \`Makefile.in' files
- bison touch file \`y.tab.c'
- makeinfo touch the output file
- yacc touch file \`y.tab.c'"
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing - GNU libit 0.0"
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
- aclocal)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`acinclude.m4' or \`configure.in'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`configure.in'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`acconfig.h' or \`configure.in'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- touch config.h.in
- ;;
-
- automake)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print \
- | sed 's/^\(.*\).am$/touch \1.in/' \
- | sh
- ;;
-
- bison|yacc)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- your modified any \`.y' file. For being effective, your
- modifications might require the \`Bison' package. Grab it from
- any GNU archive site."
- touch y.tab.c
- ;;
-
- makeinfo)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
- if test -z "$file"; then
- file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
- fi
- touch $file
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and you do not seem to have it handy on your
- system. You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequirements for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/ext/bcmath/libbcmath/mkinstalldirs b/ext/bcmath/libbcmath/mkinstalldirs
deleted file mode 100644
index cc8783edce..0000000000
--- a/ext/bcmath/libbcmath/mkinstalldirs
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Last modified: 1994-03-25
-# Public domain
-
-errstatus=0
-
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d in ${1+"$@"} ; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
- fi
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/ext/bcmath/libbcmath/src/Makefile.am b/ext/bcmath/libbcmath/src/Makefile.am
deleted file mode 100644
index fab37d785e..0000000000
--- a/ext/bcmath/libbcmath/src/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-# Makefile for bcmath library
-
-lib_LIBRARIES = libbcmath.a
-
-include_HEADERS = bcmath.h
-
-libbcmath_a_SOURCES= add.c compare.c debug.c div.c divmod.c doaddsub.c \
- init.c int2num.c nearzero.c neg.c num2long.c num2str.c output.c \
- raise.c raisemod.c recmul.c rmzero.c sqrt.c str2num.c sub.c zero.c \
- outofmem.c rt.c
-
-INCLUDES = -I$(srcdir) -I..
-
-CFLAGS = @CFLAGS@
-CPPFLAGS = $(INCLUDES) -Wall
-
-MAINTAINERCLEANFILES= Makefile.in $(libbcmath_a_SOURCES) private.h bcmath.h
-
-all: $(bin_LIBRARIES)
-
-clean:
- rm -f $(OBJS) $(LIB) *~
diff --git a/ext/bcmath/libbcmath/src/add.c b/ext/bcmath/libbcmath/src/add.c
deleted file mode 100644
index 3b09af22b2..0000000000
--- a/ext/bcmath/libbcmath/src/add.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* add.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Here is the full add routine that takes care of negative numbers.
- N1 is added to N2 and the result placed into RESULT. SCALE_MIN
- is the minimum scale for the result. */
-
-void
-bc_add (n1, n2, result, scale_min)
- bc_num n1, n2, *result;
- int scale_min;
-{
- bc_num sum = NULL;
- int cmp_res;
- int res_scale;
-
- if (n1->n_sign == n2->n_sign)
- {
- sum = _bc_do_add (n1, n2, scale_min);
- sum->n_sign = n1->n_sign;
- }
- else
- {
- /* subtraction must be done. */
- cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE); /* Compare magnitudes. */
- switch (cmp_res)
- {
- case -1:
- /* n1 is less than n2, subtract n1 from n2. */
- sum = _bc_do_sub (n2, n1, scale_min);
- sum->n_sign = n2->n_sign;
- break;
- case 0:
- /* They are equal! return zero with the correct scale! */
- res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale));
- sum = bc_new_num (1, res_scale);
- memset (sum->n_value, 0, res_scale+1);
- break;
- case 1:
- /* n2 is less than n1, subtract n2 from n1. */
- sum = _bc_do_sub (n1, n2, scale_min);
- sum->n_sign = n1->n_sign;
- }
- }
-
- /* Clean up and return. */
- bc_free_num (result);
- *result = sum;
-}
-
diff --git a/ext/bcmath/libbcmath/src/bcmath.h b/ext/bcmath/libbcmath/src/bcmath.h
deleted file mode 100644
index a6c7627b6b..0000000000
--- a/ext/bcmath/libbcmath/src/bcmath.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/* bcmath.h: bcmath library header. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#ifndef _BCMATH_H_
-#define _BCMATH_H_
-
-typedef enum {PLUS, MINUS} sign;
-
-typedef struct bc_struct *bc_num;
-
-typedef struct bc_struct
- {
- sign n_sign;
- int n_len; /* The number of digits before the decimal point. */
- int n_scale; /* The number of digits after the decimal point. */
- int n_refs; /* The number of pointers to this number. */
- bc_num n_next; /* Linked list for available list. */
- char *n_ptr; /* The pointer to the actual storage.
- If NULL, n_value points to the inside of
- another number (bc_multiply...) and should
- not be "freed." */
- char *n_value; /* The number. Not zero char terminated.
- May not point to the same place as n_ptr as
- in the case of leading zeros generated. */
- } bc_struct;
-
-
-/* The base used in storing the numbers in n_value above.
- Currently this MUST be 10. */
-
-#define BASE 10
-
-/* Some useful macros and constants. */
-
-#define CH_VAL(c) (c - '0')
-#define BCD_CHAR(d) (d + '0')
-
-#ifdef MIN
-#undef MIN
-#undef MAX
-#endif
-#define MAX(a, b) ((a)>(b)?(a):(b))
-#define MIN(a, b) ((a)>(b)?(b):(a))
-#define ODD(a) ((a)&1)
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 0x7ffffff
-#endif
-
-
-/* Global numbers. */
-extern bc_num _zero_;
-extern bc_num _one_;
-extern bc_num _two_;
-
-
-/* Function Prototypes */
-
-/* Define the _PROTOTYPE macro if it is needed. */
-
-#ifndef _PROTOTYPE
-#ifdef __STDC__
-#define _PROTOTYPE(func, args) func args
-#else
-#define _PROTOTYPE(func, args) func()
-#endif
-#endif
-
-_PROTOTYPE(void bc_init_numbers, (void));
-
-_PROTOTYPE(bc_num bc_new_num, (int length, int scale));
-
-_PROTOTYPE(void bc_free_num, (bc_num *num));
-
-_PROTOTYPE(bc_num bc_copy_num, (bc_num num));
-
-_PROTOTYPE(void bc_init_num, (bc_num *num));
-
-_PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale));
-
-_PROTOTYPE(char *bc_num2str, (bc_num num));
-
-_PROTOTYPE(void bc_int2num, (bc_num *num, int val));
-
-_PROTOTYPE(long bc_num2long, (bc_num num));
-
-_PROTOTYPE(int bc_compare, (bc_num n1, bc_num n2));
-
-_PROTOTYPE(char bc_is_zero, (bc_num num));
-
-_PROTOTYPE(char bc_is_near_zero, (bc_num num, int scale));
-
-_PROTOTYPE(char bc_is_neg, (bc_num num));
-
-_PROTOTYPE(void bc_add, (bc_num n1, bc_num n2, bc_num *result, int scale_min));
-
-_PROTOTYPE(void bc_sub, (bc_num n1, bc_num n2, bc_num *result, int scale_min));
-
-_PROTOTYPE(void bc_multiply, (bc_num n1, bc_num n2, bc_num *prod, int scale));
-
-_PROTOTYPE(int bc_divide, (bc_num n1, bc_num n2, bc_num *quot, int scale));
-
-_PROTOTYPE(int bc_modulo, (bc_num num1, bc_num num2, bc_num *result,
- int scale));
-
-_PROTOTYPE(int bc_divmod, (bc_num num1, bc_num num2, bc_num *quot,
- bc_num *rem, int scale));
-
-_PROTOTYPE(int bc_raisemod, (bc_num base, bc_num expo, bc_num mod,
- bc_num *result, int scale));
-
-_PROTOTYPE(void bc_raise, (bc_num num1, bc_num num2, bc_num *result,
- int scale));
-
-_PROTOTYPE(int bc_sqrt, (bc_num *num, int scale));
-
-_PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int),
- int leading_zero));
-
-/* Prototypes needed for external utility routines. */
-
-_PROTOTYPE(void bc_rt_warn, (char *mesg ,...));
-_PROTOTYPE(void bc_rt_error, (char *mesg ,...));
-_PROTOTYPE(void bc_out_of_memory, (void));
-#endif
diff --git a/ext/bcmath/libbcmath/src/compare.c b/ext/bcmath/libbcmath/src/compare.c
deleted file mode 100644
index 2f094a6917..0000000000
--- a/ext/bcmath/libbcmath/src/compare.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* compare.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Compare two bc numbers. Return value is 0 if equal, -1 if N1 is less
- than N2 and +1 if N1 is greater than N2. If USE_SIGN is false, just
- compare the magnitudes. */
-
- int
-_bc_do_compare (n1, n2, use_sign, ignore_last)
- bc_num n1, n2;
- int use_sign;
- int ignore_last;
-{
- char *n1ptr, *n2ptr;
- int count;
-
- /* First, compare signs. */
- if (use_sign && n1->n_sign != n2->n_sign)
- {
- if (n1->n_sign == PLUS)
- return (1); /* Positive N1 > Negative N2 */
- else
- return (-1); /* Negative N1 < Positive N1 */
- }
-
- /* Now compare the magnitude. */
- if (n1->n_len != n2->n_len)
- {
- if (n1->n_len > n2->n_len)
- {
- /* Magnitude of n1 > n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (1);
- else
- return (-1);
- }
- else
- {
- /* Magnitude of n1 < n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (-1);
- else
- return (1);
- }
- }
-
- /* If we get here, they have the same number of integer digits.
- check the integer part and the equal length part of the fraction. */
- count = n1->n_len + MIN (n1->n_scale, n2->n_scale);
- n1ptr = n1->n_value;
- n2ptr = n2->n_value;
-
- while ((count > 0) && (*n1ptr == *n2ptr))
- {
- n1ptr++;
- n2ptr++;
- count--;
- }
- if (ignore_last && count == 1 && n1->n_scale == n2->n_scale)
- return (0);
- if (count != 0)
- {
- if (*n1ptr > *n2ptr)
- {
- /* Magnitude of n1 > n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (1);
- else
- return (-1);
- }
- else
- {
- /* Magnitude of n1 < n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (-1);
- else
- return (1);
- }
- }
-
- /* They are equal up to the last part of the equal part of the fraction. */
- if (n1->n_scale != n2->n_scale)
- {
- if (n1->n_scale > n2->n_scale)
- {
- for (count = n1->n_scale-n2->n_scale; count>0; count--)
- if (*n1ptr++ != 0)
- {
- /* Magnitude of n1 > n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (1);
- else
- return (-1);
- }
- }
- else
- {
- for (count = n2->n_scale-n1->n_scale; count>0; count--)
- if (*n2ptr++ != 0)
- {
- /* Magnitude of n1 < n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (-1);
- else
- return (1);
- }
- }
- }
-
- /* They must be equal! */
- return (0);
-}
-
-
-/* This is the "user callable" routine to compare numbers N1 and N2. */
-
-int
-bc_compare (n1, n2)
- bc_num n1, n2;
-{
- return _bc_do_compare (n1, n2, TRUE, FALSE);
-}
-
diff --git a/ext/bcmath/libbcmath/src/config.h b/ext/bcmath/libbcmath/src/config.h
deleted file mode 100644
index 42c42a8948..0000000000
--- a/ext/bcmath/libbcmath/src/config.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#if PHP_WIN32
-#include "../../../../main/config.w32.h"
-#else
-#include "php_config.h"
-#endif
-
-#include <string.h>
-#include "zend.h"
-#include "zend_alloc.h"
diff --git a/ext/bcmath/libbcmath/src/debug.c b/ext/bcmath/libbcmath/src/debug.c
deleted file mode 100644
index ac1ee4ada7..0000000000
--- a/ext/bcmath/libbcmath/src/debug.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* debug.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* pn prints the number NUM in base 10. */
-
-static void
-out_char (int c)
-{
- putchar(c);
-}
-
-
-void
-pn (num)
- bc_num num;
-{
- bc_out_num (num, 10, out_char, 0);
- out_char ('\n');
-}
-
-
-/* pv prints a character array as if it was a string of bcd digits. */
-void
-pv (name, num, len)
- char *name;
- unsigned char *num;
- int len;
-{
- int i;
- printf ("%s=", name);
- for (i=0; i<len; i++) printf ("%c",BCD_CHAR(num[i]));
- printf ("\n");
-}
diff --git a/ext/bcmath/libbcmath/src/div.c b/ext/bcmath/libbcmath/src/div.c
deleted file mode 100644
index 62f24dd494..0000000000
--- a/ext/bcmath/libbcmath/src/div.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* div.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Some utility routines for the divide: First a one digit multiply.
- NUM (with SIZE digits) is multiplied by DIGIT and the result is
- placed into RESULT. It is written so that NUM and RESULT can be
- the same pointers. */
-
-static void
-_one_mult (num, size, digit, result)
- unsigned char *num;
- int size, digit;
- unsigned char *result;
-{
- int carry, value;
- unsigned char *nptr, *rptr;
-
- if (digit == 0)
- memset (result, 0, size);
- else
- {
- if (digit == 1)
- memcpy (result, num, size);
- else
- {
- /* Initialize */
- nptr = (unsigned char *) (num+size-1);
- rptr = (unsigned char *) (result+size-1);
- carry = 0;
-
- while (size-- > 0)
- {
- value = *nptr-- * digit + carry;
- *rptr-- = value % BASE;
- carry = value / BASE;
- }
-
- if (carry != 0) *rptr = carry;
- }
- }
-}
-
-
-/* The full division routine. This computes N1 / N2. It returns
- 0 if the division is ok and the result is in QUOT. The number of
- digits after the decimal point is SCALE. It returns -1 if division
- by zero is tried. The algorithm is found in Knuth Vol 2. p237. */
-
-int
-bc_divide (n1, n2, quot, scale)
- bc_num n1, n2, *quot;
- int scale;
-{
- bc_num qval;
- unsigned char *num1, *num2;
- unsigned char *ptr1, *ptr2, *n2ptr, *qptr;
- int scale1, val;
- unsigned int len1, len2, scale2, qdigits, extra, count;
- unsigned int qdig, qguess, borrow, carry;
- unsigned char *mval;
- char zero;
- unsigned int norm;
-
- /* Test for divide by zero. */
- if (bc_is_zero (n2)) return -1;
-
- /* Test for divide by 1. If it is we must truncate. */
- if (n2->n_scale == 0)
- {
- if (n2->n_len == 1 && *n2->n_value == 1)
- {
- qval = bc_new_num (n1->n_len, scale);
- qval->n_sign = (n1->n_sign == n2->n_sign ? PLUS : MINUS);
- memset (&qval->n_value[n1->n_len],0,scale);
- memcpy (qval->n_value, n1->n_value,
- n1->n_len + MIN(n1->n_scale,scale));
- bc_free_num (quot);
- *quot = qval;
- }
- }
-
- /* Set up the divide. Move the decimal point on n1 by n2's scale.
- Remember, zeros on the end of num2 are wasted effort for dividing. */
- scale2 = n2->n_scale;
- n2ptr = (unsigned char *) n2->n_value+n2->n_len+scale2-1;
- while ((scale2 > 0) && (*n2ptr-- == 0)) scale2--;
-
- len1 = n1->n_len + scale2;
- scale1 = n1->n_scale - scale2;
- if (scale1 < scale)
- extra = scale - scale1;
- else
- extra = 0;
- num1 = (unsigned char *) emalloc (n1->n_len+n1->n_scale+extra+2);
- if (num1 == NULL) bc_out_of_memory();
- memset (num1, 0, n1->n_len+n1->n_scale+extra+2);
- memcpy (num1+1, n1->n_value, n1->n_len+n1->n_scale);
-
- len2 = n2->n_len + scale2;
- num2 = (unsigned char *) emalloc (len2+1);
- if (num2 == NULL) bc_out_of_memory();
- memcpy (num2, n2->n_value, len2);
- *(num2+len2) = 0;
- n2ptr = num2;
- while (*n2ptr == 0)
- {
- n2ptr++;
- len2--;
- }
-
- /* Calculate the number of quotient digits. */
- if (len2 > len1+scale)
- {
- qdigits = scale+1;
- zero = TRUE;
- }
- else
- {
- zero = FALSE;
- if (len2>len1)
- qdigits = scale+1; /* One for the zero integer part. */
- else
- qdigits = len1-len2+scale+1;
- }
-
- /* Allocate and zero the storage for the quotient. */
- qval = bc_new_num (qdigits-scale,scale);
- memset (qval->n_value, 0, qdigits);
-
- /* Allocate storage for the temporary storage mval. */
- mval = (unsigned char *) emalloc (len2+1);
- if (mval == NULL) bc_out_of_memory ();
-
- /* Now for the full divide algorithm. */
- if (!zero)
- {
- /* Normalize */
- norm = 10 / ((int)*n2ptr + 1);
- if (norm != 1)
- {
- _one_mult (num1, len1+scale1+extra+1, norm, num1);
- _one_mult (n2ptr, len2, norm, n2ptr);
- }
-
- /* Initialize divide loop. */
- qdig = 0;
- if (len2 > len1)
- qptr = (unsigned char *) qval->n_value+len2-len1;
- else
- qptr = (unsigned char *) qval->n_value;
-
- /* Loop */
- while (qdig <= len1+scale-len2)
- {
- /* Calculate the quotient digit guess. */
- if (*n2ptr == num1[qdig])
- qguess = 9;
- else
- qguess = (num1[qdig]*10 + num1[qdig+1]) / *n2ptr;
-
- /* Test qguess. */
- if (n2ptr[1]*qguess >
- (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10
- + num1[qdig+2])
- {
- qguess--;
- /* And again. */
- if (n2ptr[1]*qguess >
- (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10
- + num1[qdig+2])
- qguess--;
- }
-
- /* Multiply and subtract. */
- borrow = 0;
- if (qguess != 0)
- {
- *mval = 0;
- _one_mult (n2ptr, len2, qguess, mval+1);
- ptr1 = (unsigned char *) num1+qdig+len2;
- ptr2 = (unsigned char *) mval+len2;
- for (count = 0; count < len2+1; count++)
- {
- val = (int) *ptr1 - (int) *ptr2-- - borrow;
- if (val < 0)
- {
- val += 10;
- borrow = 1;
- }
- else
- borrow = 0;
- *ptr1-- = val;
- }
- }
-
- /* Test for negative result. */
- if (borrow == 1)
- {
- qguess--;
- ptr1 = (unsigned char *) num1+qdig+len2;
- ptr2 = (unsigned char *) n2ptr+len2-1;
- carry = 0;
- for (count = 0; count < len2; count++)
- {
- val = (int) *ptr1 + (int) *ptr2-- + carry;
- if (val > 9)
- {
- val -= 10;
- carry = 1;
- }
- else
- carry = 0;
- *ptr1-- = val;
- }
- if (carry == 1) *ptr1 = (*ptr1 + 1) % 10;
- }
-
- /* We now know the quotient digit. */
- *qptr++ = qguess;
- qdig++;
- }
- }
-
- /* Clean up and return the number. */
- qval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS );
- if (bc_is_zero (qval)) qval->n_sign = PLUS;
- _bc_rm_leading_zeros (qval);
- bc_free_num (quot);
- *quot = qval;
-
- /* Clean up temporary storage. */
- efree (mval);
- efree (num1);
- efree (num2);
-
- return 0; /* Everything is OK. */
-}
-
diff --git a/ext/bcmath/libbcmath/src/divmod.c b/ext/bcmath/libbcmath/src/divmod.c
deleted file mode 100644
index e62817d00b..0000000000
--- a/ext/bcmath/libbcmath/src/divmod.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* divmod.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Division *and* modulo for numbers. This computes both NUM1 / NUM2 and
- NUM1 % NUM2 and puts the results in QUOT and REM, except that if QUOT
- is NULL then that store will be omitted.
- */
-
-int
-bc_divmod (num1, num2, quot, rem, scale)
- bc_num num1, num2, *quot, *rem;
- int scale;
-{
- bc_num quotient = NULL;
- bc_num temp;
- int rscale;
-
- /* Check for correct numbers. */
- if (bc_is_zero (num2)) return -1;
-
- /* Calculate final scale. */
- rscale = MAX (num1->n_scale, num2->n_scale+scale);
- bc_init_num(&temp);
-
- /* Calculate it. */
- bc_divide (num1, num2, &temp, scale);
- if (quot)
- quotient = bc_copy_num (temp);
- bc_multiply (temp, num2, &temp, rscale);
- bc_sub (num1, temp, rem, rscale);
- bc_free_num (&temp);
-
- if (quot)
- {
- bc_free_num (quot);
- *quot = quotient;
- }
-
- return 0; /* Everything is OK. */
-}
-
-
-/* Modulo for numbers. This computes NUM1 % NUM2 and puts the
- result in RESULT. */
-
-int
-bc_modulo (num1, num2, result, scale)
- bc_num num1, num2, *result;
- int scale;
-{
- return bc_divmod (num1, num2, NULL, result, scale);
-}
-
diff --git a/ext/bcmath/libbcmath/src/doaddsub.c b/ext/bcmath/libbcmath/src/doaddsub.c
deleted file mode 100644
index 5458fc5dfc..0000000000
--- a/ext/bcmath/libbcmath/src/doaddsub.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* doaddsub.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Perform addition: N1 is added to N2 and the value is
- returned. The signs of N1 and N2 are ignored.
- SCALE_MIN is to set the minimum scale of the result. */
-
- bc_num
-_bc_do_add (n1, n2, scale_min)
- bc_num n1, n2;
- int scale_min;
-{
- bc_num sum;
- int sum_scale, sum_digits;
- char *n1ptr, *n2ptr, *sumptr;
- int carry, n1bytes, n2bytes;
- int count;
-
- /* Prepare sum. */
- sum_scale = MAX (n1->n_scale, n2->n_scale);
- sum_digits = MAX (n1->n_len, n2->n_len) + 1;
- sum = bc_new_num (sum_digits, MAX(sum_scale, scale_min));
-
- /* Zero extra digits made by scale_min. */
- if (scale_min > sum_scale)
- {
- sumptr = (char *) (sum->n_value + sum_scale + sum_digits);
- for (count = scale_min - sum_scale; count > 0; count--)
- *sumptr++ = 0;
- }
-
- /* Start with the fraction part. Initialize the pointers. */
- n1bytes = n1->n_scale;
- n2bytes = n2->n_scale;
- n1ptr = (char *) (n1->n_value + n1->n_len + n1bytes - 1);
- n2ptr = (char *) (n2->n_value + n2->n_len + n2bytes - 1);
- sumptr = (char *) (sum->n_value + sum_scale + sum_digits - 1);
-
- /* Add the fraction part. First copy the longer fraction.*/
- if (n1bytes != n2bytes)
- {
- if (n1bytes > n2bytes)
- while (n1bytes>n2bytes)
- { *sumptr-- = *n1ptr--; n1bytes--;}
- else
- while (n2bytes>n1bytes)
- { *sumptr-- = *n2ptr--; n2bytes--;}
- }
-
- /* Now add the remaining fraction part and equal size integer parts. */
- n1bytes += n1->n_len;
- n2bytes += n2->n_len;
- carry = 0;
- while ((n1bytes > 0) && (n2bytes > 0))
- {
- *sumptr = *n1ptr-- + *n2ptr-- + carry;
- if (*sumptr > (BASE-1))
- {
- carry = 1;
- *sumptr -= BASE;
- }
- else
- carry = 0;
- sumptr--;
- n1bytes--;
- n2bytes--;
- }
-
- /* Now add carry the longer integer part. */
- if (n1bytes == 0)
- { n1bytes = n2bytes; n1ptr = n2ptr; }
- while (n1bytes-- > 0)
- {
- *sumptr = *n1ptr-- + carry;
- if (*sumptr > (BASE-1))
- {
- carry = 1;
- *sumptr -= BASE;
- }
- else
- carry = 0;
- sumptr--;
- }
-
- /* Set final carry. */
- if (carry == 1)
- *sumptr += 1;
-
- /* Adjust sum and return. */
- _bc_rm_leading_zeros (sum);
- return sum;
-}
-
-
-/* Perform subtraction: N2 is subtracted from N1 and the value is
- returned. The signs of N1 and N2 are ignored. Also, N1 is
- assumed to be larger than N2. SCALE_MIN is the minimum scale
- of the result. */
-
- bc_num
-_bc_do_sub (n1, n2, scale_min)
- bc_num n1, n2;
- int scale_min;
-{
- bc_num diff;
- int diff_scale, diff_len;
- int min_scale, min_len;
- char *n1ptr, *n2ptr, *diffptr;
- int borrow, count, val;
-
- /* Allocate temporary storage. */
- diff_len = MAX (n1->n_len, n2->n_len);
- diff_scale = MAX (n1->n_scale, n2->n_scale);
- min_len = MIN (n1->n_len, n2->n_len);
- min_scale = MIN (n1->n_scale, n2->n_scale);
- diff = bc_new_num (diff_len, MAX(diff_scale, scale_min));
-
- /* Zero extra digits made by scale_min. */
- if (scale_min > diff_scale)
- {
- diffptr = (char *) (diff->n_value + diff_len + diff_scale);
- for (count = scale_min - diff_scale; count > 0; count--)
- *diffptr++ = 0;
- }
-
- /* Initialize the subtract. */
- n1ptr = (char *) (n1->n_value + n1->n_len + n1->n_scale -1);
- n2ptr = (char *) (n2->n_value + n2->n_len + n2->n_scale -1);
- diffptr = (char *) (diff->n_value + diff_len + diff_scale -1);
-
- /* Subtract the numbers. */
- borrow = 0;
-
- /* Take care of the longer scaled number. */
- if (n1->n_scale != min_scale)
- {
- /* n1 has the longer scale */
- for (count = n1->n_scale - min_scale; count > 0; count--)
- *diffptr-- = *n1ptr--;
- }
- else
- {
- /* n2 has the longer scale */
- for (count = n2->n_scale - min_scale; count > 0; count--)
- {
- val = - *n2ptr-- - borrow;
- if (val < 0)
- {
- val += BASE;
- borrow = 1;
- }
- else
- borrow = 0;
- *diffptr-- = val;
- }
- }
-
- /* Now do the equal length scale and integer parts. */
-
- for (count = 0; count < min_len + min_scale; count++)
- {
- val = *n1ptr-- - *n2ptr-- - borrow;
- if (val < 0)
- {
- val += BASE;
- borrow = 1;
- }
- else
- borrow = 0;
- *diffptr-- = val;
- }
-
- /* If n1 has more digits then n2, we now do that subtract. */
- if (diff_len != min_len)
- {
- for (count = diff_len - min_len; count > 0; count--)
- {
- val = *n1ptr-- - borrow;
- if (val < 0)
- {
- val += BASE;
- borrow = 1;
- }
- else
- borrow = 0;
- *diffptr-- = val;
- }
- }
-
- /* Clean up and return. */
- _bc_rm_leading_zeros (diff);
- return diff;
-}
-
diff --git a/ext/bcmath/libbcmath/src/init.c b/ext/bcmath/libbcmath/src/init.c
deleted file mode 100644
index 4ff00b1102..0000000000
--- a/ext/bcmath/libbcmath/src/init.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* init.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Storage used for special numbers. */
-bc_num _zero_;
-bc_num _one_;
-bc_num _two_;
-
- bc_num _bc_Free_list = NULL;
-
-/* new_num allocates a number and sets fields to known values. */
-
-bc_num
-bc_new_num (length, scale)
- int length, scale;
-{
- bc_num temp;
-
- /* PHP Change: malloc() -> emalloc(), removed free_list code */
- temp = (bc_num) emalloc (sizeof(bc_struct)+length+scale);
-#if 0
- if (_bc_Free_list != NULL) {
- temp = _bc_Free_list;
- _bc_Free_list = temp->n_next;
- } else {
- temp = (bc_num) emalloc (sizeof(bc_struct));
- if (temp == NULL) bc_out_of_memory ();
- }
-#endif
- temp->n_sign = PLUS;
- temp->n_len = length;
- temp->n_scale = scale;
- temp->n_refs = 1;
- /* PHP Change: malloc() -> emalloc() */
- temp->n_ptr = (char *) emalloc (length+scale);
- if (temp->n_ptr == NULL) bc_out_of_memory();
- temp->n_value = temp->n_ptr;
- memset (temp->n_ptr, 0, length+scale);
- return temp;
-}
-
-
-/* "Frees" a bc_num NUM. Actually decreases reference count and only
- frees the storage if reference count is zero. */
-
-void
-bc_free_num (num)
- bc_num *num;
-{
- if (*num == NULL) return;
- (*num)->n_refs--;
- if ((*num)->n_refs == 0) {
- if ((*num)->n_ptr)
- /* PHP Change: free() -> efree(), removed free_list code */
- efree ((*num)->n_ptr);
- efree(*num);
-#if 0
- (*num)->n_next = _bc_Free_list;
- _bc_Free_list = *num;
-#endif
- }
- *num = NULL;
-}
-
-
-/* Intitialize the number package! */
-
-void
-bc_init_numbers ()
-{
- _zero_ = bc_new_num (1,0);
- _one_ = bc_new_num (1,0);
- _one_->n_value[0] = 1;
- _two_ = bc_new_num (1,0);
- _two_->n_value[0] = 2;
-}
-
-
-/* Make a copy of a number! Just increments the reference count! */
-
-bc_num
-bc_copy_num (num)
- bc_num num;
-{
- num->n_refs++;
- return num;
-}
-
-
-/* Initialize a number NUM by making it a copy of zero. */
-
-void
-bc_init_num (num)
- bc_num *num;
-{
- *num = bc_copy_num (_zero_);
-}
-
diff --git a/ext/bcmath/libbcmath/src/int2num.c b/ext/bcmath/libbcmath/src/int2num.c
deleted file mode 100644
index 34419c138f..0000000000
--- a/ext/bcmath/libbcmath/src/int2num.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* int2num.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Convert an integer VAL to a bc number NUM. */
-
-void
-bc_int2num (num, val)
- bc_num *num;
- int val;
-{
- char buffer[30];
- char *bptr, *vptr;
- int ix = 1;
- char neg = 0;
-
- /* Sign. */
- if (val < 0)
- {
- neg = 1;
- val = -val;
- }
-
- /* Get things going. */
- bptr = buffer;
- *bptr++ = val % BASE;
- val = val / BASE;
-
- /* Extract remaining digits. */
- while (val != 0)
- {
- *bptr++ = val % BASE;
- val = val / BASE;
- ix++; /* Count the digits. */
- }
-
- /* Make the number. */
- bc_free_num (num);
- *num = bc_new_num (ix, 0);
- if (neg) (*num)->n_sign = MINUS;
-
- /* Assign the digits. */
- vptr = (*num)->n_value;
- while (ix-- > 0)
- *vptr++ = *--bptr;
-}
-
diff --git a/ext/bcmath/libbcmath/src/nearzero.c b/ext/bcmath/libbcmath/src/nearzero.c
deleted file mode 100644
index ae16b65d8a..0000000000
--- a/ext/bcmath/libbcmath/src/nearzero.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* nearzero.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* In some places we need to check if the number NUM is almost zero.
- Specifically, all but the last digit is 0 and the last digit is 1.
- Last digit is defined by scale. */
-
-char
-bc_is_near_zero (num, scale)
- bc_num num;
- int scale;
-{
- int count;
- char *nptr;
-
- /* Error checking */
- if (scale > num->n_scale)
- scale = num->n_scale;
-
- /* Initialize */
- count = num->n_len + scale;
- nptr = num->n_value;
-
- /* The check */
- while ((count > 0) && (*nptr++ == 0)) count--;
-
- if (count != 0 && (count != 1 || *--nptr != 1))
- return FALSE;
- else
- return TRUE;
-}
-
diff --git a/ext/bcmath/libbcmath/src/neg.c b/ext/bcmath/libbcmath/src/neg.c
deleted file mode 100644
index c864d77f1d..0000000000
--- a/ext/bcmath/libbcmath/src/neg.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* neg.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* In some places we need to check if the number is negative. */
-
-char
-bc_is_neg (num)
- bc_num num;
-{
- return num->n_sign == MINUS;
-}
-
diff --git a/ext/bcmath/libbcmath/src/num2long.c b/ext/bcmath/libbcmath/src/num2long.c
deleted file mode 100644
index 0a6e0836ad..0000000000
--- a/ext/bcmath/libbcmath/src/num2long.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* num2long.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Convert a number NUM to a long. The function returns only the integer
- part of the number. For numbers that are too large to represent as
- a long, this function returns a zero. This can be detected by checking
- the NUM for zero after having a zero returned. */
-
-long
-bc_num2long (num)
- bc_num num;
-{
- long val;
- char *nptr;
- int index;
-
- /* Extract the int value, ignore the fraction. */
- val = 0;
- nptr = num->n_value;
- for (index=num->n_len; (index>0) && (val<=(LONG_MAX/BASE)); index--)
- val = val*BASE + *nptr++;
-
- /* Check for overflow. If overflow, return zero. */
- if (index>0) val = 0;
- if (val < 0) val = 0;
-
- /* Return the value. */
- if (num->n_sign == PLUS)
- return (val);
- else
- return (-val);
-}
-
diff --git a/ext/bcmath/libbcmath/src/num2str.c b/ext/bcmath/libbcmath/src/num2str.c
deleted file mode 100644
index c47ec9bbad..0000000000
--- a/ext/bcmath/libbcmath/src/num2str.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* num2str.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Convert a numbers to a string. Base 10 only.*/
-
-char
-*bc_num2str (num)
- bc_num num;
-{
- char *str, *sptr;
- char *nptr;
- int index, signch;
-
- /* Allocate the string memory. */
- signch = ( num->n_sign == PLUS ? 0 : 1 ); /* Number of sign chars. */
- if (num->n_scale > 0)
- str = (char *) emalloc (num->n_len + num->n_scale + 2 + signch);
- else
- str = (char *) emalloc (num->n_len + 1 + signch);
- if (str == NULL) bc_out_of_memory();
-
- /* The negative sign if needed. */
- sptr = str;
- if (signch) *sptr++ = '-';
-
- /* Load the whole number. */
- nptr = num->n_value;
- for (index=num->n_len; index>0; index--)
- *sptr++ = BCD_CHAR(*nptr++);
-
- /* Now the fraction. */
- if (num->n_scale > 0)
- {
- *sptr++ = '.';
- for (index=0; index<num->n_scale; index++)
- *sptr++ = BCD_CHAR(*nptr++);
- }
-
- /* Terminate the string and return it! */
- *sptr = '\0';
- return (str);
-}
diff --git a/ext/bcmath/libbcmath/src/outofmem.c b/ext/bcmath/libbcmath/src/outofmem.c
deleted file mode 100644
index 799a32d2ae..0000000000
--- a/ext/bcmath/libbcmath/src/outofmem.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* outofmem.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-void bc_out_of_memory (void)
-{
- (void) fprintf (stderr, "bcmath: out of memory!\n");
- exit (1);
-}
diff --git a/ext/bcmath/libbcmath/src/output.c b/ext/bcmath/libbcmath/src/output.c
deleted file mode 100644
index e41479d2d3..0000000000
--- a/ext/bcmath/libbcmath/src/output.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* output.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* The following routines provide output for bcd numbers package
- using the rules of POSIX bc for output. */
-
-/* This structure is used for saving digits in the conversion process. */
-typedef struct stk_rec {
- long digit;
- struct stk_rec *next;
-} stk_rec;
-
-/* The reference string for digits. */
-static char ref_str[] = "0123456789ABCDEF";
-
-
-/* A special output routine for "multi-character digits." Exactly
- SIZE characters must be output for the value VAL. If SPACE is
- non-zero, we must output one space before the number. OUT_CHAR
- is the actual routine for writing the characters. */
-
-void
-bc_out_long (val, size, space, out_char)
- long val;
- int size, space;
-#ifdef __STDC__
- void (*out_char)(int);
-#else
- void (*out_char)();
-#endif
-{
- char digits[40];
- int len, ix;
-
- if (space) (*out_char) (' ');
- sprintf (digits, "%ld", val);
- len = strlen (digits);
- while (size > len)
- {
- (*out_char) ('0');
- size--;
- }
- for (ix=0; ix < len; ix++)
- (*out_char) (digits[ix]);
-}
-
-/* Output of a bcd number. NUM is written in base O_BASE using OUT_CHAR
- as the routine to do the actual output of the characters. */
-
-void
-bc_out_num (num, o_base, out_char, leading_zero)
- bc_num num;
- int o_base;
-#ifdef __STDC__
- void (*out_char)(int);
-#else
- void (*out_char)();
-#endif
- int leading_zero;
-{
- char *nptr;
- int index, fdigit, pre_space;
- stk_rec *digits, *temp;
- bc_num int_part, frac_part, base, cur_dig, t_num, max_o_digit;
-
- /* The negative sign if needed. */
- if (num->n_sign == MINUS) (*out_char) ('-');
-
- /* Output the number. */
- if (bc_is_zero (num))
- (*out_char) ('0');
- else
- if (o_base == 10)
- {
- /* The number is in base 10, do it the fast way. */
- nptr = num->n_value;
- if (num->n_len > 1 || *nptr != 0)
- for (index=num->n_len; index>0; index--)
- (*out_char) (BCD_CHAR(*nptr++));
- else
- nptr++;
-
- if (leading_zero && bc_is_zero (num))
- (*out_char) ('0');
-
- /* Now the fraction. */
- if (num->n_scale > 0)
- {
- (*out_char) ('.');
- for (index=0; index<num->n_scale; index++)
- (*out_char) (BCD_CHAR(*nptr++));
- }
- }
- else
- {
- /* special case ... */
- if (leading_zero && bc_is_zero (num))
- (*out_char) ('0');
-
- /* The number is some other base. */
- digits = NULL;
- bc_init_num (&int_part);
- bc_divide (num, _one_, &int_part, 0);
- bc_init_num (&frac_part);
- bc_init_num (&cur_dig);
- bc_init_num (&base);
- bc_sub (num, int_part, &frac_part, 0);
- /* Make the INT_PART and FRAC_PART positive. */
- int_part->n_sign = PLUS;
- frac_part->n_sign = PLUS;
- bc_int2num (&base, o_base);
- bc_init_num (&max_o_digit);
- bc_int2num (&max_o_digit, o_base-1);
-
-
- /* Get the digits of the integer part and push them on a stack. */
- while (!bc_is_zero (int_part))
- {
- bc_modulo (int_part, base, &cur_dig, 0);
- /* PHP Change: malloc() -> emalloc() */
- temp = (stk_rec *) emalloc (sizeof(stk_rec));
- if (temp == NULL) bc_out_of_memory();
- temp->digit = bc_num2long (cur_dig);
- temp->next = digits;
- digits = temp;
- bc_divide (int_part, base, &int_part, 0);
- }
-
- /* Print the digits on the stack. */
- if (digits != NULL)
- {
- /* Output the digits. */
- while (digits != NULL)
- {
- temp = digits;
- digits = digits->next;
- if (o_base <= 16)
- (*out_char) (ref_str[ (int) temp->digit]);
- else
- bc_out_long (temp->digit, max_o_digit->n_len, 1, out_char);
- efree (temp);
- }
- }
-
- /* Get and print the digits of the fraction part. */
- if (num->n_scale > 0)
- {
- (*out_char) ('.');
- pre_space = 0;
- t_num = bc_copy_num (_one_);
- while (t_num->n_len <= num->n_scale) {
- bc_multiply (frac_part, base, &frac_part, num->n_scale);
- fdigit = bc_num2long (frac_part);
- bc_int2num (&int_part, fdigit);
- bc_sub (frac_part, int_part, &frac_part, 0);
- if (o_base <= 16)
- (*out_char) (ref_str[fdigit]);
- else {
- bc_out_long (fdigit, max_o_digit->n_len, pre_space, out_char);
- pre_space = 1;
- }
- bc_multiply (t_num, base, &t_num, 0);
- }
- bc_free_num (&t_num);
- }
-
- /* Clean up. */
- bc_free_num (&int_part);
- bc_free_num (&frac_part);
- bc_free_num (&base);
- bc_free_num (&cur_dig);
- bc_free_num (&max_o_digit);
- }
-}
diff --git a/ext/bcmath/libbcmath/src/private.h b/ext/bcmath/libbcmath/src/private.h
deleted file mode 100644
index eaf4f444b2..0000000000
--- a/ext/bcmath/libbcmath/src/private.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* private.h: bcmath library header. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-/* "Private" routines to bcmath. */
-
-/* variables */
-bc_num _bc_Free_list;
-
-/* routines */
-int _bc_do_compare (bc_num n1, bc_num n2, int use_sign, int ignore_last);
-bc_num _bc_do_add (bc_num n1, bc_num n2, int scale_min);
-bc_num _bc_do_sub (bc_num n1, bc_num n2, int scale_min);
-void _bc_rm_leading_zeros (bc_num num);
diff --git a/ext/bcmath/libbcmath/src/raise.c b/ext/bcmath/libbcmath/src/raise.c
deleted file mode 100644
index 5f2f03c208..0000000000
--- a/ext/bcmath/libbcmath/src/raise.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* raise.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Raise NUM1 to the NUM2 power. The result is placed in RESULT.
- Maximum exponent is LONG_MAX. If a NUM2 is not an integer,
- only the integer part is used. */
-
-void
-bc_raise (num1, num2, result, scale)
- bc_num num1, num2, *result;
- int scale;
-{
- bc_num temp, power;
- long exponent;
- int rscale;
- int pwrscale;
- int calcscale;
- char neg;
-
- /* Check the exponent for scale digits and convert to a long. */
- if (num2->n_scale != 0)
- bc_rt_warn ("non-zero scale in exponent");
- exponent = bc_num2long (num2);
- if (exponent == 0 && (num2->n_len > 1 || num2->n_value[0] != 0))
- bc_rt_error ("exponent too large in raise");
-
- /* Special case if exponent is a zero. */
- if (exponent == 0)
- {
- bc_free_num (result);
- *result = bc_copy_num (_one_);
- return;
- }
-
- /* Other initializations. */
- if (exponent < 0)
- {
- neg = TRUE;
- exponent = -exponent;
- rscale = scale;
- }
- else
- {
- neg = FALSE;
- rscale = MIN (num1->n_scale*exponent, MAX(scale, num1->n_scale));
- }
-
- /* Set initial value of temp. */
- power = bc_copy_num (num1);
- pwrscale = num1->n_scale;
- while ((exponent & 1) == 0)
- {
- pwrscale = 2*pwrscale;
- bc_multiply (power, power, &power, pwrscale);
- exponent = exponent >> 1;
- }
- temp = bc_copy_num (power);
- calcscale = pwrscale;
- exponent = exponent >> 1;
-
- /* Do the calculation. */
- while (exponent > 0)
- {
- pwrscale = 2*pwrscale;
- bc_multiply (power, power, &power, pwrscale);
- if ((exponent & 1) == 1) {
- calcscale = pwrscale + calcscale;
- bc_multiply (temp, power, &temp, calcscale);
- }
- exponent = exponent >> 1;
- }
-
- /* Assign the value. */
- if (neg)
- {
- bc_divide (_one_, temp, result, rscale);
- bc_free_num (&temp);
- }
- else
- {
- bc_free_num (result);
- *result = temp;
- if ((*result)->n_scale > rscale)
- (*result)->n_scale = rscale;
- }
- bc_free_num (&power);
-}
-
diff --git a/ext/bcmath/libbcmath/src/raisemod.c b/ext/bcmath/libbcmath/src/raisemod.c
deleted file mode 100644
index cc9dd35a57..0000000000
--- a/ext/bcmath/libbcmath/src/raisemod.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* raisemod.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Raise BASE to the EXPO power, reduced modulo MOD. The result is
- placed in RESULT. If a EXPO is not an integer,
- only the integer part is used. */
-
-int
-bc_raisemod (base, expo, mod, result, scale)
- bc_num base, expo, mod, *result;
- int scale;
-{
- bc_num power, exponent, parity, temp;
- int rscale;
-
- /* Check for correct numbers. */
- if (bc_is_zero(mod)) return -1;
- if (bc_is_neg(expo)) return -1;
-
- /* Set initial values. */
- power = bc_copy_num (base);
- exponent = bc_copy_num (expo);
- temp = bc_copy_num (_one_);
- bc_init_num(&parity);
-
- /* Check the base for scale digits. */
- if (base->n_scale != 0)
- bc_rt_warn ("non-zero scale in base");
-
- /* Check the exponent for scale digits. */
- if (exponent->n_scale != 0)
- {
- bc_rt_warn ("non-zero scale in exponent");
- bc_divide (exponent, _one_, &exponent, 0); /*truncate */
- }
-
- /* Check the modulus for scale digits. */
- if (mod->n_scale != 0)
- bc_rt_warn ("non-zero scale in modulus");
-
- /* Do the calculation. */
- rscale = MAX(scale, base->n_scale);
- while ( !bc_is_zero(exponent) )
- {
- (void) bc_divmod (exponent, _two_, &exponent, &parity, 0);
- if ( !bc_is_zero(parity) )
- {
- bc_multiply (temp, power, &temp, rscale);
- (void) bc_modulo (temp, mod, &temp, scale);
- }
-
- bc_multiply (power, power, &power, rscale);
- (void) bc_modulo (power, mod, &power, scale);
- }
-
- /* Assign the value. */
- bc_free_num (&power);
- bc_free_num (&exponent);
- bc_free_num (result);
- *result = temp;
- return 0; /* Everything is OK. */
-}
diff --git a/ext/bcmath/libbcmath/src/recmul.c b/ext/bcmath/libbcmath/src/recmul.c
deleted file mode 100644
index 73f67af574..0000000000
--- a/ext/bcmath/libbcmath/src/recmul.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/* recmul.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Recursive vs non-recursive multiply crossover ranges. */
-#if defined(MULDIGITS)
-#include "muldigits.h"
-#else
-#define MUL_BASE_DIGITS 80
-#endif
-
-int mul_base_digits = MUL_BASE_DIGITS;
-#define MUL_SMALL_DIGITS mul_base_digits/4
-
-/* Multiply utility routines */
-
-static bc_num
-new_sub_num (length, scale, value)
- int length, scale;
- char *value;
-{
- bc_num temp;
-
- if (_bc_Free_list != NULL) {
- temp = _bc_Free_list;
- _bc_Free_list = temp->n_next;
- } else {
- temp = (bc_num) emalloc (sizeof(bc_struct));
- if (temp == NULL) bc_out_of_memory ();
- }
- temp->n_sign = PLUS;
- temp->n_len = length;
- temp->n_scale = scale;
- temp->n_refs = 1;
- temp->n_ptr = NULL;
- temp->n_value = value;
- return temp;
-}
-
-static void
-_bc_simp_mul (bc_num n1, int n1len, bc_num n2, int n2len, bc_num *prod,
- int full_scale)
-{
- char *n1ptr, *n2ptr, *pvptr;
- char *n1end, *n2end; /* To the end of n1 and n2. */
- int indx, sum, prodlen;
-
- prodlen = n1len+n2len+1;
-
- *prod = bc_new_num (prodlen, 0);
-
- n1end = (char *) (n1->n_value + n1len - 1);
- n2end = (char *) (n2->n_value + n2len - 1);
- pvptr = (char *) ((*prod)->n_value + prodlen - 1);
- sum = 0;
-
- /* Here is the loop... */
- for (indx = 0; indx < prodlen-1; indx++)
- {
- n1ptr = (char *) (n1end - MAX(0, indx-n2len+1));
- n2ptr = (char *) (n2end - MIN(indx, n2len-1));
- while ((n1ptr >= n1->n_value) && (n2ptr <= n2end))
- sum += *n1ptr-- * *n2ptr++;
- *pvptr-- = sum % BASE;
- sum = sum / BASE;
- }
- *pvptr = sum;
-}
-
-
-/* A special adder/subtractor for the recursive divide and conquer
- multiply algorithm. Note: if sub is called, accum must
- be larger that what is being subtracted. Also, accum and val
- must have n_scale = 0. (e.g. they must look like integers. *) */
-static void
-_bc_shift_addsub (bc_num accum, bc_num val, int shift, int sub)
-{
- signed char *accp, *valp;
- int count, carry;
-
- count = val->n_len;
- if (val->n_value[0] == 0)
- count--;
- assert (accum->n_len+accum->n_scale >= shift+count);
-
- /* Set up pointers and others */
- accp = (signed char *)(accum->n_value +
- accum->n_len + accum->n_scale - shift - 1);
- valp = (signed char *)(val->n_value + val->n_len - 1);
- carry = 0;
-
- if (sub) {
- /* Subtraction, carry is really borrow. */
- while (count--) {
- *accp -= *valp-- + carry;
- if (*accp < 0) {
- carry = 1;
- *accp-- += BASE;
- } else {
- carry = 0;
- accp--;
- }
- }
- while (carry) {
- *accp -= carry;
- if (*accp < 0)
- *accp-- += BASE;
- else
- carry = 0;
- }
- } else {
- /* Addition */
- while (count--) {
- *accp += *valp-- + carry;
- if (*accp > (BASE-1)) {
- carry = 1;
- *accp-- -= BASE;
- } else {
- carry = 0;
- accp--;
- }
- }
- while (carry) {
- *accp += carry;
- if (*accp > (BASE-1))
- *accp-- -= BASE;
- else
- carry = 0;
- }
- }
-}
-
-/* Recursive divide and conquer multiply algorithm.
- Based on
- Let u = u0 + u1*(b^n)
- Let v = v0 + v1*(b^n)
- Then uv = (B^2n+B^n)*u1*v1 + B^n*(u1-u0)*(v0-v1) + (B^n+1)*u0*v0
-
- B is the base of storage, number of digits in u1,u0 close to equal.
-*/
-static void
-_bc_rec_mul (bc_num u, int ulen, bc_num v, int vlen, bc_num *prod,
- int full_scale)
-{
- bc_num u0, u1, v0, v1;
- int u0len, v0len;
- bc_num m1, m2, m3, d1, d2;
- int n, prodlen, m1zero;
- int d1len, d2len;
-
- /* Base case? */
- if ((ulen+vlen) < mul_base_digits
- || ulen < MUL_SMALL_DIGITS
- || vlen < MUL_SMALL_DIGITS ) {
- _bc_simp_mul (u, ulen, v, vlen, prod, full_scale);
- return;
- }
-
- /* Calculate n -- the u and v split point in digits. */
- n = (MAX(ulen, vlen)+1) / 2;
-
- /* Split u and v. */
- if (ulen < n) {
- u1 = bc_copy_num (_zero_);
- u0 = new_sub_num (ulen,0, u->n_value);
- } else {
- u1 = new_sub_num (ulen-n, 0, u->n_value);
- u0 = new_sub_num (n, 0, u->n_value+ulen-n);
- }
- if (vlen < n) {
- v1 = bc_copy_num (_zero_);
- v0 = new_sub_num (vlen,0, v->n_value);
- } else {
- v1 = new_sub_num (vlen-n, 0, v->n_value);
- v0 = new_sub_num (n, 0, v->n_value+vlen-n);
- }
- _bc_rm_leading_zeros (u1);
- _bc_rm_leading_zeros (u0);
- u0len = u0->n_len;
- _bc_rm_leading_zeros (v1);
- _bc_rm_leading_zeros (v0);
- v0len = v0->n_len;
-
- m1zero = bc_is_zero(u1) || bc_is_zero(v1);
-
- /* Calculate sub results ... */
-
- bc_init_num(&d1);
- bc_init_num(&d2);
- bc_sub (u1, u0, &d1, 0);
- d1len = d1->n_len;
- bc_sub (v0, v1, &d2, 0);
- d2len = d2->n_len;
-
-
- /* Do recursive multiplies and shifted adds. */
- if (m1zero)
- m1 = bc_copy_num (_zero_);
- else
- _bc_rec_mul (u1, u1->n_len, v1, v1->n_len, &m1, 0);
-
- if (bc_is_zero(d1) || bc_is_zero(d2))
- m2 = bc_copy_num (_zero_);
- else
- _bc_rec_mul (d1, d1len, d2, d2len, &m2, 0);
-
- if (bc_is_zero(u0) || bc_is_zero(v0))
- m3 = bc_copy_num (_zero_);
- else
- _bc_rec_mul (u0, u0->n_len, v0, v0->n_len, &m3, 0);
-
- /* Initialize product */
- prodlen = ulen+vlen+1;
- *prod = bc_new_num(prodlen, 0);
-
- if (!m1zero) {
- _bc_shift_addsub (*prod, m1, 2*n, 0);
- _bc_shift_addsub (*prod, m1, n, 0);
- }
- _bc_shift_addsub (*prod, m3, n, 0);
- _bc_shift_addsub (*prod, m3, 0, 0);
- _bc_shift_addsub (*prod, m2, n, d1->n_sign != d2->n_sign);
-
- /* Now clean up! */
- bc_free_num (&u1);
- bc_free_num (&u0);
- bc_free_num (&v1);
- bc_free_num (&m1);
- bc_free_num (&v0);
- bc_free_num (&m2);
- bc_free_num (&m3);
- bc_free_num (&d1);
- bc_free_num (&d2);
-}
-
-/* The multiply routine. N2 times N1 is put int PROD with the scale of
- the result being MIN(N2 scale+N1 scale, MAX (SCALE, N2 scale, N1 scale)).
- */
-
-void
-bc_multiply (n1, n2, prod, scale)
- bc_num n1, n2, *prod;
- int scale;
-{
- bc_num pval;
- int len1, len2;
- int full_scale, prod_scale;
-
- /* Initialize things. */
- len1 = n1->n_len + n1->n_scale;
- len2 = n2->n_len + n2->n_scale;
- full_scale = n1->n_scale + n2->n_scale;
- prod_scale = MIN(full_scale,MAX(scale,MAX(n1->n_scale,n2->n_scale)));
-
- /* Do the multiply */
- _bc_rec_mul (n1, len1, n2, len2, &pval, full_scale);
-
- /* Assign to prod and clean up the number. */
- pval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS );
- pval->n_value = pval->n_ptr;
- pval->n_len = len2 + len1 + 1 - full_scale;
- pval->n_scale = prod_scale;
- _bc_rm_leading_zeros (pval);
- if (bc_is_zero (pval))
- pval->n_sign = PLUS;
- bc_free_num (prod);
- *prod = pval;
-}
diff --git a/ext/bcmath/libbcmath/src/rmzero.c b/ext/bcmath/libbcmath/src/rmzero.c
deleted file mode 100644
index 63f7a0cb79..0000000000
--- a/ext/bcmath/libbcmath/src/rmzero.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* rmzero.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* For many things, we may have leading zeros in a number NUM.
- _bc_rm_leading_zeros just moves the data "value" pointer to the
- correct place and adjusts the length. */
-
- void
-_bc_rm_leading_zeros (num)
- bc_num num;
-{
- /* We can move n_value to point to the first non zero digit! */
- while (*num->n_value == 0 && num->n_len > 1) {
- num->n_value++;
- num->n_len--;
- }
-}
-
diff --git a/ext/bcmath/libbcmath/src/rt.c b/ext/bcmath/libbcmath/src/rt.c
deleted file mode 100644
index 2479104fe4..0000000000
--- a/ext/bcmath/libbcmath/src/rt.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* rt.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-void bc_rt_warn (char *mesg ,...)
-{
- va_list args;
- char error_mesg [255];
-
- va_start (args, mesg);
- vsprintf (error_mesg, mesg, args);
- va_end (args);
-
- fprintf (stderr, "bc math warning: %s\n", error_mesg);
-}
-
-
-void bc_rt_error (char *mesg ,...)
-{
- va_list args;
- char error_mesg [255];
-
- va_start (args, mesg);
- vsprintf (error_mesg, mesg, args);
- va_end (args);
-
- fprintf (stderr, "bc math error: %s\n", error_mesg);
-}
diff --git a/ext/bcmath/libbcmath/src/sqrt.c b/ext/bcmath/libbcmath/src/sqrt.c
deleted file mode 100644
index 34b95b8898..0000000000
--- a/ext/bcmath/libbcmath/src/sqrt.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* sqrt.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Take the square root NUM and return it in NUM with SCALE digits
- after the decimal place. */
-
-int
-bc_sqrt (num, scale)
- bc_num *num;
- int scale;
-{
- int rscale, cmp_res, done;
- int cscale;
- bc_num guess, guess1, point5, diff;
-
- /* Initial checks. */
- cmp_res = bc_compare (*num, _zero_);
- if (cmp_res < 0)
- return 0; /* error */
- else
- {
- if (cmp_res == 0)
- {
- bc_free_num (num);
- *num = bc_copy_num (_zero_);
- return 1;
- }
- }
- cmp_res = bc_compare (*num, _one_);
- if (cmp_res == 0)
- {
- bc_free_num (num);
- *num = bc_copy_num (_one_);
- return 1;
- }
-
- /* Initialize the variables. */
- rscale = MAX (scale, (*num)->n_scale);
- bc_init_num(&guess);
- bc_init_num(&guess1);
- bc_init_num(&diff);
- point5 = bc_new_num (1,1);
- point5->n_value[1] = 5;
-
-
- /* Calculate the initial guess. */
- if (cmp_res < 0)
- {
- /* The number is between 0 and 1. Guess should start at 1. */
- guess = bc_copy_num (_one_);
- cscale = (*num)->n_scale;
- }
- else
- {
- /* The number is greater than 1. Guess should start at 10^(exp/2). */
- bc_int2num (&guess,10);
-
- bc_int2num (&guess1,(*num)->n_len);
- bc_multiply (guess1, point5, &guess1, 0);
- guess1->n_scale = 0;
- bc_raise (guess, guess1, &guess, 0);
- bc_free_num (&guess1);
- cscale = 3;
- }
-
- /* Find the square root using Newton's algorithm. */
- done = FALSE;
- while (!done)
- {
- bc_free_num (&guess1);
- guess1 = bc_copy_num (guess);
- bc_divide (*num, guess, &guess, cscale);
- bc_add (guess, guess1, &guess, 0);
- bc_multiply (guess, point5, &guess, cscale);
- bc_sub (guess, guess1, &diff, cscale+1);
- if (bc_is_near_zero (diff, cscale))
- {
- if (cscale < rscale+1)
- cscale = MIN (cscale*3, rscale+1);
- else
- done = TRUE;
- }
- }
-
- /* Assign the number and clean up. */
- bc_free_num (num);
- bc_divide (guess,_one_,num,rscale);
- bc_free_num (&guess);
- bc_free_num (&guess1);
- bc_free_num (&point5);
- bc_free_num (&diff);
- return 1;
-}
-
diff --git a/ext/bcmath/libbcmath/src/str2num.c b/ext/bcmath/libbcmath/src/str2num.c
deleted file mode 100644
index 210a7d89ea..0000000000
--- a/ext/bcmath/libbcmath/src/str2num.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* str2num.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Convert strings to bc numbers. Base 10 only.*/
-
-void
-bc_str2num (num, str, scale)
- bc_num *num;
- char *str;
- int scale;
-{
- int digits, strscale;
- char *ptr, *nptr;
- char zero_int;
-
- /* Prepare num. */
- bc_free_num (num);
-
- /* Check for valid number and count digits. */
- ptr = str;
- digits = 0;
- strscale = 0;
- zero_int = FALSE;
- if ( (*ptr == '+') || (*ptr == '-')) ptr++; /* Sign */
- while (*ptr == '0') ptr++; /* Skip leading zeros. */
- while (isdigit((int)*ptr)) ptr++, digits++; /* digits */
- if (*ptr == '.') ptr++; /* decimal point */
- while (isdigit((int)*ptr)) ptr++, strscale++; /* digits */
- if ((*ptr != '\0') || (digits+strscale == 0))
- {
- *num = bc_copy_num (_zero_);
- return;
- }
-
- /* Adjust numbers and allocate storage and initialize fields. */
- strscale = MIN(strscale, scale);
- if (digits == 0)
- {
- zero_int = TRUE;
- digits = 1;
- }
- *num = bc_new_num (digits, strscale);
-
- /* Build the whole number. */
- ptr = str;
- if (*ptr == '-')
- {
- (*num)->n_sign = MINUS;
- ptr++;
- }
- else
- {
- (*num)->n_sign = PLUS;
- if (*ptr == '+') ptr++;
- }
- while (*ptr == '0') ptr++; /* Skip leading zeros. */
- nptr = (*num)->n_value;
- if (zero_int)
- {
- *nptr++ = 0;
- digits = 0;
- }
- for (;digits > 0; digits--)
- *nptr++ = CH_VAL(*ptr++);
-
-
- /* Build the fractional part. */
- if (strscale > 0)
- {
- ptr++; /* skip the decimal point! */
- for (;strscale > 0; strscale--)
- *nptr++ = CH_VAL(*ptr++);
- }
-}
-
diff --git a/ext/bcmath/libbcmath/src/sub.c b/ext/bcmath/libbcmath/src/sub.c
deleted file mode 100644
index 2dd8eb5ecc..0000000000
--- a/ext/bcmath/libbcmath/src/sub.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* sub.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Here is the full subtract routine that takes care of negative numbers.
- N2 is subtracted from N1 and the result placed in RESULT. SCALE_MIN
- is the minimum scale for the result. */
-
-void
-bc_sub (n1, n2, result, scale_min)
- bc_num n1, n2, *result;
- int scale_min;
-{
- bc_num diff = NULL;
- int cmp_res;
- int res_scale;
-
- if (n1->n_sign != n2->n_sign)
- {
- diff = _bc_do_add (n1, n2, scale_min);
- diff->n_sign = n1->n_sign;
- }
- else
- {
- /* subtraction must be done. */
- /* Compare magnitudes. */
- cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE);
- switch (cmp_res)
- {
- case -1:
- /* n1 is less than n2, subtract n1 from n2. */
- diff = _bc_do_sub (n2, n1, scale_min);
- diff->n_sign = (n2->n_sign == PLUS ? MINUS : PLUS);
- break;
- case 0:
- /* They are equal! return zero! */
- res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale));
- diff = bc_new_num (1, res_scale);
- memset (diff->n_value, 0, res_scale+1);
- break;
- case 1:
- /* n2 is less than n1, subtract n2 from n1. */
- diff = _bc_do_sub (n1, n2, scale_min);
- diff->n_sign = n1->n_sign;
- break;
- }
- }
-
- /* Clean up and return. */
- bc_free_num (result);
- *result = diff;
-}
-
diff --git a/ext/bcmath/libbcmath/src/zero.c b/ext/bcmath/libbcmath/src/zero.c
deleted file mode 100644
index dce77ba4aa..0000000000
--- a/ext/bcmath/libbcmath/src/zero.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* zero.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* In some places we need to check if the number NUM is zero. */
-
-char
-bc_is_zero (num)
- bc_num num;
-{
- int count;
- char *nptr;
-
- /* Quick check. */
- if (num == _zero_) return TRUE;
-
- /* Initialize */
- count = num->n_len + num->n_scale;
- nptr = num->n_value;
-
- /* The check */
- while ((count > 0) && (*nptr++ == 0)) count--;
-
- if (count != 0)
- return FALSE;
- else
- return TRUE;
-}
-
diff --git a/ext/bcmath/php_bcmath.h b/ext/bcmath/php_bcmath.h
deleted file mode 100644
index 8ead3253b8..0000000000
--- a/ext/bcmath/php_bcmath.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andi Gutmans <andi@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BCMATH_H
-#define PHP_BCMATH_H
-
-#if WITH_BCMATH
-
-extern zend_module_entry bcmath_module_entry;
-#define phpext_bcmath_ptr &bcmath_module_entry
-
-PHP_MINIT_FUNCTION(bcmath);
-PHP_MSHUTDOWN_FUNCTION(bcmath);
-PHP_RINIT_FUNCTION(bcmath);
-PHP_MINFO_FUNCTION(bcmath);
-
-PHP_FUNCTION(bcadd);
-PHP_FUNCTION(bcsub);
-PHP_FUNCTION(bcmul);
-PHP_FUNCTION(bcdiv);
-PHP_FUNCTION(bcmod);
-PHP_FUNCTION(bcpow);
-PHP_FUNCTION(bcsqrt);
-PHP_FUNCTION(bccomp);
-PHP_FUNCTION(bcscale);
-
-#else
-
-#define phpext_bcmath_ptr NULL
-
-#endif
-
-#endif /* PHP_BCMATH_H */
diff --git a/ext/calendar/CREDITS b/ext/calendar/CREDITS
deleted file mode 100644
index a2904bd8b2..0000000000
--- a/ext/calendar/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Calendar
-Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong
diff --git a/ext/calendar/cal_unix.c b/ext/calendar/cal_unix.c
deleted file mode 100644
index 46152d1c59..0000000000
--- a/ext/calendar/cal_unix.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Colin Viebrock <cmv@easydns.com> |
- | Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id: */
-
-#include "php.h"
-#include "php_calendar.h"
-#include "sdncal.h"
-#include <time.h>
-
-/* {{{ proto int unixtojd([int timestamp])
- Convert UNIX timestamp to Julian Day */
-PHP_FUNCTION(unixtojd)
-{
- pval *timestamp;
- long jdate;
- time_t t;
- struct tm *ta, tmbuf;
- int myargc=ZEND_NUM_ARGS();
-
- if ((myargc > 1) || (zend_get_parameters(ht, myargc, &timestamp) != SUCCESS)) {
- WRONG_PARAM_COUNT;
- }
-
- if(myargc==1) {
- convert_to_long(timestamp);
- t = Z_LVAL_P(timestamp);
- } else {
- t = time(NULL);
- }
-
- if(t < 0) {
- RETURN_FALSE;
- }
-
- ta = php_localtime_r(&t, &tmbuf);
- jdate = GregorianToSdn(ta->tm_year+1900, ta->tm_mon+1, ta->tm_mday);
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto int jdtounix(int jday)
- Convert Julian Day to UNIX timestamp */
-PHP_FUNCTION(jdtounix)
-{
- pval *jday;
- long uday;
-
- if ((ZEND_NUM_ARGS()!= 1) || (zend_get_parameters(ht, 1, &jday) != SUCCESS)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(jday);
-
- uday = Z_LVAL_P(jday) - 2440588 /* J.D. of 1.1.1970 */;
-
- if(uday<0) RETURN_FALSE; /* before beginning of unix epoch */
- if(uday>24755) RETURN_FALSE; /* behind end of unix epoch */
-
- RETURN_LONG(uday*24*3600);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/calendar/calendar.c b/ext/calendar/calendar.c
deleted file mode 100644
index d5a346c056..0000000000
--- a/ext/calendar/calendar.c
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Colin Viebrock <cmv@easydns.com> |
- | Hartmut Holzgraefe <hartmut@six.de> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef PHP_WIN32
-#define _WINNLS_
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_calendar.h"
-#include "sdncal.h"
-
-function_entry calendar_functions[] = {
- PHP_FE(jdtogregorian, NULL)
- PHP_FE(gregoriantojd, NULL)
- PHP_FE(jdtojulian, NULL)
- PHP_FE(juliantojd, NULL)
- PHP_FE(jdtojewish, NULL)
- PHP_FE(jewishtojd, NULL)
- PHP_FE(jdtofrench, NULL)
- PHP_FE(frenchtojd, NULL)
- PHP_FE(jddayofweek, NULL)
- PHP_FE(jdmonthname, NULL)
- PHP_FE(easter_date, NULL)
- PHP_FE(easter_days, NULL)
- PHP_FE(unixtojd, NULL)
- PHP_FE(jdtounix, NULL)
- PHP_FE(cal_to_jd, NULL)
- PHP_FE(cal_from_jd, NULL)
- PHP_FE(cal_days_in_month, NULL)
- PHP_FE(cal_info, NULL)
- {NULL, NULL, NULL}
-};
-
-
-zend_module_entry calendar_module_entry = {
- STANDARD_MODULE_HEADER,
- "calendar",
- calendar_functions,
- PHP_MINIT(calendar),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(calendar),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-
-#ifdef COMPILE_DL_CALENDAR
-ZEND_GET_MODULE(calendar)
-#endif
-
-/* this order must match the conversion table below */
-enum cal_name_type_t {
- CAL_GREGORIAN = 0,
- CAL_JULIAN,
- CAL_JEWISH,
- CAL_FRENCH,
- CAL_NUM_CALS
-};
-typedef long int (*cal_to_jd_func_t)(int month, int day, int year);
-typedef void (*cal_from_jd_func_t)(long int jd, int* year, int* month, int* day);
-typedef char* (*cal_as_string_func_t)(int year, int month, int day);
-
-struct cal_entry_t {
- char * name;
- char * symbol;
- cal_to_jd_func_t to_jd;
- cal_from_jd_func_t from_jd;
- int num_months;
- int max_days_in_month;
- char ** month_name_short;
- char ** month_name_long;
-};
-static struct cal_entry_t cal_conversion_table[CAL_NUM_CALS] = {
- { "Gregorian", "CAL_GREGORIAN", GregorianToSdn, SdnToGregorian, 12, 31, MonthNameShort, MonthNameLong },
- { "Julian", "CAL_JULIAN", JulianToSdn, SdnToJulian, 12, 31, MonthNameShort, MonthNameLong },
- { "Jewish", "CAL_JEWISH", JewishToSdn, SdnToJewish, 13, 30, JewishMonthName, JewishMonthName },
- { "French", "CAL_FRENCH", FrenchToSdn, SdnToFrench, 13, 30, FrenchMonthName, FrenchMonthName }
-};
-
-/* For jddayofweek */
-enum { CAL_DOW_DAYNO, CAL_DOW_SHORT, CAL_DOW_LONG };
-/* For jdmonthname */
-enum { CAL_MONTH_GREGORIAN_SHORT, CAL_MONTH_GREGORIAN_LONG,
- CAL_MONTH_JULIAN_SHORT, CAL_MONTH_JULIAN_LONG, CAL_MONTH_JEWISH,
- CAL_MONTH_FRENCH };
-
-PHP_MINIT_FUNCTION(calendar)
-{
- REGISTER_LONG_CONSTANT("CAL_GREGORIAN", CAL_GREGORIAN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_JULIAN", CAL_JULIAN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_JEWISH", CAL_JEWISH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_FRENCH", CAL_FRENCH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_NUM_CALS", CAL_NUM_CALS, CONST_CS|CONST_PERSISTENT);
- /* constants for jddayofweek */
- REGISTER_LONG_CONSTANT("CAL_DOW_DAYNO", CAL_DOW_DAYNO, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_DOW_SHORT", CAL_DOW_SHORT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_DOW_LONG", CAL_DOW_LONG, CONST_CS|CONST_PERSISTENT);
- /* constants for jdmonthname */
- REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_SHORT", CAL_MONTH_GREGORIAN_SHORT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_LONG", CAL_MONTH_GREGORIAN_LONG, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_SHORT", CAL_MONTH_JULIAN_SHORT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_LONG", CAL_MONTH_JULIAN_LONG, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_JEWISH", CAL_MONTH_JEWISH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_FRENCH", CAL_MONTH_FRENCH, CONST_CS|CONST_PERSISTENT);
- /* constants for easter calculation */
- REGISTER_LONG_CONSTANT("CAL_EASTER_DEFAULT", CAL_EASTER_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_EASTER_ROMAN", CAL_EASTER_ROMAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_EASTER_ALWAYS_GREGORIAN", CAL_EASTER_ALWAYS_GREGORIAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_EASTER_ALWAYS_JULIAN", CAL_EASTER_ALWAYS_JULIAN, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(calendar)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Calendar support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto array cal_info(int calendar)
- Returns information about a particular calendar */
-PHP_FUNCTION(cal_info)
-{
- zval ** cal;
- zval * months, *smonths;
- int i;
- struct cal_entry_t * calendar;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cal) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(cal);
- if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) {
- zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal));
- RETURN_FALSE;
- }
-
- calendar = &cal_conversion_table[Z_LVAL_PP(cal)];
- array_init(return_value);
-
- MAKE_STD_ZVAL(months);
- MAKE_STD_ZVAL(smonths);
- array_init(months);
- array_init(smonths);
-
- for (i=1; i<= calendar->num_months; i++) {
- add_index_string(months, i, calendar->month_name_long[i], 1);
- add_index_string(smonths, i, calendar->month_name_short[i], 1);
- }
- add_assoc_zval(return_value, "months", months);
- add_assoc_zval(return_value, "abbrevmonths", smonths);
- add_assoc_long(return_value, "maxdaysinmonth", calendar->max_days_in_month);
- add_assoc_string(return_value, "calname", calendar->name, 1);
- add_assoc_string(return_value, "calsymbol", calendar->symbol, 1);
-
-}
-/* }}} */
-
-/* {{{ proto int cal_days_in_month(int calendar, int month, int year)
- Returns the number of days in a month for a given year and calendar */
-PHP_FUNCTION(cal_days_in_month)
-{
- zval ** cal, **month, **year;
- struct cal_entry_t * calendar;
- long sdn_start, sdn_next;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &cal, &month, &year) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(cal);
- convert_to_long_ex(month);
- convert_to_long_ex(year);
-
- if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) {
- zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal));
- RETURN_FALSE;
- }
-
- calendar = &cal_conversion_table[Z_LVAL_PP(cal)];
-
- sdn_start = calendar->to_jd(Z_LVAL_PP(year), Z_LVAL_PP(month), 1);
-
- sdn_next = calendar->to_jd(Z_LVAL_PP(year), 1 + Z_LVAL_PP(month), 1);
-
- if (sdn_next == 0) {
- /* if invalid, try first month of the next year... */
- sdn_next = calendar->to_jd(Z_LVAL_PP(year) + 1, 1, 1);
- }
-
- RETURN_LONG(sdn_next - sdn_start);
-}
-/* }}} */
-
-/* {{{ proto int cal_to_jd(int calendar, int month, int day, int year)
- Converts from a supported calendar to Julian Day Count */
-PHP_FUNCTION(cal_to_jd)
-{
- zval ** cal, **month, **day, **year;
- long jdate;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &cal, &month, &day, &year) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(cal);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(year);
-
- if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) {
- zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal));
- RETURN_FALSE;
- }
-
- jdate = cal_conversion_table[Z_LVAL_PP(cal)].to_jd(
- Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto array cal_from_jd(int jd, int calendar)
- Converts from Julian Day Count to a supported calendar and return extended information */
-PHP_FUNCTION(cal_from_jd)
-{
- zval ** jd, ** cal;
- int month, day, year, dow;
- char date[16];
- struct cal_entry_t * calendar;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &jd, &cal) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(jd);
- convert_to_long_ex(cal);
-
- if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) {
- zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal));
- RETURN_FALSE;
- }
- calendar = &cal_conversion_table[Z_LVAL_PP(cal)];
-
- array_init(return_value);
-
- calendar->from_jd(
- Z_LVAL_PP(jd),
- &year, &month, &day);
-
- sprintf(date, "%i/%i/%i", month, day, year);
- add_assoc_string(return_value, "date", date, 1);
-
- add_assoc_long(return_value, "month", month);
- add_assoc_long(return_value, "day", day);
- add_assoc_long(return_value, "year", year);
-
- /* day of week */
- dow = DayOfWeek(Z_LVAL_PP(jd));
- add_assoc_long(return_value, "dow", dow);
- add_assoc_string(return_value, "abbrevdayname", DayNameShort[dow], 1);
- add_assoc_string(return_value, "dayname", DayNameLong[dow], 1);
- /* month name */
- add_assoc_string(return_value, "abbrevmonth", calendar->month_name_short[month], 1);
- add_assoc_string(return_value, "monthname", calendar->month_name_long[month], 1);
-}
-/* }}} */
-
-/* {{{ proto string jdtogregorian(int juliandaycount)
- Converts a julian day count to a gregorian calendar date */
-PHP_FUNCTION(jdtogregorian)
-{
- pval **julday;
- int year, month, day;
- char date[10];
-
- if (zend_get_parameters_ex(1, &julday) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(julday);
- SdnToGregorian(Z_LVAL_PP(julday), &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int gregoriantojd(int month, int day, int year)
- Converts a gregorian calendar date to julian day count */
- PHP_FUNCTION(gregoriantojd)
-{
- pval **year, **month, **day;
- int jdate;
-
- if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(year);
-
- jdate = GregorianToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto string jdtojulian(int juliandaycount)
- Convert a julian day count to a julian calendar date */
- PHP_FUNCTION(jdtojulian)
-{
- pval **julday;
- int year, month, day;
- char date[10];
-
- if (zend_get_parameters_ex(1, &julday) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(julday);
- SdnToJulian(Z_LVAL_PP(julday), &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int juliantojd(int month, int day, int year)
- Converts a julian calendar date to julian day count */
- PHP_FUNCTION(juliantojd)
-{
- pval **year, **month, **day;
- int jdate;
-
- if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(year);
-
- jdate = JulianToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto string jdtojewish(int juliandaycount)
- Converts a julian day count to a jewish calendar date */
- PHP_FUNCTION(jdtojewish)
-{
- pval **julday;
- int year, month, day;
- char date[10];
-
- if (zend_get_parameters_ex(1, &julday) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(julday);
-
- SdnToJewish(Z_LVAL_PP(julday), &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int jewishtojd(int month, int day, int year)
- Converts a jewish calendar date to a julian day count */
- PHP_FUNCTION(jewishtojd)
-{
- pval **year, **month, **day;
- int jdate;
-
- if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(year);
-
- jdate = JewishToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto string jdtofrench(int juliandaycount)
- Converts a julian day count to a french republic calendar date */
- PHP_FUNCTION(jdtofrench)
-{
- pval **julday;
- int year, month, day;
- char date[10];
-
- if (zend_get_parameters_ex(1, &julday) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(julday);
-
- SdnToFrench(Z_LVAL_PP(julday), &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int frenchtojd(int month, int day, int year)
- Converts a french republic calendar date to julian day count */
- PHP_FUNCTION(frenchtojd)
-{
- pval **year, **month, **day;
- int jdate;
-
- if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(year);
-
- jdate = FrenchToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto mixed jddayofweek(int juliandaycount [, int mode])
- Returns name or number of day of week from julian day count */
- PHP_FUNCTION(jddayofweek)
-{
- pval *julday, *mode;
- int day;
- char *daynamel, *daynames;
- int myargc=ZEND_NUM_ARGS(), mymode=0;
-
- if ((myargc < 1) || (myargc > 2) || (zend_get_parameters(ht, myargc, &julday, &mode) != SUCCESS)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(julday);
- if(myargc==2) {
- convert_to_long(mode);
- mymode = Z_LVAL_P(mode);
- }
-
- day = DayOfWeek(Z_LVAL_P(julday));
- daynamel = DayNameLong[day];
- daynames = DayNameShort[day];
-
- switch (mymode) {
- case CAL_DOW_SHORT:
- RETURN_STRING(daynamel, 1);
- break;
- case CAL_DOW_LONG:
- RETURN_STRING(daynames, 1);
- break;
- case CAL_DOW_DAYNO:
- default:
- RETURN_LONG(day);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto string jdmonthname(int juliandaycount, int mode)
- Returns name of month for julian day count */
- PHP_FUNCTION(jdmonthname)
-{
- pval **julday, **mode;
- char *monthname = NULL;
- int month, day, year;
-
- if (zend_get_parameters_ex(2, &julday, &mode) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(julday);
- convert_to_long_ex(mode);
-
- switch(Z_LVAL_PP(mode)) {
- case CAL_MONTH_GREGORIAN_LONG: /* gregorian or julian month */
- SdnToGregorian(Z_LVAL_PP(julday), &year, &month, &day);
- monthname = MonthNameLong[month];
- break;
- case CAL_MONTH_JULIAN_SHORT: /* gregorian or julian month */
- SdnToJulian(Z_LVAL_PP(julday), &year, &month, &day);
- monthname = MonthNameShort[month];
- break;
- case CAL_MONTH_JULIAN_LONG: /* gregorian or julian month */
- SdnToJulian(Z_LVAL_PP(julday), &year, &month, &day);
- monthname = MonthNameLong[month];
- break;
- case CAL_MONTH_JEWISH: /* jewish month */
- SdnToJewish(Z_LVAL_PP(julday), &year, &month, &day);
- monthname = JewishMonthName[month];
- break;
- case CAL_MONTH_FRENCH: /* french month */
- SdnToFrench(Z_LVAL_PP(julday), &year, &month, &day);
- monthname = FrenchMonthName[month];
- break;
- default: /* default gregorian */
- case CAL_MONTH_GREGORIAN_SHORT: /* gregorian or julian month */
- SdnToGregorian(Z_LVAL_PP(julday), &year, &month, &day);
- monthname = MonthNameShort[month];
- break;
- }
-
- RETURN_STRING(monthname, 1);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/calendar/config.m4 b/ext/calendar/config.m4
deleted file mode 100644
index a80101adbb..0000000000
--- a/ext/calendar/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(calendar,whether to enable calendar conversion support,
-[ --enable-calendar Enable support for calendar conversion])
-
-if test "$PHP_CALENDAR" = "yes"; then
- AC_DEFINE(HAVE_CALENDAR,1,[ ])
- PHP_NEW_EXTENSION(calendar, calendar.c dow.c french.c gregor.c jewish.c julian.c easter.c cal_unix.c, $ext_shared)
-fi
diff --git a/ext/calendar/dow.c b/ext/calendar/dow.c
deleted file mode 100644
index 64ae008f77..0000000000
--- a/ext/calendar/dow.c
+++ /dev/null
@@ -1,76 +0,0 @@
-
-/* $selId: dow.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * int
- * DayOfWeek(
- * long int sdn);
- *
- * Convert a SDN to a day-of-week number (0 to 6). Where 0 stands for
- * Sunday, 1 for Monday, etc. and 6 stands for Saturday.
- *
- * char *DayNameShort[7];
- *
- * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to
- * the abbreviated (three character) name of the day.
- *
- * char *DayNameLong[7];
- *
- * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to
- * the name of the day.
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-int DayOfWeek(
- long int sdn)
-{
- int dow;
-
- dow = (sdn + 1) % 7;
- if (dow >= 0) {
- return (dow);
- } else {
- return (dow + 7);
- }
-}
-
-char *DayNameShort[7] =
-{
- "Sun",
- "Mon",
- "Tue",
- "Wed",
- "Thu",
- "Fri",
- "Sat"
-};
-
-char *DayNameLong[7] =
-{
- "Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday"
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/calendar/easter.c b/ext/calendar/easter.c
deleted file mode 100644
index 10d8ae401e..0000000000
--- a/ext/calendar/easter.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Colin Viebrock <cmv@easydns.com> |
- | Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id: */
-
-#include "php.h"
-#include "php_calendar.h"
-#include "sdncal.h"
-#include <time.h>
-
-static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
-
- /* based on code by Simon Kershaw, <webmaster@ely.anglican.org> */
-
- struct tm te;
- long year, golden, solar, lunar, pfm, dom, tmp, easter;
- long method = CAL_EASTER_DEFAULT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "l|l", &year, &method) == FAILURE) {
- return;
- }
-
- if (gm && (year<1970 || year>2037)) { /* out of range for timestamps */
- php_error(E_WARNING, "easter_date() is only valid for years between 1970 and 2037 inclusive");
- RETURN_FALSE;
- }
-
- golden = (year % 19) + 1; /* the Golden number */
-
- if ((year <= 1582 && method != CAL_EASTER_ALWAYS_GREGORIAN) ||
- (year >= 1583 && year <= 1752 && method != CAL_EASTER_ROMAN && method != CAL_EASTER_ALWAYS_GREGORIAN) ||
- method == CAL_EASTER_ALWAYS_JULIAN) { /* JULIAN CALENDAR */
-
- dom = (year + (year/4) + 5) % 7; /* the "Dominical number" - finding a Sunday */
- if (dom < 0) {
- dom += 7;
- }
-
- pfm = (3 - (11*golden) - 7) % 30; /* uncorrected date of the Paschal full moon */
- if (pfm < 0) {
- pfm += 30;
- }
- } else { /* GREGORIAN CALENDAR */
- dom = (year + (year/4) - (year/100) + (year/400)) % 7; /* the "Domincal number" */
- if (dom < 0) {
- dom += 7;
- }
-
- solar = (year-1600)/100 - (year-1600)/400; /* the solar and lunar corrections */
- lunar = (((year-1400) / 100) * 8) / 25;
-
- pfm = (3 - (11*golden) + solar - lunar) % 30; /* uncorrected date of the Paschal full moon */
- if (pfm < 0) {
- pfm += 30;
- }
- }
-
- if ((pfm == 29) || (pfm == 28 && golden > 11)) { /* corrected date of the Paschal full moon */
- pfm--; /* - days after 21st March */
- }
-
- tmp = (4-pfm-dom) % 7;
- if (tmp < 0) {
- tmp += 7;
- }
-
- easter = pfm + tmp + 1; /* Easter as the number of days after 21st March */
-
- if (gm) { /* return a timestamp */
- te.tm_isdst = -1;
- te.tm_year = year-1900;
- te.tm_sec = 0;
- te.tm_min = 0;
- te.tm_hour = 0;
-
- if (easter < 11) {
- te.tm_mon = 2; /* March */
- te.tm_mday = easter+21;
- } else {
- te.tm_mon = 3; /* April */
- te.tm_mday = easter-10;
- }
-
- Z_LVAL_P(return_value) = mktime(&te);
- } else { /* return the days after March 21 */
- Z_LVAL_P(return_value) = easter;
- }
-
- Z_TYPE_P(return_value) = IS_LONG;
-
-}
-
-/* {{{ proto int easter_date([int year])
- Return the timestamp of midnight on Easter of a given year (defaults to current year) */
-PHP_FUNCTION(easter_date)
-{
- _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int easter_days([int year])
- Return the number of days after March 21 that Easter falls on for a given year (defaults to current year) */
-PHP_FUNCTION(easter_days)
-{
- _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/calendar/french.c b/ext/calendar/french.c
deleted file mode 100644
index 5b4dd53750..0000000000
--- a/ext/calendar/french.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* $selId: french.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToFrench(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a French republican calendar date. If the input SDN is
- * before the first day of year 1 or after the last day of year 14, the
- * three output values will all be set to zero, otherwise *pYear will be in
- * the range 1 to 14 inclusive; *pMonth will be in the range 1 to 13
- * inclusive; *pDay will be in the range 1 to 30 inclusive. If *pMonth is
- * 13, the SDN represents one of the holidays at the end of the year and
- * *pDay will be in the range 1 to 6 inclusive.
- *
- * long int
- * FrenchToSdn(
- * int year,
- * int month,
- * int day);
- *
- * Convert a French republican calendar date to a SDN. Zero is returned
- * when the input date is detected as invalid or out of the supported
- * range. The return value will be > 0 for all valid, supported dates, but
- * there are some invalid dates that will return a positive value. To
- * verify that a date is valid, convert it to SDN and then back and compare
- * with the original.
- *
- * char *FrenchMonthName[14];
- *
- * Convert a French republican month number (1 to 13) to the name of the
- * French republican month (null terminated). An index of 13 (for the
- * "extra" days at the end of the year) will return the string "Extra". An
- * index of zero will return a zero length string.
- *
- * VALID RANGE
- *
- * These routines only convert dates in years 1 through 14 (Gregorian
- * dates 22 September 1792 through 22 September 1806). This more than
- * covers the period when the calendar was in use.
- *
- * I would support a wider range of dates, but I have not been able to
- * find an authoritative definition of when leap years were to have
- * occurred. There are suggestions that it was to skip a leap year ever
- * 100 years like the Gregorian calendar.
- *
- * CALENDAR OVERVIEW
- *
- * The French republican calendar was adopted in October 1793 during
- * the French Revolution and was abandoned in January 1806. The intent
- * was to create a new calendar system that was based on scientific
- * principals, not religious traditions.
- *
- * The year is divided into 12 months of 30 days each. The remaining 5
- * to 6 days in the year are grouped at the end and are holidays. Each
- * month is divided into three decades (instead of weeks) of 10 days
- * each.
- *
- * The epoch (first day of the first year) is 22 September 1792 in the
- * Gregorian calendar. Leap years are every fourth year (year 3, 7,
- * 11, etc.)
- *
- * TESTING
- *
- * This algorithm has been tested from the year 1 to 14. The source
- * code of the verification program is included in this package.
- *
- * REFERENCES
- *
- * I have found no detailed, authoritative reference on this calendar.
- * The algorithms are based on a preponderance of less authoritative
- * sources.
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define FRENCH_SDN_OFFSET 2375474
-#define DAYS_PER_4_YEARS 1461
-#define DAYS_PER_MONTH 30
-#define FIRST_VALID 2375840
-#define LAST_VALID 2380952
-
-void SdnToFrench(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- long int temp;
- int dayOfYear;
-
- if (sdn < FIRST_VALID || sdn > LAST_VALID) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- temp = (sdn - FRENCH_SDN_OFFSET) * 4 - 1;
- *pYear = temp / DAYS_PER_4_YEARS;
- dayOfYear = (temp % DAYS_PER_4_YEARS) / 4;
- *pMonth = dayOfYear / DAYS_PER_MONTH + 1;
- *pDay = dayOfYear % DAYS_PER_MONTH + 1;
-}
-
-long int FrenchToSdn(
- int year,
- int month,
- int day)
-{
- /* check for invalid dates */
- if (year < 1 || year > 14 ||
- month < 1 || month > 13 ||
- day < 1 || day > 30) {
- return (0);
- }
- return ((year * DAYS_PER_4_YEARS) / 4
- + (month - 1) * DAYS_PER_MONTH
- + day
- + FRENCH_SDN_OFFSET);
-}
-
-char *FrenchMonthName[14] =
-{
- "",
- "Vendemiaire",
- "Brumaire",
- "Frimaire",
- "Nivose",
- "Pluviose",
- "Ventose",
- "Germinal",
- "Floreal",
- "Prairial",
- "Messidor",
- "Thermidor",
- "Fructidor",
- "Extra"
-};
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/calendar/gregor.c b/ext/calendar/gregor.c
deleted file mode 100644
index f48950901a..0000000000
--- a/ext/calendar/gregor.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* $selId: gregor.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToGregorian(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a Gregorian calendar date. If the input SDN is less
- * than 1, the three output values will all be set to zero, otherwise
- * *pYear will be >= -4714 and != 0; *pMonth will be in the range 1 to 12
- * inclusive; *pDay will be in the range 1 to 31 inclusive.
- *
- * long int
- * GregorianToSdn(
- * int inputYear,
- * int inputMonth,
- * int inputDay);
- *
- * Convert a Gregorian calendar date to a SDN. Zero is returned when the
- * input date is detected as invalid or out of the supported range. The
- * return value will be > 0 for all valid, supported dates, but there are
- * some invalid dates that will return a positive value. To verify that a
- * date is valid, convert it to SDN and then back and compare with the
- * original.
- *
- * char *MonthNameShort[13];
- *
- * Convert a Gregorian month number (1 to 12) to the abbreviated (three
- * character) name of the Gregorian month (null terminated). An index of
- * zero will return a zero length string.
- *
- * char *MonthNameLong[13];
- *
- * Convert a Gregorian month number (1 to 12) to the name of the Gregorian
- * month (null terminated). An index of zero will return a zero length
- * string.
- *
- * VALID RANGE
- *
- * 4714 B.C. to at least 10000 A.D.
- *
- * Although this software can handle dates all the way back to 4714
- * B.C., such use may not be meaningful. The Gregorian calendar was
- * not instituted until October 15, 1582 (or October 5, 1582 in the
- * Julian calendar). Some countries did not accept it until much
- * later. For example, Britain converted in 1752, The USSR in 1918 and
- * Greece in 1923. Most European countries used the Julian calendar
- * prior to the Gregorian.
- *
- * CALENDAR OVERVIEW
- *
- * The Gregorian calendar is a modified version of the Julian calendar.
- * The only difference being the specification of leap years. The
- * Julian calendar specifies that every year that is a multiple of 4
- * will be a leap year. This leads to a year that is 365.25 days long,
- * but the current accepted value for the tropical year is 365.242199
- * days.
- *
- * To correct this error in the length of the year and to bring the
- * vernal equinox back to March 21, Pope Gregory XIII issued a papal
- * bull declaring that Thursday October 4, 1582 would be followed by
- * Friday October 15, 1582 and that centennial years would only be a
- * leap year if they were a multiple of 400. This shortened the year
- * by 3 days per 400 years, giving a year of 365.2425 days.
- *
- * Another recently proposed change in the leap year rule is to make
- * years that are multiples of 4000 not a leap year, but this has never
- * been officially accepted and this rule is not implemented in these
- * algorithms.
- *
- * ALGORITHMS
- *
- * The calculations are based on three different cycles: a 400 year
- * cycle of leap years, a 4 year cycle of leap years and a 5 month
- * cycle of month lengths.
- *
- * The 5 month cycle is used to account for the varying lengths of
- * months. You will notice that the lengths alternate between 30
- * and 31 days, except for three anomalies: both July and August
- * have 31 days, both December and January have 31, and February
- * is less than 30. Starting with March, the lengths are in a
- * cycle of 5 months (31, 30, 31, 30, 31):
- *
- * Mar 31 days \
- * Apr 30 days |
- * May 31 days > First cycle
- * Jun 30 days |
- * Jul 31 days /
- *
- * Aug 31 days \
- * Sep 30 days |
- * Oct 31 days > Second cycle
- * Nov 30 days |
- * Dec 31 days /
- *
- * Jan 31 days \
- * Feb 28/9 days |
- * > Third cycle (incomplete)
- *
- * For this reason the calculations (internally) assume that the
- * year starts with March 1.
- *
- * TESTING
- *
- * This algorithm has been tested from the year 4714 B.C. to 10000
- * A.D. The source code of the verification program is included in
- * this package.
- *
- * REFERENCES
- *
- * Conversions Between Calendar Date and Julian Day Number by Robert J.
- * Tantzen, Communications of the Association for Computing Machinery
- * August 1963. (Also published in Collected Algorithms from CACM,
- * algorithm number 199).
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define GREGOR_SDN_OFFSET 32045
-#define DAYS_PER_5_MONTHS 153
-#define DAYS_PER_4_YEARS 1461
-#define DAYS_PER_400_YEARS 146097
-
-void SdnToGregorian(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- int century;
- int year;
- int month;
- int day;
- long int temp;
- int dayOfYear;
-
- if (sdn <= 0) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;
-
- /* Calculate the century (year/100). */
- century = temp / DAYS_PER_400_YEARS;
-
- /* Calculate the year and day of year (1 <= dayOfYear <= 366). */
- temp = ((temp % DAYS_PER_400_YEARS) / 4) * 4 + 3;
- year = (century * 100) + (temp / DAYS_PER_4_YEARS);
- dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1;
-
- /* Calculate the month and day of month. */
- temp = dayOfYear * 5 - 3;
- month = temp / DAYS_PER_5_MONTHS;
- day = (temp % DAYS_PER_5_MONTHS) / 5 + 1;
-
- /* Convert to the normal beginning of the year. */
- if (month < 10) {
- month += 3;
- } else {
- year += 1;
- month -= 9;
- }
-
- /* Adjust to the B.C./A.D. type numbering. */
- year -= 4800;
- if (year <= 0)
- year--;
-
- *pYear = year;
- *pMonth = month;
- *pDay = day;
-}
-
-long int GregorianToSdn(
- int inputYear,
- int inputMonth,
- int inputDay)
-{
- int year;
- int month;
-
- /* check for invalid dates */
- if (inputYear == 0 || inputYear < -4714 ||
- inputMonth <= 0 || inputMonth > 12 ||
- inputDay <= 0 || inputDay > 31) {
- return (0);
- }
- /* check for dates before SDN 1 (Nov 25, 4714 B.C.) */
- if (inputYear == -4714) {
- if (inputMonth < 11) {
- return (0);
- }
- if (inputMonth == 11 && inputDay < 25) {
- return (0);
- }
- }
- /* Make year always a positive number. */
- if (inputYear < 0) {
- year = inputYear + 4801;
- } else {
- year = inputYear + 4800;
- }
-
- /* Adjust the start of the year. */
- if (inputMonth > 2) {
- month = inputMonth - 3;
- } else {
- month = inputMonth + 9;
- year--;
- }
-
- return (((year / 100) * DAYS_PER_400_YEARS) / 4
- + ((year % 100) * DAYS_PER_4_YEARS) / 4
- + (month * DAYS_PER_5_MONTHS + 2) / 5
- + inputDay
- - GREGOR_SDN_OFFSET);
-}
-
-char *MonthNameShort[13] =
-{
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec"
-};
-
-char *MonthNameLong[13] =
-{
- "",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"
-};
diff --git a/ext/calendar/jewish.c b/ext/calendar/jewish.c
deleted file mode 100644
index 504f3c2d93..0000000000
--- a/ext/calendar/jewish.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/* $selId: jewish.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToJewish(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a Jewish calendar date. If the input SDN is before the
- * first day of year 1, the three output values will all be set to zero,
- * otherwise *pYear will be > 0; *pMonth will be in the range 1 to 13
- * inclusive; *pDay will be in the range 1 to 30 inclusive. Note that Adar
- * II is assigned the month number 7 and Elul is always 13.
- *
- * long int
- * JewishToSdn(
- * int year,
- * int month,
- * int day);
- *
- * Convert a Jewish calendar date to a SDN. Zero is returned when the
- * input date is detected as invalid or out of the supported range. The
- * return value will be > 0 for all valid, supported dates, but there are
- * some invalid dates that will return a positive value. To verify that a
- * date is valid, convert it to SDN and then back and compare with the
- * original.
- *
- * char *JewishMonthName[14];
- *
- * Convert a Jewish month number (1 to 13) to the name of the Jewish month
- * (null terminated). An index of zero will return a zero length string.
- *
- * VALID RANGE
- *
- * Although this software can handle dates all the way back to the year
- * 1 (3761 B.C.), such use may not be meaningful.
- *
- * The Jewish calendar has been in use for several thousand years, but
- * in the early days there was no formula to determine the start of a
- * month. A new month was started when the new moon was first
- * observed.
- *
- * It is not clear when the current rule based calendar replaced the
- * observation based calendar. According to the book "Jewish Calendar
- * Mystery Dispelled" by George Zinberg, the patriarch Hillel II
- * published these rules in 358 A.D. But, according to The
- * Encyclopedia Judaica, Hillel II may have only published the 19 year
- * rule for determining the occurrence of leap years.
- *
- * I have yet to find a specific date when the current set of rules
- * were known to be in use.
- *
- * CALENDAR OVERVIEW
- *
- * The Jewish calendar is based on lunar as well as solar cycles. A
- * month always starts on or near a new moon and has either 29 or 30
- * days (a lunar cycle is about 29 1/2 days). Twelve of these
- * alternating 29-30 day months gives a year of 354 days, which is
- * about 11 1/4 days short of a solar year.
- *
- * Since a month is defined to be a lunar cycle (new moon to new moon),
- * this 11 1/4 day difference cannot be overcome by adding days to a
- * month as with the Gregorian calendar, so an entire month is
- * periodically added to the year, making some years 13 months long.
- *
- * For astronomical as well as ceremonial reasons, the start of a new
- * year may be delayed until a day or two after the new moon causing
- * years to vary in length. Leap years can be from 383 to 385 days and
- * common years can be from 353 to 355 days. These are the months of
- * the year and their possible lengths:
- *
- * COMMON YEAR LEAP YEAR
- * 1 Tishri 30 30 30 30 30 30
- * 2 Heshvan 29 29 30 29 29 30 (variable)
- * 3 Kislev 29 30 30 29 30 30 (variable)
- * 4 Tevet 29 29 29 29 29 29
- * 5 Shevat 30 30 30 30 30 30
- * 6 Adar I 29 29 29 30 30 30 (variable)
- * 7 Adar II -- -- -- 29 29 29 (optional)
- * 8 Nisan 30 30 30 30 30 30
- * 9 Iyyar 29 29 29 29 29 29
- * 10 Sivan 30 30 30 30 30 30
- * 11 Tammuz 29 29 29 29 29 29
- * 12 Av 30 30 30 30 30 30
- * 13 Elul 29 29 29 29 29 29
- * --- --- --- --- --- ---
- * 353 354 355 383 384 385
- *
- * Note that the month names and other words that appear in this file
- * have multiple possible spellings in the Roman character set. I have
- * chosen to use the spellings found in the Encyclopedia Judaica.
- *
- * Adar II, the month added for leap years, is sometimes referred to as
- * the 13th month, but I have chosen to assign it the number 7 to keep
- * the months in chronological order. This may not be consistent with
- * other numbering schemes.
- *
- * Leap years occur in a fixed pattern of 19 years called the metonic
- * cycle. The 3rd, 6th, 8th, 11th, 14th, 17th and 19th years of this
- * cycle are leap years. The first metonic cycle starts with Jewish
- * year 1, or 3761/60 B.C. This is believed to be the year of
- * creation.
- *
- * To construct the calendar for a year, you must first find the length
- * of the year by determining the first day of the year (Tishri 1, or
- * Rosh Ha-Shanah) and the first day of the following year. This
- * selects one of the six possible month length configurations listed
- * above.
- *
- * Finding the first day of the year is the most difficult part.
- * Finding the date and time of the new moon (or molad) is the first
- * step. For this purpose, the lunar cycle is assumed to be 29 days 12
- * hours and 793 halakim. A halakim is 1/1080th of an hour or 3 1/3
- * seconds. (This assumed value is only about 1/2 second less than the
- * value used by modern astronomers -- not bad for a number that was
- * determined so long ago.) The first molad of year 1 occurred on
- * Sunday at 11:20:11 P.M. This would actually be Monday, because the
- * Jewish day is considered to begin at sunset.
- *
- * Since sunset varies, the day is assumed to begin at 6:00 P.M. for
- * calendar calculation purposes. So, the first molad was 5 hours 793
- * halakim after the start of Tishri 1, 0001 (which was Monday
- * September 7, 4761 B.C. by the Gregorian calendar). All subsequent
- * molads can be calculated from this starting point by adding the
- * length of a lunar cycle.
- *
- * Once the molad that starts a year is determined the actual start of
- * the year (Tishri 1) can be determined. Tishri 1 will be the day of
- * the molad unless it is delayed by one of the following four rules
- * (called dehiyyot). Each rule can delay the start of the year by one
- * day, and since rule #1 can combine with one of the other rules, it
- * can be delayed as much as two days.
- *
- * 1. Tishri 1 must never be Sunday, Wednesday or Friday. (This
- * is largely to prevent certain holidays from occurring on the
- * day before or after the Sabbath.)
- *
- * 2. If the molad occurs on or after noon, Tishri 1 must be
- * delayed.
- *
- * 3. If it is a common (not leap) year and the molad occurs on
- * Tuesday at or after 3:11:20 A.M., Tishri 1 must be delayed.
- *
- * 4. If it is the year following a leap year and the molad occurs
- * on Monday at or after 9:32:43 and 1/3 sec, Tishri 1 must be
- * delayed.
- *
- * GLOSSARY
- *
- * dehiyyot The set of 4 rules that determine when the new year
- * starts relative to the molad.
- *
- * halakim 1/1080th of an hour or 3 1/3 seconds.
- *
- * lunar cycle The period of time between mean conjunctions of the
- * sun and moon (new moon to new moon). This is
- * assumed to be 29 days 12 hours and 793 halakim for
- * calendar purposes.
- *
- * metonic cycle A 19 year cycle which determines which years are
- * leap years and which are common years. The 3rd,
- * 6th, 8th, 11th, 14th, 17th and 19th years of this
- * cycle are leap years.
- *
- * molad The date and time of the mean conjunction of the
- * sun and moon (new moon). This is the approximate
- * beginning of a month.
- *
- * Rosh Ha-Shanah The first day of the Jewish year (Tishri 1).
- *
- * Tishri The first month of the Jewish year.
- *
- * ALGORITHMS
- *
- * SERIAL DAY NUMBER TO JEWISH DATE
- *
- * The simplest approach would be to use the rules stated above to find
- * the molad of Tishri before and after the given day number. Then use
- * the molads to find Tishri 1 of the current and following years.
- * From this the length of the year can be determined and thus the
- * length of each month. But this method is used as a last resort.
- *
- * The first 59 days of the year are the same regardless of the length
- * of the year. As a result, only the day number of the start of the
- * year is required.
- *
- * Similarly, the last 6 months do not change from year to year. And
- * since it can be determined whether the year is a leap year by simple
- * division, the lengths of Adar I and II can be easily calculated. In
- * fact, all dates after the 3rd month are consistent from year to year
- * (once it is known whether it is a leap year).
- *
- * This means that if the given day number falls in the 3rd month or on
- * the 30th day of the 2nd month the length of the year must be found,
- * but in no other case.
- *
- * So, the approach used is to take the given day number and round it
- * to the closest molad of Tishri (first new moon of the year). The
- * rounding is not really to the *closest* molad, but is such that if
- * the day number is before the middle of the 3rd month the molad at
- * the start of the year is found, otherwise the molad at the end of
- * the year is found.
- *
- * Only if the day number is actually found to be in the ambiguous
- * period of 29 to 31 days is the other molad calculated.
- *
- * JEWISH DATE TO SERIAL DAY NUMBER
- *
- * The year number is used to find which 19 year metonic cycle contains
- * the date and which year within the cycle (this is a division and
- * modulus). This also determines whether it is a leap year.
- *
- * If the month is 1 or 2, the calculation is simple addition to the
- * first of the year.
- *
- * If the month is 8 (Nisan) or greater, the calculation is simple
- * subtraction from beginning of the following year.
- *
- * If the month is 4 to 7, it is considered whether it is a leap year
- * and then simple subtraction from the beginning of the following year
- * is used.
- *
- * Only if it is the 3rd month is both the start and end of the year
- * required.
- *
- * TESTING
- *
- * This algorithm has been tested in two ways. First, 510 dates from a
- * table in "Jewish Calendar Mystery Dispelled" were calculated and
- * compared to the table. Second, the calculation algorithm described
- * in "Jewish Calendar Mystery Dispelled" was coded and used to verify
- * all dates from the year 1 (3761 B.C.) to the year 13760 (10000
- * A.D.).
- *
- * The source code of the verification program is included in this
- * package.
- *
- * REFERENCES
- *
- * The Encyclopedia Judaica, the entry for "Calendar"
- *
- * The Jewish Encyclopedia
- *
- * Jewish Calendar Mystery Dispelled by George Zinberg, Vantage Press,
- * 1963
- *
- * The Comprehensive Hebrew Calendar by Arthur Spier, Behrman House
- *
- * The Book of Calendars [note that this work contains many typos]
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define HALAKIM_PER_HOUR 1080
-#define HALAKIM_PER_DAY 25920
-#define HALAKIM_PER_LUNAR_CYCLE ((29 * HALAKIM_PER_DAY) + 13753)
-#define HALAKIM_PER_METONIC_CYCLE (HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7))
-
-#define JEWISH_SDN_OFFSET 347997
-#define NEW_MOON_OF_CREATION 31524
-
-#define SUNDAY 0
-#define MONDAY 1
-#define TUESDAY 2
-#define WEDNESDAY 3
-#define THURSDAY 4
-#define FRIDAY 5
-#define SATURDAY 6
-
-#define NOON (18 * HALAKIM_PER_HOUR)
-#define AM3_11_20 ((9 * HALAKIM_PER_HOUR) + 204)
-#define AM9_32_43 ((15 * HALAKIM_PER_HOUR) + 589)
-
-static int monthsPerYear[19] =
-{
-12, 12, 13, 12, 12, 13, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 13
-};
-
-static int yearOffset[19] =
-{
- 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123,
- 136, 148, 160, 173, 185, 197, 210, 222
-};
-
-char *JewishMonthName[14] =
-{
- "",
- "Tishri",
- "Heshvan",
- "Kislev",
- "Tevet",
- "Shevat",
- "AdarI",
- "AdarII",
- "Nisan",
- "Iyyar",
- "Sivan",
- "Tammuz",
- "Av",
- "Elul"
-};
-
-/************************************************************************
- * Given the year within the 19 year metonic cycle and the time of a molad
- * (new moon) which starts that year, this routine will calculate what day
- * will be the actual start of the year (Tishri 1 or Rosh Ha-Shanah). This
- * first day of the year will be the day of the molad unless one of 4 rules
- * (called dehiyyot) delays it. These 4 rules can delay the start of the
- * year by as much as 2 days.
- */
-static long int Tishri1(
- int metonicYear,
- long int moladDay,
- long int moladHalakim)
-{
- long int tishri1;
- int dow;
- int leapYear;
- int lastWasLeapYear;
-
- tishri1 = moladDay;
- dow = tishri1 % 7;
- leapYear = metonicYear == 2 || metonicYear == 5 || metonicYear == 7
- || metonicYear == 10 || metonicYear == 13 || metonicYear == 16
- || metonicYear == 18;
- lastWasLeapYear = metonicYear == 3 || metonicYear == 6
- || metonicYear == 8 || metonicYear == 11 || metonicYear == 14
- || metonicYear == 17 || metonicYear == 0;
-
- /* Apply rules 2, 3 and 4. */
- if ((moladHalakim >= NOON) ||
- ((!leapYear) && dow == TUESDAY && moladHalakim >= AM3_11_20) ||
- (lastWasLeapYear && dow == MONDAY && moladHalakim >= AM9_32_43)) {
- tishri1++;
- dow++;
- if (dow == 7) {
- dow = 0;
- }
- }
- /* Apply rule 1 after the others because it can cause an additional
- * delay of one day. */
- if (dow == WEDNESDAY || dow == FRIDAY || dow == SUNDAY) {
- tishri1++;
- }
- return (tishri1);
-}
-
-/************************************************************************
- * Given a metonic cycle number, calculate the date and time of the molad
- * (new moon) that starts that cycle. Since the length of a metonic cycle
- * is a constant, this is a simple calculation, except that it requires an
- * intermediate value which is bigger that 32 bits. Because this
- * intermediate value only needs 36 to 37 bits and the other numbers are
- * constants, the process has been reduced to just a few steps.
- */
-static void MoladOfMetonicCycle(
- int metonicCycle,
- long int *pMoladDay,
- long int *pMoladHalakim)
-{
- register unsigned long int r1, r2, d1, d2;
-
- /* Start with the time of the first molad after creation. */
- r1 = NEW_MOON_OF_CREATION;
-
- /* Calculate metonicCycle * HALAKIM_PER_METONIC_CYCLE. The upper 32
- * bits of the result will be in r2 and the lower 16 bits will be
- * in r1. */
- r1 += metonicCycle * (HALAKIM_PER_METONIC_CYCLE & 0xFFFF);
- r2 = r1 >> 16;
- r2 += metonicCycle * ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF);
-
- /* Calculate r2r1 / HALAKIM_PER_DAY. The remainder will be in r1, the
- * upper 16 bits of the quotient will be in d2 and the lower 16 bits
- * will be in d1. */
- d2 = r2 / HALAKIM_PER_DAY;
- r2 -= d2 * HALAKIM_PER_DAY;
- r1 = (r2 << 16) | (r1 & 0xFFFF);
- d1 = r1 / HALAKIM_PER_DAY;
- r1 -= d1 * HALAKIM_PER_DAY;
-
- *pMoladDay = (d2 << 16) | d1;
- *pMoladHalakim = r1;
-}
-
-/************************************************************************
- * Given a day number, find the molad of Tishri (the new moon at the start
- * of a year) which is closest to that day number. It's not really the
- * *closest* molad that we want here. If the input day is in the first two
- * months, we want the molad at the start of the year. If the input day is
- * in the fourth to last months, we want the molad at the end of the year.
- * If the input day is in the third month, it doesn't matter which molad is
- * returned, because both will be required. This type of "rounding" allows
- * us to avoid calculating the length of the year in most cases.
- */
-static void FindTishriMolad(
- long int inputDay,
- int *pMetonicCycle,
- int *pMetonicYear,
- long int *pMoladDay,
- long int *pMoladHalakim)
-{
- long int moladDay;
- long int moladHalakim;
- int metonicCycle;
- int metonicYear;
-
- /* Estimate the metonic cycle number. Note that this may be an under
- * estimate because there are 6939.6896 days in a metonic cycle not
- * 6940, but it will never be an over estimate. The loop below will
- * correct for any error in this estimate. */
- metonicCycle = (inputDay + 310) / 6940;
-
- /* Calculate the time of the starting molad for this metonic cycle. */
- MoladOfMetonicCycle(metonicCycle, &moladDay, &moladHalakim);
-
- /* If the above was an under estimate, increment the cycle number until
- * the correct one is found. For modern dates this loop is about 98.6%
- * likely to not execute, even once, because the above estimate is
- * really quite close. */
- while (moladDay < inputDay - 6940 + 310) {
- metonicCycle++;
- moladHalakim += HALAKIM_PER_METONIC_CYCLE;
- moladDay += moladHalakim / HALAKIM_PER_DAY;
- moladHalakim = moladHalakim % HALAKIM_PER_DAY;
- }
-
- /* Find the molad of Tishri closest to this date. */
- for (metonicYear = 0; metonicYear < 18; metonicYear++) {
- if (moladDay > inputDay - 74) {
- break;
- }
- moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear];
- moladDay += moladHalakim / HALAKIM_PER_DAY;
- moladHalakim = moladHalakim % HALAKIM_PER_DAY;
- }
-
- *pMetonicCycle = metonicCycle;
- *pMetonicYear = metonicYear;
- *pMoladDay = moladDay;
- *pMoladHalakim = moladHalakim;
-}
-
-/************************************************************************
- * Given a year, find the number of the first day of that year and the date
- * and time of the starting molad.
- */
-static void FindStartOfYear(
- int year,
- int *pMetonicCycle,
- int *pMetonicYear,
- long int *pMoladDay,
- long int *pMoladHalakim,
- int *pTishri1)
-{
- *pMetonicCycle = (year - 1) / 19;
- *pMetonicYear = (year - 1) % 19;
- MoladOfMetonicCycle(*pMetonicCycle, pMoladDay, pMoladHalakim);
-
- *pMoladHalakim += HALAKIM_PER_LUNAR_CYCLE * yearOffset[*pMetonicYear];
- *pMoladDay += *pMoladHalakim / HALAKIM_PER_DAY;
- *pMoladHalakim = *pMoladHalakim % HALAKIM_PER_DAY;
-
- *pTishri1 = Tishri1(*pMetonicYear, *pMoladDay, *pMoladHalakim);
-}
-
-/************************************************************************
- * Given a serial day number (SDN), find the corresponding year, month and
- * day in the Jewish calendar. The three output values will always be
- * modified. If the input SDN is before the first day of year 1, they will
- * all be set to zero, otherwise *pYear will be > 0; *pMonth will be in the
- * range 1 to 13 inclusive; *pDay will be in the range 1 to 30 inclusive.
- */
-void SdnToJewish(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- long int inputDay;
- long int day;
- long int halakim;
- int metonicCycle;
- int metonicYear;
- int tishri1;
- int tishri1After;
- int yearLength;
-
- if (sdn <= JEWISH_SDN_OFFSET) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- inputDay = sdn - JEWISH_SDN_OFFSET;
-
- FindTishriMolad(inputDay, &metonicCycle, &metonicYear, &day, &halakim);
- tishri1 = Tishri1(metonicYear, day, halakim);
-
- if (inputDay >= tishri1) {
- /* It found Tishri 1 at the start of the year. */
- *pYear = metonicCycle * 19 + metonicYear + 1;
- if (inputDay < tishri1 + 59) {
- if (inputDay < tishri1 + 30) {
- *pMonth = 1;
- *pDay = inputDay - tishri1 + 1;
- } else {
- *pMonth = 2;
- *pDay = inputDay - tishri1 - 29;
- }
- return;
- }
- /* We need the length of the year to figure this out, so find
- * Tishri 1 of the next year. */
- halakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear];
- day += halakim / HALAKIM_PER_DAY;
- halakim = halakim % HALAKIM_PER_DAY;
- tishri1After = Tishri1((metonicYear + 1) % 19, day, halakim);
- } else {
- /* It found Tishri 1 at the end of the year. */
- *pYear = metonicCycle * 19 + metonicYear;
- if (inputDay >= tishri1 - 177) {
- /* It is one of the last 6 months of the year. */
- if (inputDay > tishri1 - 30) {
- *pMonth = 13;
- *pDay = inputDay - tishri1 + 30;
- } else if (inputDay > tishri1 - 60) {
- *pMonth = 12;
- *pDay = inputDay - tishri1 + 60;
- } else if (inputDay > tishri1 - 89) {
- *pMonth = 11;
- *pDay = inputDay - tishri1 + 89;
- } else if (inputDay > tishri1 - 119) {
- *pMonth = 10;
- *pDay = inputDay - tishri1 + 119;
- } else if (inputDay > tishri1 - 148) {
- *pMonth = 9;
- *pDay = inputDay - tishri1 + 148;
- } else {
- *pMonth = 8;
- *pDay = inputDay - tishri1 + 178;
- }
- return;
- } else {
- if (monthsPerYear[(*pYear - 1) % 19] == 13) {
- *pMonth = 7;
- *pDay = inputDay - tishri1 + 207;
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 30;
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 30;
- } else {
- *pMonth = 6;
- *pDay = inputDay - tishri1 + 207;
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 30;
- }
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 29;
- if (*pDay > 0)
- return;
-
- /* We need the length of the year to figure this out, so find
- * Tishri 1 of this year. */
- tishri1After = tishri1;
- FindTishriMolad(day - 365,
- &metonicCycle, &metonicYear, &day, &halakim);
- tishri1 = Tishri1(metonicYear, day, halakim);
- }
- }
-
- yearLength = tishri1After - tishri1;
- day = inputDay - tishri1 - 29;
- if (yearLength == 355 || yearLength == 385) {
- /* Heshvan has 30 days */
- if (day <= 30) {
- *pMonth = 2;
- *pDay = day;
- return;
- }
- day -= 30;
- } else {
- /* Heshvan has 29 days */
- if (day <= 29) {
- *pMonth = 2;
- *pDay = day;
- return;
- }
- day -= 29;
- }
-
- /* It has to be Kislev. */
- *pMonth = 3;
- *pDay = day;
-}
-
-/************************************************************************
- * Given a year, month and day in the Jewish calendar, find the
- * corresponding serial day number (SDN). Zero is returned when the input
- * date is detected as invalid. The return value will be > 0 for all valid
- * dates, but there are some invalid dates that will return a positive
- * value. To verify that a date is valid, convert it to SDN and then back
- * and compare with the original.
- */
-long int JewishToSdn(
- int year,
- int month,
- int day)
-{
- long int sdn;
- int metonicCycle;
- int metonicYear;
- int tishri1;
- int tishri1After;
- long int moladDay;
- long int moladHalakim;
- int yearLength;
- int lengthOfAdarIAndII;
-
- if (year <= 0 || day <= 0 || day > 30) {
- return (0);
- }
- switch (month) {
- case 1:
- case 2:
- /* It is Tishri or Heshvan - don't need the year length. */
- FindStartOfYear(year, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1);
- if (month == 1) {
- sdn = tishri1 + day - 1;
- } else {
- sdn = tishri1 + day + 29;
- }
- break;
-
- case 3:
- /* It is Kislev - must find the year length. */
-
- /* Find the start of the year. */
- FindStartOfYear(year, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1);
-
- /* Find the end of the year. */
- moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear];
- moladDay += moladHalakim / HALAKIM_PER_DAY;
- moladHalakim = moladHalakim % HALAKIM_PER_DAY;
- tishri1After = Tishri1((metonicYear + 1) % 19, moladDay, moladHalakim);
-
- yearLength = tishri1After - tishri1;
-
- if (yearLength == 355 || yearLength == 385) {
- sdn = tishri1 + day + 59;
- } else {
- sdn = tishri1 + day + 58;
- }
- break;
-
- case 4:
- case 5:
- case 6:
- /* It is Tevet, Shevat or Adar I - don't need the year length. */
-
- FindStartOfYear(year + 1, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1After);
-
- if (monthsPerYear[(year - 1) % 19] == 12) {
- lengthOfAdarIAndII = 29;
- } else {
- lengthOfAdarIAndII = 59;
- }
-
- if (month == 4) {
- sdn = tishri1After + day - lengthOfAdarIAndII - 237;
- } else if (month == 5) {
- sdn = tishri1After + day - lengthOfAdarIAndII - 208;
- } else {
- sdn = tishri1After + day - lengthOfAdarIAndII - 178;
- }
- break;
-
- default:
- /* It is Adar II or later - don't need the year length. */
- FindStartOfYear(year + 1, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1After);
-
- switch (month) {
- case 7:
- sdn = tishri1After + day - 207;
- break;
- case 8:
- sdn = tishri1After + day - 178;
- break;
- case 9:
- sdn = tishri1After + day - 148;
- break;
- case 10:
- sdn = tishri1After + day - 119;
- break;
- case 11:
- sdn = tishri1After + day - 89;
- break;
- case 12:
- sdn = tishri1After + day - 60;
- break;
- case 13:
- sdn = tishri1After + day - 30;
- break;
- default:
- return (0);
- }
- }
- return (sdn + JEWISH_SDN_OFFSET);
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/calendar/julian.c b/ext/calendar/julian.c
deleted file mode 100644
index 39bcbc7e65..0000000000
--- a/ext/calendar/julian.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* $selId: julian.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToJulian(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a Julian calendar date. If the input SDN is less than
- * 1, the three output values will all be set to zero, otherwise *pYear
- * will be >= -4713 and != 0; *pMonth will be in the range 1 to 12
- * inclusive; *pDay will be in the range 1 to 31 inclusive.
- *
- * long int
- * JulianToSdn(
- * int inputYear,
- * int inputMonth,
- * int inputDay);
- *
- * Convert a Julian calendar date to a SDN. Zero is returned when the
- * input date is detected as invalid or out of the supported range. The
- * return value will be > 0 for all valid, supported dates, but there are
- * some invalid dates that will return a positive value. To verify that a
- * date is valid, convert it to SDN and then back and compare with the
- * original.
- *
- * VALID RANGE
- *
- * 4713 B.C. to at least 10000 A.D.
- *
- * Although this software can handle dates all the way back to 4713
- * B.C., such use may not be meaningful. The calendar was created in
- * 46 B.C., but the details did not stabilize until at least 8 A.D.,
- * and perhaps as late at the 4th century. Also, the beginning of a
- * year varied from one culture to another - not all accepted January
- * as the first month.
- *
- * CALENDAR OVERVIEW
- *
- * Julias Ceasar created the calendar in 46 B.C. as a modified form of
- * the old Roman republican calendar which was based on lunar cycles.
- * The new Julian calendar set fixed lengths for the months, abandoning
- * the lunar cycle. It also specified that there would be exactly 12
- * months per year and 365.25 days per year with every 4th year being a
- * leap year.
- *
- * Note that the current accepted value for the tropical year is
- * 365.242199 days, not 365.25. This lead to an 11 day shift in the
- * calendar with respect to the seasons by the 16th century when the
- * Gregorian calendar was created to replace the Julian calendar.
- *
- * The difference between the Julian and today's Gregorian calendar is
- * that the Gregorian does not make centennial years leap years unless
- * they are a multiple of 400, which leads to a year of 365.2425 days.
- * In other words, in the Gregorian calendar, 1700, 1800 and 1900 are
- * not leap years, but 2000 is. All centennial years are leap years in
- * the Julian calendar.
- *
- * The details are unknown, but the lengths of the months were adjusted
- * until they finally stablized in 8 A.D. with their current lengths:
- *
- * January 31
- * February 28/29
- * March 31
- * April 30
- * May 31
- * June 30
- * Quintilis/July 31
- * Sextilis/August 31
- * September 30
- * October 31
- * November 30
- * December 31
- *
- * In the early days of the calendar, the days of the month were not
- * numbered as we do today. The numbers ran backwards (decreasing) and
- * were counted from the Ides (15th of the month - which in the old
- * Roman republican lunar calendar would have been the full moon) or
- * from the Nonae (9th day before the Ides) or from the beginning of
- * the next month.
- *
- * In the early years, the beginning of the year varied, sometimes
- * based on the ascension of rulers. It was not always the first of
- * January.
- *
- * Also, today's epoch, 1 A.D. or the birth of Jesus Christ, did not
- * come into use until several centuries later when Christianity became
- * a dominant religion.
- *
- * ALGORITHMS
- *
- * The calculations are based on two different cycles: a 4 year cycle
- * of leap years and a 5 month cycle of month lengths.
- *
- * The 5 month cycle is used to account for the varying lengths of
- * months. You will notice that the lengths alternate between 30 and
- * 31 days, except for three anomalies: both July and August have 31
- * days, both December and January have 31, and February is less than
- * 30. Starting with March, the lengths are in a cycle of 5 months
- * (31, 30, 31, 30, 31):
- *
- * Mar 31 days \
- * Apr 30 days |
- * May 31 days > First cycle
- * Jun 30 days |
- * Jul 31 days /
- *
- * Aug 31 days \
- * Sep 30 days |
- * Oct 31 days > Second cycle
- * Nov 30 days |
- * Dec 31 days /
- *
- * Jan 31 days \
- * Feb 28/9 days |
- * > Third cycle (incomplete)
- *
- * For this reason the calculations (internally) assume that the year
- * starts with March 1.
- *
- * TESTING
- *
- * This algorithm has been tested from the year 4713 B.C. to 10000 A.D.
- * The source code of the verification program is included in this
- * package.
- *
- * REFERENCES
- *
- * Conversions Between Calendar Date and Julian Day Number by Robert J.
- * Tantzen, Communications of the Association for Computing Machinery
- * August 1963. (Also published in Collected Algorithms from CACM,
- * algorithm number 199). [Note: the published algorithm is for the
- * Gregorian calendar, but was adjusted to use the Julian calendar's
- * simpler leap year rule.]
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define JULIAN_SDN_OFFSET 32083
-#define DAYS_PER_5_MONTHS 153
-#define DAYS_PER_4_YEARS 1461
-
-void SdnToJulian(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- int year;
- int month;
- int day;
- long int temp;
- int dayOfYear;
-
- if (sdn <= 0) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- temp = (sdn + JULIAN_SDN_OFFSET) * 4 - 1;
-
- /* Calculate the year and day of year (1 <= dayOfYear <= 366). */
- year = temp / DAYS_PER_4_YEARS;
- dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1;
-
- /* Calculate the month and day of month. */
- temp = dayOfYear * 5 - 3;
- month = temp / DAYS_PER_5_MONTHS;
- day = (temp % DAYS_PER_5_MONTHS) / 5 + 1;
-
- /* Convert to the normal beginning of the year. */
- if (month < 10) {
- month += 3;
- } else {
- year += 1;
- month -= 9;
- }
-
- /* Adjust to the B.C./A.D. type numbering. */
- year -= 4800;
- if (year <= 0)
- year--;
-
- *pYear = year;
- *pMonth = month;
- *pDay = day;
-}
-
-long int JulianToSdn(
- int inputYear,
- int inputMonth,
- int inputDay)
-{
- int year;
- int month;
-
- /* check for invalid dates */
- if (inputYear == 0 || inputYear < -4713 ||
- inputMonth <= 0 || inputMonth > 12 ||
- inputDay <= 0 || inputDay > 31) {
- return (0);
- }
- /* check for dates before SDN 1 (Jan 2, 4713 B.C.) */
- if (inputYear == -4713) {
- if (inputMonth == 1 && inputDay == 1) {
- return (0);
- }
- }
- /* Make year always a positive number. */
- if (inputYear < 0) {
- year = inputYear + 4801;
- } else {
- year = inputYear + 4800;
- }
-
- /* Adjust the start of the year. */
- if (inputMonth > 2) {
- month = inputMonth - 3;
- } else {
- month = inputMonth + 9;
- year--;
- }
-
- return ((year * DAYS_PER_4_YEARS) / 4
- + (month * DAYS_PER_5_MONTHS + 2) / 5
- + inputDay
- - JULIAN_SDN_OFFSET);
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/calendar/php_calendar.h b/ext/calendar/php_calendar.h
deleted file mode 100644
index 79c9edf73c..0000000000
--- a/ext/calendar/php_calendar.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef PHP_CALENDAR_H
-#define PHP_CALENDAR_H
-
-extern zend_module_entry calendar_module_entry;
-#define calendar_module_ptr &calendar_module_entry
-
-/* Functions */
-
-PHP_MINIT_FUNCTION(calendar);
-PHP_RINIT_FUNCTION(calendar);
-PHP_RSHUTDOWN_FUNCTION(calendar);
-PHP_MINFO_FUNCTION(calendar);
-
-PHP_FUNCTION(jdtogregorian);
-PHP_FUNCTION(gregoriantojd);
-PHP_FUNCTION(jdtojulian);
-PHP_FUNCTION(juliantojd);
-PHP_FUNCTION(jdtojewish);
-PHP_FUNCTION(jewishtojd);
-PHP_FUNCTION(jdtofrench);
-PHP_FUNCTION(frenchtojd);
-PHP_FUNCTION(jddayofweek);
-PHP_FUNCTION(jdmonthname);
-PHP_FUNCTION(easter_days);
-PHP_FUNCTION(easter_date);
-PHP_FUNCTION(unixtojd);
-PHP_FUNCTION(jdtounix);
-PHP_FUNCTION(cal_from_jd);
-PHP_FUNCTION(cal_to_jd);
-PHP_FUNCTION(cal_days_in_month);
-PHP_FUNCTION(cal_info);
-
-#define phpext_calendar_ptr calendar_module_ptr
-
-/*
- * Specifying the easter calculation method
- *
- * DEFAULT is Anglican, ie. use Julian calendar before 1753
- * and Gregorian after that. With ROMAN, the cutoff year is 1582.
- * ALWAYS_GREGORIAN and ALWAYS_JULIAN force the calendar
- * regardless of date.
- *
- */
-
-#define CAL_EASTER_DEFAULT 0
-#define CAL_EASTER_ROMAN 1
-#define CAL_EASTER_ALWAYS_GREGORIAN 2
-#define CAL_EASTER_ALWAYS_JULIAN 3
-
-#endif
diff --git a/ext/calendar/sdncal.h b/ext/calendar/sdncal.h
deleted file mode 100644
index 6621d13682..0000000000
--- a/ext/calendar/sdncal.h
+++ /dev/null
@@ -1,96 +0,0 @@
-#ifndef SDNCAL_H
-#define SDNCAL_H
-/*
- * This code has been modified for use with PHP
- * by Shane Caraveo shane@caraveo.com
- * see below for more details
- *
- */
-
-/* $selId: sdncal.h,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * This package defines a set of routines that convert calendar dates to
- * and from a serial day number (SDN). The SDN is a serial numbering of
- * days where SDN 1 is November 25, 4714 BC in the Gregorian calendar and
- * SDN 2447893 is January 1, 1990. This system of day numbering is
- * sometimes referred to as Julian days, but to avoid confusion with the
- * Julian calendar, it is referred to as serial day numbers here. The term
- * Julian days is also used to mean the number of days since the beginning
- * of the current year.
- *
- * The SDN can be used as an intermediate step in converting from one
- * calendar system to another (such as Gregorian to Jewish). It can also
- * be used for date computations such as easily comparing two dates,
- * determining the day of the week, finding the date of yesterday or
- * calculating the number of days between two dates.
- *
- * When using this software on 16 bit systems, be careful to store SDNs in
- * a long int, because it will not fit in the 16 bits that some systems
- * allocate to an int.
- *
- * For each calendar, there are two routines provided. One converts dates
- * in that calendar to SDN and the other converts SDN to calendar dates.
- * The routines are named SdnTo<CALENDAR>() and <CALENDAR>ToSdn(), where
- * <CALENDAR> is the name of the calendar system.
- *
- * SDN values less than one are not supported. If a conversion routine
- * returns an SDN of zero, this means that the date given is either invalid
- * or is outside the supported range for that calendar.
- *
- * At least some validity checks are performed on input dates. For
- * example, a negative month number will result in the return of zero for
- * the SDN. A returned SDN greater than one does not necessarily mean that
- * the input date was valid. To determine if the date is valid, convert it
- * to SDN, and if the SDN is greater than zero, convert it back to a date
- * and compare to the original. For example:
- *
- * int y1, m1, d1;
- * int y2, m2, d2;
- * long int sdn;
- * ...
- * sdn = GregorianToSdn(y1, m1, d1);
- * if (sdn > 0) {
- * SdnToGregorian(sdn, &y2, &m2, &d2);
- * if (y1 == y2 && m1 == m2 && d1 == d2) {
- * ... date is valid ...
- * }
- * }
- *
- **************************************************************************/
-
-/* Gregorian calendar conversions. */
-void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int GregorianToSdn(int year, int month, int day);
-extern char *MonthNameShort[13];
-extern char *MonthNameLong[13];
-
-/* Julian calendar conversions. */
-void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int JulianToSdn(int year, int month, int day);
-
-/* Jewish calendar conversions. */
-void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int JewishToSdn(int year, int month, int day);
-extern char *JewishMonthName[14];
-
-/* French republic calendar conversions. */
-void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int FrenchToSdn(int inputYear, int inputMonth, int inputDay);
-extern char *FrenchMonthName[14];
-
-/* Islamic calendar conversions. */
-/* Not implemented yet. */
-
-/* Day of week conversion. 0=Sunday, 6=Saturday */
-int DayOfWeek(long int sdn);
-extern char *DayNameShort[7];
-extern char *DayNameLong[7];
-
-#endif /* SDNCAL_H */
diff --git a/ext/ccvs/CREDITS b/ext/ccvs/CREDITS
deleted file mode 100644
index cc90a4653f..0000000000
--- a/ext/ccvs/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ccvs
-Brendan W. McAdams, Doug DeJulio
diff --git a/ext/ccvs/TODO b/ext/ccvs/TODO
deleted file mode 100644
index ffcd7af4b2..0000000000
--- a/ext/ccvs/TODO
+++ /dev/null
@@ -1,7 +0,0 @@
-CCVS Module ToDo List
-08/14/2000
-Brendan W. McAdams <bmcadams@php.net>
--------------------------------------
-- Return value of the final stats of an authorization should already be split out into a php aware associative
- array, instead of having to do this at the PHP level. Right now we are splitting stuff out using text_value;
- I'm evaluating the merits of having a seperate function for the 'finishing' of a sale....
diff --git a/ext/ccvs/ccvs.c b/ext/ccvs/ccvs.c
deleted file mode 100644
index 8f3ed09e5e..0000000000
--- a/ext/ccvs/ccvs.c
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Brendan W. McAdams <bmcadams@php.net> |
- | Doug DeJulio <ddj@redhat.com> |
- +----------------------------------------------------------------------+
- */
-/*
-* cvvs.c $Revision$ - PHP4 Interface to the RedHat CCVS API
-* -------
-* Interfaces RedHat's CCVS [Credit Card Verification System] <http://www.redhat.com/products/ccvs/>
-* This code is ported from an original php3 interface written by RedHat's Doug DeJulio <ddj@redhat.com>
-* The code was subsequently ported to the Zend API by Brendan W. McAdams <bmcadams@php.net>
-* -------
-*/
-
-/*
-* Code started on 2000.07.24@09.04.EST by Brendan W. McAdams <bmcadams@php.net>
-* $Revision$
-*/
-
-static char const cvsid[] = "$Id$";
-
-#include <php.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ccvs.h>
-
-
- /*
- * Create the Zend Internal hash construct to track this modules functions
- *
- * In case anyone is wondering why we use ccvs_<action> instead of cv_<action>,
- * it's because we are directly importing functions of the actual CCVS, which uses functions that are
- * cv_<action>, and we had problems implementing ZEND_NAMED_FE calls (bug in NAMED_FE? investigate
- * later). We don't want our PHP calls to conflict with the C calls in the CCVS API.
- *
- * BWM - 2000.07.27@16.41.EST - Added FALIAS Calls. While I'm of the opinion that naming the
- * functions in PHP ccvs_<action> is much more readable and clear to anyone reading the code than
- * cv_<action>, It strikes me that many people coming from php3 -> php4 will need backwards
- * compatibility. It was kind of careless to simply change the function calls (There were reasons other
- * than readability behind this; the ZEND_NAMED_FE macro was misbehaving) and not provide for
- * backwards compatibility - this *IS* an API and should scale with compatibility.
- *
- */
-
- function_entry ccvs_functions[] = {
- PHP_FE(ccvs_init, NULL)
- PHP_FALIAS(cv_init, ccvs_init, NULL)
- PHP_FE(ccvs_done, NULL)
- PHP_FALIAS(cv_done, ccvs_done, NULL)
- PHP_FE(ccvs_new, NULL)
- PHP_FALIAS(cv_new, ccvs_new, NULL)
- PHP_FE(ccvs_add, NULL)
- PHP_FALIAS(cv_add, ccvs_add, NULL)
- PHP_FE(ccvs_delete, NULL)
- PHP_FALIAS(cv_delete, ccvs_delete, NULL)
- PHP_FE(ccvs_auth, NULL)
- PHP_FALIAS(cv_auth, ccvs_auth, NULL)
- PHP_FE(ccvs_return, NULL)
- PHP_FALIAS(cv_return, ccvs_return, NULL)
- PHP_FE(ccvs_reverse, NULL)
- PHP_FALIAS(cv_reverse, ccvs_reverse, NULL)
- PHP_FE(ccvs_sale, NULL)
- PHP_FALIAS(cv_sale, ccvs_sale, NULL)
- PHP_FE(ccvs_void, NULL)
- PHP_FALIAS(cv_void, ccvs_void, NULL)
- PHP_FE(ccvs_status, NULL)
- PHP_FALIAS(cv_status, ccvs_status, NULL)
- PHP_FE(ccvs_count, NULL)
- PHP_FALIAS(cv_count, ccvs_count, NULL)
- PHP_FE(ccvs_lookup, NULL)
- PHP_FALIAS(cv_lookup, ccvs_lookup, NULL)
- PHP_FE(ccvs_report, NULL)
- PHP_FALIAS(cv_report, ccvs_report, NULL)
- PHP_FE(ccvs_command, NULL)
- PHP_FALIAS(cv_command, ccvs_command, NULL)
- PHP_FE(ccvs_textvalue, NULL)
- PHP_FALIAS(cv_textvalue, ccvs_textvalue, NULL)
- {NULL, NULL, NULL}
- };
-
-/* End function declarations */
-
-/* Zend Engine Exports - module information */
-
- /* Declare our module to the Zend engine */
- zend_module_entry ccvs_module_entry = {
- STANDARD_MODULE_HEADER,
- "CCVS",
- ccvs_functions,
- NULL, NULL, NULL, NULL,
- PHP_MINFO(ccvs),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
- };
-
-#ifdef COMPILE_DL_CCVS
-ZEND_GET_MODULE(ccvs)
-#endif
-
-/* Full Functions (The actual CCVS functions and any internal php hooked functions such as MINFO) */
-
-/* {{{ proto string ccvs_init(string name)
- Initialize CCVS for use */
-PHP_FUNCTION(ccvs_init) /* cv_init() */
-{
- zval **name;
- void *vsess;
- char *p;
-
- if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &name) != SUCCESS))
- /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(name);
-
- vsess = cv_init(Z_STRVAL_PP(name));
-
- /*
- * -- In the case that we don't run error checking on the return value... --
- * On 32 bit systems a failure of the cv_init call returns 0,0,0,0 ; on 64 bit systems its 0,0,0,0,0,0,0,0
- * This unconsistent error (not to mention a string of comma seperated zeros in and of itself) is hard to
- * Trap for in PHP (or any language). However, we can also grab cv_init to return CV_SESS_BAD on
- * failure at the C API level, and return a set, fixed error code to the user which the user then knows to
- * trap for... e.g. a NULL Value which PHP can then trap by:
- * if (!($string = cv_init($config)) { or some such...
- */
-
- if (vsess == CV_SESS_BAD) /* if the cv_init() call failed... */
- {
-
- p = ""; /* set p, the value we will return, to NULL */
-
- }
- else /* we got a valid session returned, which means it worked */
- {
-
- p = hks_ptr_ptrtostring(vsess); /* Convert the (void*) into a string representation. */
-
- }
-
- RETVAL_STRING(p, 1);
-
- free(p);
- return;
-}
-/* }}} */
-
-/* {{{ proto string ccvs_done(string sess)
- Terminate CCVS engine and do cleanup work */
-PHP_FUNCTION(ccvs_done) /* cv_done() */
-{
- zval **sess;
- void *vsess;
-
- if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &sess) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(sess);
-
- /* Convert from the string representation back to a (void*) */
- vsess = hks_ptr_stringtoptr(Z_STRVAL_PP(sess));
- cv_done(vsess);
-
- RETURN_STRING("OK", 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_new(string session, string invoice)
- Create a new, blank transaction */
-PHP_FUNCTION(ccvs_new) /* cv_new() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- if (!Z_STRVAL_PP(psess)) {
- php_error(E_WARNING, "Invalid session to ccvs_new()");
- RETURN_FALSE;
- }
-
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
-
- r = cv_new(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_add(string session, string invoice, string argtype, string argval)
- Add data to a transaction */
-PHP_FUNCTION(ccvs_add) /* cv_add() */
-{
- zval **psess;
- zval **pinvoice;
- zval **pargtype;
- zval **pargval;
- void *sess;
- char *invoice;
- int argtype;
- char *argval;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 4) || (zend_get_parameters_ex(4, &psess, &pinvoice, &pargtype, &pargval) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- /* Get meaningful arguments. */
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- convert_to_string_ex(pargtype);
- convert_to_string_ex(pargval);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
- invoice = Z_STRVAL_PP(pinvoice);
- argtype = cv_str2arg(Z_STRVAL_PP(pargtype));
- argval = Z_STRVAL_PP(pargval);
-
- r = cv_add(sess, invoice, argtype, argval);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/*
-* cv_create can't be implemented because of vararg limits in PHP3's C API.
-* (COMMENT BY DDJ [from original code])
-*
-* BWM: I looked into this, checking in on what cv_create was; it is a deprecated function left in for
-* backwards compatibility according
-* to the CCVS C API ref. I didn't try to implement it for that reason. If anyone needs it, they can add it in
-* themselves I'm sure.
-*/
-
-/* {{{ proto string ccvs_delete(string session, string invoice)
- Delete a transaction */
-PHP_FUNCTION(ccvs_delete) /* cv_delete() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_delete(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_auth(string session, string invoice)
- Perform credit authorization test on a transaction */
-PHP_FUNCTION(ccvs_auth) /* cv_auth() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_auth(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_return(string session, string invoice)
- Transfer funds from the merchant to the credit card holder */
-PHP_FUNCTION(ccvs_return) /* cv_return() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_return(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_reverse(string session, string invoice)
- Perform a full reversal on an already-processed authorization */
-PHP_FUNCTION(ccvs_reverse) /* cv_reverse() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_reverse(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_sale(string session, string invoice)
- Transfer funds from the credit card holder to the merchant */
-PHP_FUNCTION(ccvs_sale) /* cv_sale() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_sale(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_void(string session, string invoice)
- Perform a full reversal on a completed transaction */
-PHP_FUNCTION(ccvs_void) /* cv_void() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_void(sess, invoice);
-
- RETURN_STRING(cv_ret2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_status(string session, string invoice)
- Check the status of an invoice */
-PHP_FUNCTION(ccvs_status) /* cv_status() */
-{
- zval **psess;
- zval **pinvoice;
- void *sess;
- char *invoice;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(pinvoice);
- invoice = Z_STRVAL_PP(pinvoice);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_status(sess, invoice);
-
- RETURN_STRING(cv_stat2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto int ccvs_count(string session, string type)
- Find out how many transactions of a given type are stored in the system */
-PHP_FUNCTION(ccvs_count) /* cv_count() */
-{
- zval **psess;
- zval **ptype;
- void *sess;
- int type;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &ptype) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- convert_to_string_ex(ptype);
- type = cv_str2stat(Z_STRVAL_PP(ptype));
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- r = cv_count(sess, type);
-
- RETURN_LONG(r);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_lookup(string session, string invoice, int inum)
- Look up an item of a particular type in the database */
-PHP_FUNCTION(ccvs_lookup) /* cv_lookup() */
-{
- zval **psess;
- zval **ptype;
- zval **pinum;
- void *sess;
- int type;
- long inum;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 3) || (zend_get_parameters_ex(3, &psess, &ptype, &pinum) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
- convert_to_string_ex(ptype);
- type = cv_str2stat(Z_STRVAL_PP(ptype));
- convert_to_long_ex(pinum);
- inum = Z_LVAL_PP(pinum);
-
- r = cv_lookup(sess, type, inum);
-
- RETURN_STRING(cv_textvalue(sess), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_report(string session, string type)
- Return the status of the background communication process */
-PHP_FUNCTION(ccvs_report) /* cv_report() */
-{
- zval **psess;
- zval **ptype;
- void *sess;
- int type;
- long inum;
- register int r;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &ptype) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
- convert_to_string_ex(ptype);
- type = cv_str2rep(Z_STRVAL_PP(ptype));
-
- r = cv_report(sess, type);
-
- RETURN_STRING(cv_stat2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_command(string session, string type, string argval)
- Performs a command which is peculiar to a single protocol, and thus is not available in the general CCVS API */
-PHP_FUNCTION(ccvs_command) /* cv_command() */
-{
- zval **psess;
- zval **ptype;
- zval **pargval;
- void *sess;
- int type;
- register int r;
- char *argval;
-
- if ((ZEND_NUM_ARGS() != 3) || (zend_get_parameters_ex(3, &psess, &ptype, &pargval) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
- convert_to_string_ex(ptype);
- type = cv_str2cmd(Z_STRVAL_PP(ptype));
- convert_to_string_ex(pargval);
- argval = Z_STRVAL_PP(pargval);
-
- r = cv_command(sess, type, argval);
-
- RETURN_STRING(cv_stat2str(r), 1);
-}
-/* }}} */
-
-/* {{{ proto string ccvs_textvalue(string session)
- Get text return value for previous function call */
-PHP_FUNCTION(ccvs_textvalue) /* cv_textvalue() */
-{
- zval **psess;
- void *sess;
-
- if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &psess) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(psess);
- sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess));
-
- RETURN_STRING(cv_textvalue(sess), 1);
-}
-/* }}} */
-
-/*
-* Our Info Function which reports info on this module out to PHP's phpinfo() function
-* Brendan W. McAdams <bmcadams@php.net> on 2000.07.26@16:22.EST
-*/
-
-PHP_MINFO_FUNCTION(ccvs)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "RedHat CCVS support", "enabled");
- php_info_print_table_row(2, "CCVS Support by", "Brendan W. McAdams &lt;bmcadams@php.net&gt;<br />&amp; Doug DeJulio &lt;ddj@redhat.com&gt;");
- php_info_print_table_row(2, "Release ID", cvsid);
- php_info_print_table_row(2, "This Release Certified For CCVS Versions", "3.0 and greater");
- php_info_print_table_end();
-
- /* DISPLAY_INI_ENTRIES(); */
-
- /*
- * In the future, we will probably have entries in php.ini for runtime config, in which case we will
- * Uncomment the DISPLAY_INI_ENTRIES call...
- */
-
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ccvs/ccvs.h b/ext/ccvs/ccvs.h
deleted file mode 100644
index e5d860b539..0000000000
--- a/ext/ccvs/ccvs.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Brendan W. McAdams <bmcadams@php.net> |
- | Doug DeJulio <ddj@redhat.com> |
- +----------------------------------------------------------------------+
-*/
-
- #include <cv_api.h>
-
- extern zend_module_entry ccvs_module_entry;
-
- #define ccvs_module_ptr &ccvs_module_entry
- #define phpext_ccvs_ptr ccvs_module_ptr
-
- /* Declare functions not in cv_api.h but in libccvs.a. */
- char *hks_ptr_ptrtostring(void *vptr);
- void *hks_ptr_stringtoptr(char *str);
-
- /* Declare the Functions this Module Makes Available to Zend */
-
-
- /* Pre-declarations of functions */
- PHP_FUNCTION(ccvs_init);
- PHP_FUNCTION(ccvs_done);
- PHP_FUNCTION(ccvs_new);
- PHP_FUNCTION(ccvs_add);
- PHP_FUNCTION(ccvs_delete);
- PHP_FUNCTION(ccvs_auth);
- PHP_FUNCTION(ccvs_return);
- PHP_FUNCTION(ccvs_reverse);
- PHP_FUNCTION(ccvs_sale);
- PHP_FUNCTION(ccvs_void);
- PHP_FUNCTION(ccvs_status);
- PHP_FUNCTION(ccvs_count);
- PHP_FUNCTION(ccvs_lookup);
- PHP_FUNCTION(ccvs_report);
- PHP_FUNCTION(ccvs_command);
- PHP_FUNCTION(ccvs_textvalue);
- PHP_MINFO_FUNCTION(ccvs);
-
- /* Declare the information we need to dynamically link this module later */
- #if COMPILE_DL
- DLEXPORT zend_module_entry *get_module(void) { return &ccvs_module_entry; }
- #endif
-
- /* End exports */
-
diff --git a/ext/ccvs/config.m4 b/ext/ccvs/config.m4
deleted file mode 100644
index 5447a0d963..0000000000
--- a/ext/ccvs/config.m4
+++ /dev/null
@@ -1,27 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ccvs, for CCVS support,
-[ --with-ccvs[=DIR] Include CCVS support])
-
-if test "$PHP_CCVS" != "no"; then
- if test -r $PHP_CCVS/include/cv_api.h; then
- CCVS_DIR=$PHP_CCVS
- else
- for i in /usr /usr/local /usr/local/ccvs ; do
- if test -r $i/include/cv_api.h; then
- CCVS_DIR=$i
- fi
- done
- fi
-
- if test -z "$CCVS_DIR"; then
- AC_MSG_ERROR(not found. Please check your CCVS installation; cv_api.h should be in <ccvs_dir>/include/)
- fi
-
- PHP_ADD_INCLUDE($CCVS_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(ccvs, $CCVS_DIR/lib, CCVS_SHARED_LIBADD)
- PHP_NEW_EXTENSION(ccvs, ccvs.c, $ext_shared)
- PHP_SUBST(CCVS_SHARED_LIBADD)
-fi
diff --git a/ext/com/COM.c b/ext/com/COM.c
deleted file mode 100644
index 288a03ac32..0000000000
--- a/ext/com/COM.c
+++ /dev/null
@@ -1,2341 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- | Harald Radi <h.radi@nme.at> |
- | Alan Brown <abrown@pobox.com> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-/*
- * This module implements support for COM components that support the IDispatch
- * interface. Both local (COM) and remote (DCOM) components can be accessed.
- *
- * Type libraries can be loaded (in order for PHP to recognize automation constants)
- * by specifying a typelib_file in the PHP .ini file. That file should contain
- * paths to type libraries, one in every line. By default, constants are registered
- * as case-sensitive. If you want them to be defined as case-insensitive, add
- * #case_insensitive or #cis at the end of the type library path.
- *
- * This is also the first module to demonstrate Zend's OO syntax overloading
- * capabilities. CORBA coders are invited to write a CORBA module as well!
- *
- * Zeev
- */
-
-/*
- * 28.12.2000
- * unicode conversion fixed by Harald Radi <h.radi@nme.at>
- *
- * now all these strange '?'s should be disapeared
- */
-
-/*
- * 28.1.2001
- * VARIANT datatype and pass_by_reference support
- */
-
-/*
- * 03.6.2001
- * Enhanced Typelib support to include a search by name
- */
-
-#ifdef PHP_WIN32
-
-#define _WIN32_DCOM
-
-#include <iostream.h>
-#include <math.h>
-#include <ocidl.h>
-
-#include "php.h"
-#include "php_ini.h"
-
-#include "php_COM.h"
-#include "php_VARIANT.h"
-
-static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC);
-static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC);
-static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC);
-static void php_register_COM_class(TSRMLS_D);
-static void php_COM_init(int module_number TSRMLS_DC);
-static char *php_string_from_clsid(const CLSID *clsid TSRMLS_DC);
-static int com_enable_events(comval *obj, int enable);
-
-static int le_comval;
-static int codepage;
-
-#ifdef _DEBUG
-int resourcecounter = 1;
-#endif
-
-static unsigned char arg1and2_force_ref[] =
- { 2, BYREF_FORCE, BYREF_FORCE };
-
-function_entry COM_functions[] = {
- PHP_FE(com_load, NULL)
- PHP_FE(com_invoke, NULL)
- PHP_FE(com_addref, NULL)
- PHP_FE(com_release, NULL)
- PHP_FE(com_propget, NULL)
- PHP_FE(com_propput, NULL)
- PHP_FE(com_load_typelib, NULL)
- PHP_FE(com_isenum, NULL)
- PHP_FE(com_event_sink, arg1and2_force_ref)
- PHP_FE(com_message_pump, NULL)
- PHP_FE(com_print_typeinfo, NULL)
-
- PHP_FALIAS(com_get, com_propget, NULL)
- PHP_FALIAS(com_propset, com_propput, NULL)
- PHP_FALIAS(com_set, com_propput, NULL)
-
- { NULL, NULL, NULL }
-};
-
-
-static PHP_MINFO_FUNCTION(COM)
-{
- DISPLAY_INI_ENTRIES();
-}
-
-
-PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, char **ErrString TSRMLS_DC)
-{
- HRESULT hr;
- int failed = FALSE;
- unsigned int ArgErr;
- EXCEPINFO ExceptInfo;
-
- *ErrString = NULL;
- /* @todo use DispInvoke here ? */
- if (C_ISREFD(obj)) {
- if (C_HASTLIB(obj)) {
- hr = C_TYPEINFO_VT(obj)->Invoke(C_TYPEINFO(obj), C_DISPATCH(obj), dispIdMember, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr);
- if (FAILED(hr)) {
- hr = C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr);
- if (SUCCEEDED(hr)) {
- /*
- * ITypLib doesn't work
- * Release ITypeLib and fall back to IDispatch
- */
-
- C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj));
- C_HASTLIB(obj) = FALSE;
- }
- }
- } else {
- hr = C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr);
- }
-
- if (FAILED(hr)) {
- switch (hr) {
- case DISP_E_EXCEPTION: {
-
- char *src=estrdup("Unavailable");
- int srclen=strlen(src);
- char *desc=estrdup("Unavailable");
- int desclen=strlen(desc);
-
- if (ExceptInfo.bstrSource)
- {
- efree(src);
- src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
- SysFreeString(ExceptInfo.bstrSource);
- }
- if (ExceptInfo.bstrDescription)
- {
- efree(desc);
- desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
- SysFreeString(ExceptInfo.bstrDescription);
- }
-
- *ErrString = pemalloc(srclen+desclen+50, 1);
- sprintf(*ErrString, "<b>Source</b>: %s <b>Description</b>: %s", src, desc);
- efree(src);
- efree(desc);
-
- if (ExceptInfo.bstrHelpFile)
- {
- SysFreeString(ExceptInfo.bstrHelpFile);
- }
- }
- break;
- case DISP_E_PARAMNOTFOUND:
- case DISP_E_TYPEMISMATCH:
- *ErrString = pemalloc(25, 1);
- sprintf(*ErrString, "<b>Argument</b>: %d", pDispParams->cArgs-ArgErr+1);
- break;
- }
- }
-
- if (pVarResult && (V_VT(pVarResult) == VT_EMPTY)) {
- V_VT(pVarResult) = VT_I4;
- V_I4(pVarResult) = hr;
- }
-
- return hr;
- } else {
- return DISP_E_UNKNOWNINTERFACE;
- }
-}
-
-
-PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId TSRMLS_DC)
-{
- HRESULT hr;
-
- if (C_ISREFD(obj)) {
- if (C_HASTLIB(obj)) {
- hr = C_TYPEINFO_VT(obj)->GetIDsOfNames(C_TYPEINFO(obj), rgszNames, 1, rgDispId);
-
- if (FAILED(hr)) {
- hr = C_DISPATCH_VT(obj)->GetIDsOfNames(C_DISPATCH(obj), &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
-
- if (SUCCEEDED(hr)) {
- /*
- * ITypLib doesn't work
- * Release ITypeLib and fall back to IDispatch
- */
-
- C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj));
- C_HASTLIB(obj) = FALSE;
- }
- }
- } else {
- hr = C_DISPATCH_VT(obj)->GetIDsOfNames(C_DISPATCH(obj), &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
- }
-
- return hr;
- } else {
- return DISP_E_UNKNOWNINTERFACE;
- }
-}
-
-
-PHPAPI HRESULT php_COM_release(comval *obj TSRMLS_DC)
-{
- HRESULT hr;
-
- if (obj->refcount > 1) {
- C_RELEASE(obj);
- } else if (obj->refcount == 1) {
- if (C_HASTLIB(obj)) {
- C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj));
- }
- if (C_HASENUM(obj)) {
- hr = C_ENUMVARIANT_VT(obj)->Release(C_ENUMVARIANT(obj));
- }
- hr = C_DISPATCH_VT(obj)->Release(C_DISPATCH(obj));
- C_RELEASE(obj);
- }
-
- return obj->refcount;
-}
-
-
-PHPAPI HRESULT php_COM_addref(comval *obj TSRMLS_DC)
-{
- if (C_ISREFD(obj)) {
- C_ADDREF(obj);
- }
-
- return obj->refcount;
-}
-
-
-PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup TSRMLS_DC)
-{
- HRESULT hr = 1;
- DISPPARAMS dispparams;
- VARIANT *var_result;
- IDispatch FAR* pDisp;
-
- pDisp = *ppDisp;
- if (cleanup) {
- *ppDisp = NULL;
- }
-
- C_REFCOUNT(obj) = 1;
- C_DISPATCH(obj) = pDisp;
- C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj)));
-
- dispparams.rgvarg = NULL;
- dispparams.rgdispidNamedArgs = NULL;
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
-
- ALLOC_VARIANT(var_result);
-
- if (C_HASENUM(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), DISPID_NEWENUM, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
- DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dispparams, var_result, NULL, NULL))) {
- if (V_VT(var_result) == VT_UNKNOWN) {
- C_HASENUM(obj) = SUCCEEDED(V_UNKNOWN(var_result)->lpVtbl->QueryInterface(V_UNKNOWN(var_result), &IID_IEnumVARIANT,
- (void**)&C_ENUMVARIANT(obj)));
- } else if (V_VT(var_result) == VT_DISPATCH) {
- C_HASENUM(obj) = SUCCEEDED(V_DISPATCH(var_result)->lpVtbl->QueryInterface(V_DISPATCH(var_result), &IID_IEnumVARIANT,
- (void**)&C_ENUMVARIANT(obj)));
- }
- }
-
- FREE_VARIANT(var_result);
-
- if (!cleanup) {
- hr = C_DISPATCH_VT(obj)->AddRef(C_DISPATCH(obj));
- }
-
-#ifdef _DEBUG
- obj->resourceindex = resourcecounter++;
-#endif
-
- return hr;
-}
-
-
-PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup TSRMLS_DC)
-{
- HRESULT hr;
-
- C_HASTLIB(obj) = C_HASTLIB(clone);
- C_HASENUM(obj) = C_HASENUM(obj);
- C_DISPATCH(obj) = C_DISPATCH(clone);
- C_TYPEINFO(obj) = C_TYPEINFO(clone);
-
- if (cleanup || !C_ISREFD(obj)) {
- obj->refcount = clone->refcount;
- clone->refcount = 0;
- } else {
- if (C_HASTLIB(obj)) {
- C_TYPEINFO_VT(obj)->AddRef(C_TYPEINFO(obj));
- }
- if (C_HASENUM(obj)) {
- C_ENUMVARIANT_VT(obj)->AddRef(C_ENUMVARIANT(obj));
- }
- hr = C_DISPATCH_VT(obj)->AddRef(C_DISPATCH(obj));
- obj->refcount = 1;
- }
-
-#ifdef _DEBUG
- obj->resourceindex = resourcecounter++;
-#endif
-
- return hr;
-}
-
-
-PHPAPI char *php_COM_error_message(HRESULT hr TSRMLS_DC)
-{
- void *pMsgBuf;
-
- if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
- hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &pMsgBuf, 0, NULL)) {
- char error_string[] = "No description available";
-
- pMsgBuf = LocalAlloc(LMEM_FIXED, sizeof(error_string));
- memcpy(pMsgBuf, error_string, sizeof(error_string));
- }
-
- return pMsgBuf;
-}
-
-
-static char *php_string_from_clsid(const CLSID *clsid TSRMLS_DC)
-{
- LPOLESTR ole_clsid;
- char *clsid_str;
-
- StringFromCLSID(clsid, &ole_clsid);
- clsid_str = php_OLECHAR_to_char(ole_clsid, NULL, codepage TSRMLS_CC);
- LocalFree(ole_clsid);
-
- return clsid_str;
-}
-
-
-PHPAPI HRESULT php_COM_destruct(comval *obj TSRMLS_DC)
-{
- HRESULT hr = S_OK;
-
- com_enable_events(obj, FALSE);
- if (obj->sinkdispatch)
- obj->sinkdispatch->lpVtbl->Release(obj->sinkdispatch);
-
- if (C_ISREFD(obj)) {
- C_REFCOUNT(obj) = 1;
- hr = php_COM_release(obj TSRMLS_CC);
- }
- efree(obj);
-
- return hr;
-}
-
-
-static void php_comval_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_COM_destruct(rsrc->ptr TSRMLS_CC);
-}
-
-
-static PHP_INI_MH(OnTypelibFileChange)
-{
- FILE *typelib_file;
- char *typelib_name_buffer;
- char *strtok_buf = NULL;
- int interactive;
- interactive = CG(interactive);
-
- if (!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) {
- return FAILURE;
- }
-
- if (interactive) {
- printf("Loading type libraries...");
- fflush(stdout);
- }
-
- typelib_name_buffer = (char *) emalloc(sizeof(char)*1024);
-
- while (fgets(typelib_name_buffer, 1024, typelib_file)) {
- ITypeLib *pTL;
- char *typelib_name;
- char *modifier, *ptr;
- int mode = CONST_CS | CONST_PERSISTENT; /* CONST_PERSISTENT is ok here */
-
- if (typelib_name_buffer[0]==';') {
- continue;
- }
- typelib_name = php_strtok_r(typelib_name_buffer, "\r\n", &strtok_buf); /* get rid of newlines */
- if (typelib_name == NULL) {
- continue;
- }
- typelib_name = php_strtok_r(typelib_name, "#", &strtok_buf);
- modifier = php_strtok_r(NULL, "#", &strtok_buf);
- if (modifier != NULL) {
- if (!strcmp(modifier, "cis") || !strcmp(modifier, "case_insensitive")) {
- mode &= ~CONST_CS;
- }
- }
-
- /* Remove leading/training white spaces on search_string */
- while (isspace(*typelib_name)) {/* Ends on '\0' in worst case */
- typelib_name ++;
- }
- ptr = typelib_name + strlen(typelib_name) - 1;
- while ((ptr != typelib_name) && isspace(*ptr)) {
- *ptr = '\0';
- ptr--;
- }
-
- if (interactive) {
- printf("\rLoading %-60s\r", typelib_name);
- }
-
- if ((pTL = php_COM_find_typelib(typelib_name, mode TSRMLS_CC)) != NULL) {
- php_COM_load_typelib(pTL, mode TSRMLS_CC);
- pTL->lpVtbl->Release(pTL);
- }
- }
-
- efree(typelib_name_buffer);
- fclose(typelib_file);
-
- if (interactive) {
- printf("\r%70s\r", "");
- }
-
- return SUCCESS;
-}
-
-
-PHP_INI_BEGIN()
-PHP_INI_ENTRY_EX("com.allow_dcom", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY_EX("com.autoregister_typelib", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY_EX("com.autoregister_verbose", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY_EX("com.autoregister_casesensitive", "1", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY("com.typelib_file", "", PHP_INI_SYSTEM, OnTypelibFileChange)
-PHP_INI_END()
-
-
-/* {{{ proto int com_load(string module_name [, string remote_host [, int codepage [, string typelib]]])
- Loads a COM module */
-PHP_FUNCTION(com_load)
-{
- pval *module_name, *code_page, *typelib = NULL, *server_name = NULL, *user_name=NULL, *password=NULL, *domain=NULL;
- CLSID clsid;
- HRESULT hr;
- OLECHAR *ProgID;
- comval *obj;
- char *error_message;
- char *clsid_str;
- int mode = 0;
- ITypeLib *pTL;
- CLSCTX flags = CLSCTX_SERVER;
-
- codepage = CP_ACP;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- zend_get_parameters(ht, 1, &module_name);
- break;
-
- case 2:
- zend_get_parameters(ht, 2, &module_name, &server_name);
- break;
-
- case 3:
- zend_get_parameters(ht, 3, &module_name, &server_name, &code_page);
-
- convert_to_long_ex(&code_page);
- codepage = Z_LVAL_P(code_page);
- break;
-
- case 4:
- zend_get_parameters(ht, 4, &module_name, &server_name, &code_page, &typelib);
-
- convert_to_string_ex(&typelib);
- convert_to_long_ex(&code_page);
- codepage = Z_LVAL_P(code_page);
-
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (server_name != NULL) {
- /* What is server name? A String or an array? */
-
- if (Z_TYPE_P(server_name) == IS_NULL) {
- server_name = NULL;
- } else if (Z_TYPE_P(server_name) == IS_ARRAY) {
- pval **tmp;
- /* DAB: 22 Sept 2001
- * Aha - we have a number of possible arguments.
- * They are in the hash By name: Server, Domain, Username, Password
- * Flags.
- * This has been crafted to maintian maximum backward compatability.
- * If the server name is specified as a string, then the function
- * should behave as before by defaulting username and password and
- * using the (I believe) incorrect CLSCTX_SERVER instantiation
- * paramter. However if server is specified in this array then we
- * use either CLSCTX_REMOTE_SERVER or whatever flags are specified
- * in the array */
- HashTable *ht = Z_ARRVAL(*server_name);
- if (FAILURE == zend_hash_find(ht, "Server", 7, (void **) &tmp)) {
- server_name = NULL;
- } else {
- server_name = *tmp;
- convert_to_string_ex(&server_name);
- /* CLSCTX_SERVER includes INPROC and LOCAL SERVER. This means
- * that any local server will be instantiated BEFORE even
- * looking on a remote server. Thus if we have a server name,
- * probably we want to access a remote machine or we would not
- * have bothered specifying it. So it would be wrong to to
- * connect locally. Futher, unless the name passed is a GUID,
- * there has to be something to map the Prog.Id to GUID and
- * unless that has been modified to remove the information
- * about local instantiation CLSCTX_SERVER would force a local
- * instantiation This setting can be overridden below if the
- * user specifies a flags element */
- flags = CLSCTX_REMOTE_SERVER;
- }
- if (FAILURE == zend_hash_find(ht, "Username", 9, (void **) &tmp)) {
- user_name = NULL;
- } else {
- user_name = *tmp;
- convert_to_string_ex(&user_name);
- }
- if (FAILURE == zend_hash_find(ht, "Domain", 7, (void **) &tmp)) {
- domain = NULL;
- } else {
- domain = *tmp;
- convert_to_string_ex(&domain);
- }
- if (FAILURE == zend_hash_find(ht, "Password", 9, (void **) &tmp)) {
- password=NULL;
- } else {
- password = *tmp;
- convert_to_string_ex(&password);
- }
- if (SUCCESS == zend_hash_find(ht, "Flags", 6, (void **) &tmp)) {
- convert_to_long_ex(tmp);
- flags = (CLSCTX) Z_LVAL_PP(tmp);
- }
- } else {
- if (!INI_INT("com.allow_dcom")) {
- php_error(E_WARNING, "DCOM is disabled");
- RETURN_NULL();
- } else {
- flags = CLSCTX_REMOTE_SERVER;
- convert_to_string_ex(&server_name);
- }
- }
- }
-
- ALLOC_COM(obj);
- convert_to_string_ex(&module_name);
- ProgID = php_char_to_OLECHAR(Z_STRVAL_P(module_name), Z_STRLEN_P(module_name), codepage TSRMLS_CC);
-
- /* obtain CLSID */
- if (FAILED(CLSIDFromString(ProgID, &clsid))) {
- /* Perhaps this is a Moniker? */
- IBindCtx *pBindCtx;
- IMoniker *pMoniker;
- ULONG ulEaten;
-
- /* @todo if (server_name) */
-
- if (!server_name) {
- /* @todo shouldn't the bind context be fetched on module startup and kept as a global shared instance ?
- * all calls to BindToObject would deliver the same instance then (as desired)
- * IBindCtx::RegisterObjectBound() should be called then after mkparsedisplayname()
- *
- * @todo use mkparsedisplaynameex() ?
- */
- if (SUCCEEDED(hr = CreateBindCtx(0, &pBindCtx))) {
- if (SUCCEEDED(hr = MkParseDisplayName(pBindCtx, ProgID, &ulEaten, &pMoniker))) {
- hr = pMoniker->lpVtbl->BindToObject(pMoniker, pBindCtx, NULL, &IID_IDispatch, (LPVOID *) &C_DISPATCH(obj));
- pMoniker->lpVtbl->Release(pMoniker);
- }
- pBindCtx->lpVtbl->Release(pBindCtx);
- }
- } else {
- hr = MK_E_SYNTAX;
- }
-
- efree(ProgID);
-
- if (FAILED(hr)) {
- php_COM_destruct(obj TSRMLS_CC);
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Invalid ProgID, GUID string, or Moniker: %s", error_message);
- LocalFree(error_message);
- RETURN_NULL();
- }
- } else {
- efree(ProgID);
- /* obtain IDispatch */
- if (!server_name) {
- hr = CoCreateInstance(&clsid, NULL, flags, &IID_IDispatch, (LPVOID *) &C_DISPATCH(obj));
- } else {
- COSERVERINFO server_info;
- MULTI_QI pResults;
- COAUTHIDENTITY authid;
- COAUTHINFO authinfo = {RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, &authid, EOAC_NONE};
-
- server_info.dwReserved1=0;
- server_info.dwReserved2=0;
- server_info.pwszName = php_char_to_OLECHAR(Z_STRVAL_P(server_name), Z_STRLEN_P(server_name), codepage TSRMLS_CC);
- if (user_name) {
- /* Z_STRVAL_P(user_name); */
- /* Parse Username into domain\username */
- authid.User = (WCHAR *) Z_STRVAL_P(user_name);
- authid.UserLength = Z_STRLEN_P(user_name);
- if (password) {
- authid.Password = (USHORT *) Z_STRVAL_P(password);
- authid.PasswordLength = Z_STRLEN_P(password);
- } else {
- authid.Password = (USHORT *) "";
- authid.PasswordLength = 0;
- }
- if (domain) {
- authid.Domain = (USHORT *) Z_STRVAL_P(domain);
- authid.DomainLength = Z_STRLEN_P(domain);
- } else {
- authid.Domain = (USHORT *) "";
- authid.DomainLength = 0;
- }
- authid.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
-
- server_info.pAuthInfo=&authinfo;
- } else {
- server_info.pAuthInfo=NULL;
- }
-
- pResults.pIID = &IID_IDispatch;
- pResults.pItf = NULL;
- pResults.hr = S_OK;
- hr=CoCreateInstanceEx(&clsid, NULL, flags, &server_info, 1, &pResults);
- if (SUCCEEDED(hr)) {
- hr = pResults.hr;
- C_DISPATCH(obj) = (IDispatch *) pResults.pItf;
- }
- efree(server_info.pwszName);
- }
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- clsid_str = php_string_from_clsid(&clsid TSRMLS_CC);
- php_error(E_WARNING,"Unable to obtain IDispatch interface for CLSID %s: %s",clsid_str,error_message);
- LocalFree(error_message);
- efree(clsid_str);
- php_COM_destruct(obj TSRMLS_CC);
- RETURN_NULL();
- }
- }
-
- php_COM_set(obj, &C_DISPATCH(obj), TRUE TSRMLS_CC);
-
- if (INI_INT("com.autoregister_casesensitive")) {
- mode |= CONST_CS;
- }
-
- if (C_HASTLIB(obj)) {
- if (INI_INT("com.autoregister_typelib")) {
- unsigned int idx;
-
- /* @todo check if typlib isn't already loaded */
- if (C_TYPEINFO_VT(obj)->GetContainingTypeLib(C_TYPEINFO(obj), &pTL, &idx) == S_OK) {
- php_COM_load_typelib(pTL, mode TSRMLS_CC);
- pTL->lpVtbl->Release(pTL);
- }
- }
- } else {
- if (typelib != NULL) {
- ITypeLib *pTL;
-
- if ((pTL = php_COM_find_typelib(Z_STRVAL_P(typelib), mode TSRMLS_CC)) != NULL) {
- C_HASTLIB(obj) = SUCCEEDED(pTL->lpVtbl->GetTypeInfo(pTL, 0, &C_TYPEINFO(obj)));
- /* idx 0 should deliver the ITypeInfo for the IDispatch Interface */
- if (INI_INT("com.autoregister_typelib")) {
- php_COM_load_typelib(pTL, mode TSRMLS_CC);
- }
- pTL->lpVtbl->Release(pTL);
- }
- }
- }
-
- RETURN_RESOURCE(zend_list_insert(obj, IS_COM));
-}
-/* }}} */
-
-
-int do_COM_invoke(comval *obj, pval *function_name, VARIANT *var_result, pval **arguments, int arg_count TSRMLS_DC)
-{
- DISPID dispid;
- DISPPARAMS dispparams;
- HRESULT hr;
- OLECHAR *funcname;
- SAFEARRAY *pSA;
- SAFEARRAYBOUND rgsabound[1];
- VARIANT *variant_args;
- char *error_message;
- int current_arg, current_variant;
- unsigned long count;
-
- if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "next")) {
- /* Grab one argument off the stack, allocate enough
- * VARIANTs
- * Get the IEnumVariant interface and call ->Next();
- */
-
- switch (arg_count) {
- case 0:
- count = 1;
- break;
-
- case 1:
- convert_to_long_ex(&arguments[0]);
- count = Z_LVAL_P(arguments[0]);
- break;
-
- default:
- php_error(E_WARNING,"Wrong argument count to IEnumVariant::Next()");
-
- return FAILURE;
- }
-
- rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = count;
-
- if ((pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound)) == NULL) {
- VariantInit(var_result);
- return FAILURE;
- } else {
- V_ARRAY(var_result) = pSA;
- V_VT(var_result) = VT_VARIANT|VT_ARRAY;
- }
-
- if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Next(C_ENUMVARIANT(obj), count, pSA->pvData, &count))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- VariantClear(var_result);
- return FAILURE;
- }
-
- if (count != rgsabound[0].cElements) {
- rgsabound[0].cElements = count;
- if (FAILED(SafeArrayRedim(pSA, rgsabound))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- VariantClear(var_result);
- return FAILURE;
- }
- }
-
- /* return a single element if next() was called without count */
- if ((arg_count == 0) && (count == 1)) {
- long index[] = {0};
-
- SafeArrayGetElement(pSA, index, var_result);
- SafeArrayDestroy(pSA);
- }
-
- return SUCCESS;
- } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "all")) {
-#define FETCH_BLOCKSIZE 10 /* fetch blocks of 10 elements */
-
- count = FETCH_BLOCKSIZE;
-
- rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = count;
-
- if ((pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound)) == NULL) {
- VariantInit(var_result);
- return FAILURE;
- } else {
- V_ARRAY(var_result) = pSA;
- V_VT(var_result) = VT_VARIANT|VT_ARRAY;
- }
-
- /* blah*/
-
-
- } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "reset")) {
- if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Reset(C_ENUMVARIANT(obj)))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- return FAILURE;
- }
- return SUCCESS;
- } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "skip")) {
- unsigned long count;
-
- switch (arg_count) {
- case 0:
- count = 1;
- break;
-
- case 1:
- convert_to_long_ex(&arguments[0]);
- count = Z_LVAL_P(arguments[0]);
- break;
-
- default:
- php_error(E_WARNING,"Wrong argument count to IEnumVariant::Skip()");
- return FAILURE;
- }
- if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Skip(C_ENUMVARIANT(obj), count))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- return FAILURE;
- }
- return SUCCESS;
-
- } else {
- char *ErrString;
-
- funcname = php_char_to_OLECHAR(Z_STRVAL_P(function_name), Z_STRLEN_P(function_name), codepage TSRMLS_CC);
-
- hr = php_COM_get_ids_of_names(obj, &funcname, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(function_name), error_message);
- LocalFree(error_message);
- efree(funcname);
- return FAILURE;
- }
-
- variant_args = (VARIANT *) emalloc(sizeof(VARIANT) * arg_count);
-
- for (current_arg=0; current_arg<arg_count; current_arg++) {
- current_variant = arg_count - current_arg - 1;
- php_pval_to_variant(arguments[current_arg], &variant_args[current_variant], codepage TSRMLS_CC);
- }
-
- dispparams.rgvarg = variant_args;
- dispparams.rgdispidNamedArgs = NULL;
- dispparams.cArgs = arg_count;
- dispparams.cNamedArgs = 0;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC);
-
- efree(funcname);
- for (current_arg=0;current_arg<arg_count;current_arg++) {
- /* don't release IDispatch pointers as they are used afterwards */
- if (V_VT(&variant_args[current_arg]) != VT_DISPATCH) {
- /* @todo review this: what happens to an array of IDispatchs or a VARIANT->IDispatch */
- VariantClear(&variant_args[current_arg]);
- }
- }
- efree(variant_args);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- if (ErrString) {
- php_error(E_WARNING,"Invoke() failed: %s %s", error_message, ErrString);
- pefree(ErrString, 1);
- } else {
- php_error(E_WARNING,"Invoke() failed: %s", error_message);
- }
- LocalFree(error_message);
- return FAILURE;
- }
- }
- return SUCCESS;
-}
-
-
-/* {{{ proto mixed com_invoke(int module, string handler_name [, mixed arg [, mixed ...]])
- Invokes a COM module */
-PHP_FUNCTION(com_invoke)
-{
- pval **arguments;
- pval *object, *function_name;
- comval *obj;
- int type;
- int arg_count = ZEND_NUM_ARGS();
- VARIANT *var_result;
-
- if (arg_count<2) {
- ZEND_WRONG_PARAM_COUNT();
- }
- arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
- if (zend_get_parameters_array(ht, arg_count, arguments) == FAILURE) {
- RETURN_NULL();
- }
-
- object = arguments[0];
- function_name = arguments[1];
-
- /* obtain IDispatch interface */
- convert_to_long(object);
- obj = (comval *)zend_list_find(Z_LVAL_P(object), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler", Z_STRVAL_P(function_name));
- RETURN_NULL();
- }
-
- /* obtain property/method handler */
- convert_to_string_ex(&function_name);
-
- ALLOC_VARIANT(var_result);
-
- if (do_COM_invoke(obj, function_name, var_result, arguments+2, arg_count-2 TSRMLS_CC)==FAILURE) {
- FREE_VARIANT(var_result);
- efree(arguments);
-
- RETURN_NULL();
- }
-
- RETVAL_VARIANT(var_result);
-
- efree(arguments);
-}
-/* }}} */
-
-
-/* {{{ proto mixed com_release(int module)
- Releases a COM object */
-PHP_FUNCTION(com_release)
-{
- pval *object;
- comval *obj;
- int type;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count != 1) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (zend_get_parameters(ht, 1, &object)==FAILURE) {
- RETURN_FALSE;
- }
-
- /* obtain IDispatch interface */
- convert_to_long_ex(&object);
- obj = (comval *)zend_list_find(Z_LVAL_P(object), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler");
- RETURN_FALSE;
- }
-
- RETURN_LONG(php_COM_release(obj TSRMLS_CC))
-}
-/* }}} */
-
-
-/* {{{ proto mixed com_addref(int module)
- Increases the reference counter on a COM object */
-PHP_FUNCTION(com_addref)
-{
- pval *object;
- comval *obj;
- int type;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count != 1) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (zend_get_parameters(ht, 1, &object)==FAILURE) {
- RETURN_FALSE;
- }
-
- /* obtain IDispatch interface */
- convert_to_long_ex(&object);
- obj = (comval *)zend_list_find(Z_LVAL_P(object), &type);
- if (!obj || (type != IS_COM))
- {
- php_error(E_WARNING,"%d is not a COM object handler");
- RETURN_FALSE;
- }
-
- RETURN_LONG(php_COM_addref(obj TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto bool com_message_pump([int timeoutms])
- Process COM messages, sleeping for up to timeoutms milliseconds */
-PHP_FUNCTION(com_message_pump)
-{
- long timeoutms = 0;
- MSG msg;
- DWORD result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &timeoutms) == FAILURE)
- RETURN_FALSE;
-
- result = MsgWaitForMultipleObjects(0, NULL, FALSE, timeoutms, QS_ALLINPUT);
-
- if (result == WAIT_OBJECT_0) {
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- /* we processed messages */
- RETVAL_TRUE;
- } else {
- /* we did not process messages (timed out) */
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-static int com_enable_events(comval *obj, int enable)
-{
- if (obj->sinkdispatch) {
- IConnectionPointContainer *cont;
- IConnectionPoint *point;
-
- if (SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IConnectionPointContainer, (void**)&cont))) {
-
- if (SUCCEEDED(cont->lpVtbl->FindConnectionPoint(cont, &obj->sinkid, &point))) {
-
- if (enable) {
- point->lpVtbl->Advise(point, (IUnknown*)obj->sinkdispatch, &obj->sinkcookie);
- } else {
- point->lpVtbl->Unadvise(point, obj->sinkcookie);
- }
- point->lpVtbl->Release(point);
- }
- cont->lpVtbl->Release(cont);
- }
- }
- return 0;
-}
-
-static const struct {
- VARTYPE vt;
- const char *name;
-} vt_names[] = {
- { VT_NULL, "VT_NULL" },
- { VT_EMPTY, "VT_EMPTY" },
- { VT_UI1, "VT_UI1" },
- { VT_I2, "VT_I2" },
- { VT_I4, "VT_I4" },
- { VT_R4, "VT_R4" },
- { VT_R8, "VT_R8" },
- { VT_BOOL, "VT_BOOL" },
- { VT_ERROR, "VT_ERROR" },
- { VT_CY, "VT_CY" },
- { VT_DATE, "VT_DATE" },
- { VT_BSTR, "VT_BSTR" },
- { VT_DECIMAL, "VT_DECIMAL" },
- { VT_UNKNOWN, "VT_UNKNOWN" },
- { VT_DISPATCH, "VT_DISPATCH" },
- { VT_VARIANT, "VT_VARIANT" },
- { VT_I1, "VT_I1" },
- { VT_UI2, "VT_UI2" },
- { VT_UI4, "VT_UI4" },
- { VT_INT, "VT_INT" },
- { VT_UINT, "VT_UINT" },
- { VT_ARRAY, "VT_ARRAY" },
- { VT_BYREF, "VT_BYREF" },
- { VT_VOID, "VT_VOID" },
- { VT_PTR, "VT_PTR" },
- { VT_HRESULT, "VT_HRESULT" },
- { 0, NULL }
-};
-
-static inline const char *vt_to_string(VARTYPE vt)
-{
- int i;
- for (i = 0; vt_names[i].name != NULL; i++) {
- if (vt_names[i].vt == vt)
- return vt_names[i].name;
- }
- return "?";
-}
-
-static int process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid TSRMLS_DC)
-{
- TYPEATTR *attr;
- FUNCDESC *func;
- int i;
- OLECHAR *olename;
- char *ansiname = NULL;
- unsigned int ansinamelen;
- int ret = 0;
-
- if (FAILED(typeinfo->lpVtbl->GetTypeAttr(typeinfo, &attr)))
- return 0;
-
- /* verify that it is suitable */
- if (id_to_name == NULL || attr->typekind == TKIND_DISPATCH) {
-
- if (guid)
- memcpy(guid, &attr->guid, sizeof(GUID));
-
- if (printdef) {
- char *guidstring;
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, MEMBERID_NIL, &olename, NULL, NULL, NULL);
- ansiname = php_OLECHAR_to_char(olename, &ansinamelen, codepage TSRMLS_CC);
- SysFreeString(olename);
-
- guidstring = php_string_from_clsid(&attr->guid TSRMLS_CC);
- php_printf("class %s { /* GUID=%s */\n", ansiname, guidstring);
- efree(guidstring);
-
- efree(ansiname);
- }
-
- if (id_to_name)
- zend_hash_init(id_to_name, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- /* So we've got the dispatch interface; lets list the event methods */
- for (i = 0; i < attr->cFuncs; i++) {
- zval *tmp;
- DISPID lastid = 0; /* for props */
- int isprop;
-
- if (FAILED(typeinfo->lpVtbl->GetFuncDesc(typeinfo, i, &func)))
- break;
-
- isprop = (func->invkind & DISPATCH_PROPERTYGET || func->invkind & DISPATCH_PROPERTYPUT);
-
- if (!isprop || lastid != func->memid) {
-
- lastid = func->memid;
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, &olename, NULL, NULL, NULL);
- ansiname = php_OLECHAR_to_char(olename, &ansinamelen, codepage TSRMLS_CC);
- SysFreeString(olename);
-
- if (printdef) {
- int j;
- char *funcdesc;
- unsigned int funcdesclen, cnames = 0;
- BSTR *names;
-
- names = (BSTR*)emalloc((func->cParams + 1) * sizeof(BSTR));
-
- typeinfo->lpVtbl->GetNames(typeinfo, func->memid, names, func->cParams + 1, &cnames);
- /* first element is the function name */
- SysFreeString(names[0]);
-
- php_printf("\t/* DISPID=%d */\n", func->memid);
-
- if (func->elemdescFunc.tdesc.vt != VT_VOID) {
- php_printf("\t/* %s [%d] */\n",
- vt_to_string(func->elemdescFunc.tdesc.vt),
- func->elemdescFunc.tdesc.vt
- );
- }
-
- if (isprop) {
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL);
- if (olename) {
- funcdesc = php_OLECHAR_to_char(olename, &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(olename);
- php_printf("\t/* %s */\n", funcdesc);
- efree(funcdesc);
- }
-
- php_printf("\tvar $%s;\n\n", ansiname);
-
- } else {
- /* a function */
-
- php_printf("\tfunction %s(\n", ansiname);
-
- for (j = 0; j < func->cParams; j++) {
- ELEMDESC *elem = &func->lprgelemdescParam[j];
-
- php_printf("\t\t/* %s [%d] ", vt_to_string(elem->tdesc.vt), elem->tdesc.vt);
-
- if (elem->paramdesc.wParamFlags & PARAMFLAG_FIN)
- php_printf("[in]");
- if (elem->paramdesc.wParamFlags & PARAMFLAG_FOUT)
- php_printf("[out]");
-
- if (elem->tdesc.vt == VT_PTR) {
- /* what does it point to ? */
- php_printf(" --> %s [%d] ",
- vt_to_string(elem->tdesc.lptdesc->vt),
- elem->tdesc.lptdesc->vt
- );
- }
-
- /* when we handle prop put and get, this will look nicer */
- if (j+1 < (int)cnames) {
- funcdesc = php_OLECHAR_to_char(names[j+1], &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(names[j+1]);
- } else {
- funcdesc = "???";
- }
-
- php_printf(" */ %s%s%c\n",
- elem->tdesc.vt == VT_PTR ? "&$" : "$",
- funcdesc,
- j == func->cParams - 1 ? ' ' : ','
- );
-
- if (j+1 < (int)cnames)
- efree(funcdesc);
- }
-
- php_printf("\t\t)\n\t{\n");
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL);
- if (olename) {
- funcdesc = php_OLECHAR_to_char(olename, &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(olename);
- php_printf("\t\t/* %s */\n", funcdesc);
- efree(funcdesc);
- }
-
- php_printf("\t}\n");
- }
-
- efree(names);
- }
-
- if (id_to_name) {
- zend_str_tolower(ansiname, ansinamelen);
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, ansiname, ansinamelen, 0);
- zend_hash_index_update(id_to_name, func->memid, (void*)&tmp, sizeof(zval *), NULL);
- }
- }
- typeinfo->lpVtbl->ReleaseFuncDesc(typeinfo, func);
-
- }
-
- if (printdef)
- php_printf("}\n");
-
- ret = 1;
- } else {
- zend_error(E_WARNING, "Thats not a dispatchable interface!! type kind = %08x\n", attr->typekind);
- }
-
- typeinfo->lpVtbl->ReleaseTypeAttr(typeinfo, attr);
-
- return ret;
-}
-
-static ITypeInfo *locate_typeinfo(char *typelibname, comval *obj, char *dispname, int sink TSRMLS_DC)
-{
- ITypeInfo *typeinfo = NULL;
- ITypeLib *typelib = NULL;
- int gotguid = 0;
- GUID iid;
-
- if (obj) {
- if (dispname == NULL && sink) {
- IProvideClassInfo2 *pci2;
- IProvideClassInfo *pci;
-
- if (SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IProvideClassInfo2, (void**)&pci2))) {
- gotguid = SUCCEEDED(pci2->lpVtbl->GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid));
- pci2->lpVtbl->Release(pci2);
- }
- if (!gotguid && SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IProvideClassInfo, (void**)&pci))) {
- /* examine the available interfaces */
- /* TODO: write some code here */
- pci->lpVtbl->Release(pci);
- }
- } else if (dispname && C_HASTLIB(obj)) {
- unsigned int idx;
- /* get the library from the object; the rest will be dealt with later */
- C_TYPEINFO_VT(obj)->GetContainingTypeLib(C_TYPEINFO(obj), &typelib, &idx);
- } else if (typelibname == NULL) {
- C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &typeinfo);
- }
- } else if (typelibname) {
- /* Fetch the typelibrary and use that to look things up */
- typelib = php_COM_find_typelib(typelibname, CONST_CS TSRMLS_CC);
- }
-
- if (!gotguid && dispname && typelib) {
- unsigned short cfound;
- MEMBERID memid;
- OLECHAR *olename = php_char_to_OLECHAR(dispname, strlen(dispname), CP_ACP TSRMLS_CC);
-
- cfound = 1;
- if (FAILED(typelib->lpVtbl->FindName(typelib, olename, 0, &typeinfo, &memid, &cfound)) || cfound == 0) {
- CLSID coclass;
- ITypeInfo *coinfo;
-
- /* assume that it might be a progid instead */
- if (SUCCEEDED(CLSIDFromProgID(olename, &coclass)) &&
- SUCCEEDED(typelib->lpVtbl->GetTypeInfoOfGuid(typelib, &coclass, &coinfo))) {
-
- /* enumerate implemented interfaces and pick the one as indicated by sink */
- TYPEATTR *attr;
- int i;
-
- coinfo->lpVtbl->GetTypeAttr(coinfo, &attr);
-
- for (i = 0; i < attr->cImplTypes; i++) {
- HREFTYPE rt;
- int tf;
-
- if (FAILED(coinfo->lpVtbl->GetImplTypeFlags(coinfo, i, &tf)))
- continue;
-
- if ((sink && tf == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) ||
- (!sink && (tf & IMPLTYPEFLAG_FSOURCE) == 0)) {
-
- /* flags match what we are looking for */
-
- if (SUCCEEDED(coinfo->lpVtbl->GetRefTypeOfImplType(coinfo, i, &rt)))
- if (SUCCEEDED(coinfo->lpVtbl->GetRefTypeInfo(coinfo, rt, &typeinfo)))
- break;
-
- }
- }
-
- coinfo->lpVtbl->ReleaseTypeAttr(coinfo, attr);
- coinfo->lpVtbl->Release(coinfo);
- }
- }
-
-
- efree(olename);
- } else if (gotguid) {
- typelib->lpVtbl->GetTypeInfoOfGuid(typelib, &iid, &typeinfo);
- }
-
- if (typelib)
- typelib->lpVtbl->Release(typelib);
-
- return typeinfo;
-}
-
-/* {{{ proto bool com_print_typeinfo(mixed comobject | string typelib, string dispinterface, bool wantsink)
- Print out a PHP class definition for a dispatchable interface */
-PHP_FUNCTION(com_print_typeinfo)
-{
- zval *arg1;
- char *ifacename = NULL;
- char *typelibname = NULL;
- int ifacelen;
- zend_bool wantsink = 0;
- comval *obj = NULL;
- ITypeInfo *typeinfo;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/s!b", &arg1, &ifacename,
- &ifacelen, &wantsink)) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(arg1) == IS_OBJECT && (Z_OBJCE_P(arg1) == &COM_class_entry || !strcmp(Z_OBJCE_P(arg1)->name, "COM"))) {
- zval **tmp;
- zend_hash_index_find(Z_OBJPROP_P(arg1), 0, (void**)&tmp);
- ZEND_FETCH_RESOURCE(obj, comval*, tmp, -1, "comval", IS_COM);
- } else if (Z_TYPE_P(arg1) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE(obj, comval*, &arg1, -1, "comval", IS_COM);
- } else {
- convert_to_string(arg1);
- typelibname = Z_STRVAL_P(arg1);
- }
-
- typeinfo = locate_typeinfo(typelibname, obj, ifacename, wantsink TSRMLS_CC);
- if (typeinfo) {
- process_typeinfo(typeinfo, NULL, 1, NULL TSRMLS_CC);
- typeinfo->lpVtbl->Release(typeinfo);
- RETURN_TRUE;
- } else {
- zend_error(E_WARNING, "Unable to find typeinfo using the parameters supplied");
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool com_event_sink(mixed comobject, object sinkobject [, mixed sinkinterface])
- Connect events from a COM object to a PHP object */
-PHP_FUNCTION(com_event_sink)
-{
- zval *object, *sinkobject, *sink=NULL;
- char *dispname = NULL, *typelibname = NULL;
- zend_bool gotguid = 0;
- comval *obj;
- ITypeInfo *typeinfo = NULL;
-
- RETVAL_FALSE;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|z/", &object, &sinkobject, &sink)) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(object) == IS_OBJECT && (Z_OBJCE_P(object) == &COM_class_entry || !strcmp(Z_OBJCE_P(object)->name, "COM"))) {
- zval **tmp;
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void**)&tmp);
- ZEND_FETCH_RESOURCE(obj, comval*, tmp, -1, "comval", IS_COM);
- } else {
- ZEND_FETCH_RESOURCE(obj, comval*, &object, -1, "comval", IS_COM);
- }
-
- if (sink && Z_TYPE_P(sink) == IS_ARRAY) {
- /* 0 => typelibname, 1 => dispname */
- zval **tmp;
-
- if (zend_hash_index_find(Z_ARRVAL_P(sink), 0, (void**)&tmp) == SUCCESS)
- typelibname = Z_STRVAL_PP(tmp);
- if (zend_hash_index_find(Z_ARRVAL_P(sink), 1, (void**)&tmp) == SUCCESS)
- dispname = Z_STRVAL_PP(tmp);
- } else if (sink != NULL) {
- convert_to_string(sink);
- dispname = Z_STRVAL_P(sink);
- }
-
- typeinfo = locate_typeinfo(typelibname, obj, dispname, 1 TSRMLS_CC);
-
- if (typeinfo) {
- HashTable *id_to_name;
-
- ALLOC_HASHTABLE(id_to_name);
-
- if (process_typeinfo(typeinfo, id_to_name, 0, &obj->sinkid TSRMLS_CC)) {
-
- /* Create the COM wrapper for this sink */
- obj->sinkdispatch = php_COM_export_as_sink(sinkobject, &obj->sinkid, id_to_name TSRMLS_CC);
-
- /* Now hook it up to the source */
- com_enable_events(obj, TRUE);
- RETVAL_TRUE;
-
- } else {
- FREE_HASHTABLE(id_to_name);
- }
- }
-
- if (typeinfo)
- typeinfo->lpVtbl->Release(typeinfo);
-
-}
-/* }}} */
-
-static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC)
-{
- pval function_name;
- int retval;
-
- ZVAL_STRINGL(&function_name, "Item", 4, 0);
- retval = do_COM_invoke(array, &function_name, result, &property, 1 TSRMLS_CC);
- if (cleanup) {
- php_COM_destruct(array TSRMLS_CC);
- }
-
- return retval;
-}
-
-
-static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC)
-{
- DISPID dispid;
- HRESULT hr;
- OLECHAR *propname;
- char *error_message;
- DISPPARAMS dispparams;
- char *ErrString;
-
- /* obtain property handler */
- propname = php_char_to_OLECHAR(Z_STRVAL_P(arg_property), Z_STRLEN_P(arg_property), codepage TSRMLS_CC);
-
- hr = php_COM_get_ids_of_names(obj, &propname, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(arg_property), error_message);
- LocalFree(error_message);
- efree(propname);
- if (cleanup) {
- php_COM_destruct(obj TSRMLS_CC);
- }
- return FAILURE;
- }
-
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- if (ErrString) {
- php_error(E_WARNING,"PropGet() failed: %s %s", error_message, ErrString);
- pefree(ErrString, 1);
- } else {
- php_error(E_WARNING,"PropGet() failed: %s", error_message);
- }
- LocalFree(error_message);
- efree(propname);
- if (cleanup) {
- php_COM_destruct(obj TSRMLS_CC);
- }
- return FAILURE;
- }
-
- efree(propname);
- if (cleanup) {
- php_COM_destruct(obj TSRMLS_CC);
- }
- return SUCCESS;
-}
-
-
-static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property, pval *value TSRMLS_DC)
-{
- DISPID dispid;
- HRESULT hr;
- OLECHAR *propname;
- char *error_message;
- VARIANT *var_result, *new_value;
- DISPPARAMS dispparams;
- DISPID mydispid = DISPID_PROPERTYPUT;
- char *ErrString;
-
- ALLOC_VARIANT(var_result);
- ALLOC_VARIANT(new_value);
-
- /* obtain property handler */
- propname = php_char_to_OLECHAR(Z_STRVAL_P(arg_property), Z_STRLEN_P(arg_property), codepage TSRMLS_CC);
-
- hr = php_COM_get_ids_of_names(obj, &propname, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(arg_property), error_message);
- LocalFree(error_message);
- efree(propname);
-
- FREE_VARIANT(var_result);
- FREE_VARIANT(new_value);
-
- RETURN_NULL();
- }
-
- php_pval_to_variant(value, new_value, codepage TSRMLS_CC);
- dispparams.rgvarg = new_value;
- dispparams.rgdispidNamedArgs = &mydispid;
- dispparams.cArgs = 1;
- dispparams.cNamedArgs = 1;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYPUT, &dispparams, NULL, &ErrString TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- if (ErrString) {
- php_error(E_WARNING,"PropPut() failed: %s %s", error_message, ErrString);
- pefree(ErrString, 1);
- } else {
- php_error(E_WARNING,"PropPut() failed: %s", error_message);
- }
- LocalFree(error_message);
- efree(propname);
-
- FREE_VARIANT(var_result);
- FREE_VARIANT(new_value);
-
- RETURN_NULL();
- }
-
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC);
-
- if (SUCCEEDED(hr)) {
- php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
- } else {
- *return_value = *value;
- zval_copy_ctor(return_value);
- }
-
- if (ErrString) {
- pefree(ErrString, 1);
- }
-
- FREE_VARIANT(var_result);
- FREE_VARIANT(new_value);
-
- efree(propname);
-}
-
-
-/* {{{ proto mixed com_propget(int module, string property_name)
- Gets properties from a COM module */
-PHP_FUNCTION(com_propget)
-{
- pval *arg_comval, *arg_property;
- int type;
- comval *obj;
- VARIANT *var_result;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters(ht, 2, &arg_comval, &arg_property) == FAILURE)) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* obtain IDispatch interface */
- convert_to_long(arg_comval);
- obj = (comval *)zend_list_find(Z_LVAL_P(arg_comval), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler", Z_LVAL_P(arg_comval));
- RETURN_NULL();
- }
- convert_to_string_ex(&arg_property);
-
- ALLOC_VARIANT(var_result);
-
- if (do_COM_propget(var_result, obj, arg_property, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- RETURN_NULL();
- }
-
- RETVAL_VARIANT(var_result);
-}
-/* }}} */
-
-
-/* {{{ proto bool com_propput(int module, string property_name, mixed value)
- Puts the properties for a module */
-PHP_FUNCTION(com_propput)
-{
- pval *arg_comval, *arg_property, *arg_value;
- int type;
- comval *obj;
-
- if (ZEND_NUM_ARGS()!=3 || zend_get_parameters(ht, 3, &arg_comval, &arg_property, &arg_value)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* obtain comval interface */
- convert_to_long(arg_comval);
- /* obtain comval interface */
- obj = (comval *)zend_list_find(Z_LVAL_P(arg_comval), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler", Z_LVAL_P(arg_comval));
- RETURN_NULL();
- }
- convert_to_string_ex(&arg_property);
-
- do_COM_propput(return_value, obj, arg_property, arg_value TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto bool com_load_typelib(string typelib_name [, int case_insensitive])
- Loads a Typelib */
-PHP_FUNCTION(com_load_typelib)
-{
- pval *arg_typelib, *arg_cis;
- ITypeLib *pTL;
- int mode = CONST_CS;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- zend_get_parameters(ht, 1, &arg_typelib);
- break;
-
- case 2:
- zend_get_parameters(ht, 2, &arg_typelib, &arg_cis);
- convert_to_boolean_ex(&arg_cis);
- if (Z_LVAL_P(arg_cis)) {
- mode &= ~CONST_CS;
- }
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(&arg_typelib);
- pTL = php_COM_find_typelib(Z_STRVAL_P(arg_typelib), mode TSRMLS_CC);
- if (php_COM_load_typelib(pTL, mode TSRMLS_CC) == SUCCESS) {
- pTL->lpVtbl->Release(pTL);
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_reference)
-{
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- pval return_value;
- pval **comval_handle;
- pval *object = property_reference->object;
- int type;
- comval *obj, *obj_prop;
- VARIANT *var_result;
- TSRMLS_FETCH();
-
- INIT_ZVAL(return_value);
- ZVAL_NULL(&return_value);
-
- /* fetch the IDispatch interface */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
- obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type);
- if (!obj || (type != IS_COM)) {
- return return_value;
- }
-
- ALLOC_COM(obj_prop);
- ALLOC_VARIANT(var_result);
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return return_value;
- }
- break;
-
- case OE_IS_OBJECT:
- if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return return_value;
- }
- break;
-
- case OE_IS_METHOD: {
- FREE_VARIANT(var_result);
- if (obj != obj_prop) {
- FREE_COM(obj_prop);
-
- return_value = *object;
- ZVAL_ADDREF(&return_value);
- } else {
- RETVAL_COM(obj);
- }
- return return_value;
- }
- break;
- }
-
- if (V_VT(var_result) == VT_DISPATCH) {
- if (V_DISPATCH(var_result) == NULL) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return return_value;
- }
-
- obj = obj_prop;
- php_COM_set(obj, &V_DISPATCH(var_result), TRUE TSRMLS_CC);
- } else {
- php_variant_to_pval(var_result, &return_value, codepage TSRMLS_CC);
-
- FREE_COM(obj_prop);
- obj_prop = NULL;
- }
-
- VariantInit(var_result); // to protect C_DISPATCH(obj) from being freed when var_result is destructed
- pval_destructor(&overloaded_property->element);
- }
-
- if (obj_prop != NULL) {
- RETVAL_COM(obj);
- }
-
-
- FREE_VARIANT(var_result);
-
- return return_value;
-}
-
-
-PHPAPI int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value)
-{
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- pval **comval_handle;
- pval *object = property_reference->object;
- comval *obj, *obj_prop;
- int type;
- VARIANT *var_result;
- TSRMLS_FETCH();
-
- /* fetch the IDispatch interface */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
- obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
- if (!obj || (type != IS_COM)) {
- return FAILURE;
- }
-
- ALLOC_COM(obj_prop);
- ALLOC_VARIANT(var_result);
-
- for (element=property_reference->elements_list->head; element != property_reference->elements_list->tail; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return FAILURE;
- }
- break;
-
- case OE_IS_OBJECT:
- if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return FAILURE;
- }
- break;
-
- case OE_IS_METHOD:
- /* this shouldn't happen */
- return FAILURE;
- break;
- }
-
- if (V_VT(var_result) == VT_DISPATCH) {
- if (V_DISPATCH(var_result) == NULL) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return FAILURE;
- }
-
- obj = obj_prop;
- php_COM_set(obj, &V_DISPATCH(var_result), TRUE TSRMLS_CC);
- } else {
- FREE_COM(obj_prop);
- FREE_VARIANT(var_result);
-
- return FAILURE;
- }
-
- VariantInit(var_result); // to protect C_DISPATCH(obj) from being freed when var_result is destructed
- pval_destructor(&overloaded_property->element);
- }
- FREE_VARIANT(var_result);
-
- overloaded_property = (zend_overloaded_element *) element->data;
- do_COM_propput(&result, obj, &overloaded_property->element, value TSRMLS_CC);
- FREE_COM(obj_prop);
-
- pval_destructor(&overloaded_property->element);
-
- return SUCCESS;
-}
-
-/* create an overloaded COM object from a dispatch pointer */
-PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC)
-{
- comval *obj;
- zval *zobj;
-
- ALLOC_COM(obj);
- MAKE_STD_ZVAL(zobj);
- php_COM_set(obj, &disp, FALSE TSRMLS_CC);
- ZVAL_COM_EX(zobj, obj, val);
-
- return zobj;
-}
-
-
-PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval property, **handle;
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
- comval *obj;
- int type;
-
- if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL(function_name->element), "com")) {
- /* constructor */
- pval *object_handle;
-
- PHP_FN(com_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (zend_is_true(return_value)) {
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
- } else {
- ZVAL_NULL(object);
- }
-
- return;
- }
-
- RETVAL_NULL();
- property = php_COM_get_property_handler(property_reference);
-
- if (Z_TYPE(property) != IS_OBJECT) {
- pval_destructor(&property);
- pval_destructor(&function_name->element);
-
- /* error message - function call on a non-object */
- return;
- }
-
- zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle);
- obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type);
-
- if (!obj || (type != IS_COM)) {
- pval_destructor(&property);
- pval_destructor(&function_name->element);
-
- return;
- }
-
- if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL_P(&function_name->element), "release")) {
- RETVAL_LONG(php_COM_release(obj TSRMLS_CC));
- } else if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL_P(&function_name->element), "addref")) {
- RETVAL_LONG(php_COM_addref(obj TSRMLS_CC));
- } else {
- pval **arguments;
- VARIANT *var_result;
- int arg_count = ZEND_NUM_ARGS();
-
- ALLOC_VARIANT(var_result);
-
- arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
- zend_get_parameters_array(ht, arg_count, arguments);
-
- if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count TSRMLS_CC) == SUCCESS) {
- php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
- }
-
- FREE_VARIANT(var_result);
- efree(arguments);
- }
-
- if (zend_llist_count(property_reference->elements_list) > 1) {
- /* destruct temporary object */
- zend_list_delete(Z_LVAL_PP(handle));
- pval_destructor(&property);
- }
-
- pval_destructor(&function_name->element);
-}
-
-
-static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC)
-{
- ITypeLib *TypeLib = NULL;
- char *strtok_buf, *major, *minor;
- CLSID clsid;
- OLECHAR *p;
-
- /* Type Libraries:
- * The string we have is either:
- * a) a file name
- * b) a CLSID, major, minor e.g. "{00000200-0000-0010-8000-00AA006D2EA4},2,0"
- * c) a Type Library name e.g. "Microsoft OLE DB ActiveX Data Objects 1.0 Library"
- * Searching for the name will be more expensive that the
- * other two, so we will do that when both other attempts
- * fail.
- */
-
- search_string = php_strtok_r(search_string, ",", &strtok_buf);
-
- if (search_string == NULL)
- return NULL;
-
- major = php_strtok_r(NULL, ",", &strtok_buf);
- minor = php_strtok_r(NULL, ",", &strtok_buf);
-
- p = php_char_to_OLECHAR(search_string, strlen(search_string), codepage TSRMLS_CC);
- /* Is the string a GUID ? */
-
- if (!FAILED(CLSIDFromString(p, &clsid))) {
- HRESULT hr;
- WORD major_i = 1;
- WORD minor_i = 0;
-
- /* We have a valid GUID, check to see if a major/minor */
- /* version was specified otherwise assume 1,0 */
- if ((major != NULL) && (minor != NULL)) {
- major_i = (WORD) atoi(major);
- minor_i = (WORD) atoi(minor);
- }
-
- /* The GUID will either be a typelibrary or a CLSID */
- hr = LoadRegTypeLib((REFGUID) &clsid, major_i, minor_i, LANG_NEUTRAL, &TypeLib);
-
- /* If the LoadRegTypeLib fails, let's try to instantiate */
- /* the class itself and then QI for the TypeInfo and */
- /* retrieve the type info from that interface */
- if (FAILED(hr) && (!major || !minor)) {
- IDispatch *Dispatch;
- ITypeInfo *TypeInfo;
- int idx;
-
- if (FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &Dispatch))) {
- efree(p);
- return NULL;
- }
- if (FAILED(Dispatch->lpVtbl->GetTypeInfo(Dispatch, 0, LANG_NEUTRAL, &TypeInfo))) {
- Dispatch->lpVtbl->Release(Dispatch);
- efree(p);
- return NULL;
- }
- Dispatch->lpVtbl->Release(Dispatch);
- if (FAILED(TypeInfo->lpVtbl->GetContainingTypeLib(TypeInfo, &TypeLib, &idx))) {
- TypeInfo->lpVtbl->Release(TypeInfo);
- efree(p);
- return NULL;
- }
- TypeInfo->lpVtbl->Release(TypeInfo);
- }
- } else {
- if (FAILED(LoadTypeLib(p, &TypeLib))) {
- /* Walk HKCR/TypeLib looking for the string */
- /* If that succeeds, call ourself recursively */
- /* using the CLSID found, else give up and bail */
- HKEY hkey, hsubkey;
- DWORD SubKeys, MaxSubKeyLength;
- char *keyname;
- register unsigned int ii, jj;
- DWORD VersionCount;
- char version[20]; /* All the version keys are 1.0, 4.6, ... */
- char *libname;
- DWORD libnamelen;
-
- /* No Need for Unicode version any more */
- efree(p);
-
- /* Starting at HKEY_CLASSES_ROOT/TypeLib */
- /* Walk all subkeys (Typelib GUIDs) looking */
- /* at each version for a string match to the */
- /* supplied argument */
-
- if (ERROR_SUCCESS != RegOpenKey(HKEY_CLASSES_ROOT, "TypeLib",&hkey)) {
- /* This is pretty bad - better bail */
- return NULL;
- }
- if (ERROR_SUCCESS != RegQueryInfoKey(hkey, NULL, NULL, NULL, &SubKeys, &MaxSubKeyLength, NULL, NULL, NULL, NULL, NULL, NULL)) {
- RegCloseKey(hkey);
- return NULL;
- }
- MaxSubKeyLength++; /* \0 is not counted */
- keyname = emalloc(MaxSubKeyLength);
- libname = emalloc(strlen(search_string)+1);
- for (ii=0;ii<SubKeys;ii++) {
- if (ERROR_SUCCESS != RegEnumKey(hkey, ii, keyname, MaxSubKeyLength)) {
- /* Failed - who cares */
- continue;
- }
- if (ERROR_SUCCESS != RegOpenKey(hkey, keyname, &hsubkey)) {
- /* Failed - who cares */
- continue;
- }
- if (ERROR_SUCCESS != RegQueryInfoKey(hsubkey, NULL, NULL, NULL, &VersionCount, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) {
- /* Failed - who cares */
- RegCloseKey(hsubkey);
- continue;
- }
- for (jj=0;jj<VersionCount;jj++) {
- if (ERROR_SUCCESS != RegEnumKey(hsubkey, jj, version, sizeof(version))) {
- /* Failed - who cares */
- continue;
- }
- /* OK we just need to retrieve the default */
- /* value for this key and see if it matches */
- libnamelen = strlen(search_string)+1;
- if (ERROR_SUCCESS == RegQueryValue(hsubkey, version, libname, &libnamelen)) {
- if ((mode & CONST_CS) ? (strcmp(libname, search_string) == 0) : (stricmp(libname, search_string) == 0)) {
- char *str;
- int major, minor;
-
- /* Found it */
- RegCloseKey(hkey);
- RegCloseKey(hsubkey);
-
- efree(libname);
- /* We can either open up the "win32" key and find the DLL name */
- /* Or just parse the version string and pass that in */
- /* The version string seems like a more portable solution */
- /* Given that there is a COM on Unix */
- if (2 != sscanf(version, "%d.%d", &major, &minor)) {
- major = 1;
- minor = 0;
- }
- str = emalloc(strlen(keyname)+strlen(version)+20); /* 18 == safety, 2 == extra comma and \0 */
- sprintf(str, "%s,%d,%d", keyname, major, minor);
- efree(keyname);
- TypeLib = php_COM_find_typelib(str, mode TSRMLS_CC);
- efree(str);
- /* This is probbaly much harder to read and follow */
- /* But it is MUCH more effiecient than trying to */
- /* test for errors and leave through a single "return" */
- return TypeLib;
- }
- } else {
- /* Failed - perhaps too small abuffer */
- /* But if too small, then the name does not match */
- }
- }
- RegCloseKey(hsubkey);
- }
- efree(keyname);
- efree(libname);
- return NULL;
- }
- }
- efree(p);
- return TypeLib;
-}
-
-
-PHPAPI int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC)
-{
- ITypeComp *TypeComp;
- int i;
- int interfaces;
-
- if (NULL == TypeLib) {
- return FAILURE;
- }
-
- interfaces = TypeLib->lpVtbl->GetTypeInfoCount(TypeLib);
-
- TypeLib->lpVtbl->GetTypeComp(TypeLib, &TypeComp);
- for (i=0; i<interfaces; i++) {
- TYPEKIND pTKind;
-
- TypeLib->lpVtbl->GetTypeInfoType(TypeLib, i, &pTKind);
- if (pTKind==TKIND_ENUM) {
- ITypeInfo *TypeInfo;
- VARDESC *pVarDesc;
- UINT NameCount;
- int j;
-#if 0
- BSTR bstr_EnumId;
- char *EnumId;
-
- TypeLib->lpVtbl->GetDocumentation(TypeLib, i, &bstr_EnumId, NULL, NULL, NULL);
- EnumId = php_OLECHAR_to_char(bstr_EnumId, NULL, codepage);
- printf("Enumeration %d - %s:\n", i, EnumId);
- efree(EnumId);
-#endif
-
- TypeLib->lpVtbl->GetTypeInfo(TypeLib, i, &TypeInfo);
-
- j=0;
- while (SUCCEEDED(TypeInfo->lpVtbl->GetVarDesc(TypeInfo, j, &pVarDesc))) {
- BSTR bstr_ids;
- zend_constant c;
- zval exists, results;
- char *const_name;
-
- TypeInfo->lpVtbl->GetNames(TypeInfo, pVarDesc->memid, &bstr_ids, 1, &NameCount);
- if (NameCount!=1) {
- j++;
- continue;
- }
- const_name = php_OLECHAR_to_char(bstr_ids, &c.name_len, codepage TSRMLS_CC);
- c.name = zend_strndup(const_name, c.name_len);
- efree(const_name);
- c.name_len++; /* length should include the NULL */
- SysFreeString(bstr_ids);
-
- /* Before registering the contsnt, let's see if we can find it */
- if (zend_get_constant(c.name, c.name_len-1, &exists TSRMLS_CC)) {
- /* Oops, it already exists. No problem if it is defined as the same value */
- /* Check to see if they are the same */
- if (!compare_function(&results, &c.value, &exists TSRMLS_CC) && INI_INT("com.autoregister_verbose")) {
- php_error(E_WARNING,"Type library value %s is already defined and has a different value", c.name);
- }
- free(c.name);
- j++;
- continue;
- }
-
- php_variant_to_pval(pVarDesc->lpvarValue, &c.value, codepage TSRMLS_CC);
- if (mode & CONST_PERSISTENT) {
- zval_persist(&c.value TSRMLS_CC);
- mode |= CONST_EFREE_PERSISTENT;
- }
- c.flags = mode;
-
- zend_register_constant(&c TSRMLS_CC);
-
- j++;
- }
- TypeInfo->lpVtbl->Release(TypeInfo);
- }
- }
-
- return SUCCESS;
-}
-
-/* {{{ proto bool com_isenum(object com_module)
- Grabs an IEnumVariant */
-PHP_FUNCTION(com_isenum)
-{
- pval *object;
- pval **comval_handle;
- comval *obj;
- int type;
-
- if (ZEND_NUM_ARGS() != 1) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- zend_get_parameters(ht, 1, &object);
-
- /* obtain IDispatch interface */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
- obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%s is not a COM object handler", "");
- RETURN_FALSE;
- }
-
- RETURN_BOOL(C_HASENUM(obj));
-}
-/* }}} */
-
-
-static void php_register_COM_class(TSRMLS_D)
-{
- INIT_OVERLOADED_CLASS_ENTRY(COM_class_entry, "COM", NULL,
- php_COM_call_function_handler,
- php_COM_get_property_handler,
- php_COM_set_property_handler);
-
- zend_register_internal_class(&COM_class_entry TSRMLS_CC);
-}
-
-
-static void php_COM_init(int module_number TSRMLS_DC)
-{
- le_comval = zend_register_list_destructors_ex(php_comval_destructor, NULL, "COM", module_number);
- php_register_COM_class(TSRMLS_C);
-}
-
-PHPAPI ZEND_DECLARE_MODULE_GLOBALS(com)
-
-static void php_com_init_globals(zend_com_globals *com_globals)
-{
-}
-
-PHP_MINIT_FUNCTION(COM)
-{
- ZEND_INIT_MODULE_GLOBALS(com, php_com_init_globals, NULL);
- php_COM_init(module_number TSRMLS_CC);
- php_VARIANT_init(module_number TSRMLS_CC);
- php_COM_dispatch_init(module_number TSRMLS_CC);
-
- REGISTER_LONG_CONSTANT("CLSCTX_INPROC_SERVER", CLSCTX_INPROC_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_INPROC_HANDLER", CLSCTX_INPROC_HANDLER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_LOCAL_SERVER", CLSCTX_LOCAL_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_REMOTE_SERVER", CLSCTX_REMOTE_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_SERVER", CLSCTX_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_ALL", CLSCTX_ALL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(COM)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-/* exports for external object creation */
-
-zend_module_entry COM_module_entry = {
- STANDARD_MODULE_HEADER,
- "com",
- COM_functions,
- PHP_MINIT(COM),
- PHP_MSHUTDOWN(COM),
- NULL,
- NULL,
- PHP_MINFO(COM),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-PHPAPI int php_COM_get_le_comval()
-{
- return le_comval;
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/com/CREDITS b/ext/com/CREDITS
deleted file mode 100644
index 27bb7a0b21..0000000000
--- a/ext/com/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Win32 COM
-Zeev Suraski, Harald Radi, Alan Brown \ No newline at end of file
diff --git a/ext/com/TODO b/ext/com/TODO
deleted file mode 100644
index 05ac41167a..0000000000
--- a/ext/com/TODO
+++ /dev/null
@@ -1,28 +0,0 @@
-1) Multi-dimenstional array support
-4) Documentation (internal and user) and howtos
-5) IEnumVariant::All() which would be like IEnumVariant::Next(IDispatch::Count)
-7) Test component (goes with the docs)
-8) Test suite (Needs test component)
-10) lets try if we are able to call non IDispatch - only Typelib components
-
--- delayed till PHP5: 3) WithEvents
--- delayed till PHP5: 9) reduce the need for VARIANT()
-
-ad 6.) check vbsample.php (new VARIANT(*, *|VT_BYREF)) GPs
-
--- done 2) IErrorInfo
--- done 6) Look for memory leaks and AdRef/Release problems - I KNOW there are some...
--- done 11) IEnumVariant::Next() without parameter should only return an object, not an array with one element
--- done 12) VARIANT->value as lvalue
--- done 13) export VARIANT through the COM module
--- done 14) trap exceptions and errors
-
--- donne ad 4.) faq (i've collected a few questions from various lists)
- variant attributes !!
-
-to be discussed:
-
-- mts support (getcontext)
-- adsi support (ads* functions)
-
--- delayed till PHP 5: try serialisation support (if component implements IPersist)
diff --git a/ext/com/VARIANT.c b/ext/com/VARIANT.c
deleted file mode 100644
index 2303481cee..0000000000
--- a/ext/com/VARIANT.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Harald Radi <h.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-
-/*
- * This module maps the VARIANT datastructure into PHP so that it can be used to
- * pass values to COM and DOTNET Objects by reference and not only by value.
- *
- * harald
- */
-
-#ifdef PHP_WIN32
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_VARIANT.h"
-
-#include <unknwn.h>
-
-static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC);
-static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value);
-static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference);
-static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
-static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_register_VARIANT_class(TSRMLS_D);
-
-static int le_variant;
-static int codepage;
-static zend_class_entry VARIANT_class_entry;
-
-
-void php_VARIANT_init(int module_number TSRMLS_DC)
-{
- le_variant = zend_register_list_destructors_ex(php_VARIANT_destructor, NULL, "VARIANT", module_number);
-
- /* variant datatypes */
- REGISTER_LONG_CONSTANT("VT_NULL", VT_NULL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_EMPTY", VT_EMPTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UI1", VT_UI1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_I2", VT_I2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_I4", VT_I4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_R4", VT_R4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_R8", VT_R8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_BOOL", VT_BOOL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_ERROR", VT_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_CY", VT_CY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_DATE", VT_DATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_BSTR", VT_BSTR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_DECIMAL", VT_DECIMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UNKNOWN", VT_UNKNOWN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_DISPATCH", VT_DISPATCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_VARIANT", VT_VARIANT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_I1", VT_I1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UI2", VT_UI2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UI4", VT_UI4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_INT", VT_INT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UINT", VT_UINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_ARRAY", VT_ARRAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_BYREF", VT_BYREF, CONST_CS | CONST_PERSISTENT);
-
- /* codepages */
- REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT);
-
-#ifdef CP_SYMBOL
- REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
-#else
-# error "CP_SYMBOL undefined"
-#endif
-#ifdef CP_THREAD_ACP
- REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
-#else
-# error "CP_THREAD_ACP undefined"
-#endif
-
- php_register_VARIANT_class(TSRMLS_C);
-}
-
-
-PHPAPI int php_VARIANT_get_le_variant()
-{
- return le_variant;
-}
-
-
-static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
- VARIANT *pVar;
-
- if ((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) {
- /* constructor */
- pval *object_handle, *data, *type, *code_page;
-
- ALLOC_VARIANT(pVar);
- VariantInit(pVar);
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- /* nothing to do */
- break;
- case 1:
- zend_get_parameters(ht, 1, &data);
- php_pval_to_variant(data, pVar, codepage TSRMLS_CC);
- codepage = CP_ACP;
- break;
- case 2:
- zend_get_parameters(ht, 2, &data, &type);
- php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC);
- codepage = CP_ACP;
- break;
- case 3:
- zend_get_parameters(ht, 3, &data, &type, &code_page);
- php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC);
- convert_to_long(code_page);
- codepage = Z_LVAL_P(code_page);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- RETVAL_LONG(zend_list_insert(pVar, IS_VARIANT));
-
- if (!zend_is_true(return_value)) {
- ZVAL_FALSE(object);
- return;
- }
-
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- zval_dtor(&function_name->element);
- }
-}
-
-
-static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference)
-{
- zend_overloaded_element *overloaded_property;
- int type;
- pval result, **var_handle, *object = property_reference->object;
- VARIANT *var_arg;
- TSRMLS_FETCH();
-
-
- /* fetch the VARIANT structure */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
- var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
-
- if (!var_arg || (type != IS_VARIANT)) {
- ZVAL_FALSE(&result);
- } else {
- overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- ZVAL_FALSE(&result);
- break;
-
- case OE_IS_OBJECT:
- if (!strcmp(Z_STRVAL(overloaded_property->element), "value")) {
- php_variant_to_pval(var_arg, &result, codepage TSRMLS_CC);
- } else if (!strcmp(Z_STRVAL(overloaded_property->element), "type")) {
- ZVAL_LONG(&result, V_VT(var_arg))
- } else {
- ZVAL_FALSE(&result);
- php_error(E_WARNING, "Unknown member.");
- }
- break;
- case OE_IS_METHOD:
- ZVAL_FALSE(&result);
- php_error(E_WARNING, "Unknown method.");
- break;
-
- zval_dtor(&overloaded_property->element);
- }
- }
-
- return result;
-}
-
-
-static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value)
-{
- zend_overloaded_element *overloaded_property;
- int type;
- pval **var_handle, *object = property_reference->object;
- VARIANT *var_arg;
- TSRMLS_FETCH();
-
-
- /* fetch the VARIANT structure */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
- var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
-
- if (!var_arg || (type != IS_VARIANT)) {
- return FAILURE;
- }
-
- overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
- do_VARIANT_propset(var_arg, &overloaded_property->element, value TSRMLS_CC);
- zval_dtor(&overloaded_property->element);
- return SUCCESS;
-}
-
-
-static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC)
-{
- int type;
-
- if (!strcmp(Z_STRVAL_P(arg_property), "value")) {
- php_pval_to_variant(value, var_arg, codepage TSRMLS_CC);
-
- return SUCCESS;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "bVal")) {
- type = VT_UI1;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "iVal")) {
- type = VT_I2;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "lVal")) {
- type = VT_I4;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "fltVal")) {
- type = VT_R4;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "dblVal")) {
- type = VT_R8;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "boolVal")) {
- type = VT_BOOL;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "scode")) {
- type = VT_ERROR;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "cyVal")) {
- type = VT_CY;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "date")) {
- type = VT_DATE;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) {
- type = VT_BSTR;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) {
- type = VT_DECIMAL|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "punkVal")) {
- type = VT_UNKNOWN;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) {
- type = VT_DISPATCH;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "parray")) {
- type = VT_ARRAY;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pbVal")) {
- type = VT_UI1|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "piVal")) {
- type = VT_I2|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "plVal")) {
- type = VT_I4|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) {
- type = VT_R4|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) {
- type = VT_R8|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) {
- type = VT_BOOL|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pscode")) {
- type = VT_ERROR|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) {
- type = VT_CY|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdate")) {
- type = VT_DATE|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) {
- type = VT_BSTR|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) {
- type = VT_UNKNOWN|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) {
- type = VT_DISPATCH|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pparray")) {
- type = VT_ARRAY|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) {
- type = VT_VARIANT|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "byref")) {
- type = VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "cVal")) {
- type = VT_I1;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "uiVal")) {
- type = VT_UI2;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "ulVal")) {
- type = VT_UI4;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "intVal")) {
- type = VT_INT;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "uintVal")) {
- type = VT_UINT|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pcVal")) {
- type = VT_I1|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "puiVal")) {
- type = VT_UI2|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pulVal")) {
- type = VT_UI4|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pintVal")) {
- type = VT_INT|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "puintVal")) {
- type = VT_UINT|VT_BYREF;
- } else {
- php_error(E_WARNING, "Unknown member.");
- return FAILURE;
- }
-
- php_pval_to_variant_ex2(value, var_arg, type, codepage TSRMLS_CC);
-
- return SUCCESS;
-}
-
-
-static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- FREE_VARIANT(rsrc->ptr);
-}
-
-static void php_register_VARIANT_class(TSRMLS_D)
-{
- INIT_OVERLOADED_CLASS_ENTRY(VARIANT_class_entry, "VARIANT", NULL,
- php_VARIANT_call_function_handler,
- php_VARIANT_get_property_handler,
- php_VARIANT_set_property_handler);
-
- zend_register_internal_class(&VARIANT_class_entry TSRMLS_CC);
-}
-
-#endif /* PHP_WIN32 */
diff --git a/ext/com/com.h b/ext/com/com.h
deleted file mode 100644
index 5ec791dd43..0000000000
--- a/ext/com/com.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef COM_H
-#define COM_H
-
-#if PHP_WIN32
-
-BEGIN_EXTERN_C()
-
-#include <oleauto.h>
-
-typedef struct comval_ {
-#ifdef _DEBUG
- int resourceindex;
-#endif
- BOOL typelib;
- BOOL enumeration;
- int refcount;
- struct {
- IDispatch *dispatch;
- ITypeInfo *typeinfo;
- IEnumVARIANT *enumvariant;
- } i;
- IDispatch *sinkdispatch;
- GUID sinkid;
- DWORD sinkcookie;
-} comval;
-
-END_EXTERN_C()
-
-#define ZVAL_COM(z,o) { \
- zval *handle = NULL; \
- ZVAL_COM_EX(z,o,handle) \
- }
-
-#define ZVAL_COM_EX(z,o,handle) { \
- HashTable *properties; \
- \
- ALLOC_HASHTABLE(properties); \
- zend_hash_init(properties, 0, NULL, ZVAL_PTR_DTOR, 0); \
- \
- if (handle == NULL) { \
- MAKE_STD_ZVAL(handle); \
- } \
- ZVAL_RESOURCE(handle, zend_list_insert((o), IS_COM)); \
- \
- zval_copy_ctor(handle); \
- zend_hash_index_update(properties, 0, &handle, sizeof(zval *), NULL); \
- object_and_properties_init(z, &COM_class_entry, properties); \
- }
-
-#define RETVAL_COM(o) ZVAL_COM(&return_value, o);
-#define RETURN_COM(o) RETVAL_COM(o) \
- return;
-
-#define ALLOC_COM(z) (z) = (comval *) ecalloc(1, sizeof(comval)); \
- C_REFCOUNT(z) = 0;
-
-#define FREE_COM(z) php_COM_destruct(z TSRMLS_CC);
-
-#define IS_COM php_COM_get_le_comval()
-
-#define C_HASTLIB(x) ((x)->typelib)
-#define C_HASENUM(x) ((x)->enumeration)
-#define C_REFCOUNT(x) ((x)->refcount)
-#define C_ISREFD(x) C_REFCOUNT(x)
-
-#define C_ADDREF(x) (++((x)->refcount))
-#define C_RELEASE(x) (--((x)->refcount))
-
-#define C_DISPATCH(x) ((x)->i.dispatch)
-#define C_TYPEINFO(x) ((x)->i.typeinfo)
-#define C_ENUMVARIANT(x) ((x)->i.enumvariant)
-
-#define C_DISPATCH_VT(x) (C_DISPATCH(x)->lpVtbl)
-#define C_TYPEINFO_VT(x) (C_TYPEINFO(x)->lpVtbl)
-#define C_ENUMVARIANT_VT(x) (C_ENUMVARIANT(x)->lpVtbl)
-
-#endif /* PHP_WIN32 */
-
-#endif /* COM_H */
diff --git a/ext/com/conversion.c b/ext/com/conversion.c
deleted file mode 100644
index c9e4f89414..0000000000
--- a/ext/com/conversion.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Harald Radi <h.radi@nme.at> |
- | Alan Brown <abrown@pobox.com> |
- | Paul Shortis <pshortis@dataworx.com.au> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * 03.6.2001
- * Added SafeArray ==> Hash support
- */
-
-/*
- * Paul Shortis June 7, 2001 <pshortis@dataworx.com.au> - Added code to support SafeArray passing
- * to COM objects. Support includes passing arrays of variants as well
- * as typed arrays.
- */
-
-#ifdef PHP_WIN32
-
-#include "php.h"
-#include "php_COM.h"
-#include "php_VARIANT.h"
-
-/* prototypes */
-
-static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC);
-
-/* implementations */
-PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC)
-{
- int type = VT_EMPTY; /* default variant type */
-
- switch (Z_TYPE_P(pval_arg)) {
- case IS_NULL:
- type = VT_NULL;
- break;
-
- case IS_BOOL:
- type = VT_BOOL;
- break;
-
- case IS_OBJECT:
- if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) {
- type = VT_VARIANT|VT_BYREF;
- } else {
- type = VT_DISPATCH;
- }
- break;
-
- case IS_ARRAY:
- type = VT_ARRAY;
- break;
-
- case IS_RESOURCE:
- case IS_CONSTANT:
- case IS_CONSTANT_ARRAY:
- /* ?? */
- break;
-
- case IS_LONG:
- type = VT_I4; /* assuming 32-bit platform */
- break;
-
- case IS_DOUBLE:
- type = VT_R8; /* assuming 64-bit double precision */
- break;
-
- case IS_STRING:
- type = VT_BSTR;
- break;
- }
-
- php_pval_to_variant_ex2(pval_arg, var_arg, type, codepage TSRMLS_CC);
-}
-
-
-PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC)
-{
- php_pval_to_variant_ex2(pval_arg, var_arg, Z_LVAL_P(pval_type), codepage TSRMLS_CC);
-}
-
-
-PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC)
-{
- OLECHAR *unicode_str;
-
- VariantInit(var_arg);
- V_VT(var_arg) = type;
-
- if (V_VT(var_arg) & VT_ARRAY) {
- /* For now we'll just handle single dimension arrays, we'll use the data type of the first element for the
- output data type */
- HashTable *ht = Z_ARRVAL(*pval_arg);
- int numberOfElements = zend_hash_num_elements(ht);
- SAFEARRAY *safeArray;
- SAFEARRAYBOUND bounds[1];
- VARIANT *v;
- zval **entry; /* An entry in the input array */
-
- type &= ~VT_ARRAY;
-
- if (V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) { /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */
- type &= ~VT_BYREF;
- ALLOC_VARIANT(V_VARIANTREF(var_arg));
- var_arg = V_VARIANTREF(var_arg); /* put the array in that VARIANT */
- }
-
- bounds[0].lLbound = 0;
- bounds[0].cElements = numberOfElements;
- safeArray = SafeArrayCreate(VT_VARIANT, 1, bounds);
-
- if (NULL == safeArray) {
- php_error( E_WARNING,"Unable to convert php array to VARIANT array - %s", numberOfElements ? "" : "(Empty input array)");
- ZVAL_FALSE(pval_arg);
- } else {
- V_ARRAY(var_arg) = safeArray;
- V_VT(var_arg) = VT_ARRAY|VT_VARIANT; /* Now have a valid safe array allocated */
- if (SUCCEEDED(SafeArrayLock(safeArray))) {
- ulong i;
-
- zend_hash_internal_pointer_reset(ht);
- for (i = 0; i < (ulong)numberOfElements; ++i) {
- if ((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) { /* Get a pointer to the php array element */
- /* Add another value to the safe array */
- if (SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) { /* Pointer to output element entry retrieved successfully */
- if (type) { /* explicit type */
- php_pval_to_variant_ex2(*entry, v, type, codepage TSRMLS_CC); /* Do the required conversion */
- } else {
- php_pval_to_variant(*entry, v, codepage TSRMLS_CC); /* Do the required conversion */
- }
- } else {
- php_error( E_WARNING,"phpArrayToSafeArray() - Unable to retrieve pointer to output element number (%d)", i);
- }
- }
- zend_hash_move_forward(ht);
- }
- SafeArrayUnlock( safeArray);
- } else {
- php_error( E_WARNING,"phpArrayToSafeArray() - Unable to lock safeArray");
- }
- }
- } else {
- switch (V_VT(var_arg)) {
-
- case VT_NULL:
- case VT_VOID:
- ZVAL_NULL(pval_arg);
- break;
-
- case VT_UI1:
- convert_to_long_ex(&pval_arg);
- V_UI1(var_arg) = (unsigned char) Z_LVAL_P(pval_arg);
- break;
-
- case VT_I2:
- convert_to_long_ex(&pval_arg);
- V_I2(var_arg) = (short) Z_LVAL_P(pval_arg);
- break;
-
- case VT_I4:
- convert_to_long_ex(&pval_arg);
- V_I4(var_arg) = Z_LVAL_P(pval_arg);
- break;
-
- case VT_R4:
- convert_to_double_ex(&pval_arg);
- V_R4(var_arg) = (float) Z_DVAL_P(pval_arg);
- break;
-
- case VT_R8:
- convert_to_double_ex(&pval_arg);
- V_R8(var_arg) = Z_DVAL_P(pval_arg);
- break;
-
- case VT_BOOL:
- convert_to_boolean_ex(&pval_arg);
- if (Z_LVAL_P(pval_arg)) {
- V_BOOL(var_arg) = VT_TRUE;
- } else {
- V_BOOL(var_arg) = VT_FALSE;
- }
- break;
-
- case VT_ERROR:
- convert_to_long_ex(&pval_arg);
- V_ERROR(var_arg) = Z_LVAL_P(pval_arg);
- break;
-
- case VT_CY:
- convert_to_double_ex(&pval_arg);
- VarCyFromR8(Z_DVAL_P(pval_arg), &V_CY(var_arg));
- break;
-
- case VT_DATE: {
- SYSTEMTIME wintime;
- struct tm *phptime;
-
- switch (Z_TYPE_P(pval_arg)) {
- case IS_DOUBLE:
- /* already a VariantTime value */
- V_DATE(var_arg) = Z_DVAL_P(pval_arg);
- break;
-
- /** @todo
- case IS_STRING:
- */
- /* string representation of a time value */
-
- default:
- /* a PHP time value ? */
- convert_to_long_ex(&pval_arg);
- phptime = gmtime(&(Z_LVAL_P(pval_arg)));
- memset(&wintime, 0, sizeof(wintime));
-
- wintime.wYear = phptime->tm_year + 1900;
- wintime.wMonth = phptime->tm_mon + 1;
- wintime.wDay = phptime->tm_mday;
- wintime.wHour = phptime->tm_hour;
- wintime.wMinute = phptime->tm_min;
- wintime.wSecond = phptime->tm_sec;
-
- SystemTimeToVariantTime(&wintime, &V_DATE(var_arg));
- break;
- }
- }
- break;
-
- case VT_BSTR:
- convert_to_string_ex(&pval_arg);
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- V_BSTR(var_arg) = SysAllocStringByteLen((char *) unicode_str, Z_STRLEN_P(pval_arg) * sizeof(OLECHAR));
- efree(unicode_str);
- break;
-
- case VT_DECIMAL:
- convert_to_string_ex(&pval_arg);
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- VarDecFromStr(unicode_str, LOCALE_SYSTEM_DEFAULT, 0, &V_DECIMAL(var_arg));
- break;
-
- case VT_DECIMAL|VT_BYREF:
- convert_to_string_ex(&pval_arg);
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- VarDecFromStr(unicode_str, LOCALE_SYSTEM_DEFAULT, 0, V_DECIMALREF(var_arg));
- break;
-
- case VT_UNKNOWN:
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_UNKNOWN;
- V_UNKNOWN(var_arg) = (IUnknown *) V_DISPATCH(var_arg);
- }
- break;
-
- case VT_DISPATCH:
- if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) {
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- } else {
- V_DISPATCH(var_arg) = php_COM_export_object(pval_arg TSRMLS_CC);
- if (V_DISPATCH(var_arg)) {
- V_VT(var_arg) = VT_DISPATCH;
- }
- }
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- }
- break;
-
- case VT_UI1|VT_BYREF:
- convert_to_long(pval_arg);
- V_UI1REF(var_arg) = (unsigned char FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_I2|VT_BYREF:
- convert_to_long(pval_arg);
- V_I2REF(var_arg) = (short FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_I4|VT_BYREF:
- convert_to_long(pval_arg);
- V_I4REF(var_arg) = (long FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_R4|VT_BYREF:
- convert_to_double(pval_arg);
- V_R4REF(var_arg) = (float FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_R8|VT_BYREF:
- convert_to_double(pval_arg);
- V_R8REF(var_arg) = (double FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_BOOL|VT_BYREF:
- convert_to_boolean(pval_arg);
- /* emalloc or malloc ? */
- V_BOOLREF(var_arg) = (short FAR*) pemalloc(sizeof(short), 1);
- if (Z_LVAL_P(pval_arg)) {
- *V_BOOLREF(var_arg) = VT_TRUE;
- } else {
- *V_BOOLREF(var_arg) = VT_TRUE;
- }
- break;
-
- case VT_ERROR|VT_BYREF:
- convert_to_long(pval_arg);
- V_ERRORREF(var_arg) = (long FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_CY|VT_BYREF:
- convert_to_double_ex(&pval_arg);
- VarCyFromR8(Z_DVAL_P(pval_arg), var_arg->pcyVal);
- break;
-
- case VT_DATE|VT_BYREF: {
- SYSTEMTIME wintime;
- struct tm *phptime;
-
- phptime = gmtime(&(Z_LVAL_P(pval_arg)));
- memset(&wintime, 0, sizeof(wintime));
-
- wintime.wYear = phptime->tm_year + 1900;
- wintime.wMonth = phptime->tm_mon + 1;
- wintime.wDay = phptime->tm_mday;
- wintime.wHour = phptime->tm_hour;
- wintime.wMinute = phptime->tm_min;
- wintime.wSecond = phptime->tm_sec;
-
- SystemTimeToVariantTime(&wintime, var_arg->pdate);
- }
- break;
-
- case VT_BSTR|VT_BYREF:
- convert_to_string(pval_arg);
- V_BSTRREF(var_arg) = (BSTR FAR*) emalloc(sizeof(BSTR FAR*));
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- *V_BSTRREF(var_arg) = SysAllocString(unicode_str);
- efree(unicode_str);
- break;
-
- case VT_UNKNOWN|VT_BYREF:
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_UNKNOWN|VT_BYREF;
- V_UNKNOWNREF(var_arg) = (IUnknown **) &V_DISPATCH(var_arg);
- }
- break;
-
- case VT_DISPATCH|VT_BYREF:
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_DISPATCH|VT_BYREF;
- V_DISPATCHREF(var_arg) = &V_DISPATCH(var_arg);
- }
- break;
-
- case VT_VARIANT:
- php_error(E_WARNING,"VT_VARIANT is invalid. Use VT_VARIANT|VT_BYREF instead.");
- /* break missing intentionally */
- case VT_VARIANT|VT_BYREF: {
- int tp;
- pval **var_handle;
-
- /* fetch the VARIANT structure */
- zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle);
-
- V_VT(var_arg) = VT_VARIANT|VT_BYREF;
- V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp);
-
- if (!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) {
- VariantInit(var_arg);
- }
- }
- /*
- should be, but isn't :)
-
- if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) {
- VariantInit(var_arg);
- }
- */
- break;
-
- case VT_I1:
- convert_to_long_ex(&pval_arg);
- V_I1(var_arg) = (char)Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI2:
- convert_to_long_ex(&pval_arg);
- V_UI2(var_arg) = (unsigned short)Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI4:
- convert_to_long_ex(&pval_arg);
- V_UI4(var_arg) = (unsigned long)Z_LVAL_P(pval_arg);
- break;
-
- case VT_INT:
- convert_to_long_ex(&pval_arg);
- V_INT(var_arg) = (int)Z_LVAL_P(pval_arg);
- break;
-
- case VT_UINT:
- convert_to_long_ex(&pval_arg);
- V_UINT(var_arg) = (unsigned int)Z_LVAL_P(pval_arg);
- break;
-
- case VT_I1|VT_BYREF:
- convert_to_long(pval_arg);
- V_I1REF(var_arg) = (char FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI2|VT_BYREF:
- convert_to_long(pval_arg);
- V_UI2REF(var_arg) = (unsigned short FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI4|VT_BYREF:
- convert_to_long(pval_arg);
- V_UI4REF(var_arg) = (unsigned long FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_INT|VT_BYREF:
- convert_to_long(pval_arg);
- V_INTREF(var_arg) = (int FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_UINT|VT_BYREF:
- convert_to_long(pval_arg);
- V_UINTREF(var_arg) = (unsigned int FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- default:
- php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg));
- }
- }
-}
-
-
-PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC)
-{
- /* Changed the function to return a value for recursive error testing */
- /* Existing calls will be unaffected by the change - so it */
- /* seemed like the smallest impact on unfamiliar code */
- int ret = SUCCESS;
-
- INIT_PZVAL(pval_arg);
-
- /* Add SafeArray support */
- if (V_ISARRAY(var_arg)) {
- SAFEARRAY *array = V_ARRAY(var_arg);
- LONG indices[1];
- LONG lbound=0, ubound;
- VARTYPE vartype;
- register int ii;
- UINT Dims;
- VARIANT vv;
- pval *element;
- HRESULT hr;
-
- /* TODO: Add support for multi-dimensional SafeArrays */
- /* For now just validate that the SafeArray has one dimension */
- if (1 != (Dims = SafeArrayGetDim(array))) {
- php_error(E_WARNING,"Unsupported: multi-dimensional (%d) SafeArrays", Dims);
- ZVAL_NULL(pval_arg);
- return FAILURE;
- }
- SafeArrayLock(array);
-
- /* This call has failed for everything I have tried */
- /* But best leave it to be on the safe side */
- if (FAILED(SafeArrayGetVartype(array, &vartype)) || (vartype == VT_EMPTY)) {
- /* Fall back to what we do know */
- /* Mask off the array bit and assume */
- /* what is left is the type of the array */
- /* elements */
- vartype = V_VT(var_arg) & ~VT_ARRAY;
- }
- SafeArrayGetUBound(array, 1, &ubound);
- SafeArrayGetLBound(array, 1, &lbound);
-
- /* Since COM returned an array we set up the php */
- /* return value to be an array */
- array_init(pval_arg);
-
- /* Walk the safe array */
- for (ii=lbound;ii<=ubound;ii++) {
- indices[0] = ii;
- VariantInit(&vv); /* Docs say this just set the vt field, but you never know */
- /* Set up a variant to pass to a recursive call */
- /* So that we do not need to have two copies */
- /* of the code */
- if (VT_VARIANT == vartype) {
- hr = SafeArrayGetElement(array, indices, (VOID *) &(vv));
- } else {
- V_VT(&vv) = vartype;
- hr = SafeArrayGetElement(array, indices, (VOID *) &(vv.lVal));
- }
- if (FAILED(hr)) {
- /* Failure to retieve an element probably means the array is sparse */
- /* So leave the php array sparse too */
- continue;
- }
- /* Create an element to be added to the array */
- ALLOC_ZVAL(element);
- /* Call ourself again to handle the base type conversion */
- /* If SafeArrayGetElement proclaims to allocate */
- /* memory for a BSTR, so the recursive call frees */
- /* the string correctly */
- if (FAILURE == php_variant_to_pval(&vv, element, codepage TSRMLS_CC)) {
- /* Error occurred setting up array element */
- /* Error was displayed by the recursive call */
- FREE_ZVAL(element);
- /* TODO: Do we stop here, or go on and */
- /* try to make sense of the rest of the array */
- /* Going on leads to multiple errors displayed */
- /* for the same conversion. For large arrays that */
- /* could be very annoying */
- /* And if we don't go on - what to do about */
- /* the parts of the array that are OK? */
- /* break; */
- } else {
- /* Just insert the element into our return array */
- add_index_zval(pval_arg, ii, element);
- }
- }
- SafeArrayUnlock(array);
- } else switch (var_arg->vt & ~VT_BYREF) {
- case VT_EMPTY:
- ZVAL_NULL(pval_arg);
- break;
-
- case VT_UI1:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UI1REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UI1(var_arg));
- }
- break;
-
- case VT_I2:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long )*V_I2REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_I2(var_arg));
- }
- break;
-
- case VT_I4:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, *V_I4REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, V_I4(var_arg));
- }
- break;
-
- case VT_R4:
- if (V_ISBYREF(var_arg)) {
- ZVAL_DOUBLE(pval_arg, (double)*V_R4REF(var_arg));
- } else {
- ZVAL_DOUBLE(pval_arg, (double)V_R4(var_arg));
- }
- break;
-
- case VT_R8:
- if (V_ISBYREF(var_arg)) {
- ZVAL_DOUBLE(pval_arg, *V_R8REF(var_arg));
- } else {
- ZVAL_DOUBLE(pval_arg, V_R8(var_arg));
- }
- break;
-
- /* 96bit uint */
- case VT_DECIMAL: {
- OLECHAR *unicode_str;
- switch (VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) {
- case S_OK:
- Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- Z_TYPE_P(pval_arg) = IS_STRING;
- break;
-
- default:
- ZVAL_NULL(pval_arg);
- ret = FAILURE;
- php_error(E_WARNING, "Error converting DECIMAL value to PHP string");
- break;
- }
- }
- break;
-
- /* Currency */
- case VT_CY:
- if (V_ISBYREF(var_arg)) {
- VarR8FromCy(*V_CYREF(var_arg), &Z_DVAL_P(pval_arg));
- } else {
- VarR8FromCy(V_CY(var_arg), &Z_DVAL_P(pval_arg));
- }
- Z_TYPE_P(pval_arg) = IS_DOUBLE;
- break;
-
- case VT_BOOL:
- if (V_ISBYREF(var_arg)) {
- if (*V_BOOLREF(var_arg)) {
- ZVAL_BOOL(pval_arg, Z_TRUE);
- } else {
- ZVAL_BOOL(pval_arg, Z_FALSE);
- }
- } else {
- if (V_BOOL(var_arg)) {
- ZVAL_BOOL(pval_arg, Z_TRUE);
- } else {
- ZVAL_BOOL(pval_arg, Z_FALSE);
- }
- }
- break;
-
- case VT_NULL:
- case VT_VOID:
- ZVAL_NULL(pval_arg);
- break;
-
- case VT_VARIANT:
- php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, codepage TSRMLS_CC);
- break;
-
- case VT_BSTR:
- Z_TYPE_P(pval_arg) = IS_STRING;
-
- if (V_ISBYREF(var_arg)) {
- if (*V_BSTR(var_arg)) {
- Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- } else {
- ZVAL_NULL(pval_arg);
- }
- efree(V_BSTRREF(var_arg));
- } else {
- if (V_BSTR(var_arg)) {
- Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- } else {
- ZVAL_NULL(pval_arg);
- }
- }
-
- break;
-
- case VT_DATE: {
- BOOL success;
- SYSTEMTIME wintime;
- struct tm phptime;
-
- if (V_ISBYREF(var_arg)) {
- success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
- } else {
- success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
- }
-
- if (success) {
- memset(&phptime, 0, sizeof(phptime));
-
- phptime.tm_year = wintime.wYear - 1900;
- phptime.tm_mon = wintime.wMonth - 1;
- phptime.tm_mday = wintime.wDay;
- phptime.tm_hour = wintime.wHour;
- phptime.tm_min = wintime.wMinute;
- phptime.tm_sec = wintime.wSecond;
- phptime.tm_isdst = -1;
-
- tzset();
- ZVAL_LONG(pval_arg, mktime(&phptime));
- } else {
- ret = FAILURE;
- }
- }
- break;
-
- case VT_UNKNOWN:
- if (V_UNKNOWN(var_arg) == NULL) {
- V_DISPATCH(var_arg) = NULL;
- } else {
- HRESULT hr;
-
- hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg));
-
- if (FAILED(hr)) {
- char *error_message;
-
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to obtain IDispatch interface: %s", error_message);
- LocalFree(error_message);
-
- V_DISPATCH(var_arg) = NULL;
- }
- }
- /* break missing intentionaly */
- case VT_DISPATCH: {
- comval *obj;
-
- if (V_DISPATCH(var_arg) == NULL) {
- ret = FAILURE;
- ZVAL_NULL(pval_arg);
- } else {
- ALLOC_COM(obj);
- php_COM_set(obj, &V_DISPATCH(var_arg), TRUE TSRMLS_CC);
-
- ZVAL_COM(pval_arg, obj);
- }
- }
- break;
-
- case VT_I1:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_I1REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_I1(var_arg));
- }
- break;
-
- case VT_UI2:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UI2REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UI2(var_arg));
- }
- break;
-
- case VT_UI4:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UI4(var_arg));
- }
- break;
-
- case VT_INT:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_INTREF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_INT(var_arg));
- }
- break;
-
- case VT_UINT:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UINTREF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UINT(var_arg));
- }
- break;
-
- default:
- php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg));
- ZVAL_NULL(pval_arg);
- ret = FAILURE;
- break;
- }
- return ret;
-}
-
-
-PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC)
-{
- BOOL error = FALSE;
- OLECHAR *unicode_str;
-
- if (strlen == -1) {
- /* request needed buffersize */
- strlen = MultiByteToWideChar(codepage, (codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS), C_str, -1, NULL, 0);
- } else {
- /* \0 terminator */
- strlen++;
- }
-
- if (strlen >= 0) {
- unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR) * strlen);
-
- /* convert string */
- error = !MultiByteToWideChar(codepage, (codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS), C_str, strlen, unicode_str, strlen);
- } else {
- /* return a zero-length string */
- unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR));
- *unicode_str = 0;
-
- error = TRUE;
- }
-
- if (error) {
- switch (GetLastError()) {
- case ERROR_NO_UNICODE_TRANSLATION:
- php_error(E_WARNING, "No unicode translation available for the specified string");
- break;
- case ERROR_INSUFFICIENT_BUFFER:
- php_error(E_WARNING, "Internal Error: Insufficient Buffer");
- break;
- default:
- php_error(E_WARNING, "Unknown error in php_char_to_OLECHAR()");
- }
- }
-
- return unicode_str;
-}
-
-
-PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC)
-{
- char *C_str;
- uint length = 0;
-
- /* request needed buffersize */
- uint reqSize = WideCharToMultiByte(codepage, codepage == CP_UTF8 ? 0 : WC_COMPOSITECHECK, unicode_str, -1, NULL, 0, NULL, NULL);
-
- if (reqSize) {
- C_str = (char *) emalloc(sizeof(char) * reqSize);
-
- /* convert string */
- length = WideCharToMultiByte(codepage, codepage == CP_UTF8 ? 0 : WC_COMPOSITECHECK, unicode_str, -1, C_str, reqSize, NULL, NULL) - 1;
- } else {
- C_str = (char *) emalloc(sizeof(char));
- *C_str = 0;
-
- php_error(E_WARNING,"Error in php_OLECHAR_to_char()");
- }
-
- if (out_length) {
- *out_length = length;
- }
-
- return C_str;
-}
-
-
-static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC)
-{
- pval **comval_handle;
- comval *obj;
- int type;
-
- /* fetch the comval structure */
- zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle);
- obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
- if (!obj || (type != IS_COM) || !C_ISREFD(obj)) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_DISPATCH;
- V_DISPATCH(var_arg) = C_DISPATCH(obj);
- }
-}
-
-#endif /* PHP_WIN32 */
diff --git a/ext/com/conversion.h b/ext/com/conversion.h
deleted file mode 100644
index b8c534fa22..0000000000
--- a/ext/com/conversion.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef CONVERSION_H
-#define CONVERSION_H
-
-/* isn't this defined somewhere else ? */
-
-#define Z_TRUE 1
-#define Z_FALSE 0
-
-#define VT_TRUE -1
-#define VT_FALSE 0
-
-BEGIN_EXTERN_C()
-
-PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC);
-PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC);
-PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC);
-PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC);
-PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC);
-PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC);
-
-END_EXTERN_C()
-
-#endif \ No newline at end of file
diff --git a/ext/com/dispatch.c b/ext/com/dispatch.c
deleted file mode 100644
index 8d775a8662..0000000000
--- a/ext/com/dispatch.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * This module is used to export PHP objects to COM and DOTNET by exposing
- * them as objects implementing IDispatch.
- * */
-
-#include "php.h"
-#include "php_COM.h"
-#include "php_VARIANT.h"
-#include "conversion.h"
-#include "variant.h"
-
-#define COBJMACROS
-#include <unknwn.h> /* IDispatch */
-#include <dispex.h> /* IDispatchEx */
-
-
-typedef struct {
- /* This first part MUST match the declaration
- * of interface IDispatchEx */
- CONST_VTBL struct IDispatchExVtbl *lpVtbl;
-
- /* now the PHP stuff */
-
- THREAD_T engine_thread; /* for sanity checking */
- zval *object; /* the object exported */
- LONG refcount; /* COM reference count */
-
- HashTable *dispid_to_name; /* keep track of dispid -> name mappings */
- HashTable *name_to_dispid; /* keep track of name -> dispid mappings */
-
- GUID sinkid; /* iid that we "implement" for event sinking */
-
- int id;
-} php_dispatchex;
-
-static void disp_destructor(php_dispatchex *disp);
-
-static void dispatch_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_dispatchex *disp = (php_dispatchex *)rsrc->ptr;
- disp_destructor(disp);
-}
-
-static int le_dispatch;
-int php_COM_dispatch_init(int module_number TSRMLS_DC)
-{
- le_dispatch = zend_register_list_destructors_ex(dispatch_dtor, NULL, "COM:Dispatch", module_number);
- return le_dispatch;
-}
-
-
-/* {{{ trace */
-static inline void trace(char *fmt, ...)
-{
- va_list ap;
- char buf[4096];
-
- sprintf(buf, "T=%08x ", tsrm_thread_id());
- OutputDebugString(buf);
-
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
-
- OutputDebugString(buf);
-
- va_end(ap);
-}
-/* }}} */
-
-#define FETCH_DISP(methname) \
- php_dispatchex *disp = (php_dispatchex*)This; \
- trace(" PHP:%s %s\n", Z_OBJCE_P(disp->object)->name, methname); \
- if (tsrm_thread_id() != disp->engine_thread) \
- return E_UNEXPECTED;
-
-
-static HRESULT STDMETHODCALLTYPE disp_queryinterface(
- IDispatchEx *This,
- /* [in] */ REFIID riid,
- /* [iid_is][out] */ void **ppvObject)
-{
- FETCH_DISP("QueryInterface");
-
- if (IsEqualGUID(&IID_IUnknown, riid) ||
- IsEqualGUID(&IID_IDispatch, riid) ||
- IsEqualGUID(&IID_IDispatchEx, riid) ||
- IsEqualGUID(&disp->sinkid, riid)) {
- *ppvObject = This;
- InterlockedIncrement(&disp->refcount);
- return S_OK;
- }
-
- *ppvObject = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This)
-{
- FETCH_DISP("AddRef");
-
- return InterlockedIncrement(&disp->refcount);
-}
-
-static ULONG STDMETHODCALLTYPE disp_release(IDispatchEx *This)
-{
- ULONG ret;
- TSRMLS_FETCH();
- FETCH_DISP("Release");
-
- ret = InterlockedDecrement(&disp->refcount);
- trace("-- refcount now %d\n", ret);
- if (ret == 0) {
- /* destroy it */
- if (disp->id)
- zend_list_delete(disp->id);
- }
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_gettypeinfocount(
- IDispatchEx *This,
- /* [out] */ UINT *pctinfo)
-{
- FETCH_DISP("GetTypeInfoCount");
-
- *pctinfo = 0;
- return S_OK;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_gettypeinfo(
- IDispatchEx *This,
- /* [in] */ UINT iTInfo,
- /* [in] */ LCID lcid,
- /* [out] */ ITypeInfo **ppTInfo)
-{
- FETCH_DISP("GetTypeInfo");
-
- *ppTInfo = NULL;
- return DISP_E_BADINDEX;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getidsofnames(
- IDispatchEx *This,
- /* [in] */ REFIID riid,
- /* [size_is][in] */ LPOLESTR *rgszNames,
- /* [in] */ UINT cNames,
- /* [in] */ LCID lcid,
- /* [size_is][out] */ DISPID *rgDispId)
-{
- UINT i;
- HRESULT ret = S_OK;
- TSRMLS_FETCH();
- FETCH_DISP("GetIDsOfNames");
-
- for (i = 0; i < cNames; i++) {
- char *name;
- unsigned int namelen;
- zval **tmp;
-
- name = php_OLECHAR_to_char(rgszNames[i], &namelen, CP_ACP TSRMLS_CC);
-
- /* Lookup the name in the hash */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == FAILURE) {
- ret = DISP_E_UNKNOWNNAME;
- rgDispId[i] = 0;
- } else {
- rgDispId[i] = Z_LVAL_PP(tmp);
- }
-
- efree(name);
-
- }
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_invoke(
- IDispatchEx *This,
- /* [in] */ DISPID dispIdMember,
- /* [in] */ REFIID riid,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [out][in] */ DISPPARAMS *pDispParams,
- /* [out] */ VARIANT *pVarResult,
- /* [out] */ EXCEPINFO *pExcepInfo,
- /* [out] */ UINT *puArgErr)
-{
- return This->lpVtbl->InvokeEx(This, dispIdMember,
- lcid, wFlags, pDispParams,
- pVarResult, pExcepInfo, NULL);
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getdispid(
- IDispatchEx *This,
- /* [in] */ BSTR bstrName,
- /* [in] */ DWORD grfdex,
- /* [out] */ DISPID *pid)
-{
- HRESULT ret = DISP_E_UNKNOWNNAME;
- char *name;
- unsigned int namelen;
- zval **tmp;
- TSRMLS_FETCH();
- FETCH_DISP("GetDispID");
-
- name = php_OLECHAR_to_char(bstrName, &namelen, CP_ACP TSRMLS_CC);
-
- /* Lookup the name in the hash */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) {
- *pid = Z_LVAL_PP(tmp);
- ret = S_OK;
- }
-
- efree(name);
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_invokeex(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [in] */ DISPPARAMS *pdp,
- /* [out] */ VARIANT *pvarRes,
- /* [out] */ EXCEPINFO *pei,
- /* [unique][in] */ IServiceProvider *pspCaller)
-{
- zval **name;
- UINT i;
- int codepage = CP_ACP;
- zval *retval = NULL;
- zval ***params = NULL;
- HRESULT ret = DISP_E_MEMBERNOTFOUND;
- TSRMLS_FETCH();
- FETCH_DISP("InvokeEx");
-
- if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) {
- /* TODO: add support for overloaded objects */
-
- trace("-- Invoke: %d %20s flags=%08x args=%d\n", id, Z_STRVAL_PP(name), wFlags, pdp->cArgs);
-
- /* convert args into zvals.
- * Args are in reverse order */
- params = (zval ***)emalloc(sizeof(zval **) * pdp->cArgs);
- for (i = 0; i < pdp->cArgs; i++) {
- VARIANT *arg;
- zval *zarg;
-
- arg = &pdp->rgvarg[ pdp->cArgs - 1 - i];
-
- trace("alloc zval for arg %d VT=%08x\n", i, V_VT(arg));
-
- ALLOC_INIT_ZVAL(zarg);
-
- if (V_VT(arg) == VT_DISPATCH) {
- trace("arg %d is dispatchable\n", i);
- if (NULL == php_COM_object_from_dispatch(V_DISPATCH(arg), zarg TSRMLS_CC)) {
- trace("failed to convert arg %d to zval\n", i);
- ZVAL_NULL(zarg);
- }
- } else {
- if (FAILURE == php_variant_to_pval(arg, zarg, codepage TSRMLS_CC)) {
- trace("failed to convert arg %d to zval\n", i);
- ZVAL_NULL(zarg);
- }
- }
-
- params[i] = &zarg;
- }
-
- trace("arguments processed, prepare to do some work\n");
-
- if (wFlags & DISPATCH_PROPERTYGET) {
- trace("trying to get a property\n");
- zend_hash_find(Z_OBJPROP_P(disp->object), Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, (void**)&retval);
- } else if (wFlags & DISPATCH_PROPERTYPUT) {
- trace("trying to set a property\n");
- add_property_zval(disp->object, Z_STRVAL_PP(name), *params[0]);
- } else if (wFlags & DISPATCH_METHOD) {
- trace("Trying to call user function\n");
- if (SUCCESS == call_user_function_ex(EG(function_table), &disp->object, *name,
- &retval, pdp->cArgs, params, 1, NULL TSRMLS_CC)) {
- ret = S_OK;
- } else {
- ret = DISP_E_EXCEPTION;
- }
- } else {
- trace("Don't know how to handle this invocation %08x\n", wFlags);
- }
-
- /* release arguments */
- for (i = 0; i < pdp->cArgs; i++)
- zval_ptr_dtor(params[i]);
- efree(params);
-
- /* return value */
- if (retval) {
- if (pvarRes) {
- if (Z_TYPE_P(retval) == IS_OBJECT) {
- /* export the object using a dispatch like ourselves */
- VariantInit(pvarRes);
- V_VT(pvarRes) = VT_DISPATCH;
- V_DISPATCH(pvarRes) = php_COM_export_object(retval TSRMLS_CC);
- } else {
- php_pval_to_variant(retval, pvarRes, codepage TSRMLS_CC);
- }
- }
- zval_ptr_dtor(&retval);
- } else if (pvarRes) {
- VariantInit(pvarRes);
- }
-
- } else {
- trace("InvokeEx: I don't support DISPID=%d\n", id);
- }
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_deletememberbyname(
- IDispatchEx *This,
- /* [in] */ BSTR bstrName,
- /* [in] */ DWORD grfdex)
-{
- FETCH_DISP("DeleteMemberByName");
-
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_deletememberbydispid(
- IDispatchEx *This,
- /* [in] */ DISPID id)
-{
- FETCH_DISP("DeleteMemberByDispID");
-
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getmemberproperties(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [in] */ DWORD grfdexFetch,
- /* [out] */ DWORD *pgrfdex)
-{
- FETCH_DISP("GetMemberProperties");
-
- return DISP_E_UNKNOWNNAME;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getmembername(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [out] */ BSTR *pbstrName)
-{
- zval *name;
- TSRMLS_FETCH();
- FETCH_DISP("GetMemberName");
-
- if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) {
- OLECHAR *olestr = php_char_to_OLECHAR(Z_STRVAL_P(name), Z_STRLEN_P(name), CP_ACP TSRMLS_CC);
- *pbstrName = SysAllocString(olestr);
- efree(olestr);
- return S_OK;
- } else {
- return DISP_E_UNKNOWNNAME;
- }
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getnextdispid(
- IDispatchEx *This,
- /* [in] */ DWORD grfdex,
- /* [in] */ DISPID id,
- /* [out] */ DISPID *pid)
-{
- ulong next = id+1;
- FETCH_DISP("GetNextDispID");
-
- while(!zend_hash_index_exists(disp->dispid_to_name, next))
- next++;
-
- if (zend_hash_index_exists(disp->dispid_to_name, next)) {
- *pid = next;
- return S_OK;
- }
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getnamespaceparent(
- IDispatchEx *This,
- /* [out] */ IUnknown **ppunk)
-{
- FETCH_DISP("GetNameSpaceParent");
-
- *ppunk = NULL;
- return E_NOTIMPL;
-}
-
-static struct IDispatchExVtbl php_dispatch_vtbl = {
- disp_queryinterface,
- disp_addref,
- disp_release,
- disp_gettypeinfocount,
- disp_gettypeinfo,
- disp_getidsofnames,
- disp_invoke,
- disp_getdispid,
- disp_invokeex,
- disp_deletememberbyname,
- disp_deletememberbydispid,
- disp_getmemberproperties,
- disp_getmembername,
- disp_getnextdispid,
- disp_getnamespaceparent
-};
-
-
-/* enumerate functions and properties of the object and assign
- * dispatch ids */
-static void generate_dispids(php_dispatchex *disp TSRMLS_DC)
-{
- HashPosition pos;
- char *name = NULL;
- zval *tmp;
- int namelen;
- int keytype;
- ulong pid;
-
- if (disp->dispid_to_name == NULL) {
- ALLOC_HASHTABLE(disp->dispid_to_name);
- ALLOC_HASHTABLE(disp->name_to_dispid);
- zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_init(disp->dispid_to_name, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
-
- /* properties */
- zend_hash_internal_pointer_reset_ex(Z_OBJPROP_PP(&disp->object), &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(Z_OBJPROP_PP(&disp->object), &name, &namelen, &pid, 0, &pos))) {
- char namebuf[32];
- if (keytype == HASH_KEY_IS_LONG) {
- sprintf(namebuf, "%d", pid);
- name = namebuf;
- namelen = strlen(namebuf);
- }
-
- zend_hash_move_forward_ex(Z_OBJPROP_PP(&disp->object), &pos);
-
- /* Find the existing id */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS)
- continue;
-
- /* add the mappings */
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, name, namelen, 1);
- zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, name, namelen+1, (void*)&tmp, sizeof(zval *), NULL);
-
- }
-
- /* functions */
- zend_hash_internal_pointer_reset_ex(&Z_OBJCE_PP(&disp->object)->function_table, &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(&Z_OBJCE_PP(&disp->object)->function_table, &name, &namelen, &pid, 0, &pos))) {
-
- char namebuf[32];
- if (keytype == HASH_KEY_IS_LONG) {
- sprintf(namebuf, "%d", pid);
- name = namebuf;
- namelen = strlen(namebuf);
- }
-
- zend_hash_move_forward_ex(Z_OBJPROP_PP(&disp->object), &pos);
-
- /* Find the existing id */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS)
- continue;
-
- /* add the mappings */
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, name, namelen, 1);
- zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, name, namelen+1, (void*)&tmp, sizeof(zval *), NULL);
- }
-}
-
-static php_dispatchex *disp_constructor(zval *object TSRMLS_DC)
-{
- php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex));
-
- trace("constructing a COM proxy\n");
-
- if (disp == NULL)
- return NULL;
-
- memset(disp, 0, sizeof(php_dispatchex));
-
- disp->engine_thread = tsrm_thread_id();
- disp->lpVtbl = &php_dispatch_vtbl;
- disp->refcount = 1;
-
-
- if (object)
- ZVAL_ADDREF(object);
- disp->object = object;
-
- disp->id = zend_list_insert(disp, le_dispatch);
-
- return disp;
-}
-
-static void disp_destructor(php_dispatchex *disp)
-{
- TSRMLS_FETCH();
-
- trace("destroying COM wrapper for PHP object %s\n", Z_OBJCE_P(disp->object)->name);
-
- disp->id = 0;
-
- if (disp->refcount > 0)
- CoDisconnectObject((IUnknown*)disp, 0);
-
- zend_hash_destroy(disp->dispid_to_name);
- zend_hash_destroy(disp->name_to_dispid);
- FREE_HASHTABLE(disp->dispid_to_name);
- FREE_HASHTABLE(disp->name_to_dispid);
-
- if (disp->object)
- zval_ptr_dtor(&disp->object);
-
-
- CoTaskMemFree(disp);
-}
-
-PHPAPI IDispatch *php_COM_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC)
-{
- php_dispatchex *disp = disp_constructor(val TSRMLS_CC);
- HashPosition pos;
- char *name = NULL;
- zval *tmp, **ntmp;
- int namelen;
- int keytype;
- ulong pid;
-
- disp->dispid_to_name = id_to_name;
-
- memcpy(&disp->sinkid, sinkid, sizeof(disp->sinkid));
-
- /* build up the reverse mapping */
- ALLOC_HASHTABLE(disp->name_to_dispid);
- zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- zend_hash_internal_pointer_reset_ex(id_to_name, &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(id_to_name, &name, &namelen, &pid, 0, &pos))) {
-
- if (keytype == HASH_KEY_IS_LONG) {
-
- zend_hash_get_current_data_ex(id_to_name, (void**)&ntmp, &pos);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, Z_STRVAL_PP(ntmp), Z_STRLEN_PP(ntmp)+1, (void*)&tmp, sizeof(zval *), NULL);
- }
-
- zend_hash_move_forward_ex(id_to_name, &pos);
- }
-
- return (IDispatch*)disp;
-}
-
-PHPAPI IDispatch *php_COM_export_object(zval *val TSRMLS_DC)
-{
- php_dispatchex *disp = NULL;
-
- if (Z_TYPE_P(val) != IS_OBJECT)
- return NULL;
-
- if (Z_OBJCE_P(val) == &COM_class_entry || !strcmp(Z_OBJCE_P(val)->name, "COM")) {
- /* pass back it's IDispatch directly */
- zval **tmp;
- comval *obj;
- int type;
-
- zend_hash_index_find(Z_OBJPROP_P(val), 0, (void**)&tmp);
- obj = (comval *)zend_list_find(Z_LVAL_PP(tmp), &type);
- if (type != IS_COM)
- return NULL;
-
- C_DISPATCH(obj)->lpVtbl->AddRef(C_DISPATCH(obj));
- return C_DISPATCH(obj);
- }
-
- disp = disp_constructor(val TSRMLS_CC);
- generate_dispids(disp TSRMLS_CC);
-
- return (IDispatch*)disp;
-}
-
-
diff --git a/ext/com/php_COM.h b/ext/com/php_COM.h
deleted file mode 100644
index d26441f6a3..0000000000
--- a/ext/com/php_COM.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef PHP_COM_H
-#define PHP_COM_H
-
-#if PHP_WIN32
-
-#include "com.h"
-
-BEGIN_EXTERN_C()
-
-PHP_MINIT_FUNCTION(COM);
-PHP_MSHUTDOWN_FUNCTION(COM);
-
-PHP_FUNCTION(com_load);
-PHP_FUNCTION(com_invoke);
-PHP_FUNCTION(com_addref);
-PHP_FUNCTION(com_release);
-PHP_FUNCTION(com_propget);
-PHP_FUNCTION(com_propput);
-PHP_FUNCTION(com_load_typelib);
-PHP_FUNCTION(com_isenum);
-PHP_FUNCTION(com_event_sink);
-PHP_FUNCTION(com_message_pump);
-PHP_FUNCTION(com_print_typeinfo);
-
-PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, char **ErrString TSRMLS_DC);
-PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId TSRMLS_DC);
-PHPAPI HRESULT php_COM_release(comval *obj TSRMLS_DC);
-PHPAPI HRESULT php_COM_addref(comval *obj TSRMLS_DC);
-PHPAPI HRESULT php_COM_destruct(comval *obj TSRMLS_DC);
-PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup TSRMLS_DC);
-PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup TSRMLS_DC);
-PHPAPI char *php_COM_error_message(HRESULT hr TSRMLS_DC);
-PHPAPI int php_COM_get_le_comval();
-PHPAPI int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value);
-PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_reference);
-PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
-PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC);
-PHPAPI int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC);
-
-/* dispatch.c */
-PHPAPI IDispatch *php_COM_export_object(zval *val TSRMLS_DC);
-PHPAPI IDispatch *php_COM_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC);
-int php_COM_dispatch_init(int module_number TSRMLS_DC);
-
-zend_module_entry COM_module_entry;
-zend_class_entry COM_class_entry;
-
-#ifdef DEBUG
- extern int resourcecounter;
-#endif
-
-END_EXTERN_C()
-
-#define phpext_com_ptr &COM_module_entry
-
-ZEND_BEGIN_MODULE_GLOBALS(com)
- int nothing;
-ZEND_END_MODULE_GLOBALS(com)
-
-PHPAPI ZEND_EXTERN_MODULE_GLOBALS(com);
-
-#ifdef ZTS
-#define COMG(v) TSRMG(com_globals_id, zend_com_globals *, v)
-#else
-#define COMG(v) (com_globals.v)
-#endif
-
-#else
-
-#define phpext_com_ptr NULL
-
-#endif /* PHP_WIN32 */
-
-#endif /* PHP_COM_H */
diff --git a/ext/com/php_VARIANT.h b/ext/com/php_VARIANT.h
deleted file mode 100644
index 54347461c8..0000000000
--- a/ext/com/php_VARIANT.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef PHP_TYPEDEF_VARIANT_H
-#define PHP_TYPEDEF_VARIANT_H
-
-#if PHP_WIN32
-
-BEGIN_EXTERN_C()
-
-#include "conversion.h"
-#include "variant.h"
-
-void php_VARIANT_init(int module_number TSRMLS_DC);
-
-PHPAPI int php_VARIANT_get_le_variant();
-
-END_EXTERN_C()
-
-#endif /* PHP_WIN32 */
-
-#endif /* PHP_TYPEDEF_VARIANT_H */
diff --git a/ext/com/variant.h b/ext/com/variant.h
deleted file mode 100644
index 31ea342d66..0000000000
--- a/ext/com/variant.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef VARIANT_H
-#define VARIANT_H
-
-#if PHP_WIN32
-
-#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \
- VariantInit(v);
-
-#define FREE_VARIANT(v) VariantClear(v); \
- efree(v);
-
-
-#define IS_VARIANT php_VARIANT_get_le_variant()
-
-#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \
- comval *obj; \
- ALLOC_COM(obj); \
- php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \
- ZVAL_RESOURCE((z), zend_list_insert(obj, IS_COM)); \
- } else { \
- php_variant_to_pval((v), (z), codepage TSRMLS_CC); \
- FREE_VARIANT(v); \
- }
-
-#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v));
-#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \
- return;
-
-
-#endif /* PHP_WIN32 */
-
-#endif /* VARIANT_H */
diff --git a/ext/cpdf/CREDITS b/ext/cpdf/CREDITS
deleted file mode 100644
index 94cc1de43c..0000000000
--- a/ext/cpdf/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-cpdf
-Uwe Steinmann
diff --git a/ext/cpdf/config.m4 b/ext/cpdf/config.m4
deleted file mode 100644
index d48c8366f1..0000000000
--- a/ext/cpdf/config.m4
+++ /dev/null
@@ -1,70 +0,0 @@
-dnl $Id$
-
-AC_MSG_CHECKING(for cpdflib support)
-AC_ARG_WITH(cpdflib,
-[ --with-cpdflib[=DIR] Include cpdflib support (requires cpdflib >= 2).],
-[
- case $withval in
- no)
- AC_MSG_RESULT(no) ;;
- yes)
- AC_MSG_RESULT(yes)
- PHP_NEW_EXTENSION(cpdf, cpdf.c)
- AC_CHECK_LIB(cpdf, cpdf_open, [AC_DEFINE(HAVE_CPDFLIB,1,[Whether you have cpdflib])],
- [AC_MSG_ERROR([Cpdf module requires cpdflib >= 2.])])
- PHP_ADD_LIBRARY(cpdf)
- PHP_ADD_LIBRARY(tiff)
- PHP_ADD_LIBRARY(jpeg)
- ;;
- *)
- test -f $withval/include/cpdflib.h && CPDFLIB_INCLUDE=$withval/include
- if test -n "$CPDFLIB_INCLUDE" ; then
- AC_MSG_RESULT(yes)
- PHP_NEW_EXTENSION(cpdf, cpdf.c)
- old_LIBS=$LIBS
- old_withval=$withval
-
- AC_MSG_CHECKING([for libjpeg (needed by cpdflib 2.x)])
- AC_ARG_WITH(jpeg-dir,
- [ --with-jpeg-dir[=DIR] jpeg dir for cpdflib 2.x],[
- AC_MSG_RESULT(yes)
- if test -z $withval; then
- withval=/usr/local
- fi
- LIBS="$LIBS -L$withval/lib"
- AC_CHECK_LIB(jpeg,jpeg_read_header, ,[AC_MSG_RESULT(no)],)
- PHP_ADD_LIBRARY_WITH_PATH(jpeg, $withval/lib)
- ],[
- AC_MSG_RESULT(no)
- AC_MSG_WARN(If configure fails try --with-jpeg-dir=<DIR>)
- ])
-
- AC_MSG_CHECKING([for libtiff (needed by cpdflib 2.x)])
- AC_ARG_WITH(tiff-dir,
- [ --with-tiff-dir[=DIR] tiff dir for cpdflib 2.x],[
- AC_MSG_RESULT(yes)
- if test -z $withval; then
- withval=/usr/local
- fi
- LIBS="$LIBS -L$withval/lib"
- AC_CHECK_LIB(tiff,TIFFOpen, ,[AC_MSG_RESULT(no)],)
- PHP_ADD_LIBRARY_WITH_PATH(tiff, $withval/lib)
- ],[
- AC_MSG_RESULT(no)
- AC_MSG_WARN(If configure fails try --with-tiff-dir=<DIR>)
- ])
- withval=$old_withval
-
- LIBS="$LIBS -L$withval/lib"
- AC_CHECK_LIB(cpdf, cpdf_open, [AC_DEFINE(HAVE_CPDFLIB,1,[Whether you have cpdflib])],
- [AC_MSG_ERROR([Cpdflib module requires cpdflib >= 2.])])
- LIBS=$old_LIBS
- PHP_ADD_LIBRARY_WITH_PATH(cpdf, $withval/lib)
- PHP_ADD_INCLUDE($CPDFLIB_INCLUDE)
- else
- AC_MSG_RESULT(no)
- fi ;;
- esac
-],[
- AC_MSG_RESULT(no)
-])
diff --git a/ext/cpdf/cpdf.c b/ext/cpdf/cpdf.c
deleted file mode 100644
index c11506f50e..0000000000
--- a/ext/cpdf/cpdf.c
+++ /dev/null
@@ -1,2719 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-/* cpdflib.h -- C language API definitions for ClibPDF library
- * Copyright (C) 1998 FastIO Systems, All Rights Reserved.
-*/
-
-/* Note that there is no code from the cpdflib package in this file */
-
-#if !PHP_31 && defined(THREAD_SAFE)
-#undef THREAD_SAFE
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "zend_list.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/head.h"
-#include <math.h>
-#if HAVE_LIBGD13
-#include <gd.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef PHP_WIN32
-# include <io.h>
-# include <fcntl.h>
-#endif
-
-#if HAVE_CPDFLIB
-#include "php_cpdf.h"
-#include "ext/standard/info.h"
-
-#ifdef THREAD_SAFE
-DWORD CPDFlibTls;
-static int numthreads=0;
-
-typedef struct cpdflib_global_struct{
- int le_cpdf;
- int le_outline;
-#if HAVE_LIBGD13
- int le_gd;
-#endif
-} cpdflib_global_struct;
-
-# define CPDF_GLOBAL(v) TSRMG(CPDFlibTls, cpdflib_global_struct *, v)
-
-#else
-# define CPDF_GLOBAL(a) a
-static int le_cpdf;
-static int le_outline;
-#if HAVE_LIBGD13
-static int le_gd;
-#endif
-#endif
-
-function_entry cpdf_functions[] = {
- PHP_FE(cpdf_global_set_document_limits, NULL)
- PHP_FE(cpdf_set_creator, NULL)
- PHP_FE(cpdf_set_title, NULL)
- PHP_FE(cpdf_set_subject, NULL)
- PHP_FE(cpdf_set_keywords, NULL)
- PHP_FE(cpdf_open, NULL)
- PHP_FE(cpdf_close, NULL)
- PHP_FE(cpdf_set_viewer_preferences, NULL)
- PHP_FE(cpdf_page_init, NULL)
- PHP_FE(cpdf_finalize_page, NULL)
- PHP_FE(cpdf_set_current_page, NULL)
- PHP_FE(cpdf_begin_text, NULL)
- PHP_FE(cpdf_end_text, NULL)
- PHP_FE(cpdf_show, NULL)
- PHP_FE(cpdf_show_xy, NULL)
- PHP_FE(cpdf_text, NULL)
- PHP_FE(cpdf_continue_text, NULL)
- PHP_FE(cpdf_set_font, NULL)
- PHP_FE(cpdf_set_font_directories, NULL)
- PHP_FE(cpdf_set_font_map_file, NULL)
- PHP_FE(cpdf_set_leading, NULL)
- PHP_FE(cpdf_set_text_rendering, NULL)
- PHP_FE(cpdf_set_horiz_scaling, NULL)
- PHP_FE(cpdf_set_text_rise, NULL)
- PHP_FE(cpdf_set_text_matrix, NULL)
- PHP_FE(cpdf_set_text_pos, NULL)
- PHP_FE(cpdf_rotate_text, NULL)
- PHP_FE(cpdf_set_char_spacing, NULL)
- PHP_FE(cpdf_set_word_spacing, NULL)
- PHP_FE(cpdf_stringwidth, NULL)
- PHP_FE(cpdf_save, NULL)
- PHP_FE(cpdf_restore, NULL)
- PHP_FE(cpdf_translate, NULL)
- PHP_FE(cpdf_scale, NULL)
- PHP_FE(cpdf_rotate, NULL)
- PHP_FE(cpdf_setflat, NULL)
- PHP_FE(cpdf_setlinejoin, NULL)
- PHP_FE(cpdf_setlinecap, NULL)
- PHP_FE(cpdf_setmiterlimit, NULL)
- PHP_FE(cpdf_setlinewidth, NULL)
- PHP_FE(cpdf_setdash, NULL)
- PHP_FE(cpdf_moveto, NULL)
- PHP_FE(cpdf_rmoveto, NULL)
- PHP_FE(cpdf_lineto, NULL)
- PHP_FE(cpdf_rlineto, NULL)
- PHP_FE(cpdf_curveto, NULL)
- PHP_FE(cpdf_circle, NULL)
- PHP_FE(cpdf_arc, NULL)
- PHP_FE(cpdf_rect, NULL)
- PHP_FE(cpdf_newpath, NULL)
- PHP_FE(cpdf_closepath, NULL)
- PHP_FE(cpdf_stroke, NULL)
- PHP_FE(cpdf_closepath_stroke, NULL)
- PHP_FE(cpdf_fill, NULL)
- PHP_FE(cpdf_fill_stroke, NULL)
- PHP_FE(cpdf_closepath_fill_stroke, NULL)
- PHP_FE(cpdf_clip, NULL)
- PHP_FE(cpdf_setgray_fill, NULL)
- PHP_FE(cpdf_setgray_stroke, NULL)
- PHP_FE(cpdf_setgray, NULL)
- PHP_FE(cpdf_setrgbcolor_fill, NULL)
- PHP_FE(cpdf_setrgbcolor_stroke, NULL)
- PHP_FE(cpdf_setrgbcolor, NULL)
- PHP_FE(cpdf_set_page_animation, NULL)
- PHP_FE(cpdf_finalize, NULL)
- PHP_FE(cpdf_output_buffer, NULL)
- PHP_FE(cpdf_save_to_file, NULL)
- PHP_FE(cpdf_import_jpeg, NULL)
-#if HAVE_LIBGD13
- PHP_FE(cpdf_place_inline_image, NULL)
-#endif
- PHP_FE(cpdf_add_annotation, NULL)
- PHP_FE(cpdf_add_outline, NULL)
- PHP_FE(cpdf_set_action_url, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry cpdf_module_entry = {
- STANDARD_MODULE_HEADER,
- "cpdf",
- cpdf_functions,
- PHP_MINIT(cpdf),
- PHP_MSHUTDOWN(cpdf),
- PHP_RINIT(cpdf),
- NULL,
- PHP_MINFO(cpdf),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_CPDF
-ZEND_GET_MODULE(cpdf)
-#endif
-
-static void _free_outline(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-}
-
-static void _free_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- CPDFdoc *pdf = (CPDFdoc *)rsrc->ptr;
-
- cpdf_close(pdf);
-}
-
-PHP_MINIT_FUNCTION(cpdf)
-{
- CPDF_GLOBAL(le_outline) = zend_register_list_destructors_ex(_free_outline, NULL, "cpdf outline", module_number);
- CPDF_GLOBAL(le_cpdf) = zend_register_list_destructors_ex(_free_doc, NULL, "cpdf", module_number);
-
- REGISTER_LONG_CONSTANT("CPDF_PM_NONE", PM_NONE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PM_OUTLINES", PM_OUTLINES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PM_THUMBS", PM_THUMBS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PM_FULLSCREEN", PM_FULLSCREEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_SINGLE", PL_SINGLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_1COLUMN", PL_1COLUMN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_2LCOLUMN", PL_2LCOLUMN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_2RCOLUMN", PL_2RCOLUMN, CONST_CS | CONST_PERSISTENT);
-
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(cpdf)
-{
-/* CPDF_GLOBAL(le_outline) = NULL; */
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(cpdf) {
- /* need to use a PHPAPI function here because it is external module in windows */
- /* (don't knwo if that still applies (cmv) */
- php_info_print_table_start();
- php_info_print_table_row(2, "CPDF Support", "enabled");
- php_info_print_table_row(2, "Version", cpdf_version() );
- php_info_print_table_end();
-}
-
-PHP_MSHUTDOWN_FUNCTION(cpdf)
-{
- return SUCCESS;
-}
-
-/* {{{ proto void cpdf_global_set_document_limits(int maxPages, int maxFonts, int maxImages, int maxAnnots, int maxObjects)
- Sets document settings for all documents */
-PHP_FUNCTION(cpdf_global_set_document_limits)
-{
- pval *argv[5];
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if(argc != 5)
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_long(argv[1]);
- convert_to_long(argv[2]);
- convert_to_long(argv[3]);
- convert_to_long(argv[4]);
-
- cpdf_setGlobalDocumentLimits(Z_LVAL_P(argv[0]), Z_LVAL_P(argv[1]), Z_LVAL_P(argv[2]), Z_LVAL_P(argv[3]), Z_LVAL_P(argv[4]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_creator(int pdfdoc, string creator)
- Sets the creator field */
-PHP_FUNCTION(cpdf_set_creator)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type);
- RETURN_FALSE;
- }
-
- cpdf_setCreator(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_title(int pdfptr, string title)
- Fills the title field of the info structure */
-PHP_FUNCTION(cpdf_set_title)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type);
- RETURN_FALSE;
- }
-
- cpdf_setTitle(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_subject(int pdfptr, string subject)
- Fills the subject field of the info structure */
-PHP_FUNCTION(cpdf_set_subject)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type);
- RETURN_FALSE;
- }
-
- cpdf_setSubject(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_keywords(int pdfptr, string keywords)
- Fills the keywords field of the info structure */
-PHP_FUNCTION(cpdf_set_keywords)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type);
- RETURN_FALSE;
- }
-
- cpdf_setKeywords(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_viewer_preferences(int pdfdoc, array preferences)
- How to show the document in the viewer */
-PHP_FUNCTION(cpdf_set_viewer_preferences)
-{
- zval *arg1, *arg2;
- zval **zvalue;
- int id, type;
- CPDFdoc *pdf;
- CPDFviewerPrefs vP = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
- if(ZEND_NUM_ARGS() != 2)
- WRONG_PARAM_COUNT;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(arg1);
- convert_to_array(arg2);
-
- id = Z_LVAL_P (arg1);
-
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if (zend_hash_find (Z_ARRVAL_P(arg2), "pagemode", sizeof ("pagemode"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.pageMode = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "hidetoolbar", sizeof ("hidetoolbar"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.hideToolbar = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "hidemenubar", sizeof ("hidemenubar"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.hideMenubar = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "hidewindowui", sizeof ("hidewindowui"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.hideWindowUI = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "fitwindow", sizeof ("fitwindow"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.fitWindow = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "centerwindow", sizeof ("centerwindow"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.centerWindow = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "pagelayout", sizeof ("pagelayout"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.pageLayout = Z_LVAL_PP (zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_P(arg2), "nonfspagemode", sizeof ("nonfspagemode"), (void **) &zvalue) == SUCCESS)
- {
- convert_to_long_ex (zvalue);
- vP.nonFSPageMode = Z_LVAL_PP (zvalue);
- }
-
- cpdf_setViewerPreferences(pdf, &vP);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int cpdf_open(int compression [, string filename [, array doc_limits]])
- Opens a new pdf document */
-PHP_FUNCTION(cpdf_open)
-{
- pval *arg1, *arg2, *arg3;
- int id, argc;
- CPDFdoc *cpdf;
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 1:
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
-
- cpdf = cpdf_open(0, NULL);
- if(!cpdf)
- RETURN_FALSE;
- if(Z_LVAL_P(arg1) == 1)
- cpdf_enableCompression(cpdf, YES);
- else
- cpdf_enableCompression(cpdf, NO);
-
- if(argc > 1) {
- convert_to_string(arg2);
-#if APACHE
- if(strcmp(Z_STRVAL_P(arg2), "-") == 0)
- php_error(E_WARNING, "Writing to stdout as described in the ClibPDF manual is not possible if php is used as an Apache module. Write to a memory stream and use cpdf_output_buffer() instead.");
-#endif
- cpdf_setOutputFilename(cpdf, Z_STRVAL_P(arg2));
- }
- cpdf_init(cpdf);
-
- id = zend_list_insert(cpdf, CPDF_GLOBAL(le_cpdf));
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* {{{ proto void cpdf_close(int pdfdoc)
- Closes the pdf document */
-PHP_FUNCTION(cpdf_close)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
- zend_list_delete(id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#define BUFFERLEN 40
-/* {{{ proto void cpdf_page_init(int pdfdoc, int pagenr, int orientation, int height, int width [, float unit])
- Starts page */
-PHP_FUNCTION(cpdf_page_init)
-{
- pval *argv[6];
- int id, type, pagenr, orientation;
- int height, width, argc;
- char buffer[BUFFERLEN];
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if(argc < 5 || argc > 6)
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_long(argv[1]);
- convert_to_long(argv[2]);
- convert_to_long(argv[3]);
- convert_to_long(argv[4]);
- id=Z_LVAL_P(argv[0]);
- pagenr=Z_LVAL_P(argv[1]);
- orientation=Z_LVAL_P(argv[2]);
- height = Z_LVAL_P(argv[3]);
- width = Z_LVAL_P(argv[4]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 5) {
- convert_to_double(argv[5]);
- if(Z_DVAL_P(argv[5]) > 0.0)
- cpdf_setDefaultDomainUnit(pdf, Z_DVAL_P(argv[5]));
- }
- snprintf(buffer, BUFFERLEN, "0 0 %d %d", width, height);
- cpdf_pageInit(pdf, pagenr, orientation, buffer, buffer);
-
- RETURN_TRUE;
-}
-/* }}} */
-#undef BUFFERLEN
-
-/* {{{ proto void cpdf_finalize_page(int pdfdoc, int pagenr)
- Ends the page to save memory */
-PHP_FUNCTION(cpdf_finalize_page)
-{
- pval *arg1, *arg2;
- int id, type, pagenr;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- id=Z_LVAL_P(arg1);
- pagenr=Z_LVAL_P(arg2);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_finalizePage(pdf, pagenr);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_current_page(int pdfdoc, int pagenr)
- Sets page for output */
-PHP_FUNCTION(cpdf_set_current_page)
-{
- pval *arg1, *arg2;
- int id, type, pagenr;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- id=Z_LVAL_P(arg1);
- pagenr=Z_LVAL_P(arg2);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setCurrentPage(pdf, pagenr);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_begin_text(int pdfdoc)
- Starts text section */
-PHP_FUNCTION(cpdf_begin_text)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_beginText(pdf, 0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_end_text(int pdfdoc)
- Ends text section */
-PHP_FUNCTION(cpdf_end_text)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_endText(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_show(int pdfdoc, string text)
- Output text at current position */
-PHP_FUNCTION(cpdf_show)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_textShow(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_show_xy(int pdfdoc, string text, float x-koor, float y-koor [, int mode])
- Output text at position */
-PHP_FUNCTION(cpdf_show_xy)
-{
- pval *argv[5];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 4) || (argc > 5))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_string(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc == 5) {
- convert_to_long(argv[4]);
- mode = Z_LVAL_P(argv[4]);
- }
- if(mode == 1)
- cpdf_rawText(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1]));
- else
- cpdf_text(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_continue_text(int pdfdoc, string text)
- Outputs text in next line */
-PHP_FUNCTION(cpdf_continue_text)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_textCRLFshow(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_text(int pdfdoc, string text [, float x-koor, float y-koor [, int mode [, float orientation [, int alignmode]]]])
- Outputs text */
-PHP_FUNCTION(cpdf_text)
-{
- pval *argv[7];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 2) || (argc == 3) || (argc > 7) || getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_string(argv[1]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 4) {
- convert_to_long(argv[4]);
- mode = Z_LVAL_P(argv[2]);
- }
- switch(argc) {
- case 2:
- cpdf_textShow(pdf, Z_STRVAL_P(argv[1]));
- break;
- case 4:
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- cpdf_text(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- 0.0,
- Z_STRVAL_P(argv[1]));
- break;
- case 5:
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- if(mode == 1)
- cpdf_rawText(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- 0.0,
- Z_STRVAL_P(argv[1]));
- else
- cpdf_text(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- 0.0,
- Z_STRVAL_P(argv[1]));
- break;
- case 6:
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[5]);
- if(mode == 1)
- cpdf_rawText(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[5]),
- Z_STRVAL_P(argv[1]));
- else
- cpdf_text(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[5]),
- Z_STRVAL_P(argv[1]));
- break;
- case 7:
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[5]);
- convert_to_long(argv[6]);
- if(mode == 1)
- cpdf_rawTextAligned(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[5]),
- Z_LVAL_P(argv[6]),
- Z_STRVAL_P(argv[1]));
- else
- cpdf_textAligned(pdf, (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[5]),
- Z_LVAL_P(argv[6]),
- Z_STRVAL_P(argv[1]));
- break;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_font(int pdfdoc, string font, float size, string encoding)
- Selects the current font face, size and encoding */
-PHP_FUNCTION(cpdf_set_font)
-{
- pval *arg1, *arg2, *arg3, *arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- convert_to_double(arg3);
- convert_to_string(arg4);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
-/* if(Z_LVAL_P(arg4) > 6) {
- php_error(E_WARNING, "Font encoding set to 5");
- Z_LVAL_P(arg4) = 5;
- }
-*/
- cpdf_setFont(pdf, Z_STRVAL_P(arg2), Z_STRVAL_P(arg4), (float) Z_DVAL_P(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_font_directories(int pdfdoc, string pfmdir, string pfbdir)
- Sets directories to search when using external fonts */
-PHP_FUNCTION(cpdf_set_font_directories)
-{
- pval *arg1, *arg2, *arg3;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- convert_to_string(arg3);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setFontDirectories(pdf, Z_STRVAL_P(arg2), Z_STRVAL_P(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_font_map_file(int pdfdoc, string filename)
- Sets fontname to filename translation map when using external fonts */
-PHP_FUNCTION(cpdf_set_font_map_file)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setFontMapFile(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_leading(int pdfdoc, float distance)
- Sets distance between text lines */
-PHP_FUNCTION(cpdf_set_leading)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setTextLeading(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_text_rendering(int pdfdoc, int rendermode)
- Determines how text is rendered */
-PHP_FUNCTION(cpdf_set_text_rendering)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setTextRenderingMode(pdf, Z_LVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_horiz_scaling(int pdfdoc, float scale)
- Sets horizontal scaling of text */
-PHP_FUNCTION(cpdf_set_horiz_scaling)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setHorizontalScaling(pdf, (float) Z_DVAL_P(arg2) * 100.0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_text_rise(int pdfdoc, float value)
- Sets the text rise */
-PHP_FUNCTION(cpdf_set_text_rise)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setTextRise(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_text_matrix(int pdfdoc, arry matrix)
- Sets the text matrix */
-PHP_FUNCTION(cpdf_set_text_matrix)
-{
- pval *arg1, *arg2, *data;
- int id, type, i;
- HashTable *matrix;
- CPDFdoc *pdf;
- float *pdfmatrixptr;
- float pdfmatrix[6];
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_array(arg2);
- id=Z_LVAL_P(arg1);
- matrix=Z_ARRVAL_P(arg2);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(zend_hash_num_elements(matrix) != 6) {
- php_error(E_WARNING, "Text matrix must have 6 elements");
- RETURN_FALSE;
- }
-
- pdfmatrixptr = pdfmatrix;
- zend_hash_internal_pointer_reset(matrix);
- for(i=0; i<zend_hash_num_elements(matrix); i++) {
- zend_hash_get_current_data(matrix, (void *) &data);
- switch(Z_TYPE_P(data)) {
- case IS_DOUBLE:
- *pdfmatrixptr++ = (float) Z_DVAL_P(data);
- break;
- default:
- *pdfmatrixptr++ = 0.0;
- break;
- }
- zend_hash_move_forward(matrix);
- }
-
- cpdf_setTextMatrix(pdf, pdfmatrix[0], pdfmatrix[1],
- pdfmatrix[2], pdfmatrix[3],
- pdfmatrix[4], pdfmatrix[5]);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_text_pos(int pdfdoc, float x, float y [, int mode])
- Sets the position of text for the next cpdf_show call */
-PHP_FUNCTION(cpdf_set_text_pos)
-{
- pval *argv[4];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 3) || (argc > 4))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 3) {
- convert_to_long(argv[3]);
- mode = Z_LVAL_P(argv[3]);
- }
- if(mode == 1)
- cpdf_rawSetTextPosition(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
- else
- cpdf_setTextPosition(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_rotate_text(int pdfdoc, float angle)
- Sets text rotation angle */
-PHP_FUNCTION(cpdf_rotate_text)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_rotateText(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_char_spacing(int pdfdoc, float space)
- Sets character spacing */
-PHP_FUNCTION(cpdf_set_char_spacing)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setCharacterSpacing(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_word_spacing(int pdfdoc, float space)
- Sets spacing between words */
-PHP_FUNCTION(cpdf_set_word_spacing)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setWordSpacing(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto float cpdf_stringwidth(int pdfdoc, string text)
- Returns width of text in current font */
-PHP_FUNCTION(cpdf_stringwidth)
-{
- pval *arg1, *arg2;
- int id, type;
- double width;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- width = (double) cpdf_stringWidth(pdf, Z_STRVAL_P(arg2));
-
- RETURN_DOUBLE((double)width);
-}
-/* }}} */
-
-/* {{{ proto void cpdf_save(int pdfdoc)
- Saves current enviroment */
-PHP_FUNCTION(cpdf_save)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_gsave(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_restore(int pdfdoc)
- Restores formerly saved enviroment */
-PHP_FUNCTION(cpdf_restore)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_grestore(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_translate(int pdfdoc, float x, float y)
- Sets origin of coordinate system */
-PHP_FUNCTION(cpdf_translate)
-{
- pval *arg1, *arg2, *arg3;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- convert_to_double(arg3);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_rawTranslate(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_scale(int pdfdoc, float x_scale, float y_scale)
- Sets scaling */
-PHP_FUNCTION(cpdf_scale)
-{
- pval *arg1, *arg2, *arg3;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- convert_to_double(arg3);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_scale(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_rotate(int pdfdoc, float angle)
- Sets rotation */
-PHP_FUNCTION(cpdf_rotate)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_rotate(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setflat(int pdfdoc, float value)
- Sets flatness */
-PHP_FUNCTION(cpdf_setflat)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if((Z_LVAL_P(arg2) > 100) && (Z_LVAL_P(arg2) < 0)) {
- php_error(E_WARNING, "Parameter of pdf_setflat() has to between 0 and 100");
- RETURN_FALSE;
- }
-
- cpdf_setflat(pdf, (int) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setlinejoin(int pdfdoc, int value)
- Sets linejoin parameter */
-PHP_FUNCTION(cpdf_setlinejoin)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if((Z_LVAL_P(arg2) > 2) && (Z_LVAL_P(arg2) < 0)) {
- php_error(E_WARNING, "Parameter of pdf_setlinejoin() has to between 0 and 2");
- RETURN_FALSE;
- }
-
- cpdf_setlinejoin(pdf, Z_LVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setlinecap(int pdfdoc, int value)
- Sets linecap parameter */
-PHP_FUNCTION(cpdf_setlinecap)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if((Z_LVAL_P(arg2) > 2) && (Z_LVAL_P(arg2) < 0)) {
- php_error(E_WARNING, "Parameter of pdf_setlinecap() has to be > 0 and =< 2");
- RETURN_FALSE;
- }
-
- cpdf_setlinecap(pdf, Z_LVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setmiterlimit(int pdfdoc, float value)
- Sets miter limit */
-PHP_FUNCTION(cpdf_setmiterlimit)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(Z_DVAL_P(arg2) < 1) {
- php_error(E_WARNING, "Parameter of pdf_setmiterlimit() has to be >= 1");
- RETURN_FALSE;
- }
-
- cpdf_setmiterlimit(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setlinewidth(int pdfdoc, float width)
- Sets line width */
-PHP_FUNCTION(cpdf_setlinewidth)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setlinewidth(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#define BUFFERLEN 20
-/* {{{ proto void cpdf_setdash(int pdfdoc, long white, long black)
- Sets dash pattern */
-PHP_FUNCTION(cpdf_setdash)
-{
- pval *arg1, *arg2, *arg3;
- int id, type;
- char buffer[BUFFERLEN];
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- convert_to_long(arg3);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- snprintf(buffer, BUFFERLEN, "[%d %d] 0", (int) Z_LVAL_P(arg2), (int) Z_LVAL_P(arg3));
- cpdf_setdash(pdf, buffer);
-
- RETURN_TRUE;
-}
-/* }}} */
-#undef BUFFERLEN
-
-/* {{{ proto void cpdf_moveto(int pdfdoc, float x, float y [, int mode])
- Sets current point */
-PHP_FUNCTION(cpdf_moveto)
-{
- pval *argv[4];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 3) || (argc > 4))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 3) {
- convert_to_long(argv[3]);
- mode = Z_LVAL_P(argv[3]);
- }
- if(mode == 1)
- cpdf_rawMoveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
- else
- cpdf_moveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_rmoveto(int pdfdoc, float x, float y [, int mode])
- Sets current point */
-PHP_FUNCTION(cpdf_rmoveto)
-{
- pval *argv[4];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 3) || (argc > 4))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 3) {
- convert_to_long(argv[3]);
- mode = Z_LVAL_P(argv[3]);
- }
- if(mode == 1)
- cpdf_rawRmoveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
- else
- cpdf_rmoveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode])
- Draws a curve */
-PHP_FUNCTION(cpdf_curveto)
-{
- pval *argv[8];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 7) || (argc > 8))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- convert_to_double(argv[5]);
- convert_to_double(argv[6]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 7) {
- convert_to_long(argv[7]);
- mode = Z_LVAL_P(argv[7]);
- }
- if(mode == 1)
- cpdf_rawCurveto(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- (float) Z_DVAL_P(argv[5]),
- (float) Z_DVAL_P(argv[6]));
- else
- cpdf_curveto(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- (float) Z_DVAL_P(argv[5]),
- (float) Z_DVAL_P(argv[6]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_lineto(int pdfdoc, float x, float y [, int mode])
- Draws a line */
-PHP_FUNCTION(cpdf_lineto)
-{
- pval *argv[4];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 3) || (argc > 4))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 3) {
- convert_to_long(argv[3]);
- mode = Z_LVAL_P(argv[3]);
- }
- if(mode == 1)
- cpdf_rawLineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
- else
- cpdf_lineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_rlineto(int pdfdoc, float x, float y [, int mode])
- Draws a line relative to current point */
-PHP_FUNCTION(cpdf_rlineto)
-{
- pval *argv[4];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 3) || (argc > 4))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 3) {
- convert_to_long(argv[3]);
- mode = Z_LVAL_P(argv[3]);
- }
- if(mode == 1)
- cpdf_rawRlineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
- else
- cpdf_rlineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_circle(int pdfdoc, float x, float y, float radius [, int mode])
- Draws a circle */
-PHP_FUNCTION(cpdf_circle)
-{
- pval *argv[5];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 4) || (argc > 5))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 4) {
- convert_to_long(argv[4]);
- mode = Z_LVAL_P(argv[4]);
- }
- if(mode == 1)
- cpdf_rawCircle(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]));
- else
- cpdf_circle(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_arc(int pdfdoc, float x, float y, float radius, float start, float end [, int mode])
- Draws an arc */
-PHP_FUNCTION(cpdf_arc)
-{
- pval *argv[7];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 6) || (argc > 7))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- convert_to_double(argv[5]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 6) {
- convert_to_long(argv[6]);
- mode = Z_LVAL_P(argv[6]);
- }
- if(mode == 1)
- cpdf_rawArc(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), 1);
- else
- cpdf_arc(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), 1);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_rect(int pdfdoc, float x, float y, float width, float height [, int mode])
- Draws a rectangle */
-PHP_FUNCTION(cpdf_rect)
-{
- pval *argv[6];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 5) || (argc > 6))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 5) {
- convert_to_long(argv[5]);
- mode = Z_LVAL_P(argv[5]);
- }
- if(mode == 1)
- cpdf_rawRect(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]));
- else
- cpdf_rect(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_newpath(int pdfdoc)
- Starts new path */
-PHP_FUNCTION(cpdf_newpath)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_newpath(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_closepath(int pdfdoc)
- Close path */
-PHP_FUNCTION(cpdf_closepath)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_closepath(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_closepath_stroke(int pdfdoc)
- Close path and draw line along path */
-PHP_FUNCTION(cpdf_closepath_stroke)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_closepath(pdf);
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_stroke(int pdfdoc)
- Draws line along path path */
-PHP_FUNCTION(cpdf_stroke)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_fill(int pdfdoc)
- Fills current path */
-PHP_FUNCTION(cpdf_fill)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_fill(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_fill_stroke(int pdfdoc)
- Fills and stroke current path */
-PHP_FUNCTION(cpdf_fill_stroke)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_fill(pdf);
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_closepath_fill_stroke(int pdfdoc)
- Close, fill and stroke current path */
-PHP_FUNCTION(cpdf_closepath_fill_stroke)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_closepath(pdf);
- cpdf_fill(pdf);
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_clip(int pdfdoc)
- Clips to current path */
-PHP_FUNCTION(cpdf_clip)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_clip(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setgray_fill(int pdfdoc, float value)
- Sets filling color to gray value */
-PHP_FUNCTION(cpdf_setgray_fill)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setgrayFill(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setgray_stroke(int pdfdoc, float value)
- Sets drawing color to gray value */
-PHP_FUNCTION(cpdf_setgray_stroke)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setgrayStroke(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setgray(int pdfdoc, float value)
- Sets drawing and filling color to gray value */
-PHP_FUNCTION(cpdf_setgray)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setgray(pdf, (float) Z_DVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue)
- Sets filling color to rgb color value */
-PHP_FUNCTION(cpdf_setrgbcolor_fill)
-{
- pval *arg1, *arg2, *arg3, *arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- convert_to_double(arg3);
- convert_to_double(arg4);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setrgbcolorFill(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3), (float) Z_DVAL_P(arg4));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue)
- Sets drawing color to RGB color value */
-PHP_FUNCTION(cpdf_setrgbcolor_stroke)
-{
- pval *arg1, *arg2, *arg3, *arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- convert_to_double(arg3);
- convert_to_double(arg4);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setrgbcolorStroke(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3), (float) Z_DVAL_P(arg4));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_setrgbcolor(int pdfdoc, float red, float green, float blue)
- Sets drawing and filling color to RGB color value */
-PHP_FUNCTION(cpdf_setrgbcolor)
-{
- pval *arg1, *arg2, *arg3, *arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_double(arg2);
- convert_to_double(arg3);
- convert_to_double(arg4);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setrgbcolor(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3), (float) Z_DVAL_P(arg4));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_page_animation(int pdfdoc, int transition, float duration, float direction, int orientation, int inout)
- Sets transition between pages */
-PHP_FUNCTION(cpdf_set_page_animation)
-{
- pval *arg1, *arg2, *arg3, *arg4, *arg5, *arg6;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || getParameters(ht, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- convert_to_double(arg3);
- convert_to_double(arg4);
- convert_to_long(arg5);
- convert_to_long(arg6);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_setPageTransition(pdf, Z_LVAL_P(arg2), Z_DVAL_P(arg3), Z_DVAL_P(arg4),
- Z_LVAL_P(arg5), Z_LVAL_P(arg6));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array cpdf_finalize(int pdfdoc)
- Creates PDF doc in memory */
-PHP_FUNCTION(cpdf_finalize)
-{
- pval *arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- cpdf_finalizeAll(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array cpdf_output_buffer(int pdfdoc)
- Returns the internal memory stream as string */
-PHP_FUNCTION(cpdf_output_buffer)
-{
- pval *arg1;
- int id, type, lenght;
- CPDFdoc *pdf;
- char *buffer;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- buffer = cpdf_getBufferForPDF(pdf, &lenght);
-
- php_write(buffer, lenght TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array cpdf_save_to_file(int pdfdoc, string filename)
- Saves the internal memory stream to a file */
-PHP_FUNCTION(cpdf_save_to_file)
-{
- pval *arg1, *arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
- id=Z_LVAL_P(arg1);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
-#if APACHE
- if(strcmp(Z_STRVAL_P(arg2), "-") == 0)
- php_error(E_WARNING, "Writing to stdout as described in the ClibPDF manual is not possible if php is used as an Apache module. Use cpdf_output_buffer() instead.");
-#endif
-
- cpdf_savePDFmemoryStreamToFile(pdf, Z_STRVAL_P(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_import_jpeg(int pdfdoc, string filename, float x, float y, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode])
- Includes JPEG image */
-PHP_FUNCTION(cpdf_import_jpeg)
-{
- pval *argv[11];
- int id, type, argc, mode=0;
- float width, height, xscale, yscale;
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 10) || (argc > 11))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_string(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- convert_to_double(argv[5]);
- width = (float) Z_DVAL_P(argv[5]);
- convert_to_double(argv[6]);
- height = (float) Z_DVAL_P(argv[6]);
- convert_to_double(argv[7]);
- xscale = (float) Z_DVAL_P(argv[7]);
- convert_to_double(argv[8]);
- yscale = (float) Z_DVAL_P(argv[8]);
- convert_to_long(argv[9]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc > 10) {
- convert_to_long(argv[10]);
- mode = Z_LVAL_P(argv[10]);
- }
- if(mode == 1)
- cpdf_rawImportImage(pdf, Z_STRVAL_P(argv[1]),
- JPEG_IMG,
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- &width,
- &height,
- &xscale,
- &yscale,
- Z_LVAL_P(argv[9]));
- else
- cpdf_rawImportImage(pdf, Z_STRVAL_P(argv[1]),
- JPEG_IMG,
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- &width,
- &height,
- &xscale,
- &yscale,
- Z_LVAL_P(argv[9]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_LIBGD13
-/* {{{ proto void cpdf_place_inline_image(int pdfdoc, int gdimage, float x, float y, float angle, fload width, float height, int gsave [, int mode])
- Includes image */
-PHP_FUNCTION(cpdf_place_inline_image)
-{
- pval *argv[11];
- int id, gid, type, argc, mode=0;
- int count, i, j, color;
- CPDFdoc *pdf;
- unsigned char *buffer, *ptr;
- gdImagePtr im;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 8) || (argc > 9))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_long(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- convert_to_double(argv[5]);
- convert_to_double(argv[6]);
- convert_to_long(argv[7]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- gid=Z_LVAL_P(argv[1]);
- im = zend_list_find(gid, &type);
-
- ZEND_GET_RESOURCE_TYPE_ID(CPDF_GLOBAL(le_gd), "gd");
- if(!CPDF_GLOBAL(le_gd))
- {
- php_error(E_ERROR, "Unable to find handle for GD image stream. Please check the GD extension is loaded.");
- }
-
- if (!im || type != CPDF_GLOBAL(le_gd)) {
- php_error(E_WARNING, "cpdf: Unable to find image pointer");
- RETURN_FALSE;
- }
-
- if(argc > 8) {
- convert_to_long(argv[8]);
- mode = Z_LVAL_P(argv[8]);
- }
-
- count = 3 * im->sx * im->sy;
- if(NULL == (buffer = (unsigned char *) emalloc(count)))
- RETURN_FALSE;
-
- ptr = buffer;
- for(i=0; i<im->sy; i++) {
- for(j=0; j<im->sx; j++) {
- color = im->pixels[i][j];
- *ptr++ = im->red[color];
- *ptr++ = im->green[color];
- *ptr++ = im->blue[color];
- }
- }
-
- if(mode == 1)
- cpdf_placeInLineImage(pdf, buffer, count,
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- (float) Z_DVAL_P(argv[5]),
- (float) Z_DVAL_P(argv[6]),
- im->sx,
- im->sy,
- 8, 2, Z_LVAL_P(argv[7]));
- else
- cpdf_rawPlaceInLineImage(pdf, buffer, count,
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- (float) Z_DVAL_P(argv[5]),
- (float) Z_DVAL_P(argv[6]),
- im->sx,
- im->sy,
- 8, 2, Z_LVAL_P(argv[7]));
-
- efree(buffer);
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto void cpdf_add_annotation(int pdfdoc, float xll, float yll, float xur, float xur, string title, string text [, int mode])
- Sets annotation */
-PHP_FUNCTION(cpdf_add_annotation)
-{
- pval *argv[11];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
- CPDFannotAttrib attrib;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 7) || (argc > 8))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- convert_to_string(argv[5]);
- convert_to_string(argv[6]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY;
- attrib.border_array = "[0 0 1 [4 2]]";
- attrib.BS = NULL;
- attrib.r = 0.00;
- attrib.g = 1.00;
- attrib.b = 1.00;
- if(argc > 7) {
- convert_to_long(argv[7]);
- mode = Z_LVAL_P(argv[7]);
- }
- if(mode == 1)
- cpdf_rawSetAnnotation(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- Z_STRVAL_P(argv[5]),
- Z_STRVAL_P(argv[6]),
- &attrib);
- else
- cpdf_setAnnotation(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- Z_STRVAL_P(argv[5]),
- Z_STRVAL_P(argv[6]),
- &attrib);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void cpdf_set_action_url(int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode])
- Sets hyperlink */
-PHP_FUNCTION(cpdf_set_action_url)
-{
- pval *argv[11];
- int id, type, argc, mode=0;
- CPDFdoc *pdf;
- CPDFannotAttrib attrib;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 6) || (argc > 7))
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_double(argv[1]);
- convert_to_double(argv[2]);
- convert_to_double(argv[3]);
- convert_to_double(argv[4]);
- convert_to_string(argv[5]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY;
- attrib.border_array = "[0 0 1 [4 0]]";
- attrib.BS = NULL;
- attrib.r = 0.00;
- attrib.g = 0.00;
- attrib.b = 1.00;
- if(argc > 6) {
- convert_to_long(argv[6]);
- mode = Z_LVAL_P(argv[6]);
- }
- if(mode == 1)
- cpdf_rawSetActionURL(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- Z_STRVAL_P(argv[5]),
- &attrib);
- else
- cpdf_setActionURL(pdf, (float) Z_DVAL_P(argv[1]),
- (float) Z_DVAL_P(argv[2]),
- (float) Z_DVAL_P(argv[3]),
- (float) Z_DVAL_P(argv[4]),
- Z_STRVAL_P(argv[5]),
- &attrib);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int cpdf_add_outline(int pdfdoc, int lastoutline, int sublevel, int open, int pagenr, string title)
- Adds outline */
-PHP_FUNCTION(cpdf_add_outline)
-{
- pval *argv[11];
- int id, oid, type, argc;
- CPDFdoc *pdf;
- CPDFoutlineEntry *lastoutline;
-
- argc = ZEND_NUM_ARGS();
- if(argc != 6)
- WRONG_PARAM_COUNT;
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(argv[0]);
- convert_to_long(argv[1]);
- convert_to_long(argv[2]);
- convert_to_long(argv[3]);
- convert_to_long(argv[4]);
- convert_to_string(argv[5]);
- id=Z_LVAL_P(argv[0]);
- pdf = zend_list_find(id, &type);
- if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) {
- php_error(E_WARNING, "Unable to find identifier %d", id);
- RETURN_FALSE;
- }
-
- oid=Z_LVAL_P(argv[1]);
- lastoutline = zend_list_find(oid, &type);
- if(!lastoutline || type!=CPDF_GLOBAL(le_outline)) {
- lastoutline = NULL;
-/* php_error(E_WARNING, "Unable to find last outline entry %d", id);
- RETURN_FALSE; */
- }
-
- lastoutline = cpdf_addOutlineEntry(pdf, lastoutline,
- Z_LVAL_P(argv[2]),
- Z_LVAL_P(argv[3]),
- Z_LVAL_P(argv[4]),
- Z_STRVAL_P(argv[5]),
- 1, 0.0, 0.0, 0.0, 0.0);
-
- id = zend_list_insert(lastoutline, CPDF_GLOBAL(le_outline));
- RETURN_LONG(id);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/cpdf/cpdf.dsp b/ext/cpdf/cpdf.dsp
deleted file mode 100644
index 671482e134..0000000000
--- a/ext/cpdf/cpdf.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="cpdf" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=cpdf - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "cpdf.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "cpdf.mak" CFG="cpdf - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "cpdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "cpdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "cpdf - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CPDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CPDF_EXPORTS" /D "COMPILE_DL_CPDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CPDFLIB=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib cpdfi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib cpdf.lib user32.lib winspool.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_cpdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "cpdf - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CPDF" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CPDF_EXPORTS" /D "COMPILE_DL_CPDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CPDFLIB=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib cpdfi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 cpdf.lib php4ts_debug.lib user32.lib winspool.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_cpdf.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "cpdf - Win32 Release_TS"
-# Name "cpdf - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\cpdf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_cpdf.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/cpdf/php_cpdf.h b/ext/cpdf/php_cpdf.h
deleted file mode 100644
index 48d26bedac..0000000000
--- a/ext/cpdf/php_cpdf.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_CPDF_H
-#define PHP_CPDF_H
-
-#if HAVE_CPDFLIB
-
-/* The macro T is defined in the IMAP headers and clashes with a function
- declaration here. Get rid of it. */
-
-#ifdef T
-#undef T
-#endif
-
-#include <cpdflib.h>
-
-extern zend_module_entry cpdf_module_entry;
-#define cpdf_module_ptr &cpdf_module_entry
-
-PHP_MINFO_FUNCTION(cpdf);
-PHP_MINIT_FUNCTION(cpdf);
-PHP_RINIT_FUNCTION(cpdf);
-PHP_MSHUTDOWN_FUNCTION(cpdf);
-PHP_FUNCTION(cpdf_global_set_document_limits);
-PHP_FUNCTION(cpdf_set_creator);
-PHP_FUNCTION(cpdf_set_title);
-PHP_FUNCTION(cpdf_set_subject);
-PHP_FUNCTION(cpdf_set_keywords);
-PHP_FUNCTION(cpdf_set_viewer_preferences);
-PHP_FUNCTION(cpdf_open);
-PHP_FUNCTION(cpdf_close);
-PHP_FUNCTION(cpdf_page_init);
-PHP_FUNCTION(cpdf_finalize_page);
-PHP_FUNCTION(cpdf_set_current_page);
-PHP_FUNCTION(cpdf_begin_text);
-PHP_FUNCTION(cpdf_end_text);
-PHP_FUNCTION(cpdf_show);
-PHP_FUNCTION(cpdf_show_xy);
-PHP_FUNCTION(cpdf_continue_text);
-PHP_FUNCTION(cpdf_text);
-PHP_FUNCTION(cpdf_set_font);
-PHP_FUNCTION(cpdf_set_font_directories);
-PHP_FUNCTION(cpdf_set_font_map_file);
-PHP_FUNCTION(cpdf_set_leading);
-PHP_FUNCTION(cpdf_set_text_rendering);
-PHP_FUNCTION(cpdf_set_horiz_scaling);
-PHP_FUNCTION(cpdf_set_text_rise);
-PHP_FUNCTION(cpdf_set_text_matrix);
-PHP_FUNCTION(cpdf_set_text_pos);
-PHP_FUNCTION(cpdf_rotate_text);
-PHP_FUNCTION(cpdf_set_char_spacing);
-PHP_FUNCTION(cpdf_set_word_spacing);
-PHP_FUNCTION(cpdf_continue_text);
-PHP_FUNCTION(cpdf_stringwidth);
-PHP_FUNCTION(cpdf_save);
-PHP_FUNCTION(cpdf_restore);
-PHP_FUNCTION(cpdf_translate);
-PHP_FUNCTION(cpdf_scale);
-PHP_FUNCTION(cpdf_rotate);
-PHP_FUNCTION(cpdf_setflat);
-PHP_FUNCTION(cpdf_setlinejoin);
-PHP_FUNCTION(cpdf_setlinecap);
-PHP_FUNCTION(cpdf_setmiterlimit);
-PHP_FUNCTION(cpdf_setlinewidth);
-PHP_FUNCTION(cpdf_setdash);
-PHP_FUNCTION(cpdf_moveto);
-PHP_FUNCTION(cpdf_rmoveto);
-PHP_FUNCTION(cpdf_curveto);
-PHP_FUNCTION(cpdf_lineto);
-PHP_FUNCTION(cpdf_rlineto);
-PHP_FUNCTION(cpdf_circle);
-PHP_FUNCTION(cpdf_arc);
-PHP_FUNCTION(cpdf_rect);
-PHP_FUNCTION(cpdf_newpath);
-PHP_FUNCTION(cpdf_closepath);
-PHP_FUNCTION(cpdf_closepath_stroke);
-PHP_FUNCTION(cpdf_stroke);
-PHP_FUNCTION(cpdf_fill);
-PHP_FUNCTION(cpdf_fill_stroke);
-PHP_FUNCTION(cpdf_closepath_fill_stroke);
-PHP_FUNCTION(cpdf_endpath);
-PHP_FUNCTION(cpdf_clip);
-PHP_FUNCTION(cpdf_setgray_fill);
-PHP_FUNCTION(cpdf_setgray_stroke);
-PHP_FUNCTION(cpdf_setgray);
-PHP_FUNCTION(cpdf_setrgbcolor_fill);
-PHP_FUNCTION(cpdf_setrgbcolor_stroke);
-PHP_FUNCTION(cpdf_setrgbcolor);
-PHP_FUNCTION(cpdf_add_outline);
-PHP_FUNCTION(cpdf_set_page_animation);
-PHP_FUNCTION(cpdf_finalize);
-PHP_FUNCTION(cpdf_output_buffer);
-PHP_FUNCTION(cpdf_save_to_file);
-PHP_FUNCTION(cpdf_add_annotation);
-PHP_FUNCTION(cpdf_import_jpeg);
-#if HAVE_LIBGD13
-PHP_FUNCTION(cpdf_place_inline_image);
-#endif
-PHP_FUNCTION(cpdf_set_action_url);
-#else
-#define cpdf_module_ptr NULL
-#endif
-#define phpext_cpdf_ptr cpdf_module_ptr
-#endif /* _PHP_PDF_H */
diff --git a/ext/crack/CREDITS b/ext/crack/CREDITS
deleted file mode 100644
index d9421275c0..0000000000
--- a/ext/crack/CREDITS
+++ /dev/null
@@ -1,4 +0,0 @@
-crack
-Alexander Feldman
-Windows Port:
-Joseph Tate
diff --git a/ext/crack/EXPERIMENTAL b/ext/crack/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/crack/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/crack/config.m4 b/ext/crack/config.m4
deleted file mode 100644
index d88ccb14bf..0000000000
--- a/ext/crack/config.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(crack, for CRACKlib support,
-[ --with-crack[=DIR] Include crack support.])
-
-if test "$PHP_CRACK" != "no"; then
-
- for i in /usr/local/lib /usr/lib $PHP_CRACK/lib $PHP_CRACK/cracklib; do
- test -f $i/libcrack.$SHLIB_SUFFIX_NAME -o -f $i/libcrack.a && CRACK_LIBDIR=$i
- done
-
- for i in /usr/local/include /usr/include $PHP_CRACK/include $PHP_CRACK/cracklib; do
- test -f $i/packer.h && CRACK_INCLUDEDIR=$i
- done
-
- if test -z "$CRACK_LIBDIR"; then
- AC_MSG_ERROR(Cannot find the cracklib library file)
- fi
-
- if test -z "$CRACK_INCLUDEDIR"; then
- AC_MSG_ERROR(Cannot find a cracklib header file)
- fi
-
- PHP_ADD_INCLUDE($CRACK_INCLUDEDIR)
- PHP_ADD_LIBRARY_WITH_PATH(crack, $CRACK_LIBDIR, CRACK_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(crack, crack.c, $ext_shared)
- PHP_SUBST(CRACK_SHARED_LIBADD)
- AC_DEFINE(HAVE_CRACK, 1, [ ])
-fi
-
diff --git a/ext/crack/crack.c b/ext/crack/crack.c
deleted file mode 100644
index da7bc547fb..0000000000
--- a/ext/crack/crack.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Alexander Feldman |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_crack.h"
-
-#if HAVE_CRACK
-
-#include <packer.h>
-
-ZEND_DECLARE_MODULE_GLOBALS(crack)
-
-/* True global resources - no need for thread safety here */
-static int le_crack;
-
-function_entry crack_functions[] = {
- ZEND_FE(crack_opendict, NULL)
- ZEND_FE(crack_closedict, NULL)
- ZEND_FE(crack_check, NULL)
- ZEND_FE(crack_getlastmessage, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry crack_module_entry = {
- STANDARD_MODULE_HEADER,
- "crack",
- crack_functions,
- ZEND_MODULE_STARTUP_N(crack),
- ZEND_MODULE_SHUTDOWN_N(crack),
- ZEND_MODULE_ACTIVATE_N(crack),
- ZEND_MODULE_DEACTIVATE_N(crack),
- ZEND_MODULE_INFO_N(crack),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_CRACK
-ZEND_GET_MODULE(crack)
-#endif
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("crack.default_dictionary", NULL, PHP_INI_SYSTEM, OnUpdateString, default_dictionary, zend_crack_globals, crack_globals)
-PHP_INI_END()
-
-long _crack_open_dict(char *dictpath TSRMLS_DC)
-{
- PWDICT *pwdict;
- long resource;
-
- if (CRACKG(current_id) != -1) {
- zend_error(E_WARNING, "Can not use more than one open dictionary with this implementation of libcrack");
- return -1;
- }
- if (NULL == (pwdict = PWOpen(dictpath, "r"))) {
- zend_error(E_WARNING, "Unable to open a crack dictionary");
- return -1;
- }
-
- resource = zend_list_insert(pwdict, le_crack);
-
-/* if (CRACKG(current_id) != -1) {
- zend_list_delete(CRACKG(current_id));
- }
-*/
- CRACKG(current_id) = resource;
-
- return resource;
-}
-
-void _close_crack_dict(PWDICT *pwdict)
-{
- PWClose(pwdict);
-}
-
-ZEND_MODULE_STARTUP_D(crack)
-{
-#ifdef ZTS
- zend_crack_globals *crack_globals;
-
- ts_allocate_id(&crack_globals_id, sizeof(zend_crack_globals), NULL, NULL);
- crack_globals = ts_resource(crack_globals_id);
-#endif
-
- REGISTER_INI_ENTRIES();
-
- le_crack = register_list_destructors(_close_crack_dict, NULL);
-
- return SUCCESS;
-}
-
-ZEND_MODULE_SHUTDOWN_D(crack)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-ZEND_MODULE_ACTIVATE_D(crack)
-{
- CRACKG(last_message) = NULL;
- CRACKG(current_id) = -1;
-
- return SUCCESS;
-}
-
-ZEND_MODULE_DEACTIVATE_D(crack)
-{
- if (NULL != CRACKG(last_message)) {
- efree(CRACKG(last_message));
- }
- return SUCCESS;
-}
-
-ZEND_MODULE_INFO_D(crack)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "crack support", "enabled");
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-/* {{{ proto string crack_opendict(string dictionary)
- Opens a new cracklib dictionary */
-ZEND_FUNCTION(crack_opendict)
-{
- zval **dictpath;
- long resource;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dictpath) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(dictpath);
-
- if (-1 == (resource = _crack_open_dict(Z_STRVAL_PP(dictpath) TSRMLS_CC))) {
- RETURN_FALSE;
- }
-
- RETURN_RESOURCE(resource);
-}
-/* }}} */
-
-/* {{{ proto string crack_closedict([int link_identifier])
- Closes an open cracklib dictionary */
-ZEND_FUNCTION(crack_closedict)
-{
- PWDICT *pwdict;
- zval **dictionary;
- long id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = CRACKG(current_id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &dictionary) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = Z_LVAL_PP(dictionary);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pwdict, PWDICT *, dictionary, id, "cracklib dictionary", le_crack);
- if (CRACKG(current_id) == id) {
- CRACKG(current_id) = -1;
- }
- zend_list_delete(id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string crack_check([int dictionary,] string password)
- Performs an obscure check with the given password */
-ZEND_FUNCTION(crack_check)
-{
- zval **dictionary = NULL, **password;
- char pwtrunced[STRINGSIZE];
- char *message;
- PWDICT *pwdict;
- long id;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &password) == FAILURE) {
- RETURN_FALSE;
- }
- if (NULL != CRACKG(default_dictionary) && CRACKG(current_id) == -1) {
- _crack_open_dict(CRACKG(default_dictionary) TSRMLS_CC);
- }
- id = CRACKG(current_id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &dictionary, &password) == FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pwdict, PWDICT *, dictionary, id, "cracklib dictionary", le_crack);
- convert_to_string_ex(password);
-
- /* Prevent buffer overflow attacks. */
- strlcpy(pwtrunced, Z_STRVAL_PP(password), sizeof(pwtrunced));
-
- message = (char *)FascistLook(pwdict, pwtrunced);
-
- if (NULL != CRACKG(last_message)) {
- efree(CRACKG(last_message));
- }
-
- if (NULL == message) {
- CRACKG(last_message) = estrdup("strong password");
- RETURN_TRUE;
- }
-
- CRACKG(last_message) = estrdup(message);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string crack_getlastmessage(void)
- Returns the message from the last obscure check */
-ZEND_FUNCTION(crack_getlastmessage)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (NULL == CRACKG(last_message)) {
- zend_error(E_WARNING, "No obscure checks in this session");
- RETURN_FALSE;
- }
-
- RETURN_STRING(CRACKG(last_message), 1);
-}
-/* }}} */
-
-#endif /* HAVE_CRACK */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/crack/crack.dsp b/ext/crack/crack.dsp
deleted file mode 100644
index bf0e0d9e2d..0000000000
--- a/ext/crack/crack.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="crack" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=crack - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "crack.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "crack.mak" CFG="crack - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "crack - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "crack - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "crack - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CRACK" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "CRACK_EXPORTS" /D "COMPILE_DL_CRACK" /D ZTS=1 /D HAVE_CRACK=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 cracklib_Win32.lib wsock32.lib php4ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_crack.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "crack - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CRACK" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CRACK_EXPORTS" /D "COMPILE_DL_CRACK" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CRACK=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 cracklib_Win32.lib php4ts_debug.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_crack.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "crack - Win32 Release_TS"
-# Name "crack - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\crack.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_crack.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/crack/php_crack.h b/ext/crack/php_crack.h
deleted file mode 100644
index 22f0510cce..0000000000
--- a/ext/crack/php_crack.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Alexander Feldman |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef ZEND_CRACK_H
-#define ZEND_CRACK_H
-
-#if HAVE_CRACK
-
-extern zend_module_entry crack_module_entry;
-#define phpext_crack_ptr &crack_module_entry
-
-#ifdef ZEND_WIN32
-#define ZEND_CRACK_API __declspec(dllexport)
-#else
-#define ZEND_CRACK_API
-#endif
-
-ZEND_MINIT_FUNCTION(crack);
-ZEND_MSHUTDOWN_FUNCTION(crack);
-ZEND_RINIT_FUNCTION(crack);
-ZEND_RSHUTDOWN_FUNCTION(crack);
-PHP_MINFO_FUNCTION(crack);
-
-ZEND_FUNCTION(crack_opendict);
-ZEND_FUNCTION(crack_closedict);
-ZEND_FUNCTION(crack_check);
-ZEND_FUNCTION(crack_getlastmessage);
-
-ZEND_BEGIN_MODULE_GLOBALS(crack)
- char *default_dictionary;
- char *last_message;
- long current_id;
-ZEND_END_MODULE_GLOBALS(crack)
-
-#ifdef ZTS
-#define CRACKG(v) TSRMG(crack_globals_id, zend_crack_globals *, v)
-#else
-#define CRACKG(v) (crack_globals.v)
-#endif
-
-#else
-
-#define phpext_crack_ptr NULL
-
-#endif
-
-#endif /* ZEND_CRACK_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/crack/tests/001.phpt b/ext/crack/tests/001.phpt
deleted file mode 100644
index dc18ef5559..0000000000
--- a/ext/crack/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for crack presence
---SKIPIF--
-<?php if (!extension_loaded("crack")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "crack extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-crack extension is available \ No newline at end of file
diff --git a/ext/ctype/CREDITS b/ext/ctype/CREDITS
deleted file mode 100644
index 22de902709..0000000000
--- a/ext/ctype/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ctype
-Hartmut Holzgraefe
diff --git a/ext/ctype/README b/ext/ctype/README
deleted file mode 100644
index 1e78a3d933..0000000000
--- a/ext/ctype/README
+++ /dev/null
@@ -1,5 +0,0 @@
-this is an experimental extension that provides the
-ctype family of function available in C
-i'm not sure about whether they should go into ext/standard
-or stay as an extension of their own and about using
-a ctype_ prefix or sticking with the C names ...
diff --git a/ext/ctype/config.m4 b/ext/ctype/config.m4
deleted file mode 100644
index 7d575a3adc..0000000000
--- a/ext/ctype/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(ctype, whether to enable ctype functions,
-[ --disable-ctype Disable ctype functions], yes)
-
-if test "$PHP_CTYPE" != "no"; then
- AC_DEFINE(HAVE_CTYPE, 1, [ ])
- PHP_NEW_EXTENSION(ctype, ctype.c, $ext_shared)
-fi
diff --git a/ext/ctype/ctype.c b/ext/ctype/ctype.c
deleted file mode 100644
index 88e3f9231d..0000000000
--- a/ext/ctype/ctype.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ctype.h"
-#include "SAPI.h"
-#include "ext/standard/info.h"
-
-#include <ctype.h>
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_CTYPE
-
-/* If you declare any globals in php_ctype.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(ctype)
-*/
-
-/* True global resources - no need for thread safety here */
-/* static int le_ctype; */
-
-/* {{{ ctype_functions[]
- * Every user visible function must have an entry in ctype_functions[].
- */
-function_entry ctype_functions[] = {
- PHP_FE(ctype_alnum, NULL)
- PHP_FE(ctype_alpha, NULL)
- PHP_FE(ctype_cntrl, NULL)
- PHP_FE(ctype_digit, NULL)
- PHP_FE(ctype_lower, NULL)
- PHP_FE(ctype_graph, NULL)
- PHP_FE(ctype_print, NULL)
- PHP_FE(ctype_punct, NULL)
- PHP_FE(ctype_space, NULL)
- PHP_FE(ctype_upper, NULL)
- PHP_FE(ctype_xdigit, NULL)
- {NULL, NULL, NULL} /* Must be the last line in ctype_functions[] */
-};
-/* }}} */
-
-/* {{{ ctype_mpodule_entry
- */
-zend_module_entry ctype_module_entry = {
- STANDARD_MODULE_HEADER,
- "ctype",
- ctype_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(ctype),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_CTYPE
-ZEND_GET_MODULE(ctype)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(ctype)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "ctype functions", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ ctype
- */
-#define CTYPE(iswhat) \
- zval *c; \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \
- return; \
- switch (Z_TYPE_P(c)) { \
- case IS_LONG: \
- RETURN_BOOL(iswhat(Z_LVAL_P(c))); \
- case IS_STRING: \
- { \
- char *p; \
- int n, len; \
- p=Z_STRVAL_P(c); \
- len = Z_STRLEN_P(c); \
- for(n=0;n<len;n++) { \
- if(!iswhat(*p++)) RETURN_FALSE; \
- } \
- RETURN_TRUE; \
- } \
- default: \
- break; \
- } \
- RETURN_FALSE;
-
-/* }}} */
-
-/* {{{ proto bool ctype_alnum(mixed c)
- Checks for alphanumeric character(s) */
-PHP_FUNCTION(ctype_alnum)
-{
- CTYPE(isalnum);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_alpha(mixed c)
- Checks for alphabetic character(s) */
-PHP_FUNCTION(ctype_alpha)
-{
- CTYPE(isalpha);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_cntrl(mixed c)
- Checks for control character(s) */
-PHP_FUNCTION(ctype_cntrl)
-{
- CTYPE(iscntrl);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_digit(mixed c)
- Checks for numeric character(s) */
-PHP_FUNCTION(ctype_digit)
-{
- CTYPE(isdigit);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_lower(mixed c)
- Checks for lowercase character(s) */
-PHP_FUNCTION(ctype_lower)
-{
- CTYPE(islower);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_graph(mixed c)
- Checks for any printable character(s) except space */
-PHP_FUNCTION(ctype_graph)
-{
- CTYPE(isgraph);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_print(mixed c)
- Checks for printable character(s) */
-PHP_FUNCTION(ctype_print)
-{
- CTYPE(isprint);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_punct(mixed c)
- Checks for any printable character which is not whitespace or an alphanumeric character */
-PHP_FUNCTION(ctype_punct)
-{
- CTYPE(ispunct);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_space(mixed c)
- Checks for whitespace character(s)*/
-PHP_FUNCTION(ctype_space)
-{
- CTYPE(isspace);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_upper(mixed c)
- Checks for uppercase character(s) */
-PHP_FUNCTION(ctype_upper)
-{
- CTYPE(isupper);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_xdigit(mixed c)
- Checks for character(s) representing a hexadecimal digit */
-PHP_FUNCTION(ctype_xdigit)
-{
- CTYPE(isxdigit);
-}
-/* }}} */
-
-#endif /* HAVE_CTYPE */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ctype/ctype.dsp b/ext/ctype/ctype.dsp
deleted file mode 100644
index 8cb2837fed..0000000000
--- a/ext/ctype/ctype.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ctype" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ctype - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ctype.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ctype.mak" CFG="ctype - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ctype - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ctype - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ctype - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D HAVE_CTYPE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ctype.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ctype - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CTYPE=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ctype.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ctype - Win32 Release_TS"
-# Name "ctype - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ctype.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_ctype.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/ctype/ctype.xml b/ext/ctype/ctype.xml
deleted file mode 100644
index 5837b9b5d0..0000000000
--- a/ext/ctype/ctype.xml
+++ /dev/null
@@ -1,245 +0,0 @@
- <reference id="ref.ctype">
- <title>Character type functions</title>
- <titleabbrev>ctype</titleabbrev>
-
- <partintro>
- <para>
- These functions check whether a character or string
- falls into a certain character class according to the i
- current locale.
- </para>
- <para>
- When called with an integer argument theese functions
- behave exactly like their C counterparts.
- </para>
- <para>
- When called with a string argument they will check
- every character in the string and will only return
- true if every character in the string matches the
- requested criteria.
- </para>
- <para>
- Passing anything else but a string or integer will
- return false immediately.
- </para>
- </partintro>
-
-
- <refentry id="function.isalnum">
- <refnamediv>
- <refname>isalnum</refname>
- <refpurpose>Check for alphanumeric character(s)</refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isalnum</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- See also <function>setlocale</function>.
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isalpha">
- <refnamediv>
- <refname>isalpha</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isalpha</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.iscntrl">
- <refnamediv>
- <refname>iscntrl</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>iscntrl</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isdigit">
- <refnamediv>
- <refname>isdigit</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isdigit</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.islower">
- <refnamediv>
- <refname>islower</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>islower</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isgraph">
- <refnamediv>
- <refname>isgraph</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isgraph</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isprint">
- <refnamediv>
- <refname>isprint</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isprint</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.ispunct">
- <refnamediv>
- <refname>ispunct</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>ispunct</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isspace">
- <refnamediv>
- <refname>isspace</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isspace</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isupper">
- <refnamediv>
- <refname>isupper</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isupper</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isxdigit">
- <refnamediv>
- <refname>isxdigit</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isxdigit</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- </reference>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"../../manual.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
-
diff --git a/ext/ctype/php_ctype.h b/ext/ctype/php_ctype.h
deleted file mode 100644
index 4754b1045e..0000000000
--- a/ext/ctype/php_ctype.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_CTYPE_H
-#define PHP_CTYPE_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_CTYPE
-
-extern zend_module_entry ctype_module_entry;
-#define phpext_ctype_ptr &ctype_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_CTYPE_API __declspec(dllexport)
-#else
-#define PHP_CTYPE_API
-#endif
-
-PHP_MINIT_FUNCTION(ctype);
-PHP_MSHUTDOWN_FUNCTION(ctype);
-PHP_RINIT_FUNCTION(ctype);
-PHP_RSHUTDOWN_FUNCTION(ctype);
-PHP_MINFO_FUNCTION(ctype);
-
-PHP_FUNCTION(ctype_alnum);
-PHP_FUNCTION(ctype_alpha);
-PHP_FUNCTION(ctype_cntrl);
-PHP_FUNCTION(ctype_digit);
-PHP_FUNCTION(ctype_lower);
-PHP_FUNCTION(ctype_graph);
-PHP_FUNCTION(ctype_print);
-PHP_FUNCTION(ctype_punct);
-PHP_FUNCTION(ctype_space);
-PHP_FUNCTION(ctype_upper);
-PHP_FUNCTION(ctype_xdigit);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(ctype)
- int global_variable;
-ZEND_END_MODULE_GLOBALS(ctype)
-*/
-
-#ifdef ZTS
-#define CTYPEG(v) TSRMG(ctype_globals_id, php_ctype_globals *, v)
-#else
-#define CTYPEG(v) (ctype_globals.v)
-#endif
-
-#else
-
-#define phpext_ctype_ptr NULL
-
-#endif
-
-#endif /* PHP_CTYPE_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/ctype/tests/001.phpt b/ext/ctype/tests/001.phpt
deleted file mode 100644
index da13514993..0000000000
--- a/ext/ctype/tests/001.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-ctype on integers
---SKIPIF--
-<?php if (!extension_loaded("ctype")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- setlocale(LC_ALL,"C");
-
- function ctype_test_001($function) {
- $n=0;
- for($a=0;$a<256;$a++) {
- if($function($a)) $n++;
- }
- echo "$function $n\n";
- }
-ctype_test_001("ctype_lower");
-ctype_test_001("ctype_upper");
-ctype_test_001("ctype_alpha");
-ctype_test_001("ctype_digit");
-ctype_test_001("ctype_alnum");
-ctype_test_001("ctype_cntrl");
-ctype_test_001("ctype_graph");
-ctype_test_001("ctype_print");
-ctype_test_001("ctype_punct");
-ctype_test_001("ctype_space");
-ctype_test_001("ctype_xdigit");
-?>
---EXPECT--
-ctype_lower 26
-ctype_upper 26
-ctype_alpha 52
-ctype_digit 10
-ctype_alnum 62
-ctype_cntrl 33
-ctype_graph 94
-ctype_print 95
-ctype_punct 32
-ctype_space 6
-ctype_xdigit 22
diff --git a/ext/ctype/tests/002.phpt b/ext/ctype/tests/002.phpt
deleted file mode 100644
index f002b3b933..0000000000
--- a/ext/ctype/tests/002.phpt
+++ /dev/null
@@ -1,50 +0,0 @@
---TEST--
-ctype on strings
---SKIPIF--
-<?php if (!extension_loaded("ctype")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-
-setlocale(LC_ALL,"C");
-print "LOCALE is '" . setlocale(LC_ALL,0) . "'\n";
-
-function ctype_test_002($function) {
- $n1 = $n2 = $n3 = 0;
- // test portable POSIX characters 0..127
- for ($a=0;$a<128;$a++) {
- $c = chr($a);
- if($function($a)) $n1++;
- if($function("$c$c$c")) $n2++;
- if($function("1-$c$c$c-x")) $n3++;
- }
- print "$function $n1 $n2 $n3\n";
-}
-
-ctype_test_002("ctype_lower");
-ctype_test_002("ctype_upper");
-ctype_test_002("ctype_alpha");
-ctype_test_002("ctype_digit");
-ctype_test_002("ctype_alnum");
-ctype_test_002("ctype_cntrl");
-ctype_test_002("ctype_graph");
-ctype_test_002("ctype_print");
-ctype_test_002("ctype_punct");
-ctype_test_002("ctype_space");
-ctype_test_002("ctype_xdigit");
-
-?>
---EXPECT--
-LOCALE is 'C'
-ctype_lower 26 26 0
-ctype_upper 26 26 0
-ctype_alpha 52 52 0
-ctype_digit 10 10 0
-ctype_alnum 62 62 0
-ctype_cntrl 33 33 0
-ctype_graph 94 94 94
-ctype_print 95 95 95
-ctype_punct 32 32 0
-ctype_space 6 6 0
-ctype_xdigit 22 22 0
diff --git a/ext/curl/CREDITS b/ext/curl/CREDITS
deleted file mode 100644
index 1e9f272a39..0000000000
--- a/ext/curl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-CURL
-Sterling Hughes
diff --git a/ext/curl/config.m4 b/ext/curl/config.m4
deleted file mode 100644
index 151a40a21f..0000000000
--- a/ext/curl/config.m4
+++ /dev/null
@@ -1,62 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(curl, for CURL support,
-[ --with-curl[=DIR] Include CURL support])
-
-if test "$PHP_CURL" != "no"; then
- if test -r $PHP_CURL/include/curl/easy.h; then
- CURL_DIR=$PHP_CURL
- else
- AC_MSG_CHECKING(for CURL in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/curl/easy.h; then
- CURL_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$CURL_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libcurl distribution -
- easy.h should be in <curl-dir>/include/curl/)
- fi
-
- CURL_CONFIG="curl-config"
- AC_MSG_CHECKING(for cURL 7.9 or greater)
-
- if ${CURL_DIR}/bin/curl-config --libs print > /dev/null 2>&1; then
- CURL_CONFIG=${CURL_DIR}/bin/curl-config
- else
- if ${CURL_DIR}/curl-config --libs print > /dev/null 2>&1; then
- CURL_CONFIG=${CURL_DIR}/curl-config
- fi
- fi
-
- curl_version_full=`$CURL_CONFIG --version`
- curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
- if test "$curl_version" -ge 7009000; then
- AC_MSG_RESULT($curl_version_full)
- CURL_LIBS=`$CURL_CONFIG --libs`
- else
- AC_MSG_ERROR(cURL version 7.9 or later is required to compile php with cURL support)
- fi
-
- PHP_ADD_INCLUDE($CURL_DIR/include)
- PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/lib, CURL_SHARED_LIBADD)
-
- PHP_CHECK_LIBRARY(curl,curl_easy_perform,
- [
- AC_DEFINE(HAVE_CURL,1,[ ])
- ],[
- AC_MSG_ERROR(There is something wrong. Please check config.log for more information.)
- ],[
- $CURL_LIBS -L$CURL_DIR/lib
- ])
-
- PHP_NEW_EXTENSION(curl, curl.c, $ext_shared)
- PHP_SUBST(CURL_SHARED_LIBADD)
-fi
diff --git a/ext/curl/curl.c b/ext/curl/curl.c
deleted file mode 100644
index 17fc018f2e..0000000000
--- a/ext/curl/curl.c
+++ /dev/null
@@ -1,1090 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_CURL
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#include <sys/types.h>
-#endif
-
-#include <curl/curl.h>
-#include <curl/easy.h>
-
-#define SMART_STR_PREALLOC 4096
-
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "php_curl.h"
-
-static int le_curl;
-#define le_curl_name "cURL handle"
-
-static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-#define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err;
-
-/* {{{ curl_functions[]
- */
-function_entry curl_functions[] = {
- PHP_FE(curl_init, NULL)
- PHP_FE(curl_version, NULL)
- PHP_FE(curl_setopt, NULL)
- PHP_FE(curl_exec, NULL)
- PHP_FE(curl_getinfo, NULL)
- PHP_FE(curl_error, NULL)
- PHP_FE(curl_errno, NULL)
- PHP_FE(curl_close, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ curl_module_entry
- */
-zend_module_entry curl_module_entry = {
- STANDARD_MODULE_HEADER,
- "curl",
- curl_functions,
- PHP_MINIT(curl),
- PHP_MSHUTDOWN(curl),
- NULL,
- NULL,
- PHP_MINFO(curl),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_CURL
-ZEND_GET_MODULE (curl)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(curl)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "CURL support", "enabled");
- php_info_print_table_row(2, "CURL Information", curl_version());
- php_info_print_table_end();
-}
-/* }}} */
-
-#define REGISTER_CURL_CONSTANT(__c) REGISTER_LONG_CONSTANT(#__c, __c, CONST_CS | CONST_PERSISTENT)
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(curl)
-{
- le_curl = zend_register_list_destructors_ex(_php_curl_close, NULL, "curl", module_number);
-
- /* Constants for curl_setopt() */
- REGISTER_CURL_CONSTANT(CURLOPT_PORT);
- REGISTER_CURL_CONSTANT(CURLOPT_FILE);
- REGISTER_CURL_CONSTANT(CURLOPT_INFILE);
- REGISTER_CURL_CONSTANT(CURLOPT_INFILESIZE);
- REGISTER_CURL_CONSTANT(CURLOPT_URL);
- REGISTER_CURL_CONSTANT(CURLOPT_PROXY);
- REGISTER_CURL_CONSTANT(CURLOPT_VERBOSE);
- REGISTER_CURL_CONSTANT(CURLOPT_HEADER);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTPHEADER);
- REGISTER_CURL_CONSTANT(CURLOPT_NOPROGRESS);
- REGISTER_CURL_CONSTANT(CURLOPT_NOBODY);
- REGISTER_CURL_CONSTANT(CURLOPT_FAILONERROR);
- REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLOPT_POST);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPLISTONLY);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPAPPEND);
- REGISTER_CURL_CONSTANT(CURLOPT_NETRC);
- REGISTER_CURL_CONSTANT(CURLOPT_FOLLOWLOCATION);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII);
- REGISTER_CURL_CONSTANT(CURLOPT_PUT);
- REGISTER_CURL_CONSTANT(CURLOPT_MUTE);
- REGISTER_CURL_CONSTANT(CURLOPT_USERPWD);
- REGISTER_CURL_CONSTANT(CURLOPT_PROXYUSERPWD);
- REGISTER_CURL_CONSTANT(CURLOPT_RANGE);
- REGISTER_CURL_CONSTANT(CURLOPT_TIMEOUT);
- REGISTER_CURL_CONSTANT(CURLOPT_POSTFIELDS);
- REGISTER_CURL_CONSTANT(CURLOPT_REFERER);
- REGISTER_CURL_CONSTANT(CURLOPT_USERAGENT);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPPORT);
- REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_LIMIT);
- REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_TIME);
- REGISTER_CURL_CONSTANT(CURLOPT_RESUME_FROM);
- REGISTER_CURL_CONSTANT(CURLOPT_COOKIE);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLCERT);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTPASSWD);
- REGISTER_CURL_CONSTANT(CURLOPT_WRITEHEADER);
- REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYHOST);
- REGISTER_CURL_CONSTANT(CURLOPT_COOKIEFILE);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLVERSION);
- REGISTER_CURL_CONSTANT(CURLOPT_TIMECONDITION);
- REGISTER_CURL_CONSTANT(CURLOPT_TIMEVALUE);
- REGISTER_CURL_CONSTANT(CURLOPT_CUSTOMREQUEST);
- REGISTER_CURL_CONSTANT(CURLOPT_STDERR);
- REGISTER_CURL_CONSTANT(CURLOPT_TRANSFERTEXT);
- REGISTER_CURL_CONSTANT(CURLOPT_RETURNTRANSFER);
- REGISTER_CURL_CONSTANT(CURLOPT_QUOTE);
- REGISTER_CURL_CONSTANT(CURLOPT_POSTQUOTE);
- REGISTER_CURL_CONSTANT(CURLOPT_INTERFACE);
- REGISTER_CURL_CONSTANT(CURLOPT_KRB4LEVEL);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTPPROXYTUNNEL);
- REGISTER_CURL_CONSTANT(CURLOPT_FILETIME);
- REGISTER_CURL_CONSTANT(CURLOPT_WRITEFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_READFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_HEADERFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_MAXREDIRS);
- REGISTER_CURL_CONSTANT(CURLOPT_MAXCONNECTS);
- REGISTER_CURL_CONSTANT(CURLOPT_CLOSEPOLICY);
- REGISTER_CURL_CONSTANT(CURLOPT_FRESH_CONNECT);
- REGISTER_CURL_CONSTANT(CURLOPT_FORBID_REUSE);
- REGISTER_CURL_CONSTANT(CURLOPT_RANDOM_FILE);
- REGISTER_CURL_CONSTANT(CURLOPT_EGDSOCKET);
- REGISTER_CURL_CONSTANT(CURLOPT_CONNECTTIMEOUT);
- REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYPEER);
- REGISTER_CURL_CONSTANT(CURLOPT_CAINFO);
- REGISTER_CURL_CONSTANT(CURLOPT_COOKIEJAR);
- REGISTER_CURL_CONSTANT(CURLOPT_SSL_CIPHER_LIST);
- REGISTER_CURL_CONSTANT(CURLOPT_BINARYTRANSFER);
-
- /* Constants effecting the way CURLOPT_CLOSEPOLICY works */
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_TRAFFIC);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_SLOWEST);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_CALLBACK);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_OLDEST);
-
- /* Info constants */
- REGISTER_CURL_CONSTANT(CURLINFO_EFFECTIVE_URL);
- REGISTER_CURL_CONSTANT(CURLINFO_HTTP_CODE);
- REGISTER_CURL_CONSTANT(CURLINFO_HEADER_SIZE);
- REGISTER_CURL_CONSTANT(CURLINFO_REQUEST_SIZE);
- REGISTER_CURL_CONSTANT(CURLINFO_TOTAL_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_NAMELOOKUP_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_CONNECT_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_PRETRANSFER_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_SIZE_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_SIZE_DOWNLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_SPEED_DOWNLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_SPEED_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_FILETIME);
- REGISTER_CURL_CONSTANT(CURLINFO_SSL_VERIFYRESULT);
- REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_DOWNLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_UPLOAD);
-
- /* Error Constants */
- REGISTER_CURL_CONSTANT(CURLE_OK);
- REGISTER_CURL_CONSTANT(CURLE_UNSUPPORTED_PROTOCOL);
- REGISTER_CURL_CONSTANT(CURLE_FAILED_INIT);
- REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT);
- REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT_USER);
- REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_PROXY);
- REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_HOST);
- REGISTER_CURL_CONSTANT(CURLE_COULDNT_CONNECT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_SERVER_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_ACCESS_DENIED);
- REGISTER_CURL_CONSTANT(CURLE_FTP_USER_PASSWORD_INCORRECT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASS_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_USER_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASV_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_227_FORMAT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_GET_HOST);
- REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_RECONNECT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_BINARY);
- REGISTER_CURL_CONSTANT(CURLE_PARTIAL_FILE);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_RETR_FILE);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_FTP_QUOTE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_NOT_FOUND);
- REGISTER_CURL_CONSTANT(CURLE_WRITE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_MALFORMAT_USER);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_STOR_FILE);
- REGISTER_CURL_CONSTANT(CURLE_READ_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_OUT_OF_MEMORY);
- REGISTER_CURL_CONSTANT(CURLE_OPERATION_TIMEOUTED);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_ASCII);
- REGISTER_CURL_CONSTANT(CURLE_FTP_PORT_FAILED);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_USE_REST);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_GET_SIZE);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_RANGE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_POST_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_SSL_CONNECT_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_FTP_BAD_DOWNLOAD_RESUME);
- REGISTER_CURL_CONSTANT(CURLE_FILE_COULDNT_READ_FILE);
- REGISTER_CURL_CONSTANT(CURLE_LDAP_CANNOT_BIND);
- REGISTER_CURL_CONSTANT(CURLE_LDAP_SEARCH_FAILED);
- REGISTER_CURL_CONSTANT(CURLE_LIBRARY_NOT_FOUND);
- REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND);
- REGISTER_CURL_CONSTANT(CURLE_ABORTED_BY_CALLBACK);
- REGISTER_CURL_CONSTANT(CURLE_BAD_FUNCTION_ARGUMENT);
- REGISTER_CURL_CONSTANT(CURLE_BAD_CALLING_ORDER);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_PORT_FAILED);
- REGISTER_CURL_CONSTANT(CURLE_BAD_PASSWORD_ENTERED);
- REGISTER_CURL_CONSTANT(CURLE_TOO_MANY_REDIRECTS);
- REGISTER_CURL_CONSTANT(CURLE_UNKNOWN_TELNET_OPTION);
- REGISTER_CURL_CONSTANT(CURLE_TELNET_OPTION_SYNTAX);
- REGISTER_CURL_CONSTANT(CURLE_OBSOLETE);
- REGISTER_CURL_CONSTANT(CURLE_SSL_PEER_CERTIFICATE);
-
- if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(curl)
-{
- curl_global_cleanup();
-
- return SUCCESS;
-}
-/* }}} */
-
-#define PHP_CURL_STDOUT 0
-#define PHP_CURL_FILE 1
-#define PHP_CURL_USER 2
-#define PHP_CURL_DIRECT 3
-#define PHP_CURL_RETURN 4
-#define PHP_CURL_ASCII 5
-#define PHP_CURL_BINARY 6
-#define PHP_CURL_IGNORE 7
-
-/* {{{ curl_write
- */
-static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
-{
- php_curl *ch = (php_curl *) ctx;
- php_curl_write *t = ch->handlers->write;
- size_t length = size * nmemb;
- TSRMLS_FETCH();
-
- switch (t->method) {
- case PHP_CURL_STDOUT:
- PUTS(data);
- break;
- case PHP_CURL_FILE:
- return fwrite(data, size, nmemb, t->fp);
- case PHP_CURL_RETURN:
- smart_str_appendl(&t->buf, data, (int) length);
- break;
- case PHP_CURL_USER: {
- zval *argv[2];
- zval *retval;
- int error;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(retval);
-
- ZVAL_RESOURCE(argv[0], ch->id);
- zend_list_addref(ch->id);
- ZVAL_STRINGL(argv[1], data, length, 1);
-
- error = call_user_function(EG(function_table),
- NULL,
- t->func,
- retval, 2, argv TSRMLS_CC);
- if (error == FAILURE) {
- php_error(E_WARNING, "Couldn't call the CURLOPT_WRITEFUNCTION");
- length = -1;
- }
- else {
- length = Z_LVAL_P(retval);
- }
-
- zval_ptr_dtor(&argv[0]);
- zval_ptr_dtor(&argv[1]);
- zval_ptr_dtor(&retval);
-
- break;
- }
- }
-
- return length;
-}
-/* }}} */
-
-/* {{{ curl_read
- */
-static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx)
-{
- php_curl *ch = (php_curl *) ctx;
- php_curl_read *t = ch->handlers->read;
- int length = -1;
-
- switch (t->method) {
- case PHP_CURL_DIRECT:
- length = fread(data, size, nmemb, t->fp);
- break;
- case PHP_CURL_USER: {
- zval *argv[3];
- zval *retval;
- int length;
- int error;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
- MAKE_STD_ZVAL(retval);
-
- ZVAL_RESOURCE(argv[0], ch->id);
- zend_list_addref(ch->id);
- ZVAL_RESOURCE(argv[1], t->fd);
- zend_list_addref(t->fd);
- ZVAL_LONG(argv[2], (int) size * nmemb);
-
- error = call_user_function(EG(function_table),
- NULL,
- t->func,
- retval, 3, argv TSRMLS_CC);
- if (error == FAILURE) {
- php_error(E_WARNING, "Cannot call the CURLOPT_READFUNCTION");
- length = -1;
- }
- else {
- memcpy(data, Z_STRVAL_P(retval), size * nmemb);
- length = Z_STRLEN_P(retval);
- }
-
- zval_ptr_dtor(&argv[0]);
- zval_ptr_dtor(&argv[1]);
- zval_ptr_dtor(&argv[2]);
- zval_ptr_dtor(&retval);
- break;
- }
- }
-
- return length;
-}
-/* }}} */
-
-/* {{{ curl_write_header
- */
-static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx)
-{
- php_curl *ch = (php_curl *) ctx;
- php_curl_write *t = ch->handlers->write_header;
- size_t length = size * nmemb;
- TSRMLS_FETCH();
-
- switch (t->method) {
- case PHP_CURL_STDOUT:
- /* Handle special case write when we're returning the entire transfer
- */
- if (ch->handlers->write->method == PHP_CURL_RETURN)
- smart_str_appendl(&ch->handlers->write->buf, data, (int) length);
- else
- PUTS(data);
- break;
- case PHP_CURL_FILE:
- return fwrite(data, size, nmemb, t->fp);
- case PHP_CURL_USER: {
- zval *argv[2];
- zval *retval;
- int error;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(retval);
-
- ZVAL_RESOURCE(argv[0], ch->id);
- zend_list_addref(ch->id);
- ZVAL_STRINGL(argv[1], data, length, 1);
-
- error = call_user_function(EG(function_table),
- NULL,
- t->func,
- retval, 2, argv TSRMLS_CC);
- if (error == FAILURE) {
- php_error(E_WARNING, "Couldn't call the CURLOPT_HEADERFUNCTION");
- length = -1;
- }
- else {
- length = Z_LVAL_P(retval);
- }
- zval_ptr_dtor(&argv[0]);
- zval_ptr_dtor(&argv[1]);
- zval_ptr_dtor(&retval);
- break;
- }
- case PHP_CURL_IGNORE:
- return length;
- }
- return length;
-}
-/* }}} */
-
-/* {{{ curl_passwd
- */
-static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen)
-{
- php_curl *ch = (php_curl *) ctx;
- zval *func = ch->handlers->passwd;
- zval *argv[3];
- zval *retval = NULL;
- int error;
- int ret = 0;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- ZVAL_RESOURCE(argv[0], ch->id);
- zend_list_addref(ch->id);
- ZVAL_STRING(argv[1], prompt, 1);
- ZVAL_LONG(argv[2], buflen);
-
- error = call_user_function(EG(function_table),
- NULL,
- func,
- retval, 2, argv TSRMLS_CC);
- if (error == FAILURE) {
- php_error(E_WARNING, "Couldn't call the CURLOPT_PASSWDFUNCTION");
- ret = -1;
- }
- else {
- if (Z_STRLEN_P(retval) > buflen) {
- php_error(E_WARNING, "Returned password is too long for libcurl to handle");
- ret = -1;
- }
- else {
- strlcpy(buf, Z_STRVAL_P(retval), buflen);
- }
- }
-
- zval_ptr_dtor(&argv[0]);
- zval_ptr_dtor(&argv[1]);
- zval_ptr_dtor(&argv[2]);
- zval_ptr_dtor(&retval);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ curl_free_string
- */
-static void curl_free_string(void **string)
-{
- efree(*string);
-}
-/* }}} */
-
-/* {{{ curl_free_post
- */
-static void curl_free_post(void **post)
-{
- curl_formfree((struct HttpPost *) *post);
-}
-/* }}} */
-
-/* {{{ curl_free_slist
- */
-static void curl_free_slist(void **slist)
-{
- curl_slist_free_all((struct curl_slist *) *slist);
-}
-/* }}} */
-
-/* {{{ proto string curl_version(void)
- Return the CURL version string. */
-PHP_FUNCTION(curl_version)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING(curl_version(), 1);
-}
-/* }}} */
-
-/* {{{ alloc_curl_handle
- */
-static void alloc_curl_handle(php_curl **ch)
-{
- *ch = emalloc(sizeof(php_curl));
- (*ch)->handlers = ecalloc(1, sizeof(php_curl_handlers));
- (*ch)->handlers->write = ecalloc(1, sizeof(php_curl_write));
- (*ch)->handlers->write_header = ecalloc(1, sizeof(php_curl_write));
- (*ch)->handlers->read = ecalloc(1, sizeof(php_curl_read));
- memset(&(*ch)->err, 0, sizeof((*ch)->err));
-
- zend_llist_init(&(*ch)->to_free.str, sizeof(char *),
- (void(*)(void *)) curl_free_string, 0);
- zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist),
- (void(*)(void *)) curl_free_slist, 0);
- zend_llist_init(&(*ch)->to_free.post, sizeof(struct HttpPost),
- (void(*)(void *)) curl_free_post, 0);
-}
-/* }}} */
-
-/* {{{ proto resource curl_init([string url])
- Initialize a CURL session */
-PHP_FUNCTION(curl_init)
-{
- zval **url;
- php_curl *ch;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc > 1 ||
- zend_get_parameters_ex(argc, &url) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- alloc_curl_handle(&ch);
-
- ch->cp = curl_easy_init();
- if (! ch->cp) {
- php_error(E_WARNING, "Cannot initialize a new cURL handle");
- RETURN_FALSE;
- }
-
- ch->handlers->write->method = PHP_CURL_STDOUT;
- ch->handlers->write->type = PHP_CURL_ASCII;
- ch->handlers->read->method = PHP_CURL_DIRECT;
- ch->handlers->write_header->method = PHP_CURL_IGNORE;
-
- curl_easy_setopt(ch->cp, CURLOPT_NOPROGRESS, 1);
- curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 0);
- curl_easy_setopt(ch->cp, CURLOPT_ERRORBUFFER, ch->err.str);
- curl_easy_setopt(ch->cp, CURLOPT_WRITEFUNCTION, curl_write);
- curl_easy_setopt(ch->cp, CURLOPT_FILE, (void *) ch);
- curl_easy_setopt(ch->cp, CURLOPT_READFUNCTION, curl_read);
- curl_easy_setopt(ch->cp, CURLOPT_INFILE, (void *) ch);
- curl_easy_setopt(ch->cp, CURLOPT_HEADERFUNCTION, curl_write_header);
- curl_easy_setopt(ch->cp, CURLOPT_WRITEHEADER, (void *) ch);
- if (argc > 0) {
- char *urlcopy;
- convert_to_string_ex(url);
-
- urlcopy = estrndup(Z_STRVAL_PP(url), Z_STRLEN_PP(url));
- curl_easy_setopt(ch->cp, CURLOPT_URL, urlcopy);
- zend_llist_add_element(&ch->to_free.str, &urlcopy);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, ch, le_curl);
- ch->id = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool curl_setopt(resource ch, string option, mixed value)
- Set an option for a CURL transfer */
-PHP_FUNCTION(curl_setopt)
-{
- zval **zid,
- **zoption,
- **zvalue;
- php_curl *ch;
- CURLcode error;
- int option;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &zid, &zoption, &zvalue) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
- convert_to_long_ex(zoption);
-
- option = Z_LVAL_PP(zoption);
- switch (option) {
- case CURLOPT_INFILESIZE:
- case CURLOPT_VERBOSE:
- case CURLOPT_HEADER:
- case CURLOPT_NOPROGRESS:
- case CURLOPT_NOBODY:
- case CURLOPT_FAILONERROR:
- case CURLOPT_UPLOAD:
- case CURLOPT_POST:
- case CURLOPT_FTPLISTONLY:
- case CURLOPT_FTPAPPEND:
- case CURLOPT_NETRC:
- case CURLOPT_FOLLOWLOCATION:
- case CURLOPT_PUT:
- case CURLOPT_MUTE:
- case CURLOPT_TIMEOUT:
- case CURLOPT_LOW_SPEED_LIMIT:
- case CURLOPT_SSLVERSION:
- case CURLOPT_LOW_SPEED_TIME:
- case CURLOPT_RESUME_FROM:
- case CURLOPT_TIMEVALUE:
- case CURLOPT_TIMECONDITION:
- case CURLOPT_TRANSFERTEXT:
- case CURLOPT_HTTPPROXYTUNNEL:
- case CURLOPT_FILETIME:
- case CURLOPT_MAXREDIRS:
- case CURLOPT_MAXCONNECTS:
- case CURLOPT_CLOSEPOLICY:
- case CURLOPT_FRESH_CONNECT:
- case CURLOPT_FORBID_REUSE:
- case CURLOPT_CONNECTTIMEOUT:
- case CURLOPT_SSL_VERIFYHOST:
- case CURLOPT_SSL_VERIFYPEER:
- convert_to_long_ex(zvalue);
- error = curl_easy_setopt(ch->cp, option, Z_LVAL_PP(zvalue));
- break;
- case CURLOPT_URL:
- case CURLOPT_PROXY:
- case CURLOPT_USERPWD:
- case CURLOPT_PROXYUSERPWD:
- case CURLOPT_RANGE:
- case CURLOPT_CUSTOMREQUEST:
- case CURLOPT_USERAGENT:
- case CURLOPT_FTPPORT:
- case CURLOPT_COOKIE:
- case CURLOPT_SSLCERT:
- case CURLOPT_SSLCERTPASSWD:
- case CURLOPT_COOKIEFILE:
- case CURLOPT_REFERER:
- case CURLOPT_INTERFACE:
- case CURLOPT_KRB4LEVEL:
- case CURLOPT_RANDOM_FILE:
- case CURLOPT_EGDSOCKET:
- case CURLOPT_CAINFO:
- case CURLOPT_COOKIEJAR:
- case CURLOPT_SSL_CIPHER_LIST: {
- char *copystr = NULL;
-
- convert_to_string_ex(zvalue);
- copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
-
- error = curl_easy_setopt(ch->cp, option, copystr);
- zend_llist_add_element(&ch->to_free.str, &copystr);
-
- break;
- }
- case CURLOPT_FILE:
- case CURLOPT_INFILE:
- case CURLOPT_WRITEHEADER:
- case CURLOPT_STDERR: {
- FILE *fp = NULL;
- int type;
- void * what;
-
- what = zend_fetch_resource(zvalue TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream());
- ZEND_VERIFY_RESOURCE(what);
-
- if (FAILURE == php_stream_cast((php_stream*)what, PHP_STREAM_AS_STDIO, (void*)&fp, REPORT_ERRORS))
- RETURN_FALSE;
- if (!fp) {
- RETURN_FALSE;
- }
-
- error = CURLE_OK;
- switch (option) {
- case CURLOPT_FILE:
- ch->handlers->write->fp = fp;
- ch->handlers->write->method = PHP_CURL_FILE;
- break;
- case CURLOPT_WRITEHEADER:
- ch->handlers->write_header->fp = fp;
- ch->handlers->write_header->method = PHP_CURL_FILE;
- break;
- case CURLOPT_INFILE:
- zend_list_addref(Z_LVAL_PP(zvalue));
- ch->handlers->read->fp = fp;
- ch->handlers->read->fd = Z_LVAL_PP(zvalue);
- break;
- default:
- error = curl_easy_setopt(ch->cp, option, fp);
- break;
- }
-
- break;
- }
- case CURLOPT_RETURNTRANSFER:
- convert_to_long_ex(zvalue);
-
- if (Z_LVAL_PP(zvalue)) {
- ch->handlers->write->method = PHP_CURL_RETURN;
- }
- break;
- case CURLOPT_BINARYTRANSFER:
- convert_to_long_ex(zvalue);
- ch->handlers->write->type = PHP_CURL_BINARY;
- break;
- case CURLOPT_WRITEFUNCTION:
- zval_add_ref(zvalue);
- ch->handlers->write->func = *zvalue;
- ch->handlers->write->method = PHP_CURL_USER;
- break;
- case CURLOPT_READFUNCTION:
- zval_add_ref(zvalue);
- ch->handlers->read->func = *zvalue;
- ch->handlers->read->method = PHP_CURL_USER;
- break;
- case CURLOPT_HEADERFUNCTION:
- zval_add_ref(zvalue);
- ch->handlers->write_header->func = *zvalue;
- ch->handlers->write_header->method = PHP_CURL_USER;
- break;
- case CURLOPT_PASSWDFUNCTION:
- zval_add_ref(zvalue);
- ch->handlers->passwd = *zvalue;
- error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDFUNCTION, curl_passwd);
- error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDDATA, (void *) ch);
- break;
- case CURLOPT_POSTFIELDS:
- if (Z_TYPE_PP(zvalue) == IS_ARRAY || Z_TYPE_PP(zvalue) == IS_OBJECT) {
- zval **current;
- HashTable *postfields;
- struct HttpPost *first = NULL;
- struct HttpPost *last = NULL;
- char *postval;
- char *string_key = NULL;
- ulong num_key;
- uint string_key_len;
-
- postfields = HASH_OF(*zvalue);
- if (! postfields) {
- php_error(E_WARNING, "Couldn't get HashTable in CURLOPT_POSTFIELDS");
- RETURN_FALSE;
- }
-
- for (zend_hash_internal_pointer_reset(postfields);
- zend_hash_get_current_data(postfields, (void **) &current) == SUCCESS;
- zend_hash_move_forward(postfields)) {
-
- SEPARATE_ZVAL(current);
- convert_to_string_ex(current);
-
- zend_hash_get_current_key_ex(postfields, &string_key, &string_key_len, &num_key, 0, NULL);
-
- postval = Z_STRVAL_PP(current);
- if (*postval == '@') {
- error = curl_formadd(&first, &last, CURLFORM_COPYNAME, string_key,
- CURLFORM_FILE, ++postval, CURLFORM_END);
- }
- else {
- error = curl_formadd(&first, &last, CURLFORM_COPYNAME, string_key,
- CURLFORM_PTRCONTENTS, postval,
- CURLFORM_CONTENTSLENGTH, Z_STRLEN_PP(current),
- CURLFORM_END);
- }
- }
-
- SAVE_CURL_ERROR(ch, error);
- if (error != CURLE_OK) {
- RETURN_FALSE;
- }
-
- zend_llist_add_element(&ch->to_free.post, &first);
- error = curl_easy_setopt(ch->cp, CURLOPT_HTTPPOST, first);
- }
- else {
- char *post = NULL;
-
- convert_to_string_ex(zvalue);
- post = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
- zend_llist_add_element(&ch->to_free.str, &post);
-
- error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, post);
- error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue));
- }
-
- break;
- case CURLOPT_HTTPHEADER:
- case CURLOPT_QUOTE:
- case CURLOPT_POSTQUOTE: {
- zval **current;
- HashTable *ph;
- struct curl_slist *slist = NULL;
-
- ph = HASH_OF(*zvalue);
- if (! ph) {
- php_error(E_WARNING,
- "You must pass either an object or an array with the CURLOPT_HTTPHEADER,"
- "CURLOPT_QUOTE and CURLOPT_POSTQUOTE arguments");
- RETURN_FALSE;
- }
-
- for (zend_hash_internal_pointer_reset(ph);
- zend_hash_get_current_data(ph, (void **) &current) == SUCCESS;
- zend_hash_move_forward(ph)) {
- char *indiv = NULL;
-
- SEPARATE_ZVAL(current);
- convert_to_string_ex(current);
-
- indiv = estrndup(Z_STRVAL_PP(current), Z_STRLEN_PP(current) + 1);
- slist = curl_slist_append(slist, indiv);
- if (! slist) {
- efree(indiv);
- php_error(E_WARNING, "Couldn't build curl_slist from curl_setopt()");
- RETURN_FALSE;
- }
- zend_llist_add_element(&ch->to_free.str, &indiv);
- }
- zend_llist_add_element(&ch->to_free.slist, &slist);
-
- error = curl_easy_setopt(ch->cp, option, slist);
-
- break;
- }
- }
-
- SAVE_CURL_ERROR(ch, error);
- if (error != CURLE_OK) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool curl_exec(resource ch)
- Perform a CURL session */
-PHP_FUNCTION(curl_exec)
-{
- zval **zid;
- php_curl *ch;
- CURLcode error;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- error = curl_easy_perform(ch->cp);
- SAVE_CURL_ERROR(ch, error);
- if (error != CURLE_OK) {
- if (ch->handlers->write->buf.len > 0)
- smart_str_free(&ch->handlers->write->buf);
- RETURN_FALSE;
- }
-
- if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) {
- if (ch->handlers->write->type != PHP_CURL_BINARY)
- smart_str_0(&ch->handlers->write->buf);
- RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 0);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s), v);
-#define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s), v);
-#define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s), v, 1);
-
-/* {{{ proto string curl_getinfo(resource ch, int opt)
- Get information regarding a specific transfer */
-PHP_FUNCTION(curl_getinfo)
-{
- zval **zid,
- **zoption;
- php_curl *ch;
- int option,
- argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 ||
- zend_get_parameters_ex(argc, &zid, &zoption) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- if (argc < 2) {
- char *url;
- long l_code;
- double d_code;
-
- array_init(return_value);
-
- curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &url);
- CAAS("url", url);
- curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code);
- CAAL("http_code", l_code);
- curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code);
- CAAL("header_size", l_code);
- curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code);
- CAAL("request_size", l_code);
- curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code);
- CAAL("filetime", l_code);
- curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFYRESULT, &l_code);
- CAAL("ssl_verify_result", l_code);
- curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code);
- CAAD("total_time", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code);
- CAAD("namelookup_time", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code);
- CAAD("connect_time", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code);
- CAAD("pretransfer_time", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code);
- CAAD("size_upload", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code);
- CAAD("size_download", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code);
- CAAD("speed_download", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code);
- CAAD("speed_upload", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code);
- CAAD("download_content_length", d_code);
- curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code);
- CAAD("upload_content_length", d_code);
- } else {
- option = Z_LVAL_PP(zoption);
- switch (option) {
- case CURLINFO_EFFECTIVE_URL: {
- char *url;
-
- curl_easy_getinfo(ch->cp, option, &url);
- RETURN_STRING(url, 1);
-
- break;
- }
- case CURLINFO_HTTP_CODE:
- case CURLINFO_HEADER_SIZE:
- case CURLINFO_REQUEST_SIZE:
- case CURLINFO_FILETIME:
- case CURLINFO_SSL_VERIFYRESULT: {
- long code;
-
- curl_easy_getinfo(ch->cp, option, &code);
- RETURN_LONG(code);
-
- break;
- }
- case CURLINFO_TOTAL_TIME:
- case CURLINFO_NAMELOOKUP_TIME:
- case CURLINFO_CONNECT_TIME:
- case CURLINFO_PRETRANSFER_TIME:
- case CURLINFO_SIZE_UPLOAD:
- case CURLINFO_SIZE_DOWNLOAD:
- case CURLINFO_SPEED_DOWNLOAD:
- case CURLINFO_SPEED_UPLOAD:
- case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
- case CURLINFO_CONTENT_LENGTH_UPLOAD: {
- double code;
-
- curl_easy_getinfo(ch->cp, option, &code);
- RETURN_DOUBLE(code);
-
- break;
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string curl_error(resource ch)
- Return a string contain the last error for the current session */
-PHP_FUNCTION(curl_error)
-{
- zval **zid;
- php_curl *ch;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- ch->err.str[CURL_ERROR_SIZE] = 0;
- RETURN_STRING(ch->err.str, 1);
-}
-/* }}} */
-
-/* {{{ proto int curl_errno(resource ch)
- Return an integer containing the last error number */
-PHP_FUNCTION(curl_errno)
-{
- zval **zid;
- php_curl *ch;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- RETURN_LONG(ch->err.no);
-}
-/* }}} */
-
-/* {{{ proto void curl_close(resource ch)
- Close a CURL session */
-PHP_FUNCTION(curl_close)
-{
- zval **zid;
- php_curl *ch;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- zend_list_delete(Z_LVAL_PP(zid));
-}
-/* }}} */
-
-/* {{{ _php_curl_close()
- List destructor for curl handles */
-static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_curl *ch = (php_curl *) rsrc->ptr;
-
- curl_easy_cleanup(ch->cp);
- zend_llist_clean(&ch->to_free.str);
- zend_llist_clean(&ch->to_free.slist);
- zend_llist_clean(&ch->to_free.post);
-
- if (ch->handlers->write->func) zval_ptr_dtor(&ch->handlers->write->func);
- if (ch->handlers->read->func) zval_ptr_dtor(&ch->handlers->read->func);
- if (ch->handlers->write_header->func) zval_ptr_dtor(&ch->handlers->write_header->func);
- if (ch->handlers->passwd) zval_ptr_dtor(&ch->handlers->passwd);
-
- efree(ch->handlers->write);
- efree(ch->handlers->write_header);
- efree(ch->handlers->read);
- efree(ch->handlers);
- efree(ch);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/curl/curl.dsp b/ext/curl/curl.dsp
deleted file mode 100644
index 66095f0b8a..0000000000
--- a/ext/curl/curl.dsp
+++ /dev/null
@@ -1,177 +0,0 @@
-# Microsoft Developer Studio Project File - Name="curl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=curl - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "curl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "curl.mak" CFG="curl - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "curl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "curl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "curl - Win32 Debug_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "curl - Win32 Release_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "curl - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "curl - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "curl - Win32 Debug_TS_SSL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "curl___Win32_Debug_TS_SSL"
-# PROP BASE Intermediate_Dir "curl___Win32_Debug_TS_SSL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS_SSL"
-# PROP Intermediate_Dir "Debug_TS_SSL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php4ts_debug.lib libcurl.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none /nodefaultlib
-
-!ELSEIF "$(CFG)" == "curl - Win32 Release_TS_SSL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "curl___Win32_Release_TS_SSL"
-# PROP BASE Intermediate_Dir "curl___Win32_Release_TS_SSL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_SSL"
-# PROP Intermediate_Dir "Release_TS_SSL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php4ts.lib libcurl.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "curl - Win32 Release_TS"
-# Name "curl - Win32 Debug_TS"
-# Name "curl - Win32 Debug_TS_SSL"
-# Name "curl - Win32 Release_TS_SSL"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\curl.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_curl.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
deleted file mode 100644
index de4e1ca170..0000000000
--- a/ext/curl/php_curl.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef _PHP_CURL_H
-#define _PHP_CURL_H
-
-#include "php.h"
-#include "ext/standard/php_smart_str.h"
-
-#ifdef COMPILE_DL_CURL
-#undef HAVE_CURL
-#define HAVE_CURL 1
-#endif
-
-#if HAVE_CURL
-
-#include <curl/curl.h>
-
-
-extern zend_module_entry curl_module_entry;
-#define curl_module_ptr &curl_module_entry
-
-#define CURLOPT_RETURNTRANSFER 19913
-#define CURLOPT_BINARYTRANSFER 19914
-
-PHP_MINIT_FUNCTION(curl);
-PHP_MSHUTDOWN_FUNCTION(curl);
-PHP_MINFO_FUNCTION(curl);
-PHP_FUNCTION(curl_version);
-PHP_FUNCTION(curl_init);
-PHP_FUNCTION(curl_setopt);
-PHP_FUNCTION(curl_exec);
-PHP_FUNCTION(curl_getinfo);
-PHP_FUNCTION(curl_error);
-PHP_FUNCTION(curl_errno);
-PHP_FUNCTION(curl_close);
-
-typedef struct {
- zval *func;
- FILE *fp;
- smart_str buf;
- int method;
- int type;
-} php_curl_write;
-
-typedef struct {
- zval *func;
- FILE *fp;
- long fd;
- int method;
-} php_curl_read;
-
-typedef struct {
- php_curl_write *write;
- php_curl_write *write_header;
- php_curl_read *read;
- zval *passwd;
-} php_curl_handlers;
-
-struct _php_curl_error {
- char str[CURL_ERROR_SIZE + 1];
- int no;
-};
-
-struct _php_curl_free {
- zend_llist str;
- zend_llist post;
- zend_llist slist;
-};
-
-typedef struct {
- CURL *cp;
- php_curl_handlers *handlers;
- struct _php_curl_error err;
- struct _php_curl_free to_free;
- long id;
-} php_curl;
-
-
-#else
-#define curl_module_ptr NULL
-#endif /* HAVE_CURL */
-#define phpext_curl_ptr curl_module_ptr
-#endif /* _PHP_CURL_H */
diff --git a/ext/cybercash/CREDITS b/ext/cybercash/CREDITS
deleted file mode 100644
index d9f4491a66..0000000000
--- a/ext/cybercash/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-CyberCash
-Evan Klinger
diff --git a/ext/cybercash/config.m4 b/ext/cybercash/config.m4
deleted file mode 100644
index 3deaa368ef..0000000000
--- a/ext/cybercash/config.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for CyberCash support)
-AC_ARG_WITH(cybercash,
-[ --with-cybercash[=DIR] Include CyberCash support. DIR is the CyberCash MCK
- install directory.],
-[
- if test "$withval" != "no"; then
- test -f $withval/mckcrypt.h && MCK_DIR=$withval
- test -f $withval/c-api/mckcrypt.h && MCK_DIR=$withval/c-api
- if test -n "$MCK_DIR"; then
- AC_MSG_RESULT(yes)
- PHP_NEW_EXTENSION(cybercash, cybercash.c)
- old_LIBS=$LIBS
- LIBS="$LIBS -L$MCK_DIR/lib"
- AC_CHECK_LIB(mckcrypto,base64_encode,[AC_DEFINE(HAVE_MCK,1,[ ])],
- [AC_MSG_ERROR(Please reinstall the CyberCash MCK - cannot find mckcrypto lib)])
- LIBS=$old_LIBS
- PHP_ADD_LIBRARY_WITH_PATH(mckcrypto, $MCK_DIR/lib)
- PHP_ADD_INCLUDE($MCK_DIR)
- else
- AC_MSG_RESULT(no)
- fi
-fi
-],[
- AC_MSG_RESULT(no)
-])
diff --git a/ext/cybercash/cybercash.c b/ext/cybercash/cybercash.c
deleted file mode 100644
index 0a28964ea1..0000000000
--- a/ext/cybercash/cybercash.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Evan Klinger <evan715@sirius.com> |
- | Timothy Whitfield <timothy@ametro.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "cybercash.h"
-
-#if HAVE_MCK
-#include "mckcrypt.h"
-#include "base64.h"
-
-/* {{{ cybercash_functions[]
- */
-function_entry cybercash_functions[] = {
- PHP_FE(cybercash_encr, NULL)
- PHP_FE(cybercash_decr, NULL)
- PHP_FE(cybercash_base64_encode, NULL)
- PHP_FE(cybercash_base64_decode, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ cybercash_module_entry
- */
-zend_module_entry cybercash_module_entry = {
- STANDARD_MODULE_HEADER,
- "cybercash",
- cybercash_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(cybercash),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-/* }}} */
-
-#ifdef COMPILE_DL_CYBERCASH
-ZEND_GET_MODULE(cybercash)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(cybercash)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Cybercash Support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto array cybercash_encr(string wmk, string sk, string data)
- Cybercash encrypt */
-PHP_FUNCTION(cybercash_encr)
-{
- zval **wmk, **sk, **inbuff;
- unsigned char *outbuff, *macbuff;
- unsigned int outAlloc, outLth;
- long errcode;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &wmk, &sk, &inbuff) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(wmk);
- convert_to_string_ex(sk);
- convert_to_string_ex(inbuff);
-
- outAlloc = Z_STRLEN_PP(inbuff) + 10;
-
- outbuff = (unsigned char *)emalloc(sizeof(unsigned char) * outAlloc);
- macbuff = (unsigned char *)emalloc(sizeof(unsigned char) * 20);
-
- errcode = mck_encr(Z_STRVAL_PP(wmk),
- Z_STRVAL_PP(sk),
- Z_STRLEN_PP(inbuff) + 1,
- Z_STRVAL_PP(inbuff),
- outAlloc,
- outbuff,
- &outLth,
- macbuff);
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Return value from cybercash_encr could not be initialized");
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "errcode", errcode);
-
- if (!errcode) {
- add_assoc_stringl(return_value, "outbuff", outbuff, outLth, 0);
- add_assoc_long(return_value,"outLth", outLth);
- add_assoc_stringl(return_value,"macbuff", macbuff, 20, 0);
- } else {
- efree(outbuff);
- efree(macbuff);
- }
-}
-/* }}} */
-
-/* {{{ proto array cybercash_decr(string wmp, string sk, string data)
- Cybercash decrypt */
-PHP_FUNCTION(cybercash_decr)
-{
- zval **wmk, **sk, **inbuff;
- unsigned char *outbuff, *macbuff;
- unsigned int outAlloc, outLth;
- long errcode;
-
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &wmk, &sk, &inbuff) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(wmk);
- convert_to_string_ex(sk);
- convert_to_string_ex(inbuff);
-
- outAlloc = Z_STRLEN_PP(inbuff);
-
- outbuff = (unsigned char *)emalloc(sizeof(unsigned char) * outAlloc);
- macbuff = (unsigned char *)emalloc(sizeof(unsigned char) * 20);
-
- errcode = mck_decr(Z_STRVAL_PP(wmk),
- Z_STRVAL_PP(sk),
- Z_STRLEN_PP(inbuff),
- Z_STRVAL_PP(inbuff),
- outAlloc,
- outbuff,
- &outLth,
- macbuff);
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Could not initialize Return value from cybercash_decr");
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "errcode", errcode);
-
- if (!errcode) {
- add_assoc_stringl(return_value, "outbuff", outbuff, outLth, 0);
- add_assoc_long(return_value, "outLth", outLth);
- add_assoc_stringl(return_value, "macbuff", macbuff, 20, 0);
- } else {
- efree(outbuff);
- efree(macbuff);
- }
-}
-/* }}} */
-
-/* {{{ proto string cybercash_base64_encode(string data)
- base64 encode data for cybercash */
-PHP_FUNCTION(cybercash_base64_encode)
-{
- zval **inbuff;
- char *outbuff;
- long ret_length;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &inbuff) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(inbuff);
-
- outbuff = (char *)emalloc(base64_enc_size((unsigned int)Z_STRLEN_PP(inbuff)));
-
- ret_length = base64_encode(outbuff,
- Z_STRVAL_PP(inbuff),
- Z_STRLEN_PP(inbuff));
-
- RETURN_STRINGL(outbuff, ret_length, 0);
-}
-/* }}} */
-
-/* {{{ proto string cybercash_base64_decode(string data)
- base64 decode data for cybercash */
-PHP_FUNCTION(cybercash_base64_decode)
-{
- zval **inbuff;
- char *outbuff;
- long ret_length;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &inbuff) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(inbuff);
-
- outbuff = (char *)emalloc(base64_dec_size((unsigned int)Z_STRLEN_PP(inbuff)));
-
- ret_length = base64_decode(outbuff, Z_STRVAL_PP(inbuff), Z_STRLEN_PP(inbuff));
-
- RETURN_STRINGL(outbuff, ret_length, 0);
-}
-/* }}} */
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/cybercash/cybercash.dsp b/ext/cybercash/cybercash.dsp
deleted file mode 100644
index 83c47e1913..0000000000
--- a/ext/cybercash/cybercash.dsp
+++ /dev/null
@@ -1,110 +0,0 @@
-# Microsoft Developer Studio Project File - Name="cybercash" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=cybercash - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "cybercash.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "cybercash.mak" CFG="cybercash - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "cybercash - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "cybercash - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "cybercash - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CYBERCASH_EXPORTS" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MCK=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib cybercashi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib user32.lib winspool.lib mckcrypto.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:"libcmt.lib" /out:"..\..\Release_TS/php_cybercash.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "cybercash - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CYBERCASH_EXPORTS" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MCK=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib cybercashi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib user32.lib winspool.lib mckcrypto.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"libcmt.lib" /out:"..\..\Debug_TS/php_cybercash.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "cybercash - Win32 Release_TS"
-# Name "cybercash - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\cybercash.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\cybercash.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/cybercash/cybercash.h b/ext/cybercash/cybercash.h
deleted file mode 100644
index 60e0d1bbcf..0000000000
--- a/ext/cybercash/cybercash.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Evan Klinger <evan715@sirius.com> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef CYBERCASH_H
-#define CYBERCASH_H
-
-
-#if HAVE_MCK
-
-extern zend_module_entry cybercash_module_entry;
-#define cybercash_module_ptr &cybercash_module_entry
-
-PHP_MINFO_FUNCTION(cybercash);
-PHP_FUNCTION(cybercash_encr);
-PHP_FUNCTION(cybercash_decr);
-PHP_FUNCTION(cybercash_base64_encode);
-PHP_FUNCTION(cybercash_base64_decode);
-
-#else
-#define cybercash_module_ptr NULL
-#endif
-
-#define phpext_cybercash_ptr cybercash_module_ptr
-
-#endif
diff --git a/ext/cybercash/cyberlib.php b/ext/cybercash/cyberlib.php
deleted file mode 100644
index fa183ff93b..0000000000
--- a/ext/cybercash/cyberlib.php
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-
-/*********************************************************************
- * Cyberlib - (C) American Metrocomm Internet Services *
- * by Timothy Whitfield <timothy@ametro.net> *
- * *
- * PHP Cybercash API - This requires that CyberCash support be *
- * compiled. *
- * *
- * *
- * This is an attempt to duplicate the cybercash API for PHP *
- * users. *
- *********************************************************************
- * This does not require merchant_conf for reasons that any file *
- * can be accessed by the web server can be accessed by any cgi. *
- *********************************************************************
- */
-
- function SendCC2_1Server($merchant,$merchant_key,
- $url,$operation,$CCNVList)
- {
- /* We need to make the url. */
- $url=$url."cr21api.cgi/".$operation;
-
- return SendCCServer($merchant,$merchant_key,$url,$CCNVList);
- }
-
- function SendCCServer($merchant,$merchant_key,$url,$CCNVList)
- {
- /* Break the url into parts. */
- $url=parse_url($url);
-
- /* Turn the name value pairs into a url encoded message. */
- $pairs="";
- $done=0;
- $more=list($key,$val)=each($CCNVList);
- while(!$done)
- {
- $pairs.=rtrim($key)."=".urlencode(rtrim($val));
-
- $more=list($key,$val)=each($CCNVList);
- if($more)
- {
- $pairs.="&";
- }
- else
- {
- $done=1;
- }
- }
-
- $encrypted_pairs=CCEncrypt($merchant_key,$pairs);
- $pairs_length=strlen($encrypted_pairs);
-
- $message=sprintf("POST %s/%s HTTP/1.0\r\n",$url["path"],$merchant);
- $message.=sprintf("User-Agent: CCMCK-%s\r\n","3.2.0.5");
- $message.="Content-type: application/x-www-form-urlencoded\r\n";
- $message.=sprintf("Content-length: %d\r\n",$pairs_length);
- $message.="\r\n";
- $message.=$encrypted_pairs."\r\n";
-
-$response=CCSocketSend($merchant_key,$url["host"],isset($url["port"])?$url["port"]:"",$message);
- return $response;
- }
-
- function CCEncrypt($merchant_key,$pairs)
- {
- $session_key=sprintf("%s #%ld",date("D M j H:i:s Y"),getmypid());
- $enc_msg=cybercash_encr($merchant_key,$session_key,$pairs);
- $pairs=cybercash_base64_encode($enc_msg["outbuff"]);
- $mac=cybercash_base64_encode($enc_msg["macbuff"]);
-
- /* This adds the information needed to decrypt. */
- $encrypted_pairs="message=".urlencode($pairs)."&";
- $encrypted_pairs.="session-key=".urlencode($session_key)."&";
- $encrypted_pairs.="mac=".urlencode($mac);
-
-
- return $encrypted_pairs;
- }
-
- function CCSocketSend($merchant_key,$host,$port,$message)
- {
-
- if(!$port)
- {
- $port="80";
- }
-
- /*This opens the port. */
- $fd=fsockopen($host,$port);
-
- /* Minor error checking. */
- if(!$fd)
- {
- $vars["MStatus"]="failure-hard";
- $vars["MErrMsg"]="Error contacting credit processor.";
-
- return $vars;
- }
-
- /*This sends the message. */
- fputs($fd,$message);
-
- /* We read the header in and parse at the same time. */
-
- /* Retrieve header. */
- $i=0;
- $response="";
- while(!feof($fd) && $response != "\n")
- {
- $response="";
- $more="";
- while(!feof($fd) && $more != "\n")
- {
- $more=fgetc($fd);
- if($more != "\n" || $response=="")
- {
- if($more != "\r")
- {
- $response.=$more;
- }
- }
- }
- $header[$i++]=$response;
- }
-
- /* We will now get the message. */
- $message="";
- while(!feof($fd))
- {
- $message.=fgets($fd,50);
- }
-
- /* It should be ok to close the socket now. */
- fclose($fd);
-
- /* This set of variables is encoded/encrypted. */
- $vars=CCGetVars($message);
- $vars["message"]=cybercash_base64_decode($vars["message"]);
- $vars["mac"]=cybercash_base64_decode($vars["mac"]);
-
- /* Check for errors with the request/decryption. */
- /* message is base64 and encrypted. */
- $dec_msg=cybercash_decr($merchant_key,$vars["session-key"],
- $vars["message"]);
-
- if($dec_msg["errcode"])
- {
- $vars["MStatus"]="failure-hard";
- $vars["MErrMsg"]="Response non-decodable.";
- return $vars;
- }
-
- if($dec_msg["macbuff"] != $vars["mac"])
- {
- $vars["MStatus"]="failure-hard";
- $vars["MErrMsg"]="Signitures do not match.";
- return $vars;
- }
-
- /* We will have to parse again to get more info. */
- $vars=CCGetVars($dec_msg["outbuff"]);
-
- return $vars;
- }
-
- function CCGetVars($message)
- {
- /* Retrieve variables.
- This function retrieves variables in var/value key pairs.
- So that $myvar["var"]==value
- */
-
- /* Need to find these variables too. */
- $cx=0;
- $response="";
- $more="";
- $message.="\n";
- $msg_len=strlen($message);
-
- while($cx<=$msg_len)
- {
- $more="";
- $varname="";
- $varval="";
- while($cx<=$msg_len && $more != "&" && $more != "\n")
- {
- $more=substr($message,$cx,1);
- $cx++;
- if($more != "&" && $more != "=" && $more != "\n")
- {
- $response=$response.$more;
- }
- if($more=="=")
- {
- $varname=$response;
- $response="";
- }
- if($more=="&" || $more=="\n")
- {
- $varval=$response;
- $response="";
- }
- }
-
- if($varname != "")
- {
- $cybervar[$varname]=urldecode($varval);
- }
- }
-
- return $cybervar;
- }
-?>
diff --git a/ext/cybercash/test.php b/ext/cybercash/test.php
deleted file mode 100644
index 2e5f3955ee..0000000000
--- a/ext/cybercash/test.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
- require "cyberlib.php";
-
- $merchant=""; /* Your merchant ID goes here. */
- $merchant_key=""; /* Your merchant key goes here. */
- $payment_url="http://cr.cybercash.com/cgi-bin/";
- $auth_type="mauthonly";
-
- $response=SendCC2_1Server($merchant,$merchant_key,$payment_url,
- $auth_type,array("Order-ID" => "2342322",
- "Amount" => "usd 11.50",
- "Card-Number" => "4111111111111111",
- "Card-Address" => "1600 Pennsylvania Avenue",
- "Card-City" => "Washington",
- "Card-State" => "DC",
- "Card-Zip" => "20500",
- "Card-Country" => "USA",
- "Card-Exp" => "12/99",
- "Card-Name" => "Bill Clinton"));
-
- while(list($key,$val)=each($response))
- {
- echo $key."=".$val."<br>";
- }
-
-?>
diff --git a/ext/cybermut/config.m4 b/ext/cybermut/config.m4
deleted file mode 100644
index e4f06b200c..0000000000
--- a/ext/cybermut/config.m4
+++ /dev/null
@@ -1,48 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(cybermut, for cybermut support,
-[ --with-cybermut[=DIR] Include CyberMut (french Credit Mutuel telepaiement)])
-
-if test "$PHP_CYBERMUT" != "no"; then
- for i in /usr/local /usr $PHP_CYBERMUT; do
- if test -r $i/cm-mac.h; then
- CYBERMUT_INC_DIR=$i
- elif test -r $i/include/cm-mac.h; then
- CYBERMUT_INC_DIR=$i/include
- fi
-
- if test -r $i/libcm-mac.a; then
- CYBERMUT_LIB_DIR=$i
- elif test -r $i/lib/libcm-mac.a; then
- CYBERMUT_LIB_DIR=$i/lib
- fi
- done
-
- if test -z "$CYBERMUT_INC_DIR"; then
- AC_MSG_ERROR(Could not find cm-mac.h Please make sure you have the
- CyberMut SDK installed. Use
- ./configure --with-cybermut=<cybermut-dir> if necessary)
- fi
-
- if test -z "$CYBERMUT_LIB_DIR"; then
- AC_MSG_ERROR(Could not find libcm-mac.a Please make sure you have the
- CyberMut SDK installed. Use
- ./configure --with-cybermut=<cybermut-dir> if necessary)
- fi
- AC_MSG_RESULT(found in $CYBERMUT_LIB_DIR)
-
- AC_MSG_RESULT(linking libcm-mac.a with libcybermut.a)
- ln -sf $CYBERMUT_LIB_DIR/libcm-mac.a $CYBERMUT_LIB_DIR/libcybermut.a
-
- PHP_ADD_INCLUDE($CYBERMUT_INC_DIR)
-
- PHP_SUBST(CYBERMUT_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(cybermut, $CYBERMUT_LIB_DIR, CYBERMUT_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_CYBERMUT, 1, [ ])
-
-
- PHP_NEW_EXTENSION(cybermut, cybermut.c, $ext_shared)
-fi
diff --git a/ext/cybermut/cybermut.c b/ext/cybermut/cybermut.c
deleted file mode 100644
index 48139d6916..0000000000
--- a/ext/cybermut/cybermut.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sylvain PAGES <spages@free.fr> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_cybermut.h"
-
-#include "cm-mac.h"
-
-/* If you declare any globals in php_cybermut.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(cybermut)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_cybermut;
-
-/* {{{ cybermut_functions[]
- */
-function_entry cybermut_functions[] = {
- PHP_FE(cybermut_creerformulairecm, NULL)
- PHP_FE(cybermut_testmac, NULL)
- PHP_FE(cybermut_creerreponsecm, NULL)
- {NULL, NULL, NULL} /* Must be the last line in cybermut_functions[] */
-};
-/* }}} */
-
-/* {{{ cybermut_module_entry
- */
-zend_module_entry cybermut_module_entry = {
- STANDARD_MODULE_HEADER,
- "cybermut",
- cybermut_functions,
- PHP_MINIT(cybermut),
- PHP_MSHUTDOWN(cybermut),
- NULL,
- NULL,
- PHP_MINFO(cybermut),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_CYBERMUT
-ZEND_GET_MODULE(cybermut)
-#endif
-
-PHP_MINIT_FUNCTION(cybermut)
-{
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(cybermut)
-{
- return SUCCESS;
-}
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(cybermut)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "cybermut support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto string cybermut_creerformulairecm(string url_CM, string version, string TPE, string montant, string ref_commande, string texte_libre, string url_retour, string url_retour_ok, string url_retour_err, string langue, string code_societe, string texte_bouton)
- Returns a string containing source HTML of the form of request for payment. This result corresponds to the last parameter "formulaire" of the original function which was removed */
-PHP_FUNCTION(cybermut_creerformulairecm)
-{
- zval **url_CM, **version, **TPE, **montant, **ref_commande, **texte_libre, **url_retour, **url_retour_ok, **url_retour_err, **langue, **code_societe, **texte_bouton;
-
- char formulaire [10000];
-
- if (ZEND_NUM_ARGS() != 12 || zend_get_parameters_ex(12, &url_CM, &version, &TPE, &montant, &ref_commande, &texte_libre, &url_retour, &url_retour_ok, &url_retour_err, &langue, &code_societe, &texte_bouton) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(url_CM);
- convert_to_string_ex(version);
- convert_to_string_ex(TPE);
- convert_to_string_ex(montant);
- convert_to_string_ex(ref_commande);
- convert_to_string_ex(texte_libre);
- convert_to_string_ex(url_retour);
- convert_to_string_ex(url_retour_ok);
- convert_to_string_ex(url_retour_err);
- convert_to_string_ex(langue);
- convert_to_string_ex(code_societe);
- convert_to_string_ex(texte_bouton);
-
- CreerFormulaireCM ( Z_STRVAL_PP(url_CM), Z_STRVAL_PP(version), Z_STRVAL_PP(TPE), Z_STRVAL_PP(montant), Z_STRVAL_PP(ref_commande), Z_STRVAL_PP(texte_libre), Z_STRVAL_PP(url_retour), Z_STRVAL_PP(url_retour_ok), Z_STRVAL_PP(url_retour_err), Z_STRVAL_PP(langue), Z_STRVAL_PP(code_societe), Z_STRVAL_PP(texte_bouton), formulaire);
-
-
- RETURN_STRING(formulaire, 1);
-
-}
-/* }}} */
-
-/* {{{ proto bool cybermut_testmac(string code_MAC, string version, string TPE, string cdate, string montant, string ref_commande, string texte_libre, string code_retour)
- Returns a boolean attesting that the authentification proceeded well. TRUE if the received message is authenticated and FALSE if not */
-PHP_FUNCTION(cybermut_testmac)
-{
- zval **code_MAC, **version, **TPE, **cdate, **montant, **ref_commande, **texte_libre, **code_retour;
- int cdr_test;
-
- if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &code_MAC, &version, &TPE, &cdate, &montant, &ref_commande, &texte_libre, &code_retour) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(code_MAC);
- convert_to_string_ex(version);
- convert_to_string_ex(TPE);
- convert_to_string_ex(cdate);
- convert_to_string_ex(montant);
- convert_to_string_ex(ref_commande);
- convert_to_string_ex(texte_libre);
- convert_to_string_ex(code_retour);
-
- cdr_test = TestMAC ( Z_STRVAL_PP(code_MAC), Z_STRVAL_PP(version), Z_STRVAL_PP(TPE), Z_STRVAL_PP(cdate), Z_STRVAL_PP(montant), Z_STRVAL_PP(ref_commande), Z_STRVAL_PP(texte_libre), Z_STRVAL_PP(code_retour));
-
- if (cdr_test == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto string cybermut_creerreponsecm(string phrase)
- Returns a string containing the message of acknowledgement of delivery (headers and body of the message). This result corresponds to the last parameter "reponse" of the original function which was removed */
-PHP_FUNCTION(cybermut_creerreponsecm)
-{
- zval **phrase;
- char buf[5000];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &phrase) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(phrase);
-
- CreerReponseCM( Z_STRVAL_PP(phrase), buf);
-
- RETURN_STRING (buf, 1);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/cybermut/cybermut.xml b/ext/cybermut/cybermut.xml
deleted file mode 100644
index fabc94b5b2..0000000000
--- a/ext/cybermut/cybermut.xml
+++ /dev/null
@@ -1,214 +0,0 @@
- <reference id="ref.cybermut">
- <title>Credit Mutuel CyberMUT functions</title>
- <titleabbrev>CyberMUT</titleabbrev>
- <partintro>
- <simpara>
- This extension allows you to process credit cards transactions using Credit
- Mutuel CyberMUT system (<ulink url="http://www.creditmutuel.fr/centre_commercial/vendez_sur_internet.html">http://www.creditmutuel.fr/centre_commercial/vendez_sur_internet.html</ulink>).
- </simpara>
- <simpara>
- CynerMUT is a popular Web Payment Service in France, provided by the
- Credit Mutuel bank. If you are foreign in France, these functions will not
- be useful for you.
- </simpara>
- <simpara>
- These functions are only available if PHP has been compiled with the
- <option role="configure">--with-cybermut[=DIR]</option> option, where DIR is
- the location of libcm-mac.a and cm-mac.h. You will require the
- appropriate SDK for your platform, which may be sent to you after your
- CyberMUT's subscription (contact them via Web, or go to the nearest
- Credit Mutuel).
- </simpara>
- <simpara>
- The use of these functions is almost identical to the original functions,
- except for the parameters of return for CreerFormulaireCM and CreerReponseCM,
- which are returned directly by functions PHP, whereas they had passed in
- reference in the original functions.
- </simpara>
- <simpara>
- These functions have been added in PHP 4.0.4. ???
- </simpara>
-
- <note><para>
- These functions only provide a link to CyberMUT SDK. Be sure to read the
- CynerMUT Developers Guide for full details of the required parameters.
- </para></note>
- </partintro>
-
- <refentry id="function.cybermut_creerformulairecm">
- <refnamediv>
- <refname>cybermut_creerformulairecm</refname>
- <refpurpose>Generate HTML form of request for payment</refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>string <function>pfpro_init</function></funcdef>
- <paramdef>string <parameter>url_CM</parameter></paramdef>
- <paramdef>string <parameter>version</parameter></paramdef>
- <paramdef>string <parameter>TPE</parameter></paramdef>
- <paramdef>string <parameter>montant</parameter></paramdef>
- <paramdef>string <parameter>ref_commande</parameter></paramdef>
- <paramdef>string <parameter>texte_libre</parameter></paramdef>
- <paramdef>string <parameter>url_retour</parameter></paramdef>
- <paramdef>string <parameter>url_retour_ok</parameter></paramdef>
- <paramdef>string <parameter>url_retour_err</parameter></paramdef>
- <paramdef>string <parameter>langue</parameter></paramdef>
- <paramdef>string <parameter>code_societe</parameter></paramdef>
- <paramdef>string <parameter>texte_bouton</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- <function>cynermut_creerformulairecm</function> is used to generate the
- HTML form of request for payment.
- </para>
- <para>
- See also <function>cybermut_testmac</function>
- <function>cybermut_creerreponsecm</function>.
- </para>
- <example>
- <title>First step of payment (equiv cgi1.c)</title>
- <programlisting role="php">
-&lt;?php
-// Directory where are located the keys
-putenv("CMKEYDIR=/var/creditmut/cles");
-
-// Version number
-$VERSION="1.2";
-
- $retour = creditmut_creerformulairecm(
- "https://www.creditmutuel.fr/test/telepaiement/paiement.cgi",
- $VERSION,
- "1234567890",
- "300FRF",
- $REFERENCE,
- $TEXTE_LIBRE,
- $URL_RETOUR,
- $URL_RETOUR_OK,
- $URL_RETOUR_ERR,
- "francais",
- "company",
- "Paiement par carte bancaire");
-
-echo $retour;
-?>
- </programlisting>
- </example>
- </refsect1>
- </refentry>
-
- <refentry id="function.cybermut_testmac">
- <refnamediv>
- <refname>cybermut_testmac</refname>
- <refpurpose>Make sure that there no was data diddling contained
- in the received message of confirmation </refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>cybermut_testmac</function></funcdef>
- <paramdef>string <parameter>code_MAC</parameter></paramdef>
- <paramdef>string <parameter>version</parameter></paramdef>
- <paramdef>string <parameter>TPE</parameter></paramdef>
- <paramdef>string <parameter>cdate</parameter></paramdef>
- <paramdef>string <parameter>montant</parameter></paramdef>
- <paramdef>string <parameter>ref_commande</parameter></paramdef>
- <paramdef>string <parameter>texte_libre</parameter></paramdef>
- <paramdef>string <parameter>code-retour</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- <function>cybermut_testmac</function> is used to make sure that there was
- not data diddling contained in the received message of confirmation.
- Pay attention to parameters code-retour and texte-libre, which cannot be
- evaluated as is, because auf the dash. You must retrieve them by using:
- <programlisting role="php">
-$code_retour=$HTTP_GET_VARS["code-retour"];
-$texte_libre=$HTTP_GET_VARS["texte-libre"];
- </programlisting>
- </para>
- <para>
- See also <function>cybermut_creerformulairecm</function>
- <function>cybermut_creerreponsecm</function>.
- </para>
- <example>
- <title>Last step of payment (equiv cgi2.c)</title>
- <programlisting role="php">
-&lt;?php_track_vars?>
-&lt;?php
-// Directory where are located the keys
-putenv("CMKEYDIR=/var/creditmut/cles");
-
-// Version number
-$VERSION="1.2";
-
-$texte_libre = $HTTP_GET_VARS["texte-libre"];
-$code_retour = $HTTP_GET_VARS["code-retour"];
-
-$mac_ok = creditmut_testmac($MAC,$VERSION,$TPE,$date,$montant,$reference,$texte_libre,$code_retour);
-
-if ($mac_ok) {
-
- //
- // insert data processing here
- //
- //
-
- $result=creditmut_creerreponsecm("OK");
- } else {
- $result=creditmut_creerreponsecm("Document Falsifie");}
-
-?>
- </programlisting>
- </example>
- </refsect1>
- </refentry>
-
- <refentry id="function.cybermut_creerreponsecm">
- <refnamediv>
- <refname>cybermut_creerreponsecm</refname>
- <refpurpose>Generate the acknowledgement of delivery of the confirmation
- of payment</refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>string <function>cybermut_creerreponsecm</function></funcdef>
- <paramdef>string <parameter>phrase</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- Returns: string containing the message of aknowledgement of delivery.
- </para>
- <para>
- The parameter is "OK" if the message of confirmation of the payment
- were correctly auhentified by <function>cybermut_testmac</function>.
- Any other chain is regarded as an error message.
- </para>
- <para>
- See also <function>cybermut_creerformulairecm</function>
- <function>cybermut_testmac</function>.
- </para>
- </refsect1>
- </refentry>
- </reference>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"../../manual.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
diff --git a/ext/cybermut/php_cybermut.h b/ext/cybermut/php_cybermut.h
deleted file mode 100644
index fe390cbc47..0000000000
--- a/ext/cybermut/php_cybermut.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sylvain PAGES <spages@free.fr> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_CYBERMUT_H
-#define PHP_CYBERMUT_H
-
-extern zend_module_entry cybermut_module_entry;
-#define phpext_cybermut_ptr &cybermut_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_CYBERMUT_API __declspec(dllexport)
-#else
-#define PHP_CYBERMUT_API
-#endif
-
-PHP_MINIT_FUNCTION(cybermut);
-PHP_MSHUTDOWN_FUNCTION(cybermut);
-PHP_RINIT_FUNCTION(cybermut);
-PHP_RSHUTDOWN_FUNCTION(cybermut);
-PHP_MINFO_FUNCTION(cybermut);
-
-PHP_FUNCTION(confirm_cybermut_compiled); /* For testing, remove later. */
-PHP_FUNCTION(cybermut_creerformulairecm);
-PHP_FUNCTION(cybermut_testmac);
-PHP_FUNCTION(cybermut_creerreponsecm);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(cybermut)
- int global_variable;
-ZEND_END_MODULE_GLOBALS(cybermut)
-*/
-
-/* In every function that needs to use variables in php_cybermut_globals,
- do call CYBERMUTLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as CYBERMUTG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define CYBERMUTG(v) TSRMG(cybermut_globals_id, php_cybermut_globals *, v)
-#else
-#define CYBERMUTG(v) (cybermut_globals.v)
-#endif
-
-#endif /* PHP_CYBERMUT_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/cybermut/tests/001.phpt b/ext/cybermut/tests/001.phpt
deleted file mode 100644
index 9fb02fd784..0000000000
--- a/ext/cybermut/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for cybermut presence
---SKIPIF--
-<?php if (!extension_loaded("cybermut")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "cybermut extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-cybermut extension is available \ No newline at end of file
diff --git a/ext/cyrus/CREDITS b/ext/cyrus/CREDITS
deleted file mode 100644
index 74371fa716..0000000000
--- a/ext/cyrus/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Cyrus
-Sterling Hughes
diff --git a/ext/cyrus/config.m4 b/ext/cyrus/config.m4
deleted file mode 100644
index 5bc12fdaf4..0000000000
--- a/ext/cyrus/config.m4
+++ /dev/null
@@ -1,47 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(cyrus, for cyrus imap support,
-[ --with-cyrus Include cyrus imap support])
-
-if test "$PHP_CYRUS" != "no"; then
- found_cyrus=no
- found_sasl=no
- found_openssl=no
- for i in /usr /usr/local $PHP_CYRUS; do
- if test -r $i/include/cyrus/imclient.h && test "$found_cyrus" = "no"; then
- PHP_ADD_INCLUDE($i/include)
- PHP_SUBST(CYRUS_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(cyrus, $i/lib, CYRUS_SHARED_LIBADD)
- found_cyrus=yes
- fi
- if test -r $i/include/sasl.h && test "$found_sasl" = "no"; then
- PHP_ADD_INCLUDE($i/include)
- PHP_SUBST(SASL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sasl, $i/lib, SASL_SHARED_LIBADD)
- found_sasl=yes
- fi
- if test -r $i/include/openssl/ssl.h && test "$found_openssl" = "no" && test "$PHP_OPENSSL" = "no"; then
- PHP_SUBST(OPENSSL_SHARED_LIBADD)
- PHP_SUBST(CRYPTO_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ssl, $i/lib, OPENSSL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(crypto, $i/lib, CRYPTO_SHARED_LIBADD)
- found_openssl=yes
- fi
- done
-
- if test "$found_cyrus" = "no"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please Re-install the cyrus distribution)
- fi
-
- if test "$found_sasl" = "no"; then
- AC_MSG_RESULT(sasl not found)
- AC_MSG_ERROR(Please Re-install the cyrus distribution)
- fi
-
- AC_DEFINE(HAVE_CYRUS,1,[ ])
-
- PHP_NEW_EXTENSION(cyrus, cyrus.c, $ext_shared)
-fi
diff --git a/ext/cyrus/cyrus.c b/ext/cyrus/cyrus.c
deleted file mode 100644
index 65926152bf..0000000000
--- a/ext/cyrus/cyrus.c
+++ /dev/null
@@ -1,516 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_cyrus.h"
-
-#if HAVE_CYRUS
-
-#include <cyrus/imclient.h>
-
-#include <pwd.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-
-static int le_cyrus;
-#define le_cyrus_name "Cyrus IMAP connection"
-
-function_entry cyrus_functions[] = {
- PHP_FE(cyrus_connect, NULL)
- PHP_FE(cyrus_authenticate, NULL)
- PHP_FE(cyrus_bind, NULL)
- PHP_FE(cyrus_unbind, NULL)
- PHP_FE(cyrus_query, NULL)
- PHP_FE(cyrus_close, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry cyrus_module_entry = {
- STANDARD_MODULE_HEADER,
- "cyrus",
- cyrus_functions,
- PHP_MINIT(cyrus),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(cyrus),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_CYRUS
-ZEND_GET_MODULE(cyrus)
-#endif
-
-static void cyrus_free(zend_rsrc_list_entry *rsrc)
-{
- php_cyrus *conn = (php_cyrus *) rsrc->ptr;
-
- if (conn->client)
- imclient_close(conn->client);
-
- if (conn->host)
- efree(conn->host);
-
- if (conn->port)
- efree(conn->port);
-
- efree(conn);
-}
-
-PHP_MINIT_FUNCTION(cyrus)
-{
- le_cyrus = zend_register_list_destructors_ex(cyrus_free, NULL,
- le_cyrus_name, module_number);
-
- REGISTER_LONG_CONSTANT("CYRUS_CONN_NONSYNCLITERAL",
- IMCLIENT_CONN_NONSYNCLITERAL,
- CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CYRUS_CONN_INITIALRESPONSE",
- IMCLIENT_CONN_INITIALRESPONSE,
- CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CYRUS_CALLBACK_NUMBERED", CALLBACK_NUMBERED,
- CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CYRUS_CALLBACK_NOLITERAL", CALLBACK_NOLITERAL,
- CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(cyrus)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "Cyrus IMAP support", "enabled");
- php_info_print_table_end();
-}
-
-extern void fatal(char *s, int exit)
-{
- php_error(E_ERROR, s);
-}
-
-/* {{{ proto resource cyrus_connect([ string host [, string port [, int flags]]])
- Connect to a Cyrus IMAP server */
-PHP_FUNCTION(cyrus_connect)
-{
- zval **z_host;
- zval **z_port;
- zval **z_flags;
- php_cyrus *conn;
- struct imclient *client;
- char *host;
- char *port = NULL;
- int flags = 0;
- int error;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc > 3 ||
- zend_get_parameters_ex(argc, &z_host, &z_port, &z_flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 0) {
- convert_to_string_ex(z_host);
- host = estrndup(Z_STRVAL_PP(z_host), Z_STRLEN_PP(z_host));
- }
- else {
- host = estrndup("localhost", sizeof("localhost") - 1);
- }
-
- if (argc > 1) {
- convert_to_string_ex(z_port);
- port = estrndup(Z_STRVAL_PP(z_port), Z_STRLEN_PP(z_port));
- }
-
- if (argc > 2) {
- convert_to_long_ex(z_flags);
- flags = Z_LVAL_PP(z_flags);
- }
-
- error = imclient_connect(&client, host, port, NULL);
- switch (error) {
- case 0:
- if (client) {
- conn = ecalloc(1, sizeof *conn);
- conn->client = client;
- conn->host = host;
- conn->port = port;
-
- if (flags) {
- imclient_setflags(conn->client, flags);
- conn->flags = flags;
- }
- }
-
- break;
-
- case -1:
- php_error(E_WARNING, "Invalid hostname: %s", host);
- RETURN_FALSE;
-
- case -2:
- php_error(E_WARNING, "Invalid port: %d", port);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, conn, le_cyrus);
- conn->id = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-
-static void cyrus_capable_callback(struct imclient *client, void *rock,
- struct imclient_reply *reply)
-{
- char *token = NULL;
- char *token_buf;
- char *mechanism = rock;
-
-
- /* We need to split the reply up by the whitespace */
- token = php_strtok_r(reply->text, " ", &token_buf);
- while (token != NULL) {
- if (! strncmp(token, "AUTH=", 5)) {
- memcpy(mechanism, token + 5, strlen(token) - 5);
- break;
- }
-
- token = php_strtok_r(NULL, " ", &token_buf);
- }
-}
-
-
-/* {{{ proto bool cyrus_authenticate( resource connection [, string mechlist [, string service [, string user [, int minssf [, int maxssf]]]]])
- Authenticate agaings a Cyrus IMAP server */
-PHP_FUNCTION(cyrus_authenticate)
-{
- zval **z_conn;
- zval **z_mechlist;
- zval **z_service;
- zval **z_user;
- zval **z_minssf;
- zval **z_maxssf;
- php_cyrus *conn;
- char *mechlist;
- char *service;
- char *user;
- int minssf;
- int maxssf;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 6 ||
- zend_get_parameters_ex(argc, &z_conn, &z_mechlist, &z_service, &z_user, &z_minssf, &z_maxssf) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus);
-
- /* Determine support mechanisms */
- if (argc > 1 && Z_TYPE_PP(z_mechlist) != IS_NULL) {
- convert_to_string_ex(z_mechlist);
-
- mechlist = estrndup(Z_STRVAL_PP(z_mechlist), Z_STRLEN_PP(z_mechlist));
- }
- else {
- char tmp_mechlist[100];
- int pos = 0;
-
- /* NULL out the buffer, ensures it has a safe ending and allows us to
- * test properly for the end of the buffer
- */
- memset(tmp_mechlist, 0, sizeof tmp_mechlist);
-
- /* We'll be calling the "CAPABILITY" command, which will give us a list
- * of the types of authorization the server is capable of
- */
- imclient_addcallback(conn->client, "CAPABILITY", 0,
- cyrus_capable_callback, (void *) tmp_mechlist, 0);
- imclient_send(conn->client, NULL, NULL, "CAPABILITY");
-
- /* Grab the end of string position into pos */
- while (tmp_mechlist[pos++] != 0)
- ;
-
- /* Tack on PLAIN to whatever the auth string is */
- memcpy(tmp_mechlist + pos, " PLAIN", 6);
-
- /* Copy it onto the main buffer */
- mechlist = estrndup(tmp_mechlist, pos + 6);
- }
-
- /* Determine the service type */
- if (argc > 2 && Z_TYPE_PP(z_service) != IS_NULL) {
- convert_to_string_ex(z_service);
- service = estrndup(Z_STRVAL_PP(z_service), Z_STRLEN_PP(z_service));
- }
- else {
- service = estrndup("imap", 4);
- }
-
- /* Determine the user */
- if (argc > 3 && Z_TYPE_PP(z_user) != IS_NULL) {
- convert_to_string_ex(z_user);
- user = estrndup(Z_STRVAL_PP(z_user), Z_STRLEN_PP(z_user));
- }
- else {
- /* XXX: UGLY, but works, determines the username to use */
- user = (char *) sapi_getenv("USER", 4);
- if (! user) {
- user = (char *) getenv("USER");
- if (! user) {
- user = (char *) sapi_getenv("LOGNAME", 7);
- if (! user) {
- user = (char *) getenv("LOGNAME");
- if (! user) {
- struct passwd *pwd = getpwuid(getuid());
- if (! pwd) {
- php_error(E_WARNING, "Couldn't determine user id");
- RETURN_FALSE;
- }
-
- user = estrdup(pwd->pw_name);
- }
- }
- }
- }
- }
-
- /* Determine the minssf */
- if (argc > 4 && Z_TYPE_PP(z_minssf) != NULL) {
- convert_to_long_ex(z_minssf);
- minssf = Z_LVAL_PP(z_minssf);
- }
- else {
- minssf = 0;
- }
-
- /* Determine the maxssf */
- if (argc > 5 && Z_TYPE_PP(z_maxssf) != NULL) {
- convert_to_long_ex(z_maxssf);
- maxssf = Z_LVAL_PP(z_maxssf);
- }
- else {
- maxssf = 1000;
- }
-
- imclient_authenticate(conn->client, mechlist, service,
- user, minssf, maxssf);
-
- efree(mechlist);
- efree(service);
- efree(user);
-}
-/* }}} */
-
-
-static void cyrus_generic_callback(struct imclient *client,
- void *rock,
- struct imclient_reply *reply)
-{
- php_cyrus_callback *callback = rock;
-
- if (client) {
- zval **argv[4];
- zval *retval;
- zval *cyrus;
- zval *keyword;
- zval *text;
- zval *msgno;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(cyrus);
- MAKE_STD_ZVAL(keyword);
- MAKE_STD_ZVAL(text);
- MAKE_STD_ZVAL(msgno);
-
- ZVAL_RESOURCE(cyrus, callback->le);
- zend_list_addref(callback->le);
-
- ZVAL_STRING(keyword, reply->keyword, 1);
- ZVAL_STRING(text, reply->text, 1);
- ZVAL_LONG(msgno, reply->msgno);
-
- argv[0] = &cyrus;
- argv[1] = &keyword;
- argv[2] = &text;
- argv[3] = &msgno;
-
- if (call_user_function_ex(EG(function_table), NULL, callback->function,
- &retval, 4, argv, 0, NULL TSRMLS_CC) == FAILURE) {
- php_error(E_WARNING, "Couldn't call the %s handler",
- callback->trigger);
- }
-
- zval_ptr_dtor(argv[0]);
- zval_ptr_dtor(argv[1]);
- zval_ptr_dtor(argv[2]);
- zval_ptr_dtor(argv[3]);
-
- efree(argv);
- }
- else {
- return;
- }
-}
-
-
-/* {{{ proto bool cyrus_bind( resource connection, array callbacks)
- Bind callbacks to a Cyrus IMAP connection */
-PHP_FUNCTION(cyrus_bind)
-{
- zval **z_conn;
- zval **z_callback;
- zval **tmp;
- HashTable *hash;
- php_cyrus *conn;
- php_cyrus_callback callback;
- char *string_key;
- ulong num_key;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &z_conn, &z_callback) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus);
-
- hash = HASH_OF(*z_callback);
- if (! hash) {
- php_error(E_WARNING,
- "Second argument to cyrus_bind() must be an array or object");
- RETURN_FALSE;
- }
-
- for (zend_hash_internal_pointer_reset(hash);
- zend_hash_get_current_data(hash, (void **) &tmp) == SUCCESS;
- zend_hash_move_forward(hash)) {
- SEPARATE_ZVAL(tmp);
- zend_hash_get_current_key(hash, &string_key, &num_key, 0);
- if (! string_key)
- continue;
-
- if (! strcasecmp(string_key, "trigger")) {
- convert_to_string_ex(tmp);
- callback.trigger = estrndup(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- }
- else if (! strcasecmp(string_key, "function")) {
- callback.function = *tmp;
- zval_add_ref(&callback.function);
- }
- else if (! strcasecmp(string_key, "flags")) {
- convert_to_long_ex(tmp);
- callback.flags |= Z_LVAL_PP(tmp);
- }
- }
-
- if (! callback.trigger) {
- php_error(E_WARNING, "You must specify a trigger in your callback");
- RETURN_FALSE;
- }
-
- if (! callback.function) {
- php_error(E_WARNING, "You must specify a function in your callback");
- RETURN_FALSE;
- }
-
- callback.le = conn->id;
-
- imclient_addcallback(conn->client, callback.trigger, callback.flags,
- cyrus_generic_callback, (void **) &callback, 0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cyrus_unbind( resource connection, string trigger_name)
- Unbind ... */
-PHP_FUNCTION(cyrus_unbind)
-{
- zval **z_conn;
- zval **trigger_name;
- php_cyrus *conn;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &z_conn, &trigger_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus);
- convert_to_string_ex(trigger_name);
-
- imclient_addcallback(conn->client, Z_STRVAL_PP(trigger_name), 0,
- NULL, NULL, 0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cyrus_query( resource connection, string query)
- Send a query to a Cyrus IMAP server */
-PHP_FUNCTION(cyrus_query)
-{
- zval **z_conn;
- zval **query;
- php_cyrus *conn;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &z_conn, &query) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus);
- convert_to_string_ex(query);
-
- imclient_send(conn->client, NULL, NULL, Z_STRVAL_PP(query));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cyrus_close( resource connection)
- Close connection to a cyrus server */
-PHP_FUNCTION(cyrus_close)
-{
- zval **z_conn;
- php_cyrus *conn;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &z_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus);
-
- zend_list_delete(Z_LVAL_PP(z_conn));
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/cyrus/php_cyrus.h b/ext/cyrus/php_cyrus.h
deleted file mode 100644
index fbe6f923c6..0000000000
--- a/ext/cyrus/php_cyrus.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_CYRUS_H
-#define PHP_CYRUS_H
-
-#include "php.h"
-
-#if HAVE_CYRUS
-
-#include <cyrus/imclient.h>
-
-extern zend_module_entry cyrus_module_entry;
-#define phpext_cyrus_ptr &cyrus_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_CYRUS_API __declspec(dllexport)
-#else
-#define PHP_CYRUS_API
-#endif
-
-PHP_MINIT_FUNCTION(cyrus);
-PHP_MINFO_FUNCTION(cyrus);
-
-PHP_FUNCTION(cyrus_connect);
-PHP_FUNCTION(cyrus_authenticate);
-PHP_FUNCTION(cyrus_bind);
-PHP_FUNCTION(cyrus_unbind);
-PHP_FUNCTION(cyrus_query);
-PHP_FUNCTION(cyrus_close);
-
-typedef struct {
- struct imclient *client;
- char *host;
- char *port;
- int flags;
- int id;
-}
-php_cyrus;
-
-typedef struct {
- zval *function;
- char *trigger;
- long le;
- int flags;
-}
-php_cyrus_callback;
-
-#endif
-
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/db/CREDITS b/ext/db/CREDITS
deleted file mode 100644
index 9efbe3fe52..0000000000
--- a/ext/db/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-DBM
-Rasmus Lerdorf, Jim Winstead
diff --git a/ext/db/config.m4 b/ext/db/config.m4
deleted file mode 100644
index 9f4a102aad..0000000000
--- a/ext/db/config.m4
+++ /dev/null
@@ -1,58 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-# Checks for libraries.
-# Prefer gdbm, Berkeley DB and ndbm/dbm, in that order
-AC_DEFUN(AC_PREFERRED_DB_LIB,[
- AC_CHECK_LIB(gdbm, gdbm_open,[AC_DEFINE(GDBM,1, [Whether you have GDBM]) DBM_TYPE=gdbm; DBM_LIB=-lgdbm],
- [AC_CHECK_LIB(c, dbm_open,[AC_DEFINE(NDBM,1,[ ]) DBM_TYPE=ndbm; DBM_LIB=],
- [AC_CHECK_LIB(dbm, dbm_open,[AC_DEFINE(NDBM,1,[ ]) DBM_TYPE=ndbm; DBM_LIB=-ldbm],
- [AC_CHECK_LIB(db, dbm_open,[AC_DEFINE(NDBM,1, [Whether you have NDBM]) DBM_TYPE=ndbm; DBM_LIB=-ldb],
- [DBM_TYPE=""])
- ])
- ])
- ])
- AC_MSG_CHECKING([preferred dbm library])
- if test "a$DBM_TYPE" = a; then
- AC_MSG_RESULT(none found)
- AC_MSG_WARN(No dbm library found - using built-in flatfile support)
- else
- AC_MSG_RESULT($DBM_TYPE chosen)
- fi
- PHP_SUBST(DBM_LIB)
- PHP_SUBST(DBM_TYPE)
-])
-
-
-PHP_ARG_WITH(db, for xDBM support,
-[ --with-db Include old xDBM support (deprecated)])
-
-if test "$PHP_DB" != "no"; then
-
- AC_PREFERRED_DB_LIB
-
- if test "$DBM_LIB" = "-lgdbm"; then
- AC_CHECK_HEADER(gdbm.h, [ GDBM_INCLUDE="" ], [
- AC_MSG_RESULT("Try /usr/local/include/gdbm.h");
- AC_CHECK_HEADER(/usr/local/include/gdbm.h, [ GDBM_INCLUDE=-I/usr/local/include ],[
- AC_MSG_RESULT("Try /opt/local/include/gdbm.h");
- AC_CHECK_HEADER(/opt/local/include/gdbm.h, [ GDBM_INCLUDE=-I/opt/local/include ],[
- dnl if in /usr/pkg/include, do not add anything. See above.
- AC_MSG_RESULT("Try /usr/pkg/include/gdbm.h");
- AC_CHECK_HEADER(/usr/pkg/include/gdbm.h, [ GDBM_INCLUDE="" ],[
- AC_MSG_RESULT("Giving up - You need to install gdbm.h somewhere");
- exit
- ])
- ])
- ])
- ])
- fi
-
- if test -n "$DBM_LIB"; then
- INCLUDES="$INCLUDES $GDBM_INCLUDE"
- EXTRA_LIBS="$EXTRA_LIBS $DBM_LIB"
- fi
-
- PHP_NEW_EXTENSION(db, db.c)
-fi
diff --git a/ext/db/db.c b/ext/db/db.c
deleted file mode 100644
index f089504ad3..0000000000
--- a/ext/db/db.c
+++ /dev/null
@@ -1,1209 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include "ext/standard/flock_compat.h"
-#include "ext/standard/info.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef PHP_31
-#include "os/nt/flock.h"
-#else
-#ifdef PHP_WIN32
-#include "win32/flock.h"
-#else
-#include <sys/file.h>
-#endif
-#endif
-
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#if GDBM
-#include <gdbm.h>
-
-#define DBM_TYPE GDBM_FILE
-#define DBM_MODE_TYPE int
-#define DBM_WRITE_MODE GDBM_WRITER
-#define DBM_CREATE_MODE GDBM_WRCREAT
-#define DBM_NEW_MODE GDBM_NEWDB
-#define DBM_DEFAULT_MODE GDBM_READER
-#define DBM_OPEN(filename, mode) gdbm_open(filename, 512, mode, 0666, 0)
-#define DBM_CLOSE(dbf) gdbm_close(dbf)
-#define DBM_STORE(dbf, key, value, mode) gdbm_store(dbf, key, value, mode)
-#define DBM_FETCH(dbf, key) gdbm_fetch(dbf, key)
-#define DBM_EXISTS(dbf, key) gdbm_exists(dbf, key)
-#define DBM_DELETE(dbf, key) gdbm_delete(dbf, key)
-#define DBM_FIRSTKEY(dbf) gdbm_firstkey(dbf)
-#define DBM_NEXTKEY(dbf, key) gdbm_nextkey(dbf, key)
-
-#define DBM_INSERT GDBM_INSERT
-#define DBM_REPLACE GDBM_REPLACE
-#endif
-
-#if NDBM && !GDBM
-#if BSD2
-#define DB_DBM_HSEARCH 1
-#include <db.h>
-#else
-#ifdef HAVE_DB1_NDBM_H
-#include <db1/ndbm.h>
-#else
-#include <ndbm.h>
-#endif
-#endif
-
-#define DBM_TYPE DBM *
-#define DBM_MODE_TYPE int
-#define DBM_WRITE_MODE O_RDWR
-#define DBM_CREATE_MODE O_RDWR | O_CREAT
-#define DBM_NEW_MODE O_RDWR | O_CREAT | O_TRUNC
-#define DBM_DEFAULT_MODE O_RDONLY
-#define DBM_OPEN(filename, mode) dbm_open(filename, mode, 0666)
-#define DBM_CLOSE(dbf) dbm_close(dbf)
-#define DBM_STORE(dbf, key, value, mode) dbm_store(dbf, key, value, mode)
-#define DBM_FETCH(dbf, key) dbm_fetch(dbf, key)
-#define DBM_EXISTS(dbf, key) php_dbm_key_exists(dbf, key)
-#define DBM_DELETE(dbf, key) dbm_delete(dbf, key)
-#define DBM_FIRSTKEY(dbf) dbm_firstkey(dbf)
-#define DBM_NEXTKEY(dbf, key) dbm_nextkey(dbf)
-
-/* {{{ php_dbm_key_exists
- */
-static int php_dbm_key_exists(DBM *dbf, datum key_datum) {
- datum value_datum;
- int ret;
-
- value_datum = dbm_fetch(dbf, key_datum);
- if (value_datum.dptr)
- ret = 1;
- else
- ret = 0;
- return ret;
-}
-/* }}} */
-#endif
-
-#if !NDBM && !GDBM
-#define DBM_TYPE FILE *
-
-#define DBM_MODE_TYPE char *
-#define DBM_WRITE_MODE "r+b"
-#define DBM_CREATE_MODE "a+b"
-#define DBM_NEW_MODE "w+b"
-#define DBM_DEFAULT_MODE "r"
-#define DBM_OPEN(filename, mode) VCWD_FOPEN(filename, mode)
-#define DBM_CLOSE(dbf) fclose(dbf)
-#define DBM_STORE(dbf, key, value, mode) flatfile_store(dbf, key, value, mode)
-#define DBM_FETCH(dbf, key) flatfile_fetch(dbf, key)
-#define DBM_EXISTS(dbf, key) flatfile_findkey(dbf, key)
-#define DBM_DELETE(dbf, key) flatfile_delete(dbf, key)
-#define DBM_FIRSTKEY(dbf) flatfile_firstkey(dbf)
-#define DBM_NEXTKEY(dbf, key) flatfile_nextkey(dbf)
-
-#define DBM_INSERT 0
-#define DBM_REPLACE 1
-
-typedef struct {
- char *dptr;
- int dsize;
-} datum;
-
-int flatfile_store(FILE *dbf, datum key, datum value, int mode);
-datum flatfile_fetch(FILE *dbf, datum key);
-int flatfile_findkey(FILE *dbf, datum key);
-int flatfile_delete(FILE *dbf, datum key);
-datum flatfile_firstkey(FILE *dbf);
-datum flatfile_nextkey(FILE *dbf);
-
-#endif
-
-#include "php_db.h"
-#include "ext/standard/php_string.h"
-
-static int le_db;
-
-/* {{{ php_find_dbm
- */
-dbm_info *php_find_dbm(pval *id TSRMLS_DC)
-{
- list_entry *le;
- dbm_info *info;
- int numitems, i;
- int info_type;
-
- if (Z_TYPE_P(id) == IS_STRING) {
- numitems = zend_hash_num_elements(&EG(regular_list));
- for (i=1; i<=numitems; i++) {
- if (zend_hash_index_find(&EG(regular_list), i, (void **) &le)==FAILURE) {
- continue;
- }
- if (Z_TYPE_P(le) == le_db) {
- info = (dbm_info *)(le->ptr);
- if (!strcmp(info->filename, Z_STRVAL_P(id))) {
- return (dbm_info *)(le->ptr);
- }
- }
- }
- }
-
- /* didn't find it as a database filename, try as a number */
- convert_to_long(id);
- info = zend_list_find(Z_LVAL_P(id), &info_type);
- if (info_type != le_db)
- return NULL;
- return info;
-}
-/* }}} */
-
-/* {{{ php_get_info_db
- */
-static char *php_get_info_db(void)
-{
- static char temp1[128];
- static char temp[256];
-
- temp1[0]='\0';
- temp[0]='\0';
-
-#ifdef DB_VERSION_STRING /* using sleepycat dbm */
- strcat(temp, DB_VERSION_STRING);
-#endif
-
-#if GDBM
- sprintf(temp1, "%s", gdbm_version);
- strcat(temp, temp1);
-#endif
-
-#if NDBM && !GDBM
- strcat(temp, "ndbm support enabled");
-#endif
-
-#if !GDBM && !NDBM
- strcat(temp, "flat file support enabled");
-#endif
-
-#if NFS_HACK
- strcat(temp, "NFS hack in effect");
-#endif
-
- if (!*temp)
- strcat(temp, "No database support");
-
- return temp;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(db)
-{
- /* this isn't pretty ... should break out the info a bit more (cmv) */
- php_info_print_box_start(0);
- php_printf(php_get_info_db());
- php_info_print_box_end();
-}
-/* }}} */
-
-/* {{{ proto string dblist(void)
- Describes the dbm-compatible library being used */
-PHP_FUNCTION(dblist)
-{
- char *str;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- str = php_get_info_db();
- RETURN_STRING(str, 1);
-}
-/* }}} */
-
-/* {{{ proto int dbmopen(string filename, string mode)
- Opens a dbm database */
-PHP_FUNCTION(dbmopen)
-{
- pval *filename, *mode;
- dbm_info *info=NULL;
- int ret;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters(ht, 2, &filename, &mode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string(filename);
- convert_to_string(mode);
-
- info = php_dbm_open(Z_STRVAL_P(filename), Z_STRVAL_P(mode) TSRMLS_CC);
- if (info) {
- ret = zend_list_insert(info, le_db);
- RETURN_LONG(ret);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_dbm_open
- */
-dbm_info *php_dbm_open(char *filename, char *mode TSRMLS_DC)
-{
- dbm_info *info;
- int ret, lock=0;
- char *lockfn = NULL;
- int lockfd = 0;
-#if NFS_HACK
- int last_try = 0;
- struct stat sb;
- int retries = 0;
-#endif
- DBM_TYPE dbf=NULL;
- DBM_MODE_TYPE imode;
-
- if (filename == NULL) {
- php_error(E_WARNING, "NULL filename passed to php_dbm_open()");
- return NULL;
- }
-
- if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return NULL;
- }
-
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- return NULL;
- }
-
- switch (*mode) {
- case 'w':
- imode = DBM_WRITE_MODE;
- lock = 1;
- break;
- case 'c':
- imode = DBM_CREATE_MODE;
- lock = 1;
- break;
- case 'n':
- imode = DBM_NEW_MODE;
- lock = 1;
- break;
- default:
- imode = DBM_DEFAULT_MODE;
- lock = 0;
- break;
- }
-
- if (lock) {
- lockfn = emalloc(strlen(filename) + 5);
- strcpy(lockfn, filename);
- strcat(lockfn, ".lck");
-
-#if NFS_HACK
- while((last_try = VCWD_STAT(lockfn, &sb))==0) {
- retries++;
- php_sleep(1);
- if (retries>30) break;
- }
- if (last_try!=0) {
- lockfd = open(lockfn, O_RDWR|O_CREAT, 0644);
- close(lockfd);
- } else {
- php_error(E_WARNING, "File appears to be locked [%s]\n", lockfn);
- return -1;
- }
-#else /* NFS_HACK */
-
- lockfd = VCWD_OPEN_MODE(lockfn, O_RDWR|O_CREAT, 0644);
-
- if (lockfd) {
- flock(lockfd, LOCK_EX);
- close(lockfd);
- } else {
- php_error(E_WARNING, "Unable to establish lock: %s", filename);
- }
-#endif /* else NFS_HACK */
-
- }
-
- dbf = DBM_OPEN(filename, imode);
-
-#if !NDBM && !GDBM
- if (dbf) {
- setvbuf(dbf, NULL, _IONBF, 0);
- }
-#endif
-
- if (dbf) {
- info = (dbm_info *)emalloc(sizeof(dbm_info));
- if (!info) {
- php_error(E_ERROR, "problem allocating memory!");
- return NULL;
- }
-
- info->filename = estrdup(filename);
- info->lockfn = lockfn;
- info->lockfd = lockfd;
- info->dbf = dbf;
-
- return info;
- } else {
-#if GDBM
- php_error(E_WARNING, "dbmopen_gdbm(%s): %d [%s], %d [%s]", filename, gdbm_errno, gdbm_strerror(gdbm_errno), errno, strerror(errno));
- if (gdbm_errno)
- ret = gdbm_errno;
- else if (errno)
- ret = errno;
- else
- ret = -1;
-#else
-#if NDBM
-#if PHP_DEBUG
- php_error(E_WARNING, "dbmopen_ndbm(%s): errno = %d [%s]\n", filename, errno, strerror(errno));
-#endif
- if (errno) ret=errno;
- else ret = -1;
-#else
-#if PHP_DEBUG
- php_error(E_WARNING, "dbmopen_flatfile(%s): errno = %d [%s]\n", filename, errno, strerror(errno));
-#endif
- if (errno) ret=errno;
- else ret = -1;
-#endif
-#endif
-
-#if NFS_HACK
- if (lockfn) {
- VCWD_UNLINK(lockfn);
- }
-#endif
- if (lockfn) efree(lockfn);
- }
-
- return NULL;
-}
-/* }}} */
-
-/* {{{ proto bool dbmclose(int dbm_identifier)
- Closes a dbm database */
-PHP_FUNCTION(dbmclose)
-{
- pval *id;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters(ht, 1, &id)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(id);
-
- if (zend_list_delete(Z_LVAL_P(id)) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_dbm_close
- */
-void php_dbm_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int ret = 0;
- dbm_info *info = (dbm_info *)rsrc->ptr;
- DBM_TYPE dbf;
- int lockfd;
-
- dbf = info->dbf;
-
-#if NFS_HACK
- VCWD_UNLINK(info->lockfn);
-#else
- if (info->lockfn) {
- lockfd = VCWD_OPEN_MODE(info->lockfn, O_RDWR, 0644);
- flock(lockfd, LOCK_UN);
- close(lockfd);
- }
-#endif
-
- if (dbf)
- DBM_CLOSE(dbf);
-
- /* free the memory used by the dbm_info struct */
- if (info->filename) efree(info->filename);
- if (info->lockfn) efree(info->lockfn);
- efree(info);
-}
-/* }}} */
-
-/*
- * ret = -1 means that database was opened for read-only
- * ret = 0 success
- * ret = 1 key already exists - nothing done
- */
-/* {{{ proto int dbminsert(int dbm_identifier, string key, string value)
- Inserts a value for a key in a dbm database */
-PHP_FUNCTION(dbminsert)
-{
- pval *id, *key, *value;
- dbm_info *info;
- int ret;
-
- if (ZEND_NUM_ARGS()!=3||zend_get_parameters(ht, 3, &id, &key, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(key);
- convert_to_string(value);
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_insert(info, Z_STRVAL_P(key), Z_STRVAL_P(value) TSRMLS_CC);
- RETURN_LONG(ret);
-}
-/* }}} */
-
-
-/* {{{ php_dbm_insert
- */
-int php_dbm_insert(dbm_info *info, char *key, char *value TSRMLS_DC) {
- datum key_datum, value_datum;
- int ret;
- DBM_TYPE dbf;
-
- php_stripslashes(key, NULL TSRMLS_CC);
- php_stripslashes(value, NULL TSRMLS_CC);
-
- value_datum.dptr = estrdup(value);
- value_datum.dsize = strlen(value);
-
- key_datum.dptr = estrdup(key);
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return 1;
- }
-
- ret = DBM_STORE(dbf, key_datum, value_datum, DBM_INSERT);
-
- /* free the memory */
- efree(key_datum.dptr); efree(value_datum.dptr);
-
- return(ret);
-}
-/* }}} */
-
-/* {{{ proto int dbmreplace(int dbm_identifier, string key, string value)
- Replaces the value for a key in a dbm database */
-PHP_FUNCTION(dbmreplace)
-{
- pval *id, *key, *value;
- dbm_info *info;
- int ret;
-
- if (ZEND_NUM_ARGS()!=3||zend_get_parameters(ht, 3, &id, &key, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(key);
- convert_to_string(value);
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_replace(info, Z_STRVAL_P(key), Z_STRVAL_P(value) TSRMLS_CC);
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ php_dbm_replace
- */
-int php_dbm_replace(dbm_info *info, char *key, char *value TSRMLS_DC)
-{
- DBM_TYPE dbf;
- int ret;
- datum key_datum, value_datum;
-
- if (PG(magic_quotes_runtime)) {
- php_stripslashes(key, NULL TSRMLS_CC);
- php_stripslashes(value, NULL TSRMLS_CC);
- }
-
- value_datum.dptr = estrdup(value);
- value_datum.dsize = strlen(value);
-
- key_datum.dptr = estrdup(key);
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return 1;
- }
-
- ret = DBM_STORE(dbf, key_datum, value_datum, DBM_REPLACE);
-
- /* free the memory */
- efree(key_datum.dptr); efree(value_datum.dptr);
-
- return(ret);
-}
-/* }}} */
-
-/* {{{ proto string dbmfetch(int dbm_identifier, string key)
- Fetches a value for a key from a dbm database */
-PHP_FUNCTION(dbmfetch)
-{
- pval *id, *key;
- dbm_info *info;
- char *ret;
-
- if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(key);
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_fetch(info, Z_STRVAL_P(key) TSRMLS_CC);
- if (ret) {
- RETVAL_STRING(ret, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_dbm_fetch
- */
-char *php_dbm_fetch(dbm_info *info, char *key TSRMLS_DC)
-{
- datum key_datum, value_datum;
- char *ret;
- DBM_TYPE dbf;
-
- key_datum.dptr = key;
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
- value_datum.dptr = NULL;
- value_datum.dsize = 0;
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return(NULL);
- }
-
- value_datum = DBM_FETCH(dbf, key_datum);
-
- if (value_datum.dptr) {
- ret = (char *)emalloc(sizeof(char) * value_datum.dsize + 1);
- strncpy(ret, value_datum.dptr, value_datum.dsize);
- ret[value_datum.dsize] = '\0';
-
-#if GDBM
-/* all but NDBM use malloc to allocate the content blocks, so we need to free it */
- free(value_datum.dptr);
-#else
-# if !NDBM
- efree(value_datum.dptr);
-# endif
-#endif
- }
- else
- ret = NULL;
-
- if (ret && PG(magic_quotes_runtime)) {
- ret = php_addslashes(ret, value_datum.dsize, NULL, 1 TSRMLS_CC);
- }
- return(ret);
-}
-/* }}} */
-
-/* {{{ proto int dbmexists(int dbm_identifier, string key)
- Tells if a value exists for a key in a dbm database */
-PHP_FUNCTION(dbmexists)
-{
- pval *id, *key;
- dbm_info *info;
- int ret;
-
- if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(key);
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_exists(info, Z_STRVAL_P(key));
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ php_dbm_exists
- */
-int php_dbm_exists(dbm_info *info, char *key) {
- datum key_datum;
- int ret;
- DBM_TYPE dbf;
-
- key_datum.dptr = key;
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return(0);
- }
-
- ret = DBM_EXISTS(dbf, key_datum);
-
- return(ret);
-}
-/* }}} */
-
-/* {{{ proto int dbmdelete(int dbm_identifier, string key)
- Deletes the value for a key from a dbm database */
-PHP_FUNCTION(dbmdelete)
-{
- pval *id, *key;
- dbm_info *info;
- int ret;
-
- if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(key);
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_delete(info, Z_STRVAL_P(key));
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ php_dbm_delete
- */
-int php_dbm_delete(dbm_info *info, char *key) {
- datum key_datum;
- int ret;
- DBM_TYPE dbf;
-
- key_datum.dptr = key;
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return(0);
- }
-
- ret = DBM_DELETE(dbf, key_datum);
- return(ret);
-}
-/* }}} */
-
-/* {{{ proto string dbmfirstkey(int dbm_identifier)
- Retrieves the first key from a dbm database */
-PHP_FUNCTION(dbmfirstkey)
-{
- pval *id;
- dbm_info *info;
- char *ret;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters(ht, 1, &id)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_first_key(info);
- if (!ret) {
- RETURN_FALSE;
- } else {
- RETVAL_STRING(ret, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_dbm_first_key
- */
-char *php_dbm_first_key(dbm_info *info) {
- datum ret_datum;
- char *ret;
- DBM_TYPE dbf;
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return(NULL);
- }
-
- /* explicitly zero-out ret_datum */
- ret_datum.dptr = NULL;
- ret_datum.dsize = 0;
-
- ret_datum = DBM_FIRSTKEY(dbf);
-
- if (!ret_datum.dptr)
- return NULL;
-
- ret = (char *)emalloc((ret_datum.dsize + 1) * sizeof(char));
- strncpy(ret, ret_datum.dptr, ret_datum.dsize);
- ret[ret_datum.dsize] = '\0';
-
-#if !NDBM & !GDBM
- efree(ret_datum.dptr);
-#endif
-
- return (ret);
-}
-/* }}} */
-
-/* {{{ proto string dbmnextkey(int dbm_identifier, string key)
- Retrieves the next key from a dbm database */
-PHP_FUNCTION(dbmnextkey)
-{
- pval *id, *key;
- dbm_info *info;
- char *ret;
-
- if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(key);
-
- info = php_find_dbm(id TSRMLS_CC);
- if (!info) {
- php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id));
- RETURN_FALSE;
- }
-
- ret = php_dbm_nextkey(info, Z_STRVAL_P(key) TSRMLS_CC);
- if (!ret) {
- RETURN_FALSE;
- } else {
- RETVAL_STRING(ret, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_dbm_nextkey
- */
-char *php_dbm_nextkey(dbm_info *info, char *key TSRMLS_DC)
-{
- datum key_datum, ret_datum;
- char *ret;
- DBM_TYPE dbf;
-
- key_datum.dptr = key;
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "Unable to locate dbm file");
- return(NULL);
- }
-
- /* explicitly zero-out ret_datum */
- ret_datum.dptr = NULL;
- ret_datum.dsize = 0;
-
- ret_datum = DBM_NEXTKEY(dbf, key_datum);
-
- if (ret_datum.dptr) {
- ret = (char *)emalloc(sizeof(char) * ret_datum.dsize + 1);
- strncpy(ret, ret_datum.dptr, ret_datum.dsize);
- ret[ret_datum.dsize] = '\0';
-#if GDBM
-/* GDBM uses malloc to allocate the value_datum block, so we need to free it */
- free(ret_datum.dptr);
-#else
-# if !NDBM
- efree(ret_datum.dptr);
-# endif
-#endif
- }
- else ret=NULL;
-
- if (ret && PG(magic_quotes_runtime)) {
- ret = php_addslashes(ret, ret_datum.dsize, NULL, 1 TSRMLS_CC);
- }
- return(ret);
-}
-/* }}} */
-
-#if !GDBM && !NDBM
-static long CurrentFlatFilePos = 0L;
-/* {{{ flatfile_store
- */
-int flatfile_store(FILE *dbf, datum key_datum, datum value_datum, int mode) {
- int ret;
-
- if (mode == DBM_INSERT) {
- if (flatfile_findkey(dbf, key_datum)) {
- return 1;
- }
- fseek(dbf, 0L, SEEK_END);
- fprintf(dbf, "%d\n", key_datum.dsize);
- fflush(dbf);
- ret = write(fileno(dbf), key_datum.dptr, key_datum.dsize);
- fprintf(dbf, "%d\n", value_datum.dsize);
- fflush(dbf);
- ret = write(fileno(dbf), value_datum.dptr, value_datum.dsize);
- } else { /* DBM_REPLACE */
- flatfile_delete(dbf, key_datum);
- fprintf(dbf, "%d\n", key_datum.dsize);
- fflush(dbf);
- ret = write(fileno(dbf), key_datum.dptr, key_datum.dsize);
- fprintf(dbf, "%d\n", value_datum.dsize);
- ret = write(fileno(dbf), value_datum.dptr, value_datum.dsize);
- }
-
- if (ret>0)
- ret=0;
- return ret;
-}
-/* }}} */
-
-/* {{{ flatfile_fetch
- */
-datum flatfile_fetch(FILE *dbf, datum key_datum) {
- datum value_datum = {NULL, 0};
- int num=0, buf_size=1024;
- char *buf;
-
- if (flatfile_findkey(dbf, key_datum)) {
- buf = emalloc((buf_size+1) * sizeof(char));
- if (fgets(buf, 15, dbf)) {
- num = atoi(buf);
- if (num > buf_size) {
- buf_size+=num;
- buf = emalloc((buf_size+1)*sizeof(char));
- }
- read(fileno(dbf), buf, num);
- value_datum.dptr = buf;
- value_datum.dsize = num;
- }
- }
- return value_datum;
-}
-/* }}} */
-
-/* {{{ flatfile_delete
- */
-int flatfile_delete(FILE *dbf, datum key_datum) {
- char *key = key_datum.dptr;
- int size = key_datum.dsize;
-
- char *buf;
- int num, buf_size = 1024;
- long pos;
-
- rewind(dbf);
-
- buf = emalloc((buf_size + 1)*sizeof(char));
- while(!feof(dbf)) {
- /* read in the length of the key name */
- if (!fgets(buf, 15, dbf))
- break;
- num = atoi(buf);
- if (num > buf_size) {
- buf_size += num;
- if (buf) efree(buf);
- buf = emalloc((buf_size+1)*sizeof(char));
- }
- pos = ftell(dbf);
-
- /* read in the key name */
- num = fread(buf, sizeof(char), num, dbf);
- if (num<0) break;
- *(buf+num) = '\0';
-
- if (size == num && !memcmp(buf, key, size)) {
- fseek(dbf, pos, SEEK_SET);
- fputc(0, dbf);
- fflush(dbf);
- fseek(dbf, 0L, SEEK_END);
- if (buf) efree(buf);
- return SUCCESS;
- }
-
- /* read in the length of the value */
- if (!fgets(buf, 15, dbf))
- break;
- num = atoi(buf);
- if (num > buf_size) {
- buf_size+=num;
- if (buf) efree(buf);
- buf = emalloc((buf_size+1)*sizeof(char));
- }
- /* read in the value */
- num = fread(buf, sizeof(char), num, dbf);
- if (num<0)
- break;
- }
- if (buf) efree(buf);
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ flatfile_findkey
- */
-int flatfile_findkey(FILE *dbf, datum key_datum) {
- char *buf = NULL;
- int num;
- int buf_size=1024;
- int ret=0;
- void *key = key_datum.dptr;
- int size = key_datum.dsize;
-
- rewind(dbf);
- buf = emalloc((buf_size+1)*sizeof(char));
- while (!feof(dbf)) {
- if (!fgets(buf, 15, dbf)) break;
- num = atoi(buf);
- if (num > buf_size) {
- if (buf) efree(buf);
- buf_size+=num;
- buf = emalloc((buf_size+1)*sizeof(char));
- }
- num = fread(buf, sizeof(char), num, dbf);
- if (num<0) break;
- *(buf+num) = '\0';
- if (size == num) {
- if (!memcmp(buf, key, size)) {
- ret = 1;
- break;
- }
- }
- if (!fgets(buf, 15, dbf))
- break;
- num = atoi(buf);
- if (num > buf_size) {
- if (buf) efree(buf);
- buf_size+=num;
- buf = emalloc((buf_size+1)*sizeof(char));
- }
- num = fread(buf, sizeof(char), num, dbf);
- if (num<0) break;
- *(buf+num) = '\0';
- }
- if (buf) efree(buf);
- return(ret);
-}
-/* }}} */
-
-/* {{{ flatfile_firstkey
- */
-datum flatfile_firstkey(FILE *dbf) {
- datum buf;
- int num;
- int buf_size=1024;
-
- rewind(dbf);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
- while(!feof(dbf)) {
- if (!fgets(buf.dptr, 15, dbf)) break;
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- if (buf.dptr) efree(buf.dptr);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
- }
- num=read(fileno(dbf), buf.dptr, num);
- if (num<0) break;
- buf.dsize = num;
- if (*(buf.dptr)!=0) {
- CurrentFlatFilePos = ftell(dbf);
- return(buf);
- }
- if (!fgets(buf.dptr, 15, dbf)) break;
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- if (buf.dptr) efree(buf.dptr);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
- }
- num=read(fileno(dbf), buf.dptr, num);
- if (num<0) break;
- }
- if (buf.dptr) efree(buf.dptr);
- buf.dptr = NULL;
- return(buf);
-}
-/* }}} */
-
-/* {{{ latfile_nextkey
- */
-datum flatfile_nextkey(FILE *dbf) {
- datum buf;
- int num;
- int buf_size=1024;
-
- fseek(dbf, CurrentFlatFilePos, SEEK_SET);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
- while(!feof(dbf)) {
- if (!fgets(buf.dptr, 15, dbf)) break;
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- if (buf.dptr) efree(buf.dptr);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
- }
- num=read(fileno(dbf), buf.dptr, num);
- if (num<0) break;
- if (!fgets(buf.dptr, 15, dbf)) break;
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- if (buf.dptr) efree(buf.dptr);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
- }
- num=read(fileno(dbf), buf.dptr, num);
- if (num<0) break;
- buf.dsize = num;
- if (*(buf.dptr)!=0) {
- CurrentFlatFilePos = ftell(dbf);
- return(buf);
- }
- }
- if (buf.dptr) efree(buf.dptr);
- buf.dptr = NULL;
- return(buf);
-}
-/* }}} */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(db)
-{
- le_db = zend_register_list_destructors_ex(php_dbm_close, NULL, "dbm", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(db)
-{
-#if !GDBM && !NDBM
- CurrentFlatFilePos = 0L;
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ dbm_functions[]
- */
-function_entry dbm_functions[] = {
- PHP_FE(dblist, NULL)
- PHP_FE(dbmopen, NULL)
- PHP_FE(dbmclose, NULL)
- PHP_FE(dbminsert, NULL)
- PHP_FE(dbmfetch, NULL)
- PHP_FE(dbmreplace, NULL)
- PHP_FE(dbmexists, NULL)
- PHP_FE(dbmdelete, NULL)
- PHP_FE(dbmfirstkey, NULL)
- PHP_FE(dbmnextkey, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry dbm_module_entry = {
- STANDARD_MODULE_HEADER,
- "db",
- dbm_functions,
- PHP_MINIT(db),
- NULL,
- PHP_RINIT(db),
- NULL,
- PHP_MINFO(db),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DB
-ZEND_GET_MODULE(dbm)
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/db/db.dsp b/ext/db/db.dsp
deleted file mode 100644
index a514dba9aa..0000000000
--- a/ext/db/db.dsp
+++ /dev/null
@@ -1,122 +0,0 @@
-# Microsoft Developer Studio Project File - Name="db" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=db - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "db.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "db.mak" CFG="db - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "db - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "db - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "db - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DB" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DB_EXPORTS" /D "COMPILE_DL_DB" /D ZTS=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_INET_ATON" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_db.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "db - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DB" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DB_EXPORTS" /D "COMPILE_DL_DB" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_INET_ATON" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_db.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "db - Win32 Release_TS"
-# Name "db - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\standard\flock_compat.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\standard\flock_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_db.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/db/php_db.h b/ext/db/php_db.h
deleted file mode 100644
index 8fc598a57f..0000000000
--- a/ext/db/php_db.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-#ifndef PHP_DB_H
-#define PHP_DB_H
-
-
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-
-extern zend_module_entry dbm_module_entry;
-#define phpext_db_ptr &dbm_module_entry
-
-
-
-typedef struct dbm_info {
- char *filename;
- char *lockfn;
- int lockfd;
- void *dbf;
-} dbm_info;
-
-/*
- we're not going to bother with flatfile on win32
- because the dbm module will be external, and we
- do not want flatfile compiled staticly
-*/
-#if defined(PHP_WIN32) && !defined(COMPILE_DL_DB)
-#undef phpext_db_ptr
-#define phpext_db_ptr NULL
-#endif
-
-dbm_info *php_find_dbm(pval *id TSRMLS_DC);
-void php_dbm_close(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-dbm_info *php_dbm_open(char *filename, char *mode TSRMLS_DC);
-int php_dbm_insert(dbm_info *info, char *key, char *value TSRMLS_DC);
-char *php_dbm_fetch(dbm_info *info, char *key TSRMLS_DC);
-int php_dbm_replace(dbm_info *info, char *key, char *value TSRMLS_DC);
-int php_dbm_exists(dbm_info *info, char *key);
-int php_dbm_delete(dbm_info *info, char *key);
-char *php_dbm_first_key(dbm_info *info);
-char *php_dbm_nextkey(dbm_info *info, char *key TSRMLS_DC);
-
-/* db file functions */
-PHP_MINIT_FUNCTION(db);
-PHP_RINIT_FUNCTION(db);
-PHP_MINFO_FUNCTION(db);
-
-PHP_FUNCTION(dblist);
-PHP_FUNCTION(dbmopen);
-PHP_FUNCTION(dbmclose);
-PHP_FUNCTION(dbminsert);
-PHP_FUNCTION(dbmfetch);
-PHP_FUNCTION(dbmreplace);
-PHP_FUNCTION(dbmexists);
-PHP_FUNCTION(dbmdelete);
-PHP_FUNCTION(dbmfirstkey);
-PHP_FUNCTION(dbmnextkey);
-
-#endif /* PHP_DB_H */
diff --git a/ext/db/tests/001.phpt b/ext/db/tests/001.phpt
deleted file mode 100644
index ea95d3d70a..0000000000
--- a/ext/db/tests/001.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-DBM File Creation Test
---SKIPIF--
-<?php if (!extension_loaded("db")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- dbmopen("./test.dbm","n");
- dbmclose("./test.dbm");
-?>
---EXPECT--
-
diff --git a/ext/db/tests/002.phpt b/ext/db/tests/002.phpt
deleted file mode 100644
index d0bc710f08..0000000000
--- a/ext/db/tests/002.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-DBM Insert/Fetch Test
---SKIPIF--
-<?php if (!extension_loaded("db")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- dbmopen("./test.dbm","n");
- dbminsert("./test.dbm","key1","This is a test insert");
- $a = dbmfetch("./test.dbm","key1");
- dbmclose("./test.dbm");
- echo $a
-?>
---EXPECT--
-This is a test insert
diff --git a/ext/db/tests/003.phpt b/ext/db/tests/003.phpt
deleted file mode 100644
index 319325c398..0000000000
--- a/ext/db/tests/003.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-DBM Insert/Replace/Fetch Test
---SKIPIF--
-<?php if (!extension_loaded("db")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- dbmopen("./test.dbm","n");
- dbminsert("./test.dbm","key1","This is a test insert");
- dbmreplace("./test.dbm","key1","This is the replacement text");
- $a = dbmfetch("./test.dbm","key1");
- dbmclose("./test.dbm");
- echo $a
-?>
---EXPECT--
-This is the replacement text
diff --git a/ext/db/tests/004.phpt b/ext/db/tests/004.phpt
deleted file mode 100644
index 1becfcfdcd..0000000000
--- a/ext/db/tests/004.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-DBM Multiple Insert/Fetch Test
---SKIPIF--
-<?php if (!extension_loaded("db")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- dbmopen("./test.dbm","n");
- dbminsert("./test.dbm","key1","Content String 1");
- dbminsert("./test.dbm","key2","Content String 2");
- dbminsert("./test.dbm","key3","Third Content String");
- dbminsert("./test.dbm","key4","Another Content String");
- dbminsert("./test.dbm","key5","The last content string");
- $a = dbmfetch("./test.dbm","key4");
- $b = dbmfetch("./test.dbm","key2");
- dbmclose("./test.dbm");
- echo "$a $b";
-?>
---EXPECT--
-Another Content String Content String 2
diff --git a/ext/db/tests/005.phpt b/ext/db/tests/005.phpt
deleted file mode 100644
index de33201883..0000000000
--- a/ext/db/tests/005.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-DBM FirstKey/NextKey Loop Test With 5 Items
---SKIPIF--
-<?php if (!extension_loaded("db")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- dbmopen("./test.dbm","n");
- dbminsert("./test.dbm","key1","Content String 1");
- dbminsert("./test.dbm","key2","Content String 2");
- dbminsert("./test.dbm","key3","Third Content String");
- dbminsert("./test.dbm","key4","Another Content String");
- dbminsert("./test.dbm","key5","The last content string");
- $a = dbmfirstkey("./test.dbm");
- $i=0;
- while($a) {
- $a = dbmnextkey("./test.dbm",$a);
- $i++;
- }
- dbmclose("./test.dbm");
- echo $i
-?>
---EXPECT--
-5
diff --git a/ext/db/tests/006.phpt b/ext/db/tests/006.phpt
deleted file mode 100644
index 3428ce3948..0000000000
--- a/ext/db/tests/006.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-DBM FirstKey/NextKey with 2 deletes
---SKIPIF--
-<?php if (!extension_loaded("db")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- dbmopen("./test.dbm","n");
- dbminsert("./test.dbm","key1","Content String 1");
- dbminsert("./test.dbm","key2","Content String 2");
- dbminsert("./test.dbm","key3","Third Content String");
- dbminsert("./test.dbm","key4","Another Content String");
- dbminsert("./test.dbm","key5","The last content string");
- dbmdelete("./test.dbm","key3");
- dbmdelete("./test.dbm","key1");
- $a = dbmfirstkey("./test.dbm");
- $i=0;
- while($a) {
- $a = dbmnextkey("./test.dbm",$a);
- $i++;
- }
- dbmclose("./test.dbm");
- echo $i
-?>
---EXPECT--
-3
diff --git a/ext/dba/CREDITS b/ext/dba/CREDITS
deleted file mode 100644
index 2f06307693..0000000000
--- a/ext/dba/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-DBA
-Sascha Schumann
diff --git a/ext/dba/config.m4 b/ext/dba/config.m4
deleted file mode 100644
index 16991752f1..0000000000
--- a/ext/dba/config.m4
+++ /dev/null
@@ -1,237 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_TEMP_LDFLAGS,[
- old_LDFLAGS=$LDFLAGS
- LDFLAGS="$1 $LDFLAGS"
- $2
- LDFLAGS=$old_LDFLAGS
-])
-
-
-dnl Assign INCLUDE/LFLAGS from PREFIX
-AC_DEFUN(PHP_DBA_STD_ASSIGN,[
- if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then
- THIS_INCLUDE=$THIS_PREFIX/include
- THIS_LFLAGS=$THIS_PREFIX/lib
- fi
-])
-
-dnl Standard check
-AC_DEFUN(PHP_DBA_STD_CHECK,[
- THIS_RESULT="yes"
- if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then
- AC_MSG_ERROR(cannot find necessary header file(s))
- fi
- if test "$THIS_LIBS" = "" ; then
- AC_MSG_ERROR(cannot find necessary library)
- fi
-])
-
-dnl Attach THIS_x to DBA_x
-AC_DEFUN(PHP_DBA_STD_ATTACH,[
- PHP_ADD_INCLUDE($THIS_INCLUDE)
- PHP_ADD_LIBRARY_WITH_PATH($THIS_LIBS, $THIS_LFLAGS, DBA_SHARED_LIBADD)
- unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX
-])
-
-dnl Print the result message
-AC_DEFUN(AC_DBA_STD_RESULT,[
- if test "$THIS_RESULT" = "yes"; then
- HAVE_DBA=1
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- unset THIS_RESULT
-])
-
-PHP_ARG_ENABLE(dba,whether to enable DBA,
-[ --enable-dba=shared Build DBA as a shared module])
-
-AC_ARG_WITH(gdbm,
-[ --with-gdbm[=DIR] Include GDBM support],[
- if test "$withval" != "no"; then
- for i in /usr/local /usr $withval; do
- if test -f "$i/include/gdbm.h"; then
- THIS_PREFIX="$i"
- fi
- done
-
- unset ac_cv_lib_gdbm_gdbm_open
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[
- AC_CHECK_LIB(gdbm, gdbm_open, [AC_DEFINE(DBA_GDBM, 1, [ ]) THIS_LIBS=gdbm])
- ])
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_MSG_CHECKING(for GDBM support)
-AC_DBA_STD_RESULT
-
-AC_ARG_WITH(ndbm,
-[ --with-ndbm[=DIR] Include NDBM support],[
- if test "$withval" != "no"; then
- for i in /usr/local /usr $withval; do
- if test -f "$i/include/db1/ndbm.h" ; then
- THIS_PREFIX=$i
- NDBM_EXTRA=db1/ndbm.h
- elif test -f "$i/include/ndbm.h" ; then
- THIS_PREFIX=$i
- NDBM_EXTRA=ndbm.h
- fi
- done
-
- if test "$NDBM_EXTRA" != ""; then
- AC_DEFINE_UNQUOTED(NDBM_INCLUDE_FILE, "$NDBM_EXTRA", [ ])
- fi
-
- for LIB in db1 ndbm c; do
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[
- AC_CHECK_LIB($LIB, dbm_open, [AC_DEFINE(DBA_NDBM,1, [ ]) THIS_LIBS=$LIB])
- ])
- done
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_MSG_CHECKING(for NDBM support)
-AC_DBA_STD_RESULT
-
-AC_ARG_WITH(db2,
-[ --with-db2[=DIR] Include Berkeley DB2 support],[
- if test "$withval" != "no"; then
- for i in /usr/local /usr /usr/BerkeleyDB $withval/BerkeleyDB $withval; do
- if test -f "$i/db2/db.h"; then
- THIS_PREFIX=$i
- DB2_EXTRA=db2
- elif test -f "$i/include/db2/db.h"; then
- THIS_PREFIX=$i
- DB2_EXTRA=db2/db.h
- elif test -f "$i/include/db/db2.h"; then
- THIS_PREFIX=$i
- DB2_EXTRA=db/db2.h
- elif test -f "$i/include/db2.h"; then
- THIS_PREFIX=$i
- DB2_EXTRA=db2.h
- elif test -f "$i/include/db.h" ; then
- THIS_PREFIX=$i
- DB2_EXTRA=db.h
- fi
- done
-
- if test "$DB2_EXTRA" = "db2" ; then
- DBA_INCLUDE="$DBA_INCLUDE -I$THIS_PREFIX/db2"
- DB2_EXTRA=db.h
- fi
-
- if test -n "$DB2_EXTRA"; then
- AC_DEFINE_UNQUOTED(DB2_INCLUDE_FILE, "$DB2_EXTRA", [ ])
- fi
-
- for LIB in db db2 c; do
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[
- AC_CHECK_LIB($LIB, db_appinit, [AC_DEFINE(DBA_DB2,1,[ ]) THIS_LIBS=$LIB])
- ])
- done
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_MSG_CHECKING(for Berkeley DB2 support)
-AC_DBA_STD_RESULT
-
-AC_ARG_WITH(db3,
-[ --with-db3[=DIR] Include Berkeley DB3 support],[
- if test "$withval" != "no"; then
- for i in /usr/local /usr /usr/local/BerkeleyDB.3.0 $withval; do
- if test -f "$i/include/db3/db.h"; then
- THIS_PREFIX=$i
- DB3_EXTRA=db3/db.h
- elif test -f "$i/include/db.h" ; then
- THIS_PREFIX=$i
- DB3_EXTRA=db.h
- fi
- done
-
- if test -n "$DB3_EXTRA"; then
- AC_DEFINE_UNQUOTED(DB3_INCLUDE_FILE, "$DB3_EXTRA", [ ])
- fi
-
- for LIB in db-3 db3 db; do
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[
- AC_CHECK_LIB($LIB, db_create, [AC_DEFINE(DBA_DB3,1,[ ]) THIS_LIBS=$LIB])
- ])
- done
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_MSG_CHECKING(for Berkeley DB3 support)
-AC_DBA_STD_RESULT
-
-AC_ARG_WITH(dbm,
-[ --with-dbm[=DIR] Include DBM support],[
- if test "$withval" != "no"; then
- for i in /usr/local /usr $withval; do
- if test -f "$i/include/dbm.h" ; then
- THIS_PREFIX=$i
- fi
- done
-
- for LIB in db1 dbm c; do
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[
- AC_CHECK_LIB($LIB, dbminit, [AC_DEFINE(DBA_DBM,1,[ ]) THIS_LIBS=$LIB])
- ])
- done
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_MSG_CHECKING(for DBM support)
-AC_DBA_STD_RESULT
-
-AC_ARG_WITH(cdb,
-[ --with-cdb[=DIR] Include CDB support],[
- if test "$withval" != "no"; then
- for i in /usr/local /usr $withval; do
- if test -f "$i/include/cdb.h" ; then
- THIS_PREFIX=$i
- fi
- done
-
- for LIB in cdb c; do
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[
- AC_CHECK_LIB($LIB, cdb_bread, [AC_DEFINE(DBA_CDB,1,[ ]) THIS_LIBS=$LIB])
- ])
- done
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_MSG_CHECKING(for CDB support)
-AC_DBA_STD_RESULT
-
-AC_MSG_CHECKING(whether to enable DBA interface)
-if test "$HAVE_DBA" = "1"; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_DBA, 1, [ ])
- PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db3.c, $ext_shared)
- PHP_SUBST(DBA_SHARED_LIBADD)
-else
- AC_MSG_RESULT(no)
-fi
-
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
deleted file mode 100644
index 4b40983208..0000000000
--- a/ext/dba/dba.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_DBA
-
-#include "php_dba.h"
-#include "ext/standard/info.h"
-
-#include "php_gdbm.h"
-#include "php_ndbm.h"
-#include "php_dbm.h"
-#include "php_cdb.h"
-#include "php_db2.h"
-#include "php_db3.h"
-
-/* {{{ dba_functions[]
- */
-function_entry dba_functions[] = {
- PHP_FE(dba_open, NULL)
- PHP_FE(dba_popen, NULL)
- PHP_FE(dba_close, NULL)
- PHP_FE(dba_delete, NULL)
- PHP_FE(dba_exists, NULL)
- PHP_FE(dba_fetch, NULL)
- PHP_FE(dba_insert, NULL)
- PHP_FE(dba_replace, NULL)
- PHP_FE(dba_firstkey, NULL)
- PHP_FE(dba_nextkey, NULL)
- PHP_FE(dba_optimize, NULL)
- PHP_FE(dba_sync, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-static PHP_MINIT_FUNCTION(dba);
-static PHP_MSHUTDOWN_FUNCTION(dba);
-static PHP_MINFO_FUNCTION(dba);
-
-zend_module_entry dba_module_entry = {
- STANDARD_MODULE_HEADER,
- "dba",
- dba_functions,
- PHP_MINIT(dba),
- PHP_MSHUTDOWN(dba),
- NULL,
- NULL,
- PHP_MINFO(dba),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DBA
-ZEND_GET_MODULE(dba)
-#endif
-
-typedef struct dba_handler {
- char *name;
- int (*open)(dba_info * TSRMLS_DC);
- void (*close)(dba_info *);
- char* (*fetch)(dba_info *, char *, int, int *);
- int (*update)(dba_info *, char *, int, char *, int, int);
- int (*exists)(dba_info *, char *, int);
- int (*delete)(dba_info *, char *, int);
- char* (*firstkey)(dba_info *, int *);
- char* (*nextkey)(dba_info *, int *);
- int (*optimize)(dba_info *);
- int (*sync)(dba_info *);
-} dba_handler;
-
-/* {{{ macromania */
-
-#define DBA_ID_PARS \
- pval **id; \
- dba_info *info = NULL; \
- int type, ac = ZEND_NUM_ARGS()
-
-/* these are used to get the standard arguments */
-
-#define DBA_GET1 \
- if(ac != 1 || zend_get_parameters_ex(ac, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- }
-
-#define DBA_GET2 \
- pval **key; \
- if(ac != 2 || zend_get_parameters_ex(ac, &key, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_string_ex(key)
-
-#define DBA_IF_NOT_CORRECT_TYPE(link_id) \
- info = zend_list_find(link_id, &type); \
- if(!info || (type != GLOBAL(le_db) && type != GLOBAL(le_pdb)))
-
-#define DBA_ID_GET \
- convert_to_long_ex(id); \
- DBA_IF_NOT_CORRECT_TYPE(Z_LVAL_PP(id)) { \
- php_error(E_WARNING, "Unable to find DBA identifier %d", \
- Z_LVAL_PP(id)); \
- RETURN_FALSE; \
- }
-
-#define DBA_ID_GET1 DBA_ID_PARS; DBA_GET1; DBA_ID_GET
-#define DBA_ID_GET2 DBA_ID_PARS; DBA_GET2; DBA_ID_GET
-
-/* a DBA handler must have specific routines */
-
-#define DBA_HND(x) \
-{\
- #x, dba_open_##x, dba_close_##x, dba_fetch_##x, dba_update_##x, \
- dba_exists_##x, dba_delete_##x, dba_firstkey_##x, dba_nextkey_##x, \
- dba_optimize_##x, dba_sync_##x \
-},
-
-/* check whether the user has write access */
-#define DBA_WRITE_CHECK \
- if(info->mode != DBA_WRITER && info->mode != DBA_TRUNC && info->mode != DBA_CREAT) { \
- php_error(E_WARNING, "you cannot perform a modification to a database without proper access"); \
- RETURN_FALSE; \
- }
-
-#define GLOBAL(a) a
-
-/* }}} */
-
-/* {{{ globals */
-
-static dba_handler handler[] = {
-#if DBA_GDBM
- DBA_HND(gdbm)
-#endif
-#if DBA_DBM
- DBA_HND(dbm)
-#endif
-#if DBA_NDBM
- DBA_HND(ndbm)
-#endif
-#if DBA_CDB
- DBA_HND(cdb)
-#endif
-#if DBA_DB2
- DBA_HND(db2)
-#endif
-#if DBA_DB3
- DBA_HND(db3)
-#endif
- { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
-};
-
-static int le_db;
-static int le_pdb;
-static HashTable ht_keys;
-/* }}} */
-
-/* {{{ dba_close
- */
-static void dba_close(dba_info *info)
-{
- if(info->hnd) info->hnd->close(info);
- if(info->path) free(info->path);
- free(info);
-}
-/* }}} */
-
-/* {{{ dba_close_rsrc
- */
-static void dba_close_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- dba_info *info = (dba_info *)rsrc->ptr;
-
- dba_close(info);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-static PHP_MINIT_FUNCTION(dba)
-{
- zend_hash_init(&ht_keys, 0, NULL, NULL, 1);
- GLOBAL(le_db) = zend_register_list_destructors_ex(dba_close_rsrc, NULL, "dba", module_number);
- GLOBAL(le_pdb) = zend_register_list_destructors_ex(NULL, dba_close_rsrc, "dba persistent", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-static PHP_MSHUTDOWN_FUNCTION(dba)
-{
- zend_hash_destroy(&ht_keys);
- return SUCCESS;
-}
-/* }}} */
-
-#include "ext/standard/php_smart_str.h"
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-static PHP_MINFO_FUNCTION(dba)
-{
- dba_handler *hptr;
- smart_str handlers = {0};
-
- for(hptr = handler; hptr->name; hptr++) {
- smart_str_appends(&handlers, hptr->name);
- smart_str_appendc(&handlers, ' ');
- }
-
- php_info_print_table_start();
- php_info_print_table_row(2, "DBA support", "enabled");
- if (handlers.c) {
- smart_str_0(&handlers);
- php_info_print_table_row(2, "Supported handlers", handlers.c);
- smart_str_free(&handlers);
- } else {
- php_info_print_table_row(2, "Supported handlers", "none");
- }
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_dba_update
- */
-static void php_dba_update(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- DBA_ID_PARS;
- pval **val, **key;
-
- if(ac != 3 || zend_get_parameters_ex(ac, &key, &val, &id) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(key);
- convert_to_string_ex(val);
- DBA_ID_GET;
-
- DBA_WRITE_CHECK;
-
- if(info->hnd->update(info, VALLEN(key), VALLEN(val), mode) == SUCCESS)
- RETURN_TRUE;
- RETURN_FALSE;
-}
-/* }}} */
-
-#define FREENOW if(args) efree(args); if(key) efree(key)
-
-/* {{{ php_dba_open
- */
-static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- pval ***args = (pval ***) NULL;
- int ac = ZEND_NUM_ARGS();
- dba_mode_t modenr;
- dba_info *info;
- dba_handler *hptr;
- char *key = NULL;
- int keylen = 0;
- int listid;
- int i;
-
- if(ac < 3) {
- WRONG_PARAM_COUNT;
- }
-
- /* we pass additional args to the respective handler */
- args = emalloc(ac * sizeof(pval *));
- if(zend_get_parameters_array_ex(ac, args) != SUCCESS) {
- FREENOW;
- WRONG_PARAM_COUNT;
- }
-
- /* we only take string arguments */
- for(i = 0; i < ac; i++) {
- convert_to_string_ex(args[i]);
- keylen += Z_STRLEN_PP(args[i]);
- }
-
- if(persistent) {
- /* calculate hash */
- key = emalloc(keylen);
- keylen = 0;
-
- for(i = 0; i < ac; i++) {
- memcpy(key+keylen, Z_STRVAL_PP(args[i]), Z_STRLEN_PP(args[i]));
- keylen += Z_STRLEN_PP(args[i]);
- }
-
- if(zend_hash_find(&ht_keys, key, keylen, (void **) &info) == SUCCESS) {
- FREENOW;
- RETURN_LONG(zend_list_insert(info, GLOBAL(le_pdb)));
- }
- }
-
- for(hptr = handler; hptr->name &&
- strcasecmp(hptr->name, Z_STRVAL_PP(args[2])); hptr++);
-
- if(!hptr->name) {
- php_error(E_WARNING, "no such handler: %s", Z_STRVAL_PP(args[2]));
- FREENOW;
- RETURN_FALSE;
- }
-
- switch(Z_STRVAL_PP(args[1])[0]) {
- case 'c':
- modenr = DBA_CREAT;
- break;
- case 'w':
- modenr = DBA_WRITER;
- break;
- case 'r':
- modenr = DBA_READER;
- break;
- case 'n':
- modenr = DBA_TRUNC;
- break;
- default:
- php_error(E_WARNING, "illegal DBA mode: %s", Z_STRVAL_PP(args[1]));
- FREENOW;
- RETURN_FALSE;
- }
-
- info = malloc(sizeof(*info));
- memset(info, 0, sizeof(info));
- info->path = strdup(Z_STRVAL_PP(args[0]));
- info->mode = modenr;
- info->argc = ac - 3;
- info->argv = args + 3;
- info->hnd = NULL;
-
- if(hptr->open(info TSRMLS_CC) != SUCCESS) {
- dba_close(info);
- php_error(E_WARNING, "driver initialization failed");
- FREENOW;
- RETURN_FALSE;
- }
- info->hnd = hptr;
- info->argc = 0;
- info->argv = NULL;
-
- listid = zend_list_insert(info, persistent?GLOBAL(le_pdb):GLOBAL(le_db));
- if(persistent) {
- zend_hash_update(&ht_keys, key, keylen, info, sizeof(*info), NULL);
- }
-
- FREENOW;
- RETURN_LONG(listid);
-}
-/* }}} */
-#undef FREENOW
-
-/* {{{ proto int dba_popen(string path, string mode, string handlername [, string ...])
- Opens path using the specified handler in mode persistently */
-PHP_FUNCTION(dba_popen)
-{
- php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int dba_open(string path, string mode, string handlername [, string ...])
- Opens path using the specified handler in mode*/
-PHP_FUNCTION(dba_open)
-{
- php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto void dba_close(int handle)
- Closes database */
-PHP_FUNCTION(dba_close)
-{
- DBA_ID_GET1;
-
- zend_list_delete(Z_LVAL_PP(id));
-}
-/* }}} */
-
-/* {{{ proto bool dba_exists(string key, int handle)
- Checks, if the specified key exists */
-PHP_FUNCTION(dba_exists)
-{
- DBA_ID_GET2;
-
- if(info->hnd->exists(info, VALLEN(key)) == SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string dba_fetch(string key, int handle)
- Fetches the data associated with key */
-PHP_FUNCTION(dba_fetch)
-{
- char *val;
- int len = 0;
- DBA_ID_GET2;
-
- if((val = info->hnd->fetch(info, VALLEN(key), &len)) != NULL) {
- RETURN_STRINGL(val, len, 0);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string dba_firstkey(int handle)
- Resets the internal key pointer and returns the first key */
-PHP_FUNCTION(dba_firstkey)
-{
- char *fkey;
- int len;
- DBA_ID_GET1;
-
- fkey = info->hnd->firstkey(info, &len);
- if(fkey)
- RETURN_STRINGL(fkey, len, 0);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string dba_nextkey(int handle)
- Returns the next key */
-PHP_FUNCTION(dba_nextkey)
-{
- char *nkey;
- int len;
- DBA_ID_GET1;
-
- nkey = info->hnd->nextkey(info, &len);
- if(nkey)
- RETURN_STRINGL(nkey, len, 0);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool dba_delete(string key, int handle)
- Deletes the entry associated with key */
-PHP_FUNCTION(dba_delete)
-{
- DBA_ID_GET2;
-
- DBA_WRITE_CHECK;
-
- if(info->hnd->delete(info, VALLEN(key)) == SUCCESS)
- RETURN_TRUE;
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool dba_insert(string key, string value, int handle)
- Inserts value as key, returns false, if key exists already */
-PHP_FUNCTION(dba_insert)
-{
- php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool dba_replace(string key, string value, int handle)
- Inserts value as key, replaces key, if key exists already */
-PHP_FUNCTION(dba_replace)
-{
- php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool dba_optimize(int handle)
- Optimizes (e.g. clean up, vacuum) database */
-PHP_FUNCTION(dba_optimize)
-{
- DBA_ID_GET1;
-
- DBA_WRITE_CHECK;
- if(info->hnd->optimize(info) == SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool dba_sync(int handle)
- Synchronizes database */
-PHP_FUNCTION(dba_sync)
-{
- DBA_ID_GET1;
-
- if(info->hnd->sync(info) == SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/dba.dsp b/ext/dba/dba.dsp
deleted file mode 100644
index bcea596d59..0000000000
--- a/ext/dba/dba.dsp
+++ /dev/null
@@ -1,157 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dba" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dba - Win32 Debug_TS Berkeley DB3
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dba.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dba.mak" CFG="dba - Win32 Debug_TS Berkeley DB3"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dba - Win32 Release_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dba - Win32 Debug_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dba - Win32 Release_TS Berkeley DB3"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_DB3=1 /D DB3_INCLUDE_FILE="db.h" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_DB3=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php4ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "dba - Win32 Debug_TS Berkeley DB3"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D "DBA_DB3" /D DB3_INCLUDE_FILE="db.h" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D "DBA_DB3" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dba - Win32 Release_TS Berkeley DB3"
-# Name "dba - Win32 Debug_TS Berkeley DB3"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dba.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_cdb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_db2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_db3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_gdbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_ndbm.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_cdb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_db2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_db3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dba.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dbm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_gdbm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_ndbm.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c
deleted file mode 100644
index 9996b89d0a..0000000000
--- a/ext/dba/dba_cdb.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_CDB
-#include "php_cdb.h"
-
-#include <sys/types.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <cdb.h>
-#include <cdbmake.h>
-
-#define CDB_INFO \
- dba_cdb *cdb = (dba_cdb *) info->dbf
-
-typedef struct {
- int fd;
- uint32 eod; /* size of constant database */
- uint32 pos; /* current position for traversing */
-} dba_cdb;
-
-DBA_OPEN_FUNC(cdb)
-{
- int gmode = 0;
- dba_cdb *cdb;
- dba_info *pinfo = (dba_info *) info;
-
- switch(info->mode) {
- case DBA_READER:
- gmode = O_RDONLY; break;
- /* currently not supported: */
-#if 0
- case DBA_WRITER:
- gmode = O_RDWR; break;
-#endif
- default:
- return FAILURE;
- }
-
- cdb = malloc(sizeof *cdb);
- memset(cdb, 0, sizeof *cdb);
-
- cdb->fd = VCWD_OPEN(info->path, gmode);
- if(cdb->fd < 0) {
- free(cdb);
- return FAILURE;
- }
-
- pinfo->dbf = cdb;
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(cdb)
-{
- CDB_INFO;
-
- close(cdb->fd);
- free(cdb);
-}
-
-DBA_FETCH_FUNC(cdb)
-{
- CDB_INFO;
- int len;
- char *new = NULL;
-
- if(cdb_seek(cdb->fd, key, keylen, &len) == 1) {
- new = emalloc(len);
- read(cdb->fd, new, len);
- if(newlen) *newlen = len;
- }
-
- return new;
-}
-
-DBA_UPDATE_FUNC(cdb)
-{
- /* if anyone figures out cdbmake.c, let me know */
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(cdb)
-{
- CDB_INFO;
- int len;
-
- if(cdb_seek(cdb->fd, key, keylen, &len) == 1)
- return SUCCESS;
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(cdb)
-{
- return FAILURE;
-}
-
-
-#define CREAD(n) if(read(cdb->fd, buf, n) < n) return NULL
-#define CSEEK(n) \
- if(n >= cdb->eod) return NULL; \
- if(lseek(cdb->fd, (off_t)n, SEEK_SET) != (off_t) n) return NULL
-
-DBA_FIRSTKEY_FUNC(cdb)
-{
- CDB_INFO;
- uint32 len;
- char buf[8];
- char *key;
-
- cdb->eod = -1;
- CSEEK(0);
- CREAD(4);
- cdb->eod = cdb_unpack(buf);
-
- CSEEK(2048);
- CREAD(8);
- len = cdb_unpack(buf);
-
- key = emalloc(len + 1);
- if(read(cdb->fd, key, len) < len) {
- efree(key);
- key = NULL;
- } else
- key[len] = '\0';
- /* header + klenlen + dlenlen + klen + dlen */
- cdb->pos = 2048 + 4 + 4 + len + cdb_unpack(buf + 4);
-
- return key;
-}
-
-DBA_NEXTKEY_FUNC(cdb)
-{
- CDB_INFO;
- uint32 len;
- char buf[8];
- char *nkey;
-
- CSEEK(cdb->pos);
- CREAD(8);
- len = cdb_unpack(buf);
-
- nkey = emalloc(len + 1);
- if(read(cdb->fd, nkey, len) < len) {
- efree(nkey);
- return NULL;
- }
- nkey[len] = '\0';
- if(newlen) *newlen = len;
-
- cdb->pos += 8 + len + cdb_unpack(buf + 4);
-
- return nkey;
-#if 0
- /* this code cdb_seeks and is thus slower than directly seeking
- in the file */
- CDB_INFO;
- char *nkey = NULL;
- uint32 len;
- char buf[8];
-
- if(cdb_seek(cdb->fd, key, keylen, &len) == 1) {
- if(lseek(cdb->fd, (off_t) len, SEEK_CUR) >= (off_t) cdb->eod)
- return NULL;
- CREAD(8);
- len = cdb_unpack(buf);
-
- nkey = emalloc(len + 1);
- if(read(cdb->fd, nkey, len) < len) {
- efree(nkey);
- nkey = NULL;
- } else
- nkey[len] = '\0';
- }
- return nkey;
-#endif
-}
-
-DBA_OPTIMIZE_FUNC(cdb)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(cdb)
-{
- /* this is read-only */
- return SUCCESS;
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c
deleted file mode 100644
index e2ef6dc18f..0000000000
--- a/ext/dba/dba_db2.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DB2
-#include "php_db2.h"
-#include <sys/stat.h>
-
-#include <string.h>
-#ifdef DB2_INCLUDE_FILE
-#include DB2_INCLUDE_FILE
-#endif
-
-#define DB2_DATA dba_db2_data *dba = info->dbf
-#define DB2_GKEY \
- DBT gkey = {0}; \
- gkey.data = (char *) key; \
- gkey.size = keylen
-
-typedef struct {
- DB *dbp;
- DBC *cursor;
-} dba_db2_data;
-
-DBA_OPEN_FUNC(db2)
-{
- DB *dbp;
- DBTYPE type;
- int gmode = 0;
- int filemode = 0644;
- struct stat check_stat;
- int s = VCWD_STAT(info->path, &check_stat);
-
- type = info->mode == DBA_READER ? DB_UNKNOWN :
- info->mode == DBA_TRUNC ? DB_BTREE :
- s ? DB_BTREE : DB_UNKNOWN;
-
- gmode = info->mode == DBA_READER ? DB_RDONLY :
- (info->mode == DBA_CREAT && s) ? DB_CREATE :
- (info->mode == DBA_CREAT && !s) ? 0 :
- info->mode == DBA_WRITER ? 0 :
- info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
-
- if (gmode == -1)
- return FAILURE;
-
- if (info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- if (db_open(info->path, type, gmode, filemode, NULL, NULL, &dbp)) {
- return FAILURE;
- }
-
- info->dbf = calloc(sizeof(dba_db2_data), 1);
- ((dba_db2_data *) info->dbf)->dbp = dbp;
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(db2)
-{
- DB2_DATA;
-
- if (dba->cursor)
- dba->cursor->c_close(dba->cursor);
- dba->dbp->close(dba->dbp, 0);
- free(dba);
-}
-
-DBA_FETCH_FUNC(db2)
-{
- DBT gval = {0};
- DB2_DATA;
- DB2_GKEY;
-
- if (dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return NULL;
- }
-
- if (newlen) *newlen = gval.size;
- return estrndup(gval.data, gval.size);
-}
-
-DBA_UPDATE_FUNC(db2)
-{
- DBT gval = {0};
- DB2_DATA;
- DB2_GKEY;
-
- gval.data = (char *) val;
- gval.size = vallen;
-
- if (dba->dbp->put(dba->dbp, NULL, &gkey, &gval,
- mode == 1 ? DB_NOOVERWRITE : 0)) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-DBA_EXISTS_FUNC(db2)
-{
- DBT gval = {0};
- DB2_DATA;
- DB2_GKEY;
-
- if (dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-DBA_DELETE_FUNC(db2)
-{
- DB2_DATA;
- DB2_GKEY;
-
- return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(db2)
-{
- DB2_DATA;
-
- if (dba->cursor) {
- dba->cursor->c_close(dba->cursor);
- dba->cursor = NULL;
- }
-
-#if (DB_VERSION_MAJOR > 2) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 6) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 6 && DB_VERSION_PATCH >= 4)
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0)) {
-#else
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor)) {
-#endif
- return NULL;
- }
-
- /* we should introduce something like PARAM_PASSTHRU... */
- return dba_nextkey_db2(info, newlen);
-}
-
-DBA_NEXTKEY_FUNC(db2)
-{
- DB2_DATA;
- DBT gkey = {0}, gval = {0};
-
- if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT)
- || !gkey.data)
- return NULL;
-
- if (newlen) *newlen = gkey.size;
- return estrndup(gkey.data, gkey.size);
-}
-
-DBA_OPTIMIZE_FUNC(db2)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(db2)
-{
- DB2_DATA;
-
- return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c
deleted file mode 100644
index ebc163ae3d..0000000000
--- a/ext/dba/dba_db3.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DB3
-#include "php_db3.h"
-#include <sys/stat.h>
-
-#include <string.h>
-#ifdef DB3_INCLUDE_FILE
-#include DB3_INCLUDE_FILE
-#else
-#include <db.h>
-#endif
-
-#define DB3_DATA dba_db3_data *dba = info->dbf
-#define DB3_GKEY \
- DBT gkey; \
- memset(&gkey, 0, sizeof(gkey)); \
- gkey.data = (char *) key; gkey.size = keylen
-
-typedef struct {
- DB *dbp;
- DBC *cursor;
-} dba_db3_data;
-
-DBA_OPEN_FUNC(db3)
-{
- DB *dbp = NULL;
- DBTYPE type;
- int gmode = 0;
- int filemode = 0644;
- struct stat check_stat;
- int s = VCWD_STAT(info->path, &check_stat);
-
- type = info->mode == DBA_READER ? DB_UNKNOWN :
- info->mode == DBA_TRUNC ? DB_BTREE :
- s? DB_BTREE : DB_UNKNOWN;
-
- gmode = info->mode == DBA_READER ? DB_RDONLY :
- (info->mode == DBA_CREAT && s) ? DB_CREATE :
- (info->mode == DBA_CREAT && !s) ? 0 :
- info->mode == DBA_WRITER ? 0 :
- info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
-
- if (gmode == -1)
- return FAILURE;
-
- if (info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- if (db_create(&dbp, NULL, 0) == 0 &&
- dbp->open(dbp, info->path, NULL, type, gmode, filemode) == 0) {
- dba_db3_data *data;
-
- data = malloc(sizeof(*data));
- data->dbp = dbp;
- data->cursor = NULL;
- info->dbf = data;
-
- return SUCCESS;
- } else if (dbp != NULL) {
- dbp->close(dbp, 0);
- }
-
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(db3)
-{
- DB3_DATA;
-
- if (dba->cursor) dba->cursor->c_close(dba->cursor);
- dba->dbp->close(dba->dbp, 0);
- free(dba);
-}
-
-DBA_FETCH_FUNC(db3)
-{
- DBT gval;
- char *new = NULL;
- DB3_DATA;
- DB3_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- if (newlen) *newlen = gval.size;
- new = estrndup(gval.data, gval.size);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(db3)
-{
- DBT gval;
- DB3_DATA;
- DB3_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- gval.data = (char *) val;
- gval.size = vallen;
-
- if (!dba->dbp->put(dba->dbp, NULL, &gkey, &gval,
- mode == 1 ? DB_NOOVERWRITE : 0)) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(db3)
-{
- DBT gval;
- DB3_DATA;
- DB3_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(db3)
-{
- DB3_DATA;
- DB3_GKEY;
-
- return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(db3)
-{
- DB3_DATA;
-
- if (dba->cursor) {
- dba->cursor->c_close(dba->cursor);
- }
-
- dba->cursor = NULL;
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0) != 0) {
- return NULL;
- }
-
- /* we should introduce something like PARAM_PASSTHRU... */
- return dba_nextkey_db3(info, newlen);
-}
-
-DBA_NEXTKEY_FUNC(db3)
-{
- DB3_DATA;
- DBT gkey, gval;
- char *nkey = NULL;
-
- memset(&gkey, 0, sizeof(gkey));
- memset(&gval, 0, sizeof(gval));
-
- if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) {
- if (gkey.data) {
- nkey = estrndup(gkey.data, gkey.size);
- if (newlen) *newlen = gkey.size;
- }
- }
-
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(db3)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(db3)
-{
- DB3_DATA;
-
- return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c
deleted file mode 100644
index 8ce0b1d397..0000000000
--- a/ext/dba/dba_dbm.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DBM
-#include "php_dbm.h"
-
-#include <dbm.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define DBM_DATA dba_dbm_data *dba = info->dbf
-#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-#define TRUNC_IT(extension, mode) \
- snprintf(buf, MAXPATHLEN, "%s" extension, info->path); \
- buf[MAXPATHLEN-1] = '\0'; \
- if((fd = VCWD_OPEN_MODE(buf, O_CREAT | mode | O_WRONLY, filemode)) == -1) \
- return FAILURE; \
- close(fd);
-
-
-typedef struct {
- datum nextkey;
-} dba_dbm_data;
-
-DBA_OPEN_FUNC(dbm)
-{
- int fd;
- int filemode = 0644;
-
- if(info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- if(info->mode == DBA_TRUNC) {
- char buf[MAXPATHLEN];
-
- /* dbm/ndbm original */
- TRUNC_IT(".pag", O_TRUNC);
- TRUNC_IT(".dir", O_TRUNC);
- }
-
- if(info->mode == DBA_CREAT) {
- char buf[MAXPATHLEN];
-
- TRUNC_IT(".pag", 0);
- TRUNC_IT(".dir", 0);
- }
-
- if(dbminit((char *) info->path) == -1) {
- return FAILURE;
- }
-
- info->dbf = calloc(sizeof(dba_dbm_data), 1);
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(dbm)
-{
- free(info->dbf);
- dbmclose();
-}
-
-DBA_FETCH_FUNC(dbm)
-{
- datum gval;
- char *new = NULL;
-
- DBM_GKEY;
- gval = fetch(gkey);
- if(gval.dptr) {
- if(newlen) *newlen = gval.dsize;
- new = estrndup(gval.dptr, gval.dsize);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(dbm)
-{
- datum gval;
-
- DBM_GKEY;
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- return (store(gkey, gval) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_EXISTS_FUNC(dbm)
-{
- datum gval;
- DBM_GKEY;
-
- gval = fetch(gkey);
- if(gval.dptr) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(dbm)
-{
- DBM_GKEY;
- return(delete(gkey) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_FIRSTKEY_FUNC(dbm)
-{
- DBM_DATA;
- datum gkey;
- char *key = NULL;
-
- gkey = firstkey();
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- key = estrndup(gkey.dptr, gkey.dsize);
- dba->nextkey = gkey;
- } else
- dba->nextkey.dptr = NULL;
- return key;
-}
-
-DBA_NEXTKEY_FUNC(dbm)
-{
- DBM_DATA;
- datum gkey;
- char *nkey = NULL;
-
- if(!dba->nextkey.dptr) return NULL;
-
- gkey = nextkey(dba->nextkey);
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- nkey = estrndup(gkey.dptr, gkey.dsize);
- dba->nextkey = gkey;
- } else
- dba->nextkey.dptr = NULL;
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(dbm)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(dbm)
-{
- return SUCCESS;
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c
deleted file mode 100644
index 66a6bce709..0000000000
--- a/ext/dba/dba_gdbm.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_GDBM
-#include "php_gdbm.h"
-
-#include <gdbm.h>
-
-#define GDBM_DATA dba_gdbm_data *dba = info->dbf
-#define GDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-typedef struct {
- GDBM_FILE dbf;
- datum nextkey;
-} dba_gdbm_data;
-
-DBA_OPEN_FUNC(gdbm)
-{
- GDBM_FILE dbf;
- int gmode = 0;
- int filemode = 0644;
-
- gmode = info->mode == DBA_READER ? GDBM_READER :
- info->mode == DBA_WRITER ? GDBM_WRITER :
- info->mode == DBA_CREAT ? GDBM_WRCREAT :
- info->mode == DBA_TRUNC ? GDBM_NEWDB : -1;
-
- if(gmode == -1)
- return FAILURE;
-
- if(info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- dbf = gdbm_open(info->path, 0, gmode, filemode, NULL);
-
- if(dbf) {
- info->dbf = malloc(sizeof(dba_gdbm_data));
- memset(info->dbf, 0, sizeof(dba_gdbm_data));
- ((dba_gdbm_data *) info->dbf)->dbf = dbf;
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(gdbm)
-{
- GDBM_DATA;
-
- if(dba->nextkey.dptr) free(dba->nextkey.dptr);
- gdbm_close(dba->dbf);
- free(dba);
-}
-
-DBA_FETCH_FUNC(gdbm)
-{
- GDBM_DATA;
- datum gval;
- char *new = NULL;
-
- GDBM_GKEY;
- gval = gdbm_fetch(dba->dbf, gkey);
- if(gval.dptr) {
- if(newlen) *newlen = gval.dsize;
- new = estrndup(gval.dptr, gval.dsize);
- free(gval.dptr);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(gdbm)
-{
- datum gval;
- GDBM_DATA;
-
- GDBM_GKEY;
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- if(gdbm_store(dba->dbf, gkey, gval,
- mode == 1 ? GDBM_INSERT : GDBM_REPLACE) == 0)
- return SUCCESS;
- printf("XXX %s\n", gdbm_strerror(gdbm_errno));
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(gdbm)
-{
- GDBM_DATA;
- GDBM_GKEY;
-
- return gdbm_exists(dba->dbf, gkey) ? SUCCESS : FAILURE;
-}
-
-DBA_DELETE_FUNC(gdbm)
-{
- GDBM_DATA;
- GDBM_GKEY;
-
- return gdbm_delete(dba->dbf, gkey) == -1 ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(gdbm)
-{
- GDBM_DATA;
- datum gkey;
- char *key = NULL;
-
- if(dba->nextkey.dptr) {
- free(dba->nextkey.dptr);
- }
-
- gkey = gdbm_firstkey(dba->dbf);
- if(gkey.dptr) {
- key = estrndup(gkey.dptr, gkey.dsize);
- if(newlen) *newlen = gkey.dsize;
- dba->nextkey = gkey;
- } else {
- dba->nextkey.dptr = NULL;
- }
- return key;
-}
-
-DBA_NEXTKEY_FUNC(gdbm)
-{
- GDBM_DATA;
- char *nkey = NULL;
- datum gkey;
-
- if(!dba->nextkey.dptr) return NULL;
-
- gkey = gdbm_nextkey(dba->dbf, dba->nextkey);
- free(dba->nextkey.dptr);
- if(gkey.dptr) {
- nkey = estrndup(gkey.dptr, gkey.dsize);
- if(newlen) *newlen = gkey.dsize;
- dba->nextkey = gkey;
- } else {
- dba->nextkey.dptr = NULL;
- }
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(gdbm)
-{
- GDBM_DATA;
- gdbm_reorganize(dba->dbf);
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(gdbm)
-{
- GDBM_DATA;
-
- gdbm_sync(dba->dbf);
- return SUCCESS;
-}
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/dba_ndbm.c b/ext/dba/dba_ndbm.c
deleted file mode 100644
index 7dfb66484b..0000000000
--- a/ext/dba/dba_ndbm.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_NDBM
-#include "php_ndbm.h"
-
-#include <fcntl.h>
-#ifdef NDBM_INCLUDE_FILE
-#include NDBM_INCLUDE_FILE
-#endif
-
-#define NDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-DBA_OPEN_FUNC(ndbm)
-{
- DBM *dbf;
- int gmode = 0;
- int filemode = 0644;
- dba_info *pinfo = (dba_info *) info;
-
- switch(info->mode) {
- case DBA_READER:
- gmode = O_RDONLY;
- break;
- case DBA_WRITER:
- gmode = O_RDWR;
- break;
- case DBA_CREAT:
- gmode = O_RDWR | O_CREAT;
- break;
- case DBA_TRUNC:
- gmode = O_RDWR | O_CREAT | O_TRUNC;
- break;
- default:
- return FAILURE;
- }
-
- if(info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- dbf = dbm_open(info->path, gmode, filemode);
-
- if(dbf) {
- pinfo->dbf = dbf;
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(ndbm)
-{
- dbm_close(info->dbf);
-}
-
-DBA_FETCH_FUNC(ndbm)
-{
- datum gval;
- char *new = NULL;
-
- NDBM_GKEY;
- gval = dbm_fetch(info->dbf, gkey);
- if(gval.dptr) {
- if(newlen) *newlen = gval.dsize;
- new = estrndup(gval.dptr, gval.dsize);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(ndbm)
-{
- datum gval;
-
- NDBM_GKEY;
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- if(!dbm_store(info->dbf, gkey, gval, mode == 1 ? DBM_INSERT : DBM_REPLACE))
- return SUCCESS;
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(ndbm)
-{
- datum gval;
- NDBM_GKEY;
- gval = dbm_fetch(info->dbf, gkey);
- if(gval.dptr) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(ndbm)
-{
- NDBM_GKEY;
- return(dbm_delete(info->dbf, gkey) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_FIRSTKEY_FUNC(ndbm)
-{
- datum gkey;
- char *key = NULL;
-
- gkey = dbm_firstkey(info->dbf);
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- key = estrndup(gkey.dptr, gkey.dsize);
- }
- return key;
-}
-
-DBA_NEXTKEY_FUNC(ndbm)
-{
- datum gkey;
- char *nkey = NULL;
-
- gkey = dbm_nextkey(info->dbf);
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- nkey = estrndup(gkey.dptr, gkey.dsize);
- }
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(ndbm)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(ndbm)
-{
- return SUCCESS;
-}
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dba/php_cdb.h b/ext/dba/php_cdb.h
deleted file mode 100644
index a046f0796b..0000000000
--- a/ext/dba/php_cdb.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_CDB_H
-#define PHP_CDB_H
-
-#if DBA_CDB
-
-#include "php_dba.h"
-
-DBA_FUNCS(cdb);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_db2.h b/ext/dba/php_db2.h
deleted file mode 100644
index 2a95223a85..0000000000
--- a/ext/dba/php_db2.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DB2_H
-#define PHP_DB2_H
-
-#if DBA_DB2
-
-#include "php_dba.h"
-
-DBA_FUNCS(db2);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_db3.h b/ext/dba/php_db3.h
deleted file mode 100644
index 58bb0b62a0..0000000000
--- a/ext/dba/php_db3.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DB3_H
-#define PHP_DB3_H
-
-#if DBA_DB3
-
-#include "php_dba.h"
-
-DBA_FUNCS(db3);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h
deleted file mode 100644
index 07f0b38449..0000000000
--- a/ext/dba/php_dba.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_DBA_H
-#define PHP_DBA_H
-
-#if HAVE_DBA
-
-typedef enum {
- DBA_READER = 1,
- DBA_WRITER,
- DBA_TRUNC,
- DBA_CREAT
-} dba_mode_t;
-
-typedef struct dba_info {
- /* public */
- void *dbf; /* ptr to private data or whatever */
- char *path;
- dba_mode_t mode;
- /* arg[cv] are only available when the dba_open handler is called! */
- int argc;
- pval ***argv;
- /* private */
- struct dba_handler *hnd;
-} dba_info;
-
-extern zend_module_entry dba_module_entry;
-#define dba_module_ptr &dba_module_entry
-
-/* common prototypes which must be supplied by modules */
-
-#define DBA_OPEN_FUNC(x) \
- int dba_open_##x(dba_info *info TSRMLS_DC)
-#define DBA_CLOSE_FUNC(x) \
- void dba_close_##x(dba_info *info)
-#define DBA_FETCH_FUNC(x) \
- char *dba_fetch_##x(dba_info *info, char *key, int keylen, int *newlen)
-#define DBA_UPDATE_FUNC(x) \
- int dba_update_##x(dba_info *info, char *key, int keylen, char *val, int vallen, int mode)
-#define DBA_EXISTS_FUNC(x) \
- int dba_exists_##x(dba_info *info, char *key, int keylen)
-#define DBA_DELETE_FUNC(x) \
- int dba_delete_##x(dba_info *info, char *key, int keylen)
-#define DBA_FIRSTKEY_FUNC(x) \
- char *dba_firstkey_##x(dba_info *info, int *newlen)
-#define DBA_NEXTKEY_FUNC(x) \
- char *dba_nextkey_##x(dba_info *info, int *newlen)
-#define DBA_OPTIMIZE_FUNC(x) \
- int dba_optimize_##x(dba_info *info)
-#define DBA_SYNC_FUNC(x) \
- int dba_sync_##x(dba_info *info)
-
-#define DBA_FUNCS(x) \
- DBA_OPEN_FUNC(x); \
- DBA_CLOSE_FUNC(x); \
- DBA_FETCH_FUNC(x); \
- DBA_UPDATE_FUNC(x); \
- DBA_DELETE_FUNC(x); \
- DBA_EXISTS_FUNC(x); \
- DBA_FIRSTKEY_FUNC(x); \
- DBA_NEXTKEY_FUNC(x); \
- DBA_OPTIMIZE_FUNC(x); \
- DBA_SYNC_FUNC(x)
-
-#define VALLEN(p) Z_STRVAL_PP(p), Z_STRLEN_PP(p)
-
-PHP_FUNCTION(dba_open);
-PHP_FUNCTION(dba_popen);
-PHP_FUNCTION(dba_close);
-PHP_FUNCTION(dba_firstkey);
-PHP_FUNCTION(dba_nextkey);
-PHP_FUNCTION(dba_replace);
-PHP_FUNCTION(dba_insert);
-PHP_FUNCTION(dba_delete);
-PHP_FUNCTION(dba_exists);
-PHP_FUNCTION(dba_fetch);
-PHP_FUNCTION(dba_optimize);
-PHP_FUNCTION(dba_sync);
-
-#else
-#define dba_module_ptr NULL
-#endif
-
-#define phpext_dba_ptr dba_module_ptr
-
-#endif
diff --git a/ext/dba/php_dbm.h b/ext/dba/php_dbm.h
deleted file mode 100644
index 4c963d18ed..0000000000
--- a/ext/dba/php_dbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DBM_H
-#define PHP_DBM_H
-
-#if DBA_DBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(dbm);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_gdbm.h b/ext/dba/php_gdbm.h
deleted file mode 100644
index 3068404cfe..0000000000
--- a/ext/dba/php_gdbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_GDBM_H
-#define PHP_GDBM_H
-
-#if DBA_GDBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(gdbm);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_ndbm.h b/ext/dba/php_ndbm.h
deleted file mode 100644
index b1ebf15af3..0000000000
--- a/ext/dba/php_ndbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_NDBM_H
-#define PHP_NDBM_H
-
-#if DBA_NDBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(ndbm);
-
-#endif
-
-#endif
diff --git a/ext/dbase/CREDITS b/ext/dbase/CREDITS
deleted file mode 100644
index ea6adcaf41..0000000000
--- a/ext/dbase/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-dBase
-Jim Winstead
diff --git a/ext/dbase/config.m4 b/ext/dbase/config.m4
deleted file mode 100644
index d19c24c779..0000000000
--- a/ext/dbase/config.m4
+++ /dev/null
@@ -1,13 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_ARG_WITH(dbase,[],[enable_dbase=$withval])
-
-PHP_ARG_ENABLE(dbase,whether to enable dbase support,
-[ --enable-dbase Enable the bundled dbase library])
-
-if test "$PHP_DBASE" = "yes"; then
- AC_DEFINE(DBASE,1,[ ])
- PHP_NEW_EXTENSION(dbase, dbf_head.c dbf_rec.c dbf_misc.c dbf_ndx.c dbase.c, $ext_shared)
-fi
diff --git a/ext/dbase/dbase.c b/ext/dbase/dbase.c
deleted file mode 100644
index 445f014a31..0000000000
--- a/ext/dbase/dbase.c
+++ /dev/null
@@ -1,842 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include "php_globals.h"
-
-#include <stdlib.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#if DBASE
-#include "php_dbase.h"
-#include "dbf.h"
-#if defined(THREAD_SAFE)
-DWORD DbaseTls;
-static int numthreads=0;
-void *dbase_mutex;
-
-typedef struct dbase_global_struct{
- int le_dbhead;
-}dbase_global_struct;
-
-#define DBase_GLOBAL(a) dbase_globals->a
-
-#define DBase_TLS_VARS \
- dbase_global_struct *dbase_globals; \
- dbase_globals=TlsGetValue(DbaseTls);
-
-#else
-static int le_dbhead;
-#define DBase_GLOBAL(a) a
-#define DBase_TLS_VARS
-#endif
-
-#include <fcntl.h>
-#include <errno.h>
-
-
-static void _close_dbase(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- dbhead_t *dbhead = (dbhead_t *)rsrc->ptr;
-
- close(dbhead->db_fd);
- free_dbf_head(dbhead);
-}
-
-
-PHP_MINIT_FUNCTION(dbase)
-{
-#if defined(THREAD_SAFE)
- dbase_global_struct *dbase_globals;
-#ifdef COMPILE_DL_DBASE
- CREATE_MUTEX(dbase_mutex, "DBase_TLS");
- SET_MUTEX(dbase_mutex);
- numthreads++;
- if (numthreads==1){
- if ((DbaseTls=TlsAlloc())==0xFFFFFFFF){
- FREE_MUTEX(dbase_mutex);
- return 0;
- }}
- FREE_MUTEX(dbase_mutex);
-#endif
- dbase_globals = (dbase_global_struct *) LocalAlloc(LPTR, sizeof(dbase_global_struct));
- TlsSetValue(DbaseTls, (void *) dbase_globals);
-#endif
- DBase_GLOBAL(le_dbhead) =
- zend_register_list_destructors_ex(_close_dbase, NULL, "dbase", module_number);
- return SUCCESS;
-}
-
-static PHP_MSHUTDOWN_FUNCTION(dbase)
-{
-#if defined(THREAD_SAFE)
- dbase_global_struct *dbase_globals;
- dbase_globals = TlsGetValue(DbaseTls);
- if (dbase_globals != 0)
- LocalFree((HLOCAL) dbase_globals);
-#ifdef COMPILE_DL_DBASE
- SET_MUTEX(dbase_mutex);
- numthreads--;
- if (!numthreads){
- if (!TlsFree(DbaseTls)){
- FREE_MUTEX(dbase_mutex);
- return 0;
- }}
- FREE_MUTEX(dbase_mutex);
-#endif
-#endif
- return SUCCESS;
-}
-
-/* {{{ proto int dbase_open(string name, int mode)
- Opens a dBase-format database file */
-PHP_FUNCTION(dbase_open)
-{
- pval *dbf_name, *options;
- dbhead_t *dbh;
- int handle;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbf_name, &options)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(dbf_name);
- convert_to_long(options);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_P(dbf_name), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_P(dbf_name) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- dbh = dbf_open(Z_STRVAL_P(dbf_name), Z_LVAL_P(options) TSRMLS_CC);
- if (dbh == NULL) {
- php_error(E_WARNING, "unable to open database %s", Z_STRVAL_P(dbf_name));
- RETURN_FALSE;
- }
-
- handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead));
- RETURN_LONG(handle);
-}
-/* }}} */
-
-/* {{{ proto bool dbase_close(int identifier)
- Closes an open dBase-format database file */
-PHP_FUNCTION(dbase_close)
-{
- pval *dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- zend_list_delete(Z_LVAL_P(dbh_id));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int dbase_numrecords(int identifier)
- Returns the number of records in the database */
-PHP_FUNCTION(dbase_numrecords)
-{
- pval *dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- RETURN_LONG(dbh->db_records);
-}
-/* }}} */
-
-/* {{{ proto int dbase_numfields(int identifier)
- Returns the number of fields (columns) in the database */
-PHP_FUNCTION(dbase_numfields)
-{
- pval *dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- RETURN_LONG(dbh->db_nfields);
-}
-/* }}} */
-
-/* {{{ proto bool dbase_pack(int identifier)
- Packs the database (deletes records marked for deletion) */
-PHP_FUNCTION(dbase_pack)
-{
- pval *dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- pack_dbf(dbh);
- put_dbf_info(dbh);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool dbase_add_record(int identifier, array data)
- Adds a record to the database */
-PHP_FUNCTION(dbase_add_record)
-{
- pval *dbh_id, *fields, **field;
- dbhead_t *dbh;
- int dbh_type;
-
- int num_fields;
- dbfield_t *dbf, *cur_f;
- char *cp, *t_cp;
- int i;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &fields)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- if (Z_TYPE_P(fields) != IS_ARRAY) {
- php_error(E_WARNING, "Expected array as second parameter");
- RETURN_FALSE;
- }
-
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields));
-
- if (num_fields != dbh->db_nfields) {
- php_error(E_WARNING, "Wrong number of fields specified");
- RETURN_FALSE;
- }
-
- cp = t_cp = (char *)emalloc(dbh->db_rlen + 1);
- if (!cp) {
- php_error(E_WARNING, "unable to allocate memory");
- RETURN_FALSE;
- }
- *t_cp++ = VALID_RECORD;
-
- dbf = dbh->db_fields;
- for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) {
- zval tmp;
- if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void **)&field) == FAILURE) {
- php_error(E_WARNING, "unexpected error");
- efree(cp);
- RETURN_FALSE;
- }
-
- tmp = **field;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- sprintf(t_cp, cur_f->db_format, Z_STRVAL(tmp));
- zval_dtor(&tmp);
- t_cp += cur_f->db_flen;
- }
-
- dbh->db_records++;
- if (put_dbf_record(dbh, dbh->db_records, cp) < 0) {
- php_error(E_WARNING, "unable to put record at %ld", dbh->db_records);
- efree(cp);
- RETURN_FALSE;
- }
-
- put_dbf_info(dbh);
- efree(cp);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool dbase_replace_record(int identifier, array data, int recnum)
- Replaces a record to the database */
-PHP_FUNCTION(dbase_replace_record)
-{
- pval *dbh_id, *fields, **field, *recnum;
- dbhead_t *dbh;
- int dbh_type;
-
- int num_fields;
- dbfield_t *dbf, *cur_f;
- char *cp, *t_cp;
- int i;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &dbh_id, &fields, &recnum)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- convert_to_long(recnum);
- if (Z_TYPE_P(fields) != IS_ARRAY) {
- php_error(E_WARNING, "Expected array as second parameter");
- RETURN_FALSE;
- }
-
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields));
-
- if (num_fields != dbh->db_nfields) {
- php_error(E_WARNING, "Wrong number of fields specified");
- RETURN_FALSE;
- }
-
- cp = t_cp = (char *)emalloc(dbh->db_rlen + 1);
- if (!cp) {
- php_error(E_WARNING, "unable to allocate memory");
- RETURN_FALSE;
- }
- *t_cp++ = VALID_RECORD;
-
- dbf = dbh->db_fields;
- for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) {
- if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void **)&field) == FAILURE) {
- php_error(E_WARNING, "unexpected error");
- efree(cp);
- RETURN_FALSE;
- }
- convert_to_string_ex(field);
- sprintf(t_cp, cur_f->db_format, Z_STRVAL_PP(field));
- t_cp += cur_f->db_flen;
- }
-
- if (put_dbf_record(dbh, Z_LVAL_P(recnum), cp) < 0) {
- php_error(E_WARNING, "unable to put record at %ld", dbh->db_records);
- efree(cp);
- RETURN_FALSE;
- }
-
- put_dbf_info(dbh);
- efree(cp);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool dbase_delete_record(int identifier, int record)
- Marks a record to be deleted */
-PHP_FUNCTION(dbase_delete_record)
-{
- pval *dbh_id, *record;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &record)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- convert_to_long(record);
-
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- if (del_dbf_record(dbh, Z_LVAL_P(record)) < 0) {
- if (Z_LVAL_P(record) > dbh->db_records) {
- php_error(E_WARNING, "record %d out of bounds", Z_LVAL_P(record));
- } else {
- php_error(E_WARNING, "unable to delete record %d", Z_LVAL_P(record));
- }
- RETURN_FALSE;
- }
-
- put_dbf_info(dbh);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array dbase_get_record(int identifier, int record)
- Returns an array representing a record from the database */
-PHP_FUNCTION(dbase_get_record)
-{
- pval *dbh_id, *record;
- dbhead_t *dbh;
- int dbh_type;
- dbfield_t *dbf, *cur_f;
- char *data, *fnp, *str_value;
- size_t cursize = 0;
- long overflow_test;
- int errno_save;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &record)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- convert_to_long(record);
-
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- if ((data = get_dbf_record(dbh, Z_LVAL_P(record))) == NULL) {
- php_error(E_WARNING, "Tried to read bad record %d", Z_LVAL_P(record));
- RETURN_FALSE;
- }
-
- dbf = dbh->db_fields;
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- fnp = NULL;
- for (cur_f = dbf; cur_f < &dbf[dbh->db_nfields]; cur_f++) {
- /* get the value */
- str_value = (char *)emalloc(cur_f->db_flen + 1);
-
- if(cursize <= (unsigned)cur_f->db_flen) {
- cursize = cur_f->db_flen + 1;
- fnp = erealloc(fnp, cursize);
- }
- snprintf(str_value, cursize, cur_f->db_format, get_field_val(data, cur_f, fnp));
-
- /* now convert it to the right php internal type */
- switch (cur_f->db_type) {
- case 'C':
- case 'D':
- add_next_index_string(return_value, str_value, 1);
- break;
- case 'I': /* FALLS THROUGH */
- case 'N':
- if (cur_f->db_fdc == 0) {
- /* Large integers in dbase can be larger than long */
- errno_save = errno;
- overflow_test = strtol(str_value, NULL, 10);
- if (errno == ERANGE) {
- /* If the integer is too large, keep it as string */
- add_next_index_string(return_value, str_value, 1);
- } else {
- add_next_index_long(return_value, overflow_test);
- }
- errno = errno_save;
- } else {
- add_next_index_double(return_value, atof(str_value));
- }
- break;
- case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N
- and insert 1 or 0, respectively. db_fdc is the number of
- decimals, which we don't care about. 3/14/2001 LEW */
- if ((*str_value == 'T') || (*str_value == 'Y')) {
- add_next_index_long(return_value, strtol("1", NULL, 10));
- } else {
- if ((*str_value == 'F') || (*str_value == 'N')) {
- add_next_index_long(return_value, strtol("0", NULL, 10));
- } else {
- add_next_index_long(return_value, strtol(" ", NULL, 10));
- }
- }
- break;
- case 'M':
- /* this is a memo field. don't know how to deal with
- this yet */
- break;
- default:
- /* should deal with this in some way */
- break;
- }
- efree(str_value);
- }
- efree(fnp);
-
- /* mark whether this record was deleted */
- if (data[0] == '*') {
- add_assoc_long(return_value, "deleted", 1);
- }
- else {
- add_assoc_long(return_value, "deleted", 0);
- }
-
- free(data);
-}
-/* }}} */
-
-/* From Martin Kuba <makub@aida.inet.cz> */
-/* {{{ proto array dbase_get_record_with_names(int identifier, int record)
- Returns an associative array representing a record from the database */
-PHP_FUNCTION(dbase_get_record_with_names)
-{
- pval *dbh_id, *record;
- dbhead_t *dbh;
- int dbh_type;
- dbfield_t *dbf, *cur_f;
- char *data, *fnp, *str_value;
- long overflow_test;
- int errno_save;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &record)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(dbh_id);
- convert_to_long(record);
-
- dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id));
- RETURN_FALSE;
- }
-
- if ((data = get_dbf_record(dbh, Z_LVAL_P(record))) == NULL) {
- php_error(E_WARNING, "Tried to read bad record %d", Z_LVAL_P(record));
- RETURN_FALSE;
- }
-
- dbf = dbh->db_fields;
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- fnp = (char *)emalloc(dbh->db_rlen);
- for (cur_f = dbf; cur_f < &dbf[dbh->db_nfields]; cur_f++) {
- /* get the value */
- str_value = (char *)emalloc(cur_f->db_flen + 1);
- sprintf(str_value, cur_f->db_format, get_field_val(data, cur_f, fnp));
-
- /* now convert it to the right php internal type */
- switch (cur_f->db_type) {
- case 'C':
- case 'D':
- add_assoc_string(return_value, cur_f->db_fname, str_value, 1);
- break;
- case 'I': /* FALLS THROUGH */
- case 'N':
- if (cur_f->db_fdc == 0) {
- /* Large integers in dbase can be larger than long */
- errno_save = errno;
- overflow_test = strtol(str_value, NULL, 10);
- if (errno == ERANGE) {
- /* If the integer is too large, keep it as string */
- add_assoc_string(return_value, cur_f->db_fname, str_value, 1);
- } else {
- add_assoc_long(return_value, cur_f->db_fname, overflow_test);
- }
- errno = errno_save;
- } else {
- add_assoc_double(return_value, cur_f->db_fname, atof(str_value));
- }
- break;
- case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N
- and insert 1 or 0, respectively. db_fdc is the number of
- decimals, which we don't care about. 3/14/2001 LEW */
- if ((*str_value == 'T') || (*str_value == 'Y')) {
- add_assoc_long(return_value, cur_f->db_fname,strtol("1", NULL, 10));
- } else {
- if ((*str_value == 'F') || (*str_value == 'N')) {
- add_assoc_long(return_value, cur_f->db_fname,strtol("0", NULL, 10));
- } else {
- add_assoc_long(return_value, cur_f->db_fname,strtol(" ", NULL, 10));
- }
- }
- break;
- case 'M':
- /* this is a memo field. don't know how to deal with this yet */
- break;
- default:
- /* should deal with this in some way */
- break;
- }
- efree(str_value);
- }
- efree(fnp);
-
- /* mark whether this record was deleted */
- if (data[0] == '*') {
- add_assoc_long(return_value, "deleted", 1);
- } else {
- add_assoc_long(return_value, "deleted", 0);
- }
-
- free(data);
-}
-/* }}} */
-
-/* {{{ proto bool dbase_create(string filename, array fields)
- Creates a new dBase-format database file */
-PHP_FUNCTION(dbase_create)
-{
- pval *filename, *fields, **field, **value;
- int fd;
- dbhead_t *dbh;
-
- int num_fields;
- dbfield_t *dbf, *cur_f;
- int i, rlen, handle;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &filename, &fields)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(filename);
-
- if (Z_TYPE_P(fields) != IS_ARRAY) {
- php_error(E_WARNING, "Expected array as second parameter");
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_P(filename), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_P(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fd = VCWD_OPEN_MODE(Z_STRVAL_P(filename), O_BINARY|O_RDWR|O_CREAT, 0644)) < 0) {
- php_error(E_WARNING, "Unable to create database (%d): %s", errno, strerror(errno));
- RETURN_FALSE;
- }
-
- num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields));
-
- /* have to use regular malloc() because this gets free()d by
- code in the dbase library */
- dbh = (dbhead_t *)malloc(sizeof(dbhead_t));
- dbf = (dbfield_t *)malloc(sizeof(dbfield_t) * num_fields);
- if (!dbh || !dbf) {
- php_error(E_WARNING, "Unable to allocate memory for header info");
- RETURN_FALSE;
- }
-
- /* initialize the header structure */
- dbh->db_fields = dbf;
- dbh->db_fd = fd;
- dbh->db_dbt = DBH_TYPE_NORMAL;
- strcpy(dbh->db_date, "19930818");
- dbh->db_records = 0;
- dbh->db_nfields = num_fields;
- dbh->db_hlen = sizeof(struct dbf_dhead) + 1 + num_fields * sizeof(struct dbf_dfield);
-
- rlen = 1;
- /**
- * Patch by greg@darkphoton.com
- **/
- /* make sure that the db_format entries for all fields are set to NULL to ensure we
- don't seg fault if there's an error and we need to call free_dbf_head() before all
- fields have been defined. */
- for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) {
- cur_f->db_format = NULL;
- }
- /**
- * end patch
- */
-
-
- for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) {
- /* look up the first field */
- if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void **)&field) == FAILURE) {
- php_error(E_WARNING, "unable to find field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP (field) != IS_ARRAY) {
- php_error(E_WARNING, "second parameter must be array of arrays");
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
-
- /* field name */
- if (zend_hash_index_find(Z_ARRVAL_PP(field), 0, (void **)&value) == FAILURE) {
- php_error(E_WARNING, "expected field name as first element of list in field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- convert_to_string_ex(value);
- if (Z_STRLEN_PP(value) > 10 || Z_STRLEN_PP(value) == 0) {
- php_error(E_WARNING, "invalid field name '%s' (must be non-empty and less than or equal to 10 characters)", Z_STRVAL_PP(value));
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- copy_crimp(cur_f->db_fname, Z_STRVAL_PP(value), Z_STRLEN_PP(value));
-
- /* field type */
- if (zend_hash_index_find(Z_ARRVAL_PP (field), 1, (void **)&value) == FAILURE) {
- php_error(E_WARNING, "expected field type as sececond element of list in field %d", i);
- RETURN_FALSE;
- }
- convert_to_string_ex(value);
- cur_f->db_type = toupper(*Z_STRVAL_PP(value));
-
- cur_f->db_fdc = 0;
-
- /* verify the field length */
- switch (cur_f->db_type) {
- case 'L':
- cur_f->db_flen = 1;
- break;
- case 'M':
- cur_f->db_flen = 10;
- dbh->db_dbt = DBH_TYPE_MEMO;
- /* should create the memo file here, probably */
- break;
- case 'D':
- cur_f->db_flen = 8;
- break;
- case 'N':
- case 'C':
- /* field length */
- if (zend_hash_index_find(Z_ARRVAL_PP (field), 2, (void **)&value) == FAILURE) {
- php_error(E_WARNING, "expected field length as third element of list in field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- convert_to_long_ex(value);
- cur_f->db_flen = Z_LVAL_PP(value);
-
- if (cur_f->db_type == 'N') {
- if (zend_hash_index_find(Z_ARRVAL_PP (field), 3, (void **)&value) == FAILURE) {
- php_error(E_WARNING, "expected field precision as fourth element of list in field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- convert_to_long_ex(value);
- cur_f->db_fdc = Z_LVAL_PP(value);
- }
- break;
- default:
- php_error(E_WARNING, "unknown field type '%c'", cur_f->db_type);
- }
- cur_f->db_foffset = rlen;
- rlen += cur_f->db_flen;
-
- cur_f->db_format = get_dbf_f_fmt(cur_f);
- }
-
- dbh->db_rlen = rlen;
- put_dbf_info(dbh);
-
- handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead));
- RETURN_LONG(handle);
-}
-/* }}} */
-
-/* {{{ dbase_functions[]
- */
-function_entry dbase_functions[] = {
- PHP_FE(dbase_open, NULL)
- PHP_FE(dbase_create, NULL)
- PHP_FE(dbase_close, NULL)
- PHP_FE(dbase_numrecords, NULL)
- PHP_FE(dbase_numfields, NULL)
- PHP_FE(dbase_add_record, NULL)
- PHP_FE(dbase_replace_record, NULL)
- PHP_FE(dbase_get_record, NULL)
- PHP_FE(dbase_get_record_with_names, NULL)
- PHP_FE(dbase_delete_record, NULL)
- PHP_FE(dbase_pack, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry dbase_module_entry = {
- STANDARD_MODULE_HEADER,
- "dbase", dbase_functions, PHP_MINIT(dbase), PHP_MSHUTDOWN(dbase), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_DBASE
-ZEND_GET_MODULE(dbase)
-
-#if (WIN32|WINNT) && defined(THREAD_SAFE)
-
-/*NOTE: You should have an odbc.def file where you
-export DllMain*/
-BOOL WINAPI DllMain(HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved)
-{
- return 1;
-}
-#endif
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dbase/dbase.dsp b/ext/dbase/dbase.dsp
deleted file mode 100644
index 63bb66dbcc..0000000000
--- a/ext/dbase/dbase.dsp
+++ /dev/null
@@ -1,151 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dbase" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dbase - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dbase.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dbase.mak" CFG="dbase - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dbase - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dbase - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dbase - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D HAVE_DBASE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D DBASE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbase.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "dbase - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBASE=1 /D DBASE=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_dbase.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "dbase - Win32 Release_TS"
-# Name "dbase - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dbase.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_head.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_misc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_ndx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_rec.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dbf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_head.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_misc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_ndx.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_rec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dbase.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/dbase/dbf.h b/ext/dbase/dbf.h
deleted file mode 100644
index c7ee8fde71..0000000000
--- a/ext/dbase/dbf.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-/*
- * dbf header structure on disk (pc dbase III)
- *
- * Basic info taken from:
- * "File Formats for Popular PC Software"
- * Jeff Walden
- * (c) 1986 John Wiley & Sons, Inc.
- */
-
-#ifndef DBF_H_
-#define DBF_H_
-
-#include <stdlib.h>
-#include <string.h>
-#ifdef WIN32
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
-/* So we can use O_BINARY on non-Win32 systems. */
-#if !defined(O_BINARY) && !defined(WIN32)
-#define O_BINARY (0)
-#endif
-
-struct dbf_dhead {
- char dbh_dbt; /* memo (dbt) file present */
- char dbh_date[3]; /* last update YY, MM, DD */
- char dbh_records[4]; /* number of records LE */
- char dbh_hlen[2]; /* header length LE */
- char dbh_rlen[2]; /* record length LE */
- char dbh_res[20]; /* padding */
-};
-#define DBH_DATE_YEAR 0 /* byte offset for year in dbh_date */
-#define DBH_DATE_MONTH 1
-#define DBH_DATE_DAY 2
-
-/*
- * field description on disk
- */
-
-#define DBF_NAMELEN 11
-
-struct dbf_dfield {
- char dbf_name[DBF_NAMELEN]; /* name of field */
- char dbf_type; /* type of field */
- char dbf_fda[4]; /* something for dbase III */
- char dbf_flen[2]; /* field length [and decimal if N] */
- char dbf_res[14]; /* padding */
-};
-
-struct db_field {
- char db_fname[DBF_NAMELEN+1]; /* 0 terminated */
- char db_type; /* type of field */
- int db_flen; /* length of field */
- int db_fdc; /* number of decimals in field */
-
- char *db_format; /* format for printing %s etc */
- int db_foffset; /* offset within record */
-};
-typedef struct db_field dbfield_t;
-
-struct db_head {
- int db_fd;
- unsigned char db_dbt; /* dbt present */
- char db_date[9]; /* date of last update in db format */
- long db_records; /* number of records */
- int db_hlen; /* header length */
- int db_rlen; /* record length */
-
- int db_nfields; /* number of fields */
- dbfield_t *db_fields; /* field info */
- char *db_name; /* name of dbf file */
- int db_cur_rec; /* current record */
-};
-typedef struct db_head dbhead_t;
-
-#define DBH_TYPE_NORMAL 0x03
-#define DBH_TYPE_MEMO 0x83
-
-#define VALID_RECORD ' '
-#define DELETED_RECORD '*'
-
-#include "dbf_head.h"
-#include "dbf_misc.h"
-#include "dbf_rec.h"
-
-#endif /* DBF_H_ */
diff --git a/ext/dbase/dbf_head.c b/ext/dbase/dbf_head.c
deleted file mode 100644
index e73d134907..0000000000
--- a/ext/dbase/dbf_head.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "php.h"
-#include "dbf.h"
-
-void free_dbf_head(dbhead_t *dbh);
-int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf);
-
-/*
- * get the header info from the file
- * basic header info & field descriptions
- */
-dbhead_t *get_dbf_head(int fd)
-{
- dbhead_t *dbh;
- struct dbf_dhead dbhead;
- dbfield_t *dbf, *cur_f, *tdbf;
- int ret, nfields, offset, gf_retval;
-
- if ((dbh = (dbhead_t *)malloc(sizeof(dbhead_t))) == NULL)
- return NULL;
- if (lseek(fd, 0, 0) < 0)
- return NULL;
- if ((ret = read(fd, &dbhead, sizeof(dbhead))) < 0)
- return NULL;
-
- /* build in core info */
- dbh->db_fd = fd;
- dbh->db_dbt = dbhead.dbh_dbt;
- dbh->db_records = get_long(dbhead.dbh_records);
- dbh->db_hlen = get_short(dbhead.dbh_hlen);
- dbh->db_rlen = get_short(dbhead.dbh_rlen);
-
- db_set_date(dbh->db_date, dbhead.dbh_date[DBH_DATE_YEAR] + 1900,
- dbhead.dbh_date[DBH_DATE_MONTH],
- dbhead.dbh_date[DBH_DATE_DAY]);
-
- /* malloc enough memory for the maximum number of fields:
- 32 * 254 = 8128 bytes */
- tdbf = (dbfield_t *)malloc(sizeof(dbfield_t)*254);
-
- offset = 1;
- nfields = 0;
- gf_retval = 0;
- for (cur_f = tdbf; gf_retval < 2 && nfields < 254; cur_f++) {
- gf_retval = get_dbf_field(dbh, cur_f);
-
- if (gf_retval < 0) {
- free_dbf_head(dbh);
- return NULL;
- }
- if (gf_retval != 2 ) {
- cur_f->db_foffset = offset;
- offset += cur_f->db_flen;
- nfields++;
- }
- }
- dbh->db_nfields = nfields;
-
- /* malloc the right amount of space for records, copy and destroy old */
- dbf = (dbfield_t *)malloc(sizeof(dbfield_t)*nfields);
- memcpy(dbf, tdbf, sizeof(dbfield_t)*nfields);
- free(tdbf);
-
- dbh->db_fields = dbf;
-
- return dbh;
-}
-
-/*
- * free up the header info built above
- */
-void free_dbf_head(dbhead_t *dbh)
-{
- dbfield_t *dbf, *cur_f;
- int nfields;
-
- dbf = dbh->db_fields;
- nfields = dbh->db_nfields;
- for (cur_f = dbf; cur_f < &dbf[nfields]; cur_f++) {
- if (cur_f->db_format) {
- free(cur_f->db_format);
- }
- }
-
- free(dbf);
- free(dbh);
-}
-
-/*
- * put out the header info
- */
-int put_dbf_head(dbhead_t *dbh)
-{
- int fd = dbh->db_fd;
- struct dbf_dhead dbhead;
- int ret;
-
- memset (&dbhead, 0, sizeof(dbhead));
-
- /* build on disk info */
- dbhead.dbh_dbt = dbh->db_dbt;
- put_long(dbhead.dbh_records, dbh->db_records);
- put_short(dbhead.dbh_hlen, dbh->db_hlen);
- put_short(dbhead.dbh_rlen, dbh->db_rlen);
-
- /* put the date spec'd into the on disk header */
- dbhead.dbh_date[DBH_DATE_YEAR] =(char)(db_date_year(dbh->db_date) -
- 1900);
- dbhead.dbh_date[DBH_DATE_MONTH]=(char)(db_date_month(dbh->db_date));
- dbhead.dbh_date[DBH_DATE_DAY] =(char)(db_date_day(dbh->db_date));
-
- if (lseek(fd, 0, 0) < 0)
- return -1;
- if ((ret = write(fd, &dbhead, sizeof(dbhead))) < 0)
- return -1;
- return ret;
-}
-
-/*
- * get a field off the disk from the current file offset
- */
-int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf)
-{
- struct dbf_dfield dbfield;
- int ret;
-
- if ((ret = read(dbh->db_fd, &dbfield, sizeof(dbfield))) < 0) {
- return ret;
- }
-
- /* Check for the '0Dh' field terminator , if found return '2'
- which will tell the loop we are at the end of fields */
- if (dbfield.dbf_name[0]==0x0d) {
- return 2;
- }
-
- /* build the field name */
- copy_crimp(dbf->db_fname, dbfield.dbf_name, DBF_NAMELEN);
-
- dbf->db_type = dbfield.dbf_type;
- switch (dbf->db_type) {
- case 'N':
- dbf->db_flen = dbfield.dbf_flen[0];
- dbf->db_fdc = dbfield.dbf_flen[1];
- break;
- default:
- dbf->db_flen = get_short(dbfield.dbf_flen);
- break;
- }
-
- if ((dbf->db_format = get_dbf_f_fmt(dbf)) == NULL) {
- return 1;
- }
-
- return 0;
-}
-
-/*
- * put a field out on the disk at the current file offset
- */
-int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf)
-{
- struct dbf_dfield dbfield;
- char *scp, *dcp;
- int ret;
-
- memset (&dbfield, 0, sizeof(dbfield));
-
- /* build the on disk field info */
- scp = dbf->db_fname; dcp = dbfield.dbf_name;
-
- strncpy(dbfield.dbf_name, dbf->db_fname, DBF_NAMELEN);
-
- dbfield.dbf_type = dbf->db_type;
- switch (dbf->db_type) {
- case 'N':
- dbfield.dbf_flen[0] = dbf->db_flen;
- dbfield.dbf_flen[1] = dbf->db_fdc;
- break;
- default:
- put_short(dbfield.dbf_flen, dbf->db_flen);
- }
-
- /* now write it out to disk */
- if ((ret = write(dbh->db_fd, &dbfield, sizeof(dbfield))) < 0) {
- return ret;
- }
- return 1;
-}
-
-/*
- * put out all the info at the top of the file...
- */
-static char end_stuff[2] = {0x0d, 0};
-
-void put_dbf_info(dbhead_t *dbh)
-{
- dbfield_t *dbf;
- char *cp;
- int fcnt;
-
- if ((cp = db_cur_date(NULL))) {
- strncpy(dbh->db_date, cp, 8);
- free(cp);
- }
- put_dbf_head(dbh);
- dbf = dbh->db_fields;
- for (fcnt = dbh->db_nfields; fcnt > 0; fcnt--, dbf++)
- put_dbf_field(dbh, dbf);
- write(dbh->db_fd, end_stuff, 1);
-}
-
-char *get_dbf_f_fmt(dbfield_t *dbf)
-{
- char format[100];
-
- /* build the field format for printf */
- switch (dbf->db_type) {
- case 'C':
- sprintf(format, "%%-%ds", dbf->db_flen);
- break;
- case 'N':
- case 'L':
- case 'D':
- sprintf(format, "%%%ds", dbf->db_flen);
- break;
- case 'M':
- strcpy(format, "%s");
- break;
- }
- return (char *)strdup(format);
-}
-
-dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC)
-{
- int fd;
- char *cp;
- dbhead_t *dbh;
-
- cp = dp;
- if ((fd = VCWD_OPEN(cp, o_flags|O_BINARY)) < 0) {
- cp = (char *)malloc(256);
- strcpy(cp, dp); strcat(cp, ".dbf");
- if ((fd = VCWD_OPEN(cp, o_flags)) < 0) {
- perror("open");
- return NULL;
- }
- }
-
- if ((dbh = get_dbf_head(fd)) == 0) {
- fprintf(stderr, "Unable to get header\n");
- return NULL;
- }
- dbh->db_name = cp;
- dbh->db_cur_rec = 0;
-
- return dbh;
-}
-
-void dbf_head_info(dbhead_t *dbh)
-{
- int nfields;
- dbfield_t *dbf, *cur_f;
-
- nfields = dbh->db_nfields;
- printf("# fields: %d, record len: %d, total records %ld\n",
- nfields, dbh->db_rlen, dbh->db_records);
- dbf = dbh->db_fields;
- for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) {
- printf("# %s, %c, %d, %d\n", cur_f->db_fname,
- cur_f->db_type, cur_f->db_flen, cur_f->db_fdc);
- }
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dbase/dbf_head.h b/ext/dbase/dbf_head.h
deleted file mode 100644
index 9a17a3a91f..0000000000
--- a/ext/dbase/dbf_head.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "php.h"
-
-extern dbhead_t *get_dbf_head(int fd);
-void free_dbf_head(dbhead_t *dbh);
-extern int put_dbf_head(dbhead_t *dbh);
-extern int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf);
-extern int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf);
-void put_dbf_info(dbhead_t *dbh);
-extern char *get_dbf_f_fmt(dbfield_t *dbf);
-extern dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC);
-void dbf_head_info(dbhead_t *dbh);
diff --git a/ext/dbase/dbf_misc.c b/ext/dbase/dbf_misc.c
deleted file mode 100644
index ad17bd4e3f..0000000000
--- a/ext/dbase/dbf_misc.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "dbf_misc.h"
-
-#include "php_reentrancy.h"
-
-/*
- * routine to change little endian long to host long
- */
-long get_long(char *cp)
-{
- int ret;
- unsigned char *source = (unsigned char *)cp;
-
- ret = *source++;
- ret += ((*source++)<<8);
- ret += ((*source++)<<16);
- ret += ((*source++)<<24);
-
- return ret;
-}
-
-void put_long(char *cp, long lval)
-{
- *cp++ = lval & 0xff;
- *cp++ = (lval >> 8) & 0xff;
- *cp++ = (lval >> 16) & 0xff;
- *cp++ = (lval >> 24) & 0xff;
-}
-
-/*
- * routine to change little endian short to host short
- */
-int get_short(char *cp)
-{
- int ret;
- unsigned char *source = (unsigned char *)cp;
-
- ret = *source++;
- ret += ((*source++)<<8);
-
- return ret;
-}
-
-void put_short(char *cp, int sval)
-{
- *cp++ = sval & 0xff;
- *cp++ = (sval >> 8) & 0xff;
-}
-
-double get_double(char *cp)
-{
- double ret;
- unsigned char *dp = (unsigned char *)&ret;
-
- dp[7] = *cp++;
- dp[6] = *cp++;
- dp[5] = *cp++;
- dp[4] = *cp++;
- dp[3] = *cp++;
- dp[2] = *cp++;
- dp[1] = *cp++;
- dp[0] = *cp++;
-
- return ret;
-}
-
-void put_double(char *cp, double fval)
-{
- unsigned char *dp = (unsigned char *)&fval;
-
- cp[7] = *dp++;
- cp[6] = *dp++;
- cp[5] = *dp++;
- cp[4] = *dp++;
- cp[3] = *dp++;
- cp[2] = *dp++;
- cp[1] = *dp++;
- cp[0] = *dp++;
-}
-
-void copy_fill(char *dp, char *sp, int len)
-{
- while (*sp && len > 0) {
- *dp++ = *sp++;
- len--;
- }
- while (len-- > 0)
- *dp++ = ' ';
-}
-
-void copy_crimp(char *dp, char *sp, int len)
-{
- while (len-- > 0) {
- *dp++ = *sp++;
- }
- *dp = 0;
- for (dp-- ; *dp == ' '; dp--) {
- *dp = 0;
- }
-
-}
-
-void db_set_date(char *cp, int year, int month, int day)
-{
- if (month > 12)
- month = 0;
- if (day > 31)
- day = 0;
- sprintf(cp, "%d", year);
- cp[4] = month / 10 + '0';
- cp[5] = month % 10 + '0';
- cp[6] = day / 10 + '0';
- cp[7] = day % 10 + '0';
- cp[8] = 0;
-}
-
-int db_date_year(char *cp)
-{
- int year, i;
-
- for (year = 0, i = 0; i < 4; i++)
- year = year * 10 + (cp[i] - '0');
- return year;
-}
-
-int db_date_month(char *cp)
-{
- int month, i;
-
- for (month = 0, i = 4; i < 6; i++)
- month = month * 10 + (cp[i] - '0');
- return month;
-}
-
-int db_date_day(char *cp)
-{
- int day, i;
-
- for (day = 0, i = 6; i < 8; i++)
- day = day * 10 + (cp[i] - '0');
- return day;
-}
-
-#include <time.h>
-
-char *db_cur_date(char *cp)
-{
- struct tm *ctm, tmbuf;
- time_t c_time;
-
- c_time = time((time_t *)NULL);
- ctm = php_localtime_r(&c_time, &tmbuf);
- if (cp == NULL)
- cp = (char *)malloc(9);
-
- if (ctm == NULL || cp == NULL)
- return NULL;
-
- db_set_date(cp, ctm->tm_year + 1900, ctm->tm_mon + 1, ctm->tm_mday);
-
- return cp;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dbase/dbf_misc.h b/ext/dbase/dbf_misc.h
deleted file mode 100644
index 37fe8b0ea9..0000000000
--- a/ext/dbase/dbf_misc.h
+++ /dev/null
@@ -1,13 +0,0 @@
-void put_long(char *cp, long lval);
-extern long get_long(char *cp);
-extern int get_short(char *cp);
-void put_short(char *cp, int sval);
-void put_double(char *cp, double fval);
-extern double get_double(char *cp);
-void copy_fill(char *dp, char *sp, int len);
-void copy_crimp(char *dp, char *sp, int len);
-void db_set_date(char *cp, int year, int month, int day);
-extern int db_date_year(char *cp);
-extern int db_date_month(char *cp);
-extern int db_date_day(char *cp);
-extern char *db_cur_date(char *cp);
diff --git a/ext/dbase/dbf_ndx.c b/ext/dbase/dbf_ndx.c
deleted file mode 100644
index 121a0e81e2..0000000000
--- a/ext/dbase/dbf_ndx.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "dbf.h"
-#include "dbf_ndx.h"
-
-/*
- * get the ndx header for this file
- */
-ndx_header_t *ndx_get_header(int fd)
-{
- dndx_header_t *dp;
- ndx_header_t *np;
-
- if ((dp = (dndx_header_t *)malloc(NDX_PAGE_SZ)) == NULL)
- return NULL;
- if ((np = (ndx_header_t *)malloc(sizeof(ndx_header_t))) == NULL) {
- free(dp);
- return NULL;
- }
- if ((lseek(fd, 0, 0) < 0) || (read(fd, dp, NDX_PAGE_SZ) < 0)) {
- free(dp); free(np);
- return NULL;
- }
- np->ndx_hpage = dp;
- np->ndx_fd = fd;
- np->ndx_start_pg = get_long(dp->dndx_st_pg);
- np->ndx_total_pgs = get_long(dp->dndx_tot_pg);
- np->ndx_key_len = get_short(dp->dndx_key_len);
- np->ndx_keys_ppg = get_short(dp->dndx_keys_ppg);
- np->ndx_key_type = get_short(dp->dndx_key_type);
- np->ndx_key_size = get_long(dp->dndx_size_key);
- np->ndx_key_name = dp->dndx_key_name;
- np->ndx_unique = dp->dndx_unique;
-
- np->ndx_fp = NULL;
-
- return np;
-}
-
-static ndx_page_t *ndx_get_page(ndx_header_t *hp, int pageno)
-{
- ndx_page_t *fp;
- dndx_page_t *dp;
- ndx_record_t *rp;
-
-#if PHP_DEBUG
- printf("getting page %d", pageno);
-#endif
- if ((fp = (ndx_page_t *)malloc(sizeof(ndx_page_t))) == NULL)
- return NULL;
- if ((dp = (dndx_page_t *)malloc(NDX_PAGE_SZ)) == NULL) {
- free(fp);
- return NULL;
- }
- if ((rp = (ndx_record_t *)malloc(sizeof(ndx_record_t) * hp->ndx_keys_ppg)) == NULL) {
- free(dp); free(fp);
- return NULL;
- }
- fp->ndxp_page_data = dp;
- if ((lseek(hp->ndx_fd, pageno * NDX_PAGE_SZ, 0) < 0) ||
- (read(hp->ndx_fd, dp, NDX_PAGE_SZ) < 0)) {
- free(fp); free(dp);
- return NULL;
- }
- fp->ndxp_parent = NULL;
- fp->ndxp_page_no = pageno;
- fp->ndxp_num_keys = get_long(dp->dndxp_num_keys);
- memset(rp, 0, sizeof(ndx_record_t) * hp->ndx_keys_ppg);
- fp->ndxp_records = rp;
- fp->ndxp_header_p = hp;
-#if PHP_DEBUG
- printf(", n_keys %ld\n", fp->ndxp_num_keys);
-#endif
- return fp;
-}
-
-/*
- * get the first entry for this ndx
- */
-static ndx_page_t *ndx_get_first_pg(ndx_header_t *hp)
-{
- ndx_page_t *fp;
-
- if (hp->ndx_fp)
- return hp->ndx_fp;
- if ((fp = ndx_get_page(hp, hp->ndx_start_pg))) {
- hp->ndx_fp = fp;
- }
- return fp;
-}
-
-static ndx_record_t *ndx_get_record(ndx_page_t *fp, int rec_no)
-{
- ndx_record_t *rp;
- ndx_header_t *hp = fp->ndxp_header_p;
- struct dndx_record *drp;
-
-#if PHP_DEBUG
- printf("page %ld, rec %d: ", fp->ndxp_page_no, rec_no);
-#endif
- if (rec_no >= fp->ndxp_num_keys)
- return NULL;
- rp = &(fp->ndxp_records[rec_no]);
- if (!rp->ndxr_page) {
- rp->ndxr_page = fp;
- drp = (dndx_record_t *)((char *)&fp->ndxp_page_data->dndx_rp
- + rec_no * hp->ndx_key_size);
- rp->ndxr_left = get_long(drp->dndx_left_pg);
- rp->ndxr_rec = get_long(drp->dndx_dbf_rec);
- rp->ndxr_key_data = &drp->dndx_key_data;
- rp->ndxr_p_nrec = rec_no;
- }
-#if PHP_DEBUG
- printf("left %ld, dbf_rec %ld, data '%s'\n", rp->ndxr_left,
- rp->ndxr_rec, rp->ndxr_key_data);
-#endif
- return rp;
-}
-
-static ndx_record_t *ndx_scan_down(ndx_header_t *hp, ndx_page_t *fp, int recno)
-{
- ndx_page_t *np;
- ndx_record_t *rp;
-
- while ((rp = ndx_get_record(fp, recno)) && (rp->ndxr_rec == 0)) {
- np = ndx_get_page(hp, rp->ndxr_left);
- np->ndxp_parent = fp;
- np->ndxp_par_rno = recno;
- fp = np;
- recno = 0;
- }
- return rp;
-}
-
-static ndx_record_t *ndx_scan_up(ndx_header_t *hp, ndx_page_t *fp, int recno)
-{
- ndx_record_t *rp;
-
- if (fp == NULL)
- rp = NULL;
- else if (recno < fp->ndxp_num_keys) {
- rp = ndx_scan_down(hp, fp, recno);
- } else {
- rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1);
- }
- return rp;
-}
-
-ndx_record_t *ndx_get_first_rec(ndx_header_t *hp)
-{
- ndx_page_t *fp;
- ndx_record_t *rp = NULL;
-
- if ((fp = ndx_get_first_pg(hp))) {
- fp->ndxp_last_key = 0;
- rp = ndx_scan_down(hp, fp, 0);
- }
- hp->ndx_cur_rec = rp;
- return rp;
-}
-
-ndx_record_t *ndx_get_next_rec(ndx_header_t *hp, ndx_record_t *rp)
-{
- ndx_page_t *fp;
- int rec_no;
-
- fp = rp->ndxr_page;
- rec_no = rp->ndxr_p_nrec + 1;
- if (rec_no < fp->ndxp_num_keys) {
- rp = ndx_scan_down(hp, fp, rec_no);
- } else {
- rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1);
- }
- return rp;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dbase/dbf_ndx.h b/ext/dbase/dbf_ndx.h
deleted file mode 100644
index 4bc3d29641..0000000000
--- a/ext/dbase/dbf_ndx.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-/*
- * dbf .ndx header structure on disk and in memory
- *
- * Basic info taken from:
- * "Clipper Programming Guide, 3rd Edition, Version 5.01"
- * by Rick Spence
- */
-
-#ifndef DBF_NDX_H_
-#define DBF_NDX_H_
-
-#include "dbf.h"
-
-#define NDX_PAGE_SZ 512
-
-/* on disk ndx header */
-struct dndx_header {
- char dndx_st_pg[4]; /* starting page number */
- char dndx_tot_pg[4]; /* total number of pages */
- char dndx_filler1[4]; /* space */
- char dndx_key_len[2]; /* key length */
- char dndx_keys_ppg[2]; /* number of keys per page */
- char dndx_key_type[2]; /* key type */
- char dndx_size_key[4]; /* size of the key record */
- char dndx_filler2; /* space */
- char dndx_unique; /* whether or not done with unique */
- char dndx_key_name[488]; /* string defining the key */
-};
-typedef struct dndx_header dndx_header_t;
-
-/* in memory ndx header */
-struct ndx_header {
- long ndx_start_pg;
- long ndx_total_pgs;
- unsigned short ndx_key_len;
- unsigned short ndx_keys_ppg;
- unsigned short ndx_key_type;
- char ndx_unique;
- long ndx_key_size;
- char *ndx_key_name;
- int ndx_fd;
- struct ndx_page *ndx_fp;
- dndx_header_t *ndx_hpage;
- struct ndx_record *ndx_cur_rec;
-};
-typedef struct ndx_header ndx_header_t;
-
-/* these are the possible values in the key type field */
-#define NDX_CHAR_TYPE 00
-#define NDX_NUM_TYPE 01
-
-/* on disk key record */
-struct dndx_record {
- char dndx_left_pg[4]; /* number of left page */
- char dndx_dbf_rec[4]; /* dbf record number */
- char dndx_key_data; /* key data */
-};
-typedef struct dndx_record dndx_record_t;
-
-struct ndx_record {
- long ndxr_left;
- long ndxr_rec;
- char *ndxr_key_data;
- struct ndx_page *ndxr_page; /* page pointer to where we are from*/
- int ndxr_p_nrec; /* number of the record within page */
-};
-typedef struct ndx_record ndx_record_t;
-
-struct dndx_page {
- char dndxp_num_keys[4]; /* number of keys on this page */
- struct dndx_record dndx_rp;
-};
-typedef struct dndx_page dndx_page_t;
-
-struct ndx_page {
- long ndxp_page_no;
- long ndxp_num_keys;
- dndx_page_t *ndxp_page_data;
- ndx_header_t *ndxp_header_p;
- long ndxp_last_key;
- struct ndx_page *ndxp_parent; /* parent page */
- int ndxp_par_rno; /* record number within parent */
- struct ndx_record *ndxp_records;
-};
-typedef struct ndx_page ndx_page_t;
-
-extern ndx_header_t *ndx_get_header(int);
-
-extern ndx_record_t *ndx_get_first_rec(ndx_header_t *);
-extern ndx_record_t *ndx_get_next_rec(ndx_header_t *, ndx_record_t *);
-
-#endif /* DBF_NDX_H_ */
diff --git a/ext/dbase/dbf_rec.c b/ext/dbase/dbf_rec.c
deleted file mode 100644
index 7c976aedc1..0000000000
--- a/ext/dbase/dbf_rec.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-#ifdef PHP_WIN32
-#include "ext/standard/flock_compat.h"
-#endif
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "dbf.h"
-
-int get_piece(dbhead_t *dbh, long offset, char *cp, int len);
-int put_piece(dbhead_t *dbh, long offset, char *cp, int len);
-
-/*
- * get a record off the database
- */
-char *get_dbf_record(dbhead_t *dbh, long rec_num)
-{
- long offset;
- char *cp;
-
- if (rec_num > dbh->db_records) {
- return NULL;
- }
- if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) {
- return NULL;
- }
-
- /* go to the correct spot on the file */
- offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen;
- if (get_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) {
- free(cp);
- cp = NULL;
- }
- if (cp)
- dbh->db_cur_rec = rec_num;
- return cp;
-}
-
-int
-get_piece(dbhead_t *dbh, long offset, char *cp, int len)
-{
- /* go to the correct spot on the file */
- if ( lseek(dbh->db_fd, offset, 0) < 0 ) {
- return -1;
- }
-
- /* read the record into the allocated space */
- return read(dbh->db_fd, cp, len);
-}
-
-/*
- * put a record to the database
- */
-long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp)
-{
- long offset;
-
- if (rec_num == 0) {
- rec_num = dbh->db_records;
- }
- if (rec_num > dbh->db_records) {
- return 0L;
- }
- /* go to the correct spot on the file */
- offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen;
- if (put_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) {
- rec_num = -1;
- }
- return rec_num;
-}
-
-int put_piece(dbhead_t *dbh, long offset, char *cp, int len)
-{
- /* go to the correct spot on the file */
- if ( lseek(dbh->db_fd, offset, 0) < 0 ) {
- return -1;
- }
-
- /* write the record into the file */
- return write(dbh->db_fd, cp, len);
-}
-
-int del_dbf_record(dbhead_t *dbh, long rec_num)
-{
- int ret = 0;
- char *cp;
-
- if (rec_num > dbh->db_records)
- return -1;
- if ((cp = get_dbf_record(dbh, rec_num))) {
- *cp = DELETED_RECORD;
- ret = put_dbf_record(dbh, rec_num, cp);
- free(cp);
- }
- return ret;
-}
-
-void pack_dbf(dbhead_t *dbh)
-{
- long out_off, in_off;
- int rec_cnt, new_cnt;
- char *cp;
-
- if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) {
- return;
- }
- in_off = out_off = dbh->db_hlen;
-
- new_cnt = 0;
- rec_cnt = dbh->db_records;
- while (rec_cnt > 0) {
- if (get_piece(dbh, in_off, cp, dbh->db_rlen) < 0)
- break;
-
- if (*cp != DELETED_RECORD) {
- /* write the record into the file */
- if (put_piece(dbh, out_off, cp, dbh->db_rlen) < 0)
- break;
- out_off += dbh->db_rlen;
- new_cnt++;
- }
- in_off += dbh->db_rlen;
- rec_cnt--;
- }
- free(cp);
-
- /* Try to truncate the file to the right size. */
- if (ftruncate(dbh->db_fd, out_off) != 0) {
- php_error(E_WARNING, "dbase_pack() couldn't truncate the file to the right size. Some deleted records may still be left in there.");
- }
-
- if (rec_cnt == 0)
- dbh->db_records = new_cnt;
-}
-
-/* routine to get a field from a record */
-char *get_field_val(char *rp, dbfield_t *fldp, char *cp)
-{
- int flen = fldp->db_flen;
-
- if ( !cp )
- cp = (char *)malloc(flen + 1);
- if ( cp ) {
- strncpy(cp, &rp[fldp->db_foffset], flen);
- cp[flen] = 0;
- }
- return cp;
-}
-
-void put_field_val(char *rp, dbfield_t *fldp, char *cp)
-{
- strncpy(&rp[fldp->db_foffset], cp, fldp->db_flen);
-}
-
-/*
- * output a record
- */
-void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp)
-{
- dbfield_t *cur_f;
- int nfields = dbh->db_nfields;
- char *fnp = (char *)malloc(dbh->db_rlen);
-
- printf("%c", *cp);
- for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) {
- printf(" ");
- printf(cur_f->db_format, get_field_val(cp, cur_f, fnp));
- }
- printf("\n");
- free(fnp);
-}
-
-/* check for record validity */
-int is_valid_rec(char *cp)
-{
- if (cp && (*cp == VALID_RECORD))
- return 1;
- else
- return 0;
-}
-
-/* get the next record */
-char *dbf_get_next(dbhead_t *dbh)
-{
- return get_dbf_record(dbh, dbh->db_cur_rec + 1);
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/dbase/dbf_rec.h b/ext/dbase/dbf_rec.h
deleted file mode 100644
index 6407c702f6..0000000000
--- a/ext/dbase/dbf_rec.h
+++ /dev/null
@@ -1,10 +0,0 @@
-extern char *get_dbf_record(dbhead_t *dbh, long rec_num);
-extern long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp);
-extern int put_piece(dbhead_t *dbh, long offset, char *cp, int len);
-extern int del_dbf_record(dbhead_t *dbh, long rec_num);
-void pack_dbf(dbhead_t *dbh);
-extern char *get_field_val(char *rp, dbfield_t *fldp, char *cp);
-void put_field_val(char *rp, dbfield_t *fldp, char *cp);
-void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp);
-extern int is_valid_rec(char *cp);
-extern char *dbf_get_next(dbhead_t *dbh);
diff --git a/ext/dbase/php_dbase.h b/ext/dbase/php_dbase.h
deleted file mode 100644
index c9e62b269f..0000000000
--- a/ext/dbase/php_dbase.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_DBASE_H
-#define PHP_DBASE_H
-#if DBASE
-extern zend_module_entry dbase_module_entry;
-#define dbase_module_ptr &dbase_module_entry
-
-PHP_MINIT_FUNCTION(dbase);
-PHP_FUNCTION(dbase_open);
-PHP_FUNCTION(dbase_create);
-PHP_FUNCTION(dbase_close);
-PHP_FUNCTION(dbase_numrecords);
-PHP_FUNCTION(dbase_numfields);
-PHP_FUNCTION(dbase_add_record);
-PHP_FUNCTION(dbase_get_record);
-PHP_FUNCTION(dbase_delete_record);
-PHP_FUNCTION(dbase_pack);
-PHP_FUNCTION(dbase_get_record_with_names);
-#else
-#define dbase_module_ptr NULL
-#endif
-
-#define phpext_dbase_ptr dbase_module_ptr
-
-#endif /* PHP_DBASE_H */
diff --git a/ext/dbx/CREDITS b/ext/dbx/CREDITS
deleted file mode 100644
index efc04660a4..0000000000
--- a/ext/dbx/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-dbx (database abstraction)
-Marc Boeren, Rui Hirokawa, Frank M. Kromann
diff --git a/ext/dbx/INSTALL b/ext/dbx/INSTALL
deleted file mode 100644
index d98e33a42d..0000000000
--- a/ext/dbx/INSTALL
+++ /dev/null
@@ -1,25 +0,0 @@
-
-If you downloaded this separately, you can place the dbx folder
-in the php-source-folders under the ext/ folder. Be sure to
-use buildconf to rebuild the configure script.
-
-Linux:
-
-Compile php with the --enable-dbx switch
-
-Windows:
-
-This should set all includepaths to the right
-relative folders. Open the .dsp and compile. You could also
-add this project to the php_modules project.
-It generates a php_dbx.dll in your extensions folder, and you
-must enable it in your php.ini file.
-
-
-When you run phpinfo(), dbx-support should be visible in the
-resulting table.
-
-Good luck and enjoy!
-
-Marc Boeren
-march 16th, 2001
diff --git a/ext/dbx/config.m4 b/ext/dbx/config.m4
deleted file mode 100644
index 8c5dc11ba8..0000000000
--- a/ext/dbx/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(dbx,whether to enable dbx support,
-[ --enable-dbx Enable dbx])
-
-if test "$PHP_DBX" != "no"; then
- PHP_NEW_EXTENSION(dbx, dbx.c dbx_mysql.c dbx_odbc.c dbx_pgsql.c dbx_mssql.c dbx_fbsql.c dbx_oci8.c dbx_sybasect.c, $ext_shared)
-fi
diff --git a/ext/dbx/dbx.c b/ext/dbx/dbx.c
deleted file mode 100644
index 3031da2499..0000000000
--- a/ext/dbx/dbx.c
+++ /dev/null
@@ -1,818 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_dbx.h"
-#include "ext/standard/info.h"
-
-/* defines for supported databases */
-#define DBX_UNKNOWN 0
-#define DBX_MYSQL 1
-#define DBX_ODBC 2
-#define DBX_PGSQL 3
-#define DBX_MSSQL 4
-#define DBX_FBSQL 5
-#define DBX_OCI8 6
-#define DBX_SYBASECT 7
-/* includes for supported databases */
-#include "dbx.h"
-#include "dbx_mysql.h"
-#include "dbx_odbc.h"
-#include "dbx_pgsql.h"
-#include "dbx_mssql.h"
-#include "dbx_fbsql.h"
-#include "dbx_oci8.h"
-#include "dbx_sybasect.h"
-
-/* support routines */
-int module_exists(char *module_name)
-{
- zend_module_entry *zme;
- int r;
- r = zend_hash_find(&module_registry, module_name, strlen(module_name)+1, (void **) &zme);
- return r==0?1:0;
-}
-
-int module_identifier_exists(long module_identifier)
-{
- switch (module_identifier) {
- case DBX_MYSQL: return module_exists("mysql");
- case DBX_ODBC: return module_exists("odbc");
- case DBX_PGSQL: return module_exists("pgsql");
- case DBX_MSSQL: return module_exists("mssql");
- case DBX_FBSQL: return module_exists("fbsql");
- case DBX_OCI8: return module_exists("oci8");
- case DBX_SYBASECT: return module_exists("sybase_ct");
- }
- return 0;
-}
-
-int get_module_identifier(char *module_name)
-{
- if (!strcmp("mysql", module_name)) return DBX_MYSQL;
- if (!strcmp("odbc", module_name)) return DBX_ODBC;
- if (!strcmp("pgsql", module_name)) return DBX_PGSQL;
- if (!strcmp("mssql", module_name)) return DBX_MSSQL;
- if (!strcmp("fbsql", module_name)) return DBX_FBSQL;
- if (!strcmp("oci8", module_name)) return DBX_OCI8;
- if (!strcmp("sybase_ct", module_name)) return DBX_SYBASECT;
- return DBX_UNKNOWN;
-}
-
-int split_dbx_handle_object(zval **dbx_object, zval ***pdbx_handle, zval ***pdbx_module, zval ***pdbx_database)
-{
- convert_to_object_ex(dbx_object);
- if (zend_hash_find(Z_OBJPROP_PP(dbx_object), "handle", 7, (void **) pdbx_handle)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_object), "module", 7, (void **) pdbx_module)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_object), "database", 9, (void **) pdbx_database)==FAILURE) {
- return 0;
- }
- return 1;
-}
-
-/* from dbx.h, to be used in support-files (dbx_mysql.c etc...) */
-void dbx_call_any_function(INTERNAL_FUNCTION_PARAMETERS, char *function_name, zval **returnvalue, int number_of_arguments, zval ***params)
-{
- zval *zval_function_name;
-
- MAKE_STD_ZVAL(zval_function_name);
- ZVAL_STRING(zval_function_name, function_name, 1);
- if (call_user_function_ex(EG(function_table), NULL, zval_function_name, returnvalue, number_of_arguments, params, 0, NULL TSRMLS_CC) == FAILURE) {
- zend_error(E_ERROR, "function '%s' not found", Z_STRVAL_P(zval_function_name));
- }
- zval_dtor(zval_function_name); /* to free stringvalue memory */
- FREE_ZVAL(zval_function_name);
-}
-
-/* switch_dbx functions declarations
- * each must be supported in the dbx_module files as dbx_module_function,
- * e.g. switch_dbx_connect expects a dbx_mysql_connect in de dbx_mysql files
- * all params except the dbx_module param are passed on
- * each must return the expected zval *'s in the rv parameter, which are passed on unmodified
- * do NOT use the return_value parameter from INTERNAL_FUNCTION_PARAMETERS
- * you can additionally return 0 or 1 for failure or success which will also be returned by the switches
- */
-int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns connection handle as resource on success or 0 as long on failure */
-int switch_dbx_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int switch_dbx_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns 1 as long on success or 0 as long on failure */
-int switch_dbx_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns 1 as long or result identifier as resource on success or 0 as long on failure */
-int switch_dbx_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns column-count as long on success or 0 as long on failure */
-int switch_dbx_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns column-name as string on success or 0 as long on failure */
-int switch_dbx_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns column-type as string on success or 0 as long on failure */
-int switch_dbx_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns string */
-
-/* Every user visible function must have an entry in dbx_functions[].
-*/
-function_entry dbx_functions[] = {
- ZEND_FE(dbx_connect, NULL)
- ZEND_FE(dbx_close, NULL)
- ZEND_FE(dbx_query, NULL)
- ZEND_FE(dbx_error, NULL)
-
- ZEND_FE(dbx_sort, NULL)
- ZEND_FE(dbx_compare, NULL)
-
- {NULL, NULL, NULL} /* Must be the last line in dbx_functions[] */
-};
-
-zend_module_entry dbx_module_entry = {
- STANDARD_MODULE_HEADER,
- "dbx",
- dbx_functions,
- ZEND_MINIT(dbx),
- ZEND_MSHUTDOWN(dbx),
- NULL, /*ZEND_RINIT(dbx), Replace with NULL if there's nothing to do at request start */
- NULL, /*ZEND_RSHUTDOWN(dbx), Replace with NULL if there's nothing to do at request end */
- ZEND_MINFO(dbx),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DBX
-ZEND_GET_MODULE(dbx)
-#endif
-
-ZEND_MINIT_FUNCTION(dbx)
-{
- REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_MSSQL", DBX_MSSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_FBSQL", DBX_FBSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_OCI8", DBX_OCI8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_SYBASECT", DBX_SYBASECT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_PERSISTENT", DBX_PERSISTENT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_RESULT_ASSOC", DBX_RESULT_ASSOC, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_CMP_NATIVE", DBX_CMP_NATIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_TEXT", DBX_CMP_TEXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_NUMBER", DBX_CMP_NUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_ASC", DBX_CMP_ASC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_DESC", DBX_CMP_DESC, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-ZEND_MSHUTDOWN_FUNCTION(dbx)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request start */
-/*ZEND_RINIT_FUNCTION(dbx)
-{ return SUCCESS;
-}*/
-
-/* Remove if there's nothing to do at request end */
-/*ZEND_RSHUTDOWN_FUNCTION(dbx)
-{ return SUCCESS;
-}*/
-
-ZEND_MINFO_FUNCTION(dbx)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "dbx support", "enabled");
- php_info_print_table_row(2, "dbx version", "1.0.0");
- php_info_print_table_row(2, "supported databases", "MySQL\nODBC\nPostgreSQL\nMicrosoft SQL Server\nFrontBase\nOracle 8 (not really)\nSybase-CT");
- php_info_print_table_end();
-}
-
-/*
-
- actual implementation of the dbx functions
-
-*/
-
-/* {{{ proto dbx_link_object dbx_connect(string module_name, string host, string db, string username, string password [, bool persistent])
- Returns a dbx_link_object on success and returns 0 on failure */
-ZEND_FUNCTION(dbx_connect)
-{
- int number_of_arguments=5;
- zval **arguments[6];
-
- int result;
- long module_identifier;
- zval *dbx_module;
- zval *db_name;
- zval *rv_dbx_handle;
- int persistent=0;
-
- if ( !(ZEND_NUM_ARGS()==number_of_arguments+1 || ZEND_NUM_ARGS()==number_of_arguments) || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (ZEND_NUM_ARGS()==number_of_arguments+1) {
- convert_to_long_ex(arguments[5]);
- if (Z_LVAL_PP(arguments[5])!=0) persistent=1;
- }
-
- if (Z_TYPE_PP(arguments[0]) == IS_LONG) {
- if (!module_identifier_exists(Z_LVAL_PP(arguments[0]))) {
- zend_error(E_WARNING, "dbx: module '%ld' not loaded or not supported.\n", Z_LVAL_PP(arguments[0]));
- return;
- }
- module_identifier = Z_LVAL_PP(arguments[0]);
- } else {
- convert_to_string_ex(arguments[0]);
- if (!module_exists(Z_STRVAL_PP(arguments[0]))) {
- zend_error(E_WARNING, "dbx: module '%s' not loaded.\n", Z_STRVAL_PP(arguments[0]));
- return;
- }
- module_identifier=get_module_identifier(Z_STRVAL_PP(arguments[0]));
- if (!module_identifier) {
- zend_error(E_WARNING, "dbx: unsupported module '%s'.\n", Z_STRVAL_PP(arguments[0]));
- return;
- }
- }
-
- MAKE_STD_ZVAL(dbx_module);
- ZVAL_LONG(dbx_module, module_identifier);
- MAKE_STD_ZVAL(rv_dbx_handle);
- ZVAL_LONG(rv_dbx_handle, 0);
- convert_to_string_ex(arguments[1]);
- convert_to_string_ex(arguments[2]);
- convert_to_string_ex(arguments[3]);
- convert_to_string_ex(arguments[4]);
- MAKE_STD_ZVAL(db_name);
- ZVAL_STRING(db_name, Z_STRVAL_PP(arguments[2]), 1);
- if (persistent) {
- result = switch_dbx_pconnect(&rv_dbx_handle, arguments[1], arguments[2], arguments[3], arguments[4], INTERNAL_FUNCTION_PARAM_PASSTHRU, &dbx_module);
- } else {
- result = switch_dbx_connect(&rv_dbx_handle, arguments[1], arguments[2], arguments[3], arguments[4], INTERNAL_FUNCTION_PARAM_PASSTHRU, &dbx_module);
- }
- if (!result) {
- FREE_ZVAL(dbx_module);
- zval_dtor(db_name); /* to free stringvalue memory */
- FREE_ZVAL(db_name);
- FREE_ZVAL(rv_dbx_handle);
- RETURN_LONG(0);
- }
-
- if (object_init(return_value) != SUCCESS) {
- zend_error(E_ERROR, "dbx: unable to create resulting object...");
- FREE_ZVAL(dbx_module);
- zval_dtor(db_name); /* to free stringvalue memory */
- FREE_ZVAL(db_name);
- FREE_ZVAL(rv_dbx_handle);
- RETURN_LONG(0);
- }
-
- zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void *)&(rv_dbx_handle), sizeof(zval *), NULL);
- zend_hash_update(Z_OBJPROP_P(return_value), "module", 7, (void *)&(dbx_module), sizeof(zval *), NULL);
- zend_hash_update(Z_OBJPROP_P(return_value), "database", 9, (void *)&(db_name), sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ proto bool dbx_close(dbx_link_object dbx_link)
- Returns success or failure
-*/
-ZEND_FUNCTION(dbx_close)
-{
- int number_of_arguments=1;
- zval **arguments[1];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv_success;
-
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) {
- zend_error(E_WARNING, "dbx_close: not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
-
- MAKE_STD_ZVAL(rv_success);
- ZVAL_LONG(rv_success, 0);
-
- result = switch_dbx_close(&rv_success, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
-
- result = (result && Z_LVAL_P(rv_success))?1:0;
- FREE_ZVAL(rv_success);
-
- RETURN_LONG(result?1:0);
-}
-/* }}} */
-
-/* {{{ proto dbx_result_object dbx_query(dbx_link_object dbx_link, string sql_statement [, long flags])
- Returns a dbx_link_object on success and returns 0 on failure */
-ZEND_FUNCTION(dbx_query)
-{
- int min_number_of_arguments=2;
- int number_of_arguments=3;
- zval **arguments[3];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv_result_handle;
- zval *rv_column_count;
- long col_index;
- long row_count;
- zval *info;
- long info_flags;
- zval *data;
- zval **row_ptr;
- zval **inforow_ptr;
-
- if (ZEND_NUM_ARGS()<min_number_of_arguments || ZEND_NUM_ARGS()>number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) {
- zend_error(E_WARNING, "dbx_query: not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
- /* default values */
- info_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC;
- /* parameter overrides */
- if (ZEND_NUM_ARGS()>2) {
- convert_to_long_ex(arguments[2]);
- info_flags = Z_LVAL_PP(arguments[2]);
- /* fieldnames are needed for association! */
- if (info_flags & DBX_RESULT_ASSOC) {
- info_flags |= DBX_RESULT_INFO;
- }
- }
- MAKE_STD_ZVAL(rv_result_handle);
- ZVAL_LONG(rv_result_handle, 0);
- convert_to_string_ex(arguments[1]);
- result = switch_dbx_query(&rv_result_handle, dbx_handle, dbx_database, arguments[1], INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- /* boolean return value means either failure for any query or success for queries that don't return anything */
- if (!result || (rv_result_handle && Z_TYPE_P(rv_result_handle)==IS_BOOL)) {
- result = (result && Z_LVAL_P(rv_result_handle))?1:0;
- FREE_ZVAL(rv_result_handle);
- RETURN_LONG(result?1:0);
- }
- /* if you get here, the query succeeded and returned results, so we'll return them
- * rv_result_handle holds a resource
- */
- /* init return_value as object (of rows) */
- if (object_init(return_value) != SUCCESS) {
- zend_error(E_ERROR, "dbx_query: unable to create resulting object...");
- FREE_ZVAL(rv_result_handle);
- RETURN_LONG(0);
- }
- /* add result_handle property to return_value */
- zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void *)&(rv_result_handle), sizeof(zval *), NULL);
- /* init info property as array and add to return_value as a property */
- if (info_flags & DBX_RESULT_INFO) {
- MAKE_STD_ZVAL(info);
- if (array_init(info) != SUCCESS) {
- zend_error(E_ERROR, "dbx_query: unable to create info-array for results...");
- FREE_ZVAL(info);
- RETURN_LONG(0);
- }
- zend_hash_update(Z_OBJPROP_P(return_value), "info", 5, (void *)&(info), sizeof(zval *), NULL);
- }
- /* init data property as array and add to return_value as a property */
- MAKE_STD_ZVAL(data);
- if (array_init(data) != SUCCESS) {
- zend_error(E_ERROR, "dbx_query: unable to create data-array for results...");
- FREE_ZVAL(data);
- RETURN_LONG(0);
- }
- zend_hash_update(Z_OBJPROP_P(return_value), "data", 5, (void *)&(data), sizeof(zval *), NULL);
- /* get columncount and add to returnvalue as property */
- MAKE_STD_ZVAL(rv_column_count);
- ZVAL_LONG(rv_column_count, 0);
- result = switch_dbx_getcolumncount(&rv_column_count, &rv_result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (!result) {
- zend_error(E_ERROR, "dbx_query: get column_count failed...");
- FREE_ZVAL(rv_column_count);
- RETURN_LONG(0);
- }
- zend_hash_update(Z_OBJPROP_P(return_value), "cols", 5, (void *)&(rv_column_count), sizeof(zval *), NULL);
- /* fill the info array with columnnames and types (indexed and assoc) */
- if (info_flags & DBX_RESULT_INFO) {
- zval *info_row_name;
- zval *info_row_type;
- MAKE_STD_ZVAL(info_row_name);
- MAKE_STD_ZVAL(info_row_type);
- if (array_init(info_row_name) != SUCCESS) {
- zend_error(E_ERROR, "dbx_query: unable to create info_row_name-array for results...");
- FREE_ZVAL(info_row_name);
- FREE_ZVAL(info_row_type);
- RETURN_LONG(0);
- }
- if (array_init(info_row_type) != SUCCESS) {
- zend_error(E_ERROR, "dbx_query: unable to create info_row_type-array for results...");
- FREE_ZVAL(info_row_name);
- FREE_ZVAL(info_row_type);
- RETURN_LONG(0);
- }
- for (col_index=0; col_index<Z_LVAL_P(rv_column_count); ++col_index) {
- zval *rv_column_name;
- zval *rv_column_type;
- /* get name */
- MAKE_STD_ZVAL(rv_column_name);
- ZVAL_LONG(rv_column_name, 0);
- result = switch_dbx_getcolumnname(&rv_column_name, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (result) {
- zend_hash_index_update(Z_ARRVAL_P(info_row_name), col_index, (void *)&(rv_column_name), sizeof(zval *), NULL);
- } else {
- FREE_ZVAL(rv_column_name);
- }
- /* get type */
- MAKE_STD_ZVAL(rv_column_type);
- ZVAL_LONG(rv_column_type, 0);
- result = switch_dbx_getcolumntype(&rv_column_type, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (result) {
- zend_hash_index_update(Z_ARRVAL_P(info_row_type), col_index, (void *)&(rv_column_type), sizeof(zval *), NULL);
- } else {
- FREE_ZVAL(rv_column_type);
- }
- }
- zend_hash_update(Z_ARRVAL_P(info), "name", 5, (void *) &info_row_name, sizeof(zval *), (void **) &inforow_ptr);
- zend_hash_update(Z_ARRVAL_P(info), "type", 5, (void *) &info_row_type, sizeof(zval *), NULL);
- }
- /* fill each row array with fieldvalues (indexed (and assoc)) */
- row_count=0;
- result=1;
- while (result) {
- zval *rv_row;
- MAKE_STD_ZVAL(rv_row);
- ZVAL_LONG(rv_row, 0);
- result = switch_dbx_getrow(&rv_row, &rv_result_handle, row_count, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (result) {
- zend_hash_index_update(Z_ARRVAL_P(data), row_count, (void *)&(rv_row), sizeof(zval *), (void **) &row_ptr);
- /* associate results with fieldnames */
- if (info_flags & DBX_RESULT_ASSOC) {
- zval **columnname_ptr, **actual_ptr;
- for (col_index=0; col_index<Z_LVAL_P(rv_column_count); ++col_index) {
- zend_hash_index_find(Z_ARRVAL_PP(inforow_ptr), col_index, (void **) &columnname_ptr);
- zend_hash_index_find(Z_ARRVAL_PP(row_ptr), col_index, (void **) &actual_ptr);
- (*actual_ptr)->refcount+=1;
- (*actual_ptr)->is_ref=1;
- zend_hash_update(Z_ARRVAL_PP(row_ptr), Z_STRVAL_PP(columnname_ptr), Z_STRLEN_PP(columnname_ptr) + 1, actual_ptr, sizeof(zval *), NULL);
- }
- }
- ++row_count;
- } else {
- FREE_ZVAL(rv_row);
- }
- }
- /* add row_count property */
- add_property_long(return_value, "rows", row_count);
-}
-/* }}} */
-
-/* {{{ proto void dbx_error(dbx_link_object dbx_link)
- Returns success or failure
-*/
-ZEND_FUNCTION(dbx_error)
-{
- int number_of_arguments=1;
- zval **arguments[1];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv_errormsg;
-
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) {
- zend_error(E_WARNING, "dbx_error: not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
-
- MAKE_STD_ZVAL(rv_errormsg);
- ZVAL_LONG(rv_errormsg, 0);
- result = switch_dbx_error(&rv_errormsg, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (!result) {
- FREE_ZVAL(rv_errormsg);
- RETURN_STRING("", 1);
- }
- MOVE_RETURNED_TO_RV(&return_value, rv_errormsg);
-}
-/* }}} */
-
-/*
- * dbx functions that are database independent... like sorting result_objects!
- */
-
-/* {{{ proto int dbx_compare(array row_x, array row_y, string columnname [, int flags])
- Returns row_y[columnname] - row_x[columnname], converted to -1, 0 or 1 */
-ZEND_FUNCTION(dbx_compare)
-{
- int min_number_of_arguments=3;
- int max_number_of_arguments=4;
- int number_of_arguments=-1;
- long comparison_direction=DBX_CMP_ASC;
- long comparison_type=DBX_CMP_NATIVE;
- double dtemp;
- long ltemp;
- zval **arguments[4];
- zval **zv_a;
- zval **zv_b;
- int result=0;
- number_of_arguments=ZEND_NUM_ARGS();
- if (number_of_arguments<min_number_of_arguments || number_of_arguments>max_number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arguments[0]) != IS_ARRAY
- || Z_TYPE_PP(arguments[1]) != IS_ARRAY) {
- zend_error(E_WARNING, "Wrong argument type for compare");
- RETURN_LONG(0);
- }
- convert_to_string_ex(arguments[2]); /* field name */
- comparison_type = DBX_CMP_NATIVE;
- comparison_direction = DBX_CMP_ASC;
- if (number_of_arguments>3) {
- convert_to_long_ex(arguments[3]); /* comparison type and direction*/
- /* direction */
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_DESC) {
- comparison_direction=DBX_CMP_DESC;
- }
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_ASC) {
- comparison_direction=DBX_CMP_ASC;
- }
- /* type */
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_NUMBER) {
- comparison_type=DBX_CMP_NUMBER;
- }
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_TEXT) {
- comparison_type=DBX_CMP_TEXT;
- }
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_NATIVE) {
- comparison_type=DBX_CMP_NATIVE;
- }
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arguments[0]), Z_STRVAL_PP(arguments[2]), Z_STRLEN_PP(arguments[2])+1, (void **) &zv_a)==FAILURE
- || zend_hash_find(Z_ARRVAL_PP(arguments[1]), Z_STRVAL_PP(arguments[2]), Z_STRLEN_PP(arguments[2])+1, (void **) &zv_b)==FAILURE) {
- zend_error(E_WARNING, "Field '%s' not available in result-object", Z_STRVAL_PP(arguments[2]));
- RETURN_LONG(0);
- }
-
- switch (comparison_type) {
- case DBX_CMP_TEXT:
- convert_to_string_ex(zv_a);
- convert_to_string_ex(zv_b);
- break;
- case DBX_CMP_NUMBER:
- convert_to_double_ex(zv_a);
- convert_to_double_ex(zv_b);
- break;
- }
- switch (Z_TYPE_PP(zv_a)) {
- case IS_NULL:
- result=0;
- break;
- case IS_BOOL:
- case IS_LONG:
- case IS_CONSTANT:
- ltemp = Z_LVAL_PP(zv_a) - Z_LVAL_PP(zv_b);
- result = (ltemp==0?0: (ltemp>0?1:-1));
- break;
- case IS_DOUBLE:
- dtemp = (Z_DVAL_PP(zv_a) - Z_DVAL_PP(zv_b));
- result = (dtemp==0?0: (dtemp>0?1:-1));
- break;
- case IS_STRING:
- ltemp = strcmp(Z_STRVAL_PP(zv_a), Z_STRVAL_PP(zv_b));
- result = (ltemp==0?0: (ltemp>0?1:-1));
- break;
- default: result=0;
- }
-
- if (comparison_direction==DBX_CMP_DESC) RETURN_LONG(-result);
- RETURN_LONG(result);
-}
-/* }}} */
-
-/* {{{ proto int dbx_sort(object dbx_result, string compare_function_name)
- Returns 0 on failure, 1 on success */
-ZEND_FUNCTION(dbx_sort)
-{
- int number_of_arguments=2;
- zval **arguments[2];
- zval **zval_data;
- zval *returned_zval;
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arguments[0]) != IS_OBJECT
- || Z_TYPE_PP(arguments[1]) != IS_STRING) {
- zend_error(E_WARNING, "Wrong argument type for sort");
- RETURN_LONG(0);
- }
-
- if (zend_hash_find(Z_OBJPROP_PP(arguments[0]), "data", 5, (void **) &zval_data)==FAILURE
- || Z_TYPE_PP(zval_data) != IS_ARRAY) {
- zend_error(E_WARNING, "Wrong argument type for sort");
- RETURN_LONG(0);
- }
-
- arguments[0] = zval_data;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "usort", &returned_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&returned_zval);
-
- RETURN_LONG(1);
-}
-/* }}} */
-
-/***********************************/
-
-/*
- * switch_dbx functions
- */
-int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: zend_error(E_WARNING, "dbx_connect: OCI8 extension is still highly experimental!");
- return dbx_oci8_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_connect: not supported in this module");
- return 0;
-}
-
-int switch_dbx_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: zend_error(E_WARNING, "dbx_pconnect: OCI8 extension is still highly experimental!");
- return dbx_oci8_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_pconnect: not supported in this module");
- return 0;
-}
-
-int switch_dbx_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns 1 as long on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_close: not supported in this module");
- return 0;
-}
-
-int switch_dbx_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns 1 as long or result identifier as resource on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_query: not supported in this module");
- return 0;
-}
-
-int switch_dbx_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns column-count as long on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_getcolumncount: not supported in this module");
- return 0;
-}
-
-int switch_dbx_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns column-name as string on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_getcolumnname: not supported in this module");
- return 0;
-}
-
-int switch_dbx_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns column-type as string on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_getcolumntype: not supported in this module");
- return 0;
-}
-
-int switch_dbx_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_getrow: not supported in this module");
- return 0;
-}
-
-int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns string */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- zend_error(E_WARNING, "dbx_error: not supported in this module");
- return 0;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx.dsp b/ext/dbx/dbx.dsp
deleted file mode 100644
index d4f5951490..0000000000
--- a/ext/dbx/dbx.dsp
+++ /dev/null
@@ -1,173 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dbx" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dbx - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dbx.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dbx.mak" CFG="dbx - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dbx - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dbx - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dbx - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_dbx" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "DBX_EXPORTS" /D "COMPILE_DL_DBX" /D ZTS=1 /D HAVE_LIBINTL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "dbx - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_dbx" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBX_EXPORTS" /D "COMPILE_DL_DBX" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"../../Debug_TS/php_dbx.dll" /libpath:"..\..\Debug_TS"
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../../Debug_TS/php_dbx.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dbx - Win32 Release_TS"
-# Name "dbx - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dbx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_fbsql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mssql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mysql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_oci8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_odbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_pgsql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_sybasect.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dbx.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_fbsql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mssql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mysql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_oci8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_odbc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_pgsql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_sybasect.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dbx.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/dbx/dbx.h b/ext/dbx/dbx.h
deleted file mode 100644
index 8bfb9fe73a..0000000000
--- a/ext/dbx/dbx.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_H
-#define ZEND_DBX_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-#define DBX_PERSISTENT (1<<0)
-
-#define DBX_RESULT_INFO (1<<0)
-#define DBX_RESULT_INDEX (1<<1)
-#define DBX_RESULT_ASSOC (1<<2)
-
-#define DBX_CMP_NATIVE (1<<0)
-#define DBX_CMP_TEXT (1<<1)
-#define DBX_CMP_NUMBER (1<<2)
-#define DBX_CMP_ASC (1<<3)
-#define DBX_CMP_DESC (1<<4)
-
-#define MOVE_RETURNED_TO_RV(rv, returned_zval) { **rv = *returned_zval; zval_copy_ctor(*rv); zval_ptr_dtor(&returned_zval); }
-
-void dbx_call_any_function(INTERNAL_FUNCTION_PARAMETERS, char *function_name, zval **returnvalue, int number_of_arguments, zval ***params);
-
-#endif /* ZEND_DBX_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_fbsql.c b/ext/dbx/dbx_fbsql.c
deleted file mode 100644
index 3ab8bbd232..0000000000
--- a/ext/dbx/dbx_fbsql.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- | Frank M. Kromann <frank@frontbase.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_fbsql.h"
-
-#define FBSQL_ASSOC 1<<0
-#define FBSQL_NUM 1<<1
-
-int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=db_name;
- arguments[1]=sql_statement;
- arguments[2]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_db_query", &returned_zval, number_of_arguments, arguments);
- /* fbsql_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_name", &returned_zval, number_of_arguments, arguments);
- /* fbsql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_type", &returned_zval, number_of_arguments, arguments);
- /* fbsql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_resulttype=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, FBSQL_NUM);
- arguments[0]=result_handle;
- arguments[1]=&zval_resulttype;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_error", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_fbsql.h b/ext/dbx/dbx_fbsql.h
deleted file mode 100644
index e36504b0cb..0000000000
--- a/ext/dbx/dbx_fbsql.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- | Frank M. Kromann <frank@frontbase.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_FBSQL_H
-#define ZEND_DBX_FBSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_FBSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mssql.c b/ext/dbx/dbx_mssql.c
deleted file mode 100644
index f905ed10be..0000000000
--- a/ext/dbx/dbx_mssql.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_mssql.h"
-
-#define MSSQL_ASSOC 1<<0
-#define MSSQL_NUM 1<<1
-
-int dbx_mssql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=db_name;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- number_of_arguments=2;
- arguments[0]=sql_statement;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_query", &returned_zval, number_of_arguments, arguments);
- /* mssql_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_name", &returned_zval, number_of_arguments, arguments);
- /* mssql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_type", &returned_zval, number_of_arguments, arguments);
- /* mssql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_fetch_row", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_get_last_message", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mssql.h b/ext/dbx/dbx_mssql.h
deleted file mode 100644
index 2051da357f..0000000000
--- a/ext/dbx/dbx_mssql.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_MSSQL_H
-#define ZEND_DBX_MSSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_mssql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_mssql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_mssql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_mssql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_mssql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_mssql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_mssql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_mssql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_MSSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mysql.c b/ext/dbx/dbx_mysql.c
deleted file mode 100644
index b9873147b6..0000000000
--- a/ext/dbx/dbx_mysql.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_mysql.h"
-
-#define MYSQL_ASSOC 1<<0
-#define MYSQL_NUM 1<<1
-
-int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=db_name;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- number_of_arguments=2;
- arguments[0]=sql_statement;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_query", &returned_zval, number_of_arguments, arguments);
- /* mysql_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_field_name", &returned_zval, number_of_arguments, arguments);
- /* mysql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_field_type", &returned_zval, number_of_arguments, arguments);
- /* mysql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_resulttype=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, MYSQL_NUM);
- arguments[0]=result_handle;
- arguments[1]=&zval_resulttype;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_error", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mysql.h b/ext/dbx/dbx_mysql.h
deleted file mode 100644
index f9b14a1170..0000000000
--- a/ext/dbx/dbx_mysql.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_MYSQL_H
-#define ZEND_DBX_MYSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_mysql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_mysql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_mysql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_mysql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_mysql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_mysql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_mysql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_MYSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_oci8.c b/ext/dbx/dbx_oci8.c
deleted file mode 100644
index 4ee58e0e77..0000000000
--- a/ext/dbx/dbx_oci8.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_oci8.h"
-
-#define OCI_ASSOC 1<<0
-#define OCI_NUM 1<<1
-#define OCI_RETURN_NULLS 1<<2
-#define OCI_RETURN_LOBS 1<<3
-
-int dbx_oci8_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=username;
- arguments[1]=password;
- arguments[2]=db;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCILogon", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=username;
- arguments[1]=password;
- arguments[2]=db;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIPLogon", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCILogOff", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *execute_zval=NULL;
-
- arguments[0]=dbx_handle;
- arguments[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIParse", &returned_zval, number_of_arguments, arguments);
- /* OCIParse returns a bool for failure, or a statement_identifier for valid sql_statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIExecute", &execute_zval, number_of_arguments, arguments);
- /* OCIExecute returns a bool for success or failure???? */
- if (!execute_zval || Z_TYPE_P(execute_zval)!=IS_BOOL) {
- if (execute_zval) zval_ptr_dtor(&execute_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCINumCols", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- /* dbx uses 0-based column-indices, oci8 uses 1-based indices... */
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIColumnName", &returned_zval, number_of_arguments, arguments);
- /* OCIColumnName returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- /* dbx uses 0-based column-indices, oci8 uses 1-based indices... */
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIColumnType", &returned_zval, number_of_arguments, arguments);
- /* OCIColumnType returns a string??? */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *zval_resulttype=NULL;
- zval *zval_returned_array=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, OCI_NUM | OCI_RETURN_NULLS); /* no ASSOC, dbx handles that part */
- arguments[0]=result_handle;
- arguments[1]=&zval_returned_array;
- arguments[2]=&zval_resulttype;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIFetchInto", &returned_zval, number_of_arguments, arguments);
- /* OCIFetchInto returns an integer, but the actual array is passed back in arg[1] */
- /* I'm not sure how this will work, Thies, so this is something that should be especially tested! */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL || Z_LVAL_P(returned_zval)==0) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- zval_ptr_dtor(&returned_zval);
- MOVE_RETURNED_TO_RV(rv, zval_returned_array);
- return 1;
-}
-
-int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
- zval *returned_message_zval=NULL;
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIError", &returned_zval, number_of_arguments, arguments);
- /* OCIError should returns an assoc array containing code & message, dbx needs the message */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- /* get the messagestring here */
- if (zend_hash_find(Z_ARRVAL_P(returned_zval), "message", strlen("message")+1, (void **) &returned_message_zval)==FAILURE) {
- /* oops! no msg? */
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_message_zval);
- zval_ptr_dtor(&returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_oci8.h b/ext/dbx/dbx_oci8.h
deleted file mode 100644
index be483df6c4..0000000000
--- a/ext/dbx/dbx_oci8.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_OCI8_H
-#define ZEND_DBX_OCI8_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_oci8_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_oci8_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_oci8_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_oci8_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_oci8_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_oci8_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_oci8_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_oci8_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_OCI8_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_odbc.c b/ext/dbx/dbx_odbc.c
deleted file mode 100644
index 40f282b2bc..0000000000
--- a/ext/dbx/dbx_odbc.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_odbc.h"
-
-#define ODBC_ASSOC 1
-#define ODBC_NUM 2
-
-int dbx_odbc_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=db;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=db;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
- int exit_status=EG(exit_status);
-
- int actual_resource_type;
- void *resource;
- resource = zend_list_find(Z_LVAL_PP(dbx_handle), &actual_resource_type);
- if (!resource) {
- return 0;
- }
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_close", &returned_zval, number_of_arguments, arguments);
-
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_NULL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- convert_to_long_ex(&returned_zval);
- Z_LVAL_P(returned_zval)=1;
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *queryresult_zval=NULL;
- zval *num_fields_zval=NULL;
-
- /* db_name is not used in this function */
- arguments[0]=dbx_handle;
- arguments[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_exec", &queryresult_zval, number_of_arguments, arguments);
- /* odbc_query returns a bool for failure, or a result_identifier for success */
- if (!queryresult_zval || Z_TYPE_P(queryresult_zval)!=IS_RESOURCE) {
- if (queryresult_zval) zval_ptr_dtor(&queryresult_zval);
- return 0;
- }
- MAKE_STD_ZVAL(num_fields_zval);
- ZVAL_LONG(num_fields_zval, 0);
- if (!dbx_odbc_getcolumncount(&num_fields_zval, &queryresult_zval, INTERNAL_FUNCTION_PARAM_PASSTHRU)) {
- FREE_ZVAL(num_fields_zval);
- if (queryresult_zval) zval_ptr_dtor(&queryresult_zval);
- return 0;
- }
- if (Z_LVAL_P(num_fields_zval)==0) {
- Z_TYPE_PP(rv)=IS_BOOL;
- Z_LVAL_PP(rv)=1; /* success, but no data */
- FREE_ZVAL(num_fields_zval);
- if (queryresult_zval) zval_ptr_dtor(&queryresult_zval);
- return 1;
- }
- FREE_ZVAL(num_fields_zval);
- MOVE_RETURNED_TO_RV(rv, queryresult_zval);
- return 1;
-}
-
-int dbx_odbc_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG || Z_LVAL_P(returned_zval)<0) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_field_name", &returned_zval, number_of_arguments, arguments);
- /* odbc_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_field_type", &returned_zval, number_of_arguments, arguments);
- /* odbc_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments;
- zval **arguments[2];
- zval *num_fields_zval=NULL;
- zval *fetch_row_result_zval=NULL;
- zval *field_result_zval=NULL;
- zval *field_index_zval;
- zval *returned_zval=NULL;
- long field_index;
- long field_count=-1;
-
- /* get # fields */
- MAKE_STD_ZVAL(num_fields_zval);
- ZVAL_LONG(num_fields_zval, 0);
- if (!dbx_odbc_getcolumncount(&num_fields_zval, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU)) {
- return 0;
- }
- field_count=Z_LVAL_P(num_fields_zval);
- FREE_ZVAL(num_fields_zval);
- /* fetch row */
- number_of_arguments=1;
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_fetch_row", &fetch_row_result_zval, number_of_arguments, arguments);
- if (!fetch_row_result_zval || Z_TYPE_P(fetch_row_result_zval)!=IS_BOOL) {
- if (fetch_row_result_zval) zval_ptr_dtor(&fetch_row_result_zval);
- return 0;
- }
- if (Z_LVAL_P(fetch_row_result_zval)==0) {
- Z_TYPE_PP(rv)=IS_LONG;
- Z_LVAL_PP(rv)=0; /* ok, no more rows */
- zval_ptr_dtor(&fetch_row_result_zval);
- return 0;
- }
- zval_ptr_dtor(&fetch_row_result_zval);
- /* fill array with field results... */
- MAKE_STD_ZVAL(returned_zval);
- if (array_init(returned_zval) != SUCCESS) {
- zend_error(E_ERROR, "dbx_odbc_getrow: unable to create result-array...");
- FREE_ZVAL(returned_zval);
- return 0;
- }
- MAKE_STD_ZVAL(field_index_zval);
- ZVAL_LONG(field_index_zval, 0);
- number_of_arguments=2;
- for (field_index=0; field_index<field_count; ++field_index) {
- ZVAL_LONG(field_index_zval, field_index+1);
- arguments[0]=result_handle;
- arguments[1]=&field_index_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_result", &field_result_zval, number_of_arguments, arguments);
- zend_hash_index_update(Z_ARRVAL_P(returned_zval), field_index, (void *)&(field_result_zval), sizeof(zval *), NULL);
- }
- FREE_ZVAL(field_index_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_errormsg", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_odbc.h b/ext/dbx/dbx_odbc.h
deleted file mode 100644
index 4cb8de2580..0000000000
--- a/ext/dbx/dbx_odbc.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_ODBC_H
-#define ZEND_DBX_ODBC_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_odbc_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_odbc_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persisten connection handle as resource on success or 0 as long on failure */
-int dbx_odbc_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_odbc_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_odbc_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_odbc_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_odbc_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_odbc_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_ODBC_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_pgsql.c b/ext/dbx/dbx_pgsql.c
deleted file mode 100644
index 88e28816ee..0000000000
--- a/ext/dbx/dbx_pgsql.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "php_dbx.h"
-#include "dbx_pgsql.h"
-#include <string.h>
-
-#define PGSQL_ASSOC 1<<0
-#define PGSQL_NUM 1<<1
-
-int dbx_pgsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int nargs=5;
- char *port="5432", *connstring=NULL;
- zval **args[5], *rarg = NULL;
- zval *conn_zval = NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(conn_zval);
- ZVAL_LONG(conn_zval, 0);
-
- if (Z_STRLEN_PP(username)>0) {
- int len;
-
- len = Z_STRLEN_PP(host)+Z_STRLEN_PP(db)+strlen(port);
- len += Z_STRLEN_PP(username)+Z_STRLEN_PP(password)+45;
- connstring = (char *)emalloc(len+1);
- sprintf(connstring, "host='%s' port='%s' dbname='%s' user='%s' password='%s'",
- Z_STRVAL_PP(host), port, Z_STRVAL_PP(db),
- Z_STRVAL_PP(username), Z_STRVAL_PP(password));
- ZVAL_STRING(conn_zval, connstring, 0);
- args[0] = &conn_zval;
- nargs = 1;
- } else {
- int k;
-
- args[0] = host;
- for (k=1;k<4;k++){
- MAKE_STD_ZVAL(rarg);
- ZVAL_EMPTY_STRING(rarg);
- args[k] = &rarg;
- }
- args[4] = db;
- }
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_connect", &returned_zval, nargs, args);
- zval_dtor(conn_zval);
- FREE_ZVAL(conn_zval);
-
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int nargs=5;
- char *port="5432", *connstring=NULL;
- zval **args[5], *rarg = NULL;
- zval *conn_zval = NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(conn_zval);
- ZVAL_LONG(conn_zval, 0);
-
- if (Z_STRLEN_PP(username)>0) {
- int len;
-
- len = Z_STRLEN_PP(host)+Z_STRLEN_PP(db)+strlen(port);
- len += Z_STRLEN_PP(username)+Z_STRLEN_PP(password)+45;
- connstring = (char *)emalloc(len+1);
- sprintf(connstring, "host='%s' port='%s' dbname='%s' user='%s' password='%s'",
- Z_STRVAL_PP(host), port, Z_STRVAL_PP(db),
- Z_STRVAL_PP(username), Z_STRVAL_PP(password));
- ZVAL_STRING(conn_zval, connstring, 0);
- args[0] = &conn_zval;
- nargs = 1;
- } else {
- int k;
-
- args[0] = host;
- for (k=1;k<4;k++){
- MAKE_STD_ZVAL(rarg);
- ZVAL_EMPTY_STRING(rarg);
- args[k] = &rarg;
- }
- args[4] = db;
- }
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_pconnect", &returned_zval, nargs, args);
- zval_dtor(conn_zval);
- FREE_ZVAL(conn_zval);
-
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success
- or 0 as long on failure */
- int nargs=2;
- zval **args[2];
- zval *returned_zval=NULL;
-
- /* db_name is not used in this function */
- args[0]=dbx_handle;
- args[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_exec", &returned_zval, nargs, args);
- /* pg_query returns a bool for success or failure,
- or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_numfields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fieldname", &returned_zval, number_of_arguments, arguments);
- /* pg_fieldname returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fieldtype", &returned_zval, number_of_arguments, arguments);
- /* pg_fieldtype returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- int save_error_reporting=0;
- zval **arguments[2];
- zval *zval_row=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_row);
- ZVAL_LONG(zval_row, row_number);
- arguments[0]=result_handle;
- arguments[1]=&zval_row;
-
- if (EG(error_reporting) & E_WARNING){
- save_error_reporting = EG(error_reporting);
- EG(error_reporting) &= ~E_WARNING;
- }
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (save_error_reporting) {
- EG(error_reporting) = save_error_reporting;
- }
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_row);
- return 0;
- }
- FREE_ZVAL(zval_row);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_errormessage", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_pgsql.h b/ext/dbx/dbx_pgsql.h
deleted file mode 100644
index 8da190bdcb..0000000000
--- a/ext/dbx/dbx_pgsql.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_PGSQL_H
-#define ZEND_DBX_PGSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_pgsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_pgsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_pgsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_pgsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_pgsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_pgsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_pgsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_pgsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_PGSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_sybasect.c b/ext/dbx/dbx_sybasect.c
deleted file mode 100644
index 7c51c33ebb..0000000000
--- a/ext/dbx/dbx_sybasect.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_sybasect.h"
-
-#define MYSQL_ASSOC 1<<0
-#define MYSQL_NUM 1<<1
-
-int dbx_sybasect_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=db_name;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- number_of_arguments=2;
- arguments[0]=sql_statement;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_query", &returned_zval, number_of_arguments, arguments);
- /* sybase_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
- zval **zv_name=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_field", &returned_zval, number_of_arguments, arguments);
- /* sybase_fetch_field returns an object */
- /* we need only the 'name' member here */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_OBJECT) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- if (zend_hash_find(returned_zval->value.obj.properties, "name", 5, (void **) &zv_name)==FAILURE) {
- zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
-
- **rv = **zv_name;
- zval_copy_ctor(*rv);
- zval_ptr_dtor(&returned_zval);
- zval_ptr_dtor(zv_name);
-
- FREE_ZVAL(zval_column_index);
-// MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
- zval **zv_type=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_field", &returned_zval, number_of_arguments, arguments);
- /* sybase_fetch_field returns an object */
- /* we need only the 'type' member here */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_OBJECT) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- if (zend_hash_find(returned_zval->value.obj.properties, "type", 5, (void **) &zv_type)==FAILURE) {
- zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
-
- **rv = **zv_type;
- zval_copy_ctor(*rv);
- zval_ptr_dtor(&returned_zval);
- zval_ptr_dtor(zv_type);
-
- FREE_ZVAL(zval_column_index);
-// MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_row", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_get_last_message", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_sybasect.h b/ext/dbx/dbx_sybasect.h
deleted file mode 100644
index 8b599c209a..0000000000
--- a/ext/dbx/dbx_sybasect.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_SYBASECT_H
-#define ZEND_DBX_SYBASECT_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_sybasect_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_sybasect_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_sybasect_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_sybasect_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_sybasect_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_sybasect_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_sybasect_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_sybasect_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-
-#endif /* ZEND_DBX_SYBASECT_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/howto_extend_dbx.html b/ext/dbx/howto_extend_dbx.html
deleted file mode 100644
index 9b1ba6e4f3..0000000000
--- a/ext/dbx/howto_extend_dbx.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
-<html>
-<head>
-<title>HOWTO extend dbx</title>
-
-</head>
-
-<body marginwidth="0" marginheight="0">
-<style type="text/css">
-<!--
-
-body, p, td, input, select, a, h1, h2, h3, h4, h5, h6, marquee, blink
- { font-family: Verdana,sans-serif; font-size: 10pt; color: #000000; }
-h1 { font-size: 16pt; font-weight: bold; }
-h2 { font-size: 14pt; font-weight: bold; }
-h3 { font-size: 12pt; font-weight: bold; }
-h4 { font-size: 10pt; font-weight: bold; }
-h5 { font-size: 8pt;}
-h6 { font-size: 6pt;}
-
-body { background-color: #F0F0F0; }
-a { color: #000088; }
-
-.title { font-size: 14pt; font-weight: bold; }
-.fn-title { font-size: 12pt; font-weight: bold; }
-.fn-phpversion { font-size: 10pt; font-weight: normal; }
-.fn-def { margin-top: 8px; margin-bottom: 8px; background-color: #99BBDD; }
-.fn-defname { font-weight: bold; }
-.fn-name { font-size: 12pt; font-weight: bold; }
-.fn-param { font-weight: bold; }
-.example { margin-top: 12px; font-weight: bold; }
-.text { margin: 8px; }
-.code { margin: 16px; font-family: Courier; background-color: #CCCCCC; }
-.bold { font-weight: bold; }
-
-.indent { margin-left: 16px; }
-.newpage { border-top: 2px solid #000088; margin-bottom: 8px; }
-.tab { margin-left: 16px; }
-
-
--->
-</style>
-
-
-
-
-
-<a name="top"></a>
-<div class="title">
-How-to code support for another database<br>
-</div>
-<div class="text">
-Every supported database module must be loaded by PHP before it can be used. Every supported database module must be added to the dbx-module before it can be used. Currently there is support for MySQL, PostgreSQL, Microsoft SQL Server, Frontbase, Sybase-CT and ODBC, but it is not difficult to add support for more databases.<br>
-<br>
-The dbx module is found in de PHP ext/dbx folder. The support-code is found in the same folder <br>
-<br>
-To add support for module 'blabla' the following steps must be taken: <br>
-1. the dbx.c source file must be extended to recognize module 'blabla' and switch to the 'blabla' functions.<br>
-2. the files dbx_blabla.h and dbx_blabla.c must be created and edited to produce the required response.<br>
-3. add the files from step 2 to the project.<br>
-4. compile.<br>
-5. enjoy.<br>
-<br>
-You may need a bit of help for step 1 and 2. If you need help for step 3 or 4, you shouldn't try to attempt this probably :-). If you need help with step 5 you're in big trouble ;o)<br>
-Help for step 1 and 2 is given below, bold text in code indicate the important bits.<br>
-</div>
-<p>
-<a href="index.html">home</a><br>
-<div class="newpage"></div>
-
-<div class="fn-title"><a name="step1"></a>
-1. the dbx.c source file must be extended<br>
-</div>
-<div class="text">
-Define a module identifier and assign it a unique number. Include your header file here as well.<br>
-<pre class="code">
-// defines for supported databases
-#define DBX_UNKNOWN 0
-#define DBX_MYSQL 1
-#define DBX_ODBC 2
-<span class="bold">#define DBX_BLABLA 3</span>
-// includes for supported databases
-#include "dbx.h"
-#include "dbx_mysql.h"
-#include "dbx_odbc.h"
-<span class="bold">#include "dbx_blabla.h"</span>
-</pre>
-Add code to the module_identifier_exists function so DBX_BLABLA will be recognized:<br>
-<pre class="code">
-int module_identifier_exists(long module_identifier) {
- switch (module_identifier) {
- case DBX_MYSQL: return module_exists("mysql");
- case DBX_ODBC: return module_exists("odbc");
- <span class="bold">case DBX_BLABLA: return module_exists("blabla");</span>
- }
- return 0;
- }
-</pre>
-Add code to the get_module_identifier function so your extension will be recognized:<br>
-<pre class="code">
-int get_module_identifier(char * module_name) {
- if (!strcmp("mysql", module_name)) return DBX_MYSQL;
- if (!strcmp("odbc", module_name)) return DBX_ODBC;
- <span class="bold">if (!strcmp("blabla", module_name)) return DBX_BLABLA;</span>
- return DBX_UNKNOWN;
- }
-</pre>
-Add code for exposing the DBX_BLABLA constant to the world:<br>
-<pre class="code">
-ZEND_MINIT_FUNCTION(dbx)
-{
-/*/ REGISTER_INI_ENTRIES(); /*/
-
- REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
- <span class="bold">REGISTER_LONG_CONSTANT("DBX_BLABLA", DBX_BLABLA CONST_CS | CONST_PERSISTENT);</span>
-
- [...]
-
- return SUCCESS;
- }
-</pre>
-Add code for inclusion in the phpinfo() function (optional, but recommended):<br>
-<pre class="code">
-ZEND_MINFO_FUNCTION(dbx)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "dbx support", "enabled");
- php_info_print_table_row(2, "dbx support for MySQL", "enabled");
- php_info_print_table_row(2, "dbx support for ODBC", "enabled");
- <span class="bold">php_info_print_table_row(2, "dbx support for BlaBla", "enabled");</span>
- php_info_print_table_end();
- DISPLAY_INI_ENTRIES();
-}
-</pre>
-Finally, for the implementation of all switch_dbx_XXXXX functions, copy a 'case'-line for every function that you support (should be all functions!). Here is an example for only the switch_dbx_connect function:<br>
-<pre class="code">
-int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) {
- // returns connection handle as resource on success or 0 as long on failure
- switch ((*dbx_module)-&gt;value.lval) {
- case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- <span class="bold">case DBX_BLABLA: return dbx_blabla_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);</span>
- }
- zend_error(E_WARNING, "dbx_connect: not supported in this module");
- return 0;
- }
-</pre>
-This should be done for all switch_dbx_XXXXX functions. They are listed below:<br>
-<pre class="code">
-int <a href="#connect">switch_dbx_connect(...)</a>;
-int <a href="#pconnect">switch_dbx_pconnect(...)</a>;
-int <a href="#close">switch_dbx_close(...)</a>;
-int <a href="#query">switch_dbx_query(...)</a>;
-int <a href="#getcolumncount">switch_dbx_getcolumncount(...)</a>;
-int <a href="#getcolumnname">switch_dbx_getcolumnname(...)</a>;
-int <a href="#getcolumntype">switch_dbx_getcolumntype(...)</a>;
-int <a href="#getrow">switch_dbx_getrow(...)</a>;
-int <a href="#error">switch_dbx_error(...)</a>;
-</pre>
-This concludes the changes for the dbx.c file. All that is needed now is to actually code the dbx_blabla_connect and other functions, which we will see in the following step.<br>
-</div>
-<p>
-<a href="#top">top</a><br>
-<div class="newpage"></div>
-
-<div class="fn-title"><a name="step1"></a>
-2. the files dbx_blabla.h and dbx_blabla.c<br>
-</div>
-<div class="text">
-The dbx_blabla.h and dbx_blabla.c file are created in the folder /ext/dbx.<br>
-The easiest method is to just copy dbx_mysql.h en dbx_mysql.c, open both files, and do a search and replace ('blabla' for 'mysql' and 'BLABLA' for 'MYSQL'). Yes, case-sensitive.<br>
-For the .h file, that's all. <br>
-For the .c file, the fun has just started :-)<br>
-In the .c is the actual realization of the database abstraction, where a call to a standard function is translated into one or more database-specific calls. For mysql, a dbx_connect translates to a mysql_connect followed by a mysql_select_db. Refer to the dbx_mysql.c and dbx_odbc.c files regularly for examples!<br>
-In dbx.h one macro and one function are defined to make the calling of external module functions and returning of the results easier: dbx_call_any_function and MOVE_RETURNED_TO_RV.<br>
-<p>
- The details of what each of the functions do, what parameters they get, and what parameters they should return are discussed below. But first, the dbx_mysql_connect function is presented and explained, so you get an idea of how things work.<br>
-<pre class="code">
-int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) {
- // returns connection handle as resource on success or 0 as long on
- // failure
- int number_of_arguments;
- zval **arguments[3];
- zval * returned_zval=NULL;
- zval * select_db_zval=NULL;
-
- number_of_arguments=3;
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, <span class="bold">"mysql_connect"</span>, &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || returned_zval-&gt;type!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=rv;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, <span class="bold">"mysql_select_db"</span>, &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- return 1;
- }
-</pre>
-First of all, all functions return 0 on failure and 1 on success. These values are used in the dbx-routines, they are never actually given back to the PHP-script writer that calls the dbx_connect function.<br>
-The actual value that is of interest to the caller is returned in the <span class="bold">rv</span> parameter. In this case it is a connection handle (or link identifier, in mysql-speak), that is also returned if the database selection doesn't succeed. <br>
-The parameters that are of interest to the function are located between the <span class="bold">rv</span> and <span class="bold">INTERNAL_FUNCTION_PARAMETERS</span> parameters, in this case it is a <span class="bold">host</span> name, a <span class="bold">db</span> name, a <span class="bold">username</span> and a <span class="bold">password</span>. These are the values that the user specifies if he calls dbx_connect(); These parameters are used in the calls to the mysql-database functions. The user actually also specifies a module-name, that decides which connect-function should be called. Here, he specified 'mysql'.<br>
-To actually call a mysql module function, you can use <span class="bold">dbx_call_any_function</span> where you specify the function name (it is used twice in dbx_mysql_connect, see <span class="bold">'mysql_connect'</span> and <span class="bold">'mysql_select_db'</span>, they are printed bold in the code). The value that is returned from the function will be stored in the next argument, a zval * (e.g. <span class="bold">returned_zval</span>) parameter that you must declare locally. To actually return such a parameter, use the <span class="bold">MOVE_RETURNED_TO_RV(rv, returned_zval)</span> macro, which copies the values to <span class="bold">rv</span> and frees anything that may be left in <span class="bold">returned_zval</span>. Parameters that must be passed to the mysql-function are stored in the <span class="bold">arguments</span> array, which must be large enough to hold all parameters to the function-call that requires the most parameters (in this case, mysql_connect expects 3 parameters, mysql_select_db expects two parameters, so the <span class="bold">arguments</span> array is defined 'zval **arguments[<span class="bold">3</span>]'). The <span class="bold">number_of_arguments</span> parameter is set to the actual number of arguments that the function-call requires. As you can see it is initialized to 3, for the first call to mysql_connect. Then it is set to 2, for the call to mysql_select_db. If you call a function that retrieves a value, and you don't return it with MOVE_RETURNED_TO_RV, then you must free the value using <span class="bold">zval_ptr_dtor</span>, as can be seen right after the call to mysql_select_db. This can also be seen directly after the call to mysql_connect, if somehow this function failed or didn't return a resource (on a successful connect mysql_connect returns a resource) the returned value is freed as well (and 0 is returned because the connection failed).<br>
-<p>
-OK, now the description of all functions that you should implement, and what is expected of them...<br>
-<a name="connect"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_connect</span>(zval **rv, zval **<span class="fn-param">host</span>, zval **<span class="fn-param">db</span>, zval **<span class="fn-param">username</span>, zval **<span class="fn-param">password</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on connect-failure and 1 on success
-// rv: connection handle as resource on success or nothing on failure
-</pre>
-dbx_blabla_connect creates a connection to a database on a specified host, using username and password for authentication. This may be done by connecting to a server and selecting a database (as mysql does), or connecting to a specific database directly (as in ODBC). <br>
-What must be returned (in <span class="bold">rv</span>) is the link identifier that is returned from the blabla_connect function, in it's native form so the end-user can use $db-&gt;handle to call other blabla_* functions that expect this parameter.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. Remember that a failed database selection can still return a 1 because the connection succeeded!<br>
-The host (string) is the name of the machine the server is run on, but it may be empty if a database name is enough to establish a connection.<br>
-The db (string) is the name of the database to select, or, for e.g. ODBC, the identifier that is needed to actually select the database.<br>
-The username (string) and password (string) are used for authentication.<br>
-<a name="pconnect"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_pconnect</span>(zval **rv, zval **<span class="fn-param">host</span>, zval **<span class="fn-param">db</span>, zval **<span class="fn-param">username</span>, zval **<span class="fn-param">password</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on pconnect-failure and 1 on success
-// rv: persistent connection handle as resource on success or nothing
-// on failure
-</pre>
-dbx_blabla_pconnect is identical to dbx_blabla_connect except that it will create a persistent connection.<br>
-<a name="close"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_close</span>(zval **rv, zval **<span class="fn-param">dbx_handle</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on close-failure and 1 on success
-// rv: 1 as bool on success or nothing on failure
-</pre>
-dbx_blabla_close closes an open connection, whether it was created persistently or not.<br>
-What must be returned (in <span class="bold">rv</span>) is a boolean true that indicates when the connection was closed successfully. If it wasn't, no value is returned in <span class="bold">rv</span>.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. Note that an unsuccessful close is still a succeeded function call.<br>
-The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.<br>
-<a name="query"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_query</span>(zval **rv, zval **<span class="fn-param">dbx_handle</span>, zval **<span class="fn-param">sql_statement</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on query-failure and 1 on success
-// rv: 1 as bool or a result identifier as resource on success
-// or nothing on failure
-</pre>
-dbx_blabla_query executes an SQL statement over the connection.<br>
-What must be returned (in <span class="bold">rv</span>) is a nothing on failure, on success it must return either a boolean 1 for queries that don't return data (like INSERT INTO) or a native result-handle for queries that do return data (SELECT). The native result handle ($q-&gt;handle) can be used by the end-user to call other blabla_* functions that expect this parameter.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. Note that a failed query execution can still return a 1 because the query function succeeded!<br>
-The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.<br>
-The sql_statement (string) can have any value.<br>
-<a name="getcolumncount"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getcolumncount</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on query-failure and 1 on success
-// returns column-count as long on success or nothing on failure
-</pre>
-dbx_blabla_getcolumncount gets the number of fields that the query-result contains.<br>
-What must be returned (in <span class="bold">rv</span>) is the number of fields as long from the query result specified by the result_handle.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-<a name="getcolumnname"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getcolumnname</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, long <span class="fn-param">column_index</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns column-name as string on success or nothing on failure
-</pre>
-dbx_blabla_getcolumnname gets the fieldname of the specified column.<br>
-What must be returned (in <span class="bold">rv</span>) is the fieldname as string of the given column.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-The column_index is a long that ranges from 0 to the value you returned from dbx_blabla_getcolumncount minus 1 [0..columncount-1].<br>
-<a name="getcolumntype"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getcolumntype</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, long <span class="fn-param">column_index</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns column-type as string on success or nothing on failure
-</pre>
-dbx_blabla_getcolumnname gets the field type of the specified column.<br>
-What must be returned (in <span class="bold">rv</span>) is the field type as string of the given column.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-The column_index is a long that ranges from 0 to the value you returned from dbx_blabla_getcolumncount minus 1 [0..columncount-1].<br>
-<a name="getrow"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getrow</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, long <span class="fn-param">row_number</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns array[0..columncount-1] as strings on success or 0 as long
-// on failure
-</pre>
-dbx_blabla_getrow gets the next row from the query-results.<br>
-In some cases (PostgreSQL) the rownumber is needed to actually fetch the row. This will be provided (it will be indexed starting at 0) by the dbx_query function. In other cases it is not needed and thus not used.<br>
-What must be returned (in <span class="bold">rv</span>) is an indexed array[0..columncount-1] of strings, containing the data from the row (for mysql this is easy since it already performs this way, for ODBC the array has to be constructed inside this function from a loop that fetches the data for each column).<br>
-What must be returned from the function is a 1 on success and a 0 on failure (function failed or there are no more rows available). <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-<a name="error"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_error</span>(zval **rv, zval **<span class="fn-param">dbx_handle</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns error message as string
-</pre>
-dbx_blabla_error gets the error message from the last database call.<br>
-What must be returned (in <span class="bold">rv</span>) is the error message as a string.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.<br>
-</div>
-<p>
-<a href="#top">top</a><br>
-<div class="newpage"></div>
-<p>
-<div class="text">
-For specifics or the finer details you can always refer to dbx_mysql.c and dbx_odbc.c to see everything in action. <br>
-More Zend API documentation can be found at <a href="http://www.zend.com/apidoc">http://www.zend.com/apidoc</a>.<br>
-This document can be found at <a href="http://www.guidance.nl/php/dbx">http://www.guidance.nl/php/dbx</a>.<br>
-</div>
-<p>
-<a href="#top">top</a><br>
-<div class="newpage"></div>
-
-</body>
-</html>
diff --git a/ext/dbx/php_dbx.h b/ext/dbx/php_dbx.h
deleted file mode 100644
index d6e0286624..0000000000
--- a/ext/dbx/php_dbx.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_PHP_DBX_H
-#define ZEND_PHP_DBX_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-extern zend_module_entry dbx_module_entry;
-#define phpext_dbx_ptr &dbx_module_entry
-
-#ifdef ZEND_WIN32
-#define ZEND_DBX_API __declspec(dllexport)
-#else
-#define ZEND_DBX_API
-#endif
-
-ZEND_MINIT_FUNCTION(dbx);
-ZEND_MSHUTDOWN_FUNCTION(dbx);
-/* ZEND_RINIT_FUNCTION(dbx); */
-/* ZEND_RSHUTDOWN_FUNCTION(dbx); */
-
-ZEND_MINFO_FUNCTION(dbx);
-
-ZEND_FUNCTION(dbx_connect);
-ZEND_FUNCTION(dbx_close);
-ZEND_FUNCTION(dbx_query);
-ZEND_FUNCTION(dbx_error);
-
-ZEND_FUNCTION(dbx_sort);
-ZEND_FUNCTION(dbx_compare);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-*/
-
-/*
-ZEND_BEGIN_MODULE_GLOBALS(dbx)
-ZEND_END_MODULE_GLOBALS(dbx)
-*/
-
-/* In every function that needs to use variables in php_dbx_globals,
- do call dbxLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as dbxG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define DBXG(v) TSRMG(dbx_globals_id, zend_dbx_globals *, v)
-#else
-#define DBXG(v) (dbx_globals.v)
-#endif
-
-#endif /* ZEND_PHP_DBX_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/tests/001.phpt b/ext/dbx/tests/001.phpt
deleted file mode 100644
index 2281426230..0000000000
--- a/ext/dbx/tests/001.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Check for dbx presence
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-print("dbx extension is available");
-?>
---EXPECT--
-dbx extension is available \ No newline at end of file
diff --git a/ext/dbx/tests/002.phpt b/ext/dbx/tests/002.phpt
deleted file mode 100644
index f9dff86155..0000000000
--- a/ext/dbx/tests/002.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-DBX_CONSTANTS
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-if (DBX_MYSQL=="DBX_MYSQL") print('!DBX_MYSQL');
-if (DBX_ODBC=="DBX_ODBC") print('!DBX_ODBC');
-if (DBX_PGSQL=="DBX_PGSQL") print('!DBX_PGSQL');
-if (DBX_MSSQL=="DBX_MSSQL") print('!DBX_MSSQL');
-if (DBX_FBSQL=="DBX_FBSQL") print('!DBX_FBSQL');
-if (DBX_OCI8=="DBX_OCI8") print('!DBX_OCI8');
-if (DBX_SYBASECT=="DBX_SYBASECT") print('!DBX_SYBASECT');
-if (DBX_PERSISTENT=="DBX_PERSISTENT") print('!DBX_PERSISTENT');
-if (DBX_RESULT_INFO=="DBX_RESULT_INFO") print('!DBX_RESULT_INFO');
-if (DBX_RESULT_INDEX=="DBX_RESULT_INDEX") print('!DBX_RESULT_INDEX');
-if (DBX_RESULT_ASSOC=="DBX_RESULT_ASSOC") print('!DBX_RESULT_ASSOC');
-if (DBX_CMP_NATIVE=="DBX_CMP_NATIVE") print('!DBX_CMP_NATIVE');
-if (DBX_CMP_TEXT=="DBX_CMP_TEXT") print('!DBX_CMP_TEXT');
-if (DBX_CMP_NUMBER=="DBX_CMP_NUMBER") print('!DBX_CMP_NUMBER');
-if (DBX_CMP_ASC=="DBX_CMP_ASC") print('!DBX_CMP_ASC');
-if (DBX_CMP_DESC=="DBX_CMP_DESC") print('!DBX_CMP_DESC');
-print('ok');
-?>
---EXPECT--
-ok \ No newline at end of file
diff --git a/ext/dbx/tests/003.phpt b/ext/dbx/tests/003.phpt
deleted file mode 100644
index 03eec20ddf..0000000000
--- a/ext/dbx/tests/003.phpt
+++ /dev/null
@@ -1,107 +0,0 @@
---TEST--
-dbx_connect
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-include_once("ext/dbx/tests/dbx_test.p");
-$nonexisting_database="nonexisting_database";
-$nonexisting_username="nonexisting_username";
-$nonexisting_password="nonexisting_password";
-$dlo = dbx_connect($module_name, $host, $database, $username, $password);
-if ($dlo!=0) {
- print('connect using string ok'."\n");
- dbx_close($dlo);
- }
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if ($dlo!=0) {
- print('connect using constant ok'."\n");
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $nonexisting_database, $username, $password);
-if ($dlo==0) {
- print('connect to non-existing database failed, so it\'s ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $database, $nonexisting_username, $nonexisting_password);
-if ($dlo==0) {
- print('connect with false username/password combi failed, so it\'s ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo = dbx_connect($module_name, $host, $database, $username, $password, DBX_PERSISTENT);
-if ($dlo!=0) {
- print('persistent connect using string ok'."\n");
- dbx_close($dlo);
- }
-$dlo = dbx_connect($module, $host, $database, $username, $password, DBX_PERSISTENT);
-if ($dlo!=0) {
- print('persistent connect using constant ok'."\n");
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $nonexisting_database, $username, $password, DBX_PERSISTENT);
-if ($dlo==0) {
- print('persistent connect to non-existing database failed, so it\'s ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $database, $nonexisting_username, $nonexisting_password, DBX_PERSISTENT);
-if ($dlo==0) {
- print('persistent connect with false username/password combi failed, so it\'s ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $database, $username, $password, DBX_PERSISTENT, "12many");
-if ($dlo==0) {
- print('too many parameters: connect failure works ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $database, $username);
-if ($dlo==0) {
- print('too few parameters: connect failure works ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo1 = dbx_connect($module, $host, $database, $username, $password);
-$dlo2 = dbx_connect($module, $host, $database, $username, $password);
-if ($dlo1!=0 && $dlo2!=0) {
- print('multiple connects ok'."\n");
- dbx_close($dlo1);
- dbx_close($dlo2);
- }
-$dlo1 = dbx_connect($module, $host, $database, $username, $password);
-$dlo2 = @dbx_connect($module, $host, $nonexisting_database, $username, $password);
-if ($dlo1!=0 && $dlo2==0) {
- print('multiple connects (2nd fails on database-name) ok'."\n");
- dbx_close($dlo1);
- }
-?>
---EXPECT--
-connect using string ok
-connect using constant ok
-connect to non-existing database failed, so it's ok
-connect with false username/password combi failed, so it's ok
-persistent connect using string ok
-persistent connect using constant ok
-persistent connect to non-existing database failed, so it's ok
-persistent connect with false username/password combi failed, so it's ok
-too many parameters: connect failure works ok
-too few parameters: connect failure works ok
-multiple connects ok
-multiple connects (2nd fails on database-name) ok \ No newline at end of file
diff --git a/ext/dbx/tests/004.phpt b/ext/dbx/tests/004.phpt
deleted file mode 100644
index 80baa53374..0000000000
--- a/ext/dbx/tests/004.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-dbx_close
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-include_once("ext/dbx/tests/dbx_test.p");
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if ($dlo!=0) {
- if (dbx_close($dlo)) {
- print('close works ok'."\n");
- }
- }
-if (!@dbx_close($dlo)) {
- print('close failure works ok'."\n");
- }
-if (!@dbx_close($dlo, "12many")) {
- print('too many parameters: close failure works ok'."\n");
- }
-if (!@dbx_close()) {
- print('too few parameters: close failure works ok'."\n");
- }
-?>
---EXPECT--
-close works ok
-close failure works ok
-too many parameters: close failure works ok
-too few parameters: close failure works ok \ No newline at end of file
diff --git a/ext/dbx/tests/005.phpt b/ext/dbx/tests/005.phpt
deleted file mode 100644
index 447fb3625c..0000000000
--- a/ext/dbx/tests/005.phpt
+++ /dev/null
@@ -1,93 +0,0 @@
---TEST--
-dbx_query
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-include_once("ext/dbx/tests/dbx_test.p");
-$sql_statement = "select * from tbl order by id";
-$invalid_sql_statement = "invalid select * from tbl";
-$sql_select_statement = "select * from tbl where id=999999 and parentid=999999";
-$sql_insert_statement = "insert into tbl (id, parentid, description) values (999999, 999999, 'temporary_record')";
-$sql_update_statement = "update tbl set field2 = 'bla''bla\"bla' where id=999999 and parentid=999999";
-$sql_delete_statement = "delete from tbl where id=999999 and parentid=999999";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- // especially for sybase I need to set the textsize to >64 k, as one of the test-fields
- // requires this (shouldn't this be a php.ini-entry??)
- if ($connection === DBX_SYBASECT) @dbx_query($dlo, "set textsize 100000");
- // select query
- if ($dro=dbx_query($dlo, $sql_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".$dro->data[$i]['field1'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- $dro->data[0]['id']='changed_value';
- print($dro->data[0][0]."\n");
- }
- // insert query
- if (dbx_query($dlo, $sql_insert_statement)) {
- print('insert-query: dbx_query works ok'."\n");
- if ($dro=dbx_query($dlo, $sql_select_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- }
- }
- // update query
- if (dbx_query($dlo, $sql_update_statement)) {
- print('update-query: dbx_query works ok'."\n");
- if ($dro=dbx_query($dlo, $sql_select_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- }
- }
- // delete query
- if (dbx_query($dlo, $sql_delete_statement)) {
- print('delete-query: dbx_query works ok'."\n");
- if ($dro=dbx_query($dlo, $sql_select_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- }
- }
-
- // generate errors
- if (!@dbx_query(0, $sql_statement)) {
- print('wrong dbx_link_object: query failure works ok'."\n");
- }
- if (!@dbx_query($dlo, $invalid_sql_statement)) {
- print('wrong sql-statement: query failure works ok'."\n");
- }
- if (!@dbx_query($dlo, $sql_statement, DBX_RESULT_INDEX, "12many")) {
- print('too many parameters: query failure works ok'."\n");
- }
- if (!@dbx_query($dlo)) {
- print('too few parameters: query failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-1.root.empty fields.0
-10.abc.field2 contains single quote.3
-20.cba.field2 contains double quote.3
-30.bac.field2 contains >4k text.4591
-40.100.field2 contains >64k text.70051
-50.20.empty fields.0
-60.20.empty fields.0
-changed_value
-insert-query: dbx_query works ok
-999999.temporary_record.0
-update-query: dbx_query works ok
-999999.temporary_record.11
-delete-query: dbx_query works ok
-wrong dbx_link_object: query failure works ok
-wrong sql-statement: query failure works ok
-too many parameters: query failure works ok
-too few parameters: query failure works ok
diff --git a/ext/dbx/tests/006.phpt b/ext/dbx/tests/006.phpt
deleted file mode 100644
index b4f29b51f8..0000000000
--- a/ext/dbx/tests/006.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-dbx_error
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-include_once("ext/dbx/tests/dbx_test.p");
-if ($module==DBX_ODBC) {
- // ODBC module doesn't have an error-message-function (yet?)
- print('query generated an error: dbx_error works ok'."\n");
- print('query is valid: dbx_error works ok'."\n");
- print('wrong dbx_link_object: dbx_error failure works ok'."\n");
- print('too many parameters: dbx_error failure works ok'."\n");
- print('too few parameters: dbx_error failure works ok'."\n");
- }
-else {
-
-$sql_statement = "select * from tbl";
-$invalid_sql_statement = "invalid select * from tbl";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- @dbx_query($dlo, "select nonexistingfield from tbl");
- if ((($module==DBX_MSSQL || $module==DBX_SYBASECT) && dbx_error($dlo)!="Changed database context to '".$database."'.".($module==DBX_SYBASECT?"\n":""))
- || strlen(dbx_error($dlo))) {
- print('query generated an error: dbx_error works ok'."\n");
- }
- dbx_query($dlo, "select description from tbl");
- if (!strlen(dbx_error($dlo)) || (($module==DBX_MSSQL || $module==DBX_SYBASECT) && dbx_error($dlo)=="Changed database context to '".$database."'.".($module==DBX_SYBASECT?"\n":""))) {
- print('query is valid: dbx_error works ok'."\n");
- }
- if (!@dbx_error(0)) {
- print('wrong dbx_link_object: dbx_error failure works ok'."\n");
- }
- if (!@dbx_error($dlo, "12many")) {
- print('too many parameters: dbx_error failure works ok'."\n");
- }
- if (!@dbx_error()) {
- print('too few parameters: dbx_error failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-
- }
-?>
---EXPECT--
-query generated an error: dbx_error works ok
-query is valid: dbx_error works ok
-wrong dbx_link_object: dbx_error failure works ok
-too many parameters: dbx_error failure works ok
-too few parameters: dbx_error failure works ok
diff --git a/ext/dbx/tests/007.phpt b/ext/dbx/tests/007.phpt
deleted file mode 100644
index bfc8baa505..0000000000
--- a/ext/dbx/tests/007.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-dbx_sort
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-include_once("ext/dbx/tests/dbx_test.p");
-$sql_statement = "select id, description from tbl where parentid=1 order by id";
-$compare_function = "cmp";
-$invalid_compare_function = "invalid_cmp";
-$nonexisting_compare_function = "nonexisting_cmp";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-function invalid_cmp() {
- return "blabla";
- }
-function cmp($a, $b) {
- $rv = dbx_compare($a, $b, "description");
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- $dro = dbx_query($dlo, $sql_statement);
- if (!$dro) {
- print('this won\'t work'."\n");
- }
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- if (dbx_sort($dro, $compare_function)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (!@dbx_sort(0, $compare_function)) {
- print('wrong dbx_result_object: dbx_sort failure works ok'."\n");
- }
- if (dbx_sort($dro, $nonexisting_compare_function)) {
- print('nonexisting compare function: dbx_sort will NOT complain'."\n");
- }
- if (dbx_sort($dro, $invalid_compare_function)) {
- print('invalid compare function: dbx_sort will NOT complain'."\n");
- }
- if (!@dbx_sort($dro, $compare_function, "12many")) {
- print('too many parameters: dbx_sort failure works ok'."\n");
- }
- if (!@dbx_sort($dro)) {
- print('too few parameters: dbx_sort failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-10.abc
-20.cba
-30.bac
-40.100
-50.20
-60.20
-40.100
-50.20
-60.20
-10.abc
-30.bac
-20.cba
-wrong dbx_result_object: dbx_sort failure works ok
-nonexisting compare function: dbx_sort will NOT complain
-invalid compare function: dbx_sort will NOT complain
-too many parameters: dbx_sort failure works ok
-too few parameters: dbx_sort failure works ok \ No newline at end of file
diff --git a/ext/dbx/tests/008.phpt b/ext/dbx/tests/008.phpt
deleted file mode 100644
index ac3f76fe94..0000000000
--- a/ext/dbx/tests/008.phpt
+++ /dev/null
@@ -1,146 +0,0 @@
---TEST--
-dbx_compare
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---POST--
---GET--
---FILE--
-<?php
-include_once("ext/dbx/tests/dbx_test.p");
-$sql_statement = "select id, description from tbl where parentid=1 order by id";
-$compare_function_1 = "cmp_description_id";
-$compare_function_2 = "cmp_description_desc_id";
-$compare_function_3 = "cmp_description_id_desc";
-$compare_function_4 = "cmp_description_desc_id_desc";
-$compare_function_5 = "cmp_description_txt_id";
-$compare_function_6 = "cmp_description_number_id";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-function cmp_description_id($a, $b) {
- $rv = dbx_compare($a, $b, "description");
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-function cmp_description_desc_id($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_DESC);
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-function cmp_description_id_desc($a, $b) {
- $rv = dbx_compare($a, $b, "description");
- if (!$rv) $rv = dbx_compare($a, $b, "id", DBX_CMP_DESC);
- return $rv;
- }
-function cmp_description_desc_id_desc($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_DESC);
- if (!$rv) $rv = dbx_compare($a, $b, "id", DBX_CMP_DESC);
- return $rv;
- }
-function cmp_description_txt_id($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_TEXT);
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-function cmp_description_number_id($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_NUMBER);
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- $dro = dbx_query($dlo, $sql_statement);
- if (!$dro) {
- print('this won\'t work'."\n");
- }
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- if (dbx_sort($dro, $compare_function_1)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_2)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_3)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_4)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_5)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_6)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (!@dbx_compare($a, $b, "fieldname")) {
- print('wrong parameters: dbx_compare failure works ok'."\n");
- }
- if (!@dbx_compare($a, $b, "fieldname", DBX_CMP_NATIVE, "12many")) {
- print('too many parameters: dbx_compare failure works ok'."\n");
- }
- if (!@dbx_compare($a, $b)) {
- print('too few parameters: dbx_compare failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-10.abc
-20.cba
-30.bac
-40.100
-50.20
-60.20
-40.100
-50.20
-60.20
-10.abc
-30.bac
-20.cba
-20.cba
-30.bac
-10.abc
-50.20
-60.20
-40.100
-40.100
-60.20
-50.20
-10.abc
-30.bac
-20.cba
-20.cba
-30.bac
-10.abc
-60.20
-50.20
-40.100
-40.100
-50.20
-60.20
-10.abc
-30.bac
-20.cba
-10.0
-20.0
-30.0
-50.20
-60.20
-40.100
-wrong parameters: dbx_compare failure works ok
-too many parameters: dbx_compare failure works ok
-too few parameters: dbx_compare failure works ok \ No newline at end of file
diff --git a/ext/dbx/tests/dbx_test.p b/ext/dbx/tests/dbx_test.p
deleted file mode 100644
index 79418b20e0..0000000000
--- a/ext/dbx/tests/dbx_test.p
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-$connection = DBX_SYBASECT;
-switch ($connection) {
- case DBX_MYSQL:
- $module=DBX_MYSQL;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="mysql";
- break;
- case DBX_MSSQL:
- $module=DBX_MSSQL;
- $host="HOLLY";
- $database="dbx_test";
- $username="";
- $password="";
- $module_name="mssql";
- break;
- case DBX_ODBC:
- $module=DBX_ODBC;
- $host="localhost";
- $database="dbx_test_mysql"; // "dbx_test_access";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="odbc";
- break;
- case DBX_PGSQL:
- $module=DBX_PGSQL;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="pgsql";
- break;
- case DBX_FBSQL:
- $module=DBX_FBSQL;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="fbsql";
- break;
- case DBX_OCI8:
- $module=DBX_OCI8;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="oci8";
- break;
- case DBX_SYBASECT:
- $module=DBX_SYBASECT;
- $host="threesyb";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="sybase_ct";
- break;
- }
-
-?> \ No newline at end of file
diff --git a/ext/dbx/tests/dbx_test.pgsql.script b/ext/dbx/tests/dbx_test.pgsql.script
deleted file mode 100644
index 316349df92..0000000000
--- a/ext/dbx/tests/dbx_test.pgsql.script
+++ /dev/null
@@ -1,37 +0,0 @@
-create database dbx_test;
-\cdbx_test
-
-create table tbl (
- id int NOT NULL default 0,
- parentid int NOT NULL default 0,
- description varchar(255) NULL,
- field1 text NULL,
- field2 text NULL,
- field3 text NULL,
- field4 text NULL,
- field5 text NULL,
- creation_date int8 NULL,
- PRIMARY KEY (id)
-);
-
-create index parentid on tbl (parentid);
-create index description on tbl (description);
-create index creation_date on tbl (creation_date);
-
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (1, 0, 'root', 'empty fields', '', '', '', '', 20010605110724 );
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (10, 1, 'abc', 'field2 contains single quote', 'x''x', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (20, 1, 'cba', 'field2 contains double quote', 'x"x', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (30, 1, 'bac', 'field2 contains >4k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (40, 1, '100', 'field2 contains >64k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (50, 1, '20', 'empty fields', '', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (60, 1, '20', 'empty fields', '', '', '', '', 20010605110724);
-
-create user dbx_testuser with password 'dbx_testpassword';
-grant SELECT,INSERT,UPDATE,DELETE on tbl to dbx_testuser;
diff --git a/ext/dbx/tests/dbx_test.script b/ext/dbx/tests/dbx_test.script
deleted file mode 100644
index 1bad104fba..0000000000
--- a/ext/dbx/tests/dbx_test.script
+++ /dev/null
@@ -1,38 +0,0 @@
-
-create database if not exists dbx_test;
-use dbx_test;
-
-grant SELECT,INSERT,UPDATE,DELETE on dbx_test.* to dbx_testuser@localhost identified by 'dbx_testpassword';
-
-# info tables
-
-drop table if exists tbl;
-create table tbl (
- id int(10) NOT NULL default 0,
- parentid int(10) NOT NULL default 0,
- description varchar(255) NULL,
- field1 mediumtext NULL,
- field2 mediumtext NULL,
- field3 mediumtext NULL,
- field4 mediumtext NULL,
- field5 mediumtext NULL,
- creation_date timestamp NULL,
- PRIMARY KEY (id),
- KEY parentid (parentid),
- KEY description (description),
- KEY creation_date (creation_date)
- );
-
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (1, 0, 'root', 'empty fields', '', '', '', '', 20010605110724),
- (10, 1, 'abc', 'field2 contains single quote', 'x''x', '', '', '', 20010605110724),
- (20, 1, 'cba', 'field2 contains double quote', 'x"x', '', '', '', 20010605110724),
- (30, 1, 'bac', 'field2 contains >4k text',
- 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl',
- '', '', '', 20010605110724),
- (40, 1, '100', 'field2 contains >64k text',
- 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl',
- '', '', '', 20010605110724),
- (50, 1, '20', 'empty fields', '', '', '', '', 20010605110724),
- (60, 1, '20', 'empty fields', '', '', '', '', 20010605110724)
- ; \ No newline at end of file
diff --git a/ext/dio/EXPERIMENTAL b/ext/dio/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/dio/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/dio/config.m4 b/ext/dio/config.m4
deleted file mode 100644
index 59d24229e1..0000000000
--- a/ext/dio/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(dio, whether to enable direct I/O support,
-[ --enable-dio Enable direct I/O support])
-
-if test "$PHP_DIO" != "no"; then
- PHP_NEW_EXTENSION(dio, dio.c, $ext_shared)
-fi
diff --git a/ext/dio/dio.c b/ext/dio/dio.c
deleted file mode 100644
index 90ba912fc3..0000000000
--- a/ext/dio/dio.c
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_dio.h"
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#define le_fd_name "Direct I/O File Descriptor"
-static int le_fd;
-
-function_entry dio_functions[] = {
- PHP_FE(dio_open, NULL)
- PHP_FE(dio_truncate, NULL)
- PHP_FE(dio_stat, NULL)
- PHP_FE(dio_seek, NULL)
- PHP_FE(dio_fcntl, NULL)
- PHP_FE(dio_read, NULL)
- PHP_FE(dio_write, NULL)
- PHP_FE(dio_close, NULL)
- {NULL, NULL, NULL}
-};
-
-
-zend_module_entry dio_module_entry = {
- STANDARD_MODULE_HEADER,
- "dio",
- dio_functions,
- PHP_MINIT(dio),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(dio),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_DIO
-ZEND_GET_MODULE(dio)
-#endif
-
-
-static void _dio_close_fd(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_fd_t *f = (php_fd_t *) rsrc->ptr;
- close(f->fd);
- free(f);
-}
-
-#define RDIOC(c) REGISTER_LONG_CONSTANT(#c, c, CONST_CS | CONST_PERSISTENT)
-
-#define DIO_UNDEF_CONST -1
-
-PHP_MINIT_FUNCTION(dio)
-{
- le_fd = zend_register_list_destructors_ex(_dio_close_fd, NULL, le_fd_name, module_number);
-
- RDIOC(O_RDONLY);
- RDIOC(O_WRONLY);
- RDIOC(O_RDWR);
- RDIOC(O_CREAT);
- RDIOC(O_EXCL);
- RDIOC(O_TRUNC);
- RDIOC(O_APPEND);
- RDIOC(O_NONBLOCK);
- RDIOC(O_NDELAY);
-#ifdef O_SYNC
- RDIOC(O_SYNC);
-#endif
- RDIOC(O_NOCTTY);
- RDIOC(S_IRWXU);
- RDIOC(S_IRUSR);
- RDIOC(S_IWUSR);
- RDIOC(S_IXUSR);
- RDIOC(S_IRWXG);
- RDIOC(S_IRGRP);
- RDIOC(S_IWGRP);
- RDIOC(S_IXGRP);
- RDIOC(S_IRWXO);
- RDIOC(S_IROTH);
- RDIOC(S_IWOTH);
- RDIOC(S_IXOTH);
- RDIOC(F_DUPFD);
- RDIOC(F_GETFD);
- RDIOC(F_GETFL);
- RDIOC(F_SETFL);
- RDIOC(F_GETLK);
- RDIOC(F_SETLK);
- RDIOC(F_SETLKW);
- RDIOC(F_SETOWN);
- RDIOC(F_GETOWN);
- RDIOC(F_UNLCK);
- RDIOC(F_RDLCK);
- RDIOC(F_WRLCK);
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(dio)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "dio support", "enabled");
- php_info_print_table_end();
-}
-
-static void new_php_fd(php_fd_t **f, int fd)
-{
- *f = malloc(sizeof(php_fd_t));
- (*f)->fd = fd;
-}
-
-/* {{{ proto resource dio_open(string filename, int flags[, int mode])
- Open a new filename with specified permissions of flags and creation permissions of mode */
-PHP_FUNCTION(dio_open)
-{
- php_fd_t *f;
- char *file_name;
- int file_name_length;
- int flags;
- mode_t mode = 0;
- int fd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", &file_name, &file_name_length, &flags, &mode) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 3) {
- fd = open(file_name, flags, mode);
- }
- else {
- fd = open(file_name, flags);
- }
-
- if (fd == -1) {
- php_error(E_WARNING, "%s(): cannot open file %s with flags %d and permissions %d: %s",
- get_active_function_name(TSRMLS_C), file_name, flags, mode, strerror(errno));
- RETURN_FALSE;
- }
-
- new_php_fd(&f, fd);
- ZEND_REGISTER_RESOURCE(return_value, f, le_fd);
-}
-/* }}} */
-
-/* {{{ proto string dio_read(resource fd[, int n])
- Read n bytes from fd and return them, if n is not specified, read 1k */
-PHP_FUNCTION(dio_read)
-{
- zval *r_fd;
- php_fd_t *f;
- char *data;
- int bytes = 1024;
- ssize_t res;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &r_fd, &bytes) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- data = emalloc(bytes + 1);
- res = read(f->fd, data, bytes);
- if (res <= 0) {
- RETURN_NULL();
- }
-
- data = erealloc(data, res + 1);
- data[res] = 0;
-
- RETURN_STRINGL(data, res, 0);
-}
-/* }}} */
-
-/* {{{ proto int dio_write(resource fd, string data[, int len])
- Write data to fd with optional truncation at length */
-PHP_FUNCTION(dio_write)
-{
- zval *r_fd;
- php_fd_t *f;
- char *data;
- size_t data_len;
- size_t trunc_len = 0;
- ssize_t res;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &r_fd, &data, &data_len, &trunc_len) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- res = write(f->fd, data, trunc_len ? trunc_len : data_len);
- if (res == -1) {
- php_error(E_WARNING, "%s(): cannot write data to file descriptor %d, %s",
- get_active_function_name(TSRMLS_C), f->fd, strerror(errno));
- }
-
- RETURN_LONG(res);
-}
-/* }}} */
-
-/* {{{ proto bool dio_truncate(resource fd, int offset)
- Truncate file descriptor fd to offset bytes */
-PHP_FUNCTION(dio_truncate)
-{
- zval *r_fd;
- php_fd_t *f;
- off_t offset;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &r_fd, &offset) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- if (ftruncate(f->fd, offset) == -1) {
- php_error(E_WARNING, "%s(): couldn't truncate %d to %d bytes: %s",
- get_active_function_name(TSRMLS_C), f->fd, offset, strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#define ADD_FIELD(f, v) add_assoc_long_ex(return_value, (f), sizeof(f), v);
-
-/* {{{ proto array dio_stat(resource fd)
- Get stat information about the file descriptor fd */
-PHP_FUNCTION(dio_stat)
-{
- zval *r_fd;
- php_fd_t *f;
- struct stat s;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- if (fstat(f->fd, &s) == -1) {
- php_error(E_WARNING, "%s(): cannot stat %d: %s",
- get_active_function_name(TSRMLS_C), f->fd, strerror(errno));
- RETURN_FALSE;
- }
-
- array_init(return_value);
- ADD_FIELD("device", s.st_dev);
- ADD_FIELD("inode", s.st_ino);
- ADD_FIELD("mode", s.st_mode);
- ADD_FIELD("nlink", s.st_nlink);
- ADD_FIELD("uid", s.st_uid);
- ADD_FIELD("gid", s.st_gid);
- ADD_FIELD("device_type", s.st_rdev);
- ADD_FIELD("size", s.st_size);
- ADD_FIELD("block_size", s.st_blksize);
- ADD_FIELD("blocks", s.st_blocks);
- ADD_FIELD("atime", s.st_atime);
- ADD_FIELD("mtime", s.st_mtime);
- ADD_FIELD("ctime", s.st_ctime);
-}
-/* }}} */
-
-/* {{{ proto int dio_seek(resource fd, int pos, int whence)
- Seek to pos on fd from whence */
-PHP_FUNCTION(dio_seek)
-{
- zval *r_fd;
- php_fd_t *f;
- off_t offset;
- int whence = SEEK_SET;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|l", &r_fd, &offset, &whence) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- RETURN_LONG(lseek(f->fd, offset, whence));
-}
-/* }}} */
-
-/* {{{ proto mixed dio_fcntl(resource fd, int cmd[, mixed arg])
- Perform a c library fcntl on fd */
-PHP_FUNCTION(dio_fcntl)
-{
- zval *r_fd;
- zval *arg = NULL;
- php_fd_t *f;
- int cmd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &r_fd, &cmd, &arg) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- switch (cmd) {
- case F_SETLK:
- case F_SETLKW: {
- zval **element;
- struct flock lk = {0};
- HashTable *fh;
-
- if (!arg) {
- php_error(E_WARNING, "%s() expects argument 3 to be array or int, none given",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- if (Z_TYPE_P(arg) == IS_ARRAY) {
- fh = HASH_OF(arg);
- if (zend_hash_find(fh, "start", 5, (void **) &element) == FAILURE) {
- lk.l_start = 0;
- }
- else {
- lk.l_start = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "length", 6, (void **) &element) == FAILURE) {
- lk.l_len = 0;
- }
- else {
- lk.l_len = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "whence", 6, (void **) &element) == FAILURE) {
- lk.l_whence = 0;
- }
- else {
- lk.l_whence = SEEK_SET;
- }
-
- if (zend_hash_find(fh, "type", 6, (void **) &element) == FAILURE) {
- lk.l_type = 0;
- }
- else {
- lk.l_type = Z_LVAL_PP(element);
- }
- } else if (Z_TYPE_P(arg) == IS_LONG) {
- lk.l_start = 0;
- lk.l_len = 0;
- lk.l_whence = SEEK_SET;
- lk.l_type = Z_LVAL_P(arg);
- } else {
- php_error(E_WARNING, "%s() expects argument 3 to be array or int, %s given",
- get_active_function_name(TSRMLS_C), zend_zval_type_name(arg));
- RETURN_FALSE;
- }
-
- RETURN_LONG(fcntl(f->fd, cmd, &lk));
- break;
- }
- case F_GETLK: {
- struct flock lk = {0};
-
- fcntl(f->fd, cmd, &lk);
-
- array_init(return_value);
- add_assoc_long(return_value, "type", lk.l_type);
- add_assoc_long(return_value, "whence", lk.l_whence);
- add_assoc_long(return_value, "start", lk.l_start);
- add_assoc_long(return_value, "length", lk.l_len);
- add_assoc_long(return_value, "pid", lk.l_pid);
-
- break;
- }
- case F_DUPFD: {
- php_fd_t *new_f;
-
- if (!arg || Z_TYPE_P(arg) != IS_LONG) {
- php_error(E_WARNING, "%s() expects argument 3 to be int",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- new_php_fd(&new_f, fcntl(f->fd, cmd, Z_LVAL_P(arg)));
- ZEND_REGISTER_RESOURCE(return_value, new_f, le_fd);
- break;
- }
- default:
- if (!arg || Z_TYPE_P(arg) != IS_LONG) {
- php_error(E_WARNING, "%s() expects argument 3 to be int",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- RETURN_LONG(fcntl(f->fd, cmd, Z_LVAL_P(arg)));
- }
-}
-/* }}} */
-
-/* {{{ proto void dio_close(resource fd)
- Close the file descriptor given by fd */
-PHP_FUNCTION(dio_close)
-{
- zval *r_fd;
- php_fd_t *f;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- zend_list_delete(Z_LVAL_P(r_fd));
-}
-/* }}} */
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: sw=4 ts=4 noet
- */
diff --git a/ext/dio/php_dio.h b/ext/dio/php_dio.h
deleted file mode 100644
index 39408c655c..0000000000
--- a/ext/dio/php_dio.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_DIO_H
-#define PHP_DIO_H
-
-extern zend_module_entry dio_module_entry;
-#define phpext_dio_ptr &dio_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_DIO_API __declspec(dllexport)
-#else
-#define PHP_DIO_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(dio);
-PHP_MSHUTDOWN_FUNCTION(dio);
-PHP_RINIT_FUNCTION(dio);
-PHP_RSHUTDOWN_FUNCTION(dio);
-PHP_MINFO_FUNCTION(dio);
-
-PHP_FUNCTION(dio_open);
-PHP_FUNCTION(dio_truncate);
-PHP_FUNCTION(dio_stat);
-PHP_FUNCTION(dio_seek);
-PHP_FUNCTION(dio_read);
-PHP_FUNCTION(dio_write);
-PHP_FUNCTION(dio_fcntl);
-PHP_FUNCTION(dio_close);
-
-typedef struct {
- int fd;
-} php_fd_t;
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/dio/tests/001.phpt b/ext/dio/tests/001.phpt
deleted file mode 100644
index d527e1a961..0000000000
--- a/ext/dio/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for dio presence
---SKIPIF--
-<?php if (!extension_loaded("dio")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "dio extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-dio extension is available \ No newline at end of file
diff --git a/ext/domxml/CREDITS b/ext/domxml/CREDITS
deleted file mode 100644
index 368d09d4a5..0000000000
--- a/ext/domxml/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-domxml
-Uwe Steinmann
diff --git a/ext/domxml/EXPERIMENTAL b/ext/domxml/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/domxml/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/domxml/TODO b/ext/domxml/TODO
deleted file mode 100644
index f379aaaf90..0000000000
--- a/ext/domxml/TODO
+++ /dev/null
@@ -1,17 +0,0 @@
-1) Implement the following list entries and thier destructors:
- le_domxmldoctypep
- le_domxmldtdp
- le_domxmlcdatap
- le_domxmlpip
- le_domxmlcommentp
- le_domxmlnotationp
- le_domxmlentityrefp
-
-2) Use ZEND_FETCH_RESOURCE() macros instead of custom functions.
-3) Implement those classes we really want, kill all of the rest.
-4) Remove debug code (many calls to fprintf()).
-5) Make 1st arg always be the object. This is currently half-and-half, or so.
-6) Take a hard look at startup/shutdown code. This is really running slower than
- it ought to be.
-7) Fix the many, many memory leaks.
-8) Modify new_child to allow creation of attribute, cdata, dtd, etc nodes.
diff --git a/ext/domxml/config.m4 b/ext/domxml/config.m4
deleted file mode 100644
index 9cc219adb2..0000000000
--- a/ext/domxml/config.m4
+++ /dev/null
@@ -1,193 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_DOM_CHECK_VERSION,[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$DOMXML_DIR/include$DOMXML_DIR_ADD
- AC_MSG_CHECKING(for libxml version)
- AC_EGREP_CPP(yes,[
- #include <libxml/xmlversion.h>
- #if LIBXML_VERSION >= 20414
- yes
- #endif
- ],[
- AC_MSG_RESULT(>= 2.4.14)
- ],[
- AC_MSG_ERROR(libxml version 2.4.14 or greater required.)
- ])
- CPPFLAGS=$old_CPPFLAGS
-])
-
-PHP_ARG_WITH(dom, for DOM support,
-[ --with-dom[=DIR] Include DOM support (requires libxml >= 2.4.14).
- DIR is the libxml install directory.])
-
-if test "$PHP_DOM" != "no"; then
-
- DOMXML_DIR_ADD=""
- if test -r $PHP_DOM/include/libxml2/libxml/tree.h; then
- DOMXML_DIR=$PHP_DOM
- DOMXML_DIR_ADD="/libxml2"
- elif test -r $PHP_DOM/include/libxml/tree.h; then
- DOMXML_DIR=$PHP_DOM
- else
- for i in /usr/local /usr; do
- test -r $i/include/libxml/tree.h && DOMXML_DIR=$i
- test -r $i/include/libxml2/libxml/tree.h && DOMXML_DIR=$i && DOMXML_DIR_ADD="/libxml2"
- done
- fi
-
- if test -z "$DOMXML_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libxml >= 2.4.14 distribution)
- fi
-
- PHP_DOM_CHECK_VERSION
-
- if test -f $DOMXML_DIR/lib/libxml2.a -o -f $DOMXML_DIR/lib/libxml2.$SHLIB_SUFFIX_NAME ; then
- DOM_LIBNAME=xml2
- else
- DOM_LIBNAME=xml
- fi
-
- XML2_CONFIG=$DOMXML_DIR/bin/xml2-config
-
- if test -x $XML2_CONFIG; then
- DOM_LIBS=`$XML2_CONFIG --libs`
- PHP_EVAL_LIBLINE($DOM_LIBS, DOMXML_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH($DOM_LIBNAME, $DOMXML_DIR/lib, DOMXML_SHARED_LIBADD)
- fi
-
- PHP_ADD_INCLUDE($DOMXML_DIR/include$DOMXML_DIR_ADD)
-
- if test "$PHP_ZLIB_DIR" = "no"; then
- AC_MSG_ERROR(DOMXML requires ZLIB. Use --with-zlib-dir=<DIR>)
- else
- PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR/lib, DOMXML_SHARED_LIBADD)
- fi
-
- AC_DEFINE(HAVE_DOMXML,1,[ ])
- PHP_NEW_EXTENSION(domxml, php_domxml.c, $ext_shared)
- PHP_SUBST(DOMXML_SHARED_LIBADD)
-fi
-
-AC_DEFUN(PHP_DOM_XSLT_CHECK_VERSION,[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$DOMXSLT_DIR/include
- AC_MSG_CHECKING(for libxslt version)
- AC_EGREP_CPP(yes,[
- #include <libxslt/xsltconfig.h>
- #if LIBXSLT_VERSION >= 10003
- yes
- #endif
- ],[
- AC_MSG_RESULT(>= 1.0.3)
- ],[
- AC_MSG_ERROR(libxslt version 1.0.3 or greater required.)
- ])
- CPPFLAGS=$old_CPPFLAGS
-])
-
-AC_DEFUN(PHP_DOM_EXSLT_CHECK_VERSION,[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$DOMEXSLT_DIR/include
- AC_MSG_CHECKING(for libexslt version)
- AC_EGREP_CPP(yes,[
- #include <libexslt/exsltconfig.h>
- #if LIBEXSLT_VERSION >= 600
- yes
- #endif
- ],[
- AC_MSG_RESULT(>= 1.0.3)
- ],[
- AC_MSG_ERROR(libxslt version 1.0.3 or greater required.)
- ])
- CPPFLAGS=$old_CPPFLAGS
-])
-
-PHP_ARG_WITH(dom-xslt, for DOM XSLT support,
-[ --with-dom-xslt[=DIR] Include DOM XSLT support (requires libxslt >= 1.0.3).
- DIR is the libxslt install directory.])
-
-PHP_ARG_WITH(dom-exslt, for DOM EXSLT support,
-[ --with-dom-exslt[=DIR] Include DOM EXSLT support (requires libxslt >= 1.0.3).
- DIR is the libexslt install directory.])
-
-if test "$PHP_DOM_XSLT" != "no"; then
-
- if test -r $PHP_DOM_XSLT/include/libxslt/transform.h; then
- DOMXSLT_DIR=$PHP_DOM_XSLT
- else
- for i in /usr/local /usr; do
- test -r $i/include/libxslt/transform.h && DOMXSLT_DIR=$i
- done
- fi
-
- if test -z "$DOMXSLT_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libxslt >= 1.0.3 distribution)
- fi
-
- PHP_DOM_XSLT_CHECK_VERSION
-
- PHP_ADD_LIBRARY_WITH_PATH(xslt, $DOMXSLT_DIR/lib, DOMXML_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($DOMXSLT_DIR/include)
-
- if test "$PHP_DOM" = "no"; then
- AC_MSG_ERROR(DOMXSLT requires DOMXML. Use --with-dom=<DIR>)
- fi
-
- if test -f $DOMXML_DIR/lib/libxml2.a -o -f $DOMXML_DIR/lib/libxml2.$SHLIB_SUFFIX_NAME ; then
- DOM_LIBNAME=xml2
- else
- DOM_LIBNAME=xml
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH($DOM_LIBNAME, $DOMXML_DIR/lib, DOMXML_SHARED_LIBADD)
- PHP_ADD_INCLUDE($DOMXML_DIR/include$DOMXML_DIR_ADD)
-
- if test -f $DOMXML_DIR/lib/libxsltbreakpoint.a -o -f $DOMXML_DIR/lib/libxsltbreakpoint.$SHLIB_SUFFIX_NAME ; then
- PHP_ADD_LIBRARY_WITH_PATH(xsltbreakpoint, $DOMXML_DIR/lib, DOMXML_SHARED_LIBADD)
- fi
-
- AC_DEFINE(HAVE_DOMXSLT,1,[ ])
-
- PHP_SUBST(DOMXML_SHARED_LIBADD)
-fi
-
-if test "$PHP_DOM_EXSLT" != "no"; then
- if test "$PHP_DOM" = "no"; then
- AC_MSG_ERROR(DOMEXSLT requires DOMXML. Use --with-dom=<DIR>)
- fi
-
- if test "$PHP_DOM_XSLT" = "no"; then
- AC_MSG_ERROR(DOMEXSLT requires DOMXSLT. Use --with-dom-xslt=<DIR>)
- fi
-
- if test -r $PHP_DOM_EXSLT/include/libexslt/exslt.h; then
- DOMEXSLT_DIR=$PHP_DOM_EXSLT
- else
- for i in /usr/local /usr; do
- test -r $i/include/libexslt/exslt.h && DOMEXSLT_DIR=$i
- done
- fi
-
- if test -z "$DOMEXSLT_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libxslt >= 1.0.3 distribution)
- fi
-
- PHP_DOM_EXSLT_CHECK_VERSION
-
- PHP_ADD_LIBRARY_WITH_PATH(exslt, $DOMEXSLT_DIR/lib, DOMXML_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($DOMEXSLT_DIR/include)
-
- AC_DEFINE(HAVE_DOMEXSLT,1,[ ])
-
- PHP_SUBST(DOMXML_SHARED_LIBADD)
-
-fi
diff --git a/ext/domxml/domxml.dsp b/ext/domxml/domxml.dsp
deleted file mode 100644
index 40768294e9..0000000000
--- a/ext/domxml/domxml.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="domxml" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=domxml - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "domxml.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "domxml.mak" CFG="domxml - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "domxml - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "domxml - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "domxml - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOMXML" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DOMXML_EXPORTS" /D "COMPILE_DL_DOMXML" /D ZTS=1 /D HAVE_DOMXML=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 libxml2.lib wsock32.lib php4ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_domxml.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "domxml - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOMXML" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DOMXML_EXPORTS" /D "COMPILE_DL_DOMXML" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DOMXML=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 libxml2.lib php4ts_debug.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_domxml.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "domxml - Win32 Release_TS"
-# Name "domxml - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_domxml.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_domxml.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c
deleted file mode 100644
index b23ca5508e..0000000000
--- a/ext/domxml/php_domxml.c
+++ /dev/null
@@ -1,4369 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann <steinm@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* TODO
- * - Support Notation Nodes
- * */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_domxml.h"
-
-#if HAVE_DOMXML
-#include "ext/standard/info.h"
-#define PHP_XPATH 1
-#define PHP_XPTR 2
-/* DOMXML API_VERSION, please bump it up, if you change anything in the API
- therefore it's easier for the script-programmers to check, what's working how
- Can be checked with phpversion("domxml");
-*/
-#define DOMXML_API_VERSION "20020516"
-
-/* General macros used by domxml */
-#define DOMXML_DOMOBJ_NEW(zval, obj, ret) if (NULL == (zval = php_domobject_new(obj, ret TSRMLS_CC))) { \
- php_error(E_WARNING, "%s(): cannot create required DOM object", \
- get_active_function_name(TSRMLS_C)); \
- RETURN_FALSE; \
- }
-
-#define DOMXML_RET_ZVAL(zval) SEPARATE_ZVAL(&zval); \
- *return_value = *zval; \
- FREE_ZVAL(zval);
-
-#define DOMXML_RET_OBJ(zval, obj, ret) DOMXML_DOMOBJ_NEW(zval, obj, ret); \
- DOMXML_RET_ZVAL(zval);
-
-#define DOMXML_GET_THIS(zval) if (NULL == (zval = getThis())) { \
- php_error(E_WARNING, "%s(): underlying object missing", \
- get_active_function_name(TSRMLS_C)); \
- RETURN_FALSE; \
- }
-
-#define DOMXML_GET_OBJ(ret, zval, le) if (NULL == (ret = php_dom_get_object(zval, le, 0 TSRMLS_CC))) { \
- php_error(E_WARNING, "%s(): cannot fetch DOM object", \
- get_active_function_name(TSRMLS_C)); \
- RETURN_FALSE; \
- }
-
-#define DOMXML_GET_THIS_OBJ(ret, zval, le) DOMXML_GET_THIS(zval); \
- DOMXML_GET_OBJ(ret, zval, le);
-
-#define DOMXML_NO_ARGS() if (ZEND_NUM_ARGS() != 0) { \
- php_error(E_WARNING, "%s() expects exactly 0 parameters, %d given", \
- get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS()); \
- return; \
- }
-
-#define DOMXML_NOT_IMPLEMENTED() php_error(E_WARNING, "%s() not yet implemented", \
- get_active_function_name(TSRMLS_C)); \
- return;
-
-/* WARNING: The number of parameters is actually the
- * number of passed variables to zend_parse_parameters(),
- * *NOT* the number of parameters expected by the PHP function. */
-#define DOMXML_PARAM_NONE(ret, zval, le) if (NULL == (zval = getThis())) { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zval) == FAILURE) { \
- return; \
- } \
- } \
- DOMXML_GET_OBJ(ret, zval, le);
-
-#define DOMXML_PARAM_ONE(ret, zval, le, s, p1) if (NULL == (zval = getThis())) { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1) == FAILURE) { \
- return; \
- } \
- } else { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1) == FAILURE) { \
- return; \
- } \
- } \
- DOMXML_GET_OBJ(ret, zval, le);
-
-#define DOMXML_PARAM_TWO(ret, zval, le, s, p1, p2) if (NULL == (zval = getThis())) { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2) == FAILURE) { \
- return; \
- } \
- } else { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2) == FAILURE) { \
- return; \
- } \
- } \
- DOMXML_GET_OBJ(ret, zval, le);
-
-#define DOMXML_PARAM_THREE(ret, zval, le, s, p1, p2, p3) if (NULL == (zval = getThis())) { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2, p3) == FAILURE) { \
- return; \
- } \
- } else { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2, p3) == FAILURE) { \
- return; \
- } \
- } \
- DOMXML_GET_OBJ(ret, zval, le);
-
-
-#define DOMXML_PARAM_FOUR(ret, zval, le, s, p1, p2, p3, p4) if (NULL == (zval = getThis())) { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2, p3, p4) == FAILURE) { \
- return; \
- } \
- } else { \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2, p3, p4) == FAILURE) { \
- return; \
- } \
- } \
- DOMXML_GET_OBJ(ret, zval, le);
-
-#define DOMXML_LOAD_PARSING 0
-#define DOMXML_LOAD_VALIDATING 1
-#define DOMXML_LOAD_RECOVERING 2
-#define DOMXML_LOAD_SUBSTITUTE_ENTITIES 4
-#define DOMXML_LOAD_COMPLETE_ATTRS 8
-
-static int le_domxmldocp;
-static int le_domxmldoctypep;
-static int le_domxmldtdp;
-static int le_domxmlnodep;
-static int le_domxmlelementp;
-static int le_domxmlattrp;
-static int le_domxmlcdatap;
-static int le_domxmltextp;
-static int le_domxmlpip;
-static int le_domxmlcommentp;
-static int le_domxmlnotationp;
-static int le_domxmlparserp;
-/*static int le_domxmlentityp;*/
-static int le_domxmlentityrefp;
-/*static int le_domxmlnsp;*/
-
-
-#if HAVE_DOMXSLT
-static int le_domxsltstylesheetp;
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-static int le_xpathctxp;
-static int le_xpathobjectp;
-#endif
-
-zend_class_entry *domxmldoc_class_entry;
-zend_class_entry *domxmldoctype_class_entry;
-zend_class_entry *domxmlelement_class_entry;
-zend_class_entry *domxmldtd_class_entry;
-zend_class_entry *domxmlnode_class_entry;
-zend_class_entry *domxmlattr_class_entry;
-zend_class_entry *domxmlcdata_class_entry;
-zend_class_entry *domxmltext_class_entry;
-zend_class_entry *domxmlpi_class_entry;
-zend_class_entry *domxmlcomment_class_entry;
-zend_class_entry *domxmlnotation_class_entry;
-zend_class_entry *domxmlentity_class_entry;
-zend_class_entry *domxmlentityref_class_entry;
-zend_class_entry *domxmlns_class_entry;
-zend_class_entry *domxmlparser_class_entry;
-#if defined(LIBXML_XPATH_ENABLED)
-zend_class_entry *xpathctx_class_entry;
-zend_class_entry *xpathobject_class_entry;
-#endif
-#if HAVE_DOMXSLT
-zend_class_entry *domxsltstylesheet_class_entry;
-#endif
-
-
-static int node_attributes(zval **attributes, xmlNode *nodep TSRMLS_DC);
-static int node_children(zval **children, xmlNode *nodep TSRMLS_DC);
-
-static zend_function_entry domxml_functions[] = {
- PHP_FE(domxml_version, NULL)
- PHP_FE(xmldoc, NULL)
- PHP_FALIAS(domxml_open_mem, xmldoc, NULL)
- PHP_FE(xmldocfile, NULL)
- PHP_FALIAS(domxml_open_file, xmldocfile, NULL)
-#if defined(LIBXML_HTML_ENABLED)
- PHP_FE(html_doc, NULL)
- PHP_FE(html_doc_file, NULL)
-#endif
- PHP_FE(domxml_xmltree, NULL)
- PHP_FALIAS(xmltree, domxml_xmltree, NULL)
- PHP_FE(domxml_substitute_entities_default, NULL)
- PHP_FE(domxml_doc_document_element, NULL)
- PHP_FE(domxml_doc_add_root, NULL)
- PHP_FE(domxml_doc_set_root, NULL)
- PHP_FE(domxml_dump_mem, NULL)
- PHP_FE(domxml_dump_mem_file, NULL)
- PHP_FE(domxml_dump_node, NULL)
-#if defined(LIBXML_HTML_ENABLED)
- PHP_FE(domxml_html_dump_mem, NULL)
-#endif
- PHP_FE(domxml_node_attributes, NULL)
- PHP_FE(domxml_elem_get_attribute, NULL)
- PHP_FE(domxml_elem_set_attribute, NULL)
- PHP_FE(domxml_node_children, NULL)
- PHP_FE(domxml_node_has_attributes, NULL)
- PHP_FE(domxml_node_new_child, NULL)
- PHP_FE(domxml_node, NULL)
- PHP_FE(domxml_node_unlink_node, NULL)
- PHP_FE(domxml_node_set_content, NULL)
- PHP_FE(domxml_node_get_content, NULL)
- PHP_FE(domxml_new_xmldoc, NULL)
- PHP_FALIAS(domxml_new_doc, domxml_new_xmldoc, NULL)
- PHP_FE(domxml_parser, NULL)
- PHP_FE(domxml_parser_add_chunk, NULL)
- PHP_FE(domxml_parser_end, NULL)
-#if defined(LIBXML_XPATH_ENABLED)
- PHP_FE(xpath_new_context, NULL)
- PHP_FE(xpath_eval, NULL)
- PHP_FE(xpath_eval_expression, NULL)
- PHP_FE(xpath_register_ns, NULL)
- PHP_FE(domxml_doc_get_elements_by_tagname, NULL)
- PHP_FE(domxml_doc_get_element_by_id, NULL)
-#endif
-#if defined(LIBXML_XPTR_ENABLED)
- PHP_FE(xptr_new_context, NULL)
- PHP_FE(xptr_eval, NULL)
-#endif
-#if HAVE_DOMXSLT
- PHP_FE(domxml_xslt_version, NULL)
- PHP_FE(domxml_xslt_stylesheet, NULL)
- PHP_FE(domxml_xslt_stylesheet_doc, NULL)
- PHP_FE(domxml_xslt_stylesheet_file, NULL)
- PHP_FE(domxml_xslt_process, NULL)
-#endif
-
- PHP_FALIAS(domxml_add_root, domxml_doc_add_root, NULL)
- PHP_FALIAS(domxml_doc_get_root, domxml_doc_document_element, NULL)
- PHP_FALIAS(domxml_root, domxml_doc_document_element, NULL)
- PHP_FALIAS(domxml_attributes, domxml_node_attributes, NULL)
- PHP_FALIAS(domxml_get_attribute, domxml_elem_get_attribute, NULL)
- PHP_FALIAS(domxml_getattr, domxml_elem_get_attribute, NULL)
- PHP_FALIAS(domxml_set_attribute, domxml_elem_set_attribute, NULL)
- PHP_FALIAS(domxml_setattr, domxml_elem_set_attribute, NULL)
- PHP_FALIAS(domxml_children, domxml_node_children, NULL)
- PHP_FALIAS(domxml_new_child, domxml_node_new_child, NULL)
- PHP_FALIAS(domxml_unlink_node, domxml_node_unlink_node, NULL)
- PHP_FALIAS(set_content, domxml_node_set_content, NULL)
- PHP_FALIAS(new_xmldoc, domxml_new_xmldoc, NULL)
- PHP_FALIAS(domxml_dumpmem, domxml_dump_mem, NULL)
-
- {NULL, NULL, NULL}
-};
-
-
-static function_entry php_domxmldoc_class_functions[] = {
- PHP_FALIAS(doctype, domxml_doc_doctype, NULL)
- PHP_FALIAS(implementation, domxml_doc_implementation, NULL)
- PHP_FALIAS(document_element, domxml_doc_document_element, NULL)
- PHP_FALIAS(create_element, domxml_doc_create_element, NULL)
- PHP_FALIAS(create_text_node, domxml_doc_create_text_node, NULL)
- PHP_FALIAS(create_comment, domxml_doc_create_comment, NULL)
- PHP_FALIAS(create_attribute, domxml_doc_create_attribute, NULL)
- PHP_FALIAS(create_cdata_section, domxml_doc_create_cdata_section, NULL)
- PHP_FALIAS(create_entity_reference, domxml_doc_create_entity_reference, NULL)
- PHP_FALIAS(create_processing_instruction, domxml_doc_create_processing_instruction, NULL)
- PHP_FALIAS(get_elements_by_tagname, domxml_doc_get_elements_by_tagname, NULL)
- PHP_FALIAS(get_element_by_id, domxml_doc_get_element_by_id, NULL)
- /* Everything below this comment is none DOM compliant */
- /* children is deprecated because it is inherited from DomNode */
-/* PHP_FALIAS(children, domxml_node_children, NULL) */
- PHP_FALIAS(add_root, domxml_doc_add_root, NULL)
- PHP_FALIAS(set_root, domxml_doc_set_root, NULL)
- PHP_FALIAS(get_root, domxml_doc_document_element, NULL)
- PHP_FALIAS(root, domxml_doc_document_element, NULL)
- PHP_FALIAS(imported_node, domxml_doc_imported_node, NULL)
- PHP_FALIAS(dtd, domxml_intdtd, NULL)
- PHP_FALIAS(ids, domxml_doc_ids, NULL)
- PHP_FALIAS(dumpmem, domxml_dump_mem, NULL)
- PHP_FALIAS(dump_mem, domxml_dump_mem, NULL)
- PHP_FALIAS(dump_mem_file, domxml_dump_mem_file, NULL)
- PHP_FALIAS(dump_file, domxml_dump_mem_file, NULL)
-#if defined(LIBXML_HTML_ENABLED)
- PHP_FALIAS(html_dump_mem, domxml_html_dump_mem, NULL)
-#endif
-#if defined(LIBXML_XPATH_ENABLED)
- PHP_FALIAS(xpath_init, xpath_init, NULL)
- PHP_FALIAS(xpath_new_context, xpath_new_context, NULL)
- PHP_FALIAS(xptr_new_context, xptr_new_context, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-static function_entry php_domxmlparser_class_functions[] = {
- PHP_FALIAS(add_chunk, domxml_parser_add_chunk, NULL)
- PHP_FALIAS(end, domxml_parser_end, NULL)
- PHP_FALIAS(set_keep_blanks, domxml_parser_set_keep_blanks, NULL)
- {NULL, NULL, NULL}
-};
-
-static function_entry php_domxmldoctype_class_functions[] = {
- PHP_FALIAS(name, domxml_doctype_name, NULL)
- PHP_FALIAS(entities, domxml_doctype_entities, NULL)
- PHP_FALIAS(notations, domxml_doctype_notations, NULL)
- PHP_FALIAS(system_id, domxml_doctype_system_id, NULL)
- PHP_FALIAS(public_id, domxml_doctype_public_id, NULL)
-/*
- PHP_FALIAS(internal_subset, domxml_doctype_internal_subset, NULL)
-*/
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmldtd_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlnode_class_functions[] = {
- PHP_FALIAS(domnode, domxml_node, NULL)
- PHP_FALIAS(node_name, domxml_node_name, NULL)
- PHP_FALIAS(node_type, domxml_node_type, NULL)
- PHP_FALIAS(node_value, domxml_node_value, NULL)
- PHP_FALIAS(first_child, domxml_node_first_child, NULL)
- PHP_FALIAS(last_child, domxml_node_last_child, NULL)
- PHP_FALIAS(children, domxml_node_children, NULL)
- PHP_FALIAS(child_nodes, domxml_node_children, NULL)
- PHP_FALIAS(previous_sibling, domxml_node_previous_sibling, NULL)
- PHP_FALIAS(next_sibling, domxml_node_next_sibling, NULL)
- PHP_FALIAS(has_child_nodes, domxml_node_has_child_nodes, NULL)
- PHP_FALIAS(parent, domxml_node_parent, NULL)
- PHP_FALIAS(parent_node, domxml_node_parent, NULL)
- PHP_FALIAS(insert_before, domxml_node_insert_before, NULL)
- PHP_FALIAS(append_child, domxml_node_append_child, NULL)
- PHP_FALIAS(remove_child, domxml_node_remove_child, NULL)
- PHP_FALIAS(replace_child, domxml_node_replace_child, NULL)
- PHP_FALIAS(owner_document, domxml_node_owner_document, NULL)
- PHP_FALIAS(new_child, domxml_node_new_child, NULL)
- PHP_FALIAS(attributes, domxml_node_attributes, NULL)
- PHP_FALIAS(has_attributes, domxml_node_has_attributes, NULL)
- PHP_FALIAS(prefix, domxml_node_prefix, NULL)
- PHP_FALIAS(clone_node, domxml_clone_node, NULL)
-/* Non DOM functions start here */
- PHP_FALIAS(add_child, domxml_node_append_child, NULL)
- PHP_FALIAS(append_sibling, domxml_node_append_sibling, NULL)
- PHP_FALIAS(node, domxml_node, NULL)
- PHP_FALIAS(unlink, domxml_node_unlink_node, NULL)
- PHP_FALIAS(unlink_node, domxml_node_unlink_node, NULL)
- PHP_FALIAS(replace_node, domxml_node_replace_node, NULL)
- PHP_FALIAS(set_content, domxml_node_set_content, NULL)
- PHP_FALIAS(get_content, domxml_node_get_content, NULL)
- PHP_FALIAS(text_concat, domxml_node_text_concat, NULL)
- PHP_FALIAS(set_name, domxml_node_set_name, NULL)
- PHP_FALIAS(is_blank_node, domxml_is_blank_node, NULL)
- PHP_FALIAS(dump_node, domxml_dump_node, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlelement_class_functions[] = {
- PHP_FALIAS(domelement, domxml_element, NULL)
- PHP_FALIAS(name, domxml_elem_tagname, NULL)
- PHP_FALIAS(tagname, domxml_elem_tagname, NULL)
- PHP_FALIAS(get_attribute, domxml_elem_get_attribute, NULL)
- PHP_FALIAS(set_attribute, domxml_elem_set_attribute, NULL)
- PHP_FALIAS(remove_attribute, domxml_elem_remove_attribute, NULL)
- PHP_FALIAS(get_attribute_node, domxml_elem_get_attribute_node, NULL)
- PHP_FALIAS(set_attribute_node, domxml_elem_set_attribute_node, NULL)
- PHP_FALIAS(get_elements_by_tagname, domxml_elem_get_elements_by_tagname, NULL)
- PHP_FALIAS(has_attribute, domxml_elem_has_attribute, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlcdata_class_functions[] = {
- PHP_FALIAS(length, domxml_cdata_length, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmltext_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlcomment_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlnotation_class_functions[] = {
- PHP_FALIAS(public_id, domxml_notation_public_id, NULL)
- PHP_FALIAS(system_id, domxml_notation_system_id, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlentityref_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlentity_class_functions[] = {
-/*
- PHP_FALIAS(public_id, domxml_entity_public_id, NULL)
- PHP_FALIAS(system_id, domxml_entity_system_id, NULL)
- PHP_FALIAS(notation_name, domxml_entity_notation_name, NULL)
-*/
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlpi_class_functions[] = {
- PHP_FALIAS(target, domxml_pi_target, NULL)
- PHP_FALIAS(data, domxml_pi_data, NULL)
- {NULL, NULL, NULL}
-};
-
-#if defined(LIBXML_XPATH_ENABLED)
-static zend_function_entry php_xpathctx_class_functions[] = {
- PHP_FALIAS(xpath_eval, xpath_eval, NULL)
- PHP_FALIAS(xpath_eval_expression, xpath_eval_expression, NULL)
- PHP_FALIAS(xpath_register_ns, xpath_register_ns, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_xpathobject_class_functions[] = {
- {NULL, NULL, NULL}
-};
-#endif
-
-static zend_function_entry php_domxmlattr_class_functions[] = {
- PHP_FALIAS(name, domxml_attr_name, NULL)
- PHP_FALIAS(value, domxml_attr_value, NULL)
- PHP_FALIAS(specified, domxml_attr_specified, NULL)
-/*
- PHP_FALIAS(owner_element, domxml_attr_owner_element, NULL)
-*/
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlns_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-#if HAVE_DOMXSLT
-static zend_function_entry php_domxsltstylesheet_class_functions[] = {
-/* TODO: maybe some more methods? */
- PHP_FALIAS(process, domxml_xslt_process, NULL)
- {NULL, NULL, NULL}
-};
-#endif
-
-zend_module_entry domxml_module_entry = {
- STANDARD_MODULE_HEADER,
- "domxml",
- domxml_functions,
- PHP_MINIT(domxml),
- NULL,
- PHP_RINIT(domxml),
- NULL,
- PHP_MINFO(domxml),
- DOMXML_API_VERSION, /* Extension versionnumber */
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DOMXML
-ZEND_GET_MODULE(domxml)
-#endif
-
-
-static void dom_object_set_data(void *obj, zval *wrapper)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Adding %s to hash\n", tmp);
-*/
- ((xmlNodePtr) obj)->_private = wrapper;
-}
-
-
-static zval *dom_object_get_data(void *obj)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Trying getting %s from object ...", tmp);
- if(((xmlNodePtr) obj)->_private)
- fprintf(stderr, " found\n");
- else
- fprintf(stderr, " not found\n");
-*/
- return ((zval *) (((xmlNodePtr) obj)->_private));
-}
-
-
-static inline void node_wrapper_dtor(xmlNodePtr node)
-{
- zval *wrapper;
- int refcount = 0;
- /* FIXME: type check probably unnecessary here? */
- if (!node || Z_TYPE_P(node) == XML_DTD_NODE)
- return;
-
- wrapper = dom_object_get_data(node);
-
- if (wrapper != NULL) {
- refcount = wrapper->refcount;
- zval_ptr_dtor(&wrapper);
- /*only set it to null, if refcount was 1 before, otherwise it has still needed references */
- if (refcount == 1) {
- dom_object_set_data(node, NULL);
- }
- }
-
-}
-
-
-static inline void attr_list_wrapper_dtor(xmlAttrPtr attr)
-{
- while (attr != NULL) {
- node_wrapper_dtor((xmlNodePtr) attr);
- attr = attr->next;
- }
-}
-
-
-static inline void node_list_wrapper_dtor(xmlNodePtr node)
-{
- while (node != NULL) {
- node_list_wrapper_dtor(node->children);
- switch (node->type) {
- /* Skip property freeing for the following types */
- case XML_ATTRIBUTE_DECL:
- case XML_DTD_NODE:
- case XML_ENTITY_DECL:
- break;
- default:
- attr_list_wrapper_dtor(node->properties);
- }
- node_wrapper_dtor(node);
- node = node->next;
- }
-}
-
-static xmlNodeSetPtr php_get_elements_by_tagname(xmlNodePtr n, xmlChar* name)
-{
- xmlNodeSetPtr rv = NULL;
- xmlNodePtr cld = NULL;
-
- if ( n != NULL && name != NULL ) {
- cld = n->children;
- while ( cld != NULL ) {
- if ( xmlStrcmp( name, cld->name ) == 0 ){
- if ( rv == NULL ) {
- rv = xmlXPathNodeSetCreate( cld ) ;
- }
- else {
- xmlXPathNodeSetAdd( rv, cld );
- }
- }
- cld = cld->next;
- }
- }
- return rv;
-}
-
-static void php_free_xml_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xmlDoc *doc = (xmlDoc *) rsrc->ptr;
-
- if (doc) {
- node_list_wrapper_dtor(doc->children);
- node_wrapper_dtor((xmlNodePtr) doc);
- xmlFreeDoc(doc);
- }
-}
-
-
-static void php_free_xml_node(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xmlNodePtr node = (xmlNodePtr) rsrc->ptr;
-
- /* if node has no parent, it will not be freed by php_free_xml_doc, so do it here
- and for all children as well. */
- if (node->parent == NULL) {
- attr_list_wrapper_dtor(node->properties);
- node_list_wrapper_dtor(node->children);
- node_wrapper_dtor(node);
- xmlFreeNode(node);
- } else {
- node_wrapper_dtor(node);
- }
-
-}
-
-
-#if defined(LIBXML_XPATH_ENABLED)
-static void php_free_xpath_context(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xmlXPathContextPtr ctx = (xmlXPathContextPtr) rsrc->ptr;
- if (ctx) {
- if (ctx->user) {
- zval *wrapper = ctx->user;
- zval_ptr_dtor(&wrapper);
- }
- xmlXPathFreeContext(ctx);
- }
-}
-
-static void php_free_xpath_object(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xmlXPathObjectPtr obj = (xmlXPathObjectPtr) rsrc->ptr;
-
- if (obj) {
- if (obj->user) {
- zval *wrapper = obj->user;
- zval_ptr_dtor(&wrapper);
- }
- xmlXPathFreeObject(obj);
- }
-}
-#endif
-
-static void php_free_xml_parser(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xmlParserCtxtPtr parser = (xmlParserCtxtPtr) rsrc->ptr;
-
- if (parser) {
- zval *wrapper = dom_object_get_data(parser);
- zval_ptr_dtor(&wrapper);
- xmlFreeParserCtxt(parser);
- }
-}
-
-
-#if HAVE_DOMXSLT
-static void php_free_xslt_stylesheet(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xsltStylesheetPtr sheet = (xsltStylesheetPtr) rsrc->ptr;
-
- if (sheet) {
- node_wrapper_dtor((xmlNodePtr) sheet);
- xsltFreeStylesheet(sheet);
- }
-}
-
-static void xsltstylesheet_set_data(void *obj, zval *wrapper)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Adding %s to hash\n", tmp);
-*/
- ((xsltStylesheetPtr) obj)->_private = wrapper;
-}
-
-
-static zval *xsltstylesheet_get_data(void *obj)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Trying getting %s from object ...", tmp);
- if(((xmlNodePtr) obj)->_private)
- fprintf(stderr, " found\n");
- else
- fprintf(stderr, " not found\n");
-*/
- return ((zval *) (((xsltStylesheetPtr) obj)->_private));
-}
-
-void *php_xsltstylesheet_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC)
-{
- void *obj;
- zval **handle;
- int type;
-
- if (NULL == wrapper) {
- php_error(E_WARNING, "xsltstylesheet_get_object() invalid wrapper object passed");
- return NULL;
- }
-
- if (Z_TYPE_P(wrapper) != IS_OBJECT) {
- php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) {
- php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) {
- php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- return obj;
-}
-
-static void php_xsltstylesheet_set_object(zval *wrapper, void *obj, int rsrc_type)
-{
- zval *handle, *addr;
-
- MAKE_STD_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);
-
- MAKE_STD_ZVAL(addr);
- Z_TYPE_P(addr) = IS_LONG;
- Z_LVAL_P(addr) = (int) obj;
-
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);
- zval_add_ref(&wrapper);
- xsltstylesheet_set_data(obj, wrapper);
-}
-#endif /* HAVE_DOMXSLT */
-
-
-void *php_xpath_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC)
-{
- void *obj;
- zval **handle;
- int type;
-
- if (NULL == wrapper) {
- php_error(E_WARNING, "php_xpath_get_object() invalid wrapper object passed");
- return NULL;
- }
-
- if (Z_TYPE_P(wrapper) != IS_OBJECT) {
- php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) {
- php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) {
- php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- return obj;
-}
-
-
-static void xpath_object_set_data(void *obj, zval *wrapper)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Adding %s to hash\n", tmp);
-*/
- ((xmlXPathObjectPtr) obj)->user = wrapper;
-}
-
-
-static zval *xpath_object_get_data(void *obj)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Trying getting %s from hash ...", tmp);
- if(((xmlXPathObjectPtr) obj)->user)
- fprintf(stderr, " found\n");
- else
- fprintf(stderr, " not found\n");
-*/
- return ((zval *) (((xmlXPathObjectPtr) obj)->user));
-}
-
-
-static void php_xpath_set_object(zval *wrapper, void *obj, int rsrc_type)
-{
- zval *handle, *addr;
-
- MAKE_STD_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);
-
- MAKE_STD_ZVAL(addr);
- Z_TYPE_P(addr) = IS_LONG;
- Z_LVAL_P(addr) = (int) obj;
-
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);
- zval_add_ref(&wrapper);
- xpath_object_set_data(obj, wrapper);
-}
-
-static zval *php_xpathobject_new(xmlXPathObjectPtr obj, int *found TSRMLS_DC)
-{
- zval *wrapper;
-
- *found = 0;
-
- if (!obj) {
- MAKE_STD_ZVAL(wrapper);
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- if ((wrapper = (zval *) xpath_object_get_data((void *) obj))) {
- zval_add_ref(&wrapper);
- *found = 1;
- return wrapper;
- }
-
- MAKE_STD_ZVAL(wrapper);
- object_init_ex(wrapper, xpathobject_class_entry);
-
-/*
- rsrc_type = le_xpathobjectp;
- php_xpath_set_object(wrapper, (void *) obj, rsrc_type);
-*/
-
- php_xpath_set_object(wrapper, (void *) obj, le_xpathobjectp);
-
- return (wrapper);
-}
-
-void *php_xpath_get_context(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC)
-{
- void *obj;
- zval **handle;
- int type;
-
- if (NULL == wrapper) {
- php_error(E_WARNING, "php_xpath_get_context() invalid wrapper object passed");
- return NULL;
- }
-
- if (Z_TYPE_P(wrapper) != IS_OBJECT) {
- php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) ==
- FAILURE) {
- php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) {
- php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- return obj;
-}
-
-static void xpath_context_set_data(void *obj, zval *wrapper)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Adding %s to hash\n", tmp);
-*/
- ((xmlXPathContextPtr) obj)->user = (void *) wrapper;
-}
-
-static zval *xpath_context_get_data(void *obj)
-{
-/*
- char tmp[20];
- sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Trying getting %s from hash ...", tmp);
- if(((xmlXPathContextPtr) obj)->user)
- fprintf(stderr, " found\n");
- else
- fprintf(stderr, " not found\n");
-*/
- return ((zval *) (((xmlXPathContextPtr) obj)->user));
-}
-
-static void php_xpath_set_context(zval *wrapper, void *obj, int rsrc_type)
-{
- zval *handle, *addr;
-
- MAKE_STD_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);
-
- MAKE_STD_ZVAL(addr);
- Z_TYPE_P(addr) = IS_LONG;
- Z_LVAL_P(addr) = (int) obj;
-
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);
- zval_add_ref(&wrapper);
- xpath_context_set_data(obj, wrapper);
-}
-
-static zval *php_xpathcontext_new(xmlXPathContextPtr obj, int *found TSRMLS_DC)
-{
- zval *wrapper;
- int rsrc_type;
-
- *found = 0;
-
- if (!obj) {
- MAKE_STD_ZVAL(wrapper);
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- if ((wrapper = (zval *) xpath_context_get_data((void *) obj))) {
- zval_add_ref(&wrapper);
- *found = 1;
- return wrapper;
- }
-
- MAKE_STD_ZVAL(wrapper);
-/*
- fprintf(stderr, "Adding new XPath Context\n");
-*/
- object_init_ex(wrapper, xpathctx_class_entry);
- rsrc_type = le_xpathctxp;
- php_xpath_set_context(wrapper, (void *) obj, rsrc_type);
-
- return (wrapper);
-}
-
-/* helper functions for xmlparser stuff */
-static void xmlparser_set_data(void *obj, zval *wrapper)
-{
- ((xmlParserCtxtPtr) obj)->_private = wrapper;
-}
-
-
-static void php_xmlparser_set_object(zval *wrapper, void *obj, int rsrc_type)
-{
- zval *handle, *addr;
-
- MAKE_STD_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);
-
- MAKE_STD_ZVAL(addr);
- Z_TYPE_P(addr) = IS_LONG;
- Z_LVAL_P(addr) = (int) obj;
-
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);
- zval_add_ref(&wrapper);
- xmlparser_set_data(obj, wrapper);
-}
-
-
-static zval *php_xmlparser_new(xmlParserCtxtPtr obj, int *found TSRMLS_DC)
-{
- zval *wrapper;
- int rsrc_type;
-
- *found = 0;
-
- if (!obj) {
- MAKE_STD_ZVAL(wrapper);
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- MAKE_STD_ZVAL(wrapper);
- object_init_ex(wrapper, domxmlparser_class_entry);
- rsrc_type = le_domxmlparserp;
- php_xmlparser_set_object(wrapper, (void *) obj, rsrc_type);
-
- return (wrapper);
-}
-
-
-void *php_dom_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC)
-{
- void *obj;
- zval **handle;
- int type;
-
- if (NULL == wrapper) {
- php_error(E_WARNING, "php_dom_get_object() invalid wrapper object passed");
- return NULL;
- }
-
- if (Z_TYPE_P(wrapper) != IS_OBJECT) {
- php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) {
- php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
-
-/* The following test should be replaced with search in all parents */
- if (!obj) { /* || ((type != rsrc_type1) && (type != rsrc_type2))) { */
- php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- return obj;
-}
-
-
-static void php_dom_set_object(zval *wrapper, void *obj, int rsrc_type)
-{
- zval *handle, *addr;
-
- MAKE_STD_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);
-
- MAKE_STD_ZVAL(addr);
- Z_TYPE_P(addr) = IS_LONG;
- Z_LVAL_P(addr) = (int) obj;
-
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);
- zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);
- zval_add_ref(&wrapper);
- dom_object_set_data(obj, wrapper);
-}
-
-
-static zval *php_domobject_new(xmlNodePtr obj, int *found TSRMLS_DC)
-{
- zval *wrapper;
- char *content;
- int rsrc_type;
-
- *found = 0;
-
- if (!obj) {
- MAKE_STD_ZVAL(wrapper);
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- if ((wrapper = (zval *) dom_object_get_data((void *) obj))) {
- zval_add_ref(&wrapper);
- *found = 1;
- return wrapper;
- }
-
- MAKE_STD_ZVAL(wrapper);
-
- switch (Z_TYPE_P(obj)) {
-
- case XML_ELEMENT_NODE:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmlelement_class_entry);
- rsrc_type = le_domxmlelementp;
- add_property_long(wrapper, "type", Z_TYPE_P(nodep));
- add_property_stringl(wrapper, "tagname", (char *) nodep->name, strlen(nodep->name), 1);
- break;
- }
-
- case XML_TEXT_NODE:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmltext_class_entry);
- rsrc_type = le_domxmltextp;
- content = xmlNodeGetContent(nodep);
- add_property_long(wrapper, "type", Z_TYPE_P(nodep));
- add_property_stringl(wrapper, "name", "#text", sizeof("#text"), 1);
- if (content)
- add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1);
- xmlFree(content);
- break;
- }
-
- case XML_COMMENT_NODE:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmlcomment_class_entry);
- rsrc_type = le_domxmlcommentp;
- content = xmlNodeGetContent(nodep);
- if (content) {
- add_property_long(wrapper, "type", Z_TYPE_P(nodep));
- add_property_stringl(wrapper, "name", "#comment", sizeof("#comment"), 1);
- add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1);
- xmlFree(content);
- }
- break;
- }
-
- case XML_PI_NODE:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmlpi_class_entry);
- rsrc_type = le_domxmlpip;
- content = xmlNodeGetContent(nodep);
- add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1);
- if (content) {
- add_property_stringl(wrapper, "value", (char *) content, strlen(content), 1);
- xmlFree(content);
- }
- break;
- }
-
- case XML_ENTITY_REF_NODE:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmlentityref_class_entry);
- rsrc_type = le_domxmlentityrefp;
- add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1);
- break;
- }
-
- case XML_ENTITY_DECL:
- case XML_ELEMENT_DECL:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmlnode_class_entry);
- rsrc_type = le_domxmlnodep;
- add_property_long(wrapper, "type", Z_TYPE_P(nodep));
- add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1);
- if (Z_TYPE_P(obj) == XML_ENTITY_REF_NODE) {
- content = xmlNodeGetContent(nodep);
- if (content) {
- add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1);
- xmlFree(content);
- }
- }
- break;
- }
-
- case XML_ATTRIBUTE_NODE:
- {
- xmlAttrPtr attrp = (xmlAttrPtr) obj;
- object_init_ex(wrapper, domxmlattr_class_entry);
- rsrc_type = le_domxmlattrp;
- add_property_long(wrapper, "type", Z_TYPE_P(attrp));
- add_property_stringl(wrapper, "name", (char *) attrp->name, strlen(attrp->name), 1);
- content = xmlNodeGetContent((xmlNodePtr) attrp);
- if (content) {
- add_property_stringl(wrapper, "value", (char *) content, strlen(content), 1);
- xmlFree(content);
- }
- break;
- }
-
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- {
- xmlDocPtr docp = (xmlDocPtr) obj;
-
- object_init_ex(wrapper, domxmldoc_class_entry);
- rsrc_type = le_domxmldocp;
- if (docp->name)
- add_property_stringl(wrapper, "name", (char *) docp->name, strlen(docp->name), 1);
- else
- add_property_stringl(wrapper, "name", "#document", sizeof("#document"), 1);
- if (docp->URL)
- add_property_stringl(wrapper, "url", (char *) docp->URL, strlen(docp->URL), 1);
- else
- add_property_stringl(wrapper, "url", "", 0, 1);
- if (docp->version)
- add_property_stringl(wrapper, "version", (char *) docp->version, strlen(docp->version), 1);
- else
- add_property_stringl(wrapper, "version", "", 0, 1);
- if (docp->encoding)
- add_property_stringl(wrapper, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(wrapper, "standalone", docp->standalone);
- add_property_long(wrapper, "type", Z_TYPE_P(docp));
- add_property_long(wrapper, "compression", docp->compression);
- add_property_long(wrapper, "charset", docp->charset);
- break;
- }
-
- /* FIXME: nodes of type XML_DTD_NODE used to be domxmldtd_class_entry.
- * but the DOM Standard doesn't have a DomDtd class. The DocumentType
- * class seems to be want we need and the libxml dtd functions are
- * very much like the methods of DocumentType. I wonder what exactly
- * is the difference between XML_DTD_NODE and XML_DOCUMENT_TYPE_NODE.
- * Something like
- * <!DOCTYPE chapter SYSTEM '/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
- * [ <!ENTITY sp \"spanish\">
- * ]>
- * is considered a DTD by libxml, but from the DOM perspective it
- * rather is a DocumentType
- */
- case XML_DTD_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- {
- xmlDtdPtr dtd = (xmlDtdPtr) obj;
- object_init_ex(wrapper, domxmldoctype_class_entry);
-/* rsrc_type = le_domxmldtdp; */
- rsrc_type = le_domxmldoctypep;
-/* add_property_long(wrapper, "type", Z_TYPE_P(dtd)); */
- add_property_long(wrapper, "type", XML_DOCUMENT_TYPE_NODE);
- if (dtd->ExternalID)
- add_property_string(wrapper, "publicId", (char *) dtd->ExternalID, 1);
- else
- add_property_string(wrapper, "publicId", "", 1);
- if (dtd->SystemID)
- add_property_string(wrapper, "systemId", (char *) dtd->SystemID, 1);
- else
- add_property_string(wrapper, "systemId", "", 1);
- if (dtd->name)
- add_property_string(wrapper, "name", (char *) dtd->name, 1);
- break;
- }
-
- case XML_CDATA_SECTION_NODE:
- {
- xmlNodePtr nodep = obj;
- object_init_ex(wrapper, domxmlcdata_class_entry);
- rsrc_type = le_domxmlcdatap;
- content = xmlNodeGetContent(nodep);
- add_property_long(wrapper, "type", Z_TYPE_P(nodep));
- if (content) {
- add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1);
- xmlFree(content);
- }
- break;
- }
-
- default:
- php_error(E_WARNING, "%s(): unsupported node type: %d\n", get_active_function_name(TSRMLS_C), Z_TYPE_P(obj));
- FREE_ZVAL(wrapper);
- return NULL;
- }
-
- php_dom_set_object(wrapper, (void *) obj, rsrc_type);
- return (wrapper);
-}
-
-
-static void domxml_error(void *ctx, const char *msg, ...)
-{
- char buf[1024];
- va_list ap;
- va_start(ap, msg);
- vsnprintf(buf, 1024, msg, ap);
- va_end(ap);
- php_error(E_WARNING, buf);
-}
-
-
-PHP_RINIT_FUNCTION(domxml)
-{
- return SUCCESS;
-}
-
-
-PHP_MINIT_FUNCTION(domxml)
-{
- zend_class_entry ce;
-
- le_domxmldocp = zend_register_list_destructors_ex(php_free_xml_doc, NULL, "domdocument", module_number);
- /* Freeing the document contains freeing the complete tree.
- Therefore nodes, attributes etc. may not be freed seperately.
- */
- le_domxmlnodep = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domnode", module_number);
- le_domxmlcommentp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domcomment", module_number);
- le_domxmlattrp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domattribute", module_number);
- le_domxmltextp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domtext", module_number);
- le_domxmlelementp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domelement", module_number);
- le_domxmldtdp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domdtd", module_number);
- le_domxmlcdatap = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domcdata", module_number);
- le_domxmlentityrefp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domentityref", module_number);
- le_domxmlpip = zend_register_list_destructors_ex(php_free_xml_node, NULL, "dompi", module_number);
- le_domxmlparserp = zend_register_list_destructors_ex(php_free_xml_parser, NULL, "domparser", module_number);
- le_domxmldoctypep = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domdocumenttype", module_number);
- /* Not yet initialized le_*s */
- le_domxmlnotationp = -10003;
-
-#if defined(LIBXML_XPATH_ENABLED)
- le_xpathctxp = zend_register_list_destructors_ex(php_free_xpath_context, NULL, "xpathcontext", module_number);
- le_xpathobjectp = zend_register_list_destructors_ex(php_free_xpath_object, NULL, "xpathobject", module_number);
-#endif
-
-/* le_domxmlnsp = register_list_destructors(NULL, NULL); */
-
-#if HAVE_DOMXSLT
- le_domxsltstylesheetp = zend_register_list_destructors_ex(php_free_xslt_stylesheet, NULL, "xsltstylesheet", module_number);
-#endif
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomNode", php_domxmlnode_class_functions, NULL, NULL, NULL);
- domxmlnode_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomDocument", php_domxmldoc_class_functions, NULL, NULL, NULL);
- domxmldoc_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomParser", php_domxmlparser_class_functions, NULL, NULL, NULL);
- domxmlparser_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomDocumentType", php_domxmldoctype_class_functions, NULL, NULL, NULL);
- domxmldoctype_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "Dtd", php_domxmldtd_class_functions, NULL, NULL, NULL);
- domxmldtd_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomElement", php_domxmlelement_class_functions, NULL, NULL, NULL);
- domxmlelement_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomAttribute", php_domxmlattr_class_functions, NULL, NULL, NULL);
- domxmlattr_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomCData", php_domxmlcdata_class_functions, NULL, NULL, NULL);
- domxmlcdata_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomText", php_domxmltext_class_functions, NULL, NULL, NULL);
- domxmltext_class_entry = zend_register_internal_class_ex(&ce, domxmlcdata_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomComment", php_domxmlcomment_class_functions, NULL, NULL, NULL);
- domxmlcomment_class_entry = zend_register_internal_class_ex(&ce, domxmlcdata_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomProcessingInstruction", php_domxmlpi_class_functions, NULL, NULL, NULL);
- domxmlpi_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomNotation", php_domxmlnotation_class_functions, NULL, NULL, NULL);
- domxmlnotation_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomEntity", php_domxmlentity_class_functions, NULL, NULL, NULL);
- domxmlentity_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomEntityReference", php_domxmlentityref_class_functions, NULL, NULL, NULL);
- domxmlentityref_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "DomNamespace", php_domxmlns_class_functions, NULL, NULL, NULL);
- domxmlns_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-
-#if defined(LIBXML_XPATH_ENABLED)
- INIT_OVERLOADED_CLASS_ENTRY(ce, "XPathContext", php_xpathctx_class_functions, NULL, NULL, NULL);
- xpathctx_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "XPathObject", php_xpathobject_class_functions, NULL, NULL, NULL);
- xpathobject_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-#endif
-
-#if HAVE_DOMXSLT
- INIT_OVERLOADED_CLASS_ENTRY(ce, "XsltStylesheet", php_domxsltstylesheet_class_functions, NULL, NULL, NULL);
- domxsltstylesheet_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-#endif
-
- REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NODE", XML_ATTRIBUTE_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_TEXT_NODE", XML_TEXT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_CDATA_SECTION_NODE", XML_CDATA_SECTION_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ENTITY_REF_NODE", XML_ENTITY_REF_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ENTITY_NODE", XML_ENTITY_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_PI_NODE", XML_PI_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_COMMENT_NODE", XML_COMMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DOCUMENT_NODE", XML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DOCUMENT_TYPE_NODE", XML_DOCUMENT_TYPE_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DOCUMENT_FRAG_NODE", XML_DOCUMENT_FRAG_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_NOTATION_NODE", XML_NOTATION_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_HTML_DOCUMENT_NODE", XML_HTML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DTD_NODE", XML_DTD_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ELEMENT_DECL_NODE", XML_ELEMENT_DECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_DECL_NODE", XML_ATTRIBUTE_DECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ENTITY_DECL_NODE", XML_ENTITY_DECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_NAMESPACE_DECL_NODE", XML_NAMESPACE_DECL, CONST_CS | CONST_PERSISTENT);
-#ifdef XML_GLOBAL_NAMESPACE
- REGISTER_LONG_CONSTANT("XML_GLOBAL_NAMESPACE", XML_GLOBAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("XML_LOCAL_NAMESPACE", XML_LOCAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_CDATA", XML_ATTRIBUTE_CDATA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ID", XML_ATTRIBUTE_ID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREF", XML_ATTRIBUTE_IDREF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREFS", XML_ATTRIBUTE_IDREFS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENTITY", XML_ATTRIBUTE_ENTITIES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKEN", XML_ATTRIBUTE_NMTOKEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKENS", XML_ATTRIBUTE_NMTOKENS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENUMERATION", XML_ATTRIBUTE_ENUMERATION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NOTATION", XML_ATTRIBUTE_NOTATION, CONST_CS | CONST_PERSISTENT);
-
-#if defined(LIBXML_XPATH_ENABLED)
- REGISTER_LONG_CONSTANT("XPATH_UNDEFINED", XPATH_UNDEFINED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_NODESET", XPATH_NODESET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_BOOLEAN", XPATH_BOOLEAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_NUMBER", XPATH_NUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_STRING", XPATH_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_POINT", XPATH_POINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_RANGE", XPATH_RANGE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_LOCATIONSET", XPATH_LOCATIONSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XPATH_USERS", XPATH_USERS, CONST_CS | CONST_PERSISTENT);
-#endif
-
- REGISTER_LONG_CONSTANT("DOMXML_LOAD_PARSING", DOMXML_LOAD_PARSING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOMXML_LOAD_VALIDATING", DOMXML_LOAD_VALIDATING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOMXML_LOAD_RECOVERING", DOMXML_LOAD_RECOVERING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOMXML_LOAD_SUBSTITUTE_ENTITIES", DOMXML_LOAD_SUBSTITUTE_ENTITIES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOMXML_LOAD_COMPLETE_ATTRS",DOMXML_LOAD_COMPLETE_ATTRS, CONST_CS | CONST_PERSISTENT);
-
- xmlSetGenericErrorFunc(xmlGenericErrorContext, (xmlGenericErrorFunc)domxml_error);
-#if HAVE_DOMXSLT
- xsltSetGenericErrorFunc(xsltGenericErrorContext, (xmlGenericErrorFunc)domxml_error);
-#if HAVE_DOMEXSLT
- exsltRegisterAll();
-#endif
-#endif
-
-
- return SUCCESS;
-}
-
-
-/* {{{ proto int domxml_test(int id)
- Unity function for testing */
-PHP_FUNCTION(domxml_test)
-{
- zval *id;
-
- if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long(id);
- RETURN_LONG(Z_LVAL_P(id));
-}
-/* }}} */
-
-
-PHP_MINFO_FUNCTION(domxml)
-{
- /* don't know why that line was commented out in the previous version, so i left it (cmv) */
- php_info_print_table_start();
- php_info_print_table_row(2, "DOM/XML", "enabled");
- php_info_print_table_row(2, "DOM/XML API Version", DOMXML_API_VERSION);
- php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION);
-#if defined(LIBXML_HTML_ENABLED)
- php_info_print_table_row(2, "HTML Support", "enabled");
-#endif
-#if defined(LIBXML_XPATH_ENABLED)
- php_info_print_table_row(2, "XPath Support", "enabled");
-#endif
-#if defined(LIBXML_XPTR_ENABLED)
- php_info_print_table_row(2, "XPointer Support", "enabled");
-#endif
-#if HAVE_DOMXSLT
- php_info_print_table_row(2, "DOM/XSLT", "enabled");
- php_info_print_table_row(2, "libxslt Version", LIBXSLT_DOTTED_VERSION);
-#if HAVE_DOMEXSLT
- php_info_print_table_row(2, "DOM/EXSLT", "enabled");
- php_info_print_table_row(2, "libexslt Version", LIBEXSLT_DOTTED_VERSION);
-#endif
-#endif
-
- php_info_print_table_end();
-}
-
-/* {{{ Methods of Class DomAttribute */
-
-/* {{{ proto array domxml_attr_name(void)
- Returns list of attribute names
- Notice: domxml_node_name() does exactly the same for attribute-nodes,
- is this function here still needed, or would an alias be enough?
- */
-PHP_FUNCTION(domxml_attr_name)
-{
- zval *id;
- xmlAttrPtr attrp;
-
- DOMXML_GET_THIS_OBJ(attrp, id,le_domxmlattrp);
-
- DOMXML_NO_ARGS();
-
- RETURN_STRING((char *) (attrp->name), 1);
-}
-/* }}} */
-
-/* {{{ proto array domxml_attr_value(void)
- Returns list of attribute names */
-PHP_FUNCTION(domxml_attr_value)
-{
- zval *id;
- xmlAttrPtr attrp;
-
- DOMXML_GET_THIS_OBJ(attrp, id, le_domxmlattrp);
-
- DOMXML_NO_ARGS();
-
- RETURN_STRING((char *) xmlNodeGetContent((xmlNodePtr) attrp), 1);
-}
-/* }}} */
-
-/* {{{ proto array domxml_attr_specified(void)
- Returns list of attribute names */
-PHP_FUNCTION(domxml_attr_specified)
-{
- zval *id;
- xmlAttrPtr attrp;
-
- DOMXML_NOT_IMPLEMENTED();
-
- id = getThis();
- attrp = php_dom_get_object(id, le_domxmlattrp, 0 TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* End of Methods DomAttr }}} */
-
-
-/* {{{ Methods of Class DomProcessingInstruction */
-
-/* {{{ proto array domxml_pi_target(void)
- Returns target of pi */
-PHP_FUNCTION(domxml_pi_target)
-{
- zval *id;
- xmlNodePtr nodep;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlpip);
-
- DOMXML_NO_ARGS();
-
- RETURN_STRING((char *) nodep->name, 1);
-}
-/* }}} */
-
-/* {{{ proto array domxml_pi_data(void)
- Returns data of pi */
-PHP_FUNCTION(domxml_pi_data)
-{
- zval *id;
- xmlNodePtr nodep;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlpip);
-
- DOMXML_NO_ARGS();
-
- RETURN_STRING(xmlNodeGetContent(nodep), 1);
-}
-/* }}} */
-
-/* End of Methods of DomProcessingInstruction }}} */
-
-
-/* {{{ Methods of Class DomCData */
-
-/* {{{ proto array domxml_cdata_length(void)
- Returns list of attribute names */
-PHP_FUNCTION(domxml_cdata_length)
-{
- zval *id;
- xmlNodePtr nodep;
-
- DOMXML_NOT_IMPLEMENTED();
-
- id = getThis();
- nodep = php_dom_get_object(id, le_domxmlcdatap, 0 TSRMLS_CC);
-
- RETURN_LONG(1);
-}
-/* }}} */
-
-/* End of Methods DomCDdata }}} */
-
-
-/* {{{ Methods of Class DomNode */
-
-/* {{{ proto object domxml_node(string name)
- Creates node */
-PHP_FUNCTION(domxml_node)
-{
- zval *rv;
- xmlNode *node;
- int ret, name_len;
- char *name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
-
- node = xmlNewNode(NULL, name);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_name(void)
- Returns name of node */
-PHP_FUNCTION(domxml_node_name)
-{
- zval *id;
- xmlNode *n;
- const char *str = NULL;
-
- DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- switch (Z_TYPE_P(n)) {
- case XML_ELEMENT_NODE:
- str = n->name;
- break;
-
- case XML_TEXT_NODE:
- str = "#text";
- break;
-
- case XML_ATTRIBUTE_NODE:
- str = n->name;
- break;
-
- case XML_CDATA_SECTION_NODE:
- str = "#cdata-section";
- break;
-
- case XML_ENTITY_REF_NODE:
- str = n->name;
- break;
-
- case XML_ENTITY_NODE:
- str = NULL;
- break;
-
- case XML_PI_NODE:
- str = n->name;
- break;
-
- case XML_COMMENT_NODE:
- str = "#comment";
- break;
-
- case XML_DOCUMENT_NODE:
- str = "#document";
- break;
-
- case XML_DOCUMENT_FRAG_NODE:
- str = "#document-fragment";
- break;
-
- default:
- str = NULL;
- break;
- }
-
- if(str != NULL) {
- RETURN_STRING((char *) str, 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_value(void)
- Returns name of value */
-PHP_FUNCTION(domxml_node_value)
-{
- zval *id;
- xmlNode *n;
- char *str = NULL;
-
- DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- switch (Z_TYPE_P(n)) {
- case XML_TEXT_NODE:
- case XML_COMMENT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- str = n->content;
- break;
- default:
- str = NULL;
- break;
- }
- if(str != NULL) {
- RETURN_STRING((char *) str, 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto bool domxml_is_blank_node(void)
- Returns true if node is blank */
-PHP_FUNCTION(domxml_is_blank_node)
-{
- zval *id;
- xmlNode *n;
-
- DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- if(xmlIsBlankNode(n)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int domxml_node_type(void)
- Returns the type of the node */
-PHP_FUNCTION(domxml_node_type)
-{
- zval *id;
- xmlNode *node;
-
- DOMXML_GET_THIS_OBJ(node, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- RETURN_LONG(node->type);
-}
-/* }}} */
-
-/* {{{ proto bool domxml_clone_node(void)
- Clones a node */
-PHP_FUNCTION(domxml_clone_node)
-{
- zval *rv;
- zval *id;
- xmlNode *n, *node;
- int ret, recursive = 0;;
-
- DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &recursive) == FAILURE) {
- return;
- }
-
- node = xmlCopyNode(n, recursive);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_first_child(void)
- Returns first child from list of children */
-PHP_FUNCTION(domxml_node_first_child)
-{
- zval *id, *rv;
- xmlNode *nodep, *first;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- first = nodep->children;
- if (!first) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, first, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_last_child(void)
- Returns last child from list of children */
-PHP_FUNCTION(domxml_node_last_child)
-{
- zval *id, *rv;
- xmlNode *nodep, *last;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- last = nodep->last;
- if (!last) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, last, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_next_sibling(void)
- Returns next child from list of children */
-PHP_FUNCTION(domxml_node_next_sibling)
-{
- zval *id, *rv;
- xmlNode *nodep, *first;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- first = nodep->next;
- if (!first) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, first, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_previous_sibling(void)
- Returns previous child from list of children */
-PHP_FUNCTION(domxml_node_previous_sibling)
-{
- zval *id, *rv;
- xmlNode *nodep, *first;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- first = nodep->prev;
- if (!first) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, first, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_owner_document(void)
- Returns document this node belongs to */
-PHP_FUNCTION(domxml_node_owner_document)
-{
- zval *id, *rv;
- xmlNode *nodep;
- xmlDocPtr docp;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- docp = nodep->doc;
- if (!docp) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_has_child_nodes(void)
- Returns true if node has children */
-PHP_FUNCTION(domxml_node_has_child_nodes)
-{
- zval *id;
- xmlNode *nodep;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- if (nodep->children) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_has_attributes(void)
- Returns true if node has attributes */
-PHP_FUNCTION(domxml_node_has_attributes)
-{
- zval *id;
- xmlNode *nodep;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- if (Z_TYPE_P(nodep) != XML_ELEMENT_NODE)
- RETURN_FALSE;
-
- if (nodep->properties) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string domxml_node_prefix(void)
- Returns namespace prefix of node */
-PHP_FUNCTION(domxml_node_prefix)
-{
- zval *id;
- xmlNode *nodep;
- xmlNsPtr ns;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- ns = nodep->ns;
- if (!ns) {
- RETURN_EMPTY_STRING();
- }
-
- if (ns->prefix) {
- RETURN_STRING((char *) (ns->prefix), 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_parent(void)
- Returns parent of node */
-PHP_FUNCTION(domxml_node_parent)
-{
- zval *id, *rv;
- xmlNode *nodep, *last;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- DOMXML_NO_ARGS();
-
- last = nodep->parent;
- if (!last) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, last, &ret);
-}
-/* }}} */
-
-/* {{{ proto array domxml_node_children(void)
- Returns list of children nodes */
-PHP_FUNCTION(domxml_node_children)
-{
- zval *id;
- xmlNode *nodep, *last;
- int ret;
-
- DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep);
-
- /* Even if the nodep is a XML_DOCUMENT_NODE the type is at the
- same position.
- */
- if ((Z_TYPE_P(nodep) == XML_DOCUMENT_NODE) || (Z_TYPE_P(nodep) == XML_HTML_DOCUMENT_NODE))
- last = ((xmlDoc *) nodep)->children;
- else
- last = nodep->children;
- if (!last) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while (last) {
- zval *child;
- child = php_domobject_new(last, &ret TSRMLS_CC);
- add_next_index_zval(return_value, child);
- last = last->next;
- }
-}
-/* }}} */
-
-/* {{{ proto void domxml_node_unlink_node([object node])
- Deletes the node from tree, but not from memory*/
-PHP_FUNCTION(domxml_node_unlink_node)
-{
- zval *id;
- xmlNode *nodep;
-
- DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep);
-
- xmlUnlinkNode(nodep);
- /* This causes a Segmentation Fault for some reason. Removing
- it allows the user to re-add the node at some other time, in
- addition to fixing the segfault. Node will be freed at
- shutdown. */
- /*xmlFreeNode(nodep);
- zval_dtor(id);*/ /* This is not enough because the children won't be deleted */
-}
-/* }}} */
-
-
-/* {{{ proto object domxml_node_replace_node(object domnode)
- Replaces one node with another node */
-PHP_FUNCTION(domxml_node_replace_node)
-{
- zval *id, *rv, *node;
- xmlNodePtr repnode, nodep, new_repnode;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(repnode, node, le_domxmlnodep);
-
- /* check if the new node is already part of the document. In such a case
- * we better make a copy to prevent changing identical nodes at different
- * positions in the document at the same time.
- * A node created with e.g. create_element() doesn't have parents.
- */
- if(repnode->parent) {
- if (NULL == (new_repnode = xmlCopyNode(repnode, 1))) {
- php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- } else {
- new_repnode = repnode;
- }
-
- repnode = xmlReplaceNode(nodep, new_repnode);
-
- DOMXML_RET_OBJ(rv, nodep, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_append_child(object domnode)
- Adds node to list of children */
-PHP_FUNCTION(domxml_node_append_child)
-{
- zval *id, *rv, *node;
- xmlNodePtr child, nodep, new_child;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(child, node, le_domxmlnodep);
-
- if (child->type == XML_ATTRIBUTE_NODE) {
- php_error(E_WARNING, "%s(): can't append attribute node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (NULL == (new_child = xmlCopyNode(child, 1))) {
- php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- /* FIXME reverted xmlAddChildList; crashes
- * Uwe: must have been a temporary problem. It works for me with both
- * xmlAddChildList and xmlAddChild
- */
-
- child = xmlAddChild(nodep, new_child);
-
- if (NULL == child) {
- php_error(E_WARNING, "%s(): couldn't append node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, child, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_append_sibling(object domnode)
- Adds node to list of siblings */
-PHP_FUNCTION(domxml_node_append_sibling)
-{
- zval *id, *rv, *node;
- xmlNodePtr child, nodep, new_child;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(child, node, le_domxmlnodep);
-
- if (child->type == XML_ATTRIBUTE_NODE) {
- php_error(E_WARNING, "%s(): can't append attribute node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (NULL == (new_child = xmlCopyNode(child, 1))) {
- php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- /* FIXME reverted xmlAddChildList; crashes */
- child = xmlAddSibling(nodep, new_child);
-
- if (NULL == child) {
- php_error(E_WARNING, "%s(): couldn't append node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, child, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_insert_before(object newnode, object refnode)
- Adds node in list of nodes before given node */
-PHP_FUNCTION(domxml_node_insert_before)
-{
- zval *id, *rv, *node, *ref;
- xmlNodePtr child, new_child, nodep, refp;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oo", &node, &ref) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(child, node, le_domxmlnodep);
- DOMXML_GET_OBJ(refp, ref, le_domxmlnodep);
-
- if (NULL == (new_child = xmlCopyNode(child, 1))) {
- php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- child = xmlAddPrevSibling(refp, new_child);
-
- if (NULL == child) {
- php_error(E_WARNING, "%s(): couldn't add newnode as the previous sibling of refnode", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, child, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_remove_child(object domnode)
- Removes node from list of children */
-PHP_FUNCTION(domxml_node_remove_child)
-{
- zval *id, *node;
- xmlNodePtr children, child, nodep;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(child, node, le_domxmlnodep);
-
- children = nodep->children;
- if (!children) {
- RETURN_FALSE;
- }
-
- while (children) {
- if (children == child) {
- zval *rv;
- xmlUnlinkNode(child);
- DOMXML_RET_OBJ(rv, child, &ret);
- return;
- }
- children = children->next;
- }
- RETURN_FALSE
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_replace_child(object newnode, object oldnode)
- Replaces node in list of children */
-PHP_FUNCTION(domxml_node_replace_child)
-{
- zval *id, *newnode, *oldnode;
- xmlNodePtr children, newchild, oldchild, nodep;
- int foundoldchild = 0, foundnewchild = 0;
- int ret;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oo", &newnode, &oldnode) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(newchild, newnode, le_domxmlnodep);
- DOMXML_GET_OBJ(oldchild, oldnode, le_domxmlnodep);
-
- children = nodep->children;
- if (!children) {
- RETURN_FALSE;
- }
-
- /* check for the old child and wether the new child is already a child */
- while (children) {
- if (children == oldchild) {
- foundoldchild = 1;
- }
- if(children == newchild) {
- foundnewchild = 1;
- }
- children = children->next;
- }
- /* if the child to replace is existent and the new child isn't already
- * a child, then do the replacement
- */
- if(foundoldchild && !foundnewchild) {
- zval *rv;
- xmlNodePtr node;
- node = xmlReplaceNode(oldchild, newchild);
- DOMXML_RET_OBJ(rv, oldchild, &ret);
- return;
- }
- /* If the new child is already a child, then DOM requires to delete
- * the old one first, but this makes no sense here, since the old and
- * the new node are identical.
- */
- if(foundnewchild) {
- zval *rv;
- DOMXML_RET_OBJ(rv, newchild, &ret);
- return;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool domxml_node_set_name(string name)
- Sets name of a node */
-PHP_FUNCTION(domxml_node_set_name)
-{
- zval *id;
- xmlNode *nodep;
- int name_len;
- char *name;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
-
- xmlNodeSetName(nodep, name);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array domxml_node_attributes(void)
- Returns list of attributes of node */
-PHP_FUNCTION(domxml_node_attributes)
-{
- zval *id, *attrs;
- xmlNode *nodep;
-#ifdef oldstyle_for_libxml_1_8_7
- xmlAttr *attr;
-#endif
-
- DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep);
-
- if (node_attributes(&attrs, nodep TSRMLS_CC) < 0)
- RETURN_FALSE;
-
- *return_value = *attrs;
- FREE_ZVAL(attrs);
-
-#ifdef oldstyle_for_libxml_1_8_7
- attr = nodep->properties;
- if (!attr) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while (attr) {
- add_assoc_string(return_value, (char *) attr->name, xmlNodeGetContent(attr), 1);
- attr = attr->next;
- }
-#endif
-}
-/* }}} */
-
-/* {{{ proto object domxml_node_new_child(string name, string content)
- Adds child node to parent node */
-PHP_FUNCTION(domxml_node_new_child)
-{
- zval *id, *rv;
- xmlNodePtr child, nodep;
- int ret, name_len, content_len;
- char *name, *content = NULL;
-
- DOMXML_PARAM_FOUR(nodep, id, le_domxmlnodep, "s|s", &name, &name_len, &content, &content_len);
-
- child = xmlNewChild(nodep, NULL, name, content);
-
- if (!child) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, child, &ret);
-}
-/* }}} */
-
-/* {{{ proto bool domxml_node_set_content(string content)
- Sets content of a node */
-PHP_FUNCTION(domxml_node_set_content)
-{
- zval *id;
- xmlNode *nodep;
- int content_len;
- char *content;
-
- DOMXML_PARAM_TWO(nodep, id, le_domxmlnodep, "s", &content, &content_len);
-
- /* FIXME: another gotcha. If node has children, calling
- * xmlNodeSetContent will remove the children -> we loose the zval's
- * To prevent crash, append content if children are set
- */
- if (nodep->children) {
- xmlNodeAddContentLen(nodep, content, content_len);
- } else {
- xmlNodeSetContentLen(nodep, content, content_len);
- }
-
- /* FIXME: Actually the property 'content' of the node has to be updated
- as well. Since 'content' should disappear sooner or later and being
- replaces by a function 'content()' I skip this for now
- */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string domxml_node_get_content()
- Gets content of a node.
-
- "Read the value of a node, this can be either the text carried directly by
-this node if it's a TEXT node or the aggregate string of the values carried by
-this node child's (TEXT and ENTITY_REF). Entity references are substituted."
- */
-PHP_FUNCTION(domxml_node_get_content)
-{
- zval *id;
- xmlNode *nodep;
- xmlChar *mem;
-
- DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep);
- mem = xmlNodeGetContent(nodep);
- if (!mem) {
- RETURN_FALSE;
- }
-
- RETVAL_STRING(mem,1);
- xmlFree(mem);
-}
-/* }}} */
-
-
-/* End of Methods DomNode }}} */
-
-
-/* {{{ Methods of Class DomNotation */
-
-/* {{{ proto string domxml_notation_public_id(void)
- Returns public id of notation node */
-PHP_FUNCTION(domxml_notation_public_id)
-{
- zval *id;
- xmlNotationPtr nodep;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnotationp);
-
- DOMXML_NO_ARGS();
-
- if(nodep->PublicID) {
- RETURN_STRING((char *) (nodep->PublicID), 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto string domxml_notation_system_id(void)
- Returns system ID of notation node */
-PHP_FUNCTION(domxml_notation_system_id)
-{
- zval *id;
- xmlNotationPtr nodep;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnotationp);
-
- DOMXML_NO_ARGS();
-
- if(nodep->SystemID) {
- RETURN_STRING((char *) (nodep->SystemID), 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* End of Methods DomNotation }}} */
-
-
-/* {{{ Methods of Class DomElement */
-
-/* {{{ proto object domxml_element(string name)
- Constructor of DomElement */
-PHP_FUNCTION(domxml_element)
-{
- zval *rv;
- xmlNode *node;
- int ret, name_len;
- char *name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
-
- node = xmlNewNode(NULL, name);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-
-/* }}} */
-
-/* {{{ proto string domxml_elem_tagname(void)
- Returns tag name of element node */
-PHP_FUNCTION(domxml_elem_tagname)
-{
- zval *id;
- xmlNode *nodep;
-
- DOMXML_NO_ARGS();
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlelementp);
-
- DOMXML_NO_ARGS();
-
- RETURN_STRING((char *) (nodep->name), 1);
-}
-/* }}} */
-
-/* {{{ proto string domxml_elem_get_attribute(string attrname)
- Returns value of given attribute */
-PHP_FUNCTION(domxml_elem_get_attribute)
-{
- zval *id;
- xmlNode *nodep;
- char *name, *value;
- int name_len;
-
- DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len);
-
- value = xmlGetProp(nodep, name);
- if (!value) {
- RETURN_FALSE;
- } else {
- RETVAL_STRING(value, 1);
- xmlFree(value);
- }
-}
-/* }}} */
-
-/* {{{ proto bool domxml_elem_set_attribute(string attrname, string value)
- Sets value of given attribute */
-PHP_FUNCTION(domxml_elem_set_attribute)
-{
- zval *id, *rv;
- xmlNode *nodep;
- xmlAttr *attr;
- int ret, name_len, value_len;
- char *name, *value;
-
- DOMXML_PARAM_FOUR(nodep, id, le_domxmlelementp, "ss", &name, &name_len, &value, &value_len);
-
- attr = xmlSetProp(nodep, name, value);
- if (!attr) {
- php_error(E_WARNING, "%s(): no such attribute '%s'", get_active_function_name(TSRMLS_C), name);
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) attr, &ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_elem_remove_attribute(string attrname)
- Removes given attribute */
-PHP_FUNCTION(domxml_elem_remove_attribute)
-{
- zval *id;
- xmlNode *nodep;
- xmlAttr *attrp;
- int name_len;
- char *name;
-
- DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len);
- attrp = xmlHasProp(nodep,name);
- if (attrp == NULL) {
- RETURN_FALSE;
- }
- xmlUnlinkNode((xmlNodePtr)attrp);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string domxml_elem_get_attribute_node(string attrname)
- Returns value of given attribute */
-PHP_FUNCTION(domxml_elem_get_attribute_node)
-{
- zval *id, *rv;
- xmlNode *nodep;
- xmlAttr *attrp;
- int name_len, ret;
- char *name;
-
- DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len);
- attrp = xmlHasProp(nodep,name);
- if (attrp == NULL) {
- RETURN_FALSE;
- }
- DOMXML_RET_OBJ(rv, (xmlNodePtr) attrp, &ret);
-}
-/* }}} */
-
-/* {{{ proto bool domxml_elem_set_attribute_node(object attr)
- Sets value of given attribute */
-PHP_FUNCTION(domxml_elem_set_attribute_node)
-{
- zval *id, *arg1, *rv;
- xmlNode *nodep;
- xmlAttr *attrp, *newattrp;
- int ret;
-
- if ((ZEND_NUM_ARGS() == 1) && getParameters(ht, 1, &arg1) == SUCCESS) {
- id = getThis();
- nodep = php_dom_get_object(id, le_domxmlelementp, 0 TSRMLS_CC);
- attrp = php_dom_get_object(arg1, le_domxmlattrp, 0 TSRMLS_CC);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- /* FIXME: The following line doesn't work */
- newattrp = xmlCopyProp(nodep, attrp);
- if (!newattrp) {
- php_error(E_WARNING, "%s(): no such attribute '%s'", get_active_function_name(TSRMLS_C), attrp->name);
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) newattrp, &ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_elem_has_attribute(string attrname)
- Checks for existenz given attribute */
-PHP_FUNCTION(domxml_elem_has_attribute)
-{
- zval *id;
- xmlNode *nodep;
- char *name, *value;
- int name_len;
-
- DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len);
-
- value = xmlGetProp(nodep, name);
- if (!value) {
- RETURN_FALSE;
- } else {
- xmlFree(value);
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-#if defined(LIBXML_XPATH_ENABLED)
-/* {{{ proto string domxml_doc_get_elements_by_tagname(string tagname [,object xpathctx_handle] )
- Returns array with nodes with given tagname in document or empty array, if not found*/
-PHP_FUNCTION(domxml_doc_get_elements_by_tagname)
-{
- zval *id, *rv, *contextnode = NULL,*ctxpin = NULL;
- xmlXPathContextPtr ctxp;
- xmlDocPtr docp;
-
- xmlXPathObjectPtr xpathobjp;
- xmlNode *contextnodep;
- int name_len;
- char *str,*name;
-
- contextnode = NULL;
- contextnodep = NULL;
-
- DOMXML_PARAM_FOUR(docp, id, le_domxmldocp, "s|oo", &name, &name_len,&ctxpin,&contextnodep);
-
- /* if no xpath_context was submitted, create a new one */
- if (ctxpin == NULL) {
- ctxp = xmlXPathNewContext(docp);
- } else {
- DOMXML_GET_OBJ(ctxp, ctxpin, le_xpathctxp);
- }
-
- if (contextnode) {
- DOMXML_GET_OBJ(contextnodep, contextnode, le_domxmlnodep);
- }
- ctxp->node = contextnodep;
- str = (char*) emalloc((name_len+3) * sizeof(char)) ;
- if (str == NULL) {
- php_error(E_WARNING, "%s(): cannot allocate memory for string", get_active_function_name(TSRMLS_C));
- }
- sprintf(str ,"//%s",name);
-
- xpathobjp = xmlXPathEval(str, ctxp);
- efree(str);
- ctxp->node = NULL;
- if (!xpathobjp) {
- RETURN_FALSE;
- }
- MAKE_STD_ZVAL(rv);
-
- if(array_init(rv) != SUCCESS)
- {
- php_error(E_WARNING, "%s(): cannot create required array", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- switch (Z_TYPE_P(xpathobjp)) {
-
- case XPATH_NODESET:
- {
- int i;
- xmlNodeSetPtr nodesetp;
-
- if (NULL == (nodesetp = xpathobjp->nodesetval)) {
- zval_dtor(rv);
- RETURN_FALSE;
- }
-
- for (i = 0; i < nodesetp->nodeNr; i++) {
- xmlNodePtr node = nodesetp->nodeTab[i];
- zval *child;
- int retnode;
-
- /* construct a node object */
- child = php_domobject_new(node, &retnode TSRMLS_CC);
- zend_hash_next_index_insert(Z_ARRVAL_P(rv), &child, sizeof(zval *), NULL);
- }
-
- break;
- }
- default:
- break;
- }
-
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-typedef struct _idsIterator idsIterator;
-struct _idsIterator {
- xmlChar *elementId;
- xmlNode *element;
-};
-
-static void idsHashScanner(void *payload, void *data, xmlChar *name) {
- idsIterator *priv = (idsIterator *)data;
-
- if (priv->element == NULL && xmlStrEqual (name, priv->elementId))
- priv->element = ((xmlNode *)((xmlID *)payload)->attr)->parent;
-}
-
-/* {{{ proto string domxml_doc_get_element_by_id(string id)
- Returns element for given id or false if not found */
-PHP_FUNCTION(domxml_doc_get_element_by_id)
-{
- zval *id, *rv = NULL;
- xmlDocPtr docp;
- idsIterator iter;
- xmlHashTable *ids = NULL;
- int retnode;
-
- id = getThis();
- DOMXML_GET_OBJ(docp, id, le_domxmldocp);
-
- ids = (xmlHashTable *) docp->ids;
- if(ids) {
- iter.elementId = (xmlChar *)
- iter.element = NULL;
- xmlHashScan(ids, idsHashScanner, &iter);
- rv = php_domobject_new(iter.element, &retnode TSRMLS_CC);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto string domxml_elem_get_elements_by_tagname(string tagname)
- Returns array with nodes with given tagname in element or empty array, if not found */
-PHP_FUNCTION(domxml_elem_get_elements_by_tagname)
-{
- zval *id,*rv;
- xmlNode *nodep;
- int name_len,i;
- char *name;
- xmlNodeSet *nodesetp;
-
- DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len);
-
- MAKE_STD_ZVAL(rv);
-
- if(array_init(rv) != SUCCESS) {
- php_error(E_WARNING, "%s(): cannot create required array", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- nodesetp = php_get_elements_by_tagname(nodep,name);
-
- if(nodesetp) {
- for (i = 0; i < nodesetp->nodeNr; i++) {
- xmlNodePtr node = nodesetp->nodeTab[i];
- zval *child;
- int retnode;
-
- child = php_domobject_new(node, &retnode TSRMLS_CC);
- zend_hash_next_index_insert(Z_ARRVAL_P(rv), &child, sizeof(zval *), NULL);
- }
- }
- *return_value = *rv;
- FREE_ZVAL(rv);
-
-}
-/* }}} */
-
-/* End of Methods DomElement }}} */
-
-
-/* {{{ Methods of Class DomDocumentType */
-
-/* {{{ proto array domxml_doctype_name(void)
- Returns name of DocumentType */
-PHP_FUNCTION(domxml_doctype_name)
-{
- zval *id;
- xmlDtdPtr attrp;
-
- DOMXML_NO_ARGS();
-
- DOMXML_GET_THIS_OBJ(attrp, id, le_domxmldoctypep);
-
- RETURN_STRING((char *) (attrp->name), 1);
-}
-/* }}} */
-
-/* {{{ proto array domxml_doctype_system_id(void)
- Returns system id of DocumentType */
-PHP_FUNCTION(domxml_doctype_system_id)
-{
- zval *id;
- xmlDtdPtr attrp;
-
- DOMXML_NO_ARGS();
-
- DOMXML_GET_THIS_OBJ(attrp, id, le_domxmldoctypep);
-
- if(attrp->SystemID) {
- RETURN_STRING((char *) (attrp->SystemID), 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto array domxml_doctype_public_id(void)
- Returns public id of DocumentType */
-PHP_FUNCTION(domxml_doctype_public_id)
-{
- zval *id;
- xmlDtdPtr attrp;
-
- DOMXML_NO_ARGS();
-
- DOMXML_GET_THIS_OBJ(attrp, id, le_domxmldoctypep);
-
- if(attrp->ExternalID) {
- RETURN_STRING((char *) (attrp->ExternalID), 1);
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto array domxml_doctype_entities(void)
- Returns list of entities */
-PHP_FUNCTION(domxml_doctype_entities)
-{
- zval *id;
- xmlNode *last;
- xmlDtdPtr doctypep;
- int ret;
-
- DOMXML_NOT_IMPLEMENTED();
-
- DOMXML_PARAM_NONE(doctypep, id, le_domxmldoctypep);
-
- last = doctypep->entities;
- if (!last) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while (last) {
- zval *child;
- child = php_domobject_new(last, &ret TSRMLS_CC);
- add_next_index_zval(return_value, child);
- last = last->next;
- }
-}
-/* }}} */
-
-/* {{{ proto array domxml_doctype_notations(void)
- Returns list of notations */
-PHP_FUNCTION(domxml_doctype_notations)
-{
- zval *id;
- xmlNode *last;
- xmlDtdPtr doctypep;
- int ret;
-
- DOMXML_NOT_IMPLEMENTED();
-
- DOMXML_PARAM_NONE(doctypep, id, le_domxmldoctypep);
-
- last = doctypep->notations;
- if (!last) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while (last) {
- zval *child;
- child = php_domobject_new(last, &ret TSRMLS_CC);
- add_next_index_zval(return_value, child);
- last = last->next;
- }
-}
-/* }}} */
-
-/* End of Methods DomElementType }}} */
-
-
-/* {{{ Methods of Class DomDocument */
-
-/* {{{ proto object domxml_doc_doctype(void)
- Returns DomDocumentType */
-PHP_FUNCTION(domxml_doc_doctype)
-{
- zval *id, *rv;
- xmlDtdPtr dtd;
- xmlDocPtr docp;
- int ret;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- DOMXML_NO_ARGS();
-
- dtd = xmlGetIntSubset(docp);
- if (!dtd) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) dtd, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_implementation(void)
- Returns DomeDOMImplementation */
-PHP_FUNCTION(domxml_doc_implementation)
-{
-/* zval *id;
- xmlDocPtr docp;*/
-
- DOMXML_NOT_IMPLEMENTED();
-
-/*
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- rv = php_domobject_new(node, &ret TSRMLS_CC);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
-*/
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_document_element(int domnode)
- Returns root node of document */
-PHP_FUNCTION(domxml_doc_document_element)
-{
- zval *id, *rv;
- xmlDoc *docp;
- xmlNode *root;
- int ret;
-
- DOMXML_PARAM_NONE(docp, id, le_domxmldocp);
-
- root = xmlDocGetRootElement(docp);
- if (!root) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, root, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_element(string name)
- Creates new element node */
-PHP_FUNCTION(domxml_doc_create_element)
-{
- zval *id, *rv;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, name_len;
- char *name;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
-
- node = xmlNewNode(NULL, name);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_text_node(string content)
- Creates new text node */
-PHP_FUNCTION(domxml_doc_create_text_node)
-{
- zval *id, *rv;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, content_len;
- char *content;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) {
- return;
- }
-
- node = xmlNewTextLen(content, content_len);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_comment(string content)
- Creates new comment node */
-PHP_FUNCTION(domxml_doc_create_comment)
-{
- zval *id, *rv;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, content_len;
- char *content;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) {
- return;
- }
-
- node = xmlNewComment(content);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_attribute(string name, string value)
- Creates new attribute node */
-PHP_FUNCTION(domxml_doc_create_attribute)
-{
- zval *id, *rv;
- xmlAttrPtr node;
- xmlDocPtr docp;
- int ret, name_len, value_len;
- char *name, *value;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &value, &value_len) == FAILURE) {
- return;
- }
-
- node = xmlNewProp(NULL, name, value);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_cdata_section(string content)
- Creates new cdata node */
-PHP_FUNCTION(domxml_doc_create_cdata_section)
-{
- zval *id, *rv;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, content_len;
- char *content;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) {
- return;
- }
-
- node = xmlNewCDataBlock(docp, content, content_len);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_entity_reference(string name)
- Creates new cdata node */
-PHP_FUNCTION(domxml_doc_create_entity_reference)
-{
- zval *id, *rv;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, name_len;
- char *name;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
- node = xmlNewReference(docp, name);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_create_processing_instruction(string name)
- Creates new processing_instruction node */
-PHP_FUNCTION(domxml_doc_create_processing_instruction)
-{
- zval *id, *rv;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, name_len, content_len;
- char *name, *content;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- node = xmlNewPI(name, content);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp;
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_imported_node(object node, bool recursive)
- Creates new element node */
-PHP_FUNCTION(domxml_doc_imported_node)
-{
- zval *arg1, *id, *rv;
- xmlNodePtr node, srcnode;
- xmlDocPtr docp;
- int ret, recursive = 0;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- /* FIXME: which object type to expect? */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|l", &arg1, &recursive) == FAILURE) {
- return;
- }
-
- DOMXML_GET_OBJ(srcnode, arg1, le_domxmlnodep);
-
- node = xmlCopyNode(srcnode, recursive);
- if (!node) {
- RETURN_FALSE;
- }
- node->doc = docp; /* Not enough because other nodes in the tree are not set */
-
- DOMXML_RET_OBJ(rv, node, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_dtd(void)
- Returns DTD of document */
-PHP_FUNCTION(domxml_intdtd)
-{
- zval *id, *rv;
- xmlDoc *docp;
- xmlDtd *dtd;
- int ret;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- dtd = xmlGetIntSubset(docp);
- if (!dtd) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) dtd, &ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_dump_mem(object doc_handle [, int format][, encoding])
- Dumps document into string and optionally formats it */
-PHP_FUNCTION(domxml_dump_mem)
-{
- zval *id;
- xmlDoc *docp;
- xmlChar *mem;
- int format = 0;
- int size;
- int encoding_len = 0;
- char *encoding;
-
-
- DOMXML_PARAM_THREE(docp, id, le_domxmldocp, "|ls", &format, &encoding, &encoding_len);
- if (format) {
- xmlKeepBlanksDefault(0);
- if (encoding_len) {
- xmlDocDumpFormatMemoryEnc(docp, &mem, &size, encoding, format);
- } else {
- xmlDocDumpFormatMemory(docp, &mem, &size, format);
- }
- } else {
- if (encoding_len) {
- xmlDocDumpMemoryEnc(docp, &mem, &size, encoding);
- } else {
- xmlDocDumpMemory(docp, &mem, &size);
- }
- }
-
- if (!size) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(mem, size, 1);
- xmlFree(mem);
-}
-/* }}} */
-
-/* {{{ proto int domxml_dump_mem_file(string filename [, int compressmode [, int format]])
- Dumps document into file and uses compression if specified. Returns false on error, otherwise the length of the xml-document (uncompressed) */
-PHP_FUNCTION(domxml_dump_mem_file)
-{
- zval *id;
- xmlDoc *docp;
- int file_len, bytes;
- int format = 0;
- int compressmode = 0;
- char *file;
-
- DOMXML_PARAM_FOUR(docp, id, le_domxmldocp, "s|ll", &file, &file_len, &compressmode, &format);
-
- xmlSetCompressMode(compressmode);
-
- if (format) {
- xmlKeepBlanksDefault(0);
- bytes = xmlSaveFormatFile(file, docp, format);
- } else {
- bytes = xmlSaveFile(file, docp);
- }
-
- if (bytes == -1) {
- RETURN_FALSE;
- }
- RETURN_LONG(bytes);
-}
-/* }}} */
-
-/* {{{ proto string domxml_dump_node(object doc_handle, object node_handle [, int format [, int level]])
- Dumps node into string */
-PHP_FUNCTION(domxml_dump_node)
-{
- zval *id, *nodep;
- xmlDocPtr docp;
- xmlNodePtr elementp;
- xmlChar *mem ;
- xmlBufferPtr buf;
- int level = 0;
- int format = 0;
-
- DOMXML_PARAM_THREE(docp, id, le_domxmldocp, "o|ll", &nodep, &format, &level);
-
- DOMXML_GET_OBJ(elementp, nodep, le_domxmlnodep);
-
- if (Z_TYPE_P(elementp) == XML_DOCUMENT_NODE || Z_TYPE_P(elementp) == XML_HTML_DOCUMENT_NODE ) {
- php_error(E_WARNING, "%s(): cannot dump element with a document node", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- buf = xmlBufferCreate();
- if (!buf) {
- php_error(E_WARNING, "%s(): could fetch buffer", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- xmlNodeDump(buf, docp, elementp, level, format);
-
- mem = (xmlChar*) xmlBufferContent(buf);
-
- if (!mem) {
- xmlBufferFree(buf);
- RETURN_FALSE;
- }
- RETVAL_STRING(mem, 1);
- xmlBufferFree(buf);
-
-}
-/* }}} */
-
-static void idsHashScanner2(void *payload, void *data, xmlChar *name)
-{
- zval *return_value = (zval *) data;
- zval *child;
- int ret;
- xmlNode *nodep;
-
- TSRMLS_FETCH();
-
- nodep = ((xmlNode *)((xmlID *)payload)->attr)->parent;
- child = php_domobject_new(nodep, &ret TSRMLS_CC);
- add_next_index_zval(return_value, child);
-}
-
-/* {{{ proto string domxml_doc_ids(object doc_handle)
- Returns array of ids */
-PHP_FUNCTION(domxml_doc_ids)
-{
- zval *id;
- xmlDoc *docp;
- xmlHashTable *ids = NULL;
-
- DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp);
-
- ids = docp->ids;
-
- if(ids) {
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- xmlHashScan(ids, idsHashScanner2, return_value);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object xmldoc(string xmldoc[, int mode])
- Creates DOM object of XML document */
-PHP_FUNCTION(xmldoc)
-{
- zval *rv;
- xmlDoc *docp;
- int ret;
- char *buffer;
- int buffer_len;
- int mode = 0, prevSubstValue;
- int oldvalue = xmlDoValidityCheckingDefaultValue;
-/* xmlDtdPtr dtd; */
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &buffer, &buffer_len, &mode) == FAILURE) {
- return;
- }
-/* Either of the following line force validation */
-/* xmlLoadExtDtdDefaultValue = XML_DETECT_IDS; */
-/* xmlDoValidityCheckingDefaultValue = 1; */
-
- if(mode & DOMXML_LOAD_SUBSTITUTE_ENTITIES)
- prevSubstValue = xmlSubstituteEntitiesDefault (1);
- else
- prevSubstValue = xmlSubstituteEntitiesDefault (0);
-
- if(mode & DOMXML_LOAD_COMPLETE_ATTRS)
- xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
-
- switch (mode & (DOMXML_LOAD_PARSING | DOMXML_LOAD_VALIDATING | DOMXML_LOAD_RECOVERING)) {
- case DOMXML_LOAD_PARSING:
- xmlDoValidityCheckingDefaultValue = 0;
- docp = xmlParseDoc(buffer);
- break;
- case DOMXML_LOAD_VALIDATING:
- xmlDoValidityCheckingDefaultValue = 1;
- docp = xmlParseDoc(buffer);
- break;
- case DOMXML_LOAD_RECOVERING:
- xmlDoValidityCheckingDefaultValue = 0;
- docp = xmlRecoverDoc(buffer);
- break;
- }
- xmlSubstituteEntitiesDefault (prevSubstValue);
- xmlDoValidityCheckingDefaultValue = oldvalue;
-
- if (!docp)
- RETURN_FALSE;
-
-/* dtd = xmlGetIntSubset(docp);
- if(dtd) {
- xmlParseDTD(dtd->ExternalID, dtd->SystemID);
- }
-*/
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-}
-/* }}} */
-
-/* {{{ proto object xmldocfile(string filename)
- Creates DOM object of XML document in file */
-PHP_FUNCTION(xmldocfile)
-{
- zval *rv;
- xmlDoc *docp;
- int ret, file_len;
- char *file;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) {
- return;
- }
-
- docp = xmlParseFile(file);
- if (!docp) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-
- add_property_resource(return_value, "doc", ret);
- if (docp->name)
- add_property_stringl(return_value, "name", (char *) docp->name, strlen(docp->name), 1);
- if (docp->URL)
- add_property_stringl(return_value, "url", (char *) docp->URL, strlen(docp->URL), 1);
- add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);
- if (docp->encoding)
- add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(return_value, "standalone", docp->standalone);
- add_property_long(return_value, "type", Z_TYPE_P(docp));
- add_property_long(return_value, "compression", docp->compression);
- add_property_long(return_value, "charset", docp->charset);
- zend_list_addref(ret);
-}
-/* }}} */
-
-#if defined(LIBXML_HTML_ENABLED)
-/* {{{ proto string domxml_html_dump_mem([int doc_handle])
- Dumps document into string as HTML */
-PHP_FUNCTION(domxml_html_dump_mem)
-{
- zval *id;
- xmlDoc *docp;
- xmlChar *mem;
- int size;
-
- DOMXML_PARAM_NONE(docp, id, le_domxmldocp);
-
- htmlDocDumpMemory(docp, &mem, &size);
- if (!size) {
- if (mem)
- xmlFree(mem);
- RETURN_FALSE;
- }
- RETVAL_STRINGL(mem, size, 1);
- xmlFree(mem);
-}
-/* }}} */
-
-/* {{{ proto object html_doc(string html_doc [, bool from_file])
- Creates DOM object of HTML document */
-PHP_FUNCTION(html_doc)
-{
- zval *rv;
- xmlDoc *docp;
- int ret;
- char *buffer;
- int buffer_len;
- zend_bool from_file = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &buffer, &buffer_len, &from_file) == FAILURE) {
- return;
- }
-
- if (from_file) {
- docp = htmlParseFile(buffer, NULL);
- } else {
- docp = htmlParseDoc(buffer, NULL);
- }
- if (!docp)
- RETURN_FALSE;
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-}
-/* }}} */
-
-/* {{{ proto object html_doc_file(string filename)
- Creates DOM object of HTML document in file */
-PHP_FUNCTION(html_doc_file)
-{
- zval *rv;
- xmlDoc *docp;
- int ret, file_len;
- char *file;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) {
- return;
- }
-
- docp = htmlParseFile(file, NULL);
- if (!docp) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-
- add_property_resource(return_value, "doc", ret);
- if (docp->name)
- add_property_stringl(return_value, "name", (char *) docp->name, strlen(docp->name), 1);
- if (docp->URL)
- add_property_stringl(return_value, "url", (char *) docp->URL, strlen(docp->URL), 1);
- if (docp->version)
- add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);
-/* add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);*/
- if (docp->encoding)
- add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(return_value, "standalone", docp->standalone);
- add_property_long(return_value, "type", Z_TYPE_P(docp));
- add_property_long(return_value, "compression", docp->compression);
- add_property_long(return_value, "charset", docp->charset);
- zend_list_addref(ret);
-}
-/* }}} */
-#endif /* defined(LIBXML_HTML_ENABLED) */
-
-/* {{{ proto bool domxml_substitute_entities_default(bool enable)
- Set and return the previous value for default entity support */
-PHP_FUNCTION(domxml_substitute_entities_default)
-{
- zend_bool enable;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &enable) == FAILURE) {
- return;
- }
-
- RETURN_BOOL(xmlSubstituteEntitiesDefault(enable));
-}
-/* }}} */
-
-/* {{{ proto bool domxml_node_text_concat(string content)
- Add string tocontent of a node */
-PHP_FUNCTION(domxml_node_text_concat)
-{
- zval *id;
- xmlNode *nodep;
- char *content;
- int content_len;
-
- DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) {
- return;
- }
-
- if (content_len)
- xmlTextConcat(nodep, content, content_len);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object domxml_doc_add_root(string name)
- Adds root node to document */
-PHP_FUNCTION(domxml_doc_add_root)
-{
- zval *id, *rv;
- xmlDoc *docp;
- xmlNode *nodep;
- int ret, name_len;
- char *name;
-
- DOMXML_PARAM_TWO(docp, id, le_domxmldocp, "s", &name, &name_len);
-
- nodep = xmlNewDocNode(docp, NULL, name, NULL);
- if (!nodep) {
- RETURN_FALSE;
- }
-
- xmlDocSetRootElement(docp, nodep);
-
- DOMXML_RET_OBJ(rv, nodep, &ret);
-}
-/* }}} */
-
-/* {{{ proto bool domxml_set_root(int domnode)
- Sets root node of document */
-PHP_FUNCTION(domxml_doc_set_root)
-{
- zval *id, *rv, *node;
- xmlDoc *docp;
- xmlNode *root;
-
- DOMXML_PARAM_TWO(docp, id, le_domxmldocp, "o", &node, &rv);
- DOMXML_GET_OBJ(root, node, le_domxmlnodep);
-
- if (!root) {
- RETURN_FALSE;
- }
-
- xmlDocSetRootElement(docp, root);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object domxml_new_xmldoc(string version)
- Creates new xmldoc */
-PHP_FUNCTION(domxml_new_xmldoc)
-{
- zval *rv;
- xmlDoc *docp;
- int ret, buf_len;
- char *buf;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) {
- return;
- }
-
- docp = xmlNewDoc(buf);
- if (!docp) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-}
-/* }}} */
-
-/* {{{ proto object domxml_parser([string buf[,string filename]])
- Creates new xmlparser */
-PHP_FUNCTION(domxml_parser)
-{
- zval *rv;
- xmlParserCtxtPtr parserp;
- int ret, buf_len = 0;
- char *buf = "";
- char *filename = NULL;
- int filename_len = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &buf, &buf_len, &filename, &filename_len) == FAILURE) {
- return;
- }
-
- parserp = xmlCreatePushParserCtxt(NULL, NULL, buf, buf_len, filename);
- if (!parserp) {
- RETURN_FALSE;
- }
-/* parserp->loadsubset = XML_DETECT_IDS; */
-
- rv = php_xmlparser_new(parserp, &ret TSRMLS_CC);
- DOMXML_RET_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto bool domxml_parser_add_chunk(string chunk)
- adds xml-chunk to parser */
-PHP_FUNCTION(domxml_parser_add_chunk)
-{
- zval *id;
- xmlParserCtxtPtr parserp;
- char *chunk;
- int chunk_len, error;
-
- DOMXML_PARAM_TWO(parserp, id, le_domxmlparserp,"s", &chunk, &chunk_len);
- error = xmlParseChunk(parserp, chunk, chunk_len , 0);
- if (error != 0) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object domxml_parser_end([string chunk])
- Ends parsing and returns DomDocument*/
-PHP_FUNCTION(domxml_parser_end)
-{
- zval *id,*rv;
- xmlParserCtxtPtr parserp;
- char *chunk = NULL;
- int chunk_len = 0, error;
- int ret;
-
-
- DOMXML_PARAM_TWO(parserp, id, le_domxmlparserp,"|s", &chunk, &chunk_len);
- error = xmlParseChunk(parserp, chunk, chunk_len, 1);
- if (error != 0) {
- php_error(E_ERROR,"error: %d",error);
- RETURN_FALSE;
- }
- if (parserp->myDoc != NULL) {
- DOMXML_RET_OBJ(rv, (xmlNodePtr) parserp->myDoc, &ret);
- }
- else {
- RETVAL_FALSE
- }
-}
-/* }}} */
-
-/* {{{ proto bool domxml_parser_set_keep_blanks(bool mode)
- Determines how to handle blanks */
-PHP_FUNCTION(domxml_parser_set_keep_blanks)
-{
- zval *id;
- xmlParserCtxtPtr parserp;
- zend_bool mode;
-
- DOMXML_PARAM_ONE(parserp, id, le_domxmlparserp, "b", &mode);
- parserp->keepBlanks = mode;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#ifdef newcode
-/* {{{ proto int node_namespace([int node])
- Returns list of namespaces */
-static int node_namespace(zval **attributes, xmlNode *nodep TSRMLS_DC)
-{
- xmlNs *ns;
-
- /* Get the children of the current node */
- ns = nodep->ns;
- if (!ns) {
- return -1;
- }
-
- /* create an php array for the children */
- MAKE_STD_ZVAL(*attributes);
- if (array_init(*attributes) == FAILURE) {
- return -1;
- }
-
- while (ns) {
- zval *pattr;
- int ret;
-
- pattr = php_domobject_new((xmlNodePtr) ns, &ret TSRMLS_CC);
- SEPARATE_ZVAL(&pattr);
-
-/* if(!ret) { */
- if (ns->href)
- add_property_stringl(pattr, "href", (char *) ns->href, strlen(ns->href), 1);
- if (ns->prefix)
- add_property_stringl(pattr, "prefix", (char *) ns->prefix, strlen(ns->prefix), 1);
- add_property_long(pattr, "type", Z_TYPE_P(ns));
-/* } */
-
- zend_hash_next_index_insert(Z_ARRVAL_PP(attributes), &pattr, sizeof(zval *), NULL);
- ns = ns->next;
- }
- return 0;
-}
-/* }}} */
-#endif
-
-/* We don't have a type zval. **attributes is also very unusual. */
-
-/* {{{ proto int node_attributes(zval **attributes, int node)
- Returns list of children nodes */
-static int node_attributes(zval **attributes, xmlNode *nodep TSRMLS_DC)
-{
- xmlAttr *attr;
- int count = 0;
-
- /* Get the children of the current node */
- if (Z_TYPE_P(nodep) != XML_ELEMENT_NODE)
- return -1;
- attr = nodep->properties;
- if (!attr)
- return -1;
-
- /* create an php array for the children */
- MAKE_STD_ZVAL(*attributes);
- array_init(*attributes);
-
- while (attr) {
- zval *pattr;
- int ret;
-
- pattr = php_domobject_new((xmlNodePtr) attr, &ret TSRMLS_CC);
- /** XXX FIXME XXX */
-/* if(0 <= (n = node_children(&children, attr->children TSRMLS_CC))) {
- zend_hash_update(Z_OBJPROP_P(value), "children", sizeof("children"), (void *) &children, sizeof(zval *), NULL);
- }
-*/ add_property_string(pattr, "name", (char *) (attr->name), 1);
- add_property_string(pattr, "value", xmlNodeGetContent((xmlNodePtr) attr), 1);
- zend_hash_next_index_insert(Z_ARRVAL_PP(attributes), &pattr, sizeof(zval *), NULL);
- attr = attr->next;
- count++;
- }
- return count;
-}
-/* }}} */
-
-/* {{{ proto int node_children([int node])
- Returns list of children nodes */
-static int node_children(zval **children, xmlNode *nodep TSRMLS_DC)
-{
- zval *mchildren, *attributes;
- /* zval *namespace; */
- xmlNode *last;
- int count = 0;
-
- /* Get the children of the current node */
- last = nodep;
- if (!last) {
- return -1;
- }
-
- /* create an php array for the children */
- MAKE_STD_ZVAL(*children);
- array_init(*children);
-
- while (last) {
- zval *child;
- int ret;
-
- if (NULL != (child = php_domobject_new(last, &ret TSRMLS_CC))) {
- zend_hash_next_index_insert(Z_ARRVAL_PP(children), &child, sizeof(zval *), NULL);
-
- /* Get the namespace of the current node and add it as a property */
- /* XXX FIXME XXX */
-/*
- if(!node_namespace(&namespace, last))
- zend_hash_update(Z_OBJPROP_P(child), "namespace", sizeof("namespace"), (void *) &namespace, sizeof(zval *), NULL);
-*/
-
- /* Get the attributes of the current node and add it as a property */
- if (node_attributes(&attributes, last TSRMLS_CC) >= 0)
- zend_hash_update(Z_OBJPROP_P(child), "attributes", sizeof("attributes"), (void *) &attributes, sizeof(zval *), NULL);
-
- /* Get recursively the children of the current node and add it as a property */
- if (node_children(&mchildren, last->children TSRMLS_CC) >= 0)
- zend_hash_update(Z_OBJPROP_P(child), "children", sizeof("children"), (void *) &mchildren, sizeof(zval *), NULL);
-
- count++;
- }
- last = last->next;
- }
- return count;
-}
-/* }}} */
-
-/* {{{ proto object domxml_xmltree(string xmltree)
- Creates a tree of PHP objects from an XML document */
-PHP_FUNCTION(domxml_xmltree)
-{
- zval *children, *rv;
- xmlDoc *docp;
- xmlNode *root;
- int ret, buf_len;
- char *buf;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) {
- return;
- }
-
- /* Create a new xml document */
- docp = xmlParseDoc(buf);
- if (!docp) {
- RETURN_FALSE;
- }
-
- /* get the root and add as a property to the document */
- root = docp->children;
- if (!root) {
- xmlFreeDoc(docp);
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-
- /* The root itself maybe an array. Though you may not have two Elements
- as root, you may have a comment, pi and and element as root.
- Thanks to Paul DuBois for pointing me at this.
- */
- if (node_children(&children, root TSRMLS_CC) >= 0) {
- zend_hash_update(Z_OBJPROP_P(return_value), "children",sizeof("children"), (void *) &children, sizeof(zval *), NULL);
- }
-/* xmlFreeDoc(docp); */
-}
-/* }}} */
-
-#if defined(LIBXML_XPATH_ENABLED)
-/* {{{ proto bool xpath_init(void)
- Initializing XPath environment */
-PHP_FUNCTION(xpath_init)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- xmlXPathInit();
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_xpathptr_new_context()
- */
-static void php_xpathptr_new_context(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval *id, *rv;
- xmlXPathContextPtr ctx;
- xmlDocPtr docp;
- int ret;
-
- DOMXML_PARAM_NONE(docp, id, le_domxmldocp);
-
-#if defined(LIBXML_XPTR_ENABLED)
- if (mode == PHP_XPTR)
- ctx = xmlXPtrNewContext(docp, NULL, NULL);
- else
-#endif
- ctx = xmlXPathNewContext(docp);
- if (!ctx) {
- RETURN_FALSE;
- }
-
- rv = php_xpathcontext_new(ctx, &ret TSRMLS_CC);
- DOMXML_RET_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object xpath_new_context([int doc_handle])
- Creates new XPath context */
-PHP_FUNCTION(xpath_new_context)
-{
- php_xpathptr_new_context(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPATH);
-}
-/* }}} */
-
-/* {{{ proto object xptr_new_context([int doc_handle])
- Creates new XPath context */
-PHP_FUNCTION(xptr_new_context)
-{
- php_xpathptr_new_context(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPTR);
-}
-/* }}} */
-
-/* {{{ php_xpathptr_eval()
- */
-static void php_xpathptr_eval(INTERNAL_FUNCTION_PARAMETERS, int mode, int expr)
-{
- zval *id, *rv, *contextnode = NULL;
- xmlXPathContextPtr ctxp;
- xmlXPathObjectPtr xpathobjp;
- xmlNode *contextnodep;
- int ret, str_len;
- char *str;
-
- contextnode = NULL;
- contextnodep = NULL;
-
- if (NULL == (id = getThis())) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "os|o", &id, &str, &str_len, &contextnode) == FAILURE) {
- return;
- }
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|o", &str, &str_len, &contextnode) == FAILURE) {
- return;
- }
- }
-
- ctxp = php_xpath_get_context(id, le_xpathctxp, 0 TSRMLS_CC);
- if (!ctxp) {
- php_error(E_WARNING, "%s(): cannot fetch XPATH context", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (contextnode) {
- DOMXML_GET_OBJ(contextnodep, contextnode, le_domxmlnodep);
- }
- ctxp->node = contextnodep;
-
-#if defined(LIBXML_XPTR_ENABLED)
- if (mode == PHP_XPTR) {
- xpathobjp = xmlXPtrEval(BAD_CAST str, ctxp);
- } else {
-#endif
- if (expr) {
- xpathobjp = xmlXPathEvalExpression(str, ctxp);
- } else {
- xpathobjp = xmlXPathEval(str, ctxp);
- }
-#if defined(LIBXML_XPTR_ENABLED)
- }
-#endif
-
- ctxp->node = NULL;
- if (!xpathobjp) {
- RETURN_FALSE;
- }
-
- if (NULL == (rv = php_xpathobject_new(xpathobjp, &ret TSRMLS_CC))) {
- php_error(E_WARNING, "%s(): cannot create required XPATH objcet", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- SEPARATE_ZVAL(&rv);
-
- add_property_long(rv, "type", Z_TYPE_P(xpathobjp));
-
- switch (Z_TYPE_P(xpathobjp)) {
-
- case XPATH_UNDEFINED:
- break;
-
- case XPATH_NODESET:
- {
- int i;
- zval *arr;
- xmlNodeSetPtr nodesetp;
-
- MAKE_STD_ZVAL(arr);
- if (array_init(arr) == FAILURE) {
- zval_dtor(rv);
- RETURN_FALSE;
- }
-
- if (NULL == (nodesetp = xpathobjp->nodesetval)) {
- zval_dtor(rv);
- RETURN_FALSE;
- }
-
- for (i = 0; i < nodesetp->nodeNr; i++) {
- xmlNodePtr node = nodesetp->nodeTab[i];
- zval *child;
- int retnode;
-
- /* construct a node object */
- child = php_domobject_new(node, &retnode TSRMLS_CC);
- zend_hash_next_index_insert(Z_ARRVAL_P(arr), &child, sizeof(zval *), NULL);
- }
- zend_hash_update(Z_OBJPROP_P(rv), "nodeset", sizeof("nodeset"), (void *) &arr, sizeof(zval *), NULL);
- break;
- }
-
- case XPATH_BOOLEAN:
- add_property_bool(rv, "value", xpathobjp->boolval);
- break;
-
- case XPATH_NUMBER:
- add_property_double(rv, "value", xpathobjp->floatval);
- break;
-
- case XPATH_STRING:
- add_property_string(rv, "value", xpathobjp->stringval, 1);
- break;
-
- case XPATH_POINT:
- break;
-
- case XPATH_RANGE:
- break;
-
- case XPATH_LOCATIONSET:
- break;
-
- case XPATH_USERS:
- break;
-
- case XPATH_XSLT_TREE:
- break;
- }
-
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object xpath_eval([object xpathctx_handle,] string str)
- Evaluates the XPath Location Path in the given string */
-PHP_FUNCTION(xpath_eval)
-{
- php_xpathptr_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPATH, 0);
-}
-/* }}} */
-
-/* {{{ proto object xpath_eval_expression([object xpathctx_handle,] string str)
- Evaluates the XPath expression in the given string */
-PHP_FUNCTION(xpath_eval_expression)
-{
- php_xpathptr_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPATH, 1);
-}
-/* }}} */
-
-/* {{{ proto bool xpath_register_ns([object xpathctx_handle,] string namespace_prefix, string namespace_uri)
- Registeres the given namespace in the passed XPath context */
-PHP_FUNCTION(xpath_register_ns)
-{
- /*
- TODO:
- - automagically register all namespaces when creating a new context
- */
-
- int prefix_len, uri_len, result;
- xmlXPathContextPtr ctxp;
- char *prefix, *uri, *uri_static;
- zval *id;
-
- DOMXML_PARAM_FOUR(ctxp, id, le_xpathctxp, "ss", &prefix, &prefix_len, &uri, &uri_len);
-
- /* set the context node to NULL - what is a context node anyway? */
- ctxp->node = NULL;
-
- /*
- this is a hack - libxml2 doesn't copy the URI, it simply uses the string
- given in the parameter - which is normally deallocated after the function
- */
- uri_static = estrndup(uri, uri_len);
- result = xmlXPathRegisterNs(ctxp, prefix, uri_static);
-
- if (0 == result) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-#endif /* defined(LIBXML_XPATH_ENABLED) */
-
-#if defined(LIBXML_XPTR_ENABLED)
-/* {{{ proto int xptr_eval([int xpathctx_handle,] string str)
- Evaluates the XPtr Location Path in the given string */
-PHP_FUNCTION(xptr_eval)
-{
- php_xpathptr_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPTR, 0);
-}
-/* }}} */
-#endif /* LIBXML_XPTR_ENABLED */
-
-/* {{{ proto string domxml_version(void)
- Get XML library version */
-PHP_FUNCTION(domxml_version)
-{
- RETURN_STRING(LIBXML_DOTTED_VERSION, 1);
-}
-/* }}} */
-
-
-
-#if HAVE_DOMXSLT
-static zval *php_xsltstylesheet_new(xsltStylesheetPtr obj, int *found TSRMLS_DC)
-{
- zval *wrapper;
- int rsrc_type;
-
- *found = 0;
-
- if (!obj) {
- MAKE_STD_ZVAL(wrapper);
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- if ((wrapper = (zval *) dom_object_get_data((void *) obj))) {
- zval_add_ref(&wrapper);
- *found = 1;
- return wrapper;
- }
-
- MAKE_STD_ZVAL(wrapper);
-
- object_init_ex(wrapper, domxsltstylesheet_class_entry);
- rsrc_type = le_domxsltstylesheetp;
- php_xsltstylesheet_set_object(wrapper, (void *) obj, rsrc_type);
-
- return (wrapper);
-}
-
-/* {{{ proto object domxml_xslt_stylesheet(string xsltstylesheet)
- Creates XSLT Stylesheet object from string */
-PHP_FUNCTION(domxml_xslt_stylesheet)
-{
- zval *rv;
- xmlDocPtr docp;
- xsltStylesheetPtr sheetp;
- int ret;
- char *buffer;
- int buffer_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buffer, &buffer_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- docp = xmlParseDoc(buffer);
-
- if (!docp)
- RETURN_FALSE;
-
- sheetp = xsltParseStylesheetDoc(docp);
-
- if (!sheetp)
- RETURN_FALSE;
-
- rv = php_xsltstylesheet_new(sheetp, &ret TSRMLS_CC);
- DOMXML_RET_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object domxml_xslt_stylesheet_doc(object xmldoc)
- Creates XSLT Stylesheet object from DOM Document object */
-PHP_FUNCTION(domxml_xslt_stylesheet_doc)
-{
- zval *rv, *idxml;
- xmlDocPtr docp;
- xmlDocPtr newdocp;
- xsltStylesheetPtr sheetp;
- int ret;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &idxml) == FAILURE) {
- RETURN_FALSE;
- }
-
- DOMXML_GET_OBJ(docp, idxml, le_domxmldocp);
-
- newdocp = xmlCopyDoc(docp, 1);
-
- if (!newdocp)
- RETURN_FALSE;
-
- sheetp = xsltParseStylesheetDoc(newdocp);
-
- if (!sheetp)
- RETURN_FALSE;
-
- rv = php_xsltstylesheet_new(sheetp, &ret TSRMLS_CC);
- DOMXML_RET_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object domxml_xslt_stylesheet_file(string filename)
- Creates XSLT Stylesheet object from file */
-PHP_FUNCTION(domxml_xslt_stylesheet_file)
-{
- zval *rv;
- xsltStylesheetPtr sheetp;
- int ret, file_len;
- char *file;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- sheetp = xsltParseStylesheetFile(file);
-
- if (!sheetp)
- RETURN_FALSE;
-
- rv = php_xsltstylesheet_new(sheetp, &ret TSRMLS_CC);
- DOMXML_RET_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ php_domxslt_string_to_xpathexpr()
- Translates a string to a XPath Expression */
-static char *php_domxslt_string_to_xpathexpr(const char *str TSRMLS_DC)
-{
- const xmlChar *string = (const xmlChar *)str;
-
- xmlChar *value;
-
- if (xmlStrchr(string, '"')) {
- if (xmlStrchr(string, '\'')) {
- php_error(E_WARNING, "Cannot create XPath expression (string contains both quote and double-quotes) in %s",
- get_active_function_name(TSRMLS_C));
- return NULL;
- }
- value = xmlStrdup((const xmlChar *)"'");
- value = xmlStrcat(value, string);
- value = xmlStrcat(value, (const xmlChar *)"'");
- } else {
- value = xmlStrdup((const xmlChar *)"\"");
- value = xmlStrcat(value, string);
- value = xmlStrcat(value, (const xmlChar *)"\"");
- }
-
- return (char *)value;
-}
-
-/* {{{ php_domxslt_make_params()
- Translates a PHP array to a libxslt parameters array */
-static char **php_domxslt_make_params(zval *idvars, int xpath_params TSRMLS_DC)
-{
- HashTable *parht;
- int parsize;
- zval **value;
- char *xpath_expr, *string_key = NULL;
- ulong num_key;
- char **params = NULL;
- int i = 0;
-
- parht = HASH_OF(idvars);
- parsize = (2 * zend_hash_num_elements(parht) + 1) * sizeof(char *);
- params = (char **)emalloc(parsize);
- memset((char *)params, 0, parsize);
-
- for (zend_hash_internal_pointer_reset(parht);
- zend_hash_get_current_data(parht, (void **)&value) == SUCCESS;
- zend_hash_move_forward(parht)) {
-
- if (zend_hash_get_current_key(parht, &string_key, &num_key, 1) != HASH_KEY_IS_STRING) {
- php_error(E_WARNING, "Invalid argument or parameter array to %s",
- get_active_function_name(TSRMLS_C));
- return NULL;
- }
- else {
- SEPARATE_ZVAL(value);
- convert_to_string_ex(value);
-
- if (!xpath_params) {
- xpath_expr = php_domxslt_string_to_xpathexpr(Z_STRVAL_PP(value) TSRMLS_CC);
- }
- else {
- xpath_expr = Z_STRVAL_PP(value);
- }
-
- if (xpath_expr) {
- params[i++] = string_key;
- params[i++] = xpath_expr;
- }
- }
- }
-
- params[i++] = NULL;
-
- return params;
-}
-
-/* {{{ proto object domxml_xslt_process(object xslstylesheet, object xmldoc [, array xslt_parameters [, bool xpath_parameters [, string profileFilename]]])
- Perform an XSLT transformation */
-PHP_FUNCTION(domxml_xslt_process)
-{
-/* TODO:
- - test memory deallocation
- - test other stuff
- - check xsltsp->errors ???
-*/
- zval *rv, *idxsl, *idxml, *idparams = NULL;
- zend_bool xpath_params = 0;
- xsltStylesheetPtr xsltstp;
- xmlDocPtr xmldocp;
- xmlDocPtr docp;
- char **params = NULL;
- int ret;
- char *filename;
- int filename_len = 0;
-
- DOMXML_GET_THIS(idxsl);
-
- xsltstp = php_xsltstylesheet_get_object(idxsl, le_domxsltstylesheetp, 0 TSRMLS_CC);
- if (!xsltstp) {
- php_error(E_WARNING, "%s(): underlying object missing",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|abs", &idxml, &idparams, &xpath_params, &filename, &filename_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- DOMXML_GET_OBJ(xmldocp, idxml, le_domxmldocp);
-
- if (idparams) {
- params = php_domxslt_make_params(idparams, xpath_params TSRMLS_CC);
- }
-
- if (filename_len) {
- FILE *f;
- f = fopen (filename,"w");
- docp = xsltProfileStylesheet(xsltstp, xmldocp, (const char**)params, f);
- fclose(f);
- } else {
- docp = xsltApplyStylesheet(xsltstp, xmldocp, (const char**)params);
- }
-
- if (params) {
- efree(params);
- }
-
- if (!docp) {
- RETURN_FALSE;
- }
-
- DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_xslt_version(void)
- Get XSLT library version */
-PHP_FUNCTION(domxml_xslt_version)
-{
- RETURN_STRING(LIBXSLT_DOTTED_VERSION, 1);
-}
-/* }}} */
-#endif /* HAVE_DOMXSLT */
-
-#endif /* HAVE_DOMXML */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/domxml/php_domxml.h b/ext/domxml/php_domxml.h
deleted file mode 100644
index 3a9ddba6cf..0000000000
--- a/ext/domxml/php_domxml.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann (Uwe.Steinmann@fernuni-hagen.de |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_DOMXML_H
-#define PHP_DOMXML_H
-
-#if HAVE_DOMXML
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/xmlerror.h>
-#if defined(LIBXML_HTML_ENABLED)
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#endif
-#if defined(LIBXML_XPATH_ENABLED)
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#endif
-#if defined(LIBXML_XPTR_ENABLED)
-#include <libxml/xpointer.h>
-#endif
-#if HAVE_DOMXSLT
-#include <libxslt/xsltconfig.h>
-#include <libxslt/xsltInternals.h>
-#include <libxslt/xsltutils.h>
-#include <libxslt/transform.h>
-#if HAVE_DOMEXSLT
-#include <libexslt/exslt.h>
-#include <libexslt/exsltconfig.h>
-#endif
-#endif
-
-extern zend_module_entry domxml_module_entry;
-#define domxml_module_ptr &domxml_module_entry
-
-/* directory functions */
-PHP_MINIT_FUNCTION(domxml);
-PHP_RINIT_FUNCTION(domxml);
-PHP_MINFO_FUNCTION(domxml);
-PHP_FUNCTION(domxml_version);
-PHP_FUNCTION(xmldoc);
-PHP_FUNCTION(xmldocfile);
-#if defined(LIBXML_HTML_ENABLED)
-PHP_FUNCTION(html_doc);
-PHP_FUNCTION(html_doc_file);
-#endif
-PHP_FUNCTION(domxml_xmltree);
-PHP_FUNCTION(domxml_new_xmldoc);
-PHP_FUNCTION(domxml_substitute_entities_default);
-
-/* Class Document methods */
-PHP_FUNCTION(domxml_doc_doctype);
-PHP_FUNCTION(domxml_doc_implementation);
-PHP_FUNCTION(domxml_doc_create_element);
-PHP_FUNCTION(domxml_doc_create_text_node);
-PHP_FUNCTION(domxml_doc_create_comment);
-PHP_FUNCTION(domxml_doc_create_processing_instruction);
-PHP_FUNCTION(domxml_doc_create_attribute);
-PHP_FUNCTION(domxml_doc_create_cdata_section);
-PHP_FUNCTION(domxml_doc_create_entity_reference);
-PHP_FUNCTION(domxml_doc_imported_node);
-PHP_FUNCTION(domxml_doc_add_root);
-PHP_FUNCTION(domxml_doc_document_element);
-PHP_FUNCTION(domxml_doc_set_root);
-PHP_FUNCTION(domxml_intdtd);
-PHP_FUNCTION(domxml_doc_ids);
-PHP_FUNCTION(domxml_dump_mem);
-PHP_FUNCTION(domxml_dump_mem_file);
-PHP_FUNCTION(domxml_dump_node);
-
-#if defined(LIBXML_HTML_ENABLED)
-PHP_FUNCTION(domxml_html_dump_mem);
-#endif
-
-/* Class DocumentType methods */
-PHP_FUNCTION(domxml_doctype_name);
-PHP_FUNCTION(domxml_doctype_entities);
-PHP_FUNCTION(domxml_doctype_notations);
-PHP_FUNCTION(domxml_doctype_public_id);
-PHP_FUNCTION(domxml_doctype_system_id);
-PHP_FUNCTION(domxml_doctype_internal_subset);
-
-/* Class Notation methods */
-PHP_FUNCTION(domxml_notation_public_id);
-PHP_FUNCTION(domxml_notation_system_id);
-
-/* Class Node methods */
-PHP_FUNCTION(domxml_node_attributes);
-PHP_FUNCTION(domxml_node_children);
-PHP_FUNCTION(domxml_node_first_child);
-PHP_FUNCTION(domxml_node_last_child);
-PHP_FUNCTION(domxml_node_next_sibling);
-PHP_FUNCTION(domxml_node_previous_sibling);
-PHP_FUNCTION(domxml_node_owner_document);
-PHP_FUNCTION(domxml_node_insert_before);
-PHP_FUNCTION(domxml_node_append_sibling);
-PHP_FUNCTION(domxml_node_append_child);
-PHP_FUNCTION(domxml_node_remove_child);
-PHP_FUNCTION(domxml_node_replace_child);
-PHP_FUNCTION(domxml_node_has_attributes);
-PHP_FUNCTION(domxml_node_has_child_nodes);
-PHP_FUNCTION(domxml_node_parent);
-PHP_FUNCTION(domxml_node_prefix);
-PHP_FUNCTION(domxml_node);
-PHP_FUNCTION(domxml_clone_node);
-PHP_FUNCTION(domxml_node_unlink_node);
-PHP_FUNCTION(domxml_node_replace_node);
-PHP_FUNCTION(domxml_node_new_child);
-PHP_FUNCTION(domxml_node_set_content);
-PHP_FUNCTION(domxml_node_get_content);
-PHP_FUNCTION(domxml_node_text_concat);
-PHP_FUNCTION(domxml_node_set_name);
-PHP_FUNCTION(domxml_node_name);
-PHP_FUNCTION(domxml_node_type);
-PHP_FUNCTION(domxml_node_value);
-PHP_FUNCTION(domxml_is_blank_node);
-
-/* Class Attribute methods */
-PHP_FUNCTION(domxml_attr_name);
-PHP_FUNCTION(domxml_attr_value);
-PHP_FUNCTION(domxml_attr_specified);
-
-/* Class Element methods */
-PHP_FUNCTION(domxml_element);
-PHP_FUNCTION(domxml_elem_tagname);
-PHP_FUNCTION(domxml_elem_get_attribute);
-PHP_FUNCTION(domxml_elem_set_attribute);
-PHP_FUNCTION(domxml_elem_remove_attribute);
-PHP_FUNCTION(domxml_elem_get_attribute_node);
-PHP_FUNCTION(domxml_elem_set_attribute_node);
-PHP_FUNCTION(domxml_elem_get_elements_by_tagname);
-PHP_FUNCTION(domxml_elem_has_attribute);
-/* Class CData methods */
-PHP_FUNCTION(domxml_cdata_length);
-
-/* Class Notation methods */
-PHP_FUNCTION(domxml_notation_public_id);
-PHP_FUNCTION(domxml_notation_system_id);
-
-/* Class Entity methods */
-PHP_FUNCTION(domxml_entity_public_id);
-PHP_FUNCTION(domxml_entity_system_id);
-PHP_FUNCTION(domxml_entity_notation_name);
-
-/* Class ProcessingInstructions */
-PHP_FUNCTION(domxml_pi_target);
-PHP_FUNCTION(domxml_pi_data);
-
-/* Class Parser methods */
-PHP_FUNCTION(domxml_parser);
-PHP_FUNCTION(domxml_parser_add_chunk);
-PHP_FUNCTION(domxml_parser_end);
-PHP_FUNCTION(domxml_parser_set_keep_blanks);
-
-/* Class XPathContext methods */
-#if defined(LIBXML_XPATH_ENABLED)
-PHP_FUNCTION(xpath_init);
-PHP_FUNCTION(xpath_new_context);
-PHP_FUNCTION(xpath_eval);
-PHP_FUNCTION(xpath_eval_expression);
-PHP_FUNCTION(xpath_register_ns);
-PHP_FUNCTION(domxml_doc_get_elements_by_tagname);
-PHP_FUNCTION(domxml_doc_get_element_by_id);
-#endif
-#if defined(LIBXML_XPTR_ENABLED)
-PHP_FUNCTION(xptr_new_context);
-PHP_FUNCTION(xptr_eval);
-#endif
-PHP_FUNCTION(domxml_test);
-
-/* DOMXSLT functions */
-#if HAVE_DOMXSLT
-PHP_FUNCTION(domxml_xslt_stylesheet);
-PHP_FUNCTION(domxml_xslt_stylesheet_doc);
-PHP_FUNCTION(domxml_xslt_stylesheet_file);
-PHP_FUNCTION(domxml_xslt_process);
-PHP_FUNCTION(domxml_xslt_version);
-#endif
-
-#else
-#define domxml_module_ptr NULL
-#endif /* HAVE_DOMXML */
-#define phpext_domxml_ptr domxml_module_ptr
-
-#endif /* _PHP_DIR_H */
diff --git a/ext/domxml/tests/001.phpt b/ext/domxml/tests/001.phpt
deleted file mode 100644
index a5b01e5e7b..0000000000
--- a/ext/domxml/tests/001.phpt
+++ /dev/null
@@ -1,289 +0,0 @@
---TEST--
-Test 1: Accessing single node
---SKIPIF--
-<?php if(!extension_loaded("domxml")) print "skip"; ?>
---POST--
---GET--
---FILE--
-
-<?php
-require_once("domxml_test.inc");
-
-echo "Test 1: accessing single nodes from php\n";
-$dom = xmldoc($xmlstr);
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-$children = $dom->children();
-print_node_list($children);
-
-echo "--------- root\n";
-$rootnode = $dom->root();
-print_node($rootnode);
-
-echo "--------- children of root\n";
-$children = $rootnode->children();
-print_node_list($children);
-
-// The last node should be identical with the last entry in the children array
-echo "--------- last\n";
-$last = $rootnode->last_child();
-print_node($last);
-
-// The parent of this last node is the root again
-echo "--------- parent\n";
-$parent = $last->parent();
-print_node($parent);
-
-// The children of this parent are the same children as one above
-echo "--------- children of parent\n";
-$children = $parent->children();
-print_node_list($children);
-
-echo "--------- creating a new attribute\n";
-//This is worthless
-//$attr = $dom->create_attribute("src", "picture.gif");
-//print_r($attr);
-
-//$rootnode->set_attribute_node($attr); /* Not implemented */
-$attr = $rootnode->set_attribute("src", "picture.gif");
-$attr = $rootnode->get_attribute("src");
-print_r($attr);
-print "\n";
-
-echo "--------- Get Attribute Node\n";
-$attr = $rootnode->get_attribute_node("src");
-print_node($attr);
-
-echo "--------- Remove Attribute Node\n";
-$attr = $rootnode->remove_attribute("src");
-print "Removed " . $attr . " attributes.\n";
-
-echo "--------- attributes of rootnode\n";
-$attrs = $rootnode->attributes();
-print_node_list($attrs);
-
-echo "--------- children of an attribute\n";
-$children = $attrs[0]->children();
-print_node_list($children);
-
-echo "--------- Add child to root\n";
-$newchild = $rootnode->new_child("Silly", "Symphony");
-print_node($newchild);
-print $dom->dumpmem();
-print "\n";
-
-echo "--------- Find element by tagname\n";
-echo " Using dom\n";
-$children = $dom->get_elements_by_tagname("Silly");
-print_node_list($children);
-echo " Using elem\n";
-$children = $rootnode->get_elements_by_tagname("Silly");
-print_node_list($children);
-
-echo "--------- Unlink Node\n";
-print_node($children[0]);
-//domxml_node_unlink_node($children[0]);
-$children[0]->unlink_node();
-print_node_list($rootnode->children());
-print $dom->dumpmem();
-
-echo "--------- Find element by id\n";
-print ("Not implemented\n");
-
-echo "--------- Check various node_name return values\n";
-print ("Not needed\n");
-
-?>
---EXPECT--
-Test 1: accessing single nodes from php
-Node Name:
-Node Type: 14
-Num Children: 1
-Node Content:
-
-Node Name: #comment
-Node Type: 8
-Num Children: 1
-Node Content: lsfj
-
-Node Name: chapter
-Node Type: 1
-Num Children: 4
-
---------- root
-Node Name: chapter
-Node Type: 1
-Num Children: 4
-
---------- children of root
-Node Name: title
-Node Type: 1
-Num Children: 1
-Node Content: Title
-
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
-Node Name: para
-Node Type: 1
-Num Children: 7
-
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
---------- last
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
---------- parent
-Node Name: chapter
-Node Type: 1
-Num Children: 4
-
---------- children of parent
-Node Name: title
-Node Type: 1
-Num Children: 1
-Node Content: Title
-
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
-Node Name: para
-Node Type: 1
-Num Children: 7
-
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
---------- creating a new attribute
-picture.gif
---------- Get Attribute Node
-Node Name: src
-Node Type: 2
-Num Children: 1
-Node Content: picture.gif
-
---------- Remove Attribute Node
-Removed 1 attributes.
---------- attributes of rootnode
-Node Name: language
-Node Type: 2
-Num Children: 1
-Node Content: en
-
---------- children of an attribute
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content: en
-
---------- Add child to root
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
-<?xml version="1.0" standalone="yes"?>
-<!DOCTYPE chapter SYSTEM "/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd" [
-<!ENTITY sp "spanish">
-]>
-<!-- lsfj -->
-<chapter language="en"><title language="en">Title</title>
-<para language="ge">
-&sp;
-<!-- comment -->
-<informaltable language="&sp;kkk">
-<tgroup cols="3">
-<tbody>
-<row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-<Silly>Symphony</Silly></chapter>
-
---------- Find element by tagname
- Using dom
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
- Using elem
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
---------- Unlink Node
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
-Node Name: title
-Node Type: 1
-Num Children: 1
-Node Content: Title
-
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
-Node Name: para
-Node Type: 1
-Num Children: 7
-
-Node Name: #text
-Node Type: 3
-Num Children: 1
-Node Content:
-
-
-<?xml version="1.0" standalone="yes"?>
-<!DOCTYPE chapter SYSTEM "/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd" [
-<!ENTITY sp "spanish">
-]>
-<!-- lsfj -->
-<chapter language="en"><title language="en">Title</title>
-<para language="ge">
-&sp;
-<!-- comment -->
-<informaltable language="&sp;kkk">
-<tgroup cols="3">
-<tbody>
-<row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-</chapter>
---------- Find element by id
-Not implemented
---------- Check various node_name return values
-Not needed
diff --git a/ext/domxml/tests/domxml_test.inc b/ext/domxml/tests/domxml_test.inc
deleted file mode 100644
index fa9b9e4baf..0000000000
--- a/ext/domxml/tests/domxml_test.inc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?PHP
-$xmlstr = "<?xml version='1.0' standalone='yes'?>
-<!DOCTYPE chapter SYSTEM '/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
-[ <!ENTITY sp \"spanish\">
-]>
-<!-- lsfj -->
-<chapter language='en'><title language='en'>Title</title>
-<para language='ge'>
-&sp;
-<!-- comment -->
-<informaltable language='&sp;kkk'>
-<tgroup cols='3'>
-<tbody>
-<row><entry>a1</entry><entry morerows='1'>b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-</chapter> ";
-
-function print_node($node)
-{
- print "Node Name: " . $node->node_name();
- print "\nNode Type: " . $node->node_type();
- print "\nNum Children: " . count($node->children());
- if(count($node->children()) <= 1){
- print "\nNode Content: " . $node->get_content();
- }
- print "\n\n";
-}
-
-function print_node_list($nodelist)
-{
- foreach($nodelist as $node)
- {
- print_node($node);
- }
-}
-
-?>
diff --git a/ext/dotnet/CREDITS b/ext/dotnet/CREDITS
deleted file mode 100644
index 154522c6f8..0000000000
--- a/ext/dotnet/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-dotnet
-Sam Ruby
diff --git a/ext/dotnet/EXPERIMENTAL b/ext/dotnet/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/dotnet/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/dotnet/README b/ext/dotnet/README
deleted file mode 100644
index 8cad7bab8f..0000000000
--- a/ext/dotnet/README
+++ /dev/null
@@ -1,32 +0,0 @@
-Warning
-=======
-
-This support is EXPERIMENTAL. In fact, it integrates code that
-Microsoft labels as pre-beta. Use at your own risk.
-
-Build instructions
-==================
-
-Download and install the .NET Framework SDK Technology Preview from
-http://msdn.microsoft.com/net/#sdk. Once installed, copy Mscoree.h
-(typically found in C:\Program Files\NGWSSDK\Include to ext\dotnet).
-Do not simply add the NGWSSDK\Include directory to the include path
-as this will cause compilation failures.
-
-Download and unzip the source to the dm.net COM Moniker from
-http://staff.develop.com/jasonw/clr/readme.htm. Copy mscorlib.h
-to ext\dotnet. There is no need to register the clrmonsrv.dll as
-it is not used.
-
-At this point, the dotnet project can be built like any other
-project, from either VisualStudio 6's GUI or from the command line.
-Example command line invocation:
-
- msdev dotnet.dsp /MAKE "dotnet - Win32 Debug_TS"
-
-Execution instructions:
-=======================
-
-Add "extension=php_dotnet.dll" into php.ini.
-
-Sample program can be found at dotnet.php
diff --git a/ext/dotnet/dotnet.cpp b/ext/dotnet/dotnet.cpp
deleted file mode 100644
index f507f3d2f3..0000000000
--- a/ext/dotnet/dotnet.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sam Ruby <rubys@us.ibm.com> |
- | Harald Radi <h.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * This module implements support for Microsoft .Net components.
- */
-
-/*
- * 28.1.2001
- * use external unicode conversion functions
- *
- * harald radi <h.radi@nme.at>
- */
-
-#ifdef PHP_WIN32
-
-#include <iostream>
-#include <math.h>
-#include <comdef.h>
-
-extern "C"
-{
-#include "php.h"
-#include "ext/standard/info.h"
-}
-
-#include "ext/com/conversion.h"
-#include "ext/com/php_COM.h"
-
-#include "Mscoree.h"
-#include "mscorlib.h"
-
-using namespace mscorlib;
-
-static ICorRuntimeHost *pHost;
-static mscorlib::_AppDomain *pDomain;
-
-static zend_class_entry dotnet_class_entry;
-static int codepage;
-
-HRESULT dotnet_init() {
- HRESULT hr;
-
- hr = CoCreateInstance(CLSID_CorRuntimeHost, NULL, CLSCTX_ALL,
- IID_ICorRuntimeHost, (void **)&pHost);
- if (FAILED(hr)) return hr;
-
- hr = pHost->Start();
- if (FAILED(hr)) return hr;
-
- IUnknown *uDomain;
- hr = pHost->GetDefaultDomain(&uDomain);
- if (FAILED(hr)) return hr;
-
- hr = uDomain->QueryInterface(__uuidof(_AppDomain), (void**) &pDomain);
- if (FAILED(hr)) return -1;
-
- uDomain->Release();
-
- return ERROR_SUCCESS;
-}
-
-HRESULT dotnet_create(OLECHAR *assembly, OLECHAR *datatype, comval *obj TSRMLS_DC) {
- HRESULT hr;
-
- _ObjectHandle *pHandle;
- hr = pDomain->CreateInstance(_bstr_t(assembly), _bstr_t(datatype), &pHandle);
- if (FAILED(hr)) return hr;
- if (!pHandle) return hr;
-
- _variant_t unwrapped;
- hr = pHandle->Unwrap(&unwrapped);
- pHandle->Release();
- if (FAILED(hr)) return hr;
-
- php_COM_set(obj, &unwrapped.pdispVal, TRUE TSRMLS_CC);
- return ERROR_SUCCESS;
-}
-
-void dotnet_term() {
- if (pHost) pHost->Stop();
- if (pHost) pHost->Release();
- if (pDomain) pDomain->Release();
-
- pHost = 0;
- pDomain = 0;
-}
-
-/* {{{ proto int dotnet_load(string assembly_name [, string datatype_name, int codepage])
- Loads a DOTNET module */
-PHP_FUNCTION(dotnet_load)
-{
- HRESULT hr;
- pval *assembly_name, *datatype_name, *code_page;
- OLECHAR *assembly, *datatype;
- comval *obj;
-
- switch(ZEND_NUM_ARGS())
- {
- case 2:
- getParameters(ht, 2, &assembly_name, &datatype_name);
- codepage = CP_ACP;
- break;
- case 3:
- getParameters(ht, 3, &assembly_name, &datatype_name, &code_page);
-
- convert_to_long(code_page);
- codepage = Z_LVAL_P(code_page);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string(assembly_name);
- assembly = php_char_to_OLECHAR(Z_STRVAL_P(assembly_name), Z_STRLEN_P(assembly_name), codepage TSRMLS_CC);
-
- convert_to_string(datatype_name);
- datatype = php_char_to_OLECHAR(Z_STRVAL_P(datatype_name), Z_STRLEN_P(datatype_name), codepage TSRMLS_CC);
-
- ALLOC_COM(obj);
-
- /* obtain IDispatch */
- hr = dotnet_create(assembly, datatype, obj TSRMLS_CC);
- efree(assembly);
- efree(datatype);
- if (FAILED(hr)) {
- char *error_message;
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING, "Error obtaining .Net class for %s in assembly %s: %s", datatype_name->value.str.val, assembly_name->value.str.val, error_message);
- LocalFree(error_message);
- efree(obj);
- RETURN_FALSE;
- }
- if (C_DISPATCH(obj) == NULL) {
- php_error(E_WARNING, "Unable to locate %s in assembly %s", datatype_name->value.str.val, assembly_name->value.str.val);
- efree(obj);
- RETURN_FALSE;
- }
-
- RETURN_LONG(zend_list_insert(obj, IS_COM));
-}
-/* }}} */
-
-
-void php_DOTNET_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
-
- if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL(function_name->element), "dotnet")) { /* constructor */
- pval *object_handle;
-
- PHP_FN(dotnet_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (!Z_LVAL_P(return_value)) {
- ZVAL_FALSE(object);
- return;
- }
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
- } else {
- php_COM_call_function_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, property_reference);
- }
-}
-
-void php_register_DOTNET_class(TSRMLS_D)
-{
- INIT_OVERLOADED_CLASS_ENTRY(dotnet_class_entry, "DOTNET", NULL,
- php_DOTNET_call_function_handler,
- php_COM_get_property_handler,
- php_COM_set_property_handler);
-
- zend_register_internal_class(&dotnet_class_entry TSRMLS_CC);
-}
-
-function_entry DOTNET_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static PHP_MINFO_FUNCTION(DOTNET)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, ".NET support", "enabled");
- php_info_print_table_end();
-}
-
-PHP_MINIT_FUNCTION(DOTNET)
-{
- HRESULT hr;
-
- if (FAILED(hr = dotnet_init())) {
- return hr;
- }
-
- php_register_DOTNET_class(TSRMLS_C);
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(DOTNET)
-{
- dotnet_term();
- return SUCCESS;
-}
-
-
-zend_module_entry dotnet_module_entry = {
- STANDARD_MODULE_HEADER,
- "dotnet", DOTNET_functions, PHP_MINIT(DOTNET), PHP_MSHUTDOWN(DOTNET), NULL, NULL, PHP_MINFO(DOTNET), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-BEGIN_EXTERN_C()
-ZEND_GET_MODULE(dotnet)
-END_EXTERN_C()
-
-#endif
diff --git a/ext/dotnet/dotnet.dsp b/ext/dotnet/dotnet.dsp
deleted file mode 100644
index 1a7d790802..0000000000
--- a/ext/dotnet/dotnet.dsp
+++ /dev/null
@@ -1,167 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dotnet" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dotnet - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dotnet.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dotnet.mak" CFG="dotnet - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dotnet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dotnet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dotnet - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dotnet - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dotnet - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "dotnet - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "dotnet - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /D /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dotnet.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "dotnet - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dotnet.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dotnet - Win32 Release"
-# Name "dotnet - Win32 Debug"
-# Name "dotnet - Win32 Debug_TS"
-# Name "dotnet - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dotnet.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_dotnet.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\README
-# End Source File
-# End Target
-# End Project
diff --git a/ext/dotnet/dotnet.php b/ext/dotnet/dotnet.php
deleted file mode 100644
index 3b0b67c02f..0000000000
--- a/ext/dotnet/dotnet.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?
- $stack = new DOTNET("mscorlib","System.Collections.Stack");
-
- $stack->Push(".Net");
- $stack->Push("Hello ");
-
- echo $stack->Pop() . $stack->Pop();
-?>
diff --git a/ext/dotnet/php_dotnet.h b/ext/dotnet/php_dotnet.h
deleted file mode 100644
index b56af145e2..0000000000
--- a/ext/dotnet/php_dotnet.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef PHP_DOTNET_H
-#define PHP_DOTNET_H
-
-#if WIN32|WINNT
-
-PHP_MINIT_FUNCTION(DOTNET);
-PHP_MSHUTDOWN_FUNCTION(DOTNET);
-PHP_FUNCTION(DOTNET_load);
-
-extern zend_module_entry DOTNET_module_entry;
-#define DOTNET_module_ptr &DOTNET_module_entry
-
-#else
-
-#define DOTNET_module_ptr NULL
-
-#endif /* Win32|WINNT */
-
-#define phpext_DOTNET_ptr DOTNET_module_ptr
-
-#endif /* PHP_DOTNET_H */
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c
deleted file mode 100644
index 0335347b39..0000000000
--- a/ext/ereg/ereg.c
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Jaakko Hyvätti <jaakko@hyvatti.iki.fi> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-#include "php_string.h"
-#include "reg.h"
-#include "ext/standard/info.h"
-
-#ifdef ZTS
-int reg_globals_id;
-#else
-static php_reg_globals reg_globals;
-#endif
-
-typedef struct {
- regex_t preg;
- int cflags;
-} reg_cache;
-
-/* {{{ _php_regcomp
- */
-static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
-{
- int r = 0;
- int patlen = strlen(pattern);
- reg_cache *rc = NULL;
- TSRMLS_FETCH();
-
- if(zend_hash_find(&REG(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == FAILURE ||
- rc->cflags != cflags) {
- r = regcomp(preg, pattern, cflags);
- if(!r) {
- reg_cache rcp;
-
- rcp.cflags = cflags;
- memcpy(&rcp.preg, preg, sizeof(*preg));
- zend_hash_update(&REG(ht_rc), (char *) pattern, patlen+1,
- (void *) &rcp, sizeof(rcp), NULL);
- }
- } else {
- memcpy(preg, &rc->preg, sizeof(*preg));
- }
-
- return r;
-}
-/* }}} */
-
-static void _free_reg_cache(reg_cache *rc)
-{
- regfree(&rc->preg);
-}
-
-#undef regfree
-#define regfree(a);
-#undef regcomp
-#define regcomp(a, b, c) _php_regcomp(a, b, c)
-
-static void php_reg_init_globals(php_reg_globals *reg_globals TSRMLS_DC)
-{
- zend_hash_init(&reg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_reg_cache, 1);
-}
-
-PHP_MINIT_FUNCTION(regex)
-{
-#ifdef ZTS
- ts_allocate_id(&reg_globals_id, sizeof(php_reg_globals), (ts_allocate_ctor) php_reg_init_globals, NULL);
-#else
- php_reg_init_globals(&reg_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(regex)
-{
- zend_hash_destroy(&REG(ht_rc));
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(regex)
-{
-#if HSREGEX
- php_info_print_table_row(2, "Regex Library", "Bundled library enabled");
-#else
- php_info_print_table_row(2, "Regex Library", "System library enabled");
-#endif
-}
-
-
-/* {{{ php_reg_eprint
- * php_reg_eprint - convert error number to name
- */
-static void php_reg_eprint(int err, regex_t *re) {
- char *buf = NULL, *message = NULL;
- size_t len;
- size_t buf_len;
-
-#ifdef REG_ITOA
- /* get the length of the message */
- buf_len = regerror(REG_ITOA | err, re, NULL, 0);
- if (buf_len) {
- buf = (char *)emalloc(buf_len * sizeof(char));
- if (!buf) return; /* fail silently */
- /* finally, get the error message */
- regerror(REG_ITOA | err, re, buf, buf_len);
- }
-#else
- buf_len = 0;
-#endif
- len = regerror(err, re, NULL, 0);
- if (len) {
- message = (char *)emalloc((buf_len + len + 2) * sizeof(char));
- if (!message) {
- return; /* fail silently */
- }
- if (buf_len) {
- snprintf(message, buf_len, "%s: ", buf);
- buf_len += 1; /* so pointer math below works */
- }
- /* drop the message into place */
- regerror(err, re, message + buf_len, len);
-
- php_error(E_WARNING, "%s", message);
- }
-
- STR_FREE(buf);
- STR_FREE(message);
-}
-/* }}} */
-
-/* {{{ php_ereg
- */
-static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **regex, /* Regular expression */
- **findin, /* String to apply expression to */
- **array = NULL; /* Optional register array */
- regex_t re;
- regmatch_t *subs;
- int err, match_len, string_len;
- uint i;
- int copts = 0;
- off_t start, end;
- char *buf = NULL;
- char *string = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &regex, &findin, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (icase)
- copts |= REG_ICASE;
-
- if (argc == 2)
- copts |= REG_NOSUB;
-
- /* compile the regular expression from the supplied regex */
- if (Z_TYPE_PP(regex) == IS_STRING) {
- err = regcomp(&re, Z_STRVAL_PP(regex), REG_EXTENDED | copts);
- } else {
- /* we convert numbers to integers and treat them as a string */
- if (Z_TYPE_PP(regex) == IS_DOUBLE)
- convert_to_long_ex(regex); /* get rid of decimal places */
- convert_to_string_ex(regex);
- /* don't bother doing an extended regex with just a number */
- err = regcomp(&re, Z_STRVAL_PP(regex), copts);
- }
-
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- /* make a copy of the string we're looking in */
- convert_to_string_ex(findin);
- string = estrndup(Z_STRVAL_PP(findin), Z_STRLEN_PP(findin));
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
- if (!subs) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg");
- RETURN_FALSE;
- }
-
- /* actually execute the regular expression */
- err = regexec(&re, string, re.re_nsub+1, subs, 0);
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- efree(subs);
- RETURN_FALSE;
- }
- match_len = 1;
-
- if (array && err != REG_NOMATCH) {
- match_len = (int) (subs[0].rm_eo - subs[0].rm_so);
- string_len = Z_STRLEN_PP(findin) + 1;
-
- buf = emalloc(string_len);
- if (!buf) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg");
- regfree(&re);
- efree(subs);
- RETURN_FALSE;
- }
-
- zval_dtor(*array); /* start with clean array */
- array_init(*array);
-
- for (i = 0; i <= re.re_nsub; i++) {
- start = subs[i].rm_so;
- end = subs[i].rm_eo;
- if (start != -1 && end > 0 && start < string_len && end < string_len && start < end) {
- add_index_stringl(*array, i, string+start, end-start, 1);
- } else {
- add_index_bool(*array, i, 0);
- }
- }
- efree(buf);
- }
-
- efree(subs);
- efree(string);
- if (err == REG_NOMATCH) {
- RETVAL_FALSE;
- } else {
- if (match_len == 0)
- match_len = 1;
- RETVAL_LONG(match_len);
- }
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto int ereg(string pattern, string string [, array registers])
- Regular expression match */
-PHP_FUNCTION(ereg)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int eregi(string pattern, string string [, array registers])
- Case-insensitive regular expression match */
-PHP_FUNCTION(eregi)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_reg_replace
- * this is the meat and potatoes of regex replacement! */
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended)
-{
- regex_t re;
- regmatch_t *subs;
-
- char *buf, /* buf is where we build the replaced string */
- *nbuf, /* nbuf is used when we grow the buffer */
- *walkbuf; /* used to walk buf when replacing backrefs */
- const char *walk; /* used to walk replacement string for backrefs */
- int buf_len;
- int pos, tmp, string_len, new_l;
- int err, copts = 0;
-
- string_len = strlen(string);
-
- if (icase)
- copts = REG_ICASE;
- if (extended)
- copts |= REG_EXTENDED;
-
- err = regcomp(&re, pattern, copts);
- if (err) {
- php_reg_eprint(err, &re);
- return ((char *) -1);
- }
-
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
- if (!subs) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg_replace");
- return ((char *) -1);
- }
-
- /* start with a buffer that is twice the size of the stringo
- we're doing replacements in */
- buf_len = 2 * string_len + 1;
- buf = emalloc(buf_len * sizeof(char));
- if (!buf) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg_replace");
- efree(subs);
- regfree(&re);
- return ((char *) -1);
- }
-
- err = pos = 0;
- buf[0] = '\0';
- while (!err) {
- err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0));
-
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- efree(subs);
- efree(buf);
- regfree(&re);
- return ((char *) -1);
- }
-
- if (!err) {
- /* backref replacement is done in two passes:
- 1) find out how long the string will be, and allocate buf
- 2) copy the part before match, replacement and backrefs to buf
-
- Jaakko Hyvätti <Jaakko.Hyvatti@iki.fi>
- */
-
- new_l = strlen(buf) + subs[0].rm_so; /* part before the match */
- walk = replace;
- while (*walk)
- if ('\\' == *walk
- && '0' <= walk[1] && '9' >= walk[1]
- && subs[walk[1] - '0'].rm_so > -1
- && subs[walk[1] - '0'].rm_eo > -1) {
- new_l += subs[walk[1] - '0'].rm_eo
- - subs[walk[1] - '0'].rm_so;
- walk += 2;
- } else {
- new_l++;
- walk++;
- }
-
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = emalloc(buf_len);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- tmp = strlen(buf);
- /* copy the part of the string before the match */
- strncat(buf, &string[pos], subs[0].rm_so);
-
- /* copy replacement and backrefs */
- walkbuf = &buf[tmp + subs[0].rm_so];
- walk = replace;
- while (*walk)
- if ('\\' == *walk
- && '0' <= walk[1] && '9' >= walk[1]
- && subs[walk[1] - '0'].rm_so > -1
- && subs[walk[1] - '0'].rm_eo > -1
- /* this next case shouldn't happen. it does. */
- && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) {
- tmp = subs[walk[1] - '0'].rm_eo
- - subs[walk[1] - '0'].rm_so;
- memcpy (walkbuf,
- &string[pos + subs[walk[1] - '0'].rm_so],
- tmp);
- walkbuf += tmp;
- walk += 2;
- } else
- *walkbuf++ = *walk++;
- *walkbuf = '\0';
-
- /* and get ready to keep looking for replacements */
- if (subs[0].rm_so == subs[0].rm_eo) {
- if (subs[0].rm_so + pos >= string_len)
- break;
- new_l = strlen (buf) + 1;
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = emalloc(buf_len * sizeof(char));
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- pos += subs[0].rm_eo + 1;
- buf [new_l-1] = string [pos-1];
- buf [new_l] = '\0';
- } else {
- pos += subs[0].rm_eo;
- }
- } else { /* REG_NOMATCH */
- new_l = strlen(buf) + strlen(&string[pos]);
- if (new_l + 1 > buf_len) {
- buf_len = new_l + 1; /* now we know exactly how long it is */
- nbuf = emalloc(buf_len * sizeof(char));
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- /* stick that last bit of string on our output */
- strcat(buf, &string[pos]);
- }
- }
-
- /* don't want to leak memory .. */
- efree(subs);
- regfree(&re);
-
- /* whew. */
- return (buf);
-}
-/* }}} */
-
-/* {{{ php_ereg_replace
- */
-static void php_ereg_replace(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **arg_pattern,
- **arg_replace,
- **arg_string;
- char *pattern;
- char *string;
- char *replace;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg_pattern, &arg_replace, &arg_string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg_pattern) == IS_STRING) {
- if (Z_STRVAL_PP(arg_pattern) && Z_STRLEN_PP(arg_pattern))
- pattern = estrndup(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern));
- else
- pattern = empty_string;
- } else {
- convert_to_long_ex(arg_pattern);
- pattern = emalloc(2);
- pattern[0] = (char) Z_LVAL_PP(arg_pattern);
- pattern[1] = '\0';
- }
-
- if (Z_TYPE_PP(arg_replace) == IS_STRING) {
- if (Z_STRVAL_PP(arg_replace) && Z_STRLEN_PP(arg_replace))
- replace = estrndup(Z_STRVAL_PP(arg_replace), Z_STRLEN_PP(arg_replace));
- else
- replace = empty_string;
- } else {
- convert_to_long_ex(arg_replace);
- replace = emalloc(2);
- replace[0] = (char) Z_LVAL_PP(arg_replace);
- replace[1] = '\0';
- }
-
- convert_to_string_ex(arg_string);
- if (Z_STRVAL_PP(arg_string) && Z_STRLEN_PP(arg_string))
- string = estrndup(Z_STRVAL_PP(arg_string), Z_STRLEN_PP(arg_string));
- else
- string = empty_string;
-
- /* do the actual work */
- ret = php_reg_replace(pattern, replace, string, icase, 1);
- if (ret == (char *) -1) {
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(ret, 1);
- STR_FREE(ret);
- }
-
- STR_FREE(string);
- STR_FREE(replace);
- STR_FREE(pattern);
-}
-/* }}} */
-
-/* {{{ proto string ereg_replace(string pattern, string replacement, string string)
- Replace regular expression */
-PHP_FUNCTION(ereg_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string eregi_replace(string pattern, string replacement, string string)
- Case insensitive replace regular expression */
-PHP_FUNCTION(eregi_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_split
- */
-static void php_split(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- zval **spliton, **str, **arg_count = NULL;
- regex_t re;
- regmatch_t subs[1];
- char *strp, *endp;
- int err, size, count = -1, copts = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &spliton, &str, &arg_count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 2) {
- convert_to_long_ex(arg_count);
- count = Z_LVAL_PP(arg_count);
- }
-
- if (icase)
- copts = REG_ICASE;
-
- convert_to_string_ex(spliton);
- convert_to_string_ex(str);
-
- strp = Z_STRVAL_PP(str);
- endp = strp + Z_STRLEN_PP(str);
-
- err = regcomp(&re, Z_STRVAL_PP(spliton), REG_EXTENDED | copts);
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- regfree(&re);
- RETURN_FALSE;
- }
-
- /* churn through str, generating array entries as we go */
- while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) {
- if (subs[0].rm_so == 0 && subs[0].rm_eo) {
- /* match is at start of string, return empty string */
- add_next_index_stringl(return_value, empty_string, 0, 1);
- /* skip ahead the length of the regex match */
- strp += subs[0].rm_eo;
- } else if (subs[0].rm_so == 0 && subs[0].rm_eo == 0) {
- /* No more matches */
- regfree(&re);
- php_error(E_WARNING, "Invalid Regular Expression to split()");
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- } else {
- /* On a real match */
-
- /* make a copy of the substring */
- size = subs[0].rm_so;
-
- /* add it to the array */
- add_next_index_stringl(return_value, strp, size, 1);
-
- /* point at our new starting point */
- strp = strp + subs[0].rm_eo;
- }
-
- /* if we're only looking for a certain number of points,
- stop looking once we hit it */
- if (count != -1) {
- count--;
- }
- }
-
- /* see if we encountered an error */
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- }
-
- /* otherwise we just have one last element to add to the array */
- size = endp - strp;
-
- add_next_index_stringl(return_value, strp, size, 1);
-
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto array split(string pattern, string string [, int limit])
- Split string into array by regular expression */
-PHP_FUNCTION(split)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array spliti(string pattern, string string [, int limit])
- Split string into array by regular expression case-insensitive */
-
-PHP_FUNCTION(spliti)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-
-/* {{{ proto string sql_regcase(string string)
- Make regular expression for case insensitive match */
-PHPAPI PHP_FUNCTION(sql_regcase)
-{
- zval **string;
- char *tmp;
- unsigned char c;
- register int i, j;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &string)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(string);
-
- tmp = emalloc((Z_STRLEN_PP(string) * 4) + 1);
-
- for (i = j = 0; i < Z_STRLEN_PP(string); i++) {
- c = (unsigned char) Z_STRVAL_PP(string)[i];
- if(isalpha(c)) {
- tmp[j++] = '[';
- tmp[j++] = toupper(c);
- tmp[j++] = tolower(c);
- tmp[j++] = ']';
- } else {
- tmp[j++] = c;
- }
- }
- tmp[j] = 0;
-
- RETVAL_STRINGL(tmp, j, 1);
- efree(tmp);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/ereg/php_ereg.h b/ext/ereg/php_ereg.h
deleted file mode 100644
index 38c99837e0..0000000000
--- a/ext/ereg/php_ereg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#ifndef REG_H
-#define REG_H
-
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended);
-
-PHP_FUNCTION(ereg);
-PHP_FUNCTION(eregi);
-PHP_FUNCTION(eregi_replace);
-PHP_FUNCTION(ereg_replace);
-PHP_FUNCTION(split);
-PHP_FUNCTION(spliti);
-PHPAPI PHP_FUNCTION(sql_regcase);
-
-typedef struct {
- HashTable ht_rc;
-} php_reg_globals;
-
-PHP_MINIT_FUNCTION(regex);
-PHP_MSHUTDOWN_FUNCTION(regex);
-PHP_MINFO_FUNCTION(regex);
-
-
-#ifdef ZTS
-#define REG(v) TSRMG(reg_globals_id, php_reg_globals *, v)
-#else
-#define REG(v) (reg_globals.v)
-#endif
-
-#endif /* REG_H */
diff --git a/ext/ereg/php_regex.h b/ext/ereg/php_regex.h
deleted file mode 100644
index c1d1e0c232..0000000000
--- a/ext/ereg/php_regex.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef PHP_REGEX_H
-#define PHP_REGEX_H
-
-/*
- * REGEX means:
- * 0.. system regex
- * 1.. bundled regex
- */
-
-#if REGEX
-/* get aliases */
-#include "regex/regex_extra.h"
-#include "regex/regex.h"
-
-/* get rid of aliases */
-#define PHP_NO_ALIASES
-#include "regex/regex_extra.h"
-#undef PHP_NO_ALIASES
-
-#undef _PCREPOSIX_H
-#define _PCREPOSIX_H 1
-
-#ifndef _REGEX_H
-#define _REGEX_H 1 /* this should stop Apache from loading the system version of regex.h */
-#endif
-#ifndef _REGEX_H_
-#define _REGEX_H_ 1
-#endif
-#ifndef _RX_H
-#define _RX_H 1 /* Try defining these for Linux to */
-#endif
-#ifndef __REGEXP_LIBRARY_H__
-#define __REGEXP_LIBRARY_H__ 1 /* avoid Apache including regex.h */
-#endif
-#ifndef _H_REGEX
-#define _H_REGEX 1 /* This one is for AIX */
-#endif
-#elif REGEX == 0
-#include <regex.h>
-#ifndef _REGEX_H_
-#define _REGEX_H_ 1
-#endif
-#endif
-
-#endif /* PHP_REGEX_H */
diff --git a/ext/ereg/regex/COPYRIGHT b/ext/ereg/regex/COPYRIGHT
deleted file mode 100644
index d43362fbfc..0000000000
--- a/ext/ereg/regex/COPYRIGHT
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
-This software is not subject to any license of the American Telephone
-and Telegraph Company or of the Regents of the University of California.
-
-Permission is granted to anyone to use this software for any purpose on
-any computer system, and to alter it and redistribute it, subject
-to the following restrictions:
-
-1. The author is not responsible for the consequences of use of this
- software, no matter how awful, even if they arise from flaws in it.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. Since few users ever read sources,
- credits must appear in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software. Since few users
- ever read sources, credits must appear in the documentation.
-
-4. This notice may not be removed or altered.
diff --git a/ext/ereg/regex/README b/ext/ereg/regex/README
deleted file mode 100644
index cea9b67b66..0000000000
--- a/ext/ereg/regex/README
+++ /dev/null
@@ -1,32 +0,0 @@
-alpha3.4 release.
-Thu Mar 17 23:17:18 EST 1994
-henry@zoo.toronto.edu
-
-See WHATSNEW for change listing.
-
-installation notes:
---------
-Read the comments at the beginning of Makefile before running.
-
-Utils.h contains some things that just might have to be modified on
-some systems, as well as a nested include (ugh) of <assert.h>.
-
-The "fake" directory contains quick-and-dirty fakes for some header
-files and routines that old systems may not have. Note also that
--DUSEBCOPY will make utils.h substitute bcopy() for memmove().
-
-After that, "make r" will build regcomp.o, regexec.o, regfree.o,
-and regerror.o (the actual routines), bundle them together into a test
-program, and run regression tests on them. No output is good output.
-
-"make lib" builds just the .o files for the actual routines (when
-you're happy with testing and have adjusted CFLAGS for production),
-and puts them together into libregex.a. You can pick up either the
-library or *.o ("make lib" makes sure there are no other .o files left
-around to confuse things).
-
-Main.c, debug.c, split.c are used for regression testing but are not part
-of the RE routines themselves.
-
-Regex.h goes in /usr/include. All other .h files are internal only.
---------
diff --git a/ext/ereg/regex/WHATSNEW b/ext/ereg/regex/WHATSNEW
deleted file mode 100644
index 6e82e1dae0..0000000000
--- a/ext/ereg/regex/WHATSNEW
+++ /dev/null
@@ -1,92 +0,0 @@
-New in alpha3.4: The complex bug alluded to below has been fixed (in a
-slightly kludgey temporary way that may hurt efficiency a bit; this is
-another "get it out the door for 4.4" release). The tests at the end of
-the tests file have accordingly been uncommented. The primary sign of
-the bug was that something like a?b matching ab matched b rather than ab.
-(The bug was essentially specific to this exact situation, else it would
-have shown up earlier.)
-
-New in alpha3.3: The definition of word boundaries has been altered
-slightly, to more closely match the usual programming notion that "_"
-is an alphabetic. Stuff used for pre-ANSI systems is now in a subdir,
-and the makefile no longer alludes to it in mysterious ways. The
-makefile has generally been cleaned up some. Fixes have been made
-(again!) so that the regression test will run without -DREDEBUG, at
-the cost of weaker checking. A workaround for a bug in some folks'
-<assert.h> has been added. And some more things have been added to
-tests, including a couple right at the end which are commented out
-because the code currently flunks them (complex bug; fix coming).
-Plus the usual minor cleanup.
-
-New in alpha3.2: Assorted bits of cleanup and portability improvement
-(the development base is now a BSDI system using GCC instead of an ancient
-Sun system, and the newer compiler exposed some glitches). Fix for a
-serious bug that affected REs using many [] (including REG_ICASE REs
-because of the way they are implemented), *sometimes*, depending on
-memory-allocation patterns. The header-file prototypes no longer name
-the parameters, avoiding possible name conflicts. The possibility that
-some clot has defined CHAR_MIN as (say) `-128' instead of `(-128)' is
-now handled gracefully. "uchar" is no longer used as an internal type
-name (too many people have the same idea). Still the same old lousy
-performance, alas.
-
-New in alpha3.1: Basically nothing, this release is just a bookkeeping
-convenience. Stay tuned.
-
-New in alpha3.0: Performance is no better, alas, but some fixes have been
-made and some functionality has been added. (This is basically the "get
-it out the door in time for 4.4" release.) One bug fix: regfree() didn't
-free the main internal structure (how embarrassing). It is now possible
-to put NULs in either the RE or the target string, using (resp.) a new
-REG_PEND flag and the old REG_STARTEND flag. The REG_NOSPEC flag to
-regcomp() makes all characters ordinary, so you can match a literal
-string easily (this will become more useful when performance improves!).
-There are now primitives to match beginnings and ends of words, although
-the syntax is disgusting and so is the implementation. The REG_ATOI
-debugging interface has changed a bit. And there has been considerable
-internal cleanup of various kinds.
-
-New in alpha2.3: Split change list out of README, and moved flags notes
-into Makefile. Macro-ized the name of regex(7) in regex(3), since it has
-to change for 4.4BSD. Cleanup work in engine.c, and some new regression
-tests to catch tricky cases thereof.
-
-New in alpha2.2: Out-of-date manpages updated. Regerror() acquires two
-small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging kludges
-in my own test program and might be useful to others for similar purposes.
-The regression test will now compile (and run) without REDEBUG. The
-BRE \$ bug is fixed. Most uses of "uchar" are gone; it's all chars now.
-Char/uchar parameters are now written int/unsigned, to avoid possible
-portability problems with unpromoted parameters. Some unsigned casts have
-been introduced to minimize portability problems with shifting into sign
-bits.
-
-New in alpha2.1: Lots of little stuff, cleanup and fixes. The one big
-thing is that regex.h is now generated, using mkh, rather than being
-supplied in the distribution; due to circularities in dependencies,
-you have to build regex.h explicitly by "make h". The two known bugs
-have been fixed (and the regression test now checks for them), as has a
-problem with assertions not being suppressed in the absence of REDEBUG.
-No performance work yet.
-
-New in alpha2: Backslash-anything is an ordinary character, not an
-error (except, of course, for the handful of backslashed metacharacters
-in BREs), which should reduce script breakage. The regression test
-checks *where* null strings are supposed to match, and has generally
-been tightened up somewhat. Small bug fixes in parameter passing (not
-harmful, but technically errors) and some other areas. Debugging
-invoked by defining REDEBUG rather than not defining NDEBUG.
-
-New in alpha+3: full prototyping for internal routines, using a little
-helper program, mkh, which extracts prototypes given in stylized comments.
-More minor cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple
-pre-screening of input when a literal string is known to be part of the
-RE; this does wonders for performance.
-
-New in alpha+2: minor bits of cleanup. Notably, the number "32" for the
-word width isn't hardwired into regexec.c any more, the public header
-file prototypes the functions if __STDC__ is defined, and some small typos
-in the manpages have been fixed.
-
-New in alpha+1: improvements to the manual pages, and an important
-extension, the REG_STARTEND option to regexec().
diff --git a/ext/ereg/regex/cclass.h b/ext/ereg/regex/cclass.h
deleted file mode 100644
index 6227f810b7..0000000000
--- a/ext/ereg/regex/cclass.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* character-class table */
-static struct cclass {
- char *name;
- char *chars;
- char *multis;
-} cclasses[] = {
- {"alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ""},
- {"alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
- ""},
- {"blank", " \t", ""},
- {"cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\
-\25\26\27\30\31\32\33\34\35\36\37\177", ""},
- {"digit", "0123456789", ""},
- {"graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
-0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- ""},
- {"lower", "abcdefghijklmnopqrstuvwxyz",
- ""},
- {"print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
-0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ",
- ""},
- {"punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- ""},
- {"space", "\t\n\v\f\r ", ""},
- {"upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- ""},
- {"xdigit", "0123456789ABCDEFabcdef",
- ""},
- {NULL, 0, ""}
-};
diff --git a/ext/ereg/regex/cname.h b/ext/ereg/regex/cname.h
deleted file mode 100644
index 670b273882..0000000000
--- a/ext/ereg/regex/cname.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* character-name table */
-static struct cname {
- char *name;
- char code;
-} cnames[] = {
- {"NUL", '\0'},
- {"SOH", '\001'},
- {"STX", '\002'},
- {"ETX", '\003'},
- {"EOT", '\004'},
- {"ENQ", '\005'},
- {"ACK", '\006'},
- {"BEL", '\007'},
- {"alert", '\007'},
- {"BS", '\010'},
- {"backspace", '\b'},
- {"HT", '\011'},
- {"tab", '\t'},
- {"LF", '\012'},
- {"newline", '\n'},
- {"VT", '\013'},
- {"vertical-tab", '\v'},
- {"FF", '\014'},
- {"form-feed", '\f'},
- {"CR", '\015'},
- {"carriage-return", '\r'},
- {"SO", '\016'},
- {"SI", '\017'},
- {"DLE", '\020'},
- {"DC1", '\021'},
- {"DC2", '\022'},
- {"DC3", '\023'},
- {"DC4", '\024'},
- {"NAK", '\025'},
- {"SYN", '\026'},
- {"ETB", '\027'},
- {"CAN", '\030'},
- {"EM", '\031'},
- {"SUB", '\032'},
- {"ESC", '\033'},
- {"IS4", '\034'},
- {"FS", '\034'},
- {"IS3", '\035'},
- {"GS", '\035'},
- {"IS2", '\036'},
- {"RS", '\036'},
- {"IS1", '\037'},
- {"US", '\037'},
- {"space", ' '},
- {"exclamation-mark", '!'},
- {"quotation-mark", '"'},
- {"number-sign", '#'},
- {"dollar-sign", '$'},
- {"percent-sign", '%'},
- {"ampersand", '&'},
- {"apostrophe", '\''},
- {"left-parenthesis", '('},
- {"right-parenthesis", ')'},
- {"asterisk", '*'},
- {"plus-sign", '+'},
- {"comma", ','},
- {"hyphen", '-'},
- {"hyphen-minus", '-'},
- {"period", '.'},
- {"full-stop", '.'},
- {"slash", '/'},
- {"solidus", '/'},
- {"zero", '0'},
- {"one", '1'},
- {"two", '2'},
- {"three", '3'},
- {"four", '4'},
- {"five", '5'},
- {"six", '6'},
- {"seven", '7'},
- {"eight", '8'},
- {"nine", '9'},
- {"colon", ':'},
- {"semicolon", ';'},
- {"less-than-sign", '<'},
- {"equals-sign", '='},
- {"greater-than-sign", '>'},
- {"question-mark", '?'},
- {"commercial-at", '@'},
- {"left-square-bracket", '['},
- {"backslash", '\\'},
- {"reverse-solidus", '\\'},
- {"right-square-bracket", ']'},
- {"circumflex", '^'},
- {"circumflex-accent", '^'},
- {"underscore", '_'},
- {"low-line", '_'},
- {"grave-accent", '`'},
- {"left-brace", '{'},
- {"left-curly-bracket", '{'},
- {"vertical-line", '|'},
- {"right-brace", '}'},
- {"right-curly-bracket", '}'},
- {"tilde", '~'},
- {"DEL", '\177'},
- {NULL, 0},
-};
diff --git a/ext/ereg/regex/debug.c b/ext/ereg/regex/debug.c
deleted file mode 100644
index c0feaeb169..0000000000
--- a/ext/ereg/regex/debug.c
+++ /dev/null
@@ -1,242 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-#include "debug.ih"
-
-/*
- - regprint - print a regexp for debugging
- == void regprint(regex_t *r, FILE *d);
- */
-void
-regprint(r, d)
-regex_t *r;
-FILE *d;
-{
- register struct re_guts *g = r->re_g;
- register int i;
- register int c;
- register int last;
- int nincat[NC];
-
- fprintf(d, "%ld states, %d categories", (long)g->nstates,
- g->ncategories);
- fprintf(d, ", first %ld last %ld", (long)g->firststate,
- (long)g->laststate);
- if (g->iflags&USEBOL)
- fprintf(d, ", USEBOL");
- if (g->iflags&USEEOL)
- fprintf(d, ", USEEOL");
- if (g->iflags&BAD)
- fprintf(d, ", BAD");
- if (g->nsub > 0)
- fprintf(d, ", nsub=%ld", (long)g->nsub);
- if (g->must != NULL)
- fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen,
- g->must);
- if (g->backrefs)
- fprintf(d, ", backrefs");
- if (g->nplus > 0)
- fprintf(d, ", nplus %ld", (long)g->nplus);
- fprintf(d, "\n");
- s_print(g, d);
- for (i = 0; i < g->ncategories; i++) {
- nincat[i] = 0;
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (g->categories[c] == i)
- nincat[i]++;
- }
- fprintf(d, "cc0#%d", nincat[0]);
- for (i = 1; i < g->ncategories; i++)
- if (nincat[i] == 1) {
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (g->categories[c] == i)
- break;
- fprintf(d, ", %d=%s", i, regchar(c));
- }
- fprintf(d, "\n");
- for (i = 1; i < g->ncategories; i++)
- if (nincat[i] != 1) {
- fprintf(d, "cc%d\t", i);
- last = -1;
- for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */
- if (c <= CHAR_MAX && g->categories[c] == i) {
- if (last < 0) {
- fprintf(d, "%s", regchar(c));
- last = c;
- }
- } else {
- if (last >= 0) {
- if (last != c-1)
- fprintf(d, "-%s",
- regchar(c-1));
- last = -1;
- }
- }
- fprintf(d, "\n");
- }
-}
-
-/*
- - s_print - print the strip for debugging
- == static void s_print(register struct re_guts *g, FILE *d);
- */
-static void
-s_print(g, d)
-register struct re_guts *g;
-FILE *d;
-{
- register sop *s;
- register cset *cs;
- register int i;
- register int done = 0;
- register sop opnd;
- register int col = 0;
- register int last;
- register sopno offset = 2;
-# define GAP() { if (offset % 5 == 0) { \
- if (col > 40) { \
- fprintf(d, "\n\t"); \
- col = 0; \
- } else { \
- fprintf(d, " "); \
- col++; \
- } \
- } else \
- col++; \
- offset++; \
- }
-
- if (OP(g->strip[0]) != OEND)
- fprintf(d, "missing initial OEND!\n");
- for (s = &g->strip[1]; !done; s++) {
- opnd = OPND(*s);
- switch (OP(*s)) {
- case OEND:
- fprintf(d, "\n");
- done = 1;
- break;
- case OCHAR:
- if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL)
- fprintf(d, "\\%c", (char)opnd);
- else
- fprintf(d, "%s", regchar((char)opnd));
- break;
- case OBOL:
- fprintf(d, "^");
- break;
- case OEOL:
- fprintf(d, "$");
- break;
- case OBOW:
- fprintf(d, "\\{");
- break;
- case OEOW:
- fprintf(d, "\\}");
- break;
- case OANY:
- fprintf(d, ".");
- break;
- case OANYOF:
- fprintf(d, "[(%ld)", (long)opnd);
- cs = &g->sets[opnd];
- last = -1;
- for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */
- if (CHIN(cs, i) && i < g->csetsize) {
- if (last < 0) {
- fprintf(d, "%s", regchar(i));
- last = i;
- }
- } else {
- if (last >= 0) {
- if (last != i-1)
- fprintf(d, "-%s",
- regchar(i-1));
- last = -1;
- }
- }
- fprintf(d, "]");
- break;
- case OBACK_:
- fprintf(d, "(\\<%ld>", (long)opnd);
- break;
- case O_BACK:
- fprintf(d, "<%ld>\\)", (long)opnd);
- break;
- case OPLUS_:
- fprintf(d, "(+");
- if (OP(*(s+opnd)) != O_PLUS)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_PLUS:
- if (OP(*(s-opnd)) != OPLUS_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "+)");
- break;
- case OQUEST_:
- fprintf(d, "(?");
- if (OP(*(s+opnd)) != O_QUEST)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_QUEST:
- if (OP(*(s-opnd)) != OQUEST_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "?)");
- break;
- case OLPAREN:
- fprintf(d, "((<%ld>", (long)opnd);
- break;
- case ORPAREN:
- fprintf(d, "<%ld>))", (long)opnd);
- break;
- case OCH_:
- fprintf(d, "<");
- if (OP(*(s+opnd)) != OOR2)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case OOR1:
- if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "|");
- break;
- case OOR2:
- fprintf(d, "|");
- if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_CH:
- if (OP(*(s-opnd)) != OOR1)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, ">");
- break;
- default:
- fprintf(d, "!%ld(%ld)!", OP(*s), opnd);
- break;
- }
- if (!done)
- GAP();
- }
-}
-
-/*
- - regchar - make a character printable
- == static char *regchar(int ch);
- */
-static char * /* -> representation */
-regchar(ch)
-int ch;
-{
- static char buf[10];
-
- if (isprint(ch) || ch == ' ')
- sprintf(buf, "%c", ch);
- else
- sprintf(buf, "\\%o", ch);
- return(buf);
-}
diff --git a/ext/ereg/regex/debug.ih b/ext/ereg/regex/debug.ih
deleted file mode 100644
index 5f40ff7917..0000000000
--- a/ext/ereg/regex/debug.ih
+++ /dev/null
@@ -1,14 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === debug.c === */
-void regprint(regex_t *r, FILE *d);
-static void s_print(register struct re_guts *g, FILE *d);
-static char *regchar(int ch);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/engine.c b/ext/ereg/regex/engine.c
deleted file mode 100644
index 0b88dcf1ed..0000000000
--- a/ext/ereg/regex/engine.c
+++ /dev/null
@@ -1,1019 +0,0 @@
-/*
- * The matching engine and friends. This file is #included by regexec.c
- * after suitable #defines of a variety of macros used herein, so that
- * different state representations can be used without duplicating masses
- * of code.
- */
-
-#ifdef SNAMES
-#define matcher smatcher
-#define fast sfast
-#define slow sslow
-#define dissect sdissect
-#define backref sbackref
-#define step sstep
-#define print sprint
-#define at sat
-#define match smat
-#endif
-#ifdef LNAMES
-#define matcher lmatcher
-#define fast lfast
-#define slow lslow
-#define dissect ldissect
-#define backref lbackref
-#define step lstep
-#define print lprint
-#define at lat
-#define match lmat
-#endif
-
-/* another structure passed up and down to avoid zillions of parameters */
-struct match {
- struct re_guts *g;
- int eflags;
- regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
- char *offp; /* offsets work from here */
- char *beginp; /* start of string -- virtual NUL precedes */
- char *endp; /* end of string -- virtual NUL here */
- char *coldp; /* can be no match starting before here */
- char **lastpos; /* [nplus+1] */
- STATEVARS;
- states st; /* current states */
- states fresh; /* states for a fresh start */
- states tmp; /* temporary */
- states empty; /* empty set of states */
-};
-
-#include "engine.ih"
-
-#ifdef REDEBUG
-#define SP(t, s, c) print(m, t, s, c, stdout)
-#define AT(t, p1, p2, s1, s2) at(m, t, p1, p2, s1, s2)
-#define NOTE(str) { if (m->eflags&REG_TRACE) printf("=%s\n", (str)); }
-#else
-#define SP(t, s, c) /* nothing */
-#define AT(t, p1, p2, s1, s2) /* nothing */
-#define NOTE(s) /* nothing */
-#endif
-
-/*
- - matcher - the actual matching engine
- == static int matcher(register struct re_guts *g, char *string, \
- == size_t nmatch, regmatch_t pmatch[], int eflags);
- */
-static int /* 0 success, REG_NOMATCH failure */
-matcher(g, string, nmatch, pmatch, eflags)
-register struct re_guts *g;
-char *string;
-size_t nmatch;
-regmatch_t pmatch[];
-int eflags;
-{
- register char *endp;
- register size_t i;
- struct match mv;
- register struct match *m = &mv;
- register char *dp;
- const register sopno gf = g->firststate+1; /* +1 for OEND */
- const register sopno gl = g->laststate;
- char *start;
- char *stop;
-
- /* simplify the situation where possible */
- if (g->cflags&REG_NOSUB)
- nmatch = 0;
- if (eflags&REG_STARTEND) {
- start = string + pmatch[0].rm_so;
- stop = string + pmatch[0].rm_eo;
- } else {
- start = string;
- stop = start + strlen(start);
- }
- if (stop < start)
- return(REG_INVARG);
-
- /* prescreening; this does wonders for this rather slow code */
- if (g->must != NULL) {
- for (dp = start; dp < stop; dp++)
- if (*dp == g->must[0] && stop - dp >= g->mlen &&
- memcmp(dp, g->must, (size_t)g->mlen) == 0)
- break;
- if (dp == stop) /* we didn't find g->must */
- return(REG_NOMATCH);
- }
-
- /* match struct setup */
- m->g = g;
- m->eflags = eflags;
- m->pmatch = NULL;
- m->lastpos = NULL;
- m->offp = string;
- m->beginp = start;
- m->endp = stop;
- STATESETUP(m, 4);
- SETUP(m->st);
- SETUP(m->fresh);
- SETUP(m->tmp);
- SETUP(m->empty);
- CLEAR(m->empty);
-
- /* this loop does only one repetition except for backrefs */
- for (;;) {
- endp = fast(m, start, stop, gf, gl);
- if (endp == NULL) { /* a miss */
- STATETEARDOWN(m);
- return(REG_NOMATCH);
- }
- if (nmatch == 0 && !g->backrefs)
- break; /* no further info needed */
-
- /* where? */
- assert(m->coldp != NULL);
- for (;;) {
- NOTE("finding start");
- endp = slow(m, m->coldp, stop, gf, gl);
- if (endp != NULL)
- break;
- assert(m->coldp < m->endp);
- m->coldp++;
- }
- if (nmatch == 1 && !g->backrefs)
- break; /* no further info needed */
-
- /* oh my, he wants the subexpressions... */
- if (m->pmatch == NULL)
- m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) *
- sizeof(regmatch_t));
- if (m->pmatch == NULL) {
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- for (i = 1; i <= m->g->nsub; i++)
- m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1;
- if (!g->backrefs && !(m->eflags&REG_BACKR)) {
- NOTE("dissecting");
- dp = dissect(m, m->coldp, endp, gf, gl);
- } else {
- if (g->nplus > 0 && m->lastpos == NULL)
- m->lastpos = (char **)malloc((g->nplus+1) *
- sizeof(char *));
- if (g->nplus > 0 && m->lastpos == NULL) {
- free(m->pmatch);
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- NOTE("backref dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0);
- }
- if (dp != NULL)
- break;
-
- /* uh-oh... we couldn't find a subexpression-level match */
- assert(g->backrefs); /* must be back references doing it */
- assert(g->nplus == 0 || m->lastpos != NULL);
- for (;;) {
- if (dp != NULL || endp <= m->coldp)
- break; /* defeat */
- NOTE("backoff");
- endp = slow(m, m->coldp, endp-1, gf, gl);
- if (endp == NULL)
- break; /* defeat */
- /* try it on a shorter possibility */
-#ifndef NDEBUG
- for (i = 1; i <= m->g->nsub; i++) {
- assert(m->pmatch[i].rm_so == -1);
- assert(m->pmatch[i].rm_eo == -1);
- }
-#endif
- NOTE("backoff dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0);
- }
- assert(dp == NULL || dp == endp);
- if (dp != NULL) /* found a shorter one */
- break;
-
- /* despite initial appearances, there is no match here */
- NOTE("false alarm");
- start = m->coldp + 1; /* recycle starting later */
- assert(start <= stop);
- }
-
- /* fill in the details if requested */
- if (nmatch > 0) {
- pmatch[0].rm_so = m->coldp - m->offp;
- pmatch[0].rm_eo = endp - m->offp;
- }
- if (nmatch > 1) {
- assert(m->pmatch != NULL);
- for (i = 1; i < nmatch; i++)
- if (i <= m->g->nsub)
- pmatch[i] = m->pmatch[i];
- else {
- pmatch[i].rm_so = -1;
- pmatch[i].rm_eo = -1;
- }
- }
-
- if (m->pmatch != NULL)
- free((char *)m->pmatch);
- if (m->lastpos != NULL)
- free((char *)m->lastpos);
- STATETEARDOWN(m);
- return(0);
-}
-
-/*
- - dissect - figure out what matched what, no back references
- == static char *dissect(register struct match *m, char *start, \
- == char *stop, sopno startst, sopno stopst);
- */
-static char * /* == stop (success) always */
-dissect(m, start, stop, startst, stopst)
-register struct match *m;
-char *start;
-char *stop;
-sopno startst;
-sopno stopst;
-{
- register int i;
- register sopno ss; /* start sop of current subRE */
- register sopno es; /* end sop of current subRE */
- register char *sp; /* start of string matched by it */
- register char *stp; /* string matched by it cannot pass here */
- register char *rest; /* start of rest of string */
- register char *tail; /* string unmatched by rest of RE */
- register sopno ssub; /* start sop of subsubRE */
- register sopno esub; /* end sop of subsubRE */
- register char *ssp; /* start of string matched by subsubRE */
- register char *sep; /* end of string matched by subsubRE */
- register char *oldssp; /* previous ssp */
- register char *dp;
-
- AT("diss", start, stop, startst, stopst);
- sp = start;
- for (ss = startst; ss < stopst; ss = es) {
- /* identify end of subRE */
- es = ss;
- switch (OP(m->g->strip[es])) {
- case OPLUS_:
- case OQUEST_:
- es += OPND(m->g->strip[es]);
- break;
- case OCH_:
- while (OP(m->g->strip[es]) != O_CH)
- es += OPND(m->g->strip[es]);
- break;
- }
- es++;
-
- /* figure out what it matched */
- switch (OP(m->g->strip[ss])) {
- case OEND:
- assert(nope);
- break;
- case OCHAR:
- sp++;
- break;
- case OBOL:
- case OEOL:
- case OBOW:
- case OEOW:
- break;
- case OANY:
- case OANYOF:
- sp++;
- break;
- case OBACK_:
- case O_BACK:
- assert(nope);
- break;
- /* cases where length of match is hard to find */
- case OQUEST_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- /* did innards match? */
- if (slow(m, sp, rest, ssub, esub) != NULL) {
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- } else /* no */
- assert(sp == rest);
- sp = rest;
- break;
- case OPLUS_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- ssp = sp;
- oldssp = ssp;
- for (;;) { /* find last match of innards */
- sep = slow(m, ssp, rest, ssub, esub);
- if (sep == NULL || sep == ssp)
- break; /* failed or matched null */
- oldssp = ssp; /* on to next try */
- ssp = sep;
- }
- if (sep == NULL) {
- /* last successful match */
- sep = ssp;
- ssp = oldssp;
- }
- assert(sep == rest); /* must exhaust substring */
- assert(slow(m, ssp, sep, ssub, esub) == rest);
- dp = dissect(m, ssp, sep, ssub, esub);
- assert(dp == sep);
- sp = rest;
- break;
- case OCH_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = ss + OPND(m->g->strip[ss]) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- if (slow(m, sp, rest, ssub, esub) == rest)
- break; /* it matched all of it */
- /* that one missed, try next one */
- assert(OP(m->g->strip[esub]) == OOR1);
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- sp = rest;
- break;
- case O_PLUS:
- case O_QUEST:
- case OOR1:
- case OOR2:
- case O_CH:
- assert(nope);
- break;
- case OLPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_so = sp - m->offp;
- break;
- case ORPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_eo = sp - m->offp;
- break;
- default: /* uh oh */
- assert(nope);
- break;
- }
- }
-
- assert(sp == stop);
- return(sp);
-}
-
-/*
- - backref - figure out what matched what, figuring in back references
- == static char *backref(register struct match *m, char *start, \
- == char *stop, sopno startst, sopno stopst, sopno lev);
- */
-static char * /* == stop (success) or NULL (failure) */
-backref(m, start, stop, startst, stopst, lev)
-register struct match *m;
-char *start;
-char *stop;
-sopno startst;
-sopno stopst;
-sopno lev; /* PLUS nesting level */
-{
- register int i;
- register sopno ss; /* start sop of current subRE */
- register char *sp; /* start of string matched by it */
- register sopno ssub; /* start sop of subsubRE */
- register sopno esub; /* end sop of subsubRE */
- register char *ssp; /* start of string matched by subsubRE */
- register char *dp;
- register size_t len;
- register int hard;
- register sop s;
- register regoff_t offsave;
- register cset *cs;
-
- AT("back", start, stop, startst, stopst);
- sp = start;
-
- /* get as far as we can with easy stuff */
- hard = 0;
- for (ss = startst; !hard && ss < stopst; ss++)
- switch (OP(s = m->g->strip[ss])) {
- case OCHAR:
- if (sp == stop || *sp++ != (char)OPND(s))
- return(NULL);
- break;
- case OANY:
- if (sp == stop)
- return(NULL);
- sp++;
- break;
- case OANYOF:
- cs = &m->g->sets[OPND(s)];
- if (sp == stop || !CHIN(cs, *sp++))
- return(NULL);
- break;
- case OBOL:
- if ( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOL:
- if ( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OBOW:
- if (( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp > m->beginp &&
- !ISWORD(*(sp-1))) ) &&
- (sp < m->endp && ISWORD(*sp)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOW:
- if (( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp < m->endp && !ISWORD(*sp)) ) &&
- (sp > m->beginp && ISWORD(*(sp-1))) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case O_QUEST:
- break;
- case OOR1: /* matches null but needs to skip */
- ss++;
- s = m->g->strip[ss];
- do {
- assert(OP(s) == OOR2);
- ss += OPND(s);
- } while (OP(s = m->g->strip[ss]) != O_CH);
- /* note that the ss++ gets us past the O_CH */
- break;
- default: /* have to make a choice */
- hard = 1;
- break;
- }
- if (!hard) { /* that was it! */
- if (sp != stop)
- return(NULL);
- return(sp);
- }
- ss--; /* adjust for the for's final increment */
-
- /* the hard stuff */
- AT("hard", sp, stop, ss, stopst);
- s = m->g->strip[ss];
- switch (OP(s)) {
- case OBACK_: /* the vilest depths */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- if (m->pmatch[i].rm_eo == -1)
- return(NULL);
- assert(m->pmatch[i].rm_so != -1);
- len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so;
- assert(stop - m->beginp >= len);
- if (sp > stop - len)
- return(NULL); /* not enough left to match */
- ssp = m->offp + m->pmatch[i].rm_so;
- if (memcmp(sp, ssp, len) != 0)
- return(NULL);
- while (m->g->strip[ss] != SOP(O_BACK, i))
- ss++;
- return(backref(m, sp+len, stop, ss+1, stopst, lev));
- break;
- case OQUEST_: /* to null or not */
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp); /* not */
- return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev));
- break;
- case OPLUS_:
- assert(m->lastpos != NULL);
- assert(lev+1 <= m->g->nplus);
- m->lastpos[lev+1] = sp;
- return(backref(m, sp, stop, ss+1, stopst, lev+1));
- break;
- case O_PLUS:
- if (sp == m->lastpos[lev]) /* last pass matched null */
- return(backref(m, sp, stop, ss+1, stopst, lev-1));
- /* try another pass */
- m->lastpos[lev] = sp;
- dp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev);
- if (dp == NULL)
- return(backref(m, sp, stop, ss+1, stopst, lev-1));
- else
- return(dp);
- break;
- case OCH_: /* find the right one, if any */
- ssub = ss + 1;
- esub = ss + OPND(s) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- dp = backref(m, sp, stop, ssub, esub, lev);
- if (dp != NULL)
- return(dp);
- /* that one missed, try next one */
- if (OP(m->g->strip[esub]) == O_CH)
- return(NULL); /* there is none */
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- break;
- case OLPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_so;
- m->pmatch[i].rm_so = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_so = offsave;
- return(NULL);
- break;
- case ORPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_eo;
- m->pmatch[i].rm_eo = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_eo = offsave;
- return(NULL);
- break;
- default: /* uh oh */
- assert(nope);
- break;
- }
-
- /* "can't happen" */
- assert(nope);
- /* NOTREACHED */
- return((char *)NULL); /* dummy */
-}
-
-/*
- - fast - step through the string at top speed
- == static char *fast(register struct match *m, char *start, \
- == char *stop, sopno startst, sopno stopst);
- */
-static char * /* where tentative match ended, or NULL */
-fast(m, start, stop, startst, stopst)
-register struct match *m;
-char *start;
-char *stop;
-sopno startst;
-sopno stopst;
-{
- register states st = m->st;
- register states fresh = m->fresh;
- register states tmp = m->tmp;
- register char *p = start;
- register int c = (start == m->beginp) ? OUT : *(start-1);
- register int lastc; /* previous c */
- register int flagch;
- register int i;
- register char *coldp; /* last p after which no match was underway */
-
- CLEAR(st);
- SET1(st, startst);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- ASSIGN(fresh, st);
- SP("start", st, *p);
- coldp = NULL;
- for (;;) {
- /* next character */
- lastc = c;
- c = (p == m->endp) ? OUT : *p;
- if (EQ(st, fresh))
- coldp = p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst) || p == stop)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, fresh);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("aft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p++;
- }
-
- assert(coldp != NULL);
- m->coldp = coldp;
- if (ISSET(st, stopst))
- return(p+1);
- else
- return(NULL);
-}
-
-/*
- - slow - step through the string more deliberately
- == static char *slow(register struct match *m, char *start, \
- == char *stop, sopno startst, sopno stopst);
- */
-static char * /* where it ended */
-slow(m, start, stop, startst, stopst)
-register struct match *m;
-char *start;
-char *stop;
-sopno startst;
-sopno stopst;
-{
- register states st = m->st;
- register states empty = m->empty;
- register states tmp = m->tmp;
- register char *p = start;
- register int c = (start == m->beginp) ? OUT : *(start-1);
- register int lastc; /* previous c */
- register int flagch;
- register int i;
- register char *matchp; /* last p at which a match ended */
-
- AT("slow", start, stop, startst, stopst);
- CLEAR(st);
- SET1(st, startst);
- SP("sstart", st, *p);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- matchp = NULL;
- for (;;) {
- /* next character */
- lastc = c;
- c = (p == m->endp) ? OUT : *p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst))
- matchp = p;
- if (EQ(st, empty) || p == stop)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, empty);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("saft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p++;
- }
-
- return(matchp);
-}
-
-
-/*
- - step - map set of states reachable before char to set reachable after
- == static states step(register struct re_guts *g, sopno start, sopno stop, \
- == register states bef, int ch, register states aft);
- == #define BOL (OUT+1)
- == #define EOL (BOL+1)
- == #define BOLEOL (BOL+2)
- == #define NOTHING (BOL+3)
- == #define BOW (BOL+4)
- == #define EOW (BOL+5)
- == #define CODEMAX (BOL+5) // highest code used
- == #define NONCHAR(c) ((c) > CHAR_MAX)
- == #define NNONCHAR (CODEMAX-CHAR_MAX)
- */
-static states
-step(g, start, stop, bef, ch, aft)
-register struct re_guts *g;
-sopno start; /* start state within strip */
-sopno stop; /* state after stop state within strip */
-register states bef; /* states reachable before */
-int ch; /* character or NONCHAR code */
-register states aft; /* states already known reachable after */
-{
- register cset *cs;
- register sop s;
- register sopno pc;
- register onestate here; /* note, macros know this name */
- register sopno look;
- register long i;
-
- for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) {
- s = g->strip[pc];
- switch (OP(s)) {
- case OEND:
- assert(pc == stop-1);
- break;
- case OCHAR:
- /* only characters can match */
- assert(!NONCHAR(ch) || ch != (char)OPND(s));
- if (ch == (char)OPND(s))
- FWD(aft, bef, 1);
- break;
- case OBOL:
- if (ch == BOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OEOL:
- if (ch == EOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OBOW:
- if (ch == BOW)
- FWD(aft, bef, 1);
- break;
- case OEOW:
- if (ch == EOW)
- FWD(aft, bef, 1);
- break;
- case OANY:
- if (!NONCHAR(ch))
- FWD(aft, bef, 1);
- break;
- case OANYOF:
- cs = &g->sets[OPND(s)];
- if (!NONCHAR(ch) && CHIN(cs, ch))
- FWD(aft, bef, 1);
- break;
- case OBACK_: /* ignored here */
- case O_BACK:
- FWD(aft, aft, 1);
- break;
- case OPLUS_: /* forward, this is just an empty */
- FWD(aft, aft, 1);
- break;
- case O_PLUS: /* both forward and back */
- FWD(aft, aft, 1);
- i = ISSETBACK(aft, OPND(s));
- BACK(aft, aft, OPND(s));
- if (!i && ISSETBACK(aft, OPND(s))) {
- /* oho, must reconsider loop body */
- pc -= OPND(s) + 1;
- INIT(here, pc);
- }
- break;
- case OQUEST_: /* two branches, both forward */
- FWD(aft, aft, 1);
- FWD(aft, aft, OPND(s));
- break;
- case O_QUEST: /* just an empty */
- FWD(aft, aft, 1);
- break;
- case OLPAREN: /* not significant here */
- case ORPAREN:
- FWD(aft, aft, 1);
- break;
- case OCH_: /* mark the first two branches */
- FWD(aft, aft, 1);
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- break;
- case OOR1: /* done a branch, find the O_CH */
- if (ISSTATEIN(aft, here)) {
- for (look = 1;
- OP(s = g->strip[pc+look]) != O_CH;
- look += OPND(s))
- assert(OP(s) == OOR2);
- FWD(aft, aft, look);
- }
- break;
- case OOR2: /* propagate OCH_'s marking */
- FWD(aft, aft, 1);
- if (OP(g->strip[pc+OPND(s)]) != O_CH) {
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- }
- break;
- case O_CH: /* just empty */
- FWD(aft, aft, 1);
- break;
- default: /* ooooops... */
- assert(nope);
- break;
- }
- }
-
- return(aft);
-}
-
-#ifdef REDEBUG
-/*
- - print - print a set of states
- == #ifdef REDEBUG
- == static void print(struct match *m, char *caption, states st, \
- == int ch, FILE *d);
- == #endif
- */
-static void
-print(m, caption, st, ch, d)
-struct match *m;
-char *caption;
-states st;
-int ch;
-FILE *d;
-{
- register struct re_guts *g = m->g;
- register int i;
- register int first = 1;
-
- if (!(m->eflags&REG_TRACE))
- return;
-
- fprintf(d, "%s", caption);
- if (ch != '\0')
- fprintf(d, " %s", pchar(ch));
- for (i = 0; i < g->nstates; i++)
- if (ISSET(st, i)) {
- fprintf(d, "%s%d", (first) ? "\t" : ", ", i);
- first = 0;
- }
- fprintf(d, "\n");
-}
-
-/*
- - at - print current situation
- == #ifdef REDEBUG
- == static void at(struct match *m, char *title, char *start, char *stop, \
- == sopno startst, sopno stopst);
- == #endif
- */
-static void
-at(m, title, start, stop, startst, stopst)
-struct match *m;
-char *title;
-char *start;
-char *stop;
-sopno startst;
-sopno stopst;
-{
- if (!(m->eflags&REG_TRACE))
- return;
-
- printf("%s %s-", title, pchar(*start));
- printf("%s ", pchar(*stop));
- printf("%ld-%ld\n", (long)startst, (long)stopst);
-}
-
-#ifndef PCHARDONE
-#define PCHARDONE /* never again */
-/*
- - pchar - make a character printable
- == #ifdef REDEBUG
- == static char *pchar(int ch);
- == #endif
- *
- * Is this identical to regchar() over in debug.c? Well, yes. But a
- * duplicate here avoids having a debugging-capable regexec.o tied to
- * a matching debug.o, and this is convenient. It all disappears in
- * the non-debug compilation anyway, so it doesn't matter much.
- */
-static char * /* -> representation */
-pchar(ch)
-int ch;
-{
- static char pbuf[10];
-
- if (isprint(ch) || ch == ' ')
- sprintf(pbuf, "%c", ch);
- else
- sprintf(pbuf, "\\%o", ch);
- return(pbuf);
-}
-#endif
-#endif
-
-#undef matcher
-#undef fast
-#undef slow
-#undef dissect
-#undef backref
-#undef step
-#undef print
-#undef at
-#undef match
diff --git a/ext/ereg/regex/engine.ih b/ext/ereg/regex/engine.ih
deleted file mode 100644
index cc98334e75..0000000000
--- a/ext/ereg/regex/engine.ih
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === engine.c === */
-static int matcher(register struct re_guts *g, char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
-static char *dissect(register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
-static char *backref(register struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev);
-static char *fast(register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
-static char *slow(register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
-static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft);
-#define BOL (OUT+1)
-#define EOL (BOL+1)
-#define BOLEOL (BOL+2)
-#define NOTHING (BOL+3)
-#define BOW (BOL+4)
-#define EOW (BOL+5)
-#define CODEMAX (BOL+5) /* highest code used */
-#define NONCHAR(c) ((c) > CHAR_MAX)
-#define NNONCHAR (CODEMAX-CHAR_MAX)
-#ifdef REDEBUG
-static void print(struct match *m, char *caption, states st, int ch, FILE *d);
-#endif
-#ifdef REDEBUG
-static void at(struct match *m, char *title, char *start, char *stop, sopno startst, sopno stopst);
-#endif
-#ifdef REDEBUG
-static char *pchar(int ch);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/main.c b/ext/ereg/regex/main.c
deleted file mode 100644
index 657338a2c1..0000000000
--- a/ext/ereg/regex/main.c
+++ /dev/null
@@ -1,510 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <regex.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "main.ih"
-
-char *progname;
-int debug = 0;
-int line = 0;
-int status = 0;
-
-int copts = REG_EXTENDED;
-int eopts = 0;
-regoff_t startoff = 0;
-regoff_t endoff = 0;
-
-
-extern int split();
-extern void regprint();
-
-/*
- - main - do the simple case, hand off to regress() for regression
- */
-int main(argc, argv)
-int argc;
-char *argv[];
-{
- regex_t re;
-# define NS 10
- regmatch_t subs[NS];
- char erbuf[100];
- int err;
- size_t len;
- int c;
- int errflg = 0;
- register int i;
- extern int optind;
- extern char *optarg;
-
- progname = argv[0];
-
- while ((c = getopt(argc, argv, "c:e:S:E:x")) != EOF)
- switch (c) {
- case 'c': /* compile options */
- copts = options('c', optarg);
- break;
- case 'e': /* execute options */
- eopts = options('e', optarg);
- break;
- case 'S': /* start offset */
- startoff = (regoff_t)atoi(optarg);
- break;
- case 'E': /* end offset */
- endoff = (regoff_t)atoi(optarg);
- break;
- case 'x': /* Debugging. */
- debug++;
- break;
- case '?':
- default:
- errflg++;
- break;
- }
- if (errflg) {
- fprintf(stderr, "usage: %s ", progname);
- fprintf(stderr, "[-c copt][-C][-d] [re]\n");
- exit(2);
- }
-
- if (optind >= argc) {
- regress(stdin);
- exit(status);
- }
-
- err = regcomp(&re, argv[optind++], copts);
- if (err) {
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "error %s, %d/%d `%s'\n",
- eprint(err), len, sizeof(erbuf), erbuf);
- exit(status);
- }
- regprint(&re, stdout);
-
- if (optind >= argc) {
- regfree(&re);
- exit(status);
- }
-
- if (eopts&REG_STARTEND) {
- subs[0].rm_so = startoff;
- subs[0].rm_eo = strlen(argv[optind]) - endoff;
- }
- err = regexec(&re, argv[optind], (size_t)NS, subs, eopts);
- if (err) {
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "error %s, %d/%d `%s'\n",
- eprint(err), len, sizeof(erbuf), erbuf);
- exit(status);
- }
- if (!(copts&REG_NOSUB)) {
- len = (int)(subs[0].rm_eo - subs[0].rm_so);
- if (subs[0].rm_so != -1) {
- if (len != 0)
- printf("match `%.*s'\n", (int)len,
- argv[optind] + subs[0].rm_so);
- else
- printf("match `'@%.1s\n",
- argv[optind] + subs[0].rm_so);
- }
- for (i = 1; i < NS; i++)
- if (subs[i].rm_so != -1)
- printf("(%d) `%.*s'\n", i,
- (int)(subs[i].rm_eo - subs[i].rm_so),
- argv[optind] + subs[i].rm_so);
- }
- exit(status);
-}
-
-/*
- - regress - main loop of regression test
- == void regress(FILE *in);
- */
-void
-regress(in)
-FILE *in;
-{
- char inbuf[1000];
-# define MAXF 10
- char *f[MAXF];
- int nf;
- int i;
- char erbuf[100];
- size_t ne;
- char *badpat = "invalid regular expression";
-# define SHORT 10
- char *bpname = "REG_BADPAT";
- regex_t re;
-
- while (fgets(inbuf, sizeof(inbuf), in) != NULL) {
- line++;
- if (inbuf[0] == '#' || inbuf[0] == '\n')
- continue; /* NOTE CONTINUE */
- inbuf[strlen(inbuf)-1] = '\0'; /* get rid of stupid \n */
- if (debug)
- fprintf(stdout, "%d:\n", line);
- nf = split(inbuf, f, MAXF, "\t\t");
- if (nf < 3) {
- fprintf(stderr, "bad input, line %d\n", line);
- exit(1);
- }
- for (i = 0; i < nf; i++)
- if (strcmp(f[i], "\"\"") == 0)
- f[i] = "";
- if (nf <= 3)
- f[3] = NULL;
- if (nf <= 4)
- f[4] = NULL;
- try(f[0], f[1], f[2], f[3], f[4], options('c', f[1]));
- if (opt('&', f[1])) /* try with either type of RE */
- try(f[0], f[1], f[2], f[3], f[4],
- options('c', f[1]) &~ REG_EXTENDED);
- }
-
- ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
- if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) {
- fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n",
- erbuf, badpat);
- status = 1;
- }
- ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT);
- if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' ||
- ne != strlen(badpat)+1) {
- fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n",
- erbuf, SHORT-1, badpat);
- status = 1;
- }
- ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
- if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) {
- fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n",
- erbuf, bpname);
- status = 1;
- }
- re.re_endp = bpname;
- ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf));
- if (atoi(erbuf) != (int)REG_BADPAT) {
- fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n",
- erbuf, (long)REG_BADPAT);
- status = 1;
- } else if (ne != strlen(erbuf)+1) {
- fprintf(stderr, "end: regerror() ATOI test len(`%s') = %ld\n",
- erbuf, (long)REG_BADPAT);
- status = 1;
- }
-}
-
-/*
- - try - try it, and report on problems
- == void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
- */
-void
-try(f0, f1, f2, f3, f4, opts)
-char *f0;
-char *f1;
-char *f2;
-char *f3;
-char *f4;
-int opts; /* may not match f1 */
-{
- regex_t re;
-# define NSUBS 10
- regmatch_t subs[NSUBS];
-# define NSHOULD 15
- char *should[NSHOULD];
- int nshould;
- char erbuf[100];
- int err;
- int len;
- char *type = (opts & REG_EXTENDED) ? "ERE" : "BRE";
- register int i;
- char *grump;
- char f0copy[1000];
- char f2copy[1000];
-
- strcpy(f0copy, f0);
- re.re_endp = (opts&REG_PEND) ? f0copy + strlen(f0copy) : NULL;
- fixstr(f0copy);
- err = regcomp(&re, f0copy, opts);
- if (err != 0 && (!opt('C', f1) || err != efind(f2))) {
- /* unexpected error or wrong error */
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n",
- line, type, eprint(err), len,
- sizeof(erbuf), erbuf);
- status = 1;
- } else if (err == 0 && opt('C', f1)) {
- /* unexpected success */
- fprintf(stderr, "%d: %s should have given REG_%s\n",
- line, type, f2);
- status = 1;
- err = 1; /* so we won't try regexec */
- }
-
- if (err != 0) {
- regfree(&re);
- return;
- }
-
- strcpy(f2copy, f2);
- fixstr(f2copy);
-
- if (options('e', f1)&REG_STARTEND) {
- if (strchr(f2, '(') == NULL || strchr(f2, ')') == NULL)
- fprintf(stderr, "%d: bad STARTEND syntax\n", line);
- subs[0].rm_so = strchr(f2, '(') - f2 + 1;
- subs[0].rm_eo = strchr(f2, ')') - f2;
- }
- err = regexec(&re, f2copy, NSUBS, subs, options('e', f1));
-
- if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) {
- /* unexpected error or wrong error */
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n",
- line, type, eprint(err), len,
- sizeof(erbuf), erbuf);
- status = 1;
- } else if (err != 0) {
- /* nothing more to check */
- } else if (f3 == NULL) {
- /* unexpected success */
- fprintf(stderr, "%d: %s exec should have failed\n",
- line, type);
- status = 1;
- err = 1; /* just on principle */
- } else if (opts&REG_NOSUB) {
- /* nothing more to check */
- } else if ((grump = check(f2, subs[0], f3)) != NULL) {
- fprintf(stderr, "%d: %s %s\n", line, type, grump);
- status = 1;
- err = 1;
- }
-
- if (err != 0 || f4 == NULL) {
- regfree(&re);
- return;
- }
-
- for (i = 1; i < NSHOULD; i++)
- should[i] = NULL;
- nshould = split(f4, should+1, NSHOULD-1, ",");
- if (nshould == 0) {
- nshould = 1;
- should[1] = "";
- }
- for (i = 1; i < NSUBS; i++) {
- grump = check(f2, subs[i], should[i]);
- if (grump != NULL) {
- fprintf(stderr, "%d: %s $%d %s\n", line,
- type, i, grump);
- status = 1;
- err = 1;
- }
- }
-
- regfree(&re);
-}
-
-/*
- - options - pick options out of a regression-test string
- == int options(int type, char *s);
- */
-int
-options(type, s)
-int type; /* 'c' compile, 'e' exec */
-char *s;
-{
- register char *p;
- register int o = (type == 'c') ? copts : eopts;
- register char *legal = (type == 'c') ? "bisnmp" : "^$#tl";
-
- for (p = s; *p != '\0'; p++)
- if (strchr(legal, *p) != NULL)
- switch (*p) {
- case 'b':
- o &= ~REG_EXTENDED;
- break;
- case 'i':
- o |= REG_ICASE;
- break;
- case 's':
- o |= REG_NOSUB;
- break;
- case 'n':
- o |= REG_NEWLINE;
- break;
- case 'm':
- o &= ~REG_EXTENDED;
- o |= REG_NOSPEC;
- break;
- case 'p':
- o |= REG_PEND;
- break;
- case '^':
- o |= REG_NOTBOL;
- break;
- case '$':
- o |= REG_NOTEOL;
- break;
- case '#':
- o |= REG_STARTEND;
- break;
- case 't': /* trace */
- o |= REG_TRACE;
- break;
- case 'l': /* force long representation */
- o |= REG_LARGE;
- break;
- case 'r': /* force backref use */
- o |= REG_BACKR;
- break;
- }
- return(o);
-}
-
-/*
- - opt - is a particular option in a regression string?
- == int opt(int c, char *s);
- */
-int /* predicate */
-opt(c, s)
-int c;
-char *s;
-{
- return(strchr(s, c) != NULL);
-}
-
-/*
- - fixstr - transform magic characters in strings
- == void fixstr(register char *p);
- */
-void
-fixstr(p)
-register char *p;
-{
- if (p == NULL)
- return;
-
- for (; *p != '\0'; p++)
- if (*p == 'N')
- *p = '\n';
- else if (*p == 'T')
- *p = '\t';
- else if (*p == 'S')
- *p = ' ';
- else if (*p == 'Z')
- *p = '\0';
-}
-
-/*
- - check - check a substring match
- == char *check(char *str, regmatch_t sub, char *should);
- */
-char * /* NULL or complaint */
-check(str, sub, should)
-char *str;
-regmatch_t sub;
-char *should;
-{
- register int len;
- register int shlen;
- register char *p;
- static char grump[500];
- register char *at = NULL;
-
- if (should != NULL && strcmp(should, "-") == 0)
- should = NULL;
- if (should != NULL && should[0] == '@') {
- at = should + 1;
- should = "";
- }
-
- /* check rm_so and rm_eo for consistency */
- if (sub.rm_so > sub.rm_eo || (sub.rm_so == -1 && sub.rm_eo != -1) ||
- (sub.rm_so != -1 && sub.rm_eo == -1) ||
- (sub.rm_so != -1 && sub.rm_so < 0) ||
- (sub.rm_eo != -1 && sub.rm_eo < 0) ) {
- sprintf(grump, "start %ld end %ld", (long)sub.rm_so,
- (long)sub.rm_eo);
- return(grump);
- }
-
- /* check for no match */
- if (sub.rm_so == -1 && should == NULL)
- return(NULL);
- if (sub.rm_so == -1)
- return("did not match");
-
- /* check for in range */
- if (sub.rm_eo > strlen(str)) {
- sprintf(grump, "start %ld end %ld, past end of string",
- (long)sub.rm_so, (long)sub.rm_eo);
- return(grump);
- }
-
- len = (int)(sub.rm_eo - sub.rm_so);
- shlen = (int)strlen(should);
- p = str + sub.rm_so;
-
- /* check for not supposed to match */
- if (should == NULL) {
- sprintf(grump, "matched `%.*s'", len, p);
- return(grump);
- }
-
- /* check for wrong match */
- if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) {
- sprintf(grump, "matched `%.*s' instead", len, p);
- return(grump);
- }
- if (shlen > 0)
- return(NULL);
-
- /* check null match in right place */
- if (at == NULL)
- return(NULL);
- shlen = strlen(at);
- if (shlen == 0)
- shlen = 1; /* force check for end-of-string */
- if (strncmp(p, at, shlen) != 0) {
- sprintf(grump, "matched null at `%.20s'", p);
- return(grump);
- }
- return(NULL);
-}
-
-/*
- - eprint - convert error number to name
- == static char *eprint(int err);
- */
-static char *
-eprint(err)
-int err;
-{
- static char epbuf[100];
- size_t len;
-
- len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf));
- assert(len <= sizeof(epbuf));
- return(epbuf);
-}
-
-/*
- - efind - convert error name to number
- == static int efind(char *name);
- */
-static int
-efind(name)
-char *name;
-{
- static char efbuf[100];
- regex_t re;
-
- sprintf(efbuf, "REG_%s", name);
- assert(strlen(efbuf) < sizeof(efbuf));
- re.re_endp = efbuf;
- (void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf));
- return(atoi(efbuf));
-}
diff --git a/ext/ereg/regex/main.ih b/ext/ereg/regex/main.ih
deleted file mode 100644
index 5a0118ac44..0000000000
--- a/ext/ereg/regex/main.ih
+++ /dev/null
@@ -1,19 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === main.c === */
-void regress(FILE *in);
-void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
-int options(int type, char *s);
-int opt(int c, char *s);
-void fixstr(register char *p);
-char *check(char *str, regmatch_t sub, char *should);
-static char *eprint(int err);
-static int efind(char *name);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/mkh b/ext/ereg/regex/mkh
deleted file mode 100644
index 252b246c7b..0000000000
--- a/ext/ereg/regex/mkh
+++ /dev/null
@@ -1,76 +0,0 @@
-#! /bin/sh
-# mkh - pull headers out of C source
-PATH=/bin:/usr/bin ; export PATH
-
-# egrep pattern to pick out marked lines
-egrep='^ =([ ]|$)'
-
-# Sed program to process marked lines into lines for the header file.
-# The markers have already been removed. Two things are done here: removal
-# of backslashed newlines, and some fudging of comments. The first is done
-# because -o needs to have prototypes on one line to strip them down.
-# Getting comments into the output is tricky; we turn C++-style // comments
-# into /* */ comments, after altering any existing */'s to avoid trouble.
-peel=' /\\$/N
- /\\\n[ ]*/s///g
- /\/\//s;\*/;* /;g
- /\/\//s;//\(.*\);/*\1 */;'
-
-for a
-do
- case "$a" in
- -o) # old (pre-function-prototype) compiler
- # add code to comment out argument lists
- peel="$peel
- "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);'
- shift
- ;;
- -b) # funny Berkeley __P macro
- peel="$peel
- "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));'
- shift
- ;;
- -s) # compiler doesn't like `static foo();'
- # add code to get rid of the `static'
- peel="$peel
- "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;'
- shift
- ;;
- -p) # private declarations
- egrep='^ ==([ ]|$)'
- shift
- ;;
- -i) # wrap in #ifndef, argument is name
- ifndef="$2"
- shift ; shift
- ;;
- *) break
- ;;
- esac
-done
-
-if test " $ifndef" != " "
-then
- echo "#ifndef $ifndef"
- echo "#define $ifndef /* never again */"
-fi
-echo "/* ========= begin header generated by $0 ========= */"
-echo '#ifdef __cplusplus'
-echo 'extern "C" {'
-echo '#endif'
-for f
-do
- echo
- echo "/* === $f === */"
- egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel"
- echo
-done
-echo '#ifdef __cplusplus'
-echo '}'
-echo '#endif'
-echo "/* ========= end header generated by $0 ========= */"
-if test " $ifndef" != " "
-then
- echo "#endif"
-fi
-exit 0
diff --git a/ext/ereg/regex/regcomp.c b/ext/ereg/regex/regcomp.c
deleted file mode 100644
index 0b939461bd..0000000000
--- a/ext/ereg/regex/regcomp.c
+++ /dev/null
@@ -1,1608 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-
-#define POSIX_MISTAKE
-
-#include "utils.h"
-#include "regex.h"
-#include "regex2.h"
-
-#include "cclass.h"
-#include "cname.h"
-
-/*
- * parse structure, passed up and down to avoid global variables and
- * other clumsinesses
- */
-struct parse {
- char *next; /* next character in RE */
- char *end; /* end of string (-> NUL normally) */
- int error; /* has an error been seen? */
- sop *strip; /* malloced strip */
- sopno ssize; /* malloced strip size (allocated) */
- sopno slen; /* malloced strip length (used) */
- int ncsalloc; /* number of csets allocated */
- struct re_guts *g;
-# define NPAREN 10 /* we need to remember () 1-9 for back refs */
- sopno pbegin[NPAREN]; /* -> ( ([0] unused) */
- sopno pend[NPAREN]; /* -> ) ([0] unused) */
-};
-
-#include "regcomp.ih"
-
-static char nuls[10]; /* place to point scanner in event of error */
-
-/*
- * macros for use with parse structure
- * BEWARE: these know that the parse structure is named `p' !!!
- */
-#define PEEK() (*p->next)
-#define PEEK2() (*(p->next+1))
-#define MORE() (p->next < p->end)
-#define MORE2() (p->next+1 < p->end)
-#define SEE(c) (MORE() && PEEK() == (c))
-#define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))
-#define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0)
-#define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0)
-#define NEXT() (p->next++)
-#define NEXT2() (p->next += 2)
-#define NEXTn(n) (p->next += (n))
-#define GETNEXT() (*p->next++)
-#define SETERROR(e) seterr(p, (e))
-#define REQUIRE(co, e) (void) ((co) || SETERROR(e))
-#define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e))
-#define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e))
-#define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e))
-#define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd))
-#define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos)
-#define AHEAD(pos) dofwd(p, pos, HERE()-(pos))
-#define ASTERN(sop, pos) EMIT(sop, HERE()-pos)
-#define HERE() (p->slen)
-#define THERE() (p->slen - 1)
-#define THERETHERE() (p->slen - 2)
-#define DROP(n) (p->slen -= (n))
-
-#ifndef NDEBUG
-static int never = 0; /* for use in asserts; shuts lint up */
-#else
-#define never 0 /* some <assert.h>s have bugs too */
-#endif
-
-/*
- - regcomp - interface for parser and compilation
- = API_EXPORT(int) regcomp(regex_t *, const char *, int);
- = #define REG_BASIC 0000
- = #define REG_EXTENDED 0001
- = #define REG_ICASE 0002
- = #define REG_NOSUB 0004
- = #define REG_NEWLINE 0010
- = #define REG_NOSPEC 0020
- = #define REG_PEND 0040
- = #define REG_DUMP 0200
- */
-API_EXPORT(int) /* 0 success, otherwise REG_something */
-regcomp(preg, pattern, cflags)
-regex_t *preg;
-const char *pattern;
-int cflags;
-{
- struct parse pa;
- register struct re_guts *g;
- register struct parse *p = &pa;
- register int i;
- register size_t len;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&~REG_DUMP)
-#endif
-
- cflags = GOODFLAGS(cflags);
- if ((cflags&REG_EXTENDED) && (cflags&REG_NOSPEC))
- return(REG_INVARG);
-
- if (cflags&REG_PEND) {
- if (preg->re_endp < pattern)
- return(REG_INVARG);
- len = preg->re_endp - pattern;
- } else
- len = strlen((char *)pattern);
-
- /* do the mallocs early so failure handling is easy */
- g = (struct re_guts *)malloc(sizeof(struct re_guts) +
- (NC-1)*sizeof(cat_t));
- if (g == NULL)
- return(REG_ESPACE);
- p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */
- p->strip = (sop *)malloc(p->ssize * sizeof(sop));
- p->slen = 0;
- if (p->strip == NULL) {
- free((char *)g);
- return(REG_ESPACE);
- }
-
- /* set things up */
- p->g = g;
- p->next = (char *)pattern; /* convenience; we do not modify it */
- p->end = p->next + len;
- p->error = 0;
- p->ncsalloc = 0;
- for (i = 0; i < NPAREN; i++) {
- p->pbegin[i] = 0;
- p->pend[i] = 0;
- }
- g->csetsize = NC;
- g->sets = NULL;
- g->setbits = NULL;
- g->ncsets = 0;
- g->cflags = cflags;
- g->iflags = 0;
- g->nbol = 0;
- g->neol = 0;
- g->must = NULL;
- g->mlen = 0;
- g->nsub = 0;
- g->ncategories = 1; /* category 0 is "everything else" */
- g->categories = &g->catspace[-(CHAR_MIN)];
- (void) memset((char *)g->catspace, 0, NC*sizeof(cat_t));
- g->backrefs = 0;
-
- /* do it */
- EMIT(OEND, 0);
- g->firststate = THERE();
- if (cflags&REG_EXTENDED)
- p_ere(p, OUT);
- else if (cflags&REG_NOSPEC)
- p_str(p);
- else
- p_bre(p, OUT, OUT);
- EMIT(OEND, 0);
- g->laststate = THERE();
-
- /* tidy up loose ends and fill things in */
- categorize(p, g);
- stripsnug(p, g);
- findmust(p, g);
- g->nplus = pluscount(p, g);
- g->magic = MAGIC2;
- preg->re_nsub = g->nsub;
- preg->re_g = g;
- preg->re_magic = MAGIC1;
-#ifndef REDEBUG
- /* not debugging, so can't rely on the assert() in regexec() */
- if (g->iflags&BAD)
- SETERROR(REG_ASSERT);
-#endif
-
- /* win or lose, we're done */
- if (p->error != 0) /* lose */
- regfree(preg);
- return(p->error);
-}
-
-/*
- - p_ere - ERE parser top level, concatenation and alternation
- == static void p_ere(register struct parse *p, int stop);
- */
-static void
-p_ere(p, stop)
-register struct parse *p;
-int stop; /* character this ERE should end at */
-{
- register char c;
- register sopno prevback = 0;
- register sopno prevfwd = 0;
- register sopno conc;
- register int first = 1; /* is this the first alternative? */
-
- for (;;) {
- /* do a bunch of concatenated expressions */
- conc = HERE();
- while (MORE() && (c = PEEK()) != '|' && c != stop)
- p_ere_exp(p);
- (void) REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */
-
- if (!EAT('|'))
- break; /* NOTE BREAK OUT */
-
- if (first) {
- INSERT(OCH_, conc); /* offset is wrong */
- prevfwd = conc;
- prevback = conc;
- first = 0;
- }
- ASTERN(OOR1, prevback);
- prevback = THERE();
- AHEAD(prevfwd); /* fix previous offset */
- prevfwd = HERE();
- EMIT(OOR2, 0); /* offset is very wrong */
- }
-
- if (!first) { /* tail-end fixups */
- AHEAD(prevfwd);
- ASTERN(O_CH, prevback);
- }
-
- assert(!MORE() || SEE(stop));
-}
-
-/*
- - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op
- == static void p_ere_exp(register struct parse *p);
- */
-static void
-p_ere_exp(p)
-register struct parse *p;
-{
- register char c;
- register sopno pos;
- register int count;
- register int count2;
- register sopno subno;
- int wascaret = 0;
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
-
- pos = HERE();
- switch (c) {
- case '(':
- REQUIRE(MORE(), REG_EPAREN);
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- if (!SEE(')'))
- p_ere(p, ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- MUSTEAT(')', REG_EPAREN);
- break;
-#ifndef POSIX_MISTAKE
- case ')': /* happens only if no current unmatched ( */
- /*
- * You may ask, why the ifndef? Because I didn't notice
- * this until slightly too late for 1003.2, and none of the
- * other 1003.2 regular-expression reviewers noticed it at
- * all. So an unmatched ) is legal POSIX, at least until
- * we can get it fixed.
- */
- SETERROR(REG_EPAREN);
- break;
-#endif
- case '^':
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- wascaret = 1;
- break;
- case '$':
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- break;
- case '|':
- SETERROR(REG_EMPTY);
- break;
- case '*':
- case '+':
- case '?':
- SETERROR(REG_BADRPT);
- break;
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case '\\':
- REQUIRE(MORE(), REG_EESCAPE);
- c = GETNEXT();
- ordinary(p, c);
- break;
- case '{': /* okay as ordinary except if digit follows */
- REQUIRE(!MORE() || !isdigit(PEEK()), REG_BADRPT);
- /* FALLTHROUGH */
- default:
- ordinary(p, c);
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- /* we call { a repetition if followed by a digit */
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit(PEEK2())) ))
- return; /* no repetition, we're done */
- NEXT();
-
- REQUIRE(!wascaret, REG_BADRPT);
- switch (c) {
- case '*': /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- break;
- case '+':
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- break;
- case '?':
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, pos); /* offset slightly wrong */
- ASTERN(OOR1, pos); /* this one's right */
- AHEAD(pos); /* fix the OCH_ */
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- break;
- case '{':
- count = p_count(p);
- if (EAT(',')) {
- if (isdigit(PEEK())) {
- count2 = p_count(p);
- REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EAT('}')) { /* error heuristics */
- while (MORE() && PEEK() != '}')
- NEXT();
- REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit(PEEK2())) ) )
- return;
- SETERROR(REG_BADRPT);
-}
-
-/*
- - p_str - string (no metacharacters) "parser"
- == static void p_str(register struct parse *p);
- */
-static void
-p_str(p)
-register struct parse *p;
-{
- REQUIRE(MORE(), REG_EMPTY);
- while (MORE())
- ordinary(p, GETNEXT());
-}
-
-/*
- - p_bre - BRE parser top level, anchoring and concatenation
- == static void p_bre(register struct parse *p, register int end1, \
- == register int end2);
- * Giving end1 as OUT essentially eliminates the end1/end2 check.
- *
- * This implementation is a bit of a kludge, in that a trailing $ is first
- * taken as an ordinary character and then revised to be an anchor. The
- * only undesirable side effect is that '$' gets included as a character
- * category in such cases. This is fairly harmless; not worth fixing.
- * The amount of lookahead needed to avoid this kludge is excessive.
- */
-static void
-p_bre(p, end1, end2)
-register struct parse *p;
-register int end1; /* first terminating character */
-register int end2; /* second terminating character */
-{
- register sopno start = HERE();
- register int first = 1; /* first subexpression? */
- register int wasdollar = 0;
-
- if (EAT('^')) {
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- }
- while (MORE() && !SEETWO(end1, end2)) {
- wasdollar = p_simp_re(p, first);
- first = 0;
- }
- if (wasdollar) { /* oops, that was a trailing anchor */
- DROP(1);
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- }
-
- REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */
-}
-
-/*
- - p_simp_re - parse a simple RE, an atom possibly followed by a repetition
- == static int p_simp_re(register struct parse *p, int starordinary);
- */
-static int /* was the simple RE an unbackslashed $? */
-p_simp_re(p, starordinary)
-register struct parse *p;
-int starordinary; /* is a leading * an ordinary character? */
-{
- register int c;
- register int count;
- register int count2;
- register sopno pos;
- register int i;
- register sopno subno;
-# define BACKSL (1<<CHAR_BIT)
-
- pos = HERE(); /* repetion op, if any, covers from here */
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
- if (c == '\\') {
- REQUIRE(MORE(), REG_EESCAPE);
- c = BACKSL | (unsigned char)GETNEXT();
- }
- switch (c) {
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case BACKSL|'{':
- SETERROR(REG_BADRPT);
- break;
- case BACKSL|'(':
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- /* the MORE here is an error heuristic */
- if (MORE() && !SEETWO('\\', ')'))
- p_bre(p, '\\', ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- REQUIRE(EATTWO('\\', ')'), REG_EPAREN);
- break;
- case BACKSL|')': /* should not get here -- must be user */
- case BACKSL|'}':
- SETERROR(REG_EPAREN);
- break;
- case BACKSL|'1':
- case BACKSL|'2':
- case BACKSL|'3':
- case BACKSL|'4':
- case BACKSL|'5':
- case BACKSL|'6':
- case BACKSL|'7':
- case BACKSL|'8':
- case BACKSL|'9':
- i = (c&~BACKSL) - '0';
- assert(i < NPAREN);
- if (p->pend[i] != 0) {
- assert(i <= p->g->nsub);
- EMIT(OBACK_, i);
- assert(p->pbegin[i] != 0);
- assert(OP(p->strip[p->pbegin[i]]) == OLPAREN);
- assert(OP(p->strip[p->pend[i]]) == ORPAREN);
- (void) dupl(p, p->pbegin[i]+1, p->pend[i]);
- EMIT(O_BACK, i);
- } else
- SETERROR(REG_ESUBREG);
- p->g->backrefs = 1;
- break;
- case '*':
- REQUIRE(starordinary, REG_BADRPT);
- /* FALLTHROUGH */
- default:
- ordinary(p, (char)c); /* takes off BACKSL, if any */
- break;
- }
-
- if (EAT('*')) { /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- } else if (EATTWO('\\', '{')) {
- count = p_count(p);
- if (EAT(',')) {
- if (MORE() && isdigit(PEEK())) {
- count2 = p_count(p);
- REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EATTWO('\\', '}')) { /* error heuristics */
- while (MORE() && !SEETWO('\\', '}'))
- NEXT();
- REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- } else if (c == (unsigned char)'$') /* $ (but not \$) ends it */
- return(1);
-
- return(0);
-}
-
-/*
- - p_count - parse a repetition count
- == static int p_count(register struct parse *p);
- */
-static int /* the value */
-p_count(p)
-register struct parse *p;
-{
- register int count = 0;
- register int ndigits = 0;
-
- while (MORE() && isdigit(PEEK()) && count <= DUPMAX) {
- count = count*10 + (GETNEXT() - '0');
- ndigits++;
- }
-
- REQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR);
- return(count);
-}
-
-/*
- - p_bracket - parse a bracketed character list
- == static void p_bracket(register struct parse *p);
- *
- * Note a significant property of this code: if the allocset() did SETERROR,
- * no set operations are done.
- */
-static void
-p_bracket(p)
-register struct parse *p;
-{
- register cset *cs = allocset(p);
- register int invert = 0;
-
- /* Dept of Truly Sickening Special-Case Kludges */
- if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) {
- EMIT(OBOW, 0);
- NEXTn(6);
- return;
- }
- if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) {
- EMIT(OEOW, 0);
- NEXTn(6);
- return;
- }
-
- if (EAT('^'))
- invert++; /* make note to invert set at end */
- if (EAT(']'))
- CHadd(cs, ']');
- else if (EAT('-'))
- CHadd(cs, '-');
- while (MORE() && PEEK() != ']' && !SEETWO('-', ']'))
- p_b_term(p, cs);
- if (EAT('-'))
- CHadd(cs, '-');
- MUSTEAT(']', REG_EBRACK);
-
- if (p->error != 0) /* don't mess things up further */
- return;
-
- if (p->g->cflags&REG_ICASE) {
- register int i;
- register int ci;
-
- for (i = p->g->csetsize - 1; i >= 0; i--)
- if (CHIN(cs, i) && isalpha(i)) {
- ci = othercase(i);
- if (ci != i)
- CHadd(cs, ci);
- }
- if (cs->multis != NULL)
- mccase(p, cs);
- }
- if (invert) {
- register int i;
-
- for (i = p->g->csetsize - 1; i >= 0; i--)
- if (CHIN(cs, i))
- CHsub(cs, i);
- else
- CHadd(cs, i);
- if (p->g->cflags&REG_NEWLINE)
- CHsub(cs, '\n');
- if (cs->multis != NULL)
- mcinvert(p, cs);
- }
-
- assert(cs->multis == NULL); /* xxx */
-
- if (nch(p, cs) == 1) { /* optimize singleton sets */
- ordinary(p, firstch(p, cs));
- freeset(p, cs);
- } else
- EMIT(OANYOF, freezeset(p, cs));
-}
-
-/*
- - p_b_term - parse one term of a bracketed character list
- == static void p_b_term(register struct parse *p, register cset *cs);
- */
-static void
-p_b_term(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register char c;
- register char start, finish;
- register int i;
-
- /* classify what we've got */
- switch ((MORE()) ? PEEK() : '\0') {
- case '[':
- c = (MORE2()) ? PEEK2() : '\0';
- break;
- case '-':
- SETERROR(REG_ERANGE);
- return; /* NOTE RETURN */
- break;
- default:
- c = '\0';
- break;
- }
-
- switch (c) {
- case ':': /* character class */
- NEXT2();
- REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- REQUIRE(c != '-' && c != ']', REG_ECTYPE);
- p_b_cclass(p, cs);
- REQUIRE(MORE(), REG_EBRACK);
- REQUIRE(EATTWO(':', ']'), REG_ECTYPE);
- break;
- case '=': /* equivalence class */
- NEXT2();
- REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- REQUIRE(c != '-' && c != ']', REG_ECOLLATE);
- p_b_eclass(p, cs);
- REQUIRE(MORE(), REG_EBRACK);
- REQUIRE(EATTWO('=', ']'), REG_ECOLLATE);
- break;
- default: /* symbol, ordinary character, or range */
-/* xxx revision needed for multichar stuff */
- start = p_b_symbol(p);
- if (SEE('-') && MORE2() && PEEK2() != ']') {
- /* range */
- NEXT();
- if (EAT('-'))
- finish = '-';
- else
- finish = p_b_symbol(p);
- } else
- finish = start;
-/* xxx what about signed chars here... */
- REQUIRE(start <= finish, REG_ERANGE);
- for (i = start; i <= finish; i++)
- CHadd(cs, i);
- break;
- }
-}
-
-/*
- - p_b_cclass - parse a character-class name and deal with it
- == static void p_b_cclass(register struct parse *p, register cset *cs);
- */
-static void
-p_b_cclass(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register char *sp = p->next;
- register struct cclass *cp;
- register size_t len;
- register char *u;
- register char c;
-
- while (MORE() && isalpha(PEEK()))
- NEXT();
- len = p->next - sp;
- for (cp = cclasses; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- break;
- if (cp->name == NULL) {
- /* oops, didn't find it */
- SETERROR(REG_ECTYPE);
- return;
- }
-
- u = cp->chars;
- while ((c = *u++) != '\0')
- CHadd(cs, c);
- for (u = cp->multis; *u != '\0'; u += strlen(u) + 1)
- MCadd(p, cs, u);
-}
-
-/*
- - p_b_eclass - parse an equivalence-class name and deal with it
- == static void p_b_eclass(register struct parse *p, register cset *cs);
- *
- * This implementation is incomplete. xxx
- */
-static void
-p_b_eclass(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register char c;
-
- c = p_b_coll_elem(p, '=');
- CHadd(cs, c);
-}
-
-/*
- - p_b_symbol - parse a character or [..]ed multicharacter collating symbol
- == static char p_b_symbol(register struct parse *p);
- */
-static char /* value of symbol */
-p_b_symbol(p)
-register struct parse *p;
-{
- register char value;
-
- REQUIRE(MORE(), REG_EBRACK);
- if (!EATTWO('[', '.'))
- return(GETNEXT());
-
- /* collating symbol */
- value = p_b_coll_elem(p, '.');
- REQUIRE(EATTWO('.', ']'), REG_ECOLLATE);
- return(value);
-}
-
-/*
- - p_b_coll_elem - parse a collating-element name and look it up
- == static char p_b_coll_elem(register struct parse *p, int endc);
- */
-static char /* value of collating element */
-p_b_coll_elem(p, endc)
-register struct parse *p;
-int endc; /* name ended by endc,']' */
-{
- register char *sp = p->next;
- register struct cname *cp;
- register int len;
-
- while (MORE() && !SEETWO(endc, ']'))
- NEXT();
- if (!MORE()) {
- SETERROR(REG_EBRACK);
- return(0);
- }
- len = p->next - sp;
- for (cp = cnames; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- return(cp->code); /* known name */
- if (len == 1)
- return(*sp); /* single character */
- SETERROR(REG_ECOLLATE); /* neither */
- return(0);
-}
-
-/*
- - othercase - return the case counterpart of an alphabetic
- == static char othercase(int ch);
- */
-static char /* if no counterpart, return ch */
-othercase(ch)
-int ch;
-{
- assert(isalpha(ch));
- if (isupper(ch))
- return(tolower(ch));
- else if (islower(ch))
- return(toupper(ch));
- else /* peculiar, but could happen */
- return(ch);
-}
-
-/*
- - bothcases - emit a dualcase version of a two-case character
- == static void bothcases(register struct parse *p, int ch);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-bothcases(p, ch)
-register struct parse *p;
-int ch;
-{
- register char *oldnext = p->next;
- register char *oldend = p->end;
- char bracket[3];
-
- assert(othercase(ch) != ch); /* p_bracket() would recurse */
- p->next = bracket;
- p->end = bracket+2;
- bracket[0] = ch;
- bracket[1] = ']';
- bracket[2] = '\0';
- p_bracket(p);
- assert(p->next == bracket+2);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - ordinary - emit an ordinary character
- == static void ordinary(register struct parse *p, register int ch);
- */
-static void
-ordinary(p, ch)
-register struct parse *p;
-register int ch;
-{
- register cat_t *cap = p->g->categories;
-
- if ((p->g->cflags&REG_ICASE) && isalpha(ch) && othercase(ch) != ch)
- bothcases(p, ch);
- else {
- EMIT(OCHAR, (unsigned char)ch);
- if (cap[ch] == 0)
- cap[ch] = p->g->ncategories++;
- }
-}
-
-/*
- - nonnewline - emit REG_NEWLINE version of OANY
- == static void nonnewline(register struct parse *p);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-nonnewline(p)
-register struct parse *p;
-{
- register char *oldnext = p->next;
- register char *oldend = p->end;
- char bracket[4];
-
- p->next = bracket;
- p->end = bracket+3;
- bracket[0] = '^';
- bracket[1] = '\n';
- bracket[2] = ']';
- bracket[3] = '\0';
- p_bracket(p);
- assert(p->next == bracket+3);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - repeat - generate code for a bounded repetition, recursively if needed
- == static void repeat(register struct parse *p, sopno start, int from, int to);
- */
-static void
-repeat(p, start, from, to)
-register struct parse *p;
-sopno start; /* operand from here to end of strip */
-int from; /* repeated from this number */
-int to; /* to this number of times (maybe INFINITY) */
-{
- register sopno finish = HERE();
-# define N 2
-# define INF 3
-# define REP(f, t) ((f)*8 + (t))
-# define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)
- register sopno copy;
-
- if (p->error != 0) /* head off possible runaway recursion */
- return;
-
- assert(from <= to);
-
- switch (REP(MAP(from), MAP(to))) {
- case REP(0, 0): /* must be user doing this */
- DROP(finish-start); /* drop the operand */
- break;
- case REP(0, 1): /* as x{1,1}? */
- case REP(0, N): /* as x{1,n}? */
- case REP(0, INF): /* as x{1,}? */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start); /* offset is wrong... */
- repeat(p, start+1, 1, to);
- ASTERN(OOR1, start);
- AHEAD(start); /* ... fix it */
- EMIT(OOR2, 0);
- AHEAD(THERE());
- ASTERN(O_CH, THERETHERE());
- break;
- case REP(1, 1): /* trivial case */
- /* done */
- break;
- case REP(1, N): /* as x?x{1,n-1} */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start);
- ASTERN(OOR1, start);
- AHEAD(start);
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- copy = dupl(p, start+1, finish+1);
- assert(copy == finish+4);
- repeat(p, copy, 1, to-1);
- break;
- case REP(1, INF): /* as x+ */
- INSERT(OPLUS_, start);
- ASTERN(O_PLUS, start);
- break;
- case REP(N, N): /* as xx{m-1,n-1} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to-1);
- break;
- case REP(N, INF): /* as xx{n-1,INF} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to);
- break;
- default: /* "can't happen" */
- SETERROR(REG_ASSERT); /* just in case */
- break;
- }
-}
-
-/*
- - seterr - set an error condition
- == static int seterr(register struct parse *p, int e);
- */
-static int /* useless but makes type checking happy */
-seterr(p, e)
-register struct parse *p;
-int e;
-{
- if (p->error == 0) /* keep earliest error condition */
- p->error = e;
- p->next = nuls; /* try to bring things to a halt */
- p->end = nuls;
- return(0); /* make the return value well-defined */
-}
-
-/*
- - allocset - allocate a set of characters for []
- == static cset *allocset(register struct parse *p);
- */
-static cset *
-allocset(p)
-register struct parse *p;
-{
- register int no = p->g->ncsets++;
- register size_t nc;
- register size_t nbytes;
- register cset *cs;
- register size_t css = (size_t)p->g->csetsize;
- register int i;
-
- if (no >= p->ncsalloc) { /* need another column of space */
- p->ncsalloc += CHAR_BIT;
- nc = p->ncsalloc;
- assert(nc % CHAR_BIT == 0);
- nbytes = nc / CHAR_BIT * css;
- if (p->g->sets == NULL)
- p->g->sets = (cset *)malloc(nc * sizeof(cset));
- else
- p->g->sets = (cset *)realloc((char *)p->g->sets,
- nc * sizeof(cset));
- if (p->g->setbits == NULL)
- p->g->setbits = (uch *)malloc(nbytes);
- else {
- p->g->setbits = (uch *)realloc((char *)p->g->setbits,
- nbytes);
- /* xxx this isn't right if setbits is now NULL */
- for (i = 0; i < no; i++)
- p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT);
- }
- if (p->g->sets != NULL && p->g->setbits != NULL)
- (void) memset((char *)p->g->setbits + (nbytes - css),
- 0, css);
- else {
- no = 0;
- SETERROR(REG_ESPACE);
- /* caller's responsibility not to do set ops */
- }
- }
-
- assert(p->g->sets != NULL); /* xxx */
- cs = &p->g->sets[no];
- cs->ptr = p->g->setbits + css*((no)/CHAR_BIT);
- cs->mask = 1 << ((no) % CHAR_BIT);
- cs->hash = 0;
- cs->smultis = 0;
- cs->multis = NULL;
-
- return(cs);
-}
-
-/*
- - freeset - free a now-unused set
- == static void freeset(register struct parse *p, register cset *cs);
- */
-static void
-freeset(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register cset *top = &p->g->sets[p->g->ncsets];
- register size_t css = (size_t)p->g->csetsize;
-
- for (i = 0; i < css; i++)
- CHsub(cs, i);
- if (cs == top-1) /* recover only the easy case */
- p->g->ncsets--;
-}
-
-/*
- - freezeset - final processing on a set of characters
- == static int freezeset(register struct parse *p, register cset *cs);
- *
- * The main task here is merging identical sets. This is usually a waste
- * of time (although the hash code minimizes the overhead), but can win
- * big if REG_ICASE is being used. REG_ICASE, by the way, is why the hash
- * is done using addition rather than xor -- all ASCII [aA] sets xor to
- * the same value!
- */
-static int /* set number */
-freezeset(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register uch h = cs->hash;
- register size_t i;
- register cset *top = &p->g->sets[p->g->ncsets];
- register cset *cs2;
- register size_t css = (size_t)p->g->csetsize;
-
- /* look for an earlier one which is the same */
- for (cs2 = &p->g->sets[0]; cs2 < top; cs2++)
- if (cs2->hash == h && cs2 != cs) {
- /* maybe */
- for (i = 0; i < css; i++)
- if (!!CHIN(cs2, i) != !!CHIN(cs, i))
- break; /* no */
- if (i == css)
- break; /* yes */
- }
-
- if (cs2 < top) { /* found one */
- freeset(p, cs);
- cs = cs2;
- }
-
- return((int)(cs - p->g->sets));
-}
-
-/*
- - firstch - return first character in a set (which must have at least one)
- == static int firstch(register struct parse *p, register cset *cs);
- */
-static int /* character; there is no "none" value */
-firstch(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register size_t css = (size_t)p->g->csetsize;
-
- for (i = 0; i < css; i++)
- if (CHIN(cs, i))
- return((char)i);
- assert(never);
- return(0); /* arbitrary */
-}
-
-/*
- - nch - number of characters in a set
- == static int nch(register struct parse *p, register cset *cs);
- */
-static int
-nch(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register size_t css = (size_t)p->g->csetsize;
- register int n = 0;
-
- for (i = 0; i < css; i++)
- if (CHIN(cs, i))
- n++;
- return(n);
-}
-
-/*
- - mcadd - add a collating element to a cset
- == static void mcadd(register struct parse *p, register cset *cs, \
- == register char *cp);
- */
-static void
-mcadd(p, cs, cp)
-register struct parse *p;
-register cset *cs;
-register char *cp;
-{
- register size_t oldend = cs->smultis;
-
- cs->smultis += strlen(cp) + 1;
- if (cs->multis == NULL)
- cs->multis = malloc(cs->smultis);
- else
- cs->multis = realloc(cs->multis, cs->smultis);
- if (cs->multis == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
-
- (void) strcpy(cs->multis + oldend - 1, cp);
- cs->multis[cs->smultis - 1] = '\0';
-}
-
-#if 0
-/*
- - mcsub - subtract a collating element from a cset
- == static void mcsub(register cset *cs, register char *cp);
- */
-static void
-mcsub(cs, cp)
-register cset *cs;
-register char *cp;
-{
- register char *fp = mcfind(cs, cp);
- register size_t len = strlen(fp);
-
- assert(fp != NULL);
- (void) memmove(fp, fp + len + 1,
- cs->smultis - (fp + len + 1 - cs->multis));
- cs->smultis -= len;
-
- if (cs->smultis == 0) {
- free(cs->multis);
- cs->multis = NULL;
- return;
- }
-
- cs->multis = realloc(cs->multis, cs->smultis);
- assert(cs->multis != NULL);
-}
-
-/*
- - mcin - is a collating element in a cset?
- == static int mcin(register cset *cs, register char *cp);
- */
-static int
-mcin(cs, cp)
-register cset *cs;
-register char *cp;
-{
- return(mcfind(cs, cp) != NULL);
-}
-
-
-/*
- - mcfind - find a collating element in a cset
- == static char *mcfind(register cset *cs, register char *cp);
- */
-static char *
-mcfind(cs, cp)
-register cset *cs;
-register char *cp;
-{
- register char *p;
-
- if (cs->multis == NULL)
- return(NULL);
- for (p = cs->multis; *p != '\0'; p += strlen(p) + 1)
- if (strcmp(cp, p) == 0)
- return(p);
- return(NULL);
-}
-#endif
-
-/*
- - mcinvert - invert the list of collating elements in a cset
- == static void mcinvert(register struct parse *p, register cset *cs);
- *
- * This would have to know the set of possibilities. Implementation
- * is deferred.
- */
-static void
-mcinvert(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- assert(cs->multis == NULL); /* xxx */
-}
-
-/*
- - mccase - add case counterparts of the list of collating elements in a cset
- == static void mccase(register struct parse *p, register cset *cs);
- *
- * This would have to know the set of possibilities. Implementation
- * is deferred.
- */
-static void
-mccase(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- assert(cs->multis == NULL); /* xxx */
-}
-
-/*
- - isinsets - is this character in any sets?
- == static int isinsets(register struct re_guts *g, int c);
- */
-static int /* predicate */
-isinsets(g, c)
-register struct re_guts *g;
-int c;
-{
- register uch *col;
- register int i;
- register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
- register unsigned uc = (unsigned char)c;
-
- for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
- if (col[uc] != 0)
- return(1);
- return(0);
-}
-
-/*
- - samesets - are these two characters in exactly the same sets?
- == static int samesets(register struct re_guts *g, int c1, int c2);
- */
-static int /* predicate */
-samesets(g, c1, c2)
-register struct re_guts *g;
-int c1;
-int c2;
-{
- register uch *col;
- register int i;
- register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
- register unsigned uc1 = (unsigned char)c1;
- register unsigned uc2 = (unsigned char)c2;
-
- for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
- if (col[uc1] != col[uc2])
- return(0);
- return(1);
-}
-
-/*
- - categorize - sort out character categories
- == static void categorize(struct parse *p, register struct re_guts *g);
- */
-static void
-categorize(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register cat_t *cats = g->categories;
- register int c;
- register int c2;
- register cat_t cat;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (cats[c] == 0 && isinsets(g, c)) {
- cat = g->ncategories++;
- cats[c] = cat;
- for (c2 = c+1; c2 <= CHAR_MAX; c2++)
- if (cats[c2] == 0 && samesets(g, c, c2))
- cats[c2] = cat;
- }
-}
-
-/*
- - dupl - emit a duplicate of a bunch of sops
- == static sopno dupl(register struct parse *p, sopno start, sopno finish);
- */
-static sopno /* start of duplicate */
-dupl(p, start, finish)
-register struct parse *p;
-sopno start; /* from here */
-sopno finish; /* to this less one */
-{
- register sopno ret = HERE();
- register sopno len = finish - start;
-
- assert(finish >= start);
- if (len == 0)
- return(ret);
- enlarge(p, p->ssize + len); /* this many unexpected additions */
- assert(p->ssize >= p->slen + len);
- (void) memcpy((char *)(p->strip + p->slen),
- (char *)(p->strip + start), (size_t)len*sizeof(sop));
- p->slen += len;
- return(ret);
-}
-
-/*
- - doemit - emit a strip operator
- == static void doemit(register struct parse *p, sop op, size_t opnd);
- *
- * It might seem better to implement this as a macro with a function as
- * hard-case backup, but it's just too big and messy unless there are
- * some changes to the data structures. Maybe later.
- */
-static void
-doemit(p, op, opnd)
-register struct parse *p;
-sop op;
-size_t opnd;
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* deal with oversize operands ("can't happen", more or less) */
- assert(opnd < 1<<OPSHIFT);
-
- /* deal with undersized strip */
- if (p->slen >= p->ssize)
- enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */
- assert(p->slen < p->ssize);
-
- /* finally, it's all reduced to the easy case */
- p->strip[p->slen++] = SOP(op, opnd);
-}
-
-/*
- - doinsert - insert a sop into the strip
- == static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos);
- */
-static void
-doinsert(p, op, opnd, pos)
-register struct parse *p;
-sop op;
-size_t opnd;
-sopno pos;
-{
- register sopno sn;
- register sop s;
- register int i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- sn = HERE();
- EMIT(op, opnd); /* do checks, ensure space */
- assert(HERE() == sn+1);
- s = p->strip[sn];
-
- /* adjust paren pointers */
- assert(pos > 0);
- for (i = 1; i < NPAREN; i++) {
- if (p->pbegin[i] >= pos) {
- p->pbegin[i]++;
- }
- if (p->pend[i] >= pos) {
- p->pend[i]++;
- }
- }
-
- memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos],
- (HERE()-pos-1)*sizeof(sop));
- p->strip[pos] = s;
-}
-
-/*
- - dofwd - complete a forward reference
- == static void dofwd(register struct parse *p, sopno pos, sop value);
- */
-static void
-dofwd(p, pos, value)
-register struct parse *p;
-register sopno pos;
-sop value;
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- assert(value < 1<<OPSHIFT);
- p->strip[pos] = OP(p->strip[pos]) | value;
-}
-
-/*
- - enlarge - enlarge the strip
- == static void enlarge(register struct parse *p, sopno size);
- */
-static void
-enlarge(p, size)
-register struct parse *p;
-register sopno size;
-{
- register sop *sp;
-
- if (p->ssize >= size)
- return;
-
- sp = (sop *)realloc(p->strip, size*sizeof(sop));
- if (sp == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- p->strip = sp;
- p->ssize = size;
-}
-
-/*
- - stripsnug - compact the strip
- == static void stripsnug(register struct parse *p, register struct re_guts *g);
- */
-static void
-stripsnug(p, g)
-register struct parse *p;
-register struct re_guts *g;
-{
- g->nstates = p->slen;
- g->strip = (sop *)realloc((char *)p->strip, p->slen * sizeof(sop));
- if (g->strip == NULL) {
- SETERROR(REG_ESPACE);
- g->strip = p->strip;
- }
-}
-
-/*
- - findmust - fill in must and mlen with longest mandatory literal string
- == static void findmust(register struct parse *p, register struct re_guts *g);
- *
- * This algorithm could do fancy things like analyzing the operands of |
- * for common subsequences. Someday. This code is simple and finds most
- * of the interesting cases.
- *
- * Note that must and mlen got initialized during setup.
- */
-static void
-findmust(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register sop *scan;
- sop *start = NULL;
- register sop *newstart = NULL;
- register sopno newlen;
- register sop s;
- register char *cp;
- register sopno i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* find the longest OCHAR sequence in strip */
- newlen = 0;
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OCHAR: /* sequence member */
- if (newlen == 0) /* new sequence */
- newstart = scan - 1;
- newlen++;
- break;
- case OPLUS_: /* things that don't break one */
- case OLPAREN:
- case ORPAREN:
- break;
- case OQUEST_: /* things that must be skipped */
- case OCH_:
- scan--;
- do {
- scan += OPND(s);
- s = *scan;
- /* assert() interferes w debug printouts */
- if (OP(s) != O_QUEST && OP(s) != O_CH &&
- OP(s) != OOR2) {
- g->iflags |= BAD;
- return;
- }
- } while (OP(s) != O_QUEST && OP(s) != O_CH);
- /* fallthrough */
- default: /* things that break a sequence */
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- }
- newlen = 0;
- break;
- }
- } while (OP(s) != OEND);
-
- if (g->mlen == 0) /* there isn't one */
- return;
-
- /* turn it into a character string */
- g->must = malloc((size_t)g->mlen + 1);
- if (g->must == NULL) { /* argh; just forget it */
- g->mlen = 0;
- return;
- }
- cp = g->must;
- scan = start;
- for (i = g->mlen; i > 0; i--) {
- while (OP(s = *scan++) != OCHAR)
- continue;
- assert(cp < g->must + g->mlen);
- *cp++ = (char)OPND(s);
- }
- assert(cp == g->must + g->mlen);
- *cp++ = '\0'; /* just on general principles */
-}
-
-/*
- - pluscount - count + nesting
- == static sopno pluscount(register struct parse *p, register struct re_guts *g);
- */
-static sopno /* nesting depth */
-pluscount(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register sop *scan;
- register sop s;
- register sopno plusnest = 0;
- register sopno maxnest = 0;
-
- if (p->error != 0)
- return(0); /* there may not be an OEND */
-
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OPLUS_:
- plusnest++;
- break;
- case O_PLUS:
- if (plusnest > maxnest)
- maxnest = plusnest;
- plusnest--;
- break;
- }
- } while (OP(s) != OEND);
- if (plusnest != 0)
- g->iflags |= BAD;
- return(maxnest);
-}
diff --git a/ext/ereg/regex/regcomp.ih b/ext/ereg/regex/regcomp.ih
deleted file mode 100644
index 6efafebf60..0000000000
--- a/ext/ereg/regex/regcomp.ih
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regcomp.c === */
-static void p_ere(register struct parse *p, int stop);
-static void p_ere_exp(register struct parse *p);
-static void p_str(register struct parse *p);
-static void p_bre(register struct parse *p, register int end1, register int end2);
-static int p_simp_re(register struct parse *p, int starordinary);
-static int p_count(register struct parse *p);
-static void p_bracket(register struct parse *p);
-static void p_b_term(register struct parse *p, register cset *cs);
-static void p_b_cclass(register struct parse *p, register cset *cs);
-static void p_b_eclass(register struct parse *p, register cset *cs);
-static char p_b_symbol(register struct parse *p);
-static char p_b_coll_elem(register struct parse *p, int endc);
-static char othercase(int ch);
-static void bothcases(register struct parse *p, int ch);
-static void ordinary(register struct parse *p, register int ch);
-static void nonnewline(register struct parse *p);
-static void repeat(register struct parse *p, sopno start, int from, int to);
-static int seterr(register struct parse *p, int e);
-static cset *allocset(register struct parse *p);
-static void freeset(register struct parse *p, register cset *cs);
-static int freezeset(register struct parse *p, register cset *cs);
-static int firstch(register struct parse *p, register cset *cs);
-static int nch(register struct parse *p, register cset *cs);
-static void mcadd(register struct parse *p, register cset *cs, register char *cp);
-#if 0
-static void mcsub(register cset *cs, register char *cp);
-static int mcin(register cset *cs, register char *cp);
-static char *mcfind(register cset *cs, register char *cp);
-#endif
-static void mcinvert(register struct parse *p, register cset *cs);
-static void mccase(register struct parse *p, register cset *cs);
-static int isinsets(register struct re_guts *g, int c);
-static int samesets(register struct re_guts *g, int c1, int c2);
-static void categorize(struct parse *p, register struct re_guts *g);
-static sopno dupl(register struct parse *p, sopno start, sopno finish);
-static void doemit(register struct parse *p, sop op, size_t opnd);
-static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos);
-static void dofwd(register struct parse *p, sopno pos, sop value);
-static void enlarge(register struct parse *p, sopno size);
-static void stripsnug(register struct parse *p, register struct re_guts *g);
-static void findmust(register struct parse *p, register struct re_guts *g);
-static sopno pluscount(register struct parse *p, register struct re_guts *g);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/regerror.c b/ext/ereg/regex/regerror.c
deleted file mode 100644
index bf71e3a814..0000000000
--- a/ext/ereg/regex/regerror.c
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regerror.ih"
-
-/*
- = #define REG_OKAY 0
- = #define REG_NOMATCH 1
- = #define REG_BADPAT 2
- = #define REG_ECOLLATE 3
- = #define REG_ECTYPE 4
- = #define REG_EESCAPE 5
- = #define REG_ESUBREG 6
- = #define REG_EBRACK 7
- = #define REG_EPAREN 8
- = #define REG_EBRACE 9
- = #define REG_BADBR 10
- = #define REG_ERANGE 11
- = #define REG_ESPACE 12
- = #define REG_BADRPT 13
- = #define REG_EMPTY 14
- = #define REG_ASSERT 15
- = #define REG_INVARG 16
- = #define REG_ATOI 255 // convert name to number (!)
- = #define REG_ITOA 0400 // convert number to name (!)
- */
-static struct rerr {
- int code;
- char *name;
- char *explain;
-} rerrs[] = {
- {REG_OKAY, "REG_OKAY", "no errors detected"},
- {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"},
- {REG_BADPAT, "REG_BADPAT", "invalid regular expression"},
- {REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"},
- {REG_ECTYPE, "REG_ECTYPE", "invalid character class"},
- {REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"},
- {REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"},
- {REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"},
- {REG_EPAREN, "REG_EPAREN", "parentheses not balanced"},
- {REG_EBRACE, "REG_EBRACE", "braces not balanced"},
- {REG_BADBR, "REG_BADBR", "invalid repetition count(s)"},
- {REG_ERANGE, "REG_ERANGE", "invalid character range"},
- {REG_ESPACE, "REG_ESPACE", "out of memory"},
- {REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"},
- {REG_EMPTY, "REG_EMPTY", "empty (sub)expression"},
- {REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"},
- {REG_INVARG, "REG_INVARG", "invalid argument to regex routine"},
- {-1, "", "*** unknown regexp error code ***"},
-};
-
-/*
- - regerror - the interface to error numbers
- = API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t);
- */
-/* ARGSUSED */
-API_EXPORT(size_t)
-regerror(errcode, preg, errbuf, errbuf_size)
-int errcode;
-const regex_t *preg;
-char *errbuf;
-size_t errbuf_size;
-{
- register struct rerr *r;
- register size_t len;
- register int target = errcode &~ REG_ITOA;
- register char *s;
- char convbuf[50];
-
- if (errcode == REG_ATOI)
- s = regatoi(preg, convbuf);
- else {
- for (r = rerrs; r->code >= 0; r++)
- if (r->code == target)
- break;
-
- if (errcode&REG_ITOA) {
- if (r->code >= 0)
- (void) strcpy(convbuf, r->name);
- else
- sprintf(convbuf, "REG_0x%x", target);
- assert(strlen(convbuf) < sizeof(convbuf));
- s = convbuf;
- } else
- s = r->explain;
- }
-
- len = strlen(s) + 1;
- if (errbuf_size > 0) {
- if (errbuf_size > len)
- (void) strcpy(errbuf, s);
- else {
- (void) strncpy(errbuf, s, errbuf_size-1);
- errbuf[errbuf_size-1] = '\0';
- }
- }
-
- return(len);
-}
-
-/*
- - regatoi - internal routine to implement REG_ATOI
- == static char *regatoi(const regex_t *preg, char *localbuf);
- */
-static char *
-regatoi(preg, localbuf)
-const regex_t *preg;
-char *localbuf;
-{
- register struct rerr *r;
-
- for (r = rerrs; r->code >= 0; r++)
- if (strcmp(r->name, preg->re_endp) == 0)
- break;
- if (r->code < 0)
- return("0");
-
- sprintf(localbuf, "%d", r->code);
- return(localbuf);
-}
diff --git a/ext/ereg/regex/regerror.ih b/ext/ereg/regex/regerror.ih
deleted file mode 100644
index 2cb668c24f..0000000000
--- a/ext/ereg/regex/regerror.ih
+++ /dev/null
@@ -1,12 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regerror.c === */
-static char *regatoi(const regex_t *preg, char *localbuf);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/regex.3 b/ext/ereg/regex/regex.3
deleted file mode 100644
index 100c8a7f71..0000000000
--- a/ext/ereg/regex/regex.3
+++ /dev/null
@@ -1,502 +0,0 @@
-.TH REGEX 3 "17 May 1993"
-.BY "Henry Spencer"
-.de ZR
-.\" one other place knows this name: the SEE ALSO section
-.IR regex (7) \\$1
-..
-.SH NAME
-regcomp, regexec, regerror, regfree \- regular-expression library
-.SH SYNOPSIS
-.ft B
-.\".na
-#include <sys/types.h>
-.br
-#include <regex.h>
-.HP 10
-int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags);
-.HP
-int\ regexec(const\ regex_t\ *preg, const\ char\ *string,
-size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags);
-.HP
-size_t\ regerror(int\ errcode, const\ regex_t\ *preg,
-char\ *errbuf, size_t\ errbuf_size);
-.HP
-void\ regfree(regex_t\ *preg);
-.\".ad
-.ft
-.SH DESCRIPTION
-These routines implement POSIX 1003.2 regular expressions (``RE''s);
-see
-.ZR .
-.I Regcomp
-compiles an RE written as a string into an internal form,
-.I regexec
-matches that internal form against a string and reports results,
-.I regerror
-transforms error codes from either into human-readable messages,
-and
-.I regfree
-frees any dynamically-allocated storage used by the internal form
-of an RE.
-.PP
-The header
-.I <regex.h>
-declares two structure types,
-.I regex_t
-and
-.IR regmatch_t ,
-the former for compiled internal forms and the latter for match reporting.
-It also declares the four functions,
-a type
-.IR regoff_t ,
-and a number of constants with names starting with ``REG_''.
-.PP
-.I Regcomp
-compiles the regular expression contained in the
-.I pattern
-string,
-subject to the flags in
-.IR cflags ,
-and places the results in the
-.I regex_t
-structure pointed to by
-.IR preg .
-.I Cflags
-is the bitwise OR of zero or more of the following flags:
-.IP REG_EXTENDED \w'REG_EXTENDED'u+2n
-Compile modern (``extended'') REs,
-rather than the obsolete (``basic'') REs that
-are the default.
-.IP REG_BASIC
-This is a synonym for 0,
-provided as a counterpart to REG_EXTENDED to improve readability.
-.IP REG_NOSPEC
-Compile with recognition of all special characters turned off.
-All characters are thus considered ordinary,
-so the ``RE'' is a literal string.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-REG_EXTENDED and REG_NOSPEC may not be used
-in the same call to
-.IR regcomp .
-.IP REG_ICASE
-Compile for matching that ignores upper/lower case distinctions.
-See
-.ZR .
-.IP REG_NOSUB
-Compile for matching that need only report success or failure,
-not what was matched.
-.IP REG_NEWLINE
-Compile for newline-sensitive matching.
-By default, newline is a completely ordinary character with no special
-meaning in either REs or strings.
-With this flag,
-`[^' bracket expressions and `.' never match newline,
-a `^' anchor matches the null string after any newline in the string
-in addition to its normal function,
-and the `$' anchor matches the null string before any newline in the
-string in addition to its normal function.
-.IP REG_PEND
-The regular expression ends,
-not at the first NUL,
-but just before the character pointed to by the
-.I re_endp
-member of the structure pointed to by
-.IR preg .
-The
-.I re_endp
-member is of type
-.IR const\ char\ * .
-This flag permits inclusion of NULs in the RE;
-they are considered ordinary characters.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-.PP
-When successful,
-.I regcomp
-returns 0 and fills in the structure pointed to by
-.IR preg .
-One member of that structure
-(other than
-.IR re_endp )
-is publicized:
-.IR re_nsub ,
-of type
-.IR size_t ,
-contains the number of parenthesized subexpressions within the RE
-(except that the value of this member is undefined if the
-REG_NOSUB flag was used).
-If
-.I regcomp
-fails, it returns a non-zero error code;
-see DIAGNOSTICS.
-.PP
-.I Regexec
-matches the compiled RE pointed to by
-.I preg
-against the
-.IR string ,
-subject to the flags in
-.IR eflags ,
-and reports results using
-.IR nmatch ,
-.IR pmatch ,
-and the returned value.
-The RE must have been compiled by a previous invocation of
-.IR regcomp .
-The compiled form is not altered during execution of
-.IR regexec ,
-so a single compiled RE can be used simultaneously by multiple threads.
-.PP
-By default,
-the NUL-terminated string pointed to by
-.I string
-is considered to be the text of an entire line, minus any terminating
-newline.
-The
-.I eflags
-argument is the bitwise OR of zero or more of the following flags:
-.IP REG_NOTBOL \w'REG_STARTEND'u+2n
-The first character of
-the string
-is not the beginning of a line, so the `^' anchor should not match before it.
-This does not affect the behavior of newlines under REG_NEWLINE.
-.IP REG_NOTEOL
-The NUL terminating
-the string
-does not end a line, so the `$' anchor should not match before it.
-This does not affect the behavior of newlines under REG_NEWLINE.
-.IP REG_STARTEND
-The string is considered to start at
-\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR
-and to have a terminating NUL located at
-\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR
-(there need not actually be a NUL at that location),
-regardless of the value of
-.IR nmatch .
-See below for the definition of
-.IR pmatch
-and
-.IR nmatch .
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-Note that a non-zero \fIrm_so\fR does not imply REG_NOTBOL;
-REG_STARTEND affects only the location of the string,
-not how it is matched.
-.PP
-See
-.ZR
-for a discussion of what is matched in situations where an RE or a
-portion thereof could match any of several substrings of
-.IR string .
-.PP
-Normally,
-.I regexec
-returns 0 for success and the non-zero code REG_NOMATCH for failure.
-Other non-zero error codes may be returned in exceptional situations;
-see DIAGNOSTICS.
-.PP
-If REG_NOSUB was specified in the compilation of the RE,
-or if
-.I nmatch
-is 0,
-.I regexec
-ignores the
-.I pmatch
-argument (but see below for the case where REG_STARTEND is specified).
-Otherwise,
-.I pmatch
-points to an array of
-.I nmatch
-structures of type
-.IR regmatch_t .
-Such a structure has at least the members
-.I rm_so
-and
-.IR rm_eo ,
-both of type
-.I regoff_t
-(a signed arithmetic type at least as large as an
-.I off_t
-and a
-.IR ssize_t ),
-containing respectively the offset of the first character of a substring
-and the offset of the first character after the end of the substring.
-Offsets are measured from the beginning of the
-.I string
-argument given to
-.IR regexec .
-An empty substring is denoted by equal offsets,
-both indicating the character following the empty substring.
-.PP
-The 0th member of the
-.I pmatch
-array is filled in to indicate what substring of
-.I string
-was matched by the entire RE.
-Remaining members report what substring was matched by parenthesized
-subexpressions within the RE;
-member
-.I i
-reports subexpression
-.IR i ,
-with subexpressions counted (starting at 1) by the order of their opening
-parentheses in the RE, left to right.
-Unused entries in the array\(emcorresponding either to subexpressions that
-did not participate in the match at all, or to subexpressions that do not
-exist in the RE (that is, \fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR)\(emhave both
-.I rm_so
-and
-.I rm_eo
-set to \-1.
-If a subexpression participated in the match several times,
-the reported substring is the last one it matched.
-(Note, as an example in particular, that when the RE `(b*)+' matches `bbb',
-the parenthesized subexpression matches each of the three `b's and then
-an infinite number of empty strings following the last `b',
-so the reported substring is one of the empties.)
-.PP
-If REG_STARTEND is specified,
-.I pmatch
-must point to at least one
-.I regmatch_t
-(even if
-.I nmatch
-is 0 or REG_NOSUB was specified),
-to hold the input offsets for REG_STARTEND.
-Use for output is still entirely controlled by
-.IR nmatch ;
-if
-.I nmatch
-is 0 or REG_NOSUB was specified,
-the value of
-.IR pmatch [0]
-will not be changed by a successful
-.IR regexec .
-.PP
-.I Regerror
-maps a non-zero
-.I errcode
-from either
-.I regcomp
-or
-.I regexec
-to a human-readable, printable message.
-If
-.I preg
-is non-NULL,
-the error code should have arisen from use of
-the
-.I regex_t
-pointed to by
-.IR preg ,
-and if the error code came from
-.IR regcomp ,
-it should have been the result from the most recent
-.I regcomp
-using that
-.IR regex_t .
-.RI ( Regerror
-may be able to supply a more detailed message using information
-from the
-.IR regex_t .)
-.I Regerror
-places the NUL-terminated message into the buffer pointed to by
-.IR errbuf ,
-limiting the length (including the NUL) to at most
-.I errbuf_size
-bytes.
-If the whole message won't fit,
-as much of it as will fit before the terminating NUL is supplied.
-In any case,
-the returned value is the size of buffer needed to hold the whole
-message (including terminating NUL).
-If
-.I errbuf_size
-is 0,
-.I errbuf
-is ignored but the return value is still correct.
-.PP
-If the
-.I errcode
-given to
-.I regerror
-is first ORed with REG_ITOA,
-the ``message'' that results is the printable name of the error code,
-e.g. ``REG_NOMATCH'',
-rather than an explanation thereof.
-If
-.I errcode
-is REG_ATOI,
-then
-.I preg
-shall be non-NULL and the
-.I re_endp
-member of the structure it points to
-must point to the printable name of an error code;
-in this case, the result in
-.I errbuf
-is the decimal digits of
-the numeric value of the error code
-(0 if the name is not recognized).
-REG_ITOA and REG_ATOI are intended primarily as debugging facilities;
-they are extensions,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-Be warned also that they are considered experimental and changes are possible.
-.PP
-.I Regfree
-frees any dynamically-allocated storage associated with the compiled RE
-pointed to by
-.IR preg .
-The remaining
-.I regex_t
-is no longer a valid compiled RE
-and the effect of supplying it to
-.I regexec
-or
-.I regerror
-is undefined.
-.PP
-None of these functions references global variables except for tables
-of constants;
-all are safe for use from multiple threads if the arguments are safe.
-.SH IMPLEMENTATION CHOICES
-There are a number of decisions that 1003.2 leaves up to the implementor,
-either by explicitly saying ``undefined'' or by virtue of them being
-forbidden by the RE grammar.
-This implementation treats them as follows.
-.PP
-See
-.ZR
-for a discussion of the definition of case-independent matching.
-.PP
-There is no particular limit on the length of REs,
-except insofar as memory is limited.
-Memory usage is approximately linear in RE size, and largely insensitive
-to RE complexity, except for bounded repetitions.
-See BUGS for one short RE using them
-that will run almost any system out of memory.
-.PP
-A backslashed character other than one specifically given a magic meaning
-by 1003.2 (such magic meanings occur only in obsolete [``basic''] REs)
-is taken as an ordinary character.
-.PP
-Any unmatched [ is a REG_EBRACK error.
-.PP
-Equivalence classes cannot begin or end bracket-expression ranges.
-The endpoint of one range cannot begin another.
-.PP
-RE_DUP_MAX, the limit on repetition counts in bounded repetitions, is 255.
-.PP
-A repetition operator (?, *, +, or bounds) cannot follow another
-repetition operator.
-A repetition operator cannot begin an expression or subexpression
-or follow `^' or `|'.
-.PP
-`|' cannot appear first or last in a (sub)expression or after another `|',
-i.e. an operand of `|' cannot be an empty subexpression.
-An empty parenthesized subexpression, `()', is legal and matches an
-empty (sub)string.
-An empty string is not a legal RE.
-.PP
-A `{' followed by a digit is considered the beginning of bounds for a
-bounded repetition, which must then follow the syntax for bounds.
-A `{' \fInot\fR followed by a digit is considered an ordinary character.
-.PP
-`^' and `$' beginning and ending subexpressions in obsolete (``basic'')
-REs are anchors, not ordinary characters.
-.SH SEE ALSO
-grep(1), regex(7)
-.PP
-POSIX 1003.2, sections 2.8 (Regular Expression Notation)
-and
-B.5 (C Binding for Regular Expression Matching).
-.SH DIAGNOSTICS
-Non-zero error codes from
-.I regcomp
-and
-.I regexec
-include the following:
-.PP
-.nf
-.ta \w'REG_ECOLLATE'u+3n
-REG_NOMATCH regexec() failed to match
-REG_BADPAT invalid regular expression
-REG_ECOLLATE invalid collating element
-REG_ECTYPE invalid character class
-REG_EESCAPE \e applied to unescapable character
-REG_ESUBREG invalid backreference number
-REG_EBRACK brackets [ ] not balanced
-REG_EPAREN parentheses ( ) not balanced
-REG_EBRACE braces { } not balanced
-REG_BADBR invalid repetition count(s) in { }
-REG_ERANGE invalid character range in [ ]
-REG_ESPACE ran out of memory
-REG_BADRPT ?, *, or + operand invalid
-REG_EMPTY empty (sub)expression
-REG_ASSERT ``can't happen''\(emyou found a bug
-REG_INVARG invalid argument, e.g. negative-length string
-.fi
-.SH HISTORY
-Written by Henry Spencer at University of Toronto,
-henry@zoo.toronto.edu.
-.SH BUGS
-This is an alpha release with known defects.
-Please report problems.
-.PP
-There is one known functionality bug.
-The implementation of internationalization is incomplete:
-the locale is always assumed to be the default one of 1003.2,
-and only the collating elements etc. of that locale are available.
-.PP
-The back-reference code is subtle and doubts linger about its correctness
-in complex cases.
-.PP
-.I Regexec
-performance is poor.
-This will improve with later releases.
-.I Nmatch
-exceeding 0 is expensive;
-.I nmatch
-exceeding 1 is worse.
-.I Regexec
-is largely insensitive to RE complexity \fIexcept\fR that back
-references are massively expensive.
-RE length does matter; in particular, there is a strong speed bonus
-for keeping RE length under about 30 characters,
-with most special characters counting roughly double.
-.PP
-.I Regcomp
-implements bounded repetitions by macro expansion,
-which is costly in time and space if counts are large
-or bounded repetitions are nested.
-An RE like, say,
-`((((a{1,100}){1,100}){1,100}){1,100}){1,100}'
-will (eventually) run almost any existing machine out of swap space.
-.PP
-There are suspected problems with response to obscure error conditions.
-Notably,
-certain kinds of internal overflow,
-produced only by truly enormous REs or by multiply nested bounded repetitions,
-are probably not handled well.
-.PP
-Due to a mistake in 1003.2, things like `a)b' are legal REs because `)' is
-a special character only in the presence of a previous unmatched `('.
-This can't be fixed until the spec is fixed.
-.PP
-The standard's definition of back references is vague.
-For example, does
-`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?
-Until the standard is clarified,
-behavior in such cases should not be relied on.
-.PP
-The implementation of word-boundary matching is a bit of a kludge,
-and bugs may lurk in combinations of word-boundary matching and anchoring.
diff --git a/ext/ereg/regex/regex.7 b/ext/ereg/regex/regex.7
deleted file mode 100644
index d89012bda1..0000000000
--- a/ext/ereg/regex/regex.7
+++ /dev/null
@@ -1,233 +0,0 @@
-.TH REGEX 7 "7 Feb 1994"
-.BY "Henry Spencer"
-.SH NAME
-regex \- POSIX 1003.2 regular expressions
-.SH DESCRIPTION
-Regular expressions (``RE''s),
-as defined in POSIX 1003.2, come in two forms:
-modern REs (roughly those of
-.IR egrep ;
-1003.2 calls these ``extended'' REs)
-and obsolete REs (roughly those of
-.IR ed ;
-1003.2 ``basic'' REs).
-Obsolete REs mostly exist for backward compatibility in some old programs;
-they will be discussed at the end.
-1003.2 leaves some aspects of RE syntax and semantics open;
-`\(dg' marks decisions on these aspects that
-may not be fully portable to other 1003.2 implementations.
-.PP
-A (modern) RE is one\(dg or more non-empty\(dg \fIbranches\fR,
-separated by `|'.
-It matches anything that matches one of the branches.
-.PP
-A branch is one\(dg or more \fIpieces\fR, concatenated.
-It matches a match for the first, followed by a match for the second, etc.
-.PP
-A piece is an \fIatom\fR possibly followed
-by a single\(dg `*', `+', `?', or \fIbound\fR.
-An atom followed by `*' matches a sequence of 0 or more matches of the atom.
-An atom followed by `+' matches a sequence of 1 or more matches of the atom.
-An atom followed by `?' matches a sequence of 0 or 1 matches of the atom.
-.PP
-A \fIbound\fR is `{' followed by an unsigned decimal integer,
-possibly followed by `,'
-possibly followed by another unsigned decimal integer,
-always followed by `}'.
-The integers must lie between 0 and RE_DUP_MAX (255\(dg) inclusive,
-and if there are two of them, the first may not exceed the second.
-An atom followed by a bound containing one integer \fIi\fR
-and no comma matches
-a sequence of exactly \fIi\fR matches of the atom.
-An atom followed by a bound
-containing one integer \fIi\fR and a comma matches
-a sequence of \fIi\fR or more matches of the atom.
-An atom followed by a bound
-containing two integers \fIi\fR and \fIj\fR matches
-a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom.
-.PP
-An atom is a regular expression enclosed in `()' (matching a match for the
-regular expression),
-an empty set of `()' (matching the null string)\(dg,
-a \fIbracket expression\fR (see below), `.'
-(matching any single character), `^' (matching the null string at the
-beginning of a line), `$' (matching the null string at the
-end of a line), a `\e' followed by one of the characters
-`^.[$()|*+?{\e'
-(matching that character taken as an ordinary character),
-a `\e' followed by any other character\(dg
-(matching that character taken as an ordinary character,
-as if the `\e' had not been present\(dg),
-or a single character with no other significance (matching that character).
-A `{' followed by a character other than a digit is an ordinary
-character, not the beginning of a bound\(dg.
-It is illegal to end an RE with `\e'.
-.PP
-A \fIbracket expression\fR is a list of characters enclosed in `[]'.
-It normally matches any single character from the list (but see below).
-If the list begins with `^',
-it matches any single character
-(but see below) \fInot\fR from the rest of the list.
-If two characters in the list are separated by `\-', this is shorthand
-for the full \fIrange\fR of characters between those two (inclusive) in the
-collating sequence,
-e.g. `[0-9]' in ASCII matches any decimal digit.
-It is illegal\(dg for two ranges to share an
-endpoint, e.g. `a-c-e'.
-Ranges are very collating-sequence-dependent,
-and portable programs should avoid relying on them.
-.PP
-To include a literal `]' in the list, make it the first character
-(following a possible `^').
-To include a literal `\-', make it the first or last character,
-or the second endpoint of a range.
-To use a literal `\-' as the first endpoint of a range,
-enclose it in `[.' and `.]' to make it a collating element (see below).
-With the exception of these and some combinations using `[' (see next
-paragraphs), all other special characters, including `\e', lose their
-special significance within a bracket expression.
-.PP
-Within a bracket expression, a collating element (a character,
-a multi-character sequence that collates as if it were a single character,
-or a collating-sequence name for either)
-enclosed in `[.' and `.]' stands for the
-sequence of characters of that collating element.
-The sequence is a single element of the bracket expression's list.
-A bracket expression containing a multi-character collating element
-can thus match more than one character,
-e.g. if the collating sequence includes a `ch' collating element,
-then the RE `[[.ch.]]*c' matches the first five characters
-of `chchcc'.
-.PP
-Within a bracket expression, a collating element enclosed in `[=' and
-`=]' is an equivalence class, standing for the sequences of characters
-of all collating elements equivalent to that one, including itself.
-(If there are no other equivalent collating elements,
-the treatment is as if the enclosing delimiters were `[.' and `.]'.)
-For example, if o and \o'o^' are the members of an equivalence class,
-then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are all synonymous.
-An equivalence class may not\(dg be an endpoint
-of a range.
-.PP
-Within a bracket expression, the name of a \fIcharacter class\fR enclosed
-in `[:' and `:]' stands for the list of all characters belonging to that
-class.
-Standard character class names are:
-.PP
-.RS
-.nf
-.ta 3c 6c 9c
-alnum digit punct
-alpha graph space
-blank lower upper
-cntrl print xdigit
-.fi
-.RE
-.PP
-These stand for the character classes defined in
-.IR ctype (3).
-A locale may provide others.
-A character class may not be used as an endpoint of a range.
-.PP
-There are two special cases\(dg of bracket expressions:
-the bracket expressions `[[:<:]]' and `[[:>:]]' match the null string at
-the beginning and end of a word respectively.
-A word is defined as a sequence of
-word characters
-which is neither preceded nor followed by
-word characters.
-A word character is an
-.I alnum
-character (as defined by
-.IR ctype (3))
-or an underscore.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-.PP
-In the event that an RE could match more than one substring of a given
-string,
-the RE matches the one starting earliest in the string.
-If the RE could match more than one substring starting at that point,
-it matches the longest.
-Subexpressions also match the longest possible substrings, subject to
-the constraint that the whole match be as long as possible,
-with subexpressions starting earlier in the RE taking priority over
-ones starting later.
-Note that higher-level subexpressions thus take priority over
-their lower-level component subexpressions.
-.PP
-Match lengths are measured in characters, not collating elements.
-A null string is considered longer than no match at all.
-For example,
-`bb*' matches the three middle characters of `abbbc',
-`(wee|week)(knights|nights)' matches all ten characters of `weeknights',
-when `(.*).*' is matched against `abc' the parenthesized subexpression
-matches all three characters, and
-when `(a*)*' is matched against `bc' both the whole RE and the parenthesized
-subexpression match the null string.
-.PP
-If case-independent matching is specified,
-the effect is much as if all case distinctions had vanished from the
-alphabet.
-When an alphabetic that exists in multiple cases appears as an
-ordinary character outside a bracket expression, it is effectively
-transformed into a bracket expression containing both cases,
-e.g. `x' becomes `[xX]'.
-When it appears inside a bracket expression, all case counterparts
-of it are added to the bracket expression, so that (e.g.) `[x]'
-becomes `[xX]' and `[^x]' becomes `[^xX]'.
-.PP
-No particular limit is imposed on the length of REs\(dg.
-Programs intended to be portable should not employ REs longer
-than 256 bytes,
-as an implementation can refuse to accept such REs and remain
-POSIX-compliant.
-.PP
-Obsolete (``basic'') regular expressions differ in several respects.
-`|', `+', and `?' are ordinary characters and there is no equivalent
-for their functionality.
-The delimiters for bounds are `\e{' and `\e}',
-with `{' and `}' by themselves ordinary characters.
-The parentheses for nested subexpressions are `\e(' and `\e)',
-with `(' and `)' by themselves ordinary characters.
-`^' is an ordinary character except at the beginning of the
-RE or\(dg the beginning of a parenthesized subexpression,
-`$' is an ordinary character except at the end of the
-RE or\(dg the end of a parenthesized subexpression,
-and `*' is an ordinary character if it appears at the beginning of the
-RE or the beginning of a parenthesized subexpression
-(after a possible leading `^').
-Finally, there is one new type of atom, a \fIback reference\fR:
-`\e' followed by a non-zero decimal digit \fId\fR
-matches the same sequence of characters
-matched by the \fId\fRth parenthesized subexpression
-(numbering subexpressions by the positions of their opening parentheses,
-left to right),
-so that (e.g.) `\e([bc]\e)\e1' matches `bb' or `cc' but not `bc'.
-.SH SEE ALSO
-regex(3)
-.PP
-POSIX 1003.2, section 2.8 (Regular Expression Notation).
-.SH BUGS
-Having two kinds of REs is a botch.
-.PP
-The current 1003.2 spec says that `)' is an ordinary character in
-the absence of an unmatched `(';
-this was an unintentional result of a wording error,
-and change is likely.
-Avoid relying on it.
-.PP
-Back references are a dreadful botch,
-posing major problems for efficient implementations.
-They are also somewhat vaguely defined
-(does
-`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?).
-Avoid using them.
-.PP
-1003.2's specification of case-independent matching is vague.
-The ``one case implies all cases'' definition given above
-is current consensus among implementors as to the right interpretation.
-.PP
-The syntax for word boundaries is incredibly ugly.
diff --git a/ext/ereg/regex/regex.dsp b/ext/ereg/regex/regex.dsp
deleted file mode 100644
index e8f1ad4299..0000000000
--- a/ext/ereg/regex/regex.dsp
+++ /dev/null
@@ -1,106 +0,0 @@
-# Microsoft Developer Studio Project File - Name="regex" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=regex - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "regex - Win32 Release"
-# Name "regex - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\regcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regexec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regfree.c
-# End Source File
-# End Target
-# End Project
diff --git a/ext/ereg/regex/regex.dsw b/ext/ereg/regex/regex.dsw
deleted file mode 100644
index 7b7df8126c..0000000000
--- a/ext/ereg/regex/regex.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 5.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "regex"=.\regex.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/ext/ereg/regex/regex.h b/ext/ereg/regex/regex.h
deleted file mode 100644
index b39c5e178c..0000000000
--- a/ext/ereg/regex/regex.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef _HSREGEX_H_
-#define _HSREGEX_H_
-#ifndef _HSREGEX_H
-#define _HSREGEX_H /* never again */
-/* ========= begin header generated by ././mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regex2.h === */
-#ifdef WIN32
-#define API_EXPORT(type) __declspec(dllexport) type __stdcall
-#else
-#define API_EXPORT(type) type
-#endif
-
-typedef off_t regoff_t;
-typedef struct {
- int re_magic;
- size_t re_nsub; /* number of parenthesized subexpressions */
- const char *re_endp; /* end pointer for REG_PEND */
- struct re_guts *re_g; /* none of your business :-) */
-} regex_t;
-typedef struct {
- regoff_t rm_so; /* start of match */
- regoff_t rm_eo; /* end of match */
-} regmatch_t;
-
-
-/* === regcomp.c === */
-API_EXPORT(int) regcomp(regex_t *, const char *, int);
-#define REG_BASIC 0000
-#define REG_EXTENDED 0001
-#define REG_ICASE 0002
-#define REG_NOSUB 0004
-#define REG_NEWLINE 0010
-#define REG_NOSPEC 0020
-#define REG_PEND 0040
-#define REG_DUMP 0200
-
-
-/* === regerror.c === */
-#define REG_OKAY 0
-#define REG_NOMATCH 1
-#define REG_BADPAT 2
-#define REG_ECOLLATE 3
-#define REG_ECTYPE 4
-#define REG_EESCAPE 5
-#define REG_ESUBREG 6
-#define REG_EBRACK 7
-#define REG_EPAREN 8
-#define REG_EBRACE 9
-#define REG_BADBR 10
-#define REG_ERANGE 11
-#define REG_ESPACE 12
-#define REG_BADRPT 13
-#define REG_EMPTY 14
-#define REG_ASSERT 15
-#define REG_INVARG 16
-#define REG_ATOI 255 /* convert name to number (!) */
-#define REG_ITOA 0400 /* convert number to name (!) */
-API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t);
-
-
-/* === regexec.c === */
-API_EXPORT(int) regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
-#define REG_NOTBOL 00001
-#define REG_NOTEOL 00002
-#define REG_STARTEND 00004
-#define REG_TRACE 00400 /* tracing of execution */
-#define REG_LARGE 01000 /* force large representation */
-#define REG_BACKR 02000 /* force use of backref code */
-
-
-/* === regfree.c === */
-API_EXPORT(void) regfree(regex_t *);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ././mkh ========= */
-#endif
-#endif
diff --git a/ext/ereg/regex/regex.mak b/ext/ereg/regex/regex.mak
deleted file mode 100644
index b87ded340b..0000000000
--- a/ext/ereg/regex/regex.mak
+++ /dev/null
@@ -1,304 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Based on regex.dsp
-!IF "$(CFG)" == ""
-CFG=regex - Win32 Release
-!MESSAGE No configuration specified. Defaulting to regex - Win32 Release.
-!ENDIF
-
-!IF "$(CFG)" != "regex - Win32 Release" && "$(CFG)" != "regex - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-!ERROR An invalid configuration is specified.
-!ENDIF
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-CPP=cl.exe
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-OUTDIR=.\Release
-INTDIR=.\Release
-# Begin Custom Macros
-OutDir=.\.\Release
-# End Custom Macros
-
-!IF "$(RECURSE)" == "0"
-
-ALL : "$(OUTDIR)\regex.lib"
-
-!ELSE
-
-ALL : "$(OUTDIR)\regex.lib"
-
-!ENDIF
-
-CLEAN :
- -@erase "$(INTDIR)\regcomp.obj"
- -@erase "$(INTDIR)\regerror.obj"
- -@erase "$(INTDIR)\regexec.obj"
- -@erase "$(INTDIR)\regfree.obj"
- -@erase "$(INTDIR)\vc50.idb"
- -@erase "$(OUTDIR)\regex.lib"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\
- /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
-CPP_OBJS=.\Release/
-CPP_SBRS=.
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc"
-BSC32_SBRS= \
-
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib"
-LIB32_OBJS= \
- "$(INTDIR)\regcomp.obj" \
- "$(INTDIR)\regerror.obj" \
- "$(INTDIR)\regexec.obj" \
- "$(INTDIR)\regfree.obj"
-
-"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-OUTDIR=.\Debug
-INTDIR=.\Debug
-# Begin Custom Macros
-OutDir=.\.\Debug
-# End Custom Macros
-
-!IF "$(RECURSE)" == "0"
-
-ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc"
-
-!ELSE
-
-ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc"
-
-!ENDIF
-
-CLEAN :
- -@erase "$(INTDIR)\regcomp.obj"
- -@erase "$(INTDIR)\regcomp.sbr"
- -@erase "$(INTDIR)\regerror.obj"
- -@erase "$(INTDIR)\regerror.sbr"
- -@erase "$(INTDIR)\regexec.obj"
- -@erase "$(INTDIR)\regexec.sbr"
- -@erase "$(INTDIR)\regfree.obj"
- -@erase "$(INTDIR)\regfree.sbr"
- -@erase "$(INTDIR)\vc50.idb"
- -@erase "$(OUTDIR)\regex.bsc"
- -@erase "$(OUTDIR)\regex.lib"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MDd /W3 /GX /Z7 /Od /I "." /D "WIN32" /D "_DEBUG" /D\
- "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\"\
- /Fd"$(INTDIR)\\" /FD /c
-CPP_OBJS=.\Debug/
-CPP_SBRS=.\Debug/
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc"
-BSC32_SBRS= \
- "$(INTDIR)\regcomp.sbr" \
- "$(INTDIR)\regerror.sbr" \
- "$(INTDIR)\regexec.sbr" \
- "$(INTDIR)\regfree.sbr"
-
-"$(OUTDIR)\regex.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib"
-LIB32_OBJS= \
- "$(INTDIR)\regcomp.obj" \
- "$(INTDIR)\regerror.obj" \
- "$(INTDIR)\regexec.obj" \
- "$(INTDIR)\regfree.obj"
-
-"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ENDIF
-
-.c{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.c{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-
-!IF "$(CFG)" == "regex - Win32 Release" || "$(CFG)" == "regex - Win32 Debug"
-SOURCE=.\regcomp.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGCO=\
- ".\cclass.h"\
- ".\cname.h"\
- ".\regcomp.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regcomp.obj" : $(SOURCE) $(DEP_CPP_REGCO) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGCO=\
- ".\cclass.h"\
- ".\cname.h"\
- ".\regcomp.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regcomp.obj" "$(INTDIR)\regcomp.sbr" : $(SOURCE) $(DEP_CPP_REGCO)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regerror.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGER=\
- ".\regerror.ih"\
- ".\regex.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regerror.obj" : $(SOURCE) $(DEP_CPP_REGER) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGER=\
- ".\regerror.ih"\
- ".\regex.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regerror.obj" "$(INTDIR)\regerror.sbr" : $(SOURCE) $(DEP_CPP_REGER)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regexec.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGEX=\
- ".\engine.c"\
- ".\engine.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regexec.obj" : $(SOURCE) $(DEP_CPP_REGEX) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGEX=\
- ".\engine.c"\
- ".\engine.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regexec.obj" "$(INTDIR)\regexec.sbr" : $(SOURCE) $(DEP_CPP_REGEX)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regfree.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGFR=\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regfree.obj" : $(SOURCE) $(DEP_CPP_REGFR) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGFR=\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regfree.obj" "$(INTDIR)\regfree.sbr" : $(SOURCE) $(DEP_CPP_REGFR)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\engine.c
-
-!ENDIF
-
diff --git a/ext/ereg/regex/regex2.h b/ext/ereg/regex/regex2.h
deleted file mode 100644
index 7cd39a59ae..0000000000
--- a/ext/ereg/regex/regex2.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * First, the stuff that ends up in the outside-world include file
- = #ifdef WIN32
- = #define API_EXPORT(type) __declspec(dllexport) type __stdcall
- = #else
- = #define API_EXPORT(type) type
- = #endif
- =
- = typedef off_t regoff_t;
- = typedef struct {
- = int re_magic;
- = size_t re_nsub; // number of parenthesized subexpressions
- = const char *re_endp; // end pointer for REG_PEND
- = struct re_guts *re_g; // none of your business :-)
- = } regex_t;
- = typedef struct {
- = regoff_t rm_so; // start of match
- = regoff_t rm_eo; // end of match
- = } regmatch_t;
- */
-/*
- * internals of regex_t
- */
-#define MAGIC1 ((('r'^0200)<<8) | 'e')
-
-/*
- * The internal representation is a *strip*, a sequence of
- * operators ending with an endmarker. (Some terminology etc. is a
- * historical relic of earlier versions which used multiple strips.)
- * Certain oddities in the representation are there to permit running
- * the machinery backwards; in particular, any deviation from sequential
- * flow must be marked at both its source and its destination. Some
- * fine points:
- *
- * - OPLUS_ and O_PLUS are *inside* the loop they create.
- * - OQUEST_ and O_QUEST are *outside* the bypass they create.
- * - OCH_ and O_CH are *outside* the multi-way branch they create, while
- * OOR1 and OOR2 are respectively the end and the beginning of one of
- * the branches. Note that there is an implicit OOR2 following OCH_
- * and an implicit OOR1 preceding O_CH.
- *
- * In state representations, an operator's bit is on to signify a state
- * immediately *preceding* "execution" of that operator.
- */
-typedef long sop; /* strip operator */
-typedef long sopno;
-#define OPRMASK 0x7c000000
-#define OPDMASK 0x03ffffff
-#define OPSHIFT (26)
-#define OP(n) ((n)&OPRMASK)
-#define OPND(n) ((n)&OPDMASK)
-#define SOP(op, opnd) ((op)|(opnd))
-/* operators meaning operand */
-/* (back, fwd are offsets) */
-#define OEND (1<<OPSHIFT) /* endmarker - */
-#define OCHAR (2<<OPSHIFT) /* character unsigned char */
-#define OBOL (3<<OPSHIFT) /* left anchor - */
-#define OEOL (4<<OPSHIFT) /* right anchor - */
-#define OANY (5<<OPSHIFT) /* . - */
-#define OANYOF (6<<OPSHIFT) /* [...] set number */
-#define OBACK_ (7<<OPSHIFT) /* begin \d paren number */
-#define O_BACK (8<<OPSHIFT) /* end \d paren number */
-#define OPLUS_ (9<<OPSHIFT) /* + prefix fwd to suffix */
-#define O_PLUS (10<<OPSHIFT) /* + suffix back to prefix */
-#define OQUEST_ (11<<OPSHIFT) /* ? prefix fwd to suffix */
-#define O_QUEST (12<<OPSHIFT) /* ? suffix back to prefix */
-#define OLPAREN (13<<OPSHIFT) /* ( fwd to ) */
-#define ORPAREN (14<<OPSHIFT) /* ) back to ( */
-#define OCH_ (15<<OPSHIFT) /* begin choice fwd to OOR2 */
-#define OOR1 (16<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */
-#define OOR2 (17<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */
-#define O_CH (18<<OPSHIFT) /* end choice back to OOR1 */
-#define OBOW (19<<OPSHIFT) /* begin word - */
-#define OEOW (20<<OPSHIFT) /* end word - */
-
-/*
- * Structure for [] character-set representation. Character sets are
- * done as bit vectors, grouped 8 to a byte vector for compactness.
- * The individual set therefore has both a pointer to the byte vector
- * and a mask to pick out the relevant bit of each byte. A hash code
- * simplifies testing whether two sets could be identical.
- *
- * This will get trickier for multicharacter collating elements. As
- * preliminary hooks for dealing with such things, we also carry along
- * a string of multi-character elements, and decide the size of the
- * vectors at run time.
- */
-typedef struct {
- uch *ptr; /* -> uch [csetsize] */
- uch mask; /* bit within array */
- uch hash; /* hash code */
- size_t smultis;
- char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */
-} cset;
-/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */
-#define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c))
-#define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c))
-#define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask)
-#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */
-#define MCsub(p, cs, cp) mcsub(p, cs, cp)
-#define MCin(p, cs, cp) mcin(p, cs, cp)
-
-/* stuff for character categories */
-typedef unsigned char cat_t;
-
-/*
- * main compiled-expression structure
- */
-struct re_guts {
- int magic;
-# define MAGIC2 ((('R'^0200)<<8)|'E')
- sop *strip; /* malloced area for strip */
- int csetsize; /* number of bits in a cset vector */
- int ncsets; /* number of csets in use */
- cset *sets; /* -> cset [ncsets] */
- uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT] */
- int cflags; /* copy of regcomp() cflags argument */
- sopno nstates; /* = number of sops */
- sopno firststate; /* the initial OEND (normally 0) */
- sopno laststate; /* the final OEND */
- int iflags; /* internal flags */
-# define USEBOL 01 /* used ^ */
-# define USEEOL 02 /* used $ */
-# define BAD 04 /* something wrong */
- int nbol; /* number of ^ used */
- int neol; /* number of $ used */
- int ncategories; /* how many character categories */
- cat_t *categories; /* ->catspace[-CHAR_MIN] */
- char *must; /* match must contain this string */
- int mlen; /* length of must */
- size_t nsub; /* copy of re_nsub */
- int backrefs; /* does it use back references? */
- sopno nplus; /* how deep does it nest +s? */
- /* catspace must be last */
- cat_t catspace[1]; /* actually [NC] */
-};
-
-/* misc utilities */
-#define OUT (CHAR_MAX+1) /* a non-character value */
-#define ISWORD(c) (isalnum(c) || (c) == '_')
diff --git a/ext/ereg/regex/regex_extra.h b/ext/ereg/regex/regex_extra.h
deleted file mode 100644
index 3db9e4ad1a..0000000000
--- a/ext/ereg/regex/regex_extra.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* do not frame this - we must be able to include this file multiple times */
-
-#undef regexec
-#undef regerror
-#undef regfree
-#undef regcomp
-
-#if (defined(REGEX) && REGEX == 1) || (!defined(REGEX))
-
-#if !(WIN32|WINNT)
-
-#ifndef PHP_NO_ALIASES
-
-#define regexec php_regexec
-#define regerror php_regerror
-#define regfree php_regfree
-#define regcomp php_regcomp
-
-#endif
-
-#endif
-
-#endif
diff --git a/ext/ereg/regex/regexec.c b/ext/ereg/regex/regexec.c
deleted file mode 100644
index 7888d02368..0000000000
--- a/ext/ereg/regex/regexec.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * the outer shell of regexec()
- *
- * This file includes engine.c *twice*, after muchos fiddling with the
- * macros that code uses. This lets the same code operate on two different
- * representations for state sets.
- */
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-static int nope = 0; /* for use in asserts; shuts lint up */
-
-/* macros for manipulating states, small version */
-#define states unsigned
-#define states1 unsigned /* for later use in regexec() decision */
-#define CLEAR(v) ((v) = 0)
-#define SET0(v, n) ((v) &= ~((unsigned)1 << (n)))
-#define SET1(v, n) ((v) |= (unsigned)1 << (n))
-#define ISSET(v, n) ((v) & ((unsigned)1 << (n)))
-#define ASSIGN(d, s) ((d) = (s))
-#define EQ(a, b) ((a) == (b))
-#define STATEVARS int dummy /* dummy version */
-#define STATESETUP(m, n) /* nothing */
-#define STATETEARDOWN(m) /* nothing */
-#define SETUP(v) ((v) = 0)
-#define onestate unsigned
-#define INIT(o, n) ((o) = (unsigned)1 << (n))
-#define INC(o) ((o) <<= 1)
-#define ISSTATEIN(v, o) ((v) & (o))
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) << (n))
-#define BACK(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) >> (n))
-#define ISSETBACK(v, n) ((v) & ((unsigned)here >> (n)))
-/* function names */
-#define SNAMES /* engine.c looks after details */
-
-#include "engine.c"
-
-/* now undo things */
-#undef states
-#undef CLEAR
-#undef SET0
-#undef SET1
-#undef ISSET
-#undef ASSIGN
-#undef EQ
-#undef STATEVARS
-#undef STATESETUP
-#undef STATETEARDOWN
-#undef SETUP
-#undef onestate
-#undef INIT
-#undef INC
-#undef ISSTATEIN
-#undef FWD
-#undef BACK
-#undef ISSETBACK
-#undef SNAMES
-
-/* macros for manipulating states, large version */
-#define states char *
-#define CLEAR(v) memset(v, 0, m->g->nstates)
-#define SET0(v, n) ((v)[n] = 0)
-#define SET1(v, n) ((v)[n] = 1)
-#define ISSET(v, n) ((v)[n])
-#define ASSIGN(d, s) memcpy(d, s, m->g->nstates)
-#define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0)
-#define STATEVARS int vn; char *space
-#define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \
- if ((m)->space == NULL) return(REG_ESPACE); \
- (m)->vn = 0; }
-#define STATETEARDOWN(m) { free((m)->space); }
-#define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates])
-#define onestate int
-#define INIT(o, n) ((o) = (n))
-#define INC(o) ((o)++)
-#define ISSTATEIN(v, o) ((v)[o])
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here])
-#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here])
-#define ISSETBACK(v, n) ((v)[here - (n)])
-/* function names */
-#define LNAMES /* flag */
-
-#include "engine.c"
-
-/*
- - regexec - interface for matching
- = API_EXPORT(int) regexec(const regex_t *, const char *, size_t, \
- = regmatch_t [], int);
- = #define REG_NOTBOL 00001
- = #define REG_NOTEOL 00002
- = #define REG_STARTEND 00004
- = #define REG_TRACE 00400 // tracing of execution
- = #define REG_LARGE 01000 // force large representation
- = #define REG_BACKR 02000 // force use of backref code
- *
- * We put this here so we can exploit knowledge of the state representation
- * when choosing which matcher to call. Also, by this point the matchers
- * have been prototyped.
- */
-API_EXPORT(int) /* 0 success, REG_NOMATCH failure */
-regexec(preg, string, nmatch, pmatch, eflags)
-const regex_t *preg;
-const char *string;
-size_t nmatch;
-regmatch_t pmatch[];
-int eflags;
-{
- register struct re_guts *g = preg->re_g;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND))
-#endif
-
- if (preg->re_magic != MAGIC1 || g->magic != MAGIC2)
- return(REG_BADPAT);
- assert(!(g->iflags&BAD));
- if (g->iflags&BAD) /* backstop for no-debug case */
- return(REG_BADPAT);
- eflags = GOODFLAGS(eflags);
-
- if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags&REG_LARGE))
- return(smatcher(g, (char *)string, nmatch, pmatch, eflags));
- else
- return(lmatcher(g, (char *)string, nmatch, pmatch, eflags));
-}
diff --git a/ext/ereg/regex/regfree.c b/ext/ereg/regex/regfree.c
deleted file mode 100644
index 9fd618a13b..0000000000
--- a/ext/ereg/regex/regfree.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-/*
- - regfree - free everything
- = API_EXPORT(void) regfree(regex_t *);
- */
-API_EXPORT(void)
-regfree(preg)
-regex_t *preg;
-{
- register struct re_guts *g;
-
- if (preg->re_magic != MAGIC1) /* oops */
- return; /* nice to complain, but hard */
-
- g = preg->re_g;
- if (g == NULL || g->magic != MAGIC2) /* oops again */
- return;
- preg->re_magic = 0; /* mark it invalid */
- g->magic = 0; /* mark it invalid */
-
- if (g->strip != NULL)
- free((char *)g->strip);
- if (g->sets != NULL)
- free((char *)g->sets);
- if (g->setbits != NULL)
- free((char *)g->setbits);
- if (g->must != NULL)
- free(g->must);
- free((char *)g);
-}
diff --git a/ext/ereg/regex/split.c b/ext/ereg/regex/split.c
deleted file mode 100644
index 188bdb775b..0000000000
--- a/ext/ereg/regex/split.c
+++ /dev/null
@@ -1,316 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-/*
- - split - divide a string into fields, like awk split()
- = int split(char *string, char *fields[], int nfields, char *sep);
- */
-int /* number of fields, including overflow */
-split(string, fields, nfields, sep)
-char *string;
-char *fields[]; /* list is not NULL-terminated */
-int nfields; /* number of entries available in fields[] */
-char *sep; /* "" white, "c" single char, "ab" [ab]+ */
-{
- register char *p = string;
- register char c; /* latest character */
- register char sepc = sep[0];
- register char sepc2;
- register int fn;
- register char **fp = fields;
- register char *sepp;
- register int trimtrail;
-
- /* white space */
- if (sepc == '\0') {
- while ((c = *p++) == ' ' || c == '\t')
- continue;
- p--;
- trimtrail = 1;
- sep = " \t"; /* note, code below knows this is 2 long */
- sepc = ' ';
- } else
- trimtrail = 0;
- sepc2 = sep[1]; /* now we can safely pick this up */
-
- /* catch empties */
- if (*p == '\0')
- return(0);
-
- /* single separator */
- if (sepc2 == '\0') {
- fn = nfields;
- for (;;) {
- *fp++ = p;
- fn--;
- if (fn == 0)
- break;
- while ((c = *p++) != sepc)
- if (c == '\0')
- return(nfields - fn);
- *(p-1) = '\0';
- }
- /* we have overflowed the fields vector -- just count them */
- fn = nfields;
- for (;;) {
- while ((c = *p++) != sepc)
- if (c == '\0')
- return(fn);
- fn++;
- }
- /* not reached */
- }
-
- /* two separators */
- if (sep[2] == '\0') {
- fn = nfields;
- for (;;) {
- *fp++ = p;
- fn--;
- while ((c = *p++) != sepc && c != sepc2)
- if (c == '\0') {
- if (trimtrail && **(fp-1) == '\0')
- fn++;
- return(nfields - fn);
- }
- if (fn == 0)
- break;
- *(p-1) = '\0';
- while ((c = *p++) == sepc || c == sepc2)
- continue;
- p--;
- }
- /* we have overflowed the fields vector -- just count them */
- fn = nfields;
- while (c != '\0') {
- while ((c = *p++) == sepc || c == sepc2)
- continue;
- p--;
- fn++;
- while ((c = *p++) != '\0' && c != sepc && c != sepc2)
- continue;
- }
- /* might have to trim trailing white space */
- if (trimtrail) {
- p--;
- while ((c = *--p) == sepc || c == sepc2)
- continue;
- p++;
- if (*p != '\0') {
- if (fn == nfields+1)
- *p = '\0';
- fn--;
- }
- }
- return(fn);
- }
-
- /* n separators */
- fn = 0;
- for (;;) {
- if (fn < nfields)
- *fp++ = p;
- fn++;
- for (;;) {
- c = *p++;
- if (c == '\0')
- return(fn);
- sepp = sep;
- while ((sepc = *sepp++) != '\0' && sepc != c)
- continue;
- if (sepc != '\0') /* it was a separator */
- break;
- }
- if (fn < nfields)
- *(p-1) = '\0';
- for (;;) {
- c = *p++;
- sepp = sep;
- while ((sepc = *sepp++) != '\0' && sepc != c)
- continue;
- if (sepc == '\0') /* it wasn't a separator */
- break;
- }
- p--;
- }
-
- /* not reached */
-}
-
-#ifdef TEST_SPLIT
-
-
-/*
- * test program
- * pgm runs regression
- * pgm sep splits stdin lines by sep
- * pgm str sep splits str by sep
- * pgm str sep n splits str by sep n times
- */
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- char buf[512];
- register int n;
-# define MNF 10
- char *fields[MNF];
-
- if (argc > 4)
- for (n = atoi(argv[3]); n > 0; n--) {
- (void) strcpy(buf, argv[1]);
- }
- else if (argc > 3)
- for (n = atoi(argv[3]); n > 0; n--) {
- (void) strcpy(buf, argv[1]);
- (void) split(buf, fields, MNF, argv[2]);
- }
- else if (argc > 2)
- dosplit(argv[1], argv[2]);
- else if (argc > 1)
- while (fgets(buf, sizeof(buf), stdin) != NULL) {
- buf[strlen(buf)-1] = '\0'; /* stomp newline */
- dosplit(buf, argv[1]);
- }
- else
- regress();
-
- exit(0);
-}
-
-dosplit(string, seps)
-char *string;
-char *seps;
-{
-# define NF 5
- char *fields[NF];
- register int nf;
-
- nf = split(string, fields, NF, seps);
- print(nf, NF, fields);
-}
-
-print(nf, nfp, fields)
-int nf;
-int nfp;
-char *fields[];
-{
- register int fn;
- register int bound;
-
- bound = (nf > nfp) ? nfp : nf;
- printf("%d:\t", nf);
- for (fn = 0; fn < bound; fn++)
- printf("\"%s\"%s", fields[fn], (fn+1 < nf) ? ", " : "\n");
-}
-
-#define RNF 5 /* some table entries know this */
-struct {
- char *str;
- char *seps;
- int nf;
- char *fi[RNF];
-} tests[] = {
- "", " ", 0, { "" },
- " ", " ", 2, { "", "" },
- "x", " ", 1, { "x" },
- "xy", " ", 1, { "xy" },
- "x y", " ", 2, { "x", "y" },
- "abc def g ", " ", 5, { "abc", "def", "", "g", "" },
- " a bcd", " ", 4, { "", "", "a", "bcd" },
- "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " ", 6, { "", "a", "b", "c", "d " },
-
- "", " _", 0, { "" },
- " ", " _", 2, { "", "" },
- "x", " _", 1, { "x" },
- "x y", " _", 2, { "x", "y" },
- "ab _ cd", " _", 2, { "ab", "cd" },
- " a_b c ", " _", 5, { "", "a", "b", "c", "" },
- "a b c_d e f", " _", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " _", 6, { "", "a", "b", "c", "d " },
-
- "", " _~", 0, { "" },
- " ", " _~", 2, { "", "" },
- "x", " _~", 1, { "x" },
- "x y", " _~", 2, { "x", "y" },
- "ab _~ cd", " _~", 2, { "ab", "cd" },
- " a_b c~", " _~", 5, { "", "a", "b", "c", "" },
- "a b_c d~e f", " _~", 6, { "a", "b", "c", "d", "e f" },
- "~a b c d ", " _~", 6, { "", "a", "b", "c", "d " },
-
- "", " _~-", 0, { "" },
- " ", " _~-", 2, { "", "" },
- "x", " _~-", 1, { "x" },
- "x y", " _~-", 2, { "x", "y" },
- "ab _~- cd", " _~-", 2, { "ab", "cd" },
- " a_b c~", " _~-", 5, { "", "a", "b", "c", "" },
- "a b_c-d~e f", " _~-", 6, { "a", "b", "c", "d", "e f" },
- "~a-b c d ", " _~-", 6, { "", "a", "b", "c", "d " },
-
- "", " ", 0, { "" },
- " ", " ", 2, { "", "" },
- "x", " ", 1, { "x" },
- "xy", " ", 1, { "xy" },
- "x y", " ", 2, { "x", "y" },
- "abc def g ", " ", 4, { "abc", "def", "g", "" },
- " a bcd", " ", 3, { "", "a", "bcd" },
- "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " ", 6, { "", "a", "b", "c", "d " },
-
- "", "", 0, { "" },
- " ", "", 0, { "" },
- "x", "", 1, { "x" },
- "xy", "", 1, { "xy" },
- "x y", "", 2, { "x", "y" },
- "abc def g ", "", 3, { "abc", "def", "g" },
- "\t a bcd", "", 2, { "a", "bcd" },
- " a \tb\t c ", "", 3, { "a", "b", "c" },
- "a b c d e ", "", 5, { "a", "b", "c", "d", "e" },
- "a b\tc d e f", "", 6, { "a", "b", "c", "d", "e f" },
- " a b c d e f ", "", 6, { "a", "b", "c", "d", "e f " },
-
- NULL, NULL, 0, { NULL },
-};
-
-regress()
-{
- char buf[512];
- register int n;
- char *fields[RNF+1];
- register int nf;
- register int i;
- register int printit;
- register char *f;
-
- for (n = 0; tests[n].str != NULL; n++) {
- (void) strcpy(buf, tests[n].str);
- fields[RNF] = NULL;
- nf = split(buf, fields, RNF, tests[n].seps);
- printit = 0;
- if (nf != tests[n].nf) {
- printf("split `%s' by `%s' gave %d fields, not %d\n",
- tests[n].str, tests[n].seps, nf, tests[n].nf);
- printit = 1;
- } else if (fields[RNF] != NULL) {
- printf("split() went beyond array end\n");
- printit = 1;
- } else {
- for (i = 0; i < nf && i < RNF; i++) {
- f = fields[i];
- if (f == NULL)
- f = "(NULL)";
- if (strcmp(f, tests[n].fi[i]) != 0) {
- printf("split `%s' by `%s', field %d is `%s', not `%s'\n",
- tests[n].str, tests[n].seps,
- i, fields[i], tests[n].fi[i]);
- printit = 1;
- }
- }
- }
- if (printit)
- print(nf, RNF, fields);
- }
-}
-#endif
diff --git a/ext/ereg/regex/tests b/ext/ereg/regex/tests
deleted file mode 100644
index c05846177f..0000000000
--- a/ext/ereg/regex/tests
+++ /dev/null
@@ -1,475 +0,0 @@
-# regular expression test set
-# Lines are at least three fields, separated by one or more tabs. "" stands
-# for an empty field. First field is an RE. Second field is flags. If
-# C flag given, regcomp() is expected to fail, and the third field is the
-# error name (minus the leading REG_).
-#
-# Otherwise it is expected to succeed, and the third field is the string to
-# try matching it against. If there is no fourth field, the match is
-# expected to fail. If there is a fourth field, it is the substring that
-# the RE is expected to match. If there is a fifth field, it is a comma-
-# separated list of what the subexpressions should match, with - indicating
-# no match for that one. In both the fourth and fifth fields, a (sub)field
-# starting with @ indicates that the (sub)expression is expected to match
-# a null string followed by the stuff after the @; this provides a way to
-# test where null strings match. The character `N' in REs and strings
-# is newline, `S' is space, `T' is tab, `Z' is NUL.
-#
-# The full list of flags:
-# - placeholder, does nothing
-# b RE is a BRE, not an ERE
-# & try it as both an ERE and a BRE
-# C regcomp() error expected, third field is error name
-# i REG_ICASE
-# m ("mundane") REG_NOSPEC
-# s REG_NOSUB (not really testable)
-# n REG_NEWLINE
-# ^ REG_NOTBOL
-# $ REG_NOTEOL
-# # REG_STARTEND (see below)
-# p REG_PEND
-#
-# For REG_STARTEND, the start/end offsets are those of the substring
-# enclosed in ().
-
-# basics
-a & a a
-abc & abc abc
-abc|de - abc abc
-a|b|c - abc a
-
-# parentheses and perversions thereof
-a(b)c - abc abc
-a\(b\)c b abc abc
-a( C EPAREN
-a( b a( a(
-a\( - a( a(
-a\( bC EPAREN
-a\(b bC EPAREN
-a(b C EPAREN
-a(b b a(b a(b
-# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly)
-a) - a) a)
-) - ) )
-# end gagging (in a just world, those *should* give EPAREN)
-a) b a) a)
-a\) bC EPAREN
-\) bC EPAREN
-a()b - ab ab
-a\(\)b b ab ab
-
-# anchoring and REG_NEWLINE
-^abc$ & abc abc
-a^b - a^b
-a^b b a^b a^b
-a$b - a$b
-a$b b a$b a$b
-^ & abc @abc
-$ & abc @
-^$ & "" @
-$^ - "" @
-\($\)\(^\) b "" @
-# stop retching, those are legitimate (although disgusting)
-^^ - "" @
-$$ - "" @
-b$ & abNc
-b$ &n abNc b
-^b$ & aNbNc
-^b$ &n aNbNc b
-^$ &n aNNb @Nb
-^$ n abc
-^$ n abcN @
-$^ n aNNb @Nb
-\($\)\(^\) bn aNNb @Nb
-^^ n^ aNNb @Nb
-$$ n aNNb @NN
-^a ^ a
-a$ $ a
-^a ^n aNb
-^b ^n aNb b
-a$ $n bNa
-b$ $n bNa b
-a*(^b$)c* - b b
-a*\(^b$\)c* b b b
-
-# certain syntax errors and non-errors
-| C EMPTY
-| b | |
-* C BADRPT
-* b * *
-+ C BADRPT
-? C BADRPT
-"" &C EMPTY
-() - abc @abc
-\(\) b abc @abc
-a||b C EMPTY
-|ab C EMPTY
-ab| C EMPTY
-(|a)b C EMPTY
-(a|)b C EMPTY
-(*a) C BADRPT
-(+a) C BADRPT
-(?a) C BADRPT
-({1}a) C BADRPT
-\(\{1\}a\) bC BADRPT
-(a|*b) C BADRPT
-(a|+b) C BADRPT
-(a|?b) C BADRPT
-(a|{1}b) C BADRPT
-^* C BADRPT
-^* b * *
-^+ C BADRPT
-^? C BADRPT
-^{1} C BADRPT
-^\{1\} bC BADRPT
-
-# metacharacters, backslashes
-a.c & abc abc
-a[bc]d & abd abd
-a\*c & a*c a*c
-a\\b & a\b a\b
-a\\\*b & a\*b a\*b
-a\bc & abc abc
-a\ &C EESCAPE
-a\\bc & a\bc a\bc
-\{ bC BADRPT
-a\[b & a[b a[b
-a[b &C EBRACK
-# trailing $ is a peculiar special case for the BRE code
-a$ & a a
-a$ & a$
-a\$ & a
-a\$ & a$ a$
-a\\$ & a
-a\\$ & a$
-a\\$ & a\$
-a\\$ & a\ a\
-
-# back references, ugh
-a\(b\)\2c bC ESUBREG
-a\(b\1\)c bC ESUBREG
-a\(b*\)c\1d b abbcbbd abbcbbd bb
-a\(b*\)c\1d b abbcbd
-a\(b*\)c\1d b abbcbbbd
-^\(.\)\1 b abc
-a\([bc]\)\1d b abcdabbd abbd b
-a\(\([bc]\)\2\)*d b abbccd abbccd
-a\(\([bc]\)\2\)*d b abbcbd
-# actually, this next one probably ought to fail, but the spec is unclear
-a\(\(b\)*\2\)*d b abbbd abbbd
-# here is a case that no NFA implementation does right
-\(ab*\)[ab]*\1 b ababaaa ababaaa a
-# check out normal matching in the presence of back refs
-\(a\)\1bcd b aabcd aabcd
-\(a\)\1bc*d b aabcd aabcd
-\(a\)\1bc*d b aabd aabd
-\(a\)\1bc*d b aabcccd aabcccd
-\(a\)\1bc*[ce]d b aabcccd aabcccd
-^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd
-
-# ordinary repetitions
-ab*c & abc abc
-ab+c - abc abc
-ab?c - abc abc
-a\(*\)b b a*b a*b
-a\(**\)b b ab ab
-a\(***\)b bC BADRPT
-*a b *a *a
-**a b a a
-***a bC BADRPT
-
-# the dreaded bounded repetitions
-{ & { {
-{abc & {abc {abc
-{1 C BADRPT
-{1} C BADRPT
-a{b & a{b a{b
-a{1}b - ab ab
-a\{1\}b b ab ab
-a{1,}b - ab ab
-a\{1,\}b b ab ab
-a{1,2}b - aab aab
-a\{1,2\}b b aab aab
-a{1 C EBRACE
-a\{1 bC EBRACE
-a{1a C EBRACE
-a\{1a bC EBRACE
-a{1a} C BADBR
-a\{1a\} bC BADBR
-a{,2} - a{,2} a{,2}
-a\{,2\} bC BADBR
-a{,} - a{,} a{,}
-a\{,\} bC BADBR
-a{1,x} C BADBR
-a\{1,x\} bC BADBR
-a{1,x C EBRACE
-a\{1,x bC EBRACE
-a{300} C BADBR
-a\{300\} bC BADBR
-a{1,0} C BADBR
-a\{1,0\} bC BADBR
-ab{0,0}c - abcac ac
-ab\{0,0\}c b abcac ac
-ab{0,1}c - abcac abc
-ab\{0,1\}c b abcac abc
-ab{0,3}c - abbcac abbc
-ab\{0,3\}c b abbcac abbc
-ab{1,1}c - acabc abc
-ab\{1,1\}c b acabc abc
-ab{1,3}c - acabc abc
-ab\{1,3\}c b acabc abc
-ab{2,2}c - abcabbc abbc
-ab\{2,2\}c b abcabbc abbc
-ab{2,4}c - abcabbc abbc
-ab\{2,4\}c b abcabbc abbc
-((a{1,10}){1,10}){1,10} - a a a,a
-
-# multiple repetitions
-a** &C BADRPT
-a++ C BADRPT
-a?? C BADRPT
-a*+ C BADRPT
-a*? C BADRPT
-a+* C BADRPT
-a+? C BADRPT
-a?* C BADRPT
-a?+ C BADRPT
-a{1}{1} C BADRPT
-a*{1} C BADRPT
-a+{1} C BADRPT
-a?{1} C BADRPT
-a{1}* C BADRPT
-a{1}+ C BADRPT
-a{1}? C BADRPT
-a*{b} - a{b} a{b}
-a\{1\}\{1\} bC BADRPT
-a*\{1\} bC BADRPT
-a\{1\}* bC BADRPT
-
-# brackets, and numerous perversions thereof
-a[b]c & abc abc
-a[ab]c & abc abc
-a[^ab]c & adc adc
-a[]b]c & a]c a]c
-a[[b]c & a[c a[c
-a[-b]c & a-c a-c
-a[^]b]c & adc adc
-a[^-b]c & adc adc
-a[b-]c & a-c a-c
-a[b &C EBRACK
-a[] &C EBRACK
-a[1-3]c & a2c a2c
-a[3-1]c &C ERANGE
-a[1-3-5]c &C ERANGE
-a[[.-.]--]c & a-c a-c
-a[1- &C ERANGE
-a[[. &C EBRACK
-a[[.x &C EBRACK
-a[[.x. &C EBRACK
-a[[.x.] &C EBRACK
-a[[.x.]] & ax ax
-a[[.x,.]] &C ECOLLATE
-a[[.one.]]b & a1b a1b
-a[[.notdef.]]b &C ECOLLATE
-a[[.].]]b & a]b a]b
-a[[:alpha:]]c & abc abc
-a[[:notdef:]]c &C ECTYPE
-a[[: &C EBRACK
-a[[:alpha &C EBRACK
-a[[:alpha:] &C EBRACK
-a[[:alpha,:] &C ECTYPE
-a[[:]:]]b &C ECTYPE
-a[[:-:]]b &C ECTYPE
-a[[:alph:]] &C ECTYPE
-a[[:alphabet:]] &C ECTYPE
-[[:alnum:]]+ - -%@a0X- a0X
-[[:alpha:]]+ - -%@aX0- aX
-[[:blank:]]+ - aSSTb SST
-[[:cntrl:]]+ - aNTb NT
-[[:digit:]]+ - a019b 019
-[[:graph:]]+ - Sa%bS a%b
-[[:lower:]]+ - AabC ab
-[[:print:]]+ - NaSbN aSb
-[[:punct:]]+ - S%-&T %-&
-[[:space:]]+ - aSNTb SNT
-[[:upper:]]+ - aBCd BC
-[[:xdigit:]]+ - p0f3Cq 0f3C
-a[[=b=]]c & abc abc
-a[[= &C EBRACK
-a[[=b &C EBRACK
-a[[=b= &C EBRACK
-a[[=b=] &C EBRACK
-a[[=b,=]] &C ECOLLATE
-a[[=one=]]b & a1b a1b
-
-# complexities
-a(((b)))c - abc abc
-a(b|(c))d - abd abd
-a(b*|c)d - abbd abbd
-# just gotta have one DFA-buster, of course
-a[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab
-# and an inline expansion in case somebody gets tricky
-a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab
-# and in case somebody just slips in an NFA...
-a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights
-# fish for anomalies as the number of states passes 32
-12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789
-123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890
-1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901
-12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012
-123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123
-# and one really big one, beyond any plausible word width
-1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890
-# fish for problems as brackets go past 8
-[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm
-[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo
-[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq
-[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq
-
-# subtleties of matching
-abc & xabcy abc
-a\(b\)?c\1d b acd
-aBc i Abc Abc
-a[Bc]*d i abBCcd abBCcd
-0[[:upper:]]1 &i 0a1 0a1
-0[[:lower:]]1 &i 0A1 0A1
-a[^b]c &i abc
-a[^b]c &i aBc
-a[^b]c &i adc adc
-[a]b[c] - abc abc
-[a]b[a] - aba aba
-[abc]b[abc] - abc abc
-[abc]b[abd] - abd abd
-a(b?c)+d - accd accd
-(wee|week)(knights|night) - weeknights weeknights
-(we|wee|week|frob)(knights|night|day) - weeknights weeknights
-a[bc]d - xyzaaabcaababdacd abd
-a[ab]c - aaabc abc
-abc s abc abc
-a* & b @b
-
-# Let's have some fun -- try to match a C comment.
-# first the obvious, which looks okay at first glance...
-/\*.*\*/ - /*x*/ /*x*/
-# but...
-/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/
-# okay, we must not match */ inside; try to do that...
-/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/
-/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/
-# but...
-/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/
-# and a still fancier version, which does it right (I think)...
-/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/
-/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/
-/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/
-
-# subexpressions
-a(b)(c)d - abcd abcd b,c
-a(((b)))c - abc abc b,b,b
-a(b|(c))d - abd abd b,-
-a(b*|c|e)d - abbd abbd bb
-a(b*|c|e)d - acd acd c
-a(b*|c|e)d - ad ad @d
-a(b?)c - abc abc b
-a(b?)c - ac ac @c
-a(b+)c - abc abc b
-a(b+)c - abbbc abbbc bbb
-a(b*)c - ac ac @c
-(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de
-# the regression tester only asks for 9 subexpressions
-a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j
-a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k
-a([bc]?)c - abc abc b
-a([bc]?)c - ac ac @c
-a([bc]+)c - abc abc b
-a([bc]+)c - abcc abcc bc
-a([bc]+)bc - abcbc abcbc bc
-a(bb+|b)b - abb abb b
-a(bbb+|bb+|b)b - abb abb b
-a(bbb+|bb+|b)b - abbb abbb bb
-a(bbb+|bb+|b)bb - abbb abbb b
-(.*).* - abcdef abcdef abcdef
-(a*)* - bc @b @b
-
-# do we get the right subexpression when it is used more than once?
-a(b|c)*d - ad ad -
-a(b|c)*d - abcd abcd c
-a(b|c)+d - abd abd b
-a(b|c)+d - abcd abcd c
-a(b|c?)+d - ad ad @d
-a(b|c?)+d - abcd abcd @d
-a(b|c){0,0}d - ad ad -
-a(b|c){0,1}d - ad ad -
-a(b|c){0,1}d - abd abd b
-a(b|c){0,2}d - ad ad -
-a(b|c){0,2}d - abcd abcd c
-a(b|c){0,}d - ad ad -
-a(b|c){0,}d - abcd abcd c
-a(b|c){1,1}d - abd abd b
-a(b|c){1,1}d - acd acd c
-a(b|c){1,2}d - abd abd b
-a(b|c){1,2}d - abcd abcd c
-a(b|c){1,}d - abd abd b
-a(b|c){1,}d - abcd abcd c
-a(b|c){2,2}d - acbd acbd b
-a(b|c){2,2}d - abcd abcd c
-a(b|c){2,4}d - abcd abcd c
-a(b|c){2,4}d - abcbd abcbd b
-a(b|c){2,4}d - abcbcd abcbcd c
-a(b|c){2,}d - abcd abcd c
-a(b|c){2,}d - abcbd abcbd b
-a(b+|((c)*))+d - abd abd @d,@d,-
-a(b+|((c)*))+d - abcd abcd @d,@d,-
-
-# check out the STARTEND option
-[abc] &# a(b)c b
-[abc] &# a(d)c
-[abc] &# a(bc)d b
-[abc] &# a(dc)d c
-. &# a()c
-b.*c &# b(bc)c bc
-b.* &# b(bc)c bc
-.*c &# b(bc)c bc
-
-# plain strings, with the NOSPEC flag
-abc m abc abc
-abc m xabcy abc
-abc m xyz
-a*b m aba*b a*b
-a*b m ab
-"" mC EMPTY
-
-# cases involving NULs
-aZb & a a
-aZb &p a
-aZb &p# (aZb) aZb
-aZ*b &p# (ab) ab
-a.b &# (aZb) aZb
-a.* &# (aZb)c aZb
-
-# word boundaries (ick)
-[[:<:]]a & a a
-[[:<:]]a & ba
-[[:<:]]a & -a a
-a[[:>:]] & a a
-a[[:>:]] & ab
-a[[:>:]] & a- a
-[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc
-[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc
-[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc
-[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc
-[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_
-[[:<:]]a_b[[:>:]] & x_a_b
-
-# past problems, and suspected problems
-(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1
-abcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop
-abcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv
-(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11
-CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11
-Char \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz
-a?b - ab ab
--\{0,1\}[0-9]*$ b -5 -5
diff --git a/ext/ereg/regex/utils.h b/ext/ereg/regex/utils.h
deleted file mode 100644
index cd4a96025f..0000000000
--- a/ext/ereg/regex/utils.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* utility definitions */
-
-#include "regex_extra.h"
-
-#ifdef _POSIX2_RE_DUP_MAX
-#define DUPMAX _POSIX2_RE_DUP_MAX
-#else
-#define DUPMAX 255
-#endif
-#define INFINITY (DUPMAX + 1)
-#define NC (CHAR_MAX - CHAR_MIN + 1)
-typedef unsigned char uch;
-
-/* switch off assertions (if not already off) if no REDEBUG */
-#ifndef REDEBUG
-#ifndef NDEBUG
-#define NDEBUG /* no assertions please */
-#endif
-#endif
-#include <assert.h>
-
-/* for old systems with bcopy() but no memmove() */
-#ifdef USEBCOPY
-#define memmove(d, s, c) bcopy(s, d, c)
-#endif
diff --git a/ext/ereg/tests/001.phpt b/ext/ereg/tests/001.phpt
deleted file mode 100644
index f63c252518..0000000000
--- a/ext/ereg/tests/001.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-RegReplace test 1
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def",$a)?>
---EXPECT--
-abcdef
diff --git a/ext/ereg/tests/002.phpt b/ext/ereg/tests/002.phpt
deleted file mode 100644
index a9b7aaa00a..0000000000
--- a/ext/ereg/tests/002.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-RegReplace test 2
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","",$a)?>
---EXPECT--
-abc
diff --git a/ext/ereg/tests/003.phpt b/ext/ereg/tests/003.phpt
deleted file mode 100644
index edd9c05969..0000000000
--- a/ext/ereg/tests/003.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-ereg_replace single-quote test
---POST--
---GET--
---FILE--
-<?php $a="\\'test";
- echo ereg_replace("\\\\'","'",$a)
-?>
---EXPECT--
-'test
diff --git a/ext/ereg/tests/004.phpt b/ext/ereg/tests/004.phpt
deleted file mode 100644
index 1f60ff4900..0000000000
--- a/ext/ereg/tests/004.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-simple ereg test
---POST--
---GET--
---FILE--
-<?php $a="This is a nice and simple string";
- if (ereg(".*nice and simple.*",$a)) {
- echo "ok\n";
- }
- if (!ereg(".*doesn't exist.*",$a)) {
- echo "ok\n";
- }
-?>
---EXPECT--
-ok
-ok
diff --git a/ext/ereg/tests/005.phpt b/ext/ereg/tests/005.phpt
deleted file mode 100644
index 78c0a0912a..0000000000
--- a/ext/ereg/tests/005.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Test Regular expression register support in ereg
---POST--
---GET--
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg(".*(is).*(is).*",$a,$registers);
- echo "\n";
- echo $registers[0];
- echo "\n";
- echo $registers[1];
- echo "\n";
- echo $registers[2];
- echo "\n";
-?>
---EXPECT--
-32
-This is a nice and simple string
-is
-is
diff --git a/ext/ereg/tests/006.phpt b/ext/ereg/tests/006.phpt
deleted file mode 100644
index 50b6dbfd3a..0000000000
--- a/ext/ereg/tests/006.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Test ereg_replace of start-of-line
---POST--
---GET--
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg_replace("^This","That",$a);
-?>
---EXPECT--
-That is a nice and simple string
diff --git a/ext/ereg/tests/007.phpt b/ext/ereg/tests/007.phpt
deleted file mode 100644
index b2646f842f..0000000000
--- a/ext/ereg/tests/007.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Test empty result buffer in reg_replace
---POST--
---GET--
---FILE--
-<?php
- $a="abcd";
- $b=ereg_replace("abcd","",$a);
- echo "strlen(\$b)=".strlen($b);
-?>
---EXPECT--
-strlen($b)=0
diff --git a/ext/ereg/tests/008.phpt b/ext/ereg/tests/008.phpt
deleted file mode 100644
index db61d1ca07..0000000000
--- a/ext/ereg/tests/008.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Test back-references in regular expressions
---POST--
---GET--
---FILE--
-<?php
- echo ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123");
-?>
---EXPECT--
-123 abc +-|=
diff --git a/ext/ereg/tests/009.phpt b/ext/ereg/tests/009.phpt
deleted file mode 100644
index 4996ef4c97..0000000000
--- a/ext/ereg/tests/009.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Test split()
---POST--
---GET--
---FILE--
-<?php
- $a=split("[[:space:]]","this is a
-test");
- echo count($a) . "\n";
- for ($i = 0; $i < count($a); $i++) {
- echo $a[$i] . "\n";
- }
-?>
---EXPECT--
-4
-this
-is
-a
-test
diff --git a/ext/ereg/tests/010.phpt b/ext/ereg/tests/010.phpt
deleted file mode 100644
index 30d28fd02f..0000000000
--- a/ext/ereg/tests/010.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Long back references
---POST--
---GET--
---FILE--
-<?php $a="abc122222222223";
- echo ereg_replace("1(2*)3","\\1def\\1",$a)?>
---EXPECT--
-abc2222222222def2222222222
diff --git a/ext/ereg/tests/011.phpt b/ext/ereg/tests/011.phpt
deleted file mode 100644
index 4eda774f58..0000000000
--- a/ext/ereg/tests/011.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-\0 back reference
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\0ghi",$a)?>
---EXPECT--
-abcdef123ghi
diff --git a/ext/ereg/tests/012.phpt b/ext/ereg/tests/012.phpt
deleted file mode 100644
index d5342c7436..0000000000
--- a/ext/ereg/tests/012.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-nonexisting back reference
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123",'def\1ghi',$a)?>
---EXPECT--
-abcdef\1ghi
diff --git a/ext/ereg/tests/013.phpt b/ext/ereg/tests/013.phpt
deleted file mode 100644
index ec3329fa7c..0000000000
--- a/ext/ereg/tests/013.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-escapes in replace string
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\g\\\\hi\\",$a)?>
---EXPECT--
-abcdef\g\\hi\
diff --git a/ext/ereg/tests/014.phpt b/ext/ereg/tests/014.phpt
deleted file mode 100644
index ec4d19ed0e..0000000000
--- a/ext/ereg/tests/014.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-backreferences not replaced recursively
---POST--
---GET--
---FILE--
-<?php $a="a\\2bxc";
- echo ereg_replace("a(.*)b(.*)c","\\1",$a)?>
---EXPECT--
-\2
diff --git a/ext/ereg/tests/015.phpt b/ext/ereg/tests/015.phpt
deleted file mode 100644
index 961a60fa76..0000000000
--- a/ext/ereg/tests/015.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-replace empty matches
---POST--
---GET--
---FILE--
-<?php echo ereg_replace("^","z","abc123")?>
---EXPECT--
-zabc123
diff --git a/ext/ereg/tests/016.phpt b/ext/ereg/tests/016.phpt
deleted file mode 100644
index a24816f182..0000000000
--- a/ext/ereg/tests/016.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-test backslash handling in regular expressions
---POST--
---GET--
---FILE--
-<?php echo ereg_replace('\?',"abc","?123?")?>
---EXPECT--
-abc123abc
diff --git a/ext/exif/CREDITS b/ext/exif/CREDITS
deleted file mode 100644
index 94de97e5b0..0000000000
--- a/ext/exif/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-EXIF
-Rasmus Lerdorf, Marcus Boerger
diff --git a/ext/exif/config.m4 b/ext/exif/config.m4
deleted file mode 100644
index f1fcced897..0000000000
--- a/ext/exif/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(exif, whether to enable EXIF support,
-[ --enable-exif Enable EXIF support])
-
-if test "$PHP_EXIF" != "no"; then
- AC_DEFINE(HAVE_EXIF, 1, [Whether you want exif support])
- PHP_NEW_EXTENSION(exif, exif.c, $ext_shared)
-fi
diff --git a/ext/exif/example.php b/ext/exif/example.php
deleted file mode 100644
index e34dc05f6d..0000000000
--- a/ext/exif/example.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-// (c) M.Boerger
-//
-// $Id$
-//
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
-<html>
-<head>
-<title>exif_read_data example</title>
-</head>
-<body>
-<?php
-$exif = exif_read_data ('tests/test1.jpg','IFD0');
-echo $exif===false ? "No header data found.<br>\n" : "Image contains headers<br>";
-$exif = exif_read_data ('tests/test2.jpg',0,true);
-foreach($exif as $key=>$section) {
- foreach($section as $name=>$val) {
- echo "$key.$name: $val<br>\n";
- }
-}
-?>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
deleted file mode 100644
index a61c6ce727..0000000000
--- a/ext/exif/exif.c
+++ /dev/null
@@ -1,3534 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* ToDos
- *
- * See if example images from http://www.exif.org have illegal
- * thumbnail sizes or if code is corrupt.
- * Create/Update exif headers.
- * Create/Remove/Update image thumbnails.
- */
-
-/* Security
- *
- * At current time i do not see any security problems but a potential
- * attacker could generate an image with recursive ifd pointers...(Marcus)
- */
-
-/* Fragments of the code in this module were borrowed from the public domain
- * jhead.c package with the author's consent.
- *
- * The original header from the jhead.c file was:
- *
- * --------------------------------------------------------------------------
- * Program to pull the information out of various types of EFIF digital
- * camera files and show it in a reasonably consistent way
- *
- * Version 0.9
- *
- * Compiles with MSVC on Windows, or with GCC on Linux
- *
- * Compileing under linux: Must include math library.
- * Use: cc -lm -O3 -o jhead jhead.c
- *
- * Matthias Wandel, Dec 1999 - April 2000
- * --------------------------------------------------------------------------
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/file.h"
-
-#if HAVE_EXIF
-
-/* When EXIF_DEBUG is defined the module generates a lot of debug messages
- * that help understanding what is going on. This can and should be used
- * while extending the module as it shows if you are at the right position.
- * You are always considered to have a copy of TIFF6.0 and EXIF2.10 standard.
- */
-#undef EXIF_DEBUG
-
-#undef EXIF_JPEG2000
-
-#include "php_exif.h"
-#include <math.h>
-#include "php_ini.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_image.h"
-#include "ext/standard/info.h"
-
-#ifdef HAVE_MBSTRING
-#include "ext/mbstring/mbstring.h"
-#endif
-
-typedef unsigned char uchar;
-
-#ifndef TRUE
-# define TRUE 1
-# define FALSE 0
-#endif
-
-#ifndef max
-# define max(a,b) ((a)>(b) ? (a) : (b))
-#endif
-
-#define EFREE_IF(ptr) if (ptr) efree(ptr)
-
-/* {{{ exif_functions[]
- */
-function_entry exif_functions[] = {
- PHP_FE(exif_read_data, NULL)
- PHP_FALIAS(read_exif_data, exif_read_data, NULL)
- PHP_FE(exif_tagname, NULL)
- PHP_FE(exif_thumbnail, NULL)
- PHP_FE(exif_imagetype, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-#define EXIF_VERSION "1.3 $Id$"
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(exif)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "EXIF Support", "enabled");
- php_info_print_table_row(2, "EXIF Version", EXIF_VERSION);
- php_info_print_table_row(2, "Supported EXIF Version", "02100");
- php_info_print_table_row(2, "Supported filetypes", "JPEG,TIFF");
- php_info_print_table_end();
-}
-/* }}} */
-
-ZEND_BEGIN_MODULE_GLOBALS(exif)
- char * encode_unicode;
- char * decode_unicode_be;
- char * decode_unicode_le;
- char * encode_jis;
- char * decode_jis_be;
- char * decode_jis_le;
-ZEND_END_MODULE_GLOBALS(exif)
-
-ZEND_DECLARE_MODULE_GLOBALS(exif)
-
-#ifdef ZTS
-#define EXIF_G(v) TSRMG(exif_globals_id, zend_exif_globals *, v)
-#else
-#define EXIF_G(v) (exif_globals.v)
-#endif
-
-/* {{{ PHP_INI
- */
-
-ZEND_API ZEND_INI_MH(OnUpdateEncode)
-{
-#ifdef HAVE_MBSTRING
- if (new_value && strlen(new_value) && !php_mb_check_encoding_list(new_value TSRMLS_CC)) {
- php_error(E_WARNING,"Illegal encoding ignored: '%s'", new_value);
- return FAILURE;
- }
-#endif
- return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-}
-
-ZEND_API ZEND_INI_MH(OnUpdateDecode)
-{
-#ifdef HAVE_MBSTRING
- if (!php_mb_check_encoding_list(new_value TSRMLS_CC)) {
- php_error(E_WARNING,"Illegal encoding ignored: '%s'", new_value);
- return FAILURE;
- }
-#endif
- return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("exif.encode_unicode", "ISO-8859-15", PHP_INI_ALL, OnUpdateEncode, encode_unicode, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_unicode_motorola", "UCS-2BE", PHP_INI_ALL, OnUpdateDecode, decode_unicode_be, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_unicode_intel", "UCS-2LE", PHP_INI_ALL, OnUpdateDecode, decode_unicode_le, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.encode_jis", "", PHP_INI_ALL, OnUpdateEncode, encode_jis, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_jis_motorola", "JIS", PHP_INI_ALL, OnUpdateDecode, decode_jis_be, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_jis_intel", "JIS", PHP_INI_ALL, OnUpdateDecode, decode_jis_le, zend_exif_globals, exif_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_extname_init_globals
- */
-static void php_exif_init_globals(zend_exif_globals *exif_globals)
-{
- exif_globals->encode_unicode = NULL;
- exif_globals->decode_unicode_be = NULL;
- exif_globals->decode_unicode_le = NULL;
- exif_globals->encode_jis = NULL;
- exif_globals->decode_jis_be = NULL;
- exif_globals->decode_jis_le = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(exif)
- Get the size of an image as 4-element array */
-PHP_MINIT_FUNCTION(exif)
-{
- ZEND_INIT_MODULE_GLOBALS(exif, php_exif_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- REGISTER_LONG_CONSTANT("IMAGETYPE_GIF", IMAGE_FILETYPE_GIF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG", IMAGE_FILETYPE_JPEG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_PNG", IMAGE_FILETYPE_PNG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_SWF", IMAGE_FILETYPE_SWF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_PSD", IMAGE_FILETYPE_PSD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_BMP", IMAGE_FILETYPE_BMP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_II", IMAGE_FILETYPE_TIFF_II, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_MM", IMAGE_FILETYPE_TIFF_MM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPC", IMAGE_FILETYPE_JPC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JP2", IMAGE_FILETYPE_JP2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPX", IMAGE_FILETYPE_JPX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JB2", IMAGE_FILETYPE_JB2, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(exif)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ exif_module_entry
- */
-zend_module_entry exif_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "exif",
- exif_functions,
- PHP_MINIT(exif),
- PHP_MSHUTDOWN(exif),
- NULL, NULL,
- PHP_MINFO(exif),
-#if ZEND_MODULE_API_NO >= 20010901
- EXIF_VERSION,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_EXIF
-ZEND_GET_MODULE(exif)
-#endif
-
-/* {{{ php_strnlen
- * get length of string if buffer if less than buffer size or buffer size */
-static size_t php_strnlen(char* str, size_t maxlen) {
- size_t len = 0;
-
- if (str && maxlen && *str) {
- do {
- len++;
- } while (--maxlen && *(++str));
- }
- return len;
-}
-/* }}} */
-
-/* {{{ error messages
-*/
-static const char * EXIF_ERROR_EALLOC = "Cannot allocate memory for all data";
-static const char * EXIF_ERROR_FILEEOF = "Unexpected end of file reached";
-static const char * EXIF_ERROR_CORRUPT = "File structure corrupted";
-static const char * EXIF_ERROR_THUMBEOF = "Thumbnail goes IFD boundary or end of file reached";
-static const char * EXIF_ERROR_FSREALLOC = "Illegal reallocating of undefined file section";
-
-#define EXIF_ERRLOG_EALLOC php_error(E_ERROR, EXIF_ERROR_EALLOC);
-#define EXIF_ERRLOG_FILEEOF php_error(E_WARNING, EXIF_ERROR_FILEEOF);
-#define EXIF_ERRLOG_CORRUPT php_error(E_WARNING, EXIF_ERROR_CORRUPT);
-#define EXIF_ERRLOG_THUMBEOF php_error(E_WARNING, EXIF_ERROR_THUMBEOF);
-#define EXIF_ERRLOG_FSREALLOC php_error(E_WARNING, EXIF_ERROR_FSREALLOC);
-/* }}} */
-
-/* {{{ format description defines
- Describes format descriptor
-*/
-static int php_tiff_bytes_per_format[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8};
-#define NUM_FORMATS 12
-
-#define TAG_FMT_BYTE 1
-#define TAG_FMT_STRING 2
-#define TAG_FMT_USHORT 3
-#define TAG_FMT_ULONG 4
-#define TAG_FMT_URATIONAL 5
-#define TAG_FMT_SBYTE 6
-#define TAG_FMT_UNDEFINED 7
-#define TAG_FMT_SSHORT 8
-#define TAG_FMT_SLONG 9
-#define TAG_FMT_SRATIONAL 10
-#define TAG_FMT_SINGLE 11
-#define TAG_FMT_DOUBLE 12
-
-#ifdef EXIF_DEBUG
-static char *exif_get_tagformat(int format)
-{
- switch(format) {
- case TAG_FMT_BYTE: return "BYTE";
- case TAG_FMT_STRING: return "STRING";
- case TAG_FMT_USHORT: return "USHORT";
- case TAG_FMT_ULONG: return "ULONG";
- case TAG_FMT_URATIONAL: return "URATIONAL";
- case TAG_FMT_SBYTE: return "SBYTE";
- case TAG_FMT_UNDEFINED: return "UNDEFINED";
- case TAG_FMT_SSHORT: return "SSHORT";
- case TAG_FMT_SLONG: return "SLONG";
- case TAG_FMT_SRATIONAL: return "SRATIONAL";
- case TAG_FMT_SINGLE: return "SINGLE";
- case TAG_FMT_DOUBLE: return "DOUBLE";
- }
- return "*Illegal";
-}
-#endif
-
-/* Describes tag values */
-#define TAG_TIFF_COMMENT 0x00FE /* SHOUDLNT HAPPEN */
-#define TAG_NEW_SUBFILE 0x00FE /* New version of subfile tag */
-#define TAG_SUBFILE_TYPE 0x00FF /* Old version of subfile tag */
-#define TAG_IMAGEWIDTH 0x0100
-#define TAG_IMAGEHEIGHT 0x0101
-#define TAG_BITS_PER_SAMPLE 0x0102
-#define TAG_COMPRESSION 0x0103
-#define TAG_PHOTOMETRIC_INTERPRETATION 0x0106
-#define TAG_TRESHHOLDING 0x0107
-#define TAG_CELL_WIDTH 0x0108
-#define TAG_CELL_HEIGHT 0x0109
-#define TAG_STRIP_OFFSETS 0x0111
-#define TAG_FILL_ORDER 0x010A
-#define TAG_DOCUMENT_NAME 0x010D
-#define TAG_IMAGE_DESCRIPTION 0x010E
-#define TAG_MAKE 0x010F
-#define TAG_MODEL 0x0110
-#define TAG_STRIP_OFFSETS 0x0111
-#define TAG_ORIENTATION 0x0112
-#define TAG_SAMPLES_PER_PIXEL 0x0115
-#define TAG_ROWS_PER_STRIP 0x0116
-#define TAG_STRIP_BYTE_COUNTS 0x0117
-#define TAG_MIN_SAMPPLE_VALUE 0x0118
-#define TAG_MAX_SAMPLE_VALUE 0x0119
-#define TAG_X_RESOLUTION 0x011A
-#define TAG_Y_RESOLUTION 0x011B
-#define TAG_PLANAR_CONFIGURATION 0x011C
-#define TAG_PAGE_NAME 0x011D
-#define TAG_X_POSITION 0x011E
-#define TAG_Y_POSITION 0x011F
-#define TAG_FREE_OFFSETS 0x0120
-#define TAG_FREE_BYTE_COUNTS 0x0121
-#define TAG_GRAY_RESPONSE_UNIT 0x0122
-#define TAG_GRAY_RESPONSE_CURVE 0x0123
-#define TAG_RESOLUTION_UNIT 0x0128
-#define TAG_PAGE_NUMBER 0x0129
-#define TAG_TRANSFER_FUNCTION 0x012D
-#define TAG_SOFTWARE 0x0131
-#define TAG_DATETIME 0x0132
-#define TAG_ARTIST 0x013B
-#define TAG_HOST_COMPUTER 0x013C
-#define TAG_PREDICATOR 0x013D
-#define TAG_WHITE_POINT 0x013E
-#define TAG_PRIMARY_CHROMATICITIES 0x013F
-#define TAG_COLOR_MAP 0x0140
-#define TAG_HALFTONE_HINTS 0x0141
-#define TAG_TILE_WIDTH 0x0142
-#define TAG_TILE_LENGTH 0x0143
-#define TAG_TILE_OFFSETS 0x0144
-#define TAG_TILE_BYTE_COUNTS 0x0145
-#define TAG_INK_SETMPUTER 0x014C
-#define TAG_NUMBER_OF_INKS 0x014E
-#define TAG_INK_NAMES 0x014D
-#define TAG_DOT_RANGE 0x0150
-#define TAG_TARGET_PRINTER 0x0151
-#define TAG_EXTRA_SAMPLE 0x0152
-#define TAG_SAMPLE_FORMAT 0x0153
-#define TAG_S_MIN_SAMPLE_VALUE 0x0154
-#define TAG_S_MAX_SAMPLE_VALUE 0x0155
-#define TAG_TRANSFER_RANGE 0x0156
-#define TAG_JPEG_PROC 0x0200
-#define TAG_JPEG_INTERCHANGE_FORMAT 0x0201
-#define TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202
-#define TAG_JPEG_RESTART_INTERVAL 0x0203
-#define TAG_JPEG_LOSSLESS_PREDICTOR 0x0205
-#define TAG_JPEG_POINT_TRANSFORMS 0x0206
-#define TAG_JPEG_Q_TABLES 0x0207
-#define TAG_JPEG_DC_TABLES 0x0208
-#define TAG_JPEG_AC_TABLES 0x0209
-#define TAG_YCC_COEFFICIENTS 0x0211
-#define TAG_YCC_SUB_SAMPLING 0x0212
-#define TAG_YCC_POSITIONING 0x0213
-#define TAG_REFERENCE_BLACK_WHITE 0x0214
-#define TAG_COPYRIGHT 0x8298
-#define TAG_EXPOSURETIME 0x829A
-#define TAG_FNUMBER 0x829D
-#define TAG_EXIF_IFD_POINTER 0x8769
-#define TAG_GPS_IFD_POINTER 0x8825
-#define TAG_ISOSPEED 0x8827
-#define TAG_EXIFVERSION 0x9000
-#define TAG_SHUTTERSPEED 0x9201
-#define TAG_APERTURE 0x9202
-#define TAG_DATETIME_ORIGINAL 0x9003
-#define TAG_MAXAPERTURE 0x9205
-#define TAG_SUBJECT_DISTANCE 0x9206
-#define TAG_LIGHT_SOURCE 0x9208
-#define TAG_FLASH 0x9209
-#define TAG_FOCALLENGTH 0x920A
-#define TAG_MARKER_NOTE 0x927C
-#define TAG_USERCOMMENT 0x9286
-#define TAG_XP_TITLE 0x9c9b
-#define TAG_XP_COMMENTS 0x9c9c
-#define TAG_XP_AUTHOR 0x9c9d
-#define TAG_XP_KEYWORDS 0x9c9e
-#define TAG_XP_SUBJECT 0x9c9f
-#define TAG_FLASH_PIX_VERSION 0xA000
-#define TAG_COLOR_SPACE 0xA001
-#define TAG_COMP_IMAGEWIDTH 0xA002 /* compressed images only */
-#define TAG_COMP_IMAGEHEIGHT 0xA003
-#define TAG_INTEROP_IFD_POINTER 0xA005 /* IFD pointer */
-#define TAG_FOCALPLANEXRES 0xA20E
-#define TAG_FOCALPLANEUNITS 0xA210
-
-/* Olympus specific tags */
-#define TAG_OLYMPUS_SPECIALMODE 0x0200
-#define TAG_OLYMPUS_JPEGQUAL 0x0201
-#define TAG_OLYMPUS_MACRO 0x0202
-#define TAG_OLYMPUS_DIGIZOOM 0x0204
-#define TAG_OLYMPUS_SOFTWARERELEASE 0x0207
-#define TAG_OLYMPUS_PICTINFO 0x0208
-#define TAG_OLYMPUS_CAMERAID 0x0209
-/* end Olympus specific tags */
-
-/* Internal */
-#define TAG_NONE -1 /* note that -1 <> 0xFFFF */
-#define TAG_COMPUTED_VALUE -2
-
-/* Values for TAG_PHOTOMETRIC_INTERPRETATION */
-#define PMI_BLACK_IS_ZERO 0
-#define PMI_WHITE_IS_ZERO 1
-#define PMI_RGB 2
-#define PMI_PALETTE_COLOR 3
-#define PMI_TRANSPARENCY_MASK 4
-#define PMI_SEPARATED 5
-#define PMI_YCBCR 6
-#define PMI_CIELAB 8
-
-/* }}} */
-
-/* {{{ TabTable[]
- */
-
-static const struct {
- unsigned short Tag;
- char *Desc;
-} TagTable[] = {
- { 0x00FE, "NewSubFile"},
- { 0x00FF, "SubFile"},
- { 0x0100, "ImageWidth"},
- { 0x0101, "ImageLength"},
- { 0x0102, "BitsPerSample"},
- { 0x0103, "Compression"},
- { 0x0106, "PhotometricInterpretation"},
- { 0x010A, "FillOrder"},
- { 0x010D, "DocumentName"},
- { 0x010E, "ImageDescription"},
- { 0x010F, "Make"},
- { 0x0110, "Model"},
- { 0x0111, "StripOffsets"},
- { 0x0112, "Orientation"},
- { 0x0115, "SamplesPerPixel"},
- { 0x0116, "RowsPerStrip"},
- { 0x0117, "StripByteCounts"},
- { 0x0118, "MinSampleValue"},
- { 0x0119, "MaxSampleValue"},
- { 0x011A, "XResolution"},
- { 0x011B, "YResolution"},
- { 0x011C, "PlanarConfiguration"},
- { 0x011D, "PageName"},
- { 0x011E, "XPosition"},
- { 0x011F, "YPosition"},
- { 0x0120, "FreeOffsets"},
- { 0x0121, "FreeByteCounts"},
- { 0x0122, "GrayResponseUnit"},
- { 0x0123, "GrayResponseCurve"},
- { 0x0124, "T4Options"},
- { 0x0125, "T6Options"},
- { 0x0128, "ResolutionUnit"},
- { 0x0129, "PageNumber"},
- { 0x012D, "TransferFunction"},
- { 0x0131, "Software"},
- { 0x0132, "DateTime"},
- { 0x013B, "Artist"},
- { 0x013C, "HostComputer"},
- { 0x013D, "Predictor"},
- { 0x013E, "WhitePoint"},
- { 0x013F, "PrimaryChromaticities"},
- { 0x0140, "ColorMap"},
- { 0x0141, "HalfToneHints"},
- { 0x0142, "TileWidth"},
- { 0x0143, "TileLength"},
- { 0x0144, "TileOffsets"},
- { 0x0145, "TileByteCounts"},
- { 0x014C, "InkSet"},
- { 0x014D, "InkNames"},
- { 0x014E, "NumberOfInks"},
- { 0x0150, "DotRange"},
- { 0x0151, "TargetPrinter"},
- { 0x0152, "ExtraSample"},
- { 0x0153, "SampleFormat"},
- { 0x0154, "SMinSampleValue"},
- { 0x0155, "SMaxSampleValue"},
- { 0x0156, "TransferRange"},
- { 0x0200, "JPEGProc"},
- { 0x0201, "JPEGInterchangeFormat"},
- { 0x0202, "JPEGInterchangeFormatLength"},
- { 0x0203, "JPEGRestartInterval"},
- { 0x0205, "JPEGLosslessPredictors"},
- { 0x0206, "JPEGPointTransforms"},
- { 0x0207, "JPEGQTables"},
- { 0x0208, "JPEGDCTables"},
- { 0x0209, "JPEGACTables"},
- { 0x0211, "YCbCrCoefficients"},
- { 0x0212, "YCbCrSubSampling"},
- { 0x0213, "YCbCrPositioning"},
- { 0x0214, "ReferenceBlackWhite"},
- { 0x1000, "RelatedImageFileFormat"},
- { 0x828D, "CFARepeatPatternDim"},
- { 0x828E, "CFAPattern"},
- { 0x828F, "BatteryLevel"},
- { 0x8298, "Copyright"},
- { 0x829A, "ExposureTime"},
- { 0x829D, "FNumber"},
- { 0x83BB, "IPTC/NAA"},
- { 0x8769, "Exif_IFD_Pointer"},
- { 0x8773, "InterColorProfile"},
- { 0x8822, "ExposureProgram"},
- { 0x8824, "SpectralSensitivity"},
- { 0x8825, "GPS_IFD_Pointer"},
- { 0x8827, "ISOSpeedRatings"},
- { 0x8828, "OECF"},
- { 0x9000, "ExifVersion"},
- { 0x9003, "DateTimeOriginal"},
- { 0x9004, "DateTimeDigitized"},
- { 0x9101, "ComponentsConfiguration"},
- { 0x9102, "CompressedBitsPerPixel"},
- { 0x9201, "ShutterSpeedValue"},
- { 0x9202, "ApertureValue"},
- { 0x9203, "BrightnessValue"},
- { 0x9204, "ExposureBiasValue"},
- { 0x9205, "MaxApertureValue"},
- { 0x9206, "SubjectDistance"},
- { 0x9207, "MeteringMode"},
- { 0x9208, "LightSource"},
- { 0x9209, "Flash"},
- { 0x920A, "FocalLength"},
- { 0x920B, "FlashEnergy"}, /* 0xA20B in JPEG */
- { 0x920C, "SpatialFrequencyResponse"}, /* 0xA20C - - */
- { 0x920E, "FocalPlaneXResolution"}, /* 0xA20E - - */
- { 0x920F, "FocalPlaneYResolution"}, /* 0xA20F - - */
- { 0x9210, "FocalPlaneResolutionUnit"}, /* 0xA210 - - */
- { 0x9214, "SubjectLocation"}, /* 0xA214 - - */
- { 0x9215, "ExposureIndex"}, /* 0xA215 - - */
- { 0x9217, "SensingMethod"}, /* 0xA217 - - */
- { 0x927C, "MakerNote"},
- { 0x9286, "UserComment"},
- { 0x9290, "SubSecTime"},
- { 0x9291, "SubSecTimeOriginal"},
- { 0x9292, "SubSecTimeDigitized"},
- { 0x9c9b, "Title" }, /* Win XP specific, Unicode */
- { 0x9c9c, "Comments" }, /* Win XP specific, Unicode */
- { 0x9c9d, "Author" }, /* Win XP specific, Unicode */
- { 0x9c9e, "Keywords" }, /* Win XP specific, Unicode */
- { 0x9c9f, "Subject" }, /* Win XP specific, Unicode, not to be confused with SubjectDistance and SubjectLocation */
- { 0xA000, "FlashPixVersion"},
- { 0xA001, "ColorSpace"},
- { 0xA002, "ExifImageWidth"},
- { 0xA003, "ExifImageLength"},
- { 0xA005, "InteroperabilityOffset"},
- { 0xA20B, "FlashEnergy"}, /* 0x920B in TIFF/EP */
- { 0xA20C, "SpatialFrequencyResponse"}, /* 0x920C - - */
- { 0xA20E, "FocalPlaneXResolution"}, /* 0x920E - - */
- { 0xA20F, "FocalPlaneYResolution"}, /* 0x920F - - */
- { 0xA210, "FocalPlaneResolutionUnit"}, /* 0x9210 - - */
- { 0xA214, "SubjectLocation"}, /* 0x9214 - - */
- { 0xA215, "ExposureIndex"}, /* 0x9215 - - */
- { 0xA217, "SensingMethod"}, /* 0x9217 - - */
- { 0xA300, "FileSource"},
- { 0xA301, "SceneType"},
- {TAG_NONE, "no tag value"},
- {TAG_COMPUTED_VALUE, "computed value"},
- { 0, ""} /* Important for exif_get_tagname() IF value != "" functionresult is != false */
-} ;
-
-/* }}} */
-
-/* {{{ exif_get_tagname
- Get headername for tag_num or NULL if not defined */
-static char * exif_get_tagname(int tag_num, char *ret, int len)
-{
- int i, t;
- char tmp[32];
-
- for (i=0;;i++) {
- if ((t=TagTable[i].Tag) == tag_num || !t) {
- if (ret && len) {
- if (!t) {
- break;
- }
- strncpy(ret, TagTable[i].Desc, abs(len));
- if (len<0) {
- len = -len;
- ret[len-1]='\0';
- for(i=strlen(ret);i<len;i++)ret[i]=' ';
- }
- ret[len-1]='\0';
- return ret;
- }
- return TagTable[i].Desc;
- }
- }
- if (ret && len) {
- sprintf(tmp, "UndefinedTag:0x%04X", tag_num);
- strncpy(ret, tmp, abs(len));
- if (len<0) {
- len = -len;
- ret[len-1]='\0';
- for(i=strlen(ret);i<len;i++)ret[i]=' ';
- }
- ret[len-1]='\0';
- return ret;
- }
- return "";
-}
-/* }}} */
-
-/* {{{ exif_char_dump
- * Do not use! This is a debug function... */
-#ifdef EXIF_DEBUG
-static unsigned char* exif_char_dump(unsigned char * addr, int len, int hex)
-{
- static unsigned char buf[1024+1];
- int c, i, p=0, n = hex ? 5 : 3;
-
- for(i=0; i<len && p+n<=sizeof(buf); i++) {
- if (i%64==0)
- buf[p++] = '\n';
- c = *addr++;
- if (hex) {
- sprintf(buf+p, "%02X ", c);
- p += 3;
- } else {
- if (c>=32) {
- buf[p++] = c;
- } else {
- buf[p++] = '?';
- }
- }
- }
- buf[sizeof(buf)-1]=0;
- return buf;
-}
-#endif
-/* }}} */
-
-/* {{{ php_jpg_get16
- Get 16 bits motorola order (always) for jpeg header stuff.
-*/
-static int php_jpg_get16(void *value)
-{
- return (((uchar *)value)[0] << 8) | ((uchar *)value)[1];
-}
-/* }}} */
-
-/* {{{ php_ifd_get16u
- * Convert a 16 bit unsigned value from file's native byte order */
-static int php_ifd_get16u(void *value, int motorola_intel)
-{
- if (motorola_intel) {
- return (((uchar *)value)[0] << 8) | ((uchar *)value)[1];
- } else {
- return (((uchar *)value)[1] << 8) | ((uchar *)value)[0];
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get16s
- * Convert a 16 bit signed value from file's native byte order */
-static signed short php_ifd_get16s(void *value, int motorola_intel)
-{
- return (signed short)php_ifd_get16u(value, motorola_intel);
-}
-/* }}} */
-
-/* {{{ php_ifd_get32s
- * Convert a 32 bit signed value from file's native byte order */
-static int php_ifd_get32s(void *value, int motorola_intel)
-{
- if (motorola_intel) {
- return (((char *)value)[0] << 24)
- | (((uchar *)value)[1] << 16)
- | (((uchar *)value)[2] << 8 )
- | (((uchar *)value)[3] );
- } else {
- return (((char *)value)[3] << 24)
- | (((uchar *)value)[2] << 16)
- | (((uchar *)value)[1] << 8 )
- | (((uchar *)value)[0] );
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get32u
- * Write 32 bit unsigned value to data */
-static unsigned php_ifd_get32u(void *value, int motorola_intel)
-{
- return (unsigned)php_ifd_get32s(value, motorola_intel) & 0xffffffff;
-}
-/* }}} */
-
-/* {{{ php_ifd_set16u
- * Write 16 bit unsigned value to data */
-static void php_ifd_set16u(char *data, unsigned int value, int motorola_intel)
-{
- if (motorola_intel) {
- data[0] = (value & 0xFF00) >> 8;
- data[1] = (value & 0x00FF);
- } else {
- data[1] = (value & 0xFF00) >> 8;
- data[0] = (value & 0x00FF);
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_set32u
- * Convert a 32 bit unsigned value from file's native byte order */
-static void php_ifd_set32u(char *data, size_t value, int motorola_intel)
-{
- if (motorola_intel) {
- data[0] = (value & 0xFF000000) >> 24;
- data[1] = (value & 0x00FF0000) >> 16;
- data[2] = (value & 0x0000FF00) >> 8;
- data[3] = (value & 0x000000FF);
- } else {
- data[3] = (value & 0xFF000000) >> 24;
- data[2] = (value & 0x00FF0000) >> 16;
- data[1] = (value & 0x0000FF00) >> 8;
- data[0] = (value & 0x000000FF);
- }
-}
-/* }}} */
-
-/* {{{ exif_convert_any_format
- * Evaluate number, be it int, rational, or float from directory. */
-static double exif_convert_any_format(void *value, int format, int motorola_intel)
-{
- int s_den;
- unsigned u_den;
-
- switch(format) {
- case TAG_FMT_SBYTE: return *(signed char *)value;
- case TAG_FMT_BYTE: return *(uchar *)value;
-
- case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel);
-
- case TAG_FMT_URATIONAL:
- u_den = php_ifd_get32u(4+(char *)value, motorola_intel);
- if (u_den == 0) {
- return 0;
- } else {
- return (double)php_ifd_get32u(value, motorola_intel) / u_den;
- }
-
- case TAG_FMT_SRATIONAL:
- s_den = php_ifd_get32s(4+(char *)value, motorola_intel);
- if (s_den == 0) {
- return 0;
- } else {
- return (double)php_ifd_get32s(value, motorola_intel) / s_den;
- }
-
- case TAG_FMT_SSHORT: return (signed short)php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel);
-
- /* Not sure if this is correct (never seen float used in Exif format) */
- case TAG_FMT_SINGLE:
- php_error(E_NOTICE, "Found value of type single");
- return (double)*(float *)value;
- case TAG_FMT_DOUBLE:
- php_error(E_NOTICE, "Found value of type double");
- return *(double *)value;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ exif_convert_any_to_int
- * Evaluate number, be it int, rational, or float from directory. */
-static size_t exif_convert_any_to_int(void *value, int format, int motorola_intel)
-{
- int s_den;
- unsigned u_den;
-
- switch(format) {
- case TAG_FMT_SBYTE: return *(signed char *)value;
- case TAG_FMT_BYTE: return *(uchar *)value;
-
- case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel);
-
- case TAG_FMT_URATIONAL:
- u_den = php_ifd_get32u(4+(char *)value, motorola_intel);
- if (u_den == 0) {
- return 0;
- } else {
- return php_ifd_get32u(value, motorola_intel) / u_den;
- }
-
- case TAG_FMT_SRATIONAL:
- s_den = php_ifd_get32s(4+(char *)value, motorola_intel);
- if (s_den == 0) {
- return 0;
- } else {
- return php_ifd_get32s(value, motorola_intel) / s_den;
- }
-
- case TAG_FMT_SSHORT: return php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel);
-
- /* Not sure if this is correct (never seen float used in Exif format) */
- case TAG_FMT_SINGLE:
- php_error(E_NOTICE, "Found value of type single");
- return *(float *)value;
- case TAG_FMT_DOUBLE:
- php_error(E_NOTICE, "Found value of type double");
- return *(double *)value;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ struct image_info_value, image_info_list
-*/
-#ifndef WORD
-#define WORD short
-#endif
-#ifndef DWORD
-#define DWORD int
-#endif
-
-typedef struct {
- int num;
- int den;
-} signed_rational;
-
-typedef struct {
- unsigned int num;
- unsigned int den;
-} unsigned_rational;
-
-typedef union _image_info_value {
- char *s;
- unsigned u;
- int i;
- float f;
- double d;
- signed_rational sr;
- unsigned_rational ur;
- union _image_info_value *list;
-} image_info_value;
-
-typedef struct {
- WORD tag;
- WORD format;
- DWORD length;
- DWORD dummy; /* value ptr of tiff directory entry */
- char *name;
- image_info_value value;
-} image_info_data;
-
-typedef struct {
- int count;
- image_info_data *list;
-} image_info_list;
-/* }}} */
-
-/* {{{ exif_get_sectionname
- Returns the name of a section
-*/
-#define SECTION_FILE 0
-#define SECTION_COMPUTED 1
-#define SECTION_ANY_TAG 2
-#define SECTION_IFD0 3
-#define SECTION_THUMBNAIL 4
-#define SECTION_COMMENT 5
-#define SECTION_APP0 6
-#define SECTION_EXIF 7
-#define SECTION_FPIX 8
-#define SECTION_GPS 9
-#define SECTION_INTEROP 10
-#define SECTION_APP12 11
-#define SECTION_WINXP 12
-#define SECTION_COUNT 13
-
-#define FOUND_FILE (1<<SECTION_FILE)
-#define FOUND_COMPUTED (1<<SECTION_COMPUTED)
-#define FOUND_ANY_TAG (1<<SECTION_ANY_TAG)
-#define FOUND_IFD0 (1<<SECTION_IFD0)
-#define FOUND_THUMBNAIL (1<<SECTION_THUMBNAIL)
-#define FOUND_COMMENT (1<<SECTION_COMMENT)
-#define FOUND_APP0 (1<<SECTION_APP0)
-#define FOUND_EXIF (1<<SECTION_EXIF)
-#define FOUND_FPIX (1<<SECTION_FPIX)
-#define FOUND_GPS (1<<SECTION_GPS)
-#define FOUND_INTEROP (1<<SECTION_INTEROP)
-#define FOUND_APP12 (1<<SECTION_APP12)
-#define FOUND_WINXP (1<<SECTION_WINXP)
-
-static char *exif_get_sectionname(int section)
-{
- switch(section) {
- case SECTION_FILE: return "FILE";
- case SECTION_COMPUTED: return "COMPUTED";
- case SECTION_ANY_TAG: return "ANY_TAG";
- case SECTION_IFD0: return "IFD0";
- case SECTION_THUMBNAIL: return "THUMBNAIL";
- case SECTION_COMMENT: return "COMMENT";
- case SECTION_APP0: return "APP0";
- case SECTION_EXIF: return "EXIF";
- case SECTION_FPIX: return "FPIX";
- case SECTION_GPS: return "GPS";
- case SECTION_INTEROP: return "INTEROP";
- case SECTION_APP12: return "APP12";
- case SECTION_WINXP: return "WINXP";
- }
- return "";
-}
-/* }}} */
-
-/* {{{ exif_get_sectionlist
- Return list of sectionnames specified by sectionlist. Return value must be freed
-*/
-static char *exif_get_sectionlist(int sectionlist)
-{
- int i, len=0;
- char *sections;
-
- for(i=0; i<SECTION_COUNT; i++) {
- len += strlen(exif_get_sectionname(i))+2;
- }
- sections = emalloc(len+1);
- if (!sections) {
- EXIF_ERRLOG_EALLOC
- return NULL;
- }
- sections[0] = '\0';
- len = 0;
- for(i=0; i<SECTION_COUNT; i++) {
- if (sectionlist&(1<<i)) {
- sprintf(sections+len, "%s, ", exif_get_sectionname(i));
- len = strlen(sections);
- }
- }
- if (len>2)
- sections[len-2] = '\0';
- return sections;
-}
-/* }}} */
-
-/* {{{ struct image_info_type
- This structure stores Exif header image elements in a simple manner
- Used to store camera data as extracted from the various ways that it can be
- stored in a nexif header
-*/
-
-typedef struct {
- int type;
- size_t size;
- uchar *data;
-} file_section;
-
-typedef struct {
- int count;
- file_section *list;
-} file_section_list;
-
-typedef struct {
- image_filetype filetype;
- size_t width, height;
- size_t size;
- size_t offset;
- char *data;
-} thumbnail_data;
-
-typedef struct {
- char *value;
- size_t size;
- int tag;
-} xp_field_type;
-
-typedef struct {
- int count;
- xp_field_type *list;
-} xp_field_list;
-
-/* EXIF standard defines Copyright as "<Photographer> [ '\0' <Editor> ] ['\0']" */
-/* This structure is used to store a section of a Jpeg file. */
-typedef struct {
- php_stream *infile;
- char *FileName;
- time_t FileDateTime;
- size_t FileSize;
- image_filetype FileType;
- int Height, Width;
- int IsColor;
-
- float ApertureFNumber;
- float ExposureTime;
- double FocalplaneUnits;
- float CCDWidth;
- double FocalplaneXRes;
- size_t ExifImageWidth;
- float FocalLength;
- float Distance;
-
- int motorola_intel; /* 1 Motorola; 0 Intel */
-
- char *UserComment;
- int UserCommentLength;
- char *UserCommentEncoding;
- char *encode_unicode;
- char *decode_unicode_be;
- char *decode_unicode_le;
- char *encode_jis;
- char *decode_jis_be;
- char *decode_jis_le;
- char *Copyright;
- char *CopyrightPhotographer;
- char *CopyrightEditor;
-
- xp_field_list xp_fields;
-
- thumbnail_data Thumbnail;
- /* other */
- int sections_found; /* FOUND_<marker> */
- image_info_list info_list[SECTION_COUNT];
- /* for parsing */
- int read_thumbnail;
- int read_all;
- /* internal */
- file_section_list file;
-} image_info_type;
-/* }}} */
-
-/* {{{ jpeg_sof_info
- */
-typedef struct {
- int bits_per_sample;
- size_t width;
- size_t height;
- int num_components;
-} jpeg_sof_info;
-/* }}} */
-
-/* {{{ exif_file_sections_add
- Add a file_section to image_info
- returns the used block or -1. if size>0 and data == NULL buffer of size is allocated
-*/
-static int exif_file_sections_add(image_info_type *ImageInfo, int type, size_t size, uchar *data)
-{
- file_section *tmp;
- int count = ImageInfo->file.count;
-
- tmp = erealloc(ImageInfo->file.list, (count+1)*sizeof(file_section));
- if (tmp == NULL) {
- return 0;
- }
- ImageInfo->file.list = tmp;
- ImageInfo->file.list[count].type = 0xFFFF;
- ImageInfo->file.list[count].data = NULL;
- ImageInfo->file.list[count].size = 0;
- ImageInfo->file.count = count+1;
- if (!size) {
- data = NULL;
- } else if (data == NULL) {
- if ((data = emalloc(size)) == NULL) {
- return -1;
- }
- }
- ImageInfo->file.list[count].type = type;
- ImageInfo->file.list[count].data = data;
- ImageInfo->file.list[count].size = size;
- return count;
-}
-/* }}} */
-
-/* {{{ exif_file_sections_realloc
- Reallocate a file section returns 0 on success and -1 on failure
-*/
-static int exif_file_sections_realloc(image_info_type *ImageInfo, int section_index, size_t size)
-{
- void *tmp;
-
- if (section_index >= ImageInfo->file.count) {
- EXIF_ERRLOG_FSREALLOC
- return -1;
- }
- if (!(tmp = erealloc(ImageInfo->file.list[section_index].data, size)) && size) {
- EXIF_ERRLOG_EALLOC
- return -1;
- }
- ImageInfo->file.list[section_index].data = tmp;
- ImageInfo->file.list[section_index].size = size;
- return 0;
-}
-/* }}} */
-
-/* {{{ exif_file_section_free
- Discard all file_sections in ImageInfo
-*/
-static int exif_file_sections_free(image_info_type *ImageInfo)
-{
- int i;
-
- if (ImageInfo->file.count) {
- for (i=0; i<ImageInfo->file.count; i++) {
- EFREE_IF(ImageInfo->file.list[i].data);
- }
- }
- EFREE_IF(ImageInfo->file.list);
- ImageInfo->file.count = 0;
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_iif_add_value
- Add a value to image_info
-*/
-static void exif_iif_add_value(image_info_type *image_info, int section_index, char *name, int tag, int format, int length, void* value, int motorola_intel)
-{
- int index;
- image_info_value *info_value;
- image_info_data *info_data;
- image_info_data *list;
-
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- if (!list) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- image_info->info_list[section_index].list = list;
-
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = tag;
- info_data->format = format;
- info_data->length = length;
- info_data->name = estrdup(name);
- if (!info_data->name) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- info_value = &info_data->value;
-
- switch (format) {
- case TAG_FMT_STRING:
- if (value) {
- length = php_strnlen(value, length);
- info_data->length = length;
- info_value->s = estrndup(value, length);
- } else {
- info_data->length = 0;
- info_value->s = estrdup("");
- }
- if (!info_value->s) {
- EXIF_ERRLOG_EALLOC
- info_data->length = 0;
- break; /* better return with "" instead of possible casing problems */
- }
- break;
-
- default:
- /* Standard says more types possible but skip them...
- * but allow users to handle data if they know how to
- * So not return but use type UNDEFINED
- * return;
- */
- info_data->tag = TAG_FMT_UNDEFINED;/* otherwise not freed from memory */
- case TAG_FMT_SBYTE:
- case TAG_FMT_BYTE:
- /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */
- if (length<1)
- break;
- if (format==TAG_FMT_BYTE && length==1) {
- info_value->u = *(uchar*)value;
- break;
- }
- if (format==TAG_FMT_SBYTE && length==1) {
- info_value->i = *(char*)value;
- info_data->length = 0;
- break;
- }
- case TAG_FMT_UNDEFINED:
- if (value) {
- info_value->s = estrndup(value, length);
- } else {
- info_data->length = 0;
- info_value->s = estrdup("");
- }
- if (!info_value->s) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- break;
-
- case TAG_FMT_USHORT:
- case TAG_FMT_ULONG:
- case TAG_FMT_URATIONAL:
- case TAG_FMT_SSHORT:
- case TAG_FMT_SLONG:
- case TAG_FMT_SRATIONAL:
- case TAG_FMT_SINGLE:
- case TAG_FMT_DOUBLE:
- if (length==0) {
- break;
- } else
- if (length>1) {
- info_data->value.list = emalloc(length*sizeof(image_info_value));
- if (!info_data->value.list) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- } else {
- info_value = &info_data->value;
- }
- for (index=0; index<length; index++) {
- if (length>1) {
- info_value = &info_data->value.list[index];
- }
- switch (format) {
- case TAG_FMT_USHORT:
- info_value->u = php_ifd_get16u(value, motorola_intel);
- break;
-
- case TAG_FMT_ULONG:
- info_value->u = php_ifd_get32u(value, motorola_intel);
- break;
-
- case TAG_FMT_URATIONAL:
- info_value->ur.num = php_ifd_get32u(value, motorola_intel);
- info_value->ur.den = php_ifd_get32u(4+(char *)value, motorola_intel);
- break;
-
- case TAG_FMT_SSHORT:
- info_value->i = php_ifd_get16s(value, motorola_intel);
- break;
-
- case TAG_FMT_SLONG:
- info_value->i = php_ifd_get32s(value, motorola_intel);
- break;
-
- case TAG_FMT_SRATIONAL:
- info_value->sr.num = php_ifd_get32u(value, motorola_intel);
- info_value->sr.den = php_ifd_get32u(4+(char *)value, motorola_intel);
- break;
-
- case TAG_FMT_SINGLE:
- php_error(E_WARNING, "Found value of type single");
- info_value->f = (double)*(float *)value;
-
- case TAG_FMT_DOUBLE:
- php_error(E_WARNING, "Found value of type double");
- info_value->d = *(double *)value;
- break;
- }
- }
- }
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
-}
-/* }}} */
-
-/* {{{ exif_iif_add_tag
- Add a tag from IFD to image_info
-*/
-static void exif_iif_add_tag(image_info_type *image_info, int section_index, char *name, int tag, int format, int length, void* value)
-{
- exif_iif_add_value(image_info, section_index, name, tag, format, length, value, image_info->motorola_intel);
-}
-/* }}} */
-
-/* {{{ exif_iif_add_int
- Add an int value to image_info
-*/
-static void exif_iif_add_int(image_info_type *image_info, int section_index, char *name, int value)
-{
- image_info_data *info_data;
- image_info_data *list;
-
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- if (!list) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- image_info->info_list[section_index].list = list;
-
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = TAG_NONE;
- info_data->format = TAG_FMT_SLONG;
- info_data->length = 1;
- info_data->name = estrdup(name);
- if (!info_data->name) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- info_data->value.i = value;
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
-}
-/* }}} */
-
-/* {{{ exif_iif_add_str
- Add a string value to image_info MUST BE NUL TERMINATED
-*/
-static void exif_iif_add_str(image_info_type *image_info, int section_index, char *name, char *value)
-{
- image_info_data *info_data;
- image_info_data *list;
-
- if (value) {
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- if (!list) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- image_info->info_list[section_index].list = list;
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = TAG_NONE;
- info_data->format = TAG_FMT_STRING;
- info_data->length = 1;
- info_data->name = estrdup(name);
- if (!info_data->name) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- info_data->value.s = estrdup(value);
- if (!info_data->value.s) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
- }
-}
-/* }}} */
-
-/* {{{ exif_iif_add_fmt
- Add a format string value to image_info MUST BE NUL TERMINATED
-*/
-static void exif_iif_add_fmt(image_info_type *image_info, int section_index, char *name, char *value, ...)
-{
- char *tmp;
- va_list arglist;
-
- va_start(arglist, value);
- if (value) {
- vspprintf(&tmp, 0, value, arglist);
- exif_iif_add_str(image_info, section_index, name, tmp);
- efree(tmp);
- }
- va_end(arglist);
-}
-/* }}} */
-
-/* {{{ exif_iif_add_str
- Add a string value to image_info MUST BE NUL TERMINATED
-*/
-static void exif_iif_add_buffer(image_info_type *image_info, int section_index, char *name, int length, char *value)
-{
- image_info_data *info_data;
- image_info_data *list;
-
- if (value) {
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- if (!list) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- image_info->info_list[section_index].list = list;
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = TAG_NONE;
- info_data->format = TAG_FMT_UNDEFINED;
- info_data->length = length;
- info_data->name = estrdup(name);
- if (!info_data->name) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- info_data->value.s = emalloc(length+1);
- if (!info_data->value.s) {
- EXIF_ERRLOG_EALLOC
- return;
- }
- memcpy(info_data->value.s, value, length);
- info_data->value.s[length] = 0;
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
- }
-}
-/* }}} */
-
-/* {{{ exif_iif_free
- Free memory allocated for image_info
-*/
-static void exif_iif_free(image_info_type *image_info, int section_index) {
- int i;
- void *f; /* faster */
-
- if (image_info->info_list[section_index].count) {
- for (i=0; i < image_info->info_list[section_index].count; i++) {
- if ((f=image_info->info_list[section_index].list[i].name) != NULL) {
- efree(f);
- }
- switch(image_info->info_list[section_index].list[i].format) {
- case TAG_FMT_SBYTE:
- case TAG_FMT_BYTE:
- /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */
- if (image_info->info_list[section_index].list[i].length<=1)
- break;
- default:
- case TAG_FMT_UNDEFINED:
- case TAG_FMT_STRING:
- if ((f=image_info->info_list[section_index].list[i].value.s) != NULL) {
- efree(f);
- }
- break;
-
- case TAG_FMT_USHORT:
- case TAG_FMT_ULONG:
- case TAG_FMT_URATIONAL:
- case TAG_FMT_SSHORT:
- case TAG_FMT_SLONG:
- case TAG_FMT_SRATIONAL:
- case TAG_FMT_SINGLE:
- case TAG_FMT_DOUBLE:
- /* nothing to do here */
- if (image_info->info_list[section_index].list[i].length > 1) {
- if ((f=image_info->info_list[section_index].list[i].value.list) != NULL) {
- efree(f);
- }
- }
- break;
- }
- }
- }
- EFREE_IF(image_info->info_list[section_index].list);
-}
-/* }}} */
-
-/* {{{ add_assoc_image_info
- * Add image_info to associative array value. */
-static void add_assoc_image_info(pval *value, int sub_array, image_info_type *image_info, int section_index)
-{
- char buffer[64], *val, *name, uname[64];
- int i, ap, l, b, idx=0, done, unknown=0;
- image_info_value *info_value;
- image_info_data *info_data;
- pval *tmpi, *array = NULL;
-
- if (image_info->info_list[section_index].count) {
- if (sub_array) {
- MAKE_STD_ZVAL(tmpi);
- array_init(tmpi);
- } else {
- tmpi = value;
- }
-
- for(i=0; i<image_info->info_list[section_index].count; i++) {
- done = 0;
- info_data = &image_info->info_list[section_index].list[i];
- info_value = &info_data->value;
- if (!(name = info_data->name)) {
- sprintf(uname, "%d", unknown++);
- name = uname;
- }
- if (info_data->length==0) {
- add_assoc_null(tmpi, name);
- } else {
- switch (info_data->format) {
- default:
- /* Standard says more types possible but skip them...
- * but allow users to handle data if they know how to
- * So not return but use type UNDEFINED
- * return;
- */
- case TAG_FMT_UNDEFINED:
- if (!info_value->s) {
- add_assoc_stringl(tmpi, name, "", 0, 1);
- } else {
- add_assoc_stringl(tmpi, name, info_value->s, info_data->length, 1);
- }
- break;
-
- case TAG_FMT_STRING:
- if (!(val = info_value->s)) {
- val = "";
- }
- if (section_index==SECTION_COMMENT) {
- add_index_string(tmpi, idx++, val, 1);
- } else {
- add_assoc_string(tmpi, name, val, 1);
- }
- break;
-
- case TAG_FMT_URATIONAL:
- case TAG_FMT_SRATIONAL:
- case TAG_FMT_BYTE:
- case TAG_FMT_SBYTE:
- case TAG_FMT_USHORT:
- case TAG_FMT_SSHORT:
- case TAG_FMT_SINGLE:
- case TAG_FMT_DOUBLE:
- case TAG_FMT_ULONG:
- case TAG_FMT_SLONG:
- /* now the rest, first see if it becomes an array */
- if ((l = info_data->length) > 1) {
- array = NULL;
- MAKE_STD_ZVAL(array);
- array_init(array);
- }
- for(ap=0; ap<l; ap++) {
- if (l>1) {
- info_value = &info_data->value.list[ap];
- }
- switch (info_data->format) {
- case TAG_FMT_BYTE:
- if (l>1) {
- info_value = &info_data->value;
- for (b=0;b<l;b++) {
- add_index_long(array, b, (int)(info_value->s[b]));
- }
- break;
- }
- case TAG_FMT_USHORT:
- case TAG_FMT_ULONG:
- if (l==1) {
- add_assoc_long(tmpi, name, (int)info_value->u);
- } else {
- add_index_long(array, ap, (int)info_value->u);
- }
- break;
-
- case TAG_FMT_URATIONAL:
- sprintf(buffer, "%i/%i", info_value->ur.num, info_value->ur.den);
- if (l==1) {
- add_assoc_string(tmpi, name, buffer, 1);
- } else {
- add_index_string(array, ap, buffer, 1);
- }
- break;
-
- case TAG_FMT_SBYTE:
- if (l>1) {
- info_value = &info_data->value;
- for (b=0;b<l;b++) {
- add_index_long(array, ap, (int)info_value->s[b]);
- }
- break;
- }
- case TAG_FMT_SSHORT:
- case TAG_FMT_SLONG:
- if (l==1) {
- add_assoc_long(tmpi, name, info_value->i);
- } else {
- add_index_long(array, ap, info_value->i);
- }
- break;
-
- case TAG_FMT_SRATIONAL:
- sprintf(buffer, "%i/%i", info_value->sr.num, info_value->sr.den);
- if (l==1) {
- add_assoc_string(tmpi, name, buffer, 1);
- } else {
- add_index_string(array, ap, buffer, 1);
- }
- break;
-
- case TAG_FMT_SINGLE:
- if (l==1) {
- add_assoc_double(tmpi, name, info_value->f);
- } else {
- add_index_double(array, ap, info_value->f);
- }
- break;
-
- case TAG_FMT_DOUBLE:
- if (l==1) {
- add_assoc_double(tmpi, name, info_value->d);
- } else {
- add_index_double(array, ap, info_value->d);
- }
- break;
- }
- info_value = &info_data->value.list[ap];
- }
- if (l>1) {
- add_assoc_zval(tmpi, name, array);
- }
- break;
- }
- }
- }
- if (sub_array) {
- add_assoc_zval(value, exif_get_sectionname(section_index), tmpi);
- }
- }
-}
-/* }}} */
-
-/* {{{ Markers
- JPEG markers consist of one or more 0xFF bytes, followed by a marker
- code byte (which is not an FF). Here are the marker codes of interest
- in this program. (See jdmarker.c for a more complete list.)
-*/
-
-#define M_TEM 0x01 /* temp for arithmetic coding */
-#define M_RES 0x02 /* reserved */
-#define M_SOF0 0xC0 /* Start Of Frame N */
-#define M_SOF1 0xC1 /* N indicates which compression process */
-#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */
-#define M_SOF3 0xC3
-#define M_DHT 0xC4
-#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */
-#define M_SOF6 0xC6
-#define M_SOF7 0xC7
-#define M_JPEG 0x08 /* reserved for extensions */
-#define M_SOF9 0xC9
-#define M_SOF10 0xCA
-#define M_SOF11 0xCB
-#define M_DAC 0xCC /* arithmetic table */
-#define M_SOF13 0xCD
-#define M_SOF14 0xCE
-#define M_SOF15 0xCF
-#define M_RST0 0xD0 /* restart segment */
-#define M_RST1 0xD1
-#define M_RST2 0xD2
-#define M_RST3 0xD3
-#define M_RST4 0xD4
-#define M_RST5 0xD5
-#define M_RST6 0xD6
-#define M_RST7 0xD7
-#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */
-#define M_EOI 0xD9 /* End Of Image (end of datastream) */
-#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
-#define M_DQT 0xDB
-#define M_DNL 0xDC
-#define M_DRI 0xDD
-#define M_DHP 0xDE
-#define M_EXP 0xDF
-#define M_APP0 0xE0
-#define M_EXIF 0xE1 /* Exif Attribute Information */
-#define M_APP2 0xE2 /* Flash Pix Extension Data? */
-#define M_APP3 0xE3
-#define M_APP4 0xE4
-#define M_APP5 0xE5
-#define M_APP6 0xE6
-#define M_APP7 0xE7
-#define M_APP8 0xE8
-#define M_APP9 0xE9
-#define M_APP10 0xEA
-#define M_APP11 0xEB
-#define M_APP12 0xEC
-#define M_APP13 0xED /* IPTC International Press Telecommunications Council */
-#define M_APP14 0xEE
-#define M_APP15 0xEF
-#define M_JPG0 0xF0
-#define M_JPG1 0xF1
-#define M_JPG2 0xF2
-#define M_JPG3 0xF3
-#define M_JPG4 0xF4
-#define M_JPG5 0xF5
-#define M_JPG6 0xF6
-#define M_JPG7 0xF7
-#define M_JPG8 0xF8
-#define M_JPG9 0xF9
-#define M_JPG10 0xFA
-#define M_JPG11 0xFB
-#define M_JPG12 0xFC
-#define M_JPG13 0xFD
-#define M_COM 0xFE /* COMment */
-
-#define M_PSEUDO 0x123 /* Extra value. */
-
-/* }}} */
-
-/* {{{ jpeg2000 markers
- */
-/* Markers x30 - x3F do not have a segment */
-/* Markers x00, x01, xFE, xC0 - xDF ISO/IEC 10918-1 -> M_<xx> */
-/* Markers xF0 - xF7 ISO/IEC 10918-3 */
-/* Markers xF7 - xF8 ISO/IEC 14495-1 */
-/* XY=Main/Tile-header:(R:required, N:not_allowed, O:optional, L:last_marker) */
-#define JC_SOC 0x4F /* NN, Start of codestream */
-#define JC_SIZ 0x51 /* RN, Image and tile size */
-#define JC_COD 0x52 /* RO, Codeing style defaulte */
-#define JC_COC 0x53 /* OO, Coding style component */
-#define JC_TLM 0x55 /* ON, Tile part length main header */
-#define JC_PLM 0x57 /* ON, Packet length main header */
-#define JC_PLT 0x58 /* NO, Packet length tile part header */
-#define JC_QCD 0x5C /* RO, Quantization default */
-#define JC_QCC 0x5D /* OO, Quantization component */
-#define JC_RGN 0x5E /* OO, Region of interest */
-#define JC_POD 0x5F /* OO, Progression order default */
-#define JC_PPM 0x60 /* ON, Packed packet headers main header */
-#define JC_PPT 0x61 /* NO, Packet packet headers tile part header */
-#define JC_CME 0x64 /* OO, Comment: "LL E <text>" E=0:binary, E=1:ascii */
-#define JC_SOT 0x90 /* NR, Start of tile */
-#define JC_SOP 0x91 /* NO, Start of packeter default */
-#define JC_EPH 0x92 /* NO, End of packet header */
-#define JC_SOD 0x93 /* NL, Start of data */
-#define JC_EOC 0xD9 /* NN, End of codestream */
-/* }}} */
-
-/* {{{ exif_process_COM
- Process a COM marker.
- We want to print out the marker contents as legible text;
- we must guard against random junk and varying newline representations.
-*/
-static void exif_process_COM (image_info_type *image_info, uchar *value, int length)
-{
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length-2, value+2);
-}
-/* }}} */
-
-/* {{{ exif_process_COM
- Process a COM marker.
- We want to print out the marker contents as legible text;
- we must guard against random junk and varying newline representations.
-*/
-#ifdef EXIF_JPEG2000
-static void exif_process_CME (image_info_type *image_info, uchar *value, int length)
-{
- if (length>3) {
- switch(value[2]) {
- case 0:
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_UNDEFINED, length, value);
- break;
- case 1:
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length, value);
- break;
- default:
- php_error(E_NOTICE, "Undefined JPEG2000 comment encoding");
- break;
- }
- } else {
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_UNDEFINED, 0, NULL);
- php_error(E_NOTICE, "JPEG2000 comment section to small");
- }
-}
-#endif
-/* }}} */
-
-/* {{{ exif_process_SOFn
- * Process a SOFn marker. This is useful for the image dimensions */
-static void exif_process_SOFn (uchar *Data, int marker, jpeg_sof_info *result)
-{
-/* 0xFF SOSn SectLen(2) Bits(1) Height(2) Width(2) Channels(1) 3*Channels (1) */
- result->bits_per_sample = Data[2];
- result->height = php_jpg_get16(Data+3);
- result->width = php_jpg_get16(Data+5);
- result->num_components = Data[7];
-
-/* switch (marker) {
- case M_SOF0: process = "Baseline"; break;
- case M_SOF1: process = "Extended sequential"; break;
- case M_SOF2: process = "Progressive"; break;
- case M_SOF3: process = "Lossless"; break;
- case M_SOF5: process = "Differential sequential"; break;
- case M_SOF6: process = "Differential progressive"; break;
- case M_SOF7: process = "Differential lossless"; break;
- case M_SOF9: process = "Extended sequential, arithmetic coding"; break;
- case M_SOF10: process = "Progressive, arithmetic coding"; break;
- case M_SOF11: process = "Lossless, arithmetic coding"; break;
- case M_SOF13: process = "Differential sequential, arithmetic coding"; break;
- case M_SOF14: process = "Differential progressive, arithmetic coding"; break;
- case M_SOF15: process = "Differential lossless, arithmetic coding"; break;
- default: process = "Unknown"; break;
- }*/
-}
-/* }}} */
-
-static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *DirStart, char *OffsetBase, unsigned IFDlength, int sub_section_index TSRMLS_DC);
-
-/* {{{ exif_get_markername
- Get name of marker */
-#ifdef EXIF_DEBUG
-static char * exif_get_markername(int marker)
-{
- switch(marker) {
- case 0xC0: return "SOF0";
- case 0xC1: return "SOF1";
- case 0xC2: return "SOF2";
- case 0xC3: return "SOF3";
- case 0xC4: return "DHT";
- case 0xC5: return "SOF5";
- case 0xC6: return "SOF6";
- case 0xC7: return "SOF7";
- case 0xC9: return "SOF9";
- case 0xCA: return "SOF10";
- case 0xCB: return "SOF11";
- case 0xCD: return "SOF13";
- case 0xCE: return "SOF14";
- case 0xCF: return "SOF15";
- case 0xD8: return "SOI";
- case 0xD9: return "EOI";
- case 0xDA: return "SOS";
- case 0xDB: return "DQT";
- case 0xDC: return "DNL";
- case 0xDD: return "DRI";
- case 0xDE: return "DHP";
- case 0xDF: return "EXP";
- case 0xE0: return "APP0";
- case 0xE1: return "EXIF";
- case 0xE2: return "FPIX";
- case 0xE3: return "APP3";
- case 0xE4: return "APP4";
- case 0xE5: return "APP5";
- case 0xE6: return "APP6";
- case 0xE7: return "APP7";
- case 0xE8: return "APP8";
- case 0xE9: return "APP9";
- case 0xEA: return "APP10";
- case 0xEB: return "APP11";
- case 0xEC: return "APP12";
- case 0xED: return "APP13";
- case 0xEE: return "APP14";
- case 0xEF: return "APP15";
- case 0xF0: return "JPG0";
- case 0xFD: return "JPG13";
- case 0xFE: return "COM";
- case 0x01: return "TEM";
- }
- return "Unknown";
-}
-#endif
-/* }}} */
-
-/* {{{ proto string|false exif_tagname(index)
- Get headername for index or false if not defined */
-PHP_FUNCTION(exif_tagname)
-{
- pval **p_num;
- int tag, ac = ZEND_NUM_ARGS();
- char *szTemp;
-
- if ((ac < 1 || ac > 1) || zend_get_parameters_ex(ac, &p_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(p_num);
- tag = Z_LVAL_PP(p_num);
- szTemp = exif_get_tagname(tag, NULL, 0);
- if (tag<0 || !szTemp || !szTemp[0]) {
- RETURN_BOOL(FALSE);
- } else {
- RETURN_STRING(szTemp, 1)
- }
-}
-/* }}} */
-
-/* {{{ exif_ifd_make_value
- * Create a value for an ifd from an info_data pointer */
-static void* exif_ifd_make_value(image_info_data *info_data, int motorola_intel) {
- size_t byte_count;
- char *value_ptr, *data_ptr;
- int i;
-
- image_info_value *info_value;
-
- byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length;
- value_ptr = emalloc(max(byte_count, 4));
- if (!value_ptr) {
- EXIF_ERRLOG_EALLOC
- return NULL;
- }
- memset(value_ptr, 0, 4);
- if (!info_data->length) {
- return value_ptr;
- }
- if (info_data->format == TAG_FMT_UNDEFINED || info_data->format == TAG_FMT_STRING
- || (byte_count>1 && (info_data->format == TAG_FMT_BYTE || info_data->format == TAG_FMT_SBYTE))
- ) {
- memmove(value_ptr, info_data->value.s, byte_count);
- return value_ptr;
- } else if (info_data->format == TAG_FMT_BYTE) {
- *value_ptr = info_data->value.u;
- return value_ptr;
- } else if (info_data->format == TAG_FMT_SBYTE) {
- *value_ptr = info_data->value.i;
- return value_ptr;
- } else {
- data_ptr = value_ptr;
- for(i=0; i<info_data->length; i++) {
- if (info_data->length==1) {
- info_value = &info_data->value;
- } else {
- info_value = &info_data->value.list[i];
- }
- switch(info_data->format) {
- case TAG_FMT_USHORT:
- php_ifd_set16u(data_ptr, info_value->u, motorola_intel);
- data_ptr += 2;
- break;
- case TAG_FMT_ULONG:
- php_ifd_set32u(data_ptr, info_value->u, motorola_intel);
- data_ptr += 4;
- break;
- case TAG_FMT_SSHORT:
- php_ifd_set16u(data_ptr, info_value->i, motorola_intel);
- data_ptr += 2;
- break;
- case TAG_FMT_SLONG:
- php_ifd_set32u(data_ptr, info_value->i, motorola_intel);
- data_ptr += 4;
- break;
- case TAG_FMT_URATIONAL:
- php_ifd_set32u(data_ptr, info_value->sr.num, motorola_intel);
- php_ifd_set32u(data_ptr+4, info_value->sr.den, motorola_intel);
- data_ptr += 8;
- break;
- case TAG_FMT_SRATIONAL:
- php_ifd_set32u(data_ptr, info_value->ur.num, motorola_intel);
- php_ifd_set32u(data_ptr+4, info_value->ur.den, motorola_intel);
- data_ptr += 8;
- break;
- case TAG_FMT_SINGLE:
- memmove(data_ptr, &info_data->value.f, byte_count);
- data_ptr += 4;
- break;
- case TAG_FMT_DOUBLE:
- memmove(data_ptr, &info_data->value.d, byte_count);
- data_ptr += 8;
- break;
- }
- }
- }
- return value_ptr;
-}
-/* }}} */
-
-/* {{{ exif_thumbnail_build
- * Check and build thumbnail */
-static void exif_thumbnail_build(image_info_type *ImageInfo) {
- size_t new_size, new_move, new_value;
- char *new_data;
- void *value_ptr;
- int i, byte_count;
- image_info_list *info_list;
- image_info_data *info_data;
-#ifdef EXIF_DEBUG
- char tagname[64];
-#endif
-
- if (!ImageInfo->read_thumbnail || !ImageInfo->Thumbnail.offset || !ImageInfo->Thumbnail.size) {
- return; /* ignore this call */
- }
- switch(ImageInfo->Thumbnail.filetype) {
- default:
- case IMAGE_FILETYPE_JPEG:
- /* done */
- break;
- case IMAGE_FILETYPE_TIFF_II:
- case IMAGE_FILETYPE_TIFF_MM:
- info_list = &ImageInfo->info_list[SECTION_THUMBNAIL];
- new_size = 8 + 2 + info_list->count * 12 + 4;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "thumbnail: size of signature + directory(%d): 0x%02X", info_list->count, new_size);
-#endif
- new_value= new_size; /* offset for ifd values outside ifd directory */
- for (i=0; i<info_list->count; i++) {
- info_data = &info_list->list[i];
- byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length;
- if (byte_count > 4) {
- new_size += byte_count;
- }
- }
- new_move = new_size;
- new_data = erealloc(ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size+new_size);
- if (!ImageInfo->Thumbnail.data) {
- EXIF_ERRLOG_EALLOC
- efree(ImageInfo->Thumbnail.data);
- ImageInfo->Thumbnail.data = NULL;
- ImageInfo->Thumbnail.size = 0;
- return;
- }
- ImageInfo->Thumbnail.data = new_data;
- memmove(ImageInfo->Thumbnail.data + new_move, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
- ImageInfo->Thumbnail.size += new_size;
- /* fill in data */
- if (ImageInfo->motorola_intel) {
- memmove(new_data, "MM\x00\x2a\x00\x00\x00\x08", 8);
- } else {
- memmove(new_data, "II\x2a\x00\x08\x00\x00\x00", 8);
- }
- new_data += 8;
- php_ifd_set16u(new_data, info_list->count, ImageInfo->motorola_intel);
- new_data += 2;
- for (i=0; i<info_list->count; i++) {
- info_data = &info_list->list[i];
- byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "thumbnail: process tag(x%04X=%s): %s%s (%d bytes)", info_data->tag, exif_get_tagname(info_data->tag, tagname, -12), (info_data->length>1)&&info_data->format!=TAG_FMT_UNDEFINED&&info_data->format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(info_data->format), byte_count);
-#endif
- if (info_data->tag==TAG_STRIP_OFFSETS || info_data->tag==TAG_JPEG_INTERCHANGE_FORMAT) {
- php_ifd_set16u(new_data + 0, info_data->tag, ImageInfo->motorola_intel);
- php_ifd_set16u(new_data + 2, TAG_FMT_ULONG, ImageInfo->motorola_intel);
- php_ifd_set32u(new_data + 4, 1, ImageInfo->motorola_intel);
- php_ifd_set32u(new_data + 8, new_move, ImageInfo->motorola_intel);
- } else {
- php_ifd_set16u(new_data + 0, info_data->tag, ImageInfo->motorola_intel);
- php_ifd_set16u(new_data + 2, info_data->format, ImageInfo->motorola_intel);
- php_ifd_set32u(new_data + 4, info_data->length, ImageInfo->motorola_intel);
- value_ptr = exif_ifd_make_value(info_data, ImageInfo->motorola_intel);
- if (!value_ptr) {
- EXIF_ERRLOG_EALLOC
- efree(ImageInfo->Thumbnail.data);
- ImageInfo->Thumbnail.data = NULL;
- ImageInfo->Thumbnail.size = 0;
- return;
- }
- if (byte_count <= 4) {
- memmove(new_data+8, value_ptr, 4);
- } else {
- php_ifd_set32u(new_data+8, new_value, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "thumbnail: writing with value offset: 0x%04X + 0x%02X", new_value, byte_count);
-#endif
- memmove(ImageInfo->Thumbnail.data+new_value, value_ptr, byte_count);
- new_value += byte_count;
- }
- efree(value_ptr);
- }
- new_data += 12;
- }
- memset(new_data, 0, 4); /* next ifd pointer */
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "thumbnail: created");
-#endif
- break;
- }
-}
-/* }}} */
-
-/* {{{ exif_thumbnail_extract
- * Grab the thumbnail, corrected */
-static void exif_thumbnail_extract(image_info_type *ImageInfo, char *offset, size_t length) {
- /* according to exif2.1, the thumbnail is not supposed to be greater than 64K */
- if (!ImageInfo->read_thumbnail) {
- return; /* ignore this call */
- }
- if (ImageInfo->Thumbnail.size >= 65536
- || ImageInfo->Thumbnail.size <= 0
- || ImageInfo->Thumbnail.offset <= 0
- ) {
- php_error(E_WARNING, "Illegal thumbnail size/offset");
- return;
- }
- /* Check to make sure we are not going to go past the ExifLength */
- if ((ImageInfo->Thumbnail.offset + ImageInfo->Thumbnail.size) > length) {
- EXIF_ERRLOG_THUMBEOF
- return;
- }
- ImageInfo->Thumbnail.data = estrndup(offset + ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
- if (!ImageInfo->Thumbnail.data) {
- EXIF_ERRLOG_EALLOC
- }
- exif_thumbnail_build(ImageInfo);
-}
-/* }}} */
-
-/* {{{ exif_process_undefined
- * Copy a string/buffer in Exif header to a character string and return length of allocated buffer if any. */
-static int exif_process_undefined(char **result, char *value, size_t byte_count) {
- /* we cannot use strlcpy - here the problem is that we have to copy NUL
- * chars up to byte_count, we also have to add a single NUL character to
- * force end of string.
- * estrndup does not return length
- */
- if (byte_count) {
- (*result) = estrndup(value, byte_count); /* NULL @ byte_count!!! */
- if (!*result) {
- EXIF_ERRLOG_EALLOC
- return 0;
- }
- return byte_count+1;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ exif_process_string_raw
- * Copy a string in Exif header to a character string returns length of allocated buffer if any. */
-#ifndef HAVE_MBSTRING
-static int exif_process_string_raw(char **result, char *value, size_t byte_count) {
- /* we cannot use strlcpy - here the problem is that we have to copy NUL
- * chars up to byte_count, we also have to add a single NUL character to
- * force end of string.
- */
- if (byte_count) {
- (*result) = emalloc(byte_count+1);
- memcpy(*result, value, byte_count);
- (*result)[byte_count] = '\0';
- return byte_count+1;
- }
- return 0;
-}
-#endif
-/* }}} */
-
-/* {{{ exif_process_string
- * Copy a string in Exif header to a character string and return length of allocated buffer if any.
- * In contrast to exif_process_string this function does allways return a string buffer */
-static int exif_process_string(char **result, char *value, size_t byte_count) {
- /* we cannot use strlcpy - here the problem is that we cannot use strlen to
- * determin length of string and we cannot use strlcpy with len=byte_count+1
- * because then we might get into an EXCEPTION if we exceed an allocated
- * memory page...so we use php_strnlen in conjunction with memcpy and add the NUL
- * char.
- * estrdup would sometimes allocate more memory and does not return length
- */
- if ((byte_count=php_strnlen(value, byte_count)) > 0) {
- return exif_process_undefined(result, value, byte_count);
- }
- (*result) = estrndup("", 1); /* force empty string */
- if (!*result) {
- EXIF_ERRLOG_EALLOC
- return 0;
- }
- return byte_count+1;
-}
-/* }}} */
-
-/* {{{ exif_process_user_comment
- * Process UserComment in IFD. */
-static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoPtr, char **pszEncoding, char *szValuePtr, int ByteCount TSRMLS_DC)
-{
- int a;
-
-#ifdef HAVE_MBSTRING
- size_t len;;
-#endif
-
- *pszEncoding = NULL;
- /* Copy the comment */
- if (ByteCount>=8) {
- if (!memcmp(szValuePtr, "UNICODE\0", 8)) {
- *pszEncoding = estrdup((const char*)szValuePtr);
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
-#ifdef HAVE_MBSTRING
- if (ImageInfo->motorola_intel) {
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_be, &len TSRMLS_CC);
- } else {
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &len TSRMLS_CC);
- }
- return len;
-#else
- return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
-#endif
- } else
- if (!memcmp(szValuePtr, "ASCII\0\0\0", 8)) {
- *pszEncoding = estrdup((const char*)szValuePtr);
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
- } else
- if (!memcmp(szValuePtr, "JIS\0\0\0\0\0", 8)) {
- /* JIS should be tanslated to MB or we leave it to the user - leave it to the user */
- *pszEncoding = estrdup((const char*)szValuePtr);
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
-#ifdef HAVE_MBSTRING
- if (ImageInfo->motorola_intel) {
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_jis, ImageInfo->decode_jis_be, &len TSRMLS_CC);
- } else {
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_jis, ImageInfo->decode_jis_le, &len TSRMLS_CC);
- }
- return len;
-#else
- return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
-#endif
- } else
- if (!memcmp(szValuePtr, "\0\0\0\0\0\0\0\0", 8)) {
- /* 8 NULL means undefined and should be ASCII... */
- *pszEncoding = estrdup("UNDEFINED");
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
- }
- }
-
- /* Olympus has this padded with trailing spaces. Remove these first. */
- if (ByteCount>0) {
- for (a=ByteCount-1;a && szValuePtr[a]==' ';a--) {
- (szValuePtr)[a] = '\0';
- }
- }
-
- /* normal text without encoding */
- exif_process_string(pszInfoPtr, szValuePtr, ByteCount);
- return strlen(*pszInfoPtr);
-}
-/* }}} */
-
-/* {{{ exif_process_unicode
- * Process unicode field in IFD. */
-static int exif_process_unicode(image_info_type *ImageInfo, xp_field_type *xp_field, int tag, char *szValuePtr, int ByteCount TSRMLS_DC)
-{
- xp_field->tag = tag;
-
- /* Copy the comment */
-#ifdef HAVE_MBSTRING
-/* What if MS supports big-endian with XP? */
-/* if (ImageInfo->motorola_intel) {
- xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_be, &xp_field->size TSRMLS_CC);
- } else {
- xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &xp_field->size TSRMLS_CC);
- }*/
- xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &xp_field->size TSRMLS_CC);
- return xp_field->size;
-#else
- xp_field->size = exif_process_string_raw(&xp_field->value, szValuePtr, ByteCount);
- return xp_field->size;
-#endif
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_TAG
- * Process one of the nested IFDs directories. */
-static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, char *offset_base, size_t IFDlength, int section_index, int ReadNextIFD TSRMLS_DC)
-{
- int l;
- int tag, format, components;
- char *value_ptr, tagname[64], cbuf[32], *outside=NULL;
- size_t byte_count, offset_val, fpos, fgot;
- xp_field_type *tmp_xp;
-
- tag = php_ifd_get16u(dir_entry, ImageInfo->motorola_intel);
- format = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);
- components = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel);
-
- if (!format || format >= NUM_FORMATS) {
- /* (-1) catches illegal zero case as unsigned underflows to positive large. */
- php_error(E_WARNING, "Illegal format code in IFD: 0x%04X", format);
- return TRUE;
- }
-
- byte_count = components * php_tiff_bytes_per_format[format];
-
- if (byte_count > 4) {
- offset_val = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
- /* If its bigger than 4 bytes, the dir entry contains an offset. */
- value_ptr = offset_base+offset_val;
- if (offset_val+byte_count > IFDlength || value_ptr < dir_entry) {
- /*
- // It is important to check for IMAGE_FILETYPE_TIFF
- // JPEG does not use absolute pointers instead its pointers are relative to the start
- // of the TIFF header in APP1 section.
- */
- if (offset_val<0 || offset_val+byte_count>ImageInfo->FileSize || (ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_II && ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_MM)) {
- if (value_ptr < dir_entry) {
- /* we can read this if offset_val > 0 */
- /* some files have their values in other parts of the file */
- php_error(E_WARNING, "process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)", tag, exif_get_tagname(tag, tagname, -12), offset_val, dir_entry);
- } else {
- /* this is for sure not allowed */
- /* exception are IFD pointers */
- php_error(E_WARNING, "process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)", tag, exif_get_tagname(tag, tagname, -12), offset_val, byte_count, offset_val+byte_count, IFDlength);
- }
- return TRUE;
- }
- if (byte_count>sizeof(cbuf)) {
- /* mark as outside range and get buffer */
- value_ptr = emalloc(byte_count);
- if (!value_ptr) {
- EXIF_ERRLOG_EALLOC
- return FALSE;
- }
- outside = value_ptr;
- } else {
- /*
- // in most cases we only access a small range so
- // it is faster to use a static buffer there
- // BUT it offers also the possibility to have
- // pointers read without the need to free them
- // explicitley before returning.
- */
- value_ptr = cbuf;
- }
-
- fpos = php_stream_tell(ImageInfo->infile);
- php_stream_seek(ImageInfo->infile, offset_val, SEEK_SET);
- fgot = php_stream_tell(ImageInfo->infile);
- if (fgot!=offset_val) {
- EFREE_IF(outside);
- php_error(E_WARNING, "Wrong file pointer: 0x%08X != 0x08X", fgot, offset_val);
- return FALSE;
- }
- fgot = php_stream_read(ImageInfo->infile, value_ptr, byte_count);
- php_stream_seek(ImageInfo->infile, fpos, SEEK_SET);
- if (fgot<byte_count) {
- EFREE_IF(outside);
- EXIF_ERRLOG_FILEEOF
- return FALSE;
- }
- }
- } else {
- /* 4 bytes or less and value is in the dir entry itself */
- value_ptr = dir_entry+8;
- offset_val= value_ptr-offset_base;
- }
-
- ImageInfo->sections_found |= FOUND_ANY_TAG;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s", tag, exif_get_tagname(tag, tagname, -12), offset_val, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", format==TAG_FMT_STRING?(value_ptr?value_ptr:"<no data>"):exif_get_tagformat(format));
-#endif
- if (section_index==SECTION_THUMBNAIL) {
- switch(tag) {
- case TAG_IMAGEWIDTH:
- case TAG_COMP_IMAGEWIDTH:
- ImageInfo->Thumbnail.width = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_IMAGEHEIGHT:
- case TAG_COMP_IMAGEHEIGHT:
- ImageInfo->Thumbnail.height = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_STRIP_OFFSETS:
- case TAG_JPEG_INTERCHANGE_FORMAT:
- /* accept both formats */
- ImageInfo->Thumbnail.offset = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_STRIP_BYTE_COUNTS:
- if (ImageInfo->FileType == IMAGE_FILETYPE_TIFF_II || ImageInfo->FileType == IMAGE_FILETYPE_TIFF_MM) {
- ImageInfo->Thumbnail.filetype = ImageInfo->FileType;
- } else {
- /* motorola is easier to read */
- ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_TIFF_MM;
- }
- ImageInfo->Thumbnail.size = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_JPEG_INTERCHANGE_FORMAT_LEN:
- if (ImageInfo->Thumbnail.filetype == IMAGE_FILETYPE_UNKNOWN) {
- ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_JPEG;
- ImageInfo->Thumbnail.size = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel);
- }
- break;
-
- }
- } else {
- switch(tag) {
- case TAG_COPYRIGHT:
- /* check for "<photographer> NUL <editor> NUL" */
- if (byte_count>1 && (l=php_strnlen(value_ptr, byte_count)) > 0) {
- if (l<byte_count-1) {
- /* When there are any characters after the first NUL */
- ImageInfo->CopyrightPhotographer = estrdup(value_ptr);
- ImageInfo->CopyrightEditor = estrdup(value_ptr+l+1);
- ImageInfo->Copyright = emalloc(strlen(value_ptr)+strlen(value_ptr+l+1)+3);
- if (!ImageInfo->Copyright) {
- EXIF_ERRLOG_EALLOC
- } else {
- sprintf(ImageInfo->Copyright, "%s, %s", value_ptr, value_ptr+l+1);
- }
- /* format = TAG_FMT_UNDEFINED; this musn't be ASCII */
- /* but we are not supposed to change this */
- /* keep in mind that image_info does not store editor value */
- } else {
- ImageInfo->Copyright = estrdup(value_ptr);
- }
- }
- break;
-
- case TAG_USERCOMMENT:
- ImageInfo->UserCommentLength = exif_process_user_comment(ImageInfo, &(ImageInfo->UserComment), &(ImageInfo->UserCommentEncoding), value_ptr, byte_count TSRMLS_CC);
- break;
-
- case TAG_XP_TITLE:
- case TAG_XP_COMMENTS:
- case TAG_XP_AUTHOR:
- case TAG_XP_KEYWORDS:
- case TAG_XP_SUBJECT:
- tmp_xp = (xp_field_type*)erealloc(ImageInfo->xp_fields.list, sizeof(xp_field_type)*(ImageInfo->xp_fields.count+1));
- if (!tmp_xp) {
- EXIF_ERRLOG_EALLOC
- } else {
- ImageInfo->sections_found |= FOUND_WINXP;
- ImageInfo->xp_fields.list = tmp_xp;
- ImageInfo->xp_fields.count++;
- exif_process_unicode(ImageInfo, &(ImageInfo->xp_fields.list[ImageInfo->xp_fields.count-1]), tag, value_ptr, byte_count TSRMLS_CC);
- }
- break;
-
- case TAG_FNUMBER:
- /* Simplest way of expressing aperture, so I trust it the most.
- (overwrite previously computd value if there is one) */
- ImageInfo->ApertureFNumber = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_APERTURE:
- case TAG_MAXAPERTURE:
- /* More relevant info always comes earlier, so only use this field if we don't
- have appropriate aperture information yet. */
- if (ImageInfo->ApertureFNumber == 0) {
- ImageInfo->ApertureFNumber
- = (float)exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel)*log(2)*0.5);
- }
- break;
-
- case TAG_SHUTTERSPEED:
- /* More complicated way of expressing exposure time, so only use
- this value if we don't already have it from somewhere else.
- SHUTTERSPEED comes after EXPOSURE TIME
- */
- if (ImageInfo->ExposureTime == 0) {
- ImageInfo->ExposureTime
- = (float)(1/exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel)*log(2)));
- }
- break;
- case TAG_EXPOSURETIME:
- ImageInfo->ExposureTime = -1;
- break;
-
- case TAG_COMP_IMAGEWIDTH:
- ImageInfo->ExifImageWidth = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_FOCALPLANEXRES:
- ImageInfo->FocalplaneXRes = exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_SUBJECT_DISTANCE:
- /* Inidcates the distacne the autofocus camera is focused to.
- Tends to be less accurate as distance increases. */
- ImageInfo->Distance = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel);
- break;
-
- case TAG_FOCALPLANEUNITS:
- switch((int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel)) {
- case 1: ImageInfo->FocalplaneUnits = 25.4; break; /* inch */
- case 2:
- /* According to the information I was using, 2 measn meters.
- But looking at the Cannon powershot's files, inches is the only
- sensible value. */
- ImageInfo->FocalplaneUnits = 25.4;
- break;
-
- case 3: ImageInfo->FocalplaneUnits = 10; break; /* centimeter */
- case 4: ImageInfo->FocalplaneUnits = 1; break; /* milimeter */
- case 5: ImageInfo->FocalplaneUnits = .001; break; /* micrometer */
- }
- break;
-
- case TAG_EXIF_IFD_POINTER:
- case TAG_GPS_IFD_POINTER:
- case TAG_INTEROP_IFD_POINTER:
- if (ReadNextIFD) {
- char *SubdirStart;
- int sub_section_index = 0;
- switch(tag) {
- case TAG_EXIF_IFD_POINTER:
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "found EXIF");
-#endif
- ImageInfo->sections_found |= FOUND_EXIF;
- sub_section_index = SECTION_EXIF;
- break;
- case TAG_GPS_IFD_POINTER:
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "found GPS");
-#endif
- ImageInfo->sections_found |= FOUND_GPS;
- sub_section_index = SECTION_GPS;
- break;
- case TAG_INTEROP_IFD_POINTER:
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "found INTEROPERABILITY");
-#endif
- ImageInfo->sections_found |= FOUND_INTEROP;
- sub_section_index = SECTION_INTEROP;
- break;
- }
- SubdirStart = offset_base + php_ifd_get32u(value_ptr, ImageInfo->motorola_intel);
- if (SubdirStart < offset_base || SubdirStart > offset_base+IFDlength) {
- php_error(E_WARNING, "Illegal IFD Pointer");
- return FALSE;
- }
- exif_process_IFD_in_JPEG(ImageInfo, SubdirStart, offset_base, IFDlength, sub_section_index TSRMLS_CC);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "subsection %s done", exif_get_sectionname(sub_section_index));
-#endif
- }
- }
- }
- exif_iif_add_tag(ImageInfo, section_index, exif_get_tagname(tag, tagname, sizeof(tagname)), tag, format, components, value_ptr);
- EFREE_IF(outside);
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_in_JPEG
- * Process one of the nested IFDs directories. */
-static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *DirStart, char *OffsetBase, unsigned IFDlength, int section_index TSRMLS_DC)
-{
- int de;
- int NumDirEntries;
- int NextDirOffset;
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "exif_process_IFD_in_JPEG(x%04X(=%d))", IFDlength, IFDlength);
-#endif
-
- ImageInfo->sections_found |= FOUND_IFD0;
-
- NumDirEntries = php_ifd_get16u(DirStart, ImageInfo->motorola_intel);
-
- if ((DirStart+2+NumDirEntries*12) > (OffsetBase+IFDlength)) {
- php_error(E_WARNING, "Illegal directory size: x%04X + 2 + x%04X*12 = x%04X > x%04X", (int)DirStart+2-(int)OffsetBase, NumDirEntries, (int)DirStart+2+NumDirEntries*12-(int)OffsetBase, IFDlength);
- return FALSE;
- }
-
- for (de=0;de<NumDirEntries;de++) {
- if (!exif_process_IFD_TAG(ImageInfo, DirStart + 2 + 12 * de,
- OffsetBase, IFDlength, section_index, 1 TSRMLS_CC)) {
- return FALSE;
- }
- }
- /*
- * Hack to make it process IDF1 I hope
- * There are 2 IDFs, the second one holds the keys (0x0201 and 0x0202) to the thumbnail
- */
- NextDirOffset = php_ifd_get32u(DirStart+2+12*de, ImageInfo->motorola_intel);
- if (NextDirOffset) {
- /* the next line seems false but here IFDlength means length of all IFDs */
- if (OffsetBase + NextDirOffset < OffsetBase || OffsetBase + NextDirOffset > OffsetBase+IFDlength) {
- php_error(E_WARNING, "Illegal directory offset");
- return FALSE;
- }
- /* That is the IFD for the first thumbnail */
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "expect next IFD to be thumbnail");
-#endif
- if (exif_process_IFD_in_JPEG(ImageInfo, OffsetBase + NextDirOffset, OffsetBase, IFDlength, SECTION_THUMBNAIL TSRMLS_CC)) {
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "thumbnail size: 0x%04X", ImageInfo->Thumbnail.size);
-#endif
- if (ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN
- && ImageInfo->Thumbnail.size
- && ImageInfo->Thumbnail.offset
- && ImageInfo->read_thumbnail
- ) {
- exif_thumbnail_extract(ImageInfo, OffsetBase, IFDlength);
- }
- return TRUE;
- } else {
- return FALSE;
- }
- }
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_process_TIFF_in_JPEG
- Process a TIFF header in a JPEG file
-*/
-static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf, unsigned int length TSRMLS_DC)
-{
- /* set the thumbnail stuff to nothing so we can test to see if they get set up */
- if (memcmp(CharBuf, "II", 2) == 0) {
- ImageInfo->motorola_intel = 0;
- } else if (memcmp(CharBuf, "MM", 2) == 0) {
- ImageInfo->motorola_intel = 1;
- } else {
- php_error(E_WARNING, "Invalid TIFF alignment marker.");
- return;
- }
-
- /* Check the next two values for correctness. */
- if (php_ifd_get16u(CharBuf+2, ImageInfo->motorola_intel) != 0x2a
- || php_ifd_get32u(CharBuf+4, ImageInfo->motorola_intel) != 0x08
- ) {
- php_error(E_WARNING, "Invalid TIFF start (1)");
- return;
- }
-
- ImageInfo->sections_found |= FOUND_IFD0;
- /* First directory starts at offset 8. Offsets starts at 0. */
- exif_process_IFD_in_JPEG(ImageInfo, CharBuf+8, CharBuf, length/*-14*/, SECTION_IFD0 TSRMLS_CC);
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "exif_process_TIFF_in_JPEG, done");
-#endif
-
- /* Compute the CCD width, in milimeters. */
- if (ImageInfo->FocalplaneXRes != 0) {
- ImageInfo->CCDWidth = (float)(ImageInfo->ExifImageWidth * ImageInfo->FocalplaneUnits / ImageInfo->FocalplaneXRes);
- }
-}
-/* }}} */
-
-/* {{{ exif_process_APP1
- Process an JPEG APP1 block marker
- Describes all the drivel that most digital cameras include...
-*/
-static void exif_process_APP1(image_info_type *ImageInfo, char *CharBuf, unsigned int length TSRMLS_DC)
-{
- /* Check the APP1 for Exif Identifier Code */
- static const uchar ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00};
- if (memcmp(CharBuf+2, ExifHeader, 6)) {
- php_error(E_WARNING, "Incorrect APP1 Exif Identifier Code");
- return;
- }
- exif_process_TIFF_in_JPEG(ImageInfo, CharBuf + 8, length - 8 TSRMLS_CC);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "process Exif done");
-#endif
-}
-/* }}} */
-
-/* {{{ exif_process_APP12
- Process an JPEG APP12 block marker used by OLYMPUS
-*/
-static void exif_process_APP12(image_info_type *ImageInfo, char *buffer, unsigned int length)
-{
- int l1, l2=0;
-
- if ((l1 = php_strnlen(buffer+2, length-2)) > 0) {
- exif_iif_add_tag(ImageInfo, SECTION_APP12, "Company", TAG_NONE, TAG_FMT_STRING, l1, buffer+2);
- if (length > 2+l1+1) {
- l2 = php_strnlen(buffer+2+l1+1, length-2-l1+1);
- exif_iif_add_tag(ImageInfo, SECTION_APP12, "Info", TAG_NONE, TAG_FMT_STRING, l2, buffer+2+l1+1);
- }
- }
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "process section APP12 with l1=%d, l2=%d done", l1, l2);
-#endif
-}
-/* }}} */
-
-/* {{{ exif_scan_JPEG_header
- * Parse the marker stream until SOS or EOI is seen; */
-static int exif_scan_JPEG_header(image_info_type *ImageInfo TSRMLS_DC)
-{
- int section, sn;
- int marker = 0, last_marker = M_PSEUDO, comment_correction=1;
- int ll, lh;
- uchar *Data;
- size_t fpos, size, got, itemlen;
- jpeg_sof_info sof_info;
-
- for(section=0;;section++) {
-#ifdef EXIF_DEBUG
- fpos = php_stream_tell(ImageInfo->infile);
- php_error(E_NOTICE, "needing section %d @ 0x%08X", ImageInfo->file.count, fpos);
-#endif
-
- /* get marker byte, swallowing possible padding */
- /* some software does not count the length bytes of COM section */
- /* one company doing so is very much envolved in JPEG... so we accept too */
- if (last_marker==M_COM && comment_correction) {
- comment_correction = 2;
- }
- do {
- if ((marker = php_stream_getc(ImageInfo->infile)) == EOF) {
- EXIF_ERRLOG_CORRUPT
- return FALSE;
- }
- if (last_marker==M_COM && comment_correction>0) {
- if (marker!=0xFF) {
- marker = 0xff;
- comment_correction--;
- } else {
- last_marker = M_PSEUDO; /* stop skipping 0 for M_COM */
- }
- }
- } while (marker == 0xff);
- if (last_marker==M_COM && !comment_correction) {
- php_error(E_NOTICE, "Image has corrupt M_COM section: some software set wrong length information");
- }
- if (last_marker==M_COM && comment_correction)
- return M_EOI; /* ah illegal: char after COM section not 0xFF */
-
-#ifdef EXIF_DEBUG
- fpos = php_stream_tell(ImageInfo->infile);
-#endif
- if (marker == 0xff) {
- /* 0xff is legal padding, but if we get that many, something's wrong. */
- php_error(E_WARNING, "too many padding bytes!");
- return FALSE;
- }
-
- /* Read the length of the section. */
- lh = php_stream_getc(ImageInfo->infile);
- ll = php_stream_getc(ImageInfo->infile);
-
- itemlen = (lh << 8) | ll;
-
- if (itemlen < 2) {
- EXIF_ERRLOG_CORRUPT
- return FALSE;
- }
-
- if ((sn=exif_file_sections_add(ImageInfo, marker, itemlen+1, NULL))==-1) {
- EXIF_ERRLOG_EALLOC
- return FALSE;
- }
- Data = ImageInfo->file.list[sn].data;
-
- /* Store first two pre-read bytes. */
- Data[0] = (uchar)lh;
- Data[1] = (uchar)ll;
-
- got = php_stream_read(ImageInfo->infile, Data+2, itemlen-2); /* Read the whole section. */
- if (got != itemlen-2) {
- php_error(E_WARNING, "error reading from file: got=x%04X(=%d) != itemlen-2=x%04X(=%d)", got, got, itemlen-2, itemlen-2);
- return FALSE;
- }
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "process section(x%02X=%s) @ x%04X + x%04X(=%d)", marker, exif_get_markername(marker), fpos, itemlen, itemlen);
-#endif
- switch(marker) {
- case M_SOS: /* stop before hitting compressed data */
- /* If reading entire image is requested, read the rest of the data. */
- if (ImageInfo->read_all) {
- /* Determine how much file is left. */
- fpos = php_stream_tell(ImageInfo->infile);
- size = ImageInfo->FileSize - fpos;
- if ((sn=exif_file_sections_add(ImageInfo, M_PSEUDO, size, NULL))==-1) {
- EXIF_ERRLOG_EALLOC
- return FALSE;
- }
- Data = ImageInfo->file.list[sn].data;
- got = php_stream_read(ImageInfo->infile, Data, size);
- if (got != size) {
- EXIF_ERRLOG_FILEEOF
- return FALSE;
- }
- }
- return TRUE;
-
- case M_EOI: /* in case it's a tables-only JPEG stream */
- php_error(E_WARNING, "No image in jpeg!");
- return (ImageInfo->sections_found&(~FOUND_COMPUTED)) ? TRUE : FALSE;
-
- case M_COM: /* Comment section */
- exif_process_COM(ImageInfo, (char *)Data, itemlen);
- break;
-
- case M_EXIF:
- if (!(ImageInfo->sections_found&FOUND_IFD0)) {
- /*ImageInfo->sections_found |= FOUND_EXIF;*/
- /* Seen files from some 'U-lead' software with Vivitar scanner
- that uses marker 31 later in the file (no clue what for!) */
- exif_process_APP1(ImageInfo, (char *)Data, itemlen TSRMLS_CC);
- }
- break;
-
- case M_APP12:
- exif_process_APP12(ImageInfo, (char *)Data, itemlen);
- break;
-
-
- case M_SOF0:
- case M_SOF1:
- case M_SOF2:
- case M_SOF3:
- case M_SOF5:
- case M_SOF6:
- case M_SOF7:
- case M_SOF9:
- case M_SOF10:
- case M_SOF11:
- case M_SOF13:
- case M_SOF14:
- case M_SOF15:
- exif_process_SOFn(Data, marker, &sof_info);
- ImageInfo->Width = sof_info.width;
- ImageInfo->Height = sof_info.height;
- if (sof_info.num_components == 3) {
- ImageInfo->IsColor = 1;
- } else {
- ImageInfo->IsColor = 0;
- }
- break;
- default:
- /* skip any other marker silently. */
- break;
- }
-
- /* keep track of last marker */
- last_marker = marker;
- }
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "exif_scan_JPEG_header, done");
-#endif
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_scan_thumbnail
- * scan JPEG in thumbnail (memory) */
-static int exif_scan_thumbnail(image_info_type *ImageInfo)
-{
- uchar c, *data = ImageInfo->Thumbnail.data;
- int n, marker;
- size_t length=2, pos=0;
- jpeg_sof_info sof_info;
-
- if (!data) {
- return FALSE; /* nothing to do here */
- }
- if (memcmp(data, "\xFF\xD8\xFF", 3)) {
- if (!ImageInfo->Thumbnail.width && !ImageInfo->Thumbnail.height) {
- php_error(E_WARNING, "Thumbnail is not a jpeg image");
- }
- return FALSE;
- }
- for (;;) {
- pos += length;
- if (pos>=ImageInfo->Thumbnail.size)
- return FALSE;
- c = data[pos++];
- if (pos>=ImageInfo->Thumbnail.size)
- return FALSE;
- if (c != 0xFF) {
- return FALSE;
- }
- n = 8;
- while ((c = data[pos++]) == 0xFF && n--) {
- if (pos+3>=ImageInfo->Thumbnail.size)
- return FALSE;
- /* +3 = pos++ of next check when reaching marker + 2 bytes for length */
- }
- if (c == 0xFF)
- return FALSE;
- marker = c;
- length = php_jpg_get16(data+pos);
- if (pos+length>=ImageInfo->Thumbnail.size) {
- return FALSE;
- }
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Thumnail: process section(x%02X=%s) @ x%04X + x%04X", marker, exif_get_markername(marker), pos, length);
-#endif
- switch (marker) {
- case M_SOF0:
- case M_SOF1:
- case M_SOF2:
- case M_SOF3:
- case M_SOF5:
- case M_SOF6:
- case M_SOF7:
- case M_SOF9:
- case M_SOF10:
- case M_SOF11:
- case M_SOF13:
- case M_SOF14:
- case M_SOF15:
- /* handle SOFn block */
- exif_process_SOFn(data+pos, marker, &sof_info);
- ImageInfo->Thumbnail.height = sof_info.height;
- ImageInfo->Thumbnail.width = sof_info.width;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Thumnail: size: %d * %d", sof_info.width, sof_info.height);
-#endif
- return TRUE;
-
- case M_SOS:
- case M_EOI:
- php_error(E_WARNING, "could not compute size of thumbnail");
- return FALSE;
- break;
-
- default:
- /* just skip */
- break;
- }
- }
-
- php_error(E_WARNING, "could not compute size of thumbnail");
- return FALSE;
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_in_TIFF
- * Parse the TIFF header; */
-static int exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offset, int section_index TSRMLS_DC)
-{
- int i, sn, num_entries, sub_section_index = 0;
- unsigned char *dir_entry;
- size_t ifd_size, dir_size, entry_offset, next_offset, entry_length, entry_value=0, fgot;
- int entry_tag , entry_type;
-
- if (ImageInfo->FileSize >= dir_offset+2) {
- if ((sn=exif_file_sections_add(ImageInfo, M_PSEUDO, 2, NULL))==-1) {
- EXIF_ERRLOG_EALLOC
- return FALSE;
- }
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, 2);
-#endif
- php_stream_seek(ImageInfo->infile, dir_offset, SEEK_SET); /* we do not know the order of sections */
- php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data, 2);
- num_entries = php_ifd_get16u(ImageInfo->file.list[sn].data, ImageInfo->motorola_intel);
- dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/;
- if (ImageInfo->FileSize >= dir_offset+dir_size) {
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X), IFD entries(%d)", ImageInfo->FileSize, dir_offset+2, dir_size-2, num_entries);
-#endif
- if (exif_file_sections_realloc(ImageInfo, sn, dir_size)) {
- return FALSE;
- }
- php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data+2, dir_size-2);
- /*php_error(E_NOTICE, "Dump: %s", exif_char_dump(ImageInfo->file.list[sn].data, dir_size, 1));*/
- next_offset = php_ifd_get32u(ImageInfo->file.list[sn].data + dir_size - 4, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read from TIFF done, next offset x%04X", next_offset);
-#endif
- /* now we have the directory we can look how long it should be */
- ifd_size = dir_size;
- for(i=0;i<num_entries;i++) {
- dir_entry = ImageInfo->file.list[sn].data+2+i*12;
- entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel);
- entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);
- if (entry_type > NUM_FORMATS) {
- php_error(E_WARNING, "Error in TIFF: Illegal format, suppose bytes");
- entry_type = TAG_FMT_BYTE;
- }
- entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel) * php_tiff_bytes_per_format[entry_type];
- if (entry_length <= 4) {
- switch(entry_type) {
- case TAG_FMT_USHORT:
- entry_value = php_ifd_get16u(dir_entry+8, ImageInfo->motorola_intel);
- break;
- case TAG_FMT_SSHORT:
- entry_value = php_ifd_get16s(dir_entry+8, ImageInfo->motorola_intel);
- break;
- case TAG_FMT_ULONG:
- entry_value = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
- break;
- case TAG_FMT_SLONG:
- entry_value = php_ifd_get32s(dir_entry+8, ImageInfo->motorola_intel);
- break;
- }
- switch(entry_tag) {
- case TAG_IMAGEWIDTH:
- case TAG_COMP_IMAGEWIDTH:
- ImageInfo->Width = entry_value;
- break;
- case TAG_IMAGEHEIGHT:
- case TAG_COMP_IMAGEHEIGHT:
- ImageInfo->Height = entry_value;
- break;
- case TAG_PHOTOMETRIC_INTERPRETATION:
- switch (entry_value) {
- case PMI_BLACK_IS_ZERO:
- case PMI_WHITE_IS_ZERO:
- case PMI_TRANSPARENCY_MASK:
- ImageInfo->IsColor = 0;
- break;
- case PMI_RGB:
- case PMI_PALETTE_COLOR:
- case PMI_SEPARATED:
- case PMI_YCBCR:
- case PMI_CIELAB:
- ImageInfo->IsColor = 1;
- break;
- }
- break;
- }
- } else {
- entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
- /* if entry needs expading ifd cache and entry is at end of current ifd cache. */
- /* otherwise there may be huge holes between two entries */
- if (entry_offset + entry_length > dir_offset + ifd_size
- && entry_offset == dir_offset + ifd_size) {
- ifd_size = entry_offset + entry_length - dir_offset;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Correcting: 0x%08X + 0x%08X - 0x%08X", entry_offset, entry_length, dir_offset);
-#endif
- }
- }
- }
- if (ImageInfo->FileSize >= dir_offset + ImageInfo->file.list[sn].size) {
- if (ifd_size > dir_size) {
- if (dir_offset + ifd_size > ImageInfo->FileSize) {
- php_error(E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size);
- return FALSE;
- }
- if (exif_file_sections_realloc(ImageInfo, sn, ifd_size)) {
- return FALSE;
- }
- /* read values not stored in directory itself */
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read from TIFF: filesize(x%04X), IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size);
-#endif
- php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data+dir_size, ifd_size-dir_size);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read from TIFF, done");
-#endif
- }
- /* now process the tags */
- for(i=0;i<num_entries;i++) {
- dir_entry = ImageInfo->file.list[sn].data+2+i*12;
- entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel);
- entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);
- /*entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel);*/
- if (entry_tag == TAG_EXIF_IFD_POINTER ||
- entry_tag == TAG_INTEROP_IFD_POINTER ||
- entry_tag == TAG_GPS_IFD_POINTER
- ) {
- switch(entry_tag) {
- case TAG_EXIF_IFD_POINTER:
- ImageInfo->sections_found |= FOUND_EXIF;
- sub_section_index = SECTION_EXIF;
- break;
- case TAG_GPS_IFD_POINTER:
- ImageInfo->sections_found |= FOUND_GPS;
- sub_section_index = SECTION_GPS;
- break;
- case TAG_INTEROP_IFD_POINTER:
- ImageInfo->sections_found |= FOUND_INTEROP;
- sub_section_index = SECTION_INTEROP;
- break;
- }
- entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Next IFD %s at x%04X", exif_get_sectionname(sub_section_index), entry_offset);
-#endif
- exif_process_IFD_in_TIFF(ImageInfo, entry_offset, sub_section_index TSRMLS_CC);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Next IFD %s done", exif_get_sectionname(sub_section_index));
-#endif
- } else {
- if (!exif_process_IFD_TAG(ImageInfo, dir_entry,
- ImageInfo->file.list[sn].data-dir_offset,
- ifd_size, section_index, 0 TSRMLS_CC)) {
- return FALSE;
- }
- }
- }
- if (next_offset && section_index != SECTION_THUMBNAIL) {
- /* this should be a thumbnail IFD */
- /* the thumbnail itself is stored at Tag=StripOffsets */
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read next IFD (THUMBNAIL) at x%04X", next_offset);
-#endif
- exif_process_IFD_in_TIFF(ImageInfo, next_offset, SECTION_THUMBNAIL TSRMLS_CC);
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
-#endif
- if (ImageInfo->Thumbnail.offset && ImageInfo->Thumbnail.size && ImageInfo->read_thumbnail) {
- ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size);
- if (!ImageInfo->Thumbnail.data) {
- EXIF_ERRLOG_EALLOC
- } else {
- php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET);
- fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
- if (fgot < ImageInfo->Thumbnail.size) {
- EXIF_ERRLOG_THUMBEOF
- }
- exif_thumbnail_build(ImageInfo);
- }
- }
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Read next IFD (THUMBNAIL) done");
-#endif
- }
- return TRUE;
- } else {
- php_error(E_WARNING, "2 Error in TIFF: filesize(x%04X) less than size of IFD(x%04X)", ImageInfo->FileSize, dir_offset+ImageInfo->file.list[sn].size);
- return FALSE;
- }
- } else {
- php_error(E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+dir_size);
- return FALSE;
- }
- } else {
- php_error(E_WARNING, "Error in TIFF: filesize(x%04X) less than start of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+2);
- return FALSE;
- }
-}
-/* }}} */
-
-/* {{{ exif_scan_FILE_header
- * Parse the marker stream until SOS or EOI is seen; */
-static int exif_scan_FILE_header(image_info_type *ImageInfo TSRMLS_DC)
-{
- unsigned char file_header[8];
- int ret = FALSE;
-
- ImageInfo->FileType = IMAGE_FILETYPE_UNKNOWN;
-
- if (ImageInfo->FileSize >= 2) {
- php_stream_seek(ImageInfo->infile, 0, SEEK_SET);
- php_stream_read(ImageInfo->infile, file_header, 2);
- if ((file_header[0]==0xff) && (file_header[1]==M_SOI)) {
- ImageInfo->FileType = IMAGE_FILETYPE_JPEG;
- if (exif_scan_JPEG_header(ImageInfo TSRMLS_CC)) {
- ret = TRUE;
- } else {
- php_error(E_WARNING, "Invalid JPEG file: '%s'", ImageInfo->FileName);
- }
- } else if (ImageInfo->FileSize >= 8) {
- php_stream_read(ImageInfo->infile, file_header+2, 6);
- if (!memcmp(file_header, "II\x2A\x00", 4)) {
- ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II;
- ImageInfo->motorola_intel = 0;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "File(%s) has TIFF/II format", ImageInfo->FileName);
-#endif
- ImageInfo->sections_found |= FOUND_IFD0;
- if (exif_process_IFD_in_TIFF(ImageInfo,
- php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
- SECTION_IFD0 TSRMLS_CC)) {
- ret = TRUE;
- } else {
- php_error(E_WARNING, "Invalid TIFF file: '%s'", ImageInfo->FileName);
- }
- }
- else
- if (!memcmp(file_header, "MM\x00\x2a", 4)) {
- ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM;
- ImageInfo->motorola_intel = 1;
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "File(%s) has TIFF/MM format", ImageInfo->FileName);
-#endif
- ImageInfo->sections_found |= FOUND_IFD0;
- if (exif_process_IFD_in_TIFF(ImageInfo,
- php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
- SECTION_IFD0 TSRMLS_CC)) {
- ret = TRUE;
- } else {
- php_error(E_WARNING, "Invalid TIFF file: '%s'", ImageInfo->FileName);
- }
- } else {
- php_error(E_WARNING, "File(%s) not supported", ImageInfo->FileName);
- return FALSE;
- }
- }
- } else {
- php_error(E_WARNING, "File(%s) to small (%d)", ImageInfo->FileName, ImageInfo->FileSize);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ exif_discard_imageinfo
- Discard data scanned by exif_read_file.
-*/
-static int exif_discard_imageinfo(image_info_type *ImageInfo)
-{
- int i;
-
- EFREE_IF(ImageInfo->FileName);
- EFREE_IF(ImageInfo->UserComment);
- EFREE_IF(ImageInfo->UserCommentEncoding);
- EFREE_IF(ImageInfo->Copyright);
- EFREE_IF(ImageInfo->CopyrightPhotographer);
- EFREE_IF(ImageInfo->CopyrightEditor);
- EFREE_IF(ImageInfo->Thumbnail.data);
- EFREE_IF(ImageInfo->encode_unicode);
- EFREE_IF(ImageInfo->decode_unicode_be);
- EFREE_IF(ImageInfo->decode_unicode_le);
- EFREE_IF(ImageInfo->encode_jis);
- EFREE_IF(ImageInfo->decode_jis_be);
- EFREE_IF(ImageInfo->decode_jis_le);
- for (i=0; i<ImageInfo->xp_fields.count; i++) {
- EFREE_IF(ImageInfo->xp_fields.list[i].value);
- }
- EFREE_IF(ImageInfo->xp_fields.list);
- for (i=0; i<SECTION_COUNT; i++) {
- exif_iif_free(ImageInfo, i);
- }
- exif_file_sections_free(ImageInfo);
- memset(ImageInfo, 0, sizeof(*ImageInfo));
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_read_file
- */
-static int exif_read_file(image_info_type *ImageInfo, char *FileName, int read_thumbnail, int read_all TSRMLS_DC)
-{
- int ret;
- struct stat st;
-
- /* Start with an empty image information structure. */
- memset(ImageInfo, 0, sizeof(*ImageInfo));
-
- ImageInfo->motorola_intel = -1; /* flag as unknown */
-
- ImageInfo->infile = php_stream_open_wrapper(FileName, "rb", STREAM_MUST_SEEK|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL);
- if (!ImageInfo->infile) {
- php_error(E_WARNING, "Unable to open '%s'", FileName);
- return FALSE;
- }
-
- ImageInfo->FileName = php_basename(FileName, strlen(FileName), NULL, 0);
- ImageInfo->read_thumbnail = read_thumbnail;
- ImageInfo->read_all = read_all;
- ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_UNKNOWN;
-
- ImageInfo->encode_unicode = estrdup(EXIF_G(encode_unicode));
- ImageInfo->decode_unicode_be = estrdup(EXIF_G(decode_unicode_be));
- ImageInfo->decode_unicode_le = estrdup(EXIF_G(decode_unicode_le));
- ImageInfo->encode_jis = estrdup(EXIF_G(encode_jis));
- ImageInfo->decode_jis_be = estrdup(EXIF_G(decode_jis_be));
- ImageInfo->decode_jis_le = estrdup(EXIF_G(decode_jis_le));
-
- if (php_stream_is(ImageInfo->infile, PHP_STREAM_IS_STDIO)) {
- if (VCWD_STAT(FileName, &st) >= 0) {
- /* Store file date/time. */
- ImageInfo->FileDateTime = st.st_mtime;
- ImageInfo->FileSize = st.st_size;
- /*php_error(E_NOTICE, "open stream is file: %d", ImageInfo->FileSize);*/
- }
- } else {
- if (!ImageInfo->FileSize) {
- php_stream_seek(ImageInfo->infile, 0, SEEK_END);
- ImageInfo->FileSize = php_stream_tell(ImageInfo->infile);
- php_stream_seek(ImageInfo->infile, 0, SEEK_SET);
- }
- }
-
- /* Scan the JPEG headers. */
- ret = exif_scan_FILE_header(ImageInfo TSRMLS_CC);
-
- php_stream_close(ImageInfo->infile);
- return ret;
-}
-/* }}} */
-
-/* {{{ proto array|false exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])
- Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails */
-PHP_FUNCTION(exif_read_data)
-{
- pval **p_name, **p_sections_needed, **p_sub_arrays, **p_read_thumbnail, **p_read_all;
- int i, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, read_thumbnail=0, read_all=0;
- image_info_type ImageInfo;
- char tmp[64], *sections_str, *s;
-
- memset(&ImageInfo, 0, sizeof(ImageInfo));
-
- if ((ac < 1 || ac > 4) || zend_get_parameters_ex(ac, &p_name, &p_sections_needed, &p_sub_arrays, &p_read_thumbnail, &p_read_all) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(p_name);
-
- if(ac >= 2) {
- convert_to_string_ex(p_sections_needed);
- sections_str = emalloc(strlen(Z_STRVAL_PP(p_sections_needed))+3);
- if (!sections_str) {
- EXIF_ERRLOG_EALLOC
- RETURN_FALSE;
- }
- sprintf(sections_str, ",%s,", Z_STRVAL_PP(p_sections_needed));
- /* sections_str DOES start with , and SPACES are NOT allowed in names */
- s = sections_str;
- while(*++s) {
- if(*s==' ') {
- *s = ',';
- }
- }
- for (i=0; i<SECTION_COUNT; i++) {
- sprintf(tmp, ",%s,", exif_get_sectionname(i));
- if (strstr(sections_str, tmp)) {
- sections_needed |= 1<<i;
- }
- }
- EFREE_IF(sections_str);
- /* now see what we need */
-#ifdef EXIF_DEBUG
- sections_str = exif_get_sectionlist(sections_needed);
- if (!sections_str) {
- RETURN_FALSE;
- }
- php_error(E_NOTICE, "Sections needed: %s", sections_str[0] ? sections_str : "None");
- EFREE_IF(sections_str);
-#endif
- }
- if(ac >= 3) {
- convert_to_long_ex(p_sub_arrays);
- sub_arrays = Z_LVAL_PP(p_sub_arrays);
- }
- if(ac >= 4) {
- convert_to_long_ex(p_read_thumbnail);
- read_thumbnail = Z_LVAL_PP(p_read_thumbnail);
- }
- if(ac >= 5) {
- convert_to_long_ex(p_read_all);
- read_all = Z_LVAL_PP(p_read_all);
- }
- /* parameters 3,4 will be working in later versions.... */
- read_all = 0; /* just to make function work for 4.2 tree */
-
- ret = exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), read_thumbnail, read_all TSRMLS_CC);
-
- sections_str = exif_get_sectionlist(ImageInfo.sections_found);
-
-#ifdef EXIF_DEBUG
- if (sections_str)
- php_error(E_NOTICE, "sections found: %s", sections_str[0] ? sections_str : "None");
-#endif
-
- ImageInfo.sections_found |= FOUND_COMPUTED;/* do not inform about in debug*/
-
- if (ret==FALSE || (sections_needed && !(sections_needed&ImageInfo.sections_found)) || array_init(return_value) == FAILURE) {
- /* array_init must be checked at last! otherwise the array must be freed if a later test fails. */
- exif_discard_imageinfo(&ImageInfo);
- EFREE_IF(sections_str);
- RETURN_FALSE;
- }
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "generate section FILE");
-#endif
-
- /* now we can add our information */
- exif_iif_add_str(&ImageInfo, SECTION_FILE, "FileName", ImageInfo.FileName);
- exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileDateTime", ImageInfo.FileDateTime);
- exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileSize", ImageInfo.FileSize);
- exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileType", ImageInfo.FileType);
- exif_iif_add_str(&ImageInfo, SECTION_FILE, "SectionsFound", sections_str ? sections_str : "NONE");
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "generate section COMPUTED");
-#endif
-
- if (ImageInfo.Width>0 && ImageInfo.Height>0) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "html", "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height);
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Height", ImageInfo.Height);
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Width", ImageInfo.Width);
- }
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "IsColor", ImageInfo.IsColor);
- if (ImageInfo.motorola_intel != -1) {
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "ByteOrderMotorola", ImageInfo.motorola_intel);
- }
- if (ImageInfo.FocalLength) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocalLength", "%4.1fmm", ImageInfo.FocalLength);
- if(ImageInfo.CCDWidth) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "35mmFocalLength", "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5));
- }
- }
- if(ImageInfo.CCDWidth) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "CCDWidth", "%dmm", (int)ImageInfo.CCDWidth);
- }
- if(ImageInfo.ExposureTime>0) {
- if(ImageInfo.ExposureTime <= 0.5) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3f s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime));
- } else {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3f s", ImageInfo.ExposureTime);
- }
- }
- if(ImageInfo.ApertureFNumber) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ApertureFNumber", "f/%.1f", ImageInfo.ApertureFNumber);
- }
- if(ImageInfo.Distance) {
- if(ImageInfo.Distance<0) {
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "FocusDistance", "Infinite");
- } else {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocusDistance", "%0.2fm", ImageInfo.Distance);
- }
- }
- if (ImageInfo.UserComment) {
- exif_iif_add_buffer(&ImageInfo, SECTION_COMPUTED, "UserComment", ImageInfo.UserCommentLength, ImageInfo.UserComment);
- if (ImageInfo.UserCommentEncoding && strlen(ImageInfo.UserCommentEncoding)) {
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "UserCommentEncoding", ImageInfo.UserCommentEncoding);
- }
- }
-
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright", ImageInfo.Copyright);
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright.Photographer", ImageInfo.CopyrightPhotographer);
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright.Editor", ImageInfo.CopyrightEditor);
-
- for (i=0; i<ImageInfo.xp_fields.count; i++) {
- exif_iif_add_str(&ImageInfo, SECTION_WINXP, exif_get_tagname(ImageInfo.xp_fields.list[i].tag, NULL, 0), ImageInfo.xp_fields.list[i].value);
- }
- if (ImageInfo.Thumbnail.size) {
- if (read_thumbnail) {
- /* not exif_iif_add_str : this is a buffer */
- exif_iif_add_tag(&ImageInfo, SECTION_THUMBNAIL, "THUMBNAIL", TAG_NONE, TAG_FMT_UNDEFINED, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.data);
- }
- if (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) {
- /* try to evaluate if thumbnail data is present */
- exif_scan_thumbnail(&ImageInfo);
- }
- }
- if (ImageInfo.Thumbnail.width && ImageInfo.Thumbnail.height) {
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Thumbnail.Height", ImageInfo.Thumbnail.height);
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Thumbnail.Width", ImageInfo.Thumbnail.width);
- }
- EFREE_IF(sections_str);
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "adding image infos");
-#endif
-
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_FILE);
- add_assoc_image_info(return_value, 1, &ImageInfo, SECTION_COMPUTED);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_ANY_TAG);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_IFD0);
- add_assoc_image_info(return_value, 1, &ImageInfo, SECTION_THUMBNAIL);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_COMMENT);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_EXIF);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_GPS);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_INTEROP);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_FPIX);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_APP12);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_WINXP);
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Discarding info");
-#endif
-
- exif_discard_imageinfo(&ImageInfo);
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "read_exif_data done");
-#endif
-}
-/* }}} */
-
-/* {{{ proto string|false exif_thumbnail(string filename [, &width, &height])
- Reads the embedded thumbnail */
-PHP_FUNCTION(exif_thumbnail)
-{
- zval **p_name, **p_width, **p_height;
- int ret, arg_c = ZEND_NUM_ARGS();
- image_info_type ImageInfo;
-
- memset(&ImageInfo, 0, sizeof(ImageInfo));
-
- if ((arg_c != 1 && arg_c != 3) || zend_get_parameters_ex(arg_c, &p_name, &p_width, &p_height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(p_name);
- if (arg_c == 3) {
- zval_dtor(*p_width);
- zval_dtor(*p_height);
- }
-
- ret = exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), 1, 0 TSRMLS_CC);
- if (ret==FALSE) {
- exif_discard_imageinfo(&ImageInfo);
- RETURN_FALSE;
- }
-
- if (!ImageInfo.Thumbnail.data || !ImageInfo.Thumbnail.size) {
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "No thumbnail data %d %d, %d x %d", ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.width, ImageInfo.Thumbnail.height);
-#endif
- if (arg_c == 3) {
- ZVAL_LONG(*p_width, ImageInfo.Thumbnail.width);
- ZVAL_LONG(*p_height, ImageInfo.Thumbnail.height);
- }
- exif_discard_imageinfo(&ImageInfo);
- RETURN_FALSE;
- }
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Returning thumbnail(%d)", ImageInfo.Thumbnail.size);
-#endif
-
- ZVAL_STRINGL(return_value, ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, 1);
- if (arg_c == 3) {
- if (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) {
- exif_scan_thumbnail(&ImageInfo);
- }
- ZVAL_LONG(*p_width, ImageInfo.Thumbnail.width);
- ZVAL_LONG(*p_height, ImageInfo.Thumbnail.height);
- }
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "Discarding info");
-#endif
-
- exif_discard_imageinfo(&ImageInfo);
-
-#ifdef EXIF_DEBUG
- php_error(E_NOTICE, "exif_thumbnail done");
-#endif
-}
-/* }}} */
-
-/* {{{ proto long exif_imagetype(string imagefile)
- Get the type of an image */
-PHP_FUNCTION(exif_imagetype)
-{
- zval **arg1;
- php_stream * stream;
- int itype = 0;
-
- if (ZEND_NUM_ARGS() != 1)
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_ex(1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb", IGNORE_PATH|ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- itype = itype = php_getimagetype(stream, NULL TSRMLS_CC);
-
- php_stream_close(stream);
-
- if (itype == IMAGE_FILETYPE_UNKNOWN) {
- RETURN_FALSE;
- } else {
- ZVAL_LONG(return_value, itype);
- }
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 tw=78 fdm=marker
- * vim<600: sw=4 ts=4 tw=78
- */
-
diff --git a/ext/exif/exif.dsp b/ext/exif/exif.dsp
deleted file mode 100644
index 2c8bd86588..0000000000
--- a/ext/exif/exif.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="exif" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=exif - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "exif.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "exif.mak" CFG="exif - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "exif - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "exif - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "exif - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /D "LIBZEND_EXPORTS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_exif.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "exif - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /D "LIBZEND_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_exif.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "exif - Win32 Release_TS"
-# Name "exif - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\exif.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_exif.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/exif/php_exif.h b/ext/exif/php_exif.h
deleted file mode 100644
index c15728414e..0000000000
--- a/ext/exif/php_exif.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#if HAVE_EXIF
-extern zend_module_entry exif_module_entry;
-#define phpext_exif_ptr &exif_module_entry
-
-PHP_FUNCTION(exif_read_data);
-PHP_FUNCTION(exif_tagname);
-PHP_FUNCTION(exif_thumbnail);
-PHP_FUNCTION(exif_imagetype);
-#endif
diff --git a/ext/exif/test.php b/ext/exif/test.php
deleted file mode 100644
index 907b9ea080..0000000000
--- a/ext/exif/test.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- include 'test.txt';
-?> \ No newline at end of file
diff --git a/ext/exif/test.txt b/ext/exif/test.txt
deleted file mode 100644
index 1c12b509e6..0000000000
--- a/ext/exif/test.txt
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-
-/* Test script for PHP module ext/exif
- *
- * (c) Marcus Boerger, 2002
- *
- * $Id$
- *
- * Rename the file to test.php and read the instructions. If the
- * script cannot be executed or does not generate any output check
- * you error log. In most cases this would mean you found an error
- * if the rest of your php environment works fine.
- *
- * The original version of module exif has many errors and mostly
- * fails on executing this script.
- */
-
-$file = array_key_exists('thumbnail',$_REQUEST) ? $_REQUEST['thumbnail'] : '';
-//$file = '/t/temp/kodak-dc4800.tif';
-//$file = '/t/temp/canon-ixus.jpg';
-//$file = '/t/temp/test2.jpg';
-if ( $file) {
- $image = exif_thumbnail($file);
- if ( $image!==false) {
- @Header("content-type: image/jpeg");
- echo $image;
- } else {
- echo "<html><body><table>\n";
- echo "Thumbnail could not be extracted.\n";
- echo "</table></body></html>";
- }
- die();
-}
-
-if ( !defined('IMAGETYPE_GIF')) define('IMAGETYPE_GIF',1);
-if ( !defined('IMAGETYPE_JPEG')) define('IMAGETYPE_JPEG',2);
-if ( !defined('IMAGETYPE_TIFF_II')) define('IMAGETYPE_TIFF_II',7);
-if ( !defined('IMAGETYPE_TIFF_MM')) define('IMAGETYPE_TIFF_MM',8);
-
-$possible = array();
-
-/****************************************************************************/
-// message function is used for debugging purpose: just to se what happens
-function message($msg) {
- error_log($msg,0);
- echo "$msg\n";
-}
-
-function error_msg() {
- $ret = '<b style="color:green">O.K.</b>';
- if (array_key_exists('php_errormsg',$GLOBALS) && strlen($GLOBALS['php_errormsg'])) {
- $ret = '<b style="color:red">'.$GLOBALS['php_errormsg'].'</b>';
- $GLOBALS['php_errormsg'] = '';
- }
- return $ret;
-}
-
-/****************************************************************************/
-// private to function search_file()
-function _search_file($root,&$possible,$path='') {
- $sub = array();
- $cnt = 0;
- $type= false;
-
- //error_log("search_file($root,$path)",0);
- if ($dir = @opendir($root.$path.'/')) {
- while (($found = @readdir($dir)) !== false) {
- $type = @filetype($root.$path.'/'.$found);
- //error_log("search_file($root$path):$type=$found",0);
- switch( $type) {
- case 'file':
- $pos = strrpos($found,'.');
- if ( function_exists('exif_imagetype')) {
- $type = exif_imagetype($root.$path.'/'.$found);
- } else {
- if ( $pos!==false) {
- $type = GetImageSize($root.$path.'/'.$found);
- if ( is_array($type)) {
- $type = $type[2];
- } else {
- $type = false;
- }
- } else $type = false;
- }
- if ( $type!==false)
- {
- $possible[] = array('file'=>$root.$path.'/'.$found, 'type'=>$type);
- //error_log("search_file($root$path) add:$path/$found",0);
- if ( ($cnt=count($possible)) % 100 == 0) {
- error_log("exif test page - counting files: $cnt",0);
- }
- }
- break;
- case 'dir':
- if ( $found!='.' && $found!='..') {
- $sub[count($sub)] = $found;
- }
- break;
- }
- }
- @closedir($dir);
- foreach( $sub as $idx => $found) {
- _search_file($root,$possible,$path.'/'.$found);
- }
- }
-}
-
-/****************************************************************************/
-// function: search_file($file,$ext)
-//
-// Searches for $file in document tree. The path is ignored.
-//
-function search_file() {
- global $argc, $argv;
- $possible = array();
-
- if ( $argc > 1) {
- $path = $argv[1];
- } else if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) {
- $path = $_SERVER['SCRIPT_FILENAME'];
- //error_log("SCRIPT_FILENAME($path)",0);
- } else {
- $path = $argv[0];
- //error_log("argv($path)",0);
- }
- if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p);
- if ( ($p=strrpos($path,'/')) /*< strlen($path)-1*/) $path = substr($path,0,$p);
- error_log("exif test page - counting files in $path");
- _search_file($path,$possible);
- error_log("exif test page - counting files: ".count($possible)." done.",0);
- return $possible;
-}
-
-/****************************************************************************/
-// function: search_file($file,$ext)
-//
-// Searches for $file in document tree. The path is ignored.
-//
-function AddInfo($Name,$Value,$highlight=0) {
- if (is_array($Value)) $Value = 'Array: ('.join(',',$Value).')';
- $Value = nl2br($Value);
- if ( $highlight) {
- $Name = "<th>$Name</th>";
- } else {
- $Name = "<td>$Name</td>";
- }
- return "<tr>$Name<td>$Value&nbsp;</td></tr>\n";
-}
-
-$possible = search_file();
-
-$title = "PHP module exif test page";
-
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
-<html>
-<head>
-<title><?=$title ?></title>
-<style type="text/css">
-body {
- font-size: 12pt;
-}
-h1 {
- font-size: 20pt;
- font-weight:bold;
-}
-h2 {
- font-size: 16pt;
- font-weight:bold;
-}
-th {
- text-align: left;
-}
-ul {
- margin-bottom: 6pt;
-}
-</style>
-</head>
-<body>
-<h1><?=$title ?></h1>
-<h2>(c) Marcus B&ouml;rger, 2002</h2>
-</p>
-<p>
-Images taken from <a href="http://www.exif.org">www.exif.org</a>,
-<a href="http://marcus-boerger.de">marcus-boerger.de</a>
-all rights reserved by their authors and artists, see exif headers.
-The files can be downloaded <a href="http://marcus-boerger.de/php/ext/exif/test/">here</a>.
-To start the test you simple have to put all images into the same directory as this script.
-The test will work with all files in that directory and all subdirectories. To test private
-images just put them into that directory.
-</p>
-<p>
-Youmay take a look at the test <a href="http://marcus-boerger.de/php/ext/exif/test.txt">source here</a>.
-</p>
-<p>
-This test just prooves that some exif headers can be scanned.
-If all files produce a header in output the module might be o.k.
-</p>
-<p>
-What to look for in detail:
-</p>
-<ul>
-<li>kodak-dc4800-plus-acdsee.jpg
- <ul>
- <li>should provide a <b>long</b> comment 'by marcus b&ouml;rger&lt;%04i&gt;'*n</li>
- <li>this file returns an array but it also produces an errormessage because ACDSee destroys
- the integrity of IFD directory (size of directory and offsets of entries following any
- edited entry maybe wrong).
- </li>
- </ul>
-</li>
-<li>hp-photosmart.jpg
- <ul>
- <li>should provide a <b>two line</b> copyright notice</li>
- </ul>
-</li>
-<li>olympus-d320l
- <ul>
- <li>should provide an <b>APP12</b> infoset</li>
- </ul>
-</li>
-<li>unknown.jpg
- <ul>
- <li>should provide an <b>empty</b> comment, this is a comment section and not an IFD0, EXIF or GPS section</li>
- </ul>
-</li>
-<li>some images
- <ul>
- <li>have empty fields, that is the tag is present but no data is stored</li>
- </ul>
-</li>
-</ul>
-<h2>function exif_tagname</h2>
-<table border='1' cellspacing='0' cellpadding='3' summary="EXIF headernames">
-<?php
-if (function_exists('exif_tagname')) {
-?>
-<tr><td>ImageWidth</td><td><?=@exif_tagname(0x0100)?></td><td><?=error_msg()?></td></tr>
-<tr><td>JPEGProc</td><td><?=@exif_tagname(0x0200)?></td><td><?=error_msg()?></td></tr>
-<tr><td>SceneType</td><td><?=@exif_tagname(0xA301)?></td><td><?=error_msg()?></td></tr>
-<tr><td>false</td><td><?=@exif_tagname(0x0000)===false?'false':'value'?></td><td><?=error_msg()?></td></tr>
-<?php
-} else {
- echo "<tr><td>function exif_tagname is not supported</td></tr>\n";
-}
-?>
-</table>
-<br clear="all">
-<h2>function exif_read_data for <?=count($possible)?> images</h2>
-
-<?php
-$check_getimagesize = false;
-$check_exif_thumbnail = true;
-$check_exif_read_data = false;
-$fast_output = false;
-if (function_exists('exif_read_data')) {
- $num = 0;
- echo "<table border='1' cellspacing='0' cellpadding='3' summary='function results'>\n";
- $tab2 = "";//"<table border='1' cellspacing='0' cellpadding='3' summary='EXIF information'>\n";
- $types = array('','GIF','JPEG','PNG','SWF','PSD','BMP','TIFF_II','TIFF_MM','JPC','JP2','JPX','JB2');
- foreach($possible as $idx => $file) {
- $type = $file['type'];
- $file = $file['file'];
- if ( !((++$num)%100)) error_log("exif test page - checking files: $num",0);
- $error = '';
- $len = 2;
- $rows = 1
- + ($check_getimagesize ? 1 : 0)
- + ($check_exif_thumbnail ? 1 : 0)
- + ($check_exif_read_data ? 1 : 0);
- if ( !$fast_output) echo "<tr><td rowspan='$rows' valign='top'>$num</td><th colspan='2'>$file</th></tr>\n";
- if ($check_getimagesize) {
- $len++;
- $size = GetImageSize($file);
- $error = error_msg();// clear message
- if ( $size === false) {
- $error = '<b style="color:red">GetImageSize returned false</b><br>'.$error;
- $res_getimagesize = $error;
- } else {
- $res_getimagesize = '('.join($size,',').')';
- }
- if ( !$fast_output) echo AddInfo("GetImageSize",$error,1);
- }
- if ( $check_exif_thumbnail) {
- $len++;
- if ($type!=IMAGETYPE_JPEG) {// && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) {
- $error = "<b style='color: green'>filetype not supported: $types[$type]</b>";
- $res_exif_thumbnail = $error;
- } else {
- $t_width = 0;
- $t_height = 0;
- $result = exif_thumbnail($file, $t_width, $t_height);
- $error = error_msg();// clear message
- if ( $result === false) {
- $error = '<b style="color:red">exif_thumbnail returned false</b><br>'.$error;
- if ( $t_width && $t_height) {
- $error = "<b style='color:green'>$t_width x $t_height</b><br>$error";
- }
- $res_exif_thumbnail = $error;
- } else {
- $res_exif_thumbnail = $t_width . " x " . $t_height;
- }
- }
- if ( !$fast_output) echo AddInfo("exif_thumbnail",$error,1);
- }
- if ($check_exif_read_data) {
- $len++;
- if ($type!=IMAGETYPE_JPEG && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) {
- $res_exif_read_data = "<b style='color: green'>filetype not supported: $types[$type]</b>";
- if ( !$fast_output) echo AddInfo("exif_read_data",$res_exif_read_data);
- $res = '';
- } else {
- $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true);
- $error = error_msg();// clear message
- if ( !$fast_output) echo AddInfo("exif_read_data",$error,1);
- $res = '';
- if ( $image === false) {
- $res_exif_read_data = "<b style='color:red'>exif_read_data returned false</b><br>$error";
- } else {
- $res_exif_read_data = $error;
- // ah no!$error = error_msg(); // force o.k.
- foreach($image as $Name => $Value) {
- if ( $Name!='Thumbnail') {
- if ( is_array($Value)) {
- $len++;
- $res .= AddInfo($Name,'Array('.count($Value).')');
- foreach( $Value as $idx => $Entry) {
- if ($idx==='Thumbnail') $Entry = '&lt;data&gt;';
- $len++;
- $res .= AddInfo($Name.':'.$idx,$Entry);
- }
- } else {
- $len++;
- $res .= AddInfo($Name,$Value);
- }
- }
- }
- }
- }
- }
- $tab2 .= "<tr><td rowspan='$len' valign='top'>$num</td></tr>\n";
- $tab2 .= "<tr><th colspan='2'>$file</th></tr>\n";
- if ($check_getimagesize) {
- $tab2 .= "<tr><th>GetImageSize</th><td>$res_getimagesize</td></tr>\n";
- }
- if ($check_exif_thumbnail) {
- $tab2 .= "<tr><th>exif_thumbnail</th><td>$res_exif_thumbnail</td></tr>\n";
- }
- if ($check_exif_read_data) {
- $tab2 .= "<tr><th>exif_read_data</th><td>$res_exif_read_data</td></tr>\n";
- $tab2 .= $res;
- }
- if ( $fast_output) {
- echo $tab2;
- $tab2 = '';
- }
- }
- error_log("exif test page - checking files: ".count($possible)." done.",0);
- echo $tab2;
- echo "</table>\n";
-} else {
- echo "<h1 style='color:red'>function exif_read_data is not supported</h1>\n";
-}
-?>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/exif/tests/001.phpt b/ext/exif/tests/001.phpt
deleted file mode 100644
index 87be87c3a2..0000000000
--- a/ext/exif/tests/001.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Check for exif_read_data
---SKIPIF--
-<?php if (!extension_loaded("exif")) print "skip";?>
---POST--
---GET--
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
-*/
-$image = exif_read_data('./ext/exif/tests/test2.jpg','',true,false);
-$accept = '';
-foreach($image as $idx=>$section) {
- $accept .= $section;
- foreach($section as $name=>$value) {
- if ( $idx!='FILE' || $name!='FileDateTime') {
- $accept .= substr($name,0,2);
- $accept .= $value;
- }
- }
-}
-echo $accept;
-?>
---EXPECT--
-ArrayFitest2.jpgFi1240Fi2SeANY_TAG, IFD0, THUMBNAIL, COMMENTArrayhtwidth="1" height="1"He1Wi1Is1By1UsExif test image.UsASCIICoPhoto (c) M.Boerger, Edited by M.Boerger.CoPhoto (c) M.BoergerCoEdited by M.Boerger.ArrayCoPhoto (c) M.BoergerUsASCIIArrayJP134JP523Array0Comment #1.1Comment #2.2Comment #3end \ No newline at end of file
diff --git a/ext/exif/tests/002.phpt b/ext/exif/tests/002.phpt
deleted file mode 100644
index d9e2298a5d..0000000000
--- a/ext/exif/tests/002.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Check for exif_thumbnail
---SKIPIF--
-<?php if (!extension_loaded("exif")) print "skip";?>
---POST--
---GET--
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
-*/
-$istat= stat('./ext/exif/tests/test1.jpg');
-$fp = fopen('./ext/exif/tests/test1.jpg','r');
-$image = fread($fp,$istat[7]);
-echo substr($image,490,5).'_'.$istat[7];
-fclose($fp);
-$thumb = exif_thumbnail('./ext/exif/tests/test2.jpg');
-echo strcmp($image,$thumb) ? 'different' : '_identical_';
-echo strlen($thumb);
-echo '_'.substr($thumb,490,5);
-/* 7GWgw_523_identical_523_7GWgw */
-?>
---EXPECT--
-7GWgw_523_identical_523_7GWgw
diff --git a/ext/exif/tests/003.phpt b/ext/exif/tests/003.phpt
deleted file mode 100644
index e2d069a451..0000000000
--- a/ext/exif/tests/003.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-Check for exif_read_data, Unicode user comment
---SKIPIF--
-<?php if (!extension_loaded("exif")) print "skip";?>
---POST--
---GET--
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
- test3.jpg is the same as test2.jpg but with a UNICODE UserComment: &Auml;&Ouml;&&Uuml;&szlig;&auml;&ouml;&uuml;
-*/
-ini_alter('exif.encode_unicode', 'ISO-8859-15');
-$image = exif_read_data('./ext/exif/tests/test3.jpg','',true,false);
-$accept = '';
-foreach($image as $idx=>$section) {
- $accept .= $section;
- foreach($section as $name=>$value) {
- if ( $idx!='FILE' || $name!='FileDateTime') {
- $accept .= substr($name,0,2);
- $accept .= $value;
- }
- }
-}
-echo $accept;
-?>
---EXPECT--
-ArrayFitest3.jpgFi1237Fi2SeANY_TAG, IFD0, THUMBNAIL, COMMENTArrayhtwidth="1" height="1"He1Wi1Is1By1UsÄÖÜßäöüUsUNICODECoPhoto (c) M.Boerger, Edited by M.Boerger.CoPhoto (c) M.BoergerCoEdited by M.Boerger.ArrayCoPhoto (c) M.BoergerUsUNICODEArrayJP134JP523Array0Comment #1.1Comment #2.2Comment #3end \ No newline at end of file
diff --git a/ext/exif/tests/test1.jpg b/ext/exif/tests/test1.jpg
deleted file mode 100644
index 121decb65a..0000000000
--- a/ext/exif/tests/test1.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test2.jpg b/ext/exif/tests/test2.jpg
deleted file mode 100644
index f60ecded6f..0000000000
--- a/ext/exif/tests/test2.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test3.jpg b/ext/exif/tests/test3.jpg
deleted file mode 100644
index f8adf9c2f4..0000000000
--- a/ext/exif/tests/test3.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/ext_skel b/ext/ext_skel
deleted file mode 100755
index bbbcc164f1..0000000000
--- a/ext/ext_skel
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/bin/sh
-
-givup() {
- echo $*
- exit 1
-}
-
-usage() {
-echo "$0 --extname=module [--proto=file] [--stubs=file] [--xml[=file]]"
-echo " [--full-xml] [--no-help]"
-echo ""
-echo " --extname=module module is the name of your extension"
-echo " --proto=file file contains prototypes of functions to create"
-echo " --stubs=file generate only function stubs in file"
-echo " --xml generate xml documentation to be added to phpdoc-cvs"
-echo " --full-xml generate xml documentation for a self-contained extension"
-echo " (not yet implemented)"
-echo " --no-help don't try to be nice and create comments in the code"
-echo " and helper functions to test if the module compiled"
-exit 1
-}
-
-if test $# = 0; then
- usage
-fi
-
-while test $# -gt 0; do
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- case $1 in
- --extname=?*)
- extname=$optarg
- EXTNAME=`echo $extname | tr [a-z] [A-Z]`
- ;;
- --proto=?*)
- proto=$optarg
- ;;
- --stubs=*)
- stubs=yes
- stubfile=$optarg
- ;;
- --xml)
- xml="yes"
- ;;
- --xml=?*)
- xml=$optarg
- ;;
- --full-xml)
- full_xml="yes"
- ;;
- --no-help)
- no_help="yes"
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-
-if test -d "$extname" ; then
- givup "Directory $extname already exists."
-fi
-
-test -f ext_skel || givup "ext_skel must be in the current directory"
-test -d skeleton || givup "subdirectory skeleton does not exist or is not directory"
-
-if echo '\c' | grep -s c >/dev/null 2>&1
-then
- ECHO_N="echo -n"
- ECHO_C=""
-else
- ECHO_N="echo"
- ECHO_C='\c'
-fi
-
-if test -z "$stubs"; then
- echo "Creating directory $extname"
- stubfile=$extname"/function_stubs"
- mkdir $extname || givup "Cannot create directory $extname"
-fi
-
-if test -n "$proto"; then
- cat $proto | awk -v extname=$extname -v stubs=$stubs -v stubfile=$stubfile -v xml=$xml -v full_xml=$full_xml -v i_know_what_to_do_shut_up_i_dont_need_your_help_mode=$no_help -f ./skeleton/create_stubs
-fi
-
-if test -z "$stubs"; then
- cd $extname
- chmod 755 .
-
-$ECHO_N "Creating basic files:$ECHO_C"
-
-$ECHO_N " config.m4$ECHO_C"
-cat >config.m4 <<eof
-dnl \$Id\$
-dnl config.m4 for extension $extname
-
-dnl Comments in this file start with the string 'dnl'.
-dnl Remove where necessary. This file will not work
-dnl without editing.
-
-dnl If your extension references something external, use with:
-
-dnl PHP_ARG_WITH($extname, for $extname support,
-dnl Make sure that the comment is aligned:
-dnl [ --with-$extname Include $extname support])
-
-dnl Otherwise use enable:
-
-dnl PHP_ARG_ENABLE($extname, whether to enable $extname support,
-dnl Make sure that the comment is aligned:
-dnl [ --enable-$extname Enable $extname support])
-
-if test "\$PHP_$EXTNAME" != "no"; then
- dnl Write more examples of tests here...
-
- dnl # --with-$extname -> check with-path
- dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
- dnl SEARCH_FOR="/include/$extname.h" # you most likely want to change this
- dnl if test -r \$PHP_$EXTNAME/$SEARCH_FOR; then # path given as parameter
- dnl ${EXTNAME}_DIR=\$PHP_$EXTNAME
- dnl else # search default path list
- dnl AC_MSG_CHECKING([for $extname files in default path])
- dnl for i in \$SEARCH_PATH ; do
- dnl if test -r \$i/\$SEARCH_FOR; then
- dnl ${EXTNAME}_DIR=\$i
- dnl AC_MSG_RESULT(found in \$i)
- dnl fi
- dnl done
- dnl fi
- dnl
- dnl if test -z "\$${EXTNAME}_DIR"; then
- dnl AC_MSG_RESULT([not found])
- dnl AC_MSG_ERROR([Please reinstall the $extname distribution])
- dnl fi
-
- dnl # --with-$extname -> add include path
- dnl PHP_ADD_INCLUDE(\$${EXTNAME}_DIR/include)
-
- dnl # --with-$extname -> chech for lib and symbol presence
- dnl LIBNAME=$extname # you may want to change this
- dnl LIBSYMBOL=$extname # you most likely want to change this
-
- dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL,
- dnl [
- dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD)
- dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ])
- dnl ],[
- dnl AC_MSG_ERROR([wrong $extname lib version or lib not found])
- dnl ],[
- dnl -L\$${EXTNAME}_DIR/lib -lm -ldl
- dnl ])
- dnl
- dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION($extname, $extname.c, \$ext_shared)
-fi
-eof
-
-
-$ECHO_N " .cvsignore$ECHO_C"
-cat >.cvsignore <<eof
-.deps
-*.lo
-*.la
-eof
-
-$ECHO_N " $extname.c$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-echo "s/EXTNAME/$EXTNAME/g" >> sedscript
-echo '/__function_entries_here__/r function_entries' >> sedscript
-echo '/__function_stubs_here__/r function_stubs' >> sedscript
-echo '/__header_here__/r ../../header' >> sedscript
-echo '/__footer_here__/r ../../footer' >> sedscript
-echo '/__function_entries_here__/D' >> sedscript
-echo '/__function_stubs_here__/D' >> sedscript
-echo '/__header_here__/D' >> sedscript
-echo '/__footer_here__/D' >> sedscript
-if [ ! -z "$no_help" ]; then
- echo "/confirm_$extname_compiled/D" >> sedscript
- echo '/Remove the following/,/^\*\//D' >> sedscript
- echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript
- echo 's/^\/\*.*\*\/$//' >> sedscript
- echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript
-fi
-
-sed -f sedscript <../skeleton/skeleton.c > $extname.c
-
-
-$ECHO_N " php_$extname.h$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-echo "s/EXTNAME/$EXTNAME/g" >> sedscript
-echo '/__function_declarations_here__/r function_declarations' >> sedscript
-echo '/__header_here__/r ../../header' >> sedscript
-echo '/__footer_here__/r ../../footer' >> sedscript
-echo '/__function_declarations_here__/D' >> sedscript
-echo '/__header_here__/D' >> sedscript
-echo '/__footer_here__/D' >> sedscript
-if [ ! -z "$no_help" ]; then
- echo "/confirm_$extname_compiled/D" >> sedscript
- echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript
- echo 's/^\/\*.*\*\/$//' >> sedscript
- echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript
-fi
-sed -f sedscript <../skeleton/php_skeleton.h > php_$extname.h
-
-$ECHO_N " CREDITS$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-sed -f sedscript <../skeleton/CREDITS > CREDITS
-
-$ECHO_N " EXPERIMENTAL$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-sed -f sedscript <../skeleton/EXPERIMENTAL > EXPERIMENTAL
-
-$ECHO_N " tests/001.phpt$ECHO_C"
-mkdir tests || givup "Cannot create tests directory"
-chmod 755 tests
-sed -f sedscript <../skeleton/tests/001.phpt > tests/001.phpt
-
-if test -z "$stubs" && test -z "$no_help"; then
- $ECHO_N " $extname.php$ECHO_C"
- sed \
- -e "s/extname/$extname/g" \
- <../skeleton/skeleton.php \
- > $extname.php
-fi
-
-rm sedscript
-
-if test -n "$proto"; then
- if test -z "$stubs"; then
- rm function_entries
- rm function_declarations
- rm function_stubs
- fi
- if test -f function_warning; then
- rm function_warning
- warning="
-NOTE! Because some arguments to functions were resources, the code generated
-cannot yet be compiled without editing. Please consider this to be step 4.5
-in the instructions above.
-"
- fi
-fi
-
-find . -type f | xargs chmod 644
-find . -type d | xargs chmod 755
-fi
-
-echo " [done]."
-
-if test -z "$no_help" && test -z "$stubs"; then
- cat <<eof
-
-To use your new extension, you will have to execute the following steps:
-
-1. $ cd ..
-2. $ vi ext/$extname/config.m4
-3. $ ./buildconf
-4. $ ./configure --[with|enable]-$extname
-5. $ make
-6. $ ./php -f ext/$extname/$extname.php
-7. $ vi ext/$extname/$extname.c
-8. $ make
-
-Repeat steps 3-6 until you are satisfied with ext/$extname/config.m4 and
-step 6 confirms that your module is compiled into PHP. Then, start writing
-code and repeat the last two steps as often as necessary.
-$warning
-eof
-fi
diff --git a/ext/fbsql/CREDITS b/ext/fbsql/CREDITS
deleted file mode 100644
index 3500fdc89e..0000000000
--- a/ext/fbsql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FBSQL
-Frank M. Kromann
diff --git a/ext/fbsql/Readme_w32.txt b/ext/fbsql/Readme_w32.txt
deleted file mode 100644
index af8bfdc1e9..0000000000
--- a/ext/fbsql/Readme_w32.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Rules for building FBSQL
-------------------------
-
-The fbsql project contains 2 configurations.
-
-To build this extension you must first download and
-install FrontBase. The default instalation path would
-be c:\usr\FrontBase. If you install it in another location
-you need to change the include path in the project before
-compiling.
-
-Start Visual Studio, load php_modules.dsw, select the fbsql projects,
-configuration and build it.
-
-Finaly copy php_fbsql.dll to your extension directory and enable it
-by adding the following line tp php.ini
-
-extension=php_fbsql.dll
-
-or by calling dl() in each script
-
-dl("php_fbsql.dll"); \ No newline at end of file
diff --git a/ext/fbsql/config.m4 b/ext/fbsql/config.m4
deleted file mode 100644
index 5143390fe5..0000000000
--- a/ext/fbsql/config.m4
+++ /dev/null
@@ -1,42 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(fbsql, for FrontBase SQL92 (fbsql) support,
-[ --with-fbsql[=DIR] Include FrontBase support. DIR is the FrontBase base directory.])
-
-if test "$PHP_FBSQL" != "no"; then
-
- AC_DEFINE(HAVE_FBSQL, 1, [Whether you have FrontBase])
- PHP_NEW_EXTENSION(fbsql, php_fbsql.c, $ext_shared)
-
- FBSQL_INSTALLATION_DIR=""
- if test "$PHP_FBSQL" = "yes"; then
-
- for i in /Local/Library /usr /usr/local /opt /Library /usr/lib; do
- if test -f $i/FrontBase/include/FBCAccess/FBCAccess.h; then
- FBSQL_INSTALLATION_DIR=$i/FrontBase
- break
- fi
- done
-
- if test -z "$FBSQL_INSTALLATION_DIR"; then
- AC_MSG_ERROR(Cannot find FrontBase in well know installation directories)
- fi
-
- elif test "$PHP_FBSQL" != "no"; then
-
- if test -f $PHP_FBSQL/include/FBCAccess/FBCAccess.h; then
- FBSQL_INSTALLATION_DIR=$PHP_FBSQL
- else
- AC_MSG_ERROR(Directory $PHP_FBSQL is not a FrontBase installation directory)
- fi
- fi
-
- if test -z "$FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a"; then
- AC_MSG_ERROR(Could not find $FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(FBCAccess, $FBSQL_INSTALLATION_DIR/lib, $FBSQL_INSTALLATION_DIR/lib)
- PHP_ADD_INCLUDE($FBSQL_INSTALLATION_DIR/include)
-fi
diff --git a/ext/fbsql/fbsql.dsp b/ext/fbsql/fbsql.dsp
deleted file mode 100644
index 561e5cc4ed..0000000000
--- a/ext/fbsql/fbsql.dsp
+++ /dev/null
@@ -1,171 +0,0 @@
-# Microsoft Developer Studio Project File - Name="fbsql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fbsql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "fbsql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "fbsql.mak" CFG="fbsql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "fbsql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fbsql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fbsql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fbsql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "fbsql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4nts.lib /nologo /dll /machine:I386 /out:"Release/php_fbsql.dll" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "fbsql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4nts_debug.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "fbsql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4ts_debug.lib FBCAccess.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Debug_TS/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"\usr\FrontBase\lib"
-
-!ELSEIF "$(CFG)" == "fbsql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "NDEBUG" /D ZTS=1 /D ZEND_DEBUG=0 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib FBCAccess.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Release_TS/php_fbsql.dll" /libpath:"..\..\Release_TS" /libpath:"\usr\FrontBase\lib" /libpath:"..\..\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "fbsql - Win32 Release"
-# Name "fbsql - Win32 Debug"
-# Name "fbsql - Win32 Debug_TS"
-# Name "fbsql - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_fbsql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_fbsql.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\Readme_w32.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/fbsql/php_fbsql.c b/ext/fbsql/php_fbsql.c
deleted file mode 100644
index d9e15c5e8f..0000000000
--- a/ext/fbsql/php_fbsql.c
+++ /dev/null
@@ -1,3521 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http:/*www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Frank M. Kromann <frank@frontbase.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* TODO:
- *
- * ? Safe mode implementation
- */
-
-/* SB's list:
- - API for a more natural FB connect semantic
- - Connect & set session
- - Autoreconnect when disconnected
- - Comments and cleanup
-
- BUGS
- - Select db with no arguments
- - Query with everything defaulted
-*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-
-#if WIN32|WINNT
-#include <winsock.h>
-#else
-#include <php_config.h>
-#include <build-defs.h>
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <netdb.h>
-#include <netinet/in.h>
-#endif
-
-#include "php_ini.h"
-
-#define HAVE_FBSQL 1
-
-#if HAVE_FBSQL
-#include "php_fbsql.h"
-#include <signal.h>
-
-static int le_result, le_link, le_plink;
-
-struct PHPFBResult;
-typedef struct PHPFBResult PHPFBResult;
-
-struct PHPFBLink;
-typedef struct PHPFBLink PHPFBLink;
-
-/* The PHPFBLink structure represents a fbsql link. The lion is used for
- a connection to a machine, it may be persistent and is reference counted.
- The reason for refcounting is mostly to avoid to think, it work independent of
- any wierd and unforseen allocation deallocation order.
-
- The PHPFBDatabse structure implements to actual connection to a FrontBase server
- ot may be persistent is the link it is connected to is persistent, and refcounted
- for the same reasons as above.
-
- The PHPFBResult structure implements a result from the FrontBase server, and does all
- required buffereing from of results.
-
- In the PHP code the 3 above a data structures are referenced by means of integers in the
- range from 1 to som configurable maximum. You can put a limit to the number of links, databases
- and results. The integer identifications is implemented by insertion in the list, which is passed
- as an argument to all the functions, please note the list is polymorph.
-
- Database objects and link objects are all reused, base on the host name user name, host name database name
- user name. So connecting twice to the same database as the same user will return the same database id.
- We use the same coding for that as fbsql does, explioiting the underlying implementation of the lists.
-
- Persistent objects are put in the persistent list as well, but only by name, if you connect to a persistent object
- and it is not in the list it is simply added and get a new index, and refcounted. Tricky, tricky ...
-*/
-
-/* Some functions which should be exported from FBCAccess */
-
-void* fbaObjectAtIndex();
-void fbaRelease();
-unsigned int fbaCount();
-
-struct FBCAutoStartInfo {
- FBArray* infoLines;
-};
-
-
-
-struct PHPFBResult
-{
- PHPFBLink* link; /* The link for the result, may be NULL if no link */
- char* fetchHandle; /* The fetch handle, the id used by the server. */
- FBCMetaData* metaData; /* The metadata describing the result */
- FBCMetaData* ResultmetaData; /* The metadata describing the result */
- FBCRowHandler* rowHandler; /* The row handler, the Frontbase structure used for accessing rows in the result */
- unsigned int batchSize; /* The number of row to fetch when expanding the number of rows in the row handler */
- unsigned int rowCount; /* The number of rows in the results set. The number of row is not in */
- /* general known when the select is done, one typically needs to fetch all the row
- to figure out how many row you got. When the rowCount is unknown the value is
- 0x7ffffffff */
- int columnCount; /* Number of columns in the row set. */
- unsigned int rowIndex; /* The current row index. */
- int columnIndex; /* The current column index */
- void** row; /* The last row accessed */
- FBArray* array; /* The link may return a result set, the database list, we implement that by the */
- /* FBArray, just a list of strings. */
- FBCPList* list; /* The same special kind result just for property list from extract, schema info. */
- unsigned int selectResults; /* number of results in select */
- unsigned int currentResult; /* current result number */
- int lobMode; /* 0=Fetch data (default); 1=Fetch handle */
-};
-
-struct PHPFBLink
-{
- int persistent; /* persistent ? */
- char* hostName; /* Host name */
- char* userName; /* User name */
- char* userPassword; /* User password */
- char* databasePassword; /* Database password */
- char* databaseName; /* The name of the database */
- FBCExecHandler* execHandler; /* The exechandler, can be used for database operations */
- FBCDatabaseConnection* connection; /* The connection to the database */
- unsigned int affectedRows; /* Number of rows affected by the last SQL statement */
- long autoCommit; /* Enable or disable autoCommit */
- unsigned int errorNo; /* The latest error on the connection, 0 is ok. */
- char* errorText; /* The error text */
- unsigned int insert_id; /* The row index of the latest row inserted into the database */
-};
-
-#define FBSQL_ASSOC 1<<0
-#define FBSQL_NUM 1<<1
-#define FBSQL_BOTH (FBSQL_ASSOC|FBSQL_NUM)
-
-#define FBSQL_LOCK_DEFERRED 0
-#define FBSQL_LOCK_OPTIMISTIC 1
-#define FBSQL_LOCK_PESSIMISTIC 2 // default
-
-#define FBSQL_ISO_READ_UNCOMMITTED 0
-#define FBSQL_ISO_READ_COMMITTED 1
-#define FBSQL_ISO_REPEATABLE_READ 2
-#define FBSQL_ISO_SERIALIZABLE 3 // default
-#define FBSQL_ISO_VERSIONED 4
-
-#define FBSQL_LOB_DIRECT 0 // default
-#define FBSQL_LOB_HANDLE 1 // default
-
-
-/* {{{ fbsql_functions[]
- */
-function_entry fbsql_functions[] = {
- PHP_FE(fbsql_connect, NULL)
- PHP_FE(fbsql_pconnect, NULL)
- PHP_FE(fbsql_close, NULL)
- PHP_FE(fbsql_select_db, NULL)
- PHP_FE(fbsql_create_db, NULL)
- PHP_FE(fbsql_drop_db, NULL)
- PHP_FE(fbsql_start_db, NULL)
- PHP_FE(fbsql_stop_db, NULL)
- PHP_FE(fbsql_db_status, NULL)
- PHP_FE(fbsql_query, NULL)
- PHP_FE(fbsql_db_query, NULL)
- PHP_FE(fbsql_list_dbs, NULL)
- PHP_FE(fbsql_list_tables, NULL)
- PHP_FE(fbsql_list_fields, NULL)
- PHP_FE(fbsql_error, NULL)
- PHP_FE(fbsql_errno, NULL)
- PHP_FE(fbsql_affected_rows, NULL)
- PHP_FE(fbsql_insert_id, NULL)
- PHP_FE(fbsql_result, NULL)
- PHP_FE(fbsql_next_result, NULL)
- PHP_FE(fbsql_num_rows, NULL)
- PHP_FE(fbsql_num_fields, NULL)
- PHP_FE(fbsql_fetch_row, NULL)
- PHP_FE(fbsql_fetch_array, NULL)
- PHP_FE(fbsql_fetch_assoc, NULL)
- PHP_FE(fbsql_fetch_object, NULL)
- PHP_FE(fbsql_data_seek, NULL)
- PHP_FE(fbsql_fetch_lengths, NULL)
- PHP_FE(fbsql_fetch_field, NULL)
- PHP_FE(fbsql_field_seek, NULL)
- PHP_FE(fbsql_free_result, NULL)
- PHP_FE(fbsql_field_name, NULL)
- PHP_FE(fbsql_field_table, NULL)
- PHP_FE(fbsql_field_len, NULL)
- PHP_FE(fbsql_field_type, NULL)
- PHP_FE(fbsql_field_flags, NULL)
- PHP_FE(fbsql_table_name, NULL)
-
-/* Fontbase additions: */
- PHP_FE(fbsql_set_transaction, NULL)
- PHP_FE(fbsql_autocommit, NULL)
- PHP_FE(fbsql_commit, NULL)
- PHP_FE(fbsql_rollback, NULL)
-
- PHP_FE(fbsql_create_blob, NULL)
- PHP_FE(fbsql_create_clob, NULL)
- PHP_FE(fbsql_set_lob_mode, NULL)
- PHP_FE(fbsql_read_blob, NULL)
- PHP_FE(fbsql_read_clob, NULL)
- PHP_FE(fbsql_blob_size, NULL)
- PHP_FE(fbsql_clob_size, NULL)
-
- PHP_FE(fbsql_hostname, NULL)
- PHP_FE(fbsql_database, NULL)
- PHP_FE(fbsql_database_password, NULL)
- PHP_FE(fbsql_username, NULL)
- PHP_FE(fbsql_password, NULL)
- PHP_FE(fbsql_warnings, NULL)
-
- PHP_FE(fbsql_get_autostart_info, NULL)
-// PHP_FE(fbsql_set_autostart_info, NULL)
-
-/* Aliases: */
- PHP_FALIAS(fbsql, fbsql_db_query, NULL)
- PHP_FALIAS(fbsql_tablename, fbsql_table_name, NULL)
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry fbsql_module_entry = {
- STANDARD_MODULE_HEADER,
- "fbsql",
- fbsql_functions,
- PHP_MINIT(fbsql),
- PHP_MSHUTDOWN(fbsql),
- PHP_RINIT(fbsql),
- PHP_RSHUTDOWN(fbsql),
- PHP_MINFO(fbsql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(fbsql)
-
-#ifdef COMPILE_DL_FBSQL
-ZEND_GET_MODULE(fbsql)
-#endif
-
-#define CHECK_LINK(link) { \
- if (link==-1) { \
- if (FB_SQL_G(generateWarnings)) \
- php_error(E_WARNING, "FrontBase: A link to the server could not be established"); \
- RETURN_FALSE; \
- } \
-}
-
-static void phpfbReleaseResult (zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void phpfbReleaseLink (zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void phpfbReleasePLink (zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PHPFBResult* result = (PHPFBResult *)rsrc->ptr;
-
- if (result)
- {
- if (result->fetchHandle) {
- FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle);
- fbcmdRelease(md);
- }
- if (result->rowHandler) fbcrhRelease(result->rowHandler);
- if (result->ResultmetaData) fbcmdRelease(result->ResultmetaData);
- if (result->list) fbcplRelease(result->list);
- if (result->array) fbaRelease(result->array);
- efree(result);
- }
-}
-
-
-static void phpfbReleaseLink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PHPFBLink* link = (PHPFBLink *)rsrc->ptr;
-
- if (link)
- {
- if (link->hostName) free(link->hostName);
- if (link->userName) free(link->userName);
- if (link->userPassword) free(link->userPassword);
- if (link->databasePassword) free(link->databasePassword);
- if (link->databaseName) free(link->databaseName);
- if (link->errorText) free(link->errorText);
- if (link->connection) {
- fbcdcClose(link->connection);
- fbcdcRelease(link->connection);
- }
- if (link->execHandler) fbcehRelease(link->execHandler);
- efree(link);
- FB_SQL_G(linkCount)--;
- }
-}
-
-static void phpfbReleasePLink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PHPFBLink* link = (PHPFBLink *)rsrc->ptr;
-
- if (link)
- {
- if (link->hostName) free(link->hostName);
- if (link->userName) free(link->userName);
- if (link->userPassword) free(link->userPassword);
- if (link->databasePassword) free(link->databasePassword);
- if (link->databaseName) free(link->databaseName);
- if (link->errorText) free(link->errorText);
- if (link->connection) {
- fbcdcClose(link->connection);
- fbcdcRelease(link->connection);
- }
- if (link->execHandler) fbcehRelease(link->execHandler);
- free(link);
- FB_SQL_G(linkCount)--;
- FB_SQL_G(persistentCount)--;
- }
-}
-
-static void php_fbsql_set_default_link(int id TSRMLS_DC)
-{
- if (FB_SQL_G(linkIndex)!=-1) {
- zend_list_delete(FB_SQL_G(linkIndex));
- }
- FB_SQL_G(linkIndex) = id;
- zend_list_addref(id);
-}
-
-static int php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (FB_SQL_G(linkIndex)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return FB_SQL_G(linkIndex);
-}
-
-
-static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link);
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN ("fbsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allowPersistent, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_BOOLEAN ("fbsql.generate_warnings", "0", PHP_INI_SYSTEM, OnUpdateInt, generateWarnings, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_BOOLEAN ("fbsql.autocommit", "1", PHP_INI_SYSTEM, OnUpdateInt, autoCommit, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, maxPersistent, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_links", "128", PHP_INI_SYSTEM, OnUpdateInt, maxLinks, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_connections", "128", PHP_INI_SYSTEM, OnUpdateInt, maxConnections, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_results", "128", PHP_INI_SYSTEM, OnUpdateInt, maxResults, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.batchSize", "1000", PHP_INI_SYSTEM, OnUpdateInt, batchSize, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY ("fbsql.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, hostName, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_user", "_SYSTEM", PHP_INI_SYSTEM, OnUpdateString, userName, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_password", "", PHP_INI_SYSTEM, OnUpdateString, userPassword, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_database", "", PHP_INI_SYSTEM, OnUpdateString, databaseName, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_database_password", "", PHP_INI_SYSTEM, OnUpdateString, databasePassword, zend_fbsql_globals, fbsql_globals)
-PHP_INI_END()
-/* }}} */
-
-static void php_fbsql_init_globals(zend_fbsql_globals *fbsql_globals)
-{
- fbsql_globals->persistentCount = 0;
-
- if (fbsql_globals->hostName==NULL)
- {
- char name[256];
- gethostname(name, sizeof(name));
- name[sizeof(name)-1] = 0;
- fbsql_globals->hostName = strdup(name);
- }
-
- fbsql_globals->persistentCount = 0;
- fbsql_globals->linkCount = 0;
-}
-
-PHP_MINIT_FUNCTION(fbsql)
-{
- ZEND_INIT_MODULE_GLOBALS(fbsql, php_fbsql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- fbcInitialize();
-
- le_result = zend_register_list_destructors_ex(phpfbReleaseResult, NULL, "fbsql result", module_number);
- le_link = zend_register_list_destructors_ex(phpfbReleaseLink, NULL, "fbsql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, phpfbReleasePLink, "fbsql plink", module_number);
- Z_TYPE(fbsql_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("FBSQL_ASSOC", FBSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_NUM", FBSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_BOTH", FBSQL_BOTH, CONST_CS | CONST_PERSISTENT);
-
- /* Register Transaction constants */
- REGISTER_LONG_CONSTANT("FBSQL_LOCK_DEFERRED", FBSQL_LOCK_DEFERRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_LOCK_OPTIMISTIC", FBSQL_LOCK_OPTIMISTIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_LOCK_PESSIMISTIC", FBSQL_LOCK_PESSIMISTIC, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_UNCOMMITTED", FBSQL_ISO_READ_UNCOMMITTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_COMMITTED", FBSQL_ISO_READ_COMMITTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_REPEATABLE_READ", FBSQL_ISO_REPEATABLE_READ, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_SERIALIZABLE", FBSQL_ISO_SERIALIZABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_VERSIONED", FBSQL_ISO_VERSIONED, CONST_CS | CONST_PERSISTENT);
-
- /* Register Status constants */
- REGISTER_LONG_CONSTANT("FBSQL_UNKNOWN", FBUnknownStatus, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_STOPPED", FBStopped, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_STARTING", FBStarting, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_RUNNING", FBRunning, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_STOPPING", FBStopping, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_NOEXEC", FBNoExec, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("FBSQL_LOB_DIRECT", FBSQL_LOB_DIRECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_LOB_HANDLE", FBSQL_LOB_HANDLE, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(fbsql)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(fbsql)
-{
- FB_SQL_G(linkIndex) = -1;
- FB_SQL_G(linkCount) = FB_SQL_G(persistentCount);
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(fbsql)
-{
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(fbsql)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "FrontBase support", "enabled");
-
- php_info_print_table_row(2, "Client API version", "2.24");
-
- if (FB_SQL_G(allowPersistent))
- {
- sprintf(buf, "%ld", FB_SQL_G(persistentCount));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- }
-
- sprintf(buf, "%ld", FB_SQL_G(linkCount));
- php_info_print_table_row(2, "Active Links", buf);
-
-/*
- sprintf(buf, "%ld", FB_SQL_G(resultCount));
- php_info_print_table_row(2, "Active Results", buf);
-*/
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- PHPFBLink* phpLink;
- list_entry *lep;
- char name[1024];
- char *hostName = NULL, *userName = NULL, *userPassword = NULL;
- int argc = ZEND_NUM_ARGS(), create_new = 0;
- zval **argv[3];
-
- if ((argc < 0) || (argc > 3)) WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(argc, &argv[0], &argv[1], &argv[2])==FAILURE) RETURN_FALSE;
- if (argc >= 1)
- {
- convert_to_string_ex(argv[0]);
- hostName = Z_STRVAL_PP(argv[0]);
- }
- if (argc >= 2)
- {
- convert_to_string_ex(argv[1]);
- userName = Z_STRVAL_PP(argv[1]);
- }
- if (argc == 3)
- {
- convert_to_string_ex(argv[2]);
- userPassword = Z_STRVAL_PP(argv[2]);
- }
-
- if (hostName == NULL) hostName = FB_SQL_G(hostName);
- if (userName == NULL) userName = FB_SQL_G(userName);
- if (userPassword == NULL) userPassword = FB_SQL_G(userPassword);
-
- sprintf(name, "fbsql_%s_%s_%s", hostName, userName, userPassword);
-
- if (!FB_SQL_G(allowPersistent)) {
- persistent=0;
- }
- if (persistent) {
- if (zend_hash_find(&EG(persistent_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS)
- {
- phpLink = (PHPFBLink*)lep->ptr;
- }
- else {
- list_entry le;
-
- if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks)))
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks));
- RETURN_FALSE;
- }
-
- if ((FB_SQL_G(maxPersistent) != -1 && FB_SQL_G(persistentCount) == FB_SQL_G(maxPersistent)))
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "FrontBase persistent link limit %d exceeded ", FB_SQL_G(maxPersistent));
- RETURN_FALSE;
- }
-
- phpLink = malloc(sizeof(PHPFBLink));
- phpLink->persistent = persistent;
- phpLink->hostName = strdup(hostName);
- phpLink->userName = strdup(userName);
- phpLink->userPassword = strdup(userPassword);
- phpLink->databasePassword = strdup(FB_SQL_G(databasePassword));
- phpLink->databaseName = NULL;
- phpLink->execHandler = fbcehHandlerForHost(hostName, 128);
- phpLink->affectedRows = 0;
- phpLink->autoCommit = FB_SQL_G(autoCommit);
- phpLink->errorNo = 0;
- phpLink->errorText = NULL;
- phpLink->connection = NULL;
-
-
- le.ptr = phpLink;
- Z_TYPE(le) = le_plink;
- if (zend_hash_update(&EG(persistent_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE)
- {
- free(phpLink->hostName);
- free(phpLink->userName);
- free(phpLink->userPassword);
- free(phpLink->databasePassword);
- free(phpLink);
- RETURN_FALSE;
- }
- FB_SQL_G(linkCount)++;
- FB_SQL_G(persistentCount)++;
- }
- ZEND_REGISTER_RESOURCE(return_value, phpLink, le_plink);
- }
- else
- {
- list_entry le;
-
- if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks)))
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks));
- RETURN_FALSE;
- }
-
- if (zend_hash_find(&EG(regular_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS)
- {
- int type, link;
- void *ptr;
-
- link = (int) lep->ptr;
- ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- php_fbsql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- return;
- } else {
- zend_hash_del(&EG(regular_list), name, strlen(name) + 1);
- }
- phpLink = (PHPFBLink*)lep->ptr;
- }
-
- phpLink = emalloc(sizeof(PHPFBLink));
- phpLink->persistent = persistent;
- phpLink->hostName = strdup(hostName);
- phpLink->userName = strdup(userName);
- phpLink->userPassword = strdup(userPassword);
- phpLink->databasePassword = strdup(FB_SQL_G(databasePassword));
- phpLink->databaseName = NULL;
- phpLink->execHandler = fbcehHandlerForHost(hostName, 128);
- phpLink->affectedRows = 0;
- phpLink->autoCommit = FB_SQL_G(autoCommit);
- phpLink->errorNo = 0;
- phpLink->errorText = NULL;
- phpLink->connection = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, phpLink, le_link);
-
- le.ptr = (void *)Z_LVAL_P(return_value);
- Z_TYPE(le) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE)
- {
- free(phpLink->hostName);
- free(phpLink->userName);
- free(phpLink->userPassword);
- free(phpLink->databasePassword);
- efree(phpLink);
- RETURN_FALSE;
- }
- FB_SQL_G(linkCount)++;
- }
- php_fbsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-}
-
-int phpfbFetchRow(PHPFBResult* result, unsigned int row)
-{
- if (result->rowHandler == NULL)
- {
- void *rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle);
- if (rawData == NULL)
- result->rowCount = 0;
- else
- result->rowHandler = fbcrhInitWith(rawData, result->metaData);
- }
- for (;;)
- {
- void *rawData;
- if (row >= result->rowCount && result->rowCount != 0x7fffffff) return 0;
- if (fbcrhRowCount(result->rowHandler) > (unsigned int)row) return 1;
- rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle);
- if (!fbcrhAddBatch(result->rowHandler, rawData)) result->rowCount = fbcrhRowCount(result->rowHandler);
- }
-}
-
-
-/* {{{ proto resource fbsql_connect([string hostname [, string username [, string password]]])
- Create a connection to a database server */
-PHP_FUNCTION(fbsql_connect)
-{
- php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_pconnect([string hostname [, string username [, string password]]])
- Create a persistant connection to a database server */
-PHP_FUNCTION(fbsql_pconnect)
-{
- php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int fbsql_close([resource link_identifier])
- Close a connection to a database server */
-PHP_FUNCTION(fbsql_close)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(fbsql_link_index));
- }
-
- if (id!=-1
- || (fbsql_link_index && Z_RESVAL_PP(fbsql_link_index)==FB_SQL_G(linkIndex))) {
- zend_list_delete(FB_SQL_G(linkIndex));
- FB_SQL_G(linkIndex) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-static int php_fbsql_select_db(char *databaseName, PHPFBLink *link TSRMLS_DC)
-{
- unsigned port;
- FBCDatabaseConnection* c;
- FBCMetaData* md;
-
- if (!link->databaseName || strcmp(link->databaseName, databaseName))
- {
- port = atoi(databaseName);
- if (port>0 && port<65535)
- c = fbcdcConnectToDatabaseUsingPort(link->hostName, port, link->databasePassword);
- else
- c = fbcdcConnectToDatabase(databaseName, link->hostName, link->databasePassword);
- if (c == NULL)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, fbcdcClassErrorMessage());
- return 0;
- }
- md = fbcdcCreateSession(c, "PHP", link->userName, link->userPassword, link->userName);
- if (fbcmdErrorsFound(md))
- {
- FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md);
- char* emg = fbcemdAllErrorMessages(emd);
- if (FB_SQL_G(generateWarnings))
- {
- if (emg)
- php_error(E_WARNING, emg);
- else
- php_error(E_WARNING, "No message");
- }
- link->errorText = strdup(emg);
- link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);;
- free(emg);
- fbcemdRelease(emd);
- fbcmdRelease(md);
- fbcdcClose(c);
- fbcdcRelease(c);
- return 0;
- }
- fbcmdRelease(md);
-
- if (c)
- {
- if (link->autoCommit)
- md = fbcdcExecuteDirectSQL(c, "SET COMMIT TRUE;");
- else
- md = fbcdcExecuteDirectSQL(c, "SET COMMIT FALSE;");
- fbcmdRelease(md);
- }
- fbcdcSetOutputCharacterSet(c, FBC_ISO8859_1);
- fbcdcSetInputCharacterSet(c, FBC_ISO8859_1);
-
- if (link->connection)
- {
- fbcdcClose(link->connection);
- fbcdcRelease(link->connection);
- }
- link->connection = c;
- if (link->databaseName) free(link->databaseName);
- link->databaseName = strdup(databaseName);
- }
- return 1;
-}
-
-void phpfbestrdup(const char * s, int* length, char** value)
-{
- int l = s?strlen(s):0;
- if (value)
- {
- char* r = emalloc(l+1);
- if (s)
- strcpy(r, s);
- else
- r[0] = 0;
- *value = r;
- }
- *length = l;
-}
-
-/* {{{ proto void fbsql_set_transaction(resource link_identifier, int locking, int isolation)
- Sets the transaction locking and isolation */
-PHP_FUNCTION(fbsql_set_transaction)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL, **Locking = NULL, **Isolation = NULL;
- char strSQL[1024];
- char *strLocking[] = {"DEFERRED", "OPTIMISTIC", "PESSIMISTIC"};
- char *strIsolation[] = {"READ UNCOMMITTED", "READ NCOMMITTED", "REPEATABLE READ", "SERIALIZABLE", "VERSIONED"};
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &fbsql_link_index, &Locking, &Isolation)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- sprintf(strSQL, "SET TRANSACTION LOCKING %s, ISOLATION %s;", strLocking[Z_LVAL_PP(Locking)], strIsolation[Z_LVAL_PP(Isolation)]);
-
- md = fbcdcExecuteDirectSQL(phpLink->connection, strSQL);
- fbcmdRelease(md);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_autocommit(resource link_identifier [, bool OnOff])
- Turns on auto-commit */
-PHP_FUNCTION(fbsql_autocommit)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL, **onoff = NULL;
- zend_bool OnOff;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &onoff)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (onoff)
- {
- convert_to_boolean_ex(onoff);
- OnOff = Z_BVAL_PP(onoff);
- phpLink->autoCommit = OnOff;
- if (OnOff)
- md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT TRUE;");
- else
- md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT FALSE;");
- fbcmdRelease(md);
- }
- RETURN_BOOL(phpLink->autoCommit);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_commit([resource link_identifier])
- Commit the transaction */
-PHP_FUNCTION(fbsql_commit)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- md = fbcdcCommit(phpLink->connection);
-
- if (md) {
- fbcmdRelease(md);
- RETURN_TRUE;
- }
- else
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_rollback([resource link_identifier])
- Rollback all statments since last commit */
-PHP_FUNCTION(fbsql_rollback)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- md = fbcdcRollback(phpLink->connection);
-
- if (md) {
- fbcmdRelease(md);
- RETURN_TRUE;
- }
- else
- RETURN_FALSE;
-}
-/* }}} */
-
-
-static void php_fbsql_create_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type)
-{
- PHPFBLink* phpLink = NULL;
- FBCBlobHandle *lobHandle;
- zval **lob_data, **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &lob_data)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &lob_data, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(lob_data);
- switch (lob_type) {
- case 0 : // BLOB
- lobHandle = fbcdcWriteBLOB(phpLink->connection, Z_STRVAL_PP(lob_data), Z_STRLEN_PP(lob_data));
- break;
- case 1 : // CLOB
- lobHandle = fbcdcWriteCLOB(phpLink->connection, Z_STRVAL_PP(lob_data));
- break;
- }
- if (lobHandle) {
- RETURN_STRING(fbcbhDescription(lobHandle), 1);
- fbcbhRelease(lobHandle);
- }
- else
- RETURN_FALSE;
-}
-
-/* {{{ proto string fbsql_create_blob(string blob_data [, resource link_identifier])
- Create a BLOB in the database for use with an insert or update statement */
-PHP_FUNCTION(fbsql_create_blob)
-{
- php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_create_clob(string clob_data [, resource link_identifier])
- Create a CLOB in the database for use with an insert or update statement */
-PHP_FUNCTION(fbsql_create_clob)
-{
- php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_set_lob_mode(resource result, int lob_mode)
- Sets the mode for how LOB data re retreived (actual data or a handle) */
-PHP_FUNCTION(fbsql_set_lob_mode)
-{
-
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **lob_mode = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &lob_mode)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(lob_mode);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- result->lobMode = Z_LVAL_PP(lob_mode);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-static void php_fbsql_read_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type)
-{
- PHPFBLink* phpLink = NULL;
- zval **lob_handle, **fbsql_link_index = NULL;
- int id;
- long length = 0;
- char* value = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(lob_handle);
-
- if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') {
- if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "The handle is invalid");
- RETURN_FALSE;
- }
-
- length = fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle));
- if (lob_type == 0)
- value = estrndup((char *)fbcdcReadBLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length);
- else
- value = estrndup((char *)fbcdcReadCLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length);
- if (value) {
- RETURN_STRINGL(value, length, 0);
- }
- else {
- RETURN_FALSE;
- }
-}
-
-/* {{{ proto string fbsql_read_blob(string blob_handle [, resource link_identifier])
- Read the BLOB data identified by blob_handle */
-PHP_FUNCTION(fbsql_read_blob)
-{
- php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_read_clob(string clob_handle [, resource link_identifier])
- Read the CLOB data identified by clob_handle */
-PHP_FUNCTION(fbsql_read_clob)
-{
- php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-static void php_fbsql_lob_size(INTERNAL_FUNCTION_PARAMETERS, int lob_type)
-{
- PHPFBLink* phpLink = NULL;
- zval **lob_handle, **fbsql_link_index = NULL;
- int id;
- char* value = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(lob_handle);
-
- if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') {
- if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "The handle is invalid");
- RETURN_FALSE;
- }
-
- RETURN_LONG(fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle)));
-}
-
-/* {{{ proto string fbsql_blob_size(string blob_handle [, resource link_identifier])
- Get the size of a BLOB identified by blob_handle */
-PHP_FUNCTION(fbsql_blob_size)
-{
- php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_clob_size(string clob_handle [, resource link_identifier])
- Get the size of a CLOB identified by clob_handle */
-PHP_FUNCTION(fbsql_clob_size)
-{
- php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_hostname(resource link_identifier [, string host_name])
- Get or set the host name used with a connection */
-PHP_FUNCTION(fbsql_hostname)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **host_name = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &host_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (host_name)
- {
- convert_to_string_ex(host_name);
- if (phpLink->hostName) free(phpLink->hostName);
- phpLink->hostName = strdup(Z_STRVAL_PP(host_name));
- }
- RETURN_STRING(phpLink->hostName, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_database(resource link_identifier [, string database])
- Get or set the database name used with a connection */
-PHP_FUNCTION(fbsql_database)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **dbname = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &dbname)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (dbname)
- {
- convert_to_string_ex(dbname);
- if (phpLink->databaseName) free(phpLink->databaseName);
- phpLink->databaseName = strdup(Z_STRVAL_PP(dbname));
- }
- RETURN_STRING(phpLink->databaseName, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_database_password(resource link_identifier [, string database_password])
- Get or set the databsae password used with a connection */
-PHP_FUNCTION(fbsql_database_password)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **db_password = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &db_password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (db_password)
- {
- convert_to_string_ex(db_password);
- if (phpLink->databasePassword) free(phpLink->databasePassword);
- phpLink->databasePassword = strdup(Z_STRVAL_PP(db_password));
- }
- RETURN_STRING(phpLink->databasePassword, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_username(resource link_identifier [, string username])
- Get or set the host user used with a connection */
-PHP_FUNCTION(fbsql_username)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **username = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &username)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (username)
- {
- convert_to_string_ex(username);
- if (phpLink->userName) free(phpLink->userName);
- phpLink->userName = strdup(Z_STRVAL_PP(username));
- }
- RETURN_STRING(phpLink->userName, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_password(resource link_identifier [, string password])
- Get or set the user password used with a connection */
-PHP_FUNCTION(fbsql_password)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **password = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (password)
- {
- convert_to_string_ex(password);
- if (phpLink->userPassword) free(phpLink->userPassword);
- phpLink->userPassword = strdup(Z_STRVAL_PP(password));
- }
- RETURN_STRING(phpLink->userPassword, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_select_db([string database_name [, resource link_identifier]])
- Select the database to open */
-PHP_FUNCTION(fbsql_select_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **dbname;
- int id;
- char* name = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- name = FB_SQL_G(databaseName);
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &dbname)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(dbname);
- name = Z_STRVAL_PP(dbname);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &dbname, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(dbname);
- name = Z_STRVAL_PP(dbname);
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (phpLink->execHandler == NULL)
- {
- int port = atoi(name);
- if (port == 0 || port > 64535) {
- if (FB_SQL_G(generateWarnings)) {
- php_error(E_WARNING, "Cannot connect to FBExec for database '%s'", name);
- php_error(E_WARNING, fbcehClassErrorMessage());
- }
- RETURN_FALSE;
- }
- }
-
- if (!php_fbsql_select_db(name, phpLink TSRMLS_CC)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_change_user(string user, string password [, string database [, resource link_identifier]])
- Change the user for a session */
-PHP_FUNCTION(fbsql_change_user)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **user, **password, **database;
- int id;
- char *name = NULL, *userName, *userPassword;
- char buffer[1024];
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- name = FB_SQL_G(databaseName);
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(2, &user, &password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(3, &user, &password, &database)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(database);
- name = Z_STRVAL_PP(database);
- break;
- case 4:
- if (zend_get_parameters_ex(4, &user, &password, &database, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(database);
- name = Z_STRVAL_PP(database);
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(user);
- userName = Z_STRVAL_PP(user);
-
- convert_to_string_ex(password);
- userPassword = Z_STRVAL_PP(password);
-
- sprintf(buffer, "SET AUTHORIZATION %s;", userName);
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink);
- if (Z_LVAL_P(return_value))
- {
- free(phpLink->userName);
- phpLink->userName = strdup(userName);
- }
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_create_db(string database_name [, resource link_identifier])
- Create a new database on the server */
-PHP_FUNCTION(fbsql_create_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- int i, status;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status != FBUnknownStatus)
- {
- char* txt = "Unknown status";
- if (status == FBStopped ) txt = "stopped";
- else if (status == FBStarting) txt = "starting";
- else if (status == FBRunning ) txt = "running";
- else if (status == FBStopping) txt = "stopping";
- else if (status == FBNoExec ) txt = "no exec";
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt);
- RETURN_FALSE;
- }
- if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, ""))
- {
- char* error = fbechErrorMessage(phpLink->execHandler);
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Could not create %s@%s. %s.", databaseName, phpLink->hostName, error);
- RETURN_FALSE;
- }
- for (i=0; i < 20; i++)
- {
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBRunning) break;
- }
- if (status != FBRunning)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_drop_db(string database_name [, resource link_identifier])
- Drop a database on the server */
-PHP_FUNCTION(fbsql_drop_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- int i, status;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status != FBStopped)
- {
- char* txt = "Unknown status";
- if (status == FBStopped ) txt = "stopped";
- else if (status == FBUnknownStatus) txt = "nonexisting";
- else if (status == FBStarting ) txt = "starting";
- else if (status == FBRunning ) txt = "running";
- else if (status == FBStopping ) txt = "stopping";
- else if (status == FBNoExec ) txt = "no exec";
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Could not drop %s@%s, database is %s.", databaseName, phpLink->hostName, txt);
- RETURN_FALSE;
- }
-
- if (! fbcehDeleteDatabaseNamed (phpLink->execHandler, databaseName))
- {
- char* error = fbechErrorMessage(phpLink->execHandler);
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Could not drop %s@%s. %s.", databaseName, phpLink->hostName, error);
- RETURN_FALSE;
- }
- for (i=0; i < 20; i++)
- {
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBUnknownStatus) break;
- }
- if (status != FBUnknownStatus)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier])
- Start a database on the server */
-PHP_FUNCTION(fbsql_start_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- int i, status;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if ((status != FBStopped) && (status != FBRunning) && (status != FBStarting))
- {
- char* txt = "Unknown status";
- if (status == FBStopped ) txt = "stopped";
- else if (status == FBStarting) txt = "starting";
- else if (status == FBRunning ) txt = "running";
- else if (status == FBStopping) txt = "stopping";
- else if (status == FBNoExec ) txt = "no exec";
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Could not start %s@%s, as database is %s.", databaseName, phpLink->hostName, txt);
- RETURN_FALSE;
- }
-
- if (status == FBStopped)
- {
- if (!fbcehStartDatabaseNamed (phpLink->execHandler, databaseName))
- {
- char* error = fbechErrorMessage(phpLink->execHandler);
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Could not start %s@%s. %s.", databaseName, phpLink->hostName, error);
- RETURN_FALSE;
- }
- }
-
- for (i=0; i < 20; i++)
- {
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBRunning) break;
- }
- if (status != FBRunning)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_stop_db(string database_name [, resource link_identifier])
- Stop a database on the server */
-PHP_FUNCTION(fbsql_stop_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- int i, status;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-/* printf("Stop db %x\n", phpDatabase->connection); */
- if (!fbcdcStopDatabase(phpLink->connection))
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
-
- for (i=0; i < 20; i++)
- {
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBStopped) break;
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_db_status(string database_name [, resource link_identifier])
- Gets the status (Stopped, Starting, Running, Stopping) for a given database */
-PHP_FUNCTION(fbsql_db_status)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (phpLink->execHandler) {
- RETURN_LONG(fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName));
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ mdOk
- */
-int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql)
-{
- FBCDatabaseConnection* c = link->connection;
- int result = 1;
- TSRMLS_FETCH();
-
- link->errorNo = 0;
- if (link->errorText)
- {
- free(link->errorText);
- link->errorText = NULL;
- }
- if (md == NULL)
- {
- link->errorNo = 1;
- link->errorText = strdup("Connection to database server was lost");
- if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, link->errorText);
- result = 0;
- }
- else if (fbcmdErrorsFound(md))
- {
- FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md);
- char* emg = fbcemdAllErrorMessages(emd);
- if (FB_SQL_G(generateWarnings))
- {
- if (emg)
- php_error(E_WARNING, "Error in statement: '%s' %s", sql, emg);
- else
- php_error(E_WARNING, "No message");
- }
- link->errorText = strdup(emg);
- link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);;
- free(emg);
- fbcemdRelease(emd);
- result = 0;
- }
- return result;
-}
-/* }}} */
-
-static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link)
-{
- PHPFBResult* result = NULL;
- FBCMetaData* md, *meta;
- char* tp;
- char* fh;
- unsigned int sR = 1, cR = 0;
-
- meta = fbcdcExecuteDirectSQL(link->connection, sql);
-
- if (!mdOk(link, meta, sql))
- {
- fbcmdRelease(meta);
- ZVAL_BOOL(return_value, 0)
- }
- else {
- if (fbcmdHasMetaDataArray(meta)) {
- sR = fbcmdMetaDataArrayCount(meta);
- md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR);
- }
- else
- md = meta;
-
- tp = fbcmdStatementType(md);
-
- if ((tp[0] == 'C') || (tp[0] == 'R'))
- {
- if (sR == 1 && md) fbcmdRelease(md);
- ZVAL_BOOL(return_value, 1)
- }
- else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh))
- {
- result = emalloc(sizeof(PHPFBResult));
- result->link = link;
- result->fetchHandle = fh;
- result->ResultmetaData = meta;
- result->metaData = md;
- result->rowHandler = NULL;
- result->batchSize = FB_SQL_G(batchSize);
- result->rowCount = 0x7fffffff;
- result->columnCount = 0;
- result->rowIndex = 0;
- result->columnIndex = 0;
- result->row = NULL;
- result->array = NULL;
- result->list = NULL;
- result->selectResults = sR;
- result->currentResult = cR;
- result->lobMode = FBSQL_LOB_DIRECT;
-
- if (tp[0] != 'E')
- {
- result->columnCount = fbcmdColumnCount(md);
- result->fetchHandle = fh;
- result->batchSize = FB_SQL_G(batchSize);
- }
- else
- {
- char* r = fbcmdMessage(result->metaData);
- fbcrhConvertToOutputCharSet(fbcdcOutputCharacterSet(link->connection), (unsigned char *)r);
- if ((result->list = fbcplParse(r)))
- {
- result->rowCount = fbcplCount(result->list);
- result->columnCount = 7;
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
- }
- else if (tp[0] == 'I' || tp[0] == 'U')
- {
- if (tp[0] == 'I') link->insert_id = fbcmdRowIndex(md);
- if (sR == 1 && md) fbcmdRelease(md);
- ZVAL_BOOL(return_value, 1)
- }
- else if(tp[0] == 'A' || tp[0] == 'D')
- {
- if (sR == 1 && md) fbcmdRelease(md);
- ZVAL_BOOL(return_value, 1)
- }
- if (link) link->affectedRows = fbcmdRowCount(md);
- }
-}
-
-/* {{{ proto resource fbsql_query(string query [, resource link_identifier])
- Send one or more SQL statements to the server and execute them */
-PHP_FUNCTION(fbsql_query)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **query;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_db_query(string database_name, string query [, resource link_identifier])
- Send one or more SQL statements to a specified database on the server */
-PHP_FUNCTION(fbsql_db_query)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **dbname, **query;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(2, &dbname, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &dbname, &query, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
- convert_to_string_ex(dbname);
-
- if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) {
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_list_dbs([resource link_identifier])
- Retreive a list of all databases on the server */
-PHP_FUNCTION(fbsql_list_dbs)
-{
- PHPFBResult* phpResult;
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- phpResult = emalloc(sizeof(PHPFBResult));
- phpResult->link = phpLink;
- phpResult->fetchHandle = NULL;
- phpResult->rowHandler = NULL;
- phpResult->ResultmetaData = NULL;
- phpResult->metaData = NULL;
- phpResult->batchSize = FB_SQL_G(batchSize);
- phpResult->columnCount = 1;
- phpResult->rowIndex = 0;
- phpResult->columnIndex = 0;
- phpResult->row = NULL;
- phpResult->array = fbcehAvailableDatabases(phpLink->execHandler);
- phpResult->rowCount = fbaCount(phpResult->array);
- phpResult->list = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, phpResult, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_list_tables(string database [, int link_identifier])
- Retreive a list of all tables from the specifoied database */
-PHP_FUNCTION(fbsql_list_tables)
-{
- char* sql = "select t0.\"table_name\"from information_schema.tables t0, information_schema.SCHEMATA t1 where t0.schema_pk = t1.schema_pk and t1.\"schema_name\" = current_schema order by \"table_name\";";
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (databaseName == NULL) {
- php_fbsql_select_db(FB_SQL_G(databaseName), phpLink TSRMLS_CC);
- } else {
- php_fbsql_select_db(databaseName, phpLink TSRMLS_CC);
- }
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier])
- Retrieve a list of all fields for the specified database.table */
-PHP_FUNCTION(fbsql_list_fields)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name, **table_name;
- int id;
- char *databaseName, *tableName;
- char sql[1024];
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(2, &database_name, &table_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &database_name, &table_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
- convert_to_string_ex(table_name);
- tableName = Z_STRVAL_PP(table_name);
-
- if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- sprintf(sql, "SELECT * FROM %s WHERE 1=0;", tableName);
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_error([resource link_identifier])
- Returns the last error string */
-PHP_FUNCTION(fbsql_error)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (phpLink->errorText == NULL) {
- RETURN_FALSE;
- }
- else {
- RETURN_STRING(phpLink->errorText, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int fbsql_errno([resource link_identifier])
- Returns the last error code */
-PHP_FUNCTION(fbsql_errno)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- RETURN_LONG(phpLink->errorNo);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_warnings([int flag])
- Enable or disable FrontBase warnings */
-PHP_FUNCTION(fbsql_warnings)
-{
- int argc = ARG_COUNT(ht);
- zval **argv[1];
-
- if ((argc < 0) || (argc > 1)) WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(argc, &argv[0])==FAILURE) RETURN_FALSE;
- if (argc >= 1)
- {
- convert_to_long_ex(argv[0]);
- FB_SQL_G(generateWarnings) = Z_LVAL_PP(argv[0]) != 0;
- }
- RETURN_BOOL(FB_SQL_G(generateWarnings));
-}
-/* }}} */
-
-/* {{{ proto int fbsql_affected_rows([resource link_identifier])
- Get the number of rows affected by the last statement */
-PHP_FUNCTION(fbsql_affected_rows)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- RETURN_LONG(phpLink->affectedRows);
-}
-/* }}} */
-
-/* {{{ proto int fbsql_insert_id([resource link_identifier])
- Get the internal index for the last insert statement */
-PHP_FUNCTION(fbsql_insert_id)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- RETURN_LONG(phpLink->insert_id);
-}
-/* }}} */
-
-/* {{{ phpSizeOfInt
- */
-int phpSizeOfInt (int i)
-{
- int s = 1;
- if (i < 0)
- {
- s++;
- i = -i;
- }
- while ((i = i / 10)) s++;
- return s;
-}
-/* }}} */
-
-void phpfbColumnAsString (PHPFBResult* result, int column, void* data , int* length, char** value)
-{
- FBCMetaData* md = result->metaData;
- const FBCDatatypeMetaData* dtmd = fbcmdDatatypeMetaDataAtIndex(md, column);
- unsigned dtc = fbcdmdDatatypeCode(dtmd);
- switch (dtc)
- {
- case FB_Boolean:
- {
- unsigned char v = *((unsigned char*)(data));
- if (v == 255)
- phpfbestrdup("Unknown", length, value);
- else if (v == 0)
- phpfbestrdup("False", length, value);
- else
- phpfbestrdup("True", length, value);
- }
- break;
-
- case FB_PrimaryKey:
- case FB_Integer:
- {
- int v = *((int*)data);
- char b[128];
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_TinyInteger:
- {
- short int v = *((short int*)data);
- char b[128];
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_LongInteger:
- {
- FBLongInteger v = *((FBLongInteger*)data);
- char b[128];
-#ifdef PHP_WIN32
- sprintf(b, "%I64i", v);
-#else
- sprintf(b, "%ll", v);
-#endif
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_SmallInteger:
- {
- short v = *((short*)data);
- char b[128];
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_Float:
- case FB_Real:
- case FB_Double:
- case FB_Numeric:
- case FB_Decimal:
- {
- double v = *((double*)data);
- char b[128];
- sprintf(b, "%f", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_Character:
- case FB_VCharacter:
- {
- char* v = (char*)data;
- phpfbestrdup(v, length, value);
- }
- break;
-
- case FB_Bit:
- case FB_VBit:
- {
- const FBCColumnMetaData* clmd = fbcmdColumnMetaDataAtIndex(md, column);
- struct bitValue
- {
- unsigned int nBytes;
- unsigned char* bytes;
- };
- struct bitValue* ptr = data;
- unsigned nBits = ptr->nBytes * 8;
-
- if (dtc == FB_Bit) nBits = fbcdmdLength(fbccmdDatatype(clmd));
- if (nBits %8 == 0)
- {
- unsigned i;
- unsigned int l = nBits / 8;
- *length = l*2+3+1;
- if (value)
- {
- char* r = emalloc(l*2+3+1);
- r[0] = 'X';
- r[1] = '\'';
- for (i = 0; i < nBits / 8; i++)
- {
- char c[4];
- sprintf(c, "%02x", ptr->bytes[i]);
- r[i*2+2] = c[0];
- r[i*2+3] = c[1];
- }
- r[i*2+2] = '\'';
- r[i*2+3] = 0;
- *value = r;
- }
- }
- else
- {
- unsigned i;
- unsigned int l = nBits;
- *length = l*2+3+1;
- if (value)
- {
- char* r = emalloc(l*2+3+1);
- r[0] = 'B';
- r[1] = '\'';
- for (i = 0; i < nBits; i++)
- {
- int bit = 0;
- if (i/8 < ptr->nBytes) bit = ptr->bytes[i/8] & (1<<(7-(i%8)));
- r[i*2+2] = bit?'1':'0';
- }
- r[i*2+2] = '\'';
- r[i*2+3] = 0;
- *value = r;
- }
- }
- }
- break;
-
- case FB_Date:
- case FB_Time:
- case FB_TimeTZ:
- case FB_Timestamp:
- case FB_TimestampTZ:
- {
- char* v = (char*)data;
- phpfbestrdup(v, length, value);
- }
- break;
-
- case FB_YearMonth:
- {
- char b[128];
- int v = *((unsigned int*)data);
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_DayTime:
- {
- char b[128];
- double seconds = *((double*)data);
- sprintf(b, "%f", seconds);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_CLOB:
- case FB_BLOB:
- {
- if (*((unsigned char*) data) == '\1')
- { // Direct
- *length = ((FBCBlobDirect *)data)->blobSize;
- *value = estrndup((char *)((FBCBlobDirect *)data)->blobData, *length);
- }
- else
- {
- FBCBlobHandle *lobHandle;
- unsigned char *bytes = (unsigned char *)data;
- char *handle = (char *)(&bytes[1]);
- lobHandle = fbcbhInitWithHandle(handle);
- *length = fbcbhBlobSize(lobHandle);
-
- if (result->lobMode == FBSQL_LOB_HANDLE) {
- phpfbestrdup(fbcbhDescription(lobHandle), length, value);
- }
- else {
- if (dtc == FB_BLOB)
- *value = estrndup((char *)fbcdcReadBLOB(result->link->connection, lobHandle), *length);
- else
- *value = estrndup((char *)fbcdcReadCLOB(result->link->connection, lobHandle), *length);
- }
- fbcbhRelease(lobHandle);
- }
- }
- break;
-
- default:
- php_error(E_ERROR, "Unimplemented type");
- break;
- }
-}
-
-/* {{{ phpfbSqlResult
- */
-void phpfbSqlResult(INTERNAL_FUNCTION_PARAMETERS, PHPFBResult* result, int rowIndex, int columnIndex)
-{
- void** row;
- if (result->list)
- {
- FBCPList* columns = (FBCPList*)fbcplValueForKey(result->list, "COLUMNS");
- FBCPList* column = (FBCPList*)fbcplValueAtIndex(columns, result->rowIndex);
- if (columnIndex == 0)
- { /* Name */
- FBCPList* name = (FBCPList*)fbcplValueForKey(column, "NAME");
- RETURN_STRING((char *)fbcplString((FBCPList*)name), 1);
- }
- else if (columnIndex == 2)
- { /* Length */
- FBCPList* name = (FBCPList*)fbcplValueForKey(column, "WIDTH");
- RETURN_STRING((char *)fbcplString((FBCPList*)name), 1);
- }
- else if (columnIndex == 1)
- { /* Type */
- FBCPList* name = (FBCPList*)fbcplValueForKey(column, "DATATYPE");
- RETURN_STRING((char *)fbcplString((FBCPList*)name), 1);
- }
- else if (columnIndex == 3)
- { /* Flags */
- RETURN_STRING("", 1);
- }
- else
- {
- RETURN_STRING("", 1);
- }
- }
- else if (result->array)
- { /* Special case for get dbs */
- RETURN_STRING(fbaObjectAtIndex(result->array, rowIndex), 1);
- }
- else if (!phpfbFetchRow(result, rowIndex))
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "No such row %d in result set %d", rowIndex, rowIndex);
- RETURN_FALSE;
- }
- else if (columnIndex >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "No such column %d in result set %d", columnIndex, rowIndex);
- RETURN_FALSE;
- }
- else
- {
- row = fbcrhRowAtIndex(result->rowHandler, rowIndex);
- if (row == NULL)
- {
- RETURN_FALSE;
- }
- else if (row[columnIndex])
- {
- phpfbColumnAsString(result, columnIndex, row[columnIndex], &Z_STRLEN_P(return_value), &Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- }
- else
- {
- RETURN_NULL();
- }
- }
-}
-/* }}} */
-
-/* {{{ proto mixed fbsql_result(int result [, int row [, mixed field]])
- ??? */
-PHP_FUNCTION(fbsql_result)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **row = NULL, **field = NULL;
- int rowIndex;
- int columnIndex;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &row)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &fbsql_result_index, &row, &field)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- rowIndex = result->rowIndex;
- if (row)
- {
- convert_to_long_ex(row);
- rowIndex = Z_LVAL_PP(row);
- }
-
- columnIndex = result->columnIndex;
- if (field)
- {
- if ((Z_TYPE_PP(field) == IS_STRING) && (result->metaData))
- {
- for (columnIndex =0; columnIndex < result->columnCount; columnIndex ++)
- {
- const FBCColumnMetaData* cmd = fbcmdColumnMetaDataAtIndex(result->metaData, columnIndex);
- const char* lbl = fbccmdLabelName(cmd);
- if (strcmp((char*)lbl, Z_STRVAL_PP(field)) == 0) break;
- }
- if (columnIndex == result->columnCount) RETURN_FALSE;
- }
- else
- {
- convert_to_long_ex(field);
- columnIndex = Z_LVAL_PP(field);
- if (columnIndex < 0)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Illegal column index - %d", columnIndex);
- RETURN_FALSE;
- }
- }
- }
-
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, rowIndex, columnIndex);
-
- result->columnIndex++;
- if (result->columnIndex == result->columnCount)
- {
- result->rowIndex++;
- result->columnIndex = 0;
- }
-}
-/* }}} */
-
-/* {{{ proto int fbsql_next_result(int result)
- Switch to the next result if multiple results are available */
-PHP_FUNCTION(fbsql_next_result)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- result->currentResult++;
- if (result->currentResult < result->selectResults) {
- if (result->fetchHandle) {
- FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle);
- fbcmdRelease(md);
- }
- if (result->rowHandler) fbcrhRelease(result->rowHandler);
- result->metaData = (FBCMetaData*)fbcmdMetaDataAtIndex(result->ResultmetaData, result->currentResult);
- result->fetchHandle = fbcmdFetchHandle(result->metaData);
- result->rowHandler = NULL;
- result->batchSize = FB_SQL_G(batchSize);
- result->rowCount = 0x7fffffff;
- result->columnCount = fbcmdColumnCount(result->metaData);;
- result->rowIndex = 0;
- result->columnIndex = 0;
- result->row = NULL;
- result->array = NULL;
- result->list = NULL;
- if (result->link)
- result->link->affectedRows = fbcmdRowCount(result->metaData);
-
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int fbsql_num_rows(int result)
- Get number of rows */
-PHP_FUNCTION(fbsql_num_rows)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
- int rowCount;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- if (result->array)
- rowCount = result->rowCount;
- else {
- rowCount = fbcmdRowCount(result->metaData);
- if (rowCount == -1)
- {
- phpfbFetchRow(result, 0x7fffffff);
- rowCount = result->rowCount;
- }
- }
- RETURN_LONG(rowCount);
-}
-/* }}} */
-
-/* {{{ proto int fbsql_num_fields(int result)
- Get number of fields in the result set */
-PHP_FUNCTION(fbsql_num_fields)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- RETURN_LONG(result->columnCount);
-}
-/* }}} */
-
-/* {{{ proto array fbsql_fetch_row(resource result)
- Fetch a row of data. Returns an indexed array */
-PHP_FUNCTION(fbsql_fetch_row)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_NUM);
-}
-/* }}} */
-
-/* {{{ proto object fbsql_fetch_assoc(resource result)
- Detch a row of data. Returns an assoc array */
-PHP_FUNCTION(fbsql_fetch_assoc)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC);
-}
-/* }}} */
-
-/* {{{ proto object fbsql_fetch_object(resource result [, int result_type])
- Fetch a row of data. Returns an object */
-PHP_FUNCTION(fbsql_fetch_object)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array fbsql_fetch_array(resource result [, int result_type])
- Fetches a result row as an array (associative, numeric or both)*/
-PHP_FUNCTION(fbsql_fetch_array)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_BOTH);
-}
-/* }}} */
-
-static void _parse_list(zval** return_value, FBCPList* list)
-{
- int count = fbcplCount(list);
- int i,j;
-
- for (i=0; i<count; i++)
- {
- char* key = (char*)fbcplKeyAtIndex(list, i);
- FBCPList* value = (FBCPList*)fbcplValueForKey(list, key);
- if (fbcplIsDictionary(value))
- {
- zval *value_array;
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- _parse_list(&value_array, value);
- add_assoc_zval(*return_value, key, value_array);
- }
- else if (fbcplIsArray(value))
- {
- zval *value_array;
- int valcount = fbcplCount(value);
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- for (j=0; j<valcount; j++)
- {
- FBCPList* arrayValue = (FBCPList*)fbcplValueAtIndex(value, j);
- if (fbcplIsString(arrayValue))
- add_index_string(value_array, j, (char*)fbcplString(arrayValue), 1);
- else {
- _parse_list(&value_array, arrayValue);
- }
- }
- add_assoc_zval(*return_value, key, value_array);
- }
- else if (fbcplIsString(value)) {
- add_assoc_string(*return_value, key, (char*)fbcplString(value), 1);
- }
- }
-}
-
-static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
-
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **zresult_type = NULL;
- int rowIndex;
- int i;
- void **row;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &zresult_type)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(zresult_type);
- result_type = Z_LVAL_PP(zresult_type);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- rowIndex = result->rowIndex;
- if (((result_type & FBSQL_NUM) != FBSQL_NUM) && ((result_type & FBSQL_ASSOC) != FBSQL_ASSOC))
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Illegal result type use FBSQL_NUM, FBSQL_ASSOC, or FBSQL_BOTH.");
- RETURN_FALSE;
- }
- if (array_init(return_value)==FAILURE)
- {
- RETURN_FALSE;
- }
- if (result->fetchHandle == NULL)
- {
- if (result->array == NULL && result->list == NULL)
- {
- RETURN_FALSE;
- }
- if (result->rowIndex >= result->rowCount)
- {
- RETURN_FALSE;
- }
- if (result->list) {
- char* key;
- FBCPList* value;
-
- value = (FBCPList*)fbcplValueAtIndex(result->list, result->rowIndex);
- key = (char*)fbcplKeyAtIndex(result->list, result->rowIndex);
-
- if (key && key[0] == 2)
- key = NULL;
-
- if (fbcplIsDictionary(value)) {
- zval *value_array;
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- _parse_list(&value_array, value);
- if (result_type & FBSQL_NUM || key == NULL)
- {
- add_index_zval(return_value, 0, value_array);
- }
- if (result_type & FBSQL_ASSOC && key != NULL)
- {
- add_assoc_zval(return_value, key, value_array);
- }
- }
- else if (fbcplIsArray(value)) {
- zval *value_array;
- int valcount = fbcplCount(value);
- int j;
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- for (j=0; j<valcount; j++)
- {
- FBCPList* arrayValue = (FBCPList*)fbcplValueAtIndex(value, j);
- if (fbcplIsString(arrayValue))
- add_index_string(value_array, j, (char*)fbcplString(arrayValue), 1);
- else {
- _parse_list(&value_array, arrayValue);
- }
- }
- if (result_type & FBSQL_NUM || key == NULL)
- {
- add_index_zval(return_value, 0, value_array);
- }
- if (result_type & FBSQL_ASSOC && key != NULL)
- {
- add_assoc_zval(return_value, key, value_array);
- }
- }
- else if (fbcplIsString(value)) {
- if (result_type & FBSQL_NUM)
- {
- add_index_string(return_value, 0, (char*)fbcplString(value), 1);
- }
- if (result_type & FBSQL_ASSOC)
- {
- add_assoc_string(return_value, key, (char*)fbcplString(value), 1);
- }
- }
- }
- else {
- if (result_type & FBSQL_NUM)
- {
- add_index_string(return_value, 0, estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
- }
- if (result_type & FBSQL_ASSOC)
- {
- add_assoc_string(return_value, "Database", estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
- }
- }
- }
- else {
- if (result->rowCount == 0) {
- RETURN_FALSE;
- }
- if (result->rowCount == 0x7fffffff)
- {
- if (!phpfbFetchRow(result, result->rowIndex)) {
- RETURN_FALSE;
- }
- }
- row = fbcrhRowAtIndex(result->rowHandler, rowIndex);
- if (row == NULL)
- {
- RETURN_FALSE;
- }
- for (i=0; i < result->columnCount; i++)
- {
- if (row[i])
- {
- char* value;
- unsigned int length;
- unsigned int c = 0;
- phpfbColumnAsString(result, i, row[i], &length, &value);
- if (result_type & FBSQL_NUM)
- {
- add_index_stringl(return_value, i, value, length, c);
- c = 1;
- }
- if (result_type & FBSQL_ASSOC)
- {
- char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i));
- add_assoc_stringl(return_value, key, value, length, c);
- }
- }
- else
- {
- if (result_type & FBSQL_NUM)
- {
- add_index_unset(return_value, i);
- }
- if (result_type & FBSQL_ASSOC)
- {
- char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i));
- add_assoc_unset(return_value, key);
- }
- }
- }
- }
- result->rowIndex++;
- result->columnIndex = 0;
-}
-
-/* {{{ proto int fbsql_data_seek(int result, int row_number)
- Move the internal row counter to the specified row_number */
-PHP_FUNCTION(fbsql_data_seek)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **row_number = NULL;
- unsigned int rowIndex;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &row_number)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- convert_to_long_ex(row_number);
- rowIndex = Z_LVAL_PP(row_number);
-
- if (rowIndex < 0)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Illegal row_index (%i)", rowIndex);
- RETURN_FALSE;
- }
-
- if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, rowIndex);
- if (rowIndex > result->rowCount) RETURN_FALSE;
- result->rowIndex = rowIndex;
- result->columnIndex = 0;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array fbsql_fetch_lengths(int result)
- Returns an array of the lengths of each column in the result set */
-PHP_FUNCTION(fbsql_fetch_lengths)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
- int i;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- if (result->row == NULL) RETURN_FALSE;
- if (array_init(return_value)==FAILURE) RETURN_FALSE;
- for (i=0; i < result->columnCount; i++)
- {
- unsigned length = 0;
- if (result->row[i]) phpfbColumnAsString(result, i, result->row[i], &length, NULL);
- add_index_long(return_value, i, length);
- }
-}
-/* }}} */
-
-/* {{{ proto object fbsql_fetch_field(int result [, int field_index])
- Get the field properties for a specified field_index */
-PHP_FUNCTION(fbsql_fetch_field)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (object_init(return_value)==FAILURE)
- {
- RETURN_FALSE;
- }
- add_property_string(return_value, "name", (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
- add_property_string(return_value, "table", (char*)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
- add_property_long(return_value, "max_length", fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column))));
- add_property_string(return_value, "type", (char*)fbcdmdDatatypeString(fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1);
- add_property_long(return_value, "not_null", !fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column)));
-/* Remember to add the rest */
-/* add_property_long(return_value, "primary_key", IS_PRI_KEY(fbsql_field->flags)?1:0); */
-/* add_property_long(return_value, "multiple_key", (fbsql_field->flags&MULTIPLE_KEY_FLAG?1:0)); */
-/* add_property_long(return_value, "unique_key", (fbsql_field->flags&UNIQUE_KEY_FLAG?1:0)); */
-/* add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(fbsql_field))?1:0); */
-/* add_property_long(return_value, "blob", IS_BLOB(fbsql_field->flags)?1:0); */
-/* add_property_long(return_value, "unsigned", (fbsql_field->flags&UNSIGNED_FLAG?1:0)); */
-/* add_property_long(return_value, "zerofill", (fbsql_field->flags&ZEROFILL_FLAG?1:0)); */
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_field_seek(int result [, int field_index])
- ??? */
-PHP_FUNCTION(fbsql_field_seek)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
-
- result->columnIndex = column;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_name(int result [, int field_index])
- Get the column name for a specified field_index */
-PHP_FUNCTION(fbsql_field_name)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (result->list)
- {
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 0);
- }
- else if (result->metaData)
- {
- RETURN_STRING((char *)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
- result->columnIndex = column;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_table(int result [, int field_index])
- Get the table name for a specified field_index */
-PHP_FUNCTION(fbsql_field_table)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- RETURN_STRING((char *)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_len(int result [, int field_index])
- Get the column length for a specified field_index */
-PHP_FUNCTION(fbsql_field_len)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (result->list)
- {
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 2);
- }
- else if (result->metaData)
- {
- RETURN_LONG(fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column))));
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_type(int result [, int field_index])
- Get the field type for a specified field_index */
-PHP_FUNCTION(fbsql_field_type)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (result->list)
- {
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 1);
- }
- else if (result->metaData)
- {
- RETURN_STRING((char *)fbcdmdDatatypeString (fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1);
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_flags(int result [, int field_index])
- ??? */
-PHP_FUNCTION(fbsql_field_flags)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
- char buf[512];
- int len;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- strcpy(buf, "");
- if (!fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column))) {
- strcat(buf, "not_null ");
- }
-#if 0
- if (IS_PRI_KEY(fbsql_field->flags)) {
- strcat(buf, "primary_key ");
- }
- if (fbsql_field->flags&UNIQUE_KEY_FLAG) {
- strcat(buf, "unique_key ");
- }
- if (fbsql_field->flags&MULTIPLE_KEY_FLAG) {
- strcat(buf, "multiple_key ");
- }
- if (IS_BLOB(fbsql_field->flags)) {
- strcat(buf, "blob ");
- }
- if (fbsql_field->flags&UNSIGNED_FLAG) {
- strcat(buf, "unsigned ");
- }
- if (fbsql_field->flags&ZEROFILL_FLAG) {
- strcat(buf, "zerofill ");
- }
- if (fbsql_field->flags&BINARY_FLAG) {
- strcat(buf, "binary ");
- }
- if (fbsql_field->flags&ENUM_FLAG) {
- strcat(buf, "enum ");
- }
- if (fbsql_field->flags&AUTO_INCREMENT_FLAG) {
- strcat(buf, "auto_increment ");
- }
- if (fbsql_field->flags&TIMESTAMP_FLAG) {
- strcat(buf, "timestamp ");
- }
-#endif
- len = strlen(buf);
- /* remove trailing space, if present */
- if (len && buf[len-1] == ' ') {
- buf[len-1] = 0;
- len--;
- }
- RETURN_STRING(buf, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_table_name(resource result, int index)
- Retreive the table name for index after a call to fbsql_list_tables() */
-PHP_FUNCTION(fbsql_table_name)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **table_index;
- unsigned index;
- char* value;
- unsigned int length;
- void** row;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &table_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(table_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- index = Z_LVAL_PP(table_index);
- if (index < 0)
- {
- if (FB_SQL_G(generateWarnings))
- php_error(E_WARNING, "Illegal index (%i)", index);
- RETURN_FALSE;
- }
-
- if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, index);
- if (index > result->rowCount) RETURN_FALSE;
- result->rowIndex = index;
- result->columnIndex = 0;
-
- row = fbcrhRowAtIndex(result->rowHandler, index);
- phpfbColumnAsString(result, 0, row[0], &length, &value);
- RETURN_STRINGL(value, length, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_free_result(resource result)
- free the memory used to store a result */
-PHP_FUNCTION(fbsql_free_result)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- zend_list_delete(Z_LVAL_PP(fbsql_result_index));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array fbsql_get_autostart_info([resource link_identifier])
- ??? */
-PHP_FUNCTION(fbsql_get_autostart_info)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
- FBCAutoStartInfo* asInfo;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (phpLink->execHandler == NULL) {
- if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "No valid Exec handler available for this connection");
- RETURN_FALSE;
- }
- else {
- array_init(return_value);
- asInfo = fbcehGetAutoStartInfo(phpLink->execHandler);
- if (asInfo != NULL) {
- unsigned i;
-
- for (i=0; i<fbaCount(asInfo->infoLines); i++) {
- FBArray* infoLine = fbaObjectAtIndex(asInfo->infoLines, i);
-// if (fbaCount(infoLine) == 2) {
-// fbaObjectAtIndex(infoLine, 0);
-// fbaObjectAtIndex(infoLine, 1);
-// }
-// else {
- add_index_string(return_value, i, fbaObjectAtIndex(infoLine, 0), 1);
-// }
-
- }
- }
- }
-}
-/* }}} */
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/fbsql/php_fbsql.h b/ext/fbsql/php_fbsql.h
deleted file mode 100644
index f5c41aec18..0000000000
--- a/ext/fbsql/php_fbsql.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Frank M. Kromann <frank@frontbase.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define HAVE_FBSQL 1
-
-#ifndef _PHP_FBSQL_H
-#define _PHP_FBSQL_H
-
-#if COMPILE_DL_FBSQL
-#undef HAVE_FBSQL
-#define HAVE_FBSQL 1
-#endif
-#if HAVE_FBSQL
-
-extern zend_module_entry fbsql_module_entry;
-#define fbsql_module_ptr &fbsql_module_entry
-
-#include <FBCAccess/FBCAccess.h>
-
-PHP_MINIT_FUNCTION(fbsql);
-PHP_MSHUTDOWN_FUNCTION(fbsql);
-PHP_RINIT_FUNCTION(fbsql);
-PHP_RSHUTDOWN_FUNCTION(fbsql);
-PHP_MINFO_FUNCTION(fbsql);
-PHP_FUNCTION(fbsql_connect);
-PHP_FUNCTION(fbsql_pconnect);
-PHP_FUNCTION(fbsql_close);
-PHP_FUNCTION(fbsql_select_db);
-PHP_FUNCTION(fbsql_change_user);
-PHP_FUNCTION(fbsql_create_db);
-PHP_FUNCTION(fbsql_drop_db);
-PHP_FUNCTION(fbsql_start_db);
-PHP_FUNCTION(fbsql_stop_db);
-PHP_FUNCTION(fbsql_db_status);
-PHP_FUNCTION(fbsql_query);
-PHP_FUNCTION(fbsql_db_query);
-PHP_FUNCTION(fbsql_list_dbs);
-PHP_FUNCTION(fbsql_list_tables);
-PHP_FUNCTION(fbsql_list_fields);
-PHP_FUNCTION(fbsql_error);
-PHP_FUNCTION(fbsql_errno);
-PHP_FUNCTION(fbsql_affected_rows);
-PHP_FUNCTION(fbsql_insert_id);
-PHP_FUNCTION(fbsql_result);
-PHP_FUNCTION(fbsql_next_result);
-PHP_FUNCTION(fbsql_num_rows);
-PHP_FUNCTION(fbsql_num_fields);
-PHP_FUNCTION(fbsql_fetch_row);
-PHP_FUNCTION(fbsql_fetch_array);
-PHP_FUNCTION(fbsql_fetch_assoc);
-PHP_FUNCTION(fbsql_fetch_object);
-PHP_FUNCTION(fbsql_data_seek);
-PHP_FUNCTION(fbsql_fetch_lengths);
-PHP_FUNCTION(fbsql_fetch_field);
-PHP_FUNCTION(fbsql_field_seek);
-PHP_FUNCTION(fbsql_free_result);
-PHP_FUNCTION(fbsql_field_name);
-PHP_FUNCTION(fbsql_field_table);
-PHP_FUNCTION(fbsql_field_len);
-PHP_FUNCTION(fbsql_field_type);
-PHP_FUNCTION(fbsql_field_flags);
-PHP_FUNCTION(fbsql_table_name);
-
-PHP_FUNCTION(fbsql_set_transaction);
-PHP_FUNCTION(fbsql_autocommit);
-PHP_FUNCTION(fbsql_commit);
-PHP_FUNCTION(fbsql_rollback);
-
-PHP_FUNCTION(fbsql_create_blob);
-PHP_FUNCTION(fbsql_create_clob);
-PHP_FUNCTION(fbsql_set_lob_mode);
-PHP_FUNCTION(fbsql_read_blob);
-PHP_FUNCTION(fbsql_read_clob);
-PHP_FUNCTION(fbsql_blob_size);
-PHP_FUNCTION(fbsql_clob_size);
-
-PHP_FUNCTION(fbsql_hostname);
-PHP_FUNCTION(fbsql_database);
-PHP_FUNCTION(fbsql_database_password);
-PHP_FUNCTION(fbsql_username);
-PHP_FUNCTION(fbsql_password);
-PHP_FUNCTION(fbsql_warnings);
-
-PHP_FUNCTION(fbsql_get_autostart_info);
-//PHP_FUNCTION(fbsql_set_autostart_info);
-
-static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type);
-static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-
-ZEND_BEGIN_MODULE_GLOBALS(fbsql)
- long allowPersistent;
- long generateWarnings;
- long autoCommit;
- long maxPersistent;
- long maxLinks;
- long maxConnections;
- long maxResults;
- long batchSize;
- char *hostName;
- char *databaseName;
- char *databasePassword;
- char *userName;
- char *userPassword;
- long persistentCount;
- long linkCount;
- long linkIndex;
-
-ZEND_END_MODULE_GLOBALS(fbsql)
-
-#ifdef ZTS
-# define FB_SQL_G(v) TSRMG(fbsql_globals_id, zend_fbsql_globals *, v)
-#else
-# define FB_SQL_G(v) (fbsql_globals.v)
-#endif
-
-//#ifndef ZTS // No need for external definitions
-//extern fbsql_module* phpfbModule;
-//#endif
-
-#else // HAVE_FBSQL
-
-#define fbsql_module_ptr NULL
-#error not ok
-#endif // HAVE_FBSQL
-
-#define phpext_fbsql_ptr fbsql_module_ptr
-
-#endif /* _PHP_FBSQL_H */
diff --git a/ext/fdf/CREDITS b/ext/fdf/CREDITS
deleted file mode 100644
index 57c33cc4b3..0000000000
--- a/ext/fdf/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FDF
-Uwe Steinmann
diff --git a/ext/fdf/config.m4 b/ext/fdf/config.m4
deleted file mode 100644
index 8c2e7a0096..0000000000
--- a/ext/fdf/config.m4
+++ /dev/null
@@ -1,39 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(fdftk, for FDF support,
-[ --with-fdftk[=DIR] Include FDF support.])
-
-if test "$PHP_FDFTK" != "no"; then
-
- for i in /usr /usr/local $PHP_FDFTK; do
- if test -r $i/include/FdfTk.h; then
- FDFTK_DIR=$i
- elif test -r $i/include/fdftk.h; then
- AC_DEFINE(HAVE_FDFTK_H_LOWER,1,[ ])
- FDFTK_DIR=$i
- fi
- done
-
- if test -z "$FDFTK_DIR"; then
- AC_MSG_ERROR(FdfTk.h or fdftk.h not found. Please reinstall the fdftk distribution.)
- fi
-
- PHP_ADD_INCLUDE($FDFTK_DIR/include)
-
- FDFLIBRARY=""
- for i in fdftk FdfTk; do
- PHP_CHECK_LIBRARY($i, FDFOpen, [FDFLIBRARY=$i], [], [-L$FDFTK_DIR/lib -lm])
- done
-
- if test -z "$FDFLIBRARY"; then
- AC_MSG_ERROR(fdftk module requires >= fdftk 2.0)
- fi
-
- AC_DEFINE(HAVE_FDFLIB,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH($FDFLIBRARY, $FDFTK_DIR/lib, FDFTK_SHARED_LIBADD)
-
- PHP_SUBST(FDFTK_SHARED_LIBADD)
- PHP_NEW_EXTENSION(fdf, fdf.c, $ext_shared)
-fi
diff --git a/ext/fdf/fdf.c b/ext/fdf/fdf.c
deleted file mode 100644
index cd2e0a3245..0000000000
--- a/ext/fdf/fdf.c
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- | Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from
- http://beta1.adobe.com/ada/acrosdk/forms.html. */
-
-/* Note that there is no code from the FdfTk lib in this file */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_FDFLIB
-
-#include "SAPI.h"
-#include "ext/standard/info.h"
-#include "php_open_temporary_file.h"
-#include "php_variables.h"
-#include "php_fdf.h"
-
-static int le_fdf;
-
-SAPI_POST_HANDLER_FUNC(fdf_post_handler);
-
-/* {{{ fdf_functions[]
- */
-function_entry fdf_functions[] = {
- PHP_FE(fdf_open, NULL)
- PHP_FE(fdf_create, NULL)
- PHP_FE(fdf_close, NULL)
- PHP_FE(fdf_save, NULL)
- PHP_FE(fdf_get_value, NULL)
- PHP_FE(fdf_set_value, NULL)
- PHP_FE(fdf_next_field_name, NULL)
- PHP_FE(fdf_set_ap, NULL)
- PHP_FE(fdf_set_status, NULL)
- PHP_FE(fdf_get_status, NULL)
- PHP_FE(fdf_set_file, NULL)
- PHP_FE(fdf_get_file, NULL)
- PHP_FE(fdf_add_template, NULL)
- PHP_FE(fdf_set_flags, NULL)
- PHP_FE(fdf_set_opt, NULL)
- PHP_FE(fdf_set_submit_form_action, NULL)
- PHP_FE(fdf_set_javascript_action, NULL)
- PHP_FE(fdf_set_encoding, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry fdf_module_entry = {
- STANDARD_MODULE_HEADER,
- "fdf",
- fdf_functions,
- PHP_MINIT(fdf),
- PHP_MSHUTDOWN(fdf),
- NULL,
- NULL,
- PHP_MINFO(fdf),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_FDF
-ZEND_GET_MODULE(fdf)
-#endif
-
-
-static void phpi_FDFClose(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- FDFDoc fdf = (FDFDoc)rsrc->ptr;
-
- (void) FDFClose(fdf);
-}
-
-
-#define FDF_POST_CONTENT_TYPE "application/vnd.fdf"
-
-static sapi_post_entry php_fdf_post_entry = {
- FDF_POST_CONTENT_TYPE,
- sizeof(FDF_POST_CONTENT_TYPE)-1,
- sapi_read_standard_form_data,
- fdf_post_handler
-};
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(fdf)
-{
- FDFErc err;
-
- le_fdf = zend_register_list_destructors_ex(phpi_FDFClose, NULL, "fdf", module_number);
-
- /* add handler for Acrobat FDF form post requests */
- sapi_register_post_entry(&php_fdf_post_entry);
-
-
- /* Constants used by fdf_set_opt() */
- REGISTER_LONG_CONSTANT("FDFValue", FDFValue, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFStatus", FDFStatus, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFile", FDFFile, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFID", FDFID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFf", FDFFf, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFSetFf", FDFSetFf, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFClearFf", FDFClearFf, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFlags", FDFFlags, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFSetF", FDFSetF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFClrF", FDFClrF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAP", FDFAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAS", FDFAS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAction", FDFAction, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAA", FDFAA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAPRef", FDFAPRef, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFIF", FDFIF, CONST_CS | CONST_PERSISTENT);
-
- /* Constants used by fdf_set_javascript_action() */
- REGISTER_LONG_CONSTANT("FDFEnter", FDFEnter, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFExit", FDFExit, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFDown", FDFDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFUp", FDFUp, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFormat", FDFFormat, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFValidate", FDFValidate, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFKeystroke", FDFKeystroke, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFCalculate", FDFCalculate, CONST_CS | CONST_PERSISTENT);
-
-#ifdef PHP_WIN32
- return SUCCESS;
-#endif
- if((err = FDFInitialize()) == FDFErcOK) return SUCCESS;
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(fdf)
-{
- /* need to use a PHPAPI function here because it is external module in windows */
- php_info_print_table_start();
- php_info_print_table_row(2, "FDF Support", "enabled");
- php_info_print_table_row(2, "FdfTk Version", FDFGetVersion() );
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(fdf)
-{
- FDFErc err;
-
- /* remove handler for Acrobat FDF form post requests */
- sapi_unregister_post_entry(&php_fdf_post_entry);
-
-#ifdef PHP_WIN32
- return SUCCESS;
-#endif
- if((err = FDFFinalize()) == FDFErcOK) return SUCCESS;
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ proto int fdf_open(string filename)
- Opens a new FDF document */
-PHP_FUNCTION(fdf_open)
-{
- zval **file;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(file);
-
- err = FDFOpen(Z_STRVAL_PP(file), 0, &fdf);
-
- if(err != FDFErcOK || !fdf) {
- php_error(E_WARNING, "Could not open fdf document: %s", Z_STRVAL_PP(file));
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
-}
-/* }}} */
-
-/* {{{ proto int fdf_create(void)
- Creates a new FDF document */
-PHP_FUNCTION(fdf_create)
-{
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- err = FDFCreate(&fdf);
-
- if(err != FDFErcOK || !fdf) {
- php_error(E_WARNING, "Error creating new fdf document!");
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_close(int fdfdoc)
- Closes the FDF document */
-PHP_FUNCTION(fdf_close)
-{
- zval **fdfp;
- FDFDoc fdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
- zend_list_delete(Z_RESVAL_PP(fdfp));
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_value(int fdfdoc, string fieldname)
- Gets the value of a field as string */
-PHP_FUNCTION(fdf_get_value)
-{
- zval **fdfp, **fieldname;
- ASInt32 nr, size = 256;
- char *buffer;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &fieldname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
-
- buffer = emalloc(size);
- err = FDFGetValue(fdf, Z_STRVAL_PP(fieldname), buffer, size-1, &nr);
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buffer = erealloc(buffer, nr+1);
- err = FDFGetValue(fdf, Z_STRVAL_PP(fieldname), buffer, nr, &nr);
- }
-
- if(err != FDFErcOK) {
- php_error(E_WARNING, "Error getting value of %s", Z_STRVAL_PP(fieldname));
- efree(buffer);
- RETURN_FALSE;
- }
-
- RETVAL_STRING(buffer, 1);
- efree(buffer);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_value(int fdfdoc, string fieldname, string value, int isname)
- Sets the value of a field */
-PHP_FUNCTION(fdf_set_value)
-{
- zval **fdfp, **fieldname, **value, **isname;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &value, &isname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_string_ex(value);
- convert_to_long_ex(isname);
-
- err = FDFSetValue(fdf, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value), (ASBool) Z_LVAL_PP(isname));
- if(err != FDFErcOK) {
- php_error(E_WARNING, "Error setting field: %s to value: %s", Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string fdf_next_field_name(int fdfdoc [, string fieldname])
- Gets the name of the next field name or the first field name */
-PHP_FUNCTION(fdf_next_field_name)
-{
- zval **fdfp, **field;
- int argc=ZEND_NUM_ARGS();
- ASInt32 length=256, nr;
- char *buffer=NULL, *fieldname=NULL;
- FDFDoc fdf;
- FDFErc err;
-
- if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfp, &field) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- if(argc == 2) {
- convert_to_string_ex(field);
- fieldname = Z_STRVAL_PP(field);
- }
-
- buffer = emalloc(length);
- err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);
-
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buffer = erealloc(buffer, nr+1);
- err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);
- }
-
- if(err != FDFErcOK) {
- efree(buffer);
- php_error(E_WARNING,"Error getting next fieldname!");
- RETURN_FALSE;
- }
-
- RETVAL_STRING(buffer, 1);
- efree(buffer);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_ap(int fdfdoc, string fieldname, int face, string filename, int pagenr)
- Sets the appearence of a field */
-PHP_FUNCTION(fdf_set_ap)
-{
- zval **fdfp, **fieldname, **face, **filename, **pagenr;
- FDFDoc fdf;
- FDFErc err;
- FDFAppFace facenr;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &face, &filename, &pagenr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(face);
- convert_to_string_ex(filename);
- convert_to_long_ex(pagenr);
-
- switch(Z_LVAL_PP(face)) {
- case 1:
- facenr = FDFNormalAP;
- break;
- case 2:
- facenr = FDFRolloverAP;
- break;
- case 3:
- facenr = FDFDownAP;
- break;
- default:
- facenr = FDFNormalAP;
- }
-
- err = FDFSetAP(fdf, Z_STRVAL_PP(fieldname), facenr, NULL, Z_STRVAL_PP(filename), (ASInt32) Z_LVAL_PP(pagenr));
-
- /* This should be made more intelligent, ie. use switch() with the
- possible errors this function can return. Or create global error handler function.
- */
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting appearence of field: %s", Z_STRVAL_PP(fieldname));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_status(int fdfdoc, string status)
- Sets the value of /Status key */
-PHP_FUNCTION(fdf_set_status)
-{
- zval **fdfp, **status;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(status);
-
- err = FDFSetStatus(fdf, Z_STRVAL_PP(status));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting fdf document status key to: %s", Z_STRVAL_PP(status));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_status(int fdfdoc)
- Gets the value of /Status key */
-PHP_FUNCTION(fdf_get_status)
-{
- zval **fdfp;
- ASInt32 nr, size = 256;
- char *buf;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- buf = emalloc(size);
- err = FDFGetStatus(fdf, buf, size-1, &nr);
-
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buf = erealloc(buf, nr+1);
- err = FDFGetStatus(fdf, buf, size-1, &nr);
- }
-
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error getting fdf document status key!");
- efree(buf);
- RETURN_FALSE;
- }
-
- RETVAL_STRING(buf, 1);
- efree(buf);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_file(int fdfdoc, string filename)
- Sets the value of /F key */
-PHP_FUNCTION(fdf_set_file)
-{
- zval **fdfp, **filename;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(filename);
-
- err = FDFSetFile(fdf, Z_STRVAL_PP(filename));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting filename key to: %s", Z_STRVAL_PP(filename));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_file(int fdfdoc)
- Gets the value of /F key */
-PHP_FUNCTION(fdf_get_file)
-{
- zval **fdfp;
- ASInt32 nr, size = 256;
- char *buf;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- buf = emalloc(size);
- err = FDFGetFile(fdf, buf, size-1, &nr);
-
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buf = erealloc(buf, nr+1);
- err = FDFGetFile(fdf, buf, size-1, &nr);
- }
-
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error getting fdf document filename key!");
- efree(buf);
- RETURN_FALSE;
- }
-
- RETVAL_STRING(buf, 1);
- efree(buf);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_save(int fdfdoc, string filename)
- Writes out the FDF file */
-PHP_FUNCTION(fdf_save)
-{
- zval **fdfp, **filename;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(filename);
- err = FDFSave(fdf, Z_STRVAL_PP(filename));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error saving fdf document into filename: %s", Z_STRVAL_PP(filename));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto bool fdf_add_template(int fdfdoc, int newpage, string filename, string template, int rename)
- Adds a template into the FDF document */
-PHP_FUNCTION(fdf_add_template)
-{
- zval **fdfp, **newpage, **filename, **template, **rename;
- FDFDoc fdf;
- FDFErc err;
- pdfFileSpecRec filespec;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &newpage, &filename, &template, &rename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_long_ex(newpage);
- convert_to_string_ex(filename);
- convert_to_string_ex(template);
- convert_to_long_ex(rename);
-
- filespec.FS = NULL;
- filespec.F = Z_STRVAL_PP(filename);
- filespec.Mac = NULL;
- filespec.DOS = NULL;
- filespec.Unix = NULL;
- filespec.ID[0] = NULL;
- filespec.ID[1] = NULL;
- filespec.bVolatile = false;
-
- err = FDFAddTemplate(fdf, Z_LVAL_PP(newpage), &filespec, Z_STRVAL_PP(template), Z_LVAL_PP(rename));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error adding template: %s into fdf document", Z_STRVAL_PP(template));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_flags(int fdfdoc, string fieldname, int whichflags, int newflags)
- Sets flags for a field in the FDF document */
-PHP_FUNCTION(fdf_set_flags)
-{
- zval **fdfp, **fieldname, **flags, **newflags;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &flags, &newflags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(flags);
- convert_to_long_ex(newflags);
-
- err=FDFSetFlags(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(flags), Z_LVAL_PP(newflags));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting flags for field: %s", Z_STRVAL_PP(fieldname));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_opt(int fdfdoc, string fieldname, int element, string value, string name)
- Sets a value in the opt array for a field */
-PHP_FUNCTION(fdf_set_opt)
-{
- zval **fdfp, **fieldname, **element, **value, **name;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &element, &value, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(element);
- convert_to_string_ex(value);
- convert_to_string_ex(name);
-
- err = FDFSetOpt(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(element), Z_STRVAL_PP(value), Z_STRVAL_PP(name));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting FDF option for field: %s", Z_STRVAL_PP(fieldname));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_submit_form_action(int fdfdoc, string fieldname, int whichtrigger, string url, int flags)
- Sets the submit form action for a field */
-PHP_FUNCTION(fdf_set_submit_form_action)
-{
- zval **fdfp, **fieldname, **trigger, **url, **flags;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &trigger, &url, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(trigger);
- convert_to_string_ex(url);
- convert_to_long_ex(flags);
-
- err = FDFSetSubmitFormAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(url), Z_LVAL_PP(flags));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting FDF submit action for field: %s", Z_STRVAL_PP(fieldname));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_javascript_action(int fdfdoc, string fieldname, int whichtrigger, string script)
- Sets the javascript action for a field */
-PHP_FUNCTION(fdf_set_javascript_action)
-{
- zval **fdfp, **fieldname, **trigger, **script;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &trigger, &script) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(trigger);
- convert_to_string_ex(script);
-
- err = FDFSetJavaScriptAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(script));
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting FDF javascript action for field: %s", Z_STRVAL_PP(fieldname));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_encoding(int fdf_document, string encoding)
- Sets FDF encoding (either "Shift-JIS" or "Unicode") */
-PHP_FUNCTION(fdf_set_encoding)
-{
- zval **fdfp, **enc;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &enc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(enc);
-
- err = FDFSetEncoding(fdf, Z_STRVAL_PP(enc));
-
- if(err != FDFErcOK) {
- php_error(E_WARNING,"Error setting FDF encoding: %s", Z_STRVAL_PP(enc));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ SAPI_POST_HANDLER_FUNC
- * SAPI post handler for FDF forms */
-SAPI_POST_HANDLER_FUNC(fdf_post_handler)
-{
- FILE *fp;
- FDFDoc theFDF;
- char *name=NULL, *value=NULL, *p, *data;
- int name_len=0, value_len=0;
- char *lastfieldname =NULL;
- char *filename = NULL;
- FDFErc err;
- ASInt32 nBytes;
- zval *array_ptr = (zval *) arg;
-
- fp=php_open_temporary_file(NULL, "fdfdata.", &filename TSRMLS_CC);
- if(!fp) {
- if(filename) efree(filename);
- return;
- }
- fwrite(SG(request_info).post_data, SG(request_info).post_data_length, 1, fp);
- fclose(fp);
-
- /* Set HTTP_FDF_DATA variable */
- data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
- SET_VAR_STRINGL("HTTP_FDF_DATA", data, SG(request_info).post_data_length);
-
- err = FDFOpen(filename, 0, &theFDF);
-
- if(err==FDFErcOK){
- name = emalloc(name_len=256);
- value= emalloc(value_len=256);
- while (1) {
- err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes);
- if(err == FDFErcBufTooShort && nBytes >0 ) {
- name = erealloc(name, name_len=(nBytes+1));
- err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes);
- }
-
- if(err != FDFErcOK || nBytes == 0) break;
-
- if(lastfieldname) efree(lastfieldname);
- lastfieldname = estrdup(name);
-
- err = FDFGetValue(theFDF, name, NULL, 0, &nBytes);
- if(err != FDFErcOK && err != FDFErcNoValue ) break;
-
- if(value_len<nBytes+1) value = erealloc(value, value_len=(nBytes+1));
-
- if(nBytes>0) {
- err = FDFGetValue(theFDF, name, value, value_len-1, &nBytes);
- if(err == FDFErcOK && nBytes != 0) {
- for(p=value;*p;p++) if(*p=='\r') *p='\n';
- if(lastfieldname) efree(lastfieldname);
- lastfieldname = estrdup(name);
- php_register_variable(name, value, array_ptr TSRMLS_CC);
- }
- }
- }
-
- FDFClose(theFDF);
- VCWD_UNLINK((const char *)filename);
- efree(filename);
-
- if(name) efree(name);
- if(value) efree(value);
- if(lastfieldname) efree(lastfieldname);
- }
-}
-/* }}} */
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/fdf/fdf.dsp b/ext/fdf/fdf.dsp
deleted file mode 100644
index 487ca42828..0000000000
--- a/ext/fdf/fdf.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="fdf" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fdf - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "fdf.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "fdf.mak" CFG="fdf - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "fdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "fdf - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_fdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "fdf - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_fdf.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "fdf - Win32 Release_TS"
-# Name "fdf - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\fdf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_fdf.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/fdf/php_fdf.h b/ext/fdf/php_fdf.h
deleted file mode 100644
index 54eab5d25b..0000000000
--- a/ext/fdf/php_fdf.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FDF_H
-#define PHP_FDF_H
-
-#if HAVE_FDFLIB
-#ifdef PHP_WIN32
-#else
-#define UNIX_DEV
-#endif
-
-#if HAVE_FDFTK_H_LOWER
-# include <fdftk.h>
-#else
-# include <FdfTk.h>
-#endif
-
-extern zend_module_entry fdf_module_entry;
-#define fdf_module_ptr &fdf_module_entry
-
-PHP_MINIT_FUNCTION(fdf);
-PHP_MSHUTDOWN_FUNCTION(fdf);
-PHP_MINFO_FUNCTION(fdf);
-
-PHP_FUNCTION(fdf_open);
-PHP_FUNCTION(fdf_close);
-PHP_FUNCTION(fdf_create);
-PHP_FUNCTION(fdf_save);
-PHP_FUNCTION(fdf_get_value);
-PHP_FUNCTION(fdf_set_value);
-PHP_FUNCTION(fdf_next_field_name);
-PHP_FUNCTION(fdf_set_ap);
-PHP_FUNCTION(fdf_get_status);
-PHP_FUNCTION(fdf_set_status);
-PHP_FUNCTION(fdf_set_file);
-PHP_FUNCTION(fdf_get_file);
-PHP_FUNCTION(fdf_add_template);
-PHP_FUNCTION(fdf_set_flags);
-PHP_FUNCTION(fdf_set_opt);
-PHP_FUNCTION(fdf_set_submit_form_action);
-PHP_FUNCTION(fdf_set_javascript_action);
-PHP_FUNCTION(fdf_set_encoding);
-
-#else
-#define fdf_module_ptr NULL
-#endif
-#define phpext_fdf_ptr fdf_module_ptr
-#endif /* PHP_FDF_H */
diff --git a/ext/filepro/CREDITS b/ext/filepro/CREDITS
deleted file mode 100644
index c272432c04..0000000000
--- a/ext/filepro/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FilePro
-Chad Robinson
diff --git a/ext/filepro/config.m4 b/ext/filepro/config.m4
deleted file mode 100644
index 13f02c2125..0000000000
--- a/ext/filepro/config.m4
+++ /dev/null
@@ -1,13 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_ARG_WITH(filepro,[],[enable_filepro=$withval])
-
-PHP_ARG_ENABLE(filepro,whether to enable the bundled filePro support,
-[ --enable-filepro Enable the bundled read-only filePro support.])
-
-if test "$PHP_FILEPRO" = "yes"; then
- AC_DEFINE(HAVE_FILEPRO, 1, [ ])
- PHP_NEW_EXTENSION(filepro, filepro.c, $ext_shared)
-fi
diff --git a/ext/filepro/filepro.c b/ext/filepro/filepro.c
deleted file mode 100644
index 27fd07bb26..0000000000
--- a/ext/filepro/filepro.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Chad Robinson <chadr@brttech.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- filePro 4.x support developed by Chad Robinson, chadr@brttech.com
- Contact Chad Robinson at BRT Technical Services Corp. for details.
- filePro is a registered trademark by Fiserv, Inc. This file contains
- no code or information that is not freely available from the filePro
- web site at http://www.fileproplus.com/
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include <string.h>
-#ifdef PHP_WIN32
-#include <windows.h>
-#else
-#include <sys/param.h>
-#endif
-#include <errno.h>
-#include "php_globals.h"
-
-#include "php_filepro.h"
-#if HAVE_FILEPRO
-
-typedef struct fp_field {
- char *name;
- char *format;
- int width;
- struct fp_field *next;
-} FP_FIELD;
-
-#ifdef THREAD_SAFE
-DWORD FPTls;
-static int numthreads=0;
-
-typedef struct fp_global_struct{
- char *fp_database;
- signed int fp_fcount;
- signed int fp_keysize;
- FP_FIELD *fp_fieldlist;
-}fp_global_struct;
-
-#define FP_GLOBAL(a) fp_globals->a
-
-#define FP_TLS_VARS \
- fp_global_struct *fp_globals; \
- fp_globals=TlsGetValue(FPTls);
-
-#else
-#define FP_GLOBAL(a) a
-#define FP_TLS_VARS
-static char *fp_database = NULL; /* Database directory */
-static signed int fp_fcount = -1; /* Column count */
-static signed int fp_keysize = -1; /* Size of key records */
-static FP_FIELD *fp_fieldlist = NULL; /* List of fields */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(filepro)
-{
-#ifdef THREAD_SAFE
- fp_global_struct *fp_globals;
-#ifdef COMPILE_DL_FILEPRO
- CREATE_MUTEX(fp_mutex,"FP_TLS");
- SET_MUTEX(fp_mutex);
- numthreads++;
- if (numthreads==1){
- if ((FPTls=TlsAlloc())==0xFFFFFFFF){
- FREE_MUTEX(fp_mutex);
- return 0;
- }}
- FREE_MUTEX(fp_mutex);
-#endif
- fp_globals = (fp_global_struct *) LocalAlloc(LPTR, sizeof(fp_global_struct));
- TlsSetValue(FPTls, (void *) fp_globals);
-#endif
- FP_GLOBAL(fp_database)=NULL;
- FP_GLOBAL(fp_fcount)=-1;
- FP_GLOBAL(fp_keysize)=-1;
- FP_GLOBAL(fp_fieldlist)=NULL;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(filepro)
-{
-#ifdef THREAD_SAFE
- fp_global_struct *fp_globals;
- fp_globals = TlsGetValue(FPTls);
- if (fp_globals != 0)
- LocalFree((HLOCAL) fp_globals);
-#ifdef COMPILE_DL_FILEPRO
- SET_MUTEX(fp_mutex);
- numthreads--;
- if (!numthreads){
- if (!TlsFree(FPTls)){
- FREE_MUTEX(fp_mutex);
- return 0;
- }
- }
- FREE_MUTEX(fp_mutex);
-#endif
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-function_entry filepro_functions[] = {
- PHP_FE(filepro, NULL)
- PHP_FE(filepro_rowcount, NULL)
- PHP_FE(filepro_fieldname, NULL)
- PHP_FE(filepro_fieldtype, NULL)
- PHP_FE(filepro_fieldwidth, NULL)
- PHP_FE(filepro_fieldcount, NULL)
- PHP_FE(filepro_retrieve, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry filepro_module_entry = {
- STANDARD_MODULE_HEADER,
- "filepro", filepro_functions, PHP_MINIT(filepro), PHP_MSHUTDOWN(filepro), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_FILEPRO
-ZEND_GET_MODULE(filepro)
-#if (WIN32|WINNT) && defined(THREAD_SAFE)
-
-/*NOTE: You should have an odbc.def file where you
-export DllMain*/
-BOOL WINAPI DllMain(HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved)
-{
- switch( ul_reason_for_call ) {
- case DLL_PROCESS_ATTACH:
- if ((FPTls=TlsAlloc())==0xFFFFFFFF) {
- return 0;
- }
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- if (!TlsFree(FPTls)) {
- return 0;
- }
- break;
- }
- return 1;
-}
-#endif
-#endif
-
-/*
- * LONG filePro(STRING directory)
- *
- * Read and verify the map file. We store the field count and field info
- * internally, which means we become unstable if you modify the table while
- * a user is using it! We cannot lock anything since Web connections don't
- * provide the ability to later unlock what we locked. Be smart, be safe.
- */
-/* {{{ proto bool filepro(string directory)
- Read and verify the map file */
-PHP_FUNCTION(filepro)
-{
- pval *dir;
- FILE *fp;
- char workbuf[MAXPATHLEN];
- char readbuf[256];
- char *strtok_buf = NULL;
- int i;
- FP_FIELD *new_field, *tmp, *next;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dir) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string(dir);
-
- /* free memory */
- if (FP_GLOBAL(fp_database) != NULL) {
- efree (FP_GLOBAL(fp_database));
- }
-
- /* free linked list of fields */
- tmp = FP_GLOBAL(fp_fieldlist);
- while (tmp != NULL) {
- next = tmp->next;
- efree(tmp);
- tmp = next;
- }
-
- /* init the global vars */
- FP_GLOBAL(fp_database) = NULL;
- FP_GLOBAL(fp_fieldlist) = NULL;
- FP_GLOBAL(fp_fcount) = -1;
- FP_GLOBAL(fp_keysize) = -1;
-
- snprintf(workbuf, sizeof(workbuf), "%s/map", Z_STRVAL_P(dir));
-
- if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(workbuf TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (!(fp = VCWD_FOPEN(workbuf, "r"))) {
- php_error(E_WARNING, "filePro: cannot open map: [%d] %s",
- errno, strerror(errno));
- RETURN_FALSE;
- }
- if (!fgets(readbuf, sizeof(readbuf), fp)) {
- fclose(fp);
- php_error(E_WARNING, "filePro: cannot read map: [%d] %s",
- errno, strerror(errno));
- RETURN_FALSE;
- }
-
- /* Get the field count, assume the file is readable! */
- if (strcmp(php_strtok_r(readbuf, ":", &strtok_buf), "map")) {
- php_error(E_WARNING, "filePro: map file corrupt or encrypted");
- RETURN_FALSE;
- }
- FP_GLOBAL(fp_keysize) = atoi(php_strtok_r(NULL, ":", &strtok_buf));
- php_strtok_r(NULL, ":", &strtok_buf);
- FP_GLOBAL(fp_fcount) = atoi(php_strtok_r(NULL, ":", &strtok_buf));
-
- /* Read in the fields themselves */
- for (i = 0; i < FP_GLOBAL(fp_fcount); i++) {
- if (!fgets(readbuf, sizeof(readbuf), fp)) {
- fclose(fp);
- php_error(E_WARNING, "filePro: cannot read map: [%d] %s",
- errno, strerror(errno));
- RETURN_FALSE;
- }
- new_field = emalloc(sizeof(FP_FIELD));
- new_field->next = NULL;
- new_field->name = estrdup(php_strtok_r(readbuf, ":", &strtok_buf));
- new_field->width = atoi(php_strtok_r(NULL, ":", &strtok_buf));
- new_field->format = estrdup(php_strtok_r(NULL, ":", &strtok_buf));
-
- /* Store in forward-order to save time later */
- if (!FP_GLOBAL(fp_fieldlist)) {
- FP_GLOBAL(fp_fieldlist) = new_field;
- } else {
- for (tmp = FP_GLOBAL(fp_fieldlist); tmp; tmp = tmp->next) {
- if (!tmp->next) {
- tmp->next = new_field;
- tmp = new_field;
- }
- }
- }
- }
- fclose(fp);
-
- FP_GLOBAL(fp_database) = estrndup(Z_STRVAL_P(dir), Z_STRLEN_P(dir));
-
- RETVAL_TRUE;
-}
-/* }}} */
-
-
-/*
- * LONG filePro_rowcount(void)
- *
- * Count the used rows in the database. filePro just marks deleted records
- * as deleted; they are not removed. Since no counts are maintained we need
- * to go in and count records ourselves. <sigh>
- *
- * Errors return false, success returns the row count.
- */
-/* {{{ proto int filepro_rowcount(void)
- Find out how many rows are in a filePro database */
-PHP_FUNCTION(filepro_rowcount)
-{
- FILE *fp;
- char workbuf[MAXPATHLEN];
- char readbuf[256];
- int recsize = 0, records = 0;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (!FP_GLOBAL(fp_database)) {
- php_error(E_WARNING,
- "filePro: must set database directory first!\n");
- RETURN_FALSE;
- }
-
- recsize = FP_GLOBAL(fp_keysize) + 19; /* 20 bytes system info -1 to save time later */
-
- /* Now read the records in, moving forward recsize-1 bytes each time */
- snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database));
-
- if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(workbuf TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (!(fp = VCWD_FOPEN(workbuf, "r"))) {
- php_error(E_WARNING, "filePro: cannot open key: [%d] %s",
- errno, strerror(errno));
- RETURN_FALSE;
- }
- while (!feof(fp)) {
- if (fread(readbuf, 1, 1, fp) == 1) {
- if (readbuf[0])
- records++;
- fseek(fp, recsize, SEEK_CUR);
- }
- }
- fclose(fp);
-
- RETVAL_LONG(records);
-}
-/* }}} */
-
-
-/*
- * STRING filePro_fieldname(LONG field_number)
- *
- * Errors return false, success returns the name of the field.
- */
-/* {{{ proto string filepro_fieldname(int fieldnumber)
- Gets the name of a field */
-PHP_FUNCTION(filepro_fieldname)
-{
- pval *fno;
- FP_FIELD *lp;
- int i;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(fno);
-
- if (!FP_GLOBAL(fp_database)) {
- php_error(E_WARNING,
- "filePro: must set database directory first!\n");
- RETURN_FALSE;
- }
-
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {
- if (i == Z_LVAL_P(fno)) {
- RETURN_STRING(lp->name, 1);
- }
- }
-
- php_error(E_WARNING,
- "filePro: unable to locate field number %d.\n",
- Z_LVAL_P(fno));
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-
-/*
- * STRING filePro_fieldtype(LONG field_number)
- *
- * Errors return false, success returns the type (edit) of the field
- */
-/* {{{ proto string filepro_fieldtype(int field_number)
- Gets the type of a field */
-PHP_FUNCTION(filepro_fieldtype)
-{
- pval *fno;
- FP_FIELD *lp;
- int i;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(fno);
-
- if (!FP_GLOBAL(fp_database)) {
- php_error(E_WARNING,
- "filePro: must set database directory first!\n");
- RETURN_FALSE;
- }
-
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {
- if (i == Z_LVAL_P(fno)) {
- RETURN_STRING(lp->format, 1);
- }
- }
- php_error(E_WARNING,
- "filePro: unable to locate field number %d.\n",
- Z_LVAL_P(fno));
- RETVAL_FALSE;
-}
-/* }}} */
-
-
-/*
- * STRING filePro_fieldwidth(int field_number)
- *
- * Errors return false, success returns the character width of the field.
- */
-/* {{{ proto int filepro_fieldwidth(int field_number)
- Gets the width of a field */
-PHP_FUNCTION(filepro_fieldwidth)
-{
- pval *fno;
- FP_FIELD *lp;
- int i;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(fno);
-
- if (!FP_GLOBAL(fp_database)) {
- php_error(E_WARNING,
- "filePro: must set database directory first!\n");
- RETURN_FALSE;
- }
-
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {
- if (i == Z_LVAL_P(fno)) {
- RETURN_LONG(lp->width);
- }
- }
- php_error(E_WARNING,
- "filePro: unable to locate field number %d.\n",
- Z_LVAL_P(fno));
- RETVAL_FALSE;
-}
-/* }}} */
-
-
-/*
- * LONG filePro_fieldcount(void)
- *
- * Errors return false, success returns the field count.
- */
-/* {{{ proto int filepro_fieldcount(void)
- Find out how many fields are in a filePro database */
-PHP_FUNCTION(filepro_fieldcount)
-{
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (!FP_GLOBAL(fp_database)) {
- php_error(E_WARNING,
- "filePro: must set database directory first!\n");
- RETURN_FALSE;
- }
-
- /* Read in the first line from the map file */
- RETVAL_LONG(FP_GLOBAL(fp_fcount));
-}
-/* }}} */
-
-
-/*
- * STRING filePro_retrieve(int row_number, int field_number)
- *
- * Errors return false, success returns the datum.
- */
-/* {{{ proto string filepro_retrieve(int row_number, int field_number)
- Retrieves data from a filePro database */
-PHP_FUNCTION(filepro_retrieve)
-{
- pval *rno, *fno;
- FP_FIELD *lp;
- FILE *fp;
- char workbuf[MAXPATHLEN];
- char *readbuf;
- int i, fnum, rnum;
- long offset;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &rno, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (!FP_GLOBAL(fp_database)) {
- php_error(E_WARNING,
- "filePro: must set database directory first!\n");
- RETURN_FALSE;
- }
-
- convert_to_long(rno);
- convert_to_long(fno);
-
- fnum = Z_LVAL_P(fno);
- rnum = Z_LVAL_P(rno);
-
- if (rnum < 0 || fnum < 0 || fnum >= FP_GLOBAL(fp_fcount)) {
- php_error(E_WARNING, "filepro: parameters out of range");
- RETURN_FALSE;
- }
-
- offset = (rnum + 1) * (FP_GLOBAL(fp_keysize) + 20) + 20; /* Record location */
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp && i < fnum; lp = lp->next, i++) {
- offset += lp->width;
- }
- if (!lp) {
- php_error(E_WARNING, "filePro: cannot locate field");
- RETURN_FALSE;
- }
-
- /* Now read the record in */
- snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database));
-
- if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(workbuf TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (!(fp = VCWD_FOPEN(workbuf, "r"))) {
- php_error(E_WARNING, "filePro: cannot open key: [%d] %s",
- errno, strerror(errno));
- fclose(fp);
- RETURN_FALSE;
- }
- fseek(fp, offset, SEEK_SET);
-
- readbuf = emalloc (lp->width+1);
- if (fread(readbuf, lp->width, 1, fp) != 1) {
- php_error(E_WARNING, "filePro: cannot read data: [%d] %s",
- errno, strerror(errno));
- efree(readbuf);
- fclose(fp);
- RETURN_FALSE;
- }
- readbuf[lp->width] = '\0';
- fclose(fp);
- RETURN_STRING(readbuf, 0);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/filepro/filepro.dsp b/ext/filepro/filepro.dsp
deleted file mode 100644
index 441b14e592..0000000000
--- a/ext/filepro/filepro.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="filepro" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=filepro - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "filepro.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "filepro.mak" CFG="filepro - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "filepro - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "filepro - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "filepro - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FILEPRO_EXPORTS" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FILEPRO=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_filepro.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "filepro - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FILEPRO_EXPORTS" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FILEPRO=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_filepro.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "filepro - Win32 Release_TS"
-# Name "filepro - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\filepro.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_filepro.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/filepro/php_filepro.h b/ext/filepro/php_filepro.h
deleted file mode 100644
index 84a0f0618b..0000000000
--- a/ext/filepro/php_filepro.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Chad Robinson <chadr@brttech.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- filePro 4.x support developed by Chad Robinson, chadr@brttech.com
- Contact Chad Robinson at BRT Technical Services Corp. for details.
- filePro is a registered trademark by Fiserv, Inc. This file contains
- no code or information that is not freely available from the filePro
- web site at http://www.fileproplus.com/
-*/
-
-#ifndef PHP_FILEPRO_H
-#define PHP_FILEPRO_H
-#if HAVE_FILEPRO
-extern zend_module_entry filepro_module_entry;
-#define phpext_filepro_ptr &filepro_module_entry
-
-PHP_FUNCTION(filepro);
-PHP_FUNCTION(filepro_rowcount);
-PHP_FUNCTION(filepro_fieldname);
-PHP_FUNCTION(filepro_fieldtype);
-PHP_FUNCTION(filepro_fieldwidth);
-PHP_FUNCTION(filepro_fieldcount);
-PHP_FUNCTION(filepro_retrieve);
-
-PHP_MINIT_FUNCTION(filepro);
-PHP_MSHUTDOWN_FUNCTION(filepro);
-#else
-#define phpext_filepro_ptr NULL
-#endif
-#endif /* PHP_FILEPRO_H */
diff --git a/ext/fribidi/CREDITS b/ext/fribidi/CREDITS
deleted file mode 100644
index d14739ac6e..0000000000
--- a/ext/fribidi/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FRIBIDI
-Onn Ben-Zvi
diff --git a/ext/fribidi/README b/ext/fribidi/README
deleted file mode 100644
index db96b170a4..0000000000
--- a/ext/fribidi/README
+++ /dev/null
@@ -1,53 +0,0 @@
-Purpose
-=======
-
-This extension is basically a wrapper for the FriBidi implementation
-of the Unicode Bidi algorithm. The need for such an algorithm rises
-from the bidirectional language usage done by applications.
-Arabic/Hebrew embedded within English is such a case.
-
-Usage
-=====
-
- The only function used is fribidi_log2vis (logical to visual).
- Input: 1) The Logical string.
- 2) Base direction of application - 'L' or 'R'.
- 3) The char code being used, which can be one of the following
- constants:
- a) FRIBIDI_CHARSET_UTF8
- b) FRIBIDI_CHARSET_8859_6
- c) FRIBIDI_CHARSET_8859_8
- d) FRIBIDI_CHARSET_CP1255
- e) FRIBIDI_CHARSET_CP1256
- f) FRIBIDI_CHARSET_ISIRI_3342
-
-Note: Currently, FriBidi supports the above Character Codes alone.
-
- Output: A Visual string.
-
-
-Compiling
-===========
-1) Static - ./configure --with-fribidi=base-directory-of-FriBidi-installation-path
- (defaults to /usr/local).
-
-2) dl - same, just add shared, to get .... --with-fribidi=shared,base....
-
-Prerequisites
-=============
-1) FriBidi version 0.9.0 or later must be installed. Latest version can be obtained thru
- http://fribidi.sourceforge.net/
-
-2) glib header files: glib.h and glibconfig.h.
-
-Note
-=====
-
-The function fribidi_log2vis computes three more arrays which are currently not passed back as output.
-These arrays are:
- 1) mapping from the logical to the visual sting.
- 2) mapping from the visual to the logical string.
- 3) embedding level of characters as figured out by the FriBidi algorithm.
-
-The extension needs further implementation to support this.
-p.s. - If you don't understand this, you probably don't need it.
diff --git a/ext/fribidi/config.m4 b/ext/fribidi/config.m4
deleted file mode 100644
index f0cee962ff..0000000000
--- a/ext/fribidi/config.m4
+++ /dev/null
@@ -1,79 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(fribidi, for FriBidi support,
-[ --with-fribidi[=DIR] Include fribidi support (requires FriBidi >=0.1.12).])
-
-if test "$PHP_FRIBIDI" != "no"; then
-
-dnl if module was requested with default path of fribidi installation then
-dnl $PHP_FRIBIDI will be "yes"
-
- if test "$PHP_FRIBIDI" = "yes"; then
- PHP_FRIBIDI=/usr/local
- fi
-
- dnl check for fribidi header files
-
- AC_MSG_CHECKING([for header files in "$PHP_FRIBIDI/include/fribidi"])
- if test -f $PHP_FRIBIDI/include/fribidi/fribidi.h && test -f $PHP_FRIBIDI/include/fribidi/fribidi_types.h && test -f $PHP_FRIBIDI/include/fribidi/fribidi_char_sets.h; then
- FRIBIDI_INCDIR=$PHP_FRIBIDI/include/fribidi/
- AC_MSG_RESULT([found all])
- else
- AC_MSG_RESULT([missing])
- fi
-
- dnl check for fribidi shared library
-
- AC_MSG_CHECKING([for libfribidi.so file in "$PHP_FRIBIDI/lib/"])
- if test -f "$PHP_FRIBIDI/lib/libfribidi.so" ; then
- FRIBIDI_LIBDIR=$PHP_FRIBIDI/lib/
- AC_MSG_RESULT([found])
- else
- AC_MSG_RESULT([missing])
- fi
-
- dnl check for glib header files
-
- AC_MSG_CHECKING([for glibconfig.h in "usr/lib/glib/include/"])
- if test -f /usr/lib/glib/include/glibconfig.h ; then
- AC_MSG_RESULT([found])
- GLIB_INCDIR=/usr/lib/glib/include/
- else
- AC_MSG_RESULT([missing])
- fi
-
-
- dnl check for fribidi version
- AC_MSG_CHECKING([for FriBidi version])
- FRIBIDI_CONFIG=$PHP_FRIBIDI/bin/fribidi-config
- if test -x $FRIBIDI_CONFIG; then
- fribidi_version_full=`$FRIBIDI_CONFIG --version`
- fi
-
- fribidi_version=`echo ${fribidi_version_full} | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
-
- if test "$fribidi_version" -ge 9000; then
- AC_MSG_RESULT([$fribidi_version_full])
- else
- AC_MSG_ERROR(FriBidi version 0.9.0 or later is required to compile php with FriBidi support)
- fi
-
-
- AC_MSG_CHECKING([sanity to build extension])
- if test -n "$FRIBIDI_INCDIR" && test -n "$FRIBIDI_LIBDIR" && test -n "$GLIB_INCDIR"; then
-
- AC_MSG_RESULT([yes])
-
- PHP_ADD_INCLUDE("$FRIBIDI_INCDIR")
- PHP_ADD_INCLUDE("$GLIB_INCDIR")
- PHP_ADD_LIBRARY_WITH_PATH(fribidi,"$FRIBIDI_LIBDIR", FRIBIDI_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_FRIBIDI, 1, [ ])
- PHP_NEW_EXTENSION(fribidi, fribidi.c, $ext_shared)
- PHP_SUBST(FRIBIDI_SHARED_LIBADD)
- else
- AC_MSG_RESULT([no])
- fi
-fi
diff --git a/ext/fribidi/fribidi.c b/ext/fribidi/fribidi.c
deleted file mode 100755
index 3ddfba8ab1..0000000000
--- a/ext/fribidi/fribidi.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Onn Ben-Zvi <onn@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_fribidi.h"
-#include "fribidi.h"
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_FRIBIDI
-
-/* If you declare any globals in php_fribidi.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(fribidi)
-*/
-
-/* True global resources - no need for thread safety here */
-/* static int le_fribidi; */
-
-/* Every user visible function must have an entry in fribidi_functions[].
-*/
-function_entry fribidi_functions[] = {
- PHP_FE(fribidi_log2vis, NULL)
- {NULL, NULL, NULL} /* Must be the last line in fribidi_functions[] */
-};
-
-zend_module_entry fribidi_module_entry = {
- STANDARD_MODULE_HEADER,
- "fribidi",
- fribidi_functions,
- PHP_MINIT(fribidi),
- PHP_MSHUTDOWN(fribidi),
- NULL,
- NULL,
- PHP_MINFO(fribidi),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_FRIBIDI
-ZEND_GET_MODULE(fribidi)
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(fribidi)
-{
- REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_UTF8", FRIBIDI_CHARSET_UTF8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_8859_6", FRIBIDI_CHARSET_ISO8859_6, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_8859_8", FRIBIDI_CHARSET_ISO8859_8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CP1255", FRIBIDI_CHARSET_CP1255, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CP1256", FRIBIDI_CHARSET_CP1256, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_ISIRI_3342", FRIBIDI_CHARSET_ISIRI_3342, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(fribidi)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(fribidi)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "fribidi support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/*--------------------------------------------------------------*/
-/* Name: fribidi_log2vis */
-/* Purpose: convert a logical string to a visual one */
-/* Input: 1) The logical string. */
-/* 2) Base direction - */
-/* Possible values: */
-/* a) "L" - base language is left to right. */
-/* b) "R" - base language is right to left. */
-/* c) empty - base language is determined */
-/* automatically by the FriBiDi algorithm */
-/* 3) Character code being used - */
-/* Possible values (i.e., char sets supported) */
-/* FRIBIDI_CHARSET_UTF8 */
-/* FRIBIDI_CHARSET_8859_6 */
-/* FRIBIDI_CHARSET_8859_8 */
-/* FRIBIDI_CHARSET_CP1255 */
-/* FRIBIDI_CHARSET_CP1256 */
-/* FRIBIDI_CHARSET_ISIRI_3342 */
-/* */
-/* Output: on success: The visual string. */
-/* on failure: */
-/*--------------------------------------------------------------*/
-
-/* {{{ proto string fribidi_log2vis(string str, string direction, int charset)
- Convert a logical string to a visual one */
-PHP_FUNCTION(fribidi_log2vis)
-{
- zval **parameter1, **parameter2, **parameter3;
-
-
- FriBidiChar *u_logical_str, *u_visual_str; /* unicode strings .... */
- char *inString;
- guchar *outString;
- int len, alloc_len, utf8_len;
-
-
- FriBidiCharType base_dir;
-
- guint16 *position_L_to_V_list;
- guint16 *position_V_to_L_list;
- guint8 *embedding_level_list;
-
- /* get parameters from input */
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &parameter1, &parameter2, &parameter3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* convert input to expected type.... */
-
- convert_to_string_ex(parameter1);
- convert_to_string_ex(parameter2);
- convert_to_long_ex(parameter3);
-
- /* allocate space and prepare all local variables */
-
-
- len = Z_STRLEN_PP(parameter1);
-
- inString = estrndup(Z_STRVAL_PP(parameter1), len);
-
- alloc_len = len+1;
-
- u_logical_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len);
- u_visual_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len);
-
- position_L_to_V_list = (guint16*) emalloc(sizeof(guint16)*alloc_len);
- position_V_to_L_list = (guint16*) emalloc(sizeof(guint16)*alloc_len);
- embedding_level_list = (guint8*) emalloc(sizeof(guint8)*alloc_len);
-
- outString = (guchar*)emalloc(sizeof(guchar)*alloc_len);
-
- if(inString[len-1] == '\n') {
- inString[len-1] = '\0';
- }
-
- switch(Z_LVAL_PP(parameter3)) {
- case FRIBIDI_CHARSET_UTF8:
- utf8_len=fribidi_utf8_to_unicode(inString, u_logical_str);
- break;
- case FRIBIDI_CHARSET_ISO8859_6:
- fribidi_iso8859_6_to_unicode(inString, u_logical_str);
- break;
- case FRIBIDI_CHARSET_ISO8859_8:
- fribidi_iso8859_8_to_unicode(inString, u_logical_str);
- break;
- case FRIBIDI_CHARSET_CP1255:
- fribidi_cp1255_to_unicode(inString, u_logical_str);
- break;
- case FRIBIDI_CHARSET_CP1256:
- fribidi_cp1256_to_unicode(inString, u_logical_str);
- break;
- case FRIBIDI_CHARSET_ISIRI_3342:
- fribidi_isiri_3342_to_unicode(inString, u_logical_str);
- break;
- default:
- zend_error(E_ERROR,"unknown character set %d<br />", Z_LVAL_PP(parameter3));
- }
-
-
- /* visualize the logical.... */
-
- if ((Z_STRVAL_PP(parameter2))[0] == 'R') {
- base_dir = FRIBIDI_TYPE_RTL;
- } else if (Z_STRVAL_PP(parameter2)[0] == 'L')
- base_dir = FRIBIDI_TYPE_LTR;
- else
- base_dir = FRIBIDI_TYPE_N;
-
- fribidi_log2vis(u_logical_str, len, &base_dir, u_visual_str, position_L_to_V_list, position_V_to_L_list, embedding_level_list);
-
- /* convert back to original char set */
-
- switch(Z_LVAL_PP(parameter3)) {
- case FRIBIDI_CHARSET_UTF8:
- fribidi_unicode_to_utf8(u_visual_str, utf8_len , outString);
- break;
- case FRIBIDI_CHARSET_ISO8859_6:
- fribidi_unicode_to_iso8859_6(u_visual_str, len , outString);
- break;
- case FRIBIDI_CHARSET_ISO8859_8:
- fribidi_unicode_to_iso8859_8(u_visual_str, len , outString);
- break;
- case FRIBIDI_CHARSET_CP1255:
- fribidi_unicode_to_cp1255(u_visual_str, len , outString);
- break;
- case FRIBIDI_CHARSET_CP1256:
- fribidi_unicode_to_cp1256(u_visual_str, len , outString);
- break;
- case FRIBIDI_CHARSET_ISIRI_3342:
- fribidi_unicode_to_isiri_3342(u_visual_str, len , outString);
- break;
- default:
- zend_error(E_ERROR,"unknown character set %d<br />", Z_LVAL_PP(parameter3));
- }
-
-
- efree(u_logical_str);
- efree(u_visual_str);
-
- efree(position_L_to_V_list);
- efree(position_V_to_L_list);
- efree(embedding_level_list);
-
- RETURN_STRING(outString, 1);
-}
-/* }}} */
-
-
-#endif /* HAVE_FRIBIDI */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/fribidi/fribidi.php b/ext/fribidi/fribidi.php
deleted file mode 100644
index 6a603d604e..0000000000
--- a/ext/fribidi/fribidi.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'fribidi';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/fribidi/php_fribidi.h b/ext/fribidi/php_fribidi.h
deleted file mode 100644
index d0498b99ea..0000000000
--- a/ext/fribidi/php_fribidi.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Onn Ben-Zvi <onn@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_FRIBIDI_H
-#define PHP_FRIBIDI_H
-
-#if HAVE_FRIBIDI
-
-#include "fribidi.h"
-#include "../standard/info.h"
-
-extern zend_module_entry fribidi_module_entry;
-#define phpext_fribidi_ptr &fribidi_module_entry
-
-
-typedef struct _php_fribidi_rsrc{
- guint16 *position_L_to_V_list;
- guint16 *position_V_to_L_list;
- guint8 *embedding_level_list;
- guchar *out_string;
-} php_fribidi_rsrc;
-
-
-#ifdef PHP_WIN32
-#define PHP_FRIBIDI_API __declspec(dllexport)
-#else
-#define PHP_FRIBIDI_API
-#endif
-
-PHP_MINIT_FUNCTION(fribidi);
-PHP_MSHUTDOWN_FUNCTION(fribidi);
-PHP_RINIT_FUNCTION(fribidi);
-PHP_RSHUTDOWN_FUNCTION(fribidi);
-PHP_MINFO_FUNCTION(fribidi);
-
-ZEND_FUNCTION(fribidi_log2vis);
-/*void php_fribidi_free_rsrc(php_fribidi_rsrc* p_rsrc);*/
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(fribidi)
- int global_variable;
-ZEND_END_MODULE_GLOBALS(fribidi)
-*/
-
-/* In every function that needs to use variables in php_fribidi_globals,
- do call FRIBIDILS_FETCH(); after declaring other variables used by
- that function, and always refer to them as FRIBIDIG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define FRIBIDIG(v) TSRMG(fribidi_globals_id, php_fribidi_globals *, v)
-#else
-#define FRIBIDIG(v) (fribidi_globals.v)
-#endif
-
-#else
-
-#define phpext_fribidi_ptr NULL
-
-#endif
-
-#endif /* PHP_FRIBIDI_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/ftp/CREDITS b/ext/ftp/CREDITS
deleted file mode 100644
index fdaf681c21..0000000000
--- a/ext/ftp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FTP
-Andrew Skalski
diff --git a/ext/ftp/config.m4 b/ext/ftp/config.m4
deleted file mode 100644
index 3b5f3fd641..0000000000
--- a/ext/ftp/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(ftp,whether to enable FTP support,
-[ --enable-ftp Enable FTP support])
-
-if test "$PHP_FTP" = "yes"; then
- AC_DEFINE(HAVE_FTP,1,[Whether you want FTP support])
- PHP_NEW_EXTENSION(ftp, php_ftp.c ftp.c, $ext_shared)
-fi
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
deleted file mode 100644
index d7d7d8a8f1..0000000000
--- a/ext/ftp/ftp.c
+++ /dev/null
@@ -1,1291 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrew Skalski <askalski@chek.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#if HAVE_FTP
-
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <string.h>
-#include <time.h>
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#endif
-#include <errno.h>
-
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#include "ftp.h"
-#include "ext/standard/fsock.h"
-
-/* sends an ftp command, returns true on success, false on error.
- * it sends the string "cmd args\r\n" if args is non-null, or
- * "cmd\r\n" if args is null
- */
-static int ftp_putcmd( ftpbuf_t *ftp,
- const char *cmd,
- const char *args);
-
-/* wrapper around send/recv to handle timeouts */
-static int my_send(ftpbuf_t *ftp, int s, void *buf, size_t len);
-static int my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len);
-static int my_accept(ftpbuf_t *ftp, int s, struct sockaddr *addr,
- int *addrlen);
-
-/* reads a line the socket , returns true on success, false on error */
-static int ftp_readline(ftpbuf_t *ftp);
-
-/* reads an ftp response, returns true on success, false on error */
-static int ftp_getresp(ftpbuf_t *ftp);
-
-/* sets the ftp transfer type */
-static int ftp_type(ftpbuf_t *ftp, ftptype_t type);
-
-/* opens up a data stream */
-static databuf_t* ftp_getdata(ftpbuf_t *ftp);
-
-/* accepts the data connection, returns updated data buffer */
-static databuf_t* data_accept(databuf_t *data, ftpbuf_t *ftp);
-
-/* closes the data connection, returns NULL */
-static databuf_t* data_close(databuf_t *data);
-
-/* generic file lister */
-static char** ftp_genlist(ftpbuf_t *ftp,
- const char *cmd, const char *path);
-
-/* IP and port conversion box */
-union ipbox {
- unsigned long l[2];
- unsigned short s[4];
- unsigned char c[8];
-};
-
-/* {{{ ftp_open
- */
-ftpbuf_t*
-ftp_open(const char *host, short port, long timeout_sec)
-{
- ftpbuf_t *ftp;
- int size;
-
-
- /* alloc the ftp structure */
- ftp = calloc(1, sizeof(*ftp));
- if (ftp == NULL) {
- perror("calloc");
- return NULL;
- }
-
- ftp->fd = php_hostconnect(host, (unsigned short) (port ? port : 21), SOCK_STREAM, (int) timeout_sec);
- if (ftp->fd == -1) {
- goto bail;
- }
-
- /* Default Settings */
- ftp->timeout_sec = timeout_sec;
-
- size = sizeof(ftp->localaddr);
- memset(&ftp->localaddr, 0, size);
- if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) == -1) {
- perror("getsockname");
- goto bail;
- }
-
- if (!ftp_getresp(ftp) || ftp->resp != 220) {
- goto bail;
- }
-
- return ftp;
-
-bail:
- if (ftp->fd != -1)
- closesocket(ftp->fd);
- free(ftp);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_close
- */
-ftpbuf_t*
-ftp_close(ftpbuf_t *ftp)
-{
- if (ftp == NULL)
- return NULL;
- if (ftp->fd != -1)
- closesocket(ftp->fd);
- ftp_gc(ftp);
- free(ftp);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_gc
- */
-void
-ftp_gc(ftpbuf_t *ftp)
-{
- if (ftp == NULL)
- return;
-
- free(ftp->pwd);
- ftp->pwd = NULL;
- free(ftp->syst);
- ftp->syst = NULL;
-}
-/* }}} */
-
-/* {{{ ftp_quit
- */
-int
-ftp_quit(ftpbuf_t *ftp)
-{
- if (ftp == NULL)
- return 0;
-
- if (!ftp_putcmd(ftp, "QUIT", NULL))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 221)
- return 0;
-
- free(ftp->pwd);
- ftp->pwd = NULL;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_login
- */
-int
-ftp_login(ftpbuf_t *ftp, const char *user, const char *pass)
-{
- if (ftp == NULL)
- return 0;
-
- if (!ftp_putcmd(ftp, "USER", user))
- return 0;
- if (!ftp_getresp(ftp))
- return 0;
- if (ftp->resp == 230)
- return 1;
- if (ftp->resp != 331)
- return 0;
- if (!ftp_putcmd(ftp, "PASS", pass))
- return 0;
- if (!ftp_getresp(ftp))
- return 0;
- return (ftp->resp == 230);
-}
-/* }}} */
-
-/* {{{ ftp_reinit
- */
-int
-ftp_reinit(ftpbuf_t *ftp)
-{
- if (ftp == NULL)
- return 0;
-
- ftp_gc(ftp);
-
- if (!ftp_putcmd(ftp, "REIN", NULL))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 220)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_syst
- */
-const char*
-ftp_syst(ftpbuf_t *ftp)
-{
- char *syst, *end;
-
- if (ftp == NULL)
- return NULL;
-
- /* default to cached value */
- if (ftp->syst)
- return ftp->syst;
-
- if (!ftp_putcmd(ftp, "SYST", NULL))
- return NULL;
- if (!ftp_getresp(ftp) || ftp->resp != 215)
- return NULL;
-
- syst = ftp->inbuf;
- if ((end = strchr(syst, ' ')))
- *end = 0;
- ftp->syst = strdup(syst);
- if (end)
- *end = ' ';
-
- return ftp->syst;
-}
-/* }}} */
-
-/* {{{ ftp_pwd
- */
-const char*
-ftp_pwd(ftpbuf_t *ftp)
-{
- char *pwd, *end;
-
- if (ftp == NULL)
- return NULL;
-
- /* default to cached value */
- if (ftp->pwd)
- return ftp->pwd;
-
- if (!ftp_putcmd(ftp, "PWD", NULL))
- return NULL;
- if (!ftp_getresp(ftp) || ftp->resp != 257)
- return NULL;
-
- /* copy out the pwd from response */
- if ((pwd = strchr(ftp->inbuf, '"')) == NULL)
- return NULL;
- end = strrchr(++pwd, '"');
- *end = 0;
- ftp->pwd = strdup(pwd);
- *end = '"';
-
- return ftp->pwd;
-}
-/* }}} */
-
-/* {{{ ftp_exec
- */
-int
-ftp_exec(ftpbuf_t *ftp, const char *cmd)
-{
- if (ftp == NULL)
- return 0;
- if (!ftp_putcmd(ftp, "SITE EXEC", cmd))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 200)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_chdir
- */
-int
-ftp_chdir(ftpbuf_t *ftp, const char *dir)
-{
- if (ftp == NULL)
- return 0;
-
- free(ftp->pwd);
- ftp->pwd = NULL;
-
- if (!ftp_putcmd(ftp, "CWD", dir))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 250)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_cdup
- */
-int
-ftp_cdup(ftpbuf_t *ftp)
-{
- if (ftp == NULL)
- return 0;
-
- free(ftp->pwd);
- ftp->pwd = NULL;
-
- if (!ftp_putcmd(ftp, "CDUP", NULL))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 250)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_mkdir
- */
-char*
-ftp_mkdir(ftpbuf_t *ftp, const char *dir)
-{
- char *mkd, *end;
-
- if (ftp == NULL)
- return NULL;
-
- if (!ftp_putcmd(ftp, "MKD", dir))
- return NULL;
- if (!ftp_getresp(ftp) || ftp->resp != 257)
- return NULL;
-
- /* copy out the dir from response */
- if ((mkd = strchr(ftp->inbuf, '"')) == NULL) {
- mkd = strdup(dir);
- return mkd;
- }
-
- end = strrchr(++mkd, '"');
- *end = 0;
- mkd = strdup(mkd);
- *end = '"';
-
- return mkd;
-}
-/* }}} */
-
-/* {{{ ftp_rmdir
- */
-int
-ftp_rmdir(ftpbuf_t *ftp, const char *dir)
-{
- if (ftp == NULL)
- return 0;
-
- if (!ftp_putcmd(ftp, "RMD", dir))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 250)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_nlist
- */
-char**
-ftp_nlist(ftpbuf_t *ftp, const char *path)
-{
- return ftp_genlist(ftp, "NLST", path);
-}
-/* }}} */
-
-/* {{{ ftp_list
- */
-char**
-ftp_list(ftpbuf_t *ftp, const char *path)
-{
- return ftp_genlist(ftp, "LIST", path);
-}
-/* }}} */
-
-/* {{{ ftp_type
- */
-int
-ftp_type(ftpbuf_t *ftp, ftptype_t type)
-{
- char typechar[2] = "?";
-
- if (ftp == NULL)
- return 0;
-
- if (type == Z_TYPE_P(ftp))
- return 1;
-
- if (type == FTPTYPE_ASCII)
- typechar[0] = 'A';
- else if (type == FTPTYPE_IMAGE)
- typechar[0] = 'I';
- else
- return 0;
-
- if (!ftp_putcmd(ftp, "TYPE", typechar))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 200)
- return 0;
-
- Z_TYPE_P(ftp) = type;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_pasv
- */
-int
-ftp_pasv(ftpbuf_t *ftp, int pasv)
-{
- char *ptr;
- union ipbox ipbox;
- unsigned long b[6];
- int n;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
-
- if (ftp == NULL)
- return 0;
-
- if (pasv && ftp->pasv == 2)
- return 1;
-
- ftp->pasv = 0;
- if (!pasv)
- return 1;
-
- n = sizeof(ftp->pasvaddr);
- memset(&ftp->pasvaddr, 0, n);
- sa = (struct sockaddr *) &ftp->pasvaddr;
-
-#ifdef HAVE_IPV6
- if (getpeername(ftp->fd, sa, &n) < 0)
- return 0;
-
- if (sa->sa_family == AF_INET6) {
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
- char *endptr, delimiter;
-
- /* try EPSV first */
- if (!ftp_putcmd(ftp, "EPSV", NULL))
- return 0;
- if (!ftp_getresp(ftp))
- return 0;
-
- if (ftp->resp == 229) {
- /* parse out the port */
- for (ptr = ftp->inbuf; *ptr && *ptr != '('; ptr++);
- if (!*ptr)
- return 0;
- delimiter = *++ptr;
- for (n = 0; *ptr && n < 3; ptr++) {
- if (*ptr == delimiter)
- n++;
- }
-
- sin6->sin6_port = htons((unsigned short) strtol(ptr, &endptr, 10));
- if (ptr == endptr || *endptr != delimiter)
- return 0;
-
- ftp->pasv = 2;
- return 1;
- }
- }
-
- /* fall back to PASV */
-#endif
-
- if (!ftp_putcmd(ftp, "PASV", NULL))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 227)
- return 0;
-
- /* parse out the IP and port */
- for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++);
- n = sscanf(ptr, "%lu,%lu,%lu,%lu,%lu,%lu",
- &b[0], &b[1], &b[2], &b[3], &b[4], &b[5]);
- if (n != 6)
- return 0;
-
- for (n=0; n<6; n++)
- ipbox.c[n] = (unsigned char) b[n];
-
- sin = (struct sockaddr_in *) sa;
- sin->sin_family = AF_INET;
- sin->sin_addr.s_addr = ipbox.l[0];
- sin->sin_port = ipbox.s[2];
-
- ftp->pasv = 2;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_get
- */
-int
-ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type)
-{
- databuf_t *data = NULL;
- char *ptr;
- int lastch;
- int rcvd;
- TSRMLS_FETCH();
-
- if (ftp == NULL)
- return 0;
-
- if (!ftp_type(ftp, type)) {
- goto bail;
- }
-
- if ((data = ftp_getdata(ftp)) == NULL) {
- goto bail;
- }
-
- if (!ftp_putcmd(ftp, "RETR", path)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) {
- goto bail;
- }
-
- if ((data = data_accept(data, ftp)) == NULL) {
- goto bail;
- }
-
- lastch = 0;
- while ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) {
- if (rcvd == -1) {
- goto bail;
- }
-
- if (type == FTPTYPE_ASCII) {
- for (ptr = data->buf; rcvd; rcvd--, ptr++) {
- if (lastch == '\r' && *ptr != '\n')
- php_stream_putc(outstream, '\r');
- if (*ptr != '\r')
- php_stream_putc(outstream, *ptr);
- lastch = *ptr;
- }
- }
- else {
- php_stream_write(outstream, data->buf, rcvd);
- }
- }
-
- if (type == FTPTYPE_ASCII && lastch == '\r')
- php_stream_putc(outstream, '\r');
-
- data = data_close(data);
-
- if (php_stream_error(outstream)) {
- goto bail;
- }
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- goto bail;
- }
-
- return 1;
-bail:
- data_close(data);
- return 0;
-}
-/* }}} */
-
-/* {{{ ftp_put
- */
-int
-ftp_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type)
-{
- databuf_t *data = NULL;
- int size;
- char *ptr;
- int ch;
- TSRMLS_FETCH();
-
- if (ftp == NULL)
- return 0;
-
- if (!ftp_type(ftp, type))
- goto bail;
-
- if ((data = ftp_getdata(ftp)) == NULL)
- goto bail;
-
- if (!ftp_putcmd(ftp, "STOR", path))
- goto bail;
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125))
- goto bail;
-
- if ((data = data_accept(data, ftp)) == NULL)
- goto bail;
-
- size = 0;
- ptr = data->buf;
- while ((ch = php_stream_getc(instream))!=EOF && !php_stream_eof(instream)) {
- /* flush if necessary */
- if (FTP_BUFSIZE - size < 2) {
- if (my_send(ftp, data->fd, data->buf, size) != size)
- goto bail;
- ptr = data->buf;
- size = 0;
- }
-
- if (ch == '\n' && type == FTPTYPE_ASCII) {
- *ptr++ = '\r';
- size++;
- }
-
- *ptr++ = ch;
- size++;
- }
-
- if (size && my_send(ftp, data->fd, data->buf, size) != size)
- goto bail;
-
- if (php_stream_error(instream))
- goto bail;
-
- data = data_close(data);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250))
- goto bail;
-
- return 1;
-bail:
- data_close(data);
- return 0;
-}
-/* }}} */
-
-/* {{{ ftp_size
- */
-int
-ftp_size(ftpbuf_t *ftp, const char *path)
-{
- if (ftp == NULL)
- return -1;
-
- if (!ftp_type(ftp, FTPTYPE_IMAGE))
- return -1;
- if (!ftp_putcmd(ftp, "SIZE", path))
- return -1;
- if (!ftp_getresp(ftp) || ftp->resp != 213)
- return -1;
-
- return atoi(ftp->inbuf);
-}
-/* }}} */
-
-/* {{{ ftp_mdtm
- */
-time_t
-ftp_mdtm(ftpbuf_t *ftp, const char *path)
-{
- time_t stamp;
- struct tm *gmt, tmbuf;
- struct tm tm;
- char *ptr;
- int n;
-
- if (ftp == NULL)
- return -1;
-
- if (!ftp_putcmd(ftp, "MDTM", path))
- return -1;
- if (!ftp_getresp(ftp) || ftp->resp != 213)
- return -1;
-
- /* parse out the timestamp */
- for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++);
- n = sscanf(ptr, "%4u%2u%2u%2u%2u%2u",
- &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
- &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
- if (n != 6)
- return -1;
- tm.tm_year -= 1900;
- tm.tm_mon--;
- tm.tm_isdst = -1;
-
- /* figure out the GMT offset */
- stamp = time(NULL);
- gmt = php_gmtime_r(&stamp, &tmbuf);
- gmt->tm_isdst = -1;
-
- /* apply the GMT offset */
- tm.tm_sec += stamp - mktime(gmt);
- tm.tm_isdst = gmt->tm_isdst;
-
- stamp = mktime(&tm);
-
- return stamp;
-}
-/* }}} */
-
-/* {{{ ftp_delete
- */
-int
-ftp_delete(ftpbuf_t *ftp, const char *path)
-{
- if (ftp == NULL)
- return 0;
-
- if (!ftp_putcmd(ftp, "DELE", path))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 250)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_rename
- */
-int
-ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest)
-{
- if (ftp == NULL)
- return 0;
-
- if (!ftp_putcmd(ftp, "RNFR", src))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 350)
- return 0;
-
- if (!ftp_putcmd(ftp, "RNTO", dest))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp != 250)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_site
- */
-int
-ftp_site(ftpbuf_t *ftp, const char *cmd)
-{
- if (ftp == NULL)
- return 0;
-
- if (!ftp_putcmd(ftp, "SITE", cmd))
- return 0;
- if (!ftp_getresp(ftp) || ftp->resp < 200 || ftp->resp >= 300)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* static functions */
-
-/* {{{ ftp_putcmd
- */
-int
-ftp_putcmd(ftpbuf_t *ftp, const char *cmd, const char *args)
-{
- int size;
- char *data;
-
- /* build the output buffer */
- if (args && args[0]) {
- /* "cmd args\r\n\0" */
- if (strlen(cmd) + strlen(args) + 4 > FTP_BUFSIZE)
- return 0;
- size = sprintf(ftp->outbuf, "%s %s\r\n", cmd, args);
- }
- else {
- /* "cmd\r\n\0" */
- if (strlen(cmd) + 3 > FTP_BUFSIZE)
- return 0;
- size = sprintf(ftp->outbuf, "%s\r\n", cmd);
- }
-
- data = ftp->outbuf;
- if (my_send(ftp, ftp->fd, data, size) != size)
- return 0;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_readline
- */
-int
-ftp_readline(ftpbuf_t *ftp)
-{
- int size, rcvd;
- char *data, *eol;
-
- /* shift the extra to the front */
- size = FTP_BUFSIZE;
- rcvd = 0;
- if (ftp->extra) {
- memmove(ftp->inbuf, ftp->extra, ftp->extralen);
- rcvd = ftp->extralen;
- }
-
- data = ftp->inbuf;
-
- do {
- size -= rcvd;
- for (eol = data; rcvd; rcvd--, eol++) {
- if (*eol == '\r') {
- *eol = 0;
- ftp->extra = eol + 1;
- if (rcvd > 1 && *(eol + 1) == '\n') {
- ftp->extra++;
- rcvd--;
- }
- if ((ftp->extralen = --rcvd) == 0)
- ftp->extra = NULL;
- return 1;
- }
- else if (*eol == '\n') {
- *eol = 0;
- ftp->extra = eol + 1;
- if ((ftp->extralen = --rcvd) == 0)
- ftp->extra = NULL;
- return 1;
- }
- }
-
- data = eol;
- if ((rcvd = my_recv(ftp, ftp->fd, data, size)) < 1) {
- return 0;
- }
- } while (size);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ ftp_getresp
- */
-int
-ftp_getresp(ftpbuf_t *ftp)
-{
- char *buf;
-
- if (ftp == NULL) return 0;
- buf = ftp->inbuf;
- ftp->resp = 0;
-
- while (1) {
-
- if (!ftp_readline(ftp)) {
- return 0;
- }
-
- /* Break out when the end-tag is found */
- if (isdigit(ftp->inbuf[0]) &&
- isdigit(ftp->inbuf[1]) &&
- isdigit(ftp->inbuf[2]) &&
- ftp->inbuf[3] == ' ') {
- break;
- }
- }
-
- /* translate the tag */
- if (!isdigit(ftp->inbuf[0]) ||
- !isdigit(ftp->inbuf[1]) ||
- !isdigit(ftp->inbuf[2]))
- {
- return 0;
- }
-
- ftp->resp = 100 * (ftp->inbuf[0] - '0') +
- 10 * (ftp->inbuf[1] - '0') +
- (ftp->inbuf[2] - '0');
-
- memmove(ftp->inbuf, ftp->inbuf + 4, FTP_BUFSIZE - 4);
-
- return 1;
-}
-/* }}} */
-
-/* {{{ my_send
- */
-int
-my_send(ftpbuf_t *ftp, int s, void *buf, size_t len)
-{
- fd_set write_set;
- struct timeval tv;
- int n, size, sent;
-
- size = len;
- while (size) {
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
-
- FD_ZERO(&write_set);
- FD_SET(s, &write_set);
- n = select(s + 1, NULL, &write_set, NULL, &tv);
- if (n < 1) {
-#ifndef PHP_WIN32
- if (n == 0)
- errno = ETIMEDOUT;
-#endif
- return -1;
- }
-
- sent = send(s, buf, size, 0);
- if (sent == -1)
- return -1;
-
- buf = (char*) buf + sent;
- size -= sent;
- }
-
- return len;
-}
-/* }}} */
-
-/* {{{ my_recv
- */
-int
-my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len)
-{
- fd_set read_set;
- struct timeval tv;
- int n;
-
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
-
- FD_ZERO(&read_set);
- FD_SET(s, &read_set);
- n = select(s + 1, &read_set, NULL, NULL, &tv);
- if (n < 1) {
-#ifndef PHP_WIN32
- if (n == 0)
- errno = ETIMEDOUT;
-#endif
- return -1;
- }
-
- return recv(s, buf, len, 0);
-}
-/* }}} */
-
-/* {{{ my_accept
- */
-int
-my_accept(ftpbuf_t *ftp, int s, struct sockaddr *addr, int *addrlen)
-{
- fd_set accept_set;
- struct timeval tv;
- int n;
-
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
- FD_ZERO(&accept_set);
- FD_SET(s, &accept_set);
-
- n = select(s + 1, &accept_set, NULL, NULL, &tv);
- if (n < 1) {
-#ifndef PHP_WIN32
- if (n == 0)
- errno = ETIMEDOUT;
-#endif
- return -1;
- }
-
- return accept(s, addr, addrlen);
-}
-/* }}} */
-
-/* {{{ ftp_getdata
- */
-databuf_t*
-ftp_getdata(ftpbuf_t *ftp)
-{
- int fd = -1;
- databuf_t *data;
- php_sockaddr_storage addr;
- struct sockaddr *sa;
- int size;
- union ipbox ipbox;
- char arg[sizeof("255, 255, 255, 255, 255, 255")];
- struct timeval tv;
-
-
- /* ask for a passive connection if we need one */
- if (ftp->pasv && !ftp_pasv(ftp, 1))
- return NULL;
-
- /* alloc the data structure */
- data = calloc(1, sizeof(*data));
- if (data == NULL) {
- perror("calloc");
- return NULL;
- }
- data->listener = -1;
- data->fd = -1;
- Z_TYPE_P(data) = Z_TYPE_P(ftp);
-
- sa = (struct sockaddr *) &ftp->localaddr;
- /* bind/listen */
- if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) {
- perror("socket");
- goto bail;
- }
-
- /* passive connection handler */
- if (ftp->pasv) {
- /* clear the ready status */
- ftp->pasv = 1;
-
- /* connect */
- /* Win 95/98 seems not to like size > sizeof(sockaddr_in) */
- size = php_sockaddr_size(&ftp->pasvaddr);
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
- if (php_connect_nonb(fd, (struct sockaddr*) &ftp->pasvaddr, size, &tv) == -1) {
- perror("connect");
- goto bail;
- }
-
- data->fd = fd;
-
- return data;
- }
-
-
- /* active (normal) connection */
-
- /* bind to a local address */
- php_any_addr(sa->sa_family, &addr, 0);
- size = php_sockaddr_size(&addr);
-
- if (bind(fd, (struct sockaddr*) &addr, size) == -1) {
- perror("bind");
- goto bail;
- }
-
- if (getsockname(fd, (struct sockaddr*) &addr, &size) == -1) {
- perror("getsockname");
- goto bail;
- }
-
- if (listen(fd, 5) == -1) {
- perror("listen");
- goto bail;
- }
-
- data->listener = fd;
-
-#ifdef HAVE_IPV6
- if (sa->sa_family == AF_INET6) {
- /* need to use EPRT */
- char eprtarg[INET6_ADDRSTRLEN + sizeof("|x||xxxxx|")];
- char out[INET6_ADDRSTRLEN];
- inet_ntop(AF_INET6, &((struct sockaddr_in6*) sa)->sin6_addr, out, sizeof(out));
- sprintf(eprtarg, "|2|%s|%hu|", out, ntohs(((struct sockaddr_in6 *) &addr)->sin6_port));
-
- if (!ftp_putcmd(ftp, "EPRT", eprtarg))
- goto bail;
-
- if (!ftp_getresp(ftp) || ftp->resp != 200)
- goto bail;
-
- return data;
- }
-#endif
-
- /* send the PORT */
- ipbox.l[0] = ((struct sockaddr_in*) sa)->sin_addr.s_addr;
- ipbox.s[2] = ((struct sockaddr_in*) &addr)->sin_port;
- sprintf(arg, "%u,%u,%u,%u,%u,%u",
- ipbox.c[0], ipbox.c[1], ipbox.c[2], ipbox.c[3],
- ipbox.c[4], ipbox.c[5]);
-
- if (!ftp_putcmd(ftp, "PORT", arg))
- goto bail;
- if (!ftp_getresp(ftp) || ftp->resp != 200)
- goto bail;
-
- return data;
-
-bail:
- if (fd != -1)
- closesocket(fd);
- free(data);
- return NULL;
-}
-/* }}} */
-
-/* {{{ data_accept
- */
-databuf_t*
-data_accept(databuf_t *data, ftpbuf_t *ftp)
-{
- php_sockaddr_storage addr;
- int size;
-
- if (data->fd != -1)
- return data;
-
- size = sizeof(addr);
- data->fd = my_accept(ftp, data->listener, (struct sockaddr*) &addr, &size);
- closesocket(data->listener);
- data->listener = -1;
-
- if (data->fd == -1) {
- free(data);
- return NULL;
- }
-
- return data;
-}
-/* }}} */
-
-/* {{{ data_close
- */
-databuf_t*
-data_close(databuf_t *data)
-{
- if (data == NULL)
- return NULL;
- if (data->listener != -1)
- closesocket(data->listener);
- if (data->fd != -1)
- closesocket(data->fd);
- free(data);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_genlist
- */
-char**
-ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path)
-{
- FILE *tmpfp = NULL;
- databuf_t *data = NULL;
- char *ptr;
- int ch, lastch;
- int size, rcvd;
- int lines;
- char **ret = NULL;
- char **entry;
- char *text;
-
-
- if ((tmpfp = tmpfile()) == NULL)
- return NULL;
-
- if (!ftp_type(ftp, FTPTYPE_ASCII))
- goto bail;
-
- if ((data = ftp_getdata(ftp)) == NULL)
- goto bail;
-
- if (!ftp_putcmd(ftp, cmd, path))
- goto bail;
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125))
- goto bail;
-
- /* pull data buffer into tmpfile */
- if ((data = data_accept(data, ftp)) == NULL)
- goto bail;
-
- size = 0;
- lines = 0;
- lastch = 0;
- while ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) {
- if (rcvd == -1)
- goto bail;
-
- fwrite(data->buf, rcvd, 1, tmpfp);
-
- size += rcvd;
- for (ptr = data->buf; rcvd; rcvd--, ptr++) {
- if (*ptr == '\n' && lastch == '\r')
- lines++;
- else
- size++;
- lastch = *ptr;
- }
- }
-
- data = data_close(data);
-
- if (ferror(tmpfp))
- goto bail;
-
-
-
- rewind(tmpfp);
-
- ret = malloc((lines + 1) * sizeof(char**) + size * sizeof(char*));
- if (ret == NULL) {
- perror("malloc");
- goto bail;
- }
-
- entry = ret;
- text = (char*) (ret + lines + 1);
- *entry = text;
- lastch = 0;
- while ((ch = getc(tmpfp)) != EOF) {
- if (ch == '\n' && lastch == '\r') {
- *(text - 1) = 0;
- *++entry = text;
- }
- else {
- *text++ = ch;
- }
- lastch = ch;
- }
- *entry = NULL;
-
- if (ferror(tmpfp))
- goto bail;
-
- fclose(tmpfp);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- free(ret);
- return NULL;
- }
-
- return ret;
-bail:
- data_close(data);
- fclose(tmpfp);
- free(ret);
- return NULL;
-}
-/* }}} */
-
-#endif /* HAVE_FTP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ftp/ftp.h b/ext/ftp/ftp.h
deleted file mode 100644
index b201045f9b..0000000000
--- a/ext/ftp/ftp.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andrew Skalski <askalski@chek.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef FTP_H
-#define FTP_H
-
-#include "php_network.h"
-
-#include <stdio.h>
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#define FTP_DEFAULT_TIMEOUT 90
-
-/* XXX this should be configurable at runtime XXX */
-#define FTP_BUFSIZE 4096
-
-typedef enum ftptype {
- FTPTYPE_ASCII,
- FTPTYPE_IMAGE
-} ftptype_t;
-
-typedef struct ftpbuf
-{
- int fd; /* control connection */
- php_sockaddr_storage localaddr; /* local address */
- int resp; /* last response code */
- char inbuf[FTP_BUFSIZE]; /* last response text */
- char *extra; /* extra characters */
- int extralen; /* number of extra chars */
- char outbuf[FTP_BUFSIZE]; /* command output buffer */
- char *pwd; /* cached pwd */
- char *syst; /* cached system type */
- ftptype_t type; /* current transfer type */
- int pasv; /* 0=off; 1=pasv; 2=ready */
- php_sockaddr_storage pasvaddr; /* passive mode address */
- long timeout_sec; /* User configureable timeout (seconds) */
-} ftpbuf_t;
-
-typedef struct databuf
-{
- int listener; /* listener socket */
- int fd; /* data connection */
- ftptype_t type; /* transfer type */
- char buf[FTP_BUFSIZE]; /* data buffer */
-} databuf_t;
-
-
-/* open a FTP connection, returns ftpbuf (NULL on error)
- * port is the ftp port in network byte order, or 0 for the default
- */
-ftpbuf_t* ftp_open(const char *host, short port, long timeout_sec);
-
-/* quits from the ftp session (it still needs to be closed)
- * return true on success, false on error
- */
-int ftp_quit(ftpbuf_t *ftp);
-
-/* frees up any cached data held in the ftp buffer */
-void ftp_gc(ftpbuf_t *ftp);
-
-/* close the FTP connection and return NULL */
-ftpbuf_t* ftp_close(ftpbuf_t *ftp);
-
-/* logs into the FTP server, returns true on success, false on error */
-int ftp_login(ftpbuf_t *ftp, const char *user, const char *pass);
-
-/* reinitializes the connection, returns true on success, false on error */
-int ftp_reinit(ftpbuf_t *ftp);
-
-/* returns the remote system type (NULL on error) */
-const char* ftp_syst(ftpbuf_t *ftp);
-
-/* returns the present working directory (NULL on error) */
-const char* ftp_pwd(ftpbuf_t *ftp);
-
-/* exec a command [special features], return true on success, false on error */
-int ftp_exec(ftpbuf_t *ftp, const char *cmd);
-
-/* changes directories, return true on success, false on error */
-int ftp_chdir(ftpbuf_t *ftp, const char *dir);
-
-/* changes to parent directory, return true on success, false on error */
-int ftp_cdup(ftpbuf_t *ftp);
-
-/* creates a directory, return the directory name on success, NULL on error.
- * the return value must be freed
- */
-char* ftp_mkdir(ftpbuf_t *ftp, const char *dir);
-
-/* removes a directory, return true on success, false on error */
-int ftp_rmdir(ftpbuf_t *ftp, const char *dir);
-
-/* returns a NULL-terminated array of filenames in the given path
- * or NULL on error. the return array must be freed (but don't
- * free the array elements)
- */
-char** ftp_nlist(ftpbuf_t *ftp, const char *path);
-
-/* returns a NULL-terminated array of lines returned by the ftp
- * LIST command for the given path or NULL on error. the return
- * array must be freed (but don't
- * free the array elements)
- */
-char** ftp_list(ftpbuf_t *ftp, const char *path);
-
-/* switches passive mode on or off
- * returns true on success, false on error
- */
-int ftp_pasv(ftpbuf_t *ftp, int pasv);
-
-/* retrieves a file and saves its contents to outfp
- * returns true on success, false on error
- */
-int ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path,
- ftptype_t type);
-
-/* stores the data from a file, socket, or process as a file on the remote server
- * returns true on success, false on error
- */
-int ftp_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type);
-
-/* returns the size of the given file, or -1 on error */
-int ftp_size(ftpbuf_t *ftp, const char *path);
-
-/* returns the last modified time of the given file, or -1 on error */
-time_t ftp_mdtm(ftpbuf_t *ftp, const char *path);
-
-/* renames a file on the server */
-int ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest);
-
-/* deletes the file from the server */
-int ftp_delete(ftpbuf_t *ftp, const char *path);
-
-/* sends a SITE command to the server */
-int ftp_site(ftpbuf_t *ftp, const char *cmd);
-
-#endif
diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c
deleted file mode 100644
index f2e7c19484..0000000000
--- a/ext/ftp/php_ftp.c
+++ /dev/null
@@ -1,770 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andrew Skalski <askalski@chek.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_FTP
-
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-
-#include "php_ftp.h"
-#include "ftp.h"
-
-static int le_ftpbuf;
-#define le_ftpbuf_name "FTP Buffer"
-
-function_entry php_ftp_functions[] = {
- PHP_FE(ftp_connect, NULL)
- PHP_FE(ftp_login, NULL)
- PHP_FE(ftp_pwd, NULL)
- PHP_FE(ftp_cdup, NULL)
- PHP_FE(ftp_chdir, NULL)
- PHP_FE(ftp_exec, NULL)
- PHP_FE(ftp_mkdir, NULL)
- PHP_FE(ftp_rmdir, NULL)
- PHP_FE(ftp_nlist, NULL)
- PHP_FE(ftp_rawlist, NULL)
- PHP_FE(ftp_systype, NULL)
- PHP_FE(ftp_pasv, NULL)
- PHP_FE(ftp_get, NULL)
- PHP_FE(ftp_fget, NULL)
- PHP_FE(ftp_put, NULL)
- PHP_FE(ftp_fput, NULL)
- PHP_FE(ftp_size, NULL)
- PHP_FE(ftp_mdtm, NULL)
- PHP_FE(ftp_rename, NULL)
- PHP_FE(ftp_delete, NULL)
- PHP_FE(ftp_site, NULL)
- PHP_FE(ftp_close, NULL)
- PHP_FE(ftp_set_option, NULL)
- PHP_FE(ftp_get_option, NULL)
- PHP_FALIAS(ftp_quit, ftp_close, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry php_ftp_module_entry = {
- STANDARD_MODULE_HEADER,
- "ftp",
- php_ftp_functions,
- PHP_MINIT(ftp),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(ftp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_FTP
-ZEND_GET_MODULE(php_ftp)
-#endif
-
-static void ftp_destructor_ftpbuf(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ftpbuf_t *ftp = (ftpbuf_t *)rsrc->ptr;
-
- ftp_close(ftp);
-}
-
-PHP_MINIT_FUNCTION(ftp)
-{
- le_ftpbuf = zend_register_list_destructors_ex(ftp_destructor_ftpbuf, NULL, le_ftpbuf_name, module_number);
- REGISTER_LONG_CONSTANT("FTP_ASCII", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_TEXT", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_BINARY", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_IMAGE", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_TIMEOUT_SEC", PHP_FTP_OPT_TIMEOUT_SEC, CONST_PERSISTENT | CONST_CS);
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(ftp)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "FTP support", "enabled");
- php_info_print_table_end();
-}
-
-#define XTYPE(xtype, mode) { \
- if (mode != FTPTYPE_ASCII && mode != FTPTYPE_IMAGE) { \
- php_error(E_WARNING, "%s(): mode must be FTP_ASCII or FTP_BINARY", get_active_function_name(TSRMLS_C)); \
- RETURN_FALSE; \
- } \
- xtype = mode; \
- }
-
-
-/* {{{ proto resource ftp_connect(string host [, int port [, int timeout)]])
- Opens a FTP stream */
-PHP_FUNCTION(ftp_connect)
-{
- ftpbuf_t *ftp;
- char *host;
- int host_len, port = 0;
- long timeout_sec = FTP_DEFAULT_TIMEOUT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &host, &host_len, &port, &timeout_sec) == FAILURE) {
- return;
- }
-
- if (timeout_sec <= 0) {
- php_error(E_WARNING, "%s(): timeout has to be greater than 0",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- /* connect */
- ftp = ftp_open(host, (short)port, timeout_sec);
- if (ftp == NULL) {
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, ftp, le_ftpbuf);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_login(resource stream, string username, string password)
- Logs into the FTP server */
-PHP_FUNCTION(ftp_login)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *user, *pass;
- int user_len, pass_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &user, &user_len, &pass, &pass_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* log in */
- if (!ftp_login(ftp, user, pass)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string ftp_pwd(resource stream)
- Returns the present working directory */
-PHP_FUNCTION(ftp_pwd)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- const char *pwd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- pwd = ftp_pwd(ftp);
- if (pwd == NULL) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_STRING((char*) pwd, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_cdup(resource stream)
- Changes to the parent directory */
-PHP_FUNCTION(ftp_cdup)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!ftp_cdup(ftp)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_chdir(resource stream, string directory)
- Changes directories */
-PHP_FUNCTION(ftp_chdir)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* change directories */
- if (!ftp_chdir(ftp, dir)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_exec(resource stream, string command)
- Requests execution of a program on the FTP server */
-PHP_FUNCTION(ftp_exec)
-{
- pval *z_ftp;
- ftpbuf_t *ftp;
- char *cmd;
- int cmd_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* execute serverside command */
- if (!ftp_exec(ftp, cmd)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string ftp_mkdir(resource stream, string directory)
- Creates a directory and returns the absolute path for the new directory or false on error */
-PHP_FUNCTION(ftp_mkdir)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *dir, *tmp;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* create directorie */
- if (NULL == (tmp = ftp_mkdir(ftp, dir))) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_STRING(tmp, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_rmdir(resource stream, string directory)
- Removes a directory */
-PHP_FUNCTION(ftp_rmdir)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* remove directorie */
- if (!ftp_rmdir(ftp, dir)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array ftp_nlist(resource stream, string directory)
- Returns an array of filenames in the given directory */
-PHP_FUNCTION(ftp_nlist)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char **nlist, **ptr, *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get list of files */
- if (NULL == (nlist = ftp_nlist(ftp, dir))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (ptr = nlist; *ptr; ptr++)
- add_next_index_string(return_value, *ptr, 1);
- free(nlist);
-}
-/* }}} */
-
-/* {{{ proto array ftp_rawlist(resource stream, string directory)
- Returns a detailed listing of a directory as an array of output lines */
-PHP_FUNCTION(ftp_rawlist)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char **llist, **ptr, *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get raw directory listing */
- if (NULL == (llist = ftp_list(ftp, dir))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (ptr = llist; *ptr; ptr++)
- add_next_index_string(return_value, *ptr, 1);
- free(llist);
-}
-/* }}} */
-
-/* {{{ proto string ftp_systype(resource stream)
- Returns the system type identifier */
-PHP_FUNCTION(ftp_systype)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- const char *syst;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- syst = ftp_syst(ftp);
- if (NULL == (syst = ftp_syst(ftp))) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_STRING((char*) syst, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_fget(resource stream, resource fp, string remote_file, int mode)
- Retrieves a file from the FTP server and writes it to an open file */
-PHP_FUNCTION(ftp_fget)
-{
- zval *z_ftp, *z_file;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- php_stream *stream;
- char *file;
- int file_len, mode;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrsl", &z_ftp, &z_file, &file, &file_len, &mode) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- ZEND_FETCH_RESOURCE(stream, php_stream*, &z_file, -1, "File-Handle", php_file_le_stream());
- XTYPE(xtype, mode);
-
- if (!ftp_get(ftp, stream, file, xtype) || php_stream_error(stream)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- if (php_stream_error(stream)) {
- php_error(E_WARNING, "%s(): error writing %s", get_active_function_name(TSRMLS_C), Z_STRVAL_P(z_file));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_pasv(resource stream, bool pasv)
- Turns passive mode on or off */
-PHP_FUNCTION(ftp_pasv)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- zend_bool pasv;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &z_ftp, &pasv) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!ftp_pasv(ftp, pasv ? 1 : 0)) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_get(resource stream, string local_file, string remote_file, int mode)
- Retrieves a file from the FTP server and writes it to a local file */
-PHP_FUNCTION(ftp_get)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- php_stream * tmpstream, *outstream;
- char *local, *remote;
- int local_len, remote_len, mode;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl", &z_ftp, &local, &local_len, &remote, &remote_len, &mode) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- XTYPE(xtype, mode);
-
- /* get to temporary file, so if there is an error, no existing
- * file gets clobbered
- */
- tmpstream = php_stream_fopen_tmpfile();
- if (tmpstream == NULL) {
- RETURN_FALSE;
- }
-
- if (!ftp_get(ftp, tmpstream, remote, xtype) || php_stream_error(tmpstream)) {
- php_stream_close(tmpstream);
- php_error(E_WARNING, "ftp_get: %s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- outstream = php_stream_fopen(local, "wb", NULL);
-
- if (outstream == NULL) {
- php_stream_close(tmpstream);
- php_error(E_WARNING, "%s(): error opening %s", get_active_function_name(TSRMLS_C), local);
- RETURN_FALSE;
- }
-
- php_stream_rewind(tmpstream);
- if (php_stream_copy_to_stream(tmpstream, outstream, PHP_STREAM_COPY_ALL) == 0) {
- php_error(E_WARNING, "%s(): error writing %s", get_active_function_name(TSRMLS_C), local);
- RETVAL_FALSE;
- }
- else
- RETVAL_TRUE;
-
- php_stream_close(tmpstream);
- php_stream_close(outstream);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_fput(resource stream, string remote_file, resource fp, int mode)
- Stores a file from an open file to the FTP server */
-PHP_FUNCTION(ftp_fput)
-{
- zval *z_ftp, *z_file;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- int mode, remote_len;
- php_stream *stream;
- char *remote;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsrl", &z_ftp, &remote, &remote_len, &z_file, &mode) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- ZEND_FETCH_RESOURCE(stream, php_stream*, &z_file, -1, "File-Handle", php_file_le_stream());
- XTYPE(xtype, mode);
-
- if (!ftp_put(ftp, remote, stream, xtype)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_put(resource stream, string remote_file, string local_file, int mode)
- Stores a file on the FTP server */
-PHP_FUNCTION(ftp_put)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- char *remote, *local;
- int remote_len, local_len, mode;
- php_stream * instream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl", &z_ftp, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- XTYPE(xtype, mode);
-
- instream = php_stream_fopen(local, "rb", NULL);
-
- if (instream == NULL) {
- RETURN_FALSE;
- }
-
- if (!ftp_put(ftp, remote, instream, xtype) || php_stream_error(instream)) {
- php_stream_close(instream);
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
- php_stream_close(instream);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftp_size(resource stream, string filename)
- Returns the size of the file, or -1 on error */
-PHP_FUNCTION(ftp_size)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *file;
- int file_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get file size */
- RETURN_LONG(ftp_size(ftp, file));
-}
-/* }}} */
-
-/* {{{ proto int ftp_mdtm(resource stream, string filename)
- Returns the last modification time of the file, or -1 on error */
-PHP_FUNCTION(ftp_mdtm)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *file;
- int file_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get file mod time */
- RETURN_LONG(ftp_mdtm(ftp, file));
-}
-/* }}} */
-
-/* {{{ proto bool ftp_rename(resource stream, string src, string dest)
- Renames the given file to a new path */
-PHP_FUNCTION(ftp_rename)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *src, *dest;
- int src_len, dest_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* rename the file */
- if (!ftp_rename(ftp, src, dest)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_delete(resource stream, string file)
- Deletes a file */
-PHP_FUNCTION(ftp_delete)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *file;
- int file_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* delete the file */
- if (!ftp_delete(ftp, file)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_site(resource stream, string cmd)
- Sends a SITE command to the server */
-PHP_FUNCTION(ftp_site)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *cmd;
- int cmd_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* send the site command */
- if (!ftp_site(ftp, cmd)) {
- php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void ftp_close(resource stream)
- Closes the FTP stream */
-PHP_FUNCTION(ftp_close)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- zend_list_delete(Z_LVAL_P(z_ftp));
-}
-/* }}} */
-
-/* {{{ proto bool ftp_set_option(resource stream, int option, mixed value)
- Sets an FTP option */
-PHP_FUNCTION(ftp_set_option)
-{
- zval *z_ftp, *z_value;
- long option;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &z_ftp, &option, &z_value) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- switch (option) {
- case PHP_FTP_OPT_TIMEOUT_SEC:
- if (Z_TYPE_P(z_value) != IS_LONG) {
- php_error(E_WARNING, "%s(): option TIMEOUT_SEC expects value of type long, %s given",
- get_active_function_name(TSRMLS_C), zend_zval_type_name(z_value));
- RETURN_FALSE;
- }
- if (Z_LVAL_P(z_value) <= 0) {
- php_error(E_WARNING, "%s(): timeout has to be greater than 0",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- ftp->timeout_sec = Z_LVAL_P(z_value);
- RETURN_TRUE;
- break;
- default:
- php_error(E_WARNING, "%s(): unknown option '%d'", get_active_function_name(TSRMLS_C), option);
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed ftp_get_option(resource stream, int option)
- Gets an FTP option */
-PHP_FUNCTION(ftp_get_option)
-{
- zval *z_ftp;
- long option;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &z_ftp, &option) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- switch (option) {
- case PHP_FTP_OPT_TIMEOUT_SEC:
- RETURN_LONG(ftp->timeout_sec);
- break;
- default:
- php_error(E_WARNING, "%s(): unknown option '%d'", get_active_function_name(TSRMLS_C), option);
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-#endif /* HAVE_FTP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ftp/php_ftp.h b/ext/ftp/php_ftp.h
deleted file mode 100644
index d5d36b96e4..0000000000
--- a/ext/ftp/php_ftp.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrew Skalski <askalski@chek.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef _INCLUDED_FTP_H
-#define _INCLUDED_FTP_H
-
-#if HAVE_FTP
-
-extern zend_module_entry php_ftp_module_entry;
-#define php_ftp_module_ptr &php_ftp_module_entry
-
-#define PHP_FTP_OPT_TIMEOUT_SEC 0
-
-PHP_MINIT_FUNCTION(ftp);
-PHP_MINFO_FUNCTION(ftp);
-
-PHP_FUNCTION(ftp_connect);
-PHP_FUNCTION(ftp_login);
-PHP_FUNCTION(ftp_pwd);
-PHP_FUNCTION(ftp_cdup);
-PHP_FUNCTION(ftp_chdir);
-PHP_FUNCTION(ftp_exec);
-PHP_FUNCTION(ftp_mkdir);
-PHP_FUNCTION(ftp_rmdir);
-PHP_FUNCTION(ftp_nlist);
-PHP_FUNCTION(ftp_rawlist);
-PHP_FUNCTION(ftp_systype);
-PHP_FUNCTION(ftp_pasv);
-PHP_FUNCTION(ftp_get);
-PHP_FUNCTION(ftp_fget);
-PHP_FUNCTION(ftp_put);
-PHP_FUNCTION(ftp_fput);
-PHP_FUNCTION(ftp_size);
-PHP_FUNCTION(ftp_mdtm);
-PHP_FUNCTION(ftp_rename);
-PHP_FUNCTION(ftp_delete);
-PHP_FUNCTION(ftp_site);
-PHP_FUNCTION(ftp_close);
-PHP_FUNCTION(ftp_set_option);
-PHP_FUNCTION(ftp_get_option);
-
-#define phpext_ftp_ptr php_ftp_module_ptr
-
-#else
-#define php_ftp_module_ptr NULL
-#endif /* HAVE_FTP */
-
-#endif
diff --git a/ext/gd/CREDITS b/ext/gd/CREDITS
deleted file mode 100644
index 8cdeef9338..0000000000
--- a/ext/gd/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-GD imaging
-Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto
diff --git a/ext/gd/config.m4 b/ext/gd/config.m4
deleted file mode 100644
index da8ef3c59a..0000000000
--- a/ext/gd/config.m4
+++ /dev/null
@@ -1,283 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_GD_JPEG,[
- PHP_ARG_WITH(jpeg-dir, for the location of libjpeg,
- [ --with-jpeg-dir=DIR GD: Set the path to libjpeg install prefix.])
-
- if test "$PHP_JPEG_DIR" != "no"; then
-
- for i in /usr /usr/local $PHP_JPEG_DIR; do
- test -f $i/lib/libjpeg.$SHLIB_SUFFIX_NAME -o -f $i/lib/libjpeg.a && GD_JPEG_DIR=$i
- done
-
- if test -z "$GD_JPEG_DIR"; then
- AC_MSG_ERROR([libjpeg.(a|so) not found.])
- fi
-
- PHP_CHECK_LIBRARY(jpeg,jpeg_read_header,
- [
- PHP_ADD_LIBRARY_WITH_PATH(jpeg, $GD_JPEG_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libjpeg.(a|so). Please check config.log for more information.])
- ],[
- -L$GD_JPEG_DIR/lib
- ])
- else
- AC_MSG_RESULT([If configure fails try --with-jpeg-dir=<DIR>])
- fi
-])
-
-AC_DEFUN(PHP_GD_PNG,[
- PHP_ARG_WITH(png-dir, for the location of libpng,
- [ --with-png-dir=DIR GD: Set the path to libpng install prefix.])
-
- if test "$PHP_PNG_DIR" != "no"; then
-
- for i in /usr /usr/local $PHP_PNG_DIR; do
- test -f $i/lib/libpng.$SHLIB_SUFFIX_NAME -o -f $i/lib/libpng.a && GD_PNG_DIR=$i
- done
-
- if test -z "$GD_PNG_DIR"; then
- AC_MSG_ERROR([libpng.(a|so) not found.])
- fi
-
- if test "$PHP_ZLIB_DIR" = "no"; then
- AC_MSG_ERROR([PNG support requires ZLIB. Use --with-zlib-dir=<DIR>])
- fi
-
- PHP_CHECK_LIBRARY(png,png_write_image,
- [
- PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR/lib, GD_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(png, $GD_PNG_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libpng.(a|so) or libz.(a|so). Please check config.log for more information.])
- ],[
- -L$PHP_ZLIB_DIR/lib -lz -L$GD_PNG_DIR/lib
- ])
-
- else
- AC_MSG_RESULT([If configure fails try --with-png-dir=<DIR> and --with-zlib-dir=<DIR>])
- fi
-])
-
-AC_DEFUN(PHP_GD_XPM,[
- PHP_ARG_WITH(xpm-dir, for the location of libXpm,
- [ --with-xpm-dir=DIR GD: Set the path to libXpm install prefix.])
-
- if test "$PHP_XPM_DIR" != "no"; then
-
- for i in /usr /usr/local /usr/X11R6 $PHP_XPM_DIR; do
- test -f $i/lib/libXpm.$SHLIB_SUFFIX_NAME -o -f $i/lib/libXpm.a && GD_XPM_DIR=$i
- done
-
- if test -z "$GD_XPM_DIR"; then
- AC_MSG_ERROR([libXpm.(a|so) not found.])
- fi
-
- PHP_CHECK_LIBRARY(Xpm,XpmFreeXpmImage,
- [
- PHP_ADD_LIBRARY_WITH_PATH(Xpm, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(X11, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libXpm.(a|so) or libX11.(a|so). Please check config.log for more information.])
- ],[
- -L$GD_XPM_DIR/lib -lX11
- ])
- else
- AC_MSG_RESULT(If configure fails try --with-xpm-dir=<DIR>)
- fi
-])
-
-AC_DEFUN(PHP_GD_FREETYPE1,[
- PHP_ARG_WITH(ttf,for FreeType 1.x support,
- [ --with-ttf[=DIR] GD: Include FreeType 1.x support])
-
- if test "$PHP_TTF" != "no"; then
- if test "$PHP_FREETYPE_DIR" = "no" -o "$PHP_FREETYPE_DIR" = ""; then
- if test -n "$PHP_TTF" ; then
- for i in /usr /usr/local $PHP_TTF; do
- if test -f "$i/include/freetype.h" ; then
- TTF_DIR=$i
- unset TTF_INC_DIR
- fi
- if test -f "$i/include/freetype/freetype.h"; then
- TTF_DIR=$i
- TTF_INC_DIR=$i/include/freetype
- fi
- done
- fi
- if test -n "$TTF_DIR" ; then
- AC_DEFINE(HAVE_LIBTTF,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(ttf, $TTF_DIR/lib, GD_SHARED_LIBADD)
- fi
- if test -z "$TTF_INC_DIR"; then
- TTF_INC_DIR=$TTF_DIR/include
- fi
- PHP_ADD_INCLUDE($TTF_INC_DIR)
- else
- AC_MSG_RESULT([no - FreeType 2.x is to be used instead])
- fi
- fi
-])
-
-AC_DEFUN(PHP_GD_FREETYPE2,[
- PHP_ARG_WITH(freetype-dir, for freetype(2),
- [ --with-freetype-dir=DIR GD: Set the path to freetype2 install prefix.])
-
- if test "$PHP_FREETYPE_DIR" != "no"; then
- for i in /usr /usr/local $PHP_FREETYPE_DIR; do
- if test -f "$i/include/freetype2/freetype/freetype.h"; then
- FREETYPE2_DIR=$i
- FREETYPE2_INC_DIR=$i/include/freetype2/freetype
- fi
- done
-
- if test -n "$FREETYPE2_DIR" ; then
- PHP_ADD_LIBRARY_WITH_PATH(freetype, $FREETYPE2_DIR/lib, GD_SHARED_LIBADD)
- PHP_ADD_INCLUDE($FREETYPE2_INC_DIR)
- AC_DEFINE(USE_GD_IMGSTRTTF, 1, [ ])
- AC_DEFINE(HAVE_LIBFREETYPE,1,[ ])
- else
- AC_MSG_ERROR([freetype2 not found!])
- fi
- else
- AC_MSG_RESULT([If configure fails try --with-freetype-dir=<DIR>])
- fi
-])
-
-AC_DEFUN(PHP_GD_T1LIB,[
- PHP_ARG_WITH(t1lib, for T1lib support,
- [ --with-t1lib[=DIR] GD: Include T1lib support.])
-
- if test "$PHP_T1LIB" != "no"; then
-
- for i in /usr /usr/local $PHP_T1LIB; do
- test -f "$i/include/t1lib.h" && GD_T1_DIR=$i
- done
-
- if test -z "$GD_T1_DIR"; then
- AC_MSG_ERROR([Your t1lib distribution is not installed correctly. Please reinstall it.])
- fi
-
- PHP_CHECK_LIBRARY(t1, T1_LoadFont,
- [
- AC_DEFINE(HAVE_LIBT1,1,[ ])
- PHP_ADD_INCLUDE("$GD_T1_DIR/include")
- PHP_ADD_LIBRARY_WITH_PATH(t1, "$GD_T1_DIR/lib", GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libt1.(a|so). Please check config.log for more information.])
- ],[
- -L$GD_T1_DIR/lib
- ])
- fi
-])
-
-AC_DEFUN(PHP_GD_TTSTR,[
- PHP_ARG_ENABLE(gd-native-ttf, whether to enable truetype string function in GD,
- [ --enable-gd-native-ttf GD: Enable TrueType string function.])
-
- if test "$PHP_GD_NATIVE_TTF" = "yes"; then
- AC_DEFINE(USE_GD_IMGSTRTTF, 1, [ ])
- fi
-])
-
-AC_DEFUN(PHP_GD_CHECK_VERSION,[
- PHP_CHECK_LIBRARY(gd, gdImageString16, [AC_DEFINE(HAVE_LIBGD13, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImagePaletteCopy, [AC_DEFINE(HAVE_LIBGD15, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromPng, [AC_DEFINE(HAVE_GD_PNG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromGif, [AC_DEFINE(HAVE_GD_GIF_READ, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageGif, [AC_DEFINE(HAVE_GD_GIF_CREATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageWBMP, [AC_DEFINE(HAVE_GD_WBMP, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromJpeg, [AC_DEFINE(HAVE_GD_JPG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromXpm, [AC_DEFINE(HAVE_GD_XPM, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromGd2, [AC_DEFINE(HAVE_GD_GD2, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateTrueColor, [AC_DEFINE(HAVE_LIBGD20, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageSetTile, [AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageSetBrush, [AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageStringTTF, [AC_DEFINE(HAVE_GD_STRINGTTF, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageStringFT, [AC_DEFINE(HAVE_GD_STRINGFT, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageStringFTEx, [AC_DEFINE(HAVE_GD_STRINGFTEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageColorClosestHWB, [AC_DEFINE(HAVE_COLORCLOSESTHWB, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageColorResolve, [AC_DEFINE(HAVE_GDIMAGECOLORRESOLVE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageGifCtx, [AC_DEFINE(HAVE_GD_GIF_CTX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
-])
-
-
-PHP_ARG_WITH(gd, for GD support,
-[ --with-gd[=DIR] Include GD support (DIR is GD's install dir).])
-
-if test "$PHP_GD" = "php"; then
- GD_MODULE_TYPE=builtin
- sources="libgd/gd.c libgd/gd_gd.c libgd/gd_gd2.c libgd/gd_io.c libgd/gd_io_dp.c \
- libgd/gd_io_file.c libgd/gd_ss.c libgd/gd_io_ss.c libgd/gd_png.c libgd/gd_jpeg.c \
- libgd/gdxpm.c libgd/gdfontt.c libgd/gdfonts.c libgd/gdfontmb.c libgd/gdfontl.c \
- libgd/gdfontg.c libgd/gdtables.c libgd/gdft.c libgd/gdcache.c libgd/gdkanji.c \
- libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c libgd/gd_topal.c"
- PHP_NEW_EXTENSION(gd, gd.c gdcache.c gdttf.c gdt1.c $sources, $ext_shared,,-I@ext_srcdir@/libgd)
- PHP_ADD_BUILD_DIR($ext_builddir/libgd)
-
-dnl Various checks for GD features
- PHP_GD_TTSTR
- PHP_GD_JPEG
- PHP_GD_PNG
- PHP_GD_XPM
- PHP_GD_FREETYPE2
- PHP_GD_FREETYPE1
- PHP_GD_T1LIB
-
-else
- if test "$PHP_GD" != "no"; then
-
- PHP_NEW_EXTENSION(gd, gd.c gdcache.c gdttf.c gdt1.c, $ext_shared)
- PHP_SUBST(GD_SHARED_LIBADD)
-
-dnl Various checks for GD features
- PHP_GD_TTSTR
- PHP_GD_JPEG
- PHP_GD_PNG
- PHP_GD_XPM
- PHP_GD_FREETYPE2
- PHP_GD_FREETYPE1
- PHP_GD_T1LIB
-
- if test "$PHP_GD" = "yes"; then
- GD_SEARCH_PATHS="/usr/local /usr"
- else
- GD_SEARCH_PATHS=$PHP_GD
- fi
-
- for j in $GD_SEARCH_PATHS; do
- for i in include/gd1.3 include/gd include gd1.3 gd ""; do
- test -f $j/$i/gd.h && GD_INCLUDE=$j/$i
- done
-
- for i in lib/gd1.3 lib/gd lib gd1.3 gd ""; do
- test -f $j/$i/libgd.$SHLIB_SUFFIX_NAME -o -f $j/$i/libgd.a && GD_LIB=$j/$i
- done
- done
-
- if test -n "$GD_INCLUDE" -a -n "$GD_LIB" ; then
- PHP_ADD_LIBRARY_WITH_PATH(gd, $GD_LIB, GD_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBGD,1,[ ])
- PHP_GD_CHECK_VERSION
- else
- AC_MSG_ERROR([Unable to find libgd.(a|so) anywhere under $GD_SEARCH_PATHS])
- fi
-
-dnl NetBSD package structure
- if test -f /usr/pkg/include/gd/gd.h -a -z "$GD_INCLUDE" ; then
- GD_INCLUDE=/usr/pkg/include/gd
- fi
-
-dnl SuSE 6.x package structure
- if test -f /usr/include/gd/gd.h -a -z "$GD_INCLUDE" ; then
- GD_INCLUDE=/usr/include/gd
- fi
-
- PHP_EXPAND_PATH($GD_INCLUDE, GD_INCLUDE)
- PHP_ADD_INCLUDE($GD_INCLUDE)
-
- fi
-fi
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
deleted file mode 100644
index 464e7e4729..0000000000
--- a/ext/gd/gd.c
+++ /dev/null
@@ -1,3649 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@fast.no> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
- Cold Spring Harbor Labs. */
-
-/* Note that there is no code from the gd package in this file */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/head.h"
-#include <math.h>
-#include "SAPI.h"
-#include "php_gd.h"
-#include "ext/standard/info.h"
-
-#if HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef PHP_WIN32
-# include <io.h>
-# include <fcntl.h>
-#endif
-
-#if HAVE_LIBGD
-
-static int le_gd, le_gd_font;
-#if HAVE_LIBT1
-static int le_ps_font, le_ps_enc;
-#endif
-
-#include <gd.h>
-#include <gdfontt.h> /* 1 Tiny font */
-#include <gdfonts.h> /* 2 Small font */
-#include <gdfontmb.h> /* 3 Medium bold font */
-#include <gdfontl.h> /* 4 Large font */
-#include <gdfontg.h> /* 5 Giant font */
-#ifdef ENABLE_GD_TTF
-# include "gdttf.h"
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#ifdef ENABLE_GD_TTF
-static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int, int);
-#endif
-
-#if HAVE_LIBGD15
-/* it's >= 1.5, i.e. has IOCtx */
-#define USE_GD_IOCTX 1
-#else
-#undef USE_GD_IOCTX
-#endif
-
-#ifdef USE_GD_IOCTX
-#include "gd_ctx.c"
-#else
-#define gdImageCreateFromGdCtx NULL
-#define gdImageCreateFromGd2Ctx NULL
-#define gdImageCreateFromGd2partCtx NULL
-#define gdImageCreateFromGifCtx NULL
-#define gdImageCreateFromJpegCtx NULL
-#define gdImageCreateFromPngCtx NULL
-#define gdImageCreateFromWBMPCtx NULL
-typedef FILE gdIOCtx;
-#define CTX_PUTC(c, fp) fputc(c, fp)
-#endif
-
-static gdImagePtr _php_image_create_from_string (zval **Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC);
-static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)());
-static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)());
-static int _php_image_type ( char data[8] );
-static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type);
-static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold);
-
-/* {{{ gd_functions[]
- */
-function_entry gd_functions[] = {
- PHP_FE(imagearc, NULL)
- PHP_FE(imagechar, NULL)
- PHP_FE(imagecharup, NULL)
- PHP_FE(imagecolorallocate, NULL)
- PHP_FE(imagepalettecopy, NULL)
- PHP_FE(imagecolorat, NULL)
- PHP_FE(imagecolorclosest, NULL)
- PHP_FE(imagecolorclosesthwb, NULL)
- PHP_FE(imagecolordeallocate, NULL)
- PHP_FE(imagecolorresolve, NULL)
- PHP_FE(imagecolorexact, NULL)
- PHP_FE(imagecolorset, NULL)
- PHP_FE(imagecolortransparent, NULL)
- PHP_FE(imagecolorstotal, NULL)
- PHP_FE(imagecolorsforindex, NULL)
- PHP_FE(imagecopy, NULL)
- PHP_FE(imagecopymerge, NULL)
- PHP_FE(imagecopyresized, NULL)
- PHP_FE(imagecreate, NULL)
-
- PHP_FE(imagecreatetruecolor, NULL)
- PHP_FE(imagetruecolortopalette, NULL)
- PHP_FE(imagesetthickness, NULL)
- PHP_FE(imageellipse, NULL)
- PHP_FE(imagefilledellipse, NULL)
- PHP_FE(imagefilledarc, NULL)
- PHP_FE(imagealphablending, NULL)
- PHP_FE(imagecolorresolvealpha, NULL)
- PHP_FE(imagecolorclosestalpha, NULL)
- PHP_FE(imagecolorexactalpha, NULL)
- PHP_FE(imagecopyresampled, NULL)
- PHP_FE(imagesettile, NULL)
-
- PHP_FE(imagesetbrush, NULL)
- PHP_FE(imagesetstyle, NULL)
- PHP_FE(imagecopymergegray, NULL)
-
- PHP_FE(imagecreatefromstring, NULL)
-#ifdef HAVE_GD_PNG
- PHP_FE(imagecreatefrompng, NULL)
-#endif
-#ifdef HAVE_GD_GIF_READ
- PHP_FE(imagecreatefromgif, NULL)
-#endif
-#ifdef HAVE_GD_JPG
- PHP_FE(imagecreatefromjpeg, NULL)
-#endif
-#ifdef HAVE_GD_WBMP
- PHP_FE(imagecreatefromwbmp, NULL)
-#endif
-#ifdef HAVE_GD_XBM
- PHP_FE(imagecreatefromxbm, NULL)
-#endif
-#ifdef HAVE_GD_XPM
- PHP_FE(imagecreatefromxpm, NULL)
-#endif
- PHP_FE(imagecreatefromgd, NULL)
-#ifdef HAVE_GD_GD2
- PHP_FE(imagecreatefromgd2, NULL)
- PHP_FE(imagecreatefromgd2part, NULL)
-#endif
-#ifdef HAVE_GD_PNG
- PHP_FE(imagepng, NULL)
-#endif
-#ifdef HAVE_GD_GIF_CREATE
- PHP_FE(imagegif, NULL)
-#endif
-#ifdef HAVE_GD_JPG
- PHP_FE(imagejpeg, NULL)
-#endif
-#ifdef HAVE_GD_WBMP
- PHP_FE(imagewbmp, NULL)
-#endif
- PHP_FE(imagegd, NULL)
-#ifdef HAVE_GD_GD2
- PHP_FE(imagegd2, NULL)
-#endif
-
- PHP_FE(imagedestroy, NULL)
- PHP_FE(imagegammacorrect, NULL)
- PHP_FE(imagefill, NULL)
- PHP_FE(imagefilledpolygon, NULL)
- PHP_FE(imagefilledrectangle, NULL)
- PHP_FE(imagefilltoborder, NULL)
- PHP_FE(imagefontwidth, NULL)
- PHP_FE(imagefontheight, NULL)
- PHP_FE(imageinterlace, NULL)
- PHP_FE(imageline, NULL)
- PHP_FE(imageloadfont, NULL)
- PHP_FE(imagepolygon, NULL)
- PHP_FE(imagerectangle, NULL)
- PHP_FE(imagesetpixel, NULL)
- PHP_FE(imagestring, NULL)
- PHP_FE(imagestringup, NULL)
- PHP_FE(imagesx, NULL)
- PHP_FE(imagesy, NULL)
- PHP_FE(imagedashedline, NULL)
-#ifdef ENABLE_GD_TTF
- PHP_FE(imagettfbbox, NULL)
- PHP_FE(imagettftext, NULL)
- PHP_FE(imageftbbox, NULL)
- PHP_FE(imagefttext, NULL)
-#endif
-#ifdef HAVE_LIBT1
- PHP_FE(imagepsloadfont, NULL)
- /*
- PHP_FE(imagepscopyfont, NULL)
- */
- PHP_FE(imagepsfreefont, NULL)
- PHP_FE(imagepsencodefont, NULL)
- PHP_FE(imagepsextendfont, NULL)
- PHP_FE(imagepsslantfont, NULL)
- PHP_FE(imagepstext, NULL)
- PHP_FE(imagepsbbox, NULL)
-#endif
- PHP_FE(imagetypes, NULL)
-
-#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP)
- PHP_FE(jpeg2wbmp, NULL)
-#endif
-#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP)
- PHP_FE(png2wbmp, NULL)
-#endif
-#ifdef HAVE_GD_WBMP
- PHP_FE(image2wbmp, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry gd_module_entry = {
- STANDARD_MODULE_HEADER,
- "gd",
- gd_functions,
- PHP_MINIT(gd),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(gd),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_GD
-ZEND_GET_MODULE(gd)
-#endif
-
-/* {{{ php_free_gd_image
- */
-static void php_free_gd_image(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- gdImageDestroy((gdImagePtr)rsrc->ptr);
-}
-/* }}} */
-
-/* {{{ php_free_gd_font
- */
-static void php_free_gd_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- gdFontPtr fp = (gdFontPtr)rsrc->ptr;
-
- if (fp->data) {
- efree(fp->data);
- }
- efree(fp);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(gd)
-{
- le_gd = zend_register_list_destructors_ex(php_free_gd_image, NULL, "gd", module_number);
- le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number);
-#if HAVE_LIBT1
- T1_SetBitmapPad(8);
- T1_InitLib(NO_LOGFILE|IGNORE_CONFIGFILE|IGNORE_FONTDATABASE);
- T1_SetLogLevel(T1LOG_DEBUG);
- le_ps_font = zend_register_list_destructors_ex(php_free_ps_font, NULL, "gd PS font", module_number);
- le_ps_enc = zend_register_list_destructors_ex(php_free_ps_enc, NULL, "gd PS encoding", module_number);
-#endif
- REGISTER_LONG_CONSTANT("IMG_GIF", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_JPG", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_JPEG", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_PNG", 4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_WBMP", 8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_XPM", 16, CONST_CS | CONST_PERSISTENT);
-#ifdef gdTiled
- /* special colours for gd */
- REGISTER_LONG_CONSTANT("IMG_COLOR_TILED", gdTiled, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_STYLED", gdStyled, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_BRUSHED", gdBrushed, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_STYLEDBRUSHED", gdStyledBrushed, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_TRANSPARENT", gdTransparent, CONST_CS | CONST_PERSISTENT);
-#endif
-#if HAVE_LIBGD20
- /* for imagefilledarc */
- REGISTER_LONG_CONSTANT("IMG_ARC_ROUNDED", gdArc, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_PIE", gdPie, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_CHORD", gdChord, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_NOFILL", gdNoFill, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_EDGED", gdEdged, CONST_CS | CONST_PERSISTENT);
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(gd)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "GD Support", "enabled");
-
- /* need to use a PHPAPI function here because it is external module in windows */
-
-#if HAVE_LIBGD20
- php_info_print_table_row(2, "GD Version", "2.0 or higher");
-#elif HAVE_GDIMAGECOLORRESOLVE
- php_info_print_table_row(2, "GD Version", "1.6.2 or higher");
-#elif HAVE_LIBGD13
- php_info_print_table_row(2, "GD Version", "between 1.3 and 1.6.1");
-#else
- php_info_print_table_row(2, "GD Version", "1.2");
-#endif
-
-#ifdef ENABLE_GD_TTF
- php_info_print_table_row(2, "FreeType Support", "enabled");
-#if HAVE_LIBFREETYPE
- php_info_print_table_row(2, "FreeType Linkage", "with freetype");
-#elif HAVE_LIBTTF
- php_info_print_table_row(2, "FreeType Linkage", "with TTF library");
-#else
- php_info_print_table_row(2, "FreeType Linkage", "with unknown library");
-#endif
-#endif
-
-#ifdef HAVE_LIBT1
- php_info_print_table_row(2, "T1Lib Support", "enabled");
-#endif
-
-/* this next part is stupid ... if I knew better, I'd put them all on one row (cmv) */
-
-#ifdef HAVE_GD_GIF_READ
- php_info_print_table_row(2, "GIF Read Support", "enabled");
-#endif
-#ifdef HAVE_GD_GIF_CREATE
- php_info_print_table_row(2, "GIF Create Support", "enabled");
-#endif
-#ifdef HAVE_GD_JPG
- php_info_print_table_row(2, "JPG Support", "enabled");
-#endif
-#ifdef HAVE_GD_PNG
- php_info_print_table_row(2, "PNG Support", "enabled");
-#endif
-#ifdef HAVE_GD_WBMP
- php_info_print_table_row(2, "WBMP Support", "enabled");
-#endif
-#ifdef HAVE_GD_XBM
- php_info_print_table_row(2, "XBM Support", "enabled");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* Need this for cpdf. See also comment in file.c php3i_get_le_fp() */
-PHP_GD_API int phpi_get_le_gd(void)
-{
- return le_gd;
-}
-
-#ifndef HAVE_GDIMAGECOLORRESOLVE
-
-/* {{{ gdImageColorResolve
- */
-/********************************************************************/
-/* gdImageColorResolve is a replacement for the old fragment: */
-/* */
-/* if ((color=gdImageColorExact(im,R,G,B)) < 0) */
-/* if ((color=gdImageColorAllocate(im,R,G,B)) < 0) */
-/* color=gdImageColorClosest(im,R,G,B); */
-/* */
-/* in a single function */
-
-int
-gdImageColorResolve(gdImagePtr im, int r, int g, int b)
-{
- int c;
- int ct = -1;
- int op = -1;
- long rd, gd, bd, dist;
- long mindist = 3*255*255; /* init to max poss dist */
-
- for (c = 0; c < im->colorsTotal; c++) {
- if (im->open[c]) {
- op = c; /* Save open slot */
- continue; /* Color not in use */
- }
- rd = (long)(im->red [c] - r);
- gd = (long)(im->green[c] - g);
- bd = (long)(im->blue [c] - b);
- dist = rd * rd + gd * gd + bd * bd;
- if (dist < mindist) {
- if (dist == 0) {
- return c; /* Return exact match color */
- }
- mindist = dist;
- ct = c;
- }
- }
- /* no exact match. We now know closest, but first try to allocate exact */
- if (op == -1) {
- op = im->colorsTotal;
- if (op == gdMaxColors) { /* No room for more colors */
- return ct; /* Return closest available color */
- }
- im->colorsTotal++;
- }
- im->red [op] = r;
- im->green[op] = g;
- im->blue [op] = b;
- im->open [op] = 0;
- return op; /* Return newly allocated color */
-}
-/* }}} */
-
-#endif
-
-#define FLIPWORD(a) (((a & 0xff000000) >> 24) | ((a & 0x00ff0000) >> 8) | ((a & 0x0000ff00) << 8) | ((a & 0x000000ff) << 24))
-
-/* {{{ proto int imageloadfont(string filename)
- Load a new font */
-PHP_FUNCTION(imageloadfont)
-{
- zval **file;
- int hdr_size = sizeof(gdFont) - sizeof(char *);
- int ind, body_size, n=0, b, i, body_size_check;
- gdFontPtr font;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(file);
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(file), "rb", IGNORE_PATH|IGNORE_URL_WIN|REPORT_ERRORS, NULL);
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- /* Only supports a architecture-dependent binary dump format
- * at the moment.
- * The file format is like this on machines with 32-byte integers:
- *
- * byte 0-3: (int) number of characters in the font
- * byte 4-7: (int) value of first character in the font (often 32, space)
- * byte 8-11: (int) pixel width of each character
- * byte 12-15: (int) pixel height of each character
- * bytes 16-: (char) array with character data, one byte per pixel
- * in each character, for a total of
- * (nchars*width*height) bytes.
- */
- font = (gdFontPtr)emalloc(sizeof(gdFont));
- b = 0;
- while (b < hdr_size && (n = php_stream_read(stream, (char*)&font[b], hdr_size - b)))
- b += n;
- if (!n) {
- php_stream_close(stream);
- efree(font);
- if (php_stream_eof(stream)) {
- php_error(E_WARNING, "ImageFontLoad: end of file while reading header");
- } else {
- php_error(E_WARNING, "ImageFontLoad: error while reading header");
- }
- RETURN_FALSE;
- }
- i = php_stream_tell(stream);
- php_stream_seek(stream, 0, SEEK_END);
- body_size_check = php_stream_tell(stream) - hdr_size;
- php_stream_seek(stream, i, SEEK_SET);
- body_size = font->w * font->h * font->nchars;
- if (body_size != body_size_check) {
- font->w = FLIPWORD(font->w);
- font->h = FLIPWORD(font->h);
- font->nchars = FLIPWORD(font->nchars);
- body_size = font->w * font->h * font->nchars;
- }
- if (body_size != body_size_check) {
- php_error(E_WARNING, "ImageFontLoad: error reading font");
- efree(font);
- RETURN_FALSE;
- }
-
- font->data = emalloc(body_size);
- b = 0;
- while (b < body_size && (n = php_stream_read(stream, &font->data[b], body_size - b)))
- b += n;
- if (!n) {
- php_stream_close(stream);
- efree(font->data);
- efree(font);
- if (php_stream_eof(stream)) {
- php_error(E_WARNING, "ImageFontLoad: end of file while reading body");
- } else {
- php_error(E_WARNING, "ImageFontLoad: error while reading body");
- }
- RETURN_FALSE;
- }
- php_stream_close(stream);
-
- /* Adding 5 to the font index so we will never have font indices
- * that overlap with the old fonts (with indices 1-5). The first
- * list index given out is always 1.
- */
- ind = 5 + zend_list_insert(font, le_gd_font);
-
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto void imagesetstyle(resource im, array styles)
- Set the line drawing styles for use with imageline and IMG_COLOR_STYLED. */
-PHP_FUNCTION(imagesetstyle)
-{
- zval **IM, **styles;
- gdImagePtr im;
- int * stylearr;
- int index;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &styles) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_array_ex(styles);
-
- /* copy the style values in the stylearr */
- stylearr = emalloc(sizeof(int) * zend_hash_num_elements(HASH_OF(*styles)));
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(*styles), &pos);
-
- for (index=0;; zend_hash_move_forward_ex(HASH_OF(*styles), &pos)) {
- zval ** item;
-
- if (zend_hash_get_current_data_ex(HASH_OF(*styles), (void**)&item, &pos) == FAILURE)
- break;
-
- convert_to_long_ex(item);
-
- stylearr[index++] = Z_LVAL_PP(item);
- }
- gdImageSetStyle(im, stylearr, index);
-
- efree(stylearr);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagecreatetruecolor(int x_size, int y_size)
- Create a new true color image */
-PHP_FUNCTION(imagecreatetruecolor)
-{
-#if HAVE_LIBGD20
- zval **x_size, **y_size;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(x_size);
- convert_to_long_ex(y_size);
-
- im = gdImageCreateTrueColor(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size));
-
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)
- Convert a true colour image to a palette based image with a number of colours, optionally using dithering. */
-PHP_FUNCTION(imagetruecolortopalette)
-{
-#if HAVE_LIBGD20
- zval **IM, **dither, **ncolors;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &dither, &ncolors) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_boolean_ex(dither);
- convert_to_long_ex(ncolors);
-
- gdImageTrueColorToPalette(im, Z_LVAL_PP(dither), Z_LVAL_PP(ncolors));
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-
-}
-/* }}} */
-
-/* {{{ proto void imagesetthickness(resource im, int thickness)
- Set line thickness for drawing lines, ellipses, rectangles, polygons etc. */
-PHP_FUNCTION(imagesetthickness)
-{
-#if HAVE_LIBGD20
- zval **IM, **thick;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &thick) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_long_ex(thick);
-
- gdImageSetThickness(im, Z_LVAL_PP(thick));
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-
-}
-/* }}} */
-
-/* {{{ proto void imageellipse(resource im, int cx, int cy, int w, int h, int color)
- Draw an ellipse */
-PHP_FUNCTION(imageellipse)
-{
-#if 0 && HAVE_LIBGD20 /* this function is missing from GD 2.0.1 */
- zval **IM, **cx, **cy, **w, **h, **color;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h, &color) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(color);
-
- gdImageEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), Z_LVAL_PP(color));
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto void imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)
- Draw an ellipse */
-PHP_FUNCTION(imagefilledellipse)
-{
-#if HAVE_LIBGD20
- zval **IM, **cx, **cy, **w, **h, **color;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h, &color) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(color);
-
- gdImageFilledEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), Z_LVAL_PP(color));
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagefilledarc(int im, int cx, int cy, int w, int h, int s, int e, int col, int style)
- Draw a filled partial ellipse */
-PHP_FUNCTION(imagefilledarc)
-{
-#if HAVE_LIBGD20
- zval **IM, **cx, **cy, **w, **h, **ST, **E, **col, **style;
- gdImagePtr im;
- int e, st;
-
- if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &IM, &cx, &cy, &w, &h, &ST, &E, &col, &style) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(ST);
- convert_to_long_ex(E);
- convert_to_long_ex(col);
- convert_to_long_ex(style);
-
- e = Z_LVAL_PP(E);
- st = Z_LVAL_PP(ST);
-
- if (e < 0) e %= 360;
- if (st < 0) st %= 360;
-
- gdImageFilledArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), st, e, Z_LVAL_PP(col), Z_LVAL_PP(style));
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto void imagealphablending(resource im, bool on)
- Turn alpha blending mode on or off for the given image */
-PHP_FUNCTION(imagealphablending)
-{
-#if HAVE_LIBGD20
- zval **IM, **blend;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &blend) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_boolean_ex(blend);
-
- gdImageAlphaBlending(im, Z_LVAL_PP(blend));
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)
- Resolve/Allocate a colour with an alpha level. Works for true colour and palette based images */
-PHP_FUNCTION(imagecolorresolvealpha)
-{
-#if HAVE_LIBGD20
- zval **IM, ** red, **green, **blue, **alpha;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
- convert_to_long_ex(alpha);
-
- RETURN_LONG(gdImageColorResolveAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-
-}
-/* }}} */
-
-/* {{{ proto int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)
- Find the closest matching colour with alpha transparency */
-PHP_FUNCTION(imagecolorclosestalpha)
-{
-#if HAVE_LIBGD20
- zval **IM, ** red, **green, **blue, **alpha;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
- convert_to_long_ex(alpha);
-
- RETURN_LONG(gdImageColorClosestAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)
- Find exact match for colour with transparency */
-PHP_FUNCTION(imagecolorexactalpha)
-{
-#if HAVE_LIBGD20
- zval **IM, **red, **green, **blue, **alpha;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
- convert_to_long_ex(alpha);
-
- RETURN_LONG(gdImageColorExactAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecopyresampled(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
- Copy and resize part of an image using resampling to help ensure clarity */
-PHP_FUNCTION(imagecopyresampled)
-{
-#if HAVE_LIBGD20
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX;
-
- if (ZEND_NUM_ARGS() != 10 ||
- zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(DW);
- convert_to_long_ex(DH);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- dstH = Z_LVAL_PP(DH);
- dstW = Z_LVAL_PP(DW);
-
- gdImageCopyResampled(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagesettile(resource image, resource tile)
- Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color */
-PHP_FUNCTION(imagesettile)
-{
-#if HAVE_GD_IMAGESETTILE
- zval **IM, **TILE;
- gdImagePtr im, tile;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
-
- gdImageSetTile(im, tile);
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires a more recent version of GD", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagesetbrush(resource image, resource brush)
- Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color */
-PHP_FUNCTION(imagesetbrush)
-{
-#if HAVE_GD_IMAGESETBRUSH
- zval **IM, **TILE;
- gdImagePtr im, tile;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
-
- gdImageSetBrush(im, tile);
-
- RETURN_TRUE;
-#else
- zend_error(E_WARNING, "%s(): requires a more recent version of GD", get_active_function_name(TSRMLS_C));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecreate(int x_size, int y_size)
- Create a new image */
-PHP_FUNCTION(imagecreate)
-{
- zval **x_size, **y_size;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(x_size);
- convert_to_long_ex(y_size);
-
- im = gdImageCreate(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size));
-
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
-}
-/* }}} */
-
-/* {{{ proto int imagetypes(void)
- Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM */
-PHP_FUNCTION(imagetypes)
-{
- int ret=0;
-#ifdef HAVE_GD_GIF_CREATE
- ret = 1;
-#endif
-#ifdef HAVE_GD_JPG
- ret |= 2;
-#endif
-#ifdef HAVE_GD_PNG
- ret |= 4;
-#endif
-#ifdef HAVE_GD_WBMP
- ret |= 8;
-#endif
-#ifdef HAVE_GD_XPM
- ret |= 16;
-#endif
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ _php_image_type
- */
-static const char php_sig_gd2[3] = {'g', 'd', '2'};
-
-static int _php_image_type (char data[8])
-{
-#ifdef HAVE_LIBGD15
- /* Based on ext/standard/images.c */
-
- if (data == NULL)
- return -1;
-
- if (!memcmp(data, php_sig_gd2, 3))
- return PHP_GDIMG_TYPE_GD2;
- else if (!memcmp(data, php_sig_jpg, 3))
- return PHP_GDIMG_TYPE_JPG;
- else if (!memcmp(data, php_sig_png, 3)) {
- if (!memcmp(data, php_sig_png, 8))
- return PHP_GDIMG_TYPE_PNG;
- }
- else if (!memcmp(data, php_sig_gif, 3))
- return PHP_GDIMG_TYPE_GIF;
-#ifdef HAVE_GD_WBMP
- else {
- gdIOCtx *io_ctx;
- io_ctx = gdNewDynamicCtx (8, data);
- if (io_ctx) {
- if (getmbi(gdGetC, io_ctx) == 0 && skipheader(gdGetC, io_ctx) == 0 ) {
- io_ctx->free(io_ctx);
- return PHP_GDIMG_TYPE_WBM;
- } else
- io_ctx->free(io_ctx);
- }
- }
-#endif
- return -1;
-#endif
-}
-/* }}} */
-
-/* {{{ _php_image_create_from_string
- */
-gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC)
-{
-#ifdef HAVE_LIBGD15
- gdImagePtr im;
- gdIOCtx *io_ctx;
-
- io_ctx = gdNewDynamicCtx (Z_STRLEN_PP(data), Z_STRVAL_PP(data));
-
- if(!io_ctx) {
- return NULL;
- }
-
- im = (*ioctx_func_p)(io_ctx);
- if (!im) {
- php_error(E_WARNING, "%s: Passed data is not in '%s' format", get_active_function_name(TSRMLS_C), tn);
- return NULL;
- }
-
- return im;
-#else
- return NULL;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromstring(string image)
- Create a new image from the image stream in the string */
-PHP_FUNCTION(imagecreatefromstring)
-{
-#ifdef HAVE_LIBGD15
- zval **data;
- gdImagePtr im;
- int imtype;
- char sig[8];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &data) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(data);
- memcpy(sig, Z_STRVAL_PP(data), 8);
-
- imtype = _php_image_type (sig);
-
- switch (imtype) {
- case PHP_GDIMG_TYPE_JPG:
-#ifdef HAVE_GD_JPG
- im = _php_image_create_from_string (data, "JPEG", gdImageCreateFromJpegCtx TSRMLS_CC);
-#else
- php_error(E_WARNING, "No JPEG support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_PNG:
-#ifdef HAVE_GD_PNG
- im = _php_image_create_from_string (data, "PNG", gdImageCreateFromPngCtx TSRMLS_CC);
-#else
- php_error(E_WARNING, "No PNG support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_GIF:
-#ifdef HAVE_GD_GIF_READ
- im = _php_image_create_from_string (data, "GIF", gdImageCreateFromGifCtx TSRMLS_CC);
-#else
- php_error(E_WARNING, "No GIF support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_WBM:
-#ifdef HAVE_GD_WBMP
- im = _php_image_create_from_string (data, "WBMP", gdImageCreateFromWBMPCtx TSRMLS_CC);
-#else
- php_error(E_WARNING, "No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_GD2:
-#ifdef HAVE_GD_GD2
- im = _php_image_create_from_string (data, "GD2", gdImageCreateFromGd2Ctx TSRMLS_CC);
-#else
- php_error(E_WARNING, "No GD2 support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- default:
- php_error(E_WARNING, "Data is not in a recognized format.");
- RETURN_FALSE;
-
- }
- if (!im) {
- php_error(E_WARNING, "Couldn't create GD Image Stream out of Data");
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
-#else
- php_error(E_WARNING, "ImageCreateFromString: Only available with GD 1.5+");
-#endif
-}
-/* }}} */
-
-/* {{{ _php_image_create_from
- */
-static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)())
-{
- zval **file, **srcx, **srcy, **width, **height;
- gdImagePtr im = NULL;
- char *fn=NULL;
- php_stream *stream;
- FILE * fp = NULL;
- int argc=ZEND_NUM_ARGS();
-
- if ((image_type == PHP_GDIMG_TYPE_GD2PART && argc != 4) ||
- argc != 1 || zend_get_parameters_ex(argc, &file, &srcx, &srcy, &width, &height) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(file);
-
- if (argc == 4 && image_type == PHP_GDIMG_TYPE_GD2PART) {
- multi_convert_to_long_ex(4, srcx, srcy, width, height);
- }
-
- fn = Z_STRVAL_PP(file);
-
- stream = php_stream_open_wrapper(fn, "rb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL);
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
-#ifndef USE_GD_IOCTX
- ioctx_func_p = NULL; /* don't allow sockets without IOCtx */
-#endif
-
- /* try and avoid allocating a FILE* if the stream is not naturally a FILE* */
- if (php_stream_is(stream, PHP_STREAM_IS_STDIO)) {
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)&fp, REPORT_ERRORS)) {
- goto out_err;
- }
- }
- else if (ioctx_func_p) {
-#ifdef USE_GD_IOCTX
- /* we can create an io context */
- gdIOCtx* io_ctx;
- size_t buff_size;
- char *buff;
-
- /* needs to be malloc (persistent) - GD will free() it later */
- buff_size = php_stream_copy_to_mem(stream, &buff, PHP_STREAM_COPY_ALL, 1);
-
- if(!buff_size) {
- php_error(E_WARNING,"%s: Cannot read image data", get_active_function_name(TSRMLS_C));
- goto out_err;
- }
-
- io_ctx = gdNewDynamicCtx(buff_size, buff);
- if(!io_ctx) {
- php_error(E_WARNING,"%s: Cannot allocate GD IO context", get_active_function_name(TSRMLS_C));
- goto out_err;
- }
- if (image_type == PHP_GDIMG_TYPE_GD2PART) {
- im = (*ioctx_func_p)(io_ctx, Z_LVAL_PP(srcx), Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height));
- } else {
- im = (*ioctx_func_p)(io_ctx);
- }
- io_ctx->free(io_ctx);
-#endif
- }
- else {
- /* try and force the stream to be FILE* */
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO | PHP_STREAM_CAST_TRY_HARD, (void**)&fp, REPORT_ERRORS))
- goto out_err;
- }
-
- if (!im && fp) {
- if (image_type == PHP_GDIMG_TYPE_GD2PART) {
- im = (*func_p)(fp, Z_LVAL_PP(srcx), Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height));
- } else {
- im = (*func_p)(fp);
- }
-
- fflush(fp);
- }
-
- if (im) {
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
- return;
- }
-
- php_error(E_WARNING,"%s: '%s' is not a valid %s file", get_active_function_name(TSRMLS_C), fn, tn);
-out_err:
- php_stream_close(stream);
- RETURN_FALSE;
-
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromgif(string filename)
- Create a new image from GIF file or URL */
-PHP_FUNCTION(imagecreatefromgif)
-{
-#ifdef HAVE_GD_GIF_READ
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageCreateFromGif, gdImageCreateFromGifCtx);
-#else /* HAVE_GD_GIF_READ */
- php_error(E_WARNING, "ImageCreateFromGif: No GIF read support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_GIF_READ */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromjpeg(string filename)
- Create a new image from JPEG file or URL */
-PHP_FUNCTION(imagecreatefromjpeg)
-{
-#ifdef HAVE_GD_JPG
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageCreateFromJpeg, gdImageCreateFromJpegCtx);
-#else /* HAVE_GD_JPG */
- php_error(E_WARNING, "ImageCreateFromJpeg: No JPEG support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_JPG */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefrompng(string filename)
- Create a new image from PNG file or URL */
-PHP_FUNCTION(imagecreatefrompng)
-{
-#ifdef HAVE_GD_PNG
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImageCreateFromPng, gdImageCreateFromPngCtx);
-#else /* HAVE_GD_PNG */
- php_error(E_WARNING, "ImageCreateFromPng: No PNG support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_PNG */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromxbm(string filename)
- Create a new image from XBM file or URL */
-PHP_FUNCTION(imagecreatefromxbm)
-{
-#ifdef HAVE_GD_XBM
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageCreateFromXbm, NULL);
-#else /* HAVE_GD_XBM */
- php_error(E_WARNING, "ImageCreateFromXbm: No XBM support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_XBM */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromxpm(string filename)
- Create a new image from XPM file or URL */
-PHP_FUNCTION(imagecreatefromxpm)
-{
- /*
-#ifdef HAVE_GD_XPM
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XPM, "XPM", gdImageCreateFromXpm, NULL);
-#else
- */
- php_error(E_WARNING, "ImageCreateFromXpm: No XPM support in this PHP build");
- RETURN_FALSE;
- /*
-#endif
- */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromwbmp(string filename)
- Create a new image from WBMP file or URL */
-PHP_FUNCTION(imagecreatefromwbmp)
-{
-#ifdef HAVE_GD_WBMP
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageCreateFromWBMP, gdImageCreateFromWBMPCtx);
-#else /* HAVE_GD_WBMP */
- php_error(E_WARNING, "ImageCreateFromWBMP: No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_WBMP */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromgd(string filename)
- Create a new image from GD file or URL */
-PHP_FUNCTION(imagecreatefromgd)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD, "GD", gdImageCreateFromGd, gdImageCreateFromGdCtx);
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromgd2(string filename)
- Create a new image from GD2 file or URL */
-PHP_FUNCTION(imagecreatefromgd2)
-{
-#ifdef HAVE_GD_GD2
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageCreateFromGd2, gdImageCreateFromGd2Ctx);
-#else /* HAVE_GD_GD2 */
- php_error(E_WARNING, "ImageCreateFromGd2: No GD2 support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_GD2 */
-}
-/* }}} */
-
-/* {{{ proto int imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)
- Create a new image from a given part of GD2 file or URL */
-PHP_FUNCTION(imagecreatefromgd2part)
-{
-#ifdef HAVE_GD_GD2
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2PART, "GD2", gdImageCreateFromGd2Part, gdImageCreateFromGd2PartCtx);
-#else /* HAVE_GD_GD2 */
- php_error(E_WARNING, "ImageCreateFromGd2Part: No GD2 support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_GD2 */
-}
-/* }}} */
-
-/* {{{ _php_image_output
- */
-static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())
-{
- zval **imgind, **file, **quality;
- gdImagePtr im;
- char *fn = NULL;
- FILE *fp;
- int argc = ZEND_NUM_ARGS();
- int q = -1, i;
-
- /* The quality parameter for Wbmp stands for the threshold when called from image2wbmp() */
- /* When called from imagewbmp() the quality parameter stands for the foreground color. Default: black. */
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &imgind, &file, &quality) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", le_gd);
-
- if (argc > 1) {
- convert_to_string_ex(file);
- fn = Z_STRVAL_PP(file);
- if (argc == 3) {
- convert_to_long_ex(quality);
- q = Z_LVAL_PP(quality);
- }
- }
-
- if ((argc == 2) || (argc == 3 && Z_STRLEN_PP(file))) {
- if (!fn || fn == empty_string || php_check_open_basedir(fn TSRMLS_CC)) {
- php_error(E_WARNING, "%s: invalid filename '%s'", get_active_function_name(TSRMLS_C), fn);
- RETURN_FALSE;
- }
-
- fp = VCWD_FOPEN(fn, "wb");
- if (!fp) {
- php_error(E_WARNING, "%s: unable to open '%s' for writing", get_active_function_name(TSRMLS_C), fn);
- RETURN_FALSE;
- }
-
- switch(image_type) {
- case PHP_GDIMG_CONVERT_WBM:
- if(q<0||q>255) {
- php_error(E_WARNING, "%s: invalid threshold value '%d'. It must be between 0 and 255", get_active_function_name(TSRMLS_C), q);
- }
- case PHP_GDIMG_TYPE_JPG:
- (*func_p)(im, fp, q);
- break;
- case PHP_GDIMG_TYPE_WBM:
- for(i=0; i < gdImageColorsTotal(im); i++) {
- if(gdImageRed(im, i) == 0) break;
- }
- (*func_p)(im, i, fp);
- break;
- default:
- (*func_p)(im, fp);
- break;
- }
- fflush(fp);
- fclose(fp);
- } else {
- int b;
- FILE *tmp;
- char buf[4096];
-
- tmp = tmpfile();
- if (tmp == NULL) {
- php_error(E_WARNING, "%s: unable to open temporary file", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- switch(image_type) {
- case PHP_GDIMG_CONVERT_WBM:
- if(q<0||q>255) {
- php_error(E_WARNING, "%s: invalid threshold value '%d'. It must be between 0 and 255", get_active_function_name(TSRMLS_C), q);
- }
- case PHP_GDIMG_TYPE_JPG:
- (*func_p)(im, tmp, q);
- break;
- case PHP_GDIMG_TYPE_WBM:
- for(i=0; i < gdImageColorsTotal(im); i++) {
- if(gdImageRed(im, i) == 0) break;
- }
- (*func_p)(im, q, tmp);
- break;
- default:
- (*func_p)(im, tmp);
- break;
- }
-
- fseek(tmp, 0, SEEK_SET);
-
-#if APACHE && defined(CHARSET_EBCDIC)
- /* XXX this is unlikely to work any more thies@thieso.net */
-
- /* This is a binary file already: avoid EBCDIC->ASCII conversion */
- ap_bsetflag(php3_rqst->connection->client, B_EBCDIC2ASCII, 0);
-#endif
- while ((b = fread(buf, 1, sizeof(buf), tmp)) > 0) {
- php_write(buf, b TSRMLS_CC);
- }
-
- fclose(tmp);
- /* the temporary file is automatically deleted */
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagegif(int im [, string filename])
- Output GIF image to browser or file */
-PHP_FUNCTION(imagegif)
-{
-#ifdef HAVE_GD_GIF_CREATE
-#ifdef HAVE_GD_GIF_CTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGifCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGif);
-#endif
-#else /* HAVE_GD_GIF_CREATE */
- php_error(E_WARNING, "ImageGif: No GIF create support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_GIF_CREATE */
-}
-/* }}} */
-
-/* {{{ proto int imagepng(int im [, string filename])
- Output PNG image to browser or file */
-PHP_FUNCTION(imagepng)
-{
-#ifdef HAVE_GD_PNG
-#ifdef USE_GD_IOCTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePngCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePng);
-#endif
-#else /* HAVE_GD_PNG */
- php_error(E_WARNING, "ImagePng: No PNG support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_PNG */
-}
-/* }}} */
-
-/* {{{ proto int imagejpeg(int im [, string filename [, int quality]])
- Output JPEG image to browser or file */
-PHP_FUNCTION(imagejpeg)
-{
-#ifdef HAVE_GD_JPG
-#ifdef USE_GD_IOCTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpegCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpeg);
-#endif
-#else /* HAVE_GD_JPG */
- php_error(E_WARNING, "ImageJpeg: No JPG support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_JPG */
-}
-/* }}} */
-
-/* {{{ proto int imagewbmp(int im [, string filename, [, int foreground]])
- Output WBMP image to browser or file */
-PHP_FUNCTION(imagewbmp)
-{
-#ifdef HAVE_GD_WBMP
-#ifdef USE_GD_IOCTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMPCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMP);
-#endif
-#else /* HAVE_GD_WBMP */
- php_error(E_WARNING, "ImageWBMP: No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_WBMP */
-}
-/* }}} */
-
-/* {{{ proto int imagegd(int im [, string filename])
- Output GD image to browser or file */
-PHP_FUNCTION(imagegd)
-{
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD, "GD", gdImageGd);
-}
-/* }}} */
-
-/* {{{ proto int imagegd2(int im [, string filename])
- Output GD2 image to browser or file */
-PHP_FUNCTION(imagegd2)
-{
-#ifdef HAVE_GD_GD2
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageGd2);
-#else /* HAVE_GD_GD2 */
- php_error(E_WARNING, "ImageGd2: No GD2 support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_GD2 */
-}
-/* }}} */
-
-/* {{{ proto int imagedestroy(int im)
- Destroy an image */
-PHP_FUNCTION(imagedestroy)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- zend_list_delete(Z_LVAL_PP(IM));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagecolorallocate(int im, int red, int green, int blue)
- Allocate a color for an image */
-PHP_FUNCTION(imagecolorallocate)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorAllocate(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-/* {{{ proto int imagepalettecopy(int dst, int src)
- Copy the palette from the src image onto the dst image */
-PHP_FUNCTION(imagepalettecopy)
-{
-#if HAVE_LIBGD15
- zval **dstim, **srcim;
- gdImagePtr dst, src;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dstim, &srcim) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(dst, gdImagePtr, dstim, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(src, gdImagePtr, srcim, -1, "Image", le_gd);
-
- gdImagePaletteCopy(dst, src);
-#else
- php_error(E_WARNING, "Sorry ImagePaletteCopy was introduced in GD version 1.5");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecolorat(int im, int x, int y)
- Get the index of the color of a pixel */
-PHP_FUNCTION(imagecolorat)
-{
- zval **IM, **x, **y;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &x, &y) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
-
-#if HAVE_LIBGD20
- if(gdImageTrueColor(im)) {
- if (im->tpixels && gdImageBoundsSafe(im, Z_LVAL_PP(x), Z_LVAL_PP(y))) {
- RETURN_LONG(gdImageTrueColorPixel(im, Z_LVAL_PP(x), Z_LVAL_PP(y)));
- } else {
- php_error(E_NOTICE, "%ld,%ld is out of bounds",Z_LVAL_PP(x), Z_LVAL_PP(y));
- RETURN_FALSE;
- }
- } else {
-#endif
- if (im->pixels && gdImageBoundsSafe(im, Z_LVAL_PP(x), Z_LVAL_PP(y))) {
-#if HAVE_LIBGD13
- RETURN_LONG(im->pixels[Z_LVAL_PP(y)][Z_LVAL_PP(x)]);
-#else
- RETURN_LONG(im->pixels[Z_LVAL_PP(x)][Z_LVAL_PP(y)]);
-#endif
- } else {
- php_error(E_NOTICE, "%ld,%ld is out of bounds",Z_LVAL_PP(x), Z_LVAL_PP(y));
- RETURN_FALSE;
- }
-#if HAVE_LIBGD20
- }
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecolorclosest(int im, int red, int green, int blue)
- Get the index of the closest color to the specified color */
-PHP_FUNCTION(imagecolorclosest)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorClosest(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorclosesthwb(int im, int red, int green, int blue)
- Get the index of the color which has the hue, white and blackness nearest to the given color */
-PHP_FUNCTION(imagecolorclosesthwb)
-{
-#if HAVE_COLORCLOSESTHWB
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorClosestHWB(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-#else
- php_error(E_WARNING, "ImageColorClosestHWB functionality was added in GD 1.8");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecolordeallocate(int im, int index)
- De-allocate a color for an image */
-PHP_FUNCTION(imagecolordeallocate)
-{
- zval **IM, **index;
- int col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &index) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(index);
- col = Z_LVAL_PP(index);
-
- if (col >= 0 && col < gdImageColorsTotal(im)) {
- gdImageColorDeallocate(im, col);
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "Color index out of range");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imagecolorresolve(int im, int red, int green, int blue)
- Get the index of the specified color or its closest possible alternative */
-PHP_FUNCTION(imagecolorresolve)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorResolve(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorexact(int im, int red, int green, int blue)
- Get the index of the specified color */
-PHP_FUNCTION(imagecolorexact)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorExact(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorset(int im, int col, int red, int green, int blue)
- Set the color for the specified palette index */
-PHP_FUNCTION(imagecolorset)
-{
- zval **IM, **color, **red, **green, **blue;
- int col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &color, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(color);
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- col = Z_LVAL_PP(color);
-
- if (col >= 0 && col < gdImageColorsTotal(im)) {
- im->red[col] = Z_LVAL_PP(red);
- im->green[col] = Z_LVAL_PP(green);
- im->blue[col] = Z_LVAL_PP(blue);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imagecolorsforindex(int im, int col)
- Get the colors for an index */
-PHP_FUNCTION(imagecolorsforindex)
-{
- zval **IM, **index;
- int col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &index) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(index);
- col = Z_LVAL_PP(index);
-#if HAVE_LIBGD20
- if ((col >= 0 && gdImageTrueColor(im)) || (!gdImageTrueColor(im) && col >= 0 && col < gdImageColorsTotal(im))) {
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- add_assoc_long(return_value,"red", gdImageRed(im,col));
- add_assoc_long(return_value,"green", gdImageGreen(im,col));
- add_assoc_long(return_value,"blue", gdImageBlue(im,col));
- add_assoc_long(return_value,"alpha", gdImageAlpha(im,col));
- }
-#else
- if (col >= 0 && col < gdImageColorsTotal(im)) {
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- add_assoc_long(return_value,"red", im->red[col]);
- add_assoc_long(return_value,"green", im->green[col]);
- add_assoc_long(return_value,"blue", im->blue[col]);
- }
-#endif
- else {
- php_error(E_WARNING, "Color index out of range");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imagegammacorrect(int im, float inputgamma, float outputgamma)
- Apply a gamma correction to a GD image */
-PHP_FUNCTION(imagegammacorrect)
-{
- zval **IM, **inputgamma, **outputgamma;
- gdImagePtr im;
- int i;
- double input, output;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &inputgamma, &outputgamma) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_double_ex(inputgamma);
- convert_to_double_ex(outputgamma);
-
- input = Z_DVAL_PP(inputgamma);
- output = Z_DVAL_PP(outputgamma);
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
-#if HAVE_LIBGD20
- if (gdImageTrueColor(im)) {
- int x, y, c;
-
- for (y = 0; y < gdImageSY(im); y++) {
- for (x = 0; x < gdImageSX(im); x++) {
- c = gdImageGetPixel(im, x, y);
- gdImageSetPixel(im, x, y,
- gdTrueColor(
- (int)((pow((pow((gdTrueColorGetRed(c) / 255.0), input)), 1.0 / output) * 255)+.5),
- (int)((pow((pow((gdTrueColorGetGreen(c) / 255.0), input)), 1.0 / output) * 255)+.5),
- (int)((pow((pow((gdTrueColorGetBlue(c) / 255.0), input)), 1.0 / output) * 255)+.5)
- )
- );
- }
- }
- RETURN_TRUE;
- }
-#endif
- for (i = 0; i < gdImageColorsTotal(im); i++) {
- im->red[i] = (int)((pow((pow((im->red[i] / 255.0), input)), 1.0 / output) * 255)+.5);
- im->green[i] = (int)((pow((pow((im->green[i] / 255.0), input)), 1.0 / output) * 255)+.5);
- im->blue[i] = (int)((pow((pow((im->blue[i] / 255.0), input)), 1.0 / output) * 255)+.5);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagesetpixel(int im, int x, int y, int col)
- Set a single pixel */
-PHP_FUNCTION(imagesetpixel)
-{
- zval **IM, **x, **y, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &x, &y, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_long_ex(col);
-
- gdImageSetPixel(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(col));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imageline(int im, int x1, int y1, int x2, int y2, int col)
- Draw a line */
-PHP_FUNCTION(imageline)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageLine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagedashedline(int im, int x1, int y1, int x2, int y2, int col)
- Draw a dashed line */
-PHP_FUNCTION(imagedashedline)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageDashedLine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagerectangle(int im, int x1, int y1, int x2, int y2, int col)
- Draw a rectangle */
-PHP_FUNCTION(imagerectangle)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageRectangle(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col)
- Draw a filled rectangle */
-PHP_FUNCTION(imagefilledrectangle)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageFilledRectangle(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col)
- Draw a partial ellipse */
-PHP_FUNCTION(imagearc)
-{
- zval **IM, **cx, **cy, **w, **h, **ST, **E, **col;
- gdImagePtr im;
- int e, st;
-
- if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &IM, &cx, &cy, &w, &h, &ST, &E, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(ST);
- convert_to_long_ex(E);
- convert_to_long_ex(col);
-
- e = Z_LVAL_PP(E);
- st = Z_LVAL_PP(ST);
-
- if (e < 0) e %= 360;
- if (st < 0) st %= 360;
-
- gdImageArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), st, e, Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagefilltoborder(int im, int x, int y, int border, int col)
- Flood fill to specific color */
-PHP_FUNCTION(imagefilltoborder)
-{
- zval **IM, **x, **y, **border, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &x, &y, &border, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_long_ex(border);
- convert_to_long_ex(col);
-
- gdImageFillToBorder(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(border), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagefill(int im, int x, int y, int col)
- Flood fill */
-PHP_FUNCTION(imagefill)
-{
- zval **IM, **x, **y, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &x, &y, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_long_ex(col);
-
- gdImageFill(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagecolorstotal(int im)
- Find out the number of colors in an image's palette */
-PHP_FUNCTION(imagecolorstotal)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageColorsTotal(im));
-}
-/* }}} */
-
-/* {{{ proto int imagecolortransparent(int im [, int col])
- Define a color as transparent */
-PHP_FUNCTION(imagecolortransparent)
-{
- zval **IM, **COL;
- gdImagePtr im;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &IM, &COL) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_long_ex(COL);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- if (ZEND_NUM_ARGS() > 1) {
- gdImageColorTransparent(im, Z_LVAL_PP(COL));
- }
-
- RETURN_LONG(gdImageGetTransparent(im));
-}
-/* }}} */
-
-/* {{{ proto int imageinterlace(int im [, int interlace])
- Enable or disable interlace */
-PHP_FUNCTION(imageinterlace)
-{
- zval **IM, **INT;
- gdImagePtr im;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &IM, &INT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_long_ex(INT);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- if (ZEND_NUM_ARGS() > 1) {
- gdImageInterlace(im, Z_LVAL_PP(INT));
- }
-
- RETURN_LONG(gdImageGetInterlaced(im));
-}
-/* }}} */
-
-/* {{{ php_imagepolygon
- arg = 0 normal polygon
- arg = 1 filled polygon */
-/* im, points, num_points, col */
-static void php_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled)
-{
- zval **IM, **POINTS, **NPOINTS, **COL;
- pval **var = NULL;
- gdImagePtr im;
- gdPointPtr points;
- int npoints, col, nelem, i;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &POINTS, &NPOINTS, &COL) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(NPOINTS);
- convert_to_long_ex(COL);
-
- npoints = Z_LVAL_PP(NPOINTS);
- col = Z_LVAL_PP(COL);
-
- if (Z_TYPE_PP(POINTS) != IS_ARRAY) {
- php_error(E_WARNING, "2nd argument to imagepolygon not an array");
- RETURN_FALSE;
- }
-
- nelem = zend_hash_num_elements(Z_ARRVAL_PP(POINTS));
- if (nelem < 6) {
- php_error(E_WARNING, "you must have at least 3 points in your array");
- RETURN_FALSE;
- }
-
- if (nelem < npoints * 2) {
- php_error(E_WARNING, "trying to use %d points in array with only %d points", npoints, nelem/2);
- RETURN_FALSE;
- }
-
- points = (gdPointPtr) emalloc(npoints * sizeof(gdPoint));
-
- for (i = 0; i < npoints; i++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(POINTS), (i * 2), (void **) &var) == SUCCESS) {
- SEPARATE_ZVAL((var));
- convert_to_long(*var);
- points[i].x = Z_LVAL_PP(var);
- }
- if (zend_hash_index_find(Z_ARRVAL_PP(POINTS), (i * 2) + 1, (void **) &var) == SUCCESS) {
- SEPARATE_ZVAL(var);
- convert_to_long(*var);
- points[i].y = Z_LVAL_PP(var);
- }
- }
-
- if (filled) {
- gdImageFilledPolygon(im, points, npoints, col);
- } else {
- gdImagePolygon(im, points, npoints, col);
- }
-
- efree(points);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagepolygon(int im, array point, int num_points, int col)
- Draw a polygon */
-PHP_FUNCTION(imagepolygon)
-{
- php_imagepolygon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int imagefilledpolygon(int im, array point, int num_points, int col)
- Draw a filled polygon */
-PHP_FUNCTION(imagefilledpolygon)
-{
- php_imagepolygon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_find_gd_font
- */
-static gdFontPtr php_find_gd_font(int size)
-{
- gdFontPtr font;
- int ind_type;
- TSRMLS_FETCH();
-
- switch (size) {
- case 1:
- font = gdFontTiny;
- break;
- case 2:
- font = gdFontSmall;
- break;
- case 3:
- font = gdFontMediumBold;
- break;
- case 4:
- font = gdFontLarge;
- break;
- case 5:
- font = gdFontGiant;
- break;
- default:
- font = zend_list_find(size - 5, &ind_type);
- if (!font || ind_type != le_gd_font) {
- if (size < 1) {
- font = gdFontTiny;
- } else {
- font = gdFontGiant;
- }
- }
- break;
- }
-
- return font;
-}
-/* }}} */
-
-/* {{{ php_imagefontsize
- * arg = 0 ImageFontWidth
- * arg = 1 ImageFontHeight
- */
-static void php_imagefontsize(INTERNAL_FUNCTION_PARAMETERS, int arg)
-{
- zval **SIZE;
- gdFontPtr font;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &SIZE) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(SIZE);
-
- font = php_find_gd_font(Z_LVAL_PP(SIZE));
- RETURN_LONG(arg ? font->h : font->w);
-}
-/* }}} */
-
-/* {{{ proto int imagefontwidth(int font)
- Get font width */
-PHP_FUNCTION(imagefontwidth)
-{
- php_imagefontsize(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int imagefontheight(int font)
- Get font height */
-PHP_FUNCTION(imagefontheight)
-{
- php_imagefontsize(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_gdimagecharup
- * workaround for a bug in gd 1.2 */
-static void php_gdimagecharup(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
-{
- int cx, cy, px, py, fline;
- cx = 0;
- cy = 0;
- if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; (py > (y - f->w)); py--) {
- for (px = x; (px < (x + f->h)); px++) {
- if (f->data[fline + cy * f->w + cx]) {
- gdImageSetPixel(im, px, py, color);
- }
- cy++;
- }
- cy = 0;
- cx++;
- }
-}
-/* }}} */
-
-/* {{{ php_imagechar
- * arg = 0 ImageChar
- * arg = 1 ImageCharUp
- * arg = 2 ImageString
- * arg = 3 ImageStringUp
- */
-static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval **IM, **SIZE, **X, **Y, **C, **COL;
- gdImagePtr im;
- int ch = 0, col, x, y, size, i, l = 0;
- unsigned char *str = NULL;
- gdFontPtr font;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &SIZE, &X, &Y, &C, &COL) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(SIZE);
- convert_to_long_ex(X);
- convert_to_long_ex(Y);
- convert_to_string_ex(C);
- convert_to_long_ex(COL);
-
- col = Z_LVAL_PP(COL);
-
- if (mode < 2) {
- ch = (int)((unsigned char)*(Z_STRVAL_PP(C)));
- } else {
- str = (unsigned char *) estrndup(Z_STRVAL_PP(C), Z_STRLEN_PP(C));
- l = strlen(str);
- }
-
- y = Z_LVAL_PP(Y);
- x = Z_LVAL_PP(X);
- size = Z_LVAL_PP(SIZE);
-
- font = php_find_gd_font(size);
-
- switch(mode) {
- case 0:
- gdImageChar(im, font, x, y, ch, col);
- break;
- case 1:
- php_gdimagecharup(im, font, x, y, ch, col);
- break;
- case 2:
- for (i = 0; (i < l); i++) {
- gdImageChar(im, font, x, y, (int)((unsigned char)str[i]),
- col);
- x += font->w;
- }
- break;
- case 3: {
- for (i = 0; (i < l); i++) {
- /* php_gdimagecharup(im, font, x, y, (int)str[i], col); */
- gdImageCharUp(im, font, x, y, (int)str[i], col);
- y -= font->w;
- }
- break;
- }
- }
- if (str) {
- efree(str);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagechar(int im, int font, int x, int y, string c, int col)
- Draw a character */
-PHP_FUNCTION(imagechar)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int imagecharup(int im, int font, int x, int y, string c, int col)
- Draw a character rotated 90 degrees counter-clockwise */
-PHP_FUNCTION(imagecharup)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int imagestring(int im, int font, int x, int y, string str, int col)
- Draw a string horizontally */
-PHP_FUNCTION(imagestring)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto int imagestringup(int im, int font, int x, int y, string str, int col)
- Draw a string vertically - rotated 90 degrees counter-clockwise */
-PHP_FUNCTION(imagestringup)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ proto int imagecopy(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)
- Copy part of an image */
-PHP_FUNCTION(imagecopy)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, srcY, srcX, dstY, dstX;
-
- if (ZEND_NUM_ARGS() != 8 ||
- zend_get_parameters_ex(8, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
-
- gdImageCopy(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagecopymerge(int src_im, int dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)
- Merge one part of an image with another */
-PHP_FUNCTION(imagecopymerge)
-{
-#if HAVE_LIBGD15
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, srcY, srcX, dstY, dstX, pct;
-
- if (ZEND_NUM_ARGS() != 9 ||
- zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH, &PCT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(PCT);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- pct = Z_LVAL_PP(PCT);
-
- gdImageCopyMerge(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct);
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "ImageCopyMerge was introduced in GD version 1.5");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecopymergegray(int src_im, int dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)
- Merge one part of an image with another */
-PHP_FUNCTION(imagecopymergegray)
-{
-#if HAVE_LIBGD15
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, srcY, srcX, dstY, dstX, pct;
-
- if (ZEND_NUM_ARGS() != 9 ||
- zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH, &PCT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(PCT);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- pct = Z_LVAL_PP(PCT);
-
- gdImageCopyMergeGray(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct);
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "%s(): was introduced in GD version 1.5", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecopyresized(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
- Copy and resize part of an image */
-PHP_FUNCTION(imagecopyresized)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX;
-
- if (ZEND_NUM_ARGS() != 10 ||
- zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(DW);
- convert_to_long_ex(DH);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- dstH = Z_LVAL_PP(DH);
- dstW = Z_LVAL_PP(DW);
-
- gdImageCopyResized(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagesx(int im)
- Get image width */
-PHP_FUNCTION(imagesx)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageSX(im));
-}
-/* }}} */
-
-/* {{{ proto int imagesy(int im)
- Get image height */
-PHP_FUNCTION(imagesy)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageSY(im));
-}
-/* }}} */
-
-#ifdef ENABLE_GD_TTF
-#define TTFTEXT_DRAW 0
-#define TTFTEXT_BBOX 1
-#endif
-
-
-/* {{{ proto array imageftbbox(int size, int angle, string font_file, string text[, array extrainfo])
- Give the bounding box of a text using fonts via freetype2 */
-PHP_FUNCTION(imageftbbox)
-{
-#if HAVE_LIBGD20 && HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 1);
-#else
- php_error(E_WARNING, "%s(): No FreeType 2 support in this PHP build", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto array imagefttext(int im, int size, int angle, int x, int y, int col, string font_file, string text, [array extrainfo])
- Write text to the image using fonts via freetype2 */
-PHP_FUNCTION(imagefttext)
-{
-#if HAVE_LIBGD20 && HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 1);
-#else
- php_error(E_WARNING, "%s(): No FreeType 2 support in this PHP build", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-
-/* {{{ proto array imagettfbbox(int size, int angle, string font_file, string text)
- Give the bounding box of a text using TrueType fonts */
-PHP_FUNCTION(imagettfbbox)
-{
-#ifdef ENABLE_GD_TTF
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 0);
-#else
- php_error(E_WARNING, "ImageTtfBBox: No TTF support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto array imagettftext(int im, int size, int angle, int x, int y, int col, string font_file, string text)
- Write text to the image using a TrueType font */
-PHP_FUNCTION(imagettftext)
-{
-#ifdef ENABLE_GD_TTF
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 0);
-#else
- php_error(E_WARNING, "ImageTtfText: No TTF support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-#ifdef ENABLE_GD_TTF
-/* {{{ php_imagettftext_common
- */
-static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int extended)
-{
- zval **IM, **PTSIZE, **ANGLE, **X, **Y, **C, **FONTNAME, **COL, **EXT = NULL;
- gdImagePtr im=NULL;
- int col, x, y, l=0, i, brect[8];
- double ptsize, angle;
- unsigned char *str = NULL, *fontname = NULL;
- char *error;
- int argc;
-#if HAVE_GD_STRINGFTEX
- gdFTStringExtra strex;
-#endif
-
-#if !HAVE_GD_STRINGFTEX
- if (extended) {
- zend_error(E_WARNING, "%s(): gdImageStringFTEx not supported in this PHP build", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-#endif
-
- argc = ZEND_NUM_ARGS();
-
- if (mode == TTFTEXT_BBOX) {
- if ((extended && argc != 5) || (!extended && argc != 4) ||
- zend_get_parameters_ex(argc, &PTSIZE, &ANGLE, &FONTNAME, &C, &EXT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- } else {
- if ((extended && argc != 9) || (!extended && argc != 8) ||
- zend_get_parameters_ex(argc, &IM, &PTSIZE, &ANGLE, &X, &Y, &COL, &FONTNAME, &C, &EXT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- }
-
- convert_to_double_ex(PTSIZE);
- convert_to_double_ex(ANGLE);
- convert_to_string_ex(FONTNAME);
- convert_to_string_ex(C);
-
- if (mode == TTFTEXT_BBOX) {
- im = NULL;
- col = x = y = -1;
- } else {
- convert_to_long_ex(X);
- convert_to_long_ex(Y);
- convert_to_long_ex(COL);
- col = Z_LVAL_PP(COL);
- y = Z_LVAL_PP(Y);
- x = Z_LVAL_PP(X);
-
-#if HAVE_GD_STRINGFTEX
- if (EXT) {
- /* parse extended info */
-
- HashPosition pos;
-
- convert_to_array_ex(EXT);
- memset(&strex, 0, sizeof(strex));
-
- /* walk the assoc array */
- zend_hash_internal_pointer_reset_ex(HASH_OF(*EXT), &pos);
- do {
- zval ** item;
- char * key;
-
- if (zend_hash_get_current_key_ex(HASH_OF(*EXT), &key, NULL, NULL, 0, &pos) == FAILURE)
- continue;
-
- if (zend_hash_get_current_data_ex(HASH_OF(*EXT), (void**)&item, &pos) == FAILURE)
- continue;
-
- if (strcmp("linespacing", key) == 0) {
- convert_to_double_ex(item);
- strex.flags |= gdFTEX_LINESPACE;
- strex.linespacing = Z_DVAL_PP(item);
- }
-
- } while(zend_hash_move_forward_ex(HASH_OF(*EXT), &pos) == SUCCESS);
- }
-#endif
-
- }
-
- ptsize = Z_DVAL_PP(PTSIZE);
- angle = Z_DVAL_PP(ANGLE) * (M_PI/180); /* convert to radians */
-
- str = (unsigned char *) Z_STRVAL_PP(C);
- l = strlen(str);
-
-#ifdef VIRTUAL_DIR
- if(virtual_filepath(Z_STRVAL_PP(FONTNAME), &fontname TSRMLS_CC)) {
- fontname = (unsigned char*)Z_STRVAL_PP(FONTNAME);
- }
-#else
- fontname = (unsigned char*)Z_STRVAL_PP(FONTNAME);
-#endif
-
-
-#ifdef USE_GD_IMGSTRTTF
-# if HAVE_GD_STRINGFTEX
- if (extended) {
- error = gdImageStringFTEx(im, brect, col, fontname, ptsize, angle, x, y, str, &strex);
- }
- else
-# endif
-
-# if HAVE_GD_STRINGFT
- error = gdImageStringFT(im, brect, col, fontname, ptsize, angle, x, y, str);
-# elif HAVE_GD_STRINGTTF
- error = gdImageStringTTF(im, brect, col, fontname, ptsize, angle, x, y, str);
-# endif
-
-#else /* !USE_GD_IMGSTRTTF */
- error = gdttf(im, brect, col, fontname, ptsize, angle, x, y, str);
-#endif
-
-
- if (error) {
- php_error(E_WARNING, "%s", error);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* return array with the text's bounding box */
- for (i = 0; i < 8; i++) {
- add_next_index_long(return_value, brect[i]);
- }
-}
-/* }}} */
-#endif /* ENABLE_GD_TTF */
-
-#if HAVE_LIBT1
-
-/* {{{ php_free_ps_font
- */
-void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int *font = (int *)rsrc->ptr;
-
- T1_DeleteFont(*font);
- efree(font);
-}
-/* }}} */
-
-/* {{{ php_free_ps_enc
- */
-void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- char **enc = (char **)rsrc->ptr;
-
- T1_DeleteEncoding(enc);
-}
-/* }}} */
-
-#endif
-
-/* {{{ proto int imagepsloadfont(string pathname)
- Load a new font from specified file */
-PHP_FUNCTION(imagepsloadfont)
-{
-#if HAVE_LIBT1
- zval **file;
- int f_ind, *font;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(file);
-
- f_ind = T1_AddFont(Z_STRVAL_PP(file));
-
- if (f_ind < 0) {
- switch (f_ind) {
- case -1:
- php_error(E_WARNING, "Couldn't find the font file");
- RETURN_FALSE;
- break;
- case -2:
- case -3:
- php_error(E_WARNING, "Memory allocation fault in t1lib");
- RETURN_FALSE;
- break;
- default:
- php_error(E_WARNING, "An unknown error occurred in t1lib");
- RETURN_FALSE;
- break;
- }
- }
-
- if (T1_LoadFont(f_ind)) {
- php_error(E_WARNING, "Couldn't load the font");
- RETURN_FALSE;
- }
-
- font = (int *) emalloc(sizeof(int));
- *font = f_ind;
- ZEND_REGISTER_RESOURCE(return_value, font, le_ps_font);
-#else
- php_error(E_WARNING, "ImagePsLoadFont: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagepscopyfont(int font_index)
- Make a copy of a font for purposes like extending or reenconding */
-/* The function in t1lib which this function uses seem to be buggy...
-PHP_FUNCTION(imagepscopyfont)
-{
-#if HAVE_LIBT1
- zval **fnt;
- int l_ind, type;
- gd_ps_font *nf_ind, *of_ind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(fnt);
-
- of_ind = zend_list_find(Z_LVAL_PP(fnt), &type);
-
- if (type != le_ps_font) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt));
- RETURN_FALSE;
- }
-
- nf_ind = emalloc(sizeof(gd_ps_font));
- nf_ind->font_id = T1_CopyFont(of_ind->font_id);
-
- if (nf_ind->font_id < 0) {
- l_ind = nf_ind->font_id;
- efree(nf_ind);
- switch (l_ind) {
- case -1:
- php_error(E_WARNING, "FontID %d is not loaded in memory", l_ind);
- RETURN_FALSE;
- break;
- case -2:
- php_error(E_WARNING, "Tried to copy a logical font");
- RETURN_FALSE;
- break;
- case -3:
- php_error(E_WARNING, "Memory allocation fault in t1lib");
- RETURN_FALSE;
- break;
- default:
- php_error(E_WARNING, "An unknown error occurred in t1lib");
- RETURN_FALSE;
- break;
- }
- }
-
- nf_ind->extend = 1;
- l_ind = zend_list_insert(nf_ind, le_ps_font);
- RETURN_LONG(l_ind);
-#else
- php_error(E_WARNING, "ImagePsCopyFont: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-*/
-/* }}} */
-
-/* {{{ proto bool imagepsfreefont(int font_index)
- Free memory used by a font */
-PHP_FUNCTION(imagepsfreefont)
-{
-#if HAVE_LIBT1
- zval **fnt;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- zend_list_delete(Z_LVAL_PP(fnt));
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "ImagePsFreeFont: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool imagepsencodefont(int font_index, string filename)
- To change a fonts character encoding vector */
-PHP_FUNCTION(imagepsencodefont)
-{
-#if HAVE_LIBT1
- zval **fnt, **enc;
- char **enc_vector;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &enc) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(enc);
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- if ((enc_vector = T1_LoadEncoding(Z_STRVAL_PP(enc))) == NULL) {
- php_error(E_WARNING, "Couldn't load encoding vector from %s", Z_STRVAL_PP(enc));
- RETURN_FALSE;
- }
-
- T1_DeleteAllSizes(*f_ind);
- if (T1_ReencodeFont(*f_ind, enc_vector)) {
- T1_DeleteEncoding(enc_vector);
- php_error(E_WARNING, "Couldn't reencode font");
- RETURN_FALSE;
- }
- zend_list_insert(enc_vector, le_ps_enc);
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "ImagePsEncodeFont: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool imagepsextendfont(int font_index, float extend)
- Extend or or condense (if extend < 1) a font */
-PHP_FUNCTION(imagepsextendfont)
-{
-#if HAVE_LIBT1
- zval **fnt, **ext;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &ext) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_double_ex(ext);
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- if (T1_ExtendFont(*f_ind, Z_DVAL_PP(ext)) != 0) RETURN_FALSE;
-
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "ImagePsExtendFont: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool imagepsslantfont(int font_index, float slant)
- Slant a font */
-PHP_FUNCTION(imagepsslantfont)
-{
-#if HAVE_LIBT1
- zval **fnt, **slt;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &slt) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_double_ex(slt);
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- if (T1_SlantFont(*f_ind, Z_DVAL_PP(slt)) != 0) RETURN_FALSE;
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "ImagePsSlantFont: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto array imagepstext(int image, string text, int font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias])
- Rasterize a string over an image */
-PHP_FUNCTION(imagepstext)
-{
-#if HAVE_LIBT1
- zval **img, **str, **fnt, **sz, **fg, **bg, **sp, **px, **py, **aas, **wd, **ang;
- int i, j, x, y;
- int space;
- int *f_ind;
- int h_lines, v_lines, c_ind;
- int rd, gr, bl, fg_rd, fg_gr, fg_bl, bg_rd, bg_gr, bg_bl, _fg, _bg;
- int aa[16], aa_steps;
- int width, amount_kern, add_width;
- double angle, extend;
- unsigned long aa_greys[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
- gdImagePtr bg_img;
- GLYPH *str_img;
- T1_OUTLINE *char_path, *str_path;
- T1_TMATRIX *transform = NULL;
- char *_str;
-
- switch(ZEND_NUM_ARGS()) {
- case 8:
- if (zend_get_parameters_ex(8, &img, &str, &fnt, &sz, &fg, &bg, &px, &py) == FAILURE) {
- RETURN_FALSE;
- }
- space = 0;
- aa_steps = 4;
- width = 0;
- angle = 0;
- break;
- case 12:
- if (zend_get_parameters_ex(12, &img, &str, &fnt, &sz, &fg, &bg, &px, &py, &sp, &wd, &ang, &aas) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sp);
- convert_to_long_ex(aas);
- convert_to_long_ex(wd);
- convert_to_double_ex(ang);
- space = Z_LVAL_PP(sp);
- aa_steps = Z_LVAL_PP(aas);
- width = Z_LVAL_PP(wd);
- angle = Z_DVAL_PP(ang);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(bg_img, gdImagePtr, img, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- x = Z_LVAL_PP(px);
- y = Z_LVAL_PP(py);
- _fg = Z_LVAL_PP(fg);
- _bg = Z_LVAL_PP(bg);
-
- fg_rd = gdImageRed (bg_img, _fg);
- fg_gr = gdImageGreen(bg_img, _fg);
- fg_bl = gdImageBlue (bg_img, _fg);
-
- bg_rd = gdImageRed (bg_img, _bg);
- bg_gr = gdImageGreen(bg_img, _bg);
- bg_bl = gdImageBlue (bg_img, _bg);
-
- for (i = 0; i < aa_steps; i++) {
- rd = bg_rd+(double)(fg_rd-bg_rd)/aa_steps*(i+1);
- gr = bg_gr+(double)(fg_gr-bg_gr)/aa_steps*(i+1);
- bl = bg_bl+(double)(fg_bl-bg_bl)/aa_steps*(i+1);
- aa[i] = gdImageColorResolve(bg_img, rd, gr, bl);
- }
-
- T1_AASetBitsPerPixel(8);
-
- switch (aa_steps) {
- case 4:
- T1_AASetGrayValues(0, 1, 2, 3, 4);
- T1_AASetLevel(T1_AA_LOW);
- break;
- case 16:
- T1_AAHSetGrayValues(aa_greys);
- T1_AASetLevel(T1_AA_HIGH);
- break;
- default:
- php_error(E_WARNING, "Invalid value %d as number of steps for antialiasing", aa_steps);
- RETURN_FALSE;
- }
-
- if (angle) {
- transform = T1_RotateMatrix(NULL, angle);
- }
-
- _str = Z_STRVAL_PP(str);
-
- if (width) {
- extend = T1_GetExtend(*f_ind);
- str_path = T1_GetCharOutline(*f_ind, _str[0], Z_LVAL_PP(sz), transform);
-
- for (i = 1; i < Z_STRLEN_PP(str); i++) {
- amount_kern = (int) T1_GetKerning(*f_ind, _str[i-1], _str[i]);
- amount_kern += _str[i-1] == ' ' ? space : 0;
- add_width = (int) (amount_kern+width)/extend;
-
- char_path = T1_GetMoveOutline(*f_ind, add_width, 0, 0, Z_LVAL_PP(sz), transform);
- str_path = T1_ConcatOutlines(str_path, char_path);
-
- char_path = T1_GetCharOutline(*f_ind, _str[i], Z_LVAL_PP(sz), transform);
- str_path = T1_ConcatOutlines(str_path, char_path);
- }
- str_img = T1_AAFillOutline(str_path, 0);
- } else {
- str_img = T1_AASetString(*f_ind, _str, Z_STRLEN_PP(str), space, T1_KERNING, Z_LVAL_PP(sz), transform);
- }
-
- if (T1_errno) {
- php_error(E_WARNING, "libt1 returned error %d", T1_errno);
- RETURN_FALSE;
- }
-
- h_lines = str_img->metrics.ascent - str_img->metrics.descent;
- v_lines = str_img->metrics.rightSideBearing - str_img->metrics.leftSideBearing;
-
- for (i = 0; i < v_lines; i++) {
- for (j = 0; j < h_lines; j++) {
- switch (str_img->bits[j*v_lines+i]) {
- case 0:
- break;
- default:
- c_ind = aa[str_img->bits[j*v_lines+i]-1];
- gdImageSetPixel(bg_img, x+str_img->metrics.leftSideBearing+i, y-str_img->metrics.ascent+j, c_ind);
- }
- }
- }
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Couldn't initialize array for returning bounding box");
- RETURN_FALSE;
- }
-
- add_next_index_long(return_value, str_img->metrics.leftSideBearing);
- add_next_index_long(return_value, str_img->metrics.descent);
- add_next_index_long(return_value, str_img->metrics.rightSideBearing);
- add_next_index_long(return_value, str_img->metrics.ascent);
-
-#else
- php_error(E_WARNING, "ImagePsText: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto array imagepsbbox(string text, int font, int size [, int space, int tightness, int angle])
- Return the bounding box needed by a string if rasterized */
-PHP_FUNCTION(imagepsbbox)
-{
-#if HAVE_LIBT1
- zval **str, **fnt, **sz, **sp, **wd, **ang;
- int i, space, add_width = 0, char_width, amount_kern;
- int cur_x, cur_y, dx, dy;
- int x1, y1, x2, y2, x3, y3, x4, y4;
- int *f_ind;
- int per_char = 0;
- double angle, sin_a = 0, cos_a = 0;
- BBox char_bbox, str_bbox = {0, 0, 0, 0};
-
- switch(ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &str, &fnt, &sz) == FAILURE) {
- RETURN_FALSE;
- }
- space = 0;
- break;
- case 6:
- if (zend_get_parameters_ex(6, &str, &fnt, &sz, &sp, &wd, &ang) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sp);
- convert_to_long_ex(wd);
- convert_to_double_ex(ang);
- space = Z_LVAL_PP(sp);
- add_width = Z_LVAL_PP(wd);
- angle = Z_DVAL_PP(ang) * M_PI / 180;
- sin_a = sin(angle);
- cos_a = cos(angle);
- per_char = add_width || angle ? 1 : 0;
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- convert_to_string_ex(str);
- convert_to_long_ex(sz);
-
-#define max(a, b) (a > b ? a : b)
-#define min(a, b) (a < b ? a : b)
-#define new_x(a, b) (int) ((a) * cos_a - (b) * sin_a)
-#define new_y(a, b) (int) ((a) * sin_a + (b) * cos_a)
-
- if (per_char) {
- space += T1_GetCharWidth(*f_ind, ' ');
- cur_x = cur_y = 0;
-
- for (i = 0; i < Z_STRLEN_PP(str); i++) {
- if (Z_STRVAL_PP(str)[i] == ' ') {
- char_bbox.llx = char_bbox.lly = char_bbox.ury = 0;
- char_bbox.urx = char_width = space;
- } else {
- char_bbox = T1_GetCharBBox(*f_ind, Z_STRVAL_PP(str)[i]);
- char_width = T1_GetCharWidth(*f_ind, Z_STRVAL_PP(str)[i]);
- }
- amount_kern = i ? T1_GetKerning(*f_ind, Z_STRVAL_PP(str)[i-1], Z_STRVAL_PP(str)[i]) : 0;
-
- /* Transfer character bounding box to right place */
- x1 = new_x(char_bbox.llx, char_bbox.lly) + cur_x;
- y1 = new_y(char_bbox.llx, char_bbox.lly) + cur_y;
- x2 = new_x(char_bbox.llx, char_bbox.ury) + cur_x;
- y2 = new_y(char_bbox.llx, char_bbox.ury) + cur_y;
- x3 = new_x(char_bbox.urx, char_bbox.ury) + cur_x;
- y3 = new_y(char_bbox.urx, char_bbox.ury) + cur_y;
- x4 = new_x(char_bbox.urx, char_bbox.lly) + cur_x;
- y4 = new_y(char_bbox.urx, char_bbox.lly) + cur_y;
-
- /* Find min & max values and compare them with current bounding box */
- str_bbox.llx = min(str_bbox.llx, min(x1, min(x2, min(x3, x4))));
- str_bbox.lly = min(str_bbox.lly, min(y1, min(y2, min(y3, y4))));
- str_bbox.urx = max(str_bbox.urx, max(x1, max(x2, max(x3, x4))));
- str_bbox.ury = max(str_bbox.ury, max(y1, max(y2, max(y3, y4))));
-
- /* Move to the next base point */
- dx = new_x(char_width + add_width + amount_kern, 0);
- dy = new_y(char_width + add_width + amount_kern, 0);
- cur_x += dx;
- cur_y += dy;
- /*
- printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", x1, y1, x2, y2, x3, y3, x4, y4, char_bbox.llx, char_bbox.lly, char_bbox.urx, char_bbox.ury, char_width, amount_kern, cur_x, cur_y, dx, dy);
- */
- }
-
- } else {
- str_bbox = T1_GetStringBBox(*f_ind, Z_STRVAL_PP(str), Z_STRLEN_PP(str), space, T1_KERNING);
- }
- if (T1_errno) RETURN_FALSE;
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- /*
- printf("%d %d %d %d\n", str_bbox.llx, str_bbox.lly, str_bbox.urx, str_bbox.ury);
- */
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.llx)*Z_LVAL_PP(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.lly)*Z_LVAL_PP(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.urx)*Z_LVAL_PP(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.ury)*Z_LVAL_PP(sz)/1000));
-#else
- php_error(E_WARNING, "ImagePsBBox: No T1lib support in this PHP build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int image2wbmp(int im [, string filename [, int threshold]])
- Output WBMP image to browser or file */
-PHP_FUNCTION(image2wbmp)
-{
-#ifdef HAVE_GD_WBMP
- _php_image_output (INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_CONVERT_WBM, "WBMP", _php_image_bw_convert);
-#else /* HAVE_GD_WBMP */
- php_error(E_WARNING, "Image2Wbmp: No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_WBMP */
-}
-/* }}} */
-
-/* {{{ proto void jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)
- Convert JPEG image to WBMP image */
-PHP_FUNCTION(jpeg2wbmp)
-{
-#ifdef HAVE_GD_JPG
-#ifdef HAVE_GD_WBMP
- _php_image_convert (INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG);
-#else /* HAVE_GD_WBMP */
- php_error(E_WARNING, "jpeg2wbmp: No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_WBMP */
-#else /* HAVE_GD_JPG */
- php_error(E_WARNING, "jpeg2wbmp: No JPG support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_JPG */
-}
-/* }}} */
-
-/* {{{ proto void png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)
- Convert PNG image to WBMP image */
-PHP_FUNCTION(png2wbmp)
-{
-#ifdef HAVE_GD_PNG
-#ifdef HAVE_GD_WBMP
- _php_image_convert (INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG);
-#else /* HAVE_GD_WBMP */
- php_error(E_WARNING, "png2wbmp: No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_WBMP */
-#else /* HAVE_GD_PNG */
- php_error(E_WARNING, "png2wbmp: No PNG support in this PHP build");
- RETURN_FALSE;
-#endif /* HAVE_GD_PNG */
-}
-/* }}} */
-
-#ifdef HAVE_GD_WBMP
-/* {{{ _php_image_bw_convert
- * It converts a gd Image to bw using a threshold value */
-static void _php_image_bw_convert( gdImagePtr im_org, gdIOCtx *out, int threshold)
-{
- gdImagePtr im_dest;
- int white, black;
- int color, color_org, median;
- int dest_height = gdImageSY (im_org);
- int dest_width = gdImageSX (im_org);
- int x, y;
- TSRMLS_FETCH();
-
- im_dest = gdImageCreate (dest_width, dest_height);
- if (im_dest == NULL) {
- php_error (E_WARNING, "%s: unable to allocate temporary buffer", get_active_function_name(TSRMLS_C));
- return;
- }
- white = gdImageColorAllocate (im_dest, 255, 255, 255);
- if( white == -1) {
- php_error (E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C));
- return;
- }
-
- black = gdImageColorAllocate (im_dest, 0, 0, 0);
- if (black == -1) {
- php_error (E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C));
- return;
- }
-
- for (y = 0; y < dest_height; y++) {
- for (x = 0; x < dest_width; x++) {
- color_org = gdImageGetPixel (im_org, x, y);
- median = (im_org->red[color_org] + im_org->green[color_org] + im_org->blue[color_org]) / 3;
- if (median < threshold) {
- color = black;
- }
- else {
- color = white;
- }
- gdImageSetPixel (im_dest, x, y, color);
- }
- }
-#ifdef USE_GD_IOCTX
- gdImageWBMPCtx (im_dest, black, out);
-#else
- gdImageWBMP (im_dest, black, out);
-#endif
-
-}
-/* }}} */
-
-/* {{{ _php_image_convert
- * _php_image_convert converts jpeg/png images to wbmp and resizes them as needed */
-static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type )
-{
- zval **f_org, **f_dest, **height, **width, **threshold;
- gdImagePtr im_org, im_dest, im_tmp;
- char *fn_org = NULL;
- char *fn_dest = NULL;
- FILE *org, *dest;
- int argc;
- int dest_height = -1;
- int dest_width = -1;
- int org_height, org_width;
- int white, black;
- int color, color_org, median;
- int int_threshold;
- int x, y;
- float x_ratio, y_ratio;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 5 || zend_get_parameters_ex(argc, &f_org, &f_dest, &height, &width, &threshold) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex (f_org);
- convert_to_string_ex (f_dest);
- fn_org = Z_STRVAL_PP(f_org);
- fn_dest = Z_STRVAL_PP(f_dest);
- convert_to_long_ex(height);
- dest_height = Z_LVAL_PP(height);
- convert_to_long_ex(width);
- dest_width = Z_LVAL_PP(width);
- convert_to_long_ex(threshold);
- int_threshold = Z_LVAL_PP(threshold);
-
- /* Check threshold value */
- if( int_threshold < 0 || int_threshold > 8 ) {
- php_error (E_WARNING, "Invalid threshold value '%d' in %s", int_threshold, get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- /* Check origin file */
- if (!fn_org || fn_org == empty_string || php_check_open_basedir(fn_org TSRMLS_CC)) {
- php_error (E_WARNING, "%s: invalid origin filename '%s'", get_active_function_name(TSRMLS_C), fn_org);
- RETURN_FALSE;
- }
-
- /* Check destination file */
- if (!fn_dest || fn_dest == empty_string || php_check_open_basedir(fn_dest TSRMLS_CC)) {
- php_error (E_WARNING, "%s: invalid destination filename '%s'", get_active_function_name(TSRMLS_C), fn_dest);
- RETURN_FALSE;
- }
-
- /* Open origin file */
- org = VCWD_FOPEN(fn_org, "rb");
- if (!org) {
- php_error (E_WARNING, "%s: unable to open '%s' for reading", get_active_function_name(TSRMLS_C), fn_org);
- RETURN_FALSE;
- }
-
- /* Open destination file */
- dest = VCWD_FOPEN(fn_dest, "wb");
- if (!dest) {
- php_error (E_WARNING, "%s: unable to open '%s' for writing", get_active_function_name(TSRMLS_C), fn_dest);
- RETURN_FALSE;
- }
-
- switch (image_type) {
-#ifdef HAVE_GD_GIF_READ
- case PHP_GDIMG_TYPE_GIF:
- im_org = gdImageCreateFromGif (org);
- if (im_org == NULL) {
- php_error (E_WARNING, "%s: unable to open '%s' Not a valid GIF file", get_active_function_name(TSRMLS_C), fn_dest);
- RETURN_FALSE;
- }
- break;
-#endif /* HAVE_GD_GIF_READ */
-
-#ifdef HAVE_GD_JPG
- case PHP_GDIMG_TYPE_JPG:
- im_org = gdImageCreateFromJpeg (org);
- if (im_org == NULL) {
- php_error (E_WARNING, "%s: unable to open '%s' Not a valid JPEG file", get_active_function_name(TSRMLS_C), fn_dest);
- RETURN_FALSE;
- }
- break;
-#endif /* HAVE_GD_JPG */
-
-
-#ifdef HAVE_GD_PNG
- case PHP_GDIMG_TYPE_PNG:
- im_org = gdImageCreateFromPng(org);
- if (im_org == NULL) {
- php_error (E_WARNING, "%s: unable to open '%s' Not a valid PNG file", get_active_function_name(TSRMLS_C), fn_dest);
- RETURN_FALSE;
- }
- break;
-#endif /* HAVE_GD_PNG */
-
- default:
- php_error(E_WARNING, "%s: Format not supported", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- break;
- }
-
- org_width = gdImageSX (im_org);
- org_height = gdImageSY (im_org);
-
- x_ratio = (float) org_width / (float) dest_width;
- y_ratio = (float) org_height / (float) dest_height;
-
- if (x_ratio > 1 && y_ratio > 1) {
- if (y_ratio > x_ratio) {
- x_ratio = y_ratio;
- }
- else {
- y_ratio = x_ratio;
- }
- dest_width = (int)(org_width / x_ratio);
- dest_height = (int)(org_height / y_ratio);
- }
- else {
- x_ratio = (float) dest_width / (float) org_width;
- y_ratio = (float) dest_height / (float) org_height;
-
- if (y_ratio < x_ratio) {
- x_ratio = y_ratio;
- }
- else {
- y_ratio = x_ratio;
- }
- dest_width = (int)(org_width * x_ratio);
- dest_height = (int)(org_height * y_ratio);
- }
-
- im_tmp = gdImageCreate (dest_width, dest_height);
- if (im_tmp == NULL ) {
- php_error(E_WARNING, "%s: unable to allocate temporary buffer", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- gdImageCopyResized (im_tmp, im_org, 0, 0, 0, 0, dest_width, dest_height, org_width, org_height);
-
- gdImageDestroy(im_org);
-
- fclose(org);
-
- im_dest = gdImageCreate(dest_width, dest_height);
- if (im_dest == NULL) {
- php_error(E_WARNING, "%s: unable to allocate destination buffer", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- white = gdImageColorAllocate(im_dest, 255, 255, 255);
- if (white == -1) {
- php_error(E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- black = gdImageColorAllocate(im_dest, 0, 0, 0);
- if (black == -1) {
- php_error(E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- int_threshold = int_threshold * 32;
-
- for (y = 0; y < dest_height; y++) {
- for(x = 0; x < dest_width; x++) {
- color_org = gdImageGetPixel (im_tmp, x, y);
- median = (im_tmp->red[color_org] + im_tmp->green[color_org] + im_tmp->blue[color_org]) / 3;
- if (median < int_threshold) {
- color = black;
- }
- else {
- color = white;
- }
- gdImageSetPixel (im_dest, x, y, color);
- }
- }
-
- gdImageDestroy (im_tmp );
-
- gdImageWBMP (im_dest, black , dest);
-
- fflush(dest);
- fclose(dest);
-
- gdImageDestroy( im_dest );
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif /* HAVE_GD_WBMP */
-
-#endif /* HAVE_LIBGD */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/gd/gd.dsp b/ext/gd/gd.dsp
deleted file mode 100644
index e8e3f99a19..0000000000
--- a/ext/gd/gd.dsp
+++ /dev/null
@@ -1,203 +0,0 @@
-# Microsoft Developer Studio Project File - Name="gd" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=gd - Win32 Release_TS GD2
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gd.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gd.mak" CFG="gd - Win32 Release_TS GD2"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gd - Win32 Release_TS GD2" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gd - Win32 Release_TS GD1" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gd - Win32 Debug_TS GD2" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gd - Win32 Debug_TS GD1" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gd___Win32_Release_TS_GD2"
-# PROP BASE Intermediate_Dir "gd___Win32_Release_TS_GD2"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD=1 /D HAVE_LIBGD13=1 /D HAVE_LIBGD15=1 /D HAVE_LIBGD20=1 /D "USE_GD_IOCTX" /D HAVE_LIBFREETYPE=1 /D "USE_GD_IMGSTRTTF" /D HAVE_GD_STRINGTTF=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts.lib freetype.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php4ts.lib freetype2.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "gd - Win32 Release_TS GD1"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gd___Win32_Release_TS_GD1"
-# PROP BASE Intermediate_Dir "gd___Win32_Release_TS_GD1"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts.lib freetype.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php4ts.lib freetype.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gd___Win32_Debug_TS_GD2"
-# PROP BASE Intermediate_Dir "gd___Win32_Debug_TS_GD2"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD=1 /D HAVE_LIBGD13=1 /D "HAVE_LIBGD15" /D HAVE_LIBGD20=1 /D "USE_GD_IOCTX" /D HAVE_LIBFREETYPE=1 /D "USE_GD_IMGSTRTTF" /D HAVE_GD_STRINGTTF=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype2.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD1"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gd___Win32_Debug_TS_GD1"
-# PROP BASE Intermediate_Dir "gd___Win32_Debug_TS_GD1"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "gd - Win32 Release_TS GD2"
-# Name "gd - Win32 Release_TS GD1"
-# Name "gd - Win32 Debug_TS GD2"
-# Name "gd - Win32 Debug_TS GD1"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\gd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdcache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdt1.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdttf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\gdcache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdt1.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdttf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_gd.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c
deleted file mode 100644
index 3c599cab65..0000000000
--- a/ext/gd/gd_ctx.c
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "php_gd.h"
-
-
-#define CTX_PUTC(c,ctx) ctx->putC(ctx, c)
-
-static void _php_image_output_putc(struct gdIOCtx *ctx, int c)
-{
- TSRMLS_FETCH();
- php_write(&c, 1 TSRMLS_CC);
-}
-
-static int _php_image_output_putbuf(struct gdIOCtx *ctx, const void* buf, int l)
-{
- TSRMLS_FETCH();
- return php_write((void *)buf, l TSRMLS_CC);
-}
-
-static void _php_image_output_ctxfree(struct gdIOCtx *ctx)
-{
- if(ctx) {
- efree(ctx);
- }
-}
-
-static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())
-{
- zval **imgind, **file, **quality;
- gdImagePtr im;
- char *fn = NULL;
- FILE *fp = NULL;
- int argc = ZEND_NUM_ARGS();
- int q = -1, i;
- gdIOCtx *ctx;
-
- /* The quality parameter for Wbmp stands for the threshold when called from image2wbmp() */
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &imgind, &file, &quality) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", phpi_get_le_gd());
-
- if (argc > 1) {
- convert_to_string_ex(file);
- fn = Z_STRVAL_PP(file);
- if (argc == 3) {
- convert_to_long_ex(quality);
- q = Z_LVAL_PP(quality);
- }
- }
-
- if ((argc == 2) || (argc == 3 && Z_STRLEN_PP(file))) {
- if (!fn || fn == empty_string || php_check_open_basedir(fn TSRMLS_CC)) {
- php_error(E_WARNING, "%s: invalid filename '%s'", get_active_function_name(TSRMLS_C), fn);
- RETURN_FALSE;
- }
-
- fp = VCWD_FOPEN(fn, "wb");
- if (!fp) {
- php_error(E_WARNING, "%s: unable to open '%s' for writing", get_active_function_name(TSRMLS_C), fn);
- RETURN_FALSE;
- }
-
- ctx = gdNewFileCtx(fp);
- } else {
- ctx = emalloc(sizeof(gdIOCtx));
- ctx->putC = _php_image_output_putc;
- ctx->putBuf = _php_image_output_putbuf;
- ctx->free = _php_image_output_ctxfree;
-
-#if APACHE && defined(CHARSET_EBCDIC)
- /* XXX this is unlikely to work any more thies@thieso.net */
- /* This is a binary file already: avoid EBCDIC->ASCII conversion */
- ap_bsetflag(php3_rqst->connection->client, B_EBCDIC2ASCII, 0);
-#endif
- }
-
- switch(image_type) {
- case PHP_GDIMG_CONVERT_WBM:
- if(q<0||q>255) {
- php_error(E_WARNING, "%s: invalid threshold value '%d'. It must be between 0 and 255",get_active_function_name(TSRMLS_C), q);
- }
- case PHP_GDIMG_TYPE_JPG:
- (*func_p)(im, ctx, q);
- break;
- case PHP_GDIMG_TYPE_WBM:
- for(i=0; i < gdImageColorsTotal(im); i++) {
- if(gdImageRed(im, i) == 0) break;
- }
- (*func_p)(im, i, ctx);
- break;
- default:
- (*func_p)(im, ctx);
- break;
- }
-
- ctx->free(ctx);
-
- if(fp) {
- fflush(fp);
- fclose(fp);
- }
-
- RETURN_TRUE;
-}
diff --git a/ext/gd/gdcache.c b/ext/gd/gdcache.c
deleted file mode 100644
index b89f5610ac..0000000000
--- a/ext/gd/gdcache.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * $Id$
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@lucent.com) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-/* This just seems unessacary */
-#if (WIN32|WINNT)
-#define ENABLE_GD_TTF
-#else
-#include "php_config.h"
-#endif
-#if HAVE_LIBTTF|HAVE_LIBFREETYPE
-
-#include "gdcache.h"
-
-/*********************************************************/
-/* implementation */
-/*********************************************************/
-
-
-/* create a new cache */
-gdCache_head_t *
-gdCacheCreate(
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease )
-{
- gdCache_head_t *head;
-
- head = (gdCache_head_t *)malloc(sizeof(gdCache_head_t));
- head->mru = NULL;
- head->size = size;
- head->gdCacheTest = gdCacheTest;
- head->gdCacheFetch = gdCacheFetch;
- head->gdCacheRelease = gdCacheRelease;
- return head;
-}
-
-void
-gdCacheDelete( gdCache_head_t *head )
-{
- gdCache_element_t *elem, *prev;
-
- elem = head->mru;
- while(elem) {
- (*(head->gdCacheRelease))(elem->userdata);
- prev = elem;
- elem = elem->next;
- free((char *)prev);
- }
- free((char *)head);
-}
-
-void *
-gdCacheGet( gdCache_head_t *head, void *keydata )
-{
- int i=0;
- gdCache_element_t *elem, *prev = NULL, *prevprev = NULL;
- void *userdata;
-
- elem = head->mru;
- while(elem) {
- if ((*(head->gdCacheTest))(elem->userdata, keydata)) {
- if (i) { /* if not already most-recently-used */
- /* relink to top of list */
- prev->next = elem->next;
- elem->next = head->mru;
- head->mru = elem;
- }
- return elem->userdata;
- }
- prevprev = prev;
- prev = elem;
- elem = elem->next;
- i++;
- }
- userdata = (*(head->gdCacheFetch))(&(head->error), keydata);
- if (! userdata) {
- /* if there was an error in the fetch then don't cache */
- return NULL;
- }
- if (i < head->size) { /* cache still growing - add new elem */
- elem = (gdCache_element_t *)malloc(sizeof(gdCache_element_t));
- }
- else { /* cache full - replace least-recently-used */
- /* preveprev becomes new end of list */
- prevprev->next = NULL;
- elem = prev;
- (*(head->gdCacheRelease))(elem->userdata);
- }
- /* relink to top of list */
- elem->next = head->mru;
- head->mru = elem;
- elem->userdata = userdata;
- return userdata;
-}
-
-
-
-/*********************************************************/
-/* test stub */
-/*********************************************************/
-
-
-#ifdef GDCACHE_TEST
-
-#include <stdio.h>
-
-typedef struct {
- int key;
- int value;
-} key_value_t;
-
-static int
-cacheTest( void *map, void *key )
-{
- return (((key_value_t *)map)->key == *(int *)key);
-}
-
-static void *
-cacheFetch( char **error, void *key )
-{
- key_value_t *map;
-
- map = (key_value_t *)malloc(sizeof(key_value_t));
- map->key = *(int *)key;
- map->value = 3;
-
- *error = NULL;
- return (void *)map;
-}
-
-static void
-cacheRelease( void *map)
-{
- free( (char *)map );
-}
-
-int
-main(char *argv[], int argc)
-{
- gdCache_head_t *cacheTable;
- int elem, key;
-
- cacheTable = gdCacheCreate(3, cacheTest, cacheFetch, cacheRelease);
-
- key = 20;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 40;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 50;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
-
- gdCacheDelete(cacheTable);
-
- return 0;
-}
-
-#endif
-
-#endif /* ENABLE_GD_TTF */
diff --git a/ext/gd/gdcache.h b/ext/gd/gdcache.h
deleted file mode 100644
index 06bf0ee6ce..0000000000
--- a/ext/gd/gdcache.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * $Id$
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@lucent.com) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-/*********************************************************/
-/* header */
-/*********************************************************/
-
-#if (!defined _OSD_POSIX) && HAVE_MALLOC_H
-#include <malloc.h>
-#else
-#include <stdlib.h> /* BS2000/OSD defines malloc() & friends in stdlib.h */
-#endif
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-/* user defined function templates */
-typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata);
-typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata);
-typedef void (*gdCacheReleaseFn_t)(void *userdata);
-
-/* element structure */
-typedef struct gdCache_element_s gdCache_element_t;
-struct gdCache_element_s {
- gdCache_element_t *next;
- void *userdata;
-};
-
-/* head structure */
-typedef struct gdCache_head_s gdCache_head_t;
-struct gdCache_head_s {
- gdCache_element_t *mru;
- int size;
- char *error;
- gdCacheTestFn_t gdCacheTest;
- gdCacheFetchFn_t gdCacheFetch;
- gdCacheReleaseFn_t gdCacheRelease;
-};
-
-/* function templates */
-gdCache_head_t *
-gdCacheCreate(
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease );
-
-void
-gdCacheDelete( gdCache_head_t *head );
-
-void *
-gdCacheGet( gdCache_head_t *head, void *keydata );
diff --git a/ext/gd/gdt1.c b/ext/gd/gdt1.c
deleted file mode 100644
index 4a7ab86f35..0000000000
--- a/ext/gd/gdt1.c
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jouni Ahto <jah@mork.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#if 0 /* Moved currently back to gd.c */
-
-#include "php.h"
-#include "php_gd.h"
-
-#if HAVE_LIBT1
-
-void php_free_ps_font(int font_id)
-{
- T1_DeleteFont(font_id);
-}
-
-void php_free_ps_enc(char **enc)
-{
- T1_DeleteEncoding(enc);
-}
-
-/* {{{ proto int imagepsloadfont(string pathname)
- Load a new font from specified file */
-PHP_FUNCTION(imagepsloadfont)
-{
- zval **file;
- int f_ind, l_ind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(file);
-
- f_ind = T1_AddFont(Z_STRVAL_PP(file));
-
- if (f_ind < 0) {
- switch (f_ind) {
- case -1:
- php_error(E_WARNING, "Couldn't find the font file");
- RETURN_FALSE;
- break;
- case -2:
- case -3:
- php_error(E_WARNING, "Memory allocation fault in t1lib");
- RETURN_FALSE;
- break;
- default:
- php_error(E_WARNING, "An unknown error occurred in t1lib");
- RETURN_FALSE;
- break;
- }
- }
-
- T1_LoadFont(f_ind);
- /*
- l_ind = zend_list_insert(f_ind, T1_GLOBAL(le_ps_font));
- RETURN_LONG(l_ind);
- */
- zend_list_addref(f_ind);
- RETURN_LONG(f_ind);
-}
-/* }}} */
-
-/* {{{ The function in t1lib which this function uses seem to be buggy...
-proto int imagepscopyfont(int font_index)
-Make a copy of a font for purposes like extending or reenconding */
-/*
-PHP_FUNCTION(imagepscopyfont)
-{
- pval *fnt;
- int l_ind, type;
- gd_ps_font *nf_ind, *of_ind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters(ht, 1, &fnt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(fnt);
-
- of_ind = zend_list_find(Z_LVAL_P(fnt), &type);
-
- if (type != GD_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_P(fnt));
- RETURN_FALSE;
- }
-
- nf_ind = emalloc(sizeof(gd_ps_font));
- nf_ind->font_id = T1_CopyFont(of_ind->font_id);
-
- if (nf_ind->font_id < 0) {
- l_ind = nf_ind->font_id;
- efree(nf_ind);
- switch (l_ind) {
- case -1:
- php_error(E_WARNING, "FontID %d is not loaded in memory", l_ind);
- RETURN_FALSE;
- break;
- case -2:
- php_error(E_WARNING, "Tried to copy a logical font");
- RETURN_FALSE;
- break;
- case -3:
- php_error(E_WARNING, "Memory allocation fault in t1lib");
- RETURN_FALSE;
- break;
- default:
- php_error(E_WARNING, "An unknown error occurred in t1lib");
- RETURN_FALSE;
- break;
- }
- }
-
- nf_ind->extend = 1;
- l_ind = zend_list_insert(nf_ind, GD_GLOBAL(le_ps_font));
- RETURN_LONG(l_ind);
-}
-*/
-/* }}} */
-
-/* {{{ proto bool imagepsfreefont(int font_index)
- Free memory used by a font */
-PHP_FUNCTION(imagepsfreefont)
-{
- zval **fnt;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fnt);
-
- zend_list_find(Z_LVAL_PP(fnt), &type);
-
- if (type != T1_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt));
- RETURN_FALSE;
- }
-
- zend_list_delete(Z_LVAL_PP(fnt));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepsencodefont(int font_index, string filename)
- To change a fonts character encoding vector */
-PHP_FUNCTION(imagepsencodefont)
-{
- zval **fnt, **enc;
- char **enc_vector;
- int type;
- int f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &enc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fnt);
- convert_to_string_ex(enc);
-
- f_ind = zend_list_find(Z_LVAL_PP(fnt), &type);
-
- if (type != T1_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt));
- RETURN_FALSE;
- }
-
- if ((enc_vector = T1_LoadEncoding(Z_STRVAL_PP(enc))) == NULL) {
- php_error(E_WARNING, "Couldn't load encoding vector from %s", Z_STRVAL_PP(enc));
- RETURN_FALSE;
- }
-
- T1_DeleteAllSizes(f_ind);
- if (T1_ReencodeFont(f_ind, enc_vector)) {
- T1_DeleteEncoding(enc_vector);
- php_error(E_WARNING, "Couldn't reencode font");
- RETURN_FALSE;
- }
- zend_list_insert(enc_vector, T1_GLOBAL(le_ps_enc));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepsextendfont(int font_index, float extend)
- Extend or or condense (if extend < 1) a font */
-PHP_FUNCTION(imagepsextendfont)
-{
- zval **fnt, **ext;
- int type;
- int f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &ext) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fnt);
- convert_to_double_ex(ext);
-
- f_ind = zend_list_find(Z_LVAL_PP(fnt), &type);
-
- if (type != T1_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt));
- RETURN_FALSE;
- }
-
- if (T1_ExtendFont(f_ind, Z_DVAL_PP(ext)) != 0) RETURN_FALSE;
- /*
- f_ind->extend = Z_DVAL_P(ext);
- */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepsslantfont(int font_index, float slant)
- Slant a font */
-PHP_FUNCTION(imagepsslantfont)
-{
- zval **fnt, **slt;
- int type;
- int f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &slt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fnt);
- convert_to_double_ex(slt);
-
- f_ind = zend_list_find(Z_LVAL_PP(fnt), &type);
-
- if (type != T1_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt));
- RETURN_FALSE;
- }
-
- if (T1_SlantFont(f_ind, Z_DVAL_PP(slt)) != 0) RETURN_FALSE;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array imagepstext(int image, string text, int font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias])
- Rasterize a string over an image */
-PHP_FUNCTION(imagepstext)
-{
- zval **img, **str, **fnt, **sz, **fg, **bg, **sp, **px, **py, **aas, **wd, **ang;
- int i, j, x, y;
- int space, type;
- int f_ind;
- int h_lines, v_lines, c_ind;
- int rd, gr, bl, fg_rd, fg_gr, fg_bl, bg_rd, bg_gr, bg_bl;
- int aa[16], aa_steps;
- int width, amount_kern, add_width;
- double angle;
- unsigned long aa_greys[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
- gdImagePtr bg_img;
- GLYPH *str_img;
- T1_OUTLINE *char_path, *str_path;
- T1_TMATRIX *transform = NULL;
-
- switch(ZEND_NUM_ARGS()) {
- case 8:
- if (zend_get_parameters_ex(8, &img, &str, &fnt, &sz, &fg, &bg, &px, &py) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(str);
- convert_to_long_ex(fnt);
- convert_to_long_ex(sz);
- convert_to_long_ex(fg);
- convert_to_long_ex(bg);
- convert_to_long_ex(px);
- convert_to_long_ex(py);
- x = Z_LVAL_PP(px);
- y = Z_LVAL_PP(py);
- space = 0;
- aa_steps = 4;
- width = 0;
- angle = 0;
- break;
- case 12:
- if (zend_get_parameters_ex(12, &img, &str, &fnt, &sz, &fg, &bg, &px, &py, &sp, &wd, &ang, &aas) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(str);
- convert_to_long_ex(fnt);
- convert_to_long_ex(sz);
- convert_to_long_ex(sp);
- convert_to_long_ex(fg);
- convert_to_long_ex(bg);
- convert_to_long_ex(px);
- convert_to_long_ex(py);
- x = Z_LVAL_PP(px);
- y = Z_LVAL_PP(py);
- convert_to_long_ex(sp);
- space = Z_LVAL_PP(sp);
- convert_to_long_ex(aas);
- aa_steps = Z_LVAL_PP(aas);
- convert_to_long_ex(wd);
- width = Z_LVAL_PP(wd);
- convert_to_double_ex(ang);
- angle = Z_DVAL_PP(ang);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- bg_img = zend_list_find(Z_LVAL_PP(img), &type);
-
- if (!bg_img || type != GD_GLOBAL(le_gd)) {
- php_error(E_WARNING, "Unable to find image pointer");
- RETURN_FALSE;
- }
-
- f_ind = zend_list_find(Z_LVAL_P(fnt), &type);
-
- if (!f_ind || type != GD_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_P(fnt));
- RETURN_FALSE;
- }
-
- fg_rd = gdImageRed(bg_img, Z_LVAL_P(fg));
- fg_gr = gdImageGreen(bg_img, Z_LVAL_P(fg));
- fg_bl = gdImageBlue(bg_img, Z_LVAL_P(fg));
- bg_rd = gdImageRed(bg_img, Z_LVAL_P(bg));
- bg_gr = gdImageGreen(bg_img, Z_LVAL_P(bg));
- bg_bl = gdImageBlue(bg_img, Z_LVAL_P(bg));
-
- for (i = 0; i < aa_steps; i++) {
- rd = bg_rd+(double)(fg_rd-bg_rd)/aa_steps*(i+1);
- gr = bg_gr+(double)(fg_gr-bg_gr)/aa_steps*(i+1);
- bl = bg_bl+(double)(fg_bl-bg_bl)/aa_steps*(i+1);
- aa[i] = gdImageColorResolve(bg_img, rd, gr, bl);
- }
-
- T1_AASetBitsPerPixel(8);
-
- switch (aa_steps) {
- case 4:
- T1_AASetGrayValues(0, 1, 2, 3, 4);
- T1_AASetLevel(T1_AA_LOW);
- break;
- case 16:
- T1_AAHSetGrayValues(aa_greys);
- T1_AASetLevel(T1_AA_HIGH);
- break;
- default:
- php_error(E_WARNING, "Invalid value %d as number of steps for antialiasing", aa_steps);
- RETURN_FALSE;
- }
-
- if (angle) {
- transform = T1_RotateMatrix(NULL, angle);
- }
-
- if (width) {
-#ifdef HAVE_LIBT1_OUTLINE
- str_path = T1_GetCharOutline(f_ind->font_id, Z_STRVAL_P(str)[0], Z_LVAL_P(sz), transform);
-
- for (i = 1; i < Z_STRLEN_P(str); i++) {
- amount_kern = (int) T1_GetKerning(f_ind->font_id, Z_STRVAL_P(str)[i-1], Z_STRVAL_P(str)[i]);
- amount_kern += Z_STRVAL_P(str)[i-1] == ' ' ? space : 0;
- add_width = (int) (amount_kern+width)/f_ind->extend;
-
- char_path = T1_GetMoveOutline(f_ind->font_id, add_width, 0, 0, Z_LVAL_P(sz), transform);
- str_path = T1_ConcatOutlines(str_path, char_path);
-
- char_path = T1_GetCharOutline(f_ind->font_id, Z_STRVAL_P(str)[i], Z_LVAL_P(sz), transform);
- str_path = T1_ConcatOutlines(str_path, char_path);
- }
- str_img = T1_AAFillOutline(str_path, 0);
-#else
- php_error(E_WARNING, "Setting space between characters in function ImagePSText is supported only with t1lib version 0.9 or above");
- RETURN_FALSE;
-#endif
- } else {
- str_img = T1_AASetString(f_ind->font_id, Z_STRVAL_P(str), Z_STRLEN_P(str),
- space, T1_KERNING, Z_LVAL_P(sz), transform);
- }
-
- if (T1_errno) RETURN_FALSE;
-
- h_lines = str_img->metrics.ascent - str_img->metrics.descent;
- v_lines = str_img->metrics.rightSideBearing - str_img->metrics.leftSideBearing;
-
- for (i = 0; i < v_lines; i++) {
- for (j = 0; j < h_lines; j++) {
- switch (str_img->bits[j*v_lines+i]) {
- case 0:
- break;
- default:
- c_ind = aa[str_img->bits[j*v_lines+i]-1];
- gdImageSetPixel(bg_img, x+str_img->metrics.leftSideBearing+i, y-str_img->metrics.ascent+j, c_ind);
- }
- }
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- add_next_index_long(return_value, str_img->metrics.leftSideBearing);
- add_next_index_long(return_value, str_img->metrics.descent);
- add_next_index_long(return_value, str_img->metrics.rightSideBearing);
- add_next_index_long(return_value, str_img->metrics.ascent);
-
-}
-/* }}} */
-
-/* {{{ proto array imagepsbbox(string text, int font, int size [, int space, int tightness, int angle])
- Return the bounding box needed by a string if rasterized */
-PHP_FUNCTION(imagepsbbox)
-{
- pval *str, *fnt, *sz, *sp, *wd, *ang;
- int i, space, add_width, char_width, amount_kern, type;
- int cur_x, cur_y, dx, dy;
- int x1, y1, x2, y2, x3, y3, x4, y4;
- gd_ps_font *f_ind;
- int per_char = 0;
- double angle, sin_a, cos_a;
- BBox char_bbox, str_bbox = {0, 0, 0, 0};
-
- switch(ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters(ht, 3, &str, &fnt, &sz) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(str);
- convert_to_long(fnt);
- convert_to_long(sz);
- space = 0;
- break;
- case 6:
- if (zend_get_parameters(ht, 6, &str, &fnt, &sz, &sp, &wd, &ang) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(str);
- convert_to_long(fnt);
- convert_to_long(sz);
- convert_to_long(sp);
- space = Z_LVAL_P(sp);
- convert_to_long(wd);
- add_width = Z_LVAL_P(wd);
- convert_to_double(ang);
- angle = Z_DVAL_P(ang) * M_PI / 180;
- sin_a = sin(angle);
- cos_a = cos(angle);
- per_char = add_width || angle ? 1 : 0;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- f_ind = zend_list_find(Z_LVAL_P(fnt), &type);
-
- if (type != GD_GLOBAL(le_ps_font)) {
- php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_P(fnt));
- RETURN_FALSE;
- }
-
-#define max(a, b) (a > b ? a : b)
-#define min(a, b) (a < b ? a : b)
-#define new_x(a, b) (int) ((a) * cos_a - (b) * sin_a)
-#define new_y(a, b) (int) ((a) * sin_a + (b) * cos_a)
-
- if (per_char) {
- space += T1_GetCharWidth(f_ind->font_id, ' ');
- cur_x = cur_y = 0;
-
- for (i = 0; i < Z_STRLEN_P(str); i++) {
- if (Z_STRVAL_P(str)[i] == ' ') {
- char_bbox.llx = char_bbox.lly = char_bbox.ury = 0;
- char_bbox.urx = char_width = space;
- } else {
- char_bbox = T1_GetCharBBox(f_ind->font_id, Z_STRVAL_P(str)[i]);
- char_width = T1_GetCharWidth(f_ind->font_id, Z_STRVAL_P(str)[i]);
- }
- amount_kern = i ? T1_GetKerning(f_ind->font_id, Z_STRVAL_P(str)[i-1], Z_STRVAL_P(str)[i]) : 0;
-
- /* Transfer character bounding box to right place */
- x1 = new_x(char_bbox.llx, char_bbox.lly) + cur_x;
- y1 = new_y(char_bbox.llx, char_bbox.lly) + cur_y;
- x2 = new_x(char_bbox.llx, char_bbox.ury) + cur_x;
- y2 = new_y(char_bbox.llx, char_bbox.ury) + cur_y;
- x3 = new_x(char_bbox.urx, char_bbox.ury) + cur_x;
- y3 = new_y(char_bbox.urx, char_bbox.ury) + cur_y;
- x4 = new_x(char_bbox.urx, char_bbox.lly) + cur_x;
- y4 = new_y(char_bbox.urx, char_bbox.lly) + cur_y;
-
- /* Find min & max values and compare them with current bounding box */
- str_bbox.llx = min(str_bbox.llx, min(x1, min(x2, min(x3, x4))));
- str_bbox.lly = min(str_bbox.lly, min(y1, min(y2, min(y3, y4))));
- str_bbox.urx = max(str_bbox.urx, max(x1, max(x2, max(x3, x4))));
- str_bbox.ury = max(str_bbox.ury, max(y1, max(y2, max(y3, y4))));
-
- /* Move to the next base point */
- dx = new_x(char_width + add_width + amount_kern, 0);
- dy = new_y(char_width + add_width + amount_kern, 0);
- cur_x += dx;
- cur_y += dy;
- /*
- printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", x1, y1, x2, y2, x3, y3, x4, y4, char_bbox.llx, char_bbox.lly, char_bbox.urx, char_bbox.ury, char_width, amount_kern, cur_x, cur_y, dx, dy);
- */
- }
-
- } else {
- str_bbox = T1_GetStringBBox(f_ind->font_id, Z_STRVAL_P(str), Z_STRLEN_P(str), space, T1_KERNING);
- }
- if (T1_errno) RETURN_FALSE;
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- /*
- printf("%d %d %d %d\n", str_bbox.llx, str_bbox.lly, str_bbox.urx, str_bbox.ury);
- */
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.llx)*Z_LVAL_P(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.lly)*Z_LVAL_P(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.urx)*Z_LVAL_P(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.ury)*Z_LVAL_P(sz)/1000));
-}
-/* }}} */
-
-#endif /* HAVE_LIBT1 */
-
-#endif /* 0 */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/gd/gdt1.h b/ext/gd/gdt1.h
deleted file mode 100644
index 6252b6a95c..0000000000
--- a/ext/gd/gdt1.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jouni Ahto <jah@mork.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#if HAVE_LIBT1
-
-#include <t1lib.h>
-
-extern void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-extern void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/gd/gdttf.c b/ext/gd/gdttf.c
deleted file mode 100644
index 393f0bdbf7..0000000000
--- a/ext/gd/gdttf.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/* gd interface to freetype library */
-/* */
-/* John Ellson ellson@lucent.com */
-
-/* $Id$ */
-
-#include "php.h"
-
-#if PHP_WIN32
-#include "config.w32.h"
-#else
-#include "php_config.h"
-#endif
-#if HAVE_LIBTTF && !defined(USE_GD_IMGSTRTTF)
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <gd.h>
-#include "gdttf.h"
-#include "gdcache.h"
-#include <freetype.h>
-
-#ifndef HAVE_GDIMAGECOLORRESOLVE
-extern int gdImageColorResolve(gdImagePtr, int, int, int);
-#endif
-
-/* number of fonts cached before least recently used is replaced */
-#define FONTCACHESIZE 6
-
-/* number of character glyphs cached per font before
- least-recently-used is replaced */
-#define GLYPHCACHESIZE 120
-
-/* number of bitmaps cached per glyph before
- least-recently-used is replaced */
-#define BITMAPCACHESIZE 8
-
-/* number of antialias color lookups cached */
-#define TWEENCOLORCACHESIZE 32
-
-/* ptsize below which anti-aliasing is ineffective */
-#define MINANTIALIASPTSIZE 0
-
-/* display resolution - (Not really. This has to be 72 or hinting is wrong) */
-#define RESOLUTION 72
-
-/* Number of colors used for anti-aliasing */
-#undef NUMCOLORS
-#define NUMCOLORS 4
-
-/* Line separation as a factor of font height.
- No space between if LINESPACE = 1.00
- Line separation will be rounded up to next pixel row*/
-#define LINESPACE 1.05
-
-#ifndef TRUE
-#define FALSE 0
-#define TRUE !FALSE
-#endif
-
-#ifndef MAX
-#define MAX(a, b) ((a)>(b)?(a):(b))
-#endif
-#ifndef MIN
-#define MIN(a, b) ((a)<(b)?(a):(b))
-#endif
-
-typedef struct {
- char *fontname; /* key */
- double ptsize; /* key */
- double angle; /* key */
- double sin_a, cos_a;
- TT_Engine *engine;
- TT_Face face;
- TT_Face_Properties properties;
- TT_Instance instance;
- TT_CharMap char_map_Unicode;
- TT_CharMap char_map_Big5;
- TT_CharMap char_map_Roman;
- int have_char_map_Unicode;
- int have_char_map_Big5;
- int have_char_map_Roman;
- TT_Matrix matrix;
- TT_Instance_Metrics imetrics;
- gdCache_head_t *glyphCache;
-} font_t;
-
-typedef struct {
- char *fontname; /* key */
- double ptsize; /* key */
- double angle; /* key */
- TT_Engine *engine;
-} fontkey_t;
-
-typedef struct {
- int character; /* key */
- int hinting; /* key */
- TT_Glyph glyph;
- TT_Glyph_Metrics metrics;
- TT_Outline outline;
- TT_Pos oldx, oldy;
- TT_Raster_Map Bit;
- int gray_render;
- int xmin, xmax, ymin, ymax;
- gdCache_head_t *bitmapCache;
-} glyph_t;
-
-typedef struct {
- int character; /* key */
- int hinting; /* key */
- int gray_render;
- font_t *font;
-} glyphkey_t;
-
-typedef struct {
- int xoffset; /* key */
- int yoffset; /* key */
- char *bitmap;
-} bitmap_t;
-
-typedef struct {
- int xoffset; /* key */
- int yoffset; /* key */
- glyph_t *glyph;
-} bitmapkey_t;
-
-typedef struct {
- unsigned char pixel; /* key */
- unsigned char bgcolor; /* key */
- int fgcolor; /* key */ /* -ve means no antialias */
- gdImagePtr im; /* key */
- unsigned char tweencolor;
-} tweencolor_t;
-
-typedef struct {
- unsigned char pixel; /* key */
- unsigned char bgcolor; /* key */
- int fgcolor; /* key */ /* -ve means no antialias */
- gdImagePtr im; /* key */
-} tweencolorkey_t;
-
-/* forward declarations so that glyphCache can be initialized by font code */
-static int glyphTest ( void *element, void *key );
-static void *glyphFetch ( char **error, void *key );
-static void glyphRelease( void *element );
-
-/* forward declarations so that bitmapCache can be initialized by glyph code */
-static int bitmapTest ( void *element, void *key );
-static void *bitmapFetch ( char **error, void *key );
-static void bitmapRelease( void *element );
-
-/* local prototype */
-char *gdttfchar(gdImage *im, int fg, font_t *font, int x, int y, TT_F26Dot6 x1, TT_F26Dot6 y1, TT_F26Dot6 *advance, TT_BBox **bbox, char **next);
-
-
-
-/********************************************************************
- * gdTcl_UtfToUniChar is borrowed from ...
- */
-/*
- * tclUtf.c --
- *
- * Routines for manipulating UTF-8 strings.
- *
- * Copyright (c) 1997-1998 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) tclUtf.c 1.25 98/01/28 18:02:43
- */
-
-/*
- *---------------------------------------------------------------------------
- *
- * gdTcl_UtfToUniChar --
- *
- * Extract the Tcl_UniChar represented by the UTF-8 string. Bad
- * UTF-8 sequences are converted to valid Tcl_UniChars and processing
- * continues. Equivalent to Plan 9 chartorune().
- *
- * The caller must ensure that the source buffer is long enough that
- * this routine does not run off the end and dereference non-existent
- * memory looking for trail bytes. If the source buffer is known to
- * be '\0' terminated, this cannot happen. Otherwise, the caller
- * should call Tcl_UtfCharComplete() before calling this routine to
- * ensure that enough bytes remain in the string.
- *
- * Results:
- * *chPtr is filled with the Tcl_UniChar, and the return value is the
- * number of bytes from the UTF-8 string that were consumed.
- *
- * Side effects:
- * None.
- *
- *---------------------------------------------------------------------------
- */
-
-#ifndef CHARSET_EBCDIC
-#define ASC(ch) (ch)
-#else /*CHARSET_EBCDIC*/
-#define ASC(ch) os_toascii[(unsigned char) (ch)]
-#endif /*CHARSET_EBCDIC*/
-
-#define Tcl_UniChar int
-#define TCL_UTF_MAX 3
-static int
-gdTcl_UtfToUniChar(char *str, Tcl_UniChar *chPtr)
-/* str is the UTF8 next character pointer */
-/* chPtr is the int for the result */
-{
- int byte;
-
- /* HTML4.0 entities in decimal form, e.g. &#197; */
- byte = *((unsigned char *) str);
- if (byte == '&') {
- int i, n=0;
-
- byte = *((unsigned char *) (str+1));
- if (byte == '#') {
- for (i = 2; i < 8; i++) {
- byte = *((unsigned char *) (str+i));
- if (byte >= '0' && byte <= '9') {
- n = (n * 10) + (byte - '0');
- }
- else
- break;
- }
- if (byte == ';') {
- *chPtr = (Tcl_UniChar) n;
- return ++i;
- }
- }
- }
-
- /*
- * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones.
- */
-
- byte = ASC(*((unsigned char *) str));
- if (byte < 0xC0) {
- /*
- * Handles properly formed UTF-8 characters between 0x01 and 0x7F.
- * Also treats \0 and naked trail bytes 0x80 to 0xBF as valid
- * characters representing themselves.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xE0) {
- if ((ASC(str[1]) & 0xC0) == 0x80) {
- /*
- * Two-byte-character lead-byte followed by a trail-byte.
- */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (ASC(str[1]) & 0x3F));
- return 2;
- }
- /*
- * A two-byte-character lead-byte not followed by trail-byte
- * represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xF0) {
- if (((ASC(str[1]) & 0xC0) == 0x80) && ((ASC(str[2]) & 0xC0) == 0x80)) {
- /*
- * Three-byte-character lead byte followed by two trail bytes.
- */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12)
- | ((ASC(str[1]) & 0x3F) << 6) | (ASC(str[2]) & 0x3F));
- return 3;
- }
- /*
- * A three-byte-character lead-byte not followed by two trail-bytes
- * represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-#if TCL_UTF_MAX > 3
- else {
- int ch, total, trail;
-
- total = totalBytes[byte];
- trail = total - 1;
- if (trail > 0) {
- ch = byte & (0x3F >> trail);
- do {
- str++;
- if ((ASC(*str) & 0xC0) != 0x80) {
- *chPtr = byte;
- return 1;
- }
- ch <<= 6;
- ch |= (ASC(*str) & 0x3F);
- trail--;
- } while (trail > 0);
- *chPtr = ch;
- return total;
- }
- }
-#endif
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
-}
-
-/********************************************************************/
-/* font cache functions */
-
-static int
-fontTest ( void *element, void *key )
-{
- font_t *a=(font_t *)element;
- fontkey_t *b=(fontkey_t *)key;
-
- return ( strcmp(a->fontname, b->fontname) == 0
- && a->ptsize == b->ptsize
- && a->angle == b->angle);
-}
-
-static void *
-fontFetch ( char **error, void *key )
-{
- TT_Error err;
- font_t *a;
- fontkey_t *b=(fontkey_t *)key;
- int i, n, map_found;
- short platform, encoding;
- TSRMLS_FETCH();
-
- a = (font_t *)malloc(sizeof(font_t));
-#ifdef VIRTUAL_DIR
- /* a->fontname will be freed in fontRelease() later on */
- if (virtual_filepath(b->fontname, &a->fontname TSRMLS_CC)) {
- *error = "Could not find/open font";
- return NULL;
- }
-#else
- a->fontname = (char *)malloc(strlen(b->fontname) + 1);
- strcpy(a->fontname, b->fontname);
-#endif
- a->ptsize = b->ptsize;
- a->angle = b->angle;
- a->sin_a = sin(a->angle);
- a->cos_a = cos(a->angle);
- a->engine = b->engine;
- if ((err = TT_Open_Face(*b->engine, a->fontname, &a->face))) {
- if (err == TT_Err_Could_Not_Open_File) {
- *error = "Could not find/open font";
- }
- else {
- *error = "Could not read font";
- }
- return NULL;
- }
- /* get face properties and allocate preload arrays */
- TT_Get_Face_Properties(a->face, &a->properties);
-
- /* create instance */
- if (TT_New_Instance(a->face, &a->instance)) {
- *error = "Could not create face instance";
- return NULL;
- }
-
- if (TT_Set_Instance_Resolutions(a->instance, RESOLUTION, RESOLUTION)) {
- *error = "Could not set device resolutions";
- return NULL;
-map_found = 0;
-a->have_char_map_Unicode = 0;
-a->have_char_map_Big5 = 0;
-a->have_char_map_Roman = 0;
- }
-
- if (TT_Set_Instance_CharSize(a->instance, (TT_F26Dot6)(a->ptsize*64))) {
- *error = "Could not set character size";
- return NULL;
- }
-
- TT_Get_Instance_Metrics(a->instance, &a->imetrics);
-
- /* First, look for a Unicode charmap */
- n = TT_Get_CharMap_Count(a->face);
-
- for (i = 0; i < n; i++) {
- TT_Get_CharMap_ID(a->face, i, &platform, &encoding);
- if ((platform == 3 && encoding == 1) /* Windows Unicode */
- || (platform == 2 && encoding == 1)
- || (platform == 0)) { /* ?? Unicode */
- TT_Get_CharMap(a->face, i, &a->char_map_Unicode);
- a->have_char_map_Unicode = 1;
- map_found++;
- } else if (platform == 3 && encoding == 4) { /* Windows Big5 */
- TT_Get_CharMap(a->face, i, &a->char_map_Big5);
- a->have_char_map_Big5 = 1;
- map_found++;
- } else if (platform == 1 && encoding == 0) { /* Apple Roman */
- TT_Get_CharMap(a->face, i, &a->char_map_Roman);
- a->have_char_map_Roman = 1;
- map_found++;
- }
- }
-
- if (! map_found) {
- *error = "Unable to find a CharMap that I can handle";
- return NULL;
- }
-
- a->matrix.xx = (TT_Fixed) (a->cos_a * (1<<16));
- a->matrix.yx = (TT_Fixed) (a->sin_a * (1<<16));
- a->matrix.xy = - a->matrix.yx;
- a->matrix.yy = a->matrix.xx;
-
- a->glyphCache = gdCacheCreate( GLYPHCACHESIZE,
- glyphTest, glyphFetch, glyphRelease);
-
- return (void *)a;
-}
-
-static void
-fontRelease( void *element )
-{
- font_t *a=(font_t *)element;
-
- gdCacheDelete(a->glyphCache);
- TT_Done_Instance(a->instance);
- TT_Close_Face(a->face);
- free(a->fontname);
- free( (char *)element );
-}
-
-/********************************************************************/
-/* glyph cache functions */
-
-static int
-glyphTest ( void *element, void *key )
-{
- glyph_t *a=(glyph_t *)element;
- glyphkey_t *b=(glyphkey_t *)key;
-
- return (a->character == b->character
- && a->hinting == b->hinting
- && a->gray_render == b->gray_render);
-}
-
-static void *
-glyphFetch ( char **error, void *key )
-{
- glyph_t *a;
- glyphkey_t *b=(glyphkey_t *)key;
- short glyph_code;
- int flags, err;
- int crect[8], xmin, xmax, ymin, ymax;
- double cos_a, sin_a;
-
- a = (glyph_t *)malloc(sizeof(glyph_t));
- a->character = b->character;
- a->hinting = b->hinting;
- a->gray_render = b->gray_render;
- a->oldx = a->oldy = 0;
-
- /* create glyph container */
- if ((TT_New_Glyph(b->font->face, &a->glyph))) {
- *error = "Could not create glyph container";
- return NULL;
- }
-
- flags = TTLOAD_SCALE_GLYPH;
- if (a->hinting && b->font->angle == 0.0) {
- flags |= TTLOAD_HINT_GLYPH;
- }
- if (b->font->have_char_map_Unicode) {
- glyph_code = TT_Char_Index(b->font->char_map_Unicode, a->character);
- } else if (a->character < 161 && b->font->have_char_map_Roman) {
- glyph_code = TT_Char_Index(b->font->char_map_Roman, a->character);
- } else if ( b->font->have_char_map_Big5) {
- glyph_code = TT_Char_Index(b->font->char_map_Big5, a->character);
- }
- if ((err=TT_Load_Glyph(b->font->instance, a->glyph, glyph_code, flags))) {
- *error = "TT_Load_Glyph problem";
- return NULL;
- }
-
- TT_Get_Glyph_Metrics(a->glyph, &a->metrics);
- if (b->font->angle != 0.0) {
- TT_Get_Glyph_Outline(a->glyph, &a->outline);
- TT_Transform_Outline(&a->outline, &b->font->matrix);
- }
-
- /* calculate bitmap size */
- xmin = a->metrics.bbox.xMin -64;
- ymin = a->metrics.bbox.yMin -64;
- xmax = a->metrics.bbox.xMax +64;
- ymax = a->metrics.bbox.yMax +64;
-
- cos_a = b->font->cos_a;
- sin_a = b->font->sin_a;
- crect[0] = (int)(xmin * cos_a - ymin * sin_a);
- crect[1] = (int)(xmin * sin_a + ymin * cos_a);
- crect[2] = (int)(xmax * cos_a - ymin * sin_a);
- crect[3] = (int)(xmax * sin_a + ymin * cos_a);
- crect[4] = (int)(xmax * cos_a - ymax * sin_a);
- crect[5] = (int)(xmax * sin_a + ymax * cos_a);
- crect[6] = (int)(xmin * cos_a - ymax * sin_a);
- crect[7] = (int)(xmin * sin_a + ymax * cos_a);
- a->xmin = MIN(MIN(crect[0], crect[2]), MIN(crect[4], crect[6]));
- a->xmax = MAX(MAX(crect[0], crect[2]), MAX(crect[4], crect[6]));
- a->ymin = MIN(MIN(crect[1], crect[3]), MIN(crect[5], crect[7]));
- a->ymax = MAX(MAX(crect[1], crect[3]), MAX(crect[5], crect[7]));
-
- /* allocate bitmap large enough for character */
- a->Bit.rows = (a->ymax - a->ymin + 32 + 64) / 64;
- a->Bit.width = (a->xmax - a->xmin + 32 + 64) / 64;
- a->Bit.flow = TT_Flow_Up;
- if (a->gray_render) {
- a->Bit.cols = a->Bit.width; /* 1 byte per pixel */
- }
- else {
- a->Bit.cols = (a->Bit.width + 7) / 8; /* 1 bit per pixel */
- }
- a->Bit.cols = (a->Bit.cols + 3) & ~3; /* pad to 32 bits */
- a->Bit.size = a->Bit.rows * a->Bit.cols; /* # of bytes in buffer */
- a->Bit.bitmap = NULL;
-
- a->bitmapCache = gdCacheCreate( BITMAPCACHESIZE,
- bitmapTest, bitmapFetch, bitmapRelease);
-
- return (void *)a;
-}
-
-static void
-glyphRelease( void *element )
-{
- glyph_t *a=(glyph_t *)element;
-
- gdCacheDelete(a->bitmapCache);
- TT_Done_Glyph( a->glyph );
- free( (char *)element );
-}
-
-/********************************************************************/
-/* bitmap cache functions */
-
-static int
-bitmapTest ( void *element, void *key )
-{
- bitmap_t *a=(bitmap_t *)element;
- bitmapkey_t *b=(bitmapkey_t *)key;
-
- if (a->xoffset == b->xoffset && a->yoffset == b->yoffset) {
- b->glyph->Bit.bitmap = a->bitmap;
- return TRUE;
- }
- return FALSE;
-}
-
-static void *
-bitmapFetch ( char **error, void *key )
-{
- bitmap_t *a;
- bitmapkey_t *b=(bitmapkey_t *)key;
-
- a = (bitmap_t *)malloc(sizeof(bitmap_t));
- a->xoffset = b->xoffset;
- a->yoffset = b->yoffset;
-
- b->glyph->Bit.bitmap = a->bitmap = (char *)malloc(b->glyph->Bit.size);
- memset(a->bitmap, 0, b->glyph->Bit.size);
- /* render glyph */
- if (b->glyph->gray_render) {
- TT_Get_Glyph_Pixmap(b->glyph->glyph, &b->glyph->Bit,
- a->xoffset, a->yoffset);
- }
- else {
- TT_Get_Glyph_Bitmap(b->glyph->glyph, &b->glyph->Bit,
- a->xoffset, a->yoffset);
- }
- return (void *)a;
-}
-
-static void
-bitmapRelease( void *element )
-{
- bitmap_t *a=(bitmap_t *)element;
-
- free( a->bitmap );
- free( (char *)element );
-}
-
-/********************************************************************/
-/* tweencolor cache functions */
-
-static int
-tweenColorTest (void *element, void *key)
-{
- tweencolor_t *a=(tweencolor_t *)element;
- tweencolorkey_t *b=(tweencolorkey_t *)key;
-
- return (a->pixel == b->pixel
- && a->bgcolor == b->bgcolor
- && a->fgcolor == b->fgcolor
- && a->im == b->im);
-}
-
-static void *
-tweenColorFetch (char **error, void *key)
-{
- tweencolor_t *a;
- tweencolorkey_t *b=(tweencolorkey_t *)key;
- int pixel, npixel, bg, fg;
- gdImagePtr im;
-
- a = (tweencolor_t *)malloc(sizeof(tweencolor_t));
- pixel = a->pixel = b->pixel;
- bg = a->bgcolor = b->bgcolor;
- fg = a->fgcolor = b->fgcolor;
- im = b->im;
-
- /* if fg is specified by a negative color idx, then don't antialias */
- if (fg <0) {
- a->tweencolor = -fg;
- } else {
- npixel = NUMCOLORS - pixel;
- a->tweencolor = gdImageColorResolve(im,
- (pixel * im->red [fg] + npixel * im->red [bg]) / NUMCOLORS,
- (pixel * im->green[fg] + npixel * im->green[bg]) / NUMCOLORS,
- (pixel * im->blue [fg] + npixel * im->blue [bg]) / NUMCOLORS);
- }
- *error = NULL;
- return (void *)a;
-}
-
-static void
-tweenColorRelease(void *element)
-{
- free((char *)element);
-}
-
-/********************************************************************/
-/* gdttfchar - render one character onto a gd image */
-
-static int OneTime=0;
-static gdCache_head_t *tweenColorCache;
-
-char *
-gdttfchar(gdImage *im, int fg, font_t *font,
- int x, int y, /* string start pos in pixels */
- TT_F26Dot6 x1, TT_F26Dot6 y1, /* char start offset (*64) from x,y */
- TT_F26Dot6 *advance,
- TT_BBox **bbox,
- char **next)
-{
- int pc, ch, len;
- int row, col;
- int x2, y2; /* char start pos in pixels */
- int x3, y3; /* current pixel pos */
- unsigned char *pixel;
-
- glyph_t *glyph;
- glyphkey_t glyphkey;
- bitmapkey_t bitmapkey;
- tweencolor_t *tweencolor;
- tweencolorkey_t tweencolorkey;
-
- /****** set up tweenColorCache on first call ************/
- if (! OneTime) {
- tweenColorCache = gdCacheCreate(TWEENCOLORCACHESIZE,
- tweenColorTest, tweenColorFetch, tweenColorRelease);
- OneTime++;
- }
- /**************/
-
- if (font->have_char_map_Unicode) { /* use UTF-8 mapping from ASCII */
- len = gdTcl_UtfToUniChar(*next, &ch);
- *next += len;
- } else {
- /*
- * Big 5 mapping:
- * use "JIS-8 half-width katakana" coding from 8-bit characters. Ref:
- * ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/japan.inf-032092.sjs
- */
- ch = (**next) & 255; /* don't extend sign */
- (*next)++;
- if (ch >= 161 /* first code of JIS-8 pair */
- && **next) { /* don't advance past '\0' */
- ch = (ch * 256) + **next;
- (*next)++;
- }
- }
-
- glyphkey.character = ch;
- glyphkey.hinting = 1;
- /* if fg is specified by a negative color idx, then don't antialias */
- glyphkey.gray_render = ((font->ptsize < MINANTIALIASPTSIZE) || (fg <0))?FALSE:TRUE;
- glyphkey.font = font;
- glyph = (glyph_t *)gdCacheGet(font->glyphCache, &glyphkey);
- if (! glyph)
- return font->glyphCache->error;
-
- *bbox = &glyph->metrics.bbox;
- *advance = glyph->metrics.advance;
-
- /* if null *im, or invalid color, then assume user just wants brect */
- if (!im || fg > 255 || fg < -255)
- return (char *)NULL;
-
- /* render (via cache) a bitmap for the current fractional offset */
- bitmapkey.xoffset = ((x1+32) & 63) - 32 - ((glyph->xmin+32) & -64);
- bitmapkey.yoffset = ((y1+32) & 63) - 32 - ((glyph->ymin+32) & -64);
- bitmapkey.glyph = glyph;
- gdCacheGet(glyph->bitmapCache, &bitmapkey);
-
- /* copy to gif, mapping colors */
- x2 = x + (((glyph->xmin+32) & -64) + ((x1+32) & -64)) / 64;
- y2 = y - (((glyph->ymin+32) & -64) + ((y1+32) & -64)) / 64;
- tweencolorkey.fgcolor = fg;
- tweencolorkey.im = im;
- for (row = 0; row < glyph->Bit.rows; row++) {
- if (glyph->gray_render)
- pc = row * glyph->Bit.cols;
- else
- pc = row * glyph->Bit.cols * 8;
- y3 = y2 - row;
- if (y3 >= im->sy || y3 < 0) continue;
- for (col = 0; col < glyph->Bit.width; col++, pc++) {
- if (glyph->gray_render) {
- tweencolorkey.pixel =
- *((unsigned char *)(glyph->Bit.bitmap) + pc);
- } else {
- tweencolorkey.pixel =
- (((*((unsigned char *)(glyph->Bit.bitmap) + pc/8))
- <<(pc%8))&128)?4:0;
- }
- /* if not background */
- if (tweencolorkey.pixel > 0) {
- x3 = x2 + col;
- if (x3 >= im->sx || x3 < 0) continue;
-#if HAVE_LIBGD13
- pixel = &im->pixels[y3][x3];
-#else
- pixel = &im->pixels[x3][y3];
-#endif
- tweencolorkey.bgcolor = *pixel;
- tweencolor = (tweencolor_t *)gdCacheGet(
- tweenColorCache, &tweencolorkey);
- *pixel = tweencolor->tweencolor;
- }
- }
- }
- return (char *)NULL;
-}
-
-/********************************************************************/
-/* gdttf - render a utf8 string onto a gd image */
-
-char *
-gdttf(gdImage *im, int *brect, int fg, char *fontname,
- double ptsize, double angle, int x, int y, char *str)
-{
- TT_F26Dot6 ur_x=0, ur_y=0, ll_x=0, ll_y=0;
- TT_F26Dot6 advance_x, advance_y, advance, x1, y1;
- TT_BBox *bbox;
- double sin_a, cos_a;
- int i=0, ch;
- font_t *font;
- fontkey_t fontkey;
- char *error, *next;
-
- /****** initialize font engine on first call ************/
- static gdCache_head_t *fontCache;
- static TT_Engine engine;
-
- if (! fontCache) {
- if (TT_Init_FreeType(&engine)) {
- return "Failure to initialize font engine";
- }
- fontCache = gdCacheCreate( FONTCACHESIZE,
- fontTest, fontFetch, fontRelease);
- }
- /**************/
-
- /* get the font (via font cache) */
- fontkey.fontname = fontname;
- fontkey.ptsize = ptsize;
- fontkey.angle = angle;
- fontkey.engine = &engine;
- font = (font_t *)gdCacheGet(fontCache, &fontkey);
- if (! font) {
- return fontCache->error;
- }
- sin_a = font->sin_a;
- cos_a = font->cos_a;
- advance_x = advance_y = 0;
-
- next=str;
- while (*next) {
- ch = *next;
-
- /* carriage returns */
- if (ch == '\r') {
- advance_x = 0;
- next++;
- continue;
- }
- /* newlines */
- if (ch == '\n') {
- advance_y -= (TT_F26Dot6)(font->imetrics.y_ppem * LINESPACE * 64);
- advance_y = (advance_y-32) & -64; /* round to next pixel row */
- next++;
- continue;
- }
-
- x1 = (TT_F26Dot6)(advance_x * cos_a - advance_y * sin_a);
- y1 = (TT_F26Dot6)(advance_x * sin_a + advance_y * cos_a);
-
- if ((error=gdttfchar(im, fg, font, x, y, x1, y1, &advance, &bbox, &next)))
- return error;
-
- if (! i++) { /* if first character, init BB corner values */
- ll_x = bbox->xMin;
- ll_y = bbox->yMin;
- ur_x = bbox->xMax;
- ur_y = bbox->yMax;
- }
- else {
- if (! advance_x) ll_x = MIN(bbox->xMin, ll_x);
- ll_y = MIN(advance_y + bbox->yMin, ll_y);
- ur_x = MAX(advance_x + bbox->xMax, ur_x);
- if (! advance_y) ur_y = MAX(bbox->yMax, ur_y);
- }
- advance_x += advance;
- }
-
- /* rotate bounding rectangle */
- brect[0] = (int)(ll_x * cos_a - ll_y * sin_a);
- brect[1] = (int)(ll_x * sin_a + ll_y * cos_a);
- brect[2] = (int)(ur_x * cos_a - ll_y * sin_a);
- brect[3] = (int)(ur_x * sin_a + ll_y * cos_a);
- brect[4] = (int)(ur_x * cos_a - ur_y * sin_a);
- brect[5] = (int)(ur_x * sin_a + ur_y * cos_a);
- brect[6] = (int)(ll_x * cos_a - ur_y * sin_a);
- brect[7] = (int)(ll_x * sin_a + ur_y * cos_a);
-
- /* scale, round and offset brect */
- i = 0;
- while (i<8) {
- brect[i] = x + (brect[i] + 32) / 64;
- i++;
- brect[i] = y - (brect[i] + 32) / 64;
- i++;
- }
-
- return (char *)NULL;
-}
-
-#endif /* HAVE_LIBTTF */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/gd/gdttf.h b/ext/gd/gdttf.h
deleted file mode 100644
index 4f32129702..0000000000
--- a/ext/gd/gdttf.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* $Id$ */
-
-#ifdef _OSD_POSIX
-#ifndef APACHE
-#error On this EBCDIC platform, PHP is only supported as an Apache module.
-#else /*APACHE*/
-#ifndef CHARSET_EBCDIC
-#define CHARSET_EBCDIC /* this machine uses EBCDIC, not ASCII! */
-#endif
-#include "ebcdic.h"
-#endif /*APACHE*/
-#endif /*_OSD_POSIX*/
-
-char * gdttf(gdImage *im, int *brect, int fg, char *fontname,
- double ptsize, double angle, int x, int y, char *str);
-
diff --git a/ext/gd/libgd/README b/ext/gd/libgd/README
deleted file mode 100644
index c0333ef5c2..0000000000
--- a/ext/gd/libgd/README
+++ /dev/null
@@ -1,72 +0,0 @@
-This directory contains the GD library available from
-http://www.boutell.com/gd/
-
-The inclusion of this library with PHP is in response to the
-popularity of the GD extension and the GD library itself. We felt
-it would be worthwhile to make sure everyone had access to the
-features of GD and by bundling GD with PHP we have a known target to
-work against.
-
-In addition to the above, a number of motivated PHP hackers have
-expressed an interest in extending the functionality of the PHP-GD
-combination. By putting a version of GD into PHP CVS we have provided
-a sandbox for them to throw sand at each other in. Any and all
-improvements we make to the GD library will be contributed back to the
-original maintainers of this library at boutell.com.
-
-The following statement is from the original GD package:
-
- Credits and license terms
-
- In order to resolve any possible confusion regarding the authorship of
- gd, the following copyright statement covers all of the authors who
- have required such a statement. _If you are aware of any oversights in
- this copyright notice, please contact Thomas Boutell who will be
- pleased to correct them._
-
-COPYRIGHT STATEMENT FOLLOWS THIS LINE
-
- Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
- by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by
- the National Institutes of Health.
-
- Portions copyright 1996, 1997, 1998, 1999, 2000, 2001 by
- Boutell.Com, Inc.
-
- Portions relating to GD2 format copyright 1999, 2000 Philip Warner.
-
- Portions relating to PNG copyright 1999, 2000 Greg Roelofs.
-
- Portions relating to libttf copyright 1999, 2000 John Ellson
- (ellson@lucent.com).
-
- Portions relating to JPEG and to color quantization copyright 2000,
- Doug Becker and copyright (C) 1994-1998, Thomas G. Lane. This
- software is based in part on the work of the Independent JPEG
- Group. See the file README-JPEG.TXT for more information.
-
- Portions relating to WBMP copyright 2000 Maurice Szmurlo and Johan
- Van den Brande.
-
- _Permission has been granted to copy, distribute and modify gd in
- any context without fee, including a commercial application,
- provided that this notice is present in user-accessible supporting
- documentation._
-
- This does not affect your ownership of the derived work itself, and
- the intent is to assure proper credit for the authors of gd, not to
- interfere with your productive use of gd. If you have questions,
- ask. "Derived works" includes all programs that utilize the
- library. Credit must be given in user-accessible documentation.
-
- _This software is provided "AS IS."_ The copyright holders disclaim
- all warranties, either express or implied, including but not
- limited to implied warranties of merchantability and fitness for a
- particular purpose, with respect to this code and accompanying
- documentation.
-
- Although their code does not appear in gd 2.0.1, the authors wish
- to thank David Koblas, David Rowley, and Hutchison Avenue Software
- Corporation for their prior contributions.
-
-END OF COPYRIGHT STATEMENT
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
deleted file mode 100644
index d2e102e086..0000000000
--- a/ext/gd/libgd/gd.c
+++ /dev/null
@@ -1,2545 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <zlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef _OSD_POSIX /* BS2000 uses the EBCDIC char set instead of ASCII */
-#define CHARSET_EBCDIC
-#define __attribute__(any) /*nothing */
-#endif
-/*_OSD_POSIX*/
-
-#ifndef CHARSET_EBCDIC
-#define ASC(ch) ch
-#else /*CHARSET_EBCDIC */
-#define ASC(ch) gd_toascii[(unsigned char)ch]
-static const unsigned char gd_toascii[256] =
-{
-/*00 */ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
- 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................ */
-/*10 */ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................ */
-/*20 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................ */
-/*30 */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................ */
-/*40 */ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
- 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+| */
-/*50 */ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);. */
-/*60 */ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
- 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
-/*-/........^,%_>?*/
-/*70 */ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
- 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'=" */
-/*80 */ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi...... */
-/*90 */ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr...... */
-/*a0 */ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz...... */
-/*b0 */ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
- 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\].. */
-/*c0 */ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI...... */
-/*d0 */ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR...... */
-/*e0 */ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ...... */
-/*f0 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~ */
-};
-#endif /*CHARSET_EBCDIC */
-
-extern int gdCosT[];
-extern int gdSinT[];
-
-static void gdImageBrushApply (gdImagePtr im, int x, int y);
-static void gdImageTileApply (gdImagePtr im, int x, int y);
-
-gdImagePtr
-gdImageCreate (int sx, int sy)
-{
- int i;
- gdImagePtr im;
- im = (gdImage *) gdMalloc (sizeof (gdImage));
- memset (im, 0, sizeof (gdImage));
- /* Row-major ever since gd 1.3 */
- im->pixels = (unsigned char **) gdMalloc (sizeof (unsigned char *) * sy);
- im->polyInts = 0;
- im->polyAllocated = 0;
- im->brush = 0;
- im->tile = 0;
- im->style = 0;
- for (i = 0; (i < sy); i++)
- {
- /* Row-major ever since gd 1.3 */
- im->pixels[i] = (unsigned char *) gdCalloc (
- sx, sizeof (unsigned char));
- }
- im->sx = sx;
- im->sy = sy;
- im->colorsTotal = 0;
- im->transparent = (-1);
- im->interlace = 0;
- im->thick = 1;
- for (i = 0; (i < gdMaxColors); i++)
- {
- im->open[i] = 1;
- im->red[i] = 0;
- im->green[i] = 0;
- im->blue[i] = 0;
- };
- im->trueColor = 0;
- im->tpixels = 0;
- return im;
-}
-
-gdImagePtr
-gdImageCreateTrueColor (int sx, int sy)
-{
- int i;
- gdImagePtr im;
- im = (gdImage *) gdMalloc (sizeof (gdImage));
- memset (im, 0, sizeof (gdImage));
- im->tpixels = (int **) gdMalloc (sizeof (int *) * sy);
- im->polyInts = 0;
- im->polyAllocated = 0;
- im->brush = 0;
- im->tile = 0;
- im->style = 0;
- for (i = 0; (i < sy); i++)
- {
- im->tpixels[i] = (int *) gdCalloc (
- sx, sizeof (int));
- }
- im->sx = sx;
- im->sy = sy;
- im->transparent = (-1);
- im->interlace = 0;
- im->trueColor = 1;
- im->saveAlphaFlag = 1;
- im->alphaBlendingFlag = 0;
- im->thick = 1;
- return im;
-}
-
-void
-gdImageDestroy (gdImagePtr im)
-{
- int i;
- if (im->pixels)
- {
- for (i = 0; (i < im->sy); i++)
- {
- gdFree (im->pixels[i]);
- }
- gdFree (im->pixels);
- }
- if (im->tpixels)
- {
- for (i = 0; (i < im->sy); i++)
- {
- gdFree (im->tpixels[i]);
- }
- gdFree (im->tpixels);
- }
- if (im->polyInts)
- {
- gdFree (im->polyInts);
- }
- if (im->style)
- {
- gdFree (im->style);
- }
- gdFree (im);
-}
-
-int
-gdImageColorClosest (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorClosestAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int
-gdImageColorClosestAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- long rd, gd, bd, ad;
- int ct = (-1);
- int first = 1;
- long mindist = 0;
- if (im->trueColor)
- {
- return gdTrueColorAlpha (r, g, b, a);
- }
- for (i = 0; (i < (im->colorsTotal)); i++)
- {
- long dist;
- if (im->open[i])
- {
- continue;
- }
- rd = (im->red[i] - r);
- gd = (im->green[i] - g);
- bd = (im->blue[i] - b);
- ad = (im->blue[i] - b);
- dist = rd * rd + gd * gd + bd * bd + ad * ad;
- if (first || (dist < mindist))
- {
- mindist = dist;
- ct = i;
- first = 0;
- }
- }
- return ct;
-}
-
-/* This code is taken from http://www.acm.org/jgt/papers/SmithLyons96/hwb_rgb.html, an article
- * on colour conversion to/from RBG and HWB colour systems.
- * It has been modified to return the converted value as a * parameter.
- */
-
-#define RETURN_HWB(h, w, b) {HWB->H = h; HWB->W = w; HWB->B = b; return HWB;}
-#define RETURN_RGB(r, g, b) {RGB->R = r; RGB->G = g; RGB->B = b; return RGB;}
-#define HWB_UNDEFINED -1
-#define SETUP_RGB(s, r, g, b) {s.R = r/255.0; s.G = g/255.0; s.B = b/255.0;}
-
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#define MIN3(a,b,c) ((a)<(b)?(MIN(a,c)):(MIN(b,c)))
-#define MAX(a,b) ((a)<(b)?(b):(a))
-#define MAX3(a,b,c) ((a)<(b)?(MAX(b,c)):(MAX(a,c)))
-
-
-/*
- * Theoretically, hue 0 (pure red) is identical to hue 6 in these transforms. Pure
- * red always maps to 6 in this implementation. Therefore UNDEFINED can be
- * defined as 0 in situations where only unsigned numbers are desired.
- */
-typedef struct
-{
- float R, G, B;
-}
-RGBType;
-typedef struct
- {
- float H, W, B;
- }
-HWBType;
-
-static HWBType *
-RGB_to_HWB (RGBType RGB, HWBType * HWB)
-{
-
- /*
- * RGB are each on [0, 1]. W and B are returned on [0, 1] and H is
- * returned on [0, 6]. Exception: H is returned UNDEFINED if W == 1 - B.
- */
-
- float R = RGB.R, G = RGB.G, B = RGB.B, w, v, b, f;
- int i;
-
- w = MIN3 (R, G, B);
- v = MAX3 (R, G, B);
- b = 1 - v;
- if (v == w)
- RETURN_HWB (HWB_UNDEFINED, w, b);
- f = (R == w) ? G - B : ((G == w) ? B - R : R - G);
- i = (R == w) ? 3 : ((G == w) ? 5 : 1);
- RETURN_HWB (i - f / (v - w), w, b);
-
-}
-
-static float
-HWB_Diff (int r1, int g1, int b1, int r2, int g2, int b2)
-{
- RGBType RGB1, RGB2;
- HWBType HWB1, HWB2;
- float diff;
-
- SETUP_RGB (RGB1, r1, g1, b1);
- SETUP_RGB (RGB2, r2, g2, b2);
-
- RGB_to_HWB (RGB1, &HWB1);
- RGB_to_HWB (RGB2, &HWB2);
-
- /*
- * I made this bit up; it seems to produce OK results, and it is certainly
- * more visually correct than the current RGB metric. (PJW)
- */
-
- if ((HWB1.H == HWB_UNDEFINED) || (HWB2.H == HWB_UNDEFINED))
- {
- diff = 0; /* Undefined hues always match... */
- }
- else
- {
- diff = abs (HWB1.H - HWB2.H);
- if (diff > 3)
- {
- diff = 6 - diff; /* Remember, it's a colour circle */
- }
- }
-
- diff = diff * diff + (HWB1.W - HWB2.W) * (HWB1.W - HWB2.W) + (HWB1.B - HWB2.B) * (HWB1.B - HWB2.B);
-
- return diff;
-}
-
-
-/*
- * This is not actually used, but is here for completeness, in case someone wants to
- * use the HWB stuff for anything else...
- */
-static RGBType *
-HWB_to_RGB (HWBType HWB, RGBType * RGB)
-{
-
- /*
- * H is given on [0, 6] or UNDEFINED. W and B are given on [0, 1].
- * RGB are each returned on [0, 1].
- */
-
- float h = HWB.H, w = HWB.W, b = HWB.B, v, n, f;
- int i;
-
- v = 1 - b;
- if (h == HWB_UNDEFINED)
- RETURN_RGB (v, v, v);
- i = floor (h);
- f = h - i;
- if (i & 1)
- f = 1 - f; /* if i is odd */
- n = w + f * (v - w); /* linear interpolation between w and v */
- switch (i)
- {
- case 6:
- case 0:
- RETURN_RGB (v, n, w);
- case 1:
- RETURN_RGB (n, v, w);
- case 2:
- RETURN_RGB (w, v, n);
- case 3:
- RETURN_RGB (w, n, v);
- case 4:
- RETURN_RGB (n, w, v);
- case 5:
- RETURN_RGB (v, w, n);
- }
-
- return RGB;
-
-}
-
-int
-gdImageColorClosestHWB (gdImagePtr im, int r, int g, int b)
-{
- int i;
- /* long rd, gd, bd; */
- int ct = (-1);
- int first = 1;
- float mindist = 0;
- if (im->trueColor)
- {
- return gdTrueColor (r, g, b);
- }
- for (i = 0; (i < (im->colorsTotal)); i++)
- {
- float dist;
- if (im->open[i])
- {
- continue;
- }
- dist = HWB_Diff (im->red[i], im->green[i], im->blue[i], r, g, b);
- if (first || (dist < mindist))
- {
- mindist = dist;
- ct = i;
- first = 0;
- }
- }
- return ct;
-}
-
-int
-gdImageColorExact (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorExactAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int
-gdImageColorExactAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- if (im->trueColor)
- {
- return gdTrueColorAlpha (r, g, b, a);
- }
- for (i = 0; (i < (im->colorsTotal)); i++)
- {
- if (im->open[i])
- {
- continue;
- }
- if ((im->red[i] == r) &&
- (im->green[i] == g) &&
- (im->blue[i] == b) &&
- (im->alpha[i] == a))
- {
- return i;
- }
- }
- return -1;
-}
-
-int
-gdImageColorAllocate (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorAllocateAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int
-gdImageColorAllocateAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- int ct = (-1);
- if (im->trueColor)
- {
- return gdTrueColorAlpha (r, g, b, a);
- }
- for (i = 0; (i < (im->colorsTotal)); i++)
- {
- if (im->open[i])
- {
- ct = i;
- break;
- }
- }
- if (ct == (-1))
- {
- ct = im->colorsTotal;
- if (ct == gdMaxColors)
- {
- return -1;
- }
- im->colorsTotal++;
- }
- im->red[ct] = r;
- im->green[ct] = g;
- im->blue[ct] = b;
- im->alpha[ct] = a;
- im->open[ct] = 0;
- return ct;
-}
-
-/*
- * gdImageColorResolve is an alternative for the code fragment:
- *
- * if ((color=gdImageColorExact(im,R,G,B)) < 0)
- * if ((color=gdImageColorAllocate(im,R,G,B)) < 0)
- * color=gdImageColorClosest(im,R,G,B);
- *
- * in a single function. Its advantage is that it is guaranteed to
- * return a color index in one search over the color table.
- */
-
-int
-gdImageColorResolve (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorResolveAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int
-gdImageColorResolveAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int c;
- int ct = -1;
- int op = -1;
- long rd, gd, bd, ad, dist;
- long mindist = 4 * 255 * 255; /* init to max poss dist */
- if (im->trueColor)
- {
- return gdTrueColorAlpha (r, g, b, a);
- }
-
- for (c = 0; c < im->colorsTotal; c++)
- {
- if (im->open[c])
- {
- op = c; /* Save open slot */
- continue; /* Color not in use */
- }
- rd = (long) (im->red[c] - r);
- gd = (long) (im->green[c] - g);
- bd = (long) (im->blue[c] - b);
- ad = (long) (im->alpha[c] - a);
- dist = rd * rd + gd * gd + bd * bd + ad * ad;
- if (dist < mindist)
- {
- if (dist == 0)
- {
- return c; /* Return exact match color */
- }
- mindist = dist;
- ct = c;
- }
- }
- /* no exact match. We now know closest, but first try to allocate exact */
- if (op == -1)
- {
- op = im->colorsTotal;
- if (op == gdMaxColors)
- { /* No room for more colors */
- return ct; /* Return closest available color */
- }
- im->colorsTotal++;
- }
- im->red[op] = r;
- im->green[op] = g;
- im->blue[op] = b;
- im->alpha[op] = a;
- im->open[op] = 0;
- return op; /* Return newly allocated color */
-}
-
-void
-gdImageColorDeallocate (gdImagePtr im, int color)
-{
- if (im->trueColor)
- {
- return;
- }
- /* Mark it open. */
- im->open[color] = 1;
-}
-
-void
-gdImageColorTransparent (gdImagePtr im, int color)
-{
- if (!im->trueColor)
- {
- if (im->transparent != -1)
- {
- im->alpha[im->transparent] = gdAlphaOpaque;
- }
- if (color != -1)
- {
- im->alpha[color] = gdAlphaTransparent;
- }
- }
- im->transparent = color;
-}
-
-void
-gdImagePaletteCopy (gdImagePtr to, gdImagePtr from)
-{
- int i;
- int x, y, p;
- int xlate[256];
- if (to->trueColor)
- {
- return;
- }
- if (from->trueColor)
- {
- return;
- }
-
- for (i = 0; i < 256; i++)
- {
- xlate[i] = -1;
- };
-
- for (x = 0; x < (to->sx); x++)
- {
- for (y = 0; y < (to->sy); y++)
- {
- p = gdImageGetPixel (to, x, y);
- if (xlate[p] == -1)
- {
- /* This ought to use HWB, but we don't have an alpha-aware
- version of that yet. */
- xlate[p] = gdImageColorClosestAlpha (from, to->red[p], to->green[p], to->blue[p], to->alpha[p]);
- /*printf("Mapping %d (%d, %d, %d, %d) to %d (%d, %d, %d, %d)\n", */
- /* p, to->red[p], to->green[p], to->blue[p], to->alpha[p], */
- /* xlate[p], from->red[xlate[p]], from->green[xlate[p]], from->blue[xlate[p]], from->alpha[xlate[p]]); */
- };
- gdImageSetPixel (to, x, y, xlate[p]);
- };
- };
-
- for (i = 0; (i < (from->colorsTotal)); i++)
- {
- /*printf("Copying color %d (%d, %d, %d, %d)\n", i, from->red[i], from->blue[i], from->green[i], from->alpha[i]); */
- to->red[i] = from->red[i];
- to->blue[i] = from->blue[i];
- to->green[i] = from->green[i];
- to->alpha[i] = from->alpha[i];
- to->open[i] = 0;
- };
-
- for (i = from->colorsTotal; (i < to->colorsTotal); i++)
- {
- to->open[i] = 1;
- };
-
- to->colorsTotal = from->colorsTotal;
-
-}
-
-void
-gdImageSetPixel (gdImagePtr im, int x, int y, int color)
-{
- int p;
- switch (color)
- {
- case gdStyled:
- if (!im->style)
- {
- /* Refuse to draw if no style is set. */
- return;
- }
- else
- {
- p = im->style[im->stylePos++];
- }
- if (p != (gdTransparent))
- {
- gdImageSetPixel (im, x, y, p);
- }
- im->stylePos = im->stylePos % im->styleLength;
- break;
- case gdStyledBrushed:
- if (!im->style)
- {
- /* Refuse to draw if no style is set. */
- return;
- }
- p = im->style[im->stylePos++];
- if ((p != gdTransparent) && (p != 0))
- {
- gdImageSetPixel (im, x, y, gdBrushed);
- }
- im->stylePos = im->stylePos % im->styleLength;
- break;
- case gdBrushed:
- gdImageBrushApply (im, x, y);
- break;
- case gdTiled:
- gdImageTileApply (im, x, y);
- break;
- default:
- if (gdImageBoundsSafe (im, x, y))
- {
- if (im->trueColor)
- {
- if (im->alphaBlendingFlag)
- {
- im->tpixels[y][x] =
- gdAlphaBlend (im->tpixels[y][x],
- color);
- }
- else
- {
- im->tpixels[y][x] = color;
- }
- }
- else
- {
- im->pixels[y][x] = color;
- }
- }
- break;
- }
-}
-
-static void
-gdImageBrushApply (gdImagePtr im, int x, int y)
-{
- int lx, ly;
- int hy;
- int hx;
- int x1, y1, x2, y2;
- int srcx, srcy;
- if (!im->brush)
- {
- return;
- }
- hy = gdImageSY (im->brush) / 2;
- y1 = y - hy;
- y2 = y1 + gdImageSY (im->brush);
- hx = gdImageSX (im->brush) / 2;
- x1 = x - hx;
- x2 = x1 + gdImageSX (im->brush);
- srcy = 0;
- if (im->trueColor)
- {
- for (ly = y1; (ly < y2); ly++)
- {
- srcx = 0;
- for (lx = x1; (lx < x2); lx++)
- {
- int p;
- p = gdImageGetTrueColorPixel (
- im->brush, srcx, srcy);
- gdImageSetPixel (im, lx, ly,
- p);
- srcx++;
- }
- srcy++;
- }
- }
- else
- {
- for (ly = y1; (ly < y2); ly++)
- {
- srcx = 0;
- for (lx = x1; (lx < x2); lx++)
- {
- int p;
- p = gdImageGetPixel (im->brush, srcx, srcy);
- /* Allow for non-square brushes! */
- if (p != gdImageGetTransparent (im->brush))
- {
- /* Truecolor brush. Very slow
- on a palette destination. */
- if (im->brush->trueColor)
- {
- gdImageSetPixel (im, lx, ly,
- gdImageColorResolveAlpha (
- im,
- gdTrueColorGetRed (p),
- gdTrueColorGetGreen (p),
- gdTrueColorGetBlue (p),
- gdTrueColorGetAlpha (p)));
- }
- else
- {
- gdImageSetPixel (im, lx, ly,
- im->brushColorMap[p]);
- }
- }
- srcx++;
- }
- srcy++;
- }
- }
-}
-
-static void
-gdImageTileApply (gdImagePtr im, int x, int y)
-{
- int srcx, srcy;
- int p;
- if (!im->tile)
- {
- return;
- }
- srcx = x % gdImageSX (im->tile);
- srcy = y % gdImageSY (im->tile);
- if (im->trueColor)
- {
- p = gdImageGetTrueColorPixel (im->tile, srcx, srcy);
- gdImageSetPixel (im, x, y, p);
- }
- else
- {
- /* Allow for transparency */
- if (p != gdImageGetTransparent (im->tile))
- {
- if (im->tile->trueColor)
- {
- /* Truecolor tile. Very slow
- on a palette destination. */
- gdImageSetPixel (im, x, y,
- gdImageColorResolveAlpha (
- im,
- gdTrueColorGetRed (p),
- gdTrueColorGetGreen (p),
- gdTrueColorGetBlue (p),
- gdTrueColorGetAlpha (p)));
- }
- else
- {
- gdImageSetPixel (im, x, y,
- im->tileColorMap[p]);
- }
- }
- }
-}
-
-int
-gdImageGetPixel (gdImagePtr im, int x, int y)
-{
- if (gdImageBoundsSafe (im, x, y))
- {
- if (im->trueColor)
- {
- return im->tpixels[y][x];
- }
- else
- {
- return im->pixels[y][x];
- }
- }
- else
- {
- return 0;
- }
-}
-
-int
-gdImageGetTrueColorPixel (gdImagePtr im, int x, int y)
-{
- int p = gdImageGetPixel (im, x, y);
- if (!im->trueColor)
- {
- return gdTrueColorAlpha (im->red[p], im->green[p], im->blue[p],
- (im->transparent == p) ? gdAlphaTransparent :
- gdAlphaOpaque);
- }
- else
- {
- return p;
- }
-}
-
-/* Bresenham as presented in Foley & Van Dam */
-void
-gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
- int wid;
- int w, wstart;
- int thick = im->thick;
- dx = abs (x2 - x1);
- dy = abs (y2 - y1);
- if (dy <= dx)
- {
- /* More-or-less horizontal. use wid for vertical stroke */
- wid = thick * cos (atan2 (dy, dx));
- if (wid == 0)
- wid = 1;
-
- d = 2 * dy - dx;
- incr1 = 2 * dy;
- incr2 = 2 * (dy - dx);
- if (x1 > x2)
- {
- x = x2;
- y = y2;
- ydirflag = (-1);
- xend = x1;
- }
- else
- {
- x = x1;
- y = y1;
- ydirflag = 1;
- xend = x2;
- }
-
- /* Set up line thickness */
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
-
- if (((y2 - y1) * ydirflag) > 0)
- {
- while (x < xend)
- {
- x++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- y++;
- d += incr2;
- }
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
- }
- }
- else
- {
- while (x < xend)
- {
- x++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- y--;
- d += incr2;
- }
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
- }
- }
- }
- else
- {
- /* More-or-less vertical. use wid for horizontal stroke */
- wid = thick * sin (atan2 (dy, dx));
- if (wid == 0)
- wid = 1;
-
- d = 2 * dx - dy;
- incr1 = 2 * dx;
- incr2 = 2 * (dx - dy);
- if (y1 > y2)
- {
- y = y2;
- x = x2;
- yend = y1;
- xdirflag = (-1);
- }
- else
- {
- y = y1;
- x = x1;
- yend = y2;
- xdirflag = 1;
- }
-
- /* Set up line thickness */
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
-
- if (((x2 - x1) * xdirflag) > 0)
- {
- while (y < yend)
- {
- y++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- x++;
- d += incr2;
- }
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
- }
- }
- else
- {
- while (y < yend)
- {
- y++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- x--;
- d += incr2;
- }
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
- }
- }
- }
-}
-static void dashedSet (gdImagePtr im, int x, int y, int color,
- int *onP, int *dashStepP, int wid, int vert);
-
-void
-gdImageDashedLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
- int dashStep = 0;
- int on = 1;
- int wid;
- int w, wstart, vert;
- int thick = im->thick;
-
- dx = abs (x2 - x1);
- dy = abs (y2 - y1);
- if (dy <= dx)
- {
- /* More-or-less horizontal. use wid for vertical stroke */
- wid = thick * sin (atan2 (dy, dx));
- vert = 1;
-
- d = 2 * dy - dx;
- incr1 = 2 * dy;
- incr2 = 2 * (dy - dx);
- if (x1 > x2)
- {
- x = x2;
- y = y2;
- ydirflag = (-1);
- xend = x1;
- }
- else
- {
- x = x1;
- y = y1;
- ydirflag = 1;
- xend = x2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- if (((y2 - y1) * ydirflag) > 0)
- {
- while (x < xend)
- {
- x++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- y++;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- else
- {
- while (x < xend)
- {
- x++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- y--;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- }
- else
- {
- /* More-or-less vertical. use wid for horizontal stroke */
- wid = thick * sin (atan2 (dy, dx));
- vert = 0;
-
- d = 2 * dx - dy;
- incr1 = 2 * dx;
- incr2 = 2 * (dx - dy);
- if (y1 > y2)
- {
- y = y2;
- x = x2;
- yend = y1;
- xdirflag = (-1);
- }
- else
- {
- y = y1;
- x = x1;
- yend = y2;
- xdirflag = 1;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- if (((x2 - x1) * xdirflag) > 0)
- {
- while (y < yend)
- {
- y++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- x++;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- else
- {
- while (y < yend)
- {
- y++;
- if (d < 0)
- {
- d += incr1;
- }
- else
- {
- x--;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- }
-}
-
-static void
-dashedSet (gdImagePtr im, int x, int y, int color,
- int *onP, int *dashStepP, int wid, int vert)
-{
- int dashStep = *dashStepP;
- int on = *onP;
- int w, wstart;
-
- dashStep++;
- if (dashStep == gdDashSize)
- {
- dashStep = 0;
- on = !on;
- }
- if (on)
- {
- if (vert)
- {
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
- }
- else
- {
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
- }
- }
- *dashStepP = dashStep;
- *onP = on;
-}
-
-int
-gdImageBoundsSafe (gdImagePtr im, int x, int y)
-{
- return (!(((y < 0) || (y >= im->sy)) ||
- ((x < 0) || (x >= im->sx))));
-}
-
-void
-gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y,
- int c, int color)
-{
- int cx, cy;
- int px, py;
- int fline;
- cx = 0;
- cy = 0;
-#ifdef CHARSET_EBCDIC
- c = ASC (c);
-#endif /*CHARSET_EBCDIC */
- if ((c < f->offset) || (c >= (f->offset + f->nchars)))
- {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; (py < (y + f->h)); py++)
- {
- for (px = x; (px < (x + f->w)); px++)
- {
- if (f->data[fline + cy * f->w + cx])
- {
- gdImageSetPixel (im, px, py, color);
- }
- cx++;
- }
- cx = 0;
- cy++;
- }
-}
-
-void
-gdImageCharUp (gdImagePtr im, gdFontPtr f,
- int x, int y, int c, int color)
-{
- int cx, cy;
- int px, py;
- int fline;
- cx = 0;
- cy = 0;
-#ifdef CHARSET_EBCDIC
- c = ASC (c);
-#endif /*CHARSET_EBCDIC */
- if ((c < f->offset) || (c >= (f->offset + f->nchars)))
- {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; (py > (y - f->w)); py--)
- {
- for (px = x; (px < (x + f->h)); px++)
- {
- if (f->data[fline + cy * f->w + cx])
- {
- gdImageSetPixel (im, px, py, color);
- }
- cy++;
- }
- cy = 0;
- cx++;
- }
-}
-
-void
-gdImageString (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned char *s, int color)
-{
- int i;
- int l;
- l = strlen ((char *) s);
- for (i = 0; (i < l); i++)
- {
- gdImageChar (im, f, x, y, s[i], color);
- x += f->w;
- }
-}
-
-void
-gdImageStringUp (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned char *s, int color)
-{
- int i;
- int l;
- l = strlen ((char *) s);
- for (i = 0; (i < l); i++)
- {
- gdImageCharUp (im, f, x, y, s[i], color);
- y -= f->w;
- }
-}
-
-static int strlen16 (unsigned short *s);
-
-void
-gdImageString16 (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned short *s, int color)
-{
- int i;
- int l;
- l = strlen16 (s);
- for (i = 0; (i < l); i++)
- {
- gdImageChar (im, f, x, y, s[i], color);
- x += f->w;
- }
-}
-
-void
-gdImageStringUp16 (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned short *s, int color)
-{
- int i;
- int l;
- l = strlen16 (s);
- for (i = 0; (i < l); i++)
- {
- gdImageCharUp (im, f, x, y, s[i], color);
- y -= f->w;
- }
-}
-
-static int
-strlen16 (unsigned short *s)
-{
- int len = 0;
- while (*s)
- {
- s++;
- len++;
- }
- return len;
-}
-
-#ifndef HAVE_LSQRT
-/* If you don't have a nice square root function for longs, you can use
- ** this hack
- */
-long
-lsqrt (long n)
-{
- long result = (long) sqrt ((double) n);
- return result;
-}
-#endif
-
-/* s and e are integers modulo 360 (degrees), with 0 degrees
- being the rightmost extreme and degrees changing clockwise.
- cx and cy are the center in pixels; w and h are the horizontal
- and vertical diameter in pixels. Nice interface, but slow.
- See gd_arc_f_buggy.c for a better version that doesn't
- seem to be bug-free yet. */
-
-void
-gdImageArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color)
-{
- gdImageFilledArc (im, cx, cy, w, h, s, e, color, gdNoFill);
-}
-
-void
-gdImageFilledArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style)
-{
- gdPoint pts[3];
- int i;
- int lx = 0, ly = 0;
- int fx, fy;
- int w2, h2;
- w2 = w / 2;
- h2 = h / 2;
- while (e < s)
- {
- e += 360;
- }
- for (i = s; (i <= e); i++)
- {
- int x, y;
- x = ((long) gdCosT[i % 360] * (long) w2 / 1024) + cx;
- y = ((long) gdSinT[i % 360] * (long) h2 / 1024) + cy;
- if (i != s)
- {
- if (!(style & gdChord))
- {
- if (style & gdNoFill)
- {
- gdImageLine (im, lx, ly, x, y, color);
- }
- else
- {
- /* This is expensive! */
- pts[0].x = lx;
- pts[0].y = ly;
- pts[1].x = x;
- pts[1].y = y;
- pts[2].x = cx;
- pts[2].y = cy;
- gdImageFilledPolygon (im, pts, 3, color);
- }
- }
- }
- else
- {
- fx = x;
- fy = y;
- }
- lx = x;
- ly = y;
- }
- if (style & gdChord)
- {
- if (style & gdNoFill)
- {
- if (style & gdEdged)
- {
- gdImageLine (im, cx, cy, lx, ly, color);
- gdImageLine (im, cx, cy, fx, fy, color);
- }
- gdImageLine (im, fx, fy, lx, ly, color);
- }
- else
- {
- pts[0].x = fx;
- pts[0].y = fy;
- pts[1].x = lx;
- pts[1].y = ly;
- pts[2].x = cx;
- pts[2].y = cy;
- gdImageFilledPolygon (im, pts, 3, color);
- }
- }
- else
- {
- if (style & gdNoFill)
- {
- if (style & gdEdged)
- {
- gdImageLine (im, cx, cy, lx, ly, color);
- gdImageLine (im, cx, cy, fx, fy, color);
- }
- }
- }
-}
-
-void
-gdImageFilledEllipse (gdImagePtr im, int cx, int cy, int w, int h, int color)
-{
- gdImageFilledArc (im, cx, cy, w, h, 0, 360, color, gdPie);
-}
-
-void
-gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
-{
- int lastBorder;
- /* Seek left */
- int leftLimit, rightLimit;
- int i;
- leftLimit = (-1);
- if (border < 0)
- {
- /* Refuse to fill to a non-solid border */
- return;
- }
- for (i = x; (i >= 0); i--)
- {
- if (gdImageGetPixel (im, i, y) == border)
- {
- break;
- }
- gdImageSetPixel (im, i, y, color);
- leftLimit = i;
- }
- if (leftLimit == (-1))
- {
- return;
- }
- /* Seek right */
- rightLimit = x;
- for (i = (x + 1); (i < im->sx); i++)
- {
- if (gdImageGetPixel (im, i, y) == border)
- {
- break;
- }
- gdImageSetPixel (im, i, y, color);
- rightLimit = i;
- }
- /* Look at lines above and below and start paints */
- /* Above */
- if (y > 0)
- {
- lastBorder = 1;
- for (i = leftLimit; (i <= rightLimit); i++)
- {
- int c;
- c = gdImageGetPixel (im, i, y - 1);
- if (lastBorder)
- {
- if ((c != border) && (c != color))
- {
- gdImageFillToBorder (im, i, y - 1,
- border, color);
- lastBorder = 0;
- }
- }
- else if ((c == border) || (c == color))
- {
- lastBorder = 1;
- }
- }
- }
- /* Below */
- if (y < ((im->sy) - 1))
- {
- lastBorder = 1;
- for (i = leftLimit; (i <= rightLimit); i++)
- {
- int c;
- c = gdImageGetPixel (im, i, y + 1);
- if (lastBorder)
- {
- if ((c != border) && (c != color))
- {
- gdImageFillToBorder (im, i, y + 1,
- border, color);
- lastBorder = 0;
- }
- }
- else if ((c == border) || (c == color))
- {
- lastBorder = 1;
- }
- }
- }
-}
-
-void
-gdImageFill (gdImagePtr im, int x, int y, int color)
-{
- int lastBorder;
- int old;
- int leftLimit, rightLimit;
- int i;
- old = gdImageGetPixel (im, x, y);
- if (color == gdTiled)
- {
- /* Tile fill -- got to watch out! */
- int p, tileColor;
- int srcx, srcy;
- if (!im->tile)
- {
- return;
- }
- /* Refuse to flood-fill with a transparent pattern --
- I can't do it without allocating another image */
- if (gdImageGetTransparent (im->tile) != (-1))
- {
- return;
- }
- srcx = x % gdImageSX (im->tile);
- srcy = y % gdImageSY (im->tile);
- p = gdImageGetPixel (im->tile, srcx, srcy);
- if (im->trueColor)
- {
- tileColor = p;
- }
- else
- {
- if (im->tile->trueColor)
- {
- tileColor = gdImageColorResolveAlpha (im,
- gdTrueColorGetRed (p),
- gdTrueColorGetGreen (p),
- gdTrueColorGetBlue (p),
- gdTrueColorGetAlpha (p));
- }
- else
- {
- tileColor = im->tileColorMap[p];
- }
- }
- if (old == tileColor)
- {
- /* Nothing to be done */
- return;
- }
- }
- else
- {
- if (old == color)
- {
- /* Nothing to be done */
- return;
- }
- }
- /* Seek left */
- leftLimit = (-1);
- for (i = x; (i >= 0); i--)
- {
- if (gdImageGetPixel (im, i, y) != old)
- {
- break;
- }
- gdImageSetPixel (im, i, y, color);
- leftLimit = i;
- }
- if (leftLimit == (-1))
- {
- return;
- }
- /* Seek right */
- rightLimit = x;
- for (i = (x + 1); (i < im->sx); i++)
- {
- if (gdImageGetPixel (im, i, y) != old)
- {
- break;
- }
- gdImageSetPixel (im, i, y, color);
- rightLimit = i;
- }
- /* Look at lines above and below and start paints */
- /* Above */
- if (y > 0)
- {
- lastBorder = 1;
- for (i = leftLimit; (i <= rightLimit); i++)
- {
- int c;
- c = gdImageGetPixel (im, i, y - 1);
- if (lastBorder)
- {
- if (c == old)
- {
- gdImageFill (im, i, y - 1, color);
- lastBorder = 0;
- }
- }
- else if (c != old)
- {
- lastBorder = 1;
- }
- }
- }
- /* Below */
- if (y < ((im->sy) - 1))
- {
- lastBorder = 1;
- for (i = leftLimit; (i <= rightLimit); i++)
- {
- int c;
- c = gdImageGetPixel (im, i, y + 1);
- if (lastBorder)
- {
- if (c == old)
- {
- gdImageFill (im, i, y + 1, color);
- lastBorder = 0;
- }
- }
- else if (c != old)
- {
- lastBorder = 1;
- }
- }
- }
-}
-
-void
-gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int x1h = x1, x1v = x1, y1h = y1, y1v = y1, x2h = x2, x2v = x2, y2h = y2,
- y2v = y2;
- int thick = im->thick;
- if (thick > 1)
- {
- int half = thick / 2;
- int half1 = thick - half;
-
- if (y1 < y2)
- {
- y1v = y1h - half;
- y2v = y2h + half1 - 1;
- }
- else
- {
- y1v = y1h + half1 - 1;
- y2v = y2h - half;
- }
- }
-
- gdImageLine (im, x1h, y1h, x2h, y1h, color);
- gdImageLine (im, x1h, y2h, x2h, y2h, color);
- gdImageLine (im, x1v, y1v, x1v, y2v, color);
- gdImageLine (im, x2v, y1v, x2v, y2v, color);
-}
-
-void
-gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int x, y;
- for (y = y1; (y <= y2); y++)
- {
- for (x = x1; (x <= x2); x++)
- {
- gdImageSetPixel (im, x, y, color);
- }
- }
-}
-
-void
-gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h)
-{
- int c;
- int x, y;
- int tox, toy;
- int i;
- int colorMap[gdMaxColors];
- if (dst->trueColor)
- {
- /* 2.0: much easier when the destination is truecolor. */
-
- if (src->trueColor) {
- for (y = 0; (y < h); y++)
- {
- for (x = 0; (x < w); x++)
- {
- int c = gdImageGetTrueColorPixel (src, srcX + x,
- srcY + y);
- gdImageSetPixel (dst,
- dstX + x,
- dstY + y,
- c);
- }
- }
-
- }
- else {
- /* source is palette based */
- for (y = 0; (y < h); y++)
- {
- for (x = 0; (x < w); x++)
- {
- int c = gdImageGetPixel (src, srcX + x,
- srcY + y);
- if (c != src->transparent)
- {
- gdImageSetPixel (dst,
- dstX + x,
- dstY + y,
- gdTrueColor(src->red[c], src->green[c], src->blue[c]));
- }
- }
- }
- }
- return;
- }
- for (i = 0; (i < gdMaxColors); i++)
- {
- colorMap[i] = (-1);
- }
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++)
- {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++)
- {
- int nc;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c)
- {
- tox++;
- continue;
- }
- /* Have we established a mapping for this color? */
- if (colorMap[c] == (-1))
- {
- /* If it's the same image, mapping is trivial */
- if (dst == src)
- {
- nc = c;
- }
- else
- {
- /* Get best match possible. This
- function never returns error. */
- nc = gdImageColorResolveAlpha (
- dst,
- src->red[c], src->green[c],
- src->blue[c], src->alpha[c]);
- }
- colorMap[c] = nc;
- }
- gdImageSetPixel (dst, tox, toy, colorMap[c]);
- tox++;
- }
- toy++;
- }
-}
-
-/* This function is a substitute for real alpha channel operations,
- so it doesn't pay attention to the alpha channel. */
-void
-gdImageCopyMerge (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
-{
-
- int c, dc;
- int x, y;
- int tox, toy;
- int ncR, ncG, ncB;
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++)
- {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++)
- {
- int nc;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c)
- {
- tox++;
- continue;
- }
- /* If it's the same image, mapping is trivial */
- if (dst == src)
- {
- nc = c;
- }
- else
- {
- dc = gdImageGetPixel (dst, tox, toy);
-
- ncR = gdImageRed (src, c) * (pct / 100.0)
- + gdImageRed (dst, dc) * ((100 - pct) / 100.0);
- ncG = gdImageGreen (src, c) * (pct / 100.0)
- + gdImageGreen (dst, dc) * ((100 - pct) / 100.0);
- ncB = gdImageBlue (src, c) * (pct / 100.0)
- + gdImageBlue (dst, dc) * ((100 - pct) / 100.0);
-
- /* Find a reasonable color */
- nc = gdImageColorResolve (dst, ncR, ncG, ncB);
- }
- gdImageSetPixel (dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
-}
-
-/* This function is a substitute for real alpha channel operations,
- so it doesn't pay attention to the alpha channel. */
-void
-gdImageCopyMergeGray (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
-{
-
- int c, dc;
- int x, y;
- int tox, toy;
- int ncR, ncG, ncB;
- float g;
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++)
- {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++)
- {
- int nc;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c)
- {
- tox++;
- continue;
- }
- /* If it's the same image, mapping is trivial */
- if (dst == src)
- {
- nc = c;
- }
- else
- {
- dc = gdImageGetPixel (dst, tox, toy);
- g = 0.29900 * dst->red[dc]
- + 0.58700 * dst->green[dc]
- + 0.11400 * dst->blue[dc];
-
- ncR = gdImageRed (src, c) * (pct / 100.0)
- + gdImageRed (dst, dc) * g *
- ((100 - pct) / 100.0);
- ncG = gdImageGreen (src, c) * (pct / 100.0)
- + gdImageGreen (dst, dc) * g *
- ((100 - pct) / 100.0);
- ncB = gdImageBlue (src, c) * (pct / 100.0)
- + gdImageBlue (dst, dc) * g *
- ((100 - pct) / 100.0);
-
- /* First look for an exact match */
- nc = gdImageColorExact (dst, ncR, ncG, ncB);
- if (nc == (-1))
- {
- /* No, so try to allocate it */
- nc = gdImageColorAllocate (dst, ncR, ncG, ncB);
- /* If we're out of colors, go for the
- closest color */
- if (nc == (-1))
- {
- nc = gdImageColorClosest (dst, ncR, ncG, ncB);
- }
- }
- }
- gdImageSetPixel (dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
-}
-
-void
-gdImageCopyResized (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
-{
- int c;
- int x, y;
- int tox, toy;
- int ydest;
- int i;
- int colorMap[gdMaxColors];
- /* Stretch vectors */
- int *stx;
- int *sty;
- /* We only need to use floating point to determine the correct
- stretch vector for one line's worth. */
- double accum;
- stx = (int *) gdMalloc (sizeof (int) * srcW);
- sty = (int *) gdMalloc (sizeof (int) * srcH);
- accum = 0;
- for (i = 0; (i < srcW); i++)
- {
- int got;
- accum += (double) dstW / (double) srcW;
- got = (int) floor (accum);
- stx[i] = got;
- accum -= got;
- }
- accum = 0;
- for (i = 0; (i < srcH); i++)
- {
- int got;
- accum += (double) dstH / (double) srcH;
- got = (int) floor (accum);
- sty[i] = got;
- accum -= got;
- }
- for (i = 0; (i < gdMaxColors); i++)
- {
- colorMap[i] = (-1);
- }
- toy = dstY;
- for (y = srcY; (y < (srcY + srcH)); y++)
- {
- for (ydest = 0; (ydest < sty[y - srcY]); ydest++)
- {
- tox = dstX;
- for (x = srcX; (x < (srcX + srcW)); x++)
- {
- int nc;
- int mapTo;
- if (!stx[x - srcX])
- {
- continue;
- }
- if (dst->trueColor)
- {
- int d;
- mapTo = gdImageGetTrueColorPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == mapTo)
- {
- tox++;
- continue;
- }
- }
- else
- {
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c)
- {
- tox += stx[x - srcX];
- continue;
- }
- if (src->trueColor)
- {
- /* Remap to the palette available in the
- destination image. This is slow and
- works badly. */
- mapTo = gdImageColorResolveAlpha (dst,
- gdTrueColorGetRed (c),
- gdTrueColorGetGreen (c),
- gdTrueColorGetBlue (c),
- gdTrueColorGetAlpha (c));
- }
- else
- {
- /* Have we established a mapping for this color? */
- if (colorMap[c] == (-1))
- {
- /* If it's the same image, mapping is trivial */
- if (dst == src)
- {
- nc = c;
- }
- else
- {
- /* Find or create the best match */
- mapTo = gdImageColorResolveAlpha (dst,
- gdTrueColorGetRed (c),
- gdTrueColorGetGreen (c),
- gdTrueColorGetBlue (c),
- gdTrueColorGetAlpha (c));
- }
- colorMap[c] = nc;
- }
- mapTo = colorMap[c];
- }
- }
- for (i = 0; (i < stx[x - srcX]); i++)
- {
- gdImageSetPixel (dst, tox, toy, mapTo);
- tox++;
- }
- }
- toy++;
- }
- }
- gdFree (stx);
- gdFree (sty);
-}
-
-/* When gd 1.x was first created, floating point was to be avoided.
- These days it is often faster than table lookups or integer
- arithmetic. The routine below is shamelessly, gloriously
- floating point. TBB */
-
-void
-gdImageCopyResampled (gdImagePtr dst,
- gdImagePtr src,
- int dstX, int dstY,
- int srcX, int srcY,
- int dstW, int dstH,
- int srcW, int srcH)
-{
- int x, y;
- float sx, sy;
- if (!dst->trueColor)
- {
- gdImageCopyResized (
- dst, src, dstX, dstY, srcX, srcY, dstW, dstH,
- srcW, srcH);
- return;
- }
- for (y = dstY; (y < dstY + dstH); y++)
- {
- for (x = dstX; (x < dstX + dstW); x++)
- {
- int pd = gdImageGetPixel (dst, x, y);
- float sy1, sy2, sx1, sx2;
- float sx, sy;
- float spixels = 0;
- float red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0;
- sy1 = ((float) y - (float) dstY) * (float) srcH /
- (float) dstH;
- sy2 = ((float) (y + 1) - (float) dstY) * (float) srcH /
- (float) dstH;
- sy = sy1;
- do
- {
- float yportion;
- if (floor (sy) == floor (sy1))
- {
- yportion = 1.0 - (sy - floor (sy));
- if (yportion > sy2 - sy1)
- {
- yportion = sy2 - sy1;
- }
- sy = floor (sy);
- }
- else if (sy == floor (sy2))
- {
- yportion = sy2 - floor (sy2);
- }
- else
- {
- yportion = 1.0;
- }
- sx1 = ((float) x - (float) dstX) * (float) srcW /
- dstW;
- sx2 = ((float) (x + 1) - (float) dstX) * (float) srcW /
- dstW;
- sx = sx1;
- do
- {
- float xportion;
- float pcontribution;
- int p;
- if (floor (sx) == floor (sx1))
- {
- xportion = 1.0 - (sx - floor (sx));
- if (xportion > sx2 - sx1)
- {
- xportion = sx2 - sx1;
- }
- sx = floor (sx);
- }
- else if (sx == floor (sx2))
- {
- xportion = sx2 - floor (sx2);
- }
- else
- {
- xportion = 1.0;
- }
- pcontribution = xportion * yportion;
- p = gdImageGetTrueColorPixel (
- src,
- (int) sx + srcX,
- (int) sy + srcY);
- red += gdTrueColorGetRed (p) * pcontribution;
- green += gdTrueColorGetGreen (p) * pcontribution;
- blue += gdTrueColorGetBlue (p) * pcontribution;
- alpha += gdTrueColorGetAlpha (p) * pcontribution;
- spixels += xportion * yportion;
- sx += 1.0;
- }
- while (sx < sx2);
- sy += 1.0;
- }
- while (sy < sy2);
- if (spixels != 0.0)
- {
- red /= spixels;
- green /= spixels;
- blue /= spixels;
- alpha /= spixels;
- }
- /* Clamping to allow for rounding errors above */
- if (red > 255.0)
- {
- red = 255.0;
- }
- if (green > 255.0)
- {
- green = 255.0;
- }
- if (blue > 255.0)
- {
- blue = 255.0;
- }
- if (alpha > gdAlphaMax)
- {
- alpha = gdAlphaMax;
- }
- gdImageSetPixel (dst,
- x, y,
- gdTrueColorAlpha ((int) red,
- (int) green,
- (int) blue,
- (int) alpha));
- }
- }
-}
-
-gdImagePtr
-gdImageCreateFromXbm (FILE * fd)
-{
- gdImagePtr im;
- int bit;
- int w, h;
- int bytes;
- int ch;
- int i, x, y;
- char *sp;
- char s[161];
- if (!fgets (s, 160, fd))
- {
- return 0;
- }
- sp = &s[0];
- /* Skip #define */
- sp = strchr (sp, ' ');
- if (!sp)
- {
- return 0;
- }
- /* Skip width label */
- sp++;
- sp = strchr (sp, ' ');
- if (!sp)
- {
- return 0;
- }
- /* Get width */
- w = atoi (sp + 1);
- if (!w)
- {
- return 0;
- }
- if (!fgets (s, 160, fd))
- {
- return 0;
- }
- sp = s;
- /* Skip #define */
- sp = strchr (sp, ' ');
- if (!sp)
- {
- return 0;
- }
- /* Skip height label */
- sp++;
- sp = strchr (sp, ' ');
- if (!sp)
- {
- return 0;
- }
- /* Get height */
- h = atoi (sp + 1);
- if (!h)
- {
- return 0;
- }
- /* Skip declaration line */
- if (!fgets (s, 160, fd))
- {
- return 0;
- }
- bytes = (w * h / 8) + 1;
- im = gdImageCreate (w, h);
- gdImageColorAllocate (im, 255, 255, 255);
- gdImageColorAllocate (im, 0, 0, 0);
- x = 0;
- y = 0;
- for (i = 0; (i < bytes); i++)
- {
- char h[3];
- int b;
- /* Skip spaces, commas, CRs, 0x */
- while (1)
- {
- ch = getc (fd);
- if (ch == EOF)
- {
- goto fail;
- }
- if (ch == 'x')
- {
- break;
- }
- }
- /* Get hex value */
- ch = getc (fd);
- if (ch == EOF)
- {
- goto fail;
- }
- h[0] = ch;
- ch = getc (fd);
- if (ch == EOF)
- {
- goto fail;
- }
- h[1] = ch;
- h[2] = '\0';
- sscanf (h, "%x", &b);
- for (bit = 1; (bit <= 128); (bit = bit << 1))
- {
- gdImageSetPixel (im, x++, y, (b & bit) ? 1 : 0);
- if (x == im->sx)
- {
- x = 0;
- y++;
- if (y == im->sy)
- {
- return im;
- }
- /* Fix 8/8/95 */
- break;
- }
- }
- }
- /* Shouldn't happen */
- fprintf (stderr, "Error: bug in gdImageCreateFromXbm!\n");
- return 0;
-fail:
- gdImageDestroy (im);
- return 0;
-}
-
-void
-gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- int i;
- int lx, ly;
- if (!n)
- {
- return;
- }
- lx = p->x;
- ly = p->y;
- gdImageLine (im, lx, ly, p[n - 1].x, p[n - 1].y, c);
- for (i = 1; (i < n); i++)
- {
- p++;
- gdImageLine (im, lx, ly, p->x, p->y, c);
- lx = p->x;
- ly = p->y;
- }
-}
-
-int gdCompareInt (const void *a, const void *b);
-
-/* THANKS to Kirsten Schulz for the polygon fixes! */
-
-/* The intersection finding technique of this code could be improved */
-/* by remembering the previous intertersection, and by using the slope. */
-/* That could help to adjust intersections to produce a nice */
-/* interior_extrema. */
-
-void
-gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- int i;
- int y;
- int miny, maxy;
- int x1, y1;
- int x2, y2;
- int ind1, ind2;
- int ints;
- if (!n)
- {
- return;
- }
- if (!im->polyAllocated)
- {
- im->polyInts = (int *) gdMalloc (sizeof (int) * n);
- im->polyAllocated = n;
- }
- if (im->polyAllocated < n)
- {
- while (im->polyAllocated < n)
- {
- im->polyAllocated *= 2;
- }
- im->polyInts = (int *) gdRealloc (im->polyInts,
- sizeof (int) * im->polyAllocated);
- }
- miny = p[0].y;
- maxy = p[0].y;
- for (i = 1; (i < n); i++)
- {
- if (p[i].y < miny)
- {
- miny = p[i].y;
- }
- if (p[i].y > maxy)
- {
- maxy = p[i].y;
- }
- }
- /* Fix in 1.3: count a vertex only once */
- for (y = miny; (y <= maxy); y++)
- {
-/*1.4 int interLast = 0; */
-/* int dirLast = 0; */
-/* int interFirst = 1; */
- ints = 0;
- for (i = 0; (i < n); i++)
- {
- if (!i)
- {
- ind1 = n - 1;
- ind2 = 0;
- }
- else
- {
- ind1 = i - 1;
- ind2 = i;
- }
- y1 = p[ind1].y;
- y2 = p[ind2].y;
- if (y1 < y2)
- {
- x1 = p[ind1].x;
- x2 = p[ind2].x;
- }
- else if (y1 > y2)
- {
- y2 = p[ind1].y;
- y1 = p[ind2].y;
- x2 = p[ind1].x;
- x1 = p[ind2].x;
- }
- else
- {
- continue;
- }
- if ((y >= y1) && (y < y2))
- {
- im->polyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
- }
- else if ((y == maxy) && (y > y1) && (y <= y2))
- {
- im->polyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
- }
- }
- qsort (im->polyInts, ints, sizeof (int), gdCompareInt);
-
- for (i = 0; (i < (ints)); i += 2)
- {
- gdImageLine (im, im->polyInts[i], y,
- im->polyInts[i + 1], y, c);
- }
- }
-}
-
-int
-gdCompareInt (const void *a, const void *b)
-{
- return (*(const int *) a) - (*(const int *) b);
-}
-
-void
-gdImageSetStyle (gdImagePtr im, int *style, int noOfPixels)
-{
- if (im->style)
- {
- gdFree (im->style);
- }
- im->style = (int *)
- gdMalloc (sizeof (int) * noOfPixels);
- memcpy (im->style, style, sizeof (int) * noOfPixels);
- im->styleLength = noOfPixels;
- im->stylePos = 0;
-}
-
-void
-gdImageSetThickness (gdImagePtr im, int thickness)
-{
- im->thick = thickness;
-}
-
-void
-gdImageSetBrush (gdImagePtr im, gdImagePtr brush)
-{
- int i;
- im->brush = brush;
- if ((!im->trueColor) && (!im->brush->trueColor))
- {
- for (i = 0; (i < gdImageColorsTotal (brush)); i++)
- {
- int index;
- index = gdImageColorResolveAlpha (im,
- gdImageRed (brush, i),
- gdImageGreen (brush, i),
- gdImageBlue (brush, i),
- gdImageAlpha (brush, i));
- im->brushColorMap[i] = index;
- }
- }
-}
-
-void
-gdImageSetTile (gdImagePtr im, gdImagePtr tile)
-{
- int i;
- im->tile = tile;
- if ((!im->trueColor) && (!im->tile->trueColor))
- {
- for (i = 0; (i < gdImageColorsTotal (tile)); i++)
- {
- int index;
- index = gdImageColorResolveAlpha (im,
- gdImageRed (tile, i),
- gdImageGreen (tile, i),
- gdImageBlue (tile, i),
- gdImageAlpha (tile, i));
- im->tileColorMap[i] = index;
- }
- }
-}
-
-void
-gdImageInterlace (gdImagePtr im, int interlaceArg)
-{
- im->interlace = interlaceArg;
-}
-
-int
-gdImageCompare (gdImagePtr im1, gdImagePtr im2)
-{
- int x, y;
- int p1, p2;
- int cmpStatus = 0;
- int sx, sy;
-
- if (im1->interlace != im2->interlace)
- {
- cmpStatus |= GD_CMP_INTERLACE;
- }
-
- if (im1->transparent != im2->transparent)
- {
- cmpStatus |= GD_CMP_TRANSPARENT;
- }
-
- if (im1->trueColor != im2->trueColor)
- {
- cmpStatus |= GD_CMP_TRUECOLOR;
- }
-
- sx = im1->sx;
- if (im1->sx != im2->sx)
- {
- cmpStatus |= GD_CMP_SIZE_X + GD_CMP_IMAGE;
- if (im2->sx < im1->sx)
- {
- sx = im2->sx;
- }
- }
-
- sy = im1->sy;
- if (im1->sy != im2->sy)
- {
- cmpStatus |= GD_CMP_SIZE_Y + GD_CMP_IMAGE;
- if (im2->sy < im1->sy)
- {
- sy = im2->sy;
- }
- }
-
- if (im1->colorsTotal != im2->colorsTotal)
- {
- cmpStatus |= GD_CMP_NUM_COLORS;
- }
-
- for (y = 0; (y < sy); y++)
- {
- for (x = 0; (x < sx); x++)
- {
- p1 = im1->pixels[y][x];
- p2 = im2->pixels[y][x];
- if (gdImageRed (im1, p1) != gdImageRed (im2, p2))
- {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
- if (gdImageGreen (im1, p1) != gdImageGreen (im2, p2))
- {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
- if (gdImageBlue (im1, p1) != gdImageBlue (im2, p2))
- {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
-#if 0
- /* Soon we'll add alpha channel to palettes */
- if (gdImageAlpha (im1, p1) != gdImageAlpha (im2, p2))
- {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
-#endif
- }
- if (cmpStatus & GD_CMP_COLOR)
- {
- break;
- };
- }
-
- return cmpStatus;
-}
-
-int
-gdAlphaBlend (int dst, int src)
-{
- return (((((gdAlphaTransparent - gdTrueColorGetAlpha (src)) *
- gdTrueColorGetRed (src) / gdAlphaMax) +
- (gdTrueColorGetAlpha (src) *
- gdTrueColorGetRed (dst)) / gdAlphaMax) << 16) +
- ((((gdAlphaTransparent - gdTrueColorGetAlpha (src)) *
- gdTrueColorGetGreen (src) / gdAlphaMax) +
- (gdTrueColorGetAlpha (src) *
- gdTrueColorGetGreen (dst)) / gdAlphaMax) << 8) +
- (((gdAlphaTransparent - gdTrueColorGetAlpha (src)) *
- gdTrueColorGetBlue (src) / gdAlphaMax) +
- (gdTrueColorGetAlpha (src) *
- gdTrueColorGetBlue (dst)) / gdAlphaMax));
-}
-
-void
-gdImageAlphaBlending (gdImagePtr im, int alphaBlendingArg)
-{
- im->alphaBlendingFlag = alphaBlendingArg;
-}
-
-void
-gdImageSaveAlpha (gdImagePtr im, int saveAlphaArg)
-{
- im->saveAlphaFlag = saveAlphaArg;
-}
diff --git a/ext/gd/libgd/gd.h b/ext/gd/libgd/gd.h
deleted file mode 100644
index 8dfb301e02..0000000000
--- a/ext/gd/libgd/gd.h
+++ /dev/null
@@ -1,509 +0,0 @@
-#ifndef GD_H
-#define GD_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* default fontpath for unix systems */
-#define DEFAULT_FONTPATH "/usr/share/fonts/truetype"
-#define PATHSEPARATOR ":"
-
-/* gd.h: declarations file for the graphic-draw module.
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation. This software is provided "AS IS." Thomas Boutell and
- * Boutell.Com, Inc. disclaim all warranties, either express or implied,
- * including but not limited to implied warranties of merchantability and
- * fitness for a particular purpose, with respect to this code and accompanying
- * documentation. */
-
-/* stdio is needed for file I/O. */
-#include <stdio.h>
-#include "gd_io.h"
-
-/* The maximum number of palette entries in palette-based images.
- In the wonderful new world of gd 2.0, you can of course have
- many more colors when using truecolor mode. */
-
-#define gdMaxColors 256
-
-/* Image type. See functions below; you will not need to change
- the elements directly. Use the provided macros to
- access sx, sy, the color table, and colorsTotal for
- read-only purposes. */
-
-/* If 'truecolor' is set true, the image is truecolor;
- pixels are represented by integers, which
- must be 32 bits wide or more.
-
- True colors are repsented as follows:
-
- ARGB
-
- Where 'A' (alpha channel) occupies only the
- LOWER 7 BITS of the MSB. This very small
- loss of alpha channel resolution allows gd 2.x
- to keep backwards compatibility by allowing
- signed integers to be used to represent colors,
- and negative numbers to represent special cases,
- just as in gd 1.x. */
-
-#define gdAlphaMax 127
-#define gdAlphaOpaque 0
-#define gdAlphaTransparent 127
-#define gdRedMax 255
-#define gdGreenMax 255
-#define gdBlueMax 255
-#define gdTrueColorGetAlpha(c) (((c) & 0x7F000000) >> 24)
-#define gdTrueColorGetRed(c) (((c) & 0xFF0000) >> 16)
-#define gdTrueColorGetGreen(c) (((c) & 0x00FF00) >> 8)
-#define gdTrueColorGetBlue(c) ((c) & 0x0000FF)
-
-/* This function accepts truecolor pixel values only. The
- source color is composited with the destination color
- based on the alpha channel value of the source color.
- The resulting color is opaque. */
-
-int gdAlphaBlend(int dest, int src);
-
-typedef struct gdImageStruct {
- /* Palette-based image pixels */
- unsigned char ** pixels;
- int sx;
- int sy;
- /* These are valid in palette images only. See also
- 'alpha', which appears later in the structure to
- preserve binary backwards compatibility */
- int colorsTotal;
- int red[gdMaxColors];
- int green[gdMaxColors];
- int blue[gdMaxColors];
- int open[gdMaxColors];
- /* For backwards compatibility, this is set to the
- first palette entry with 100% transparency,
- and is also set and reset by the
- gdImageColorTransparent function. Newer
- applications can allocate palette entries
- with any desired level of transparency; however,
- bear in mind that many viewers, notably
- many web browsers, fail to implement
- full alpha channel for PNG and provide
- support for full opacity or transparency only. */
- int transparent;
- int *polyInts;
- int polyAllocated;
- struct gdImageStruct *brush;
- struct gdImageStruct *tile;
- int brushColorMap[gdMaxColors];
- int tileColorMap[gdMaxColors];
- int styleLength;
- int stylePos;
- int *style;
- int interlace;
- /* New in 2.0: thickness of line. Initialized to 1. */
- int thick;
- /* New in 2.0: alpha channel for palettes. Note that only
- Macintosh Internet Explorer and (possibly) Netscape 6
- really support multiple levels of transparency in
- palettes, to my knowledge, as of 2/15/01. Most
- common browsers will display 100% opaque and
- 100% transparent correctly, and do something
- unpredictable and/or undesirable for levels
- in between. TBB */
- int alpha[gdMaxColors];
- /* Truecolor flag and pixels. New 2.0 fields appear here at the
- end to minimize breakage of existing object code. */
- int trueColor;
- int ** tpixels;
- /* Should alpha channel be copied, or applied, each time a
- pixel is drawn? This applies to truecolor images only.
- No attempt is made to alpha-blend in palette images,
- even if semitransparent palette entries exist.
- To do that, build your image as a truecolor image,
- then quantize down to 8 bits. */
- int alphaBlendingFlag;
- /* Should the alpha channel of the image be saved? This affects
- PNG at the moment; other future formats may also
- have that capability. JPEG doesn't. */
- int saveAlphaFlag;
-} gdImage;
-
-typedef gdImage * gdImagePtr;
-
-typedef struct {
- /* # of characters in font */
- int nchars;
- /* First character is numbered... (usually 32 = space) */
- int offset;
- /* Character width and height */
- int w;
- int h;
- /* Font data; array of characters, one row after another.
- Easily included in code, also easily loaded from
- data files. */
- char *data;
-} gdFont;
-
-/* Text functions take these. */
-typedef gdFont *gdFontPtr;
-
-/* For backwards compatibility only. Use gdImageSetStyle()
- for MUCH more flexible line drawing. Also see
- gdImageSetBrush(). */
-#define gdDashSize 4
-
-/* Special colors. */
-
-#define gdStyled (-2)
-#define gdBrushed (-3)
-#define gdStyledBrushed (-4)
-#define gdTiled (-5)
-
-/* NOT the same as the transparent color index.
- This is used in line styles only. */
-#define gdTransparent (-6)
-
-/* Functions to manipulate images. */
-
-/* Creates a palette-based image (up to 256 colors). */
-gdImagePtr gdImageCreate(int sx, int sy);
-
-/* An alternate name for the above (2.0). */
-#define gdImageCreatePalette gdImageCreate
-
-/* Creates a truecolor image (millions of colors). */
-gdImagePtr gdImageCreateTrueColor(int sx, int sy);
-
-/* Creates an image from various file types. These functions
- return a palette or truecolor image based on the
- nature of the file being loaded. Truecolor PNG
- stays truecolor; palette PNG stays palette-based;
- JPEG is always truecolor. */
-gdImagePtr gdImageCreateFromPng(FILE *fd);
-gdImagePtr gdImageCreateFromPngCtx(gdIOCtxPtr in);
-gdImagePtr gdImageCreateFromWBMP(FILE *inFile);
-gdImagePtr gdImageCreateFromWBMPCtx(gdIOCtx *infile);
-gdImagePtr gdImageCreateFromJpeg(FILE *infile);
-gdImagePtr gdImageCreateFromJpegCtx(gdIOCtx *infile);
-
-/* A custom data source. */
-/* The source function must return -1 on error, otherwise the number
- of bytes fetched. 0 is EOF, not an error! */
-/* context will be passed to your source function. */
-
-typedef struct {
- int (*source) (void *context, char *buffer, int len);
- void *context;
-} gdSource, *gdSourcePtr;
-
-gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in);
-
-gdImagePtr gdImageCreateFromGd(FILE *in);
-gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in);
-
-gdImagePtr gdImageCreateFromGd2(FILE *in);
-gdImagePtr gdImageCreateFromGd2Ctx(gdIOCtxPtr in);
-
-gdImagePtr gdImageCreateFromGd2Part(FILE *in, int srcx, int srcy, int w, int h);
-gdImagePtr gdImageCreateFromGd2PartCtx(gdIOCtxPtr in, int srcx, int srcy, int w, int h);
-
-gdImagePtr gdImageCreateFromXbm(FILE *fd);
-
-void gdImageDestroy(gdImagePtr im);
-
-/* Replaces or blends with the background depending on the
- most recent call to gdImageAlphaBlending and the
- alpha channel value of 'color'; default is to overwrite.
- Tiling and line styling are also implemented
- here. All other gd drawing functions pass through this call,
- allowing for many useful effects. */
-
-void gdImageSetPixel(gdImagePtr im, int x, int y, int color);
-
-int gdImageGetPixel(gdImagePtr im, int x, int y);
-
-void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-
-/* For backwards compatibility only. Use gdImageSetStyle()
- for much more flexible line drawing. */
-void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-/* Corners specified (not width and height). Upper left first, lower right
- second. */
-void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-/* Solid bar. Upper left corner first, lower right corner second. */
-void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-int gdImageBoundsSafe(gdImagePtr im, int x, int y);
-void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
-void gdImageCharUp(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
-void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
-void gdImageStringUp(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
-void gdImageString16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
-void gdImageStringUp16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
-
-/* Calls gdImageStringFT. Provided for backwards compatibility only. */
-char *gdImageStringTTF(gdImage *im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string);
-
-/* FreeType 2 text output */
-char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string);
-
-typedef struct {
- int flags; /* for future expansion logical OR of gdFTEX_ values */
- double linespacing; /* fine tune line spacing for '\n' */
-} gdFTStringExtra, *gdFTStringExtraPtr;
-#define gdFTEX_LINESPACE 1
-
-/* FreeType 2 text output with fine tuning */
-char *
-gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist,
- double ptsize, double angle, int x, int y, char * string,
- gdFTStringExtraPtr strex);
-
-
-/* Point type for use in polygon drawing. */
-typedef struct {
- int x, y;
-} gdPoint, *gdPointPtr;
-
-void gdImagePolygon(gdImagePtr im, gdPointPtr p, int n, int c);
-void gdImageFilledPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
-
-/* These functions still work with truecolor images,
- for which they never return error. */
-int gdImageColorAllocate(gdImagePtr im, int r, int g, int b);
-/* gd 2.0: palette entries with non-opaque transparency are permitted. */
-int gdImageColorAllocateAlpha(gdImagePtr im, int r, int g, int b, int a);
-/* Assumes opaque is the preferred alpha channel value */
-int gdImageColorClosest(gdImagePtr im, int r, int g, int b);
-/* Closest match taking all four parameters into account.
- A slightly different color with the same transparency
- beats the exact same color with radically different
- transparency */
-int gdImageColorClosestAlpha(gdImagePtr im, int r, int g, int b, int a);
-/* Returns exact, 100% opaque matches only */
-int gdImageColorExact(gdImagePtr im, int r, int g, int b);
-/* Returns an exact match only, including alpha */
-int gdImageColorExactAlpha(gdImagePtr im, int r, int g, int b, int a);
-/* Opaque only */
-int gdImageColorResolve(gdImagePtr im, int r, int g, int b);
-/* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha */
-int gdImageColorResolveAlpha(gdImagePtr im, int r, int g, int b, int a);
-
-/* A simpler way to obtain an opaque truecolor value for drawing on a
- truecolor image. Not for use with palette images! */
-
-#define gdTrueColor(r, g, b) (((r) << 16) + \
- ((g) << 8) + \
- (b))
-
-/* Returns a truecolor value with an alpha channel component.
- gdAlphaMax (127, **NOT 255**) is transparent, 0 is completely
- opaque. */
-
-#define gdTrueColorAlpha(r, g, b, a) (((a) << 24) + \
- ((r) << 16) + \
- ((g) << 8) + \
- (b))
-
-void gdImageColorDeallocate(gdImagePtr im, int color);
-
-/* Converts a truecolor image to a palette-based image,
- using a high-quality two-pass quantization routine
- which attempts to preserve alpha channel information
- as well as R/G/B color information when creating
- a palette. If ditherFlag is set, the image will be
- dithered to approximate colors better, at the expense
- of some obvious "speckling." colorsWanted can be
- anything up to 256. If the original source image
- includes photographic information or anything that
- came out of a JPEG, 256 is strongly recommended.
-
- Better yet, don't use this function -- write real
- truecolor PNGs and JPEGs. The disk space gain of
- conversion to palette is not great (for small images
- it can be negative) and the quality loss is ugly. */
-
-void gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int colorsWanted);
-
-/* Specifies a color index (if a palette image) or an
- RGB color (if a truecolor image) which should be
- considered 100% transparent. FOR TRUECOLOR IMAGES,
- THIS IS IGNORED IF AN ALPHA CHANNEL IS BEING
- SAVED. Use gdImageSaveAlpha(im, 0); to
- turn off the saving of a full alpha channel in
- a truecolor image. Note that gdImageColorTransparent
- is usually compatible with older browsers that
- do not understand full alpha channels well. TBB */
-void gdImageColorTransparent(gdImagePtr im, int color);
-
-void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src);
-void gdImagePng(gdImagePtr im, FILE *out);
-void gdImagePngCtx(gdImagePtr im, gdIOCtx *out);
-
-void gdImageWBMP(gdImagePtr image, int fg, FILE *out);
-void gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
-
-/* Guaranteed to correctly free memory returned
- by the gdImage*Ptr functions */
-void gdFree(void *m);
-
-/* Best to free this memory with gdFree(), not free() */
-void *gdImageWBMPPtr(gdImagePtr im, int *size, int fg);
-
-void gdImageJpeg(gdImagePtr im, FILE *out, int quality);
-void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality);
-
-/* Best to free this memory with gdFree(), not free() */
-void *gdImageJpegPtr(gdImagePtr im, int *size, int quality);
-
-/* A custom data sink. For backwards compatibility. Use
- gdIOCtx instead. */
-/* The sink function must return -1 on error, otherwise the number
- of bytes written, which must be equal to len. */
-/* context will be passed to your sink function. */
-typedef struct {
- int (*sink) (void *context, const char *buffer, int len);
- void *context;
-} gdSink, *gdSinkPtr;
-
-void gdImagePngToSink(gdImagePtr im, gdSinkPtr out);
-
-void gdImageGd(gdImagePtr im, FILE *out);
-void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt);
-
-/* Best to free this memory with gdFree(), not free() */
-void* gdImagePngPtr(gdImagePtr im, int *size);
-
-/* Best to free this memory with gdFree(), not free() */
-void* gdImageGdPtr(gdImagePtr im, int *size);
-
-/* Best to free this memory with gdFree(), not free() */
-void* gdImageGd2Ptr(gdImagePtr im, int cs, int fmt, int *size);
-
-void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
-
-/* Style is a bitwise OR ( | operator ) of these.
- gdArc and gdChord are mutually exclusive;
- gdChord just connects the starting and ending
- angles with a straight line, while gdArc produces
- a rounded edge. gdPie is a synonym for gdArc.
- gdNoFill indicates that the arc or chord should be
- outlined, not filled. gdEdged, used together with
- gdNoFill, indicates that the beginning and ending
- angles should be connected to the center; this is
- a good way to outline (rather than fill) a
- 'pie slice'. */
-#define gdArc 0
-#define gdPie gdArc
-#define gdChord 1
-#define gdNoFill 2
-#define gdEdged 4
-
-void gdImageFilledArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style);
-void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color);
-void gdImageFilledEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
-void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color);
-void gdImageFill(gdImagePtr im, int x, int y, int color);
-void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h);
-void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct);
-void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct);
-
-/* Stretches or shrinks to fit, as needed. Does NOT attempt
- to average the entire set of source pixels that scale down onto the
- destination pixel. */
-void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
-
-/* gd 2.0: stretches or shrinks to fit, as needed. When called with a
- truecolor destination image, this function averages the
- entire set of source pixels that scale down onto the
- destination pixel, taking into account what portion of the
- destination pixel each source pixel represents. This is a
- floating point operation, but this is not a performance issue
- on modern hardware, except for some embedded devices. If the
- destination is a palette image, gdImageCopyResized is
- substituted automatically. */
-void gdImageCopyResampled(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
-
-void gdImageSetBrush(gdImagePtr im, gdImagePtr brush);
-void gdImageSetTile(gdImagePtr im, gdImagePtr tile);
-void gdImageSetStyle(gdImagePtr im, int *style, int noOfPixels);
-/* Line thickness (defaults to 1). Affects lines, ellipses,
- rectangles, polygons and so forth. */
-void gdImageSetThickness(gdImagePtr im, int thickness);
-/* On or off (1 or 0) for all three of these. */
-void gdImageInterlace(gdImagePtr im, int interlaceArg);
-void gdImageAlphaBlending(gdImagePtr im, int alphaBlendingArg);
-void gdImageSaveAlpha(gdImagePtr im, int saveAlphaArg);
-
-/* Macros to access information about images. */
-
-/* Returns nonzero if the image is a truecolor image,
- zero for a palette image. */
-
-#define gdImageTrueColor(im) ((im)->trueColor)
-
-#define gdImageSX(im) ((im)->sx)
-#define gdImageSY(im) ((im)->sy)
-#define gdImageColorsTotal(im) ((im)->colorsTotal)
-#define gdImageRed(im, c) ((im)->trueColor ? gdTrueColorGetRed(c) : \
- (im)->red[(c)])
-#define gdImageGreen(im, c) ((im)->trueColor ? gdTrueColorGetGreen(c) : \
- (im)->green[(c)])
-#define gdImageBlue(im, c) ((im)->trueColor ? gdTrueColorGetBlue(c) : \
- (im)->blue[(c)])
-#define gdImageAlpha(im, c) ((im)->trueColor ? gdTrueColorGetAlpha(c) : \
- (im)->alpha[(c)])
-#define gdImageGetTransparent(im) ((im)->transparent)
-#define gdImageGetInterlaced(im) ((im)->interlace)
-
-/* These macros provide direct access to pixels in
- palette-based and truecolor images, respectively.
- If you use these macros, you must perform your own
- bounds checking. Use of the macro for the correct type
- of image is also your responsibility. */
-#define gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)]
-#define gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)]
-
-/* I/O Support routines. */
-
-gdIOCtx* gdNewFileCtx(FILE*);
-gdIOCtx* gdNewDynamicCtx(int, void*);
-gdIOCtx* gdNewSSCtx(gdSourcePtr in, gdSinkPtr out);
-void* gdDPExtractData(struct gdIOCtx* ctx, int *size);
-
-#define GD2_CHUNKSIZE 128
-#define GD2_CHUNKSIZE_MIN 64
-#define GD2_CHUNKSIZE_MAX 4096
-
-#define GD2_VERS 2
-#define GD2_ID "gd2"
-#define GD2_FMT_RAW 1
-#define GD2_FMT_COMPRESSED 2
-
-/* Image comparison definitions */
-int gdImageCompare(gdImagePtr im1, gdImagePtr im2);
-
-#define GD_CMP_IMAGE 1 /* Actual image IS different */
-#define GD_CMP_NUM_COLORS 2 /* Number of Colours in pallette differ */
-#define GD_CMP_COLOR 4 /* Image colours differ */
-#define GD_CMP_SIZE_X 8 /* Image width differs */
-#define GD_CMP_SIZE_Y 16 /* Image heights differ */
-#define GD_CMP_TRANSPARENT 32 /* Transparent colour */
-#define GD_CMP_BACKGROUND 64 /* Background colour */
-#define GD_CMP_INTERLACE 128 /* Interlaced setting */
-#define GD_CMP_TRUECOLOR 256 /* Truecolor vs palette differs */
-
-/* resolution affects ttf font rendering, particularly hinting */
-#define GD_RESOLUTION 96 /* pixels per inch */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GD_H */
diff --git a/ext/gd/libgd/gd2copypal.c b/ext/gd/libgd/gd2copypal.c
deleted file mode 100644
index 1b0a81def6..0000000000
--- a/ext/gd/libgd/gd2copypal.c
+++ /dev/null
@@ -1,64 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- gdImagePtr pal;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: gd2copypal palettefile.gd2 filename.gd2\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Palette file does not exist!\n");
- exit (1);
- }
- pal = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!pal)
- {
- fprintf (stderr, "Palette is not in GD2 format!\n");
- exit (1);
- }
-
- in = fopen (argv[2], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
-
- gdImagePaletteCopy (im, pal);
-
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImageGd2 (im, out, 128, 2);
- fclose (out);
- gdImageDestroy (pal);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gd2time.c b/ext/gd/libgd/gd2time.c
deleted file mode 100644
index 18e6c0c9e4..0000000000
--- a/ext/gd/libgd/gd2time.c
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h> /* for atoi */
-#include <time.h> /* For time */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in;
- int x, y, w, h;
- int c;
- int i;
- int t0;
-
- if (argc != 7)
- {
- fprintf (stderr, "Usage: gd2time filename.gd count x y w h\n");
- exit (1);
- }
-
- c = atoi (argv[2]);
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
-
- printf ("Extracting %d times from (%d, %d), size is %dx%d\n", c, x, y, w, h);
-
- t0 = time (0);
- for (i = 0; i < c; i++)
- {
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
-
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- fclose (in);
-
- if (!im)
- {
- fprintf (stderr, "Error reading source file!\n");
- exit (1);
- }
- gdImageDestroy (im);
- };
- t0 = time (0) - t0;
- printf ("%d seconds to extract (& destroy) %d times\n", t0, c);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gd2topng.c b/ext/gd/libgd/gd2topng.c
deleted file mode 100644
index c898f25e18..0000000000
--- a/ext/gd/libgd/gd2topng.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: gd2topng filename.gd2 filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gd_arc_f_buggy.c b/ext/gd/libgd/gd_arc_f_buggy.c
deleted file mode 100644
index 1e33b26608..0000000000
--- a/ext/gd/libgd/gd_arc_f_buggy.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/* This is potentially great stuff, but fails against the test
- program at the end. This would probably be much more
- efficent than the implementation currently in gd.c if the
- errors in the output were corrected. TBB */
-
-#if 0
-
-#include "gd.h"
-#include <math.h>
-
-/* Courtesy of F J Franklin. */
-
-static gdPoint gdArcClosest (int width, int height, int angle);
-
-void
-gdImageFilledEllipse (gdImagePtr im, int cx, int cy, int width, int height, int color)
-{
- gdImageFilledArc (im, cx, cy, width, height, 0, 360, color, gdChord);
-}
-
-void
-gdImageFilledArc (gdImagePtr im, int cx, int cy, int width, int height, int s, int e, int color, int style)
-{
- gdPoint pt[7];
- gdPoint axis_pt[4];
-
- int angle;
-
- int have_s = 0;
- int have_e = 0;
-
- int flip_x = 0;
- int flip_y = 0;
-
- int conquer = 0;
-
- int i;
-
- int a;
- int b;
-
- int x;
- int y;
-
- long s_sin = 0;
- long s_cos = 0;
- long e_sin = 0;
- long e_cos = 0;
-
- long w; /* a * 2 */
- long h; /* b * 2 */
-
- long x2; /* x * 2 */
- long y2; /* y * 2 */
- long lx2; /* x * 2 (line) */
- long ly2; /* y * 2 (line) */
-
- long ws; /* (a * 2)^2 */
- long hs; /* (b * 2)^2 */
-
- long whs; /* (a * 2)^2 * (b * 2)^2 */
-
- long g; /* decision variable */
- long lg; /* decision variable (line) */
-
- width = (width & 1) ? (width + 1) : (width);
- height = (height & 1) ? (height + 1) : (height);
-
- a = width / 2;
- b = height / 2;
-
- axis_pt[0].x = a;
- axis_pt[0].y = 0;
- axis_pt[1].x = 0;
- axis_pt[1].y = b;
- axis_pt[2].x = -a;
- axis_pt[2].y = 0;
- axis_pt[3].x = 0;
- axis_pt[3].y = -b;
-
- if (s == e)
- return;
-
- if ((e - s) >= 360)
- {
- s = 0;
- e = 0;
- }
-
- while (s < 0)
- s += 360;
- while (s >= 360)
- s -= 360;
- while (e < 0)
- e += 360;
- while (e >= 360)
- e -= 360;
-
- if (e <= s)
- e += 360;
-
- /* I'm assuming a chord-rule at the moment. Need to add origin to get a
- * pie-rule, but will need to set chord-rule before recursion...
- */
-
- for (i = 0; i < 4; i++)
- {
- if ((s < (i + 1) * 90) && (e > (i + 1) * 90))
- {
- gdImageFilledArc (im, cx, cy, width, height, s, (i + 1) * 90, color, gdChord);
- pt[0] = gdArcClosest (width, height, s);
- pt[0].x += cx;
- pt[0].y += cy;
- pt[1].x = cx + axis_pt[(i + 1) & 3].x;
- pt[1].y = cy + axis_pt[(i + 1) & 3].y;
- if (e <= (i + 2) * 90)
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 1) * 90, e, color, gdChord);
- pt[2] = gdArcClosest (width, height, e);
- pt[2].x += cx;
- pt[2].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 3, color);
- gdImagePolygon (im, pt, 3, color);
- }
- else if (style == gdPie)
- {
- pt[3].x = cx;
- pt[3].y = cy;
- gdImageFilledPolygon (im, pt, 4, color);
- gdImagePolygon (im, pt, 4, color);
- }
- }
- else
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 1) * 90, (i + 2) * 90, color, gdChord);
- pt[2].x = cx + axis_pt[(i + 2) & 3].x;
- pt[2].y = cy + axis_pt[(i + 2) & 3].y;
- if (e <= (i + 3) * 90)
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 2) * 90, e, color, gdChord);
- pt[3] = gdArcClosest (width, height, e);
- pt[3].x += cx;
- pt[3].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 4, color);
- gdImagePolygon (im, pt, 4, color);
- }
- else if (style == gdPie)
- {
- pt[4].x = cx;
- pt[4].y = cy;
- gdImageFilledPolygon (im, pt, 5, color);
- gdImagePolygon (im, pt, 5, color);
- }
- }
- else
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 2) * 90, (i + 3) * 90, color, gdChord);
- pt[3].x = cx + axis_pt[(i + 3) & 3].x;
- pt[3].y = cy + axis_pt[(i + 3) & 3].y;
- if (e <= (i + 4) * 90)
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 3) * 90, e, color, gdChord);
- pt[4] = gdArcClosest (width, height, e);
- pt[4].x += cx;
- pt[4].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 5, color);
- gdImagePolygon (im, pt, 5, color);
- }
- else if (style == gdPie)
- {
- pt[5].x = cx;
- pt[5].y = cy;
- gdImageFilledPolygon (im, pt, 6, color);
- gdImagePolygon (im, pt, 6, color);
- }
- }
- else
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 3) * 90, (i + 4) * 90, color, gdChord);
- pt[4].x = cx + axis_pt[(i + 4) & 3].x;
- pt[4].y = cy + axis_pt[(i + 4) & 3].y;
-
- gdImageFilledArc (im, cx, cy, width, height, (i + 4) * 90, e, color, gdChord);
- pt[5] = gdArcClosest (width, height, e);
- pt[5].x += cx;
- pt[5].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 6, color);
- gdImagePolygon (im, pt, 6, color);
- }
- else if (style == gdPie)
- {
- pt[6].x = cx;
- pt[6].y = cy;
- gdImageFilledPolygon (im, pt, 7, color);
- gdImagePolygon (im, pt, 7, color);
- }
- }
- }
- }
- return;
- }
- }
-
- /* At this point we have only arcs that lies within a quadrant -
- * map this to first quadrant...
- */
-
- if ((s >= 90) && (e <= 180))
- {
- angle = s;
- s = 180 - e;
- e = 180 - angle;
- flip_x = 1;
- }
- if ((s >= 180) && (e <= 270))
- {
- s = s - 180;
- e = e - 180;
- flip_x = 1;
- flip_y = 1;
- }
- if ((s >= 270) && (e <= 360))
- {
- angle = s;
- s = 360 - e;
- e = 360 - angle;
- flip_y = 1;
- }
-
- if (s == 0)
- {
- s_sin = 0;
- s_cos = (long) ((double) 32768);
- }
- else
- {
- s_sin = (long) ((double) 32768 * sin ((double) s * M_PI / (double) 180));
- s_cos = (long) ((double) 32768 * cos ((double) s * M_PI / (double) 180));
- }
- if (e == 0)
- {
- e_sin = (long) ((double) 32768);
- e_cos = 0;
- }
- else
- {
- e_sin = (long) ((double) 32768 * sin ((double) e * M_PI / (double) 180));
- e_cos = (long) ((double) 32768 * cos ((double) e * M_PI / (double) 180));
- }
-
- w = (long) width;
- h = (long) height;
-
- ws = w * w;
- hs = h * h;
-
- whs = 1;
- while ((ws > 32768) || (hs > 32768))
- {
- ws = (ws + 1) / 2; /* Unfortunate limitations on integers makes */
- hs = (hs + 1) / 2; /* drawing large ellipses problematic... */
- whs *= 2;
- }
- while ((ws * hs) > (0x04000000L / whs))
- {
- ws = (ws + 1) / 2;
- hs = (hs + 1) / 2;
- whs *= 2;
- }
- whs *= ws * hs;
-
- pt[0].x = w / 2;
- pt[0].y = 0;
-
- pt[2].x = 0;
- pt[2].y = h / 2;
-
- have_s = 0;
- have_e = 0;
-
- if (s == 0)
- have_s = 1;
- if (e == 90)
- have_e = 1;
-
- x2 = w;
- y2 = 0; /* Starting point is exactly on ellipse */
-
- g = x2 - 1;
- g = g * g * hs + 4 * ws - whs;
-
- while ((x2 * hs) > (y2 * ws)) /* Keep |tangent| > 1 */
- {
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
-
- if ((have_s == 0) && ((s_sin * x2) <= (y2 * s_cos)))
- {
- pt[0].x = (int) (x2 / 2);
- pt[0].y = (int) (y2 / 2);
- have_s = 1;
- }
-
- if ((have_e == 0) && ((e_sin * x2) <= (y2 * e_cos)))
- {
- pt[2].x = (int) (x2 / 2);
- pt[2].y = (int) (y2 / 2);
- have_e = 1;
- }
- }
- pt[1].x = (int) (x2 / 2);
- pt[1].y = (int) (y2 / 2);
-
- x2 = 0;
- y2 = h; /* Starting point is exactly on ellipse */
-
- g = y2 - 1;
- g = g * g * ws + 4 * hs - whs;
-
- while ((x2 * hs) < (y2 * ws))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- if ((have_s == 0) && ((s_sin * x2) >= (y2 * s_cos)))
- {
- pt[0].x = (int) (x2 / 2);
- pt[0].y = (int) (y2 / 2);
- have_s = 1;
- }
-
- if ((have_e == 0) && ((e_sin * x2) >= (y2 * e_cos)))
- {
- pt[2].x = (int) (x2 / 2);
- pt[2].y = (int) (y2 / 2);
- have_e = 1;
- }
- }
-
- if ((have_s == 0) || (have_e == 0))
- return; /* Bizarre case */
-
- if (style == gdPie)
- {
- pt[3] = pt[0];
- pt[4] = pt[1];
- pt[5] = pt[2];
-
- pt[0].x = cx + (flip_x ? (-pt[0].x) : pt[0].x);
- pt[0].y = cy + (flip_y ? (-pt[0].y) : pt[0].y);
- pt[1].x = cx;
- pt[1].y = cy;
- pt[2].x = cx + (flip_x ? (-pt[2].x) : pt[2].x);
- pt[2].y = cy + (flip_y ? (-pt[2].y) : pt[2].y);
- gdImageFilledPolygon (im, pt, 3, color);
- gdImagePolygon (im, pt, 3, color);
-
- pt[0] = pt[3];
- pt[1] = pt[4];
- pt[2] = pt[5];
- }
-
- if (((s_cos * hs) > (s_sin * ws)) && ((e_cos * hs) < (e_sin * ws)))
- { /* the points are on different parts of the curve...
- * this is too tricky to try to handle, so divide and conquer:
- */
- pt[3] = pt[0];
- pt[4] = pt[1];
- pt[5] = pt[2];
-
- pt[0].x = cx + (flip_x ? (-pt[0].x) : pt[0].x);
- pt[0].y = cy + (flip_y ? (-pt[0].y) : pt[0].y);
- pt[1].x = cx + (flip_x ? (-pt[1].x) : pt[1].x);
- pt[1].y = cy + (flip_y ? (-pt[1].y) : pt[1].y);
- pt[2].x = cx + (flip_x ? (-pt[2].x) : pt[2].x);
- pt[2].y = cy + (flip_y ? (-pt[2].y) : pt[2].y);
- gdImageFilledPolygon (im, pt, 3, color);
- gdImagePolygon (im, pt, 3, color);
-
- pt[0] = pt[3];
- pt[2] = pt[4];
-
- conquer = 1;
- }
-
- if (conquer || (((s_cos * hs) > (s_sin * ws)) && ((e_cos * hs) > (e_sin * ws))))
- { /* This is the best bit... */
- /* steep line + ellipse */
- /* go up & left from pt[0] to pt[2] */
-
- x2 = w;
- y2 = 0; /* Starting point is exactly on ellipse */
-
- g = x2 - 1;
- g = g * g * hs + 4 * ws - whs;
-
- while ((x2 * hs) > (y2 * ws)) /* Keep |tangent| > 1 */
- {
- if ((s_sin * x2) <= (y2 * s_cos))
- break;
-
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
- }
-
- lx2 = x2;
- ly2 = y2;
-
- lg = lx2 * (pt[0].y - pt[2].y) - ly2 * (pt[0].x - pt[2].x);
- lg = (lx2 - 1) * (pt[0].y - pt[2].y) - (ly2 + 2) * (pt[0].x - pt[2].x) - lg;
-
- while (y2 < (2 * pt[2].y))
- {
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
-
- ly2 += 2;
- lg -= 2 * (pt[0].x - pt[2].x);
-
- if (lg < 0) /* Need to drop */
- {
- lx2 -= 2;
- lg -= 2 * (pt[0].y - pt[2].y);
- }
-
- y = (int) (y2 / 2);
- for (x = (int) (lx2 / 2); x <= (int) (x2 / 2); x++)
- {
- gdImageSetPixel (im, ((flip_x) ? (cx - x) : (cx + x)),
- ((flip_y) ? (cy - y) : (cy + y)), color);
- }
- }
- }
- if (conquer)
- {
- pt[0] = pt[4];
- pt[2] = pt[5];
- }
- if (conquer || (((s_cos * hs) < (s_sin * ws)) && ((e_cos * hs) < (e_sin * ws))))
- { /* This is the best bit... */
- /* gradual line + ellipse */
- /* go down & right from pt[2] to pt[0] */
-
- x2 = 0;
- y2 = h; /* Starting point is exactly on ellipse */
-
- g = y2 - 1;
- g = g * g * ws + 4 * hs - whs;
-
- while ((x2 * hs) < (y2 * ws))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- if ((e_sin * x2) >= (y2 * e_cos))
- break;
- }
-
- lx2 = x2;
- ly2 = y2;
-
- lg = lx2 * (pt[0].y - pt[2].y) - ly2 * (pt[0].x - pt[2].x);
- lg = (lx2 + 2) * (pt[0].y - pt[2].y) - (ly2 - 1) * (pt[0].x - pt[2].x) - lg;
-
- while (x2 < (2 * pt[0].x))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- lx2 += 2;
- lg += 2 * (pt[0].y - pt[2].y);
-
- if (lg < 0) /* Need to drop */
- {
- ly2 -= 2;
- lg += 2 * (pt[0].x - pt[2].x);
- }
-
- x = (int) (x2 / 2);
- for (y = (int) (ly2 / 2); y <= (int) (y2 / 2); y++)
- {
- gdImageSetPixel (im, ((flip_x) ? (cx - x) : (cx + x)),
- ((flip_y) ? (cy - y) : (cy + y)), color);
- }
- }
- }
-}
-
-static gdPoint
-gdArcClosest (int width, int height, int angle)
-{
- gdPoint pt;
-
- int flip_x = 0;
- int flip_y = 0;
-
- long a_sin = 0;
- long a_cos = 0;
-
- long w; /* a * 2 */
- long h; /* b * 2 */
-
- long x2; /* x * 2 */
- long y2; /* y * 2 */
-
- long ws; /* (a * 2)^2 */
- long hs; /* (b * 2)^2 */
-
- long whs; /* (a * 2)^2 * (b * 2)^2 */
-
- long g; /* decision variable */
-
- w = (long) ((width & 1) ? (width + 1) : (width));
- h = (long) ((height & 1) ? (height + 1) : (height));
-
- while (angle < 0)
- angle += 360;
- while (angle >= 360)
- angle -= 360;
-
- if (angle == 0)
- {
- pt.x = w / 2;
- pt.y = 0;
- return (pt);
- }
- if (angle == 90)
- {
- pt.x = 0;
- pt.y = h / 2;
- return (pt);
- }
- if (angle == 180)
- {
- pt.x = -w / 2;
- pt.y = 0;
- return (pt);
- }
- if (angle == 270)
- {
- pt.x = 0;
- pt.y = -h / 2;
- return (pt);
- }
-
- pt.x = 0;
- pt.y = 0;
-
- if ((angle > 90) && (angle < 180))
- {
- angle = 180 - angle;
- flip_x = 1;
- }
- if ((angle > 180) && (angle < 270))
- {
- angle = angle - 180;
- flip_x = 1;
- flip_y = 1;
- }
- if ((angle > 270) && (angle < 360))
- {
- angle = 360 - angle;
- flip_y = 1;
- }
-
- a_sin = (long) ((double) 32768 * sin ((double) angle * M_PI / (double) 180));
- a_cos = (long) ((double) 32768 * cos ((double) angle * M_PI / (double) 180));
-
- ws = w * w;
- hs = h * h;
-
- whs = 1;
- while ((ws > 32768) || (hs > 32768))
- {
- ws = (ws + 1) / 2; /* Unfortunate limitations on integers makes */
- hs = (hs + 1) / 2; /* drawing large ellipses problematic... */
- whs *= 2;
- }
- while ((ws * hs) > (0x04000000L / whs))
- {
- ws = (ws + 1) / 2;
- hs = (hs + 1) / 2;
- whs *= 2;
- }
- whs *= ws * hs;
-
- if ((a_cos * hs) > (a_sin * ws))
- {
- x2 = w;
- y2 = 0; /* Starting point is exactly on ellipse */
-
- g = x2 - 1;
- g = g * g * hs + 4 * ws - whs;
-
- while ((x2 * hs) > (y2 * ws)) /* Keep |tangent| > 1 */
- {
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
-
- if ((a_sin * x2) <= (y2 * a_cos))
- {
- pt.x = (int) (x2 / 2);
- pt.y = (int) (y2 / 2);
- break;
- }
- }
- }
- else
- {
- x2 = 0;
- y2 = h; /* Starting point is exactly on ellipse */
-
- g = y2 - 1;
- g = g * g * ws + 4 * hs - whs;
-
- while ((x2 * hs) < (y2 * ws))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- if ((a_sin * x2) >= (y2 * a_cos))
- {
- pt.x = (int) (x2 / 2);
- pt.y = (int) (y2 / 2);
- break;
- }
- }
- }
-
- if (flip_x)
- pt.x = -pt.x;
- if (flip_y)
- pt.y = -pt.y;
-
- return (pt);
-}
-
-#include "gd.h"
-#include <string.h>
-#include <math.h>
-
-#define WIDTH 500
-#define HEIGHT 300
-
-int
-main (int argc, char *argv[])
-{
- gdImagePtr im = gdImageCreate (WIDTH, HEIGHT);
- int white = gdImageColorResolve (im, 0xFF, 0xFF, 0xFF), black = gdImageColorResolve (im, 0, 0, 0),
- red = gdImageColorResolve (im, 0xFF, 0xA0, 0xA0);
- FILE *out;
-
- /* filled arc - circle */
- gdImageFilledArc (im, WIDTH / 5, HEIGHT / 4, 200, 200, 45, 90, red, gdPie);
- gdImageArc (im, WIDTH / 5, HEIGHT / 4, 200, 200, 45, 90, black);
-
- /* filled arc - ellipse */
- gdImageFilledArc (im, WIDTH / 2, HEIGHT / 4, 200, 150, 45, 90, red, gdPie);
- gdImageArc (im, WIDTH / 2, HEIGHT / 4, 200, 150, 45, 90, black);
-
-
- /* reference lines */
- gdImageLine (im, 0, HEIGHT / 4, WIDTH, HEIGHT / 4, black);
- gdImageLine (im, WIDTH / 5, 0, WIDTH / 5, HEIGHT, black);
- gdImageLine (im, WIDTH / 2, 0, WIDTH / 2, HEIGHT, black);
- gdImageLine (im, WIDTH / 2, HEIGHT / 4, WIDTH / 2 + 300, HEIGHT / 4 + 300, black);
- gdImageLine (im, WIDTH / 5, HEIGHT / 4, WIDTH / 5 + 300, HEIGHT / 4 + 300, black);
-
- /* TBB: Write img to test/arctest.png */
- out = fopen ("test/arctest.png", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create test/arctest.png\n");
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- fprintf (stderr, "Test image written to test/arctest.png\n");
- /* Destroy it */
- gdImageDestroy (im);
-
- return 0;
-}
-
-#endif
diff --git a/ext/gd/libgd/gd_gd.c b/ext/gd/libgd/gd_gd.c
deleted file mode 100644
index 45b6492312..0000000000
--- a/ext/gd/libgd/gd_gd.c
+++ /dev/null
@@ -1,272 +0,0 @@
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* Exported functions: */
-extern void gdImageGd (gdImagePtr im, FILE * out);
-
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD2_DBG(s) (s) */
-#define GD2_DBG(s)
-
-/* */
-/* Shared code to read color tables from gd file. */
-/* */
-int
-_gdGetColors (gdIOCtx * in, gdImagePtr im, int gd2xFlag)
-{
- int i;
- if (gd2xFlag)
- {
- if (!gdGetByte (&im->trueColor, in))
- {
- goto fail1;
- }
- /* This should have been a word all along */
- if (!im->trueColor)
- {
- if (!gdGetWord (&im->colorsTotal, in))
- {
- goto fail1;
- }
- }
- /* Int to accommodate truecolor single-color transparency */
- if (!gdGetInt (&im->transparent, in))
- {
- goto fail1;
- }
- }
- else
- {
- if (!gdGetByte (&im->colorsTotal, in))
- {
- goto fail1;
- }
- if (!gdGetWord (&im->transparent, in))
- {
- goto fail1;
- }
- if (im->transparent == 257)
- {
- im->transparent = (-1);
- }
- }
- GD2_DBG (printf ("Pallette had %d colours (T=%d)\n", im->colorsTotal, im->transparent));
-
- for (i = 0; (i < gdMaxColors); i++)
- {
- if (!gdGetByte (&im->red[i], in))
- {
- goto fail1;
- }
- if (!gdGetByte (&im->green[i], in))
- {
- goto fail1;
- }
- if (!gdGetByte (&im->blue[i], in))
- {
- goto fail1;
- }
- if (gd2xFlag)
- {
- if (!gdGetByte (&im->alpha[i], in))
- {
- goto fail1;
- }
- }
- }
-
- for (i = 0; (i < im->colorsTotal); i++)
- {
- im->open[i] = 0;
- };
-
- return TRUE;
-fail1:
- return FALSE;
-}
-
-/* */
-/* Use the common basic header info to make the image object. */
-/* This is also called from _gd2CreateFromFile */
-/* */
-static
- gdImagePtr
-_gdCreateFromFile (gdIOCtx * in, int *sx, int *sy)
-{
- gdImagePtr im;
- int gd2xFlag = 0;
- if (!gdGetWord (sx, in))
- {
- goto fail1;
- }
- if (*sx == 65535)
- {
- /* This is a gd 2.0 .gd file */
- gd2xFlag = 1;
- if (!gdGetWord (sx, in))
- {
- goto fail1;
- }
- }
- if (!gdGetWord (sy, in))
- {
- goto fail1;
- }
-
- GD2_DBG (printf ("Image is %dx%d\n", *sx, *sy));
-
- im = gdImageCreate (*sx, *sy);
-
- if (!_gdGetColors (in, im, gd2xFlag))
- {
- goto fail2;
- }
-
- return im;
-fail2:
- gdImageDestroy (im);
-fail1:
- return 0;
-}
-
-gdImagePtr
-gdImageCreateFromGd (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in;
-
- in = gdNewFileCtx (inFile);
- im = gdImageCreateFromGdCtx (in);
-
- in->free (in);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGdCtx (gdIOCtxPtr in)
-{
- int sx, sy;
- int x, y;
- gdImagePtr im;
-
- /* Read the header */
- im = _gdCreateFromFile (in, &sx, &sy);
-
- if (im == NULL)
- {
- goto fail1;
- };
-
- /* Then the data... */
- for (y = 0; (y < sy); y++)
- {
- for (x = 0; (x < sx); x++)
- {
- int ch;
- ch = gdGetC (in);
- if (ch == EOF)
- {
- goto fail2;
- }
- /* ROW-MAJOR IN GD 1.3 */
- im->pixels[y][x] = ch;
- }
- }
-
- return im;
-
-fail2:
- gdImageDestroy (im);
-fail1:
- return 0;
-}
-
-void
-_gdPutColors (gdImagePtr im, gdIOCtx * out)
-{
- int i;
- int trans;
-
- gdPutC (im->trueColor, out);
- if (!im->trueColor)
- {
- gdPutWord (im->colorsTotal, out);
- }
- gdPutInt (im->transparent, out);
- if (!im->trueColor)
- {
- for (i = 0; (i < gdMaxColors); i++)
- {
- gdPutC ((unsigned char) im->red[i], out);
- gdPutC ((unsigned char) im->green[i], out);
- gdPutC ((unsigned char) im->blue[i], out);
- gdPutC ((unsigned char) im->alpha[i], out);
- }
- }
-}
-
-static
-void
-_gdPutHeader (gdImagePtr im, gdIOCtx * out)
-{
- /* 65535 indicates this is a gd 2.x .gd file. */
- gdPutWord (65535, out);
- gdPutWord (im->sx, out);
- gdPutWord (im->sy, out);
-
- _gdPutColors (im, out);
-
-}
-
-static void
-_gdImageGd (gdImagePtr im, gdIOCtx * out)
-{
- int x, y;
-
- _gdPutHeader (im, out);
-
- for (y = 0; (y < im->sy); y++)
- {
- for (x = 0; (x < im->sx); x++)
- {
- /* ROW-MAJOR IN GD 1.3 */
- if (im->trueColor)
- {
- gdPutInt (im->tpixels[y][x], out);
- }
- else
- {
- gdPutC ((unsigned char) im->pixels[y][x], out);
- }
- }
- }
-}
-
-void
-gdImageGd (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- _gdImageGd (im, out);
- out->free (out);
-}
-
-void *
-gdImageGdPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- _gdImageGd (im, out);
- rv = gdDPExtractData (out, size);
- out->free (out);
- return rv;
-}
diff --git a/ext/gd/libgd/gd_gd2.c b/ext/gd/libgd/gd_gd2.c
deleted file mode 100644
index 5697cf3138..0000000000
--- a/ext/gd/libgd/gd_gd2.c
+++ /dev/null
@@ -1,923 +0,0 @@
-/*
- * gd_gd2.c
- *
- * Implements the I/O and support for the GD2 format.
- *
- * Changing the definition of GD2_DBG (below) will cause copious messages
- * to be displayed while it processes requests.
- *
- * Designed, Written & Copyright 1999, Philip Warner.
- *
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <zlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD2_DBG(s) (s) */
-#define GD2_DBG(s)
-
-typedef struct
- {
- int offset;
- int size;
- }
-t_chunk_info;
-
-extern int _gdGetColors (gdIOCtx * in, gdImagePtr im, int gd2xFlag);
-extern void _gdPutColors (gdImagePtr im, gdIOCtx * out);
-
-/* */
-/* Read the extra info in the gd2 header. */
-/* */
-static
-int
-_gd2GetHeader (gdIOCtxPtr in, int *sx, int *sy,
- int *cs, int *vers, int *fmt, int *ncx, int *ncy, t_chunk_info ** chunkIdx)
-{
- int i;
- int ch;
- char id[5];
- t_chunk_info *cidx;
- int sidx;
- int nc;
-
- GD2_DBG (printf ("Reading gd2 header info\n"));
-
- for (i = 0; i < 4; i++)
- {
- ch = gdGetC (in);
- if (ch == EOF)
- {
- goto fail1;
- };
- id[i] = ch;
- };
- id[4] = 0;
-
- GD2_DBG (printf ("Got file code: %s\n", id));
-
- /* Equiv. of 'magick'. */
- if (strcmp (id, GD2_ID) != 0)
- {
- GD2_DBG (printf ("Not a valid gd2 file\n"));
- goto fail1;
- };
-
- /* Version */
- if (gdGetWord (vers, in) != 1)
- {
- goto fail1;
- };
- GD2_DBG (printf ("Version: %d\n", *vers));
-
- if ((*vers != 1) && (*vers != 2))
- {
- GD2_DBG (printf ("Bad version: %d\n", *vers));
- goto fail1;
- };
-
- /* Image Size */
- if (!gdGetWord (sx, in))
- {
- GD2_DBG (printf ("Could not get x-size\n"));
- goto fail1;
- }
- if (!gdGetWord (sy, in))
- {
- GD2_DBG (printf ("Could not get y-size\n"));
- goto fail1;
- }
- GD2_DBG (printf ("Image is %dx%d\n", *sx, *sy));
-
- /* Chunk Size (pixels, not bytes!) */
- if (gdGetWord (cs, in) != 1)
- {
- goto fail1;
- };
- GD2_DBG (printf ("ChunkSize: %d\n", *cs));
-
- if ((*cs < GD2_CHUNKSIZE_MIN) || (*cs > GD2_CHUNKSIZE_MAX))
- {
- GD2_DBG (printf ("Bad chunk size: %d\n", *cs));
- goto fail1;
- };
-
- /* Data Format */
- if (gdGetWord (fmt, in) != 1)
- {
- goto fail1;
- };
- GD2_DBG (printf ("Format: %d\n", *fmt));
-
- if ((*fmt != GD2_FMT_RAW) && (*fmt != GD2_FMT_COMPRESSED))
- {
- GD2_DBG (printf ("Bad data format: %d\n", *fmt));
- goto fail1;
- };
-
-
- /* # of chunks wide */
- if (gdGetWord (ncx, in) != 1)
- {
- goto fail1;
- };
- GD2_DBG (printf ("%d Chunks Wide\n", *ncx));
-
- /* # of chunks high */
- if (gdGetWord (ncy, in) != 1)
- {
- goto fail1;
- };
- GD2_DBG (printf ("%d Chunks vertically\n", *ncy));
-
- if ((*fmt) == GD2_FMT_COMPRESSED)
- {
- nc = (*ncx) * (*ncy);
- GD2_DBG (printf ("Reading %d chunk index entries\n", nc));
- sidx = sizeof (t_chunk_info) * nc;
- cidx = gdCalloc (sidx, 1);
- for (i = 0; i < nc; i++)
- {
- if (gdGetInt (&cidx[i].offset, in) != 1)
- {
- goto fail1;
- };
- if (gdGetInt (&cidx[i].size, in) != 1)
- {
- goto fail1;
- };
- };
- *chunkIdx = cidx;
- };
-
- GD2_DBG (printf ("gd2 header complete\n"));
-
- return 1;
-
-fail1:
- return 0;
-}
-
-static
- gdImagePtr
-_gd2CreateFromFile (gdIOCtxPtr in, int *sx, int *sy,
- int *cs, int *vers, int *fmt,
- int *ncx, int *ncy, t_chunk_info ** cidx)
-{
- gdImagePtr im;
-
- if (_gd2GetHeader (in, sx, sy, cs, vers, fmt, ncx, ncy, cidx) != 1)
- {
- GD2_DBG (printf ("Bad GD2 header\n"));
- goto fail1;
- }
-
- im = gdImageCreate (*sx, *sy);
- if (im == NULL)
- {
- GD2_DBG (printf ("Could not create gdImage\n"));
- goto fail1;
- };
-
- if (!_gdGetColors (in, im, (*vers) == 2))
- {
- GD2_DBG (printf ("Could not read color palette\n"));
- goto fail2;
- }
- GD2_DBG (printf ("Image palette completed: %d colours\n", im->colorsTotal));
-
- return im;
-
-fail2:
- gdImageDestroy (im);
- return 0;
-
-fail1:
- return 0;
-
-}
-
-static
-int
-_gd2ReadChunk (int offset, char *compBuf, int compSize, char *chunkBuf, uLongf * chunkLen, gdIOCtx * in)
-{
- int zerr;
-
- if (gdTell (in) != offset)
- {
- GD2_DBG (printf ("Positioning in file to %d\n", offset));
- gdSeek (in, offset);
- }
- else
- {
- GD2_DBG (printf ("Already Positioned in file to %d\n", offset));
- };
-
- /* Read and uncompress an entire chunk. */
- GD2_DBG (printf ("Reading file\n"));
- if (gdGetBuf (compBuf, compSize, in) != compSize)
- {
- return FALSE;
- };
- GD2_DBG (printf ("Got %d bytes. Uncompressing into buffer of %d bytes\n", compSize, *chunkLen));
- zerr = uncompress ((unsigned char *) chunkBuf, chunkLen,
- (unsigned char *) compBuf, compSize);
- if (zerr != Z_OK)
- {
- GD2_DBG (printf ("Error %d from uncompress\n", zerr));
- return FALSE;
- };
- GD2_DBG (printf ("Got chunk\n"));
- return TRUE;
-}
-
-gdImagePtr
-gdImageCreateFromGd2 (FILE * inFile)
-{
- gdIOCtx *in = gdNewFileCtx (inFile);
- gdImagePtr im;
-
- im = gdImageCreateFromGd2Ctx (in);
-
- in->free (in);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGd2Ctx (gdIOCtxPtr in)
-{
- int sx, sy;
- int i;
- int ncx, ncy, nc, cs, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int ch, vers, fmt;
- t_chunk_info *chunkIdx = NULL; /* So we can gdFree it with impunity. */
- unsigned char *chunkBuf = NULL; /* So we can gdFree it with impunity. */
- int chunkNum = 0;
- int chunkMax;
- uLongf chunkLen;
- int chunkPos;
- int compMax;
- int bytesPerPixel;
- char *compBuf = NULL; /* So we can gdFree it with impunity. */
-
- gdImagePtr im;
-
- /* Get the header */
- im = _gd2CreateFromFile (in, &sx, &sy, &cs, &vers, &fmt, &ncx, &ncy, &chunkIdx);
-
- if (im == NULL)
- {
- return 0;
- };
- bytesPerPixel = im->trueColor ? 4 : 1;
- nc = ncx * ncy;
-
- if (fmt == GD2_FMT_COMPRESSED)
- {
- /* Find the maximum compressed chunk size. */
- compMax = 0;
- for (i = 0; (i < nc); i++)
- {
- if (chunkIdx[i].size > compMax)
- {
- compMax = chunkIdx[i].size;
- };
- };
- compMax++;
-
- /* Allocate buffers */
- chunkMax = cs * bytesPerPixel * cs;
- chunkBuf = gdCalloc (chunkMax, 1);
- compBuf = gdCalloc (compMax, 1);
- GD2_DBG (printf ("Largest compressed chunk is %d bytes\n", compMax));
- };
-
-/* if ( (ncx != sx / cs) || (ncy != sy / cs)) { */
-/* goto fail2; */
-/* }; */
-
- /* Read the data... */
- for (cy = 0; (cy < ncy); cy++)
- {
- for (cx = 0; (cx < ncx); cx++)
- {
-
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > im->sy)
- {
- yhi = im->sy;
- };
-
- GD2_DBG (printf ("Processing Chunk %d (%d, %d), y from %d to %d\n", chunkNum, cx, cy, ylo, yhi));
-
- if (fmt == GD2_FMT_COMPRESSED)
- {
-
- chunkLen = chunkMax;
-
- if (!_gd2ReadChunk (chunkIdx[chunkNum].offset,
- compBuf,
- chunkIdx[chunkNum].size,
- chunkBuf, &chunkLen, in))
- {
- GD2_DBG (printf ("Error reading comproessed chunk\n"));
- goto fail2;
- };
-
- chunkPos = 0;
- };
-
- for (y = ylo; (y < yhi); y++)
- {
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > im->sx)
- {
- xhi = im->sx;
- };
- /*GD2_DBG(printf("y=%d: ",y)); */
- if (fmt == GD2_FMT_RAW)
- {
- for (x = xlo; x < xhi; x++)
- {
-
- if (im->trueColor)
- {
- if (!gdGetInt (&im->tpixels[y][x], in))
- {
- /*printf("EOF while reading\n"); */
- /*gdImageDestroy(im); */
- /*return 0; */
- im->tpixels[y][x] = 0;
- }
- }
- else
- {
- int ch;
- if (!gdGetByte (&ch, in))
- {
- /*printf("EOF while reading\n"); */
- /*gdImageDestroy(im); */
- /*return 0; */
- ch = 0;
- }
- im->pixels[y][x] = ch;
- }
- }
- }
- else
- {
- for (x = xlo; x < xhi; x++)
- {
- if (im->trueColor)
- {
- /* 2.0.1: work around a gcc bug by being verbose.
- TBB */
- int a = chunkBuf[chunkPos++] << 24;
- int r = chunkBuf[chunkPos++] << 16;
- int g = chunkBuf[chunkPos++] << 8;
- int b = chunkBuf[chunkPos++];
- im->pixels[y][x] = a + r + g + b;
- }
- else
- {
- im->pixels[y][x] = chunkBuf[chunkPos++];
- }
- };
- };
- /*GD2_DBG(printf("\n")); */
- };
- chunkNum++;
- };
- };
-
- GD2_DBG (printf ("Freeing memory\n"));
-
- gdFree (chunkBuf);
- gdFree (compBuf);
- gdFree (chunkIdx);
-
- GD2_DBG (printf ("Done\n"));
-
- return im;
-
-fail2:
- gdImageDestroy (im);
- gdFree (chunkBuf);
- gdFree (compBuf);
- gdFree (chunkIdx);
- return 0;
-
-}
-
-gdImagePtr
-gdImageCreateFromGd2Part (FILE * inFile, int srcx, int srcy, int w, int h)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx (inFile);
-
- im = gdImageCreateFromGd2PartCtx (in, srcx, srcy, w, h);
-
- in->free (in);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGd2PartCtx (gdIOCtx * in, int srcx, int srcy, int w, int h)
-{
- int scx, scy, ecx, ecy, fsx, fsy;
- int nc, ncx, ncy, cs, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int dstart, dpos;
- int i;
- int ch, vers, fmt;
- t_chunk_info *chunkIdx = NULL;
- char *chunkBuf = NULL;
- int chunkNum;
- int chunkMax;
- uLongf chunkLen;
- int chunkPos;
- int compMax;
- char *compBuf = NULL;
-
- gdImagePtr im;
-
- /* */
- /* The next few lines are basically copied from gd2CreateFromFile */
- /* - we change the file size, so don't want to use the code directly. */
- /* but we do need to know the file size. */
- /* */
- if (_gd2GetHeader (in, &fsx, &fsy, &cs, &vers, &fmt, &ncx, &ncy, &chunkIdx) != 1)
- {
- goto fail1;
- }
-
- GD2_DBG (printf ("File size is %dx%d\n", fsx, fsy));
-
- /* This is the difference - make a file based on size of chunks. */
- im = gdImageCreate (w, h);
- if (im == NULL)
- {
- goto fail1;
- };
-
- if (!_gdGetColors (in, im, vers == 2))
- {
- goto fail2;
- }
- GD2_DBG (printf ("Image palette completed: %d colours\n", im->colorsTotal));
-
- /* Process the header info */
- nc = ncx * ncy;
-
- if (fmt == GD2_FMT_COMPRESSED)
- {
- /* Find the maximum compressed chunk size. */
- compMax = 0;
- for (i = 0; (i < nc); i++)
- {
- if (chunkIdx[i].size > compMax)
- {
- compMax = chunkIdx[i].size;
- };
- };
- compMax++;
-
- if (im->trueColor)
- {
- chunkMax = cs * cs * 4;
- }
- else
- {
- chunkMax = cs * cs;
- }
- chunkBuf = gdCalloc (chunkMax, 1);
- compBuf = gdCalloc (compMax, 1);
- };
-
-/* Don't bother with this... */
-/* if ( (ncx != sx / cs) || (ncy != sy / cs)) { */
-/* goto fail2; */
-/* }; */
-
-
- /* Work out start/end chunks */
- scx = srcx / cs;
- scy = srcy / cs;
- if (scx < 0)
- {
- scx = 0;
- };
- if (scy < 0)
- {
- scy = 0;
- };
-
- ecx = (srcx + w) / cs;
- ecy = (srcy + h) / cs;
- if (ecx >= ncx)
- {
- ecx = ncx - 1;
- };
- if (ecy >= ncy)
- {
- ecy = ncy - 1;
- };
-
- /* Remember file position of image data. */
- dstart = gdTell (in);
- GD2_DBG (printf ("Data starts at %d\n", dstart));
-
- /* Loop through the chunks. */
- for (cy = scy; (cy <= ecy); cy++)
- {
-
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > fsy)
- {
- yhi = fsy;
- };
-
- for (cx = scx; (cx <= ecx); cx++)
- {
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > fsx)
- {
- xhi = fsx;
- };
-
- GD2_DBG (printf ("Processing Chunk (%d, %d), from %d to %d\n", cx, cy, ylo, yhi));
-
- if (fmt == GD2_FMT_RAW)
- {
- GD2_DBG (printf ("Using raw format data\n"));
- if (im->trueColor)
- {
- dpos = (cy * (cs * fsx) + cx * cs * (yhi - ylo) * 4) + dstart;
- }
- else
- {
- dpos = cy * (cs * fsx) + cx * cs * (yhi - ylo) + dstart;
- }
-
- if (gdSeek (in, dpos) != 0)
- {
- printf ("Error from seek: %d\n", errno);
- goto fail2;
- };
- GD2_DBG (printf ("Reading (%d, %d) from position %d\n", cx, cy, dpos - dstart));
- }
- else
- {
- chunkNum = cx + cy * ncx;
-
- chunkLen = chunkMax;
- if (!_gd2ReadChunk (chunkIdx[chunkNum].offset,
- compBuf,
- chunkIdx[chunkNum].size,
- chunkBuf, &chunkLen, in))
- {
- printf ("Error reading comproessed chunk\n");
- goto fail2;
- };
- chunkPos = 0;
- GD2_DBG (printf ("Reading (%d, %d) from chunk %d\n", cx, cy, chunkNum));
- };
-
- GD2_DBG (printf (" into (%d, %d) - (%d, %d)\n", xlo, ylo, xhi, yhi));
- for (y = ylo; (y < yhi); y++)
- {
-
- for (x = xlo; x < xhi; x++)
- {
- if (fmt == GD2_FMT_RAW)
- {
- if (im->trueColor)
- {
- if (!gdGetInt (&ch, in))
- {
- ch = 0;
- /*printf("EOF while reading file\n"); */
- /*goto fail2; */
- }
- }
- else
- {
- ch = gdGetC (in);
- if (ch == EOF)
- {
- ch = 0;
- /*printf("EOF while reading file\n"); */
- /*goto fail2; */
- }
- }
- }
- else
- {
- if (im->trueColor)
- {
- ch = chunkBuf[chunkPos++] << 24 +
- chunkBuf[chunkPos++] << 16 +
- chunkBuf[chunkPos++] << 8 +
- chunkBuf[chunkPos++];
- }
- else
- {
- ch = chunkBuf[chunkPos++];
- }
- };
-
- /* Only use a point that is in the image. */
- if ((x >= srcx) && (x < (srcx + w)) && (x < fsx) && (x >= 0)
- && (y >= srcy) && (y < (srcy + h)) && (y < fsy) && (y >= 0)
- )
- {
- im->pixels[y - srcy][x - srcx] = ch;
- }
- };
- };
- };
- };
-
- gdFree (chunkBuf);
- gdFree (compBuf);
- gdFree (chunkIdx);
-
- return im;
-
-fail2:
- gdImageDestroy (im);
-fail1:
- gdFree (chunkBuf);
- gdFree (compBuf);
- gdFree (chunkIdx);
-
- return 0;
-
-}
-
-static
-void
-_gd2PutHeader (gdImagePtr im, gdIOCtx * out, int cs, int fmt, int cx, int cy)
-{
- int i;
-
- /* Send the gd2 id, to verify file format. */
- for (i = 0; i < 4; i++)
- {
- gdPutC ((unsigned char) (GD2_ID[i]), out);
- };
-
- /* */
- /* We put the version info first, so future versions can easily change header info. */
- /* */
- gdPutWord (GD2_VERS, out);
- gdPutWord (im->sx, out);
- gdPutWord (im->sy, out);
- gdPutWord (cs, out);
- gdPutWord (fmt, out);
- gdPutWord (cx, out);
- gdPutWord (cy, out);
-
-}
-
-static void
-_gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
-{
- int ncx, ncy, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int chunkLen;
- int chunkNum = 0;
- char *chunkData = NULL; /* So we can gdFree it with impunity. */
- char *compData = NULL; /* So we can gdFree it with impunity. */
- uLongf compLen;
- int idxPos;
- int idxSize;
- t_chunk_info *chunkIdx = NULL;
- int posSave;
- int bytesPerPixel = im->trueColor ? 4 : 1;
- int compMax;
-
- /*printf("Trying to write GD2 file\n"); */
-
- /* */
- /* Force fmt to a valid value since we don't return anything. */
- /* */
- if ((fmt == 0) || ((fmt != GD2_FMT_RAW) && (fmt != GD2_FMT_COMPRESSED)))
- {
- fmt = GD2_FMT_COMPRESSED;
- };
-
- /* */
- /* Make sure chunk size is valid. These are arbitrary values; 64 because it seems */
- /* a little silly to expect performance improvements on a 64x64 bit scale, and */
- /* 4096 because we buffer one chunk, and a 16MB buffer seems a little largei - it may be */
- /* OK for one user, but for another to read it, they require the buffer. */
- /* */
- if (cs == 0)
- {
- cs = GD2_CHUNKSIZE;
- }
- else if (cs < GD2_CHUNKSIZE_MIN)
- {
- cs = GD2_CHUNKSIZE_MIN;
- }
- else if (cs > GD2_CHUNKSIZE_MAX)
- {
- cs = GD2_CHUNKSIZE_MAX;
- };
-
- /* Work out number of chunks. */
- ncx = im->sx / cs + 1;
- ncy = im->sy / cs + 1;
-
- /* Write the standard header. */
- _gd2PutHeader (im, out, cs, fmt, ncx, ncy);
-
- if (fmt == GD2_FMT_COMPRESSED)
- {
- /* */
- /* Work out size of buffer for compressed data, If CHUNKSIZE is large, */
- /* then these will be large! */
- /* */
- /* The zlib notes say output buffer size should be (input size) * 1.01 * 12 */
- /* - we'll use 1.02 to be paranoid. */
- /* */
- compMax = cs * bytesPerPixel * cs * 1.02 + 12;
-
- /* */
- /* Allocate the buffers. */
- /* */
- chunkData = gdCalloc (cs * bytesPerPixel * cs, 1);
- compData = gdCalloc (compMax, 1);
-
- /* */
- /* Save the file position of chunk index, and allocate enough space for */
- /* each chunk_info block . */
- /* */
- idxPos = gdTell (out);
- idxSize = ncx * ncy * sizeof (t_chunk_info);
- GD2_DBG (printf ("Index size is %d\n", idxSize));
- gdSeek (out, idxPos + idxSize);
-
- chunkIdx = gdCalloc (idxSize * sizeof (t_chunk_info), 1);
- };
-
- _gdPutColors (im, out);
-
- GD2_DBG (printf ("Size: %dx%d\n", im->sx, im->sy));
- GD2_DBG (printf ("Chunks: %dx%d\n", ncx, ncy));
-
- for (cy = 0; (cy < ncy); cy++)
- {
- for (cx = 0; (cx < ncx); cx++)
- {
-
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > im->sy)
- {
- yhi = im->sy;
- };
-
- GD2_DBG (printf ("Processing Chunk (%dx%d), y from %d to %d\n", cx, cy, ylo, yhi));
- chunkLen = 0;
- for (y = ylo; (y < yhi); y++)
- {
-
- /*GD2_DBG(printf("y=%d: ",y)); */
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > im->sx)
- {
- xhi = im->sx;
- };
-
- if (fmt == GD2_FMT_COMPRESSED)
- {
- for (x = xlo; x < xhi; x++)
- {
- int p = im->pixels[y][x];
- /*GD2_DBG(printf("%d...",x)); */
- if (im->trueColor)
- {
- chunkData[chunkLen++] = gdTrueColorGetAlpha (p);
- chunkData[chunkLen++] = gdTrueColorGetRed (p);
- chunkData[chunkLen++] = gdTrueColorGetGreen (p);
- chunkData[chunkLen++] = gdTrueColorGetBlue (p);
- }
- else
- {
- chunkData[chunkLen++] = p;
- }
- };
- }
- else
- {
- for (x = xlo; x < xhi; x++)
- {
- /*GD2_DBG(printf("%d, ",x)); */
-
- if (im->trueColor)
- {
- gdPutInt (im->tpixels[y][x], out);
- }
- else
- {
- gdPutC ((unsigned char) im->pixels[y][x], out);
- }
- };
- };
- /*GD2_DBG(printf("y=%d done.\n",y)); */
- };
- if (fmt == GD2_FMT_COMPRESSED)
- {
- compLen = compMax;
- if (compress ((unsigned char *)
- &compData[0], &compLen,
- (unsigned char *) &chunkData[0],
- chunkLen) != Z_OK)
- {
- printf ("Error from compressing\n");
- }
- else
- {
- chunkIdx[chunkNum].offset = gdTell (out);
- chunkIdx[chunkNum++].size = compLen;
- GD2_DBG (printf ("Chunk %d size %d offset %d\n", chunkNum, chunkIdx[chunkNum - 1].size, chunkIdx[chunkNum - 1].offset));
-
- if (gdPutBuf (compData, compLen, out) <= 0)
- {
- /* Any alternate suggestions for handling this? */
- printf ("Error %d on write\n", errno);
- };
- };
- };
- };
- };
- if (fmt == GD2_FMT_COMPRESSED)
- {
- /* Save the position, write the index, restore position (paranoia). */
- GD2_DBG (printf ("Seeking %d to write index\n", idxPos));
- posSave = gdTell (out);
- gdSeek (out, idxPos);
- GD2_DBG (printf ("Writing index\n"));
- for (x = 0; x < chunkNum; x++)
- {
- GD2_DBG (printf ("Chunk %d size %d offset %d\n", x, chunkIdx[x].size, chunkIdx[x].offset));
- gdPutInt (chunkIdx[x].offset, out);
- gdPutInt (chunkIdx[x].size, out);
- };
- /* We don't use fwrite for *endian reasons. */
- /*fwrite(chunkIdx, sizeof(int)*2, chunkNum, out); */
- gdSeek (out, posSave);
- };
-
- GD2_DBG (printf ("Freeing memory\n"));
- gdFree (chunkData);
- gdFree (compData);
- gdFree (chunkIdx);
- GD2_DBG (printf ("Done\n"));
-
- /*printf("Memory block size is %d\n",gdTell(out)); */
-
-}
-
-void
-gdImageGd2 (gdImagePtr im, FILE * outFile, int cs, int fmt)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- _gdImageGd2 (im, out, cs, fmt);
- out->free (out);
-}
-
-void *
-gdImageGd2Ptr (gdImagePtr im, int cs, int fmt, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- _gdImageGd2 (im, out, cs, fmt);
- rv = gdDPExtractData (out, size);
- out->free (out);
- return rv;
-}
diff --git a/ext/gd/libgd/gd_io.c b/ext/gd/libgd/gd_io.c
deleted file mode 100644
index 7cc49d28fd..0000000000
--- a/ext/gd/libgd/gd_io.c
+++ /dev/null
@@ -1,175 +0,0 @@
-
-
-/*
- * io.c
- *
- * Implements the imple I/O 'helper' routines.
- *
- * Not really essential, but these routines were used extensively in GD,
- * so they were moved here. They also make IOCtx calls look better...
- *
- * Written (or, at least, moved) 1999, Philip Warner.
- *
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define IO_DBG(s) (s) */
-#define IO_DBG(s)
-
-
-/*
- * Write out a word to the I/O context pointer
- */
-void
-Putword (int w, gdIOCtx * ctx)
-{
- unsigned char buf[2];
- buf[0] = w & 0xff;
- buf[1] = (w / 256) & 0xff;
- (ctx->putBuf) (ctx, (char *) buf, 2);
-}
-
-void
-Putchar (int c, gdIOCtx * ctx)
-{
- (ctx->putC) (ctx, c & 0xff);
-}
-
-void
-gdPutC (const unsigned char c, gdIOCtx * ctx)
-{
- (ctx->putC) (ctx, c);
-}
-
-void
-gdPutWord (int w, gdIOCtx * ctx)
-{
- IO_DBG (printf ("Putting word...\n"));
- (ctx->putC) (ctx, (unsigned char) (w >> 8));
- (ctx->putC) (ctx, (unsigned char) (w & 0xFF));
- IO_DBG (printf ("put.\n"));
-}
-
-void
-gdPutInt (int w, gdIOCtx * ctx)
-{
- IO_DBG (printf ("Putting int...\n"));
- (ctx->putC) (ctx, (unsigned char) (w >> 24));
- (ctx->putC) (ctx, (unsigned char) ((w >> 16) & 0xFF));
- (ctx->putC) (ctx, (unsigned char) ((w >> 8) & 0xFF));
- (ctx->putC) (ctx, (unsigned char) (w & 0xFF));
- IO_DBG (printf ("put.\n"));
-}
-
-int
-gdGetC (gdIOCtx * ctx)
-{
- return ((ctx->getC) (ctx));
-}
-
-
-
-int
-gdGetByte (int *result, gdIOCtx * ctx)
-{
- int r;
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result = r;
- return 1;
-}
-
-int
-gdGetWord (int *result, gdIOCtx * ctx)
-{
- int r;
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result = r << 8;
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result += r;
- return 1;
-}
-
-
-int
-gdGetInt (int *result, gdIOCtx * ctx)
-{
- int r;
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result = r << 24;
-
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result += r << 16;
-
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result += r << 8;
-
- r = (ctx->getC) (ctx);
- if (r == EOF)
- {
- return 0;
- }
- *result += r;
-
- return 1;
-}
-
-int
-gdPutBuf (const void *buf, int size, gdIOCtx * ctx)
-{
- IO_DBG (printf ("Putting buf...\n"));
- return (ctx->putBuf) (ctx, buf, size);
- IO_DBG (printf ("put.\n"));
-}
-
-int
-gdGetBuf (void *buf, int size, gdIOCtx * ctx)
-{
- return (ctx->getBuf) (ctx, buf, size);
-}
-
-
-int
-gdSeek (gdIOCtx * ctx, const int pos)
-{
- IO_DBG (printf ("Seeking...\n"));
- return ((ctx->seek) (ctx, pos));
- IO_DBG (printf ("Done.\n"));
-}
-
-long
-gdTell (gdIOCtx * ctx)
-{
- IO_DBG (printf ("Telling...\n"));
- return ((ctx->tell) (ctx));
- IO_DBG (printf ("told.\n"));
-}
diff --git a/ext/gd/libgd/gd_io.h b/ext/gd/libgd/gd_io.h
deleted file mode 100644
index 5c0bd24879..0000000000
--- a/ext/gd/libgd/gd_io.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef GD_IO_H
-#define GD_IO_H 1
-
-#include <stdio.h>
-
-typedef struct gdIOCtx {
- int (*getC)(struct gdIOCtx*);
- int (*getBuf)(struct gdIOCtx*, void*, int);
-
- void (*putC)(struct gdIOCtx*, int);
- int (*putBuf)(struct gdIOCtx*, const void*, int);
-
- int (*seek)(struct gdIOCtx*, const int);
- long (*tell)(struct gdIOCtx*);
-
- void (*free)(struct gdIOCtx*);
-
-} gdIOCtx;
-
-typedef struct gdIOCtx *gdIOCtxPtr;
-
-void Putword(int w, gdIOCtx *ctx);
-void Putchar(int c, gdIOCtx *ctx);
-
-void gdPutC(const unsigned char c, gdIOCtx *ctx);
-int gdPutBuf(const void *, int, gdIOCtx*);
-void gdPutWord(int w, gdIOCtx *ctx);
-void gdPutInt(int w, gdIOCtx *ctx);
-
-int gdGetC(gdIOCtx *ctx);
-int gdGetBuf(void *, int, gdIOCtx*);
-int gdGetByte(int *result, gdIOCtx *ctx);
-int gdGetWord(int *result, gdIOCtx *ctx);
-int gdGetInt(int *result, gdIOCtx *ctx);
-
-int gdSeek(gdIOCtx *ctx, const int);
-long gdTell(gdIOCtx *ctx);
-
-#endif
diff --git a/ext/gd/libgd/gd_io_dp.c b/ext/gd/libgd/gd_io_dp.c
deleted file mode 100644
index d28dfb01a4..0000000000
--- a/ext/gd/libgd/gd_io_dp.c
+++ /dev/null
@@ -1,419 +0,0 @@
-
-/*
- * io_dp.c
- *
- * Implements the dynamic pointer interface.
- *
- * Based on GD.pm code by Lincoln Stein for interfacing to libgd.
- * Added support for reading as well as support for 'tell' and 'seek'.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * gdDPExtractData is the exception to this: it will return the pointer to
- * the internal data, and reset the internal storage.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* this is used for creating images in main memory */
-typedef struct dpStruct
- {
- void *data;
- int logicalSize;
- int realSize;
- int dataGood;
- int pos;
- }
-dynamicPtr;
-
-typedef struct dpIOCtx
- {
- gdIOCtx ctx;
- dynamicPtr *dp;
- }
-dpIOCtx;
-
-typedef struct dpIOCtx *dpIOCtxPtr;
-
-
-/* these functions operate on in-memory dynamic pointers */
-static int allocDynamic (dynamicPtr * dp, int initialSize, void *data);
-static int appendDynamic (dynamicPtr * dp, const void *src, int size);
-static int gdReallocDynamic (dynamicPtr * dp, int required);
-static int trimDynamic (dynamicPtr * dp);
-static void gdFreeDynamicCtx (struct gdIOCtx *ctx);
-static dynamicPtr *newDynamic (int initialSize, void *data);
-
-static int dynamicPutbuf (struct gdIOCtx *, const void *, int);
-static void dynamicPutchar (struct gdIOCtx *, int a);
-
-static int dynamicGetbuf (gdIOCtxPtr ctx, void *buf, int len);
-static int dynamicGetchar (gdIOCtxPtr ctx);
-
-static int dynamicSeek (struct gdIOCtx *, const int);
-static long dynamicTell (struct gdIOCtx *);
-
-/* return data as a dynamic pointer */
-gdIOCtx *
-gdNewDynamicCtx (int initialSize, void *data)
-{
- dpIOCtx *ctx;
- dynamicPtr *dp;
-
- ctx = (dpIOCtx *) gdMalloc (sizeof (dpIOCtx));
- if (ctx == NULL)
- {
- return NULL;
- }
-
- dp = newDynamic (initialSize, data);
- if (!dp)
- {
- gdFree (ctx);
- return NULL;
- };
-
- ctx->dp = dp;
-
- ctx->ctx.getC = dynamicGetchar;
- ctx->ctx.putC = dynamicPutchar;
-
- ctx->ctx.getBuf = dynamicGetbuf;
- ctx->ctx.putBuf = dynamicPutbuf;
-
- ctx->ctx.seek = dynamicSeek;
- ctx->ctx.tell = dynamicTell;
-
- ctx->ctx.free = gdFreeDynamicCtx;
-
- return (gdIOCtx *) ctx;
-}
-
-void *
-gdDPExtractData (struct gdIOCtx *ctx, int *size)
-{
- dynamicPtr *dp;
- dpIOCtx *dctx;
- void *data;
-
- dctx = (dpIOCtx *) ctx;
- dp = dctx->dp;
-
- /* clean up the data block and return it */
- if (dp->dataGood)
- {
- trimDynamic (dp);
- *size = dp->logicalSize;
- data = dp->data;
- }
- else
- {
- *size = 0;
- data = NULL;
- if (dp->data != NULL)
- {
- gdFree (dp->data);
- }
- }
-
- dp->data = NULL;
- dp->realSize = 0;
- dp->logicalSize = 0;
-
- return data;
-}
-
-static
-void
-gdFreeDynamicCtx (struct gdIOCtx *ctx)
-{
- dynamicPtr *dp;
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *) ctx;
- dp = dctx->dp;
-
- gdFree (ctx);
-
- /* clean up the data block and return it */
- if (dp->data != NULL)
- {
- gdFree (dp->data);
- dp->data = NULL;
- }
-
- dp->realSize = 0;
- dp->logicalSize = 0;
-
- gdFree (dp);
-
-}
-
-static long
-dynamicTell (struct gdIOCtx *ctx)
-{
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *) ctx;
- return (dctx->dp->pos);
-}
-
-static int
-dynamicSeek (struct gdIOCtx *ctx, const int pos)
-{
- int bytesNeeded;
- dynamicPtr *dp;
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *) ctx;
- dp = dctx->dp;
-
- if (!dp->dataGood)
- return FALSE;
-
- bytesNeeded = pos;
- if (bytesNeeded > dp->realSize)
- {
- if (!gdReallocDynamic (dp, dp->realSize * 2))
- {
- dp->dataGood = FALSE;
- return FALSE;
- }
- }
-
- /* if we get here, we can be sure that we have enough bytes
- to copy safely */
-
- /* Extend the logical size if we seek beyond EOF. */
- if (pos > dp->logicalSize)
- {
- dp->logicalSize = pos;
- };
-
- dp->pos = pos;
-
- return TRUE;
-}
-
-/* return data as a dynamic pointer */
-static dynamicPtr *
-newDynamic (int initialSize, void *data)
-{
- dynamicPtr *dp;
- dp = (dynamicPtr *) gdMalloc (sizeof (dynamicPtr));
- if (dp == NULL)
- {
- return NULL;
- }
-
- if (!allocDynamic (dp, initialSize, data))
- return NULL;
-
- dp->pos = 0;
-
- return dp;
-}
-
-static int
-dynamicPutbuf (struct gdIOCtx *ctx, const void *buf, int size)
-{
- dpIOCtx *dctx;
- dctx = (dpIOCtx *) ctx;
-
- appendDynamic (dctx->dp, buf, size);
-
- if (dctx->dp->dataGood)
- {
- return size;
- }
- else
- {
- return -1;
- };
-
-}
-
-static void
-dynamicPutchar (struct gdIOCtx *ctx, int a)
-{
- unsigned char b;
- dpIOCtxPtr dctx;
-
- b = a;
- dctx = (dpIOCtxPtr) ctx;
-
- appendDynamic (dctx->dp, &b, 1);
-}
-
-static int
-dynamicGetbuf (gdIOCtxPtr ctx, void *buf, int len)
-{
- int rlen, remain;
- dpIOCtxPtr dctx;
- dynamicPtr *dp;
-
- dctx = (dpIOCtxPtr) ctx;
- dp = dctx->dp;
-
- remain = dp->logicalSize - dp->pos;
- if (remain >= len)
- {
- rlen = len;
- }
- else
- {
- if (remain == 0)
- {
- return EOF;
- }
- rlen = remain;
- }
-
- memcpy (buf, (void *) ((char *) dp->data + dp->pos), rlen);
- dp->pos += rlen;
-
- return rlen;
-}
-
-static int
-dynamicGetchar (gdIOCtxPtr ctx)
-{
- unsigned char b;
- int rv;
-
- rv = dynamicGetbuf (ctx, &b, 1);
-
- if (rv != 1)
- {
- return EOF;
- }
- else
- {
- return b; /* (b & 0xff); */
- }
-}
-
-/* *********************************************************************
-
- * InitDynamic - Return a dynamically resizable void*
- *
- * *********************************************************************
- */
-static int
-allocDynamic (dynamicPtr * dp, int initialSize, void *data)
-{
-
- if (data == NULL)
- {
- dp->logicalSize = 0;
- dp->dataGood = FALSE;
- dp->data = gdMalloc (initialSize);
- }
- else
- {
- dp->logicalSize = initialSize;
- dp->dataGood = TRUE;
- dp->data = data;
- }
-
- if (dp->data != NULL)
- {
- dp->realSize = initialSize;
- dp->dataGood = TRUE;
- dp->pos = 0;
- return TRUE;
- }
- else
- {
- dp->realSize = 0;
- return FALSE;
- }
-}
-
-/* append bytes to the end of a dynamic pointer */
-static int
-appendDynamic (dynamicPtr * dp, const void *src, int size)
-{
- int bytesNeeded;
- char *tmp;
-
- if (!dp->dataGood)
- return FALSE;
-
-/* bytesNeeded = dp->logicalSize + size; */
- bytesNeeded = dp->pos + size;
-
- if (bytesNeeded > dp->realSize)
- {
- if (!gdReallocDynamic (dp, bytesNeeded * 2))
- {
- dp->dataGood = FALSE;
- return FALSE;
- }
- }
-
- /* if we get here, we can be sure that we have enough bytes
- to copy safely */
- /*printf("Mem OK Size: %d, Pos: %d\n", dp->realSize, dp->pos); */
-
- tmp = (char *) dp->data;
- memcpy ((void *) (tmp + (dp->pos)), src, size);
- dp->pos += size;
-
- if (dp->pos > dp->logicalSize)
- {
- dp->logicalSize = dp->pos;
- };
-
- return TRUE;
-}
-
-/* grow (or shrink) dynamic pointer */
-static int
-gdReallocDynamic (dynamicPtr * dp, int required)
-{
- void *newPtr;
-
- /* First try gdRealloc(). If that doesn't work, make a new
- memory block and copy. */
- if ((newPtr = gdRealloc (dp->data, required)))
- {
- dp->realSize = required;
- dp->data = newPtr;
- return TRUE;
- }
-
- /* create a new pointer */
- newPtr = gdMalloc (required);
- if (!newPtr)
- {
- dp->dataGood = FALSE;
- return FALSE;
- }
-
- /* copy the old data into it */
- memcpy (newPtr, dp->data, dp->logicalSize);
- gdFree (dp->data);
- dp->data = newPtr;
-
- dp->realSize = required;
- return TRUE;
-}
-
-/* trim pointer so that its real and logical sizes match */
-static int
-trimDynamic (dynamicPtr * dp)
-{
- return gdReallocDynamic (dp, dp->logicalSize);
-}
diff --git a/ext/gd/libgd/gd_io_file.c b/ext/gd/libgd/gd_io_file.c
deleted file mode 100644
index d0efd1af79..0000000000
--- a/ext/gd/libgd/gd_io_file.c
+++ /dev/null
@@ -1,145 +0,0 @@
-
-/*
- * io_file.c
- *
- * Implements the file interface.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * Most functions are just 'wrappers' for standard file functions.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-/* For platforms with incomplete ANSI defines. Fortunately,
- SEEK_SET is defined to be zero by the standard. */
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif /* SEEK_SET */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* this is used for creating images in main memory */
-
-typedef struct fileIOCtx
- {
- gdIOCtx ctx;
- FILE *f;
- }
-fileIOCtx;
-
-struct fileIOCtx *fileIOCtxPtr;
-
-gdIOCtx *newFileCtx (FILE * f);
-
-static int fileGetbuf (gdIOCtx *, void *, int);
-static int filePutbuf (gdIOCtx *, const void *, int);
-static void filePutchar (gdIOCtx *, int);
-static int fileGetchar (gdIOCtx * ctx);
-
-static int fileSeek (struct gdIOCtx *, const int);
-static long fileTell (struct gdIOCtx *);
-static void gdFreeFileCtx (gdIOCtx * ctx);
-
-/* return data as a dynamic pointer */
-gdIOCtx *
-gdNewFileCtx (FILE * f)
-{
- fileIOCtx *ctx;
-
- ctx = (fileIOCtx *) gdMalloc (sizeof (fileIOCtx));
- if (ctx == NULL)
- {
- return NULL;
- }
-
- ctx->f = f;
-
- ctx->ctx.getC = fileGetchar;
- ctx->ctx.putC = filePutchar;
-
- ctx->ctx.getBuf = fileGetbuf;
- ctx->ctx.putBuf = filePutbuf;
-
- ctx->ctx.tell = fileTell;
- ctx->ctx.seek = fileSeek;
-
- ctx->ctx.free = gdFreeFileCtx;
-
- return (gdIOCtx *) ctx;
-}
-
-static
-void
-gdFreeFileCtx (gdIOCtx * ctx)
-{
- gdFree (ctx);
-}
-
-
-static int
-filePutbuf (gdIOCtx * ctx, const void *buf, int size)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return fwrite (buf, 1, size, fctx->f);
-
-}
-
-static int
-fileGetbuf (gdIOCtx * ctx, void *buf, int size)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return (fread (buf, 1, size, fctx->f));
-
-}
-
-static void
-filePutchar (gdIOCtx * ctx, int a)
-{
- unsigned char b;
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- b = a;
-
- putc (b, fctx->f);
-}
-
-static int
-fileGetchar (gdIOCtx * ctx)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return getc (fctx->f);
-}
-
-
-static int
-fileSeek (struct gdIOCtx *ctx, const int pos)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return (fseek (fctx->f, pos, SEEK_SET) == 0);
-}
-
-static long
-fileTell (struct gdIOCtx *ctx)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return ftell (fctx->f);
-}
diff --git a/ext/gd/libgd/gd_io_ss.c b/ext/gd/libgd/gd_io_ss.c
deleted file mode 100644
index 1ea78d568b..0000000000
--- a/ext/gd/libgd/gd_io_ss.c
+++ /dev/null
@@ -1,165 +0,0 @@
-
-/*
- * io_ss.c
- *
- * Implements the Source/Sink interface.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * The Source/Sink model is the primary 'user' interface for alternate data
- * sources; the IOCtx interface is intended (at least in version 1.5) to be
- * used internally until it settles down a bit.
- *
- * This module just layers the Source/Sink interface on top of the IOCtx; no
- * support is provided for tell/seek, so GD2 writing is not possible, and
- * retrieving parts of GD2 files is also not possible.
- *
- * A new SS context does not need to be created with both a Source and a Sink.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* this is used for creating images in main memory */
-
-typedef struct ssIOCtx
- {
- gdIOCtx ctx;
- gdSourcePtr src;
- gdSinkPtr snk;
- }
-ssIOCtx;
-
-typedef struct ssIOCtx *ssIOCtxPtr;
-
-gdIOCtx *gdNewSSCtx (gdSourcePtr src, gdSinkPtr snk);
-
-static int sourceGetbuf (gdIOCtx *, void *, int);
-static int sourceGetchar (gdIOCtx * ctx);
-static int sinkPutbuf (gdIOCtx * ctx, const void *buf, int size);
-static void sinkPutchar (gdIOCtx * ctx, int a);
-static void gdFreeSsCtx (gdIOCtx * ctx);
-
-/* return data as a dynamic pointer */
-gdIOCtx *
-gdNewSSCtx (gdSourcePtr src, gdSinkPtr snk)
-{
- ssIOCtxPtr ctx;
-
- ctx = (ssIOCtxPtr) gdMalloc (sizeof (ssIOCtx));
- if (ctx == NULL)
- {
- return NULL;
- }
-
- ctx->src = src;
- ctx->snk = snk;
-
- ctx->ctx.getC = sourceGetchar;
- ctx->ctx.getBuf = sourceGetbuf;
-
- ctx->ctx.putC = sinkPutchar;
- ctx->ctx.putBuf = sinkPutbuf;
-
- ctx->ctx.tell = NULL;
- ctx->ctx.seek = NULL;
-
- ctx->ctx.free = gdFreeSsCtx;
-
- return (gdIOCtx *) ctx;
-}
-
-static
-void
-gdFreeSsCtx (gdIOCtx * ctx)
-{
- gdFree (ctx);
-}
-
-
-static int
-sourceGetbuf (gdIOCtx * ctx, void *buf, int size)
-{
- ssIOCtx *lctx;
- int res;
-
- lctx = (ssIOCtx *) ctx;
-
- res = ((lctx->src->source) (lctx->src->context, buf, size));
-
-/*
- ** Translate the return values from the Source object:
- ** 0 is EOF, -1 is error
- */
-
- if (res == 0)
- {
- return EOF;
- }
- else if (res < 0)
- {
- return 0;
- }
- else
- {
- return res;
- };
-
-}
-
-static int
-sourceGetchar (gdIOCtx * ctx)
-{
- int res;
- unsigned char buf;
-
- res = sourceGetbuf (ctx, &buf, 1);
-
- if (res == 1)
- {
- return buf;
- }
- else
- {
- return EOF;
- };
-
-}
-
-static int
-sinkPutbuf (gdIOCtx * ctx, const void *buf, int size)
-{
- ssIOCtxPtr lctx;
- int res;
-
- lctx = (ssIOCtx *) ctx;
-
- res = (lctx->snk->sink) (lctx->snk->context, buf, size);
-
- if (res <= 0)
- {
- return 0;
- }
- else
- {
- return res;
- };
-
-}
-
-static void
-sinkPutchar (gdIOCtx * ctx, int a)
-{
- unsigned char b;
-
- b = a;
- sinkPutbuf (ctx, &b, 1);
-
-}
diff --git a/ext/gd/libgd/gd_jpeg.c b/ext/gd/libgd/gd_jpeg.c
deleted file mode 100644
index 8d3614c343..0000000000
--- a/ext/gd/libgd/gd_jpeg.c
+++ /dev/null
@@ -1,852 +0,0 @@
-
-
-/*
- * gd_jpeg.c: Read and write JPEG (JFIF) format image files using the
- * gd graphics library (http://www.boutell.com/gd/).
- *
- * This software is based in part on the work of the Independent JPEG
- * Group. For more information on the IJG JPEG software (and JPEG
- * documentation, etc.), see ftp://ftp.uu.net/graphics/jpeg/.
- *
- * NOTE: IJG 12-bit JSAMPLE (BITS_IN_JSAMPLE == 12) mode is not
- * supported at all on read in gd 2.0, and is not supported on write
- * except for palette images, which is sort of pointless (TBB). Even that
- * has never been tested according to DB.
- *
- * Copyright 2000 Doug Becker, mailto:thebeckers@home.com
- *
- * Modification 4/18/00 TBB: JPEG_DEBUG rather than just DEBUG,
- * so VC++ builds don't spew to standard output, causing
- * major CGI brain damage
- */
-
-/* TBB: move this up so include files are not brought in */
-#ifdef HAVE_LIBJPEG
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <limits.h>
-#include <string.h>
-
-/* 1.8.1: remove dependency on jinclude.h */
-#include "jpeglib.h"
-#include "jerror.h"
-#include "gd.h"
-#include "gdhelpers.h"
-
-static const char *const GD_JPEG_VERSION = "1.0";
-
-typedef struct _jmpbuf_wrapper
- {
- jmp_buf jmpbuf;
- }
-jmpbuf_wrapper;
-
-/* Called by the IJG JPEG library upon encountering a fatal error */
-static void
-fatal_jpeg_error (j_common_ptr cinfo)
-{
- jmpbuf_wrapper *jmpbufw;
-
- fprintf (stderr, "gd-jpeg: JPEG library reports unrecoverable error: ");
- (*cinfo->err->output_message) (cinfo);
- fflush (stderr);
-
- jmpbufw = (jmpbuf_wrapper *) cinfo->client_data;
- jpeg_destroy (cinfo);
-
- if (jmpbufw != 0)
- {
- longjmp (jmpbufw->jmpbuf, 1);
- fprintf (stderr, "gd-jpeg: EXTREMELY fatal error: longjmp"
- " returned control; terminating\n");
- }
- else
- {
- fprintf (stderr, "gd-jpeg: EXTREMELY fatal error: jmpbuf"
- " unrecoverable; terminating\n");
- }
-
- fflush (stderr);
- exit (99);
-}
-
-/*
- * Write IM to OUTFILE as a JFIF-formatted JPEG image, using quality
- * QUALITY. If QUALITY is in the range 0-100, increasing values
- * represent higher quality but also larger image size. If QUALITY is
- * negative, the IJG JPEG library's default quality is used (which
- * should be near optimal for many applications). See the IJG JPEG
- * library documentation for more details. */
-
-void
-gdImageJpeg (gdImagePtr im, FILE * outFile, int quality)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- gdImageJpegCtx (im, out, quality);
- out->free (out);
-}
-
-void *
-gdImageJpegPtr (gdImagePtr im, int *size, int quality)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- gdImageJpegCtx (im, out, quality);
- rv = gdDPExtractData (out, size);
- out->free (out);
- return rv;
-}
-
-void jpeg_gdIOCtx_dest (j_compress_ptr cinfo, gdIOCtx * outfile);
-
-void
-gdImageJpegCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
-{
- struct jpeg_compress_struct cinfo;
- struct jpeg_error_mgr jerr;
- int i, j, jidx;
- /* volatile so we can gdFree it on return from longjmp */
- volatile JSAMPROW row = 0;
- JSAMPROW rowptr[1];
- jmpbuf_wrapper jmpbufw;
- JDIMENSION nlines;
- char comment[255];
-
-#ifdef JPEG_DEBUG
- printf ("gd-jpeg: gd JPEG version %s\n", GD_JPEG_VERSION);
- printf ("gd-jpeg: JPEG library version %d, %d-bit sample values\n",
- JPEG_LIB_VERSION, BITS_IN_JSAMPLE);
- if (!im->trueColor)
- {
- for (i = 0; i < im->colorsTotal; i++)
- {
- if (!im->open[i])
- printf ("gd-jpeg: gd colormap index %d: (%d, %d, %d)\n", i,
- im->red[i], im->green[i], im->blue[i]);
- }
- }
-#endif /* JPEG_DEBUG */
-
- memset (&cinfo, 0, sizeof (cinfo));
- memset (&jerr, 0, sizeof (jerr));
-
- cinfo.err = jpeg_std_error (&jerr);
- cinfo.client_data = &jmpbufw;
- if (setjmp (jmpbufw.jmpbuf) != 0)
- {
- /* we're here courtesy of longjmp */
- if (row)
- gdFree (row);
- return;
- }
-
- cinfo.err->error_exit = fatal_jpeg_error;
-
- jpeg_create_compress (&cinfo);
-
- cinfo.image_width = im->sx;
- cinfo.image_height = im->sy;
- cinfo.input_components = 3; /* # of color components per pixel */
- cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
- jpeg_set_defaults (&cinfo);
- if (quality >= 0)
- jpeg_set_quality (&cinfo, quality, TRUE);
-
- /* If user requests interlace, translate that to progressive JPEG */
- if (gdImageGetInterlaced (im))
- {
-#ifdef JPEG_DEBUG
- printf ("gd-jpeg: interlace set, outputting progressive"
- " JPEG image\n");
-#endif
- jpeg_simple_progression (&cinfo);
- }
-
- jpeg_gdIOCtx_dest (&cinfo, outfile);
-
- row = (JSAMPROW) gdCalloc (1, cinfo.image_width * cinfo.input_components
- * sizeof (JSAMPLE));
- if (row == 0)
- {
- fprintf (stderr, "gd-jpeg: error: unable to allocate JPEG row "
- "structure: gdCalloc returns NULL\n");
- jpeg_destroy_compress (&cinfo);
- return;
- }
-
- rowptr[0] = row;
-
- jpeg_start_compress (&cinfo, TRUE);
-
- sprintf (comment, "CREATOR: gd-jpeg v%s (using IJG JPEG v%d),",
- GD_JPEG_VERSION, JPEG_LIB_VERSION);
- if (quality >= 0)
- sprintf (comment + strlen (comment), " quality = %d\n",
- quality);
- else
- strcat (comment + strlen (comment), " default quality\n");
- jpeg_write_marker (&cinfo, JPEG_COM, (unsigned char *) comment,
- (unsigned int) strlen (comment));
- if (im->trueColor)
- {
-#if BITS_IN_JSAMPLE == 12
- fprintf (stderr, "gd-jpeg: error: jpeg library was compiled for 12-bit\n"
- "precision. This is mostly useless, because JPEGs on the web are\n"
- "8-bit and such versions of the jpeg library won't read or write\n"
- "them. GD doesn't support these unusual images. Edit your\n"
- "jmorecfg.h file to specify the correct precision and completely\n"
- "'make clean' and 'make install' libjpeg again. Sorry.\n");
- goto error;
-#endif /* BITS_IN_JSAMPLE == 12 */
- for (i = 0; i < im->sy; i++)
- {
- for (jidx = 0, j = 0; j < im->sx; j++)
- {
- int val = im->tpixels[i][j];
- row[jidx++] = gdTrueColorGetRed (val);
- row[jidx++] = gdTrueColorGetGreen (val);
- row[jidx++] = gdTrueColorGetBlue (val);
- }
-
- nlines = jpeg_write_scanlines (&cinfo, rowptr, 1);
- if (nlines != 1)
- fprintf (stderr, "gd_jpeg: warning: jpeg_write_scanlines"
- " returns %u -- expected 1\n", nlines);
- }
- }
- else
- {
- for (i = 0; i < im->sy; i++)
- {
- for (jidx = 0, j = 0; j < im->sx; j++)
- {
- int idx = im->pixels[i][j];
-
- /*
- * NB: Although gd RGB values are ints, their max value is
- * 255 (see the documentation for gdImageColorAllocate())
- * -- perfect for 8-bit JPEG encoding (which is the norm)
- */
-#if BITS_IN_JSAMPLE == 8
- row[jidx++] = im->red[idx];
- row[jidx++] = im->green[idx];
- row[jidx++] = im->blue[idx];
-#elif BITS_IN_JSAMPLE == 12
- row[jidx++] = im->red[idx] << 4;
- row[jidx++] = im->green[idx] << 4;
- row[jidx++] = im->blue[idx] << 4;
-#else
-#error IJG JPEG library BITS_IN_JSAMPLE value must be 8 or 12
-#endif
- }
-
- nlines = jpeg_write_scanlines (&cinfo, rowptr, 1);
- if (nlines != 1)
- fprintf (stderr, "gd_jpeg: warning: jpeg_write_scanlines"
- " returns %u -- expected 1\n", nlines);
- }
- }
- jpeg_finish_compress (&cinfo);
-error:
- jpeg_destroy_compress (&cinfo);
- gdFree (row);
-}
-
-gdImagePtr
-gdImageCreateFromJpeg (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx (inFile);
- im = gdImageCreateFromJpegCtx (in);
- in->free (in);
- return im;
-}
-
-void
- jpeg_gdIOCtx_src (j_decompress_ptr cinfo,
- gdIOCtx * infile);
-
-/*
- * Create a gd-format image from the JPEG-format INFILE. Returns the
- * image, or NULL upon error.
- */
-gdImagePtr
-gdImageCreateFromJpegCtx (gdIOCtx * infile)
-{
- struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
- jmpbuf_wrapper jmpbufw;
- /* volatile so we can gdFree them after longjmp */
- volatile JSAMPROW row = 0;
- volatile gdImagePtr im = 0;
- JSAMPROW rowptr[1];
- int i, j, retval;
- JDIMENSION nrows;
-
-#ifdef JPEG_DEBUG
- printf ("gd-jpeg: gd JPEG version %s\n", GD_JPEG_VERSION);
- printf ("gd-jpeg: JPEG library version %d, %d-bit sample values\n",
- JPEG_LIB_VERSION, BITS_IN_JSAMPLE);
-#endif
-
- memset (&cinfo, 0, sizeof (cinfo));
- memset (&jerr, 0, sizeof (jerr));
-
- cinfo.err = jpeg_std_error (&jerr);
- cinfo.client_data = &jmpbufw;
- if (setjmp (jmpbufw.jmpbuf) != 0)
- {
- /* we're here courtesy of longjmp */
- if (row)
- gdFree (row);
- if (im)
- gdImageDestroy (im);
- return 0;
- }
-
- cinfo.err->error_exit = fatal_jpeg_error;
-
- jpeg_create_decompress (&cinfo);
-
- jpeg_gdIOCtx_src (&cinfo, infile);
-
- retval = jpeg_read_header (&cinfo, TRUE);
- if (retval != JPEG_HEADER_OK)
- fprintf (stderr, "gd-jpeg: warning: jpeg_read_header returns"
- " %d, expected %d\n", retval, JPEG_HEADER_OK);
-
- if (cinfo.image_height > INT_MAX)
- fprintf (stderr, "gd-jpeg: warning: JPEG image height (%u) is"
- " greater than INT_MAX (%d) (and thus greater than"
- " gd can handle)", cinfo.image_height,
- INT_MAX);
-
- if (cinfo.image_width > INT_MAX)
- fprintf (stderr, "gd-jpeg: warning: JPEG image width (%u) is"
- " greater than INT_MAX (%d) (and thus greater than"
- " gd can handle)\n", cinfo.image_width, INT_MAX);
-
- im = gdImageCreateTrueColor ((int) cinfo.image_width,
- (int) cinfo.image_height);
- if (im == 0)
- {
- fprintf (stderr, "gd-jpeg error: cannot allocate gdImage"
- " struct\n");
- goto error;
- }
-
- /*
- * Force the image into RGB colorspace, but don't
- * reduce the number of colors anymore (GD 2.0)
- */
- cinfo.out_color_space = JCS_RGB;
-
- if (jpeg_start_decompress (&cinfo) != TRUE)
- fprintf (stderr, "gd-jpeg: warning: jpeg_start_decompress"
- " reports suspended data source\n");
-
-#ifdef JPEG_DEBUG
- printf ("gd-jpeg: JPEG image information:");
- if (cinfo.saw_JFIF_marker)
- printf (" JFIF version %d.%.2d",
- (int) cinfo.JFIF_major_version,
- (int) cinfo.JFIF_minor_version);
- else if (cinfo.saw_Adobe_marker)
- printf (" Adobe format");
- else
- printf (" UNKNOWN format");
-
- printf (" %ux%u (raw) / %ux%u (scaled) %d-bit", cinfo.image_width,
- cinfo.image_height, cinfo.output_width,
- cinfo.output_height, cinfo.data_precision);
- printf (" %s", (cinfo.progressive_mode ? "progressive" :
- "baseline"));
- printf (" image, %d quantized colors, ",
- cinfo.actual_number_of_colors);
-
- switch (cinfo.jpeg_color_space)
- {
- case JCS_GRAYSCALE:
- printf ("grayscale");
- break;
-
- case JCS_RGB:
- printf ("RGB");
- break;
-
- case JCS_YCbCr:
- printf ("YCbCr (a.k.a. YUV)");
- break;
-
- case JCS_CMYK:
- printf ("CMYK");
- break;
-
- case JCS_YCCK:
- printf ("YCbCrK");
- break;
-
- default:
- printf ("UNKNOWN (value: %d)", (int) cinfo.jpeg_color_space);
- break;
- }
- printf (" colorspace\n");
- fflush (stdout);
-#endif /* JPEG_DEBUG */
-
- /* REMOVED by TBB 2/12/01. This field of the structure is
- documented as private, and sure enough it's gone in the
- latest libjpeg, replaced by something else. Unfortunately
- there is still no right way to find out if the file was
- progressive or not; just declare your intent before you
- write one by calling gdImageInterlace(im, 1) yourself.
- After all, we're not really supposed to rework JPEGs and
- write them out again anyway. Lossy compression, remember? */
-#if 0
- gdImageInterlace (im, cinfo.progressive_mode != 0);
-#endif
- if (cinfo.output_components != 3)
- {
- fprintf (stderr, "gd-jpeg: error: JPEG color quantization"
- " request resulted in output_components == %d"
- " (expected 3)\n", cinfo.output_components);
- goto error;
- }
-
-#if BITS_IN_JSAMPLE == 12
- fprintf (stderr, "gd-jpeg: error: jpeg library was compiled for 12-bit\n"
- "precision. This is mostly useless, because JPEGs on the web are\n"
- "8-bit and such versions of the jpeg library won't read or write\n"
- "them. GD doesn't support these unusual images. Edit your\n"
- "jmorecfg.h file to specify the correct precision and completely\n"
- "'make clean' and 'make install' libjpeg again. Sorry.\n");
- goto error;
-#endif /* BITS_IN_JSAMPLE == 12 */
-
- row = gdCalloc (cinfo.output_width * 3, sizeof (JSAMPLE));
- if (row == 0)
- {
- fprintf (stderr, "gd-jpeg: error: unable to allocate row for"
- " JPEG scanline: gdCalloc returns NULL\n");
- goto error;
- }
- rowptr[0] = row;
-
- for (i = 0; i < cinfo.output_height; i++)
- {
- nrows = jpeg_read_scanlines (&cinfo, rowptr, 1);
- if (nrows != 1)
- {
- fprintf (stderr, "gd-jpeg: error: jpeg_read_scanlines"
- " returns %u, expected 1\n", nrows);
- goto error;
- }
-
- for (j = 0; j < cinfo.output_width; j++)
- im->tpixels[i][j] = gdTrueColor (row[j * 3], row[j * 3 + 1],
- row[j * 3 + 2]);
- }
-
- if (jpeg_finish_decompress (&cinfo) != TRUE)
- fprintf (stderr, "gd-jpeg: warning: jpeg_finish_decompress"
- " reports suspended data source\n");
-
-
- jpeg_destroy_decompress (&cinfo);
- gdFree (row);
- return im;
-
-error:
- jpeg_destroy_decompress (&cinfo);
- if (row)
- gdFree (row);
- if (im)
- gdImageDestroy (im);
- return 0;
-}
-
-/*
-
- * gdIOCtx JPEG data sources and sinks, T. Boutell
- * almost a simple global replace from T. Lane's stdio versions.
- *
- */
-
-/* Different versions of libjpeg use either 'jboolean' or 'boolean', and
- some platforms define 'boolean', and so forth. Deal with this
- madness by typedeffing 'safeboolean' to 'boolean' if HAVE_BOOLEAN
- is already set, because this is the test that libjpeg uses.
- Otherwise, typedef it to int, because that's what libjpeg does
- if HAVE_BOOLEAN is not defined. -TBB */
-
-#ifdef HAVE_BOOLEAN
-typedef boolean safeboolean;
-#else
-typedef int safeboolean;
-#endif /* HAVE_BOOLEAN */
-
-/* Expanded data source object for gdIOCtx input */
-
-typedef struct
- {
- struct jpeg_source_mgr pub; /* public fields */
-
- gdIOCtx *infile; /* source stream */
- unsigned char *buffer; /* start of buffer */
- safeboolean start_of_file; /* have we gotten any data yet? */
-
- }
-my_source_mgr;
-
-typedef my_source_mgr *my_src_ptr;
-
-#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */
-
-/*
- * Initialize source --- called by jpeg_read_header
- * before any data is actually read.
- */
-
-void
-init_source (j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
-
- /* We reset the empty-input-file flag for each image,
- * but we don't clear the input buffer.
- * This is correct behavior for reading a series of images from one source.
- */
- src->start_of_file = TRUE;
-}
-
-
-/*
- * Fill the input buffer --- called whenever buffer is emptied.
- *
- * In typical applications, this should read fresh data into the buffer
- * (ignoring the current state of next_input_byte & bytes_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been reloaded. It is not necessary to
- * fill the buffer entirely, only to obtain at least one more byte.
- *
- * There is no such thing as an EOF return. If the end of the file has been
- * reached, the routine has a choice of ERREXIT() or inserting fake data into
- * the buffer. In most cases, generating a warning message and inserting a
- * fake EOI marker is the best course of action --- this will allow the
- * decompressor to output however much of the image is there. However,
- * the resulting error message is misleading if the real problem is an empty
- * input file, so we handle that case specially.
- *
- * In applications that need to be able to suspend compression due to input
- * not being available yet, a FALSE return indicates that no more data can be
- * obtained right now, but more may be forthcoming later. In this situation,
- * the decompressor will return to its caller (with an indication of the
- * number of scanlines it has read, if any). The application should resume
- * decompression after it has loaded more data into the input buffer. Note
- * that there are substantial restrictions on the use of suspension --- see
- * the documentation.
- *
- * When suspending, the decompressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_input_byte & bytes_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point must be rescanned after resumption, so move it to
- * the front of the buffer rather than discarding it.
- */
-
-#define END_JPEG_SEQUENCE "\r\n[*]--:END JPEG:--[*]\r\n"
-
-safeboolean
-fill_input_buffer (j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
- size_t nbytes = 0;
-
- /* size_t got; */
- /* char *s; */
- memset (src->buffer, 0, INPUT_BUF_SIZE);
-
- while (nbytes < INPUT_BUF_SIZE)
- {
-
- int got = gdGetBuf (src->buffer + nbytes,
- INPUT_BUF_SIZE - nbytes,
- src->infile);
-
- if ((got == EOF) || (got == 0))
- {
-
- /* EOF or error. If we got any data, don't worry about it.
- If we didn't, then this is unexpected. */
- if (!nbytes)
- {
-
- nbytes = -1;
-
- }
-
- break;
-
- }
-
- nbytes += got;
-
- }
-
- if (nbytes <= 0)
- {
- if (src->start_of_file) /* Treat empty input file as fatal error */
- ERREXIT (cinfo, JERR_INPUT_EMPTY);
- WARNMS (cinfo, JWRN_JPEG_EOF);
- /* Insert a fake EOI marker */
- src->buffer[0] = (unsigned char) 0xFF;
- src->buffer[1] = (unsigned char) JPEG_EOI;
- nbytes = 2;
- }
-
- src->pub.next_input_byte = src->buffer;
- src->pub.bytes_in_buffer = nbytes;
- src->start_of_file = FALSE;
-
- return TRUE;
-}
-
-
-/*
- * Skip data --- used to skip over a potentially large amount of
- * uninteresting data (such as an APPn marker).
- *
- * Writers of suspendable-input applications must note that skip_input_data
- * is not granted the right to give a suspension return. If the skip extends
- * beyond the data currently in the buffer, the buffer can be marked empty so
- * that the next read will cause a fill_input_buffer call that can suspend.
- * Arranging for additional bytes to be discarded before reloading the input
- * buffer is the application writer's problem.
- */
-
-void
-skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
-
- /* Just a dumb implementation for now. Not clear that being smart is worth
- * any trouble anyway --- large skips are infrequent.
- */
- if (num_bytes > 0)
- {
- while (num_bytes > (long) src->pub.bytes_in_buffer)
- {
- num_bytes -= (long) src->pub.bytes_in_buffer;
- (void) fill_input_buffer (cinfo);
- /* note we assume that fill_input_buffer will never return FALSE,
- * so suspension need not be handled.
- */
- }
- src->pub.next_input_byte += (size_t) num_bytes;
- src->pub.bytes_in_buffer -= (size_t) num_bytes;
- }
-}
-
-
-/*
- * An additional method that can be provided by data source modules is the
- * resync_to_restart method for error recovery in the presence of RST markers.
- * For the moment, this source module just uses the default resync method
- * provided by the JPEG library. That method assumes that no backtracking
- * is possible.
- */
-
-
-/*
- * Terminate source --- called by jpeg_finish_decompress
- * after all data has been read. Often a no-op.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-void
-term_source (j_decompress_ptr cinfo)
-{
-
-#if 0
-/* never used */
- my_src_ptr src = (my_src_ptr) cinfo->src;
-
-#endif
-}
-
-
-/*
- * Prepare for input from a gdIOCtx stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing decompression.
- */
-
-void
-jpeg_gdIOCtx_src (j_decompress_ptr cinfo,
- gdIOCtx * infile)
-{
- my_src_ptr src;
-
- /* The source object and input buffer are made permanent so that a series
- * of JPEG images can be read from the same file by calling jpeg_gdIOCtx_src
- * only before the first one. (If we discarded the buffer at the end of
- * one image, we'd likely lose the start of the next one.)
- * This makes it unsafe to use this manager and a different source
- * manager serially with the same JPEG object. Caveat programmer.
- */
- if (cinfo->src == NULL)
- { /* first time for this JPEG object? */
- cinfo->src = (struct jpeg_source_mgr *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
- sizeof (my_source_mgr));
- src = (my_src_ptr) cinfo->src;
- src->buffer = (unsigned char *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
- INPUT_BUF_SIZE * sizeof (unsigned char));
-
- }
-
- src = (my_src_ptr) cinfo->src;
- src->pub.init_source = init_source;
- src->pub.fill_input_buffer = fill_input_buffer;
- src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
- src->pub.term_source = term_source;
- src->infile = infile;
- src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
- src->pub.next_input_byte = NULL; /* until buffer loaded */
-}
-
-/* Expanded data destination object for stdio output */
-
-typedef struct
-{
- struct jpeg_destination_mgr pub; /* public fields */
- gdIOCtx *outfile; /* target stream */
- unsigned char *buffer; /* start of buffer */
-}
-my_destination_mgr;
-
-typedef my_destination_mgr *my_dest_ptr;
-
-#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */
-
-/*
- * Initialize destination --- called by jpeg_start_compress
- * before any data is actually written.
- */
-
-void
-init_destination (j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-
- /* Allocate the output buffer --- it will be released when done with image */
- dest->buffer = (unsigned char *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
- OUTPUT_BUF_SIZE * sizeof (unsigned char));
-
- dest->pub.next_output_byte = dest->buffer;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-}
-
-
-/*
- * Empty the output buffer --- called whenever buffer fills up.
- *
- * In typical applications, this should write the entire output buffer
- * (ignoring the current state of next_output_byte & free_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been dumped.
- *
- * In applications that need to be able to suspend compression due to output
- * overrun, a FALSE return indicates that the buffer cannot be emptied now.
- * In this situation, the compressor will return to its caller (possibly with
- * an indication that it has not accepted all the supplied scanlines). The
- * application should resume compression after it has made more room in the
- * output buffer. Note that there are substantial restrictions on the use of
- * suspension --- see the documentation.
- *
- * When suspending, the compressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_output_byte & free_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point will be regenerated after resumption, so do not
- * write it out when emptying the buffer externally.
- */
-
-safeboolean
-empty_output_buffer (j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-
- if (gdPutBuf (dest->buffer, OUTPUT_BUF_SIZE, dest->outfile) !=
- (size_t) OUTPUT_BUF_SIZE)
- ERREXIT (cinfo, JERR_FILE_WRITE);
-
- dest->pub.next_output_byte = dest->buffer;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-
- return TRUE;
-}
-
-
-/*
- * Terminate destination --- called by jpeg_finish_compress
- * after all data has been written. Usually needs to flush buffer.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-void
-term_destination (j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
- size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
-
- /* Write any data remaining in the buffer */
- if (datacount > 0)
- {
- if (gdPutBuf (dest->buffer, datacount, dest->outfile) != datacount)
- ERREXIT (cinfo, JERR_FILE_WRITE);
- }
-}
-
-
-/*
- * Prepare for output to a stdio stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing compression.
- */
-
-void
-jpeg_gdIOCtx_dest (j_compress_ptr cinfo, gdIOCtx * outfile)
-{
- my_dest_ptr dest;
-
- /* The destination object is made permanent so that multiple JPEG images
- * can be written to the same file without re-executing jpeg_stdio_dest.
- * This makes it dangerous to use this manager and a different destination
- * manager serially with the same JPEG object, because their private object
- * sizes may be different. Caveat programmer.
- */
- if (cinfo->dest == NULL)
- { /* first time for this JPEG object? */
- cinfo->dest = (struct jpeg_destination_mgr *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
- sizeof (my_destination_mgr));
- }
-
- dest = (my_dest_ptr) cinfo->dest;
- dest->pub.init_destination = init_destination;
- dest->pub.empty_output_buffer = empty_output_buffer;
- dest->pub.term_destination = term_destination;
- dest->outfile = outfile;
-}
-
-#endif /* HAVE_JPEG */
diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c
deleted file mode 100644
index 4cdbea44e6..0000000000
--- a/ext/gd/libgd/gd_png.c
+++ /dev/null
@@ -1,753 +0,0 @@
-
-#ifdef HAVE_LIBPNG
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-#include "png.h" /* includes zlib.h and setjmp.h */
-
-#define TRUE 1
-#define FALSE 0
-
-/*---------------------------------------------------------------------------
-
- gd_png.c Copyright 1999 Greg Roelofs and Thomas Boutell
-
- The routines in this file, gdImagePng*() and gdImageCreateFromPng*(),
- are drop-in replacements for gdImageGif*() and gdImageCreateFromGif*(),
- except that these functions are noisier in the case of errors (comment
- out all fprintf() statements to disable that).
-
- GD 2.0 supports RGBA truecolor and will read and write truecolor PNGs.
- GD 2.0 supports 8 bits of color resolution per channel and
- 7 bits of alpha channel resolution. Images with more than 8 bits
- per channel are reduced to 8 bits. Images with an alpha channel are
- only able to resolve down to '1/128th opaque' instead of '1/256th',
- and this conversion is also automatic. I very much doubt you can see it.
- Both tRNS and true alpha are supported.
-
- Gamma is ignored, and there is no support for text annotations.
-
- Last updated: 9 February 2001
-
- ---------------------------------------------------------------------------*/
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
-typedef struct _jmpbuf_wrapper
- {
- jmp_buf jmpbuf;
- }
-jmpbuf_wrapper;
-
-static jmpbuf_wrapper gdPngJmpbufStruct;
-
-static void
-gdPngErrorHandler (png_structp png_ptr, png_const_charp msg)
-{
- jmpbuf_wrapper *jmpbuf_ptr;
-
- /* This function, aside from the extra step of retrieving the "error
- * pointer" (below) and the fact that it exists within the application
- * rather than within libpng, is essentially identical to libpng's
- * default error handler. The second point is critical: since both
- * setjmp() and longjmp() are called from the same code, they are
- * guaranteed to have compatible notions of how big a jmp_buf is,
- * regardless of whether _BSD_SOURCE or anything else has (or has not)
- * been defined. */
-
- fprintf (stderr, "gd-png: fatal libpng error: %s\n", msg);
- fflush (stderr);
-
- jmpbuf_ptr = png_get_error_ptr (png_ptr);
- if (jmpbuf_ptr == NULL)
- { /* we are completely hosed now */
- fprintf (stderr,
- "gd-png: EXTREMELY fatal error: jmpbuf unrecoverable; terminating.\n");
- fflush (stderr);
- exit (99);
- }
-
- longjmp (jmpbuf_ptr->jmpbuf, 1);
-}
-#endif
-
-static void
-gdPngReadData (png_structp png_ptr,
- png_bytep data, png_size_t length)
-{
- gdGetBuf (data, length, (gdIOCtx *)
- png_get_io_ptr (png_ptr));
-}
-
-static void
-gdPngWriteData (png_structp png_ptr,
- png_bytep data, png_size_t length)
-{
- gdPutBuf (data, length, (gdIOCtx *)
- png_get_io_ptr (png_ptr));
-}
-
-static void
-gdPngFlushData (png_structp png_ptr)
-{
-}
-
-gdImagePtr
-gdImageCreateFromPng (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx (inFile);
- im = gdImageCreateFromPngCtx (in);
- in->free (in);
- return im;
-}
-
-
-/* This routine is based in part on the Chapter 13 demo code in "PNG: The
- * Definitive Guide" (http://www.cdrom.com/pub/png/pngbook.html).
- */
-gdImagePtr
-gdImageCreateFromPngCtx (gdIOCtx * infile)
-{
- png_byte sig[8];
- png_structp png_ptr;
- png_infop info_ptr;
- png_uint_32 width, height, rowbytes;
- int bit_depth, color_type, interlace_type;
- int num_palette, num_trans;
- png_colorp palette;
- png_color_16p trans_gray_rgb;
- png_color_16p trans_color_rgb;
- png_bytep trans;
- png_bytep image_data = NULL;
- png_bytepp row_pointers = NULL;
- gdImagePtr im = NULL;
- int i, j, *open;
- volatile int transparent = -1;
- volatile int palette_allocated = FALSE;
-
- /* Make sure the signature can't match by dumb luck -- TBB */
- /* GRR: isn't sizeof(infile) equal to the size of the pointer? */
- memset (infile, 0, sizeof (infile));
-
- /* first do a quick check that the file really is a PNG image; could
- * have used slightly more general png_sig_cmp() function instead */
- gdGetBuf (sig, 8, infile);
- if (!png_check_sig (sig, 8))
- return NULL; /* bad signature */
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, &gdPngJmpbufStruct,
- gdPngErrorHandler, NULL);
-#else
- png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-#endif
- if (png_ptr == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate libpng main struct\n");
- return NULL;
- }
-
- info_ptr = png_create_info_struct (png_ptr);
- if (info_ptr == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate libpng info struct\n");
- png_destroy_read_struct (&png_ptr, NULL, NULL);
- return NULL;
- }
-
- /* we could create a second info struct here (end_info), but it's only
- * useful if we want to keep pre- and post-IDAT chunk info separated
- * (mainly for PNG-aware image editors and converters) */
-
- /* setjmp() must be called in every non-callback function that calls a
- * PNG-reading libpng function */
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- if (setjmp (gdPngJmpbufStruct.jmpbuf))
- {
- fprintf (stderr, "gd-png error: setjmp returns error condition\n");
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- return NULL;
- }
-#endif
-
- png_set_sig_bytes (png_ptr, 8); /* we already read the 8 signature bytes */
-
- png_set_read_fn (png_ptr, (void *) infile, gdPngReadData);
- png_read_info (png_ptr, info_ptr); /* read all PNG info up to image data */
-
- png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
- &interlace_type, NULL, NULL);
- if ((color_type == PNG_COLOR_TYPE_RGB) ||
- (color_type == PNG_COLOR_TYPE_RGB_ALPHA))
- {
- im = gdImageCreateTrueColor ((int) width, (int) height);
- }
- else
- {
- im = gdImageCreate ((int) width, (int) height);
- }
- if (im == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate gdImage struct\n");
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- gdFree (image_data);
- gdFree (row_pointers);
- return NULL;
- }
-
- if (bit_depth == 16)
- png_set_strip_16 (png_ptr);
- else if (bit_depth < 8)
- png_set_packing (png_ptr); /* expand to 1 byte per pixel */
- switch (color_type)
- {
- case PNG_COLOR_TYPE_PALETTE:
- png_get_PLTE (png_ptr, info_ptr, &palette, &num_palette);
-#ifdef DEBUG
- fprintf (stderr, "gd-png color_type is palette, colors: %d\n",
- num_palette);
-#endif /* DEBUG */
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
- {
- /* gd 2.0: we support this rather thoroughly now. Grab the
- first fully transparent entry, if any, as the value of
- the simple-transparency index, mostly for backwards
- binary compatibility. The alpha channel is where it's
- really at these days. */
- int firstZero = 1;
- png_get_tRNS (png_ptr, info_ptr, &trans, &num_trans, NULL);
- for (i = 0; i < num_trans; ++i)
- {
- im->alpha[i] = gdAlphaMax - (trans[i] >> 1);
- if ((trans[i] == 0) && (firstZero))
- {
- transparent = i;
- firstZero = 0;
- }
- }
- }
- break;
-
- case PNG_COLOR_TYPE_GRAY:
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- /* create a fake palette and check for single-shade transparency */
- if ((palette = (png_colorp) gdMalloc (256 * sizeof (png_color))) == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate gray palette\n");
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- return NULL;
- }
- palette_allocated = TRUE;
- if (bit_depth < 8)
- {
- num_palette = 1 << bit_depth;
- for (i = 0; i < 256; ++i)
- {
- j = (255 * i) / (num_palette - 1);
- palette[i].red = palette[i].green = palette[i].blue = j;
- }
- }
- else
- {
- num_palette = 256;
- for (i = 0; i < 256; ++i)
- {
- palette[i].red = palette[i].green = palette[i].blue = i;
- }
- }
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
- {
- png_get_tRNS (png_ptr, info_ptr, NULL, NULL, &trans_gray_rgb);
- if (bit_depth == 16) /* png_set_strip_16() not yet in effect */
- transparent = trans_gray_rgb->gray >> 8;
- else
- transparent = trans_gray_rgb->gray;
- /* Note slight error in 16-bit case: up to 256 16-bit shades
- * may get mapped to a single 8-bit shade, and only one of them
- * is supposed to be transparent. IOW, both opaque pixels and
- * transparent pixels will be mapped into the transparent entry.
- * There is no particularly good way around this in the case
- * that all 256 8-bit shades are used, but one could write some
- * custom 16-bit code to handle the case where there are gdFree
- * palette entries. This error will be extremely rare in
- * general, though. (Quite possibly there is only one such
- * image in existence.) */
- }
- break;
-
- case PNG_COLOR_TYPE_RGB:
- case PNG_COLOR_TYPE_RGB_ALPHA:
- /* gd 2.0: we now support truecolor. See the comment above
- for a rare situation in which the transparent pixel may not
- work properly with 16-bit channels. */
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
- {
- png_get_tRNS (png_ptr, info_ptr, NULL, NULL, &trans_color_rgb);
- if (bit_depth == 16) /* png_set_strip_16() not yet in effect */
- transparent = gdTrueColor (trans_color_rgb->red >> 8,
- trans_color_rgb->green >> 8,
- trans_color_rgb->blue >> 8);
- else
- transparent = gdTrueColor (trans_color_rgb->red,
- trans_color_rgb->green,
- trans_color_rgb->blue);
- }
- break;
- }
-
- png_read_update_info (png_ptr, info_ptr);
-
- /* allocate space for the PNG image data */
- rowbytes = png_get_rowbytes (png_ptr, info_ptr);
- if ((image_data = (png_bytep) gdMalloc (rowbytes * height)) == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate image data\n");
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- return NULL;
- }
- if ((row_pointers = (png_bytepp) gdMalloc (height * sizeof (png_bytep))) == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate row pointers\n");
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- gdFree (image_data);
- return NULL;
- }
-
- /* set the individual row_pointers to point at the correct offsets */
- for (j = 0; j < height; ++j)
- {
- row_pointers[j] = image_data + j * rowbytes;
- }
-
- png_read_image (png_ptr, row_pointers); /* read whole image... */
- png_read_end (png_ptr, NULL); /* ...done! */
-
- if (!im->trueColor)
- {
- im->colorsTotal = num_palette;
- im->transparent = transparent;
- /* load the palette and mark all entries "open" (unused) for now */
- open = im->open;
- for (i = 0; i < num_palette; ++i)
- {
- im->red[i] = palette[i].red;
- im->green[i] = palette[i].green;
- im->blue[i] = palette[i].blue;
- open[i] = 1;
- }
- for (i = num_palette; i < gdMaxColors; ++i)
- {
- open[i] = 1;
- }
- }
- im->interlace = (interlace_type == PNG_INTERLACE_ADAM7);
-
- /* can't nuke structs until done with palette */
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- switch (color_type)
- {
- case PNG_COLOR_TYPE_RGB:
- for (j = 0; j < height; j++)
- {
- int boffset = 0;
- for (i = 0; i < width; i++)
- {
- register png_byte r = row_pointers[j][boffset++];
- register png_byte g = row_pointers[j][boffset++];
- register png_byte b = row_pointers[j][boffset++];
- im->tpixels[j][i] = gdTrueColor (r, g, b);
- }
- }
- break;
- case PNG_COLOR_TYPE_RGB_ALPHA:
- for (j = 0; j < height; j++)
- {
- int boffset = 0;
- for (i = 0; i < width; i++)
- {
- register png_byte r = row_pointers[j][boffset++];
- register png_byte g = row_pointers[j][boffset++];
- register png_byte b = row_pointers[j][boffset++];
- /* gd has only 7 bits of alpha channel resolution, and
- 127 is transparent, 0 opaque. A moment of convenience,
- a lifetime of compatibility. */
- register png_byte a = gdAlphaMax -
- (row_pointers[j][boffset++] >> 1);
- im->tpixels[j][i] = gdTrueColorAlpha (r, g, b, a);
- }
- }
- break;
- default:
- /* Palette image, or something coerced to be one */
- for (j = 0; j < height; ++j)
- {
- for (i = 0; i < width; ++i)
- {
- register png_byte idx = row_pointers[j][i];
- im->pixels[j][i] = idx;
- open[idx] = 0;
- }
- }
- }
-#ifdef DEBUG
- if (!im->trueColor)
- {
- for (i = num_palette; i < gdMaxColors; ++i)
- {
- if (!open[i])
- {
- fprintf (stderr, "gd-png warning: image data references out-of-range"
- " color index (%d)\n", i);
- }
- }
- }
-#endif
-
- if (palette_allocated)
- gdFree (palette);
- gdFree (image_data);
- gdFree (row_pointers);
-
- return im;
-}
-
-
-void
-gdImagePng (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- gdImagePngCtx (im, out);
- out->free (out);
-}
-
-void *
-gdImagePngPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- gdImagePngCtx (im, out);
- rv = gdDPExtractData (out, size);
- out->free (out);
- return rv;
-}
-
-/* This routine is based in part on code from Dale Lutz (Safe Software Inc.)
- * and in part on demo code from Chapter 15 of "PNG: The Definitive Guide"
- * (http://www.cdrom.com/pub/png/pngbook.html).
- */
-void
-gdImagePngCtx (gdImagePtr im, gdIOCtx * outfile)
-{
- int i, j, bit_depth, interlace_type;
- int width = im->sx;
- int height = im->sy;
- int colors = im->colorsTotal;
- int *open = im->open;
- int mapping[gdMaxColors]; /* mapping[gd_index] == png_index */
- png_byte trans_values[256];
- png_color_16 trans_rgb_value;
- png_color palette[gdMaxColors];
- png_structp png_ptr;
- png_infop info_ptr;
- volatile int transparent = im->transparent;
- volatile int remap = FALSE;
-
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING,
- &gdPngJmpbufStruct, gdPngErrorHandler, NULL);
-#else
- png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-#endif
- if (png_ptr == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate libpng main struct\n");
- return;
- }
-
- info_ptr = png_create_info_struct (png_ptr);
- if (info_ptr == NULL)
- {
- fprintf (stderr, "gd-png error: cannot allocate libpng info struct\n");
- png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
- return;
- }
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- if (setjmp (gdPngJmpbufStruct.jmpbuf))
- {
- fprintf (stderr, "gd-png error: setjmp returns error condition\n");
- png_destroy_write_struct (&png_ptr, &info_ptr);
- return;
- }
-#endif
-
- png_set_write_fn (png_ptr, (void *) outfile, gdPngWriteData, gdPngFlushData);
-
- /* This is best for palette images, and libpng defaults to it for
- palette images anyway, so we don't need to do it explicitly.
- What to ideally do for truecolor images depends, alas, on the image.
- gd is intentionally imperfect and doesn't spend a lot of time
- fussing with such things. */
-/* png_set_filter(png_ptr, 0, PNG_FILTER_NONE); */
-
- /* may want to force maximum compression, but time penalty is large */
-/* png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); */
-
- /* can set this to a smaller value without compromising compression if all
- * image data is 16K or less; will save some decoder memory [min == 8] */
-/* png_set_compression_window_bits(png_ptr, 15); */
-
- if (!im->trueColor)
- {
- if (transparent >= im->colorsTotal ||
- (transparent >= 0 && open[transparent]))
- transparent = -1;
- }
- if (!im->trueColor)
- {
- for (i = 0; i < gdMaxColors; ++i)
- mapping[i] = -1;
- }
- if (!im->trueColor)
- {
- /* count actual number of colors used (colorsTotal == high-water mark) */
- colors = 0;
- for (i = 0; i < im->colorsTotal; ++i)
- {
- if (!open[i])
- {
- mapping[i] = colors;
- ++colors;
- }
- }
- if (colors < im->colorsTotal)
- {
- remap = TRUE;
- }
- if (colors <= 2)
- bit_depth = 1;
- else if (colors <= 4)
- bit_depth = 2;
- else if (colors <= 16)
- bit_depth = 4;
- else
- bit_depth = 8;
- }
- interlace_type = im->interlace ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
-
- if (im->trueColor)
- {
- if (im->saveAlphaFlag)
- {
- png_set_IHDR (png_ptr, info_ptr, width, height, 8,
- PNG_COLOR_TYPE_RGB_ALPHA, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- }
- else
- {
- png_set_IHDR (png_ptr, info_ptr, width, height, 8,
- PNG_COLOR_TYPE_RGB, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- }
- }
- else
- {
- png_set_IHDR (png_ptr, info_ptr, width, height, bit_depth,
- PNG_COLOR_TYPE_PALETTE, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- }
- if (im->trueColor && (!im->saveAlphaFlag) && (transparent >= 0))
- {
- trans_rgb_value.red = gdTrueColorGetRed (im->trueColor);
- trans_rgb_value.green = gdTrueColorGetGreen (im->trueColor);
- trans_rgb_value.blue = gdTrueColorGetBlue (im->trueColor);
- png_set_tRNS (png_ptr, info_ptr, 0, 0, &trans_rgb_value);
- }
- if (!im->trueColor)
- {
- /* Oy veh. Remap the PNG palette to put the
- entries with interesting alpha channel
- values first. This minimizes the size
- of the tRNS chunk and thus the size
- of the PNG file as a whole. */
- int tc = 0;
- int i;
- int j;
- int k;
- int highTrans = -1;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if ((!im->open[i]) &&
- (im->alpha[i] != gdAlphaOpaque))
- {
- tc++;
- }
- }
- if (tc)
- {
-#if 0
- for (i = 0; (i < im->colorsTotal); i++)
- {
- trans_values[i] = 255 -
- ((im->alpha[i] << 1) +
- (im->alpha[i] >> 7));
- }
- png_set_tRNS (png_ptr, info_ptr, trans_values, 256, NULL);
-#endif
- if (!remap)
- {
- remap = TRUE;
- }
- /* (Semi-)transparent indexes come up from the bottom
- of the list of real colors; opaque
- indexes come down from the top */
- j = 0;
- k = colors - 1;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (!im->open[i])
- {
- if (im->alpha[i] != gdAlphaOpaque)
- {
- trans_values[j] = 255 -
- ((im->alpha[i] << 1) +
- (im->alpha[i] >> 7));
- mapping[i] = j++;
- }
- else
- {
- mapping[i] = k--;
- }
- }
- }
- png_set_tRNS (png_ptr, info_ptr, trans_values, tc, NULL);
- }
- }
-
- /* convert palette to libpng layout */
- if (!im->trueColor)
- {
- if (remap)
- for (i = 0; i < im->colorsTotal; ++i)
- {
- if (mapping[i] < 0)
- continue;
- palette[mapping[i]].red = im->red[i];
- palette[mapping[i]].green = im->green[i];
- palette[mapping[i]].blue = im->blue[i];
- }
- else
- for (i = 0; i < colors; ++i)
- {
- palette[i].red = im->red[i];
- palette[i].green = im->green[i];
- palette[i].blue = im->blue[i];
- }
- png_set_PLTE (png_ptr, info_ptr, palette, colors);
- }
-
- /* write out the PNG header info (everything up to first IDAT) */
- png_write_info (png_ptr, info_ptr);
-
- /* make sure < 8-bit images are packed into pixels as tightly as possible */
- png_set_packing (png_ptr);
-
- /* This code allocates a set of row buffers and copies the gd image data
- * into them only in the case that remapping is necessary; in gd 1.3 and
- * later, the im->pixels array is laid out identically to libpng's row
- * pointers and can be passed to png_write_image() function directly.
- * The remapping case could be accomplished with less memory for non-
- * interlaced images, but interlacing causes some serious complications. */
- if (im->trueColor)
- {
- int channels = im->saveAlphaFlag ? 4 : 3;
- /* Our little 7-bit alpha channel trick costs us a bit here. */
- png_bytep *row_pointers;
- row_pointers = gdMalloc (sizeof (png_bytep) * height);
- if (row_pointers == NULL)
- {
- fprintf (stderr, "gd-png error: unable to allocate row_pointers\n");
- }
- for (j = 0; j < height; ++j)
- {
- int bo = 0;
- if ((row_pointers[j] = (png_bytep) gdMalloc (width * channels)) == NULL)
- {
- fprintf (stderr, "gd-png error: unable to allocate rows\n");
- for (i = 0; i < j; ++i)
- gdFree (row_pointers[i]);
- return;
- }
- for (i = 0; i < width; ++i)
- {
- unsigned char a;
- row_pointers[j][bo++] = gdTrueColorGetRed (im->tpixels[j][i]);
- row_pointers[j][bo++] = gdTrueColorGetGreen (im->tpixels[j][i]);
- row_pointers[j][bo++] = gdTrueColorGetBlue (im->tpixels[j][i]);
- if (im->saveAlphaFlag)
- {
- /* convert the 7-bit alpha channel to an 8-bit alpha channel.
- We do a little bit-flipping magic, repeating the MSB
- as the LSB, to ensure that 0 maps to 0 and
- 127 maps to 255. We also have to invert to match
- PNG's convention in which 255 is opaque. */
- a = gdTrueColorGetAlpha (im->tpixels[j][i]);
- row_pointers[j][bo++] = 255 - ((a << 1) + (a >> 7));
- }
- }
- }
-
- png_write_image (png_ptr, row_pointers);
- png_write_end (png_ptr, info_ptr);
-
- for (j = 0; j < height; ++j)
- gdFree (row_pointers[j]);
- gdFree (row_pointers);
- }
- else
- {
- if (remap)
- {
- png_bytep *row_pointers;
- row_pointers = gdMalloc (sizeof (png_bytep) * height);
- if (row_pointers == NULL)
- {
- fprintf (stderr, "gd-png error: unable to allocate row_pointers\n");
- }
- for (j = 0; j < height; ++j)
- {
- if ((row_pointers[j] = (png_bytep) gdMalloc (width)) == NULL)
- {
- fprintf (stderr, "gd-png error: unable to allocate rows\n");
- for (i = 0; i < j; ++i)
- gdFree (row_pointers[i]);
- return;
- }
- for (i = 0; i < width; ++i)
- row_pointers[j][i] = mapping[im->pixels[j][i]];
- }
-
- png_write_image (png_ptr, row_pointers);
- png_write_end (png_ptr, info_ptr);
-
- for (j = 0; j < height; ++j)
- gdFree (row_pointers[j]);
- gdFree (row_pointers);
- }
- else
- {
- png_write_image (png_ptr, im->pixels);
- png_write_end (png_ptr, info_ptr);
- }
- }
- /* 1.6.3: maybe we should give that memory BACK! TBB */
- png_destroy_write_struct (&png_ptr, &info_ptr);
-}
-
-
-#endif /* HAVE_LIBPNG */
diff --git a/ext/gd/libgd/gd_ss.c b/ext/gd/libgd/gd_ss.c
deleted file mode 100644
index 200442ba0f..0000000000
--- a/ext/gd/libgd/gd_ss.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* Exported functions: */
-extern void gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
-extern gdImagePtr gdImageCreateFromPngSource (gdSourcePtr inSource);
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD_SS_DBG(s) (s) */
-#define GD_SS_DBG(s)
-
-void
-gdImagePngToSink (gdImagePtr im, gdSinkPtr outSink)
-{
- gdIOCtx *out = gdNewSSCtx (NULL, outSink);
- gdImagePngCtx (im, out);
- out->free (out);
-}
-
-gdImagePtr
-gdImageCreateFromPngSource (gdSourcePtr inSource)
-{
- gdIOCtx *in = gdNewSSCtx (inSource, NULL);
- gdImagePtr im;
-
- im = gdImageCreateFromPngCtx (in);
-
- in->free (in);
-
- return im;
-}
diff --git a/ext/gd/libgd/gd_topal.c b/ext/gd/libgd/gd_topal.c
deleted file mode 100644
index d2be7508f2..0000000000
--- a/ext/gd/libgd/gd_topal.c
+++ /dev/null
@@ -1,1688 +0,0 @@
-
-
-/*
- * gd_topal.c
- *
- * This code is adapted pretty much entirely from jquant2.c,
- * Copyright (C) 1991-1996, Thomas G. Lane. That file is
- * part of the Independent JPEG Group's software. Conditions of
- * use are compatible with the gd license. See the gd license
- * statement and README-JPEG.TXT for additional information.
- *
- * This file contains 2-pass color quantization (color mapping) routines.
- * These routines provide selection of a custom color map for an image,
- * followed by mapping of the image to that color map, with optional
- * Floyd-Steinberg dithering.
- *
- * It is also possible to use just the second pass to map to an arbitrary
- * externally-given color map.
- *
- * Note: ordered dithering is not supported, since there isn't any fast
- * way to compute intercolor distances; it's unclear that ordered dither's
- * fundamental assumptions even hold with an irregularly spaced color map.
- *
- * SUPPORT FOR ALPHA CHANNELS WAS HACKED IN BY THOMAS BOUTELL, who also
- * adapted the code to work within gd rather than within libjpeg, and
- * may not have done a great job of either. It's not Thomas G. Lane's fault.
- */
-
-#include "gd.h"
-#include "gdhelpers.h"
-
-/*
- * This module implements the well-known Heckbert paradigm for color
- * quantization. Most of the ideas used here can be traced back to
- * Heckbert's seminal paper
- * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display",
- * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304.
- *
- * In the first pass over the image, we accumulate a histogram showing the
- * usage count of each possible color. To keep the histogram to a reasonable
- * size, we reduce the precision of the input; typical practice is to retain
- * 5 or 6 bits per color, so that 8 or 4 different input values are counted
- * in the same histogram cell.
- *
- * Next, the color-selection step begins with a box representing the whole
- * color space, and repeatedly splits the "largest" remaining box until we
- * have as many boxes as desired colors. Then the mean color in each
- * remaining box becomes one of the possible output colors.
- *
- * The second pass over the image maps each input pixel to the closest output
- * color (optionally after applying a Floyd-Steinberg dithering correction).
- * This mapping is logically trivial, but making it go fast enough requires
- * considerable care.
- *
- * Heckbert-style quantizers vary a good deal in their policies for choosing
- * the "largest" box and deciding where to cut it. The particular policies
- * used here have proved out well in experimental comparisons, but better ones
- * may yet be found.
- *
- * In earlier versions of the IJG code, this module quantized in YCbCr color
- * space, processing the raw upsampled data without a color conversion step.
- * This allowed the color conversion math to be done only once per colormap
- * entry, not once per pixel. However, that optimization precluded other
- * useful optimizations (such as merging color conversion with upsampling)
- * and it also interfered with desired capabilities such as quantizing to an
- * externally-supplied colormap. We have therefore abandoned that approach.
- * The present code works in the post-conversion color space, typically RGB.
- *
- * To improve the visual quality of the results, we actually work in scaled
- * RGBA space, giving G distances more weight than R, and R in turn more than
- * B. Alpha is weighted least. To do everything in integer math, we must
- * use integer scale factors. The 2/3/1 scale factors used here correspond
- * loosely to the relative weights of the colors in the NTSC grayscale
- * equation.
- */
-
-#ifndef TRUE
-#define TRUE 1
-#endif /* TRUE */
-
-#ifndef FALSE
-#define FALSE 0
-#endif /* FALSE */
-
-#define R_SCALE 2 /* scale R distances by this much */
-#define G_SCALE 3 /* scale G distances by this much */
-#define B_SCALE 1 /* and B by this much */
-#define A_SCALE 4 /* and alpha by this much. This really
- only scales by 1 because alpha
- values are 7-bit to begin with. */
-
-/* Channel ordering (fixed in gd) */
-#define C0_SCALE R_SCALE
-#define C1_SCALE G_SCALE
-#define C2_SCALE B_SCALE
-#define C3_SCALE A_SCALE
-
-/*
- * First we have the histogram data structure and routines for creating it.
- *
- * The number of bits of precision can be adjusted by changing these symbols.
- * We recommend keeping 6 bits for G and 5 each for R and B.
- * If you have plenty of memory and cycles, 6 bits all around gives marginally
- * better results; if you are short of memory, 5 bits all around will save
- * some space but degrade the results.
- * To maintain a fully accurate histogram, we'd need to allocate a "long"
- * (preferably unsigned long) for each cell. In practice this is overkill;
- * we can get by with 16 bits per cell. Few of the cell counts will overflow,
- * and clamping those that do overflow to the maximum value will give close-
- * enough results. This reduces the recommended histogram size from 256Kb
- * to 128Kb, which is a useful savings on PC-class machines.
- * (In the second pass the histogram space is re-used for pixel mapping data;
- * in that capacity, each cell must be able to store zero to the number of
- * desired colors. 16 bits/cell is plenty for that too.)
- * Since the JPEG code is intended to run in small memory model on 80x86
- * machines, we can't just allocate the histogram in one chunk. Instead
- * of a true 3-D array, we use a row of pointers to 2-D arrays. Each
- * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and
- * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that
- * on 80x86 machines, the pointer row is in near memory but the actual
- * arrays are in far memory (same arrangement as we use for image arrays).
- */
-
-#define MAXNUMCOLORS (gdMaxColors) /* maximum size of colormap */
-
-#define HIST_C0_BITS 5 /* bits of precision in R histogram */
-#define HIST_C1_BITS 6 /* bits of precision in G histogram */
-#define HIST_C2_BITS 5 /* bits of precision in B histogram */
-#define HIST_C3_BITS 3 /* bits of precision in A histogram */
-
-/* Number of elements along histogram axes. */
-#define HIST_C0_ELEMS (1<<HIST_C0_BITS)
-#define HIST_C1_ELEMS (1<<HIST_C1_BITS)
-#define HIST_C2_ELEMS (1<<HIST_C2_BITS)
-#define HIST_C3_ELEMS (1<<HIST_C3_BITS)
-
-/* These are the amounts to shift an input value to get a histogram index. */
-#define C0_SHIFT (8-HIST_C0_BITS)
-#define C1_SHIFT (8-HIST_C1_BITS)
-#define C2_SHIFT (8-HIST_C2_BITS)
-/* Beware! Alpha is 7 bit to begin with */
-#define C3_SHIFT (7-HIST_C3_BITS)
-
-
-typedef unsigned short histcell; /* histogram cell; prefer an unsigned type */
-
-typedef histcell *histptr; /* for pointers to histogram cells */
-
-typedef histcell hist1d[HIST_C3_ELEMS]; /* typedefs for the array */
-typedef hist1d *hist2d; /* type for the 2nd-level pointers */
-typedef hist2d *hist3d; /* type for third-level pointer */
-typedef hist3d *hist4d; /* type for top-level pointer */
-
-
-/* Declarations for Floyd-Steinberg dithering.
-
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count. The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- * ... (here) 7/16
- * 3/16 5/16 1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed. We
- * need only a few extra variables to hold the errors immediately around the
- * current column. (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array has (#columns + 2) entries; the extra entry at
- * each end saves us from special-casing the first and last pixels.
- * Each entry is three values long, one value for each color component.
- *
- */
-
-typedef signed short FSERROR; /* 16 bits should be enough */
-typedef int LOCFSERROR; /* use 'int' for calculation temps */
-
-typedef FSERROR *FSERRPTR; /* pointer to error array */
-
-/* Private object */
-
-typedef struct
- {
- hist4d histogram; /* pointer to the histogram */
- int needs_zeroed; /* TRUE if next pass must zero histogram */
-
- /* Variables for Floyd-Steinberg dithering */
- FSERRPTR fserrors; /* accumulated errors */
- int on_odd_row; /* flag to remember which row we are on */
- int *error_limiter; /* table for clamping the applied error */
- int *error_limiter_storage; /* gdMalloc'd storage for the above */
- int transparentIsPresent; /* TBB: for rescaling to ensure that */
- int opaqueIsPresent; /* 100% opacity & transparency are preserved */
- }
-my_cquantizer;
-
-typedef my_cquantizer *my_cquantize_ptr;
-
-/*
- * Prescan the pixel array.
- *
- * The prescan simply updates the histogram, which has been
- * initialized to zeroes by start_pass.
- *
- */
-
-static void
-prescan_quantize (gdImagePtr im, my_cquantize_ptr cquantize)
-{
- register histptr histp;
- register hist4d histogram = cquantize->histogram;
- int row;
- int col;
- int *ptr;
- int width = im->sx;
-
- for (row = 0; row < im->sy; row++)
- {
- ptr = im->tpixels[row];
- for (col = width; col > 0; col--)
- {
- /* get pixel value and index into the histogram */
- int r, g, b, a;
- r = gdTrueColorGetRed (*ptr) >> C0_SHIFT;
- g = gdTrueColorGetGreen (*ptr) >> C1_SHIFT;
- b = gdTrueColorGetBlue (*ptr) >> C2_SHIFT;
- a = gdTrueColorGetAlpha (*ptr);
- /* We must have 100% opacity and transparency available
- in the color map to do an acceptable job with alpha
- channel, if opacity and transparency are present in the
- original, because of the visual properties of large
- flat-color border areas (requiring 100% transparency)
- and the behavior of poorly implemented browsers
- (requiring 100% opacity). Test for the presence of
- these here, and rescale the most opaque and transparent
- palette entries at the end if so. This avoids the need
- to develop a fuller understanding I have not been able
- to reach so far in my study of this subject. TBB */
- if (a == gdAlphaTransparent)
- {
- cquantize->transparentIsPresent = 1;
- }
- if (a == gdAlphaOpaque)
- {
- cquantize->opaqueIsPresent = 1;
- }
- a >>= C3_SHIFT;
- histp = &histogram[r][g][b][a];
- /* increment, check for overflow and undo increment if so. */
- if (++(*histp) <= 0)
- (*histp)--;
- ptr++;
- }
- }
-}
-
-
-/*
- * Next we have the really interesting routines: selection of a colormap
- * given the completed histogram.
- * These routines work with a list of "boxes", each representing a rectangular
- * subset of the input color space (to histogram precision).
- */
-
-typedef struct
-{
- /* The bounds of the box (inclusive); expressed as histogram indexes */
- int c0min, c0max;
- int c1min, c1max;
- int c2min, c2max;
- int c3min, c3max;
- /* The volume (actually 2-norm) of the box */
- int volume;
- /* The number of nonzero histogram cells within this box */
- long colorcount;
-}
-box;
-
-typedef box *boxptr;
-
-static boxptr
-find_biggest_color_pop (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest color population */
-/* Returns NULL if no splittable boxes remain */
-{
- register boxptr boxp;
- register int i;
- register long maxc = 0;
- boxptr which = NULL;
-
- for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++)
- {
- if (boxp->colorcount > maxc && boxp->volume > 0)
- {
- which = boxp;
- maxc = boxp->colorcount;
- }
- }
- return which;
-}
-
-
-static boxptr
-find_biggest_volume (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest (scaled) volume */
-/* Returns NULL if no splittable boxes remain */
-{
- register boxptr boxp;
- register int i;
- register int maxv = 0;
- boxptr which = NULL;
-
- for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++)
- {
- if (boxp->volume > maxv)
- {
- which = boxp;
- maxv = boxp->volume;
- }
- }
- return which;
-}
-
-
-static void
-update_box (gdImagePtr im, my_cquantize_ptr cquantize, boxptr boxp)
-/* Shrink the min/max bounds of a box to enclose only nonzero elements, */
-/* and recompute its volume and population */
-{
- hist4d histogram = cquantize->histogram;
- histptr histp;
- int c0, c1, c2, c3;
- int c0min, c0max, c1min, c1max, c2min, c2max, c3min, c3max;
- int dist0, dist1, dist2, dist3;
- long ccount;
-
- c0min = boxp->c0min;
- c0max = boxp->c0max;
- c1min = boxp->c1min;
- c1max = boxp->c1max;
- c2min = boxp->c2min;
- c2max = boxp->c2max;
- c3min = boxp->c3min;
- c3max = boxp->c3max;
-
- if (c0max > c0min)
- {
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- histp = &histogram[c0][c1][c2][c3min];
- for (c3 = c3min; c3 <= c3max; c3++)
- {
- if (*histp++ != 0)
- {
- boxp->c0min = c0min = c0;
- goto have_c0min;
- }
- }
- }
- }
- }
- }
-have_c0min:
- if (c0max > c0min)
- {
- for (c0 = c0max; c0 >= c0min; c0--)
- {
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- histp = &histogram[c0][c1][c2][c3min];
- for (c3 = c3min; c3 <= c3max; c3++)
- {
- if (*histp++ != 0)
- {
- boxp->c0max = c0max = c0;
- goto have_c0max;
- }
- }
- }
- }
- }
- }
-have_c0max:
- if (c1max > c1min)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- histp = &histogram[c0][c1][c2][c3min];
- for (c3 = c3min; c3 <= c3max; c3++)
- if (*histp++ != 0)
- {
- boxp->c1min = c1min = c1;
- goto have_c1min;
- }
- }
- }
-have_c1min:
- if (c1max > c1min)
- for (c1 = c1max; c1 >= c1min; c1--)
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- histp = &histogram[c0][c1][c2][c3min];
- for (c3 = c3min; c3 <= c3max; c3++)
- if (*histp++ != 0)
- {
- boxp->c1max = c1max = c1;
- goto have_c1max;
- }
- }
- }
-have_c1max:
- /* The original version hand-rolled the array lookup a little, but
- with four dimensions, I don't even want to think about it. TBB */
- if (c2max > c2min)
- for (c2 = c2min; c2 <= c2max; c2++)
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c3 = c3min; c3 <= c3max; c3++)
- if (histogram[c0][c1][c2][c3] != 0)
- {
- boxp->c2min = c2min = c2;
- goto have_c2min;
- }
-have_c2min:
- if (c2max > c2min)
- for (c2 = c2max; c2 >= c2min; c2--)
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c3 = c3min; c3 <= c3max; c3++)
- if (histogram[c0][c1][c2][c3] != 0)
- {
- boxp->c2max = c2max = c2;
- goto have_c2max;
- }
-have_c2max:
- if (c3max > c3min)
- for (c3 = c3min; c3 <= c3max; c3++)
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c2 = c2min; c2 <= c2max; c2++)
- if (histogram[c0][c1][c2][c3] != 0)
- {
- boxp->c3min = c3min = c3;
- goto have_c3min;
- }
-have_c3min:
- if (c3max > c3min)
- for (c3 = c3max; c3 >= c3min; c3--)
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c2 = c2min; c2 <= c2max; c2++)
- if (histogram[c0][c1][c2][c3] != 0)
- {
- boxp->c3max = c3max = c3;
- goto have_c3max;
- }
-have_c3max:
- /* Update box volume.
- * We use 2-norm rather than real volume here; this biases the method
- * against making long narrow boxes, and it has the side benefit that
- * a box is splittable iff norm > 0.
- * Since the differences are expressed in histogram-cell units,
- * we have to shift back to 8-bit units to get consistent distances;
- * after which, we scale according to the selected distance scale factors.
- * TBB: alpha shifts back to 7 bit units. That was accounted for in the
- * alpha scale factor.
- */
- dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE;
- dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE;
- dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE;
- dist3 = ((c3max - c3min) << C3_SHIFT) * C3_SCALE;
- boxp->volume = dist0 * dist0 + dist1 * dist1 + dist2 * dist2 + dist3 * dist3;
-
- /* Now scan remaining volume of box and compute population */
- ccount = 0;
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- histp = &histogram[c0][c1][c2][c3min];
- for (c3 = c3min; c3 <= c3max; c3++, histp++)
- if (*histp != 0)
- {
- ccount++;
- }
- }
- boxp->colorcount = ccount;
-}
-
-
-static int
-median_cut (gdImagePtr im, my_cquantize_ptr cquantize,
- boxptr boxlist, int numboxes,
- int desired_colors)
-/* Repeatedly select and split the largest box until we have enough boxes */
-{
- int n, lb;
- int c0, c1, c2, c3, cmax;
- register boxptr b1, b2;
-
- while (numboxes < desired_colors)
- {
- /* Select box to split.
- * Current algorithm: by population for first half, then by volume.
- */
- if (numboxes * 2 <= desired_colors)
- {
- b1 = find_biggest_color_pop (boxlist, numboxes);
- }
- else
- {
- b1 = find_biggest_volume (boxlist, numboxes);
- }
- if (b1 == NULL) /* no splittable boxes left! */
- break;
- b2 = &boxlist[numboxes]; /* where new box will go */
- /* Copy the color bounds to the new box. */
- b2->c0max = b1->c0max;
- b2->c1max = b1->c1max;
- b2->c2max = b1->c2max;
- b2->c3max = b1->c3max;
- b2->c0min = b1->c0min;
- b2->c1min = b1->c1min;
- b2->c2min = b1->c2min;
- b2->c3min = b1->c3min;
- /* Choose which axis to split the box on.
- * Current algorithm: longest scaled axis.
- * See notes in update_box about scaling distances.
- */
- c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE;
- c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE;
- c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE;
- c3 = ((b1->c3max - b1->c3min) << C3_SHIFT) * C3_SCALE;
- /* We want to break any ties in favor of green, then red, then blue,
- with alpha last. */
- cmax = c1;
- n = 1;
- if (c0 > cmax)
- {
- cmax = c0;
- n = 0;
- }
- if (c2 > cmax)
- {
- cmax = c2;
- n = 2;
- }
- if (c3 > cmax)
- {
- n = 3;
- }
- /* Choose split point along selected axis, and update box bounds.
- * Current algorithm: split at halfway point.
- * (Since the box has been shrunk to minimum volume,
- * any split will produce two nonempty subboxes.)
- * Note that lb value is max for lower box, so must be < old max.
- */
- switch (n)
- {
- case 0:
- lb = (b1->c0max + b1->c0min) / 2;
- b1->c0max = lb;
- b2->c0min = lb + 1;
- break;
- case 1:
- lb = (b1->c1max + b1->c1min) / 2;
- b1->c1max = lb;
- b2->c1min = lb + 1;
- break;
- case 2:
- lb = (b1->c2max + b1->c2min) / 2;
- b1->c2max = lb;
- b2->c2min = lb + 1;
- break;
- case 3:
- lb = (b1->c3max + b1->c3min) / 2;
- b1->c3max = lb;
- b2->c3min = lb + 1;
- break;
- }
- /* Update stats for boxes */
- update_box (im, cquantize, b1);
- update_box (im, cquantize, b2);
- numboxes++;
- }
- return numboxes;
-}
-
-
-static void
-compute_color (gdImagePtr im, my_cquantize_ptr cquantize,
- boxptr boxp, int icolor)
-/*
- Compute representative color for a box, put it in
- palette index icolor */
-{
- /* Current algorithm: mean weighted by pixels (not colors) */
- /* Note it is important to get the rounding correct! */
- hist4d histogram = cquantize->histogram;
- histptr histp;
- int c0, c1, c2, c3;
- int c0min, c0max, c1min, c1max, c2min, c2max, c3min, c3max;
- long count;
- long total = 0;
- long c0total = 0;
- long c1total = 0;
- long c2total = 0;
- long c3total = 0;
-
- c0min = boxp->c0min;
- c0max = boxp->c0max;
- c1min = boxp->c1min;
- c1max = boxp->c1max;
- c2min = boxp->c2min;
- c2max = boxp->c2max;
- c3min = boxp->c3min;
- c3max = boxp->c3max;
-
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- histp = &histogram[c0][c1][c2][c3min];
- for (c3 = c3min; c3 <= c3max; c3++)
- {
- if ((count = *histp++) != 0)
- {
- total += count;
- c0total += ((c0 << C0_SHIFT) + ((1 << C0_SHIFT) >> 1)) * count;
- c1total += ((c1 << C1_SHIFT) + ((1 << C1_SHIFT) >> 1)) * count;
- c2total += ((c2 << C2_SHIFT) + ((1 << C2_SHIFT) >> 1)) * count;
- c3total += ((c3 << C3_SHIFT) + ((1 << C3_SHIFT) >> 1)) * count;
- }
- }
- }
- }
- }
- im->red[icolor] = (int) ((c0total + (total >> 1)) / total);
- im->green[icolor] = (int) ((c1total + (total >> 1)) / total);
- im->blue[icolor] = (int) ((c2total + (total >> 1)) / total);
- im->alpha[icolor] = (int) ((c3total + (total >> 1)) / total);
- im->open[icolor] = 0;
- if (im->colorsTotal <= icolor)
- {
- im->colorsTotal = icolor + 1;
- }
-}
-
-static void
-select_colors (gdImagePtr im, my_cquantize_ptr cquantize, int desired_colors)
-/* Master routine for color selection */
-{
- boxptr boxlist;
- int numboxes;
- int i;
-
- /* Allocate workspace for box list */
- boxlist = (boxptr) gdMalloc (desired_colors * sizeof (box));
- /* Initialize one box containing whole space */
- numboxes = 1;
- /* Note maxval for alpha is different */
- boxlist[0].c0min = 0;
- boxlist[0].c0max = 255 >> C0_SHIFT;
- boxlist[0].c1min = 0;
- boxlist[0].c1max = 255 >> C1_SHIFT;
- boxlist[0].c2min = 0;
- boxlist[0].c2max = 255 >> C2_SHIFT;
- boxlist[0].c3min = 0;
- boxlist[0].c3max = gdAlphaMax >> C3_SHIFT;
- /* Shrink it to actually-used volume and set its statistics */
- update_box (im, cquantize, &boxlist[0]);
- /* Perform median-cut to produce final box list */
- numboxes = median_cut (im, cquantize, boxlist, numboxes, desired_colors);
- /* Compute the representative color for each box, fill colormap */
- for (i = 0; i < numboxes; i++)
- compute_color (im, cquantize, &boxlist[i], i);
- /* TBB: if the image contains colors at both scaled ends
- of the alpha range, rescale slightly to make sure alpha
- covers the full spectrum from 100% transparent to 100%
- opaque. Even a faint distinct background color is
- generally considered failure with regard to alpha. */
-
- im->colorsTotal = numboxes;
- gdFree (boxlist);
-}
-
-
-/*
- * These routines are concerned with the time-critical task of mapping input
- * colors to the nearest color in the selected colormap.
- *
- * We re-use the histogram space as an "inverse color map", essentially a
- * cache for the results of nearest-color searches. All colors within a
- * histogram cell will be mapped to the same colormap entry, namely the one
- * closest to the cell's center. This may not be quite the closest entry to
- * the actual input color, but it's almost as good. A zero in the cache
- * indicates we haven't found the nearest color for that cell yet; the array
- * is cleared to zeroes before starting the mapping pass. When we find the
- * nearest color for a cell, its colormap index plus one is recorded in the
- * cache for future use. The pass2 scanning routines call fill_inverse_cmap
- * when they need to use an unfilled entry in the cache.
- *
- * Our method of efficiently finding nearest colors is based on the "locally
- * sorted search" idea described by Heckbert and on the incremental distance
- * calculation described by Spencer W. Thomas in chapter III.1 of Graphics
- * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that
- * the distances from a given colormap entry to each cell of the histogram can
- * be computed quickly using an incremental method: the differences between
- * distances to adjacent cells themselves differ by a constant. This allows a
- * fairly fast implementation of the "brute force" approach of computing the
- * distance from every colormap entry to every histogram cell. Unfortunately,
- * it needs a work array to hold the best-distance-so-far for each histogram
- * cell (because the inner loop has to be over cells, not colormap entries).
- * The work array elements have to be INT32s, so the work array would need
- * 256Kb at our recommended precision. This is not feasible in DOS machines.
- *
- * To get around these problems, we apply Thomas' method to compute the
- * nearest colors for only the cells within a small subbox of the histogram.
- * The work array need be only as big as the subbox, so the memory usage
- * problem is solved. Furthermore, we need not fill subboxes that are never
- * referenced in pass2; many images use only part of the color gamut, so a
- * fair amount of work is saved. An additional advantage of this
- * approach is that we can apply Heckbert's locality criterion to quickly
- * eliminate colormap entries that are far away from the subbox; typically
- * three-fourths of the colormap entries are rejected by Heckbert's criterion,
- * and we need not compute their distances to individual cells in the subbox.
- * The speed of this approach is heavily influenced by the subbox size: too
- * small means too much overhead, too big loses because Heckbert's criterion
- * can't eliminate as many colormap entries. Empirically the best subbox
- * size seems to be about 1/512th of the histogram (1/8th in each direction).
- *
- * Thomas' article also describes a refined method which is asymptotically
- * faster than the brute-force method, but it is also far more complex and
- * cannot efficiently be applied to small subboxes. It is therefore not
- * useful for programs intended to be portable to DOS machines. On machines
- * with plenty of memory, filling the whole histogram in one shot with Thomas'
- * refined method might be faster than the present code --- but then again,
- * it might not be any faster, and it's certainly more complicated.
- */
-
-
-/* log2(histogram cells in update box) for each axis; this can be adjusted */
-#define BOX_C0_LOG (HIST_C0_BITS-3)
-#define BOX_C1_LOG (HIST_C1_BITS-3)
-#define BOX_C2_LOG (HIST_C2_BITS-3)
-#define BOX_C3_LOG (HIST_C3_BITS-3)
-
-#define BOX_C0_ELEMS (1<<BOX_C0_LOG) /* # of hist cells in update box */
-#define BOX_C1_ELEMS (1<<BOX_C1_LOG)
-#define BOX_C2_ELEMS (1<<BOX_C2_LOG)
-#define BOX_C3_ELEMS (1<<BOX_C3_LOG)
-
-#define BOX_C0_SHIFT (C0_SHIFT + BOX_C0_LOG)
-#define BOX_C1_SHIFT (C1_SHIFT + BOX_C1_LOG)
-#define BOX_C2_SHIFT (C2_SHIFT + BOX_C2_LOG)
-#define BOX_C3_SHIFT (C3_SHIFT + BOX_C3_LOG)
-
-
-/*
- * The next three routines implement inverse colormap filling. They could
- * all be folded into one big routine, but splitting them up this way saves
- * some stack space (the mindist[] and bestdist[] arrays need not coexist)
- * and may allow some compilers to produce better code by registerizing more
- * inner-loop variables.
- */
-
-static int
-find_nearby_colors (gdImagePtr im, my_cquantize_ptr cquantize,
- int minc0, int minc1, int minc2, int minc3, int colorlist[])
-/* Locate the colormap entries close enough to an update box to be candidates
- * for the nearest entry to some cell(s) in the update box. The update box
- * is specified by the center coordinates of its first cell. The number of
- * candidate colormap entries is returned, and their colormap indexes are
- * placed in colorlist[].
- * This routine uses Heckbert's "locally sorted search" criterion to select
- * the colors that need further consideration.
- */
-{
- int numcolors = im->colorsTotal;
- int maxc0, maxc1, maxc2, maxc3;
- int centerc0, centerc1, centerc2, centerc3;
- int i, x, ncolors;
- int minmaxdist, min_dist, max_dist, tdist;
- int mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */
-
- /* Compute true coordinates of update box's upper corner and center.
- * Actually we compute the coordinates of the center of the upper-corner
- * histogram cell, which are the upper bounds of the volume we care about.
- * Note that since ">>" rounds down, the "center" values may be closer to
- * min than to max; hence comparisons to them must be "<=", not "<".
- */
- maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT));
- centerc0 = (minc0 + maxc0) >> 1;
- maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT));
- centerc1 = (minc1 + maxc1) >> 1;
- maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT));
- centerc2 = (minc2 + maxc2) >> 1;
- maxc3 = minc3 + ((1 << BOX_C3_SHIFT) - (1 << C3_SHIFT));
- centerc3 = (minc3 + maxc3) >> 1;
-
- /* For each color in colormap, find:
- * 1. its minimum squared-distance to any point in the update box
- * (zero if color is within update box);
- * 2. its maximum squared-distance to any point in the update box.
- * Both of these can be found by considering only the corners of the box.
- * We save the minimum distance for each color in mindist[];
- * only the smallest maximum distance is of interest.
- */
- minmaxdist = 0x7FFFFFFFL;
-
- for (i = 0; i < numcolors; i++)
- {
- /* We compute the squared-c0-distance term, then add in the other three. */
- x = im->red[i];
- if (x < minc0)
- {
- tdist = (x - minc0) * C0_SCALE;
- min_dist = tdist * tdist;
- tdist = (x - maxc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- else if (x > maxc0)
- {
- tdist = (x - maxc0) * C0_SCALE;
- min_dist = tdist * tdist;
- tdist = (x - minc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- min_dist = 0;
- if (x <= centerc0)
- {
- tdist = (x - maxc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- else
- {
- tdist = (x - minc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- }
-
- x = im->green[i];
- if (x < minc1)
- {
- tdist = (x - minc1) * C1_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- else if (x > maxc1)
- {
- tdist = (x - maxc1) * C1_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc1)
- {
- tdist = (x - maxc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- tdist = (x - minc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
- x = im->blue[i];
- if (x < minc2)
- {
- tdist = (x - minc2) * C2_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- else if (x > maxc2)
- {
- tdist = (x - maxc2) * C2_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc2)
- {
- tdist = (x - maxc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- tdist = (x - minc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
- x = im->alpha[i];
- if (x < minc3)
- {
- tdist = (x - minc3) * C3_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc3) * C3_SCALE;
- max_dist += tdist * tdist;
- }
- else if (x > maxc3)
- {
- tdist = (x - maxc3) * C3_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc3) * C3_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc3)
- {
- tdist = (x - maxc3) * C3_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- tdist = (x - minc3) * C3_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
- mindist[i] = min_dist; /* save away the results */
- if (max_dist < minmaxdist)
- minmaxdist = max_dist;
- }
-
- /* Now we know that no cell in the update box is more than minmaxdist
- * away from some colormap entry. Therefore, only colors that are
- * within minmaxdist of some part of the box need be considered.
- */
- ncolors = 0;
- for (i = 0; i < numcolors; i++)
- {
- if (mindist[i] <= minmaxdist)
- colorlist[ncolors++] = i;
- }
- return ncolors;
-}
-
-
-static void
-find_best_colors (gdImagePtr im, my_cquantize_ptr cquantize,
- int minc0, int minc1, int minc2, int minc3,
- int numcolors, int colorlist[], int bestcolor[])
-/* Find the closest colormap entry for each cell in the update box,
- * given the list of candidate colors prepared by find_nearby_colors.
- * Return the indexes of the closest entries in the bestcolor[] array.
- * This routine uses Thomas' incremental distance calculation method to
- * find the distance from a colormap entry to successive cells in the box.
- */
-{
- int ic0, ic1, ic2, ic3;
- int i, icolor;
- register int *bptr; /* pointer into bestdist[] array */
- int *cptr; /* pointer into bestcolor[] array */
- int dist0, dist1, dist2; /* initial distance values */
- register int dist3; /* current distance in inner loop */
- int xx0, xx1, xx2; /* distance increments */
- register int xx3;
- int inc0, inc1, inc2, inc3; /* initial values for increments */
- /* This array holds the distance to the nearest-so-far color for each cell */
- int bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS * BOX_C3_ELEMS];
-
- /* Initialize best-distance for each cell of the update box */
- bptr = bestdist;
- for (i = BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS * BOX_C3_ELEMS - 1; i >= 0; i--)
- *bptr++ = 0x7FFFFFFFL;
-
- /* For each color selected by find_nearby_colors,
- * compute its distance to the center of each cell in the box.
- * If that's less than best-so-far, update best distance and color number.
- */
-
- /* Nominal steps between cell centers ("x" in Thomas article) */
-#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE)
-#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE)
-#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE)
-#define STEP_C3 ((1 << C3_SHIFT) * C3_SCALE)
-
- for (i = 0; i < numcolors; i++)
- {
- icolor = colorlist[i];
- /* Compute (square of) distance from minc0/c1/c2 to this color */
- inc0 = (minc0 - (im->red[icolor])) * C0_SCALE;
- dist0 = inc0 * inc0;
- inc1 = (minc1 - (im->green[icolor])) * C1_SCALE;
- dist0 += inc1 * inc1;
- inc2 = (minc2 - (im->blue[icolor])) * C2_SCALE;
- dist0 += inc2 * inc2;
- inc3 = (minc3 - (im->alpha[icolor])) * C3_SCALE;
- dist0 += inc3 * inc3;
- /* Form the initial difference increments */
- inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0;
- inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1;
- inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2;
- inc3 = inc3 * (2 * STEP_C3) + STEP_C3 * STEP_C3;
- /* Now loop over all cells in box, updating distance per Thomas method */
- bptr = bestdist;
- cptr = bestcolor;
- xx0 = inc0;
- for (ic0 = BOX_C0_ELEMS - 1; ic0 >= 0; ic0--)
- {
- dist1 = dist0;
- xx1 = inc1;
- for (ic1 = BOX_C1_ELEMS - 1; ic1 >= 0; ic1--)
- {
- dist2 = dist1;
- xx2 = inc2;
- for (ic2 = BOX_C2_ELEMS - 1; ic2 >= 0; ic2--)
- {
- for (ic3 = BOX_C3_ELEMS - 1; ic3 >= 0; ic3--)
- {
- if (dist3 < *bptr)
- {
- *bptr = dist3;
- *cptr = icolor;
- }
- dist3 += xx3;
- xx3 += 2 * STEP_C3 * STEP_C3;
- bptr++;
- cptr++;
- }
- dist2 += xx2;
- xx2 += 2 * STEP_C2 * STEP_C2;
- }
- dist1 += xx1;
- xx1 += 2 * STEP_C1 * STEP_C1;
- }
- dist0 += xx0;
- xx0 += 2 * STEP_C0 * STEP_C0;
- }
- }
-}
-
-
-static void
-fill_inverse_cmap (gdImagePtr im, my_cquantize_ptr cquantize,
- int c0, int c1, int c2, int c3)
-/* Fill the inverse-colormap entries in the update box that contains */
-/* histogram cell c0/c1/c2/c3. (Only that one cell MUST be filled, but */
-/* we can fill as many others as we wish.) */
-{
- hist4d histogram = cquantize->histogram;
- int minc0, minc1, minc2, minc3; /* lower left corner of update box */
- int ic0, ic1, ic2, ic3;
- register int *cptr; /* pointer into bestcolor[] array */
- register histptr cachep; /* pointer into main cache array */
- /* This array lists the candidate colormap indexes. */
- int colorlist[MAXNUMCOLORS];
- int numcolors; /* number of candidate colors */
- /* This array holds the actually closest colormap index for each cell. */
- int bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS * BOX_C3_ELEMS];
-
- /* Convert cell coordinates to update box ID */
- c0 >>= BOX_C0_LOG;
- c1 >>= BOX_C1_LOG;
- c2 >>= BOX_C2_LOG;
- c3 >>= BOX_C3_LOG;
-
- /* Compute true coordinates of update box's origin corner.
- * Actually we compute the coordinates of the center of the corner
- * histogram cell, which are the lower bounds of the volume we care about.
- */
- minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1);
- minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1);
- minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1);
- minc3 = (c3 << BOX_C3_SHIFT) + ((1 << C3_SHIFT) >> 1);
- /* Determine which colormap entries are close enough to be candidates
- * for the nearest entry to some cell in the update box.
- */
- numcolors = find_nearby_colors (im, cquantize, minc0, minc1, minc2, minc3, colorlist);
-
- /* Determine the actually nearest colors. */
- find_best_colors (im, cquantize, minc0, minc1, minc2, minc3, numcolors, colorlist,
- bestcolor);
-
- /* Save the best color numbers (plus 1) in the main cache array */
- c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */
- c1 <<= BOX_C1_LOG;
- c2 <<= BOX_C2_LOG;
- c3 <<= BOX_C3_LOG;
- cptr = bestcolor;
- for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++)
- {
- for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++)
- {
- for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++)
- {
- cachep = &histogram[c0 + ic0][c1 + ic1][c2 + ic2][c3];
- for (ic3 = 0; ic3 < BOX_C3_ELEMS; ic3++)
- {
- *cachep++ = (histcell) ((*cptr++) + 1);
- }
- }
- }
- }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-void
-pass2_no_dither (gdImagePtr im, my_cquantize_ptr cquantize)
-/* This version performs no dithering */
-{
- hist4d histogram = cquantize->histogram;
- register int *inptr;
- register unsigned char *outptr;
- register histptr cachep;
- register int c0, c1, c2, c3;
- int row;
- int col;
- int width = im->sx;
- int num_rows = im->sy;
- for (row = 0; row < num_rows; row++)
- {
- inptr = im->tpixels[row];
- outptr = im->pixels[row];
- for (col = 0; col < width; col++)
- {
- int r, g, b, a;
- /* get pixel value and index into the cache */
- r = gdTrueColorGetRed (*inptr);
- g = gdTrueColorGetGreen (*inptr);
- b = gdTrueColorGetBlue (*inptr);
- a = gdTrueColorGetAlpha (*inptr++);
- c0 = r >> C0_SHIFT;
- c1 = g >> C1_SHIFT;
- c2 = b >> C2_SHIFT;
- c3 = a >> C3_SHIFT;
- cachep = &histogram[c0][c1][c2][c3];
- /* If we have not seen this color before, find nearest colormap entry */
- /* and update the cache */
- if (*cachep == 0)
- {
-#if 0
- /* TBB: quick and dirty approach for use when testing
- fill_inverse_cmap for errors */
- int i;
- int best = -1;
- int mindist = 0x7FFFFFFF;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- int rdist = (im->red[i] >> C0_SHIFT) - c0;
- int gdist = (im->green[i] >> C1_SHIFT) - c1;
- int bdist = (im->blue[i] >> C2_SHIFT) - c2;
- int adist = (im->alpha[i] >> C3_SHIFT) - c3;
- int dist = (rdist * rdist) * R_SCALE +
- (gdist * gdist) * G_SCALE +
- (bdist * bdist) * B_SCALE +
- (adist * adist) * A_SCALE;
- if (dist < mindist)
- {
- best = i;
- mindist = dist;
- }
- }
- *cachep = best + 1;
-#endif
- fill_inverse_cmap (im, cquantize, c0, c1, c2, c3);
- }
- /* Now emit the colormap index for this cell */
- *outptr++ = (*cachep - 1);
- }
- }
-}
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity. This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit. But some
- * C compilers implement >> with an unsigned shift. For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts. SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft) \
- ((shift_temp = (x)) < 0 ? \
- (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
- (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft) ((x) >> (shft))
-#endif
-
-
-void
-pass2_fs_dither (gdImagePtr im, my_cquantize_ptr cquantize)
-
-/* This version performs Floyd-Steinberg dithering */
-{
- hist4d histogram = cquantize->histogram;
- register LOCFSERROR cur0, cur1, cur2, cur3; /* current error or pixel value */
- LOCFSERROR belowerr0, belowerr1, belowerr2, belowerr3; /* error for pixel below cur */
- LOCFSERROR bpreverr0, bpreverr1, bpreverr2, bpreverr3; /* error for below/prev col */
- register FSERRPTR errorptr; /* => fserrors[] at column before current */
- int *inptr; /* => current input pixel */
- unsigned char *outptr; /* => current output pixel */
- histptr cachep;
- int dir; /* +1 or -1 depending on direction */
- int dir4; /* 4*dir, for advancing errorptr */
- int row;
- int col;
- int width = im->sx;
- int num_rows = im->sy;
- int *error_limit = cquantize->error_limiter;
- int *colormap0 = im->red;
- int *colormap1 = im->green;
- int *colormap2 = im->blue;
- int *colormap3 = im->alpha;
- SHIFT_TEMPS
-
- for (row = 0; row < num_rows; row++)
- {
- inptr = im->tpixels[row];
- outptr = im->pixels[row];
- if (cquantize->on_odd_row)
- {
- /* work right to left in this row */
- inptr += (width - 1); /* so point to rightmost pixel */
- outptr += width - 1;
- dir = -1;
- dir4 = -4;
- errorptr = cquantize->fserrors + (width + 1) * 4; /* => entry after last column */
- cquantize->on_odd_row = FALSE; /* flip for next time */
- }
- else
- {
- /* work left to right in this row */
- dir = 1;
- dir4 = 4;
- errorptr = cquantize->fserrors; /* => entry before first real column */
- cquantize->on_odd_row = TRUE; /* flip for next time */
- }
- /* Preset error values: no error propagated to first pixel from left */
- cur0 = cur1 = cur2 = cur3 = 0;
- /* and no error propagated to row below yet */
- belowerr0 = belowerr1 = belowerr2 = belowerr3 = 0;
- bpreverr0 = bpreverr1 = bpreverr2 = bpreverr3 = 0;
-
- for (col = width; col > 0; col--)
- {
- int a;
- /* curN holds the error propagated from the previous pixel on the
- * current line. Add the error propagated from the previous line
- * to form the complete error correction term for this pixel, and
- * round the error term (which is expressed * 16) to an integer.
- * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
- * for either sign of the error value.
- * Note: errorptr points to *previous* column's array entry.
- */
- cur0 = RIGHT_SHIFT (cur0 + errorptr[dir4 + 0] + 8, 4);
- cur1 = RIGHT_SHIFT (cur1 + errorptr[dir4 + 1] + 8, 4);
- cur2 = RIGHT_SHIFT (cur2 + errorptr[dir4 + 2] + 8, 4);
- cur3 = RIGHT_SHIFT (cur3 + errorptr[dir4 + 3] + 8, 4);
- /* Limit the error using transfer function set by init_error_limit.
- * See comments with init_error_limit for rationale.
- */
- cur0 = error_limit[cur0];
- cur1 = error_limit[cur1];
- cur2 = error_limit[cur2];
- cur3 = error_limit[cur3];
- /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
- * The maximum error is +- MAXJSAMPLE (or less with error limiting);
- * but we'll be lazy and just clamp this with an if test (TBB).
- */
- cur0 += gdTrueColorGetRed (*inptr);
- cur1 += gdTrueColorGetGreen (*inptr);
- cur2 += gdTrueColorGetBlue (*inptr);
- /* Expand to 8 bits for consistency with dithering algorithm -- TBB */
- a = gdTrueColorGetAlpha (*inptr);
- cur3 += (a << 1) + (a >> 6);
- if (cur0 < 0)
- {
- cur0 = 0;
- }
- if (cur0 > 255)
- {
- cur0 = 255;
- }
- if (cur1 < 0)
- {
- cur1 = 0;
- }
- if (cur1 > 255)
- {
- cur1 = 255;
- }
- if (cur2 < 0)
- {
- cur2 = 0;
- }
- if (cur2 > 255)
- {
- cur2 = 255;
- }
- if (cur3 < 0)
- {
- cur3 = 0;
- }
- if (cur3 > 255)
- {
- cur3 = 255;
- }
- /* Index into the cache with adjusted pixel value */
- cachep = &histogram
- [cur0 >> C0_SHIFT]
- [cur1 >> C1_SHIFT]
- [cur2 >> C2_SHIFT]
- [cur3 >> (C3_SHIFT + 1)];
- /* If we have not seen this color before, find nearest colormap */
- /* entry and update the cache */
- if (*cachep == 0)
- fill_inverse_cmap (im, cquantize,
- cur0 >> C0_SHIFT, cur1 >> C1_SHIFT, cur2 >> C2_SHIFT,
- cur3 >> (C3_SHIFT + 1));
- /* Now emit the colormap index for this cell */
- {
- register int pixcode = *cachep - 1;
- *outptr = pixcode;
- /* Compute representation error for this pixel */
- cur0 -= colormap0[pixcode];
- cur1 -= colormap1[pixcode];
- cur2 -= colormap2[pixcode];
- cur3 -= ((colormap3[pixcode] << 1) + (colormap3[pixcode] >> 6));
- }
- /* Compute error fractions to be propagated to adjacent pixels.
- * Add these into the running sums, and simultaneously shift the
- * next-line error sums left by 1 column.
- */
- {
- register LOCFSERROR bnexterr, delta;
-
- bnexterr = cur0; /* Process component 0 */
- delta = cur0 * 2;
- cur0 += delta; /* form error * 3 */
- errorptr[0] = (FSERROR) (bpreverr0 + cur0);
- cur0 += delta; /* form error * 5 */
- bpreverr0 = belowerr0 + cur0;
- belowerr0 = bnexterr;
- cur0 += delta; /* form error * 7 */
- bnexterr = cur1; /* Process component 1 */
- delta = cur1 * 2;
- cur1 += delta; /* form error * 3 */
- errorptr[1] = (FSERROR) (bpreverr1 + cur1);
- cur1 += delta; /* form error * 5 */
- bpreverr1 = belowerr1 + cur1;
- belowerr1 = bnexterr;
- cur1 += delta; /* form error * 7 */
- bnexterr = cur2; /* Process component 2 */
- delta = cur2 * 2;
- cur2 += delta; /* form error * 3 */
- errorptr[2] = (FSERROR) (bpreverr2 + cur2);
- cur2 += delta; /* form error * 5 */
- bpreverr2 = belowerr2 + cur2;
- belowerr2 = bnexterr;
- cur2 += delta; /* form error * 7 */
- bnexterr = cur3; /* Process component 3 */
- delta = cur3 * 2;
- cur3 += delta; /* form error * 3 */
- errorptr[3] = (FSERROR) (bpreverr3 + cur3);
- cur3 += delta; /* form error * 5 */
- bpreverr3 = belowerr3 + cur3;
- belowerr3 = bnexterr;
- cur3 += delta; /* form error * 7 */
- }
- /* At this point curN contains the 7/16 error value to be propagated
- * to the next pixel on the current line, and all the errors for the
- * next line have been shifted over. We are therefore ready to move on.
- */
- inptr += dir; /* Advance pixel pointers to next column */
- outptr += dir;
- errorptr += dir4; /* advance errorptr to current column */
- }
- /* Post-loop cleanup: we must unload the final error values into the
- * final fserrors[] entry. Note we need not unload belowerrN because
- * it is for the dummy column before or after the actual array.
- */
- errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */
- errorptr[1] = (FSERROR) bpreverr1;
- errorptr[2] = (FSERROR) bpreverr2;
- errorptr[3] = (FSERROR) bpreverr3;
- }
-}
-
-
-/*
- * Initialize the error-limiting transfer function (lookup table).
- * The raw F-S error computation can potentially compute error values of up to
- * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be
- * much less, otherwise obviously wrong pixels will be created. (Typical
- * effects include weird fringes at color-area boundaries, isolated bright
- * pixels in a dark area, etc.) The standard advice for avoiding this problem
- * is to ensure that the "corners" of the color cube are allocated as output
- * colors; then repeated errors in the same direction cannot cause cascading
- * error buildup. However, that only prevents the error from getting
- * completely out of hand; Aaron Giles reports that error limiting improves
- * the results even with corner colors allocated.
- * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty
- * well, but the smoother transfer function used below is even better. Thanks
- * to Aaron Giles for this idea.
- */
-
-static int
-init_error_limit (gdImagePtr im, my_cquantize_ptr cquantize)
-/* Allocate and fill in the error_limiter table */
-{
- int *table;
- int in, out;
-
- cquantize->error_limiter_storage = (int *) gdMalloc ((255 * 2 + 1) * sizeof (int));
- if (!cquantize->error_limiter_storage)
- {
- return 0;
- }
- /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */
- cquantize->error_limiter = cquantize->error_limiter_storage + 255;
- table = cquantize->error_limiter;
-#define STEPSIZE ((255+1)/16)
- /* Map errors 1:1 up to +- MAXJSAMPLE/16 */
- out = 0;
- for (in = 0; in < STEPSIZE; in++, out++)
- {
- table[in] = out;
- table[-in] = -out;
- }
- /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */
- for (; in < STEPSIZE * 3; in++, out += (in & 1) ? 0 : 1)
- {
- table[in] = out;
- table[-in] = -out;
- }
- /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */
- for (; in <= 255; in++)
- {
- table[in] = out;
- table[-in] = -out;
- }
-#undef STEPSIZE
- return 1;
-}
-
-static void
-zeroHistogram (hist4d histogram)
-{
- int i;
- int j;
- /* Zero the histogram or inverse color map */
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- for (j = 0; j < HIST_C1_ELEMS; j++)
- {
- memset (histogram[i][j],
- 0,
- HIST_C2_ELEMS * HIST_C3_ELEMS * sizeof (histcell));
- }
- }
-}
-
-/* Here we go at last. */
-void
-gdImageTrueColorToPalette (gdImagePtr im, int dither, int colorsWanted)
-{
- my_cquantize_ptr cquantize = 0;
- int i;
- size_t arraysize;
- if (!im->trueColor)
- {
- /* Nothing to do! */
- return;
- }
- if (colorsWanted > gdMaxColors)
- {
- colorsWanted = gdMaxColors;
- }
- im->pixels = gdCalloc (sizeof (unsigned char *), im->sy);
- if (!im->pixels)
- {
- /* No can do */
- goto outOfMemory;
- }
- for (i = 0; (i < im->sy); i++)
- {
- im->pixels[i] = gdCalloc (sizeof (unsigned char *), im->sx);
- if (!im->pixels[i])
- {
- goto outOfMemory;
- }
- }
- cquantize = (my_cquantize_ptr) gdCalloc (sizeof (my_cquantizer), 1);
- if (!cquantize)
- {
- /* No can do */
- goto outOfMemory;
- }
- /* Allocate the histogram/inverse colormap storage */
- cquantize->histogram = (hist4d) gdMalloc (HIST_C0_ELEMS * sizeof (hist3d));
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- int j;
- cquantize->histogram[i] = (hist3d) gdCalloc (HIST_C1_ELEMS,
- sizeof (hist2d));
- if (!cquantize->histogram[i])
- {
- goto outOfMemory;
- }
- for (j = 0; (j < HIST_C1_ELEMS); j++)
- {
- cquantize->histogram[i][j] = (hist2d) gdCalloc (HIST_C2_ELEMS * HIST_C3_ELEMS,
- sizeof (histcell));
- if (!cquantize->histogram[i][j])
- {
- goto outOfMemory;
- }
- }
- }
- cquantize->fserrors = (FSERRPTR) gdMalloc (4 * sizeof (FSERROR));
- init_error_limit (im, cquantize);
- arraysize = (size_t) ((im->sx + 2) *
- (4 * sizeof (FSERROR)));
- /* Allocate Floyd-Steinberg workspace. */
- cquantize->fserrors = gdCalloc (arraysize, 1);
- if (!cquantize->fserrors)
- {
- goto outOfMemory;
- }
- cquantize->on_odd_row = FALSE;
-
- /* Do the work! */
- zeroHistogram (cquantize->histogram);
- prescan_quantize (im, cquantize);
- select_colors (im, cquantize, 256);
- /* TBB HACK REMOVE */
- {
- FILE *out = fopen ("palettemap.png", "wb");
- int i;
- gdImagePtr im2 = gdImageCreateTrueColor (256, 256);
- for (i = 0; (i < 256); i++)
- {
- gdImageFilledRectangle (im2, (i % 16) * 16, (i / 16) * 16,
- (i % 16) * 16 + 15, (i / 16) * 16 + 15,
- gdTrueColorAlpha (im->red[i], im->green[i],
- im->blue[i], im->alpha[i]));
- }
- gdImagePng (im2, out);
- fclose (out);
- gdImageDestroy (im2);
- }
- zeroHistogram (cquantize->histogram);
- if (dither)
- {
- pass2_fs_dither (im, cquantize);
- }
- else
- {
- pass2_no_dither (im, cquantize);
- }
- if (cquantize->transparentIsPresent)
- {
- int mt = -1;
- int mtIndex = -1;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] > mt)
- {
- mtIndex = i;
- mt = im->alpha[i];
- }
- }
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] == mt)
- {
- im->alpha[i] = gdAlphaTransparent;
- }
- }
- }
- if (cquantize->opaqueIsPresent)
- {
- int mo = 128;
- int moIndex = -1;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] < mo)
- {
- moIndex = i;
- mo = im->alpha[i];
- }
- }
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] == mo)
- {
- im->alpha[i] = gdAlphaOpaque;
- }
- }
- }
- /* Success! Get rid of the truecolor image data. */
- im->trueColor = 0;
- /* Junk the truecolor pixels */
- for (i = 0; i < im->sy; i++)
- {
- gdFree (im->tpixels[i]);
- }
- gdFree (im->tpixels);
- im->tpixels = 0;
- /* Tediously free stuff. */
-outOfMemory:
- if (im->trueColor)
- {
- /* On failure only */
- for (i = 0; i < im->sy; i++)
- {
- if (im->pixels[i])
- {
- gdFree (im->pixels[i]);
- }
- }
- if (im->pixels)
- {
- gdFree (im->pixels);
- }
- im->pixels = 0;
- }
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- if (cquantize->histogram[i])
- {
- int j;
- for (j = 0; j < HIST_C1_ELEMS; j++)
- {
- if (cquantize->histogram[i][j])
- {
- gdFree (cquantize->histogram[i][j]);
- }
- }
- gdFree (cquantize->histogram[i]);
- }
- }
- if (cquantize->histogram)
- {
- gdFree (cquantize->histogram);
- }
- if (cquantize->fserrors)
- {
- gdFree (cquantize->fserrors);
- }
- if (cquantize->error_limiter_storage)
- {
- gdFree (cquantize->error_limiter_storage);
- }
- if (cquantize)
- {
- gdFree (cquantize);
- }
-}
diff --git a/ext/gd/libgd/gd_wbmp.c b/ext/gd/libgd/gd_wbmp.c
deleted file mode 100644
index 04a7108278..0000000000
--- a/ext/gd/libgd/gd_wbmp.c
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
-/*
- WBMP: Wireless Bitmap Type 0: B/W, Uncompressed Bitmap
- Specification of the WBMP format can be found in the file:
- SPEC-WAESpec-19990524.pdf
- You can download the WAP specification on: http://www.wapforum.com/
-
- gd_wbmp.c
-
- Copyright (C) Johan Van den Brande (johan@vandenbrande.com)
-
- Fixed: gdImageWBMPPtr, gdImageWBMP
-
- Recoded: gdImageWBMPCtx for use with my wbmp library
- (wbmp library included, but you can find the latest distribution
- at http://www.vandenbrande.com/wbmp)
-
- Implemented: gdImageCreateFromWBMPCtx, gdImageCreateFromWBMP
-
- ---------------------------------------------------------------------------
-
- Parts of this code are from Maurice Smurlo.
-
-
- ** Copyright (C) Maurice Szmurlo --- T-SIT --- January 2000
- ** (Maurice.Szmurlo@info.unicaen.fr)
-
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
-
- ---------------------------------------------------------------------------
- Parts od this code are inspired by 'pbmtowbmp.c' and 'wbmptopbm.c' by
- Terje Sannum <terje@looplab.com>.
- **
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
- **
- ---------------------------------------------------------------------------
-
- Todo:
-
- gdCreateFromWBMP function for reading WBMP files
-
- ----------------------------------------------------------------------------
- */
-
-#include <gd.h>
-#include <gdfonts.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#include "wbmp.h"
-
-
-/* gd_putout
- ** ---------
- ** Wrapper around gdPutC for use with writewbmp
- **
- */
-void
-gd_putout (int i, void *out)
-{
- gdPutC (i, (gdIOCtx *) out);
-}
-
-
-/* gd_getin
- ** --------
- ** Wrapper around gdGetC for use with readwbmp
- **
- */
-int
-gd_getin (void *in)
-{
- return (gdGetC ((gdIOCtx *) in));
-}
-
-
-/* gdImageWBMPCtx
- ** --------------
- ** Write the image as a wbmp file
- ** Parameters are:
- ** image: gd image structure;
- ** fg: the index of the foreground color. any other value will be
- ** considered as background and will not be written
- ** out: the stream where to write
- */
-void
-gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
-{
-
- int x, y, pos;
- Wbmp *wbmp;
-
-
- /* create the WBMP */
- if ((wbmp = createwbmp (gdImageSX (image), gdImageSY (image), WBMP_WHITE)) == NULL)
- fprintf (stderr, "Could not create WBMP\n");
-
- /* fill up the WBMP structure */
- pos = 0;
- for (y = 0; y < gdImageSY (image); y++)
- {
- for (x = 0; x < gdImageSX (image); x++)
- {
- if (gdImageGetPixel (image, x, y) == fg)
- {
- wbmp->bitmap[pos] = WBMP_BLACK;
- }
- pos++;
- }
- }
-
- /* write the WBMP to a gd file descriptor */
- if (writewbmp (wbmp, &gd_putout, out))
- fprintf (stderr, "Could not save WBMP\n");
- /* des submitted this bugfix: gdFree the memory. */
- freewbmp (wbmp);
-}
-
-
-/* gdImageCreateFromWBMPCtx
- ** ------------------------
- ** Create a gdImage from a WBMP file input from an gdIOCtx
- */
-gdImagePtr
-gdImageCreateFromWBMPCtx (gdIOCtx * infile)
-{
- /* FILE *wbmp_file; */
- Wbmp *wbmp;
- gdImagePtr im = NULL;
- int black, white;
- int col, row, pos;
-
- if (readwbmp (&gd_getin, infile, &wbmp))
- return (NULL);
-
- if (!(im = gdImageCreate (wbmp->width, wbmp->height)))
- {
- freewbmp (wbmp);
- return (NULL);
- }
-
- /* create the background color */
- white = gdImageColorAllocate (im, 255, 255, 255);
- /* create foreground color */
- black = gdImageColorAllocate (im, 0, 0, 0);
-
- /* fill in image (in a wbmp 1 = white/ 0 = black) */
- pos = 0;
- for (row = 0; row < wbmp->height; row++)
- {
- for (col = 0; col < wbmp->width; col++)
- {
- if (wbmp->bitmap[pos++] == WBMP_WHITE)
- {
- gdImageSetPixel (im, col, row, white);
- }
- else
- {
- gdImageSetPixel (im, col, row, black);
- }
- }
- }
-
- freewbmp (wbmp);
-
- return (im);
-}
-
-
-/* gdImageCreateFromWBMP
- ** ---------------------
- */
-gdImagePtr
-gdImageCreateFromWBMP (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx (inFile);
- im = gdImageCreateFromWBMPCtx (in);
- in->free (in);
- return (im);
-}
-
-/* gdImageWBMP
- ** -----------
- */
-void
-gdImageWBMP (gdImagePtr im, int fg, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- gdImageWBMPCtx (im, fg, out);
- out->free (out);
-}
-
-/* gdImageWBMPPtr
- ** --------------
- */
-void *
-gdImageWBMPPtr (gdImagePtr im, int *size, int fg)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- gdImageWBMPCtx (im, fg, out);
- rv = gdDPExtractData (out, size);
- out->free (out);
- return rv;
-}
diff --git a/ext/gd/libgd/gdcache.c b/ext/gd/libgd/gdcache.c
deleted file mode 100644
index e4770f5ba9..0000000000
--- a/ext/gd/libgd/gdcache.c
+++ /dev/null
@@ -1,214 +0,0 @@
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef HAVE_LIBTTF
-#define NEED_CACHE 1
-#else
-#ifdef HAVE_LIBFREETYPE
-#define NEED_CACHE 1
-#endif
-#endif
-
-#ifdef NEED_CACHE
-
-/*
- * gdcache.c
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@lucent.com) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-#include "gdcache.h"
-
-/*********************************************************/
-/* implementation */
-/*********************************************************/
-
-
-/* create a new cache */
-gdCache_head_t *
-gdCacheCreate (
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease)
-{
- gdCache_head_t *head;
-
- head = (gdCache_head_t *) gdMalloc (sizeof (gdCache_head_t));
- head->mru = NULL;
- head->size = size;
- head->gdCacheTest = gdCacheTest;
- head->gdCacheFetch = gdCacheFetch;
- head->gdCacheRelease = gdCacheRelease;
- return head;
-}
-
-void
-gdCacheDelete (gdCache_head_t * head)
-{
- gdCache_element_t *elem, *prev;
-
- elem = head->mru;
- while (elem)
- {
- (*(head->gdCacheRelease)) (elem->userdata);
- prev = elem;
- elem = elem->next;
- gdFree ((char *) prev);
- }
- gdFree ((char *) head);
-}
-
-void *
-gdCacheGet (gdCache_head_t * head, void *keydata)
-{
- int i = 0;
- gdCache_element_t *elem, *prev = NULL, *prevprev = NULL;
- void *userdata;
-
- elem = head->mru;
- while (elem)
- {
- if ((*(head->gdCacheTest)) (elem->userdata, keydata))
- {
- if (i)
- { /* if not already most-recently-used */
- /* relink to top of list */
- prev->next = elem->next;
- elem->next = head->mru;
- head->mru = elem;
- }
- return elem->userdata;
- }
- prevprev = prev;
- prev = elem;
- elem = elem->next;
- i++;
- }
- userdata = (*(head->gdCacheFetch)) (&(head->error), keydata);
- if (!userdata)
- {
- /* if there was an error in the fetch then don't cache */
- return NULL;
- }
- if (i < head->size)
- { /* cache still growing - add new elem */
- elem = (gdCache_element_t *) gdMalloc (sizeof (gdCache_element_t));
- }
- else
- { /* cache full - replace least-recently-used */
- /* preveprev becomes new end of list */
- prevprev->next = NULL;
- elem = prev;
- (*(head->gdCacheRelease)) (elem->userdata);
- }
- /* relink to top of list */
- elem->next = head->mru;
- head->mru = elem;
- elem->userdata = userdata;
- return userdata;
-}
-
-
-
-/*********************************************************/
-/* test stub */
-/*********************************************************/
-
-
-#ifdef TEST
-
-#include <stdio.h>
-
-typedef struct
-{
- int key;
- int value;
-}
-key_value_t;
-
-static int
-cacheTest (void *map, void *key)
-{
- return (((key_value_t *) map)->key == *(int *) key);
-}
-
-static void *
-cacheFetch (char **error, void *key)
-{
- key_value_t *map;
-
- map = (key_value_t *) gdMalloc (sizeof (key_value_t));
- map->key = *(int *) key;
- map->value = 3;
-
- *error = NULL;
- return (void *) map;
-}
-
-static void
-cacheRelease (void *map)
-{
- gdFree ((char *) map);
-}
-
-int
-main (char *argv[], int argc)
-{
- gdCache_head_t *cacheTable;
- int elem, key;
-
- cacheTable = gdCacheCreate (3, cacheTest, cacheFetch, cacheRelease);
-
- key = 20;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 30;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 40;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 50;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 30;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 30;
- elem = *(int *) gdCacheGet (cacheTable, &key);
-
- gdCacheDelete (cacheTable);
-
- return 0;
-}
-
-#endif /* TEST */
-#endif /* HAVE_LIBTTF */
diff --git a/ext/gd/libgd/gdcache.h b/ext/gd/libgd/gdcache.h
deleted file mode 100644
index f2e8509106..0000000000
--- a/ext/gd/libgd/gdcache.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * gdcache.h
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@lucent.com) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-/*********************************************************/
-/* header */
-/*********************************************************/
-
-#include <malloc.h>
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-/* user defined function templates */
-typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata);
-typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata);
-typedef void (*gdCacheReleaseFn_t)(void *userdata);
-
-/* element structure */
-typedef struct gdCache_element_s gdCache_element_t;
-struct gdCache_element_s {
- gdCache_element_t *next;
- void *userdata;
-};
-
-/* head structure */
-typedef struct gdCache_head_s gdCache_head_t;
-struct gdCache_head_s {
- gdCache_element_t *mru;
- int size;
- char *error;
- gdCacheTestFn_t gdCacheTest;
- gdCacheFetchFn_t gdCacheFetch;
- gdCacheReleaseFn_t gdCacheRelease;
-};
-
-/* function templates */
-gdCache_head_t *
-gdCacheCreate(
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease );
-
-void
-gdCacheDelete( gdCache_head_t *head );
-
-void *
-gdCacheGet( gdCache_head_t *head, void *keydata );
diff --git a/ext/gd/libgd/gddemo.c b/ext/gd/libgd/gddemo.c
deleted file mode 100644
index a5ceeb53b8..0000000000
--- a/ext/gd/libgd/gddemo.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <stdio.h>
-#include "gd.h"
-#include "gdfontg.h"
-#include "gdfonts.h"
-
-int
-main (void)
-{
- /* Input and output files */
- FILE *in;
- FILE *out;
-
- /* Input and output images */
- gdImagePtr im_in = 0, im_out = 0;
-
- /* Brush image */
- gdImagePtr brush;
-
- /* Color indexes */
- int white;
- int blue;
- int red;
- int green;
-
- /* Points for polygon */
- gdPoint points[3];
-
- /* Create output image, 256 by 256 pixels, true color. */
- im_out = gdImageCreateTrueColor (256, 256);
- /* First color allocated is background. */
- white = gdImageColorAllocate (im_out, 255, 255, 255);
-
- /* Set transparent color. */
- gdImageColorTransparent (im_out, white);
-
- /* Try to load demoin.png and paste part of it into the
- output image. */
- in = fopen ("demoin.png", "rb");
- if (!in)
- {
- fprintf (stderr, "Can't load source image; this demo\n");
- fprintf (stderr, "is much more impressive if demoin.png\n");
- fprintf (stderr, "is available.\n");
- im_in = 0;
- }
- else
- {
- im_in = gdImageCreateFromPng (in);
- fclose (in);
- /* Now copy, and magnify as we do so */
- gdImageCopyResized (im_out, im_in,
- 32, 32, 0, 0, 192, 192, 255, 255);
- }
- red = gdImageColorAllocate (im_out, 255, 0, 0);
- green = gdImageColorAllocate (im_out, 0, 255, 0);
- blue = gdImageColorAllocate (im_out, 0, 0, 255);
- /* Rectangle */
- gdImageLine (im_out, 16, 16, 240, 16, green);
- gdImageLine (im_out, 240, 16, 240, 240, green);
- gdImageLine (im_out, 240, 240, 16, 240, green);
- gdImageLine (im_out, 16, 240, 16, 16, green);
- /* Circle */
- gdImageArc (im_out, 128, 128, 60, 20, 0, 720, blue);
- /* Arc */
- gdImageArc (im_out, 128, 128, 40, 40, 90, 270, blue);
- /* Flood fill: doesn't do much on a continuously
- variable tone jpeg original. */
- gdImageFill (im_out, 8, 8, blue);
- /* Polygon */
- points[0].x = 64;
- points[0].y = 0;
- points[1].x = 0;
- points[1].y = 128;
- points[2].x = 128;
- points[2].y = 128;
- gdImageFilledPolygon (im_out, points, 3, green);
- /* Brush. A fairly wild example also involving a line style! */
- if (im_in)
- {
- int style[8];
- brush = gdImageCreateTrueColor (16, 16);
- gdImageCopyResized (brush, im_in,
- 0, 0, 0, 0,
- gdImageSX (brush), gdImageSY (brush),
- gdImageSX (im_in), gdImageSY (im_in));
- gdImageSetBrush (im_out, brush);
- /* With a style, so they won't overprint each other.
- Normally, they would, yielding a fat-brush effect. */
- style[0] = 0;
- style[1] = 0;
- style[2] = 0;
- style[3] = 0;
- style[4] = 0;
- style[5] = 0;
- style[6] = 0;
- style[7] = 1;
- gdImageSetStyle (im_out, style, 8);
- /* Draw the styled, brushed line */
- gdImageLine (im_out, 0, 255, 255, 0, gdStyledBrushed);
- }
- /* Text */
- gdImageString (im_out, gdFontGiant, 32, 32,
- (unsigned char *) "hi", red);
- gdImageStringUp (im_out, gdFontSmall, 64, 64,
- (unsigned char *) "hi", red);
- /* Make output image interlaced (progressive, in the case of JPEG) */
- gdImageInterlace (im_out, 1);
- out = fopen ("demoout.png", "wb");
- /* Write PNG */
- gdImagePng (im_out, out);
- fclose (out);
- gdImageDestroy (im_out);
- if (im_in)
- {
- gdImageDestroy (im_in);
- }
- return 0;
-}
diff --git a/ext/gd/libgd/gdfontg.c b/ext/gd/libgd/gdfontg.c
deleted file mode 100644
index fd0c1e0929..0000000000
--- a/ext/gd/libgd/gdfontg.c
+++ /dev/null
@@ -1,4384 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2
- at Mon Jan 26 14:45:58 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gdfontg.h"
-
-char gdFontGiantData[] =
-{
-/* Char 0 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 1 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 2 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
-
-/* Char 3 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 13 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 17 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 44 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 114 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
-/* Char 122 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 127 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 163 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1,
-
-/* Char 178 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
-
-/* Char 179 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 184 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 200 */
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 203 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 235 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontGiantRep =
-{
- 256,
- 0,
- 9,
- 15,
- gdFontGiantData
-};
-
-gdFontPtr gdFontGiant = &gdFontGiantRep;
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontg.h b/ext/gd/libgd/gdfontg.h
deleted file mode 100644
index a70f266d63..0000000000
--- a/ext/gd/libgd/gdfontg.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#ifndef _GDFONTG_H_
-#define _GDFONTG_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2
- at Mon Jan 26 14:45:58 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontGiant;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfontl.c b/ext/gd/libgd/gdfontl.c
deleted file mode 100644
index e5d65d8fa8..0000000000
--- a/ext/gd/libgd/gdfontl.c
+++ /dev/null
@@ -1,4641 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2
- at Tue Jan 6 19:39:27 1998.
-
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gdfontl.h"
-
-char gdFontLargeData[] =
-{
-/* Char 0 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 1 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 2 */
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
-
-/* Char 3 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 13 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 17 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 44 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 0, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
-
-/* Char 114 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 122 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 127 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 163 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 178 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 179 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 184 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 200 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 203 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
-
-/* Char 235 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontLargeRep =
-{
- 256,
- 0,
- 8,
- 16,
- gdFontLargeData
-};
-
-gdFontPtr gdFontLarge = &gdFontLargeRep;
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontl.h b/ext/gd/libgd/gdfontl.h
deleted file mode 100644
index d79f4771fd..0000000000
--- a/ext/gd/libgd/gdfontl.h
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#ifndef _GDFONTL_H_
-#define _GDFONTL_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2
- at Tue Jan 6 19:39:27 1998.
-
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontLarge;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfontmb.c b/ext/gd/libgd/gdfontmb.c
deleted file mode 100644
index 7a4f3b68ed..0000000000
--- a/ext/gd/libgd/gdfontmb.c
+++ /dev/null
@@ -1,3871 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2
- at Thu Jan 8 13:54:57 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gdfontmb.h"
-
-char gdFontMediumBoldData[] =
-{
-/* Char 0 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 1 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 2 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 3 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 13 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 17 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 44 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 114 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 122 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 127 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 163 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 178 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 179 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 184 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 200 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 203 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
-
-/* Char 235 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 1, 1, 0, 1,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontMediumBoldRep =
-{
- 256,
- 0,
- 7,
- 13,
- gdFontMediumBoldData
-};
-
-gdFontPtr gdFontMediumBold = &gdFontMediumBoldRep;
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontmb.h b/ext/gd/libgd/gdfontmb.h
deleted file mode 100644
index 0b3fbae113..0000000000
--- a/ext/gd/libgd/gdfontmb.h
+++ /dev/null
@@ -1,28 +0,0 @@
-
-#ifndef _GDFONTMB_H_
-#define _GDFONTMB_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2
- at Thu Jan 8 13:54:57 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontMediumBold;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfonts.c b/ext/gd/libgd/gdfonts.c
deleted file mode 100644
index eec0a3d71e..0000000000
--- a/ext/gd/libgd/gdfonts.c
+++ /dev/null
@@ -1,3871 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2
- at Thu Jan 8 14:13:20 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gdfonts.h"
-
-char gdFontSmallData[] =
-{
-/* Char 0 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 1 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 2 */
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
-
-/* Char 3 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 13 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 17 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 44 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
-
-/* Char 114 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
-
-/* Char 122 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 127 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 163 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1,
-
-/* Char 178 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
-/* Char 179 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1,
- 0, 1, 1, 0, 0, 1,
- 0, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 184 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 200 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
-/* Char 203 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
-/* Char 235 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontSmallRep =
-{
- 256,
- 0,
- 6,
- 13,
- gdFontSmallData
-};
-
-gdFontPtr gdFontSmall = &gdFontSmallRep;
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfonts.h b/ext/gd/libgd/gdfonts.h
deleted file mode 100644
index 3882bd2318..0000000000
--- a/ext/gd/libgd/gdfonts.h
+++ /dev/null
@@ -1,28 +0,0 @@
-
-#ifndef _GDFONTS_H_
-#define _GDFONTS_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2
- at Thu Jan 8 14:13:20 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontSmall;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfontt.c b/ext/gd/libgd/gdfontt.c
deleted file mode 100644
index 9d0b73cf23..0000000000
--- a/ext/gd/libgd/gdfontt.c
+++ /dev/null
@@ -1,2592 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2
- at Thu Jan 8 13:49:54 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gdfontt.h"
-
-char gdFontTinyData[] =
-{
-/* Char 0 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 1 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 2 */
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
-
-/* Char 3 */
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 4 */
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 1,
- 1, 0, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 5 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 1,
-
-/* Char 6 */
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
-
-/* Char 10 */
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 11 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 13 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 14 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 17 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 22 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 23 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 25 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1,
- 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1,
- 1, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 1,
- 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 44 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 1, 0, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
-
-/* Char 96 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
-
-/* Char 113 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 114 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 122 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 127 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 162 */
- 1, 0, 0, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 163 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 168 */
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 178 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 179 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 1, 1,
- 1, 1, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 184 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 185 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 1, 1,
- 0, 1, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0,
-
-/* Char 200 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 203 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 0,
-
-/* Char 232 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 235 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 1, 1,
- 0, 0, 1, 0, 1,
- 0, 0, 1, 0, 1,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontTinyRep =
-{
- 256,
- 0,
- 5,
- 8,
- gdFontTinyData
-};
-
-gdFontPtr gdFontTiny = &gdFontTinyRep;
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontt.h b/ext/gd/libgd/gdfontt.h
deleted file mode 100644
index 181ce5c5f0..0000000000
--- a/ext/gd/libgd/gdfontt.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#ifndef _GDFONTT_H_
-#define _GDFONTT_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2
- at Thu Jan 8 13:49:54 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontTiny;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c
deleted file mode 100644
index f2937b45d7..0000000000
--- a/ext/gd/libgd/gdft.c
+++ /dev/null
@@ -1,932 +0,0 @@
-
-/********************************************/
-/* gd interface to freetype library */
-/* */
-/* John Ellson ellson@lucent.com */
-/********************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifndef MSWIN32
-#include <unistd.h>
-#else
-#define R_OK 2
-#endif
-
-/* number of antialised colors for indexed bitmaps */
-#define NUMCOLORS 8
-
-char *
-gdImageStringTTF (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string)
-{
- gdImageStringFT (im, brect, fg, fontlist, ptsize,
- angle, x, y, string);
-}
-
-#ifndef HAVE_LIBFREETYPE
-char *
-gdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string)
-{
- return "libgd was not built with FreeType font support\n";
-}
-#else
-
-#include "gdcache.h"
-#include "freetype/freetype.h"
-#include "freetype/ftglyph.h"
-
-/* number of fonts cached before least recently used is replaced */
-#define FONTCACHESIZE 6
-
-/* number of antialias color lookups cached */
-#define TWEENCOLORCACHESIZE 32
-
-/*
- * Line separation as a factor of font height.
- * No space between if LINESPACE = 1.00
- * Line separation will be rounded up to next pixel row.
- */
-#define LINESPACE 1.05
-
-/*
- * The character (space) used to separate alternate fonts in the
- * fontlist parameter to gdImageStringFT.
- */
-#define LISTSEPARATOR " "
-
-/*
- * DEFAULT_FONTPATH and PATHSEPARATOR are host type dependent and
- * are normally set by configure in gvconfig.h. These are just
- * some last resort values that might match some Un*x system
- * if building this version of gd separate from graphviz.
- */
-#ifndef DEFAULT_FONTPATH
-#define DEFAULT_FONTPATH "/usr/share/fonts/truetype"
-#endif
-#ifndef PATHSEPARATOR
-#define PATHSEPARATOR ":"
-#endif
-
-#ifndef TRUE
-#define FALSE 0
-#define TRUE !FALSE
-#endif
-
-#define MAX(a,b) ((a)>(b)?(a):(b))
-#define MIN(a,b) ((a)<(b)?(a):(b))
-
-typedef struct
-{
- char *fontlist; /* key */
- FT_Library *library;
- FT_Face face;
- FT_Bool have_char_map_unicode, have_char_map_big5, have_char_map_sjis,
- have_char_map_apple_roman;
- gdCache_head_t *glyphCache;
-}
-font_t;
-
-typedef struct
- {
- char *fontlist; /* key */
- FT_Library *library;
- }
-fontkey_t;
-
-typedef struct
- {
- int pixel; /* key */
- int bgcolor; /* key */
- int fgcolor; /* key *//* -ve means no antialias */
- gdImagePtr im; /* key */
- int tweencolor;
- }
-tweencolor_t;
-
-typedef struct
- {
- int pixel; /* key */
- int bgcolor; /* key */
- int fgcolor; /* key *//* -ve means no antialias */
- gdImagePtr im; /* key */
- }
-tweencolorkey_t;
-
-/********************************************************************
- * gdTcl_UtfToUniChar is borrowed from Tcl ...
- */
-/*
- * tclUtf.c --
- *
- * Routines for manipulating UTF-8 strings.
- *
- * Copyright (c) 1997-1998 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) tclUtf.c 1.25 98/01/28 18:02:43
- */
-
-/*
- *---------------------------------------------------------------------------
- *
- * gdTcl_UtfToUniChar --
- *
- * Extract the Tcl_UniChar represented by the UTF-8 string. Bad
- * UTF-8 sequences are converted to valid Tcl_UniChars and processing
- * continues. Equivalent to Plan 9 chartorune().
- *
- * The caller must ensure that the source buffer is long enough that
- * this routine does not run off the end and dereference non-existent
- * memory looking for trail bytes. If the source buffer is known to
- * be '\0' terminated, this cannot happen. Otherwise, the caller
- * should call Tcl_UtfCharComplete() before calling this routine to
- * ensure that enough bytes remain in the string.
- *
- * Results:
- * *chPtr is filled with the Tcl_UniChar, and the return value is the
- * number of bytes from the UTF-8 string that were consumed.
- *
- * Side effects:
- * None.
- *
- *---------------------------------------------------------------------------
- */
-
-#ifdef JISX0208
-#include "jisx0208.h"
-#endif
-
-#define Tcl_UniChar int
-#define TCL_UTF_MAX 3
-static int
-gdTcl_UtfToUniChar (char *str, Tcl_UniChar * chPtr)
-/* str is the UTF8 next character pointer */
-/* chPtr is the int for the result */
-{
- int byte;
-
- /* HTML4.0 entities in decimal form, e.g. &#197; */
- byte = *((unsigned char *) str);
- if (byte == '&')
- {
- int i, n = 0;
-
- byte = *((unsigned char *) (str + 1));
- if (byte == '#')
- {
- for (i = 2; i < 8; i++)
- {
- byte = *((unsigned char *) (str + i));
- if (byte >= '0' && byte <= '9')
- {
- n = (n * 10) + (byte - '0');
- }
- else
- break;
- }
- if (byte == ';')
- {
- *chPtr = (Tcl_UniChar) n;
- return ++i;
- }
- }
- }
-
- /*
- * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones.
- */
-
- byte = *((unsigned char *) str);
-#ifdef JISX0208
- if (0xA1 <= byte && byte <= 0xFE)
- {
- int ku, ten;
-
- ku = (byte & 0x7F) - 0x20;
- ten = (str[1] & 0x7F) - 0x20;
- if ((ku < 1 || ku > 92) || (ten < 1 || ten > 94))
- {
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-
- *chPtr = (Tcl_UniChar) UnicodeTbl[ku - 1][ten - 1];
- return 2;
- }
- else
-#endif /* JISX0208 */
- if (byte < 0xC0)
- {
- /*
- * Handles properly formed UTF-8 characters between
- * 0x01 and 0x7F. Also treats \0 and naked trail
- * bytes 0x80 to 0xBF as valid characters representing
- * themselves.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
- else if (byte < 0xE0)
- {
- if ((str[1] & 0xC0) == 0x80)
- {
- /*
- * Two-byte-character lead-byte followed
- * by a trail-byte.
- */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6)
- | (str[1] & 0x3F));
- return 2;
- }
- /*
- * A two-byte-character lead-byte not followed by trail-byte
- * represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
- else if (byte < 0xF0)
- {
- if (((str[1] & 0xC0) == 0x80) && ((str[2] & 0xC0) == 0x80))
- {
- /*
- * Three-byte-character lead byte followed by
- * two trail bytes.
- */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12)
- | ((str[1] & 0x3F) << 6) | (str[2] & 0x3F));
- return 3;
- }
- /*
- * A three-byte-character lead-byte not followed by
- * two trail-bytes represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-#if TCL_UTF_MAX > 3
- else
- {
- int ch, total, trail;
-
- total = totalBytes[byte];
- trail = total - 1;
- if (trail > 0)
- {
- ch = byte & (0x3F >> trail);
- do
- {
- str++;
- if ((*str & 0xC0) != 0x80)
- {
- *chPtr = byte;
- return 1;
- }
- ch <<= 6;
- ch |= (*str & 0x3F);
- trail--;
- }
- while (trail > 0);
- *chPtr = ch;
- return total;
- }
- }
-#endif
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
-}
-
-/********************************************************************/
-/* font cache functions */
-
-static int
-fontTest (void *element, void *key)
-{
- font_t *a = (font_t *) element;
- fontkey_t *b = (fontkey_t *) key;
-
- return (strcmp (a->fontlist, b->fontlist) == 0);
-}
-
-static void *
-fontFetch (char **error, void *key)
-{
- font_t *a;
- fontkey_t *b = (fontkey_t *) key;
- int n;
- int font_found = 0;
- unsigned short platform, encoding;
- char *fontsearchpath, *fontpath, *fontlist;
- char *fullname = NULL;
- char *name, *path, *dir;
- char *strtok_ptr;
- FT_Error err;
- FT_CharMap found = 0;
- FT_CharMap charmap;
-
- a = (font_t *) gdMalloc (sizeof (font_t));
- a->fontlist = strdup (b->fontlist);
- a->library = b->library;
-
- /*
- * Search the pathlist for any of a list of font names.
- */
- fontsearchpath = getenv ("GDFONTPATH");
- if (!fontsearchpath)
- fontsearchpath = DEFAULT_FONTPATH;
- path = strdup (fontsearchpath);
- fontlist = strdup (a->fontlist);
-
- /*
- * Must use gd_strtok_r else pointer corrupted by strtok in nested loop.
- */
- for (name = gd_strtok_r (fontlist, LISTSEPARATOR, &strtok_ptr); name;
- name = gd_strtok_r (0, LISTSEPARATOR, &strtok_ptr))
- {
-
- /*
- * Allocate an oversized buffer that is guaranteed to be
- * big enough for all paths to be tested.
- */
- fullname = gdRealloc (fullname,
- strlen (fontsearchpath) + strlen (name) + 6);
- /* if name is an absolute filename then test directly */
- if (*name == '/')
- {
- sprintf (fullname, "%s", name);
- if (access (fullname, R_OK) == 0)
- {
- font_found++;
- break;
- }
- }
- for (dir = strtok (path, PATHSEPARATOR); dir;
- dir = strtok (0, PATHSEPARATOR))
- {
- sprintf (fullname, "%s/%s.ttf", dir, name);
- if (access (fullname, R_OK) == 0)
- {
- font_found++;
- break;
- }
- }
- if (font_found)
- break;
- }
- gdFree (path);
- gdFree (fontlist);
- if (!font_found)
- {
- *error = "Could not find/open font";
- return NULL;
- }
-
- err = FT_New_Face (*b->library, fullname, 0, &a->face);
- if (err)
- {
- *error = "Could not read font";
- return NULL;
- }
- gdFree (fullname);
-
-/* FIXME - This mapping stuff is imcomplete - where is the spec? */
-
- a->have_char_map_unicode = 0;
- a->have_char_map_big5 = 0;
- a->have_char_map_sjis = 0;
- a->have_char_map_apple_roman = 0;
- for (n = 0; n < a->face->num_charmaps; n++)
- {
- charmap = a->face->charmaps[n];
- platform = charmap->platform_id;
- encoding = charmap->encoding_id;
- if ((platform == 3 && encoding == 1) /* Windows Unicode */
- || (platform == 3 && encoding == 0) /* Windows Symbol */
- || (platform == 2 && encoding == 1) /* ISO Unicode */
- || (platform == 0))
- { /* Apple Unicode */
- a->have_char_map_unicode = 1;
- found = charmap;
- }
- else if (platform == 3 && encoding == 4)
- { /* Windows Big5 */
- a->have_char_map_big5 = 1;
- found = charmap;
- }
- else if (platform == 3 && encoding == 2)
- { /* Windows Sjis */
- a->have_char_map_sjis = 1;
- found = charmap;
- }
- else if ((platform == 1 && encoding == 0) /* Apple Roman */
- || (platform == 2 && encoding == 0))
- { /* ISO ASCII */
- a->have_char_map_apple_roman = 1;
- found = charmap;
- }
- }
- if (!found)
- {
- *error = "Unable to find a CharMap that I can handle";
- return NULL;
- }
-
- return (void *) a;
-}
-
-static void
-fontRelease (void *element)
-{
- font_t *a = (font_t *) element;
-
- FT_Done_Face (a->face);
- gdFree (a->fontlist);
- gdFree ((char *) element);
-}
-
-/********************************************************************/
-/* tweencolor cache functions */
-
-static int
-tweenColorTest (void *element, void *key)
-{
- tweencolor_t *a = (tweencolor_t *) element;
- tweencolorkey_t *b = (tweencolorkey_t *) key;
-
- return (a->pixel == b->pixel
- && a->bgcolor == b->bgcolor
- && a->fgcolor == b->fgcolor
- && a->im == b->im);
-}
-
-/*
- * Computes a color in im's color table that is part way between
- * the background and foreground colors proportional to the gray
- * pixel value in the range 0-NUMCOLORS. The fg and bg colors must already
- * be in the color table.
- */
-static void *
-tweenColorFetch (char **error, void *key)
-{
- tweencolor_t *a;
- tweencolorkey_t *b = (tweencolorkey_t *) key;
- int pixel, npixel, bg, fg;
- gdImagePtr im;
-
- a = (tweencolor_t *) gdMalloc (sizeof (tweencolor_t));
- pixel = a->pixel = b->pixel;
- bg = a->bgcolor = b->bgcolor;
- fg = a->fgcolor = b->fgcolor;
- im = b->im;
-
- /* if fg is specified by a negative color idx, then don't antialias */
- if (fg < 0)
- {
- a->tweencolor = -fg;
- }
- else
- {
- npixel = NUMCOLORS - pixel;
- if (im->trueColor)
- {
- /* 2.0.1: use gdImageSetPixel to do the alpha blending work,
- or to just store the alpha level. All we have to do here
- is incorporate our knowledge of the percentage of this
- pixel that is really "lit" by pushing the alpha value
- up toward transparency in edge regions. */
- a->tweencolor = gdTrueColorAlpha (
- gdTrueColorGetRed (fg),
- gdTrueColorGetGreen (fg),
- gdTrueColorGetBlue (fg),
- gdAlphaMax - ((gdAlphaMax - gdTrueColorGetAlpha (fg)) * pixel / NUMCOLORS)
- );
- }
- else
- {
- a->tweencolor = gdImageColorResolve (im,
- (pixel * im->red[fg] + npixel * im->red[bg]) / NUMCOLORS,
- (pixel * im->green[fg] + npixel * im->green[bg]) / NUMCOLORS,
- (pixel * im->blue[fg] + npixel * im->blue[bg]) / NUMCOLORS);
- }
- }
- return (void *) a;
-}
-
-static void
-tweenColorRelease (void *element)
-{
- gdFree ((char *) element);
-}
-
-/* draw_bitmap - transfers glyph bitmap to GD image */
-static char *
-gdft_draw_bitmap (gdImage * im, int fg, FT_Bitmap bitmap, int pen_x, int pen_y)
-{
- unsigned char *pixel;
- int *tpixel;
- int x, y, row, col, pc;
-
- tweencolor_t *tc_elem;
- tweencolorkey_t tc_key;
-
- /* initialize tweenColorCache on first call */
- static gdCache_head_t *tc_cache;
-
- if (!tc_cache)
- {
- tc_cache = gdCacheCreate (TWEENCOLORCACHESIZE,
- tweenColorTest, tweenColorFetch, tweenColorRelease);
- }
-
- /* copy to image, mapping colors */
- tc_key.fgcolor = fg;
- tc_key.im = im;
- for (row = 0; row < bitmap.rows; row++)
- {
- pc = row * bitmap.pitch;
- y = pen_y + row;
-
- /* clip if out of bounds */
- if (y >= im->sy || y < 0)
- continue;
-
- for (col = 0; col < bitmap.width; col++, pc++)
- {
- x = pen_x + col;
-
- /* clip if out of bounds */
- if (x >= im->sx || x < 0)
- continue;
-
- switch(bitmap.pixel_mode) {
- case ft_pixel_mode_grays:
- /*
- * Round to NUMCOLORS levels of antialiasing for
- * index color images since only 256 colors are
- * available.
- */
-
- tc_key.pixel = ((bitmap.buffer[pc] * NUMCOLORS)
- + bitmap.num_grays / 2)
- / (bitmap.num_grays - 1);
- break;
- case ft_pixel_mode_mono:
- tc_key.pixel = ((bitmap.buffer[pc / 8]
- << (pc % 8)) & 128) ? NUMCOLORS : 0;
- break;
- default:
- return "Unsupported ft_pixel_mode";
- }
-
- if (tc_key.pixel > 0)
- {
-
- if (im->trueColor) {
- tc_elem = (tweencolor_t *) gdCacheGet (
- tc_cache, &tc_key);
-
- gdImageSetPixel(im, x, y, tc_elem->tweencolor);
- }
- else {
- pixel = &im->pixels[y][x];
- if (tc_key.pixel == NUMCOLORS)
- *pixel = fg;
- else {
- tc_key.bgcolor = *pixel;
- tc_elem = (tweencolor_t *) gdCacheGet (
- tc_cache, &tc_key);
- *pixel = tc_elem->tweencolor;
-
- }
-
- }
- }
- }
- }
- return (char *) NULL;
-}
-
-extern int any2eucjp (char *, char *, unsigned int);
-
-/********************************************************************/
-/* gdImageStringFT - render a utf8 string onto a gd image */
-char *
-gdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string)
-{
- return gdImageStringFTEx(im, brect, fg, fontlist, ptsize, angle, x, y, string, NULL);
-}
-
-char *
-gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string,
- gdFTStringExtra * strex)
-{
- FT_BBox bbox, glyph_bbox;
- FT_Matrix matrix;
- FT_Vector pen, delta, penf;
- FT_Face face;
- FT_Glyph image;
- FT_GlyphSlot slot;
- FT_Error err;
- FT_Bool use_kerning;
- FT_UInt glyph_index, previous;
- double sin_a = sin (angle);
- double cos_a = cos (angle);
- int len, i = 0, ch;
- int x1 = 0, y1 = 0;
- font_t *font;
- fontkey_t fontkey;
- char *next;
- char *tmpstr = 0;
- int render = (im && (im->trueColor || (fg <= 255 && fg >= -255)));
- FT_BitmapGlyph bm;
-
- /* fine tuning */
- double linespace = LINESPACE;
-
-/***** initialize font library and font cache on first call ******/
- static gdCache_head_t *fontCache;
- static FT_Library library;
-
- if (!fontCache)
- {
- if (FT_Init_FreeType (&library))
- {
- return "Failure to initialize font library";
- }
- fontCache = gdCacheCreate (FONTCACHESIZE,
- fontTest, fontFetch, fontRelease);
- }
-/*****/
-
- /* get the font (via font cache) */
- fontkey.fontlist = fontlist;
- fontkey.library = &library;
- font = (font_t *) gdCacheGet (fontCache, &fontkey);
- if (!font)
- {
- return fontCache->error;
- }
- face = font->face; /* shortcut */
- slot = face->glyph; /* shortcut */
-
- if (FT_Set_Char_Size (face, 0, (FT_F26Dot6) (ptsize * 64),
- GD_RESOLUTION, GD_RESOLUTION))
- {
- return "Could not set character size";
- }
-
- /* pull in supplied extended settings */
- if (strex) {
- if (strex->flags & gdFTEX_LINESPACE == gdFTEX_LINESPACE)
- linespace = strex->linespacing;
-
- }
-
-
- matrix.xx = (FT_Fixed) (cos_a * (1 << 16));
- matrix.yx = (FT_Fixed) (sin_a * (1 << 16));
- matrix.xy = -matrix.yx;
- matrix.yy = matrix.xx;
-
- penf.x = penf.y = 0; /* running position of non-rotated string */
- pen.x = pen.y = 0; /* running position of rotated string */
- bbox.xMin = bbox.xMax = bbox.yMin = bbox.yMax = 0;
-
- use_kerning = FT_HAS_KERNING (face);
- previous = 0;
-
-#ifndef JISX0208
- if (font->have_char_map_sjis)
- {
-#endif
- if (tmpstr = (char *) gdMalloc (BUFSIZ))
- {
- any2eucjp (tmpstr, string, BUFSIZ);
- next = tmpstr;
- }
- else
- {
- next = string;
- }
-#ifndef JISX0208
- }
- else
- {
- next = string;
- }
-#endif
- while (*next)
- {
- ch = *next;
-
- /* carriage returns */
- if (ch == '\r')
- {
- penf.x = 0;
- x1 = (penf.x * cos_a - penf.y * sin_a + 32) / 64;
- y1 = (penf.x * sin_a + penf.y * cos_a + 32) / 64;
- pen.x = pen.y = 0;
- previous = 0; /* clear kerning flag */
- next++;
- continue;
- }
- /* newlines */
- if (ch == '\n')
- {
- penf.y -= face->size->metrics.height * linespace;
- penf.y = (penf.y - 32) & -64; /* round to next pixel row */
- x1 = (penf.x * cos_a - penf.y * sin_a + 32) / 64;
- y1 = (penf.x * sin_a + penf.y * cos_a + 32) / 64;
- pen.x = pen.y = 0;
- previous = 0; /* clear kerning flag */
- next++;
- continue;
- }
-
- if (font->have_char_map_unicode)
- {
- /* use UTF-8 mapping from ASCII */
- len = gdTcl_UtfToUniChar (next, &ch);
- next += len;
- }
- else if (font->have_char_map_sjis)
- {
- unsigned char c;
- int jiscode;
-
- c = *next;
- if (0xA1 <= c && c <= 0xFE)
- {
- next++;
- jiscode = 0x100 * (c & 0x7F) + ((*next) & 0x7F);
-
- ch = (jiscode >> 8) & 0xFF;
- jiscode &= 0xFF;
-
- if (ch & 1)
- jiscode += 0x40 - 0x21;
- else
- jiscode += 0x9E - 0x21;
-
- if (jiscode >= 0x7F)
- jiscode++;
- ch = (ch - 0x21) / 2 + 0x81;
- if (ch >= 0xA0)
- ch += 0x40;
-
- ch = (ch << 8) + jiscode;
- }
- else
- {
- ch = c & 0xFF; /* don't extend sign */
- }
- next++;
- }
- else
- {
- /*
- * Big 5 mapping:
- * use "JIS-8 half-width katakana" coding from 8-bit characters. Ref:
- * ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/japan.inf-032092.sjs
- */
- ch = (*next) & 0xFF; /* don't extend sign */
- next++;
- if (ch >= 161 /* first code of JIS-8 pair */
- && *next)
- { /* don't advance past '\0' */
- /* TBB: Fix from Kwok Wah On: & 255 needed */
- ch = (ch * 256) + ((*next) & 255);
- next++;
- }
- }
-
- /* Convert character code to glyph index */
- glyph_index = FT_Get_Char_Index (face, ch);
-
- /* retrieve kerning distance and move pen position */
- if (use_kerning && previous && glyph_index)
- {
- FT_Get_Kerning (face, previous, glyph_index,
- ft_kerning_default, &delta);
- pen.x += delta.x;
- }
-
- /* load glyph image into the slot (erase previous one) */
- err = FT_Load_Glyph (face, glyph_index, FT_LOAD_DEFAULT);
- if (err)
- return "Problem loading glyph";
-
- /* transform glyph image */
- FT_Get_Glyph (slot, &image);
- if (brect)
- { /* only if need brect */
- FT_Glyph_Get_CBox (image, ft_glyph_bbox_gridfit, &glyph_bbox);
- if (!i)
- { /* if first character, init BB corner values */
- bbox.xMin = bbox.yMin = (1 << 30) - 1;
- bbox.xMax = bbox.yMax = -bbox.xMin;
- }
- glyph_bbox.xMin += penf.x;
- glyph_bbox.yMin += penf.y;
- glyph_bbox.xMax += penf.x;
- glyph_bbox.yMax += penf.y;
- if (bbox.xMin > glyph_bbox.xMin)
- bbox.xMin = glyph_bbox.xMin;
- if (bbox.yMin > glyph_bbox.yMin)
- bbox.yMin = glyph_bbox.yMin;
- if (bbox.xMax < glyph_bbox.xMax)
- bbox.xMax = glyph_bbox.xMax;
- if (bbox.yMax < glyph_bbox.yMax)
- bbox.yMax = glyph_bbox.yMax;
- i++;
- }
-
- /* transform glyph image */
- FT_Glyph_Transform (image, &matrix, 0);
-
- if (render)
- {
- if (image->format != ft_glyph_format_bitmap)
- {
- err = FT_Glyph_To_Bitmap (&image, ft_render_mode_normal, 0, 1);
- if (err)
- return "Problem rendering glyph";
- }
-
- /* now, draw to our target surface */
- bm = (FT_BitmapGlyph) image;
- gdft_draw_bitmap (im, fg, bm->bitmap,
- x + x1 + ((pen.x + 31) >> 6) + bm->left,
- y - y1 + ((pen.y + 31) >> 6) - bm->top);
- }
-
- /* record current glyph index for kerning */
- previous = glyph_index;
-
- /* increment pen position */
- pen.x += image->advance.x >> 10;
- pen.y -= image->advance.y >> 10;
-
- penf.x += slot->metrics.horiAdvance;
-
- FT_Done_Glyph (image);
- }
-
- if (brect)
- { /* only if need brect */
- /* For perfect rounding, must get sin(a + pi/4) and sin(a - pi/4). */
- double d1 = sin (angle + 0.78539816339744830962);
- double d2 = sin (angle - 0.78539816339744830962);
-
- /* rotate bounding rectangle */
- brect[0] = (int) (bbox.xMin * cos_a - bbox.yMin * sin_a);
- brect[1] = (int) (bbox.xMin * sin_a + bbox.yMin * cos_a);
- brect[2] = (int) (bbox.xMax * cos_a - bbox.yMin * sin_a);
- brect[3] = (int) (bbox.xMax * sin_a + bbox.yMin * cos_a);
- brect[4] = (int) (bbox.xMax * cos_a - bbox.yMax * sin_a);
- brect[5] = (int) (bbox.xMax * sin_a + bbox.yMax * cos_a);
- brect[6] = (int) (bbox.xMin * cos_a - bbox.yMax * sin_a);
- brect[7] = (int) (bbox.xMin * sin_a + bbox.yMax * cos_a);
-
- /* scale, round and offset brect */
- brect[0] = x + gdroundupdown (brect[0], d2 > 0);
- brect[1] = y - gdroundupdown (brect[1], d1 < 0);
- brect[2] = x + gdroundupdown (brect[2], d1 > 0);
- brect[3] = y - gdroundupdown (brect[3], d2 > 0);
- brect[4] = x + gdroundupdown (brect[4], d2 < 0);
- brect[5] = y - gdroundupdown (brect[5], d1 > 0);
- brect[6] = x + gdroundupdown (brect[6], d1 < 0);
- brect[7] = y - gdroundupdown (brect[7], d2 < 0);
- }
-
- if (tmpstr)
- gdFree (tmpstr);
- return (char *) NULL;
-}
-
-int
-gdroundupdown (FT_F26Dot6 v1, int updown)
-{
- return (!updown)
- ? (v1 < 0 ? ((v1 - 63) >> 6) : v1 >> 6)
- : (v1 > 0 ? ((v1 + 63) >> 6) : v1 >> 6);
-}
-
-#endif /* HAVE_LIBFREETYPE */
diff --git a/ext/gd/libgd/gdhelpers.c b/ext/gd/libgd/gdhelpers.c
deleted file mode 100644
index 7909ca0ee2..0000000000
--- a/ext/gd/libgd/gdhelpers.c
+++ /dev/null
@@ -1,95 +0,0 @@
-#include "gd.h"
-#include "gdhelpers.h"
-#include <stdlib.h>
-
-/* TBB: gd_strtok_r is not portable; provide an implementation */
-
-#define SEP_TEST (separators[*((unsigned char *) s)])
-
-char *
-gd_strtok_r (char *s, char *sep, char **state)
-{
- char separators[256];
- char *start;
- char *result = 0;
- memset (separators, 0, sizeof (separators));
- while (*sep)
- {
- separators[*((unsigned char *) sep)] = 1;
- sep++;
- }
- if (!s)
- {
- /* Pick up where we left off */
- s = *state;
- }
- start = s;
- /* 1. EOS */
- if (!(*s))
- {
- *state = s;
- return 0;
- }
- /* 2. Leading separators, if any */
- if (SEP_TEST)
- {
- do
- {
- s++;
- }
- while (SEP_TEST);
- /* 2a. EOS after separators only */
- if (!(*s))
- {
- *state = s;
- return 0;
- }
- }
- /* 3. A token */
- result = s;
- do
- {
- /* 3a. Token at end of string */
- if (!(*s))
- {
- *state = s;
- return result;
- }
- s++;
- }
- while (!SEP_TEST);
- /* 4. Terminate token and skip trailing separators */
- *s = '\0';
- do
- {
- s++;
- }
- while (SEP_TEST);
- /* 5. Return token */
- *state = s;
- return result;
-}
-
-void *
-gdCalloc (size_t nmemb, size_t size)
-{
- return calloc (nmemb, size);
-}
-
-void *
-gdMalloc (size_t size)
-{
- return malloc (size);
-}
-
-void *
-gdRealloc (void *ptr, size_t size)
-{
- return realloc (ptr, size);
-}
-
-void
-gdFree (void *ptr)
-{
- free (ptr);
-}
diff --git a/ext/gd/libgd/gdhelpers.h b/ext/gd/libgd/gdhelpers.h
deleted file mode 100644
index aefcc18b99..0000000000
--- a/ext/gd/libgd/gdhelpers.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef GDHELPERS_H
-#define GDHELPERS_H 1
-
-/* TBB: strtok_r is not universal; provide an implementation of it. */
-
-extern char *gd_strtok_r(char *s, char *sep, char **state);
-
-/* These functions wrap memory management. gdFree is
- in gd.h, where callers can utilize it to correctly
- free memory allocated by these functions with the
- right version of free(). */
-void *gdCalloc(size_t nmemb, size_t size);
-void *gdMalloc(size_t size);
-void *gdRealloc(void *ptr, size_t size);
-
-#endif /* GDHELPERS_H */
-
diff --git a/ext/gd/libgd/gdkanji.c b/ext/gd/libgd/gdkanji.c
deleted file mode 100644
index 98ed4b7c7a..0000000000
--- a/ext/gd/libgd/gdkanji.c
+++ /dev/null
@@ -1,626 +0,0 @@
-
-/* gdkanji.c (Kanji code converter) */
-/* written by Masahito Yamaga (ma@yama-ga.com) */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#include <stdarg.h>
-#if defined(HAVE_ICONV_H) || defined(HAVE_ICONV)
-#include <iconv.h>
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#endif
-
-#if defined(HAVE_ICONV_H) && !defined(HAVE_ICONV)
-#define HAVE_ICONV 1
-#endif
-
-#define LIBNAME "any2eucjp()"
-
-#if defined(__MSC__) || defined(__BORLANDC__) || defined(__TURBOC__) || defined(_Windows) || defined(MSDOS)
-#ifndef SJISPRE
-#define SJISPRE 1
-#endif
-#endif
-
-#ifdef TRUE
-#undef TRUE
-#endif
-#ifdef FALSE
-#undef FALSE
-#endif
-
-#define TRUE 1
-#define FALSE 0
-
-#define NEW 1
-#define OLD 2
-#define ESCI 3
-#define NEC 4
-#define EUC 5
-#define SJIS 6
-#define EUCORSJIS 7
-#define ASCII 8
-
-#define NEWJISSTR "JIS7"
-#define OLDJISSTR "jis"
-#define EUCSTR "eucJP"
-#define SJISSTR "SJIS"
-
-#define ESC 27
-#define SS2 142
-
-static void
-debug (const char *format,...)
-{
-#ifdef DEBUG
- va_list args;
-
- va_start (args, format);
- fprintf (stdout, "%s: ", LIBNAME);
- vfprintf (stdout, format, args);
- fprintf (stdout, "\n");
- va_end (args);
-#endif
-}
-
-static void
-error (const char *format,...)
-{
- va_list args;
-
- va_start (args, format);
- fprintf (stderr, "%s: ", LIBNAME);
- vfprintf (stderr, format, args);
- fprintf (stderr, "\n");
- va_end (args);
-}
-
-/* DetectKanjiCode() derived from DetectCodeType() by Ken Lunde. */
-
-static int
-DetectKanjiCode (unsigned char *str)
-{
- static int whatcode = ASCII;
- int oldcode = ASCII;
- int c, i;
- char *lang = NULL;
-
- c = '\1';
- i = 0;
-
- if (whatcode != EUCORSJIS && whatcode != ASCII)
- {
- oldcode = whatcode;
- whatcode = ASCII;
- }
-
- while ((whatcode == EUCORSJIS || whatcode == ASCII) && c != '\0')
- {
- if ((c = str[i++]) != '\0')
- {
- if (c == ESC)
- {
- c = str[i++];
- if (c == '$')
- {
- c = str[i++];
- if (c == 'B')
- whatcode = NEW;
- else if (c == '@')
- whatcode = OLD;
- }
- else if (c == '(')
- {
- c = str[i++];
- if (c == 'I')
- whatcode = ESCI;
- }
- else if (c == 'K')
- whatcode = NEC;
- }
- else if ((c >= 129 && c <= 141) || (c >= 143 && c <= 159))
- whatcode = SJIS;
- else if (c == SS2)
- {
- c = str[i++];
- if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160) || (c >= 224 && c <= 252))
- whatcode = SJIS;
- else if (c >= 161 && c <= 223)
- whatcode = EUCORSJIS;
- }
- else if (c >= 161 && c <= 223)
- {
- c = str[i++];
- if (c >= 240 && c <= 254)
- whatcode = EUC;
- else if (c >= 161 && c <= 223)
- whatcode = EUCORSJIS;
- else if (c >= 224 && c <= 239)
- {
- whatcode = EUCORSJIS;
- while (c >= 64 && c != '\0' && whatcode == EUCORSJIS)
- {
- if (c >= 129)
- {
- if (c <= 141 || (c >= 143 && c <= 159))
- whatcode = SJIS;
- else if (c >= 253 && c <= 254)
- whatcode = EUC;
- }
- c = str[i++];
- }
- }
- else if (c <= 159)
- whatcode = SJIS;
- }
- else if (c >= 240 && c <= 254)
- whatcode = EUC;
- else if (c >= 224 && c <= 239)
- {
- c = str[i++];
- if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160))
- whatcode = SJIS;
- else if (c >= 253 && c <= 254)
- whatcode = EUC;
- else if (c >= 161 && c <= 252)
- whatcode = EUCORSJIS;
- }
- }
- }
-
-#ifdef DEBUG
- if (whatcode == ASCII)
- debug ("Kanji code not included.");
- else if (whatcode == EUCORSJIS)
- debug ("Kanji code not detected.");
- else
- debug ("Kanji code detected at %d byte.", i);
-#endif
-
- if (whatcode == EUCORSJIS && oldcode != ASCII)
- whatcode = oldcode;
-
- if (whatcode == EUCORSJIS)
- {
- if (getenv ("LC_ALL"))
- lang = getenv ("LC_ALL");
- else if (getenv ("LC_CTYPE"))
- lang = getenv ("LC_CTYPE");
- else if (getenv ("LANG"))
- lang = getenv ("LANG");
-
- if (lang)
- {
- if (strcmp (lang, "ja_JP.SJIS") == 0 ||
-#ifdef hpux
- strcmp (lang, "japanese") == 0 ||
-#endif
- strcmp (lang, "ja_JP.mscode") == 0 ||
- strcmp (lang, "ja_JP.PCK") == 0)
- whatcode = SJIS;
- else if (strncmp (lang, "ja", 2) == 0)
-#ifdef SJISPRE
- whatcode = SJIS;
-#else
- whatcode = EUC;
-#endif
- }
- }
-
- if (whatcode == EUCORSJIS)
-#ifdef SJISPRE
- whatcode = SJIS;
-#else
- whatcode = EUC;
-#endif
-
- return whatcode;
-}
-
-/* SJIStoJIS() is sjis2jis() by Ken Lunde. */
-
-static void
-SJIStoJIS (int *p1, int *p2)
-{
- register unsigned char c1 = *p1;
- register unsigned char c2 = *p2;
- register int adjust = c2 < 159;
- register int rowOffset = c1 < 160 ? 112 : 176;
- register int cellOffset = adjust ? (31 + (c2 > 127)) : 126;
-
- *p1 = ((c1 - rowOffset) << 1) - adjust;
- *p2 -= cellOffset;
-}
-
-/* han2zen() was derived from han2zen() written by Ken Lunde. */
-
-#define IS_DAKU(c) ((c >= 182 && c <= 196) || (c >= 202 && c <= 206) || (c == 179))
-#define IS_HANDAKU(c) (c >= 202 && c <= 206)
-
-static void
-han2zen (int *p1, int *p2)
-{
- int c = *p1;
- int daku = FALSE;
- int handaku = FALSE;
- int mtable[][2] =
- {
- {129, 66},
- {129, 117},
- {129, 118},
- {129, 65},
- {129, 69},
- {131, 146},
- {131, 64},
- {131, 66},
- {131, 68},
- {131, 70},
- {131, 72},
- {131, 131},
- {131, 133},
- {131, 135},
- {131, 98},
- {129, 91},
- {131, 65},
- {131, 67},
- {131, 69},
- {131, 71},
- {131, 73},
- {131, 74},
- {131, 76},
- {131, 78},
- {131, 80},
- {131, 82},
- {131, 84},
- {131, 86},
- {131, 88},
- {131, 90},
- {131, 92},
- {131, 94},
- {131, 96},
- {131, 99},
- {131, 101},
- {131, 103},
- {131, 105},
- {131, 106},
- {131, 107},
- {131, 108},
- {131, 109},
- {131, 110},
- {131, 113},
- {131, 116},
- {131, 119},
- {131, 122},
- {131, 125},
- {131, 126},
- {131, 128},
- {131, 129},
- {131, 130},
- {131, 132},
- {131, 134},
- {131, 136},
- {131, 137},
- {131, 138},
- {131, 139},
- {131, 140},
- {131, 141},
- {131, 143},
- {131, 147},
- {129, 74},
- {129, 75}
- };
-
- if (*p2 == 222 && IS_DAKU (*p1))
- daku = TRUE; /* Daku-ten */
- else if (*p2 == 223 && IS_HANDAKU (*p1))
- handaku = TRUE; /* Han-daku-ten */
-
- *p1 = mtable[c - 161][0];
- *p2 = mtable[c - 161][1];
-
- if (daku)
- {
- if ((*p2 >= 74 && *p2 <= 103) || (*p2 >= 110 && *p2 <= 122))
- (*p2)++;
- else if (*p2 == 131 && *p2 == 69)
- *p2 = 148;
- }
- else if (handaku && *p2 >= 110 && *p2 <= 122)
- (*p2) += 2;
-}
-
-/* Recast strcpy to handle unsigned chars used below. */
-#define ustrcpy(A,B) (strcpy((char*)(A),(const char*)(B)))
-
-static void
-do_convert (unsigned char *to, unsigned char *from, const char *code)
-{
-#ifdef HAVE_ICONV
- iconv_t cd;
- size_t from_len, to_len;
-
- if ((cd = iconv_open (EUCSTR, code)) == (iconv_t) - 1)
- {
- error ("iconv_open() error");
-#ifdef HAVE_ERRNO_H
- if (errno == EINVAL)
- error ("invalid code specification: \"%s\" or \"%s\"",
- EUCSTR, code);
-#endif
- strcpy ((char *) to, (const char *) from);
- return;
- }
-
- from_len = strlen ((const char *) from) + 1;
- to_len = BUFSIZ;
-
- if (iconv (cd, (const char **) &from, &from_len,
- (char **) &to, &to_len) == -1)
- {
-#ifdef HAVE_ERRNO_H
- if (errno == EINVAL)
- error ("invalid end of input string");
- else if (errno == EILSEQ)
- error ("invalid code in input string");
- else if (errno == E2BIG)
- error ("output buffer overflow at do_convert()");
- else
-#endif
- error ("something happen");
- strcpy ((char *) to, (const char *) from);
- return;
- }
-
- if (iconv_close (cd) != 0)
- {
- error ("iconv_close() error");
- }
-#else
- int p1, p2, i, j;
- int jisx0208 = FALSE;
- int hankaku = FALSE;
-
- j = 0;
- if (strcmp (code, NEWJISSTR) == 0 || strcmp (code, OLDJISSTR) == 0)
- {
- for (i = 0; from[i] != '\0' && j < BUFSIZ; i++)
- {
- if (from[i] == ESC)
- {
- i++;
- if (from[i] == '$')
- {
- jisx0208 = TRUE;
- hankaku = FALSE;
- i++;
- }
- else if (from[i] == '(')
- {
- jisx0208 = FALSE;
- i++;
- if (from[i] == 'I') /* Hankaku Kana */
- hankaku = TRUE;
- else
- hankaku = FALSE;
- }
- }
- else
- {
- if (jisx0208)
- to[j++] = from[i] + 128;
- else if (hankaku)
- {
- to[j++] = SS2;
- to[j++] = from[i] + 128;
- }
- else
- to[j++] = from[i];
- }
- }
- }
- else if (strcmp (code, SJISSTR) == 0)
- {
- for (i = 0; from[i] != '\0' && j < BUFSIZ; i++)
- {
- p1 = from[i];
- if (p1 < 127)
- to[j++] = p1;
- else if ((p1 >= 161) && (p1 <= 223))
- { /* Hankaku Kana */
- to[j++] = SS2;
- to[j++] = p1;
- }
- else
- {
- p2 = from[++i];
- SJIStoJIS (&p1, &p2);
- to[j++] = p1 + 128;
- to[j++] = p2 + 128;
- }
- }
- }
- else
- {
- error ("invalid code specification: \"%s\"", code);
- return;
- }
-
- if (j >= BUFSIZ)
- {
- error ("output buffer overflow at do_convert()");
- ustrcpy (to, from);
- }
- else
- to[j] = '\0';
-#endif /* HAVE_ICONV */
-}
-
-static int
-do_check_and_conv (unsigned char *to, unsigned char *from)
-{
- static unsigned char tmp[BUFSIZ];
- int p1, p2, i, j;
- int kanji = TRUE;
-
- switch (DetectKanjiCode (from))
- {
- case NEW:
- debug ("Kanji code is New JIS.");
- do_convert (tmp, from, NEWJISSTR);
- break;
- case OLD:
- debug ("Kanji code is Old JIS.");
- do_convert (tmp, from, OLDJISSTR);
- break;
- case ESCI:
- debug ("This string includes Hankaku-Kana (jisx0201) escape sequence [ESC] + ( + I.");
- do_convert (tmp, from, NEWJISSTR);
- break;
- case NEC:
- debug ("Kanji code is NEC Kanji.");
- error ("cannot convert NEC Kanji.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- case EUC:
- debug ("Kanji code is EUC.");
- ustrcpy (tmp, from);
- break;
- case SJIS:
- debug ("Kanji code is SJIS.");
- do_convert (tmp, from, SJISSTR);
- break;
- case EUCORSJIS:
- debug ("Kanji code is EUC or SJIS.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- case ASCII:
- debug ("This is ASCII string.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- default:
- debug ("This string includes unknown code.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- }
-
- /* Hankaku Kana ---> Zenkaku Kana */
- if (kanji)
- {
- j = 0;
- for (i = 0; tmp[i] != '\0' && j < BUFSIZ; i++)
- {
- if (tmp[i] == SS2)
- {
- p1 = tmp[++i];
- if (tmp[i + 1] == SS2)
- {
- p2 = tmp[i + 2];
- if (p2 == 222 || p2 == 223)
- i += 2;
- else
- p2 = 0;
- }
- else
- p2 = 0;
- han2zen (&p1, &p2);
- SJIStoJIS (&p1, &p2);
- to[j++] = p1 + 128;
- to[j++] = p2 + 128;
- }
- else
- to[j++] = tmp[i];
- }
-
- if (j >= BUFSIZ)
- {
- error ("output buffer overflow at Hankaku --> Zenkaku");
- ustrcpy (to, tmp);
- }
- else
- to[j] = '\0';
- }
- else
- ustrcpy (to, tmp);
-
- return kanji;
-}
-
-int
-any2eucjp (unsigned char *dest, unsigned char *src, unsigned int dest_max)
-{
- static unsigned char tmp_dest[BUFSIZ];
- int ret;
-
- if (strlen ((const char *) src) >= BUFSIZ)
- {
- error ("input string too large");
- return -1;
- }
- if (dest_max > BUFSIZ)
- {
- error ("invalid maximum size of destination\nit should be less than %d.", BUFSIZ);
- return -1;
- }
- ret = do_check_and_conv (tmp_dest, src);
- if (strlen ((const char *) tmp_dest) >= dest_max)
- {
- error ("output buffer overflow");
- ustrcpy (dest, src);
- return -1;
- }
- ustrcpy (dest, tmp_dest);
- return ret;
-}
-
-#if 0
-unsigned int
-strwidth (unsigned char *s)
-{
- unsigned char *t;
- unsigned int i;
-
- t = (unsigned char *) gdMalloc (BUFSIZ);
- any2eucjp (t, s, BUFSIZ);
- i = strlen (t);
- gdFree (t);
- return i;
-}
-
-#ifdef DEBUG
-int
-main ()
-{
- unsigned char input[BUFSIZ];
- unsigned char *output;
- unsigned char *str;
- int c, i = 0;
-
- while ((c = fgetc (stdin)) != '\n' && i < BUFSIZ)
- input[i++] = c;
- input[i] = '\0';
-
- printf ("input : %d bytes\n", strlen ((const char *) input));
- printf ("output: %d bytes\n", strwidth (input));
-
- output = (unsigned char *) gdMalloc (BUFSIZ);
- any2eucjp (output, input, BUFSIZ);
- str = output;
- while (*str != '\0')
- putchar (*(str++));
- putchar ('\n');
- gdFree (output);
-
- return 0;
-}
-#endif
-#endif
diff --git a/ext/gd/libgd/gdparttopng.c b/ext/gd/libgd/gdparttopng.c
deleted file mode 100644
index 03386b86be..0000000000
--- a/ext/gd/libgd/gdparttopng.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h> /* For atoi */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int x, y, w, h;
-
- if (argc != 7)
- {
- fprintf (stderr, "Usage: gdparttopng filename.gd filename.png x y w h\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
-
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
-
- printf ("Extracting from (%d, %d), size is %dx%d\n", x, y, w, h);
-
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gdtables.c b/ext/gd/libgd/gdtables.c
deleted file mode 100644
index 0e6e29718a..0000000000
--- a/ext/gd/libgd/gdtables.c
+++ /dev/null
@@ -1,728 +0,0 @@
-
-int gdCosT[] =
-{
- 1024,
- 1023,
- 1023,
- 1022,
- 1021,
- 1020,
- 1018,
- 1016,
- 1014,
- 1011,
- 1008,
- 1005,
- 1001,
- 997,
- 993,
- 989,
- 984,
- 979,
- 973,
- 968,
- 962,
- 955,
- 949,
- 942,
- 935,
- 928,
- 920,
- 912,
- 904,
- 895,
- 886,
- 877,
- 868,
- 858,
- 848,
- 838,
- 828,
- 817,
- 806,
- 795,
- 784,
- 772,
- 760,
- 748,
- 736,
- 724,
- 711,
- 698,
- 685,
- 671,
- 658,
- 644,
- 630,
- 616,
- 601,
- 587,
- 572,
- 557,
- 542,
- 527,
- 512,
- 496,
- 480,
- 464,
- 448,
- 432,
- 416,
- 400,
- 383,
- 366,
- 350,
- 333,
- 316,
- 299,
- 282,
- 265,
- 247,
- 230,
- 212,
- 195,
- 177,
- 160,
- 142,
- 124,
- 107,
- 89,
- 71,
- 53,
- 35,
- 17,
- 0,
- -17,
- -35,
- -53,
- -71,
- -89,
- -107,
- -124,
- -142,
- -160,
- -177,
- -195,
- -212,
- -230,
- -247,
- -265,
- -282,
- -299,
- -316,
- -333,
- -350,
- -366,
- -383,
- -400,
- -416,
- -432,
- -448,
- -464,
- -480,
- -496,
- -512,
- -527,
- -542,
- -557,
- -572,
- -587,
- -601,
- -616,
- -630,
- -644,
- -658,
- -671,
- -685,
- -698,
- -711,
- -724,
- -736,
- -748,
- -760,
- -772,
- -784,
- -795,
- -806,
- -817,
- -828,
- -838,
- -848,
- -858,
- -868,
- -877,
- -886,
- -895,
- -904,
- -912,
- -920,
- -928,
- -935,
- -942,
- -949,
- -955,
- -962,
- -968,
- -973,
- -979,
- -984,
- -989,
- -993,
- -997,
- -1001,
- -1005,
- -1008,
- -1011,
- -1014,
- -1016,
- -1018,
- -1020,
- -1021,
- -1022,
- -1023,
- -1023,
- -1024,
- -1023,
- -1023,
- -1022,
- -1021,
- -1020,
- -1018,
- -1016,
- -1014,
- -1011,
- -1008,
- -1005,
- -1001,
- -997,
- -993,
- -989,
- -984,
- -979,
- -973,
- -968,
- -962,
- -955,
- -949,
- -942,
- -935,
- -928,
- -920,
- -912,
- -904,
- -895,
- -886,
- -877,
- -868,
- -858,
- -848,
- -838,
- -828,
- -817,
- -806,
- -795,
- -784,
- -772,
- -760,
- -748,
- -736,
- -724,
- -711,
- -698,
- -685,
- -671,
- -658,
- -644,
- -630,
- -616,
- -601,
- -587,
- -572,
- -557,
- -542,
- -527,
- -512,
- -496,
- -480,
- -464,
- -448,
- -432,
- -416,
- -400,
- -383,
- -366,
- -350,
- -333,
- -316,
- -299,
- -282,
- -265,
- -247,
- -230,
- -212,
- -195,
- -177,
- -160,
- -142,
- -124,
- -107,
- -89,
- -71,
- -53,
- -35,
- -17,
- 0,
- 17,
- 35,
- 53,
- 71,
- 89,
- 107,
- 124,
- 142,
- 160,
- 177,
- 195,
- 212,
- 230,
- 247,
- 265,
- 282,
- 299,
- 316,
- 333,
- 350,
- 366,
- 383,
- 400,
- 416,
- 432,
- 448,
- 464,
- 480,
- 496,
- 512,
- 527,
- 542,
- 557,
- 572,
- 587,
- 601,
- 616,
- 630,
- 644,
- 658,
- 671,
- 685,
- 698,
- 711,
- 724,
- 736,
- 748,
- 760,
- 772,
- 784,
- 795,
- 806,
- 817,
- 828,
- 838,
- 848,
- 858,
- 868,
- 877,
- 886,
- 895,
- 904,
- 912,
- 920,
- 928,
- 935,
- 942,
- 949,
- 955,
- 962,
- 968,
- 973,
- 979,
- 984,
- 989,
- 993,
- 997,
- 1001,
- 1005,
- 1008,
- 1011,
- 1014,
- 1016,
- 1018,
- 1020,
- 1021,
- 1022,
- 1023,
- 1023
-};
-
-int gdSinT[] =
-{
- 0,
- 17,
- 35,
- 53,
- 71,
- 89,
- 107,
- 124,
- 142,
- 160,
- 177,
- 195,
- 212,
- 230,
- 247,
- 265,
- 282,
- 299,
- 316,
- 333,
- 350,
- 366,
- 383,
- 400,
- 416,
- 432,
- 448,
- 464,
- 480,
- 496,
- 512,
- 527,
- 542,
- 557,
- 572,
- 587,
- 601,
- 616,
- 630,
- 644,
- 658,
- 671,
- 685,
- 698,
- 711,
- 724,
- 736,
- 748,
- 760,
- 772,
- 784,
- 795,
- 806,
- 817,
- 828,
- 838,
- 848,
- 858,
- 868,
- 877,
- 886,
- 895,
- 904,
- 912,
- 920,
- 928,
- 935,
- 942,
- 949,
- 955,
- 962,
- 968,
- 973,
- 979,
- 984,
- 989,
- 993,
- 997,
- 1001,
- 1005,
- 1008,
- 1011,
- 1014,
- 1016,
- 1018,
- 1020,
- 1021,
- 1022,
- 1023,
- 1023,
- 1024,
- 1023,
- 1023,
- 1022,
- 1021,
- 1020,
- 1018,
- 1016,
- 1014,
- 1011,
- 1008,
- 1005,
- 1001,
- 997,
- 993,
- 989,
- 984,
- 979,
- 973,
- 968,
- 962,
- 955,
- 949,
- 942,
- 935,
- 928,
- 920,
- 912,
- 904,
- 895,
- 886,
- 877,
- 868,
- 858,
- 848,
- 838,
- 828,
- 817,
- 806,
- 795,
- 784,
- 772,
- 760,
- 748,
- 736,
- 724,
- 711,
- 698,
- 685,
- 671,
- 658,
- 644,
- 630,
- 616,
- 601,
- 587,
- 572,
- 557,
- 542,
- 527,
- 512,
- 496,
- 480,
- 464,
- 448,
- 432,
- 416,
- 400,
- 383,
- 366,
- 350,
- 333,
- 316,
- 299,
- 282,
- 265,
- 247,
- 230,
- 212,
- 195,
- 177,
- 160,
- 142,
- 124,
- 107,
- 89,
- 71,
- 53,
- 35,
- 17,
- 0,
- -17,
- -35,
- -53,
- -71,
- -89,
- -107,
- -124,
- -142,
- -160,
- -177,
- -195,
- -212,
- -230,
- -247,
- -265,
- -282,
- -299,
- -316,
- -333,
- -350,
- -366,
- -383,
- -400,
- -416,
- -432,
- -448,
- -464,
- -480,
- -496,
- -512,
- -527,
- -542,
- -557,
- -572,
- -587,
- -601,
- -616,
- -630,
- -644,
- -658,
- -671,
- -685,
- -698,
- -711,
- -724,
- -736,
- -748,
- -760,
- -772,
- -784,
- -795,
- -806,
- -817,
- -828,
- -838,
- -848,
- -858,
- -868,
- -877,
- -886,
- -895,
- -904,
- -912,
- -920,
- -928,
- -935,
- -942,
- -949,
- -955,
- -962,
- -968,
- -973,
- -979,
- -984,
- -989,
- -993,
- -997,
- -1001,
- -1005,
- -1008,
- -1011,
- -1014,
- -1016,
- -1018,
- -1020,
- -1021,
- -1022,
- -1023,
- -1023,
- -1024,
- -1023,
- -1023,
- -1022,
- -1021,
- -1020,
- -1018,
- -1016,
- -1014,
- -1011,
- -1008,
- -1005,
- -1001,
- -997,
- -993,
- -989,
- -984,
- -979,
- -973,
- -968,
- -962,
- -955,
- -949,
- -942,
- -935,
- -928,
- -920,
- -912,
- -904,
- -895,
- -886,
- -877,
- -868,
- -858,
- -848,
- -838,
- -828,
- -817,
- -806,
- -795,
- -784,
- -772,
- -760,
- -748,
- -736,
- -724,
- -711,
- -698,
- -685,
- -671,
- -658,
- -644,
- -630,
- -616,
- -601,
- -587,
- -572,
- -557,
- -542,
- -527,
- -512,
- -496,
- -480,
- -464,
- -448,
- -432,
- -416,
- -400,
- -383,
- -366,
- -350,
- -333,
- -316,
- -299,
- -282,
- -265,
- -247,
- -230,
- -212,
- -195,
- -177,
- -160,
- -142,
- -124,
- -107,
- -89,
- -71,
- -53,
- -35,
- -17
-};
diff --git a/ext/gd/libgd/gdtest.c b/ext/gd/libgd/gdtest.c
deleted file mode 100644
index 68d1d23a2b..0000000000
--- a/ext/gd/libgd/gdtest.c
+++ /dev/null
@@ -1,409 +0,0 @@
-#include <stdio.h>
-#ifdef _WIN32
-#include <process.h>
-int
-unlink (const char *filename)
-{
- return _unlink (filename);
-}
-#else
-#include <unistd.h> /* for getpid(), unlink() */
-#endif
-#include "gd.h"
-
-void CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2);
-
-static int freadWrapper (void *context, char *buf, int len);
-static int fwriteWrapper (void *context, const char *buffer, int len);
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im, ref, im2, im3;
- FILE *in, *out;
- void *iptr;
- int sz;
- gdIOCtxPtr ctx;
- char of[256];
- int colRed, colBlu;
- gdSource imgsrc;
- gdSink imgsnk;
- int foreground;
- int i;
- if (argc != 2)
- {
- fprintf (stderr, "Usage: gdtest filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
-
- rewind (in);
- ref = gdImageCreateFromPng (in);
-
- fclose (in);
-
- printf ("Reference File has %d Palette entries\n", ref->colorsTotal);
-
- CompareImages ("Initial Versions", ref, im);
-
-
- /* */
- /* Send to PNG File then Ptr */
- /* */
- sprintf (of, "%s.png", argv[1]);
- out = fopen (of, "wb");
- gdImagePng (im, out);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "PNG Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- CompareImages ("GD->PNG File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImagePngPtr (im, &sz);
- ctx = gdNewDynamicCtx (sz, iptr);
- im2 = gdImageCreateFromPngCtx (ctx);
-
- CompareImages ("GD->PNG ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
- ctx->free (ctx);
-
-
- /* */
- /* Send to GD2 File then Ptr */
- /* */
- sprintf (of, "%s.gd2", argv[1]);
- out = fopen (of, "wb");
- gdImageGd2 (im, out, 128, 2);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "GD2 Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromGd2 (in);
- fclose (in);
-
- CompareImages ("GD->GD2 File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImageGd2Ptr (im, 128, 2, &sz);
- /*printf("Got ptr %d (size %d)\n",iptr, sz); */
- ctx = gdNewDynamicCtx (sz, iptr);
- /*printf("Got ctx %d\n",ctx); */
- im2 = gdImageCreateFromGd2Ctx (ctx);
- /*printf("Got img2 %d\n",im2); */
-
- CompareImages ("GD->GD2 ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
- ctx->free (ctx);
-
-
- /* */
- /* Send to GD File then Ptr */
- /* */
- sprintf (of, "%s.gd", argv[1]);
- out = fopen (of, "wb");
- gdImageGd (im, out);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "GD Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromGd (in);
- fclose (in);
-
- CompareImages ("GD->GD File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImageGdPtr (im, &sz);
- /*printf("Got ptr %d (size %d)\n",iptr, sz); */
- ctx = gdNewDynamicCtx (sz, iptr);
- /*printf("Got ctx %d\n",ctx); */
- im2 = gdImageCreateFromGdCtx (ctx);
- /*printf("Got img2 %d\n",im2); */
-
- CompareImages ("GD->GD ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
- ctx->free (ctx);
-
- /*
- ** Test gdImageCreateFromPngSource'
- * */
-
- in = fopen (argv[1], "rb");
-
- imgsrc.source = freadWrapper;
- imgsrc.context = in;
- im2 = gdImageCreateFromPngSource (&imgsrc);
- fclose (in);
-
- if (im2 == NULL)
- {
- printf ("GD Source: ERROR Null returned by gdImageCreateFromPngSource\n");
- }
- else
- {
- CompareImages ("GD Source", ref, im2);
- gdImageDestroy (im2);
- };
-
-
- /*
- ** Test gdImagePngToSink'
- * */
-
- sprintf (of, "%s.snk", argv[1]);
- out = fopen (of, "wb");
- imgsnk.sink = fwriteWrapper;
- imgsnk.context = out;
- gdImagePngToSink (im, &imgsnk);
- fclose (out);
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "GD Sink: ERROR - GD Sink Output file does not exist!\n");
- }
- else
- {
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- CompareImages ("GD Sink", ref, im2);
- gdImageDestroy (im2);
- };
-
- unlink (of);
-
- /* */
- /* Test Extraction */
- /* */
- in = fopen ("test/gdtest_200_300_150_100.png", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest_200_300_150_100.png does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
-
- in = fopen ("test/gdtest.gd2", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest.gd2 does not exist!\n");
- exit (1);
- }
- im3 = gdImageCreateFromGd2Part (in, 200, 300, 150, 100);
- fclose (in);
-
- CompareImages ("GD2Part (gdtest_200_300_150_100.png, gdtest.gd2(part))", im2, im3);
-
- gdImageDestroy (im2);
- gdImageDestroy (im3);
-
- /* */
- /* Copy Blend */
- /* */
- in = fopen ("test/gdtest.png", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest.png does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- im3 = gdImageCreate (100, 60);
- colRed = gdImageColorAllocate (im3, 255, 0, 0);
- colBlu = gdImageColorAllocate (im3, 0, 0, 255);
- gdImageFilledRectangle (im3, 0, 0, 49, 30, colRed);
- gdImageFilledRectangle (im3, 50, 30, 99, 59, colBlu);
-
- gdImageCopyMerge (im2, im3, 150, 200, 10, 10, 90, 50, 50);
- gdImageCopyMerge (im2, im3, 180, 70, 10, 10, 90, 50, 50);
-
- gdImageCopyMergeGray (im2, im3, 250, 160, 10, 10, 90, 50, 50);
- gdImageCopyMergeGray (im2, im3, 80, 70, 10, 10, 90, 50, 50);
-
- gdImageDestroy (im3);
-
- in = fopen ("test/gdtest_merge.png", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest_merge.png does not exist!\n");
- exit (1);
- }
- im3 = gdImageCreateFromPng (in);
- fclose (in);
-
- printf ("[Merged Image has %d colours]\n", im2->colorsTotal);
- CompareImages ("Merged (gdtest.png, gdtest_merge.png)", im2, im3);
-
- gdImageDestroy (im2);
- gdImageDestroy (im3);
-
-#ifdef HAVE_JPEG
- out = fopen ("test/gdtest.jpg", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create file test/gdtest.jpg.\n");
- exit (1);
- }
- gdImageJpeg (im, out, -1);
- fclose (out);
- in = fopen ("test/gdtest.jpg", "rb");
- if (!in)
- {
- fprintf (stderr, "Can't open file test/gdtest.jpg.\n");
- exit (1);
- }
- im2 = gdImageCreateFromJpeg (in);
- fclose (in);
- if (!im2)
- {
- fprintf (stderr, "gdImageCreateFromJpeg failed.\n");
- exit (1);
- }
- gdImageDestroy (im2);
- printf ("Created test/gdtest.jpg successfully. Compare this image\n"
- "to the input image manually. Some difference must be\n"
- "expected as JPEG is a lossy file format.\n");
-#endif /* HAVE_JPEG */
- /* Assume the color closest to black is the foreground
- color for the B&W wbmp image. */
- fprintf (stderr, "NOTE: the WBMP output image will NOT match the original unless the original\n"
- "is also black and white. This is OK!\n");
- foreground = gdImageColorClosest (im, 0, 0, 0);
- fprintf (stderr, "Foreground index is %d\n", foreground);
- if (foreground == -1)
- {
- fprintf (stderr, "Source image has no colors, skipping wbmp test.\n");
- }
- else
- {
- out = fopen ("test/gdtest.wbmp", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create file test/gdtest.wbmp.\n");
- exit (1);
- }
- gdImageWBMP (im, foreground, out);
- fclose (out);
- in = fopen ("test/gdtest.wbmp", "rb");
- if (!in)
- {
- fprintf (stderr, "Can't open file test/gdtest.wbmp.\n");
- exit (1);
- }
- im2 = gdImageCreateFromWBMP (in);
- fprintf (stderr, "WBMP has %d colors\n", gdImageColorsTotal (im2));
- fprintf (stderr, "WBMP colors are:\n");
- for (i = 0; (i < gdImageColorsTotal (im2)); i++)
- {
- fprintf (stderr, "%02X%02X%02X\n",
- gdImageRed (im2, i),
- gdImageGreen (im2, i),
- gdImageBlue (im2, i));
- }
- fclose (in);
- if (!im2)
- {
- fprintf (stderr, "gdImageCreateFromWBMP failed.\n");
- exit (1);
- }
- CompareImages ("WBMP test (gdtest.png, gdtest.wbmp)", ref, im2);
- out = fopen ("test/gdtest_wbmp_to_png.png", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create file test/gdtest_wbmp_to_png.png.\n");
- exit (1);
- }
- gdImagePng (im2, out);
- fclose (out);
- gdImageDestroy (im2);
- }
- gdImageDestroy (im);
- gdImageDestroy (ref);
-
- return 0;
-}
-
-void
-CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2)
-{
- int cmpRes;
-
- cmpRes = gdImageCompare (im1, im2);
-
- if (cmpRes & GD_CMP_IMAGE)
- {
- printf ("%%%s: ERROR images differ: BAD\n", msg);
- }
- else if (cmpRes != 0)
- {
- printf ("%%%s: WARNING images differ: WARNING - Probably OK\n", msg);
- }
- else
- {
- printf ("%%%s: OK\n", msg);
- return;
- }
-
- if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y))
- {
- printf ("-%s: INFO image sizes differ\n", msg);
- }
-
- if (cmpRes & GD_CMP_NUM_COLORS)
- {
- printf ("-%s: INFO number of pallette entries differ %d Vs. %d\n", msg,
- im1->colorsTotal, im2->colorsTotal);
- }
-
- if (cmpRes & GD_CMP_COLOR)
- {
- printf ("-%s: INFO actual colours of pixels differ\n", msg);
- }
-}
-
-
-static int
-freadWrapper (void *context, char *buf, int len)
-{
- int got = fread (buf, 1, len, (FILE *) context);
- return got;
-}
-
-static int
-fwriteWrapper (void *context, const char *buffer, int len)
-{
- return fwrite (buffer, 1, len, (FILE *) context);
-}
diff --git a/ext/gd/libgd/gdtestft.c b/ext/gd/libgd/gdtestft.c
deleted file mode 100644
index 640960ca56..0000000000
--- a/ext/gd/libgd/gdtestft.c
+++ /dev/null
@@ -1,108 +0,0 @@
-
-#include "gd.h"
-#include <string.h>
-
-#define PI 3.141592
-#define DEG2RAD(x) ((x)*PI/180.)
-
-#define MAX(x,y) ((x) > (y) ? (x) : (y))
-#define MIN(x,y) ((x) < (y) ? (x) : (y))
-
-#define MAX4(x,y,z,w) \
- ((MAX((x),(y))) > (MAX((z),(w))) ? (MAX((x),(y))) : (MAX((z),(w))))
-#define MIN4(x,y,z,w) \
- ((MIN((x),(y))) < (MIN((z),(w))) ? (MIN((x),(y))) : (MIN((z),(w))))
-
-#define MAXX(x) MAX4(x[0],x[2],x[4],x[6])
-#define MINX(x) MIN4(x[0],x[2],x[4],x[6])
-#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
-#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
-
-int
-main (int argc, char *argv[])
-{
-#ifndef HAVE_LIBFREETYPE
- fprintf (stderr, "gd was not compiled with HAVE_LIBFREETYPE defined.\n");
- fprintf (stderr, "Install the FreeType library, including the\n");
- fprintf (stderr, "header files. Then edit the gd Makefile, type\n");
- fprintf (stderr, "make clean, and type make again.\n");
- return 1;
-#else
- gdImagePtr im;
- int black;
- int white;
- int brect[8];
- int x, y;
- char *err;
- FILE *out;
-#ifdef JISX0208
- char *s = "Hello. ‚±‚ñ‚É‚¿‚Í Qyjpqg,"; /* String to draw. */
-#else
- char *s = "Hello. Qyjpqg,"; /* String to draw. */
-#endif
-
- double sz = 40.;
-
-#if 0
- double angle = 0.;
-#else
- double angle = DEG2RAD (-90);
-#endif
-
-#ifdef JISX0208
- char *f = "/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf"; /* UNICODE */
- /* char *f = "/usr/local/lib/fonts/truetype/DynaFont/dfpop1.ttf"; *//* SJIS */
-#else
- char *f = "times"; /* TrueType font */
-#endif
-
- /* obtain brect so that we can size the image */
- err = gdImageStringFT ((gdImagePtr) NULL, &brect[0], 0, f, sz, angle, 0, 0, s);
- if (err)
- {
- fprintf (stderr, err);
- return 1;
- }
-
- /* create an image just big enough for the string */
- x = MAXX (brect) - MINX (brect) + 6;
- y = MAXY (brect) - MINY (brect) + 6;
-#if 0
- im = gdImageCreate (500, 500);
-#else
- /* gd 2.0: true color images can use freetype too */
- im = gdImageCreateTrueColor (x, y);
-#endif
-
- /* Background color. gd 2.0: fill the image with it; truecolor
- images have a black background otherwise. */
- white = gdImageColorResolve (im, 255, 255, 255);
- gdImageFilledRectangle (im, 0, 0, x, y, white);
- black = gdImageColorResolve (im, 0, 0, 0);
-
- /* render the string, offset origin to center string */
- x = 0 - MINX (brect) + 3;
- y = 0 - MINY (brect) + 3;
-
- err = gdImageStringFT (im, NULL, black, f, sz, angle, x, y, s);
- if (err)
- {
- fprintf (stderr, err);
- return 1;
- }
- /* TBB: Write img to test/fttest.png */
- out = fopen ("test/fttest.png", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create test/fttest.png\n");
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- fprintf (stderr, "Test image written to test/fttest.png\n");
- /* Destroy it */
- gdImageDestroy (im);
-
- return 0;
-#endif /* HAVE_FREETYPE */
-}
diff --git a/ext/gd/libgd/gdtopng.c b/ext/gd/libgd/gdtopng.c
deleted file mode 100644
index 9de34990ab..0000000000
--- a/ext/gd/libgd/gdtopng.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: gdtopng filename.gd filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gdxpm.c b/ext/gd/libgd/gdxpm.c
deleted file mode 100644
index 839e6c87cf..0000000000
--- a/ext/gd/libgd/gdxpm.c
+++ /dev/null
@@ -1,148 +0,0 @@
-
-/*
- add ability to load xpm files to gd, requires the xpm
- library.
- Caolan.McNamara@ul.ie
- http://www.csn.ul.ie/~caolan
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifndef HAVE_XPM
-gdImagePtr
-gdImageCreateFromXpm (char *filename)
-{
- fprintf (stderr, "libgd was not built with xpm support\n");
- return (NULL);
-}
-
-#else
-
-#include "xpm.h"
-
-gdImagePtr
-gdImageCreateFromXpm (char *filename)
-{
- XpmInfo info;
- XpmImage image;
- int i, j, k, number;
- char buf[5];
- gdImagePtr im = 0;
- char *apixel;
- int *pointer;
- int red = 0, green = 0, blue = 0, color = 0;
- int *colors;
- int ret;
-
- ret = XpmReadFileToXpmImage (filename, &image, &info);
- if (ret != XpmSuccess)
- return 0;
-
- if (!(im = gdImageCreate (image.width, image.height)))
- return 0;
-
- number = image.ncolors;
- colors = (int *) gdMalloc (sizeof (int) * number);
- if (colors == NULL)
- return (0);
- for (i = 0; i < number; i++)
- {
- switch (strlen (image.colorTable[i].c_color))
- {
- case 4:
- buf[1] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- red = strtol (buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[3];
- green = strtol (buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[5];
- blue = strtol (buf, NULL, 16);
- break;
- case 7:
- buf[2] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- buf[1] = image.colorTable[i].c_color[2];
- red = strtol (buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[3];
- buf[1] = image.colorTable[i].c_color[4];
- green = strtol (buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[5];
- buf[1] = image.colorTable[i].c_color[6];
- blue = strtol (buf, NULL, 16);
- break;
- case 10:
- buf[3] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- buf[1] = image.colorTable[i].c_color[2];
- buf[2] = image.colorTable[i].c_color[3];
- red = strtol (buf, NULL, 16);
- red /= 64;
-
- buf[0] = image.colorTable[i].c_color[4];
- buf[1] = image.colorTable[i].c_color[5];
- buf[2] = image.colorTable[i].c_color[6];
- green = strtol (buf, NULL, 16);
- green /= 64;
-
- buf[0] = image.colorTable[i].c_color[7];
- buf[1] = image.colorTable[i].c_color[8];
- buf[2] = image.colorTable[i].c_color[9];
- blue = strtol (buf, NULL, 16);
- blue /= 64;
- break;
- case 13:
- buf[4] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- buf[1] = image.colorTable[i].c_color[2];
- buf[2] = image.colorTable[i].c_color[3];
- buf[3] = image.colorTable[i].c_color[4];
- red = strtol (buf, NULL, 16);
- red /= 256;
-
- buf[0] = image.colorTable[i].c_color[5];
- buf[1] = image.colorTable[i].c_color[6];
- buf[2] = image.colorTable[i].c_color[7];
- buf[3] = image.colorTable[i].c_color[8];
- green = strtol (buf, NULL, 16);
- green /= 256;
-
- buf[0] = image.colorTable[i].c_color[9];
- buf[1] = image.colorTable[i].c_color[10];
- buf[2] = image.colorTable[i].c_color[11];
- buf[3] = image.colorTable[i].c_color[12];
- blue = strtol (buf, NULL, 16);
- blue /= 256;
- break;
- }
-
-
- colors[i] = gdImageColorResolve (im, red, green, blue);
- if (colors[i] == -1)
- fprintf (stderr, "ARRRGH\n");
- }
-
- apixel = (char *) gdMalloc (image.cpp + 1);
- if (apixel == NULL)
- return (0);
- apixel[image.cpp] = '\0';
-
- pointer = image.data;
- for (i = 0; i < image.height; i++)
- {
- for (j = 0; j < image.width; j++)
- {
- k = *pointer++;
- gdImageSetPixel (im, j, i, colors[k]);
- }
- }
- gdFree (apixel);
- gdFree (colors);
- return (im);
-}
-#endif
diff --git a/ext/gd/libgd/jisx0208.h b/ext/gd/libgd/jisx0208.h
deleted file mode 100644
index f8a8b510fa..0000000000
--- a/ext/gd/libgd/jisx0208.h
+++ /dev/null
@@ -1,1205 +0,0 @@
-#ifndef JISX0208_H
-#define JISX0208_H
-/* This file was derived from "src/VF_Ftype.c" in VFlib2-2.24.2
- by Dr. Kakugawa */
-
-/* JIS -> Unicode mapping table */
-static unsigned short UnicodeTbl[][94] = {
-{ /* category 01 */
-0x0000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B,
-0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E,
-0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD,
-0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C,
-0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C,
-0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B,
-0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E,
-0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0x00F7,
-0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234,
-0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04,
-0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0x00A7,
-0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7},
-{ /* category 02 */
-0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B,
-0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A,
-0x2229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207,
-0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235,
-0x222B, 0x222C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, /**/
-0x00B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x25EF},
-{ /* category 03 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF10,
-0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18,
-0xFF19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28,
-0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30,
-0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38,
-0xFF39, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48,
-0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50,
-0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58,
-0xFF59, 0xFF5A, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 04 */
-0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050,
-0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060,
-0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070,
-0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080,
-0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090,
-0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 05 */
-0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8,
-0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0,
-0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8,
-0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0,
-0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8,
-0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0,
-0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8,
-0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0,
-0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8,
-0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0,
-0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 06 */
-0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
-0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
-0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0,
-0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 07 */
-0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
-0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E,
-0x042F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
-0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E,
-0x044F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 08 */
-0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C,
-0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B,
-0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F,
-0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 09 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 10 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 11 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 12 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 13 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 14 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 15 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 16 */
-0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6,
-0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED,
-0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B,
-0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F,
-0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D,
-0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937,
-0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905,
-0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E,
-0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF,
-0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32,
-0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0,
-0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D},
-{ /* category 17 */
-0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF,
-0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893,
-0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5,
-0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2,
-0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3,
-0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834,
-0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5,
-0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712,
-0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF,
-0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276,
-0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A,
-0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC},
-{ /* category 18 */
-0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956,
-0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B,
-0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069,
-0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D,
-0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6,
-0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B,
-0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304,
-0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6,
-0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B,
-0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB,
-0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A,
-0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539},
-{ /* category 19 */
-0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75,
-0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916,
-0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB,
-0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3,
-0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1,
-0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A,
-0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66,
-0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F,
-0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B,
-0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6,
-0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC,
-0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431},
-{ /* category 20 */
-0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2,
-0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C,
-0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE,
-0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57,
-0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF,
-0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E,
-0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2,
-0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC,
-0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811,
-0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA,
-0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE,
-0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4},
-{ /* category 21 */
-0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63,
-0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC,
-0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993,
-0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947,
-0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409,
-0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD,
-0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7,
-0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D,
-0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08,
-0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8,
-0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8,
-0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC},
-{ /* category 22 */
-0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354,
-0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A,
-0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2,
-0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1,
-0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D,
-0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4,
-0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981,
-0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39,
-0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A,
-0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2,
-0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047,
-0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48},
-{ /* category 23 */
-0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688,
-0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB,
-0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2,
-0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951,
-0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A,
-0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C,
-0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63,
-0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287,
-0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A,
-0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039,
-0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805,
-0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372},
-{ /* category 24 */
-0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79,
-0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375,
-0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B,
-0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00,
-0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1,
-0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56,
-0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87,
-0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D,
-0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7,
-0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E,
-0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C,
-0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411},
-{ /* category 25 */
-0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F,
-0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18,
-0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643,
-0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69,
-0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05,
-0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154,
-0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC,
-0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805,
-0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5,
-0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A,
-0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170,
-0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC},
-{ /* category 26 */
-0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068,
-0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A,
-0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6,
-0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF,
-0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9,
-0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73,
-0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E,
-0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750,
-0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4,
-0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B,
-0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F,
-0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237},
-{ /* category 27 */
-0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1,
-0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09,
-0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6,
-0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178,
-0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F,
-0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9,
-0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307,
-0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B,
-0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2,
-0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE,
-0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D,
-0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642},
-{ /* category 28 */
-0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A,
-0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F,
-0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1,
-0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE,
-0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61,
-0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C,
-0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7,
-0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C,
-0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6,
-0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B,
-0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388,
-0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468},
-{ /* category 29 */
-0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0,
-0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846,
-0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6,
-0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4,
-0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919,
-0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA,
-0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C,
-0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96,
-0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6,
-0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72,
-0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F,
-0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F},
-{ /* category 30 */
-0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617,
-0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A,
-0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C,
-0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F,
-0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167,
-0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11,
-0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3,
-0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266,
-0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57,
-0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5,
-0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8,
-0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE},
-{ /* category 31 */
-0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6,
-0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507,
-0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B,
-0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E,
-0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB,
-0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875,
-0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663,
-0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017,
-0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B,
-0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E,
-0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E,
-0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE},
-{ /* category 32 */
-0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4,
-0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574,
-0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F,
-0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93,
-0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106,
-0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3,
-0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F,
-0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83,
-0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148,
-0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247,
-0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C,
-0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA},
-{ /* category 33 */
-0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE,
-0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D,
-0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE,
-0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9,
-0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44,
-0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC,
-0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64,
-0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD,
-0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89,
-0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349,
-0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D,
-0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E},
-{ /* category 34 */
-0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373,
-0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E,
-0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58,
-0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A,
-0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1,
-0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE,
-0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF,
-0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000,
-0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C,
-0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85,
-0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438,
-0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA},
-{ /* category 35 */
-0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA,
-0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39,
-0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1,
-0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6,
-0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696,
-0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B,
-0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718,
-0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010,
-0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99,
-0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B,
-0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457,
-0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5},
-{ /* category 36 */
-0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2,
-0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074,
-0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A,
-0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88,
-0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC,
-0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB,
-0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F,
-0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3,
-0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448,
-0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C,
-0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B,
-0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013},
-{ /* category 37 */
-0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575,
-0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9,
-0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55,
-0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9,
-0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835,
-0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B,
-0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA,
-0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD,
-0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B,
-0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7,
-0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977,
-0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230},
-{ /* category 38 */
-0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003,
-0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5,
-0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5,
-0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97,
-0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC,
-0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6,
-0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566,
-0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948,
-0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A,
-0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF,
-0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1,
-0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165},
-{ /* category 39 */
-0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1,
-0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5,
-0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC,
-0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2,
-0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2,
-0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3,
-0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC,
-0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973,
-0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F,
-0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF,
-0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD,
-0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6},
-{ /* category 40 */
-0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61,
-0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197,
-0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A,
-0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB,
-0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF,
-0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6,
-0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0,
-0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C,
-0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2,
-0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9,
-0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E,
-0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E},
-{ /* category 41 */
-0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D,
-0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867,
-0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19,
-0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF,
-0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED,
-0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3,
-0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66,
-0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7,
-0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C,
-0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66,
-0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A,
-0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D},
-{ /* category 42 */
-0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8,
-0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4,
-0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587,
-0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A,
-0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB,
-0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F,
-0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF,
-0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703,
-0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893,
-0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8,
-0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29,
-0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B},
-{ /* category 43 */
-0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C,
-0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD,
-0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8,
-0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2,
-0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E,
-0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2,
-0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86,
-0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469,
-0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE,
-0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52,
-0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4,
-0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80},
-{ /* category 44 */
-0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC,
-0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D,
-0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727,
-0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E,
-0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D,
-0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302,
-0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499,
-0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24,
-0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301,
-0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2,
-0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3,
-0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652},
-{ /* category 45 */
-0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5,
-0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C,
-0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091,
-0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89,
-0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA,
-0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194,
-0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21,
-0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83,
-0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765,
-0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71,
-0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229,
-0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483},
-{ /* category 46 */
-0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387,
-0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409,
-0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E,
-0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE,
-0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7,
-0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1,
-0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A,
-0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E,
-0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2,
-0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62,
-0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B,
-0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F},
-{ /* category 47 */
-0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2,
-0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C,
-0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E,
-0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6,
-0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0,
-0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900,
-0x6E7E, 0x7897, 0x8155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 48 */
-0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F,
-0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212,
-0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3,
-0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE,
-0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D,
-0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69,
-0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF,
-0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5,
-0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6,
-0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043,
-0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C,
-0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2},
-{ /* category 49 */
-0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED,
-0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116,
-0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B,
-0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169,
-0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F,
-0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9,
-0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD,
-0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0,
-0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A,
-0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E,
-0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D,
-0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8},
-{ /* category 50 */
-0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7,
-0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8,
-0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315,
-0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346,
-0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E,
-0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5,
-0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC,
-0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440,
-0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E,
-0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492,
-0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2,
-0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8},
-{ /* category 51 */
-0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6,
-0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539,
-0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557,
-0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F,
-0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9,
-0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4,
-0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9,
-0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B,
-0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0,
-0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC,
-0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7,
-0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709},
-{ /* category 52 */
-0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C,
-0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769,
-0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3,
-0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3,
-0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821,
-0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885,
-0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE,
-0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC,
-0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD,
-0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D,
-0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A,
-0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969},
-{ /* category 53 */
-0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6,
-0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11,
-0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36,
-0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD,
-0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C,
-0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43,
-0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69,
-0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83,
-0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4,
-0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3,
-0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28,
-0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53},
-{ /* category 54 */
-0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79,
-0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC,
-0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA,
-0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F,
-0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C,
-0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84,
-0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7,
-0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB,
-0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36,
-0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F,
-0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F,
-0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF},
-{ /* category 55 */
-0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8,
-0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE,
-0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29,
-0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51,
-0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83,
-0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99,
-0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4,
-0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019,
-0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026,
-0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A,
-0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B,
-0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A},
-{ /* category 56 */
-0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1,
-0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5,
-0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4,
-0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147,
-0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134,
-0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A,
-0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153,
-0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A,
-0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8,
-0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3,
-0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200,
-0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B},
-{ /* category 57 */
-0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241,
-0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282,
-0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294,
-0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8,
-0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C,
-0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350,
-0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB,
-0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369,
-0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6,
-0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D,
-0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A,
-0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC},
-{ /* category 58 */
-0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1,
-0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C,
-0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C,
-0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536,
-0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E,
-0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F,
-0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2,
-0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603,
-0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644,
-0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F,
-0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698,
-0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC},
-{ /* category 59 */
-0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9,
-0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727,
-0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746,
-0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9,
-0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7,
-0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE,
-0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C,
-0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3,
-0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD,
-0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5,
-0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908,
-0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD},
-{ /* category 60 */
-0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3,
-0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923,
-0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954,
-0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961,
-0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF,
-0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB,
-0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4,
-0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2,
-0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A,
-0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36,
-0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22,
-0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3},
-{ /* category 61 */
-0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC,
-0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05,
-0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37,
-0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59,
-0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80,
-0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA,
-0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6,
-0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE,
-0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55,
-0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E,
-0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD,
-0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE},
-{ /* category 62 */
-0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36,
-0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C,
-0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95,
-0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6,
-0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5,
-0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E,
-0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B,
-0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF,
-0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3,
-0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5,
-0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE,
-0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC},
-{ /* category 63 */
-0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80,
-0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E,
-0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9,
-0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1,
-0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F,
-0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030,
-0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1,
-0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9,
-0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166,
-0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195,
-0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4,
-0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC},
-{ /* category 64 */
-0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C,
-0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B,
-0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296,
-0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE,
-0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317,
-0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325,
-0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370,
-0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB,
-0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425,
-0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441,
-0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B,
-0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1},
-{ /* category 65 */
-0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1,
-0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D,
-0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D,
-0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567,
-0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A,
-0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2,
-0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD,
-0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC,
-0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609,
-0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
-0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662,
-0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670},
-{ /* category 66 */
-0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B,
-0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8,
-0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1,
-0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704,
-0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738,
-0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E,
-0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6,
-0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7,
-0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926,
-0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A,
-0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB,
-0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC},
-{ /* category 67 */
-0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919,
-0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955,
-0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA,
-0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC,
-0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F,
-0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49,
-0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88,
-0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6,
-0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF,
-0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6,
-0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18,
-0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50},
-{ /* category 68 */
-0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65,
-0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98,
-0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D,
-0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD,
-0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07,
-0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27,
-0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54,
-0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65,
-0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB,
-0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD,
-0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B,
-0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06},
-{ /* category 69 */
-0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32,
-0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68,
-0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D,
-0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB,
-0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8,
-0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A,
-0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22,
-0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32,
-0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79,
-0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE,
-0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94,
-0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A},
-{ /* category 70 */
-0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54,
-0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82,
-0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D,
-0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8,
-0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6,
-0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012,
-0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A,
-0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073,
-0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086,
-0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB,
-0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF,
-0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B},
-{ /* category 71 */
-0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E,
-0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182,
-0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0,
-0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9,
-0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0,
-0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207,
-0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233,
-0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262,
-0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E,
-0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3,
-0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB,
-0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9},
-{ /* category 72 */
-0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350,
-0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA,
-0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C,
-0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413,
-0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7,
-0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438,
-0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477,
-0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F,
-0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9,
-0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1,
-0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515,
-0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548},
-{ /* category 73 */
-0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591,
-0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C,
-0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0,
-0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B,
-0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D,
-0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9,
-0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0,
-0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF,
-0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB,
-0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737,
-0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C,
-0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759},
-{ /* category 74 */
-0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF,
-0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3,
-0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D,
-0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815,
-0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844,
-0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E,
-0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892,
-0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1,
-0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902,
-0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913,
-0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B,
-0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E},
-{ /* category 75 */
-0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E,
-0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6,
-0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA,
-0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10,
-0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52,
-0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82,
-0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3,
-0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4,
-0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C,
-0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33,
-0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F,
-0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B},
-{ /* category 76 */
-0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E,
-0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F,
-0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78,
-0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94,
-0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3,
-0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD,
-0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D,
-0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D,
-0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF,
-0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF,
-0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10,
-0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A},
-{ /* category 77 */
-0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60,
-0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87,
-0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99,
-0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5,
-0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE,
-0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F,
-0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42,
-0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62,
-0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7,
-0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005,
-0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016,
-0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8},
-{ /* category 78 */
-0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056,
-0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082,
-0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF,
-0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112,
-0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165,
-0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB,
-0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9,
-0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5,
-0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E,
-0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B,
-0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9,
-0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E},
-{ /* category 79 */
-0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C,
-0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394,
-0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD,
-0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407,
-0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452,
-0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470,
-0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F,
-0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0,
-0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA,
-0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC,
-0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642,
-0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E},
-{ /* category 80 */
-0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695,
-0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6,
-0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC,
-0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E,
-0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739,
-0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C,
-0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779,
-0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790,
-0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6,
-0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6,
-0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D,
-0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870},
-{ /* category 81 */
-0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4,
-0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914,
-0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E,
-0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951,
-0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE,
-0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE,
-0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2,
-0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E,
-0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64,
-0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF,
-0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6,
-0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7},
-{ /* category 82 */
-0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25,
-0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44,
-0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93,
-0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4,
-0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3,
-0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0,
-0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12,
-0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30,
-0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76,
-0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03,
-0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15,
-0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48},
-{ /* category 83 */
-0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89,
-0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2,
-0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2,
-0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A,
-0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B,
-0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8,
-0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4,
-0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4,
-0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08,
-0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54,
-0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A,
-0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0},
-{ /* category 84 */
-0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 85 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 86 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 87 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 88 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 89 */
-0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631,
-0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00,
-0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD,
-0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094,
-0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215,
-0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372,
-0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF,
-0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10,
-0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4,
-0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6,
-0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8,
-0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7},
-{ /* category 90 */
-0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2,
-0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460,
-0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E,
-0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699,
-0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB,
-0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14,
-0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2,
-0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04,
-0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC,
-0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5,
-0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C,
-0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1},
-{ /* category 91 */
-0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3,
-0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462,
-0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B,
-0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A,
-0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1,
-0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7,
-0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362,
-0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B,
-0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37,
-0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F,
-0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25,
-0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA},
-{ /* category 92 */
-0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210,
-0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239,
-0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0,
-0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28,
-0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6,
-0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29,
-0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751,
-0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E,
-0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB,
-0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x0000, 0x0000,
-0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
-0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02}};
-
-#endif /* JISX0208_H */
diff --git a/ext/gd/libgd/mathmake.c b/ext/gd/libgd/mathmake.c
deleted file mode 100644
index 3950c4b09c..0000000000
--- a/ext/gd/libgd/mathmake.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-
-#define scale 1024
-
-int basis[91];
-int cost[360];
-
-main (void)
-{
- int i;
- printf ("#define costScale %d\n", scale);
- printf ("int cost[] = {\n ");
- for (i = 0; (i <= 90); i++)
- {
- basis[i] = cos ((double) i * .0174532925) * scale;
- }
- for (i = 0; (i < 90); i++)
- {
- printf ("%d,\n ", cost[i] = basis[i]);
- }
- for (i = 90; (i < 180); i++)
- {
- printf ("%d,\n ", cost[i] = -basis[180 - i]);
- }
- for (i = 180; (i < 270); i++)
- {
- printf ("%d,\n ", cost[i] = -basis[i - 180]);
- }
- for (i = 270; (i < 359); i++)
- {
- printf ("%d,\n ", cost[i] = basis[360 - i]);
- }
- printf ("%d\n", cost[359] = basis[1]);
- printf ("};\n");
- printf ("#define sintScale %d\n", scale);
- printf ("int sint[] = {\n ");
- for (i = 0; (i < 360); i++)
- {
- int val;
- val = cost[(i + 270) % 360];
- if (i != 359)
- {
- printf ("%d,\n ", val);
- }
- else
- {
- printf ("%d\n", val);
- }
- }
- printf ("};\n");
-}
diff --git a/ext/gd/libgd/pngtogd.c b/ext/gd/libgd/pngtogd.c
deleted file mode 100644
index b663b170b7..0000000000
--- a/ext/gd/libgd/pngtogd.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: pngtogd filename.png filename.gd\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImageGd (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/pngtogd2.c b/ext/gd/libgd/pngtogd2.c
deleted file mode 100644
index c8b1d843af..0000000000
--- a/ext/gd/libgd/pngtogd2.c
+++ /dev/null
@@ -1,52 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int cs, fmt;
-
- if (argc != 5)
- {
- fprintf (stderr, "Usage: pngtogd2 filename.png filename.gd2 cs fmt\n");
- fprintf (stderr, " where cs is the chunk size\n");
- fprintf (stderr, " fmt is 1 for raw, 2 for compressed\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- cs = atoi (argv[3]);
- fmt = atoi (argv[4]);
- gdImageGd2 (im, out, cs, fmt);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/testac.c b/ext/gd/libgd/testac.c
deleted file mode 100644
index 55a5434d21..0000000000
--- a/ext/gd/libgd/testac.c
+++ /dev/null
@@ -1,129 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* If palette is true, we convert from truecolor to palette at the end,
- to test gdImageTrueColorToPalette and see file size/
- quality tradeoffs. */
-
-void testDrawing (
- gdImagePtr im_in,
- double scale,
- int blending,
- int palette,
- char *filename);
-
-int
-main (int argc, char *argv[])
-{
- /* Input and output files */
- FILE *in;
- FILE *out;
-
- /* Input image */
- gdImagePtr im_in = 0;
-
- /* Colors */
- int lightBlue;
-
- if (argc != 2)
- {
- fprintf (stderr, "Usage: testac filename.png\n");
- exit (1);
- }
- /* Load original PNG, which should contain alpha channel
- information. We will use it in two ways: preserving it
- literally, for use with compatible browsers, and
- compositing it ourselves against a background of our
- choosing (alpha blending). We'll change its size
- and try creating palette versions of it. */
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Can't load %s.\n", argv[1]);
- exit (1);
- }
- else
- {
- im_in = gdImageCreateFromPng (in);
- fclose (in);
- }
- testDrawing (im_in, 1.0, 0, 0, "noblending-fullsize-truecolor.png");
- testDrawing (im_in, 1.0, 1, 0, "blending-fullsize-truecolor.png");
- testDrawing (im_in, 0.5, 0, 0, "noblending-halfsize-truecolor.png");
- testDrawing (im_in, 0.5, 1, 0, "blending-halfsize-truecolor.png");
- testDrawing (im_in, 2.0, 0, 0, "noblending-doublesize-truecolor.png");
- testDrawing (im_in, 2.0, 1, 0, "blending-doublesize-truecolor.png");
- testDrawing (im_in, 1.0, 0, 1, "noblending-fullsize-palette.png");
- testDrawing (im_in, 1.0, 1, 1, "blending-fullsize-palette.png");
- testDrawing (im_in, 0.5, 0, 1, "noblending-halfsize-palette.png");
- testDrawing (im_in, 0.5, 1, 1, "blending-halfsize-palette.png");
- testDrawing (im_in, 2.0, 0, 1, "noblending-doublesize-palette.png");
- testDrawing (im_in, 2.0, 1, 1, "blending-doublesize-palette.png");
- gdImageDestroy (im_in);
- return 0;
-}
-
-/* If palette is true, we convert from truecolor to palette at the end,
- to test gdImageTrueColorToPalette and see file size/
- quality tradeoffs. */
-void
-testDrawing (
- gdImagePtr im_in,
- double scale,
- int blending,
- int palette,
- char *filename)
-{
- gdImagePtr im_out;
- FILE *out;
- /* Create output image. */
- im_out = gdImageCreateTrueColor ((int) (gdImageSX (im_in) * scale),
- (int) (gdImageSY (im_in) * scale));
- /*
- Request alpha blending. This causes future
- drawing operations to perform alpha channel blending
- with the background, resulting in an opaque image.
- Without this call, pixels in the foreground color are
- copied literally, *including* the alpha channel value,
- resulting in an output image which is potentially
- not opaque. This flag can be set and cleared as often
- as desired. */
- gdImageAlphaBlending (im_out, blending);
-
- /* Flood with light blue. */
- gdImageFill (im_out, (int) (gdImageSX (im_in) * scale / 2),
- (int) (gdImageSY (im_in) * scale / 2),
- gdTrueColor (192, 192, 255));
- /* Copy the source image. Alpha blending should result in
- compositing against red. With blending turned off, the
- browser or viewer will composite against its preferred
- background, or, if it does not support an alpha channel,
- we will see the original colors for the pixels that
- ought to be transparent or semitransparent. */
- gdImageCopyResampled (im_out, im_in,
- 0, 0,
- 0, 0,
- (int) (gdImageSX (im_in) * scale), (int) (gdImageSY (im_in) * scale),
- gdImageSX (im_in), gdImageSY (im_in));
- /* Write PNG */
- out = fopen (filename, "wb");
-
- /* If this image is the result of alpha channel blending,
- it will not contain an interesting alpha channel itself.
- Save a little file size by not saving the alpha channel.
- Otherwise the file would typically be slightly larger. */
- gdImageSaveAlpha (im_out, !blending);
-
- /* If requested, convert from truecolor to palette. */
- if (palette)
- {
- /* Dithering, 256 colors. */
- gdImageTrueColorToPalette (im_out, 1, 256);
- }
-
- gdImagePng (im_out, out);
- fclose (out);
-
- gdImageDestroy (im_out);
-}
diff --git a/ext/gd/libgd/wbmp.c b/ext/gd/libgd/wbmp.c
deleted file mode 100644
index 828beeb50c..0000000000
--- a/ext/gd/libgd/wbmp.c
+++ /dev/null
@@ -1,369 +0,0 @@
-
-/* WBMP
- ** ----
- ** WBMP Level 0: B/W, Uncompressed
- ** This implements the WBMP format as specified in WAPSpec 1.1 and 1.2.
- ** It does not support ExtHeaders as defined in the spec. The spec states
- ** that a WAP client does not need to implement ExtHeaders.
- **
- ** (c) 2000 Johan Van den Brande <johan@vandenbrande.com>
- */
-
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "wbmp.h"
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef NOTDEF
-#define __TEST /* Compile with main function */
-#define __DEBUG /* Extra verbose when with __TEST */
-#define __WRITE /* readwbmp and writewbmp(stdout) */
-#define __VIEW /* view the wbmp on stdout */
-#endif
-
-/* getmbi
- ** ------
- ** Get a multibyte integer from a generic getin function
- ** 'getin' can be getc, with in = NULL
- ** you can find getin as a function just above the main function
- ** This way you gain a lot of flexibilty about how this package
- ** reads a wbmp file.
- */
-int
-getmbi (int (*getin) (void *in), void *in)
-{
- int i, mbi = 0;
-
- do
- {
- i = getin (in);
- if (i < 0)
- return (-1);
- mbi = mbi << 7 | i & 0x7f;
- }
- while (i & 0x80);
-
- return (mbi);
-}
-
-
-/* putmbi
- ** ------
- ** Put a multibyte intgerer in some kind of output stream
- ** I work here with a function pointer, to make it as generic
- ** as possible. Look at this function as an iterator on the
- ** mbi integers it spits out.
- **
- */
-void
-putmbi (int i, void (*putout) (int c, void *out), void *out)
-{
- int cnt, l, accu;
-
- /* Get number of septets */
- cnt = 0;
- accu = 0;
- while (accu != i)
- accu += i & 0x7f << 7 * cnt++;
-
- /* Produce the multibyte output */
- for (l = cnt - 1; l > 0; l--)
- putout (0x80 | (i & 0x7f << 7 * l) >> 7 * l, out);
-
- putout (i & 0x7f, out);
-
-}
-
-
-
-/* skipheader
- ** ----------
- ** Skips the ExtHeader. Not needed for the moment
- **
- */
-int
-skipheader (int (*getin) (void *in), void *in)
-{
- int i;
-
- do
- {
- i = getin (in);
- if (i < 0)
- return (-1);
- }
- while (i & 0x80);
-
- return (0);
-}
-
-/* create wbmp
- ** -----------
- ** create an empty wbmp
- **
- */
-Wbmp *
-createwbmp (int width, int height, int color)
-{
- int i;
-
- Wbmp *wbmp;
- if ((wbmp = (Wbmp *) gdMalloc (sizeof (Wbmp))) == NULL)
- return (NULL);
-
- if ((wbmp->bitmap = (int *) gdMalloc (sizeof (int) * width * height)) == NULL)
- {
- gdFree (wbmp);
- return (NULL);
- }
-
- wbmp->width = width;
- wbmp->height = height;
-
- for (i = 0; i < width * height; wbmp->bitmap[i++] = color);
-
- return (wbmp);
-}
-
-
-
-/* readwbmp
- ** -------
- ** Actually reads the WBMP format from an open file descriptor
- ** It goes along by returning a pointer to a WBMP struct.
- **
- */
-int
-readwbmp (int (*getin) (void *in), void *in, Wbmp ** return_wbmp)
-{
- int row, col, byte, pel, pos;
- Wbmp *wbmp;
-
- if ((wbmp = (Wbmp *) gdMalloc (sizeof (Wbmp))) == NULL)
- return (-1);
-
- wbmp->type = getin (in);
- if (wbmp->type != 0)
- {
- gdFree (wbmp);
- return (-1);
- }
-
- if (skipheader (getin, in))
- return (-1);
-
-
- wbmp->width = getmbi (getin, in);
- if (wbmp->width == -1)
- {
- gdFree (wbmp);
- return (-1);
- }
-
- wbmp->height = getmbi (getin, in);
- if (wbmp->height == -1)
- {
- gdFree (wbmp);
- return (-1);
- }
-
-#ifdef __DEBUG
- printf ("W: %d, H: %d\n", wbmp->width, wbmp->height);
-#endif
-
- if ((wbmp->bitmap = (int *) gdMalloc (sizeof (int) * wbmp->width * wbmp->height)) == NULL)
- {
- gdFree (wbmp);
- return (-1);
- }
-
-#ifdef __DEBUG
- printf ("DATA CONSTRUCTED\n");
-#endif
-
- pos = 0;
- for (row = 0; row < wbmp->height; row++)
- {
- for (col = 0; col < wbmp->width;)
- {
- byte = getin (in);
-
- for (pel = 7; pel >= 0; pel--)
- {
- if (col++ < wbmp->width)
- {
- if (byte & 1 << pel)
- {
- wbmp->bitmap[pos] = WBMP_WHITE;
- }
- else
- {
- wbmp->bitmap[pos] = WBMP_BLACK;
- }
- pos++;
- }
- }
- }
- }
-
- *return_wbmp = wbmp;
-
- return (0);
-}
-
-
-/* writewbmp
- ** ---------
- ** Write a wbmp to a file descriptor
- **
- ** Why not just giving a filedescriptor to this function?
- ** Well, the incentive to write this function was the complete
- ** integration in gd library from www.boutell.com. They use
- ** their own io functions, so the passing of a function seemed to be
- ** a logic(?) decision ...
- **
- */
-int
-writewbmp (Wbmp * wbmp, void (*putout) (int c, void *out), void *out)
-{
- int row, col;
- int bitpos, octet;
-
- /* Generate the header */
- putout (0, out); /* WBMP Type 0: B/W, Uncompressed bitmap */
- putout (0, out); /* FixHeaderField */
-
-
-
- /* Size of the image */
- putmbi (wbmp->width, putout, out); /* width */
- putmbi (wbmp->height, putout, out); /* height */
-
-
- /* Image data */
- for (row = 0; row < wbmp->height; row++)
- {
- bitpos = 8;
- octet = 0;
- for (col = 0; col < wbmp->width; col++)
- {
- octet |= ((wbmp->bitmap[row * wbmp->width + col] == 1) ? WBMP_WHITE : WBMP_BLACK) << --bitpos;
- if (bitpos == 0)
- {
- bitpos = 8;
- putout (octet, out);
- octet = 0;
- }
- }
- if (bitpos != 8)
- putout (octet, out);
-
- }
- return (0);
-
-}
-
-
-/* freewbmp
- ** --------
- ** gdFrees up memory occupied by a WBMP structure
- **
- */
-void
-freewbmp (Wbmp * wbmp)
-{
- gdFree (wbmp->bitmap);
- gdFree (wbmp);
-}
-
-
-/* printwbmp
- ** ---------
- ** print a WBMP to stdout for visualisation
- **
- */
-void
-printwbmp (Wbmp * wbmp)
-{
- int row, col;
- for (row = 0; row < wbmp->height; row++)
- {
- for (col = 0; col < wbmp->width; col++)
- {
- if (wbmp->bitmap[wbmp->width * row + col] == WBMP_BLACK)
- {
- putchar ('#');
- }
- else
- {
- putchar (' ');
- }
- }
- putchar ('\n');
- }
-}
-
-#ifdef __TEST
-
-/* putout to file descriptor
- ** -------------------------
- */
-int
-putout (int c, void *out)
-{
- return (putc (c, (FILE *) out));
-}
-
-/* getin from file descriptor
- ** --------------------------
- */
-int
-getin (void *in)
-{
- return (getc ((FILE *) in));
-}
-
-
-/* Main function
- ** -------------
- **
- */
-int
-main (int argc, char *argv[])
-{
- FILE *wbmp_file;
- Wbmp *wbmp;
-
- wbmp_file = fopen (argv[1], "rb");
- if (wbmp_file)
- {
- readwbmp (&getin, wbmp_file, &wbmp);
-
-#ifdef __VIEW
-
-#ifdef __DEBUG
- printf ("\nVIEWING IMAGE\n");
-#endif
-
- printwbmp (wbmp);
-#endif
-
-#ifdef __WRITE
-
-#ifdef __DEBUG
- printf ("\nDUMPING WBMP to STDOUT\n");
-#endif
-
- writewbmp (wbmp, &putout, stdout);
-#endif
-
- freewbmp (wbmp);
- fclose (wbmp_file);
- }
-}
-#endif
diff --git a/ext/gd/libgd/wbmp.h b/ext/gd/libgd/wbmp.h
deleted file mode 100644
index 2f61b0a095..0000000000
--- a/ext/gd/libgd/wbmp.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* WBMP
-** ----
-** WBMP Level 0: B/W, Uncompressed
-** This implements the WBMP format as specified in WAPSpec 1.1 and 1.2.
-** It does not support ExtHeaders as defined in the spec. The spec states
-** that a WAP client does not need to implement ExtHeaders.
-**
-** (c) 2000 Johan Van den Brande <johan@vandenbrande.com>
-**
-** Header file
-*/
-#ifndef __WBMP_H
-#define __WBMP_H 1
-
-
-/* WBMP struct
-** -----------
-** A Wireless bitmap structure
-**
-*/
-
-typedef struct Wbmp_
-{
- int type; /* type of the wbmp */
- int width; /* width of the image */
- int height; /* height of the image */
- int *bitmap; /* pointer to data: 0 = WHITE , 1 = BLACK */
-} Wbmp;
-
-#define WBMP_WHITE 1
-#define WBMP_BLACK 0
-
-
-/* Proto's
-** -------
-**
-*/
-void putmbi( int i, void (*putout)(int c, void *out), void *out);
-int getmbi ( int (*getin)(void *in), void *in );
-int skipheader( int (*getin)(void *in), void *in );
-Wbmp *createwbmp( int width, int height, int color );
-int readwbmp( int (*getin)(void *in), void *in, Wbmp **wbmp );
-int writewbmp( Wbmp *wbmp, void (*putout)( int c, void *out), void *out);
-void freewbmp( Wbmp *wbmp );
-void printwbmp( Wbmp *wbmp );
-
-#endif
diff --git a/ext/gd/libgd/webpng.c b/ext/gd/libgd/webpng.c
deleted file mode 100644
index f3c35e306f..0000000000
--- a/ext/gd/libgd/webpng.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Bring in the gd library functions */
-#include "gd.h"
-
-/* Bring in standard I/O and string manipulation functions */
-#include <stdio.h>
-#include <stdlib.h> /* for atoi() */
-#include <string.h>
-
-#ifdef _WIN32
-#include <process.h>
-int
-getpid ()
-{
- return _getpid ();
-}
-#else
-#include <unistd.h> /* for getpid(), unlink() */
-#endif
-int
-main (int argc, char **argv)
-{
- FILE *in;
- FILE *out;
- char outFn[20];
- int useStdinStdout = 0;
-
- /* Declare our image pointer */
- gdImagePtr im = 0;
- int i;
- /* We'll clear 'no' once we know the user has made a
- reasonable request. */
- int no = 1;
- /* We'll set 'write' once we know the user's request
- requires that the image be written back to disk. */
- int write = 0;
- /* C programs always get at least one argument; we want at
- least one more (the image), more in practice. */
- if (argc < 2 || !strcmp (argv[1], "--help"))
- {
- no = 1;
- goto usage;
- }
-
- /* The last argument should be the image. Open the file. */
- if (strcmp ("-", argv[argc - 1]) == 0)
- { /* - is synonymous with STDIN */
- useStdinStdout = 1;
- in = stdin;
- }
- else
- {
- in = fopen (argv[argc - 1], "rb");
- }
- if (!in)
- {
- fprintf (stderr,
- "Error: can't open file %s.\n", argv[argc - 1]);
- exit (1);
- }
- /* Now load the image. */
- im = gdImageCreateFromPng (in);
- fclose (in);
- /* If the load failed, it must not be a PNG file. */
- if (!im)
- {
- fprintf (stderr,
- "Error: %s is not a valid PNG file.\n", argv[argc - 1]);
- exit (1);
- }
- /* Consider each argument in turn. */
- for (i = 1; (i < (argc - 1)); i++)
- {
- /* -i turns on and off interlacing. */
- if (!strcmp (argv[i], "--help"))
- {
- /* Every program should use this for help! :) */
- no = 1;
- goto usage;
- }
- else if (!strcmp (argv[i], "-i"))
- {
- if (i == (argc - 2))
- {
- fprintf (stderr,
- "Error: -i specified without y or n.\n");
- no = 1;
- goto usage;
- }
- if (!strcmp (argv[i + 1], "y"))
- {
- /* Set interlace. */
- gdImageInterlace (im, 1);
- }
- else if (!strcmp (argv[i + 1], "n"))
- {
- /* Clear interlace. */
- gdImageInterlace (im, 0);
- }
- else
- {
- fprintf (stderr,
- "Error: -i specified without y or n.\n");
- no = 1;
- goto usage;
- }
- i++;
- no = 0;
- write = 1;
- }
- else if (!strcmp (argv[i], "-t"))
- {
- /* Set transparent index (or none). */
- int index;
- if (i == (argc - 2))
- {
- fprintf (stderr,
- "Error: -t specified without a color table index.\n");
- no = 1;
- goto usage;
- }
- if (!strcmp (argv[i + 1], "none"))
- {
- /* -1 means not transparent. */
- gdImageColorTransparent (im, -1);
- }
- else
- {
- /* OK, get an integer and set the index. */
- index = atoi (argv[i + 1]);
- gdImageColorTransparent (im, index);
- }
- i++;
- write = 1;
- no = 0;
- }
- else if (!strcmp (argv[i], "-l"))
- {
- /* List the colors in the color table. */
- int j;
- if (!im->trueColor)
- {
- /* Tabs used below. */
- printf ("Index Red Green Blue Alpha\n");
- for (j = 0; (j < gdImageColorsTotal (im)); j++)
- {
- /* Use access macros to learn colors. */
- printf ("%d %d %d %d %d\n",
- j,
- gdImageRed (im, j),
- gdImageGreen (im, j),
- gdImageBlue (im, j),
- gdImageAlpha (im, j));
- }
- }
- else
- {
- printf ("Truecolor image, no palette entries to list.\n");
- }
- no = 0;
- }
- else if (!strcmp (argv[i], "-d"))
- {
- /* Output dimensions, etc. */
- int t;
- printf ("Width: %d Height: %d Colors: %d\n",
- gdImageSX (im), gdImageSY (im),
- gdImageColorsTotal (im));
- t = gdImageGetTransparent (im);
- if (t != (-1))
- {
- printf ("First 100%% transparent index: %d\n", t);
- }
- else
- {
- /* -1 means the image is not transparent. */
- printf ("First 100%% transparent index: none\n");
- }
- if (gdImageGetInterlaced (im))
- {
- printf ("Interlaced: yes\n");
- }
- else
- {
- printf ("Interlaced: no\n");
- }
- no = 0;
- }
- else if (!strcmp(argv[i], "-a"))
- {
- int maxx, maxy, x, y, alpha, pix, nalpha = 0;
-
- maxx = gdImageSX(im);
- maxy = gdImageSY(im);
-
- printf("alpha channel information:\n");
-
- if (im->trueColor) {
- for (y = 0; y < maxy; y++) {
- for (x = 0; x < maxx; x++) {
- pix = gdImageGetPixel(im, x, y);
- alpha = gdTrueColorGetAlpha(pix);
-
- if (alpha > gdAlphaOpaque) {
- /* Use access macros to learn colors. */
- printf ("%d %d %d %d\n",
- gdTrueColorGetRed(pix),
- gdTrueColorGetGreen(pix),
- gdTrueColorGetBlue(pix),
- alpha);
- nalpha++;
- }
-
- }
- }
- }
- else
- printf("NOT a true color image\n");
- no = 0;
- printf("%d alpha channels\n", nalpha);
-
- }
- else
- {
- fprintf (stderr, "Unknown argument: %s\n", argv[i]);
- break;
- }
- }
-usage:
- if (no)
- {
- /* If the command failed, output an explanation. */
- fprintf (stderr,
- "Usage: webpng [-i y|n ] [-l] [-t index|none ] [-d] pngname.png\n"
-
- " -i [y|n] Turns on/off interlace\n"
- " -l Prints the table of color indexes\n"
- " -t [index] Set the transparent color to the specified index (0-255 or \"none\")\n"
- " -d Reports the dimensions and other characteristics of the image.\n"
- " -a Prints all alpha channels that are not 100%% opaque.\n"
- "\n"
- "If you specify '-' as the input file, stdin/stdout will be used input/output.\n"
- );
- }
- if (write)
- {
- if (useStdinStdout)
- {
- out = stdout;
- }
- else
- {
- /* Open a temporary file. */
-
- /* "temp.tmp" is not good temporary filename. */
- sprintf (outFn, "webpng.tmp%d", getpid ());
- out = fopen (outFn, "wb");
-
- if (!out)
- {
- fprintf (stderr,
- "Unable to write to %s -- exiting\n", outFn);
- exit (1);
- }
- }
-
- /* Write the new PNG. */
- gdImagePng (im, out);
-
- if (!useStdinStdout)
- {
- fclose (out);
- /* Erase the old PNG. */
- unlink (argv[argc - 1]);
- /* Rename the new to the old. */
- if (rename (outFn, argv[argc - 1]) != 0)
- {
- perror ("rename");
- exit (1);
- }
- }
- }
- /* Delete the image from memory. */
- if (im)
- {
- gdImageDestroy (im);
- }
- /* All's well that ends well. */
- return 0;
-}
diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h
deleted file mode 100644
index ae84710d8d..0000000000
--- a/ext/gd/php_gd.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_GD_H
-#define PHP_GD_H
-
-#define HAVE_GDIMAGECREATEFROMPNG 1
-
-#if HAVE_LIBTTF|HAVE_LIBFREETYPE
-#define ENABLE_GD_TTF
-#endif
-
-#if HAVE_LIBGD
-
-#include <gd.h>
-
-#if HAVE_LIBT1
-#include "gdt1.h"
-#endif
-
-#define PHP_GDIMG_TYPE_GIF 1
-#define PHP_GDIMG_TYPE_PNG 2
-#define PHP_GDIMG_TYPE_JPG 3
-#define PHP_GDIMG_TYPE_WBM 4
-#define PHP_GDIMG_TYPE_XBM 5
-#define PHP_GDIMG_TYPE_XPM 6
-#define PHP_GDIMG_CONVERT_WBM 7
-#define PHP_GDIMG_TYPE_GD 8
-#define PHP_GDIMG_TYPE_GD2 9
-#define PHP_GDIMG_TYPE_GD2PART 10
-
-#ifdef PHP_WIN32
-#define PHP_GD_API __declspec(dllexport)
-#else
-#define PHP_GD_API
-#endif
-
-PHPAPI extern const char php_sig_gif[3];
-PHPAPI extern const char php_sig_jpg[3];
-PHPAPI extern const char php_sig_png[3];
-
-extern zend_module_entry gd_module_entry;
-#define phpext_gd_ptr &gd_module_entry
-
-/* gd.c functions */
-PHP_MINFO_FUNCTION(gd);
-PHP_MINIT_FUNCTION(gd);
-PHP_MSHUTDOWN_FUNCTION(gd);
-
-#ifndef HAVE_GDIMAGECOLORRESOLVE
-extern int gdImageColorResolve(gdImagePtr, int, int, int);
-#endif
-PHP_FUNCTION(imagearc);
-PHP_FUNCTION(imagechar);
-PHP_FUNCTION(imagecharup);
-PHP_FUNCTION(imagecolorallocate);
-PHP_FUNCTION(imagepalettecopy);
-PHP_FUNCTION(imagecolorat);
-PHP_FUNCTION(imagecolorclosest);
-PHP_FUNCTION(imagecolorclosesthwb);
-PHP_FUNCTION(imagecolordeallocate);
-PHP_FUNCTION(imagecolorresolve);
-PHP_FUNCTION(imagecolorexact);
-PHP_FUNCTION(imagecolorset);
-PHP_FUNCTION(imagecolorstotal);
-PHP_FUNCTION(imagecolorsforindex);
-PHP_FUNCTION(imagecolortransparent);
-PHP_FUNCTION(imagecopy);
-PHP_FUNCTION(imagecopymerge);
-PHP_FUNCTION(imagecopyresized);
-PHP_FUNCTION(imagetypes);
-PHP_FUNCTION(imagecreate);
-PHP_FUNCTION(imageftbbox);
-PHP_FUNCTION(imagefttext);
-
-PHP_FUNCTION(imagecreatetruecolor);
-PHP_FUNCTION(imagetruecolortopalette);
-PHP_FUNCTION(imagesetthickness);
-PHP_FUNCTION(imageellipse);
-PHP_FUNCTION(imagefilledellipse);
-PHP_FUNCTION(imagefilledarc);
-PHP_FUNCTION(imagealphablending);
-PHP_FUNCTION(imagecolorresolvealpha);
-PHP_FUNCTION(imagecolorclosestalpha);
-PHP_FUNCTION(imagecolorexactalpha);
-PHP_FUNCTION(imagecopyresampled);
-PHP_FUNCTION(imagesetthickness);
-PHP_FUNCTION(imagesettile);
-PHP_FUNCTION(imagecopymergegray);
-PHP_FUNCTION(imagesetbrush);
-PHP_FUNCTION(imagesettile);
-PHP_FUNCTION(imagesetstyle);
-
-PHP_FUNCTION(imagecreatefromstring);
-PHP_FUNCTION(imagecreatefromgif);
-PHP_FUNCTION(imagecreatefromjpeg);
-PHP_FUNCTION(imagecreatefromxbm);
-PHP_FUNCTION(imagecreatefromxpm);
-PHP_FUNCTION(imagecreatefrompng);
-PHP_FUNCTION(imagecreatefromwbmp);
-PHP_FUNCTION(imagecreatefromgd);
-PHP_FUNCTION(imagecreatefromgd2);
-PHP_FUNCTION(imagecreatefromgd2part);
-
-PHP_FUNCTION(imagegammacorrect);
-PHP_FUNCTION(imagedestroy);
-PHP_FUNCTION(imagefill);
-PHP_FUNCTION(imagefilledpolygon);
-PHP_FUNCTION(imagefilledrectangle);
-PHP_FUNCTION(imagefilltoborder);
-PHP_FUNCTION(imagefontwidth);
-PHP_FUNCTION(imagefontheight);
-
-PHP_FUNCTION(imagegif );
-PHP_FUNCTION(imagejpeg );
-PHP_FUNCTION(imagepng);
-PHP_FUNCTION(imagewbmp);
-PHP_FUNCTION(imagegd);
-PHP_FUNCTION(imagegd2);
-
-PHP_FUNCTION(imageinterlace);
-PHP_FUNCTION(imageline);
-PHP_FUNCTION(imageloadfont);
-PHP_FUNCTION(imagepolygon);
-PHP_FUNCTION(imagerectangle);
-PHP_FUNCTION(imagesetpixel);
-PHP_FUNCTION(imagestring);
-PHP_FUNCTION(imagestringup);
-PHP_FUNCTION(imagesx);
-PHP_FUNCTION(imagesy);
-PHP_FUNCTION(imagedashedline);
-PHP_FUNCTION(imagettfbbox);
-PHP_FUNCTION(imagettftext);
-PHP_FUNCTION(imagepsloadfont);
-/*
-PHP_FUNCTION(imagepscopyfont);
-*/
-PHP_FUNCTION(imagepsfreefont);
-PHP_FUNCTION(imagepsencodefont);
-PHP_FUNCTION(imagepsextendfont);
-PHP_FUNCTION(imagepsslantfont);
-PHP_FUNCTION(imagepstext);
-PHP_FUNCTION(imagepsbbox);
-
-PHP_FUNCTION(jpeg2wbmp);
-PHP_FUNCTION(png2wbmp);
-PHP_FUNCTION(image2wbmp);
-
-PHP_GD_API int phpi_get_le_gd(void);
-
-/* This is missing from gd.h */
-#if HAVE_COLORCLOSESTHWB
-int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b);
-#endif
-
-#else
-
-#define phpext_gd_ptr NULL
-
-#endif
-
-#endif /* PHP_GD_H */
diff --git a/ext/gettext/CREDITS b/ext/gettext/CREDITS
deleted file mode 100644
index acaebd7fae..0000000000
--- a/ext/gettext/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-GetText
-Alex Plotnick
diff --git a/ext/gettext/config.m4 b/ext/gettext/config.m4
deleted file mode 100644
index f4a6fc34e9..0000000000
--- a/ext/gettext/config.m4
+++ /dev/null
@@ -1,52 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(gettext,for GNU gettext support,
-[ --with-gettext[=DIR] Include GNU gettext support.])
-
-if test "$PHP_GETTEXT" != "no"; then
- for i in /usr /usr/local $PHP_GETTEXT; do
- if test -r $i/include/libintl.h; then
- GETTEXT_DIR=$i
- fi
- done
-
- if test -z "$GETTEXT_DIR"; then
- AC_MSG_ERROR(Cannot locate header file libintl.h)
- fi
-
- GETTEXT_LIBDIR=$GETTEXT_DIR/lib
- GETTEXT_INCDIR=$GETTEXT_DIR/include
-
- O_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -L$GETTEXT_LIBDIR"
- AC_CHECK_LIB(intl, bindtextdomain, [
- GETTEXT_LIBS=intl
- GETTEXT_CHECK_IN_LIB=intl
- ],
- AC_CHECK_LIB(c, bindtextdomain, [
- GETTEXT_LIBS=
- GETTEXT_CHECK_IN_LIB=c
- ],[
- AC_MSG_ERROR(Unable to find required gettext library)
- ])
- )
- LDFLAGS=$O_LDFLAGS
-
- AC_DEFINE(HAVE_LIBINTL,1,[ ])
- PHP_NEW_EXTENSION(gettext, gettext.c, $ext_shared)
- PHP_SUBST(GETTEXT_SHARED_LIBADD)
-
- if test -n "$GETTEXT_LIBS"; then
- PHP_ADD_LIBRARY_WITH_PATH($GETTEXT_LIBS, $GETTEXT_LIBDIR, GETTEXT_SHARED_LIBADD)
- fi
-
- PHP_ADD_INCLUDE($GETTEXT_INCDIR)
-
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, ngettext, [AC_DEFINE(HAVE_NGETTEXT, 1, [ ])])
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, dngettext, [AC_DEFINE(HAVE_DNGETTEXT, 1, [ ])])
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, dcngettext, [AC_DEFINE(HAVE_DCNGETTEXT, 1, [ ])])
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, bind_textdomain_codeset, [AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET, 1, [ ])])
-
-fi
diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c
deleted file mode 100644
index f36b2e48b0..0000000000
--- a/ext/gettext/gettext.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Alex Plotnick <alex@wgate.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_gettext.h"
-
-#if HAVE_LIBINTL
-
-#include <libintl.h>
-#include "ext/standard/info.h"
-
-/* {{{ php_gettext_functions[]
- */
-function_entry php_gettext_functions[] = {
- PHP_FE(textdomain, NULL)
- PHP_FE(gettext, NULL)
- PHP_FALIAS(_, gettext, NULL)
- PHP_FE(dgettext, NULL)
- PHP_FE(dcgettext, NULL)
- PHP_FE(bindtextdomain, NULL)
-#if HAVE_NGETTEXT
- PHP_FE(ngettext, NULL)
-#endif
-#if HAVE_DNGETTEXT
- PHP_FE(dngettext, NULL)
-#endif
-#if HAVE_DCNGETTEXT
- PHP_FE(dcngettext, NULL)
-#endif
-#if HAVE_BIND_TEXTDOMAIN_CODESET
- PHP_FE(bind_textdomain_codeset, NULL)
-#endif
-
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry php_gettext_module_entry = {
- STANDARD_MODULE_HEADER,
- "gettext",
- php_gettext_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(gettext),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_GETTEXT
-ZEND_GET_MODULE(php_gettext)
-#endif
-
-PHP_MINFO_FUNCTION(gettext)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "GetText Support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto string textdomain(string domain)
- Set the textdomain to "domain". Returns the current domain */
-PHP_FUNCTION(textdomain)
-{
- zval **domain;
- char *domain_name, *retval;
- char *val;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &domain) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain);
-
- val = Z_STRVAL_PP(domain);
- if (strcmp(val, "") && strcmp(val, "0")) {
- domain_name = val;
- } else {
- domain_name = NULL;
- }
-
- retval = textdomain(domain_name);
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto string gettext(string msgid)
- Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist */
-PHP_FUNCTION(gettext)
-{
- zval **msgid;
- char *msgstr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &msgid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(msgid);
-
- msgstr = gettext(Z_STRVAL_PP(msgid));
-
- RETURN_STRING(msgstr, 1);
-}
-/* }}} */
-
-/* {{{ proto string dgettext(string domain_name, string msgid)
- Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist */
-PHP_FUNCTION(dgettext)
-{
- zval **domain_name, **msgid;
- char *msgstr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &msgid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain_name);
- convert_to_string_ex(msgid);
-
- msgstr = dgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid));
-
- RETURN_STRING(msgstr, 1);
-}
-/* }}} */
-
-/* {{{ proto string dcgettext(string domain_name, string msgid, long category)
- Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist */
-PHP_FUNCTION(dcgettext)
-{
- zval **domain_name, **msgid, **category;
- char *msgstr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &domain_name, &msgid, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain_name);
- convert_to_string_ex(msgid);
- convert_to_long_ex(category);
-
- msgstr = dcgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid), Z_LVAL_PP(category));
-
- RETURN_STRING(msgstr, 1);
-}
-/* }}} */
-
-/* {{{ proto string bindtextdomain(string domain_name, string dir)
- Bind to the text domain domain_name, looking for translations in dir. Returns the current domain */
-PHP_FUNCTION(bindtextdomain)
-{
- zval **domain_name, **dir;
- char *retval, dir_name[MAXPATHLEN];
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &dir) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain_name);
- convert_to_string_ex(dir);
-
- if (strcmp(Z_STRVAL_PP(dir), "") && strcmp(Z_STRVAL_PP(dir), "0")) {
- VCWD_REALPATH(Z_STRVAL_PP(dir), dir_name);
- } else {
- VCWD_GETCWD(dir_name, MAXPATHLEN);
- }
-
- retval = bindtextdomain(Z_STRVAL_PP(domain_name), dir_name);
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-#if HAVE_NGETTEXT
-/* {{{ proto string ngettext(string MSGID1, string MSGID2, int N)
- Plural version of gettext() */
-PHP_FUNCTION(ngettext)
-{
- zval **msgid1, **msgid2, **count;
- char *msgstr;
-
- RETVAL_FALSE;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &msgid1, &msgid2, &count) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_string_ex(msgid1);
- convert_to_string_ex(msgid2);
- convert_to_long_ex(count);
-
- msgstr = ngettext(Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count));
- if (msgstr) {
- RETVAL_STRING (msgstr, 1);
- }
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_DNGETTEXT
-/* {{{ proto string dngettext (string domain, string msgid1, string msgid2, int count)
- Plural version of dgettext() */
-PHP_FUNCTION(dngettext)
-{
- zval **domain, **msgid1, **msgid2, **count;
-
- RETVAL_FALSE;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &domain, &msgid1, &msgid2, &count) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- char *msgstr;
-
- convert_to_string_ex(domain);
- convert_to_string_ex(msgid1);
- convert_to_string_ex(msgid2);
- convert_to_long_ex(count);
-
- msgstr = dngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count));
- if (msgstr) {
- RETVAL_STRING(msgstr, 1);
- }
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_DCNGETTEXT
-/* {{{ proto string dcngettext (string domain, string msgid1, string msgid2, int n, int category)
- Plural version of dcgettext() */
-PHP_FUNCTION(dcngettext)
-{
- zval **domain, **msgid1, **msgid2, **count, **category;
-
- RETVAL_FALSE;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(4, &domain, &msgid1, &msgid2, &count, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- char* msgstr = NULL;
-
- convert_to_string_ex(domain);
- convert_to_string_ex(msgid1);
- convert_to_string_ex(msgid2);
- convert_to_long_ex(count);
- convert_to_long_ex(category);
-
- msgstr = dcngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count), Z_LVAL_PP(category));
-
- if (msgstr) {
- RETVAL_STRING(msgstr, 1);
- }
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_BIND_TEXTDOMAIN_CODESET
-
-/* {{{ proto string bind_textdomain_codeset (string domain, string codeset)
- Specify the character encoding in which the messages from the DOMAIN message catalog will be returned. */
-PHP_FUNCTION(bind_textdomain_codeset)
-{
- zval **domain, **codeset;
- char *retval;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain, &codeset) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_string_ex(domain);
- convert_to_string_ex(codeset);
-
- retval = bind_textdomain_codeset(Z_STRVAL_PP(domain), Z_STRVAL_PP(codeset));
-
- RETURN_STRING(retval, 1);
- }
-}
-/* }}} */
-#endif
-
-
-#endif /* HAVE_LIBINTL */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
-
diff --git a/ext/gettext/gettext.dsp b/ext/gettext/gettext.dsp
deleted file mode 100644
index 8150a17d84..0000000000
--- a/ext/gettext/gettext.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="gettext" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=gettext - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gettext.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gettext.mak" CFG="gettext - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gettext - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gettext - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gettext - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "GETTEXT_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /D HAVE_LIBINTL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gettext.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php4ts.lib gnu_gettext.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gettext.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "gettext - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETTEXT_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"../../Debug_TS/php_gettext.dll" /libpath:"..\..\Debug_TS"
-# ADD LINK32 php4ts_debug.lib gnu_gettext.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../../Debug_TS/php_gettext.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "gettext - Win32 Release_TS"
-# Name "gettext - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\gettext.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_gettext.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/gettext/php_gettext.h b/ext/gettext/php_gettext.h
deleted file mode 100644
index bc4cfb93c4..0000000000
--- a/ext/gettext/php_gettext.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Alex Plotnick <alex@wgate.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_GETTEXT_H
-#define PHP_GETTEXT_H
-
-#if HAVE_LIBINTL
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-extern zend_module_entry php_gettext_module_entry;
-#define gettext_module_ptr &php_gettext_module_entry
-
-PHP_MINFO_FUNCTION(gettext);
-
-PHP_FUNCTION(textdomain);
-PHP_FUNCTION(gettext);
-PHP_FUNCTION(dgettext);
-PHP_FUNCTION(dcgettext);
-PHP_FUNCTION(bindtextdomain);
-#if HAVE_NGETTEXT
-PHP_FUNCTION(ngettext);
-#endif
-#if HAVE_DNGETTEXT
-PHP_FUNCTION(dngettext);
-#endif
-#if HAVE_DCNGETTEXT
-PHP_FUNCTION(dcngettext);
-#endif
-#if HAVE_BIND_TEXTDOMAIN_CODESET
-PHP_FUNCTION(bind_textdomain_codeset);
-#endif
-
-#else
-#define gettext_module_ptr NULL
-#endif /* HAVE_LIBINTL */
-
-#define phpext_gettext_ptr gettext_module_ptr
-
-#endif /* PHP_GETTEXT_H */
diff --git a/ext/gmp/CREDITS b/ext/gmp/CREDITS
deleted file mode 100644
index 7e0346dc24..0000000000
--- a/ext/gmp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-GNU GMP support
-Stanislav Malyshev
diff --git a/ext/gmp/README b/ext/gmp/README
deleted file mode 100644
index e142e2e031..0000000000
--- a/ext/gmp/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Arbitrary length number support with GNU MP library.
-Please see the PGP manual for more documentation.
-See also GNU MP home page at http://www.swox.com/gmp/.
-GNU MP library is available under the tems of GNU LGPL
-license. Please see http://www.swox.com/gmp/lgpl.html
diff --git a/ext/gmp/TODO b/ext/gmp/TODO
deleted file mode 100644
index 81098a9cc1..0000000000
--- a/ext/gmp/TODO
+++ /dev/null
@@ -1,22 +0,0 @@
-mpz_mul_2exp
-mpz_[ft]div_[qr]_2exp
-
-V 3:
-mpz_nextprime
-mpz_addmul
-mpz_root
-mpz_perfect_power_p
-mpz_lcm
-mpz_si_kronecker
-mpz_kronecker_si
-mpz_remove
-mpz_bin_ui
-mpz_fib_ui
-mpz_cmpabs
-mpz_xor
-mpz_tstbit
-mpz_urandom[bm]
-mpz_fits_slong_p
-mpz_mul_si
-mpz_odd_p
-mpz_even_p
diff --git a/ext/gmp/config.m4 b/ext/gmp/config.m4
deleted file mode 100644
index bbc524c540..0000000000
--- a/ext/gmp/config.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(gmp, for GNU MP support,
-[ --with-gmp Include GNU MP support])
-
-if test "$PHP_GMP" != "no"; then
-
- for i in /usr/local /usr $PHP_GMP; do
- if test -f $i/include/gmp.h; then
- GMP_DIR=$i
- fi
- done
-
- if test -z "$GMP_DIR"; then
- AC_MSG_ERROR(Unable to locate gmp.h)
- fi
- PHP_ADD_INCLUDE($GMP_DIR/include)
-
-
- PHP_NEW_EXTENSION(gmp, gmp.c, $ext_shared)
- AC_DEFINE(HAVE_GMP, 1, [ ])
- PHP_ADD_LIBRARY_WITH_PATH(gmp, $GMP_DIR/lib)
-fi
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
deleted file mode 100644
index 1a3c579f09..0000000000
--- a/ext/gmp/gmp.c
+++ /dev/null
@@ -1,1253 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stanislav Malyshev <stas@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_gmp.h"
-#include "ext/standard/info.h"
-
-#if HAVE_GMP
-
-#include <gmp.h>
-/* If you declare any globals in php_gmp.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(gmp)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_gmp;
-
-static unsigned char first_of_two_force_ref[] = { 2, BYREF_FORCE, BYREF_NONE };
-
-/* {{{ gmp_functions[]
- */
-function_entry gmp_functions[] = {
- ZEND_FE(gmp_init, NULL)
- ZEND_FE(gmp_intval, NULL)
- ZEND_FE(gmp_strval, NULL)
- ZEND_FE(gmp_add, NULL)
- ZEND_FE(gmp_sub, NULL)
- ZEND_FE(gmp_mul, NULL)
- ZEND_FE(gmp_div_qr, NULL)
- ZEND_FE(gmp_div_q, NULL)
- ZEND_FE(gmp_div_r, NULL)
- ZEND_FALIAS(gmp_div, gmp_div_q, NULL)
- ZEND_FE(gmp_mod, NULL)
- ZEND_FE(gmp_divexact, NULL)
- ZEND_FE(gmp_neg, NULL)
- ZEND_FE(gmp_abs, NULL)
- ZEND_FE(gmp_fact, NULL)
- ZEND_FE(gmp_sqrt, NULL)
- ZEND_FE(gmp_sqrtrem, NULL)
- ZEND_FE(gmp_pow, NULL)
- ZEND_FE(gmp_powm, NULL)
- ZEND_FE(gmp_perfect_square, NULL)
- ZEND_FE(gmp_prob_prime, NULL)
- ZEND_FE(gmp_gcd, NULL)
- ZEND_FE(gmp_gcdext, NULL)
- ZEND_FE(gmp_invert, NULL)
- ZEND_FE(gmp_jacobi, NULL)
- ZEND_FE(gmp_legendre, NULL)
- ZEND_FE(gmp_cmp, NULL)
- ZEND_FE(gmp_sign, NULL)
- ZEND_FE(gmp_random, NULL)
- ZEND_FE(gmp_and, NULL)
- ZEND_FE(gmp_or, NULL)
- ZEND_FE(gmp_com, NULL)
- ZEND_FE(gmp_xor, NULL)
- ZEND_FE(gmp_setbit, first_of_two_force_ref)
- ZEND_FE(gmp_clrbit, first_of_two_force_ref)
- ZEND_FE(gmp_scan0, NULL)
- ZEND_FE(gmp_scan1, NULL)
- ZEND_FE(gmp_popcount, NULL)
- ZEND_FE(gmp_hamdist, NULL)
- {NULL, NULL, NULL} /* Must be the last line in gmp_functions[] */
-};
-/* }}} */
-
-/* {{{ gmp_module_entry
- */
-zend_module_entry gmp_module_entry = {
- STANDARD_MODULE_HEADER,
- "gmp",
- gmp_functions,
- ZEND_MODULE_STARTUP_N(gmp),
- ZEND_MODULE_SHUTDOWN_N(gmp),
- NULL,
- NULL,
- ZEND_MODULE_INFO_N(gmp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_GMP
-ZEND_GET_MODULE(gmp)
-#endif
-
-static void _php_gmpnum_free(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-#define GMP_RESOURCE_NAME "GMP integer"
-
-#define GMP_ROUND_ZERO 0
-#define GMP_ROUND_PLUSINF 1
-#define GMP_ROUND_MINUSINF 2
-
-/* {{{ gmp_emalloc
- */
-static void *gmp_emalloc(size_t size)
-{
- return emalloc(size);
-}
-/* }}} */
-
-/* {{{ gmp_erealloc
- */
-static void *gmp_erealloc(void *ptr, size_t old_size, size_t new_size)
-{
- return erealloc(ptr, new_size);
-}
-/* }}} */
-
-/* {{{ gmp_efree
- */
-static void gmp_efree(void *ptr, size_t size)
-{
- efree(ptr);
-}
-/* }}} */
-
-/* {{{ ZEND_MINIT_FUNCTION
- */
-ZEND_MODULE_STARTUP_D(gmp)
-{
- le_gmp = zend_register_list_destructors_ex(_php_gmpnum_free, NULL, GMP_RESOURCE_NAME, module_number);
- REGISTER_LONG_CONSTANT("GMP_ROUND_ZERO", GMP_ROUND_ZERO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GMP_ROUND_PLUSINF", GMP_ROUND_PLUSINF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GMP_ROUND_MINUSINF", GMP_ROUND_MINUSINF, CONST_CS | CONST_PERSISTENT);
-
- mp_set_memory_functions(gmp_emalloc, gmp_erealloc, gmp_efree);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_MSHUTDOWN_FUNCTION
- */
-ZEND_MODULE_SHUTDOWN_D(gmp)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_MINFO_FUNCTION
- */
-ZEND_MODULE_INFO_D(gmp)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "gmp support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-/* Fetch zval to be GMP number.
- Initially, zval can be also number or string */
-#define FETCH_GMP_ZVAL(gmpnumber, zval) \
-if(Z_TYPE_PP(zval) == IS_RESOURCE) { \
- ZEND_FETCH_RESOURCE(gmpnumber, mpz_t *, zval, -1, GMP_RESOURCE_NAME, le_gmp);\
-} else {\
- if(convert_to_gmp(&gmpnumber, zval, 0) == FAILURE) {\
- RETURN_FALSE;\
- }\
- ZEND_REGISTER_RESOURCE(NULL, gmpnumber, le_gmp);\
-}
-
-/* create a new initialized GMP number */
-#define INIT_GMP_NUM(gmpnumber) { gmpnumber=emalloc(sizeof(mpz_t)); mpz_init(*gmpnumber); }
-#define FREE_GMP_NUM(gmpnumber) { mpz_clear(*gmpnumber); efree(gmpnumber); }
-
-/* {{{ convert_to_gmp
- * Convert zval to be gmp number */
-static int convert_to_gmp(mpz_t * *gmpnumber, zval **val, int base)
-{
- int ret = 0;
- int skip_lead = 0;
-
- *gmpnumber = emalloc(sizeof(mpz_t));
- switch(Z_TYPE_PP(val)) {
- case IS_LONG:
- case IS_BOOL:
- case IS_CONSTANT:
- {
- convert_to_long_ex(val);
- mpz_init_set_si(**gmpnumber, Z_LVAL_PP(val));
- }
- break;
- case IS_STRING:
- {
- char *numstr = Z_STRVAL_PP(val);
-
- if (Z_STRLEN_PP(val) > 2) {
- if (numstr[0] == '0') {
- if (numstr[1] == 'x' || numstr[1] == 'X') {
- base = 16;
- skip_lead = 1;
- } else if (base != 16 && (numstr[1] == 'b' || numstr[1] == 'B')) {
- base = 2;
- skip_lead = 1;
- }
- }
- }
- ret = mpz_init_set_str(**gmpnumber, (skip_lead ? &numstr[2] : numstr), base);
- }
- break;
- default:
- zend_error(E_WARNING,"Unable to convert variable to GMP - wrong type");
- efree(*gmpnumber);
- return FAILURE;
- }
-
- if (ret) {
- FREE_GMP_NUM(*gmpnumber);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ typedefs
- */
-typedef void (*gmp_unary_op_t)(mpz_ptr, mpz_srcptr);
-typedef int (*gmp_unary_opl_t)(mpz_srcptr);
-
-typedef void (*gmp_unary_ui_op_t)(mpz_ptr, unsigned long);
-
-typedef void (*gmp_binary_op_t)(mpz_ptr, mpz_srcptr, mpz_srcptr);
-typedef int (*gmp_binary_opl_t)(mpz_srcptr, mpz_srcptr);
-
-typedef unsigned long (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, unsigned long);
-typedef void (*gmp_binary_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-typedef unsigned long (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long);
-/* }}} */
-
-#define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0 TSRMLS_CC)
-#define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0 TSRMLS_CC)
-
-#define gmp_binary_ui_op(op, uop) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop)
-#define gmp_binary_op(op) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, NULL)
-#define gmp_binary_opl(op) _gmp_binary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-
-/* Unary operations */
-#define gmp_unary_op(op) _gmp_unary_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-#define gmp_unary_opl(op) _gmp_unary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-#define gmp_unary_ui_op(op) _gmp_unary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-
-/* {{{ gmp_zval_binary_ui_op_ex
- Execute GMP binary operation.
- May return GMP resource or long if operation allows this
-*/
-static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return TSRMLS_DC)
-{
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result;
- unsigned long long_result=0;
- int use_ui=0;
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- if(gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) {
- use_ui=1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
- }
-
- INIT_GMP_NUM(gmpnum_result);
- if(use_ui && gmp_ui_op) {
- if(allow_ui_return) {
- long_result = gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- } else {
- gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- }
- } else {
- gmp_op(*gmpnum_result, *gmpnum_a, *gmpnum_b);
- }
-
- if(use_ui && allow_ui_return) {
- FREE_GMP_NUM(gmpnum_result);
- RETURN_LONG((long)long_result);
- } else {
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
- }
-}
-/* }}} */
-
-/* {{{ gmp_zval_binary_ui_op2_ex
- Execute GMP binary operation which returns 2 values.
- May return GMP resources or longs if operation allows this.
-*/
-static inline void gmp_zval_binary_ui_op2_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op2_t gmp_op, gmp_binary_ui_op2_t gmp_ui_op, int allow_ui_return TSRMLS_DC)
-{
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result1, *gmpnum_result2;
- zval r;
- int use_ui=0;
- unsigned long long_result;
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- if(gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) {
- /* use _ui function */
- use_ui=1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
- }
-
- INIT_GMP_NUM(gmpnum_result1);
- INIT_GMP_NUM(gmpnum_result2);
-
- if(use_ui && gmp_ui_op) {
- if(allow_ui_return) {
- long_result = gmp_ui_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- } else {
- gmp_ui_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- }
- } else {
- gmp_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, *gmpnum_b);
- }
-
- array_init(return_value);
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result1, le_gmp);
- add_index_resource(return_value, 0, Z_LVAL(r));
- if(use_ui && allow_ui_return) {
- mpz_clear(*gmpnum_result2);
- add_index_long(return_value, 1, long_result);
- } else {
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result2, le_gmp);
- add_index_resource(return_value, 1, Z_LVAL(r));
- }
-}
-/* }}} */
-
-/* {{{ _gmp_binary_ui_op
- */
-static inline void _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAMETERS, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op) {
- zval **a_arg, **b_arg;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, gmp_op, gmp_ui_op);
-}
-/* }}} */
-
-/* Unary operations */
-
-/* {{{ gmp_zval_unary_op
- */
-static inline void gmp_zval_unary_op(zval *return_value, zval **a_arg, gmp_unary_op_t gmp_op TSRMLS_DC)
-{
- mpz_t *gmpnum_a, *gmpnum_result;
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- gmp_op(*gmpnum_result, *gmpnum_a);
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ gmp_zval_unary_ui_op
- */
-static inline void gmp_zval_unary_ui_op(zval *return_value, zval **a_arg, gmp_unary_ui_op_t gmp_op) {
- mpz_t *gmpnum_result;
-
- convert_to_long_ex(a_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- gmp_op(*gmpnum_result, Z_LVAL_PP(a_arg));
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ _gmp_unary_ui_op
- Execute GMP unary operation.
-*/
-static inline void _gmp_unary_ui_op(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_ui_op_t gmp_op) {
- zval **a_arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_unary_ui_op(return_value, a_arg, gmp_op);
-}
-/* }}} */
-
-/* {{{ _gmp_unary_op
- */
-static inline void _gmp_unary_op(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_op_t gmp_op) {
- zval **a_arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_unary_op(return_value, a_arg, gmp_op TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ _gmp_unary_opl
- */
-static inline void _gmp_unary_opl(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_opl_t gmp_op) {
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_LONG(gmp_op(*gmpnum_a));
-}
-/* }}} */
-
-/* {{{ _gmp_binary_opl
- */
-static inline void _gmp_binary_opl(INTERNAL_FUNCTION_PARAMETERS, gmp_binary_opl_t gmp_op) {
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, a_arg);
-
- RETURN_LONG(gmp_op(*gmpnum_a, *gmpnum_b));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_init(mixed number [, int base])
- Initializes GMP number */
-ZEND_FUNCTION(gmp_init)
-{
- zval **number_arg, **base_arg;
- mpz_t * gmpnumber;
- int argc;
- int base=0;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &number_arg, &base_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if (argc==2) {
- convert_to_long_ex(base_arg);
- base = Z_LVAL_PP(base_arg);
- if(base < 2 || base > 36) {
- zend_error(E_WARNING, "Bad base for conversion: %d (should be between 2 and 36)", base);
- RETURN_FALSE;
- }
- }
-
- if(convert_to_gmp(&gmpnumber, number_arg, base) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* Write your own code here to handle argument number. */
- ZEND_REGISTER_RESOURCE(return_value, gmpnumber, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto int gmp_intval(resource gmpnumber)
- Gets signed long value of GMP number */
-ZEND_FUNCTION(gmp_intval)
-{
- zval **gmpnumber_arg;
- mpz_t * gmpnum;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &gmpnumber_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if(Z_TYPE_PP(gmpnumber_arg) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE(gmpnum, mpz_t *, gmpnumber_arg, -1, GMP_RESOURCE_NAME, le_gmp);
- RETVAL_LONG(mpz_get_si(*gmpnum));
- } else {
- convert_to_long_ex(gmpnumber_arg);
- RETVAL_LONG(Z_LVAL_PP(gmpnumber_arg));
- }
-}
-/* }}} */
-
-/* {{{ proto string gmp_strval(resource gmpnumber [, int base])
- Gets string representation of GMP number */
-ZEND_FUNCTION(gmp_strval)
-{
- zval **gmpnumber_arg, **base_arg;
- int base=10, num_len, argc;
- mpz_t * gmpnum;
- char *out_string;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &gmpnumber_arg, &base_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum, gmpnumber_arg);
-
- switch (argc) {
- case 2:
- convert_to_long_ex(base_arg);
- base = Z_LVAL_PP(base_arg);
- break;
- case 1:
- base = 10;
- break;
- }
-
- if(base < 2 || base > 36) {
- zend_error(E_WARNING, "Bad base for conversion: %d", base);
- RETURN_FALSE;
- }
-
- num_len = mpz_sizeinbase(*gmpnum, base);
- out_string = emalloc(num_len+2);
- if(mpz_sgn(*gmpnum) < 0) {
- num_len++;
- }
- mpz_get_str(out_string, base, *gmpnum);
-
- /*
- From GMP documentation for mpz_sizeinbase():
- The returned value will be exact or 1 too big. If base is a power of
- 2, the returned value will always be exact.
-
- So let's check to see if we already have a \0 byte...
- */
-
- if (out_string[num_len-1] == '\0')
- num_len--;
- else
- out_string[num_len] = '\0';
-
- RETVAL_STRINGL(out_string, num_len, 0);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_add(resource a, resource b)
- Add a and b */
-ZEND_FUNCTION(gmp_add)
-{
- gmp_binary_ui_op(mpz_add, (gmp_binary_ui_op_t)mpz_add_ui);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_sub(resource a, resource b)
- Subtract b from a */
-ZEND_FUNCTION(gmp_sub)
-{
- gmp_binary_ui_op(mpz_sub, (gmp_binary_ui_op_t)mpz_sub_ui);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_mul(resource a, resource b)
- Multiply a and b */
-ZEND_FUNCTION(gmp_mul)
-{
- gmp_binary_ui_op(mpz_mul, (gmp_binary_ui_op_t)mpz_mul_ui);
-}
-/* }}} */
-
-/* {{{ proto array gmp_div_qr(resource a, resource b [, int round])
- Divide a by b, returns quotient and reminder */
-ZEND_FUNCTION(gmp_div_qr)
-{
- zval **a_arg, **b_arg, **round_arg;
- int round=GMP_ROUND_ZERO, argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 3:
- convert_to_long_ex(round_arg);
- round = Z_LVAL_PP(round_arg);
- break;
- case 2:
- round = GMP_ROUND_ZERO;
- break;
- }
-
- switch(round) {
- case GMP_ROUND_ZERO:
- gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_tdiv_qr, (gmp_binary_ui_op2_t)mpz_tdiv_qr_ui);
- break;
- case GMP_ROUND_PLUSINF:
- gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_cdiv_qr, (gmp_binary_ui_op2_t)mpz_cdiv_qr_ui);
- break;
- case GMP_ROUND_MINUSINF:
- gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_fdiv_qr, (gmp_binary_ui_op2_t)mpz_fdiv_qr_ui);
- break;
- }
-
-}
-/* }}} */
-
-/* {{{ proto resource gmp_div_r(resource a, resource b [, int round])
- Divide a by b, returns reminder only */
-ZEND_FUNCTION(gmp_div_r)
-{
- zval **a_arg, **b_arg, **round_arg;
- int round=GMP_ROUND_ZERO, argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 3:
- convert_to_long_ex(round_arg);
- round = Z_LVAL_PP(round_arg);
- break;
- case 2:
- round = GMP_ROUND_ZERO;
- break;
- }
-
- switch(round) {
- case GMP_ROUND_ZERO:
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1 TSRMLS_CC);
- break;
- case GMP_ROUND_PLUSINF:
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1 TSRMLS_CC);
- break;
- case GMP_ROUND_MINUSINF:
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1 TSRMLS_CC);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto resource gmp_div_q(resource a, resource b [, int round])
- Divide a by b, returns quotient only */
-ZEND_FUNCTION(gmp_div_q)
-{
- zval **a_arg, **b_arg, **round_arg;
- int round=GMP_ROUND_ZERO, argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 3:
- convert_to_long_ex(round_arg);
- round = Z_LVAL_PP(round_arg);
- break;
- case 2:
- round = GMP_ROUND_ZERO;
- break;
- }
-
- switch(round) {
- case GMP_ROUND_ZERO:
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui);
- break;
- case GMP_ROUND_PLUSINF:
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui);
- break;
- case GMP_ROUND_MINUSINF:
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui);
- break;
- }
-
-}
-/* }}} */
-
-/* {{{ proto resource gmp_mod(resource a, resource b)
- Computes a modulo b */
-ZEND_FUNCTION(gmp_mod)
-{
- zval **a_arg, **b_arg;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_divexact(resource a, resource b)
- Divide a by b using exact division algorithm */
-ZEND_FUNCTION(gmp_divexact)
-{
- gmp_binary_op(mpz_divexact);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_neg(resource a)
- Negates a number */
-ZEND_FUNCTION(gmp_neg)
-{
- gmp_unary_op(mpz_neg);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_abs(resource a)
- Calculates absolute value */
-ZEND_FUNCTION(gmp_abs)
-{
- gmp_unary_op(mpz_abs);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_fact(int a)
- Calculates factorial function */
-ZEND_FUNCTION(gmp_fact)
-{
- gmp_unary_ui_op(mpz_fac_ui);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_pow(resource base, int exp)
- Raise base to power exp */
-ZEND_FUNCTION(gmp_pow)
-{
- zval **base_arg, **exp_arg;
- mpz_t *gmpnum_result, *gmpnum_base;
- int use_ui=0;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &base_arg, &exp_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if(Z_TYPE_PP(base_arg) == IS_LONG && Z_LVAL_PP(base_arg) >= 0) {
- use_ui=1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_base, base_arg);
- }
-
- convert_to_long_ex(exp_arg);
-
- if(Z_LVAL_PP(exp_arg) < 0) {
- zend_error(E_WARNING,"Negative exponent not supported");
- RETURN_FALSE;
- }
-
- INIT_GMP_NUM(gmpnum_result);
- if(use_ui) {
- mpz_ui_pow_ui(*gmpnum_result, Z_LVAL_PP(base_arg), Z_LVAL_PP(exp_arg));
- } else {
- mpz_pow_ui(*gmpnum_result, *gmpnum_base, Z_LVAL_PP(exp_arg));
- }
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_powm(resource base, resource exp, resource mod)
- Raise base to power exp and take result modulo mod */
-ZEND_FUNCTION(gmp_powm)
-{
- zval **base_arg, **exp_arg, **mod_arg;
- mpz_t *gmpnum_base, *gmpnum_exp, *gmpnum_mod, *gmpnum_result;
- int use_ui=0;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &base_arg, &exp_arg, &mod_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_base, base_arg);
- if(Z_TYPE_PP(exp_arg) == IS_LONG && Z_LVAL_PP(exp_arg) >= 0) {
- use_ui=1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_exp, exp_arg);
- }
- FETCH_GMP_ZVAL(gmpnum_mod, mod_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- if(use_ui) {
- mpz_powm_ui(*gmpnum_result, *gmpnum_base, (unsigned long)Z_LVAL_PP(exp_arg), *gmpnum_mod);
- } else {
- mpz_powm(*gmpnum_result, *gmpnum_base, *gmpnum_exp, *gmpnum_mod);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-
-}
-/* }}} */
-
-/* {{{ proto resource gmp_sqrt(resource a)
- Takes integer part of square root of a */
-ZEND_FUNCTION(gmp_sqrt)
-{
- gmp_unary_op(mpz_sqrt);
-}
-/* }}} */
-
-/* {{{ proto array gmp_sqrtrem(resource a)
- Square root with remainder */
-ZEND_FUNCTION(gmp_sqrtrem)
-{
- zval **a_arg;
- mpz_t *gmpnum_a, *gmpnum_result1, *gmpnum_result2;
- zval r;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- INIT_GMP_NUM(gmpnum_result1);
- INIT_GMP_NUM(gmpnum_result2);
-
- mpz_sqrtrem(*gmpnum_result1, *gmpnum_result2, *gmpnum_a);
-
- array_init(return_value);
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result1, le_gmp);
- add_index_resource(return_value, 0, Z_LVAL(r));
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result2, le_gmp);
- add_index_resource(return_value, 1, Z_LVAL(r));
-}
-/* }}} */
-
-/* {{{ proto bool gmp_perfect_square(resource a)
- Checks if a is an exact square */
-ZEND_FUNCTION(gmp_perfect_square)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_BOOL((mpz_perfect_square_p(*gmpnum_a)!=0));
-}
-/* }}} */
-
-/* {{{ proto int gmp_prob_prime(resource a[, int reps])
- Checks if a is "probably prime" */
-ZEND_FUNCTION(gmp_prob_prime)
-{
- zval **gmpnumber_arg, **reps_arg;
- mpz_t *gmpnum_a;
- int argc, reps=10;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &gmpnumber_arg, &reps_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, gmpnumber_arg);
-
- switch (argc) {
- case 2:
- convert_to_long_ex(reps_arg);
- reps = Z_LVAL_PP(reps_arg);
- break;
- case 1:
- reps = 10;
- break;
- }
-
- RETURN_LONG(mpz_probab_prime_p(*gmpnum_a, reps));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_gcd(resource a, resource b)
- Computes greatest common denominator (gcd) of a and b */
-ZEND_FUNCTION(gmp_gcd)
-{
- zval **a_arg, **b_arg;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto array gmp_gcdext(resource a, resource b)
- Computes G, S, and T, such that AS + BT = G = `gcd' (A, B) */
-ZEND_FUNCTION(gmp_gcdext)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_t, *gmpnum_s, *gmpnum_g;
- zval r;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, a_arg);
-
- INIT_GMP_NUM(gmpnum_g);
- INIT_GMP_NUM(gmpnum_s);
- INIT_GMP_NUM(gmpnum_t);
-
- mpz_gcdext(*gmpnum_g, *gmpnum_s, *gmpnum_t, *gmpnum_a, *gmpnum_b);
-
- array_init(return_value);
-
- ZEND_REGISTER_RESOURCE(&r, gmpnum_g, le_gmp);
- add_assoc_resource(return_value, "g", Z_LVAL(r));
- ZEND_REGISTER_RESOURCE(&r, gmpnum_s, le_gmp);
- add_assoc_resource(return_value, "s", Z_LVAL(r));
- ZEND_REGISTER_RESOURCE(&r, gmpnum_t, le_gmp);
- add_assoc_resource(return_value, "t", Z_LVAL(r));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_invert(resource a, resource b)
- Computes the inverse of a modulo b */
-ZEND_FUNCTION(gmp_invert)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- if(mpz_invert(*gmpnum_result, *gmpnum_a, *gmpnum_b)) {
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
- } else {
- FREE_GMP_NUM(gmpnum_result);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int gmp_jacobi(resource a, resource b)
- Computes Jacobi symbol */
-ZEND_FUNCTION(gmp_jacobi)
-{
- gmp_binary_opl(mpz_jacobi);
-}
-/* }}} */
-
-/* {{{ proto int gmp_legendre(resource a, resource b)
- Computes Legendre symbol */
-ZEND_FUNCTION(gmp_legendre)
-{
- gmp_binary_opl(mpz_legendre);
-}
-/* }}} */
-
-/* {{{ proto int gmp_cmp(resource a, resource b)
- Compares two numbers */
-ZEND_FUNCTION(gmp_cmp)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b;
- int use_si=0, res;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- if(Z_TYPE_PP(b_arg) == IS_LONG) {
- use_si=1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
- }
-
- if(use_si) {
- res = mpz_cmp_si(*gmpnum_a, Z_LVAL_PP(b_arg));
- } else {
- res = mpz_cmp(*gmpnum_a, *gmpnum_b);
- }
-
- RETURN_LONG(res);
-}
-/* }}} */
-
-/* {{{ proto int gmp_sign(resource a)
- Gets the sign of the number */
-ZEND_FUNCTION(gmp_sign)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_LONG(mpz_sgn(*gmpnum_a));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_random([int limiter])
- Gets random number */
-ZEND_FUNCTION(gmp_random)
-{
- zval **limiter_arg;
- int limiter, argc;
- mpz_t *gmpnum_result;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc > 1 || zend_get_parameters_ex(1, &limiter_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if(argc) {
- convert_to_long_ex(limiter_arg);
- limiter = Z_LVAL_PP(limiter_arg);
- } else {
- limiter = 20;
- }
-
- INIT_GMP_NUM(gmpnum_result);
- mpz_random(*gmpnum_result, limiter);
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_and(resource a, resource b)
- Calculates logical AND of a and b */
-ZEND_FUNCTION(gmp_and)
-{
- gmp_binary_op(mpz_and);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_or(resource a, resource b)
- Calculates logical OR of a and b */
-ZEND_FUNCTION(gmp_or)
-{
- gmp_binary_op(mpz_ior);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_com(resource a)
- Calculates one's complement of a */
-ZEND_FUNCTION(gmp_com)
-{
- gmp_unary_op(mpz_com);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_xor(resource a, resource b)
- Calculates logical exclusive OR of a and b */
-ZEND_FUNCTION(gmp_xor)
-{
- /* use formula: a^b = (a|b)&^(a&b) */
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result, *gmpnum_t;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- INIT_GMP_NUM(gmpnum_t);
-
- mpz_and(*gmpnum_t, *gmpnum_a, *gmpnum_b);
- mpz_com(*gmpnum_t, *gmpnum_t);
-
- mpz_ior(*gmpnum_result, *gmpnum_a, *gmpnum_b);
- mpz_and(*gmpnum_result, *gmpnum_result, *gmpnum_t);
-
- FREE_GMP_NUM(gmpnum_t);
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto void gmp_setbit(resource &a, int index[, bool set_clear])
- Sets or clear bit in a */
-ZEND_FUNCTION(gmp_setbit)
-{
- zval **a_arg, **ind_arg, **set_c_arg;
- int argc, index, set=1;
- mpz_t *gmpnum_a;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &ind_arg, &set_c_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp);
-
- convert_to_long_ex(ind_arg);
- index = Z_LVAL_PP(ind_arg);
-
- switch (argc) {
- case 3:
- convert_to_long_ex(set_c_arg);
- set = Z_LVAL_PP(set_c_arg);
- break;
- case 2:
- set = 1;
- break;
- }
-
- if(set) {
- mpz_setbit(*gmpnum_a, index);
- } else {
- mpz_clrbit(*gmpnum_a, index);
- }
-}
-/* }}} */
-
-/* {{{ proto void gmp_clrbit(resource &a, int index)
- Clears bit in a */
-ZEND_FUNCTION(gmp_clrbit)
-{
- zval **a_arg, **ind_arg;
- int index;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &ind_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp);
-
- convert_to_long_ex(ind_arg);
- index = Z_LVAL_PP(ind_arg);
-
- mpz_clrbit(*gmpnum_a, index);
-}
-/* }}} */
-
-/* {{{ proto int gmp_popcount(resource a)
- Calculates the population count of a */
-ZEND_FUNCTION(gmp_popcount)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_LONG(mpz_popcount(*gmpnum_a));
-}
-/* }}} */
-
-/* {{{ proto int gmp_hamdist(resource a, resource b)
- Calculates hamming distance between a and b */
-ZEND_FUNCTION(gmp_hamdist)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(1, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- RETURN_LONG(mpz_hamdist(*gmpnum_a, *gmpnum_b));
-}
-/* }}} */
-
-/* {{{ proto int gmp_scan0(resource a, int start)
- Finds first zero bit */
-ZEND_FUNCTION(gmp_scan0)
-{
- zval **a_arg, **start_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &start_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- convert_to_long_ex(start_arg);
-
- RETURN_LONG(mpz_scan0(*gmpnum_a, Z_LVAL_PP(start_arg)));
-}
-/* }}} */
-
-/* {{{ proto int gmp_scan1(resource a, int start)
- Finds first non-zero bit */
-ZEND_FUNCTION(gmp_scan1)
-{
- zval **a_arg, **start_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &start_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- convert_to_long_ex(start_arg);
-
- RETURN_LONG(mpz_scan1(*gmpnum_a, Z_LVAL_PP(start_arg)));
-}
-/* }}} */
-
-/* {{{ _php_gmpnum_free
- */
-static void _php_gmpnum_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mpz_t *gmpnum = (mpz_t *)rsrc->ptr;
-
- FREE_GMP_NUM(gmpnum);
-}
-/* }}} */
-
-#endif /* HAVE_GMP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/gmp/php_gmp.h b/ext/gmp/php_gmp.h
deleted file mode 100644
index c992135c5c..0000000000
--- a/ext/gmp/php_gmp.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stanislav Malyshev <stas@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_GMP_H
-#define PHP_GMP_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_GMP
-
-extern zend_module_entry gmp_module_entry;
-#define phpext_gmp_ptr &gmp_module_entry
-
-#ifdef ZEND_WIN32
-#define GMP_API __declspec(dllexport)
-#else
-#define GMP_API
-#endif
-
-ZEND_MODULE_STARTUP_D(gmp);
-ZEND_MODULE_SHUTDOWN_D(gmp);
-ZEND_MODULE_INFO_D(gmp);
-
-ZEND_FUNCTION(gmp_init);
-ZEND_FUNCTION(gmp_intval);
-ZEND_FUNCTION(gmp_strval);
-ZEND_FUNCTION(gmp_add);
-ZEND_FUNCTION(gmp_sub);
-ZEND_FUNCTION(gmp_mul);
-ZEND_FUNCTION(gmp_div_qr);
-ZEND_FUNCTION(gmp_div_q);
-ZEND_FUNCTION(gmp_div_r);
-ZEND_FUNCTION(gmp_mod);
-ZEND_FUNCTION(gmp_divexact);
-ZEND_FUNCTION(gmp_neg);
-ZEND_FUNCTION(gmp_abs);
-ZEND_FUNCTION(gmp_fact);
-ZEND_FUNCTION(gmp_sqrt);
-ZEND_FUNCTION(gmp_pow);
-ZEND_FUNCTION(gmp_powm);
-ZEND_FUNCTION(gmp_sqrtrem);
-ZEND_FUNCTION(gmp_perfect_square);
-ZEND_FUNCTION(gmp_prob_prime);
-ZEND_FUNCTION(gmp_gcd);
-ZEND_FUNCTION(gmp_gcdext);
-ZEND_FUNCTION(gmp_invert);
-ZEND_FUNCTION(gmp_jacobi);
-ZEND_FUNCTION(gmp_legendre);
-ZEND_FUNCTION(gmp_cmp);
-ZEND_FUNCTION(gmp_sign);
-ZEND_FUNCTION(gmp_and);
-ZEND_FUNCTION(gmp_or);
-ZEND_FUNCTION(gmp_com);
-ZEND_FUNCTION(gmp_xor);
-ZEND_FUNCTION(gmp_random);
-ZEND_FUNCTION(gmp_setbit);
-ZEND_FUNCTION(gmp_clrbit);
-ZEND_FUNCTION(gmp_scan0);
-ZEND_FUNCTION(gmp_scan1);
-ZEND_FUNCTION(gmp_popcount);
-ZEND_FUNCTION(gmp_hamdist);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(gmp)
- int global_variable;
-ZEND_END_MODULE_GLOBALS(gmp)
-*/
-
-/* In every function that needs to use variables in php_gmp_globals,
- do call GMPLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as GMPG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define GMPG(v) TSRMG(gmp_globals_id, php_gmp_globals *, v)
-#else
-#define GMPG(v) (gmp_globals.v)
-#endif
-
-#else
-
-#define phpext_gmp_ptr NULL
-
-#endif
-
-#endif /* PHP_GMP_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/gmp/tests/001.phpt b/ext/gmp/tests/001.phpt
deleted file mode 100644
index a2f520d527..0000000000
--- a/ext/gmp/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for gmp presence
---SKIPIF--
-<?php if (!extension_loaded("gmp")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "gmp extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-gmp extension is available \ No newline at end of file
diff --git a/ext/gmp/tests/002.phpt b/ext/gmp/tests/002.phpt
deleted file mode 100644
index 4e33b6111d..0000000000
--- a/ext/gmp/tests/002.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-GMP functionality test - factorial
---SKIPIF--
-<?php if (!extension_loaded("gmp")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-function fact($x) {
- if($x <= 1)
- return 1;
- else
- return gmp_mul($x,fact($x-1));
-}
-
-print gmp_strval(fact(1000))."\n";
-?>
---EXPECT--
-402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/ext/gmp/tests/003.phpt b/ext/gmp/tests/003.phpt
deleted file mode 100644
index 0a302573ee..0000000000
--- a/ext/gmp/tests/003.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-Check for number base recognition
---SKIPIF--
-<?php if (!extension_loaded("gmp")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- /* Binary */
- $test[] = gmp_init("0b10011010010");
- $test[] = gmp_init("0b10011010010", 2);
- $test[] = gmp_init("10011010010");
- $test[] = gmp_init("10011010010", 2);
-
- /* Octal */
- $test[] = gmp_init("02322");
- $test[] = gmp_init("02322", 8);
- $test[] = gmp_init("2322");
- $test[] = gmp_init("2322", 8);
-
- /* Decimal */
- $test[] = gmp_init("1234");
- $test[] = gmp_init("1234", 10);
-
- /* Hexidecimal */
- $test[] = gmp_init("0x4d2");
- $test[] = gmp_init("0x4d2", 16);
- $test[] = gmp_init("4d2");
- $test[] = gmp_init("4d2", 16);
-
- for ($i = 0; $i < count($test); $i++) {
- printf("%s\n", gmp_strval($test[$i]));
- }
-?>
---EXPECT--
-1234
-1234
-10011010010
-1234
-1234
-1234
-2322
-1234
-1234
-1234
-1234
-1234
-0
-1234
diff --git a/ext/hwapi/CREDITS b/ext/hwapi/CREDITS
deleted file mode 100644
index 8416199c54..0000000000
--- a/ext/hwapi/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-HwAPI
-Uwe Steinmann
diff --git a/ext/hwapi/config.m4 b/ext/hwapi/config.m4
deleted file mode 100644
index 556c2d00df..0000000000
--- a/ext/hwapi/config.m4
+++ /dev/null
@@ -1,40 +0,0 @@
-dnl $Id$
-
-PHP_ARG_WITH(hwapi, for hwapi support,
-[ --with-hwapi[=DIR] Include official Hyperwave API support])
-
-if test "$PHP_HWAPI" != "no"; then
- if test -r $PHP_HWAPI/include/sdk/api/object.h; then
- HWAPI_DIR=$PHP_HWAPI
- else
- AC_MSG_CHECKING(for HWAPI in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/hwapi/sdk/api/object.h; then
- HWAPI_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$HWAPI_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please install the hwapi >= 1.0.0 distribution)
- fi
-
- PHP_ADD_INCLUDE($HWAPI_DIR/include/hwapi)
- PHP_SUBST(HWAPI_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(hwapi, $HWAPI_DIR/lib, HWAPI_SHARED_LIBADD)
- AC_DEFINE(HAVE_HWAPI,1,[ ])
-
- AC_MSG_RESULT(yes)
- PHP_REQUIRE_CXX
-dnl PHP_EXTENSION(hwapi, $ext_shared)
- PHP_NEW_EXTENSION(hwapi, hwapi.cpp)
- PHP_ADD_LIBRARY(hwapi)
- PHP_ADD_LIBRARY(pthread)
- PHP_ADD_LIBRARY(stdc++)
- PHP_ADD_INCLUDE($HWAPI_DIR/include)
-else
- AC_DEFINE(HAVE_HWAPI,0,[ ])
- AC_MSG_RESULT(no)
-fi
diff --git a/ext/hwapi/hwapi.cpp b/ext/hwapi/hwapi.cpp
deleted file mode 100644
index c250d575fd..0000000000
--- a/ext/hwapi/hwapi.cpp
+++ /dev/null
@@ -1,5028 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <errno.h>
-
-extern "C"
-{
-#include "php.h"
-#include "php_globals.h"
-//#include "ext/standard/php_standard.h"
-#include "ext/standard/head.h"
-#include "ext/standard/info.h"
-//#include "fopen-wrappers.h"
-#include "SAPI.h"
-}
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#include "build-defs.h"
-#endif
-#ifdef HAVE_MMAP
-#include <sys/mman.h>
-#endif
-
-#if HAVE_HWAPI
-
-static int le_hwapip;
-static int le_hwapi_objectp;
-static int le_hwapi_attributep;
-static int le_hwapi_errorp;
-static int le_hwapi_contentp;
-static int le_hwapi_reasonp;
-
-static zend_class_entry *hw_api_class_entry_ptr;
-static zend_class_entry *hw_api_object_class_entry_ptr;
-static zend_class_entry *hw_api_attribute_class_entry_ptr;
-static zend_class_entry *hw_api_error_class_entry_ptr;
-static zend_class_entry *hw_api_content_class_entry_ptr;
-static zend_class_entry *hw_api_reason_class_entry_ptr;
-
-#include "php_ini.h"
-#include "php_hwapi.h"
-
-//#ifdef __cplusplus
-//extern "C" {
-#include <sdk/api/api.h>
-#include <sdk/hgcsp/apihgcsp.h>
-//}
-//#endif
-
-function_entry hwapi_functions[] = {
- PHP_FE(hwapi_dummy, NULL)
- PHP_FE(hwapi_init, NULL)
- PHP_FE(hwapi_hgcsp, NULL)
- PHP_FE(hwapi_object, NULL)
- PHP_FE(hwapi_children, NULL)
- PHP_FE(hwapi_parents, NULL)
- PHP_FE(hwapi_find, NULL)
- PHP_FE(hwapi_identify, NULL)
- PHP_FE(hwapi_remove, NULL)
- PHP_FE(hwapi_content, NULL)
- PHP_FE(hwapi_copy, NULL)
- PHP_FE(hwapi_link, NULL)
- PHP_FE(hwapi_move, NULL)
- PHP_FE(hwapi_lock, NULL)
- PHP_FE(hwapi_unlock, NULL)
- PHP_FE(hwapi_replace, NULL)
- PHP_FE(hwapi_object_new, NULL)
- PHP_FE(hwapi_object_count, NULL)
- PHP_FE(hwapi_object_title, NULL)
- PHP_FE(hwapi_object_attreditable, NULL)
- PHP_FE(hwapi_object_assign, NULL)
- PHP_FE(hwapi_object_attribute, NULL)
- PHP_FE(hwapi_object_insert, NULL)
- PHP_FE(hwapi_object_remove, NULL)
- PHP_FE(hwapi_object_value, NULL)
- PHP_FE(hwapi_attribute_new, NULL)
- PHP_FE(hwapi_attribute_key, NULL)
- PHP_FE(hwapi_attribute_value, NULL)
- PHP_FE(hwapi_attribute_values, NULL)
- PHP_FE(hwapi_attribute_langdepvalue, NULL)
- PHP_FE(hwapi_content_new, NULL)
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_functions[] = {
- {"hgcsp", PHP_FN(hwapi_hgcsp), NULL},
- {"object", PHP_FN(hwapi_object), NULL},
- {"children", PHP_FN(hwapi_children), NULL},
- {"mychildren", PHP_FN(hwapi_mychildren), NULL},
- {"parents", PHP_FN(hwapi_parents), NULL},
- {"find", PHP_FN(hwapi_find), NULL},
- {"identify", PHP_FN(hwapi_identify), NULL},
- {"remove", PHP_FN(hwapi_remove), NULL},
- {"content", PHP_FN(hwapi_content), NULL},
- {"copy", PHP_FN(hwapi_copy), NULL},
- {"link", PHP_FN(hwapi_link), NULL},
- {"move", PHP_FN(hwapi_move), NULL},
- {"lock", PHP_FN(hwapi_lock), NULL},
- {"unlock", PHP_FN(hwapi_unlock), NULL},
- {"replace", PHP_FN(hwapi_replace), NULL},
- {"insert", PHP_FN(hwapi_insert), NULL},
- {"insertdocument", PHP_FN(hwapi_insertdocument), NULL},
- {"insertcollection", PHP_FN(hwapi_insertcollection), NULL},
- {"srcanchors", PHP_FN(hwapi_srcanchors), NULL},
- {"dstanchors", PHP_FN(hwapi_dstanchors), NULL},
- {"objectbyanchor", PHP_FN(hwapi_objectbyanchor), NULL},
- {"dstofsrcanchor", PHP_FN(hwapi_dstofsrcanchor), NULL},
- {"srcsofdst", PHP_FN(hwapi_srcsofdst), NULL},
- {"checkin", PHP_FN(hwapi_checkin), NULL},
- {"checkout", PHP_FN(hwapi_checkout), NULL},
- {"setcommittedversion", PHP_FN(hwapi_setcommittedversion), NULL},
- {"revert", PHP_FN(hwapi_revert), NULL},
- {"history", PHP_FN(hwapi_history), NULL},
- {"removeversion", PHP_FN(hwapi_removeversion), NULL},
- {"freeversion", PHP_FN(hwapi_freeversion), NULL},
- {"configurationhistory", PHP_FN(hwapi_configurationhistory), NULL},
- {"saveconfiguration", PHP_FN(hwapi_saveconfiguration), NULL},
- {"restoreconfiguration", PHP_FN(hwapi_restoreconfiguration), NULL},
- {"removeconfiguration", PHP_FN(hwapi_removeconfiguration), NULL},
- {"mergeconfiguration", PHP_FN(hwapi_mergeconfiguration), NULL},
- {"user", PHP_FN(hwapi_user), NULL},
- {"userlist", PHP_FN(hwapi_userlist), NULL},
- {"hwstat", PHP_FN(hwapi_hwstat), NULL},
- {"dcstat", PHP_FN(hwapi_dcstat), NULL},
- {"dbstat", PHP_FN(hwapi_dbstat), NULL},
- {"ftstat", PHP_FN(hwapi_ftstat), NULL},
- {"info", PHP_FN(hwapi_info), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_object_functions[] = {
- {"hw_api_object", PHP_FN(hwapi_object_new), NULL},
- {"count", PHP_FN(hwapi_object_count), NULL},
- {"title", PHP_FN(hwapi_object_title), NULL},
- {"attributeeditable", PHP_FN(hwapi_object_attreditable), NULL},
- {"assign", PHP_FN(hwapi_object_assign), NULL},
- {"attribute", PHP_FN(hwapi_object_attribute), NULL},
- {"insert", PHP_FN(hwapi_object_insert), NULL},
- {"remove", PHP_FN(hwapi_object_remove), NULL},
- {"value", PHP_FN(hwapi_object_value), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_attribute_functions[] = {
- {"hw_api_attribute", PHP_FN(hwapi_attribute_new), NULL},
- {"key", PHP_FN(hwapi_attribute_key), NULL},
- {"value", PHP_FN(hwapi_attribute_value), NULL},
- {"values", PHP_FN(hwapi_attribute_values), NULL},
- {"langdepvalue", PHP_FN(hwapi_attribute_langdepvalue), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_error_functions[] = {
- {"count", PHP_FN(hwapi_error_count), NULL},
- {"reason", PHP_FN(hwapi_error_reason), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_content_functions[] = {
- {"hw_api_content", PHP_FN(hwapi_content_new), NULL},
- {"read", PHP_FN(hwapi_content_read), NULL},
- {"mimetype", PHP_FN(hwapi_content_mimetype), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_reason_functions[] = {
- {"type", PHP_FN(hwapi_reason_type), NULL},
- {"description", PHP_FN(hwapi_reason_description), NULL},
- {NULL, NULL, NULL}
-};
-
-void hw_api_class_startup();
-void hw_api_object_class_startup();
-void hw_api_attribute_class_startup();
-void hw_api_error_class_startup();
-void hw_api_content_class_startup();
-void hw_api_reason_class_startup();
-static zval *php_hwapi_object_new(void *obj, int rsrc_type);
-
-zend_module_entry hwapi_module_entry = {
- STANDARD_MODULE_HEADER,
- "hwapi",
- hwapi_functions,
- PHP_MINIT(hwapi),
- PHP_MSHUTDOWN(hwapi),
- PHP_RINIT(hwapi),
- NULL,
- PHP_MINFO(hwapi),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef ZTS
-int hwapi_globals_id;
-#else
-PHP_HWAPI_API zend_hwapi_globals hwapi_globals;
-#endif
-
-#ifdef COMPILE_DL_HWAPI
-ZEND_GET_MODULE(hwapi)
-#endif
-
-static void print_reason(const HW_API_Reason& reason) {
- HW_API_String str_type;
- switch(reason.type()) {
- case HW_API_Reason::HW_API_ERROR:
- str_type = "Error";
- break;
- case HW_API_Reason::HW_API_WARNING:
- str_type = "Warning";
- break;
- case HW_API_Reason::HW_API_MESSAGE:
- str_type = "Message";
- break;
- }
- fprintf(stderr, "%s: %s\n", str_type.string(), reason.description("en").string());
-}
-
-static void print_error(const HW_API_Error& error) {
- for (int i=0; i < error.count(); i++) {
- HW_API_Reason reason;
- error.reason(i, reason);
- print_reason(reason);
- }
-}
-
-static void print_object(const HW_API_Object& object) {
- fprintf(stderr, "%s\n", object.title("en").string());
- for (int i=0; i < object.count(); i++) {
- HW_API_Attribute attrib;
- object.attribute(i, attrib);
- fprintf(stderr, "%s=%s\n", attrib.key().string(), attrib.value().string());
- }
-}
-
-static void php_hwapi_init_globals(zend_hwapi_globals *hwapi_globals) {
-}
-
-static void php_free_hwapi(zend_rsrc_list_entry *rsrc) {
- HW_API *obj;
-
- obj = (HW_API *) (rsrc->ptr);
- delete obj;
-}
-
-static void php_free_hwapi_object(zend_rsrc_list_entry *rsrc) {
- HW_API_Object *obj;
-
- obj = (HW_API_Object *) (rsrc->ptr);
- delete obj;
-}
-
-static void php_free_hwapi_attribute(zend_rsrc_list_entry *rsrc) {
- HW_API_Attribute *obj;
-
- obj = (HW_API_Attribute *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void php_free_hwapi_error(zend_rsrc_list_entry *rsrc) {
- HW_API_Error *obj;
-
- obj = (HW_API_Error *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void php_free_hwapi_content(zend_rsrc_list_entry *rsrc) {
- HW_API_Content *obj;
-
- obj = (HW_API_Content *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void php_free_hwapi_reason(zend_rsrc_list_entry *rsrc) {
- HW_API_Reason *obj;
-
- obj = (HW_API_Reason *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void print_hwapi_stringarray(const HW_API_StringArray& strings) {
- for(int i=0; i<strings.count(); i++) {
- HW_API_String str;
- strings.string(i, str);
- fprintf(stderr, "%s\n", str.string());
- }
-}
-
-static int stringArray2indexArray(pval **return_value, HW_API_StringArray *values) {
- if (array_init(*return_value) == FAILURE) {
- return 0;
- }
- for (int i=0; i<values->count(); i++) {
- HW_API_String str;
- values->string(i, str);
- str.string();
- add_next_index_string(*return_value, (char *) str.string(), 1);
- }
- return 1;
-}
-
-static int objectArray2indexArray(pval **return_value, HW_API_ObjectArray *objarr) {
- if (array_init(*return_value) == FAILURE) {
- return 0;
- }
-
- for(int i=0; i<objarr->count(); i++) {
- zval *child;
- HW_API_Object obj, *objp;
- objarr->object(i, obj);
- objp = new HW_API_Object(obj);
- child = php_hwapi_object_new(objp, le_hwapi_objectp);
- add_next_index_zval(*return_value, child);
- }
- return 1;
-}
-
-static void *php_hwapi_get_object(zval *wrapper, int rsrc_type1) {
- void *obj;
- zval **handle;
- int type;
-
- if (Z_TYPE_P(wrapper) != IS_OBJECT) {
- php_error(E_ERROR, "Wrapper is not an object");
- }
- if (zend_hash_find(Z_OBJPROP_P(wrapper), "this", sizeof("this"), (void **)&handle) == FAILURE) {
- php_error(E_ERROR, "Underlying object missing");
- }
-
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- if (!obj || (type != rsrc_type1)) {
- php_error(E_ERROR, "Underlying object missing or of invalid type");
- }
- return obj;
-}
-
-static zval *php_hwapi_object_new(void *obj, int rsrc_type) {
- zval *wrapper, *handle;
- int ret;
-
- MAKE_STD_ZVAL(wrapper);
- if (!obj) {
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- /* construct an object with some methods */
- if(rsrc_type == le_hwapi_attributep)
- object_init_ex(wrapper, hw_api_attribute_class_entry_ptr);
- else if(rsrc_type == le_hwapi_objectp)
- object_init_ex(wrapper, hw_api_object_class_entry_ptr);
- else if(rsrc_type == le_hwapip)
- object_init_ex(wrapper, hw_api_class_entry_ptr);
- else if(rsrc_type == le_hwapi_errorp)
- object_init_ex(wrapper, hw_api_error_class_entry_ptr);
- else if(rsrc_type == le_hwapi_contentp)
- object_init_ex(wrapper, hw_api_content_class_entry_ptr);
- else if(rsrc_type == le_hwapi_reasonp)
- object_init_ex(wrapper, hw_api_reason_class_entry_ptr);
-
- MAKE_STD_ZVAL(handle);
- ZEND_REGISTER_RESOURCE(handle, obj, rsrc_type);
- zend_hash_update(Z_OBJPROP_P(wrapper), "this", sizeof("this"), &handle, sizeof(zval *), NULL);
- return(wrapper);
-}
-
-static HW_API_StringArray *make_HW_API_StringArray(HashTable *lht) {
- int count, j;
- HW_API_StringArray *sarr;
-
- sarr = new HW_API_StringArray();
-
- count = zend_hash_num_elements(lht);
- zend_hash_internal_pointer_reset(lht);
- for(j=0; j<count; j++) {
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- switch((*keydata)->type) {
- case IS_STRING:
- sarr->insert((HW_API_String) (*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return sarr;
-}
-
-static HW_API_object_In *make_HW_API_object_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_object_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_object_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_children_In *make_HW_API_children_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_children_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_children_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_parents_In *make_HW_API_parents_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_parents_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_parents_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_find_In *make_HW_API_find_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_find_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_find_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "keyQuery"))
- in->setKeyQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "fullTextQuery"))
- in->setFullTextQuery((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "startIndex"))
- in->setStartIndex((*keydata)->value.lval);
- else if(!strcmp(key, "numberOfObjectsToGet"))
- in->setNumberOfObjectsToGet((*keydata)->value.lval);
- else if(!strcmp(key, "exactMatchLimit"))
- in->setExactMatchLimit((*keydata)->value.lval);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- } else if(!strcmp(key, "languages")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setLanguages(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- } else if(!strcmp(key, "scope")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setScope(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
-
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_identify_In *make_HW_API_identify_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_identify_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_identify_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "username"))
- in->setUsername((*keydata)->value.str.val);
- else if(!strcmp(key, "password"))
- in->setPassword((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_remove_In *make_HW_API_remove_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_remove_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_remove_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "parentIdentifier"))
- in->setParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_content_In *make_HW_API_content_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_content_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_content_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_copy_In *make_HW_API_copy_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_copy_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_copy_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "destinationParentIdentifier"))
- in->setDestinationParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_link_In *make_HW_API_link_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_link_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_link_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "destinationParentIdentifier"))
- in->setDestinationParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_move_In *make_HW_API_move_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_move_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_move_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "destinationParentIdentifier"))
- in->setDestinationParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "sourceParentIdentifier"))
- in->setSourceParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_lock_In *make_HW_API_lock_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_lock_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_lock_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_unlock_In *make_HW_API_unlock_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_unlock_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_unlock_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_replace_In *make_HW_API_replace_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_replace_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_replace_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_OBJECT:
- if(!strcmp(key, "object")) {
- if(!((*keydata)->value.obj.ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!((*keydata)->value.obj.ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- } else if(!strcmp(key, "content")) {
- if(!((*keydata)->value.obj.ce->name, "hw_api_content")) {
- HW_API_Content *obj;
- obj = (HW_API_Content *) php_hwapi_get_object(*keydata, le_hwapi_contentp);
- in->setContent(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insert_In *make_HW_API_insert_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insert_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insert_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_OBJECT:
- if(!strcmp(key, "object")) {
- if(!strcmp((*keydata)->value.obj.ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!strcmp((*keydata)->value.obj.ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- } else if(!strcmp(key, "content")) {
- if(!strcmp((*keydata)->value.obj.ce->name, "hw_api_content")) {
- HW_API_Content *obj;
- obj = (HW_API_Content *) php_hwapi_get_object(*keydata, le_hwapi_contentp);
- in->setContent(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insertDocument_In *make_HW_API_insertDocument_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insertDocument_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insertDocument_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_OBJECT:
- if(!strcmp(key, "object")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- } else if(!strcmp(key, "content")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Content")) {
- HW_API_Content *obj;
- obj = (HW_API_Content *) php_hwapi_get_object(*keydata, le_hwapi_contentp);
- in->setContent(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- case IS_STRING:
- if(!strcmp(key, "parentIdentifier"))
- in->setParentIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insertCollection_In *make_HW_API_insertCollection_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insertCollection_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insertCollection_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "parentIdentifier"))
- in->setParentIdentifier((*keydata)->value.str.val);
- break;
- case IS_OBJECT:
- if(!strcmp(key, "object")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insertAnchor_In *make_HW_API_insertAnchor_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insertAnchor_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insertAnchor_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "documentIdentifier"))
- in->setDocumentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "destinationIdentifier"))
- in->setDestinationIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "hint"))
- in->setHint((*keydata)->value.str.val);
- break;
- case IS_OBJECT:
- if(!strcmp(key, "object")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!((*keydata)->value.obj.ce->name, "HW_API_Object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_srcAnchors_In *make_HW_API_srcAnchors_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_srcAnchors_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_srcAnchors_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dstAnchors_In *make_HW_API_dstAnchors_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dstAnchors_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dstAnchors_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dstOfSrcAnchor_In *make_HW_API_dstOfSrcAnchor_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dstOfSrcAnchor_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dstOfSrcAnchor_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_objectByAnchor_In *make_HW_API_objectByAnchor_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_objectByAnchor_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_objectByAnchor_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_srcsOfDst_In *make_HW_API_srcsOfDst_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_srcsOfDst_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_srcsOfDst_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_checkIn_In *make_HW_API_checkIn_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_checkIn_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_checkIn_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- else if(!strcmp(key, "comment"))
- in->setComment((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_checkOut_In *make_HW_API_checkOut_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_checkOut_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_checkOut_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_setCommittedVersion_In *make_HW_API_setCommittedVersion_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_setCommittedVersion_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_setCommittedVersion_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_revert_In *make_HW_API_revert_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_revert_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_revert_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_history_In *make_HW_API_history(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_history_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_history_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
-/* else if(!strcmp(key, "objectQuery"))
- in->objectQuery((*keydata)->value.str.val);*/
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_removeVersion_In *make_HW_API_removeVersion_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_removeVersion_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_removeVersion_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_freeVersion_In *make_HW_API_freeVersion_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_freeVersion_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_freeVersion_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_configurationHistory_In *make_HW_API_configurationHistory_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_configurationHistory_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_configurationHistory_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_saveConfiguration_In *make_HW_API_saveConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_saveConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_saveConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- else if(!strcmp(key, "comment"))
- in->setComment((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_restoreConfiguration_In *make_HW_API_restoreConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_restoreConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_restoreConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_removeConfiguration_In *make_HW_API_removeConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_removeConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_removeConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_mergeConfiguration_In *make_HW_API_mergeConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_mergeConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_mergeConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_user_In *make_HW_API_user_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_user_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_user_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_userlist_In *make_HW_API_userlist_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_userlist_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_userlist_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_hwStat_In *make_HW_API_hwStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_hwStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_hwStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dcStat_In *make_HW_API_dcStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dcStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dcStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dbStat_In *make_HW_API_dbStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dbStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dbStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_ftStat_In *make_HW_API_ftStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_ftStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_ftStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_info_In *make_HW_API_info_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_info_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_info_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-PHP_INI_BEGIN()
-// STD_PHP_INI_ENTRY("hwapi.allow_persistent", "0", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_hwapi_globals, hwapi_globals)
-PHP_INI_END()
-
-PHP_MINIT_FUNCTION(hwapi) {
- ZEND_INIT_MODULE_GLOBALS(hwapi, php_hwapi_init_globals, NULL);
-
- le_hwapip = zend_register_list_destructors_ex(php_free_hwapi, NULL, "hw_api", module_number);
- le_hwapi_attributep = zend_register_list_destructors_ex(php_free_hwapi_attribute, NULL, "hw_api_attribute", module_number);
- le_hwapi_objectp = zend_register_list_destructors_ex(php_free_hwapi_object, NULL, "hw_api_object", module_number);
- le_hwapi_errorp = zend_register_list_destructors_ex(php_free_hwapi_error, NULL, "hw_api_error", module_number);
- le_hwapi_contentp = zend_register_list_destructors_ex(php_free_hwapi_content, NULL, "hw_api_content", module_number);
- le_hwapi_reasonp = zend_register_list_destructors_ex(php_free_hwapi_reason, NULL, "hw_api_reason", module_number);
- hw_api_class_startup();
- hw_api_object_class_startup();
- hw_api_attribute_class_startup();
- hw_api_error_class_startup();
- hw_api_content_class_startup();
- hw_api_reason_class_startup();
-
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_NORMAL", HW_API_remove_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_PHYSICAL", HW_API_remove_In::PHYSICAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_REMOVELINKS", HW_API_remove_In::REMOVELINKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_NONRECURSIVE", HW_API_remove_In::NONRECURSIVE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_NORMAL", HW_API_replace_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_FORCE_VERSION_CONTROL", HW_API_replace_In::FORCE_VERSION_CONTROL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_AUTOMATIC_CHECKOUT", HW_API_replace_In::AUTOMATIC_CHECKOUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_AUTOMATIC_CHECKIN", HW_API_replace_In::AUTOMATIC_CHECKIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_PLAIN", HW_API_replace_In::PLAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_REVERT_IF_NOT_CHANGED", HW_API_replace_In::REVERT_IF_NOT_CHANGED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_KEEP_TIME_MODIFIED", HW_API_replace_In::KEEP_TIME_MODIFIED, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_INSERT_NORMAL", HW_API_insert_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_FORCE_VERSION_CONTROL", HW_API_insert_In::FORCE_VERSION_CONTROL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_AUTOMATIC_CHECKOUT", HW_API_insert_In::AUTOMATIC_CHECKOUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_PLAIN", HW_API_insert_In::PLAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_KEEP_TIME_MODIFIED", HW_API_insert_In::KEEP_TIME_MODIFIED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_DELAY_INDEXING", HW_API_insert_In::DELAY_INDEXING, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_LOCK_NORMAL", HW_API_lock_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_LOCK_RECURSIVE", HW_API_lock_In::RECURSIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_LOCK_SESSION", HW_API_lock_In::SESSION, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_CONTENT_ALLLINKS", HW_API_content_In::ALLLINKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_CONTENT_REACHABLELINKS", HW_API_content_In::REACHABLELINKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_CONTENT_PLAIN", HW_API_content_In::PLAIN, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_REASON_ERROR", HW_API_Reason::HW_API_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REASON_WARNING", HW_API_Reason::HW_API_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REASON_MESSAGE", HW_API_Reason::HW_API_MESSAGE, CONST_CS | CONST_PERSISTENT);
-
- /* Make sure there are at least default values, though the MessageFilePath
- * is bogus. If it isn't set at all the web server dies.
- */
- HW_API_init_In initargs;
- initargs.setArgv0("PHP HWAPI");
- initargs.setMessageFilePath("");
- HW_API::init(initargs);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(hwapi) {
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(hwapi) {
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(hwapi) {
- php_info_print_table_start();
- php_info_print_table_row(2, "Hyperwave API Support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto string hwapi_dummy(int link, int id, int msgid)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_dummy) {
- pval **arg1, **arg2, **arg3;
- int link, id, type, msgid;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void hwapi_init(string hostname, int port)
- Hyperwave initialisation */
-PHP_FUNCTION(hwapi_init) {
- zval **argv[2], *id;
- HW_API_init_In initargs;
- HW_API_init_Out out;
- int ret;
- HW_API_HGCSP *db;
- zval *rv;
- int argc = ZEND_NUM_ARGS();
-
- if (((argc < 1) || (argc > 2)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- id = getThis();
-
- convert_to_string_ex(argv[0]);
- initargs.setArgv0("PHP HWAPI");
- initargs.setMessageFilePath(Z_STRVAL_PP(argv[0]));
- if(argc == 2) {
- convert_to_string_ex(argv[1]);
- initargs.setWhatString(Z_STRVAL_PP(argv[1])) ;
- }
- if(id) {
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
- if(!db) {
- RETURN_FALSE;
- }
- out = db->init(initargs);
- } else {
- out = HW_API::init(initargs);
- }
-
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_hgcsp(string hostname, int port)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_hgcsp) {
- zval **argv[2];
- HW_API_HGCSP *db;
- zval *rv;
- int argc = ZEND_NUM_ARGS();
-
- if (((argc < 1) || (argc > 2)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(argv[0]);
- if(argc == 2) {
- convert_to_long_ex(argv[1]);
- db = new HW_API_HGCSP(Z_STRVAL_PP(argv[0]), Z_LVAL_PP(argv[1]));
- } else {
- db = new HW_API_HGCSP(Z_STRVAL_PP(argv[0]));
- }
-
- rv = php_hwapi_object_new((HW_API_HGCSP *) db, le_hwapip);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
-// ret = zend_list_insert(db, le_hwapip);
-
- /* construct an object with some methods */
-// object_init_ex(return_value, hw_api_class_entry_ptr);
-// add_property_resource(return_value, "this", ret);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_object(array object_in)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_object) {
- pval **arg1, *rv, *id;
- HW_API_Object *newobj;
- HW_API_object_In *in;
- HW_API_object_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_object_In(*arg1);
-
- out = db->object(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- //Frage: Diese Zeile erzeugt erst mit dem Konstruktor von HW_API_Object
- //eine Kopie und danach durch das assign. Wie kann man das verhindern.
- newobj = new HW_API_Object();
- *newobj = out.object();
-// newobj = new HW_API_Object(out.object());
-
- rv = php_hwapi_object_new(newobj, le_hwapi_objectp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_mychildren(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_mychildren) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_children_In *in;
- HW_API_children_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = new HW_API_children_In();
- in->setObjectIdentifier(Z_STRVAL_PP(arg1));
- out = db->children(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- for(i=0; i<objarr.count(); i++) {
- zval *child;
- HW_API_Object obj, *objp;
- objarr.object(i, obj);
- objp = new HW_API_Object(obj);
- child = php_hwapi_object_new(objp, le_hwapi_objectp);
- add_next_index_zval(return_value, child);
- }
- return;
- for(i=0; i<objarr.count(); i++) {
- HW_API_Object obj;
- HW_API_Attribute attr;
- objarr.object(i, obj);
- obj.attribute("GOid", attr);
- add_next_index_string(return_value, (char *) attr.value().string(), 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_children(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_children) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_children_In *in;
- HW_API_children_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_children_In(*arg1);
-
- out = db->children(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_parents(string hostname, int port)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_parents) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_parents_In *in;
- HW_API_parents_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_parents_In(*arg1);
-
- out = db->parents(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_find(array parameters)
- Finds objects */
-PHP_FUNCTION(hwapi_find) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_find_In *in;
- HW_API_find_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_find_In(*arg1);
-
- out = db->find(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
- objarr = (HW_API_ObjectArray) out.objects();
-
- /* FIXME: No a good idea to return just the objects. There is actually
- * more to return. Changing this to an object of type hw_api_find_out would
- * mean to change hw_api_parents() and hw_api_children() as well. */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* FIXME: More than just the list of objects is returned by find() */
- if(0 == objectArray2indexArray(&rv, &objarr)) {
- RETURN_FALSE;
- }
- zend_hash_add(return_value->value.ht, "objects", 8, &rv, sizeof(zval *), NULL);
- add_assoc_long(return_value, "endIndex", out.endIndex());
- add_assoc_bool(return_value, "haveMore", out.haveMore() ? true : false);
- add_assoc_long(return_value, "numberOfThingsFound", out.numberOfThingsFound());
-}
-/* }}} */
-
-/* {{{ proto string hwapi_identify(string hostname, int port)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_identify) {
- pval **arg1, *id, *rv;
- HW_API_identify_In *in;
- HW_API_identify_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_identify_In(*arg1);
-
- out = db->identify(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_identify\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_remove(array parameters)
- Remove an object */
-PHP_FUNCTION(hwapi_remove) {
- pval **arg1, *id, *rv;
- HW_API_remove_In *in;
- HW_API_remove_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_remove_In(*arg1);
-
- out = db->remove(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_remove\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_content(string hostname, int port)
- Retrieve content of object */
-PHP_FUNCTION(hwapi_content) {
- pval **arg1, *id, *rv;
- HW_API_content_In *in;
- HW_API_content_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_content_In(*arg1);
-
- out = db->content(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Content *content = new HW_API_Content(out.content());
- rv = php_hwapi_object_new(content, le_hwapi_contentp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_copy(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_copy) {
- pval **arg1, *id, *rv;
- HW_API_copy_In *in;
- HW_API_copy_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_copy_In(*arg1);
-
- out = db->copy(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new((HW_API_Object*) object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_copy\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_link(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_link) {
- pval **arg1, *id, *rv;
- HW_API_link_In *in;
- HW_API_link_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_link_In(*arg1);
-
- out = db->link(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_link\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_move(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_move) {
- pval **arg1, *id, *rv;
- HW_API_move_In *in;
- HW_API_move_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_move_In(*arg1);
-
- out = db->move(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_move\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_lock(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_lock) {
- pval **arg1, *id, *rv;
- HW_API_lock_In *in;
- HW_API_lock_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_lock_In(*arg1);
-
- out = db->lock(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_lock\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_unlock(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_unlock) {
- pval **arg1, *id, *rv;
- HW_API_unlock_In *in;
- HW_API_unlock_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_unlock_In(*arg1);
-
- out = db->unlock(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_unlock\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_replace(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_replace) {
- pval **arg1, *id, *rv;
- HW_API_replace_In *in;
- HW_API_replace_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_replace_In(*arg1);
-
- out = db->replace(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_insert(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_insert) {
- pval **arg1, *id, *rv;
- HW_API_insert_In *in;
- HW_API_insert_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insert_In(*arg1);
-
- out = db->insert(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_insertdocument(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_insertdocument) {
- pval **arg1, *id, *rv;
- HW_API_insertDocument_In *in;
- HW_API_insertDocument_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insertDocument_In(*arg1);
-
- out = db->insertDocument(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_insertdocument\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_insertcollection(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_insertcollection) {
- pval **arg1, *id, *rv;
- HW_API_insertCollection_In *in;
- HW_API_insertCollection_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insertCollection_In(*arg1);
-
- out = db->insertCollection(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) &err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_insertcollection\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_insertanchor(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_insertanchor) {
- pval **arg1, *id, *rv;
- HW_API_insertAnchor_In *in;
- HW_API_insertAnchor_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insertAnchor_In(*arg1);
-
- out = db->insertAnchor(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_insertanchor\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_srcanchors(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_srcanchors) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_srcAnchors_In *in;
- HW_API_srcAnchors_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_srcAnchors_In(*arg1);
-
- out = db->srcAnchors(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_dstanchors(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_dstanchors) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_dstAnchors_In *in;
- HW_API_dstAnchors_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_dstAnchors_In(*arg1);
-
- out = db->dstAnchors(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_objectbyanchor(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_objectbyanchor) {
- pval **arg1, *id, *rv;
- HW_API_objectByAnchor_In *in;
- HW_API_objectByAnchor_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_objectByAnchor_In(*arg1);
- /* FIXME: return value of any make_HW_API_xxx function should be checked
- * for NULL
- */
-
- out = db->objectByAnchor(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_objectbyanchor\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_dstofsrcanchor(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_dstofsrcanchor) {
- pval **arg1, *id, *rv;
- HW_API_dstOfSrcAnchor_In *in;
- HW_API_dstOfSrcAnchor_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_dstOfSrcAnchor_In(*arg1);
-
- out = db->dstOfSrcAnchor(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_dstofsrcanchor\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_srcsofdst(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_srcsofdst) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_srcsOfDst_In *in;
- HW_API_srcsOfDst_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_srcsOfDst_In(*arg1);
-
- out = db->srcsOfDst(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_checkin(array parameters)
- Checking in a document */
-PHP_FUNCTION(hwapi_checkin) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_checkIn_In *in;
- HW_API_checkIn_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_checkIn_In(*arg1);
-
- out = db->checkIn(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_checkin\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_checkout(array parameters)
- Checking out a document */
-PHP_FUNCTION(hwapi_checkout) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_checkOut_In *in;
- HW_API_checkOut_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_checkOut_In(*arg1);
-
- out = db->checkOut(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_checkout\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_setcommittedversion(array parameters)
- setcommittedversion */
-PHP_FUNCTION(hwapi_setcommittedversion) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_setCommittedVersion_In *in;
- HW_API_setCommittedVersion_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_setCommittedVersion_In(*arg1);
-
- out = db->setCommittedVersion(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_setcommittedversion\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_revert(array parameters)
- Reverting to a former document */
-PHP_FUNCTION(hwapi_revert) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_revert_In *in;
- HW_API_revert_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_revert_In(*arg1);
-
- out = db->revert(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_revert\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_history(array parameters)
- history */
-PHP_FUNCTION(hwapi_history) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_history_In *in;
- HW_API_history_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_history(*arg1);
-
- out = db->history(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_removeversion(array parameters)
- Reverting to a former document */
-PHP_FUNCTION(hwapi_removeversion) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_removeVersion_In *in;
- HW_API_removeVersion_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_removeVersion_In(*arg1);
-
- out = db->removeVersion(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_removeversion\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_freeversion(array parameters)
- freeversion */
-PHP_FUNCTION(hwapi_freeversion) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_freeVersion_In *in;
- HW_API_freeVersion_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_freeVersion_In(*arg1);
-
- out = db->freeVersion(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_freeversion\n");
-}
-/* }}} */
-
-/* {{{ proto array hwapi_configurationhistory(array parameters)
- Returns configuration history of object */
-PHP_FUNCTION(hwapi_configurationhistory) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_configurationHistory_In *in;
- HW_API_configurationHistory_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_configurationHistory_In(*arg1);
-
- out = db->configurationHistory(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_saveconfiguration(array parameters)
- Save configuration for an object */
-PHP_FUNCTION(hwapi_saveconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_saveConfiguration_In *in;
- HW_API_saveConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_saveConfiguration_In(*arg1);
-
- out = db->saveConfiguration(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_saveconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_restoreconfiguration(array parameters)
- Restore configuration for an object */
-PHP_FUNCTION(hwapi_restoreconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_restoreConfiguration_In *in;
- HW_API_restoreConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_restoreConfiguration_In(*arg1);
-
- out = db->restoreConfiguration(*in);
- delete in;
- if (!out.error().error()) {
- RETURN_STRING((char *) (out.progressIdentifier().string()), 1);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_restoreconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_mergeconfiguration(array parameters)
- Merge configuration for an object */
-PHP_FUNCTION(hwapi_mergeconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_mergeConfiguration_In *in;
- HW_API_mergeConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_mergeConfiguration_In(*arg1);
-
- out = db->mergeConfiguration(*in);
- delete in;
- if (!out.error().error()) {
- RETURN_STRING((char *) (out.progressIdentifier().string()), 1);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_mergeconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_removeconfiguration(array parameters)
- Removes configuration */
-PHP_FUNCTION(hwapi_removeconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_removeConfiguration_In *in;
- HW_API_removeConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_removeConfiguration_In(*arg1);
-
- out = db->removeConfiguration(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_removeconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_user(array parameters)
- Returns information about user */
-PHP_FUNCTION(hwapi_user) {
- pval **arg1, *id, *rv;
- HW_API_user_In *in;
- HW_API_user_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->user(HW_API_user_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_user_In(*arg1);
- if(NULL == in)
- out = db->user(HW_API_user_In());
- else
- out = db->user(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
-}
-/* }}} */
-
-/* {{{ proto string hwapi_userlist(array parameters)
- Returns list of login in users */
-PHP_FUNCTION(hwapi_userlist) {
- zval **arg1, *id, *rv;
- HW_API_userlist_In *in;
- HW_API_userlist_Out out;
- HW_API_ObjectArray objarr;
- HW_API_HGCSP *db;
- int i;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->userlist(HW_API_userlist_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_userlist_In(*arg1);
- if(NULL == in)
- out = db->userlist(HW_API_userlist_In());
- else
- out = db->userlist(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_hwstat(array parameters)
- Returns information about hgserver */
-PHP_FUNCTION(hwapi_hwstat) {
- pval **arg1, *id, *rv;
- HW_API_hwStat_In *in;
- HW_API_hwStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->hwStat(HW_API_hwStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_hwStat_In(*arg1);
- if(NULL == in)
- out = db->hwStat(HW_API_hwStat_In());
- else
- out = db->hwStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_dcstat(array parameters)
- Returns information about hgserver */
-PHP_FUNCTION(hwapi_dcstat) {
- pval **arg1, *id, *rv;
- HW_API_dcStat_In *in;
- HW_API_dcStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->dcStat(HW_API_dcStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_dcStat_In(*arg1);
- if(NULL == in)
- out = db->dcStat(HW_API_dcStat_In());
- else
- out = db->dcStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_dbstat(array parameters)
- Returns information about hgserver */
-PHP_FUNCTION(hwapi_dbstat) {
- pval **arg1, *id, *rv;
- HW_API_dbStat_In *in;
- HW_API_dbStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->dbStat(HW_API_dbStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_dbStat_In(*arg1);
- if(NULL == in)
- out = db->dbStat(HW_API_dbStat_In());
- else
- out = db->dbStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_ftstat(array parameters)
- Returns information about ftserver */
-PHP_FUNCTION(hwapi_ftstat) {
- pval **arg1, *id, *rv;
- HW_API_ftStat_In *in;
- HW_API_ftStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->ftStat(HW_API_ftStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_ftStat_In(*arg1);
- if(NULL == in)
- out = db->ftStat(HW_API_ftStat_In());
- else
- out = db->ftStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_info(array parameters)
- Returns information about server */
-PHP_FUNCTION(hwapi_info) {
- pval **arg1, *id, *rv, *rv1, *rv2, *rv3;
- HW_API_info_In *in;
- HW_API_info_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->info(HW_API_info_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_info_In(*arg1);
- if(NULL == in)
- out = db->info(HW_API_info_In());
- else
- out = db->info(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_StringArray languages, customidx, systemidx;
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- HW_API_Object *object = new HW_API_Object(out.typeInfo());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- zend_hash_add(return_value->value.ht, "typeInfo", 9, &rv, sizeof(zval *), NULL);
- languages = out.languages();
- MAKE_STD_ZVAL(rv1);
- if(0 == stringArray2indexArray(&rv1, &languages))
- RETURN_FALSE;
- zend_hash_add(return_value->value.ht, "languages", 10, &rv1, sizeof(zval *), NULL);
- customidx = out.customIdx();
- MAKE_STD_ZVAL(rv2);
- if(0 == stringArray2indexArray(&rv2, &customidx))
- RETURN_FALSE;
- zend_hash_add(return_value->value.ht, "customIdx", 10, &rv2, sizeof(zval *), NULL);
- systemidx = out.systemIdx();
- MAKE_STD_ZVAL(rv3);
- if(0 == stringArray2indexArray(&rv3, &systemidx))
- RETURN_FALSE;
- zend_hash_add(return_value->value.ht, "systemIdx", 10, &rv3, sizeof(zval *), NULL);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_new()
- Creates new HW_API_Object */
-PHP_FUNCTION(hwapi_object_new) {
- pval **arg1, **arg2, *rv;
- HW_API_Object *obj;
- const HW_API_Object *srcobj;
- int ret;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- obj = new HW_API_Object();
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
- srcobj = (const HW_API_Object *) php_hwapi_get_object(*arg1, le_hwapi_objectp);
- obj = new HW_API_Object(*srcobj);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- rv = php_hwapi_object_new(obj, le_hwapi_objectp);
-//zend_print_pval_r(rv, 0);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_count()
- Counts number of attributes of an HW_API_Object */
-PHP_FUNCTION(hwapi_object_count) {
- zval *id, **tmp;
- HW_API_Object *objp;
- int value;
-
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- value = objp->count();
-
- RETURN_LONG(value);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_title(string language)
- Returns title of HW_API_Object for given language */
-PHP_FUNCTION(hwapi_object_title) {
- zval **arg1, *id, **tmp;
- HW_API_Object *objp;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
-
- convert_to_string_ex(arg1);
-
- // Warning: It is import to duplicate the string before RETURN.
- // If that is not done the HW_API_String destructor will be called
- // before RETURN_STRING can duplicate the string.
- value = (char *) estrdup(objp->title(Z_STRVAL_PP(arg1)).string());
-
- RETURN_STRING(value, 0);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_attreditable(int attr, string username, bool is_system)
- Hyperwave object_attreditable function */
-PHP_FUNCTION(hwapi_object_attreditable) {
- zval *id, **arg1, **arg2, **arg3;
- HW_API_Object *objp;
- HW_API_Attribute *attrp;
- bool value;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- switch(Z_TYPE_PP(arg1)) {
- case IS_STRING:
- convert_to_string_ex(arg1);
- value = objp->attributeEditable((char *) Z_STRVAL_PP(arg1), (char *) Z_STRVAL_PP(arg2), (bool) Z_LVAL_PP(arg3));
- break;
- case IS_OBJECT:
- attrp = (HW_API_Attribute *) php_hwapi_get_object(*arg1, le_hwapi_attributep);
- value = objp->attributeEditable(*attrp, (char *) Z_STRVAL_PP(arg2), (bool) Z_LVAL_PP(arg3));
- break;
- }
- if(value) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object hwapi_object_assign(int object)
- Hyperwave object_assign function */
-PHP_FUNCTION(hwapi_object_assign) {
- zval *id, **arg1, **arg2;
-
- printf("hwapi_object_assign\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_attribute(int index, object &attribute)
- Hyperwave object_attribute function */
-PHP_FUNCTION(hwapi_object_attribute) {
- zval **arg1, *id, *rv;
- HW_API_Attribute *attrp, attr;
- HW_API_Object *objp;
- int error;
-
- if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(arg1)) {
- case IS_LONG:
- error = objp->attribute(Z_LVAL_PP(arg1), attr);
- break;
- case IS_STRING:
- error = objp->attribute(HW_API_String(Z_STRVAL_PP(arg1)), attr);
- break;
- default:
- php_error(E_WARNING, "HW_API_Object::attribute() needs string or long as parameter");
- RETURN_FALSE;
- }
-
- if(error) {
- attrp = new HW_API_Attribute(attr);
- rv = php_hwapi_object_new(attrp, le_hwapi_attributep);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_insert(object attr)
- Inserts new HW_API_Attribute into HW_API_Object */
-PHP_FUNCTION(hwapi_object_insert) {
- zval *arg1, *id;
- HW_API_Object *objp;
- HW_API_Attribute *attrp;
- char *value;
-
- if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
- attrp = (HW_API_Attribute *) php_hwapi_get_object(arg1, le_hwapi_attributep);
-
- objp->insert(*attrp);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_remove(string name)
- Removes HW_API_Attribute with given name from HW_API_Object */
-PHP_FUNCTION(hwapi_object_remove) {
- zval **arg1, *id, **tmp;
- HW_API_Object *objp;
- int error;
-
- if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
-
- error = objp->remove(Z_STRVAL_PP(arg1));
-
- if(!error) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_value(string name)
- Returns attribute value of given attribute */
-PHP_FUNCTION(hwapi_object_value) {
- zval **arg1, *id;
- HW_API_Object *objp;
- HW_API_Attribute *attrp;
- HW_API_String value;
- int error;
-
- if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
-
- error = objp->value((HW_API_String) Z_STRVAL_PP(arg1), value);
-
- printf("hwapi_object_value\n");
- if(error) {
- char *str = (char *) estrdup(value.string());
- RETURN_STRING(str, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_new([string name][, string value])
- Creates new HW_API_Attribute */
-PHP_FUNCTION(hwapi_attribute_new) {
- zval *rv, **arg1, **arg2;
- HW_API_Attribute *attrp;
- int ret;
-
- /* FIXME: I'm not sure if the constructor of HW_API_Attribute takes normal C-Strings
- * or if it has to be HW_API_String. Currently C-Strings are passed.
- */
- switch(ZEND_NUM_ARGS()) {
- case 0:
- break;
- attrp = new HW_API_Attribute();
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1));
- break;
- case 2: //* FIXME: Second Parameter can be string or array of strings
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- switch((*arg2)->type) {
- case IS_ARRAY: {
- HashTable *lht = (*arg2)->value.ht;
- int i, count;
- HW_API_StringArray values;
- if(NULL == lht)
- RETURN_FALSE;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1));
- break;
- }
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- zval *keydata, **keydataptr;
- zend_hash_get_current_data(lht, (void **) &keydataptr);
- /* FIXME: just hope this doesn't do any harm. Maybe convert_to_string
- * changes the type of the array element */
- convert_to_string_ex(keydataptr);
- keydata = *keydataptr;
- values.insert(keydata->value.str.val);
- zend_hash_move_forward(lht);
- }
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1), values);
- break;
- }
- default:
- convert_to_string_ex(arg2);
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1), Z_STRVAL_PP(arg2));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- rv = php_hwapi_object_new(attrp, le_hwapi_attributep);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_attribute_new\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_key()
- Returns key of an hwapi_attribute */
-PHP_FUNCTION(hwapi_attribute_key) {
- zval *id;
- HW_API_Attribute *attrp;
- char *value;
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- // Warning: It is import to duplicate the string before RETURN.
- // If that is not done the HW_API_String destructor will be called
- // before RETURN_STRING can duplicate the string.
- value = (char *) estrdup((attrp->key()).string());
-
- RETURN_STRING(value, 0);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_value()
- Returns value of hw_api_attribute */
-PHP_FUNCTION(hwapi_attribute_value) {
- zval *id;
- HW_API_Attribute *attrp;
- char *value;
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- // Warning: It is import to duplicate the string before RETURN.
- // If that is not done the HW_API_String destructor will be called
- // before RETURN_STRING can duplicate the string.
- value = (char *) estrdup(attrp->value().string());
-
- RETURN_STRING(value, 0);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_values()
- Returns all values of an attribute as an array */
-PHP_FUNCTION(hwapi_attribute_values) {
- zval *id, **tmp;
- HW_API_Attribute *attrp;
- HW_API_StringArray values;
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- values = attrp->values();
- if(0 == stringArray2indexArray(&return_value, &values))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_langdepvalue(string language)
- Returns value of attribute with givenn language */
-PHP_FUNCTION(hwapi_attribute_langdepvalue) {
- zval **arg1, *id, **tmp;
- HW_API_Attribute *attrp;
- char *value;
-
- if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- value = (char *) attrp->langDepValue((*arg1)->value.str.val).string();
- printf("hwapi_attribute_langdepvalue\n");
- RETURN_STRING(value, 1);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_content_new([string name][, string value])
- Creates new HW_API_Content */
-PHP_FUNCTION(hwapi_content_new) {
- zval *rv, **arg1, **arg2, **arg3;
- HW_API_Content *contp;
- int ret;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- contp = new HW_API_Content();
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch((*arg1)->type) {
- case IS_OBJECT:
- break;
- default:
- convert_to_string_ex(arg1);
- contp = new HW_API_Content(Z_STRVAL_PP(arg1));
- }
- break;
- case 2: //First Parameter is long, second the file name
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- contp = new HW_API_Content(HW_API_Content::File, Z_STRVAL_PP(arg2));
- break;
- case 3: //First Parameter is long or string, second and third is string
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch((*arg1)->type) {
- case IS_LONG:
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- contp = new HW_API_Content(HW_API_Content::File, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
- break;
- default:
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- contp = new HW_API_Content(Z_STRVAL_PP(arg1), Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- rv = php_hwapi_object_new(contp, le_hwapi_contentp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_content_read(string buffer, int length)
- Reads length bytes from content */
-PHP_FUNCTION(hwapi_content_read) {
- zval **arg1, **arg2, *id, **tmp;
- HW_API_Content *contentp;
- char *value;
- int len;
-
- if((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
-
- id = getThis();
- contentp = (HW_API_Content *) php_hwapi_get_object(id, le_hwapi_contentp);
-
- zval_dtor(*arg1);
- Z_TYPE_PP(arg1) = IS_STRING;
- /* FIXME: Need to finish the new zval */
- value = (char *) emalloc(Z_LVAL_PP(arg2)+1);
- if(value) {
- Z_STRVAL_PP(arg1) = value;
- len = contentp->read(value, Z_LVAL_PP(arg2));
- value[len] = '\0';
- Z_STRLEN_PP(arg1) = len;
-
- RETURN_LONG(len);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_content_mimetype()
- Returns MimeType of document */
-PHP_FUNCTION(hwapi_content_mimetype) {
- zval *id;
- HW_API_Content *contentp;
- HW_API_String hwstr;
-
- id = getThis();
- contentp = (HW_API_Content *) php_hwapi_get_object(id, le_hwapi_contentp);
-
- hwstr = contentp->mimetype();
-
- RETURN_STRING((char *) hwstr.string(), 1);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_error_count()
- Counts number of reasons of an HW_API_Error */
-PHP_FUNCTION(hwapi_error_count) {
- zval *id, **tmp;
- HW_API_Error *objp;
- int value;
-
- id = getThis();
- objp = (HW_API_Error *) php_hwapi_get_object(id, le_hwapi_errorp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- value = objp->count();
-
- RETURN_LONG(value);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_error_reason(int index)
- Returns a reason of an HW_API_Error */
-PHP_FUNCTION(hwapi_error_reason) {
- zval **arg1, *id, **tmp;
- HW_API_Error *objp;
- HW_API_Reason reason;
- bool error;
-
- if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
-
- id = getThis();
- objp = (HW_API_Error *) php_hwapi_get_object(id, le_hwapi_errorp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- if(!objp->error())
- php_error(E_WARNING, "This is not an error");
-
- error = objp->reason(Z_LVAL_PP(arg1), reason);
- if(error) {
- zval *rv;
- HW_API_Reason *reasonp = new HW_API_Reason(reason);
- rv = php_hwapi_object_new(reasonp, le_hwapi_reasonp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_reason_type()
- Returns the type of HW_API_Reason */
-PHP_FUNCTION(hwapi_reason_type) {
- zval **arg1, *id, **tmp;
- HW_API_Reason *objp;
-
- id = getThis();
- objp = (HW_API_Reason *) php_hwapi_get_object(id, le_hwapi_reasonp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- RETURN_LONG((long) (objp->type()));
-}
-/* }}} */
-
-/* {{{ proto string hwapi_reason_description(string language)
- Returns description of HW_API_Reason */
-PHP_FUNCTION(hwapi_reason_description) {
- zval **arg1, *id, **tmp;
- HW_API_Reason *objp;
- HW_API_String desc;
-
- if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- id = getThis();
- objp = (HW_API_Reason *) php_hwapi_get_object(id, le_hwapi_reasonp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- desc = objp->description((HW_API_String) (Z_STRVAL_PP(arg1)));
- RETURN_STRING((char *) desc.string(), 1);
-}
-/* }}} */
-
-/* hw_api_class_get_property(zend_property_reference *property_reference) {{{
- *
- */
-pval hw_api_class_get_property(zend_property_reference *property_reference) {
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
-
- printf("Reading a property from a HW_API object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-/* }}} */
-
-/* hw_api_class_set_property(zend_property_reference *property_reference, pval *value) {{{
- */
-int hw_api_class_set_property(zend_property_reference *property_reference, pval *value) {
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a HW_API object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-/* }}} */
-
-/* hw_api_class_startup() {{{
- */
-void hw_api_class_startup() {
- zend_class_entry ce;
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "HW_API", php_hw_api_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_class_entry_ptr = zend_register_internal_class_ex(&ce, NULL, NULL);
-}
-/* }}} */
-
-/* hw_api_object_class_get_property(zend_property_reference *property_reference) {{{
- */
-pval hw_api_object_class_get_property(zend_property_reference *property_reference) {
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
-
- printf("Reading a property from a HW_API_Object object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-/* }}} */
-
-/* hw_api_object_class_set_property(zend_property_reference *property_reference, pval *value) {{{
- */
-int hw_api_object_class_set_property(zend_property_reference *property_reference, pval *value) {
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a HW_API_Object object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ hw_api_object_class_startup()
- */
-void hw_api_object_class_startup() {
- zend_class_entry ce;
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "hw_api_object", php_hw_api_object_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_object_class_entry_ptr = zend_register_internal_class_ex(&ce, NULL, NULL);
-}
-/* }}} */
-
-/* hw_api_attribute_class_get_property(zend_property_reference *property_reference) {{{
- */
-pval hw_api_attribute_class_get_property(zend_property_reference *property_reference) {
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Reading a property from a HW_API_Attribute object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-/* }}} */
-
-/* hw_api_attribute_class_set_property(zend_property_reference *property_reference, pval *value) {{{
- */
-int hw_api_attribute_class_set_property(zend_property_reference *property_reference, pval *value) {
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a HW_API_Attribute object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-/* }}} */
-
-/* hw_api_attribute_class_startup() {{{
- */
-void hw_api_attribute_class_startup() {
- zend_class_entry hw_api_attribute_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_attribute_class_entry, "HW_API_Attribute", php_hw_api_attribute_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_attribute_class_entry_ptr = zend_register_internal_class(&hw_api_attribute_class_entry);
-}
-/* }}} */
-
-/* hw_api_error_class_startup() {{{
- */
-void hw_api_error_class_startup() {
- zend_class_entry hw_api_error_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_error_class_entry, "HW_API_Error", php_hw_api_error_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_error_class_entry_ptr = zend_register_internal_class(&hw_api_error_class_entry);
-}
-/* }}} */
-
-/* hw_api_content_class_startup() {{{
- */
-void hw_api_content_class_startup() {
- zend_class_entry hw_api_content_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_content_class_entry, "HW_API_Content", php_hw_api_content_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_content_class_entry_ptr = zend_register_internal_class(&hw_api_content_class_entry);
-}
-/* }}} */
-
-/* hw_api_reason_class_startup() {{{
- */
-void hw_api_reason_class_startup() {
- zend_class_entry hw_api_reason_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_reason_class_entry, "HW_API_Reason", php_hw_api_reason_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_reason_class_entry_ptr = zend_register_internal_class(&hw_api_reason_class_entry);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/hyperwave/CREDITS b/ext/hyperwave/CREDITS
deleted file mode 100644
index b01b16907f..0000000000
--- a/ext/hyperwave/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-HyperWave
-Uwe Steinmann
diff --git a/ext/hyperwave/config.m4 b/ext/hyperwave/config.m4
deleted file mode 100644
index 9e5a31cc6d..0000000000
--- a/ext/hyperwave/config.m4
+++ /dev/null
@@ -1,20 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for Hyperwave support)
-AC_ARG_WITH(hyperwave,
-[ --with-hyperwave Include Hyperwave support],
-[
- if test "$withval" != "no"; then
- AC_DEFINE(HYPERWAVE,1,[ ])
- AC_MSG_RESULT(yes)
- PHP_NEW_EXTENSION(hyperwave, hw.c hg_comm.c)
- else
- AC_DEFINE(HYPERWAVE,0,[ ])
- AC_MSG_RESULT(no)
- fi
-],[
- AC_DEFINE(HYPERWAVE,0,[ ])
- AC_MSG_RESULT(no)
-])
diff --git a/ext/hyperwave/debug.h b/ext/hyperwave/debug.h
deleted file mode 100644
index 5b72dbb194..0000000000
--- a/ext/hyperwave/debug.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/****************************************************************************
-*
-* Copyright (C) 1991 Kendall Bennett.
-* All rights reserved.
-*
-* Filename: $RCSfile$
-* Version: $Revision$
-*
-* Language: ANSI C
-* Environment: any
-*
-* Description: General header file for portable code.
-*
-* $Id$
-*
-* Revision History:
-* -----------------
-*
-* $Log$
-* Revision 1.2 2000/07/02 23:46:41 sas
-* Change header protection macros to conform to standard.
-*
-* Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment"
-*
-* All identifiers that begin with an underscore and either an uppercase
-* letter or another underscore are always reserved for any use by the
-* implementation.
-*
-* Revision 1.1 1999/04/21 23:37:47 ssb
-* moved db
-*
-* Revision 1.1.1.1 1999/04/07 21:03:29 zeev
-* PHP 4.0
-*
-* Revision 1.1.1.1 1999/03/17 04:29:10 andi
-* PHP4
-*
-* Revision 1.1.1.1 1998/12/21 07:56:22 andi
-* Trying to start the zend CVS tree
-*
-* Revision 1.1 1998/08/12 09:29:16 steinm
-* First version of Hyperwave module.
-*
-* Revision 1.6 92/03/15 12:51:48 kjb
-* Added MK_FP macro and ushort typedef.
-*
-* Revision 1.5 91/10/28 03:17:33 kjb
-* Ported to the Iris.
-*
-* Revision 1.4 91/09/26 15:29:02 kjb
-* Added stuff for the SGI Iris 4D.
-*
-* Revision 1.3 91/09/26 10:07:04 kjb
-* Added general typedef stuff.
-*
-* Revision 1.2 91/09/03 18:19:14 ROOT_DOS
-* Added a few defines that are supplied by <dir.h> for UNIX compatibility.
-*
-* Revision 1.1 91/08/16 13:19:06 ROOT_DOS
-* Initial revision
-*
-****************************************************************************/
-
-#ifndef DEBUG_H
-#define DEBUG_H
-
-#ifdef DEBUG
-# define D(x) x
-#else
-# define D(x)
-#endif
-
-#define PRIVATE static
-#define PUBLIC
-
-#ifdef __MSDOS__ /* Compiling for MSDOS */
-# define MS(x) x
-# define UX(x)
-# define IR(x)
-# define _8086 /* We know we have an 8086 type processor */
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-# define LDATA
-# define NULL 0L
-#else
-# define NULL 0
-#endif
-#else __MSDOS__
-#ifdef __IRIS4D__ /* Compiling for the SGI Iris 4D */
-# define MS(x)
-# define UX(x) x /* The Iris is a UNIX machine */
-# define IR(x) x
-# define O_BINARY 0 /* no binary input mode in UNIX open() */
-# define MAXFILE 255 /* These are defined in <dir.h>, but */
-# define MAXDIR 255 /* on UNIX machines, we just define */
-# define MAXPATH 255 /* them all to be the same size */
-# define far /* Near and far do not exist under */
-# define near /* UNIX or the Iris. */
-# define NULL ((void *)0)
-#else __IRIS4D__ /* Assume UNIX compilation */
-# define MS(x)
-# define UX(x) x
-# define IR(x)
-# define O_BINARY 0 /* no binary input mode in UNIX open() */
-# define MAXFILE 255 /* These are defined in <dir.h>, but */
-# define MAXDIR 255 /* on UNIX machines, we just define */
-# define MAXPATH 255 /* them all to be the same size */
-# define far /* Near and far do not exist under */
-# define near /* UNIX or the Iris. */
-# ifndef NULL
-# define NULL ((void *)0)
-# endif
-#endif __IRIS4D__
-#endif __MSDOS__
-
-/****************************************************************************
-*
-* SEG(p) Evaluates to the segment portion of an 8086 address.
-* OFF(p) Evaluates to the offset portion of an 8086 address.
-* FP(s,o) Creates a far pointer given a segment offset pair.
-* PHYS(p) Evaluates to a long holding a physical address
-*
-****************************************************************************/
-
-#ifdef _8086
-# define SEG(p) ( ((unsigned *)&(void far *)(p))[1] )
-# define OFF(p) ( (unsigned)(p) )
-# define FP(s,o) ( (void far *)( ((unsigned long)s << 16) + \
- (unsigned long)o ))
-# define PHYS(p) ( (unsigned long)OFF(p) + \
- ((unsigned long)SEG(p) << 4))
-#else
-# define PHYS(p) (p)
-#endif _8086
-
-/****************************************************************************
-*
-* NUMELE(array) Evaluates to the array size in elements
-* LASTELE(array) Evaluates to a pointer to the last element
-* INBOUNDS(array,p) Evaluates to true if p points into the array
-* RANGE(a,b,c) Evaluates to true if a <= b <= c
-* max(a,b) Evaluates to a or b, whichever is larger
-* min(a,b) Evaluates to a or b, whichever is smaller
-* ABS(a) Evaluates to the absolute value of a
-* NBITS(type) Returns the number of bits in a variable of the
-* indicated type
-* MAXINT Evaluates to the value of the largest signed integer
-*
-****************************************************************************/
-
-#define NUMELE(a) (sizeof(a)/sizeof(*(a)))
-#define LASTELE(a) ((a) + (NUMELE(a)-1))
-#ifdef LDATA
-#define TOOHIGH(a, p) ((long)PHYS(p) - (long)PHYS(a) > (long)(NUMELE(a)-1))
-#define TOOLOW(a, p) ((long)PHYS(p) - (long)PHYS(a) < 0)
-#else
-#define TOOHIGH(a, p) ((long)(p) - (long)(a) > (long)(NUMELE(a)-1))
-#define TOOLOW(a, p) ((long)(p) - (long)(a) < 0)
-#endif
-#define INBOUNDS(a, p) ( ! (TOOHIGH(a, p) || TOOLOW(a, p)) )
-
-#define _IS(t, x) (((t)1 << (x)) != 0) /* Evaluates true if the width of */
- /* variable of type t is < x. */
- /* The != 0 assures that the */
- /* answer is 1 or 0 */
-
-#define NBITS(t) (4 * (1 + _IS(t, 4) + _IS(t, 8) + _IS(t, 12) + _IS(t, 16) \
- + _IS(t, 20) + _IS(t, 24) + _IS(t, 28) + _IS(t, 32)))
-
-#define MAXINT (((unsigned)~0) >> 1)
-
-#ifndef MAX
-# define MAX(a, b) ( ((a) > (b)) ? (a) : (b))
-#endif
-#ifndef MIN
-# define MIN(a, b) ( ((a) < (b)) ? (a) : (b))
-#endif
-#ifndef ABS
-# define ABS(a) ((a) >= 0 ? (a) : -(a))
-#endif
-
-#define RANGE(a, b, c) ( (a) <= (b) && (b) <= (c) )
-
-/* General typedefs */
-
-#ifndef __GENDEFS
-#define __GENDEFS
-typedef void *ptr;
-typedef void near *nearptr;
-typedef void far *farptr;
-/*typedef unsigned char uchar;
-typedef unsigned short ushort;
-typedef unsigned int uint;
-typedef unsigned long ulong;*/
-typedef int bool;
-#endif __GENDEFS
-
-/* Boolean truth values */
-
-#define false 0
-#define true 1
-#define FALSE 0
-#define TRUE 1
-#define NO 0
-#define YES 1
-
-#endif /* DEBUG_H */
diff --git a/ext/hyperwave/hg_comm.c b/ext/hyperwave/hg_comm.c
deleted file mode 100644
index c4ecca4d32..0000000000
--- a/ext/hyperwave/hg_comm.c
+++ /dev/null
@@ -1,5846 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* #define HW_DEBUG */
-
-#include <stdlib.h>
-#include "php.h"
-#include "php_globals.h"
-#include "SAPI.h"
-
-#if HYPERWAVE
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#ifdef PHP_WIN32
-# include <winsock.h>
-# define EWOULDBLOCK WSAEWOULDBLOCK
-# define ETIMEDOUT WSAETIMEDOUT
-# define bcopy memcpy
-# define bzero(a, b) memset(a, 0, b)
-#else
-# include <sys/socket.h>
-# include <netinet/in.h>
-# include <netdb.h>
-# include <unistd.h>
-# include <sys/param.h>
-#endif
-#include <fcntl.h>
-#include <errno.h>
-#include "hg_comm.h"
-#include "ext/standard/head.h"
-
-/* Defining hw_optimize does optimize the send_objectbyidquery() function.
- Instead of getting the complete return message including the objectrecords
- with recv_hg_msg(), only the header of the return message is fetched.
- The object records itself are fetched as they are needed straight from
- the socket. This method requires less memory and is twice as fast because
- reading from the net seems to be a bottleneck which has less impact if
- the processing of the data is done in parallel.
-*/
-#define hw_optimize
-
-/* Define hw_less_server_stress does reduce the stress on the hw server, by
- using send_objectbyidquery() instead of send_getobject() multiple times.
- send_objectbyidquery() gets a bunch of object records with one message.
- This also reduced the number of lines in the servers log files.
- Unfortunately this is not faster unless hw_optimize is defined, because
- getting object records with multiple send_getobject() is already optimized.
- First all request messages for each object are send and the the answers
- are read. This gives the server the possibility to answer request already
- while more request are comming in.
-*/
-#define hw_less_server_stress
-
-static int set_nonblocking(int fd);
-/* static int set_blocking(int fd); */
-
-static int hg_read_exact(int sockfd, char *buf, int size);
-/* static int hg_read(int sockfd, char *buf, int size); */
-static int hg_write(int sockfd, char *buf, int size);
-
-static int send_hg_msg(int sockfd, hg_msg *msg, int length);
-static void build_msg_header(hg_msg *msg, int length, int version_msgid, int msg_type);
-static char *build_msg_int(char *buf, int val);
-static char *build_msg_str(char *buf, char *str);
-static int swap(int val);
-
-
-int version = HW_VERSION;
-/* F_DISTRIBUTED has the effect that all object ids are
- virtual. This means whenever an object is requested a
- new id is generated for this session. Wavemaster and
- Harmony set this flag. How do I know? tcpdump tells
- a lot if the output is investigated. The bit is also
- need to allow access on other server through the local
- server. The hw_mapid() function won't work unless you
- set F_DISTRIBUTED */
-/* int version = HW_VERSION | F_DISTRIBUTED; */
-/* int version = HW_VERSION | F_DISTRIBUTED | F_COMPRESSED; */
-static int msgid = 1;
-static int sock_flags = -1;
-static int non_blocking = 0;
-static int swap_on = 0;
-static int rtimeout = 40;
-static int wtimeout = 40;
-static int lowerror = 0;
-
-/***********************************************************************
-* Function fnInsStr() *
-* *
-* Insert string in string at position. The old string will be freed *
-* with efree!!! The new string is allocated with malloc. *
-* Parameter: string *str: string in which insstr is to be inserted *
-* int pos: Position where string is to inserted (0=first) *
-* string *insstr: string to be inserted *
-* Return: pointer to new string or NULL. If NULL is returned the *
-* memory for the old string has not been freed. *
-***********************************************************************/
-char *fnInsStr(char *str, int pos, char *insstr)
-{
- char *newstr, *ptr;
-
- if((str == NULL) || (insstr == NULL))
- return NULL;
- if(pos > (int)strlen(str))
- return NULL;
-
- if(insstr[0] == '\0')
- return str;
-
- if(NULL == (newstr = malloc(strlen(str) + strlen(insstr) + 1))) {
- lowerror = LE_MALLOC;
- return NULL;
- }
-
- ptr = newstr;
- memcpy(newstr, str, pos);
- ptr += pos;
- strcpy(ptr, insstr);
- ptr += strlen(insstr);
- strcpy(ptr, str+pos);
-
- free(str);
- return newstr;
-}
-
-/***********************************************************************
-* Function fnAddAnchor() *
-* *
-* Inserts new anchor into anchor list. *
-* Parameter: DLIST pList: Anchor list *
-* int objectID: object ID of Anchor *
-* int start: start position *
-* int end: end position *
-* Return: Pointer to new anchor, NULL if error *
-***********************************************************************/
-#ifdef newlist
-ANCHOR *fnAddAnchor(zend_llist *pAnchorList,
- int objectID,
- int start, int end)
-#else
-ANCHOR *fnAddAnchor(DLIST *pAnchorList,
- int objectID,
- int start, int end)
-#endif
-{
- ANCHOR *cur_ptr;
-
-#ifdef newlist
- ANCHOR **ptr;
- if(NULL == (cur_ptr = (ANCHOR *) emalloc(sizeof(ANCHOR))))
- return NULL;
-#else
- if((cur_ptr = (ANCHOR *) dlst_newnode(sizeof(ANCHOR))) == NULL) {
- return NULL;
- }
-#endif
-
- memset(cur_ptr, 0, sizeof(ANCHOR));
- cur_ptr->start = start;
- cur_ptr->end = end;
- cur_ptr->id = objectID;
- cur_ptr->destdocname = NULL;
- cur_ptr->nameanchor = NULL;
- cur_ptr->link = NULL;
- cur_ptr->tagattr = NULL;
- cur_ptr->htmlattr = NULL;
- cur_ptr->codebase = NULL;
- cur_ptr->code = NULL;
- cur_ptr->keyword = NULL;
- cur_ptr->fragment = NULL;
-
-#ifdef newlist
- zend_llist_prepend_element(pAnchorList, &cur_ptr);
- ptr = (ANCHOR **) zend_llist_get_first(pAnchorList);
-#else
- dlst_insertafter(pAnchorList, cur_ptr, PHP_DLST_HEAD(pAnchorList));
-#endif
-
- return(cur_ptr);
-}
-
-/***********************************************************************
-* Function fnDeleteAnchor() *
-* *
-* Inserts new anchor into anchor list. *
-* Parameter: ptr: pointer to node *
-* Return: void *
-***********************************************************************/
-#ifdef newlist
-void fnDeleteAnchor(void *ptr1)
-#else
-void fnDeleteAnchor(ANCHOR *ptr)
-#endif
-{
-#ifdef newlist
- ANCHOR **ptr2, *ptr;
- ptr2 = (ANCHOR **) ptr1;
- ptr = *ptr2;
-#endif
-
- if(ptr->destdocname) efree(ptr->destdocname);
- if(ptr->nameanchor) efree(ptr->nameanchor);
- if(ptr->link) efree(ptr->link);
- if(ptr->tagattr) efree(ptr->tagattr);
- if(ptr->htmlattr) efree(ptr->htmlattr);
- if(ptr->codebase) efree(ptr->codebase);
- if(ptr->code) efree(ptr->code);
- if(ptr->keyword) efree(ptr->keyword);
- if(ptr->fragment) efree(ptr->fragment);
-
-#ifdef newlist
- efree(ptr);
-#else
- dlst_freenode(ptr);
-#endif
-}
-
-/***********************************************************************
-* Function fnListAnchor() *
-* *
-* Lists all anchors in anchor list. *
-* Parameter: ptr: pointer to list *
-* Return: void *
-***********************************************************************/
-#ifdef newlist
-void fnListAnchor(zend_llist *pAnchorList)
-#else
-void fnListAnchor(DLIST *pAnchorList)
-#endif
-{
-#ifdef newlist
- ANCHOR *cur_ptr, **ptr;
- ptr = (ANCHOR **) zend_llist_get_last(pAnchorList);
- if(ptr)
- cur_ptr = *ptr;
- while(ptr) {
- fprintf(stderr, "0x%X->0x%X ", (int) ptr, (int) cur_ptr);
-#else
- ANCHOR *cur_ptr;
- cur_ptr = (ANCHOR *) dlst_last(pAnchorList);
- while(cur_ptr) {
- fprintf(stderr, "0x%X ", (int) cur_ptr);
-#endif
-
- fprintf(stderr, "%d, %d, %s, %s, %s, %s %s\n", cur_ptr->start,
- cur_ptr->end,
- cur_ptr->tanchor == 1 ? "src" : "dest",
- cur_ptr->destdocname,
- cur_ptr->nameanchor,
- cur_ptr->link,
- cur_ptr->tagattr);
-#ifdef newlist
- ptr = (ANCHOR **) zend_llist_get_prev(pAnchorList);
- if(ptr)
- cur_ptr = *ptr;
-#else
- cur_ptr = (ANCHOR *) dlst_prev(cur_ptr);
-#endif
- }
-}
-
-/***********************************************************************
-* Function fnCmpAnchors() *
-* *
-* Compares to Anchors by its start position *
-* Parameter: ANCHOR a1: First Anchor *
-* ANCHOR a2: Second Anchor *
-* Return: As strcmp *
-***********************************************************************/
-#ifdef newlist
-int fnCmpAnchors(const void *e1, const void *e2 TSRMLS_DC)
-{
- ANCHOR *a1, **aa1, *a2, **aa2;
- zend_llist_element **ee1, **ee2;
- ee1 = (zend_llist_element **) e1;
- ee2 = (zend_llist_element **) e2;
- aa1 = (ANCHOR **) (*ee1)->data;
- aa2 = (ANCHOR **) (*ee2)->data;
- a1 = *aa1;
- a2 = *aa2;
-#else
-int fnCmpAnchors(ANCHOR *a1, ANCHOR *a2 TSRMLS_DC)
-{
-#endif
- if(a1->start < a2->start)
- return -1;
- if(a1->start == a2->start) {
- /* It's importent to check this case as well, because a link with
- a bigger end has to be inserted first.
- */
- if(a1->end < a2->end)
- return -1;
- /* If both start and end are equal (yes, it is possible)
- we will Src Anchor before a Dest anchor. There has been
- a case where an IMG was surrounded by a NAME which was
- surrounded by a HREF. In such a case the HREF doesn't
- work.
- */
- if(a1->end == a2->end) {
- if(a1->tanchor > a2->tanchor)
- return -1;
- }
- }
-
- return 1;
-}
-
-/***********************************************************************
-* Function fnCreateAnchorList() *
-* Uses either docofanchorrec or reldestrec to create a list of anchors *
-* depending on anchormode *
-* *
-* Returns a list of Anchors converted from an object record *
-* Parameter: int objectID: the object for which the list is created *
-* char **anchors: object records of anchors *
-* char **docofanchorrec: Name of destination absolut *
-* char **reldestrec: Name of destination relativ to current *
-* object *
-* int ancount: number of anchors *
-* int anchormode: 0 = use absolut dest, else rel. dest *
-* Return: List of Anchors, NULL if error *
-***********************************************************************/
-#ifdef newlist
-zend_llist *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode)
-#else
-DLIST *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode)
-#endif
-{
- int start, end, i, destid, anchordestid, objectID;
- ANCHOR *cur_ptr = NULL;
-#ifdef newlist
- zend_llist *pAnchorList;
- pAnchorList = (zend_llist *) emalloc(sizeof(zend_llist));
- zend_llist_init(pAnchorList, sizeof(char *), fnDeleteAnchor, 0);
-#else
- DLIST *pAnchorList = dlst_init();
-#endif
-
- for(i=ancount-1; i>=0; i--) {
- char *object = NULL;
- char *docofanchorptr = NULL;
- char *reldestptr = NULL;
- char *str, *str1, link[200];
-
- if(NULL != anchors[i]) {
- object = anchors[i];
- docofanchorptr = docofanchorrec[i];
- if(reldestrec) /* FIXME reldestrec may only be NULL if anchormode != 0 */
- reldestptr = reldestrec[i];
-
- /* Determine Position. Doesn't matter if Src or Dest
- The Position field should always be there. Though there
- are case in which the position has no meaning, e.g. if
- a document is annotated and the annotation text doesn't
- contain a link of type annotation,
- In such a case the Position has the value 'invisible' */
- str = strstr(object, "Position");
- str += 9;
- if(((int) str != 9) && (0 != strncmp(str, "invisible", 9))) {
- sscanf(str, "0x%X 0x%X", &start, &end);
-
- /* Determine ObjectID */
- objectID = 0;
- if(NULL != (str = strstr(object, "ObjectID"))) {
- str += 9;
- sscanf(str, "0x%X", &objectID);
- }
-
- cur_ptr = fnAddAnchor(pAnchorList, objectID, start, end);
-
- /* Determine Type of Anchor */
- str = strstr(object, "TAnchor");
- str += 8;
- if(*str == 'S') {
- char destdocname[200];
- char nameanchor[200];
- cur_ptr->tanchor = 1;
-
- cur_ptr->destdocname = NULL;
- if(NULL != (str = strstr(object, "Dest"))) {
- char *tempptr;
-
- /* No need to care about the value of Dest, because we take the info
- from docofanchorptr.
- Since the anchor has a destination there are two possibilities.
- 1. The destination is an anchor or
- 2. or the destination is a document already.
- In both cases docofanchorptr has the proper info because GETDOCBYANCHOR
- is such a nice message.
- */
- switch(anchormode) {
- case 0:
- tempptr = docofanchorptr;
- break;
- default:
- tempptr = reldestptr;
- }
- if(NULL != tempptr) {
- destid = 0;
- if(NULL != (str = strstr(tempptr, "ObjectID="))) {
- str += 9;
- sscanf(str, "0x%X", &destid);
- }
- /* This is basically for NAME tags. There is no need
- to add the destname if it is the document itself.
- */
-/* if(destid == objID) {
- cur_ptr->destdocname = NULL;
- } else { */
- /* It's always nice to deal with names, so let's first check
- for a name. If there is none we take the ObjectID.
- */
- if(NULL != (str = strstr(tempptr, "Name="))) {
- str += 5;
- } else if(NULL != (str = strstr(tempptr, "ObjectID="))) {
- str += 9;
- }
- if(sscanf(str, "%s\n", destdocname)) {
- cur_ptr->destdocname = estrdup(destdocname);
- }
-/* } */
- }
- }
-
- /* Get the Id of the anchor destination and the document id that belongs
- to that anchor. We need that soon in order to determine if the anchor
- points to a document or a dest anchor in a document.
- */
- anchordestid = 0;
- if(NULL != (str = strstr(object, "Dest="))) {
- str += 5;
- sscanf(str, "0x%X", &anchordestid);
- }
-
- /* if anchordestid != destid then the destination is an anchor in a document whose
- name (objectID) is already in destdocname. We will have to extend the link
- by '#...'
- */
- cur_ptr->nameanchor = NULL;
- if(anchordestid != destid) {
- if(NULL != (str = strstr(object, "Dest="))) {
- str += 5;
- if(sscanf(str, "%s\n", nameanchor))
- cur_ptr->nameanchor = estrdup(nameanchor);
- }
- }
-
- if(!cur_ptr->destdocname) {
- cur_ptr->link = NULL;
- if(NULL != (str = strstr(object, "Hint=URL:"))) {
- str += 9;
- if(sscanf(str, "%s\n", link))
- cur_ptr->link = estrdup(link);
- } else if(NULL != (str = strstr(object, "Hint="))) {
- str += 5;
- if(sscanf(str, "%s\n", link))
- cur_ptr->link = estrdup(link);
- }
- }
-
- cur_ptr->fragment = NULL;
- if(NULL != (str = strstr(object, "Fragment="))) {
- str += 9;
- if(sscanf(str, "%s\n", link))
- cur_ptr->fragment = estrdup(link);
- }
-
- {
- char *htmlattr, *str2;
- int offset;
- str1 = object;
- htmlattr = emalloc(strlen(object)); /* alloc mem big enough for htmlattr */
- htmlattr[0] = '\0';
- offset = 0;
- while(NULL != (str = strstr(str1, "HtmlAttr="))) {
- str += 9;
- str1 = str;
- while((*str1 != '\n') && (*str1 != '\0'))
- str1++;
- /* Find the '=' in the HTML attr and make sure it is part of the
- attr and not somewhere in the objrec. */
- if((NULL != (str2 = strchr(str, '='))) && (str2 < str1)) {
- str2++;
- strncpy(&htmlattr[offset], str, str2 - str);
- offset = offset + (str2 - str);
- htmlattr[offset++] = '"';
- strncpy(&htmlattr[offset], str2, str1 - str2);
- offset = offset + (str1 - str2);
- htmlattr[offset++] = '"';
- htmlattr[offset++] = ' ';
- htmlattr[offset] = '\0';
- }
- }
- if(offset){
- /* remove last space */
- htmlattr[offset-1] = '\0';
- cur_ptr->htmlattr = estrdup(htmlattr);
- }
- efree(htmlattr);
- }
-
- if(NULL != (str = strstr(object, "LinkType="))) {
- str += 9;
- if(strncmp(str, "background", 10) == 0)
- cur_ptr->linktype=HW_BACKGROUND_LINK;
- else
- if(strncmp(str, "intagnodel", 10) == 0) { /* New type introduced by Uwe Steinmann 16.03.2001 */
- cur_ptr->linktype=HW_INTAGNODEL_LINK;
- cur_ptr->tagattr = NULL;
- if(NULL != (str = strstr(object, "TagAttr="))) {
- str += 8;
- str1 = str;
- while((*str1 != '\n') && (*str1 != '\0'))
- str1++;
- cur_ptr->tagattr = emalloc(str1 - str + 1);
- memcpy(cur_ptr->tagattr, str, str1 - str);
- cur_ptr->tagattr[str1 - str] = '\0';
- }
- } else
- if(strncmp(str, "intag", 5) == 0) {
- cur_ptr->linktype=HW_INTAG_LINK;
- cur_ptr->tagattr = NULL;
- if(NULL != (str = strstr(object, "TagAttr="))) {
- str += 8;
- str1 = str;
- while((*str1 != '\n') && (*str1 != '\0'))
- str1++;
- cur_ptr->tagattr = emalloc(str1 - str + 1);
- memcpy(cur_ptr->tagattr, str, str1 - str);
- cur_ptr->tagattr[str1 - str] = '\0';
- }
- } else
- if(strncmp(str, "applet", 6) == 0) {
- cur_ptr->linktype=HW_APPLET_LINK;
- cur_ptr->codebase = NULL;
- if(NULL != (str = strstr(object, "CodeBase="))) {
- str += 9;
- str1 = str;
- while((*str1 != '\n') && (*str1 != '\0'))
- str1++;
- cur_ptr->codebase = emalloc(str1 - str + 1);
- memcpy(cur_ptr->codebase, str, str1 - str);
- cur_ptr->codebase[str1 - str] = '\0';
- }
- cur_ptr->code = NULL;
- if(NULL != (str = strstr(object, "Code="))) {
- str += 5;
- str1 = str;
- while((*str1 != '\n') && (*str1 != '\0'))
- str1++;
- cur_ptr->code = emalloc(str1 - str + 1);
- memcpy(cur_ptr->code, str, str1 - str);
- cur_ptr->code[str1 - str] = '\0';
- }
- } else
- cur_ptr->linktype=HW_DEFAULT_LINK;
- } else
- cur_ptr->linktype=HW_DEFAULT_LINK;
-
- } else { /* Destination Anchor */
- char nameanchor[200];
-
- cur_ptr->tanchor = 2;
- cur_ptr->link = NULL;
-
- /* Here is the only additional info for the name attribute */
- cur_ptr->nameanchor = NULL;
- if(NULL != (str = strstr(object, "ObjectID="))) {
- str += 9;
- if(sscanf(str, "%s\n", nameanchor))
- cur_ptr->nameanchor = estrdup(nameanchor);
- }
-
- cur_ptr->keyword = NULL;
- if(NULL != (str = strstr(object, "Keyword="))) {
- str += 8;
- if(sscanf(str, "%s\n", nameanchor))
- cur_ptr->keyword = estrdup(nameanchor);
- }
-
- }
-
- }
- /* free memory even if it is an invisible anchor */
- efree(anchors[i]);
- if(docofanchorrec[i]) efree(docofanchorrec[i]);
- if(reldestrec)
- if(reldestrec[i]) efree(reldestrec[i]);
- }
- }
- return pAnchorList;
-}
-
-/***********************************************************************
-* Function fnInsAnchorsIntoText() *
-* *
-* Returns the text document with all anchors inserted form list *
-* Parameter: char *text: text without anchors *
-* DList *pAnchorList: list of anchors *
-* Return: Text with anchors *
-***********************************************************************/
-#define BUFFERLEN 200
-#ifdef newlist
-char *fnInsAnchorsIntoText(char *text, zend_llist *pAnchorList, char **bodytag, char **urlprefix) {
- ANCHOR **ptr;
-#else
-char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char **urlprefix) {
-#endif
- ANCHOR *cur_ptr;
- char bgstr[BUFFERLEN], istr[BUFFERLEN];
- char **scriptname;
- char *newtext;
- int offset = 0;
- int laststart=0;
- char emptystring[BUFFERLEN];
- int i;
- TSRMLS_FETCH();
-
- emptystring[0] = '\0';
-
-/* The following is very tricky and depends on how rewriting is setup on your webserver.
- If you skip the scriptname in the url you will have to map each hyperwave name
- to http://<hwname>. This may not always be a good idea. The best solution is
- probably to provide a prefix for such
- a case which is an optional parameter to hw_gettext() or hw_pipedocument().
- FIXME: Currently, the variable SCRIPT_NAME is empty thouht SCRIPT_URL is
- not. In our case this is OK, since as mentioned above it is better to have no
- SCRIPT_NAME than to have if rewriting is on.
-*/
- if(urlprefix) {
- scriptname = urlprefix;
- } else {
- zval **script_name;
- scriptname = emalloc(5*sizeof(char *));
- if (zend_hash_find(&EG(symbol_table), "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &script_name)==FAILURE)
- for(i=0; i<5; i++)
- scriptname[i] = &emptystring;
- else {
- convert_to_string_ex(script_name);
- for(i=0; i<5; i++)
- scriptname[i] = Z_STRVAL_PP(script_name);
- }
-
-#if 0
-#if APACHE
- {
- int j;
- array_header *arr = table_elts(((request_rec *) SG(server_context))->subprocess_env);
- table_entry *elts = (table_entry *)arr->elts;
-
- for (j=0; j < arr->nelts; j++) {
- if((0 == strcmp(elts[j].key, "SCRIPT_NAME")) ||
- (0 == strcmp(elts[j].key, "SCRIPT_URL")))
- break;
- }
- scriptname = elts[j].val;
- }
-#else
- scriptname = getenv("SCRIPT_FILENAME");
-#endif
-#endif
- }
-
- newtext = text;
- bgstr[0] = '\0';
-#ifdef newlist
- zend_llist_sort(pAnchorList, fnCmpAnchors TSRMLS_CC);
- ptr = (ANCHOR **) zend_llist_get_last(pAnchorList);
- if(ptr)
- cur_ptr = *ptr;
- while(NULL != ptr) {
-#else
- dlst_mergesort(pAnchorList, fnCmpAnchors);
- cur_ptr = (ANCHOR *) dlst_last(pAnchorList);
- while(NULL != cur_ptr) {
-#endif
-
- istr[0] = '\0';
- if(cur_ptr->tanchor == 1) { /* Src Anchor */
- if(laststart >= cur_ptr->end)
- offset = 0;
- if((cur_ptr->link != NULL) && (cur_ptr->link[0] != '\0')) {
- /* The link is only set if the Link points to an external document */
- switch(cur_ptr->linktype) {
- case HW_BACKGROUND_LINK:
- snprintf(istr, BUFFERLEN, " background='%s'", cur_ptr->link);
- break;
- case HW_INTAG_LINK:
- snprintf(istr, BUFFERLEN, " %s='%s'", cur_ptr->tagattr, cur_ptr->link);
- offset -= 4; /* because there is no closing tag </A> */
-/* laststart = cur_ptr->start; */
- break;
- case HW_INTAGNODEL_LINK:
- snprintf(istr, BUFFERLEN, "%s", cur_ptr->link);
- offset -= 4; /* because there is no closing tag </A> */
-/* laststart = cur_ptr->start; */
- break;
- case HW_APPLET_LINK:
- if(cur_ptr->codebase)
- snprintf(istr, BUFFERLEN, " CODEBASE='%s' CODE='%s'", cur_ptr->codebase, cur_ptr->code);
- else
- snprintf(istr, BUFFERLEN, " CODEBASE='/' CODE='%s'", cur_ptr->code);
- break;
- default:
- newtext = fnInsStr(newtext, cur_ptr->end+offset, "</A>");
- if(cur_ptr->fragment)
- snprintf(istr, BUFFERLEN, "<A HREF='%s#%s'", cur_ptr->link, cur_ptr->fragment);
- else
- snprintf(istr, BUFFERLEN, "<A HREF='%s'", cur_ptr->link);
- if(cur_ptr->htmlattr) {
- strncat(istr, " ", BUFFERLEN - 1 - strlen(istr));
- strncat(istr, cur_ptr->htmlattr, BUFFERLEN - 1 - strlen(istr));
- }
- strncat(istr, ">", BUFFERLEN - 1 - strlen(istr));
- }
- } else {
- switch(cur_ptr->linktype) {
- case HW_BACKGROUND_LINK:
- if(NULL != cur_ptr->destdocname) {
- snprintf(istr, BUFFERLEN, " background='%s/%s'", scriptname[HW_BACKGROUND_LINK], cur_ptr->destdocname);
- } else
- istr[0] = '\0';
- break;
- case HW_INTAG_LINK:
- if(cur_ptr->fragment)
- snprintf(istr, BUFFERLEN, " %s='#%s'", cur_ptr->tagattr, cur_ptr->fragment);
- else
- snprintf(istr, BUFFERLEN, " %s='%s/%s'", cur_ptr->tagattr, scriptname[HW_INTAG_LINK], cur_ptr->destdocname);
- offset -= 4; /* because there is no closing tag </A> */
- break;
- case HW_INTAGNODEL_LINK:
- snprintf(istr, BUFFERLEN, "%s", cur_ptr->destdocname);
- offset -= 4; /* because there is no closing tag </A> */
- break;
- case HW_APPLET_LINK:
- if(cur_ptr->codebase)
-/* snprintf(istr, BUFFERLEN, " CODEBASE='%s%s' CODE='%s'", scriptname == NULL ? "" : scriptname, cur_ptr->codebase, cur_ptr->code); */
- snprintf(istr, BUFFERLEN, " CODEBASE='%s%s' CODE='%s'", scriptname[HW_APPLET_LINK], cur_ptr->codebase, cur_ptr->code);
- else
- snprintf(istr, BUFFERLEN, " CODEBASE='/' CODE='%s'", cur_ptr->code);
- break;
- default:
- newtext = fnInsStr(newtext, cur_ptr->end+offset, "</A>");
-
- if(cur_ptr->nameanchor)
- snprintf(istr, BUFFERLEN, "<A HREF='%s/%s#%s'", scriptname[HW_DEFAULT_LINK], cur_ptr->destdocname, cur_ptr->nameanchor);
- else if(cur_ptr->fragment)
- snprintf(istr, BUFFERLEN, "<A HREF=\"%s/%s#%s\"", scriptname[HW_DEFAULT_LINK], cur_ptr->destdocname, cur_ptr->fragment);
- else
- snprintf(istr, BUFFERLEN, "<A HREF='%s/%s'", scriptname[HW_DEFAULT_LINK], cur_ptr->destdocname);
-
- if(cur_ptr->htmlattr) {
- strncat(istr, " ", BUFFERLEN - 1 - strlen(istr));
- strncat(istr, cur_ptr->htmlattr, BUFFERLEN - 1 - strlen(istr));
- }
- strncat(istr, ">", BUFFERLEN - 1 - strlen(istr));
- }
- }
- } else {
- if(laststart >= cur_ptr->end)
- offset = 0;
- newtext = fnInsStr(newtext, cur_ptr->end+offset, "</a>");
-
- /* If we have a keyword, we assume we had a fragment which has been used
- instead of the destdocname
- */
- if(cur_ptr->keyword)
- snprintf(istr, BUFFERLEN, "<A NAME='%s'>", cur_ptr->keyword);
- else if(cur_ptr->nameanchor)
- snprintf(istr, BUFFERLEN, "<A NAME='%s'>", cur_ptr->nameanchor);
- }
- newtext = fnInsStr(newtext, cur_ptr->start, istr);
- /* In case there are several TAGS nested, we accumulate the offset
- You wonder what the 4 means? It's the length of </A> */
- offset += strlen(istr) + 4;
- laststart = cur_ptr->start;
-#ifdef newlist
- ptr = (ANCHOR **) zend_llist_get_prev(pAnchorList);
- if(ptr)
- cur_ptr = *ptr;
-#else
- cur_ptr = (ANCHOR *) dlst_prev(cur_ptr);
-#endif
- }
- snprintf(istr, BUFFERLEN, "<BODY %s>", bgstr);
- *bodytag = estrdup(istr);
-/* if(scriptname != urlprefix) efree(scriptname); */
- if(scriptname != NULL) efree(scriptname);
- return(newtext);
-}
-#undef BUFFERLEN
-
-/***********************************************************************
-* Function fnAttributeValue() *
-* *
-* Returns the value of an attribute *
-* Parameter: char *object: object record *
-* char *attrname: attribute name *
-* Return: char*: attribute value, NULL if name not found *
-***********************************************************************/
-char *fnAttributeValue(char *object, char *attrname)
-{
- char *str, *str1, *attrvalue;
- int len;
-
- str = strstr(object, attrname);
- if(NULL == str)
- return(NULL);
- str += strlen(attrname);
- str++;
- str1 = str;
- while((*str1 != '\0') && (*str1 != '\n'))
- str1++;
- len = str1 - str;
- if(NULL == (attrvalue = emalloc(len+1))) {
- lowerror = LE_MALLOC;
- return NULL;
- }
- memcpy(attrvalue, str, len);
- attrvalue[len] = '\0';
- return(attrvalue);
-}
-
-/***********************************************************************
-* Function fnAttributeCompare() *
-* *
-* Checks if an attribute in an objrec has a certain value *
-* Parameter: char *object: object record *
-* char *attrname: attribute name *
-* char *value: value of attribute *
-* Return: char*: as strcmp *
-***********************************************************************/
-int fnAttributeCompare(char *object, char *attrname, char *value)
-{
- char *str, *str1;
- int len;
-
- if((NULL == object) || (NULL == attrname) || (NULL == value))
- return -2;
-
- /* Find the attribute Name and make sure it is followed by
- a '=' sign and preceded by a '\n';
- */
- str = strstr(object, attrname);
- if((NULL == str) ||
- (str[strlen(attrname)] != '=') ||
- (str[-1] != '\n')) {
- return(-2);
- }
- str += strlen(attrname); /* skip the attribute name */
- str++; /* skip the equal sign */
-
- /* Search for end of attribute value */
- str1 = str;
- while((*str1 != '\0') && (*str1 != '\n'))
- str1++;
- len = str1 - str;
- return(strncmp(str, value, len));
-}
-
-/*********************************************************************
-* Function fnCOpenDataCon() *
-* *
-* Opens data connection on client side. This function is called *
-* right after the client has requested any data from the server *
-* Parameter: int sockfd: socket of control connection *
-* int *port: port of control und data connection *
-* Return : sockfd on success, <0 if error *
-*********************************************************************/
-static int fnCOpenDataCon(int sockfd, int *port)
- {
- int fd;
- struct sockaddr_in serv_addr;
- int len;
- int option = 1;
-
-/* len = sizeof(com_addr);
- if(getsockname(sockfd, (struct sockaddr *) &com_addr, &len) < 0)
- {
- return(-1);
- }
-
- *port = htons(com_addr.sin_port); */
-
- /*
- ** Open a TCP socket (an Internet stream socket)
- */
- if((fd = socket(AF_INET, SOCK_STREAM, 0)) == SOCK_ERR)
- {
- return(-1);
- }
-
- /*
- ** Make sure that address may be reused
- */
-#if defined(SUN) || defined(PHP_WIN32)
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&option, sizeof(option));
-#else
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
-#endif
-
- /*
- ** Open connection aktiv
- ** Let bind() select a port number
- */
- bzero((char *) &serv_addr, sizeof(serv_addr));
- if(bind(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
- {
- return(-1);
- }
-
- /*
- ** Get the port number bind selected
- */
- len = sizeof (serv_addr);
- if(getsockname(fd, (struct sockaddr *)&serv_addr, &len) < 0)
- {
- return(-1);
- }
- *port = ntohs(serv_addr.sin_port);
-
- listen(fd, 5);
-
- return(fd);
- }
-
-/*======================================================================
- *
- * Read/write routines with timeout detection.
- *
- * Usage: write_to(fd, buffer, n, timeout)
- * read_to(fd, buffer, n, timeout)
- *
- * David Chavez
- * Engineering Services & Software
- * 7841 New Salem Street
- * San Diego, CA 92126
- * USA
- *
- * dec@essw.com
- *
- *====================================================================*/
-#ifdef PHP_WIN32
-#include <time.h>
-#else
-#include <sys/fcntl.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#endif
-#include <errno.h>
-#include <signal.h>
-
-#ifndef PHP_WIN32
-static sigset_t newmask, oldmask, zeromask;
-#endif
-
-static int set_noblock(int fd)
-{
-#ifdef PHP_WIN32
- u_long argp=1;
-
- return ioctlsocket (fd, FIONBIO , &argp);
-#else
-
- sigemptyset(&zeromask);
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGHUP);
- sigaddset(&newmask, SIGUSR1);
- sigaddset(&newmask, SIGUSR2);
- if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) return -1;
-
- return fcntl(fd, F_SETFL, O_NONBLOCK | O_NDELAY /* | FNBIO*/);
-#endif
-}
-
-int write_to(int fd, void *buffer, int n, int timeout)
-{
- int nrem, nw=0;
- char *bptr;
- int error=0;
-#if defined(SYSV) || defined(PHP_WIN32)
- int width = 20;
-#else
- int width = getdtablesize();
-#endif
- fd_set writefds;
- struct timeval select_timeout;
-
- select_timeout.tv_sec = timeout;
-#ifdef PHP_WIN32
- select_timeout.tv_usec = 0;
-#else /* is this just a typo? */
- select_timeout.tv_usec = 0.;
-#endif
-
- /* Set fd to non-blocking */
-
- if (set_noblock(fd) != 0) return -1;
-
- /* Write to fd until no more can be written */
-
- FD_ZERO(&writefds);
-
- FD_SET((unsigned int)fd, &writefds);
-
- for( nrem = n, bptr = buffer; nrem;)
- {
- if(( error = select(width,
- (fd_set *) 0,
- &writefds,
- (fd_set *) 0,
- &select_timeout)) <= 0 && errno != EINTR) break;
-
- if(errno != EINTR && ( nw = write(fd, bptr, nrem)) <= 0) {
- /*
- * check for error number - and keep trying to
- * write
- */
- if(errno == EWOULDBLOCK || errno == EAGAIN || errno == EINTR)
- {
- continue;
- }
- else
- {
- error = nw;
- break;
- }
- } else {
- nrem -= nw;
- bptr += nw;
- }
- }
-#ifndef PHP_WIN32
- if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) return -1;
-#endif
- if( ! error ) {
- errno = ETIMEDOUT;
- return(-2);
- } else if (error < 0) {
- return(error);
- } else {
- return(n);
- }
-}
-
-int read_to(int fd, char *buffer, int n, int timeout)
- {
- int nrem, nread, nr=0;
- char *bptr;
- int error=0;
-
-#if defined(SYSV) || defined(PHP_WIN32)
- int width = 20;
-#else
- int width = getdtablesize();
-#endif
- fd_set readfds;
- struct timeval select_timeout;
-
- select_timeout.tv_sec = timeout;
-#ifdef PHP_WIN32
- select_timeout.tv_usec = 0;
-#else
- select_timeout.tv_usec = 0.;
-#endif
-
- /* Set fd to non-blocking */
-
- if (set_noblock(fd) != 0) return -1;
-
- FD_ZERO(&readfds);
-
- FD_SET((unsigned int)fd, &readfds);
-
- for( nrem = n, bptr = buffer, nread = 0; nrem;)
- {
- if(( error = select(width,
- &readfds,
- (fd_set *) 0,
- (fd_set *) 0,
- &select_timeout)) <= 0 && errno != EINTR) break;
-
- if(errno != EINTR && (nr = read (fd, bptr, nrem)) < 0)
- {
- /*
- * check for error number - and keep trying to
- * read
- */
- if(errno == EWOULDBLOCK || errno == EAGAIN || errno == EINTR)
- {
- continue;
- }
- else
- {
- error = nr;
- break;
- }
- }
- else if(nr == 0)
- {
- break;
- }
- else
- {
- nread += nr;
- bptr += nr;
- nrem -= nr;
- }
- }
-
-#ifndef PHP_WIN32
- if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) return -1;
-#endif
- if( ! error )
- {
- errno = ETIMEDOUT;
- return(-2);
- }
- else if ( error < 0)
- {
- return(-1);
- }
- else
- {
- return(nread);
- }
- }
-
-void set_swap(int do_swap)
-{
- swap_on = do_swap;
-}
-
-/***********************************************************************
-* Function open_hg_connection() *
-* *
-***********************************************************************/
-int open_hg_connection(char *server_name, int port)
-{
- int sockfd;
- int option = 1;
- struct sockaddr_in server_addr;
- struct hostent *hp;
-
- if ( NULL == server_name )
- return(-1);
-
- if ( (hp = gethostbyname(server_name)) == NULL ) {
- return(-2);
- }
-
- bzero((char *)&server_addr, sizeof(server_addr));
- server_addr.sin_family = AF_INET;
- if ( port != 0 )
- server_addr.sin_port = htons(port);
- else
- server_addr.sin_port = htons(HG_SERVER_PORT);
-/* bcopy(hp->h_addr, (char *) &server_addr.sin_addr, hp->h_length); */
- server_addr.sin_addr = *(struct in_addr *) hp->h_addr;
-
- if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == SOCK_ERR ) {
- return(-3);
- }
-
-#if defined(SUN) || defined(PHP_WIN32)
- setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&option, sizeof(option));
-#else
- setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
-#endif /* SUN */
-
- if (connect(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
- HWSOCK_FCLOSE(sockfd);
- return(-4);
- }
-
-#ifndef PHP_WIN32
- if ( (sock_flags = fcntl(sockfd, F_GETFL, 0)) == -1 )
-#endif
-
- if ( set_nonblocking(sockfd) == -1 ) {
- HWSOCK_FCLOSE(sockfd);
- return(-5);
- }
-
- return(sockfd);
-}
-
-
-/***********************************************************************
-* Function initialize_hg_connection() *
-* *
-***********************************************************************/
-int initialize_hg_connection(int sockfd, int *do_swap, int *version, char **userdata, char **server_string, char *username, char *password)
-{
- char buf, c;
- char *tmp;
- hg_msg *ready_msg, *retmsg, msg;
- int i = 0x01;
- int length;
-
- *do_swap = 0;
- buf = 'T';
- if ( hg_write(sockfd, &buf, 1) == -1 ) {
- return(-2);
- }
-
- if ( hg_read_exact(sockfd, &buf, 1) == -1 ) {
- return(-3);
- }
- if ( buf == 'F' ) {
- return(-4);
- }
- if ( buf != 'T' ) {
- return(-5);
- }
-
- buf = c = ( *(char *)&i ) ? 'l' : 'B';
- if ( hg_write(sockfd, &buf, 1) == -1 ) {
- return(-6);
- }
- if ( hg_read_exact(sockfd, &buf, 1) == -1 ) {
- return(-7);
- }
- if ( c != buf ) {
- swap_on = 1;
- *do_swap = 1;
- } else {
- swap_on = 0;
- *do_swap = 0;
- }
-
- if ( send_ready(sockfd) == -1) {
- return(-8);
- }
-
- /* Receive return from Ready message */
- if ( (ready_msg = recv_ready(sockfd)) == NULL ) {
- return(-9);
- }
-
- if ((ready_msg->version_msgid & F_VERSION) < HW_VERSION)
- return(-8);
- *version = ready_msg->version_msgid;
- *server_string = strdup(ready_msg->buf+4);
- efree(ready_msg->buf);
- efree(ready_msg);
-
- /* If we have a username and password then do the identification. */
- if((NULL != username) && (NULL != password)) {
- length = HEADER_LENGTH + sizeof(int) + strlen(username) + 1 + strlen(password) + 1;
-
- build_msg_header(&msg, length, msgid++, IDENTIFY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 0);
- tmp = build_msg_str(tmp, username);
- tmp = build_msg_str(tmp, password);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-10);
- }
- efree(msg.buf);
- }
-
- if((NULL != username) && (NULL != password)) {
- /* Receive return form identify message */
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-11);
-
- *userdata = retmsg->buf;
- efree(retmsg);
- }
-
- return(0);
-}
-
-
-static int set_nonblocking(int fd)
-{
-#ifdef PHP_WIN32
- unsigned int argp=0;
-
-/* if ( sock_flags == -1 )
- getsockopt (fd, SOL_SOCKET, optname, optval, optlen);
-*/ if(ioctlsocket (fd, FIONBIO , &argp) == -1)
- return(-1);
-#else
- if ( sock_flags == -1 )
- sock_flags = fcntl(fd, F_GETFL, 0);
- if ( fcntl(fd, F_SETFL, O_NONBLOCK) == -1 )
- return(-1);
-#endif
- non_blocking = 1;
- return(0);
-}
-
-
-/*
-static int set_blocking(int fd)
-{
-#ifdef PHP_WIN32
- unsigned int argp=1;
-
- if(ioctlsocket (fd, FIONBIO , &argp) == -1)
- return(-1);
-#else
- if ( fcntl(fd, F_SETFL, sock_flags) == -1 )
- return(-1);
-#endif
- return(0);
-}
-*/
-
-static int hg_read_exact(int sockfd, char *buf, int size)
-{
- int len = 0;
-
- len = read_to(sockfd, (void *) buf, size, rtimeout);
- if ( len < 0 )
- return -1;
- return(len);
-}
-
-/*
-static int hg_read(int sockfd, char *buf, int size)
-{
- int try = 0;
- int len = 0;
-
- if ( !non_blocking )
- set_nonblocking(sockfd);
- while ( len == 0 ) {
- len = recv(sockfd, (void *) buf, size, 0);
- if ( len == -1 ) {
- if ( (errno == EAGAIN) || (errno == EWOULDBLOCK) ) {
- if ( ++try > 5 )
- return(-1);
- php_sleep(1);
- }
- else return(-1);
- }
- }
- return(len);
-}
-*/
-
-static int hg_write(int sockfd, char *buf, int size)
-{
- int try = 0;
- int len = 0;
-
- if ( !non_blocking )
- set_nonblocking(sockfd);
- while ( size > 0 ) {
- len = send(sockfd, (void *) buf, size, 0);
- if ( len == -1 ) {
- if ( (errno == EAGAIN) || (errno == EWOULDBLOCK) ) {
- if ( ++try > 5 )
- return(-1);
- php_sleep(1);
- }
- else return(-1);
- }
- else {
- size -= len;
- buf += len;
- try = 0;
- }
- }
- return(0);
-}
-
-hg_msg *recv_hg_msg_head(int sockfd)
-{
- hg_msg *msg;
-
- if ( (msg = (hg_msg *)emalloc(sizeof(hg_msg))) == NULL ) {
- lowerror = LE_MALLOC;
- return(NULL);
- }
-
- if ( hg_read_exact(sockfd, (char *)&(msg->length), 4) == -1 ) {
- efree(msg);
- return(NULL);
- }
-
- if ( hg_read_exact(sockfd, (char *)&(msg->version_msgid), 4) == -1 ) {
- efree(msg);
- return(NULL);
- }
-
- if ( hg_read_exact(sockfd, (char *)&(msg->msg_type), 4) == -1 ) {
- efree(msg);
- return(NULL);
- }
-
-#ifdef HW_DEBUG
- php_printf("<b> Recv msg: </b>type = %d -- id = %d<br />\n", msg->msg_type, msg->version_msgid);
-#endif
- return(msg);
-}
-
-
-hg_msg *recv_hg_msg(int sockfd)
-{
- hg_msg *msg;
-
- if ( (msg = (hg_msg *)emalloc(sizeof(hg_msg))) == NULL ) {
-/* php_printf("recv_hg_msg"); */
- lowerror = LE_MALLOC;
- return(NULL);
- }
-
- if ( hg_read_exact(sockfd, (char *)&(msg->length), 4) == -1 ) {
-/* php_printf("recv_hg_msg: hg_read (1) returned -1\n"); */
- efree(msg);
- return(NULL);
- }
-
- if ( hg_read_exact(sockfd, (char *)&(msg->version_msgid), 4) == -1 ) {
-/* php_printf("recv_hg_msg: hg_read (2) returned -1\n"); */
- efree(msg);
- return(NULL);
- }
-
- if ( hg_read_exact(sockfd, (char *)&(msg->msg_type), 4) == -1 ) {
-/* php_printf("recv_hg_msg: hg_read (3) returned -1\n"); */
- efree(msg);
- return(NULL);
- }
-
- if ( msg->length > HEADER_LENGTH ) {
- if ( (msg->buf = (char *) emalloc(msg->length-HEADER_LENGTH)) == NULL ) {
-/* php_printf("recv_hg_msg"); */
- lowerror = LE_MALLOC;
- efree(msg);
- return(NULL);
- }
- if ( hg_read_exact(sockfd, msg->buf, msg->length-HEADER_LENGTH) == -1 ) {
-/* php_printf("recv_hg_msg: hg_read (4) returned -1\n"); */
- efree(msg->buf);
- efree(msg);
- return(NULL);
- }
- }
- else
- msg->buf = NULL;
-
-#ifdef HW_DEBUG
- php_printf("<b> Recv msg: </b>type = %d -- id = %d<br />\n", msg->msg_type, msg->version_msgid);
-#endif
- return(msg);
-}
-
-
-hg_msg *recv_ready(int sockfd)
-{
- hg_msg *ready_msg;
-
- if ( (ready_msg = recv_hg_msg(sockfd)) == NULL ) {
-/* php_printf("recv_ready: recv_hg_msg returned NULL\n"); */
- return(NULL);
- }
- if ( ready_msg->msg_type != READY_MESSAGE ) {
-/* php_printf("recv_ready: recv_hg_msg returned wrong message: %d, %d \n", ready_msg->length, ready_msg->msg_type); */
- efree(ready_msg);
- return(NULL);
- }
-
- return(ready_msg);
-}
-
-
-hg_msg *recv_command(int sockfd)
-{
- hg_msg *comm_msg;
-
- if ( (comm_msg = recv_hg_msg(sockfd)) == NULL ) {
-/* fprintf(stderr, "recv_command: recv_hg_msg returned NULL\n"); */
- return(NULL);
- }
- if ( comm_msg->msg_type != COMMAND_MESSAGE ) {
-/* fprintf(stderr, "recv_command: recv_hg_msg returned wrong message\n"); */
- return(NULL);
- }
-
- return(comm_msg);
-}
-
-int send_dummy(int sockfd, hw_objectID objectID, int msgid, char **attributes)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, msgid);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- *attributes = NULL;
- return(-1);
- }
-
- if(0 == (int) *(retmsg->buf)) {
- *attributes = estrdup(retmsg->buf+sizeof(int));
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *((int *) retmsg->buf);
- *attributes = NULL;
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-static int bh_send_deleteobject(int sockfd, hw_objectID objectID) {
- hg_msg msg;
- int length;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, DELETEOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
- return(msgid-1);
-}
-
-static int uh_send_deleteobject(int sockfd) {
- hg_msg *retmsg;
- int error;
-
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- if(NULL == retmsg->buf) {
- efree(retmsg);
- return -1;
- }
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return(error);
-}
-
-int send_deleteobject(int sockfd, hw_objectID objectID)
-{
- if(0 > bh_send_deleteobject(sockfd, objectID))
- return -1;
- return(uh_send_deleteobject(sockfd));
-}
-
-static int bh_send_changeobject(int sockfd, hw_objectID objectID, char *mod) {
- hg_msg msg;
- int length;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(mod) + 1;
-
- build_msg_header(&msg, length, msgid++, CHANGEOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- tmp = build_msg_str(tmp, mod);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
- return(msgid-1);
-}
-
-static int uh_send_changeobject(int sockfd) {
- hg_msg *retmsg;
- int error;
-
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return(error);
-}
-
-int send_changeobject(int sockfd, hw_objectID objectID, char *modification)
-{
- if(0 > bh_send_changeobject(sockfd, objectID, modification))
- return -1;
- return(uh_send_changeobject(sockfd));
-}
-
-int send_groupchangeobject(int sockfd, hw_objectID objectID, char *modification)
-{
- hw_objectID *childIDs;
- int count, i, error;
-
- if(0 == (error = send_lock(sockfd, objectID))) {
- send_changeobject(sockfd, objectID, modification);
- send_unlock(sockfd, objectID);
- }/* else
- fprintf(stderr, "Could not lock 0x%X (error = %d)\n", objectID, error); */
-
- if(0 == send_children(sockfd, objectID, &childIDs, &count)) {
-/* fprintf(stderr, "Changing Children of 0x%X\n", objectID); */
- for(i=0; i<count; i++)
- if(0 > send_groupchangeobject(sockfd, childIDs[i], modification))
-/* fprintf(stderr, "Cannot change 0x%X\n", objectID) */;
- if(childIDs)
- efree(childIDs);
- }/* else
- fprintf(stderr, "No Children of 0x%X\n", objectID); */
- return(0);
-}
-
-static int bh_send_getobject(int sockfd, hw_objectID objectID) {
- hg_msg msg;
- int length;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
- return(msgid-1);
-}
-
-static int uh_send_getobject(int sockfd, char **attributes) {
- hg_msg *retmsg;
- int error;
-
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- *attributes = NULL;
- return(-1);
- }
-
- if(0 == (int) *(retmsg->buf)) {
- *attributes = estrdup(retmsg->buf+sizeof(int));
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *((int *) retmsg->buf);
- *attributes = NULL;
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-int send_getobject(int sockfd, hw_objectID objectID, char **attributes)
-{
- if(0 > bh_send_getobject(sockfd, objectID))
- return -1;
- return(uh_send_getobject(sockfd, attributes));
-}
-
-int send_getandlock(int sockfd, hw_objectID objectID, char **attributes)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETANDLOCK_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- *attributes = NULL;
- return(-1);
- }
-
- if(0 == (error = (int) *(retmsg->buf))) {
- *attributes = estrdup(retmsg->buf+sizeof(int));
- } else {
- *attributes = NULL;
- }
-
- efree(retmsg->buf);
- efree(retmsg);
- return error;
-}
-
-int send_lock(int sockfd, hw_objectID objectID)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETANDLOCK_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- error = *((int *) retmsg->buf);
-
- efree(retmsg->buf);
- efree(retmsg);
- return error;
-}
-
-int send_insertobject(int sockfd, char *objrec, char *parms, hw_objectID *objectID)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr;
-
- length = HEADER_LENGTH + strlen(objrec) + 1 + strlen(parms) + 1;
-
- build_msg_header(&msg, length, msgid++, INSERTOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, objrec);
- tmp = build_msg_str(tmp, parms);
-/*fprintf(stderr, "objrec = %s, parms = %s\n", objrec, parms); */
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- *objectID = 0;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(0 == (error = *ptr)) {
- ptr++;
- *objectID = *ptr;
- } else {
- *objectID = 0;
- }
- efree(retmsg->buf);
- efree(retmsg);
- return error;
-}
-
-int send_unlock(int sockfd, hw_objectID objectID)
-{
- hg_msg msg;
- int length;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, UNLOCK_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- return 0;
-}
-
-int send_incollections(int sockfd, int retcol, int cobjids, hw_objectID *objectIDs, int ccollids, hw_objectID *collIDs, int *count, hw_objectID **retIDs)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, *ptr1, i;
-
- length = HEADER_LENGTH + sizeof(hw_objectID) + (cobjids + ccollids) * sizeof(hw_objectID) + 2 * sizeof(int);
-
- build_msg_header(&msg, length, msgid++, INCOLLECTIONS_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-3);
- }
-
- tmp = build_msg_int(msg.buf, retcol);
- tmp = build_msg_int(tmp, cobjids);
- for(i=0; i<cobjids; i++)
- tmp = build_msg_int(tmp, objectIDs[i]);
- tmp = build_msg_int(tmp, ccollids);
- for(i=0; i<ccollids; i++)
- tmp = build_msg_int(tmp, collIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr;
- ptr++;
- if(NULL != (*retIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *retIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- if(retmsg->buf) efree(retmsg->buf);
- if(retmsg) efree(retmsg);
- return error;
- }
- return(0);
-}
-
-
-int send_inscoll(int sockfd, hw_objectID objectID, char *objrec, hw_objectID *new_objectID)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(objrec) + 1;
-
- build_msg_header(&msg, length, msgid++, INSCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-3);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- tmp = build_msg_str(tmp, objrec);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(0 != (error = *ptr)) {
- efree(retmsg->buf);
- efree(retmsg);
- *new_objectID = 0;
- return error;
- }
-
- ptr++;
- *new_objectID = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- return 0;
-}
-
-int send_insdoc(int sockfd, hw_objectID objectID, char *objrec, char *text, hw_objectID *new_objectID)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(objrec) + 1;
- if(text) {
- length += strlen(text);
- length++;
- }
-
- build_msg_header(&msg, length, msgid++, INSDOC_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-3);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- tmp = build_msg_str(tmp, objrec);
- if(text)
- tmp = build_msg_str(tmp, text);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(0 != (error = *ptr)) {
- efree(retmsg->buf);
- efree(retmsg);
- *new_objectID = 0;
- return error;
- }
-
- ptr++;
- *new_objectID = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- return 0;
-}
-
-int send_getdestforanchorsobj(int sockfd, char **anchorrec, char ***destrec, int count);
-int send_getreldestforanchorsobj(int sockfd, char **anchorrec, char ***reldestrec, int count, int rootID, int thisID);
-
-int send_gettext(int sockfd, hw_objectID objectID, int mode, int rootid, char **objattr, char **bodytag, char **text, int *count, char *urlprefix)
-{
- hg_msg msg, *retmsg;
- int length, *ptr, ancount, error;
- char *tmp, *attributes, *documenttype;
- char **anchors;
- int i;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- attributes = NULL;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(*ptr == 0) {
- attributes = estrdup(retmsg->buf+sizeof(int));
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *ptr;
- attributes = NULL;
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- length = HEADER_LENGTH + strlen(attributes) + 1;
- build_msg_header(&msg, length, msgid++, GETTEXT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, attributes);
-
- documenttype = fnAttributeValue(attributes, "DocumentType");
- *objattr = strdup(attributes);
- efree(attributes);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if (retmsg == NULL) {
- *text = NULL;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(*ptr == 0) {
- ptr++;
- *count = retmsg->length-HEADER_LENGTH-sizeof(int);
- if(NULL != (*text = malloc(*count + 1))) {
- memcpy(*text, retmsg->buf+sizeof(int), *count);
-/* *text[*count] = 0; */
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- *text = NULL;
- return(error);
- }
- efree(retmsg->buf);
- efree(retmsg);
-
- if((documenttype != NULL) && (strcmp(documenttype, "Image") != 0)) {
- if(send_getanchorsobj(sockfd, objectID, &anchors, &ancount) == 0) {
- char **destrec, **reldestrec;
-#ifdef newlist
- zend_llist *pAnchorList;
-#else
- DLIST *pAnchorList;
-#endif
-
- /* Get dest as relative and absolut path */
- send_getdestforanchorsobj(sockfd, anchors, &destrec, ancount);
- send_getreldestforanchorsobj(sockfd, anchors, &reldestrec, ancount, rootid, objectID);
- pAnchorList = fnCreateAnchorList(objectID, anchors, destrec, reldestrec, ancount, mode);
-
- /* Free only the array, the objrecs has been freed in fnCreateAnchorList() */
- if(anchors) efree(anchors);
- if(destrec) efree(destrec);
- if(reldestrec) efree(reldestrec);
-
- if(pAnchorList != NULL) {
- char *newtext;
- char *body = NULL;
- char **prefixarray;
-
- prefixarray = emalloc(5*sizeof(char *));
- for(i=0; i<5; i++)
- prefixarray[i] = urlprefix;
-
- newtext = fnInsAnchorsIntoText(*text, pAnchorList, &body, prefixarray);
-
- efree(prefixarray);
-#ifdef newlist
- zend_llist_destroy(pAnchorList);
- efree(pAnchorList);
-#else
- dlst_kill(pAnchorList, fnDeleteAnchor);
-#endif
- *bodytag = strdup(body);
- if(body) efree(body);
- *text = newtext;
- *count = strlen(newtext);
- }
- }
- }
-
- if(documenttype) efree(documenttype);
- return(0);
-}
-
-int send_insertanchors(char **text, int *count, char **anchors, char **destrec, int ancount, char **urlprefix, char **bodytag) {
- char **reldestrec = NULL;
- int mode = 0;
- hw_objectID objectID = 0;
-#ifdef newlist
- zend_llist *pAnchorList = NULL;
-#else
- DLIST *pAnchorList = NULL;
-#endif
- pAnchorList = fnCreateAnchorList(objectID, anchors, destrec, reldestrec, ancount, mode);
-
- /* Free only the array, the objrecs has been freed in fnCreateAnchorList() */
- if(anchors) efree(anchors);
- if(destrec) efree(destrec);
- if(reldestrec) efree(reldestrec);
-
- if(pAnchorList != NULL) {
- char *newtext;
- char *body = NULL;
-
- newtext = fnInsAnchorsIntoText(*text, pAnchorList, &body, urlprefix);
-
-#ifdef newlist
- zend_llist_destroy(pAnchorList);
- efree(pAnchorList);
-#else
- dlst_kill(pAnchorList, fnDeleteAnchor);
-#endif
- *bodytag = strdup(body);
- if(body) efree(body);
- *text = newtext;
- *count = strlen(newtext);
- }
- return 0;
-}
-
-int send_edittext(int sockfd, char *objattr, char *text)
-{
- hg_msg msg, *retmsg;
- int length, *ptr, error;
- char *tmp, *path, *objid;
- hw_objectID objectID;
-
- objid = fnAttributeValue(objattr, "ObjectID");
- if(objid == NULL)
- return(-1);
- if(!sscanf(objid, "0x%x", &objectID))
- return(-2);
-
- path = fnAttributeValue(objattr, "Path");
- if(path == NULL)
- return(-3);
-
- length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(path) + 1 + 1 + strlen(text) + 1;
- build_msg_header(&msg, length, msgid++, EDITTEXT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-4);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- tmp = build_msg_str(tmp, path);
- tmp = build_msg_str(tmp, "");
- tmp = build_msg_str(tmp, text);
-
- if(path) efree(path);
- if(objid) efree(objid);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-5);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if (retmsg == NULL) {
- *text = '\0';
- return(-6);
- }
-
- ptr = (int *) retmsg->buf;
- error = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- return(error);
-}
-
-int send_getcgi(int sockfd, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count)
-{
- hg_msg msg, *retmsg;
- int length, *ptr, error, new_attr_len;
- char *tmp, *attributes, *new_attr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- attributes = NULL;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(*ptr == 0) {
- attributes = estrdup(retmsg->buf+sizeof(int));
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *ptr;
- attributes = NULL;
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- new_attr_len = strlen(attributes) + strlen(cgi_env_str) + 2;
- new_attr = malloc(new_attr_len);
- strcpy(new_attr, attributes);
- strcat(new_attr, cgi_env_str);
- length = HEADER_LENGTH + strlen(new_attr) + 1 + sizeof(int);
- build_msg_header(&msg, length, msgid++, GETCGI_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, new_attr);
- tmp = build_msg_int(tmp, 0);
-
- *objattr = strdup(attributes);
- efree(attributes);
- free(new_attr);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if (retmsg == NULL) {
- *text = NULL;
- return(-1);
- }
-
- /* Attention: It looks like the documentation is not quite right.
- According to the docs the buffer starts with an integer which
- is followed by the output of the cgi script. This seems not to
- be true. There is another integer right after the error.
- The output of the cgi script is also preceded by the 'Content-type'
- header. */
- ptr = (int *) retmsg->buf;
- if(*ptr++ == 1024) {
- *count = *ptr++;
- if(NULL != (*text = malloc(*count + 1))) {
- memcpy(*text, ptr, *count);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *ptr + 1024; /* move errors to >2024 */
- efree(retmsg->buf);
- efree(retmsg);
- *text = NULL;
- return(error);
- }
- efree(retmsg->buf);
- efree(retmsg);
-
- return(0);
-}
-
-int send_getremote(int sockfd, hw_objectID objectID, char **objattr, char **text, int *count)
-{
- hg_msg msg, *retmsg;
- int length, *ptr, error;
- char *tmp, *attributes;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- attributes = NULL;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(*ptr == 0) {
- attributes = estrdup(retmsg->buf+sizeof(int));
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *ptr;
- attributes = NULL;
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- length = HEADER_LENGTH + strlen(attributes) + 1 + sizeof(int);
- build_msg_header(&msg, length, msgid++, GETREMOTE_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, attributes);
- tmp = build_msg_int(tmp, 0);
-
- *objattr = strdup(attributes);
- efree(attributes);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if (retmsg == NULL) {
- *text = NULL;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(*ptr == 1024) {
- *count = retmsg->length-HEADER_LENGTH-sizeof(int)-sizeof(int);
- if(NULL != (*text = malloc(*count + 1))) {
- memcpy(*text, ptr+2, *count);
-/* *text[*count] = 0; */
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *ptr + 1024; /* move errors to >2024 */
- efree(retmsg->buf);
- efree(retmsg);
- *text = NULL;
- return(error);
- }
- efree(retmsg->buf);
- efree(retmsg);
-
- return(0);
-}
-
-int send_getremotechildren(int sockfd, char *attributes, char **text, int **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, *ptr, *ptr1, error;
- char *tmp;
-
-/* length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if(retmsg == NULL) {
- attributes = NULL;
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(*ptr == 0) {
- attributes = estrdup(retmsg->buf+sizeof(int));
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *ptr;
- attributes = NULL;
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-*/
- length = HEADER_LENGTH + strlen(attributes) + 1 + sizeof(int);
- build_msg_header(&msg, length, msgid++, GETREMOTECHILDREN_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, attributes);
- tmp = build_msg_int(tmp, 0);
-
-/* efree(attributes); */
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if (retmsg == NULL) {
- *childIDs = NULL;
- return(-1);
- }
- ptr = (int *) retmsg->buf;
- if(*ptr++ == 1024) {
- int i, remlen, sum;
- *count = *ptr;
- ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- sum = 0;
- for(i=0; i<*count; ptr++, i++) {
- ptr1[i] = *ptr;
- sum += *ptr;
- }
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- remlen = retmsg->length - HEADER_LENGTH - *count * sizeof(int) - 2 * sizeof(int);
-/*ptr1[i-1] = remlen; */
-/*ptr1[i-2] = sum; */
-/*ptr1[i-3] = *count; */
- if(NULL != (*text = emalloc(remlen + 1))) {
- memcpy(*text, ptr, remlen);
- } else {
- efree(childIDs);
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- *childIDs = NULL;
- *text = NULL;
- return error;
- }
- return(0);
-}
-
-int send_mvcpdocscollscoll(int sockfd, hw_objectID *objectIDs, int count, int from, int dest, int cpmv, int doccoll)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
-
- if(count <= 0)
- return 0;
-
- /* HEADER_LENGTH + cpmv + from + dest + count + nr of obj */
- length = HEADER_LENGTH + sizeof(hw_objectID) + sizeof(hw_objectID) + sizeof(hw_objectID) + sizeof(hw_objectID) + count * sizeof(hw_objectID);
-
- switch(doccoll) {
- case DOCUMENT:
- build_msg_header(&msg, length, msgid++, MVCPDOCSCOLL_MESSAGE);
- break;
- case COLLECTION:
- build_msg_header(&msg, length, msgid++, MVCPCOLLSCOLL_MESSAGE);
- break;
- }
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, cpmv);
- tmp = build_msg_int(tmp, from);
- tmp = build_msg_int(tmp, dest);
- tmp = build_msg_int(tmp, count);
- for(i=0; i<count;i++)
- tmp = build_msg_int(tmp, objectIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return(error);
-}
-
-int send_docbyanchor(int sockfd, hw_objectID objectID, hw_objectID *anchorID)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETDOCBYANCHOR_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- error = *ptr++;
- if(error == 0) {
- *anchorID = *ptr;
- } else {
- *anchorID = 0;
- }
- efree(retmsg->buf);
- efree(retmsg);
- return error;
-}
-
-int send_docbyanchorobj(int sockfd, hw_objectID objectID, char **objrec)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, anchorID;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETDOCBYANCHOR_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- error = *ptr++;
- if(error == 0) {
- anchorID = *ptr;
- } else {
- anchorID = 0;
- }
- efree(retmsg->buf);
- efree(retmsg);
-
- if(0 > bh_send_getobject(sockfd, anchorID))
- return -1;
- return(uh_send_getobject(sockfd, objrec));
-}
-
-int send_children(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *ptr, *ptr1;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, CHILDREN_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if (-1 == send_hg_msg(sockfd, &msg, length)) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-3);
- }
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-int send_childrenobj(int sockfd, hw_objectID objectID, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *childIDs = NULL;
- int *ptr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, CHILDREN_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- for(i=0; i<*count; ptr++, i++)
- childIDs[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- efree(childIDs);
- return -2;
- }
- efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(childIDs);
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getchildcoll(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETCHILDCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-int send_getchildcollobj(int sockfd, hw_objectID objectID, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *childIDs = NULL;
- int *ptr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETCHILDCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- for(i=0; i<*count; ptr++, i++)
- childIDs[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- efree(childIDs);
- return -2;
- }
- efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(childIDs);
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getchilddoccoll(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETCHILDDOCCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- } else {
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- int *ptr, i, *ptr1;
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
- }
- }
-
- return(0);
-
-}
-
-int send_getchilddoccollobj(int sockfd, hw_objectID objectID, hw_objrec ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *childIDs = NULL;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETCHILDDOCCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- int *ptr, i;
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg->buf) efree(retmsg->buf);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- for(i=0; i<*count; ptr++, i++)
- childIDs[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- efree(childIDs);
- return -2;
- }
- efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- }
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getanchors(int sockfd, hw_objectID objectID, int **anchorIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETANCHORS_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
- if (NULL == (retmsg = recv_hg_msg(sockfd)))
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (*anchorIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *anchorIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-int send_getanchorsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
- int *anchorIDs = NULL;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, 50, GETANCHORS_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
- if (NULL == (retmsg = recv_hg_msg(sockfd)))
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (anchorIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = anchorIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each anchor the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, anchorIDs, count, NULL, childrec)) {
- efree(anchorIDs);
- return -2;
- }
- efree(anchorIDs);
-#else
- for(i=0; i<*count; i++) {
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, anchorIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, anchorIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- }
- if(anchorIDs) efree(anchorIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getdestforanchorsobj(int sockfd, char **anchorrec, char ***destrec, int count)
-{
- int i;
- char *objptr, **destptr;
- char *str;
- int objectID;
-
- if(NULL == (destptr = (char **) emalloc(count * sizeof(hw_objrec *)))) {
- lowerror = LE_MALLOC;
- return -1;
- }
-
- /* Now get for each anchor the object record of its destination */
- for(i=0; i<count; i++) {
- /* if you retrieve the anchors you sometimes get more than actually accessible.
- */
- if((NULL != anchorrec[i]) && (NULL != (str = fnAttributeValue(anchorrec[i], "Dest")))) {
- sscanf(str, "0x%x", &objectID);
- efree(str);
-
- /* Using send_docbyanchorobj() makes sense because the Destination can
- be both, an anchor or a document. If it is a document you get the
- objectrecord of that document. If it is an anchor the function
- graps the document which belongs to the anchor
- and you get also the objectrecord of that document.
- */
- if(0 > send_docbyanchorobj(sockfd, objectID, &objptr)) {
- efree(destptr);
- return -1;
- }
- destptr[i] = objptr;
- /* if we can't get the object rec of the dest, than this document
- is probably not accessible for us. For later functions simply
- set anchorrec[i] to NULL */
- if(destptr[i] == NULL) {
- if(anchorrec[i]) efree(anchorrec[i]);
- anchorrec[i] = NULL;
- }
- } else {
- destptr[i] = NULL;
- }
- }
- *destrec = destptr;
-
- return(0);
-}
-
-int send_getreldestforanchorsobj(int sockfd, char **anchorrec, char ***reldestrec, int count, int rootID, int thisID)
-{
- int i;
- char *docofanchorptr, **reldestptr;
- char *str;
- int destobjectID;
-
- if(NULL == (reldestptr = (char **) emalloc(count * sizeof(char *)))) {
- lowerror = LE_MALLOC;
- return -1;
- }
-
- /* Now get for each anchor the object record of its destination */
- for(i=0; i<count; i++) {
- /* if you retrieve the anchors you sometimes get more than actually accessible.
- */
- if((NULL != anchorrec[i]) && (NULL != (str = fnAttributeValue(anchorrec[i], "Dest")))) {
- sscanf(str, "0x%x", &destobjectID);
- efree(str);
-
- /* See note in send_getdestforanchorsobj() at same position in source code */
- if(0 > send_docbyanchorobj(sockfd, destobjectID, &docofanchorptr)) {
- efree(reldestptr);
- return -1;
- }
-
- reldestptr[i] = docofanchorptr;
- /* if we can't get the object rec of the dest, than this document
- is probably not accessible for us. For later functions simply
- set anchorrec[i] to NULL */
- if(reldestptr[i] == NULL) {
- if(anchorrec[i]) efree(anchorrec[i]);
- anchorrec[i] = NULL;
- } else {
- int j, *retthisIDs, *retdestIDs, equaltill, mincount, countthis, countdest, destdocid;
- char destdocname[200];
- char anchorstr[300];
- char temp[200];
- char *strptr;
-
- if(NULL != (str = strstr(docofanchorptr, "Name="))) {
- str += 5;
- sscanf(str, "%s\n", destdocname);
- }
- if(NULL != (str = strstr(docofanchorptr, "ObjectID="))) {
- str += 9;
- sscanf(str, "0x%X", &destdocid);
- }
-
- send_incollections(sockfd, 1, 1, &thisID, 1, &rootID, &countthis, &retthisIDs);
- send_incollections(sockfd, 1, 1, &destdocid, 1, &rootID, &countdest, &retdestIDs);
-
-/*
-fprintf(stderr, "%d: ", thisID);
-for(k=0; k<countthis; k++)
- fprintf(stderr, "%d, ", retthisIDs[k]);
-fprintf(stderr, "\n");
-fprintf(stderr, "%d: ", destdocid);
-for(k=0; k<countdest; k++)
- fprintf(stderr, "%d: %d, ", destdocid, retdestIDs[k]);
-fprintf(stderr, "\n");
-*/
-
- mincount = (countthis < countdest) ? countthis : countdest;
- for(j=0; (j<mincount) && (retthisIDs[j]==retdestIDs[j]); j++)
- ;
- equaltill = j;
- strcpy(anchorstr, "Name=");
- for(j=equaltill; j<countthis; j++)
- strcat(anchorstr, "../");
- strcat(anchorstr, "./");
- for(j=equaltill; j<countdest; j++) {
- char *temprec, tempname[100];
- send_getobject(sockfd, retdestIDs[j], &temprec);
- if(NULL != (str = strstr(temprec, "Name="))) {
- str += 5;
- sscanf(str, "%s\n", tempname);
- } else if(NULL != (str = strstr(temprec, "ObjectID="))) {
- str += 9;
- sscanf(str, "%s\n", tempname);
- }
-
- sprintf(temp, "%s", tempname);
- strptr = temp;
- while(*strptr != '\0') {
- if(*strptr == '/')
- *strptr = '_';
- strptr++;
- }
-/* fprintf(stderr, "Adding '%s' to '%s'\n", temp, anchorstr); */
- strcat(anchorstr, temp);
- strcat(anchorstr, "/");
-/* fprintf(stderr, "Is now '%s'\n", anchorstr); */
- efree(temprec);
- }
- /* if the anchor destination is a collection it may not be added anymore. */
- if(destdocid != retdestIDs[countdest-1]) {
- strptr = destdocname;
- while(*strptr != '\0') {
- if(*strptr == '/')
- *strptr = '_';
- strptr++;
- }
- strcat(anchorstr, destdocname);
- } else {
- strcat(anchorstr, "index.html");
- }
- strcat(anchorstr, "\n");
- sprintf(temp, "ObjectID=0x%x", destdocid);
- strcat(anchorstr, temp);
-/* fprintf(stderr, "%s\n", anchorstr); */
- efree(retthisIDs);
- efree(retdestIDs);
- efree(reldestptr[i]);
- reldestptr[i] = estrdup(anchorstr);
- }
- } else {
- reldestptr[i] = NULL;
- }
- }
- *reldestrec = reldestptr;
-
- return(0);
-}
-
-int fn_findpath(int sockfd, int *retIDs, int count, int id) {
- int *pathIDs;
- int *parentIDs, pcount, pid;
- int u, j, i;
-
- if(NULL == (pathIDs = emalloc(count * sizeof(int)))) {
- lowerror = LE_MALLOC;
- return -1;
- }
- u = count-1;
- pid = id;
- pcount = 1;
- /* FIXME but parentIDs is not set at this point, why checking it? */
- while((u >= 0) && (pcount != 0) && (parentIDs != NULL) && (pid != 0)) {
-/*fprintf(stderr, "Get parents for %d\n", pid); */
- if(0 != send_getparents(sockfd, pid, &parentIDs, &pcount)) {
- efree(pathIDs);
- return -1;
- }
- pid = 0;
- for(i=0; i<pcount; i++) {
- for(j=0; j<count; j++) {
- if(parentIDs[i] == retIDs[j]) {
- pathIDs[u--] = retIDs[j];
- pid = retIDs[j];
- }
- }
- }
- if(pid == 0)
- fprintf(stderr, "parent not found in list\n");
- if(parentIDs) efree(parentIDs);
- }
-/*fprintf(stderr, "sorted path: "); */
- for(i=0; i<count; i++) {
- retIDs[i] = pathIDs[i];
-/*fprintf(stderr, "%d, ", retIDs[i]); */
- }
-/*fprintf(stderr, "\n"); */
- efree(pathIDs);
- return 0;
-}
-
-/********************************************************************
-* function getrellink() *
-* *
-* Returns the link to point from document with ID sourceID to *
-* document with id destID. *
-********************************************************************/
-int getrellink(int sockfd, int rootID, int thisID, int destID, char **reldeststr) {
- int i, j, k, *retthisIDs, *retdestIDs, equaltill, count, mincount, countthis, countdest;
- char anchorstr[300];
- char temp[200];
- char *strptr;
-
- send_incollections(sockfd, 1, 1, &thisID, 1, &rootID, &countthis, &retthisIDs);
- send_incollections(sockfd, 1, 1, &destID, 1, &rootID, &countdest, &retdestIDs);
-
-
-fprintf(stderr, "%d: ", thisID);
-for(k=0; k<countthis; k++)
- fprintf(stderr, "%d, ", retthisIDs[k]);
-fprintf(stderr, "\n");
-fprintf(stderr, "%d: ", destID);
-for(k=0; k<countdest; k++)
- fprintf(stderr, "%d, ", retdestIDs[k]);
-fprintf(stderr, "\n");
-
- /*
- ** The message incollections returned a list of collections
- ** in which the destID or thisID is contained. Unfortunately
- ** this list ist not the path for the destID or thisID, but
- ** a sorted list of collection IDs. If for example you are
- ** looking for an ID 20 which has a path 1 -> 5 -> 4 -> 20
- ** (this means: 20 is child of 4, 4 is child of 5, 5 is child
- ** of 1) it will return 1, 4, 5 instead of 1, 5, 4
- ** Consequently, we have to create the correct path, by checking
- ** for the parents and identifying it in the list.
- ** But there is another problem. If the id for which the list of
- ** of collection is generated is a colletion itself, it will
- ** show up in the list as well. In order to make the algorithmn
- ** work proberly it has to be the last member of the list.
- */
- for(i=0; i<countdest; i++)
- if(retdestIDs[i] == destID) {
- retdestIDs[i] = retdestIDs[countdest-1];
- retdestIDs[countdest-1] = destID;
- }
- count = (retdestIDs[countdest-1] == destID) ? countdest-1 : countdest;
- if(0 != fn_findpath(sockfd, retdestIDs, count, destID)) {
- efree(retthisIDs);
- efree(retdestIDs);
- return -1;
- }
- for(i=0; i<countthis; i++)
- if(retthisIDs[i] == thisID) {
- retthisIDs[i] = retthisIDs[countthis-1];
- retthisIDs[countthis-1] = thisID;
- }
- count = (retthisIDs[countthis-1] == thisID) ? countthis-1 : countthis;
- if(0 != fn_findpath(sockfd, retthisIDs, count, thisID)) {
- efree(retthisIDs);
- efree(retdestIDs);
- return -1;
- }
-
- mincount = (countthis < countdest) ? countthis : countdest;
-fprintf(stderr, "mincount = %d\n", mincount);
- for(j=0; (j<mincount) && (retthisIDs[j]==retdestIDs[j]); j++)
- ;
- equaltill = j;
-fprintf(stderr, "first unequal = %d\n", j);
- strcpy(anchorstr, "");
- for(j=equaltill; j<countthis; j++)
- strcat(anchorstr, "../");
- strcat(anchorstr, "./");
- for(j=equaltill; j<countdest; j++) {
- char *temprec, *str, tempname[100];
- if(0 == send_getobject(sockfd, retdestIDs[j], &temprec)) {
- if(NULL != (str = strstr(temprec, "Name="))) {
- str += 5;
- sscanf(str, "%s\n", tempname);
- } else if(NULL != (str = strstr(temprec, "ObjectID="))) {
- str += 9;
- sscanf(str, "%s\n", tempname);
- }
-
- sprintf(temp, "%s", tempname);
- strptr = temp;
- while(*strptr != '\0') {
- if(*strptr == '/')
- *strptr = '_';
- strptr++;
- }
-fprintf(stderr, "Adding '%s' (%d) to '%s'\n", temp, retdestIDs[j], anchorstr);
- strcat(anchorstr, temp);
- strcat(anchorstr, "/");
-fprintf(stderr, "Is now '%s'\n", anchorstr);
- efree(temprec);
- } else {
- strcat(anchorstr, "No access/");
- }
- }
- /* if the anchor destination is a collection it may not be added anymore. */
- if(destID != retdestIDs[countdest-1]) {
- char destdocname[100], *str;
- send_getobject(sockfd, destID, &str);
- if(NULL != (strptr = strstr(str, "Name="))) {
- strptr += 5;
- sscanf(strptr, "%s\n", destdocname);
- }
- strptr = destdocname;
- while(*strptr != '\0') {
- if(*strptr == '/')
- *strptr = '_';
- strptr++;
- }
- strcat(anchorstr, destdocname);
- efree(str);
- } else {
-/* strcat(anchorstr, "index.html"); */
- }
-/*fprintf(stderr, "%s\n", anchorstr); */
- efree(retthisIDs);
- efree(retdestIDs);
- *reldeststr = estrdup(anchorstr);
- return 0;
-}
-
-int send_identify(int sockfd, char *name, char *passwd, char **userdata) {
- hg_msg msg, *retmsg;
- int length;
- char *tmp;
-
- length = HEADER_LENGTH + sizeof(int) + strlen(name) + 1 + strlen(passwd) + 1;
-
- build_msg_header(&msg, length, msgid++, IDENTIFY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 0);
- tmp = build_msg_str(tmp, name);
- tmp = build_msg_str(tmp, passwd);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- *userdata = (char *) retmsg->buf;
- efree(retmsg);
-
- return(0);
-}
-
-int send_objectbyidquery(int sockfd, hw_objectID *IDs, int *count, char *query, char ***objrecs)
-{
- hg_msg msg, *retmsg;
- int length;
- char *tmp, *str;
- int *ptr, i;
- int *offsets, *childIDs;
- char **childrec;
-
- if(*count <= 0) {
- *objrecs = emalloc(0);
- return(0);
- }
- length = HEADER_LENGTH + sizeof(int) + sizeof(int) + *count * sizeof(hw_objectID);
- if(query)
- length = length + strlen(query) + 1;
-
- build_msg_header(&msg, length, msgid++, OBJECTBYIDQUERY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 1);
- tmp = build_msg_int(tmp, *count);
- for(i=0; i<*count; i++)
- tmp = build_msg_int(tmp, IDs[i]);
- if(query)
- tmp = build_msg_str(tmp, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
-
-#ifdef hw_optimize
- {
- int hg_error;
- int c, allc;
-
- allc = 0;
- retmsg = recv_hg_msg_head(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- /* read error field */
- if ( (c = hg_read_exact(sockfd, (char *) &hg_error, 4)) == -1 ) {
- if(retmsg) efree(retmsg);
- return(-2);
- }
- allc += c;
-
- if(hg_error) {
- if(retmsg) efree(retmsg);
- return(-3);
- }
-
- /* read count field */
- if ( (c = hg_read_exact(sockfd, (char *) count, 4)) == -1 ) {
- if(retmsg) efree(retmsg);
- return(-2);
- }
- allc += c;
-
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- if((c = hg_read_exact(sockfd, (char *) childIDs, *count * sizeof(hw_objectID))) == -1) {
- efree(childIDs);
- if(retmsg) efree(retmsg);
- return(-3);
- }
- } else {
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-4);
- }
- allc += c;
-
- if(NULL != (offsets = emalloc(*count * sizeof(int)))) {
- if((c = hg_read_exact(sockfd, (char *) offsets, *count * sizeof(int))) == -1) {
- efree(childIDs);
- efree(offsets);
- if(retmsg) efree(retmsg);
- return(-5);
- }
- } else {
- efree(retmsg);
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-6);
- }
- allc += c;
-
- str = (char *)ptr;
- if(NULL == (childrec = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- efree(offsets);
- efree(childIDs);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- for(i=0; i<*count; i++) {
- char *ptr;
- childrec[i] = emalloc(offsets[i] + 1);
- ptr = childrec[i];
- c = hg_read_exact(sockfd, (char *) ptr, offsets[i]);
- ptr[c] = '\0';
- allc += c;
- }
- /* Reading the trailing '\0' */
- c = hg_read_exact(sockfd, (char *) &hg_error, 1);
- *objrecs = childrec;
- }
- }
-#else
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ != 0) {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- *count = *ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- if(NULL != (offsets = emalloc(*count * sizeof(int)))) {
- ptr1 = offsets;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- str = (char *)ptr;
- if(NULL == (childrec = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- efree(offsets);
- efree(childIDs);
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- for(i=0; i<*count; i++) {
- char *ptr;
- childrec[i] = emalloc(offsets[i] + 1);
- ptr = childrec[i];
- memcpy(ptr, str, offsets[i]);
- ptr[offsets[i]] = '\0';
- str += offsets[i];
- }
- *objrecs = childrec;
- }
-
- efree(retmsg->buf);
-#endif
-
- efree(retmsg);
- efree(childIDs);
- efree(offsets);
- return(0);
-}
-
-int send_getobjbyquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
-
- length = HEADER_LENGTH + strlen(query) + 1;
-
- build_msg_header(&msg, length, msgid++, GETOBJBYQUERY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
- return(0);
-}
-
-int send_getobjbyqueryobj(int sockfd, char *query, int maxhits, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *childIDs = NULL;
- int *ptr, *ptr1;
-
- length = HEADER_LENGTH + strlen(query) + 1;
-
- build_msg_header(&msg, length, msgid++, GETOBJBYQUERY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-3);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -4;
- }
- if(*ptr++ == 0) {
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-5);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- efree(childIDs);
- return -2;
- }
- efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-6);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- efree(childIDs);
- return(-7);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-8);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getobjbyquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
-
- length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(collID);
-
- build_msg_header(&msg, length, msgid++, GETOBJBYQUERYCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 1);
- tmp = build_msg_int(tmp, collID);
- tmp = build_msg_str(tmp, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
- return(0);
-}
-
-int send_getobjbyquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- hw_objectID *childIDs = NULL;
- int *ptr, *ptr1;
-
- length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJBYQUERYCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 1);
- tmp = build_msg_int(tmp, collID);
- tmp = build_msg_str(tmp, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return -1;
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- if(childIDs) efree(childIDs);
- return -2;
- }
- if(childIDs) efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- efree(childIDs);
- return(-1);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getobjbyftquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, float **weights, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
- float *ptr2;
-
- length = HEADER_LENGTH + strlen(query) + 1;
-
- build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- char *cptr, tmp[20];
- float weight;
- int j;
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- if(NULL != (*weights = emalloc(*count * sizeof(float)))) {
- ptr2 = *weights;
- for(i=0; i<*count; i++) {
- ptr1[i] = *ptr++; /* Object id */
- cptr = (char *) ptr;
- j = 0;
- while(*cptr != ' ') {
- tmp[j++] = *cptr++;
- }
- cptr++; /* Skip space after weight */
- tmp[j] = '\0';
- sscanf(tmp, "%f", &weight);
- ptr2[i] = weight;
- ptr = (int *) cptr;
- ptr++; /* Skip 0-Integer after weight string */
- }
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(*childIDs);
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
- return(0);
-}
-
-int send_getobjbyftqueryobj(int sockfd, char *query, int maxhits, char ***childrec, float **weights, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *childIDs = NULL;
- int *ptr, *ptr1;
- float *ptr2;
-
- length = HEADER_LENGTH + strlen(query) + 1;
-
- build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERY_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-3);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -4;
- }
- if(*ptr++ == 0) {
- char *cptr, tmp[20];
- float weight;
- int j;
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = childIDs;
- if(NULL != (*weights = emalloc(*count * sizeof(float)))) {
- ptr2 = *weights;
- for(i=0; i<*count; i++) {
- ptr1[i] = *ptr++; /* Object id */
- cptr = (char *) ptr;
- j = 0;
- while(*cptr != ' ') {
- tmp[j++] = *cptr++;
- }
- cptr++; /* Skip space after weight */
- tmp[j] = '\0';
- sscanf(tmp, "%f", &weight);
- ptr2[i] = weight;
- ptr = (int *) cptr;
- ptr++; /* Skip 0-Integer after weight string */
- }
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(childIDs);
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-5);
- }
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-5);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- efree(childIDs);
- efree(*weights);
- return -2;
- }
- efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- efree(childIDs);
- efree(*weights);
- lowerror = LE_MALLOC;
- return(-6);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- efree(childIDs);
- efree(*weights);
- return(-7);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-8);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getobjbyftquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, float **weights, int *count)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr, i, *ptr1;
- float *ptr2;
-
- length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(collID);
-
- build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERYCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 1);
- tmp = build_msg_int(tmp, collID);
- tmp = build_msg_str(tmp, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- char *cptr, tmp[20];
- float weight;
- int j;
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- if(NULL != (*weights = emalloc(*count * sizeof(float)))) {
- ptr2 = *weights;
- for(i=0; i<*count; i++) {
- ptr1[i] = *ptr++; /* Object id */
- cptr = (char *) ptr;
- j = 0;
- while(*cptr != ' ') {
- tmp[j++] = *cptr++;
- }
- cptr++; /* Skip space after weight */
- tmp[j] = '\0';
- sscanf(tmp, "%f", &weight);
- ptr2[i] = weight;
- ptr = (int *) cptr;
- ptr++; /* Skip 0-Integer after weight string */
- }
- } else {
- efree(*childIDs);
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
- return(0);
-}
-
-int send_getobjbyftquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, float **weights, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- hw_objectID *childIDs = NULL;
- int *ptr, *ptr1;
- float *ptr2;
-
- length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERYCOLL_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, 1);
- tmp = build_msg_int(tmp, collID);
- tmp = build_msg_str(tmp, query);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return -1;
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- char *cptr, tmp[20];
- float weight;
- int j;
- *count = (*ptr < maxhits) ? *ptr : maxhits;
- ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = childIDs;
- if(NULL != (*weights = emalloc(*count * sizeof(float)))) {
- ptr2 = *weights;
- for(i=0; i<*count; i++) {
- ptr1[i] = *ptr++; /* Object id */
- cptr = (char *) ptr;
- j = 0;
- while(*cptr != ' ') {
- tmp[j++] = *cptr++;
- }
- cptr++; /* Skip space after weight */
- tmp[j] = '\0';
- sscanf(tmp, "%f", &weight);
- ptr2[i] = weight;
- ptr = (int *) cptr;
- ptr++; /* Skip 0-Integer after weight string */
- }
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(childIDs);
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each child collection the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- if(childIDs) efree(childIDs);
- if(*weights) efree(weights);
- return -2;
- }
- if(childIDs) efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- efree(childIDs);
- efree(*weights);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- efree(childIDs);
- efree(*weights);
- return(-1);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_getparents(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *ptr, *ptr1;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETPARENT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if (-1 == send_hg_msg(sockfd, &msg, length)) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-3);
- }
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = *childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-int send_getparentsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- hw_objectID *childIDs = NULL;
- int *ptr;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETPARENT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if (-1 == send_hg_msg(sockfd, &msg, length)) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- for(i=0; i<*count; ptr++, i++)
- childIDs[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each parent the object record */
-#ifdef hw_less_server_stress
- if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) {
- efree(childIDs);
- return -2;
- }
- efree(childIDs);
-#else
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-#endif
- return(0);
-}
-
-int send_pipedocument(int sockfd, char *host, hw_objectID objectID, int mode, int rootid, char **objattr, char **bodytag, char **text, int *count, char **urlprefix)
-{
- hg_msg msg, *retmsg;
- int length, len;
- char *tmp, header[80], *head_ptr, *sizestr;
- struct sockaddr_in serv_addr;
- struct hostent *hostptr;
- char *hostip = NULL;
- char *attributes = NULL;
- char *documenttype;
- char **anchors;
- int newfd, fd, port, size, error, ancount;
- int *ptr;
-
- if(-1 == (fd = fnCOpenDataCon(sockfd, &port))) {
- /* not set yet efree(msg.buf); */
- return(-1);
- }
-
- /*
- ** Get information about host
- */
- if(host) {
- if((hostptr = gethostbyname(host)) == NULL) {
- HWSOCK_FCLOSE(fd);
- return(-2);
- }
- } else {
- HWSOCK_FCLOSE(fd);
- return(-2);
- }
-
- switch(hostptr->h_addrtype) {
- struct in_addr *ptr1;
- char *ptr;
- case AF_INET:
- ptr = hostptr->h_addr_list[0];
- ptr1 = (struct in_addr *) ptr;
- hostip = inet_ntoa(*ptr1);
- break;
- default:
- HWSOCK_FCLOSE(fd);
- return(-3);
- break;
- }
-
- /* Bottom half of send_getobject */
- if(0 > bh_send_getobject(sockfd, objectID)) {
- HWSOCK_FCLOSE(fd);
- return -4;
- }
-
- /* Upper half of send_getobject */
- if(0 > (error = uh_send_getobject(sockfd, &attributes))) {
- HWSOCK_FCLOSE(fd);
- return error;
- }
-
- length = HEADER_LENGTH + sizeof(hw_objectID) + sizeof(int) + strlen(hostip) + 1 + strlen("Refno=0x12345678") + 1;
- build_msg_header(&msg, length, msgid++, PIPEDOCUMENT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- if(attributes) efree(attributes);
- lowerror = LE_MALLOC;
- return(-5);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
- tmp = build_msg_int(tmp, port);
- tmp = build_msg_str(tmp, hostip);
- tmp = build_msg_str(tmp, "Refno=0x12345678");
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- if(attributes) efree(attributes);
- efree(msg.buf);
- HWSOCK_FCLOSE(fd);
- return(-6);
- }
- efree(msg.buf);
-
- /* Just check if the command was understood */
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- if(attributes) efree(attributes);
- HWSOCK_FCLOSE(fd);
- return(-7);
- }
-
- ptr = (int *) retmsg->buf;
- if((ptr == NULL) || (*ptr != 0)) {
- error = *ptr;
- if(retmsg->buf) efree(retmsg->buf);
- efree(retmsg);
- if(attributes) efree(attributes);
- HWSOCK_FCLOSE(fd);
- return(error);
- }
-
- efree(retmsg->buf);
- efree(retmsg);
-
- /* passively open the data connection. The HG server is probably
- already waiting for us.
- */
- len = sizeof(serv_addr);
- if((newfd = accept(fd, (struct sockaddr *) &serv_addr, &len)) < 0) {
-/* php_printf("client: can't open data connection to server\n"); */
- if(attributes) efree(attributes);
- HWSOCK_FCLOSE(fd);
- return(-8);
- } else {
- HWSOCK_FCLOSE(fd);
- }
-
- /* First of all read the header */
- head_ptr = header;
- while((read_to(newfd, head_ptr, 1, rtimeout) == 1) && (*head_ptr != '\0')) {
- head_ptr++;
- }
-
- /* Let's see how big the document is and read it into var text */
- sizestr = strstr(header, "sz=");
- if(sizestr) {
- sizestr += 3;
- sscanf(sizestr, "%d\n", &size);
- *count = size;
- if((size != 0) && (NULL != (*text = malloc(size+1)))) {
- read_to(newfd, *text, size, rtimeout);
- (*text)[size] = '\0';
- }
- } else {
- *text = NULL;
- }
-
- /* close the data connection */
- HWSOCK_FCLOSE(newfd);
-
- documenttype = fnAttributeValue(attributes, "DocumentType");
-
- /* Make a copy with strdup (not estrdup), because we want to
- keep the attributes in hw_document struct.
- */
- *objattr = strdup(attributes);
- efree(attributes);
-
- if((documenttype != NULL) && (!strcmp(documenttype, "text") != 0)) {
- if(send_getanchorsobj(sockfd, objectID, &anchors, &ancount) == 0) {
- char **destrec, **reldestrec;
-#ifdef newlist
- zend_llist *pAnchorList = NULL;
-#else
- DLIST *pAnchorList = NULL;
-#endif
-
- /* Get dest as relative and absolut path */
- send_getdestforanchorsobj(sockfd, anchors, &destrec, ancount);
- send_getreldestforanchorsobj(sockfd, anchors, &reldestrec, ancount, rootid, objectID);
- pAnchorList = fnCreateAnchorList(objectID, anchors, destrec, reldestrec, ancount, mode);
- /* Free only the array, the objrecs has been freed in fnCreateAnchorList() */
- if(anchors) efree(anchors);
- if(destrec) efree(destrec);
- if(reldestrec) efree(reldestrec);
-
- if(pAnchorList != NULL) {
- char *newtext;
- char *body = NULL;
-
- newtext = fnInsAnchorsIntoText(*text, pAnchorList, &body, urlprefix);
-#ifdef newlist
- zend_llist_destroy(pAnchorList);
- efree(pAnchorList);
-#else
- dlst_kill(pAnchorList, fnDeleteAnchor);
-#endif
- *bodytag = strdup(body);
- if(body) efree(body);
- *text = newtext;
- *count = strlen(newtext);
- }
- }
- } else {
- *bodytag = NULL;
- }
-
- if(documenttype) efree(documenttype);
- return(0);
-}
-
-int send_pipecgi(int sockfd, char *host, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count)
-{
- hg_msg msg, *retmsg;
- int length, len, new_attr_len;
- char *tmp, header[80], *head_ptr, *sizestr;
- struct sockaddr_in serv_addr;
- struct hostent *hostptr;
- char *hostip = NULL;
- char *attributes = NULL;
- char *documenttype, *new_attr;
- int newfd, fd, port, size, error;
- int *ptr;
-
- if(-1 == (fd = fnCOpenDataCon(sockfd, &port))) {
- /* not set yet? efree(msg.buf); */
- return(-1);
- }
-
- /*
- ** Get information about host
- */
- if(host) {
- if((hostptr = gethostbyname(host)) == NULL) {
- HWSOCK_FCLOSE(fd);
- return(-1);
- }
- } else {
- HWSOCK_FCLOSE(fd);
- return(-1);
- }
-
- switch(hostptr->h_addrtype) {
- struct in_addr *ptr1;
- char *ptr;
- case AF_INET:
- ptr = hostptr->h_addr_list[0];
- ptr1 = (struct in_addr *) ptr;
- hostip = inet_ntoa(*ptr1);
- break;
- default:
-/* php_printf(stderr, "unknown address type\n"); */
- break;
- }
-
- /* Bottom half of send_getobject */
- if(0 > bh_send_getobject(sockfd, objectID)) {
- HWSOCK_FCLOSE(fd);
- return -1;
- }
-
- /* Upper half of send_getobject */
- if(0 > (error = uh_send_getobject(sockfd, &attributes))) {
- HWSOCK_FCLOSE(fd);
- return error;
- }
-
- new_attr_len = strlen(attributes) + strlen(cgi_env_str) + 2;
- new_attr = malloc(new_attr_len);
- strcpy(new_attr, attributes);
- strcat(new_attr, cgi_env_str);
- length = HEADER_LENGTH + strlen(new_attr) + 1 + sizeof(int) + strlen(hostip) + 1 + sizeof(int) + sizeof(int);
- build_msg_header(&msg, length, msgid++, PIPECGI_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- if(attributes) efree(attributes);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, hostip);
- tmp = build_msg_int(tmp, port);
- tmp = build_msg_str(tmp, new_attr);
- tmp = build_msg_int(tmp, 1);
- tmp = build_msg_int(tmp, 0x12345678);
- free(new_attr);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- if(attributes) efree(attributes);
- efree(msg.buf);
- HWSOCK_FCLOSE(fd);
- return(-1);
- }
- efree(msg.buf);
-
- /* Just check if the command was understood */
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- if(attributes) efree(attributes);
- HWSOCK_FCLOSE(fd);
- return(-1);
- }
-
- ptr = (int *) retmsg->buf;
- if((ptr == NULL) || (*ptr != 0)) {
- if(retmsg->buf) efree(retmsg->buf);
- efree(retmsg);
- if(attributes) efree(attributes);
- HWSOCK_FCLOSE(fd);
- return(-1);
- }
-
- efree(retmsg->buf);
- efree(retmsg);
-
- /* passively open the data connection. The HG server is probably
- already waiting for us.
- */
- len = sizeof(serv_addr);
- if((newfd = accept(fd, (struct sockaddr *) &serv_addr, &len)) < 0) {
- if(attributes) efree(attributes);
- HWSOCK_FCLOSE(fd);
- return(-1);
- } else {
- HWSOCK_FCLOSE(fd);
- }
-
- /* First of all read the header */
- head_ptr = header;
- while((read_to(newfd, head_ptr, 1, rtimeout) == 1) && (*head_ptr != '\0')) {
- head_ptr++;
- }
-
- /* Let's see how big the document is and read it into var text */
- sizestr = strstr(header, "sz=");
- if(sizestr) {
- sizestr += 3;
- sscanf(sizestr, "%d\n", &size);
- *count = size;
- if((size != 0) && (NULL != (*text = malloc(size+1)))) {
- read_to(newfd, *text, size, rtimeout);
- }
- } else {
- *text = NULL;
- }
-
- /* close the data connection */
- HWSOCK_FCLOSE(newfd);
-
- documenttype = fnAttributeValue(attributes, "DocumentType");
-
- /* Make a copy with strdup (not estrdup), because we want to
- keep the attributes in hw_document struct.
- */
- *objattr = strdup(attributes);
- efree(attributes);
-
- if(documenttype) efree(documenttype);
- return(0);
-}
-
-int send_putdocument(int sockfd, char *host, hw_objectID parentID, char *objectRec, char *text, int count, hw_objectID *objectID)
-{
- hg_msg msg, *retmsg;
- int length, len;
- char *tmp, header[80], parms[30], *head_ptr;
- struct sockaddr_in serv_addr;
- struct hostent *hostptr;
- char *hostip = NULL;
- int newfd, fd, port, error;
- int *ptr;
-
- /* First of all we have to insert the document record */
- sprintf(parms, "Parent=0x%x", parentID);
- length = HEADER_LENGTH + strlen(objectRec) + 1 + strlen(parms) + 1;
-
- build_msg_header(&msg, length, msgid++, INSERTOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_str(msg.buf, objectRec);
- tmp = build_msg_str(tmp, parms);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-3);
- }
-
- ptr = (int *) retmsg->buf;
- if(0 == (error = *ptr)) {
- ptr++;
- *objectID = *ptr;
- } else {
- if(retmsg->buf) efree(retmsg->buf);
- efree(retmsg);
- return(error);
- }
-
- efree(retmsg->buf);
- efree(retmsg);
-
- /*
- ** Get information about host
- */
- if(host) {
- if((hostptr = gethostbyname(host)) == NULL) {
- /* close(fd); fd is not set yet */
- return(-4);
- }
- } else {
- /* close(fd); fd is not set yet */
- return(-5);
- }
-
- switch(hostptr->h_addrtype) {
- struct in_addr *ptr1;
- char *ptr;
- case AF_INET:
- ptr = hostptr->h_addr_list[0];
- ptr1 = (struct in_addr *) ptr;
- hostip = inet_ntoa(*ptr1);
- break;
- default:
-/* fprintf(stderr, "unknown address type\n"); */
- break;
- }
-
- if(-1 == (fd = fnCOpenDataCon(sockfd, &port))) {
- efree(msg.buf);
- return(-6);
- }
-
- /* Start building the PUTDOCUMENT message. I works even if
- the Refno is skipped. I guess the path can be omitted too. */
- length = HEADER_LENGTH + sizeof(hw_objectID) + sizeof(int) + strlen(hostip) + 1 + strlen("Hyperwave") + 1+ strlen("Refno=0x12345678") + 1;
-
- build_msg_header(&msg, length, msgid++, PUTDOCUMENT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-7);
- }
-
- tmp = build_msg_int(msg.buf, *objectID);
- tmp = build_msg_int(tmp, port);
- tmp = build_msg_str(tmp, hostip);
- tmp = build_msg_str(tmp, "Hyperwave");
- tmp = build_msg_str(tmp, "Refno=0x12345678");
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- HWSOCK_FCLOSE(fd);
- return(-8);
- }
- efree(msg.buf);
-
- /* passively open the data connection. The HG server is probably
- already waiting for us.
- */
- len = sizeof(serv_addr);
- if((newfd = accept(fd, (struct sockaddr *) &serv_addr, &len)) < 0) {
- HWSOCK_FCLOSE(fd);
- return(-9);
- } else {
- HWSOCK_FCLOSE(fd);
- }
-
- /* First of all write the header. According to the documentation
- there should be a header first. Well, after some investigation
- with tcpdump I found out, that Harmony and wavemaster don't
- sent it. The also do not sent the Refno in the PUTDOCUMENT msg.
- Anyway, we sent both. */
- head_ptr = header;
- sprintf(header, "HGHDR\nsz=%d\nref=12345678\n", count);
- len = strlen(header) + 1;
- if(len != write_to(newfd, header, len, wtimeout)) {
- HWSOCK_FCLOSE(newfd);
- return(-10);
- }
-
- /* And now the document */
- if(count != write_to(newfd, text, count, wtimeout)) {
- HWSOCK_FCLOSE(newfd);
- return(-11);
- }
-
- /* The data connection has to be close before the return
- msg can be read. The server will not sent it before. */
- HWSOCK_FCLOSE(newfd);
-
- /* Just check if the command was understood */
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- HWSOCK_FCLOSE(fd);
- return(-12);
- }
-
- ptr = (int *) retmsg->buf;
- if((ptr == NULL) || (*ptr != 0)) {
- if(retmsg->buf) efree(retmsg->buf);
- efree(retmsg);
- HWSOCK_FCLOSE(fd);
- return(-13);
- }
-
- efree(retmsg->buf);
- efree(retmsg);
-
- return(0);
-}
-
-int send_getsrcbydest(int sockfd, hw_objectID objectID, char ***childrec, int *count)
-{
- hg_msg msg, *retmsg;
- int length, i, error;
- char *tmp;
- int *childIDs = NULL;
- char **objptr;
- int *ptr, *ptr1;
-
- length = HEADER_LENGTH + sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, GETSRCBYDEST_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, objectID);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL )
- return(-1);
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *count = *ptr;
- ptr++;
- if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) {
- ptr1 = childIDs;
- for(i=0; i<*count; ptr++, i++)
- ptr1[i] = *ptr;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- efree(retmsg->buf);
- efree(retmsg);
- lowerror = LE_MALLOC;
- return(-1);
- }
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- /* Now get for each source the object record */
- for(i=0; i<*count; i++) {
- length = HEADER_LENGTH + sizeof(hw_objectID);
- build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- efree(childIDs);
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, childIDs[i]);
-
- if ( send_hg_msg(sockfd, &msg, length) == -1 ) {
- efree(childIDs);
- efree(msg.buf);
- return(-1);
- }
-
- efree(msg.buf);
- }
- efree(childIDs);
-
- if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) {
- /* if emalloc fails, get at least all remaining messages from server */
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- efree(retmsg->buf);
- efree(retmsg);
- }
- *childrec = NULL;
- lowerror = LE_MALLOC;
- return(-1);
- } else {
- *childrec = objptr;
-
- for(i=0; i<*count; i++) {
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg != NULL ) {
- if(0 == (int) *(retmsg->buf)) {
- *objptr = estrdup(retmsg->buf+sizeof(int));
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- } else {
- *objptr = NULL;
- objptr++;
- efree(retmsg->buf);
- efree(retmsg);
- }
- }
- }
- }
-
- return(0);
-}
-
-int send_mapid(int sockfd, int servid, hw_objectID id, int *virtid)
-{
- hg_msg msg, *retmsg;
- int length, error;
- char *tmp;
- int *ptr;
-
- length = HEADER_LENGTH + 2 * sizeof(hw_objectID);
-
- build_msg_header(&msg, length, msgid++, HG_MAPID);
-
- if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- tmp = build_msg_int(msg.buf, servid);
- tmp = build_msg_int(tmp, id);
-
- if (-1 == send_hg_msg(sockfd, &msg, length)) {
- efree(msg.buf);
- return(-2);
- }
-
- efree(msg.buf);
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-3);
- }
-
- ptr = (int *) retmsg->buf;
- if(ptr == NULL) {
- if(retmsg) efree(retmsg);
- return -1;
- }
- if(*ptr++ == 0) {
- *virtid = *ptr;
- } else {
- error = *((int *) retmsg->buf);
- efree(retmsg->buf);
- efree(retmsg);
- return error;
- }
-
- return(0);
-}
-
-#define BUFFERLEN 200
-char *get_hw_info(hw_connection *conn) {
- char temp[BUFFERLEN];
- int len;
- struct sockaddr_in serv_addr;
-
- len = sizeof (serv_addr);
- if(getsockname(conn->socket, (struct sockaddr *)&serv_addr, &len) < 0)
- return(NULL);
-
- snprintf(temp, BUFFERLEN, "%s, %s, %d, %s, %d, %d", conn->server_string, conn->hostname,
- conn->version, conn->username,
- serv_addr.sin_port, conn->swap_on);
- return(estrdup(temp));
-}
-#undef BUFFERLEN
-
-static int send_hg_msg(int sockfd, hg_msg *msg, int length)
-{
- char *buf, *tmp;
-
-#ifdef HW_DEBUG
- php_printf("<b>Sending msg: </b>type = %d -- id = %d<br />\n", msg->msg_type, msg->version_msgid);
-#endif
- if ( length < HEADER_LENGTH ) {
-/* fprintf(stderr, "send_hg_msg: bad msg\n"); */
- return(-1);
- }
-
- if ( (tmp = buf = (char *)emalloc(length)) == NULL ) {
-/* perror("send_hg_msg"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
- memcpy(tmp, (char *) &(msg->length), 4);
- tmp += 4;
- memcpy(tmp, (char *) &(msg->version_msgid), 4);
- tmp += 4;
- memcpy(tmp, (char *) &(msg->msg_type), 4);
- if ( msg->length > HEADER_LENGTH ) {
- tmp += 4;
- memcpy(tmp, msg->buf, length-HEADER_LENGTH);
- }
-
- if ( hg_write(sockfd, buf, length) == -1 ) {
- efree(buf);
- return(-1);
- }
-
- efree(buf);
- return(0);
-}
-
-
-int send_ready(int sockfd)
-{
- hg_msg ready_msg;
-
- build_msg_header(&ready_msg, HEADER_LENGTH, version, READY_MESSAGE);
- ready_msg.buf = NULL;
-
- if ( send_hg_msg(sockfd, &ready_msg, HEADER_LENGTH) == -1 ) {
- return(-1);
- }
-
- return(0);
-}
-
-
-int send_command(int sockfd, int command, char **answer)
-{
- hg_msg comm_msg, *retmsg;
- char *comm_str, *tmp;
- int respond = 1;
- int length;
-
- if ( command == STAT_COMMAND )
- comm_str = STAT_COMMAND_STR;
- else
- comm_str = WHO_COMMAND_STR;
- length = HEADER_LENGTH + sizeof(respond) + strlen(comm_str) + 1;
-
- build_msg_header(&comm_msg, length, msgid++, COMMAND_MESSAGE);
-
- if ( (comm_msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) {
-/* perror("send_command"); */
- lowerror = LE_MALLOC;
- return(-1);
- }
-
-
- tmp = build_msg_int(comm_msg.buf, respond);
- tmp = build_msg_str(tmp, comm_str);
-
-
- if ( send_hg_msg(sockfd, &comm_msg, length) == -1 ) {
- efree(comm_msg.buf);
- return(-1);
- }
- efree(comm_msg.buf);
-
- /* Just check if the command was understood */
- retmsg = recv_hg_msg(sockfd);
- if ( retmsg == NULL ) {
- return(-1);
- }
-
- *answer = retmsg->buf;
- efree(retmsg);
-
- return(0);
-}
-
-
-static void build_msg_header(hg_msg *msg, int length, int version_msgid, int msg_type)
-{
- if ( swap_on ) {
- msg->length = swap(length);
- msg->version_msgid = swap(version_msgid);
- msg->msg_type = swap(msg_type);
- }
- else {
- msg->length = length;
- msg->version_msgid = version_msgid;
- msg->msg_type = msg_type;
- }
-}
-
-
-static char *build_msg_int(char *buf, int val) {
- int tmp;
-
-#ifdef HW_DEBUG
- php_printf(" Added int to header: <b>%d</b><br />\n", val);
-#endif
- tmp = swap_on ? swap(val) : val;
- memcpy(buf, (char *)&tmp, 4);
-
- return(buf+4);
-}
-
-
-static char *build_msg_str(char *buf, char *str)
-{
- int len = strlen(str)+1;
-
-#ifdef HW_DEBUG
- php_printf(" Added str to header: <b>%s</b> (%d)<br />\n", str, strlen(str));
-#endif
-
- memcpy(buf, str, len);
-
- return(buf+len);
-}
-
-
-static int swap(int val)
-{
- int tmp;
-
- ((char*)&tmp)[0] = ((char*)&val)[3];
- ((char*)&tmp)[1] = ((char*)&val)[2];
- ((char*)&tmp)[2] = ((char*)&val)[1];
- ((char*)&tmp)[3] = ((char*)&val)[0];
-
- return(tmp);
-}
-
-
-void close_hg_connection(int sockfd)
-{
- shutdown(sockfd, 2);
- HWSOCK_FCLOSE(sockfd);
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * End:
- */
-
diff --git a/ext/hyperwave/hg_comm.h b/ext/hyperwave/hg_comm.h
deleted file mode 100644
index 3cb441e5c6..0000000000
--- a/ext/hyperwave/hg_comm.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef HG_COMM_H
-#define HG_COMM_H
-
-#if HYPERWAVE
-
-#define newlist
-
-#include "hw_error.h"
-#ifdef newlist
-#else
-#include "dlist.h"
-#endif
-#define HG_SERVER_PORT 418
-
-#define F_DISTRIBUTED 0x80000000
-#define F_COMPRESSED 0x40000000
-#define F_VERSION 0x00003fff
-#define HW_VERSION 717L /* 7.17 */
-
-#define HEADER_LENGTH 12
-
-#define STAT_COMMAND_STR "stat"
-#define WHO_COMMAND_STR "who"
-#define STAT_COMMAND 1
-#define WHO_COMMAND 2
-
-#define GETDOCBYANCHOR_MESSAGE 2
-#define GETCHILDCOLL_MESSAGE 3
-#define GETPARENT_MESSAGE 4
-#define GETCHILDDOCCOLL_MESSAGE 5
-#define GETOBJECT_MESSAGE 7
-#define GETANCHORS_MESSAGE 8
-#define GETOBJBYQUERY_MESSAGE 9
-#define GETOBJBYQUERYCOLL_MESSAGE 10
-#define OBJECTBYIDQUERY_MESSAGE 11
-#define GETTEXT_MESSAGE 12
-#define INSDOC_MESSAGE 14
-#define INSCOLL_MESSAGE 17
-#define GETSRCBYDEST_MESSAGE 19
-#define MVCPDOCSCOLL_MESSAGE 22
-#define MVCPCOLLSCOLL_MESSAGE 23
-#define IDENTIFY_MESSAGE 24
-#define READY_MESSAGE 25
-#define COMMAND_MESSAGE 26
-#define CHANGEOBJECT_MESSAGE 27
-#define EDITTEXT_MESSAGE 28
-#define GETANDLOCK_MESSAGE 29
-#define UNLOCK_MESSAGE 30
-#define INCOLLECTIONS_MESSAGE 31
-#define INSERTOBJECT_MESSAGE 32
-#define GETOBJBYFTQUERY_MESSAGE 34
-#define GETOBJBYFTQUERYCOLL_MESSAGE 35
-#define PIPEDOCUMENT_MESSAGE 36
-#define DELETEOBJECT_MESSAGE 37
-#define PUTDOCUMENT_MESSAGE 38
-#define GETREMOTE_MESSAGE 39
-#define GETREMOTECHILDREN_MESSAGE 40
-#define HG_MAPID 43
-#define CHILDREN_MESSAGE 44
-#define GETCGI_MESSAGE 45
-#define PIPECGI_MESSAGE 46
-
-#define HW_DEFAULT_LINK 0
-#define HW_IMAGE_LINK 1
-#define HW_BACKGROUND_LINK 2
-#define HW_INTAG_LINK 3
-#define HW_APPLET_LINK 4
-#define HW_INTAGNODEL_LINK 5
-
-#define COPY 0
-#define MOVE 1
-#define DOCUMENT 0
-#define COLLECTION 1
-
-
-#ifdef PHP_WIN32
-# define SOCK_ERR INVALID_SOCKET
-# define SOCK_CONN_ERR SOCKET_ERROR
-# define HWSOCK_FCLOSE(s) closesocket(s)
-#else
-# define SOCK_ERR -1
-# define SOCK_CONN_ERR -1
-# define HWSOCK_FCLOSE(s) close(s)
-#endif
-
-
-/* Low error messages */
-#define LE_MALLOC -1
-
-typedef struct {
- int id; /* object ID of anchor */
- int tanchor; /* Type of anchor. Can be 1=Src, 2=Dest */
- int start; /* start of anchor */
- int end; /* end of anchor */
- char *nameanchor; /* name tag attribute of destination document */
- /* if anchor is of type Src the following are used as well */
- char *destdocname; /* name of destination document */
- char *link; /* url for external destination */
- int linktype; /* type of link. see above */
- char *tagattr; /* more attributes of tag, like Border=0 */
- char *htmlattr; /* */
- char *codebase; /* codebase of applet */
- char *code; /* code of applet */
- char *fragment; /* name link of Src */
-
- /* if anchor is of type Dest the following are used as well */
- char *keyword; /* name link of Dest */
- } ANCHOR;
-
-typedef struct {
- int length;
- int version_msgid;
- int msg_type;
- char *buf;
-} hg_msg;
-
-typedef struct {
- int socket;
- int swap_on;
- int version;
- char *server_string;
- char *hostname;
- char *username;
- int lasterror;
- int linkroot;
-} hw_connection;
-
-typedef int hw_objectID;
-typedef char hw_objrec;
-typedef float hw_float;
-
-#ifdef newlist
-void fnDeleteAnchor(void *ptr1);
-void fnListAnchor(zend_llist *pAnchorList);
-zend_llist *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode);
-char *fnInsAnchorsIntoText(char *text, zend_llist *pAnchorList, char **bodytag, char **urlprefix);
-int fnCmpAnchors(const void *e1, const void *e2 TSRMLS_DC);
-ANCHOR *fnAddAnchor(zend_llist *pAnchorList, int objectID, int start, int end);
-#else
-void fnDeleteAnchor(ANCHOR *ptr);
-void fnListAnchor(DLIST *pAnchorList);
-DLIST *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode);
-char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char **urlprefix);
-int fnCmpAnchors(ANCHOR *a1, ANCHOR *a2 TSRMLS_DC);
-ANCHOR *fnAddAnchor(DLIST *pAnchorList, int objectID, int start, int end);
-#endif
-extern void set_swap(int do_swap);
-extern int open_hg_connection(char *server_name, int port);
-extern void close_hg_connection(int sockfd);
-extern int initialize_hg_connection(int sockfd, int *do_swap, int *version, char **userdata, char **server_string, char *username, char *password);
-
-extern int send_ready(int sockfd);
-extern int send_command(int sockfd, int command, char **answer);
-
-extern hg_msg *recv_hg_msg(int sockfd);
-extern hg_msg *recv_ready(int sockfd);
-extern hg_msg *recv_command(int sockfd);
-
-extern char *fnInsStr(char *str, int pos, char *insstr);
-extern int fnAttributeCompare(char *object, char *attrname, char *value);
-extern char *fnAttributeValue(char *object, char *attrname);
-extern int getrellink(int sockfd, int rootID, int thisID, int destID, char **reldesstr);
-
-extern int send_deleteobject(int sockfd, hw_objectID objectID);
-extern int send_changeobject(int sockfd, hw_objectID objectID, char *mod);
-extern int send_groupchangeobject(int sockfd, hw_objectID objectID, char *mod);
-extern int send_getobject(int sockfd, hw_objectID objectID, char **attributes);
-extern int send_getandlock(int sockfd, hw_objectID objectID, char **attributes);
-extern int send_lock(int sockfd, hw_objectID objectID);
-extern int send_unlock(int sockfd, hw_objectID objectID);
-extern int send_gettext(int sockfd, hw_objectID objectID, int mode, int rootid, char **objattr, char **bodytag, char **text, int *count, char *urlprefix);
-extern int send_edittext(int sockfd, char *objattr, char *text);
-extern int send_getcgi(int sockfd, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count);
-extern int send_getremote(int sockfd, hw_objectID objectID, char **objattr, char **text, int *count);
-extern int send_getremotechildren(int sockfd, char *attributes, char **text, int **childIDs, int *count);
-extern int send_docbyanchor(int sockfd, hw_objectID objectID, hw_objectID *anchorID);
-extern int send_docbyanchorobj(int sockfd, hw_objectID objectID, char **objrec);
-extern int send_mvcpdocscollscoll(int sockfd, hw_objectID *objectIDs, int count, int from, int dest, int cpmv, int docscoll);
-extern int send_childrenobj(int sockfd, hw_objectID objectID, char ***childrec, int *count);
-extern int send_getchildcoll(int sockfd, int objectID, hw_objectID **childIDs, int *count);
-extern int send_getchildcollobj(int sockfd, hw_objectID objectID, hw_objrec ***childrec, int *count);
-extern int send_getchilddoccoll(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count);
-extern int send_getchilddoccollobj(int sockfd, hw_objectID objectID, hw_objrec ***childrec, int *count);
-extern int send_getanchors(int sockfd, hw_objectID objectID, hw_objectID **anchorIDs, int *count);
-extern int send_getanchorsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count);
-extern int send_objectbyidquery(int sockfd, hw_objectID *IDs, int *count, char *query, char ***objrecs);
-extern int send_getobjbyquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, int *count);
-extern int send_getobjbyqueryobj(int sockfd, char *query, int maxhits, char ***childrec, int *count);
-extern int send_getobjbyquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, int *count);
-extern int send_getobjbyquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, int *count);
-extern int send_getobjbyftquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, float **weights, int *count);
-extern int send_getobjbyftqueryobj(int sockfd, char *query, int maxhits, char ***childrec, float **weights, int *count);
-extern int send_getobjbyftquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, float **weight, int *count);
-extern int send_getobjbyftquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, float **weight, int *count);
-extern int send_identify(int sockfd, char *name, char *passwd, char **userdata);
-extern int send_getparents(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count);
-extern int send_children(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count);
-extern int send_getparentsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count);
-extern int send_pipedocument(int sockfd, char *hostname, hw_objectID objectID, int mode, int rootid, char** objattr, char **bodytag, char **text, int *count, char **urlprefix);
-extern int send_pipecgi(int sockfd, char *host, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count);
-extern int send_putdocument(int sockfd, char *hostname, hw_objectID parentID, char *objectRec, char *text, int count, hw_objectID *objectID);
-extern int send_inscoll(int sockfd, hw_objectID objectID, char *objrec, hw_objectID *new_objectID);
-extern int send_insertobject(int sockfd, char *objrec, char *parms, hw_objectID *objectID);
-extern int send_insdoc(int sockfd, hw_objectID objectID, char *objrec, char *text, hw_objectID *new_objectID);
-extern int send_incollections(int sockfd, int retcol, int cobjids, hw_objectID *objectIDs, int ccollids, hw_objectID *collIDs, int *count, hw_objectID **retIDs);
-extern int send_getsrcbydest(int sockfd, hw_objectID objid, char ***childrec, int *count);
-extern int send_mapid(int sockfd, int servid, hw_objectID id, int *virtid);
-extern int send_dummy(int sockfd, hw_objectID objectID, int msgid, char **attributes);
-extern int send_insertanchors(char **text, int *count, char **anchors, char **destrec, int ancount, char **urlprefix, char **bodytag);
-extern char *get_hw_info(hw_connection *conn);
-
-#define send_mvcpdocscoll(sockfd, objectIDs, count, from, dest, mvcp) \
- send_mvcpdocscollscoll(sockfd, objectIDs, count, from, dest, mvcp, DOCUMENT)
-#define send_mvcpcollscoll(sockfd, objectIDs, count, from, dest, mvcp) \
- send_mvcpdocscollscoll(sockfd, objectIDs, count, from, dest, mvcp, COLLECTION)
-
-#endif
-#endif
diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c
deleted file mode 100644
index 978a1915c0..0000000000
--- a/ext/hyperwave/hw.c
+++ /dev/null
@@ -1,4482 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <errno.h>
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/head.h"
-#include "ext/standard/info.h"
-#include "fopen_wrappers.h"
-#include "SAPI.h"
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#include "build-defs.h"
-#endif
-
-#if HYPERWAVE
-
-#include "php_ini.h"
-#include "php_hyperwave.h"
-
-static int le_socketp, le_psocketp, le_document;
-
-/*hw_module php_hw_module;*/
-
-#define HW_ATTR_NONE 1
-#define HW_ATTR_LANG 2
-#define HW_ATTR_NR 3
-
-function_entry hw_functions[] = {
- PHP_FE(hw_connect, NULL)
- PHP_FE(hw_pconnect, NULL)
- PHP_FE(hw_close, NULL)
- PHP_FE(hw_root, NULL)
- PHP_FE(hw_info, NULL)
- PHP_FE(hw_connection_info, NULL)
- PHP_FE(hw_error, NULL)
- PHP_FE(hw_errormsg, NULL)
- PHP_FE(hw_getparentsobj, NULL)
- PHP_FE(hw_getparents, NULL)
- PHP_FE(hw_children, NULL)
- PHP_FE(hw_childrenobj, NULL)
- PHP_FE(hw_getchildcoll, NULL)
- PHP_FE(hw_getchildcollobj, NULL)
- PHP_FE(hw_getobject, NULL)
- PHP_FE(hw_getandlock, NULL)
- PHP_FE(hw_unlock, NULL)
- PHP_FE(hw_gettext, NULL)
- PHP_FE(hw_edittext, NULL)
- PHP_FE(hw_getcgi, NULL)
- PHP_FE(hw_getremote, NULL)
- PHP_FE(hw_getremotechildren, NULL)
- PHP_FE(hw_pipedocument, NULL)
- PHP_FE(hw_pipecgi, NULL)
- PHP_FE(hw_insertdocument, NULL)
- PHP_FE(hw_mv, NULL)
- PHP_FE(hw_cp, NULL)
- PHP_FE(hw_deleteobject, NULL)
- PHP_FE(hw_changeobject, NULL)
- PHP_FE(hw_modifyobject, NULL)
- PHP_FE(hw_docbyanchor, NULL)
- PHP_FE(hw_docbyanchorobj, NULL)
- PHP_FE(hw_getobjectbyquery, NULL)
- PHP_FE(hw_getobjectbyqueryobj, NULL)
- PHP_FE(hw_getobjectbyquerycoll, NULL)
- PHP_FE(hw_getobjectbyquerycollobj, NULL)
- PHP_FE(hw_getobjectbyftquery, NULL)
- PHP_FE(hw_getobjectbyftqueryobj, NULL)
- PHP_FE(hw_getobjectbyftquerycoll, NULL)
- PHP_FE(hw_getobjectbyftquerycollobj, NULL)
- PHP_FE(hw_getchilddoccoll, NULL)
- PHP_FE(hw_getchilddoccollobj, NULL)
- PHP_FE(hw_getanchors, NULL)
- PHP_FE(hw_getanchorsobj, NULL)
- PHP_FE(hw_getusername, NULL)
- PHP_FE(hw_setlinkroot, NULL)
- PHP_FE(hw_identify, NULL)
- PHP_FE(hw_free_document, NULL)
- PHP_FE(hw_new_document, NULL)
- PHP_FE(hw_new_document_from_file, NULL)
- PHP_FE(hw_output_document, NULL)
- PHP_FE(hw_document_size, NULL)
- PHP_FE(hw_document_attributes, NULL)
- PHP_FE(hw_document_bodytag, NULL)
- PHP_FE(hw_document_content, NULL)
- PHP_FE(hw_document_setcontent, NULL)
- PHP_FE(hw_objrec2array, NULL)
- PHP_FE(hw_array2objrec, NULL)
- PHP_FE(hw_incollections, NULL)
- PHP_FE(hw_inscoll, NULL)
- PHP_FE(hw_insertobject, NULL)
- PHP_FE(hw_insdoc, NULL)
- PHP_FE(hw_getsrcbydestobj, NULL)
- PHP_FE(hw_insertanchors, NULL)
- PHP_FE(hw_getrellink, NULL)
- PHP_FE(hw_who, NULL)
- PHP_FE(hw_stat, NULL)
- PHP_FE(hw_mapid, NULL)
- PHP_FE(hw_dummy, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry hw_module_entry = {
- STANDARD_MODULE_HEADER,
- "hyperwave", hw_functions, PHP_MINIT(hw), PHP_MSHUTDOWN(hw), NULL, NULL, PHP_MINFO(hw), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-/*
-#ifdef ZTS
-int hw_globals_id;
-#else
-PHP_HW_API php_hw_globals hw_globals;
-#endif
-*/
-
-ZEND_DECLARE_MODULE_GLOBALS(hw)
-
-#ifdef COMPILE_DL_HYPERWAVE
-ZEND_GET_MODULE(hw)
-#endif
-
-void print_msg(hg_msg *msg, char *str, int txt);
-
-void _close_hw_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- hw_connection *conn = (hw_connection *)rsrc->ptr;
-
- if(conn->hostname)
- free(conn->hostname);
- if(conn->username)
- free(conn->username);
- close(conn->socket);
- free(conn);
- HwSG(num_links)--;
-}
-
-void _close_hw_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- hw_connection *conn = (hw_connection *)rsrc->ptr;
-
- if(conn->hostname)
- free(conn->hostname);
- if(conn->username)
- free(conn->username);
- close(conn->socket);
- free(conn);
- HwSG(num_links)--;
- HwSG(num_persistent)--;
-}
-
-void _free_hw_document(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- hw_document *doc = (hw_document *)rsrc->ptr;
- if(doc->data)
- free(doc->data);
- if(doc->attributes)
- free(doc->attributes);
- if(doc->bodytag)
- free(doc->bodytag);
- free(doc);
-}
-
-static void php_hw_init_globals(zend_hw_globals *hw_globals)
-{
- hw_globals->num_persistent = 0;
-}
-
-static PHP_INI_MH(OnHyperwavePort)
-{
- if (new_value==NULL) {
- HwSG(default_port) = HG_SERVER_PORT;
- } else {
- HwSG(default_port) = atoi(new_value);
- }
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("hyerwave.allow_persistent", "0", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_hw_globals, hw_globals)
- PHP_INI_ENTRY("hyperwave.default_port", "418", PHP_INI_ALL, OnHyperwavePort)
-PHP_INI_END()
-
-PHP_MINIT_FUNCTION(hw)
-{
- ZEND_INIT_MODULE_GLOBALS(hw, php_hw_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
- le_socketp = zend_register_list_destructors_ex(_close_hw_link, NULL, "hyperwave link", module_number);
- le_psocketp = zend_register_list_destructors_ex(NULL, _close_hw_plink, "hyperwave link persistent", module_number);
- le_document = zend_register_list_destructors_ex(_free_hw_document, NULL, "hyperwave document", module_number);
- Z_TYPE(hw_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("HW_ATTR_LANG", HW_ATTR_LANG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_ATTR_NR", HW_ATTR_NR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_ATTR_NONE", HW_ATTR_NONE, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(hw)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-/* {{{ make_return_objrec
- * creates an array in return value and frees all memory
- * Also adds as an assoc. array at the end of the return array with
- * statistics.
- */
-int make_return_objrec(pval **return_value, char **objrecs, int count)
-{
- zval *stat_arr;
- int i;
- int hidden, collhead, fullcollhead, total;
- int collheadnr, fullcollheadnr;
-
- if (array_init(*return_value) == FAILURE) {
- /* Ups, failed! Let's at least free the memory */
- for(i=0; i<count; i++)
- efree(objrecs[i]);
- efree(objrecs);
- return -1;
- }
-
- hidden = collhead = fullcollhead = total = 0;
- collheadnr = fullcollheadnr = -1;
- for(i=0; i<count; i++) {
- /* Fill the array with entries. No need to free objrecs[i], since
- * it is not duplicated in add_next_index_string().
- */
- if(NULL != objrecs[i]) {
- if(0 == fnAttributeCompare(objrecs[i], "PresentationHints", "Hidden"))
- hidden++;
- if(0 == fnAttributeCompare(objrecs[i], "PresentationHints", "CollectionHead")) {
- collhead++;
- collheadnr = total;
- }
- if(0 == fnAttributeCompare(objrecs[i], "PresentationHints", "FullCollectionHead")) {
- fullcollhead++;
- fullcollheadnr = total;
- }
- total++;
- add_next_index_string(*return_value, objrecs[i], 0);
- }
- }
- efree(objrecs);
-
- /* Array for statistics */
- MAKE_STD_ZVAL(stat_arr);
- if (array_init(stat_arr) == FAILURE) {
- return -1;
- }
-
- add_assoc_long(stat_arr, "Hidden", hidden);
- add_assoc_long(stat_arr, "CollectionHead", collhead);
- add_assoc_long(stat_arr, "FullCollectionHead", fullcollhead);
- add_assoc_long(stat_arr, "Total", total);
- add_assoc_long(stat_arr, "CollectionHeadNr", collheadnr);
- add_assoc_long(stat_arr, "FullCollectionHeadNr", fullcollheadnr);
-
- /* Add the stat array */
- zend_hash_next_index_insert(Z_ARRVAL_PP(return_value), &stat_arr, sizeof(zval), NULL);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ make2_return_array_from_objrec
-** creates an array return value from object record
-*/
-int make2_return_array_from_objrec(pval **return_value, char *objrec, zval *sarr) {
- char *attrname, *str, *temp, language[3];
- zval *spec_arr;
- char *strtok_buf = NULL;
-
- /* Create an array with an entry containing specs for each attribute
- and fill in the specs for Title, Description, Keyword, Group.
- If an array is passed as the last argument use it instead.
- */
- if(NULL != sarr) {
- spec_arr = sarr;
- } else {
- MAKE_STD_ZVAL(spec_arr);
- array_init(spec_arr);
- add_assoc_long(spec_arr, "Title", HW_ATTR_LANG);
- add_assoc_long(spec_arr, "Description", HW_ATTR_LANG);
- add_assoc_long(spec_arr, "Keyword", HW_ATTR_LANG);
- add_assoc_long(spec_arr, "Group", HW_ATTR_NONE);
- add_assoc_long(spec_arr, "HtmlAttr", HW_ATTR_NONE);
- add_assoc_long(spec_arr, "Parent", HW_ATTR_NONE);
- }
-
- if (array_init(*return_value) == FAILURE) {
- Z_TYPE_PP(return_value) = IS_STRING;
- Z_STRVAL_PP(return_value) = empty_string;
- Z_STRLEN_PP(return_value) = 0;
- return -1;
- }
-
- /* Loop through the attributes of object record and check
- if the attribute has a specification. If it has the value
- is added to array in spec record. If not it is added straight
- to the return_value array.
- */
- temp = estrdup(objrec);
- attrname = php_strtok_r(temp, "\n", &strtok_buf);
- while(attrname != NULL) {
- zval *data, **dataptr;
- long spec;
- str = attrname;
-
- /* Check if a specification is available.
- If it isn't available then insert the attribute as
- a string into the return array
- */
- while((*str != '=') && (*str != '\0'))
- str++;
- *str = '\0';
- str++;
- if(zend_hash_find(Z_ARRVAL_P(spec_arr), attrname, strlen(attrname)+1, (void **) &dataptr) == FAILURE) {
- add_assoc_string(*return_value, attrname, str, 1);
- } else {
- zval *newarr;
- data = *dataptr;
- spec = Z_LVAL_P(data);
-
- if(zend_hash_find(Z_ARRVAL_PP(return_value), attrname, strlen(attrname)+1, (void **) &dataptr) == FAILURE) {
- MAKE_STD_ZVAL(newarr);
- array_init(newarr);
- zend_hash_add(Z_ARRVAL_PP(return_value), attrname, strlen(attrname)+1, &newarr, sizeof(zval *), NULL);
- } else {
- newarr = *dataptr;
- }
-
- switch(spec) {
- case HW_ATTR_LANG:
- if(str[2] == ':') {
- str[2] = '\0';
- strcpy(language, str);
- str += 3;
- } else
- strcpy(language, "xx");
-
- add_assoc_string(newarr, language, str, 1);
- break;
- case HW_ATTR_NR:
- if(str[1] == ':') {
- str[1] = '\0';
- strcpy(language, str);
- str += 2;
- } else
- strcpy(language, "x");
-
- add_assoc_string(newarr, language, str, 1);
- break;
- case HW_ATTR_NONE:
- add_next_index_string(newarr, str, 1);
- break;
- }
- }
-
- attrname = php_strtok_r(NULL, "\n", &strtok_buf);
- }
- if(NULL == sarr){
-/*
- spec_arr->refcount--;
- zend_hash_destroy(Z_ARRVAL_P(spec_arr));
- efree(Z_ARRVAL_P(spec_arr));
-*/
- zval_dtor(spec_arr);
- efree(spec_arr);
- }
- efree(temp);
-
- return(0);
-}
-/* }}} */
-
-/* {{{ make_return_array_from_objrec
- */
-int make_return_array_from_objrec(pval **return_value, char *objrec) {
- char *attrname, *str, *temp, language[3], *title;
- int iTitle, iDesc, iKeyword, iGroup;
- zval *title_arr;
- zval *desc_arr;
- zval *keyword_arr;
- zval *group_arr;
- int hasTitle = 0;
- int hasDescription = 0;
- int hasKeyword = 0;
- int hasGroup = 0;
- char *strtok_buf;
-
- MAKE_STD_ZVAL(title_arr);
- MAKE_STD_ZVAL(desc_arr);
- MAKE_STD_ZVAL(keyword_arr);
- MAKE_STD_ZVAL(group_arr);
-
- if (array_init(*return_value) == FAILURE) {
- Z_TYPE_PP(return_value) = IS_STRING;
- Z_STRVAL_PP(return_value) = empty_string;
- Z_STRLEN_PP(return_value) = 0;
- return -1;
- }
-
- /* Fill Array of titles, descriptions and keywords */
- temp = estrdup(objrec);
- attrname = php_strtok_r(temp, "\n", &strtok_buf);
- while(attrname != NULL) {
- str = attrname;
- iTitle = 0;
- iDesc = 0;
- iKeyword = 0;
- iGroup = 0;
- if(0 == strncmp(attrname, "Title=", 6)) {
- if ((hasTitle == 0) && (array_init(title_arr) == FAILURE)) {
- return -1;
- }
- hasTitle = 1;
- str += 6;
- iTitle = 1;
- } else if(0 == strncmp(attrname, "Description=", 12)) {
- if ((hasDescription == 0) && (array_init(desc_arr) == FAILURE)) {
- return -1;
- }
- hasDescription = 1;
- str += 12;
- iDesc = 1;
- } else if(0 == strncmp(attrname, "Keyword=", 8)) {
- if ((hasKeyword == 0) && (array_init(keyword_arr) == FAILURE)) {
- return -1;
- }
- hasKeyword = 1;
- str += 8;
- iKeyword = 1;
- } else if(0 == strncmp(attrname, "Group=", 6)) {
- if ((hasGroup == 0) && (array_init(group_arr) == FAILURE)) {
- return -1;
- }
- hasGroup = 1;
- str += 6;
- iGroup = 1;
- }
- if(iTitle || iDesc || iKeyword) { /* Poor error check if end of string */
- if(str[2] == ':') {
- str[2] = '\0';
- strcpy(language, str);
- str += 3;
- } else
- strcpy(language, "xx");
-
- title = str;
- if(iTitle)
- add_assoc_string(title_arr, language, title, 1);
- else if(iDesc)
- add_assoc_string(desc_arr, language, title, 1);
- else if(iKeyword)
- add_assoc_string(keyword_arr, language, title, 1);
- } else if(iGroup) {
- if(iGroup)
- add_next_index_string(group_arr, str, 1);
- }
- attrname = php_strtok_r(NULL, "\n", &strtok_buf);
- }
- efree(temp);
-
- /* Add the title array, if we have one */
- if(hasTitle) {
- zend_hash_update(Z_ARRVAL_PP(return_value), "Title", 6, &title_arr, sizeof(zval *), NULL);
-
- } else {
- efree(title_arr);
- }
-
-
- if(hasDescription) {
- /* Add the description array, if we have one */
- zend_hash_update(Z_ARRVAL_PP(return_value), "Description", 12, &desc_arr, sizeof(zval *), NULL);
-
- } else {
- efree(desc_arr);
- }
-
- if(hasKeyword) {
- /* Add the keyword array, if we have one */
- zend_hash_update(Z_ARRVAL_PP(return_value), "Keyword", 8, &keyword_arr, sizeof(zval *), NULL);
-
- } else {
- efree(keyword_arr);
- }
-
- if(hasGroup) {
- /* Add the Group array, if we have one */
- zend_hash_update(Z_ARRVAL_PP(return_value), "Group", 6, &group_arr, sizeof(zval *), NULL);
-
- } else {
- efree(group_arr);
- }
-
- /* All other attributes. Make a another copy first */
- temp = estrdup(objrec);
- attrname = php_strtok_r(temp, "\n", &strtok_buf);
- while(attrname != NULL) {
- str = attrname;
- /* We don't want to insert titles, descr., keywords a second time */
- if((0 != strncmp(attrname, "Title=", 6)) &&
- (0 != strncmp(attrname, "Description=", 12)) &&
- (0 != strncmp(attrname, "Group=", 6)) &&
- (0 != strncmp(attrname, "Keyword=", 8))) {
- while((*str != '=') && (*str != '\0'))
- str++;
- *str = '\0';
- str++;
- add_assoc_string(*return_value, attrname, str, 1);
- }
- attrname = php_strtok_r(NULL, "\n", &strtok_buf);
- }
- efree(temp);
-
- return(0);
-}
-/* }}} */
-
-#define BUFFERLEN 1024
-/* {{{ make_objrec_from_array
- */
-static char * make_objrec_from_array(HashTable *lht) {
- int i, count, keytype;
- ulong length;
- char *key, str[BUFFERLEN], *objrec = NULL;
- zval *keydata, **keydataptr;
-
- if(NULL == lht)
- return NULL;
-
- if(0 == (count = zend_hash_num_elements(lht)))
- return NULL;
-
- zend_hash_internal_pointer_reset(lht);
- objrec = malloc(1);
- *objrec = '\0';
- for(i=0; i<count; i++) {
- keytype = zend_hash_get_current_key(lht, &key, &length, 0);
-/* if(HASH_KEY_IS_STRING == keytype) { */
- zend_hash_get_current_data(lht, (void **) &keydataptr);
- keydata = *keydataptr;
- switch(Z_TYPE_P(keydata)) {
- case IS_STRING:
- if(HASH_KEY_IS_STRING == keytype)
- snprintf(str, BUFFERLEN, "%s=%s\n", key, Z_STRVAL_P(keydata));
- else
- snprintf(str, BUFFERLEN, "%s\n", Z_STRVAL_P(keydata));
- break;
- case IS_LONG:
- if(HASH_KEY_IS_STRING == keytype)
- snprintf(str, BUFFERLEN, "%s=0x%lX\n", key, Z_LVAL_P(keydata));
- else
- snprintf(str, BUFFERLEN, "0x%lX\n", Z_LVAL_P(keydata));
- break;
- case IS_ARRAY: {
- int i, len, keylen, count;
- char *strarr, *ptr, *ptr1;
- count = zend_hash_num_elements(Z_ARRVAL_P(keydata));
- if(count > 0) {
- strarr = make_objrec_from_array(Z_ARRVAL_P(keydata));
- len = strlen(strarr) - 1;
- keylen = strlen(key);
- if(NULL == (ptr = malloc(len + 1 + count*(keylen+1)))) {
- free(objrec);
- return(NULL);
- }
- ptr1 = ptr;
- *ptr1 = '\0';
- strcpy(ptr1, key);
- ptr1 += keylen;
- *ptr1++ = '=';
- for(i=0; i<len; i++) {
- *ptr1++ = strarr[i];
- if(strarr[i] == '\n') {
- strcpy(ptr1, key);
- ptr1 += keylen;
- *ptr1++ = '=';
- } else if(strarr[i] == '=')
- ptr1[-1] = ':';
- }
- *ptr1++ = '\n';
- *ptr1 = '\0';
- strlcpy(str, ptr, sizeof(str));
- }
- break;
- }
- }
- objrec = realloc(objrec, strlen(objrec)+strlen(str)+1);
- strcat(objrec, str);
-/* } */
- zend_hash_move_forward(lht);
- }
- return objrec;
-}
-/* }}} */
-#undef BUFFERLEN
-
-/* {{{ make_ints_from_array
- */
-static int * make_ints_from_array(HashTable *lht) {
- int i, count;
- int *objids = NULL;
- zval **keydata;
-
- if(NULL == lht)
- return NULL;
-
- if(0 == (count = zend_hash_num_elements(lht)))
- return NULL;
-
- zend_hash_internal_pointer_reset(lht);
- if(NULL == (objids = emalloc(count*sizeof(int))))
- return NULL;
- for(i=0; i<count; i++) {
- zend_hash_get_current_data(lht, (void **) &keydata);
- switch(Z_TYPE_PP(keydata)) {
- case IS_LONG:
- objids[i] = Z_LVAL_PP(keydata);
- break;
- default:
- objids[i] = 0;
- }
- zend_hash_move_forward(lht);
- }
- return objids;
-}
-/* }}} */
-
-/* {{{ make_strs_from_array
- */
-static char **make_strs_from_array(HashTable *arrht) {
- char **carr = NULL;
- char **ptr;
- zval *data, **dataptr;
-
- zend_hash_internal_pointer_reset(arrht);
- if(NULL == (carr = emalloc(zend_hash_num_elements(arrht) * sizeof(char *))))
- return(NULL);
- ptr = carr;
-
- /* Iterate through hash */
- while(zend_hash_get_current_data(arrht, (void **) &dataptr) == SUCCESS) {
- data = *dataptr;
- switch(Z_TYPE_P(data)) {
- case IS_STRING:
- *ptr = estrdup(Z_STRVAL_P(data));
-/*fprintf(stderr, "carr[] = %s\n", *ptr); */
- break;
- default:
- *ptr = NULL;
- }
- ptr++;
-
- zend_hash_move_forward(arrht);
- }
- return(carr);
-}
-/* }}} */
-
-#define BUFFERLEN 30
-/* {{{ php_hw_do_connect
- */
-static void php_hw_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval **argv[4];
- int argc;
- int sockfd;
- int port = 0;
- char *host = NULL;
- char *userdata = NULL;
- char *server_string = NULL;
- char *username = NULL;
- char *password = NULL;
- char *hashed_details;
- char *str = NULL;
- char buffer[BUFFERLEN];
- int hashed_details_length;
- hw_connection *ptr;
- int do_swap;
- int version = 0;
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 2:
- case 4:
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- /* Host: */
- convert_to_string_ex(argv[0]);
- host = (char *) estrndup(Z_STRVAL_PP(argv[0]), Z_STRLEN_PP(argv[0]));
-
- /* Port: */
- convert_to_long_ex(argv[1]);
- port = Z_LVAL_PP(argv[1]);
-
- /* Username and Password */
- if(argc > 2) {
- /* Username */
- convert_to_string_ex(argv[2]);
- username = (char *) estrndup(Z_STRVAL_PP(argv[2]), Z_STRLEN_PP(argv[2]));
- /* Password */
- convert_to_string_ex(argv[3]);
- password = (char *) estrndup(Z_STRVAL_PP(argv[3]), Z_STRLEN_PP(argv[3]));
- }
-
- /* Create identifier string for connection */
- snprintf(buffer, BUFFERLEN, "%d", port);
- hashed_details_length = strlen(host)+strlen(buffer)+8;
- if(NULL == (hashed_details = (char *) emalloc(hashed_details_length+1))) {
- if(host) efree(host);
- if(password) efree(password);
- if(username) efree(username);
- php_error(E_ERROR, "Could not get memory for connection details");
- RETURN_FALSE;
- }
- sprintf(hashed_details, "hw_%s_%d", host, port);
-
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) {
- list_entry new_le;
-
- if (HwSG(max_links)!=-1 && HwSG(num_links)>=HwSG(max_links)) {
- php_error(E_ERROR, "Hyperwave: Too many open links (%d)", HwSG(num_links));
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (HwSG(max_persistent!=-1) && HwSG(num_persistent)>=HwSG(max_persistent)) {
- php_error(E_ERROR, "Hyperwave: Too many open persistent links (%d)", HwSG(num_persistent));
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if ( (sockfd = open_hg_connection(host, port)) < 0 ) {
- php_error(E_ERROR, "Could not open connection to %s, Port: %d (retval=%d, errno=%d)", host, port, sockfd, errno);
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if(NULL == (ptr = malloc(sizeof(hw_connection)))) {
- php_error(E_ERROR, "Could not get memory for connection structure");
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if(0 != (ptr->lasterror = initialize_hg_connection(sockfd, &do_swap, &version, &userdata, &server_string, username, password))) {
- php_error(E_ERROR, "Could not initalize hyperwave connection");
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- if(userdata) efree(userdata);
- if(server_string) free(server_string);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if(username) efree(username);
- if(password) efree(password);
-
- ptr->version = version;
- ptr->server_string = server_string;
- ptr->socket = sockfd;
- ptr->swap_on = do_swap;
- ptr->linkroot = 0;
- ptr->hostname = strdup(host);
- ptr->username = strdup("anonymous");
-
- new_le.ptr = (void *) ptr;
- Z_TYPE(new_le) = le_psocketp;
-
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- php_error(E_ERROR, "Could not hash table with connection details");
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- if(server_string) free(server_string);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- HwSG(num_links)++;
- HwSG(num_persistent)++;
- } else {
- /*php_printf("Found already open connection\n"); */
- if (Z_TYPE_P(le) != le_psocketp) {
- RETURN_FALSE;
- }
- ptr = le->ptr;
- }
-
- Z_LVAL_P(return_value) = zend_list_insert(ptr, le_psocketp);
- Z_TYPE_P(return_value) = IS_RESOURCE;
-
- } else {
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual hyperwave link sits.
- * if it doesn't, open a new hyperwave link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1, (void **) &index_ptr)==SUCCESS) {
- int type, link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = (hw_connection *) zend_list_find(link, &type); /* check if the link is still there */
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- Z_LVAL_P(return_value) = HwSG(default_link) = link;
- Z_TYPE_P(return_value) = IS_LONG;
- efree(hashed_details);
- if(username) efree(username);
- if(password) efree(password);
- if(host) efree(host);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- }
- }
-
- if ( (sockfd = open_hg_connection(host, port)) < 0 ) {
- php_error(E_ERROR, "Could not open connection to %s, Port: %d (retval=%d", host, port, sockfd);
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if(NULL == (ptr = malloc(sizeof(hw_connection)))) {
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if(0 != (ptr->lasterror = initialize_hg_connection(sockfd, &do_swap, &version, &userdata, &server_string, username, password))) {
- php_error(E_ERROR, "Could not initalize hyperwave connection");
- if(host) efree(host);
- if(username) efree(username);
- if(password) efree(password);
- if(userdata) efree(userdata);
- if(server_string) free(server_string);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if(username) efree(username);
- if(password) efree(password);
-
- ptr->version = version;
- ptr->server_string = server_string;
- ptr->socket = sockfd;
- ptr->swap_on = do_swap;
- ptr->linkroot = 0;
- ptr->hostname = strdup(host);
- ptr->username = strdup("anonymous");
-
- Z_LVAL_P(return_value) = zend_list_insert(ptr, le_socketp);
- Z_TYPE_P(return_value) = IS_RESOURCE;
-
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1, (void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- php_error(E_ERROR, "Could not update connection details in hash table");
- if(host) efree(host);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- }
-
- efree(hashed_details);
- if(host) efree(host);
- HwSG(default_link)=Z_LVAL_P(return_value);
-
- /* At this point we have a working connection. If userdata was given
- we are also indentified.
- If there is no userdata because hw_connect was called without username
- and password, we don't evaluate userdata.
- */
- if(NULL == userdata)
- return;
-
- if(ptr->username) free(ptr->username);
- str = userdata;
- while((*str != 0) && (*str != ' '))
- str++;
- if(*str != '\0')
- ptr->username = strdup(++str);
- else
- ptr->username = NULL;
- efree(userdata);
-}
-/* }}} */
-#undef BUFFERLEN
-
-/* Start of user level functions */
-/* ***************************** */
-/* {{{ proto int hw_connect(string host, int port [string username [, string password]])
- Connect to the Hyperwave server */
-PHP_FUNCTION(hw_connect)
-{
- php_hw_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int hw_pconnect(string host, int port [, string username [, string password]])
- Connect to the Hyperwave server persistent */
-PHP_FUNCTION(hw_pconnect)
-{
- php_hw_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void hw_close(int link)
- Close connection to Hyperwave server */
-PHP_FUNCTION(hw_close)
-{
- pval **arg1;
- int id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- id=Z_LVAL_PP(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
- zend_list_delete(id);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void hw_info(int link)
- Outputs info string */
-PHP_FUNCTION(hw_info)
-{
- pval **arg1;
- int id, type;
- hw_connection *ptr;
- char *str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- id=Z_LVAL_PP(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
- if(NULL != (str = get_hw_info(ptr))) {
- /*
- php_printf("%s\n", str);
- efree(str);
- */
- Z_STRLEN_P(return_value) = strlen(str);
- Z_STRVAL_P(return_value) = str;
- Z_TYPE_P(return_value) = IS_STRING;
- return;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int hw_error(int link)
- Returns last error number */
-PHP_FUNCTION(hw_error)
-{
- pval **arg1;
- int id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- id=Z_LVAL_PP(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
- RETURN_LONG(ptr->lasterror);
-}
-/* }}} */
-
-/* {{{ proto string hw_errormsg(int link)
- Returns last error message */
-PHP_FUNCTION(hw_errormsg)
-{
- pval **arg1;
- int id, type;
- hw_connection *ptr;
- char errstr[100];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- id=Z_LVAL_PP(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- switch (ptr->lasterror) {
- case 0:
- sprintf(errstr, "No error");
- break;
- case NOACCESS:
- sprintf(errstr, "Access denied");
- break;
- case NODOCS:
- sprintf(errstr, "No documents");
- break;
- case NONAME:
- sprintf(errstr, "No collection name");
- break;
- case NODOC:
- sprintf(errstr, "Object is not a document");
- break;
- case NOOBJ:
- sprintf(errstr, "No object received");
- break;
- case NOCOLLS:
- sprintf(errstr, "No collections received");
- break;
- case DBSTUBNG:
- sprintf(errstr, "Connection to low-level database failed");
- break;
- case NOTFOUND:
- sprintf(errstr, "Object not found");
- break;
- case EXIST:
- sprintf(errstr, "Collection already exists");
- break;
- case FATHERDEL:
- sprintf(errstr, "parent collection disappeared");
- break;
- case FATHNOCOLL:
- sprintf(errstr, "parent collection not a collection");
- break;
- case NOTEMPTY:
- sprintf(errstr, "Collection not empty");
- break;
- case DESTNOCOLL:
- sprintf(errstr, "Destination not a collection");
- break;
- case SRCEQDEST:
- sprintf(errstr, "Source equals destination");
- break;
- case REQPEND:
- sprintf(errstr, "Request pending");
- break;
- case TIMEOUT:
- sprintf(errstr, "Timeout");
- break;
- case NAMENOTUNIQUE:
- sprintf(errstr, "Name not unique");
- break;
- case WRITESTOPPED:
- sprintf(errstr, "Database now read-only; try again later");
- break;
- case LOCKED:
- sprintf(errstr, "Object locked; try again later");
- break;
- case CHANGEBASEFLD:
- sprintf(errstr, "Change of base-attribute");
- break;
- case NOTREMOVED:
- sprintf(errstr, "Attribute not removed");
- break;
- case FLDEXISTS:
- sprintf(errstr, "Attribute exists");
- break;
- case CMDSYNTAX:
- sprintf(errstr, "Syntax error in command");
- break;
- case NOLANGUAGE:
- sprintf(errstr, "No or unknown language specified");
- break;
- case WRGTYPE:
- sprintf(errstr, "Wrong type in object");
- break;
- case WRGVERSION:
- sprintf(errstr, "Client version too old");
- break;
- case CONNECTION:
- sprintf(errstr, "No connection to other server");
- break;
- case SYNC:
- sprintf(errstr, "Synchronization error");
- break;
- case NOPATH:
- sprintf(errstr, "No path entry");
- break;
- case WRGPATH:
- sprintf(errstr, "Wrong path entry");
- break;
- case PASSWD:
- sprintf(errstr, "Wrong password (server-to-server server authentication)");
- break;
- case LC_NO_MORE_USERS:
- sprintf(errstr, "No more users for license");
- break;
- case LC_NO_MORE_DOCS:
- sprintf(errstr, "No more documents for this session and license");
- break;
- case RSERV_NRESP:
- sprintf(errstr, "Remote server not responding");
- break;
- case Q_OVERFLOW:
- sprintf(errstr, "Query overflow");
- break;
- case USR_BREAK:
- sprintf(errstr, "Break by user");
- break;
- case N_IMPL:
- sprintf(errstr, "Not implemented");
- break;
- case WRG_VALUE:
- sprintf(errstr, "Wrong value");
- break;
- case INSUFF_FUNDS:
- sprintf(errstr, "Insufficient funds");
- break;
- case REORG:
- sprintf(errstr, "Reorganization in progress");
- break;
- case USER_LIMIT:
- sprintf(errstr, "Limit of simultaneous users reached");
- break;
- case FTCONNECT:
- sprintf(errstr, "No connection to fulltext server");
- break;
- case FTTIMEOUT:
- sprintf(errstr, "Connection timed out");
- break;
- case FTINDEX:
- sprintf(errstr, "Something wrong with fulltext index");
- break;
- case FTSYNTAX:
- sprintf(errstr, "Query syntax error");
- break;
- case REQUESTPENDING:
- sprintf(errstr, "Request pending");
- break;
- case NOCONNECTION:
- sprintf(errstr, "No connection to document server");
- break;
- case WRONGVERSION:
- sprintf(errstr, "Wrong protocol version");
- break;
- case NOTINITIALIZED:
- sprintf(errstr, "Not initialized");
- break;
- case BADREQUEST:
- sprintf(errstr, "Bad request");
- break;
- case BADLRN:
- sprintf(errstr, "Bad document number");
- break;
- case OPENSTORE_WRITE:
- sprintf(errstr, "Cannot write to local store");
- break;
- case OPENSTORE_READ:
- sprintf(errstr, "Cannot read from local store");
- break;
- case READSTORE:
- sprintf(errstr, "Store read error");
- break;
- case WRITESTORE:
- sprintf(errstr, "Write error");
- break;
- case CLOSESTORE:
- sprintf(errstr, "Close error");
- break;
- case BADPATH:
- sprintf(errstr, "Bad path");
- break;
- case NOPATHDC:
- sprintf(errstr, "No path");
- break;
- case OPENFILE:
- sprintf(errstr, "Cannot open file");
- break;
- case READFILE:
- sprintf(errstr, "Cannot read from file // same");
- break;
- case WRITEFILE:
- sprintf(errstr, "Cannot write to file");
- break;
- case CONNECTCLIENT:
- sprintf(errstr, "Could not connect to client");
- break;
- case ACCEPT:
- sprintf(errstr, "Could not accept connection");
- break;
- case READSOCKET:
- sprintf(errstr, "Could not read from socket");
- break;
- case WRITESOCKET:
- sprintf(errstr, "Could not write to socket");
- break;
- case TOOMUCHDATA:
- sprintf(errstr, "Received too much data");
- break;
- case TOOFEWDATA:
- sprintf(errstr, "Received too few data // ...");
- break;
- case NOTIMPLEMENTED:
- sprintf(errstr, "Not implemented");
- break;
- case USERBREAK:
- sprintf(errstr, "User break");
- break;
- case INTERNAL:
- sprintf(errstr, "Internal error");
- break;
- case INVALIDOBJECT:
- sprintf(errstr, "Invalid object");
- break;
- case JOBTIMEOUT:
- sprintf(errstr, "Job timed out");
- break;
- case OPENPORT:
- sprintf(errstr, "Cannot open port // ... for several resons");
- break;
- case NODATA:
- sprintf(errstr, "Received no data");
- break;
- case NOPORT:
- sprintf(errstr, "No port to handle this request");
- break;
- case NOTCACHED:
- sprintf(errstr, "Document not cached");
- break;
- case BADCACHETYPE:
- sprintf(errstr, "Bad cache type");
- break;
- case OPENCACHE_WRITE:
- sprintf(errstr, "Cannot write to cache");
- break;
- case OPENCACHE_READ:
- sprintf(errstr, "Cannot read from cache // same");
- break;
- case NOSOURCE:
- sprintf(errstr, "Do not know what to read");
- break;
- case CLOSECACHE:
- sprintf(errstr, "Could not insert into cache");
- break;
- case CONNECTREMOTE:
- sprintf(errstr, "Could not connect to remote server");
- break;
- case LOCKREFUSED:
- sprintf(errstr, "Lock refused // could not lock the stores");
- break;
- default:
- sprintf(errstr, "Unknown error: %d", ptr->lasterror);
- }
- RETURN_STRING(errstr, 1);
-}
-/* }}} */
-
-/* {{{ proto int hw_root(void)
- Returns object id of root collection */
-PHP_FUNCTION(hw_root)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- Z_LVAL_P(return_value) = 0;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ php_hw_command
- */
-char *php_hw_command(INTERNAL_FUNCTION_PARAMETERS, int comm) {
- pval **arg1;
- int link, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- return NULL;
- }
- convert_to_long_ex(arg1);
- link=Z_LVAL_PP(arg1);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- return NULL;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- if (0 != (ptr->lasterror = send_command(ptr->socket, comm, &object)))
- return NULL;
-
- return object;
- }
-}
-/* }}} */
-
-/* {{{ proto string hw_stat(int link)
- Returns status string */
-PHP_FUNCTION(hw_stat)
-{
- char *object;
-
- object = php_hw_command(INTERNAL_FUNCTION_PARAM_PASSTHRU, STAT_COMMAND);
- if(object == NULL)
- RETURN_FALSE;
-
- Z_STRVAL_P(return_value) = object;
- Z_STRLEN_P(return_value) = strlen(object);
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto array hw_who(int link)
- Returns names and info of users loged in */
-PHP_FUNCTION(hw_who)
-{
- zval *user_arr;
- char *object, *ptr, *temp, *attrname;
- int i;
- char *strtok_buf;
-
- object = php_hw_command(INTERNAL_FUNCTION_PARAM_PASSTHRU, WHO_COMMAND);
- if(object == NULL)
- RETURN_FALSE;
-
- ptr = object;
-
-php_printf("%s\n", ptr);
- /* Skip first two lines, they just contain:
- Users in Database
-
- */
- while((*ptr != '\0') && (*ptr != '\n'))
- ptr++;
- while((*ptr != '\0') && (*ptr != '\n'))
- ptr++;
- if(*ptr == '\0') {
- efree(object);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(object);
- RETURN_FALSE;
- }
-
- temp = estrdup(ptr);
- attrname = php_strtok_r(temp, "\n", &strtok_buf);
- i = 0;
- while(attrname != NULL) {
- char *name;
-
- ALLOC_ZVAL(user_arr);
- if (array_init(user_arr) == FAILURE) {
- efree(object);
- RETURN_FALSE;
- }
-
- ptr = attrname;
- if(*ptr++ == '*')
- add_assoc_long(user_arr, "self", 1);
- else
- add_assoc_long(user_arr, "self", 0);
-
- ptr++;
- name = ptr;
- while((*ptr != '\0') && (*ptr != ' '))
- ptr++;
- *ptr = '\0';
- add_assoc_string(user_arr, "id", name, 1);
-
- ptr++;
- name = ptr;
- while((*ptr != '\0') && (*ptr != ' '))
- ptr++;
- *ptr = '\0';
- add_assoc_string(user_arr, "name", name, 1);
-
- ptr++;
- while((*ptr != '\0') && (*ptr == ' '))
- ptr++;
-
- name = ptr;
- while((*ptr != '\0') && (*ptr != ' '))
- ptr++;
- *ptr = '\0';
- add_assoc_string(user_arr, "system", name, 1);
-
- ptr++;
- while((*ptr != '\0') && (*ptr == ' '))
- ptr++;
-
- name = ptr;
- while((*ptr != '\0') && (*ptr != ' '))
- ptr++;
- *ptr = '\0';
- add_assoc_string(user_arr, "onSinceDate", name, 1);
-
- ptr++;
- while((*ptr != '\0') && (*ptr == ' '))
- ptr++;
-
- name = ptr;
- while((*ptr != '\0') && (*ptr != ' '))
- ptr++;
- *ptr = '\0';
- add_assoc_string(user_arr, "onSinceTime", name, 1);
-
- ptr++;
- while((*ptr != '\0') && (*ptr == ' '))
- ptr++;
-
- name = ptr;
- while((*ptr != '\0') && (*ptr != ' '))
- ptr++;
- *ptr = '\0';
- add_assoc_string(user_arr, "TotalTime", name, 1);
-
- /* Add the user array */
- zend_hash_index_update(Z_ARRVAL_P(return_value), i++, &user_arr, sizeof(pval), NULL);
-
- attrname = php_strtok_r(NULL, "\n", &strtok_buf);
- }
- efree(temp);
- efree(object);
-
-}
-/* }}} */
-
-/* {{{ proto string hw_dummy(int link, int id, int msgid)
- Hyperwave dummy function */
-PHP_FUNCTION(hw_dummy)
-{
- pval **arg1, **arg2, **arg3;
- int link, id, type, msgid;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- msgid=Z_LVAL_PP(arg3);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- if (0 != (ptr->lasterror = send_dummy(ptr->socket, id, msgid, &object)))
- RETURN_FALSE;
-
-php_printf("%s", object);
- Z_STRVAL_P(return_value) = object;
- Z_STRLEN_P(return_value) = strlen(object);
- Z_TYPE_P(return_value) = IS_STRING;
- }
-}
-/* }}} */
-
-/* {{{ proto string hw_getobject(int link, int objid [, string query])
- Returns object record */
-PHP_FUNCTION(hw_getobject)
-{
- pval **argv[3];
- int argc, link, id, type, multi;
- char *query;
- hw_connection *ptr;
-
- argc = ZEND_NUM_ARGS();
- if(argc < 2 || argc > 3)
- WRONG_PARAM_COUNT;
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(argv[0]);
- if(Z_TYPE_PP(argv[1]) == IS_ARRAY) {
- multi = 1;
- convert_to_array_ex(argv[1]);
- } else {
- multi = 0;
- convert_to_long_ex(argv[1]);
- }
-
- if(argc == 3) {
- convert_to_string_ex(argv[2]);
- query = Z_STRVAL_PP(argv[2]);
- } else
- query = NULL;
-
- link=Z_LVAL_PP(argv[0]);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if(multi) {
- char **objects = NULL;
- int count, *ids, i;
- HashTable *lht;
- zval **keydata;
-
- lht = Z_ARRVAL_PP(argv[1]);
- if(0 == (count = zend_hash_num_elements(lht))) {
- RETURN_FALSE;
- }
- ids = emalloc(count * sizeof(hw_objectID));
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- zend_hash_get_current_data(lht, (void **) &keydata);
- switch(Z_TYPE_PP(keydata)) {
- case IS_LONG:
- ids[i] = Z_LVAL_PP(keydata);
- break;
- default:
- ids[i] = Z_LVAL_PP(keydata);
- }
- zend_hash_move_forward(lht);
- }
-
- if (0 != (ptr->lasterror = send_objectbyidquery(ptr->socket, ids, &count, query, &objects))) {
- efree(ids);
- RETURN_FALSE;
- }
- efree(ids);
- if (array_init(return_value) == FAILURE) {
- efree(objects);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++) {
- add_index_string(return_value, i, objects[i], 0);
- }
- efree(objects);
-
- } else {
- char *object = NULL;
- id=Z_LVAL_PP(argv[1]);
- if (0 != (ptr->lasterror = send_getobject(ptr->socket, id, &object)))
- RETURN_FALSE;
-
- RETURN_STRING(object, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto int hw_insertobject(int link, string objrec, string parms)
- Inserts an object */
-PHP_FUNCTION(hw_insertobject)
-{
- pval *arg1, *arg2, *arg3;
- int link, type;
- char *objrec, *parms;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_string(arg2);
- convert_to_string(arg3);
- link=Z_LVAL_P(arg1);
- objrec=Z_STRVAL_P(arg2);
- parms=Z_STRVAL_P(arg3);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- int objid;
- if (0 != (ptr->lasterror = send_insertobject(ptr->socket, objrec, parms, &objid)))
- RETURN_FALSE;
-
- RETURN_LONG(objid);
- }
-}
-/* }}} */
-
-/* {{{ proto string hw_getandlock(int link, int objid)
- Returns object record and locks object */
-PHP_FUNCTION(hw_getandlock)
-{
- pval *arg1, *arg2;
- int link, id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- if (0 != (ptr->lasterror = send_getandlock(ptr->socket, id, &object)))
- RETURN_FALSE;
-
- RETURN_STRING(object, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto void hw_unlock(int link, int objid)
- Unlocks object */
-PHP_FUNCTION(hw_unlock)
-{
- pval *arg1, *arg2;
- int link, id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_unlock(ptr->socket, id)))
- RETURN_FALSE;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void hw_deleteobject(int link, int objid)
- Deletes object */
-PHP_FUNCTION(hw_deleteobject)
-{
- pval *arg1, *arg2;
- int link, id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_deleteobject(ptr->socket, id)))
- RETURN_FALSE;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void hw_changeobject(int link, int objid, array attributes)
- Changes attributes of an object (obsolete) */
-#define BUFFERLEN 200
-PHP_FUNCTION(hw_changeobject)
-{
- pval *arg1, *arg2, *arg3;
- int link, id, type, i;
- hw_connection *ptr;
- char *modification, *oldobjrec, buf[BUFFERLEN];
- HashTable *newobjarr;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1); /* Connection */
- convert_to_long(arg2); /* object ID */
- convert_to_array(arg3); /* Array with new attributes */
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- newobjarr=Z_ARRVAL_P(arg3);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- /* get the old object record */
- if(0 != (ptr->lasterror = send_getandlock(ptr->socket, id, &oldobjrec)))
- RETURN_FALSE;
-
- zend_hash_internal_pointer_reset(newobjarr);
- modification = strdup("");
- for(i=0; i<zend_hash_num_elements(newobjarr); i++) {
- char *key, *str, *str1, newattribute[BUFFERLEN];
- pval *data, **dataptr;
- int j, noinsert=1;
- ulong ind;
-
- zend_hash_get_current_key(newobjarr, &key, &ind, 0);
- zend_hash_get_current_data(newobjarr, (void *) &dataptr);
- data = *dataptr;
- switch(Z_TYPE_P(data)) {
- case IS_STRING:
- if(strlen(Z_STRVAL_P(data)) == 0)
- snprintf(newattribute, BUFFERLEN, "rem %s", key);
- else
- snprintf(newattribute, BUFFERLEN, "add %s=%s", key, Z_STRVAL_P(data));
- noinsert = 0;
- break;
- default:
- newattribute[0] = '\0';
- }
- if(!noinsert) {
- modification = fnInsStr(modification, 0, "\\");
- modification = fnInsStr(modification, 0, newattribute);
-/* modification = fnInsStr(modification, 0, "add "); */
-
- /* Retrieve the old attribute from object record */
- if(NULL != (str = strstr(oldobjrec, key))) {
- str1 = str;
- j = 0;
- while((str1 != NULL) && (*str1 != '\n') && (j < BUFFERLEN-1)) {
- buf[j++] = *str1++;
- }
- buf[j] = '\0';
- modification = fnInsStr(modification, 0, "\\");
- modification = fnInsStr(modification, 0, buf);
- modification = fnInsStr(modification, 0, "rem ");
- }
- }
- zend_hash_move_forward(newobjarr);
- }
- efree(oldobjrec);
-
- set_swap(ptr->swap_on);
- modification[strlen(modification)-1] = '\0';
- if (0 != (ptr->lasterror = send_changeobject(ptr->socket, id, modification))) {
- free(modification);
- send_unlock(ptr->socket, id);
- RETURN_FALSE;
- }
- free(modification);
- if (0 != (ptr->lasterror = send_unlock(ptr->socket, id))) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-#undef BUFFERLEN
-/* }}} */
-
-/* {{{ proto void hw_modifyobject(int link, int objid, array remattributes, array addattributes [, int mode])
- Modifies attributes of an object */
-#define BUFFERLEN 200
-PHP_FUNCTION(hw_modifyobject)
-{
- zval **argv[5];
- int argc;
- int link, id, type, i, mode;
- hw_connection *ptr;
- char *modification;
- HashTable *remobjarr, *addobjarr;
-
- argc = ZEND_NUM_ARGS();
- if((argc > 5) || (argc < 4))
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE)
- if(argc < 4) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(argv[0]); /* Connection */
- convert_to_long_ex(argv[1]); /* object ID */
- convert_to_array_ex(argv[2]); /* Array with attributes to remove */
- convert_to_array_ex(argv[3]); /* Array with attributes to add */
- if(argc == 5) {
- convert_to_long_ex(argv[4]);
- mode = Z_LVAL_PP(argv[4]);
- } else
- mode = 0;
- link=Z_LVAL_PP(argv[0]);
- id=Z_LVAL_PP(argv[1]);
- remobjarr=Z_ARRVAL_PP(argv[2]);
- addobjarr=Z_ARRVAL_PP(argv[3]);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- modification = strdup("");
- if(addobjarr != NULL) {
- zend_hash_internal_pointer_reset(addobjarr);
- for(i=0; i<zend_hash_num_elements(addobjarr); i++) {
- char *key, addattribute[BUFFERLEN];
- zval *data, **dataptr;
- int noinsert=1;
- ulong ind;
-
- zend_hash_get_current_key(addobjarr, &key, &ind, 0);
- zend_hash_get_current_data(addobjarr, (void *) &dataptr);
- data = *dataptr;
- switch(Z_TYPE_P(data)) {
- case IS_STRING:
- if(strlen(Z_STRVAL_P(data)) > 0) {
- snprintf(addattribute, BUFFERLEN, "add %s=%s", key, Z_STRVAL_P(data));
-/* fprintf(stderr, "add: %s\n", addattribute); */
- noinsert = 0;
- }
- break;
- case IS_ARRAY: {
- int i, len, keylen, count;
- char *strarr, *ptr, *ptr1;
- count = zend_hash_num_elements(Z_ARRVAL_P(data));
- if(count > 0) {
- strarr = make_objrec_from_array(Z_ARRVAL_P(data));
- len = strlen(strarr) - 1;
- keylen = strlen(key);
- if(NULL == (ptr = malloc(len + 1 + count*(keylen+1+4)))) {
- if(modification)
- free(modification);
- RETURN_FALSE;
- }
- ptr1 = ptr;
- *ptr1 = '\0';
- strcpy(ptr1, "add ");
- ptr1 += 4;
- strcpy(ptr1, key);
- ptr1 += keylen;
- *ptr1++ = '=';
- for(i=0; i<len; i++) {
- *ptr1++ = strarr[i];
- if(strarr[i] == '\n') {
- ptr1[-1] = '\\';
- strcpy(ptr1, "add ");
- ptr1 += 4;
- strcpy(ptr1, key);
- ptr1 += keylen;
- *ptr1++ = '=';
- } else if(strarr[i] == '=')
- ptr1[-1] = ':';
- }
- *ptr1 = '\0';
- strlcpy(addattribute, ptr, sizeof(addattribute));
- noinsert = 0;
- }
- break;
- }
- }
- if(!noinsert) {
- modification = fnInsStr(modification, 0, "\\");
- modification = fnInsStr(modification, 0, addattribute);
- }
- zend_hash_move_forward(addobjarr);
- }
- }
-
- if(remobjarr != NULL) {
- int nr;
- zend_hash_internal_pointer_reset(remobjarr);
- nr = zend_hash_num_elements(remobjarr);
- for(i=0; i<nr; i++) {
- char *key, remattribute[BUFFERLEN];
- zval *data, **dataptr;
- int noinsert=1;
- ulong ind;
-
- zend_hash_get_current_key(remobjarr, &key, &ind, 0);
- zend_hash_get_current_data(remobjarr, (void *) &dataptr);
- data = *dataptr;
- switch(Z_TYPE_P(data)) {
- case IS_STRING:
- if(strlen(Z_STRVAL_P(data)) > 0) {
- snprintf(remattribute, BUFFERLEN, "rem %s=%s", key, Z_STRVAL_P(data));
- noinsert = 0;
- } else {
- snprintf(remattribute, BUFFERLEN, "rem %s", key);
- noinsert = 0;
- }
- break;
- case IS_ARRAY: {
- int i, len, keylen, count;
- char *strarr, *ptr, *ptr1;
- count = zend_hash_num_elements(Z_ARRVAL_P(data));
- if(count > 0) {
- strarr = make_objrec_from_array(Z_ARRVAL_P(data));
- len = strlen(strarr) - 1;
- keylen = strlen(key);
- if(NULL == (ptr = malloc(len + 1 + count*(keylen+1+4)))) {
- if(modification)
- free(modification);
- RETURN_FALSE;
- }
- ptr1 = ptr;
- *ptr1 = '\0';
- strcpy(ptr1, "rem ");
- ptr1 += 4;
- strcpy(ptr1, key);
- ptr1 += keylen;
- *ptr1++ = '=';
- for(i=0; i<len; i++) {
- *ptr1++ = strarr[i];
- if(strarr[i] == '\n') {
- ptr1[-1] = '\\';
- strcpy(ptr1, "rem ");
- ptr1 += 4;
- strcpy(ptr1, key);
- ptr1 += keylen;
- *ptr1++ = '=';
- } else if(strarr[i] == '=')
- ptr1[-1] = ':';
- }
- *ptr1++ = '\n';
- *ptr1 = '\0';
- strlcpy(remattribute, ptr, sizeof(remattribute));
- noinsert = 0;
- }
- break;
- }
- }
- if(!noinsert) {
- modification = fnInsStr(modification, 0, "\\");
- modification = fnInsStr(modification, 0, remattribute);
- }
- zend_hash_move_forward(remobjarr);
- }
- }
-
- set_swap(ptr->swap_on);
- modification[strlen(modification)-1] = '\0';
- if(strlen(modification) == 0) {
- ptr->lasterror = 0;
- free(modification);
- RETURN_TRUE;
- }
-/* fprintf(stderr, "modifyobject: %s\n", modification); */
- switch(mode) {
- case 0:
- if (0 == (ptr->lasterror = send_lock(ptr->socket, id))) {
- if (0 == (ptr->lasterror = send_changeobject(ptr->socket, id, modification))) {
- if (0 != (ptr->lasterror = send_unlock(ptr->socket, id))) {
- php_error(E_WARNING, "Aiii, Changeobject failed and couldn't unlock object (id = 0x%X)", id);
- free(modification);
- RETURN_FALSE;
- }
- free(modification);
- RETURN_FALSE;
- } else {
- send_unlock(ptr->socket, id);
- free(modification);
- RETURN_FALSE;
- }
- } else {
- php_error(E_WARNING, "Could not lock object (id = 0x%X)", id);
- free(modification);
- RETURN_FALSE;
- }
- break;
- case 1:
-/* WARNING: send_groupchangobject() only works right, if each attribute
- can be modified. Doing a changeobject recursively often tries to
- modify objects which cannot be modified e.g. because an attribute cannot
- be removed. In such a case no further modification on that object is done.
- Doing a 'rem Rights\add Rights=R:a' will fail completely if the attribute
- Rights is not there already. The object locking is done in send_groupchangeobject();
-*/
- if (0 != (ptr->lasterror = send_groupchangeobject(ptr->socket, id, modification))) {
- free(modification);
- RETURN_FALSE;
- }
- break;
- default:
- php_error(E_WARNING, "hw_modifyobject: Mode must be 0 or 1 (recursive)");
- }
- free(modification);
- RETURN_TRUE;
-}
-#undef BUFFERLEN
-/* }}} */
-
-/* {{{ php_hw_mvcp
- */
-void php_hw_mvcp(INTERNAL_FUNCTION_PARAMETERS, int mvcp) {
- pval *arg1, *arg2, *arg3, *arg4;
- int link, type, dest=0, from=0, count;
- HashTable *src_arr;
- hw_connection *ptr;
- int collIDcount, docIDcount, i, *docIDs, *collIDs;
-
- switch(mvcp) {
- case MOVE: /* Move also has fromID */
- if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case COPY:
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_long(arg1);
- convert_to_array(arg2);
- convert_to_long(arg3);
- link=Z_LVAL_P(arg1);
- src_arr=Z_ARRVAL_P(arg2);
- switch(mvcp) {
- case MOVE: /* Move also has fromID, which is arg3 --> arg4 becomes destID */
- convert_to_long(arg4);
- from=Z_LVAL_P(arg3);
- dest=Z_LVAL_P(arg4);
- break;
- case COPY: /* No fromID for Copy needed --> arg3 is destID */
- dest=Z_LVAL_P(arg3);
- from = 0;
- break;
- }
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
-
- count = zend_hash_num_elements(src_arr);
- if(NULL == (collIDs = emalloc(count * sizeof(int)))) {
- RETURN_FALSE;
- }
-
- if(NULL == (docIDs = emalloc(count * sizeof(int)))) {
- efree(collIDs);
- RETURN_FALSE;
- }
-
- collIDcount = docIDcount = 0;
- zend_hash_internal_pointer_reset(src_arr);
- for(i=0; i<count; i++) {
- char *objrec;
- zval *keydata, **keydataptr;
- zend_hash_get_current_data(src_arr, (void **) &keydataptr);
- keydata = *keydataptr;
- if(Z_TYPE_P(keydata) == IS_LONG) {
- if(0 != (ptr->lasterror = send_getobject(ptr->socket, Z_LVAL_P(keydata), &objrec))) {
- efree(collIDs);
- efree(docIDs);
- RETURN_FALSE;
- }
- if(0 == fnAttributeCompare(objrec, "DocumentType", "collection"))
- collIDs[collIDcount++] = Z_LVAL_P(keydata);
- else
- docIDs[docIDcount++] = Z_LVAL_P(keydata);
- efree(objrec);
- }
- zend_hash_move_forward(src_arr);
- }
-
- if (0 != (ptr->lasterror = send_mvcpdocscoll(ptr->socket, docIDs, docIDcount, from, dest, mvcp))) {
- efree(collIDs);
- efree(docIDs);
- RETURN_FALSE;
- }
-
- if (0 != (ptr->lasterror = send_mvcpcollscoll(ptr->socket, collIDs, collIDcount, from, dest, mvcp))) {
- efree(collIDs);
- efree(docIDs);
- RETURN_FALSE;
- }
-
- efree(collIDs);
- efree(docIDs);
-
- RETURN_LONG(docIDcount + collIDcount);
-}
-/* }}} */
-
-/* {{{ proto void hw_mv(int link, array objrec, int from, int dest)
- Moves object */
-PHP_FUNCTION(hw_mv)
-{
- php_hw_mvcp(INTERNAL_FUNCTION_PARAM_PASSTHRU, MOVE);
-}
-/* }}} */
-
-/* {{{ proto void hw_cp(int link, array objrec, int dest)
- Copies object */
-PHP_FUNCTION(hw_cp)
-{
- php_hw_mvcp(INTERNAL_FUNCTION_PARAM_PASSTHRU, COPY);
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_gettext(int link, int objid [, int rootid])
- Returns text document. Links are relative to rootid if given */
-PHP_FUNCTION(hw_gettext)
-{
- pval *argv[3];
- int argc, link, id, type, mode;
- int rootid = 0;
- char *urlprefix;
- hw_document *doc;
- hw_connection *ptr;
-
- argc = ZEND_NUM_ARGS();
- if((argc > 3) || (argc < 2))
- WRONG_PARAM_COUNT;
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- RETURN_FALSE;
-
- convert_to_long(argv[0]);
- convert_to_long(argv[1]);
- mode = 0;
- urlprefix = NULL;
- if(argc == 3) {
- switch(Z_TYPE_P(argv[2])) {
- case IS_LONG:
- convert_to_long(argv[2]);
- rootid = Z_LVAL_P(argv[2]);
- mode = 1;
- break;
- case IS_STRING:
- convert_to_string(argv[2]);
- urlprefix = Z_STRVAL_P(argv[2]);
- break;
- }
- }
- link=Z_LVAL_P(argv[0]);
- id=Z_LVAL_P(argv[1]);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- char *attributes = NULL;
- char *bodytag = NULL;
- int count;
- /* !!!! memory for object and attributes is allocated with malloc !!!! */
- if (0 != (ptr->lasterror = send_gettext(ptr->socket, id, mode, rootid, &attributes, &bodytag, &object, &count, urlprefix)))
- RETURN_FALSE;
- doc = malloc(sizeof(hw_document));
- doc->data = object;
- doc->attributes = attributes;
- doc->bodytag = bodytag;
- doc->size = count;
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- }
-}
-/* }}} */
-
-/* {{{ proto void hw_edittext(int link, hwdoc doc)
- Modifies text document */
-PHP_FUNCTION(hw_edittext)
-{
- pval *arg1, *arg2;
- int link, doc, type;
- hw_connection *ptr;
- hw_document *docptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- ptr = zend_list_find(link, &type);
-
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find socket identifier %d", link);
- RETURN_FALSE;
- }
-
- doc=Z_LVAL_P(arg2);
- docptr = zend_list_find(doc, &type);
-
- if(!docptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find document identifier %d", doc);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- if (0 != (ptr->lasterror = send_edittext(ptr->socket, docptr->attributes, docptr->data))) {
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_getcgi(int link, int objid)
- Returns the output of a CGI script */
-#define BUFFERLEN 1000
-/* FIX ME: The buffer cgi_env_str should be allocated dynamically */
-PHP_FUNCTION(hw_getcgi)
-{
- pval *arg1, *arg2;
- int link, id, type;
- hw_document *doc;
- hw_connection *ptr;
- char cgi_env_str[BUFFERLEN];
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- char *attributes = NULL;
- int count;
-
- /* Here is another undocument function of Hyperwave.
- If you call a cgi script with getcgi-message, you will
- have to provide the complete cgi enviroment, since it is
- only known to the webserver (or wavemaster). This is done
- by extending the object record with the following incomplete
- string. It should contain any enviroment variable a cgi script
- requires.
- */
-#ifdef PHP_WIN32
- snprintf(cgi_env_str, BUFFERLEN, "CGI_REQUEST_METHOD=%s\nCGI_PATH_INFO=%s\nCGI_QUERY_STRING=%s",
- getenv("REQUEST_METHOD"),
- getenv("PATH_INFO"),
- getenv("QUERY_STRING"));
-#else
- snprintf(cgi_env_str, BUFFERLEN, "CGI_REQUEST_METHOD=%s\nCGI_PATH_INFO=%s\nCGI_QUERY_STRING=%s",
- SG(request_info).request_method,
- SG(request_info).request_uri,
- SG(request_info).query_string);
-#endif
- /* !!!! memory for object and attributes is allocated with malloc !!!! */
- if (0 != (ptr->lasterror = send_getcgi(ptr->socket, id, cgi_env_str, &attributes, &object, &count)))
- RETURN_FALSE;
- doc = malloc(sizeof(hw_document));
- doc->data = object;
- doc->attributes = attributes;
- doc->bodytag = NULL;
- doc->size = count;
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- }
-}
-#undef BUFFERLEN
-/* }}} */
-
-/* {{{ proto int hw_getremote(int link, int objid)
- Returns the content of a remote document */
-PHP_FUNCTION(hw_getremote)
-{
- pval *arg1, *arg2;
- int link, id, type;
- hw_document *doc;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- char *attributes = NULL;
- int count;
- /* !!!! memory for object and attributes is allocated with malloc !!!! */
- if (0 != (ptr->lasterror = send_getremote(ptr->socket, id, &attributes, &object, &count)))
- RETURN_FALSE;
- doc = malloc(sizeof(hw_document));
- doc->data = object;
- doc->attributes = attributes;
- doc->bodytag = NULL;
- doc->size = count;
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- }
-}
-/* }}} */
-
-/* {{{ proto [array|int] hw_getremotechildren(int link, string objrec)
- Returns the remote document or an array of object records */
-PHP_FUNCTION(hw_getremotechildren)
-{
- pval *arg1, *arg2;
- int link, type, i;
- hw_connection *ptr;
- char *objrec;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_string(arg2);
- link=Z_LVAL_P(arg1);
- objrec=Z_STRVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
- set_swap(ptr->swap_on);
- {
- int count, *offsets;
- char *remainder, *ptr1;
- if (0 != (ptr->lasterror = send_getremotechildren(ptr->socket, objrec, &remainder, &offsets, &count)))
- RETURN_FALSE;
-
-/*
-for(i=0;i<count;i++)
- php_printf("offset[%d] = %d--\n", i, offsets[i]);
-php_printf("count = %d, remainder = <HR>%s---<HR>", count, remainder);
-*/
- /* The remainder depends on the number of returned objects and
- whether the MimeType of the object to retrieve is set. If
- the MimeType is set the result will start with the
- HTTP header 'Content-type: mimetype', otherwise it will be
- a list of object records and therefore starts with
- 'ObjectID=0'. In the first case the offset and count are somewhat
- strange. Quite often count had a value of 6 which appears to be
- meaningless, but if you sum up the offsets you get the length
- of the remainder which is the lenght of the document.
- The document must have been chopped up into 6 pieces, each ending
- with 'ServerId=0xYYYYYYYY'.
- In the second case the offset contains the lenght of
- each object record; count contains the number of object records.
- Even if a remote object has children
- (several sql statements) but the MimeType is set, it will
- return a document in the format of MimeType. On the other
- hand a remote object does not have any children but just
- returns a docuement will not be shown unless the MimeType
- is set. It returns the pure object record of the object without
- the SQLStatement attribute. Quite senseless.
- Though, this behavior depends on how the hgi gateway in Hyperwave
- is implemented.
- */
- if(strncmp(remainder, "ObjectID=0 ", 10)) {
- hw_document *doc;
- char *ptr;
- int i, j, len;
- /* For some reason there is always the string
- 'SeverId=0xYYYYYYYY' at the end, so we cut it off.
- The document may as well be divided into several pieces
- and each of them has the ServerId at the end.
- The following will put the pieces back together and
- strip the ServerId. count contains the number of pieces.
- */
- for(i=0, len=0; i<count; i++)
- len += offsets[i]-18;
-/*fprintf(stderr, "len = %d\n", len); */
- doc = malloc(sizeof(hw_document));
- doc->data = malloc(len+1);
- ptr = doc->data;
- for(i=0, j=0; i<count; i++) {
- memcpy((char *)ptr, (char *)&remainder[j], offsets[i]-18);
-/*fprintf(stderr, "rem = %s\n", &remainder[j]); */
- j += offsets[i];
- ptr += offsets[i] - 18;
- }
- *ptr = '\0';
- doc->attributes = strdup(objrec);
- doc->bodytag = NULL;
- doc->size = strlen(doc->data);
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- } else {
- if (array_init(return_value) == FAILURE) {
- efree(offsets);
- RETURN_FALSE;
- }
-
- ptr1 = remainder;
- for(i=0; i<count; i++) {
- *(ptr1+offsets[i]-1) = '\0';
- add_index_string(return_value, i, ptr1, 1);
- ptr1 += offsets[i];
- }
- }
-
- efree(offsets);
- efree(remainder);
- }
-}
-/* }}} */
-
-/* {{{ proto void hw_setlinkroot(int link, int rootid)
- Set the id to which links are calculated */
-PHP_FUNCTION(hw_setlinkroot)
-{
- pval *arg1, *arg2;
- int link, type, rootid;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link = Z_LVAL_P(arg1);
- rootid = Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- ptr->linkroot = rootid;
- RETURN_LONG(rootid);
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_pipedocument(int link, int objid [, array urlprefixes])
- Returns document with links inserted. Optionally a array with five urlprefixes may be passed, which will be inserted for the different types of anchors. This should be a named array with the following keys: HW_DEFAULT_LINK, HW_IMAGE_LINK, HW_BACKGROUND_LINK, HW_INTAG_LINK, and HW_APPLET_LINK */
-PHP_FUNCTION(hw_pipedocument)
-{
- pval *arg1, *arg2, *arg3;
- int i, link, id, type, argc, mode;
- int rootid = 0;
- HashTable *prefixarray;
- char **urlprefix;
- hw_connection *ptr;
- hw_document *doc;
-#if APACHE
- server_rec *serv = ((request_rec *) SG(server_context))->server;
-#endif
-
- argc = ZEND_NUM_ARGS();
- switch(argc)
- {
- case 2:
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 3:
- if (getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
-
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- /* check for the array with urlprefixes */
- if(argc == 3) {
- convert_to_array(arg3);
- prefixarray =Z_ARRVAL_P(arg3);
- if((prefixarray == NULL) || (zend_hash_num_elements(prefixarray) != 5)) {
- php_error(E_WARNING, "You must provide 5 urlprefixes (you have provided %d)", zend_hash_num_elements(prefixarray));
- RETURN_FALSE;
- }
-
- urlprefix = emalloc(5*sizeof(char *));
- zend_hash_internal_pointer_reset(prefixarray);
- for(i=0; i<5; i++) {
- char *key;
- zval *data, **dataptr;
- ulong ind;
-
- zend_hash_get_current_key(prefixarray, &key, &ind, 0);
- zend_hash_get_current_data(prefixarray, (void *) &dataptr);
- data = *dataptr;
- if (Z_TYPE_P(data) != IS_STRING) {
- php_error(E_WARNING, "%s must be a String", key);
- RETURN_FALSE;
- } else if ( strcmp(key, "HW_DEFAULT_LINK") == 0 ) {
- urlprefix[HW_DEFAULT_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_IMAGE_LINK") == 0 ) {
- urlprefix[HW_IMAGE_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_BACKGROUND_LINK") == 0 ) {
- urlprefix[HW_BACKGROUND_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_INTAG_LINK") == 0 ) {
- urlprefix[HW_INTAG_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_APPLET_LINK") == 0 ) {
- urlprefix[HW_APPLET_LINK] = Z_STRVAL_P(data);
- } else {
- php_error(E_WARNING, "%s is not a valid urlprefix", key);
- RETURN_FALSE;
- }
- zend_hash_move_forward(prefixarray);
- }
- } else {
- urlprefix = NULL;
- }
-
- mode = 0;
- if(ptr->linkroot > 0)
- mode = 1;
- rootid = ptr->linkroot;
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- char *attributes = NULL;
- char *bodytag = NULL;
- int count;
- /* !!!! memory for object, bodytag and attributes is allocated with malloc !!!! */
- if (0 != (ptr->lasterror = send_pipedocument(ptr->socket,
-#if APACHE
- serv->server_hostname,
-#else
- getenv("HOSTNAME"),
-#endif
- id, mode, rootid, &attributes, &bodytag, &object, &count, urlprefix)))
- RETURN_FALSE;
-
- if(urlprefix) efree(urlprefix);
-
- doc = malloc(sizeof(hw_document));
- doc->data = object;
- doc->attributes = attributes;
- doc->bodytag = bodytag;
- doc->size = count;
-/* fprintf(stderr, "size = %d\n", count); */
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- }
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_pipedocument(int link, int objid)
- Returns document */
-PHP_FUNCTION(hw_oldpipedocument)
-{
- pval *argv[3];
- int link, id, type, argc, mode;
- int rootid = 0;
- hw_connection *ptr;
- hw_document *doc;
-#if APACHE
- server_rec *serv = ((request_rec *) SG(server_context))->server;
-#endif
-
- argc = ZEND_NUM_ARGS();
- if((argc > 2) || (argc < 2))
- WRONG_PARAM_COUNT;
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- RETURN_FALSE;
-
- convert_to_long(argv[0]);
- convert_to_long(argv[1]);
-/* if(argc == 3) {
- convert_to_long(argv[2]);
- rootid = Z_LVAL_P(argv[2]);
- if(rootid != 0)
- mode = 1;
- }
-*/ link=Z_LVAL_P(argv[0]);
- id=Z_LVAL_P(argv[1]);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- mode = 0;
- if(ptr->linkroot > 0)
- mode = 1;
- rootid = ptr->linkroot;
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- char *attributes = NULL;
- char *bodytag = NULL;
- int count;
- /* !!!! memory for object, bodytag and attributes is allocated with malloc !!!! */
- if (0 != (ptr->lasterror = send_pipedocument(ptr->socket,
-#if APACHE
- serv->server_hostname,
-#else
- getenv("HOSTNAME"),
-#endif
- id, mode, rootid, &attributes, &bodytag, &object, &count, NULL)))
- RETURN_FALSE;
-
- doc = malloc(sizeof(hw_document));
- doc->data = object;
- doc->attributes = attributes;
- doc->bodytag = bodytag;
- doc->size = count;
-/* fprintf(stderr, "size = %d\n", count); */
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- }
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_pipecgi(int link, int objid)
- Returns output of CGI script */
-#define BUFFERLEN 1000
-/* FIX ME: The buffer cgi_env_str should be allocated dynamically */
-PHP_FUNCTION(hw_pipecgi)
-{
- pval *arg1, *arg2;
- int link, id, type;
- hw_connection *ptr;
- hw_document *doc;
- char cgi_env_str[1000];
-#if APACHE
- server_rec *serv = ((request_rec *) SG(server_context))->server;
-#endif
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- char *attributes = NULL;
- int count;
-
-#ifdef PHP_WIN32
- snprintf(cgi_env_str, BUFFERLEN, "CGI_REQUEST_METHOD=%s\nCGI_PATH_INFO=%s\nCGI_QUERY_STRING=%s",
- getenv("REQUEST_METHOD"),
- getenv("PATH_INFO"),
- getenv("QUERY_STRING"));
-#else
- snprintf(cgi_env_str, BUFFERLEN, "CGI_REQUEST_METHOD=%s\nCGI_PATH_INFO=%s\nCGI_QUERY_STRING=%s",
- SG(request_info).request_method,
- SG(request_info).request_uri,
- SG(request_info).query_string);
-#endif
- /* !!!! memory for object, bodytag and attributes is allocated with malloc !!!! */
- if (0 != (ptr->lasterror = send_pipecgi(ptr->socket,
-#if APACHE
- serv->server_hostname,
-#else
- getenv("HOSTNAME"),
-#endif
- id, cgi_env_str, &attributes, &object, &count)))
- RETURN_FALSE;
-
- doc = malloc(sizeof(hw_document));
- doc->data = object;
- doc->attributes = attributes;
- doc->bodytag = NULL;
- doc->size = count;
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
- }
-}
-#undef BUFFERLEN
-/* }}} */
-
-/* {{{ proto void hw_insertdocument(int link, int parentid, hwdoc doc)
- Insert new document */
-PHP_FUNCTION(hw_insertdocument)
-{
- pval *arg1, *arg2, *arg3;
- int link, id, doc, type;
- hw_connection *ptr;
- hw_document *docptr;
- hw_objectID objid;
-#if APACHE
- server_rec *serv = ((request_rec *) SG(server_context))->server;
-#endif
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- convert_to_long(arg3);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find connection identifier %d", link);
- RETURN_FALSE;
- }
-
- doc=Z_LVAL_P(arg3);
- docptr = zend_list_find(doc, &type);
- if(!docptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find document identifier %d", doc);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- if (0 != (ptr->lasterror = send_putdocument(ptr->socket,
-#if APACHE
- serv->server_hostname,
-#else
- getenv("HOSTNAME"),
-#endif
- id, docptr->attributes, docptr->data, docptr->size, &objid))) {
- RETURN_FALSE;
- }
- }
- RETURN_LONG(objid);
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_new_document(string objrec, string data, int size)
- Create a new document */
-PHP_FUNCTION(hw_new_document)
-{
- pval *arg1, *arg2, *arg3;
- char *ptr;
- hw_document *doc;
-
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string(arg1);
- convert_to_string(arg2);
- convert_to_long(arg3);
-
- doc = malloc(sizeof(hw_document));
- if(NULL == doc)
- RETURN_FALSE;
- doc->data = malloc(Z_LVAL_P(arg3)+1);
- if(NULL == doc->data) {
- free(doc);
- RETURN_FALSE;
- }
- memcpy(doc->data, Z_STRVAL_P(arg2), Z_LVAL_P(arg3));
- ptr = doc->data;
- ptr[Z_LVAL_P(arg3)] = '\0';
- doc->attributes = strdup(Z_STRVAL_P(arg1));
- doc->bodytag = NULL;
- doc->size = Z_LVAL_P(arg3);
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto hwdoc hw_new_document_from_file(string objrec, string filename)
- Create a new document from a file */
-PHP_FUNCTION(hw_new_document_from_file)
-{
- pval **arg1, **arg2;
- int len, type;
- char *ptr;
- int issock=0;
- int socketd=0;
- FILE *fp;
- php_stream *stream;
- int ready=0;
- int bcount=0;
- int use_include_path=0;
- hw_document *doc;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(arg2), "r", use_include_path|ENFORCE_SAFE_MODE|REPORT_ERRORS,
- NULL TSRMLS_CC);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- doc = malloc(sizeof(hw_document));
- if(NULL == doc)
- RETURN_FALSE;
-
- doc->size = php_stream_copy_to_mem(stream, &doc->data, PHP_STREAM_COPY_ALL, 1);
-
- php_stream_close(stream);
-
- doc->data = realloc(doc->data, bcount+1);
- ptr = doc->data;
- ptr[bcount] = '\0';
- doc->attributes = strdup(Z_STRVAL_PP(arg1));
- doc->bodytag = NULL;
- doc->size = bcount;
- Z_LVAL_P(return_value) = zend_list_insert(doc, le_document);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto void hw_free_document(hwdoc doc)
- Frees memory of document */
-PHP_FUNCTION(hw_free_document)
-{
- pval *arg1;
- int id, type;
- hw_document *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
- zend_list_delete(id);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void hw_outputdocument(hwdoc doc)
- An alias for hw_output_document */
-/* }}} */
-
-/* {{{ proto void hw_output_document(hwdoc doc)
- Prints document */
-PHP_FUNCTION(hw_output_document)
-{
- pval *arg1;
- int id, type;
- hw_document *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- php_write(ptr->data, ptr->size TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hw_documentbodytag(hwdoc doc [, string prefix])
- An alias for hw_document_bodytag */
-/* }}} */
-
-/* {{{ proto string hw_document_bodytag(hwdoc doc [, string prefix])
- Return bodytag prefixed by prefix */
-PHP_FUNCTION(hw_document_bodytag)
-{
- pval *argv[2];
- int id, type, argc;
- hw_document *ptr;
- char *temp, *str = NULL;
-
- argc = ZEND_NUM_ARGS();
- if((argc > 2) || (argc < 1))
- WRONG_PARAM_COUNT;
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- RETURN_FALSE;
-
- convert_to_long(argv[0]);
- id=Z_LVAL_P(argv[0]);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- if(argc == 2) {
- convert_to_string(argv[1]);
- str=Z_STRVAL_P(argv[1]);
- }
-
- if(str != NULL) {
- temp = emalloc(Z_STRLEN_P(argv[1]) + strlen(ptr->bodytag) + 2);
- strcpy(temp, ptr->bodytag);
- strcpy(temp+strlen(ptr->bodytag)-1, str);
- strcpy(temp+strlen(ptr->bodytag)-1+Z_STRLEN_P(argv[1]), ">\n");
- RETURN_STRING(temp, 0);
- } else {
-/* fprintf(stderr, "hw_document_bodytag: %s (%s)\n", ptr->bodytag, ptr->attributes); */
- if(ptr->bodytag) {
- RETURN_STRING(ptr->bodytag, 1);
- } else {
- RETURN_EMPTY_STRING();
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string hw_document_content(hwdoc doc)
- Returns content of document */
-PHP_FUNCTION(hw_document_content)
-{
- pval *argv[1];
- int id, type, argc;
- hw_document *ptr;
-
- argc = ZEND_NUM_ARGS();
- if(argc != 1)
- WRONG_PARAM_COUNT;
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- RETURN_FALSE;
-
- convert_to_long(argv[0]);
- id=Z_LVAL_P(argv[0]);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(ptr->data, ptr->size, 1);
-}
-/* }}} */
-
-/* {{{ proto int hw_document_setcontent(hwdoc doc, string content)
- Sets/replaces content of document */
-PHP_FUNCTION(hw_document_setcontent)
-{
- pval *argv[2];
- int id, type, argc;
- hw_document *ptr;
- char *str;
-
- argc = ZEND_NUM_ARGS();
- if(argc != 2)
- WRONG_PARAM_COUNT;
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- RETURN_FALSE;
-
- convert_to_long(argv[0]);
- convert_to_string(argv[1]);
- id=Z_LVAL_P(argv[0]);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- str = ptr->data;
- if(NULL != (ptr->data = strdup(Z_STRVAL_P(argv[1])))) {
- ptr->size = strlen(ptr->data);
- free(str);
- RETURN_TRUE;
- } else {
- ptr->data = str;
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int hw_documentsize(hwdoc doc)
- An alias for hw_document_size */
-/* }}} */
-
-/* {{{ proto int hw_document_size(hwdoc doc)
- Returns size of document */
-PHP_FUNCTION(hw_document_size)
-{
- pval *arg1;
- int id, type;
- hw_document *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- RETURN_LONG(ptr->size);
-}
-/* }}} */
-
-/* {{{ proto string hw_documentattributes(hwdoc doc)
- An alias for hw_document_attributes */
-/* }}} */
-
-/* {{{ proto string hw_document_attributes(hwdoc doc)
- Returns object record of document */
-PHP_FUNCTION(hw_document_attributes)
-{
- pval *arg1;
- int id, type;
- hw_document *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- id=Z_LVAL_P(arg1);
- ptr = zend_list_find(id, &type);
- if(!ptr || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- RETURN_STRING(ptr->attributes, 1);
-/* make_return_array_from_objrec(&return_value, ptr->attributes); */
-}
-/* }}} */
-
-/* {{{ proto array hw_getparentsobj(int link, int objid)
- Returns array of parent object records */
-PHP_FUNCTION(hw_getparentsobj)
-{
- pval *arg1, *arg2;
- int link, id, type;
- int count;
- char **childObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
-
- if (0 != (ptr->lasterror = send_getparentsobj(ptr->socket, id, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getparentsobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_getparents(int link, int objid)
- Returns array of parent object ids */
-PHP_FUNCTION(hw_getparents)
-{
- pval *arg1, *arg2;
- int link, id, type;
- int count;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
- link=Z_LVAL_P(arg1);
- id=Z_LVAL_P(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- int *childIDs = NULL;
- int i;
-
- if (0 != (ptr->lasterror = send_getparents(ptr->socket, id, &childIDs, &count))) {
- php_error(E_WARNING, "send_command (getparents) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++) {
- add_index_long(return_value, i, childIDs[i]);
- }
- efree(childIDs);
- }
-
-}
-/* }}} */
-
-/* {{{ proto array hw_children(int link, int objid)
- Returns array of children object ids */
-PHP_FUNCTION(hw_children)
-{
- zval **arg1, **arg2;
- int link, id, type;
- int count;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- int *childIDs = NULL;
- int i;
-
- if (0 != (ptr->lasterror = send_children(ptr->socket, id, &childIDs, &count))){
- php_error(E_WARNING, "send_command (getchildcoll) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++) {
- add_index_long(return_value, i, childIDs[i]);
- }
- efree(childIDs);
- }
-
-}
-/* }}} */
-
-/* {{{ proto array hw_childrenobj(int link, int objid)
- Returns array of children object records */
-PHP_FUNCTION(hw_childrenobj)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count;
- char **childObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
-
- if (0 != (ptr->lasterror = send_childrenobj(ptr->socket, id, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getchildcollobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_getchildcoll(int link, int objid)
- Returns array of child collection object ids */
-PHP_FUNCTION(hw_getchildcoll)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- int *childIDs = NULL;
- int i;
-
- if (0 != (ptr->lasterror = send_getchildcoll(ptr->socket, id, &childIDs, &count))){
- php_error(E_WARNING, "send_command (getchildcoll) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++) {
- add_index_long(return_value, i, childIDs[i]);
- }
- efree(childIDs);
- }
-
-}
-/* }}} */
-
-/* {{{ proto array hw_getchildcollobj(int link, int objid)
- Returns array of child collection object records */
-PHP_FUNCTION(hw_getchildcollobj)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count;
- char **childObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
-
- if (0 != (ptr->lasterror = send_getchildcollobj(ptr->socket, id, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getchildcollobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int hw_docbyanchor(int link, int anchorid)
- Returns objid of document belonging to anchorid */
-PHP_FUNCTION(hw_docbyanchor)
-{
- pval **arg1, **arg2;
- int link, id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- int objectID;
- if (0 != (ptr->lasterror = send_docbyanchor(ptr->socket, id, &objectID)))
- RETURN_FALSE;
-
- RETURN_LONG(objectID);
- }
-}
-/* }}} */
-
-/* {{{ proto array hw_docbyanchorobj(int link, int anchorid)
- Returns object record of document belonging to anchorid */
-PHP_FUNCTION(hw_docbyanchorobj)
-{
- pval **arg1, **arg2;
- int link, id, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *object = NULL;
- if (0 != (ptr->lasterror = send_docbyanchorobj(ptr->socket, id, &object)))
- RETURN_FALSE;
-
- RETURN_STRING(object, 0);
- /*
- make_return_array_from_objrec(&return_value, object);
- efree(object);
- */
- }
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyquery(int link, string query, int maxhits)
- Search for query and return maxhits objids */
-PHP_FUNCTION(hw_getobjectbyquery)
-{
- pval **arg1, **arg2, **arg3;
- int link, type, maxhits;
- char *query;
- int count, i;
- int *childIDs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- link=Z_LVAL_PP(arg1);
- query=Z_STRVAL_PP(arg2);
- maxhits=Z_LVAL_PP(arg3);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyquery(ptr->socket, query, maxhits, &childIDs, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyquery) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++)
- add_index_long(return_value, i, childIDs[i]);
- efree(childIDs);
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyqueryobj(int link, string query, int maxhits)
- Search for query and return maxhits object records */
-PHP_FUNCTION(hw_getobjectbyqueryobj)
-{
- pval **arg1, **arg2, **arg3;
- int link, type, maxhits;
- char *query;
- int count;
- char **childObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- link=Z_LVAL_PP(arg1);
- query=Z_STRVAL_PP(arg2);
- maxhits=Z_LVAL_PP(arg3);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyqueryobj(ptr->socket, query, maxhits, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyqueryobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyquerycoll(int link, int collid, string query, int maxhits)
- Search for query in collection and return maxhits objids */
-PHP_FUNCTION(hw_getobjectbyquerycoll)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int link, id, type, maxhits;
- char *query;
- int count, i;
- hw_connection *ptr;
- int *childIDs = NULL;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- query=Z_STRVAL_PP(arg3);
- maxhits=Z_LVAL_PP(arg4);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyquerycoll(ptr->socket, id, query, maxhits, &childIDs, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyquerycoll) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++)
- add_index_long(return_value, i, childIDs[i]);
- efree(childIDs);
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyquerycollobj(int link, int collid, string query, int maxhits)
- Search for query in collection and return maxhits object records */
-PHP_FUNCTION(hw_getobjectbyquerycollobj)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int link, id, type, maxhits;
- char *query;
- int count;
- hw_connection *ptr;
- char **childObjRecs = NULL;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- query=Z_STRVAL_PP(arg3);
- maxhits=Z_LVAL_PP(arg4);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyquerycollobj(ptr->socket, id, query, maxhits, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyquerycollobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyftquery(int link, string query, int maxhits)
- Search for query as fulltext and return maxhits objids */
-PHP_FUNCTION(hw_getobjectbyftquery)
-{
- pval **arg1, **arg2, **arg3;
- int link, type, maxhits;
- char *query;
- int count, i;
- int *childIDs = NULL;
- float *weights;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- link=Z_LVAL_PP(arg1);
- query=Z_STRVAL_PP(arg2);
- maxhits=Z_LVAL_PP(arg3);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyftquery(ptr->socket, query, maxhits, &childIDs, &weights, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyftquery) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++)
- add_index_long(return_value, i, childIDs[i]);
- efree(childIDs);
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyftqueryobj(int link, string query, int maxhits)
- Search for query as fulltext and return maxhits object records */
-PHP_FUNCTION(hw_getobjectbyftqueryobj)
-{
- pval **arg1, **arg2, **arg3;
- int link, type, maxhits;
- char *query;
- int count;
- char **childObjRecs = NULL;
- float *weights;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- link=Z_LVAL_PP(arg1);
- query=Z_STRVAL_PP(arg2);
- maxhits=Z_LVAL_PP(arg3);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyftqueryobj(ptr->socket, query, maxhits, &childObjRecs, &weights, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyftqueryobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyftquerycoll(int link, int collid, string query, int maxhits)
- Search for fulltext query in collection and return maxhits objids */
-PHP_FUNCTION(hw_getobjectbyftquerycoll)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int link, id, type, maxhits;
- char *query;
- int count, i;
- hw_connection *ptr;
- int *childIDs = NULL;
- float *weights;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- query=Z_STRVAL_PP(arg3);
- maxhits=Z_LVAL_PP(arg4);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyftquerycoll(ptr->socket, id, query, maxhits, &childIDs, &weights, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyquerycoll) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++)
- add_index_long(return_value, i, childIDs[i]);
- efree(childIDs);
-}
-/* }}} */
-
-/* {{{ proto array hw_getobjectbyftquerycollobj(int link, int collid, string query, int maxhits)
- Search for fulltext query in collection and return maxhits object records */
-PHP_FUNCTION(hw_getobjectbyftquerycollobj)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int link, id, type, maxhits;
- char *query;
- int count;
- hw_connection *ptr;
- char **childObjRecs = NULL;
- float *weights;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- query=Z_STRVAL_PP(arg3);
- maxhits=Z_LVAL_PP(arg4);
- if (maxhits < 0) maxhits=0x7FFFFFFF;
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getobjbyftquerycollobj(ptr->socket, id, query, maxhits, &childObjRecs, &weights, &count))) {
- php_error(E_WARNING, "send_command (getobjectbyquerycollobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_getchilddoccoll(int link, int objid)
- Returns all children ids which are documents */
-PHP_FUNCTION(hw_getchilddoccoll)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count, i;
- int *childIDs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getchilddoccoll(ptr->socket, id, &childIDs, &count))) {
- php_error(E_WARNING, "send_command (getchilddoccoll) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(childIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++)
- add_index_long(return_value, i, childIDs[i]);
- efree(childIDs);
-}
-/* }}} */
-
-/* {{{ proto array hw_getchilddoccollobj(int link, int objid)
- Returns all children object records which are documents */
-PHP_FUNCTION(hw_getchilddoccollobj)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count;
- char **childObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getchilddoccollobj(ptr->socket, id, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getchilddoccollobj) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-
-}
-/* }}} */
-
-/* {{{ proto array hw_getanchors(int link, int objid)
- Return all anchors of object */
-PHP_FUNCTION(hw_getanchors)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count, i;
- int *anchorIDs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getanchors(ptr->socket, id, &anchorIDs, &count))) {
- php_error(E_WARNING, "send_command (getanchors) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(anchorIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<count; i++)
- add_index_long(return_value, i, anchorIDs[i]);
- efree(anchorIDs);
-}
-/* }}} */
-
-/* {{{ proto array hw_getanchorsobj(int link, int objid)
- Return all object records of anchors of object */
-PHP_FUNCTION(hw_getanchorsobj)
-{
- pval **arg1, **arg2;
- int link, id, type;
- int count;
- char **anchorObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = (hw_connection *) zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", id);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getanchorsobj(ptr->socket, id, &anchorObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getanchors) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, anchorObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string hw_getusername(int link)
- Returns the current user name */
-PHP_FUNCTION(hw_getusername)
-{
- pval **arg1;
- int link, type;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- link = Z_LVAL_PP(arg1);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = estrdup(ptr->username);
- Z_STRLEN_P(return_value) = strlen(ptr->username);
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto void hw_identify(int link, string username, string password)
- Identifies at Hyperwave server */
-PHP_FUNCTION(hw_identify)
-{
- pval **arg1, **arg2, **arg3;
- int link, type;
- char *name, *passwd, *userdata;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- link = Z_LVAL_PP(arg1);
- name=Z_STRVAL_PP(arg2);
- passwd=Z_STRVAL_PP(arg3);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- {
- char *str;
-
- if (0 != (ptr->lasterror = send_identify(ptr->socket, name, passwd, &userdata))) {
- php_error(E_WARNING, "send_identify returned %d\n", ptr->lasterror);
- if(ptr->username) free(ptr->username);
- ptr->username = NULL;
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = userdata;
- Z_STRLEN_P(return_value) = strlen(userdata);
- Z_TYPE_P(return_value) = IS_STRING;
- if(ptr->username) free(ptr->username);
- str = userdata;
- while((*str != 0) && (*str != ' '))
- str++;
- if(*str != '\0')
- ptr->username = strdup(++str);
- else
- ptr->username = NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto array hw_objrec2array(string objrec, [array format])
- Returns object array of object record */
-PHP_FUNCTION(hw_objrec2array)
-{
- zval **arg1, **arg2;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if(zend_get_parameters_ex(1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_string_ex(arg1);
- make2_return_array_from_objrec(&return_value, Z_STRVAL_PP(arg1), NULL);
- break;
- case 2:
- if(zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_array_ex(arg2);
- convert_to_string_ex(arg1);
- make2_return_array_from_objrec(&return_value, Z_STRVAL_PP(arg1), *arg2);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto string hw_array2objrec(array objarr)
- Returns object record of object array */
-PHP_FUNCTION(hw_array2objrec)
-{
- pval **arg1;
- char *objrec, *retobj;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- objrec = make_objrec_from_array(Z_ARRVAL_PP(arg1));
- if(objrec) {
- retobj = estrdup(objrec);
- free(objrec);
- RETURN_STRING(retobj, 0);
- } else
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array hw_incollections(int link, array objids, array collids, int para)
- Returns object ids which are in collections */
-PHP_FUNCTION(hw_incollections)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int type, link, i;
- hw_connection *ptr;
- int cobjids, ccollids, *objectIDs, *collIDs, cretids, *retIDs, retcoll;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_array_ex(arg2);
- convert_to_array_ex(arg3);
- convert_to_long_ex(arg4);
- link = Z_LVAL_PP(arg1);
- retcoll=Z_LVAL_PP(arg4);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- cobjids = zend_hash_num_elements(Z_ARRVAL_PP(arg2));
- if(NULL == (objectIDs = make_ints_from_array(Z_ARRVAL_PP(arg2)))) {
- php_error(E_WARNING, "Could not create Int Array from Array\n");
- RETURN_FALSE;
- }
-
- ccollids = zend_hash_num_elements(Z_ARRVAL_PP(arg3));
- if(NULL == (collIDs = make_ints_from_array(Z_ARRVAL_PP(arg3)))) {
- php_error(E_WARNING, "Could not create Int Array from Array\n");
- efree(objectIDs);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_incollections(ptr->socket, retcoll,
- cobjids, objectIDs,
- ccollids, collIDs,
- &cretids, &retIDs))) {
- if(objectIDs) efree(objectIDs);
- if(collIDs) efree(collIDs);
- RETURN_FALSE;
- }
-
- if(objectIDs) efree(objectIDs);
- if(collIDs) efree(collIDs);
-
- if (array_init(return_value) == FAILURE) {
- efree(retIDs);
- RETURN_FALSE;
- }
-
- for(i=0; i<cretids; i++)
- add_index_long(return_value, i, retIDs[i]);
- efree(retIDs);
-
-}
-/* }}} */
-
-/* {{{ proto void hw_inscoll(int link, int parentid, array objarr)
- Inserts collection */
-PHP_FUNCTION(hw_inscoll)
-{
- pval **arg1, **arg2, **arg3;
- char *objrec;
- int id, newid, type, link;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_array_ex(arg3);
- link = Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- if(NULL == (objrec = make_objrec_from_array(Z_ARRVAL_PP(arg3)))) {
- php_error(E_WARNING, "Could not create Object Record from Array\n");
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_inscoll(ptr->socket, id, objrec, &newid))) {
- if(objrec) free(objrec);
- RETURN_FALSE;
- }
-
- if(objrec) free(objrec);
- RETURN_LONG(newid);
-}
-/* }}} */
-
-/* {{{ proto void hw_insdoc(int link, int parentid, string objrec [, string text])
- Inserts document */
-PHP_FUNCTION(hw_insdoc)
-{
- zval **argv[4];
- char *objrec, *text;
- int id, newid, type, link, argc;
- hw_connection *ptr;
-
- argc = ZEND_NUM_ARGS();
- if((argc < 3) || (argc > 4))
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(argv[0]);
- convert_to_long_ex(argv[1]);
- convert_to_string_ex(argv[2]);
- if(argc == 4) {
- convert_to_string_ex(argv[3]);
- text = Z_STRVAL_PP(argv[3]);
- } else {
- text = NULL;
- }
- link = Z_LVAL_PP(argv[0]);
- id = Z_LVAL_PP(argv[1]);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- objrec = Z_STRVAL_PP(argv[2]);
- if (0 != (ptr->lasterror = send_insdoc(ptr->socket, id, objrec, text, &newid))) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(newid);
-}
-/* }}} */
-
-/* {{{ proto int hw_getsrcbydestobj(int link, int destid)
- Returns object id of source docuent by destination anchor */
-PHP_FUNCTION(hw_getsrcbydestobj)
-{
- pval **arg1, **arg2;
- int link, type, id;
- int count;
- char **childObjRecs = NULL;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- link=Z_LVAL_PP(arg1);
- id=Z_LVAL_PP(arg2);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_getsrcbydest(ptr->socket, id, &childObjRecs, &count))) {
- php_error(E_WARNING, "send_command (getsrcbydest) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- /* create return value and free all memory */
- if( 0 > make_return_objrec(&return_value, childObjRecs, count))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int hw_mapid(int link, int serverid, int destid)
- Returns virtual object id of document on remote Hyperwave server */
-PHP_FUNCTION(hw_mapid)
-{
- pval **arg1, **arg2, **arg3;
- int link, type, servid, id, virtid;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- link=Z_LVAL_PP(arg1);
- servid=Z_LVAL_PP(arg2);
- id=Z_LVAL_PP(arg3);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = send_mapid(ptr->socket, servid, id, &virtid))) {
- php_error(E_WARNING, "send_command (mapid) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
- RETURN_LONG(virtid);
-}
-/* }}} */
-
-/* {{{ proto string hw_getrellink(int link, int rootid, int sourceid, int destid)
- Get link from source to dest relative to rootid */
-PHP_FUNCTION(hw_getrellink)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int link, type;
- int rootid, destid, sourceid;
- char *anchorstr;
- hw_connection *ptr;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
- link=Z_LVAL_PP(arg1);
- rootid=Z_LVAL_PP(arg2);
- sourceid=Z_LVAL_PP(arg3);
- destid=Z_LVAL_PP(arg4);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- set_swap(ptr->swap_on);
- if (0 != (ptr->lasterror = getrellink(ptr->socket, rootid, sourceid, destid, &anchorstr))) {
- php_error(E_WARNING, "command (getrellink) returned %d\n", ptr->lasterror);
- RETURN_FALSE;
- }
-
- RETURN_STRING(anchorstr, 0);
-}
-/* }}} */
-
-/* {{{ proto string hw_insertanchors(int hwdoc, array anchorecs, array dest [, array urlprefixes])
- Inserts only anchors into text */
-PHP_FUNCTION(hw_insertanchors)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- hw_document *hwdoc;
- int type, docid, error, argc, count;
- char *anchorstr;
- char **anchorrecs;
- char **dest;
- char **urlprefix;
- char *bodytag = NULL;
- HashTable *arrht;
- HashTable *prefixarray;
-
- argc = ZEND_NUM_ARGS();
- switch(argc)
- {
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg1);
- convert_to_array_ex(arg2);
- convert_to_array_ex(arg3);
- docid=Z_LVAL_PP(arg1);
- hwdoc = zend_list_find(docid, &type);
- if(!hwdoc || (type!=le_document)) {
- php_error(E_WARNING, "Unable to find file identifier %d", docid);
- RETURN_FALSE;
- }
-
- /* check for the array with urlprefixes */
- if(argc == 4) {
- int i;
- convert_to_array_ex(arg4);
- prefixarray =Z_ARRVAL_PP(arg4);
- if((prefixarray == NULL) || (zend_hash_num_elements(prefixarray) != 5)) {
- php_error(E_WARNING, "You must provide 5 urlprefixes (you have provided %d)", zend_hash_num_elements(prefixarray));
- RETURN_FALSE;
- }
-
- urlprefix = emalloc(5*sizeof(char *));
- zend_hash_internal_pointer_reset(prefixarray);
- for(i=0; i<5; i++) {
- char *key;
- zval *data, **dataptr;
- ulong ind;
-
- zend_hash_get_current_key(prefixarray, &key, &ind, 0);
- zend_hash_get_current_data(prefixarray, (void *) &dataptr);
- data = *dataptr;
- if (Z_TYPE_P(data) != IS_STRING) {
- php_error(E_WARNING, "%s must be a String", key);
- RETURN_FALSE;
- } else if ( strcmp(key, "HW_DEFAULT_LINK") == 0 ) {
- urlprefix[HW_DEFAULT_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_IMAGE_LINK") == 0 ) {
- urlprefix[HW_IMAGE_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_BACKGROUND_LINK") == 0 ) {
- urlprefix[HW_BACKGROUND_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_INTAG_LINK") == 0 ) {
- urlprefix[HW_INTAG_LINK] = Z_STRVAL_P(data);
- } else if ( strcmp(key, "HW_APPLET_LINK") == 0 ) {
- urlprefix[HW_APPLET_LINK] = Z_STRVAL_P(data);
- } else {
- php_error(E_WARNING, "%s is not a valid urlprefix", key);
- RETURN_FALSE;
- }
- zend_hash_move_forward(prefixarray);
- }
- } else {
- urlprefix = NULL;
- }
-
- if(zend_hash_num_elements(Z_ARRVAL_PP(arg2)) != zend_hash_num_elements(Z_ARRVAL_PP(arg3))) {
- php_error(E_WARNING, "Unequal number of elments in arrays");
- RETURN_FALSE;
- }
-
- /* Turn PHP-Array of strings into C-Array of strings */
- arrht = Z_ARRVAL_PP(arg2);
- anchorrecs = make_strs_from_array(arrht);
- arrht = Z_ARRVAL_PP(arg3);
- dest = make_strs_from_array(arrht);
-
- if (0 != (error = send_insertanchors(&(hwdoc->data), &count, anchorrecs, dest, zend_hash_num_elements(arrht), urlprefix, &bodytag))) {
- php_error(E_WARNING, "command (insertanchors) returned %d\n", error);
- RETURN_FALSE;
- }
-/*fprintf(stderr, "in hw_insertanchors: %s\n", hwdoc->attributes); */
- hwdoc->size = count;
- if(hwdoc->bodytag) free (hwdoc->bodytag);
- hwdoc->bodytag = bodytag;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-PHP_MINFO_FUNCTION(hw)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Hyperwave Support", "enabled");
- php_info_print_table_row(2, "HG-CSP Version", "7.17");
- php_info_print_table_end();
- DISPLAY_INI_ENTRIES();
-}
-
-/* {{{ proto void hw_connection_info(int link)
- Prints information about the connection to Hyperwave server */
-PHP_FUNCTION(hw_connection_info)
-{
- pval **arg1;
- hw_connection *ptr;
- int link, type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- link=Z_LVAL_PP(arg1);
- ptr = zend_list_find(link, &type);
- if(!ptr || (type!=le_socketp && type!=le_psocketp)) {
- php_error(E_WARNING, "Unable to find file identifier %d", link);
- RETURN_FALSE;
- }
-
- php_printf("Hyperwave Info:\nhost=%s,\nserver string=%s\nversion=%d\nswap=%d\n", ptr->hostname, ptr->server_string, ptr->version, ptr->swap_on);
-}
-/* }}} */
-
-void print_msg(hg_msg *msg, char *str, int txt)
-{
- char *ptr;
- int i;
-
- fprintf(stdout, "\nprint_msg: >>%s<<\n", str);
- fprintf(stdout, "print_msg: length = %d\n", msg->length);
- fprintf(stdout, "print_msg: msgid = %d\n", msg->version_msgid);
- fprintf(stdout, "print_msg: msg_type = %d\n", msg->msg_type);
- if ( msg->length > HEADER_LENGTH ) {
- ptr = msg->buf;
- for ( i = 0; i < msg->length-HEADER_LENGTH; i++ ) {
- if ( *ptr == '\n' )
- fprintf(stdout, "%c", *ptr++);
- else if ( iscntrl(*ptr) )
- {fprintf(stdout, "."); ptr++;}
- else
- fprintf(stdout, "%c", *ptr++);
- }
- }
- fprintf(stdout, "\n\n");
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/hyperwave/hw_error.h b/ext/hyperwave/hw_error.h
deleted file mode 100644
index 00bc5ee52d..0000000000
--- a/ext/hyperwave/hw_error.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef HW_ERROR_H
-#define HW_ERROR_H
-
-#if HYPERWAVE
-
-#define NOACCESS 1 /* Access denied */
-#define NODOCS 2 /* No documents */
-#define NONAME 3 /* No collection name */
-#define NODOC 4 /* Object is not a document */
-#define NOOBJ 5 /* No object received */
-#define NOCOLLS 6 /* No collections received */
-#define DBSTUBNG 7 /* Connection to low-level database failed */
-#define NOTFOUND 8 /* Object not found */
-#define EXIST 9 /* Collection already exists */
-#define FATHERDEL 10 /* parent collection disappeared */
-#define FATHNOCOLL 11 /* parent collection not a collection */
-#define NOTEMPTY 12 /* Collection not empty */
-#define DESTNOCOLL 13 /* Destination not a collection */
-#define SRCEQDEST 14 /* Source equals destination */
-#define REQPEND 15 /* Request pending */
-#define TIMEOUT 16 /* Timeout */
-#define NAMENOTUNIQUE 17 /* Name not unique */
-#define WRITESTOPPED 18 /* Database now read-only; try again later */
-#define LOCKED 19 /* Object locked; try again later */
-#define CHANGEBASEFLD 20 /* Change of base-attribute */
-#define NOTREMOVED 21 /* Attribute not removed */
-#define FLDEXISTS 22 /* Attribute exists */
-#define CMDSYNTAX 23 /* Syntax error in command */
-#define NOLANGUAGE 24 /* No or unknown language specified */
-#define WRGTYPE 25 /* Wrong type in object */
-#define WRGVERSION 26 /* Client version too old */
-#define CONNECTION 27 /* No connection to other server */
-#define SYNC 28 /* Synchronization error */
-#define NOPATH 29 /* No path entry */
-#define WRGPATH 30 /* Wrong path entry */
-#define PASSWD 31 /* Wrong password (server-to-server server authentication) */
-#define LC_NO_MORE_USERS 32 /* No more users for license */
-#define LC_NO_MORE_DOCS 33 /* No more documents for this session and license */
-#define RSERV_NRESP 34 /* Remote server not responding */
-#define Q_OVERFLOW 35 /* Query overflow */
-#define USR_BREAK 36 /* Break by user */
-#define N_IMPL 37 /* Not implemented */
-#define WRG_VALUE 38 /* Wrong value */
-#define INSUFF_FUNDS 39 /* Insufficient funds */
-#define REORG 40 /* Reorganization in progress */
-#define USER_LIMIT 41 /* Limit of simultaneous users reached */
-#define FTCONNECT 513 /* No connection to fulltext server */
-#define FTTIMEOUT 514 /* Connection timed out */
-#define FTINDEX 515 /* Something wrong with fulltext index */
-#define FTSYNTAX 516 /* Query syntax error */
-#define REQUESTPENDING 1025 /* Request pending */
-#define NOCONNECTION 1026 /* No connection to document server */
-#define WRONGVERSION 1027 /* Wrong protocol version */
-#define NOTINITIALIZED 1028 /* Not initialized */
-#define BADREQUEST 1029 /* Bad request */
-#define BADLRN 1030 /* Bad document number */
-#define OPENSTORE_WRITE 1031 /* Cannot write to local store */
-#define OPENSTORE_READ 1032 /* Cannot read from local store */
-#define READSTORE 1033 /* Store read error */
-#define WRITESTORE 1034 /* Write error */
-#define CLOSESTORE 1035 /* Close error */
-#define BADPATH 1036 /* Bad path */
-#define NOPATHDC 1037 /* No path */
-#define OPENFILE 1038 /* Cannot open file */
-#define READFILE 1039 /* Cannot read from file // same */
-#define WRITEFILE 1040 /* Cannot write to file */
-#define CONNECTCLIENT 1041 /* Could not connect to client */
-#define ACCEPT 1042 /* Could not accept connection */
-#define READSOCKET 1043 /* Could not read from socket */
-#define WRITESOCKET 1044 /* Could not write to socket */
-#define TOOMUCHDATA 1046 /* Received too much data */
-#define TOOFEWDATA 1047 /* Received too few data // ... */
-#define NOTIMPLEMENTED 1049 /* Not implemented */
-#define USERBREAK 1050 /* User break */
-#define INTERNAL 1051 /* Internal error */
-#define INVALIDOBJECT 1052 /* Invalid object */
-#define JOBTIMEOUT 1053 /* Job timed out */
-#define OPENPORT 1054 /* Cannot open port // ... for several resons */
-#define NODATA 1055 /* Received no data */
-#define NOPORT 1056 /* No port to handle this request */
-#define NOTCACHED 1057 /* Document not cached */
-#define BADCACHETYPE 1058 /* Bad cache type */
-#define OPENCACHE_WRITE 1059 /* Cannot write to cache */
-#define OPENCACHE_READ 1060 /* Cannot read from cache // same */
-#define NOSOURCE 1061 /* Do not know what to read */
-#define CLOSECACHE 1062 /* Could not insert into cache */
-#define CONNECTREMOTE 1063 /* Could not connect to remote server */
-#define LOCKREFUSED 1064 /* Lock refused // could not lock the stores */
-
-#endif
-#endif
diff --git a/ext/hyperwave/hyperwave.dsp b/ext/hyperwave/hyperwave.dsp
deleted file mode 100644
index 1ca7e52439..0000000000
--- a/ext/hyperwave/hyperwave.dsp
+++ /dev/null
@@ -1,120 +0,0 @@
-# Microsoft Developer Studio Project File - Name="hyperwave" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=hyperwave - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "hyperwave.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "hyperwave.mak" CFG="hyperwave - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "hyperwave - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "hyperwave - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "hyperwave - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HYPERWAVE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_HYPERWAVE" /D ZTS=1 /D HYPERWAVE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_hyperwave.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "hyperwave - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HYPERWAVE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_HYPERWAVE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HYPERWAVE=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_hyperwave.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "hyperwave - Win32 Release_TS"
-# Name "hyperwave - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\hg_comm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\hw.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\hg_comm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\hw_error.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_hyperwave.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/hyperwave/php_hyperwave.h b/ext/hyperwave/php_hyperwave.h
deleted file mode 100644
index 91437e98f6..0000000000
--- a/ext/hyperwave/php_hyperwave.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_HYPERWAVE_H
-#define PHP_HYPERWAVE_H
-
-#ifdef PHP_WIN32
-#define PHP_HW_API __declspec(dllexport)
-#else
-#define PHP_HW_API
-#endif
-
-#if HYPERWAVE
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#include "hg_comm.h"
-
-extern zend_module_entry hw_module_entry;
-#define hw_module_ptr &hw_module_entry
-
-typedef struct {
- long default_link;
- long default_port;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
-} zend_hw_globals;
-
-#ifdef ZTS
-# define HwSG(v) TSRMG(hw_globals_id, zend_hw_globals *, v)
-#else
-# define HwSG(v) (hw_globals.v)
-extern PHP_HW_API zend_hw_globals hw_globals;
-#endif
-
-/*extern hw_module php_hw_module;*/
-
-typedef struct {
- int size;
- char *data;
- char *attributes;
- char *bodytag;
-} hw_document;
-
-PHP_MINIT_FUNCTION(hw);
-PHP_MSHUTDOWN_FUNCTION(hw);
-PHP_MINFO_FUNCTION(hw);
-
-PHP_FUNCTION(hw_connect);
-PHP_FUNCTION(hw_pconnect);
-PHP_FUNCTION(hw_close);
-PHP_FUNCTION(hw_root);
-PHP_FUNCTION(hw_info);
-PHP_FUNCTION(hw_error);
-PHP_FUNCTION(hw_errormsg);
-PHP_FUNCTION(hw_mv);
-PHP_FUNCTION(hw_cp);
-PHP_FUNCTION(hw_deleteobject);
-PHP_FUNCTION(hw_changeobject);
-PHP_FUNCTION(hw_modifyobject);
-PHP_FUNCTION(hw_getparents);
-PHP_FUNCTION(hw_getparentsobj);
-PHP_FUNCTION(hw_children);
-PHP_FUNCTION(hw_childrenobj);
-PHP_FUNCTION(hw_getchildcoll);
-PHP_FUNCTION(hw_getchildcollobj);
-PHP_FUNCTION(hw_getobject);
-PHP_FUNCTION(hw_getandlock);
-PHP_FUNCTION(hw_unlock);
-PHP_FUNCTION(hw_gettext);
-PHP_FUNCTION(hw_edittext);
-PHP_FUNCTION(hw_getcgi);
-PHP_FUNCTION(hw_getremote);
-PHP_FUNCTION(hw_getremotechildren);
-PHP_FUNCTION(hw_pipedocument);
-PHP_FUNCTION(hw_pipecgi);
-PHP_FUNCTION(hw_insertdocument);
-PHP_FUNCTION(hw_docbyanchorobj);
-PHP_FUNCTION(hw_docbyanchor);
-PHP_FUNCTION(hw_getobjectbyquery);
-PHP_FUNCTION(hw_getobjectbyqueryobj);
-PHP_FUNCTION(hw_getobjectbyquerycoll);
-PHP_FUNCTION(hw_getobjectbyquerycollobj);
-PHP_FUNCTION(hw_getobjectbyftquery);
-PHP_FUNCTION(hw_getobjectbyftqueryobj);
-PHP_FUNCTION(hw_getobjectbyftquerycoll);
-PHP_FUNCTION(hw_getobjectbyftquerycollobj);
-PHP_FUNCTION(hw_getchilddoccoll);
-PHP_FUNCTION(hw_getchilddoccollobj);
-PHP_FUNCTION(hw_getanchors);
-PHP_FUNCTION(hw_getanchorsobj);
-PHP_FUNCTION(hw_getusername);
-PHP_FUNCTION(hw_setlinkroot);
-PHP_FUNCTION(hw_inscoll);
-PHP_FUNCTION(hw_incollections);
-PHP_FUNCTION(hw_insertobject);
-PHP_FUNCTION(hw_insdoc);
-PHP_FUNCTION(hw_identify);
-PHP_FUNCTION(hw_free_document);
-PHP_FUNCTION(hw_new_document);
-PHP_FUNCTION(hw_new_document_from_file);
-PHP_FUNCTION(hw_output_document);
-PHP_FUNCTION(hw_document_size);
-PHP_FUNCTION(hw_document_attributes);
-PHP_FUNCTION(hw_document_bodytag);
-PHP_FUNCTION(hw_document_content);
-PHP_FUNCTION(hw_document_setcontent);
-PHP_FUNCTION(hw_objrec2array);
-PHP_FUNCTION(hw_array2objrec);
-PHP_FUNCTION(hw_connection_info);
-PHP_FUNCTION(hw_getsrcbydestobj);
-PHP_FUNCTION(hw_insertanchors);
-PHP_FUNCTION(hw_getrellink);
-PHP_FUNCTION(hw_dummy);
-PHP_FUNCTION(hw_who);
-PHP_FUNCTION(hw_stat);
-PHP_FUNCTION(hw_mapid);
-
-#else
-#define hw_module_ptr NULL
-#endif /* HYPERWAVE */
-#define phpext_hyperwave_ptr hw_module_ptr
-#endif /* PHP_HYPERWAVE_H */
-
diff --git a/ext/icap/CREDITS b/ext/icap/CREDITS
deleted file mode 100644
index 9ea19c3f9d..0000000000
--- a/ext/icap/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-icap
-Mark Musone
diff --git a/ext/icap/config.m4 b/ext/icap/config.m4
deleted file mode 100644
index 8101656585..0000000000
--- a/ext/icap/config.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(icap,for ICAP support,
-[ --with-icap[=DIR] Include ICAP support.])
-
-if test "$PHP_ICAP" != "no"; then
- ICAP_DIR=$PHP_ICAP
- test "$ICAP_DIR" = "yes" && ICAP_DIR=/usr/local
-
- PHP_ADD_INCLUDE($ICAP_DIR)
- PHP_SUBST(ICAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(icap, $ICAP_DIR, ICAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_ICAP,1,[ ])
- PHP_NEW_EXTENSION(icap, php_icap.c, $ext_shared)
-fi
diff --git a/ext/icap/php_icap.c b/ext/icap/php_icap.c
deleted file mode 100644
index 59975e3176..0000000000
--- a/ext/icap/php_icap.c
+++ /dev/null
@@ -1,949 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Mark Musone <musone@chek.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ICAP1
-
-#ifdef ERROR
-#undef ERROR
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_ICAP
-
-#include <time.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-#include <stdarg.h>
-#include "cal.h"
-#include "php_icap.h"
-#include "zend_modules.h"
-#include "ext/standard/info.h"
-#include "ext/standard/basic_functions.h"
-#ifdef PHP_WIN32
-#include "winsock.h"
-#endif
-CALSTREAM *cal_open();
-CALSTREAM *cal_close_it ();
-CALSTREAM *cal_close_full ();
-
-
-typedef struct php_icap_le_struct {
- CALSTREAM *icap_stream;
- long flags;
-} pils;
-
-
-typedef struct cal_list
-{
-php_uint32 uid;
-struct cal_list *next;
-} cal_list_t;
-
-static cal_list_t *g_cal_list=NULL;
-static cal_list_t *g_cal_list_end=NULL;
-/*
- * this array should be set up as:
- * {"PHPScriptFunctionName", dllFunctionName, 1}
- */
-
-function_entry icap_functions[] = {
- PHP_FE(icap_open, NULL)
-/* for now it's obviously a dummy
- PHP_FE(icap_popen, NULL)
-*/
- PHP_FE(icap_reopen, NULL)
- PHP_FE(icap_fetch_event, NULL)
- PHP_FE(icap_list_events, NULL)
- PHP_FE(icap_list_alarms, NULL)
- PHP_FE(icap_create_calendar, NULL)
- PHP_FE(icap_rename_calendar, NULL)
- PHP_FE(icap_delete_calendar, NULL)
- PHP_FE(icap_delete_event, NULL)
- PHP_FE(icap_store_event, NULL)
- PHP_FE(icap_snooze, NULL)
- {NULL, NULL, NULL}
-};
-
-
-zend_module_entry php_icap_module_entry = {
- STANDARD_MODULE_HEADER,
- "icap",
- icap_functions,
- PHP_MINIT(icap),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(icap),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_ICAP
-ZEND_GET_MODULE(php_icap)
-#endif
-
-/*
- I believe since this global is used ONLY within this module,
- and nothing will link to this module, we can use the simple
- thread local_ storage
-*/
-int le_icap;
-#ifdef OP_RELOGIN
-/* AJS: persistent connection type */
-int le_picap;
-#endif
-char icap_user[80]="";
-char icap_password[80]="";
-
-CALSTREAM *cal_close_it (zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pils *icap_le_struct = (pils *)rsrc->ptr;
- CALSTREAM *ret;
-
- ret = cal_close (icap_le_struct->icap_stream, 0);
- efree(icap_le_struct);
- return ret;
-}
-
-
-PHP_MINFO_FUNCTION(icap)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "ICAP Support", "enabled");
- php_info_print_table_row(2, "ICAP Version", CALVER);
- php_info_print_table_end();
-}
-
-PHP_MINIT_FUNCTION(icap)
-{
- le_icap = zend_register_list_destructors_ex(cal_close_it, NULL, "icap", module_number);
- return SUCCESS;
-}
-
-
-static int add_assoc_object(pval *arg, char *key, pval *tmp)
-{
- HashTable *symtable;
-
- if (Z_TYPE_P(arg) == IS_OBJECT) {
- symtable = Z_OBJPROP_P(arg);
- } else {
- symtable = Z_ARRVAL_P(arg);
- }
- return zend_hash_update(symtable, key, strlen(key)+1, (void *) &tmp, sizeof(pval *), NULL);
-}
-
-
-void php_icap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- pval *calendar;
- pval *user;
- pval *passwd;
- pval *options;
- CALSTREAM *icap_stream;
- pils *icap_le_struct;
- long flags=0;
- long cl_flags=0;
- int ind;
- int myargc=ZEND_NUM_ARGS();
-
-
- if (myargc <3 || myargc >4 || getParameters(ht, myargc, &calendar, &user, &passwd, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string(calendar);
- convert_to_string(user);
- convert_to_string(passwd);
- strcpy(icap_user, Z_STRVAL_P(user));
- strcpy(icap_password, Z_STRVAL_P(passwd));
- if(myargc ==4) {
- convert_to_long(options);
- flags=Z_LVAL_P(options);
- }
- icap_stream = cal_open(NULL, Z_STRVAL_P(calendar), 0);
- if (!icap_stream) {
- php_error(E_WARNING, "Couldn't open stream %s\n", Z_STRVAL_P(calendar));
- RETURN_FALSE;
- }
-
- icap_le_struct = emalloc(sizeof(pils));
- icap_le_struct->icap_stream = icap_stream;
- icap_le_struct->flags = 0;
- ind = zend_list_insert(icap_le_struct, le_icap);
- RETURN_LONG(ind);
-}
-
-
-/* {{{ proto int icap_close(int stream_id [, int options])
- Close an ICAP stream */
-PHP_FUNCTION(icap_close)
-{
- pval *options, *streamind;
- int ind, ind_type;
- pils *icap_le_struct=NULL;
- int myargcount=ZEND_NUM_ARGS();
- long flags = 0;
-
- if (myargcount < 1 || myargcount > 2 || getParameters(ht, myargcount, &streamind, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(streamind);
- ind = Z_LVAL_P(streamind);
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- if(myargcount==2) {
- convert_to_long(options);
- flags = Z_LVAL_P(options);
- icap_le_struct->flags = flags;
- }
- zend_list_delete(ind);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto int icap_open(string calendar, string user, string password [, int options])
- Open an ICAP stream to a calendar */
-PHP_FUNCTION(icap_open)
-{
- php_icap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto int icap_reopen(int stream_id, string calendar [, int options])
- Reopen ICAP stream to new calendar */
-PHP_FUNCTION(icap_reopen)
-{
- pval *streamind;
- pval *calendar;
- pval *options;
- CALSTREAM *icap_stream;
- pils *icap_le_struct;
- int ind, ind_type;
- long flags=0;
- long cl_flags=0;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc<2 || myargc>3 || getParameters(ht, myargc, &streamind, &calendar, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- ind = Z_LVAL_P(streamind);
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- convert_to_string(calendar);
- if(myargc == 3) {
- convert_to_long(options);
- flags = Z_LVAL_P(options);
- icap_le_struct->flags = cl_flags;
- }
- /*
- icap_stream = cal_connect(Z_STRVAL_P(calendar));
- cal_login(icap_stream, Z_STRVAL_P(calendar));
- */
- if (icap_stream == NULL) {
- php_error(E_WARNING, "Couldn't re-open stream\n");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto int icap_expunge(int stream_id)
- Delete all messages marked for deletion */
-PHP_FUNCTION(icap_expunge)
-{
- pval *streamind;
- int ind, ind_type;
- pval *start, *end;
- pils *icap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
-
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
-
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
-/* cal_expunge (icap_le_struct->icap_stream);
-*/
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int icap_fetch_event(int stream_id, int eventid [, int options])
- Fetch an event */
-PHP_FUNCTION(icap_fetch_event)
-{
- pval *streamind, *eventid, *start, *end, *options=NULL;
- int ind, ind_type;
- pils *icap_le_struct=NULL;
- CALEVENT *myevent;
- int myargcount=ZEND_NUM_ARGS();
-
- if (myargcount < 1 || myargcount > 3 || getParameters(ht, myargcount, &streamind, &eventid, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(streamind);
- convert_to_long(eventid);
- ind = Z_LVAL_P(streamind);
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- if(myargcount==3) {
- convert_to_long(options);
- }
- cal_fetch(icap_le_struct->icap_stream, Z_LVAL_P(eventid), &myevent);
-
- object_init(return_value);
- add_property_long(return_value, "id", myevent->id);
- add_property_long(return_value, "public", myevent->public);
- MAKE_STD_ZVAL(start);
- object_init(start);
- if(myevent->start.has_date)
- {
- add_property_long(start, "year", myevent->start.year);
- add_property_long(start, "month", myevent->start.mon);
- add_property_long(start, "mday", myevent->start.mday);
- }
- if(myevent->start.has_time)
- {
- add_property_long(start, "hour", myevent->start.hour);
- add_property_long(start, "min", myevent->start.min);
- add_property_long(start, "sec", myevent->start.sec);
- }
- add_assoc_object(return_value, "start", start);
-
- MAKE_STD_ZVAL(end);
- object_init(end);
- if(myevent->end.has_date)
- {
- add_property_long(end, "year", myevent->end.year);
- add_property_long(end, "month", myevent->end.mon);
- add_property_long(end, "mday", myevent->end.mday);
- }
- if(myevent->end.has_time)
- {
- add_property_long(end, "hour", myevent->end.hour);
- add_property_long(end, "min", myevent->end.min);
- add_property_long(end, "sec", myevent->end.sec);
- }
- add_assoc_object(return_value, "end", end);
-
- add_property_string(return_value, "category", myevent->category, 1);
- add_property_string(return_value, "title", myevent->title, 1);
- add_property_string(return_value, "description", myevent->description, 1);
- add_property_long(return_value, "alarm", myevent->alarm);
-}
-/* }}} */
-
-/* {{{ proto array icap_list_events(int stream_id, int begindate [, int enddate])
- Returns list of UIDs for that day or range of days */
-PHP_FUNCTION(icap_list_events)
-{
- pval *streamind, *begindate, *enddate;
- pval **pvalue;
- int ind, ind_type;
- unsigned long i;
- char *t;
- int icap_folders=0;
- unsigned int msgno;
- pils *icap_le_struct;
- cal_list_t *my_cal_list;
- datetime_t begincal, endcal;
- int myargc;
- myargc=ZEND_NUM_ARGS();
- if (myargc <2 || myargc > 3 || getParameters(ht, myargc, &streamind, &begindate, &enddate) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_array(begindate);
- if(myargc == 3) convert_to_array(enddate);
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
-
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- begincal.has_time=0;
- endcal.has_time=0;
- if(zend_hash_find(Z_ARRVAL_P(begindate), "year", sizeof("year"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- begincal.year=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(begindate), "month", sizeof("month"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- begincal.mon=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(begindate), "day", sizeof("day"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- begincal.mday=Z_LVAL_PP(pvalue);
- }
-if(myargc == 3)
- {
- if(zend_hash_find(Z_ARRVAL_P(enddate), "year", sizeof("year"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- endcal.year=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(enddate), "month", sizeof("month"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- endcal.mon=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(enddate), "day", sizeof("day"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- endcal.mday=Z_LVAL_PP(pvalue);
- }
- }
-
-
-g_cal_list=NULL;
- cal_search_range(icap_le_struct->icap_stream, &begincal, &endcal);
- my_cal_list=g_cal_list;
- while(my_cal_list != NULL)
- {
- add_next_index_long(return_value, my_cal_list->uid);
- my_cal_list=my_cal_list->next;
- free(g_cal_list);
- g_cal_list=my_cal_list;
- }
-}
-/* }}} */
-
-
-/* {{{ proto string icap_create_calendar(int stream_id, string calendar)
- Create a new calendar*/
-
-PHP_FUNCTION(icap_create_calendar)
-{
- pval *streamind, *calendar;
- int ind, ind_type;
- pils *icap_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc <1 || myargc > 2 || getParameters(ht, myargc, &streamind, &calendar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_string(calendar);
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-/*
- if (icap_create(icap_le_struct->icap_stream, Z_STRVAL_P(calendar)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
-*/
-}
-/* }}} */
-
-
-/* {{{ proto string icap_rename_calendar(int stream_id, string src_calendar, string dest_calendar)
- Rename a calendar*/
-PHP_FUNCTION(icap_rename_calendar)
-{
- pval *streamind, *src_calendar, *dest_calendar;
- int ind, ind_type;
- pils *icap_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc <2 || myargc > 3 || getParameters(ht, myargc, &streamind, &src_calendar, &dest_calendar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_string(src_calendar);
- convert_to_string(dest_calendar);
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-/*
- if(icap_rename(icap_le_struct->icap_stream, Z_STRVAL_P(src_calendar), Z_STRVAL_P(dest_calendar))) {RETURN_TRUE;}
- else {RETURN_FALSE; }
-*/
-}
-/* }}} */
-
-
-
-
-/* {{{ proto int icap_list_alarms(int stream_id, array date, array time)
- List alarms for a given time */
-PHP_FUNCTION(icap_list_alarms)
-{
- pval *streamind, *date, *time;
- pval **pvalue;
- datetime_t mydate;
- int ind, ind_type;
- pils *icap_le_struct;
- int icap_folders=0;
- unsigned int msgno;
- cal_list_t *my_cal_list;
-
- int myargc=ZEND_NUM_ARGS();
- if (myargc != 3 || getParameters(ht, myargc, &streamind, &date, &time) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_array(date);
- convert_to_array(time);
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- mydate.has_date=1;
- mydate.has_time=1;
- if(zend_hash_find(Z_ARRVAL_P(date), "year", sizeof("year"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- mydate.year=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(date), "month", sizeof("month"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- mydate.mon=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(date), "day", sizeof("day"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- mydate.mday=Z_LVAL_PP(pvalue);
- }
-
- if(zend_hash_find(Z_ARRVAL_P(time), "hour", sizeof("hour"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- mydate.hour=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(time), "minute", sizeof("minute"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- mydate.min=Z_LVAL_PP(pvalue);
- }
- mydate.sec=0;
- g_cal_list=NULL;
- cal_search_alarm(icap_le_struct->icap_stream, &mydate);
- my_cal_list=g_cal_list;
- while(my_cal_list != NULL)
- {
- add_next_index_long(return_value, my_cal_list->uid);
- my_cal_list=my_cal_list->next;
- free(g_cal_list);
- g_cal_list=my_cal_list;
- }
-
-
-}
-/* }}} */
-
-
-/* {{{ proto string icap_delete_calendar(int stream_id, string calendar)
- Delete calendar */
-PHP_FUNCTION(icap_delete_calendar)
-{
- pval *streamind, *calendar;
- int ind, ind_type;
- pils *icap_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc <1 || myargc > 2 || getParameters(ht, myargc, &streamind, &calendar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_string(calendar);
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if (icap_delete_calendar(icap_le_struct->icap_stream, Z_STRVAL_P(calendar)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto string icap_delete_event(int stream_id, int uid)
- Delete event */
-PHP_FUNCTION(icap_delete_event)
-{
- pval *streamind, *uid;
- int ind, ind_type;
- pils *icap_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc <1 || myargc > 2 || getParameters(ht, myargc, &streamind, &uid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_long(uid);
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- if (cal_remove(icap_le_struct->icap_stream, Z_LVAL_P(uid)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string icap_delete_calendar(int stream_id, int uid)
- Delete event*/
-icap_delete_calendar(){
- return 1;
-}
-/* }}} */
-
-/* {{{ proto void icap_popen(void)
- For now this is obviously a dummy */
-PHP_FUNCTION(icap_popen)
-{
-}
-/* }}} */
-
-/* {{{ proto string icap_store_event(int stream_id, object event)
- Store an event */
-PHP_FUNCTION(icap_store_event)
-{
- pval *streamind, *storeobject;
- int ind, ind_type;
- unsigned long i;
- char *t;
- int icap_folders=0;
- unsigned int msgno;
- pils *icap_le_struct;
- pval **pvalue, **temppvalue;
- cal_list_t *my_cal_list;
- int myargc;
- unsigned long uid;
- CALEVENT *myevent;
- myargc=ZEND_NUM_ARGS();
- if (myargc !=2 || getParameters(ht, myargc, &streamind, &storeobject) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_array(storeobject);
-
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
-
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- myevent=calevent_new();
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "uid", sizeof("uid"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->id=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "public", sizeof("public"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->public=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "category", sizeof("category"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_string(*pvalue);
- myevent->category=strdup(Z_STRVAL_PP(pvalue));
- }
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "title", sizeof("title"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_string(*pvalue);
- myevent->title=strdup(Z_STRVAL_PP(pvalue));
- }
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "description", sizeof("description"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_string(*pvalue);
- myevent->description=strdup(Z_STRVAL_PP(pvalue));
- }
-
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "alarm", sizeof("alarm"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->alarm=Z_LVAL_PP(pvalue);
- }
-
-
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "start", sizeof("start"), (void **) &temppvalue)== SUCCESS){
- SEPARATE_ZVAL(temppvalue);
- convert_to_array(*temppvalue);
-
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "year", sizeof("year"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->start.year=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "month", sizeof("month"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->start.mon=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "mday", sizeof("mday"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->start.mday=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "hour", sizeof("hour"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->start.hour=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "min", sizeof("min"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->start.min=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "sec", sizeof("sec"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->start.sec=Z_LVAL_PP(pvalue);
- }
- myevent->start.has_date=true;
- }
-
- if(zend_hash_find(Z_ARRVAL_P(storeobject), "end", sizeof("end"), (void **) &temppvalue)== SUCCESS){
- SEPARATE_ZVAL(temppvalue);
- convert_to_array(*temppvalue);
-
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "year", sizeof("year"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->end.year=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "month", sizeof("month"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->end.mon=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "mday", sizeof("mday"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->end.mday=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "hour", sizeof("hour"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->end.hour=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "min", sizeof("min"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->end.min=Z_LVAL_PP(pvalue);
- }
- if(zend_hash_find(Z_ARRVAL_PP(temppvalue), "sec", sizeof("sec"), (void **) &pvalue)== SUCCESS){
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- myevent->end.sec=Z_LVAL_PP(pvalue);
- }
- myevent->end.has_date=true;
- }
-
- cal_append(icap_le_struct->icap_stream, "INBOX", &uid, myevent);
- calevent_free(myevent);
- RETURN_LONG(uid);
-}
-/* }}} */
-
-
-/* {{{ proto string icap_snooze(int stream_id, int uid)
- Snooze an alarm */
-PHP_FUNCTION(icap_snooze)
-{
- pval *streamind, *uid;
- int ind, ind_type;
- pils *icap_le_struct;
- pval **pvalue;
- int myargc;
- myargc=ZEND_NUM_ARGS();
- if (myargc !=2 || getParameters(ht, myargc, &streamind, &uid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(streamind);
- convert_to_long(uid);
-
- ind = Z_LVAL_P(streamind);
-
- icap_le_struct = (pils *)zend_list_find(ind, &ind_type);
-
- if (!icap_le_struct ) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if(cal_snooze(icap_le_struct->icap_stream, Z_LVAL_P(uid)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
-
-
-}
-/* }}} */
-
-
-/* Interfaces to callbacks */
-
-
-void cc_searched (unsigned long cal_uid)
-{
-
- if(g_cal_list==NULL)
- {
- g_cal_list=malloc(sizeof(struct cal_list));
- g_cal_list->uid=cal_uid;
- g_cal_list->next=NULL;
- g_cal_list_end=g_cal_list;
- }
- else
- {
- g_cal_list_end->next=malloc(sizeof(struct cal_list));
- g_cal_list_end=g_cal_list_end->next;
- g_cal_list_end->uid=cal_uid;
- g_cal_list_end->next=NULL;
- }
-}
-
-
-void cc_appended(php_uint32 uid)
-{
-
-}
-
-
-void cc_fetched(const CALEVENT *event)
-{
-
-}
-
-
-void cc_login(const char **user, const char **pwd)
-{
-
-*user=icap_user;
-*pwd=icap_password;
-}
-
-
-void cc_vlog(const char *fmt, va_list ap)
-{
-}
-void cc_vdlog(const char *fmt, va_list ap)
-{
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/icap/php_icap.h b/ext/icap/php_icap.h
deleted file mode 100644
index 196dbc02a1..0000000000
--- a/ext/icap/php_icap.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $Id$ */
-
-#ifndef PHP_ICAP_H
-#define PHP_ICAP_H
-
-#if HAVE_ICAP
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-PHP_MINIT_FUNCTION(icap);
-PHP_MINFO_FUNCTION(icap);
-
-/* Functions accessable to PHP */
-extern zend_module_entry php_icap_module_entry;
-#define php_icap_module_ptr &php_icap_module_entry
-#define phpext_icap_ptr php_icap_module_ptr
-
-extern int icap_init_request(INIT_FUNC_ARGS);
-extern int icap_end_request(void);
-PHP_FUNCTION(icap_open);
-PHP_FUNCTION(icap_popen);
-PHP_FUNCTION(icap_reopen);
-PHP_FUNCTION(icap_close);
-PHP_FUNCTION(icap_fetch_event);
-PHP_FUNCTION(icap_list_events);
-PHP_FUNCTION(icap_create_calendar);
-PHP_FUNCTION(icap_rename_calendar);
-PHP_FUNCTION(icap_delete_calendar);
-PHP_FUNCTION(icap_store_event);
-PHP_FUNCTION(icap_delete_event);
-PHP_FUNCTION(icap_snooze);
-PHP_FUNCTION(icap_list_alarms);
-
-
-#else
-#define php_icap_module_ptr NULL
-#endif /* HAVE_ICAP */
-
-
-#endif
diff --git a/ext/iconv/EXPERIMENTAL b/ext/iconv/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/iconv/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4
deleted file mode 100644
index 12e14d7ad8..0000000000
--- a/ext/iconv/config.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(iconv, for iconv support,
-[ --with-iconv[=DIR] Include iconv support])
-
-if test "$PHP_ICONV" != "no"; then
-
- PHP_SETUP_ICONV(ICONV_SHARED_LIBADD, [
- PHP_NEW_EXTENSION(iconv, iconv.c, $ext_shared)
- PHP_SUBST(ICONV_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(Please reinstall the iconv library.)
- ])
-
-fi
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
deleted file mode 100644
index b3d0ec99ae..0000000000
--- a/ext/iconv/iconv.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rui Hirokawa <rui_hirokawa@ybb.ne.jp> |
- | Stig Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#ifdef PHP_ATOM_INC
-#include "php_have_iconv.h"
-#include "php_have_libiconv.h"
-#endif
-
-#if HAVE_ICONV
-
-#ifdef HAVE_GICONV_H
-#include <giconv.h>
-#else
-#include <iconv.h>
-#endif
-
-#include <errno.h>
-
-#include "php_globals.h"
-#include "php_iconv.h"
-#include "ext/standard/info.h"
-#include "main/php_output.h"
-#include "SAPI.h"
-#include "php_ini.h"
-
-
-#if HAVE_LIBICONV
-#define icv_open(a, b) libiconv_open(a, b)
-#define icv_close(a) libiconv_close(a)
-#define icv(a, b, c, d, e) libiconv(a, b, c, d, e)
-#else
-#define icv_open(a, b) iconv_open(a, b)
-#define icv_close(a) iconv_close(a)
-#define icv(a, b, c, d, e) iconv(a, b, c, d, e)
-#endif
-
-
-/* {{{ iconv_functions[]
- */
-function_entry iconv_functions[] = {
- PHP_NAMED_FE(iconv,php_if_iconv, NULL)
- PHP_FE(ob_iconv_handler, NULL)
- PHP_FE(iconv_get_encoding, NULL)
- PHP_FE(iconv_set_encoding, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ iconv_module_entry
- */
-zend_module_entry iconv_module_entry = {
- STANDARD_MODULE_HEADER,
- "iconv",
- iconv_functions,
- PHP_MINIT(miconv),
- PHP_MSHUTDOWN(miconv),
- NULL,
- NULL,
- PHP_MINFO(miconv),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(iconv)
-
-#ifdef COMPILE_DL_ICONV
-ZEND_GET_MODULE(iconv)
-#endif
-
-static int php_iconv_string(const char * in_str, unsigned int in_len, char ** out_str, unsigned int * out_len, const char * in_encoding, const char * out_encoding, int *err TSRMLS_DC);
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("iconv.input_encoding", ICONV_INPUT_ENCODING, PHP_INI_ALL, OnUpdateString, input_encoding, zend_iconv_globals, iconv_globals)
- STD_PHP_INI_ENTRY("iconv.output_encoding", ICONV_OUTPUT_ENCODING, PHP_INI_ALL, OnUpdateString, output_encoding, zend_iconv_globals, iconv_globals)
- STD_PHP_INI_ENTRY("iconv.internal_encoding", ICONV_INTERNAL_ENCODING, PHP_INI_ALL, OnUpdateString, internal_encoding, zend_iconv_globals, iconv_globals)
-PHP_INI_END()
-/* }}} */
-
-static void php_iconv_init_globals(zend_iconv_globals *iconv_globals)
-{
- iconv_globals->input_encoding = NULL;
- iconv_globals->output_encoding = NULL;
- iconv_globals->internal_encoding = NULL;
-}
-
-PHP_MINIT_FUNCTION(miconv)
-{
- ZEND_INIT_MODULE_GLOBALS(iconv, php_iconv_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(miconv)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(miconv)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "iconv support", "enabled");
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-#
-#define PHP_ICONV_CONVERTER 1
-#define PHP_ICONV_WRONG_CHARSET 2
-#define PHP_ICONV_TOO_BIG 3
-#define PHP_ICONV_ILLEGAL_SEQ 4
-#define PHP_ICONV_ILLEGAL_CHAR 5
-#define PHP_ICONV_UNKNOWN 6
-
-/* {{{ php_iconv_string
- */
-static int php_iconv_string(const char *in_p, size_t in_len,
- char **out, size_t *out_len,
- const char *in_charset, const char *out_charset, int *err TSRMLS_DC)
-{
-#if HAVE_LIBICONV
- /* No errno for libiconv(?) */
- unsigned int in_size, out_size, out_left;
- char *out_buffer, *out_p;
- iconv_t cd;
- size_t result;
- typedef unsigned int ucs4_t;
-
- *err = 0;
- in_size = in_len;
-
- /*
- This is not the right way to get output size...
- This is not space efficient for large text.
- This is also problem for encoding like UTF-7/UTF-8/ISO-2022 which
- a single char can be more than 4 bytes.
- I added 15 extra bytes for safety. <yohgaki@php.net>
- */
- out_size = in_len * sizeof(ucs4_t) + 16;
- out_buffer = (char *) emalloc(out_size);
-
- *out = out_buffer;
- out_p = out_buffer;
- out_left = out_size;
-
- cd = icv_open(out_charset, in_charset);
-
- if (cd == (iconv_t)(-1)) {
- *err = PHP_ICONV_UNKNOWN;
- php_error(E_WARNING, "%s(): unknown error, unable to convert from `%s' to `%s'",
- get_active_function_name(TSRMLS_C), in_charset, out_charset);
- efree(out_buffer);
- return FAILURE;
- }
-
- result = icv(cd, (char **) &in_p, &in_size, (char **)
- &out_p, &out_left);
-
- if (result == (size_t)(-1)) {
- *err = PHP_ICONV_UNKNOWN;
- efree(out_buffer);
- return FAILURE;
- }
-
- *out_len = out_size - out_left;
- out_buffer[*out_len] = '\0';
- icv_close(cd);
-
- return SUCCESS;
-
-#else
- /*
- libc iconv should support errno. Handle it better way.
- */
- iconv_t cd;
- size_t in_left, out_size, out_left;
- char *out_p, *out_buf, *tmp_buf;
- size_t i, bsz, result;
-
- *err = 0;
- cd = iconv_open(out_charset, in_charset);
- if (cd == (iconv_t)(-1)) {
- if (errno == EINVAL) {
- *err = PHP_ICONV_WRONG_CHARSET;
- php_error(E_NOTICE, "%s() wrong charset, cannot convert from `%s' to `%s'",
- get_active_function_name(TSRMLS_C), in_charset, out_charset);
- }
- else {
- *err = PHP_ICONV_CONVERTER;
- php_error(E_NOTICE, "%s() cannot open converter",
- get_active_function_name(TSRMLS_C));
- }
- return FAILURE;
- }
-
- in_left= in_len;
- out_left = in_len + 32; /* Avoid realloc() most cases */
- bsz = out_left;
- out_buf = (char *) emalloc(bsz+1);
- out_p = out_buf;
- result = iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left);
- out_size = bsz - out_left;
- for (i = 2;in_left > 0 && errno == E2BIG; i++) {
- /* converted string is longer than out buffer */
- tmp_buf = (char*)erealloc(out_buf, bsz*i+1);
- if (tmp_buf == NULL) {
- break;
- }
- out_buf = tmp_buf;
- out_p = tmp_buf;
- out_p += out_size;
- out_left = in_len;
- result = iconv(cd, (char **)&in_p, &in_left, &out_p, &out_left);
- out_size += bsz - out_left;
- }
- iconv_close(cd);
- if (result == (size_t)(-1)) {
- switch (errno) {
- case EINVAL:
- php_error(E_NOTICE, "%s() detected incomplete character in input string",
- get_active_function_name(TSRMLS_C));
- *err = PHP_ICONV_ILLEGAL_CHAR;
- break;
- case EILSEQ:
- php_error(E_NOTICE, "%s() detected illegal character in input string",
- get_active_function_name(TSRMLS_C));
- *err = PHP_ICONV_ILLEGAL_SEQ;
- break;
- case E2BIG:
- /* should not happen */
- php_error(E_WARNING, "%s() run out buffer",
- get_active_function_name(TSRMLS_C));
- *err = PHP_ICONV_TOO_BIG;
- break;
- default:
- /* other error */
- php_error(E_NOTICE, "%s() unknown error (%d)",
- get_active_function_name(TSRMLS_C), errno);
- *err = PHP_ICONV_UNKNOWN;
- efree(out_buf);
- return FAILURE;
- break;
- }
- }
- *out_p = '\0';
- *out = out_buf;
- *out_len = out_size;
- return SUCCESS;
-#endif
-}
-/* }}} */
-
-/* {{{ proto string iconv(string in_charset, string out_charset, string str)
- Returns str converted to the out_charset character set */
-PHP_NAMED_FUNCTION(php_if_iconv)
-{
- char *in_charset, *out_charset, *in_buffer, *out_buffer;
- unsigned int out_len;
- int in_charset_len, out_charset_len, in_buffer_len, err;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss",
- &in_charset, &in_charset_len, &out_charset, &out_charset_len, &in_buffer, &in_buffer_len) == FAILURE)
- return;
-
- if (php_iconv_string(in_buffer, in_buffer_len,
- &out_buffer, &out_len,
- in_charset, out_charset, &err TSRMLS_CC) == SUCCESS) {
- RETVAL_STRINGL(out_buffer, out_len, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ob_iconv_handler(string contents, int status)
- Returns str in output buffer converted to the iconv.output_encoding character set */
-PHP_FUNCTION(ob_iconv_handler)
-{
- char *out_buffer;
- zval *zv_string;
- unsigned int out_len;
- int err, status;;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl", &zv_string, &status) == FAILURE)
- return;
-
- convert_to_string_ex(&zv_string);
-
- if (SG(sapi_headers).send_default_content_type &&
- php_iconv_string(Z_STRVAL_P(zv_string), Z_STRLEN_P(zv_string),
- &out_buffer, &out_len,
- ICONVG(internal_encoding),
- ICONVG(output_encoding),
- &err TSRMLS_CC) == SUCCESS) {
- RETVAL_STRINGL(out_buffer, out_len, 0);
- } else {
- zval_dtor(return_value);
- *return_value = *zv_string;
- zval_copy_ctor(return_value);
- }
-
-}
-/* }}} */
-
-/* {{{ proto bool iconv_set_encoding(string type, string charset)
- Sets internal encoding and output encoding for ob_iconv_handler() */
-PHP_FUNCTION(iconv_set_encoding)
-{
- char *type, *charset;
- int type_len, charset_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &type, &type_len, &charset, &charset_len) == FAILURE)
- return;
-
- if(!strcasecmp("input_encoding", type)) {
- retval = zend_alter_ini_entry("iconv.input_encoding", sizeof("iconv.input_encoding"), charset, charset_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else if(!strcasecmp("output_encoding", type)) {
- retval = zend_alter_ini_entry("iconv.output_encoding", sizeof("iconv.output_encoding"), charset, charset_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else if(!strcasecmp("internal_encoding", type)) {
- retval = zend_alter_ini_entry("iconv.internal_encoding", sizeof("iconv.internal_encoding"), charset, charset_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else {
- RETURN_FALSE;
- }
-
- if (retval == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array iconv_get_encoding([string type])
- Get internal encoding and output encoding for ob_iconv_handler() */
-PHP_FUNCTION(iconv_get_encoding)
-{
- char *type = "all";
- int type_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &type, &type_len) == FAILURE)
- return;
-
- if (!strcasecmp("all", type)) {
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- add_assoc_string(return_value, "input_encoding", ICONVG(input_encoding), 1);
- add_assoc_string(return_value, "output_encoding", ICONVG(output_encoding), 1);
- add_assoc_string(return_value, "internal_encoding", ICONVG(internal_encoding), 1);
- } else if (!strcasecmp("input_encoding", type)) {
- RETVAL_STRING(ICONVG(input_encoding), 1);
- } else if (!strcasecmp("output_encoding", type)) {
- RETVAL_STRING(ICONVG(output_encoding), 1);
- } else if (!strcasecmp("internal_encoding", type)) {
- RETVAL_STRING(ICONVG(internal_encoding), 1);
- } else {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/iconv/iconv.dsp b/ext/iconv/iconv.dsp
deleted file mode 100644
index 3ba74f8497..0000000000
--- a/ext/iconv/iconv.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="iconv" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=iconv - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "iconv.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "iconv.mak" CFG="iconv - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "iconv - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "iconv - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "iconv - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ICONV_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /I "..\..\..\php_build\iconv\include" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_ICONV" /D "HAVE_ICONV" /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZTS=1 /D "HAVE_LIBICONV" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib iconv-1.3.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_iconv.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\iconv\lib"
-
-!ELSEIF "$(CFG)" == "iconv - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ICONV_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /I "..\..\..\php_build\iconv\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_ICONV" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_ICONV" /D ZTS=1 /D "HAVE_LIBICONV" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib iconv-1.3.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_iconv.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\iconv\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "iconv - Win32 Release_TS"
-# Name "iconv - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\iconv.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_iconv.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h
deleted file mode 100644
index 247f4cc615..0000000000
--- a/ext/iconv/php_iconv.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rui Hirokawa <rui_hirokawa@ybb.ne.jp> |
- | Stig Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_ICONV_H
-#define PHP_ICONV_H
-
-#ifdef PHP_WIN32
-#define PHP_ICONV_API __declspec(dllexport)
-#else
-#define PHP_ICONV_API
-#endif
-
-#ifdef PHP_ATOM_INC
-#include "php_have_iconv.h"
-#endif
-
-
-#if HAVE_ICONV
-extern zend_module_entry iconv_module_entry;
-#define iconv_module_ptr &iconv_module_entry
-
-PHP_MINIT_FUNCTION(miconv);
-PHP_MSHUTDOWN_FUNCTION(miconv);
-PHP_MINFO_FUNCTION(miconv);
-
-PHP_NAMED_FUNCTION(php_if_iconv);
-PHP_FUNCTION(ob_iconv_handler);
-PHP_FUNCTION(iconv_get_encoding);
-PHP_FUNCTION(iconv_set_encoding);
-
-ZEND_BEGIN_MODULE_GLOBALS(iconv)
- char *input_encoding;
- char *internal_encoding;
- char *output_encoding;
-ZEND_END_MODULE_GLOBALS(iconv)
-
-#ifdef ZTS
-#define ICONVG(v) TSRMG(iconv_globals_id, zend_iconv_globals *, v)
-#else
-#define ICONVG(v) (iconv_globals.v)
-#endif
-
-#define ICONV_INPUT_ENCODING "ISO-8859-1"
-#define ICONV_OUTPUT_ENCODING "ISO-8859-1"
-#define ICONV_INTERNAL_ENCODING "ISO-8859-1"
-
-#else
-
-#define iconv_module_ptr NULL
-
-#endif /* HAVE_ICONV */
-
-#define phpext_iconv_ptr iconv_module_ptr
-
-#endif /* PHP_ICONV_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/iconv/tests/001.phpt b/ext/iconv/tests/001.phpt
deleted file mode 100644
index a6f41199ae..0000000000
--- a/ext/iconv/tests/001.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-iconv test
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php
-echo "iconv extension is available\n";
-$test = "æøå";
-printf("ISO-8859-1: %s\nUTF-8: %s\n",
- $test, iconv("ISO-8859-1", "UTF-8", $test));
-
-?>
---EXPECT--
-iconv extension is available
-ISO-8859-1: æøå
-UTF-8: æøå
diff --git a/ext/iconv/tests/002.inc b/ext/iconv/tests/002.inc
deleted file mode 100644
index f7ae53d4bd..0000000000
--- a/ext/iconv/tests/002.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/*
-Expected output:
-&#97;&#98;&#99;&#100;
-abcd
-*/
-
- $s = unpack("V*", iconv("ascii","UCS-4LE", "abcd"));
- foreach($s as $c) { print "&#$c;"; } print "\n";
-
- $s = pack("NNNN", 97, 98, 99, 100);
- $q = iconv("UCS-4BE", "ascii", $s);
- print $q; print "\n";
-?>
diff --git a/ext/iconv/tests/002.phpt b/ext/iconv/tests/002.phpt
deleted file mode 100644
index 99d08c3e61..0000000000
--- a/ext/iconv/tests/002.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-UCS4BE to ASCII
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('002.inc'); ?>
---EXPECT--
-&#97;&#98;&#99;&#100;
-abcd
diff --git a/ext/iconv/tests/eucjp2iso2022jp.inc b/ext/iconv/tests/eucjp2iso2022jp.inc
deleted file mode 100644
index 3c3fc341e4..0000000000
--- a/ext/iconv/tests/eucjp2iso2022jp.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/* charset=EUC-JP */
-
-$str = "
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-";
-
-$str = iconv("EUC-JP", "ISO-2022-JP", $str);
-$str = base64_encode($str);
-echo $str."\n";
-
-?>
diff --git a/ext/iconv/tests/eucjp2iso2022jp.phpt b/ext/iconv/tests/eucjp2iso2022jp.phpt
deleted file mode 100644
index d7f38760e2..0000000000
--- a/ext/iconv/tests/eucjp2iso2022jp.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-EUC-JP to ISO-2022-JP
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('eucjp2iso2022jp.inc'); ?>
---EXPECT--
-ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0ChskQkZ8S1w4bCVGJS0lOSVIJEgbKEJFbmdsaXNoIFRleHQKGyRCRnxLXDhsJUYlLSU5JUgkSBsoQkVuZ2xpc2ggVGV4dAobJEJGfEtcOGwlRiUtJTklSCRIGyhCRW5nbGlzaCBUZXh0CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
diff --git a/ext/iconv/tests/eucjp2sjis.inc b/ext/iconv/tests/eucjp2sjis.inc
deleted file mode 100644
index 568ed9d66d..0000000000
--- a/ext/iconv/tests/eucjp2sjis.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/* charset=EUC-JP */
-
-$str = "
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-";
-
-$str = iconv("EUC-JP", "SJIS", $str);
-$str = base64_encode($str);
-echo $str."\n";
-
-?>
diff --git a/ext/iconv/tests/eucjp2sjis.phpt b/ext/iconv/tests/eucjp2sjis.phpt
deleted file mode 100644
index 1af3d7f9ca..0000000000
--- a/ext/iconv/tests/eucjp2sjis.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-EUC-JP to SJIS
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('eucjp2sjis.inc'); ?>
---EXPECT--
-CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0Cg==
-
diff --git a/ext/iconv/tests/eucjp2utf8.inc b/ext/iconv/tests/eucjp2utf8.inc
deleted file mode 100644
index 5971491f88..0000000000
--- a/ext/iconv/tests/eucjp2utf8.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/* charset=EUC-JP */
-
-$str = "
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-";
-
-$str = iconv("EUC-JP", "UTF8", $str);
-$str = base64_encode($str);
-echo $str."\n";
-
-?>
diff --git a/ext/iconv/tests/eucjp2utf8.phpt b/ext/iconv/tests/eucjp2utf8.phpt
deleted file mode 100644
index b3937e52ba..0000000000
--- a/ext/iconv/tests/eucjp2utf8.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-EUC-JP to UTF8
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('eucjp2utf8.inc'); ?>
---EXPECT--
-CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
diff --git a/ext/iconv/tests/skipif.inc b/ext/iconv/tests/skipif.inc
deleted file mode 100644
index 4fea1b0d43..0000000000
--- a/ext/iconv/tests/skipif.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-
-if (!extension_loaded("iconv") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("iconv$dlext");
-}
-if (!extension_loaded("iconv")) {
- die("skip\n");
-}
-?> \ No newline at end of file
diff --git a/ext/imap/CREDITS b/ext/imap/CREDITS
deleted file mode 100644
index 2d19ecd24a..0000000000
--- a/ext/imap/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-IMAP
-Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky
diff --git a/ext/imap/IMAP_Win32_HOWTO.txt b/ext/imap/IMAP_Win32_HOWTO.txt
deleted file mode 100644
index 5fbd859a6d..0000000000
--- a/ext/imap/IMAP_Win32_HOWTO.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-Rules for building IMAP
------------------------
-
-Note 1: You *must* use NT's cmd.exe for this job; 4NT.exe will NOT work properly.
-Note 2: During the entire build process, you can ignore warnings about
- inconsistent DLL linkage.
-
-- Open IMAP under php_build. Rename this directory to 'IMAP'.
-- Change to the IMAP directory.
-- Edit .\src\osdep\nt\makefile.nt:
- Search for '/MT', and change it to '/MD'. If you're compiling in DEBUG mode,
- use '/MDd' instead.
- Search for 'ERASE'. Comment out the line that contains the ERASE command.
-- Run 'nmake nt'
-
----Begin Win2K only---
-- At some point, the build will fail. Rerun 'nmake nt'.
-- After a while, the build will fail again, failing to find auths.c.
-- Change directory to 'c-client'
-- Create an a file named auths.c, that includes the following line:
- #include "auth_md5.c"
-- Run 'nmake -f makefile.nt'
----End Win2K only---
-
-At this point (even if the last build apparently failed), you should have the
-client library ready (cclient.lib).
-
-Start Visual Studio, load php_modules.dsw, select the IMAP projects, and build
-it.
-
-
- \ No newline at end of file
diff --git a/ext/imap/config.m4 b/ext/imap/config.m4
deleted file mode 100644
index 3f1f8159e6..0000000000
--- a/ext/imap/config.m4
+++ /dev/null
@@ -1,169 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(IMAP_INC_CHK,[if test -r "$i$1/c-client.h"; then
- AC_DEFINE(HAVE_IMAP2000, 1, [ ])
- IMAP_DIR=$i
- IMAP_INC_DIR=$i$1
- elif test -r "$i$1/rfc822.h"; then
- IMAP_DIR=$i;
- IMAP_INC_DIR=$i$1
-])
-
-AC_DEFUN(IMAP_LIB_CHK,[
- str="$IMAP_DIR/$1/lib$lib.*"
- for i in `echo $str`; do
- if test -r $i; then
- IMAP_LIBDIR=$IMAP_DIR/$1
- break 2
- fi
- done
-])
-
-AC_DEFUN(PHP_IMAP_KRB_CHK, [
- AC_ARG_WITH(kerberos,
- [ --with-kerberos[=DIR] IMAP: Include Kerberos support. DIR is the Kerberos install dir.],[
- PHP_KERBEROS=$withval
- ],[
- PHP_KERBEROS=no
- ])
-
- if test "$PHP_KERBEROS" = "yes"; then
- test -d /usr/kerberos && PHP_KERBEROS=/usr/kerberos
- fi
-
- if test "$PHP_KERBEROS" != "no"; then
- AC_DEFINE(HAVE_IMAP_KRB,1,[ ])
- PHP_ADD_LIBPATH($PHP_KERBEROS/lib, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(gssapi_krb5, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(krb5, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(k5crypto, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(com_err, 1, IMAP_SHARED_LIBADD)
- else
- AC_EGREP_HEADER(auth_gss, $IMAP_INC_DIR/linkage.h, [
- AC_MSG_ERROR(This c-client library is build with Kerberos support.
-
- Add --with-kerberos<=DIR> to your configure line. Check config.log for details.)
- ])
- fi
-
-])
-
-AC_DEFUN(PHP_IMAP_SSL_CHK, [
- AC_ARG_WITH(imap-ssl,
- [ --with-imap-ssl[=DIR] IMAP: Include SSL support. DIR is the OpenSSL install dir.],[
- PHP_IMAP_SSL=$withval
- ],[
- PHP_IMAP_SSL=no
- ])
-
- if test "$PHP_IMAP_SSL" = "yes"; then
- PHP_IMAP_SSL=/usr
- fi
-
- if test "$PHP_IMAP_SSL" != "no"; then
- AC_DEFINE(HAVE_IMAP_SSL,1,[ ])
- PHP_ADD_LIBPATH($PHP_IMAP_SSL/lib, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER(ssl,, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER(crypto,, IMAP_SHARED_LIBADD)
- else
- old_LIBS=$LIBS
- LIBS="$LIBS -L$IMAP_LIBDIR -l$IMAP_LIB"
- if test $PHP_KERBEROS != "no"; then
- LIBS="$LIBS -L$PHP_KERBEROS/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
- fi
-
- AC_TRY_RUN([
- void mm_log(void){}
- void mm_dlog(void){}
- void mm_flags(void){}
- void mm_fatal(void){}
- void mm_critical(void){}
- void mm_nocritical(void){}
- void mm_notify(void){}
- void mm_login(void){}
- void mm_diskerror(void){}
- void mm_status(void){}
- void mm_lsub(void){}
- void mm_list(void){}
- void mm_exists(void){}
- void mm_searched(void){}
- void mm_expunged(void){}
- char mail_open();
- int main() {
- mail_open(0,"",0);
- return 0;
- }
- ],,[
- AC_MSG_ERROR(This c-client library is build with SSL support.
-
- Add --with-imap-ssl<=DIR> to your configure line. Check config.log for details.)
- ])
- LIBS=$old_LIBS
- fi
-])
-
-
-PHP_ARG_WITH(imap,for IMAP support,
-[ --with-imap[=DIR] Include IMAP support. DIR is the c-client install prefix.])
-
-if test "$PHP_IMAP" != "no"; then
-
- PHP_SUBST(IMAP_SHARED_LIBADD)
- PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared)
- AC_DEFINE(HAVE_IMAP,1,[ ])
-
- for i in /usr/local /usr $PHP_IMAP; do
- IMAP_INC_CHK()
- el[]IMAP_INC_CHK(/include/c-client)
- el[]IMAP_INC_CHK(/include/imap)
- el[]IMAP_INC_CHK(/include)
- el[]IMAP_INC_CHK(/imap)
- el[]IMAP_INC_CHK(/c-client)
- fi
- done
-
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$IMAP_INC_DIR
- AC_EGREP_CPP(this_is_true, [
- #include "imap4r1.h"
- #if defined(IMAPSSLPORT)
- this_is_true
- #endif
- ],[
- AC_DEFINE(HAVE_IMAP2001, 1, [ ])
- ],[])
- CPPFLAGS=$old_CPPFLAGS
-
- AC_CHECK_LIB(pam, pam_start)
- AC_CHECK_LIB(crypt, crypt)
-
- PHP_EXPAND_PATH($IMAP_DIR, IMAP_DIR)
-
- if test -z "$IMAP_DIR"; then
- AC_MSG_ERROR(Cannot find rfc822.h. Please check your IMAP installation.)
- fi
-
- if test -r "$IMAP_DIR/c-client/c-client.a"; then
- ln -s "$IMAP_DIR/c-client/c-client.a" "$IMAP_DIR/c-client/libc-client.a" >/dev/null 2>&1
- elif test -r "$IMAP_DIR/lib/c-client.a"; then
- ln -s "$IMAP_DIR/lib/c-client.a" "$IMAP_DIR/lib/libc-client.a" >/dev/null 2>&1
- fi
-
- for lib in c-client4 c-client imap; do
- IMAP_LIB=$lib
- IMAP_LIB_CHK(lib)
- IMAP_LIB_CHK(c-client)
- done
-
- if test -z "$IMAP_LIBDIR"; then
- AC_MSG_ERROR(Cannot find imap library (libc-client.a). Please check your IMAP installation.)
- fi
-
- PHP_ADD_INCLUDE($IMAP_INC_DIR)
- PHP_ADD_LIBPATH($IMAP_LIBDIR, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER($IMAP_LIB,, IMAP_SHARED_LIBADD)
- PHP_IMAP_KRB_CHK
- PHP_IMAP_SSL_CHK
-fi
diff --git a/ext/imap/imap.dsp b/ext/imap/imap.dsp
deleted file mode 100644
index ea79f3b445..0000000000
--- a/ext/imap/imap.dsp
+++ /dev/null
@@ -1,183 +0,0 @@
-# Microsoft Developer Studio Project File - Name="imap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=imap - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "imap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "imap.mak" CFG="imap - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "imap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "imap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "imap - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "imap - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "imap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\IMAP\c-client" /I "..\..\TSRM" /D "NDEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4nts.lib wsock32.lib winmm.lib cclient.lib /nologo /dll /machine:I386 /out:"Release/php_imap.dll" /libpath:"..\..\Release" /libpath:"..\..\..\php_build\IMAP\C-Client"
-
-!ELSEIF "$(CFG)" == "imap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\IMAP\c-client" /I "..\..\TSRM" /D "_DEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4nts_debug.lib wsock32.lib winmm.lib cclient.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_imap.dll" /pdbtype:sept /libpath:"..\..\Debug" /libpath:"..\..\..\php_build\IMAP\C-Client"
-
-!ELSEIF "$(CFG)" == "imap - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "ZTS" /D "_DEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib wsock32.lib winmm.lib cclient.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_imap.dll" /pdbtype:sept /libpath:"..\..\..\\" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "imap - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "ZTS" /D "NDEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /D HAVE_IMAP2001=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib wsock32.lib winmm.lib cclient.lib Secur32.lib CertIdl.Lib /nologo /dll /machine:I386 /nodefaultlib:"LIBCMT" /out:"..\..\Release_TS/php_imap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "imap - Win32 Release"
-# Name "imap - Win32 Debug"
-# Name "imap - Win32 Debug_TS"
-# Name "imap - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\win32\imap_sendmail.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_imap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\sendmail.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\win32\imap_sendmail.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_imap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\sendmail.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\IMAP_Win32_HOWTO.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/imap/imap.h b/ext/imap/imap.h
deleted file mode 100644
index 914d128316..0000000000
--- a/ext/imap/imap.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _INCLUDED_IMAP_H
-#define _INCLUDED_IMAP_H
-
-#if COMPILE_DL
-#undef HAVE_IMAP
-#define HAVE_IMAP 1
-#endif
-
-#if HAVE_IMAP
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-/* Functions accessable to PHP */
-extern zend_module_entry imap_module_entry;
-#define imap_module_ptr &imap_module_entry
-
-extern PHP_MINIT_FUNCTION(imap);
-extern PHP_RINIT_FUNCTION(imap);
-extern PHP_RSHUTDOWN_FUNCTION(imap);
-PHP_MINFO_FUNCTION(imap);
-PHP_FUNCTION(imap_open);
-PHP_FUNCTION(imap_popen);
-PHP_FUNCTION(imap_reopen);
-PHP_FUNCTION(imap_num_msg);
-PHP_FUNCTION(imap_num_recent);
-PHP_FUNCTION(imap_headers);
-PHP_FUNCTION(imap_headerinfo);
-PHP_FUNCTION(imap_rfc822_parse_headers);
-PHP_FUNCTION(imap_body);
-PHP_FUNCTION(imap_fetchstructure);
-PHP_FUNCTION(imap_fetchbody);
-PHP_FUNCTION(imap_expunge);
-PHP_FUNCTION(imap_delete);
-PHP_FUNCTION(imap_undelete);
-PHP_FUNCTION(imap_check);
-PHP_FUNCTION(imap_close);
-PHP_FUNCTION(imap_mail_copy);
-PHP_FUNCTION(imap_mail_move);
-PHP_FUNCTION(imap_createmailbox);
-PHP_FUNCTION(imap_renamemailbox);
-PHP_FUNCTION(imap_deletemailbox);
-PHP_FUNCTION(imap_listmailbox);
-PHP_FUNCTION(imap_scanmailbox);
-PHP_FUNCTION(imap_subscribe);
-PHP_FUNCTION(imap_unsubscribe);
-PHP_FUNCTION(imap_append);
-PHP_FUNCTION(imap_ping);
-PHP_FUNCTION(imap_base64);
-PHP_FUNCTION(imap_qprint);
-PHP_FUNCTION(imap_8bit);
-PHP_FUNCTION(imap_binary);
-PHP_FUNCTION(imap_mailboxmsginfo);
-PHP_FUNCTION(imap_rfc822_write_address);
-PHP_FUNCTION(imap_rfc822_parse_adrlist);
-PHP_FUNCTION(imap_setflag_full);
-PHP_FUNCTION(imap_clearflag_full);
-PHP_FUNCTION(imap_sort);
-PHP_FUNCTION(imap_fetchheader);
-PHP_FUNCTION(imap_fetchtext);
-PHP_FUNCTION(imap_uid);
-PHP_FUNCTION(imap_msgno);
-PHP_FUNCTION(imap_list);
-PHP_FUNCTION(imap_list_full);
-PHP_FUNCTION(imap_listscan);
-PHP_FUNCTION(imap_lsub);
-PHP_FUNCTION(imap_lsub_full);
-PHP_FUNCTION(imap_create);
-PHP_FUNCTION(imap_rename);
-PHP_FUNCTION(imap_status);
-PHP_FUNCTION(imap_bodystruct);
-PHP_FUNCTION(imap_fetch_overview);
-PHP_FUNCTION(imap_mail_compose);
-PHP_FUNCTION(imap_alerts);
-PHP_FUNCTION(imap_errors);
-PHP_FUNCTION(imap_last_error);
-PHP_FUNCTION(imap_mail);
-PHP_FUNCTION(imap_search);
-PHP_FUNCTION(imap_utf8);
-PHP_FUNCTION(imap_utf7_decode);
-PHP_FUNCTION(imap_utf7_encode);
-PHP_FUNCTION(imap_mime_header_decode);
-#else
-#define imap_module_ptr NULL
-#endif /* HAVE_IMAP */
-
-#endif
-
-
-
-
-
-
-#define phpext_imap_ptr imap_module_ptr
-
-
-
-
-
-
-
-
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
deleted file mode 100644
index ce2311cd90..0000000000
--- a/ext/imap/php_imap.c
+++ /dev/null
@@ -1,4156 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rex Logan <veebert@dimensional.com> |
- | Mark Musone <musone@afterfive.com> |
- | Brian Wang <brian@vividnet.com> |
- | Kaj-Michael Lang <milang@tal.org> |
- | Antoni Pamies Olive <toni@readysoft.net> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Chuck Hagenbuch <chuck@horde.org> |
- | Andrew Skalski <askalski@chekinc.com> |
- | Hartmut Holzgraefe <hartmut@six.de> |
- | Jani Taskinen <sniper@iki.fi> |
- | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#define IMAP41
-
-#undef OP_RELOGIN
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-
-#ifdef ERROR
-#undef ERROR
-#endif
-#include "php_imap.h"
-
-#include <time.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-
-#ifdef PHP_WIN32
-#include "winsock.h"
-#include "win32/imap_sendmail.h"
-MAILSTREAM DEFAULTPROTO;
-#endif
-
-#define CRLF "\015\012"
-#define PHP_EXPUNGE 32768
-
-static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC);
-static void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC);
-static void _php_imap_parse_address(ADDRESS *addresslist, char *fulladdress, zval *paddress TSRMLS_DC);
-
-/* These function declarations are missing from the IMAP header files... */
-void rfc822_date(char *date);
-char *cpystr(const char *str);
-char *cpytxt(SIZEDTEXT *dst, char *text, unsigned long size);
-long utf8_mime2text(SIZEDTEXT *src, SIZEDTEXT *dst);
-unsigned long find_rightmost_bit(unsigned long *valptr);
-void fs_give(void **block);
-void *fs_get(size_t size);
-
-
-/* {{{ imap_functions[]
- */
-function_entry imap_functions[] = {
- PHP_FE(imap_open, NULL)
- PHP_FE(imap_popen, NULL)
- PHP_FE(imap_reopen, NULL)
- PHP_FE(imap_close, NULL)
- PHP_FE(imap_num_msg, NULL)
- PHP_FE(imap_num_recent, NULL)
- PHP_FE(imap_headers, NULL)
- PHP_FE(imap_headerinfo, NULL)
- PHP_FE(imap_rfc822_parse_headers, NULL)
- PHP_FE(imap_rfc822_write_address, NULL)
- PHP_FE(imap_rfc822_parse_adrlist, NULL)
- PHP_FE(imap_body, NULL)
- PHP_FE(imap_bodystruct, NULL)
- PHP_FE(imap_fetchbody, NULL)
- PHP_FE(imap_fetchheader, NULL)
- PHP_FE(imap_fetchstructure, NULL)
- PHP_FE(imap_expunge, NULL)
- PHP_FE(imap_delete, NULL)
- PHP_FE(imap_undelete, NULL)
- PHP_FE(imap_check, NULL)
- PHP_FE(imap_mail_copy, NULL)
- PHP_FE(imap_mail_move, NULL)
- PHP_FE(imap_mail_compose, NULL)
- PHP_FE(imap_createmailbox, NULL)
- PHP_FE(imap_renamemailbox, NULL)
- PHP_FE(imap_deletemailbox, NULL)
- PHP_FE(imap_subscribe, NULL)
- PHP_FE(imap_unsubscribe, NULL)
- PHP_FE(imap_append, NULL)
- PHP_FE(imap_ping, NULL)
- PHP_FE(imap_base64, NULL)
- PHP_FE(imap_qprint, NULL)
- PHP_FE(imap_8bit, NULL)
- PHP_FE(imap_binary, NULL)
- PHP_FE(imap_utf8, NULL)
- PHP_FE(imap_status, NULL)
- PHP_FE(imap_mailboxmsginfo, NULL)
- PHP_FE(imap_setflag_full, NULL)
- PHP_FE(imap_clearflag_full, NULL)
- PHP_FE(imap_sort, NULL)
- PHP_FE(imap_uid, NULL)
- PHP_FE(imap_msgno, NULL)
- PHP_FE(imap_list, NULL)
- PHP_FE(imap_lsub, NULL)
- PHP_FE(imap_fetch_overview, NULL)
- PHP_FE(imap_alerts, NULL)
- PHP_FE(imap_errors, NULL)
- PHP_FE(imap_last_error, NULL)
- PHP_FE(imap_search, NULL)
- PHP_FE(imap_utf7_decode, NULL)
- PHP_FE(imap_utf7_encode, NULL)
- PHP_FE(imap_mime_header_decode, NULL)
- PHP_FE(imap_thread, NULL)
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- PHP_FE(imap_get_quota, NULL)
- PHP_FE(imap_set_quota, NULL)
- PHP_FE(imap_setacl, NULL)
-#endif
-
- PHP_FE(imap_mail, NULL)
-
- PHP_FALIAS(imap_header, imap_headerinfo, NULL)
- PHP_FALIAS(imap_listmailbox, imap_list, NULL)
- PHP_FALIAS(imap_getmailboxes, imap_list_full, NULL)
- PHP_FALIAS(imap_scanmailbox, imap_listscan, NULL)
- PHP_FALIAS(imap_listsubscribed, imap_lsub, NULL)
- PHP_FALIAS(imap_getsubscribed, imap_lsub_full, NULL)
- PHP_FALIAS(imap_fetchtext, imap_body, NULL)
- PHP_FALIAS(imap_scan, imap_listscan, NULL)
- PHP_FALIAS(imap_create, imap_createmailbox, NULL)
- PHP_FALIAS(imap_rename, imap_renamemailbox, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ imap_module_entry
- */
-zend_module_entry imap_module_entry = {
- STANDARD_MODULE_HEADER,
- "imap",
- imap_functions,
- PHP_MINIT(imap),
- NULL,
- PHP_RINIT(imap),
- PHP_RSHUTDOWN(imap),
- PHP_MINFO(imap),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(imap)
-
-#ifdef COMPILE_DL_IMAP
-ZEND_GET_MODULE(imap)
-#endif
-
-/* True globals, no need for thread safety */
-static int le_imap;
-#ifdef OP_RELOGIN
-static int le_pimap;
-static int le_pimapchain;
-#endif
-
-/* {{{ mail_close_it
- */
-static void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pils *imap_le_struct = (pils *)rsrc->ptr;
-
- mail_close_full(imap_le_struct->imap_stream, imap_le_struct->flags);
-
- if (IMAPG(imap_user)) {
- efree(IMAPG(imap_user));
- IMAPG(imap_user) = 0;
- }
- if (IMAPG(imap_password)) {
- efree(IMAPG(imap_password));
- IMAPG(imap_password) = 0;
- }
-
- efree(imap_le_struct);
-}
-/* }}} */
-
-#ifdef OP_RELOGIN
-/* {{{ mail_userlogout_it
- */
-/* AJS: stream close functions for persistent connections */
-static void mail_userlogout_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pils *imap_le_struct = (pils *)rsrc->ptr;
-
- /* Close this user's session, putting the stream back
- * into AUTHENTICATE state. (Note that IMAP does not
- * support this behavior... yet)
- */
- imap_le_struct->busy = 0;
- mail_close_full(imap_le_struct->imap_stream, imap_le_struct->flags | CL_HALF);
-}
-/* }}} */
-
-/* {{{ mail_nuke_chain
- */
-static void mail_nuke_chain(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pils **headp = (pils **)rsrc->ptr;
- pils *node, *next;
-
- for (node = *headp; node; node = next) {
- next = node->next;
- mail_close(node->imap_stream);
- free(node);
- }
-
- free(headp);
-}
-/* }}} */
-#endif
-
-/* {{{ add_assoc_object
- */
-static int add_assoc_object(zval *arg, char *key, zval *tmp)
-{
- HashTable *symtable;
-
- if (Z_TYPE_P(arg) == IS_OBJECT) {
- symtable = Z_OBJPROP_P(arg);
- } else {
- symtable = Z_ARRVAL_P(arg);
- }
- return zend_hash_update(symtable, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ add_next_index_object
- */
-static inline int add_next_index_object(zval *arg, zval *tmp)
-{
- HashTable *symtable;
-
- if (Z_TYPE_P(arg) == IS_OBJECT) {
- symtable = Z_OBJPROP_P(arg);
- } else {
- symtable = Z_ARRVAL_P(arg);
- }
-
- return zend_hash_next_index_insert(symtable, (void *) &tmp, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ mail_newfolderobjectlist
- *
- * Mail instantiate FOBJECTLIST
- * Returns: new FOBJECTLIST list
- * Author: CJH
- */
-FOBJECTLIST *mail_newfolderobjectlist(void)
-{
- return (FOBJECTLIST *) memset(fs_get(sizeof(FOBJECTLIST)), 0, sizeof(FOBJECTLIST));
-}
-/* }}} */
-
-/* {{{ mail_free_foblist
- *
- * Mail garbage collect FOBJECTLIST
- * Accepts: pointer to FOBJECTLIST pointer
- * Author: CJH
- */
-void mail_free_foblist(FOBJECTLIST **foblist, FOBJECTLIST **tail)
-{
- FOBJECTLIST *cur, *next;
-
- for(cur=*foblist, next=cur->next; cur; cur=next) {
- next = cur->next;
-
- if(cur->text.data)
- fs_give((void **)&(cur->text.data));
-
- fs_give((void **)&cur);
- }
-
- *tail = NIL;
- *foblist = NIL;
-}
-/* }}} */
-
-/* {{{ mail_newerrorlist
- *
- * Mail instantiate ERRORLIST
- * Returns: new ERRORLIST list
- * Author: CJH
- */
-ERRORLIST *mail_newerrorlist(void)
-{
- return (ERRORLIST *) memset(fs_get(sizeof(ERRORLIST)), 0, sizeof(ERRORLIST));
-}
-/* }}} */
-
-/* {{{ mail_free_errorlist
- *
- * Mail garbage collect FOBJECTLIST
- * Accepts: pointer to FOBJECTLIST pointer
- * Author: CJH
- */
-void mail_free_errorlist(ERRORLIST **errlist)
-{
- if (*errlist) { /* only free if exists */
- if ((*errlist)->text.data) {
- fs_give((void **) &(*errlist)->text.data);
- }
- mail_free_errorlist (&(*errlist)->next);
- fs_give((void **) errlist); /* return string to free storage */
- }
-}
-/* }}} */
-
-/* {{{ mail_newmessagelist
- *
- * Mail instantiate MESSAGELIST
- * Returns: new MESSAGELIST list
- * Author: CJH
- */
-MESSAGELIST *mail_newmessagelist(void)
-{
- return (MESSAGELIST *) memset(fs_get(sizeof(MESSAGELIST)), 0, sizeof(MESSAGELIST));
-}
-/* }}} */
-
-/* {{{ mail_free_messagelist
- *
- * Mail garbage collect MESSAGELIST
- * Accepts: pointer to MESSAGELIST pointer
- * Author: CJH
- */
-void mail_free_messagelist(MESSAGELIST **msglist, MESSAGELIST **tail)
-{
- MESSAGELIST *cur, *next;
-
- for (cur = *msglist, next = cur->next; cur; cur = next) {
- next = cur->next;
- fs_give((void **)&cur);
- }
-
- *tail = NIL;
- *msglist = NIL;
-}
-/* }}} */
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
-/* {{{ mail_getquota
- *
- * Mail GET_QUOTA callback
- * Called via the mail_parameter function in c-client:src/c-client/mail.c
- * Author DRK
- */
-void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist)
-{
- TSRMLS_FETCH();
-
- /* this should only be run through once */
- for (; qlist; qlist = qlist->next)
- {
- IMAPG(quota_usage) = qlist->usage;
- IMAPG(quota_limit) = qlist->limit;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ php_imap_init_globals
- */
-static void php_imap_init_globals(zend_imap_globals *imap_globals)
-{
- imap_globals->imap_user = NIL;
- imap_globals->imap_password = NIL;
-
- imap_globals->imap_alertstack = NIL;
- imap_globals->imap_errorstack = NIL;
-
- imap_globals->imap_folders = NIL;
- imap_globals->imap_folders_tail = NIL;
- imap_globals->imap_sfolders = NIL;
- imap_globals->imap_sfolders_tail = NIL;
- imap_globals->imap_messages = NIL;
- imap_globals->imap_messages_tail = NIL;
- imap_globals->imap_folder_objects = NIL;
- imap_globals->imap_folder_objects_tail = NIL;
- imap_globals->imap_sfolder_objects = NIL;
- imap_globals->imap_sfolder_objects_tail = NIL;
-
- imap_globals->folderlist_style = FLIST_ARRAY;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(imap)
-{
- unsigned long sa_all = SA_MESSAGES | SA_RECENT | SA_UNSEEN | SA_UIDNEXT | SA_UIDVALIDITY;
-
- ZEND_INIT_MODULE_GLOBALS(imap, php_imap_init_globals, NULL)
-
-#ifndef PHP_WIN32
- mail_link(&unixdriver); /* link in the unix driver */
- mail_link(&mhdriver); /* link in the mh driver */
- /* mail_link(&mxdriver); */ /* According to c-client docs (internal.txt) this shouldn't be used. */
- mail_link(&mmdfdriver); /* link in the mmdf driver */
- mail_link(&newsdriver); /* link in the news driver */
- mail_link(&philedriver); /* link in the phile driver */
-#endif
- mail_link(&imapdriver); /* link in the imap driver */
- mail_link(&nntpdriver); /* link in the nntp driver */
- mail_link(&pop3driver); /* link in the pop3 driver */
- mail_link(&mbxdriver); /* link in the mbx driver */
- mail_link(&tenexdriver); /* link in the tenex driver */
- mail_link(&mtxdriver); /* link in the mtx driver */
- mail_link(&dummydriver); /* link in the dummy driver */
-
-#ifndef PHP_WIN32
- auth_link(&auth_log); /* link in the log authenticator */
- auth_link(&auth_md5); /* link in the cram-md5 authenticator */
-#ifdef HAVE_IMAP_SSL
- ssl_onceonlyinit ();
-#endif
-#endif
-
- /* lets allow NIL */
- REGISTER_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);
-
-
- /* Open Options */
-
- REGISTER_LONG_CONSTANT("OP_DEBUG", OP_DEBUG, CONST_PERSISTENT | CONST_CS);
- /* debug protocol negotiations */
- REGISTER_LONG_CONSTANT("OP_READONLY", OP_READONLY, CONST_PERSISTENT | CONST_CS);
- /* read-only open */
- REGISTER_LONG_CONSTANT("OP_ANONYMOUS", OP_ANONYMOUS, CONST_PERSISTENT | CONST_CS);
- /* anonymous open of newsgroup */
- REGISTER_LONG_CONSTANT("OP_SHORTCACHE", OP_SHORTCACHE, CONST_PERSISTENT | CONST_CS);
- /* short (elt-only) caching */
- REGISTER_LONG_CONSTANT("OP_SILENT", OP_SILENT, CONST_PERSISTENT | CONST_CS);
- /* don't pass up events (internal use) */
- REGISTER_LONG_CONSTANT("OP_PROTOTYPE", OP_PROTOTYPE, CONST_PERSISTENT | CONST_CS);
- /* return driver prototype */
- REGISTER_LONG_CONSTANT("OP_HALFOPEN", OP_HALFOPEN, CONST_PERSISTENT | CONST_CS);
- /* half-open (IMAP connect but no select) */
- REGISTER_LONG_CONSTANT("OP_EXPUNGE", OP_EXPUNGE, CONST_PERSISTENT | CONST_CS);
- /* silently expunge recycle stream */
- REGISTER_LONG_CONSTANT("OP_SECURE", OP_SECURE, CONST_PERSISTENT | CONST_CS);
- /* don't do non-secure authentication */
-
- /*
- PHP re-assigns CL_EXPUNGE a custom value that can be used as part of the imap_open() bitfield
- because it seems like a good idea to be able to indicate that the mailbox should be
- automatically expunged during imap_open in case the script get interrupted and it doesn't get
- to the imap_close() where this option is normally placed. If the c-client library adds other
- options and the value for this one conflicts, simply make PHP_EXPUNGE higher at the top of
- this file
- */
- REGISTER_LONG_CONSTANT("CL_EXPUNGE", PHP_EXPUNGE, CONST_PERSISTENT | CONST_CS);
- /* expunge silently */
-
-
- /* Fetch options */
-
- REGISTER_LONG_CONSTANT("FT_UID", FT_UID, CONST_PERSISTENT | CONST_CS);
- /* argument is a UID */
- REGISTER_LONG_CONSTANT("FT_PEEK", FT_PEEK, CONST_PERSISTENT | CONST_CS);
- /* peek at data */
- REGISTER_LONG_CONSTANT("FT_NOT", FT_NOT, CONST_PERSISTENT | CONST_CS);
- /* NOT flag for header lines fetch */
- REGISTER_LONG_CONSTANT("FT_INTERNAL", FT_INTERNAL, CONST_PERSISTENT | CONST_CS);
- /* text can be internal strings */
- REGISTER_LONG_CONSTANT("FT_PREFETCHTEXT", FT_PREFETCHTEXT, CONST_PERSISTENT | CONST_CS);
- /* IMAP prefetch text when fetching header */
-
-
- /* Flagging options */
-
- REGISTER_LONG_CONSTANT("ST_UID", ST_UID, CONST_PERSISTENT | CONST_CS);
- /* argument is a UID sequence */
- REGISTER_LONG_CONSTANT("ST_SILENT", ST_SILENT, CONST_PERSISTENT | CONST_CS);
- /* don't return results */
- REGISTER_LONG_CONSTANT("ST_SET", ST_SET, CONST_PERSISTENT | CONST_CS);
- /* set vs. clear */
-
-
- /* Copy options */
-
- REGISTER_LONG_CONSTANT("CP_UID", CP_UID, CONST_PERSISTENT | CONST_CS);
- /* argument is a UID sequence */
- REGISTER_LONG_CONSTANT("CP_MOVE", CP_MOVE, CONST_PERSISTENT | CONST_CS);
- /* delete from source after copying */
-
-
- /* Search/sort options */
-
- REGISTER_LONG_CONSTANT("SE_UID", SE_UID, CONST_PERSISTENT | CONST_CS);
- /* return UID */
- REGISTER_LONG_CONSTANT("SE_FREE", SE_FREE, CONST_PERSISTENT | CONST_CS);
- /* free search program after finished */
- REGISTER_LONG_CONSTANT("SE_NOPREFETCH", SE_NOPREFETCH, CONST_PERSISTENT | CONST_CS);
- /* no search prefetching */
- REGISTER_LONG_CONSTANT("SO_FREE", SO_FREE, CONST_PERSISTENT | CONST_CS);
- /* free sort program after finished */
- REGISTER_LONG_CONSTANT("SO_NOSERVER", SO_NOSERVER, CONST_PERSISTENT | CONST_CS);
- /* don't do server-based sort */
-
-
- /* Status options */
-
- REGISTER_LONG_CONSTANT("SA_MESSAGES", SA_MESSAGES , CONST_PERSISTENT | CONST_CS);
- /* number of messages */
- REGISTER_LONG_CONSTANT("SA_RECENT", SA_RECENT, CONST_PERSISTENT | CONST_CS);
- /* number of recent messages */
- REGISTER_LONG_CONSTANT("SA_UNSEEN", SA_UNSEEN , CONST_PERSISTENT | CONST_CS);
- /* number of unseen messages */
- REGISTER_LONG_CONSTANT("SA_UIDNEXT", SA_UIDNEXT, CONST_PERSISTENT | CONST_CS);
- /* next UID to be assigned */
- REGISTER_LONG_CONSTANT("SA_UIDVALIDITY", SA_UIDVALIDITY , CONST_PERSISTENT | CONST_CS);
- /* UID validity value */
- REGISTER_LONG_CONSTANT("SA_ALL", sa_all, CONST_PERSISTENT | CONST_CS);
- /* get all status information */
-
-
- /* Bits for mm_list() and mm_lsub() */
-
- REGISTER_LONG_CONSTANT("LATT_NOINFERIORS", LATT_NOINFERIORS , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LATT_NOSELECT", LATT_NOSELECT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LATT_MARKED", LATT_MARKED, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LATT_UNMARKED", LATT_UNMARKED , CONST_PERSISTENT | CONST_CS);
-
-
- /* Sort functions */
-
- REGISTER_LONG_CONSTANT("SORTDATE", SORTDATE , CONST_PERSISTENT | CONST_CS);
- /* date */
- REGISTER_LONG_CONSTANT("SORTARRIVAL", SORTARRIVAL , CONST_PERSISTENT | CONST_CS);
- /* arrival date */
- REGISTER_LONG_CONSTANT("SORTFROM", SORTFROM , CONST_PERSISTENT | CONST_CS);
- /* from */
- REGISTER_LONG_CONSTANT("SORTSUBJECT", SORTSUBJECT , CONST_PERSISTENT | CONST_CS);
- /* subject */
- REGISTER_LONG_CONSTANT("SORTTO", SORTTO , CONST_PERSISTENT | CONST_CS);
- /* to */
- REGISTER_LONG_CONSTANT("SORTCC", SORTCC , CONST_PERSISTENT | CONST_CS);
- /* cc */
- REGISTER_LONG_CONSTANT("SORTSIZE", SORTSIZE , CONST_PERSISTENT | CONST_CS);
- /* size */
-
- REGISTER_LONG_CONSTANT("TYPETEXT", TYPETEXT , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEMULTIPART", TYPEMULTIPART , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEMESSAGE", TYPEMESSAGE , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEAPPLICATION", TYPEAPPLICATION , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEAUDIO", TYPEAUDIO , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEIMAGE", TYPEIMAGE , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEVIDEO", TYPEVIDEO , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEOTHER", TYPEOTHER , CONST_PERSISTENT | CONST_CS);
- /*
- TYPETEXT unformatted text
- TYPEMULTIPART multiple part
- TYPEMESSAGE encapsulated message
- TYPEAPPLICATION application data
- TYPEAUDIO audio
- TYPEIMAGE static image (GIF, JPEG, etc.)
- TYPEVIDEO video
- TYPEOTHER unknown
- */
-
- REGISTER_LONG_CONSTANT("ENC7BIT", ENC7BIT , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENC8BIT", ENC8BIT , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCBINARY", ENCBINARY , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCBASE64", ENCBASE64, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCQUOTEDPRINTABLE", ENCQUOTEDPRINTABLE , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCOTHER", ENCOTHER , CONST_PERSISTENT | CONST_CS);
- /*
- ENC7BIT 7 bit SMTP semantic data
- ENC8BIT 8 bit SMTP semantic data
- ENCBINARY 8 bit binary data
- ENCBASE64 base-64 encoded data
- ENCQUOTEDPRINTABLE human-readable 8-as-7 bit data
- ENCOTHER unknown
- */
-
- le_imap = zend_register_list_destructors_ex(mail_close_it, NULL, "imap", module_number);
-
-#ifdef OP_RELOGIN
- /* AJS: destructors for persistent connections */
- le_pimap = zend_register_list_destructors_ex(mail_userlogout_it, NULL, "imap persistent", module_number);
- le_pimapchain = zend_register_list_destructors_ex(NULL, mail_nuke_chain, "imap chain persistent", module_number);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(imap)
-{
- IMAPG(imap_errorstack) = NIL;
- IMAPG(imap_alertstack) = NIL;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(imap)
-{
- ERRORLIST *ecur = NIL;
- STRINGLIST *acur = NIL;
-
- if (IMAPG(imap_errorstack) != NIL) {
- /* output any remaining errors at their original error level */
- ecur = IMAPG(imap_errorstack);
- while (ecur != NIL) {
- php_error(E_NOTICE, "%s (errflg=%d)", ecur->LTEXT, ecur->errflg);
- ecur = ecur->next;
- }
- mail_free_errorlist(&IMAPG(imap_errorstack));
- }
-
- if (IMAPG(imap_alertstack) != NIL) {
- /* output any remaining alerts at E_NOTICE level */
- acur = IMAPG(imap_alertstack);
- while (acur != NIL) {
- php_error(E_NOTICE, acur->LTEXT);
- acur = acur->next;
- }
- mail_free_stringlist(&IMAPG(imap_alertstack));
- IMAPG(imap_alertstack) = NIL;
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(imap)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "IMAP Support", "enabled" );
-#if HAVE_IMAP2001
- php_info_print_table_row(2, "IMAP c-Client Version", "2001");
-#elif HAVE_IMAP2000
- php_info_print_table_row(2, "IMAP c-Client Version", "2000");
-#elif defined(IMAP41)
- php_info_print_table_row(2, "IMAP c-Client Version", "4.1");
-#else
- php_info_print_table_row(2, "IMAP c-Client Version", "4.0");
-#endif
-#if HAVE_IMAP_SSL
- php_info_print_table_row(2, "SSL Support", "enabled");
-#endif
-#if HAVE_IMAP_KRB
- php_info_print_table_row(2, "Kerberos Support", "enabled");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ imap_do_open
- */
-static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval **mailbox, **user, **passwd, **options;
- MAILSTREAM *imap_stream;
- pils *imap_le_struct;
- long flags=NIL;
- long cl_flags=NIL;
-#ifdef OP_RELOGIN
- NETMBX netmbx;
- char *hashed_details = NULL;
- int hashed_details_length = 0;
-#endif
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &mailbox, &user, &passwd, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(mailbox);
- convert_to_string_ex(user);
- convert_to_string_ex(passwd);
- if (myargc ==4) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- if (flags & PHP_EXPUNGE) {
- cl_flags = CL_EXPUNGE;
- flags ^= PHP_EXPUNGE;
- }
- }
-
- if (IMAPG(imap_user)) {
- efree(IMAPG(imap_user));
- }
-
- if (IMAPG(imap_password)) {
- efree(IMAPG(imap_password));
- }
-
- IMAPG(imap_user) = estrndup(Z_STRVAL_PP(user), Z_STRLEN_PP(user));
- IMAPG(imap_password) = estrndup(Z_STRVAL_PP(passwd), Z_STRLEN_PP(passwd));
-
-#ifdef OP_RELOGIN
- /* AJS: persistent connection handling */
- /* Cannot use a persistent connection if we cannot parse
- * out the server's hostname.
- */
- if (persistent && !mail_valid_net_parse(Z_STRVAL_PP(mailbox), &netmbx)) {
- persistent = 0;
- }
-
- imap_stream = NIL;
- if (persistent) {
- list_entry *le = NULL;
- list_entry new_le;
- pils **headp, *node;
- int need_update = 0;
-
- hashed_details_length = sizeof("imap_") + strlen(netmbx.host);
- hashed_details = (char*) emalloc(hashed_details_length);
- sprintf(hashed_details, "imap_%s", netmbx.host);
-
- /* Check for an existing connection. */
- if ((zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length, (void*) &le) == FAILURE)
- || (Z_TYPE_P(le) != le_pimapchain)
- ) {
- le = NULL;
- }
-
- /* Re-use existing connection if available. */
- node = NULL;
- headp = NULL;
- if (le) {
- headp = (pils**) le->ptr;
-
- /* find a non-busy connection */
- for (node=*headp; node; node=node->next)
- if (!node->busy)
- break;
- }
-
- /* If we found a node, do a relogin. */
- if (node) {
- imap_stream = mail_open(node->imap_stream, Z_STRVAL_PP(mailbox), flags | OP_RELOGIN);
- if (imap_stream) {
- /* Ping the stream to see if it is
- * still good.
- */
- if (!mail_ping(imap_stream)) {
- mail_close(imap_stream);
- imap_stream = NIL;
- }
- }
- }
-
- /* Get a fresh stream if we don't have one yet. */
- if (imap_stream == NIL) {
- /* Open a new connection. */
- imap_stream = mail_open(NIL, Z_STRVAL_PP(mailbox), flags | OP_RELOGIN);
- }
-
- /* Do we have a stream yet? If not, bail. */
- if (imap_stream == NIL) {
- if (node) {
- /* unlink the node */
- if ((*node->prev = node->next))
- node->next->prev = node->prev;
- free(node);
- /* delete the hash entry if empty */
- if (*headp == NULL) {
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length);
- }
- }
- efree(hashed_details);
- efree(IMAPG(imap_user)); IMAPG(imap_user) = 0;
- efree(IMAPG(imap_password)); IMAPG(imap_password) = 0;
- RETURN_FALSE;
- }
-
- /* Allocate a new node if none. */
- if (node == NULL) {
- /* Alloc new hash entry. */
- node = malloc(sizeof(pils));
- if (node == NULL) {
- efree(hashed_details);
- efree(IMAPG(imap_user)); IMAPG(imap_user) = 0;
- efree(IMAPG(imap_password)); IMAPG(imap_password) = 0;
- RETURN_FALSE;
- }
-
- /* Allocate headp if it does not exist. */
- if (headp == NULL) {
- headp = calloc(1, sizeof(*headp));
- need_update = 1;
- }
-
- node->prev = headp;
- node->next = *headp;
- *headp = node;
- }
-
-
- /* Initialize the node. */
- node->busy = 1;
- node->imap_stream = imap_stream;
- node->flags = cl_flags;
-
- /* Update the hash. */
- Z_TYPE(new_le) = le_pimapchain;
- new_le.ptr = headp;
- if (need_update &&
- zend_hash_update(&EG(persistent_list), hashed_details,
- hashed_details_length, &new_le,
- sizeof(new_le), NULL) == FAILURE) {
- /* unlink and free the new node */
- if ((*node->prev = node->next)) {
- node->next->prev = node->prev;
- }
- mail_close(node->imap_stream);
- free(node);
-
- free(headp);
- efree(hashed_details);
- efree(IMAPG(imap_user)); IMAPG(imap_user) = 0;
- efree(IMAPG(imap_password)); IMAPG(imap_password) = 0;
- RETURN_FALSE;
- }
-
- efree(hashed_details);
- imap_le_struct = node;
-
- } else {
-#endif
- imap_stream = mail_open(NIL, Z_STRVAL_PP(mailbox), flags);
-
- if (imap_stream == NIL) {
- php_error(E_WARNING, "Couldn't open stream %s\n", Z_STRVAL_PP(mailbox));
- efree(IMAPG(imap_user)); IMAPG(imap_user) = 0;
- efree(IMAPG(imap_password)); IMAPG(imap_password) = 0;
- RETURN_FALSE;
- }
-
- imap_le_struct = emalloc(sizeof(pils));
- imap_le_struct->imap_stream = imap_stream;
- imap_le_struct->flags = cl_flags;
-#ifdef OP_RELOGIN
- }
-
- if (persistent) {
- ZEND_REGISTER_RESOURCE(return_value, imap_le_struct, le_pimap);
- }
- else
-#endif
- {
- ZEND_REGISTER_RESOURCE(return_value, imap_le_struct, le_imap);
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_open(string mailbox, string user, string password [, int options])
- Open an IMAP stream to a mailbox */
-PHP_FUNCTION(imap_open)
-{
- php_imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int imap_popen(string mailbox, string user, string password [, int options])
- Open a persistant IMAP stream to a mailbox */
-PHP_FUNCTION(imap_popen)
-{
-#ifdef OP_RELOGIN
- php_imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
- RETURN_TRUE;
-#else
- php_error(E_WARNING, "Persistent IMAP connections are not yet supported.\n");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imap_reopen(int stream_id, string mailbox [, int options])
- Reopen an IMAP stream to a new mailbox */
-PHP_FUNCTION(imap_reopen)
-{
- zval **streamind, **mailbox, **options;
- pils *imap_le_struct;
- MAILSTREAM *imap_stream;
- long flags=NIL;
- long cl_flags=NIL;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &mailbox, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mailbox);
-
- if (myargc == 3) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- if (flags & PHP_EXPUNGE) {
- cl_flags = CL_EXPUNGE;
- flags ^= PHP_EXPUNGE;
- }
- imap_le_struct->flags = cl_flags;
- }
- imap_stream = mail_open(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox), flags);
- if (imap_stream == NIL) {
- php_error(E_WARNING, "Couldn't re-open stream\n");
- RETURN_FALSE;
- }
- imap_le_struct->imap_stream = imap_stream;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imap_append(int stream_id, string folder, string message [, string flags])
- Append a new message to a specified mailbox */
-PHP_FUNCTION(imap_append)
-{
- zval **streamind, **folder, **message, **flags;
- pils *imap_le_struct;
- STRING st;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &folder, &message, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
- convert_to_string_ex(message);
-
- if (myargc == 4) {
- convert_to_string_ex(flags);
- }
-
- INIT (&st, mail_string, (void *) Z_STRVAL_PP(message), Z_STRLEN_PP(message));
-
- if (mail_append_full(imap_le_struct->imap_stream, Z_STRVAL_PP(folder), myargc==4 ? Z_STRVAL_PP(flags) : NIL, NIL, &st)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_num_msg(int stream_id)
- Gives the number of messages in the current mailbox */
-PHP_FUNCTION(imap_num_msg)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- RETURN_LONG(imap_le_struct->imap_stream->nmsgs);
-}
-/* }}} */
-
-/* {{{ proto int imap_ping(int stream_id)
- Check if the IMAP stream is still active */
-PHP_FUNCTION(imap_ping)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- RETURN_LONG(mail_ping(imap_le_struct->imap_stream));
-}
-/* }}} */
-
-/* {{{ proto int imap_num_recent(int stream_id)
- Gives the number of recent messages in current mailbox */
-PHP_FUNCTION(imap_num_recent)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- RETURN_LONG(imap_le_struct->imap_stream->recent);
-}
-/* }}} */
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
-/* {{{ proto array imap_get_quota(int stream_id, string qroot)
- Returns the quota set to the mailbox account qroot */
-PHP_FUNCTION(imap_get_quota)
-{
- zval **streamind, **qroot;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &qroot) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(qroot);
-
- /* set the callback for the GET_QUOTA function */
- mail_parameters(NIL, SET_QUOTA, (void *) mail_getquota);
- if(!imap_getquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot))) {
- php_error(E_WARNING, "c-client imap_getquota failed");
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Unable to allocate array memory");
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "usage", IMAPG(quota_usage));
- add_assoc_long(return_value, "limit", IMAPG(quota_limit));
-}
-/* }}} */
-
-/* {{{ proto int imap_set_quota(int stream_id, string qroot, int mailbox_size)
- Will set the quota for qroot mailbox */
-PHP_FUNCTION(imap_set_quota)
-{
- zval **streamind, **qroot, **mailbox_size;
- pils *imap_le_struct;
- STRINGLIST limits;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &qroot, &mailbox_size) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(qroot);
- convert_to_long_ex(mailbox_size);
-
- limits.text.data = "STORAGE";
- limits.text.size = Z_LVAL_PP(mailbox_size);
- limits.next = NIL;
-
- RETURN_LONG(imap_setquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot), &limits));
-}
-/* }}} */
-
-
-/* {{{ proto int imap_setacl(int stream_id, string mailbox, string id, string rights)
- Sets the ACL for a giving mailbox */
-PHP_FUNCTION(imap_setacl)
-{
- zval **streamind, **mailbox, **id, **rights;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &streamind, &mailbox, &id, &rights) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mailbox);
- convert_to_string_ex(rights);
-
- RETURN_LONG(imap_setacl(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox), Z_STRVAL_PP(id), Z_STRVAL_PP(rights)));
-}
-/* }}} */
-
-#endif /* HAVE_IMAP2000 || HAVE_IMAP2001 */
-
-
-/* {{{ proto int imap_expunge(int stream_id)
- Permanently delete all messages marked for deletion */
-PHP_FUNCTION(imap_expunge)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- mail_expunge (imap_le_struct->imap_stream);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imap_close(int stream_id [, int options])
- Close an IMAP stream */
-PHP_FUNCTION(imap_close)
-{
- zval **options, **streamind=NULL;
- pils *imap_le_struct=NULL;
- long flags = NIL;
- int myargcount=ZEND_NUM_ARGS();
-
- if (myargcount < 1 || myargcount > 2 || zend_get_parameters_ex(myargcount, &streamind, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- if (myargcount == 2) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- /* Do the translation from PHP's internal PHP_EXPUNGE define to c-client's CL_EXPUNGE */
- if (flags & PHP_EXPUNGE) {
- flags ^= PHP_EXPUNGE;
- flags |= CL_EXPUNGE;
- }
- imap_le_struct->flags = flags;
- }
-
- zend_list_delete(Z_RESVAL_PP(streamind));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array imap_headers(int stream_id)
- Returns headers for all messages in a mailbox */
-PHP_FUNCTION(imap_headers)
-{
- zval **streamind;
- pils *imap_le_struct;
- unsigned long i;
- char *t;
- unsigned int msgno;
- char tmp[MAILTMPLEN];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- /* Initialize return array */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- for (msgno = 1; msgno <= imap_le_struct->imap_stream->nmsgs; msgno++) {
- MESSAGECACHE * cache = mail_elt (imap_le_struct->imap_stream, msgno);
- mail_fetchstructure(imap_le_struct->imap_stream, msgno, NIL);
- tmp[0] = cache->recent ? (cache->seen ? 'R': 'N') : ' ';
- tmp[1] = (cache->recent | cache->seen) ? ' ' : 'U';
- tmp[2] = cache->flagged ? 'F' : ' ';
- tmp[3] = cache->answered ? 'A' : ' ';
- tmp[4] = cache->deleted ? 'D' : ' ';
- tmp[5] = cache->draft ? 'X' : ' ';
- sprintf(tmp + 6, "%4ld) ", cache->msgno);
- mail_date(tmp+11, cache);
- tmp[22] = ' ';
- tmp[23] = '\0';
- mail_fetchfrom(tmp+23, imap_le_struct->imap_stream, msgno, (long)20);
- strcat(tmp, " ");
- if ((i = cache->user_flags)) {
- strcat(tmp, "{");
- while (i) {
- strcat(tmp, imap_le_struct->imap_stream->user_flags[find_rightmost_bit (&i)]);
- if (i) strcat(tmp, " ");
- }
- strcat(tmp, "} ");
- }
- mail_fetchsubject(t = tmp + strlen(tmp), imap_le_struct->imap_stream, msgno, (long)25);
- sprintf(t += strlen(t), " (%ld chars)", cache->rfc822_size);
- add_next_index_string(return_value, tmp, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string imap_body(int stream_id, int msg_no [, int options])
- Read the message body */
-PHP_FUNCTION(imap_body)
-{
- zval **streamind, **msgno, **flags;
- pils *imap_le_struct;
- int msgindex, myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
- if (myargc == 3) {
- convert_to_long_ex(flags);
- }
-
- if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
- /* This should be cached; if it causes an extra RTT to the
- IMAP server, then that's the price we pay for making
- sure we don't crash. */
- msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- msgindex = Z_LVAL_PP(msgno);
- }
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
- php_error(E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(flags) : NIL), 1);
-}
-/* }}} */
-
-/* {{{ proto int imap_mail_copy(int stream_id, int msg_no, string mailbox [, int options])
- Copy specified message to a mailbox */
-PHP_FUNCTION(imap_mail_copy)
-{
- zval **streamind, **seq, **folder, **options;
- pils *imap_le_struct;
- int myargcount = ZEND_NUM_ARGS();
-
- if (myargcount > 4 || myargcount < 3 || zend_get_parameters_ex(myargcount, &streamind, &seq, &folder, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(seq);
- convert_to_string_ex(folder);
- if (myargcount == 4) {
- convert_to_long_ex(options);
- }
-
- if (mail_copy_full(imap_le_struct->imap_stream, Z_STRVAL_PP(seq), Z_STRVAL_PP(folder), myargcount==4 ? Z_LVAL_PP(options) : NIL)==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_mail_move(int stream_id, int msg_no, string mailbox [, int options])
- Move specified message to a mailbox */
-PHP_FUNCTION(imap_mail_move)
-{
- zval **streamind, **seq, **folder, **options;
- pils *imap_le_struct;
- int myargcount = ZEND_NUM_ARGS();
-
- if (myargcount > 4 || myargcount < 3 || zend_get_parameters_ex(myargcount, &streamind, &seq, &folder, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(seq);
- convert_to_string_ex(folder);
- if (myargcount == 4) {
- convert_to_long_ex(options);
- }
-
- if (mail_copy_full(imap_le_struct->imap_stream, Z_STRVAL_PP(seq), Z_STRVAL_PP(folder), myargcount == 4 ? (Z_LVAL_PP(options) | CP_MOVE) : CP_MOVE) == T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_createmailbox(int stream_id, string mailbox)
- Create a new mailbox */
-PHP_FUNCTION(imap_createmailbox)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_create(imap_le_struct->imap_stream, Z_STRVAL_PP(folder)) == T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_renamemailbox(int stream_id, string old_name, string new_name)
- Rename a mailbox */
-PHP_FUNCTION(imap_renamemailbox)
-{
- zval **streamind, **old_mailbox, **new_mailbox;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &old_mailbox, &new_mailbox) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(old_mailbox);
- convert_to_string_ex(new_mailbox);
-
- if (mail_rename(imap_le_struct->imap_stream, Z_STRVAL_PP(old_mailbox), Z_STRVAL_PP(new_mailbox))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_deletemailbox(int stream_id, string mailbox)
- Delete a mailbox */
-PHP_FUNCTION(imap_deletemailbox)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_delete(imap_le_struct->imap_stream, Z_STRVAL_PP(folder))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_list(int stream_id, string ref, string pattern)
- Read the list of mailboxes */
-PHP_FUNCTION(imap_list)
-{
- zval **streamind, **ref, **pat;
- pils *imap_le_struct;
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for normal, old mailbox list */
- IMAPG(folderlist_style) = FLIST_ARRAY;
-
- IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
- mail_list(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_folders) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_folders);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
- mail_free_stringlist (&IMAPG(imap_folders));
- IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
-}
-
-/* }}} */
-
-/* {{{ proto array imap_getmailboxes(int stream_id, string ref, string pattern)
- Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter */
-/* Author: CJH */
-PHP_FUNCTION(imap_list_full)
-{
- zval **streamind, **ref, **pat, *mboxob;
- pils *imap_le_struct;
- FOBJECTLIST *cur=NIL;
- char *delim=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for new, improved array of objects mailbox list */
- IMAPG(folderlist_style) = FLIST_OBJECT;
-
- IMAPG(imap_folder_objects) = IMAPG(imap_folder_objects_tail) = NIL;
- mail_list(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_folder_objects) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- delim = emalloc(2 * sizeof(char));
- cur=IMAPG(imap_folder_objects);
- while (cur != NIL) {
- MAKE_STD_ZVAL(mboxob);
- object_init(mboxob);
- add_property_string(mboxob, "name", cur->LTEXT, 1);
- add_property_long(mboxob, "attributes", cur->attributes);
-#ifdef IMAP41
- delim[0] = (char)cur->delimiter;
- delim[1] = 0;
- add_property_string(mboxob, "delimiter", delim, 1);
-#else
- add_property_string(mboxob, "delimiter", cur->delimiter, 1);
-#endif
- add_next_index_object(return_value, mboxob);
- cur=cur->next;
- }
- mail_free_foblist(&IMAPG(imap_folder_objects), &IMAPG(imap_folder_objects_tail));
- efree(delim);
- IMAPG(folderlist_style) = FLIST_ARRAY; /* reset to default */
-}
-/* }}} */
-
-/* {{{ proto array imap_scan(int stream_id, string ref, string pattern, string content)
- Read list of mailboxes containing a certain string */
-PHP_FUNCTION(imap_listscan)
-{
- zval **streamind, **ref, **pat, **content;
- pils *imap_le_struct;
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &streamind, &ref, &pat, &content) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
- convert_to_string_ex(content);
-
- IMAPG(imap_folders) = NIL;
- mail_scan(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat), Z_STRVAL_PP(content));
- if (IMAPG(imap_folders) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_folders);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
- mail_free_stringlist (&IMAPG(imap_folders));
- IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
-}
-
-/* }}} */
-
-/* {{{ proto object imap_check(int stream_id)
- Get mailbox properties */
-PHP_FUNCTION(imap_check)
-{
- zval **streamind;
- pils *imap_le_struct;
- char date[100];
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- if (mail_ping (imap_le_struct->imap_stream) == NIL) {
- RETURN_FALSE;
- }
-
- if (imap_le_struct->imap_stream && imap_le_struct->imap_stream->mailbox) {
- rfc822_date(date);
- object_init(return_value);
- add_property_string(return_value, "Date", date, 1);
- add_property_string(return_value, "Driver", imap_le_struct->imap_stream->dtb->name, 1);
- add_property_string(return_value, "Mailbox", imap_le_struct->imap_stream->mailbox, 1);
- add_property_long(return_value, "Nmsgs", imap_le_struct->imap_stream->nmsgs);
- add_property_long(return_value, "Recent", imap_le_struct->imap_stream->recent);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_delete(int stream_id, int msg_no [, int flags])
- Mark a message for deletion */
-PHP_FUNCTION(imap_delete)
-{
- zval **streamind, **sequence, **flags;
- pils *imap_le_struct;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- if (myargc == 3) {
- convert_to_long_ex(flags);
- }
-
- mail_setflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), "\\DELETED", myargc==3 ? Z_LVAL_PP(flags) : NIL);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imap_undelete(int stream_id, int msg_no)
- Remove the delete flag from a message */
-PHP_FUNCTION(imap_undelete)
-{
- zval **streamind, **sequence, **flags;
- pils *imap_le_struct;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- if (myargc == 3) {
- convert_to_long_ex(flags);
- }
-
- mail_clearflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), "\\DELETED", myargc==3 ? Z_LVAL_PP(flags) : NIL);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object imap_headerinfo(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])
- Read the headers of the message */
-PHP_FUNCTION(imap_headerinfo)
-{
- zval **streamind, **msgno, **fromlength, **subjectlength, **defaulthost;
- pils *imap_le_struct;
- MESSAGECACHE *cache;
- ENVELOPE *en;
- char dummy[2000], fulladdress[MAILTMPLEN];
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &msgno, &fromlength, &subjectlength, &defaulthost) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
- if (myargc >= 3) {
- convert_to_long_ex(fromlength);
- } else {
- fromlength = 0x00;
- }
- if (myargc >= 4) {
- convert_to_long_ex(subjectlength);
- } else {
- subjectlength = 0x00;
- }
- if (myargc == 5) {
- convert_to_string_ex(defaulthost);
- }
-
- if (!Z_LVAL_PP(msgno) || Z_LVAL_PP(msgno) < 1 || (unsigned) Z_LVAL_PP(msgno) > imap_le_struct->imap_stream->nmsgs) {
- php_error(E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- if (mail_fetchstructure(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL)) {
- cache = mail_elt(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- RETURN_FALSE;
- }
-
- en = mail_fetchenvelope(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
-
- /* call a function to parse all the text, so that we can use the
- same function to parse text from other sources */
- _php_make_header_object(return_value, en TSRMLS_CC);
-
- /* now run through properties that are only going to be returned
- from a server, not text headers */
- add_property_string(return_value, "Recent", cache->recent ? (cache->seen ? "R": "N") : " ", 1);
- add_property_string(return_value, "Unseen", (cache->recent | cache->seen) ? " " : "U", 1);
- add_property_string(return_value, "Flagged", cache->flagged ? "F" : " ", 1);
- add_property_string(return_value, "Answered", cache->answered ? "A" : " ", 1);
- add_property_string(return_value, "Deleted", cache->deleted ? "D" : " ", 1);
- add_property_string(return_value, "Draft", cache->draft ? "X" : " ", 1);
-
- sprintf(dummy, "%4ld", cache->msgno);
- add_property_string(return_value, "Msgno", dummy, 1);
-
- mail_date(dummy, cache);
- add_property_string(return_value, "MailDate", dummy, 1);
-
- sprintf(dummy, "%ld", cache->rfc822_size);
- add_property_string(return_value, "Size", dummy, 1);
-
- add_property_long(return_value, "udate", mail_longdate(cache));
-
- if (en->from && fromlength) {
- fulladdress[0] = 0x00;
- mail_fetchfrom(fulladdress, imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_LVAL_PP(fromlength));
- add_property_string(return_value, "fetchfrom", fulladdress, 1);
- }
- if (en->subject && subjectlength) {
- fulladdress[0] = 0x00;
- mail_fetchsubject(fulladdress, imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_LVAL_PP(subjectlength));
- add_property_string(return_value, "fetchsubject", fulladdress, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto object imap_rfc822_parse_headers(string headers [, string default_host])
- Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo() */
-PHP_FUNCTION(imap_rfc822_parse_headers)
-{
- zval **headers, **defaulthost;
- ENVELOPE *en;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 1 || myargc > 2 || zend_get_parameters_ex(myargc, &headers, &defaulthost) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(headers);
- if (myargc == 2) {
- convert_to_string_ex(defaulthost);
- }
-
- if (myargc == 2) {
- rfc822_parse_msg(&en, NULL, Z_STRVAL_PP(headers), Z_STRLEN_PP(headers), NULL, Z_STRVAL_PP(defaulthost), NIL);
- } else {
- rfc822_parse_msg(&en, NULL, Z_STRVAL_PP(headers), Z_STRLEN_PP(headers), NULL, "UNKNOWN", NIL);
- }
-
- /* call a function to parse all the text, so that we can use the
- same function no matter where the headers are from */
- _php_make_header_object(return_value, en TSRMLS_CC);
- mail_free_envelope(&en);
-}
-/* }}} */
-
-
-/* KMLANG */
-/* {{{ proto array imap_lsub(int stream_id, string ref, string pattern)
- Return a list of subscribed mailboxes */
-PHP_FUNCTION(imap_lsub)
-{
- zval **streamind, **ref, **pat;
- pils *imap_le_struct;
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for normal, old mailbox list */
- IMAPG(folderlist_style) = FLIST_ARRAY;
-
- IMAPG(imap_sfolders) = NIL;
- mail_lsub(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_sfolders) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_sfolders);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
- mail_free_stringlist (&IMAPG(imap_sfolders));
- IMAPG(imap_sfolders) = IMAPG(imap_sfolders_tail) = NIL;
-}
-/* }}} */
-
-/* {{{ proto array imap_getsubscribed(int stream_id, string ref, string pattern)
- Return a list of subscribed mailboxes, in the same format as imap_getmailboxes() */
-/* Author: CJH */
-PHP_FUNCTION(imap_lsub_full)
-{
- zval **streamind, **ref, **pat, *mboxob;
- pils *imap_le_struct;
- FOBJECTLIST *cur=NIL;
- char *delim=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- delim = emalloc(2 * sizeof(char));
-
- /* set flag for new, improved array of objects list */
- IMAPG(folderlist_style) = FLIST_OBJECT;
-
- IMAPG(imap_sfolder_objects) = IMAPG(imap_sfolder_objects_tail) = NIL;
- mail_lsub(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_sfolder_objects) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_sfolder_objects);
- while (cur != NIL) {
- MAKE_STD_ZVAL(mboxob);
- object_init(mboxob);
- add_property_string(mboxob, "name", cur->LTEXT, 1);
- add_property_long(mboxob, "attributes", cur->attributes);
-#ifdef IMAP41
- delim[0] = (char)cur->delimiter;
- delim[1] = 0;
- add_property_string(mboxob, "delimiter", delim, 1);
-#else
- add_property_string(mboxob, "delimiter", cur->delimiter, 1);
-#endif
- add_next_index_object(return_value, mboxob);
- cur=cur->next;
- }
- mail_free_foblist (&IMAPG(imap_sfolder_objects), &IMAPG(imap_sfolder_objects_tail));
- efree(delim);
- IMAPG(folderlist_style) = FLIST_ARRAY; /* reset to default */
-}
-/* }}} */
-
-/* {{{ proto int imap_subscribe(int stream_id, string mailbox)
- Subscribe to a mailbox */
-PHP_FUNCTION(imap_subscribe)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_subscribe(imap_le_struct->imap_stream, Z_STRVAL_PP(folder))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_unsubscribe(int stream_id, string mailbox)
- Unsubscribe from a mailbox */
-PHP_FUNCTION(imap_unsubscribe)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_unsubscribe(imap_le_struct->imap_stream, Z_STRVAL_PP(folder))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object imap_fetchstructure(int stream_id, int msg_no [, int options])
- Read the full structure of a message */
-PHP_FUNCTION(imap_fetchstructure)
-{
- zval **streamind, **msgno, **flags;
- pils *imap_le_struct;
- BODY *body;
- int msgindex, myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
- if (Z_LVAL_PP(msgno) < 1) {
- RETURN_FALSE;
- }
- if (myargc == 3) {
- convert_to_long_ex(flags);
- }
-
- object_init(return_value);
-
- if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
- /* This should be cached; if it causes an extra RTT to the
- IMAP server, then that's the price we pay for making
- sure we don't crash. */
- msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- msgindex = Z_LVAL_PP(msgno);
- }
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
- php_error(E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- mail_fetchstructure_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), &body , myargc == 3 ? Z_LVAL_PP(flags) : NIL);
-
- if (!body) {
- php_error(E_WARNING, "No body information available");
- RETURN_FALSE;
- }
-
- _php_imap_add_body(return_value, body TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string imap_fetchbody(int stream_id, int msg_no, int section [, int options])
- Get a specific body section */
-PHP_FUNCTION(imap_fetchbody)
-{
- zval **streamind, **msgno, **sec, **flags;
- pils *imap_le_struct;
- char *body;
- unsigned long len;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &msgno, &sec, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
- convert_to_string_ex(sec);
- if (myargc == 4) {
- convert_to_long_ex(flags);
- }
-
- body = mail_fetchbody_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_STRVAL_PP(sec), &len, myargc==4 ? Z_LVAL_PP(flags) : NIL);
-
- if (!body) {
- php_error(E_WARNING, "No body information available");
- RETURN_FALSE;
- }
- RETVAL_STRINGL(body, len, 1);
-}
-
-/* }}} */
-
-/* {{{ proto string imap_base64(string text)
- Decode BASE64 encoded text */
-PHP_FUNCTION(imap_base64)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = (char *) rfc822_base64((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto string imap_qprint(string text)
- Convert a quoted-printable string to an 8-bit string */
-PHP_FUNCTION(imap_qprint)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = (char *) rfc822_qprint((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto string imap_8bit(string text)
- Convert an 8-bit string to a quoted-printable string */
-PHP_FUNCTION(imap_8bit)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = (char *) rfc822_8bit((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto string imap_binary(string text)
- Convert an 8bit string to a base64 string */
-PHP_FUNCTION(imap_binary)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = rfc822_binary(Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto object imap_mailboxmsginfo(int stream_id)
- Returns info about the current mailbox */
-PHP_FUNCTION(imap_mailboxmsginfo)
-{
- zval **streamind;
- pils *imap_le_struct;
- char date[100];
- unsigned int msgno, unreadmsg, deletedmsg, msize;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- /* Initialize return object */
- if (object_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- unreadmsg = 0;
- deletedmsg = 0;
- msize = 0;
-
- for (msgno = 1; msgno <= imap_le_struct->imap_stream->nmsgs; msgno++) {
- MESSAGECACHE * cache = mail_elt (imap_le_struct->imap_stream, msgno);
- mail_fetchstructure (imap_le_struct->imap_stream, msgno, NIL);
-
- if (!cache->seen || cache->recent) {
- unreadmsg++;
- }
-
- if (cache->deleted) {
- deletedmsg++;
- }
- msize = msize + cache->rfc822_size;
- }
- add_property_long(return_value, "Unread", unreadmsg);
- add_property_long(return_value, "Deleted", deletedmsg);
- add_property_long(return_value, "Nmsgs", imap_le_struct->imap_stream->nmsgs);
- add_property_long(return_value, "Size", msize);
- rfc822_date(date);
- add_property_string(return_value, "Date", date, 1);
- add_property_string(return_value, "Driver", imap_le_struct->imap_stream->dtb->name, 1);
- add_property_string(return_value, "Mailbox", imap_le_struct->imap_stream->mailbox, 1);
- add_property_long(return_value, "Recent", imap_le_struct->imap_stream->recent);
-}
-/* }}} */
-
-/* {{{ proto string imap_rfc822_write_address(string mailbox, string host, string personal)
- Returns a properly formatted email address given the mailbox, host, and personal info */
-PHP_FUNCTION(imap_rfc822_write_address)
-{
- zval **mailbox, **host, **personal;
- ADDRESS *addr;
- char string[MAILTMPLEN];
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &mailbox, &host, &personal) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(mailbox);
- convert_to_string_ex(host);
- convert_to_string_ex(personal);
-
- addr=mail_newaddr();
-
- if (mailbox) {
- addr->mailbox = cpystr(Z_STRVAL_PP(mailbox));
- }
-
- if (host) {
- addr->host = cpystr(Z_STRVAL_PP(host));
- }
-
- if (personal) {
- addr->personal = cpystr(Z_STRVAL_PP(personal));
- }
-
- addr->next=NIL;
- addr->error=NIL;
- addr->adl=NIL;
-
- string[0]='\0';
- rfc822_write_address(string, addr);
- RETVAL_STRING(string, 1);
-}
-/* }}} */
-
-/* {{{ proto array imap_rfc822_parse_adrlist(string address_string, string default_host)
- Parses an address string */
-PHP_FUNCTION(imap_rfc822_parse_adrlist)
-{
- zval **str, **defaulthost, *tovals;
- ADDRESS *addresstmp;
- ENVELOPE *env;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &str, &defaulthost) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- SEPARATE_ZVAL(str);
- convert_to_string_ex(str);
- convert_to_string_ex(defaulthost);
-
- env = mail_newenvelope();
-
- rfc822_parse_adrlist(&env->to, Z_STRVAL_PP(str), Z_STRVAL_PP(defaulthost));
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- addresstmp = env->to;
-
- if (addresstmp) do {
- MAKE_STD_ZVAL(tovals);
- object_init(tovals);
- if (addresstmp->mailbox) {
- add_property_string(tovals, "mailbox", addresstmp->mailbox, 1);
- }
- if (addresstmp->host) {
- add_property_string(tovals, "host", addresstmp->host, 1);
- }
- if (addresstmp->personal) {
- add_property_string(tovals, "personal", addresstmp->personal, 1);
- }
- if (addresstmp->adl) {
- add_property_string(tovals, "adl", addresstmp->adl, 1);
- }
- add_next_index_object(return_value, tovals);
- } while ((addresstmp = addresstmp->next));
-}
-/* }}} */
-
-/* {{{ proto string imap_utf8(string string)
- Convert a string to UTF-8 */
-PHP_FUNCTION(imap_utf8)
-{
- zval **str;
- SIZEDTEXT src, dest;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(str);
-
- src.data = NULL;
- src.size = 0;
- dest.data = NULL;
- dest.size = 0;
-
- cpytxt(&src, Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- utf8_mime2text(&src, &dest);
- RETURN_STRINGL(dest.data, strlen(dest.data), 1);
-}
-/* }}} */
-
-
-/* {{{ macros for the modified utf7 conversion functions
- *
- * author: Andrew Skalski <askalski@chek.com>
- */
-
-/* tests `c' and returns true if it is a special character */
-#define SPECIAL(c) ((c) <= 0x1f || (c) >= 0x7f)
-
-/* validate a modified-base64 character */
-#define B64CHAR(c) (isalnum(c) || (c) == '+' || (c) == ',')
-
-/* map the low 64 bits of `n' to the modified-base64 characters */
-#define B64(n) ("ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
- "abcdefghijklmnopqrstuvwxyz0123456789+,"[(n) & 0x3f])
-
-/* map the modified-base64 character `c' to its 64 bit value */
-#define UNB64(c) ((c) == '+' ? 62 : (c) == ',' ? 63 : (c) >= 'a' ? \
- (c) - 71 : (c) >= 'A' ? (c) - 65 : (c) + 4)
-/* }}} */
-
-/* {{{ proto string imap_utf7_decode(string buf)
- Decode a modified UTF-7 string */
-PHP_FUNCTION(imap_utf7_decode)
-{
- /* author: Andrew Skalski <askalski@chek.com> */
- zval **arg;
- const unsigned char *in, *inp, *endp;
- unsigned char *out, *outp;
- int inlen, outlen;
- enum {
- ST_NORMAL, /* printable text */
- ST_DECODE0, /* encoded text rotation... */
- ST_DECODE1,
- ST_DECODE2,
- ST_DECODE3
- } state;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_writable_string_ex(arg); /* Is this string really modified? */
-
- in = (const unsigned char *) Z_STRVAL_PP(arg);
- inlen = Z_STRLEN_PP(arg);
-
- /* validate and compute length of output string */
- outlen = 0;
- state = ST_NORMAL;
- for (endp = (inp = in) + inlen; inp < endp; inp++) {
- if (state == ST_NORMAL) {
- /* process printable character */
- if (SPECIAL(*inp)) {
- php_error(E_WARNING, "imap_utf7_decode: Invalid modified UTF-7 character: `%c'", *inp);
- RETURN_FALSE;
- } else if (*inp != '&') {
- outlen++;
- } else if (inp + 1 == endp) {
- php_error(E_WARNING, "imap_utf7_decode: Unexpected end of string");
- RETURN_FALSE;
- } else if (inp[1] != '-') {
- state = ST_DECODE0;
- } else {
- outlen++;
- inp++;
- }
- } else if (*inp == '-') {
- /* return to NORMAL mode */
- if (state == ST_DECODE1) {
- php_error(E_WARNING, "imap_utf7_decode: Stray modified base64 character: `%c'", *--inp);
- RETURN_FALSE;
- }
- state = ST_NORMAL;
- } else if (!B64CHAR(*inp)) {
- php_error(E_WARNING, "imap_utf7_decode: Invalid modified base64 character: `%c'", *inp);
- RETURN_FALSE;
- } else {
- switch (state) {
- case ST_DECODE3:
- outlen++;
- state = ST_DECODE0;
- break;
- case ST_DECODE2:
- case ST_DECODE1:
- outlen++;
- case ST_DECODE0:
- state++;
- case ST_NORMAL:
- break;
- }
- }
- }
-
- /* enforce end state */
- if (state != ST_NORMAL) {
- php_error(E_WARNING, "imap_utf7_decode: Unexpected end of string");
- RETURN_FALSE;
- }
-
- /* allocate output buffer */
- if ((out = emalloc(outlen + 1)) == NULL) {
- php_error(E_WARNING, "imap_utf7_decode: Unable to allocate result string");
- RETURN_FALSE;
- }
-
- /* decode input string */
- outp = out;
- state = ST_NORMAL;
- for (endp = (inp = in) + inlen; inp < endp; inp++) {
- if (state == ST_NORMAL) {
- if (*inp == '&' && inp[1] != '-') {
- state = ST_DECODE0;
- }
- else if ((*outp++ = *inp) == '&') {
- inp++;
- }
- }
- else if (*inp == '-') {
- state = ST_NORMAL;
- }
- else {
- /* decode input character */
- switch (state) {
- case ST_DECODE0:
- *outp = UNB64(*inp) << 2;
- state = ST_DECODE1;
- break;
- case ST_DECODE1:
- outp[1] = UNB64(*inp);
- *outp++ |= outp[1] >> 4;
- *outp <<= 4;
- state = ST_DECODE2;
- break;
- case ST_DECODE2:
- outp[1] = UNB64(*inp);
- *outp++ |= outp[1] >> 2;
- *outp <<= 6;
- state = ST_DECODE3;
- break;
- case ST_DECODE3:
- *outp++ |= UNB64(*inp);
- state = ST_DECODE0;
- case ST_NORMAL:
- break;
- }
- }
- }
-
- *outp = 0;
-
-#if PHP_DEBUG
- /* warn if we computed outlen incorrectly */
- if (outp - out != outlen) {
- php_error(E_WARNING, "imap_utf7_decode: outp - out [%d] != outlen [%d]", outp - out, outlen);
- }
-#endif
-
- RETURN_STRINGL(out, outlen, 0);
-}
-/* }}} */
-
-/* {{{ proto string imap_utf7_encode(string buf)
- Encode a string in modified UTF-7 */
-PHP_FUNCTION(imap_utf7_encode)
-{
- /* author: Andrew Skalski <askalski@chek.com> */
- zval **arg;
- const unsigned char *in, *inp, *endp;
- unsigned char *out, *outp;
- int inlen, outlen;
- enum {
- ST_NORMAL, /* printable text */
- ST_ENCODE0, /* encoded text rotation... */
- ST_ENCODE1,
- ST_ENCODE2
- } state;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg);
-
- in = (const unsigned char *) Z_STRVAL_PP(arg);
- inlen = Z_STRLEN_PP(arg);
-
- /* compute the length of the result string */
- outlen = 0;
- state = ST_NORMAL;
- endp = (inp = in) + inlen;
- while (inp < endp) {
- if (state == ST_NORMAL) {
- if (SPECIAL(*inp)) {
- state = ST_ENCODE0;
- outlen++;
- } else if (*inp++ == '&') {
- outlen++;
- }
- outlen++;
- } else if (!SPECIAL(*inp)) {
- state = ST_NORMAL;
- } else {
- /* ST_ENCODE0 -> ST_ENCODE1 - two chars
- * ST_ENCODE1 -> ST_ENCODE2 - one char
- * ST_ENCODE2 -> ST_ENCODE0 - one char
- */
- if (state == ST_ENCODE2) {
- state = ST_ENCODE0;
- }
- else if (state++ == ST_ENCODE0) {
- outlen++;
- }
- outlen++;
- inp++;
- }
- }
-
- /* allocate output buffer */
- if ((out = emalloc(outlen + 1)) == NULL) {
- php_error(E_WARNING, "imap_utf7_encode: Unable to allocate result string");
- RETURN_FALSE;
- }
-
- /* encode input string */
- outp = out;
- state = ST_NORMAL;
- endp = (inp = in) + inlen;
- while (inp < endp || state != ST_NORMAL) {
- if (state == ST_NORMAL) {
- if (SPECIAL(*inp)) {
- /* begin encoding */
- *outp++ = '&';
- state = ST_ENCODE0;
- } else if ((*outp++ = *inp++) == '&') {
- *outp++ = '-';
- }
- } else if (inp == endp || !SPECIAL(*inp)) {
- /* flush overflow and terminate region */
- if (state != ST_ENCODE0) {
- *outp++ = B64(*outp);
- }
- *outp++ = '-';
- state = ST_NORMAL;
- } else {
- /* encode input character */
- switch (state) {
- case ST_ENCODE0:
- *outp++ = B64(*inp >> 2);
- *outp = *inp++ << 4;
- state = ST_ENCODE1;
- break;
- case ST_ENCODE1:
- *outp++ = B64(*outp | *inp >> 4);
- *outp = *inp++ << 2;
- state = ST_ENCODE2;
- break;
- case ST_ENCODE2:
- *outp++ = B64(*outp | *inp >> 6);
- *outp++ = B64(*inp++);
- state = ST_ENCODE0;
- case ST_NORMAL:
- break;
- }
- }
- }
-
- *outp = 0;
-
-#if PHP_DEBUG
- /* warn if we computed outlen incorrectly */
- if (outp - out != outlen) {
- php_error(E_WARNING, "imap_utf7_encode: outp - out [%d] != outlen [%d]", outp - out, outlen);
- }
-#endif
-
- RETURN_STRINGL(out, outlen, 0);
-}
-/* }}} */
-
-#undef SPECIAL
-#undef B64CHAR
-#undef B64
-#undef UNB64
-
-/* {{{ proto int imap_setflag_full(int stream_id, string sequence, string flag [, int options])
- Sets flags on messages */
-PHP_FUNCTION(imap_setflag_full)
-{
- zval **streamind, **sequence, **flag, **flags;
- pils *imap_le_struct;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flag, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- convert_to_string_ex(flag);
- if (myargc==4) {
- convert_to_long_ex(flags);
- }
-
- mail_setflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), Z_STRVAL_PP(flag), myargc==4 ? Z_LVAL_PP(flags) : NIL);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imap_clearflag_full(int stream_id, string sequence, string flag [, int options])
- Clears flags on messages */
-PHP_FUNCTION(imap_clearflag_full)
-{
- zval **streamind, **sequence, **flag, **flags;
- pils *imap_le_struct;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flag, &flags) ==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- convert_to_string_ex(flag);
- if (myargc==4) {
- convert_to_long_ex(flags);
- }
-
- mail_clearflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), Z_STRVAL_PP(flag), myargc==4 ? Z_LVAL_PP(flags) : NIL);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array imap_sort(int stream_id, int criteria, int reverse [, int options [, string search_criteria]])
- Sort an array of message headers, optionally including only messages that meet specified criteria. */
-PHP_FUNCTION(imap_sort)
-{
- zval **streamind, **pgm, **rev, **flags, **criteria;
- pils *imap_le_struct;
- unsigned long *slst, *sl;
- char *search_criteria;
- SORTPGM *mypgm=NIL;
- SEARCHPGM *spg=NIL;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &pgm, &rev, &flags, &criteria) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(rev);
- convert_to_long_ex(pgm);
- if (Z_LVAL_PP(pgm) > SORTSIZE) {
- php_error(E_WARNING, "Unrecognized sort criteria");
- RETURN_FALSE;
- }
- if (myargc >= 4) {
- convert_to_long_ex(flags);
- }
- if (myargc == 5) {
- search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
- spg = mail_criteria(search_criteria);
- efree(search_criteria);
- } else {
- spg = mail_newsearchpgm();
- }
-
- mypgm = mail_newsortpgm();
- mypgm->reverse = Z_LVAL_PP(rev);
- mypgm->function = (short) Z_LVAL_PP(pgm);
- mypgm->next = NIL;
-
- slst = mail_sort(imap_le_struct->imap_stream, NIL, spg, mypgm, myargc >= 4 ? Z_LVAL_PP(flags) : NIL);
-
- if (spg) {
- mail_free_searchpgm(&spg);
- }
-
- array_init(return_value);
- if (slst != NIL && slst != 0) {
- for (sl = slst; *sl; sl++) {
- add_next_index_long(return_value, *sl);
- }
- fs_give ((void **) &slst);
- }
-}
-/* }}} */
-
-/* {{{ proto string imap_fetchheader(int stream_id, int msg_no [, int options])
- Get the full unfiltered header for a message */
-PHP_FUNCTION(imap_fetchheader)
-{
- zval **streamind, **msgno, **flags;
- pils *imap_le_struct;
- int msgindex, myargc = ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
- if (myargc == 3) {
- convert_to_long_ex(flags);
- }
-
- if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
- /* This should be cached; if it causes an extra RTT to the
- IMAP server, then that's the price we pay for making sure
- we don't crash. */
- msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- msgindex = Z_LVAL_PP(msgno);
- }
-
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
- php_error(E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
-}
-/* }}} */
-
-/* {{{ proto int imap_uid(int stream_id, int msg_no)
- Get the unique message id associated with a standard sequential message number */
-PHP_FUNCTION(imap_uid)
-{
- zval **streamind, **msgno;
- pils *imap_le_struct;
- int msgindex;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &msgno) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
-
- msgindex = Z_LVAL_PP(msgno);
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
- php_error(E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- RETURN_LONG(mail_uid(imap_le_struct->imap_stream, Z_LVAL_PP(msgno)));
-}
-/* }}} */
-
-/* {{{ proto int imap_msgno(int stream_id, int unique_msg_id)
- Get the sequence number associated with a UID */
-PHP_FUNCTION(imap_msgno)
-{
- zval **streamind, **msgno;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &msgno) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
-
- RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno)));
-}
-/* }}} */
-
-/* {{{ proto object imap_status(int stream_id, string mailbox, int options)
- Get status info from a mailbox */
-PHP_FUNCTION(imap_status)
-{
- zval **streamind, **mbx, **flags;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &mbx, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mbx);
- convert_to_long_ex(flags);
-
- if (object_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (mail_status(imap_le_struct->imap_stream, Z_STRVAL_PP(mbx), Z_LVAL_PP(flags))) {
- add_property_long(return_value, "flags", IMAPG(status_flags));
- if (IMAPG(status_flags) & SA_MESSAGES) {
- add_property_long(return_value, "messages", IMAPG(status_messages));
- }
- if (IMAPG(status_flags) & SA_RECENT) {
- add_property_long(return_value, "recent", IMAPG(status_recent));
- }
- if (IMAPG(status_flags) & SA_UNSEEN) {
- add_property_long(return_value, "unseen", IMAPG(status_unseen));
- }
- if (IMAPG(status_flags) & SA_UIDNEXT) {
- add_property_long(return_value, "uidnext", IMAPG(status_uidnext));
- }
- if (IMAPG(status_flags) & SA_UIDVALIDITY) {
- add_property_long(return_value, "uidvalidity", IMAPG(status_uidvalidity));
- }
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object imap_bodystruct(int stream_id, int msg_no, int section)
- Read the structure of a specified body section of a specific message */
-PHP_FUNCTION(imap_bodystruct)
-{
- zval **streamind, **msg, **section;
- pils *imap_le_struct;
- zval *parametres, *param, *dparametres, *dparam;
- PARAMETER *par, *dpar;
- BODY *body;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &msg, &section) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msg);
- convert_to_string_ex(section);
-
- if (!Z_LVAL_PP(msg) || Z_LVAL_PP(msg) < 1 || (unsigned) Z_LVAL_PP(msg) > imap_le_struct->imap_stream->nmsgs) {
- php_error(E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- if (object_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- body=mail_body(imap_le_struct->imap_stream, Z_LVAL_PP(msg), Z_STRVAL_PP(section));
- if (Z_TYPE_P(body) <= TYPEMAX) {
- add_property_long(return_value, "type", Z_TYPE_P(body));
- }
- if (body->encoding <= ENCMAX) {
- add_property_long(return_value, "encoding", body->encoding);
- }
-
- if (body->subtype) {
- add_property_long(return_value, "ifsubtype", 1);
- add_property_string(return_value, "subtype", body->subtype, 1);
- } else {
- add_property_long(return_value, "ifsubtype", 0);
- }
-
- if (body->description) {
- add_property_long(return_value, "ifdescription", 1);
- add_property_string(return_value, "description", body->description, 1);
- } else {
- add_property_long(return_value, "ifdescription", 0);
- }
- if (body->id) {
- add_property_long(return_value, "ifid", 1);
- add_property_string(return_value, "id", body->id, 1);
- } else {
- add_property_long(return_value, "ifid", 0);
- }
-
-
- if (body->size.lines) {
- add_property_long(return_value, "lines", body->size.lines);
- }
- if (body->size.bytes) {
- add_property_long(return_value, "bytes", body->size.bytes);
- }
-#ifdef IMAP41
- if (Z_TYPE(body->disposition)) {
- add_property_long(return_value, "ifdisposition", 1);
- add_property_string(return_value, "disposition", Z_TYPE(body->disposition), 1);
- } else {
- add_property_long(return_value, "ifdisposition", 0);
- }
-
- if (body->disposition.parameter) {
- dpar = body->disposition.parameter;
- add_property_long(return_value, "ifdparameters", 1);
- MAKE_STD_ZVAL(dparametres);
- array_init(dparametres);
- do {
- MAKE_STD_ZVAL(dparam);
- object_init(dparam);
- add_property_string(dparam, "attribute", dpar->attribute, 1);
- add_property_string(dparam, "value", dpar->value, 1);
- add_next_index_object(dparametres, dparam);
- } while ((dpar = dpar->next));
- add_assoc_object(return_value, "dparameters", dparametres);
- } else {
- add_property_long(return_value, "ifdparameters", 0);
- }
-#endif
-
- if ((par = body->parameter)) {
- add_property_long(return_value, "ifparameters", 1);
-
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- do {
- MAKE_STD_ZVAL(param);
- object_init(param);
- if (par->attribute) {
- add_property_string(param, "attribute", par->attribute, 1);
- }
- if (par->value) {
- add_property_string(param, "value", par->value, 1);
- }
-
- add_next_index_object(parametres, param);
- } while ((par = par->next));
- } else {
- MAKE_STD_ZVAL(parametres);
- object_init(parametres);
- add_property_long(return_value, "ifparameters", 0);
- }
- add_assoc_object(return_value, "parameters", parametres);
-}
-
-/* }}} */
-
-/* {{{ proto array imap_fetch_overview(int stream_id, int msg_no [, int flags])
- Read an overview of the information in the headers of the given message sequence */
-PHP_FUNCTION(imap_fetch_overview)
-{
- zval **streamind, **sequence, **pflags;
- pils *imap_le_struct;
- zval *myoverview;
- char address[MAILTMPLEN];
- long status, flags=0L;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &pflags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- if(myargc == 3) {
- convert_to_long_ex(pflags);
- flags = Z_LVAL_PP(pflags);
- }
-
- array_init(return_value);
-
- status = (flags & FT_UID)
- ? mail_uid_sequence (imap_le_struct->imap_stream, Z_STRVAL_PP(sequence))
- : mail_sequence (imap_le_struct->imap_stream, Z_STRVAL_PP(sequence));
-
- if (status) {
- MESSAGECACHE *elt;
- ENVELOPE *env;
- unsigned long i;
-
- for (i = 1; i <= imap_le_struct->imap_stream->nmsgs; i++) {
- if (((elt = mail_elt (imap_le_struct->imap_stream, i))->sequence) &&
- (env = mail_fetch_structure (imap_le_struct->imap_stream, i, NIL, NIL))) {
- MAKE_STD_ZVAL(myoverview);
- object_init(myoverview);
- if (env->subject) {
- add_property_string(myoverview, "subject", env->subject, 1);
- }
- if (env->from) {
- env->from->next=NULL;
- address[0] = '\0';
- rfc822_write_address(address, env->from);
- add_property_string(myoverview, "from", address, 1);
- }
- if (env->to) {
- env->to->next = NULL;
- address[0] = '\0';
- rfc822_write_address(address, env->to);
- add_property_string(myoverview, "to", address, 1);
- }
- if (env->date) {
- add_property_string(myoverview, "date", env->date, 1);
- }
- if (env->message_id) {
- add_property_string(myoverview, "message_id", env->message_id, 1);
- }
- if (env->references) {
- add_property_string(myoverview, "references", env->references, 1);
- }
- add_property_long(myoverview, "size", elt->rfc822_size);
- add_property_long(myoverview, "uid", mail_uid(imap_le_struct->imap_stream, i));
- add_property_long(myoverview, "msgno", i);
- add_property_long(myoverview, "recent", elt->recent);
- add_property_long(myoverview, "flagged", elt->flagged);
- add_property_long(myoverview, "answered", elt->answered);
- add_property_long(myoverview, "deleted", elt->deleted);
- add_property_long(myoverview, "seen", elt->seen);
- add_property_long(myoverview, "draft", elt->draft);
- add_next_index_object(return_value, myoverview);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string imap_mail_compose(array envelope, array body)
- Create a MIME message based on given envelope and body sections */
-PHP_FUNCTION(imap_mail_compose)
-{
- zval **envelope, **body;
- char *key;
- zval **data, **pvalue, **disp_data, **env_data;
- ulong ind;
- char *cookie = NIL;
- ENVELOPE *env;
- BODY *bod=NULL, *topbod=NULL;
- PART *mypart=NULL, *toppart=NULL, *part;
- PARAMETER *param, *disp_param = NULL, *custom_headers_param = NULL, *tmp_param = NULL;
- char tmp[8 * MAILTMPLEN], *mystring=NULL, *t=NULL, *tempstring=NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &envelope, &body) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (Z_TYPE_PP(envelope) != IS_ARRAY) {
- php_error(E_WARNING, "IMAP: Expected Array as envelope parameter");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(body) != IS_ARRAY) {
- php_error(E_WARNING, "IMAP: Expected Array as body parameter");
- RETURN_FALSE;
- }
-
- env = mail_newenvelope();
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "remail", sizeof("remail"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- env->remail=cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "return_path", sizeof("return_path"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue)
- rfc822_parse_adrlist(&env->return_path, Z_STRVAL_PP(pvalue), "NO HOST");
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "date", sizeof("date"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- env->date=cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "from", sizeof("from"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->from, Z_STRVAL_PP(pvalue), "NO HOST");
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "reply_to", sizeof("reply_to"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->reply_to, Z_STRVAL_PP(pvalue), "NO HOST");
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "in_reply_to", sizeof("in_reply_to"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- env->in_reply_to=cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "subject", sizeof("subject"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- env->subject=cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "to", sizeof("to"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->to, Z_STRVAL_PP(pvalue), "NO HOST");
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "cc", sizeof("cc"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->cc, Z_STRVAL_PP(pvalue), "NO HOST");
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "bcc", sizeof("bcc"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->bcc, Z_STRVAL_PP(pvalue), "NO HOST");
- }
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "message_id", sizeof("message_id"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- env->message_id=cpystr(Z_STRVAL_PP(pvalue));
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "custom_headers", sizeof("custom_headers"), (void **) &pvalue)== SUCCESS) {
- if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
- custom_headers_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &env_data) == SUCCESS) {
- custom_headers_param = mail_newbody_parameter();
- convert_to_string_ex(env_data);
- custom_headers_param->value = (char *) fs_get(Z_STRLEN_PP(env_data) + 1);
- memcpy(custom_headers_param->value, Z_STRVAL_PP(env_data), Z_STRLEN_PP(env_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- custom_headers_param->next = tmp_param;
- tmp_param = custom_headers_param;
- }
- }
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(body));
- zend_hash_get_current_data(Z_ARRVAL_PP(body), (void **) &data);
- zend_hash_get_current_key(Z_ARRVAL_PP(body), &key, &ind, 0); /* FIXME: is this necessary? we're not using key/ind */
-
- if (Z_TYPE_PP(data) == IS_ARRAY) {
- bod = mail_newbody();
- topbod = bod;
-
- if (zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- Z_TYPE_P(bod) = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "encoding", sizeof("encoding"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->encoding = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "charset", sizeof("charset"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- tmp_param = mail_newbody_parameter();
- tmp_param->value = cpystr(Z_STRVAL_PP(pvalue));
- tmp_param->attribute = "CHARSET";
- tmp_param->next = bod->parameter;
- bod->parameter = tmp_param;
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "subtype", sizeof("subtype"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->subtype = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "id", sizeof("id"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->id = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "description", sizeof("description"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->description = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "Z_TYPE(disposition)", sizeof("Z_TYPE(disposition)"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- Z_TYPE(bod->disposition) = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(Z_TYPE(bod->disposition), Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue)+1);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "disposition", sizeof("disposition"), (void **) &pvalue)== SUCCESS) {
- if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
- disp_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &disp_data) == SUCCESS) {
- disp_param = mail_newbody_parameter();
- zend_hash_get_current_key(Z_ARRVAL_PP(pvalue), &key, &ind, 0);
- disp_param->attribute = key;
- convert_to_string_ex(disp_data);
- disp_param->value = (char *) fs_get(Z_STRLEN_PP(disp_data) + 1);
- memcpy(disp_param->value, Z_STRVAL_PP(disp_data), Z_STRLEN_PP(disp_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- disp_param->next = tmp_param;
- tmp_param = disp_param;
- }
- bod->disposition.parameter = disp_param;
- }
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "contents.data", sizeof("contents.data"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->contents.text.data = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(bod->contents.text.data, Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue)+1);
- bod->contents.text.size = Z_STRLEN_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "lines", sizeof("lines"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.lines = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "bytes", sizeof("bytes"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.bytes = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "md5", sizeof("md5"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->md5 = cpystr(Z_STRVAL_PP(pvalue));
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(body));
-
- while (zend_hash_get_current_data(Z_ARRVAL_PP(body), (void **) &data) == SUCCESS) {
- zend_hash_get_current_key(Z_ARRVAL_PP(body), &key, &ind, 0); /* FIXME: Is this necessary? We're not using key/ind */
- if (Z_TYPE_PP(data) == IS_ARRAY) {
- if (!toppart) {
- bod->nested.part = mail_newbody_part();
- mypart = bod->nested.part;
- toppart = mypart;
- bod=&mypart->body;
- } else {
- mypart->next = mail_newbody_part();
- mypart = mypart->next;
- bod = &mypart->body;
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- Z_TYPE_P(bod) = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "encoding", sizeof("encoding"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->encoding = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "charset", sizeof("charset"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- tmp_param = mail_newbody_parameter();
- tmp_param->value = cpystr(Z_STRVAL_PP(pvalue));
- tmp_param->attribute = "CHARSET";
- tmp_param->next = bod->parameter;
- bod->parameter = tmp_param;
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "subtype", sizeof("subtype"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->subtype = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "id", sizeof("id"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->id = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "description", sizeof("description"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->description = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "Z_TYPE(disposition)", sizeof("Z_TYPE(disposition)"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- Z_TYPE(bod->disposition) = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(Z_TYPE(bod->disposition), Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue)+1);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "disposition", sizeof("disposition"), (void **) &pvalue)== SUCCESS) {
- if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
- disp_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &disp_data) == SUCCESS) {
- disp_param = mail_newbody_parameter();
- zend_hash_get_current_key(Z_ARRVAL_PP(pvalue), &key, &ind, 0);
- disp_param->attribute = key;
- convert_to_string_ex(disp_data);
- disp_param->value = (char *) fs_get(Z_STRLEN_PP(disp_data) + 1);
- memcpy(disp_param->value, Z_STRVAL_PP(disp_data), Z_STRLEN_PP(disp_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- disp_param->next = tmp_param;
- tmp_param = disp_param;
- }
- bod->disposition.parameter = disp_param;
- }
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "contents.data", sizeof("contents.data"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->contents.text.data = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(bod->contents.text.data, Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue) + 1);
- bod->contents.text.size = Z_STRLEN_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "lines", sizeof("lines"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.lines = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "bytes", sizeof("bytes"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.bytes = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "md5", sizeof("md5"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->md5 = cpystr(Z_STRVAL_PP(pvalue));
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(body));
- }
- }
-
- rfc822_encode_body_7bit(env, topbod);
- rfc822_header (tmp, env, topbod);
-
- /* add custom envelope headers */
- if (custom_headers_param) {
- /* remove last CRLF from tmp */
- tmp[strlen(tmp) - 2] = '\0';
- tempstring = emalloc(strlen(tmp) + 1);
- strcpy(tempstring, tmp);
- do {
- tempstring = erealloc(tempstring, strlen(tempstring) + strlen(custom_headers_param->value) + strlen(CRLF) + 1);
- sprintf(tempstring, "%s%s%s", tempstring, custom_headers_param->value, CRLF);
- } while ((custom_headers_param = custom_headers_param->next));
-
- mystring = emalloc(strlen(tempstring) + strlen(CRLF) + 1);
- sprintf(mystring, "%s%s", tempstring, CRLF);
- efree(tempstring);
- } else {
- mystring = emalloc(strlen(tmp) + 1);
- strcpy(mystring, tmp);
- }
-
- bod = topbod;
-
- if (bod && Z_TYPE_P(bod) == TYPEMULTIPART) {
-
- /* first body part */
- part = bod->nested.part;
-
- /* find cookie */
- for (param = bod->parameter; param && !cookie; param = param->next) {
- if (!strcmp (param->attribute, "BOUNDARY")) {
- cookie = param->value;
- }
- }
-
- /* yucky default */
- if (!cookie) {
- cookie = "-";
- }
-
- /* for each part */
- do {
- /* build cookie */
- sprintf (t=tmp, "--%s%s", cookie, CRLF);
-
- /* append mini-header */
- rfc822_write_body_header(&t, &part->body);
-
- /* write terminating blank line */
- strcat (t, CRLF);
-
- /* output cookie, mini-header, and contents */
- tempstring=emalloc(strlen(mystring)+strlen(tmp)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- strcat(mystring, tmp);
-
- bod=&part->body;
-
- tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
-
- } while ((part = part->next));/* until done */
- /* output trailing cookie */
-
- sprintf(tmp, "--%s--", cookie);
- tempstring=emalloc(strlen(tmp)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, tmp, CRLF);
-
- } else if (bod) {
-
- tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
-
- } else {
- efree(mystring);
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(mystring, strlen(mystring), 1);
- efree(tempstring);
-}
-/* }}} */
-
-
-/* {{{ _php_imap_mail
- */
-int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *cc, char *bcc, char* rpath)
-{
-#ifdef PHP_WIN32
- int tsm_err;
-#else
- FILE *sendmail;
- int ret;
-#endif
-
-#ifdef PHP_WIN32
- if (imap_TSendMail(INI_STR("SMTP"), &tsm_err, headers, subject, to, message, cc, bcc, rpath) != SUCCESS) {
- php_error(E_WARNING, "%s", GetSMErrorText(tsm_err));
- return 0;
- }
-#else
- if (!INI_STR("sendmail_path")) {
- return 0;
- }
- sendmail = popen(INI_STR("sendmail_path"), "w");
- if (sendmail) {
- if (rpath && rpath[0]) fprintf(sendmail, "From: %s\n", rpath);
- fprintf(sendmail, "To: %s\n", to);
- if (cc && cc[0]) fprintf(sendmail, "Cc: %s\n", cc);
- if (bcc && bcc[0]) fprintf(sendmail, "Bcc: %s\n", bcc);
- fprintf(sendmail, "Subject: %s\n", subject);
- if (headers != NULL) {
- fprintf(sendmail, "%s\n", headers);
- }
- fprintf(sendmail, "\n%s\n", message);
- ret = pclose(sendmail);
- if (ret == -1) {
- return 0;
- } else {
- return 1;
- }
- } else {
- php_error(E_WARNING, "Could not execute mail delivery program");
- return 0;
- }
-#endif
- return 1;
-}
-/* }}} */
-
-/* {{{ proto int imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])
- Send an email message */
-PHP_FUNCTION(imap_mail)
-{
- zval **argv[7];
- char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL, *cc=NULL, *bcc=NULL, *rpath=NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 7 || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* To: */
- convert_to_string_ex(argv[0]);
- if (Z_STRVAL_PP(argv[0])) {
- to = Z_STRVAL_PP(argv[0]);
- } else {
- php_error(E_WARNING, "No to field in mail command");
- RETURN_FALSE;
- }
-
- /* Subject: */
- convert_to_string_ex(argv[1]);
- if (Z_STRVAL_PP(argv[1])) {
- subject = Z_STRVAL_PP(argv[1]);
- } else {
- php_error(E_WARNING, "No subject field in mail command");
- RETURN_FALSE;
- }
-
- /* message body */
- convert_to_string_ex(argv[2]);
- if (Z_STRVAL_PP(argv[2])) {
- message = Z_STRVAL_PP(argv[2]);
- } else {
- /* this is not really an error, so it is allowed. */
- php_error(E_WARNING, "No message string in mail command");
- message = NULL;
- }
-
- /* other headers */
- if (argc > 3) {
- convert_to_string_ex(argv[3]);
- headers = Z_STRVAL_PP(argv[3]);
- }
-
- /* cc */
- if (argc > 4) {
- convert_to_string_ex(argv[4]);
- cc = Z_STRVAL_PP(argv[4]);
- }
-
- /* bcc */
- if (argc > 5) {
- convert_to_string_ex(argv[5]);
- bcc = Z_STRVAL_PP(argv[5]);
- }
-
- /* rpath */
- if (argc > 6) {
- convert_to_string_ex(argv[6]);
- rpath = Z_STRVAL_PP(argv[6]);
- }
-
- if (_php_imap_mail(to, subject, message, headers, cc, bcc, rpath)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_search(int stream_id, string criteria [, long flags])
- Return a list of messages matching the given criteria */
-PHP_FUNCTION(imap_search)
-{
- zval **streamind, **criteria, **search_flags;
- pils *imap_le_struct;
- long flags;
- char *search_criteria;
- MESSAGELIST *cur;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &streamind, &criteria, &search_flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(criteria);
- search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
-
- if (argc == 2) {
- flags = SE_FREE;
- } else {
- convert_to_long_ex(search_flags);
- flags = Z_LVAL_PP(search_flags);
- }
-
- IMAPG(imap_messages) = IMAPG(imap_messages_tail) = NIL;
- mail_search_full(imap_le_struct->imap_stream, NIL, mail_criteria(search_criteria), flags);
- if (IMAPG(imap_messages) == NIL) {
- efree(search_criteria);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- cur = IMAPG(imap_messages);
- while (cur != NIL) {
- add_next_index_long(return_value, cur->msgid);
- cur = cur->next;
- }
- mail_free_messagelist(&IMAPG(imap_messages), &IMAPG(imap_messages_tail));
- efree(search_criteria);
-}
-/* }}} */
-
-/* {{{ proto array imap_alerts(void)
- Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called. */
-/* Author: CJH */
-PHP_FUNCTION(imap_alerts)
-{
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() > 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (IMAPG(imap_alertstack) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- cur = IMAPG(imap_alertstack);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur = cur->next;
- }
- mail_free_stringlist(&IMAPG(imap_alertstack));
- IMAPG(imap_alertstack) = NIL;
-}
-/* }}} */
-
-/* {{{ proto array imap_errors(void)
- Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called. */
-/* Author: CJH */
-PHP_FUNCTION(imap_errors)
-{
- ERRORLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() > 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (IMAPG(imap_errorstack) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- cur = IMAPG(imap_errorstack);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur = cur->next;
- }
- mail_free_errorlist(&IMAPG(imap_errorstack));
- IMAPG(imap_errorstack) = NIL;
-}
-/* }}} */
-
-/* {{{ proto string imap_last_error(void)
- Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call. */
-/* Author: CJH */
-PHP_FUNCTION(imap_last_error)
-{
- ERRORLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() > 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (IMAPG(imap_errorstack) == NIL) {
- RETURN_FALSE;
- }
-
- cur = IMAPG(imap_errorstack);
- while (cur != NIL) {
- if (cur->next == NIL) {
- RETURN_STRING(cur->LTEXT, 1);
- }
- cur = cur->next;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_mime_header_decode(string str)
- Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text' */
-PHP_FUNCTION(imap_mime_header_decode)
-{
- /* Author: Ted Parnefors <ted@mtv.se> */
- zval **str, *myobject;
- char *string, *charset, encoding, *text, *decode;
- long charset_token, encoding_token, end_token, end, offset=0, i;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(str);
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- string = Z_STRVAL_PP(str);
- end = Z_STRLEN_PP(str);
-
- if ((charset = ((char *)emalloc((end + 1) * 2)))) {
- text = &charset[end + 1];
- while (offset < end) { /* Reached end of the string? */
- if ((charset_token = (long)php_memnstr(&string[offset], "=?", 2, string + end))) { /* Is there anything encoded in the string? */
- charset_token -= (long)string;
- if (offset != charset_token) { /* Is there anything before the encoded data? */
- /* Retrieve unencoded data that is found before encoded data */
- memcpy(text, &string[offset], charset_token-offset);
- text[charset_token - offset] = 0x00;
- MAKE_STD_ZVAL(myobject);
- object_init(myobject);
- add_property_string(myobject, "charset", "default", 1);
- add_property_string(myobject, "text", text, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
- }
- if ((encoding_token = (long)php_memnstr(&string[charset_token+2], "?", 1, string+end))) { /* Find token for encoding */
- encoding_token -= (long)string;
- if ((end_token = (long)php_memnstr(&string[encoding_token+3], "?=", 2, string+end))) { /* Find token for end of encoded data */
- end_token -= (long)string;
- memcpy(charset, &string[charset_token + 2], encoding_token - (charset_token + 2)); /* Extract charset encoding */
- charset[encoding_token-(charset_token + 2)] = 0x00;
- encoding=string[encoding_token + 1]; /* Extract encoding from string */
- memcpy(text, &string[encoding_token + 3], end_token - (encoding_token + 3)); /* Extract text */
- text[end_token - (encoding_token + 3)] = 0x00;
- decode = text;
- if (encoding == 'q' || encoding == 'Q') { /* Decode 'q' encoded data */
- for(i=0; text[i] != 0x00; i++) if (text[i] == '_') text[i] = ' '; /* Replace all *_' with space. */
- decode = (char *)rfc822_qprint((unsigned char *) text, strlen(text), &newlength);
- } else if (encoding == 'b' || encoding == 'B') {
- decode = (char *)rfc822_base64((unsigned char *) text, strlen(text), &newlength); /* Decode 'B' encoded data */
- }
- if (decode == NULL) {
- efree(charset);
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- MAKE_STD_ZVAL(myobject);
- object_init(myobject);
- add_property_string(myobject, "charset", charset, 1);
- add_property_string(myobject, "text", decode, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
- fs_give((void**)&decode);
-
- offset = end_token+2;
- for (i = 0; (string[offset + i] == ' ') || (string[offset + i] == 0x0a) || (string[offset + i] == 0x0d); i++);
- if ((string[offset + i] == '=') && (string[offset + i + 1] == '?') && (offset + i < end)) {
- offset += i;
- }
- continue; /*/ Iterate the loop again please. */
- }
- }
- } else {
- /* Just some tweaking to optimize the code, and get the end statements work in a general manner.
- If we end up here we didn't find a position for "charset_token",
- so we need to set it to the start of the yet unextracted data. */
- charset_token = offset;
- }
- /* Return the rest of the data as unencoded, as it was either unencoded or was missing separators
- which rendered the the remainder of the string impossible for us to decode. */
- memcpy(text, &string[charset_token], end - charset_token); /* Extract unencoded text from string */
- text[end - charset_token] = 0x00;
- MAKE_STD_ZVAL(myobject);
- object_init(myobject);
- add_property_string(myobject, "charset", "default", 1);
- add_property_string(myobject, "text", text, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
-
- offset = end; /* We have reached the end of the string. */
- }
- efree(charset);
- } else {
- php_error(E_WARNING, "Unable to allocate temporary memory buffer for imap_mime_header_decode");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* Support Functions */
-/* {{{ _php_imap_parse_address
- */
-static void _php_imap_parse_address (ADDRESS *addresslist, char *fulladdress, zval *paddress TSRMLS_DC)
-{
- ADDRESS *addresstmp, *addresstmp2;
- char tempaddress[MAILTMPLEN];
- zval *tmpvals;
- int ok = 1;
-
- addresstmp = addresslist;
- fulladdress[0] = 0x00;
- while (ok && addresstmp) { /* while length < 1000 and we are not at the end of the list */
- addresstmp2 = addresstmp->next; /* save the pointer to the next address */
- addresstmp->next = NULL; /* make this address the only one now. */
- tempaddress[0] = '\0'; /* reset tempaddress buffer */
- rfc822_write_address(tempaddress, addresstmp); /* ok, write the address into tempaddress string */
- if ((strlen(tempaddress) + strlen(fulladdress)) < 1000) { /* is the new address + total address < 1000 */
- if (strlen(fulladdress)) {
- strcat(fulladdress, ","); /* put in a comma */
- }
- strcat(fulladdress, tempaddress); /* put in the new address */
- } else { /* no */
- ok = 0; /* stop looping */
- strcat(fulladdress, ", ...");
- } /* DO NOT optimize this out - changing it breaks things */
- addresstmp->next = addresstmp2; /* reset the pointer to the next address first! */
- addresstmp = addresstmp->next;
- }
-
- addresstmp = addresslist;
- do {
- MAKE_STD_ZVAL(tmpvals);
- object_init(tmpvals);
- if (addresstmp->personal) add_property_string(tmpvals, "personal", addresstmp->personal, 1);
- if (addresstmp->adl) add_property_string(tmpvals, "adl", addresstmp->adl, 1);
- if (addresstmp->mailbox) add_property_string(tmpvals, "mailbox", addresstmp->mailbox, 1);
- if (addresstmp->host) add_property_string(tmpvals, "host", addresstmp->host, 1);
- add_next_index_object(paddress, tmpvals);
- } while ((addresstmp = addresstmp->next));
-}
-/* }}} */
-
-/* {{{ _php_make_header_object
- */
-static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
-{
- zval *paddress;
- char fulladdress[MAILTMPLEN];
-
- object_init(myzvalue);
-
- if (en->remail) add_property_string(myzvalue, "remail", en->remail, 1);
- if (en->date) add_property_string(myzvalue, "date", en->date, 1);
- if (en->date) add_property_string(myzvalue, "Date", en->date, 1);
- if (en->subject) add_property_string(myzvalue, "subject", en->subject, 1);
- if (en->subject) add_property_string(myzvalue, "Subject", en->subject, 1);
- if (en->in_reply_to) add_property_string(myzvalue, "in_reply_to", en->in_reply_to, 1);
- if (en->message_id) add_property_string(myzvalue, "message_id", en->message_id, 1);
- if (en->newsgroups) add_property_string(myzvalue, "newsgroups", en->newsgroups, 1);
- if (en->followup_to) add_property_string(myzvalue, "followup_to", en->followup_to, 1);
- if (en->references) add_property_string(myzvalue, "references", en->references, 1);
-
- if (en->to) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->to, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "toaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "to", paddress);
- }
-
- if (en->from) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->from, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "fromaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "from", paddress);
- }
-
- if (en->cc) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->cc, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "ccaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "cc", paddress);
- }
-
- if (en->bcc) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->bcc, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "bccaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "bcc", paddress);
- }
-
- if (en->reply_to) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->reply_to, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "reply_toaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "reply_to", paddress);
- }
-
- if (en->sender) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->sender, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "senderaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "sender", paddress);
- }
-
- if (en->return_path) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->return_path, fulladdress, paddress TSRMLS_CC);
- if (fulladdress) add_property_string(myzvalue, "return_pathaddress", fulladdress, 1);
- add_assoc_object(myzvalue, "return_path", paddress);
- }
-
-}
-/* }}} */
-
-/* {{{ _php_imap_add_body
- */
-void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC)
-{
- zval *parametres, *param, *dparametres, *dparam;
- PARAMETER *par, *dpar;
- PART *part;
-
- if (Z_TYPE_P(body) <= TYPEMAX) {
- add_property_long(arg, "type", Z_TYPE_P(body));
- }
-
- if (body->encoding <= ENCMAX) {
- add_property_long(arg, "encoding", body->encoding);
- }
-
- if (body->subtype) {
- add_property_long(arg, "ifsubtype", 1);
- add_property_string(arg, "subtype", body->subtype, 1);
- } else {
- add_property_long(arg, "ifsubtype", 0);
- }
-
- if (body->description) {
- add_property_long(arg, "ifdescription", 1);
- add_property_string(arg, "description", body->description, 1);
- } else {
- add_property_long(arg, "ifdescription", 0);
- }
-
- if (body->id) {
- add_property_long(arg, "ifid", 1);
- add_property_string(arg, "id", body->id, 1);
- } else {
- add_property_long(arg, "ifid", 0);
- }
-
- if (body->size.lines) {
- add_property_long(arg, "lines", body->size.lines);
- }
-
- if (body->size.bytes) {
- add_property_long(arg, "bytes", body->size.bytes);
- }
-
-#ifdef IMAP41
- if (Z_TYPE(body->disposition)) {
- add_property_long(arg, "ifdisposition", 1);
- add_property_string(arg, "disposition", Z_TYPE(body->disposition), 1);
- } else {
- add_property_long(arg, "ifdisposition", 0);
- }
-
- if (body->disposition.parameter) {
- dpar = body->disposition.parameter;
- add_property_long(arg, "ifdparameters", 1);
- MAKE_STD_ZVAL(dparametres);
- array_init(dparametres);
- do {
- MAKE_STD_ZVAL(dparam);
- object_init(dparam);
- add_property_string(dparam, "attribute", dpar->attribute, 1);
- add_property_string(dparam, "value", dpar->value, 1);
- add_next_index_object(dparametres, dparam);
- } while ((dpar = dpar->next));
- add_assoc_object(arg, "dparameters", dparametres);
- } else {
- add_property_long(arg, "ifdparameters", 0);
- }
-#endif
-
- if ((par = body->parameter)) {
- add_property_long(arg, "ifparameters", 1);
-
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- do {
- MAKE_STD_ZVAL(param);
- object_init(param);
- if (par->attribute) {
- add_property_string(param, "attribute", par->attribute, 1);
- }
- if (par->value) {
- add_property_string(param, "value", par->value, 1);
- }
-
- add_next_index_object(parametres, param);
- } while ((par = par->next));
- } else {
- MAKE_STD_ZVAL(parametres);
- object_init(parametres);
- add_property_long(arg, "ifparameters", 0);
- }
- add_assoc_object(arg, "parameters", parametres);
-
- /* multipart message ? */
- if (Z_TYPE_P(body) == TYPEMULTIPART) {
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- for (part = body->CONTENT_PART; part; part = part->next) {
- MAKE_STD_ZVAL(param);
- object_init(param);
- _php_imap_add_body(param, &part->body TSRMLS_CC);
- add_next_index_object(parametres, param);
- }
- add_assoc_object(arg, "parts", parametres);
- }
-
- /* encapsulated message ? */
- if ((Z_TYPE_P(body) == TYPEMESSAGE) && (!strcasecmp(body->subtype, "rfc822"))) {
- body = body->CONTENT_MSG_BODY;
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- MAKE_STD_ZVAL(param);
- object_init(param);
- _php_imap_add_body(param, body TSRMLS_CC);
- add_next_index_object(parametres, param);
- add_assoc_object(arg, "parts", parametres);
- }
-}
-/* }}} */
-
-
-/* imap_thread, stealing this from header cclient -rjs3 */
-/* {{{ build_thread_tree_helper
- */
-static void build_thread_tree_helper(THREADNODE *cur, zval *tree, long *numNodes, char *buf)
-{
- unsigned long thisNode = *numNodes;
-
- /* define "#.num" */
- snprintf(buf, 25, "%ld.num", thisNode);
-
- add_assoc_long(tree, buf, cur->num);
-
- snprintf(buf, 25, "%ld.next", thisNode);
- if(cur->next) {
- (*numNodes)++;
- add_assoc_long(tree, buf, *numNodes);
- build_thread_tree_helper(cur->next, tree, numNodes, buf);
- } else { /* "null pointer" */
- add_assoc_long(tree, buf, 0);
- }
-
- snprintf(buf, 25, "%ld.branch", thisNode);
- if(cur->branch) {
- (*numNodes)++;
- add_assoc_long(tree, buf, *numNodes);
- build_thread_tree_helper(cur->branch, tree, numNodes, buf);
- } else { /* "null pointer" */
- add_assoc_long(tree, buf, 0);
- }
-}
-/* }}} */
-
-/* {{{ build_thread_tree
- */
-static int build_thread_tree(THREADNODE *top, zval **tree)
-{
- long numNodes = 0;
- char buf[25];
-
- if(array_init(*tree) != SUCCESS) return FAILURE;
-
- build_thread_tree_helper(top, *tree, &numNodes, buf);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int imap_thread(int stream_id [, int flags])
- Return threaded by REFERENCES tree */
-PHP_FUNCTION (imap_thread)
-{
- zval **streamind, **search_flags;
- pils *imap_le_struct;
- long flags;
- char criteria[] = "ALL";
- THREADNODE *top;
- int argc = ZEND_NUM_ARGS();
-
- if ( argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &streamind, &search_flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- if (argc == 1) {
- flags = SE_FREE;
- } else {
- convert_to_long_ex(search_flags);
- flags = Z_LVAL_PP(search_flags);
- }
-
- top = mail_thread(imap_le_struct->imap_stream, "REFERENCES", NIL, mail_criteria(criteria), flags);
-
- if(top == NIL) {
- php_error(E_WARNING, "imap_thread returned an empty tree");
- RETURN_FALSE;
- }
-
- /* Populate our return value data structure here. */
- if(build_thread_tree(top, &return_value) == FAILURE) {
- mail_free_threadnode(&top);
- RETURN_FALSE;
- }
- mail_free_threadnode(&top);
-}
-/* }}} */
-
-
-/* {{{ Interfaces to C-client
- */
-void mm_searched(MAILSTREAM *stream, unsigned long number)
-{
- MESSAGELIST *cur = NIL;
- TSRMLS_FETCH();
-
- if (IMAPG(imap_messages) == NIL) {
- IMAPG(imap_messages) = mail_newmessagelist();
- IMAPG(imap_messages)->msgid = number;
- IMAPG(imap_messages)->next = NIL;
- IMAPG(imap_messages_tail) = IMAPG(imap_messages);
- } else {
- cur = IMAPG(imap_messages_tail);
- cur->next = mail_newmessagelist();
- cur = cur->next;
- cur->msgid = number;
- cur->next = NIL;
- IMAPG(imap_messages_tail) = cur;
- }
-}
-
-void mm_exists(MAILSTREAM *stream, unsigned long number)
-{
-}
-
-void mm_expunged(MAILSTREAM *stream, unsigned long number)
-{
-}
-
-void mm_flags(MAILSTREAM *stream, unsigned long number)
-{
-}
-
-/* Author: CJH */
-void mm_notify(MAILSTREAM *stream, char *str, long errflg)
-{
- STRINGLIST *cur = NIL;
- TSRMLS_FETCH();
-
- if (strncmp(str, "[ALERT] ", 8) == 0) {
- if (IMAPG(imap_alertstack) == NIL) {
- IMAPG(imap_alertstack) = mail_newstringlist();
- IMAPG(imap_alertstack)->LSIZE = strlen(IMAPG(imap_alertstack)->LTEXT = cpystr(str));
- IMAPG(imap_alertstack)->next = NIL;
- } else {
- cur = IMAPG(imap_alertstack);
- while (cur->next != NIL) {
- cur = cur->next;
- }
- cur->next = mail_newstringlist ();
- cur = cur->next;
- cur->LSIZE = strlen(cur->LTEXT = cpystr(str));
- cur->next = NIL;
- }
- }
-}
-
-void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes)
-{
- STRINGLIST *cur=NIL;
- FOBJECTLIST *ocur=NIL;
- TSRMLS_FETCH();
-
- if (IMAPG(folderlist_style) == FLIST_OBJECT) {
- /* build up a the new array of objects */
- /* Author: CJH */
- if (IMAPG(imap_folder_objects) == NIL) {
- IMAPG(imap_folder_objects) = mail_newfolderobjectlist();
- IMAPG(imap_folder_objects)->LSIZE=strlen(IMAPG(imap_folder_objects)->LTEXT=cpystr(mailbox));
- IMAPG(imap_folder_objects)->delimiter = delimiter;
- IMAPG(imap_folder_objects)->attributes = attributes;
- IMAPG(imap_folder_objects)->next = NIL;
- IMAPG(imap_folder_objects_tail) = IMAPG(imap_folder_objects);
- } else {
- ocur=IMAPG(imap_folder_objects_tail);
- ocur->next=mail_newfolderobjectlist();
- ocur=ocur->next;
- ocur->LSIZE = strlen(ocur->LTEXT = cpystr(mailbox));
- ocur->delimiter = delimiter;
- ocur->attributes = attributes;
- ocur->next = NIL;
- IMAPG(imap_folder_objects_tail) = ocur;
- }
-
- } else {
- /* build the old IMAPG(imap_folders) variable to allow old imap_listmailbox() to work */
- if (!(attributes & LATT_NOSELECT)) {
- if (IMAPG(imap_folders) == NIL) {
- IMAPG(imap_folders)=mail_newstringlist();
- IMAPG(imap_folders)->LSIZE=strlen(IMAPG(imap_folders)->LTEXT=cpystr(mailbox));
- IMAPG(imap_folders)->next=NIL;
- IMAPG(imap_folders_tail) = IMAPG(imap_folders);
- } else {
- cur=IMAPG(imap_folders_tail);
- cur->next=mail_newstringlist ();
- cur=cur->next;
- cur->LSIZE = strlen (cur->LTEXT = cpystr (mailbox));
- cur->next = NIL;
- IMAPG(imap_folders_tail) = cur;
- }
- }
- }
-}
-
-void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes)
-{
- STRINGLIST *cur=NIL;
- FOBJECTLIST *ocur=NIL;
- TSRMLS_FETCH();
-
- if (IMAPG(folderlist_style) == FLIST_OBJECT) {
- /* build the array of objects */
- /* Author: CJH */
- if (IMAPG(imap_sfolder_objects) == NIL) {
- IMAPG(imap_sfolder_objects) = mail_newfolderobjectlist();
- IMAPG(imap_sfolder_objects)->LSIZE=strlen(IMAPG(imap_sfolder_objects)->LTEXT=cpystr(mailbox));
- IMAPG(imap_sfolder_objects)->delimiter = delimiter;
- IMAPG(imap_sfolder_objects)->attributes = attributes;
- IMAPG(imap_sfolder_objects)->next = NIL;
- IMAPG(imap_sfolder_objects_tail) = IMAPG(imap_sfolder_objects);
- } else {
- ocur=IMAPG(imap_sfolder_objects_tail);
- ocur->next=mail_newfolderobjectlist();
- ocur=ocur->next;
- ocur->LSIZE=strlen(ocur->LTEXT = cpystr(mailbox));
- ocur->delimiter = delimiter;
- ocur->attributes = attributes;
- ocur->next = NIL;
- IMAPG(imap_sfolder_objects_tail) = ocur;
- }
- } else {
- /* build the old simple array for imap_listsubscribed() */
- if (IMAPG(imap_sfolders) == NIL) {
- IMAPG(imap_sfolders)=mail_newstringlist();
- IMAPG(imap_sfolders)->LSIZE=strlen(IMAPG(imap_sfolders)->LTEXT=cpystr(mailbox));
- IMAPG(imap_sfolders)->next=NIL;
- IMAPG(imap_sfolders_tail) = IMAPG(imap_sfolders);
- } else {
- cur=IMAPG(imap_sfolders_tail);
- cur->next=mail_newstringlist ();
- cur=cur->next;
- cur->LSIZE = strlen (cur->LTEXT = cpystr (mailbox));
- cur->next = NIL;
- IMAPG(imap_sfolders_tail) = cur;
- }
- }
-}
-
-void mm_status(MAILSTREAM *stream, char *mailbox, MAILSTATUS *status)
-{
- TSRMLS_FETCH();
-
- IMAPG(status_flags)=status->flags;
- if (IMAPG(status_flags) & SA_MESSAGES) {
- IMAPG(status_messages)=status->messages;
- }
- if (IMAPG(status_flags) & SA_RECENT) {
- IMAPG(status_recent)=status->recent;
- }
- if (IMAPG(status_flags) & SA_UNSEEN) {
- IMAPG(status_unseen)=status->unseen;
- }
- if (IMAPG(status_flags) & SA_UIDNEXT) {
- IMAPG(status_uidnext)=status->uidnext;
- }
- if (IMAPG(status_flags) & SA_UIDVALIDITY) {
- IMAPG(status_uidvalidity)=status->uidvalidity;
- }
-}
-
-void mm_log(char *str, long errflg)
-{
- ERRORLIST *cur = NIL;
- TSRMLS_FETCH();
-
- /* Author: CJH */
- if (!(EG(error_reporting) & E_NOTICE)) {
- return;
- }
- if (errflg != NIL) { /* CJH: maybe put these into a more comprehensive log for debugging purposes? */
- if (IMAPG(imap_errorstack) == NIL) {
- IMAPG(imap_errorstack) = mail_newerrorlist();
- IMAPG(imap_errorstack)->LSIZE = strlen(IMAPG(imap_errorstack)->LTEXT = cpystr(str));
- IMAPG(imap_errorstack)->errflg = errflg;
- IMAPG(imap_errorstack)->next = NIL;
- } else {
- cur = IMAPG(imap_errorstack);
- while (cur->next != NIL) {
- cur = cur->next;
- }
- cur->next = mail_newerrorlist();
- cur = cur->next;
- cur->LSIZE = strlen(cur->LTEXT = cpystr(str));
- cur->errflg = errflg;
- cur->next = NIL;
- }
- }
-}
-
-void mm_dlog(char *str)
-{
- /* CJH: this is for debugging; it might be useful to allow setting
- the stream to debug mode and capturing this somewhere - syslog?
- php debugger? */
-}
-
-void mm_login(NETMBX *mb, char *user, char *pwd, long trial)
-{
- TSRMLS_FETCH();
-
- if (*mb->user) {
- strlcpy (user, mb->user, MAILTMPLEN);
- } else {
- strlcpy (user, IMAPG(imap_user), MAILTMPLEN);
- }
- strlcpy (pwd, IMAPG(imap_password), MAILTMPLEN);
-}
-
-void mm_critical(MAILSTREAM *stream)
-{
-}
-
-void mm_nocritical(MAILSTREAM *stream)
-{
-}
-
-long mm_diskerror(MAILSTREAM *stream, long errcode, long serious)
-{
- return 1;
-}
-
-void mm_fatal(char *str)
-{
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/imap/php_imap.h b/ext/imap/php_imap.h
deleted file mode 100644
index f8ff92638b..0000000000
--- a/ext/imap/php_imap.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rex Logan <veebert@dimensional.com> |
- | Mark Musone <musone@afterfive.com> |
- | Brian Wang <brian@vividnet.com> |
- | Kaj-Michael Lang <milang@tal.org> |
- | Antoni Pamies Olive <toni@readysoft.net> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Chuck Hagenbuch <chuck@horde.org> |
- | Andrew Skalski <askalski@chekinc.com> |
- | Hartmut Holzgraefe <hartmut@six.de> |
- | Jani Taskinen <sniper@iki.fi> |
- | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_IMAP_H
-#define PHP_IMAP_H
-
-#if HAVE_IMAP
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- /* these are used for quota support */
-# include "c-client.h" /* includes mail.h and rfc822.h */
-# include "imap4r1.h" /* location of c-client quota functions */
-#else
-# include "mail.h"
-# include "rfc822.h"
-#endif
-
-extern zend_module_entry imap_module_entry;
-#define imap_module_ptr &imap_module_entry
-
-
-/* Data types */
-
-#ifdef IMAP41
-#define LSIZE text.size
-#define LTEXT text.data
-#define DTYPE int
-#define CONTENT_PART nested.part
-#define CONTENT_MSG_BODY nested.msg->body
-#define IMAPVER "Imap 4R1"
-#else
-#define LSIZE size
-#define LTEXT text
-#define DTYPE char
-#define CONTENT_PART contents.part
-#define CONTENT_MSG_BODY contents.msg.body
-#define IMAPVER "Imap 4"
-#endif
-
-
-/* Determines how mm_list() and mm_lsub() are to return their results. */
-typedef enum {
- FLIST_ARRAY,
- FLIST_OBJECT
-} folderlist_style_t;
-
-typedef struct php_imap_le_struct {
- MAILSTREAM *imap_stream;
- long flags;
-#ifdef OP_RELOGIN
- /* AJS: busy flag for persistent connections, pointers for chaining */
- struct php_imap_le_struct *next;
- struct php_imap_le_struct **prev;
- char busy;
-#endif
-} pils;
-
-typedef struct php_imap_mailbox_struct {
- SIZEDTEXT text;
- DTYPE delimiter;
- long attributes;
- struct php_imap_mailbox_struct *next;
-} FOBJECTLIST;
-
-typedef struct php_imap_error_struct {
- SIZEDTEXT text;
- long errflg;
- struct php_imap_error_struct *next;
-} ERRORLIST;
-
-typedef struct _php_imap_message_struct {
- unsigned long msgid;
- struct _php_imap_message_struct *next;
-} MESSAGELIST;
-
-
-/* Functions */
-
-PHP_MINIT_FUNCTION(imap);
-PHP_RINIT_FUNCTION(imap);
-PHP_RSHUTDOWN_FUNCTION(imap);
-PHP_MINFO_FUNCTION(imap);
-
-PHP_FUNCTION(imap_open);
-PHP_FUNCTION(imap_popen);
-PHP_FUNCTION(imap_reopen);
-PHP_FUNCTION(imap_num_msg);
-PHP_FUNCTION(imap_num_recent);
-PHP_FUNCTION(imap_headers);
-PHP_FUNCTION(imap_headerinfo);
-PHP_FUNCTION(imap_rfc822_parse_headers);
-PHP_FUNCTION(imap_body);
-PHP_FUNCTION(imap_fetchstructure);
-PHP_FUNCTION(imap_fetchbody);
-PHP_FUNCTION(imap_expunge);
-PHP_FUNCTION(imap_delete);
-PHP_FUNCTION(imap_undelete);
-PHP_FUNCTION(imap_check);
-PHP_FUNCTION(imap_close);
-PHP_FUNCTION(imap_mail_copy);
-PHP_FUNCTION(imap_mail_move);
-PHP_FUNCTION(imap_createmailbox);
-PHP_FUNCTION(imap_renamemailbox);
-PHP_FUNCTION(imap_deletemailbox);
-PHP_FUNCTION(imap_listmailbox);
-PHP_FUNCTION(imap_scanmailbox);
-PHP_FUNCTION(imap_subscribe);
-PHP_FUNCTION(imap_unsubscribe);
-PHP_FUNCTION(imap_append);
-PHP_FUNCTION(imap_ping);
-PHP_FUNCTION(imap_base64);
-PHP_FUNCTION(imap_qprint);
-PHP_FUNCTION(imap_8bit);
-PHP_FUNCTION(imap_binary);
-PHP_FUNCTION(imap_mailboxmsginfo);
-PHP_FUNCTION(imap_rfc822_write_address);
-PHP_FUNCTION(imap_rfc822_parse_adrlist);
-PHP_FUNCTION(imap_setflag_full);
-PHP_FUNCTION(imap_clearflag_full);
-PHP_FUNCTION(imap_sort);
-PHP_FUNCTION(imap_fetchheader);
-PHP_FUNCTION(imap_fetchtext);
-PHP_FUNCTION(imap_uid);
-PHP_FUNCTION(imap_msgno);
-PHP_FUNCTION(imap_list);
-PHP_FUNCTION(imap_list_full);
-PHP_FUNCTION(imap_listscan);
-PHP_FUNCTION(imap_lsub);
-PHP_FUNCTION(imap_lsub_full);
-PHP_FUNCTION(imap_create);
-PHP_FUNCTION(imap_rename);
-PHP_FUNCTION(imap_status);
-PHP_FUNCTION(imap_bodystruct);
-PHP_FUNCTION(imap_fetch_overview);
-PHP_FUNCTION(imap_mail_compose);
-PHP_FUNCTION(imap_alerts);
-PHP_FUNCTION(imap_errors);
-PHP_FUNCTION(imap_last_error);
-PHP_FUNCTION(imap_mail);
-PHP_FUNCTION(imap_search);
-PHP_FUNCTION(imap_utf8);
-PHP_FUNCTION(imap_utf7_decode);
-PHP_FUNCTION(imap_utf7_encode);
-PHP_FUNCTION(imap_mime_header_decode);
-PHP_FUNCTION(imap_thread);
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
-PHP_FUNCTION(imap_get_quota);
-PHP_FUNCTION(imap_set_quota);
-PHP_FUNCTION(imap_setacl);
-#endif
-
-
-ZEND_BEGIN_MODULE_GLOBALS(imap)
- char *imap_user;
- char *imap_password;
-
- STRINGLIST *imap_alertstack;
- ERRORLIST *imap_errorstack;
-
- STRINGLIST *imap_folders;
- STRINGLIST *imap_folders_tail;
- STRINGLIST *imap_sfolders;
- STRINGLIST *imap_sfolders_tail;
- MESSAGELIST *imap_messages;
- MESSAGELIST *imap_messages_tail;
- FOBJECTLIST *imap_folder_objects;
- FOBJECTLIST *imap_folder_objects_tail;
- FOBJECTLIST *imap_sfolder_objects;
- FOBJECTLIST *imap_sfolder_objects_tail;
-
- folderlist_style_t folderlist_style;
- long status_flags;
- unsigned long status_messages;
- unsigned long status_recent;
- unsigned long status_unseen;
- unsigned long status_uidnext;
- unsigned long status_uidvalidity;
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- unsigned long quota_usage;
- unsigned long quota_limit;
-#endif
-ZEND_END_MODULE_GLOBALS(imap)
-
-#ifdef ZTS
-# define IMAPG(v) TSRMG(imap_globals_id, zend_imap_globals *, v)
-#else
-# define IMAPG(v) (imap_globals.v)
-#endif
-
-#else
-
-#define imap_module_ptr NULL
-
-#endif
-
-#define phpext_imap_ptr imap_module_ptr
-
-#endif /* PHP_IMAP_H */
diff --git a/ext/informix/CREDITS b/ext/informix/CREDITS
deleted file mode 100644
index 993073bad4..0000000000
--- a/ext/informix/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Informix
-Danny Heijl, Christian Cartus
diff --git a/ext/informix/Makefile.frag b/ext/informix/Makefile.frag
deleted file mode 100644
index 815a9e2c3c..0000000000
--- a/ext/informix/Makefile.frag
+++ /dev/null
@@ -1,10 +0,0 @@
-
-$(builddir)/ifx.c: $(srcdir)/ifx.ec $(builddir)/libphpifx.a
- (if test -d $(INFORMIXDIR); then \
- THREADLIB=POSIX $(INFORMIXDIR)/bin/esql -e $(IFX_ESQL_FLAGS) $(srcdir)/ifx.ec; mv ifx.c $@; \
- else \
- touch $@; \
- fi)
-
-$(builddir)/libphpifx.a:
- $(LINK) $(IFX_LIBOBJS)
diff --git a/ext/informix/config.m4 b/ext/informix/config.m4
deleted file mode 100644
index 07aac3a010..0000000000
--- a/ext/informix/config.m4
+++ /dev/null
@@ -1,96 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(informix,for Informix support,
-[ --with-informix[=DIR] Include Informix support. DIR is the Informix base
- install directory, defaults to ${INFORMIXDIR:-nothing}.])
-
-if test "$PHP_INFORMIX" != "no"; then
-
- PHP_NEW_EXTENSION(informix, ifx.c, $ext_shared)
- PHP_ADD_MAKEFILE_FRAGMENT
- PHP_SUBST(INFORMIX_SHARED_LIBADD)
-
- if test "$INFORMIXDIR" = ""; then
- AC_MSG_ERROR([INFORMIXDIR environment variable is not set.])
- fi
-
- if test "$PHP_INFORMIX" = "yes"; then
- PHP_ADD_INCLUDE($INFORMIXDIR/incl/esql)
- PHP_ADD_LIBPATH($INFORMIXDIR/lib, INFORMIX_SHARED_LIBADD)
- PHP_ADD_LIBPATH($INFORMIXDIR/lib/esql, INFORMIX_SHARED_LIBADD)
- else
- if test "$PHP_INFORMIX" != "$INFORMIXDIR"; then
- AC_MSG_ERROR([Specified Informix base install directory is different than your INFORMIXDIR environment variable.])
- fi
- PHP_ADD_INCLUDE($PHP_INFORMIX/incl/esql)
- PHP_ADD_LIBPATH($PHP_INFORMIX/lib, INFORMIX_SHARED_LIBADD)
- PHP_ADD_LIBPATH($PHP_INFORMIX/lib/esql, INFORMIX_SHARED_LIBADD)
- fi
-
- dnl Check if thread safety flags are needed
- if test "$enable_experimental_zts" = "yes"; then
- IFX_ESQL_FLAGS="-thread"
- CPPFLAGS="$CPPFLAGS -DIFX_THREAD"
- else
- IFX_ESQL_FLAGS=""
- fi
-
- IFX_LIBS=`THREADLIB=POSIX $INFORMIXDIR/bin/esql $IFX_ESQL_FLAGS -libs`
- IFX_LIBS=`echo $IFX_LIBS | sed -e 's/Libraries to be used://g' -e 's/esql: error -55923: No source or object file\.//g'`
- dnl Seems to get rid of newlines.
- dnl According to Perls DBD-Informix, might contain these strings.
-
- case "$host_alias" in
- *aix*)
- CPPFLAGS="$CPPFLAGS -D__H_LOCALEDEF";;
- esac
-
- AC_MSG_CHECKING([Informix version])
- IFX_VERSION=[`$INFORMIXDIR/bin/esql -V | sed -ne '1 s/^[^0-9]*\([0-9]\)\.\([0-9]*\).*/\1\2/p'`]
- AC_MSG_RESULT($IFX_VERSION)
- AC_DEFINE_UNQUOTED(IFX_VERSION, $IFX_VERSION, [ ])
-
- if test $IFX_VERSION -ge "900"; then
- AC_DEFINE(HAVE_IFX_IUS,1,[ ])
- IFX_ESQL_FLAGS="$IFX_ESQL_FLAGS -EDHAVE_IFX_IUS"
- else
- IFX_ESQL_FLAGS="$IFX_ESQL_FLAGS -EUHAVE_IFX_IUS"
- fi
- PHP_SUBST(IFX_ESQL_FLAGS)
-
- for i in $IFX_LIBS; do
- case "$i" in
- *.o)
- IFX_LIBOBJS="$IFX_LIBOBJS $i"
- PHP_ADD_LIBPATH($ext_builddir, INFORMIX_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER(phpifx, 1, INFORMIX_SHARED_LIBADD)
- ;;
- -lm)
- ;;
- -lc)
- ;;
- -l*)
- lib=`echo $i | cut -c 3-`
- PHP_ADD_LIBRARY_DEFER($lib, 1, INFORMIX_SHARED_LIBADD)
- ;;
- *.a)
- case "`uname -s 2>/dev/null`" in
- UnixWare | SCO_SV | UNIX_SV)
- DLIBS="$DLIBS $i"
- ;;
- *)
- ac_dir="`echo $i|sed 's#[^/]*$##;s#\/$##'`"
- ac_lib="`echo $i|sed 's#^/.*/lib##g;s#\.a##g'`"
- DLIBS="$DLIBS -L$ac_dir -l$ac_lib"
- ;;
- esac
- ;;
- esac
- done
-
- AC_DEFINE(HAVE_IFX,1,[ ])
- PHP_SUBST(INFORMIXDIR)
- PHP_SUBST(IFX_LIBOBJS)
-fi
diff --git a/ext/informix/ifx.dsp b/ext/informix/ifx.dsp
deleted file mode 100644
index 34d8922c03..0000000000
--- a/ext/informix/ifx.dsp
+++ /dev/null
@@ -1,134 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ifx" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ifx - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ifx.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ifx.mak" CFG="ifx - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ifx - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ifx - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ifx - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /D HAVE_IFX=1 /D HAVE_IUS=1 /D "ZTS" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D IFX_VERSION=921 /D COMPILE_DL_INFORMIX=1 /D ZEND_DEBUG=0 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 isqlt09a.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"..\..\Release_TS/php_ifx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ifx - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "ifx___W0"
-# PROP BASE Intermediate_Dir "ifx___W0"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /D HAVE_IFX=1 /D HAVE_IUS=1 /D "ZTS" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D IFX_VERSION=921 /D COMPILE_DL_INFORMIX=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x406 /d "_DEBUG"
-# ADD RSC /l 0x406 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 isqlt09a.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug_TS/php_ifx.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ifx - Win32 Release_TS"
-# Name "ifx - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ifx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ifx.ec
-
-!IF "$(CFG)" == "ifx - Win32 Release_TS"
-
-# Begin Custom Build
-InputPath=.\ifx.ec
-
-".\ifx.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- esql.exe -dcmdl -p -G -subsystem:windows -thread -I..\.. ifx.ec
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ifx - Win32 Debug_TS"
-
-# Begin Custom Build
-InputPath=.\ifx.ec
-
-".\ifx.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- esql.exe -dcmdl -p -G -subsystem:windows -thread -I..\.. ifx.ec
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_informix.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/informix/ifx.ec b/ext/informix/ifx.ec
deleted file mode 100644
index b5402fa071..0000000000
--- a/ext/informix/ifx.ec
+++ /dev/null
@@ -1,4261 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Danny Heijl <Danny.Heijl@cevi.be> : initial cut (ODS 7.2x) |
- | PHP4 port |
- | Christian Cartus <chc@idgruppe.de> : blobs, and IUS 9 |
- | Jouni Ahto <jouni.ahto@exdec.fi> : configuration stuff |
- | Based on the MySQL code by: Zeev Suraski <zeev@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* -------------------------------------------------------------------
- * if you want a function reference : "grep '^\*\*' ifx.ec" will give
- * you a very short one
- * -------------------------------------------------------------------
-*/
-
-/* TODO:
- *
- * ? Safe mode implementation
- */
-
-/* prevent mod_ssl.h's header file from being included. */
-#define AP_HOOK_H
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/php_standard.h"
-#include "php_open_temporary_file.h"
-#include "php_informix.h"
-#include "php_globals.h"
-#include "php_ini.h"
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#include "build-defs.h"
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <netdb.h>
-#include <netinet/in.h>
-#endif
-
-#if HAVE_IFX
-
-/* local function prototypes */
-static void php_ifx_set_default_link(int id TSRMLS_DC);
-static long php_intifx_getType(long id, HashTable *list TSRMLS_DC);
-static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list);
-static long php_intifx_free_blob(long id, HashTable *list TSRMLS_DC);
-static long php_intifx2_free_blob(long id, HashTable *list TSRMLS_DC);
-static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC);
-static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC);
-static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC);
-static char* php_intifx_create_tmpfile(long bid TSRMLS_DC);
-static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC);
-static char* php_intifx_null(TSRMLS_D);
-static long php_intifx_create_char(char* param, long len, HashTable *list);
-static long php_intifx_free_char(long id, HashTable *list TSRMLS_DC);
-static long php_intifx_update_char(long bid, char* param, long len, HashTable *list TSRMLS_DC);
-static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC);
-#if HAVE_IFX_IUS
-static long php_intifxus_create_slob(long create_mode, HashTable *list);
-static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC);
-static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC);
-static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list TSRMLS_DC);
-static long php_intifxus_new_slob(HashTable *list);
-static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC);
-#endif
-
-/* 7.10 on (at least) AIX is missing this */
-#ifndef CLIENT_SQLI_VER
-#define CLIENT_SQLI_VER IFX_VERSION
-#endif
-
-#define TYPE_BLBYTE 0
-#define TYPE_BLTEXT 1
-#define TYPE_SLOB 2
-#define TYPE_CHAR 3
-
-#define BLMODE_INMEM 0
-#define BLMODE_INFILE 1
-
-#define IFX_SCROLL 1
-#define IFX_HOLD 2
-
-EXEC SQL include locator;
-EXEC SQL include sqltypes;
-EXEC SQL include sqlstype;
-
-#include <errno.h>
-
-typedef char IFX[128];
-#define SAFE_STRING(s) ((s)?(s):"")
-#define PHP_IFX_CHECK_CONNECTION(ifx) \
- { \
- if (ifx_check() < 0) { \
- IFXG(sv_sqlcode) = SQLCODE; \
- php_error(E_WARNING,"Set connection %s fails (%s)", ifx, ifx_error(ifx)); \
- RETURN_FALSE; \
- } \
- }
-
-function_entry ifx_functions[] = {
- PHP_FE(ifx_connect, NULL)
- PHP_FE(ifx_pconnect, NULL)
- PHP_FE(ifx_close, NULL)
- PHP_FE(ifx_query, NULL)
- PHP_FE(ifx_prepare, NULL)
- PHP_FE(ifx_do, NULL)
- PHP_FE(ifx_error, NULL)
- PHP_FE(ifx_errormsg, NULL)
- PHP_FE(ifx_affected_rows, NULL)
- PHP_FE(ifx_num_rows, NULL)
- PHP_FE(ifx_num_fields, NULL)
- PHP_FE(ifx_fetch_row, NULL)
- PHP_FE(ifx_free_result, NULL)
- PHP_FE(ifx_htmltbl_result, NULL)
- PHP_FE(ifx_fieldtypes, NULL)
- PHP_FE(ifx_fieldproperties, NULL)
- PHP_FE(ifx_getsqlca, NULL)
-
- PHP_FE(ifx_create_blob, NULL)
- PHP_FE(ifx_free_blob, NULL)
- PHP_FE(ifx_get_blob, NULL)
- PHP_FE(ifx_update_blob, NULL)
- PHP_FE(ifx_copy_blob, NULL)
- PHP_FE(ifx_textasvarchar, NULL)
- PHP_FE(ifx_byteasvarchar, NULL)
- PHP_FE(ifx_nullformat, NULL)
- PHP_FE(ifx_blobinfile_mode, NULL)
-
- PHP_FE(ifx_create_char, NULL)
- PHP_FE(ifx_free_char, NULL)
- PHP_FE(ifx_get_char, NULL)
- PHP_FE(ifx_update_char, NULL)
-
-$ifdef HAVE_IFX_IUS;
- PHP_FE(ifxus_create_slob, NULL)
- PHP_FE(ifxus_close_slob, NULL)
- PHP_FE(ifxus_open_slob, NULL)
- PHP_FE(ifxus_free_slob, NULL)
- PHP_FE(ifxus_read_slob, NULL)
- PHP_FE(ifxus_write_slob, NULL)
- PHP_FE(ifxus_seek_slob, NULL)
- PHP_FE(ifxus_tell_slob, NULL)
-$endif;
-
- {NULL,NULL,NULL}
-};
-
-zend_module_entry ifx_module_entry = {
- STANDARD_MODULE_HEADER,
- "informix",
- ifx_functions,
- PHP_MINIT(ifx),
- PHP_MSHUTDOWN(ifx),
- PHP_RINIT(ifx),
- NULL,
- PHP_MINFO(ifx),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(ifx)
-
-#ifdef COMPILE_DL_INFORMIX
-ZEND_GET_MODULE(ifx)
-#endif
-
-/* True globals, no need for thread safety */
-static int le_link, le_plink, le_result, le_idresult;
-
-#define DUP 1
-
-EXEC SQL DEFINE IFX_SUCCESS 0;
-EXEC SQL DEFINE IFX_WARNING 1;
-EXEC SQL DEFINE IFX_ERROR -1;
-EXEC SQL DEFINE IFX_NODATA 100;
-
-static int ifx_check()
-{
- int _ifx_check;
-
- _ifx_check = IFX_ERROR;
-
- if (SQLSTATE[0] == '0') {
- switch (SQLSTATE[1]) {
- case '0':
- _ifx_check = IFX_SUCCESS;
- break;
- case '1':
- _ifx_check = IFX_WARNING;
- break;
- case '2':
- _ifx_check = IFX_NODATA;
- break;
- default :
- _ifx_check = IFX_ERROR;
- break;
- }
- }
- return _ifx_check;
-}
-
-static char *ifx_error(ifx)
-EXEC SQL BEGIN DECLARE SECTION;
- PARAMETER char *ifx;
-EXEC SQL END DECLARE SECTION;
-{
- char *ifx_err_msg;
- char c;
- int errorcode;
- TSRMLS_FETCH();
-
- if (IFXG(sv_sqlcode) == 0) {
- errorcode = SQLCODE;
- } else {
- errorcode = IFXG(sv_sqlcode);
- }
-
- switch (ifx_check()) {
- case IFX_SUCCESS:
- c = ' ';
- break;
- case IFX_WARNING:
- c = 'W';
- break;
- case IFX_ERROR:
- c = 'E';
- break;
- case IFX_NODATA:
- c = 'N';
- break;
- default:
- c = '?';
- break;
- }
-
- ifx_err_msg = emalloc(64);
- sprintf(ifx_err_msg,"%c [SQLSTATE=%c%c %c%c%c SQLCODE=%d]",
- c,
- SQLSTATE[0],
- SQLSTATE[1],
- SQLSTATE[2],
- SQLSTATE[3],
- SQLSTATE[4],
- errorcode
- );
-
- return(ifx_err_msg);
-}
-
-static void _close_ifx_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-EXEC SQL BEGIN DECLARE SECTION;
- char *link;
-EXEC SQL END DECLARE SECTION;
-
- link=(char *)rsrc->ptr;
-
- EXEC SQL SET CONNECTION :link;
- if (ifx_check() >= 0) {
- EXEC SQL close database;
- EXEC SQL DISCONNECT CURRENT;
- }
- efree(link);
- IFXG(num_links)--;
-}
-
-static void _close_ifx_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-EXEC SQL BEGIN DECLARE SECTION;
- char *link;
-EXEC SQL END DECLARE SECTION;
-
- link = (char *)rsrc->ptr;
-
- EXEC SQL SET CONNECTION :link;
- if (ifx_check() >= 0) {
- EXEC SQL close database;
- EXEC SQL DISCONNECT CURRENT;
- }
- free(link);
- IFXG(num_persistent)--;
- IFXG(num_links)--;
-}
-
-static void ifx_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- IFX_RES *Ifx_Result = (IFX_RES *)rsrc->ptr;
- efree(Ifx_Result);
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("ifx.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY_EX("ifx.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_ifx_globals, ifx_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("ifx.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_ifx_globals, ifx_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("ifx.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, default_host, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.default_user", NULL, PHP_INI_SYSTEM, OnUpdateString, default_user, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.default_password", NULL, PHP_INI_SYSTEM, OnUpdateString, default_password, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.blobinfile", "1", PHP_INI_ALL, OnUpdateInt, blobinfile, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.textasvarchar", "0", PHP_INI_ALL, OnUpdateInt, textasvarchar, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.byteasvarchar", "0", PHP_INI_ALL, OnUpdateInt, byteasvarchar, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.charasvarchar", "0", PHP_INI_ALL, OnUpdateInt, charasvarchar, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.nullformat", "0", PHP_INI_ALL, OnUpdateInt, nullformat, zend_ifx_globals, ifx_globals)
-PHP_INI_END()
-
-static void php_ifx_init_globals(zend_ifx_globals *ifx_globals)
-{
- ifx_globals->num_persistent = 0;
- ifx_globals->nullvalue[0] = 0;
- strcpy(ifx_globals->nullstring, "NULL");
- ifx_globals->num_persistent = 0;
- ifx_globals->sv_sqlcode = 0;
-}
-
-PHP_MINIT_FUNCTION(ifx)
-{
- ZEND_INIT_MODULE_GLOBALS(ifx, php_ifx_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_result = zend_register_list_destructors_ex(ifx_free_result,NULL, "informix result", module_number);
- le_idresult = zend_register_list_destructors_ex(NULL, NULL, "informix id result", module_number);
- le_link = zend_register_list_destructors_ex(_close_ifx_link,NULL, "informix link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL,_close_ifx_plink,"informix persistent link", module_number);
- ifx_module_entry.type = type;
-
- REGISTER_LONG_CONSTANT("IFX_SCROLL", IFX_SCROLL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_HOLD", IFX_HOLD, CONST_CS | CONST_PERSISTENT);
-$ifdef HAVE_IFX_IUS;
- REGISTER_LONG_CONSTANT("IFX_LO_RDONLY", LO_RDONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_WRONLY", LO_WRONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_APPEND", LO_APPEND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_RDWR", LO_RDWR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_BUFFER", LO_BUFFER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_NOBUFFER", LO_NOBUFFER, CONST_CS | CONST_PERSISTENT);
-$endif;
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(ifx)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(ifx)
-{
- IFXG(default_link)=-1;
- IFXG(num_links) = IFXG(num_persistent);
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(ifx)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Informix support", "enabled");
- sprintf(buf, "%ld", IFXG(num_persistent));
- php_info_print_table_row(2, "Active Persistent links", buf);
- sprintf(buf, "%ld", IFXG(num_links));
- php_info_print_table_row(2, "Active links", buf);
- sprintf(buf, "%02.2f", (double)(IFX_VERSION/100.0));
- php_info_print_table_row(2, "ESQL/C Version", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-static void php_ifx_set_default_link(int id TSRMLS_DC)
-{
- if (IFXG(default_link) != -1) {
- zend_list_delete(IFXG(default_link));
- }
- IFXG(default_link) = id;
- zend_list_addref(id);
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_(p)connect(string database, string userid, string password)
-**
-** connects to $database (db@server syntax) using $userid and $password
-**
-** returns a connection id on success or FALSE one error
-** ----------------------------------------------------------------------
-*/
-
-static void php_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
-{
- zval **yyhost, **yyuser, **yypasswd;
- char *hashed_details;
- int hashed_details_length;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *user,*passwd,*host;
- char *ifx;
-EXEC SQL END DECLARE SECTION;
-
- if (PG(sql_safe_mode)) {
- if (ZEND_NUM_ARGS()>0) {
- php_error(E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
- }
- host = passwd = NULL;
- user = php_get_current_user();
- hashed_details_length = strlen(user)+3+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"ifx__%s_",user);
- } else {
- host = IFXG(default_host);
- user = IFXG(default_user);
- passwd = IFXG(default_password);
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- break;
- case 1: {
- if (zend_get_parameters_ex(1, &yyhost)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- }
- break;
- case 2: {
- if (zend_get_parameters_ex(2, &yyhost, &yyuser)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- }
- break;
- case 3: {
- if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- hashed_details_length = sizeof("ifx___")-1+ strlen(SAFE_STRING(host))+
- strlen(SAFE_STRING(user))+
- strlen(SAFE_STRING(passwd));
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"ifx_%s_%s_%s", SAFE_STRING(host),
- SAFE_STRING(user),
- SAFE_STRING(passwd));
- }
-
- IFXG(sv_sqlcode) = 0;
-
- if (!IFXG(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (IFXG(max_links)!=-1 && IFXG(num_links) >= IFXG(max_links)) {
- php_error(E_WARNING, "Informix: Too many open links (%d)", IFXG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (IFXG(max_persistent)!=-1 && IFXG(num_persistent) >= IFXG(max_persistent)) {
- php_error(E_WARNING, "Informix: Too many open persistent links (%d)", IFXG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the link */
- ifx = (char *) malloc(sizeof(IFX));
- IFXG(connectionid)++;
- sprintf(ifx,"%s%x", user, IFXG(connectionid));
-
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,ifx_error(ifx));
- free(ifx);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- new_le.type = le_plink;
- new_le.ptr = ifx;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE)
- {
- free(ifx);
- efree(hashed_details);
- RETURN_FALSE;
- }
- IFXG(num_persistent)++;
- IFXG(num_links)++;
- } else { /* we do */
- if (le->type != le_plink) {
- RETURN_FALSE;
- }
- /* ensure that the link did not die */
- ifx = le->ptr;
- EXEC SQL SET CONNECTION :ifx;
- if (ifx_check() == IFX_ERROR) { /* the link died */
- ifx = le->ptr; /* reconnect silently */
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING, "Informix: Link to server lost, unable to reconnect (%s)", ifx_error(ifx));
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- ifx = le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, ifx, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual ifx link sits.
- * if it doesn't, open a new ifx link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1, (void **) &index_ptr) == SUCCESS)
- {
- int type,link;
- void *ptr;
-
- if (index_ptr->type != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- /* ensure that the link is not closed */
- ifx = ptr;
- EXEC SQL SET CONNECTION :ifx;
- if (ifx_check() == IFX_ERROR) {
- /* the link is closed */
- ifx = ptr; /* reconnect silently */
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Informix: Unable to connect (%s)", ifx_error(ifx));
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- zend_list_addref(link);
- return_value->value.lval = link;
- php_ifx_set_default_link(link TSRMLS_CC);
- return_value->type = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) {
- php_error(E_WARNING, "Informix: Too many open links (%d)", IFXG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- ifx = (char *) emalloc(sizeof(IFX));
- IFXG(connectionid)++;
- sprintf(ifx,"connec%x", IFXG(connectionid));
-
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"ifx_connect: %s", ifx_error(ifx));
- efree(hashed_details);
- efree(ifx);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, ifx, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) return_value->value.lval;
- new_index_ptr.type = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1, (void *) &new_index_ptr, sizeof(list_entry), NULL) == FAILURE)
- {
- efree(hashed_details);
- RETURN_FALSE;
- }
- IFXG(num_links)++;
- }
- efree(hashed_details);
- php_ifx_set_default_link(return_value->value.lval TSRMLS_CC);
-}
-
-/* {{{ proto int ifx_connect([string database [, string userid [, string password]]])
- Connects to database using userid/password, returns connection id */
-PHP_FUNCTION(ifx_connect)
-{
- php_ifx_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto int ifx_pconnect([string database [, string userid [, string password]]])
- Connects to database using userid/password, returns connection id */
-PHP_FUNCTION(ifx_pconnect)
-{
- php_ifx_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_close(int connid)
-**
-** closes connection connid
-** always returns TRUE
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_close([int connid])
- Close informix connection */
-PHP_FUNCTION(ifx_close)
-{
- zval **ifx_link = NULL;
- int id;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx;
-EXEC SQL END DECLARE SECTION;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = IFXG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &ifx_link)==FAILURE) {
- RETURN_FALSE;
- }
- id=-1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(ifx_link));
- }
-
- if (id!=-1 || (ifx_link && Z_RESVAL_PP(ifx_link)==IFXG(default_link))) {
- zend_list_delete(IFXG(default_link));
- IFXG(default_link) = -1;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_query(string query, int connid
-** [, int cursortype] [, array blobidarray])
-** cursortype and blobidarray are optional
-**
-** executes query query on connection connid
-** for select queries a cursor is declared and opened
-** non-select queries are "execute immediate"
-** select queries accept an optional cursortype param:
-** IFX_SCROLL, IFX_HOLD (or'ed mask)
-** non-select queries accept an optional "blobarryid" parameter
-** blobsupport: mark the blob-column(s) with ? in the insert/update query
-** and add a blob-id-array-functionparameter
-** select queries return "blob-ids" for blob columns
-** except if text/byteasvarchar is set
-** example: ifx_query("insert into catalog (stock_num, manu_code,
-** cat_descr,cat_picture) values(1,'HRO',?,?)",$cid,$bidarray);
-**
-** returns a "result id" on success or FALSE on error
-** also sets "affected_rows for retrieval by ifx_affected_rows()
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_query(string query, int connid [, int cursortype] [, array idarray])
- Perform a query on a given connection */
-PHP_FUNCTION(ifx_query)
-{
- zval **query, **ifx_link, **cursortype, **dummy;
- int id=-1;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char cursorid[32]; /* query cursor id */
- char statemid[32]; /* statement id */
- char descrpid[32]; /* descriptor id */
- char *statement; /* query text */
- int fieldcount; /* field count */
- int i; /* field index */
- short fieldtype;
- loc_t *locator;
- int loc_t_type=CLOCATORTYPE; /* WORKAROUND:TYPE=CLOCATORTYPE doesn't work, */
- int sqlchar_type=SQLCHAR; /* don't ask me, why. */
- char *char_tmp;
- long len;
- int indicator;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
-EXEC SQL END DECLARE SECTION;
-
- char *blobfilename;
- int locind;
- int ctype;
- int affected_rows;
- long sqlerrd[6];
- int e;
- int query_type;
- int cursoryproc;
- int argc=ZEND_NUM_ARGS();
- long ifx_type;
-
- if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
-
- IFXG(sv_sqlcode) = 0;
- affected_rows = -1; /* invalid */
-
- convert_to_string_ex(query);
- statement = Z_STRVAL_PP(query);
-
- IFXG(cursorid)++;
- sprintf(statemid, "statem%x", IFXG(cursorid));
- sprintf(cursorid, "cursor%x", IFXG(cursorid));
- sprintf(descrpid, "descrp%x", IFXG(cursorid));
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- EXEC SQL PREPARE :statemid FROM :statement;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Prepare fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
-
- affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */
- for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
-
- EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx));
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Describe fails (%s)", ifx_error(ifx));
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- query_type = sqlca.sqlcode;
-
- Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
- if (Ifx_Result == NULL) {
- php_error(E_WARNING,"Out of memory allocating IFX_RES");
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- /* initialize result data structure */
-
- Ifx_Result->rowid = 0;
- strcpy(Ifx_Result->connecid, ifx);
- strcpy(Ifx_Result->descrpid, descrpid);
- for (i = 0; i < MAX_RESID; ++i) {
- Ifx_Result->res_id[i] = -1;
- }
-
- cursoryproc = 0;
- if (query_type == SQ_EXECPROC) {
- EXEC SQL GET DESCRIPTOR :descrpid :i = COUNT;
- if (i > 0) {
- cursoryproc = 1;
- }
- }
-
- Ifx_Result->iscursory = -1; /* prevent ifx_do */
- Ifx_Result->paramquery=0;
-
- if ((query_type != 0) && (!cursoryproc)) { /* NO RESULT SET */
- /* ##
- ## NONSELECT-STATEMENT
- ##
- */
- zval **pblobidarr, **tmp;
-
- Ifx_Result->iscursory = 0;
- strcpy(Ifx_Result->cursorid, "");
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->statemid, statemid);
-
- if(argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- if(argc == 3) {
- if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Can't get blob array param");
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"blob-parameter is not an array");
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
- i=1;
- while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) {
- convert_to_long(*tmp);
- if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) {
- EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i;
- }
-
- ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC);
- switch(ifx_type) {
- case TYPE_BLTEXT:
- case TYPE_BLBYTE:
- locator=php_intifx_get_blobloc((int)((*tmp)->value.lval),&EG(regular_list) TSRMLS_CC);
- if(locator==NULL) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"%d is not a Informix blob-result index", (int)((*tmp)->value.lval));
- RETURN_FALSE;
- }
- if(locator->loc_loctype==LOCFNAME) {
- locator->loc_oflags=LOC_RONLY;
- }
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE= :loc_t_type;
- break;
-
- case TYPE_CHAR:
- len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC);
- indicator=0;
- if(char_tmp==NULL || len<0) {
- indicator=-1;
- }
- len++;
-
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i
- DATA= :char_tmp,
- LENGTH= :len,
- INDICATOR= :indicator,
- TYPE= :sqlchar_type;
- break;
- }
- i++;
- zend_hash_move_forward((*pblobidarr)->value.ht);
- }
- Ifx_Result->paramquery=1;
- EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
- } else {
- EXEC SQL EXECUTE :statemid;
- }
-
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Execute immediate fails : %s (%s)", statement, ifx_error(ifx));
- RETURN_FALSE;
- }
- Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
- } else {
- /* ##
- ## SELECT-STATEMENT
- ##
- */
-
- ctype = 0; /* preset */
-
- switch(argc) {
- case 2:
- break;
- case 3:
- if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(cursortype);
- ctype = Z_LVAL_PP(cursortype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlerrd[e];
-
- EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Can not get descriptor %s (%s)", descrpid, ifx_error(ifx));
- RETURN_FALSE;
- }
-
- Ifx_Result->numcols = fieldcount;
- Ifx_Result->isscroll = Ifx_Result->ishold = 0;
-
- if (ctype & IFX_SCROLL) {
- Ifx_Result->isscroll = 1;
- }
- if (ctype & IFX_HOLD) {
- Ifx_Result->ishold = 1;
- }
-
- if (Ifx_Result->isscroll) {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR FOR :statemid;
- }
- } else {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid CURSOR FOR :statemid;
- }
- }
-
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Declare cursor fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
-
- EXEC SQL OPEN :cursorid;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- EXEC SQL free :cursorid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Open cursor fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
- strcpy(Ifx_Result->cursorid, cursorid);
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->statemid, statemid);
-
- /* check for text/blob columns */
- locind = 0;
- for (i = 1; i <= fieldcount; ++i) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
-$endif;
- ) {
- int bid = 0;
- if(fieldtype==SQLTEXT) {
- bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list));
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
- if(fieldtype==SQLBYTES) {
- if(IFXG(blobinfile)==0) {
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list));
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- } else {
- blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC);
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, blobfilename,strlen(blobfilename),&EG(regular_list));
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- locator->loc_oflags=LOC_WONLY;
- }
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
-$ifdef HAVE_IFX_IUS;
- if(fieldtype==SQLUDTFIXED) {
- bid=php_intifxus_new_slob(&EG(regular_list));
- slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- }
-$endif;
- Ifx_Result->res_id[locind]=bid;
- ++locind;
- }
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, Ifx_Result, le_result);
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
-** int ifx_prepare(string query, int connid,
-** [, int cursortype] [, array blobidarry])
-**
-** $hold, $scroll are optional and valid only for select queries
-** $blobidarray is optional, an array of blob id's
-**
-** prepares query $query on connection $connid
-** select queries accept an optional cursortype param: IFX_SCROLL, IFX_HOLD (or'ed mask)
-** blobsupport: mark the blob-column with ? and add a blob-id-functionparameter
-** example: ifx_query("insert into catalog (stock_num, manu_code ,cat_descr,
-** cat_picture) values(1,'HRO',?,?)",$cid,$bid1,$bid2);
-**
-** returns a "result id" on success or FALSE on error
-** also sets "affected_rows for retrieval by ifx_affected_rows
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_prepare(string query, int connid [, int cursortype] [, array idarray])
- Prepare a query on a given connection */
-PHP_FUNCTION(ifx_prepare)
-{
- zval **query, **ifx_link, **cursortype, **dummy;
- int id=-1;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char cursorid[32]; /* query cursor id */
- char statemid[32]; /* statement id */
- char descrpid[32]; /* descriptor id */
- char *statement; /* query text */
- int fieldcount; /* field count */
- int i; /* field index */
- loc_t *locator;
- int loc_t_type=CLOCATORTYPE; /* WORKAROUND: TYPE=CLOCATORTYPE doesn't work, */
- int sqlchar_type=SQLCHAR; /* don't ask me, why. */
- char *char_tmp;
- long len;
- int indicator;
- long sqlerrd[6];
- int e;
-EXEC SQL END DECLARE SECTION;
-
- int ctype;
- int affected_rows;
- int query_type;
- int cursoryproc;
- int argc=ZEND_NUM_ARGS();
- long ifx_type;
-
- if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
-
- IFXG(sv_sqlcode) = 0;
- affected_rows = -1; /* invalid */
-
- convert_to_string_ex(query);
- statement = Z_STRVAL_PP(query);
-
- IFXG(cursorid)++;
- sprintf(statemid, "statem%x", IFXG(cursorid));
- sprintf(cursorid, "cursor%x", IFXG(cursorid));
- sprintf(descrpid, "descrp%x", IFXG(cursorid));
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- EXEC SQL PREPARE :statemid FROM :statement;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Prepare fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
-
- affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */
- for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
-
- EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx));
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Describe fails (%s)", ifx_error(ifx));
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- query_type = sqlca.sqlcode;
-
- Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
- if (Ifx_Result == NULL) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Out of memory allocating IFX_RES");
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- /* initialize result data structure */
- Ifx_Result->rowid = 0;
- strcpy(Ifx_Result->connecid, ifx);
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->statemid, statemid);
- for (i = 0; i < MAX_RESID; ++i) {
- Ifx_Result->res_id[i] = -1;
- }
-
- cursoryproc = 0;
- if (query_type == SQ_EXECPROC) {
- EXEC SQL GET DESCRIPTOR :descrpid :i = COUNT;
- if (i > 0) {
- cursoryproc = 1;
- }
- }
-
- Ifx_Result->iscursory = -1; /* prevent ifx_do */
- Ifx_Result->paramquery=0;
-
- if ((query_type != 0) && (!cursoryproc)) { /* NO RESULT SET */
- /* ##
- ## NONSELECT-STATEMENT
- ##
- */
- zval **pblobidarr, **tmp;
-
- Ifx_Result->iscursory = 0;
- strcpy(Ifx_Result->cursorid, cursorid);
- strcpy(Ifx_Result->cursorid, "");
- strcpy(Ifx_Result->descrpid, descrpid);
-
- if(argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- if(argc == 3) {
- Ifx_Result->paramquery=1;
- if (zend_get_parameters_ex(3, &dummy, &dummy,&pblobidarr) == FAILURE) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Can't get blob array param");
- RETURN_FALSE;
- }
-
- if((*pblobidarr)->type != IS_ARRAY) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"blob-parameter not an array");
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
- i=1;
- while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) {
- convert_to_long(*tmp);
- if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) {
- EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i;
- }
-
- ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC);
- switch(ifx_type) {
- case TYPE_BLTEXT:
- case TYPE_BLBYTE:
- locator=php_intifx_get_blobloc((int)((*tmp)->value.lval),&EG(regular_list) TSRMLS_CC);
- if(locator==NULL) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"%d is not a Informix blob-result index", (int)((*tmp)->value.lval));
- RETURN_FALSE;
- }
- if(locator->loc_loctype==LOCFNAME) {
- locator->loc_oflags=LOC_RONLY;
- }
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE=:loc_t_type;
- break;
- case TYPE_CHAR:
- len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC);
-
- indicator=0;
- if(char_tmp==NULL || len < 0) {
- indicator=-1;
- }
- len++;
-
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i
- DATA= :char_tmp,
- LENGTH= :len,
- INDICATOR= :indicator,
- TYPE= :sqlchar_type;
- break;
- }
- i++;
- zend_hash_move_forward((*pblobidarr)->value.ht);
- }
- }
-
- Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlerrd[e];
-
- } else {
- /* ##
- ## SELECT-STATEMENT
- ##
- */
- ctype = 0; /* preset */
-
- switch(argc) {
- case 2:
- break;
- case 3:
- if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(cursortype);
- ctype = Z_LVAL_PP(cursortype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- strcpy(Ifx_Result->cursorid, cursorid);
- Ifx_Result->iscursory = 1;
-
- Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlerrd[e];
-
- EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error(E_WARNING,"Can not get descriptor %s (%s)", descrpid, ifx_error(ifx));
- RETURN_FALSE;
- }
- Ifx_Result->numcols = fieldcount;
- Ifx_Result->isscroll = Ifx_Result->ishold = 0;
-
- if (ctype & IFX_SCROLL) {
- Ifx_Result->isscroll = 1;
- }
- if (ctype & IFX_HOLD) {
- Ifx_Result->ishold = 1;
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, Ifx_Result, le_result);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_do(int resultid)
-**
-** executes a previously prepared query or opens a cursor for it
-**
-** returns TRUE on success, false on error
-** does NOT free $resultid on error !!!
-**
-** also sets (real) affected_rows for non-select statements
-** for retrieval by ifx_affected_rows
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_do(int resultid)
- Executes a previously prepared query or opens a cursor for it */
-PHP_FUNCTION(ifx_do)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* field index */
- short fieldtype;
- loc_t *locator;
- int e;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
-EXEC SQL END DECLARE SECTION;
-
- int locind;
- char *blobfilename;
-
- if(ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)==FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- IFXG(sv_sqlcode) = 0;
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- if (Ifx_Result->iscursory < 0) {
- php_error(E_WARNING, "Resultindex %d is not a prepared query", Z_LVAL_PP(result));
- RETURN_FALSE;
- }
-
- if (Ifx_Result->iscursory==0) { /* execute immediate */
- if(Ifx_Result->paramquery!=0) {
- EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
- } else {
- EXEC SQL EXECUTE :statemid;
- }
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Execute immediate fails : %s ", ifx_error(ifx));
- RETURN_FALSE;
- }
- Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
- } else { /* open cursor */
- if (Ifx_Result->isscroll) {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR FOR :statemid;
- }
- } else {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid CURSOR FOR :statemid;
- }
- }
-
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Declare cursor fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
-
- EXEC SQL OPEN :cursorid;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Open cursor fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
-
- /* check for text/blob columns */
- locind = 0;
- for (i = 1; i <= fieldcount; ++i) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
-$endif;
- ) {
-
- int bid = 0;
- if(fieldtype==SQLTEXT) {
- bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list));
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
- if(fieldtype==SQLBYTES) {
- if(IFXG(blobinfile)==0) {
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list));
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- } else {
- blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC);
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE,blobfilename,strlen(blobfilename),&EG(regular_list));
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- locator->loc_oflags=LOC_WONLY;
- }
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
-$ifdef HAVE_IFX_IUS;
- if(fieldtype==SQLUDTFIXED) {
- bid=php_intifxus_new_slob(&EG(regular_list));
- slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- }
-$endif;
- Ifx_Result->res_id[locind]=bid;
- ++locind;
- }
- }
- } /* end open cursor */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** string ifx_error([int connection_id]);
-**
-** returns the Informix error codes (SQLSTATE & SQLCODE)
-**
-** connection id is not checked, but remains for compatibility
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_error([int connection_id])
- Returns the Informix error codes (SQLSTATE & SQLCODE) */
-PHP_FUNCTION(ifx_error)
-{
- zval **ifx_link;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = IFXG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &ifx_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- RETURN_STRING(ifx_error(0),0); /* ifx_error returns emalloced string */
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** string ifx_errormsg([int errorcode])
-**
-** returns the Informix errormessage associated with
-** the most recent Informix error if SQLCODE is nonzero, or,
-** when the optional "errocode" param is present, the errormessage
-** corresponding to "errorcode".
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_errormsg([int errorcode])
- Returns the Informix errormessage associated with */
-PHP_FUNCTION(ifx_errormsg)
-{
- zval **errcode;
- int ifx_errorcode;
- int msglen, maxmsglen;
- char *ifx_errmsg;
- char * returnmsg;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- if (IFXG(sv_sqlcode) == 0) {
- ifx_errorcode = SQLCODE;
- } else {
- ifx_errorcode = IFXG(sv_sqlcode);
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &errcode)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(errcode);
- ifx_errorcode = Z_LVAL_PP(errcode);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- maxmsglen = 255;
- ifx_errmsg = (char *)malloc(maxmsglen+1);
- if (ifx_errorcode != 0) {
- rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
- if (msglen > maxmsglen) {
- maxmsglen = msglen + 1;
- free(ifx_errmsg);
- ifx_errmsg = (char *)malloc(maxmsglen + 1);
- rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
- }
- } else {
- ifx_errmsg[0] = 0;
- }
-
- returnmsg = (char *) emalloc(strlen(ifx_errmsg) + 128);
- sprintf(returnmsg,ifx_errmsg, sqlca.sqlerrm);
- free(ifx_errmsg);
- RETURN_STRING(returnmsg,0);
-}
-/* }}} */
-
-/* --------------------------------------------------------------
-** int ifx_affected_rows(int resultid)
-**
-** returns the number of rows affected by query $resultid
-**
-** for selects : estimated number of rows (sqlerrd[0])
-** for insert/update/delete : real number (sqlerrd[2])
-** ---------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_affected_rows(int resultid)
- Returns the number of rows affected by query identified by resultid */
-PHP_FUNCTION(ifx_affected_rows)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result))==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- IFXG(sv_sqlcode )= 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
- RETURN_LONG(Ifx_Result->affected_rows);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** array ifx_fetch_row(int resultid [, mixed $position])
-**
-** fetches the next row, or if using a scroll cursor, and position
-** is present, the row as given in position, into an associative
-** array with the fieldnames as key
-**
-** returns FALSE on error
-**
-** position can be : "FIRST", "NEXT", "LAST", "PREVIOUS", "CURRENT"
-** or an absolute row number
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_fetch_row(int resultid [, mixed position])
- Fetches the next row or <position> row if using a scroll cursor */
-PHP_FUNCTION(ifx_fetch_row)
-{
- zval **result, **position;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- int fieldleng; /* field length */
-$ifdef HAVE_IFX_IUS;
- ifx_int8_t int8_var;
- lvarchar *lvar_tmp;
-$endif;
- short indicator;
- int int_data;
- char *char_data;
- long date_data;
- interval intvl_data = {0};
- datetime dt_data = {0};
- decimal dec_data = {0};
- short short_data;
- loc_t *locator_b;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
- float float_data;
- double double_data;
- int fetch_row;
-EXEC SQL END DECLARE SECTION;
-
- int num_fields;
- int locind,bid,bid_b;
- char string_data[256];
- long long_data;
- char *p;
- char *blobfilename;
- char *fetch_pos;
- char *nullstr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- fetch_pos = NULL;
- fetch_row = 0;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &position)==FAILURE) {
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(position) != IS_STRING) {
- fetch_pos = NULL;
- fetch_row = Z_LVAL_PP(position);
- } else {
- fetch_pos = Z_STRVAL_PP(position);
- fetch_row = 0;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- nullstr=php_intifx_null(TSRMLS_C);
- IFXG(sv_sqlcode) = 0;
-
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
- php_error(E_WARNING,"Not a select cursor !");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- if (!Ifx_Result->isscroll) {
- EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
- } else {
- if (fetch_pos == NULL) {
- if (fetch_row != 0) {
- EXEC SQL FETCH ABSOLUTE :fetch_row :cursorid USING SQL DESCRIPTOR :descrpid;
- } else {
- EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;
- }
- } else {
- if (!strcasecmp(fetch_pos,"NEXT")) {
- EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"PREVIOUS")) {
- EXEC SQL FETCH PREVIOUS :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"FIRST")) {
- EXEC SQL FETCH FIRST :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"LAST")) {
- EXEC SQL FETCH LAST :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"CURRENT")) {
- EXEC SQL FETCH CURRENT :cursorid USING SQL DESCRIPTOR :descrpid;
- } else {
- php_error(E_WARNING, "invalid positioning arg on fetch");
- }
- }
- }
-
- if(SQLCODE!=-451) {
- switch (ifx_check()) {
- case IFX_ERROR:
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING, "Can not fetch row on cursor %s (%s)", ifx_error(ifx), cursorid);
- RETURN_FALSE;
- break;
- case IFX_NODATA:
- RETURN_FALSE;
- break;
- default:
- break;
- }
- }
- Ifx_Result->rowid++;
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- num_fields = fieldcount;
-
- locind = 0;
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i
- :fieldtype = TYPE,
- :fieldname = NAME,
- :fieldleng = LENGTH,
- :indicator = INDICATOR;
-
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
- RETURN_FALSE;
- }
-
- p = fieldname; /* rtrim fieldname */
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
-
- if (indicator == -1) { /* NULL */
- if( (IFXG(textasvarchar)==0 && fieldtype==SQLTEXT) ||
- (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) {
- bid_b=Ifx_Result->res_id[locind];
- bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
- php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC);
- add_assoc_long(return_value,fieldname,bid);
- ++locind;
- continue;
- }
- if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
-$endif;
- ) {
- ++locind;
- }
- add_assoc_string(return_value, fieldname, nullstr, DUP);
- continue;
- } /* NULL */
-
- switch (fieldtype) {
- case SQLSERIAL :
- case SQLINT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;
- long_data = int_data;
- sprintf(string_data,"%ld", long_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLSMINT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;
- long_data = short_data;
- sprintf(string_data,"%ld", long_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLDECIMAL :
- case SQLMONEY :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;
- memset(string_data, 0x20, 64);
- dectoasc(&dec_data, string_data, 63, -1);
- for (p =string_data; *p != ' '; ++p) ;
- *p = 0;
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLSMFLOAT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;
- double_data = float_data;
- sprintf(string_data,"%17.17g", double_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLFLOAT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;
- sprintf(string_data,"%17.17g", double_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLDATE :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;
- rdatestr(date_data, string_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLDTIME :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;
- dttoasc(&dt_data, string_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLINTERVAL :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :intvl_data = DATA;
- intoasc(&intvl_data, string_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLSERIAL8 :
- case SQLINT8 :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;
- memset(string_data, ' ', sizeof(string_data));
- ifx_int8toasc(&int8_var,string_data,200);
- p = string_data; /* rtrim string_data */
- while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;
- *p = 0;
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLLVARCHAR :
- ifx_var_flag(&lvar_tmp,1);
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;
- fieldleng=ifx_var_getlen(&lvar_tmp);
- if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng);
- ifx_var_dealloc(&lvar_tmp);
- add_assoc_stringl(return_value, fieldname, char_data, fieldleng,0);
- break;
- case SQLBOOL :
-$endif;
- case SQLVCHAR :
- case SQLNVCHAR :
- case SQLCHAR :
- case SQLNCHAR :
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;
- if (IFXG(charasvarchar) != 0 && (fieldtype == SQLCHAR || fieldtype == SQLNCHAR)) {
- ldchar(char_data, fieldleng, char_data);
- }
- add_assoc_string(return_value, fieldname, char_data, DUP);
- efree(char_data);
- char_data = NULL;
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED :
- bid_b=Ifx_Result->res_id[locind];
- add_assoc_long(return_value,fieldname,bid_b);
- bid=php_intifxus_new_slob(&EG(regular_list));
- slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- Ifx_Result->res_id[locind]=bid;
- ++locind;
- break;
-$endif;
- case SQLBYTES :
- case SQLTEXT :
- bid_b=Ifx_Result->res_id[locind];
- locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC);
- ++locind;
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
-
- /* work around for ESQL/C bug with NULL values and BLOBS */
- if ((locator_b->loc_status < 0) && (locator_b->loc_bufsize == 0)){
- locator_b->loc_indicator = -1;
- }
-
- /* normal check for NULL values */
- if (locator_b->loc_indicator == -1) {
- if((IFXG(textasvarchar)==0 && fieldtype==SQLTEXT)
- || (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) {
- bid_b=Ifx_Result->res_id[locind];
- bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
- php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC);
- add_assoc_long(return_value,fieldname,bid);
- break;
- }
- if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
-$endif;
- ) {
- add_assoc_string(return_value, fieldname, nullstr, DUP);
- break;
- }
- }
-
- if (locator_b->loc_status < 0) { /* blob too large */
- php_error(E_WARNING,"no memory (%d bytes) for blob", locator_b->loc_bufsize);
- RETURN_FALSE;
- }
-
- /* copy blob */
- bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
-
- /* and generate new tempfile for next row */
- if(locator_b->loc_loctype==LOCFNAME) {
- blobfilename=php_intifx_create_tmpfile(bid_b TSRMLS_CC);
- php_intifx_update_blob(bid_b,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
- efree(blobfilename);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator_b;
- }
-
- /* return blob as VARCHAR ? */
- /* note that in case of "blobinfile" */
- /* you get the file name */
- /* a new one for every row ! */
- if((IFXG(textasvarchar) !=0
- && fieldtype==SQLTEXT)
- || (IFXG(byteasvarchar)!=0
- && fieldtype==SQLBYTES)) {
-
- char *content;
- long lg;
-
- lg=php_intifx_get_blob(bid, &EG(regular_list), &content TSRMLS_CC);
- if(content == NULL || lg < 0) {
- add_assoc_string(return_value,fieldname,nullstr,DUP);
- } else {
- add_assoc_stringl(return_value,fieldname,content,lg,DUP);
- }
- php_intifx_free_blob(bid, &EG(regular_list) TSRMLS_CC);
- break;
- }
-
- /* no, return as blob id */
- add_assoc_long(return_value,fieldname,bid);
- break;
- default :
- sprintf(string_data,"ESQL/C : %s : unsupported field type[%d]", fieldname, fieldleng);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- }
- continue;
- }
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_htmltbl_result(int resultid [, string htmltableoptions])
-**
-** formats all rows of the resultid query into a html table
-** the optional second argument is a string of <table> tag options
-**
-** returns the number of rows printed or FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_htmltbl_result(int resultid [, string htmltableoptions])
- Formats all rows of the resultid query into a html table */
-PHP_FUNCTION(ifx_htmltbl_result)
-{
- zval **result, **arg2;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- int fieldleng; /* field length */
-$ifdef HAVE_IFX_IUS;
- ifx_int8_t int8_var;
- lvarchar *lvar_tmp;
-$endif;
- short indicator;
- int int_data;
- char *char_data = NULL;
- long date_data;
- interval intvl_data = {0};
- datetime dt_data = {0};
- decimal dec_data = {0};
- short short_data;
- float float_data;
- double double_data;
- loc_t *locator_b;
-EXEC SQL END DECLARE SECTION;
-
- char *content;
- char *copy_content;
- long lg;
- char *nullstr;
- int num_fields;
- char string_data[256];
- long long_data;
- char *p;
- int locind,bid_b;
- char *table_options;
- int moredata;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- table_options = NULL;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- table_options = (*arg2)->value.str.val;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
- php_error(E_WARNING,"Not a select cursor !");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- /* try to fetch the first row */
- EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
- switch (ifx_check()) {
- case IFX_ERROR:
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid);
- RETURN_FALSE;
- break;
- case IFX_NODATA:
- moredata = 0;
- break;
- default:
- Ifx_Result->rowid = moredata = 1;
- break;
- }
-
- if(!moredata) {
- php_printf("<h2>No rows found</h2>\n");
- RETURN_LONG(0);
- }
- num_fields = fieldcount;
- nullstr = php_intifx_null(TSRMLS_C);
-
- /* start table tag */
- if (table_options == NULL) {
- php_printf("<table><tr>");
- } else {
- php_printf("<table %s><tr>", table_options);
- }
-
- /* table headings */
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
- RETURN_FALSE;
- }
-
- p = fieldname; /* Capitalize and rtrim fieldname */
- *p = toupper(*p);
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
- php_printf("<th>%s</th>", fieldname);
- }
- php_printf("</tr>\n");
-
- /* start spitting out rows untill none left */
- while (moredata) {
- php_printf("<tr>");
- locind = 0;
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i
- :fieldtype = TYPE,
- :fieldleng = LENGTH,
- :indicator = INDICATOR;
-
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
- RETURN_FALSE;
- }
-
- if (indicator == -1) { /* NULL */
- if(fieldtype==SQLTEXT || fieldtype==SQLBYTES) {
- ++locind;
- }
- php_printf("<td>%s</td>", nullstr);
- continue;
- }
-
- switch (fieldtype) {
- case SQLSERIAL :
- case SQLINT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;
- long_data = int_data;
- sprintf(string_data,"%ld", long_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLSMINT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;
- long_data = short_data;
- sprintf(string_data,"%ld", long_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLDECIMAL :
- case SQLMONEY :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;
- memset(string_data, 0x20, 64);
- dectoasc(&dec_data, string_data, 63, -1);
- for (p =string_data; *p != ' '; ++p) ;
- *p = 0;
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLSMFLOAT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;
- double_data = float_data;
- sprintf(string_data,"%17.17g", double_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLFLOAT :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;
- sprintf(string_data,"%17.17g", double_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLDATE :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;
- rdatestr(date_data, string_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLDTIME :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;
- dttoasc(&dt_data, string_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLINTERVAL:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :intvl_data = DATA;
- intoasc(&intvl_data, string_data);
- php_printf("<td>%s</td>", string_data);
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLSERIAL8:
- case SQLINT8 :
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;
- memset(string_data, ' ', sizeof(string_data));
- ifx_int8toasc(&int8_var,string_data,200);
- p = string_data; /* rtrim string_data */
- while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;
- *p = 0;
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLLVARCHAR:
- ifx_var_flag(&lvar_tmp,1);
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;
- fieldleng=ifx_var_getlen(&lvar_tmp);
- if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */
-
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng);
- ifx_var_dealloc(&lvar_tmp);
- add_assoc_stringl(return_value, fieldname, char_data, fieldleng,0);
- break;
- case SQLBOOL :
-$endif;
- case SQLCHAR :
- case SQLVCHAR :
- case SQLNCHAR :
- case SQLNVCHAR :
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;
- if (IFXG(charasvarchar) != 0 && (fieldtype == SQLCHAR || fieldtype == SQLNCHAR)) {
- ldchar(char_data, fieldleng, char_data);
- }
- php_printf("<td>%s</td>", char_data);
- efree(char_data);
- char_data = NULL;
- break;
- case SQLTEXT :
- /* treated always as a long VARCHAR here */
- /* if blobinbfile, too bad */
- bid_b=Ifx_Result->res_id[locind];
- ++locind;
- locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC);
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
-
- /* work around for ESQL/C bug with NULL values and BLOBS */
- if ((locator_b->loc_status < 0) && (locator_b->loc_bufsize == 0)){
- locator_b->loc_indicator = -1;
- }
-
- /* normal check for NULL values */
- if (locator_b->loc_indicator == -1) {
- if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
-$endif;
- ) {
- php_printf("<td>%s</td>", nullstr);
- break;
- }
- }
- if (locator_b->loc_status < 0) { /* blob too large */
- php_error(E_WARNING,"no memory (%d bytes) for blob", locator_b->loc_bufsize);
- RETURN_FALSE;
- }
-
- /* get blob contents */
- lg=php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
-
- if(content==NULL || lg<0) {
- php_printf("<td>%s</td>", nullstr);
- } else {
- /* need an extra byte for string terminator */
- copy_content = malloc(lg + 1);
- if (copy_content == NULL) {
- php_error(E_WARNING,"no memory for TEXT column");
- RETURN_FALSE;
- }
- memcpy(copy_content, content, lg);
- copy_content[lg]=0;
- php_printf("<td>%s</td>", copy_content);
- free(copy_content);
- }
- break;
-
- case SQLBYTES :
- ++locind;
- php_printf("<td>(BYTE)</td>");
- break;
- default :
- sprintf(string_data, "ESQL/C: %s : unsupported field type[%d]", fieldname, fieldleng);
- php_printf("<td>%s</td>", string_data);
- break;
- }
- continue;
- }
- php_printf("</tr>\n");
- /* fetch next row */
- EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
- switch (ifx_check()) {
- case IFX_ERROR:
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid);
- RETURN_FALSE;
- break;
- case IFX_NODATA:
- moredata = 0;
- break;
- default:
- break;
- } /* switch() */
- Ifx_Result->rowid++;
- } /* endwhile (moredata); */
- php_printf("</table>\n");
- RETURN_LONG(Ifx_Result->rowid);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** array ifx_fieldtypes(int resultid)
-**
-** returns an associative array with fieldnames as key
-** and SQL fieldtypes as data for query $resultid
-**
-** returns FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_fieldtypes(int resultid)
- Returns an associative array with fieldnames as key for query <resultid> */
-PHP_FUNCTION(ifx_fieldtypes)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- char *char_data = NULL;
-EXEC SQL END DECLARE SECTION;
- int num_fields;
- char *p;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
- php_error(E_WARNING,"Not a select cursor !");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- num_fields = fieldcount;
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME, :fieldtype = TYPE;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
- RETURN_FALSE;
- }
-
- p = fieldname; /* rtrim fieldname */
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
-
- switch (fieldtype) {
- case SQLSERIAL :
- char_data = "SQLSERIAL";
- break;
- case SQLINT :
- char_data = "SQLINT";
- break;
- case SQLSMINT :
- char_data = "SQLSMINT";
- break;
- case SQLDECIMAL :
- char_data = "SQLDECIMAL";
- break;
- case SQLMONEY :
- char_data = "SQLMONEY";
- break;
- case SQLSMFLOAT :
- char_data = "SQLSMFLOAT";
- break;
- case SQLFLOAT :
- char_data = "SQLFLOAT";
- break;
- case SQLDATE :
- char_data = "SQLDATE";
- break;
- case SQLDTIME :
- char_data = "SQLDTIME";
- break;
- case SQLINTERVAL:
- char_data = "SQLINTERVAL";
- break;
- case SQLCHAR :
- char_data = "SQLCHAR";
- break;
- case SQLVCHAR :
- char_data = "SQLVCHAR";
- break;
- case SQLNCHAR :
- char_data = "SQLNCHAR";
- break;
- case SQLNVCHAR :
- char_data = "SQLNVCHAR";
- break;
- case SQLTEXT :
- char_data = "SQLTEXT";
- break;
- case SQLBYTES :
- char_data = "SQLBYTES";
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED :
- char_data = "SQLUDTFIXED";
- break;
- case SQLBOOL :
- char_data = "SQLBOOL";
- break;
- case SQLINT8 :
- char_data = "SQLINT8";
- break;
- case SQLSERIAL8 :
- char_data = "SQLSERIAL8";
- break;
- case SQLLVARCHAR :
- char_data = "SQLLVARCHAR";
- break;
-$endif;
- default :
- char_data=emalloc(20);
- sprintf(char_data,"ESQL/C : %i",fieldtype);
- break;
- } /* switch (fieldtype) */
-
- add_assoc_string(return_value, fieldname, char_data, DUP);
- } /* for() */
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** array ifx_fieldproperties(int resultid)
-**
-** returns an associative array with fieldnames as key
-** and SQL fieldproperties as data for query $resultid
-**
-** properties are encoded as : "SQLTYPE;length;precision;scale;ISNULLABLE"
-** where SQLTYPE = the Informix type like "SQLVCHAR" etc...
-** ISNULLABLE = "Y" or "N"
-**
-** returns FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_fieldproperties(int resultid)
- Returns an associative for query <resultid> array with fieldnames as key */
-PHP_FUNCTION(ifx_fieldproperties)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- char *char_data = NULL;
- int size;
- int precision;
- int scale;
- int isnullable;
-EXEC SQL END DECLARE SECTION;
- int num_fields;
- char string_data[256];
- char *p;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
- php_error(E_WARNING,"Not a select cursor !");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- num_fields = fieldcount;
-
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME,
- :fieldtype = TYPE,
- :size = LENGTH,
- :precision = PRECISION,
- :scale = SCALE,
- :isnullable = NULLABLE;
-
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error(E_WARNING,"Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
- RETURN_FALSE;
- }
-
- p = fieldname; /* rtrim fieldname */
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
-
- switch (fieldtype) {
- case SQLSERIAL :
- char_data = "SQLSERIAL";
- break;
- case SQLINT :
- char_data = "SQLINT";
- break;
- case SQLSMINT :
- char_data = "SQLSMINT";
- break;
- case SQLDECIMAL :
- char_data = "SQLDECIMAL";
- break;
- case SQLMONEY :
- char_data = "SQLMONEY";
- break;
- case SQLSMFLOAT :
- char_data = "SQLSMFLOAT";
- break;
- case SQLFLOAT :
- char_data = "SQLFLOAT";
- break;
- case SQLDATE :
- char_data = "SQLDATE";
- break;
- case SQLDTIME :
- char_data = "SQLDTIME";
- break;
- case SQLINTERVAL:
- char_data = "SQLINTERVAL";
- break;
- case SQLCHAR :
- char_data = "SQLCHAR";
- break;
- case SQLVCHAR :
- char_data = "SQLVCHAR";
- break;
- case SQLTEXT :
- char_data = "SQLTEXT";
- break;
- case SQLBYTES :
- char_data = "SQLBYTES";
- break;
- case SQLNCHAR :
- char_data = "SQLNCHAR";
- break;
- case SQLNVCHAR :
- char_data = "SQLNVCHAR";
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED :
- char_data = "SQLUDTFIXED";
- break;
- case SQLBOOL :
- char_data = "SQLBOOL";
- break;
- case SQLINT8 :
- char_data = "SQLINT8";
- break;
- case SQLSERIAL8 :
- char_data = "SQLSERIAL8";
- break;
- case SQLLVARCHAR :
- char_data = "SQLLVARCHAR";
- break;
-$endif;
- default :
- char_data=emalloc(20);
- sprintf(char_data,"ESQL/C : %i",fieldtype);
- break;
- } /* switch (fieldtype) */
-
- sprintf(string_data,"%s;%d;%d;%d;%c", char_data, size, precision, scale, (isnullable?'Y':'N'));
- add_assoc_string(return_value, fieldname, string_data, DUP);
- } /* for() */
-}
-/* }}} */
-
-/* --------------------------------------------------------------
-** int ifx_num_rows(int resultid)
-**
-** returns the number of rows already fetched for query resultid
-**
-** ---------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_num_rows(int resultid)
- Returns the number of rows already fetched for query identified by resultid */
-PHP_FUNCTION(ifx_num_rows)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- RETURN_LONG(Ifx_Result->rowid);
-}
-/* }}} */
-
-/* --------------------------------------------------------------
-** int ifx_getsqlca(int resultid)
-**
-** returns the sqlerrd[] fields of the sqlca struct for query resultid
-** following the prepare (select) or execute immediate (insert/update/execute procedure)
-**
-** ---------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_getsqlca(int resultid)
- Returns the sqlerrd[] fields of the sqlca struct for query resultid */
-PHP_FUNCTION(ifx_getsqlca)
-{
- zval **result;
- IFX_RES *Ifx_Result;
- char fieldname[16];
- int e;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- /* create pseudo-row array to return */
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- /* fill array with 6 fields sqlerrd0 .. sqlerrd5 */
- /* each ESQLC call saves these sqlca values */
- for (e = 0; e < 6; e++) {
- sprintf(fieldname,"sqlerrd%d", e);
- add_assoc_long(return_value, fieldname, Ifx_Result->sqlerrd[e]);
- }
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_num_fields(int resultid)
-**
-** returns the number of columns in query resultid
-** or FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_num_fields(int resultid)
- Returns the number of columns in query resultid */
-PHP_FUNCTION(ifx_num_fields)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- RETURN_LONG(Ifx_Result->numcols);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_free_result(int resultid)
-**
-** releases resources for query associated with resultid
-**
-** returns FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_free_result(int resultid)
- Releases resources for query associated with resultid */
-PHP_FUNCTION(ifx_free_result)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
-EXEC SQL END DECLARE SECTION;
-
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode = 0);
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- for (i = 0; i < MAX_RESID; ++i) {
- if (Ifx_Result->res_id[i]>0) {
- php_intifx2_free_blob(Ifx_Result->res_id[i],&EG(regular_list) TSRMLS_CC);
- Ifx_Result->res_id[i]=-1;
- }
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- EXEC SQL free :statemid;
- if (strlen(cursorid) != 0) {
- EXEC SQL CLOSE :cursorid;
- EXEC SQL FREE :cursorid;
- }
-
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-
- zend_list_delete(Z_RESVAL_PP(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_getType(long id, HashTable *list)
- *
- * returns the type of an id-object
- * bid: Id of object
- * list: internal hashlist of php
- *
- * return -1 on error otherwise the type: TYPE_BLTEXT, TYPE_BLBYTE, TYPE_SLOB
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_getType(long id, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_res;
- int type;
-
- Ifx_res = (IFX_IDRES *) zend_list_find(id,&type);
- if (type!=le_idresult) {
- php_error(E_WARNING,"%d is not a Informix id-result index", id);
- return -1;
- }
- return Ifx_res->type;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_create_blob(int type, int mode, string param)
-**
-** creates a blob-object
-** type: 1=TEXT, 0=BYTE
-** mode: blob-object holds 0=the content in memory, 1=content in file
-** param: if mode=0: pointer to the content
-** mode=1: pointer to the filestring
-** return false on error otherwise the new Blob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_create_blob(int type, int mode, string param)
- Creates a blob-object */
-PHP_FUNCTION(ifx_create_blob)
-{
- zval *pmode, *pparam,*ptype;
- long id;
- long mode,type;
-
- if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &ptype,&pmode,&pparam)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(pmode);
- convert_to_string(pparam);
- convert_to_long(ptype);
-
- type=Z_LVAL_P(ptype);
- if(type != 0) {
- type=TYPE_BLTEXT;
- }
-
- mode=Z_LVAL_P(pmode);
- if(mode != 0) {
- mode=BLMODE_INFILE;
- }
-
- id=php_intifx_create_blob(type,mode,Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list));
-
- if(id < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list)
- *
- * creates an blob-object
- * type: 1=TEXT, 0=BYTE
- * mode: blob-object holds 0=the content in momory, 1=content in file
- * param: if mode=0: pointer to the content
- * mode=1: pointer to the filestring
- * len: length of param
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list)
-{
- IFX_IDRES *Ifx_blob;
-
- Ifx_blob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_blob==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
-
- memset(Ifx_blob, 0, sizeof(IFX_IDRES));
-
- if(type==0 ) {
- Ifx_blob->type=TYPE_BLBYTE;
- } else {
- Ifx_blob->type=TYPE_BLTEXT;
- }
- Ifx_blob->BLOB.mode=(int)mode;
-
- if(mode==BLMODE_INMEM) {
- if(len>=0) {
- char *content=emalloc(len);
- if(content==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
- memcpy(content,param,len);
- Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY;
- Ifx_blob->BLOB.blob_data.loc_buffer=content;
- Ifx_blob->BLOB.blob_data.loc_bufsize=len;
- Ifx_blob->BLOB.blob_data.loc_size=len;
- Ifx_blob->BLOB.blob_data.loc_mflags=0;
- Ifx_blob->BLOB.blob_data.loc_oflags=0;
- } else {
- Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY;
- Ifx_blob->BLOB.blob_data.loc_buffer=NULL;
- Ifx_blob->BLOB.blob_data.loc_bufsize=-1;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
- Ifx_blob->BLOB.blob_data.loc_mflags=0;
- Ifx_blob->BLOB.blob_data.loc_oflags=0;
- }
- } else { /* mode = BLMODE_INFILE */
- char *filename=emalloc(len+1);
- if(filename==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
- memcpy(filename,param,len);
- filename[len]=0;
- Ifx_blob->BLOB.blob_data.loc_loctype=LOCFNAME;
- Ifx_blob->BLOB.blob_data.loc_fname=filename;
- Ifx_blob->BLOB.blob_data.loc_oflags=LOC_WONLY;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
- }
- return zend_list_insert(Ifx_blob,le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_copy_blob(int bid)
-**
-** duplicates the given blob-object
-** bid: Id of Blobobject
-**
-** return false on error otherwise the new Blob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_copy_blob(int bid)
- Duplicates the given blob-object */
-PHP_FUNCTION(ifx_copy_blob)
-{
- zval *pbid;
- long newid;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
-
- newid=php_intifx_copy_blob(Z_LVAL_P(pbid),&EG(regular_list) TSRMLS_CC);
- if(newid<0) {
- RETURN_FALSE;
- }
- RETURN_LONG(newid);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_copy_blob(long bid, HashTable *list)
- *
- * duplicates the given blob-object
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob, *Ifx_blob_orig;
- loc_t *locator, *locator_orig;
- int type;
-
- Ifx_blob_orig = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || !(Ifx_blob_orig->type==TYPE_BLBYTE || Ifx_blob_orig->type==TYPE_BLTEXT)) {
- php_error(E_WARNING,"%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- Ifx_blob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_blob==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
-
- memset(Ifx_blob, 0, sizeof(IFX_IDRES));
-
- Ifx_blob->type=Ifx_blob_orig->type;
- Ifx_blob->BLOB.mode=Ifx_blob_orig->BLOB.mode;
-
- locator=&(Ifx_blob->BLOB.blob_data);
- locator_orig=&(Ifx_blob_orig->BLOB.blob_data);
-
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- char *content;
- if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) {
- if((content=emalloc(locator_orig->loc_size))==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
- memcpy(content,locator_orig->loc_buffer, locator_orig->loc_size);
- locator->loc_buffer=content;
- locator->loc_bufsize=locator_orig->loc_size;
- locator->loc_size=locator_orig->loc_size;
- } else {
- locator->loc_buffer=NULL;
- locator->loc_bufsize=-1;
- locator->loc_size=-1;
- }
- locator->loc_loctype=LOCMEMORY;
- locator->loc_mflags=0;
- locator->loc_oflags=0;
- } else { /* BLMODE_INFILE */
- char *filename;
-
- if((filename=emalloc(strlen(locator_orig->loc_fname)+1))==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
-
- strcpy(filename,locator_orig->loc_fname);
- locator->loc_loctype=LOCFNAME;
- locator->loc_fname=filename;
- locator->loc_size=-1;
- locator->loc_oflags=locator_orig->loc_oflags;
- }
- return zend_list_insert(Ifx_blob,le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_free_blob(int bid)
-**
-** deletes the blob-object
-** bid: Id of Blobobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_free_blob(int bid)
- Deletes the blob-object */
-PHP_FUNCTION(ifx_free_blob)
-{
- zval *pid;
- long ret;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pid);
-
- ret=php_intifx_free_blob(pid->value.lval,&EG(regular_list) TSRMLS_CC);
- if(ret<0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_free_blob(long bid, HashTable *list)
- *
- * deletes the blob-object
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * FREES BYTE-MEMORY WITH EFREE()
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
- php_error(E_WARNING,"%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
- efree(Ifx_blob->BLOB.blob_data.loc_buffer);
- }
- } else { /* BLMODE_INFILE */
- if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_fname);
- }
- }
- zend_list_delete(bid);
- efree(Ifx_blob);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx2_free_blob(long bid, HashTable *list)
- *
- * deletes the blob-object
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * FREES BYTE-MEMORY WITH FREE(), for blob memory allocated by ESQL/C
- * use this for freeing blob-source after select (in ifx_free_result)
- * ----------------------------------------------------------------------
-*/
-static long php_intifx2_free_blob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
- php_error(E_WARNING,"%d is not a Informix blob-result index", bid);
- return -1;
- }
-
-#if IFX_VERSION < 724 /* this Informix memory leak is fixed from 7.24 on */
- /* according to the current PERL DBD::Informix */
- /* and otherwise I get segmenation violations with 7.30 */
-
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
- free(Ifx_blob->BLOB.blob_data.loc_buffer);
- }
- } else {
- if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_fname);
- }
- }
-#endif
-
- zend_list_delete(bid);
- efree(Ifx_blob);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** string ifx_get_blob(int bid)
-**
-** returns the content of the blob-object
-** bid: Id of Blobobject
-** return the content
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_get_blob(int bid)
- Returns the content of the blob-object */
-PHP_FUNCTION(ifx_get_blob)
-{
- zval *pbid;
- char *content;
- long len;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
-
- len=php_intifx_get_blob(pbid->value.lval,&EG(regular_list),&content TSRMLS_CC);
- if(content==NULL || len<0) {
- RETURN_STRING(php_intifx_null(TSRMLS_C),1);
- }
- RETURN_STRINGL(content,len,1);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_get_blob(long bid, HashTable *list, char** content)
- *
- * returns the content of the blob-object
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error
- * returns the pointer to the content in char** content and the amount of content in bytes
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
- php_error(E_WARNING,"%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- *content=Ifx_blob->BLOB.blob_data.loc_buffer;
- return Ifx_blob->BLOB.blob_data.loc_size;
- }
- *content=Ifx_blob->BLOB.blob_data.loc_fname;
- return strlen(Ifx_blob->BLOB.blob_data.loc_fname);
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * loc_t *php_intifx_get_blobloc(long bid, HashTable *list)
- *
- * returns the blob-locator-structur
- * bid: Id of Blobobject
- * list: internal hashlist of php
- * return NULL on error or the pointer to the locator-structur
- * ----------------------------------------------------------------------
-*/
-static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
- php_error(E_WARNING,"%d is not a Informix blob-result index", bid);
- return NULL;
- }
- return &(Ifx_blob->BLOB.blob_data);
-}
-
-
-
-/* ----------------------------------------------------------------------
-** int update_blob(int bid, string content)
-**
-** updates the content of the blob-object
-** bid: Id of Blobobject
-** content: string of new data
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_update_blob(int bid, string content)
- Updates the content of the blob-object */
-PHP_FUNCTION(ifx_update_blob)
-{
- zval *pbid, *pparam;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid,&pparam)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
- convert_to_string(pparam);
-
- if(php_intifx_update_blob(Z_LVAL_P(pbid),Z_STRVAL_P(pparam),Z_STRLEN_P(pparam), &EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_update_blob(long bid, char* param, long len, HashTable *list)
- *
- * updates the content of the blob-object
- * bid: Id of Blobobject
- * param: string of new data
- * len: length of string
- * list: internal hashlist of php
- * return nothing
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
- php_error(E_WARNING,"%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- char *content;
-
- if(Ifx_blob->BLOB.blob_data.loc_buffer!=NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_buffer);
- }
- if(len >= 0) {
- if((content=emalloc(len))==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
- memcpy(content,param, len);
- Ifx_blob->BLOB.blob_data.loc_buffer=content;
- Ifx_blob->BLOB.blob_data.loc_bufsize=len;
- Ifx_blob->BLOB.blob_data.loc_size=len;
- } else {
- Ifx_blob->BLOB.blob_data.loc_buffer=NULL;
- Ifx_blob->BLOB.blob_data.loc_bufsize=-1;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
- }
- Ifx_blob->BLOB.blob_data.loc_mflags=0;
- Ifx_blob->BLOB.blob_data.loc_oflags=0;
- } else {
- char *filename;
-
- if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_fname);
- }
- if((filename=emalloc(len+1))==NULL) {
- php_error(E_WARNING,"can't create blob-resource");
- return -1;
- }
- memcpy(filename,param, len);
- filename[len]=0;
- Ifx_blob->BLOB.blob_data.loc_fname=filename;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
- }
- return 0;
-}
-
-/*-------------------------------------------------
- * internal function
- *
- * php_intifx_create_tmpfile(long bid)
- * creates a temporary file to store a blob in
- *-------------------------------------------------
-*/
-static char* php_intifx_create_tmpfile(long bid TSRMLS_DC)
-{
- char filename[10];
- char *blobdir;
- char *retval;
- char *opened_path;
- FILE *fp;
-
- if ((blobdir = getenv("php_blobdir")) == NULL) {
- blobdir=".";
- }
- sprintf(filename,"blb%d",(int)bid);
-
- if ((fp = php_open_temporary_file(blobdir, filename, &opened_path TSRMLS_CC))) {
- fclose(fp);
- retval=estrndup(opened_path, strlen(opened_path));
- } else {
- retval=NULL;
- }
- return retval;
-}
-
-/* ----------------------------------------------------------------------
-** void ifx_blobinfile_mode(int mode)
-**
-** sets the default blob-mode for all select-queries
-** mode=0: save Byte-Blobs in momory
-** mode=1: save Byte-Blobs in a file
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto void ifx_blobinfile_mode(int mode)
- Sets the default blob-mode for all select-queries */
-PHP_FUNCTION(ifx_blobinfile_mode)
-{
- zval *pmode;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pmode);
-
- IFXG(blobinfile)=Z_LVAL_P(pmode);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** void ifx_textasvarchar(int mode)
-**
-** sets the default text-mode for all select-queries
-** mode=0: select returns a blob-id
-** mode=1: select returns a varchar with text-content
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto void ifx_textasvarchar(int mode)
- Sets the default text-mode for all select-queries */
-PHP_FUNCTION(ifx_textasvarchar)
-{
- zval *pmode;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pmode);
-
- IFXG(textasvarchar)=Z_LVAL_P(pmode);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** void ifx_byteasvarchar(int mode)
-**
-** sets the default byte-mode for all select-queries
-** mode=0: select returns a blob-id
-** mode=1: select returns a varchar with byte-content
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto void ifx_byteasvarchar(int mode)
- Sets the default byte-mode for all select-queries */
-PHP_FUNCTION(ifx_byteasvarchar)
-{
- zval *pmode;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pmode);
-
- IFXG(byteasvarchar)=Z_LVAL_P(pmode);
- RETURN_TRUE;
-}
-
-/* ----------------------------------------------------------------------
-** void ifx_nullformat(int mode)
-**
-** sets the default return value of a NULL-value on a fetch-row
-** mode=0: return ""
-** mode=1: return "NULL"
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto void ifx_nullformat(int mode)
- Sets the default return value of a NULL-value on a fetch-row */
-PHP_FUNCTION(ifx_nullformat)
-{
- zval *pmode;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pmode);
-
- IFXG(nullformat)=Z_LVAL_P(pmode);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
- * void php_intifx_null()
- *
- * return the NULL-string depending on .nullformat
- * return "" or "NULL"
- * ----------------------------------------------------------------------
-*/
-static char* php_intifx_null(TSRMLS_D)
-{
- char* tmp;
-
- if(IFXG(nullformat)==0) {
- tmp=IFXG(nullvalue);
- } else {
- tmp=IFXG(nullstring);
- }
- return tmp;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_create_char(string param)
-**
-** creates an char-object
-** param: content
-** return false on error otherwise the new char-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_create_char(string param)
- Creates a char-object */
-PHP_FUNCTION(ifx_create_char)
-{
- zval *pparam;
- long id;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pparam)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(pparam);
-
- id=php_intifx_create_char(Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list));
-
- if(id < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_create_char(char* param, long len, HashTable *list)
- *
- * creates an char-object
- * param: content
- * len: length of param
- * list: internal hashlist of php
- * return -1 on error otherwise the new char-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_create_char(char* param, long len, HashTable *list)
-{
- IFX_IDRES *Ifx_char;
-
- Ifx_char=emalloc(sizeof(IFX_IDRES));
- if(Ifx_char==NULL) {
- php_error(E_WARNING,"can't create char-resource");
- return -1;
- }
-
- Ifx_char->type=TYPE_CHAR;
-
- if(param==NULL || len<0) {
- Ifx_char->CHAR.char_data=NULL;
- Ifx_char->CHAR.len=0;
- } else {
- Ifx_char->CHAR.char_data=emalloc(len+1);
- if(Ifx_char->CHAR.char_data==NULL) {
- efree(Ifx_char);
- php_error(E_WARNING,"can't create char-resource");
- return -1;
- }
- memcpy(Ifx_char->CHAR.char_data,param,len);
- Ifx_char->CHAR.char_data[len]=0;
- Ifx_char->CHAR.len=len;
- }
- return zend_list_insert(Ifx_char,le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** string ifx_get_char(int bid)
-**
-** returns the content of the char-object
-** bid: Id of charobject
-** return the content
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_get_char(int bid)
- Returns the content of the char-object */
-PHP_FUNCTION(ifx_get_char)
-{
- zval *pbid;
- char *content;
- long len;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
-
- len=php_intifx_get_char(Z_LVAL_P(pbid),&EG(regular_list),&content TSRMLS_CC);
- if(content==NULL || len < 0) {
- RETURN_STRING("",1);
- }
- RETURN_STRINGL(content,len,1);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_get_char(long bid, HashTable *list, char** content)
- *
- * returns the content of the char-object
- * bid: Id of charobject
- * list: internal hashlist of php
- *
- * return -1 on error
- * returns the pointer to the content in char** content and the amount of content in bytes
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
- int type;
-
- Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
- php_error(E_WARNING,"%d is not a Informix char-result index", bid);
- return -1;
- }
-
- *content=Ifx_char->CHAR.char_data;
- return Ifx_char->CHAR.len;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_free_char(int bid)
-**
-** deletes the char-object
-** bid: Id of charobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_free_char(int bid)
- Deletes the char-object */
-PHP_FUNCTION(ifx_free_char)
-{
- zval *pid;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pid);
-
- if(php_intifx_free_char(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_free_char(long bid, HashTable *list)
- *
- * deletes the char-object
- * bid: Id of Charobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
- int type;
-
- Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
- php_error(E_WARNING,"%d is not a Informix char-result index", bid);
- return -1;
- }
-
- if(Ifx_char->CHAR.char_data!=NULL) {
- efree(Ifx_char->CHAR.char_data);
- }
- zend_list_delete(bid);
- efree(Ifx_char);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_update_char(int bid, string content)
-**
-** updates the content of the char-object
-** bid: Id of charobject
-** content: string of new data
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_update_char(int bid, string content)
- Updates the content of the char-object */
-PHP_FUNCTION(ifx_update_char)
-{
- zval *pbid,*pparam;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid,&pparam)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
- convert_to_string(pparam);
-
- if(php_intifx_update_char(Z_LVAL_P(pbid),Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_update_char(long bid, char* param, long len, HashTable *list)
- *
- * updates the content of the char-object
- * bid: Id of charobject
- * param: string of new data
- * len: length of string
- * list: internal hashlist of php
- * return nothing
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_update_char(long bid, char* param, long len, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
- int type;
-
- Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
- php_error(E_WARNING,"%d is not a Informix char-result index", bid);
- return -1;
- }
-
- if(Ifx_char->CHAR.char_data!=NULL) {
- efree(Ifx_char->CHAR.char_data);
- }
- Ifx_char->CHAR.char_data=NULL;
- Ifx_char->CHAR.len=0;
-
- if(param==NULL || len<0) {
- Ifx_char->CHAR.char_data=NULL;
- Ifx_char->CHAR.len=0;
- } else {
- Ifx_char->CHAR.char_data=emalloc(len+1);
- if(Ifx_char->CHAR.char_data==NULL) {
- php_error(E_WARNING,"can't create char-resource");
- return -1;
- }
- memcpy(Ifx_char->CHAR.char_data,param,len);
- Ifx_char->CHAR.char_data[len]=0;
- Ifx_char->CHAR.len=len;
- }
- return 0;
-}
-
-$ifdef HAVE_IFX_IUS;
-
-/* ----------------------------------------------------------------------
-** int ifxus_create_slob(int mode)
-**
-** creates an slob-object and opens it
-** mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
-** return false on error otherwise the new Slob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_create_slob(int mode)
- Creates a slob-object and opens it */
-PHP_FUNCTION(ifxus_create_slob)
-{
- zval *pmode;
- long id;
- long mode,create_mode;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pmode);
- mode=Z_LVAL_P(pmode);
-
- create_mode=0;
- if((mode&1) !=0)
- create_mode|=LO_RDONLY;
- if((mode&2) !=0)
- create_mode|=LO_WRONLY;
- if((mode&4) !=0)
- create_mode|=LO_APPEND;
- if((mode&8) !=0)
- create_mode|=LO_RDWR;
- if((mode&16) !=0)
- create_mode|=LO_BUFFER;
- if((mode&32) !=0)
- create_mode|=LO_NOBUFFER;
-
- id=php_intifxus_create_slob(create_mode,&EG(regular_list));
-
- if(id < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_create_slob(long create_mode, HashTable *list)
- *
- * creates an slob-object and opens it
- * mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_create_slob(long create_mode, HashTable *list)
-{
- IFX_IDRES *Ifx_slob;
- int errcode;
-
- Ifx_slob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_slob==NULL) {
- php_error(E_WARNING,"can't create slob-resource");
- return -1;
- }
-
- errcode=ifx_lo_def_create_spec(&(Ifx_slob->SLOB.createspec));
- if(errcode<0) {
- php_error(E_WARNING,"can't create slob-resource: %d", errcode);
- return -1;
- }
-
- Ifx_slob->type=TYPE_SLOB;
- Ifx_slob->SLOB.lofd=ifx_lo_create(Ifx_slob->SLOB.createspec,create_mode,&(Ifx_slob->SLOB.slob_data),&errcode);
- if(errcode<0 || Ifx_slob->SLOB.lofd<0) {
- php_error(E_WARNING,"can't create slob-resource: %d", errcode);
- return -1;
- }
- return zend_list_insert(Ifx_slob,le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_free_slob(int bid)
-**
-** deletes the slob-object
-** bid: Id of Slobobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_free_slob(int bid)
- Deletes the slob-object */
-PHP_FUNCTION(ifxus_free_slob)
-{
- zval *pid;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pid);
-
- if(php_intifxus_free_slob(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_free_slob(long bid, HashTable *list)
- *
- * deletes the slob-object
- * bid: Id of Slobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- return -1;
- }
-
- if(php_intifxus_close_slob(bid, &EG(regular_list) TSRMLS_CC) < 0) {
- return -1;
- }
-
- if(Ifx_slob->SLOB.createspec!=NULL) {
- ifx_lo_spec_free(Ifx_slob->SLOB.createspec);
- Ifx_slob->SLOB.createspec=NULL;
- }
- efree(Ifx_slob);
- zend_list_delete(bid);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_close_slob(int bid)
-**
-** deletes the slob-object
-** bid: Id of Slobobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_close_slob(int bid)
- Deletes the slob-object */
-PHP_FUNCTION(ifxus_close_slob)
-{
- zval *pid;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pid);
- if(php_intifxus_close_slob(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_close_slob(long bid, HashTable *list)
- *
- * deletes the slob-object
- * bid: Id of Slobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- return -1;
- }
-
- if(Ifx_slob->SLOB.lofd<0) {
- php_error(E_WARNING,"slob-resource already closed");
- return -1;
- }
-
- if(ifx_lo_close(Ifx_slob->SLOB.lofd)<0) {
- php_error(E_WARNING,"can't close slob-resource");
- return -1;
- }
- Ifx_slob->SLOB.lofd=-1;
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_open_slob(long bid, int mode)
-**
-** opens an slob-object
-** bid: existing slob-id
-** mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
-** return false on error otherwise the new Slob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_open_slob(long bid, int mode)
- Opens an slob-object */
-PHP_FUNCTION(ifxus_open_slob)
-{
- zval *pbid,*pmode;
- long mode,create_mode;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 1, &pbid,&pmode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pmode);
- convert_to_long(pbid);
- mode=Z_LVAL_P(pmode);
-
- create_mode=0;
- if((mode&1) !=0)
- create_mode|=LO_RDONLY;
- if((mode&2) !=0)
- create_mode|=LO_WRONLY;
- if((mode&4) !=0)
- create_mode|=LO_APPEND;
- if((mode&8) !=0)
- create_mode|=LO_RDWR;
- if((mode&16) !=0)
- create_mode|=LO_BUFFER;
- if((mode&32) !=0)
- create_mode|=LO_NOBUFFER;
-
- RETURN_LONG(php_intifxus_open_slob(Z_LVAL_P(pbid),create_mode,&EG(regular_list) TSRMLS_CC));
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_open_slob(long bid,long create_mode, HashTable *list)
- *
- * opens an slob-object
- * mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int errcode;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- return -1;
- }
-
- if(Ifx_slob->SLOB.lofd>0) {
- php_error(E_WARNING,"slob-resource already open");
- return -1;
- }
-
- Ifx_slob->SLOB.lofd=ifx_lo_open(&(Ifx_slob->SLOB.slob_data),create_mode,&errcode);
- if(errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
- php_error(E_WARNING,"can't open slob-resource: %d", errcode);
- return -1;
- }
- return 0;
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_new_slob(HashTable *list)
- *
- * creates an slob-object but don't open it
- * list: internal hashlist of php
- * return -1 on error otherwise the new slob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_new_slob(HashTable *list)
-{
- IFX_IDRES *Ifx_slob;
-
- Ifx_slob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_slob==NULL) {
- php_error(E_WARNING,"can't create slob-resource");
- return -1;
- }
-
- Ifx_slob->type=TYPE_SLOB;
- Ifx_slob->SLOB.lofd=-1;
- Ifx_slob->SLOB.createspec=NULL;
- return zend_list_insert(Ifx_slob,le_idresult);
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list)
- *
- * retuens the ifx_lo_t-structure of a slob-object
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- return NULL;
- }
- return &(Ifx_slob->SLOB.slob_data);
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_tell_slob(long bid)
-**
-** returns the current file or seek position of an open slob-object
-** bid: existing slob-id
-** return false on error otherwise the seek-position
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_tell_slob(long bid)
- Returns the current file or seek position of an open slob-object */
-PHP_FUNCTION(ifxus_tell_slob)
-{
- zval *pbid;
- long bid;
- IFX_IDRES *Ifx_slob;
- ifx_int8_t akt_seek_pos;
- int type;
- long lakt_seek_pos;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
- bid=Z_LVAL_P(pbid);
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- if(ifx_lo_tell(Ifx_slob->SLOB.lofd,&akt_seek_pos)<0) {
- php_error(E_WARNING,"can't perform tell-operation");
- RETURN_FALSE;
- }
-
- if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) {
- php_error(E_WARNING,"seek-position to large for long");
- RETURN_FALSE;
- }
- RETURN_LONG(lakt_seek_pos);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifxus_seek_slob(long bid, int mode, long offset)
-**
-** sets the current file or seek position of an open slob-object
-** bid: existing slob-id
-** mode: 0=LO_SEEK_SET, 1=LO_SEEK_CUR, 2=LO_SEEK_END
-** offset: byte-offset
-** return false on error otherwise the seek-position
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_seek_slob(long bid, int mode, long offset)
- Sets the current file or seek position of an open slob-object */
-PHP_FUNCTION(ifxus_seek_slob)
-{
- zval *pbid, *pmode, *poffset;
- long bid,lakt_seek_pos;
- IFX_IDRES *Ifx_slob;
- ifx_int8_t akt_seek_pos,offset;
- int type,mode;
-
- if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &pbid, &pmode, &poffset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
- convert_to_long(pmode);
- convert_to_long(poffset);
-
- bid=Z_LVAL_P(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- mode=LO_SEEK_SET;
- if(Z_LVAL_P(pmode)==1) {
- mode=LO_SEEK_CUR;
- }
- if(Z_LVAL_P(pmode)==2) {
- mode=LO_SEEK_END;
- }
-
- ifx_int8cvlong(Z_LVAL_P(poffset),&offset);
- if(ifx_lo_seek(Ifx_slob->SLOB.lofd,&offset,mode,&akt_seek_pos)<0) {
- php_error(E_WARNING,"can't perform seek-operation");
- RETURN_FALSE;
- }
-
- if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) {
- php_error(E_WARNING,"seek-position to large for long");
- RETURN_FALSE;
- }
- RETURN_LONG(lakt_seek_pos);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifxus_read_slob(long bid, long nbytes)
-**
-** reads nbytes of the slob-object
-** bid: existing slob-id
-** nbytes: bytes zu read
-** return false on error otherwise the string
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_read_slob(long bid, long nbytes)
- Reads nbytes of the slob-object */
-PHP_FUNCTION(ifxus_read_slob)
-{
- zval *pbid, *pnbytes;
- long bid, nbytes;
- IFX_IDRES *Ifx_slob;
- int errcode,type;
- char *buffer;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid, &pnbytes)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
- convert_to_long(pnbytes);
-
- bid=Z_LVAL_P(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- nbytes=Z_LVAL_P(pnbytes);
- buffer=emalloc(nbytes);
- if(ifx_lo_read(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode)<0) {
- efree(buffer);
- php_error(E_WARNING,"error reading slob: %d", errcode);
- RETURN_FALSE;
- }
- RETURN_STRINGL(buffer,nbytes,0);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifxus_write_slob(long bid, string content)
-**
-** writes a string into the slob-object
-** bid: existing slob-id
-** content: content to write
-** return false on error otherwise bytes written
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_write_slob(long bid, string content)
- Writes a string into the slob-object */
-PHP_FUNCTION(ifxus_write_slob)
-{
- zval *pbid, *pcontent;
- long bid, nbytes;
- IFX_IDRES *Ifx_slob;
- int errcode,type;
- char *buffer;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid, &pcontent)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(pbid);
- convert_to_string(pcontent);
-
- bid=Z_LVAL_P(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
- php_error(E_WARNING,"%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- buffer=Z_STRVAL_P(pcontent);
- nbytes=Z_STRLEN_P(pcontent);
-
- if(nbytes<=0) {
- php_error(E_WARNING,"string has no content");
- RETURN_FALSE;
- }
-
- if((nbytes=ifx_lo_write(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode))<0) {
- php_error(E_WARNING,"error writing slob: %d", errcode);
- RETURN_FALSE;
- }
-
- RETURN_LONG(nbytes);
-}
-/* }}} */
-
-$endif;
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/informix/php_informix.h b/ext/informix/php_informix.h
deleted file mode 100644
index 53fed68427..0000000000
--- a/ext/informix/php_informix.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Danny Heijl <Danny.Heijl@cevi.be>, initial cut (ODS 7) |
- | Christian Cartus <chc@idgruppe.de>, blobs, and IUS 9 |
- | Jouni Ahto <jouni.ahto@exdec.fi>, configuration stuff |
- | based on mysql code by: Zeev Suraski <zeev@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_INFORMIX_H
-#define PHP_INFORMIX_H
-
-#ifdef PHP_WIN32
-#define PHP_IFX_API __declspec(dllexport)
-#else
-#define PHP_IFX_API
-#endif
-
-#if HAVE_IFX /* with Informix */
-
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry ifx_module_entry;
-#define ifx_module_ptr &ifx_module_entry
-
-#undef TYPEMAX
-#undef CHAR
-
-#include "locator.h"
-#include "sqltypes.h"
-
-/* user functions */
-PHP_MINIT_FUNCTION(ifx);
-PHP_RINIT_FUNCTION(ifx);
-PHP_MSHUTDOWN_FUNCTION(ifx);
-PHP_MINFO_FUNCTION(ifx);
-/* functions common to all Informix versions */
-PHP_FUNCTION(ifx_connect);
-PHP_FUNCTION(ifx_pconnect);
-PHP_FUNCTION(ifx_close);
-PHP_FUNCTION(ifx_query);
-PHP_FUNCTION(ifx_prepare);
-PHP_FUNCTION(ifx_do);
-PHP_FUNCTION(ifx_error);
-PHP_FUNCTION(ifx_errormsg);
-PHP_FUNCTION(ifx_affected_rows);
-PHP_FUNCTION(ifx_num_rows);
-PHP_FUNCTION(ifx_num_fields);
-PHP_FUNCTION(ifx_fetch_row);
-PHP_FUNCTION(ifx_free_result);
-PHP_FUNCTION(ifx_htmltbl_result);
-PHP_FUNCTION(ifx_fieldtypes);
-PHP_FUNCTION(ifx_fieldproperties);
-PHP_FUNCTION(ifx_getsqlca);
-/* BLOB related stuff, IDS & IUS only */
-PHP_FUNCTION(ifx_create_blob);
-PHP_FUNCTION(ifx_free_blob) ;
-PHP_FUNCTION(ifx_get_blob);
-PHP_FUNCTION(ifx_update_blob);
-PHP_FUNCTION(ifx_blobinfile_mode);
-PHP_FUNCTION(ifx_copy_blob);
-PHP_FUNCTION(ifx_textasvarchar);
-PHP_FUNCTION(ifx_byteasvarchar);
-PHP_FUNCTION(ifx_nullformat);
-PHP_FUNCTION(ifx_create_char);
-PHP_FUNCTION(ifx_free_char) ;
-PHP_FUNCTION(ifx_update_char);
-PHP_FUNCTION(ifx_get_char);
-
-/* SLOB, CLOB : IUS only functions */
-#if HAVE_IFX_IUS
-PHP_FUNCTION(ifxus_create_slob);
-PHP_FUNCTION(ifxus_free_slob) ;
-PHP_FUNCTION(ifxus_close_slob) ;
-PHP_FUNCTION(ifxus_open_slob) ;
-PHP_FUNCTION(ifxus_read_slob);
-PHP_FUNCTION(ifxus_write_slob);
-PHP_FUNCTION(ifxus_seek_slob);
-PHP_FUNCTION(ifxus_tell_slob);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(ifx)
- long default_link;
- long num_links, num_persistent;
- long max_links, max_persistent;
- long allow_persistent;
- char *default_host, *default_user, *default_password;
- int connectionid;
- int cursorid;
- int sv_sqlcode; /* saved informix SQLCODE value */
- long blobinfile; /* 0=save in memory, 1=save in file */
- long textasvarchar; /* 0=as id, 1=as varchar */
- long byteasvarchar; /* 0=as id, 1=as varchar */
- long charasvarchar; /* 0=don't strip trailing blanks, 1=strip */
- long nullformat; /* 0=NULL as "", 1= NULL as "NULL" */
- char nullvalue[1]; /* "" */
- char nullstring[5]; /* "NULL" */
-ZEND_END_MODULE_GLOBALS(ifx)
-
-#ifdef ZTS
-# define IFXG(v) TSRMG(ifx_globals_id, zend_ifx_globals *, v)
-#else
-# define IFXG(v) (ifx_globals.v)
-#endif
-
-#define MAX_RESID 64
-#define BLOBINFILE 0 /* 0=in memory, 1=in file */
-
-/* query result set data */
-typedef struct ifx_res {
- char connecid[16];
- char cursorid[16];
- char descrpid[16];
- char statemid[16];
- int isscroll;
- int ishold;
- int iscursory;
- int paramquery;
- int numcols;
- int rowid;
- int affected_rows;
- long sqlerrd[6];
- int res_id[MAX_RESID];
-} IFX_RES;
-
-typedef struct _IFX_IDRES {
- int type;
- union {
- struct {
- int mode;
- loc_t blob_data;
- } BLOBRES;
-
- struct {
- char *char_data;
- int len;
- } CHARRES;
-
-#if HAVE_IFX_IUS
- struct {
- ifx_lo_t slob_data;
- ifx_lo_create_spec_t *createspec;
- int lofd;
- } SLOBRES;
-#endif
- } DATARES;
-} IFX_IDRES;
-
-#define BLOB DATARES.BLOBRES
-#define CHAR DATARES.CHARRES
-
-#if HAVE_IFX_IUS
-#define SLOB DATARES.SLOBRES
-#endif
-
-#else /* not HAVE_IFX */
-#define ifx_module_ptr NULL
-#endif
-#define phpext_informix_ptr ifx_module_ptr
-#endif /* PHP_INFORMIX_H */
diff --git a/ext/informix/stub.c b/ext/informix/stub.c
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/informix/stub.c
+++ /dev/null
diff --git a/ext/ingres_ii/CREDITS b/ext/ingres_ii/CREDITS
deleted file mode 100644
index f23fb1d63f..0000000000
--- a/ext/ingres_ii/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Ingres II
-David Hénot
diff --git a/ext/ingres_ii/EXPERIMENTAL b/ext/ingres_ii/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/ingres_ii/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/ingres_ii/README b/ext/ingres_ii/README
deleted file mode 100644
index d16d152c09..0000000000
--- a/ext/ingres_ii/README
+++ /dev/null
@@ -1,13 +0,0 @@
-Ingres II extension for PHP 4.0
-===============================
-
-This extension provides access to Ingres II servers from PHP 4.0.
-It is still in development and has been only quickly tested on
-Linux (Mandrake 5.3 for Intel), so you should avoid using it with
-critical data.
-
-To enable the extension just add --with-ingres to your ./configure
-line. If the Ingres files are not found, use --with-ingres=DIR instead
-to specify your Ingres installation directory.
-
-Please report suggestions to henot@php.net.
diff --git a/ext/ingres_ii/config.m4 b/ext/ingres_ii/config.m4
deleted file mode 100644
index 3761714e00..0000000000
--- a/ext/ingres_ii/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ingres, for Ingres II support,
-[ --with-ingres[=DIR] Include Ingres II support. DIR is the Ingres
- base directory (default $II_SYSTEM/II/ingres)])
-
-if test "$PHP_INGRES" != "no"; then
- AC_DEFINE(HAVE_II, 1, [Whether you have Ingres II])
- PHP_NEW_EXTENSION(ingres_ii, ii.c, $ext_shared)
- PHP_SUBST(II_SHARED_LIBADD)
-
- if test "$PHP_INGRES" = "yes"; then
- II_DIR=$II_SYSTEM/ingres
- else
- II_DIR=$PHP_INGRES
- fi
-
- if test -r $II_DIR/files/iiapi.h; then
- II_INC_DIR=$II_DIR/files
- else
- AC_MSG_ERROR(Cannot find iiapi.h under $II_DIR/files)
- fi
-
- if test -r $II_DIR/lib/libiiapi.a; then
- II_LIB_DIR=$II_DIR/lib
- else
- AC_MSG_ERROR(Cannot find libiiapi.a under $II_DIR/lib)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(iiapi, $II_LIB_DIR, II_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ingres, $II_LIB_DIR, II_SHARED_LIBADD)
- PHP_ADD_INCLUDE($II_INC_DIR)
-fi
diff --git a/ext/ingres_ii/ii.c b/ext/ingres_ii/ii.c
deleted file mode 100644
index f1ca1e5685..0000000000
--- a/ext/ingres_ii/ii.c
+++ /dev/null
@@ -1,1467 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Contributed by ECL IP'S Software & Services |
- | http://www.eclips-software.com |
- | mailto://idev@eclips-software.com |
- | Author: David Hénot <henot@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_ii.h"
-#include "ii.h"
-#include "ext/standard/php_string.h"
-
-#if HAVE_II
-
-ZEND_DECLARE_MODULE_GLOBALS(ii)
-
-/* True globals, no need for thread safety */
-static int le_ii_link, le_ii_plink;
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-/* Every user visible function must have an entry in ii_functions[].
-*/
-function_entry ii_functions[] = {
- PHP_FE(ingres_connect, NULL)
- PHP_FE(ingres_pconnect, NULL)
- PHP_FE(ingres_close, NULL)
- PHP_FE(ingres_query, NULL)
- PHP_FE(ingres_num_rows, NULL)
- PHP_FE(ingres_num_fields, NULL)
- PHP_FE(ingres_field_name, NULL)
- PHP_FE(ingres_field_type, NULL)
- PHP_FE(ingres_field_nullable, NULL)
- PHP_FE(ingres_field_length, NULL)
- PHP_FE(ingres_field_precision, NULL)
- PHP_FE(ingres_field_scale, NULL)
- PHP_FE(ingres_fetch_array, NULL)
- PHP_FE(ingres_fetch_row, NULL)
- PHP_FE(ingres_fetch_object, NULL)
- PHP_FE(ingres_rollback, NULL)
- PHP_FE(ingres_commit, NULL)
- PHP_FE(ingres_autocommit, NULL)
- {NULL, NULL, NULL} /* Must be the last line in ii_functions[] */
-};
-
-zend_module_entry ingres_ii_module_entry = {
- STANDARD_MODULE_HEADER,
- "ingres_ii",
- ii_functions,
- PHP_MINIT(ii),
- PHP_MSHUTDOWN(ii),
- PHP_RINIT(ii),
- PHP_RSHUTDOWN(ii),
- PHP_MINFO(ii),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_INGRES_II
-ZEND_GET_MODULE(ingres_ii)
-#endif
-
-/* php.ini entries
-*/
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("ingres.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_ii_globals, ii_globals)
- STD_PHP_INI_ENTRY_EX("ingres.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_ii_globals, ii_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("ingres.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_ii_globals, ii_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("ingres.default_database", NULL, PHP_INI_ALL, OnUpdateString, default_database, zend_ii_globals, ii_globals)
- STD_PHP_INI_ENTRY("ingres.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_ii_globals, ii_globals)
- STD_PHP_INI_ENTRY("ingres.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, zend_ii_globals, ii_globals)
-PHP_INI_END()
-
-/* closes statement in given link
-*/
-static int _close_statement(II_LINK *link)
-{
- IIAPI_CLOSEPARM closeParm;
-
- closeParm.cl_genParm.gp_callback = NULL;
- closeParm.cl_genParm.gp_closure = NULL;
- closeParm.cl_stmtHandle = link->stmtHandle;
-
- IIapi_close(&closeParm);
- ii_sync(&(closeParm.cl_genParm));
-
- if (ii_success(&(closeParm.cl_genParm)) == II_FAIL) {
- return 1;
- }
-
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- return 0;
-}
-
-/* rolls back transaction in given link
- after closing the active transaction (if any)
-*/
-static int _rollback_transaction(II_LINK *link)
-{
- IIAPI_ROLLBACKPARM rollbackParm;
-
- if (link->stmtHandle && _close_statement(link)) {
- php_error(E_WARNING, "Ingres II: Unable to close statement !!");
- return 1;
- }
-
- rollbackParm.rb_genParm.gp_callback = NULL;
- rollbackParm.rb_genParm.gp_closure = NULL;
- rollbackParm.rb_tranHandle = link->tranHandle;
- rollbackParm.rb_savePointHandle = NULL;
-
- IIapi_rollback(&rollbackParm);
- ii_sync(&(rollbackParm.rb_genParm));
-
- if (ii_success(&(rollbackParm.rb_genParm)) == II_FAIL) {
- return 1;
- }
-
- link->tranHandle = NULL;
- return 0;
-}
-
-static void _close_ii_link(II_LINK *link TSRMLS_DC)
-{
- IIAPI_DISCONNPARM disconnParm;
-
- if (link->tranHandle && _rollback_transaction(link)) {
- php_error(E_WARNING, "Ingres II: Unable to rollback transaction !!");
- }
-
- disconnParm.dc_genParm.gp_callback = NULL;
- disconnParm.dc_genParm.gp_closure = NULL;
- disconnParm.dc_connHandle = link->connHandle;
-
- IIapi_disconnect(&disconnParm);
-
- free(link);
-
- IIG(num_links)--;
-}
-
-/* closes the given link, actually disconnecting from server
- and releasing associated resources after rolling back the
- active transaction (if any)
-*/
-static void php_close_ii_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- II_LINK *link = (II_LINK *) rsrc->ptr;
-
- _close_ii_link(link TSRMLS_CC);
-}
-
-/* closes the given persistent link, see _close_ii_link
-*/
-static void _close_ii_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- II_LINK *link = (II_LINK *) rsrc->ptr;
-
- _close_ii_link(link TSRMLS_CC);
- IIG(num_persistent)--;
-}
-
-/* cleans up the given persistent link.
- used when the request ends to 'refresh' the link for use
- by the next request
-*/
-static void _clean_ii_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- II_LINK *link = (II_LINK *) rsrc->ptr;
- IIAPI_AUTOPARM autoParm;
-
- if (link->autocommit) {
-
- if (link->stmtHandle && _close_statement(link)) {
- php_error(E_WARNING, "Ingres II: Unable to close statement !!");
- }
-
- autoParm.ac_genParm.gp_callback = NULL;
- autoParm.ac_genParm.gp_closure = NULL;
- autoParm.ac_connHandle = link->connHandle;
- autoParm.ac_tranHandle = link->tranHandle;
-
- IIapi_autocommit(&autoParm);
- ii_sync(&(autoParm.ac_genParm));
-
- if (ii_success(&(autoParm.ac_genParm)) == II_FAIL) {
- php_error(E_WARNING, "Ingres II: Unable to disable autocommit");
- }
-
- link->autocommit = 0;
- link->tranHandle = NULL;
- }
-
- if (link->tranHandle && _rollback_transaction(link)) {
- php_error(E_WARNING, "Ingres II: Unable to rollback transaction !!");
- }
-}
-
-/* sets the default link
-*/
-static void php_ii_set_default_link(int id TSRMLS_DC)
-{
- if (IIG(default_link) != -1) {
- zend_list_delete(IIG(default_link));
- }
- IIG(default_link) = id;
- zend_list_addref(id);
-}
-
-/* gets the default link
- if none has been set, tries to open a new one with default
- parameters
-*/
-static int php_ii_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (IIG(default_link) == -1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_ii_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return IIG(default_link);
-}
-
-static void php_ii_globals_init(zend_ii_globals *ii_globals)
-{
- ii_globals->num_persistent = 0;
-}
-
-/* Module initialization
-*/
-PHP_MINIT_FUNCTION(ii)
-{
- IIAPI_INITPARM initParm;
-
- ZEND_INIT_MODULE_GLOBALS(ii, php_ii_globals_init, NULL);
- REGISTER_INI_ENTRIES();
-
- le_ii_link = zend_register_list_destructors_ex(php_close_ii_link, NULL, "ingres", module_number);
- le_ii_plink = zend_register_list_destructors_ex(_clean_ii_plink, _close_ii_plink, "ingres persistent", module_number);
-
- /* Constants registration */
- REGISTER_LONG_CONSTANT("INGRES_ASSOC", II_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INGRES_NUM", II_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INGRES_BOTH", II_BOTH, CONST_CS | CONST_PERSISTENT);
-
- /* Ingres api initialization */
- initParm.in_timeout = -1; /* timeout in ms, -1 = no timeout */
- initParm.in_version = IIAPI_VERSION_1; /* api version used */
-
- IIapi_initialize(&initParm);
- if (initParm.in_status == IIAPI_ST_SUCCESS) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-/* Module shutdown
-*/
-PHP_MSHUTDOWN_FUNCTION(ii)
-{
- IIAPI_TERMPARM termParm;
-
- UNREGISTER_INI_ENTRIES();
-
- /* Ingres api termination */
- IIapi_terminate(&termParm);
- if (termParm.tm_status == IIAPI_ST_SUCCESS) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-/* New request initialization
-*/
-PHP_RINIT_FUNCTION(ii)
-{
- IIG(default_link) = -1;
- IIG(num_links) = IIG(num_persistent);
- return SUCCESS;
-}
-
-/* End of request
-*/
-PHP_RSHUTDOWN_FUNCTION(ii)
-{
- if (IIG(default_link) != -1) {
- zend_list_delete(IIG(default_link));
- IIG(default_link) = -1;
- }
- return SUCCESS;
-}
-
-/* Informations reported to phpinfo()
-*/
-PHP_MINFO_FUNCTION(ii)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Ingres II Support", "enabled");
- sprintf(buf, "%ld", IIG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", IIG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-/* Waits for completion of the last Ingres api call
- used because of the asynchronous design of this api
-*/
-static int ii_sync(IIAPI_GENPARM *genParm)
-{
- static IIAPI_WAITPARM waitParm = {
- -1, /* no timeout, we don't want asynchronous queries */
- 0 /* wt_status (output) */
- };
-
- while (genParm->gp_completed == FALSE) {
- IIapi_wait(&waitParm);
- }
-
- if (waitParm.wt_status != IIAPI_ST_SUCCESS) {
- php_error(E_WARNING, "Ingres II: Unexpected failure of IIapi_wait()");
- return 0;
- }
- return 1;
-}
-
-/* Handles errors from Ingres api
-*/
-static int ii_success(IIAPI_GENPARM *genParm)
-{
- switch (genParm->gp_status) {
-
- case IIAPI_ST_SUCCESS:
- return II_OK;
-
- case IIAPI_ST_NO_DATA:
- return II_NO_DATA;
-
- default:
- if (genParm->gp_errorHandle == NULL) { /* no error message available */
- php_error(E_WARNING, "Ingres II: Server or API error - no error message available");
- } else {
- IIAPI_GETEINFOPARM getEInfoParm;
-
- getEInfoParm.ge_errorHandle = genParm->gp_errorHandle;
- IIapi_getErrorInfo(&getEInfoParm);
- php_error(E_WARNING, "Ingres II: Server or API error : %s", getEInfoParm.ge_message);
- php_error(E_WARNING, "Ingres II: SQLSTATE : %s", getEInfoParm.ge_SQLSTATE);
- }
- return II_FAIL;
- }
-}
-
-/* Actually handles connection creation, either persistent or not
-*/
-static void php_ii_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval **database, **username, **password;
- char *db, *user, *pass;
- int argc;
- char *hashed_details;
- int hashed_details_length;
- IIAPI_CONNPARM connParm;
- II_LINK *link;
-
- /* Setting db, user and pass according to sql_safe_mode, parameters and/or default values */
- argc = ZEND_NUM_ARGS();
-
- if (PG(sql_safe_mode)) { /* sql_safe_mode */
-
- if (argc > 0) {
- php_error(E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
- }
-
- db = pass = NULL;
- user = php_get_current_user();
- hashed_details_length = strlen(user) + sizeof("ingres___") - 1;
- hashed_details = (char *) emalloc(hashed_details_length + 1);
- sprintf(hashed_details, "Ingres__%s_", user);
-
- } else { /* non-sql_safe_mode */
-
- db = IIG(default_database);
- user = IIG(default_user);
- pass = IIG(default_password);
-
- if (argc > 3 || zend_get_parameters_ex(argc, &database, &username, &password) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
-
- case 3:
- convert_to_string_ex(password);
- pass = Z_STRVAL_PP(password);
- /* Fall-through. */
-
- case 2:
- convert_to_string_ex(username);
- user = Z_STRVAL_PP(username);
- /* Fall-through. */
-
- case 1:
- convert_to_string_ex(database);
- db = Z_STRVAL_PP(database);
- /* Fall-through. */
-
- case 0:
- break;
- }
-
- hashed_details_length = sizeof("ingres___") - 1 +
- strlen(SAFE_STRING(db)) +
- strlen(SAFE_STRING(user)) +
- strlen(SAFE_STRING(pass));
-
- hashed_details = (char *) emalloc(hashed_details_length + 1);
- sprintf(hashed_details, "Ingres_%s_%s_%s", SAFE_STRING(db), SAFE_STRING(user), SAFE_STRING(pass));
- }
-
- /* if asked for unauthorized persistency, issue a warning
- and go for a non-persistent link */
- if (persistent && !IIG(allow_persistent)) {
- php_error(E_WARNING, "Ingres II: Persistent links disabled !");
- persistent = 0;
- }
-
- if (persistent) {
- list_entry *le;
-
- /* is this link already in the persistent list ? */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le) == FAILURE) { /* no, new persistent connection */
- list_entry new_le;
-
- if (IIG(max_links) != -1 && IIG(num_links) >= IIG(max_links)) {
- php_error(E_WARNING, "Ingres II: Too many open links (%d)", IIG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (IIG(max_persistent) != -1 && IIG(num_persistent) >= IIG(max_persistent)) {
- php_error(E_WARNING, "Ingres II: Too many open persistent links (%d)", IIG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the link */
- connParm.co_genParm.gp_callback = NULL;
- connParm.co_genParm.gp_closure = NULL;
- connParm.co_target = db;
- connParm.co_username = user;
- connParm.co_password = pass;
- connParm.co_timeout = -1; /* -1 is no timeout */
- connParm.co_connHandle = NULL;
- connParm.co_tranHandle = NULL;
-
- IIapi_connect(&connParm);
-
- if (!ii_sync(&(connParm.co_genParm)) || ii_success(&(connParm.co_genParm)) == II_FAIL) {
- efree(hashed_details);
- php_error(E_WARNING, "Ingres II: Unable to connect to database (%s)", db);
- RETURN_FALSE;
- }
-
- link = (II_LINK *) malloc(sizeof(II_LINK));
- link->connHandle = connParm.co_connHandle;
- link->tranHandle = NULL;
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- link->autocommit = 0;
-
- /* hash it up */
- Z_TYPE(new_le) = le_ii_plink;
- new_le.ptr = link;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void *) &new_le, sizeof(list_entry), NULL) == FAILURE) {
- php_error(E_WARNING, "Ingres II: Unable to hash (%s)", hashed_details);
- free(link);
- efree(hashed_details);
- RETURN_FALSE;
- }
- IIG(num_persistent)++;
- IIG(num_links)++;
-
- } else { /* already open persistent connection */
-
- if (Z_TYPE_P(le) != le_ii_plink) {
- RETURN_FALSE;
- }
- /* here we should ensure that the link did not die */
- /* unable to figure out the right way to do this */
- /* maybe does the api handle the reconnection transparently ? */
- link = (II_LINK *) le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, link, le_ii_plink);
-
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual link sits.
- * if it doesn't, open a new link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1, (void **) &index_ptr) == SUCCESS) {
- int type;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (II_LINK *) index_ptr->ptr;
- ptr = zend_list_find((int) link, &type); /* check if the link is still there */
- if (ptr && (type == le_ii_link || type == le_ii_plink)) {
- zend_list_addref((int) link);
- Z_LVAL_P(return_value) = (int) link;
-
- php_ii_set_default_link((int) link TSRMLS_CC);
-
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
- }
- }
- if (IIG(max_links) != -1 && IIG(num_links) >= IIG(max_links)) {
- php_error(E_WARNING, "Ingres II: Too many open links (%d)", IIG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the link */
- connParm.co_genParm.gp_callback = NULL;
- connParm.co_genParm.gp_closure = NULL;
- connParm.co_target = db;
- connParm.co_username = user;
- connParm.co_password = pass;
- connParm.co_timeout = -1; /* -1 is no timeout */
- connParm.co_connHandle = NULL;
- connParm.co_tranHandle = NULL;
-
- IIapi_connect(&connParm);
-
- if (!ii_sync(&(connParm.co_genParm)) || ii_success(&(connParm.co_genParm)) == II_FAIL) {
- efree(hashed_details);
- php_error(E_WARNING, "Ingres II: Unable to connect to database (%s)", db);
- RETURN_FALSE;
- }
-
- link = (II_LINK *) malloc(sizeof(II_LINK));
- link->connHandle = connParm.co_connHandle;
- link->tranHandle = NULL;
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- link->autocommit = 0;
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, link, le_ii_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1, (void *) &new_index_ptr, sizeof(list_entry), NULL) == FAILURE) {
- php_error(E_WARNING, "Ingres II: Unable to hash (%s)", hashed_details);
- free(link);
- efree(hashed_details);
- RETURN_FALSE;
- }
- IIG(num_links)++;
- }
-
- efree(hashed_details);
- php_ii_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-}
-
-/* {{{ proto resource ingres_connect([string database [, string username [, string password]]])
- Open a connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class] */
-PHP_FUNCTION(ingres_connect)
-{
- php_ii_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource ingres_pconnect([string database [, string username [, string password]]])
- Open a persistent connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class] */
-PHP_FUNCTION(ingres_pconnect)
-{
- php_ii_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ingres_close([resource link])
- Close an Ingres II database connection */
-PHP_FUNCTION(ingres_close)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- zend_list_delete(link_id);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ingres_query(string query [, resource link])
- Send a SQL query to Ingres II */
-/* This should go into the documentation */
-/* Unsupported query types:
- - close
- - commit
- - connect
- - disconnect
- - get dbevent
- - prepare to commit
- - rollback
- - savepoint
- - set autocommit
- - <all cursor related queries>
- (look for dedicated functions instead) */
-PHP_FUNCTION(ingres_query)
-{
- zval **query, **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_QUERYPARM queryParm;
- IIAPI_GETDESCRPARM getDescrParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &query, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- convert_to_string_ex(query);
-
- /* if there's already an active statement, close it */
- if (ii_link->stmtHandle && _close_statement(ii_link)) {
- php_error(E_WARNING, "Ingres II: Unable to close statement !!");
- RETURN_FALSE;
- }
-
- /* send the query */
- queryParm.qy_genParm.gp_callback = NULL;
- queryParm.qy_genParm.gp_closure = NULL;
- queryParm.qy_connHandle = ii_link->connHandle;
- queryParm.qy_tranHandle = ii_link->tranHandle;
- queryParm.qy_stmtHandle = NULL;
- queryParm.qy_queryType = IIAPI_QT_QUERY;
- queryParm.qy_parameters = FALSE;
- queryParm.qy_queryText = Z_STRVAL_PP(query);
-
- IIapi_query(&queryParm);
- ii_sync(&(queryParm.qy_genParm));
-
- if (ii_success(&(queryParm.qy_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- /* store transaction and statement handles */
- ii_link->tranHandle = queryParm.qy_tranHandle;
- ii_link->stmtHandle = queryParm.qy_stmtHandle;
-
- /* get description of results */
- getDescrParm.gd_genParm.gp_callback = NULL;
- getDescrParm.gd_genParm.gp_closure = NULL;
- getDescrParm.gd_stmtHandle = ii_link->stmtHandle;
-
- IIapi_getDescriptor(&getDescrParm);
- ii_sync(&(getDescrParm.gd_genParm));
-
- if (ii_success(&(getDescrParm.gd_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- /* store the results */
- ii_link->fieldCount = getDescrParm.gd_descriptorCount;
- ii_link->descriptor = getDescrParm.gd_descriptor;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ingres_num_rows([resource link])
- Return the number of rows affected/returned by the last query */
-
-/* Warning : don't call ingres_num_rows() before ingres_fetch_xx(),
- or ingres_fetch_xx() wouldn't find any data */
-PHP_FUNCTION(ingres_num_rows)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_GETQINFOPARM getQInfoParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || zend_get_parameters_ex(argc, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 1) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- /* get number of affected rows */
- getQInfoParm.gq_genParm.gp_callback = NULL;
- getQInfoParm.gq_genParm.gp_closure = NULL;
- getQInfoParm.gq_stmtHandle = ii_link->stmtHandle;
-
- IIapi_getQueryInfo(&getQInfoParm);
- ii_sync(&(getQInfoParm.gq_genParm));
-
- if (ii_success(&(getQInfoParm.gq_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- /* return the result */
- if (getQInfoParm.gq_mask & IIAPI_GQ_ROW_COUNT) {
- RETURN_LONG(getQInfoParm.gq_rowCount);
- } else {
- RETURN_LONG(0);
- }
-}
-/* }}} */
-
-/* {{{ proto int ingres_num_fields([resource link])
- Return the number of fields returned by the last query */
-PHP_FUNCTION(ingres_num_fields)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || zend_get_parameters_ex(argc, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 1) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- RETURN_LONG(ii_link->fieldCount);
-}
-/* }}} */
-
-#define II_FIELD_INFO_NAME 1
-#define II_FIELD_INFO_TYPE 2
-#define II_FIELD_INFO_NULLABLE 3
-#define II_FIELD_INFO_LENGTH 4
-#define II_FIELD_INFO_PRECISION 5
-#define II_FIELD_INFO_SCALE 6
-
-/* Return information about a field in a query result
-*/
-static void php_ii_field_info(INTERNAL_FUNCTION_PARAMETERS, int info_type)
-{
- zval **idx, **link;
- int argc;
- int link_id = -1;
- char *name, *fun_name;
- int index;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &idx, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- convert_to_long_ex(idx);
- index = Z_LVAL_PP(idx);
-
- if (index < 1 || index > ii_link->fieldCount) {
- switch (info_type) {
-
- case II_FIELD_INFO_NAME:
- fun_name = "ii_field_name";
- break;
-
- case II_FIELD_INFO_TYPE:
- fun_name = "ii_field_type";
- break;
-
- case II_FIELD_INFO_NULLABLE:
- fun_name = "ii_field_nullable";
- break;
-
- case II_FIELD_INFO_LENGTH:
- fun_name = "ii_field_length";
- break;
-
- case II_FIELD_INFO_PRECISION:
- fun_name = "ii_field_precision";
- break;
-
- case II_FIELD_INFO_SCALE:
- fun_name = "ii_field_scale";
- break;
-
- default:
- fun_name = "foobar";
- break;
- }
- php_error(E_WARNING, "Ingres II: %s() called with wrong index (%d)", fun_name, index);
- RETURN_FALSE;
- }
-
- switch (info_type) {
-
- case II_FIELD_INFO_NAME:
- name = php_ii_field_name(ii_link, index);
- if (name == NULL) {
- RETURN_FALSE;
- }
- RETURN_STRING(name, 1);
- break;
-
- case II_FIELD_INFO_TYPE:
- switch ((ii_link->descriptor[index - 1]).ds_dataType) {
-
- case IIAPI_BYTE_TYPE:
- RETURN_STRING("IIAPI_BYTE_TYPE", 1);
-
- case IIAPI_CHA_TYPE:
- RETURN_STRING("IIAPI_CHA_TYPE", 1);
-
- case IIAPI_CHR_TYPE:
- RETURN_STRING("IIAPI_CHR_TYPE", 1);
-
- case IIAPI_DEC_TYPE:
- RETURN_STRING("IIAPI_DEC_TYPE", 1);
-
- case IIAPI_DTE_TYPE:
- RETURN_STRING("IIAPI_DTE_TYPE", 1);
-
- case IIAPI_FLT_TYPE:
- RETURN_STRING("IIAPI_FLT_TYPE", 1);
-
- case IIAPI_INT_TYPE:
- RETURN_STRING("IIAPI_INT_TYPE", 1);
-
- case IIAPI_LOGKEY_TYPE:
- RETURN_STRING("IIAPI_LOGKEY_TYPE", 1);
-
- case IIAPI_LBYTE_TYPE:
- RETURN_STRING("IIAPI_LBYTE_TYPE", 1);
-
- case IIAPI_LVCH_TYPE:
- RETURN_STRING("IIAPI_LVCH_TYPE", 1);
-
- case IIAPI_MNY_TYPE:
- RETURN_STRING("IIAPI_MNY_TYPE", 1);
-
- case IIAPI_TABKEY_TYPE:
- RETURN_STRING("IIAPI_TABKEY_TYPE", 1);
-
- case IIAPI_TXT_TYPE:
- RETURN_STRING("IIAPI_TXT_TYPE", 1);
-
- case IIAPI_VBYTE_TYPE:
- RETURN_STRING("IIAPI_VBYTE_TYPE", 1);
-
- case IIAPI_VCH_TYPE:
- RETURN_STRING("IIAPI_VCH_TYPE", 1);
-
- default:
- php_error(E_WARNING, "Ingres II: Unknown Ingres data type");
- RETURN_FALSE;
- break;
- }
- break;
-
- case II_FIELD_INFO_NULLABLE:
- if ((ii_link->descriptor[index - 1]).ds_nullable) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- break;
-
- case II_FIELD_INFO_LENGTH:
- RETURN_LONG((ii_link->descriptor[index - 1]).ds_length);
- break;
-
- case II_FIELD_INFO_PRECISION:
- RETURN_LONG((ii_link->descriptor[index - 1]).ds_precision);
- break;
-
- case II_FIELD_INFO_SCALE:
- RETURN_LONG((ii_link->descriptor[index - 1]).ds_scale);
- break;
-
- default:
- RETURN_FALSE;
- }
-}
-
-/* Return the name of a field in a query result
-*/
-static char *php_ii_field_name(II_LINK *ii_link, int index)
-{
- if (index < 1 || index > ii_link->fieldCount) {
- php_error(E_WARNING, "Ingres II: php_ii_field_name() called with wrong index (%d)", index);
- return NULL;
- }
-
- return (ii_link->descriptor[index - 1]).ds_columnName;
-}
-
-/* {{{ proto string ingres_field_name(int index [, resource link])
- Return the name of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_name)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_NAME);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_type(int index [, resource link])
- Return the type of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_type)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_TYPE);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_nullable(int index [, resource link])
- Return true if the field is nullable and false otherwise index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_nullable)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_NULLABLE);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_length(int index [, resource link])
- Return the length of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_length)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_LENGTH);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_precision(int index [, resource link])
- Return the precision of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_precision)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_PRECISION);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_scale(int index [, resource link])
- Return the scale of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_scale)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_SCALE);
-}
-/* }}} */
-
-
-/* Convert complex Ingres data types to php-usable ones
-*/
-#define IIAPI_CONVERT(destType, destSize, precision) {\
- convertParm.cv_srcDesc.ds_dataType = (ii_link->descriptor[i+k-2]).ds_dataType;\
- convertParm.cv_srcDesc.ds_nullable = (ii_link->descriptor[i+k-2]).ds_nullable;\
- convertParm.cv_srcDesc.ds_length = (ii_link->descriptor[i+k-2]).ds_length;\
- convertParm.cv_srcDesc.ds_precision = (ii_link->descriptor[i+k-2]).ds_precision;\
- convertParm.cv_srcDesc.ds_scale = (ii_link->descriptor[i+k-2]).ds_scale;\
- convertParm.cv_srcDesc.ds_columnType = (ii_link->descriptor[i+k-2]).ds_columnType;\
- convertParm.cv_srcDesc.ds_columnName = (ii_link->descriptor[i+k-2]).ds_columnName;\
- convertParm.cv_srcValue.dv_null = columnData[k-1].dv_null;\
- convertParm.cv_srcValue.dv_length = columnData[k-1].dv_length;\
- convertParm.cv_srcValue.dv_value = columnData[k-1].dv_value;\
- convertParm.cv_dstDesc.ds_dataType = destType;\
- convertParm.cv_dstDesc.ds_nullable = FALSE;\
- convertParm.cv_dstDesc.ds_length = destSize;\
- convertParm.cv_dstDesc.ds_precision = precision;\
- convertParm.cv_dstDesc.ds_scale = 0;\
- convertParm.cv_dstDesc.ds_columnType = IIAPI_COL_TUPLE;\
- convertParm.cv_dstDesc.ds_columnName = NULL;\
- convertParm.cv_dstValue.dv_null = FALSE;\
- convertParm.cv_dstValue.dv_length = convertParm.cv_dstDesc.ds_length;\
- convertParm.cv_dstValue.dv_value = emalloc(convertParm.cv_dstDesc.ds_length+1);\
-\
- IIapi_convertData(&convertParm);\
-\
- if(ii_success(&(getColParm.gc_genParm))!=II_OK) {\
- RETURN_FALSE;\
- }\
-\
- columnData[k-1].dv_length = convertParm.cv_dstValue.dv_length;\
- columnData[k-1].dv_value = convertParm.cv_dstValue.dv_value;\
- efree(convertParm.cv_srcValue.dv_value);\
-}
-
-
-/* Fetch a row of result
-*/
-static void php_ii_fetch(INTERNAL_FUNCTION_PARAMETERS, II_LINK *ii_link, int result_type)
-{
- IIAPI_GETCOLPARM getColParm;
- IIAPI_DATAVALUE *columnData;
- IIAPI_CONVERTPARM convertParm;
- int i, j, k;
- int more;
- double value_double = 0;
- long value_long = 0;
- char *value_char_p;
- int len, should_copy, correct_length;
-
- /* array initialization */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* going through all fields */
- for (i = 1; i <= ii_link->fieldCount;) {
- j = 1;
-
- /* as long as there are no long byte or long varchar fields,
- Ingres is able to fetch many fields at a time, so try to find
- these types and stop if they're found.
- variable j will get number of fields to fetch */
- if ((ii_link->descriptor[i]).ds_dataType != IIAPI_LBYTE_TYPE &&
- (ii_link->descriptor[i]).ds_dataType != IIAPI_LVCH_TYPE) {
- while ( (ii_link->descriptor[i + j - 1]).ds_dataType != IIAPI_LBYTE_TYPE &&
- (ii_link->descriptor[i + j - 1]).ds_dataType != IIAPI_LVCH_TYPE &&
- i + j <= ii_link->fieldCount) {
- j++;
- }
- }
-
- /* allocate memory for j fields */
- columnData = (IIAPI_DATAVALUE *) emalloc(j * sizeof(IIAPI_DATAVALUE));
- for (k = 1; k <= j; k++) {
- columnData[k - 1].dv_value = (II_PTR) emalloc((ii_link->descriptor[i + k - 2]).ds_length);
- }
-
- more = 1; /* this is for multi segment LBYTE and LVCH elements */
-
- while (more) {
- getColParm.gc_genParm.gp_callback = NULL;
- getColParm.gc_genParm.gp_closure = NULL;
- getColParm.gc_rowCount = 1;
- getColParm.gc_columnCount = j;
- getColParm.gc_columnData = columnData;
- getColParm.gc_stmtHandle = ii_link->stmtHandle;
- getColParm.gc_moreSegments = 0;
-
- IIapi_getColumns(&getColParm);
- ii_sync(&(getColParm.gc_genParm));
-
- if (ii_success(&(getColParm.gc_genParm)) != II_OK) {
- RETURN_FALSE;
- }
-
- more = getColParm.gc_moreSegments;
-
- if (more) { /* more segments of LBYTE or LVCH element to come */
-
- /* Multi segment LBYTE and LVCH elements not supported yet */
- php_error(E_ERROR, "Ingres II: Multi segment LBYTE and LVCH elements not supported yet");
-
- } else {
-
- for (k = 1; k <= j; k++) {
- if (columnData[k - 1].dv_null) { /* NULL value ? */
-
- if (result_type & II_NUM) {
- add_index_null(return_value, i + k - 1);
- }
- if (result_type & II_ASSOC) {
- add_assoc_null(return_value, php_ii_field_name(ii_link, i + k - 1));
- }
-
- } else { /* non NULL value */
- correct_length = 0;
-
- switch ((ii_link->descriptor[i + k - 2]).ds_dataType) {
-
- case IIAPI_DEC_TYPE: /* decimal (fixed point number) */
- case IIAPI_MNY_TYPE: /* money */
- /* convert to floating point number */
- IIAPI_CONVERT(IIAPI_FLT_TYPE, sizeof(II_FLOAT8), 53);
- /* NO break */
-
- case IIAPI_FLT_TYPE: /* floating point number */
- switch (columnData[k - 1].dv_length) {
-
- case 4:
- value_double = (double) *((II_FLOAT4 *) columnData[k - 1].dv_value);
- break;
-
- case 8:
- value_double = (double) *((II_FLOAT8 *) columnData[k - 1].dv_value);
- break;
-
- default:
- php_error(E_WARNING, "Ingres II: Invalid size for IIAPI_FLT_TYPE data (%d)", columnData[k - 1].dv_length);
- break;
- }
-
- if (result_type & II_NUM) {
- add_index_double(return_value, i + k - 1, value_double);
- }
-
- if (result_type & II_ASSOC) {
- add_assoc_double(return_value, php_ii_field_name(ii_link, i + k - 1), value_double);
- }
- break;
-
- case IIAPI_INT_TYPE: /* integer */
- switch (columnData[k - 1].dv_length) {
-
- case 1:
- value_long = (long) *((II_INT1 *) columnData[k - 1].dv_value);
- break;
-
- case 2:
- value_long = (long) *((II_INT2 *) columnData[k - 1].dv_value);
- break;
-
- case 4:
- value_long = (long) *((II_INT4 *) columnData[k - 1].dv_value);
- break;
-
- default:
- php_error(E_WARNING, "Ingres II: Invalid size for IIAPI_INT_TYPE data (%d)", columnData[k - 1].dv_length);
- break;
- }
-
- if (result_type & II_NUM) {
- add_index_long(return_value, i + k - 1, value_long);
- }
-
- if (result_type & II_ASSOC) {
- add_assoc_long(return_value, php_ii_field_name(ii_link, i + k - 1), value_long);
- }
- break;
-
- case IIAPI_TXT_TYPE: /* variable length character string */
- case IIAPI_VBYTE_TYPE: /* variable length binary string */
- case IIAPI_VCH_TYPE: /* variable length character string */
- /* real length is stored in first 2 bytes of data, so adjust
- length variable and data pointer */
- columnData[k - 1].dv_length = *((II_INT2 *) columnData[k - 1].dv_value);
- ((II_INT2 *) columnData[k - 1].dv_value)++;
- correct_length = 1;
- /* NO break */
-
- case IIAPI_BYTE_TYPE: /* fixed length binary string */
- case IIAPI_CHA_TYPE: /* fixed length character string */
- case IIAPI_CHR_TYPE: /* fixed length character string */
- case IIAPI_LOGKEY_TYPE: /* value unique to database */
- case IIAPI_TABKEY_TYPE: /* value unique to table */
- case IIAPI_DTE_TYPE: /* date */
- /* eventualy convert date to string */
- if ((ii_link->descriptor[i + k - 2]).
- ds_dataType == IIAPI_DTE_TYPE) {
- IIAPI_CONVERT(IIAPI_CHA_TYPE, 32, 0);
- }
-
- /* use php_addslashes if asked to */
- if (PG(magic_quotes_runtime)) {
- value_char_p = php_addslashes((char *) columnData[k - 1].dv_value, columnData[k - 1].dv_length, &len, 0 TSRMLS_CC);
- should_copy = 0;
- } else {
- value_char_p = (char *) columnData[k - 1].dv_value;
- len = columnData[k - 1].dv_length;
- should_copy = 1;
- }
-
- if (result_type & II_NUM) {
- add_index_stringl(return_value, i + k - 1, value_char_p, len, should_copy);
- }
-
- if (result_type & II_ASSOC) {
- add_assoc_stringl(return_value, php_ii_field_name (ii_link, i + k - 1), value_char_p, len, should_copy);
- }
-
- /* eventualy restore data pointer state for
- variable length data types */
- if (correct_length) {
- ((II_INT2 *) columnData[k - 1].dv_value)--;
- }
- break;
-
- default:
- php_error(E_WARNING, "Ingres II: Invalid SQL data type in fetched field (%d -- length : %d)", (ii_link->descriptor[i + k - 2]).ds_dataType, columnData[k - 1].dv_length);
- break;
- }
- }
- }
- }
- }
-
- /* free the memory buffers */
- for (k = 1; k <= j; k++) {
- efree(columnData[k - 1].dv_value);
- }
- efree(columnData);
-
- /* increase field pointer by number of fetched fields */
- i += j;
- }
-}
-
-/* {{{ proto array ingres_fetch_array([int result_type [, resource link]])
- Fetch a row of result into an array result_type can be II_NUM for enumerated array, II_ASSOC for associative array, or II_BOTH (default) */
-PHP_FUNCTION(ingres_fetch_array)
-{
- zval **result_type, **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 2 || zend_get_parameters_ex(argc, &result_type, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc != 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- if (argc != 0) {
- convert_to_long_ex(result_type);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- php_ii_fetch(INTERNAL_FUNCTION_PARAM_PASSTHRU, ii_link, (argc == 0 ? II_BOTH : Z_LVAL_PP(result_type)));
-}
-/* }}} */
-
-/* {{{ proto array ingres_fetch_row([resource link])
- Fetch a row of result into an enumerated array */
-PHP_FUNCTION(ingres_fetch_row)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || zend_get_parameters_ex(argc, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc != 1) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- php_ii_fetch(INTERNAL_FUNCTION_PARAM_PASSTHRU, ii_link, II_NUM);
-}
-/* }}} */
-
-/* {{{ proto array ingres_fetch_object([int result_type [, resource link]])
- Fetch a row of result into an object result_type can be II_NUM for enumerated object, II_ASSOC for associative object, or II_BOTH (default) */
-PHP_FUNCTION(ingres_fetch_object)
-{
- zval **result_type, **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 2 || zend_get_parameters_ex(argc, &result_type, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc != 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- if (argc != 0) {
- convert_to_long_ex(result_type);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- php_ii_fetch(INTERNAL_FUNCTION_PARAM_PASSTHRU, ii_link, (argc == 0 ? II_BOTH : Z_LVAL_PP(result_type)));
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- convert_to_object(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto bool ingres_rollback([resource link])
- Roll back a transaction */
-PHP_FUNCTION(ingres_rollback)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- if (_rollback_transaction(ii_link)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ingres_commit([resource link])
- Commit a transaction */
-PHP_FUNCTION(ingres_commit)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_COMMITPARM commitParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- if (ii_link->stmtHandle && _close_statement(ii_link)) {
- php_error(E_WARNING, "Ingres II: Unable to close statement !!");
- RETURN_FALSE;
- }
-
- commitParm.cm_genParm.gp_callback = NULL;
- commitParm.cm_genParm.gp_closure = NULL;
- commitParm.cm_tranHandle = ii_link->tranHandle;
-
- IIapi_commit(&commitParm);
- ii_sync(&(commitParm.cm_genParm));
-
- if (ii_success(&(commitParm.cm_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- ii_link->tranHandle = NULL;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ingres_autocommit([resource link])
- Switch autocommit on or off */
-PHP_FUNCTION(ingres_autocommit)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_AUTOPARM autoParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- autoParm.ac_genParm.gp_callback = NULL;
- autoParm.ac_genParm.gp_closure = NULL;
- autoParm.ac_connHandle = ii_link->connHandle;
- autoParm.ac_tranHandle = ii_link->tranHandle;
-
- IIapi_autocommit(&autoParm);
- ii_sync(&(autoParm.ac_genParm));
-
- if (ii_success(&(autoParm.ac_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- ii_link->autocommit = (ii_link->autocommit ? 0 : 1);
- ii_link->tranHandle = autoParm.ac_tranHandle;
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif /* HAVE_II */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
-
diff --git a/ext/ingres_ii/ii.h b/ext/ingres_ii/ii.h
deleted file mode 100644
index 5eeb446c3f..0000000000
--- a/ext/ingres_ii/ii.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Contributed by ECL IP'S Software & Services |
- | http://www.eclips-software.com |
- | mailto://idev@eclips-software.com |
- | Author: David Hénot <henot@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef II_H
-#define II_H
-
-#if HAVE_II
-#include "php_ii.h"
-#include "iiapi.h"
-
-typedef struct _II_LINK {
- int autocommit;
- II_PTR connHandle;
- II_PTR tranHandle;
- II_PTR stmtHandle;
- II_LONG fieldCount;
- IIAPI_DESCRIPTOR *descriptor;
-} II_LINK;
-
-static int ii_sync(IIAPI_GENPARM *genParm);
-static int ii_success(IIAPI_GENPARM *genParm);
-#define II_FAIL 0
-#define II_OK 1
-#define II_NO_DATA 2
-static int _close_statement(II_LINK *link);
-static int _rollback_transaction(II_LINK *link);
-static void _close_ii_link(II_LINK *link TSRMLS_DC);
-static void _close_ii_plink(zend_rsrc_list_entry *link TSRMLS_DC);
-static int php_ii_get_default_link(INTERNAL_FUNCTION_PARAMETERS);
-static void php_ii_set_default_link(int id TSRMLS_DC);
-static void php_ii_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-static char *php_ii_field_name(II_LINK *ii_link, int index);
-static void php_ii_field_info(INTERNAL_FUNCTION_PARAMETERS, int info_type);
-static void php_ii_fetch(INTERNAL_FUNCTION_PARAMETERS, II_LINK *ii_link, int result_type);
-
-#endif /* HAVE_II */
-#endif /* II_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/ingres_ii/ingres.dsp b/ext/ingres_ii/ingres.dsp
deleted file mode 100644
index c3815ac63a..0000000000
--- a/ext/ingres_ii/ingres.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ingres" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ingres - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ingres.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ingres.mak" CFG="ingres - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ingres - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ingres - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ingres - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INGRES_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_INGRES_II" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_II=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib oiapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ingres.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ingres - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INGRES_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_INGRES_II" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_II=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib oiapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ingres.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ingres - Win32 Release_TS"
-# Name "ingres - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ii.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\ii.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_ii.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/ingres_ii/php_ii.h b/ext/ingres_ii/php_ii.h
deleted file mode 100644
index 22275a6367..0000000000
--- a/ext/ingres_ii/php_ii.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Contributed by ECL IP'S Software & Services |
- | http://www.eclips-software.com |
- | mailto://idev@eclips-software.com |
- | Author: David Hénot <henot@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_II_H
-#define PHP_II_H
-
-#if HAVE_II
-
-extern zend_module_entry ingres_ii_module_entry;
-#define phpext_ingres_ii_ptr &ingres_ii_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_II_API __declspec(dllexport)
-#else
-#define PHP_II_API
-#endif
-
-PHP_MINIT_FUNCTION(ii);
-PHP_MSHUTDOWN_FUNCTION(ii);
-PHP_RINIT_FUNCTION(ii);
-PHP_RSHUTDOWN_FUNCTION(ii);
-PHP_MINFO_FUNCTION(ii);
-
-PHP_FUNCTION(ingres_connect);
-PHP_FUNCTION(ingres_pconnect);
-PHP_FUNCTION(ingres_close);
-PHP_FUNCTION(ingres_query);
-PHP_FUNCTION(ingres_num_rows);
-PHP_FUNCTION(ingres_num_fields);
-PHP_FUNCTION(ingres_field_name);
-PHP_FUNCTION(ingres_field_type);
-PHP_FUNCTION(ingres_field_nullable);
-PHP_FUNCTION(ingres_field_length);
-PHP_FUNCTION(ingres_field_precision);
-PHP_FUNCTION(ingres_field_scale);
-PHP_FUNCTION(ingres_fetch_array);
-PHP_FUNCTION(ingres_fetch_row);
-PHP_FUNCTION(ingres_fetch_object);
-PHP_FUNCTION(ingres_rollback);
-PHP_FUNCTION(ingres_commit);
-PHP_FUNCTION(ingres_autocommit);
-
-ZEND_BEGIN_MODULE_GLOBALS(ii)
- long allow_persistent;
- long max_persistent;
- long max_links;
- char *default_database;
- char *default_user;
- char *default_password;
-
- long num_persistent;
- long num_links;
- long default_link;
-ZEND_END_MODULE_GLOBALS(ii)
-
-#define II_ASSOC (1<<0)
-#define II_NUM (1<<1)
-#define II_BOTH (II_ASSOC|II_NUM)
-
-#ifdef ZTS
-#define IIG(v) TSRMG(ii_globals_id, zend_ii_globals *, v)
-#else
-#define IIG(v) (ii_globals.v)
-#endif
-
-#else
-
-#define phpext_ii_ptr NULL
-
-#endif
-
-#endif /* PHP_II_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/interbase/CREDITS b/ext/interbase/CREDITS
deleted file mode 100644
index 2decd031dd..0000000000
--- a/ext/interbase/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-InterBase
-Jouni Ahto, Andrew Avdeev
diff --git a/ext/interbase/config.m4 b/ext/interbase/config.m4
deleted file mode 100644
index a9898d2978..0000000000
--- a/ext/interbase/config.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(interbase,for InterBase support,
-[ --with-interbase[=DIR] Include InterBase support. DIR is the InterBase base
- install directory, defaults to /usr/interbase])
-
-if test "$PHP_INTERBASE" != "no"; then
- if test "$PHP_INTERBASE" = "yes"; then
- IBASE_INCDIR=/usr/interbase/include
- IBASE_LIBDIR=/usr/interbase/lib
- else
- IBASE_INCDIR=$PHP_INTERBASE/include
- IBASE_LIBDIR=$PHP_INTERBASE/lib
- fi
- PHP_ADD_LIBRARY_WITH_PATH(gds, $IBASE_LIBDIR, INTERBASE_SHARED_LIBADD)
- PHP_ADD_INCLUDE($IBASE_INCDIR)
- AC_DEFINE(HAVE_IBASE,1,[ ])
-dnl AC_CHECK_LIB(c, strptime, [AC_DEFINE(HAVE_STRPTIME,1,[])])
- PHP_NEW_EXTENSION(interbase, interbase.c, $ext_shared)
- PHP_SUBST(INTERBASE_SHARED_LIBADD)
-fi
diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c
deleted file mode 100644
index 10186f416a..0000000000
--- a/ext/interbase/interbase.c
+++ /dev/null
@@ -1,3140 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Jouni Ahto <jouni.ahto@exdec.fi> |
- | Andrew Avdeev <andy@rsc.mv.ru> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-/* TODO: Arrays, roles?
-A lot... */
-
-/*
- Changes:
- 2001-05-31: Jeremy Bettis <jeremy@deadbeef.com>
- - If a blob handle was expected and something else was
- received create a blob and add the value to it.
- - If the incoming argument to a bind parameter is NULL
- then store a NULL in the database.
- - More verbose date errors.
- 1999-09-21: Ivo Panacek <ivop@regionet.cz>
- - added COMPILE_DL section
- - more verbose php_info_ibase function
- mostly stolen from pgsql.c for now
- 1999-10-05: Ivo Panacek <ivop@regionet.cz>
- - safe rinit/rfinish: check for NULL so
- rfinish could be called repeatedly
- emalloc & co. replaced with malloc & co.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/php_standard.h"
-#include "php_globals.h"
-#include "php_interbase.h"
-
-#if HAVE_IBASE
-#include <ibase.h>
-#include <time.h>
-#include "ext/standard/fsock.h"
-#include "ext/standard/info.h"
-
-#ifdef SQL_INT64
-#include <math.h>
-#endif
-
-#ifndef SQL_DIALECT_CURRENT
-#define SQL_DIALECT_CURRENT 1
-#endif
-
-/*
-#define IBDEBUG(a) php_printf("::: %s (%d)\n", a, __LINE__);
-*/
-#define IBDEBUG(a)
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-/* {{{ extension definition structures */
-function_entry ibase_functions[] = {
- PHP_FE(ibase_connect, NULL)
- PHP_FE(ibase_pconnect, NULL)
- PHP_FE(ibase_close, NULL)
- PHP_FE(ibase_query, NULL)
- PHP_FE(ibase_fetch_row, NULL)
- PHP_FE(ibase_fetch_assoc, NULL)
- PHP_FE(ibase_fetch_object, NULL)
- PHP_FE(ibase_free_result, NULL)
- PHP_FE(ibase_prepare, NULL)
- PHP_FE(ibase_execute, NULL)
- PHP_FE(ibase_free_query, NULL)
- PHP_FE(ibase_timefmt, NULL)
-
- PHP_FE(ibase_num_fields, NULL)
- PHP_FE(ibase_field_info, NULL)
-
- PHP_FE(ibase_trans, NULL)
- PHP_FE(ibase_commit, NULL)
- PHP_FE(ibase_rollback, NULL)
-
- PHP_FE(ibase_blob_info, NULL)
- PHP_FE(ibase_blob_create, NULL)
- PHP_FE(ibase_blob_add, NULL)
- PHP_FE(ibase_blob_cancel, NULL)
- PHP_FE(ibase_blob_close, NULL)
- PHP_FE(ibase_blob_open, NULL)
- PHP_FE(ibase_blob_get, NULL)
- PHP_FE(ibase_blob_echo, NULL)
- PHP_FE(ibase_blob_import, NULL)
- PHP_FE(ibase_errmsg, NULL)
-
- PHP_FE(ibase_add_user, NULL)
- PHP_FE(ibase_modify_user, NULL)
- PHP_FE(ibase_delete_user, NULL)
-
- {NULL, NULL, NULL}
-};
-
-zend_module_entry ibase_module_entry =
-{
- STANDARD_MODULE_HEADER,
- "interbase",
- ibase_functions,
- PHP_MINIT(ibase),
- PHP_MSHUTDOWN(ibase),
- PHP_RINIT(ibase),
- PHP_RSHUTDOWN(ibase),
- PHP_MINFO(ibase),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_INTERBASE
-ZEND_GET_MODULE(ibase)
-
-#define DL_MALLOC(size) malloc(size)
-#define DL_STRDUP(str) strdup(str)
-#define DL_FREE(ptr) free(ptr)
-
-#else
-
-#define DL_MALLOC(size) emalloc(size)
-#define DL_STRDUP(str) estrdup(str)
-#define DL_FREE(ptr) efree(ptr)
-
-#endif
-
-/* True globals, no need for thread safety */
-static int le_blob, le_link, le_plink, le_result, le_query, le_trans;
-
-ZEND_DECLARE_MODULE_GLOBALS(ibase)
-
-/* }}} */
-
-/* {{{ internal macros, functions and structures */
-
-#define IB_STATUS (IBG(status))
-
-/* Fill ib_link and trans_n with the correct database link and transaction slot number. */
-
-static void get_link_trans(INTERNAL_FUNCTION_PARAMETERS, zval **link_id, ibase_db_link **ib_link, int *trans_n, int *trans_id) {
- int type;
- void *resource = NULL;
- ibase_tr_link *ib_trans;
-
- IBDEBUG("Transaction or database link?");
- if ((resource = zend_list_find(Z_LVAL_PP(link_id), &type))) {
- IBDEBUG("Found in list");
- if (type == le_trans) {
- /* Transaction resource. Fetch it, database link resource
- is stored in ib_trans->link_rsrc. */
- IBDEBUG("Type is le_trans");
- *trans_id = (Z_LVAL_PP(link_id));
- ZEND_FETCH_RESOURCE(ib_trans, ibase_tr_link *, link_id, -1, "InterBase transaction", le_trans);
- *trans_n = ib_trans->trans_num;
- ZEND_FETCH_RESOURCE2(resource, ibase_db_link *, NULL, ib_trans->link_rsrc, "InterBase link", le_link, le_plink);
- } else {
- IBDEBUG("Type is le_[p]link");
- /* Database link resource, use default transaction (=0). */
- *trans_n = 0;
- ZEND_FETCH_RESOURCE2(resource, ibase_db_link *, link_id, -1, "InterBase link", le_link, le_plink);
- }
- }
- *ib_link = resource;
-}
-
-#define RESET_ERRMSG { IBG(errmsg)[0] = '\0';}
-
-#define TEST_ERRMSG ( IBG(errmsg)[0] != '\0')
-
-/* sql variables union
- used for convert and binding input variables
-*/
-typedef struct {
- union {
- short sval;
- float fval;
- ISC_QUAD qval;
-#ifdef ISC_TIMESTAMP
- ISC_TIMESTAMP tsval;
- ISC_DATE dtval;
- ISC_TIME tmval;
-#endif
- } val;
- short sqlind;
-} BIND_BUF;
-
-
-/* get blob identifier from argument
- on empty unset argument ib_blob set to NULL
-*/
-#define GET_BLOB_ID_ARG(blob_arg, ib_blob)\
-{\
- if (Z_TYPE_P(blob_arg) == IS_STRING && Z_STRLEN_P(blob_arg) == 0) {\
- ib_blob = NULL;\
- } else if (Z_TYPE_P(blob_arg) != IS_STRING\
- || Z_STRLEN_P(blob_arg) != sizeof(ibase_blob_handle)\
- || ((ibase_blob_handle *)(Z_STRVAL_P(blob_arg)))->bl_handle != 0){\
- _php_ibase_module_error("invalid blob id");\
- RETURN_FALSE;\
- } else {\
- ib_blob = (ibase_blob_handle *)Z_STRVAL_P(blob_arg);\
- }\
-}
-
-
-/* get blob handle from argument
- note: blob already open when handle active
-*/
-#define GET_BLOB_HANDLE_ARG(blob_arg, blob_ptr) \
-{ \
- int type; \
- convert_to_long(blob_arg); \
- blob_ptr = (ibase_blob_handle *) zend_list_find(Z_LVAL_P(blob_arg), &type); \
- if (type!=le_blob) { \
- _php_ibase_module_error("%d is not blob handle", Z_LVAL_P(blob_arg)); \
- RETURN_FALSE; \
- } \
-}
-
-/* blob information struct */
-typedef struct {
- ISC_LONG max_segment; /* Length of longest segment */
- ISC_LONG num_segments; /* Total number of segments */
- ISC_LONG total_length; /* Total length of blob */
- int bl_stream; /* blob is stream ? */
-} IBASE_BLOBINFO;
-
-/* }}} */
-
-/* error handling ---------------------------- */
-
-/* {{{ proto string ibase_errmsg(void)
- Return error message */
-PHP_FUNCTION(ibase_errmsg)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (IBG(errmsg[0])) {
- RETURN_STRING(IBG(errmsg), 1);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ _php_ibase_error()
- print interbase error and save it for ibase_errmsg() */
-static void _php_ibase_error(void)
-{
- char *s;
- ISC_STATUS *statusp;
- TSRMLS_FETCH();
-
- s = IBG(errmsg);
- statusp = IB_STATUS;
- while ((s - IBG(errmsg)) < MAX_ERRMSG - (IBASE_MSGSIZE + 2) && isc_interprete(s, &statusp)) {
- strcat(IBG(errmsg), " ");
- s = IBG(errmsg) + strlen(IBG(errmsg));
- }
- php_error(E_WARNING, "InterBase: %s", IBG(errmsg));
-}
-/* }}} */
-
-/* {{{ _php_ibase_module_error()
- print php interbase module error and save it for ibase_errmsg() */
-static void _php_ibase_module_error(char *msg, ...)
-{
- va_list ap;
- int len;
- TSRMLS_FETCH();
-
- va_start(ap, msg);
- len = vsnprintf(IBG(errmsg), MAX_ERRMSG - 1, msg, ap);
- va_end(ap);
- IBG(errmsg[len]) = '\0';
-
- php_error(E_WARNING, "InterBase module: %s", IBG(errmsg));
-}
-/* }}} */
-
-
-/* destructors ---------------------- */
-
-/* {{{ _php_ibase_free_xsqlda() */
-/* not actual destructor ... */
-static void _php_ibase_free_xsqlda(XSQLDA *sqlda)
-{
- int i;
- XSQLVAR *var;
-
- IBDEBUG("Free XSQLDA?");
- if (sqlda) {
- IBDEBUG("Freeing XSQLDA...");
- var = sqlda->sqlvar;
- for (i = 0; i < sqlda->sqld; i++, var++) {
- efree(var->sqldata);
- if(var->sqlind)
- efree(var->sqlind);
- }
- efree(sqlda);
- }
-}
-/* }}} */
-
-/* {{{ _php_ibase_commit_link() */
-static void _php_ibase_commit_link(ibase_db_link *link)
-{
- int i;
- TSRMLS_FETCH();
-
- IBDEBUG("Checking transactions to close...");
- if (link->trans[0] != NULL) { /* commit default */
- IBDEBUG("Committing default transaction...");
- if (isc_commit_transaction(IB_STATUS, &link->trans[0])) {
- _php_ibase_error();
- }
- link->trans[0] = NULL;
- }
- for (i = 1; i < IBASE_TRANS_ON_LINK; i++) {
- if (link->trans[i] != NULL) {
- IBDEBUG("Rolling back other transactions...");
- if (isc_rollback_transaction(IB_STATUS, &link->trans[i])) {
- _php_ibase_error();
- }
- link->trans[i] = NULL;
- }
- }
-}
-/* }}} */
-
-static void php_ibase_commit_link_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ibase_db_link *link = (ibase_db_link *)rsrc->ptr;
-
- _php_ibase_commit_link(link);
-}
-
-/* {{{ _php_ibase_close_link() */
-static void _php_ibase_close_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ibase_db_link *link = (ibase_db_link *)rsrc->ptr;
-
- _php_ibase_commit_link(link);
- IBDEBUG("Closing normal link...");
- isc_detach_database(IB_STATUS, &link->link);
- IBG(num_links)--;
- efree(link);
-}
-/* }}} */
-
-/* {{{ _php_ibase_close_plink() */
-static void _php_ibase_close_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ibase_db_link *link = (ibase_db_link *)rsrc->ptr;
-
- _php_ibase_commit_link(link);
- IBDEBUG("Closing permanent link...");
- isc_detach_database(IB_STATUS, &link->link);
- IBG(num_persistent)--;
- IBG(num_links)--;
- free(link);
-}
-/* }}} */
-
-/* {{{ _php_ibase_free_result() */
-static void _php_ibase_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- char tr_items[] = {isc_info_tra_id };
- char tmp[32]; /* should be enough as on the Api doc */
-
- ibase_result *ib_result = (ibase_result *)rsrc->ptr;
-
- IBDEBUG("Freeing result...");
- if (ib_result){
- _php_ibase_free_xsqlda(ib_result->out_sqlda);
- isc_transaction_info(IB_STATUS, &ib_result->trans,sizeof(tr_items), tr_items, sizeof(tmp), tmp );
- /* we have a transaction still open and we really want to drop the statement ? */
- if ( !(IB_STATUS[0] && IB_STATUS[1]) && ib_result->drop_stmt && ib_result->stmt ) {
- IBDEBUG("Dropping statement handle (free_result)...");
- if (isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_drop)) {
- _php_ibase_error();
- }
- } else {
- /* Shouldn't be here unless query was select and had parameter
- placeholders, in which case ibase_execute handles this???
- (Testing seems to confirm the decision was a right one.)
- */
- IBDEBUG("Closing statement handle...");
- /*
- if (isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_close)) {
- _php_ibase_error();
- }
- */
- }
- if (ib_result->out_array) {
- efree(ib_result->out_array);
- }
- efree(ib_result);
- }
-}
-/* }}} */
-
-/* {{{ _php_ibase_free_query() */
-static void _php_ibase_free_query(ibase_query *ib_query)
-{
- char tr_items[] = {isc_info_tra_id };
- char tmp[32] ; /* ...should be enough as on the Api doc */
- TSRMLS_FETCH();
-
- IBDEBUG("Freeing query...");
- if (ib_query) {
- if (ib_query->in_sqlda) {
- efree(ib_query->in_sqlda);
- }
- if (ib_query->out_sqlda) {
- efree(ib_query->out_sqlda);
- }
- isc_transaction_info(IB_STATUS, &ib_query->trans,sizeof(tr_items), tr_items, sizeof(tmp), tmp );
- /* we have the trans still open and a statement to drop? */
- if ( !(IB_STATUS[0] && IB_STATUS[1]) && ib_query->stmt) {
- IBDEBUG("Dropping statement handle (free_query)...");
- if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_drop)){
- _php_ibase_error();
- }
- }
- if (ib_query->in_array) {
- efree(ib_query->in_array);
- }
- if (ib_query->out_array) {
- efree(ib_query->out_array);
- }
- efree(ib_query);
- }
-}
-/* }}} */
-
-static void php_ibase_free_query_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ibase_query *query = (ibase_query *)rsrc->ptr;
-
- _php_ibase_free_query(query);
-}
-
-/* {{{ _php_ibase_free_blob() */
-static void _php_ibase_free_blob(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ibase_blob_handle *ib_blob = (ibase_blob_handle *)rsrc->ptr;
-
- if (ib_blob->bl_handle != NULL) { /* blob open*/
- if (isc_cancel_blob(IB_STATUS, &ib_blob->bl_handle)) {
- php_error(E_ERROR, "You can lose data. Close any blob after reading of writing it. Use ibase_blob_close() before calling ibase_close()");
- }
- }
- efree(ib_blob);
-}
-/* }}} */
-
-/* {{{ _php_ibase_free_trans() */
-static void _php_ibase_free_trans(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ibase_tr_link *ib_trans = (ibase_tr_link *)rsrc->ptr;
- ibase_db_link *ib_link;
- int type;
- void *ptr;
-
- ptr = zend_list_find(ib_trans->link_rsrc, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- ib_link = (ibase_db_link *) zend_fetch_resource(NULL TSRMLS_CC, ib_trans->link_rsrc, "InterBase link", NULL, 2, le_link, le_plink);
-
- if (ib_link) {
- if (ib_link->trans[ib_trans->trans_num] != NULL) {
- IBDEBUG("Rolling back unhandled transaction...");
- if (isc_rollback_transaction(IB_STATUS, &ib_link->trans[ib_trans->trans_num])) {
- _php_ibase_error();
- }
- ib_link->trans[ib_trans->trans_num] = NULL;
- }
- }
- }
- efree(ib_trans);
-}
-/* }}} */
-
-/* {{{ startup, shutdown and info functions */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("ibase.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_ibase_globals, ibase_globals)
- STD_PHP_INI_ENTRY_EX("ibase.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_ibase_globals, ibase_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("ibase.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_ibase_globals, ibase_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("ibase.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_ibase_globals, ibase_globals)
- STD_PHP_INI_ENTRY("ibase.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, zend_ibase_globals, ibase_globals)
- STD_PHP_INI_ENTRY("ibase.timestampformat", "%m/%d/%Y %H:%M:%S", PHP_INI_ALL, OnUpdateString, cfg_timestampformat, zend_ibase_globals, ibase_globals)
- STD_PHP_INI_ENTRY("ibase.dateformat", "%m/%d/%Y", PHP_INI_ALL, OnUpdateString, cfg_dateformat, zend_ibase_globals, ibase_globals)
- STD_PHP_INI_ENTRY("ibase.timeformat", "%H:%M:%S", PHP_INI_ALL, OnUpdateString, cfg_timeformat, zend_ibase_globals, ibase_globals)
-PHP_INI_END()
-
-static void php_ibase_init_globals(zend_ibase_globals *ibase_globals)
-{
- ibase_globals->timestampformat = NULL;
- ibase_globals->dateformat = NULL;
- ibase_globals->timeformat = NULL;
- ibase_globals->errmsg = NULL;
- ibase_globals->num_persistent = 0;
-}
-
-PHP_MINIT_FUNCTION(ibase)
-{
- ZEND_INIT_MODULE_GLOBALS(ibase, php_ibase_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_result = zend_register_list_destructors_ex(_php_ibase_free_result, NULL, "interbase result", module_number);
- le_query = zend_register_list_destructors_ex(php_ibase_free_query_rsrc, NULL, "interbase query", module_number);
- le_blob = zend_register_list_destructors_ex(_php_ibase_free_blob, NULL, "interbase blob", module_number);
- le_link = zend_register_list_destructors_ex(_php_ibase_close_link, NULL, "interbase link", module_number);
- le_plink = zend_register_list_destructors_ex(php_ibase_commit_link_rsrc, _php_ibase_close_plink, "interbase link persistent", module_number);
- le_trans = zend_register_list_destructors_ex(_php_ibase_free_trans, NULL, "interbase transaction", module_number);
-
- REGISTER_LONG_CONSTANT("IBASE_DEFAULT", PHP_IBASE_DEFAULT, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_TEXT", PHP_IBASE_TEXT, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_UNIXTIME", PHP_IBASE_UNIXTIME, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_READ", PHP_IBASE_READ, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_COMMITTED", PHP_IBASE_COMMITTED, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_CONSISTENCY", PHP_IBASE_CONSISTENCY, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_NOWAIT", PHP_IBASE_NOWAIT, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_TIMESTAMP", PHP_IBASE_TIMESTAMP, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_DATE", PHP_IBASE_DATE, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_TIME", PHP_IBASE_TIME, CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(ibase)
-{
- IBG(default_link)= -1;
- IBG(num_links) = IBG(num_persistent);
-
- if (IBG(timestampformat))
- DL_FREE(IBG(timestampformat));
- IBG(timestampformat) = DL_STRDUP(IBG(cfg_timestampformat));
-
- if (IBG(dateformat))
- DL_FREE(IBG(dateformat));
- IBG(dateformat) = DL_STRDUP(IBG(cfg_dateformat));
-
- if (IBG(timeformat))
- DL_FREE(IBG(timeformat));
- IBG(timeformat) = DL_STRDUP(IBG(cfg_timeformat));
-
- if (IBG(errmsg))
- DL_FREE(IBG(errmsg));
- IBG(errmsg) = DL_MALLOC(sizeof(char)*MAX_ERRMSG+1);
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(ibase)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(ibase)
-{
- if (IBG(timestampformat))
- DL_FREE(IBG(timestampformat));
- IBG(timestampformat) = NULL;
-
- if (IBG(dateformat))
- DL_FREE(IBG(dateformat));
- IBG(dateformat) = NULL;
-
- if (IBG(timeformat))
- DL_FREE(IBG(timeformat));
- IBG(timeformat) = NULL;
-
- if (IBG(errmsg))
- DL_FREE(IBG(errmsg));
- IBG(errmsg) = NULL;
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(ibase)
-{
- char tmp[32];
-
- php_info_print_table_start();
- php_info_print_table_row(2, "Interbase Support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision$");
-#ifdef COMPILE_DL_INTERBASE
- php_info_print_table_row(2, "Dynamic Module", "yes");
-#endif
- php_info_print_table_row(2, "Allow Persistent Links", (IBG(allow_persistent)?"Yes":"No") );
-
- if (IBG(max_persistent) == -1) {
- snprintf(tmp, 31, "%ld/unlimited", IBG(num_persistent));
- } else {
- snprintf(tmp, 31, "%ld/%ld", IBG(num_persistent), IBG(max_persistent));
- }
- tmp[31]=0;
- php_info_print_table_row(2, "Persistent Links", tmp );
-
- if (IBG(max_links) == -1) {
- snprintf(tmp, 31, "%ld/unlimited", IBG(num_links));
- } else {
- snprintf(tmp, 31, "%ld/%ld", IBG(num_links), IBG(max_links));
- }
- tmp[31]=0;
- php_info_print_table_row(2, "Total Links", tmp );
-
- php_info_print_table_row(2, "Timestamp Format", IBG(timestampformat) );
- php_info_print_table_row(2, "Date Format", IBG(dateformat) );
- php_info_print_table_row(2, "Time Format", IBG(timeformat) );
-
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ _php_ibase_attach_db() */
-static int _php_ibase_attach_db(char *server, char *uname, char *passwd, char *charset, int buffers, char *role, isc_db_handle *db)
-{
- char dpb_buffer[256], *dpb, *p;
- int dpb_length, len;
- TSRMLS_FETCH();
-
- dpb = dpb_buffer;
-
- *dpb++ = isc_dpb_version1;
-
- if (uname != NULL && (len = strlen(uname))) {
- *dpb++ = isc_dpb_user_name;
- *dpb++ = len;
- for (p = uname; *p;) {
- *dpb++ = *p++;
- }
- }
-
- if (passwd != NULL && (len = strlen(passwd))) {
- *dpb++ = isc_dpb_password;
- *dpb++ = strlen(passwd);
- for (p = passwd; *p;) {
- *dpb++ = *p++;
- }
- }
-
- if (charset != NULL && (len = strlen(charset))) {
- *dpb++ = isc_dpb_lc_ctype;
- *dpb++ = strlen(charset);
- for (p = charset; *p;) {
- *dpb++ = *p++;
- }
- }
-
- if (buffers) {
- *dpb++ = isc_dpb_num_buffers;
- *dpb++ = 1;
- *dpb++ = buffers;
- }
-
-#ifdef isc_dpb_sql_role_name
- if (role != NULL && (len = strlen(role))) {
- *dpb++ = isc_dpb_sql_role_name;
- *dpb++ = strlen(role);
- for (p = role; *p;) {
- *dpb++ = *p++;
- }
- }
-#endif
-
- dpb_length = dpb - dpb_buffer;
-
- if (isc_attach_database(IB_STATUS, (short) strlen(server), server, db, (short) dpb_length, dpb_buffer)) {
- _php_ibase_error();
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _php_ibase_connect() */
-static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- pval ***args;
- char *ib_server = NULL, *ib_uname, *ib_passwd, *ib_charset = NULL, *ib_buffers = NULL, *ib_dialect = NULL, *ib_role = NULL;
- int i, ib_uname_len, ib_passwd_len;
- isc_db_handle db_handle = NULL;
- char *hashed_details;
- int hashed_details_length = 0;
- ibase_db_link *ib_link = NULL;
-
- RESET_ERRMSG;
-
- ib_uname = IBG(default_user);
- ib_passwd = IBG(default_password);
- ib_uname_len = ib_uname ? strlen(ib_uname) : 0;
- ib_passwd_len = ib_passwd ? strlen(ib_passwd) : 0;
-
- if(ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 7){
- WRONG_PARAM_COUNT;
- }
-
- args = (pval ***) emalloc(sizeof(pval **)*ZEND_NUM_ARGS());
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- switch(ZEND_NUM_ARGS()) {
- case 7:
- convert_to_string_ex(args[6]);
- ib_role = Z_STRVAL_PP(args[6]);
- hashed_details_length += Z_STRLEN_PP(args[6]);
- /* fallout */
- case 6:
- convert_to_string_ex(args[5]);
- ib_dialect = Z_STRVAL_PP(args[5]);
- hashed_details_length += Z_STRLEN_PP(args[5]);
- /* fallout */
- case 5:
- convert_to_string_ex(args[4]);
- ib_buffers = Z_STRVAL_PP(args[4]);
- hashed_details_length += Z_STRLEN_PP(args[4]);
- /* fallout */
- case 4:
- convert_to_string_ex(args[3]);
- ib_charset = Z_STRVAL_PP(args[3]);
- hashed_details_length += Z_STRLEN_PP(args[3]);
- /* fallout */
- case 3:
- convert_to_string_ex(args[2]);
- ib_passwd = Z_STRVAL_PP(args[2]);
- hashed_details_length += Z_STRLEN_PP(args[2]);
- /* fallout */
- case 2:
- convert_to_string_ex(args[1]);
- ib_uname = Z_STRVAL_PP(args[1]);
- hashed_details_length += Z_STRLEN_PP(args[1]);
- /* fallout */
- case 1:
- convert_to_string_ex(args[0]);
- ib_server = Z_STRVAL_PP(args[0]);
- hashed_details_length += Z_STRLEN_PP(args[0]);
- } /* case */
-
- efree(args);
-
- hashed_details = (char *) emalloc(hashed_details_length+strlen("ibase_%s_%s_%s_%s_%s_%s_%s")+1);
- sprintf(hashed_details, "ibase_%s_%s_%s_%s_%s_%s_%s", SAFE_STRING(ib_server), SAFE_STRING(ib_uname), SAFE_STRING(ib_passwd), SAFE_STRING(ib_charset), SAFE_STRING(ib_buffers), SAFE_STRING(ib_dialect), SAFE_STRING(ib_role));
-
- if (persistent) {
- list_entry *le;
- int open_new_connection = 1;
-
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le) != FAILURE) {
- char tmp_1[] = {isc_info_base_level, isc_info_end};
- char tmp_2[8]; /* Enough? Hope so... */
-
- if (Z_TYPE_P(le) != le_plink) {
- RETURN_FALSE;
- }
- /* Check if connection has timed out */
- ib_link = (ibase_db_link *) le->ptr;
- if (!isc_database_info(IB_STATUS, &ib_link->link, sizeof(tmp_1), tmp_1, sizeof(tmp_2), tmp_2)) {
- open_new_connection = 0;
- }
- }
-
- /* There was no previous connection to use or it has timed out */
- if (open_new_connection) {
- list_entry new_le;
-
- if ((IBG(max_links) != -1) && (IBG(num_links) >= IBG(max_links))) {
- _php_ibase_module_error("Too many open links (%d)", IBG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if ((IBG(max_persistent) != -1) && (IBG(num_persistent) >= IBG(max_persistent))) {
- _php_ibase_module_error("Too many open persistent links (%d)", IBG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the ib_link */
-
- if (_php_ibase_attach_db(ib_server, ib_uname, ib_passwd, ib_charset,
- (ib_buffers ? strtoul(ib_buffers, NULL, 0) : 0),
- ib_role, &db_handle) == FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- ib_link = (ibase_db_link *) malloc(sizeof(ibase_db_link));
- ib_link->link = db_handle;
- ib_link->dialect = (ib_dialect ? (unsigned short) strtoul(ib_dialect, NULL, 10) : SQL_DIALECT_CURRENT);
- for (i = 0; i < IBASE_TRANS_ON_LINK; i++)
- ib_link->trans[i] = NULL;
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = ib_link;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- free(ib_link);
- RETURN_FALSE;
- }
- IBG(num_links)++;
- IBG(num_persistent)++;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, ib_link, le_plink);
-
- } else {
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual ib_link sits.
- * if it doesn't, open a new ib_link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1, (void **) &index_ptr)==SUCCESS) {
- int type, xlink;
- void *ptr;
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- xlink = (int) index_ptr->ptr;
- ptr = zend_list_find(xlink, &type); /* check if the xlink is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(xlink);
- Z_LVAL_P(return_value) = xlink;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- IBG(default_link) = Z_LVAL_P(return_value);
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- }
- }
- if ((IBG(max_links) != -1) && (IBG(num_links) >= IBG(max_links))) {
- _php_ibase_module_error("Too many open links (%d)", IBG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- /* create the ib_link */
-
- if (_php_ibase_attach_db(ib_server, ib_uname, ib_passwd, ib_charset,
- (ib_buffers ? strtoul(ib_buffers, NULL, 0) : 0),
- ib_role, &db_handle) == FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- ib_link = (ibase_db_link *) emalloc(sizeof(ibase_db_link));
- ib_link->link = db_handle;
- ib_link->dialect = (ib_dialect ? (unsigned short) strtoul(ib_dialect, NULL, 10) : SQL_DIALECT_CURRENT);
- for (i = 0; i < IBASE_TRANS_ON_LINK; i++)
- ib_link->trans[i] = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, ib_link, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1, (void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- IBG(num_links)++;
- }
- efree(hashed_details);
- zend_list_addref(Z_LVAL_P(return_value));
- IBG(default_link) = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto int ibase_connect(string database [, string username] [, string password] [, string charset] [, int buffers] [, int dialect] [, string role])
- Open a connection to an InterBase database */
-PHP_FUNCTION(ibase_connect)
-{
- _php_ibase_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int ibase_pconnect(string database [, string username] [, string password] [, string charset] [, int buffers] [, int dialect] [, string role])
- Open a persistent connection to an InterBase database */
-PHP_FUNCTION(ibase_pconnect)
-{
- _php_ibase_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int ibase_close([int link_identifier])
- Close an InterBase connection */
-PHP_FUNCTION(ibase_close)
-{
- zval **link_arg;
- ibase_db_link *ib_link;
- int link_id;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- link_id = IBG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &link_arg) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(link_arg);
- link_id = Z_LVAL_PP(link_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, link_arg, link_id, "InterBase link", le_link, le_plink);
- zend_list_delete(link_id);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ _php_ibase_alloc_array() */
-static int _php_ibase_alloc_array(ibase_array **ib_arrayp, int *array_cntp,
- XSQLDA *sqlda, isc_db_handle link, isc_tr_handle trans)
-{
-#define IB_ARRAY (*ib_arrayp)
-
- int i, dim, ar_cnt, ar_length;
- XSQLVAR *var;
- TSRMLS_FETCH();
-
- IB_ARRAY = NULL;
-
- ar_cnt = 0; /* find arrays */
- var = sqlda->sqlvar;
- for (i = 0; i < sqlda->sqld; i++, var++) {
- if ((var->sqltype & ~1) == SQL_ARRAY)
- ar_cnt++;
- }
-
- if (ar_cnt) { /* have arrays ? */
-
- *array_cntp = ar_cnt;
- IB_ARRAY = emalloc(sizeof(ibase_array)*ar_cnt);
- ar_cnt = 0;
- var = sqlda->sqlvar;
- for (i = 0; i < sqlda->sqld; i++, var++) {
- if ((var->sqltype & ~1) == SQL_ARRAY) {
-
- ISC_ARRAY_DESC *ar_desc = &IB_ARRAY[ar_cnt].ar_desc;
-
- if (isc_array_lookup_bounds(IB_STATUS, &link, &trans,
- var->relname, var->sqlname, ar_desc)) {
- _php_ibase_error();
- efree(IB_ARRAY);
- IB_ARRAY = NULL;
- return FAILURE;
- }
-
- switch (ar_desc->array_desc_dtype) {
- case blr_text:
- case blr_text2:
- IB_ARRAY[ar_cnt].el_type = SQL_TEXT;
- IB_ARRAY[ar_cnt].el_size = ar_desc->array_desc_length+1;
- break;
- case blr_short:
- IB_ARRAY[ar_cnt].el_type = SQL_SHORT;
- IB_ARRAY[ar_cnt].el_size = sizeof(short);
- break;
- case blr_long:
- IB_ARRAY[ar_cnt].el_type = SQL_LONG;
- IB_ARRAY[ar_cnt].el_size = sizeof(long);
- break;
- case blr_float:
- IB_ARRAY[ar_cnt].el_type = SQL_FLOAT;
- IB_ARRAY[ar_cnt].el_size = sizeof(float);
- break;
- case blr_double:
- IB_ARRAY[ar_cnt].el_type = SQL_DOUBLE;
- IB_ARRAY[ar_cnt].el_size = sizeof(double);
- break;
- case blr_date:
- IB_ARRAY[ar_cnt].el_type = SQL_DATE;
- IB_ARRAY[ar_cnt].el_size = sizeof(ISC_QUAD);
- break;
- case blr_varying:
- case blr_varying2: /* changed to SQL_TEXT ? */
- /* sql_type = SQL_VARYING; Why? FIXME: ??? */
- IB_ARRAY[ar_cnt].el_type = SQL_TEXT;
- IB_ARRAY[ar_cnt].el_size = ar_desc->array_desc_length+sizeof(short);
- break;
- default:
- _php_ibase_module_error("unexpected array type %d in relation '%s' column '%s')",
- ar_desc->array_desc_dtype, var->relname, var->sqlname);
- efree(IB_ARRAY);
- IB_ARRAY = NULL;
- return FAILURE;
- } /* switch array_desc_type */
-
- ar_length = 0; /* calculate elements count */
- for (dim = 0; dim < ar_desc->array_desc_dimensions; dim++) {
- ar_length += 1 + ar_desc->array_desc_bounds[dim].array_bound_upper
- - ar_desc->array_desc_bounds[dim].array_bound_lower;
- }
- IB_ARRAY[ar_cnt].ar_size = IB_ARRAY[ar_cnt].el_size * ar_length;
-
- ar_cnt++;
-
- } /* if SQL_ARRAY */
- } /* for column */
- } /* if array_cnt */
-
- return SUCCESS;
-#undef IB_ARRAY
-}
-/* }}} */
-
-/* {{{ _php_ibase_alloc_query() */
-/* allocate and prepare query */
-static int _php_ibase_alloc_query(ibase_query **ib_queryp, isc_db_handle link, isc_tr_handle trans, char *query, unsigned short dialect)
-{
-#define IB_QUERY (*ib_queryp)
- TSRMLS_FETCH();
-
- IB_QUERY = emalloc(sizeof(ibase_query));
- IB_QUERY->link = link;
- IB_QUERY->trans = trans;
- IB_QUERY->stmt = NULL;
- IB_QUERY->out_sqlda = NULL;
- IB_QUERY->in_sqlda = NULL;
- IB_QUERY->in_array = NULL;
- IB_QUERY->in_array_cnt = 0;
- IB_QUERY->out_array = NULL;
- IB_QUERY->out_array_cnt = 0;
- IB_QUERY->dialect = dialect;
-
- if (isc_dsql_allocate_statement(IB_STATUS, &link, &IB_QUERY->stmt)) {
- _php_ibase_error();
- goto _php_ibase_alloc_query_error;
- }
-
- IB_QUERY->out_sqlda = (XSQLDA *) emalloc(XSQLDA_LENGTH(0));
- IB_QUERY->out_sqlda->sqln = 0;
- IB_QUERY->out_sqlda->version = SQLDA_VERSION1;
-
- if (isc_dsql_prepare(IB_STATUS, &IB_QUERY->trans, &IB_QUERY->stmt, 0, query, dialect, IB_QUERY->out_sqlda)) {
- _php_ibase_error();
- goto _php_ibase_alloc_query_error;
- }
-
- /* not enough output variables ? */
- if (IB_QUERY->out_sqlda->sqld > IB_QUERY->out_sqlda->sqln) {
- IB_QUERY->out_sqlda = erealloc(IB_QUERY->out_sqlda, XSQLDA_LENGTH(IB_QUERY->out_sqlda->sqld));
- IB_QUERY->out_sqlda->sqln = IB_QUERY->out_sqlda->sqld;
- IB_QUERY->out_sqlda->version = SQLDA_VERSION1;
- if (isc_dsql_describe(IB_STATUS, &IB_QUERY->stmt, SQLDA_VERSION1, IB_QUERY->out_sqlda)) {
- _php_ibase_error();
- goto _php_ibase_alloc_query_error;
- }
- }
-
- /* maybe have input placeholders? */
- IB_QUERY->in_sqlda = emalloc(XSQLDA_LENGTH(0));
- IB_QUERY->in_sqlda->sqln = 0;
- IB_QUERY->in_sqlda->version = SQLDA_VERSION1;
- if (isc_dsql_describe_bind(IB_STATUS, &IB_QUERY->stmt, SQLDA_VERSION1, IB_QUERY->in_sqlda)) {
- _php_ibase_error();
- goto _php_ibase_alloc_query_error;
- }
-
- /* not enough input variables ? */
- if (IB_QUERY->in_sqlda->sqln < IB_QUERY->in_sqlda->sqld) {
- IB_QUERY->in_sqlda = erealloc(IB_QUERY->in_sqlda, XSQLDA_LENGTH(IB_QUERY->in_sqlda->sqld));
- IB_QUERY->in_sqlda->sqln = IB_QUERY->in_sqlda->sqld;
- IB_QUERY->in_sqlda->version = SQLDA_VERSION1;
- if (isc_dsql_describe_bind(IB_STATUS, &IB_QUERY->stmt, SQLDA_VERSION1, IB_QUERY->in_sqlda)) {
- _php_ibase_error();
- goto _php_ibase_alloc_query_error;
- }
- }
-
- /* allocate arrays... */
- if (_php_ibase_alloc_array(&IB_QUERY->in_array, &IB_QUERY->in_array_cnt,
- IB_QUERY->in_sqlda, link, trans) == FAILURE) {
- goto _php_ibase_alloc_query_error; /* error report already done */
- }
-
- if (_php_ibase_alloc_array(&IB_QUERY->out_array, &IB_QUERY->out_array_cnt,
- IB_QUERY->out_sqlda, link, trans) == FAILURE) {
- goto _php_ibase_alloc_query_error;
- }
-
- /* no, haven't placeholders at all */
- if (IB_QUERY->in_sqlda->sqld == 0) {
- efree(IB_QUERY->in_sqlda);
- IB_QUERY->in_sqlda = NULL;
- }
-
- if (IB_QUERY->out_sqlda->sqld == 0) {
- efree(IB_QUERY->out_sqlda);
- IB_QUERY->out_sqlda = NULL;
- }
-
- return SUCCESS;
-
-_php_ibase_alloc_query_error:
-
- if (IB_QUERY->out_sqlda)
- efree(IB_QUERY->out_sqlda);
- if (IB_QUERY->in_sqlda)
- efree(IB_QUERY->in_sqlda);
- if (IB_QUERY->out_array)
- efree(IB_QUERY->out_array);
- efree(IB_QUERY);
- IB_QUERY = NULL;
-
- return FAILURE;
-#undef IB_QUERY
-}
-/* }}} */
-
-/* {{{ _php_ibase_bind()
- Bind parameter placeholders in a previously prepared query */
-static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf, ibase_query *ib_query)
-{
- XSQLVAR *var;
- pval *b_var;
- int i;
-
- var = sqlda->sqlvar;
- for (i = 0; i < sqlda->sqld; var++, i++) { /* binded vars */
-
- buf[i].sqlind = 0;
- var->sqlind = &buf[i].sqlind;
- b_var = b_vars[i];
-
- if (Z_TYPE_P(b_var) == IS_NULL) {
- static char nothing[64];
- static short null_flag = -1;
- var->sqldata = nothing;
- var->sqltype |= 1;
- var->sqlind = &null_flag;
- if (var->sqllen > 64)
- var->sqllen = 64;
- } else
- switch(var->sqltype & ~1) {
- case SQL_TEXT: /* direct to variable */
- case SQL_VARYING:
- convert_to_string(b_var);
- var->sqldata = (void ISC_FAR *)Z_STRVAL_P(b_var);
- var->sqllen = Z_STRLEN_P(b_var);
- var->sqltype = SQL_TEXT + (var->sqltype & 1);
- break;
- case SQL_SHORT:
- convert_to_long(b_var);
- if (Z_LVAL_P(b_var) > SHRT_MAX || Z_LVAL_P(b_var) < SHRT_MIN) {
- _php_ibase_module_error("field %*s overflow", var->aliasname_length, var->aliasname);
- return FAILURE;
- }
- buf[i].val.sval = (short)Z_LVAL_P(b_var);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.sval);
- break;
- case SQL_LONG:
- if (var->sqlscale < 0) {
- /*
- DECIMAL or NUMERIC field stored internally as scaled integer.
- Coerce it to string and let InterBase's internal routines
- handle it.
- */
- convert_to_string(b_var);
- var->sqldata = (void ISC_FAR *)Z_STRVAL_P(b_var);
- var->sqllen = Z_STRLEN_P(b_var);
- var->sqltype = SQL_TEXT;
- } else {
- convert_to_long(b_var);
- var->sqldata = (void ISC_FAR *)(&Z_LVAL_P(b_var));
- }
- break;
- case SQL_FLOAT:
- convert_to_double(b_var);
- buf[i].val.fval = (float)Z_DVAL_P(b_var);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.fval);
- break;
- case SQL_DOUBLE: /* direct to variable */
- convert_to_double(b_var);
- var->sqldata = (void ISC_FAR *)(&Z_DVAL_P(b_var));
- break;
-#ifdef SQL_INT64
- case SQL_INT64:
- /*
- Just let InterBase's internal routines handle it.
- Besides, it might even have originally been a string
- to avoid rounding errors...
- */
- convert_to_string(b_var);
- var->sqldata = (void ISC_FAR *)Z_STRVAL_P(b_var);
- var->sqllen = Z_STRLEN_P(b_var);
- var->sqltype = SQL_TEXT;
- break;
-#endif
-#ifndef SQL_TIMESTAMP
- case SQL_DATE:
-#else
- case SQL_TIMESTAMP:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
-#endif
-#ifndef HAVE_STRPTIME
-#ifndef SQL_TIMESTAMP
- /* Parsing doesn't seem to happen with older versions... */
- {
- struct tm t;
- int n;
-
- t.tm_year = t.tm_mon = t.tm_mday = t.tm_hour =
- t.tm_min = t.tm_sec = 0;
-
- convert_to_string(b_var);
-
- n = sscanf(Z_STRVAL_P(b_var), "%d%*[/]%d%*[/]%d %d%*[:]%d%*[:]%d",
- &t.tm_mon, &t.tm_mday, &t.tm_year, &t.tm_hour, &t.tm_min, &t.tm_sec);
- if(n != 3 && n != 6){
- _php_ibase_module_error("invalid date/time format: Expected 3 or 6 fields, got %d. Use format m/d/Y H:i:s. You gave '%s'", n, Z_STRVAL_P(b_var));
- return FAILURE;
- }
- t.tm_year -= 1900;
- t.tm_mon--;
- isc_encode_date(&t, &buf[i].val.qval);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.qval);
- }
-#else
- /*
- Once again, InterBase's internal parsing routines
- seems to be a good solution... Might change this on
- platforms that have strptime()? Code is there and works,
- but the functions existence is not yet tested...
- ask Sascha?
- */
- convert_to_string(b_var);
- var->sqldata = (void ISC_FAR *)Z_STRVAL_P(b_var);
- var->sqllen = Z_STRLEN_P(b_var);
- var->sqltype = SQL_TEXT;
-#endif
-#else
- {
- struct tm t;
-
- convert_to_string(b_var);
-#ifndef SQL_TIMESTAMP
- strptime(Z_STRVAL_P(b_var), IBG(timestampformat), &t);
- isc_encode_date(&t, &buf[i].val.qval);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.qval);
-#else
- switch (var->sqltype & ~1) {
- case SQL_TIMESTAMP:
- strptime(Z_STRVAL_P(b_var), IBG(timestampformat), &t);
- isc_encode_timestamp(&t, &buf[i].val.tsval);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.tsval);
- break;
- case SQL_TYPE_DATE:
- strptime(Z_STRVAL_P(b_var), IBG(dateformat), &t);
- isc_encode_sql_date(&t, &buf[i].val.dtval);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.dtval);
- break;
- case SQL_TYPE_TIME:
- strptime(Z_STRVAL_P(b_var), IBG(timeformat), &t);
- isc_encode_sql_time(&t, &buf[i].val.tmval);
- var->sqldata = (void ISC_FAR *)(&buf[i].val.tmval);
- break;
- }
-#endif
- }
-#endif
- break;
- case SQL_BLOB:
- {
- ibase_blob_handle *ib_blob_id;
- if (Z_TYPE_P(b_var) != IS_STRING
- || Z_STRLEN_P(b_var) != sizeof(ibase_blob_handle)
- || ((ibase_blob_handle *)(Z_STRVAL_P(b_var)))->bl_handle != 0) {
- ibase_blob_handle *ib_blob;
- TSRMLS_FETCH();
-
- ib_blob = (ibase_blob_handle *) emalloc(sizeof(ibase_blob_handle));
- ib_blob->trans_handle = ib_query->trans;
- ib_blob->link = ib_query->link;
- ib_blob->bl_handle = NULL;
- if (isc_create_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle, &ib_blob->bl_qd)) {
- efree(ib_blob);
- _php_ibase_error();
- return FAILURE;
- }
- convert_to_string(b_var);
- if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, (unsigned short) Z_STRLEN_P(b_var), Z_STRVAL_P(b_var))) {
- _php_ibase_error();
- return FAILURE;
- }
- if (isc_close_blob(IB_STATUS, &ib_blob->bl_handle)) {
- _php_ibase_error();
- return FAILURE;
- }
- ib_blob_id = ib_blob;
- var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd;
-/*
- _php_ibase_module_error("invalid blob id string");
- return FAILURE;
-*/
- } else {
- ib_blob_id = (ibase_blob_handle *)Z_STRVAL_P(b_var);
-
- var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd;
- }
- }
- break;
- case SQL_ARRAY:
- _php_ibase_module_error("binding arrays not supported yet");
- return FAILURE;
- break;
- } /*switch*/
- } /*for*/
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _php_ibase_alloc_xsqlda() */
-static void _php_ibase_alloc_xsqlda(XSQLDA *sqlda)
-{
- int i;
- XSQLVAR *var = sqlda->sqlvar;
-
-
- for (i = 0; i < sqlda->sqld; i++, var++) {
- switch(var->sqltype & ~1) {
- case SQL_TEXT:
- var->sqldata = emalloc(sizeof(char)*(var->sqllen));
- break;
- case SQL_VARYING:
- var->sqldata = emalloc(sizeof(char)*(var->sqllen+sizeof(short)));
- break;
- case SQL_SHORT:
- var->sqldata = emalloc(sizeof(short));
- break;
- case SQL_LONG:
- var->sqldata = emalloc(sizeof(long));
- break;
- case SQL_FLOAT:
- var->sqldata = emalloc(sizeof(float));
- break;
- case SQL_DOUBLE:
- var->sqldata = emalloc(sizeof(double));
- break;
-#ifdef SQL_INT64
- case SQL_INT64:
- var->sqldata = emalloc(sizeof(ISC_INT64));
- break;
-#endif
-#ifdef SQL_TIMESTAMP
- case SQL_TIMESTAMP:
- var->sqldata = emalloc(sizeof(ISC_TIMESTAMP));
- break;
- case SQL_TYPE_DATE:
- var->sqldata = emalloc(sizeof(ISC_DATE));
- break;
- case SQL_TYPE_TIME:
- var->sqldata = emalloc(sizeof(ISC_TIME));
- break;
-#else
- case SQL_DATE:
-#endif
- case SQL_BLOB:
- case SQL_ARRAY:
- var->sqldata = emalloc(sizeof(ISC_QUAD));
- break;
- } /*switch*/
- if (var->sqltype & 1) /* sql NULL flag */
- var->sqlind = emalloc(sizeof(short));
- else
- var->sqlind = NULL;
- } /* for*/
-}
-/* }}} */
-
-/* {{{ _php_ibase_exec() */
-static int _php_ibase_exec(ibase_result **ib_resultp, ibase_query *ib_query, int argc, pval **args)
-{
-#define IB_RESULT (*ib_resultp)
- XSQLDA *in_sqlda = NULL, *out_sqlda = NULL;
- BIND_BUF *bind_buf = NULL;
- int rv = FAILURE;
- TSRMLS_FETCH();
-
- IB_RESULT = NULL;
-
- /* allocate sqlda and output buffers */
- if (ib_query->out_sqlda) { /* output variables in select, select for update */
- IBDEBUG("Query wants XSQLDA for output");
- IB_RESULT = emalloc(sizeof(ibase_result));
- IB_RESULT->link = ib_query->link;
- IB_RESULT->trans = ib_query->trans;
- IB_RESULT->stmt = ib_query->stmt;
- IB_RESULT->drop_stmt = 0; /* when free result close but not drop!*/
-
- out_sqlda = IB_RESULT->out_sqlda = emalloc(XSQLDA_LENGTH(ib_query->out_sqlda->sqld));
- memcpy(out_sqlda, ib_query->out_sqlda, XSQLDA_LENGTH(ib_query->out_sqlda->sqld));
- _php_ibase_alloc_xsqlda(out_sqlda);
-
- if (ib_query->out_array) {
- IB_RESULT->out_array = emalloc(sizeof(ibase_array)*ib_query->out_array_cnt);
- memcpy(IB_RESULT->out_array, ib_query->out_array, sizeof(ibase_array)*ib_query->out_array_cnt);
- } else {
- IB_RESULT->out_array = NULL;
- }
- }
-
- if (ib_query->in_sqlda) { /* has placeholders */
- IBDEBUG("Query wants XSQLDA for input");
- if (ib_query->in_sqlda->sqld != argc) {
- _php_ibase_module_error("placeholders (%d) and variables (%d) mismatch", ib_query->in_sqlda->sqld, argc);
- goto _php_ibase_exec_error; /* yes mommy, goto! */
- }
- in_sqlda = emalloc(XSQLDA_LENGTH(ib_query->in_sqlda->sqld));
- memcpy(in_sqlda, ib_query->in_sqlda, XSQLDA_LENGTH(ib_query->in_sqlda->sqld));
- bind_buf = emalloc(sizeof(BIND_BUF) * ib_query->in_sqlda->sqld);
- if (_php_ibase_bind(in_sqlda, args, bind_buf, ib_query) == FAILURE) {
- IBDEBUG("Could not bind input XSQLDA... (_php_ibase_exec)");
- goto _php_ibase_exec_error;
- }
- }
-
- if (isc_dsql_execute(IB_STATUS, &ib_query->trans, &ib_query->stmt, ib_query->dialect, in_sqlda)) {
- IBDEBUG("Could not execute query... (_php_ibase_exec)");
- _php_ibase_error();
- goto _php_ibase_exec_error;
- }
-
- rv = SUCCESS;
-
-_php_ibase_exec_error: /* I'm a bad boy... */
-
- if (in_sqlda){
- efree(in_sqlda);
- }
- if (bind_buf)
- efree(bind_buf);
-
- if (rv == FAILURE) {
- if (IB_RESULT) {
- efree(IB_RESULT);
- IB_RESULT = NULL;
- }
- if (out_sqlda)
- _php_ibase_free_xsqlda(out_sqlda);
- }
-
- return rv;
-#undef IB_RESULT
-}
-/* }}} */
-
-/* {{{ proto int ibase_trans([int trans_args [, int link_identifier]])
- Start transaction */
-PHP_FUNCTION(ibase_trans)
-{
- pval ***args;
- char tpb[20], *tpbp = NULL;
- long trans_argl = 0;
- int tpb_len = 0, argn, link_id, trans_n = 0, i;
- ibase_db_link *ib_link;
- ibase_tr_link *ib_trans;
-
- RESET_ERRMSG;
-
- link_id = IBG(default_link);
-
- /* TODO: multi-databases trans */
- argn = ZEND_NUM_ARGS();
- if (argn < 0 || argn > 20) {
- WRONG_PARAM_COUNT;
- }
-
- if (argn) {
- args = (pval ***) emalloc(sizeof(pval **)*argn);
- if (zend_get_parameters_array_ex(argn, args) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- /* Handle all database links, although we don't support multibase
- transactions yet, so only the last one is will be used. */
- for (i = argn-1; i > 0 && Z_TYPE_PP(args[i]) == IS_RESOURCE; i--) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[i], -1, "InterBase link", le_link, le_plink);
- link_id = Z_LVAL_PP(args[i]);
- }
-
- /* First argument is transaction parameters */
- convert_to_long_ex(args[0]);
- trans_argl = Z_LVAL_PP(args[0]);
-
- efree(args);
- }
-
- if (argn < 2) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, link_id, "InterBase link", le_link, le_plink);
- }
-
- if (trans_argl ) {
- tpb[tpb_len++] = isc_tpb_version3;
- tpbp = tpb;
- /* access mode */
- if (trans_argl & PHP_IBASE_READ) /* READ ONLY TRANSACTION */
- tpb[tpb_len++] = isc_tpb_read;
- else
- tpb[tpb_len++] = isc_tpb_write;
- /* isolation level */
- if (trans_argl & PHP_IBASE_COMMITTED) {
- tpb[tpb_len++] = isc_tpb_read_committed;
- } else if (trans_argl & PHP_IBASE_CONSISTENCY)
- tpb[tpb_len++] = isc_tpb_consistency;
- else
- tpb[tpb_len++] = isc_tpb_concurrency;
- /* lock resolution */
- if (trans_argl & PHP_IBASE_NOWAIT)
- tpb[tpb_len++] = isc_tpb_nowait;
- else
- tpb[tpb_len++] = isc_tpb_wait;
-
- }
-
- /* find empty transaction slot */
- for (trans_n = 0; trans_n < IBASE_TRANS_ON_LINK
- && ib_link->trans[trans_n]; trans_n++)
- ;
- if (trans_n == IBASE_TRANS_ON_LINK) {
- _php_ibase_module_error("too many transactions on link");
- RETURN_FALSE;
- }
-
- if (isc_start_transaction(IB_STATUS, &ib_link->trans[trans_n], 1, &ib_link->link, tpb_len, tpbp)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- ib_trans = (ibase_tr_link *) emalloc(sizeof(ibase_tr_link));
- ib_trans->trans_num = trans_n;
- ib_trans->link_rsrc = link_id;
- ZEND_REGISTER_RESOURCE(return_value, ib_trans, le_trans);
-}
-/* }}} */
-
-/* {{{ _php_ibase_def_trans() */
-/* open default transaction */
-static int _php_ibase_def_trans(ibase_db_link * ib_link, int trans_n)
-{
- TSRMLS_FETCH();
-
- if (trans_n == 0 && ib_link->trans[0] == NULL) {
- if (isc_start_transaction(IB_STATUS, &ib_link->trans[0], 1, &ib_link->link, 0, NULL)) {
- _php_ibase_error();
- return FAILURE;
- }
- }
- return SUCCESS;
-}
-/*}}}*/
-
-/* {{{ _php_ibase_trans_end() */
-#define COMMIT 1
-#define ROLLBACK 0
-static void _php_ibase_trans_end(INTERNAL_FUNCTION_PARAMETERS, int commit)
-{
- pval **link_trans_arg = NULL;
- int link_id = 0, trans_n = 0, trans_id = 0;
- ibase_db_link *ib_link;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- link_id = IBG(default_link);
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, link_trans_arg, link_id, "InterBase link", le_link, le_plink);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &link_trans_arg) == FAILURE) {
- RETURN_FALSE;
- }
- get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, link_trans_arg, &ib_link, &trans_n, &trans_id);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (ib_link->trans[trans_n] == NULL) {
- php_error(E_WARNING, "Trying to commit or rollback an already handled transaction");
- RETURN_FALSE;
- }
-
- if (commit) {
- if (isc_commit_transaction(IB_STATUS, &ib_link->trans[trans_n])) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- } else {
- if (isc_rollback_transaction(IB_STATUS, &ib_link->trans[trans_n])) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- }
- ib_link->trans[trans_n] = NULL;
-
- /* Don't try to destroy imnplicitly opened transaction from list... */
- if (trans_id) {
- zend_list_delete(trans_id);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ibase_commit([int link_identifier, ] int trans_number)
- Commit transaction */
-PHP_FUNCTION(ibase_commit)
-{
- _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, COMMIT);
-}
-/* }}} */
-
-/* {{{ proto int ibase_rollback([int link_identifier, ] int trans_number)
- Roolback transaction */
-PHP_FUNCTION(ibase_rollback)
-{
- _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, ROLLBACK);
-}
-/* }}} */
-
-/* {{{ proto int ibase_query([int link_identifier, ] string query [, int bind_args])
- Execute a query */
-PHP_FUNCTION(ibase_query)
-{
- pval ***args, **bind_args = NULL, **dummy = NULL;
- int i, link_id = 0, trans_n = 0, bind_n = 0, trans_id = 0;
- char *query;
- ibase_db_link *ib_link;
- ibase_query *ib_query;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() < 1) {
- WRONG_PARAM_COUNT;
- }
-
- args = (pval ***) emalloc(sizeof(pval **)*ZEND_NUM_ARGS());
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- i = 0;
- if (Z_TYPE_PP(args[i]) == IS_RESOURCE) { /* link or transaction argument */
- get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, args[i], &ib_link, &trans_n, &trans_id);
- i++; /* next arg */
- } else {
- link_id = IBG(default_link);
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, dummy, link_id, "InterBase link", le_link, le_plink);
- }
-
- if (Z_TYPE_PP(args[i]) == IS_STRING) { /* query argument */
- convert_to_string_ex(args[i]);
- query = Z_STRVAL_PP(args[i]);
- i++; /* next arg */
- } else {
- _php_ibase_module_error("query argument missed");
- efree(args);
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() > i) { /* have variables to bind */
- /* XXX Remove or fix??? Variable placeholders and binding makes
- absolutely no sense if not using a prepared SQL statement.
- */
- bind_n = ZEND_NUM_ARGS() - i;
- bind_args = args[i];
- }
-
- /* open default transaction */
- if (_php_ibase_def_trans(ib_link, trans_n) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- if (_php_ibase_alloc_query(&ib_query, ib_link->link, ib_link->trans[trans_n], query, ib_link->dialect) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- if (_php_ibase_exec(&ib_result, ib_query, bind_n, bind_args) == FAILURE) {
- _php_ibase_free_query(ib_query);
- efree(args);
- RETURN_FALSE;
- }
-
- efree(args);
-
- if (ib_result) { /* select statement */
- ib_result->drop_stmt = 1; /* drop stmt when free result */
- ib_query->stmt = NULL; /* keep stmt when free query */
- _php_ibase_free_query(ib_query);
- ZEND_REGISTER_RESOURCE(return_value, ib_result, le_result);
- } else {
- _php_ibase_free_query(ib_query);
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ _php_ibase_var_pval() */
-static int _php_ibase_var_pval(pval *val, void *data, int type, int len, int scale, int flag TSRMLS_DC)
-{
- char string_data[255];
-
- switch(type & ~1) {
- case SQL_VARYING:
- len = ((IBASE_VCHAR *) data)->var_len;
- data = ((IBASE_VCHAR *) data)->var_str;
- /* fallout */
- case SQL_TEXT:
- Z_STRVAL_P(val) = (char *)emalloc(sizeof(char)*(len+1));
- memcpy(Z_STRVAL_P(val), data, len);
- Z_STRVAL_P(val)[len] = '\0';
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(val) = php_addslashes(Z_STRVAL_P(val), len, &len, 1 TSRMLS_CC);
- }
- Z_TYPE_P(val) = IS_STRING;
- Z_STRLEN_P(val) = len;
- break;
- case SQL_LONG:
- if (scale) {
- int j, f = 1;
- float n = (float) *(long *)(data);
-
- for (j = 0; j < -scale; j++) {
- f *= 10;
- }
- Z_TYPE_P(val) = IS_STRING;
- Z_STRLEN_P(val) = sprintf(string_data, "%.*f", -scale, n / f);
- Z_STRVAL_P(val) = estrdup(string_data);
- } else {
- Z_TYPE_P(val) = IS_LONG;
- Z_LVAL_P(val) = *(long *)(data);
- }
- break;
- case SQL_SHORT:
- Z_TYPE_P(val) = IS_LONG;
- Z_LVAL_P(val) = *(short *)(data);
- break;
- case SQL_FLOAT:
- Z_TYPE_P(val) = IS_DOUBLE;
- Z_DVAL_P(val) = *(float *)(data);
- break;
- case SQL_DOUBLE:
- if (scale) {
- Z_TYPE_P(val) = IS_STRING;
- Z_STRLEN_P(val) = sprintf(string_data, "%.*f", -scale, *(double *)data);
- Z_STRVAL_P(val) = estrdup(string_data);
- /*
- Z_STRVAL_P(val) = string_data;
- */
- } else {
- Z_TYPE_P(val) = IS_DOUBLE;
- Z_DVAL_P(val) = *(double *)data;
- }
- break;
-#ifdef SQL_INT64
- case SQL_INT64:
- val->type = IS_STRING;
-
- if (scale) {
- int j, f = 1;
- double number = (double) ((ISC_INT64) (*((ISC_INT64 *)data)));
- char dt[20];
- for (j = 0; j < -scale; j++) {
- f *= 10;
- }
- sprintf(dt, "%%0.%df", -scale);
- val->value.str.len = sprintf (string_data, dt, number/f );
- } else {
- val->value.str.len = sprintf (string_data, "%Ld",
- (ISC_INT64) (*((ISC_INT64 *)data)));
- }
-
- val->value.str.val = estrdup(string_data);
- break;
-#endif
-#ifndef SQL_TIMESTAMP
- case SQL_DATE:
-#else
- case SQL_TIMESTAMP:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
-#endif
- {
- struct tm t;
- char *format = NULL;
- long timestamp = -1;
-
-#ifndef SQL_TIMESTAMP
- isc_decode_date((ISC_QUAD *) data, &t);
- format = IBG(timestampformat);
-#else
- switch (type & ~1) {
- case SQL_TIMESTAMP:
- isc_decode_timestamp((ISC_TIMESTAMP *) data, &t);
- format = IBG(timestampformat);
- break;
- case SQL_TYPE_DATE:
- isc_decode_sql_date((ISC_DATE *) data, &t);
- format = IBG(dateformat);
- break;
- case SQL_TYPE_TIME:
- isc_decode_sql_time((ISC_TIME *) data, &t);
- format = IBG(timeformat);
- break;
- }
-#endif
- /*
- XXX - Might have to remove this later - seems that isc_decode_date()
- always sets tm_isdst to 0, sometimes incorrectly (InterBase 6 bug?)
- */
- t.tm_isdst = -1;
- timestamp = mktime(&t);
-#if HAVE_TM_ZONE
- t.tm_zone = tzname[0];
-#endif
- if (flag & PHP_IBASE_UNIXTIME) {
- Z_TYPE_P(val) = IS_LONG;
- Z_LVAL_P(val) = timestamp;
- } else {
- Z_TYPE_P(val) = IS_STRING;
-#if HAVE_STRFTIME
- Z_STRLEN_P(val) = strftime(string_data, sizeof(string_data), format, &t);
-#else
- /* FIXME */
- if (!t.tm_hour && !t.tm_min && !t.tm_sec)
- Z_STRLEN_P(val) = sprintf(string_data, "%02d/%02d/%4d", t.tm_mon+1, t.tm_mday, t.tm_year+1900);
- else
- Z_STRLEN_P(val) = sprintf(string_data, "%02d/%02d/%4d %02d:%02d:%02d",
- t.tm_mon+1, t.tm_mday, t.tm_year+1900, t.tm_hour, t.tm_min, t.tm_sec);
-#endif
- Z_STRVAL_P(val) = estrdup(string_data);
- /*
- Z_STRVAL_P(val) = string_data;
- */
- break;
- }
- }
- default:
- return FAILURE;
- } /* switch (type) */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _php_ibase_arr_pval() */
-/* create multidimension array - resursion function
- (*datap) argument changed */
-static int _php_ibase_arr_pval(pval *ar_pval, char **datap, ibase_array *ib_array, int dim, int flag TSRMLS_DC)
-{
- pval tmp;
- int i, dim_len, l_bound, u_bound;
-
-
- if (dim > 16) { /* InterBase limit */
- _php_ibase_module_error("php module internal error in %s %d", __FILE__, __LINE__);
- return FAILURE;
- }
-
- u_bound = ib_array->ar_desc.array_desc_bounds[dim].array_bound_upper;
- l_bound = ib_array->ar_desc.array_desc_bounds[dim].array_bound_lower;
- dim_len = 1 + u_bound - l_bound;
-
- if (dim < ib_array->ar_desc.array_desc_dimensions - 1) { /* array again */
- for (i = 0; i < dim_len; i++) {
- /* recursion here */
- if (_php_ibase_arr_pval(ar_pval, datap, ib_array, dim+1, flag TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- }
- } else { /* data at last */
-
- array_init(ar_pval);
-
- for (i = 0; i < dim_len; i++) {
- if (_php_ibase_var_pval(&tmp, *datap, ib_array->el_type,
- ib_array->ar_desc.array_desc_length,
- ib_array->ar_desc.array_desc_scale,
- flag TSRMLS_CC) == FAILURE){
- return FAILURE;
- }
- /* FIXME ??? */
- zend_hash_index_update(Z_ARRVAL_P(ar_pval),
- l_bound + i,
- (void *) &tmp, sizeof(pval), NULL);
- *datap += ib_array->el_size;
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _php_ibase_fetch_hash() */
-
-#define FETCH_ROW 2
-#define FETCH_ARRAY 4
-
-static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type)
-{
- zval **result_arg, **flag_arg;
- long flag = 0;
- int i, arr_cnt;
- ibase_result *ib_result;
- XSQLVAR *var;
-
- RESET_ERRMSG;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (ZEND_NUM_ARGS()==1 && zend_get_parameters_ex(1, &result_arg)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (ZEND_NUM_ARGS()==2 && zend_get_parameters_ex(2, &result_arg, &flag_arg)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(flag_arg);
- flag = Z_LVAL_PP(flag_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase result", le_result);
-
- if (ib_result->out_sqlda == NULL) {
- _php_ibase_module_error("trying to fetch results from a non-select query");
- RETURN_FALSE;
- }
-
- if (isc_dsql_fetch(IB_STATUS, &ib_result->stmt, 1, ib_result->out_sqlda) == 100L) {
- RETURN_FALSE; /* end of cursor */
- }
-
- if (IB_STATUS[0] && IB_STATUS[1]) { /* error in fetch */
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- arr_cnt = 0;
- var = ib_result->out_sqlda->sqlvar;
- for (i = 0; i < ib_result->out_sqlda->sqld; i++, var++) {
- if (((var->sqltype & 1) == 0) || *var->sqlind != -1) {
- pval *tmp;
- tmp = emalloc(sizeof(pval));
- switch(var->sqltype & ~1) {
- case SQL_VARYING:
- case SQL_TEXT:
- case SQL_SHORT:
- case SQL_LONG:
- case SQL_FLOAT:
- case SQL_DOUBLE:
-#ifdef SQL_INT64
- case SQL_INT64:
-#endif
-#ifndef SQL_TIMESTAMP
- case SQL_DATE:
-#else
- case SQL_TIMESTAMP:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
-#endif
- _php_ibase_var_pval(tmp, var->sqldata, var->sqltype, var->sqllen, var->sqlscale, flag TSRMLS_CC);
- break;
- case SQL_BLOB:
- if (flag & PHP_IBASE_TEXT) { /* text ? */
- int stat;
- isc_blob_handle bl_handle = NULL;
- ISC_LONG max_len = 0, cur_len = 0;
- char bl_items[1], *bl_data, bl_info[20], *p;
-
- if (isc_open_blob(IB_STATUS, &ib_result->link, &ib_result->trans, &bl_handle, (ISC_QUAD ISC_FAR *) var->sqldata)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- bl_items[0] = isc_info_blob_total_length;
- if (isc_blob_info(IB_STATUS, &bl_handle, sizeof(bl_items), bl_items, sizeof(bl_info), bl_info)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- /* find total length of blob's data */
- for (p = bl_info; *p != isc_info_end && p < bl_info+sizeof(bl_info);) {
- unsigned short item_len, item = *p++;
-
- item_len = (short) isc_vax_integer(p, 2);
- p += 2;
- if (item == isc_info_blob_total_length)
- max_len = isc_vax_integer(p, item_len);
- p += item_len;
- }
-
- bl_data = emalloc(max_len+1);
-
- for (cur_len = stat = 0; stat == 0 && cur_len < max_len; ) {
- unsigned short seg_len;
- unsigned short max_seg = (unsigned short) (max_len - cur_len > USHRT_MAX ? USHRT_MAX : max_len-cur_len);
- stat = isc_get_segment(IB_STATUS, &bl_handle, &seg_len, max_seg, &bl_data[cur_len]);
- cur_len += seg_len;
- if (cur_len > max_len) { /* never!*/
- efree(bl_data);
- _php_ibase_module_error("php module internal error in %s %d", __FILE__, __LINE__);
- RETURN_FALSE;
- }
- }
-
- if (IB_STATUS[0] && IB_STATUS[1] && (IB_STATUS[1] != isc_segstr_eof)) {
- efree(bl_data);
- _php_ibase_error();
- RETURN_FALSE;
- }
- bl_data[cur_len] = '\0';
- if (isc_close_blob(IB_STATUS, &bl_handle)) {
- efree(bl_data);
- _php_ibase_error();
- RETURN_FALSE;
- }
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = cur_len;
- Z_STRVAL_P(tmp) = estrndup(bl_data, cur_len);
- efree(bl_data);
- } else { /* blob id only */
- ISC_QUAD *bl_qd = (ISC_QUAD ISC_FAR *) var->sqldata;
- ibase_blob_handle *ib_blob_id;
-
- ib_blob_id = (ibase_blob_handle *) emalloc(sizeof(ibase_blob_handle));
-
- ib_blob_id->link = ib_result->link;
- ib_blob_id->trans_handle = ib_result->trans;
- ib_blob_id->bl_qd.gds_quad_high = bl_qd->gds_quad_high;
- ib_blob_id->bl_qd.gds_quad_low = bl_qd->gds_quad_low;
- ib_blob_id->bl_handle = NULL;
-
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = sizeof(ibase_blob_handle);
- Z_STRVAL_P(tmp) = estrndup((char *)ib_blob_id, sizeof(ibase_blob_handle));
- efree(ib_blob_id);
- }
- break;
- case SQL_ARRAY:{
- ISC_QUAD ar_qd = *(ISC_QUAD ISC_FAR *) var->sqldata;
- ibase_array *ib_array = &ib_result->out_array[arr_cnt];
- void *ar_data;
- char *tmp_ptr;
-
- ar_data = emalloc(ib_array->ar_size);
-
- if (isc_array_get_slice(IB_STATUS, &ib_result->link, &ib_result->trans,
- &ar_qd, &ib_array->ar_desc, ar_data, &ib_array->ar_size)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- tmp_ptr = ar_data; /* avoid changes in _arr_pval */
- if (_php_ibase_arr_pval(tmp, &tmp_ptr, ib_array, 0, flag TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- efree(ar_data);
- }
- break;
- default:
- break;
- } /*switch*/
- if (fetch_type & FETCH_ROW) {
- switch (Z_TYPE_P(tmp)) {
- case IS_STRING:
- add_index_stringl(return_value, i, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), 0);
- break;
- case IS_LONG:
- add_index_long(return_value, i, Z_LVAL_P(tmp));
- break;
- case IS_DOUBLE:
- add_index_double(return_value, i, Z_DVAL_P(tmp));
- break;
- }
- } else {
- switch (Z_TYPE_P(tmp)) {
- case IS_STRING:
- add_assoc_stringl(return_value, var->aliasname, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), 0);
- break;
- case IS_LONG:
- add_assoc_long(return_value, var->aliasname, Z_LVAL_P(tmp));
- break;
- case IS_DOUBLE:
- add_assoc_double(return_value, var->aliasname, Z_DVAL_P(tmp));
- break;
- }
- }
- efree(tmp);
- } else {
- if (fetch_type & FETCH_ROW) {
- add_index_null(return_value, i);
- } else {
- add_assoc_null(return_value, var->aliasname);
- }
- }
- if ((var->sqltype & ~1) == SQL_ARRAY) {
- arr_cnt++;
- }
- } /*for field*/
-}
-/* }}} */
-
-/* {{{ proto array ibase_fetch_row(int result [, int blob_flag])
- Fetch a row from the results of a query */
-PHP_FUNCTION(ibase_fetch_row)
-{
- _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FETCH_ROW);
-}
-/* }}} */
-
-/* {{{ proto array ibase_fetch_assoc(int result [, int blob_flag])
- Fetch a row from the results of a query */
-PHP_FUNCTION(ibase_fetch_assoc)
-{
- _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FETCH_ARRAY);
-}
-/* }}} */
-
-/* {{{ proto object ibase_fetch_object(int result [, int blob_flag])
- Fetch a object from the results of a query */
-PHP_FUNCTION(ibase_fetch_object)
-{
- _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FETCH_ARRAY);
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, &zend_standard_class_def, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto int ibase_free_result(int result)
- Free the memory used by a result */
-PHP_FUNCTION(ibase_free_result)
-{
- zval **result_arg;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase result", le_result);
- zend_list_delete(Z_LVAL_PP(result_arg));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ibase_prepare([int link_identifier, ] string query)
- Prepare a query for later execution */
-PHP_FUNCTION(ibase_prepare)
-{
- zval **link_arg, **query_arg;
- int link_id, trans_n = 0, trans_id = 0;
- ibase_db_link *ib_link;
- ibase_query *ib_query;
- char *query;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query_arg) == FAILURE) {
- RETURN_FALSE;
- }
- link_id = IBG(default_link);
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, link_id, "InterBase link", le_link, le_plink);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &link_arg, &query_arg) == FAILURE) {
- RETURN_FALSE;
- }
- get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, link_arg, &ib_link, &trans_n, &trans_id);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(query_arg);
- query = Z_STRVAL_PP(query_arg);
-
- /* open default transaction */
- if (_php_ibase_def_trans(ib_link, trans_n) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (_php_ibase_alloc_query(&ib_query, ib_link->link, ib_link->trans[trans_n], query, ib_link->dialect) == FAILURE) {
- RETURN_FALSE;
- }
- ib_query->cursor_open = 0;
-
- zend_list_addref(link_id);
-
- ZEND_REGISTER_RESOURCE(return_value, ib_query, le_query);
-
-}
-/* }}} */
-
-/* {{{ proto int ibase_execute(int query [, int bind_args [, int ...]])
- Execute a previously prepared query */
-PHP_FUNCTION(ibase_execute)
-{
- pval ***args, **bind_args = NULL;
- ibase_query *ib_query;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() < 1) {
- WRONG_PARAM_COUNT;
- }
-
- args = (pval ***)emalloc(ZEND_NUM_ARGS() * sizeof(pval **));
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, args[0], -1, "InterBase query", le_query);
-
- if (ZEND_NUM_ARGS() > 1) { /* have variables to bind */
- bind_args = args[1];
- }
-
- /* Have we used this cursor before and it's still open? */
- if (ib_query->cursor_open) {
- IBDEBUG("Implicitly closing a cursor");
- if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_close)){
- efree(args);
- _php_ibase_error();
- }
- }
-
- if ( _php_ibase_exec(&ib_result, ib_query, ZEND_NUM_ARGS()-1, bind_args) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- efree(args);
-
- if (ib_result) { /* select statement */
- ib_query->cursor_open = 1;
- ZEND_REGISTER_RESOURCE(return_value, ib_result, le_result);
- } else {
- ib_query->cursor_open = 0;
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto int ibase_free_query(int query)
- Free memory used by a query */
-PHP_FUNCTION(ibase_free_query)
-{
- pval **query_arg;
- ibase_query *ib_query;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &query_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, query_arg, -1, "InterBase query", le_query);
- zend_list_delete(Z_LVAL_PP(query_arg));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ibase_timefmt(string format)
- Sets the format of timestamp, date and time columns returned from queries */
-PHP_FUNCTION(ibase_timefmt)
-{
-#if HAVE_STRFTIME
- pval ***args;
- char *fmt = NULL;
- int type = PHP_IBASE_TIMESTAMP;
-
- RESET_ERRMSG; /* ??? */
-
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2){
- WRONG_PARAM_COUNT;
- }
-
- args = (pval ***) emalloc(sizeof(pval **)*ZEND_NUM_ARGS());
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- RETURN_FALSE;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- convert_to_long_ex(args[1]);
- type = Z_LVAL_PP(args[1]);
- case 1:
- convert_to_string_ex(args[0]);
- fmt = Z_STRVAL_PP(args[0]);
- }
-
- switch (type) {
- case PHP_IBASE_TIMESTAMP:
- if (IBG(timestampformat))
- DL_FREE(IBG(timestampformat));
- IBG(timestampformat) = DL_STRDUP(fmt);
- break;
- case PHP_IBASE_DATE:
- if (IBG(dateformat))
- DL_FREE(IBG(dateformat));
- IBG(dateformat) = DL_STRDUP(fmt);
- break;
- case PHP_IBASE_TIME:
- if (IBG(timeformat))
- DL_FREE(IBG(timeformat));
- IBG(timeformat) = DL_STRDUP(fmt);
- break;
- }
-
- efree(args);
- RETURN_TRUE;
-#else
- _php_ibase_module_error("ibase_timefmt not supported on this platform");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int ibase_num_fields(int result)
- Get the number of fields in result */
-PHP_FUNCTION(ibase_num_fields)
-{
- pval **result;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result, -1, "InterBase result", le_result);
-
- if (ib_result->out_sqlda == NULL) {
- _php_ibase_module_error("trying to get num fields from a non-select query");
- RETURN_FALSE;
- }
-
- RETURN_LONG(ib_result->out_sqlda->sqld);
-}
-/* }}} */
-
-/* {{{ proto array ibase_field_info(int result, int field_number)
- Get information about a field */
-PHP_FUNCTION(ibase_field_info)
-{
- pval *ret_val;
- zval **result_arg, **field_arg;
- ibase_result *ib_result;
- char buf[30], *s;
- int len;
- XSQLVAR *var;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result_arg, &field_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase result", le_result);
-
- if (ib_result->out_sqlda == NULL) {
- _php_ibase_module_error("trying to get field info from a non-select query");
- RETURN_FALSE;
- }
-
- convert_to_long_ex(field_arg);
-
- if (Z_LVAL_PP(field_arg)<0 || Z_LVAL_PP(field_arg)>=ib_result->out_sqlda->sqld)
- RETURN_FALSE;
-
- if (array_init(return_value)==FAILURE)
- RETURN_FALSE;
-
- var = ib_result->out_sqlda->sqlvar + Z_LVAL_PP(field_arg);
-
- add_get_index_stringl(return_value, 0, var->sqlname, var->sqlname_length, (void **) &ret_val, 1);
- add_assoc_stringl(return_value, "name", var->sqlname, var->sqlname_length, 1);
-
- add_get_index_stringl(return_value, 1, var->aliasname, var->aliasname_length, (void **) &ret_val, 1);
- add_assoc_stringl(return_value, "alias", var->aliasname, var->aliasname_length, 1);
-
- add_get_index_stringl(return_value, 2, var->relname, var->relname_length, (void **) &ret_val, 1);
- add_assoc_stringl(return_value, "relation", var->relname, var->relname_length, 1);
-
- len = sprintf(buf, "%d", var->sqllen);
- add_get_index_stringl(return_value, 3, buf, len, (void **) &ret_val, 1);
- add_assoc_stringl(return_value, "length", buf, len, 1);
-
- switch (var->sqltype & ~1) {
- case SQL_TEXT: s = "TEXT"; break;
- case SQL_VARYING: s = "VARYING"; break;
- case SQL_SHORT: s = "SHORT"; break;
- case SQL_LONG: s = "LONG"; break;
- case SQL_FLOAT: s = "FLOAT"; break;
- case SQL_DOUBLE: s = "DOUBLE"; break;
- case SQL_D_FLOAT: s = "D_FLOAT"; break;
-#ifdef SQL_INT64
- case SQL_INT64: s = "INT64"; break;
-#endif
-#ifdef SQL_TIMESTAMP
- case SQL_TIMESTAMP: s = "TIMESTAMP"; break;
- case SQL_TYPE_DATE: s = "DATE"; break;
- case SQL_TYPE_TIME: s = "TIME"; break;
-#else
- case SQL_DATE: s = "DATE"; break;
-#endif
- case SQL_BLOB: s = "BLOB"; break;
- case SQL_ARRAY: s = "ARRAY"; break;
- case SQL_QUAD: s = "QUAD"; break;
- default:
- sprintf(buf, "unknown (%d)", var->sqltype & ~1);
- s = buf;
- break;
- }
- add_get_index_stringl(return_value, 4, s, strlen(s), (void **) &ret_val, 1);
- add_assoc_stringl(return_value, "type", s, strlen(s), 1);
-}
-/* }}} */
-
-/* blobs ----------------------------------- */
-
-/* {{{ _php_ibase_blob_info(isc_blob_handle bl_handle, IBASE_BLOBINFO *bl_info) */
-static int _php_ibase_blob_info(isc_blob_handle bl_handle, IBASE_BLOBINFO *bl_info)
-{
-
- static char bl_items[] = {
- isc_info_blob_num_segments,
- isc_info_blob_max_segment,
- isc_info_blob_total_length,
- isc_info_blob_type
- };
-
- char bl_inf[sizeof(long)*8], *p;
- TSRMLS_FETCH();
-
- bl_info->max_segment = 0;
- bl_info->num_segments = 0;
- bl_info->total_length = 0;
- bl_info->bl_stream = 0;
-
- if (isc_blob_info(IB_STATUS, &bl_handle, sizeof(bl_items), bl_items, sizeof(bl_inf), bl_inf)) {
- _php_ibase_error();
- return FAILURE;
- }
-
- for (p = bl_inf; *p != isc_info_end && p < bl_inf+sizeof(bl_inf);) {
- unsigned short item_len;
- int item = *p++;
-
- item_len = (short)isc_vax_integer(p, 2);
- p += 2;
- switch (item) {
- case isc_info_blob_num_segments:
- bl_info->num_segments = isc_vax_integer(p, item_len);
- break;
- case isc_info_blob_max_segment:
- bl_info->max_segment = isc_vax_integer(p, item_len);
- break;
- case isc_info_blob_total_length:
- bl_info->total_length = isc_vax_integer(p, item_len);
- break;
- case isc_info_blob_type:
- bl_info->bl_stream = isc_vax_integer(p, item_len);
- break;
- case isc_info_end:
- break;
- case isc_info_truncated:
- case isc_info_error: /* hmm. don't think so...*/
- _php_ibase_module_error("php module internal error in %s %d", __FILE__, __LINE__);
- return FAILURE;
- } /*switch*/
- p += item_len;
- } /*for*/
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int ibase_blob_create([int link_identifier])
- Create blob for adding data */
-PHP_FUNCTION(ibase_blob_create)
-{
- zval **link_arg;
- int trans_n = 0, trans_id = 0, link_id;
- ibase_db_link *ib_link;
- ibase_blob_handle *ib_blob;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- link_id = IBG(default_link);
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, link_id, "InterBase link", le_link, le_plink);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &link_arg) == FAILURE) {
- RETURN_FALSE;
- }
- get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, link_arg, &ib_link, &trans_n, &trans_id);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* open default transaction */
- if(_php_ibase_def_trans(ib_link, trans_n) == FAILURE){
- RETURN_FALSE;
- }
-
- ib_blob = (ibase_blob_handle *) emalloc(sizeof(ibase_blob_handle));
- ib_blob->trans_handle = ib_link->trans[trans_n];
- ib_blob->link = ib_link->link;
- ib_blob->bl_handle = NULL;
-
- if (isc_create_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle, &ib_blob->bl_qd)) {
- efree(ib_blob);
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- RETURN_LONG(zend_list_insert(ib_blob, le_blob));
-}
-/* }}} */
-
-/* {{{ proto int ibase_blob_open(string blob_id)
- Open blob for retriving data parts */
-PHP_FUNCTION(ibase_blob_open)
-{
- pval *blob_arg;
- ibase_blob_handle *ib_blob, *ib_blob_id;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &blob_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ib_blob = (ibase_blob_handle *) emalloc(sizeof(ibase_blob_handle));
-
- GET_BLOB_ID_ARG(blob_arg, ib_blob_id);
-
- if (ib_blob_id == NULL) { /* blob IS NULL or argument unset */
- RETURN_FALSE;
- }
-
- ib_blob->link = ib_blob_id->link;
- ib_blob->trans_handle = ib_blob_id->trans_handle;
- ib_blob->bl_qd.gds_quad_high = ib_blob_id->bl_qd.gds_quad_high;
- ib_blob->bl_qd.gds_quad_low = ib_blob_id->bl_qd.gds_quad_low;
- ib_blob->bl_handle = NULL;
- if (isc_open_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle, &ib_blob->bl_qd)) {
- efree(ib_blob);
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- RETURN_LONG(zend_list_insert(ib_blob, le_blob));
-}
-/* }}} */
-
-/* {{{ proto int ibase_blob_add(int blob_id, string data)
- Add data into created blob */
-PHP_FUNCTION(ibase_blob_add)
-{
- pval *blob_arg, *string_arg;
- ibase_blob_handle *ib_blob;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &blob_arg, &string_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- GET_BLOB_HANDLE_ARG(blob_arg, ib_blob);
-
- convert_to_string(string_arg);
-
- if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, (unsigned short) Z_STRLEN_P(string_arg), Z_STRVAL_P(string_arg))) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string ibase_blob_get(int blob_id, int len)
- Get len bytes data from open blob */
-PHP_FUNCTION(ibase_blob_get)
-{
- pval *blob_arg, *len_arg;
- int stat;
- char *bl_data;
- unsigned short max_len = 0, cur_len, seg_len;
- ibase_blob_handle *ib_blob;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &blob_arg, &len_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(len_arg);
- max_len = (unsigned short) Z_LVAL_P(len_arg);
-
- GET_BLOB_HANDLE_ARG(blob_arg, ib_blob);
-
- if (ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low) { /*not null ?*/
-
- bl_data = emalloc(max_len+1);
-
- for (cur_len = stat = 0; stat == 0; ) {
- stat = isc_get_segment(IB_STATUS, &ib_blob->bl_handle, &seg_len, (unsigned short) (max_len-cur_len), &bl_data[cur_len]);
- cur_len += seg_len;
- if (cur_len > max_len) { /* never!*/
- efree(bl_data);
- _php_ibase_module_error("php module internal error in %s %d", __FILE__, __LINE__);
- RETURN_FALSE;
- }
- }
-
- bl_data[cur_len] = '\0';
- if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof && IB_STATUS[1] != isc_segment)) {
- efree(bl_data);
- _php_ibase_error();
- RETURN_FALSE;
- }
- RETURN_STRINGL(bl_data, cur_len, 0);
- } else { /* null blob */
- RETURN_STRING("", 1); /* empty string */
- }
-}
-/* }}} */
-
-#define BLOB_CLOSE 1
-#define BLOB_CANCEL 2
-
-/* {{{ _php_ibase_blob_end() */
-/* Close or Cancel created or Close open blob */
-static void _php_ibase_blob_end(INTERNAL_FUNCTION_PARAMETERS, int bl_end)
-{
- pval *blob_arg;
- ibase_blob_handle *ib_blob;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &blob_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- GET_BLOB_HANDLE_ARG(blob_arg, ib_blob);
-
- if (bl_end == BLOB_CLOSE) { /* return id here */
- if (ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low) { /*not null ?*/
- if (isc_close_blob(IB_STATUS, &ib_blob->bl_handle)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- }
- ib_blob->bl_handle = NULL;
- RETVAL_STRINGL((char *)ib_blob, sizeof(ibase_blob_handle), 1);
- zend_list_delete(Z_LVAL_P(blob_arg));
- } else { /* discard created blob */
- if (isc_cancel_blob(IB_STATUS, &ib_blob->bl_handle)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- ib_blob->bl_handle = NULL;
- zend_list_delete(Z_LVAL_P(blob_arg));
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto int ibase_blob_close(int blob_id)
- Close blob */
-PHP_FUNCTION(ibase_blob_close)
-{
- _php_ibase_blob_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, BLOB_CLOSE);
-}
-/* }}} */
-
-/* {{{ proto int ibase_blob_cancel(int blob_id)
- Cancel creating blob */
-PHP_FUNCTION(ibase_blob_cancel)
-{
- _php_ibase_blob_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, BLOB_CANCEL);
-}
-/* }}} */
-
-/* {{{ proto object ibase_blob_info(string blob_id_str)
- Return blob length and other useful info */
-PHP_FUNCTION(ibase_blob_info)
-{
- pval *blob_arg, *result_var;
- ibase_blob_handle *ib_blob_id;
- IBASE_BLOBINFO bl_info;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &blob_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- GET_BLOB_ID_ARG(blob_arg, ib_blob_id);
-
- if (array_init(return_value)==FAILURE){
- RETURN_FALSE;
- }
-
- if (ib_blob_id->bl_qd.gds_quad_high || ib_blob_id->bl_qd.gds_quad_low) { /*not null ?*/
- if (isc_open_blob(IB_STATUS, &ib_blob_id->link, &ib_blob_id->trans_handle,
- &ib_blob_id->bl_handle, &ib_blob_id->bl_qd)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- if (_php_ibase_blob_info(ib_blob_id->bl_handle, &bl_info)) {
- RETURN_FALSE;
- }
- if (isc_close_blob(IB_STATUS, &ib_blob_id->bl_handle)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- ib_blob_id->bl_handle = NULL;
- } else { /* null blob, all values to zero */
- bl_info.max_segment = 0;
- bl_info.num_segments = 0;
- bl_info.total_length = 0;
- bl_info.bl_stream = 0;
- }
-
- /* FIXME */
- add_get_index_long(return_value, 0, bl_info.total_length, (void **)&result_var);
- /*
- zend_hash_pointer_update(Z_ARRVAL_P(return_value), "length", sizeof("length"), result_var);
- */
-
- add_get_index_long(return_value, 1, bl_info.num_segments, (void **)&result_var);
- /*
- zend_hash_pointer_update(Z_ARRVAL_P(return_value), "numseg", sizeof("numseg"), result_var);
- */
-
- add_get_index_long(return_value, 2, bl_info.max_segment, (void **)&result_var);
- /*
- zend_hash_pointer_update(Z_ARRVAL_P(return_value), "maxseg", sizeof("maxseg"), result_var);
- */
-
- add_get_index_long(return_value, 3, bl_info.bl_stream, (void **)&result_var);
- /*
- zend_hash_pointer_update(Z_ARRVAL_P(return_value), "stream", sizeof("stream"), result_var);
- */
-
- add_get_index_long(return_value, 4,
- (!ib_blob_id->bl_qd.gds_quad_high
- && !ib_blob_id->bl_qd.gds_quad_low),
- (void **)&result_var);
- /*
- zend_hash_pointer_update(Z_ARRVAL_P(return_value), "isnull", sizeof("isnull"), result_var);
- */
-}
-/* }}} */
-
-/* {{{ proto int ibase_blob_echo(string blob_id_str)
- Output blob contents to browser */
-PHP_FUNCTION(ibase_blob_echo)
-{
- pval *blob_arg;
- char bl_data[IBASE_BLOB_SEG];
- unsigned short seg_len;
- ibase_blob_handle *ib_blob_id;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &blob_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- GET_BLOB_ID_ARG(blob_arg, ib_blob_id);
-
- if (ib_blob_id) { /*not null ?*/
-
- if (isc_open_blob(IB_STATUS, &ib_blob_id->link, &ib_blob_id->trans_handle,
- &ib_blob_id->bl_handle, &ib_blob_id->bl_qd)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- while (!isc_get_segment(IB_STATUS, &ib_blob_id->bl_handle, &seg_len, sizeof(bl_data), bl_data)
- || IB_STATUS[1] == isc_segment) {
- PHPWRITE(bl_data, seg_len);
- }
-
- if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- if (isc_close_blob(IB_STATUS, &ib_blob_id->bl_handle)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- ib_blob_id->bl_handle = NULL;
- } /* not null ? */
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
-extern int le_fp, le_pp;
-extern int wsa_fp;
-*/
-/*to handle reading and writing to windows sockets*/
-
-/* {{{ proto string ibase_blob_import([link_identifier, ] int file_id)
- Create blob, copy file in it, and close it */
-
-PHP_FUNCTION(ibase_blob_import)
-{
- zval **link_arg, **file_arg;
- int trans_n = 0, link_id = 0, trans_id = 0, size;
- unsigned short b;
- ibase_blob_handle ib_blob;
- ibase_db_link *ib_link;
- char bl_data[IBASE_BLOB_SEG]; /* FIXME? blob_seg_size parameter? */
- int type;
- php_stream * stream;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &file_arg) == FAILURE) {
- RETURN_FALSE;
- }
- link_id = IBG(default_link);
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, link_id, "InterBase link", le_link, le_plink);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &link_arg, &file_arg) == FAILURE) {
- RETURN_FALSE;
- }
- get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, link_arg, &ib_link, &trans_n, &trans_id);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* open default transaction */
- if (_php_ibase_def_trans(ib_link, trans_n) == FAILURE) {
- RETURN_FALSE;
- }
-
- stream = (php_stream*)zend_fetch_resource(file_arg TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream());
- ZEND_VERIFY_RESOURCE(stream);
-
- ib_blob.link = ib_link->link;
- ib_blob.trans_handle = ib_link->trans[trans_n];
- ib_blob.bl_handle = NULL;
- ib_blob.bl_qd.gds_quad_high = 0;
- ib_blob.bl_qd.gds_quad_low = 0;
-
- if (isc_create_blob(IB_STATUS, &ib_blob.link, &ib_blob.trans_handle, &ib_blob.bl_handle, &ib_blob.bl_qd)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- size = 0;
-
- while(b = php_stream_read(stream, bl_data, sizeof(bl_data)) > 0) {
- if (isc_put_segment(IB_STATUS, &ib_blob.bl_handle, b, bl_data)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
- size += b;
-
- }
-
- if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)) {
- _php_ibase_error();
- RETURN_FALSE;
- }
-
- ib_blob.bl_handle = NULL;
- RETVAL_STRINGL((char *)&ib_blob, sizeof(ibase_blob_handle), 1);
-}
-/* }}} */
-
-/* {{{ _php_ibase_user() */
-static void _php_ibase_user(INTERNAL_FUNCTION_PARAMETERS, int operation)
-{
- pval **args[8];
- char *ib_server, *dba_user_name, *dba_password, *user_name, *user_password = NULL,
- *first_name = NULL, *middle_name = NULL, *last_name = NULL;
- char service_name_buffer[128], *service_name = service_name_buffer;
- char spb_buffer[128], *spb = spb_buffer;
- unsigned short spb_length;
- isc_svc_handle service_handle = NULL;
-
- RESET_ERRMSG;
-
- switch (operation) {
- case isc_action_svc_add_user:
- case isc_action_svc_modify_user:
- // 5 to 8 parameters for ADD or MODIFY operation
- if(ZEND_NUM_ARGS() < 5 || ZEND_NUM_ARGS() > 8) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case isc_action_svc_delete_user:
- // 4 parameters for DELETE operation
- if (ZEND_NUM_ARGS() != 4) {
- WRONG_PARAM_COUNT;
- }
- }
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- RETURN_FALSE;
- }
-
- switch(ZEND_NUM_ARGS()) {
- case 8:
- convert_to_string_ex(args[7]);
- last_name = (*args[7])->value.str.val;
- /* fallout */
- case 7:
- convert_to_string_ex(args[6]);
- middle_name = (*args[6])->value.str.val;
- /* fallout */
- case 6:
- convert_to_string_ex(args[5]);
- first_name = (*args[5])->value.str.val;
- /* fallout */
- }
-
- if (operation != isc_action_svc_delete_user) {
- // Parameter not available for DELETE operation
- convert_to_string_ex(args[4]);
- user_password = (*args[4])->value.str.val;
- }
-
- convert_to_string_ex(args[3]);
- user_name = (*args[3])->value.str.val;
-
- convert_to_string_ex(args[2]);
- dba_password = (*args[2])->value.str.val;
-
- convert_to_string_ex(args[1]);
- dba_user_name = (*args[1])->value.str.val;
-
- convert_to_string_ex(args[0]);
- ib_server = (*args[0])->value.str.val;
-
-/*
- zend_printf("server : %s<br>", ib_server);
- zend_printf("admin : %s<br>", dba_user_name);
- zend_printf("admin pwd: %s<br>", dba_password);
- zend_printf("user : %s<br>", user_name);
- zend_printf("user pwd : %s<br>", user_password);
- zend_printf("fname : %s<br>", first_name);
- zend_printf("mname : %s<br>", middle_name);
- zend_printf("lname : %s<br>", last_name);
-*/
-
- // Build buffer for isc_service_attach()
- *spb++ = isc_spb_version;
- *spb++ = isc_spb_current_version;
- *spb++ = isc_spb_user_name;
- *spb++ = strlen(dba_user_name);
- strcpy(spb, dba_user_name);
- spb += strlen(dba_user_name);
- *spb++ = isc_spb_password;
- *spb++ = strlen(dba_password);
- strcpy(spb, dba_password);
- spb += strlen(dba_password);
- spb_length = spb - spb_buffer;
-
- // Attach to the Service Manager
- sprintf(service_name, "%s:service_mgr", ib_server);
- if (isc_service_attach(IB_STATUS, 0, service_name,
- &service_handle, spb_length, spb_buffer)) {
-
- _php_ibase_error();
- RETURN_FALSE;
- }
- else {
- char request[128], *x, *p = request;
-
- // Identify cluster (here, isc_action_svc_*_user)
- *p++ = operation;
-
- // Argument for username
- *p++ = isc_spb_sec_username;
- ADD_SPB_LENGTH(p, strlen(user_name));
- for (x = user_name ; *x; ) *p++ = *x++;
-
- // Argument for password
- if (user_password) {
- *p++ = isc_spb_sec_password;
- ADD_SPB_LENGTH(p, strlen(user_password));
- for (x = user_password ; *x; ) *p++ = *x++;
- }
-
- // Argument for first name
- if (first_name) {
- *p++ = isc_spb_sec_firstname;
- ADD_SPB_LENGTH(p, strlen(first_name));
- for (x = first_name ; *x; ) *p++ = *x++;
- }
-
- // Argument for middle name
- if (middle_name) {
- *p++ = isc_spb_sec_middlename;
- ADD_SPB_LENGTH(p, strlen(middle_name));
- for (x = middle_name ; *x; ) *p++ = *x++;
- }
-
- // Argument for last name
- if (last_name) {
- *p++ = isc_spb_sec_lastname;
- ADD_SPB_LENGTH(p, strlen(last_name));
- for (x = last_name ; *x; ) *p++ = *x++;
- }
-
- // Let's go update: start Service Manager
- if (isc_service_start(IB_STATUS, &service_handle,
- NULL, (unsigned short) (p - request), request)) {
-
- _php_ibase_error();
- isc_service_detach(IB_STATUS, &service_handle);
- RETURN_FALSE;
- }
- else {
- // Detach from Service Manager
- isc_service_detach(IB_STATUS, &service_handle);
- }
- }
-
-
- RETURN_TRUE;
-}
-
-
-/* {{{ proto int ibase_add_user(string server, string dba_user_name, string dba_password, string user_name, string password [, string first_name] [, string middle_name] [, string last_name])
- Add an user to security database */
-PHP_FUNCTION(ibase_add_user)
-{
- _php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_add_user);
-}
-/* }}} */
-
-
-/* {{{ proto int ibase_modify_user(string server, string dba_user_name, string dba_password, string user_name, string password [, string first_name] [, string middle_name] [, string last_name])
- Modify an user in security database */
-PHP_FUNCTION(ibase_modify_user)
-{
- _php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_modify_user);
-}
-
-
-/* {{{ proto int ibase_delete_user(string server, string dba_user_name, string dba_password, string username)
- Delete an user from security database */
-PHP_FUNCTION(ibase_delete_user)
-{
- _php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_delete_user);
-}
-
-#endif /* HAVE_IBASE */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/interbase/interbase.dsp b/ext/interbase/interbase.dsp
deleted file mode 100644
index 0ded651ccc..0000000000
--- a/ext/interbase/interbase.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="interbase" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=interbase - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "interbase.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "interbase.mak" CFG="interbase - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "interbase - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "interbase - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "interbase - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_IBASE=1 /D "COMPILE_DL_INTERBASE" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ib_util_ms.lib gds32_ms.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib gds32_ms.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_interbase.dll" /pdbtype:sept /libpath:"..\..\..\php_build\Interbase SDK\lib_ms" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "interbase - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_IBASE=1 /D ZEND_DEBUG=0 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_IBASE=1 /D "COMPILE_DL_INTERBASE" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ib_util_ms.lib gds32_ms.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib gds32_ms.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_interbase.dll" /libpath:"..\..\..\php_build\Interbase SDK\lib_ms" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "interbase - Win32 Debug_TS"
-# Name "interbase - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\interbase.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_interbase.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/interbase/php_interbase.h b/ext/interbase/php_interbase.h
deleted file mode 100644
index cf81592d49..0000000000
--- a/ext/interbase/php_interbase.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Jouni Ahto <jouni.ahto@exdec.fi> |
- | Andrew Avdeev <andy@simgts.mv.ru> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_INTERBASE_H
-#define PHP_INTERBASE_H
-
-#if HAVE_IBASE
-#include <ibase.h>
-
-extern zend_module_entry ibase_module_entry;
-#define phpext_interbase_ptr &ibase_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_IBASE_API __declspec(dllexport)
-#else
-#define PHP_IBASE_API
-#endif
-
-PHP_MINIT_FUNCTION(ibase);
-PHP_RINIT_FUNCTION(ibase);
-PHP_MSHUTDOWN_FUNCTION(ibase);
-PHP_RSHUTDOWN_FUNCTION(ibase);
-PHP_MINFO_FUNCTION(ibase);
-
-PHP_FUNCTION(ibase_connect);
-PHP_FUNCTION(ibase_pconnect);
-PHP_FUNCTION(ibase_close);
-PHP_FUNCTION(ibase_query);
-PHP_FUNCTION(ibase_fetch_row);
-PHP_FUNCTION(ibase_fetch_assoc);
-PHP_FUNCTION(ibase_fetch_object);
-PHP_FUNCTION(ibase_free_result);
-PHP_FUNCTION(ibase_prepare);
-PHP_FUNCTION(ibase_execute);
-PHP_FUNCTION(ibase_free_query);
-PHP_FUNCTION(ibase_timefmt);
-
-PHP_FUNCTION(ibase_num_fields);
-PHP_FUNCTION(ibase_field_info);
-
-PHP_FUNCTION(ibase_trans);
-PHP_FUNCTION(ibase_commit);
-PHP_FUNCTION(ibase_rollback);
-
-PHP_FUNCTION(ibase_blob_create);
-PHP_FUNCTION(ibase_blob_add);
-PHP_FUNCTION(ibase_blob_cancel);
-PHP_FUNCTION(ibase_blob_open);
-PHP_FUNCTION(ibase_blob_get);
-PHP_FUNCTION(ibase_blob_close);
-PHP_FUNCTION(ibase_blob_echo);
-PHP_FUNCTION(ibase_blob_info);
-PHP_FUNCTION(ibase_blob_import);
-
-PHP_FUNCTION(ibase_add_user);
-PHP_FUNCTION(ibase_modify_user);
-PHP_FUNCTION(ibase_delete_user);
-
-PHP_FUNCTION(ibase_errmsg);
-
-#define IBASE_MSGSIZE 256
-#define MAX_ERRMSG (IBASE_MSGSIZE*2)
-#define IBASE_TRANS_ON_LINK 10
-#define IBASE_BLOB_SEG 4096
-
-ZEND_BEGIN_MODULE_GLOBALS(ibase)
- ISC_STATUS status[20];
- long default_link;
- long num_links, num_persistent;
- long max_links, max_persistent;
- long allow_persistent;
- char *default_user, *default_password;
- char *timestampformat;
- char *cfg_timestampformat;
- char *dateformat;
- char *cfg_dateformat;
- char *timeformat;
- char *cfg_timeformat;
- char *errmsg;
-ZEND_END_MODULE_GLOBALS(ibase)
-
-typedef struct {
- isc_tr_handle trans[IBASE_TRANS_ON_LINK];
- isc_db_handle link;
- unsigned short dialect;
-} ibase_db_link;
-
-typedef struct {
- int trans_num;
- int link_rsrc;
-} ibase_tr_link;
-
-typedef struct {
- ISC_ARRAY_DESC ar_desc;
- int el_type, /* sqltype kinda SQL_TEXT, ...*/
- el_size; /* element size in bytes */
- ISC_LONG ISC_FAR ar_size; /* all array size in bytes */
-} ibase_array;
-
-typedef struct {
- isc_tr_handle trans_handle;
- isc_db_handle link;
- ISC_QUAD bl_qd;
- isc_blob_handle bl_handle;
-} ibase_blob_handle;
-
-typedef struct {
- isc_db_handle link; /* db link for this result */
- isc_tr_handle trans;
- isc_stmt_handle stmt;
- int drop_stmt;
- XSQLDA *in_sqlda, *out_sqlda;
- ibase_array *in_array, *out_array;
- int in_array_cnt, out_array_cnt;
- unsigned short dialect;
- int cursor_open;
-} ibase_query;
-
-typedef struct {
- isc_db_handle link; /* db link for this result */
- isc_tr_handle trans;
- isc_stmt_handle stmt;
- int drop_stmt;
- XSQLDA *out_sqlda;
- ibase_array *out_array;
-} ibase_result;
-
-typedef struct _php_ibase_varchar {
- short var_len;
- char var_str[1];
-} IBASE_VCHAR;
-
-/* extern ibase_module php_ibase_module; */
-
-enum php_interbase_option {
- PHP_IBASE_DEFAULT = 0,
- PHP_IBASE_TEXT = 1,
- PHP_IBASE_UNIXTIME = 2,
- PHP_IBASE_READ = 4,
- PHP_IBASE_COMMITTED = 8,
- PHP_IBASE_CONSISTENCY = 16,
- PHP_IBASE_NOWAIT = 32,
- PHP_IBASE_TIMESTAMP = 64,
- PHP_IBASE_DATE = 128,
- PHP_IBASE_TIME = 256
-};
-
-#ifdef ZTS
-#define IBG(v) TSRMG(ibase_globals_id, zend_ibase_globals *, v)
-#else
-#define IBG(v) (ibase_globals.v)
-#endif
-
-#else
-
-#define phpext_interbase_ptr NULL
-
-#endif /* HAVE_IBASE */
-
-#endif /* PHP_INTERBASE_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/interbase/tests/001.phpt b/ext/interbase/tests/001.phpt
deleted file mode 100644
index 6d221d04c0..0000000000
--- a/ext/interbase/tests/001.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-InterBase: create test database
---SKIPIF--
-<?php if (!extension_loaded("interbase")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?
-/* $Id$ */
-
- // remember to give write permission to the ext/ibase/tests directory
- // to the user running interbase, otherwise db creation/deletion will fail
- $test_base = dirname(__FILE__)."/ibase_test.tmp";
- $name = tempnam("","CREATEDB");
- $ftmp = fopen($name,"w");
- if (is_file($test_base))
- fwrite($ftmp,
- "connect \"$test_base\";
- drop database;\n"
- );
- fwrite($ftmp,
- "create database \"$test_base\";
- create table test1 (
- i integer,
- c varchar(100)
- );
- commit;
- insert into test1(i, c) values(1, 'test table created with isql');
- exit;\n"
- );
- fclose($ftmp);
- // passthru gives us some output, allowing the test to pass
- // (actually, it passes after the first run when the db gets deleted/recreated)
- passthru("isql -i $name 2>&1");
- unlink($name);
-?>
---EXPECT--
-Use CONNECT or CREATE DATABASE to specify a database
-Database: "ext/interbase/tests/ibase_test.tmp"
diff --git a/ext/interbase/tests/002.phpt b/ext/interbase/tests/002.phpt
deleted file mode 100644
index d240e82e81..0000000000
--- a/ext/interbase/tests/002.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-InterBase: connect, close and pconnect
---SKIPIF--
-<?php if (!extension_loaded("interbase")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?
-/* $Id$ */
-
- require(dirname(__FILE__)."/interbase.inc");
-
- $test_base = dirname(__FILE__)."/ibase_test.tmp";
-
- ibase_connect($test_base);
- out_table("test1");
- ibase_close();
-
- $con = ibase_connect($test_base);
- $pcon1 = ibase_pconnect($test_base);
- $pcon2 = ibase_pconnect($test_base);
- ibase_close($con);
- ibase_close($pcon1);
-
- out_table("test1");
-
- ibase_close($pcon2);
-?>
---EXPECT--
---- test1 ---
-1 test table created with isql
----
---- test1 ---
-1 test table created with isql
----
diff --git a/ext/interbase/tests/003.phpt b/ext/interbase/tests/003.phpt
deleted file mode 100644
index 4afee04cad..0000000000
--- a/ext/interbase/tests/003.phpt
+++ /dev/null
@@ -1,93 +0,0 @@
---TEST--
-InterBase: misc sql types (may take a while)
---SKIPIF--
-<?php if (!extension_loaded("interbase")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?
-/* $Id$ */
-
- require(dirname(__FILE__)."/interbase.inc");
-
- $test_base = dirname(__FILE__)."/ibase_test.tmp";
-
- ibase_connect($test_base);
-
- ibase_query(
- "create table test3 (
- iter integer,
- v_char char(1000),
- v_date timestamp,
- v_decimal decimal(12,3),
- v_double double precision,
- v_float float,
- v_integer integer,
- v_numeric numeric(4,2),
- v_smallint smallint,
- v_varchar varchar(10000)
- )");
- ibase_commit();
-
- /* if timefmt is not supported, suppress error here*/
- @ibase_timefmt("%m/%d/%Y %H:%M:%S");
-
- for($iter = 0; $iter < 10; $iter++){
- /* prepare data */
- $v_char = rand_str(1000);
- $v_date = rand_datetime();
- $v_decimal = rand_number(12,3);
- $v_double = rand_number(18);
- $v_float = rand_number(7);
- $v_integer = rand_number(9,0);
- $v_numeric = rand_number(4,2);
- $v_smallint = rand_number(5) % 32767;
- $v_varchar = rand_str(10000);
-
- ibase_query(
- "insert into test3 (iter, v_char,v_date,v_decimal,v_double,v_float,v_integer,v_numeric,v_smallint,v_varchar)
- values ($iter, '$v_char','$v_date',$v_decimal,$v_double,$v_float,$v_integer,$v_numeric,$v_smallint,'$v_varchar')");
- $sel = ibase_query("select * from test3 where iter = $iter");
- $sel = ibase_query("select * from test3 where iter = $iter");
- $row = ibase_fetch_object($sel);
- if(substr($row->V_CHAR,0,strlen($v_char)) != $v_char){
- echo " CHAR fail:\n";
- echo " in: $v_char\n";
- echo " out: $row->V_CHAR\n";
- }
- if($row->V_DATE != $v_date){
- echo " DATE fail\n";
- echo " in: $v_date\n";
- echo " out: $row->V_DATE\n";
- }
- if($row->V_DECIMAL != $v_decimal){
- echo " DECIMAL fail\n";
- echo " in: $v_decimal\n";
- echo " out: $row->V_DECIMAL\n";
- }
- if(abs($row->V_DOUBLE - $v_double) > abs($v_double / 1E15)){
- echo " DOUBLE fail\n";
- echo " in: $v_double\n";
- echo " out: $row->V_DOUBLE\n";
- }
- if(abs($row->V_FLOAT - $v_float) > abs($v_float / 1E7)){
- echo " FLOAT fail\n";
- echo " in: $v_float\n";
- echo " out: $row->V_FLOAT\n";
- }
- if($row->V_INTEGER != $v_integer){
- echo " INTEGER fail\n";
- echo " in: $v_integer\n";
- echo " out: $row->V_INTEGER\n";
- }
- ibase_free_result($sel);
- }/* for($iter)*/
-
- ibase_close();
- echo "end of test\n";
-?>
---EXPECT--
-
-end of test
-
-
diff --git a/ext/interbase/tests/004.phpt b/ext/interbase/tests/004.phpt
deleted file mode 100644
index 01e18e1a50..0000000000
--- a/ext/interbase/tests/004.phpt
+++ /dev/null
@@ -1,179 +0,0 @@
---TEST--
-InterBase: BLOB test
---SKIPIF--
-<?php if (!extension_loaded("interbase")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?
-/* $Id$ */
-
- require(dirname(__FILE__)."/interbase.inc");
-
- $test_base = dirname(__FILE__)."/ibase_test.tmp";
-
- ibase_connect($test_base);
-
- ibase_query(
- "create table test4 (
- v_integer integer,
- v_blob blob)");
- ibase_commit();
-
- /* create 10k blob file */
- $blob_str = rand_binstr(10*1024);
-
- $name = tempnam("","blob.tmp");
- $name = "blob.tmp";
- $ftmp = fopen($name,"w");
- fwrite($ftmp,$blob_str);
- fclose($ftmp);
-
- echo "import blob 1\n";
- $ftmp = fopen($name,"r");
- $bl_s = ibase_blob_import($ftmp);
- ibase_query("insert into test4 (v_integer, v_blob) values (1, ?)", $bl_s);
-
- echo "test blob 1\n";
- $q = ibase_query("select v_blob from test4 where v_integer = 1");
- $row = ibase_fetch_object($q);
- $bl_h = ibase_blob_open($row->V_BLOB);
-
- while($piece = ibase_blob_get($bl_h, rand() % 1024))
- $blob .= $piece;
- if($blob != $blob_str)
- echo " BLOB 1 fail\n";
- ibase_blob_close($bl_h);
- ibase_free_result($q);
- unset($blob);
-
- echo "create blob 2\n";
-
- $bl_h = ibase_blob_create();
- $ftmp = fopen($name,"r");
- while($piece = fread($ftmp, rand() % 1024)){
- ibase_blob_add($bl_h, $piece);
- }
- fclose($ftmp);
- $bl_s = ibase_blob_close($bl_h);
- ibase_query("insert into test4 (v_integer, v_blob) values (2, ?)", $bl_s);
-
- echo "test blob 2\n";
-
- $q = ibase_query("select v_blob from test4 where v_integer = 2");
- $row = ibase_fetch_object($q);
- $bl_h = ibase_blob_open($row->V_BLOB);
- while($piece = ibase_blob_get($bl_h, rand() % 1024))
- $blob .= $piece;
- if($blob != $blob_str)
- echo " BLOB 2 fail\n";
- ibase_blob_close($bl_h);
- ibase_free_result($q);
- unset($blob);
-
-
- echo "create blob 3\n";
-
- $bl_h = ibase_blob_create();
-
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- ibase_blob_add($bl_h, "| PHP HTML Embedded Scripting Language Version 3.0 |\n");
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- ibase_blob_add($bl_h, "| Copyright (c) 1997-2000 PHP Development Team (See Credits file) |\n");
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- ibase_blob_add($bl_h, "| This program is free software; you can redistribute it and/or modify |\n");
- ibase_blob_add($bl_h, "| it under the terms of one of the following licenses: |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| A) the GNU General Public License as published by the Free Software |\n");
- ibase_blob_add($bl_h, "| Foundation; either version 2 of the License, or (at your option) |\n");
- ibase_blob_add($bl_h, "| any later version. |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| B) the PHP License as published by the PHP Development Team and |\n");
- ibase_blob_add($bl_h, "| included in the distribution in the file: LICENSE |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| This program is distributed in the hope that it will be useful, |\n");
- ibase_blob_add($bl_h, "| but WITHOUT ANY WARRANTY; without even the implied warranty of |\n");
- ibase_blob_add($bl_h, "| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |\n");
- ibase_blob_add($bl_h, "| GNU General Public License for more details. |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| You should have received a copy of both licenses referred to here. |\n");
- ibase_blob_add($bl_h, "| If you did not, or have any questions about PHP licensing, please |\n");
- ibase_blob_add($bl_h, "| contact core@php.net. |\n");
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- $bl_s = ibase_blob_close($bl_h);
- ibase_query("insert into test4 (v_integer, v_blob) values (3, ?)", $bl_s);
-
- echo "echo blob 3\n";
-
- $q = ibase_query("select v_blob from test4 where v_integer = 3");
- $row = ibase_fetch_object($q);
- ibase_blob_echo($row->V_BLOB);
- ibase_free_result($q);
-
- echo "fetch blob 3\n";
- $q = ibase_query("select v_blob from test4 where v_integer = 3");
- $row = ibase_fetch_object($q,IBASE_TEXT);
- echo $row->V_BLOB;
- ibase_free_result($q);
-
- ibase_close();
- unlink($name);
- echo "end of test\n";
-?>
---EXPECT--
-import blob 1
-test blob 1
-create blob 2
-test blob 2
-create blob 3
-echo blob 3
-+----------------------------------------------------------------------+
-| PHP HTML Embedded Scripting Language Version 3.0 |
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2000 PHP Development Team (See Credits file) |
-+----------------------------------------------------------------------+
-| This program is free software; you can redistribute it and/or modify |
-| it under the terms of one of the following licenses: |
-| |
-| A) 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. |
-| |
-| B) the PHP License as published by the PHP Development Team and |
-| included in the distribution in the file: LICENSE |
-| |
-| 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 both licenses referred to here. |
-| If you did not, or have any questions about PHP licensing, please |
-| contact core@php.net. |
-+----------------------------------------------------------------------+
-fetch blob 3
-+----------------------------------------------------------------------+
-| PHP HTML Embedded Scripting Language Version 3.0 |
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2000 PHP Development Team (See Credits file) |
-+----------------------------------------------------------------------+
-| This program is free software; you can redistribute it and/or modify |
-| it under the terms of one of the following licenses: |
-| |
-| A) 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. |
-| |
-| B) the PHP License as published by the PHP Development Team and |
-| included in the distribution in the file: LICENSE |
-| |
-| 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 both licenses referred to here. |
-| If you did not, or have any questions about PHP licensing, please |
-| contact core@php.net. |
-+----------------------------------------------------------------------+
-end of test
diff --git a/ext/interbase/tests/005.phpt b/ext/interbase/tests/005.phpt
deleted file mode 100644
index 43b60d8bb0..0000000000
--- a/ext/interbase/tests/005.phpt
+++ /dev/null
@@ -1,274 +0,0 @@
---TEST--
-InterBase: transactions
---SKIPIF--
-<?php if (!extension_loaded("interbase")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?
-/* $Id$ */
-
- require(dirname(__FILE__)."/interbase.inc");
-
- $test_base = dirname(__FILE__)."/ibase_test.tmp";
-
- ibase_connect($test_base);
-
- @ibase_query("create table test5 (i integer)");
- @ibase_query("delete from test5");
- ibase_close();
-
-
- echo "default transaction:\n";
-
-/*
-Difference between default and other transactions:
-default commited when you call ibase_close().
-Other transaction doing rollback.
-
-If you not open default transaction with
-ibase_trans, default transaction open
-when you call ibase_query(), ibase_prepare(),
-ibase_blob_create(), ibase_blob_import() first time.
-*/
-
-/*
-simple default transaction test without ibase_trans()
-*/
-
- ibase_connect($test_base);
-
- echo "empty table\n";
-
- /* out_table call ibase_query()
- and ibase_query() start default transaction */
- out_table("test5");
-
- /* in default transaction context */
- ibase_query("insert into test5 (i) values (1)");
-
- echo "one row\n";
- out_table("test5");
-
- ibase_rollback(); /* default rolled */
-
- echo "after rollback table empty again\n";
- out_table("test5"); /* started new default transaction */
-
- ibase_query("insert into test5 (i) values (2)");
-
- ibase_close(); /* commit here! */
-
- ibase_connect($test_base);
-
- echo "one row\n";
- out_table("test5");
- ibase_close();
-
-/*
-default transaction on default link
-First open transaction on link will be default.
-$tr_def_l1 may be ommited. All queryes without link and trans
-parameters run in this context
-*/
-
- $link_def = ibase_connect($test_base);
-
- $tr_def_l1 = ibase_trans(IBASE_READ); /* here transaction start */
-
- /* all default */
- $res = ibase_query("select * from test5");
-
- echo "one row\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* specify transaction context... */
- $res = ibase_query($tr_def_l1, "select * from test5");
-
- echo "one row... again.\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* specify default transaction on link */
- $res = ibase_query($link_def, "select * from test5");
-
- echo "one row.\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_rollback($link_def); /* just for example */
-
- ibase_close();
-
-/*
-three transaction on default link
-*/
- ibase_connect($test_base);
-
- $tr_1 = ibase_trans(); /* this default transaction also */
- $tr_2 = ibase_trans(IBASE_READ);
- $tr_3 = ibase_trans(IBASE_READ+IBASE_COMMITTED);
-
- $res = ibase_query("select * from test5");
-
- echo "one row\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* insert in first transaction context... */
- /* as default */
- ibase_query("insert into test5 (i) values (3)");
- /* specify context */
- ibase_query($tr_1, "insert into test5 (i) values (4)");
-
- $res = ibase_query("select * from test5");
-
- echo "three rows\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- $res = ibase_query($tr_1, "select * from test5");
-
- echo "three rows again\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_commit($tr_1);
-
- $res = ibase_query($tr_2, "select * from test5");
-
- echo "one row in second transaction\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- $res = ibase_query($tr_3, "select * from test5");
-
- echo "three rows in third transaction\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_close();
-/*
-transactions on second link
-*/
- $link_1 = ibase_pconnect($test_base);
- $link_2 = ibase_pconnect($test_base);
-
- $tr_1 = ibase_trans(IBASE_DEFAULT, $link_2); /* this default transaction also */
- $tr_2 = ibase_trans(IBASE_COMMITTED, $link_2);
-
- $res = ibase_query($tr_1, "select * from test5");
-
- echo "three rows\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_query($tr_1, "insert into test5 (i) values (5)");
-
- $res = ibase_query($tr_1, "select * from test5");
-
- echo "four rows\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_commit($tr_1);
-
- $res = ibase_query($tr_2, "select * from test5");
-
- echo "four rows again\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_close($link_1);
- ibase_close($link_2);
-
- echo "end of test\n";
-?>
---EXPECT--
-default transaction:
-empty table
---- test5 ---
----
-one row
---- test5 ---
-1
----
-after rollback table empty again
---- test5 ---
----
-one row
---- test5 ---
-2
----
-one row
---- test5 ---
-2
----
-one row... again.
---- test5 ---
-2
----
-one row.
---- test5 ---
-2
----
-one row
---- test5 ---
-2
----
-three rows
---- test5 ---
-2
-3
-4
----
-three rows again
---- test5 ---
-2
-3
-4
----
-one row in second transaction
---- test5 ---
-2
----
-three rows in third transaction
---- test5 ---
-2
-3
-4
----
-three rows
---- test5 ---
-2
-3
-4
----
-four rows
---- test5 ---
-2
-3
-4
-5
----
-four rows again
---- test5 ---
-2
-3
-4
-5
----
-end of test
-
diff --git a/ext/interbase/tests/006.phpt b/ext/interbase/tests/006.phpt
deleted file mode 100644
index 2472a2ac2f..0000000000
--- a/ext/interbase/tests/006.phpt
+++ /dev/null
@@ -1,227 +0,0 @@
---TEST--
-InterBase: binding (may take a while)
---SKIPIF--
-<?php if (!extension_loaded("interbase")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?
-/* $Id$ */
-
- require(dirname(__FILE__)."/interbase.inc");
-
- $test_base = dirname(__FILE__)."/ibase_test.tmp";
-
- ibase_connect($test_base);
-
- ibase_query(
- "create table test6 (
- iter integer,
- v_char char(1000),
- v_date timestamp,
- v_decimal decimal(12,3),
- v_double double precision,
- v_float float,
- v_integer integer,
- v_numeric numeric(4,2),
- v_smallint smallint,
- v_varchar varchar(10000)
- )");
- ibase_commit();
-
- /* if timefmt not supported, hide error */
- @ibase_timefmt("%m/%d/%Y %H:%M:%S");
-
- echo "insert\n";
-
- for($iter = 0; $iter < 3; $iter++){
- /* prepare data */
- $v_char = rand_str(1000);
- $v_date = rand_datetime();
- $v_decimal = rand_number(12,3);
- $v_double = rand_number(20);
- $v_float = rand_number(7);
- $v_integer = rand_number(9,0);
- $v_numeric = rand_number(4,2);
- $v_smallint = rand_number(5) % 32767;
- $v_varchar = rand_str(10000);
-
- ibase_query("insert into test6
- (iter,v_char,v_date,v_decimal,v_double,v_float,
- v_integer,v_numeric,v_smallint,v_varchar)
- values (?,?,?,?,?,?,?,?,?,?)",
- $iter, $v_char, $v_date, $v_decimal, $v_double, $v_float,
- $v_integer, $v_numeric, $v_smallint, $v_varchar);
- $sel = ibase_query("select * from test6 where iter = $iter");
-
- $row = ibase_fetch_object($sel);
- if(substr($row->V_CHAR,0,strlen($v_char)) != $v_char){
- echo " CHAR fail:\n";
- echo " in: $v_char\n";
- echo " out: $row->V_CHAR\n";
- }
- if($row->V_DATE != $v_date){
- echo " DATE fail\n";
- echo " in: $v_date\n";
- echo " out: $row->V_DATE\n";
- }
- if($row->V_DECIMAL != $v_decimal){
- echo " DECIMAL fail\n";
- echo " in: $v_decimal\n";
- echo " out: $row->V_DECIMAL\n";
- }
- if(abs($row->V_DOUBLE - $v_double) > abs($v_double / 1E15)){
- echo " DOUBLE fail\n";
- echo " in: $v_double\n";
- echo " out: $row->V_DOUBLE\n";
- }
- if(abs($row->V_FLOAT - $v_float) > abs($v_float / 1E7)){
- echo " FLOAT fail\n";
- echo " in: $v_float\n";
- echo " out: $row->V_FLOAT\n";
- }
- if($row->V_INTEGER != $v_integer){
- echo " INTEGER fail\n";
- echo " in: $v_integer\n";
- echo " out: $row->V_INTEGER\n";
- }
- ibase_free_result($sel);
- }/* for($iter)*/
-
- echo "select\n";
- for($iter = 0; $iter < 3; $iter++){
- /* prepare data */
- $v_char = rand_str(1000);
- $v_date = rand_datetime();
- $v_decimal = rand_number(12,3);
- $v_double = rand_number(20);
- $v_float = rand_number(7);
- $v_integer = rand_number(9,0);
- $v_numeric = rand_number(4,2);
- $v_smallint = rand_number(5) % 32767;
- $v_varchar = rand_str(10000);
-
- /* clear table*/
- ibase_query("delete from test6");
-
- /* make one record */
- ibase_query("insert into test6
- (iter, v_char,v_date,v_decimal,
- v_integer,v_numeric,v_smallint,v_varchar)
- values (666, '$v_char','$v_date',$v_decimal, $v_integer,
- $v_numeric, $v_smallint, '$v_varchar')");
-
- /* test all types */
- if(!($sel = ibase_query(
- "select iter from test6 where v_char = ?", $v_char)))
- echo "CHAR fail\n";
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_date = ?", $v_date)))
- echo "DATE fail\n";
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_decimal = ?", $v_decimal)))
- echo "DECIMAL fail\n";
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_integer = ?", $v_integer)))
- echo "INTEGER fail\n";
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_numeric = ?", $v_numeric)))
- echo "NUMERIC fail\n";
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_smallint = ?", $v_smallint)))
- echo "SMALLINT fail\n";
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_varchar = ?", $v_varchar)))
- echo "VARCHAR fail\n";
- ibase_free_result($sel);
-
- }/*for iter*/
-
- echo "prepare and exec insert\n";
-
- /* prepare table */
- ibase_query("delete from test6");
-
- /* prepare query */
- $query = ibase_prepare(
- "insert into test6 (v_integer) values (?)");
-
- for($i = 0; $i < 10; $i++)
- ibase_execute($query, $i);
-
- out_table("test6");
-
- ibase_free_query($query);
-
-
- echo "prepare and exec select\n";
-
- /* prepare query */
- $query = ibase_prepare("select * from test6
- where v_integer between ? and ?");
-
- $low_border = 2;
- $high_border = 6;
-
- $res = ibase_execute($query, $low_border, $high_border);
- out_result($res, "test6");
- ibase_free_result($res);
-
- $low_border = 0;
- $high_border = 4;
- $res = ibase_execute($query, $low_border, $high_border);
- out_result($res, "test6");
- ibase_free_result($res);
-
- $res = ibase_execute($query, "5", 7.5);
- out_result($res, "test6");
- ibase_free_result($res);
-
- ibase_free_query($query);
- ibase_close();
- echo "end of test\n";
-?>
---EXPECT--
-insert
-select
-prepare and exec insert
---- test6 ---
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
----
-prepare and exec select
---- test6 ---
- 2
- 3
- 4
- 5
- 6
----
---- test6 ---
- 0
- 1
- 2
- 3
- 4
----
---- test6 ---
- 5
- 6
- 7
----
-end of test
-
diff --git a/ext/interbase/tests/extension b/ext/interbase/tests/extension
deleted file mode 100755
index 3b561c46a9..0000000000
--- a/ext/interbase/tests/extension
+++ /dev/null
@@ -1 +0,0 @@
-InterBase
diff --git a/ext/interbase/tests/interbase.inc b/ext/interbase/tests/interbase.inc
deleted file mode 100755
index f261cb01b5..0000000000
--- a/ext/interbase/tests/interbase.inc
+++ /dev/null
@@ -1,77 +0,0 @@
-<?
-/* $Id$ */
-/* used in tests */
-
-srand((double)microtime()*1000000);
-
-function out_table($table_name)
-{
- echo "--- $table_name ---\n";
- $res = ibase_query("select * from $table_name");
- $f = ibase_num_fields($res);
- while ($r = ibase_fetch_row($res)){
- for($i = 0; $i < $f; $i++)
- echo "$r[$i]\t";
- echo "\n";
- }
- ibase_free_result($res);
- echo "---\n";
-}
-
-function out_result($result, $table_name = "")
-{
- echo "--- $table_name ---\n";
- $f = ibase_num_fields($result);
- while ($r = ibase_fetch_row($result)){
- for($i = 0; $i < $f; $i++)
- echo "$r[$i]\t";
- echo "\n";
- }
- echo "---\n";
-}
-
-/* M/D/Y H:M:S */
-function rand_datetime()
-{
- return sprintf("%02d/%02d/%4d %02d:%02d:%02d",
- rand()%12+1, rand()%28+1, rand()%100+1910,
- rand()%24, rand()%60, rand()%60);
-}
-
-/* random binary string */
-function rand_binstr($max_len)
-{
- $len = rand() % $max_len;
- $s = "";
- while($len--)
- $s .= sprintf("%c", rand() % 256);
- return $s;
-}
-
-function rand_str($max_len)
-{
- $len = rand() % $max_len;
- $s = "";
- while($len--)
- $s .= sprintf("%c", rand() % 26 + 65);;
- return $s;
-}
-
-function rand_number($len , $prec = -1, $sign = 1)
-{
- if($prec == -1){
- $n = substr(rand() . rand(), 0, rand() % $len + 1);
- if(strlen($n) < $len)
- $n .= "." . substr(rand(), 0, rand() % ($len - strlen($n)) + 1);
- }elseif ($prec == 0){
- $n = substr(rand() . rand(), 0, rand() % $len + 1);
- }else{
- $n = substr(rand() . rand(), 0, rand() % ($len - $prec) + 1);
- $n .= "." . substr(rand(), 0, $prec);
- }
- if($sign && (rand() % 3 == 0))
- $n = "-" .$n;
- return $n;
-}
-
-?> \ No newline at end of file
diff --git a/ext/java/CREDITS b/ext/java/CREDITS
deleted file mode 100644
index f49489bcf8..0000000000
--- a/ext/java/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Java
-Sam Ruby
diff --git a/ext/java/EXPERIMENTAL b/ext/java/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/java/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/java/Makefile.frag b/ext/java/Makefile.frag
deleted file mode 100644
index ff2a79a27f..0000000000
--- a/ext/java/Makefile.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-
-$(srcdir)/java.c : $(srcdir)/php_java.jar
-
-$(srcdir)/php_java.jar : $(srcdir)/reflect.java
- $(mkinstalldirs) $(srcdir)/net/php
- @cp $(srcdir)/reflect.java $(srcdir)/net/php
- @echo library=php_java > $(srcdir)/net/php/reflect.properties
- $(JAVA_C) $(srcdir)/net/php/reflect.java
- @test ! -f reflect.class || mv reflect.class $(srcdir)/net/php # bug in KJC javac
- $(JAVA_JAR) $(srcdir)/php_java.jar $(srcdir)/net/php/*.class $(srcdir)/net/php/*.properties
- @rm $(srcdir)/net/php/reflect.*
- @rmdir $(srcdir)/net/php
- @rmdir $(srcdir)/net
diff --git a/ext/java/README b/ext/java/README
deleted file mode 100644
index 7a84db5be8..0000000000
--- a/ext/java/README
+++ /dev/null
@@ -1,243 +0,0 @@
-What is PHP4 ext/java?
-
- PHP4 ext/java provides a simple and effective means for creating and
- invoking methods on Java objects from PHP. The JVM is created using JNI,
- and everything runs in-process.
-
- Two examples are provided, jver and jawt, to illustrate usage of this
- extension. A few things to note:
-
- 1) new Java() will create an instance of a class if a suitable constructor
- is available. If no parameters are passed and the default constructor
- is useful as it provides access to classes like "java.lang.System"
- which expose most of their functionallity through static methods.
-
- 2) Accessing a member of an instance will first look for bean properties
- then public fields. In other words, "print $date.time" will first
- attempt to be resolved as "$date.getTime()", then as "$date.time";
-
- 3) Both static and instance members can be accessed on an object with
- the same syntax. Furthermore, if the java object is of type
- "java.lang.Class", then static members of the class (fields and
- methods) can be accessed.
-
- 4) Exceptions raised result in PHP warnings, and null results. The
- warnings may be eliminated by prefixing the method call with an
- "@" sign. The following APIs may be used to retrieve and reset
- the last error:
-
- java_last_exception_get()
- java_last_exception_clear()
-
- 5) Overload resolution is in general a hard problem given the
- differences in types between the two languages. The PHP Java
- extension employs a simple, but fairly effective, metric for
- determining which overload is the best match.
-
- Additionally, method names in PHP are not case sensitive, potentially
- increasing the number of overloads to select from.
-
- Once a method is selected, the parameters are cooerced if necessary,
- possibly with a loss of data (example: double precision floating point
- numbers will be converted to boolean).
-
- 6) In the tradition of PHP, arrays and hashtables may pretty much
- be used interchangably. Note that hashtables in PHP may only be
- indexed by integers or strings; and that arrays of primitive types
- in Java can not be sparse. Also note that these constructs are
- passed by value, so may be expensive in terms of memory and time.
-
-Build and execution instructions:
-
- Given the number of platforms and providers of JVMs, no single set of
- instructions will be able to cover all cases. So in place of hard and
- fast instructions, below are a working examples for a number of free and
- commercial implementations and platforms. Please adjust the paths to
- suit your installation. Also, if you happen to get this to work on
- another JVM/platform combination, please let me know, particularly if
- a unique build or execution setup was required.
-
- Note for Windows users: semi-colons (";") mark the beginning of
- comments in php.ini files, so if you wish to add to the classpath,
- make sure that the entire string is in quotes. See the JDK 1.1.8
- instructions below for an example.
-
- This function has been tested in both CGI and Apache (apxs) modes. As
- the current design requires shared libraries, this support can not be
- linked statically into Apache.
-
- With ext/java, no Java Virtual Machines are created until the first
- Java call is made. This not only eliminates unnecessary overhead if
- the extension is never used, it also provides error messages directly
- back to the user instead of being burried in a log some place.
-
- For people interested in robustness, performance, and more complete
- integration with Java, consider using the sapi/servlet interface which
- is built upon the Java extension. Running PHP as a servlet enables PHP
- to utilize the existing JVM and threads from the servlet engine, and
- provides direct access to the servlet request and response objects.
-
- Finally, the bottom of this readme contains some guidance for how to
- approach situations in which these instructions don't work on your
- machine.
-
-========================================================================
-=== JVM=Kaffe 1.0.4 (as delivered with OS), OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.library.path=/usr/lib/kaffe:/home/rubys/php4/modules
- java.class.path=/usr/share/kaffe/Klasses.jar:/home/rubys/php4/modules/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Kaffe 1.0.5 (built from source), OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.library.path=/usr/local/lib/kaffe:/home/rubys/php4/modules
- java.class.path=/usr/local/share/kaffe/Klasses.jar:/home/rubys/php4/modules/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=IBM 1.1.8, OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.class.path=/home/jdk118/lib/classes.zip:/home/rubys/php4/modules/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Blackdown 1.2.2 RC4, OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.class.path=/home/rubys/php4/lib/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Sun JDK 1.2.2, OS=Linux ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.class.path=/home/rubys/php4/lib/php_java.jar
- java.library.path=/home/rubys/php4/modules
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Sun JDK 1.1.8, OS=Windows NT 4 ===
-========================================================================
-
-build instructions:
-
- SET JAVA_HOME=D:\jdk1.1.8
- msdev ext\java\java.dsp /MAKE "java - Win32 Debug_TS"
-
-php.ini:
-
- [java]
- java.class.path="D:\jdk1.1.8\lib\classes.zip;F:\PHP4\Debug_TS\php_java.jar"
- extension=php_java.dll
-
-========================================================================
-=== JVM=Sun JDK 1.2.2, OS=Windows NT 4 ===
-========================================================================
-
-build instructions:
-
- SET JAVA_HOME=D:\jdk1.2.2
- msdev ext\java\java.dsp /MAKE "java - Win32 Debug_TS"
-
-php.ini:
-
- [java]
- java.class.path=F:\PHP4\Debug_TS\php_java.jar
- extension=php_java.dll
-
-=========================================================================
-
-Guidance for when these instructions don't work.
-
- JDK vendors don't typically document their internal workings, and are
- typically very reliant on code inside of the JAVA main program and the
- installation directory structure. For this reason, running PHP as a
- servlet is typically much easier to get working. But if for some reason
- this is not appropriate for you, and the instructions above don't work,
- then read on.
-
- The first thing to realize is that the directory structure of the JDK is
- very important. Some users (particularly on Windows) get a message about
- a DLL or shared library not being available and proceed to find that file
- and copy it into a system directory. This typically just gets you to the
- next problem - for example, it appears that many JDKs attempt to locate
- the runtime Java classes (rt.jar) in a directory relative to these system
- libraries. So unless you are inclined to copy your entire Java
- installation, you are much better adjusting your PATHs.
-
- Not documented above, but useful for many JDK's is ability to specify the
- library path via java.library.path in the php.ini. On many Unix machines,
- determining the initial value for this can be done by changing directory
- to where you find a shared library that can't be loaded (example:
- libjava.so), and executing "ld libjava.so". If you see some modules
- listed as "not found", add the necessary directories to LD_LIBRARY_PATH
- and repeat until successful. On my system, I require the following
- two directories.
-
- /home/jdk1.2.2/jre/lib/i386/native_threads
- /home/jdk1.2.2/jre/lib/i386/classic
-
- Note: this only determines the statically loaded libraries. Additional
- libraries (such as libzip.so) may be loaded dynamically. On my system,
- libzip.so is located in
-
- /home/jdk1.2.2/jre/lib/i386
-
- Another php.ini variable which may be helpful is java.home.
-
- If java.library.path doesn't work for you (it won't on any JDK 1.1
- implementations, for example), then try setting the system PATH or the
- LD_LIBRARY_PATH before starting your web server. For Apache on Linux
- systems, this can be accomplished by editing the Root's .bashrc and
- adding the necessary export LD_LIBRARY_PATH statement.
-
- If that doesn't work, try dividing an (hopefully) conquering by temporarily
- eliminating items such as Apache from the process by adjusting the
- arguments passed to the ./configure command (i.e., removing --with-apxs).
-
- If all else fails, "man dlopen" on Unix systems will give more insight on
- what the system is trying to do internally.
diff --git a/ext/java/config.m4 b/ext/java/config.m4
deleted file mode 100644
index 6ad4afbed4..0000000000
--- a/ext/java/config.m4
+++ /dev/null
@@ -1,133 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(java, for JAVA support,
-[ --with-java[=DIR] Include Java support. DIR is the JDK base install directory.
- This extension is always built as shared.])
-
-if test "$PHP_JAVA" != "no"; then
-
- pltform=`uname -s 2>/dev/null`
- java_libext=libjava.so
- case $pltform in
- AIX) java_libext=libjava.a ;;
- HP-UX) java_libext=libjava.sl ;;
- esac
-
- if test "$PHP_JAVA" = "yes"; then
- if JAVA_JAR=`which jar 2>/dev/null`; then
- JAVA_JAR="$JAVA_JAR cf"
- else
- JAVA_JAR=
- fi
- PHP_JAVAC=`which javac`
- if test -z "$PHP_JAVAC"; then
- AC_MSG_ERROR([Unable to locate the javac binary in your system path
-Either adjust your Java installation or provide the Java installation path,
-e.g. --with-java=/java expecting /java/bin/ to contain the binaries])
- fi
- PHP_JAVA=`cd \`dirname \\\`which javac\\\`\`/..;pwd`
- else
- test -x $PHP_JAVA/bin/jar && JAVA_JAR="$PHP_JAVA/bin/jar cf"
- fi
-
- # substitute zip for systems which don't have jar
- if test -z "$JAVA_JAR"; then
- JAVA_JAR='zip -q0'
- fi
-
- if test -x $PHP_JAVA/bin/javac; then
- JAVA_C=$PHP_JAVA/bin/javac
- else
- AC_MSG_ERROR([Can not find the javac binary under $PHP_JAVA/bin/])
- fi
-
- if test -d $PHP_JAVA/lib/kaffe; then
- PHP_ADD_LIBPATH($PHP_JAVA/lib)
- JAVA_CFLAGS=-DKAFFE
- JAVA_INCLUDE=-I$PHP_JAVA/include/kaffe
- JAVA_CLASSPATH=$PHP_JAVA/share/kaffe/Klasses.jar
- JAVA_LIB=kaffevm
- JAVA_LIBPATH=$PHP_JAVA/lib/kaffe
- java_libext=kaffevm
-
- test -f $PHP_JAVA/lib/$JAVA_LIB && JAVA_LIBPATH=$PHP_JAVA/lib
- test -f $PHP_JAVA/lib/kaffe/$JAVA_LIB && JAVA_LIBPATH=$PHP_JAVA/lib/kaffe
-
- # accomodate old versions of kaffe which don't support jar
- if kaffe -version 2>&1 | grep 1.0b > /dev/null; then
- JAVA_JAR='zip -q0'
- fi
-
- elif test -f $PHP_JAVA/lib/$java_libext; then
- JAVA_LIB=java
- JAVA_LIBPATH=$PHP_JAVA/lib
- JAVA_INCLUDE=-I$PHP_JAVA/include
- test -f $PHP_JAVA/lib/classes.zip && JAVA_CFLAGS=-DJNI_11
- test -f $PHP_JAVA/lib/jvm.jar && JAVA_CFLAGS=-DJNI_12
- test -f $PHP_JAVA/lib/classes.zip && JAVA_CLASSPATH=$PHP_JAVA/lib/classes.zip
- test -f $PHP_JAVA/lib/jvm.jar && JAVA_CLASSPATH=$PHP_JAVA/lib/jvm.jar
-
- for i in $PHP_JAVA/include/*; do
- test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE $i"
- done
-
- else
-
- for i in `find $PHP_JAVA/include -type d`; do
- test -f $i/jni.h && JAVA_INCLUDE=-I$i
- test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE -I$i"
- done
-
- for i in `find $PHP_JAVA/. -type d`; do
- test -f $i/classes.zip && JAVA_CFLAGS=-DJNI_11
- test -f $i/rt.jar && JAVA_CFLAGS=-DJNI_12
- test -f $i/classes.zip && JAVA_CLASSPATH=$i/classes.zip
- test -f $i/rt.jar && JAVA_CLASSPATH=$i/rt.jar
-
- if test -f $i/$java_libext; then
- JAVA_LIB=java
- JAVA_LIBPATH=$i
- test -d $i/hotspot && PHP_ADD_LIBPATH($i/hotspot)
- test -d $i/classic && PHP_ADD_LIBPATH($i/classic)
- test -d $i/server && PHP_ADD_LIBPATH($i/server)
- test -d $i/native_threads && PHP_ADD_LIBPATH($i/native_threads)
- fi
- done
-
- if test -z "$JAVA_INCLUDE"; then
- AC_MSG_RESULT(no)
- AC_MSG_ERROR(unable to find Java VM libraries)
- fi
-
- JAVA_CFLAGS="$JAVA_CFLAGS -D_REENTRANT"
- fi
-
- AC_DEFINE(HAVE_JAVA,1,[ ])
-
- if test -z "$JAVA_LIBPATH"; then
- AC_MSG_ERROR(unable to find Java VM libraries)
- fi
-
- PHP_ADD_LIBPATH($JAVA_LIBPATH)
- JAVA_CFLAGS="$JAVA_CFLAGS '-DJAVALIB=\"$JAVA_LIBPATH/$java_libext\"'"
-
- if test "$PHP_SAPI" != "servlet"; then
- PHP_NEW_EXTENSION(java, java.c, shared,, $JAVA_CFLAGS $JAVA_INCLUDE)
-
- if test "$PHP_SAPI" = "cgi"; then
- PHP_ADD_LIBRARY($JAVA_LIB)
- fi
-
- INSTALL_IT="$INSTALL_IT; \$(srcdir)/build/shtool mkdir -p -f -m 0755 \$(INSTALL_ROOT)\$(libdir)"
- INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 \$(srcdir)/ext/java/php_java.jar \$(INSTALL_ROOT)\$(libdir)"
- fi
-
- PHP_SUBST(JAVA_CLASSPATH)
- PHP_SUBST(JAVA_JAR)
- PHP_SUBST(JAVA_C)
-
- PHP_ADD_MAKEFILE_FRAGMENT
-fi
-
diff --git a/ext/java/except.php b/ext/java/except.php
deleted file mode 100644
index a7e6a79c08..0000000000
--- a/ext/java/except.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?
- $stack=new Java("java.util.Stack");
- $stack->push(1);
-
- #
- # Should succeed and print out "1"
- #
- $result = $stack->pop();
- $ex = java_last_exception_get();
- if (!$ex) print "$result\n";
-
- #
- # Should fail - note the "@" eliminates the warning
- #
- $result=@$stack->pop();
- $ex=java_last_exception_get();
- if ($ex) print $ex->toString();
-
- #
- # Reset last exception
- #
- java_last_exception_clear();
-?>
diff --git a/ext/java/java.c b/ext/java/java.c
deleted file mode 100644
index 6a0fadb675..0000000000
--- a/ext/java/java.c
+++ /dev/null
@@ -1,786 +0,0 @@
- /*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sam Ruby (rubys@us.ibm.com) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-/*
- * This module implements Zend OO syntax overloading support for Java
- * components using JNI and reflection.
- */
-
-#include "php.h"
-#include "zend_compile.h"
-#include "php_ini.h"
-#include "php_globals.h"
-
-#ifdef PHP_WIN32
- #include "win32/winutil.h"
- #define DL_ERROR php_win_err()
-#else
- #define DL_ERROR dlerror()
-#endif
-
-#include <jni.h>
-
-#include <stdio.h>
-
-#define IS_EXCEPTION 86
-
-/***************************************************************************/
-
-#ifndef KAFFE
-#ifndef JNI_11
-#ifndef JNI_12
-
-#ifdef JNI_VERSION_1_2
-#define JNI_12
-#else
-#define JNI_11
-#endif
-
-#endif
-#endif
-#endif
-
-#ifdef PHP_WIN32
-#ifdef JNI_12
-#define JAVALIB "jvm.dll"
-#else
-#define JAVALIB "javai.dll"
-#endif
-#else
-#endif
-
-/***************************************************************************/
-
-static int le_jobject = 0;
-
-static char *classpath = 0;
-static char *libpath = 0;
-static char *javahome = 0;
-static char *javalib = 0;
-
-static int iniUpdated = 0;
-static void *dl_handle = 0;
-
-ZEND_BEGIN_MODULE_GLOBALS(java)
- JavaVM *jvm;
- JNIEnv *jenv;
- jobject php_reflect;
- jclass reflect_class;
-ZEND_END_MODULE_GLOBALS(java)
-
-#ifdef ZTS
-# define JG(v) TSRMG(java_globals_id, zend_java_globals *, v)
-#else
-# define JG(v) (java_globals.v)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(java)
-
-static zend_class_entry java_class_entry;
-
-static PHP_INI_MH(OnIniUpdate)
-{
- if (new_value) *(char**)mh_arg1 = new_value;
- iniUpdated=1;
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- PHP_INI_ENTRY1("java.class.path", NULL, PHP_INI_ALL, OnIniUpdate, &classpath)
-#ifndef JNI_11
- PHP_INI_ENTRY1("java.home", NULL, PHP_INI_ALL, OnIniUpdate, &javahome)
- PHP_INI_ENTRY1("java.library.path", NULL, PHP_INI_ALL, OnIniUpdate, &libpath)
-#endif
-#ifdef JAVALIB
- PHP_INI_ENTRY1("java.library", JAVALIB, PHP_INI_ALL, OnIniUpdate, &javalib)
-#else
- PHP_INI_ENTRY1("java.library", NULL, PHP_INI_ALL, OnIniUpdate, &javalib)
-#endif
-PHP_INI_END()
-
-/***************************************************************************/
-
-/*
- * Destroy a Java Virtual Machine.
- */
-void jvm_destroy(TSRMLS_D)
-{
- if (JG(php_reflect)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), JG(php_reflect));
- if (JG(jvm)) {
- (*JG(jvm))->DetachCurrentThread(JG(jvm));
- (*JG(jvm))->DestroyJavaVM(JG(jvm));
- JG(jvm) = 0;
- }
- if (dl_handle) DL_UNLOAD(dl_handle);
- JG(php_reflect) = 0;
- JG(jenv) = 0;
-}
-
-/*
- * Create a Java Virtual Machine.
- * - class.path, home, and library.path are read out of the INI file
- * - appropriate (pre 1.1, JDK 1.1, and JDK 1.2) initialization is performed
- * - net.php.reflect class file is located
- */
-
-#ifdef JNI_12
-static void addJVMOption(JavaVMInitArgs *vm_args, char *name, char *value)
-{
- char *option = (char*) malloc(strlen(name) + strlen(value) + 1);
- strcpy(option, name);
- strcat(option, value);
- vm_args->options[vm_args->nOptions++].optionString = option;
-}
-#endif
-
-static int jvm_create(TSRMLS_D)
-{
- int rc;
- jobject local_php_reflect;
- jthrowable error;
-
- jint (JNICALL *JNI_CreateVM)(const void*, const void*, void*);
-#ifndef JNI_12
- jint (JNICALL *JNI_DefaultArgs)(void*);
-#endif
-
-#ifdef JNI_11
- JDK1_1InitArgs vm_args;
-#else
- JavaVMInitArgs vm_args;
-#ifdef JNI_12
- JavaVMOption options[3];
-#endif
-#endif
-
- iniUpdated=0;
-
- if (javalib) {
- dl_handle = DL_LOAD(javalib);
-
- if (!dl_handle) {
- php_error(E_ERROR, "Unable to load Java Library %s, error: %s",
- javalib, DL_ERROR);
- return -1;
- }
- }
-
-#ifndef JAVALIB
- if (!dl_handle)
- JNI_CreateVM = &JNI_CreateJavaVM;
- else
-#endif
-
- JNI_CreateVM = (jint (JNICALL *)(const void*, const void*, void*))
- DL_FETCH_SYMBOL(dl_handle, "JNI_CreateJavaVM");
-
- if (!JNI_CreateVM) {
- php_error(E_ERROR, "Unable to locate CreateJavaVM function");
- return -1;
- }
-
-#ifdef JNI_12
-
- vm_args.version = JNI_VERSION_1_2;
- vm_args.ignoreUnrecognized = JNI_FALSE;
- vm_args.options = options;
- vm_args.nOptions = 0;
-
- if (classpath) addJVMOption(&vm_args, "-Djava.class.path=", classpath);
- if (javahome) addJVMOption(&vm_args, "-Djava.home=", javahome);
- if (libpath) addJVMOption(&vm_args, "-Djava.library.path=", libpath);
-
-#else
-
-#ifndef JAVALIB
- if (!dl_handle)
- JNI_DefaultArgs = &JNI_GetDefaultJavaVMInitArgs;
- else
-#endif
-
- JNI_DefaultArgs = (jint (JNICALL *)(void*))
- DL_FETCH_SYMBOL(dl_handle, "JNI_GetDefaultJavaVMInitArgs");
-
- if (!JNI_DefaultArgs) {
- php_error(E_ERROR, "Unable to locate GetDefaultJavaVMInitArgs function");
- return -1;
- }
-
- vm_args.version=0x00010001;
- (*JNI_DefaultArgs)(&vm_args);
-
- if (!classpath) classpath = "";
- vm_args.classpath = classpath;
-#ifdef KAFFE
- vm_args.classhome = javahome;
- vm_args.libraryhome = libpath;
-#endif
-
-#endif
-
- rc = (*JNI_CreateVM)(&JG(jvm), &JG(jenv), &vm_args);
-
- if (rc) {
- php_error(E_ERROR, "Unable to create Java Virtual Machine");
- return rc;
- }
-
- JG(reflect_class) = (*JG(jenv))->FindClass(JG(jenv), "net/php/reflect");
- error = (*JG(jenv))->ExceptionOccurred(JG(jenv));
- if (error) {
- jclass errClass;
- jmethodID toString;
- jobject errString;
- const char *errAsUTF;
- jboolean isCopy;
- JNIEnv *jenv = JG(jenv);
- (*jenv)->ExceptionClear(jenv);
- errClass = (*jenv)->GetObjectClass(jenv, error);
- toString = (*jenv)->GetMethodID(jenv, errClass, "toString",
- "()Ljava/lang/String;");
- errString = (*jenv)->CallObjectMethod(jenv, error, toString);
- errAsUTF = (*jenv)->GetStringUTFChars(jenv, errString, &isCopy);
- php_error(E_ERROR, "%s", errAsUTF);
- if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, error, errAsUTF);
- jvm_destroy(TSRMLS_C);
- return -1;
- }
-
- local_php_reflect = (*JG(jenv))->AllocObject(JG(jenv), JG(reflect_class));
- JG(php_reflect) = (*JG(jenv))->NewGlobalRef(JG(jenv), local_php_reflect);
- return rc;
-}
-
-/***************************************************************************/
-
-static jobject _java_makeObject(pval* arg TSRMLS_DC)
-{
- JNIEnv *jenv = JG(jenv);
- jobject result;
- pval **handle;
- int type;
- jmethodID makeArg;
- jclass hashClass;
-
- switch (Z_TYPE_P(arg)) {
- case IS_STRING:
- result=(*jenv)->NewByteArray(jenv, Z_STRLEN_P(arg));
- (*jenv)->SetByteArrayRegion(jenv, (jbyteArray)result, 0,
- Z_STRLEN_P(arg), Z_STRVAL_P(arg));
- break;
-
- case IS_OBJECT:
- zend_hash_index_find(Z_OBJPROP_P(arg), 0, (void*)&handle);
- result = zend_list_find(Z_LVAL_PP(handle), &type);
- break;
-
- case IS_BOOL:
- makeArg = (*jenv)->GetMethodID(jenv, JG(reflect_class), "MakeArg",
- "(Z)Ljava/lang/Object;");
- result = (*jenv)->CallObjectMethod(jenv, JG(php_reflect), makeArg,
- (jboolean)(Z_LVAL_P(arg)));
- break;
-
- case IS_LONG:
- makeArg = (*jenv)->GetMethodID(jenv, JG(reflect_class), "MakeArg",
- "(J)Ljava/lang/Object;");
- result = (*jenv)->CallObjectMethod(jenv, JG(php_reflect), makeArg,
- (jlong)(Z_LVAL_P(arg)));
- break;
-
- case IS_DOUBLE:
- makeArg = (*jenv)->GetMethodID(jenv, JG(reflect_class), "MakeArg",
- "(D)Ljava/lang/Object;");
- result = (*jenv)->CallObjectMethod(jenv, JG(php_reflect), makeArg,
- (jdouble)(Z_DVAL_P(arg)));
- break;
-
- case IS_ARRAY:
- {
- jobject jkey, jval;
- zval **value;
- zval key;
- char *string_key;
- ulong num_key;
- jobject jold;
- jmethodID put, init;
-
- hashClass = (*jenv)->FindClass(jenv, "java/util/Hashtable");
- init = (*jenv)->GetMethodID(jenv, hashClass, "<init>", "()V");
- result = (*jenv)->NewObject(jenv, hashClass, init);
-
- put = (*jenv)->GetMethodID(jenv, hashClass, "put",
- "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
-
- /* Iterate through hash */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(arg));
- while(zend_hash_get_current_data(Z_ARRVAL_P(arg), (void**)&value) == SUCCESS) {
- jval = _java_makeObject(*value TSRMLS_CC);
-
- switch (zend_hash_get_current_key(Z_ARRVAL_P(arg), &string_key, &num_key, 0)) {
- case HASH_KEY_IS_STRING:
- Z_TYPE(key) = IS_STRING;
- Z_STRVAL(key) = string_key;
- Z_STRLEN(key) = strlen(string_key);
- jkey = _java_makeObject(&key TSRMLS_CC);
- break;
- case HASH_KEY_IS_LONG:
- Z_TYPE(key) = IS_LONG;
- Z_LVAL(key) = num_key;
- jkey = _java_makeObject(&key TSRMLS_CC);
- break;
- default: /* HASH_KEY_NON_EXISTANT */
- jkey = 0;
- }
- jold = (*jenv)->CallObjectMethod(jenv, result, put, jkey, jval);
- if (Z_TYPE_PP(value) != IS_OBJECT) (*jenv)->DeleteLocalRef(jenv, jval);
- zend_hash_move_forward(Z_ARRVAL_P(arg));
- }
-
- break;
- }
-
- default:
- result=0;
- }
-
- return result;
-}
-
-/***************************************************************************/
-
-static jobjectArray _java_makeArray(int argc, pval** argv TSRMLS_DC)
-{
- JNIEnv *jenv = JG(jenv);
-
- jclass objectClass = (*jenv)->FindClass(jenv, "java/lang/Object");
- jobjectArray result = (*jenv)->NewObjectArray(jenv, argc, objectClass, 0);
- jobject arg;
- int i;
-
- for (i=0; i<argc; i++) {
- arg = _java_makeObject(argv[i] TSRMLS_CC);
- (*jenv)->SetObjectArrayElement(jenv, result, i, arg);
- if (Z_TYPE_P(argv[i]) != IS_OBJECT) (*jenv)->DeleteLocalRef(jenv, arg);
- }
- return result;
-}
-
-
-static int checkError(pval *value)
-{
- if (Z_TYPE_P(value) == IS_EXCEPTION) {
- php_error(E_WARNING, "%s", Z_STRVAL_P(value));
- efree(Z_STRVAL_P(value));
- ZVAL_FALSE(value);
- return 1;
- };
- return 0;
-}
-
-
-/***************************************************************************/
-
-/*
- * Invoke a method on an object. If method name is "java", create a new
- * object instead.
- */
-void java_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- JNIEnv *jenv;
-
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *)
- property_reference->elements_list->tail->data;
-
- int arg_count = ZEND_NUM_ARGS();
- jlong result = 0;
- pval **arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
-
- getParametersArray(ht, arg_count, arguments);
-
- if (iniUpdated && JG(jenv)) jvm_destroy(TSRMLS_C);
- if (!JG(jenv)) jvm_create(TSRMLS_C);
- if (!JG(jenv)) return;
- jenv = JG(jenv);
-
- if (!strcmp("java", Z_STRVAL(function_name->element))) {
-
- /* construct a Java object:
- First argument is the class name. Any additional arguments will
- be treated as constructor parameters. */
-
- jmethodID co = (*jenv)->GetMethodID(jenv, JG(reflect_class), "CreateObject",
- "(Ljava/lang/String;[Ljava/lang/Object;J)V");
- jstring className;
- result = (jlong)(long)object;
-
- if (ZEND_NUM_ARGS() < 1) {
- php_error(E_ERROR, "Missing classname in new Java() call");
- return;
- }
-
- className=(*jenv)->NewStringUTF(jenv, Z_STRVAL_P(arguments[0]));
- (*jenv)->CallVoidMethod(jenv, JG(php_reflect), co,
- className, _java_makeArray(arg_count-1, arguments+1 TSRMLS_CC), result);
-
- (*jenv)->DeleteLocalRef(jenv, className);
-
- } else {
-
- pval **handle;
- int type;
- jobject obj;
- jstring method;
-
- /* invoke a method on the given object */
-
- jmethodID invoke = (*jenv)->GetMethodID(jenv, JG(reflect_class), "Invoke",
- "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;J)V");
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void**) &handle);
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- method = (*jenv)->NewStringUTF(jenv, Z_STRVAL(function_name->element));
- result = (jlong)(long)return_value;
-
- (*jenv)->CallVoidMethod(jenv, JG(php_reflect), invoke,
- obj, method, _java_makeArray(arg_count, arguments TSRMLS_CC), result);
-
- (*jenv)->DeleteLocalRef(jenv, method);
-
- }
-
- efree(arguments);
- pval_destructor(&function_name->element);
-
- checkError((pval*)(long)result);
-}
-
-/***************************************************************************/
-
-/* {{{ proto object java_last_exception_get(void)
- Get last Java exception */
-PHP_FUNCTION(java_last_exception_get)
-{
- jlong result = 0;
- jmethodID lastEx;
-
- if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
-
- result = (jlong)(long)return_value;
-
- lastEx = (*JG(jenv))->GetMethodID(JG(jenv), JG(reflect_class),
- "lastException", "(J)V");
-
- (*JG(jenv))->CallVoidMethod(JG(jenv), JG(php_reflect), lastEx, result);
-}
-
-/* }}} */
-
-/***************************************************************************/
-
-/* {{{ proto void java_last_exception_clear(void)
- Clear last java extension */
-PHP_FUNCTION(java_last_exception_clear)
-{
- jlong result = 0;
- jmethodID clearEx;
-
- if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
-
- result = (jlong)(long)return_value;
-
- clearEx = (*JG(jenv))->GetMethodID(JG(jenv), JG(reflect_class),
- "clearException", "()V");
-
- (*JG(jenv))->CallVoidMethod(JG(jenv), JG(php_reflect), clearEx);
-}
-
-/* }}} */
-
-/***************************************************************************/
-
-static pval _java_getset_property
- (zend_property_reference *property_reference, jobjectArray value TSRMLS_DC)
-{
- pval presult;
- jlong result = 0;
- pval **pobject;
- jobject obj;
- int type;
-
- /* get the property name */
- zend_llist_element *element = property_reference->elements_list->head;
- zend_overloaded_element *property=(zend_overloaded_element *)element->data;
- jstring propName;
-
- JNIEnv *jenv;
- jenv = JG(jenv);
-
- propName = (*jenv)->NewStringUTF(jenv, Z_STRVAL(property->element));
-
- /* get the object */
- zend_hash_index_find(Z_OBJPROP_P(property_reference->object),
- 0, (void **) &pobject);
- obj = zend_list_find(Z_LVAL_PP(pobject), &type);
- result = (jlong)(long) &presult;
- Z_TYPE(presult) = IS_NULL;
-
- if (!obj || (type!=le_jobject)) {
- php_error(E_ERROR,
- "Attempt to access a Java property on a non-Java object");
- } else {
- /* invoke the method */
- jmethodID gsp = (*jenv)->GetMethodID(jenv, JG(reflect_class), "GetSetProp",
- "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;J)V");
- (*jenv)->CallVoidMethod
- (jenv, JG(php_reflect), gsp, obj, propName, value, result);
- }
-
- (*jenv)->DeleteLocalRef(jenv, propName);
- pval_destructor(&property->element);
- return presult;
-}
-
-
-pval java_get_property_handler(zend_property_reference *property_reference)
-{
- pval presult;
- TSRMLS_FETCH();
-
- presult = _java_getset_property(property_reference, 0 TSRMLS_CC);
- checkError(&presult);
- return presult;
-}
-
-
-int java_set_property_handler(zend_property_reference *property_reference, pval *value)
-{
- pval presult;
- TSRMLS_FETCH();
-
- presult = _java_getset_property(property_reference, _java_makeArray(1, &value TSRMLS_CC) TSRMLS_CC);
- return checkError(&presult) ? FAILURE : SUCCESS;
-}
-
-/***************************************************************************/
-
-static void _php_java_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- void *jobject = (void *)rsrc->ptr;
-
- if (JG(jenv)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), jobject);
-}
-
-static void alloc_java_globals_ctor(zend_java_globals *java_globals TSRMLS_DC)
-{
- memset(java_globals, 0, sizeof(zend_java_globals));
-}
-
-PHP_MINIT_FUNCTION(java)
-{
- INIT_OVERLOADED_CLASS_ENTRY(java_class_entry, "java", NULL,
- java_call_function_handler,
- java_get_property_handler,
- java_set_property_handler);
-
- zend_register_internal_class(&java_class_entry TSRMLS_CC);
-
- le_jobject = zend_register_list_destructors_ex(_php_java_destructor, NULL, "java", module_number);
-
- REGISTER_INI_ENTRIES();
-
- if (!classpath) classpath = getenv("CLASSPATH");
-
- if (!libpath) {
- libpath=PG(extension_dir);
- }
-
- ZEND_INIT_MODULE_GLOBALS(java, alloc_java_globals_ctor, NULL);
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(java)
-{
- UNREGISTER_INI_ENTRIES();
- if (JG(jvm)) jvm_destroy(TSRMLS_C);
- return SUCCESS;
-}
-
-
-function_entry java_functions[] = {
- PHP_FE(java_last_exception_get, NULL)
- PHP_FE(java_last_exception_clear, NULL)
- {NULL, NULL, NULL}
-};
-
-
-static PHP_MINFO_FUNCTION(java) {
- DISPLAY_INI_ENTRIES();
-}
-
-zend_module_entry java_module_entry = {
- STANDARD_MODULE_HEADER,
- "java",
- java_functions,
- PHP_MINIT(java),
- PHP_MSHUTDOWN(java),
- NULL,
- NULL,
- PHP_MINFO(java),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_GET_MODULE(java)
-
-/***************************************************************************/
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString
- (JNIEnv *jenv, jclass self, jlong result, jbyteArray jvalue)
-{
- jboolean isCopy;
- jbyte *value = (*jenv)->GetByteArrayElements(jenv, jvalue, &isCopy);
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_STRING;
- Z_STRLEN_P(presult)=(*jenv)->GetArrayLength(jenv, jvalue);
- Z_STRVAL_P(presult)=emalloc(Z_STRLEN_P(presult)+1);
- memcpy(Z_STRVAL_P(presult), value, Z_STRLEN_P(presult));
- Z_STRVAL_P(presult)[Z_STRLEN_P(presult)]=0;
- if (isCopy) (*jenv)->ReleaseByteArrayElements(jenv, jvalue, value, 0);
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong
- (JNIEnv *jenv, jclass self, jlong result, jlong value)
-{
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_LONG;
- Z_LVAL_P(presult)=(long)value;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromDouble
- (JNIEnv *jenv, jclass self, jlong result, jdouble value)
-{
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_DOUBLE;
- Z_DVAL_P(presult)=value;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromBoolean
- (JNIEnv *jenv, jclass self, jlong result, jboolean value)
-{
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_BOOL;
- Z_LVAL_P(presult)=value;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromObject
- (JNIEnv *jenv, jclass self, jlong result, jobject value)
-{
- /* wrapper the java object in a pval object */
- pval *presult = (pval*)(long)result;
- pval *handle;
- TSRMLS_FETCH();
-
- if (Z_TYPE_P(presult) != IS_OBJECT) {
- object_init_ex(presult, &java_class_entry);
- presult->is_ref=1;
- presult->refcount=1;
- }
-
- ALLOC_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) =
- zend_list_insert((*jenv)->NewGlobalRef(jenv, value), le_jobject);
- pval_copy_constructor(handle);
- INIT_PZVAL(handle);
- zend_hash_index_update(Z_OBJPROP_P(presult), 0, &handle, sizeof(pval *), NULL);
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromArray
- (JNIEnv *jenv, jclass self, jlong result)
-{
- array_init( (pval*)(long)result );
-}
-
-JNIEXPORT jlong JNICALL Java_net_php_reflect_nextElement
- (JNIEnv *jenv, jclass self, jlong array)
-{
- pval *result;
- pval *handle = (pval*)(long)array;
- ALLOC_ZVAL(result);
- zend_hash_next_index_insert(Z_ARRVAL_P(handle), &result, sizeof(zval *), NULL);
- return (jlong)(long)result;
-}
-
-JNIEXPORT jlong JNICALL Java_net_php_reflect_hashIndexUpdate
- (JNIEnv *jenv, jclass self, jlong array, jlong key)
-{
- pval *result;
- pval *handle = (pval*)(long)array;
- ALLOC_ZVAL(result);
- zend_hash_index_update(Z_ARRVAL_P(handle), (unsigned long)key,
- &result, sizeof(zval *), NULL);
- return (jlong)(long)result;
-}
-
-JNIEXPORT jlong JNICALL Java_net_php_reflect_hashUpdate
- (JNIEnv *jenv, jclass self, jlong array, jbyteArray key)
-{
- pval *result;
- pval pkey;
- pval *handle = (pval*)(long)array;
- ALLOC_ZVAL(result);
- Java_net_php_reflect_setResultFromString(jenv, self, (jlong)(long)&pkey, key);
- zend_hash_update(Z_ARRVAL_P(handle), Z_STRVAL(pkey), Z_STRLEN(pkey)+1,
- &result, sizeof(zval *), NULL);
- return (jlong)(long)result;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setException
- (JNIEnv *jenv, jclass self, jlong result, jbyteArray value)
-{
- pval *presult = (pval*)(long)result;
- Java_net_php_reflect_setResultFromString(jenv, self, result, value);
- Z_TYPE_P(presult)=IS_EXCEPTION;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setEnv
- (JNIEnv *newJenv, jclass self TSRMLS_DC)
-{
- jobject local_php_reflect;
-
- iniUpdated=0;
- JG(jenv)=newJenv;
-
- if (!self) self = (*JG(jenv))->FindClass(JG(jenv), "net/php/reflect");
- JG(reflect_class) = self;
-
- if (JG(php_reflect)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), JG(php_reflect));
- local_php_reflect = (*JG(jenv))->AllocObject(JG(jenv), JG(reflect_class));
- JG(php_reflect) = (*JG(jenv))->NewGlobalRef(JG(jenv), local_php_reflect);
-}
diff --git a/ext/java/java.dsp b/ext/java/java.dsp
deleted file mode 100644
index 620ba07d77..0000000000
--- a/ext/java/java.dsp
+++ /dev/null
@@ -1,254 +0,0 @@
-# Microsoft Developer Studio Project File - Name="java" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=java - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "java.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "java.mak" CFG="java - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "java - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "java - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "java - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "java - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "java - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release"
-# PROP BASE Intermediate_Dir "..\..\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release"
-# PROP Intermediate_Dir "..\..\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_java.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug"
-# PROP BASE Intermediate_Dir "..\..\Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug"
-# PROP Intermediate_Dir "..\..\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_java.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug_TS"
-# PROP BASE Intermediate_Dir "..\..\Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "..\..\Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_java.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "java - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "..\..\Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "..\..\Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_java.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "java - Win32 Release"
-# Name "java - Win32 Debug"
-# Name "java - Win32 Debug_TS"
-# Name "java - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\java.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_java.h
-# End Source File
-# End Group
-# Begin Group "Java Files"
-
-# PROP Default_Filter "java"
-# Begin Source File
-
-SOURCE=.\reflect.java
-
-!IF "$(CFG)" == "java - Win32 Release"
-
-# Begin Custom Build
-OutDir=.\..\..\Release
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug"
-
-# Begin Custom Build
-OutDir=.\..\..\Debug
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac -g net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug_TS"
-
-# Begin Custom Build
-OutDir=.\..\..\Debug_TS
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac -g net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "java - Win32 Release_TS"
-
-# Begin Custom Build
-OutDir=.\..\..\Release_TS
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\jtest.php
-# End Source File
-# End Target
-# End Project
diff --git a/ext/java/jawt.php b/ext/java/jawt.php
deleted file mode 100644
index 30f2235611..0000000000
--- a/ext/java/jawt.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?
-
- // This example is only intented to be run as a CGI.
-
- $frame = new Java("java.awt.Frame", "Zend");
- $button = new Java("java.awt.Button", "Hello Java world!");
- $frame->add("North", $button);
- $frame->validate();
- $frame->pack();
- $frame->visible = True;
-
- $thread = new Java("java.lang.Thread");
- $thread->sleep(10000);
-
- $frame->dispose();
-
- // Odd behavior noted with Sun JVMs:
- //
- // 1) $thread->destroy() will fail with a NoSuchMethodError exception.
- // 2) The call to (*jvm)->DestroyJVM(jvm) made when PHP terminates
- // will hang, unless _BOTH_ the calls to pack and setVisible above
- // are removed.
- //
- // Even more odd: both effects are seen with a 100% Java implementation
- // of the above!
-
-?>
diff --git a/ext/java/jver.php b/ext/java/jver.php
deleted file mode 100644
index 7015944101..0000000000
--- a/ext/java/jver.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-<?
-
- $system = new Java("java.lang.System");
- print "Java version=".$system->getProperty("java.version")." <br>\n";
- print "Java vendor=".$system->getProperty("java.vendor")." <p>\n\n";
- print "OS=".$system->getProperty("os.name")." ".
- $system->getProperty("os.version")." on ".
- $system->getProperty("os.arch")." <br>\n";
-
- $formatter = new Java("java.text.SimpleDateFormat",
- "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
-
- print $formatter->format(new Java("java.util.Date"))."\n";
-
-?>
-</html>
diff --git a/ext/java/reflect.java b/ext/java/reflect.java
deleted file mode 100644
index a9a7983ed2..0000000000
--- a/ext/java/reflect.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sam Ruby (rubys@us.ibm.com) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-package net.php;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.beans.*;
-
-public class reflect {
-
- static { loadLibrary("reflect"); }
-
- protected static void loadLibrary(String property) {
- try {
- ResourceBundle bundle = ResourceBundle.getBundle("net.php."+property);
- System.loadLibrary(bundle.getString("library"));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- //
- // Native methods
- //
- private static native void setResultFromString(long result, byte value[]);
- private static native void setResultFromLong(long result, long value);
- private static native void setResultFromDouble(long result, double value);
- private static native void setResultFromBoolean(long result, boolean value);
- private static native void setResultFromObject(long result, Object value);
- private static native void setResultFromArray(long result);
- private static native long nextElement(long array);
- private static native long hashUpdate(long array, byte key[]);
- private static native long hashIndexUpdate(long array, long key);
- private static native void setException(long result, byte value[]);
- public static native void setEnv();
-
- //
- // Helper routines which encapsulate the native methods
- //
- public static void setResult(long result, Object value) {
- if (value == null) return;
-
- if (value instanceof java.lang.String) {
-
- setResultFromString(result, ((String)value).getBytes());
-
- } else if (value instanceof java.lang.Number) {
-
- if (value instanceof java.lang.Integer ||
- value instanceof java.lang.Short ||
- value instanceof java.lang.Byte) {
- setResultFromLong(result, ((Number)value).longValue());
- } else {
- /* Float, Double, BigDecimal, BigInteger, Double, Long, ... */
- setResultFromDouble(result, ((Number)value).doubleValue());
- }
-
- } else if (value instanceof java.lang.Boolean) {
-
- setResultFromBoolean(result, ((Boolean)value).booleanValue());
-
- } else if (value.getClass().isArray()) {
-
- long length = Array.getLength(value);
- setResultFromArray(result);
- for (int i=0; i<length; i++) {
- setResult(nextElement(result), Array.get(value, i));
- }
-
- } else if (value instanceof java.util.Hashtable) {
-
- Hashtable ht = (Hashtable) value;
- setResultFromArray(result);
- for (Enumeration e = ht.keys(); e.hasMoreElements(); ) {
- Object key = e.nextElement();
- long slot;
- if (key instanceof Number &&
- !(key instanceof Double || key instanceof Float))
- slot = hashIndexUpdate(result, ((Number)key).longValue());
- else
- slot = hashUpdate(result, key.toString().getBytes());
- setResult(slot, ht.get(key));
- }
-
- } else {
-
- setResultFromObject(result, value);
-
- }
- }
-
- Throwable lastException = null;
-
- void lastException(long result) {
- setResult(result, lastException);
- }
-
- void clearException() {
- lastException = null;
- }
-
- void setException(long result, Throwable e) {
- if (e instanceof InvocationTargetException) {
- Throwable t = ((InvocationTargetException)e).getTargetException();
- if (t!=null) e=t;
- }
-
- lastException = e;
- setException(result, e.toString().getBytes());
- }
-
- //
- // Create an new instance of a given class
- //
- public void CreateObject(String name, Object args[], long result) {
- try {
- Vector matches = new Vector();
-
- Constructor cons[] = Class.forName(name).getConstructors();
- for (int i=0; i<cons.length; i++) {
- if (cons[i].getParameterTypes().length == args.length) {
- matches.addElement(cons[i]);
- }
- }
-
- Constructor selected = (Constructor)select(matches, args);
-
- if (selected == null) {
- if (args.length > 0) {
- throw new InstantiationException("No matching constructor found");
- } else {
- // for classes which have no visible constructor, return the class
- // useful for classes like java.lang.System and java.util.Calendar.
- setResult(result, Class.forName(name));
- return;
- }
- }
-
- Object coercedArgs[] = coerce(selected.getParameterTypes(), args);
- setResultFromObject(result, selected.newInstance(coercedArgs));
-
- } catch (Exception e) {
- setException(result, e);
- }
- }
-
- //
- // Select the best match from a list of methods
- //
- private static Object select(Vector methods, Object args[]) {
- if (methods.size() == 1) return methods.firstElement();
-
- Object selected = null;
- int best = Integer.MAX_VALUE;
-
- for (Enumeration e = methods.elements(); e.hasMoreElements(); ) {
- Object element = e.nextElement();
- int weight=0;
-
- Class parms[] = (element instanceof Method) ?
- ((Method)element).getParameterTypes() :
- ((Constructor)element).getParameterTypes();
-
- for (int i=0; i<parms.length; i++) {
- if (parms[i].isInstance(args[i])) {
- for (Class c=parms[i]; (c=c.getSuperclass()) != null; ) {
- if (!c.isInstance(args[i])) break;
- weight++;
- }
- } else if (parms[i].isAssignableFrom(java.lang.String.class)) {
- if (!(args[i] instanceof byte[]) && !(args[i] instanceof String))
- weight+=9999;
- } else if (parms[i].isArray()) {
- if (args[i] instanceof java.util.Hashtable)
- weight+=256;
- else
- weight+=9999;
- } else if (parms[i].isPrimitive()) {
- Class c=parms[i];
- if (args[i] instanceof Number) {
- if (c==Boolean.TYPE) weight+=5;
- if (c==Character.TYPE) weight+=4;
- if (c==Byte.TYPE) weight+=3;
- if (c==Short.TYPE) weight+=2;
- if (c==Integer.TYPE) weight++;
- if (c==Float.TYPE) weight++;
- } else if (args[i] instanceof Boolean) {
- if (c!=Boolean.TYPE) weight+=9999;
- } else if (args[i] instanceof String) {
- if (c== Character.TYPE || ((String)args[i]).length()>0)
- weight+=((String)args[i]).length();
- else
- weight+=64;
- } else {
- weight+=9999;
- }
- } else {
- weight+=9999;
- }
- }
-
- if (weight < best) {
- if (weight == 0) return element;
- best = weight;
- selected = element;
- }
- }
-
- return selected;
- }
-
- //
- // Coerce arguments when possible to conform to the argument list.
- // Java's reflection will automatically do widening conversions,
- // unfortunately PHP only supports wide formats, so to be practical
- // some (possibly lossy) conversions are required.
- //
- private static Object[] coerce(Class parms[], Object args[]) {
- Object result[] = args;
- for (int i=0; i<args.length; i++) {
- if (args[i] instanceof byte[] && !parms[i].isArray()) {
- Class c = parms[i];
- String s = new String((byte[])args[i]);
- result[i] = s;
- try {
- if (c == Boolean.TYPE) result[i]=new Boolean(s);
- if (c == Byte.TYPE) result[i]=new Byte(s);
- if (c == Short.TYPE) result[i]=new Short(s);
- if (c == Integer.TYPE) result[i]=new Integer(s);
- if (c == Float.TYPE) result[i]=new Float(s);
- if (c == Long.TYPE) result[i]=new Long(s);
- if (c == Character.TYPE && s.length()>0)
- result[i]=new Character(s.charAt(0));
- } catch (NumberFormatException n) {
- // oh well, we tried!
- }
- } else if (args[i] instanceof Number && parms[i].isPrimitive()) {
- if (result==args) result=(Object[])result.clone();
- Class c = parms[i];
- Number n = (Number)args[i];
- if (c == Boolean.TYPE) result[i]=new Boolean(0.0!=n.floatValue());
- if (c == Byte.TYPE) result[i]=new Byte(n.byteValue());
- if (c == Short.TYPE) result[i]=new Short(n.shortValue());
- if (c == Integer.TYPE) result[i]=new Integer(n.intValue());
- if (c == Float.TYPE) result[i]=new Float(n.floatValue());
- if (c == Long.TYPE && !(n instanceof Long))
- result[i]=new Long(n.longValue());
- } else if (args[i] instanceof Hashtable && parms[i].isArray()) {
- try {
- Hashtable ht = (Hashtable)args[i];
- int size = ht.size();
-
- // Verify that the keys are Long, and determine maximum
- for (Enumeration e = ht.keys(); e.hasMoreElements(); ) {
- int index = ((Long)e.nextElement()).intValue();
- if (index >= size) size = index+1;
- }
-
- Object tempArray[] = new Object[size];
- Class tempTarget[] = new Class[size];
- Class targetType = parms[i].getComponentType();
-
- // flatten the hash table into an array
- for (int j=0; j<size; j++) {
- tempArray[j] = ht.get(new Long(j));
- if (tempArray[j] == null && targetType.isPrimitive())
- throw new Exception("bail");
- tempTarget[j] = targetType;
- }
-
- // coerce individual elements into the target type
- Object coercedArray[] = coerce(tempTarget, tempArray);
-
- // copy the results into the desired array type
- Object array = Array.newInstance(targetType,size);
- for (int j=0; j<size; j++) {
- Array.set(array, j, coercedArray[j]);
- }
-
- result[i]=array;
- } catch (Exception e) {
- // leave result[i] alone...
- }
- }
- }
- return result;
- }
-
- //
- // Invoke a method on a given object
- //
- public void Invoke
- (Object object, String method, Object args[], long result)
- {
- try {
- Vector matches = new Vector();
-
- // gather
- for (Class jclass = object.getClass();;jclass=(Class)object) {
- while (!Modifier.isPublic(jclass.getModifiers())) {
- // OK, some joker gave us an instance of a non-public class
- // This often occurs in the case of enumerators
- // Substitute the first public interface in its place,
- // and barring that, try the superclass
- Class interfaces[] = jclass.getInterfaces();
- jclass=jclass.getSuperclass();
- for (int i=interfaces.length; i-->0;) {
- if (Modifier.isPublic(interfaces[i].getModifiers())) {
- jclass=interfaces[i];
- }
- }
- }
- Method methods[] = jclass.getMethods();
- for (int i=0; i<methods.length; i++) {
- if (methods[i].getName().equalsIgnoreCase(method) &&
- methods[i].getParameterTypes().length == args.length) {
- matches.addElement(methods[i]);
- }
- }
-
- // try a second time with the object itself, if it is of type Class
- if (!(object instanceof Class) || (jclass==object)) break;
- }
-
- Method selected = (Method)select(matches, args);
- if (selected == null) throw new NoSuchMethodException(method);
-
- Object coercedArgs[] = coerce(selected.getParameterTypes(), args);
- setResult(result, selected.invoke(object, coercedArgs));
-
- } catch (Exception e) {
- setException(result, e);
- }
- }
-
- //
- // Get or Set a property
- //
- public void GetSetProp
- (Object object, String prop, Object args[], long result)
- {
- try {
-
- for (Class jclass = object.getClass();;jclass=(Class)object) {
- while (!Modifier.isPublic(jclass.getModifiers())) {
- // OK, some joker gave us an instance of a non-public class
- // Substitute the first public interface in its place,
- // and barring that, try the superclass
- Class interfaces[] = jclass.getInterfaces();
- jclass=jclass.getSuperclass();
- for (int i=interfaces.length; i-->0;) {
- if (Modifier.isPublic(interfaces[i].getModifiers())) {
- jclass=interfaces[i];
- }
- }
- }
- BeanInfo beanInfo = Introspector.getBeanInfo(jclass);
- PropertyDescriptor props[] = beanInfo.getPropertyDescriptors();
- for (int i=0; i<props.length; i++) {
- if (props[i].getName().equalsIgnoreCase(prop)) {
- Method method;
- if (args!=null && args.length>0) {
- method=props[i].getWriteMethod();
- args = coerce(method.getParameterTypes(), args);
- } else {
- method=props[i].getReadMethod();
- }
- setResult(result, method.invoke(object, args));
- return;
- }
- }
-
- Field jfields[] = jclass.getFields();
- for (int i=0; i<jfields.length; i++) {
- if (jfields[i].getName().equalsIgnoreCase(prop)) {
- if (args!=null && args.length>0) {
- args = coerce(new Class[] {jfields[i].getType()}, args);
- jfields[i].set(object, args[0]);
- } else {
- setResult(result, jfields[i].get(object));
- }
- return;
- }
- }
-
- // try a second time with the object itself, if it is of type Class
- if (!(object instanceof Class) || (jclass==object)) break;
- }
-
- } catch (Exception e) {
- setException(result, e);
- }
- }
-
- //
- // Helper routines for the C implementation
- //
- public Object MakeArg(boolean b) { return new Boolean(b); }
- public Object MakeArg(long l) { return new Long(l); }
- public Object MakeArg(double d) { return new Double(d); }
-}
diff --git a/ext/ldap/CREDITS b/ext/ldap/CREDITS
deleted file mode 100644
index 5dc3d01974..0000000000
--- a/ext/ldap/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-LDAP
-Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas
diff --git a/ext/ldap/LDAP_Win32_HOWTO.txt b/ext/ldap/LDAP_Win32_HOWTO.txt
deleted file mode 100644
index ae085de86b..0000000000
--- a/ext/ldap/LDAP_Win32_HOWTO.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-Rules for building LDAP
------------------------
-
-Note 1: During the entire build process, you can ignore warnings about
- inconsistent DLL linkage.
-
-
-- Open LDAP under php_build. Rename this directory to 'OpenLDAP'.
-- Rename OpenLDAP\include\portable.h.nt to OpenLDAP\include\portable.h
-- Rename OpenLDAP\include\ldapconfig.h.nt to OpenLDAP\include\ldapconfig.h
-- Launch Visual Studio with OpenLDAP\libraries\libldap\libldap.dsw
-- Enter Project->Settings.
- Select the C/C++ tab, and select 'Code Generation' in the Category box.
- For 'Win32 Debug', change the runtime library to 'Debug Multithreaded DLL'
- For 'Win32 Release', change the runtime library to 'Multithreaded DLL'
- Select the Preprocessor tab, select 'All Configurations'.
- Add '..\..\..\..\php4\regex' to the 'Additional include directories' list.
- Add 'HAVE_MKTEMP' to the 'Preprocessor definitions' list.
-- Compile (you can compile both Debug and Release versions).
-
-
-- Launch Visual Studio with OpenLDAP\libraries\liblber\liblber.dsw
-- Enter Project->Settings.
- Select the C/C++ tab, and select 'Code Generation' in the Category box.
- For 'Win32 Debug', change the runtime library to 'Debug Multithreaded DLL'
- For 'Win32 Release', change the runtime library to 'Multithreaded DLL'
- Select the Preprocessor tab, select 'All Configurations'.
- Add 'HAVE_MKTEMP' to the 'Preprocessor definitions' list.
-- Compile (you can compile both Debug and Release versions).
-
-
-Start Visual Studio, load php_modules.dsw, select the LDAP project, and build
-it.
diff --git a/ext/ldap/config.m4 b/ext/ldap/config.m4
deleted file mode 100644
index ab9de937e5..0000000000
--- a/ext/ldap/config.m4
+++ /dev/null
@@ -1,108 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_LDAP_CHECKS, [
- if test -f $1/include/ldap.h; then
- LDAP_DIR=$1
- LDAP_INCDIR=$1/include
- LDAP_LIBDIR=$1/lib
- elif test -f $1/include/umich-ldap/ldap.h; then
- LDAP_DIR=$i
- LDAP_INCDIR=$1/include/umich-ldap
- LDAP_LIBDIR=$1/lib
- elif test -f $1/ldap/public/ldap.h; then
- LDAP_DIR=$i
- LDAP_INCDIR=$1/ldap/public
- LDAP_LIBDIR=$1/lib
- fi
-])
-
-PHP_ARG_WITH(ldap,for LDAP support,
-[ --with-ldap[=DIR] Include LDAP support.])
-
-if test "$PHP_LDAP" != "no"; then
-
- PHP_NEW_EXTENSION(ldap, ldap.c, $ext_shared)
-
- if test "$PHP_LDAP" = "yes"; then
- for i in /usr/local /usr; do
- PHP_LDAP_CHECKS($i)
- done
- else
- PHP_LDAP_CHECKS($PHP_LDAP)
- fi
-
- if test -z "$LDAP_DIR"; then
- AC_MSG_ERROR(Cannot find ldap.h)
- fi
-
- dnl The Linux version of the SDK need -lpthread
- dnl I have tested Solaris, and it doesn't, but others may. Add
- dnl these here if necessary. -RL
- dnl Is this really necessary? -Troels Arvin
-
- if test `uname` = "Linux"; then
- LDAP_PTHREAD=pthread
- else
- LDAP_PTHREAD=
- fi
-
- if test -f $LDAP_LIBDIR/liblber.a -o -f $LDAP_LIBDIR/liblber.so -o -f $LDAP_LIBDIR/liblber.sl; then
- PHP_ADD_LIBRARY_WITH_PATH(lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
-
- elif test -f $LDAP_LIBDIR/libldap.so.3; then
- PHP_ADD_LIBRARY_WITH_PATH(ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
-
- elif test -f $LDAP_LIBDIR/libldapssl41.so -o -f $LDAP_LIBDIR/libldapssl41.sl; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(nspr3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(plc3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(plds3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ldapssl41, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libldapssl30.so -o -f $LDAP_LIBDIR/libldapssl30.sl; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ldapssl30, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libldap30.so -o -f $LDAP_LIBDIR/libldap30.sl; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ldap30, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libumich_ldap.so; then
- PHP_ADD_LIBRARY_WITH_PATH(umich_lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(umich_ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
-
- elif test -f $LDAP_LIBDIR/libclntsh.so; then
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_ORALDAP,1,[ ])
- fi
-
- PHP_ADD_INCLUDE($LDAP_INCDIR)
- PHP_SUBST(LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_LDAP,1,[ ])
-
- dnl Check for 3 arg ldap_set_rebind_proc
- _SAVE_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS -I$LDAP_INCDIR"
- AC_CACHE_CHECK([for 3 arg ldap_set_rebind_proc], ac_cv_3arg_setrebindproc,
- [AC_TRY_COMPILE([#include <ldap.h>], [ldap_set_rebind_proc(0,0,0)],
- ac_cv_3arg_setrebindproc=yes, ac_cv_3arg_setrebindproc=no)])
- if test "$ac_cv_3arg_setrebindproc" = yes; then
- AC_DEFINE(HAVE_3ARG_SETREBINDPROC,1,[Whether 3 arg set_rebind_proc()])
- fi
- CPPFLAGS=$_SAVE_CPPFLAGS
-
- dnl Solaris 2.8 claims to be 2004 API, but doesn't have ldap_parse_reference
- AC_CHECK_FUNCS(ldap_parse_reference)
-fi
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
deleted file mode 100644
index b030c80c9f..0000000000
--- a/ext/ldap/ldap.c
+++ /dev/null
@@ -1,2199 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Amitay Isaacs <amitay@w-o-i.com> |
- | Eric Warnke <ericw@albany.edu> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Gerrit Thomson <334647@swin.edu.au> |
- | Jani Taskinen <sniper@iki.fi> |
- | Stig Venaas <venaas@uninett.no> |
- | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-
-#include "ext/standard/dl.h"
-#include "php_ldap.h"
-
-#ifdef PHP_WIN32
-#include <string.h>
-#if HAVE_NSLDAP
-#include <winsock.h>
-#endif
-#define strdup _strdup
-#undef WINDOWS
-#undef strcasecmp
-#undef strncasecmp
-#define WINSOCK 1
-#define __STDC__ 1
-#endif
-
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-
-typedef struct {
- LDAP *link;
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
- zval *rebindproc;
-#endif
-} ldap_linkdata;
-
-typedef struct {
- LDAPMessage *data;
- int id;
-} ldap_resultentry;
-
-ZEND_DECLARE_MODULE_GLOBALS(ldap)
-
-static unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-static unsigned char arg3to6of6_force_ref[] = { 6, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE };
-
-static int le_link, le_result, le_result_entry, le_ber_entry;
-
-/*
- This is just a small subset of the functionality provided by the LDAP library. All the
- operations are synchronous. Referrals are not handled automatically.
-*/
-/* {{{ ldap_functions[]
- */
-function_entry ldap_functions[] = {
- PHP_FE(ldap_connect, NULL)
- PHP_FALIAS(ldap_close, ldap_unbind, NULL)
- PHP_FE(ldap_bind, NULL)
- PHP_FE(ldap_unbind, NULL)
- PHP_FE(ldap_read, NULL)
- PHP_FE(ldap_list, NULL)
- PHP_FE(ldap_search, NULL)
- PHP_FE(ldap_free_result, NULL)
- PHP_FE(ldap_count_entries, NULL)
- PHP_FE(ldap_first_entry, NULL)
- PHP_FE(ldap_next_entry, NULL)
- PHP_FE(ldap_get_entries, NULL)
- PHP_FE(ldap_first_attribute, third_argument_force_ref)
- PHP_FE(ldap_next_attribute, third_argument_force_ref)
- PHP_FE(ldap_get_attributes, NULL)
- PHP_FE(ldap_get_values, NULL)
- PHP_FE(ldap_get_values_len, NULL)
- PHP_FE(ldap_get_dn, NULL)
- PHP_FE(ldap_explode_dn, NULL)
- PHP_FE(ldap_dn2ufn, NULL)
- PHP_FE(ldap_add, NULL)
- PHP_FE(ldap_delete, NULL)
- PHP_FALIAS(ldap_modify, ldap_mod_replace, NULL)
-
-/* additional functions for attribute based modifications, Gerrit Thomson */
- PHP_FE(ldap_mod_add, NULL)
- PHP_FE(ldap_mod_replace, NULL)
- PHP_FE(ldap_mod_del, NULL)
-/* end gjt mod */
-
- PHP_FE(ldap_errno, NULL)
- PHP_FE(ldap_err2str, NULL)
- PHP_FE(ldap_error, NULL)
- PHP_FE(ldap_compare, NULL)
- PHP_FE(ldap_sort, NULL)
-
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP
- PHP_FE(ldap_get_option, third_argument_force_ref)
- PHP_FE(ldap_set_option, NULL)
- PHP_FE(ldap_parse_result, arg3to6of6_force_ref)
- PHP_FE(ldap_first_reference, NULL)
- PHP_FE(ldap_next_reference, NULL)
- PHP_FE(ldap_parse_reference, third_argument_force_ref)
- PHP_FE(ldap_rename, NULL)
-#endif
-
-#if LDAP_API_VERSION > 2000
- PHP_FE(ldap_start_tls, NULL)
-#endif
-
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
- PHP_FE(ldap_set_rebind_proc, NULL)
-#endif
-
-#ifdef STR_TRANSLATION
- PHP_FE(ldap_t61_to_8859, NULL)
- PHP_FE(ldap_8859_to_t61, NULL)
-#endif
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry ldap_module_entry = {
- STANDARD_MODULE_HEADER,
- "ldap",
- ldap_functions,
- PHP_MINIT(ldap),
- PHP_MSHUTDOWN(ldap),
- NULL,
- NULL,
- PHP_MINFO(ldap),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_LDAP
-ZEND_GET_MODULE(ldap)
-#endif
-
-
-static void _close_ldap_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ldap_linkdata *ld = (ldap_linkdata *)rsrc->ptr;
-
- ldap_unbind_s(ld->link);
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
- if (ld->rebindproc != NULL) {
- zval_dtor(ld->rebindproc);
- FREE_ZVAL(ld->rebindproc);
- }
-#endif
- efree(ld);
- LDAPG(num_links)--;
-}
-
-
-static void _free_ldap_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- LDAPMessage *result = (LDAPMessage *)rsrc->ptr;
- ldap_msgfree(result);
-}
-
-static void _free_ldap_result_entry(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ldap_resultentry *entry = (ldap_resultentry *)rsrc->ptr;
- zend_list_delete(entry->id);
- efree(entry);
-}
-
-/* {{{ PHP_INI_BEGIN
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY_EX("ldap.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_ldap_globals, ldap_globals, display_link_numbers)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_ldap_init_globals
- */
-static void php_ldap_init_globals(zend_ldap_globals *ldap_globals)
-{
- ldap_globals->num_links = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(ldap)
-{
- ZEND_INIT_MODULE_GLOBALS(ldap, php_ldap_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- /* Constants to be used with deref-parameter in php_ldap_do_search() */
- REGISTER_LONG_CONSTANT("LDAP_DEREF_NEVER", LDAP_DEREF_NEVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_DEREF_SEARCHING", LDAP_DEREF_SEARCHING, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_DEREF_FINDING", LDAP_DEREF_FINDING, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_DEREF_ALWAYS", LDAP_DEREF_ALWAYS, CONST_PERSISTENT | CONST_CS);
-
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP
- /* LDAP options */
- REGISTER_LONG_CONSTANT("LDAP_OPT_DEREF", LDAP_OPT_DEREF, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_SIZELIMIT", LDAP_OPT_SIZELIMIT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_TIMELIMIT", LDAP_OPT_TIMELIMIT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_PROTOCOL_VERSION", LDAP_OPT_PROTOCOL_VERSION, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_ERROR_NUMBER", LDAP_OPT_ERROR_NUMBER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_REFERRALS", LDAP_OPT_REFERRALS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_RESTART", LDAP_OPT_RESTART, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_HOST_NAME", LDAP_OPT_HOST_NAME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_ERROR_STRING", LDAP_OPT_ERROR_STRING, CONST_PERSISTENT | CONST_CS);
-#ifdef LDAP_OPT_MATCHED_DN
- REGISTER_LONG_CONSTANT("LDAP_OPT_MATCHED_DN", LDAP_OPT_MATCHED_DN, CONST_PERSISTENT | CONST_CS);
-#endif
- REGISTER_LONG_CONSTANT("LDAP_OPT_SERVER_CONTROLS", LDAP_OPT_SERVER_CONTROLS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_CLIENT_CONTROLS", LDAP_OPT_CLIENT_CONTROLS, CONST_PERSISTENT | CONST_CS);
-#endif
-#ifdef LDAP_OPT_DEBUG_LEVEL
- REGISTER_LONG_CONSTANT("LDAP_OPT_DEBUG_LEVEL", LDAP_OPT_DEBUG_LEVEL, CONST_PERSISTENT | CONST_CS);
-#endif
-
-#ifdef ORALDAP
- REGISTER_LONG_CONSTANT("GSLC_SSL_NO_AUTH", GSLC_SSL_NO_AUTH, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("GSLC_SSL_ONEWAY_AUTH", GSLC_SSL_ONEWAY_AUTH, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("GSLC_SSL_TWOWAY_AUTH", GSLC_SSL_TWOWAY_AUTH, CONST_PERSISTENT | CONST_CS);
-#endif
-
- le_result = zend_register_list_destructors_ex(_free_ldap_result, NULL, "ldap result", module_number);
- le_link = zend_register_list_destructors_ex(_close_ldap_link, NULL, "ldap link", module_number);
- le_result_entry = zend_register_list_destructors_ex(_free_ldap_result_entry, NULL, "ldap result entry", module_number);
- le_ber_entry = zend_register_list_destructors_ex(NULL, NULL, "ldap ber entry", module_number);
-
- Z_TYPE(ldap_module_entry) = type;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(ldap)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(ldap)
-{
- char tmp[32];
-#if HAVE_NSLDAP
- LDAPVersion ver;
- double SDKVersion;
-#endif
-
- php_info_print_table_start();
- php_info_print_table_row(2, "LDAP Support", "enabled" );
- php_info_print_table_row(2, "RCS Version", "$Id$" );
-
- if (LDAPG(max_links) == -1) {
- snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
- } else {
- snprintf(tmp, 31, "%ld/%ld", LDAPG(num_links), LDAPG(max_links));
- }
- tmp[31] = '\0';
- php_info_print_table_row(2, "Total Links", tmp);
-
-#ifdef LDAP_API_VERSION
- snprintf(tmp, 31, "%d", LDAP_API_VERSION);
- tmp[31] = '\0';
- php_info_print_table_row(2, "API Version", tmp);
-#endif
-
-#ifdef LDAP_VENDOR_NAME
- php_info_print_table_row(2, "Vendor Name", LDAP_VENDOR_NAME);
-#endif
-
-#ifdef LDAP_VENDOR_VERSION
- snprintf(tmp, 31, "%d", LDAP_VENDOR_VERSION);
- tmp[31] = '\0';
- php_info_print_table_row(2, "Vendor Version", tmp);
-#endif
-
-#if HAVE_NSLDAP
- SDKVersion = ldap_version( &ver );
- snprintf(tmp, 31, "%f", SDKVersion/100.0 );
- tmp[31] = '\0';
- php_info_print_table_row(2, "SDK Version", tmp );
-
- snprintf(tmp, 31, "%f", ver.protocol_version/100.0 );
- tmp[31] = '\0';
- php_info_print_table_row(2, "Highest LDAP Protocol Supported", tmp );
-
- snprintf(tmp, 31, "%f", ver.SSL_version/100.0 );
- tmp[31] = '\0';
- php_info_print_table_row(2, "SSL Level Supported", tmp );
-
- if ( ver.security_level != LDAP_SECURITY_NONE ) {
- snprintf(tmp, 31, "%d", ver.security_level );
- tmp[31] = '\0';
- } else {
- strcpy(tmp, "SSL not enabled" );
- }
- php_info_print_table_row(2, "Level of Encryption", tmp );
-#endif
-
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto resource ldap_connect([string host [, int port]])
- Connect to an LDAP server */
-PHP_FUNCTION(ldap_connect)
-{
- char *host = NULL;
- int port = 389; /* Default port */
-#ifdef HAVE_ORALDAP
- char *wallet, *walletpasswd;
- int authmode;
- int ssl=0;
-#endif
- ldap_linkdata *ld;
- LDAP *ldap;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- break;
-
- case 1: {
- pval **yyhost;
-
- if (zend_get_parameters_ex(1, &yyhost) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- }
- break;
-
- case 2: {
- pval **yyhost, **yyport;
-
- if (zend_get_parameters_ex(2, &yyhost, &yyport) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- convert_to_long_ex(yyport);
- port = Z_LVAL_PP(yyport);
- }
- break;
-#ifdef HAVE_ORALDAP
-
- case 5: {
- pval **yyhost, **yyport, **yywallet, **yywalletpasswd, **yyauthmode;
-
- if (zend_get_parameters_ex(5, &yyhost, &yyport, &yywallet, &yywalletpasswd, &yyauthmode) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(yyhost);
- convert_to_long_ex(yyport);
- convert_to_string_ex(yywallet);
- convert_to_string_ex(yywalletpasswd);
- convert_to_long_ex(yyauthmode);
- host = Z_STRVAL_PP(yyhost);
- port = Z_LVAL_PP(yyport);
- wallet = Z_STRVAL_PP(yywallet);
- walletpasswd = Z_STRVAL_PP(yywalletpasswd);
- authmode = Z_LVAL_PP(yyauthmode);
- ssl = 1;
- }
- break;
-#endif
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (LDAPG(max_links) != -1 && LDAPG(num_links) >= LDAPG(max_links)) {
- php_error(E_WARNING, "LDAP: Too many open links (%d)", LDAPG(num_links));
- RETURN_FALSE;
- }
-
- ld = ecalloc(1, sizeof(ldap_linkdata));
- if (ld == NULL) {
- RETURN_FALSE;
- }
-
-#ifdef LDAP_API_FEATURE_X_OPENLDAP
- if (host != NULL && strchr(host, '/')) {
- int rc;
-
- rc = ldap_initialize(&ldap, host);
- if (rc != LDAP_SUCCESS) {
- php_error(E_WARNING, "Could not create LDAP session handle (%d): %s\n", rc, ldap_err2string(rc));
- RETURN_FALSE;
- }
- } else {
- ldap = ldap_init(host, port);
- }
-#else
- ldap = ldap_open(host, port);
-#endif
-
- if ( ldap == NULL ) {
- RETURN_FALSE;
- } else {
-#ifdef HAVE_ORALDAP
- if (ssl) {
- if (ldap_init_SSL(&ldap->ld_sb, wallet, walletpasswd, authmode)) {
- php_error(E_WARNING, "LDAP: SSL init failed");
- RETURN_FALSE;
- }
- }
-#endif
- LDAPG(num_links)++;
- ld->link = ldap;
- ZEND_REGISTER_RESOURCE(return_value, ld, le_link);
- }
-
-}
-/* }}} */
-
-/* {{{ _get_lderrno
- */
-static int _get_lderrno(LDAP *ldap)
-{
-#if !HAVE_NSLDAP
-#if LDAP_API_VERSION > 2000
- int lderr;
-
- /* New versions of OpenLDAP do it this way */
- ldap_get_option(ldap, LDAP_OPT_ERROR_NUMBER, &lderr);
- return lderr;
-#else
- return ldap->ld_errno;
-#endif
-#else
- return ldap_get_lderrno(ldap, NULL, NULL);
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool ldap_bind(resource link [, string dn, string password])
- Bind to LDAP directory */
-PHP_FUNCTION(ldap_bind)
-{
- pval **link, **bind_rdn, **bind_pw;
- char *ldap_bind_rdn, *ldap_bind_pw;
- ldap_linkdata *ld;
-
- switch(ZEND_NUM_ARGS()) {
- case 1: /* Anonymous Bind */
- if (zend_get_parameters_ex(1, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ldap_bind_rdn = NULL;
- ldap_bind_pw = NULL;
-
- break;
-
- case 3 :
- if (zend_get_parameters_ex(3, &link, &bind_rdn, &bind_pw) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(bind_rdn);
- convert_to_string_ex(bind_pw);
-
- ldap_bind_rdn = Z_STRVAL_PP(bind_rdn);
- ldap_bind_pw = Z_STRVAL_PP(bind_pw);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- if (ldap_bind_s(ld->link, ldap_bind_rdn, ldap_bind_pw, LDAP_AUTH_SIMPLE) != LDAP_SUCCESS) {
- php_error(E_WARNING, "LDAP: Unable to bind to server: %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool ldap_unbind(resource link)
- Unbind from LDAP directory */
-PHP_FUNCTION(ldap_unbind)
-{
- pval **link;
- ldap_linkdata *ld;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- zend_list_delete(Z_LVAL_PP(link));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_set_opts
- */
-static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref)
-{
- /* sizelimit */
- if (sizelimit > -1) {
-#if ( LDAP_API_VERSION >= 2004 ) || HAVE_NSLDAP
- ldap_set_option(ldap, LDAP_OPT_SIZELIMIT, &sizelimit);
-#else
- ldap->ld_sizelimit = sizelimit;
-#endif
- }
-
- /* timelimit */
- if (timelimit > -1) {
-#if ( LDAP_API_VERSION >= 2004 ) || HAVE_NSLDAP
- ldap_set_option(ldap, LDAP_OPT_TIMELIMIT, &timelimit);
-#else
- ldap->ld_timelimit = timelimit;
-#endif
- }
-
- /* deref */
- if (deref > -1) {
-#if ( LDAP_API_VERSION >= 2004 ) || HAVE_NSLDAP
- ldap_set_option(ldap, LDAP_OPT_DEREF, &deref);
-#else
- ldap->ld_deref = deref;
-#endif
- }
-}
-/* }}} */
-
-/* {{{ php_ldap_do_search
- */
-static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
-{
- pval **link, **base_dn, **filter, **attrs, **attr, **attrsonly, **sizelimit, **timelimit, **deref;
- char *ldap_base_dn = NULL;
- char *ldap_filter = NULL;
- char **ldap_attrs = NULL;
- ldap_linkdata *ld;
- LDAPMessage *ldap_res;
- int ldap_attrsonly = 0;
- int ldap_sizelimit = -1;
- int ldap_timelimit = -1;
- int ldap_deref = -1;
- int num_attribs = 0;
- int i, errno;
- int myargcount = ZEND_NUM_ARGS();
-
- if (myargcount < 3 || myargcount > 8 || zend_get_parameters_ex(myargcount, &link, &base_dn, &filter, &attrs, &attrsonly, &sizelimit, &timelimit, &deref) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Reverse -> fall through */
- switch(myargcount) {
- case 8 :
- convert_to_long_ex(deref);
- ldap_deref = Z_LVAL_PP(deref);
-
- case 7 :
- convert_to_long_ex(timelimit);
- ldap_timelimit = Z_LVAL_PP(timelimit);
-
- case 6 :
- convert_to_long_ex(sizelimit);
- ldap_sizelimit = Z_LVAL_PP(sizelimit);
-
- case 5 :
- convert_to_long_ex(attrsonly);
- ldap_attrsonly = Z_LVAL_PP(attrsonly);
-
- case 4 :
- if (Z_TYPE_PP(attrs) != IS_ARRAY) {
- php_error(E_WARNING, "LDAP: Expected Array as last element");
- RETURN_FALSE;
- }
-
- num_attribs = zend_hash_num_elements(Z_ARRVAL_PP(attrs));
- if ((ldap_attrs = emalloc((num_attribs+1) * sizeof(char *))) == NULL) {
- php_error(E_WARNING, "LDAP: Could not allocate memory");
- RETURN_FALSE;
- }
-
- for(i=0; i<num_attribs; i++) {
- if(zend_hash_index_find(Z_ARRVAL_PP(attrs), i, (void **) &attr) == FAILURE) {
- php_error(E_WARNING, "LDAP: Array initialization wrong");
- efree(ldap_attrs);
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(attr);
- convert_to_string_ex(attr);
- ldap_attrs[i] = Z_STRVAL_PP(attr);
- }
- ldap_attrs[num_attribs] = NULL;
-
- case 3 :
- /* parallel search? */
- if (Z_TYPE_PP(link) != IS_ARRAY) {
- convert_to_string_ex(filter);
- ldap_filter = Z_STRVAL_PP(filter);
- convert_to_string_ex(base_dn);
- ldap_base_dn = Z_STRVAL_PP(base_dn);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* parallel search? */
- if (Z_TYPE_PP(link) == IS_ARRAY) {
- int i, nlinks, nbases, nfilters, *rcs;
- ldap_linkdata **lds;
- zval **entry, *resource;
-
- nlinks = zend_hash_num_elements(Z_ARRVAL_PP(link));
- if (nlinks == 0) {
- php_error(E_WARNING, "LDAP: No links in link array");
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(base_dn) == IS_ARRAY) {
- nbases = zend_hash_num_elements(Z_ARRVAL_PP(base_dn));
- if (nbases != nlinks) {
- php_error(E_WARNING, "LDAP: Base must either be a string, or an array with the same number of elements as the links array");
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(base_dn));
- } else {
- nbases = 0; /* this means string, not array */
- convert_to_string_ex(base_dn);
- ldap_base_dn = Z_STRLEN_PP(base_dn) < 1 ? NULL : Z_STRVAL_PP(base_dn);
- }
-
- if (Z_TYPE_PP(filter) == IS_ARRAY) {
- nfilters = zend_hash_num_elements(Z_ARRVAL_PP(filter));
- if (nfilters != nlinks) {
- php_error(E_WARNING, "LDAP: Filter must either be a string, or an array with the same number of elements as the links array");
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(filter));
- } else {
- nfilters = 0; /* this means string, not array */
- convert_to_string_ex(filter);
- ldap_filter = Z_STRVAL_PP(filter);
- }
-
- lds = emalloc(nlinks * sizeof(ldap_linkdata));
- rcs = emalloc(nlinks * sizeof(*rcs));
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(link));
- for (i=0; i<nlinks; i++) {
- zend_hash_get_current_data(Z_ARRVAL_PP(link), (void **)&entry);
-
- ld = (ldap_linkdata *) zend_fetch_resource(entry TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
- if (ld == NULL) {
- efree(lds);
- efree(rcs);
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
- if (nbases != 0) { /* base_dn an array? */
- zend_hash_get_current_data(Z_ARRVAL_PP(base_dn), (void **)&entry);
- zend_hash_move_forward(Z_ARRVAL_PP(base_dn));
- convert_to_string_ex(entry);
- ldap_base_dn = Z_STRLEN_PP(entry) < 1 ? NULL : Z_STRVAL_PP(entry);
- }
- if (nfilters != 0) { /* filter an array? */
- zend_hash_get_current_data(Z_ARRVAL_PP(filter), (void **)&entry);
- zend_hash_move_forward(Z_ARRVAL_PP(filter));
- convert_to_string_ex(entry);
- ldap_filter = Z_STRVAL_PP(entry);
- }
-
- php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref);
-
- /* Run the actual search */
- rcs[i] = ldap_search(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly);
- lds[i] = ld;
- zend_hash_move_forward(Z_ARRVAL_PP(link));
- }
-
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
-
- if (array_init(return_value) == FAILURE) {
- efree(lds);
- efree(rcs);
- RETURN_FALSE;
- }
-
- /* Collect results from the searches */
- for (i=0; i<nlinks; i++) {
- MAKE_STD_ZVAL(resource);
- if (rcs[i] != -1) {
- rcs[i] = ldap_result(lds[i]->link, LDAP_RES_ANY, 1 /* LDAP_MSG_ALL */, NULL, &ldap_res);
- }
- if (rcs[i] != -1) {
- ZEND_REGISTER_RESOURCE(resource, ldap_res, le_result);
- add_next_index_zval(return_value, resource);
- } else {
- add_next_index_bool(return_value, 0);
- }
- }
- efree(lds);
- efree(rcs);
- return;
- }
-
- /* fix to make null base_dn's work */
- if ( strlen(ldap_base_dn) < 1 ) {
- ldap_base_dn = NULL;
- }
-
- ld = (ldap_linkdata *) zend_fetch_resource(link TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
- if (ld == NULL) {
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
-
- php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref);
-
- /* Run the actual search */
- errno = ldap_search_s(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly, &ldap_res);
-
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
-
- if (errno != LDAP_SUCCESS
- && errno != LDAP_SIZELIMIT_EXCEEDED
-#ifdef LDAP_ADMINLIMIT_EXCEEDED
- && errno != LDAP_ADMINLIMIT_EXCEEDED
-#endif
-#ifdef LDAP_REFERRAL
- && errno != LDAP_REFERRAL
-#endif
- ) {
- php_error(E_WARNING, "LDAP: Unable to perform the search: %s", ldap_err2string(_get_lderrno(ld->link)));
- RETVAL_FALSE;
- } else {
- if (errno == LDAP_SIZELIMIT_EXCEEDED) {
- php_error(E_WARNING, "LDAP: Partial search results returned: Sizelimit exceeded.");
- }
-#ifdef LDAP_ADMINLIMIT_EXCEEDED
- else if (errno == LDAP_ADMINLIMIT_EXCEEDED) {
- php_error(E_WARNING, "LDAP: Partial search results returned: Adminlimit exceeded.");
- }
-#endif
-
- ZEND_REGISTER_RESOURCE(return_value, ldap_res, le_result);
- }
-}
-/* }}} */
-
-/* {{{ proto resource ldap_read(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
- Read an entry */
-PHP_FUNCTION(ldap_read)
-{
- php_ldap_do_search(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_SCOPE_BASE);
-}
-/* }}} */
-
-/* {{{ proto resource ldap_list(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
- Single-level search */
-PHP_FUNCTION(ldap_list)
-{
- php_ldap_do_search(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_SCOPE_ONELEVEL);
-}
-/* }}} */
-
-/* {{{ proto resource ldap_search(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
- Search LDAP tree under base_dn */
-PHP_FUNCTION(ldap_search)
-{
- php_ldap_do_search(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_SCOPE_SUBTREE);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_free_result(resource result)
- Free result memory */
-PHP_FUNCTION(ldap_free_result)
-{
- pval **result;
- LDAPMessage *ldap_result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- zend_list_delete(Z_LVAL_PP(result)); /* Delete list entry and call registered destructor function */
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ldap_count_entries(resource link, resource result)
- Count the number of entries in a search result */
-PHP_FUNCTION(ldap_count_entries)
-{
- pval **link, **result;
- ldap_linkdata *ld;
- LDAPMessage *ldap_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- RETURN_LONG(ldap_count_entries(ld->link, ldap_result));
-}
-/* }}} */
-
-/* {{{ proto resource ldap_first_entry(resource link, resource result)
- Return first result id */
-PHP_FUNCTION(ldap_first_entry)
-{
- pval **link, **result;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- LDAPMessage *ldap_result, *entry;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- if ((entry = ldap_first_entry(ld->link, ldap_result)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry, le_result_entry);
- resultentry->id = Z_LVAL_PP(result);
- zend_list_addref(resultentry->id);
- resultentry->data = entry;
- }
-}
-/* }}} */
-
-/* {{{ proto resource ldap_next_entry(resource link, resource result_entry)
- Get next result entry */
-PHP_FUNCTION(ldap_next_entry)
-{
- pval **link, **result_entry;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry, *resultentry_next;
- LDAPMessage *entry_next;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if ((entry_next = ldap_next_entry(ld->link, resultentry->data)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry_next = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry_next, le_result_entry);
- resultentry_next->id = resultentry->id;
- zend_list_addref(resultentry->id);
- resultentry_next->data = entry_next;
- }
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_entries(resource link, resource result)
- Get all result entries */
-PHP_FUNCTION(ldap_get_entries)
-{
- pval **link, **result;
- LDAPMessage *ldap_result, *ldap_result_entry;
- pval *tmp1, *tmp2;
- ldap_linkdata *ld;
- LDAP *ldap;
- int num_entries, num_attrib, num_values, i;
- BerElement *ber;
- char *attribute;
- size_t attr_len;
- char **ldap_value;
- char *dn;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- ldap = ld->link;
- num_entries = ldap_count_entries(ldap, ldap_result);
-
- array_init(return_value);
- add_assoc_long(return_value, "count", num_entries);
-
- if (num_entries == 0) return;
- num_entries = 0;
-
- ldap_result_entry = ldap_first_entry(ldap, ldap_result);
- if (ldap_result_entry == NULL) RETURN_FALSE;
-
- while(ldap_result_entry != NULL) {
-
- MAKE_STD_ZVAL(tmp1);
- array_init(tmp1);
-
- num_attrib = 0;
- attribute = ldap_first_attribute(ldap, ldap_result_entry, &ber);
-
- while (attribute != NULL) {
- ldap_value = ldap_get_values(ldap, ldap_result_entry, attribute);
- num_values = ldap_count_values(ldap_value);
-
- MAKE_STD_ZVAL(tmp2);
- array_init(tmp2);
- add_assoc_long(tmp2, "count", num_values);
- for(i=0; i < num_values; i++) {
- add_index_string(tmp2, i, ldap_value[i], 1);
- }
- ldap_value_free(ldap_value);
-
- attr_len = strlen(attribute);
- zend_hash_update(Z_ARRVAL_P(tmp1), php_strtolower(attribute, attr_len), attr_len+1, (void *) &tmp2, sizeof(pval *), NULL);
- add_index_string(tmp1, num_attrib, attribute, 1);
-
- num_attrib++;
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- attribute = ldap_next_attribute(ldap, ldap_result_entry, ber);
- }
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- if (ber != NULL)
- ber_free(ber, 0);
-#endif
-
- add_assoc_long(tmp1, "count", num_attrib);
- dn = ldap_get_dn(ldap, ldap_result_entry);
- add_assoc_string(tmp1, "dn", dn, 1);
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(dn);
-#else
- free(dn);
-#endif
-
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_entries, (void *) &tmp1, sizeof(pval *), NULL);
-
- num_entries++;
- ldap_result_entry = ldap_next_entry(ldap, ldap_result_entry);
- }
-
- add_assoc_long(return_value, "count", num_entries);
-
-}
-/* }}} */
-
-/* {{{ proto string ldap_first_attribute(resource link, resource result_entry, int ber)
- Return first attribute */
-PHP_FUNCTION(ldap_first_attribute)
-{
- pval **link, **result_entry, **berp;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- BerElement *ber;
- char *attribute;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &berp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if ((attribute = ldap_first_attribute(ld->link, resultentry->data, &ber)) == NULL) {
- RETURN_FALSE;
- } else {
- ZEND_REGISTER_RESOURCE(*berp, ber, le_ber_entry);
-
- RETVAL_STRING(attribute, 1);
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- }
-}
-/* }}} */
-
-/* {{{ proto string ldap_next_attribute(resource link, resource result_entry, resource ber)
- Get the next attribute in result */
-PHP_FUNCTION(ldap_next_attribute)
-{
- pval **link, **result_entry, **berp;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- BerElement *ber;
- char *attribute;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &berp) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
- ZEND_FETCH_RESOURCE(ber, BerElement *, berp, -1, "ldap ber entry", le_ber_entry);
-
- if ((attribute = ldap_next_attribute(ld->link, resultentry->data, ber)) == NULL) {
- RETURN_FALSE;
- } else {
- ZEND_REGISTER_RESOURCE(*berp, ber, le_ber_entry);
-
- RETVAL_STRING(attribute, 1);
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- }
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_attributes(resource link, resource result_entry)
- Get attributes from a search result entry */
-PHP_FUNCTION(ldap_get_attributes)
-{
- pval **link, **result_entry;
- pval *tmp;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *attribute;
- char **ldap_value;
- int i, num_values, num_attrib;
- BerElement *ber;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- array_init(return_value);
- num_attrib = 0;
-
- attribute = ldap_first_attribute(ld->link, resultentry->data, &ber);
- while (attribute != NULL) {
- ldap_value = ldap_get_values(ld->link, resultentry->data, attribute);
- num_values = ldap_count_values(ldap_value);
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- add_assoc_long(tmp, "count", num_values);
- for(i=0; i<num_values; i++) {
- add_index_string(tmp, i, ldap_value[i], 1);
- }
- ldap_value_free(ldap_value);
-
- zend_hash_update(Z_ARRVAL_P(return_value), attribute, strlen(attribute)+1, (void *) &tmp, sizeof(pval *), NULL);
- add_index_string(return_value, num_attrib, attribute, 1);
-
- num_attrib++;
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- attribute = ldap_next_attribute(ld->link, resultentry->data, ber);
- }
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- if (ber != NULL)
- ber_free(ber, 0);
-#endif
-
- add_assoc_long(return_value, "count", num_attrib);
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_values(resource link, resource result_entry, string attribute)
- Get all values from a result entry */
-PHP_FUNCTION(ldap_get_values)
-{
- pval **link, **result_entry, **attr;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *attribute;
- char **ldap_value;
- int i, num_values;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &attr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- convert_to_string_ex(attr);
- attribute = Z_STRVAL_PP(attr);
-
- if ((ldap_value = ldap_get_values(ld->link, resultentry->data, attribute)) == NULL) {
- php_error(E_WARNING, "LDAP: Cannot get the value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- }
-
- num_values = ldap_count_values(ldap_value);
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- for(i=0; i<num_values; i++) {
- add_next_index_string(return_value, ldap_value[i], 1);
- }
-
- add_assoc_long(return_value, "count", num_values);
- ldap_value_free(ldap_value);
-
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_values_len(resource link, resource result_entry, string attribute)
- Get all values with lengths from a result entry */
-PHP_FUNCTION(ldap_get_values_len)
-{
- pval **link, **result_entry, **attr;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char* attribute;
- struct berval **ldap_value_len;
- int i, num_values;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &attr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- convert_to_string_ex(attr);
- attribute = Z_STRVAL_PP(attr);
-
- if ((ldap_value_len = ldap_get_values_len(ld->link, resultentry->data, attribute)) == NULL) {
- php_error(E_WARNING, "LDAP: Cannot get the value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- }
-
- num_values = ldap_count_values_len(ldap_value_len);
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Cannot initialize return value");
- RETURN_FALSE;
- }
-
- for (i=0; i<num_values; i++) {
- add_next_index_stringl(return_value, ldap_value_len[i]->bv_val, ldap_value_len[i]->bv_len, 1);
- }
-
- add_assoc_long(return_value, "count", num_values);
- ldap_value_free_len(ldap_value_len);
-
-}
-/* }}} */
-
-/* {{{ proto string ldap_get_dn(resource link, resource result_entry)
- Get the DN of a result entry */
-PHP_FUNCTION(ldap_get_dn)
-{
- pval **link, **result_entry;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *text;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- text = ldap_get_dn(ld->link, resultentry->data);
- if ( text != NULL ) {
- RETVAL_STRING(text, 1);
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(text);
-#else
- free(text);
-#endif
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array ldap_explode_dn(string dn, int with_attrib)
- Splits DN into its component parts */
-PHP_FUNCTION(ldap_explode_dn)
-{
- pval **dn, **with_attrib;
- char **ldap_value;
- int i, count;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dn, &with_attrib) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(dn);
- convert_to_long_ex(with_attrib);
-
- ldap_value = ldap_explode_dn(Z_STRVAL_PP(dn), Z_LVAL_PP(with_attrib));
-
- i=0;
- while(ldap_value[i] != NULL) i++;
- count = i;
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "count", count);
- for(i=0; i<count; i++) {
- add_index_string(return_value, i, ldap_value[i], 1);
- }
-
- ldap_value_free(ldap_value);
-}
-/* }}} */
-
-/* {{{ proto string ldap_dn2ufn(string dn)
- Convert DN to User Friendly Naming format */
-PHP_FUNCTION(ldap_dn2ufn)
-{
- pval **dn;
- char *ufn;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &dn)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(dn);
-
- ufn = ldap_dn2ufn(Z_STRVAL_PP(dn));
-
- if (ufn !=NULL) {
- RETVAL_STRING(ufn, 1);
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(ufn);
-#endif
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* added to fix use of ldap_modify_add for doing an ldap_add, gerrit thomson. */
-#define PHP_LD_FULL_ADD 0xff
-/* {{{ php_ldap_do_modify
- */
-static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper)
-{
- pval **link, **dn, **entry, **value, **ivalue;
- ldap_linkdata *ld;
- char *ldap_dn;
- LDAPMod **ldap_mods;
- int i, j, num_attribs, num_values;
- int *num_berval;
- char *attribute;
- ulong index;
- int is_full_add=0; /* flag for full add operation so ldap_mod_add can be put back into oper, gerrit THomson */
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &dn, &entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(entry) != IS_ARRAY) {
- php_error(E_WARNING, "LDAP: Expected Array as the last element");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- ldap_dn = Z_STRVAL_PP(dn);
-
- num_attribs = zend_hash_num_elements(Z_ARRVAL_PP(entry));
- ldap_mods = emalloc((num_attribs+1) * sizeof(LDAPMod *));
- num_berval = emalloc(num_attribs * sizeof(int));
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(entry));
-
- /* added by gerrit thomson to fix ldap_add using ldap_mod_add */
- if ( oper == PHP_LD_FULL_ADD ) {
- oper = LDAP_MOD_ADD;
- is_full_add = 1;
- }
- /* end additional , gerrit thomson */
-
- for(i=0; i<num_attribs; i++) {
- ldap_mods[i] = emalloc(sizeof(LDAPMod));
- ldap_mods[i]->mod_op = oper | LDAP_MOD_BVALUES;
-
- if (zend_hash_get_current_key(Z_ARRVAL_PP(entry), &attribute, &index, 0) == HASH_KEY_IS_STRING) {
- ldap_mods[i]->mod_type = estrdup(attribute);
- } else {
- php_error(E_ERROR, "LDAP: Unknown Attribute in the data");
- /* Free allocated memory */
- while (i >= 0) {
- efree(ldap_mods[i--]);
- }
- efree(num_berval);
- efree(ldap_mods);
- RETURN_FALSE;
- }
-
- zend_hash_get_current_data(Z_ARRVAL_PP(entry), (void **)&value);
-
- if (Z_TYPE_PP(value) != IS_ARRAY) {
- num_values = 1;
- } else {
- num_values = zend_hash_num_elements(Z_ARRVAL_PP(value));
- }
-
- num_berval[i] = num_values;
- ldap_mods[i]->mod_bvalues = emalloc((num_values + 1) * sizeof(struct berval *));
-
-/* allow for arrays with one element, no allowance for arrays with none but probably not required, gerrit thomson. */
- if ((num_values == 1) && (Z_TYPE_PP(value) != IS_ARRAY)) {
- convert_to_string_ex(value);
- ldap_mods[i]->mod_bvalues[0] = (struct berval *) emalloc (sizeof(struct berval));
- ldap_mods[i]->mod_bvalues[0]->bv_len = Z_STRLEN_PP(value);
- ldap_mods[i]->mod_bvalues[0]->bv_val = Z_STRVAL_PP(value);
- } else {
- for(j=0; j < num_values; j++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(value), j, (void **) &ivalue) == FAILURE) {
- php_error(E_WARNING, "LDAP: Value array must have consecutive indices 0, 1, ...");
- num_berval[i] = j;
- num_attribs = i + 1;
- RETVAL_FALSE;
- goto errexit;
- }
- convert_to_string_ex(ivalue);
- ldap_mods[i]->mod_bvalues[j] = (struct berval *) emalloc (sizeof(struct berval));
- ldap_mods[i]->mod_bvalues[j]->bv_len = Z_STRLEN_PP(ivalue);
- ldap_mods[i]->mod_bvalues[j]->bv_val = Z_STRVAL_PP(ivalue);
- }
- }
- ldap_mods[i]->mod_bvalues[num_values] = NULL;
- zend_hash_move_forward(Z_ARRVAL_PP(entry));
- }
- ldap_mods[num_attribs] = NULL;
-
-/* check flag to see if do_mod was called to perform full add , gerrit thomson */
- if (is_full_add == 1) {
- if (ldap_add_s(ld->link, ldap_dn, ldap_mods) != LDAP_SUCCESS) {
- ldap_perror(ld->link, "LDAP");
- php_error(E_WARNING, "LDAP: add operation could not be completed.");
- RETVAL_FALSE;
- } else RETVAL_TRUE;
- } else {
- if (ldap_modify_s(ld->link, ldap_dn, ldap_mods) != LDAP_SUCCESS) {
- php_error(E_WARNING, "LDAP: modify operation could not be completed.");
- RETVAL_FALSE;
- } else RETVAL_TRUE;
- }
-
-errexit:
- for(i=0; i < num_attribs; i++) {
- efree(ldap_mods[i]->mod_type);
- for(j=0; j<num_berval[i]; j++) {
- efree(ldap_mods[i]->mod_bvalues[j]);
- }
- efree(ldap_mods[i]->mod_bvalues);
- efree(ldap_mods[i]);
- }
- efree(num_berval);
- efree(ldap_mods);
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_add(resource link, string dn, array entry)
- Add entries to LDAP directory */
-PHP_FUNCTION(ldap_add)
-{
- /* use a newly define parameter into the do_modify so ldap_mod_add can be used the way it is supposed to be used , Gerrit THomson */
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_LD_FULL_ADD);
-}
-/* }}} */
-
-/* three functions for attribute base modifications, gerrit Thomson */
-
-/* {{{ proto bool ldap_mod_replace(resource link, string dn, array entry)
- Replace attribute values with new ones */
-PHP_FUNCTION(ldap_mod_replace)
-{
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_MOD_REPLACE);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_mod_add(resource link, string dn, array entry)
- Add attribute values to current */
-PHP_FUNCTION(ldap_mod_add)
-{
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_MOD_ADD);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_mod_del(resource link, string dn, array entry)
- Delete attribute values */
-PHP_FUNCTION(ldap_mod_del)
-{
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_MOD_DELETE);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_delete(resource link, string dn)
- Delete an entry from a directory */
-PHP_FUNCTION(ldap_delete)
-{
- pval **link, **dn;
- ldap_linkdata *ld;
- char *ldap_dn;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &dn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- ldap_dn = Z_STRVAL_PP(dn);
-
- if (ldap_delete_s(ld->link, ldap_dn) != LDAP_SUCCESS) {
- ldap_perror(ld->link, "LDAP");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ldap_errno(resource link)
- Get the current ldap error number */
-PHP_FUNCTION(ldap_errno)
-{
- pval **link;
- ldap_linkdata *ld;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ht, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- RETURN_LONG( _get_lderrno(ld->link) );
-}
-/* }}} */
-
-/* {{{ proto string ldap_err2str(int errno)
- Convert error number to error string */
-PHP_FUNCTION(ldap_err2str)
-{
- zval **perrno;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ht, &perrno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(perrno);
- RETURN_STRING(ldap_err2string(Z_LVAL_PP(perrno)), 1);
-}
-/* }}} */
-
-/* {{{ proto string ldap_error(resource link)
- Get the current ldap error string */
-PHP_FUNCTION(ldap_error)
-{
- pval **link;
- ldap_linkdata *ld;
- int ld_errno;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ht, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- ld_errno = _get_lderrno(ld->link);
-
- RETURN_STRING(ldap_err2string(ld_errno), 1);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_compare(resource link, string dn, string attr, string value)
- Determine if an entry has a specific value for one of its attributes */
-PHP_FUNCTION(ldap_compare)
-{
- pval **link, **dn, **attr, **value;
- char *ldap_dn, *ldap_attr, *ldap_value;
- ldap_linkdata *ld;
- int errno;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &link, &dn, &attr, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- convert_to_string_ex(attr);
- convert_to_string_ex(value);
-
- ldap_dn = Z_STRVAL_PP(dn);
- ldap_attr = Z_STRVAL_PP(attr);
- ldap_value = Z_STRVAL_PP(value);
-
- errno = ldap_compare_s(ld->link, ldap_dn, ldap_attr, ldap_value);
-
- switch(errno) {
- case LDAP_COMPARE_TRUE :
- RETURN_TRUE;
- break;
-
- case LDAP_COMPARE_FALSE :
- RETURN_FALSE;
- break;
- }
-
- php_error(E_WARNING, "LDAP: Compare operation could not be completed: %s", ldap_err2string(errno));
- RETURN_LONG(-1);
-
-}
-/* }}} */
-
-/* {{{ proto bool ldap_sort(resource link, resource result, string sortfilter)
- Sort LDAP result entries */
-PHP_FUNCTION(ldap_sort)
-{
- zval *link, *result;
- ldap_linkdata *ld;
- char *sortfilter;
- int sflen;
- zend_rsrc_list_entry *le;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrs", &link, &result, &sortfilter, &sflen) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- if (zend_hash_index_find(&EG(regular_list), Z_LVAL_P(result), (void **) &le) == FAILURE || le->type != le_result) {
- php_error(E_WARNING, "Supplied resource is not a valid ldap result resource");
- RETURN_FALSE;
- }
-
- if (ldap_sort_entries(ld->link, (LDAPMessage **) &le->ptr, sflen ? sortfilter : NULL, strcmp) != LDAP_SUCCESS) {
- php_error(E_WARNING, "LDAP sort failed: %s", ldap_err2string(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP
-/* {{{ proto bool ldap_get_option(resource link, int option, mixed retval)
- Get the current value of various session-wide parameters */
-PHP_FUNCTION(ldap_get_option)
-{
- pval **link, **option, **retval;
- ldap_linkdata *ld;
- int opt;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &link, &option, &retval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_long_ex(option);
- opt = Z_LVAL_PP(option);
-
- switch(opt) {
- /* options with int value */
- case LDAP_OPT_DEREF:
- case LDAP_OPT_SIZELIMIT:
- case LDAP_OPT_TIMELIMIT:
- case LDAP_OPT_PROTOCOL_VERSION:
- case LDAP_OPT_ERROR_NUMBER:
- case LDAP_OPT_REFERRALS:
- case LDAP_OPT_RESTART:
- {
- int val;
- if (ldap_get_option(ld->link, opt, &val)) {
- RETURN_FALSE;
- }
- zval_dtor(*retval);
- ZVAL_LONG(*retval, val);
- } break;
- /* options with string value */
- case LDAP_OPT_HOST_NAME:
- case LDAP_OPT_ERROR_STRING:
-#ifdef LDAP_OPT_MATCHED_DN
- case LDAP_OPT_MATCHED_DN:
-#endif
- {
- char *val;
- if (ldap_get_option(ld->link, opt, &val)) {
- RETURN_FALSE;
- }
- zval_dtor(*retval);
- ZVAL_STRING(*retval, val, 1);
- ldap_memfree(val);
- } break;
-/* options not implemented
- case LDAP_OPT_SERVER_CONTROLS:
- case LDAP_OPT_CLIENT_CONTROLS:
- case LDAP_OPT_API_INFO:
- case LDAP_OPT_API_FEATURE_INFO:
-*/
- default:
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_set_option(resource link, int option, mixed newval)
- Set the value of various session-wide parameters */
-PHP_FUNCTION(ldap_set_option)
-{
- pval **link, **option, **newval;
- ldap_linkdata *ld;
- LDAP *ldap;
- int opt;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &link, &option, &newval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(link) == IS_NULL) {
- ldap = NULL;
- } else {
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ldap = ld->link;
- }
-
- convert_to_long_ex(option);
- opt = Z_LVAL_PP(option);
-
- switch(opt) {
- /* options with int value */
- case LDAP_OPT_DEREF:
- case LDAP_OPT_SIZELIMIT:
- case LDAP_OPT_TIMELIMIT:
- case LDAP_OPT_PROTOCOL_VERSION:
- case LDAP_OPT_ERROR_NUMBER:
-#ifdef LDAP_OPT_DEBUG_LEVEL
- case LDAP_OPT_DEBUG_LEVEL:
-#endif
- {
- int val;
- convert_to_long_ex(newval);
- val = Z_LVAL_PP(newval);
- if (ldap_set_option(ldap, opt, &val)) {
- RETURN_FALSE;
- }
- } break;
- /* options with string value */
- case LDAP_OPT_HOST_NAME:
- case LDAP_OPT_ERROR_STRING:
-#ifdef LDAP_OPT_MATCHED_DN
- case LDAP_OPT_MATCHED_DN:
-#endif
- {
- char *val;
- convert_to_string_ex(newval);
- val = Z_STRVAL_PP(newval);
- if (ldap_set_option(ldap, opt, val)) {
- RETURN_FALSE;
- }
- } break;
- /* options with boolean value */
- case LDAP_OPT_REFERRALS:
- case LDAP_OPT_RESTART:
- {
- void *val;
- convert_to_boolean_ex(newval);
- val = Z_LVAL_PP(newval)
- ? LDAP_OPT_ON : LDAP_OPT_OFF;
- if (ldap_set_option(ldap, opt, val)) {
- RETURN_FALSE;
- }
- } break;
- /* options with control list value */
- case LDAP_OPT_SERVER_CONTROLS:
- case LDAP_OPT_CLIENT_CONTROLS:
- {
- LDAPControl *ctrl, **ctrls, **ctrlp;
- zval **ctrlval, **val;
- int ncontrols;
- char error=0;
-
- if ((Z_TYPE_PP(newval) != IS_ARRAY) || !(ncontrols = zend_hash_num_elements(Z_ARRVAL_PP(newval)))) {
- php_error(E_WARNING, "Expected non-empty array value for this option");
- RETURN_FALSE;
- }
- ctrls = emalloc((1 + ncontrols) * sizeof(*ctrls));
- *ctrls = NULL;
- ctrlp = ctrls;
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(newval));
- while (zend_hash_get_current_data(Z_ARRVAL_PP(newval), (void**)&ctrlval) == SUCCESS) {
- if (Z_TYPE_PP(ctrlval) != IS_ARRAY) {
- php_error(E_WARNING, "The array value must contain only arrays, where each array is a control");
- error = 1;
- break;
- }
- if (zend_hash_find(Z_ARRVAL_PP(ctrlval), "oid", sizeof("oid"), (void **) &val) == FAILURE) {
- php_error(E_WARNING, "Control must have an oid key");
- error = 1;
- break;
- }
- ctrl = *ctrlp = emalloc(sizeof(**ctrlp));
- convert_to_string_ex(val);
- ctrl->ldctl_oid = Z_STRVAL_PP(val);
- if (zend_hash_find(Z_ARRVAL_PP(ctrlval), "value", sizeof("value"), (void **) &val) == SUCCESS) {
- convert_to_string_ex(val);
- ctrl->ldctl_value.bv_val = Z_STRVAL_PP(val);
- ctrl->ldctl_value.bv_len = Z_STRLEN_PP(val);
- } else {
- ctrl->ldctl_value.bv_val = NULL;
- ctrl->ldctl_value.bv_len = 0;
- }
- if (zend_hash_find(Z_ARRVAL_PP(ctrlval), "iscritical", sizeof("iscritical"), (void **) &val) == SUCCESS) {
- convert_to_boolean_ex(val);
- ctrl->ldctl_iscritical = Z_BVAL_PP(val);
- } else {
- ctrl->ldctl_iscritical = 0;
- }
-
- ++ctrlp;
- *ctrlp = NULL;
- zend_hash_move_forward(Z_ARRVAL_PP(newval));
- }
- if (!error) {
- error = ldap_set_option(ldap, opt, ctrls);
- }
- ctrlp = ctrls;
- while ( *ctrlp ) {
- efree(*ctrlp);
- ctrlp++;
- }
- efree(ctrls);
- if (error) {
- RETURN_FALSE;
- }
- } break;
- default:
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)
- Extract information from result */
-PHP_FUNCTION(ldap_parse_result)
-{
- pval **link, **result, **errcode, **matcheddn, **errmsg, **referrals;
- ldap_linkdata *ld;
- LDAPMessage *ldap_result;
- char **lreferrals, **refp;
- char *lmatcheddn, *lerrmsg;
- int rc, lerrcode, myargcount = ZEND_NUM_ARGS();
-
- if (myargcount < 3 || myargcount > 6 || zend_get_parameters_ex(myargcount, &link, &result, &errcode, &matcheddn, &errmsg, &referrals) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- rc = ldap_parse_result( ld->link, ldap_result, &lerrcode,
- myargcount > 3 ? &lmatcheddn : NULL,
- myargcount > 4 ? &lerrmsg : NULL,
- myargcount > 5 ? &lreferrals : NULL,
- NULL /* &serverctrls */,
- 0 );
- if (rc != LDAP_SUCCESS ) {
- php_error(E_WARNING, "LDAP: Unable to parse result: %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- }
-
- zval_dtor(*errcode);
- ZVAL_LONG(*errcode, lerrcode);
-
- /* Reverse -> fall through */
- switch(myargcount) {
- case 6 :
- zval_dtor(*referrals);
- if (array_init(*referrals) == FAILURE) {
- php_error(E_ERROR, "Cannot initialize return value");
- ldap_value_free(lreferrals);
- ldap_memfree(lerrmsg);
- ldap_memfree(lmatcheddn);
- RETURN_FALSE;
- }
- if (lreferrals != NULL) {
- refp = lreferrals;
- while (*refp) {
- add_next_index_string(*referrals, *refp, 1);
- refp++;
- }
- ldap_value_free(lreferrals);
- }
- case 5 :
- zval_dtor(*errmsg);
- if (lerrmsg == NULL) {
- ZVAL_EMPTY_STRING(*errmsg);
- } else {
- ZVAL_STRING(*errmsg, lerrmsg, 1);
- ldap_memfree(lerrmsg);
- }
- case 4 :
- zval_dtor(*matcheddn);
- if (lmatcheddn == NULL) {
- ZVAL_EMPTY_STRING(*matcheddn);
- } else {
- ZVAL_STRING(*matcheddn, lmatcheddn, 1);
- ldap_memfree(lmatcheddn);
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource ldap_first_reference(resource link, resource result)
- Return first reference */
-PHP_FUNCTION(ldap_first_reference)
-{
- pval **link, **result;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- LDAPMessage *ldap_result, *entry;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- if ((entry = ldap_first_reference(ld->link, ldap_result)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry, le_result_entry);
- resultentry->id = Z_LVAL_PP(result);
- zend_list_addref(resultentry->id);
- resultentry->data = entry;
- }
-}
-/* }}} */
-
-/* {{{ proto resource ldap_next_reference(resource link, resource reference_entry)
- Get next reference */
-PHP_FUNCTION(ldap_next_reference)
-{
- pval **link, **result_entry;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry, *resultentry_next;
- LDAPMessage *entry_next;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if ((entry_next = ldap_next_reference(ld->link, resultentry->data)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry_next = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry_next, le_result_entry);
- resultentry_next->id = resultentry->id;
- zend_list_addref(resultentry->id);
- resultentry_next->data = entry_next;
- }
-}
-/* }}} */
-
-/* {{{ proto bool ldap_parse_reference(resource link, resource reference_entry, array referrals)
- Extract information from reference entry */
-PHP_FUNCTION(ldap_parse_reference)
-{
-#ifdef HAVE_LDAP_PARSE_REFERENCE
- pval **link, **result_entry, **referrals;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char **lreferrals, **refp;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &referrals) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if (ldap_parse_reference(ld->link, resultentry->data, &lreferrals, NULL /* &serverctrls */, 0) != LDAP_SUCCESS) {
- RETURN_FALSE;
- }
-
- zval_dtor(*referrals);
- if (array_init(*referrals) == FAILURE) {
- php_error(E_ERROR, "Cannot initialize return value");
- ldap_value_free(lreferrals);
- RETURN_FALSE;
- }
- if (lreferrals != NULL) {
- refp = lreferrals;
- while (*refp) {
- add_next_index_string(*referrals, *refp, 1);
- refp++;
- }
- ldap_value_free(lreferrals);
- }
- RETURN_TRUE;
-#else
- php_error(E_ERROR, "ldap_parse_reference not available in this LDAP lib");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool ldap_rename(resource link, string dn, string newrdn, string newparent, boolean deleteoldrdn);
- Modify the name of an entry */
-PHP_FUNCTION(ldap_rename)
-{
- pval **link, **dn, **newrdn, **newparent, **deleteoldrdn;
- ldap_linkdata *ld;
- int rc;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &link, &dn, &newrdn, &newparent, &deleteoldrdn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- convert_to_string_ex(newrdn);
- convert_to_string_ex(newparent);
- convert_to_boolean_ex(deleteoldrdn);
-
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP
- rc = ldap_rename_s(ld->link, Z_STRVAL_PP(dn), Z_STRVAL_PP(newrdn), Z_STRVAL_PP(newparent), Z_BVAL_PP(deleteoldrdn), NULL, NULL);
-#else
- if (Z_STRLEN_PP(newparent) != 0) {
- php_error(E_WARNING, "You are using old LDAP API, newparent must be the empty string, can only modify RDN");
- RETURN_FALSE;
- }
-/* could support old APIs but need check for ldap_modrdn2()/ldap_modrdn() */
- rc = ldap_modrdn2_s(ld->link, Z_STRVAL_PP(dn), Z_STRVAL_PP(newrdn), Z_BVAL_PP(deleteoldrdn));
-#endif
-
- if (rc == LDAP_SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-#endif
-
-#if LDAP_API_VERSION > 2000
-/* {{{ proto bool ldap_start_tls(resource link)
- Start TLS */
-PHP_FUNCTION(ldap_start_tls)
-{
- pval **link;
- ldap_linkdata *ld;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- if (ldap_start_tls_s(ld->link, NULL, NULL) != LDAP_SUCCESS) {
- php_error(E_WARNING,"LDAP: Unable to start TLS: %s",
- ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-#endif
-
-
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
-int _ldap_rebind_proc(LDAP *ldap, const char *url, ber_tag_t req, ber_int_t msgid, void *params) {
- ldap_linkdata *ld;
- int retval;
- zval *cb_url;
- zval **cb_args[2];
- zval *cb_retval;
- zval *cb_link = (zval *) params;
-
- ld = (ldap_linkdata *) zend_fetch_resource(&cb_link TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
-
- /* link exists and callback set? */
- if (ld == NULL || ld->rebindproc == NULL) {
- php_error(E_WARNING, "%s(): Link not found or no callback set", get_active_function_name(TSRMLS_C));
- return LDAP_OTHER;
- }
-
- /* callback */
- MAKE_STD_ZVAL(cb_url);
- ZVAL_STRING(cb_url, estrdup(url), 0);
- cb_args[0] = &cb_link;
- cb_args[1] = &cb_url;
- if (call_user_function_ex(EG(function_table), NULL, ld->rebindproc, &cb_retval, 2, cb_args, 0, NULL TSRMLS_CC) == SUCCESS && cb_retval) {
- convert_to_long_ex(&cb_retval);
- retval = Z_LVAL_P(cb_retval);
- zval_ptr_dtor(&cb_retval);
- } else {
- php_error(E_WARNING, "LDAP: rebind_proc php callback failed");
- retval = LDAP_OTHER;
- }
- zval_dtor(cb_url);
- FREE_ZVAL(cb_url);
- return retval;
-}
-
-
-/* {{{ proto bool ldap_set_rebind_proc(resource link, string callback)
- Set a callback function to do re-binds on referral chasing. */
-PHP_FUNCTION(ldap_set_rebind_proc)
-{
- zval *link, *callback;
- ldap_linkdata *ld;
- char *callback_name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &link, &callback) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- if (Z_TYPE_P(callback) == IS_STRING && Z_STRLEN_P(callback) == 0) {
- /* unregister rebind procedure */
- if (ld->rebindproc != NULL) {
- zval_dtor(ld->rebindproc);
- ld->rebindproc = NULL;
- ldap_set_rebind_proc(ld->link, NULL, NULL);
- }
- RETURN_TRUE;
- }
-
- /* callable? */
- if (!zend_is_callable(callback, 0, &callback_name)) {
- php_error(E_WARNING, "%s() expects argument 2, '%s', to be a valid callback", get_active_function_name(TSRMLS_C), callback_name);
- efree(callback_name);
- RETURN_FALSE;
- }
- efree(callback_name);
-
- /* register rebind procedure */
- if (ld->rebindproc == NULL) {
- ldap_set_rebind_proc(ld->link, _ldap_rebind_proc, (void *) link);
- } else {
- zval_dtor(ld->rebindproc);
- }
-
- ALLOC_ZVAL(ld->rebindproc);
- *ld->rebindproc = *callback;
- zval_copy_ctor(ld->rebindproc);
- RETURN_TRUE;
-}
-#endif
-
-
-#ifdef STR_TRANSLATION
-/* {{{ php_ldap_do_translate
- */
-static void php_ldap_do_translate(INTERNAL_FUNCTION_PARAMETERS, int way)
-{
- zval **value;
- char *ldap_buf;
- unsigned long ldap_len;
- int result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(value);
- ldap_buf = Z_STRVAL_PP(value);
- ldap_len = Z_STRLEN_PP(value);
-
- if(ldap_len == 0) {
- RETURN_FALSE;
- }
-
- if(way == 1) {
- result = ldap_8859_to_t61(&ldap_buf, &ldap_len, 0);
- } else {
- result = ldap_t61_to_8859(&ldap_buf, &ldap_len, 0);
- }
-
- if (result == LDAP_SUCCESS) {
- RETVAL_STRINGL(ldap_buf, ldap_len, 1);
- free(ldap_buf);
- } else {
- php_error(E_ERROR, "LDAP: Conversion from iso-8859-1 to t61 failed.");
- RETVAL_FALSE;
- }
-
- return;
-}
-/* }}} */
-
-/* {{{ proto string ldap_t61_to_8859(string value)
- Translate t61 characters to 8859 characters */
-PHP_FUNCTION(ldap_t61_to_8859)
-{
- php_ldap_do_translate(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string ldap_8859_to_t61(string value)
- Translate 8859 characters to t61 characters */
-PHP_FUNCTION(ldap_8859_to_t61)
-{
- php_ldap_do_translate(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ldap/ldap.dsp b/ext/ldap/ldap.dsp
deleted file mode 100644
index 94bd7c4fa9..0000000000
--- a/ext/ldap/ldap.dsp
+++ /dev/null
@@ -1,230 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ldap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ldap - Win32 Debug_TS SASL
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ldap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ldap.mak" CFG="ldap - Win32 Debug_TS SASL"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ldap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Release_TS SASL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug_TS SASL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ldap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "COMPILE_DL_LDAP_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D "COMPILE_DL_LDAP" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4nts.lib /nologo /dll /machine:I386 /out:"Release/php_ldap.dll" /libpath:"..\..\Release" /libpath:"..\..\..\php_build\openldap\libraries\Release"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "COMPILE_DL_LDAP_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D "COMPILE_DL_LDAP" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 oldap32.lib olber32.lib php4nts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\openldap\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D ZEND_DEBUG=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib php4nts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\openldap\libraries\Debug" /libpath:"..\..\Debug"
-# ADD LINK32 oldap32.lib olber32.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\openldap\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D ZEND_DEBUG=0 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Release_TS SASL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "ldap___Win32_Release_TS_SASL"
-# PROP BASE Intermediate_Dir "ldap___Win32_Release_TS_SASL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_SASL"
-# PROP Intermediate_Dir "Release_TS_SASL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 oldap32.lib olber32.lib libsasl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug_TS SASL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "ldap___Win32_Debug_TS_SASL"
-# PROP BASE Intermediate_Dir "ldap___Win32_Debug_TS_SASL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS_SASL"
-# PROP Intermediate_Dir "Debug_TS_SASL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-# ADD LINK32 oldap32.lib olber32.lib libsasl.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ldap - Win32 Release"
-# Name "ldap - Win32 Debug"
-# Name "ldap - Win32 Debug_TS"
-# Name "ldap - Win32 Release_TS"
-# Name "ldap - Win32 Release_TS SASL"
-# Name "ldap - Win32 Debug_TS SASL"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ldap.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_ldap.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\LDAP_Win32_HOWTO.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/ldap/php_ldap.h b/ext/ldap/php_ldap.h
deleted file mode 100644
index 4fcbff9b27..0000000000
--- a/ext/ldap/php_ldap.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Amitay Isaacs <amitay@w-o-i.com> |
- | Eric Warnke <ericw@albany.edu> |
- | Jani Taskinen <sniper@iki.fi> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LDAP_H
-#define PHP_LDAP_H
-
-#ifndef HAVE_ORALDAP
-#include <lber.h>
-#endif
-#include <ldap.h>
-
-extern zend_module_entry ldap_module_entry;
-#define ldap_module_ptr &ldap_module_entry
-
-/* LDAP functions */
-PHP_MINIT_FUNCTION(ldap);
-PHP_MSHUTDOWN_FUNCTION(ldap);
-
-PHP_MINFO_FUNCTION(ldap);
-
-PHP_FUNCTION(ldap_connect);
-
-PHP_FUNCTION(ldap_bind);
-PHP_FUNCTION(ldap_unbind);
-
-PHP_FUNCTION(ldap_read);
-PHP_FUNCTION(ldap_list);
-PHP_FUNCTION(ldap_search);
-
-PHP_FUNCTION(ldap_free_result);
-PHP_FUNCTION(ldap_count_entries);
-
-PHP_FUNCTION(ldap_first_entry);
-PHP_FUNCTION(ldap_next_entry);
-PHP_FUNCTION(ldap_get_entries);
-PHP_FUNCTION(ldap_first_attribute);
-PHP_FUNCTION(ldap_next_attribute);
-PHP_FUNCTION(ldap_get_attributes);
-
-PHP_FUNCTION(ldap_get_values);
-PHP_FUNCTION(ldap_get_values_len);
-
-PHP_FUNCTION(ber_free);
-PHP_FUNCTION(ldap_get_dn);
-PHP_FUNCTION(ldap_explode_dn);
-PHP_FUNCTION(ldap_dn2ufn);
-
-PHP_FUNCTION(ldap_add);
-PHP_FUNCTION(ldap_delete);
-
-PHP_FUNCTION(ldap_mod_add);
-PHP_FUNCTION(ldap_mod_replace);
-PHP_FUNCTION(ldap_mod_del);
-
-PHP_FUNCTION(ldap_errno);
-PHP_FUNCTION(ldap_err2str);
-PHP_FUNCTION(ldap_error);
-
-PHP_FUNCTION(ldap_compare);
-
-PHP_FUNCTION(ldap_sort);
-
-#if ( LDAP_API_VERSION > 2000 ) || HAVE_NSLDAP
-PHP_FUNCTION(ldap_get_option);
-PHP_FUNCTION(ldap_set_option);
-PHP_FUNCTION(ldap_parse_result);
-PHP_FUNCTION(ldap_first_reference);
-PHP_FUNCTION(ldap_next_reference);
-PHP_FUNCTION(ldap_parse_reference);
-PHP_FUNCTION(ldap_rename);
-#endif
-
-#if LDAP_API_VERSION > 2000
-PHP_FUNCTION(ldap_start_tls);
-#endif
-
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
-PHP_FUNCTION(ldap_set_rebind_proc);
-#endif
-
-#ifdef STR_TRANSLATION
-PHP_FUNCTION(ldap_t61_to_8859);
-PHP_FUNCTION(ldap_8859_to_t61);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(ldap)
- long num_links;
- long max_links;
-ZEND_END_MODULE_GLOBALS(ldap)
-
-#ifdef ZTS
-# define LDAPG(v) TSRMG(ldap_globals_id, zend_ldap_globals *, v)
-#else
-# define LDAPG(v) (ldap_globals.v)
-#endif
-
-
-#define phpext_ldap_ptr ldap_module_ptr
-
-#endif /* PHP_LDAP_H */
diff --git a/ext/mbstring/CREDITS b/ext/mbstring/CREDITS
deleted file mode 100644
index e4af536087..0000000000
--- a/ext/mbstring/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Multibyte (Japanese) String Functions
-Tsukada Takuya, Rui Hirokawa
diff --git a/ext/mbstring/README_PHP3-i18n-ja b/ext/mbstring/README_PHP3-i18n-ja
deleted file mode 100644
index cac00b82a1..0000000000
--- a/ext/mbstring/README_PHP3-i18n-ja
+++ /dev/null
@@ -1,774 +0,0 @@
-==========================================
- README for I18N Package
-==========================================
-
-o Name and location of package
-
-Name: php-3.0.18-i18n-ja-2
-Location: http://www.happysize.co.jp/techie/php-ja-jp/
- ftp://ftp.happysize.co.jp/php-ja-jp/
- http://php.vdomains.org/
- ftp://ftp.vdomains.org/pub/php-ja-jp/
- http://php.jpnnet.com/
-
-Currently, this I18N version of PHP only adds Japanese support to base
-PHP. It allows you to use Japanese in scripts, as well as conversion
-between various Japanese encodings. It will work perfectly fine with
-ASCII with i18n option enabled. (note: executable is bit larger due
-to UNICODE table). The basic design aproach is to allow for other
-languages to be added in the future. Developers are encourage to join
-us!
-
-For more information on Japanese encodings, please refer to the
-section "Additional Notes."
-
-
-o What is this package?
-
-This package allows you to handle multiple Japanese encodings (SJIS, EUC,
-UTF-8, JIS) in PHP. If you find any bugs in this package, please report
-them to the appropriate mailing list. For now, the PHP-jp mailing list
-is the best place for this.
-
-PHP-jp ML mailto:PHP-jp@sidecar.ics.es.osaka-u.ac.jp
- http://sidecar.ics.es.osaka-u.ac.jp/php-jp/
- (discussions are in Japanese)
-
-
-o Who should use this
-
-Due to lack of documentation, it's not intended for beginners. If
-something goes wrong, be prepared to fix it on your own.
-
-
-o Warranty and Copyright
-
-There is no warranty with this package. Use it at your own risk.
-
-Please refer to the source code for the copyrights. In general, each
-program's copyright is owned by the programmer. Unless you obey the
-copyright holders restrictions, you are not allowed to use it in any
-form.
-
-
-o Redistribution
-
-As described in the source code, this package and the components are
-allowed to be redistributed with certain restrictions.
-
-Due to this package being still in beta, please try to redistribute
-it as an entire package. Please try not to distribute it as a form
-of patch. Because we would prefer to have this package distributed
-as one single package (not patch of patch of patch), avoid releasing
-any patch to this package.
-
-
-o Who made this
-
-A team of volunteers, PHP3 Internationalization, has been contributing
-their free time producing it. Although we are not related to the core
-PHP programmers, we are hoping to have our modifications merged into the
-core distribution in the near future. Thus, we did not call this a
-"Japanese Patch" (or distribution). Our final goal is to have true
-i18nized PHP!
-
-For anyone interested in this project, please drop us a line.
-
-Contact Address:
- phpj-dev@kage.net
- (Discussions are in Japanese, but feel free to write us in English)
-
-Webpage (English and Japanese):
- http://php.jpnnet.com/
-
-Project Outline (Japanese):
- http://www.happysize.co.jp/techie/php-ja-jp/spec.htm
-
-Developers:
- Hironori Sato <satoh@jpnnet.com>
- Shigeru Kanemoto <sgk@happysize.co.jp>
- Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- U. Kenkichi <kenkichi@axes.co.jp>
- Tateyama <tateyan@amy.hi-ho.ne.jp>
- Other gracious contributors
-
-
-o Future plans
-
-- fulfilling what's written in outline
-- support for other languages other than Japanese
-- make the character conversion as a library (?)
-- more testing
-
-
-o Special Thanks to
-
-PHP Japanese webpage maintainer, Hirokawa-san
- http://www.cityfujisawa.ne.jp/%7Elouis/apps/phpfi/
-PHP-JP ML's Yamamoto-san
- http://sidecar.ics.es.osaka-u.ac.jp/php-jp/
-Previous jp-patch developers
-
-
-
-==========================================
- Advantages of using I18N package
-==========================================
-
-- allows you to use various character encodings for script files and
- http output
-- distinguish character encoding in POST/GET/COOKIE
-- proper mail output using JIS as body and MIME/Base64/JIS subject
-- if http output's Content-Type is text/html, it will set proper charset
-- stable character encoding conversion
-- multibyte regex
-
-
-
-==========================================
- Installation
-==========================================
-
-o Summary
-
-Add --enable-i18n option when running configure. For your own setup,
-add any other appropriate options as well.
-
-Don't forget to copy php3.ini-dist to desired location.
-(ex. /usr/local/lib/php3.ini)
-
-If you have already installed PHP3, copy all the entries in php3.ini-dist
-which start with "i18n.xxxx" to php3.ini.
-
-
-o configure option
- --enable-i18n
- include i18n features
-
- --enable-mbregex
- include multibyte regex library
- (without i18n enabled, mbregex functions will not function)
-
-
-o creating cgi version
-
- % tar xvzf php-3.0.18-i18n-ja-2.tar.gz
- % cd php-3.0.18-i18n-ja-2
- % ./configure --enable-i18n --enable-mbregex
- % make
-
-
-o creating Apache version (regular module)
-
- % tar xvzf php-3.0.18-i18n-ja-2.tar.gz
- % tar xvzf apache_1.3.x.tar.gz
- % cd apache_1.3.x
- % ./configure
- % cd ../php-3.0.18-i18n-ja-2
- % ./configure --with-apache=../apache_1.3.x --enable-i18n --enable-mbregex
- % make
- % make install
- % cd ../apache_1.3.x
- % ./configure --activate-module=src/modules/php3/libphp3.a
- % make
- % make install
-
-
-o creating Apache DSO version
-
- create DSO capable Apache first
- % tar xvzf apache_1.3.x.tar.gz
- % cd apache-1.3.x
- % ./configure --enable-shared=max
- % make
- % make install
-
- now create php3
- % cd php-3.0.18-i18n-ja-2
- % ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-i18n \
- --enable-mbregex
- % make
- % make install
-
-
-==========================================
- Additional Notes
-==========================================
-
-o Multibyte regex library
-
-From beta4, we have included the multibyte (mb) regex library which comes with
-Ruby. With this addition, you can now use regex in EUC, SJIS and UTF-8
-encoding. To avoid any conflicts with HSREGEX included with Apache,
-each function name has been changed. Therefore, mb regex functions are
-named differently from the original ereg functions in PHP. The character
-encoding used in mb regex is configured in i18n.internal_encoding.
-
-
-o Binary Output
-
-If http output encoding is set to other than 'pass', conversion of encoding
-from internal encoding to http output is done automatically. Thus,
-if you prefer to spit out anything in raw binary format, your data
-may be corrupted. In such event, set http_output to 'pass'.
-
-ex.
- <?
- i18n_http_output("pass");
- ...
- echo $the_binary_data_string;
- ?>
-
-
-o Content-Type
-
-Depending on the setting of http_output, PHP will output the proper charset.
-ex. Content-Type: text/html; charset="..."
-
-Be aware of following:
-
-- If you set Content-Type header using header() function, that will
- override the automatic addition of charset.
-- Be cautious when you set i18n_http_output, since if any output is
- made prior to this, proper header may have been sent out to the
- client already.
-
-
-o In the event of trouble
-
-If you find any bugs or trouble, please contact us at the above address.
-It may help us to track the problem if you send us the script as well.
-
-If you encounter any memory related error such as segmentation violation,
-add --enable-debug when you run configure. This will give you more
-detail information on where error has occurred. The error is stored
-in the server log or regular http output in CGI mode.
-
-
-o About Japanese encodings
-
-Due to historical reason, there are multiple character encodings used
-for Japanese. The most common encodings are: SJIS, EUC, JIS, and UTF-8.
-Here are (very) brief description of them:
-
-EUC
- commonly used in UNIX environment
- 8bit-8bit combo
- always >=0x80
-
-SJIS
- commonly used in Mac or PCs
- similar to EUC
- mostly 8bit-8bit (some 8bit-7bit)
- mostly >=0x80
- there are some halfwidth (size of ASCII) multibytes
-
-JIS
- commonly used in 7bit environment (nntp and smtp)
- starts with escaping char, \033 and a few more characters
-
-UTF-8
- 16bit+ encoding
- defines many languages existing in this world
- see http://www.unicode.org/ for more detail
-
-Because of having all these character encodings, PHP needs to translate
-between these encodings on the fly. Also, the addition of the mb regex
-library allows you to handle mb strings without fear of getting mb char
-chopped in half.
-
-Since Japanese is not the only language with multiple encodings, we
-encourage other developers to modify our code to suit your needs. We
-definitely need people to work with Korean, Chinese (both traditional
-and simplified), and Russian. Let us know if you are interested in
-this project!
-
-
-
-==========================================
- php3.ini setting
-==========================================
-
-The following init options will allow you to change the default settings.
-Define these settings in the global section of php3.ini.
-
-All keywords are case-insensitive.
-
-o Encoding naming
-
- For each encoding, there are three names: standarized, alias, MIME
-
- - UTF-8
- standard: UTF-8
- alias: N/A
- mime: UTF-8
-
- - ASCII
- standard: ASCII
- alias: N/A
- mime: US-ASCII
-
- - Japanese EUC
- standard: EUC-JP
- alias: EUC, EUC_JP, eucJP, x-euc-jp
- mime: EUC-JP
-
- - Shift JIS
- standard: SJIS
- alias: x-sjis, MS_Kanji
- mime: Shift_JIS
-
- - JIS
- standard: JIS
- alias: N/A
- mime: ISO-2022-JP
-
- - Quoted-Printable
- standard: Quoted-Printable
- alias: qprint
- mime: N/A
-
- - BASE64
- standard: BASE64
- alias: N/A
- mime: N/A
-
- - no conversion
- standard: pass
- alias: none
- mime: N/A
-
- - auto encoding detection
- standard: auto
- alias: unknown
- mime: N/A
-
- * N/A - Not Applicapable
-
-o i18n.http_output - default http output encoding
-
- i18n.http_output = EUC-JP|SJIS|JIS|UTF-8|pass
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
-
- The default is pass (internal encoding is used)
- It can be re-configured on the fly using i18n_http_output().
-
-
-o i18n.internal_encoding - internal encoding
-
- i18n.internal_encoding = EUC-JP|SJIS|UTF-8
- EUC-JP : EUC
- SJIS: SJIS
- UTF-8: UTF-8
-
- The default is EUC-JP.
-
- PHP parser is designed based on using ISO-8859-1. For other
- encodings, following conditions have to be satisfied in order
- to use them:
- - per byte encoding
- - single byte charactor in range of 00h-7fh which is compatible
- with ASCII
- - multibyte without 00h-7fh
- In case of Japanese, EUC-JP and UTF-8 are the only encoding that
- meets this criteria.
-
- If i18n.internal_encoding and i18n.http_output differs, conversion
- takes place at the time of output. If you convert any data within
- PHP scripts to URL encoding, BASE64 or Quoted-Printable, encoding
- stays as defined in i18n.internal_encoding. Thus, if you would
- prefer to encode in compliance with i18n.http_output, you need
- to manually convert encoding.
-
- ex. $str = urlencode( i18n_convert($str, i18n_http_output()) );
-
- Encoding such as ISO-2022-** and HZ encoding which uses escape
- sequences can not be used as internal encoding. If used, they
- result in following errors:
- - parser pukes funky error
- - magic_quotes_*** breaks encoding (SJIS may have similar problem)
- - string manipulation and regex will malfunction
-
-
-o i18n.script_encoding - script encoding
-
- i18n.script_encoding = auto|EUC-JP|SJIS|JIS|UTF-8
- auto: automatic
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
- The default is auto.
- The script's encoding is converted to i18n.internal_encoding before
- entering the script parser.
-
- Be aware that auto detection may fail under some conditions.
- For best auto detection, add multibyte charactor at begining of
- script.
-
-
-o i18n.http_input - handling of http input (GET/POST/COOKIE)
-
- i18n.http_input = pass|auto
- auto: auto conversion
- pass: no conversion
-
- The default is auto.
- If set to pass, no conversion will take place.
- If set to auto, it will automatically detect the encoding. If
- detection is successful, it will convert to the proper internal
- encoding. If not, it will assume the input as defined in
- i18n.http_input_default.
-
-o i18n.http_input_default - default http input encoding
-
- i18n.http_input_default = pass|EUC-JP|SJIS|JIS|UTF-8
- pass: no conversion
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
- The default is pass.
- This option is only effective as long as i18n.http_input is set to
- auto. If the auto detection fails, this encoding is used as an
- assumption to convert the http input to the internal encoding.
- If set to pass, no conversion will take place.
-
-o sample settings
-
- 1) For most flexibility, we recommend using following example.
- i18n.http_output = SJIS
- i18n.internal_encoding = EUC-JP
- i18n.script_encoding = auto
- i18n.http_input = auto
- i18n.http_input_default = SJIS
-
- 2) To avoid unexpected encoding problems, try these:
-
- i18n.http_output = pass
- i18n.internal_encoding = EUC-JP
- i18n.script_encoding = pass
- i18n.http_input = pass
- i18n.http_input_default = pass
-
-
-
-==========================================
- PHP functions
-==========================================
-
-The following describes the additional PHP functions.
-
-All keywords are case-insensitive.
-
-o i18n_http_output(encoding)
-o encoding = i18n_http_output()
-
- This will set the http output encoding. Any output following this
- function will be controlled by this function. If no argument is given,
- the current http output encode setting is returned.
-
- encodings
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
-
- NONE is not allowed
-
-
-o encoding = i18n_internal_encoding()
-
- Returns the current internal encoding as a string.
-
- internal encoding
- EUC-JP : EUC
- SJIS: SJIS
- UTF-8: UTF-8
-
-
-o encoding = i18n_http_input()
-
- Returns http input encoding.
-
- encodings
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion (only if i18n.http_input is set to pass)
-
-
-o string = i18n_convert(string, encoding)
- string = i18n_convert(string, encoding, pre-conversion-encoding)
-
- Returns converted string in desired encoding. If
- pre-conversion-encoding is not defined, the given
- string is assumed to be in internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
-
- pre-conversion-encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
- auto: auto detection
-
-
-o encoding = i18n_discover_encoding(string)
-
- Encoding of the given string is returned (as a string).
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- ASCII: ASCII (only 09h, 0Ah, 0Dh, 20h-7Eh)
- pass: unable to determine (text is too short to determine)
- unknown: unknown or possible error
-
-
-o int = mbstrlen(string)
-o int = mbstrlen(string, encoding)
-
- Returns character length of a given string. If no encoding is defined,
- the encoding of string is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- auto: automatic
-
-
-o int = mbstrpos(string1, string2)
-o int = mbstrpos(string1, string2, start)
-o int = mbstrpos(string1, string2, start, encoding)
-
- Same as strpos. If no encoding is defined, the encoding of string
- is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o int = mbstrrpos(string1, string2)
-o int = mbstrrpos(string1, string2, encoding)
-
- Same as strrpos. If no encoding is defined, the encoding of string
- is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o string = mbsubstr(string, position)
-o string = mbsubstr(string, position, length)
-o string = mbsubstr(string, position, length, encoding)
-
- Same as substr. If no encoding is defined, the encoding of string
- is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o string = mbstrcut(string, position)
-o string = mbstrcut(string, position, length)
-o string = mbstrcut(string, position, length, encoding)
-
- Same as subcut. If position is the 2nd byte of a mb character, it will cut
- from the first byte of that character. It will cut the string without
- chopping a single byte from a mb character. In another words, if you
- set length to 5, you will only get two mb characters. If no encoding
- is defined, the encoding of string is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o string = i18n_mime_header_encode(string)
- MIME encode the string in the format of =?ISO-2022-JP?B?[string]?=.
-
-
-o string = i18n_mime_header_decode(string)
- MIME decodes the string.
-
-
-o string = i18n_ja_jp_hantozen(string)
-o string = i18n_ja_jp_hantozen(string, option)
-o string = i18n_ja_jp_hantozen(string, option, encoding)
-
- Conversion between full width character and halfwidth character.
-
- option
- The following options are allowed. The default is "KV".
- Acronym: FW = fullwidth, HW = halfwidth
-
- "r" : FW alphabet -> HW alphabet
-
- "R" : HW alphabet -> FW alphabet
-
- "n" : FW number -> HW number
-
- "N" : HW number -> FW number
-
- "a" : FW alpha numeric (21h-7Eh) -> HW alpha numeric
-
- "A" : HW alpha numeric (21h-7Eh) -> FW alpha numeric
-
- "k" : FW katakana -> HW katakana
-
- "K" : HW katakana -> FW katakana
-
- "h" : FW hiragana -> HW hiragana
-
- "H" : HW hiragana -> FW katakana
-
- "c" : FW katakana -> FW hiragana
-
- "C" : FW hiragana -> FW katakana
-
- "V" : merge dakuon character. only works with "K" and "H" option
-
- encoding
- If no encoding is defined, the encoding of string is assumed to be
- the internal encoding.
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-int = mbereg(regex_pattern, string, string)
-int = mberegi(regex_pattern, string, string)
- mb version of ereg() and eregi()
-
-
-string = mbereg_replace(regex_pattern, string, string)
-string = mberegi_replace(regex_pattern, string, string)
- mb version of ereg_replace() and eregi_replace()
-
-
-string_array = mbsplit(regex, string, limit)
- mb version of split()
-
-
-
-==========================================
- FAQ
-==========================================
-
-Here, we have gathered some commonly asked questions on PHP-jp mailing
-list.
-
-o To use Japanese in GET method
-
-If you need to assign Japanese text in GET method with argument, such as;
-xxxx.php?data=<Japanese text>, use urlencode function in PHP. If not,
-text may not be passed onto action php properly.
-
-ex: <a href="hoge.php?data=<? echo urlencode($data) ?>">Link</a>
-
-
-o When passing data via GET/POST/COOKIE, \ character sneaks in
-
-When using SJIS as internal encoding, or passed-on data includes '"\,
-PHP automatically inserts escaping character, \. Set magic_quotes_gpc
-in php3.ini from On to Off. An alternative work around to this problem
-is to use StripSlashes().
-
-If $quote_str is in SJIS and you would like to extract Japanese text,
-use ereg_replace as follows:
-
-ereg_replace(sprintf("([%c-%c%c-%c]\\\\)\\\\",0x81,0x9f,0xe0,0xfc),
- "\\1",$quote_str);
-
-This will effectively extract Japanese text out of $quote_str.
-
-
-o Sometimes, encoding detection fails
-
-If i18n_http_input() returns 'pass', it's likely that PHP failed to
-detect whether it's SJIS or EUC. In such case, use <input type=hidden
-value="some Japanese text"> to properly detect the incoming text's
-encoding.
-
-
-
-==========================================
- Japanese Manual
-==========================================
-Translated manual done by "PHP Japanese Manual Project" :
-
-http://www.php.net/manual/ja/manual.php
-
-Starting 3.0.18-i18n-ja, we have removed doc-jp from tarball package.
-
-
-==========================================
- Change Logs
-==========================================
-
-o 2000-10-28, Rui Hirokawa <hirokawa@php.net>
-
-This patch is derived from php-3.0.15-i18n-ja as well as php-3.0.16 by
-Kuwamura applied to original php-3.0.18. It also includes following fixes:
-
-1) allows you to set charset in mail().
-2) fixed mbregex definitions to avoid conflicts with system regex
-3) php3.ini-dist now uses PASS for http_output instead of SJIS
-
-o 2000-11-24, Hironori Sato <satoh@yyplanet.com>
-
-Applied above patched and added detection for gdImageStringTTF in configure.
-Following setups are known to work:
-
-gd-1.3-6, gd-devel-1.3-6, freetype-1.3.1-5, freetype-devel-1.3.1-5
- ImageTTFText($im,$size,$angle,$x1,$y1,$color,"/path/to/font.ttf",
- i18n_convert("ÆüËܸì", "UTF-8"));
- ImageGif($im);
-
-gd-1.7.3-1k1, gd-devel-1.7.3-1k1, freetype-1.3.1-5, freetype-devel-1.3.1-5
- ImageTTFText($im,$size,$angle,$x1,$y1,$color,"/path/to/font.ttf","ÆüËܸì");
- ImagePng($im);
- * i18n_internal_encoding = EUC Ëô¤Ï SJIS
-
-For any gd libraries before 1.6.2, you need to use i18n_convert. For
-gd-1.5.2/3, upgrade to anything above 1.7 to use ImageTTFText without
-using i18n_convert. As long as you have internal_encoding set to EUC or
-SJIS, ImageTTFText should work without mojibake. Again, make sure you
-have i18n_http_output("pass") before calling ImageGif, ImagePng, ImageJpeg!
-
-o 2000-12-09, Rui Hirokawa <hirokawa@php.net>
-
-Fixed mail() which was causing segmentation fault when header was null.
-
diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4
deleted file mode 100644
index d1db98678c..0000000000
--- a/ext/mbstring/config.m4
+++ /dev/null
@@ -1,50 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(mbstr_enc_trans, whether to enable encoding translation,
-[ --enable-mbstr-enc-trans Enable encoding translation], yes)
-
-PHP_ARG_ENABLE(mbregex, whether to enable multibyte regex support,
-[ --enable-mbregex Enable multibyte regex support], yes)
-
-PHP_ARG_WITH(mbstring, whether to enable multibyte string support,
-[ --disable-mbstring Disable multibyte string support], yes)
-
-if test "$PHP_MBSTRING" != "no"; then
- AC_DEFINE(HAVE_MBSTRING,1,[whether to have multibyte string support])
-
- if test "$PHP_MBSTRING" != "no" -o "$PHP_MBSTRING" = "ja"; then
- AC_DEFINE(HAVE_MBSTR_JA,1,[whether to have japanese support])
- fi
- if test "$PHP_MBSTRING" = "cn"; then
- AC_DEFINE(HAVE_MBSTR_CN,1,[whether to have simplified chinese support])
- fi
- if test "$PHP_MBSTRING" = "tw"; then
- AC_DEFINE(HAVE_MBSTR_TW,1,[whether to have traditional chinese support])
- fi
- if test "$PHP_MBSTRING" = "kr"; then
- AC_DEFINE(HAVE_MBSTR_KR,1,[whether to have korean support])
- fi
- if test "$PHP_MBSTRING" = "ru"; then
- AC_DEFINE(HAVE_MBSTR_RU,1,[whether to have russian support])
- fi
- if test "$PHP_MBSTRING" = "all"; then
- AC_DEFINE(HAVE_MBSTR_JA,1,[whether to have japanese support])
- AC_DEFINE(HAVE_MBSTR_CN,1,[whether to have simplified chinese support])
- AC_DEFINE(HAVE_MBSTR_TW,1,[whether to have traditional chinese support])
- AC_DEFINE(HAVE_MBSTR_KR,1,[whether to have korean support])
- AC_DEFINE(HAVE_MBSTR_RU,1,[whether to have russian support])
- fi
- PHP_NEW_EXTENSION(mbstring, mbfilter_ja.c mbfilter_cn.c mbfilter_tw.c mbfilter_kr.c mbfilter_ru.c mbfilter.c mbstring.c mbregex.c php_mbregex.c, $ext_shared)
-else
- PHP_MBSTR_ENC_TRANS=no
-fi
-
-if test "$PHP_MBSTR_ENC_TRANS" != "no" ; then
- AC_DEFINE(MBSTR_ENC_TRANS, 1, [whether to have encoding translation])
-fi
-
-if test "$MBREGEX" != "no" ; then
- AC_DEFINE(HAVE_MBREGEX, 1, [whether to have multibyte regex support])
-fi
diff --git a/ext/mbstring/cp932_table.h b/ext/mbstring/cp932_table.h
deleted file mode 100644
index 7f3d6d9735..0000000000
--- a/ext/mbstring/cp932_table.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * cp932 table
- */
-static const unsigned short cp932ext3_eucjp_table[] = {
- /* ku 115 */
- 0xF3F3,0xF3F4,0xF3F5,0xF3F6,0xF3F7,0xF3F8,0xF3F9,0xF3FA,
- 0xF3FB,0xF3FC,0xF3FD,0xF3FE,0xF4A1,0xF4A2,0xF4A3,0xF4A4,
- 0xF4A5,0xF4A6,0xF4A7,0xF4A8,0x224C,0xA2C3,0xF4A9,0xF4AA,
- 0xF4AB,0xF4AC,0xF4AD,0x2268,0xD4E3,0xDCDF,0xE4E9,0xE3F8,
- 0xD9A1,0xB1BB,0xF4AE,0xC2AD,0xC3FC,0xE4D0,0xC2BF,0xBCF4,
- 0xB0A9,0xB0C8,0xF4AF,0xB0D2,0xB0D4,0xB0E3,0xB0EE,0xB1A7,
- 0xB1A3,0xB1AC,0xB1A9,0xB1BE,0xB1DF,0xB1D8,0xB1C8,0xB1D7,
- 0xB1E3,0xB1F4,0xB1E1,0xB2A3,0xF4B0,0xB2BB,0xB2E6,0xB2ED,
- 0xB2F5,0xB2FC,0xF4B1,0xB3B5,0xB3D8,0xB3DB,0xB3E5,0xB3EE,
- 0xB3FB,0xF4B2,0xF4B3,0xB4C0,0xB4C7,0xB4D0,0xB4DE,0xF4B4,
- 0xB5AA,0xF4B5,0xB5AF,0xB5C4,0xB5E8,0xF4B6,0xB7C2,0xB7E4,
- 0xB7E8,0xB7E7,0xF4B7,0xF4B8,0xF4B9,0xB8CE,
-
- /* ku 116 */
- 0xB8E1,0xB8F5,0xB8F7,0xB8F8,0xB8FC,0xB9AF,0xB9B7,0xBABE,
- 0xBADB,0xCDAA,0xBAE1,0xF4BA,0xBAEB,0xBBB3,0xBBB8,0xF4BB,
- 0xBBCA,0xF4BC,0xF4BD,0xBBD0,0xBBDE,0xBBF4,0xBBF5,0xBBF9,
- 0xBCE4,0xBCED,0xBCFE,0xF4BE,0xBDC2,0xBDE7,0xF4BF,0xBDF0,
- 0xBEB0,0xBEAC,0xF4C0,0xBEB3,0xBEBD,0xBECD,0xBEC9,0xBEE4,
- 0xBFA8,0xBFC9,0xC0C4,0xC0E4,0xC0F4,0xC1A6,0xF4C1,0xC1F5,
- 0xC1FC,0xF4C2,0xC1F8,0xC2AB,0xC2A1,0xC2A5,0xF4C3,0xC2B8,
- 0xC2BA,0xF4C4,0xC2C4,0xC2D2,0xC2D7,0xC2DB,0xC2DE,0xC2ED,
- 0xC2F0,0xF4C5,0xC3A1,0xC3B5,0xC3C9,0xC3B9,0xF4C6,0xC3D8,
- 0xC3FE,0xF4C7,0xC4CC,0xF4C8,0xC4D9,0xC4EA,0xC4FD,0xF4C9,
- 0xC5A7,0xC5B5,0xC5B6,0xF4CA,0xC5D5,0xC6B8,0xC6D7,0xC6E0,
- 0xC6EA,0xC6E3,0xC7A1,0xC7AB,0xC7C7,0xC7C3,
-
- /* ku 117 */
- 0xC7CB,0xC7CF,0xC7D9,0xF4CB,0xF4CC,0xC7E6,0xC7EE,0xC7FC,
- 0xC7EB,0xC7F0,0xC8B1,0xC8E5,0xC8F8,0xC9A6,0xC9AB,0xC9AD,
- 0xF4CD,0xC9CA,0xC9D3,0xC9E9,0xC9E3,0xC9FC,0xC9F4,0xC9F5,
- 0xF4CE,0xCAB3,0xCABD,0xCAEF,0xCAF1,0xCBAE,0xF4CF,0xCBCA,
- 0xCBE6,0xCBEA,0xCBF0,0xCBF4,0xCBEE,0xCCA5,0xCBF9,0xCCAB,
- 0xCCAE,0xCCAD,0xCCB2,0xCCC2,0xCCD0,0xCCD9,0xF4D0,0xCDBB,
- 0xF4D1,0xCEBB,0xF4D2,0xCEBA,0xCEC3,0xF4D3,0xCEF2,0xB3DD,
- 0xCFD5,0xCFE2,0xCFE9,0xCFED,0xF4D4,0xF4D5,0xF4D6,0xF4D7,
- 0xD0E5,0xF4D8,0xD0E9,0xD1E8,0xF4D9,0xF4DA,0xD1EC,0xD2BB,
- 0xF4DB,0xD3E1,0xD3E8,0xD4A7,0xF4DC,0xF4DD,0xD4D4,0xD4F2,
- 0xD5AE,0xF4DE,0xD7DE,0xF4DF,0xD8A2,0xD8B7,0xD8C1,0xD8D1,
- 0xD8F4,0xD9C6,0xD9C8,0xD9D1,0xF4E0,0xF4E1,
-
- /* ku 118 */
- 0xF4E2,0xF4E3,0xF4E4,0xDCD3,0xDDC8,0xDDD4,0xDDEA,0xDDFA,
- 0xDEA4,0xDEB0,0xF4E5,0xDEB5,0xDECB,0xF4E6,0xDFB9,0xF4E7,
- 0xDFC3,0xF4E8,0xF4E9,0xE0D9,0xF4EA,0xF4EB,0xE1E2,0xF4EC,
- 0xF4ED,0xF4EE,0xE2C7,0xE3A8,0xE3A6,0xE3A9,0xE3AF,0xE3B0,
- 0xE3AA,0xE3AB,0xE3BC,0xE3C1,0xE3BF,0xE3D5,0xE3D8,0xE3D6,
- 0xE3DF,0xE3E3,0xE3E1,0xE3D4,0xE3E9,0xE4A6,0xE3F1,0xE3F2,
- 0xE4CB,0xE4C1,0xE4C3,0xE4BE,0xF4EF,0xE4C0,0xE4C7,0xE4BF,
- 0xE4E0,0xE4DE,0xE4D1,0xF4F0,0xE4DC,0xE4D2,0xE4DB,0xE4D4,
- 0xE4FA,0xE4EF,0xE5B3,0xE5BF,0xE5C9,0xE5D0,0xE5E2,0xE5EA,
- 0xE5EB,0xF4F1,0xF4F2,0xF4F3,0xE6E8,0xE6EF,0xE7AC,0xF4F4,
- 0xE7AE,0xF4F5,0xE7B1,0xF4F6,0xE7B2,0xE8B1,0xE8B6,0xF4F7,
- 0xF4F8,0xE8DD,0xF4F9,0xF4FA,0xE9D1,0xF4FB,
-
- /* ku 119 */
- 0xE9ED,0xEACD,0xF4FC,0xEADB,0xEAE6,0xEAEA,0xEBA5,0xEBFB,
- 0xEBFA,0xF4FD,0xECD6,0xF4FE
-};
-
-static const int cp932ext3_eucjp_table_size = (sizeof (cp932ext3_eucjp_table) / sizeof (unsigned short));
diff --git a/ext/mbstring/mbfilter.c b/ext/mbstring/mbfilter.c
deleted file mode 100644
index f179531c81..0000000000
--- a/ext/mbstring/mbfilter.c
+++ /dev/null
@@ -1,9318 +0,0 @@
-/* charset=UTF-8
- * vim: encoding=utf-8:
- * */
-
-/*
- * "streamable kanji code filter and converter"
- *
- * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
- *
- * This software is released under the GNU Lesser General Public License.
- * (Version 2.1, February 1999)
- * Please read the following detail of the licence (in japanese).
- *
- * ◆使用許諾æ¡ä»¶â—†
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- *
- * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- * http://www.gnu.org/ --- GNUウェブサイト
- * http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
- *
- * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- * ã¯ã‚ã‚Šã¾ã›ã‚“。
- *
- * â—†ä¿è¨¼å†…容◆
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- * 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- * ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- * å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
- *
- * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
- *
- * 〒102-0073
- * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- * Phone: 03-3512-3655, Fax: 03-3512-3656
- * Email: sales@happysize.co.jp
- * Web: http://happysize.com/
- *
- * ◆著者◆
- *
- * 金本 茂 <sgk@happysize.co.jp>
- *
- * ◆履歴◆
- *
- * 1998/11/10 sgk implementation in C++
- * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
- *
- */
-
-/*
- * Unicode support
- *
- * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
- * All rights reserved.
- *
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#include <stdlib.h>
-#include "mbfilter.h"
-
-#if defined(HAVE_MBSTR_JA)
-#include "mbfilter_ja.h"
-#endif
-#if defined(HAVE_MBSTR_CN)
-#include "mbfilter_cn.h"
-#endif
-#if defined(HAVE_MBSTR_TW)
-#include "mbfilter_tw.h"
-#endif
-#if defined(HAVE_MBSTR_KR)
-#include "mbfilter_kr.h"
-#endif
-#if defined(HAVE_MBSTR_KR)
-#include "mbfilter_ru.h"
-#endif
-
-#include "zend.h"
-
-#ifdef PHP_WIN32
-#include "win95nt.h"
-#endif
-
-#define mbfl_malloc emalloc
-#define mbfl_realloc erealloc
-#define mbfl_calloc ecalloc
-#define mbfl_free efree
-
-#define mbfl_pmalloc malloc
-#define mbfl_prealloc realloc
-#define mbfl_pfree free
-
-#include "unicode_table.h"
-
-/* language structure */
-static const char *mbfl_language_uni_aliases[] = {"universal", "none", NULL};
-
-static mbfl_language mbfl_language_uni = {
- mbfl_no_language_uni,
- "uni",
- "uni",
- (const char *(*)[])&mbfl_language_uni_aliases,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_base64
-};
-
-static mbfl_language mbfl_language_japanese = {
- mbfl_no_language_japanese,
- "Japanese",
- "ja",
- NULL,
- mbfl_no_encoding_2022jp,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
-
-static mbfl_language mbfl_language_korean = {
- mbfl_no_language_korean,
- "Korean",
- "ko",
- NULL,
- mbfl_no_encoding_2022kr,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
-
-static mbfl_language mbfl_language_english = {
- mbfl_no_language_english,
- "English",
- "en",
- NULL,
- mbfl_no_encoding_8859_1,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit
-};
-
-static mbfl_language mbfl_language_simplified_chinese = {
- mbfl_no_language_simplified_chinese,
- "Simplified Chinese",
- "zh-cn",
- NULL,
- mbfl_no_encoding_hz,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
-
-static mbfl_language mbfl_language_traditional_chinese = {
- mbfl_no_language_traditional_chinese,
- "Traditional Chinese",
- "zh-tw",
- NULL,
- mbfl_no_encoding_hz,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
-
-static mbfl_language mbfl_language_russian = {
- mbfl_no_language_russian,
- "Russian",
- "ru",
- NULL,
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit
-};
-
-static mbfl_language *mbfl_language_ptr_table[] = {
- &mbfl_language_uni,
- &mbfl_language_japanese,
- &mbfl_language_korean,
- &mbfl_language_simplified_chinese,
- &mbfl_language_traditional_chinese,
- &mbfl_language_english,
- &mbfl_language_russian,
- NULL
-};
-
-
-/* encoding byte width table */
-static const unsigned char mblen_table_utf8[] = {
- 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,
- 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,
- 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,
- 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,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
-};
-
-static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */
- 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,
- 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,
- 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, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */
- 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,
- 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,
- 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,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 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,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
-};
-
-
-static const unsigned char mblen_table_euccn[] = { /* 0xA1-0xFE */
- 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,
- 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,
- 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,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const unsigned char mblen_table_cp936[] = { /* 0x81-0xFE */
- 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,
- 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,
- 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const unsigned char mblen_table_euctw[] = { /* 0xA1-0xFE */
- 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,
- 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,
- 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, 4, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const unsigned char mblen_table_big5[] = { /* 0x81-0xFE */
- 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,
- 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,
- 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-
-static const unsigned char mblen_table_euckr[] = { /* 0xA1-0xFE */
- 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,
- 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,
- 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,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const unsigned char mblen_table_uhc[] = { /* 0x81-0xFE */
- 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,
- 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,
- 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-/* encoding structure */
-static const char *mbfl_encoding_pass_aliases[] = {"none", NULL};
-
-static mbfl_encoding mbfl_encoding_pass = {
- mbfl_no_encoding_pass,
- "pass",
- NULL,
- (const char *(*)[])&mbfl_encoding_pass_aliases,
- NULL,
- 0
-};
-
-static const char *mbfl_encoding_auto_aliases[] = {"unknown", NULL};
-
-static mbfl_encoding mbfl_encoding_auto = {
- mbfl_no_encoding_auto,
- "auto",
- NULL,
- (const char *(*)[])&mbfl_encoding_auto_aliases,
- NULL,
- 0
-};
-
-static mbfl_encoding mbfl_encoding_wchar = {
- mbfl_no_encoding_wchar,
- "wchar",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-static mbfl_encoding mbfl_encoding_byte2be = {
- mbfl_no_encoding_byte2be,
- "byte2be",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_byte2le = {
- mbfl_no_encoding_byte2le,
- "byte2le",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_byte4be = {
- mbfl_no_encoding_byte4be,
- "byte4be",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_byte4le = {
- mbfl_no_encoding_byte4le,
- "byte4le",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_base64 = {
- mbfl_no_encoding_base64,
- "BASE64",
- "BASE64",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_uuencode = {
- mbfl_no_encoding_uuencode,
- "UUENCODE",
- "x-uuencode",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_qprint_aliases[] = {"qprint", NULL};
-
-static mbfl_encoding mbfl_encoding_qprint = {
- mbfl_no_encoding_qprint,
- "Quoted-Printable",
- "Quoted-Printable",
- (const char *(*)[])&mbfl_encoding_qprint_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_7bit = {
- mbfl_no_encoding_7bit,
- "7bit",
- "7bit",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static mbfl_encoding mbfl_encoding_8bit = {
- mbfl_no_encoding_8bit,
- "8bit",
- "8bit",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL};
-
-static mbfl_encoding mbfl_encoding_ucs2 = {
- mbfl_no_encoding_ucs2,
- "UCS-2",
- "UCS-2",
- (const char *(*)[])&mbfl_encoding_ucs2_aliases,
- NULL,
- MBFL_ENCTYPE_WCS2BE
-};
-
-static mbfl_encoding mbfl_encoding_ucs2be = {
- mbfl_no_encoding_ucs2be,
- "UCS-2BE",
- "UCS-2BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS2BE
-};
-
-static mbfl_encoding mbfl_encoding_ucs2le = {
- mbfl_no_encoding_ucs2le,
- "UCS-2LE",
- "UCS-2LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS2LE
-};
-
-static const char *mbfl_encoding_ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL};
-
-static mbfl_encoding mbfl_encoding_ucs4 = {
- mbfl_no_encoding_ucs4,
- "UCS-4",
- "UCS-4",
- (const char *(*)[])&mbfl_encoding_ucs4_aliases,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-static mbfl_encoding mbfl_encoding_ucs4be = {
- mbfl_no_encoding_ucs4be,
- "UCS-4BE",
- "UCS-4BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-static mbfl_encoding mbfl_encoding_ucs4le = {
- mbfl_no_encoding_ucs4le,
- "UCS-4LE",
- "UCS-4LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4LE
-};
-
-static const char *mbfl_encoding_utf32_aliases[] = {"utf32", NULL};
-
-static mbfl_encoding mbfl_encoding_utf32 = {
- mbfl_no_encoding_utf32,
- "UTF-32",
- "UTF-32",
- (const char *(*)[])&mbfl_encoding_utf32_aliases,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-static mbfl_encoding mbfl_encoding_utf32be = {
- mbfl_no_encoding_utf32be,
- "UTF-32BE",
- "UTF-32BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-static mbfl_encoding mbfl_encoding_utf32le = {
- mbfl_no_encoding_utf32le,
- "UTF-32LE",
- "UTF-32LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4LE
-};
-
-static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL};
-
-static mbfl_encoding mbfl_encoding_utf16 = {
- mbfl_no_encoding_utf16,
- "UTF-16",
- "UTF-16",
- (const char *(*)[])&mbfl_encoding_utf16_aliases,
- NULL,
- MBFL_ENCTYPE_MWC2BE
-};
-
-static mbfl_encoding mbfl_encoding_utf16be = {
- mbfl_no_encoding_utf16be,
- "UTF-16BE",
- "UTF-16BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_MWC2BE
-};
-
-static mbfl_encoding mbfl_encoding_utf16le = {
- mbfl_no_encoding_utf16le,
- "UTF-16LE",
- "UTF-16LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_MWC2LE
-};
-
-static const char *mbfl_encoding_utf8_aliases[] = {"utf8", NULL};
-
-static mbfl_encoding mbfl_encoding_utf8 = {
- mbfl_no_encoding_utf8,
- "UTF-8",
- "UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_aliases,
- mblen_table_utf8,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_utf7_aliases[] = {"utf7", NULL};
-
-static mbfl_encoding mbfl_encoding_utf7 = {
- mbfl_no_encoding_utf7,
- "UTF-7",
- "UTF-7",
- (const char *(*)[])&mbfl_encoding_utf7_aliases,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-static mbfl_encoding mbfl_encoding_utf7imap = {
- mbfl_no_encoding_utf7imap,
- "UTF7-IMAP",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-static mbfl_encoding mbfl_encoding_ascii = {
- mbfl_no_encoding_ascii,
- "ASCII",
- "US-ASCII",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-#if defined(HAVE_MBSTR_JA)
-static const char *mbfl_encoding_euc_jp_aliases[] = {"EUC", "EUC_JP", "eucJP", "x-euc-jp", NULL};
-
-static mbfl_encoding mbfl_encoding_euc_jp = {
- mbfl_no_encoding_euc_jp,
- "EUC-JP",
- "EUC-JP",
- (const char *(*)[])&mbfl_encoding_euc_jp_aliases,
- mblen_table_eucjp,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_sjis_aliases[] = {"x-sjis", "SHIFT-JIS", NULL};
-
-static mbfl_encoding mbfl_encoding_sjis = {
- mbfl_no_encoding_sjis,
- "SJIS",
- "Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_aliases,
- mblen_table_sjis,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", NULL};
-
-static mbfl_encoding mbfl_encoding_eucjp_win = {
- mbfl_no_encoding_eucjp_win,
- "eucJP-win",
- "EUC-JP",
- (const char *(*)[])&mbfl_encoding_eucjp_win_aliases,
- mblen_table_eucjp,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_sjis_win_aliases[] = {"SJIS-open", "MS_Kanji", "Windows-31J", "CP932", NULL};
-
-static mbfl_encoding mbfl_encoding_sjis_win = {
- mbfl_no_encoding_sjis_win,
- "SJIS-win",
- "Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_win_aliases,
- mblen_table_sjis,
- MBFL_ENCTYPE_MBCS
-};
-
-static mbfl_encoding mbfl_encoding_jis = {
- mbfl_no_encoding_jis,
- "JIS",
- "ISO-2022-JP",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-static mbfl_encoding mbfl_encoding_2022jp = {
- mbfl_no_encoding_2022jp,
- "ISO-2022-JP",
- "ISO-2022-JP",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-#endif /* HAVE_MBSTR_JA */
-
-
-#if defined(HAVE_MBSTR_CN)
-static const char *mbfl_encoding_euc_cn_aliases[] = {"CN-GB", "EUC_CN", "eucCN", "x-euc-cn", NULL};
-
-static mbfl_encoding mbfl_encoding_euc_cn = {
- mbfl_no_encoding_euc_cn,
- "EUC-CN",
- "CN-GB",
- (const char *(*)[])&mbfl_encoding_euc_cn_aliases,
- mblen_table_euccn,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_cp936_aliases[] = {"CP-936", NULL};
-
-static mbfl_encoding mbfl_encoding_cp936 = {
- mbfl_no_encoding_cp936,
- "CP936",
- "CP936",
- (const char *(*)[])&mbfl_encoding_cp936_aliases,
- mblen_table_cp936,
- MBFL_ENCTYPE_MBCS
-};
-
-static mbfl_encoding mbfl_encoding_hz = {
- mbfl_no_encoding_hz,
- "HZ",
- "HZ-GB-2312",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-#endif /* HAVE_MBSTR_CN */
-
-#if defined(HAVE_MBSTR_TW)
-static const char *mbfl_encoding_euc_tw_aliases[] = {"EUC_TW", "eucTW", "x-euc-tw", NULL};
-
-static mbfl_encoding mbfl_encoding_euc_tw = {
- mbfl_no_encoding_euc_tw,
- "EUC-TW",
- "EUC-TW",
- (const char *(*)[])&mbfl_encoding_euc_tw_aliases,
- mblen_table_euctw,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_big5_aliases[] = {"CN-BIG5", "BIG5", "BIG-FIVE", "BIGFIVE", "CP950", NULL};
-
-static mbfl_encoding mbfl_encoding_big5 = {
- mbfl_no_encoding_big5,
- "BIG-5",
- "CN-BIG5",
- (const char *(*)[])&mbfl_encoding_big5_aliases,
- mblen_table_big5,
- MBFL_ENCTYPE_MBCS
-};
-
-#endif /* HAVE_MBSTR_TW */
-
-#if defined(HAVE_MBSTR_KR)
-static const char *mbfl_encoding_euc_kr_aliases[] = {"EUC_KR", "eucKR", "x-euc-kr", NULL};
-
-static mbfl_encoding mbfl_encoding_euc_kr = {
- mbfl_no_encoding_euc_kr,
- "EUC-KR",
- "EUC-KR",
- (const char *(*)[])&mbfl_encoding_euc_kr_aliases,
- mblen_table_euckr,
- MBFL_ENCTYPE_MBCS
-};
-
-static const char *mbfl_encoding_uhc_aliases[] = {"CP949", NULL};
-
-static mbfl_encoding mbfl_encoding_uhc = {
- mbfl_no_encoding_uhc,
- "UHC",
- "UHC",
- (const char *(*)[])&mbfl_encoding_uhc_aliases,
- mblen_table_uhc,
- MBFL_ENCTYPE_MBCS
-};
-
-static mbfl_encoding mbfl_encoding_2022kr = {
- mbfl_no_encoding_2022kr,
- "ISO-2022-KR",
- "ISO-2022-KR",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-#endif /* HAVE_MBSTR_KR */
-
-static const char *mbfl_encoding_cp1252_aliases[] = {"cp1252", NULL};
-
-static mbfl_encoding mbfl_encoding_cp1252 = {
- mbfl_no_encoding_cp1252,
- "Windows-1252",
- "Windows-1252",
- (const char *(*)[])&mbfl_encoding_cp1252_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_1_aliases[] = {"ISO_8859-1", "latin1", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_1 = {
- mbfl_no_encoding_8859_1,
- "ISO-8859-1",
- "ISO-8859-1",
- (const char *(*)[])&mbfl_encoding_8859_1_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_2_aliases[] = {"ISO_8859-2", "latin2", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_2 = {
- mbfl_no_encoding_8859_2,
- "ISO-8859-2",
- "ISO-8859-2",
- (const char *(*)[])&mbfl_encoding_8859_2_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_3_aliases[] = {"ISO_8859-3", "latin3", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_3 = {
- mbfl_no_encoding_8859_3,
- "ISO-8859-3",
- "ISO-8859-3",
- (const char *(*)[])&mbfl_encoding_8859_3_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_4_aliases[] = {"ISO_8859-4", "latin4", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_4 = {
- mbfl_no_encoding_8859_4,
- "ISO-8859-4",
- "ISO-8859-4",
- (const char *(*)[])&mbfl_encoding_8859_4_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_5_aliases[] = {"ISO_8859-5", "cyrillic", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_5 = {
- mbfl_no_encoding_8859_5,
- "ISO-8859-5",
- "ISO-8859-5",
- (const char *(*)[])&mbfl_encoding_8859_5_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_6_aliases[] = {"ISO_8859-6", "arabic", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_6 = {
- mbfl_no_encoding_8859_6,
- "ISO-8859-6",
- "ISO-8859-6",
- (const char *(*)[])&mbfl_encoding_8859_6_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_7_aliases[] = {"ISO_8859-7", "greek", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_7 = {
- mbfl_no_encoding_8859_7,
- "ISO-8859-7",
- "ISO-8859-7",
- (const char *(*)[])&mbfl_encoding_8859_7_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_8_aliases[] = {"ISO_8859-8", "hebrew", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_8 = {
- mbfl_no_encoding_8859_8,
- "ISO-8859-8",
- "ISO-8859-8",
- (const char *(*)[])&mbfl_encoding_8859_8_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_9_aliases[] = {"ISO_8859-9", "latin5", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_9 = {
- mbfl_no_encoding_8859_9,
- "ISO-8859-9",
- "ISO-8859-9",
- (const char *(*)[])&mbfl_encoding_8859_9_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_10_aliases[] = {"ISO_8859-10", "latin6", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_10 = {
- mbfl_no_encoding_8859_10,
- "ISO-8859-10",
- "ISO-8859-10",
- (const char *(*)[])&mbfl_encoding_8859_10_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_13_aliases[] = {"ISO_8859-13", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_13 = {
- mbfl_no_encoding_8859_13,
- "ISO-8859-13",
- "ISO-8859-13",
- (const char *(*)[])&mbfl_encoding_8859_13_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_14_aliases[] = {"ISO_8859-14", "latin8", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_14 = {
- mbfl_no_encoding_8859_14,
- "ISO-8859-14",
- "ISO-8859-14",
- (const char *(*)[])&mbfl_encoding_8859_14_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_8859_15_aliases[] = {"ISO_8859-15", NULL};
-
-static mbfl_encoding mbfl_encoding_8859_15 = {
- mbfl_no_encoding_8859_15,
- "ISO-8859-15",
- "ISO-8859-15",
- (const char *(*)[])&mbfl_encoding_8859_15_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-#if defined(HAVE_MBSTR_KR)
-static const char *mbfl_encoding_cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL};
-
-static mbfl_encoding mbfl_encoding_cp1251 = {
- mbfl_no_encoding_cp1251,
- "Windows-1251",
- "Windows-1251",
- &mbfl_encoding_cp1251_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM-866", NULL};
-
-static mbfl_encoding mbfl_encoding_cp866 = {
- mbfl_no_encoding_cp866,
- "CP866",
- "CP866",
- &mbfl_encoding_cp866_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-static const char *mbfl_encoding_koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL};
-
-static mbfl_encoding mbfl_encoding_koi8r = {
- mbfl_no_encoding_koi8r,
- "KOI8-R",
- "KOI8-R",
- &mbfl_encoding_koi8r_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-#endif
-
-static mbfl_encoding *mbfl_encoding_ptr_list[] = {
- &mbfl_encoding_pass,
- &mbfl_encoding_auto,
- &mbfl_encoding_wchar,
- &mbfl_encoding_byte2be,
- &mbfl_encoding_byte2le,
- &mbfl_encoding_byte4be,
- &mbfl_encoding_byte4le,
- &mbfl_encoding_base64,
- &mbfl_encoding_uuencode,
- &mbfl_encoding_qprint,
- &mbfl_encoding_7bit,
- &mbfl_encoding_8bit,
- &mbfl_encoding_ucs4,
- &mbfl_encoding_ucs4be,
- &mbfl_encoding_ucs4le,
- &mbfl_encoding_ucs2,
- &mbfl_encoding_ucs2be,
- &mbfl_encoding_ucs2le,
- &mbfl_encoding_utf32,
- &mbfl_encoding_utf32be,
- &mbfl_encoding_utf32le,
- &mbfl_encoding_utf16,
- &mbfl_encoding_utf16be,
- &mbfl_encoding_utf16le,
- &mbfl_encoding_utf8,
- &mbfl_encoding_utf7,
- &mbfl_encoding_utf7imap,
- &mbfl_encoding_ascii,
-#if defined(HAVE_MBSTR_JA)
- &mbfl_encoding_euc_jp,
- &mbfl_encoding_sjis,
- &mbfl_encoding_eucjp_win,
- &mbfl_encoding_sjis_win,
- &mbfl_encoding_jis,
- &mbfl_encoding_2022jp,
-#endif
- &mbfl_encoding_cp1252,
- &mbfl_encoding_8859_1,
- &mbfl_encoding_8859_2,
- &mbfl_encoding_8859_3,
- &mbfl_encoding_8859_4,
- &mbfl_encoding_8859_5,
- &mbfl_encoding_8859_6,
- &mbfl_encoding_8859_7,
- &mbfl_encoding_8859_8,
- &mbfl_encoding_8859_9,
- &mbfl_encoding_8859_10,
- &mbfl_encoding_8859_13,
- &mbfl_encoding_8859_14,
- &mbfl_encoding_8859_15,
-#if defined(HAVE_MBSTR_CN)
- &mbfl_encoding_euc_cn,
- &mbfl_encoding_cp936,
- &mbfl_encoding_hz,
-#endif
-#if defined(HAVE_MBSTR_TW)
- &mbfl_encoding_euc_tw,
- &mbfl_encoding_big5,
-#endif
-#if defined(HAVE_MBSTR_KR)
- &mbfl_encoding_euc_kr,
- &mbfl_encoding_uhc,
- &mbfl_encoding_2022kr,
-#endif
-#if defined(HAVE_MBSTR_RU)
- &mbfl_encoding_cp1251,
- &mbfl_encoding_cp866,
- &mbfl_encoding_koi8r,
-#endif
- NULL
-};
-
-/* forward */
-static void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter TSRMLS_DC);
-static void mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter TSRMLS_DC);
-
-static int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-static int mbfl_filt_conv_base64enc(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_base64enc_flush(mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_base64dec(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_base64dec_flush(mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_uudec(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-static int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_qprintenc_flush(mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_qprintdec(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_qprintdec_flush(mbfl_convert_filter *filter TSRMLS_DC);
-
-static int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_ucs4be(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_ucs4le(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-static int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-static int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-static void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter TSRMLS_DC);
-static void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter TSRMLS_DC);
-static void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter TSRMLS_DC);
-#if defined(HAVE_MBSTR_JA)
-static int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_sjiswin(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter TSRMLS_DC);
-#endif /* HAVE_MBSTR_JA */
-
-#if defined(HAVE_MBSTR_CN)
-static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter TSRMLS_DC);
-#endif /* HAVE_MBSTR_CN */
-
-#if defined(HAVE_MBSTR_TW)
-static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter TSRMLS_DC);
-#endif /* HAVE_MBSTR_TW */
-
-#if defined(HAVE_MBSTR_KR)
-static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter TSRMLS_DC);
-#endif /* HAVE_MBSTR_KR */
-
-#if defined(HAVE_MBSTR_RU)
-static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter TSRMLS_DC);
-#endif /* HAVE_MBSTR_RU */
-
-static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter TSRMLS_DC);
-static int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter TSRMLS_DC);
-
-/* convert filter function table */
-static struct mbfl_convert_vtbl vtbl_pass = {
- mbfl_no_encoding_pass,
- mbfl_no_encoding_pass,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_pass,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_byte2be_wchar = {
- mbfl_no_encoding_byte2be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte2be_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_byte2be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte2be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte2be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_byte2le_wchar = {
- mbfl_no_encoding_byte2le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte2le_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_byte2le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte2le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte2le,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_byte4be_wchar = {
- mbfl_no_encoding_byte4be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4be_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_byte4be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte4be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte4be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_byte4le_wchar = {
- mbfl_no_encoding_byte4le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4le_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_byte4le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte4le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte4le,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8bit_b64 = {
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_base64,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_base64enc,
- mbfl_filt_conv_base64enc_flush };
-
-static struct mbfl_convert_vtbl vtbl_b64_8bit = {
- mbfl_no_encoding_base64,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_base64dec,
- mbfl_filt_conv_base64dec_flush };
-
-static struct mbfl_convert_vtbl vtbl_uuencode_8bit = {
- mbfl_no_encoding_uuencode,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_uudec,
- mbfl_filt_conv_common_flush
-};
-
-
-static struct mbfl_convert_vtbl vtbl_8bit_qprint = {
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_qprint,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_qprintenc,
- mbfl_filt_conv_qprintenc_flush };
-
-static struct mbfl_convert_vtbl vtbl_qprint_8bit = {
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_qprintdec,
- mbfl_filt_conv_qprintdec_flush };
-
-static struct mbfl_convert_vtbl vtbl_8bit_7bit = {
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_7bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_any_7bit,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_7bit_8bit = {
- mbfl_no_encoding_7bit,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_pass,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_ucs4_wchar = {
- mbfl_no_encoding_ucs4,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs4_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ucs4 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs4,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_ucs4be_wchar = {
- mbfl_no_encoding_ucs4be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4be_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ucs4be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs4be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_ucs4le_wchar = {
- mbfl_no_encoding_ucs4le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4le_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ucs4le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs4le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4le,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_ucs2_wchar = {
- mbfl_no_encoding_ucs2,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs2_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ucs2 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs2,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs2be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_ucs2be_wchar = {
- mbfl_no_encoding_ucs2be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte2be_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ucs2be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs2be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs2be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_ucs2le_wchar = {
- mbfl_no_encoding_ucs2le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte2le_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ucs2le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs2le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs2le,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf32_wchar = {
- mbfl_no_encoding_utf32,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs4_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf32 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf32,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf32be_wchar = {
- mbfl_no_encoding_utf32be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4be_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf32be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf32be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf32le_wchar = {
- mbfl_no_encoding_utf32le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4le_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf32le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf32le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4le,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf16_wchar = {
- mbfl_no_encoding_utf16,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf16_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf16 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf16,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf16be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf16be_wchar = {
- mbfl_no_encoding_utf16be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf16be_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf16be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf16be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf16be,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf16le_wchar = {
- mbfl_no_encoding_utf16le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf16le_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf16le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf16le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf16le,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf8_wchar = {
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf8_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf8 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf8,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf8,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf7_wchar = {
- mbfl_no_encoding_utf7,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf7_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf7 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf7,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf7,
- mbfl_filt_conv_wchar_utf7_flush };
-
-static struct mbfl_convert_vtbl vtbl_utf7imap_wchar = {
- mbfl_no_encoding_utf7imap,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf7imap_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_utf7imap = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf7imap,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf7imap,
- mbfl_filt_conv_wchar_utf7imap_flush };
-
-static struct mbfl_convert_vtbl vtbl_ascii_wchar = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_pass,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_ascii = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ascii,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ascii,
- mbfl_filt_conv_common_flush };
-
-#if defined(HAVE_MBSTR_JA)
-static struct mbfl_convert_vtbl vtbl_eucjp_wchar = {
- mbfl_no_encoding_euc_jp,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_eucjp_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_eucjp = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_jp,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_eucjp,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_sjis_wchar = {
- mbfl_no_encoding_sjis,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_sjis_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_sjis = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_sjis,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_sjis,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_jis_wchar = {
- mbfl_no_encoding_jis,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_jis_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_jis = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_jis,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_jis,
- mbfl_filt_conv_any_jis_flush };
-
-static struct mbfl_convert_vtbl vtbl_2022jp_wchar = {
- mbfl_no_encoding_2022jp,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_jis_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_2022jp = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_2022jp,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_2022jp,
- mbfl_filt_conv_any_jis_flush };
-
-static struct mbfl_convert_vtbl vtbl_eucjpwin_wchar = {
- mbfl_no_encoding_eucjp_win,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_eucjpwin_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_eucjpwin = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_eucjp_win,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_eucjpwin,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_sjiswin_wchar = {
- mbfl_no_encoding_sjis_win,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_sjiswin_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_sjiswin = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_sjis_win,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_sjiswin,
- mbfl_filt_conv_common_flush };
-#endif /* HAVE_MBSTR_JA */
-
-#if defined(HAVE_MBSTR_CN)
-static struct mbfl_convert_vtbl vtbl_euccn_wchar = {
- mbfl_no_encoding_euc_cn,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_euccn_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_euccn = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_cn,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_euccn,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_cp936_wchar = {
- mbfl_no_encoding_cp936,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp936_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_cp936 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_cp936,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp936,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_hz_wchar = {
- mbfl_no_encoding_hz,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_hz_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_hz = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_hz,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_hz,
- mbfl_filt_conv_any_hz_flush };
-
-#endif /* HAVE_MBSTR_CN */
-
-#if defined(HAVE_MBSTR_TW)
-static struct mbfl_convert_vtbl vtbl_euctw_wchar = {
- mbfl_no_encoding_euc_tw,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_euctw_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_euctw = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_tw,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_euctw,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_big5_wchar = {
- mbfl_no_encoding_big5,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_big5_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_big5 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_big5,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_big5,
- mbfl_filt_conv_common_flush };
-#endif /* HAVE_MBSTR_TW */
-
-#if defined(HAVE_MBSTR_KR)
-static struct mbfl_convert_vtbl vtbl_euckr_wchar = {
- mbfl_no_encoding_euc_kr,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_euckr_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_euckr = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_kr,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_euckr,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_uhc_wchar = {
- mbfl_no_encoding_uhc,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_uhc_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_uhc = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_uhc,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_uhc,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_2022kr = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_2022kr,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_2022kr,
- mbfl_filt_conv_any_2022kr_flush };
-
-static struct mbfl_convert_vtbl vtbl_2022kr_wchar = {
- mbfl_no_encoding_2022kr,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_2022kr_wchar,
- mbfl_filt_conv_common_flush };
-
-#endif /* HAVE_MBSTR_KR */
-
-#if defined(HAVE_MBSTR_RU)
-static struct mbfl_convert_vtbl vtbl_wchar_cp1251 = {
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp1251,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_cp1251_wchar = {
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp1251_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_cp866 = {
- mbfl_no_encoding_cp866,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp866,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_cp866_wchar = {
- mbfl_no_encoding_cp866,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp866_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_koi8r = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_koi8r,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_koi8r,
- mbfl_filt_conv_common_flush };
-
-
-static struct mbfl_convert_vtbl vtbl_koi8r_wchar = {
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_koi8r_wchar,
- mbfl_filt_conv_common_flush };
-#endif /* HAVE_MBSTR_RU */
-
-static struct mbfl_convert_vtbl vtbl_cp1252_wchar = {
- mbfl_no_encoding_cp1252,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp1252_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_cp1252 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_cp1252,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp1252,
- mbfl_filt_conv_common_flush };
-
-
-static struct mbfl_convert_vtbl vtbl_8859_1_wchar = {
- mbfl_no_encoding_8859_1,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_pass,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_1 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_1,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_1,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_2_wchar = {
- mbfl_no_encoding_8859_2,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_2_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_2 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_2,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_2,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_3_wchar = {
- mbfl_no_encoding_8859_3,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_3_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_3 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_3,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_3,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_4_wchar = {
- mbfl_no_encoding_8859_4,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_4_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_4 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_4,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_4,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_5_wchar = {
- mbfl_no_encoding_8859_5,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_5_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_5 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_5,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_5,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_6_wchar = {
- mbfl_no_encoding_8859_6,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_6_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_6 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_6,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_6,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_7_wchar = {
- mbfl_no_encoding_8859_7,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_7_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_7 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_7,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_7,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_8_wchar = {
- mbfl_no_encoding_8859_8,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_8_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_8 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_8,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_8,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_9_wchar = {
- mbfl_no_encoding_8859_9,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_9_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_9 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_9,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_9,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_10_wchar = {
- mbfl_no_encoding_8859_10,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_10_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_10 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_10,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_10,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_13_wchar = {
- mbfl_no_encoding_8859_13,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_13_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_13 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_13,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_13,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_14_wchar = {
- mbfl_no_encoding_8859_14,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_14_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_14 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_14,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_14,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_8859_15_wchar = {
- mbfl_no_encoding_8859_15,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_15_wchar,
- mbfl_filt_conv_common_flush };
-
-static struct mbfl_convert_vtbl vtbl_wchar_8859_15 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_15,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_15,
- mbfl_filt_conv_common_flush };
-
-
-static struct mbfl_convert_vtbl *mbfl_convert_filter_list[] = {
- &vtbl_utf8_wchar,
- &vtbl_wchar_utf8,
-#if defined(HAVE_MBSTR_JA)
- &vtbl_eucjp_wchar,
- &vtbl_wchar_eucjp,
- &vtbl_sjis_wchar,
- &vtbl_wchar_sjis,
- &vtbl_jis_wchar,
- &vtbl_wchar_jis,
- &vtbl_2022jp_wchar,
- &vtbl_wchar_2022jp,
- &vtbl_eucjpwin_wchar,
- &vtbl_wchar_eucjpwin,
- &vtbl_sjiswin_wchar,
- &vtbl_wchar_sjiswin,
-#endif
-#if defined(HAVE_MBSTR_CN)
- &vtbl_euccn_wchar,
- &vtbl_wchar_euccn,
- &vtbl_cp936_wchar,
- &vtbl_wchar_cp936,
- &vtbl_hz_wchar,
- &vtbl_wchar_hz,
-#endif
-#if defined(HAVE_MBSTR_TW)
- &vtbl_euctw_wchar,
- &vtbl_wchar_euctw,
- &vtbl_big5_wchar,
- &vtbl_wchar_big5,
-#endif
-#if defined(HAVE_MBSTR_KR)
- &vtbl_euckr_wchar,
- &vtbl_wchar_euckr,
- &vtbl_uhc_wchar,
- &vtbl_wchar_uhc,
- &vtbl_2022kr_wchar,
- &vtbl_wchar_2022kr,
-#endif
-#if defined(HAVE_MBSTR_RU)
- &vtbl_cp1251_wchar,
- &vtbl_wchar_cp1251,
- &vtbl_cp866_wchar,
- &vtbl_wchar_cp866,
- &vtbl_koi8r_wchar,
- &vtbl_wchar_koi8r,
-#endif
- &vtbl_cp1252_wchar,
- &vtbl_wchar_cp1252,
- &vtbl_ascii_wchar,
- &vtbl_wchar_ascii,
- &vtbl_8859_1_wchar,
- &vtbl_wchar_8859_1,
- &vtbl_8859_2_wchar,
- &vtbl_wchar_8859_2,
- &vtbl_8859_3_wchar,
- &vtbl_wchar_8859_3,
- &vtbl_8859_4_wchar,
- &vtbl_wchar_8859_4,
- &vtbl_8859_5_wchar,
- &vtbl_wchar_8859_5,
- &vtbl_8859_6_wchar,
- &vtbl_wchar_8859_6,
- &vtbl_8859_7_wchar,
- &vtbl_wchar_8859_7,
- &vtbl_8859_8_wchar,
- &vtbl_wchar_8859_8,
- &vtbl_8859_9_wchar,
- &vtbl_wchar_8859_9,
- &vtbl_8859_10_wchar,
- &vtbl_wchar_8859_10,
- &vtbl_8859_13_wchar,
- &vtbl_wchar_8859_13,
- &vtbl_8859_14_wchar,
- &vtbl_wchar_8859_14,
- &vtbl_8859_15_wchar,
- &vtbl_wchar_8859_15,
- &vtbl_8bit_b64,
- &vtbl_b64_8bit,
- &vtbl_uuencode_8bit,
- &vtbl_8bit_qprint,
- &vtbl_qprint_8bit,
- &vtbl_8bit_7bit,
- &vtbl_7bit_8bit,
- &vtbl_utf7_wchar,
- &vtbl_wchar_utf7,
- &vtbl_utf7imap_wchar,
- &vtbl_wchar_utf7imap,
- &vtbl_utf16_wchar,
- &vtbl_wchar_utf16,
- &vtbl_utf16be_wchar,
- &vtbl_wchar_utf16be,
- &vtbl_utf16le_wchar,
- &vtbl_wchar_utf16le,
- &vtbl_utf32_wchar,
- &vtbl_wchar_utf32,
- &vtbl_utf32be_wchar,
- &vtbl_wchar_utf32be,
- &vtbl_utf32le_wchar,
- &vtbl_wchar_utf32le,
- &vtbl_ucs4_wchar,
- &vtbl_wchar_ucs4,
- &vtbl_ucs4be_wchar,
- &vtbl_wchar_ucs4be,
- &vtbl_ucs4le_wchar,
- &vtbl_wchar_ucs4le,
- &vtbl_ucs2_wchar,
- &vtbl_wchar_ucs2,
- &vtbl_ucs2be_wchar,
- &vtbl_wchar_ucs2be,
- &vtbl_ucs2le_wchar,
- &vtbl_wchar_ucs2le,
- &vtbl_byte4be_wchar,
- &vtbl_wchar_byte4be,
- &vtbl_byte4le_wchar,
- &vtbl_wchar_byte4le,
- &vtbl_byte2be_wchar,
- &vtbl_wchar_byte2be,
- &vtbl_byte2le_wchar,
- &vtbl_wchar_byte2le,
- &vtbl_pass,
- NULL
-};
-
-
-/* identify filter function table */
-static struct mbfl_identify_vtbl vtbl_identify_ascii = {
- mbfl_no_encoding_ascii,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_ascii };
-
-static struct mbfl_identify_vtbl vtbl_identify_utf8 = {
- mbfl_no_encoding_utf8,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_utf8 };
-
-static struct mbfl_identify_vtbl vtbl_identify_utf7 = {
- mbfl_no_encoding_utf7,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_utf7 };
-
-#if defined(HAVE_MBSTR_JA)
-static struct mbfl_identify_vtbl vtbl_identify_eucjp = {
- mbfl_no_encoding_euc_jp,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_eucjp };
-
-static struct mbfl_identify_vtbl vtbl_identify_eucjpwin = {
- mbfl_no_encoding_eucjp_win,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_eucjp };
-
-static struct mbfl_identify_vtbl vtbl_identify_sjis = {
- mbfl_no_encoding_sjis,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_sjis };
-
-static struct mbfl_identify_vtbl vtbl_identify_sjiswin = {
- mbfl_no_encoding_sjis_win,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_sjiswin };
-
-static struct mbfl_identify_vtbl vtbl_identify_jis = {
- mbfl_no_encoding_jis,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_jis };
-
-static struct mbfl_identify_vtbl vtbl_identify_2022jp = {
- mbfl_no_encoding_2022jp,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_2022jp };
-#endif /* HAVE_MBSTR_JA */
-
-#if defined(HAVE_MBSTR_CN)
-static struct mbfl_identify_vtbl vtbl_identify_euccn = {
- mbfl_no_encoding_euc_cn,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_euccn };
-
-static struct mbfl_identify_vtbl vtbl_identify_cp936 = {
- mbfl_no_encoding_cp936,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp936 };
-
-static struct mbfl_identify_vtbl vtbl_identify_hz = {
- mbfl_no_encoding_hz,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_hz };
-
-#endif /* HAVE_MBSTR_CN */
-
-#if defined(HAVE_MBSTR_TW)
-static struct mbfl_identify_vtbl vtbl_identify_euctw = {
- mbfl_no_encoding_euc_tw,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_euctw };
-
-static struct mbfl_identify_vtbl vtbl_identify_big5 = {
- mbfl_no_encoding_big5,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_big5 };
-#endif /* HAVE_MBSTR_TW */
-
-#if defined(HAVE_MBSTR_KR)
-static struct mbfl_identify_vtbl vtbl_identify_euckr = {
- mbfl_no_encoding_euc_kr,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_euckr };
-
-static struct mbfl_identify_vtbl vtbl_identify_uhc = {
- mbfl_no_encoding_uhc,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_uhc };
-
-static struct mbfl_identify_vtbl vtbl_identify_2022kr = {
- mbfl_no_encoding_2022kr,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_2022kr };
-
-#endif /* HAVE_MBSTR_KR */
-
-#if defined(HAVE_MBSTR_RU)
-static struct mbfl_identify_vtbl vtbl_identify_cp1251 = {
- mbfl_no_encoding_cp1251,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp1251 };
-
-static struct mbfl_identify_vtbl vtbl_identify_cp866 = {
- mbfl_no_encoding_cp866,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp866 };
-
-static struct mbfl_identify_vtbl vtbl_identify_koi8r = {
- mbfl_no_encoding_koi8r,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_koi8r };
-#endif /* HAVE_MBSTR_RU */
-
-static struct mbfl_identify_vtbl vtbl_identify_cp1252 = {
- mbfl_no_encoding_cp1252,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp1252 };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_1 = {
- mbfl_no_encoding_8859_1,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_2 = {
- mbfl_no_encoding_8859_2,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_3 = {
- mbfl_no_encoding_8859_3,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_4 = {
- mbfl_no_encoding_8859_4,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_5 = {
- mbfl_no_encoding_8859_5,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_6 = {
- mbfl_no_encoding_8859_6,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_7 = {
- mbfl_no_encoding_8859_7,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_8 = {
- mbfl_no_encoding_8859_8,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_9 = {
- mbfl_no_encoding_8859_9,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_10 = {
- mbfl_no_encoding_8859_10,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_13 = {
- mbfl_no_encoding_8859_13,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_14 = {
- mbfl_no_encoding_8859_14,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_8859_15 = {
- mbfl_no_encoding_8859_15,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-static struct mbfl_identify_vtbl vtbl_identify_false = {
- mbfl_no_encoding_pass,
- mbfl_filt_ident_false_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_false };
-
-static struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = {
- &vtbl_identify_utf8,
- &vtbl_identify_utf7,
- &vtbl_identify_ascii,
-#if defined(HAVE_MBSTR_JA)
- &vtbl_identify_eucjp,
- &vtbl_identify_sjis,
- &vtbl_identify_eucjpwin,
- &vtbl_identify_sjiswin,
- &vtbl_identify_jis,
- &vtbl_identify_2022jp,
-#endif
-#if defined(HAVE_MBSTR_CN)
- &vtbl_identify_euccn,
- &vtbl_identify_cp936,
- &vtbl_identify_hz,
-#endif
-#if defined(HAVE_MBSTR_TW)
- &vtbl_identify_euctw,
- &vtbl_identify_big5,
-#endif
-#if defined(HAVE_MBSTR_KR)
- &vtbl_identify_euckr,
- &vtbl_identify_uhc,
- &vtbl_identify_2022kr,
-#endif
-#if defined(HAVE_MBSTR_RU)
- &vtbl_identify_cp1251,
- &vtbl_identify_cp866,
- &vtbl_identify_koi8r,
-#endif
- &vtbl_identify_cp1252,
- &vtbl_identify_8859_1,
- &vtbl_identify_8859_2,
- &vtbl_identify_8859_3,
- &vtbl_identify_8859_4,
- &vtbl_identify_8859_5,
- &vtbl_identify_8859_6,
- &vtbl_identify_8859_7,
- &vtbl_identify_8859_8,
- &vtbl_identify_8859_9,
- &vtbl_identify_8859_10,
- &vtbl_identify_8859_13,
- &vtbl_identify_8859_14,
- &vtbl_identify_8859_15,
- &vtbl_identify_false,
- NULL
-};
-
-
-/* language resolver */
-mbfl_language *
-mbfl_name2language(const char *name)
-{
- mbfl_language *language;
- int i, j;
-
- if (name == NULL) {
- return NULL;
- }
-
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL){
- if (strcasecmp(language->name, name) == 0) {
- return language;
- }
- }
-
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL){
- if (strcasecmp(language->short_name, name) == 0) {
- return language;
- }
- }
-
- /* serch aliases */
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL) {
- if (language->aliases != NULL) {
- j = 0;
- while ((*language->aliases)[j] != NULL) {
- if (strcasecmp((*language->aliases)[j], name) == 0) {
- return language;
- }
- j++;
- }
- }
- }
-
- return NULL;
-}
-
-mbfl_language *
-mbfl_no2language(enum mbfl_no_language no_language)
-{
- mbfl_language *language;
- int i;
-
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL){
- if (language->no_language == no_language) {
- return language;
- }
- }
-
- return NULL;
-}
-
-enum mbfl_no_language
-mbfl_name2no_language(const char *name)
-{
- mbfl_language *language;
-
- language = mbfl_name2language(name);
- if (language == NULL) {
- return mbfl_no_language_invalid;
- } else {
- return language->no_language;
- }
-}
-
-const char *
-mbfl_no_language2name(enum mbfl_no_language no_language)
-{
- mbfl_language *language;
-
- language = mbfl_no2language(no_language);
- if (language == NULL) {
- return "";
- } else {
- return language->name;
- }
-}
-
-
-
-/* encoding resolver */
-mbfl_encoding *
-mbfl_name2encoding(const char *name)
-{
- mbfl_encoding *encoding;
- int i, j;
-
- if (name == NULL) {
- return NULL;
- }
-
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
- if (strcasecmp(encoding->name, name) == 0) {
- return encoding;
- }
- }
-
- /* serch MIME charset name */
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
- if (encoding->mime_name != NULL) {
- if (strcasecmp(encoding->mime_name, name) == 0) {
- return encoding;
- }
- }
- }
-
- /* serch aliases */
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
- if (encoding->aliases != NULL) {
- j = 0;
- while ((*encoding->aliases)[j] != NULL) {
- if (strcasecmp((*encoding->aliases)[j], name) == 0) {
- return encoding;
- }
- j++;
- }
- }
- }
-
- return NULL;
-}
-
-mbfl_encoding *
-mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
-{
- mbfl_encoding *encoding;
- int i;
-
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
- if (encoding->no_encoding == no_encoding) {
- return encoding;
- }
- }
-
- return NULL;
-}
-
-enum mbfl_no_encoding
-mbfl_name2no_encoding(const char *name)
-{
- mbfl_encoding *encoding;
-
- encoding = mbfl_name2encoding(name);
- if (encoding == NULL) {
- return mbfl_no_encoding_invalid;
- } else {
- return encoding->no_encoding;
- }
-}
-
-const char *
-mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
-{
- mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(no_encoding);
- if (encoding == NULL) {
- return "";
- } else {
- return encoding->name;
- }
-}
-
-const char *
-mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding)
-{
- mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(no_encoding);
- if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') {
- return encoding->mime_name;
- } else {
- return NULL;
- }
-}
-
-int
-mbfl_is_support_encoding(const char *name)
-{
- mbfl_encoding *encoding;
-
- encoding = mbfl_name2encoding(name);
- if (encoding == NULL) {
- return 0;
- } else {
- return 1;
- }
-}
-
-
-
-/*
- * memory device output functions
- */
-void
-mbfl_memory_device_init(mbfl_memory_device *device, int initsz, int allocsz TSRMLS_DC)
-{
- if (device) {
- device->length = 0;
- device->buffer = (unsigned char *)0;
- if (initsz > 0) {
- device->buffer = (unsigned char *)mbfl_malloc(initsz*sizeof(unsigned char));
- if (device->buffer != NULL) {
- device->length = initsz;
- }
- }
- device->pos= 0;
- if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) {
- device->allocsz = allocsz;
- } else {
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
- }
-}
-
-void
-mbfl_memory_device_realloc(mbfl_memory_device *device, int initsz, int allocsz TSRMLS_DC)
-{
- unsigned char *tmp;
-
- if (device) {
- if (initsz > device->length) {
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, initsz*sizeof(unsigned char));
- if (tmp != NULL) {
- device->buffer = tmp;
- device->length = initsz;
- }
- }
- if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) {
- device->allocsz = allocsz;
- } else {
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
- }
-}
-
-void
-mbfl_memory_device_clear(mbfl_memory_device *device TSRMLS_DC)
-{
- if (device) {
- if (device->buffer) {
- mbfl_free(device->buffer);
- }
- device->buffer = (unsigned char *)0;
- device->length = 0;
- device->pos = 0;
- }
-}
-
-void
-mbfl_memory_device_reset(mbfl_memory_device *device TSRMLS_DC)
-{
- if (device) {
- device->pos = 0;
- }
-}
-
-void
-mbfl_memory_device_unput(mbfl_memory_device *device TSRMLS_DC)
-{
- if (device->pos > 0) {
- device->pos--;
- }
-}
-
-mbfl_string *
-mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result TSRMLS_DC)
-{
- if (device && result) {
- result->len = device->pos;
- mbfl_memory_device_output4('\0', device TSRMLS_CC);
- result->val = device->buffer;
- device->buffer = (unsigned char *)0;
- device->length = 0;
- device->pos= 0;
- if (result->val == NULL) {
- result->len = 0;
- result = NULL;
- }
- } else {
- result = NULL;
- }
-
- return result;
-}
-
-int
-mbfl_memory_device_output(int c, void *data TSRMLS_DC)
-{
- mbfl_memory_device *device = (mbfl_memory_device *)data;
-
- if (device->pos >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned char *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = (unsigned char)c;
- return c;
-}
-
-int
-mbfl_memory_device_output2(int c, void *data TSRMLS_DC)
-{
- mbfl_memory_device *device = (mbfl_memory_device *)data;
-
- if ((device->pos + 2) >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned char *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = (unsigned char)((c >> 8) & 0xff);
- device->buffer[device->pos++] = (unsigned char)(c & 0xff);
-
- return c;
-}
-
-int
-mbfl_memory_device_output4(int c, void* data TSRMLS_DC)
-{
- mbfl_memory_device *device = (mbfl_memory_device *)data;
-
- if ((device->pos + 4) >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned char *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = (unsigned char)((c >> 24) & 0xff);
- device->buffer[device->pos++] = (unsigned char)((c >> 16) & 0xff);
- device->buffer[device->pos++] = (unsigned char)((c >> 8) & 0xff);
- device->buffer[device->pos++] = (unsigned char)(c & 0xff);
-
- return c;
-}
-
-int
-mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc TSRMLS_DC)
-{
- int len;
- unsigned char *w;
- const unsigned char *p;
-
- len = 0;
- p = psrc;
- while (*p) {
- p++;
- len++;
- }
-
- if ((device->pos + len) >= device->length) {
- /* reallocate buffer */
- int newlen = device->length + (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)*sizeof(unsigned char);
- unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- p = psrc;
- w = &device->buffer[device->pos];
- device->pos += len;
- while (len > 0) {
- *w++ = *p++;
- len--;
- }
-
- return len;
-}
-
-int
-mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, int len TSRMLS_DC)
-{
- unsigned char *w;
-
- if ((device->pos + len) >= device->length) {
- /* reallocate buffer */
- int newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- w = &device->buffer[device->pos];
- device->pos += len;
- while (len > 0) {
- *w++ = *psrc++;
- len--;
- }
-
- return len;
-}
-
-int
-mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src TSRMLS_DC)
-{
- int n;
- unsigned char *p, *w;
-
- if ((dest->pos + src->pos) >= dest->length) {
- /* reallocate buffer */
- int newlen = dest->length + src->pos + MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)dest->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- dest->length = newlen;
- dest->buffer = tmp;
- }
-
- p = src->buffer;
- w = &dest->buffer[dest->pos];
- n = src->pos;
- dest->pos += n;
- while (n > 0) {
- *w++ = *p++;
- n--;
- }
-
- return n;
-}
-
-void
-mbfl_wchar_device_init(mbfl_wchar_device *device TSRMLS_DC)
-{
- if (device) {
- device->buffer = (unsigned int *)0;
- device->length = 0;
- device->pos= 0;
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
-}
-
-void
-mbfl_wchar_device_clear(mbfl_wchar_device *device TSRMLS_DC)
-{
- if (device) {
- if (device->buffer) {
- mbfl_free(device->buffer);
- }
- device->buffer = (unsigned int*)0;
- device->length = 0;
- device->pos = 0;
- }
-}
-
-int
-mbfl_wchar_device_output(int c, void *data TSRMLS_DC)
-{
- mbfl_wchar_device *device = (mbfl_wchar_device *)data;
-
- if (device->pos >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned int *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned int *)mbfl_realloc((void *)device->buffer, newlen*sizeof(int));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = c;
-
- return c;
-}
-
-
-/*
- * string object
- */
-void
-mbfl_string_init(mbfl_string *string)
-{
- if (string) {
- string->no_language = mbfl_no_language_uni;
- string->no_encoding = mbfl_no_encoding_pass;
- string->val = (unsigned char*)0;
- string->len = 0;
- }
-}
-
-void
-mbfl_string_init_set(mbfl_string *string, enum mbfl_no_language no_language, enum mbfl_no_encoding no_encoding)
-{
- if (string) {
- string->no_language = no_language;
- string->no_encoding = no_encoding;
- string->val = (unsigned char*)0;
- string->len = 0;
- }
-}
-
-void
-mbfl_string_clear(mbfl_string *string)
-{
- if (string) {
- if (string->val != (unsigned char*)0) {
- mbfl_free(string->val);
- }
- string->val = (unsigned char*)0;
- string->len = 0;
- }
-}
-
-
-
-/*
- * encoding filter
- */
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * commonly used constructor and destructor
- */
-static void
-mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter TSRMLS_DC)
-{
- filter->status = 0;
- filter->cache = 0;
-}
-
-static int
-mbfl_filt_conv_common_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- filter->status = 0;
- filter->cache = 0;
- return 0;
-}
-
-static void
-mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter TSRMLS_DC)
-{
- filter->status = 0;
- filter->cache = 0;
-}
-
-static int
-mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- return (*filter->output_function)(c, filter->data TSRMLS_CC);
-}
-
-static int
-mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < 0x80) {
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- }
- return c;
-}
-
-static int
-mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 8;
- filter->cache = n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- return c;
-}
-
-static int
-mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- return c;
-}
-
-static int
-mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = c & 0xff;
- filter->cache = n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 8) | filter->cache;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- return c;
-}
-
-static int
-mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- return c;
-}
-
-static int
-mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 24;
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- return c;
-}
-
-static int
-mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- return c;
-}
-
-static int
-mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff);
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 24) | filter->cache;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- return c;
-}
-
-static int
-mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data TSRMLS_CC));
- return c;
-}
-
-
-/* uuencode => any */
-#define UUDEC(c) (char)(((c)-' ')&077)
-static const char * uuenc_begin_text = "begin ";
-enum { uudec_state_ground=0, uudec_state_inbegin,
- uudec_state_until_newline,
- uudec_state_size, uudec_state_a, uudec_state_b, uudec_state_c, uudec_state_d,
- uudec_state_skip_newline};
-static int
-mbfl_filt_conv_uudec(int c, mbfl_convert_filter * filter TSRMLS_DC)
-{
- int n;
-
- switch(filter->status) {
- case uudec_state_ground:
- /* looking for "begin 0666 filename\n" line */
- if (filter->cache == 0 && c == 'b')
- {
- filter->status = uudec_state_inbegin;
- filter->cache = 1; /* move to 'e' */
- }
- else if (c == '\n')
- filter->cache = 0;
- else
- filter->cache++;
- break;
- case uudec_state_inbegin:
- if (uuenc_begin_text[filter->cache++] != c) {
- /* doesn't match pattern */
- filter->status = uudec_state_ground;
- break;
- }
- if (filter->cache == 5)
- {
- /* thats good enough - wait for a newline */
- filter->status = uudec_state_until_newline;
- filter->cache = 0;
- }
- break;
- case uudec_state_until_newline:
- if (c == '\n')
- filter->status = uudec_state_size;
- break;
- case uudec_state_size:
- /* get "size" byte */
- n = UUDEC(c);
- filter->cache = n << 24;
- filter->status = uudec_state_a;
- break;
- case uudec_state_a:
- /* get "a" byte */
- n = UUDEC(c);
- filter->cache |= (n << 16);
- filter->status = uudec_state_b;
- break;
- case uudec_state_b:
- /* get "b" byte */
- n = UUDEC(c);
- filter->cache |= (n << 8);
- filter->status = uudec_state_c;
- break;
- case uudec_state_c:
- /* get "c" byte */
- n = UUDEC(c);
- filter->cache |= n;
- filter->status = uudec_state_d;
- break;
- case uudec_state_d:
- /* get "d" byte */
- {
- int A, B, C, D = UUDEC(c);
- A = (filter->cache >> 16) & 0xff;
- B = (filter->cache >> 8) & 0xff;
- C = (filter->cache) & 0xff;
- n = (filter->cache >> 24) & 0xff;
- if (n-- > 0)
- CK((*filter->output_function)( (A << 2) | (B >> 4), filter->data TSRMLS_CC));
- if (n-- > 0)
- CK((*filter->output_function)( (B << 4) | (C >> 2), filter->data TSRMLS_CC));
- if (n-- > 0)
- CK((*filter->output_function)( (C << 6) | D, filter->data TSRMLS_CC));
- filter->cache = n << 24;
-
- if (n == 0)
- filter->status = uudec_state_skip_newline; /* skip next byte (newline) */
- else
- filter->status = uudec_state_a; /* go back to fetch "A" byte */
- }
- break;
- case uudec_state_skip_newline:
- /* skip newline */
- filter->status = uudec_state_size;
- }
- return c;
-}
-
-/*
- * any => BASE64
- */
-static const unsigned char mbfl_base64_table[] =
-{
- /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */
- 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
- /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */
- 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,
- /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */
- 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
- /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */
- 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,
- /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0' */
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2f,0x00
-};
-
-#define MBFL_BASE64_STS_MIME_HEADER 0x1000000
-
-static int
-mbfl_filt_conv_base64enc(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- n = (filter->status & 0xff);
- if (n == 0) {
- filter->status++;
- filter->cache = (c & 0xff) << 16;
- } else if (n == 1) {
- filter->status++;
- filter->cache |= (c & 0xff) << 8;
- } else {
- filter->status &= ~0xff;
- if ((filter->status & MBFL_BASE64_STS_MIME_HEADER) == 0) {
- n = (filter->status & 0xff00) >> 8;
- if (n > 72) {
- CK((*filter->output_function)(0x0d, filter->data TSRMLS_CC)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data TSRMLS_CC)); /* LF */
- filter->status &= ~0xff00;
- }
- filter->status += 0x400;
- }
- n = filter->cache | (c & 0xff);
- CK((*filter->output_function)(mbfl_base64_table[(n >> 18) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(n >> 12) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(n >> 6) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[n & 0x3f], filter->data TSRMLS_CC));
- }
-
- return c;
-}
-
-static int
-mbfl_filt_conv_base64enc_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- int status, cache, len;
-
- status = filter->status & 0xff;
- cache = filter->cache;
- len = (filter->status & 0xff00) >> 8;
- filter->status &= ~0xffff;
- filter->cache = 0;
- /* flush fragments */
- if (status >= 1) {
- if ((filter->status & MBFL_BASE64_STS_MIME_HEADER) == 0) {
- if (len > 72){
- CK((*filter->output_function)(0x0d, filter->data TSRMLS_CC)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data TSRMLS_CC)); /* LF */
- }
- }
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 18) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 12) & 0x3f], filter->data TSRMLS_CC));
- if (status == 1) {
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- } else {
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 6) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- }
- }
- return 0;
-}
-
-/*
- * BASE64 => any
- */
-static int
-mbfl_filt_conv_base64dec(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (c == 0x0d || c == 0x0a || c == 0x20 || c == 0x09 || c == 0x3d) { /* CR or LF or SPACE or HTAB or '=' */
- return c;
- }
-
- n = 0;
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = c - 65;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = c - 71;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = c + 4;
- } else if (c == 0x2b) { /* '+' */
- n = 62;
- } else if (c == 0x2f) { /* '/' */
- n = 63;
- }
- n &= 0x3f;
-
- switch (filter->status) {
- case 0:
- filter->status = 1;
- filter->cache = n << 18;
- break;
- case 1:
- filter->status = 2;
- filter->cache |= n << 12;
- break;
- case 2:
- filter->status = 3;
- filter->cache |= n << 6;
- break;
- default:
- filter->status = 0;
- n |= filter->cache;
- CK((*filter->output_function)((n >> 16) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(n & 0xff, filter->data TSRMLS_CC));
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_conv_base64dec_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- if (status >= 2) {
- CK((*filter->output_function)((cache >> 16) & 0xff, filter->data TSRMLS_CC));
- if (status >= 3) {
- CK((*filter->output_function)((cache >> 8) & 0xff, filter->data TSRMLS_CC));
- }
- }
- return 0;
-}
-
-/*
- * any => Quoted-Printable
- */
-#define MBFL_QPRINT_STS_MIME_HEADER 0x1000000
-
-static int
-mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- switch (filter->status & 0xff) {
- case 0:
- filter->cache = c;
- filter->status++;
- break;
- default:
- s = filter->cache;
- filter->cache = c;
- n = (filter->status & 0xff00) >> 8;
-
- if (s == 0) { /* null */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- filter->status &= ~0xff00;
- break;
- }
-
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) {
- if (s == 0x0a || (s == 0x0d && c != 0x0a)) { /* line feed */
- CK((*filter->output_function)(0x0d, filter->data TSRMLS_CC)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data TSRMLS_CC)); /* LF */
- filter->status &= ~0xff00;
- break;
- } else if (s == 0x0d) {
- break;
- }
- }
-
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0 && n >= 72) { /* soft line feed */
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- CK((*filter->output_function)(0x0d, filter->data TSRMLS_CC)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data TSRMLS_CC)); /* LF */
- filter->status &= ~0xff00;
- }
-
- if (s <= 0 || s >= 0x80 || s == 0x3d /* not ASCII or '=' */
- || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) != 0 &&
- (mbfl_charprop_table[s] & MBFL_CHP_MMHQENC) != 0)) {
- /* hex-octet */
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- n = (s >> 4) & 0xf;
- if (n < 10) {
- n += 48; /* '0' */
- } else {
- n += 55; /* 'A' - 10 */
- }
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- n = s & 0xf;
- if (n < 10) {
- n += 48;
- } else {
- n += 55;
- }
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) {
- filter->status += 0x300;
- }
- } else {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) {
- filter->status += 0x100;
- }
- }
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_conv_qprintenc_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- /* flush filter cache */
- (*filter->filter_function)('\0', filter TSRMLS_CC);
- filter->status &= ~0xffff;
- filter->cache = 0;
- return 0;
-}
-
-/*
- * Quoted-Printable => any
- */
-static int
-mbfl_filt_conv_qprintdec(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- switch (filter->status) {
- case 1:
- if ((c >= 0x30 && c <= 0x39) || (c >= 0x41 && c <= 0x46)) { /* 0 - 9 or A - F */
- filter->cache = c;
- filter->status = 2;
- } else if (c == 0x0d) { /* soft line feed */
- filter->status = 3;
- } else if (c == 0x0a) { /* soft line feed */
- filter->status = 0;
- } else {
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- }
- break;
- case 2:
- n = filter->cache;
- if (n >= 0x30 && n <= 0x39) { /* '0' - '9' */
- n -= 48; /* 48 = '0' */
- } else {
- n -= 55; /* 55 = 'A' - 10 */
- }
- n <<= 4;
- if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
- n += (c - 48);
- } else if (c >= 0x41 && c <= 0x46) { /* 'A' - 'F' */
- n += (c - 55);
- } else {
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- CK((*filter->output_function)(filter->cache, filter->data TSRMLS_CC));
- n = c;
- }
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- filter->status = 0;
- break;
- case 3:
- if (c != 0x0a) { /* LF */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- }
- filter->status = 0;
- break;
- default:
- if (c == 0x3d) { /* '=' */
- filter->status = 1;
- } else {
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- }
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_conv_qprintdec_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- if (status == 1) {
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- } else if (status == 2) {
- CK((*filter->output_function)(0x3d, filter->data TSRMLS_CC)); /* '=' */
- CK((*filter->output_function)(cache, filter->data TSRMLS_CC));
- }
-
- return 0;
-}
-
-
-/*
- * UCS-4 => wchar
- */
-static int
-mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 24;
- }
- filter->cache = n;
- filter->status++;
- break;
- case 1:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = (c & 0xff) << 16;
- }
- filter->cache |= n;
- filter->status++;
- break;
- case 2:
- if (endian) {
- n = (c & 0xff) << 16;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache |= n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 24;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache;
- if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data TSRMLS_CC));
- } else {
- filter->status &= ~0xff;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UCS-4BE
- */
-static int
-mbfl_filt_conv_wchar_ucs4be(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * wchar => UCS-4LE
- */
-static int
-mbfl_filt_conv_wchar_ucs4le(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * UCS-2 => wchar
- */
-static int
-mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache = n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache;
- if (n == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data TSRMLS_CC));
- } else {
- filter->status &= ~0xff;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UCS-2BE
- */
-static int
-mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * wchar => UCS-2LE
- */
-static int
-mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * UTF-16 => wchar
- */
-static int
-mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache |= n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache & 0xffff;
- filter->status &= ~0xff;
- if (n == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data TSRMLS_CC));
- } else if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * UTF-16BE => wchar
- */
-static int
-mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- switch (filter->status) {
- case 0:
- filter->status = 1;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- break;
- default:
- filter->status = 0;
- n = (filter->cache & 0xff00) | (c & 0xff);
- if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-16BE
- */
-static int
-mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- n = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(n & 0xff, filter->data TSRMLS_CC));
- n = (c & 0x3ff) | 0xdc00;
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(n & 0xff, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * UTF-16LE => wchar
- */
-static int
-mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- switch (filter->status) {
- case 0:
- filter->status = 1;
- n = c & 0xff;
- filter->cache |= n;
- break;
- default:
- filter->status = 0;
- n = (filter->cache & 0xff) | ((c & 0xff) << 8);
- if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(n, filter->data TSRMLS_CC));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-16LE
- */
-static int
-mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n;
-
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data TSRMLS_CC));
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- n = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->output_function)(n & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data TSRMLS_CC));
- n = (c & 0x3ff) | 0xdc00;
- CK((*filter->output_function)(n & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * UTF-8 => wchar
- */
-static int
-mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c < 0x80) {
- if (c >= 0) {
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- }
- filter->status = 0;
- } else if (c < 0xc0) {
- switch (filter->status & 0xff) {
- case 0x10: /* 2byte code 2nd char */
- case 0x21: /* 3byte code 3rd char */
- case 0x32: /* 4byte code 4th char */
- case 0x43: /* 5byte code 5th char */
- case 0x54: /* 6byte code 6th char */
- filter->status = 0;
- s = filter->cache | (c & 0x3f);
- if (s >= 0x80) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
- case 0x20: /* 3byte code 2nd char */
- case 0x31: /* 4byte code 3rd char */
- case 0x42: /* 5byte code 4th char */
- case 0x53: /* 6byte code 5th char */
- filter->cache |= ((c & 0x3f) << 6);
- filter->status++;
- break;
- case 0x30: /* 4byte code 2nd char */
- case 0x41: /* 5byte code 3rd char */
- case 0x52: /* 6byte code 4th char */
- filter->cache |= ((c & 0x3f) << 12);
- filter->status++;
- break;
- case 0x40: /* 5byte code 2nd char */
- case 0x51: /* 6byte code 3rd char */
- filter->cache |= ((c & 0x3f) << 18);
- filter->status++;
- break;
- case 0x50: /* 6byte code 2nd char */
- filter->cache |= ((c & 0x3f) << 24);
- filter->status++;
- break;
- default:
- filter->status = 0;
- break;
- }
- } else if (c < 0xe0) { /* 2byte code first char */
- filter->status = 0x10;
- filter->cache = (c & 0x1f) << 6;
- } else if (c < 0xf0) { /* 3byte code first char */
- filter->status = 0x20;
- filter->cache = (c & 0xf) << 12;
- } else if (c < 0xf8) { /* 4byte code first char */
- filter->status = 0x30;
- filter->cache = (c & 0x7) << 18;
- } else if (c < 0xfc) { /* 5byte code first char */
- filter->status = 0x40;
- filter->cache = (c & 0x3) << 24;
- } else if (c < 0xfe) { /* 6 byte code first char */
- filter->status = 0x50;
- filter->cache = (c & 0x1) << 30;
- } else {
- filter->status = 0;
- filter->cache = 0;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-8
- */
-static int
-mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- if (c < 0x80) {
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c < 0x800) {
- CK((*filter->output_function)(((c >> 6) & 0x1f) | 0xc0, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data TSRMLS_CC));
- } else if (c < 0x10000) {
- CK((*filter->output_function)(((c >> 12) & 0x0f) | 0xe0, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data TSRMLS_CC));
- } else if (c < 0x200000) {
- CK((*filter->output_function)(((c >> 18) & 0x07) | 0xf0, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data TSRMLS_CC));
- } else if (c < 0x4000000) {
- CK((*filter->output_function)(((c >> 24) & 0x03) | 0xf8, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 18) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data TSRMLS_CC));
- } else {
- CK((*filter->output_function)(((c >> 30) & 0x01) | 0xfc, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 24) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 18) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * UTF-7 => wchar
- */
-static int
-mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- n = -1;
- if (filter->status != 0) { /* Modified Base64 */
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = c - 65;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = c - 71;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = c + 4;
- } else if (c == 0x2b) { /* '+' */
- n = 62;
- } else if (c == 0x2f) { /* '/' */
- n = 63;
- }
- if (n < 0 || n > 63) {
- if (c == 0x2d) {
- if (filter->status == 1) { /* "+-" -> "+" */
- CK((*filter->output_function)(0x2b, filter->data TSRMLS_CC));
- }
- } else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- filter->cache = 0;
- filter->status = 0;
- return c;
- }
- }
-
- switch (filter->status) {
- /* directly encoded characters */
- case 0:
- if (c == 0x2b) { /* '+' shift character */
- filter->status = 1;
- } else if (c >= 0 && c < 0x80) { /* ASCII */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- /* decode Modified Base64 */
- case 1:
- case 2:
- filter->cache |= n << 10;
- filter->status = 3;
- break;
- case 3:
- filter->cache |= n << 4;
- filter->status = 4;
- break;
- case 4:
- s = ((n >> 2) & 0xf) | (filter->cache & 0xffff);
- n = (n & 0x3) << 14;
- filter->status = 5;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- case 5:
- filter->cache |= n << 8;
- filter->status = 6;
- break;
- case 6:
- filter->cache |= n << 2;
- filter->status = 7;
- break;
- case 7:
- s = ((n >> 4) & 0x3) | (filter->cache & 0xffff);
- n = (n & 0xf) << 12;
- filter->status = 8;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- case 8:
- filter->cache |= n << 6;
- filter->status = 9;
- break;
- case 9:
- s = n | (filter->cache & 0xffff);
- filter->status = 2;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000);
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-7
- */
-static int
-mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- n = 0;
- if (c >= 0 && c < 0x80) { /* ASCII */
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = 1;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = 1;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = 1;
- } else if (c == '\0') { /* '\0' */
- n = 1;
- } else if (c == 0x2f) { /* '/' */
- n = 1;
- } else if (c == 0x2d) { /* '-' */
- n = 1;
- } else if (c == 0x20) { /* SPACE */
- n = 2;
- } else if (c == 0x09) { /* HTAB */
- n = 2;
- } else if (c == 0x0d) { /* CR */
- n = 2;
- } else if (c == 0x0a) { /* LF */
- n = 2;
- } else if (c == 0x27) { /* "'" */
- n = 2;
- } else if (c == 0x28) { /* '(' */
- n = 2;
- } else if (c == 0x29) { /* ')' */
- n = 2;
- } else if (c == 0x2c) { /* ',' */
- n = 2;
- } else if (c == 0x2e) { /* '.' */
- n = 2;
- } else if (c == 0x3a) { /* ':' */
- n = 2;
- } else if (c == 0x3f) { /* '?' */
- n = 2;
- }
- } else if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- ;
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- s = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->filter_function)(s, filter TSRMLS_CC));
- s = (c & 0x3ff) | 0xdc00;
- CK((*filter->filter_function)(s, filter TSRMLS_CC));
- return c;
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- return c;
- }
-
- switch (filter->status) {
- case 0:
- if (n != 0) { /* directly encode characters */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else { /* Modified Base64 */
- CK((*filter->output_function)(0x2b, filter->data TSRMLS_CC)); /* '+' */
- filter->status++;
- filter->cache = c;
- }
- break;
-
- /* encode Modified Base64 */
- case 1:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_base64_table[(s >> 10) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 4) & 0x3f], filter->data TSRMLS_CC));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_base64_table[(s << 2) & 0x3c], filter->data TSRMLS_CC));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = ((s & 0xf) << 16) | c;
- }
- break;
-
- case 2:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_base64_table[(s >> 14) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 8) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 2) & 0x3f], filter->data TSRMLS_CC));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_base64_table[(s << 4) & 0x30], filter->data TSRMLS_CC));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = ((s & 0x3) << 16) | c;
- }
- break;
-
- case 3:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_base64_table[(s >> 12) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 6) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[s & 0x3f], filter->data TSRMLS_CC));
- if (n != 0) {
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else {
- filter->status = 1;
- filter->cache = c;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-
-}
-
-static int
-mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- switch (status) {
- case 1:
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 10) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 4) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache << 2) & 0x3c], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- break;
-
- case 2:
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 14) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 8) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 2) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache << 4) & 0x30], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- break;
-
- case 3:
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 12) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 6) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_base64_table[cache & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- break;
- }
- return 0;
-}
-
-
-/*
- * UTF7-IMAP => wchar
- */
-static int
-mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- n = -1;
- if (filter->status != 0) { /* Modified Base64 */
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = c - 65;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = c - 71;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = c + 4;
- } else if (c == 0x2b) { /* '+' */
- n = 62;
- } else if (c == 0x2c) { /* ',' */
- n = 63;
- }
- if (n < 0 || n > 63) {
- if (c == 0x2d) {
- if (filter->status == 1) { /* "&-" -> "&" */
- CK((*filter->output_function)(0x26, filter->data TSRMLS_CC));
- }
- } else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- filter->cache = 0;
- filter->status = 0;
- return c;
- }
- }
-
- switch (filter->status) {
- /* directly encoded characters */
- case 0:
- if (c == 0x26) { /* '&' shift character */
- filter->status++;
- } else if (c >= 0 && c < 0x80) { /* ASCII */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- /* decode Modified Base64 */
- case 1:
- case 2:
- filter->cache |= n << 10;
- filter->status = 3;
- break;
- case 3:
- filter->cache |= n << 4;
- filter->status = 4;
- break;
- case 4:
- s = ((n >> 2) & 0xf) | (filter->cache & 0xffff);
- n = (n & 0x3) << 14;
- filter->status = 5;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- case 5:
- filter->cache |= n << 8;
- filter->status = 6;
- break;
- case 6:
- filter->cache |= n << 2;
- filter->status = 7;
- break;
- case 7:
- s = ((n >> 4) & 0x3) | (filter->cache & 0xffff);
- n = (n & 0xf) << 12;
- filter->status = 8;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- case 8:
- filter->cache |= n << 6;
- filter->status = 9;
- break;
- case 9:
- s = n | (filter->cache & 0xffff);
- filter->status = 2;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000);
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static const unsigned char mbfl_utf7imap_base64_table[] =
-{
- /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */
- 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
- /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */
- 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,
- /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */
- 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
- /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */
- 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,
- /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', ',', '\0' */
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2c,0x00
-};
-
-/*
- * wchar => UTF7-IMAP
- */
-static int
-mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int n, s;
-
- n = 0;
- if (c == 0x26) {
- n = 1;
- } else if ((c >= 0x20 && c <= 0x7e) || c == 0) {
- n = 2;
- } else if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- ;
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- s = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->filter_function)(s, filter TSRMLS_CC));
- s = (c & 0x3ff) | 0xdc00;
- CK((*filter->filter_function)(s, filter TSRMLS_CC));
- return c;
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- return c;
- }
-
- switch (filter->status) {
- case 0:
- if (n != 0) { /* directly encode characters */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- } else { /* Modified Base64 */
- CK((*filter->output_function)(0x26, filter->data TSRMLS_CC)); /* '&' */
- filter->status = 1;
- filter->cache = c;
- }
- break;
-
- /* encode Modified Base64 */
- case 1:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 10) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 4) & 0x3f], filter->data TSRMLS_CC));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 2) & 0x3c], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- filter->status = 0;
- } else {
- filter->status = 2;
- filter->cache = ((s & 0xf) << 16) | c;
- }
- break;
-
- case 2:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 14) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 8) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 2) & 0x3f], filter->data TSRMLS_CC));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 4) & 0x30], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- filter->status = 0;
- } else {
- filter->status = 3;
- filter->cache = ((s & 0x3) << 16) | c;
- }
- break;
-
- case 3:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 12) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 6) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[s & 0x3f], filter->data TSRMLS_CC));
- if (n != 0) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- }
- filter->status = 0;
- } else {
- filter->status = 1;
- filter->cache = c;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-
-}
-
-static int
-mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- switch (status) {
- case 1:
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 10) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 4) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 2) & 0x3c], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- break;
-
- case 2:
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 14) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 8) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 2) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 4) & 0x30], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- break;
-
- case 3:
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 12) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 6) & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[cache & 0x3f], filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x2d, filter->data TSRMLS_CC)); /* '-' */
- break;
- }
- return 0;
-}
-
-
-/*
- * wchar => ASCII
- */
-static int
-mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < 0x80) {
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * wchar => cp1252
- */
-static int
-mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s=-1, n;
-
- if (c >= 0x100) {
- /* look it up from the cp1252 table */
- s = -1;
- n = 31;
- while (n >= 0) {
- if (c == cp1252_ucs_table[n] && c != 0xfffe) {
- s = 0x80 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_1)
- {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
- else if (c >= 0 && c < 0x100) {
- s = c;
- }
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
- return c;
-}
-
-/*
- * cp1252 => wchar
- */
-static int
-mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0x80 && c < 0xa0) {
- s = cp1252_ucs_table[c - 0x80];
- } else {
- s = c;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-1
- */
-static int
-mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (c >= 0 && c < 0x100) {
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-2 => wchar
- */
-static int
-mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_2_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_2;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-2
- */
-static int
-mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_2_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_2) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-3 => wchar
- */
-static int
-mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_3_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_3;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-3
- */
-static int
-mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_3_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_3) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-4 => wchar
- */
-static int
-mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_4_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_4;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-4
- */
-static int
-mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_4_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_4) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-5 => wchar
- */
-static int
-mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_5_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_5;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-5
- */
-static int
-mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_5_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_5) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-6 => wchar
- */
-static int
-mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_6_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_6;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-6
- */
-static int
-mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_6_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_6) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-7 => wchar
- */
-static int
-mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_7_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_7;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-7
- */
-static int
-mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_7_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_7) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-8 => wchar
- */
-static int
-mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_8_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_8;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-8
- */
-static int
-mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_8_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_8) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-9 => wchar
- */
-static int
-mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_9_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_9;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-9
- */
-static int
-mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_9_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_9) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-10 => wchar
- */
-static int
-mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_10_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_10;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-10
- */
-static int
-mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_10_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_10) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-13 => wchar
- */
-static int
-mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_13_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_13;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-13
- */
-static int
-mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_13_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_13) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-14 => wchar
- */
-static int
-mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_14_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_14;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-14
- */
-static int
-mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_14_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_14) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * ISO-8859-15 => wchar
- */
-static int
-mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_15_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_15;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-15
- */
-static int
-mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_15_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_15) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-
-/*
- *
- * identify filter functions
- *
- */
-
-static void
-mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter TSRMLS_DC)
-{
- filter->status = 0;
- filter->flag = 0;
-}
-
-static void
-mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter TSRMLS_DC)
-{
- filter->status = 0;
-}
-
-static int
-mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (c >= 0x20 && c < 0x80) {
- ;
- } else if (c == 0x0d || c == 0x0a || c == 0x09 || c == 0) { /* CR or LF or HTAB or null */
- ;
- } else {
- filter->flag = 1;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (c < 0x80) {
- if (c < 0) {
- filter->flag = 1; /* bad */
- } else if (c != 0 && filter->status) {
- filter->flag = 1; /* bad */
- }
- filter->status = 0;
- } else if (c < 0xc0) {
- switch (filter->status) {
- case 0x20: /* 3 byte code 2nd char */
- case 0x30: /* 4 byte code 2nd char */
- case 0x31: /* 4 byte code 3rd char */
- case 0x40: /* 5 byte code 2nd char */
- case 0x41: /* 5 byte code 3rd char */
- case 0x42: /* 5 byte code 4th char */
- case 0x50: /* 6 byte code 2nd char */
- case 0x51: /* 6 byte code 3rd char */
- case 0x52: /* 6 byte code 4th char */
- case 0x53: /* 6 byte code 5th char */
- filter->status++;
- break;
- case 0x10: /* 2 byte code 2nd char */
- case 0x21: /* 3 byte code 3rd char */
- case 0x32: /* 4 byte code 4th char */
- case 0x43: /* 5 byte code 5th char */
- case 0x54: /* 6 byte code 6th char */
- filter->status = 0;
- break;
- default:
- filter->flag = 1; /* bad */
- filter->status = 0;
- break;
- }
- } else {
- if (filter->status) {
- filter->flag = 1; /* bad */
- }
- filter->status = 0;
- if (c < 0xe0) { /* 2 byte code first char */
- filter->status = 0x10;
- } else if (c < 0xf0) { /* 3 byte code 1st char */
- filter->status = 0x20;
- } else if (c < 0xf8) { /* 4 byte code 1st char */
- filter->status = 0x30;
- } else if (c < 0xfc) { /* 5 byte code 1st char */
- filter->status = 0x40;
- } else if (c < 0xfe) { /* 6 byte code 1st char */
- filter->status = 0x50;
- } else {
- filter->flag = 1; /* bad */
- }
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- int n;
-
- switch (filter->status) {
- /* directly encoded characters */
- case 0:
- if (c == 0x2b) { /* '+' shift character */
- filter->status++;
- } else if (c == 0x5c || c == 0x7e || c < 0 || c > 0x7f) { /* illegal character */
- filter->flag = 1; /* bad */
- }
- break;
-
- /* Modified Base64 */
- case 1:
- case 2:
- n = 0;
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = 1;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = 1;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = 1;
- } else if (c == 0x2b) { /* '+' */
- n = 1;
- } else if (c == 0x2f) { /* '/' */
- n = 1;
- }
- if (n <= 0) {
- if (filter->status == 1 && c != 0x2d) {
- filter->flag = 1; /* bad */
- } else if (c < 0 || c > 0x7f) {
- filter->flag = 1; /* bad */
- }
- filter->status = 0;
- } else {
- filter->status = 2;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-#if defined(HAVE_MBSTR_JA)
-static int
-mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* kanji first char */
- filter->status = 1;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got first half */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 2: /* got 0x8e */
- if (c < 0xa1 || c > 0xdf) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 3: /* got 0x8f */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status++;
- break;
- case 4: /* got 0x8f */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0xa0 && c < 0xe0) { /* kana ok */
- ;
- } else if (c > 0x80 && c < 0xf0 && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_sjiswin(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0xa0 && c < 0xe0) { /* kana ok */
- ;
- } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: X 0201 latin */
-/* case 0x20: X 0201 kana */
-/* case 0x80: X 0208 */
-/* case 0x90: X 0212 */
- case 0:
- if (c == 0x1b) {
- filter->status += 2;
- } else if (c == 0x0e) { /* "kana in" */
- filter->status = 0x20;
- } else if (c == 0x0f) { /* "kana out" */
- filter->status = 0;
- } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x81: X 0208 second char */
-/* case 0x91: X 0212 second char */
- case 1:
- filter->status &= ~0xf;
- if (c == 0x1b) {
- goto retry;
- } else if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- break;
-
- /* ESC */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else if (c == 0x28) { /* '(' */
- filter->status += 3;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ */
- case 3:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x28) { /* '(' */
- filter->status++;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ ( */
- case 4:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x44) { /* 'D' */
- filter->status = 0x90;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC ( */
- case 5:
- if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */
- filter->status = 0;
- } else if (c == 0x4a) { /* 'J' */
- filter->status = 0x10;
- } else if (c == 0x49) { /* 'I' */
- filter->status = 0x20;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-#endif /* HAVE_MBSTR_JA */
-
-#if defined(HAVE_MBSTR_CN)
-static int
-mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || c > 0xfe || c == 0x7f) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0x80 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: GB2312 */
- case 0:
- if (c == 0x7e) {
- filter->status += 2;
- } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x11: GB2312 second char */
- case 1:
- filter->status &= ~0xf;
- if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 2:
- if (c == 0x7d) { /* '}' */
- filter->status = 0;
- } else if (c == 0x7b) { /* '{' */
- filter->status = 0x10;
- } else if (c == 0x7e) { /* '~' */
- filter->status = 0;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-#endif /* HAVE_MBSTR_CN */
-
-#if defined(HAVE_MBSTR_TW)
-static int
-mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else if (c == 0x8e) { /* DBCS lead byte */
- filter->status = 2;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 2: /* got lead byte */
- if (c >= 0xa1 && c < 0xaf) { /* ok */
- filter->status = 3;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
- case 3: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 4;
- break;
-
- case 4: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || (c > 0x7e && c < 0xa1) ||c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-#endif /* HAVE_MBSTR_TW */
-
-#if defined(HAVE_MBSTR_KR)
-static int
-mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c >= 0x81 && c <= 0xa0) { /* dbcs first char */
- filter->status= 1;
- } else if (c >= 0xa1 && c <= 0xc6) { /* dbcs first char */
- filter->status= 2;
- } else if (c >= 0xc7 && c <= 0xfe) { /* dbcs first char */
- filter->status= 3;
- } else { /* bad */
- filter->flag = 1;
- }
-
- case 1:
- case 2:
- if (c < 0x41 || (c > 0x5a && c < 0x61)
- || (c > 0x7a && c < 0x81) || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 3:
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static int
-mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: KSC5601 mode */
-/* case 0x20: KSC5601 DBCS */
-/* case 0x40: KSC5601 SBCS */
- case 0:
- if (!(filter->status & 0x10)) {
- if (c == 0x1b)
- filter->status += 2;
- } else if (filter->status == 0x20 && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x21: KSC5601 second char */
- case 1:
- filter->status &= ~0xf;
- if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- break;
-
- /* ESC */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ */
- case 3:
- if (c == 0x29) { /* ')' */
- filter->status++;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $) */
- case 5:
- if (c == 0x43) { /* 'C' */
- filter->status = 0x10;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-#endif /* HAVE_MBSTR_KR */
-
-
-/* We only distinguish the MS extensions to ISO-8859-1.
- * Actually, this is pretty much a NO-OP, since the identification
- * system doesn't allow us to discriminate between a positive match,
- * a possible match and a definite non-match.
- * The problem here is that cp1252 looks like SJIS for certain chars.
- * */
-static int
-mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (c >= 0x80 && c < 0xa0)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-
-#if defined(HAVE_MBSTR_RU)
-// all of this is so ugly now!
-static int
-mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xff)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-
-static int
-mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xff)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-
-static int
-mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xff)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-#endif /* HAVE_MBSTR_RU */
-
-static int
-mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: X 0201 latin */
-/* case 0x80: X 0208 */
- case 0:
- if (c == 0x1b) {
- filter->status += 2;
- } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x81: X 0208 second char */
- case 1:
- if (c == 0x1b) {
- filter->status++;
- } else {
- filter->status &= ~0xf;
- if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- }
- break;
-
- /* ESC */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else if (c == 0x28) { /* '(' */
- filter->status += 3;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ */
- case 3:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC ( */
- case 5:
- if (c == 0x42) { /* 'B' */
- filter->status = 0;
- } else if (c == 0x4a) { /* 'J' */
- filter->status = 0x10;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static void
-mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter TSRMLS_DC)
-{
- filter->status = 0;
- filter->flag = 1;
-}
-
-static int
-mbfl_filt_ident_false(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- filter->flag = 1; /* bad */
- return c;
-}
-
-static int
-mbfl_filt_ident_true(int c, mbfl_identify_filter *filter TSRMLS_DC)
-{
- return c;
-}
-
-
-
-/*
- * convert filter
- */
-
-/* setup filter function table */
-static void
-mbfl_convert_filter_set_vtbl(mbfl_convert_filter *filter, struct mbfl_convert_vtbl *vtbl)
-{
- if (filter && vtbl) {
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- filter->filter_flush = vtbl->filter_flush;
- }
-}
-
-
-static struct mbfl_convert_vtbl *
-mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to)
-{
- struct mbfl_convert_vtbl *vtbl;
- int i;
-
- if (to == mbfl_no_encoding_base64 ||
- to == mbfl_no_encoding_qprint ||
- to == mbfl_no_encoding_7bit) {
- from = mbfl_no_encoding_8bit;
- } else if (from == mbfl_no_encoding_base64 ||
- from == mbfl_no_encoding_qprint ||
- from == mbfl_no_encoding_uuencode) {
- to = mbfl_no_encoding_8bit;
- }
-
- i = 0;
- while ((vtbl = mbfl_convert_filter_list[i++]) != NULL){
- if (vtbl->from == from && vtbl->to == to) {
- return vtbl;
- }
- }
-
- return NULL;
-}
-
-
-static void
-mbfl_convert_filter_select_vtbl(mbfl_convert_filter *filter)
-{
- struct mbfl_convert_vtbl *vtbl;
-
- vtbl = mbfl_convert_filter_get_vtbl(filter->from->no_encoding, filter->to->no_encoding);
- if (vtbl == NULL) {
- vtbl = &vtbl_pass;
- }
- mbfl_convert_filter_set_vtbl(filter, vtbl);
-}
-
-
-/* filter pipe */
-static int
-mbfl_filter_output_pipe(int c, void* data TSRMLS_DC)
-{
- mbfl_convert_filter *filter = (mbfl_convert_filter*)data;
- return (*filter->filter_function)(c, filter TSRMLS_CC);
-}
-
-
-/* null output */
-static int
-mbfl_filter_output_null(int c, void* data TSRMLS_DC)
-{
- return c;
-}
-
-
-mbfl_convert_filter *
-mbfl_convert_filter_new(
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to,
- int (*output_function)(int, void* TSRMLS_DC),
- int (*flush_function)(void* TSRMLS_DC),
- void* data TSRMLS_DC)
-{
- mbfl_convert_filter * filter;
-
- /* allocate */
- filter = (mbfl_convert_filter *)mbfl_malloc(sizeof(mbfl_convert_filter));
- if (filter == NULL) {
- return NULL;
- }
-
- /* encoding structure */
- filter->from = mbfl_no2encoding(from);
- filter->to = mbfl_no2encoding(to);
- if (filter->from == NULL) {
- filter->from = &mbfl_encoding_pass;
- }
- if (filter->to == NULL) {
- filter->to = &mbfl_encoding_pass;
- }
-
- if (output_function != NULL) {
- filter->output_function = output_function;
- } else {
- filter->output_function = mbfl_filter_output_null;
- }
- filter->flush_function = flush_function;
- filter->data = data;
- filter->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- filter->illegal_substchar = 0x3f; /* '?' */
-
- /* setup the function table */
- mbfl_convert_filter_select_vtbl(filter);
-
- /* constructor */
- (*filter->filter_ctor)(filter TSRMLS_CC);
-
- return filter;
-}
-
-void
-mbfl_convert_filter_delete(mbfl_convert_filter *filter TSRMLS_DC)
-{
- if (filter) {
- (*filter->filter_dtor)(filter TSRMLS_CC);
- mbfl_free((void*)filter);
- }
-}
-
-int
-mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- return (*filter->filter_function)(c, filter TSRMLS_CC);
-}
-
-int
-mbfl_convert_filter_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- (*filter->filter_flush)(filter TSRMLS_CC);
- return (filter->flush_function ? (*filter->flush_function)(filter->data TSRMLS_CC) : 0);
-}
-
-void
-mbfl_convert_filter_reset(
- mbfl_convert_filter *filter,
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to TSRMLS_DC)
-{
- /* destruct old filter */
- (*filter->filter_dtor)(filter TSRMLS_CC);
-
- /* resset filter member */
- filter->from = mbfl_no2encoding(from);
- filter->to = mbfl_no2encoding(to);
-
- /* set the vtbl */
- mbfl_convert_filter_select_vtbl(filter);
-
- /* construct new filter */
- (*filter->filter_ctor)(filter TSRMLS_CC);
-}
-
-void
-mbfl_convert_filter_copy(
- mbfl_convert_filter *src,
- mbfl_convert_filter *dist TSRMLS_DC)
-{
- dist->filter_ctor = src->filter_ctor;
- dist->filter_dtor = src->filter_dtor;
- dist->filter_function = src->filter_function;
- dist->filter_flush = src->filter_flush;
- dist->output_function = src->output_function;
- dist->flush_function = src->flush_function;
- dist->data = src->data;
- dist->status = src->status;
- dist->cache = src->cache;
- dist->from = src->from;
- dist->to = src->to;
- dist->illegal_mode = src->illegal_mode;
- dist->illegal_substchar = src->illegal_substchar;
-}
-
-static int
-mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src
- TSRMLS_DC)
-{
- int n;
- unsigned char *p;
-
- p = src->buffer;
- n = src->pos;
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter TSRMLS_CC) < 0) {
- return -1;
- }
- n--;
- }
-
- return n;
-}
-
-static int
-mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p TSRMLS_DC)
-{
- int c;
-
- while ((c = *p++) != '\0') {
- if ((*filter->filter_function)(c, filter TSRMLS_CC) < 0) {
- return -1;
- }
- }
-
- return 0;
-}
-
-#if 0
-static int
-mbfl_convert_filter_strncat(mbfl_convert_filter *filter, const unsigned char *p,
- int n TSRMLS_DC)
-{
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter TSRMLS_CC) < 0) {
- return -1;
- }
- n--;
- }
-
- return n;
-}
-#endif
-
-/* hex character table "0123456789ABCDEF" */
-static char mbfl_hexchar_table[] = {
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
-};
-
-/* illegal character output function for conv-filter */
-int
-mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int mode_backup, ret, n, m, r;
-
- ret = 0;
- mode_backup = filter->illegal_mode;
- filter->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE;
- switch (mode_backup) {
- case MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR:
- ret = (*filter->filter_function)(filter->illegal_substchar, filter TSRMLS_CC);
- break;
- case MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG:
- if (c >= 0) {
- if (c < MBFL_WCSGROUP_UCS4MAX) { /* unicode */
- ret = mbfl_convert_filter_strcat(filter, "U+" TSRMLS_CC);
- } else {
- if (c < MBFL_WCSGROUP_WCHARMAX) {
- m = c & ~MBFL_WCSPLANE_MASK;
- switch (m) {
- case MBFL_WCSPLANE_JIS0208:
- ret = mbfl_convert_filter_strcat(filter, "JIS+" TSRMLS_CC);
- break;
- case MBFL_WCSPLANE_JIS0212:
- ret = mbfl_convert_filter_strcat(filter, "JIS2+" TSRMLS_CC);
- break;
- case MBFL_WCSPLANE_WINCP932:
- ret = mbfl_convert_filter_strcat(filter, "W932+" TSRMLS_CC);
- break;
- case MBFL_WCSPLANE_8859_1:
- ret = mbfl_convert_filter_strcat(filter, "I8859_1+" TSRMLS_CC);
- break;
- default:
- ret = mbfl_convert_filter_strcat(filter, "?+" TSRMLS_CC);
- break;
- }
- c &= MBFL_WCSPLANE_MASK;
- } else {
- ret = mbfl_convert_filter_strcat(filter, "BAD+" TSRMLS_CC);
- c &= MBFL_WCSGROUP_MASK;
- }
- }
- if (ret >= 0) {
- m = 0;
- r = 28;
- while (r >= 0) {
- n = (c >> r) & 0xf;
- if (n || m) {
- m = 1;
- ret = (*filter->filter_function)(mbfl_hexchar_table[n], filter TSRMLS_CC);
- if (ret < 0) {
- break;
- }
- }
- r -= 4;
- }
- if (m == 0 && ret >= 0) {
- ret = (*filter->filter_function)(mbfl_hexchar_table[0], filter TSRMLS_CC);
- }
- }
- }
- break;
- default:
- break;
- }
- filter->illegal_mode = mode_backup;
-
- return ret;
-}
-
-
-/*
- * identify filter
- */
-
-static void
-mbfl_identify_filter_set_vtbl(mbfl_identify_filter *filter, struct mbfl_identify_vtbl *vtbl)
-{
- if (filter && vtbl) {
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- }
-}
-
-static struct mbfl_identify_vtbl *
-mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
-{
- struct mbfl_identify_vtbl *vtbl;
- int i;
-
- i = 0;
- while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) {
- if (vtbl->encoding == encoding) {
- break;
- }
- }
-
- return vtbl;
-}
-
-static void
-mbfl_identify_filter_select_vtbl(mbfl_identify_filter *filter)
-{
- struct mbfl_identify_vtbl *vtbl;
-
- vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
- if (vtbl == NULL) {
- vtbl = &vtbl_identify_false;
- }
- mbfl_identify_filter_set_vtbl(filter, vtbl);
-}
-
-mbfl_identify_filter *
-mbfl_identify_filter_new(enum mbfl_no_encoding encoding TSRMLS_DC)
-{
- mbfl_identify_filter * filter;
-
- /* allocate */
- filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter));
- if (filter == NULL) {
- return NULL;
- }
-
- /* encoding structure */
- filter->encoding = mbfl_no2encoding(encoding);
- if (filter->encoding == NULL) {
- filter->encoding = &mbfl_encoding_pass;
- }
-
- filter->status = 0;
- filter->flag = 0;
- filter->score = 0;
-
- /* setup the function table */
- mbfl_identify_filter_select_vtbl(filter);
-
- /* constructor */
- (*filter->filter_ctor)(filter TSRMLS_CC);
-
- return filter;
-}
-
-void
-mbfl_identify_filter_delete(mbfl_identify_filter *filter TSRMLS_DC)
-{
- if (filter) {
- (*filter->filter_dtor)(filter TSRMLS_CC);
- mbfl_free((void*)filter);
- }
-}
-
-
-
-/*
- * buffering converter
- */
-mbfl_buffer_converter *
-mbfl_buffer_converter_new(
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to,
- int buf_initsz TSRMLS_DC)
-{
- mbfl_buffer_converter *convd;
-
- /* allocate */
- convd = (mbfl_buffer_converter*)mbfl_malloc(sizeof (mbfl_buffer_converter));
- if (convd == NULL) {
- return NULL;
- }
-
- /* initialize */
- convd->from = mbfl_no2encoding(from);
- convd->to = mbfl_no2encoding(to);
- if (convd->from == NULL) {
- convd->from = &mbfl_encoding_pass;
- }
- if (convd->to == NULL) {
- convd->to = &mbfl_encoding_pass;
- }
-
- /* create convert filter */
- convd->filter1 = NULL;
- convd->filter2 = NULL;
- if (mbfl_convert_filter_get_vtbl(convd->from->no_encoding, convd->to->no_encoding) != NULL) {
- convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device TSRMLS_CC);
- } else {
- convd->filter2 = mbfl_convert_filter_new(mbfl_no_encoding_wchar, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device TSRMLS_CC);
- if (convd->filter2 != NULL) {
- convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, mbfl_no_encoding_wchar, (int (*)(int, void* TSRMLS_DC))convd->filter2->filter_function, NULL, convd->filter2 TSRMLS_CC);
- if (convd->filter1 == NULL) {
- mbfl_convert_filter_delete(convd->filter2 TSRMLS_CC);
- }
- }
- }
- if (convd->filter1 == NULL) {
- return NULL;
- }
-
- mbfl_memory_device_init(&convd->device, buf_initsz, buf_initsz/4 TSRMLS_CC);
-
- return convd;
-}
-
-void
-mbfl_buffer_converter_delete(mbfl_buffer_converter *convd TSRMLS_DC)
-{
- if (convd != NULL) {
- if (convd->filter1) {
- mbfl_convert_filter_delete(convd->filter1 TSRMLS_CC);
- }
- if (convd->filter2) {
- mbfl_convert_filter_delete(convd->filter2 TSRMLS_CC);
- }
- mbfl_memory_device_clear(&convd->device TSRMLS_CC);
- mbfl_free((void*)convd);
- }
-}
-
-void
-mbfl_buffer_converter_reset(mbfl_buffer_converter *convd TSRMLS_DC)
-{
- mbfl_memory_device_reset(&convd->device TSRMLS_CC);
-}
-
-int
-mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode TSRMLS_DC)
-{
- if (convd != NULL) {
- if (convd->filter2 != NULL) {
- convd->filter2->illegal_mode = mode;
- } else if (convd->filter1 != NULL) {
- convd->filter1->illegal_mode = mode;
- } else {
- return 0;
- }
- }
-
- return 1;
-}
-
-int
-mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar TSRMLS_DC)
-{
- if (convd != NULL) {
- if (convd->filter2 != NULL) {
- convd->filter2->illegal_substchar = substchar;
- } else if (convd->filter1 != NULL) {
- convd->filter1->illegal_substchar = substchar;
- } else {
- return 0;
- }
- }
-
- return 1;
-}
-
-int
-mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n TSRMLS_DC)
-{
- mbfl_convert_filter *filter;
- int (*filter_function)(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
- if (convd != NULL && p != NULL) {
- filter = convd->filter1;
- if (filter != NULL) {
- filter_function = filter->filter_function;
- while (n > 0) {
- if ((*filter_function)(*p++, filter TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- }
- }
-
- return n;
-}
-
-int
-mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string TSRMLS_DC)
-{
- int n;
- unsigned char *p;
- mbfl_convert_filter *filter;
- int (*filter_function)(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
- if (convd == NULL || string == NULL) {
- return -1;
- }
- mbfl_memory_device_realloc(&convd->device, convd->device.pos + string->len, string->len/4 TSRMLS_CC);
- /* feed data */
- n = string->len;
- p = string->val;
- filter = convd->filter1;
- if (filter != NULL) {
- filter_function = filter->filter_function;
- while (n > 0) {
- if ((*filter_function)(*p++, filter TSRMLS_CC) < 0) {
- return -1;
- }
- n--;
- }
- }
-
- return 0;
-}
-
-int
-mbfl_buffer_converter_flush(mbfl_buffer_converter *convd TSRMLS_DC)
-{
- if (convd == NULL) {
- return -1;
- }
-
- if (convd->filter1 != NULL) {
- mbfl_convert_filter_flush(convd->filter1 TSRMLS_CC);
- }
- if (convd->filter2 != NULL) {
- mbfl_convert_filter_flush(convd->filter2 TSRMLS_CC);
- }
-
- return 0;
-}
-
-mbfl_string *
-mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result TSRMLS_DC)
-{
- if (convd != NULL && result != NULL && convd->device.buffer != NULL) {
- result->no_encoding = convd->to->no_encoding;
- result->val = convd->device.buffer;
- result->len = convd->device.pos;
- } else {
- result = NULL;
- }
-
- return result;
-}
-
-mbfl_string *
-mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result TSRMLS_DC)
-{
- if (convd == NULL || result == NULL) {
- return NULL;
- }
- result->no_encoding = convd->to->no_encoding;
- return mbfl_memory_device_result(&convd->device, result TSRMLS_CC);
-}
-
-mbfl_string *
-mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string,
- mbfl_string *result TSRMLS_DC)
-{
- if (convd == NULL || string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_buffer_converter_feed(convd, string TSRMLS_CC);
- if (convd->filter1 != NULL) {
- mbfl_convert_filter_flush(convd->filter1 TSRMLS_CC);
- }
- if (convd->filter2 != NULL) {
- mbfl_convert_filter_flush(convd->filter2 TSRMLS_CC);
- }
- result->no_encoding = convd->to->no_encoding;
- return mbfl_memory_device_result(&convd->device, result TSRMLS_CC);
-}
-
-
-/*
- * encoding detector
- */
-mbfl_encoding_detector *
-mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC)
-{
- mbfl_encoding_detector *identd;
-
- int i, num;
- mbfl_identify_filter *filter;
-
- if (elist == NULL || eliztsz <= 0) {
- return NULL;
- }
-
- /* allocate */
- identd = (mbfl_encoding_detector*)mbfl_malloc(sizeof(mbfl_encoding_detector));
- if (identd == NULL) {
- return NULL;
- }
- identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter *));
- if (identd->filter_list == NULL) {
- mbfl_free(identd);
- return NULL;
- }
-
- /* create filters */
- i = 0;
- num = 0;
- while (i < eliztsz) {
- filter = mbfl_identify_filter_new(elist[i] TSRMLS_CC);
- if (filter != NULL) {
- identd->filter_list[num] = filter;
- num++;
- }
- i++;
- }
- identd->filter_list_size = num;
-
- return identd;
-}
-
-void
-mbfl_encoding_detector_delete(mbfl_encoding_detector *identd TSRMLS_DC)
-{
- int i;
-
- if (identd != NULL) {
- if (identd->filter_list != NULL) {
- i = identd->filter_list_size;
- while (i > 0) {
- i--;
- mbfl_identify_filter_delete(identd->filter_list[i] TSRMLS_CC);
- }
- mbfl_free((void *)identd->filter_list);
- }
- mbfl_free((void *)identd);
- }
-}
-
-int
-mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string TSRMLS_DC)
-{
- int i, n, num, bad, res;
- unsigned char *p;
- mbfl_identify_filter *filter;
-
- res = 0;
- /* feed data */
- if (identd != NULL && string != NULL && string->val != NULL) {
- num = identd->filter_list_size;
- n = string->len;
- p = string->val;
- while (n > 0) {
- i = 0;
- bad = 0;
- while (i < num) {
- filter = identd->filter_list[i];
- (*filter->filter_function)(*p, filter TSRMLS_CC);
- if (filter->flag) {
- bad++;
- }
- i++;
- }
- if ((num - 1) <= bad) {
- res = 1;
- break;
- }
- p++;
- n--;
- }
- }
-
- return res;
-}
-
-enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd TSRMLS_DC)
-{
- mbfl_identify_filter *filter;
- enum mbfl_no_encoding encoding;
- int n;
-
- /* judge */
- encoding = mbfl_no_encoding_invalid;
- if (identd != NULL) {
- n = identd->filter_list_size - 1;
- while (n >= 0) {
- filter = identd->filter_list[n];
- if (!filter->flag) {
- encoding = filter->encoding->no_encoding;
- }
- n--;
- }
- }
-
- return encoding;
-}
-
-
-/*
- * encoding converter
- */
-mbfl_string *
-mbfl_convert_encoding(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding toenc TSRMLS_DC)
-{
- int n;
- unsigned char *p;
- mbfl_encoding *encoding;
- mbfl_memory_device device;
- mbfl_convert_filter *filter1;
- mbfl_convert_filter *filter2;
-
- /* initialize */
- encoding = mbfl_no2encoding(toenc);
- if (encoding == NULL || string == NULL || result == NULL) {
- return NULL;
- }
-
- filter1 = NULL;
- filter2 = NULL;
- if (mbfl_convert_filter_get_vtbl(string->no_encoding, toenc) != NULL) {
- filter1 = mbfl_convert_filter_new(string->no_encoding, toenc, mbfl_memory_device_output, 0, &device TSRMLS_CC);
- } else {
- filter2 = mbfl_convert_filter_new(mbfl_no_encoding_wchar, toenc, mbfl_memory_device_output, 0, &device TSRMLS_CC);
- if (filter2 != NULL) {
- filter1 = mbfl_convert_filter_new(string->no_encoding, mbfl_no_encoding_wchar, (int (*)(int, void* TSRMLS_DC))filter2->filter_function, NULL, filter2 TSRMLS_CC);
- if (filter1 == NULL) {
- mbfl_convert_filter_delete(filter2 TSRMLS_CC);
- }
- }
- }
- if (filter1 == NULL) {
- return NULL;
- }
- filter2->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- filter2->illegal_substchar = 0x3f; /* '?' */
- mbfl_memory_device_init(&device, string->len, (string->len >> 2) + 8 TSRMLS_CC);
-
- /* feed data */
- n = string->len;
- p = string->val;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter1->filter_function)(*p++, filter1 TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- }
-
- mbfl_convert_filter_flush(filter1 TSRMLS_CC);
- mbfl_convert_filter_delete(filter1 TSRMLS_CC);
- if (filter2 != NULL) {
- mbfl_convert_filter_flush(filter2 TSRMLS_CC);
- mbfl_convert_filter_delete(filter2 TSRMLS_CC);
- }
-
- return mbfl_memory_device_result(&device, result TSRMLS_CC);
-}
-
-
-/*
- * identify encoding
- */
-mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC)
-{
- int i, n, num, bad;
- unsigned char *p;
- struct mbfl_identify_vtbl *vtbl;
- mbfl_identify_filter *flist, *filter;
- mbfl_encoding *encoding;
-
- /* initialize */
- flist = (mbfl_identify_filter *)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter));
- if (flist == NULL) {
- return NULL;
- }
- i = 0;
- num = 0;
- if (elist != NULL) {
- while (i < eliztsz) {
- vtbl = mbfl_identify_filter_get_vtbl(elist[i]);
- if (vtbl != NULL) {
- filter = &flist[num];
- mbfl_identify_filter_set_vtbl(filter, vtbl);
- filter->encoding = mbfl_no2encoding(vtbl->encoding);
- (*filter->filter_ctor)(filter TSRMLS_CC);
- num++;
- }
- i++;
- }
- }
-
- /* feed data */
- n = string->len;
- p = string->val;
- if (p != NULL) {
- while (n > 0) {
- i = 0;
- bad = 0;
- while (i < num) {
- filter = &flist[i];
- (*filter->filter_function)(*p, filter TSRMLS_CC);
- if (filter->flag) {
- bad++;
- }
- i++;
- }
- if ((num - 1) <= bad) {
- break;
- }
- p++;
- n--;
- }
- }
-
- /* judge */
- i = num - 1;
- bad = 1;
- encoding = NULL;
- while (i >= 0) {
- filter = &flist[i];
- if (filter->flag) {
- bad++;
- } else {
- encoding = filter->encoding;
- }
- i--;
- }
-#if 0
- if (bad < num) {
- encoding = NULL;
- }
-#endif
-
- i = 0;
- while (i < num) {
- filter = &flist[i];
- (*filter->filter_dtor)(filter TSRMLS_CC);
- i++;
- }
- mbfl_free((void *)flist);
-
- return encoding;
-}
-
-const char*
-mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC)
-{
- mbfl_encoding *encoding;
-
- encoding = mbfl_identify_encoding(string, elist, eliztsz TSRMLS_CC);
- if (encoding != NULL &&
- encoding->no_encoding > mbfl_no_encoding_charset_min &&
- encoding->no_encoding < mbfl_no_encoding_charset_max) {
- return encoding->name;
- } else {
- return NULL;
- }
-}
-
-enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC)
-{
- mbfl_encoding *encoding;
-
- encoding = mbfl_identify_encoding(string, elist, eliztsz TSRMLS_CC);
- if (encoding != NULL &&
- encoding->no_encoding > mbfl_no_encoding_charset_min &&
- encoding->no_encoding < mbfl_no_encoding_charset_max) {
- return encoding->no_encoding;
- } else {
- return mbfl_no_encoding_invalid;
- }
-}
-
-
-/*
- * strlen
- */
-static int
-filter_count_output(int c, void *data TSRMLS_DC)
-{
- (*(int *)data)++;
- return c;
-}
-
-int
-mbfl_strlen(mbfl_string *string TSRMLS_DC)
-{
- int len, n, m, k;
- unsigned char *p;
- const unsigned char *mbtab;
- mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL) {
- return -1;
- }
-
- len = 0;
- if (encoding->flag & MBFL_ENCTYPE_SBCS) {
- len = string->len;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- len = string->len/2;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- len = string->len/4;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- n = 0;
- p = string->val;
- k = string->len;
- /* count */
- if (p != NULL) {
- while (n < k) {
- m = mbtab[*p];
- n += m;
- p += m;
- len++;
- };
- }
- } else {
- /* wchar filter */
- mbfl_convert_filter *filter = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- filter_count_output, 0, &len TSRMLS_CC);
- if (filter == NULL) {
- return -1;
- }
- /* count */
- n = string->len;
- p = string->val;
- if (p != NULL) {
- while (n > 0) {
- (*filter->filter_function)(*p++, filter TSRMLS_CC);
- n--;
- }
- }
- mbfl_convert_filter_delete(filter TSRMLS_CC);
- }
-
- return len;
-}
-
-#ifdef ZEND_MULTIBYTE
-/*
- * oddlen
- */
-int
-mbfl_oddlen(mbfl_string *string)
-{
- int len, n, m, k;
- unsigned char *p;
- const unsigned char *mbtab;
- mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL) {
- return -1;
- }
-
- len = 0;
- if (encoding->flag & MBFL_ENCTYPE_SBCS) {
- return 0;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- return len % 2;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- return len % 4;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- n = 0;
- p = string->val;
- k = string->len;
- /* count */
- if (p != NULL) {
- while (n < k) {
- m = mbtab[*p];
- n += m;
- p += m;
- };
- }
- return n-k;
- } else {
- /* how can i do ? */
- return 0;
- }
- /* NOT REACHED */
-}
-#endif /* ZEND_MULTIBYTE */
-
-
-/*
- * strpos
- */
-struct collector_strpos_data {
- mbfl_convert_filter *next_filter;
- mbfl_wchar_device needle;
- int needle_len;
- int start;
- int output;
- int found_pos;
- int needle_pos;
- int matched_pos;
-};
-
-static int
-collector_strpos(int c, void* data TSRMLS_DC)
-{
- int *p, *h, *m, n;
- struct collector_strpos_data *pc = (struct collector_strpos_data*)data;
-
- if (pc->output >= pc->start) {
- if (c == (int)pc->needle.buffer[pc->needle_pos]) {
- if (pc->needle_pos == 0) {
- pc->found_pos = pc->output; /* found position */
- }
- pc->needle_pos++; /* needle pointer */
- if (pc->needle_pos >= pc->needle_len) {
- pc->matched_pos = pc->found_pos; /* matched position */
- pc->needle_pos--;
- goto retry;
- }
- } else if (pc->needle_pos != 0) {
-retry:
- h = pc->needle.buffer;
- h++;
- for (;;) {
- pc->found_pos++;
- p = h;
- m = pc->needle.buffer;
- n = pc->needle_pos - 1;
- while (n > 0 && *p == *m) {
- n--;
- p++;
- m++;
- }
- if (n <= 0) {
- if (*m != c) {
- pc->needle_pos = 0;
- }
- break;
- } else {
- h++;
- pc->needle_pos--;
- }
- }
- }
- }
-
- pc->output++;
- return c;
-}
-
-int
-mbfl_strpos(
- mbfl_string *haystack,
- mbfl_string *needle,
- int offset,
- int reverse TSRMLS_DC)
-{
- int n, result;
- unsigned char *p;
- mbfl_convert_filter *filter;
- struct collector_strpos_data pc;
-
- if (haystack == NULL || needle == NULL) {
- return -8;
- }
- /* needle is converted into wchar */
- mbfl_wchar_device_init(&pc.needle TSRMLS_CC);
- filter = mbfl_convert_filter_new(
- needle->no_encoding,
- mbfl_no_encoding_wchar,
- mbfl_wchar_device_output, 0, &pc.needle TSRMLS_CC);
- if (filter == NULL) {
- return -4;
- }
- p = needle->val;
- n = needle->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- }
- mbfl_convert_filter_flush(filter TSRMLS_CC);
- mbfl_convert_filter_delete(filter TSRMLS_CC);
- pc.needle_len = pc.needle.pos;
- if (pc.needle.buffer == NULL) {
- return -4;
- }
- if (pc.needle_len <= 0) {
- mbfl_wchar_device_clear(&pc.needle TSRMLS_CC);
- return -2;
- }
- /* initialize filter and collector data */
- filter = mbfl_convert_filter_new(
- haystack->no_encoding,
- mbfl_no_encoding_wchar,
- collector_strpos, 0, &pc TSRMLS_CC);
- if (filter == NULL) {
- mbfl_wchar_device_clear(&pc.needle TSRMLS_CC);
- return -4;
- }
- pc.start = offset;
- pc.output = 0;
- pc.needle_pos = 0;
- pc.found_pos = 0;
- pc.matched_pos = -1;
-
- /* feed data */
- p = haystack->val;
- n = haystack->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter TSRMLS_CC) < 0) {
- pc.matched_pos = -4;
- break;
- }
- if (pc.matched_pos >= 0 && !reverse) {
- break;
- }
- n--;
- }
- }
- mbfl_convert_filter_flush(filter TSRMLS_CC);
- result = pc.matched_pos;
- mbfl_convert_filter_delete(filter TSRMLS_CC);
- mbfl_wchar_device_clear(&pc.needle TSRMLS_CC);
-
- return result;
-}
-
-
-/*
- * substr
- */
-struct collector_substr_data {
- mbfl_convert_filter *next_filter;
- int start;
- int stop;
- int output;
-};
-
-static int
-collector_substr(int c, void* data TSRMLS_DC)
-{
- struct collector_substr_data *pc = (struct collector_substr_data*)data;
-
- if (pc->output >= pc->stop) {
- return -1;
- }
-
- if (pc->output >= pc->start) {
- (*pc->next_filter->filter_function)(c, pc->next_filter TSRMLS_CC);
- }
-
- pc->output++;
-
- return c;
-}
-
-mbfl_string *
-mbfl_substr(
- mbfl_string *string,
- mbfl_string *result,
- int from,
- int length TSRMLS_DC)
-{
- mbfl_encoding *encoding;
- int n, m, k, len, start, end;
- unsigned char *p, *w;
- const unsigned char *mbtab;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
-
- if ((encoding->flag & (MBFL_ENCTYPE_SBCS | MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE | MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) ||
- encoding->mblen_table != NULL) {
- len = string->len;
- start = from;
- end = from + length;
- if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_MWC2LE)) {
- start *= 2;
- end = start + length*2;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_MWC4LE)) {
- start *= 4;
- end = start + length*4;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- start = 0;
- end = 0;
- n = 0;
- k = 0;
- p = string->val;
- if (p != NULL) {
- /* search start position */
- while (k <= from) {
- start = n;
- if (n >= len) {
- break;
- }
- m = mbtab[*p];
- n += m;
- p += m;
- k++;
- }
- /* detect end position */
- k = 0;
- end = start;
- while (k < length) {
- end = n;
- if (n >= len) {
- break;
- }
- m = mbtab[*p];
- n += m;
- p += m;
- k++;
- }
- }
- }
-
- if (start > len) {
- start = len;
- }
- if (start < 0) {
- start = 0;
- }
- if (end > len) {
- end = len;
- }
- if (end < 0) {
- end = 0;
- }
- if (start > end) {
- start = end;
- }
-
- /* allocate memory and copy */
- n = end - start;
- result->len = 0;
- result->val = w = (unsigned char*)mbfl_malloc((n + 8)*sizeof(unsigned char));
- if (w != NULL) {
- p = string->val;
- if (p != NULL) {
- p += start;
- result->len = n;
- while (n > 0) {
- *w++ = *p++;
- n--;
- }
- }
- *w++ = '\0';
- *w++ = '\0';
- *w++ = '\0';
- *w = '\0';
- } else {
- result = NULL;
- }
- } else {
- mbfl_memory_device device;
- struct collector_substr_data pc;
- mbfl_convert_filter *decoder;
- mbfl_convert_filter *encoder;
-
- mbfl_memory_device_init(&device, length + 1, 0 TSRMLS_CC);
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- /* output code filter */
- decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device TSRMLS_CC);
- /* wchar filter */
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_substr, 0, &pc TSRMLS_CC);
- if (decoder == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(decoder TSRMLS_CC);
- return NULL;
- }
- pc.next_filter = decoder;
- pc.start = from;
- pc.stop = from + length;
- pc.output = 0;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- }
-
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- mbfl_convert_filter_flush(decoder TSRMLS_CC);
- result = mbfl_memory_device_result(&device, result TSRMLS_CC);
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(decoder TSRMLS_CC);
- }
-
- return result;
-}
-
-
-/*
- * strcut
- */
-mbfl_string *
-mbfl_strcut(
- mbfl_string *string,
- mbfl_string *result,
- int from,
- int length TSRMLS_DC)
-{
- mbfl_encoding *encoding;
- int n, m, k, len, start, end;
- unsigned char *p, *w;
- const unsigned char *mbtab;
- mbfl_memory_device device;
- mbfl_convert_filter *encoder, *encoder_tmp, *decoder, *decoder_tmp;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
-
- if ((encoding->flag & (MBFL_ENCTYPE_SBCS | MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE | MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) ||
- encoding->mblen_table != NULL) {
- len = string->len;
- start = from;
- end = from + length;
- if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- start /= 2;
- start *= 2;
- end = length/2;
- end *= 2;
- end += start;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- start /= 4;
- start *= 4;
- end = length/4;
- end *= 4;
- end += start;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- start = 0;
- end = 0;
- n = 0;
- p = string->val;
- if (p != NULL) {
- /* search start position */
- for (;;) {
- m = mbtab[*p];
- n += m;
- p += m;
- if (n > from) {
- break;
- }
- start = n;
- }
- /* search end position */
- k = start + length;
- if (k >= (int)string->len) {
- end = string->len;
- } else {
- end = start;
- while (n <= k) {
- end = n;
- m = mbtab[*p];
- n += m;
- p += m;
- }
- }
- }
- }
-
- if (start > len) {
- start = len;
- }
- if (start < 0) {
- start = 0;
- }
- if (end > len) {
- end = len;
- }
- if (end < 0) {
- end = 0;
- }
- if (start > end) {
- start = end;
- }
- /* allocate memory and copy string */
- n = end - start;
- result->len = 0;
- result->val = w = (unsigned char*)mbfl_malloc((n + 8)*sizeof(unsigned char));
- if (w != NULL) {
- result->len = n;
- p = &(string->val[start]);
- while (n > 0) {
- *w++ = *p++;
- n--;
- }
- *w++ = '\0';
- *w++ = '\0';
- *w++ = '\0';
- *w = '\0';
- } else {
- result = NULL;
- }
- } else {
- /* wchar filter */
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- mbfl_filter_output_null, 0, 0 TSRMLS_CC);
- encoder_tmp = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- mbfl_filter_output_null, 0, 0 TSRMLS_CC);
- /* output code filter */
- decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device TSRMLS_CC);
- decoder_tmp = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device TSRMLS_CC);
- if (encoder == NULL || encoder_tmp == NULL || decoder == NULL || decoder_tmp == NULL) {
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(encoder_tmp TSRMLS_CC);
- mbfl_convert_filter_delete(decoder TSRMLS_CC);
- mbfl_convert_filter_delete(decoder_tmp TSRMLS_CC);
- return NULL;
- }
- mbfl_memory_device_init(&device, length + 8, 0 TSRMLS_CC);
- k = 0;
- n = 0;
- p = string->val;
- if (p != NULL) {
- /* seartch start position */
- while (n < from) {
- (*encoder->filter_function)(*p++, encoder TSRMLS_CC);
- n++;
- }
- /* output a little shorter than "length" */
- encoder->output_function = mbfl_filter_output_pipe;
- encoder->data = decoder;
- k = length - 20;
- len = string->len;
- while (n < len && device.pos < k) {
- (*encoder->filter_function)(*p++, encoder TSRMLS_CC);
- n++;
- }
- /* detect end position */
- for (;;) {
- /* backup current state */
- k = device.pos;
- mbfl_convert_filter_copy(encoder, encoder_tmp TSRMLS_CC);
- mbfl_convert_filter_copy(decoder, decoder_tmp TSRMLS_CC);
- if (n >= len) {
- break;
- }
- /* feed 1byte and flush */
- (*encoder->filter_function)(*p, encoder TSRMLS_CC);
- (*encoder->filter_flush)(encoder TSRMLS_CC);
- (*decoder->filter_flush)(decoder TSRMLS_CC);
- if (device.pos > length) {
- break;
- }
- /* restore filter and re-feed data */
- device.pos = k;
- mbfl_convert_filter_copy(encoder_tmp, encoder TSRMLS_CC);
- mbfl_convert_filter_copy(decoder_tmp, decoder TSRMLS_CC);
- (*encoder->filter_function)(*p, encoder TSRMLS_CC);
- p++;
- n++;
- }
- device.pos = k;
- mbfl_convert_filter_copy(encoder_tmp, encoder TSRMLS_CC);
- mbfl_convert_filter_copy(decoder_tmp, decoder TSRMLS_CC);
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- mbfl_convert_filter_flush(decoder TSRMLS_CC);
- }
- result = mbfl_memory_device_result(&device, result TSRMLS_CC);
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(encoder_tmp TSRMLS_CC);
- mbfl_convert_filter_delete(decoder TSRMLS_CC);
- mbfl_convert_filter_delete(decoder_tmp TSRMLS_CC);
- }
-
- return result;
-}
-
-
-/*
- * strwidth
- */
-static int
-filter_count_width(int c, void* data TSRMLS_DC)
-{
- if (c >= 0x20) {
- if (c < 0x2000 || (c > 0xff60 && c < 0xffa0)) {
- (*(int *)data)++;
- } else {
- (*(int *)data) += 2;
- }
- }
-
- return c;
-}
-
-int
-mbfl_strwidth(mbfl_string *string TSRMLS_DC)
-{
- int len, n;
- unsigned char *p;
- mbfl_convert_filter *filter;
-
- len = 0;
- if (string->len > 0 && string->val != NULL) {
- /* wchar filter */
- filter = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- filter_count_width, 0, &len TSRMLS_CC);
- if (filter == NULL) {
- mbfl_convert_filter_delete(filter TSRMLS_CC);
- return -1;
- }
-
- /* feed data */
- p = string->val;
- n = string->len;
- while (n > 0) {
- (*filter->filter_function)(*p++, filter TSRMLS_CC);
- n--;
- }
-
- mbfl_convert_filter_flush(filter TSRMLS_CC);
- mbfl_convert_filter_delete(filter TSRMLS_CC);
- }
-
- return len;
-}
-
-
-/*
- * strimwidth
- */
-struct collector_strimwidth_data {
- mbfl_convert_filter *decoder;
- mbfl_convert_filter *decoder_backup;
- mbfl_memory_device device;
- int from;
- int width;
- int outwidth;
- int outchar;
- int status;
- int endpos;
-};
-
-static int
-collector_strimwidth(int c, void* data TSRMLS_DC)
-{
- struct collector_strimwidth_data *pc = (struct collector_strimwidth_data*)data;
-
- switch (pc->status) {
- case 10:
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- break;
- default:
- if (pc->outchar >= pc->from) {
- if (c >= 0x20) {
- if (c < 0x2000 || (c > 0xff60 && c < 0xffa0)) {
- pc->outwidth++;
- } else {
- pc->outwidth += 2;
- }
- }
- if (pc->outwidth > pc->width) {
- if (pc->status == 0) {
- pc->endpos = pc->device.pos;
- mbfl_convert_filter_copy(pc->decoder, pc->decoder_backup TSRMLS_CC);
- }
- pc->status++;
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- c = -1;
- } else {
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
- }
- pc->outchar++;
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mbfl_strimwidth(
- mbfl_string *string,
- mbfl_string *marker,
- mbfl_string *result,
- int from,
- int width TSRMLS_DC)
-{
- struct collector_strimwidth_data pc;
- mbfl_convert_filter *encoder;
- int n, mkwidth;
- unsigned char *p;
-
- if (string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- mbfl_memory_device_init(&pc.device, width, 0 TSRMLS_CC);
-
- /* output code filter */
- pc.decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &pc.device TSRMLS_CC);
- pc.decoder_backup = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &pc.device TSRMLS_CC);
- /* wchar filter */
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_strimwidth, 0, &pc TSRMLS_CC);
- if (pc.decoder == NULL || pc.decoder_backup == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(pc.decoder TSRMLS_CC);
- mbfl_convert_filter_delete(pc.decoder_backup TSRMLS_CC);
- return NULL;
- }
- mkwidth = 0;
- if (marker) {
- mkwidth = mbfl_strwidth(marker TSRMLS_CC);
- }
- pc.from = from;
- pc.width = width - mkwidth;
- pc.outwidth = 0;
- pc.outchar = 0;
- pc.status = 0;
- pc.endpos = 0;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- n--;
- if ((*encoder->filter_function)(*p++, encoder TSRMLS_CC) < 0) {
- break;
- }
- }
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- if (pc.status != 0 && mkwidth > 0) {
- pc.width += mkwidth;
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- if (pc.status != 1) {
- pc.status = 10;
- pc.device.pos = pc.endpos;
- mbfl_convert_filter_copy(pc.decoder_backup, pc.decoder TSRMLS_CC);
- mbfl_convert_filter_reset(encoder, marker->no_encoding, mbfl_no_encoding_wchar TSRMLS_CC);
- p = marker->val;
- n = marker->len;
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- }
- } else if (pc.status != 0) {
- pc.device.pos = pc.endpos;
- mbfl_convert_filter_copy(pc.decoder_backup, pc.decoder TSRMLS_CC);
- }
- mbfl_convert_filter_flush(pc.decoder TSRMLS_CC);
- }
- result = mbfl_memory_device_result(&pc.device, result TSRMLS_CC);
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(pc.decoder TSRMLS_CC);
- mbfl_convert_filter_delete(pc.decoder_backup TSRMLS_CC);
-
- return result;
-}
-
-
-
-/*
- * convert Hankaku and Zenkaku
- */
-struct collector_hantozen_data {
- mbfl_convert_filter *next_filter;
- int mode;
- int status;
- int cache;
-};
-
-static const unsigned char hankana2zenkata_table[64] = {
- 0x00,0x02,0x0C,0x0D,0x01,0xFB,0xF2,0xA1,0xA3,0xA5,
- 0xA7,0xA9,0xE3,0xE5,0xE7,0xC3,0xFC,0xA2,0xA4,0xA6,
- 0xA8,0xAA,0xAB,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9,
- 0xBB,0xBD,0xBF,0xC1,0xC4,0xC6,0xC8,0xCA,0xCB,0xCC,
- 0xCD,0xCE,0xCF,0xD2,0xD5,0xD8,0xDB,0xDE,0xDF,0xE0,
- 0xE1,0xE2,0xE4,0xE6,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,
- 0xEF,0xF3,0x9B,0x9C
-};
-static const unsigned char hankana2zenhira_table[64] = {
- 0x00,0x02,0x0C,0x0D,0x01,0xFB,0x92,0x41,0x43,0x45,
- 0x47,0x49,0x83,0x85,0x87,0x63,0xFC,0x42,0x44,0x46,
- 0x48,0x4A,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59,
- 0x5B,0x5D,0x5F,0x61,0x64,0x66,0x68,0x6A,0x6B,0x6C,
- 0x6D,0x6E,0x6F,0x72,0x75,0x78,0x7B,0x7E,0x7F,0x80,
- 0x81,0x82,0x84,0x86,0x88,0x89,0x8A,0x8B,0x8C,0x8D,
- 0x8F,0x93,0x9B,0x9C
-};
-static const unsigned char zenkana2hankana_table[84][2] = {
- {0x67,0x00},{0x71,0x00},{0x68,0x00},{0x72,0x00},{0x69,0x00},
- {0x73,0x00},{0x6A,0x00},{0x74,0x00},{0x6B,0x00},{0x75,0x00},
- {0x76,0x00},{0x76,0x9E},{0x77,0x00},{0x77,0x9E},{0x78,0x00},
- {0x78,0x9E},{0x79,0x00},{0x79,0x9E},{0x7A,0x00},{0x7A,0x9E},
- {0x7B,0x00},{0x7B,0x9E},{0x7C,0x00},{0x7C,0x9E},{0x7D,0x00},
- {0x7D,0x9E},{0x7E,0x00},{0x7E,0x9E},{0x7F,0x00},{0x7F,0x9E},
- {0x80,0x00},{0x80,0x9E},{0x81,0x00},{0x81,0x9E},{0x6F,0x00},
- {0x82,0x00},{0x82,0x9E},{0x83,0x00},{0x83,0x9E},{0x84,0x00},
- {0x84,0x9E},{0x85,0x00},{0x86,0x00},{0x87,0x00},{0x88,0x00},
- {0x89,0x00},{0x8A,0x00},{0x8A,0x9E},{0x8A,0x9F},{0x8B,0x00},
- {0x8B,0x9E},{0x8B,0x9F},{0x8C,0x00},{0x8C,0x9E},{0x8C,0x9F},
- {0x8D,0x00},{0x8D,0x9E},{0x8D,0x9F},{0x8E,0x00},{0x8E,0x9E},
- {0x8E,0x9F},{0x8F,0x00},{0x90,0x00},{0x91,0x00},{0x92,0x00},
- {0x93,0x00},{0x6C,0x00},{0x94,0x00},{0x6D,0x00},{0x95,0x00},
- {0x6E,0x00},{0x96,0x00},{0x97,0x00},{0x98,0x00},{0x99,0x00},
- {0x9A,0x00},{0x9B,0x00},{0x9C,0x00},{0x9C,0x00},{0x72,0x00},
- {0x74,0x00},{0x66,0x00},{0x9D,0x00},{0x73,0x9E}
-};
-
-static int
-collector_hantozen(int c, void* data TSRMLS_DC)
-{
- int s, mode, n;
- struct collector_hantozen_data *pc = (struct collector_hantozen_data*)data;
-
- s = c;
- mode = pc->mode;
-
- if (mode & 0xf) { /* hankaku to zenkaku */
- if ((mode & 0x1) && c >= 0x21 && c <= 0x7d && c != 0x22 && c != 0x27 && c != 0x5c) { /* all except <"> <'> <\> <~> */
- s = c + 0xfee0;
- } else if ((mode & 0x2) && ((c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a))) { /* alpha */
- s = c + 0xfee0;
- } else if ((mode & 0x4) && c >= 0x30 && c <= 0x39) { /* num */
- s = c + 0xfee0;
- } else if ((mode & 0x8) && c == 0x20) { /* spase */
- s = 0x3000;
- }
- }
-
- if (mode & 0xf0) { /* zenkaku to hankaku */
- if ((mode & 0x10) && c >= 0xff01 && c <= 0xff5d && c != 0xff02 && c != 0xff07 && c!= 0xff3c) { /* all except <"> <'> <\> <~> */
- s = c - 0xfee0;
- } else if ((mode & 0x20) && ((c >= 0xff21 && c <= 0xff3a) || (c >= 0xff41 && c <= 0xff5a))) { /* alpha */
- s = c - 0xfee0;
- } else if ((mode & 0x40) && (c >= 0xff10 && c <= 0xff19)) { /* num */
- s = c - 0xfee0;
- } else if ((mode & 0x80) && (c == 0x3000)) { /* spase */
- s = 0x20;
- } else if ((mode & 0x10) && (c == 0x2212)) { /* MINUS SIGN */
- s = 0x2d;
- }
- }
-
- if (mode & 0x300) { /* hankaku kana to zenkaku kana */
- if ((mode & 0x100) && (mode & 0x800)) { /* hankaku kana to zenkaku katakana and glue voiced sound mark */
- if (c >= 0xff61 && c <= 0xff9f) {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- if (c == 0xff9e && ((n >= 22 && n <= 36) || (n >= 42 && n <= 46))) {
- pc->status = 0;
- s = 0x3001 + hankana2zenkata_table[n];
- } else if (c == 0xff9e && n == 19) {
- pc->status = 0;
- s = 0x30f4;
- } else if (c == 0xff9f && (n >= 42 && n <= 46)) {
- pc->status = 0;
- s = 0x3002 + hankana2zenkata_table[n];
- } else {
- pc->status = 1;
- pc->cache = c;
- s = 0x3000 + hankana2zenkata_table[n];
- }
- } else {
- pc->status = 1;
- pc->cache = c;
- return c;
- }
- } else {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- pc->status = 0;
- (*pc->next_filter->filter_function)(0x3000 + hankana2zenkata_table[n], pc->next_filter TSRMLS_CC);
- }
- }
- } else if ((mode & 0x200) && (mode & 0x800)) { /* hankaku kana to zenkaku hirangana and glue voiced sound mark */
- if (c >= 0xff61 && c <= 0xff9f) {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- if (c == 0xff9e && ((n >= 22 && n <= 36) || (n >= 42 && n <= 46))) {
- pc->status = 0;
- s = 0x3001 + hankana2zenhira_table[n];
- } else if (c == 0xff9f && (n >= 42 && n <= 46)) {
- pc->status = 0;
- s = 0x3002 + hankana2zenhira_table[n];
- } else {
- pc->status = 1;
- pc->cache = c;
- s = 0x3000 + hankana2zenhira_table[n];
- }
- } else {
- pc->status = 1;
- pc->cache = c;
- return c;
- }
- } else {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- pc->status = 0;
- (*pc->next_filter->filter_function)(0x3000 + hankana2zenhira_table[n], pc->next_filter TSRMLS_CC);
- }
- }
- } else if ((mode & 0x100) && c >= 0xff61 && c <= 0xff9f) { /* hankaku kana to zenkaku katakana */
- s = 0x3000 + hankana2zenkata_table[c - 0xff60];
- } else if ((mode & 0x200) && c >= 0xff61 && c <= 0xff9f) { /* hankaku kana to zenkaku hirangana */
- s = 0x3000 + hankana2zenhira_table[c - 0xff60];
- }
- }
-
- if (mode & 0x3000) { /* Zenkaku kana to hankaku kana */
- if ((mode & 0x1000) && c >= 0x30a1 && c <= 0x30f4) { /* Zenkaku katakana to hankaku kana */
- n = c - 0x30a1;
- if (zenkana2hankana_table[n][1] != 0) {
- (*pc->next_filter->filter_function)(0xff00 + zenkana2hankana_table[n][0], pc->next_filter TSRMLS_CC);
- s = 0xff00 + zenkana2hankana_table[n][1];
- } else {
- s = 0xff00 + zenkana2hankana_table[n][0];
- }
- } else if ((mode & 0x2000) && c >= 0x3041 && c <= 0x3093) { /* Zenkaku hirangana to hankaku kana */
- n = c - 0x3041;
- if (zenkana2hankana_table[n][1] != 0) {
- (*pc->next_filter->filter_function)(0xff00 + zenkana2hankana_table[n][0], pc->next_filter TSRMLS_CC);
- s = 0xff00 + zenkana2hankana_table[n][1];
- } else {
- s = 0xff00 + zenkana2hankana_table[n][0];
- }
- } else if (c == 0x3001) {
- s = 0xff64; /* HALFWIDTH IDEOGRAPHIC COMMA */
- } else if (c == 0x3002) {
- s = 0xff61; /* HALFWIDTH IDEOGRAPHIC FULL STOP */
- } else if (c == 0x300c) {
- s = 0xff62; /* HALFWIDTH LEFT CORNER BRACKET */
- } else if (c == 0x300d) {
- s = 0xff63; /* HALFWIDTH RIGHT CORNER BRACKET */
- } else if (c == 0x309b) {
- s = 0xff9e; /* HALFWIDTH KATAKANA VOICED SOUND MARK */
- } else if (c == 0x309c) {
- s = 0xff9f; /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */
- } else if (c == 0x30fc) {
- s = 0xff70; /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */
- } else if (c == 0x30fb) {
- s = 0xff65; /* HALFWIDTH KATAKANA MIDDLE DOT */
- }
- } else if (mode & 0x30000) {
- if ((mode & 0x10000) && c >= 0x3041 && c <= 0x3093) { /* Zenkaku hirangana to Zenkaku katakana */
- s = c + 0x60;
- } else if ((mode & 0x20000) && c >= 0x30a1 && c <= 0x30f3) { /* Zenkaku katakana to Zenkaku hirangana */
- s = c - 0x60;
- }
- }
-
- if (mode & 0x100000) { /* special ascii to symbol */
- if (c == 0x5c) {
- s = 0xffe5; /* FULLWIDTH YEN SIGN */
- } else if (c == 0xa5) { /* YEN SIGN */
- s = 0xffe5; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x7e) {
- s = 0xffe3; /* FULLWIDTH MACRON */
- } else if (c == 0x203e) { /* OVERLINE */
- s = 0xffe3; /* FULLWIDTH MACRON */
- } else if (c == 0x27) {
- s = 0x2019; /* RIGHT SINGLE QUOTATION MARK */
- } else if (c == 0x22) {
- s = 0x201d; /* RIGHT DOUBLE QUOTATION MARK */
- }
- } else if (mode & 0x200000) { /* special symbol to ascii */
- if (c == 0xffe5) { /* FULLWIDTH YEN SIGN */
- s = 0x5c;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x5c;
- } else if (c == 0xffe3) { /* FULLWIDTH MACRON */
- s = 0x7e;
- } else if (c == 0x203e) { /* OVERLINE */
- s = 0x7e;
- } else if (c == 0x2018) { /* LEFT SINGLE QUOTATION MARK*/
- s = 0x27;
- } else if (c == 0x2019) { /* RIGHT SINGLE QUOTATION MARK */
- s = 0x27;
- } else if (c == 0x201c) { /* LEFT DOUBLE QUOTATION MARK */
- s = 0x22;
- } else if (c == 0x201d) { /* RIGHT DOUBLE QUOTATION MARK */
- s = 0x22;
- }
- }
-
- if (mode & 0x400000) { /* special ascii to symbol */
- if (c == 0x5c) {
- s = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */
- } else if (c == 0x7e) {
- s = 0xff5e; /* FULLWIDTH TILDE */
- } else if (c == 0x27) {
- s = 0xff07; /* FULLWIDTH APOSTROPHE */
- } else if (c == 0x22) {
- s = 0xff02; /* FULLWIDTH QUOTATION MARK */
- }
- } else if (mode & 0x800000) { /* special symbol to ascii */
- if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x5c;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x7e;
- } else if (c == 0xff07) { /* FULLWIDTH APOSTROPHE */
- s = 0x27;
- } else if (c == 0xff02) { /* FULLWIDTH QUOTATION MARK */
- s = 0x22;
- }
- }
-
- return (*pc->next_filter->filter_function)(s, pc->next_filter TSRMLS_CC);
-}
-
-static int
-collector_hantozen_flush(struct collector_hantozen_data *pc TSRMLS_DC)
-{
- int ret, n;
-
- ret = 0;
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- if (pc->mode & 0x100) { /* hankaku kana to zenkaku katakana */
- ret = (*pc->next_filter->filter_function)(0x3000 + hankana2zenkata_table[n], pc->next_filter TSRMLS_CC);
- } else if (pc->mode & 0x200) { /* hankaku kana to zenkaku hirangana */
- ret = (*pc->next_filter->filter_function)(0x3000 + hankana2zenhira_table[n], pc->next_filter TSRMLS_CC);
- }
- pc->status = 0;
- }
-
- return ret;
-}
-
-mbfl_string *
-mbfl_ja_jp_hantozen(
- mbfl_string *string,
- mbfl_string *result,
- int mode TSRMLS_DC)
-{
- int n;
- unsigned char *p;
- mbfl_encoding *encoding;
- mbfl_memory_device device;
- struct collector_hantozen_data pc;
- mbfl_convert_filter *decoder;
- mbfl_convert_filter *encoder;
-
- /* initialize */
- if (string == NULL || result == NULL) {
- return NULL;
- }
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL) {
- return NULL;
- }
- mbfl_memory_device_init(&device, string->len, 0 TSRMLS_CC);
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device TSRMLS_CC);
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_hantozen, 0, &pc TSRMLS_CC);
- if (decoder == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(decoder TSRMLS_CC);
- return NULL;
- }
- pc.next_filter = decoder;
- pc.mode = mode;
- pc.status = 0;
- pc.cache = 0;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- }
-
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- collector_hantozen_flush(&pc TSRMLS_CC);
- mbfl_convert_filter_flush(decoder TSRMLS_CC);
- result = mbfl_memory_device_result(&device, result TSRMLS_CC);
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(decoder TSRMLS_CC);
-
- return result;
-}
-
-
-/*
- * MIME header encode
- */
-struct mime_header_encoder_data {
- mbfl_convert_filter *conv1_filter;
- mbfl_convert_filter *block_filter;
- mbfl_convert_filter *conv2_filter;
- mbfl_convert_filter *conv2_filter_backup;
- mbfl_convert_filter *encod_filter;
- mbfl_convert_filter *encod_filter_backup;
- mbfl_memory_device outdev;
- mbfl_memory_device tmpdev;
- int status1;
- int status2;
- int prevpos;
- int linehead;
- int firstindent;
- int encnamelen;
- int lwsplen;
- char encname[128];
- char lwsp[16];
-};
-
-static int
-mime_header_encoder_block_collector(int c, void *data TSRMLS_DC)
-{
- int n;
- struct mime_header_encoder_data *pe = (struct mime_header_encoder_data *)data;
-
- switch (pe->status2) {
- case 1: /* encoded word */
- pe->prevpos = pe->outdev.pos;
- mbfl_convert_filter_copy(pe->conv2_filter, pe->conv2_filter_backup TSRMLS_CC);
- mbfl_convert_filter_copy(pe->encod_filter, pe->encod_filter_backup TSRMLS_CC);
- (*pe->conv2_filter->filter_function)(c, pe->conv2_filter TSRMLS_CC);
- (*pe->conv2_filter->filter_flush)(pe->conv2_filter TSRMLS_CC);
- (*pe->encod_filter->filter_flush)(pe->encod_filter TSRMLS_CC);
- n = pe->outdev.pos - pe->linehead + pe->firstindent;
- pe->outdev.pos = pe->prevpos;
- mbfl_convert_filter_copy(pe->conv2_filter_backup, pe->conv2_filter TSRMLS_CC);
- mbfl_convert_filter_copy(pe->encod_filter_backup, pe->encod_filter TSRMLS_CC);
- if (n >= 74) {
- (*pe->conv2_filter->filter_flush)(pe->conv2_filter TSRMLS_CC);
- (*pe->encod_filter->filter_flush)(pe->encod_filter TSRMLS_CC);
- mbfl_memory_device_strncat(&pe->outdev, "\x3f\x3d", 2 TSRMLS_CC); /* ?= */
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen TSRMLS_CC);
- pe->linehead = pe->outdev.pos;
- pe->firstindent = 0;
- mbfl_memory_device_strncat(&pe->outdev, pe->encname, pe->encnamelen TSRMLS_CC);
- c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter TSRMLS_CC);
- } else {
- c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter TSRMLS_CC);
- }
- break;
-
- default:
- mbfl_memory_device_strncat(&pe->outdev, pe->encname, pe->encnamelen TSRMLS_CC);
- c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter TSRMLS_CC);
- pe->status2 = 1;
- break;
- }
-
- return c;
-}
-
-static int
-mime_header_encoder_collector(int c, void *data TSRMLS_DC)
-{
- int n;
- struct mime_header_encoder_data *pe = (struct mime_header_encoder_data *)data;
-
- switch (pe->status1) {
- case 11: /* encoded word */
- (*pe->block_filter->filter_function)(c, pe->block_filter TSRMLS_CC);
- break;
-
- default: /* ASCII */
- if (c >= 0x21 && c < 0x7f) { /* ASCII exclude SPACE and CTLs */
- mbfl_memory_device_output(c, &pe->tmpdev TSRMLS_CC);
- pe->status1 = 1;
- } else if (pe->status1 == 0 && c == 0x20) { /* repeat SPACE */
- mbfl_memory_device_output(c, &pe->tmpdev TSRMLS_CC);
- } else {
- if (pe->tmpdev.pos < 74 && c == 0x20) {
- n = pe->outdev.pos - pe->linehead + pe->tmpdev.pos + pe->firstindent;
- if (n > 74) {
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen TSRMLS_CC); /* LWSP */
- pe->linehead = pe->outdev.pos;
- pe->firstindent = 0;
- } else if (pe->outdev.pos > 0) {
- mbfl_memory_device_output(0x20, &pe->outdev TSRMLS_CC);
- }
- mbfl_memory_device_devcat(&pe->outdev, &pe->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pe->tmpdev TSRMLS_CC);
- pe->status1 = 0;
- } else {
- n = pe->outdev.pos - pe->linehead + pe->encnamelen + pe->firstindent;
- if (n > 60) {
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen TSRMLS_CC); /* LWSP */
- pe->linehead = pe->outdev.pos;
- pe->firstindent = 0;
- } else if (pe->outdev.pos > 0) {
- mbfl_memory_device_output(0x20, &pe->outdev TSRMLS_CC);
- }
- mbfl_convert_filter_devcat(pe->block_filter, &pe->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pe->tmpdev TSRMLS_CC);
- (*pe->block_filter->filter_function)(c, pe->block_filter TSRMLS_CC);
- pe->status1 = 11;
- }
- }
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result TSRMLS_DC)
-{
- if (pe->status1 >= 10) {
- (*pe->conv2_filter->filter_flush)(pe->conv2_filter TSRMLS_CC);
- (*pe->encod_filter->filter_flush)(pe->encod_filter TSRMLS_CC);
- mbfl_memory_device_strncat(&pe->outdev, "\x3f\x3d", 2 TSRMLS_CC); /* ?= */
- } else if (pe->tmpdev.pos > 0) {
- if (pe->outdev.pos > 0) {
- if ((pe->outdev.pos - pe->linehead + pe->tmpdev.pos) > 74) {
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen TSRMLS_CC);
- } else {
- mbfl_memory_device_output(0x20, &pe->outdev TSRMLS_CC);
- }
- }
- mbfl_memory_device_devcat(&pe->outdev, &pe->tmpdev TSRMLS_CC);
- }
- mbfl_memory_device_reset(&pe->tmpdev TSRMLS_CC);
- pe->prevpos = 0;
- pe->linehead = 0;
- pe->status1 = 0;
- pe->status2 = 0;
-
- return mbfl_memory_device_result(&pe->outdev, result TSRMLS_CC);
-}
-
-struct mime_header_encoder_data*
-mime_header_encoder_new(
- enum mbfl_no_encoding incode,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding transenc TSRMLS_DC)
-{
- int n;
- const char *s;
- mbfl_encoding *outencoding;
- struct mime_header_encoder_data *pe;
-
- /* get output encoding and check MIME charset name */
- outencoding = mbfl_no2encoding(outcode);
- if (outencoding == NULL || outencoding->mime_name == NULL || outencoding->mime_name[0] == '\0') {
- return NULL;
- }
-
- pe = (struct mime_header_encoder_data*)mbfl_malloc(sizeof(struct mime_header_encoder_data));
- if (pe == NULL) {
- return NULL;
- }
-
- mbfl_memory_device_init(&pe->outdev, 0, 0 TSRMLS_CC);
- mbfl_memory_device_init(&pe->tmpdev, 0, 0 TSRMLS_CC);
- pe->prevpos = 0;
- pe->linehead = 0;
- pe->firstindent = 0;
- pe->status1 = 0;
- pe->status2 = 0;
-
- /* make the encoding description string exp. "=?ISO-2022-JP?B?" */
- n = 0;
- pe->encname[n++] = 0x3d;
- pe->encname[n++] = 0x3f;
- s = outencoding->mime_name;
- while (*s) {
- pe->encname[n++] = *s++;
- }
- pe->encname[n++] = 0x3f;
- if (transenc == mbfl_no_encoding_qprint) {
- pe->encname[n++] = 0x51;
- } else {
- pe->encname[n++] = 0x42;
- transenc = mbfl_no_encoding_base64;
- }
- pe->encname[n++] = 0x3f;
- pe->encname[n] = '\0';
- pe->encnamelen = n;
-
- n = 0;
- pe->lwsp[n++] = 0x0d;
- pe->lwsp[n++] = 0x0a;
- pe->lwsp[n++] = 0x20;
- pe->lwsp[n] = '\0';
- pe->lwsplen = n;
-
- /* transfer encode filter */
- pe->encod_filter = mbfl_convert_filter_new(outcode, transenc, mbfl_memory_device_output, 0, &(pe->outdev) TSRMLS_CC);
- pe->encod_filter_backup = mbfl_convert_filter_new(outcode, transenc, mbfl_memory_device_output, 0, &(pe->outdev) TSRMLS_CC);
-
- /* Output code filter */
- pe->conv2_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, outcode, mbfl_filter_output_pipe, 0, pe->encod_filter TSRMLS_CC);
- pe->conv2_filter_backup = mbfl_convert_filter_new(mbfl_no_encoding_wchar, outcode, mbfl_filter_output_pipe, 0, pe->encod_filter TSRMLS_CC);
-
- /* encoded block filter */
- pe->block_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, mbfl_no_encoding_wchar, mime_header_encoder_block_collector, 0, pe TSRMLS_CC);
-
- /* Input code filter */
- pe->conv1_filter = mbfl_convert_filter_new(incode, mbfl_no_encoding_wchar, mime_header_encoder_collector, 0, pe TSRMLS_CC);
-
- if (pe->encod_filter == NULL ||
- pe->encod_filter_backup == NULL ||
- pe->conv2_filter == NULL ||
- pe->conv2_filter_backup == NULL ||
- pe->conv1_filter == NULL) {
- mime_header_encoder_delete(pe TSRMLS_CC);
- return NULL;
- }
-
- if (transenc == mbfl_no_encoding_qprint) {
- pe->encod_filter->status |= MBFL_QPRINT_STS_MIME_HEADER;
- pe->encod_filter_backup->status |= MBFL_QPRINT_STS_MIME_HEADER;
- } else {
- pe->encod_filter->status |= MBFL_BASE64_STS_MIME_HEADER;
- pe->encod_filter_backup->status |= MBFL_BASE64_STS_MIME_HEADER;
- }
-
- return pe;
-}
-
-void
-mime_header_encoder_delete(struct mime_header_encoder_data *pe TSRMLS_DC)
-{
- if (pe) {
- mbfl_convert_filter_delete(pe->conv1_filter TSRMLS_CC);
- mbfl_convert_filter_delete(pe->block_filter TSRMLS_CC);
- mbfl_convert_filter_delete(pe->conv2_filter TSRMLS_CC);
- mbfl_convert_filter_delete(pe->conv2_filter_backup TSRMLS_CC);
- mbfl_convert_filter_delete(pe->encod_filter TSRMLS_CC);
- mbfl_convert_filter_delete(pe->encod_filter_backup TSRMLS_CC);
- mbfl_memory_device_clear(&pe->outdev TSRMLS_CC);
- mbfl_memory_device_clear(&pe->tmpdev TSRMLS_CC);
- mbfl_free((void*)pe);
- }
-}
-
-int
-mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe TSRMLS_DC)
-{
- return (*pe->conv1_filter->filter_function)(c, pe->conv1_filter TSRMLS_CC);
-}
-
-mbfl_string *
-mbfl_mime_header_encode(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding encoding,
- const char *linefeed,
- int indent TSRMLS_DC)
-{
- int n;
- unsigned char *p;
- struct mime_header_encoder_data *pe;
-
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = mbfl_no_encoding_ascii;
-
- pe = mime_header_encoder_new(string->no_encoding, outcode, encoding TSRMLS_CC);
- if (pe == NULL) {
- return NULL;
- }
-
- if (linefeed != NULL) {
- n = 0;
- while (*linefeed && n < 8) {
- pe->lwsp[n++] = *linefeed++;
- }
- pe->lwsp[n++] = 0x20;
- pe->lwsp[n] = '\0';
- pe->lwsplen = n;
- }
- if (indent > 0 && indent < 74) {
- pe->firstindent = indent;
- }
-
- n = string->len;
- p = string->val;
- while (n > 0) {
- (*pe->conv1_filter->filter_function)(*p++, pe->conv1_filter TSRMLS_CC);
- n--;
- }
-
- result = mime_header_encoder_result(pe, result TSRMLS_CC);
- mime_header_encoder_delete(pe TSRMLS_CC);
-
- return result;
-}
-
-
-/*
- * MIME header decode
- */
-struct mime_header_decoder_data {
- mbfl_convert_filter *deco_filter;
- mbfl_convert_filter *conv1_filter;
- mbfl_convert_filter *conv2_filter;
- mbfl_memory_device outdev;
- mbfl_memory_device tmpdev;
- int cspos;
- int status;
- enum mbfl_no_encoding encoding;
- enum mbfl_no_encoding incode;
- enum mbfl_no_encoding outcode;
-};
-
-static int
-mime_header_decoder_collector(int c, void* data TSRMLS_DC)
-{
- mbfl_encoding *encoding;
- struct mime_header_decoder_data *pd = (struct mime_header_decoder_data*)data;
-
- switch (pd->status) {
- case 1:
- if (c == 0x3f) { /* ? */
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- pd->cspos = pd->tmpdev.pos;
- pd->status = 2;
- } else {
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- if (c == 0x3d) { /* = */
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- } else if (c == 0x0d || c == 0x0a) { /* CR or LF */
- pd->status = 9;
- } else {
- (*pd->conv1_filter->filter_function)(c, pd->conv1_filter TSRMLS_CC);
- pd->status = 0;
- }
- }
- break;
- case 2: /* store charset string */
- if (c == 0x3f) { /* ? */
- /* identify charset */
- mbfl_memory_device_output('\0', &pd->tmpdev TSRMLS_CC);
- encoding = mbfl_name2encoding(&pd->tmpdev.buffer[pd->cspos]);
- if (encoding != NULL) {
- pd->incode = encoding->no_encoding;
- pd->status = 3;
- }
- mbfl_memory_device_unput(&pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- } else {
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- if (pd->tmpdev.pos > 100) { /* too long charset string */
- pd->status = 0;
- } else if (c == 0x0d || c == 0x0a) { /* CR or LF */
- mbfl_memory_device_unput(&pd->tmpdev TSRMLS_CC);
- pd->status = 9;
- }
- if (pd->status != 2) {
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- }
- }
- break;
- case 3: /* identify encoding */
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- if (c == 0x42 || c == 0x62) { /* 'B' or 'b' */
- pd->encoding = mbfl_no_encoding_base64;
- pd->status = 4;
- } else if (c == 0x51 || c == 0x71) { /* 'Q' or 'q' */
- pd->encoding = mbfl_no_encoding_qprint;
- pd->status = 4;
- } else {
- if (c == 0x0d || c == 0x0a) { /* CR or LF */
- mbfl_memory_device_unput(&pd->tmpdev TSRMLS_CC);
- pd->status = 9;
- } else {
- pd->status = 0;
- }
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- }
- break;
- case 4: /* reset filter */
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- if (c == 0x3f) { /* ? */
- /* charset convert filter */
- mbfl_convert_filter_reset(pd->conv1_filter, pd->incode, mbfl_no_encoding_wchar TSRMLS_CC);
- /* decode filter */
- mbfl_convert_filter_reset(pd->deco_filter, pd->encoding, mbfl_no_encoding_8bit TSRMLS_CC);
- pd->status = 5;
- } else {
- if (c == 0x0d || c == 0x0a) { /* CR or LF */
- mbfl_memory_device_unput(&pd->tmpdev TSRMLS_CC);
- pd->status = 9;
- } else {
- pd->status = 0;
- }
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- }
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- break;
- case 5: /* encoded block */
- if (c == 0x3f) { /* ? */
- pd->status = 6;
- } else {
- (*pd->deco_filter->filter_function)(c, pd->deco_filter TSRMLS_CC);
- }
- break;
- case 6: /* check end position */
- if (c == 0x3d) { /* = */
- /* flush and reset filter */
- (*pd->deco_filter->filter_flush)(pd->deco_filter TSRMLS_CC);
- (*pd->conv1_filter->filter_flush)(pd->conv1_filter TSRMLS_CC);
- mbfl_convert_filter_reset(pd->conv1_filter, mbfl_no_encoding_ascii, mbfl_no_encoding_wchar TSRMLS_CC);
- pd->status = 7;
- } else {
- (*pd->deco_filter->filter_function)(0x3f, pd->deco_filter TSRMLS_CC);
- if (c != 0x3f) { /* ? */
- (*pd->deco_filter->filter_function)(c, pd->deco_filter TSRMLS_CC);
- pd->status = 5;
- }
- }
- break;
- case 7: /* after encoded block */
- if (c == 0x0d || c == 0x0a) { /* CR LF */
- pd->status = 8;
- } else {
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- if (c == 0x3d) { /* = */
- pd->status = 1;
- } else if (c != 0x20 && c != 0x09) { /* not space */
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- pd->status = 0;
- }
- }
- break;
- case 8: /* folding */
- case 9: /* folding */
- if (c != 0x0d && c != 0x0a && c != 0x20 && c != 0x09) {
- if (c == 0x3d) { /* = */
- if (pd->status == 8) {
- mbfl_memory_device_output(0x20, &pd->tmpdev TSRMLS_CC); /* SPACE */
- } else {
- (*pd->conv1_filter->filter_function)(0x20, pd->conv1_filter TSRMLS_CC);
- }
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- pd->status = 1;
- } else {
- mbfl_memory_device_output(0x20, &pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- pd->status = 0;
- }
- }
- break;
- default: /* non encoded block */
- if (c == 0x0d || c == 0x0a) { /* CR LF */
- pd->status = 9;
- } else if (c == 0x3d) { /* = */
- mbfl_memory_device_output(c, &pd->tmpdev TSRMLS_CC);
- pd->status = 1;
- } else {
- (*pd->conv1_filter->filter_function)(c, pd->conv1_filter TSRMLS_CC);
- }
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result TSRMLS_DC)
-{
- switch (pd->status) {
- case 1:
- case 2:
- case 3:
- case 4:
- case 7:
- case 8:
- case 9:
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev TSRMLS_CC);
- break;
- case 5:
- case 6:
- (*pd->deco_filter->filter_flush)(pd->deco_filter TSRMLS_CC);
- (*pd->conv1_filter->filter_flush)(pd->conv1_filter TSRMLS_CC);
- break;
- }
- (*pd->conv2_filter->filter_flush)(pd->conv2_filter TSRMLS_CC);
- mbfl_memory_device_reset(&pd->tmpdev TSRMLS_CC);
- pd->status = 0;
-
- return mbfl_memory_device_result(&pd->outdev, result TSRMLS_CC);
-}
-
-struct mime_header_decoder_data*
-mime_header_decoder_new(enum mbfl_no_encoding outcode TSRMLS_DC)
-{
- struct mime_header_decoder_data *pd;
-
- pd = (struct mime_header_decoder_data*)mbfl_malloc(sizeof(struct mime_header_decoder_data));
- if (pd == NULL) {
- return NULL;
- }
-
- mbfl_memory_device_init(&pd->outdev, 0, 0 TSRMLS_CC);
- mbfl_memory_device_init(&pd->tmpdev, 0, 0 TSRMLS_CC);
- pd->cspos = 0;
- pd->status = 0;
- pd->encoding = mbfl_no_encoding_pass;
- pd->incode = mbfl_no_encoding_ascii;
- pd->outcode = outcode;
- /* charset convert filter */
- pd->conv2_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, pd->outcode, mbfl_memory_device_output, 0, &pd->outdev TSRMLS_CC);
- pd->conv1_filter = mbfl_convert_filter_new(pd->incode, mbfl_no_encoding_wchar, mbfl_filter_output_pipe, 0, pd->conv2_filter TSRMLS_CC);
- /* decode filter */
- pd->deco_filter = mbfl_convert_filter_new(pd->encoding, mbfl_no_encoding_8bit, mbfl_filter_output_pipe, 0, pd->conv1_filter TSRMLS_CC);
-
- if (pd->conv1_filter == NULL || pd->conv2_filter == NULL || pd->deco_filter == NULL) {
- mime_header_decoder_delete(pd TSRMLS_CC);
- return NULL;
- }
-
- return pd;
-}
-
-void
-mime_header_decoder_delete(struct mime_header_decoder_data *pd TSRMLS_DC)
-{
- if (pd) {
- mbfl_convert_filter_delete(pd->conv2_filter TSRMLS_CC);
- mbfl_convert_filter_delete(pd->conv1_filter TSRMLS_CC);
- mbfl_convert_filter_delete(pd->deco_filter TSRMLS_CC);
- mbfl_memory_device_clear(&pd->outdev TSRMLS_CC);
- mbfl_memory_device_clear(&pd->tmpdev TSRMLS_CC);
- mbfl_free((void*)pd);
- }
-}
-
-int
-mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd TSRMLS_DC)
-{
- return mime_header_decoder_collector(c, pd TSRMLS_CC);
-}
-
-mbfl_string *
-mbfl_mime_header_decode(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding outcode TSRMLS_DC)
-{
- int n;
- unsigned char *p;
- struct mime_header_decoder_data *pd;
-
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = outcode;
-
- pd = mime_header_decoder_new(outcode TSRMLS_CC);
- if (pd == NULL) {
- return NULL;
- }
-
- /* feed data */
- n = string->len;
- p = string->val;
- while (n > 0) {
- mime_header_decoder_collector(*p++, pd TSRMLS_CC);
- n--;
- }
-
- result = mime_header_decoder_result(pd, result TSRMLS_CC);
- mime_header_decoder_delete(pd TSRMLS_CC);
-
- return result;
-}
-
-
-
-/*
- * convert HTML numeric entity
- */
-struct collector_htmlnumericentity_data {
- mbfl_convert_filter *decoder;
- int status;
- int cache;
- int digit;
- int *convmap;
- int mapsize;
-};
-
-static int
-collector_encode_htmlnumericentity(int c, void *data TSRMLS_DC)
-{
- struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data;
- int f, n, s, r, d, size, *mapelm;
-
- size = pc->mapsize;
- f = 0;
- n = 0;
- while (n < size) {
- mapelm = &(pc->convmap[n*4]);
- if (c >= mapelm[0] && c <= mapelm[1]) {
- s = (c + mapelm[2]) & mapelm[3];
- if (s >= 0) {
- (*pc->decoder->filter_function)(0x26, pc->decoder TSRMLS_CC); /* '&' */
- (*pc->decoder->filter_function)(0x23, pc->decoder TSRMLS_CC); /* '#' */
- r = 100000000;
- s %= r;
- while (r > 0) {
- d = s/r;
- if (d || f) {
- f = 1;
- s %= r;
- (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder TSRMLS_CC);
- }
- r /= 10;
- }
- if (!f) {
- f = 1;
- (*pc->decoder->filter_function)(mbfl_hexchar_table[0], pc->decoder TSRMLS_CC);
- }
- (*pc->decoder->filter_function)(0x3b, pc->decoder TSRMLS_CC); /* ';' */
- }
- }
- if (f) {
- break;
- }
- n++;
- }
- if (!f) {
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
-
- return c;
-}
-
-static int
-collector_decode_htmlnumericentity(int c, void *data TSRMLS_DC)
-{
- struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data;
- int f, n, s, r, d, size, *mapelm;
-
- switch (pc->status) {
- case 1:
- if (c == 0x23) { /* '#' */
- pc->status = 2;
- } else {
- pc->status = 0;
- (*pc->decoder->filter_function)(0x26, pc->decoder TSRMLS_CC); /* '&' */
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
- break;
- case 2:
- if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
- pc->cache = c - 0x30;
- pc->status = 3;
- pc->digit = 1;
- } else {
- pc->status = 0;
- (*pc->decoder->filter_function)(0x26, pc->decoder TSRMLS_CC); /* '&' */
- (*pc->decoder->filter_function)(0x23, pc->decoder TSRMLS_CC); /* '#' */
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
- break;
- case 3:
- s = 0;
- f = 0;
- if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
- if (pc->digit > 9) {
- pc->status = 0;
- s = pc->cache;
- f = 1;
- } else {
- s = pc->cache*10 + c - 0x30;
- pc->cache = s;
- pc->digit++;
- }
- } else {
- pc->status = 0;
- s = pc->cache;
- f = 1;
- n = 0;
- size = pc->mapsize;
- while (n < size) {
- mapelm = &(pc->convmap[n*4]);
- d = s - mapelm[2];
- if (d >= mapelm[0] && d <= mapelm[1]) {
- f = 0;
- (*pc->decoder->filter_function)(d, pc->decoder TSRMLS_CC);
- if (c != 0x3b) { /* ';' */
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
- break;
- }
- n++;
- }
- }
- if (f) {
- (*pc->decoder->filter_function)(0x26, pc->decoder TSRMLS_CC); /* '&' */
- (*pc->decoder->filter_function)(0x23, pc->decoder TSRMLS_CC); /* '#' */
- r = 1;
- n = pc->digit;
- while (n > 0) {
- r *= 10;
- n--;
- }
- s %= r;
- r /= 10;
- while (r > 0) {
- d = s/r;
- s %= r;
- r /= 10;
- (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder TSRMLS_CC);
- }
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
- break;
- default:
- if (c == 0x26) { /* '&' */
- pc->status = 1;
- } else {
- (*pc->decoder->filter_function)(c, pc->decoder TSRMLS_CC);
- }
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mbfl_html_numeric_entity(
- mbfl_string *string,
- mbfl_string *result,
- int *convmap,
- int mapsize,
- int type TSRMLS_DC)
-{
- struct collector_htmlnumericentity_data pc;
- mbfl_memory_device device;
- mbfl_convert_filter *encoder;
- int n;
- unsigned char *p;
-
- if (string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- mbfl_memory_device_init(&device, string->len, 0 TSRMLS_CC);
-
- /* output code filter */
- pc.decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device TSRMLS_CC);
- /* wchar filter */
- if (type == 0) {
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_encode_htmlnumericentity, 0, &pc TSRMLS_CC);
- } else {
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_decode_htmlnumericentity, 0, &pc TSRMLS_CC);
- }
- if (pc.decoder == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(pc.decoder TSRMLS_CC);
- return NULL;
- }
- pc.status = 0;
- pc.cache = 0;
- pc.digit = 0;
- pc.convmap = convmap;
- pc.mapsize = mapsize;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder TSRMLS_CC) < 0) {
- break;
- }
- n--;
- }
- }
- mbfl_convert_filter_flush(encoder TSRMLS_CC);
- mbfl_convert_filter_flush(pc.decoder TSRMLS_CC);
- result = mbfl_memory_device_result(&device, result TSRMLS_CC);
- mbfl_convert_filter_delete(encoder TSRMLS_CC);
- mbfl_convert_filter_delete(pc.decoder TSRMLS_CC);
-
- return result;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter.h b/ext/mbstring/mbfilter.h
deleted file mode 100644
index 1b18f78a6b..0000000000
--- a/ext/mbstring/mbfilter.h
+++ /dev/null
@@ -1,577 +0,0 @@
-/* charset=UTF-8
- * vim: encoding=utf-8:
- * */
-
-/*
- * "streamable kanji code filter and converter"
- *
- * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
- *
- * This software is released under the GNU Lesser General Public License.
- * (Version 2.1, February 1999)
- * Please read the following detail of the licence (in japanese).
- *
- * ◆使用許諾æ¡ä»¶â—†
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- *
- * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- * http://www.gnu.org/ --- GNUウェブサイト
- * http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
- *
- * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- * ã¯ã‚ã‚Šã¾ã›ã‚“。
- *
- * â—†ä¿è¨¼å†…容◆
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- * 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- * ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- * å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
- *
- * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
- *
- * 〒102-0073
- * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- * Phone: 03-3512-3655, Fax: 03-3512-3656
- * Email: sales@happysize.co.jp
- * Web: http://happysize.com/
- *
- * ◆著者◆
- *
- * 金本 茂 <sgk@happysize.co.jp>
- *
- * ◆履歴◆
- *
- * 1998/11/10 sgk implementation in C++
- * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
- *
- */
-
-/*
- * Unicode support
- *
- * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
- * All rights reserved.
- *
- */
-
-/*
- *
- * streamable kanji code filter and converter
- * mbfl : Multi Byte FiLter Liblary
- *
- */
-
-/* $Id$ */
-
-
-#ifndef MBFL_MBFILTER_H
-#define MBFL_MBFILTER_H
-
-enum mbfl_no_language {
- mbfl_no_language_invalid = -1,
- mbfl_no_language_uni,
- mbfl_no_language_min,
- mbfl_no_language_catalan, /* ca */
- mbfl_no_language_danish, /* da */
- mbfl_no_language_german, /* de */
- mbfl_no_language_english, /* en */
- mbfl_no_language_estonian, /* et */
- mbfl_no_language_greek, /* el */
- mbfl_no_language_spanish, /* es */
- mbfl_no_language_french, /* fr */
- mbfl_no_language_italian, /* it */
- mbfl_no_language_japanese, /* ja */
- mbfl_no_language_korean, /* ko */
- mbfl_no_language_dutch, /* nl */
- mbfl_no_language_polish, /* pl */
- mbfl_no_language_portuguese, /* pt */
- mbfl_no_language_swedish, /* sv */
- mbfl_no_language_simplified_chinese, /* zh-cn */
- mbfl_no_language_traditional_chinese, /* zh-tw */
- mbfl_no_language_russian, /* ru */
- mbfl_no_language_max
-};
-
-enum mbfl_no_encoding {
- mbfl_no_encoding_invalid = -1,
- mbfl_no_encoding_pass,
- mbfl_no_encoding_auto,
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte2be,
- mbfl_no_encoding_byte2le,
- mbfl_no_encoding_byte4be,
- mbfl_no_encoding_byte4le,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_uuencode,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_7bit,
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_charset_min,
- mbfl_no_encoding_ucs4,
- mbfl_no_encoding_ucs4be,
- mbfl_no_encoding_ucs4le,
- mbfl_no_encoding_ucs2,
- mbfl_no_encoding_ucs2be,
- mbfl_no_encoding_ucs2le,
- mbfl_no_encoding_utf32,
- mbfl_no_encoding_utf32be,
- mbfl_no_encoding_utf32le,
- mbfl_no_encoding_utf16,
- mbfl_no_encoding_utf16be,
- mbfl_no_encoding_utf16le,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_utf7,
- mbfl_no_encoding_utf7imap,
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_euc_jp,
- mbfl_no_encoding_sjis,
- mbfl_no_encoding_eucjp_win,
- mbfl_no_encoding_sjis_win,
- mbfl_no_encoding_sjis_mac,
- mbfl_no_encoding_jis,
- mbfl_no_encoding_2022jp,
- mbfl_no_encoding_cp1252,
- mbfl_no_encoding_8859_1,
- mbfl_no_encoding_8859_2,
- mbfl_no_encoding_8859_3,
- mbfl_no_encoding_8859_4,
- mbfl_no_encoding_8859_5,
- mbfl_no_encoding_8859_6,
- mbfl_no_encoding_8859_7,
- mbfl_no_encoding_8859_8,
- mbfl_no_encoding_8859_9,
- mbfl_no_encoding_8859_10,
- mbfl_no_encoding_8859_13,
- mbfl_no_encoding_8859_14,
- mbfl_no_encoding_8859_15,
- mbfl_no_encoding_euc_cn,
- mbfl_no_encoding_cp936,
- mbfl_no_encoding_euc_tw,
- mbfl_no_encoding_big5,
- mbfl_no_encoding_euc_kr,
- mbfl_no_encoding_2022kr,
- mbfl_no_encoding_uhc,
- mbfl_no_encoding_hz,
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_cp866,
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_charset_max
-};
-
-
-/*
- * language
- */
-typedef struct _mbfl_language {
- enum mbfl_no_language no_language;
- const char *name;
- const char *short_name;
- const char *(*aliases)[];
- enum mbfl_no_encoding mail_charset;
- enum mbfl_no_encoding mail_header_encoding;
- enum mbfl_no_encoding mail_body_encoding;
-} mbfl_language;
-
-
-/*
- * encoding
- */
-typedef struct _mbfl_encoding {
- enum mbfl_no_encoding no_encoding;
- const char *name;
- const char *mime_name;
- const char *(*aliases)[];
- const unsigned char *mblen_table;
- unsigned int flag;
-} mbfl_encoding;
-
-
-#define MBFL_ENCTYPE_SBCS 0x00000001
-#define MBFL_ENCTYPE_MBCS 0x00000002
-#define MBFL_ENCTYPE_WCS2BE 0x00000010
-#define MBFL_ENCTYPE_WCS2LE 0x00000020
-#define MBFL_ENCTYPE_MWC2BE 0x00000040
-#define MBFL_ENCTYPE_MWC2LE 0x00000080
-#define MBFL_ENCTYPE_WCS4BE 0x00000100
-#define MBFL_ENCTYPE_WCS4LE 0x00000200
-#define MBFL_ENCTYPE_MWC4BE 0x00000400
-#define MBFL_ENCTYPE_MWC4LE 0x00000800
-#define MBFL_ENCTYPE_SHFTCODE 0x00001000
-
-/* wchar plane, special charactor */
-#define MBFL_WCSPLANE_MASK 0xffff
-#define MBFL_WCSPLANE_UCS2MAX 0x00010000
-#define MBFL_WCSPLANE_SUPMIN 0x00010000
-#define MBFL_WCSPLANE_SUPMAX 0x00200000
-#define MBFL_WCSPLANE_JIS0208 0x70e10000 /* JIS HEX : 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_JIS0212 0x70e20000 /* JIS HEX : 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_WINCP932 0x70e30000 /* JIS HEX : 2121h - 9898h */
-#define MBFL_WCSPLANE_8859_1 0x70e40000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_2 0x70e50000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_3 0x70e60000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_4 0x70e70000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_5 0x70e80000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_6 0x70e90000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_7 0x70ea0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_8 0x70eb0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_9 0x70ec0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_10 0x70ed0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_13 0x70ee0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_14 0x70ef0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_15 0x70f00000 /* 00h - FFh */
-#define MBFL_WCSPLANE_KSC5601 0x70f10000 /* 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_GB2312 0x70f20000 /* 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_WINCP936 0x70f30000 /* 2121h - 9898h */
-#define MBFL_WCSPLANE_BIG5 0x70f40000 /* 2121h - 9898h */
-#define MBFL_WCSPLANE_CNS11643 0x70f50000 /* 2121h - 9898h */
-#define MBFL_WCSPLANE_UHC 0x70f60000 /* 8141h - fefeh */
-#define MBFL_WCSPLANE_CP1251 0x70f70000
-#define MBFL_WCSPLANE_CP866 0x70f80000
-#define MBFL_WCSPLANE_KOI8R 0x70f90000
-#define MBFL_WCSGROUP_MASK 0xffffff
-#define MBFL_WCSGROUP_UCS4MAX 0x70000000
-#define MBFL_WCSGROUP_WCHARMAX 0x78000000
-#define MBFL_WCSGROUP_THROUGH 0x78000000 /* 000000h - FFFFFFh */
-
-
-/*
- * string object
- */
-typedef struct _mbfl_string {
- enum mbfl_no_language no_language;
- enum mbfl_no_encoding no_encoding;
- unsigned char *val;
- unsigned int len;
-} mbfl_string;
-
-void mbfl_string_init(mbfl_string *string);
-void mbfl_string_init_set(mbfl_string *string, enum mbfl_no_language no_language, enum mbfl_no_encoding no_encoding);
-void mbfl_string_clear(mbfl_string *string);
-
-
-/*
- * language resolver
- */
-mbfl_language * mbfl_name2language(const char *name);
-mbfl_language * mbfl_no2language(enum mbfl_no_language no_language);
-enum mbfl_no_language mbfl_name2no_language(const char *name);
-const char * mbfl_no_language2name(enum mbfl_no_language no_language);
-
-
-/*
- * encoding resolver
- */
-mbfl_encoding * mbfl_name2encoding(const char *name);
-mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding);
-enum mbfl_no_encoding mbfl_name2no_encoding(const char *name);
-const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding);
-const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding);
-int mbfl_is_support_encoding(const char *name);
-
-
-/*
- * memory output function
- */
-#define MBFL_MEMORY_DEVICE_ALLOC_SIZE 64
-
-typedef struct _mbfl_memory_device {
- unsigned char *buffer;
- int length;
- int pos;
- int allocsz;
-} mbfl_memory_device;
-
-typedef struct _mbfl_wchar_device {
- unsigned int *buffer;
- int length;
- int pos;
- int allocsz;
-} mbfl_wchar_device;
-
-void mbfl_memory_device_init(mbfl_memory_device *device, int initsz, int allocsz TSRMLS_DC);
-void mbfl_memory_device_realloc(mbfl_memory_device *device, int initsz, int allocsz TSRMLS_DC);
-void mbfl_memory_device_clear(mbfl_memory_device *device TSRMLS_DC);
-void mbfl_memory_device_reset(mbfl_memory_device *device TSRMLS_DC);
-mbfl_string * mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result TSRMLS_DC);
-int mbfl_memory_device_output(int c, void *data TSRMLS_DC);
-int mbfl_memory_device_output2(int c, void *data TSRMLS_DC);
-int mbfl_memory_device_output4(int c, void *data TSRMLS_DC);
-int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc TSRMLS_DC);
-int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, int len TSRMLS_DC);
-int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src TSRMLS_DC);
-
-void mbfl_wchar_device_init(mbfl_wchar_device *device TSRMLS_DC);
-int mbfl_wchar_device_output(int c, void *data TSRMLS_DC);
-
-
-/*
- * convert filter
- */
-#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE 0
-#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR 1
-#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG 2
-
-typedef struct _mbfl_convert_filter mbfl_convert_filter;
-
-struct _mbfl_convert_filter {
- void (*filter_ctor)(mbfl_convert_filter *filter TSRMLS_DC);
- void (*filter_dtor)(mbfl_convert_filter *filter TSRMLS_DC);
- int (*filter_function)(int c, mbfl_convert_filter *filter TSRMLS_DC);
- int (*filter_flush)(mbfl_convert_filter *filter TSRMLS_DC);
- int (*output_function)(int c, void *data TSRMLS_DC);
- int (*flush_function)(void *data TSRMLS_DC);
- void *data;
- int status;
- int cache;
- mbfl_encoding *from;
- mbfl_encoding *to;
- int illegal_mode;
- int illegal_substchar;
-};
-
-struct mbfl_convert_vtbl {
- enum mbfl_no_encoding from;
- enum mbfl_no_encoding to;
- void (*filter_ctor)(mbfl_convert_filter *filter TSRMLS_DC);
- void (*filter_dtor)(mbfl_convert_filter *filter TSRMLS_DC);
- int (*filter_function)(int c, mbfl_convert_filter *filter TSRMLS_DC);
- int (*filter_flush)(mbfl_convert_filter *filter TSRMLS_DC);
-};
-
-mbfl_convert_filter *
-mbfl_convert_filter_new(
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to,
- int (*output_function)(int, void * TSRMLS_DC),
- int (*flush_function)(void * TSRMLS_DC),
- void *data TSRMLS_DC);
-void mbfl_convert_filter_delete(mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_convert_filter_flush(mbfl_convert_filter *filter TSRMLS_DC);
-void mbfl_convert_filter_reset(mbfl_convert_filter *filter, enum mbfl_no_encoding from, enum mbfl_no_encoding to TSRMLS_DC);
-void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist TSRMLS_DC);
-int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-
-/*
- * identify filter
- */
-typedef struct _mbfl_identify_filter mbfl_identify_filter;
-
-struct _mbfl_identify_filter {
- void (*filter_ctor)(mbfl_identify_filter *filter TSRMLS_DC);
- void (*filter_dtor)(mbfl_identify_filter *filter TSRMLS_DC);
- int (*filter_function)(int c, mbfl_identify_filter *filter TSRMLS_DC);
- int status;
- int flag;
- int score;
- mbfl_encoding *encoding;
-};
-
-struct mbfl_identify_vtbl {
- enum mbfl_no_encoding encoding;
- void (*filter_ctor)(mbfl_identify_filter *filter TSRMLS_DC);
- void (*filter_dtor)(mbfl_identify_filter *filter TSRMLS_DC);
- int (*filter_function)(int c, mbfl_identify_filter *filter TSRMLS_DC);
-};
-
-mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding TSRMLS_DC);
-void mbfl_identify_filter_delete(mbfl_identify_filter *filter TSRMLS_DC);
-
-
-/*
- * buffering converter
- */
-typedef struct _mbfl_buffer_converter mbfl_buffer_converter;
-
-struct _mbfl_buffer_converter {
- mbfl_convert_filter *filter1;
- mbfl_convert_filter *filter2;
- mbfl_memory_device device;
- mbfl_encoding *from;
- mbfl_encoding *to;
-};
-
-mbfl_buffer_converter * mbfl_buffer_converter_new(enum mbfl_no_encoding from, enum mbfl_no_encoding to, int buf_initsz TSRMLS_DC);
-void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd TSRMLS_DC);
-void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd TSRMLS_DC);
-int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode TSRMLS_DC);
-int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar TSRMLS_DC);
-int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n TSRMLS_DC);
-int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string TSRMLS_DC);
-int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd TSRMLS_DC);
-mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result TSRMLS_DC);
-mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result TSRMLS_DC);
-mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result TSRMLS_DC);
-
-
-/*
- * encoding detector
- */
-typedef struct _mbfl_encoding_detector mbfl_encoding_detector;
-
-struct _mbfl_encoding_detector {
- mbfl_identify_filter **filter_list;
- int filter_list_size;
-};
-
-mbfl_encoding_detector * mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC);
-void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd TSRMLS_DC);
-int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string TSRMLS_DC);
-enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd TSRMLS_DC);
-
-
-/*
- * encoding converter
- */
-mbfl_string *
-mbfl_convert_encoding(mbfl_string *string, mbfl_string *result, enum mbfl_no_encoding toenc TSRMLS_DC);
-
-
-/*
- * identify encoding
- */
-mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC);
-
-const char *
-mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC);
-
-enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz TSRMLS_DC);
-
-/*
- * strlen
- */
-int
-mbfl_strlen(mbfl_string *string TSRMLS_DC);
-
-#ifdef ZEND_MULTIBYTE
-/*
- * oddlen
- */
-int
-mbfl_oddlen(mbfl_string *string);
-#endif /* ZEND_MULTIBYTE */
-
-/*
- * strpos
- */
-int
-mbfl_strpos(mbfl_string *haystack, mbfl_string *needle, int offset, int reverse TSRMLS_DC);
-
-/*
- * substr
- */
-mbfl_string *
-mbfl_substr(mbfl_string *string, mbfl_string *result, int from, int length TSRMLS_DC);
-
-/*
- * strcut
- */
-mbfl_string *
-mbfl_strcut(mbfl_string *string, mbfl_string *result, int from, int length TSRMLS_DC);
-
-/*
- * strwidth
- */
-int
-mbfl_strwidth(mbfl_string *string TSRMLS_DC);
-
-/*
- * strimwidth
- */
-mbfl_string *
-mbfl_strimwidth(mbfl_string *string, mbfl_string *marker, mbfl_string *result, int from, int width TSRMLS_DC);
-
-/*
- * MIME header encode
- */
-struct mime_header_encoder_data; /* forward declaration */
-
-struct mime_header_encoder_data *
-mime_header_encoder_new(
- enum mbfl_no_encoding incode,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding encoding TSRMLS_DC);
-
-void
-mime_header_encoder_delete(struct mime_header_encoder_data *pe TSRMLS_DC);
-
-int
-mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe TSRMLS_DC);
-
-mbfl_string *
-mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result TSRMLS_DC);
-
-mbfl_string *
-mbfl_mime_header_encode(
- mbfl_string *string, mbfl_string *result,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding encoding,
- const char *linefeed,
- int indent TSRMLS_DC);
-
-/*
- * MIME header decode
- */
-struct mime_header_decoder_data; /* forward declaration */
-
-struct mime_header_decoder_data *
-mime_header_decoder_new(enum mbfl_no_encoding outcode TSRMLS_DC);
-
-void
-mime_header_decoder_delete(struct mime_header_decoder_data *pd TSRMLS_DC);
-
-int
-mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd TSRMLS_DC);
-
-mbfl_string *
-mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result TSRMLS_DC);
-
-mbfl_string *
-mbfl_mime_header_decode(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding outcode TSRMLS_DC);
-
-
-/*
- * convert HTML numeric entity
- */
-mbfl_string *
-mbfl_html_numeric_entity(mbfl_string *string, mbfl_string *result, int *convmap, int mapsize, int type TSRMLS_DC);
-
-
-/*
- * convert of harfwidth and fullwidth for japanese
- */
-mbfl_string *
-mbfl_ja_jp_hantozen(mbfl_string *string, mbfl_string *result, int mode TSRMLS_DC);
-
-#endif /* MBFL_MBFILTER_H */
diff --git a/ext/mbstring/mbfilter_cn.c b/ext/mbstring/mbfilter_cn.c
deleted file mode 100644
index 6feab182dd..0000000000
--- a/ext/mbstring/mbfilter_cn.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * "streamable simplified chinese code filter and converter"
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#if defined(HAVE_MBSTR_CN)
-#include "mbfilter.h"
-#include "mbfilter_cn.h"
-
-#include "unicode_table_cn.h"
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-
-/*
- * EUC-CN => wchar
- */
-int
-mbfl_filt_conv_euccn_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xff) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) {
- w = (c1 - 0x81)*192 + (c - 0x40);
- if (w >= 0 && w < cp936_ucs_table_size) {
- w = cp936_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_GB2312;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-CN
- */
-int
-mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, c2, s;
-
- s = 0;
- if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) {
- s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min];
- } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) {
- s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min];
- } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) {
- s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min];
- } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) {
- s = ucs_i_cp936_table[c - ucs_i_cp936_table_min];
- } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) {
- s = ucs_hff_cp936_table[c - ucs_hff_cp936_table_min];
- }
- c1 = (s >> 8) & 0xff;
- c2 = s & 0xff;
-
- if (c1 < 0xa1 || c2 < 0xa1) { /* exclude CP936 extension */
- s = c;
- }
-
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_GB2312) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * CP936 => wchar
- */
-int
-mbfl_filt_conv_cp936_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c == 0x80) { /* euro sign */
- CK((*filter->output_function)(0x20ac, filter->data TSRMLS_CC));
- } else if (c > 0x80 && c < 0xff) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if ( c1 < 0xff && c1 > 0x80 && c > 0x39 && c < 0xff && c != 0x7f) {
- w = (c1 - 0x81)*192 + (c - 0x40);
- if (w >= 0 && w < cp936_ucs_table_size) {
- w = cp936_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_WINCP936;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => CP936
- */
-int
-mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) {
- s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min];
- } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) {
- s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min];
- } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) {
- s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min];
- } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) {
- s = ucs_i_cp936_table[c - ucs_i_cp936_table_min];
- } else if (c >= ucs_ci_cp936_table_min && c < ucs_ci_cp936_table_max) {
- s = ucs_ci_cp936_table[c - ucs_ci_cp936_table_min];
- } else if (c >= ucs_cf_cp936_table_min && c < ucs_cf_cp936_table_max) {
- s = ucs_cf_cp936_table[c - ucs_cf_cp936_table_min];
- } else if (c >= ucs_sfv_cp936_table_min && c < ucs_sfv_cp936_table_max) {
- s = ucs_sfv_cp936_table[c - ucs_sfv_cp936_table_min];
- } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) {
- s = ucs_hff_cp936_table[c - ucs_hff_cp936_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_WINCP936) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * HZ => wchar
- */
-int
-mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, w;
-
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: GB2312 */
- case 0:
- if (c == 0x7e) {
- filter->status += 2;
- } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */
- filter->cache = c;
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
-/* case 0x11: GB2312 second char */
- case 1:
- filter->status &= ~0xf;
- c1 = filter->cache;
- if (c1 > 0x20 && c1 < 0x7f && c > 0x20 && c < 0x7f) {
- s = (c1 - 1)*192 + c + 0x40; /* GB2312 */
- if (s >= 0 && s < cp936_ucs_table_size) {
- w = cp936_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_GB2312;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- /* '~' */
- case 2:
- if (c == 0x7d) { /* '}' */
- filter->status = 0x0;
- } else if (c == 0x7b) { /* '{' */
- filter->status = 0x10;
- } else if (c == 0x7e) { /* '~' */
- filter->status = 0x0;
- CK((*filter->output_function)(0x007e, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => HZ
- */
-int
-mbfl_filt_conv_wchar_hz(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- s = 0;
- if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) {
- s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min];
- } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) {
- s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min];
- } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) {
- s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min];
- } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) {
- s = ucs_i_cp936_table[c - ucs_i_cp936_table_min];
- } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) {
- s = ucs_hff_cp936_table[c - ucs_hff_cp936_table_min];
- }
- if (s & 0x8000) {
- s -= 0x8080;
- }
-
- if (s <= 0) {
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {
- s = -1;
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x7e, filter->data TSRMLS_CC)); /* '~' */
- CK((*filter->output_function)(0x7d, filter->data TSRMLS_CC)); /* '}' */
- }
- filter->status = 0;
- if (s == 0x7e){
- CK((*filter->output_function)(0x7e, filter->data TSRMLS_CC));
- }
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else { /* GB 2312-80 */
- if ((filter->status & 0xff00) != 0x200) {
- CK((*filter->output_function)(0x7e, filter->data TSRMLS_CC)); /* '~' */
- CK((*filter->output_function)(0x7b, filter->data TSRMLS_CC)); /* '{' */
- }
- filter->status = 0x200;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-int
-mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- /* back to latin */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x7e, filter->data TSRMLS_CC)); /* ~ */
- CK((*filter->output_function)(0x7d, filter->data TSRMLS_CC)); /* '{' */
- }
- filter->status &= 0xff;
- return 0;
-}
-
-#endif /* HAVE_MBSTR_CN */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter_cn.h b/ext/mbstring/mbfilter_cn.h
deleted file mode 100644
index be25417174..0000000000
--- a/ext/mbstring/mbfilter_cn.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef MBFL_MBFILTER_CN_H
-#define MBFL_MBFILTER_CN_H
-
-int mbfl_filt_conv_euccn_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_cp936_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_hz(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter TSRMLS_DC);
-
-#endif /* MBFL_MBFILTER_CN_H */
diff --git a/ext/mbstring/mbfilter_ja.c b/ext/mbstring/mbfilter_ja.c
deleted file mode 100644
index bd473900cd..0000000000
--- a/ext/mbstring/mbfilter_ja.c
+++ /dev/null
@@ -1,1291 +0,0 @@
-/* charset=UTF-8 */
-
-/*
- * "streamable kanji code filter and converter"
- *
- * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
- *
- * This software is released under the GNU Lesser General Public License.
- * (Version 2.1, February 1999)
- * Please read the following detail of the licence (in japanese).
- *
- * ◆使用許諾æ¡ä»¶â—†
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- *
- * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- * http://www.gnu.org/ --- GNUウェブサイト
- * http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
- *
- * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- * ã¯ã‚ã‚Šã¾ã›ã‚“。
- *
- * â—†ä¿è¨¼å†…容◆
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- * 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- * ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- * å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
- *
- * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
- *
- * 〒102-0073
- * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- * Phone: 03-3512-3655, Fax: 03-3512-3656
- * Email: sales@happysize.co.jp
- * Web: http://happysize.com/
- *
- * ◆著者◆
- *
- * 金本 茂 <sgk@happysize.co.jp>
- *
- * ◆履歴◆
- *
- * 1998/11/10 sgk implementation in C++
- * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
- *
- */
-
-/*
- * Unicode support
- *
- * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
- * All rights reserved.
- *
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#if defined(HAVE_MBSTR_JA)
-
-#include "mbfilter.h"
-#include "mbfilter_ja.h"
-
-#include "cp932_table.h"
-#include "unicode_table_ja.h"
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-#define SJIS_ENCODE(c1,c2,s1,s2) \
- do { \
- s1 = c1; \
- s1--; \
- s1 >>= 1; \
- if ((c1) < 0x5f) { \
- s1 += 0x71; \
- } else { \
- s1 += 0xb1; \
- } \
- s2 = c2; \
- if ((c1) & 1) { \
- if ((c2) < 0x60) { \
- s2--; \
- } \
- s2 += 0x20; \
- } else { \
- s2 += 0x7e; \
- } \
- } while (0)
-
-#define SJIS_DECODE(c1,c2,s1,s2) \
- do { \
- s1 = c1; \
- if (s1 < 0xa0) { \
- s1 -= 0x81; \
- } else { \
- s1 -= 0xc1; \
- } \
- s1 <<= 1; \
- s1 += 0x21; \
- s2 = c2; \
- if (s2 < 0x9f) { \
- if (s2 < 0x7f) { \
- s2++; \
- } \
- s2 -= 0x20; \
- } else { \
- s1++; \
- s2 -= 0x7e; \
- } \
- } while (0)
-
-
-/*
- * EUC-JP => wchar
- */
-int
-mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xff) { /* X 0208 first char */
- filter->status = 1;
- filter->cache = c;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* got first half */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0xa0 && c < 0xff) {
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s >= 0 && s < jisx0208_ucs_table_size) {
- w = jisx0208_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0208;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 2: /* got 0x8e */
- filter->status = 0;
- if (c > 0xa0 && c < 0xe0) {
- w = 0xfec0 + c;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = 0x8e00 | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 3: /* got 0x8f, X 0212 first char */
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = c;
- }
- break;
- case 4: /* got 0x8f, X 0212 second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) {
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s >= 0 && s < jisx0212_ucs_table_size) {
- w = jisx0212_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0212;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c | 0x8f0000;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-JP
- */
-int
-mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_JIS0208) {
- s = c & MBFL_WCSPLANE_MASK;
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s = c & MBFL_WCSPLANE_MASK;
- s |= 0x8080;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s = 0x224c;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else if (s < 0x100) { /* kana */
- CK((*filter->output_function)(0x8e, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else if (s < 0x8080) { /* X 0208 */
- CK((*filter->output_function)(((s >> 8) & 0xff) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((s & 0xff) | 0x80, filter->data TSRMLS_CC));
- } else { /* X 0212 */
- CK((*filter->output_function)(0x8f, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((s >> 8) & 0xff) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((s & 0xff) | 0x80, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * eucJP-win => wchar
- */
-int
-mbfl_filt_conv_eucjpwin_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, w, n;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xff) { /* CP932 first char */
- filter->status = 1;
- filter->cache = c;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* got first half */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0xa0 && c < 0xff) {
- w = 0;
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s <= 137) {
- if (s == 31) {
- w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */
- } else if (s == 32) {
- w = 0xff5e; /* FULLWIDTH TILDE */
- } else if (s == 33) {
- w = 0x2225; /* PARALLEL TO */
- } else if (s == 60) {
- w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */
- } else if (s == 80) {
- w = 0xffe0; /* FULLWIDTH CENT SIGN */
- } else if (s == 81) {
- w = 0xffe1; /* FULLWIDTH POUND SIGN */
- } else if (s == 137) {
- w = 0xffe2; /* FULLWIDTH NOT SIGN */
- }
- }
- if (w == 0) {
- if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */
- w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min];
- } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */
- w = jisx0208_ucs_table[s];
- } else if (s >= (84*94)) { /* user (85ku - 94ku) */
- w = s - (84*94) + 0xe000;
- }
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_WINCP932;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 2: /* got 0x8e, X0201 kana */
- filter->status = 0;
- if (c > 0xa0 && c < 0xe0) {
- w = 0xfec0 + c;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = 0x8e00 | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 3: /* got 0x8f, X 0212 first char */
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = c;
- }
- break;
- case 4: /* got 0x8f, X 0212 second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) {
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s >= 0 && s < jisx0212_ucs_table_size) {
- w = jisx0212_ucs_table[s];
- } else if (s >= (82*94) && s < (84*94)) { /* vender ext3 (83ku - 84ku) <-> CP932 (115ku -120ku) */
- s = (c1<< 8) | c;
- w = 0;
- n = 0;
- while (n < cp932ext3_eucjp_table_size) {
- if (s == cp932ext3_eucjp_table[n]) {
- if (n < (cp932ext3_ucs_table_max - cp932ext3_ucs_table_min)) {
- w = cp932ext3_ucs_table[n];
- }
- break;
- }
- n++;
- }
- } else if (s >= (84*94)) { /* user (85ku - 94ku) */
- w = s - (84*94) + (0xe000 + (94*10));
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0212;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c | 0x8f0000;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => eucJP-win
- */
-int
-mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, c2, s1;
-
- s1 = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s1 = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s1 = ucs_r_jis_table[c - ucs_r_jis_table_min];
- } else if (c >= 0xe000 && c < (0xe000 + 10*94)) { /* user (X0208 85ku - 94ku) */
- s1 = c - 0xe000;
- c1 = s1/94 + 0x75;
- c2 = s1%94 + 0x21;
- s1 = (c1 << 8) | c2;
- } else if (c >= (0xe000 + 10*94) && c < (0xe000 + 20*94)) { /* user (X0212 85ku - 94ku) */
- s1 = c - (0xe000 + 10*94);
- c1 = s1/94 + 0xf5;
- c2 = s1%94 + 0xa1;
- s1 = (c1 << 8) | c2;
- }
- if (s1 <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_WINCP932) {
- s1 = c & MBFL_WCSPLANE_MASK;
- if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 120ku */
- s1 = -1;
- }
- } else if (c1 == MBFL_WCSPLANE_JIS0208) {
- s1 = c & MBFL_WCSPLANE_MASK;
- if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 94ku */
- s1 = -1;
- }
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s1 = c & MBFL_WCSPLANE_MASK;
- if (s1 >= ((83 + 0x20) << 8)) { /* 83ku - 94ku */
- s1 = -1;
- } else {
- s1 |= 0x8080;
- }
- } else if (c == 0xa5) { /* YEN SIGN */
- s1 = 0x216f; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x203e) { /* OVER LINE */
- s1 = 0x2131; /* FULLWIDTH MACRON */
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s1 = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s1 = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s1 = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s1 = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s1 = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s1 = 0x224c;
- } else {
- s1 = -1;
- c1 = 0;
- c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext1 (13ku) */
- if (c == cp932ext1_ucs_table[c1]) {
- s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21);
- break;
- }
- c1++;
- }
- if (s1 < 0) {
- c1 = 0;
- c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */
- if (c == cp932ext3_ucs_table[c1]) {
- if (c1 < cp932ext3_eucjp_table_size) {
- s1 = cp932ext3_eucjp_table[c1];
- }
- break;
- }
- c1++;
- }
- }
- }
- if (c == 0) {
- s1 = 0;
- } else if (s1 <= 0) {
- s1 = -1;
- }
- }
-
- if (s1 >= 0) {
- if (s1 < 0x80) { /* latin */
- CK((*filter->output_function)(s1, filter->data TSRMLS_CC));
- } else if (s1 < 0x100) { /* kana */
- CK((*filter->output_function)(0x8e, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s1, filter->data TSRMLS_CC));
- } else if (s1 < 0x8080) { /* X 0208 */
- CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data TSRMLS_CC));
- } else { /* X 0212 */
- CK((*filter->output_function)(0x8f, filter->data TSRMLS_CC));
- CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data TSRMLS_CC));
- CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * SJIS => wchar
- */
-int
-mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s1, s2, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xe0) { /* kana */
- CK((*filter->output_function)(0xfec0 + c, filter->data TSRMLS_CC));
- } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* kanji second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0x39 && c < 0xfd && c != 0x7f) {
- SJIS_DECODE(c1, c, s1, s2);
- w = (s1 - 0x21)*94 + s2 - 0x21;
- if (w >= 0 && w < jisx0208_ucs_table_size) {
- w = jisx0208_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- if (s1 < 0x7f && s2 < 0x7f) {
- w = (s1 << 8) | s2;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0208;
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- }
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => SJIS
- */
-int
-mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, c2, s1, s2;
-
- s1 = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s1 = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s1 = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s1 <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_JIS0208) {
- s1 = c & MBFL_WCSPLANE_MASK;
- } else if (c == 0xa5) { /* YEN SIGN */
- s1 = 0x216f; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x203e) { /* OVER LINE */
- s1 = 0x2131; /* FULLWIDTH MACRON */
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s1 = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s1 = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s1 = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s1 = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s1 = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s1 = 0x224c;
- }
- if (c == 0) {
- s1 = 0;
- } else if (s1 <= 0) {
- s1 = -1;
- }
- } else if (s1 >= 0x8080) {
- s1 = -1;
- }
- if (s1 >= 0) {
- if (s1 < 0x100) { /* latin or kana */
- CK((*filter->output_function)(s1, filter->data TSRMLS_CC));
- } else { /* kanji */
- c1 = (s1 >> 8) & 0xff;
- c2 = s1 & 0xff;
- SJIS_ENCODE(c1, c2, s1, s2);
- CK((*filter->output_function)(s1, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s2, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * SJIS-win => wchar
- */
-int
-mbfl_filt_conv_sjiswin_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, s1, s2, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xe0) { /* kana */
- CK((*filter->output_function)(0xfec0 + c, filter->data TSRMLS_CC));
- } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* kanji second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0x39 && c < 0xfd && c != 0x7f) {
- w = 0;
- SJIS_DECODE(c1, c, s1, s2);
- s = (s1 - 0x21)*94 + s2 - 0x21;
- if (s <= 137) {
- if (s == 31) {
- w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */
- } else if (s == 32) {
- w = 0xff5e; /* FULLWIDTH TILDE */
- } else if (s == 33) {
- w = 0x2225; /* PARALLEL TO */
- } else if (s == 60) {
- w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */
- } else if (s == 80) {
- w = 0xffe0; /* FULLWIDTH CENT SIGN */
- } else if (s == 81) {
- w = 0xffe1; /* FULLWIDTH POUND SIGN */
- } else if (s == 137) {
- w = 0xffe2; /* FULLWIDTH NOT SIGN */
- }
- }
- if (w == 0) {
- if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */
- w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min];
- } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */
- w = jisx0208_ucs_table[s];
- } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */
- w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min];
- } else if (s >= cp932ext3_ucs_table_min && s < cp932ext3_ucs_table_max) { /* vendor ext3 (115ku - 119ku) */
- w = cp932ext3_ucs_table[s - cp932ext3_ucs_table_min];
- } else if (s >= (94*94) && s < (114*94)) { /* user (95ku - 114ku) */
- w = s - (94*94) + 0xe000;
- }
- }
- if (w <= 0) {
- w = (s1 << 8) | s2;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_WINCP932;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => SJIS-win
- */
-int
-mbfl_filt_conv_wchar_sjiswin(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, c2, s1, s2;
-
- s1 = 0;
- s2 = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s1 = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s1 = ucs_r_jis_table[c - ucs_r_jis_table_min];
- } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */
- s1 = c - 0xe000;
- c1 = s1/94 + 0x7f;
- c2 = s1%94 + 0x21;
- s1 = (c1 << 8) | c2;
- s2 = 1;
- }
- if (s1 <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_WINCP932) {
- s1 = c & MBFL_WCSPLANE_MASK;
- s2 = 1;
- } else if (c1 == MBFL_WCSPLANE_JIS0208) {
- s1 = c & MBFL_WCSPLANE_MASK;
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s1 = c & MBFL_WCSPLANE_MASK;
- s1 |= 0x8080;
- } else if (c == 0xa5) { /* YEN SIGN */
- s1 = 0x216f; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x203e) { /* OVER LINE */
- s1 = 0x2131; /* FULLWIDTH MACRON */
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s1 = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s1 = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s1 = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s1 = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s1 = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s1 = 0x224c;
- }
- }
- if ((s1 <= 0) || (s1 >= 0x8080 && s2 == 0)) { /* not found or X 0212 */
- s1 = -1;
- c1 = 0;
- c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext1 (13ku) */
- if (c == cp932ext1_ucs_table[c1]) {
- s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21);
- break;
- }
- c1++;
- }
- if (s1 <= 0) {
- c1 = 0;
- c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */
- if (c == cp932ext3_ucs_table[c1]) {
- s1 = ((c1/94 + 0x93) << 8) + (c1%94 + 0x21);
- break;
- }
- c1++;
- }
- }
- if (c == 0) {
- s1 = 0;
- } else if (s1 <= 0) {
- s1 = -1;
- }
- }
- if (s1 >= 0) {
- if (s1 < 0x100) { /* latin or kana */
- CK((*filter->output_function)(s1, filter->data TSRMLS_CC));
- } else { /* kanji */
- c1 = (s1 >> 8) & 0xff;
- c2 = s1 & 0xff;
- SJIS_ENCODE(c1, c2, s1, s2);
- CK((*filter->output_function)(s1, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s2, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * JIS => wchar
- */
-int
-mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, w;
-
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: X 0201 latin */
-/* case 0x20: X 0201 kana */
-/* case 0x80: X 0208 */
-/* case 0x90: X 0212 */
- case 0:
- if (c == 0x1b) {
- filter->status += 2;
- } else if (c == 0x0e) { /* "kana in" */
- filter->status = 0x20;
- } else if (c == 0x0f) { /* "kana out" */
- filter->status = 0;
- } else if (filter->status == 0x10 && c == 0x5c) { /* YEN SIGN */
- CK((*filter->output_function)(0xa5, filter->data TSRMLS_CC));
- } else if (filter->status == 0x10 && c == 0x7e) { /* OVER LINE */
- CK((*filter->output_function)(0x203e, filter->data TSRMLS_CC));
- } else if (filter->status == 0x20 && c > 0x20 && c < 0x60) { /* kana */
- CK((*filter->output_function)(0xff40 + c, filter->data TSRMLS_CC));
- } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->cache = c;
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xe0) { /* GR kana */
- CK((*filter->output_function)(0xfec0 + c, filter->data TSRMLS_CC));
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
-/* case 0x81: X 0208 second char */
-/* case 0x91: X 0212 second char */
- case 1:
- filter->status &= ~0xf;
- c1 = filter->cache;
- if (c > 0x20 && c < 0x7f) {
- s = (c1 - 0x21)*94 + c - 0x21;
- if (filter->status == 0x80) {
- if (s >= 0 && s < jisx0208_ucs_table_size) {
- w = jisx0208_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0208;
- }
- } else {
- if (s >= 0 && s < jisx0212_ucs_table_size) {
- w = jisx0212_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0212;
- }
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if (c == 0x1b) {
- filter->status += 2;
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- /* ESC */
-/* case 0x02: */
-/* case 0x12: */
-/* case 0x22: */
-/* case 0x82: */
-/* case 0x92: */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else if (c == 0x28) { /* '(' */
- filter->status += 3;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
-
- /* ESC $ */
-/* case 0x03: */
-/* case 0x13: */
-/* case 0x23: */
-/* case 0x83: */
-/* case 0x93: */
- case 3:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x28) { /* '(' */
- filter->status++;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
-
- /* ESC $ ( */
-/* case 0x04: */
-/* case 0x14: */
-/* case 0x24: */
-/* case 0x84: */
-/* case 0x94: */
- case 4:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x44) { /* 'D' */
- filter->status = 0x90;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
-
- /* ESC ( */
-/* case 0x05: */
-/* case 0x15: */
-/* case 0x25: */
-/* case 0x85: */
-/* case 0x95: */
- case 5:
- if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */
- filter->status = 0;
- } else if (c == 0x4a) { /* 'J' */
- filter->status = 0x10;
- } else if (c == 0x49) { /* 'I' */
- filter->status = 0x20;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => JIS
- */
-int
-mbfl_filt_conv_wchar_jis(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_JIS0208) {
- s = c & MBFL_WCSPLANE_MASK;
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s = c & MBFL_WCSPLANE_MASK;
- s |= 0x8080;
- } else if (c == 0xa5) { /* YEN SIGN */
- s = 0x1005c;
- } else if (c == 0x203e) { /* OVER LINE */
- s = 0x1007e;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s = 0x224c;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x42, filter->data TSRMLS_CC)); /* 'B' */
- }
- filter->status = 0;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else if (s < 0x100) { /* kana */
- if ((filter->status & 0xff00) != 0x100) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x49, filter->data TSRMLS_CC)); /* 'I' */
- }
- filter->status = 0x100;
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- } else if (s < 0x8080) { /* X 0208 */
- if ((filter->status & 0xff00) != 0x200) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC)); /* '$' */
- CK((*filter->output_function)(0x42, filter->data TSRMLS_CC)); /* 'B' */
- }
- filter->status = 0x200;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- } else if (s < 0x10000) { /* X 0212 */
- if ((filter->status & 0xff00) != 0x300) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC)); /* '$' */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x44, filter->data TSRMLS_CC)); /* 'D' */
- }
- filter->status = 0x300;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- } else { /* X 0201 latin */
- if ((filter->status & 0xff00) != 0x400) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x4a, filter->data TSRMLS_CC)); /* 'J' */
- }
- filter->status = 0x400;
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * wchar => ISO-2022-JP
- */
-int
-mbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- s = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s <= 0) {
- if (c == 0xa5) { /* YEN SIGN */
- s = 0x1005c;
- } else if (c == 0x203e) { /* OVER LINE */
- s = 0x1007e;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s = 0x224c;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {
- s = -1;
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x42, filter->data TSRMLS_CC)); /* 'B' */
- }
- filter->status = 0;
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else if (s < 0x10000) { /* X 0208 */
- if ((filter->status & 0xff00) != 0x200) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC)); /* '$' */
- CK((*filter->output_function)(0x42, filter->data TSRMLS_CC)); /* 'B' */
- }
- filter->status = 0x200;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- } else { /* X 0201 latin */
- if ((filter->status & 0xff00) != 0x400) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x4a, filter->data TSRMLS_CC)); /* 'J' */
- }
- filter->status = 0x400;
- CK((*filter->output_function)(s & 0x7f, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-int
-mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- /* back to latin */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data TSRMLS_CC)); /* '(' */
- CK((*filter->output_function)(0x42, filter->data TSRMLS_CC)); /* 'B' */
- }
- filter->status &= 0xff;
- return 0;
-}
-
-#endif /* HAVE_MBSTR_JA */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter_ja.h b/ext/mbstring/mbfilter_ja.h
deleted file mode 100644
index 5f15542d61..0000000000
--- a/ext/mbstring/mbfilter_ja.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* charset=UTF-8 */
-
-/*
- * "streamable kanji code filter and converter"
- *
- * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
- *
- * This software is released under the GNU Lesser General Public License.
- * (Version 2.1, February 1999)
- * Please read the following detail of the licence (in japanese).
- *
- * ◆使用許諾æ¡ä»¶â—†
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- *
- * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- * http://www.gnu.org/ --- GNUウェブサイト
- * http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
- *
- * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- * ã¯ã‚ã‚Šã¾ã›ã‚“。
- *
- * â—†ä¿è¨¼å†…容◆
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- * 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- * ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- * å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
- *
- * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
- *
- * 〒102-0073
- * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- * Phone: 03-3512-3655, Fax: 03-3512-3656
- * Email: sales@happysize.co.jp
- * Web: http://happysize.com/
- *
- * ◆著者◆
- *
- * 金本 茂 <sgk@happysize.co.jp>
- *
- * ◆履歴◆
- *
- * 1998/11/10 sgk implementation in C++
- * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
- *
- */
-
-/*
- * Unicode support
- *
- * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
- * All rights reserved.
- *
- */
-
-/* $Id$ */
-
-#ifndef MBFL_MBFILTER_JA_H
-#define MBFL_MBFILTER_JA_H
-
-int mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_eucjpwin_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_sjiswin_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_sjiswin(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_jis(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter TSRMLS_DC);
-
-#endif /* MBFL_MBFILTER_JA_H */
diff --git a/ext/mbstring/mbfilter_kr.c b/ext/mbstring/mbfilter_kr.c
deleted file mode 100644
index da4157d571..0000000000
--- a/ext/mbstring/mbfilter_kr.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * "streamable korean code filter and converter"
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#if defined(HAVE_MBSTR_KR)
-#include "mbfilter.h"
-#include "mbfilter_cn.h"
-
-#include "unicode_table_kr.h"
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-
-/*
- * EUC-KR => wchar
- */
-int
-mbfl_filt_conv_euckr_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, w, flag;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xff && c != 0xc9) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- flag = 0;
- if (c1 >= 0xa1 && c1 <= 0xc6) {
- flag = 1;
- } else if (c1 >= 0xc7 && c1 <= 0xfe && c1 != 0xc9) {
- flag = 2;
- }
- if (flag > 0 && c >= 0xa1 && c <= 0xfe) {
- if (flag == 1){
- w = (c1 - 0xa1)*178 + (c - 0xa1) + 0x54;
- if (w >= 0 && w < uhc2_ucs_table_size) {
- w = uhc2_ucs_table[w];
- } else {
- w = 0;
- }
- } else {
- if (c1 < 0xc9){
- w = (c1 - 0xc7)*94 + c - 0xa1;
- } else {
- w = (c1 - 0xc8)*94 + c - 0xa1;
- }
- if (w >= 0 && w < uhc3_ucs_table_size) {
- w = uhc3_ucs_table[w];
- } else {
- w = 0;
- }
- }
-
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_KSC5601;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-KR
- */
-int
-mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, c2, s;
-
- s = 0;
-
- if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) {
- s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min];
- } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) {
- s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min];
- } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) {
- s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min];
- } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) {
- s = ucs_i_uhc_table[c - ucs_i_uhc_table_min];
- } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) {
- s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min];
- } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) {
- s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min];
- }
-
- c1 = (s >> 8) & 0xff;
- c2 = s & 0xff;
- /* exclude UHC extension area */
- if (c1 < 0xa1 || c2 < 0xa1){
- s = c;
- }
-
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_KSC5601) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-
-/*
- * ISO-2022-KR => wchar
- */
-int
-mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, w, flag;
-
-retry:
- switch (filter->status & 0xf) {
- /* case 0x00: ASCII */
- /* case 0x10: KSC5601 */
- case 0:
- if (c == 0x1b) { /* ESC */
- filter->status += 2;
- } else if (c == 0x0f) { /* SI (ASCII) */
- filter->status &= ~0xff;
- } else if (c == 0x0e) { /* SO (KSC5601) */
- filter->status |= 0x10;
- } else if ((filter->status & 0x10) != 0 && c > 0x20 && c < 0x7f) {
- /* KSC5601 lead byte */
- filter->cache = c;
- filter->status += 1;
- } else if ((filter->status & 0x10) == 0 && c >= 0 && c < 0x80) {
- /* latin, CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status &= ~0xf;
- c1 = filter->cache;
- flag = 0;
- if (c1 > 0x20 && c1 < 0x47) {
- flag = 1;
- } else if (c1 >= 0x47 && c1 <= 0x7e && c1 != 0x49) {
- flag = 2;
- }
- if (flag > 0 && c > 0x20 && c < 0x7f) {
- if (flag == 1){
- w = (c1 - 0x21)*178 + (c - 0x21) + 0x54;
- if (w >= 0 && w < uhc2_ucs_table_size) {
- w = uhc2_ucs_table[w];
- } else {
- w = 0;
- }
- } else {
- if (c1 < 0x49){
- w = (c1 - 0x47)*94 + c - 0x21;
- } else {
- w = (c1 - 0x48)*94 + c - 0x21;
- }
- if (w >= 0 && w < uhc3_ucs_table_size) {
- w = uhc3_ucs_table[w];
- } else {
- w = 0;
- }
- }
-
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_KSC5601;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if (c == 0x1b) { /* ESC */
- filter->status++;
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 2: /* ESC */
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
- case 3: /* ESC $ */
- if (c == 0x29) { /* ')' */
- filter->status++;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
- case 4: /* ESC $ ) */
- if (c == 0x43) { /* 'C' */
- filter->status &= ~0xf;
- filter->status |= 0x100;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC));
- CK((*filter->output_function)(0x29, filter->data TSRMLS_CC));
- goto retry;
- }
- break;
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => ISO-2022-KR
- */
-int
-mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, c2, s;
-
- s = 0;
-
- if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) {
- s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min];
- } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) {
- s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min];
- } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) {
- s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min];
- } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) {
- s = ucs_i_uhc_table[c - ucs_i_uhc_table_min];
- } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) {
- s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min];
- } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) {
- s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min];
- }
-
- c1 = (s >> 8) & 0xff;
- c2 = s & 0xff;
- /* exclude UHC extension area */
- if (c1 < 0xa1 || c2 < 0xa1){
- s = c;
- }
- if (s & 0x8000) {
- s -= 0x8080;
- }
-
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_KSC5601) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {
- s = -1;
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0x10) != 0) {
- CK((*filter->output_function)(0x0f, filter->data TSRMLS_CC)); /* SI */
- filter->status &= ~0x10;
- }
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if ((filter->status & 0x10) == 0) {
- CK((*filter->output_function)(0x0e, filter->data TSRMLS_CC)); /* SO */
- filter->status |= 0x10;
- }
- if ( (filter->status & 0x100) == 0) {
- CK((*filter->output_function)(0x1b, filter->data TSRMLS_CC)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data TSRMLS_CC)); /* '$' */
- CK((*filter->output_function)(0x29, filter->data TSRMLS_CC)); /* ')' */
- CK((*filter->output_function)(0x43, filter->data TSRMLS_CC)); /* 'C' */
- filter->status |= 0x100;
- }
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * UHC => wchar
- */
-int
-mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, w, flag;
- const short ofst1[] = { 0x41, 0x61, 0x81, 0xa1};
- const short ofst2[] = { 0x0, 0x1a, 0x34, 0x54};
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0x80 && c < 0xff && c != 0xc9) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
-
- flag = 0;
- if ( c >= 0x41 && c <= 0x5a){
- flag = 1;
- } else if (c >= 0x61 && c <= 0x7a){
- flag = 2;
- } else if (c >= 0x81 && c <= 0xa0){
- flag = 3;
- } else if (c >= 0xa1 && c <= 0xfe){
- flag = 4;
- }
- if ( c1 >= 0x81 && c1 <= 0xa0 && flag > 0){
- w = (c1 - 0x81)*178 + (c - ofst1[flag-1] + ofst2[flag-1]);
- if (w >= 0 && w < uhc1_ucs_table_size) {
- w = uhc1_ucs_table[w];
- } else {
- w = 0;
- }
- } else if ( c1 >= 0xa1 && c1 <= 0xc6 && flag > 0){
- w = (c1 - 0xa1)*178 + (c - ofst1[flag-1] + ofst2[flag-1]);
- if (w >= 0 && w < uhc2_ucs_table_size) {
- w = uhc2_ucs_table[w];
- } else {
- w = 0;
- }
- } else if ( c1 >= 0xc7 && c1 <= 0xfe && flag == 4){
- if (c1 < 0xc9){
- w = (c1 - 0xc7)*94 + (c - ofst1[flag-1]);
- } else {
- w = (c1 - 0xc8)*94 + (c - ofst1[flag-1]);
- }
- if (w >= 0 && w < uhc3_ucs_table_size) {
- w = uhc3_ucs_table[w];
- } else {
- w = 0;
- }
- }
- if (flag > 0){
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_UHC;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else {
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UHC
- */
-int
-mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) {
- s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min];
- } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) {
- s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min];
- } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) {
- s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min];
- } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) {
- s = ucs_i_uhc_table[c - ucs_i_uhc_table_min];
- } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) {
- s = ucs_s_uhc_table[c - ucs_s_uhc_table_min];
- } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) {
- s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min];
- } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) {
- s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_UHC) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-int
-mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter TSRMLS_DC)
-{
- /* back to ascii */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x0f, filter->data TSRMLS_CC)); /* SI */
- }
- filter->status &= 0xff;
- return 0;
-}
-
-#endif /* HAVE_MBSTR_KR */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter_kr.h b/ext/mbstring/mbfilter_kr.h
deleted file mode 100644
index 34d0d54309..0000000000
--- a/ext/mbstring/mbfilter_kr.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef MBFL_MBFILTER_KR_H
-#define MBFL_MBFILTER_KR_H
-
-int mbfl_filt_conv_euckr_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter TSRMLS_DC);
-
-#endif /* MBFL_MBFILTER_KR_H */
diff --git a/ext/mbstring/mbfilter_ru.c b/ext/mbstring/mbfilter_ru.c
deleted file mode 100644
index 82937da8c4..0000000000
--- a/ext/mbstring/mbfilter_ru.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Den V. Tsopa <tdv@edisoft.ru> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * "russian code filter and converter"
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#if defined(HAVE_MBSTR_RU)
-#include "mbfilter.h"
-#include "unicode_table_ru.h"
-
-/*
- * encoding filter
- */
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * cp1251 => wchar
- */
-int
-mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < cp1251_ucs_table_min) {
- s = c;
- } else if (c >= cp1251_ucs_table_min && c < 0x100) {
- s = cp1251_ucs_table[c - cp1251_ucs_table_min];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_CP1251;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => cp1251
- */
-int
-mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < cp1251_ucs_table_min) {
- s = c;
- } else {
- s = -1;
- n = cp1251_ucs_table_len-1;
- while (n >= 0) {
- if (c == cp1251_ucs_table[n]) {
- s = cp1251_ucs_table_min + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1251) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * cp866 => wchar
- */
-int
-mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < cp866_ucs_table_min) {
- s = c;
- } else if (c >= cp866_ucs_table_min && c < 0x100) {
- s = cp866_ucs_table[c - cp866_ucs_table_min];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_CP866;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => cp866
- */
-int
-mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < cp866_ucs_table_min) {
- s = c;
- } else {
- s = -1;
- n = cp866_ucs_table_len-1;
- while (n >= 0) {
- if (c == cp866_ucs_table[n]) {
- s = cp866_ucs_table_min + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP866) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-/*
- * koi8r => wchar
- */
-int
-mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s;
-
- if (c >= 0 && c < koi8r_ucs_table_min) {
- s = c;
- } else if (c >= koi8r_ucs_table_min && c < 0x100) {
- s = koi8r_ucs_table[c - koi8r_ucs_table_min];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_KOI8R;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
-
- return c;
-}
-
-/*
- * wchar => koi8r
- */
-int
-mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int s, n;
-
- if (c >= 0 && c < koi8r_ucs_table_min) {
- s = c;
- } else {
- s = -1;
- n = koi8r_ucs_table_len-1;
- while (n >= 0) {
- if (c == koi8r_ucs_table[n]) {
- s = koi8r_ucs_table_min + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8R) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-#endif /* HAVE_MBSTR_TW */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter_ru.h b/ext/mbstring/mbfilter_ru.h
deleted file mode 100644
index fda4d076b9..0000000000
--- a/ext/mbstring/mbfilter_ru.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Den V. Tsopa <tdv@edisoft.ru> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef MBFL_MBFILTER_RU_H
-#define MBFL_MBFILTER_RU_H
-
-int mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-#endif /* MBFL_MBFILTER_RU_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter_tw.c b/ext/mbstring/mbfilter_tw.c
deleted file mode 100644
index bdad919cff..0000000000
--- a/ext/mbstring/mbfilter_tw.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * "streamable traditional chinese code filter and converter"
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#if defined(HAVE_MBSTR_TW)
-#include "mbfilter.h"
-#include "mbfilter_tw.h"
-
-#include "unicode_table_tw.h"
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * EUC-TW => wchar
- */
-int
-mbfl_filt_conv_euctw_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, w, plane;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xff) { /* dbcs first byte */
- filter->status = 1;
- filter->cache = c;
- } else if (c == 0x8e) { /* mbcs first byte */
- filter->status = 2;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* mbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0xa0 && c < 0xff) {
- w = (c1 - 0xa1)*94 + (c - 0xa1);
- if (w >= 0 && w < cns11643_1_ucs_table_size) {
- w = cns11643_1_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_CNS11643;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 2: /* got 0x8e, first char */
- c1 = filter->cache;
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else if (c > 0xa0 && c < 0xaf) {
- filter->status = 3;
- filter->cache = c - 0xa1;
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 3: /* got 0x8e, third char */
- filter->status = 0;
- c1 = filter->cache;
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- filter->status = 0;
- } else if (c > 0xa0 && c < 0xff) {
- filter->status = 4;
- filter->cache = (c1 << 8) + c - 0xa1;
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 4: /* mbcs fourth char */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 >= 0x100 && c1 <= 0xdff && c > 0xa0 && c < 0xff) {
- plane = (c1 & 0xf00) >> 8;
- s = (c1 & 0xff)*94 + c - 0xa1;
- w = 0;
- if (s >= 0) {
- if (plane == 1 && s < cns11643_2_ucs_table_size) {
- w = cns11643_2_ucs_table[s];
- }
- if (plane == 13 && s < cns11643_14_ucs_table_size) {
- w = cns11643_14_ucs_table[s];
- }
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_CNS11643;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c | 0x8e0000;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-TW
- */
-int
-mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s, plane;
-
- s = 0;
- if (c >= ucs_a1_cns11643_table_min && c < ucs_a1_cns11643_table_max) {
- s = ucs_a1_cns11643_table[c - ucs_a1_cns11643_table_min];
- } else if (c >= ucs_a2_cns11643_table_min && c < ucs_a2_cns11643_table_max) {
- s = ucs_a2_cns11643_table[c - ucs_a2_cns11643_table_min];
- } else if (c >= ucs_a3_cns11643_table_min && c < ucs_a3_cns11643_table_max) {
- s = ucs_a3_cns11643_table[c - ucs_a3_cns11643_table_min];
- } else if (c >= ucs_i_cns11643_table_min && c < ucs_i_cns11643_table_max) {
- s = ucs_i_cns11643_table[c - ucs_i_cns11643_table_min];
- } else if (c >= ucs_r_cns11643_table_min && c < ucs_r_cns11643_table_max) {
- s = ucs_r_cns11643_table[c - ucs_r_cns11643_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_CNS11643) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- plane = (s & 0x1f0000) >> 16;
- if (plane <= 1){
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- s = (s & 0xffff) | 0x8080;
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- s = (0x8ea00000 + (plane << 16)) | ((s & 0xffff) | 0x8080);
- CK((*filter->output_function)(0x8e , filter->data TSRMLS_CC));
- CK((*filter->output_function)((s >> 16) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
- return c;
-}
-
-/*
- * Big5 => wchar
- */
-int
-mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else if (c > 0xa0 && c < 0xff) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if ((c > 0x39 && c < 0x7f) | (c > 0xa0 && c < 0xff)) {
- if (c < 0x7f){
- w = (c1 - 0xa1)*157 + (c - 0x40);
- } else {
- w = (c1 - 0xa1)*157 + (c - 0xa1) + 0x3f;
- }
- if (w >= 0 && w < big5_ucs_table_size) {
- w = big5_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_BIG5;
- }
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data TSRMLS_CC));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data TSRMLS_CC));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => Big5
- */
-int
-mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter TSRMLS_DC)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_big5_table_min && c < ucs_a1_big5_table_max) {
- s = ucs_a1_big5_table[c - ucs_a1_big5_table_min];
- } else if (c >= ucs_a2_big5_table_min && c < ucs_a2_big5_table_max) {
- s = ucs_a2_big5_table[c - ucs_a2_big5_table_min];
- } else if (c >= ucs_a3_big5_table_min && c < ucs_a3_big5_table_max) {
- s = ucs_a3_big5_table[c - ucs_a3_big5_table_min];
- } else if (c >= ucs_i_big5_table_min && c < ucs_i_big5_table_max) {
- s = ucs_i_big5_table[c - ucs_i_big5_table_min];
- } else if (c >= ucs_pua_big5_table_min && c < ucs_pua_big5_table_max) {
- s = ucs_pua_big5_table[c - ucs_pua_big5_table_min];
- } else if (c >= ucs_r1_big5_table_min && c < ucs_r1_big5_table_max) {
- s = ucs_r1_big5_table[c - ucs_r1_big5_table_min];
- } else if (c >= ucs_r2_big5_table_min && c < ucs_r2_big5_table_max) {
- s = ucs_r2_big5_table[c - ucs_r2_big5_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_BIG5) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data TSRMLS_CC));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data TSRMLS_CC));
- CK((*filter->output_function)(s & 0xff, filter->data TSRMLS_CC));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter TSRMLS_CC));
- }
- }
-
- return c;
-}
-
-#endif /* HAVE_MBSTR_TW */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbfilter_tw.h b/ext/mbstring/mbfilter_tw.h
deleted file mode 100644
index f6507d2114..0000000000
--- a/ext/mbstring/mbfilter_tw.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef MBFL_MBFILTER_TW_H
-#define MBFL_MBFILTER_TW_H
-
-int mbfl_filt_conv_euctw_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter TSRMLS_DC);
-int mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter TSRMLS_DC);
-
-#endif /* MBFL_MBFILTER_TW_H */
diff --git a/ext/mbstring/mbregex.c b/ext/mbstring/mbregex.c
deleted file mode 100644
index 7e5673fccb..0000000000
--- a/ext/mbstring/mbregex.c
+++ /dev/null
@@ -1,4686 +0,0 @@
-/* Extended regular expression matching and search library.
- Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
- Last change: May 21, 1993 by t^2 */
-/* removed gapped buffer support, multiple syntax support by matz <matz@nts.co.jp> */
-/* Perl5 extension added by matz <matz@caelum.co.jp> */
-/* UTF-8 extension added Jan 16 1999 by Yoshida Masato <yoshidam@tau.bekkoame.ne.jp> */
-
-#include "php.h"
-
-#define re_compile_pattern mbre_compile_pattern
-#define re_free_pattern mbre_free_pattern
-#define re_adjust_startpos mbre_adjust_startpos
-#define re_compile_fastmap mbre_compile_fastmap
-#define re_search mbre_search
-#define re_match mbre_match
-#define re_set_casetable mbre_set_casetable
-#define re_copy_registers mbre_copy_registers
-#define re_free_registers mbre_free_registers
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-/* We write fatal error messages on standard error. */
-#include <stdio.h>
-
-/* isalpha(3) etc. are used for the character classes. */
-#include <ctype.h>
-#include <sys/types.h>
-
-#ifndef PARAMS
-# if defined __GNUC__ || (defined __STDC__ && __STDC__)
-# define PARAMS(args) args
-# else
-# define PARAMS(args) ()
-# endif /* GCC. */
-#endif /* Not PARAMS. */
-
-#if defined(STDC_HEADERS)
-# include <stddef.h>
-#else
-/* We need this for `regex.h', and perhaps for the Emacs include files. */
-# include <sys/types.h>
-#endif
-
-#ifndef __STDC__
-# define volatile
-#endif
-
-#ifdef HAVE_PROTOTYPES
-# define _(args) args
-#else
-# define _(args) ()
-#endif
-
-#ifdef RUBY_PLATFORM
-#include "defines.h"
-
-# define RUBY
-extern int rb_prohibit_interrupt;
-extern int rb_trap_pending;
-void rb_trap_exec _((void));
-
-# define CHECK_INTS if (!rb_prohibit_interrupt) {\
- if (rb_trap_pending) rb_trap_exec();\
-}
-
-#define xmalloc ruby_xmalloc
-#define xcalloc ruby_xcalloc
-#define xrealloc ruby_xrealloc
-#define xfree ruby_xfree
-
-void *xmalloc _((size_t));
-void *xcalloc _((size_t,size_t));
-void *xrealloc _((void*,size_t));
-void xfree _((void*));
-#endif
-
-
-#define xmalloc emalloc
-#define xcalloc ecalloc
-#define xrealloc erealloc
-#define xfree efree
-
-
-/* Make alloca work the best possible way. */
-#ifdef __GNUC__
-# ifndef atarist
-# ifndef alloca
-# define alloca __builtin_alloca
-# endif
-# endif /* atarist */
-#else
-# if defined(HAVE_ALLOCA_H)
-# include <alloca.h>
-# elif !defined(alloca)
-char *alloca();
-# endif
-#endif /* __GNUC__ */
-
-#ifdef _AIX
-#pragma alloca
-#endif
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#ifdef C_ALLOCA
-#define FREE_VARIABLES() alloca(0)
-#else
-#define FREE_VARIABLES()
-#endif
-
-#define FREE_AND_RETURN_VOID(stackb) do { \
- FREE_VARIABLES(); \
- if (stackb != stacka) xfree(stackb); \
- return; \
-} while(0)
-
-#define FREE_AND_RETURN(stackb,val) do { \
- FREE_VARIABLES(); \
- if (stackb != stacka) xfree(stackb); \
- return(val); \
-} while(0)
-
-#define DOUBLE_STACK(type) do { \
- type *stackx; \
- unsigned int xlen = stacke - stackb; \
- if (stackb == stacka) { \
- stackx = (type*)xmalloc(2 * xlen * sizeof(type)); \
- memcpy(stackx, stackb, xlen * sizeof (type)); \
- } \
- else { \
- stackx = (type*)xrealloc(stackb, 2 * xlen * sizeof(type)); \
- } \
- /* Rearrange the pointers. */ \
- stackp = stackx + (stackp - stackb); \
- stackb = stackx; \
- stacke = stackb + 2 * xlen; \
-} while (0)
-
-#define RE_TALLOC(n,t) ((t*)alloca((n)*sizeof(t)))
-#define TMALLOC(n,t) ((t*)xmalloc((n)*sizeof(t)))
-#define TREALLOC(s,n,t) (s=((t*)xrealloc(s,(n)*sizeof(t))))
-
-#define EXPAND_FAIL_STACK() DOUBLE_STACK(unsigned char*)
-#define ENSURE_FAIL_STACK(n) \
- do { \
- if (stacke - stackp <= (n)) { \
- /* if (len > re_max_failures * MAX_NUM_FAILURE_ITEMS) \
- { \
- FREE_AND_RETURN(stackb,(-2)); \
- }*/ \
- \
- /* Roughly double the size of the stack. */ \
- EXPAND_FAIL_STACK(); \
- } \
- } while (0)
-
-/* Get the interface, including the syntax bits. */
-#include "mbregex.h"
-
-/* Subroutines for re_compile_pattern. */
-static void store_jump _((char*, int, char*));
-static void insert_jump _((int, char*, char*, char*));
-static void store_jump_n _((char*, int, char*, unsigned));
-static void insert_jump_n _((int, char*, char*, char*, unsigned));
-#if 0
-static void insert_op _((int, char*, char*));
-#endif
-static void insert_op_2 _((int, char*, char*, int, int));
-static int memcmp_translate _((unsigned char*, unsigned char*, int, const unsigned char*));
-static const unsigned char* re_mbctab_get _((int));
-
-/* Define the syntax stuff, so we can do the \<, \>, etc. */
-
-/* This must be nonzero for the wordchar and notwordchar pattern
- commands in re_match. */
-#define Sword 1
-#define Sword2 2
-
-#define SYNTAX(c) re_syntax_table[c]
-
-static const char casetable[] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- /* ' ' '!' '"' '#' '$' '%' '&' ''' */
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- /* '(' ')' '*' '+' ',' '-' '.' '/' */
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- /* '0' '1' '2' '3' '4' '5' '6' '7' */
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- /* '8' '9' ':' ';' '<' '=' '>' '?' */
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- /* '@' 'A' 'B' 'C' 'D' 'E' 'F' 'G' */
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- /* 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' */
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- /* 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' */
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- /* 'X' 'Y' 'Z' '[' '\' ']' '^' '_' */
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- /* '`' 'a' 'b' 'c' 'd' 'e' 'f' 'g' */
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- /* 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' */
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- /* 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' */
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- /* 'x' 'y' 'z' '{' '|' '}' '~' */
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
-};
-
-static char re_syntax_table[256];
-static void init_syntax_once _((void));
-static const unsigned char *translate = (const unsigned char*)casetable;
-static void init_regs _((struct mbre_registers*, unsigned int));
-static void bm_init_skip _((int *, unsigned char*, int, const unsigned char*));
-#if 0
-static int current_mbctype = MBCTYPE_ASCII;
-#endif
-
-#undef P
-
-static unsigned long
-scan_oct(start, len, retlen)
-const char *start;
-int len;
-int *retlen;
-{
- register const char *s = start;
- register unsigned long retval = 0;
-
- while (len-- && *s >= '0' && *s <= '7') {
- retval <<= 3;
- retval |= *s++ - '0';
- }
- *retlen = s - start;
- return retval;
-}
-
-static unsigned long
-scan_hex(start, len, retlen)
-const char *start;
-int len;
-int *retlen;
-{
- static char hexdigit[] = "0123456789abcdef0123456789ABCDEFx";
- register const char *s = start;
- register unsigned long retval = 0;
- char *tmp;
-
- while (len-- && *s && (tmp = strchr(hexdigit, *s))) {
- retval <<= 4;
- retval |= (tmp - hexdigit) & 15;
- s++;
- }
- *retlen = s - start;
- return retval;
-}
-
-
-static void
-init_syntax_once()
-{
- register int c;
- static int done = 0;
-
- if (done)
- return;
-
- memset(re_syntax_table, 0, sizeof re_syntax_table);
-
- for (c=0; c<=0x7f; c++)
- if (isalnum(c))
- re_syntax_table[c] = Sword;
- re_syntax_table['_'] = Sword;
-
- for (c=0x80; c<=0xff; c++)
- if (isalnum(c))
- re_syntax_table[c] = Sword2;
- done = 1;
-}
-
-void
-re_set_casetable(table)
- const char *table;
-{
- translate = (const unsigned char*)table;
-}
-
-/* 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 isascii to 1 should let any compiler worth its salt
- eliminate the && through constant folding."
- Solaris defines some of these symbols so we must undefine them first. */
-
-#undef ISASCII
-#if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
-# define ISASCII(c) 1
-#else
-# define ISASCII(c) isascii(c)
-#endif
-
-#ifdef isblank
-# define ISBLANK(c) (ISASCII(c) && isblank(c))
-#else
-# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
-#endif
-#ifdef isgraph
-# define ISGRAPH(c) (ISASCII(c) && isgraph(c))
-#else
-# define ISGRAPH(c) (ISASCII(c) && isprint(c) && !isspace(c))
-#endif
-
-#undef ISPRINT
-#define ISPRINT(c) (ISASCII(c) && isprint(c))
-#define ISDIGIT(c) (ISASCII(c) && isdigit(c))
-#define ISALNUM(c) (ISASCII(c) && isalnum(c))
-#define ISALPHA(c) (ISASCII(c) && isalpha(c))
-#define ISCNTRL(c) (ISASCII(c) && iscntrl(c))
-#define ISLOWER(c) (ISASCII(c) && islower(c))
-#define ISPUNCT(c) (ISASCII(c) && ispunct(c))
-#define ISSPACE(c) (ISASCII(c) && isspace(c))
-#define ISUPPER(c) (ISASCII(c) && isupper(c))
-#define ISXDIGIT(c) (ISASCII(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
-
-/* These are the command codes that appear in compiled regular
- expressions, one per byte. Some command codes 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.
-
- The value of `exactn' is needed in search.c (search_buffer) in emacs.
- So regex.h defines a symbol `RE_EXACTN_VALUE' to be 1; the value of
- `exactn' we use here must also be 1. */
-
-enum regexpcode
- {
- unused=0,
- exactn=1, /* Followed by one byte giving n, then by n literal bytes. */
- begline, /* Fail unless at beginning of line. */
- endline, /* Fail unless at end of line. */
- begbuf, /* Succeeds if at beginning of buffer (if emacs) or at beginning
- of string to be matched (if not). */
- endbuf, /* Analogously, for end of buffer/string. */
- endbuf2, /* End of buffer/string, or newline just before it. */
- begpos, /* Matches where last scan//gsub left off. */
- jump, /* Followed by two bytes giving relative address to jump to. */
- jump_past_alt,/* Same as jump, but marks the end of an alternative. */
- on_failure_jump, /* Followed by two bytes giving relative address of
- place to resume at in case of failure. */
- finalize_jump, /* Throw away latest failure point and then jump to
- address. */
- maybe_finalize_jump, /* Like jump but finalize if safe to do so.
- This is used to jump back to the beginning
- of a repeat. If the command that follows
- this jump is clearly incompatible with the
- one at the beginning of the repeat, such that
- we can be sure that there is no use backtracking
- out of repetitions already completed,
- then we finalize. */
- dummy_failure_jump, /* Jump, 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
- use it as an intermediary kind of jump when
- compiling an or construct. */
- push_dummy_failure, /* Push a dummy failure point and continue. Used at the end of
- alternatives. */
- succeed_n, /* Used like on_failure_jump except has to succeed n times;
- then gets turned into an on_failure_jump. The relative
- address following it is useless until then. The
- address is followed by two bytes containing n. */
- jump_n, /* Similar to jump, but jump n times only; also the relative
- address following is in turn followed by yet two more bytes
- containing n. */
- try_next, /* Jump to next pattern for the first time,
- leaving this pattern on the failure stack. */
- finalize_push, /* Finalize stack and push the beginning of the pattern
- on the stack to retry (used for non-greedy match) */
- finalize_push_n, /* Similar to finalize_push, buf finalize n time only */
- set_number_at, /* Set the following relative location to the
- subsequent number. */
- anychar, /* Matches any (more or less) one character excluding newlines. */
- anychar_repeat, /* Matches sequence of characters excluding newlines. */
- charset, /* 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_not, /* Same parameters as charset, but match any character
- that is not one of those specified. */
- start_memory, /* Start remembering the text that is matched, for
- storing in a memory register. Followed by one
- byte containing the register number. Register numbers
- must be in the range 0 through MBRE_NREGS. */
- stop_memory, /* Stop remembering the text that is matched
- and store it in a memory register. Followed by
- one byte containing the register number. Register
- numbers must be in the range 0 through MBRE_NREGS. */
- start_paren, /* Place holder at the start of (?:..). */
- stop_paren, /* Place holder at the end of (?:..). */
- casefold_on, /* Turn on casefold flag. */
- casefold_off, /* Turn off casefold flag. */
- option_set, /* Turn on multi line match (match with newlines). */
- start_nowidth, /* Save string point to the stack. */
- stop_nowidth, /* Restore string place at the point start_nowidth. */
- pop_and_fail, /* Fail after popping nowidth entry from stack. */
- stop_backtrack, /* Restore backtrack stack at the point start_nowidth. */
- duplicate, /* Match a duplicate of something remembered.
- Followed by one byte containing the index of the memory
- register. */
- fail, /* always fails. */
- 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. */
- };
-
-
-/* Number of failure points to allocate space for initially,
- when matching. If this number is exceeded, more space is allocated,
- so it is not a hard limit. */
-
-#ifndef NFAILURES
-#define NFAILURES 160
-#endif
-
-/* 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 the destination pointer to
- the byte after where the number is stored. Watch out that values for
- DESTINATION such as p + 1 won't work, whereas p will. */
-#define STORE_NUMBER_AND_INCR(destination, number) \
- do { STORE_NUMBER(destination, number); \
- (destination) += 2; } while (0)
-
-
-/* Put into DESTINATION a number stored in two contingous bytes starting
- at SOURCE. */
-#define EXTRACT_NUMBER(destination, source) \
- do { (destination) = *(source) & 0377; \
- (destination) += SIGN_EXTEND_CHAR(*(char*)((source) + 1)) << 8; } while (0)
-
-/* Same as EXTRACT_NUMBER, except increment the pointer for source to
- point to second byte of SOURCE. Note that SOURCE has to be a value
- such as p, not, e.g., p + 1. */
-#define EXTRACT_NUMBER_AND_INCR(destination, source) \
- do { EXTRACT_NUMBER(destination, source); \
- (source) += 2; } while (0)
-
-
-/* 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. */
-#if 0
-long
-re_set_syntax(syntax)
- long syntax;
-{
- /* obsolete */
- return 0;
-}
-#endif
-
-/* Macros for re_compile_pattern, which is found below these definitions. */
-
-#define TRANSLATE_P() ((options&MBRE_OPTION_IGNORECASE) && translate)
-#define MAY_TRANSLATE() ((bufp->options&(MBRE_OPTION_IGNORECASE|MBRE_MAY_IGNORECASE)) && translate)
-/* 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'). */
-#define PATFETCH(c) \
- do {if (p == pend) goto end_of_pattern; \
- c = (unsigned char) *p++; \
- if (TRANSLATE_P()) c = (unsigned char)translate[c]; \
- } while (0)
-
-/* Fetch the next character in the uncompiled pattern, with no
- translation. */
-#define PATFETCH_RAW(c) \
- do {if (p == pend) goto end_of_pattern; \
- c = (unsigned char)*p++; \
- } while (0)
-
-/* Go backwards one character in the pattern. */
-#define PATUNFETCH p--
-
-#define MBC2WC(c, p) \
- do { \
- if (current_mbctype == MBCTYPE_UTF8) { \
- int n = mbclen(c) - 1; \
- c &= (1<<(MBRE_BYTEWIDTH-2-n)) - 1; \
- while (n--) { \
- c = c << 6 | (*p++ & ((1<<6)-1)); \
- } \
- } \
- else { \
- c <<= 8; \
- c |= (unsigned char)*(p)++; \
- } \
- } while (0)
-
-#define PATFETCH_MBC(c) \
- do { \
- if (p + mbclen(c) - 1 >= pend) goto end_of_pattern; \
- MBC2WC(c, p); \
- } while(0)
-
-#define WC2MBC1ST(c) \
- ((c<0x100)?(c):((current_mbctype != MBCTYPE_UTF8)?(((c)>>8)&0xff):utf8_firstbyte(c)))
-
-static unsigned int
-utf8_firstbyte(c)
- unsigned long c;
-{
- if (c < 0x80) return c;
- if (c <= 0x7ff) return ((c>>6)&0xff)|0xc0;
- if (c <= 0xffff) return ((c>>12)&0xff)|0xe0;
- if (c <= 0x1fffff) return ((c>>18)&0xff)|0xf0;
- if (c <= 0x3ffffff) return ((c>>24)&0xff)|0xf8;
- if (c <= 0x7fffffff) return ((c>>30)&0xff)|0xfc;
-#if SIZEOF_INT > 4
- if (c <= 0xfffffffff) return 0xfe;
-#else
- return 0xfe;
-#endif
-}
-
-#if 0
-static void
-print_mbc(c)
- unsigned int c;
-{
- if (current_mbctype == MBCTYPE_UTF8) {
- if (c < 0x80)
- printf("%c", c);
- else if (c <= 0x7ff)
- printf("%c%c", utf8_firstbyte(c), c&0x3f);
- else if (c <= 0xffff)
- printf("%c%c%c", utf8_firstbyte(c), (c>>6)&0x3f, c&0x3f);
- else if (c <= 0x1fffff)
- printf("%c%c%c%c", utf8_firstbyte(c), (c>>12)&0x3f, (c>>6)&0x3f, c&0x3f);
- else if (c <= 0x3ffffff)
- printf("%c%c%c%c%c", utf8_firstbyte(c), (c>>18)&0x3f, (c>>12)&0x3f, (c>>6)&0x3f, c&0x3f);
- else if (c <= 0x7fffffff)
- printf("%c%c%c%c%c%c", utf8_firstbyte(c), (c>>24)&0x3f, (c>>18)&0x3f, (c>>12)&0x3f, (c>>6)&0x3f, c&0x3f);
- }
- else if (c < 0xff) {
- printf("\\%o", c);
- }
- else {
- printf("%c%c", c>>MBRE_BYTEWIDTH, c&0xff);
- }
-}
-#endif
-
-/* If the buffer isn't allocated when it comes in, use this. */
-#define INIT_BUF_SIZE 28
-
-/* Make sure we have at least N more bytes of space in buffer. */
-#define GET_BUFFER_SPACE(n) \
- do { \
- while (b - bufp->buffer + (n) >= bufp->allocated) \
- EXTEND_BUFFER; \
- } while (0)
-
-/* Make sure we have one more byte of buffer space and then add CH to it. */
-#define BUFPUSH(ch) \
- do { \
- GET_BUFFER_SPACE(1); \
- *b++ = (char)(ch); \
- } while (0)
-
-/* Extend the buffer by twice its current size via reallociation and
- reset the pointers that pointed into the old allocation to point to
- the correct places in the new allocation. If extending the buffer
- results in it being larger than 1 << 16, then flag memory exhausted. */
-#define EXTEND_BUFFER \
- do { char *old_buffer = bufp->buffer; \
- if (bufp->allocated == (1L<<16)) goto too_big; \
- bufp->allocated *= 2; \
- if (bufp->allocated > (1L<<16)) bufp->allocated = (1L<<16); \
- bufp->buffer = (char*)xrealloc(bufp->buffer, bufp->allocated); \
- if (bufp->buffer == 0) \
- goto memory_exhausted; \
- b = (b - 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; \
- begalt = (begalt - old_buffer) + bufp->buffer; \
- if (pending_exact) \
- pending_exact = (pending_exact - old_buffer) + bufp->buffer; \
- } while (0)
-
-
-/* Set the bit for character C in a character set list. */
-#define SET_LIST_BIT(c) \
- (b[(unsigned char)(c) / MBRE_BYTEWIDTH] \
- |= 1 << ((unsigned char)(c) % MBRE_BYTEWIDTH))
-
-/* Get the next unsigned number in the uncompiled pattern. */
-#define GET_UNSIGNED_NUMBER(num) \
- do { if (p != pend) { \
- PATFETCH(c); \
- while (ISDIGIT(c)) { \
- if (num < 0) \
- num = 0; \
- num = num * 10 + c - '0'; \
- if (p == pend) \
- break; \
- PATFETCH(c); \
- } \
- } \
- } while (0)
-
-#define STREQ(s1, s2) ((strcmp(s1, s2) == 0))
-
-#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"))
-
-#define STORE_MBC(p, c) \
- do { \
- (p)[0] = (unsigned char)(((c) >>24) & 0xff); \
- (p)[1] = (unsigned char)(((c) >>16) & 0xff); \
- (p)[2] = (unsigned char)(((c) >> 8) & 0xff); \
- (p)[3] = (unsigned char)(((c) >> 0) & 0xff); \
- } while (0)
-
-#define STORE_MBC_AND_INCR(p, c) \
- do { \
- *(p)++ = (unsigned char)(((c) >>24) & 0xff); \
- *(p)++ = (unsigned char)(((c) >>16) & 0xff); \
- *(p)++ = (unsigned char)(((c) >> 8) & 0xff); \
- *(p)++ = (unsigned char)(((c) >> 0) & 0xff); \
- } while (0)
-
-#define EXTRACT_MBC(p) \
- ((unsigned int)((unsigned char)(p)[0] << 24 | \
- (unsigned char)(p)[1] << 16 | \
- (unsigned char)(p)[2] << 8 | \
- (unsigned char)(p)[3]))
-
-#define EXTRACT_MBC_AND_INCR(p) \
- ((unsigned int)((p) += 4, \
- (unsigned char)(p)[-4] << 24 | \
- (unsigned char)(p)[-3] << 16 | \
- (unsigned char)(p)[-2] << 8 | \
- (unsigned char)(p)[-1]))
-
-#define EXTRACT_UNSIGNED(p) \
- ((unsigned char)(p)[0] | (unsigned char)(p)[1] << 8)
-#define EXTRACT_UNSIGNED_AND_INCR(p) \
- ((p) += 2, (unsigned char)(p)[-2] | (unsigned char)(p)[-1] << 8)
-
-/* Handle (mb)?charset(_not)?.
-
- Structure of mbcharset(_not)? in compiled pattern.
-
- struct {
- unsinged char id; mbcharset(_not)?
- unsigned char sbc_size;
- unsigned char sbc_map[sbc_size]; same as charset(_not)? up to here.
- unsigned short mbc_size; number of intervals.
- struct {
- unsigned long beg; beginning of interval.
- unsigned long end; end of interval.
- } intervals[mbc_size];
- }; */
-
-static void
-set_list_bits(c1, c2, b)
- unsigned long c1, c2;
- unsigned char *b;
-{
- unsigned char sbc_size = b[-1];
- unsigned short mbc_size = EXTRACT_UNSIGNED(&b[sbc_size]);
- unsigned short beg, end, upb;
-
- if (c1 > c2)
- return;
- b = &b[sbc_size + 2];
-
- for (beg = 0, upb = mbc_size; beg < upb; ) {
- unsigned short mid = (unsigned short)(beg + upb) >> 1;
-
- if ((int)c1 - 1 > (int)EXTRACT_MBC(&b[mid*8+4]))
- beg = mid + 1;
- else
- upb = mid;
- }
-
- for (end = beg, upb = mbc_size; end < upb; ) {
- unsigned short mid = (unsigned short)(end + upb) >> 1;
-
- if ((int)c2 >= (int)EXTRACT_MBC(&b[mid*8]) - 1)
- end = mid + 1;
- else
- upb = mid;
- }
-
- if (beg != end) {
- if (c1 > EXTRACT_MBC(&b[beg*8]))
- c1 = EXTRACT_MBC(&b[beg*8]);
- if (c2 < EXTRACT_MBC(&b[(end - 1)*8+4]))
- c2 = EXTRACT_MBC(&b[(end - 1)*8+4]);
- }
- if (end < mbc_size && end != beg + 1)
- /* NOTE: memcpy() would not work here. */
- memmove(&b[(beg + 1)*8], &b[end*8], (mbc_size - end)*8);
- STORE_MBC(&b[beg*8 + 0], c1);
- STORE_MBC(&b[beg*8 + 4], c2);
- mbc_size += beg - end + 1;
- STORE_NUMBER(&b[-2], mbc_size);
-}
-
-static int
-is_in_list(c, b)
- unsigned long c;
- const unsigned char *b;
-{
- unsigned short size;
- unsigned short i, j;
-
- size = *b++;
- if ((int)c / MBRE_BYTEWIDTH < (int)size && b[c / MBRE_BYTEWIDTH] & 1 << c % MBRE_BYTEWIDTH) {
- return 1;
- }
- b += size + 2;
- size = EXTRACT_UNSIGNED(&b[-2]);
- if (size == 0) return 0;
-
- for (i = 0, j = size; i < j; ) {
- unsigned short k = (unsigned short)(i + j) >> 1;
-
- if (c > EXTRACT_MBC(&b[k*8+4]))
- i = k + 1;
- else
- j = k;
- }
- if (i < size && EXTRACT_MBC(&b[i*8]) <= c
- && ((unsigned char)c != '\n' && (unsigned char)c != '\0'))
- return 1;
- return 0;
-}
-
-#if 0
-static 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) {
- switch ((enum regexpcode)*p++) {
- case unused:
- printf("/unused");
- break;
-
- case exactn:
- mcnt = *p++;
- printf("/exactn/%d", mcnt);
- do {
- putchar('/');
- printf("%c", *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 start_paren:
- printf("/start_paren");
- break;
-
- case stop_paren:
- printf("/stop_paren");
- break;
-
- case casefold_on:
- printf("/casefold_on");
- break;
-
- case casefold_off:
- printf("/casefold_off");
- break;
-
- case option_set:
- printf("/option_set/%d", *p++);
- break;
-
- case start_nowidth:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/start_nowidth//%d", mcnt);
- break;
-
- case stop_nowidth:
- printf("/stop_nowidth//");
- p += 2;
- break;
-
- case pop_and_fail:
- printf("/pop_and_fail");
- break;
-
- case stop_backtrack:
- printf("/stop_backtrack//");
- p += 2;
- break;
-
- case duplicate:
- printf("/duplicate/%d", *p++);
- break;
-
- case anychar:
- printf("/anychar");
- break;
-
- case anychar_repeat:
- printf("/anychar_repeat");
- break;
-
- case charset:
- case charset_not:
- {
- register int c;
-
- printf("/charset%s",
- (enum regexpcode)*(p - 1) == charset_not ? "_not" : "");
-
- mcnt = *p++;
- printf("/%d", mcnt);
- for (c = 0; c < mcnt; c++) {
- unsigned bit;
- unsigned char map_byte = p[c];
-
- putchar ('/');
-
- for (bit = 0; bit < MBRE_BYTEWIDTH; bit++)
- if (map_byte & (1 << bit))
- printf("%c", c * MBRE_BYTEWIDTH + bit);
- }
- p += mcnt;
- mcnt = EXTRACT_UNSIGNED_AND_INCR(p);
- printf("/");
- while (mcnt--) {
- print_mbc(EXTRACT_MBC_AND_INCR(p));
- printf("-");
- print_mbc(EXTRACT_MBC_AND_INCR(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//%d", mcnt);
- break;
-
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/dummy_failure_jump//%d", mcnt);
- break;
-
- case push_dummy_failure:
- printf("/push_dummy_failure");
- break;
-
- case finalize_jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/finalize_jump//%d", mcnt);
- break;
-
- case maybe_finalize_jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/maybe_finalize_jump//%d", mcnt);
- break;
-
- case jump_past_alt:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/jump_past_alt//%d", mcnt);
- break;
-
- case jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/jump//%d", mcnt);
- break;
-
- case succeed_n:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- EXTRACT_NUMBER_AND_INCR(mcnt2, p);
- printf("/succeed_n//%d//%d", mcnt, mcnt2);
- break;
-
- case jump_n:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- EXTRACT_NUMBER_AND_INCR(mcnt2, p);
- printf("/jump_n//%d//%d", mcnt, mcnt2);
- break;
-
- case set_number_at:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- EXTRACT_NUMBER_AND_INCR(mcnt2, p);
- printf("/set_number_at//%d//%d", mcnt, mcnt2);
- break;
-
- case try_next:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/try_next//%d", mcnt);
- break;
-
- case finalize_push:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- printf("/finalize_push//%d", mcnt);
- break;
-
- case finalize_push_n:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- EXTRACT_NUMBER_AND_INCR(mcnt2, p);
- printf("/finalize_push_n//%d//%d", mcnt, mcnt2);
- break;
-
- case wordbound:
- printf("/wordbound");
- break;
-
- case notwordbound:
- printf("/notwordbound");
- break;
-
- case wordbeg:
- printf("/wordbeg");
- break;
-
- case wordend:
- printf("/wordend");
-
- case wordchar:
- printf("/wordchar");
- break;
-
- case notwordchar:
- printf("/notwordchar");
- break;
-
- case begbuf:
- printf("/begbuf");
- break;
-
- case endbuf:
- printf("/endbuf");
- break;
-
- case endbuf2:
- printf("/endbuf2");
- break;
-
- case begpos:
- printf("/begpos");
- break;
-
- default:
- printf("?%d", *(p-1));
- }
- }
- printf("/\n");
-}
-
-
-static void
-print_compiled_pattern(bufp)
- struct mbre_pattern_buffer *bufp;
-{
- unsigned char *buffer = (unsigned char*)bufp->buffer;
-
- print_partial_compiled_pattern(buffer, buffer + bufp->used);
-}
-#endif
-
-static char*
-calculate_must_string(start, end)
- char *start;
- char *end;
-{
- int mcnt;
- int max = 0;
- char *p = start;
- char *pend = end;
- char *must = 0;
-
- if (start == NULL) return 0;
-
- /* Loop over pattern commands. */
- while (p < pend) {
- switch ((enum regexpcode)*p++) {
- case unused:
- break;
-
- case exactn:
- mcnt = *p;
- if (mcnt > max) {
- must = p;
- max = mcnt;
- }
- p += mcnt+1;
- break;
-
- case start_memory:
- case stop_memory:
- p += 2;
- break;
-
- case duplicate:
- p++;
- break;
-
- case casefold_on:
- case casefold_off:
- return 0; /* should not check must_string */
-
- case pop_and_fail:
- case anychar:
- case anychar_repeat:
- case begline:
- case endline:
- case wordbound:
- case notwordbound:
- case wordbeg:
- case wordend:
- case wordchar:
- case notwordchar:
- case begbuf:
- case endbuf:
- case endbuf2:
- case begpos:
- case push_dummy_failure:
- case start_paren:
- case stop_paren:
- case option_set:
- break;
-
- case charset:
- case charset_not:
- mcnt = *p++;
- p += mcnt;
- mcnt = EXTRACT_UNSIGNED_AND_INCR(p);
- while (mcnt--) {
- p += 4;
- }
- break;
-
- case on_failure_jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- if (mcnt > 0) p += mcnt;
- if ((enum regexpcode)p[-3] == jump) {
- p -= 2;
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- if (mcnt > 0) p += mcnt;
- }
- break;
-
- case dummy_failure_jump:
- case succeed_n:
- case try_next:
- case jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- if (mcnt > 0) p += mcnt;
- break;
-
- case start_nowidth:
- case stop_nowidth:
- case stop_backtrack:
- case finalize_jump:
- case maybe_finalize_jump:
- case finalize_push:
- p += 2;
- break;
-
- case jump_n:
- case set_number_at:
- case finalize_push_n:
- p += 4;
- break;
-
- default:
- break;
- }
- }
- return must;
-}
-
-static unsigned int
-read_backslash(c)
- int c;
-{
- switch (c) {
- case 'n':
- return '\n';
-
- case 't':
- return '\t';
-
- case 'r':
- return '\r';
-
- case 'f':
- return '\f';
-
- case 'v':
- return '\v';
-
- case 'a':
- return '\007';
-
- case 'b':
- return '\010';
-
- case 'e':
- return '\033';
- }
- return c;
-}
-
-static unsigned int
-read_special(p, pend, pp)
- const char *p, *pend, **pp;
-{
- int c;
-
- PATFETCH_RAW(c);
- switch (c) {
- case 'M':
- PATFETCH_RAW(c);
- if (c != '-') return -1;
- PATFETCH_RAW(c);
- *pp = p;
- if (c == '\\') {
- return read_special(p, pend, pp) | 0x80;
- }
- else if (c == -1) return ~0;
- else {
- return ((c & 0xff) | 0x80);
- }
-
- case 'C':
- PATFETCH_RAW(c);
- if (c != '-') return ~0;
- case 'c':
- PATFETCH_RAW(c);
- *pp = p;
- if (c == '\\') {
- c = read_special(p, pend, pp);
- }
- else if (c == '?') return 0177;
- else if (c == -1) return ~0;
- return c & 0x9f;
- default:
- return read_backslash(c);
- }
-
- end_of_pattern:
- return ~0;
-}
-
-/* re_compile_pattern takes a regular-expression string
- and converts it into a buffer full of byte commands for matching.
-
- PATTERN is the address of the pattern string
- SIZE is the length of it.
- BUFP is a struct mbre_pattern_buffer * which points to the info
- on where to store the byte commands.
- This structure contains a char * which points to the
- actual space, which should have been obtained with malloc.
- re_compile_pattern may use realloc to grow the buffer space.
-
- The number of bytes of commands can be found out by looking in
- the `struct mbre_pattern_buffer' that bufp pointed to, after
- re_compile_pattern returns. */
-
-char *
-re_compile_pattern(pattern, size, bufp)
- const char *pattern;
- int size;
- struct mbre_pattern_buffer *bufp;
-{
- register char *b = bufp->buffer;
- register const char *p = pattern;
- const char *nextp;
- const char *pend = pattern + size;
- register unsigned int c, c1=0;
- const char *p0;
- int numlen;
-#define ERROR_MSG_MAX_SIZE 200
- static char error_msg[ERROR_MSG_MAX_SIZE+1];
-
- /* Address of the count-byte of the most recently inserted `exactn'
- command. This makes it possible to tell whether a new exact-match
- character can be added to that command or requires a new `exactn'
- command. */
-
- char *pending_exact = 0;
-
- /* 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. */
-
- char *fixup_alt_jump = 0;
-
- /* Address of start of the most recently finished expression.
- This tells postfix * where to find the start of its operand. */
-
- char *laststart = 0;
-
- /* In processing a repeat, 1 means zero matches is allowed. */
-
- char zero_times_ok;
-
- /* In processing a repeat, 1 means many matches is allowed. */
-
- char many_times_ok;
-
- /* In processing a repeat, 1 means non-greedy matches. */
-
- char greedy;
-
- /* Address of beginning of regexp, or inside of last (. */
-
- char *begalt = b;
-
- /* Place in the uncompiled pattern (i.e., the {) to
- which to go back if the interval is invalid. */
- const char *beg_interval;
-
- /* In processing an interval, at least this many matches must be made. */
- int lower_bound;
-
- /* In processing an interval, at most this many matches can be made. */
- int upper_bound;
-
- /* Stack of information saved by ( and restored by ).
- Five stack elements are pushed by each (:
- First, the value of b.
- Second, the value of fixup_alt_jump.
- Third, the value of begalt.
- Fourth, the value of regnum.
- Fifth, the type of the paren. */
-
- int stacka[40];
- int *stackb = stacka;
- int *stackp = stackb;
- int *stacke = stackb + 40;
-
- /* Counts ('s as they are encountered. Remembered for the matching ),
- where it becomes the register number to put in the stop_memory
- command. */
-
- int regnum = 1;
-
- int range = 0;
- int had_mbchar = 0;
- int had_num_literal = 0;
- int had_char_class = 0;
-
- int options = bufp->options;
-
- int current_mbctype = bufp->mbctype;
- const unsigned char *re_mbctab = re_mbctab_get(current_mbctype);
-
- bufp->fastmap_accurate = 0;
- bufp->must = 0;
- bufp->must_skip = 0;
- bufp->stclass = 0;
-
- /* Initialize the syntax table. */
- init_syntax_once();
-
- if (bufp->allocated == 0) {
- bufp->allocated = INIT_BUF_SIZE;
- if (bufp->buffer)
- /* EXTEND_BUFFER loses when bufp->allocated is 0. */
- bufp->buffer = (char*)xrealloc(bufp->buffer, INIT_BUF_SIZE);
- else
- /* Caller did not allocate a buffer. Do it for them. */
- bufp->buffer = (char*)xmalloc(INIT_BUF_SIZE);
- if (!bufp->buffer) goto memory_exhausted;
- begalt = b = bufp->buffer;
- }
-
- while (p != pend) {
- PATFETCH(c);
-
- switch (c) {
- case '$':
- if (bufp->options & MBRE_OPTION_SINGLELINE) {
- BUFPUSH(endbuf);
- }
- else {
- p0 = p;
- /* When testing what follows the $,
- look past the \-constructs that don't consume anything. */
-
- while (p0 != pend) {
- if (*p0 == '\\' && p0 + 1 != pend
- && (p0[1] == 'b' || p0[1] == 'B'))
- p0 += 2;
- else
- break;
- }
- BUFPUSH(endline);
- }
- break;
-
- case '^':
- if (bufp->options & MBRE_OPTION_SINGLELINE)
- BUFPUSH(begbuf);
- else
- BUFPUSH(begline);
- break;
-
- case '+':
- case '?':
- case '*':
- /* If there is no previous pattern, char not special. */
- if (!laststart) {
- snprintf(error_msg, ERROR_MSG_MAX_SIZE,
- "invalid regular expression; there's no previous pattern, to which '%c' would define cardinality at %d",
- c, p-pattern);
- FREE_AND_RETURN(stackb, error_msg);
- }
- /* If there is a sequence of repetition chars,
- collapse it down to just one. */
- zero_times_ok = c != '+';
- many_times_ok = c != '?';
- greedy = 1;
- if (p != pend) {
- PATFETCH(c);
- switch (c) {
- case '?':
- greedy = 0;
- break;
- case '*':
- case '+':
- goto nested_meta;
- default:
- PATUNFETCH;
- break;
- }
- }
-
- repeat:
- /* Star, etc. applied to an empty pattern is equivalent
- to an empty pattern. */
- if (!laststart)
- break;
-
- if (greedy && many_times_ok && *laststart == anychar && b - laststart <= 2) {
- if (b[-1] == stop_paren)
- b--;
- if (zero_times_ok)
- *laststart = anychar_repeat;
- else {
- BUFPUSH(anychar_repeat);
- }
- 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) {
- /* If more than one repetition is allowed, 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). */
- GET_BUFFER_SPACE(3);
- store_jump(b,greedy?maybe_finalize_jump:finalize_push,laststart-3);
- b += 3; /* Because store_jump put stuff here. */
- }
-
- /* On failure, jump from laststart to next pattern, which will be the
- end of the buffer after this jump is inserted. */
- GET_BUFFER_SPACE(3);
- insert_jump(on_failure_jump, laststart, b + 3, b);
- b += 3;
-
- if (zero_times_ok) {
- if (greedy == 0) {
- GET_BUFFER_SPACE(3);
- insert_jump(try_next, laststart, b + 3, b);
- b += 3;
- }
- }
- else {
- /* 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);
- b += 3;
- }
- break;
-
- case '.':
- laststart = b;
- BUFPUSH(anychar);
- break;
-
- case '[':
- if (p == pend)
- FREE_AND_RETURN(stackb, "invalid regular expression; '[' can't be the last character ie. can't start range at the end of pattern");
- while ((b - bufp->buffer + 9 + (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH)
- > bufp->allocated)
- EXTEND_BUFFER;
-
- laststart = b;
- if (*p == '^') {
- BUFPUSH(charset_not);
- p++;
- }
- else
- BUFPUSH(charset);
- p0 = p;
-
- BUFPUSH((1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH);
- /* Clear the whole map */
- memset(b, 0, (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH + 2);
-
- had_mbchar = 0;
- had_num_literal = 0;
- had_char_class = 0;
-
- /* Read in characters and ranges, setting map bits. */
- for (;;) {
- int size;
- unsigned last = (unsigned)-1;
-
- if ((size = EXTRACT_UNSIGNED(&b[(1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH]))
- || current_mbctype) {
- /* Ensure the space is enough to hold another interval
- of multi-byte chars in charset(_not)?. */
- size = (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH + 2 + size*8 + 8;
- while (b + size + 1 > bufp->buffer + bufp->allocated)
- EXTEND_BUFFER;
- }
- range_retry:
- if (range && had_char_class) {
- FREE_AND_RETURN(stackb, "invalid regular expression; can't use character class as an end value of range");
- }
- PATFETCH(c);
-
- if (c == ']') {
- if (p == p0 + 1) {
- if (p == pend)
- FREE_AND_RETURN(stackb, "invalid regular expression; empty character class");
- }
- else
- /* Stop if this isn't merely a ] inside a bracket
- expression, but rather the end of a bracket
- expression. */
- 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_AND_RETURN(stackb, "invalid regular expression; can't use character class as a start value of range");
- if (ismbchar(c)) {
- PATFETCH_MBC(c);
- had_mbchar++;
- }
- had_char_class = 0;
-
- /* \ escapes characters when inside [...]. */
- if (c == '\\') {
- PATFETCH_RAW(c);
- switch (c) {
- case 'w':
- for (c = 0; c < (1 << MBRE_BYTEWIDTH); c++) {
- if (SYNTAX(c) == Sword ||
- (!current_mbctype && SYNTAX(c) == Sword2))
- SET_LIST_BIT(c);
- }
- if (current_mbctype) {
- set_list_bits(0x80, 0xffffffff, b);
- }
- had_char_class = 1;
- last = -1;
- continue;
-
- case 'W':
- for (c = 0; c < (1 << MBRE_BYTEWIDTH); c++) {
- if (SYNTAX(c) != Sword &&
- ((current_mbctype && !re_mbctab[c]) ||
- (!current_mbctype && SYNTAX(c) != Sword2)))
- SET_LIST_BIT(c);
- }
- had_char_class = 1;
- last = -1;
- continue;
-
- case 's':
- for (c = 0; c < 256; c++)
- if (ISSPACE(c))
- SET_LIST_BIT(c);
- had_char_class = 1;
- last = -1;
- continue;
-
- case 'S':
- for (c = 0; c < 256; c++)
- if (!ISSPACE(c))
- SET_LIST_BIT(c);
- if (current_mbctype)
- set_list_bits(0x80, 0xffffffff, b);
- had_char_class = 1;
- last = -1;
- continue;
-
- case 'd':
- for (c = '0'; c <= '9'; c++)
- SET_LIST_BIT(c);
- had_char_class = 1;
- last = -1;
- continue;
-
- case 'D':
- for (c = 0; c < 256; c++)
- if (!ISDIGIT(c))
- SET_LIST_BIT(c);
- if (current_mbctype)
- set_list_bits(0x80, 0xffffffff, b);
- had_char_class = 1;
- last = -1;
- continue;
-
- case 'x':
- c = scan_hex(p, 2, &numlen);
- p += numlen;
- had_num_literal = 1;
- break;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- PATUNFETCH;
- c = scan_oct(p, 3, &numlen);
- p += numlen;
- had_num_literal = 1;
- break;
-
- case 'M':
- case 'C':
- case 'c':
- p0 = --p;
- c = read_special(p, pend, &p0);
- if (c > 255) goto invalid_escape;
- p = p0;
- had_num_literal = 1;
- break;
-
- default:
- c = read_backslash(c);
- if (ismbchar(c)) {
- PATFETCH_MBC(c);
- had_mbchar++;
- }
- break;
- }
- }
-
- /* Get a range. */
- if (range) {
- if (last > c)
- goto invalid_pattern;
-
- range = 0;
- if (had_mbchar == 0) {
- for (;last<=c;last++)
- SET_LIST_BIT(last);
- }
- else if (had_mbchar == 2) {
- set_list_bits(last, c, b);
- }
- else {
- /* restriction: range between sbc and mbc */
- goto invalid_pattern;
- }
- }
- else if (p[0] == '-' && p[1] != ']') {
- last = c;
- PATFETCH(c1);
- range = 1;
- goto range_retry;
- }
- else if (c == '[' && *p == ':') {
- /* Leave room for the null. */
- char str[CHAR_CLASS_MAX_LENGTH + 1];
-
- PATFETCH_RAW(c);
- c1 = 0;
-
- /* If pattern is `[[:'. */
- if (p == pend)
- FREE_AND_RETURN(stackb, "invalid regular expression; re can't end '[[:'");
-
- 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;
- char is_alnum = STREQ(str, "alnum");
- char is_alpha = STREQ(str, "alpha");
- char is_blank = STREQ(str, "blank");
- char is_cntrl = STREQ(str, "cntrl");
- char is_digit = STREQ(str, "digit");
- char is_graph = STREQ(str, "graph");
- char is_lower = STREQ(str, "lower");
- char is_print = STREQ(str, "print");
- char is_punct = STREQ(str, "punct");
- char is_space = STREQ(str, "space");
- char is_upper = STREQ(str, "upper");
- char is_xdigit = STREQ(str, "xdigit");
-
- if (!IS_CHAR_CLASS(str)){
- snprintf(error_msg, ERROR_MSG_MAX_SIZE,
- "invalid regular expression; [:%s:] is not a character class", str);
- FREE_AND_RETURN(stackb, error_msg);
- }
-
- /* Throw away the ] at the end of the character class. */
- PATFETCH(c);
-
- if (p == pend)
- FREE_AND_RETURN(stackb, "invalid regular expression; range doesn't have ending ']' after a character class");
-
- for (ch = 0; ch < 1 << MBRE_BYTEWIDTH; ch++) {
- if ( (is_alnum && ISALNUM(ch))
- || (is_alpha && ISALPHA(ch))
- || (is_blank && ISBLANK(ch))
- || (is_cntrl && ISCNTRL(ch))
- || (is_digit && ISDIGIT(ch))
- || (is_graph && ISGRAPH(ch))
- || (is_lower && ISLOWER(ch))
- || (is_print && ISPRINT(ch))
- || (is_punct && ISPUNCT(ch))
- || (is_space && ISSPACE(ch))
- || (is_upper && ISUPPER(ch))
- || (is_xdigit && ISXDIGIT(ch)))
- SET_LIST_BIT(ch);
- }
- had_char_class = 1;
- }
- else {
- c1++;
- while (c1--)
- PATUNFETCH;
- SET_LIST_BIT(TRANSLATE_P()?translate['[']:'[');
- SET_LIST_BIT(TRANSLATE_P()?translate[':']:':');
- had_char_class = 0;
- last = ':';
- }
- }
- else if (had_mbchar == 0 && (!current_mbctype || !had_num_literal)) {
- SET_LIST_BIT(c);
- had_num_literal = 0;
- }
- else
- set_list_bits(c, c, b);
- had_mbchar = 0;
- }
-
- /* Discard any character set/class bitmap bytes that are all
- 0 at the end of the map. Decrement the map-length byte too. */
- while ((int)b[-1] > 0 && b[(int)b[-1] - 1] == 0)
- b[-1]--;
- if (b[-1] != (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH)
- memmove(&b[(int)b[-1]], &b[(1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH],
- 2 + EXTRACT_UNSIGNED(&b[(1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH])*8);
- b += b[-1] + 2 + EXTRACT_UNSIGNED(&b[(int)b[-1]])*8;
- break;
-
- case '(':
- {
- int old_options = options;
- int push_option = 0;
- int casefold = 0;
-
- PATFETCH(c);
- if (c == '?') {
- int negative = 0;
-
- PATFETCH_RAW(c);
- switch (c) {
- case 'x': case 'p': case 'm': case 'i': case '-':
- for (;;) {
- switch (c) {
- case '-':
- negative = 1;
- break;
-
- case ':':
- case ')':
- break;
-
- case 'x':
- if (negative)
- options &= ~MBRE_OPTION_EXTENDED;
- else
- options |= MBRE_OPTION_EXTENDED;
- break;
-
- case 'p':
- if (negative) {
- if ((options&MBRE_OPTION_POSIXLINE) == MBRE_OPTION_POSIXLINE) {
- options &= ~MBRE_OPTION_POSIXLINE;
- }
- }
- else if ((options&MBRE_OPTION_POSIXLINE) != MBRE_OPTION_POSIXLINE) {
- options |= MBRE_OPTION_POSIXLINE;
- }
- push_option = 1;
- break;
-
- case 'm':
- if (negative) {
- if (options&MBRE_OPTION_MULTILINE) {
- options &= ~MBRE_OPTION_MULTILINE;
- }
- }
- else if (!(options&MBRE_OPTION_MULTILINE)) {
- options |= MBRE_OPTION_MULTILINE;
- }
- push_option = 1;
- break;
-
- case 'i':
- if (negative) {
- if (options&MBRE_OPTION_IGNORECASE) {
- options &= ~MBRE_OPTION_IGNORECASE;
- }
- }
- else if (!(options&MBRE_OPTION_IGNORECASE)) {
- options |= MBRE_OPTION_IGNORECASE;
- }
- casefold = 1;
- break;
-
- default:
- FREE_AND_RETURN(stackb, "undefined (?...) inline option");
- }
- if (c == ')') {
- c = '#'; /* read whole in-line options */
- break;
- }
- if (c == ':') break;
- PATFETCH_RAW(c);
- }
- break;
-
- case '#':
- for (;;) {
- PATFETCH(c);
- if (c == ')') break;
- }
- c = '#';
- break;
-
- case ':':
- case '=':
- case '!':
- case '>':
- break;
-
- default:
- FREE_AND_RETURN(stackb, "undefined (?...) sequence");
- }
- }
- else {
- PATUNFETCH;
- c = '(';
- }
- if (c == '#') {
- if (push_option) {
- BUFPUSH(option_set);
- BUFPUSH(options);
- }
- if (casefold) {
- if (options & MBRE_OPTION_IGNORECASE)
- BUFPUSH(casefold_on);
- else
- BUFPUSH(casefold_off);
- }
- break;
- }
- if (stackp+8 >= stacke) {
- DOUBLE_STACK(int);
- }
-
- /* Laststart should point to the start_memory that we are about
- to push (unless the pattern has MBRE_NREGS or more ('s). */
- /* obsolete: now MBRE_NREGS is just a default register size. */
- *stackp++ = b - bufp->buffer;
- *stackp++ = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
- *stackp++ = begalt - bufp->buffer;
- switch (c) {
- case '(':
- BUFPUSH(start_memory);
- BUFPUSH(regnum);
- *stackp++ = regnum++;
- *stackp++ = b - bufp->buffer;
- BUFPUSH(0);
- /* too many ()'s to fit in a byte. (max 254) */
- if (regnum >= MBRE_REG_MAX) goto too_big;
- break;
-
- case '=':
- case '!':
- case '>':
- BUFPUSH(start_nowidth);
- *stackp++ = b - bufp->buffer;
- BUFPUSH(0); /* temporary value */
- BUFPUSH(0);
- if (c != '!') break;
-
- BUFPUSH(on_failure_jump);
- *stackp++ = b - bufp->buffer;
- BUFPUSH(0); /* temporary value */
- BUFPUSH(0);
- break;
-
- case ':':
- BUFPUSH(start_paren);
- pending_exact = 0;
- default:
- break;
- }
- if (push_option) {
- BUFPUSH(option_set);
- BUFPUSH(options);
- }
- if (casefold) {
- if (options & MBRE_OPTION_IGNORECASE)
- BUFPUSH(casefold_on);
- else
- BUFPUSH(casefold_off);
- }
- *stackp++ = c;
- *stackp++ = old_options;
- fixup_alt_jump = 0;
- laststart = 0;
- begalt = b;
- }
- break;
-
- case ')':
- if (stackp == stackb)
- FREE_AND_RETURN(stackb, "unmatched )");
-
- pending_exact = 0;
- if (fixup_alt_jump) {
- /* Push a dummy failure point at the end of the
- alternative for a possible future
- `finalize_jump' to pop. See comments at
- `push_dummy_failure' in `re_match'. */
- BUFPUSH(push_dummy_failure);
-
- /* We allocated space for this jump when we assigned
- to `fixup_alt_jump', in the `handle_alt' case below. */
- store_jump(fixup_alt_jump, jump, b);
- }
- if (options != stackp[-1]) {
- if ((options ^ stackp[-1]) & MBRE_OPTION_IGNORECASE) {
- BUFPUSH((options&MBRE_OPTION_IGNORECASE)?casefold_off:casefold_on);
- }
- if ((options ^ stackp[-1]) != MBRE_OPTION_IGNORECASE) {
- BUFPUSH(option_set);
- BUFPUSH(stackp[-1]);
- }
- }
- p0 = b;
- options = *--stackp;
- switch (c = *--stackp) {
- case '(':
- {
- char *loc = bufp->buffer + *--stackp;
- *loc = regnum - stackp[-1];
- BUFPUSH(stop_memory);
- BUFPUSH(stackp[-1]);
- BUFPUSH(regnum - stackp[-1]);
- stackp--;
- }
- break;
-
- case '!':
- BUFPUSH(pop_and_fail);
- /* back patch */
- STORE_NUMBER(bufp->buffer+stackp[-1], b - bufp->buffer - stackp[-1] - 2);
- stackp--;
- /* fall through */
- case '=':
- BUFPUSH(stop_nowidth);
- /* tell stack-pos place to start_nowidth */
- STORE_NUMBER(bufp->buffer+stackp[-1], b - bufp->buffer - stackp[-1] - 2);
- BUFPUSH(0); /* space to hold stack pos */
- BUFPUSH(0);
- stackp--;
- break;
-
- case '>':
- BUFPUSH(stop_backtrack);
- /* tell stack-pos place to start_nowidth */
- STORE_NUMBER(bufp->buffer+stackp[-1], b - bufp->buffer - stackp[-1] - 2);
- BUFPUSH(0); /* space to hold stack pos */
- BUFPUSH(0);
- stackp--;
- break;
-
- case ':':
- BUFPUSH(stop_paren);
- break;
-
- default:
- break;
- }
- begalt = *--stackp + bufp->buffer;
- stackp--;
- fixup_alt_jump = *stackp ? *stackp + bufp->buffer - 1 : 0;
- laststart = *--stackp + bufp->buffer;
- if (c == '!' || c == '=') laststart = b;
- break;
-
- case '|':
- /* 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, b);
- 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(fixup_alt_jump, jump_past_alt, 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 there is no previous pattern, this is an invalid pattern. */
- if (!laststart) {
- snprintf(error_msg, ERROR_MSG_MAX_SIZE,
- "invalid regular expression; there's no previous pattern, to which '{' would define cardinality at %d",
- p-pattern);
- FREE_AND_RETURN(stackb, error_msg);
- }
- if( p == pend)
- FREE_AND_RETURN(stackb, "invalid regular expression; '{' can't be last character" );
-
- beg_interval = p - 1;
-
- lower_bound = -1; /* So can see if are set. */
- upper_bound = -1;
- GET_UNSIGNED_NUMBER(lower_bound);
- if (c == ',') {
- GET_UNSIGNED_NUMBER(upper_bound);
- }
- else
- /* Interval such as `{1}' => match exactly once. */
- upper_bound = lower_bound;
-
- if (lower_bound < 0 || c != '}')
- goto unfetch_interval;
-
- if (lower_bound >= MBRE_DUP_MAX || upper_bound >= MBRE_DUP_MAX)
- FREE_AND_RETURN(stackb, "too big quantifier in {,}");
- if (upper_bound < 0) upper_bound = MBRE_DUP_MAX;
- if (lower_bound > upper_bound)
- FREE_AND_RETURN(stackb, "can't do {n,m} with n > m");
-
- beg_interval = 0;
- pending_exact = 0;
-
- greedy = 1;
- if (p != pend) {
- PATFETCH(c);
- if (c == '?') greedy = 0;
- else PATUNFETCH;
- }
-
- if (lower_bound == 0) {
- zero_times_ok = 1;
- if (upper_bound == MBRE_DUP_MAX) {
- many_times_ok = 1;
- goto repeat;
- }
- if (upper_bound == 1) {
- many_times_ok = 0;
- goto repeat;
- }
- }
- if (lower_bound == 1) {
- if (upper_bound == 1) {
- /* No need to repeat */
- break;
- }
- if (upper_bound == MBRE_DUP_MAX) {
- many_times_ok = 1;
- zero_times_ok = 0;
- goto repeat;
- }
- }
-
- /* If 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 this jump is inserted. */
-
- if (upper_bound == 0) {
- GET_BUFFER_SPACE(3);
- insert_jump(jump, laststart, b + 3, b);
- b += 3;
- break;
- }
-
- /* If lower_bound == upper_bound, repeat count can be removed */
- if (lower_bound == upper_bound) {
- int mcnt;
- int skip_stop_paren = 0;
-
- if (b[-1] == stop_paren) {
- skip_stop_paren = 1;
- b--;
- }
-
- if (*laststart == exactn && laststart[1]+2 == b - laststart
- && laststart[1]*lower_bound < 256) {
- mcnt = laststart[1];
- GET_BUFFER_SPACE((lower_bound-1)*mcnt);
- laststart[1] = lower_bound*mcnt;
- while (--lower_bound) {
- memcpy(b, laststart+2, mcnt);
- b += mcnt;
- }
- if (skip_stop_paren) BUFPUSH(stop_paren);
- break;
- }
-
- if (lower_bound < 5 && b - laststart < 10) {
- /* 5 and 10 are the magic numbers */
-
- mcnt = b - laststart;
- GET_BUFFER_SPACE((lower_bound-1)*mcnt);
- while (--lower_bound) {
- memcpy(b, laststart, mcnt);
- b += mcnt;
- }
- if (skip_stop_paren) BUFPUSH(stop_paren);
- break;
- }
- if (skip_stop_paren) b++; /* push back stop_paren */
- }
-
- /* 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> <succed_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.) */
- { /* If the upper bound is > 1, we need to insert
- more at the end of the loop. */
- unsigned int nbytes = (unsigned int)upper_bound == 1 ? 10 : 20;
-
- 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_jump_n(succeed_n, laststart, b + (nbytes/2),
- b, lower_bound);
- b += 5; /* Just increment for the succeed_n here. */
-
- /* 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_op_2(set_number_at, laststart, b, 5, lower_bound);
- 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. */
- GET_BUFFER_SPACE(5);
- store_jump_n(b, greedy?jump_n:finalize_push_n, 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_op_2(set_number_at, laststart, b, b - laststart,
- upper_bound - 1);
- b += 5;
- }
- }
- break;
-
- unfetch_interval:
- /* If an invalid interval, match the characters as literals. */
- p = beg_interval;
- beg_interval = 0;
-
- /* normal_char and normal_backslash need `c'. */
- PATFETCH(c);
- goto normal_char;
-
- case '\\':
- if (p == pend)
- FREE_AND_RETURN(stackb, "invalid regular expression; '\\' can't be last character");
- /* 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 's':
- case 'S':
- case 'd':
- case 'D':
- while (b - bufp->buffer + 9 + (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH
- > bufp->allocated)
- EXTEND_BUFFER;
-
- laststart = b;
- if (c == 's' || c == 'd') {
- BUFPUSH(charset);
- }
- else {
- BUFPUSH(charset_not);
- }
-
- BUFPUSH((1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH);
- memset(b, 0, (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH + 2);
- if (c == 's' || c == 'S') {
- SET_LIST_BIT(' ');
- SET_LIST_BIT('\t');
- SET_LIST_BIT('\n');
- SET_LIST_BIT('\r');
- SET_LIST_BIT('\f');
- }
- else {
- char cc;
-
- for (cc = '0'; cc <= '9'; cc++) {
- SET_LIST_BIT(cc);
- }
- }
-
- while ((int)b[-1] > 0 && b[b[-1] - 1] == 0)
- b[-1]--;
- if (b[-1] != (1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH)
- memmove(&b[(int)b[-1]], &b[(1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH],
- 2 + EXTRACT_UNSIGNED(&b[(1 << MBRE_BYTEWIDTH) / MBRE_BYTEWIDTH])*8);
- b += b[-1] + 2 + EXTRACT_UNSIGNED(&b[(int)b[-1]])*8;
- break;
-
- case 'w':
- laststart = b;
- BUFPUSH(wordchar);
- break;
-
- case 'W':
- laststart = b;
- BUFPUSH(notwordchar);
- break;
-
-#ifndef RUBY
- case '<':
- BUFPUSH(wordbeg);
- break;
-
- case '>':
- BUFPUSH(wordend);
- break;
-#endif
-
- case 'b':
- BUFPUSH(wordbound);
- break;
-
- case 'B':
- BUFPUSH(notwordbound);
- break;
-
- case 'A':
- BUFPUSH(begbuf);
- break;
-
- case 'Z':
- if ((bufp->options & MBRE_OPTION_SINGLELINE) == 0) {
- BUFPUSH(endbuf2);
- break;
- }
- /* fall through */
- case 'z':
- BUFPUSH(endbuf);
- break;
-
- case 'G':
- BUFPUSH(begpos);
- break;
-
- /* hex */
- case 'x':
- had_mbchar = 0;
- c = scan_hex(p, 2, &numlen);
- p += numlen;
- had_num_literal = 1;
- goto numeric_char;
-
- /* octal */
- case '0':
- had_mbchar = 0;
- c = scan_oct(p, 3, &numlen);
- p += numlen;
- had_num_literal = 1;
- goto numeric_char;
-
- /* back-ref or octal */
- case '1': case '2': case '3':
- case '4': case '5': case '6':
- case '7': case '8': case '9':
- PATUNFETCH;
- p0 = p;
-
- had_mbchar = 0;
- c1 = 0;
- GET_UNSIGNED_NUMBER(c1);
- if (!ISDIGIT(c)) PATUNFETCH;
-
- if (9 < c1 && c1 >= regnum) {
- /* need to get octal */
- c = scan_oct(p0, 3, &numlen) & 0xff;
- p = p0 + numlen;
- c1 = 0;
- had_num_literal = 1;
- goto numeric_char;
- }
-
- laststart = b;
- BUFPUSH(duplicate);
- BUFPUSH(c1);
- break;
-
- case 'M':
- case 'C':
- case 'c':
- p0 = --p;
- c = read_special(p, pend, &p0);
- if (c > 255) goto invalid_escape;
- p = p0;
- had_num_literal = 1;
- goto numeric_char;
-
- default:
- c = read_backslash(c);
- goto normal_char;
- }
- break;
-
- case '#':
- if (options & MBRE_OPTION_EXTENDED) {
- while (p != pend) {
- PATFETCH(c);
- if (c == '\n') break;
- }
- break;
- }
- goto normal_char;
-
- case ' ':
- case '\t':
- case '\f':
- case '\r':
- case '\n':
- if (options & MBRE_OPTION_EXTENDED)
- break;
-
- default:
- normal_char: /* Expects the character in `c'. */
- had_mbchar = 0;
- if (ismbchar(c)) {
- had_mbchar = 1;
- c1 = p - pattern;
- }
- numeric_char:
- nextp = p + mbclen(c) - 1;
- if (!pending_exact || pending_exact + *pending_exact + 1 != b
- || *pending_exact >= (c1 ? 0176 : 0177)
- || *nextp == '+' || *nextp == '?'
- || *nextp == '*' || *nextp == '^'
- || *nextp == '{') {
- laststart = b;
- BUFPUSH(exactn);
- pending_exact = b;
- BUFPUSH(0);
- }
- if (had_num_literal || c == 0xff) {
- BUFPUSH(0xff);
- (*pending_exact)++;
- had_num_literal = 0;
- }
- BUFPUSH(c);
- (*pending_exact)++;
- if (had_mbchar) {
- int len = mbclen(c) - 1;
- while (len--) {
- PATFETCH_RAW(c);
- BUFPUSH(c);
- (*pending_exact)++;
- }
- }
- }
- }
-
- if (fixup_alt_jump)
- store_jump(fixup_alt_jump, jump, b);
-
- if (stackp != stackb)
- FREE_AND_RETURN(stackb, "unmatched (");
-
- /* set optimize flags */
- laststart = bufp->buffer;
- if (laststart != b) {
- if (*laststart == start_memory) laststart += 3;
- if (*laststart == dummy_failure_jump) laststart += 3;
- else if (*laststart == try_next) laststart += 3;
- if (*laststart == anychar_repeat) {
- bufp->options |= MBRE_OPTIMIZE_ANCHOR;
- }
- else if (*laststart == on_failure_jump) {
- int mcnt;
-
- laststart++;
- EXTRACT_NUMBER_AND_INCR(mcnt, laststart);
- if (*laststart == charset || *laststart == charset_not) {
- p0 = laststart;
- mcnt = *++p0;
- p0 += mcnt+1;
- mcnt = EXTRACT_UNSIGNED_AND_INCR(p0);
- p0 += 8*mcnt;
- if (*p0 == maybe_finalize_jump) {
- bufp->stclass = laststart;
- }
- }
- }
- }
-
- bufp->used = b - bufp->buffer;
- bufp->re_nsub = regnum;
- laststart = bufp->buffer;
- if (laststart != b) {
- if (*laststart == start_memory) laststart += 3;
- if (*laststart == exactn) {
- bufp->options |= MBRE_OPTIMIZE_EXACTN;
- bufp->must = laststart+1;
- }
- }
- if (!bufp->must) {
- bufp->must = calculate_must_string(bufp->buffer, b);
- }
- if (current_mbctype == MBCTYPE_SJIS) bufp->options |= MBRE_OPTIMIZE_NO_BM;
- else if (bufp->must) {
- int i;
- int len = (unsigned char)bufp->must[0];
-
- for (i=1; i<len; i++) {
- if ((unsigned char)bufp->must[i] == 0xff ||
- (current_mbctype && ismbchar(bufp->must[i]))) {
- bufp->options |= MBRE_OPTIMIZE_NO_BM;
- break;
- }
- }
- if (!(bufp->options & MBRE_OPTIMIZE_NO_BM)) {
- bufp->must_skip = (int *) xmalloc((1 << MBRE_BYTEWIDTH)*sizeof(int));
- bm_init_skip(bufp->must_skip, (unsigned char*)bufp->must+1,
- (unsigned char)bufp->must[0],
- (unsigned char*)(MAY_TRANSLATE()?translate:0));
- }
- }
-
- bufp->regstart = TMALLOC(regnum, unsigned char*);
- bufp->regend = TMALLOC(regnum, unsigned char*);
- bufp->old_regstart = TMALLOC(regnum, unsigned char*);
- bufp->old_regend = TMALLOC(regnum, unsigned char*);
- bufp->reg_info = TMALLOC(regnum, mbre_register_info_type);
- bufp->best_regstart = TMALLOC(regnum, unsigned char*);
- bufp->best_regend = TMALLOC(regnum, unsigned char*);
- FREE_AND_RETURN(stackb, 0);
-
- invalid_pattern:
- FREE_AND_RETURN(stackb, "invalid regular expression");
-
- end_of_pattern:
- FREE_AND_RETURN(stackb, "premature end of regular expression");
-
- too_big:
- FREE_AND_RETURN(stackb, "regular expression too big");
-
- memory_exhausted:
- FREE_AND_RETURN(stackb, "memory exhausted");
-
- nested_meta:
- FREE_AND_RETURN(stackb, "nested *?+ in regexp");
-
- invalid_escape:
- FREE_AND_RETURN(stackb, "Invalid escape character syntax");
-}
-
-void
-re_free_pattern(bufp)
- struct mbre_pattern_buffer *bufp;
-{
- if(bufp){
- if (bufp->buffer) xfree(bufp->buffer);
- if (bufp->fastmap) xfree(bufp->fastmap);
- if (bufp->must_skip) xfree(bufp->must_skip);
-
- if (bufp->regstart) xfree(bufp->regstart);
- if (bufp->regend) xfree(bufp->regend);
- if (bufp->old_regstart) xfree(bufp->old_regstart);
- if (bufp->old_regend) xfree(bufp->old_regend);
- if (bufp->best_regstart) xfree(bufp->best_regstart);
- if (bufp->best_regend) xfree(bufp->best_regend);
- if (bufp->reg_info) xfree(bufp->reg_info);
- }
-}
-
-/* Store a jump of the form <OPCODE> <relative address>.
- Store in the location FROM a jump operation to jump to relative
- address FROM - TO. OPCODE is the opcode to store. */
-
-static void
-store_jump(from, opcode, to)
- char *from, *to;
- int opcode;
-{
- from[0] = (char)opcode;
- STORE_NUMBER(from + 1, to - (from + 3));
-}
-
-
-/* Open up space before char FROM, and insert there a jump to TO.
- CURRENT_END gives the end of the storage not in use, so we know
- how much data to copy up. OP is the opcode of the jump to insert.
-
- If you call this function, you must zero out pending_exact. */
-
-static void
-insert_jump(op, from, to, current_end)
- int op;
- char *from, *to, *current_end;
-{
- register char *pfrom = current_end; /* Copy from here... */
- register char *pto = current_end + 3; /* ...to here. */
-
- while (pfrom != from)
- *--pto = *--pfrom;
- store_jump(from, op, to);
-}
-
-
-/* Store a jump of the form <opcode> <relative address> <n> .
-
- Store in the location FROM a jump operation to jump to relative
- address FROM - TO. OPCODE is the opcode to store, N is a number the
- jump uses, say, to decide how many times to jump.
-
- If you call this function, you must zero out pending_exact. */
-
-static void
-store_jump_n(from, opcode, to, n)
- char *from, *to;
- int opcode;
- unsigned n;
-{
- from[0] = (char)opcode;
- STORE_NUMBER(from + 1, to - (from + 3));
- STORE_NUMBER(from + 3, n);
-}
-
-
-/* Similar to insert_jump, but handles a jump which needs an extra
- number to handle minimum and maximum cases. Open up space at
- location FROM, and insert there a jump to TO. CURRENT_END gives the
- end of the storage in use, so we know how much data to copy up. OP is
- the opcode of the jump to insert.
-
- If you call this function, you must zero out pending_exact. */
-
-static void
-insert_jump_n(op, from, to, current_end, n)
- int op;
- char *from, *to, *current_end;
- unsigned n;
-{
- register char *pfrom = current_end; /* Copy from here... */
- register char *pto = current_end + 5; /* ...to here. */
-
- while (pfrom != from)
- *--pto = *--pfrom;
- store_jump_n(from, op, to, n);
-}
-
-
-/* Open up space at location THERE, and insert operation OP.
- CURRENT_END gives the end of the storage in use, so
- we know how much data to copy up.
-
- If you call this function, you must zero out pending_exact. */
-
-#if 0
-static void
-insert_op(op, there, current_end)
- int op;
- char *there, *current_end;
-{
- register char *pfrom = current_end; /* Copy from here... */
- register char *pto = current_end + 1; /* ...to here. */
-
- while (pfrom != there)
- *--pto = *--pfrom;
-
- there[0] = (char)op;
-}
-#endif
-
-/* Open up space at location THERE, and insert operation OP followed by
- NUM_1 and NUM_2. CURRENT_END gives the end of the storage in use, so
- we know how much data to copy up.
-
- If you call this function, you must zero out pending_exact. */
-
-static void
-insert_op_2(op, there, current_end, num_1, num_2)
- int op;
- char *there, *current_end;
- int num_1, num_2;
-{
- register char *pfrom = current_end; /* Copy from here... */
- register char *pto = current_end + 5; /* ...to here. */
-
- while (pfrom != there)
- *--pto = *--pfrom;
-
- there[0] = (char)op;
- STORE_NUMBER(there + 1, num_1);
- STORE_NUMBER(there + 3, num_2);
-}
-
-
-#define trans_eq(c1, c2, translate) (translate?(translate[c1]==translate[c2]):((c1)==(c2)))
-static int
-slow_match(little, lend, big, bend, translate)
- unsigned char *little, *lend;
- unsigned char *big, *bend;
- unsigned char *translate;
-{
- int c;
-
- while (little < lend && big < bend) {
- c = *little++;
- if (c == 0xff)
- c = *little++;
- if (!trans_eq(*big++, c, translate)) break;
- }
- if (little == lend) return 1;
- return 0;
-}
-
-static int
-slow_search(little, llen, big, blen, translate, re_mbctab)
- unsigned char *little;
- int llen;
- unsigned char *big;
- int blen;
- char *translate;
- const unsigned char *re_mbctab;
-{
- unsigned char *bsave = big;
- unsigned char *bend = big + blen;
- register int c;
- int fescape = 0;
-
- c = *little;
- if (c == 0xff) {
- c = little[1];
- fescape = 1;
- }
- else if (translate && !ismbchar(c)) {
- c = translate[c];
- }
-
- while (big < bend) {
- /* look for first character */
- if (fescape) {
- while (big < bend) {
- if (*big == c) break;
- big++;
- }
- }
- else if (translate && !ismbchar(c)) {
- while (big < bend) {
- if (ismbchar(*big)) big+=mbclen(*big)-1;
- else if (translate[*big] == c) break;
- big++;
- }
- }
- else {
- while (big < bend) {
- if (*big == c) break;
- if (ismbchar(*big)) big+=mbclen(*big)-1;
- big++;
- }
- }
-
- if (slow_match(little, little+llen, big, bend, translate))
- return big - bsave;
-
- big+=mbclen(*big);
- }
- return -1;
-}
-
-static void
-bm_init_skip(skip, pat, m, translate)
- int *skip;
- unsigned char *pat;
- int m;
- const unsigned char *translate;
-{
- int j, c;
-
- for (c=0; c<256; c++) {
- skip[c] = m;
- }
- if (translate) {
- for (j=0; j<m-1; j++) {
- skip[translate[pat[j]]] = m-1-j;
- }
- }
- else {
- for (j=0; j<m-1; j++) {
- skip[pat[j]] = m-1-j;
- }
- }
-}
-
-static int
-bm_search(little, llen, big, blen, skip, translate)
- unsigned char *little;
- int llen;
- unsigned char *big;
- int blen;
- int *skip;
- unsigned char *translate;
-{
- int i, j, k;
-
- i = llen-1;
- if (translate) {
- while (i < blen) {
- k = i;
- j = llen-1;
- while (j >= 0 && translate[big[k]] == translate[little[j]]) {
- k--;
- j--;
- }
- if (j < 0) return k+1;
-
- i += skip[translate[big[i]]];
- }
- return -1;
- }
- while (i < blen) {
- k = i;
- j = llen-1;
- while (j >= 0 && big[k] == little[j]) {
- k--;
- j--;
- }
- if (j < 0) return k+1;
-
- i += skip[big[i]];
- }
- return -1;
-}
-
-/* Given a pattern, compute a fastmap from it. The fastmap records
- which of the (1 << MBRE_BYTEWIDTH) possible characters can start a string
- that matches the pattern. This fastmap is used by re_search to skip
- quickly over totally implausible text.
-
- The caller must supply the address of a (1 << MBRE_BYTEWIDTH)-byte data
- area as bufp->fastmap.
- The other components of bufp describe the pattern to be used. */
-void
-re_compile_fastmap(bufp)
- struct mbre_pattern_buffer *bufp;
-{
- unsigned char *pattern = (unsigned char*)bufp->buffer;
- int size = bufp->used;
- register char *fastmap = bufp->fastmap;
- register unsigned char *p = pattern;
- register unsigned char *pend = pattern + size;
- register int j, k;
- unsigned is_a_succeed_n;
-
-
- unsigned char *stacka[NFAILURES];
- unsigned char **stackb = stacka;
- unsigned char **stackp = stackb;
- unsigned char **stacke = stackb + NFAILURES;
- int options = bufp->options;
-
- int current_mbctype = bufp->mbctype;
- const unsigned char *re_mbctab = re_mbctab_get(current_mbctype);
-
- memset(fastmap, 0, (1 << MBRE_BYTEWIDTH));
- bufp->fastmap_accurate = 1;
- bufp->can_be_null = 0;
-
- while (p) {
- is_a_succeed_n = 0;
- if (p == pend) {
- bufp->can_be_null = 1;
- break;
- }
-#ifdef SWITCH_ENUM_BUG
- switch ((int)((enum regexpcode)*p++))
-#else
- switch ((enum regexpcode)*p++)
-#endif
- {
- case exactn:
- if (p[1] == 0xff) {
- if (TRANSLATE_P())
- fastmap[translate[p[2]]] = 2;
- else
- fastmap[p[2]] = 2;
- bufp->options |= MBRE_OPTIMIZE_BMATCH;
- }
- else if (TRANSLATE_P())
- fastmap[translate[p[1]]] = 1;
- else
- fastmap[p[1]] = 1;
- break;
-
- case begline:
- case begbuf:
- case endbuf:
- case endbuf2:
- case wordbound:
- case notwordbound:
- case wordbeg:
- case wordend:
- case pop_and_fail:
- case push_dummy_failure:
- case start_paren:
- case stop_paren:
- continue;
-
- case casefold_on:
- bufp->options |= MBRE_MAY_IGNORECASE;
- case casefold_off:
- options ^= MBRE_OPTION_IGNORECASE;
- continue;
-
- case option_set:
- options = *p++;
- continue;
-
- case endline:
- if (TRANSLATE_P())
- fastmap[translate['\n']] = 1;
- else
- fastmap['\n'] = 1;
- if ((options & MBRE_OPTION_SINGLELINE) == 0 && bufp->can_be_null == 0)
- bufp->can_be_null = 2;
- break;
-
- case jump_n:
- case finalize_jump:
- case maybe_finalize_jump:
- case jump:
- case jump_past_alt:
- case dummy_failure_jump:
- case finalize_push:
- case finalize_push_n:
- EXTRACT_NUMBER_AND_INCR(j, p);
- p += j;
- if (j > 0)
- continue;
- /* Jump backward reached implies we just went through
- the body of a loop and matched nothing.
- Opcode jumped to should be an on_failure_jump.
- Just treat it like an ordinary jump.
- For a * loop, it has pushed its failure point already;
- If so, discard that as redundant. */
-
- if ((enum regexpcode)*p != on_failure_jump
- && (enum regexpcode)*p != try_next
- && (enum regexpcode)*p != succeed_n)
- continue;
- p++;
- EXTRACT_NUMBER_AND_INCR(j, p);
- p += j;
- if (stackp != stackb && *stackp == p)
- stackp--; /* pop */
- continue;
-
- case try_next:
- case start_nowidth:
- case stop_nowidth:
- case stop_backtrack:
- p += 2;
- continue;
-
- case succeed_n:
- is_a_succeed_n = 1;
- /* Get to the number of times to succeed. */
- EXTRACT_NUMBER(k, p + 2);
- /* Increment p past the n for when k != 0. */
- if (k != 0) {
- p += 4;
- continue;
- }
- /* fall through */
-
- case on_failure_jump:
- EXTRACT_NUMBER_AND_INCR(j, p);
- if (p + j < pend) {
- if (stackp == stacke) {
- EXPAND_FAIL_STACK();
- }
- *++stackp = p + j; /* push */
- }
- else {
- bufp->can_be_null = 1;
- }
- if (is_a_succeed_n)
- EXTRACT_NUMBER_AND_INCR(k, p); /* Skip the n. */
- continue;
-
- case set_number_at:
- p += 4;
- continue;
-
- case start_memory:
- case stop_memory:
- p += 2;
- continue;
-
- case duplicate:
- bufp->can_be_null = 1;
- fastmap['\n'] = 1;
- case anychar_repeat:
- case anychar:
- for (j = 0; j < (1 << MBRE_BYTEWIDTH); j++) {
- if (j != '\n' || (options & MBRE_OPTION_MULTILINE))
- fastmap[j] = 1;
- }
- if (bufp->can_be_null) {
- FREE_AND_RETURN_VOID(stackb);
- }
- /* Don't return; check the alternative paths
- so we can set can_be_null if appropriate. */
- if ((enum regexpcode)p[-1] == anychar_repeat) {
- continue;
- }
- break;
-
- case wordchar:
- for (j = 0; j < 0x80; j++) {
- if (SYNTAX(j) == Sword)
- fastmap[j] = 1;
- }
- switch (current_mbctype) {
- case MBCTYPE_ASCII:
- for (j = 0x80; j < (1 << MBRE_BYTEWIDTH); j++) {
- if (SYNTAX(j) == Sword2)
- fastmap[j] = 1;
- }
- break;
- case MBCTYPE_EUC:
- case MBCTYPE_SJIS:
- case MBCTYPE_UTF8:
- for (j = 0x80; j < (1 << MBRE_BYTEWIDTH); j++) {
- if (re_mbctab[j])
- fastmap[j] = 1;
- }
- break;
- }
- break;
-
- case notwordchar:
- for (j = 0; j < 0x80; j++)
- if (SYNTAX(j) != Sword)
- fastmap[j] = 1;
- switch (current_mbctype) {
- case MBCTYPE_ASCII:
- for (j = 0x80; j < (1 << MBRE_BYTEWIDTH); j++) {
- if (SYNTAX(j) != Sword2)
- fastmap[j] = 1;
- }
- break;
- case MBCTYPE_EUC:
- case MBCTYPE_SJIS:
- case MBCTYPE_UTF8:
- for (j = 0x80; j < (1 << MBRE_BYTEWIDTH); j++) {
- if (!re_mbctab[j])
- fastmap[j] = 1;
- }
- break;
- }
- break;
-
- case charset:
- /* NOTE: Charset for single-byte chars never contain
- multi-byte char. See set_list_bits(). */
- for (j = *p++ * MBRE_BYTEWIDTH - 1; j >= 0; j--)
- if (p[j / MBRE_BYTEWIDTH] & (1 << (j % MBRE_BYTEWIDTH))) {
- int tmp = TRANSLATE_P()?translate[j]:j;
- fastmap[tmp] = 1;
- }
- {
- unsigned short size;
- unsigned long c, beg, end;
-
- p += p[-1] + 2;
- size = EXTRACT_UNSIGNED(&p[-2]);
- for (j = 0; j < (int)size; j++) {
- c = EXTRACT_MBC(&p[j*8]);
- beg = WC2MBC1ST(c);
- c = EXTRACT_MBC(&p[j*8+4]);
- end = WC2MBC1ST(c);
- /* set bits for 1st bytes of multi-byte chars. */
- while (beg <= end) {
- /* NOTE: Charset for multi-byte chars might contain
- single-byte chars. We must reject them. */
- if (c < 0x100) {
- fastmap[beg] = 2;
- bufp->options |= MBRE_OPTIMIZE_BMATCH;
- }
- else if (ismbchar(beg))
- fastmap[beg] = 1;
- beg++;
- }
- }
- }
- break;
-
- case charset_not:
- /* S: set of all single-byte chars.
- M: set of all first bytes that can start multi-byte chars.
- s: any set of single-byte chars.
- m: any set of first bytes that can start multi-byte chars.
-
- We assume S+M = U.
- ___ _ _
- s+m = (S*s+M*m). */
- /* Chars beyond end of map must be allowed */
- /* NOTE: Charset_not for single-byte chars might contain
- multi-byte chars. See set_list_bits(). */
- for (j = *p * MBRE_BYTEWIDTH; j < (1 << MBRE_BYTEWIDTH); j++)
- if (!ismbchar(j))
- fastmap[j] = 1;
-
- for (j = *p++ * MBRE_BYTEWIDTH - 1; j >= 0; j--)
- if (!(p[j / MBRE_BYTEWIDTH] & (1 << (j % MBRE_BYTEWIDTH)))) {
- if (!ismbchar(j))
- fastmap[j] = 1;
- }
- {
- unsigned short size;
- unsigned long c, beg;
- int num_literal = 0;
-
- p += p[-1] + 2;
- size = EXTRACT_UNSIGNED(&p[-2]);
- if (size == 0) {
- for (j = 0x80; j < (1 << MBRE_BYTEWIDTH); j++)
- if (ismbchar(j))
- fastmap[j] = 1;
- break;
- }
- for (j = 0,c = 0;j < (int)size; j++) {
- unsigned int cc = EXTRACT_MBC(&p[j*8]);
- beg = WC2MBC1ST(cc);
- while (c <= beg) {
- if (ismbchar(c))
- fastmap[c] = 1;
- c++;
- }
-
- cc = EXTRACT_MBC(&p[j*8+4]);
- if (cc < 0xff) {
- num_literal = 1;
- while (c <= cc) {
- if (ismbchar(c))
- fastmap[c] = 1;
- c++;
- }
- }
- c = WC2MBC1ST(cc);
- }
-
- for (j = c; j < (1 << MBRE_BYTEWIDTH); j++) {
- if (num_literal)
- fastmap[j] = 1;
- if (ismbchar(j))
- fastmap[j] = 1;
- }
- }
- break;
-
- case begpos:
- case unused: /* pacify gcc -Wall */
- break;
- case fail:
- break;
- }
-
- /* Get here means we have successfully found the possible starting
- characters of one path of the pattern. We need not follow this
- path any farther. Instead, look at the next alternative
- remembered in the stack. */
- if (stackp != stackb)
- p = *stackp--; /* pop */
- else
- break;
- }
- FREE_AND_RETURN_VOID(stackb);
-}
-
-/* adjust startpos value to the position between characters. */
-int
-re_adjust_startpos(bufp, string, size, startpos, range)
- struct mbre_pattern_buffer *bufp;
- const char *string;
- int size, startpos, range;
-{
- int current_mbctype = bufp->mbctype;
- const unsigned char *re_mbctab = re_mbctab_get(current_mbctype);
-
- /* Update the fastmap now if not correct already. */
- if (!bufp->fastmap_accurate) {
- re_compile_fastmap(bufp);
- }
-
- /* Adjust startpos for mbc string */
- if (current_mbctype && startpos>0 && !(bufp->options&MBRE_OPTIMIZE_BMATCH)) {
- int i = 0;
-
- if (range > 0) {
- while (i<size) {
- i += mbclen(string[i]);
- if (startpos <= i) {
- startpos = i;
- break;
- }
- }
- }
- else {
- int w;
-
- while (i<size) {
- w = mbclen(string[i]);
- if (startpos < i + w) {
- startpos = i;
- break;
- }
- i += w;
- }
- }
- }
- return startpos;
-}
-
-
-/* Using the compiled pattern in BUFP->buffer, first tries to match
- STRING, starting first at index STARTPOS, then at STARTPOS + 1, and
- so on. RANGE is the number of places to try before giving up. If
- RANGE is negative, it searches backwards, i.e., the starting
- positions tried are STARTPOS, STARTPOS - 1, etc. STRING is of SIZE.
- In REGS, return the indices of STRING that matched the entire
- BUFP->buffer and its contained subexpressions.
-
- The value returned is the position in the strings at which the match
- was found, or -1 if no match was found, or -2 if error (such as
- failure stack overflow). */
-
-int
-re_search(bufp, string, size, startpos, range, regs)
- struct mbre_pattern_buffer *bufp;
- const char *string;
- int size, startpos, range;
- struct mbre_registers *regs;
-{
- register char *fastmap = bufp->fastmap;
- int val, anchor = 0;
-
- int current_mbctype = bufp->mbctype;
- const unsigned char *re_mbctab = re_mbctab_get(current_mbctype);
-
- /* Check for out-of-range starting position. */
- if (startpos < 0 || startpos > size)
- return -1;
-
- /* Update the fastmap now if not correct already. */
- if (fastmap && !bufp->fastmap_accurate) {
- re_compile_fastmap(bufp);
- }
-
-
- /* 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) {
- switch ((enum regexpcode)bufp->buffer[0]) {
- case begbuf:
- begbuf_match:
- if (range > 0) {
- if (startpos > 0) return -1;
- else {
- val = re_match(bufp, string, size, 0, regs);
- if (val >= 0) return 0;
- return val;
- }
- }
- break;
-
- case begline:
- anchor = 1;
- break;
-
- case begpos:
- val = re_match(bufp, string, size, startpos, regs);
- if (val >= 0) return startpos;
- return val;
-
- default:
- break;
- }
- }
- if (bufp->options & MBRE_OPTIMIZE_ANCHOR) {
- if (bufp->options&MBRE_OPTION_SINGLELINE) {
- goto begbuf_match;
- }
- anchor = 1;
- }
-
- if (bufp->must) {
- int len = ((unsigned char*)bufp->must)[0];
- int pos, pbeg, pend;
-
- pbeg = startpos;
- pend = startpos + range;
- if (pbeg > pend) { /* swap pbeg,pend */
- pos = pend; pend = pbeg; pbeg = pos;
- }
- pend = size;
- if (bufp->options & MBRE_OPTIMIZE_NO_BM) {
- pos = slow_search(bufp->must+1, len,
- string+pbeg, pend-pbeg,
- MAY_TRANSLATE()?translate:0, re_mbctab);
- }
- else {
- pos = bm_search(bufp->must+1, len,
- string+pbeg, pend-pbeg,
- bufp->must_skip,
- MAY_TRANSLATE()?translate:0);
- }
- if (pos == -1) return -1;
- if (range > 0 && (bufp->options & MBRE_OPTIMIZE_EXACTN)) {
- startpos += pos;
- range -= pos;
- if (range < 0) return -1;
- }
- }
-
- for (;;) {
- /* If a fastmap is supplied, skip quickly over characters that
- cannot possibly be the start of a match. Note, however, that
- if the pattern can possibly match the null string, we must
- test it at each starting point so that we take the first null
- string we get. */
-
- if (fastmap && startpos < size
- && bufp->can_be_null != 1 && !(anchor && startpos == 0)) {
- if (range > 0) { /* Searching forwards. */
- register unsigned char *p, c;
- int irange = range;
-
- p = (unsigned char*)string+startpos;
-
- while (range > 0) {
- c = *p++;
- if (ismbchar(c)) {
- int len;
-
- if (fastmap[c])
- break;
- len = mbclen(c) - 1;
- while (len--) {
- c = *p++;
- range--;
- if (fastmap[c] == 2)
- goto startpos_adjust;
- }
- }
- else {
- if (fastmap[MAY_TRANSLATE() ? translate[c] : c])
- break;
- }
- range--;
- }
- startpos_adjust:
- startpos += irange - range;
- }
- else { /* Searching backwards. */
- register unsigned char c;
-
- c = string[startpos];
- c &= 0xff;
- if (MAY_TRANSLATE() ? !fastmap[translate[c]] : !fastmap[c])
- goto advance;
- }
- }
-
- if (startpos > size) return -1;
- if ((anchor || !bufp->can_be_null) && range > 0 && size > 0 && startpos == size)
- return -1;
- val = re_match(bufp, string, size, startpos, regs);
- if (val >= 0) return startpos;
- if (val == -2) return -2;
-
-#ifndef NO_ALLOCA
-#ifdef C_ALLOCA
- alloca(0);
-#endif /* C_ALLOCA */
-#endif /* NO_ALLOCA */
-
- if (range > 0) {
- if (anchor && startpos < size &&
- (startpos < 1 || string[startpos-1] != '\n')) {
- while (range > 0 && string[startpos] != '\n') {
- range--;
- startpos++;
- }
- }
- else if (fastmap && (bufp->stclass)) {
- register unsigned char *p;
- unsigned long c;
- int irange = range;
-
- p = (unsigned char*)string+startpos;
- while (range > 0) {
- c = *p++;
- if (ismbchar(c) && fastmap[c] != 2) {
- MBC2WC(c, p);
- }
- else if (MAY_TRANSLATE())
- c = translate[c];
- if (*bufp->stclass == charset) {
- if (!is_in_list(c, bufp->stclass+1)) break;
- }
- else {
- if (is_in_list(c, bufp->stclass+1)) break;
- }
- range--;
- if (c > 256) range--;
- }
- startpos += irange - range;
- }
- }
-
- advance:
- if (!range)
- break;
- else if (range > 0) {
- const char *d = string + startpos;
-
- if (ismbchar(*d)) {
- int len = mbclen(*d) - 1;
- range-=len, startpos+=len;
- if (!range)
- break;
- }
- range--, startpos++;
- }
- else {
- range++, startpos--;
- {
- const char *s, *d, *p;
-
- s = string; d = string + startpos;
- for (p = d; p-- > s && ismbchar(*p); )
- /* --p >= s would not work on 80[12]?86.
- (when the offset of s equals 0 other than huge model.) */
- ;
- if (!((d - p) & 1)) {
- if (!range)
- break;
- range++, startpos--;
- }
- }
- }
- }
- return -1;
-}
-
-
-
-
-/* The following are used for re_match, defined below: */
-
-/* Accessing macros used in re_match: */
-
-#define IS_ACTIVE(R) ((R).bits.is_active)
-#define MATCHED_SOMETHING(R) ((R).bits.matched_something)
-
-
-/* Macros used by re_match: */
-
-/* I.e., regstart, regend, and reg_info. */
-#define NUM_REG_ITEMS 3
-
-/* I.e., ptr and count. */
-#define NUM_COUNT_ITEMS 2
-
-/* Individual items aside from the registers. */
-#define NUM_NONREG_ITEMS 4
-
-/* We push at most this many things on the stack whenever we
- fail. The `+ 2' refers to PATTERN_PLACE and STRING_PLACE, which are
- arguments to the PUSH_FAILURE_POINT macro. */
-#define MAX_NUM_FAILURE_ITEMS (num_regs * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
-
-/* We push this many things on the stack whenever we fail. */
-#define NUM_FAILURE_ITEMS (last_used_reg * NUM_REG_ITEMS + NUM_NONREG_ITEMS + 1)
-
-/* This pushes counter information for succeed_n and jump_n */
-#define PUSH_FAILURE_COUNT(ptr) \
- do { \
- int c; \
- EXTRACT_NUMBER(c, ptr); \
- ENSURE_FAIL_STACK(NUM_COUNT_ITEMS); \
- *stackp++ = (unsigned char*)(long)c; \
- *stackp++ = (ptr); \
- num_failure_counts++; \
- } while (0)
-
-/* This pushes most of the information about the current state we will want
- if we ever fail back to it. */
-
-#define PUSH_FAILURE_POINT(pattern_place, string_place) \
- do { \
- long last_used_reg, this_reg; \
- \
- /* Find out how many registers are active or have been matched. \
- (Aside from register zero, which is only set at the end.) */ \
- for (last_used_reg = num_regs-1; last_used_reg > 0; last_used_reg--)\
- if (!REG_UNSET(regstart[last_used_reg])) \
- break; \
- \
- ENSURE_FAIL_STACK(NUM_FAILURE_ITEMS); \
- *stackp++ = (unsigned char*)(long)num_failure_counts; \
- num_failure_counts = 0; \
- \
- /* Now push the info for each of those registers. */ \
- for (this_reg = 1; this_reg <= last_used_reg; this_reg++) { \
- *stackp++ = regstart[this_reg]; \
- *stackp++ = regend[this_reg]; \
- *stackp++ = reg_info[this_reg].word; \
- } \
- \
- /* Push how many registers we saved. */ \
- *stackp++ = (unsigned char*)last_used_reg; \
- \
- *stackp++ = pattern_place; \
- *stackp++ = string_place; \
- *stackp++ = (unsigned char*)options; /* current option status */ \
- *stackp++ = (unsigned char*)0; /* non-greedy flag */ \
- } while(0)
-
-#define NON_GREEDY ((unsigned char*)1)
-
-#define POP_FAILURE_COUNT() \
- do { \
- unsigned char *ptr = *--stackp; \
- int count = (long)*--stackp; \
- STORE_NUMBER(ptr, count); \
- } while (0)
-
-/* This pops what PUSH_FAILURE_POINT pushes. */
-
-#define POP_FAILURE_POINT() \
- do { \
- long temp; \
- stackp -= NUM_NONREG_ITEMS; /* Remove failure points (and flag). */ \
- temp = (long)*--stackp; /* How many regs pushed. */ \
- temp *= NUM_REG_ITEMS; /* How much to take off the stack. */ \
- stackp -= temp; /* Remove the register info. */ \
- temp = (long)*--stackp; /* How many counters pushed. */ \
- while (temp--) { \
- POP_FAILURE_COUNT(); /* Remove the counter info. */ \
- } \
- num_failure_counts = 0; /* Reset num_failure_counts. */ \
- } while(0)
-
- /* Registers are set to a sentinel when they haven't yet matched. */
-#define REG_UNSET_VALUE ((unsigned char*)-1)
-#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
-
-#define PREFETCH if (d == dend) goto fail
-
- /* Call this when have matched something; it sets `matched' flags for the
- registers corresponding to the subexpressions of which we currently
- are inside. */
-#define SET_REGS_MATCHED \
- do { unsigned this_reg; \
- for (this_reg = 0; this_reg < num_regs; this_reg++) { \
- if (IS_ACTIVE(reg_info[this_reg])) \
- MATCHED_SOMETHING(reg_info[this_reg]) = 1; \
- else \
- MATCHED_SOMETHING(reg_info[this_reg]) = 0; \
- } \
- } while(0)
-
-#define AT_STRINGS_BEG(d) ((d) == string)
-#define AT_STRINGS_END(d) ((d) == dend)
-
-#define IS_A_LETTER(d) (SYNTAX(*(d)) == Sword || \
- (current_mbctype ? \
- (re_mbctab[*(d)] && ((d)+mbclen(*(d)))<=dend): \
- SYNTAX(*(d)) == Sword2))
-
-#define PREV_IS_A_LETTER(d) ((current_mbctype == MBCTYPE_SJIS)? \
- IS_A_LETTER((d)-(!AT_STRINGS_BEG((d)-1)&& \
- ismbchar((d)[-2])?2:1)): \
- ((current_mbctype && ((d)[-1] >= 0x80)) || \
- IS_A_LETTER((d)-1)))
-
-static void
-init_regs(regs, num_regs)
- struct mbre_registers *regs;
- unsigned int num_regs;
-{
- int i;
-
- regs->num_regs = num_regs;
- if (num_regs < MBRE_NREGS)
- num_regs = MBRE_NREGS;
-
- if (regs->allocated == 0) {
- regs->beg = TMALLOC(num_regs, int);
- regs->end = TMALLOC(num_regs, int);
- regs->allocated = num_regs;
- }
- else if (regs->allocated < (int)num_regs) {
- TREALLOC(regs->beg, num_regs, int);
- TREALLOC(regs->end, num_regs, int);
- regs->allocated = num_regs;
- }
- for (i=0; i<(int)num_regs; i++) {
- regs->beg[i] = regs->end[i] = -1;
- }
-}
-
-/* Match the pattern described by BUFP against STRING, which is of
- SIZE. Start the match at index POS in STRING. In REGS, return the
- indices of STRING that matched the entire BUFP->buffer and its
- contained subexpressions.
-
- If bufp->fastmap is nonzero, then it had better be up to date.
-
- The reason that the data to match are specified as two components
- which are to be regarded as concatenated is so this function can be
- used directly on the contents of an Emacs buffer.
-
- -1 is returned if there is no match. -2 is returned if there is an
- error (such as match stack overflow). Otherwise the value is the
- length of the substring which was matched. */
-
-int
-re_match(bufp, string_arg, size, pos, regs)
- struct mbre_pattern_buffer *bufp;
- const char *string_arg;
- int size, pos;
- struct mbre_registers *regs;
-{
- register unsigned char *p = (unsigned char*)bufp->buffer;
- unsigned char *p1;
-
- /* Pointer to beyond end of buffer. */
- register unsigned char *pend = p + bufp->used;
-
- unsigned num_regs = bufp->re_nsub;
-
- unsigned char *string = (unsigned char*)string_arg;
-
- register unsigned char *d, *dend;
- register int mcnt; /* Multipurpose. */
- int options = bufp->options;
-
- /* 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. */
-
- unsigned char **stacka;
- unsigned char **stackb;
- unsigned char **stackp;
- unsigned char **stacke;
-
- /* 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.) */
-
- unsigned char **regstart = bufp->regstart;
- unsigned char **regend = bufp->regend;
-
- /* 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. */
- unsigned char **old_regstart = bufp->old_regstart;
- unsigned char **old_regend = bufp->old_regend;
-
- /* 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. */
-
- mbre_register_info_type *reg_info = bufp->reg_info;
-
- /* 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 = 0;
- unsigned char **best_regstart = bufp->best_regstart;
- unsigned char **best_regend = bufp->best_regend;
-
- int num_failure_counts = 0;
-
- int current_mbctype = bufp->mbctype;
- const unsigned char *re_mbctab = re_mbctab_get(current_mbctype);
-
- if (regs) {
- init_regs(regs, num_regs);
- }
-
- /* Initialize the stack. */
- stacka = RE_TALLOC(MAX_NUM_FAILURE_ITEMS * NFAILURES, unsigned char*);
- stackb = stacka;
- stackp = stackb;
- stacke = &stackb[MAX_NUM_FAILURE_ITEMS * NFAILURES];
-
-#ifdef DEBUG_REGEX
- fprintf(stderr, "Entering re_match(%s)\n", string_arg);
-#endif
-
- /* Initialize subexpression text positions to -1 to mark ones that no
- ( or ( and ) or ) has been seen for. Also set all registers to
- inactive and mark them as not having matched anything or ever
- failed. */
- for (mcnt = 0; mcnt < (int)num_regs; mcnt++) {
- regstart[mcnt] = regend[mcnt]
- = old_regstart[mcnt] = old_regend[mcnt]
- = best_regstart[mcnt] = best_regend[mcnt] = REG_UNSET_VALUE;
-#ifdef __CHECKER__
- reg_info[mcnt].word = 0;
-#endif
- IS_ACTIVE (reg_info[mcnt]) = 0;
- MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- }
-
- /* Set up pointers to ends of strings.
- Don't allow the second string to be empty unless both are empty. */
-
-
- /* `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. */
-
- d = string + pos, dend = string + size;
-
- /* This loops over pattern commands. It exits by returning from the
- function if match is complete, or it drops through if match fails
- at this starting point in the input data. */
-
- for (;;) {
-#ifdef DEBUG_REGEX
- fprintf(stderr,
- "regex loop(%d): matching 0x%02d\n",
- p - (unsigned char*)bufp->buffer,
- *p);
-#endif
- /* End of pattern means we might have succeeded. */
- if (p == pend) {
- /* If not end of string, try backtracking. Otherwise done. */
- if ((bufp->options & MBRE_OPTION_LONGEST) && d != dend) {
- if (best_regs_set) /* non-greedy, no need to backtrack */
- goto restore_best_regs;
- while (stackp != stackb && stackp[-1] == NON_GREEDY) {
- if (best_regs_set) /* non-greedy, no need to backtrack */
- goto restore_best_regs;
- POP_FAILURE_POINT();
- }
- if (stackp != stackb) {
- /* More failure points to try. */
-
- /* If exceeds best match so far, save it. */
- if (! best_regs_set || (d > best_regend[0])) {
- best_regs_set = 1;
- best_regend[0] = d; /* Never use regstart[0]. */
-
- for (mcnt = 1; mcnt < (int)num_regs; mcnt++) {
- best_regstart[mcnt] = regstart[mcnt];
- best_regend[mcnt] = regend[mcnt];
- }
- }
- goto fail;
- }
- /* If no failure points, don't restore garbage. */
- else if (best_regs_set) {
- restore_best_regs:
- /* Restore best match. */
- d = best_regend[0];
-
- for (mcnt = 0; mcnt < (int)num_regs; mcnt++) {
- regstart[mcnt] = best_regstart[mcnt];
- regend[mcnt] = best_regend[mcnt];
- }
- }
- }
-
- /* If caller wants register contents data back, convert it
- to indices. */
- if (regs) {
- regs->beg[0] = pos;
- regs->end[0] = d - string;
- for (mcnt = 1; mcnt < (int)num_regs; mcnt++) {
- if (REG_UNSET(regend[mcnt])) {
- regs->beg[mcnt] = -1;
- regs->end[mcnt] = -1;
- continue;
- }
- regs->beg[mcnt] = regstart[mcnt] - string;
- regs->end[mcnt] = regend[mcnt] - string;
- }
- }
- FREE_AND_RETURN(stackb, (d - pos - string));
- }
-
- /* Otherwise match next pattern command. */
-#ifdef SWITCH_ENUM_BUG
- switch ((int)((enum regexpcode)*p++))
-#else
- switch ((enum regexpcode)*p++)
-#endif
- {
- /* ( [or `(', as appropriate] is represented by start_memory,
- ) by stop_memory. Both of those commands are followed by
- a register number in the next byte. The text matched
- within the ( and ) is recorded under that number. */
- case start_memory:
- old_regstart[*p] = regstart[*p];
- regstart[*p] = d;
- IS_ACTIVE(reg_info[*p]) = 1;
- MATCHED_SOMETHING(reg_info[*p]) = 0;
- p += 2;
- continue;
-
- case stop_memory:
- old_regend[*p] = regend[*p];
- regend[*p] = d;
- IS_ACTIVE(reg_info[*p]) = 0;
- p += 2;
- continue;
-
- case start_paren:
- case stop_paren:
- break;
-
- /* \<digit> has been turned into a `duplicate' command which is
- followed by the numeric value of <digit> as the register number. */
- case duplicate:
- {
- int regno = *p++; /* Get which register to match against */
- register unsigned char *d2, *dend2;
-
- /* Check if there's corresponding group */
- if (regno >= num_regs) goto fail;
- /* Check if corresponding group is still open */
- if (IS_ACTIVE(reg_info[regno])) goto fail;
-
- /* Where in input to try to start matching. */
- d2 = regstart[regno];
- if (REG_UNSET(d2)) goto fail;
-
- /* 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 = regend[regno];
- if (REG_UNSET(dend2)) goto fail;
- for (;;) {
- /* 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 ((options & MBRE_OPTION_IGNORECASE)
- ? memcmp_translate(d, d2, mcnt, re_mbctab)
- : memcmp((char*)d, (char*)d2, mcnt))
- goto fail;
- d += mcnt, d2 += mcnt;
- }
- }
- break;
-
- case start_nowidth:
- PUSH_FAILURE_POINT(0, d);
- if (stackp - stackb > MBRE_DUP_MAX) {
- FREE_AND_RETURN(stackb,(-2));
- }
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- STORE_NUMBER(p+mcnt, stackp - stackb);
- continue;
-
- case stop_nowidth:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- stackp = stackb + mcnt;
- d = stackp[-3];
- POP_FAILURE_POINT();
- continue;
-
- case stop_backtrack:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- stackp = stackb + mcnt;
- POP_FAILURE_POINT();
- continue;
-
- case pop_and_fail:
- EXTRACT_NUMBER(mcnt, p+1);
- stackp = stackb + mcnt;
- POP_FAILURE_POINT();
- goto fail;
-
- case anychar:
- PREFETCH;
- if (ismbchar(*d)) {
- if (d + mbclen(*d) > dend)
- goto fail;
- SET_REGS_MATCHED;
- d += mbclen(*d);
- break;
- }
- if (!(options&MBRE_OPTION_MULTILINE)
- && (TRANSLATE_P() ? translate[*d] : *d) == '\n')
- goto fail;
- SET_REGS_MATCHED;
- d++;
- break;
-
- case anychar_repeat:
- for (;;) {
- PUSH_FAILURE_POINT(p, d);
- PREFETCH;
- if (ismbchar(*d)) {
- if (d + mbclen(*d) > dend)
- goto fail;
- SET_REGS_MATCHED;
- d += mbclen(*d);
- continue;
- }
- if (!(options&MBRE_OPTION_MULTILINE) &&
- (TRANSLATE_P() ? translate[*d] : *d) == '\n')
- goto fail;
- SET_REGS_MATCHED;
- d++;
- }
- break;
-
- case charset:
- case charset_not:
- {
- int not; /* Nonzero for charset_not. */
- int part = 0; /* true if matched part of mbc */
- unsigned char *dsave = d + 1;
- int cc, c;
-
- PREFETCH;
- cc = c = (unsigned char)*d++;
- if (ismbchar(c)) {
- if (d + mbclen(c) - 1 <= dend) {
- MBC2WC(c, d);
- }
- }
- else if (TRANSLATE_P())
- cc = c = (unsigned char)translate[c];
-
- not = is_in_list(c, p);
- if (!not && cc != c) {
- part = not = is_in_list(cc, p);
- }
- if (*(p - 1) == (unsigned char)charset_not) {
- not = !not;
- }
- if (!not) goto fail;
-
- p += 1 + *p + 2 + EXTRACT_UNSIGNED(&p[1 + *p])*8;
- SET_REGS_MATCHED;
-
- if (part) d = dsave;
- break;
- }
-
- case begline:
- if (size == 0 || AT_STRINGS_BEG(d))
- break;
- if (d[-1] == '\n' && !AT_STRINGS_END(d))
- break;
- goto fail;
-
- case endline:
- if (AT_STRINGS_END(d)) {
- if (size == 0 || d[-1] != '\n')
- break;
- }
- else if (*d == '\n')
- break;
- goto fail;
-
- /* Match at the very beginning of the string. */
- case begbuf:
- if (AT_STRINGS_BEG(d))
- break;
- goto fail;
-
- /* Match at the very end of the data. */
- case endbuf:
- if (AT_STRINGS_END(d))
- break;
- goto fail;
-
- /* Match at the very end of the data. */
- case endbuf2:
- if (AT_STRINGS_END(d)) {
- if (size == 0 || d[-1] != '\n')
- break;
- }
- /* .. or newline just before the end of the data. */
- if (*d == '\n' && AT_STRINGS_END(d+1))
- break;
- goto fail;
-
- /* `or' constructs are handled by starting each alternative with
- an on_failure_jump that points to the start of the next
- alternative. Each alternative except the last ends with a
- jump to the joining point. (Actually, each jump except for
- the last one really jumps to the following jump, because
- tensioning the jumps is a hassle.) */
-
- /* The start of a stupid repeat has an on_failure_jump that points
- past the end of the repeat text. This makes a failure point so
- that on failure to match a repetition, matching restarts past
- as many repetitions have been found with no way to fail and
- look for another one. */
-
- /* A smart repeat is similar but loops back to the on_failure_jump
- so that each repetition makes another failure point. */
-
- /* Match at the starting position. */
- case begpos:
- if (d - string == pos)
- break;
- goto fail;
-
- case on_failure_jump:
- on_failure:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- PUSH_FAILURE_POINT(p + mcnt, d);
- continue;
-
- /* The end of a smart repeat has a maybe_finalize_jump back.
- Change it either to a finalize_jump or an ordinary jump. */
- case maybe_finalize_jump:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- p1 = 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 finalize_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. */
- while (p1 + 2 < pend) {
- if ((enum regexpcode)*p1 == stop_memory ||
- (enum regexpcode)*p1 == start_memory)
- p1 += 3; /* Skip over args, too. */
- else if (/*(enum regexpcode)*p1 == start_paren ||*/
- (enum regexpcode)*p1 == stop_paren)
- p1 += 1;
- else
- break;
- }
-
- if (p1 == pend)
- p[-3] = (unsigned char)finalize_jump;
- else if (*p1 == (unsigned char)exactn ||
- *p1 == (unsigned char)endline) {
- register int c = *p1 == (unsigned char)endline ? '\n' : p1[2];
- register unsigned char *p2 = p + mcnt;
- /* p2[0] ... p2[2] are an on_failure_jump.
- Examine what follows that. */
- if (p2[3] == (unsigned char)exactn && p2[5] != c)
- p[-3] = (unsigned char)finalize_jump;
- else if (p2[3] == (unsigned char)charset ||
- p2[3] == (unsigned char)charset_not) {
- int not;
- if (ismbchar(c)) {
- unsigned char *pp = p1+3;
- MBC2WC(c, pp);
- }
- /* `is_in_list()' is TRUE if c would match */
- /* That means it is not safe to finalize. */
- not = is_in_list(c, p2 + 4);
- if (p2[3] == (unsigned char)charset_not)
- not = !not;
- if (!not)
- p[-3] = (unsigned char)finalize_jump;
- }
- }
- p -= 2; /* Point at relative address again. */
- if (p[-1] != (unsigned char)finalize_jump) {
- p[-1] = (unsigned char)jump;
- goto nofinalize;
- }
- /* Note fall through. */
-
- /* The end of a stupid repeat has a finalize_jump back to the
- start, where another failure point will be made which will
- point to after all the repetitions found so far. */
-
- /* Take off failure points put on by matching on_failure_jump
- because didn't fail. Also remove the register information
- put on by the on_failure_jump. */
- case finalize_jump:
- if (stackp > stackb && stackp[-3] == d) {
- p = stackp[-4];
- POP_FAILURE_POINT();
- continue;
- }
- POP_FAILURE_POINT();
- /* Note fall through. */
-
- /* We need this opcode so we can detect where alternatives end
- in `group_match_null_string_p' et al. */
- case jump_past_alt:
- /* fall through */
-
- /* Jump without taking off any failure points. */
- case jump:
- nofinalize:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- if (mcnt < 0 && stackp > stackb && stackp[-3] == d) /* avoid infinite loop */
- goto fail;
- p += mcnt;
- continue;
-
- case dummy_failure_jump:
- /* Normally, the on_failure_jump pushes a failure point, which
- then gets popped at finalize_jump. We will end up at
- finalize_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 finalize_jump to pop. */
- PUSH_FAILURE_POINT(0, 0);
- goto nofinalize;
-
- /* At the end of an alternative, we need to push a dummy failure
- point in case we are followed by a `finalize_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:
- /* See comments just above at `dummy_failure_jump' about the
- two zeroes. */
- p1 = p;
- /* Skip over open/close-group commands. */
- while (p1 + 2 < pend) {
- if ((enum regexpcode)*p1 == stop_memory ||
- (enum regexpcode)*p1 == start_memory)
- p1 += 3; /* Skip over args, too. */
- else if (/*(enum regexpcode)*p1 == start_paren ||*/
- (enum regexpcode)*p1 == stop_paren)
- p1 += 1;
- else
- break;
- }
- if ((enum regexpcode)*p1 == jump)
- p[-1] = unused;
- else
- PUSH_FAILURE_POINT(0, 0);
- break;
-
- /* Have to succeed matching what follows at least n times. Then
- just handle like an on_failure_jump. */
- case succeed_n:
- EXTRACT_NUMBER(mcnt, p + 2);
- /* Originally, this is how many times we HAVE to succeed. */
- if (mcnt != 0) {
- mcnt--;
- p += 2;
- PUSH_FAILURE_COUNT(p);
- STORE_NUMBER_AND_INCR(p, mcnt);
- PUSH_FAILURE_POINT(0, 0);
- }
- else {
- goto on_failure;
- }
- continue;
-
- case jump_n:
- EXTRACT_NUMBER(mcnt, p + 2);
- /* Originally, this is how many times we CAN jump. */
- if (mcnt) {
- mcnt--;
- PUSH_FAILURE_COUNT(p + 2);
- STORE_NUMBER(p + 2, mcnt);
- goto nofinalize; /* Do the jump without taking off
- any failure points. */
- }
- /* If don't have to jump any more, skip over the rest of command. */
- else
- p += 4;
- continue;
-
- case set_number_at:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- p1 = p + mcnt;
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- STORE_NUMBER(p1, mcnt);
- continue;
-
- case try_next:
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- if (p + mcnt < pend) {
- PUSH_FAILURE_POINT(p, d);
- stackp[-1] = NON_GREEDY;
- }
- p += mcnt;
- continue;
-
- case finalize_push:
- POP_FAILURE_POINT();
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- if (mcnt < 0 && stackp > stackb && stackp[-3] == d) /* avoid infinite loop */
- goto fail;
- PUSH_FAILURE_POINT(p + mcnt, d);
- stackp[-1] = NON_GREEDY;
- continue;
-
- case finalize_push_n:
- EXTRACT_NUMBER(mcnt, p + 2);
- /* Originally, this is how many times we CAN jump. */
- if (mcnt) {
- int pos, i;
-
- mcnt--;
- STORE_NUMBER(p + 2, mcnt);
- EXTRACT_NUMBER(pos, p);
- EXTRACT_NUMBER(i, p+pos+5);
- if (i > 0) goto nofinalize;
- POP_FAILURE_POINT();
- EXTRACT_NUMBER_AND_INCR(mcnt, p);
- PUSH_FAILURE_POINT(p + mcnt, d);
- stackp[-1] = NON_GREEDY;
- p += 2; /* skip n */
- }
- /* If don't have to push any more, skip over the rest of command. */
- else
- p += 4;
- continue;
-
- /* Ignore these. Used to ignore the n of succeed_n's which
- currently have n == 0. */
- case unused:
- continue;
-
- case casefold_on:
- options |= MBRE_OPTION_IGNORECASE;
- continue;
-
- case casefold_off:
- options &= ~MBRE_OPTION_IGNORECASE;
- continue;
-
- case option_set:
- options = *p++;
- continue;
-
- case wordbound:
- if (AT_STRINGS_BEG(d)) {
- if (IS_A_LETTER(d)) break;
- else goto fail;
- }
- if (AT_STRINGS_END(d)) {
- if (PREV_IS_A_LETTER(d)) break;
- else goto fail;
- }
- if (PREV_IS_A_LETTER(d) != IS_A_LETTER(d))
- break;
- goto fail;
-
- case notwordbound:
- if (AT_STRINGS_BEG(d)) {
- if (IS_A_LETTER(d)) goto fail;
- else break;
- }
- if (AT_STRINGS_END(d)) {
- if (PREV_IS_A_LETTER(d)) goto fail;
- else break;
- }
- if (PREV_IS_A_LETTER(d) != IS_A_LETTER(d))
- goto fail;
- break;
-
- case wordbeg:
- if (IS_A_LETTER(d) && (AT_STRINGS_BEG(d) || !PREV_IS_A_LETTER(d)))
- break;
- goto fail;
-
- case wordend:
- if (!AT_STRINGS_BEG(d) && PREV_IS_A_LETTER(d)
- && (!IS_A_LETTER(d) || AT_STRINGS_END(d)))
- break;
- goto fail;
-
- case wordchar:
- PREFETCH;
- if (!IS_A_LETTER(d))
- goto fail;
- if (ismbchar(*d) && d + mbclen(*d) - 1 < dend)
- d += mbclen(*d) - 1;
- d++;
- SET_REGS_MATCHED;
- break;
-
- case notwordchar:
- PREFETCH;
- if (IS_A_LETTER(d))
- goto fail;
- if (ismbchar(*d) && d + mbclen(*d) - 1 < dend)
- d += mbclen(*d) - 1;
- d++;
- SET_REGS_MATCHED;
- break;
-
- case exactn:
- /* Match the next few pattern characters exactly.
- mcnt is how many characters to match. */
- mcnt = *p++;
- /* This is written out as an if-else so we don't waste time
- testing `translate' inside the loop. */
- if (TRANSLATE_P()) {
- do {
- unsigned char c;
-
- PREFETCH;
- if (*p == 0xff) {
- p++;
- if (!--mcnt
- || AT_STRINGS_END(d)
- || (unsigned char)*d++ != (unsigned char)*p++)
- goto fail;
- continue;
- }
- c = *d++;
- if (ismbchar(c)) {
- int n;
-
- if (c != (unsigned char)*p++)
- goto fail;
- for (n = mbclen(c) - 1; n > 0; n--)
- if (!--mcnt /* redundant check if pattern was
- compiled properly. */
- || AT_STRINGS_END(d)
- || (unsigned char)*d++ != (unsigned char)*p++)
- goto fail;
- continue;
- }
- /* compiled code translation needed for ruby */
- if ((unsigned char)translate[c] != (unsigned char)translate[*p++])
- goto fail;
- }
- while (--mcnt);
- }
- else {
- do {
- PREFETCH;
- if (*p == 0xff) {p++; mcnt--;}
- if (*d++ != *p++) goto fail;
- }
- while (--mcnt);
- }
- SET_REGS_MATCHED;
- break;
- case fail:
- goto fail;
- break;
- }
-#ifdef RUBY
- CHECK_INTS;
-#endif
- continue; /* Successfully executed one pattern command; keep going. */
-
- /* Jump here if any matching operation fails. */
- fail:
- if (stackp != stackb) {
- /* A restart point is known. Restart there and pop it. */
- long last_used_reg, this_reg;
-
- /* If this failure point is from a dummy_failure_point, just
- skip it. */
- if (stackp[-4] == 0 || (best_regs_set && stackp[-1] == NON_GREEDY)) {
- POP_FAILURE_POINT();
- goto fail;
- }
- stackp--; /* discard greedy flag */
- options = (int)*--stackp;
- d = *--stackp;
- p = *--stackp;
- /* Restore register info. */
- last_used_reg = (long)*--stackp;
-
- /* Make the ones that weren't saved -1 or 0 again. */
- for (this_reg = num_regs - 1; this_reg > last_used_reg; this_reg--) {
- regend[this_reg] = REG_UNSET_VALUE;
- regstart[this_reg] = REG_UNSET_VALUE;
- IS_ACTIVE(reg_info[this_reg]) = 0;
- MATCHED_SOMETHING(reg_info[this_reg]) = 0;
- }
-
- /* And restore the rest from the stack. */
- for ( ; this_reg > 0; this_reg--) {
- reg_info[this_reg].word = *--stackp;
- regend[this_reg] = *--stackp;
- regstart[this_reg] = *--stackp;
- }
- mcnt = (long)*--stackp;
- while (mcnt--) {
- POP_FAILURE_COUNT();
- }
- if (p < pend) {
- int is_a_jump_n = 0;
- int failed_paren = 0;
-
- p1 = p;
- /* 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 ((enum regexpcode)*p1) {
- case jump_n:
- case finalize_push_n:
- is_a_jump_n = 1;
- case maybe_finalize_jump:
- case finalize_jump:
- case finalize_push:
- case jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR(mcnt, p1);
-
- if (mcnt >= 0) break; /* should be backward jump */
- p1 += mcnt;
-
- if (( is_a_jump_n && (enum regexpcode)*p1 == succeed_n) ||
- (!is_a_jump_n && (enum regexpcode)*p1 == on_failure_jump)) {
- if (failed_paren) {
- p1++;
- EXTRACT_NUMBER_AND_INCR(mcnt, p1);
- PUSH_FAILURE_POINT(p1 + mcnt, d);
- }
- goto fail;
- }
- break;
- default:
- /* do nothing */;
- }
- }
- }
- else
- break; /* Matching at this starting point really fails. */
- }
-
- if (best_regs_set)
- goto restore_best_regs;
-
- FREE_AND_RETURN(stackb,(-1)); /* Failure to match. */
-}
-
-
-static int
-memcmp_translate(s1, s2, len, re_mbctab)
- unsigned char *s1, *s2;
- register int len;
- const unsigned char *re_mbctab;
-{
- register unsigned char *p1 = s1, *p2 = s2, c;
- while (len) {
- c = *p1++;
- if (ismbchar(c)) {
- int n;
-
- if (c != *p2++) return 1;
- for (n = mbclen(c) - 1; n > 0; n--)
- if (!--len || *p1++ != *p2++)
- return 1;
- }
- else
- if (translate[c] != translate[*p2++])
- return 1;
- len--;
- }
- return 0;
-}
-
-void
-re_copy_registers(regs1, regs2)
- struct mbre_registers *regs1, *regs2;
-{
- int i;
-
- if (regs1 == regs2) return;
- if (regs1->allocated == 0) {
- regs1->beg = TMALLOC(regs2->num_regs, int);
- regs1->end = TMALLOC(regs2->num_regs, int);
- regs1->allocated = regs2->num_regs;
- }
- else if (regs1->allocated < regs2->num_regs) {
- TREALLOC(regs1->beg, regs2->num_regs, int);
- TREALLOC(regs1->end, regs2->num_regs, int);
- regs1->allocated = regs2->num_regs;
- }
- for (i=0; i<regs2->num_regs; i++) {
- regs1->beg[i] = regs2->beg[i];
- regs1->end[i] = regs2->end[i];
- }
- regs1->num_regs = regs2->num_regs;
-}
-
-void
-re_free_registers(regs)
- struct mbre_registers *regs;
-{
- if (regs->allocated == 0) return;
- if (regs->beg) xfree(regs->beg);
- if (regs->end) xfree(regs->end);
-}
-
-/* Functions for multi-byte support.
- Created for grep multi-byte extension Jul., 1993 by t^2 (Takahiro Tanimoto)
- Last change: Jul. 9, 1993 by t^2 */
-static const unsigned char mbctab_ascii[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static const unsigned char mbctab_euc[] = { /* 0xA1-0xFE */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 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
-};
-
-static const unsigned char mbctab_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 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
-};
-
-static const unsigned char mbctab_utf8[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 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,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 0, 0
-};
-
-#if 0
-const unsigned char *re_mbctab = mbctab_ascii;
-
-void
-re_mbcinit(mbctype)
- int mbctype;
-{
- switch (mbctype) {
- case MBCTYPE_ASCII:
- re_mbctab = mbctab_ascii;
- current_mbctype = MBCTYPE_ASCII;
- break;
- case MBCTYPE_EUC:
- re_mbctab = mbctab_euc;
- current_mbctype = MBCTYPE_EUC;
- break;
- case MBCTYPE_SJIS:
- re_mbctab = mbctab_sjis;
- current_mbctype = MBCTYPE_SJIS;
- break;
- case MBCTYPE_UTF8:
- re_mbctab = mbctab_utf8;
- current_mbctype = MBCTYPE_UTF8;
- break;
- }
-}
-#endif
-
-static const unsigned char*
-re_mbctab_get(mbctype)
- int mbctype;
-{
- const unsigned char *p;
-
- switch (mbctype) {
- case MBCTYPE_EUC:
- p = mbctab_euc;
- break;
- case MBCTYPE_SJIS:
- p = mbctab_sjis;
- break;
- case MBCTYPE_UTF8:
- p = mbctab_utf8;
- break;
- default:
- p = mbctab_ascii;
- break;
- }
-
- return p;
-}
diff --git a/ext/mbstring/mbregex.h b/ext/mbstring/mbregex.h
deleted file mode 100644
index 03292bcd38..0000000000
--- a/ext/mbstring/mbregex.h
+++ /dev/null
@@ -1,213 +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,96,97,98 Free Software Foundation, Inc.
-
- This file is part of the GNU C Library. Its master source is NOT part of
- the C library, however. The master source lives in /gd/gnu/lib.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
- Last change: May 21, 1993 by t^2 */
-/* modified for Ruby by matz@netlab.co.jp */
-
-#ifndef __MB_REGEXP_LIBRARY
-#define __MB_REGEXP_LIBRARY
-
-#include <stddef.h>
-
-/* Define number of parens for which we record the beginnings and ends.
- This affects how much space the `struct re_registers' type takes up. */
-#ifndef MBRE_NREGS
-#define MBRE_NREGS 10
-#endif
-
-#define MBRE_BYTEWIDTH 8
-
-#define MBRE_REG_MAX ((1<<MBRE_BYTEWIDTH)-1)
-
-/* Maximum number of duplicates an interval can allow. */
-#ifndef MBRE_DUP_MAX
-#define MBRE_DUP_MAX ((1 << 15) - 1)
-#endif
-
-
-/* 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 MBRE_CHAR_CLASSES (1L << 9)
-
-/* match will be done case insensetively */
-#define MBRE_OPTION_IGNORECASE (1L)
-/* perl-style extended pattern available */
-#define MBRE_OPTION_EXTENDED (MBRE_OPTION_IGNORECASE<<1)
-/* newline will be included for . */
-#define MBRE_OPTION_MULTILINE (MBRE_OPTION_EXTENDED<<1)
-/* ^ and $ ignore newline */
-#define MBRE_OPTION_SINGLELINE (MBRE_OPTION_MULTILINE<<1)
-/* works line Perl's /s; it's called POSIX for wrong reason */
-#define MBRE_OPTION_POSIXLINE (MBRE_OPTION_MULTILINE|MBRE_OPTION_SINGLELINE)
-/* search for longest match, in accord with POSIX regexp */
-#define MBRE_OPTION_LONGEST (MBRE_OPTION_SINGLELINE<<1)
-
-#define MBRE_MAY_IGNORECASE (MBRE_OPTION_LONGEST<<1)
-#define MBRE_OPTIMIZE_ANCHOR (MBRE_MAY_IGNORECASE<<1)
-#define MBRE_OPTIMIZE_EXACTN (MBRE_OPTIMIZE_ANCHOR<<1)
-#define MBRE_OPTIMIZE_NO_BM (MBRE_OPTIMIZE_EXACTN<<1)
-#define MBRE_OPTIMIZE_BMATCH (MBRE_OPTIMIZE_NO_BM<<1)
-
-/* For multi-byte char support */
-#define MBCTYPE_ASCII 0
-#define MBCTYPE_EUC 1
-#define MBCTYPE_SJIS 2
-#define MBCTYPE_UTF8 3
-
-#if 0
-#if defined IMPORT || defined USEIMPORTLIB
-extern __declspec(dllimport)
-#elif defined EXPORT
-extern __declspec(dllexport)
-#else
-extern
-#endif
-const unsigned char *re_mbctab;
-#if defined(__STDC__)
-void re_mbcinit (int);
-#else
-void re_mbcinit ();
-#endif
-#endif
-
-#undef ismbchar
-#define ismbchar(c) re_mbctab[(unsigned char)(c)]
-#define mbclen(c) (re_mbctab[(unsigned char)(c)]+1)
-
-/* Structure used in re_match() */
-
-typedef union
-{
- unsigned char *word;
- struct {
- unsigned is_active : 1;
- unsigned matched_something : 1;
- } bits;
-} mbre_register_info_type;
-
-/* This data structure is used to represent a compiled pattern. */
-
-struct mbre_pattern_buffer
- {
- char *buffer; /* Space holding the compiled pattern commands. */
- int allocated; /* Size of space that `buffer' points to. */
- int used; /* Length of portion of buffer actually occupied */
- char *fastmap; /* Pointer to fastmap, if any, or zero if none. */
- /* re_search uses the fastmap, if there is one,
- to skip over totally implausible characters. */
- char *must; /* Pointer to exact pattern which strings should have
- to be matched. */
- int *must_skip; /* Pointer to exact pattern skip table for bm_search */
- char *stclass; /* Pointer to character class list at top */
- long options; /* Flags for options such as extended_pattern. */
- long re_nsub; /* Number of subexpressions found by the compiler. */
- char fastmap_accurate;
- /* Set to zero when a new pattern is stored,
- set to one when the fastmap is updated from it. */
- char can_be_null; /* Set to one by compiling fastmap
- if this pattern might match the null string.
- It does not necessarily match the null string
- in that case, but if this is zero, it cannot.
- 2 as value means can match null string
- but at end of range or before a character
- listed in the fastmap. */
-
- /* stack & working area for re_match() */
- unsigned char **regstart;
- unsigned char **regend;
- unsigned char **old_regstart;
- unsigned char **old_regend;
- mbre_register_info_type *reg_info;
- unsigned char **best_regstart;
- unsigned char **best_regend;
-
- int mbctype;
- };
-
-typedef struct mbre_pattern_buffer mb_regex_t;
-
-/* Structure to store register contents data in.
-
- Pass the address of such a structure as an argument to re_match, etc.,
- if you want this information back.
-
- For i from 1 to MBRE_NREGS - 1, start[i] records the starting index in
- the string of where the ith subexpression matched, and end[i] records
- one after the ending index. start[0] and end[0] are analogous, for
- the entire pattern. */
-
-struct mbre_registers
- {
- int allocated;
- int num_regs;
- int *beg;
- int *end;
- };
-
-#if 0
-/* Type for byte offsets within the string. POSIX mandates this. */
-typedef size_t regoff_t;
-
-/* POSIX specification for registers. Aside from the different names than
- `mbre_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;
-#endif
-
-
-#ifdef __STDC__
-
-extern char *mbre_compile_pattern (const char *, int, struct mbre_pattern_buffer *);
-void mbre_free_pattern (struct mbre_pattern_buffer *);
-/* Is this really advertised? */
-extern int mbre_adjust_startpos (struct mbre_pattern_buffer *, const char*, int, int, int);
-extern void mbre_compile_fastmap (struct mbre_pattern_buffer *);
-extern int mbre_search (struct mbre_pattern_buffer *, const char*, int, int, int,
- struct mbre_registers *);
-extern int mbre_match (struct mbre_pattern_buffer *, const char *, int, int,
- struct mbre_registers *);
-extern void mbre_set_casetable (const char *table);
-extern void mbre_copy_registers (struct mbre_registers*, struct mbre_registers*);
-extern void mbre_free_registers (struct mbre_registers*);
-
-#else /* !__STDC__ */
-
-extern char *mbre_compile_pattern ();
-void mbre_free_pattern ();
-/* Is this really advertised? */
-extern int mbre_adjust_startpos ();
-extern void mbre_compile_fastmap ();
-extern int mbre_search ();
-extern int mbre_match ();
-extern void mbre_set_casetable ();
-extern void mbre_copy_registers ();
-extern void mbre_free_registers ();
-
-#endif /* __STDC__ */
-
-#endif /* !__MB_REGEXP_LIBRARY */
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
deleted file mode 100644
index 5d8941dca1..0000000000
--- a/ext/mbstring/mbstring.c
+++ /dev/null
@@ -1,3401 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
- | Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * PHP4 Multibyte String module "mbstring" (currently only for Japanese)
- *
- * History:
- * 2000.5.19 Release php-4.0RC2_jstring-1.0
- * 2001.4.1 Release php4_jstring-1.0.91
- * 2001.4.30 Release php4_jstring-1.1 (contribute to The PHP Group)
- * 2001.5.1 Renamed from jstring to mbstring (hirokawa@php.net)
- */
-
-/*
- * PHP3 Internationalization support program.
- *
- * Copyright (c) 1999,2000 by the PHP3 internationalization team.
- * All rights reserved.
- *
- * See README_PHP3-i18n-ja for more detail.
- *
- * Authors:
- * Hironori Sato <satoh@jpnnet.com>
- * Shigeru Kanemoto <sgk@happysize.co.jp>
- * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- * Rui Hirokawa <rui_hirokawa@ybb.ne.jp>
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_variables.h"
-#include "mbstring.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_mail.h"
-#include "ext/standard/url.h"
-#include "main/php_output.h"
-#include "ext/standard/info.h"
-
-#include "php_variables.h"
-#include "php_globals.h"
-#include "rfc1867.h"
-#include "php_content_types.h"
-#include "SAPI.h"
-
-#ifdef ZEND_MULTIBYTE
-#include "zend_multibyte.h"
-#endif /* ZEND_MULTIBYTE */
-
-#if HAVE_MBSTRING
-
-#if HAVE_MBREGEX
-#include "mbregex.h"
-#endif
-
-#if defined(HAVE_MBSTR_JA)
-static const enum mbfl_no_encoding php_mbstr_default_identify_list[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_jis,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_jp,
- mbfl_no_encoding_sjis
-};
-#endif
-
-
-#if defined(HAVE_MBSTR_CN) & !defined(HAVE_MBSTR_JA)
-static const enum mbfl_no_encoding php_mbstr_default_identify_list[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_cn,
- mbfl_no_encoding_cp936
-};
-#endif
-
-#if defined(HAVE_MBSTR_TW) & !defined(HAVE_MBSTR_JA)
-static const enum mbfl_no_encoding php_mbstr_default_identify_list[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_tw,
- mbfl_no_encoding_big5
-};
-#endif
-
-#if defined(HAVE_MBSTR_KR) & !defined(HAVE_MBSTR_JA)
-static const enum mbfl_no_encoding php_mbstr_default_identify_list[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_kr,
- mbfl_no_encoding_uhc
-};
-#endif
-
-#if defined(HAVE_MBSTR_RU) & !defined(HAVE_MBSTR_JA) & !defined(HAVE_MBSTR_TW) & !defined(HAVE_MBSTR_KR)
-static const enum mbfl_no_encoding php_mbstr_default_identify_list[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_cp866
-};
-#endif
-
-static const int php_mbstr_default_identify_list_size = sizeof(php_mbstr_default_identify_list)/sizeof(enum mbfl_no_encoding);
-
-static unsigned char third_and_rest_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE_REST };
-static unsigned char second_args_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
-#if HAVE_MBREGEX
-static unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-#endif
-#if defined(MBSTR_ENC_TRANS)
-SAPI_POST_HANDLER_FUNC(php_mbstr_post_handler);
-
-static sapi_post_entry mbstr_post_entries[] = {
- { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_mbstr_post_handler },
- { MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler },
- { NULL, 0, NULL, NULL }
-};
-#endif
-
-static struct mb_overload_def mb_ovld[] = {
- {MB_OVERLOAD_MAIL, "mail", "mb_send_mail", "mb_orig_mail"},
- {MB_OVERLOAD_STRING, "strlen", "mb_strlen", "mb_orig_strlen"},
- {MB_OVERLOAD_STRING, "strpos", "mb_strpos", "mb_orig_strrpos"},
- {MB_OVERLOAD_STRING, "strrpos", "mb_strrpos", "mb_orig_strrpos"},
- {MB_OVERLOAD_STRING, "substr", "mb_substr", "mb_orig_substr"},
-#if HAVE_MBREGEX
- {MB_OVERLOAD_REGEX, "ereg", "mb_ereg", "mb_orig_ereg"},
- {MB_OVERLOAD_REGEX, "eregi", "mb_eregi", "mb_orig_eregi"},
- {MB_OVERLOAD_REGEX, "ereg_replace", "mb_ereg_replace", "mb_orig_ereg_replace"},
- {MB_OVERLOAD_REGEX, "eregi_replace", "mb_eregi_replace", "mb_orig_eregi_replace"},
- {MB_OVERLOAD_REGEX, "split", "mb_split", "mb_orig_split"},
-#endif
- {0, NULL, NULL, NULL}
-};
-
-#if HAVE_MBREGEX
-struct def_mbctype_tbl {
- enum mbfl_no_encoding mbfl_encoding;
- int regex_encoding;
-};
-
-struct def_mbctype_tbl mbctype_tbl[] = {
- {mbfl_no_encoding_ascii,MBCTYPE_ASCII},
- {mbfl_no_encoding_euc_jp,MBCTYPE_EUC},
- {mbfl_no_encoding_sjis,MBCTYPE_SJIS},
- {mbfl_no_encoding_utf8,MBCTYPE_UTF8},
- {mbfl_no_encoding_pass,-1}
-};
-#endif
-
-function_entry mbstring_functions[] = {
- PHP_FE(mb_language, NULL)
- PHP_FE(mb_internal_encoding, NULL)
- PHP_FE(mb_http_input, NULL)
- PHP_FE(mb_http_output, NULL)
- PHP_FE(mb_detect_order, NULL)
- PHP_FE(mb_substitute_character, NULL)
- PHP_FE(mb_parse_str, second_args_force_ref)
- PHP_FE(mb_output_handler, NULL)
- PHP_FE(mb_preferred_mime_name, NULL)
- PHP_FE(mb_strlen, NULL)
- PHP_FE(mb_strpos, NULL)
- PHP_FE(mb_strrpos, NULL)
- PHP_FE(mb_substr, NULL)
- PHP_FE(mb_strcut, NULL)
- PHP_FE(mb_strwidth, NULL)
- PHP_FE(mb_strimwidth, NULL)
- PHP_FE(mb_convert_encoding, NULL)
- PHP_FE(mb_detect_encoding, NULL)
- PHP_FE(mb_convert_kana, NULL)
- PHP_FE(mb_encode_mimeheader, NULL)
- PHP_FE(mb_decode_mimeheader, NULL)
- PHP_FE(mb_convert_variables, third_and_rest_force_ref)
- PHP_FE(mb_encode_numericentity, NULL)
- PHP_FE(mb_decode_numericentity, NULL)
- PHP_FE(mb_send_mail, NULL)
- PHP_FE(mb_get_info, NULL)
- PHP_FALIAS(mbstrlen, mb_strlen, NULL)
- PHP_FALIAS(mbstrpos, mb_strpos, NULL)
- PHP_FALIAS(mbstrrpos, mb_strrpos, NULL)
- PHP_FALIAS(mbsubstr, mb_substr, NULL)
- PHP_FALIAS(mbstrcut, mb_strcut, NULL)
- PHP_FALIAS(i18n_internal_encoding, mb_internal_encoding, NULL)
- PHP_FALIAS(i18n_http_input, mb_http_input, NULL)
- PHP_FALIAS(i18n_http_output, mb_http_output, NULL)
- PHP_FALIAS(i18n_convert, mb_convert_encoding, NULL)
- PHP_FALIAS(i18n_discover_encoding, mb_detect_encoding, NULL)
- PHP_FALIAS(i18n_mime_header_encode, mb_encode_mimeheader, NULL)
- PHP_FALIAS(i18n_mime_header_decode, mb_decode_mimeheader, NULL)
- PHP_FALIAS(i18n_ja_jp_hantozen, mb_convert_kana, NULL)
-#if HAVE_MBREGEX
- PHP_FE(mb_regex_encoding, NULL)
- PHP_FE(mb_ereg, third_argument_force_ref)
- PHP_FE(mb_eregi, third_argument_force_ref)
- PHP_FE(mb_ereg_replace, NULL)
- PHP_FE(mb_eregi_replace, NULL)
- PHP_FE(mb_split, NULL)
- PHP_FE(mb_ereg_match, NULL)
- PHP_FE(mb_ereg_search, NULL)
- PHP_FE(mb_ereg_search_pos, NULL)
- PHP_FE(mb_ereg_search_regs, NULL)
- PHP_FE(mb_ereg_search_init, NULL)
- PHP_FE(mb_ereg_search_getregs, NULL)
- PHP_FE(mb_ereg_search_getpos, NULL)
- PHP_FE(mb_ereg_search_setpos, NULL)
- PHP_FALIAS(mbregex_encoding, mb_regex_encoding, NULL)
- PHP_FALIAS(mbereg, mb_ereg, NULL)
- PHP_FALIAS(mberegi, mb_eregi, NULL)
- PHP_FALIAS(mbereg_replace, mb_ereg_replace, NULL)
- PHP_FALIAS(mberegi_replace, mb_eregi_replace, NULL)
- PHP_FALIAS(mbsplit, mb_split, NULL)
- PHP_FALIAS(mbereg_match, mb_ereg_match, NULL)
- PHP_FALIAS(mbereg_search, mb_ereg_search, NULL)
- PHP_FALIAS(mbereg_search_pos, mb_ereg_search_pos, NULL)
- PHP_FALIAS(mbereg_search_regs, mb_ereg_search_regs, NULL)
- PHP_FALIAS(mbereg_search_init, mb_ereg_search_init, NULL)
- PHP_FALIAS(mbereg_search_getregs, mb_ereg_search_getregs, NULL)
- PHP_FALIAS(mbereg_search_getpos, mb_ereg_search_getpos, NULL)
- PHP_FALIAS(mbereg_search_setpos, mb_ereg_search_setpos, NULL)
-#endif
- { NULL, NULL, NULL }
-};
-
-zend_module_entry mbstring_module_entry = {
- STANDARD_MODULE_HEADER,
- "mbstring",
- mbstring_functions,
- PHP_MINIT(mbstring),
- PHP_MSHUTDOWN(mbstring),
- PHP_RINIT(mbstring),
- PHP_RSHUTDOWN(mbstring),
- PHP_MINFO(mbstring),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(mbstring)
-
-#ifdef COMPILE_DL_MBSTRING
-ZEND_GET_MODULE(mbstring)
-#endif
-
-
-/* Return 0 if input contains any illegal encoding, otherwise 1.
- * Even if any illegal encoding is detected the result may contain a list
- * of parsed encodings.
- */
-static int
-php_mbstring_parse_encoding_list(const char *value, int value_length, int **return_list, int *return_size, int persistent)
-{
- int n, l, size, bauto, *src, *list, *entry, ret = 1;
- char *p, *p1, *p2, *endp, *tmpstr;
- enum mbfl_no_encoding no_encoding;
-
- list = NULL;
- if (value == NULL || value_length <= 0) {
- if (return_list)
- *return_list = NULL;
- if (return_size)
- *return_size = 0;
- return 0;
- } else {
- /* copy the value string for work */
- tmpstr = (char *)estrndup(value, value_length);
- if (tmpstr == NULL) {
- return 0;
- }
- /* count the number of listed encoding names */
- endp = tmpstr + value_length;
- n = 1;
- p1 = tmpstr;
- while ((p2 = php_memnstr(p1, ",", 1, endp)) != NULL) {
- p1 = p2 + 1;
- n++;
- }
- size = n + php_mbstr_default_identify_list_size;
- /* make list */
- list = (int *)pecalloc(size, sizeof(int), persistent);
- if (list != NULL) {
- entry = list;
- n = 0;
- bauto = 0;
- p1 = tmpstr;
- do {
- p2 = p = php_memnstr(p1, ",", 1, endp);
- if (p == NULL) {
- p = endp;
- }
- *p = '\0';
- /* trim spaces */
- while (p1 < p && (*p1 == ' ' || *p1 == '\t')) {
- p1++;
- }
- p--;
- while (p > p1 && (*p == ' ' || *p == '\t')) {
- *p = '\0';
- p--;
- }
- /* convert to the encoding number and check encoding */
- no_encoding = mbfl_name2no_encoding(p1);
- if (no_encoding == mbfl_no_encoding_auto) {
- if (!bauto) {
- bauto = 1;
- l = php_mbstr_default_identify_list_size;
- src = (int*)php_mbstr_default_identify_list;
- while (l > 0) {
- *entry++ = *src++;
- l--;
- n++;
- }
- }
- } else if (no_encoding != mbfl_no_encoding_invalid) {
- *entry++ = no_encoding;
- n++;
- } else {
- ret = 0;
- }
- p1 = p2 + 1;
- } while (n < size && p2 != NULL);
- if (n > 0) {
- if (return_list)
- *return_list = list;
- else
- pefree(list, persistent);
- } else {
- pefree(list, persistent);
- if (return_list)
- *return_list = NULL;
- ret = 0;
- }
- if (return_size)
- *return_size = n;
- } else {
- if (return_list)
- *return_list = NULL;
- if (return_size)
- *return_size = 0;
- ret = 0;
- }
- efree(tmpstr);
- }
-
- return ret;
-}
-
-/* {{{ php_mb_check_encoding_list */
-PHPAPI int php_mb_check_encoding_list(const char *encoding_list TSRMLS_DC) {
- return php_mbstring_parse_encoding_list(encoding_list, strlen(encoding_list), NULL, NULL, 0);
-}
-/* }}} */
-
-/* Return 0 if input contains any illegal encoding, otherwise 1.
- * Even if any illegal encoding is detected the result may contain a list
- * of parsed encodings.
- */
-static int
-php_mbstring_parse_encoding_array(zval *array, int **return_list, int *return_size, int persistent)
-{
- zval **hash_entry;
- HashTable *target_hash;
- int i, n, l, size, bauto, *list, *entry, *src, ret = 1;
- enum mbfl_no_encoding no_encoding;
-
- list = NULL;
- if (Z_TYPE_P(array) == IS_ARRAY) {
- target_hash = Z_ARRVAL_P(array);
- zend_hash_internal_pointer_reset(target_hash);
- i = zend_hash_num_elements(target_hash);
- size = i + php_mbstr_default_identify_list_size;
- list = (int *)pecalloc(size, sizeof(int), persistent);
- if (list != NULL) {
- entry = list;
- bauto = 0;
- n = 0;
- while (i > 0) {
- if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) {
- break;
- }
- convert_to_string_ex(hash_entry);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(hash_entry));
- if (no_encoding == mbfl_no_encoding_auto) {
- if (!bauto) {
- bauto = 1;
- l = php_mbstr_default_identify_list_size;
- src = (int*)php_mbstr_default_identify_list;
- while (l > 0) {
- *entry++ = *src++;
- l--;
- n++;
- }
- }
- } else if (no_encoding != mbfl_no_encoding_invalid) {
- *entry++ = no_encoding;
- n++;
- } else {
- ret = 0;;
- }
- zend_hash_move_forward(target_hash);
- i--;
- }
- if (n > 0) {
- if (return_list)
- *return_list = list;
- else
- pefree(list, persistent);
- } else {
- pefree(list, persistent);
- if (return_list)
- *return_list = NULL;
- ret = 0;
- }
- if (return_size)
- *return_size = n;
- } else {
- if (return_list)
- *return_list = NULL;
- if (return_size)
- *return_size = 0;
- ret = 0;
- }
- }
-
- return ret;
-}
-
-#if HAVE_MBREGEX
-static void
-php_mbregex_free_cache(mb_regex_t *pre)
-{
- mbre_free_pattern(pre);
-}
-
-#endif
-
-/* php.ini directive handler */
-static PHP_INI_MH(OnUpdate_mbstring_detect_order)
-{
- int *list, size;
-
- if (php_mbstring_parse_encoding_list(new_value, new_value_length, &list, &size, 1)) {
- if (MBSTRG(detect_order_list) != NULL) {
- free(MBSTRG(detect_order_list));
- }
- MBSTRG(detect_order_list) = list;
- MBSTRG(detect_order_list_size) = size;
- } else {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdate_mbstring_http_input)
-{
- int *list, size;
-
- if (php_mbstring_parse_encoding_list(new_value, new_value_length, &list, &size, 1)) {
- if (MBSTRG(http_input_list) != NULL) {
- free(MBSTRG(http_input_list));
- }
- MBSTRG(http_input_list) = list;
- MBSTRG(http_input_list_size) = size;
- } else {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdate_mbstring_http_output)
-{
- enum mbfl_no_encoding no_encoding;
-
- no_encoding = mbfl_name2no_encoding(new_value);
- if (no_encoding != mbfl_no_encoding_invalid) {
- MBSTRG(http_output_encoding) = no_encoding;
- MBSTRG(current_http_output_encoding) = no_encoding;
- } else {
- if (new_value != NULL && new_value_length > 0) {
- return FAILURE;
- }
- }
-
- return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
-{
- enum mbfl_no_encoding no_encoding;
-#if HAVE_MBREGEX
- struct def_mbctype_tbl *p = NULL;
-#endif
-
- no_encoding = mbfl_name2no_encoding(new_value);
- if (no_encoding != mbfl_no_encoding_invalid) {
- MBSTRG(internal_encoding) = no_encoding;
- MBSTRG(current_internal_encoding) = no_encoding;
-#if HAVE_MBREGEX
- p=&(mbctype_tbl[0]);
- while(p->regex_encoding >= 0){
- if (p->mbfl_encoding == MBSTRG(internal_encoding)){
- MBSTRG(default_mbctype) = p->regex_encoding;
- MBSTRG(current_mbctype) = p->regex_encoding;
- break;
- }
- p++;
- }
-#endif
- } else {
- if (new_value != NULL && new_value_length > 0) {
- return FAILURE;
- }
- }
-
- return SUCCESS;
-}
-
-#ifdef ZEND_MULTIBYTE
-static PHP_INI_MH(OnUpdate_mbstring_script_encoding)
-{
- int *list, size;
-
- if (php_mbstring_parse_encoding_list(new_value, new_value_length, &list, &size, 1)) {
- if (MBSTRG(script_encoding_list) != NULL) {
- free(MBSTRG(script_encoding_list));
- }
- MBSTRG(script_encoding_list) = list;
- MBSTRG(script_encoding_list_size) = size;
- } else {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-#endif /* ZEND_MULTIBYTE */
-
-static PHP_INI_MH(OnUpdate_mbstring_substitute_character)
-{
- if (new_value != NULL) {
- if (strcasecmp("none", new_value) == 0) {
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE;
- } else if (strcasecmp("long", new_value) == 0) {
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG;
- } else {
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(filter_illegal_substchar) = zend_atoi(new_value, new_value_length);
- }
- }
-
- return SUCCESS;
-}
-
-/* php.ini directive registration */
-PHP_INI_BEGIN()
- PHP_INI_ENTRY("mbstring.detect_order", NULL, PHP_INI_ALL, OnUpdate_mbstring_detect_order)
- PHP_INI_ENTRY("mbstring.http_input", NULL, PHP_INI_ALL, OnUpdate_mbstring_http_input)
- PHP_INI_ENTRY("mbstring.http_output", NULL, PHP_INI_ALL, OnUpdate_mbstring_http_output)
- PHP_INI_ENTRY("mbstring.internal_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_internal_encoding)
-#ifdef ZEND_MULTIBYTE
- PHP_INI_ENTRY("mbstring.script_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_script_encoding)
-#endif /* ZEND_MULTIBYTE */
- PHP_INI_ENTRY("mbstring.substitute_character", NULL, PHP_INI_ALL, OnUpdate_mbstring_substitute_character)
- STD_PHP_INI_ENTRY("mbstring.func_overload", "0", PHP_INI_SYSTEM, OnUpdateInt, func_overload, zend_mbstring_globals, mbstring_globals)
-PHP_INI_END()
-
-
-/* module global initialize handler */
-static void
-php_mbstring_init_globals(zend_mbstring_globals *pglobals TSRMLS_DC)
-{
-#if defined(HAVE_MBSTR_CN) & !defined(HAVE_MBSTR_JA)
- MBSTRG(language) = mbfl_no_language_chinese;
- MBSTRG(current_language) = mbfl_no_language_chinese;
- MBSTRG(internal_encoding) = mbfl_no_encoding_euc_cn;
- MBSTRG(current_internal_encoding) = mbfl_no_encoding_euc_cn;
-#endif
-#if defined(HAVE_MBSTR_TW) & !defined(HAVE_MBSTR_JA)
- MBSTRG(language) = mbfl_no_language_chinese;
- MBSTRG(current_language) = mbfl_no_language_chinese;
- MBSTRG(internal_encoding) = mbfl_no_encoding_euc_tw;
- MBSTRG(current_internal_encoding) = mbfl_no_encoding_euc_tw;
-#endif
-#if defined(HAVE_MBSTR_KR) & !defined(HAVE_MBSTR_JA)
- MBSTRG(language) = mbfl_no_language_chinese;
- MBSTRG(current_language) = mbfl_no_language_korean;
- MBSTRG(internal_encoding) = mbfl_no_encoding_euc_kr;
- MBSTRG(current_internal_encoding) = mbfl_no_encoding_euc_kr;
-#endif
-#if defined(HAVE_MBSTR_JA)
- MBSTRG(language) = mbfl_no_language_japanese;
- MBSTRG(current_language) = mbfl_no_language_japanese;
- MBSTRG(internal_encoding) = mbfl_no_encoding_euc_jp;
- MBSTRG(current_internal_encoding) = mbfl_no_encoding_euc_jp;
-#endif
-#ifdef ZEND_MULTIBYTE
- MBSTRG(script_encoding_list) = NULL;
- MBSTRG(script_encoding_list_size) = 0;
-#endif /* ZEND_MULTIBYTE */
- MBSTRG(http_output_encoding) = mbfl_no_encoding_pass;
- MBSTRG(current_http_output_encoding) = mbfl_no_encoding_pass;
- MBSTRG(http_input_identify) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_list) = NULL;
- MBSTRG(http_input_list_size) = 0;
- MBSTRG(detect_order_list) = NULL;
- MBSTRG(detect_order_list_size) = 0;
- MBSTRG(current_detect_order_list) = NULL;
- MBSTRG(current_detect_order_list_size) = 0;
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(filter_illegal_substchar) = 0x3f; /* '?' */
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = 0x3f; /* '?' */
- MBSTRG(func_overload) = 0;
- pglobals->outconv = NULL;
-#if HAVE_MBREGEX
- MBSTRG(default_mbctype) = MBCTYPE_EUC;
- MBSTRG(current_mbctype) = MBCTYPE_EUC;
- zend_hash_init(&(MBSTRG(ht_rc)), 0, NULL, (void (*)(void *)) php_mbregex_free_cache, 1);
- MBSTRG(search_str) = (zval**)0;
- MBSTRG(search_str_val) = (zval*)0;
- MBSTRG(search_re) = (mb_regex_t*)0;
- MBSTRG(search_pos) = 0;
- MBSTRG(search_regs) = (struct mbre_registers*)0;
-#endif
-}
-
-PHP_MINIT_FUNCTION(mbstring)
-{
-#ifdef ZTS
- ts_allocate_id(&mbstring_globals_id, sizeof(zend_mbstring_globals), (ts_allocate_ctor) php_mbstring_init_globals, NULL);
-#else
- php_mbstring_init_globals(&mbstring_globals TSRMLS_CC);
-#endif
-
- REGISTER_INI_ENTRIES();
-
-#if defined(MBSTR_ENC_TRANS)
- sapi_unregister_post_entry(mbstr_post_entries);
- sapi_register_post_entries(mbstr_post_entries);
-#endif
-
- REGISTER_LONG_CONSTANT("MB_OVERLOAD_MAIL", MB_OVERLOAD_MAIL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MB_OVERLOAD_STRING", MB_OVERLOAD_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MB_OVERLOAD_REGEX", MB_OVERLOAD_REGEX, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(mbstring)
-{
- UNREGISTER_INI_ENTRIES();
-
- if (MBSTRG(http_input_list)) {
- free(MBSTRG(http_input_list));
- }
-#ifdef ZEND_MULTIBYTE
- if (MBSTRG(script_encoding_list)) {
- free(MBSTRG(script_encoding_list));
- }
-#endif /* ZEND_MULTIBYTE */
- if (MBSTRG(detect_order_list)) {
- free(MBSTRG(detect_order_list));
- }
-
-#if HAVE_MBREGEX
- zend_hash_destroy(&MBSTRG(ht_rc));
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(mbstring)
-{
- int n, *list=NULL, *entry;
- zend_function *func, *orig;
- struct mb_overload_def *p;
-
- MBSTRG(current_language) = MBSTRG(language);
- MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding);
- MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding);
- MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode);
- MBSTRG(current_filter_illegal_substchar) = MBSTRG(filter_illegal_substchar);
-
- n = 0;
- if (MBSTRG(detect_order_list)) {
- list = MBSTRG(detect_order_list);
- n = MBSTRG(detect_order_list_size);
- }
- if (n <= 0) {
- list = (int*)php_mbstr_default_identify_list;
- n = php_mbstr_default_identify_list_size;
- }
- entry = (int *)emalloc(n*sizeof(int));
- if (entry != NULL) {
- MBSTRG(current_detect_order_list) = entry;
- MBSTRG(current_detect_order_list_size) = n;
- while (n > 0) {
- *entry++ = *list++;
- n--;
- }
- }
-
- /* override original function. */
- if (MBSTRG(func_overload)){
- p = &(mb_ovld[0]);
-
- while (p->type > 0) {
- if ((MBSTRG(func_overload) & p->type) == p->type &&
- zend_hash_find(EG(function_table), p->save_func, strlen(p->save_func)+1 , (void **)&orig) != SUCCESS) {
- zend_hash_find(EG(function_table), p->ovld_func, strlen(p->ovld_func)+1 , (void **)&func);
-
- if (zend_hash_find(EG(function_table), p->orig_func,
- strlen(p->orig_func)+1, (void **)&orig) != SUCCESS) {
- php_error(E_ERROR, "mbstring couldn't find function %s.", p->orig_func);
- }
- zend_hash_add(EG(function_table), p->save_func, strlen(p->save_func)+1, orig, sizeof(zend_function), NULL);
- if (zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1,
- func, sizeof(zend_function), NULL) == FAILURE){
- php_error(E_ERROR, "mbstring couldn't replace function %s.", p->orig_func);
- }
- }
- p++;
- }
- }
-
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(mbstring)
-{
- struct mb_overload_def *p;
- zend_function *orig;
-
- if (MBSTRG(current_detect_order_list) != NULL) {
- efree(MBSTRG(current_detect_order_list));
- MBSTRG(current_detect_order_list) = NULL;
- MBSTRG(current_detect_order_list_size) = 0;
- }
- if (MBSTRG(outconv) != NULL) {
- mbfl_buffer_converter_delete(MBSTRG(outconv) TSRMLS_CC);
- MBSTRG(outconv) = NULL;
- }
-
- /* clear http input identification. */
- MBSTRG(http_input_identify) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid;
-
- /* clear overloaded function. */
- if (MBSTRG(func_overload)){
- p = &(mb_ovld[0]);
- while (p->type > 0 && zend_hash_find(EG(function_table), p->save_func, strlen(p->save_func)+1 , (void **)&orig) == SUCCESS) {
- zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, orig, sizeof(zend_function), NULL);
- zend_hash_del(EG(function_table), p->save_func, strlen(p->save_func)+1);
- p++;
- }
- }
-
-#if HAVE_MBREGEX
- MBSTRG(current_mbctype) = MBSTRG(default_mbctype);
- if (MBSTRG(search_str)) {
- if (ZVAL_REFCOUNT(*MBSTRG(search_str)) > 1) {
- ZVAL_DELREF(*MBSTRG(search_str));
- } else {
- zval_dtor(*MBSTRG(search_str));
- FREE_ZVAL(*MBSTRG(search_str));
- }
- MBSTRG(search_str) = (zval **)0;
- MBSTRG(search_str_val) = (zval *)0;
- }
- MBSTRG(search_pos) = 0;
- if (MBSTRG(search_re)) {
- efree(MBSTRG(search_re));
- MBSTRG(search_re) = (mb_regex_t *)0;
- }
- if (MBSTRG(search_regs)) {
- mbre_free_registers(MBSTRG(search_regs));
- efree(MBSTRG(search_regs));
- MBSTRG(search_regs) = (struct mbre_registers*)0;
- }
- zend_hash_clean(&MBSTRG(ht_rc));
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(mbstring)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "Multibyte Support", "enabled");
-#if defined(HAVE_MBSTR_JA)
- php_info_print_table_row(2, "japanese support", "enabled");
-#endif
-#if defined(HAVE_MBSTR_CN)
- php_info_print_table_row(2, "simplified chinese support", "enabled");
-#endif
-#if defined(HAVE_MBSTR_TW)
- php_info_print_table_row(2, "traditional chinese support", "enabled");
-#endif
-#if defined(HAVE_MBSTR_KR)
- php_info_print_table_row(2, "korean support", "enabled");
-#endif
-#if defined(MBSTR_ENC_TRANS)
- php_info_print_table_row(2, "http input encoding translation", "enabled");
-#endif
-#if defined(HAVE_MBREGEX)
- php_info_print_table_row(2, "multibyte (japanese) regex support", "enabled");
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-
-
-/* {{{ proto string mb_language([string language])
- Sets the current language or Returns the current language as a string */
-PHP_FUNCTION(mb_language)
-{
- pval **arg1;
- char *name;
- enum mbfl_no_language no_language;
-
- if (ZEND_NUM_ARGS() == 0) {
- name = (char *)mbfl_no_language2name(MBSTRG(current_language));
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- no_language = mbfl_name2no_language(Z_STRVAL_PP(arg1));
- if (no_language == mbfl_no_language_invalid) {
- php_error(E_WARNING, "%s() unknown language \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg1));
- RETURN_FALSE;
- } else {
- MBSTRG(current_language) = no_language;
- RETURN_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_internal_encoding([string encoding])
- Sets the current internal encoding or Returns the current internal encoding as a string */
-PHP_FUNCTION(mb_internal_encoding)
-{
- pval **arg1;
- char *name;
- enum mbfl_no_encoding no_encoding;
-
- if (ZEND_NUM_ARGS() == 0) {
- name = (char *)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg1));
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg1));
- RETURN_FALSE;
- } else {
- MBSTRG(current_internal_encoding) = no_encoding;
-#ifdef ZEND_MULTIBYTE
- zend_multibyte_set_internal_encoding(Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1) TSRMLS_CC);
-#endif /* ZEND_MULTIBYTE */
- RETURN_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-
-/* {{{ proto false|string mb_http_input([string type])
- Returns the input encoding */
-PHP_FUNCTION(mb_http_input)
-{
- pval **arg1;
- int result=0, retname, n, *entry;
- char *name;
-
- retname = 1;
- if (ZEND_NUM_ARGS() == 0) {
- result = MBSTRG(http_input_identify);
- } else if (ARG_COUNT(ht) == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- switch (*(Z_STRVAL_PP(arg1))) {
- case 'G':
- case 'g':
- result = MBSTRG(http_input_identify_get);
- break;
- case 'P':
- case 'p':
- result = MBSTRG(http_input_identify_post);
- break;
- case 'C':
- case 'c':
- result = MBSTRG(http_input_identify_cookie);
- break;
- case 'S':
- case 's':
- result = MBSTRG(http_input_identify_string);
- break;
- case 'I':
- case 'i':
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- entry = MBSTRG(http_input_list);
- n = MBSTRG(http_input_list_size);
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- add_next_index_string(return_value, name, 1);
- }
- entry++;
- n--;
- }
- retname = 0;
- break;
- default:
- result = MBSTRG(http_input_identify);
- break;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (retname) {
- name = (char *)mbfl_no_encoding2name(result);
- if (name != NULL) {
- RETVAL_STRING(name, 1);
- } else {
- RETVAL_FALSE;
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto string mb_http_output([string encoding])
- Sets the current output_encoding or returns the current output_encoding as a string */
-PHP_FUNCTION(mb_http_output)
-{
- pval **arg1;
- char *name;
- enum mbfl_no_encoding no_encoding;
-
- if (ZEND_NUM_ARGS() == 0) {
- name = (char *)mbfl_no_encoding2name(MBSTRG(current_http_output_encoding));
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg1));
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg1));
- RETURN_FALSE;
- } else {
- MBSTRG(current_http_output_encoding) = no_encoding;
- RETURN_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-
-/* {{{ proto boolean|array mb_detect_order([mixed encoding-list])
- Sets the current detect_order or Return the current detect_order as a array */
-PHP_FUNCTION(mb_detect_order)
-{
- pval **arg1;
- int n, size, *list, *entry;
- char *name;
-
- if (ZEND_NUM_ARGS() == 0) {
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- entry = MBSTRG(current_detect_order_list);
- n = MBSTRG(current_detect_order_list_size);
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- add_next_index_string(return_value, name, 1);
- }
- entry++;
- n--;
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- list = NULL;
- size = 0;
- switch (Z_TYPE_PP(arg1)) {
- case IS_ARRAY:
- if (!php_mbstring_parse_encoding_array(*arg1, &list, &size, 0)) {
- if (list) {
- efree(list);
- }
- RETURN_FALSE;
- }
- break;
- default:
- convert_to_string_ex(arg1);
- if (!php_mbstring_parse_encoding_list(Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1), &list, &size, 0)) {
- if (list) {
- efree(list);
- }
- RETURN_FALSE;
- }
- break;
- }
- if (list == NULL) {
- RETVAL_FALSE;
- } else {
- if (MBSTRG(current_detect_order_list)) {
- efree(MBSTRG(current_detect_order_list));
- }
- MBSTRG(current_detect_order_list) = list;
- MBSTRG(current_detect_order_list_size) = size;
- RETVAL_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-
-/* {{{ proto mixed mb_substitute_character([mixed substchar])
- Sets the current substitute_character or returns the current substitute_character */
-PHP_FUNCTION(mb_substitute_character)
-{
- pval **arg1;
-
- if (ZEND_NUM_ARGS() == 0) {
- if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- RETVAL_STRING("none", 1);
- } else if(MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) {
- RETVAL_STRING("long", 1);
- } else {
- RETVAL_LONG(MBSTRG(current_filter_illegal_substchar));
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- RETVAL_TRUE;
- switch (Z_TYPE_PP(arg1)) {
- case IS_STRING:
- if (strcasecmp("none", Z_STRVAL_PP(arg1)) == 0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE;
- } else if (strcasecmp("long", Z_STRVAL_PP(arg1)) == 0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG;
- } else {
- convert_to_long_ex(arg1);
- if (Z_LVAL_PP(arg1)< 0xffff && Z_LVAL_PP(arg1)> 0x0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
- } else {
- php_error(E_WARNING, "%s() unknown character.",
- get_active_function_name(TSRMLS_C));
- RETVAL_FALSE;
- }
- }
- break;
- default:
- convert_to_long_ex(arg1);
- if (Z_LVAL_PP(arg1)< 0xffff && Z_LVAL_PP(arg1)> 0x0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
- } else {
- php_error(E_WARNING, "%() unknown character.",
- get_active_function_name(TSRMLS_C));
- RETVAL_FALSE;
- }
- break;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-
-/* {{{ proto string mb_preferred_mime_name(string encoding)
- Return the preferred MIME name (charset) as a string */
-PHP_FUNCTION(mb_preferred_mime_name)
-{
- pval **arg1;
- enum mbfl_no_encoding no_encoding;
- const char *name;
-
- if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg1));
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg1));
- RETVAL_FALSE;
- } else {
- name = mbfl_no2preferred_mime_name(no_encoding);
- if (name == NULL || *name == '\0') {
- php_error(E_WARNING, "%s() no name for \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg1));
- RETVAL_FALSE;
- } else {
- RETVAL_STRING((char *)name, 1);
- }
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-#if defined(MBSTR_ENC_TRANS)
-static void
-php_mbstr_encoding_handler(zval *arg, char *res, char *separator TSRMLS_DC)
-{
- char *var, *val;
- char *strtok_buf = NULL, **val_list;
- zval *array_ptr = (zval *) arg;
- int n, num, val_len, *len_list, *elist, elistsz;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_string string, resvar, resval;
- mbfl_encoding_detector *identd = NULL;
- mbfl_buffer_converter *convd = NULL;
-
- mbfl_string_init_set(&string, MBSTRG(current_language), MBSTRG(current_internal_encoding));
- mbfl_string_init_set(&resvar, MBSTRG(current_language), MBSTRG(current_internal_encoding));
- mbfl_string_init_set(&resval, MBSTRG(current_language), MBSTRG(current_internal_encoding));
-
- /* count the variables contained in the query */
- num = 0;
- var = res;
- n = strlen(res);
- while(n > 0) {
- if (*var == '=') {
- num++;
- }
- var++;
- n--;
- }
- num *= 2;
- val_list = (char **)ecalloc(num, sizeof(char *));
- len_list = (int *)ecalloc(num, sizeof(int));
-
- /* split and decode the query */
- n = 0;
- strtok_buf = NULL;
- var = php_strtok_r(res, separator, &strtok_buf);
-
- while (var && n < num) {
- val = strchr(var, '=');
- if (val) { /* have a value */
- *val++ = '\0';
- val_list[n] = var;
- len_list[n] = php_url_decode(var, strlen(var));
- n++;
- val_list[n] = val;
- len_list[n] = php_url_decode(val, strlen(val));
- } else {
- val_list[n] = var;
- len_list[n] = php_url_decode(var, strlen(var));
- n++;
- val_list[n] = NULL;
- len_list[n] = 0;
- }
- n++;
- var = php_strtok_r(NULL, separator, &strtok_buf);
- }
- num = n;
-
- /* initialize converter */
- to_encoding = MBSTRG(current_internal_encoding);
- elist = MBSTRG(http_input_list);
- elistsz = MBSTRG(http_input_list_size);
- if (elistsz <= 0) {
- from_encoding = mbfl_no_encoding_pass;
- } else if (elistsz == 1) {
- from_encoding = *elist;
- } else {
- /* auto detect */
- from_encoding = mbfl_no_encoding_invalid;
- identd = mbfl_encoding_detector_new(elist, elistsz TSRMLS_CC);
- if (identd) {
- n = 0;
- while (n < num) {
- string.val = val_list[n];
- string.len = len_list[n];
- if (mbfl_encoding_detector_feed(identd, &string TSRMLS_CC)) {
- break;
- }
- n++;
- }
- from_encoding = mbfl_encoding_detector_judge(identd TSRMLS_CC);
- mbfl_encoding_detector_delete(identd TSRMLS_CC);
- }
- if (from_encoding == mbfl_no_encoding_invalid) {
- from_encoding = mbfl_no_encoding_pass;
- }
- }
- convd = NULL;
- if (from_encoding != mbfl_no_encoding_pass) {
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0 TSRMLS_CC);
- if (convd != NULL) {
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode) TSRMLS_CC);
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar) TSRMLS_CC);
- } else {
- php_error(E_WARNING, "%s() unable to create converter",
- get_active_function_name(TSRMLS_C));
- }
- }
-
- /* convert encoding */
- string.no_encoding = from_encoding;
-
- n = 0;
- while (n < num) {
- string.val = val_list[n];
- string.len = len_list[n];
- if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resvar TSRMLS_CC) != NULL) {
- var = resvar.val;
- } else {
- var = val_list[n];
- }
- n++;
- string.val = val_list[n];
- string.len = len_list[n];
- if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resval TSRMLS_CC) != NULL) {
- val = resval.val;
- val_len = resval.len;
- } else {
- val = val_list[n];
- val_len = len_list[n];
- }
- n++;
- /* add variable to symbol table */
- php_register_variable_safe(var, val, val_len, array_ptr TSRMLS_CC);
- if (convd != NULL){
- mbfl_string_clear(&resvar);
- mbfl_string_clear(&resval);
- }
- }
- MBSTRG(http_input_identify) = from_encoding;
-
- if (convd != NULL) {
- mbfl_buffer_converter_delete(convd TSRMLS_CC);
- }
- if (val_list != NULL) {
- efree((void *)val_list);
- }
- if (len_list != NULL) {
- efree((void *)len_list);
- }
-
-}
-
-#if defined(MBSTR_ENC_TRANS)
-SAPI_POST_HANDLER_FUNC(php_mbstr_post_handler)
-{
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
-
- php_mbstr_encoding_handler(arg, SG(request_info).post_data, "&" TSRMLS_CC);
-
- if (MBSTRG(http_input_identify) != mbfl_no_encoding_invalid) {
- MBSTRG(http_input_identify_post) = MBSTRG(http_input_identify);
- }
-}
-#endif
-
-/* http input processing */
-void mbstr_treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
-{
- char *res = NULL, *separator=NULL;
- const char *c_var;
- pval *array_ptr;
- int free_buffer=0;
-
- switch (arg) {
- case PARSE_POST:
- case PARSE_GET:
- case PARSE_COOKIE:
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- switch (arg) {
- case PARSE_POST:
- PG(http_globals)[TRACK_VARS_POST] = array_ptr;
- break;
- case PARSE_GET:
- PG(http_globals)[TRACK_VARS_GET] = array_ptr;
- break;
- case PARSE_COOKIE:
- PG(http_globals)[TRACK_VARS_COOKIE] = array_ptr;
- break;
- }
- break;
- default:
- array_ptr=destArray;
- break;
- }
-
- if (arg==PARSE_POST) {
- sapi_handle_post(array_ptr TSRMLS_CC);
- return;
- }
-
- if (arg == PARSE_GET) { /* GET data */
- c_var = SG(request_info).query_string;
- if (c_var && *c_var) {
- res = (char *) estrdup(c_var);
- free_buffer = 1;
- } else {
- free_buffer = 0;
- }
- } else if (arg == PARSE_COOKIE) { /* Cookie data */
- c_var = SG(request_info).cookie_data;
- if (c_var && *c_var) {
- res = (char *) estrdup(c_var);
- free_buffer = 1;
- } else {
- free_buffer = 0;
- }
- } else if (arg == PARSE_STRING) { /* String data */
- res = str;
- free_buffer = 1;
- }
-
- if (!res) {
- return;
- }
-
- switch (arg) {
- case PARSE_POST:
- case PARSE_GET:
- case PARSE_STRING:
- separator = (char *) estrdup(PG(arg_separator).input);
- break;
- case PARSE_COOKIE:
- separator = ";\0";
- break;
- }
-
- switch(arg) {
- case PARSE_POST:
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
- break;
- case PARSE_GET:
- MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid;
- break;
- case PARSE_COOKIE:
- MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid;
- break;
- case PARSE_STRING:
- MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid;
- break;
- }
-
- php_mbstr_encoding_handler(array_ptr, res, separator TSRMLS_CC);
-
- if (MBSTRG(http_input_identify) != mbfl_no_encoding_invalid) {
- switch(arg){
- case PARSE_POST:
- MBSTRG(http_input_identify_post) = MBSTRG(http_input_identify);
- break;
- case PARSE_GET:
- MBSTRG(http_input_identify_get) = MBSTRG(http_input_identify);
- break;
- case PARSE_COOKIE:
- MBSTRG(http_input_identify_cookie) = MBSTRG(http_input_identify);
- break;
- case PARSE_STRING:
- MBSTRG(http_input_identify_string) = MBSTRG(http_input_identify);
- break;
- }
- }
-
- if(arg != PARSE_COOKIE) {
- efree(separator);
- }
-
- if (free_buffer) {
- efree(res);
- }
-}
-#endif
-
-/* {{{ proto bool mb_parse_str(string encoded_string [, array result])
- Parses GET/POST/COOKIE data and sets global variables */
-PHP_FUNCTION(mb_parse_str)
-{
- pval **arg_str, **arg_array, *track_vars_array;
- char *var, *val, *encstr, *strtok_buf, **str_list, *separator;
- int n, num, val_len, *len_list, *elist, elistsz, old_rg, argc;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_string string, resvar, resval;
- mbfl_encoding_detector *identd;
- mbfl_buffer_converter *convd;
-
- track_vars_array = NULL;
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 2) {
- if (zend_get_parameters_ex(2, &arg_str, &arg_array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* Clear out the array */
- zval_dtor(*arg_array);
- array_init(*arg_array);
- track_vars_array = *arg_array;
- } else {
- WRONG_PARAM_COUNT;
- }
- separator = (char *)estrdup(PG(arg_separator).input);
- if (separator == NULL) {
- RETURN_FALSE;
- }
- convert_to_string_ex(arg_str);
- encstr = estrndup(Z_STRVAL_PP(arg_str), Z_STRLEN_PP(arg_str));
- if (encstr == NULL) {
- efree((void *)separator);
- RETURN_FALSE;
- }
- mbfl_string_init_set(&string, MBSTRG(current_language), MBSTRG(current_internal_encoding));
- mbfl_string_init_set(&resvar, MBSTRG(current_language), MBSTRG(current_internal_encoding));
- mbfl_string_init_set(&resval, MBSTRG(current_language), MBSTRG(current_internal_encoding));
-
- /* count the variables contained in the query */
- num = 1;
- var = encstr;
- n = Z_STRLEN_PP(arg_str);
- while (n > 0) {
- if (*var == *separator) {
- num++;
- }
- var++;
- n--;
- }
- num *= 2;
- str_list = (char **)ecalloc(num, sizeof(char *));
- if (str_list == NULL) {
- efree((void *)separator);
- efree((void *)encstr);
- RETURN_FALSE;
- }
- len_list = (int *)ecalloc(num, sizeof(int));
- if (len_list == NULL) {
- efree((void *)separator);
- efree((void *)encstr);
- efree((void *)str_list);
- RETURN_FALSE;
- }
-
- /* split and decode the query */
- n = 0;
- strtok_buf = NULL;
- var = php_strtok_r(encstr, separator, &strtok_buf);
- while (var && n < num) {
- val = strchr(var, '=');
- if (val) { /* have a value */
- *val++ = '\0';
- str_list[n] = var;
- len_list[n] = php_url_decode(var, strlen(var));
- n++;
- str_list[n] = val;
- len_list[n] = php_url_decode(val, strlen(val));
- } else {
- str_list[n] = var;
- len_list[n] = php_url_decode(var, strlen(var));
- n++;
- str_list[n] = NULL;
- len_list[n] = 0;
- }
- n++;
- var = php_strtok_r(NULL, separator, &strtok_buf);
- }
- num = n;
-
- /* initialize converter */
- to_encoding = MBSTRG(current_internal_encoding);
- elist = MBSTRG(http_input_list);
- elistsz = MBSTRG(http_input_list_size);
- if (elistsz <= 0) {
- from_encoding = mbfl_no_encoding_pass;
- } else if (elistsz == 1) {
- from_encoding = *elist;
- } else {
- /* auto detect */
- from_encoding = mbfl_no_encoding_invalid;
- identd = mbfl_encoding_detector_new(elist, elistsz TSRMLS_CC);
- if (identd != NULL) {
- n = 0;
- while (n < num) {
- string.val = str_list[n];
- string.len = len_list[n];
- if (mbfl_encoding_detector_feed(identd, &string TSRMLS_CC)) {
- break;
- }
- n++;
- }
- from_encoding = mbfl_encoding_detector_judge(identd TSRMLS_CC);
- mbfl_encoding_detector_delete(identd TSRMLS_CC);
- }
- if (from_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unable to detect encoding",
- get_active_function_name(TSRMLS_C));
- from_encoding = mbfl_no_encoding_pass;
- }
- }
- convd = NULL;
- if (from_encoding != mbfl_no_encoding_pass) {
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0 TSRMLS_CC);
- if (convd != NULL) {
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode) TSRMLS_CC);
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar) TSRMLS_CC);
- } else {
- php_error(E_WARNING, "%s() unable to create converter",
- get_active_function_name(TSRMLS_C));
- }
- }
-
- /* convert encoding */
- string.no_encoding = from_encoding;
- old_rg = PG(register_globals);
- if(argc == 1) {
- PG(register_globals) = 1;
- } else {
- PG(register_globals) = 0;
- }
- n = 0;
- while (n < num) {
- /* convert variable name */
- string.val = str_list[n];
- string.len = len_list[n];
- if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resvar TSRMLS_CC) != NULL) {
- var = resvar.val;
- } else {
- var = str_list[n];
- }
- n++;
- /* convert value */
- string.val = str_list[n];
- string.len = len_list[n];
- if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resval TSRMLS_CC) != NULL) {
- val = resval.val;
- val_len = resval.len;
- } else {
- val = str_list[n];
- val_len = len_list[n];
- }
- n++;
- /* add variable to symbol table */
- php_register_variable_safe(var, val, val_len, track_vars_array TSRMLS_CC);
- mbfl_string_clear(&resvar);
- mbfl_string_clear(&resval);
- }
- PG(register_globals) = old_rg;
-
- if (convd != NULL) {
- mbfl_buffer_converter_delete(convd TSRMLS_CC);
- }
- efree((void *)str_list);
- efree((void *)len_list);
- efree((void *)encstr);
- efree((void *)separator);
- MBSTRG(http_input_identify) = from_encoding;
- MBSTRG(http_input_identify_string) = from_encoding;
- RETURN_TRUE;
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_output_handler(string contents, int status)
- Returns string in output buffer converted to the http_output encoding */
-PHP_FUNCTION(mb_output_handler)
-{
- char *arg_string;
- size_t arg_string_len;
- long arg_status;
- mbfl_string string, result;
- const char *mimetype, *charset;
- char *p;
- enum mbfl_no_encoding encoding;
- int last_feed, len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &arg_string, &arg_string_len, &arg_status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- encoding = MBSTRG(current_http_output_encoding);
-
- /* start phase only */
- if ((arg_status & PHP_OUTPUT_HANDLER_START) != 0) {
- /* delete the converter just in case. */
- if (MBSTRG(outconv)) {
- mbfl_buffer_converter_delete(MBSTRG(outconv) TSRMLS_CC);
- MBSTRG(outconv) = NULL;
- }
- if (encoding == mbfl_no_encoding_pass) {
- RETURN_STRINGL(arg_string, arg_string_len, 1);
- }
- /* if content-type is not yet set, set it and activate the converter */
- if (SG(sapi_headers).send_default_content_type ) {
- mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE;
- charset = mbfl_no2preferred_mime_name(encoding);
- if (charset) {
- len = (sizeof ("Content-Type:")-1) + strlen(mimetype) + (sizeof (";charset=")-1) + strlen(charset) + 1;
- p = emalloc(len);
- strcpy(p, "Content-Type:");
- strcat(p, mimetype);
- strcat(p, ";charset=");
- strcat(p, charset);
- if (sapi_add_header(p, len, 0) != FAILURE)
- SG(sapi_headers).send_default_content_type = 0;
- }
- /* activate the converter */
- MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0 TSRMLS_CC);
- }
- }
-
- /* just return if the converter is not activated. */
- if (MBSTRG(outconv) == NULL) {
- RETURN_STRINGL(arg_string, arg_string_len, 1);
- }
-
- /* flag */
- last_feed = ((arg_status & PHP_OUTPUT_HANDLER_END) != 0);
- /* mode */
- mbfl_buffer_converter_illegal_mode(MBSTRG(outconv), MBSTRG(current_filter_illegal_mode) TSRMLS_CC);
- mbfl_buffer_converter_illegal_substchar(MBSTRG(outconv), MBSTRG(current_filter_illegal_substchar) TSRMLS_CC);
-
- /* feed the string */
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = arg_string;
- string.len = arg_string_len;
- mbfl_buffer_converter_feed(MBSTRG(outconv), &string TSRMLS_CC);
- if (last_feed)
- mbfl_buffer_converter_flush(MBSTRG(outconv) TSRMLS_CC);
-
- /* get the converter output, and return it */
- mbfl_buffer_converter_result(MBSTRG(outconv), &result TSRMLS_CC);
- RETVAL_STRINGL(result.val, result.len, 0); /* the string is already strdup()'ed */
-
- /* delete the converter if it is the last feed. */
- if (last_feed) {
- mbfl_buffer_converter_delete(MBSTRG(outconv) TSRMLS_CC);
- MBSTRG(outconv) = NULL;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto int mb_strlen(string str [, string encoding])
- Get character numbers of a string */
-PHP_FUNCTION(mb_strlen)
-{
- pval **arg1, **arg2;
- int n;
- mbfl_string string;
-
- n = ZEND_NUM_ARGS();
- if ((n == 1 && zend_get_parameters_ex(1, &arg1) == FAILURE) ||
- (n == 2 && zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) ||
- n < 1 || n > 2) {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(arg1) == IS_ARRAY ||
- Z_TYPE_PP(arg1) == IS_OBJECT) {
- php_error(E_NOTICE, "%s() arg1 is invalid.",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- if (( n ==2 && Z_TYPE_PP(arg2) == IS_ARRAY) ||
- ( n ==2 && Z_TYPE_PP(arg2) == IS_OBJECT)) {
- php_error(E_NOTICE, "%s() arg2 is invalid.",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- convert_to_string_ex(arg1);
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- if (n == 2) {
- convert_to_string_ex(arg2);
- string.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg2));
- if(string.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg2));
- RETURN_FALSE;
- }
- }
-
- n = mbfl_strlen(&string TSRMLS_CC);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto int mb_strpos(string haystack, string needle [, int offset [, string encoding]])
- Find position of first occurrence of a string within another */
-PHP_FUNCTION(mb_strpos)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int offset, n, reverse = 0;
- mbfl_string haystack, needle;
-
- mbfl_string_init(&haystack);
- mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
- haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
- needle.no_encoding = MBSTRG(current_internal_encoding);
- offset = 0;
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg3);
- offset = Z_LVAL_PP(arg3);
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg3);
- offset = Z_LVAL_PP(arg3);
- convert_to_string_ex(arg4);
- haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg4));
- if(haystack.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg4));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- if (offset < 0 || offset > Z_STRLEN_PP(arg1)) {
- php_error(E_WARNING,"%s() offset not contained in string",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- if (Z_STRLEN_PP(arg2) == 0) {
- php_error(E_WARNING,"%s() empty needle",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- haystack.val = Z_STRVAL_PP(arg1);
- haystack.len = Z_STRLEN_PP(arg1);
- needle.val = Z_STRVAL_PP(arg2);
- needle.len = Z_STRLEN_PP(arg2);
-
- n = mbfl_strpos(&haystack, &needle, offset, reverse TSRMLS_CC);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- switch (-n) {
- case 1:
- break;
- case 2:
- php_error(E_WARNING,"%s() needle has not positive length.",
- get_active_function_name(TSRMLS_C));
- break;
- case 4:
- php_error(E_WARNING,"%s() unknown encoding or conversion error.",
- get_active_function_name(TSRMLS_C));
- break;
- case 8:
- php_error(E_NOTICE,"%s() argument is empty.",
- get_active_function_name(TSRMLS_C));
- break;
- default:
- php_error(E_WARNING,"%s() unknown error in mb_strpos.",
- get_active_function_name(TSRMLS_C));
- break;
- }
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto int mb_strrpos(string haystack, string needle [, string encoding])
- Find the last occurrence of a character in a string within another */
-PHP_FUNCTION(mb_strrpos)
-{
- pval **arg1, **arg2, **arg3;
- int n;
- mbfl_string haystack, needle;
-
- mbfl_string_init(&haystack);
- mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
- haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
- needle.no_encoding = MBSTRG(current_internal_encoding);
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg3);
- haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg3));
- if(haystack.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg3));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- if (Z_STRLEN_PP(arg1) <= 0) {
- php_error(E_WARNING,"%s() empty haystack",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- if (Z_STRLEN_PP(arg2) <= 0) {
- php_error(E_WARNING,"%s() empty needle",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- haystack.val = Z_STRVAL_PP(arg1);
- haystack.len = Z_STRLEN_PP(arg1);
- needle.val = Z_STRVAL_PP(arg2);
- needle.len = Z_STRLEN_PP(arg2);
- n = mbfl_strpos(&haystack, &needle, 0, 1 TSRMLS_CC);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_substr(string str, int start [, int length [, string encoding]])
- Returns part of a string */
-PHP_FUNCTION(mb_substr)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int argc, from, len, mblen;
- mbfl_string string, result, *ret;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- argc = ZEND_NUM_ARGS();
- switch (argc) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg4);
- string.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg4));
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg4));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- convert_to_long_ex(arg2);
- from = Z_LVAL_PP(arg2);
- if (argc >= 3) {
- convert_to_long_ex(arg3);
- len = Z_LVAL_PP(arg3);
- } else {
- len = Z_STRLEN_PP(arg1);
- }
-
- /* measures length */
- mblen = 0;
- if (from < 0 || len < 0) {
- mblen = mbfl_strlen(&string TSRMLS_CC);
- }
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (from < 0) {
- from = mblen + from;
- if (from < 0) {
- from = 0;
- }
- }
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (len < 0) {
- len = (mblen - from) + len;
- if (len < 0) {
- len = 0;
- }
- }
-
- ret = mbfl_substr(&string, &result, from, len TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_strcut(string str, int start [, int length [, string encoding]])
- Returns part of a string */
-PHP_FUNCTION(mb_strcut)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int argc, from, len;
- mbfl_string string, result, *ret;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- argc = ZEND_NUM_ARGS();
- switch (argc) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg4);
- string.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg4));
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg4));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- convert_to_long_ex(arg2);
- from = Z_LVAL_PP(arg2);
- if (argc >= 3) {
- convert_to_long_ex(arg3);
- len = Z_LVAL_PP(arg3);
- } else {
- len = Z_STRLEN_PP(arg1);
- }
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (from < 0) {
- from = Z_STRLEN_PP(arg1) + from;
- if (from < 0) {
- from = 0;
- }
- }
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (len < 0) {
- len = (Z_STRLEN_PP(arg1) - from) + len;
- if (len < 0) {
- len = 0;
- }
- }
-
- ret = mbfl_strcut(&string, &result, from, len TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto int mb_strwidth(string str [, string encoding])
- Gets terminal width of a string */
-PHP_FUNCTION(mb_strwidth)
-{
- pval **arg1, **arg2;
- int n;
- mbfl_string string;
-
- n = ZEND_NUM_ARGS();
- if ((n == 1 && zend_get_parameters_ex(1, &arg1) == FAILURE) ||
- (n == 2 && zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) ||
- n < 1 || n > 2) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- if (n == 2){
- convert_to_string_ex(arg2);
- string.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg2));
- if(string.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg2));
- RETURN_FALSE;
- }
- }
-
- n = mbfl_strwidth(&string TSRMLS_CC);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])
- Trim the string in terminal width */
-PHP_FUNCTION(mb_strimwidth)
-{
- pval **arg1, **arg2, **arg3, **arg4, **arg5;
- int from, width;
- mbfl_string string, result, marker, *ret;
-
- mbfl_string_init(&string);
- mbfl_string_init(&marker);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- marker.no_language = MBSTRG(current_language);
- marker.no_encoding = MBSTRG(current_internal_encoding);
- marker.val = NULL;
- marker.len = 0;
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 5:
- if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg5);
- string.no_encoding = marker.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg5));
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg5));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- convert_to_long_ex(arg2);
- from = Z_LVAL_PP(arg2);
- if (from < 0 || from > Z_STRLEN_PP(arg1)) {
- php_error(E_WARNING,"%s() start not contained in string",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- convert_to_long_ex(arg3);
- width = Z_LVAL_PP(arg3);
-
- if (width < 0) {
- php_error(E_WARNING,"%s() width has negative value",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() >= 4) {
- convert_to_string_ex(arg4);
- marker.val = Z_STRVAL_PP(arg4);
- marker.len = Z_STRLEN_PP(arg4);
- }
-
- ret = mbfl_strimwidth(&string, &marker, &result, from, width TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_mb_convert_encoding */
-PHPAPI char * php_mb_convert_encoding(char *input, size_t length, char *_to_encoding, char *_from_encodings, size_t *output_len TSRMLS_DC)
-{
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_buffer_converter *convd;
- int size, *list;
- char *output=NULL;
-
- if (output_len) {
- *output_len = 0;
- }
- if ( !input || !length) {
- return NULL;
- }
- /* new encoding */
- if (_to_encoding && strlen(_to_encoding)) {
- to_encoding = mbfl_name2no_encoding(_to_encoding);
- if (to_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), _to_encoding);
- return NULL;
- }
- } else {
- to_encoding = MBSTRG(current_internal_encoding);
- }
-
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- from_encoding = MBSTRG(current_internal_encoding);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
- string.val = input;
- string.len = length;
-
- /* pre-conversion encoding */
- if (_from_encodings) {
- list = NULL;
- size = 0;
- php_mbstring_parse_encoding_list(_from_encodings, strlen(_from_encodings), &list, &size, 0);
- if (size == 1) {
- from_encoding = *list;
- string.no_encoding = from_encoding;
- } else if (size > 1) {
- /* auto detect */
- from_encoding = mbfl_identify_encoding_no(&string, list, size TSRMLS_CC);
- if (from_encoding != mbfl_no_encoding_invalid) {
- string.no_encoding = from_encoding;
- } else {
- php_error(E_WARNING, "%s() unable to detect character encoding",
- get_active_function_name(TSRMLS_C));
- from_encoding = mbfl_no_encoding_pass;
- to_encoding = from_encoding;
- string.no_encoding = from_encoding;
- }
- } else {
- php_error(E_WARNING, "%s() illegal character encoding specified",
- get_active_function_name(TSRMLS_C));
- }
- if (list != NULL) {
- efree((void *)list);
- }
- }
-
- /* initialize converter */
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len TSRMLS_CC);
- if (convd == NULL) {
- php_error(E_WARNING, "%s() unable to create character encoding converter",
- get_active_function_name(TSRMLS_C));
- return NULL;
- }
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode) TSRMLS_CC);
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar) TSRMLS_CC);
-
- /* do it */
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result TSRMLS_CC);
- if (ret) {
- if (output_len) {
- *output_len = ret->len;
- }
- output = ret->val;
- }
-
- mbfl_buffer_converter_delete(convd TSRMLS_CC);
- return output;
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])
- Returns converted string in desired encoding */
-PHP_FUNCTION(mb_convert_encoding)
-{
- pval **arg_str, **arg_new, **arg_old;
- int size, i;
- size_t l,n;
- char *_from_encodings, *ret, *s_free = NULL;
-
- zval **hash_entry;
- HashTable *target_hash;
-
- _from_encodings = NULL;
- if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &arg_str, &arg_new) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &arg_str, &arg_new, &arg_old) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (Z_TYPE_PP(arg_old)) {
- case IS_ARRAY:
-
- target_hash = Z_ARRVAL_PP(arg_old);
- zend_hash_internal_pointer_reset(target_hash);
- i = zend_hash_num_elements(target_hash);
- _from_encodings = NULL;
- while (i > 0) {
- if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) {
- break;
- }
- convert_to_string_ex(hash_entry);
- if ( _from_encodings) {
- l = strlen(_from_encodings);
- n = strlen(Z_STRVAL_PP(hash_entry));
- _from_encodings = erealloc(_from_encodings, l+n+2);
- strcpy(_from_encodings+l,",");
- strcpy(_from_encodings+l+1,Z_STRVAL_PP(hash_entry));
- } else {
- _from_encodings = estrdup(Z_STRVAL_PP(hash_entry));
- }
- zend_hash_move_forward(target_hash);
- i--;
- }
- if ( !strlen(_from_encodings)) {
- efree(_from_encodings);
- _from_encodings = NULL;
- }
- s_free = _from_encodings;
- break;
- default:
- convert_to_string_ex(arg_old);
- _from_encodings = Z_STRVAL_PP(arg_old);
- break;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- /* new encoding */
- convert_to_string_ex(arg_str);
- convert_to_string_ex(arg_new);
- ret = php_mb_convert_encoding( Z_STRVAL_PP(arg_str), Z_STRLEN_PP(arg_str), Z_STRVAL_PP(arg_new), _from_encodings, &size TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret, size, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
- if ( s_free) {
- efree(s_free);
- }
-}
-/* }}} */
-
-
-/* {{{ proto string mb_detect_encoding(string str [, mixed encoding_list])
- Encodings of the given string is returned (as a string) */
-PHP_FUNCTION(mb_detect_encoding)
-{
- pval **arg_str, **arg_list;
- mbfl_string string;
- const char *ret;
- enum mbfl_no_encoding *elist;
- int size, *list;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &arg_str, &arg_list) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- /* make encoding list */
- list = NULL;
- size = 0;
- if (ZEND_NUM_ARGS() >= 2) {
- switch (Z_TYPE_PP(arg_list)) {
- case IS_ARRAY:
- if (!php_mbstring_parse_encoding_array(*arg_list, &list, &size, 0)) {
- if (list) {
- efree(list);
- size = 0;
- }
- }
- break;
- default:
- convert_to_string_ex(arg_list);
- if (!php_mbstring_parse_encoding_list(Z_STRVAL_PP(arg_list), Z_STRLEN_PP(arg_list), &list, &size, 0)) {
- if (list) {
- efree(list);
- size = 0;
- }
- }
- break;
- }
- if (size <= 0) {
- php_error(E_WARNING, "%s() illegal argument",
- get_active_function_name(TSRMLS_C));
- }
- }
-
- if (size > 0 && list != NULL) {
- elist = list;
- } else {
- elist = MBSTRG(current_detect_order_list);
- size = MBSTRG(current_detect_order_list_size);
- }
-
- convert_to_string_ex(arg_str);
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.val = Z_STRVAL_PP(arg_str);
- string.len = Z_STRLEN_PP(arg_str);
- ret = mbfl_identify_encoding_name(&string, elist, size TSRMLS_CC);
- if (list != NULL) {
- efree((void *)list);
- }
- if (ret != NULL) {
- RETVAL_STRING((char *)ret, 1);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed]]])
- Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= */
-PHP_FUNCTION(mb_encode_mimeheader)
-{
- pval **argv[4];
- enum mbfl_no_encoding charset, transenc;
- mbfl_string string, result, *ret;
- char *p, *linefeed;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 4 || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- charset = mbfl_no_encoding_pass;
- transenc = mbfl_no_encoding_base64;
- if (ZEND_NUM_ARGS() >= 2) {
- convert_to_string_ex(argv[1]);
- charset = mbfl_name2no_encoding(Z_STRVAL_PP(argv[1]));
- if (charset == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(argv[1]));
- RETURN_FALSE;
- }
- } else {
- switch (MBSTRG(current_language)) {
- case mbfl_no_language_japanese:
- charset = mbfl_no_encoding_2022jp;
- break;
- case mbfl_no_language_english:
- charset = mbfl_no_encoding_8859_1;
- transenc = mbfl_no_encoding_qprint;
- break;
- default:
- charset = mbfl_no_encoding_utf8;
- break;
- }
- }
-
- if (ZEND_NUM_ARGS() >= 3) {
- convert_to_string_ex(argv[2]);
- p = Z_STRVAL_PP(argv[2]);
- if (*p == 'B' || *p == 'b') {
- transenc = mbfl_no_encoding_base64;
- } else if (*p == 'Q' || *p == 'q') {
- transenc = mbfl_no_encoding_qprint;
- }
- }
-
- linefeed = "\r\n";
- if (ZEND_NUM_ARGS() >= 4) {
- convert_to_string_ex(argv[3]);
- linefeed = Z_STRVAL_PP(argv[3]);
- }
-
- convert_to_string_ex(argv[0]);
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = Z_STRVAL_PP(argv[0]);
- string.len = Z_STRLEN_PP(argv[0]);
- ret = mbfl_mime_header_encode(&string, &result, charset, transenc, linefeed, 0 TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0) /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_decode_mimeheader(string string)
- Decodes the MIME "encoded-word" in the string */
-PHP_FUNCTION(mb_decode_mimeheader)
-{
- pval **arg_str;
- mbfl_string string, result, *ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_str);
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = Z_STRVAL_PP(arg_str);
- string.len = Z_STRLEN_PP(arg_str);
- ret = mbfl_mime_header_decode(&string, &result, MBSTRG(current_internal_encoding) TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0) /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-
-/* {{{ proto string mb_convert_kana(string str [, string option] [, string encoding])
- Conversion between full-width character and half-width character (Japanese) */
-PHP_FUNCTION(mb_convert_kana)
-{
- pval **arg1, **arg2, **arg3;
- int argc, opt, i, n;
- char *p;
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding no_encoding;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- argc = ZEND_NUM_ARGS();
- if ((argc == 1 && zend_get_parameters_ex(1, &arg1) == FAILURE) ||
- (argc == 2 && zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) ||
- (argc == 3 && zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) ||
- argc < 1 || argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- /* option */
- if (argc >= 2){
- convert_to_string_ex(arg2);
- p = Z_STRVAL_PP(arg2);
- n = Z_STRLEN_PP(arg2);
- i = 0;
- opt = 0;
- while (i < n) {
- i++;
- switch (*p++) {
- case 'A':
- opt |= 0x1;
- break;
- case 'a':
- opt |= 0x10;
- break;
- case 'R':
- opt |= 0x2;
- break;
- case 'r':
- opt |= 0x20;
- break;
- case 'N':
- opt |= 0x4;
- break;
- case 'n':
- opt |= 0x40;
- break;
- case 'S':
- opt |= 0x8;
- break;
- case 's':
- opt |= 0x80;
- break;
- case 'K':
- opt |= 0x100;
- break;
- case 'k':
- opt |= 0x1000;
- break;
- case 'H':
- opt |= 0x200;
- break;
- case 'h':
- opt |= 0x2000;
- break;
- case 'V':
- opt |= 0x800;
- break;
- case 'C':
- opt |= 0x10000;
- break;
- case 'c':
- opt |= 0x20000;
- break;
- case 'M':
- opt |= 0x100000;
- break;
- case 'm':
- opt |= 0x200000;
- break;
- }
- }
- } else {
- opt = 0x900;
- }
-
- /* encoding */
- if (argc == 3) {
- convert_to_string_ex(arg3);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg3));
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg3));
- RETURN_FALSE;
- } else {
- string.no_encoding = no_encoding;
- }
- }
-
- ret = mbfl_ja_jp_hantozen(&string, &result, opt TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-#define PHP_MBSTR_STACK_BLOCK_SIZE 32
-
-/* {{{ proto string mb_convert_variables(string to-encoding, mixed from-encoding [, mixed ...])
- Converts the string resource in variables to desired encoding */
-PHP_FUNCTION(mb_convert_variables)
-{
- pval ***args, ***stack, **var, **hash_entry;
- HashTable *target_hash;
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_encoding_detector *identd;
- mbfl_buffer_converter *convd;
- int n, argc, stack_level, stack_max, *elist, elistsz;
- char *name;
- void *ptmp;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 3) {
- WRONG_PARAM_COUNT;
- }
- args = (pval ***)ecalloc(argc, sizeof(pval **));
- if (args == NULL) {
- RETURN_FALSE;
- }
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree((void *)args);
- WRONG_PARAM_COUNT;
- }
-
- /* new encoding */
- convert_to_string_ex(args[0]);
- to_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(args[0]));
- if (to_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(args[0]));
- efree((void *)args);
- RETURN_FALSE;
- }
-
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- from_encoding = MBSTRG(current_internal_encoding);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
-
- /* pre-conversion encoding */
- elist = NULL;
- elistsz = 0;
- switch (Z_TYPE_PP(args[1])) {
- case IS_ARRAY:
- php_mbstring_parse_encoding_array(*args[1], &elist, &elistsz, 0);
- break;
- default:
- convert_to_string_ex(args[1]);
- php_mbstring_parse_encoding_list(Z_STRVAL_PP(args[1]), Z_STRLEN_PP(args[1]), &elist, &elistsz, 0);
- break;
- }
- if (elistsz <= 0) {
- from_encoding = mbfl_no_encoding_pass;
- } else if (elistsz == 1) {
- from_encoding = *elist;
- } else {
- /* auto detect */
- from_encoding = mbfl_no_encoding_invalid;
- stack_max = PHP_MBSTR_STACK_BLOCK_SIZE;
- stack = (pval ***)emalloc(stack_max*sizeof(pval **));
- if (stack != NULL) {
- stack_level = 0;
- identd = mbfl_encoding_detector_new(elist, elistsz TSRMLS_CC);
- if (identd != NULL) {
- n = 2;
- while (n < argc || stack_level > 0) {
- if (stack_level <= 0) {
- var = args[n++];
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- }
- }
- } else {
- stack_level--;
- var = stack[stack_level];
- }
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- while (zend_hash_get_current_data(target_hash, (void **) &hash_entry) != FAILURE) {
- zend_hash_move_forward(target_hash);
- if (Z_TYPE_PP(hash_entry) == IS_ARRAY || Z_TYPE_PP(hash_entry) == IS_OBJECT) {
- if (stack_level >= stack_max) {
- stack_max += PHP_MBSTR_STACK_BLOCK_SIZE;
- ptmp = erealloc(stack, sizeof(pval **)*stack_max);
- if (ptmp == NULL) {
- php_error(E_WARNING, "%s() stack err at %s:(%d)",
- get_active_function_name(TSRMLS_C), __FILE__, __LINE__);
- continue;
- }
- stack = (pval ***)ptmp;
- }
- stack[stack_level] = var;
- stack_level++;
- var = hash_entry;
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- continue;
- }
- } else if (Z_TYPE_PP(hash_entry) == IS_STRING) {
- string.val = Z_STRVAL_PP(hash_entry);
- string.len = Z_STRLEN_PP(hash_entry);
- if (mbfl_encoding_detector_feed(identd, &string TSRMLS_CC)) {
- goto detect_end; /* complete detecting */
- }
- }
- }
- }
- } else if (Z_TYPE_PP(var) == IS_STRING) {
- string.val = Z_STRVAL_PP(args[n]);
- string.len = Z_STRLEN_PP(args[n]);
- if (mbfl_encoding_detector_feed(identd, &string TSRMLS_CC)) {
- goto detect_end; /* complete detecting */
- }
- }
- }
-detect_end:
- from_encoding = mbfl_encoding_detector_judge(identd TSRMLS_CC);
- mbfl_encoding_detector_delete(identd TSRMLS_CC);
- }
- efree(stack);
- }
- if (from_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unable to detect encoding",
- get_active_function_name(TSRMLS_C));
- from_encoding = mbfl_no_encoding_pass;
- }
- }
- if (elist != NULL) {
- efree((void *)elist);
- }
- /* create converter */
- convd = NULL;
- if (from_encoding != mbfl_no_encoding_pass) {
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0 TSRMLS_CC);
- if (convd == NULL) {
- php_error(E_WARNING, "%s() unable to create converter",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode) TSRMLS_CC);
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar) TSRMLS_CC);
- }
-
- /* convert */
- if (convd != NULL) {
- stack_max = PHP_MBSTR_STACK_BLOCK_SIZE;
- stack = (pval ***)emalloc(stack_max*sizeof(pval **));
- if (stack != NULL) {
- stack_level = 0;
- n = 2;
- while (n < argc || stack_level > 0) {
- if (stack_level <= 0) {
- var = args[n++];
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- }
- }
- } else {
- stack_level--;
- var = stack[stack_level];
- }
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- while (zend_hash_get_current_data(target_hash, (void **) &hash_entry) != FAILURE) {
- zend_hash_move_forward(target_hash);
- if (Z_TYPE_PP(hash_entry) == IS_ARRAY || Z_TYPE_PP(hash_entry) == IS_OBJECT) {
- if (stack_level >= stack_max) {
- stack_max += PHP_MBSTR_STACK_BLOCK_SIZE;
- ptmp = erealloc(stack, sizeof(pval **)*stack_max);
- if (ptmp == NULL) {
- php_error(E_WARNING, "%s() stack err at %s:(%d)",
- get_active_function_name(TSRMLS_C), __FILE__, __LINE__);
- continue;
- }
- stack = (pval ***)ptmp;
- }
- stack[stack_level] = var;
- stack_level++;
- var = hash_entry;
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- continue;
- }
- } else if (Z_TYPE_PP(hash_entry) == IS_STRING) {
- string.val = Z_STRVAL_PP(hash_entry);
- string.len = Z_STRLEN_PP(hash_entry);
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result TSRMLS_CC);
- if (ret != NULL) {
- STR_FREE(Z_STRVAL_PP(hash_entry));
- Z_STRVAL_PP(hash_entry) = ret->val;
- Z_STRLEN_PP(hash_entry) = ret->len;
- }
- }
- }
- }
- } else if (Z_TYPE_PP(var) == IS_STRING) {
- string.val = Z_STRVAL_PP(var);
- string.len = Z_STRLEN_PP(var);
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result TSRMLS_CC);
- if (ret != NULL) {
- STR_FREE(Z_STRVAL_PP(var));
- Z_STRVAL_PP(var) = ret->val;
- Z_STRLEN_PP(var) = ret->len;
- }
- }
- }
- efree(stack);
- }
- mbfl_buffer_converter_delete(convd TSRMLS_CC);
- }
-
- efree((void *)args);
-
- name = (char *)mbfl_no_encoding2name(from_encoding);
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* HTML numeric entity */
-static void
-php_mbstr_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- pval **arg1, **arg2, **arg3, **hash_entry;
- HashTable *target_hash;
- int argc, i, *convmap, *mapelm, mapsize=0;
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding no_encoding;
-
- argc = ZEND_NUM_ARGS();
- if ((argc == 2 && zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) ||
- (argc == 3 && zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) ||
- argc < 2 || argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- /* encoding */
- if (argc == 3) {
- convert_to_string_ex(arg3);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg3));
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error(E_WARNING, "%s() unknown encoding \"%s\"",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(arg3));
- RETURN_FALSE;
- } else {
- string.no_encoding = no_encoding;
- }
- }
-
- /* conversion map */
- convmap = NULL;
- if (Z_TYPE_PP(arg2) == IS_ARRAY){
- target_hash = Z_ARRVAL_PP(arg2);
- zend_hash_internal_pointer_reset(target_hash);
- i = zend_hash_num_elements(target_hash);
- if (i > 0) {
- convmap = (int *)emalloc(i*sizeof(int));
- if (convmap != NULL) {
- mapelm = convmap;
- mapsize = 0;
- while (i > 0) {
- if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) {
- break;
- }
- convert_to_long_ex(hash_entry);
- *mapelm++ = Z_LVAL_PP(hash_entry);
- mapsize++;
- i--;
- zend_hash_move_forward(target_hash);
- }
- }
- }
- }
- if (convmap == NULL) {
- RETURN_FALSE;
- }
- mapsize /= 4;
-
- ret = mbfl_html_numeric_entity(&string, &result, convmap, mapsize, type TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0);
- } else {
- RETVAL_FALSE;
- }
- efree((void *)convmap);
-}
-
-/* {{{ proto string mb_encode_numericentity(string string, array convmap [, string encoding])
- Converts specified characters to HTML numeric entities */
-PHP_FUNCTION(mb_encode_numericentity)
-{
- php_mbstr_numericentity_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto string mb_decode_numericentity(string string, array convmap [, string encoding])
- Converts HTML numeric entities to character code */
-PHP_FUNCTION(mb_decode_numericentity)
-{
- php_mbstr_numericentity_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-
-#if HAVE_SENDMAIL
-/* {{{ proto int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
- Sends an email message with MIME scheme */
-PHP_FUNCTION(mb_send_mail)
-{
- int argc, n;
- pval **argv[5];
- char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL, *extra_cmd=NULL;
- char *message_buf=NULL, *subject_buf=NULL, *p;
- mbfl_string orig_str, conv_str;
- mbfl_string *pstr; /* pointer to mbfl string for return value */
- enum mbfl_no_encoding
- tran_cs, /* transfar text charset */
- head_enc, /* header transfar encoding */
- body_enc; /* body transfar encoding */
- mbfl_memory_device device; /* automatic allocateable buffer for additional header */
- int err = 0;
-
- /* initialize */
- mbfl_memory_device_init(&device, 0, 0 TSRMLS_CC);
- mbfl_string_init(&orig_str);
- mbfl_string_init(&conv_str);
-
- /* character-set, transfer-encoding */
- tran_cs = mbfl_no_encoding_utf8;
- head_enc = mbfl_no_encoding_base64;
- body_enc = mbfl_no_encoding_base64;
- switch (MBSTRG(current_language)) {
- case mbfl_no_language_japanese:
- tran_cs = mbfl_no_encoding_2022jp;
- body_enc = mbfl_no_encoding_7bit;
- break;
- case mbfl_no_language_english:
- tran_cs = mbfl_no_encoding_8859_1;
- head_enc = mbfl_no_encoding_qprint;
- body_enc = mbfl_no_encoding_qprint;
- break;
- }
-
- argc = ZEND_NUM_ARGS();
- if (argc < 3 || argc > 5 || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* To: */
- convert_to_string_ex(argv[0]);
- if (Z_STRVAL_PP(argv[0])) {
- to = Z_STRVAL_PP(argv[0]);
- } else {
- php_error(E_WARNING, "%s() no to field",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
-
- /* Subject: */
- convert_to_string_ex(argv[1]);
- if (Z_STRVAL_PP(argv[1])) {
- orig_str.no_language = MBSTRG(current_language);
- orig_str.val = Z_STRVAL_PP(argv[1]);
- orig_str.len = Z_STRLEN_PP(argv[1]);
- orig_str.no_encoding = mbfl_identify_encoding_no(&orig_str, MBSTRG(current_detect_order_list), MBSTRG(current_detect_order_list_size) TSRMLS_CC);
- if(orig_str.no_encoding == mbfl_no_encoding_invalid) {
- orig_str.no_encoding = MBSTRG(current_internal_encoding);
- }
- pstr = mbfl_mime_header_encode(&orig_str, &conv_str, tran_cs, head_enc, "\n", sizeof("Subject: [PHP-jp nnnnnnnn]") TSRMLS_CC);
- if (pstr != NULL) {
- subject_buf = subject = pstr->val;
- } else {
- subject = Z_STRVAL_PP(argv[1]);
- }
- } else {
- php_error(E_WARNING, "%s() no subject field",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
-
- /* message body */
- convert_to_string_ex(argv[2]);
- if (Z_STRVAL_PP(argv[2])) {
- orig_str.no_language = MBSTRG(current_language);
- orig_str.val = Z_STRVAL_PP(argv[2]);
- orig_str.len = Z_STRLEN_PP(argv[2]);
- orig_str.no_encoding = mbfl_identify_encoding_no(&orig_str, MBSTRG(current_detect_order_list), MBSTRG(current_detect_order_list_size) TSRMLS_CC);
- if(orig_str.no_encoding == mbfl_no_encoding_invalid) {
- orig_str.no_encoding = MBSTRG(current_internal_encoding);
- }
- pstr = mbfl_convert_encoding(&orig_str, &conv_str, tran_cs TSRMLS_CC);
- if (pstr != NULL) {
- message_buf = message = pstr->val;
- } else {
- message = Z_STRVAL_PP(argv[2]);
- }
- } else {
- /* this is not really an error, so it is allowed. */
- php_error(E_WARNING, "%s() no message string",
- get_active_function_name(TSRMLS_C));
- message = NULL;
- }
-
- /* other headers */
-#define PHP_MBSTR_MAIL_MIME_HEADER1 "Mime-Version: 1.0\nContent-Type: text/plain"
-#define PHP_MBSTR_MAIL_MIME_HEADER2 "; charset="
-#define PHP_MBSTR_MAIL_MIME_HEADER3 "\nContent-Transfer-Encoding: "
- if (argc >= 4) {
- convert_to_string_ex(argv[3]);
- p = Z_STRVAL_PP(argv[3]);
- n = Z_STRLEN_PP(argv[3]);
- mbfl_memory_device_strncat(&device, p, n TSRMLS_CC);
- if (p[n - 1] != '\n') {
- mbfl_memory_device_strncat(&device, "\n", 1 TSRMLS_CC);
- }
- }
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER1, sizeof(PHP_MBSTR_MAIL_MIME_HEADER1) - 1 TSRMLS_CC);
- p = (char *)mbfl_no2preferred_mime_name(tran_cs);
- if (p != NULL) {
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER2, sizeof(PHP_MBSTR_MAIL_MIME_HEADER2) - 1 TSRMLS_CC);
- mbfl_memory_device_strcat(&device, p TSRMLS_CC);
- }
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER3, sizeof(PHP_MBSTR_MAIL_MIME_HEADER3) - 1 TSRMLS_CC);
- p = (char *)mbfl_no2preferred_mime_name(body_enc);
- if (p == NULL) {
- p = "7bit";
- }
- mbfl_memory_device_strcat(&device, p TSRMLS_CC);
- mbfl_memory_device_output('\0', &device TSRMLS_CC);
- headers = device.buffer;
-
- if (argc == 5) { /* extra options that get passed to the mailer */
- convert_to_string_ex(argv[4]);
- extra_cmd = Z_STRVAL_PP(argv[4]);
- }
-
- if (!err && php_mail(to, subject, message, headers, extra_cmd TSRMLS_CC)) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-
- if (subject_buf) {
- efree((void *)subject_buf);
- }
- if (message_buf) {
- efree((void *)message_buf);
- }
- mbfl_memory_device_clear(&device TSRMLS_CC);
-}
-/* }}} */
-
-#else /* HAVE_SENDMAIL */
-
-PHP_FUNCTION(mb_send_mail)
-{
- RETURN_FALSE;
-}
-
-#endif /* HAVE_SENDMAIL */
-
-/* {{{ proto string mb_get_info([string type])
- Returns the current settings of mbstring */
-PHP_FUNCTION(mb_get_info)
-{
- zval **type;
- char *name;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc > 1 || zend_get_parameters_ex(1, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(type);
-
- if (argc == 0 || !strcasecmp("all", Z_STRVAL_PP(type))) {
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_internal_encoding)))
- != NULL) {
- add_assoc_string(return_value, "internal_encoding", name, 1);
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(http_input_identify)))
- != NULL) {
- add_assoc_string(return_value, "http_input", name, 1);
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_http_output_encoding)))
- != NULL) {
- add_assoc_string(return_value, "http_output", name, 1);
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(func_overload)))
- != NULL) {
- add_assoc_string(return_value, "func_overload", name, 1);
- }
- } else if (!strcasecmp("internal_encoding", Z_STRVAL_PP(type))) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_internal_encoding)))
- != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else if (!strcasecmp("http_input", Z_STRVAL_PP(type))) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(http_input_identify)))
- != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else if (!strcasecmp("http_output", Z_STRVAL_PP(type))) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_http_output_encoding)))
- != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else if (!strcasecmp("func_overload", Z_STRVAL_PP(type))) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(func_overload)))
- != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-#ifdef ZEND_MULTIBYTE
-PHPAPI int php_mbstring_set_zend_encoding(TSRMLS_D)
-{
- /* 'd better use mbfl_memory_device? */
- char *name, *list = NULL;
- int n, *entry, list_size = 0;
- zend_encoding_detector encoding_detector;
- zend_encoding_converter encoding_converter;
- zend_multibyte_oddlen multibyte_oddlen;
-
- /* notify script encoding to Zend Engine */
- entry = MBSTRG(script_encoding_list);
- n = MBSTRG(script_encoding_list_size);
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- list_size += strlen(name) + 1;
- if (!list)
- {
- list = (char*)emalloc(list_size);
- if (!list)
- return -1;
- *list = (char)NULL;
- }
- else
- {
- list = (char*)erealloc(list, list_size);
- if (!list)
- return -1;
- strcat(list, ",");
- }
- strcat(list, name);
- }
- entry++;
- n--;
- }
- zend_multibyte_set_script_encoding(list, (list ? strlen(list) : 0) TSRMLS_CC);
- if (list)
- efree(list);
-
- encoding_detector = php_mbstring_encoding_detector;
- encoding_converter = NULL;
- multibyte_oddlen = php_mbstring_oddlen;
-
-#if defined(MBSTR_ENC_TRANS)
- /* notify internal encoding to Zend Engine */
- name = (char*)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
- zend_multibyte_set_internal_encoding(name, strlen(name) TSRMLS_CC);
-
- encoding_converter = php_mbstring_encoding_converter;
-#endif /* defined(MBSTR_ENC_TRANS) */
-
- zend_multibyte_set_functions(encoding_detector, encoding_converter,
- multibyte_oddlen TSRMLS_CC);
-
- return 0;
-}
-
-/*
- * mb_detect_encoding (interface for Zend Engine)
- */
-char* php_mbstring_encoding_detector(char *arg_string, int arg_length, char *arg_list TSRMLS_DC)
-{
- mbfl_string string;
- const char *ret;
- enum mbfl_no_encoding *elist;
- int size, *list;
-
- /* make encoding list */
- list = NULL;
- size = 0;
- php_mbstring_parse_encoding_list(arg_list, strlen(arg_list), &list, &size, 0);
- if (size <= 0)
- return NULL;
-
- if (size > 0 && list != NULL) {
- elist = list;
- } else {
- elist = MBSTRG(current_detect_order_list);
- size = MBSTRG(current_detect_order_list_size);
- }
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.val = arg_string;
- string.len = arg_length;
- ret = mbfl_identify_encoding_name(&string, elist, size);
- if (list != NULL) {
- efree((void *)list);
- }
- if (ret != NULL) {
- return estrdup(ret);
- } else {
- return NULL;
- }
-}
-
-
-/*
- * mb_convert_encoding (interface for Zend Engine)
- */
-int php_mbstring_encoding_converter(char **to, int *to_length, char *from,
- int from_length, const char *encoding_to, const char *encoding_from
- TSRMLS_DC)
-{
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_buffer_converter *convd;
-
- /* new encoding */
- to_encoding = mbfl_name2no_encoding(encoding_to);
- if (to_encoding == mbfl_no_encoding_invalid)
- return -1;
-
- /* old encoding */
- from_encoding = mbfl_name2no_encoding(encoding_from);
- if (from_encoding == mbfl_no_encoding_invalid)
- return -1;
-
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
- string.val = from;
- string.len = from_length;
-
- /* initialize converter */
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
- if (convd == NULL)
- return -1;
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
-
- /* do it */
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- if (ret != NULL) {
- *to = ret->val;
- *to_length = ret->len;
- }
- mbfl_buffer_converter_delete(convd);
-
- return ret ? 0 : -1;
-}
-
-
-/*
- * returns number of odd (e.g. appears only first byte of multibyte
- * character) chars
- */
-int php_mbstring_oddlen(char *string, int length, const char *encoding TSRMLS_DC)
-{
- mbfl_string mb_string;
-
- mbfl_string_init(&mb_string);
- mb_string.no_language = MBSTRG(current_language);
- mb_string.no_encoding = mbfl_name2no_encoding(encoding);
- mb_string.val = string;
- mb_string.len = length;
-
- if(mb_string.no_encoding == mbfl_no_encoding_invalid)
- return 0;
-
- return mbfl_oddlen(&mb_string);
-}
-
-#endif /* ZEND_MULTIBYTE */
-
-#endif /* HAVE_MBSTRING */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/mbstring.dsp b/ext/mbstring/mbstring.dsp
deleted file mode 100644
index 4c74ed6f3f..0000000000
--- a/ext/mbstring/mbstring.dsp
+++ /dev/null
@@ -1,179 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mbstring" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mbstring - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mbstring.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mbstring.mak" CFG="mbstring - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mbstring - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mbstring - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "mbstring___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "mbstring___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MBSTRING_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D ZTS=1 /D "COMPILE_DL_MBSTRING" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MBSTRING=1 /D "MBSTR_ENC_TRANS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mbstring.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "mbstring___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "mbstring___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "mbstring___Win32_Debug_TS"
-# PROP Intermediate_Dir "mbstring___Win32_Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MBSTRING_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "MBSTRING_EXPORTS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MBSTRING=1 /D "MBSTR_ENC_TRANS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mbstring.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mbstring - Win32 Release_TS"
-# Name "mbstring - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mbfilter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_cn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_ja.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_tw.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbregex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbstring.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_mbregex.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\cp932_table.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_cn.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_ja.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfilter_tw.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbregex.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbstring.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\unicode_table.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\unicode_table_cn.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\unicode_table_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\unicode_table_tw.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h
deleted file mode 100644
index 98623e77b4..0000000000
--- a/ext/mbstring/mbstring.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * PHP4 Multibyte String module "mbstring" (currently only for Japanese)
- *
- * History:
- * 2000.5.19 Release php-4.0RC2_jstring-1.0
- * 2001.4.1 Release php4_jstring-1.0.91
- * 2001.4.30 Release php4-jstring-1.1 (contribute to The PHP Group)
- * 2001.5.1 Renamed from jstring to mbstring (hirokawa@php.net)
- */
-
-/*
- * PHP3 Internationalization support program.
- *
- * Copyright (c) 1999,2000 by the PHP3 internationalization team.
- * All rights reserved.
- *
- * See README_PHP3-i18n-ja for more detail.
- *
- * Authors:
- * Hironori Sato <satoh@jpnnet.com>
- * Shigeru Kanemoto <sgk@happysize.co.jp>
- * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- */
-
-
-#ifndef _MBSTRING_H
-#define _MBSTRING_H
-
-#ifdef COMPILE_DL_MBSTRING
-#undef HAVE_MBSTRING
-#define HAVE_MBSTRING 1
-#undef PHPAPI
-#define PHPAPI
-#endif
-
-#if HAVE_MBSTRING
-
-#include "mbfilter.h"
-
-#define PHP_MBSTRING_API 20020405
-
-PHPAPI char * php_mb_convert_encoding(char *input, size_t length, char *_to_encoding, char *_from_encodings, size_t *output_len TSRMLS_DC);
-PHPAPI int php_mb_check_encoding_list(const char *encoding_list TSRMLS_DC);
-
-#if HAVE_MBREGEX
-#include "mbregex.h"
-#endif
-
-extern zend_module_entry mbstring_module_entry;
-#define mbstring_module_ptr &mbstring_module_entry
-
-PHP_MINIT_FUNCTION(mbstring);
-PHP_MSHUTDOWN_FUNCTION(mbstring);
-PHP_RINIT_FUNCTION(mbstring);
-PHP_RSHUTDOWN_FUNCTION(mbstring);
-PHP_MINFO_FUNCTION(mbstring);
-
-/* php function registration */
-PHP_FUNCTION(mb_language);
-PHP_FUNCTION(mb_internal_encoding);
-PHP_FUNCTION(mb_http_input);
-PHP_FUNCTION(mb_http_output);
-PHP_FUNCTION(mb_detect_order);
-PHP_FUNCTION(mb_substitute_character);
-PHP_FUNCTION(mb_preferred_mime_name);
-PHP_FUNCTION(mb_parse_str);
-PHP_FUNCTION(mb_output_handler);
-PHP_FUNCTION(mb_strlen);
-PHP_FUNCTION(mb_strpos);
-PHP_FUNCTION(mb_strrpos);
-PHP_FUNCTION(mb_substr);
-PHP_FUNCTION(mb_strcut);
-PHP_FUNCTION(mb_strwidth);
-PHP_FUNCTION(mb_strimwidth);
-PHP_FUNCTION(mb_convert_encoding);
-PHP_FUNCTION(mb_detect_encoding);
-PHP_FUNCTION(mb_convert_kana);
-PHP_FUNCTION(mb_encode_mimeheader);
-PHP_FUNCTION(mb_decode_mimeheader);
-PHP_FUNCTION(mb_convert_variables);
-PHP_FUNCTION(mb_encode_numericentity);
-PHP_FUNCTION(mb_decode_numericentity);
-PHP_FUNCTION(mb_send_mail);
-PHP_FUNCTION(mb_get_info);
-#if HAVE_MBREGEX
-PHP_FUNCTION(mb_regex_encoding);
-PHP_FUNCTION(mb_ereg);
-PHP_FUNCTION(mb_eregi);
-PHP_FUNCTION(mb_ereg_replace);
-PHP_FUNCTION(mb_eregi_replace);
-PHP_FUNCTION(mb_split);
-PHP_FUNCTION(mb_ereg_match);
-PHP_FUNCTION(mb_ereg_search);
-PHP_FUNCTION(mb_ereg_search_pos);
-PHP_FUNCTION(mb_ereg_search_regs);
-PHP_FUNCTION(mb_ereg_search_init);
-PHP_FUNCTION(mb_ereg_search_getregs);
-PHP_FUNCTION(mb_ereg_search_getpos);
-PHP_FUNCTION(mb_ereg_search_setpos);
-#endif
-
-#if HAVE_MBREGEX
-#define PHP_MBREGEX_MAXCACHE 50
-int php_mbregex_name2mbctype(const char *pname);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(mbstring)
- int language;
- int current_language;
- int internal_encoding;
- int current_internal_encoding;
-#ifdef ZEND_MULTIBYTE
- int *script_encoding_list;
- int script_encoding_list_size;
-#endif /* ZEND_MULTIBYTE */
- int http_output_encoding;
- int current_http_output_encoding;
- int http_input_identify;
- int http_input_identify_get;
- int http_input_identify_post;
- int http_input_identify_cookie;
- int http_input_identify_string;
- int *http_input_list;
- int http_input_list_size;
- int *detect_order_list;
- int detect_order_list_size;
- int *current_detect_order_list;
- int current_detect_order_list_size;
- int filter_illegal_mode;
- int filter_illegal_substchar;
- int current_filter_illegal_mode;
- int current_filter_illegal_substchar;
- long func_overload;
- mbfl_buffer_converter *outconv;
-#if HAVE_MBREGEX
- int default_mbctype;
- int current_mbctype;
- HashTable ht_rc;
- zval **search_str;
- zval *search_str_val;
- unsigned int search_pos;
- mb_regex_t *search_re;
- struct mbre_registers *search_regs;
-#endif
-ZEND_END_MODULE_GLOBALS(mbstring)
-
-#define MB_OVERLOAD_MAIL 1
-#define MB_OVERLOAD_STRING 2
-#define MB_OVERLOAD_REGEX 4
-
-struct mb_overload_def {
- int type;
- char *orig_func;
- char *ovld_func;
- char *save_func;
-};
-
-#ifdef ZTS
-#define MBSTRG(v) TSRMG(mbstring_globals_id, zend_mbstring_globals *, v)
-#else
-#define MBSTRG(v) (mbstring_globals.v)
-#endif
-
-#ifdef ZEND_MULTIBYTE
-PHPAPI int php_mbstring_set_zend_encoding(TSRMLS_D);
-char* php_mbstring_encoding_detector(char *string, int length, char *list
- TSRMLS_DC);
-int php_mbstring_encoding_converter(char **to, int *to_length, char *from,
- int from_length, const char *encoding_to, const char *encoding_from
- TSRMLS_DC);
-int php_mbstring_oddlen(char *string, int length, const char *encoding TSRMLS_DC);
-#endif /* ZEND_MULTIBYTE */
-
-#else /* HAVE_MBSTRING */
-
-#define mbstring_module_ptr NULL
-
-#endif /* HAVE_MBSTRING */
-
-#define phpext_mbstring_ptr mbstring_module_ptr
-
-#endif /* _MBSTRING_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
deleted file mode 100644
index 147d464b38..0000000000
--- a/ext/mbstring/php_mbregex.c
+++ /dev/null
@@ -1,969 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "mbregex.h"
-#include "mbstring.h"
-
-#if HAVE_MBREGEX
-
-ZEND_EXTERN_MODULE_GLOBALS(mbstring)
-
-/*
- * string buffer
- */
-struct strbuf {
- unsigned char* buffer;
- int length;
- int pos;
- int allocsz;
-};
-
-static void
-php_mbregex_strbuf_init(struct strbuf *pd)
-{
- if (pd) {
- pd->buffer = (char*)0;
- pd->length = 0;
- pd->pos = 0;
- pd->allocsz = 64;
- }
-}
-
-static int
-php_mbregex_strbuf_ncat(struct strbuf *pd, const unsigned char *psrc, int len)
-{
- if (pd == NULL || psrc == NULL) {
- return -1;
- }
-
- if ((pd->pos + len) >= pd->length) {
- /* reallocate buffer */
- int newlen = pd->length + pd->allocsz + len;
- unsigned char *tmp = (unsigned char*)erealloc((void*)pd->buffer, newlen);
- if (tmp == NULL) {
- return -1;
- }
- pd->length = newlen;
- pd->buffer = tmp;
- }
-
- while (len > 0) {
- pd->buffer[pd->pos++] = *psrc++;
- len--;
- }
-
- return len;
-}
-
-
-/*
- * encoding name resolver
- */
-int
-php_mbregex_name2mbctype(const char *pname)
-{
- int mbctype;
-
- mbctype = -1;
- if (pname != NULL) {
- if (strcasecmp("EUC-JP", pname) == 0) {
- mbctype = MBCTYPE_EUC;
- } else if (strcasecmp("UTF-8", pname) == 0) {
- mbctype = MBCTYPE_UTF8;
- } else if (strcasecmp("SJIS", pname) == 0) {
- mbctype = MBCTYPE_SJIS;
- } else if (strcasecmp("ascii", pname) == 0) {
- mbctype = MBCTYPE_ASCII;
- } else if (strcasecmp("euc", pname) == 0) {
- mbctype = MBCTYPE_EUC;
- } else if (strcasecmp("eucJP", pname) == 0) {
- mbctype = MBCTYPE_EUC;
- } else if (strcasecmp("EUC_JP", pname) == 0) {
- mbctype = MBCTYPE_EUC;
- } else if (strcasecmp("Shift_JIS", pname) == 0) {
- mbctype = MBCTYPE_SJIS;
- }
- }
-
- return mbctype;
-}
-
-static const char*
-php_mbregex_mbctype2name(int mbctype)
-{
- const char *p;
-
- if (mbctype == MBCTYPE_EUC) {
- p = "EUC-JP";
- } else if(mbctype == MBCTYPE_UTF8) {
- p = "UTF-8";
- } else if(mbctype == MBCTYPE_SJIS) {
- p = "SJIS";
- } else if(mbctype == MBCTYPE_ASCII) {
- p = "ascii";
- } else {
- p = "unknown";
- }
-
- return p;
-}
-
-
-/*
- * regex cache
- */
-static int
-php_mbregex_compile_pattern(mb_regex_t *pre, const char *pattern, int patlen, int options, int mbctype TSRMLS_DC)
-{
- int res = 0;
- const char *err_str = NULL;
- mb_regex_t *rc = NULL;
-
- if(zend_hash_find(&MBSTRG(ht_rc), (char *)pattern, patlen+1, (void **) &rc) == FAILURE ||
- rc->options != options || rc->mbctype != mbctype) {
- memset(pre, 0, sizeof(*pre));
- pre->fastmap = (char*)emalloc((1 << MBRE_BYTEWIDTH)*sizeof(char));
- if (pre->fastmap) {
- pre->options = options;
- pre->mbctype = mbctype;
- err_str = mbre_compile_pattern(pattern, patlen, pre);
- if (!err_str) {
- zend_hash_update(&MBSTRG(ht_rc), (char *) pattern, patlen+1, (void *) pre, sizeof(*pre), NULL);
- } else {
- efree(pre->fastmap);
- pre->fastmap = (char*)0;
- php_error(E_WARNING, "mbregex compile err: %s", err_str);
- res = 1;
- }
- } else {
- php_error(E_WARNING, "Unable to allocate memory in mbregex_compile_pattern");
- res = 1;
- }
- } else {
- memcpy(pre, rc, sizeof(*pre));
- }
-
- return res;
-}
-
-static void
-php_mbregex_init_option(const char *parg, int narg, int *option, int *eval)
-{
- int n;
- char c;
-
- if (parg) {
- n = 0;
- while(n < narg) {
- c = parg[n++];
- if (option) {
- switch (c) {
- case 'i':
- *option |= MBRE_OPTION_IGNORECASE;
- break;
- case 'x':
- *option |= MBRE_OPTION_EXTENDED;
- break;
- case 'm':
- *option |= MBRE_OPTION_MULTILINE;
- break;
- case 's':
- *option |= MBRE_OPTION_SINGLELINE;
- break;
- case 'p':
- *option |= MBRE_OPTION_POSIXLINE;
- break;
- case 'l':
- *option |= MBRE_OPTION_LONGEST;
- break;
- default:
- break;
- }
- }
- if (eval && (c == 'e')) {
- *eval = 1;
- }
- }
- }
-}
-
-
-/*
- * php funcions
- */
-
-/* {{{ proto string mb_regex_encoding([string encoding])
- Returns the current encoding for regex as a string. */
-PHP_FUNCTION(mb_regex_encoding)
-{
- zval **arg1;
- int mbctype;
-
- if (ZEND_NUM_ARGS() == 0) {
- RETVAL_STRING((char*)php_mbregex_mbctype2name(MBSTRG(current_mbctype)), 1);
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- mbctype = php_mbregex_name2mbctype(Z_STRVAL_PP(arg1));
- if (mbctype < 0) {
- php_error(E_WARNING, "unknown encoding \"%s\"", Z_STRVAL_PP(arg1));
- RETVAL_FALSE;
- } else {
- MBSTRG(current_mbctype) = mbctype;
- RETVAL_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-
-/* regex match */
-static void
-php_mbereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- zval **arg_pattern, **arg_string, **array = NULL;
- mb_regex_t re;
- struct mbre_registers regs = {0, 0, 0, 0};
- int i, err, match_len, string_len, option, beg, end;
- char *str;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg_pattern, &arg_string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &arg_pattern, &arg_string, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- option = 0;
- if (icase) {
- option |= MBRE_OPTION_IGNORECASE;
- }
-
- /* compile the regular expression from the supplied regex */
- if (Z_TYPE_PP(arg_pattern) == IS_STRING) {
- option |= MBRE_OPTION_EXTENDED;
- } else {
- /* we convert numbers to integers and treat them as a string */
- if (Z_TYPE_PP(arg_pattern) == IS_DOUBLE) {
- convert_to_long_ex(arg_pattern); /* get rid of decimal places */
- }
- convert_to_string_ex(arg_pattern);
- /* don't bother doing an extended regex with just a number */
- }
- err = php_mbregex_compile_pattern(
- &re,
- Z_STRVAL_PP(arg_pattern),
- Z_STRLEN_PP(arg_pattern),
- option, MBSTRG(current_mbctype) TSRMLS_CC);
- if (err) {
- RETURN_FALSE;
- }
-
- /* actually execute the regular expression */
- convert_to_string_ex(arg_string);
- err = mbre_search(
- &re,
- Z_STRVAL_PP(arg_string),
- Z_STRLEN_PP(arg_string),
- 0, Z_STRLEN_PP(arg_string),
- &regs);
- if (err < 0) {
- mbre_free_registers(&regs);
- RETURN_FALSE;
- }
-
- match_len = 1;
- str = Z_STRVAL_PP(arg_string);
- if (array) {
- match_len = regs.end[0] - regs.beg[0];
- string_len = Z_STRLEN_PP(arg_string);
- zval_dtor(*array); /* start with clean array */
- array_init(*array);
- for (i = 0; i < regs.num_regs; i++) {
- beg = regs.beg[i];
- end = regs.end[i];
- if (beg >= 0 && beg < end && end <= string_len) {
- add_index_stringl(*array, i, &str[beg], end - beg, 1);
- } else {
- add_index_bool(*array, i, 0);
- }
- }
- }
-
- mbre_free_registers(&regs);
- if (match_len == 0) {
- match_len = 1;
- }
- RETVAL_LONG(match_len);
-}
-
-/* {{{ proto int mb_ereg(string pattern, string string [, array registers])
- Regular expression match for multibyte string */
-PHP_FUNCTION(mb_ereg)
-{
- php_mbereg_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int mb_eregi(string pattern, string string [, array registers])
- Case-insensitive regular expression match for multibyte string */
-PHP_FUNCTION(mb_eregi)
-{
- php_mbereg_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-
-/* regex replacement */
-static void
-php_mbereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, int option)
-{
- zval **arg_pattern, **arg_replace, **arg_string, **arg_option;
- char *p, *string, *replace;
- mb_regex_t re;
- struct mbre_registers regs = {0, 0, 0, 0};
- struct strbuf outdev, evaldev, *pdevice;
- int i, n, err, pos, replace_len, string_len, eval;
- char *description = NULL;
- zval retval;
-
- eval = 0;
- switch(ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &arg_pattern, &arg_replace, &arg_string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case 4:
- if (zend_get_parameters_ex(4, &arg_pattern, &arg_replace, &arg_string, &arg_option) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_option);
- option = 0;
- php_mbregex_init_option(Z_STRVAL_PP(arg_option), Z_STRLEN_PP(arg_option), &option, &eval);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(arg_pattern);
- /* create regex pattern buffer */
- err = php_mbregex_compile_pattern(
- &re,
- Z_STRVAL_PP(arg_pattern),
- Z_STRLEN_PP(arg_pattern),
- option, MBSTRG(current_mbctype) TSRMLS_CC);
- if (err) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(arg_replace);
- replace = Z_STRVAL_PP(arg_replace);
- replace_len = Z_STRLEN_PP(arg_replace);
-
- convert_to_string_ex(arg_string);
- string = Z_STRVAL_PP(arg_string);
- string_len = Z_STRLEN_PP(arg_string);
-
- /* initialize string buffer (auto reallocate buffer) */
- php_mbregex_strbuf_init(&outdev);
- php_mbregex_strbuf_init(&evaldev);
- outdev.allocsz = (string_len >> 2) + 8;
-
- if (eval) {
- pdevice = &evaldev;
- description = zend_make_compiled_string_description("mbregex replace" TSRMLS_CC);
- } else {
- pdevice = &outdev;
- description = NULL;
- }
-
- /* do the actual work */
- err = 0;
- pos = 0;
- while (err >= 0) {
- err = mbre_search(&re, string, string_len, pos, string_len - pos, &regs);
- if (err <= -2) {
- php_error(E_WARNING, "mbregex search failure in php_mbereg_replace_exec()");
- break;
- }
- if (err >= 0) {
- /* copy the part of the string before the match */
- php_mbregex_strbuf_ncat(&outdev, &string[pos], regs.beg[0] - pos);
- /* copy replacement and backrefs */
- i = 0;
- p = replace;
- while (i < replace_len) {
- n = -1;
- if (p[0] == '\\' && p[1] >= '0' && p[1] <= '9') {
- n = p[1] - '0';
- }
- if (n >= 0 && n < regs.num_regs) {
- if (regs.beg[n] >= 0 && regs.beg[n] < regs.end[n] && regs.end[n] <= string_len) {
- php_mbregex_strbuf_ncat(pdevice, &string[regs.beg[n]], regs.end[n] - regs.beg[n]);
- }
- p += 2;
- i += 2;
- } else {
- php_mbregex_strbuf_ncat(pdevice, p, 1);
- p++;
- i++;
- }
- }
- if (eval) {
- /* null terminate buffer */
- php_mbregex_strbuf_ncat(&evaldev, "\0", 1);
- /* do eval */
- zend_eval_string(evaldev.buffer, &retval, description TSRMLS_CC);
- /* result of eval */
- convert_to_string(&retval);
- php_mbregex_strbuf_ncat(&outdev, retval.value.str.val, retval.value.str.len);
- /* Clean up */
- evaldev.pos = 0;
- zval_dtor(&retval);
- }
- n = regs.end[0];
- if (pos < n) {
- pos = n;
- } else {
- pos++;
- }
- } else { /* nomatch */
- /* stick that last bit of string on our output */
- php_mbregex_strbuf_ncat(&outdev, &string[pos], string_len - pos);
- }
- }
-
- if (description) {
- efree(description);
- }
- mbre_free_registers(&regs);
- if (evaldev.buffer) {
- efree((void*)evaldev.buffer);
- }
- n = outdev.pos;
- php_mbregex_strbuf_ncat(&outdev, "\0", 1);
- if (err <= -2) {
- if (outdev.buffer) {
- efree((void*)outdev.buffer);
- }
- RETVAL_FALSE;
- } else {
- RETVAL_STRINGL(outdev.buffer, n, 0);
- }
-}
-
-/* {{{ proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
- Replace regular expression for multibyte string */
-PHP_FUNCTION(mb_ereg_replace)
-{
- php_mbereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, MBRE_OPTION_EXTENDED);
-}
-/* }}} */
-
-/* {{{ proto string mb_eregi_replace(string pattern, string replacement, string string)
- Case insensitive replace regular expression for multibyte string */
-PHP_FUNCTION(mb_eregi_replace)
-{
- php_mbereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, MBRE_OPTION_EXTENDED | MBRE_OPTION_IGNORECASE);
-}
-/* }}} */
-
-
-/* {{{ proto array mb_split(string pattern, string string [, int limit])
- split multibyte string into array by regular expression */
-PHP_FUNCTION(mb_split)
-{
- zval **arg_pat, **arg_str, **arg_count = NULL;
- mb_regex_t re;
- struct mbre_registers regs = {0, 0, 0, 0};
- char *string;
- int n, err, count, string_len, pos;
-
- count = -1;
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg_pat, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &arg_pat, &arg_str, &arg_count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_count);
- count = Z_LVAL_PP(arg_count);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(arg_pat);
- convert_to_string_ex(arg_str);
-
- /* create regex pattern buffer */
- err = php_mbregex_compile_pattern(
- &re,
- Z_STRVAL_PP(arg_pat),
- Z_STRLEN_PP(arg_pat),
- MBRE_OPTION_EXTENDED, MBSTRG(current_mbctype) TSRMLS_CC);
- if (err) {
- RETURN_FALSE;
- }
-
- string = Z_STRVAL_PP(arg_str);
- string_len = Z_STRLEN_PP(arg_str);
- pos = 0;
- err = 0;
- /* churn through str, generating array entries as we go */
- while ((count != 0) &&
- (err = mbre_search(&re, string, string_len, pos, string_len - pos, &regs)) >= 0) {
- n = regs.beg[0];
- if (n == pos) {
- /* match is at start of string, return empty string */
- add_next_index_stringl(return_value, empty_string, 0, 1);
- } else {
- /* On a real match */
- /* add it to the array */
- if (n < string_len) {
- n -= pos;
- add_next_index_stringl(return_value, &string[pos], n, 1);
- } else {
- err = -2;
- break;
- }
- }
- /* point at our new starting point */
- n = regs.end[0];
- if (pos < n) {
- pos = n;
- } else {
- pos++;
- }
- /* if we're only looking for a certain number of points,
- stop looking once we hit it */
- if (count > 0) {
- count--;
- }
- }
-
- mbre_free_registers(&regs);
-
- /* see if we encountered an error */
- if (err <= -2) {
- php_error(E_WARNING, "mbregex search failure in mbsplit()");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-
- /* otherwise we just have one last element to add to the array */
- n = string_len - pos;
- if (n > 0) {
- add_next_index_stringl(return_value, &string[pos], n, 1);
- } else {
- add_next_index_stringl(return_value, empty_string, 0, 1);
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mb_ereg_match(string pattern, string string [,string option])
- Regular expression match for multibyte string */
-PHP_FUNCTION(mb_ereg_match)
-{
- zval **arg_pattern, **arg_str, **arg_option;
- mb_regex_t re;
- int option, err;
-
- option = MBRE_OPTION_EXTENDED;
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg_pattern, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg_pattern, &arg_str, &arg_option) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_option);
- option = 0;
- php_mbregex_init_option(Z_STRVAL_PP(arg_option), Z_STRLEN_PP(arg_option), &option, NULL);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* create regex pattern buffer */
- convert_to_string_ex(arg_pattern);
- err = php_mbregex_compile_pattern(
- &re,
- Z_STRVAL_PP(arg_pattern),
- Z_STRLEN_PP(arg_pattern),
- option, MBSTRG(current_mbctype) TSRMLS_CC);
- if (err) {
- RETURN_FALSE;
- }
-
- /* match */
- convert_to_string_ex(arg_str);
- err = mbre_match(&re, Z_STRVAL_PP(arg_str), Z_STRLEN_PP(arg_str), 0, NULL);
- if (err >= 0) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-/* regex search */
-static void
-php_mbereg_search_exec(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval **arg_pattern, **arg_option;
- int n, i, err, pos, len, beg, end, option;
- unsigned char *str;
-
- option = MBRE_OPTION_EXTENDED;
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg_pattern) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &arg_pattern, &arg_option) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_option);
- option = 0;
- php_mbregex_init_option(Z_STRVAL_PP(arg_option), Z_STRLEN_PP(arg_option), &option, NULL);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (ZEND_NUM_ARGS() > 0) {
- /* create regex pattern buffer */
- convert_to_string_ex(arg_pattern);
- if (!MBSTRG(search_re)) {
- MBSTRG(search_re) = (mb_regex_t*)ecalloc(1, sizeof(mb_regex_t));
- }
- err = php_mbregex_compile_pattern(
- MBSTRG(search_re),
- Z_STRVAL_PP(arg_pattern),
- Z_STRLEN_PP(arg_pattern),
- option, MBSTRG(current_mbctype) TSRMLS_CC);
- if (err) {
- efree(MBSTRG(search_re));
- MBSTRG(search_re) = (mb_regex_t*)0;
- RETURN_FALSE;
- }
- }
-
- pos = MBSTRG(search_pos);
- str = NULL;
- len = 0;
- if (Z_TYPE_PP(MBSTRG(search_str)) == IS_STRING){
- str = Z_STRVAL_PP(MBSTRG(search_str));
- len = Z_STRLEN_PP(MBSTRG(search_str));
- }
-
- if (!MBSTRG(search_re)) {
- php_error(E_WARNING, "no regex for search");
- RETURN_FALSE;
- }
- if (!str) {
- php_error(E_WARNING, "no string for search");
- RETURN_FALSE;
- }
- if (MBSTRG(search_regs)) {
- mbre_free_registers(MBSTRG(search_regs));
- memset(MBSTRG(search_regs), 0, sizeof(struct mbre_registers));
- } else {
- MBSTRG(search_regs) = (struct mbre_registers*)ecalloc(1, sizeof(struct mbre_registers));
- }
-
- err = mbre_search(MBSTRG(search_re), str, len, pos, len - pos, MBSTRG(search_regs));
-
- if (err <= -2) {
- php_error(E_WARNING, "mbregex search failure in mbregex_search()");
- RETVAL_FALSE;
- } else if (err < 0) {
- MBSTRG(search_pos) = len;
- RETVAL_FALSE;
- } else {
- switch (mode) {
- case 1:
- if (array_init(return_value) != FAILURE) {
- beg = MBSTRG(search_regs)->beg[0];
- end = MBSTRG(search_regs)->end[0];
- add_next_index_long(return_value, beg);
- add_next_index_long(return_value, end - beg);
- } else {
- RETVAL_FALSE;
- }
- break;
- case 2:
- if (array_init(return_value) != FAILURE) {
- n = MBSTRG(search_regs)->num_regs;
- for (i = 0; i < n; i++) {
- beg = MBSTRG(search_regs)->beg[i];
- end = MBSTRG(search_regs)->end[i];
- if (beg >= 0 && beg <= end && end <= len) {
- add_index_stringl(return_value, i, &str[beg], end - beg, 1);
- } else {
- add_index_bool(return_value, i, 0);
- }
- }
- } else {
- RETVAL_FALSE;
- }
- break;
- default:
- RETVAL_TRUE;
- break;
- }
- end = MBSTRG(search_regs)->end[0];
- if (pos < end) {
- MBSTRG(search_pos) = end;
- } else {
- MBSTRG(search_pos) = pos + 1;
- }
- }
-
- if (err < 0) {
- mbre_free_registers(MBSTRG(search_regs));
- efree(MBSTRG(search_regs));
- MBSTRG(search_regs) = (struct mbre_registers*)0;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mb_ereg_search([string pattern[, string option]])
- Regular expression search for multibyte string */
-PHP_FUNCTION(mb_ereg_search)
-{
- php_mbereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto array mb_ereg_search_pos([string pattern[, string option]])
- Regular expression search for multibyte string */
-PHP_FUNCTION(mb_ereg_search_pos)
-{
- php_mbereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto array mb_ereg_search_regs([string pattern[, string option]])
- Regular expression search for multibyte string */
-PHP_FUNCTION(mb_ereg_search_regs)
-{
- php_mbereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-
-/* {{{ proto bool mb_ereg_search_init(string string [, string pattern[, string option]])
- Initialize string and regular expression for search. */
-PHP_FUNCTION(mb_ereg_search_init)
-{
- zval **arg_str, **arg_pattern, **arg_option;
- int err, option;
-
- option = MBRE_OPTION_EXTENDED;
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &arg_str, &arg_pattern) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg_str, &arg_pattern, &arg_option) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_option);
- option = 0;
- php_mbregex_init_option(Z_STRVAL_PP(arg_option), Z_STRLEN_PP(arg_option), &option, NULL);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (ZEND_NUM_ARGS() > 1) {
- /* create regex pattern buffer */
- convert_to_string_ex(arg_pattern);
- if (!MBSTRG(search_re)) {
- MBSTRG(search_re) = (mb_regex_t*)ecalloc(1, sizeof(mb_regex_t));
- }
- err = php_mbregex_compile_pattern(
- MBSTRG(search_re),
- Z_STRVAL_PP(arg_pattern),
- Z_STRLEN_PP(arg_pattern),
- option, MBSTRG(current_mbctype) TSRMLS_CC);
- if (err) {
- efree(MBSTRG(search_re));
- MBSTRG(search_re) = (mb_regex_t*)0;
- RETURN_FALSE;
- }
- }
-
- if (MBSTRG(search_str)) {
- if (ZVAL_REFCOUNT(*MBSTRG(search_str)) > 1) {
- ZVAL_DELREF(*MBSTRG(search_str));
- } else {
- zval_dtor(*MBSTRG(search_str));
- FREE_ZVAL(*MBSTRG(search_str));
- }
- MBSTRG(search_str) = (zval **)0;
- MBSTRG(search_str_val) = (zval *)0;
- }
-
- if (PZVAL_IS_REF(*arg_str)) {
- ZVAL_ADDREF(*arg_str);
- MBSTRG(search_str_val) = *arg_str;
- MBSTRG(search_str) = &MBSTRG(search_str_val);
- } else {
- MAKE_STD_ZVAL(MBSTRG(search_str_val));
- *MBSTRG(search_str_val) = **arg_str;
- zval_copy_ctor(MBSTRG(search_str_val));
- MBSTRG(search_str_val)->refcount = 1;
- MBSTRG(search_str_val)->is_ref = 0;
- MBSTRG(search_str) = &MBSTRG(search_str_val);
- convert_to_string_ex(MBSTRG(search_str));
- }
-
- MBSTRG(search_pos) = 0;
-
- if (MBSTRG(search_regs)) {
- mbre_free_registers(MBSTRG(search_regs));
- efree(MBSTRG(search_regs));
- MBSTRG(search_regs) = (struct mbre_registers*)0;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto array mb_ereg_search_getregs(void)
- Get matched substring of the last time */
-PHP_FUNCTION(mb_ereg_search_getregs)
-{
- int n, i, len, beg, end;
- unsigned char *str;
-
- if (MBSTRG(search_regs) && Z_TYPE_PP(MBSTRG(search_str)) == IS_STRING &&
- Z_STRVAL_PP(MBSTRG(search_str)) && array_init(return_value) != FAILURE) {
- str = Z_STRVAL_PP(MBSTRG(search_str));
- len = Z_STRLEN_PP(MBSTRG(search_str));
- n = MBSTRG(search_regs)->num_regs;
- for (i = 0; i < n; i++) {
- beg = MBSTRG(search_regs)->beg[i];
- end = MBSTRG(search_regs)->end[i];
- if (beg >= 0 && beg <= end && end <= len) {
- add_index_stringl(return_value, i, &str[beg], end - beg, 1);
- } else {
- add_index_bool(return_value, i, 0);
- }
- }
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mb_ereg_search_getpos(void)
- Get search start position */
-PHP_FUNCTION(mb_ereg_search_getpos)
-{
- RETVAL_LONG(MBSTRG(search_pos));
-}
-/* }}} */
-
-
-/* {{{ proto bool mb_ereg_search_setpos(int position)
- Set search start position */
-PHP_FUNCTION(mb_ereg_search_setpos)
-{
- zval **arg_pos;
- int n;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_pos) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_pos);
- n = Z_LVAL_PP(arg_pos);
- if (n < 0) {
- php_error(E_WARNING, "position is minus value");
- MBSTRG(search_pos) = 0;
- RETVAL_FALSE;
- } else {
- MBSTRG(search_pos) = n;
- RETVAL_TRUE;
- }
-}
-/* }}} */
-
-#endif /* HAVE_MBREGEX */
diff --git a/ext/mbstring/tests/001.phpt b/ext/mbstring/tests/001.phpt
deleted file mode 100644
index 1eb68a3d4d..0000000000
--- a/ext/mbstring/tests/001.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Simple multi-byte print test (EUC-JP)
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php
-/*
- * Test basic PHP functions to check if it works with multi-byte chars
- */
-
-// EUC-JP strings
-$s1 = "¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£";
-$s2 = "¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£";
-
-// print directly
-echo "echo: ".$s1.$s2."\n";
-print("print: ".$s1.$s2."\n");
-printf("printf: %s%s\n",$s1, $s2);
-echo sprintf("sprintf: %s%s\n",$s1, $s2);
-
-// Assign to var
-$s3 = $s1.$s2."\n";
-echo "echo: ".$s3;
-
-?>
---EXPECT--
-echo: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-print: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-printf: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-sprintf: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-echo: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-
diff --git a/ext/mbstring/tests/002.inc b/ext/mbstring/tests/002.inc
deleted file mode 100644
index 6b16ca8d46..0000000000
--- a/ext/mbstring/tests/002.inc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// TODO:
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$r = mb_internal_encoding('EUC-JP');
-($r === TRUE) ? print "OK_EUC-JP_SET\n" : print "NG_EUC-JP_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-// UTF-8
-$r = mb_internal_encoding('UTF-8');
-($r === TRUE) ? print "OK_UTF-8_SET\n" : print "NG_UTF-8_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-// ASCII
-$r = mb_internal_encoding('ASCII');
-($r === TRUE) ? print "OK_ASCII_SET\n" : print "NG_ASCII_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-// Invalid Parameter
-print "== INVALID PARAMETER ==\n";
-
-// Note: Other than string type, PHP raise both Notice and Warning
-$r = mb_internal_encoding('BAD');
-($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-$r = mb_internal_encoding($t_ary);
-($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-$r = mb_internal_encoding($t_obj);
-($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-?>
diff --git a/ext/mbstring/tests/002.phpt b/ext/mbstring/tests/002.phpt
deleted file mode 100644
index a0c8c2555c..0000000000
--- a/ext/mbstring/tests/002.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-mb_internal_encoding() test
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('002.inc'); ?>
---EXPECT--
-OK_EUC-JP_SET
-EUC-JP
-OK_UTF-8_SET
-UTF-8
-OK_ASCII_SET
-ASCII
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_SET
-ASCII
-ERR: Notice
-ERR: Warning
-OK_BAD_ARY_SET
-ASCII
-ERR: Notice
-ERR: Warning
-OK_BAD_OBJ_SET
-ASCII
-
diff --git a/ext/mbstring/tests/003.inc b/ext/mbstring/tests/003.inc
deleted file mode 100644
index b6a6d3e9a4..0000000000
--- a/ext/mbstring/tests/003.inc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-// TODO: This is not a real test.... Need to change so that it does real testing
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-$ini = ini_get('mbstring.http_input');
-
-// It must be url encoded....
-// echo vars
-echo $_POST['a']."\n";
-echo $_GET['b']."\n";
-
-// Get encoding
-$enc = mb_http_input('P');
-
-// check
-if (empty($ini)) {
- // Must be pass
- if ($enc === 'pass') {
- echo "OK\n";
- }
- else {
- echo "NG\n";
- }
-}
-else {
- // Some encoding
- echo "This heppens when php.ini-dist is not used\n";
-}
-
-?>
diff --git a/ext/mbstring/tests/003.phpt b/ext/mbstring/tests/003.phpt
deleted file mode 100644
index ea1710ec17..0000000000
--- a/ext/mbstring/tests/003.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-mb_http_input()
---SKIPIF--
-<?php
- include('skipif.inc');
- if(php_sapi_name()!='cgi') {
- die("skip\n");
- }
-?>
---POST--
-a=ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
---GET--
-b=ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
---FILE--
-<?php include('003.inc'); ?>
---EXPECT--
-ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
-ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
-OK
-
diff --git a/ext/mbstring/tests/004.inc b/ext/mbstring/tests/004.inc
deleted file mode 100644
index 421bb5a681..0000000000
--- a/ext/mbstring/tests/004.inc
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-//TODO: Add more encoding. Wrong paramter type test.
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// Set HTTP output encoding to ASCII
-$r = mb_http_output('ASCII');
-($r === TRUE) ? print "OK_ASCII_SET\n" : print "NG_ASCII_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to SJIS
-$r = mb_http_output('SJIS');
-($r === TRUE) ? print "OK_SJIS_SET\n" : print "NG_SJIS_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to JIS
-$r = mb_http_output('JIS');
-($r === TRUE) ? print "OK_JIS_SET\n" : print "NG_JIS_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to UTF8
-$r = mb_http_output('UTF-8');
-($r === TRUE) ? print "OK_UTF-8_SET\n" : print "NG_UTF-8_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to EUC-JP
-$r = mb_http_output('EUC-JP');
-($r === TRUE) ? print "OK_EUC-JP_SET\n" : print "NG_EUC-JP_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Invalid parameters
-print "== INVALID PARAMETER ==\n";
-
-// Note: Bad string raise Warning. Bad Type raise Notice (Type Conversion) and Warning....
-$r = mb_http_output('BAD_NAME');
-($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-$r = mb_http_output($t_ary);
-($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-$r = mb_http_output($t_obj);
-($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-?>
diff --git a/ext/mbstring/tests/004.phpt b/ext/mbstring/tests/004.phpt
deleted file mode 100644
index 31ccd4a1e9..0000000000
--- a/ext/mbstring/tests/004.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-mb_http_output()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('004.inc'); ?>
---EXPECT--
-OK_ASCII_SET
-ASCII
-OK_SJIS_SET
-SJIS
-OK_JIS_SET
-JIS
-OK_UTF-8_SET
-UTF-8
-OK_EUC-JP_SET
-EUC-JP
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_SET
-EUC-JP
-ERR: Notice
-ERR: Warning
-OK_BAD_ARY_SET
-EUC-JP
-ERR: Notice
-ERR: Warning
-OK_BAD_OBJ_SET
-EUC-JP
-
diff --git a/ext/mbstring/tests/005.inc b/ext/mbstring/tests/005.inc
deleted file mode 100644
index 1ffcafd011..0000000000
--- a/ext/mbstring/tests/005.inc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-// Set order to "auto"
-$r = mb_detect_order('auto');
-($r === TRUE) ? print "OK_AUTO\n" : print "NG_AUTO\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-
-// Set order by string
-$r = mb_detect_order('SJIS,EUC-JP,JIS,UTF-8');
-($r === TRUE) ? print "OK_STR\n" : print "NG_STR\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-
-// Set order by array
-$a[] = 'ASCII';
-$a[] = 'JIS';
-$a[] = 'EUC-JP';
-$a[] = 'UTF-8';
-$r = mb_detect_order($a);
-($r === TRUE) ? print "OK_ARRAY\n" : print "NG_ARRAY\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-// Set invalid encoding. Should fail.
-print "== INVALID PARAMETER ==\n";
-
-$r = mb_detect_order('BAD_NAME');
-($r === FALSE) ? print "OK_BAD_STR\n" : print "NG_BAD_STR\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-$a[] = 'BAD_NAME';
-$r = mb_detect_order($a);
-($r === FALSE) ? print "OK_BAD_ARRAY\n" : print "NG_BAD_ARRAY\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-?>
diff --git a/ext/mbstring/tests/005.phpt b/ext/mbstring/tests/005.phpt
deleted file mode 100644
index 7c0dd7ab66..0000000000
--- a/ext/mbstring/tests/005.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-mb_detect_order()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('005.inc'); ?>
---EXPECT--
-OK_AUTO
-ASCII, JIS, UTF-8, EUC-JP, SJIS
-OK_STR
-SJIS, EUC-JP, JIS, UTF-8
-OK_ARRAY
-ASCII, JIS, EUC-JP, UTF-8
-== INVALID PARAMETER ==
-OK_BAD_STR
-ASCII, JIS, EUC-JP, UTF-8
-OK_BAD_ARRAY
-ASCII, JIS, EUC-JP, UTF-8
-
diff --git a/ext/mbstring/tests/006.inc b/ext/mbstring/tests/006.inc
deleted file mode 100644
index 80422d0a6c..0000000000
--- a/ext/mbstring/tests/006.inc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// Note: It does not return TRUE/FALSE for setting char
-
-// Use Unicode val
-$r = mb_substitute_character(0x3013);
-//$r = mb_substitute_character('U+3013');
-($r === TRUE) ? print "OK_UTF\n" : print("NG_UTF: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
-
-
-// Use "long"
-$r = mb_substitute_character('long');
-($r === TRUE) ? print "OK_LONG\n" : print("NG_LONG: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
-
-
-// Use "none"
-$r = mb_substitute_character('none');
-($r === TRUE) ? print "OK_NONE\n" : print("NG_NONE: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
-
-
-// Set invalid string. Should fail.
-print "== INVALID PARAMETER ==\n";
-$r = mb_substitute_character('BAD_NAME');
-($r === FALSE) ? print "OK_BAD_NAME\n" : print("NG_BAD_NAME: ".gettype($r)." $r\n");
-
-?>
diff --git a/ext/mbstring/tests/006.phpt b/ext/mbstring/tests/006.phpt
deleted file mode 100644
index 22b3e4a4fd..0000000000
--- a/ext/mbstring/tests/006.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-mb_substitute_character()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('006.inc'); ?>
---EXPECT--
-OK_UTF
-12307
-OK_LONG
-long
-OK_NONE
-none
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_NAME
-
diff --git a/ext/mbstring/tests/007.inc b/ext/mbstring/tests/007.inc
deleted file mode 100644
index 87e46da920..0000000000
--- a/ext/mbstring/tests/007.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-// TODO: Do real test
-
-// EUC-JP
-$euc_jp = "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£";
-mb_http_output('EUC-JP') or print("mb_http_output() failed\n");
-ob_start('mb_output_handler');
-echo $euc_jp;
-ob_end_flush();
-
-?>
diff --git a/ext/mbstring/tests/007.phpt b/ext/mbstring/tests/007.phpt
deleted file mode 100644
index 08c8b8409a..0000000000
--- a/ext/mbstring/tests/007.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-mb_output_handler() (EUC-JP)
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('007.inc'); ?>
---EXPECT--
-¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£
-
diff --git a/ext/mbstring/tests/008.inc b/ext/mbstring/tests/008.inc
deleted file mode 100644
index 035f459d6c..0000000000
--- a/ext/mbstring/tests/008.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// TODO: Add more encoding names
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-$str = mb_preferred_mime_name('sjis-win');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('SJIS');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('EUC-JP');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('UTF-8');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('ISO-2022-JP');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('JIS');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('ISO-8859-1');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('UCS2');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('UCS4');
-echo "$str\n";
-
-echo "== INVALID PARAMETER ==\n";
-// Invalid name
-$r = mb_preferred_mime_name('BAD_NAME');
-($r === FALSE) ? print("OK_BAD_NAME\n") : print("NG_BAD_NAME\n");
-
-?>
diff --git a/ext/mbstring/tests/008.phpt b/ext/mbstring/tests/008.phpt
deleted file mode 100644
index b84a027b0a..0000000000
--- a/ext/mbstring/tests/008.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-mb_preferred_mime_name()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('008.inc'); ?>
---EXPECT--
-Shift_JIS
-Shift_JIS
-EUC-JP
-UTF-8
-ISO-2022-JP
-ISO-2022-JP
-ISO-8859-1
-UCS-2
-UCS-4
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_NAME
-
diff --git a/ext/mbstring/tests/009.inc b/ext/mbstring/tests/009.inc
deleted file mode 100644
index 2eb2f9d1c8..0000000000
--- a/ext/mbstring/tests/009.inc
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-// TODO: Add more encodings
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// restore detect_order to 'auto'
-mb_detect_order('auto');
-
-// Test string
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-$ascii = 'abcdefghijklmnopqrstuvwxyz;]=#0123456789';
-
-// ASCII
-echo "== ASCII ==\n";
-print mb_strlen($ascii,'ASCII') . "\n";
-print mb_strlen($ascii) . "\n";
-
-// EUC-JP
-echo "== EUC-JP ==\n";
-print mb_strlen($euc_jp,'EUC-JP') . "\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-print mb_strlen($euc_jp) . "\n";
-
-// SJIS
-echo "== SJIS ==\n";
-$sjis = mb_convert_encoding($euc_jp, 'SJIS');
-print mb_strlen($sjis,'SJIS') . "\n";
-mb_internal_encoding('SJIS') or print("mb_internal_encoding() failed\n");
-print mb_strlen($sjis) . "\n";
-
-// JIS
-// Note: either convert_encoding or strlen has problem
-echo "== JIS ==\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-$jis = mb_convert_encoding($euc_jp, 'JIS');
-print mb_strlen($jis,'JIS') . "\n";
-mb_internal_encoding('JIS') or print("mb_internal_encoding() failed\n");
-print mb_strlen($jis) . "\n";
-
-// UTF-8
-// Note: either convert_encoding or strlen has problem
-echo "== UTF-8 ==\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-$utf8 = mb_convert_encoding($euc_jp, 'UTF-8');
-print mb_strlen($utf8,'UTF-8') . "\n";
-mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
-print mb_strlen($utf8) . "\n";
-
-
-// Wrong Parameters
-echo "== WRONG PARAMETERS ==\n";
-// Array
-// Note: PHP Notice, but returns some value
-$r = mb_strlen($t_ary);
-echo $r."\n";
-// Object
-// Note: PHP Notice, but returns some value
-$r = mb_strlen($t_obj);
-echo $r."\n";
-// Wrong encoding
-mb_internal_encoding('EUC-JP');
-$r = mb_strlen($euc_jp, 'BAD_NAME');
-echo $r."\n";
-
-
-
-
-?>
diff --git a/ext/mbstring/tests/009.phpt b/ext/mbstring/tests/009.phpt
deleted file mode 100644
index 5e1ae42330..0000000000
--- a/ext/mbstring/tests/009.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-mb_strlen()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('009.inc'); ?>
---EXPECT--
-== ASCII ==
-40
-40
-== EUC-JP ==
-43
-43
-== SJIS ==
-43
-43
-== JIS ==
-43
-43
-== UTF-8 ==
-43
-43
-== WRONG PARAMETERS ==
-ERR: Notice
-
-ERR: Notice
-
-ERR: Warning
-
-
-
diff --git a/ext/mbstring/tests/010.inc b/ext/mbstring/tests/010.inc
deleted file mode 100644
index dc50d3fcff..0000000000
--- a/ext/mbstring/tests/010.inc
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-// TODO: Add more encodings
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-// Test string
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-// EUC-JP - With encoding parameter
-mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
-
-echo "== POSITIVE OFFSET ==\n";
-print mb_strpos($euc_jp,'ÆüËܸì', 0, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, '0', 0, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, 3, 0, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, 0, 0, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp,'ÆüËܸì', 15, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, '0', 15, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, 3, 15, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, 0, 15, 'EUC-JP') . "\n";
-
-// Negative offset
-// Note: PHP Warning - offset is negative.
-// Note: For offset(-15). It does not return position of latter string. (ie the same result as -50)
-echo "== NEGATIVE OFFSET ==\n";
-$r = mb_strpos($euc_jp,'ÆüËܸì', -15, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, '0', -15, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, 3, -15, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, 0, -15, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp,'ÆüËܸì', -50, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, '0', -50, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, 3, -50, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, 0, -50, 'EUC-JP');
-($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-
-// Out of range - should return false
-print ("== OUT OF RANGE ==\n");
-$r = mb_strpos($euc_jp,'ÆüËܸì', 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, '0', 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 3, 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, 0, 40, 'EUC-JP');
-($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-// Note: Returned NULL string
-// echo gettype($r). ' val '. $r ."\n";
-
-
-// Non-existent
-echo "== NON-EXISTENT ==\n";
-$r = mb_strpos($euc_jp, '´Ú¹ñ¸ì', 'EUC-JP');
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp, "\n", 'EUC-JP');
-($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
-
-
-// EUC-JP - No encoding parameter
-echo "== NO ENCODING PARAMETER ==\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-
-print mb_strpos($euc_jp,'ÆüËܸì', 0) . "\n";
-print mb_strpos($euc_jp, '0', 0) . "\n";
-print mb_strpos($euc_jp, 3, 0) . "\n";
-print mb_strpos($euc_jp, 0, 0) . "\n";
-
-$r = mb_strpos($euc_jp,'´Ú¹ñ¸ì', 0);
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp,"\n", 0);
-($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
-
-// EUC-JP - No offset and encoding parameter
-echo "== NO OFFSET AND ENCODING PARAMETER ==\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-
-print mb_strpos($euc_jp,'ÆüËܸì') . "\n";
-print mb_strpos($euc_jp, '0') . "\n";
-print mb_strpos($euc_jp, 3) . "\n";
-print mb_strpos($euc_jp, 0) . "\n";
-
-$r = mb_strpos($euc_jp,'´Ú¹ñ¸ì');
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp,"\n");
-($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
-
-
-// Invalid Parameters
-echo "== INVALID PARAMETER TEST ==\n";
-
-$r = mb_strpos($euc_jp,'','EUC-JP');
-($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n");
-$r = mb_strpos($euc_jp, $t_ary, 'EUC-JP');
-($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n");
-$r = mb_strpos($euc_jp, $t_obj, 'EUC-JP');
-($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n");
-$r = mb_strpos($euc_jp, $t_obj, 'BAD_ENCODING');
-($r === FALSE) ? print("OK_BAD_ENCODING\n") : print("NG_BAD_ENCODING\n");
-
-
-?>
diff --git a/ext/mbstring/tests/010.phpt b/ext/mbstring/tests/010.phpt
deleted file mode 100644
index 8b3a81f8ce..0000000000
--- a/ext/mbstring/tests/010.phpt
+++ /dev/null
@@ -1,67 +0,0 @@
---TEST--
-mb_strpos()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('010.inc'); ?>
---EXPECT--
-== POSITIVE OFFSET ==
-10
-0
-3
-0
-34
-30
-33
-30
-== NEGATIVE OFFSET ==
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-ERR: Warning
-OK_NEGATIVE_OFFSET
-== OUT OF RANGE ==
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-OK_OUT_RANGE
-== NON-EXISTENT ==
-OK_STR
-OK_NEWLINE
-== NO ENCODING PARAMETER ==
-10
-0
-3
-0
-OK_STR
-OK_NEWLINE
-== NO OFFSET AND ENCODING PARAMETER ==
-10
-0
-3
-0
-OK_STR
-OK_NEWLINE
-== INVALID PARAMETER TEST ==
-ERR: Warning
-OK_NULL
-ERR: Notice
-OK_ARRAY
-ERR: Notice
-OK_OBJECT
-ERR: Notice
-OK_BAD_ENCODING
-
diff --git a/ext/mbstring/tests/011.inc b/ext/mbstring/tests/011.inc
deleted file mode 100644
index 43ebf82dbe..0000000000
--- a/ext/mbstring/tests/011.inc
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-// TODO: Add more encodings
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-// Test string
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-// EUC-JP - With encoding parameter
-mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
-
-echo "== WITH ENCODING PARAMETER ==\n";
-
-print mb_strrpos($euc_jp,'ÆüËܸì', 'EUC-JP') . "\n";
-print mb_strrpos($euc_jp, '0', 'EUC-JP') . "\n";
-print mb_strrpos($euc_jp, 3, 'EUC-JP') . "\n";
-print mb_strrpos($euc_jp, 0, 'EUC-JP') . "\n";
-
-
-$r = mb_strrpos($euc_jp, '´Ú¹ñ¸ì', 'EUC-JP');
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strrpos($euc_jp, "\n", 'EUC-JP');
-($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
-
-
-// EUC-JP - No encoding parameter
-echo "== NO ENCODING PARAMETER ==\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-
-print mb_strrpos($euc_jp,'ÆüËܸì') . "\n";
-print mb_strrpos($euc_jp, '0') . "\n";
-print mb_strrpos($euc_jp, 3) . "\n";
-print mb_strrpos($euc_jp, 0) . "\n";
-
-$r = mb_strrpos($euc_jp,'´Ú¹ñ¸ì');
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strrpos($euc_jp,"\n");
-($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
-
-
-// Invalid Parameters
-echo "== INVALID PARAMETER TEST ==\n";
-
-$r = mb_strrpos($euc_jp,'','EUC-JP');
-($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n");
-$r = mb_strrpos($euc_jp, $t_ary, 'EUC-JP');
-($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n");
-$r = mb_strrpos($euc_jp, $t_obj, 'EUC-JP');
-($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n");
-
-//Note: Notice msg for NULL string might be better.
-
-
-?>
diff --git a/ext/mbstring/tests/011.phpt b/ext/mbstring/tests/011.phpt
deleted file mode 100644
index e6ef9c68bf..0000000000
--- a/ext/mbstring/tests/011.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-mb_strrpos()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('011.inc'); ?>
---EXPECT--
-== WITH ENCODING PARAMETER ==
-34
-30
-33
-30
-OK_STR
-OK_NEWLINE
-== NO ENCODING PARAMETER ==
-34
-30
-33
-30
-OK_STR
-OK_NEWLINE
-== INVALID PARAMETER TEST ==
-ERR: Warning
-OK_NULL
-ERR: Notice
-OK_ARRAY
-ERR: Notice
-OK_OBJECT
-
diff --git a/ext/mbstring/tests/012.inc b/ext/mbstring/tests/012.inc
deleted file mode 100644
index d6dad9a903..0000000000
--- a/ext/mbstring/tests/012.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-// TODO: Add more encodings
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print "1: ". mb_substr($euc_jp, 10, 10,'EUC-JP') . "\n";
-print "2: ". mb_substr($euc_jp, 0, 100,'EUC-JP') . "\n";
-
-$str = mb_substr($euc_jp, 100, 10,'EUC-JP');
-// Note: returns last character
-($str === "") ? print "3 OK\n" : print "NG: $str\n";
-
-$str = mb_substr($euc_jp, -100, 10,'EUC-JP');
-($str !== "") ? print "4 OK: $str\n" : print "NG: $str\n";
-
-?>
diff --git a/ext/mbstring/tests/012.phpt b/ext/mbstring/tests/012.phpt
deleted file mode 100644
index 250e4a0ec4..0000000000
--- a/ext/mbstring/tests/012.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_substr()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('012.inc'); ?>
---EXPECT--
-1: ÆüËܸì¤Ç¤¹¡£EUC-
-2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-3 OK
-4 OK: 0123¤³¤Îʸ»úÎó¤Ï
-
-
diff --git a/ext/mbstring/tests/013.inc b/ext/mbstring/tests/013.inc
deleted file mode 100644
index 97da70c7dc..0000000000
--- a/ext/mbstring/tests/013.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-// TODO: Add more encodings
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print mb_strcut($euc_jp, 6, 5,'EUC-JP') . "\n";
-print mb_strcut($euc_jp, 0, 100,'EUC-JP') . "\n";
-
-$str = mb_strcut($euc_jp, 100, 10,'EUC-JP');
-($str === "") ? print "OK\n" : print "NG: $str\n";
-
-$str = mb_strcut($euc_jp, -100, 10,'EUC-JP');
-($str !== "") ? print "OK: $str\n" : print "NG:\n";
-
-
-?>
diff --git a/ext/mbstring/tests/013.phpt b/ext/mbstring/tests/013.phpt
deleted file mode 100644
index 6c3624ee1b..0000000000
--- a/ext/mbstring/tests/013.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_strcut()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('013.inc'); ?>
---EXPECT--
-¤Îʸ
-0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-OK
-OK: 0123¤³¤Îʸ
-
-
diff --git a/ext/mbstring/tests/014.inc b/ext/mbstring/tests/014.inc
deleted file mode 100644
index 0e714e7abf..0000000000
--- a/ext/mbstring/tests/014.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-// TODO: Add more encoding
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print "1: ". mb_strimwidth($euc_jp, 0, 15,'...','EUC-JP') . "\n";
-print "2: ". mb_strimwidth($euc_jp, 0, 100,'...','EUC-JP') . "\n";
-print "3: ". mb_strimwidth($euc_jp, 15, 100,'...','EUC-JP') . "\n";
-// Note: Did not start form -22 offset. Staring from 0.
-$str = mb_strimwidth($euc_jp,-22, 100,'...','EUC-JP');
-($str === FALSE) ? print "4 OK\n" : print "NG: $str\n";
-
-$str = mb_strimwidth($euc_jp, 100, -10,'...','EUC-JP');
-($str === FALSE) ? print "5 OK\n" : print "NG: $str\n";
-
-$str = mb_strimwidth($euc_jp, -100, 10,'...','EUC-JP');
-($str === FALSE) ? print "6 OK\n" : print "NG: $str\n";
-
-?>
diff --git a/ext/mbstring/tests/014.phpt b/ext/mbstring/tests/014.phpt
deleted file mode 100644
index db37e9f8bc..0000000000
--- a/ext/mbstring/tests/014.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-mb_strimwidth()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('014.inc'); ?>
---EXPECT--
-1: 0123¤³¤Îʸ»ú...
-2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-3: ¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-ERR: Warning
-4 OK
-ERR: Warning
-5 OK
-ERR: Warning
-6 OK
-
-
diff --git a/ext/mbstring/tests/015.inc b/ext/mbstring/tests/015.inc
deleted file mode 100644
index ca7f9dedd3..0000000000
--- a/ext/mbstring/tests/015.inc
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-// TODO: Add more tests
-//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file
-ini_set('include_path','.');
-include_once('common.inc');
-
-// SJIS string (BASE64 encoded)
-$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
-// JIS string (BASE64 encoded)
-$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
-// EUC-JP string
-$euc_jp = 'ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£';
-
-// Test for single scaler
-echo "== SCALER TEST ==\n";
-$s = $sjis;
-$encoding = mb_convert_variables('EUC-JP', 'SJIS', $s);
-print("$encoding\n"); // SJIS
-print("$s\n"); // Converted to EUC-JP
-
-$s = $jis;
-$encoding = mb_convert_variables('EUC-JP', 'JIS', $s);
-print("$encoding\n"); // JIS
-print("$s\n"); // Converted to EUC-JP
-
-$s = $euc_jp;
-$encoding = mb_convert_variables('SJIS', 'EUC-JP', $s);
-print("$encoding\n"); // EUC-JP
-print(base64_encode($s)."\n"); // Converted to SJIS (base64 encoded)
-
-$s = $euc_jp;
-$encoding = mb_convert_variables('JIS', 'EUC-JP', $s);
-print("$encoding\n"); // EUC-JP
-print(base64_encode($s)."\n"); // Converted to JIS (base64 encoded)
-
-// Test for multiple slcaler
-$s1 = $euc_jp;
-$s2 = $euc_jp;
-$s3 = $euc_jp;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $s1, $s2, $s3);
-print("$encoding\n"); // EUC-JP
-print("$s1$s2$s3\n"); // Converted to EUC-JP
-
-
-
-// Note: Mixing encoding in array/object is not supported?
-// Test for array
-echo "== ARRAY TEST ==\n";
-$a = array($s3, $s2, $s1);
-$aa = $a;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $aa);
-print("$encoding\n"); // EUC-JP
-print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP
-
-$a = array($s1, $s2, $s3);
-$aa = $a;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $aa);
-print("$encoding\n"); // EUC-JP
-print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP
-
-
-
-// Test for object
-echo "== OBJECT TEST ==\n";
-class foo
-{
- var $s1;
- var $s2;
- var $s3;
-
- function foo()
- {
- global $sjis, $jis, $euc_jp;
-
- $this->s1 = $euc_jp;
- $this->s2 = $euc_jp;
- $this->s3 = $euc_jp;
- }
-}
-
-class bar
-{
- var $s1;
- var $s2;
- var $s3;
-
- function bar()
- {
- global $sjis, $jis, $euc_jp;
-
- $this->s1 = $euc_jp;
- $this->s2 = $euc_jp;
- $this->s3 = $euc_jp;
- }
-}
-
-
-$o = new foo;
-$oo = $o;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $oo);
-print("$encoding\n"); // EUC-JP
-print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP
-
-$o = new bar;
-$oo = $o;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $oo);
-print("$encoding\n"); // EUC-JP
-print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP
-
-
-// Test for scaler, array and object
-echo "== SCALER, ARRAY AND OBJECT TEST ==\n";
-
-$s1 = $euc_jp;
-$s2 = $euc_jp;
-$s3 = $euc_jp;
-$aa = $a;
-$oo = $o;
-
-$encoding = mb_convert_variables('EUC-JP', 'auto', $s1, $s2, $s3, $aa, $oo);
-print("$encoding\n"); // EUC-JP
-print("$s1$s2$s3\n"); // Converted to EUC-JP
-print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP
-print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP
-
-
-?>
diff --git a/ext/mbstring/tests/015.phpt b/ext/mbstring/tests/015.phpt
deleted file mode 100644
index cc7b228688..0000000000
--- a/ext/mbstring/tests/015.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-mb_convert_variables()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('015.inc'); ?>
---EXPECT--
-== SCALER TEST ==
-SJIS
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-JIS
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP
-k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-EUC-JP
-GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-== ARRAY TEST ==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-== OBJECT TEST ==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-== SCALER, ARRAY AND OBJECT TEST ==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-
diff --git a/ext/mbstring/tests/016.inc b/ext/mbstring/tests/016.inc
deleted file mode 100644
index d661fefb96..0000000000
--- a/ext/mbstring/tests/016.inc
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-// TODO: Add more tests
-//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file
-ini_set('include_path','.');
-include_once('common.inc');
-
-// SJIS string (BASE64 encoded)
-$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
-// JIS string (BASE64 encoded)
-$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
-// EUC-JP string
-$euc_jp = 'ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£';
-
-// Test with sigle "form encoding"
-// Note: For some reason it complains, results are differ. Not reserched.
-echo "== BASIC TEST ==\n";
-$s = $sjis;
-$s = mb_convert_encoding($s, 'EUC-JP', 'SJIS');
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', 'JIS');
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', 'EUC-JP');
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', 'EUC-JP');
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Using Encoding List Array
-echo "== STRING ENCODING LIST ==\n";
-
-$a = 'JIS,UTF-8,EUC-JP,SJIS';
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', $a);
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', $a);
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', $a);
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Using Encoding List Array
-echo "== ARRAY ENCODING LIST ==\n";
-
-$a = array(0=>'JIS', 1=>'UTF-8', 2=>'EUC-JP', 3=>'SJIS');
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', $a);
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', $a);
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', $a);
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Using Detect Order
-echo "== DETECT ORDER ==\n";
-
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', 'auto');
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', 'auto');
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', 'auto');
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Invalid(?) Parameters
-echo "== INVALID PARAMETER ==\n";
-
-$s = mb_convert_encoding(1234, 'EUC-JP');
-print("INT: $s\n"); // EUC-JP
-
-$s = mb_convert_encoding('', 'EUC-JP');
-print("EUC-JP: $s\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'BAD');
-print("BAD: $s\n"); // BAD
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s);
-print("MP: $s\n"); // Missing parameter
-
-
-?>
diff --git a/ext/mbstring/tests/016.phpt b/ext/mbstring/tests/016.phpt
deleted file mode 100644
index a3908031a6..0000000000
--- a/ext/mbstring/tests/016.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-mb_convert_encoding()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('016.inc'); ?>
---EXPECT--
-== BASIC TEST ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== STRING ENCODING LIST ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== ARRAY ENCODING LIST ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== DETECT ORDER ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== INVALID PARAMETER ==
-INT: 1234
-EUC-JP:
-ERR: Warning
-BAD:
-ERR: Warning
-MP:
-
-
diff --git a/ext/mbstring/tests/017.inc b/ext/mbstring/tests/017.inc
deleted file mode 100644
index fd4f5b2d08..0000000000
--- a/ext/mbstring/tests/017.inc
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-// TODO: Add more tests
-//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file
-ini_set('include_path','.');
-include_once('common.inc');
-
-// SJIS string (BASE64 encoded)
-$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
-// JIS string (BASE64 encoded)
-$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
-// EUC-JP string
-$euc_jp = 'ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£';
-
-// Test with sigle "form encoding"
-// Note: For some reason it complains, results are differ. Not reserched.
-echo "== BASIC TEST ==\n";
-$s = $sjis;
-$s = mb_detect_encoding($s, 'SJIS');
-print("SJIS: $s\n");
-
-$s = $jis;
-$s = mb_detect_encoding($s, 'JIS');
-print("JIS: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, 'UTF-8,EUC-JP,JIS');
-print("EUC-JP: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, 'JIS,EUC-JP');
-print("EUC-JP: $s\n");
-
-
-
-// Using Encoding List Array
-echo "== ARRAY ENCODING LIST ==\n";
-
-$a = array(0=>'UTF-8',1=>'EUC-JP', 2=>'SJIS', 3=>'JIS');
-
-// Note: Due to detect order, detected as UTF-8
-$s = $jis;
-$s = mb_detect_encoding($s, $a);
-print("JIS: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, $a);
-print("EUC-JP: $s\n");
-
-$s = $sjis;
-$s = mb_detect_encoding($s, $a);
-print("SJIS: $s\n");
-
-
-// Using Detect Order
-echo "== DETECT ORDER ==\n";
-
-mb_detect_order('auto');
-
-
-$s = $jis;
-$s = mb_detect_encoding($s);
-print("JIS: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s);
-print("EUC-JP: $s\n");
-
-$s = $sjis;
-$s = mb_detect_encoding($s);
-print("SJIS: $s\n");
-
-
-// Invalid(?) Parameters
-echo "== INVALID PARAMETER ==\n";
-
-$s = mb_detect_encoding(1234, 'EUC-JP');
-print("INT: $s\n"); // EUC-JP
-
-$s = mb_detect_encoding('', 'EUC-JP');
-print("EUC-JP: $s\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, 'BAD');
-print("BAD: $s\n"); // BAD
-
-$s = $euc_jp;
-$s = mb_detect_encoding();
-print("MP: $s\n"); // Missing parameter
-
-
-?>
diff --git a/ext/mbstring/tests/017.phpt b/ext/mbstring/tests/017.phpt
deleted file mode 100644
index 5f8528e5f7..0000000000
--- a/ext/mbstring/tests/017.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-mb_detect_encoding()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('017.inc'); ?>
---EXPECT--
-== BASIC TEST ==
-SJIS: SJIS
-JIS: JIS
-EUC-JP: EUC-JP
-EUC-JP: EUC-JP
-== ARRAY ENCODING LIST ==
-JIS: UTF-8
-EUC-JP: EUC-JP
-SJIS: SJIS
-== DETECT ORDER ==
-JIS: JIS
-EUC-JP: EUC-JP
-SJIS: SJIS
-== INVALID PARAMETER ==
-INT: EUC-JP
-EUC-JP: EUC-JP
-ERR: Warning
-BAD: EUC-JP
-ERR: Warning
-MP:
-
diff --git a/ext/mbstring/tests/018.inc b/ext/mbstring/tests/018.inc
deleted file mode 100644
index 3d9acfe383..0000000000
--- a/ext/mbstring/tests/018.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-// TODO: Add more encoding, strings.....
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print "1: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-/*
-
-print "2: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-print "3: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-// Note: Did not start form -22 offset. Staring from 0.
-print "4: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-
-$str = mb_strwidth($euc_jp, 100, -10,'...','EUC-JP');
-($str === "") ? print "5 OK\n" : print "NG: $str\n";
-
-$str = mb_strwidth($euc_jp, -100, 10,'...','EUC-JP');
-($str !== "") ? print "6 OK: $str\n" : print "NG: $str\n";
-*/
-?>
diff --git a/ext/mbstring/tests/018.phpt b/ext/mbstring/tests/018.phpt
deleted file mode 100644
index b212b84934..0000000000
--- a/ext/mbstring/tests/018.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-mb_strwidth()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('018.inc'); ?>
---EXPECT--
-1: 68
diff --git a/ext/mbstring/tests/019.inc b/ext/mbstring/tests/019.inc
deleted file mode 100644
index 8de98f4778..0000000000
--- a/ext/mbstring/tests/019.inc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-// TODO: Add more encodings
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// restore detect_order to 'auto'
-mb_detect_order('auto');
-
-// Test string
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-$ascii = 'abcdefghijklmnopqrstuvwxyz;]=#0123456789';
-
-// ASCII
-echo "== ASCII ==\n";
-print strlen($ascii,'ASCII') . "\n";
-print strlen($ascii) . "\n";
-
-// EUC-JP
-echo "== EUC-JP ==\n";
-print strlen($euc_jp,'EUC-JP') . "\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-print strlen($euc_jp) . "\n";
-
-// SJIS
-echo "== SJIS ==\n";
-$sjis = mb_convert_encoding($euc_jp, 'SJIS');
-print strlen($sjis,'SJIS') . "\n";
-mb_internal_encoding('SJIS') or print("mb_internal_encoding() failed\n");
-print strlen($sjis) . "\n";
-
-// JIS
-// Note: either convert_encoding or strlen has problem
-echo "== JIS ==\n";
-$jis = mb_convert_encoding($euc_jp, 'JIS');
-print strlen($jis,'JIS') . "\n";
-mb_internal_encoding('JIS') or print("mb_internal_encoding() failed\n");
-print strlen($jis) . "\n";
-
-// UTF-8
-// Note: either convert_encoding or strlen has problem
-echo "== UTF-8 ==\n";
-$utf8 = mb_convert_encoding($euc_jp, 'UTF-8');
-print strlen($utf8,'UTF-8') . "\n";
-mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
-print strlen($utf8) . "\n";
-
-
-// Wrong Parameters
-echo "== WRONG PARAMETERS ==\n";
-// Array
-// Note: PHP Notice, but returns some value
-$r = strlen($t_ary);
-echo $r."\n";
-// Object
-// Note: PHP Notice, but returns some value
-$r = strlen($t_obj);
-echo $r."\n";
-// Wrong encoding
-mb_internal_encoding('EUC-JP');
-$r = strlen($euc_jp, 'BAD_NAME');
-echo $r."\n";
-
-
-
-
-?>
diff --git a/ext/mbstring/tests/019.phpt b/ext/mbstring/tests/019.phpt
deleted file mode 100644
index 31eb4e3474..0000000000
--- a/ext/mbstring/tests/019.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-mb_strlen()
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php include('019.inc'); ?>
---EXPECT--
-== ASCII ==
-ERR: Warning
-
-40
-== EUC-JP ==
-ERR: Warning
-
-72
-== SJIS ==
-ERR: Warning
-
-72
-== JIS ==
-ERR: Warning
-
-121
-== UTF-8 ==
-ERR: Warning
-
-174
-== WRONG PARAMETERS ==
-ERR: Notice
-5
-ERR: Notice
-6
-ERR: Warning
-
-
-
diff --git a/ext/mbstring/tests/common.inc b/ext/mbstring/tests/common.inc
deleted file mode 100644
index d4d1d9a495..0000000000
--- a/ext/mbstring/tests/common.inc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/*
- * Common definition and Settings
- */
-
-// Custom Error Hanlder for testing
-function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
- global $debug;
-
- $err_type = array (
- 1 => "Error", // E_ERROR
- 2 => "Warning", // E_WARINING
- 4 => "Parsing Error", // E_PARSE
- 8 => "Notice", // E_NOTICE
- 16 => "Core Error", // E_CORE_ERROR
- 32 => "Core Warning", // E_CORE_WARNING
- 64 => "Compile Error", // E_COMPILE_ERROR
- 128 => "Compile Warning", // E_COMPILE_WARNING
- 256 => "User Error", // E_USER_ERROR
- 512 => "User Warning", // E_USER_WARMING
- 1024=> "User Notice" // E_USER_NOTICE
- );
-
- if (!empty($debug)) {
- printf("%s: %s (%d)\n", $err_type[$err_no], $err_msg, $linenum);
- }
- else {
- printf("ERR: %s\n",$err_type[$err_no]);
- }
-}
-
-set_error_handler('test_error_handler');
-
-
-// Var def for testing
-$t_ary = array(
- 's1' => 'ÆüËܸìEUC-JP¤Îʸ»úÎó',
- 's2' => 'English Text'
- );
-
-class tc
-{
- var $s1 = 'ÆüËܸìEUC-JP¤Îʸ»úÎó';
- var $s2 = 'English Text';
-
- function tc()
- {
- }
-}
-
-$t_obj = new tc;
-
-?> \ No newline at end of file
diff --git a/ext/mbstring/tests/skipif.inc b/ext/mbstring/tests/skipif.inc
deleted file mode 100644
index 00fc532bf7..0000000000
--- a/ext/mbstring/tests/skipif.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-
-if (!extension_loaded("mbstring") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("mbstring$dlext");
-}
-if (!extension_loaded("mbstring")) {
- die("skip\n");
-}
-?>
diff --git a/ext/mbstring/unicode_table.h b/ext/mbstring/unicode_table.h
deleted file mode 100644
index 884e6e37ae..0000000000
--- a/ext/mbstring/unicode_table.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/* charactor property table */
-#define MBFL_CHP_CTL 0x01
-#define MBFL_CHP_DIGIT 0x02
-#define MBFL_CHP_UALPHA 0x04
-#define MBFL_CHP_LALPHA 0x08
-#define MBFL_CHP_MMHQENC 0x10 /* must Q-encoding in MIME Header encoded-word */
-#define MBFL_CHP_MSPECIAL 0x20 /* RFC822 Special characters */
-
-/*
- * Unicode table
- */
-
-
-/* Windows CodePage 1252 - it's the same as iso-8859-1 but
- * defines extra symbols in the range 0x80-0x9f.
- * This table differs from the rest of the unicode tables below
- * as it only covers this range, while the rest cover 0xa0 onwards */
-static const unsigned short cp1252_ucs_table[] = {
- 0x20ac,0xfffe,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021,
- 0x02c6,0x2030,0x0160,0x2039,0x0152,0xfffe,0x017d,0xfffe,
- 0xfffe,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014,
- 0x02dc,0x2122,0x0161,0x203a,0x0153,0xfffe,0x017e,0x0178
-};
-
-
-static const unsigned short iso8859_2_ucs_table[] = {
- 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7,
- 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B,
- 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7,
- 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C,
- 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
- 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
- 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
- 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
- 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
- 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
- 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
- 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9
-};
-
-
-static const unsigned short iso8859_3_ucs_table[] = {
- 0x00A0,0x0126,0x02D8,0x00A3,0x00A4,0x0000,0x0124,0x00A7,
- 0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,0x0000,0x017B,
- 0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7,
- 0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,0x0000,0x017C,
- 0x00C0,0x00C1,0x00C2,0x0000,0x00C4,0x010A,0x0108,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x0000,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7,
- 0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x0000,0x00E4,0x010B,0x0109,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x0000,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7,
- 0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9
-};
-
-
-static const unsigned short iso8859_4_ucs_table[] = {
- 0x00A0,0x0104,0x0138,0x0156,0x00A4,0x0128,0x013B,0x00A7,
- 0x00A8,0x0160,0x0112,0x0122,0x0166,0x00AD,0x017D,0x00AF,
- 0x00B0,0x0105,0x02DB,0x0157,0x00B4,0x0129,0x013C,0x02C7,
- 0x00B8,0x0161,0x0113,0x0123,0x0167,0x014A,0x017E,0x014B,
- 0x0100,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x012E,
- 0x010C,0x00C9,0x0118,0x00CB,0x0116,0x00CD,0x00CE,0x012A,
- 0x0110,0x0145,0x014C,0x0136,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x0172,0x00DA,0x00DB,0x00DC,0x0168,0x016A,0x00DF,
- 0x0101,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x012F,
- 0x010D,0x00E9,0x0119,0x00EB,0x0117,0x00ED,0x00EE,0x012B,
- 0x0111,0x0146,0x014D,0x0137,0x00F4,0x00F5,0x00F6,0x00F7,
- 0x00F8,0x0173,0x00FA,0x00FB,0x00FC,0x0169,0x016B,0x02D9
-};
-
-
-static const unsigned short iso8859_5_ucs_table[] = {
- 0x00A0,0x0401,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,
- 0x0408,0x0409,0x040A,0x040B,0x040C,0x00AD,0x040E,0x040F,
- 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
- 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
- 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
- 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
- 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
- 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
- 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
- 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F,
- 0x2116,0x0451,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457,
- 0x0458,0x0459,0x045A,0x045B,0x045C,0x00A7,0x045E,0x045F
-};
-
-
-static const unsigned short iso8859_6_ucs_table[] = {
- 0x00A0,0x0000,0x0000,0x0000,0x00A4,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x060C,0x00AD,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x061B,0x0000,0x0000,0x0000,0x061F,
- 0x0000,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
- 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
- 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637,
- 0x0638,0x0639,0x063A,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647,
- 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F,
- 0x0650,0x0651,0x0652,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x060C,0x00AD,0x0000,0x0000
-};
-
-
-static const unsigned short iso8859_7_ucs_table[] = {
- 0x00A0,0x2018,0x2019,0x00A3,0x0000,0x0000,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x0000,0x00AB,0x00AC,0x00AD,0x0000,0x2015,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x0385,0x0386,0x00B7,
- 0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F,
- 0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
- 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,
- 0x03A0,0x03A1,0x0000,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,
- 0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
- 0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,
- 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,
- 0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,
- 0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000
-};
-
-
-static const unsigned short iso8859_8_ucs_table[] = {
- 0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x203E,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
- 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2017,
- 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,
- 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
- 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,
- 0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-
-
-static const unsigned short iso8859_9_ucs_table[] = {
- 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
- 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
- 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF
-};
-
-
-static const unsigned short iso8859_10_ucs_table[] = {
- 0x00A0,0x0104,0x0112,0x0122,0x0124,0x0128,0x0136,0x00A7,
- 0x013B,0x0110,0x0160,0x0166,0x017D,0x00AD,0x016A,0x014A,
- 0x00B0,0x0105,0x0113,0x0123,0x012B,0x0129,0x0137,0x00B7,
- 0x013C,0x0111,0x0161,0x0167,0x017E,0x2015,0x016B,0x014B,
- 0x0100,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x012E,
- 0x010C,0x00C9,0x0118,0x00CB,0x0116,0x00CD,0x00CE,0x00CF,
- 0x00D0,0x0145,0x014C,0x00D3,0x00D4,0x00D5,0x00D6,0x0168,
- 0x00D8,0x0172,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
- 0x0101,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x012F,
- 0x010D,0x00E9,0x0119,0x00EB,0x0117,0x00ED,0x00EE,0x00EF,
- 0x00F0,0x0146,0x014D,0x00F3,0x00F4,0x00F5,0x00F6,0x0169,
- 0x00F8,0x0173,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x0138
-};
-
-
-static const unsigned short iso8859_13_ucs_table[] = {
- 0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7,
- 0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7,
- 0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6,
- 0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112,
- 0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B,
- 0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7,
- 0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF,
- 0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113,
- 0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C,
- 0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7,
- 0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019
-};
-
-
-static const unsigned short iso8859_14_ucs_table[] = {
- 0x00A0,0x1E02,0x1E03,0x00A3,0x010A,0x010B,0x1E0A,0x00A7,
- 0x1E80,0x00A9,0x1E82,0x1E0B,0x1EF2,0x00AD,0x00AE,0x0178,
- 0x1E1E,0x1E1F,0x0120,0x0121,0x1E40,0x1E41,0x00B6,0x1E56,
- 0x1E81,0x1E57,0x1E83,0x1E60,0x1EF3,0x1E84,0x1E85,0x1E61,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x0174,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x1E6A,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x0176,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x0175,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x1E6B,
- 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x0177,0x00FF
-};
-
-
-static const unsigned short iso8859_15_ucs_table[] = {
- 0x00A0,0x00A1,0x00A2,0x00A3,0x20AC,0x00A5,0x0160,0x00A7,
- 0x0161,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x017D,0x00B5,0x00B6,0x00B7,
- 0x017E,0x00B9,0x00BA,0x00BB,0x0152,0x0153,0x0178,0x00BF,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
- 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF
-};
-
-
-static const unsigned char mbfl_charprop_table[] = {
-/* NUL 0 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC,
-/* SCH 1 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SIX 2 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EIX 3 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EOT 4 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ENQ 5 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ACK 6 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* BEL 7 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* BS 8 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* HI 9 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* LF 10 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* VI 11 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* FF 12 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CR 13 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SO 14 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SI 15 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SLE 16 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CSI 17 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC2 18 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC3 19 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC4 20 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* NAK 21 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SYN 22 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EIB 23 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CAN 24 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EM 25 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SLB 26 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ESC 27 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* FS 28 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* GS 29 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* RS 30 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* US 31 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SP 32 */ MBFL_CHP_MMHQENC ,
-/* ! 33 */ 0 ,
-/* " 34 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* # 35 */ MBFL_CHP_MMHQENC ,
-/* $ 36 */ MBFL_CHP_MMHQENC ,
-/* % 37 */ MBFL_CHP_MMHQENC ,
-/* & 38 */ MBFL_CHP_MMHQENC ,
-/* ' 39 */ MBFL_CHP_MMHQENC ,
-/* ( 40 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ) 41 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* * 42 */ 0 ,
-/* + 43 */ 0 ,
-/* , 44 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* - 45 */ 0 ,
-/* . 46 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* / 47 */ 0 ,
-/* 0 48 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 1 49 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 2 50 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 3 51 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 4 52 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 5 53 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 6 54 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 7 55 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 8 56 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 9 57 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* : 58 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ; 59 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* < 60 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* = 61 */ 0 ,
-/* > 62 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ? 63 */ MBFL_CHP_MMHQENC ,
-/* @ 64 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* A 65 */ MBFL_CHP_UALPHA ,
-/* B 66 */ MBFL_CHP_UALPHA ,
-/* C 67 */ MBFL_CHP_UALPHA ,
-/* D 68 */ MBFL_CHP_UALPHA ,
-/* E 69 */ MBFL_CHP_UALPHA ,
-/* F 70 */ MBFL_CHP_UALPHA ,
-/* G 71 */ MBFL_CHP_UALPHA ,
-/* H 72 */ MBFL_CHP_UALPHA ,
-/* I 73 */ MBFL_CHP_UALPHA ,
-/* J 74 */ MBFL_CHP_UALPHA ,
-/* K 75 */ MBFL_CHP_UALPHA ,
-/* L 76 */ MBFL_CHP_UALPHA ,
-/* M 77 */ MBFL_CHP_UALPHA ,
-/* N 78 */ MBFL_CHP_UALPHA ,
-/* O 79 */ MBFL_CHP_UALPHA ,
-/* P 80 */ MBFL_CHP_UALPHA ,
-/* Q 81 */ MBFL_CHP_UALPHA ,
-/* R 82 */ MBFL_CHP_UALPHA ,
-/* S 83 */ MBFL_CHP_UALPHA ,
-/* T 84 */ MBFL_CHP_UALPHA ,
-/* U 85 */ MBFL_CHP_UALPHA ,
-/* V 86 */ MBFL_CHP_UALPHA ,
-/* W 87 */ MBFL_CHP_UALPHA ,
-/* X 88 */ MBFL_CHP_UALPHA ,
-/* Y 89 */ MBFL_CHP_UALPHA ,
-/* Z 90 */ MBFL_CHP_UALPHA ,
-/* [ 91 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* \ 92 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ] 93 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ^ 94 */ MBFL_CHP_MMHQENC ,
-/* _ 95 */ MBFL_CHP_MMHQENC ,
-/* ` 96 */ MBFL_CHP_MMHQENC ,
-/* a 97 */ MBFL_CHP_LALPHA ,
-/* b 98 */ MBFL_CHP_LALPHA ,
-/* c 99 */ MBFL_CHP_LALPHA ,
-/* d 100 */ MBFL_CHP_LALPHA ,
-/* e 101 */ MBFL_CHP_LALPHA ,
-/* f 102 */ MBFL_CHP_LALPHA ,
-/* g 103 */ MBFL_CHP_LALPHA ,
-/* h 104 */ MBFL_CHP_LALPHA ,
-/* i 105 */ MBFL_CHP_LALPHA ,
-/* j 106 */ MBFL_CHP_LALPHA ,
-/* k 107 */ MBFL_CHP_LALPHA ,
-/* l 108 */ MBFL_CHP_LALPHA ,
-/* m 109 */ MBFL_CHP_LALPHA ,
-/* n 110 */ MBFL_CHP_LALPHA ,
-/* o 111 */ MBFL_CHP_LALPHA ,
-/* p 112 */ MBFL_CHP_LALPHA ,
-/* q 113 */ MBFL_CHP_LALPHA ,
-/* r 114 */ MBFL_CHP_LALPHA ,
-/* s 115 */ MBFL_CHP_LALPHA ,
-/* t 116 */ MBFL_CHP_LALPHA ,
-/* u 117 */ MBFL_CHP_LALPHA ,
-/* v 118 */ MBFL_CHP_LALPHA ,
-/* w 119 */ MBFL_CHP_LALPHA ,
-/* x 120 */ MBFL_CHP_LALPHA ,
-/* y 121 */ MBFL_CHP_LALPHA ,
-/* z 122 */ MBFL_CHP_LALPHA ,
-/* { 123 */ MBFL_CHP_MMHQENC ,
-/* | 124 */ MBFL_CHP_MMHQENC ,
-/* } 125 */ MBFL_CHP_MMHQENC ,
-/* ~ 126 */ MBFL_CHP_MMHQENC ,
-/* DEL 127 */ MBFL_CHP_MMHQENC
-};
diff --git a/ext/mbstring/unicode_table_cn.h b/ext/mbstring/unicode_table_cn.h
deleted file mode 100644
index ca440a3de9..0000000000
--- a/ext/mbstring/unicode_table_cn.h
+++ /dev/null
@@ -1,6463 +0,0 @@
-/*
- * Unicode table
- */
-
-static const unsigned short cp936_ucs_table[] = {
-/* 0x8100 */
-0x4e02,0x4e04,0x4e05,0x4e06,0x4e0f,0x4e12,0x4e17,0x4e1f,
-0x4e20,0x4e21,0x4e23,0x4e26,0x4e29,0x4e2e,0x4e2f,0x4e31,
-0x4e33,0x4e35,0x4e37,0x4e3c,0x4e40,0x4e41,0x4e42,0x4e44,
-0x4e46,0x4e4a,0x4e51,0x4e55,0x4e57,0x4e5a,0x4e5b,0x4e62,
-0x4e63,0x4e64,0x4e65,0x4e67,0x4e68,0x4e6a,0x4e6b,0x4e6c,
-0x4e6d,0x4e6e,0x4e6f,0x4e72,0x4e74,0x4e75,0x4e76,0x4e77,
-0x4e78,0x4e79,0x4e7a,0x4e7b,0x4e7c,0x4e7d,0x4e7f,0x4e80,
-0x4e81,0x4e82,0x4e83,0x4e84,0x4e85,0x4e87,0x4e8a,0x0000,
-0x4e90,0x4e96,0x4e97,0x4e99,0x4e9c,0x4e9d,0x4e9e,0x4ea3,
-0x4eaa,0x4eaf,0x4eb0,0x4eb1,0x4eb4,0x4eb6,0x4eb7,0x4eb8,
-0x4eb9,0x4ebc,0x4ebd,0x4ebe,0x4ec8,0x4ecc,0x4ecf,0x4ed0,
-0x4ed2,0x4eda,0x4edb,0x4edc,0x4ee0,0x4ee2,0x4ee6,0x4ee7,
-0x4ee9,0x4eed,0x4eee,0x4eef,0x4ef1,0x4ef4,0x4ef8,0x4ef9,
-0x4efa,0x4efc,0x4efe,0x4f00,0x4f02,0x4f03,0x4f04,0x4f05,
-0x4f06,0x4f07,0x4f08,0x4f0b,0x4f0c,0x4f12,0x4f13,0x4f14,
-0x4f15,0x4f16,0x4f1c,0x4f1d,0x4f21,0x4f23,0x4f28,0x4f29,
-0x4f2c,0x4f2d,0x4f2e,0x4f31,0x4f33,0x4f35,0x4f37,0x4f39,
-0x4f3b,0x4f3e,0x4f3f,0x4f40,0x4f41,0x4f42,0x4f44,0x4f45,
-0x4f47,0x4f48,0x4f49,0x4f4a,0x4f4b,0x4f4c,0x4f52,0x4f54,
-0x4f56,0x4f61,0x4f62,0x4f66,0x4f68,0x4f6a,0x4f6b,0x4f6d,
-0x4f6e,0x4f71,0x4f72,0x4f75,0x4f77,0x4f78,0x4f79,0x4f7a,
-0x4f7d,0x4f80,0x4f81,0x4f82,0x4f85,0x4f86,0x4f87,0x4f8a,
-0x4f8c,0x4f8e,0x4f90,0x4f92,0x4f93,0x4f95,0x4f96,0x4f98,
-0x4f99,0x4f9a,0x4f9c,0x4f9e,0x4f9f,0x4fa1,0x4fa2,0x0000,
-/* 0x8200 */
-0x4fa4,0x4fab,0x4fad,0x4fb0,0x4fb1,0x4fb2,0x4fb3,0x4fb4,
-0x4fb6,0x4fb7,0x4fb8,0x4fb9,0x4fba,0x4fbb,0x4fbc,0x4fbd,
-0x4fbe,0x4fc0,0x4fc1,0x4fc2,0x4fc6,0x4fc7,0x4fc8,0x4fc9,
-0x4fcb,0x4fcc,0x4fcd,0x4fd2,0x4fd3,0x4fd4,0x4fd5,0x4fd6,
-0x4fd9,0x4fdb,0x4fe0,0x4fe2,0x4fe4,0x4fe5,0x4fe7,0x4feb,
-0x4fec,0x4ff0,0x4ff2,0x4ff4,0x4ff5,0x4ff6,0x4ff7,0x4ff9,
-0x4ffb,0x4ffc,0x4ffd,0x4fff,0x5000,0x5001,0x5002,0x5003,
-0x5004,0x5005,0x5006,0x5007,0x5008,0x5009,0x500a,0x0000,
-0x500b,0x500e,0x5010,0x5011,0x5013,0x5015,0x5016,0x5017,
-0x501b,0x501d,0x501e,0x5020,0x5022,0x5023,0x5024,0x5027,
-0x502b,0x502f,0x5030,0x5031,0x5032,0x5033,0x5034,0x5035,
-0x5036,0x5037,0x5038,0x5039,0x503b,0x503d,0x503f,0x5040,
-0x5041,0x5042,0x5044,0x5045,0x5046,0x5049,0x504a,0x504b,
-0x504d,0x5050,0x5051,0x5052,0x5053,0x5054,0x5056,0x5057,
-0x5058,0x5059,0x505b,0x505d,0x505e,0x505f,0x5060,0x5061,
-0x5062,0x5063,0x5064,0x5066,0x5067,0x5068,0x5069,0x506a,
-0x506b,0x506d,0x506e,0x506f,0x5070,0x5071,0x5072,0x5073,
-0x5074,0x5075,0x5078,0x5079,0x507a,0x507c,0x507d,0x5081,
-0x5082,0x5083,0x5084,0x5086,0x5087,0x5089,0x508a,0x508b,
-0x508c,0x508e,0x508f,0x5090,0x5091,0x5092,0x5093,0x5094,
-0x5095,0x5096,0x5097,0x5098,0x5099,0x509a,0x509b,0x509c,
-0x509d,0x509e,0x509f,0x50a0,0x50a1,0x50a2,0x50a4,0x50a6,
-0x50aa,0x50ab,0x50ad,0x50ae,0x50af,0x50b0,0x50b1,0x50b3,
-0x50b4,0x50b5,0x50b6,0x50b7,0x50b8,0x50b9,0x50bc,0x0000,
-/* 0x8300 */
-0x50bd,0x50be,0x50bf,0x50c0,0x50c1,0x50c2,0x50c3,0x50c4,
-0x50c5,0x50c6,0x50c7,0x50c8,0x50c9,0x50ca,0x50cb,0x50cc,
-0x50cd,0x50ce,0x50d0,0x50d1,0x50d2,0x50d3,0x50d4,0x50d5,
-0x50d7,0x50d8,0x50d9,0x50db,0x50dc,0x50dd,0x50de,0x50df,
-0x50e0,0x50e1,0x50e2,0x50e3,0x50e4,0x50e5,0x50e8,0x50e9,
-0x50ea,0x50eb,0x50ef,0x50f0,0x50f1,0x50f2,0x50f4,0x50f6,
-0x50f7,0x50f8,0x50f9,0x50fa,0x50fc,0x50fd,0x50fe,0x50ff,
-0x5100,0x5101,0x5102,0x5103,0x5104,0x5105,0x5108,0x0000,
-0x5109,0x510a,0x510c,0x510d,0x510e,0x510f,0x5110,0x5111,
-0x5113,0x5114,0x5115,0x5116,0x5117,0x5118,0x5119,0x511a,
-0x511b,0x511c,0x511d,0x511e,0x511f,0x5120,0x5122,0x5123,
-0x5124,0x5125,0x5126,0x5127,0x5128,0x5129,0x512a,0x512b,
-0x512c,0x512d,0x512e,0x512f,0x5130,0x5131,0x5132,0x5133,
-0x5134,0x5135,0x5136,0x5137,0x5138,0x5139,0x513a,0x513b,
-0x513c,0x513d,0x513e,0x5142,0x5147,0x514a,0x514c,0x514e,
-0x514f,0x5150,0x5152,0x5153,0x5157,0x5158,0x5159,0x515b,
-0x515d,0x515e,0x515f,0x5160,0x5161,0x5163,0x5164,0x5166,
-0x5167,0x5169,0x516a,0x516f,0x5172,0x517a,0x517e,0x517f,
-0x5183,0x5184,0x5186,0x5187,0x518a,0x518b,0x518e,0x518f,
-0x5190,0x5191,0x5193,0x5194,0x5198,0x519a,0x519d,0x519e,
-0x519f,0x51a1,0x51a3,0x51a6,0x51a7,0x51a8,0x51a9,0x51aa,
-0x51ad,0x51ae,0x51b4,0x51b8,0x51b9,0x51ba,0x51be,0x51bf,
-0x51c1,0x51c2,0x51c3,0x51c5,0x51c8,0x51ca,0x51cd,0x51ce,
-0x51d0,0x51d2,0x51d3,0x51d4,0x51d5,0x51d6,0x51d7,0x0000,
-/* 0x8400 */
-0x51d8,0x51d9,0x51da,0x51dc,0x51de,0x51df,0x51e2,0x51e3,
-0x51e5,0x51e6,0x51e7,0x51e8,0x51e9,0x51ea,0x51ec,0x51ee,
-0x51f1,0x51f2,0x51f4,0x51f7,0x51fe,0x5204,0x5205,0x5209,
-0x520b,0x520c,0x520f,0x5210,0x5213,0x5214,0x5215,0x521c,
-0x521e,0x521f,0x5221,0x5222,0x5223,0x5225,0x5226,0x5227,
-0x522a,0x522c,0x522f,0x5231,0x5232,0x5234,0x5235,0x523c,
-0x523e,0x5244,0x5245,0x5246,0x5247,0x5248,0x5249,0x524b,
-0x524e,0x524f,0x5252,0x5253,0x5255,0x5257,0x5258,0x0000,
-0x5259,0x525a,0x525b,0x525d,0x525f,0x5260,0x5262,0x5263,
-0x5264,0x5266,0x5268,0x526b,0x526c,0x526d,0x526e,0x5270,
-0x5271,0x5273,0x5274,0x5275,0x5276,0x5277,0x5278,0x5279,
-0x527a,0x527b,0x527c,0x527e,0x5280,0x5283,0x5284,0x5285,
-0x5286,0x5287,0x5289,0x528a,0x528b,0x528c,0x528d,0x528e,
-0x528f,0x5291,0x5292,0x5294,0x5295,0x5296,0x5297,0x5298,
-0x5299,0x529a,0x529c,0x52a4,0x52a5,0x52a6,0x52a7,0x52ae,
-0x52af,0x52b0,0x52b4,0x52b5,0x52b6,0x52b7,0x52b8,0x52b9,
-0x52ba,0x52bb,0x52bc,0x52bd,0x52c0,0x52c1,0x52c2,0x52c4,
-0x52c5,0x52c6,0x52c8,0x52ca,0x52cc,0x52cd,0x52ce,0x52cf,
-0x52d1,0x52d3,0x52d4,0x52d5,0x52d7,0x52d9,0x52da,0x52db,
-0x52dc,0x52dd,0x52de,0x52e0,0x52e1,0x52e2,0x52e3,0x52e5,
-0x52e6,0x52e7,0x52e8,0x52e9,0x52ea,0x52eb,0x52ec,0x52ed,
-0x52ee,0x52ef,0x52f1,0x52f2,0x52f3,0x52f4,0x52f5,0x52f6,
-0x52f7,0x52f8,0x52fb,0x52fc,0x52fd,0x5301,0x5302,0x5303,
-0x5304,0x5307,0x5309,0x530a,0x530b,0x530c,0x530e,0x0000,
-/* 0x8500 */
-0x5311,0x5312,0x5313,0x5314,0x5318,0x531b,0x531c,0x531e,
-0x531f,0x5322,0x5324,0x5325,0x5327,0x5328,0x5329,0x532b,
-0x532c,0x532d,0x532f,0x5330,0x5331,0x5332,0x5333,0x5334,
-0x5335,0x5336,0x5337,0x5338,0x533c,0x533d,0x5340,0x5342,
-0x5344,0x5346,0x534b,0x534c,0x534d,0x5350,0x5354,0x5358,
-0x5359,0x535b,0x535d,0x5365,0x5368,0x536a,0x536c,0x536d,
-0x5372,0x5376,0x5379,0x537b,0x537c,0x537d,0x537e,0x5380,
-0x5381,0x5383,0x5387,0x5388,0x538a,0x538e,0x538f,0x0000,
-0x5390,0x5391,0x5392,0x5393,0x5394,0x5396,0x5397,0x5399,
-0x539b,0x539c,0x539e,0x53a0,0x53a1,0x53a4,0x53a7,0x53aa,
-0x53ab,0x53ac,0x53ad,0x53af,0x53b0,0x53b1,0x53b2,0x53b3,
-0x53b4,0x53b5,0x53b7,0x53b8,0x53b9,0x53ba,0x53bc,0x53bd,
-0x53be,0x53c0,0x53c3,0x53c4,0x53c5,0x53c6,0x53c7,0x53ce,
-0x53cf,0x53d0,0x53d2,0x53d3,0x53d5,0x53da,0x53dc,0x53dd,
-0x53de,0x53e1,0x53e2,0x53e7,0x53f4,0x53fa,0x53fe,0x53ff,
-0x5400,0x5402,0x5405,0x5407,0x540b,0x5414,0x5418,0x5419,
-0x541a,0x541c,0x5422,0x5424,0x5425,0x542a,0x5430,0x5433,
-0x5436,0x5437,0x543a,0x543d,0x543f,0x5441,0x5442,0x5444,
-0x5445,0x5447,0x5449,0x544c,0x544d,0x544e,0x544f,0x5451,
-0x545a,0x545d,0x545e,0x545f,0x5460,0x5461,0x5463,0x5465,
-0x5467,0x5469,0x546a,0x546b,0x546c,0x546d,0x546e,0x546f,
-0x5470,0x5474,0x5479,0x547a,0x547e,0x547f,0x5481,0x5483,
-0x5485,0x5487,0x5488,0x5489,0x548a,0x548d,0x5491,0x5493,
-0x5497,0x5498,0x549c,0x549e,0x549f,0x54a0,0x54a1,0x0000,
-/* 0x8600 */
-0x54a2,0x54a5,0x54ae,0x54b0,0x54b2,0x54b5,0x54b6,0x54b7,
-0x54b9,0x54ba,0x54bc,0x54be,0x54c3,0x54c5,0x54ca,0x54cb,
-0x54d6,0x54d8,0x54db,0x54e0,0x54e1,0x54e2,0x54e3,0x54e4,
-0x54eb,0x54ec,0x54ef,0x54f0,0x54f1,0x54f4,0x54f5,0x54f6,
-0x54f7,0x54f8,0x54f9,0x54fb,0x54fe,0x5500,0x5502,0x5503,
-0x5504,0x5505,0x5508,0x550a,0x550b,0x550c,0x550d,0x550e,
-0x5512,0x5513,0x5515,0x5516,0x5517,0x5518,0x5519,0x551a,
-0x551c,0x551d,0x551e,0x551f,0x5521,0x5525,0x5526,0x0000,
-0x5528,0x5529,0x552b,0x552d,0x5532,0x5534,0x5535,0x5536,
-0x5538,0x5539,0x553a,0x553b,0x553d,0x5540,0x5542,0x5545,
-0x5547,0x5548,0x554b,0x554c,0x554d,0x554e,0x554f,0x5551,
-0x5552,0x5553,0x5554,0x5557,0x5558,0x5559,0x555a,0x555b,
-0x555d,0x555e,0x555f,0x5560,0x5562,0x5563,0x5568,0x5569,
-0x556b,0x556f,0x5570,0x5571,0x5572,0x5573,0x5574,0x5579,
-0x557a,0x557d,0x557f,0x5585,0x5586,0x558c,0x558d,0x558e,
-0x5590,0x5592,0x5593,0x5595,0x5596,0x5597,0x559a,0x559b,
-0x559e,0x55a0,0x55a1,0x55a2,0x55a3,0x55a4,0x55a5,0x55a6,
-0x55a8,0x55a9,0x55aa,0x55ab,0x55ac,0x55ad,0x55ae,0x55af,
-0x55b0,0x55b2,0x55b4,0x55b6,0x55b8,0x55ba,0x55bc,0x55bf,
-0x55c0,0x55c1,0x55c2,0x55c3,0x55c6,0x55c7,0x55c8,0x55ca,
-0x55cb,0x55ce,0x55cf,0x55d0,0x55d5,0x55d7,0x55d8,0x55d9,
-0x55da,0x55db,0x55de,0x55e0,0x55e2,0x55e7,0x55e9,0x55ed,
-0x55ee,0x55f0,0x55f1,0x55f4,0x55f6,0x55f8,0x55f9,0x55fa,
-0x55fb,0x55fc,0x55ff,0x5602,0x5603,0x5604,0x5605,0x0000,
-/* 0x8700 */
-0x5606,0x5607,0x560a,0x560b,0x560d,0x5610,0x5611,0x5612,
-0x5613,0x5614,0x5615,0x5616,0x5617,0x5619,0x561a,0x561c,
-0x561d,0x5620,0x5621,0x5622,0x5625,0x5626,0x5628,0x5629,
-0x562a,0x562b,0x562e,0x562f,0x5630,0x5633,0x5635,0x5637,
-0x5638,0x563a,0x563c,0x563d,0x563e,0x5640,0x5641,0x5642,
-0x5643,0x5644,0x5645,0x5646,0x5647,0x5648,0x5649,0x564a,
-0x564b,0x564f,0x5650,0x5651,0x5652,0x5653,0x5655,0x5656,
-0x565a,0x565b,0x565d,0x565e,0x565f,0x5660,0x5661,0x0000,
-0x5663,0x5665,0x5666,0x5667,0x566d,0x566e,0x566f,0x5670,
-0x5672,0x5673,0x5674,0x5675,0x5677,0x5678,0x5679,0x567a,
-0x567d,0x567e,0x567f,0x5680,0x5681,0x5682,0x5683,0x5684,
-0x5687,0x5688,0x5689,0x568a,0x568b,0x568c,0x568d,0x5690,
-0x5691,0x5692,0x5694,0x5695,0x5696,0x5697,0x5698,0x5699,
-0x569a,0x569b,0x569c,0x569d,0x569e,0x569f,0x56a0,0x56a1,
-0x56a2,0x56a4,0x56a5,0x56a6,0x56a7,0x56a8,0x56a9,0x56aa,
-0x56ab,0x56ac,0x56ad,0x56ae,0x56b0,0x56b1,0x56b2,0x56b3,
-0x56b4,0x56b5,0x56b6,0x56b8,0x56b9,0x56ba,0x56bb,0x56bd,
-0x56be,0x56bf,0x56c0,0x56c1,0x56c2,0x56c3,0x56c4,0x56c5,
-0x56c6,0x56c7,0x56c8,0x56c9,0x56cb,0x56cc,0x56cd,0x56ce,
-0x56cf,0x56d0,0x56d1,0x56d2,0x56d3,0x56d5,0x56d6,0x56d8,
-0x56d9,0x56dc,0x56e3,0x56e5,0x56e6,0x56e7,0x56e8,0x56e9,
-0x56ea,0x56ec,0x56ee,0x56ef,0x56f2,0x56f3,0x56f6,0x56f7,
-0x56f8,0x56fb,0x56fc,0x5700,0x5701,0x5702,0x5705,0x5707,
-0x570b,0x570c,0x570d,0x570e,0x570f,0x5710,0x5711,0x0000,
-/* 0x8800 */
-0x5712,0x5713,0x5714,0x5715,0x5716,0x5717,0x5718,0x5719,
-0x571a,0x571b,0x571d,0x571e,0x5720,0x5721,0x5722,0x5724,
-0x5725,0x5726,0x5727,0x572b,0x5731,0x5732,0x5734,0x5735,
-0x5736,0x5737,0x5738,0x573c,0x573d,0x573f,0x5741,0x5743,
-0x5744,0x5745,0x5746,0x5748,0x5749,0x574b,0x5752,0x5753,
-0x5754,0x5755,0x5756,0x5758,0x5759,0x5762,0x5763,0x5765,
-0x5767,0x576c,0x576e,0x5770,0x5771,0x5772,0x5774,0x5775,
-0x5778,0x5779,0x577a,0x577d,0x577e,0x577f,0x5780,0x0000,
-0x5781,0x5787,0x5788,0x5789,0x578a,0x578d,0x578e,0x578f,
-0x5790,0x5791,0x5794,0x5795,0x5796,0x5797,0x5798,0x5799,
-0x579a,0x579c,0x579d,0x579e,0x579f,0x57a5,0x57a8,0x57aa,
-0x57ac,0x57af,0x57b0,0x57b1,0x57b3,0x57b5,0x57b6,0x57b7,
-0x57b9,0x57ba,0x57bb,0x57bc,0x57bd,0x57be,0x57bf,0x57c0,
-0x57c1,0x57c4,0x57c5,0x57c6,0x57c7,0x57c8,0x57c9,0x57ca,
-0x57cc,0x57cd,0x57d0,0x57d1,0x57d3,0x57d6,0x57d7,0x57db,
-0x57dc,0x57de,0x57e1,0x57e2,0x57e3,0x57e5,0x57e6,0x57e7,
-0x57e8,0x57e9,0x57ea,0x57eb,0x57ec,0x57ee,0x57f0,0x57f1,
-0x57f2,0x57f3,0x57f5,0x57f6,0x57f7,0x57fb,0x57fc,0x57fe,
-0x57ff,0x5801,0x5803,0x5804,0x5805,0x5808,0x5809,0x580a,
-0x580c,0x580e,0x580f,0x5810,0x5812,0x5813,0x5814,0x5816,
-0x5817,0x5818,0x581a,0x581b,0x581c,0x581d,0x581f,0x5822,
-0x5823,0x5825,0x5826,0x5827,0x5828,0x5829,0x582b,0x582c,
-0x582d,0x582e,0x582f,0x5831,0x5832,0x5833,0x5834,0x5836,
-0x5837,0x5838,0x5839,0x583a,0x583b,0x583c,0x583d,0x0000,
-/* 0x8900 */
-0x583e,0x583f,0x5840,0x5841,0x5842,0x5843,0x5845,0x5846,
-0x5847,0x5848,0x5849,0x584a,0x584b,0x584e,0x584f,0x5850,
-0x5852,0x5853,0x5855,0x5856,0x5857,0x5859,0x585a,0x585b,
-0x585c,0x585d,0x585f,0x5860,0x5861,0x5862,0x5863,0x5864,
-0x5866,0x5867,0x5868,0x5869,0x586a,0x586d,0x586e,0x586f,
-0x5870,0x5871,0x5872,0x5873,0x5874,0x5875,0x5876,0x5877,
-0x5878,0x5879,0x587a,0x587b,0x587c,0x587d,0x587f,0x5882,
-0x5884,0x5886,0x5887,0x5888,0x588a,0x588b,0x588c,0x0000,
-0x588d,0x588e,0x588f,0x5890,0x5891,0x5894,0x5895,0x5896,
-0x5897,0x5898,0x589b,0x589c,0x589d,0x58a0,0x58a1,0x58a2,
-0x58a3,0x58a4,0x58a5,0x58a6,0x58a7,0x58aa,0x58ab,0x58ac,
-0x58ad,0x58ae,0x58af,0x58b0,0x58b1,0x58b2,0x58b3,0x58b4,
-0x58b5,0x58b6,0x58b7,0x58b8,0x58b9,0x58ba,0x58bb,0x58bd,
-0x58be,0x58bf,0x58c0,0x58c2,0x58c3,0x58c4,0x58c6,0x58c7,
-0x58c8,0x58c9,0x58ca,0x58cb,0x58cc,0x58cd,0x58ce,0x58cf,
-0x58d0,0x58d2,0x58d3,0x58d4,0x58d6,0x58d7,0x58d8,0x58d9,
-0x58da,0x58db,0x58dc,0x58dd,0x58de,0x58df,0x58e0,0x58e1,
-0x58e2,0x58e3,0x58e5,0x58e6,0x58e7,0x58e8,0x58e9,0x58ea,
-0x58ed,0x58ef,0x58f1,0x58f2,0x58f4,0x58f5,0x58f7,0x58f8,
-0x58fa,0x58fb,0x58fc,0x58fd,0x58fe,0x58ff,0x5900,0x5901,
-0x5903,0x5905,0x5906,0x5908,0x5909,0x590a,0x590b,0x590c,
-0x590e,0x5910,0x5911,0x5912,0x5913,0x5917,0x5918,0x591b,
-0x591d,0x591e,0x5920,0x5921,0x5922,0x5923,0x5926,0x5928,
-0x592c,0x5930,0x5932,0x5933,0x5935,0x5936,0x593b,0x0000,
-/* 0x8a00 */
-0x593d,0x593e,0x593f,0x5940,0x5943,0x5945,0x5946,0x594a,
-0x594c,0x594d,0x5950,0x5952,0x5953,0x5959,0x595b,0x595c,
-0x595d,0x595e,0x595f,0x5961,0x5963,0x5964,0x5966,0x5967,
-0x5968,0x5969,0x596a,0x596b,0x596c,0x596d,0x596e,0x596f,
-0x5970,0x5971,0x5972,0x5975,0x5977,0x597a,0x597b,0x597c,
-0x597e,0x597f,0x5980,0x5985,0x5989,0x598b,0x598c,0x598e,
-0x598f,0x5990,0x5991,0x5994,0x5995,0x5998,0x599a,0x599b,
-0x599c,0x599d,0x599f,0x59a0,0x59a1,0x59a2,0x59a6,0x0000,
-0x59a7,0x59ac,0x59ad,0x59b0,0x59b1,0x59b3,0x59b4,0x59b5,
-0x59b6,0x59b7,0x59b8,0x59ba,0x59bc,0x59bd,0x59bf,0x59c0,
-0x59c1,0x59c2,0x59c3,0x59c4,0x59c5,0x59c7,0x59c8,0x59c9,
-0x59cc,0x59cd,0x59ce,0x59cf,0x59d5,0x59d6,0x59d9,0x59db,
-0x59de,0x59df,0x59e0,0x59e1,0x59e2,0x59e4,0x59e6,0x59e7,
-0x59e9,0x59ea,0x59eb,0x59ed,0x59ee,0x59ef,0x59f0,0x59f1,
-0x59f2,0x59f3,0x59f4,0x59f5,0x59f6,0x59f7,0x59f8,0x59fa,
-0x59fc,0x59fd,0x59fe,0x5a00,0x5a02,0x5a0a,0x5a0b,0x5a0d,
-0x5a0e,0x5a0f,0x5a10,0x5a12,0x5a14,0x5a15,0x5a16,0x5a17,
-0x5a19,0x5a1a,0x5a1b,0x5a1d,0x5a1e,0x5a21,0x5a22,0x5a24,
-0x5a26,0x5a27,0x5a28,0x5a2a,0x5a2b,0x5a2c,0x5a2d,0x5a2e,
-0x5a2f,0x5a30,0x5a33,0x5a35,0x5a37,0x5a38,0x5a39,0x5a3a,
-0x5a3b,0x5a3d,0x5a3e,0x5a3f,0x5a41,0x5a42,0x5a43,0x5a44,
-0x5a45,0x5a47,0x5a48,0x5a4b,0x5a4c,0x5a4d,0x5a4e,0x5a4f,
-0x5a50,0x5a51,0x5a52,0x5a53,0x5a54,0x5a56,0x5a57,0x5a58,
-0x5a59,0x5a5b,0x5a5c,0x5a5d,0x5a5e,0x5a5f,0x5a60,0x0000,
-/* 0x8b00 */
-0x5a61,0x5a63,0x5a64,0x5a65,0x5a66,0x5a68,0x5a69,0x5a6b,
-0x5a6c,0x5a6d,0x5a6e,0x5a6f,0x5a70,0x5a71,0x5a72,0x5a73,
-0x5a78,0x5a79,0x5a7b,0x5a7c,0x5a7d,0x5a7e,0x5a80,0x5a81,
-0x5a82,0x5a83,0x5a84,0x5a85,0x5a86,0x5a87,0x5a88,0x5a89,
-0x5a8a,0x5a8b,0x5a8c,0x5a8d,0x5a8e,0x5a8f,0x5a90,0x5a91,
-0x5a93,0x5a94,0x5a95,0x5a96,0x5a97,0x5a98,0x5a99,0x5a9c,
-0x5a9d,0x5a9e,0x5a9f,0x5aa0,0x5aa1,0x5aa2,0x5aa3,0x5aa4,
-0x5aa5,0x5aa6,0x5aa7,0x5aa8,0x5aa9,0x5aab,0x5aac,0x0000,
-0x5aad,0x5aae,0x5aaf,0x5ab0,0x5ab1,0x5ab4,0x5ab6,0x5ab7,
-0x5ab9,0x5aba,0x5abb,0x5abc,0x5abd,0x5abf,0x5ac0,0x5ac3,
-0x5ac4,0x5ac5,0x5ac6,0x5ac7,0x5ac8,0x5aca,0x5acb,0x5acd,
-0x5ace,0x5acf,0x5ad0,0x5ad1,0x5ad3,0x5ad5,0x5ad7,0x5ad9,
-0x5ada,0x5adb,0x5add,0x5ade,0x5adf,0x5ae2,0x5ae4,0x5ae5,
-0x5ae7,0x5ae8,0x5aea,0x5aec,0x5aed,0x5aee,0x5aef,0x5af0,
-0x5af2,0x5af3,0x5af4,0x5af5,0x5af6,0x5af7,0x5af8,0x5af9,
-0x5afa,0x5afb,0x5afc,0x5afd,0x5afe,0x5aff,0x5b00,0x5b01,
-0x5b02,0x5b03,0x5b04,0x5b05,0x5b06,0x5b07,0x5b08,0x5b0a,
-0x5b0b,0x5b0c,0x5b0d,0x5b0e,0x5b0f,0x5b10,0x5b11,0x5b12,
-0x5b13,0x5b14,0x5b15,0x5b18,0x5b19,0x5b1a,0x5b1b,0x5b1c,
-0x5b1d,0x5b1e,0x5b1f,0x5b20,0x5b21,0x5b22,0x5b23,0x5b24,
-0x5b25,0x5b26,0x5b27,0x5b28,0x5b29,0x5b2a,0x5b2b,0x5b2c,
-0x5b2d,0x5b2e,0x5b2f,0x5b30,0x5b31,0x5b33,0x5b35,0x5b36,
-0x5b38,0x5b39,0x5b3a,0x5b3b,0x5b3c,0x5b3d,0x5b3e,0x5b3f,
-0x5b41,0x5b42,0x5b43,0x5b44,0x5b45,0x5b46,0x5b47,0x0000,
-/* 0x8c00 */
-0x5b48,0x5b49,0x5b4a,0x5b4b,0x5b4c,0x5b4d,0x5b4e,0x5b4f,
-0x5b52,0x5b56,0x5b5e,0x5b60,0x5b61,0x5b67,0x5b68,0x5b6b,
-0x5b6d,0x5b6e,0x5b6f,0x5b72,0x5b74,0x5b76,0x5b77,0x5b78,
-0x5b79,0x5b7b,0x5b7c,0x5b7e,0x5b7f,0x5b82,0x5b86,0x5b8a,
-0x5b8d,0x5b8e,0x5b90,0x5b91,0x5b92,0x5b94,0x5b96,0x5b9f,
-0x5ba7,0x5ba8,0x5ba9,0x5bac,0x5bad,0x5bae,0x5baf,0x5bb1,
-0x5bb2,0x5bb7,0x5bba,0x5bbb,0x5bbc,0x5bc0,0x5bc1,0x5bc3,
-0x5bc8,0x5bc9,0x5bca,0x5bcb,0x5bcd,0x5bce,0x5bcf,0x0000,
-0x5bd1,0x5bd4,0x5bd5,0x5bd6,0x5bd7,0x5bd8,0x5bd9,0x5bda,
-0x5bdb,0x5bdc,0x5be0,0x5be2,0x5be3,0x5be6,0x5be7,0x5be9,
-0x5bea,0x5beb,0x5bec,0x5bed,0x5bef,0x5bf1,0x5bf2,0x5bf3,
-0x5bf4,0x5bf5,0x5bf6,0x5bf7,0x5bfd,0x5bfe,0x5c00,0x5c02,
-0x5c03,0x5c05,0x5c07,0x5c08,0x5c0b,0x5c0c,0x5c0d,0x5c0e,
-0x5c10,0x5c12,0x5c13,0x5c17,0x5c19,0x5c1b,0x5c1e,0x5c1f,
-0x5c20,0x5c21,0x5c23,0x5c26,0x5c28,0x5c29,0x5c2a,0x5c2b,
-0x5c2d,0x5c2e,0x5c2f,0x5c30,0x5c32,0x5c33,0x5c35,0x5c36,
-0x5c37,0x5c43,0x5c44,0x5c46,0x5c47,0x5c4c,0x5c4d,0x5c52,
-0x5c53,0x5c54,0x5c56,0x5c57,0x5c58,0x5c5a,0x5c5b,0x5c5c,
-0x5c5d,0x5c5f,0x5c62,0x5c64,0x5c67,0x5c68,0x5c69,0x5c6a,
-0x5c6b,0x5c6c,0x5c6d,0x5c70,0x5c72,0x5c73,0x5c74,0x5c75,
-0x5c76,0x5c77,0x5c78,0x5c7b,0x5c7c,0x5c7d,0x5c7e,0x5c80,
-0x5c83,0x5c84,0x5c85,0x5c86,0x5c87,0x5c89,0x5c8a,0x5c8b,
-0x5c8e,0x5c8f,0x5c92,0x5c93,0x5c95,0x5c9d,0x5c9e,0x5c9f,
-0x5ca0,0x5ca1,0x5ca4,0x5ca5,0x5ca6,0x5ca7,0x5ca8,0x0000,
-/* 0x8d00 */
-0x5caa,0x5cae,0x5caf,0x5cb0,0x5cb2,0x5cb4,0x5cb6,0x5cb9,
-0x5cba,0x5cbb,0x5cbc,0x5cbe,0x5cc0,0x5cc2,0x5cc3,0x5cc5,
-0x5cc6,0x5cc7,0x5cc8,0x5cc9,0x5cca,0x5ccc,0x5ccd,0x5cce,
-0x5ccf,0x5cd0,0x5cd1,0x5cd3,0x5cd4,0x5cd5,0x5cd6,0x5cd7,
-0x5cd8,0x5cda,0x5cdb,0x5cdc,0x5cdd,0x5cde,0x5cdf,0x5ce0,
-0x5ce2,0x5ce3,0x5ce7,0x5ce9,0x5ceb,0x5cec,0x5cee,0x5cef,
-0x5cf1,0x5cf2,0x5cf3,0x5cf4,0x5cf5,0x5cf6,0x5cf7,0x5cf8,
-0x5cf9,0x5cfa,0x5cfc,0x5cfd,0x5cfe,0x5cff,0x5d00,0x0000,
-0x5d01,0x5d04,0x5d05,0x5d08,0x5d09,0x5d0a,0x5d0b,0x5d0c,
-0x5d0d,0x5d0f,0x5d10,0x5d11,0x5d12,0x5d13,0x5d15,0x5d17,
-0x5d18,0x5d19,0x5d1a,0x5d1c,0x5d1d,0x5d1f,0x5d20,0x5d21,
-0x5d22,0x5d23,0x5d25,0x5d28,0x5d2a,0x5d2b,0x5d2c,0x5d2f,
-0x5d30,0x5d31,0x5d32,0x5d33,0x5d35,0x5d36,0x5d37,0x5d38,
-0x5d39,0x5d3a,0x5d3b,0x5d3c,0x5d3f,0x5d40,0x5d41,0x5d42,
-0x5d43,0x5d44,0x5d45,0x5d46,0x5d48,0x5d49,0x5d4d,0x5d4e,
-0x5d4f,0x5d50,0x5d51,0x5d52,0x5d53,0x5d54,0x5d55,0x5d56,
-0x5d57,0x5d59,0x5d5a,0x5d5c,0x5d5e,0x5d5f,0x5d60,0x5d61,
-0x5d62,0x5d63,0x5d64,0x5d65,0x5d66,0x5d67,0x5d68,0x5d6a,
-0x5d6d,0x5d6e,0x5d70,0x5d71,0x5d72,0x5d73,0x5d75,0x5d76,
-0x5d77,0x5d78,0x5d79,0x5d7a,0x5d7b,0x5d7c,0x5d7d,0x5d7e,
-0x5d7f,0x5d80,0x5d81,0x5d83,0x5d84,0x5d85,0x5d86,0x5d87,
-0x5d88,0x5d89,0x5d8a,0x5d8b,0x5d8c,0x5d8d,0x5d8e,0x5d8f,
-0x5d90,0x5d91,0x5d92,0x5d93,0x5d94,0x5d95,0x5d96,0x5d97,
-0x5d98,0x5d9a,0x5d9b,0x5d9c,0x5d9e,0x5d9f,0x5da0,0x0000,
-/* 0x8e00 */
-0x5da1,0x5da2,0x5da3,0x5da4,0x5da5,0x5da6,0x5da7,0x5da8,
-0x5da9,0x5daa,0x5dab,0x5dac,0x5dad,0x5dae,0x5daf,0x5db0,
-0x5db1,0x5db2,0x5db3,0x5db4,0x5db5,0x5db6,0x5db8,0x5db9,
-0x5dba,0x5dbb,0x5dbc,0x5dbd,0x5dbe,0x5dbf,0x5dc0,0x5dc1,
-0x5dc2,0x5dc3,0x5dc4,0x5dc6,0x5dc7,0x5dc8,0x5dc9,0x5dca,
-0x5dcb,0x5dcc,0x5dce,0x5dcf,0x5dd0,0x5dd1,0x5dd2,0x5dd3,
-0x5dd4,0x5dd5,0x5dd6,0x5dd7,0x5dd8,0x5dd9,0x5dda,0x5ddc,
-0x5ddf,0x5de0,0x5de3,0x5de4,0x5dea,0x5dec,0x5ded,0x0000,
-0x5df0,0x5df5,0x5df6,0x5df8,0x5df9,0x5dfa,0x5dfb,0x5dfc,
-0x5dff,0x5e00,0x5e04,0x5e07,0x5e09,0x5e0a,0x5e0b,0x5e0d,
-0x5e0e,0x5e12,0x5e13,0x5e17,0x5e1e,0x5e1f,0x5e20,0x5e21,
-0x5e22,0x5e23,0x5e24,0x5e25,0x5e28,0x5e29,0x5e2a,0x5e2b,
-0x5e2c,0x5e2f,0x5e30,0x5e32,0x5e33,0x5e34,0x5e35,0x5e36,
-0x5e39,0x5e3a,0x5e3e,0x5e3f,0x5e40,0x5e41,0x5e43,0x5e46,
-0x5e47,0x5e48,0x5e49,0x5e4a,0x5e4b,0x5e4d,0x5e4e,0x5e4f,
-0x5e50,0x5e51,0x5e52,0x5e53,0x5e56,0x5e57,0x5e58,0x5e59,
-0x5e5a,0x5e5c,0x5e5d,0x5e5f,0x5e60,0x5e63,0x5e64,0x5e65,
-0x5e66,0x5e67,0x5e68,0x5e69,0x5e6a,0x5e6b,0x5e6c,0x5e6d,
-0x5e6e,0x5e6f,0x5e70,0x5e71,0x5e75,0x5e77,0x5e79,0x5e7e,
-0x5e81,0x5e82,0x5e83,0x5e85,0x5e88,0x5e89,0x5e8c,0x5e8d,
-0x5e8e,0x5e92,0x5e98,0x5e9b,0x5e9d,0x5ea1,0x5ea2,0x5ea3,
-0x5ea4,0x5ea8,0x5ea9,0x5eaa,0x5eab,0x5eac,0x5eae,0x5eaf,
-0x5eb0,0x5eb1,0x5eb2,0x5eb4,0x5eba,0x5ebb,0x5ebc,0x5ebd,
-0x5ebf,0x5ec0,0x5ec1,0x5ec2,0x5ec3,0x5ec4,0x5ec5,0x0000,
-/* 0x8f00 */
-0x5ec6,0x5ec7,0x5ec8,0x5ecb,0x5ecc,0x5ecd,0x5ece,0x5ecf,
-0x5ed0,0x5ed4,0x5ed5,0x5ed7,0x5ed8,0x5ed9,0x5eda,0x5edc,
-0x5edd,0x5ede,0x5edf,0x5ee0,0x5ee1,0x5ee2,0x5ee3,0x5ee4,
-0x5ee5,0x5ee6,0x5ee7,0x5ee9,0x5eeb,0x5eec,0x5eed,0x5eee,
-0x5eef,0x5ef0,0x5ef1,0x5ef2,0x5ef3,0x5ef5,0x5ef8,0x5ef9,
-0x5efb,0x5efc,0x5efd,0x5f05,0x5f06,0x5f07,0x5f09,0x5f0c,
-0x5f0d,0x5f0e,0x5f10,0x5f12,0x5f14,0x5f16,0x5f19,0x5f1a,
-0x5f1c,0x5f1d,0x5f1e,0x5f21,0x5f22,0x5f23,0x5f24,0x0000,
-0x5f28,0x5f2b,0x5f2c,0x5f2e,0x5f30,0x5f32,0x5f33,0x5f34,
-0x5f35,0x5f36,0x5f37,0x5f38,0x5f3b,0x5f3d,0x5f3e,0x5f3f,
-0x5f41,0x5f42,0x5f43,0x5f44,0x5f45,0x5f46,0x5f47,0x5f48,
-0x5f49,0x5f4a,0x5f4b,0x5f4c,0x5f4d,0x5f4e,0x5f4f,0x5f51,
-0x5f54,0x5f59,0x5f5a,0x5f5b,0x5f5c,0x5f5e,0x5f5f,0x5f60,
-0x5f63,0x5f65,0x5f67,0x5f68,0x5f6b,0x5f6e,0x5f6f,0x5f72,
-0x5f74,0x5f75,0x5f76,0x5f78,0x5f7a,0x5f7d,0x5f7e,0x5f7f,
-0x5f83,0x5f86,0x5f8d,0x5f8e,0x5f8f,0x5f91,0x5f93,0x5f94,
-0x5f96,0x5f9a,0x5f9b,0x5f9d,0x5f9e,0x5f9f,0x5fa0,0x5fa2,
-0x5fa3,0x5fa4,0x5fa5,0x5fa6,0x5fa7,0x5fa9,0x5fab,0x5fac,
-0x5faf,0x5fb0,0x5fb1,0x5fb2,0x5fb3,0x5fb4,0x5fb6,0x5fb8,
-0x5fb9,0x5fba,0x5fbb,0x5fbe,0x5fbf,0x5fc0,0x5fc1,0x5fc2,
-0x5fc7,0x5fc8,0x5fca,0x5fcb,0x5fce,0x5fd3,0x5fd4,0x5fd5,
-0x5fda,0x5fdb,0x5fdc,0x5fde,0x5fdf,0x5fe2,0x5fe3,0x5fe5,
-0x5fe6,0x5fe8,0x5fe9,0x5fec,0x5fef,0x5ff0,0x5ff2,0x5ff3,
-0x5ff4,0x5ff6,0x5ff7,0x5ff9,0x5ffa,0x5ffc,0x6007,0x0000,
-/* 0x9000 */
-0x6008,0x6009,0x600b,0x600c,0x6010,0x6011,0x6013,0x6017,
-0x6018,0x601a,0x601e,0x601f,0x6022,0x6023,0x6024,0x602c,
-0x602d,0x602e,0x6030,0x6031,0x6032,0x6033,0x6034,0x6036,
-0x6037,0x6038,0x6039,0x603a,0x603d,0x603e,0x6040,0x6044,
-0x6045,0x6046,0x6047,0x6048,0x6049,0x604a,0x604c,0x604e,
-0x604f,0x6051,0x6053,0x6054,0x6056,0x6057,0x6058,0x605b,
-0x605c,0x605e,0x605f,0x6060,0x6061,0x6065,0x6066,0x606e,
-0x6071,0x6072,0x6074,0x6075,0x6077,0x607e,0x6080,0x0000,
-0x6081,0x6082,0x6085,0x6086,0x6087,0x6088,0x608a,0x608b,
-0x608e,0x608f,0x6090,0x6091,0x6093,0x6095,0x6097,0x6098,
-0x6099,0x609c,0x609e,0x60a1,0x60a2,0x60a4,0x60a5,0x60a7,
-0x60a9,0x60aa,0x60ae,0x60b0,0x60b3,0x60b5,0x60b6,0x60b7,
-0x60b9,0x60ba,0x60bd,0x60be,0x60bf,0x60c0,0x60c1,0x60c2,
-0x60c3,0x60c4,0x60c7,0x60c8,0x60c9,0x60cc,0x60cd,0x60ce,
-0x60cf,0x60d0,0x60d2,0x60d3,0x60d4,0x60d6,0x60d7,0x60d9,
-0x60db,0x60de,0x60e1,0x60e2,0x60e3,0x60e4,0x60e5,0x60ea,
-0x60f1,0x60f2,0x60f5,0x60f7,0x60f8,0x60fb,0x60fc,0x60fd,
-0x60fe,0x60ff,0x6102,0x6103,0x6104,0x6105,0x6107,0x610a,
-0x610b,0x610c,0x6110,0x6111,0x6112,0x6113,0x6114,0x6116,
-0x6117,0x6118,0x6119,0x611b,0x611c,0x611d,0x611e,0x6121,
-0x6122,0x6125,0x6128,0x6129,0x612a,0x612c,0x612d,0x612e,
-0x612f,0x6130,0x6131,0x6132,0x6133,0x6134,0x6135,0x6136,
-0x6137,0x6138,0x6139,0x613a,0x613b,0x613c,0x613d,0x613e,
-0x6140,0x6141,0x6142,0x6143,0x6144,0x6145,0x6146,0x0000,
-/* 0x9100 */
-0x6147,0x6149,0x614b,0x614d,0x614f,0x6150,0x6152,0x6153,
-0x6154,0x6156,0x6157,0x6158,0x6159,0x615a,0x615b,0x615c,
-0x615e,0x615f,0x6160,0x6161,0x6163,0x6164,0x6165,0x6166,
-0x6169,0x616a,0x616b,0x616c,0x616d,0x616e,0x616f,0x6171,
-0x6172,0x6173,0x6174,0x6176,0x6178,0x6179,0x617a,0x617b,
-0x617c,0x617d,0x617e,0x617f,0x6180,0x6181,0x6182,0x6183,
-0x6184,0x6185,0x6186,0x6187,0x6188,0x6189,0x618a,0x618c,
-0x618d,0x618f,0x6190,0x6191,0x6192,0x6193,0x6195,0x0000,
-0x6196,0x6197,0x6198,0x6199,0x619a,0x619b,0x619c,0x619e,
-0x619f,0x61a0,0x61a1,0x61a2,0x61a3,0x61a4,0x61a5,0x61a6,
-0x61aa,0x61ab,0x61ad,0x61ae,0x61af,0x61b0,0x61b1,0x61b2,
-0x61b3,0x61b4,0x61b5,0x61b6,0x61b8,0x61b9,0x61ba,0x61bb,
-0x61bc,0x61bd,0x61bf,0x61c0,0x61c1,0x61c3,0x61c4,0x61c5,
-0x61c6,0x61c7,0x61c9,0x61cc,0x61cd,0x61ce,0x61cf,0x61d0,
-0x61d3,0x61d5,0x61d6,0x61d7,0x61d8,0x61d9,0x61da,0x61db,
-0x61dc,0x61dd,0x61de,0x61df,0x61e0,0x61e1,0x61e2,0x61e3,
-0x61e4,0x61e5,0x61e7,0x61e8,0x61e9,0x61ea,0x61eb,0x61ec,
-0x61ed,0x61ee,0x61ef,0x61f0,0x61f1,0x61f2,0x61f3,0x61f4,
-0x61f6,0x61f7,0x61f8,0x61f9,0x61fa,0x61fb,0x61fc,0x61fd,
-0x61fe,0x6200,0x6201,0x6202,0x6203,0x6204,0x6205,0x6207,
-0x6209,0x6213,0x6214,0x6219,0x621c,0x621d,0x621e,0x6220,
-0x6223,0x6226,0x6227,0x6228,0x6229,0x622b,0x622d,0x622f,
-0x6230,0x6231,0x6232,0x6235,0x6236,0x6238,0x6239,0x623a,
-0x623b,0x623c,0x6242,0x6244,0x6245,0x6246,0x624a,0x0000,
-/* 0x9200 */
-0x624f,0x6250,0x6255,0x6256,0x6257,0x6259,0x625a,0x625c,
-0x625d,0x625e,0x625f,0x6260,0x6261,0x6262,0x6264,0x6265,
-0x6268,0x6271,0x6272,0x6274,0x6275,0x6277,0x6278,0x627a,
-0x627b,0x627d,0x6281,0x6282,0x6283,0x6285,0x6286,0x6287,
-0x6288,0x628b,0x628c,0x628d,0x628e,0x628f,0x6290,0x6294,
-0x6299,0x629c,0x629d,0x629e,0x62a3,0x62a6,0x62a7,0x62a9,
-0x62aa,0x62ad,0x62ae,0x62af,0x62b0,0x62b2,0x62b3,0x62b4,
-0x62b6,0x62b7,0x62b8,0x62ba,0x62be,0x62c0,0x62c1,0x0000,
-0x62c3,0x62cb,0x62cf,0x62d1,0x62d5,0x62dd,0x62de,0x62e0,
-0x62e1,0x62e4,0x62ea,0x62eb,0x62f0,0x62f2,0x62f5,0x62f8,
-0x62f9,0x62fa,0x62fb,0x6300,0x6303,0x6304,0x6305,0x6306,
-0x630a,0x630b,0x630c,0x630d,0x630f,0x6310,0x6312,0x6313,
-0x6314,0x6315,0x6317,0x6318,0x6319,0x631c,0x6326,0x6327,
-0x6329,0x632c,0x632d,0x632e,0x6330,0x6331,0x6333,0x6334,
-0x6335,0x6336,0x6337,0x6338,0x633b,0x633c,0x633e,0x633f,
-0x6340,0x6341,0x6344,0x6347,0x6348,0x634a,0x6351,0x6352,
-0x6353,0x6354,0x6356,0x6357,0x6358,0x6359,0x635a,0x635b,
-0x635c,0x635d,0x6360,0x6364,0x6365,0x6366,0x6368,0x636a,
-0x636b,0x636c,0x636f,0x6370,0x6372,0x6373,0x6374,0x6375,
-0x6378,0x6379,0x637c,0x637d,0x637e,0x637f,0x6381,0x6383,
-0x6384,0x6385,0x6386,0x638b,0x638d,0x6391,0x6393,0x6394,
-0x6395,0x6397,0x6399,0x639a,0x639b,0x639c,0x639d,0x639e,
-0x639f,0x63a1,0x63a4,0x63a6,0x63ab,0x63af,0x63b1,0x63b2,
-0x63b5,0x63b6,0x63b9,0x63bb,0x63bd,0x63bf,0x63c0,0x0000,
-/* 0x9300 */
-0x63c1,0x63c2,0x63c3,0x63c5,0x63c7,0x63c8,0x63ca,0x63cb,
-0x63cc,0x63d1,0x63d3,0x63d4,0x63d5,0x63d7,0x63d8,0x63d9,
-0x63da,0x63db,0x63dc,0x63dd,0x63df,0x63e2,0x63e4,0x63e5,
-0x63e6,0x63e7,0x63e8,0x63eb,0x63ec,0x63ee,0x63ef,0x63f0,
-0x63f1,0x63f3,0x63f5,0x63f7,0x63f9,0x63fa,0x63fb,0x63fc,
-0x63fe,0x6403,0x6404,0x6406,0x6407,0x6408,0x6409,0x640a,
-0x640d,0x640e,0x6411,0x6412,0x6415,0x6416,0x6417,0x6418,
-0x6419,0x641a,0x641d,0x641f,0x6422,0x6423,0x6424,0x0000,
-0x6425,0x6427,0x6428,0x6429,0x642b,0x642e,0x642f,0x6430,
-0x6431,0x6432,0x6433,0x6435,0x6436,0x6437,0x6438,0x6439,
-0x643b,0x643c,0x643e,0x6440,0x6442,0x6443,0x6449,0x644b,
-0x644c,0x644d,0x644e,0x644f,0x6450,0x6451,0x6453,0x6455,
-0x6456,0x6457,0x6459,0x645a,0x645b,0x645c,0x645d,0x645f,
-0x6460,0x6461,0x6462,0x6463,0x6464,0x6465,0x6466,0x6468,
-0x646a,0x646b,0x646c,0x646e,0x646f,0x6470,0x6471,0x6472,
-0x6473,0x6474,0x6475,0x6476,0x6477,0x647b,0x647c,0x647d,
-0x647e,0x647f,0x6480,0x6481,0x6483,0x6486,0x6488,0x6489,
-0x648a,0x648b,0x648c,0x648d,0x648e,0x648f,0x6490,0x6493,
-0x6494,0x6497,0x6498,0x649a,0x649b,0x649c,0x649d,0x649f,
-0x64a0,0x64a1,0x64a2,0x64a3,0x64a5,0x64a6,0x64a7,0x64a8,
-0x64aa,0x64ab,0x64af,0x64b1,0x64b2,0x64b3,0x64b4,0x64b6,
-0x64b9,0x64bb,0x64bd,0x64be,0x64bf,0x64c1,0x64c3,0x64c4,
-0x64c6,0x64c7,0x64c8,0x64c9,0x64ca,0x64cb,0x64cc,0x64cf,
-0x64d1,0x64d3,0x64d4,0x64d5,0x64d6,0x64d9,0x64da,0x0000,
-/* 0x9400 */
-0x64db,0x64dc,0x64dd,0x64df,0x64e0,0x64e1,0x64e3,0x64e5,
-0x64e7,0x64e8,0x64e9,0x64ea,0x64eb,0x64ec,0x64ed,0x64ee,
-0x64ef,0x64f0,0x64f1,0x64f2,0x64f3,0x64f4,0x64f5,0x64f6,
-0x64f7,0x64f8,0x64f9,0x64fa,0x64fb,0x64fc,0x64fd,0x64fe,
-0x64ff,0x6501,0x6502,0x6503,0x6504,0x6505,0x6506,0x6507,
-0x6508,0x650a,0x650b,0x650c,0x650d,0x650e,0x650f,0x6510,
-0x6511,0x6513,0x6514,0x6515,0x6516,0x6517,0x6519,0x651a,
-0x651b,0x651c,0x651d,0x651e,0x651f,0x6520,0x6521,0x0000,
-0x6522,0x6523,0x6524,0x6526,0x6527,0x6528,0x6529,0x652a,
-0x652c,0x652d,0x6530,0x6531,0x6532,0x6533,0x6537,0x653a,
-0x653c,0x653d,0x6540,0x6541,0x6542,0x6543,0x6544,0x6546,
-0x6547,0x654a,0x654b,0x654d,0x654e,0x6550,0x6552,0x6553,
-0x6554,0x6557,0x6558,0x655a,0x655c,0x655f,0x6560,0x6561,
-0x6564,0x6565,0x6567,0x6568,0x6569,0x656a,0x656d,0x656e,
-0x656f,0x6571,0x6573,0x6575,0x6576,0x6578,0x6579,0x657a,
-0x657b,0x657c,0x657d,0x657e,0x657f,0x6580,0x6581,0x6582,
-0x6583,0x6584,0x6585,0x6586,0x6588,0x6589,0x658a,0x658d,
-0x658e,0x658f,0x6592,0x6594,0x6595,0x6596,0x6598,0x659a,
-0x659d,0x659e,0x65a0,0x65a2,0x65a3,0x65a6,0x65a8,0x65aa,
-0x65ac,0x65ae,0x65b1,0x65b2,0x65b3,0x65b4,0x65b5,0x65b6,
-0x65b7,0x65b8,0x65ba,0x65bb,0x65be,0x65bf,0x65c0,0x65c2,
-0x65c7,0x65c8,0x65c9,0x65ca,0x65cd,0x65d0,0x65d1,0x65d3,
-0x65d4,0x65d5,0x65d8,0x65d9,0x65da,0x65db,0x65dc,0x65dd,
-0x65de,0x65df,0x65e1,0x65e3,0x65e4,0x65ea,0x65eb,0x0000,
-/* 0x9500 */
-0x65f2,0x65f3,0x65f4,0x65f5,0x65f8,0x65f9,0x65fb,0x65fc,
-0x65fd,0x65fe,0x65ff,0x6601,0x6604,0x6605,0x6607,0x6608,
-0x6609,0x660b,0x660d,0x6610,0x6611,0x6612,0x6616,0x6617,
-0x6618,0x661a,0x661b,0x661c,0x661e,0x6621,0x6622,0x6623,
-0x6624,0x6626,0x6629,0x662a,0x662b,0x662c,0x662e,0x6630,
-0x6632,0x6633,0x6637,0x6638,0x6639,0x663a,0x663b,0x663d,
-0x663f,0x6640,0x6642,0x6644,0x6645,0x6646,0x6647,0x6648,
-0x6649,0x664a,0x664d,0x664e,0x6650,0x6651,0x6658,0x0000,
-0x6659,0x665b,0x665c,0x665d,0x665e,0x6660,0x6662,0x6663,
-0x6665,0x6667,0x6669,0x666a,0x666b,0x666c,0x666d,0x6671,
-0x6672,0x6673,0x6675,0x6678,0x6679,0x667b,0x667c,0x667d,
-0x667f,0x6680,0x6681,0x6683,0x6685,0x6686,0x6688,0x6689,
-0x668a,0x668b,0x668d,0x668e,0x668f,0x6690,0x6692,0x6693,
-0x6694,0x6695,0x6698,0x6699,0x669a,0x669b,0x669c,0x669e,
-0x669f,0x66a0,0x66a1,0x66a2,0x66a3,0x66a4,0x66a5,0x66a6,
-0x66a9,0x66aa,0x66ab,0x66ac,0x66ad,0x66af,0x66b0,0x66b1,
-0x66b2,0x66b3,0x66b5,0x66b6,0x66b7,0x66b8,0x66ba,0x66bb,
-0x66bc,0x66bd,0x66bf,0x66c0,0x66c1,0x66c2,0x66c3,0x66c4,
-0x66c5,0x66c6,0x66c7,0x66c8,0x66c9,0x66ca,0x66cb,0x66cc,
-0x66cd,0x66ce,0x66cf,0x66d0,0x66d1,0x66d2,0x66d3,0x66d4,
-0x66d5,0x66d6,0x66d7,0x66d8,0x66da,0x66de,0x66df,0x66e0,
-0x66e1,0x66e2,0x66e3,0x66e4,0x66e5,0x66e7,0x66e8,0x66ea,
-0x66eb,0x66ec,0x66ed,0x66ee,0x66ef,0x66f1,0x66f5,0x66f6,
-0x66f8,0x66fa,0x66fb,0x66fd,0x6701,0x6702,0x6703,0x0000,
-/* 0x9600 */
-0x6704,0x6705,0x6706,0x6707,0x670c,0x670e,0x670f,0x6711,
-0x6712,0x6713,0x6716,0x6718,0x6719,0x671a,0x671c,0x671e,
-0x6720,0x6721,0x6722,0x6723,0x6724,0x6725,0x6727,0x6729,
-0x672e,0x6730,0x6732,0x6733,0x6736,0x6737,0x6738,0x6739,
-0x673b,0x673c,0x673e,0x673f,0x6741,0x6744,0x6745,0x6747,
-0x674a,0x674b,0x674d,0x6752,0x6754,0x6755,0x6757,0x6758,
-0x6759,0x675a,0x675b,0x675d,0x6762,0x6763,0x6764,0x6766,
-0x6767,0x676b,0x676c,0x676e,0x6771,0x6774,0x6776,0x0000,
-0x6778,0x6779,0x677a,0x677b,0x677d,0x6780,0x6782,0x6783,
-0x6785,0x6786,0x6788,0x678a,0x678c,0x678d,0x678e,0x678f,
-0x6791,0x6792,0x6793,0x6794,0x6796,0x6799,0x679b,0x679f,
-0x67a0,0x67a1,0x67a4,0x67a6,0x67a9,0x67ac,0x67ae,0x67b1,
-0x67b2,0x67b4,0x67b9,0x67ba,0x67bb,0x67bc,0x67bd,0x67be,
-0x67bf,0x67c0,0x67c2,0x67c5,0x67c6,0x67c7,0x67c8,0x67c9,
-0x67ca,0x67cb,0x67cc,0x67cd,0x67ce,0x67d5,0x67d6,0x67d7,
-0x67db,0x67df,0x67e1,0x67e3,0x67e4,0x67e6,0x67e7,0x67e8,
-0x67ea,0x67eb,0x67ed,0x67ee,0x67f2,0x67f5,0x67f6,0x67f7,
-0x67f8,0x67f9,0x67fa,0x67fb,0x67fc,0x67fe,0x6801,0x6802,
-0x6803,0x6804,0x6806,0x680d,0x6810,0x6812,0x6814,0x6815,
-0x6818,0x6819,0x681a,0x681b,0x681c,0x681e,0x681f,0x6820,
-0x6822,0x6823,0x6824,0x6825,0x6826,0x6827,0x6828,0x682b,
-0x682c,0x682d,0x682e,0x682f,0x6830,0x6831,0x6834,0x6835,
-0x6836,0x683a,0x683b,0x683f,0x6847,0x684b,0x684d,0x684f,
-0x6852,0x6856,0x6857,0x6858,0x6859,0x685a,0x685b,0x0000,
-/* 0x9700 */
-0x685c,0x685d,0x685e,0x685f,0x686a,0x686c,0x686d,0x686e,
-0x686f,0x6870,0x6871,0x6872,0x6873,0x6875,0x6878,0x6879,
-0x687a,0x687b,0x687c,0x687d,0x687e,0x687f,0x6880,0x6882,
-0x6884,0x6887,0x6888,0x6889,0x688a,0x688b,0x688c,0x688d,
-0x688e,0x6890,0x6891,0x6892,0x6894,0x6895,0x6896,0x6898,
-0x6899,0x689a,0x689b,0x689c,0x689d,0x689e,0x689f,0x68a0,
-0x68a1,0x68a3,0x68a4,0x68a5,0x68a9,0x68aa,0x68ab,0x68ac,
-0x68ae,0x68b1,0x68b2,0x68b4,0x68b6,0x68b7,0x68b8,0x0000,
-0x68b9,0x68ba,0x68bb,0x68bc,0x68bd,0x68be,0x68bf,0x68c1,
-0x68c3,0x68c4,0x68c5,0x68c6,0x68c7,0x68c8,0x68ca,0x68cc,
-0x68ce,0x68cf,0x68d0,0x68d1,0x68d3,0x68d4,0x68d6,0x68d7,
-0x68d9,0x68db,0x68dc,0x68dd,0x68de,0x68df,0x68e1,0x68e2,
-0x68e4,0x68e5,0x68e6,0x68e7,0x68e8,0x68e9,0x68ea,0x68eb,
-0x68ec,0x68ed,0x68ef,0x68f2,0x68f3,0x68f4,0x68f6,0x68f7,
-0x68f8,0x68fb,0x68fd,0x68fe,0x68ff,0x6900,0x6902,0x6903,
-0x6904,0x6906,0x6907,0x6908,0x6909,0x690a,0x690c,0x690f,
-0x6911,0x6913,0x6914,0x6915,0x6916,0x6917,0x6918,0x6919,
-0x691a,0x691b,0x691c,0x691d,0x691e,0x6921,0x6922,0x6923,
-0x6925,0x6926,0x6927,0x6928,0x6929,0x692a,0x692b,0x692c,
-0x692e,0x692f,0x6931,0x6932,0x6933,0x6935,0x6936,0x6937,
-0x6938,0x693a,0x693b,0x693c,0x693e,0x6940,0x6941,0x6943,
-0x6944,0x6945,0x6946,0x6947,0x6948,0x6949,0x694a,0x694b,
-0x694c,0x694d,0x694e,0x694f,0x6950,0x6951,0x6952,0x6953,
-0x6955,0x6956,0x6958,0x6959,0x695b,0x695c,0x695f,0x0000,
-/* 0x9800 */
-0x6961,0x6962,0x6964,0x6965,0x6967,0x6968,0x6969,0x696a,
-0x696c,0x696d,0x696f,0x6970,0x6972,0x6973,0x6974,0x6975,
-0x6976,0x697a,0x697b,0x697d,0x697e,0x697f,0x6981,0x6983,
-0x6985,0x698a,0x698b,0x698c,0x698e,0x698f,0x6990,0x6991,
-0x6992,0x6993,0x6996,0x6997,0x6999,0x699a,0x699d,0x699e,
-0x699f,0x69a0,0x69a1,0x69a2,0x69a3,0x69a4,0x69a5,0x69a6,
-0x69a9,0x69aa,0x69ac,0x69ae,0x69af,0x69b0,0x69b2,0x69b3,
-0x69b5,0x69b6,0x69b8,0x69b9,0x69ba,0x69bc,0x69bd,0x0000,
-0x69be,0x69bf,0x69c0,0x69c2,0x69c3,0x69c4,0x69c5,0x69c6,
-0x69c7,0x69c8,0x69c9,0x69cb,0x69cd,0x69cf,0x69d1,0x69d2,
-0x69d3,0x69d5,0x69d6,0x69d7,0x69d8,0x69d9,0x69da,0x69dc,
-0x69dd,0x69de,0x69e1,0x69e2,0x69e3,0x69e4,0x69e5,0x69e6,
-0x69e7,0x69e8,0x69e9,0x69ea,0x69eb,0x69ec,0x69ee,0x69ef,
-0x69f0,0x69f1,0x69f3,0x69f4,0x69f5,0x69f6,0x69f7,0x69f8,
-0x69f9,0x69fa,0x69fb,0x69fc,0x69fe,0x6a00,0x6a01,0x6a02,
-0x6a03,0x6a04,0x6a05,0x6a06,0x6a07,0x6a08,0x6a09,0x6a0b,
-0x6a0c,0x6a0d,0x6a0e,0x6a0f,0x6a10,0x6a11,0x6a12,0x6a13,
-0x6a14,0x6a15,0x6a16,0x6a19,0x6a1a,0x6a1b,0x6a1c,0x6a1d,
-0x6a1e,0x6a20,0x6a22,0x6a23,0x6a24,0x6a25,0x6a26,0x6a27,
-0x6a29,0x6a2b,0x6a2c,0x6a2d,0x6a2e,0x6a30,0x6a32,0x6a33,
-0x6a34,0x6a36,0x6a37,0x6a38,0x6a39,0x6a3a,0x6a3b,0x6a3c,
-0x6a3f,0x6a40,0x6a41,0x6a42,0x6a43,0x6a45,0x6a46,0x6a48,
-0x6a49,0x6a4a,0x6a4b,0x6a4c,0x6a4d,0x6a4e,0x6a4f,0x6a51,
-0x6a52,0x6a53,0x6a54,0x6a55,0x6a56,0x6a57,0x6a5a,0x0000,
-/* 0x9900 */
-0x6a5c,0x6a5d,0x6a5e,0x6a5f,0x6a60,0x6a62,0x6a63,0x6a64,
-0x6a66,0x6a67,0x6a68,0x6a69,0x6a6a,0x6a6b,0x6a6c,0x6a6d,
-0x6a6e,0x6a6f,0x6a70,0x6a72,0x6a73,0x6a74,0x6a75,0x6a76,
-0x6a77,0x6a78,0x6a7a,0x6a7b,0x6a7d,0x6a7e,0x6a7f,0x6a81,
-0x6a82,0x6a83,0x6a85,0x6a86,0x6a87,0x6a88,0x6a89,0x6a8a,
-0x6a8b,0x6a8c,0x6a8d,0x6a8f,0x6a92,0x6a93,0x6a94,0x6a95,
-0x6a96,0x6a98,0x6a99,0x6a9a,0x6a9b,0x6a9c,0x6a9d,0x6a9e,
-0x6a9f,0x6aa1,0x6aa2,0x6aa3,0x6aa4,0x6aa5,0x6aa6,0x0000,
-0x6aa7,0x6aa8,0x6aaa,0x6aad,0x6aae,0x6aaf,0x6ab0,0x6ab1,
-0x6ab2,0x6ab3,0x6ab4,0x6ab5,0x6ab6,0x6ab7,0x6ab8,0x6ab9,
-0x6aba,0x6abb,0x6abc,0x6abd,0x6abe,0x6abf,0x6ac0,0x6ac1,
-0x6ac2,0x6ac3,0x6ac4,0x6ac5,0x6ac6,0x6ac7,0x6ac8,0x6ac9,
-0x6aca,0x6acb,0x6acc,0x6acd,0x6ace,0x6acf,0x6ad0,0x6ad1,
-0x6ad2,0x6ad3,0x6ad4,0x6ad5,0x6ad6,0x6ad7,0x6ad8,0x6ad9,
-0x6ada,0x6adb,0x6adc,0x6add,0x6ade,0x6adf,0x6ae0,0x6ae1,
-0x6ae2,0x6ae3,0x6ae4,0x6ae5,0x6ae6,0x6ae7,0x6ae8,0x6ae9,
-0x6aea,0x6aeb,0x6aec,0x6aed,0x6aee,0x6aef,0x6af0,0x6af1,
-0x6af2,0x6af3,0x6af4,0x6af5,0x6af6,0x6af7,0x6af8,0x6af9,
-0x6afa,0x6afb,0x6afc,0x6afd,0x6afe,0x6aff,0x6b00,0x6b01,
-0x6b02,0x6b03,0x6b04,0x6b05,0x6b06,0x6b07,0x6b08,0x6b09,
-0x6b0a,0x6b0b,0x6b0c,0x6b0d,0x6b0e,0x6b0f,0x6b10,0x6b11,
-0x6b12,0x6b13,0x6b14,0x6b15,0x6b16,0x6b17,0x6b18,0x6b19,
-0x6b1a,0x6b1b,0x6b1c,0x6b1d,0x6b1e,0x6b1f,0x6b25,0x6b26,
-0x6b28,0x6b29,0x6b2a,0x6b2b,0x6b2c,0x6b2d,0x6b2e,0x0000,
-/* 0x9a00 */
-0x6b2f,0x6b30,0x6b31,0x6b33,0x6b34,0x6b35,0x6b36,0x6b38,
-0x6b3b,0x6b3c,0x6b3d,0x6b3f,0x6b40,0x6b41,0x6b42,0x6b44,
-0x6b45,0x6b48,0x6b4a,0x6b4b,0x6b4d,0x6b4e,0x6b4f,0x6b50,
-0x6b51,0x6b52,0x6b53,0x6b54,0x6b55,0x6b56,0x6b57,0x6b58,
-0x6b5a,0x6b5b,0x6b5c,0x6b5d,0x6b5e,0x6b5f,0x6b60,0x6b61,
-0x6b68,0x6b69,0x6b6b,0x6b6c,0x6b6d,0x6b6e,0x6b6f,0x6b70,
-0x6b71,0x6b72,0x6b73,0x6b74,0x6b75,0x6b76,0x6b77,0x6b78,
-0x6b7a,0x6b7d,0x6b7e,0x6b7f,0x6b80,0x6b85,0x6b88,0x0000,
-0x6b8c,0x6b8e,0x6b8f,0x6b90,0x6b91,0x6b94,0x6b95,0x6b97,
-0x6b98,0x6b99,0x6b9c,0x6b9d,0x6b9e,0x6b9f,0x6ba0,0x6ba2,
-0x6ba3,0x6ba4,0x6ba5,0x6ba6,0x6ba7,0x6ba8,0x6ba9,0x6bab,
-0x6bac,0x6bad,0x6bae,0x6baf,0x6bb0,0x6bb1,0x6bb2,0x6bb6,
-0x6bb8,0x6bb9,0x6bba,0x6bbb,0x6bbc,0x6bbd,0x6bbe,0x6bc0,
-0x6bc3,0x6bc4,0x6bc6,0x6bc7,0x6bc8,0x6bc9,0x6bca,0x6bcc,
-0x6bce,0x6bd0,0x6bd1,0x6bd8,0x6bda,0x6bdc,0x6bdd,0x6bde,
-0x6bdf,0x6be0,0x6be2,0x6be3,0x6be4,0x6be5,0x6be6,0x6be7,
-0x6be8,0x6be9,0x6bec,0x6bed,0x6bee,0x6bf0,0x6bf1,0x6bf2,
-0x6bf4,0x6bf6,0x6bf7,0x6bf8,0x6bfa,0x6bfb,0x6bfc,0x6bfe,
-0x6bff,0x6c00,0x6c01,0x6c02,0x6c03,0x6c04,0x6c08,0x6c09,
-0x6c0a,0x6c0b,0x6c0c,0x6c0e,0x6c12,0x6c17,0x6c1c,0x6c1d,
-0x6c1e,0x6c20,0x6c23,0x6c25,0x6c2b,0x6c2c,0x6c2d,0x6c31,
-0x6c33,0x6c36,0x6c37,0x6c39,0x6c3a,0x6c3b,0x6c3c,0x6c3e,
-0x6c3f,0x6c43,0x6c44,0x6c45,0x6c48,0x6c4b,0x6c4c,0x6c4d,
-0x6c4e,0x6c4f,0x6c51,0x6c52,0x6c53,0x6c56,0x6c58,0x0000,
-/* 0x9b00 */
-0x6c59,0x6c5a,0x6c62,0x6c63,0x6c65,0x6c66,0x6c67,0x6c6b,
-0x6c6c,0x6c6d,0x6c6e,0x6c6f,0x6c71,0x6c73,0x6c75,0x6c77,
-0x6c78,0x6c7a,0x6c7b,0x6c7c,0x6c7f,0x6c80,0x6c84,0x6c87,
-0x6c8a,0x6c8b,0x6c8d,0x6c8e,0x6c91,0x6c92,0x6c95,0x6c96,
-0x6c97,0x6c98,0x6c9a,0x6c9c,0x6c9d,0x6c9e,0x6ca0,0x6ca2,
-0x6ca8,0x6cac,0x6caf,0x6cb0,0x6cb4,0x6cb5,0x6cb6,0x6cb7,
-0x6cba,0x6cc0,0x6cc1,0x6cc2,0x6cc3,0x6cc6,0x6cc7,0x6cc8,
-0x6ccb,0x6ccd,0x6cce,0x6ccf,0x6cd1,0x6cd2,0x6cd8,0x0000,
-0x6cd9,0x6cda,0x6cdc,0x6cdd,0x6cdf,0x6ce4,0x6ce6,0x6ce7,
-0x6ce9,0x6cec,0x6ced,0x6cf2,0x6cf4,0x6cf9,0x6cff,0x6d00,
-0x6d02,0x6d03,0x6d05,0x6d06,0x6d08,0x6d09,0x6d0a,0x6d0d,
-0x6d0f,0x6d10,0x6d11,0x6d13,0x6d14,0x6d15,0x6d16,0x6d18,
-0x6d1c,0x6d1d,0x6d1f,0x6d20,0x6d21,0x6d22,0x6d23,0x6d24,
-0x6d26,0x6d28,0x6d29,0x6d2c,0x6d2d,0x6d2f,0x6d30,0x6d34,
-0x6d36,0x6d37,0x6d38,0x6d3a,0x6d3f,0x6d40,0x6d42,0x6d44,
-0x6d49,0x6d4c,0x6d50,0x6d55,0x6d56,0x6d57,0x6d58,0x6d5b,
-0x6d5d,0x6d5f,0x6d61,0x6d62,0x6d64,0x6d65,0x6d67,0x6d68,
-0x6d6b,0x6d6c,0x6d6d,0x6d70,0x6d71,0x6d72,0x6d73,0x6d75,
-0x6d76,0x6d79,0x6d7a,0x6d7b,0x6d7d,0x6d7e,0x6d7f,0x6d80,
-0x6d81,0x6d83,0x6d84,0x6d86,0x6d87,0x6d8a,0x6d8b,0x6d8d,
-0x6d8f,0x6d90,0x6d92,0x6d96,0x6d97,0x6d98,0x6d99,0x6d9a,
-0x6d9c,0x6da2,0x6da5,0x6dac,0x6dad,0x6db0,0x6db1,0x6db3,
-0x6db4,0x6db6,0x6db7,0x6db9,0x6dba,0x6dbb,0x6dbc,0x6dbd,
-0x6dbe,0x6dc1,0x6dc2,0x6dc3,0x6dc8,0x6dc9,0x6dca,0x0000,
-/* 0x9c00 */
-0x6dcd,0x6dce,0x6dcf,0x6dd0,0x6dd2,0x6dd3,0x6dd4,0x6dd5,
-0x6dd7,0x6dda,0x6ddb,0x6ddc,0x6ddf,0x6de2,0x6de3,0x6de5,
-0x6de7,0x6de8,0x6de9,0x6dea,0x6ded,0x6def,0x6df0,0x6df2,
-0x6df4,0x6df5,0x6df6,0x6df8,0x6dfa,0x6dfd,0x6dfe,0x6dff,
-0x6e00,0x6e01,0x6e02,0x6e03,0x6e04,0x6e06,0x6e07,0x6e08,
-0x6e09,0x6e0b,0x6e0f,0x6e12,0x6e13,0x6e15,0x6e18,0x6e19,
-0x6e1b,0x6e1c,0x6e1e,0x6e1f,0x6e22,0x6e26,0x6e27,0x6e28,
-0x6e2a,0x6e2c,0x6e2e,0x6e30,0x6e31,0x6e33,0x6e35,0x0000,
-0x6e36,0x6e37,0x6e39,0x6e3b,0x6e3c,0x6e3d,0x6e3e,0x6e3f,
-0x6e40,0x6e41,0x6e42,0x6e45,0x6e46,0x6e47,0x6e48,0x6e49,
-0x6e4a,0x6e4b,0x6e4c,0x6e4f,0x6e50,0x6e51,0x6e52,0x6e55,
-0x6e57,0x6e59,0x6e5a,0x6e5c,0x6e5d,0x6e5e,0x6e60,0x6e61,
-0x6e62,0x6e63,0x6e64,0x6e65,0x6e66,0x6e67,0x6e68,0x6e69,
-0x6e6a,0x6e6c,0x6e6d,0x6e6f,0x6e70,0x6e71,0x6e72,0x6e73,
-0x6e74,0x6e75,0x6e76,0x6e77,0x6e78,0x6e79,0x6e7a,0x6e7b,
-0x6e7c,0x6e7d,0x6e80,0x6e81,0x6e82,0x6e84,0x6e87,0x6e88,
-0x6e8a,0x6e8b,0x6e8c,0x6e8d,0x6e8e,0x6e91,0x6e92,0x6e93,
-0x6e94,0x6e95,0x6e96,0x6e97,0x6e99,0x6e9a,0x6e9b,0x6e9d,
-0x6e9e,0x6ea0,0x6ea1,0x6ea3,0x6ea4,0x6ea6,0x6ea8,0x6ea9,
-0x6eab,0x6eac,0x6ead,0x6eae,0x6eb0,0x6eb3,0x6eb5,0x6eb8,
-0x6eb9,0x6ebc,0x6ebe,0x6ebf,0x6ec0,0x6ec3,0x6ec4,0x6ec5,
-0x6ec6,0x6ec8,0x6ec9,0x6eca,0x6ecc,0x6ecd,0x6ece,0x6ed0,
-0x6ed2,0x6ed6,0x6ed8,0x6ed9,0x6edb,0x6edc,0x6edd,0x6ee3,
-0x6ee7,0x6eea,0x6eeb,0x6eec,0x6eed,0x6eee,0x6eef,0x0000,
-/* 0x9d00 */
-0x6ef0,0x6ef1,0x6ef2,0x6ef3,0x6ef5,0x6ef6,0x6ef7,0x6ef8,
-0x6efa,0x6efb,0x6efc,0x6efd,0x6efe,0x6eff,0x6f00,0x6f01,
-0x6f03,0x6f04,0x6f05,0x6f07,0x6f08,0x6f0a,0x6f0b,0x6f0c,
-0x6f0d,0x6f0e,0x6f10,0x6f11,0x6f12,0x6f16,0x6f17,0x6f18,
-0x6f19,0x6f1a,0x6f1b,0x6f1c,0x6f1d,0x6f1e,0x6f1f,0x6f21,
-0x6f22,0x6f23,0x6f25,0x6f26,0x6f27,0x6f28,0x6f2c,0x6f2e,
-0x6f30,0x6f32,0x6f34,0x6f35,0x6f37,0x6f38,0x6f39,0x6f3a,
-0x6f3b,0x6f3c,0x6f3d,0x6f3f,0x6f40,0x6f41,0x6f42,0x0000,
-0x6f43,0x6f44,0x6f45,0x6f48,0x6f49,0x6f4a,0x6f4c,0x6f4e,
-0x6f4f,0x6f50,0x6f51,0x6f52,0x6f53,0x6f54,0x6f55,0x6f56,
-0x6f57,0x6f59,0x6f5a,0x6f5b,0x6f5d,0x6f5f,0x6f60,0x6f61,
-0x6f63,0x6f64,0x6f65,0x6f67,0x6f68,0x6f69,0x6f6a,0x6f6b,
-0x6f6c,0x6f6f,0x6f70,0x6f71,0x6f73,0x6f75,0x6f76,0x6f77,
-0x6f79,0x6f7b,0x6f7d,0x6f7e,0x6f7f,0x6f80,0x6f81,0x6f82,
-0x6f83,0x6f85,0x6f86,0x6f87,0x6f8a,0x6f8b,0x6f8f,0x6f90,
-0x6f91,0x6f92,0x6f93,0x6f94,0x6f95,0x6f96,0x6f97,0x6f98,
-0x6f99,0x6f9a,0x6f9b,0x6f9d,0x6f9e,0x6f9f,0x6fa0,0x6fa2,
-0x6fa3,0x6fa4,0x6fa5,0x6fa6,0x6fa8,0x6fa9,0x6faa,0x6fab,
-0x6fac,0x6fad,0x6fae,0x6faf,0x6fb0,0x6fb1,0x6fb2,0x6fb4,
-0x6fb5,0x6fb7,0x6fb8,0x6fba,0x6fbb,0x6fbc,0x6fbd,0x6fbe,
-0x6fbf,0x6fc1,0x6fc3,0x6fc4,0x6fc5,0x6fc6,0x6fc7,0x6fc8,
-0x6fca,0x6fcb,0x6fcc,0x6fcd,0x6fce,0x6fcf,0x6fd0,0x6fd3,
-0x6fd4,0x6fd5,0x6fd6,0x6fd7,0x6fd8,0x6fd9,0x6fda,0x6fdb,
-0x6fdc,0x6fdd,0x6fdf,0x6fe2,0x6fe3,0x6fe4,0x6fe5,0x0000,
-/* 0x9e00 */
-0x6fe6,0x6fe7,0x6fe8,0x6fe9,0x6fea,0x6feb,0x6fec,0x6fed,
-0x6ff0,0x6ff1,0x6ff2,0x6ff3,0x6ff4,0x6ff5,0x6ff6,0x6ff7,
-0x6ff8,0x6ff9,0x6ffa,0x6ffb,0x6ffc,0x6ffd,0x6ffe,0x6fff,
-0x7000,0x7001,0x7002,0x7003,0x7004,0x7005,0x7006,0x7007,
-0x7008,0x7009,0x700a,0x700b,0x700c,0x700d,0x700e,0x700f,
-0x7010,0x7012,0x7013,0x7014,0x7015,0x7016,0x7017,0x7018,
-0x7019,0x701c,0x701d,0x701e,0x701f,0x7020,0x7021,0x7022,
-0x7024,0x7025,0x7026,0x7027,0x7028,0x7029,0x702a,0x0000,
-0x702b,0x702c,0x702d,0x702e,0x702f,0x7030,0x7031,0x7032,
-0x7033,0x7034,0x7036,0x7037,0x7038,0x703a,0x703b,0x703c,
-0x703d,0x703e,0x703f,0x7040,0x7041,0x7042,0x7043,0x7044,
-0x7045,0x7046,0x7047,0x7048,0x7049,0x704a,0x704b,0x704d,
-0x704e,0x7050,0x7051,0x7052,0x7053,0x7054,0x7055,0x7056,
-0x7057,0x7058,0x7059,0x705a,0x705b,0x705c,0x705d,0x705f,
-0x7060,0x7061,0x7062,0x7063,0x7064,0x7065,0x7066,0x7067,
-0x7068,0x7069,0x706a,0x706e,0x7071,0x7072,0x7073,0x7074,
-0x7077,0x7079,0x707a,0x707b,0x707d,0x7081,0x7082,0x7083,
-0x7084,0x7086,0x7087,0x7088,0x708b,0x708c,0x708d,0x708f,
-0x7090,0x7091,0x7093,0x7097,0x7098,0x709a,0x709b,0x709e,
-0x709f,0x70a0,0x70a1,0x70a2,0x70a3,0x70a4,0x70a5,0x70a6,
-0x70a7,0x70a8,0x70a9,0x70aa,0x70b0,0x70b2,0x70b4,0x70b5,
-0x70b6,0x70ba,0x70be,0x70bf,0x70c4,0x70c5,0x70c6,0x70c7,
-0x70c9,0x70cb,0x70cc,0x70cd,0x70ce,0x70cf,0x70d0,0x70d1,
-0x70d2,0x70d3,0x70d4,0x70d5,0x70d6,0x70d7,0x70da,0x0000,
-/* 0x9f00 */
-0x70dc,0x70dd,0x70de,0x70e0,0x70e1,0x70e2,0x70e3,0x70e5,
-0x70ea,0x70ee,0x70f0,0x70f1,0x70f2,0x70f3,0x70f4,0x70f5,
-0x70f6,0x70f8,0x70fa,0x70fb,0x70fc,0x70fe,0x70ff,0x7100,
-0x7101,0x7102,0x7103,0x7104,0x7105,0x7106,0x7107,0x7108,
-0x710b,0x710c,0x710d,0x710e,0x710f,0x7111,0x7112,0x7114,
-0x7117,0x711b,0x711c,0x711d,0x711e,0x711f,0x7120,0x7121,
-0x7122,0x7123,0x7124,0x7125,0x7127,0x7128,0x7129,0x712a,
-0x712b,0x712c,0x712d,0x712e,0x7132,0x7133,0x7134,0x0000,
-0x7135,0x7137,0x7138,0x7139,0x713a,0x713b,0x713c,0x713d,
-0x713e,0x713f,0x7140,0x7141,0x7142,0x7143,0x7144,0x7146,
-0x7147,0x7148,0x7149,0x714b,0x714d,0x714f,0x7150,0x7151,
-0x7152,0x7153,0x7154,0x7155,0x7156,0x7157,0x7158,0x7159,
-0x715a,0x715b,0x715d,0x715f,0x7160,0x7161,0x7162,0x7163,
-0x7165,0x7169,0x716a,0x716b,0x716c,0x716d,0x716f,0x7170,
-0x7171,0x7174,0x7175,0x7176,0x7177,0x7179,0x717b,0x717c,
-0x717e,0x717f,0x7180,0x7181,0x7182,0x7183,0x7185,0x7186,
-0x7187,0x7188,0x7189,0x718b,0x718c,0x718d,0x718e,0x7190,
-0x7191,0x7192,0x7193,0x7195,0x7196,0x7197,0x719a,0x719b,
-0x719c,0x719d,0x719e,0x71a1,0x71a2,0x71a3,0x71a4,0x71a5,
-0x71a6,0x71a7,0x71a9,0x71aa,0x71ab,0x71ad,0x71ae,0x71af,
-0x71b0,0x71b1,0x71b2,0x71b4,0x71b6,0x71b7,0x71b8,0x71ba,
-0x71bb,0x71bc,0x71bd,0x71be,0x71bf,0x71c0,0x71c1,0x71c2,
-0x71c4,0x71c5,0x71c6,0x71c7,0x71c8,0x71c9,0x71ca,0x71cb,
-0x71cc,0x71cd,0x71cf,0x71d0,0x71d1,0x71d2,0x71d3,0x0000,
-/* 0xa000 */
-0x71d6,0x71d7,0x71d8,0x71d9,0x71da,0x71db,0x71dc,0x71dd,
-0x71de,0x71df,0x71e1,0x71e2,0x71e3,0x71e4,0x71e6,0x71e8,
-0x71e9,0x71ea,0x71eb,0x71ec,0x71ed,0x71ef,0x71f0,0x71f1,
-0x71f2,0x71f3,0x71f4,0x71f5,0x71f6,0x71f7,0x71f8,0x71fa,
-0x71fb,0x71fc,0x71fd,0x71fe,0x71ff,0x7200,0x7201,0x7202,
-0x7203,0x7204,0x7205,0x7207,0x7208,0x7209,0x720a,0x720b,
-0x720c,0x720d,0x720e,0x720f,0x7210,0x7211,0x7212,0x7213,
-0x7214,0x7215,0x7216,0x7217,0x7218,0x7219,0x721a,0x0000,
-0x721b,0x721c,0x721e,0x721f,0x7220,0x7221,0x7222,0x7223,
-0x7224,0x7225,0x7226,0x7227,0x7229,0x722b,0x722d,0x722e,
-0x722f,0x7232,0x7233,0x7234,0x723a,0x723c,0x723e,0x7240,
-0x7241,0x7242,0x7243,0x7244,0x7245,0x7246,0x7249,0x724a,
-0x724b,0x724e,0x724f,0x7250,0x7251,0x7253,0x7254,0x7255,
-0x7257,0x7258,0x725a,0x725c,0x725e,0x7260,0x7263,0x7264,
-0x7265,0x7268,0x726a,0x726b,0x726c,0x726d,0x7270,0x7271,
-0x7273,0x7274,0x7276,0x7277,0x7278,0x727b,0x727c,0x727d,
-0x7282,0x7283,0x7285,0x7286,0x7287,0x7288,0x7289,0x728c,
-0x728e,0x7290,0x7291,0x7293,0x7294,0x7295,0x7296,0x7297,
-0x7298,0x7299,0x729a,0x729b,0x729c,0x729d,0x729e,0x72a0,
-0x72a1,0x72a2,0x72a3,0x72a4,0x72a5,0x72a6,0x72a7,0x72a8,
-0x72a9,0x72aa,0x72ab,0x72ae,0x72b1,0x72b2,0x72b3,0x72b5,
-0x72ba,0x72bb,0x72bc,0x72bd,0x72be,0x72bf,0x72c0,0x72c5,
-0x72c6,0x72c7,0x72c9,0x72ca,0x72cb,0x72cc,0x72cf,0x72d1,
-0x72d3,0x72d4,0x72d5,0x72d6,0x72d8,0x72da,0x72db,0x0000,
-/* 0xa100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x3000,0x3001,0x3002,0x00b7,0x02c9,0x02c7,0x00a8,
-0x3003,0x3005,0x2014,0xff5e,0x2016,0x2026,0x2018,0x2019,
-0x201c,0x201d,0x3014,0x3015,0x3008,0x3009,0x300a,0x300b,
-0x300c,0x300d,0x300e,0x300f,0x3016,0x3017,0x3010,0x3011,
-0x00b1,0x00d7,0x00f7,0x2236,0x2227,0x2228,0x2211,0x220f,
-0x222a,0x2229,0x2208,0x2237,0x221a,0x22a5,0x2225,0x2220,
-0x2312,0x2299,0x222b,0x222e,0x2261,0x224c,0x2248,0x223d,
-0x221d,0x2260,0x226e,0x226f,0x2264,0x2265,0x221e,0x2235,
-0x2234,0x2642,0x2640,0x00b0,0x2032,0x2033,0x2103,0xff04,
-0x00a4,0xffe0,0xffe1,0x2030,0x00a7,0x2116,0x2606,0x2605,
-0x25cb,0x25cf,0x25ce,0x25c7,0x25c6,0x25a1,0x25a0,0x25b3,
-0x25b2,0x203b,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,
-/* 0xa200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,
-0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x2488,0x2489,0x248a,0x248b,0x248c,0x248d,0x248e,
-0x248f,0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496,
-0x2497,0x2498,0x2499,0x249a,0x249b,0x2474,0x2475,0x2476,
-0x2477,0x2478,0x2479,0x247a,0x247b,0x247c,0x247d,0x247e,
-0x247f,0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486,
-0x2487,0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,
-0x2467,0x2468,0x2469,0x0000,0x0000,0x3220,0x3221,0x3222,
-0x3223,0x3224,0x3225,0x3226,0x3227,0x3228,0x3229,0x0000,
-0x0000,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
-0x2167,0x2168,0x2169,0x216a,0x216b,0x0000,0x0000,0x0000,
-/* 0xa300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xff01,0xff02,0xff03,0xffe5,0xff05,0xff06,0xff07,
-0xff08,0xff09,0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,
-0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,0xff16,0xff17,
-0xff18,0xff19,0xff1a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,
-0xff20,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,0xff27,
-0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,0xff2f,
-0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,0xff37,
-0xff38,0xff39,0xff3a,0xff3b,0xff3c,0xff3d,0xff3e,0xff3f,
-0xff40,0xff41,0xff42,0xff43,0xff44,0xff45,0xff46,0xff47,
-0xff48,0xff49,0xff4a,0xff4b,0xff4c,0xff4d,0xff4e,0xff4f,
-0xff50,0xff51,0xff52,0xff53,0xff54,0xff55,0xff56,0xff57,
-0xff58,0xff59,0xff5a,0xff5b,0xff5c,0xff5d,0xffe3,0x0000,
-/* 0xa400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,
-0x3048,0x3049,0x304a,0x304b,0x304c,0x304d,0x304e,0x304f,
-0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,
-0x3058,0x3059,0x305a,0x305b,0x305c,0x305d,0x305e,0x305f,
-0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,
-0x3068,0x3069,0x306a,0x306b,0x306c,0x306d,0x306e,0x306f,
-0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,
-0x3078,0x3079,0x307a,0x307b,0x307c,0x307d,0x307e,0x307f,
-0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,
-0x3088,0x3089,0x308a,0x308b,0x308c,0x308d,0x308e,0x308f,
-0x3090,0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x30a1,0x30a2,0x30a3,0x30a4,0x30a5,0x30a6,0x30a7,
-0x30a8,0x30a9,0x30aa,0x30ab,0x30ac,0x30ad,0x30ae,0x30af,
-0x30b0,0x30b1,0x30b2,0x30b3,0x30b4,0x30b5,0x30b6,0x30b7,
-0x30b8,0x30b9,0x30ba,0x30bb,0x30bc,0x30bd,0x30be,0x30bf,
-0x30c0,0x30c1,0x30c2,0x30c3,0x30c4,0x30c5,0x30c6,0x30c7,
-0x30c8,0x30c9,0x30ca,0x30cb,0x30cc,0x30cd,0x30ce,0x30cf,
-0x30d0,0x30d1,0x30d2,0x30d3,0x30d4,0x30d5,0x30d6,0x30d7,
-0x30d8,0x30d9,0x30da,0x30db,0x30dc,0x30dd,0x30de,0x30df,
-0x30e0,0x30e1,0x30e2,0x30e3,0x30e4,0x30e5,0x30e6,0x30e7,
-0x30e8,0x30e9,0x30ea,0x30eb,0x30ec,0x30ed,0x30ee,0x30ef,
-0x30f0,0x30f1,0x30f2,0x30f3,0x30f4,0x30f5,0x30f6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
-0x0398,0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f,
-0x03a0,0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,
-0x03a9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,
-0x03b8,0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf,
-0x03c0,0x03c1,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,
-0x03c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfe35,0xfe36,0xfe39,0xfe3a,0xfe3f,0xfe40,0xfe3d,0xfe3e,
-0xfe41,0xfe42,0xfe43,0xfe44,0x0000,0x0000,0xfe3b,0xfe3c,
-0xfe37,0xfe38,0xfe31,0x0000,0xfe33,0xfe34,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa700 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,
-0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,
-0x041e,0x041f,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,
-0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,
-0x042e,0x042f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,
-0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,
-0x043e,0x043f,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,
-0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,
-0x044e,0x044f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa800 */
-0x02ca,0x02cb,0x02d9,0x2013,0x2015,0x2025,0x2035,0x2105,
-0x2109,0x2196,0x2197,0x2198,0x2199,0x2215,0x221f,0x2223,
-0x2252,0x2266,0x2267,0x22bf,0x2550,0x2551,0x2552,0x2553,
-0x2554,0x2555,0x2556,0x2557,0x2558,0x2559,0x255a,0x255b,
-0x255c,0x255d,0x255e,0x255f,0x2560,0x2561,0x2562,0x2563,
-0x2564,0x2565,0x2566,0x2567,0x2568,0x2569,0x256a,0x256b,
-0x256c,0x256d,0x256e,0x256f,0x2570,0x2571,0x2572,0x2573,
-0x2581,0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x0000,
-0x2588,0x2589,0x258a,0x258b,0x258c,0x258d,0x258e,0x258f,
-0x2593,0x2594,0x2595,0x25bc,0x25bd,0x25e2,0x25e3,0x25e4,
-0x25e5,0x2609,0x2295,0x3012,0x301d,0x301e,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0101,0x00e1,0x01ce,0x00e0,0x0113,0x00e9,0x011b,
-0x00e8,0x012b,0x00ed,0x01d0,0x00ec,0x014d,0x00f3,0x01d2,
-0x00f2,0x016b,0x00fa,0x01d4,0x00f9,0x01d6,0x01d8,0x01da,
-0x01dc,0x00fc,0x00ea,0x0251,0x0000,0x0144,0x0148,0x0000,
-0x0261,0x0000,0x0000,0x0000,0x0000,0x3105,0x3106,0x3107,
-0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,0x310f,
-0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117,
-0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,0x311f,
-0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,0x3127,
-0x3128,0x3129,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa900 */
-0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,
-0x3029,0x32a3,0x338e,0x338f,0x339c,0x339d,0x339e,0x33a1,
-0x33c4,0x33ce,0x33d1,0x33d2,0x33d5,0xfe30,0xffe2,0xffe4,
-0x0000,0x2121,0x3231,0x0000,0x2010,0x0000,0x0000,0x0000,
-0x30fc,0x309b,0x309c,0x30fd,0x30fe,0x3006,0x309d,0x309e,
-0xfe49,0xfe4a,0xfe4b,0xfe4c,0xfe4d,0xfe4e,0xfe4f,0xfe50,
-0xfe51,0xfe52,0xfe54,0xfe55,0xfe56,0xfe57,0xfe59,0xfe5a,
-0xfe5b,0xfe5c,0xfe5d,0xfe5e,0xfe5f,0xfe60,0xfe61,0x0000,
-0xfe62,0xfe63,0xfe64,0xfe65,0xfe66,0xfe68,0xfe69,0xfe6a,
-0xfe6b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3007,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x2500,0x2501,0x2502,0x2503,
-0x2504,0x2505,0x2506,0x2507,0x2508,0x2509,0x250a,0x250b,
-0x250c,0x250d,0x250e,0x250f,0x2510,0x2511,0x2512,0x2513,
-0x2514,0x2515,0x2516,0x2517,0x2518,0x2519,0x251a,0x251b,
-0x251c,0x251d,0x251e,0x251f,0x2520,0x2521,0x2522,0x2523,
-0x2524,0x2525,0x2526,0x2527,0x2528,0x2529,0x252a,0x252b,
-0x252c,0x252d,0x252e,0x252f,0x2530,0x2531,0x2532,0x2533,
-0x2534,0x2535,0x2536,0x2537,0x2538,0x2539,0x253a,0x253b,
-0x253c,0x253d,0x253e,0x253f,0x2540,0x2541,0x2542,0x2543,
-0x2544,0x2545,0x2546,0x2547,0x2548,0x2549,0x254a,0x254b,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xaa00 */
-0x72dc,0x72dd,0x72df,0x72e2,0x72e3,0x72e4,0x72e5,0x72e6,
-0x72e7,0x72ea,0x72eb,0x72f5,0x72f6,0x72f9,0x72fd,0x72fe,
-0x72ff,0x7300,0x7302,0x7304,0x7305,0x7306,0x7307,0x7308,
-0x7309,0x730b,0x730c,0x730d,0x730f,0x7310,0x7311,0x7312,
-0x7314,0x7318,0x7319,0x731a,0x731f,0x7320,0x7323,0x7324,
-0x7326,0x7327,0x7328,0x732d,0x732f,0x7330,0x7332,0x7333,
-0x7335,0x7336,0x733a,0x733b,0x733c,0x733d,0x7340,0x7341,
-0x7342,0x7343,0x7344,0x7345,0x7346,0x7347,0x7348,0x0000,
-0x7349,0x734a,0x734b,0x734c,0x734e,0x734f,0x7351,0x7353,
-0x7354,0x7355,0x7356,0x7358,0x7359,0x735a,0x735b,0x735c,
-0x735d,0x735e,0x735f,0x7361,0x7362,0x7363,0x7364,0x7365,
-0x7366,0x7367,0x7368,0x7369,0x736a,0x736b,0x736e,0x7370,
-0x7371,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xab00 */
-0x7372,0x7373,0x7374,0x7375,0x7376,0x7377,0x7378,0x7379,
-0x737a,0x737b,0x737c,0x737d,0x737f,0x7380,0x7381,0x7382,
-0x7383,0x7385,0x7386,0x7388,0x738a,0x738c,0x738d,0x738f,
-0x7390,0x7392,0x7393,0x7394,0x7395,0x7397,0x7398,0x7399,
-0x739a,0x739c,0x739d,0x739e,0x73a0,0x73a1,0x73a3,0x73a4,
-0x73a5,0x73a6,0x73a7,0x73a8,0x73aa,0x73ac,0x73ad,0x73b1,
-0x73b4,0x73b5,0x73b6,0x73b8,0x73b9,0x73bc,0x73bd,0x73be,
-0x73bf,0x73c1,0x73c3,0x73c4,0x73c5,0x73c6,0x73c7,0x0000,
-0x73cb,0x73cc,0x73ce,0x73d2,0x73d3,0x73d4,0x73d5,0x73d6,
-0x73d7,0x73d8,0x73da,0x73db,0x73dc,0x73dd,0x73df,0x73e1,
-0x73e2,0x73e3,0x73e4,0x73e6,0x73e8,0x73ea,0x73eb,0x73ec,
-0x73ee,0x73ef,0x73f0,0x73f1,0x73f3,0x73f4,0x73f5,0x73f6,
-0x73f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xac00 */
-0x73f8,0x73f9,0x73fa,0x73fb,0x73fc,0x73fd,0x73fe,0x73ff,
-0x7400,0x7401,0x7402,0x7404,0x7407,0x7408,0x740b,0x740c,
-0x740d,0x740e,0x7411,0x7412,0x7413,0x7414,0x7415,0x7416,
-0x7417,0x7418,0x7419,0x741c,0x741d,0x741e,0x741f,0x7420,
-0x7421,0x7423,0x7424,0x7427,0x7429,0x742b,0x742d,0x742f,
-0x7431,0x7432,0x7437,0x7438,0x7439,0x743a,0x743b,0x743d,
-0x743e,0x743f,0x7440,0x7442,0x7443,0x7444,0x7445,0x7446,
-0x7447,0x7448,0x7449,0x744a,0x744b,0x744c,0x744d,0x0000,
-0x744e,0x744f,0x7450,0x7451,0x7452,0x7453,0x7454,0x7456,
-0x7458,0x745d,0x7460,0x7461,0x7462,0x7463,0x7464,0x7465,
-0x7466,0x7467,0x7468,0x7469,0x746a,0x746b,0x746c,0x746e,
-0x746f,0x7471,0x7472,0x7473,0x7474,0x7475,0x7478,0x7479,
-0x747a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xad00 */
-0x747b,0x747c,0x747d,0x747f,0x7482,0x7484,0x7485,0x7486,
-0x7488,0x7489,0x748a,0x748c,0x748d,0x748f,0x7491,0x7492,
-0x7493,0x7494,0x7495,0x7496,0x7497,0x7498,0x7499,0x749a,
-0x749b,0x749d,0x749f,0x74a0,0x74a1,0x74a2,0x74a3,0x74a4,
-0x74a5,0x74a6,0x74aa,0x74ab,0x74ac,0x74ad,0x74ae,0x74af,
-0x74b0,0x74b1,0x74b2,0x74b3,0x74b4,0x74b5,0x74b6,0x74b7,
-0x74b8,0x74b9,0x74bb,0x74bc,0x74bd,0x74be,0x74bf,0x74c0,
-0x74c1,0x74c2,0x74c3,0x74c4,0x74c5,0x74c6,0x74c7,0x0000,
-0x74c8,0x74c9,0x74ca,0x74cb,0x74cc,0x74cd,0x74ce,0x74cf,
-0x74d0,0x74d1,0x74d3,0x74d4,0x74d5,0x74d6,0x74d7,0x74d8,
-0x74d9,0x74da,0x74db,0x74dd,0x74df,0x74e1,0x74e5,0x74e7,
-0x74e8,0x74e9,0x74ea,0x74eb,0x74ec,0x74ed,0x74f0,0x74f1,
-0x74f2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xae00 */
-0x74f3,0x74f5,0x74f8,0x74f9,0x74fa,0x74fb,0x74fc,0x74fd,
-0x74fe,0x7500,0x7501,0x7502,0x7503,0x7505,0x7506,0x7507,
-0x7508,0x7509,0x750a,0x750b,0x750c,0x750e,0x7510,0x7512,
-0x7514,0x7515,0x7516,0x7517,0x751b,0x751d,0x751e,0x7520,
-0x7521,0x7522,0x7523,0x7524,0x7526,0x7527,0x752a,0x752e,
-0x7534,0x7536,0x7539,0x753c,0x753d,0x753f,0x7541,0x7542,
-0x7543,0x7544,0x7546,0x7547,0x7549,0x754a,0x754d,0x7550,
-0x7551,0x7552,0x7553,0x7555,0x7556,0x7557,0x7558,0x0000,
-0x755d,0x755e,0x755f,0x7560,0x7561,0x7562,0x7563,0x7564,
-0x7567,0x7568,0x7569,0x756b,0x756c,0x756d,0x756e,0x756f,
-0x7570,0x7571,0x7573,0x7575,0x7576,0x7577,0x757a,0x757b,
-0x757c,0x757d,0x757e,0x7580,0x7581,0x7582,0x7584,0x7585,
-0x7587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xaf00 */
-0x7588,0x7589,0x758a,0x758c,0x758d,0x758e,0x7590,0x7593,
-0x7595,0x7598,0x759b,0x759c,0x759e,0x75a2,0x75a6,0x75a7,
-0x75a8,0x75a9,0x75aa,0x75ad,0x75b6,0x75b7,0x75ba,0x75bb,
-0x75bf,0x75c0,0x75c1,0x75c6,0x75cb,0x75cc,0x75ce,0x75cf,
-0x75d0,0x75d1,0x75d3,0x75d7,0x75d9,0x75da,0x75dc,0x75dd,
-0x75df,0x75e0,0x75e1,0x75e5,0x75e9,0x75ec,0x75ed,0x75ee,
-0x75ef,0x75f2,0x75f3,0x75f5,0x75f6,0x75f7,0x75f8,0x75fa,
-0x75fb,0x75fd,0x75fe,0x7602,0x7604,0x7606,0x7607,0x0000,
-0x7608,0x7609,0x760b,0x760d,0x760e,0x760f,0x7611,0x7612,
-0x7613,0x7614,0x7616,0x761a,0x761c,0x761d,0x761e,0x7621,
-0x7623,0x7627,0x7628,0x762c,0x762e,0x762f,0x7631,0x7632,
-0x7636,0x7637,0x7639,0x763a,0x763b,0x763d,0x7641,0x7642,
-0x7644,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xb000 */
-0x7645,0x7646,0x7647,0x7648,0x7649,0x764a,0x764b,0x764e,
-0x764f,0x7650,0x7651,0x7652,0x7653,0x7655,0x7657,0x7658,
-0x7659,0x765a,0x765b,0x765d,0x765f,0x7660,0x7661,0x7662,
-0x7664,0x7665,0x7666,0x7667,0x7668,0x7669,0x766a,0x766c,
-0x766d,0x766e,0x7670,0x7671,0x7672,0x7673,0x7674,0x7675,
-0x7676,0x7677,0x7679,0x767a,0x767c,0x767f,0x7680,0x7681,
-0x7683,0x7685,0x7689,0x768a,0x768c,0x768d,0x768f,0x7690,
-0x7692,0x7694,0x7695,0x7697,0x7698,0x769a,0x769b,0x0000,
-0x769c,0x769d,0x769e,0x769f,0x76a0,0x76a1,0x76a2,0x76a3,
-0x76a5,0x76a6,0x76a7,0x76a8,0x76a9,0x76aa,0x76ab,0x76ac,
-0x76ad,0x76af,0x76b0,0x76b3,0x76b5,0x76b6,0x76b7,0x76b8,
-0x76b9,0x76ba,0x76bb,0x76bc,0x76bd,0x76be,0x76c0,0x76c1,
-0x76c3,0x554a,0x963f,0x57c3,0x6328,0x54ce,0x5509,0x54c0,
-0x7691,0x764c,0x853c,0x77ee,0x827e,0x788d,0x7231,0x9698,
-0x978d,0x6c28,0x5b89,0x4ffa,0x6309,0x6697,0x5cb8,0x80fa,
-0x6848,0x80ae,0x6602,0x76ce,0x51f9,0x6556,0x71ac,0x7ff1,
-0x8884,0x50b2,0x5965,0x61ca,0x6fb3,0x82ad,0x634c,0x6252,
-0x53ed,0x5427,0x7b06,0x516b,0x75a4,0x5df4,0x62d4,0x8dcb,
-0x9776,0x628a,0x8019,0x575d,0x9738,0x7f62,0x7238,0x767d,
-0x67cf,0x767e,0x6446,0x4f70,0x8d25,0x62dc,0x7a17,0x6591,
-0x73ed,0x642c,0x6273,0x822c,0x9881,0x677f,0x7248,0x626e,
-0x62cc,0x4f34,0x74e3,0x534a,0x529e,0x7eca,0x90a6,0x5e2e,
-0x6886,0x699c,0x8180,0x7ed1,0x68d2,0x78c5,0x868c,0x9551,
-0x508d,0x8c24,0x82de,0x80de,0x5305,0x8912,0x5265,0x0000,
-/* 0xb100 */
-0x76c4,0x76c7,0x76c9,0x76cb,0x76cc,0x76d3,0x76d5,0x76d9,
-0x76da,0x76dc,0x76dd,0x76de,0x76e0,0x76e1,0x76e2,0x76e3,
-0x76e4,0x76e6,0x76e7,0x76e8,0x76e9,0x76ea,0x76eb,0x76ec,
-0x76ed,0x76f0,0x76f3,0x76f5,0x76f6,0x76f7,0x76fa,0x76fb,
-0x76fd,0x76ff,0x7700,0x7702,0x7703,0x7705,0x7706,0x770a,
-0x770c,0x770e,0x770f,0x7710,0x7711,0x7712,0x7713,0x7714,
-0x7715,0x7716,0x7717,0x7718,0x771b,0x771c,0x771d,0x771e,
-0x7721,0x7723,0x7724,0x7725,0x7727,0x772a,0x772b,0x0000,
-0x772c,0x772e,0x7730,0x7731,0x7732,0x7733,0x7734,0x7739,
-0x773b,0x773d,0x773e,0x773f,0x7742,0x7744,0x7745,0x7746,
-0x7748,0x7749,0x774a,0x774b,0x774c,0x774d,0x774e,0x774f,
-0x7752,0x7753,0x7754,0x7755,0x7756,0x7757,0x7758,0x7759,
-0x775c,0x8584,0x96f9,0x4fdd,0x5821,0x9971,0x5b9d,0x62b1,
-0x62a5,0x66b4,0x8c79,0x9c8d,0x7206,0x676f,0x7891,0x60b2,
-0x5351,0x5317,0x8f88,0x80cc,0x8d1d,0x94a1,0x500d,0x72c8,
-0x5907,0x60eb,0x7119,0x88ab,0x5954,0x82ef,0x672c,0x7b28,
-0x5d29,0x7ef7,0x752d,0x6cf5,0x8e66,0x8ff8,0x903c,0x9f3b,
-0x6bd4,0x9119,0x7b14,0x5f7c,0x78a7,0x84d6,0x853d,0x6bd5,
-0x6bd9,0x6bd6,0x5e01,0x5e87,0x75f9,0x95ed,0x655d,0x5f0a,
-0x5fc5,0x8f9f,0x58c1,0x81c2,0x907f,0x965b,0x97ad,0x8fb9,
-0x7f16,0x8d2c,0x6241,0x4fbf,0x53d8,0x535e,0x8fa8,0x8fa9,
-0x8fab,0x904d,0x6807,0x5f6a,0x8198,0x8868,0x9cd6,0x618b,
-0x522b,0x762a,0x5f6c,0x658c,0x6fd2,0x6ee8,0x5bbe,0x6448,
-0x5175,0x51b0,0x67c4,0x4e19,0x79c9,0x997c,0x70b3,0x0000,
-/* 0xb200 */
-0x775d,0x775e,0x775f,0x7760,0x7764,0x7767,0x7769,0x776a,
-0x776d,0x776e,0x776f,0x7770,0x7771,0x7772,0x7773,0x7774,
-0x7775,0x7776,0x7777,0x7778,0x777a,0x777b,0x777c,0x7781,
-0x7782,0x7783,0x7786,0x7787,0x7788,0x7789,0x778a,0x778b,
-0x778f,0x7790,0x7793,0x7794,0x7795,0x7796,0x7797,0x7798,
-0x7799,0x779a,0x779b,0x779c,0x779d,0x779e,0x77a1,0x77a3,
-0x77a4,0x77a6,0x77a8,0x77ab,0x77ad,0x77ae,0x77af,0x77b1,
-0x77b2,0x77b4,0x77b6,0x77b7,0x77b8,0x77b9,0x77ba,0x0000,
-0x77bc,0x77be,0x77c0,0x77c1,0x77c2,0x77c3,0x77c4,0x77c5,
-0x77c6,0x77c7,0x77c8,0x77c9,0x77ca,0x77cb,0x77cc,0x77ce,
-0x77cf,0x77d0,0x77d1,0x77d2,0x77d3,0x77d4,0x77d5,0x77d6,
-0x77d8,0x77d9,0x77da,0x77dd,0x77de,0x77df,0x77e0,0x77e1,
-0x77e4,0x75c5,0x5e76,0x73bb,0x83e0,0x64ad,0x62e8,0x94b5,
-0x6ce2,0x535a,0x52c3,0x640f,0x94c2,0x7b94,0x4f2f,0x5e1b,
-0x8236,0x8116,0x818a,0x6e24,0x6cca,0x9a73,0x6355,0x535c,
-0x54fa,0x8865,0x57e0,0x4e0d,0x5e03,0x6b65,0x7c3f,0x90e8,
-0x6016,0x64e6,0x731c,0x88c1,0x6750,0x624d,0x8d22,0x776c,
-0x8e29,0x91c7,0x5f69,0x83dc,0x8521,0x9910,0x53c2,0x8695,
-0x6b8b,0x60ed,0x60e8,0x707f,0x82cd,0x8231,0x4ed3,0x6ca7,
-0x85cf,0x64cd,0x7cd9,0x69fd,0x66f9,0x8349,0x5395,0x7b56,
-0x4fa7,0x518c,0x6d4b,0x5c42,0x8e6d,0x63d2,0x53c9,0x832c,
-0x8336,0x67e5,0x78b4,0x643d,0x5bdf,0x5c94,0x5dee,0x8be7,
-0x62c6,0x67f4,0x8c7a,0x6400,0x63ba,0x8749,0x998b,0x8c17,
-0x7f20,0x94f2,0x4ea7,0x9610,0x98a4,0x660c,0x7316,0x0000,
-/* 0xb300 */
-0x77e6,0x77e8,0x77ea,0x77ef,0x77f0,0x77f1,0x77f2,0x77f4,
-0x77f5,0x77f7,0x77f9,0x77fa,0x77fb,0x77fc,0x7803,0x7804,
-0x7805,0x7806,0x7807,0x7808,0x780a,0x780b,0x780e,0x780f,
-0x7810,0x7813,0x7815,0x7819,0x781b,0x781e,0x7820,0x7821,
-0x7822,0x7824,0x7828,0x782a,0x782b,0x782e,0x782f,0x7831,
-0x7832,0x7833,0x7835,0x7836,0x783d,0x783f,0x7841,0x7842,
-0x7843,0x7844,0x7846,0x7848,0x7849,0x784a,0x784b,0x784d,
-0x784f,0x7851,0x7853,0x7854,0x7858,0x7859,0x785a,0x0000,
-0x785b,0x785c,0x785e,0x785f,0x7860,0x7861,0x7862,0x7863,
-0x7864,0x7865,0x7866,0x7867,0x7868,0x7869,0x786f,0x7870,
-0x7871,0x7872,0x7873,0x7874,0x7875,0x7876,0x7878,0x7879,
-0x787a,0x787b,0x787d,0x787e,0x787f,0x7880,0x7881,0x7882,
-0x7883,0x573a,0x5c1d,0x5e38,0x957f,0x507f,0x80a0,0x5382,
-0x655e,0x7545,0x5531,0x5021,0x8d85,0x6284,0x949e,0x671d,
-0x5632,0x6f6e,0x5de2,0x5435,0x7092,0x8f66,0x626f,0x64a4,
-0x63a3,0x5f7b,0x6f88,0x90f4,0x81e3,0x8fb0,0x5c18,0x6668,
-0x5ff1,0x6c89,0x9648,0x8d81,0x886c,0x6491,0x79f0,0x57ce,
-0x6a59,0x6210,0x5448,0x4e58,0x7a0b,0x60e9,0x6f84,0x8bda,
-0x627f,0x901e,0x9a8b,0x79e4,0x5403,0x75f4,0x6301,0x5319,
-0x6c60,0x8fdf,0x5f1b,0x9a70,0x803b,0x9f7f,0x4f88,0x5c3a,
-0x8d64,0x7fc5,0x65a5,0x70bd,0x5145,0x51b2,0x866b,0x5d07,
-0x5ba0,0x62bd,0x916c,0x7574,0x8e0c,0x7a20,0x6101,0x7b79,
-0x4ec7,0x7ef8,0x7785,0x4e11,0x81ed,0x521d,0x51fa,0x6a71,
-0x53a8,0x8e87,0x9504,0x96cf,0x6ec1,0x9664,0x695a,0x0000,
-/* 0xb400 */
-0x7884,0x7885,0x7886,0x7888,0x788a,0x788b,0x788f,0x7890,
-0x7892,0x7894,0x7895,0x7896,0x7899,0x789d,0x789e,0x78a0,
-0x78a2,0x78a4,0x78a6,0x78a8,0x78a9,0x78aa,0x78ab,0x78ac,
-0x78ad,0x78ae,0x78af,0x78b5,0x78b6,0x78b7,0x78b8,0x78ba,
-0x78bb,0x78bc,0x78bd,0x78bf,0x78c0,0x78c2,0x78c3,0x78c4,
-0x78c6,0x78c7,0x78c8,0x78cc,0x78cd,0x78ce,0x78cf,0x78d1,
-0x78d2,0x78d3,0x78d6,0x78d7,0x78d8,0x78da,0x78db,0x78dc,
-0x78dd,0x78de,0x78df,0x78e0,0x78e1,0x78e2,0x78e3,0x0000,
-0x78e4,0x78e5,0x78e6,0x78e7,0x78e9,0x78ea,0x78eb,0x78ed,
-0x78ee,0x78ef,0x78f0,0x78f1,0x78f3,0x78f5,0x78f6,0x78f8,
-0x78f9,0x78fb,0x78fc,0x78fd,0x78fe,0x78ff,0x7900,0x7902,
-0x7903,0x7904,0x7906,0x7907,0x7908,0x7909,0x790a,0x790b,
-0x790c,0x7840,0x50a8,0x77d7,0x6410,0x89e6,0x5904,0x63e3,
-0x5ddd,0x7a7f,0x693d,0x4f20,0x8239,0x5598,0x4e32,0x75ae,
-0x7a97,0x5e62,0x5e8a,0x95ef,0x521b,0x5439,0x708a,0x6376,
-0x9524,0x5782,0x6625,0x693f,0x9187,0x5507,0x6df3,0x7eaf,
-0x8822,0x6233,0x7ef0,0x75b5,0x8328,0x78c1,0x96cc,0x8f9e,
-0x6148,0x74f7,0x8bcd,0x6b64,0x523a,0x8d50,0x6b21,0x806a,
-0x8471,0x56f1,0x5306,0x4ece,0x4e1b,0x51d1,0x7c97,0x918b,
-0x7c07,0x4fc3,0x8e7f,0x7be1,0x7a9c,0x6467,0x5d14,0x50ac,
-0x8106,0x7601,0x7cb9,0x6dec,0x7fe0,0x6751,0x5b58,0x5bf8,
-0x78cb,0x64ae,0x6413,0x63aa,0x632b,0x9519,0x642d,0x8fbe,
-0x7b54,0x7629,0x6253,0x5927,0x5446,0x6b79,0x50a3,0x6234,
-0x5e26,0x6b86,0x4ee3,0x8d37,0x888b,0x5f85,0x902e,0x0000,
-/* 0xb500 */
-0x790d,0x790e,0x790f,0x7910,0x7911,0x7912,0x7914,0x7915,
-0x7916,0x7917,0x7918,0x7919,0x791a,0x791b,0x791c,0x791d,
-0x791f,0x7920,0x7921,0x7922,0x7923,0x7925,0x7926,0x7927,
-0x7928,0x7929,0x792a,0x792b,0x792c,0x792d,0x792e,0x792f,
-0x7930,0x7931,0x7932,0x7933,0x7935,0x7936,0x7937,0x7938,
-0x7939,0x793d,0x793f,0x7942,0x7943,0x7944,0x7945,0x7947,
-0x794a,0x794b,0x794c,0x794d,0x794e,0x794f,0x7950,0x7951,
-0x7952,0x7954,0x7955,0x7958,0x7959,0x7961,0x7963,0x0000,
-0x7964,0x7966,0x7969,0x796a,0x796b,0x796c,0x796e,0x7970,
-0x7971,0x7972,0x7973,0x7974,0x7975,0x7976,0x7979,0x797b,
-0x797c,0x797d,0x797e,0x797f,0x7982,0x7983,0x7986,0x7987,
-0x7988,0x7989,0x798b,0x798c,0x798d,0x798e,0x7990,0x7991,
-0x7992,0x6020,0x803d,0x62c5,0x4e39,0x5355,0x90f8,0x63b8,
-0x80c6,0x65e6,0x6c2e,0x4f46,0x60ee,0x6de1,0x8bde,0x5f39,
-0x86cb,0x5f53,0x6321,0x515a,0x8361,0x6863,0x5200,0x6363,
-0x8e48,0x5012,0x5c9b,0x7977,0x5bfc,0x5230,0x7a3b,0x60bc,
-0x9053,0x76d7,0x5fb7,0x5f97,0x7684,0x8e6c,0x706f,0x767b,
-0x7b49,0x77aa,0x51f3,0x9093,0x5824,0x4f4e,0x6ef4,0x8fea,
-0x654c,0x7b1b,0x72c4,0x6da4,0x7fdf,0x5ae1,0x62b5,0x5e95,
-0x5730,0x8482,0x7b2c,0x5e1d,0x5f1f,0x9012,0x7f14,0x98a0,
-0x6382,0x6ec7,0x7898,0x70b9,0x5178,0x975b,0x57ab,0x7535,
-0x4f43,0x7538,0x5e97,0x60e6,0x5960,0x6dc0,0x6bbf,0x7889,
-0x53fc,0x96d5,0x51cb,0x5201,0x6389,0x540a,0x9493,0x8c03,
-0x8dcc,0x7239,0x789f,0x8776,0x8fed,0x8c0d,0x53e0,0x0000,
-/* 0xb600 */
-0x7993,0x7994,0x7995,0x7996,0x7997,0x7998,0x7999,0x799b,
-0x799c,0x799d,0x799e,0x799f,0x79a0,0x79a1,0x79a2,0x79a3,
-0x79a4,0x79a5,0x79a6,0x79a8,0x79a9,0x79aa,0x79ab,0x79ac,
-0x79ad,0x79ae,0x79af,0x79b0,0x79b1,0x79b2,0x79b4,0x79b5,
-0x79b6,0x79b7,0x79b8,0x79bc,0x79bf,0x79c2,0x79c4,0x79c5,
-0x79c7,0x79c8,0x79ca,0x79cc,0x79ce,0x79cf,0x79d0,0x79d3,
-0x79d4,0x79d6,0x79d7,0x79d9,0x79da,0x79db,0x79dc,0x79dd,
-0x79de,0x79e0,0x79e1,0x79e2,0x79e5,0x79e8,0x79ea,0x0000,
-0x79ec,0x79ee,0x79f1,0x79f2,0x79f3,0x79f4,0x79f5,0x79f6,
-0x79f7,0x79f9,0x79fa,0x79fc,0x79fe,0x79ff,0x7a01,0x7a04,
-0x7a05,0x7a07,0x7a08,0x7a09,0x7a0a,0x7a0c,0x7a0f,0x7a10,
-0x7a11,0x7a12,0x7a13,0x7a15,0x7a16,0x7a18,0x7a19,0x7a1b,
-0x7a1c,0x4e01,0x76ef,0x53ee,0x9489,0x9876,0x9f0e,0x952d,
-0x5b9a,0x8ba2,0x4e22,0x4e1c,0x51ac,0x8463,0x61c2,0x52a8,
-0x680b,0x4f97,0x606b,0x51bb,0x6d1e,0x515c,0x6296,0x6597,
-0x9661,0x8c46,0x9017,0x75d8,0x90fd,0x7763,0x6bd2,0x728a,
-0x72ec,0x8bfb,0x5835,0x7779,0x8d4c,0x675c,0x9540,0x809a,
-0x5ea6,0x6e21,0x5992,0x7aef,0x77ed,0x953b,0x6bb5,0x65ad,
-0x7f0e,0x5806,0x5151,0x961f,0x5bf9,0x58a9,0x5428,0x8e72,
-0x6566,0x987f,0x56e4,0x949d,0x76fe,0x9041,0x6387,0x54c6,
-0x591a,0x593a,0x579b,0x8eb2,0x6735,0x8dfa,0x8235,0x5241,
-0x60f0,0x5815,0x86fe,0x5ce8,0x9e45,0x4fc4,0x989d,0x8bb9,
-0x5a25,0x6076,0x5384,0x627c,0x904f,0x9102,0x997f,0x6069,
-0x800c,0x513f,0x8033,0x5c14,0x9975,0x6d31,0x4e8c,0x0000,
-/* 0xb700 */
-0x7a1d,0x7a1f,0x7a21,0x7a22,0x7a24,0x7a25,0x7a26,0x7a27,
-0x7a28,0x7a29,0x7a2a,0x7a2b,0x7a2c,0x7a2d,0x7a2e,0x7a2f,
-0x7a30,0x7a31,0x7a32,0x7a34,0x7a35,0x7a36,0x7a38,0x7a3a,
-0x7a3e,0x7a40,0x7a41,0x7a42,0x7a43,0x7a44,0x7a45,0x7a47,
-0x7a48,0x7a49,0x7a4a,0x7a4b,0x7a4c,0x7a4d,0x7a4e,0x7a4f,
-0x7a50,0x7a52,0x7a53,0x7a54,0x7a55,0x7a56,0x7a58,0x7a59,
-0x7a5a,0x7a5b,0x7a5c,0x7a5d,0x7a5e,0x7a5f,0x7a60,0x7a61,
-0x7a62,0x7a63,0x7a64,0x7a65,0x7a66,0x7a67,0x7a68,0x0000,
-0x7a69,0x7a6a,0x7a6b,0x7a6c,0x7a6d,0x7a6e,0x7a6f,0x7a71,
-0x7a72,0x7a73,0x7a75,0x7a7b,0x7a7c,0x7a7d,0x7a7e,0x7a82,
-0x7a85,0x7a87,0x7a89,0x7a8a,0x7a8b,0x7a8c,0x7a8e,0x7a8f,
-0x7a90,0x7a93,0x7a94,0x7a99,0x7a9a,0x7a9b,0x7a9e,0x7aa1,
-0x7aa2,0x8d30,0x53d1,0x7f5a,0x7b4f,0x4f10,0x4e4f,0x9600,
-0x6cd5,0x73d0,0x85e9,0x5e06,0x756a,0x7ffb,0x6a0a,0x77fe,
-0x9492,0x7e41,0x51e1,0x70e6,0x53cd,0x8fd4,0x8303,0x8d29,
-0x72af,0x996d,0x6cdb,0x574a,0x82b3,0x65b9,0x80aa,0x623f,
-0x9632,0x59a8,0x4eff,0x8bbf,0x7eba,0x653e,0x83f2,0x975e,
-0x5561,0x98de,0x80a5,0x532a,0x8bfd,0x5420,0x80ba,0x5e9f,
-0x6cb8,0x8d39,0x82ac,0x915a,0x5429,0x6c1b,0x5206,0x7eb7,
-0x575f,0x711a,0x6c7e,0x7c89,0x594b,0x4efd,0x5fff,0x6124,
-0x7caa,0x4e30,0x5c01,0x67ab,0x8702,0x5cf0,0x950b,0x98ce,
-0x75af,0x70fd,0x9022,0x51af,0x7f1d,0x8bbd,0x5949,0x51e4,
-0x4f5b,0x5426,0x592b,0x6577,0x80a4,0x5b75,0x6276,0x62c2,
-0x8f90,0x5e45,0x6c1f,0x7b26,0x4f0f,0x4fd8,0x670d,0x0000,
-/* 0xb800 */
-0x7aa3,0x7aa4,0x7aa7,0x7aa9,0x7aaa,0x7aab,0x7aae,0x7aaf,
-0x7ab0,0x7ab1,0x7ab2,0x7ab4,0x7ab5,0x7ab6,0x7ab7,0x7ab8,
-0x7ab9,0x7aba,0x7abb,0x7abc,0x7abd,0x7abe,0x7ac0,0x7ac1,
-0x7ac2,0x7ac3,0x7ac4,0x7ac5,0x7ac6,0x7ac7,0x7ac8,0x7ac9,
-0x7aca,0x7acc,0x7acd,0x7ace,0x7acf,0x7ad0,0x7ad1,0x7ad2,
-0x7ad3,0x7ad4,0x7ad5,0x7ad7,0x7ad8,0x7ada,0x7adb,0x7adc,
-0x7add,0x7ae1,0x7ae2,0x7ae4,0x7ae7,0x7ae8,0x7ae9,0x7aea,
-0x7aeb,0x7aec,0x7aee,0x7af0,0x7af1,0x7af2,0x7af3,0x0000,
-0x7af4,0x7af5,0x7af6,0x7af7,0x7af8,0x7afb,0x7afc,0x7afe,
-0x7b00,0x7b01,0x7b02,0x7b05,0x7b07,0x7b09,0x7b0c,0x7b0d,
-0x7b0e,0x7b10,0x7b12,0x7b13,0x7b16,0x7b17,0x7b18,0x7b1a,
-0x7b1c,0x7b1d,0x7b1f,0x7b21,0x7b22,0x7b23,0x7b27,0x7b29,
-0x7b2d,0x6d6e,0x6daa,0x798f,0x88b1,0x5f17,0x752b,0x629a,
-0x8f85,0x4fef,0x91dc,0x65a7,0x812f,0x8151,0x5e9c,0x8150,
-0x8d74,0x526f,0x8986,0x8d4b,0x590d,0x5085,0x4ed8,0x961c,
-0x7236,0x8179,0x8d1f,0x5bcc,0x8ba3,0x9644,0x5987,0x7f1a,
-0x5490,0x5676,0x560e,0x8be5,0x6539,0x6982,0x9499,0x76d6,
-0x6e89,0x5e72,0x7518,0x6746,0x67d1,0x7aff,0x809d,0x8d76,
-0x611f,0x79c6,0x6562,0x8d63,0x5188,0x521a,0x94a2,0x7f38,
-0x809b,0x7eb2,0x5c97,0x6e2f,0x6760,0x7bd9,0x768b,0x9ad8,
-0x818f,0x7f94,0x7cd5,0x641e,0x9550,0x7a3f,0x544a,0x54e5,
-0x6b4c,0x6401,0x6208,0x9e3d,0x80f3,0x7599,0x5272,0x9769,
-0x845b,0x683c,0x86e4,0x9601,0x9694,0x94ec,0x4e2a,0x5404,
-0x7ed9,0x6839,0x8ddf,0x8015,0x66f4,0x5e9a,0x7fb9,0x0000,
-/* 0xb900 */
-0x7b2f,0x7b30,0x7b32,0x7b34,0x7b35,0x7b36,0x7b37,0x7b39,
-0x7b3b,0x7b3d,0x7b3f,0x7b40,0x7b41,0x7b42,0x7b43,0x7b44,
-0x7b46,0x7b48,0x7b4a,0x7b4d,0x7b4e,0x7b53,0x7b55,0x7b57,
-0x7b59,0x7b5c,0x7b5e,0x7b5f,0x7b61,0x7b63,0x7b64,0x7b65,
-0x7b66,0x7b67,0x7b68,0x7b69,0x7b6a,0x7b6b,0x7b6c,0x7b6d,
-0x7b6f,0x7b70,0x7b73,0x7b74,0x7b76,0x7b78,0x7b7a,0x7b7c,
-0x7b7d,0x7b7f,0x7b81,0x7b82,0x7b83,0x7b84,0x7b86,0x7b87,
-0x7b88,0x7b89,0x7b8a,0x7b8b,0x7b8c,0x7b8e,0x7b8f,0x0000,
-0x7b91,0x7b92,0x7b93,0x7b96,0x7b98,0x7b99,0x7b9a,0x7b9b,
-0x7b9e,0x7b9f,0x7ba0,0x7ba3,0x7ba4,0x7ba5,0x7bae,0x7baf,
-0x7bb0,0x7bb2,0x7bb3,0x7bb5,0x7bb6,0x7bb7,0x7bb9,0x7bba,
-0x7bbb,0x7bbc,0x7bbd,0x7bbe,0x7bbf,0x7bc0,0x7bc2,0x7bc3,
-0x7bc4,0x57c2,0x803f,0x6897,0x5de5,0x653b,0x529f,0x606d,
-0x9f9a,0x4f9b,0x8eac,0x516c,0x5bab,0x5f13,0x5de9,0x6c5e,
-0x62f1,0x8d21,0x5171,0x94a9,0x52fe,0x6c9f,0x82df,0x72d7,
-0x57a2,0x6784,0x8d2d,0x591f,0x8f9c,0x83c7,0x5495,0x7b8d,
-0x4f30,0x6cbd,0x5b64,0x59d1,0x9f13,0x53e4,0x86ca,0x9aa8,
-0x8c37,0x80a1,0x6545,0x987e,0x56fa,0x96c7,0x522e,0x74dc,
-0x5250,0x5be1,0x6302,0x8902,0x4e56,0x62d0,0x602a,0x68fa,
-0x5173,0x5b98,0x51a0,0x89c2,0x7ba1,0x9986,0x7f50,0x60ef,
-0x704c,0x8d2f,0x5149,0x5e7f,0x901b,0x7470,0x89c4,0x572d,
-0x7845,0x5f52,0x9f9f,0x95fa,0x8f68,0x9b3c,0x8be1,0x7678,
-0x6842,0x67dc,0x8dea,0x8d35,0x523d,0x8f8a,0x6eda,0x68cd,
-0x9505,0x90ed,0x56fd,0x679c,0x88f9,0x8fc7,0x54c8,0x0000,
-/* 0xba00 */
-0x7bc5,0x7bc8,0x7bc9,0x7bca,0x7bcb,0x7bcd,0x7bce,0x7bcf,
-0x7bd0,0x7bd2,0x7bd4,0x7bd5,0x7bd6,0x7bd7,0x7bd8,0x7bdb,
-0x7bdc,0x7bde,0x7bdf,0x7be0,0x7be2,0x7be3,0x7be4,0x7be7,
-0x7be8,0x7be9,0x7beb,0x7bec,0x7bed,0x7bef,0x7bf0,0x7bf2,
-0x7bf3,0x7bf4,0x7bf5,0x7bf6,0x7bf8,0x7bf9,0x7bfa,0x7bfb,
-0x7bfd,0x7bff,0x7c00,0x7c01,0x7c02,0x7c03,0x7c04,0x7c05,
-0x7c06,0x7c08,0x7c09,0x7c0a,0x7c0d,0x7c0e,0x7c10,0x7c11,
-0x7c12,0x7c13,0x7c14,0x7c15,0x7c17,0x7c18,0x7c19,0x0000,
-0x7c1a,0x7c1b,0x7c1c,0x7c1d,0x7c1e,0x7c20,0x7c21,0x7c22,
-0x7c23,0x7c24,0x7c25,0x7c28,0x7c29,0x7c2b,0x7c2c,0x7c2d,
-0x7c2e,0x7c2f,0x7c30,0x7c31,0x7c32,0x7c33,0x7c34,0x7c35,
-0x7c36,0x7c37,0x7c39,0x7c3a,0x7c3b,0x7c3c,0x7c3d,0x7c3e,
-0x7c42,0x9ab8,0x5b69,0x6d77,0x6c26,0x4ea5,0x5bb3,0x9a87,
-0x9163,0x61a8,0x90af,0x97e9,0x542b,0x6db5,0x5bd2,0x51fd,
-0x558a,0x7f55,0x7ff0,0x64bc,0x634d,0x65f1,0x61be,0x608d,
-0x710a,0x6c57,0x6c49,0x592f,0x676d,0x822a,0x58d5,0x568e,
-0x8c6a,0x6beb,0x90dd,0x597d,0x8017,0x53f7,0x6d69,0x5475,
-0x559d,0x8377,0x83cf,0x6838,0x79be,0x548c,0x4f55,0x5408,
-0x76d2,0x8c89,0x9602,0x6cb3,0x6db8,0x8d6b,0x8910,0x9e64,
-0x8d3a,0x563f,0x9ed1,0x75d5,0x5f88,0x72e0,0x6068,0x54fc,
-0x4ea8,0x6a2a,0x8861,0x6052,0x8f70,0x54c4,0x70d8,0x8679,
-0x9e3f,0x6d2a,0x5b8f,0x5f18,0x7ea2,0x5589,0x4faf,0x7334,
-0x543c,0x539a,0x5019,0x540e,0x547c,0x4e4e,0x5ffd,0x745a,
-0x58f6,0x846b,0x80e1,0x8774,0x72d0,0x7cca,0x6e56,0x0000,
-/* 0xbb00 */
-0x7c43,0x7c44,0x7c45,0x7c46,0x7c47,0x7c48,0x7c49,0x7c4a,
-0x7c4b,0x7c4c,0x7c4e,0x7c4f,0x7c50,0x7c51,0x7c52,0x7c53,
-0x7c54,0x7c55,0x7c56,0x7c57,0x7c58,0x7c59,0x7c5a,0x7c5b,
-0x7c5c,0x7c5d,0x7c5e,0x7c5f,0x7c60,0x7c61,0x7c62,0x7c63,
-0x7c64,0x7c65,0x7c66,0x7c67,0x7c68,0x7c69,0x7c6a,0x7c6b,
-0x7c6c,0x7c6d,0x7c6e,0x7c6f,0x7c70,0x7c71,0x7c72,0x7c75,
-0x7c76,0x7c77,0x7c78,0x7c79,0x7c7a,0x7c7e,0x7c7f,0x7c80,
-0x7c81,0x7c82,0x7c83,0x7c84,0x7c85,0x7c86,0x7c87,0x0000,
-0x7c88,0x7c8a,0x7c8b,0x7c8c,0x7c8d,0x7c8e,0x7c8f,0x7c90,
-0x7c93,0x7c94,0x7c96,0x7c99,0x7c9a,0x7c9b,0x7ca0,0x7ca1,
-0x7ca3,0x7ca6,0x7ca7,0x7ca8,0x7ca9,0x7cab,0x7cac,0x7cad,
-0x7caf,0x7cb0,0x7cb4,0x7cb5,0x7cb6,0x7cb7,0x7cb8,0x7cba,
-0x7cbb,0x5f27,0x864e,0x552c,0x62a4,0x4e92,0x6caa,0x6237,
-0x82b1,0x54d7,0x534e,0x733e,0x6ed1,0x753b,0x5212,0x5316,
-0x8bdd,0x69d0,0x5f8a,0x6000,0x6dee,0x574f,0x6b22,0x73af,
-0x6853,0x8fd8,0x7f13,0x6362,0x60a3,0x5524,0x75ea,0x8c62,
-0x7115,0x6da3,0x5ba6,0x5e7b,0x8352,0x614c,0x9ec4,0x78fa,
-0x8757,0x7c27,0x7687,0x51f0,0x60f6,0x714c,0x6643,0x5e4c,
-0x604d,0x8c0e,0x7070,0x6325,0x8f89,0x5fbd,0x6062,0x86d4,
-0x56de,0x6bc1,0x6094,0x6167,0x5349,0x60e0,0x6666,0x8d3f,
-0x79fd,0x4f1a,0x70e9,0x6c47,0x8bb3,0x8bf2,0x7ed8,0x8364,
-0x660f,0x5a5a,0x9b42,0x6d51,0x6df7,0x8c41,0x6d3b,0x4f19,
-0x706b,0x83b7,0x6216,0x60d1,0x970d,0x8d27,0x7978,0x51fb,
-0x573e,0x57fa,0x673a,0x7578,0x7a3d,0x79ef,0x7b95,0x0000,
-/* 0xbc00 */
-0x7cbf,0x7cc0,0x7cc2,0x7cc3,0x7cc4,0x7cc6,0x7cc9,0x7ccb,
-0x7cce,0x7ccf,0x7cd0,0x7cd1,0x7cd2,0x7cd3,0x7cd4,0x7cd8,
-0x7cda,0x7cdb,0x7cdd,0x7cde,0x7ce1,0x7ce2,0x7ce3,0x7ce4,
-0x7ce5,0x7ce6,0x7ce7,0x7ce9,0x7cea,0x7ceb,0x7cec,0x7ced,
-0x7cee,0x7cf0,0x7cf1,0x7cf2,0x7cf3,0x7cf4,0x7cf5,0x7cf6,
-0x7cf7,0x7cf9,0x7cfa,0x7cfc,0x7cfd,0x7cfe,0x7cff,0x7d00,
-0x7d01,0x7d02,0x7d03,0x7d04,0x7d05,0x7d06,0x7d07,0x7d08,
-0x7d09,0x7d0b,0x7d0c,0x7d0d,0x7d0e,0x7d0f,0x7d10,0x0000,
-0x7d11,0x7d12,0x7d13,0x7d14,0x7d15,0x7d16,0x7d17,0x7d18,
-0x7d19,0x7d1a,0x7d1b,0x7d1c,0x7d1d,0x7d1e,0x7d1f,0x7d21,
-0x7d23,0x7d24,0x7d25,0x7d26,0x7d28,0x7d29,0x7d2a,0x7d2c,
-0x7d2d,0x7d2e,0x7d30,0x7d31,0x7d32,0x7d33,0x7d34,0x7d35,
-0x7d36,0x808c,0x9965,0x8ff9,0x6fc0,0x8ba5,0x9e21,0x59ec,
-0x7ee9,0x7f09,0x5409,0x6781,0x68d8,0x8f91,0x7c4d,0x96c6,
-0x53ca,0x6025,0x75be,0x6c72,0x5373,0x5ac9,0x7ea7,0x6324,
-0x51e0,0x810a,0x5df1,0x84df,0x6280,0x5180,0x5b63,0x4f0e,
-0x796d,0x5242,0x60b8,0x6d4e,0x5bc4,0x5bc2,0x8ba1,0x8bb0,
-0x65e2,0x5fcc,0x9645,0x5993,0x7ee7,0x7eaa,0x5609,0x67b7,
-0x5939,0x4f73,0x5bb6,0x52a0,0x835a,0x988a,0x8d3e,0x7532,
-0x94be,0x5047,0x7a3c,0x4ef7,0x67b6,0x9a7e,0x5ac1,0x6b7c,
-0x76d1,0x575a,0x5c16,0x7b3a,0x95f4,0x714e,0x517c,0x80a9,
-0x8270,0x5978,0x7f04,0x8327,0x68c0,0x67ec,0x78b1,0x7877,
-0x62e3,0x6361,0x7b80,0x4fed,0x526a,0x51cf,0x8350,0x69db,
-0x9274,0x8df5,0x8d31,0x89c1,0x952e,0x7bad,0x4ef6,0x0000,
-/* 0xbd00 */
-0x7d37,0x7d38,0x7d39,0x7d3a,0x7d3b,0x7d3c,0x7d3d,0x7d3e,
-0x7d3f,0x7d40,0x7d41,0x7d42,0x7d43,0x7d44,0x7d45,0x7d46,
-0x7d47,0x7d48,0x7d49,0x7d4a,0x7d4b,0x7d4c,0x7d4d,0x7d4e,
-0x7d4f,0x7d50,0x7d51,0x7d52,0x7d53,0x7d54,0x7d55,0x7d56,
-0x7d57,0x7d58,0x7d59,0x7d5a,0x7d5b,0x7d5c,0x7d5d,0x7d5e,
-0x7d5f,0x7d60,0x7d61,0x7d62,0x7d63,0x7d64,0x7d65,0x7d66,
-0x7d67,0x7d68,0x7d69,0x7d6a,0x7d6b,0x7d6c,0x7d6d,0x7d6f,
-0x7d70,0x7d71,0x7d72,0x7d73,0x7d74,0x7d75,0x7d76,0x0000,
-0x7d78,0x7d79,0x7d7a,0x7d7b,0x7d7c,0x7d7d,0x7d7e,0x7d7f,
-0x7d80,0x7d81,0x7d82,0x7d83,0x7d84,0x7d85,0x7d86,0x7d87,
-0x7d88,0x7d89,0x7d8a,0x7d8b,0x7d8c,0x7d8d,0x7d8e,0x7d8f,
-0x7d90,0x7d91,0x7d92,0x7d93,0x7d94,0x7d95,0x7d96,0x7d97,
-0x7d98,0x5065,0x8230,0x5251,0x996f,0x6e10,0x6e85,0x6da7,
-0x5efa,0x50f5,0x59dc,0x5c06,0x6d46,0x6c5f,0x7586,0x848b,
-0x6868,0x5956,0x8bb2,0x5320,0x9171,0x964d,0x8549,0x6912,
-0x7901,0x7126,0x80f6,0x4ea4,0x90ca,0x6d47,0x9a84,0x5a07,
-0x56bc,0x6405,0x94f0,0x77eb,0x4fa5,0x811a,0x72e1,0x89d2,
-0x997a,0x7f34,0x7ede,0x527f,0x6559,0x9175,0x8f7f,0x8f83,
-0x53eb,0x7a96,0x63ed,0x63a5,0x7686,0x79f8,0x8857,0x9636,
-0x622a,0x52ab,0x8282,0x6854,0x6770,0x6377,0x776b,0x7aed,
-0x6d01,0x7ed3,0x89e3,0x59d0,0x6212,0x85c9,0x82a5,0x754c,
-0x501f,0x4ecb,0x75a5,0x8beb,0x5c4a,0x5dfe,0x7b4b,0x65a4,
-0x91d1,0x4eca,0x6d25,0x895f,0x7d27,0x9526,0x4ec5,0x8c28,
-0x8fdb,0x9773,0x664b,0x7981,0x8fd1,0x70ec,0x6d78,0x0000,
-/* 0xbe00 */
-0x7d99,0x7d9a,0x7d9b,0x7d9c,0x7d9d,0x7d9e,0x7d9f,0x7da0,
-0x7da1,0x7da2,0x7da3,0x7da4,0x7da5,0x7da7,0x7da8,0x7da9,
-0x7daa,0x7dab,0x7dac,0x7dad,0x7daf,0x7db0,0x7db1,0x7db2,
-0x7db3,0x7db4,0x7db5,0x7db6,0x7db7,0x7db8,0x7db9,0x7dba,
-0x7dbb,0x7dbc,0x7dbd,0x7dbe,0x7dbf,0x7dc0,0x7dc1,0x7dc2,
-0x7dc3,0x7dc4,0x7dc5,0x7dc6,0x7dc7,0x7dc8,0x7dc9,0x7dca,
-0x7dcb,0x7dcc,0x7dcd,0x7dce,0x7dcf,0x7dd0,0x7dd1,0x7dd2,
-0x7dd3,0x7dd4,0x7dd5,0x7dd6,0x7dd7,0x7dd8,0x7dd9,0x0000,
-0x7dda,0x7ddb,0x7ddc,0x7ddd,0x7dde,0x7ddf,0x7de0,0x7de1,
-0x7de2,0x7de3,0x7de4,0x7de5,0x7de6,0x7de7,0x7de8,0x7de9,
-0x7dea,0x7deb,0x7dec,0x7ded,0x7dee,0x7def,0x7df0,0x7df1,
-0x7df2,0x7df3,0x7df4,0x7df5,0x7df6,0x7df7,0x7df8,0x7df9,
-0x7dfa,0x5c3d,0x52b2,0x8346,0x5162,0x830e,0x775b,0x6676,
-0x9cb8,0x4eac,0x60ca,0x7cbe,0x7cb3,0x7ecf,0x4e95,0x8b66,
-0x666f,0x9888,0x9759,0x5883,0x656c,0x955c,0x5f84,0x75c9,
-0x9756,0x7adf,0x7ade,0x51c0,0x70af,0x7a98,0x63ea,0x7a76,
-0x7ea0,0x7396,0x97ed,0x4e45,0x7078,0x4e5d,0x9152,0x53a9,
-0x6551,0x65e7,0x81fc,0x8205,0x548e,0x5c31,0x759a,0x97a0,
-0x62d8,0x72d9,0x75bd,0x5c45,0x9a79,0x83ca,0x5c40,0x5480,
-0x77e9,0x4e3e,0x6cae,0x805a,0x62d2,0x636e,0x5de8,0x5177,
-0x8ddd,0x8e1e,0x952f,0x4ff1,0x53e5,0x60e7,0x70ac,0x5267,
-0x6350,0x9e43,0x5a1f,0x5026,0x7737,0x5377,0x7ee2,0x6485,
-0x652b,0x6289,0x6398,0x5014,0x7235,0x89c9,0x51b3,0x8bc0,
-0x7edd,0x5747,0x83cc,0x94a7,0x519b,0x541b,0x5cfb,0x0000,
-/* 0xbf00 */
-0x7dfb,0x7dfc,0x7dfd,0x7dfe,0x7dff,0x7e00,0x7e01,0x7e02,
-0x7e03,0x7e04,0x7e05,0x7e06,0x7e07,0x7e08,0x7e09,0x7e0a,
-0x7e0b,0x7e0c,0x7e0d,0x7e0e,0x7e0f,0x7e10,0x7e11,0x7e12,
-0x7e13,0x7e14,0x7e15,0x7e16,0x7e17,0x7e18,0x7e19,0x7e1a,
-0x7e1b,0x7e1c,0x7e1d,0x7e1e,0x7e1f,0x7e20,0x7e21,0x7e22,
-0x7e23,0x7e24,0x7e25,0x7e26,0x7e27,0x7e28,0x7e29,0x7e2a,
-0x7e2b,0x7e2c,0x7e2d,0x7e2e,0x7e2f,0x7e30,0x7e31,0x7e32,
-0x7e33,0x7e34,0x7e35,0x7e36,0x7e37,0x7e38,0x7e39,0x0000,
-0x7e3a,0x7e3c,0x7e3d,0x7e3e,0x7e3f,0x7e40,0x7e42,0x7e43,
-0x7e44,0x7e45,0x7e46,0x7e48,0x7e49,0x7e4a,0x7e4b,0x7e4c,
-0x7e4d,0x7e4e,0x7e4f,0x7e50,0x7e51,0x7e52,0x7e53,0x7e54,
-0x7e55,0x7e56,0x7e57,0x7e58,0x7e59,0x7e5a,0x7e5b,0x7e5c,
-0x7e5d,0x4fca,0x7ae3,0x6d5a,0x90e1,0x9a8f,0x5580,0x5496,
-0x5361,0x54af,0x5f00,0x63e9,0x6977,0x51ef,0x6168,0x520a,
-0x582a,0x52d8,0x574e,0x780d,0x770b,0x5eb7,0x6177,0x7ce0,
-0x625b,0x6297,0x4ea2,0x7095,0x8003,0x62f7,0x70e4,0x9760,
-0x5777,0x82db,0x67ef,0x68f5,0x78d5,0x9897,0x79d1,0x58f3,
-0x54b3,0x53ef,0x6e34,0x514b,0x523b,0x5ba2,0x8bfe,0x80af,
-0x5543,0x57a6,0x6073,0x5751,0x542d,0x7a7a,0x6050,0x5b54,
-0x63a7,0x62a0,0x53e3,0x6263,0x5bc7,0x67af,0x54ed,0x7a9f,
-0x82e6,0x9177,0x5e93,0x88e4,0x5938,0x57ae,0x630e,0x8de8,
-0x80ef,0x5757,0x7b77,0x4fa9,0x5feb,0x5bbd,0x6b3e,0x5321,
-0x7b50,0x72c2,0x6846,0x77ff,0x7736,0x65f7,0x51b5,0x4e8f,
-0x76d4,0x5cbf,0x7aa5,0x8475,0x594e,0x9b41,0x5080,0x0000,
-/* 0xc000 */
-0x7e5e,0x7e5f,0x7e60,0x7e61,0x7e62,0x7e63,0x7e64,0x7e65,
-0x7e66,0x7e67,0x7e68,0x7e69,0x7e6a,0x7e6b,0x7e6c,0x7e6d,
-0x7e6e,0x7e6f,0x7e70,0x7e71,0x7e72,0x7e73,0x7e74,0x7e75,
-0x7e76,0x7e77,0x7e78,0x7e79,0x7e7a,0x7e7b,0x7e7c,0x7e7d,
-0x7e7e,0x7e7f,0x7e80,0x7e81,0x7e83,0x7e84,0x7e85,0x7e86,
-0x7e87,0x7e88,0x7e89,0x7e8a,0x7e8b,0x7e8c,0x7e8d,0x7e8e,
-0x7e8f,0x7e90,0x7e91,0x7e92,0x7e93,0x7e94,0x7e95,0x7e96,
-0x7e97,0x7e98,0x7e99,0x7e9a,0x7e9c,0x7e9d,0x7e9e,0x0000,
-0x7eae,0x7eb4,0x7ebb,0x7ebc,0x7ed6,0x7ee4,0x7eec,0x7ef9,
-0x7f0a,0x7f10,0x7f1e,0x7f37,0x7f39,0x7f3b,0x7f3c,0x7f3d,
-0x7f3e,0x7f3f,0x7f40,0x7f41,0x7f43,0x7f46,0x7f47,0x7f48,
-0x7f49,0x7f4a,0x7f4b,0x7f4c,0x7f4d,0x7f4e,0x7f4f,0x7f52,
-0x7f53,0x9988,0x6127,0x6e83,0x5764,0x6606,0x6346,0x56f0,
-0x62ec,0x6269,0x5ed3,0x9614,0x5783,0x62c9,0x5587,0x8721,
-0x814a,0x8fa3,0x5566,0x83b1,0x6765,0x8d56,0x84dd,0x5a6a,
-0x680f,0x62e6,0x7bee,0x9611,0x5170,0x6f9c,0x8c30,0x63fd,
-0x89c8,0x61d2,0x7f06,0x70c2,0x6ee5,0x7405,0x6994,0x72fc,
-0x5eca,0x90ce,0x6717,0x6d6a,0x635e,0x52b3,0x7262,0x8001,
-0x4f6c,0x59e5,0x916a,0x70d9,0x6d9d,0x52d2,0x4e50,0x96f7,
-0x956d,0x857e,0x78ca,0x7d2f,0x5121,0x5792,0x64c2,0x808b,
-0x7c7b,0x6cea,0x68f1,0x695e,0x51b7,0x5398,0x68a8,0x7281,
-0x9ece,0x7bf1,0x72f8,0x79bb,0x6f13,0x7406,0x674e,0x91cc,
-0x9ca4,0x793c,0x8389,0x8354,0x540f,0x6817,0x4e3d,0x5389,
-0x52b1,0x783e,0x5386,0x5229,0x5088,0x4f8b,0x4fd0,0x0000,
-/* 0xc100 */
-0x7f56,0x7f59,0x7f5b,0x7f5c,0x7f5d,0x7f5e,0x7f60,0x7f63,
-0x7f64,0x7f65,0x7f66,0x7f67,0x7f6b,0x7f6c,0x7f6d,0x7f6f,
-0x7f70,0x7f73,0x7f75,0x7f76,0x7f77,0x7f78,0x7f7a,0x7f7b,
-0x7f7c,0x7f7d,0x7f7f,0x7f80,0x7f82,0x7f83,0x7f84,0x7f85,
-0x7f86,0x7f87,0x7f88,0x7f89,0x7f8b,0x7f8d,0x7f8f,0x7f90,
-0x7f91,0x7f92,0x7f93,0x7f95,0x7f96,0x7f97,0x7f98,0x7f99,
-0x7f9b,0x7f9c,0x7fa0,0x7fa2,0x7fa3,0x7fa5,0x7fa6,0x7fa8,
-0x7fa9,0x7faa,0x7fab,0x7fac,0x7fad,0x7fae,0x7fb1,0x0000,
-0x7fb3,0x7fb4,0x7fb5,0x7fb6,0x7fb7,0x7fba,0x7fbb,0x7fbe,
-0x7fc0,0x7fc2,0x7fc3,0x7fc4,0x7fc6,0x7fc7,0x7fc8,0x7fc9,
-0x7fcb,0x7fcd,0x7fcf,0x7fd0,0x7fd1,0x7fd2,0x7fd3,0x7fd6,
-0x7fd7,0x7fd9,0x7fda,0x7fdb,0x7fdc,0x7fdd,0x7fde,0x7fe2,
-0x7fe3,0x75e2,0x7acb,0x7c92,0x6ca5,0x96b6,0x529b,0x7483,
-0x54e9,0x4fe9,0x8054,0x83b2,0x8fde,0x9570,0x5ec9,0x601c,
-0x6d9f,0x5e18,0x655b,0x8138,0x94fe,0x604b,0x70bc,0x7ec3,
-0x7cae,0x51c9,0x6881,0x7cb1,0x826f,0x4e24,0x8f86,0x91cf,
-0x667e,0x4eae,0x8c05,0x64a9,0x804a,0x50da,0x7597,0x71ce,
-0x5be5,0x8fbd,0x6f66,0x4e86,0x6482,0x9563,0x5ed6,0x6599,
-0x5217,0x88c2,0x70c8,0x52a3,0x730e,0x7433,0x6797,0x78f7,
-0x9716,0x4e34,0x90bb,0x9cde,0x6dcb,0x51db,0x8d41,0x541d,
-0x62ce,0x73b2,0x83f1,0x96f6,0x9f84,0x94c3,0x4f36,0x7f9a,
-0x51cc,0x7075,0x9675,0x5cad,0x9886,0x53e6,0x4ee4,0x6e9c,
-0x7409,0x69b4,0x786b,0x998f,0x7559,0x5218,0x7624,0x6d41,
-0x67f3,0x516d,0x9f99,0x804b,0x5499,0x7b3c,0x7abf,0x0000,
-/* 0xc200 */
-0x7fe4,0x7fe7,0x7fe8,0x7fea,0x7feb,0x7fec,0x7fed,0x7fef,
-0x7ff2,0x7ff4,0x7ff5,0x7ff6,0x7ff7,0x7ff8,0x7ff9,0x7ffa,
-0x7ffd,0x7ffe,0x7fff,0x8002,0x8007,0x8008,0x8009,0x800a,
-0x800e,0x800f,0x8011,0x8013,0x801a,0x801b,0x801d,0x801e,
-0x801f,0x8021,0x8023,0x8024,0x802b,0x802c,0x802d,0x802e,
-0x802f,0x8030,0x8032,0x8034,0x8039,0x803a,0x803c,0x803e,
-0x8040,0x8041,0x8044,0x8045,0x8047,0x8048,0x8049,0x804e,
-0x804f,0x8050,0x8051,0x8053,0x8055,0x8056,0x8057,0x0000,
-0x8059,0x805b,0x805c,0x805d,0x805e,0x805f,0x8060,0x8061,
-0x8062,0x8063,0x8064,0x8065,0x8066,0x8067,0x8068,0x806b,
-0x806c,0x806d,0x806e,0x806f,0x8070,0x8072,0x8073,0x8074,
-0x8075,0x8076,0x8077,0x8078,0x8079,0x807a,0x807b,0x807c,
-0x807d,0x9686,0x5784,0x62e2,0x9647,0x697c,0x5a04,0x6402,
-0x7bd3,0x6f0f,0x964b,0x82a6,0x5362,0x9885,0x5e90,0x7089,
-0x63b3,0x5364,0x864f,0x9c81,0x9e93,0x788c,0x9732,0x8def,
-0x8d42,0x9e7f,0x6f5e,0x7984,0x5f55,0x9646,0x622e,0x9a74,
-0x5415,0x94dd,0x4fa3,0x65c5,0x5c65,0x5c61,0x7f15,0x8651,
-0x6c2f,0x5f8b,0x7387,0x6ee4,0x7eff,0x5ce6,0x631b,0x5b6a,
-0x6ee6,0x5375,0x4e71,0x63a0,0x7565,0x62a1,0x8f6e,0x4f26,
-0x4ed1,0x6ca6,0x7eb6,0x8bba,0x841d,0x87ba,0x7f57,0x903b,
-0x9523,0x7ba9,0x9aa1,0x88f8,0x843d,0x6d1b,0x9a86,0x7edc,
-0x5988,0x9ebb,0x739b,0x7801,0x8682,0x9a6c,0x9a82,0x561b,
-0x5417,0x57cb,0x4e70,0x9ea6,0x5356,0x8fc8,0x8109,0x7792,
-0x9992,0x86ee,0x6ee1,0x8513,0x66fc,0x6162,0x6f2b,0x0000,
-/* 0xc300 */
-0x807e,0x8081,0x8082,0x8085,0x8088,0x808a,0x808d,0x808e,
-0x808f,0x8090,0x8091,0x8092,0x8094,0x8095,0x8097,0x8099,
-0x809e,0x80a3,0x80a6,0x80a7,0x80a8,0x80ac,0x80b0,0x80b3,
-0x80b5,0x80b6,0x80b8,0x80b9,0x80bb,0x80c5,0x80c7,0x80c8,
-0x80c9,0x80ca,0x80cb,0x80cf,0x80d0,0x80d1,0x80d2,0x80d3,
-0x80d4,0x80d5,0x80d8,0x80df,0x80e0,0x80e2,0x80e3,0x80e6,
-0x80ee,0x80f5,0x80f7,0x80f9,0x80fb,0x80fe,0x80ff,0x8100,
-0x8101,0x8103,0x8104,0x8105,0x8107,0x8108,0x810b,0x0000,
-0x810c,0x8115,0x8117,0x8119,0x811b,0x811c,0x811d,0x811f,
-0x8120,0x8121,0x8122,0x8123,0x8124,0x8125,0x8126,0x8127,
-0x8128,0x8129,0x812a,0x812b,0x812d,0x812e,0x8130,0x8133,
-0x8134,0x8135,0x8137,0x8139,0x813a,0x813b,0x813c,0x813d,
-0x813f,0x8c29,0x8292,0x832b,0x76f2,0x6c13,0x5fd9,0x83bd,
-0x732b,0x8305,0x951a,0x6bdb,0x77db,0x94c6,0x536f,0x8302,
-0x5192,0x5e3d,0x8c8c,0x8d38,0x4e48,0x73ab,0x679a,0x6885,
-0x9176,0x9709,0x7164,0x6ca1,0x7709,0x5a92,0x9541,0x6bcf,
-0x7f8e,0x6627,0x5bd0,0x59b9,0x5a9a,0x95e8,0x95f7,0x4eec,
-0x840c,0x8499,0x6aac,0x76df,0x9530,0x731b,0x68a6,0x5b5f,
-0x772f,0x919a,0x9761,0x7cdc,0x8ff7,0x8c1c,0x5f25,0x7c73,
-0x79d8,0x89c5,0x6ccc,0x871c,0x5bc6,0x5e42,0x68c9,0x7720,
-0x7ef5,0x5195,0x514d,0x52c9,0x5a29,0x7f05,0x9762,0x82d7,
-0x63cf,0x7784,0x85d0,0x79d2,0x6e3a,0x5e99,0x5999,0x8511,
-0x706d,0x6c11,0x62bf,0x76bf,0x654f,0x60af,0x95fd,0x660e,
-0x879f,0x9e23,0x94ed,0x540d,0x547d,0x8c2c,0x6478,0x0000,
-/* 0xc400 */
-0x8140,0x8141,0x8142,0x8143,0x8144,0x8145,0x8147,0x8149,
-0x814d,0x814e,0x814f,0x8152,0x8156,0x8157,0x8158,0x815b,
-0x815c,0x815d,0x815e,0x815f,0x8161,0x8162,0x8163,0x8164,
-0x8166,0x8168,0x816a,0x816b,0x816c,0x816f,0x8172,0x8173,
-0x8175,0x8176,0x8177,0x8178,0x8181,0x8183,0x8184,0x8185,
-0x8186,0x8187,0x8189,0x818b,0x818c,0x818d,0x818e,0x8190,
-0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8199,0x819a,
-0x819e,0x819f,0x81a0,0x81a1,0x81a2,0x81a4,0x81a5,0x0000,
-0x81a7,0x81a9,0x81ab,0x81ac,0x81ad,0x81ae,0x81af,0x81b0,
-0x81b1,0x81b2,0x81b4,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,
-0x81bc,0x81bd,0x81be,0x81bf,0x81c4,0x81c5,0x81c7,0x81c8,
-0x81c9,0x81cb,0x81cd,0x81ce,0x81cf,0x81d0,0x81d1,0x81d2,
-0x81d3,0x6479,0x8611,0x6a21,0x819c,0x78e8,0x6469,0x9b54,
-0x62b9,0x672b,0x83ab,0x58a8,0x9ed8,0x6cab,0x6f20,0x5bde,
-0x964c,0x8c0b,0x725f,0x67d0,0x62c7,0x7261,0x4ea9,0x59c6,
-0x6bcd,0x5893,0x66ae,0x5e55,0x52df,0x6155,0x6728,0x76ee,
-0x7766,0x7267,0x7a46,0x62ff,0x54ea,0x5450,0x94a0,0x90a3,
-0x5a1c,0x7eb3,0x6c16,0x4e43,0x5976,0x8010,0x5948,0x5357,
-0x7537,0x96be,0x56ca,0x6320,0x8111,0x607c,0x95f9,0x6dd6,
-0x5462,0x9981,0x5185,0x5ae9,0x80fd,0x59ae,0x9713,0x502a,
-0x6ce5,0x5c3c,0x62df,0x4f60,0x533f,0x817b,0x9006,0x6eba,
-0x852b,0x62c8,0x5e74,0x78be,0x64b5,0x637b,0x5ff5,0x5a18,
-0x917f,0x9e1f,0x5c3f,0x634f,0x8042,0x5b7d,0x556e,0x954a,
-0x954d,0x6d85,0x60a8,0x67e0,0x72de,0x51dd,0x5b81,0x0000,
-/* 0xc500 */
-0x81d4,0x81d5,0x81d6,0x81d7,0x81d8,0x81d9,0x81da,0x81db,
-0x81dc,0x81dd,0x81de,0x81df,0x81e0,0x81e1,0x81e2,0x81e4,
-0x81e5,0x81e6,0x81e8,0x81e9,0x81eb,0x81ee,0x81ef,0x81f0,
-0x81f1,0x81f2,0x81f5,0x81f6,0x81f7,0x81f8,0x81f9,0x81fa,
-0x81fd,0x81ff,0x8203,0x8207,0x8208,0x8209,0x820a,0x820b,
-0x820e,0x820f,0x8211,0x8213,0x8215,0x8216,0x8217,0x8218,
-0x8219,0x821a,0x821d,0x8220,0x8224,0x8225,0x8226,0x8227,
-0x8229,0x822e,0x8232,0x823a,0x823c,0x823d,0x823f,0x0000,
-0x8240,0x8241,0x8242,0x8243,0x8245,0x8246,0x8248,0x824a,
-0x824c,0x824d,0x824e,0x8250,0x8251,0x8252,0x8253,0x8254,
-0x8255,0x8256,0x8257,0x8259,0x825b,0x825c,0x825d,0x825e,
-0x8260,0x8261,0x8262,0x8263,0x8264,0x8265,0x8266,0x8267,
-0x8269,0x62e7,0x6cde,0x725b,0x626d,0x94ae,0x7ebd,0x8113,
-0x6d53,0x519c,0x5f04,0x5974,0x52aa,0x6012,0x5973,0x6696,
-0x8650,0x759f,0x632a,0x61e6,0x7cef,0x8bfa,0x54e6,0x6b27,
-0x9e25,0x6bb4,0x85d5,0x5455,0x5076,0x6ca4,0x556a,0x8db4,
-0x722c,0x5e15,0x6015,0x7436,0x62cd,0x6392,0x724c,0x5f98,
-0x6e43,0x6d3e,0x6500,0x6f58,0x76d8,0x78d0,0x76fc,0x7554,
-0x5224,0x53db,0x4e53,0x5e9e,0x65c1,0x802a,0x80d6,0x629b,
-0x5486,0x5228,0x70ae,0x888d,0x8dd1,0x6ce1,0x5478,0x80da,
-0x57f9,0x88f4,0x8d54,0x966a,0x914d,0x4f69,0x6c9b,0x55b7,
-0x76c6,0x7830,0x62a8,0x70f9,0x6f8e,0x5f6d,0x84ec,0x68da,
-0x787c,0x7bf7,0x81a8,0x670b,0x9e4f,0x6367,0x78b0,0x576f,
-0x7812,0x9739,0x6279,0x62ab,0x5288,0x7435,0x6bd7,0x0000,
-/* 0xc600 */
-0x826a,0x826b,0x826c,0x826d,0x8271,0x8275,0x8276,0x8277,
-0x8278,0x827b,0x827c,0x8280,0x8281,0x8283,0x8285,0x8286,
-0x8287,0x8289,0x828c,0x8290,0x8293,0x8294,0x8295,0x8296,
-0x829a,0x829b,0x829e,0x82a0,0x82a2,0x82a3,0x82a7,0x82b2,
-0x82b5,0x82b6,0x82ba,0x82bb,0x82bc,0x82bf,0x82c0,0x82c2,
-0x82c3,0x82c5,0x82c6,0x82c9,0x82d0,0x82d6,0x82d9,0x82da,
-0x82dd,0x82e2,0x82e7,0x82e8,0x82e9,0x82ea,0x82ec,0x82ed,
-0x82ee,0x82f0,0x82f2,0x82f3,0x82f5,0x82f6,0x82f8,0x0000,
-0x82fa,0x82fc,0x82fd,0x82fe,0x82ff,0x8300,0x830a,0x830b,
-0x830d,0x8310,0x8312,0x8313,0x8316,0x8318,0x8319,0x831d,
-0x831e,0x831f,0x8320,0x8321,0x8322,0x8323,0x8324,0x8325,
-0x8326,0x8329,0x832a,0x832e,0x8330,0x8332,0x8337,0x833b,
-0x833d,0x5564,0x813e,0x75b2,0x76ae,0x5339,0x75de,0x50fb,
-0x5c41,0x8b6c,0x7bc7,0x504f,0x7247,0x9a97,0x98d8,0x6f02,
-0x74e2,0x7968,0x6487,0x77a5,0x62fc,0x9891,0x8d2b,0x54c1,
-0x8058,0x4e52,0x576a,0x82f9,0x840d,0x5e73,0x51ed,0x74f6,
-0x8bc4,0x5c4f,0x5761,0x6cfc,0x9887,0x5a46,0x7834,0x9b44,
-0x8feb,0x7c95,0x5256,0x6251,0x94fa,0x4ec6,0x8386,0x8461,
-0x83e9,0x84b2,0x57d4,0x6734,0x5703,0x666e,0x6d66,0x8c31,
-0x66dd,0x7011,0x671f,0x6b3a,0x6816,0x621a,0x59bb,0x4e03,
-0x51c4,0x6f06,0x67d2,0x6c8f,0x5176,0x68cb,0x5947,0x6b67,
-0x7566,0x5d0e,0x8110,0x9f50,0x65d7,0x7948,0x7941,0x9a91,
-0x8d77,0x5c82,0x4e5e,0x4f01,0x542f,0x5951,0x780c,0x5668,
-0x6c14,0x8fc4,0x5f03,0x6c7d,0x6ce3,0x8bab,0x6390,0x0000,
-/* 0xc700 */
-0x833e,0x833f,0x8341,0x8342,0x8344,0x8345,0x8348,0x834a,
-0x834b,0x834c,0x834d,0x834e,0x8353,0x8355,0x8356,0x8357,
-0x8358,0x8359,0x835d,0x8362,0x8370,0x8371,0x8372,0x8373,
-0x8374,0x8375,0x8376,0x8379,0x837a,0x837e,0x837f,0x8380,
-0x8381,0x8382,0x8383,0x8384,0x8387,0x8388,0x838a,0x838b,
-0x838c,0x838d,0x838f,0x8390,0x8391,0x8394,0x8395,0x8396,
-0x8397,0x8399,0x839a,0x839d,0x839f,0x83a1,0x83a2,0x83a3,
-0x83a4,0x83a5,0x83a6,0x83a7,0x83ac,0x83ad,0x83ae,0x0000,
-0x83af,0x83b5,0x83bb,0x83be,0x83bf,0x83c2,0x83c3,0x83c4,
-0x83c6,0x83c8,0x83c9,0x83cb,0x83cd,0x83ce,0x83d0,0x83d1,
-0x83d2,0x83d3,0x83d5,0x83d7,0x83d9,0x83da,0x83db,0x83de,
-0x83e2,0x83e3,0x83e4,0x83e6,0x83e7,0x83e8,0x83eb,0x83ec,
-0x83ed,0x6070,0x6d3d,0x7275,0x6266,0x948e,0x94c5,0x5343,
-0x8fc1,0x7b7e,0x4edf,0x8c26,0x4e7e,0x9ed4,0x94b1,0x94b3,
-0x524d,0x6f5c,0x9063,0x6d45,0x8c34,0x5811,0x5d4c,0x6b20,
-0x6b49,0x67aa,0x545b,0x8154,0x7f8c,0x5899,0x8537,0x5f3a,
-0x62a2,0x6a47,0x9539,0x6572,0x6084,0x6865,0x77a7,0x4e54,
-0x4fa8,0x5de7,0x9798,0x64ac,0x7fd8,0x5ced,0x4fcf,0x7a8d,
-0x5207,0x8304,0x4e14,0x602f,0x7a83,0x94a6,0x4fb5,0x4eb2,
-0x79e6,0x7434,0x52e4,0x82b9,0x64d2,0x79bd,0x5bdd,0x6c81,
-0x9752,0x8f7b,0x6c22,0x503e,0x537f,0x6e05,0x64ce,0x6674,
-0x6c30,0x60c5,0x9877,0x8bf7,0x5e86,0x743c,0x7a77,0x79cb,
-0x4e18,0x90b1,0x7403,0x6c42,0x56da,0x914b,0x6cc5,0x8d8b,
-0x533a,0x86c6,0x66f2,0x8eaf,0x5c48,0x9a71,0x6e20,0x0000,
-/* 0xc800 */
-0x83ee,0x83ef,0x83f3,0x83f4,0x83f5,0x83f6,0x83f7,0x83fa,
-0x83fb,0x83fc,0x83fe,0x83ff,0x8400,0x8402,0x8405,0x8407,
-0x8408,0x8409,0x840a,0x8410,0x8412,0x8413,0x8414,0x8415,
-0x8416,0x8417,0x8419,0x841a,0x841b,0x841e,0x841f,0x8420,
-0x8421,0x8422,0x8423,0x8429,0x842a,0x842b,0x842c,0x842d,
-0x842e,0x842f,0x8430,0x8432,0x8433,0x8434,0x8435,0x8436,
-0x8437,0x8439,0x843a,0x843b,0x843e,0x843f,0x8440,0x8441,
-0x8442,0x8443,0x8444,0x8445,0x8447,0x8448,0x8449,0x0000,
-0x844a,0x844b,0x844c,0x844d,0x844e,0x844f,0x8450,0x8452,
-0x8453,0x8454,0x8455,0x8456,0x8458,0x845d,0x845e,0x845f,
-0x8460,0x8462,0x8464,0x8465,0x8466,0x8467,0x8468,0x846a,
-0x846e,0x846f,0x8470,0x8472,0x8474,0x8477,0x8479,0x847b,
-0x847c,0x53d6,0x5a36,0x9f8b,0x8da3,0x53bb,0x5708,0x98a7,
-0x6743,0x919b,0x6cc9,0x5168,0x75ca,0x62f3,0x72ac,0x5238,
-0x529d,0x7f3a,0x7094,0x7638,0x5374,0x9e4a,0x69b7,0x786e,
-0x96c0,0x88d9,0x7fa4,0x7136,0x71c3,0x5189,0x67d3,0x74e4,
-0x58e4,0x6518,0x56b7,0x8ba9,0x9976,0x6270,0x7ed5,0x60f9,
-0x70ed,0x58ec,0x4ec1,0x4eba,0x5fcd,0x97e7,0x4efb,0x8ba4,
-0x5203,0x598a,0x7eab,0x6254,0x4ecd,0x65e5,0x620e,0x8338,
-0x84c9,0x8363,0x878d,0x7194,0x6eb6,0x5bb9,0x7ed2,0x5197,
-0x63c9,0x67d4,0x8089,0x8339,0x8815,0x5112,0x5b7a,0x5982,
-0x8fb1,0x4e73,0x6c5d,0x5165,0x8925,0x8f6f,0x962e,0x854a,
-0x745e,0x9510,0x95f0,0x6da6,0x82e5,0x5f31,0x6492,0x6d12,
-0x8428,0x816e,0x9cc3,0x585e,0x8d5b,0x4e09,0x53c1,0x0000,
-/* 0xc900 */
-0x847d,0x847e,0x847f,0x8480,0x8481,0x8483,0x8484,0x8485,
-0x8486,0x848a,0x848d,0x848f,0x8490,0x8491,0x8492,0x8493,
-0x8494,0x8495,0x8496,0x8498,0x849a,0x849b,0x849d,0x849e,
-0x849f,0x84a0,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,0x84a7,
-0x84a8,0x84a9,0x84aa,0x84ab,0x84ac,0x84ad,0x84ae,0x84b0,
-0x84b1,0x84b3,0x84b5,0x84b6,0x84b7,0x84bb,0x84bc,0x84be,
-0x84c0,0x84c2,0x84c3,0x84c5,0x84c6,0x84c7,0x84c8,0x84cb,
-0x84cc,0x84ce,0x84cf,0x84d2,0x84d4,0x84d5,0x84d7,0x0000,
-0x84d8,0x84d9,0x84da,0x84db,0x84dc,0x84de,0x84e1,0x84e2,
-0x84e4,0x84e7,0x84e8,0x84e9,0x84ea,0x84eb,0x84ed,0x84ee,
-0x84ef,0x84f1,0x84f2,0x84f3,0x84f4,0x84f5,0x84f6,0x84f7,
-0x84f8,0x84f9,0x84fa,0x84fb,0x84fd,0x84fe,0x8500,0x8501,
-0x8502,0x4f1e,0x6563,0x6851,0x55d3,0x4e27,0x6414,0x9a9a,
-0x626b,0x5ac2,0x745f,0x8272,0x6da9,0x68ee,0x50e7,0x838e,
-0x7802,0x6740,0x5239,0x6c99,0x7eb1,0x50bb,0x5565,0x715e,
-0x7b5b,0x6652,0x73ca,0x82eb,0x6749,0x5c71,0x5220,0x717d,
-0x886b,0x95ea,0x9655,0x64c5,0x8d61,0x81b3,0x5584,0x6c55,
-0x6247,0x7f2e,0x5892,0x4f24,0x5546,0x8d4f,0x664c,0x4e0a,
-0x5c1a,0x88f3,0x68a2,0x634e,0x7a0d,0x70e7,0x828d,0x52fa,
-0x97f6,0x5c11,0x54e8,0x90b5,0x7ecd,0x5962,0x8d4a,0x86c7,
-0x820c,0x820d,0x8d66,0x6444,0x5c04,0x6151,0x6d89,0x793e,
-0x8bbe,0x7837,0x7533,0x547b,0x4f38,0x8eab,0x6df1,0x5a20,
-0x7ec5,0x795e,0x6c88,0x5ba1,0x5a76,0x751a,0x80be,0x614e,
-0x6e17,0x58f0,0x751f,0x7525,0x7272,0x5347,0x7ef3,0x0000,
-/* 0xca00 */
-0x8503,0x8504,0x8505,0x8506,0x8507,0x8508,0x8509,0x850a,
-0x850b,0x850d,0x850e,0x850f,0x8510,0x8512,0x8514,0x8515,
-0x8516,0x8518,0x8519,0x851b,0x851c,0x851d,0x851e,0x8520,
-0x8522,0x8523,0x8524,0x8525,0x8526,0x8527,0x8528,0x8529,
-0x852a,0x852d,0x852e,0x852f,0x8530,0x8531,0x8532,0x8533,
-0x8534,0x8535,0x8536,0x853e,0x853f,0x8540,0x8541,0x8542,
-0x8544,0x8545,0x8546,0x8547,0x854b,0x854c,0x854d,0x854e,
-0x854f,0x8550,0x8551,0x8552,0x8553,0x8554,0x8555,0x0000,
-0x8557,0x8558,0x855a,0x855b,0x855c,0x855d,0x855f,0x8560,
-0x8561,0x8562,0x8563,0x8565,0x8566,0x8567,0x8569,0x856a,
-0x856b,0x856c,0x856d,0x856e,0x856f,0x8570,0x8571,0x8573,
-0x8575,0x8576,0x8577,0x8578,0x857c,0x857d,0x857f,0x8580,
-0x8581,0x7701,0x76db,0x5269,0x80dc,0x5723,0x5e08,0x5931,
-0x72ee,0x65bd,0x6e7f,0x8bd7,0x5c38,0x8671,0x5341,0x77f3,
-0x62fe,0x65f6,0x4ec0,0x98df,0x8680,0x5b9e,0x8bc6,0x53f2,
-0x77e2,0x4f7f,0x5c4e,0x9a76,0x59cb,0x5f0f,0x793a,0x58eb,
-0x4e16,0x67ff,0x4e8b,0x62ed,0x8a93,0x901d,0x52bf,0x662f,
-0x55dc,0x566c,0x9002,0x4ed5,0x4f8d,0x91ca,0x9970,0x6c0f,
-0x5e02,0x6043,0x5ba4,0x89c6,0x8bd5,0x6536,0x624b,0x9996,
-0x5b88,0x5bff,0x6388,0x552e,0x53d7,0x7626,0x517d,0x852c,
-0x67a2,0x68b3,0x6b8a,0x6292,0x8f93,0x53d4,0x8212,0x6dd1,
-0x758f,0x4e66,0x8d4e,0x5b70,0x719f,0x85af,0x6691,0x66d9,
-0x7f72,0x8700,0x9ecd,0x9f20,0x5c5e,0x672f,0x8ff0,0x6811,
-0x675f,0x620d,0x7ad6,0x5885,0x5eb6,0x6570,0x6f31,0x0000,
-/* 0xcb00 */
-0x8582,0x8583,0x8586,0x8588,0x8589,0x858a,0x858b,0x858c,
-0x858d,0x858e,0x8590,0x8591,0x8592,0x8593,0x8594,0x8595,
-0x8596,0x8597,0x8598,0x8599,0x859a,0x859d,0x859e,0x859f,
-0x85a0,0x85a1,0x85a2,0x85a3,0x85a5,0x85a6,0x85a7,0x85a9,
-0x85ab,0x85ac,0x85ad,0x85b1,0x85b2,0x85b3,0x85b4,0x85b5,
-0x85b6,0x85b8,0x85ba,0x85bb,0x85bc,0x85bd,0x85be,0x85bf,
-0x85c0,0x85c2,0x85c3,0x85c4,0x85c5,0x85c6,0x85c7,0x85c8,
-0x85ca,0x85cb,0x85cc,0x85cd,0x85ce,0x85d1,0x85d2,0x0000,
-0x85d4,0x85d6,0x85d7,0x85d8,0x85d9,0x85da,0x85db,0x85dd,
-0x85de,0x85df,0x85e0,0x85e1,0x85e2,0x85e3,0x85e5,0x85e6,
-0x85e7,0x85e8,0x85ea,0x85eb,0x85ec,0x85ed,0x85ee,0x85ef,
-0x85f0,0x85f1,0x85f2,0x85f3,0x85f4,0x85f5,0x85f6,0x85f7,
-0x85f8,0x6055,0x5237,0x800d,0x6454,0x8870,0x7529,0x5e05,
-0x6813,0x62f4,0x971c,0x53cc,0x723d,0x8c01,0x6c34,0x7761,
-0x7a0e,0x542e,0x77ac,0x987a,0x821c,0x8bf4,0x7855,0x6714,
-0x70c1,0x65af,0x6495,0x5636,0x601d,0x79c1,0x53f8,0x4e1d,
-0x6b7b,0x8086,0x5bfa,0x55e3,0x56db,0x4f3a,0x4f3c,0x9972,
-0x5df3,0x677e,0x8038,0x6002,0x9882,0x9001,0x5b8b,0x8bbc,
-0x8bf5,0x641c,0x8258,0x64de,0x55fd,0x82cf,0x9165,0x4fd7,
-0x7d20,0x901f,0x7c9f,0x50f3,0x5851,0x6eaf,0x5bbf,0x8bc9,
-0x8083,0x9178,0x849c,0x7b97,0x867d,0x968b,0x968f,0x7ee5,
-0x9ad3,0x788e,0x5c81,0x7a57,0x9042,0x96a7,0x795f,0x5b59,
-0x635f,0x7b0b,0x84d1,0x68ad,0x5506,0x7f29,0x7410,0x7d22,
-0x9501,0x6240,0x584c,0x4ed6,0x5b83,0x5979,0x5854,0x0000,
-/* 0xcc00 */
-0x85f9,0x85fa,0x85fc,0x85fd,0x85fe,0x8600,0x8601,0x8602,
-0x8603,0x8604,0x8606,0x8607,0x8608,0x8609,0x860a,0x860b,
-0x860c,0x860d,0x860e,0x860f,0x8610,0x8612,0x8613,0x8614,
-0x8615,0x8617,0x8618,0x8619,0x861a,0x861b,0x861c,0x861d,
-0x861e,0x861f,0x8620,0x8621,0x8622,0x8623,0x8624,0x8625,
-0x8626,0x8628,0x862a,0x862b,0x862c,0x862d,0x862e,0x862f,
-0x8630,0x8631,0x8632,0x8633,0x8634,0x8635,0x8636,0x8637,
-0x8639,0x863a,0x863b,0x863d,0x863e,0x863f,0x8640,0x0000,
-0x8641,0x8642,0x8643,0x8644,0x8645,0x8646,0x8647,0x8648,
-0x8649,0x864a,0x864b,0x864c,0x8652,0x8653,0x8655,0x8656,
-0x8657,0x8658,0x8659,0x865b,0x865c,0x865d,0x865f,0x8660,
-0x8661,0x8663,0x8664,0x8665,0x8666,0x8667,0x8668,0x8669,
-0x866a,0x736d,0x631e,0x8e4b,0x8e0f,0x80ce,0x82d4,0x62ac,
-0x53f0,0x6cf0,0x915e,0x592a,0x6001,0x6c70,0x574d,0x644a,
-0x8d2a,0x762b,0x6ee9,0x575b,0x6a80,0x75f0,0x6f6d,0x8c2d,
-0x8c08,0x5766,0x6bef,0x8892,0x78b3,0x63a2,0x53f9,0x70ad,
-0x6c64,0x5858,0x642a,0x5802,0x68e0,0x819b,0x5510,0x7cd6,
-0x5018,0x8eba,0x6dcc,0x8d9f,0x70eb,0x638f,0x6d9b,0x6ed4,
-0x7ee6,0x8404,0x6843,0x9003,0x6dd8,0x9676,0x8ba8,0x5957,
-0x7279,0x85e4,0x817e,0x75bc,0x8a8a,0x68af,0x5254,0x8e22,
-0x9511,0x63d0,0x9898,0x8e44,0x557c,0x4f53,0x66ff,0x568f,
-0x60d5,0x6d95,0x5243,0x5c49,0x5929,0x6dfb,0x586b,0x7530,
-0x751c,0x606c,0x8214,0x8146,0x6311,0x6761,0x8fe2,0x773a,
-0x8df3,0x8d34,0x94c1,0x5e16,0x5385,0x542c,0x70c3,0x0000,
-/* 0xcd00 */
-0x866d,0x866f,0x8670,0x8672,0x8673,0x8674,0x8675,0x8676,
-0x8677,0x8678,0x8683,0x8684,0x8685,0x8686,0x8687,0x8688,
-0x8689,0x868e,0x868f,0x8690,0x8691,0x8692,0x8694,0x8696,
-0x8697,0x8698,0x8699,0x869a,0x869b,0x869e,0x869f,0x86a0,
-0x86a1,0x86a2,0x86a5,0x86a6,0x86ab,0x86ad,0x86ae,0x86b2,
-0x86b3,0x86b7,0x86b8,0x86b9,0x86bb,0x86bc,0x86bd,0x86be,
-0x86bf,0x86c1,0x86c2,0x86c3,0x86c5,0x86c8,0x86cc,0x86cd,
-0x86d2,0x86d3,0x86d5,0x86d6,0x86d7,0x86da,0x86dc,0x0000,
-0x86dd,0x86e0,0x86e1,0x86e2,0x86e3,0x86e5,0x86e6,0x86e7,
-0x86e8,0x86ea,0x86eb,0x86ec,0x86ef,0x86f5,0x86f6,0x86f7,
-0x86fa,0x86fb,0x86fc,0x86fd,0x86ff,0x8701,0x8704,0x8705,
-0x8706,0x870b,0x870c,0x870e,0x870f,0x8710,0x8711,0x8714,
-0x8716,0x6c40,0x5ef7,0x505c,0x4ead,0x5ead,0x633a,0x8247,
-0x901a,0x6850,0x916e,0x77b3,0x540c,0x94dc,0x5f64,0x7ae5,
-0x6876,0x6345,0x7b52,0x7edf,0x75db,0x5077,0x6295,0x5934,
-0x900f,0x51f8,0x79c3,0x7a81,0x56fe,0x5f92,0x9014,0x6d82,
-0x5c60,0x571f,0x5410,0x5154,0x6e4d,0x56e2,0x63a8,0x9893,
-0x817f,0x8715,0x892a,0x9000,0x541e,0x5c6f,0x81c0,0x62d6,
-0x6258,0x8131,0x9e35,0x9640,0x9a6e,0x9a7c,0x692d,0x59a5,
-0x62d3,0x553e,0x6316,0x54c7,0x86d9,0x6d3c,0x5a03,0x74e6,
-0x889c,0x6b6a,0x5916,0x8c4c,0x5f2f,0x6e7e,0x73a9,0x987d,
-0x4e38,0x70f7,0x5b8c,0x7897,0x633d,0x665a,0x7696,0x60cb,
-0x5b9b,0x5a49,0x4e07,0x8155,0x6c6a,0x738b,0x4ea1,0x6789,
-0x7f51,0x5f80,0x65fa,0x671b,0x5fd8,0x5984,0x5a01,0x0000,
-/* 0xce00 */
-0x8719,0x871b,0x871d,0x871f,0x8720,0x8724,0x8726,0x8727,
-0x8728,0x872a,0x872b,0x872c,0x872d,0x872f,0x8730,0x8732,
-0x8733,0x8735,0x8736,0x8738,0x8739,0x873a,0x873c,0x873d,
-0x8740,0x8741,0x8742,0x8743,0x8744,0x8745,0x8746,0x874a,
-0x874b,0x874d,0x874f,0x8750,0x8751,0x8752,0x8754,0x8755,
-0x8756,0x8758,0x875a,0x875b,0x875c,0x875d,0x875e,0x875f,
-0x8761,0x8762,0x8766,0x8767,0x8768,0x8769,0x876a,0x876b,
-0x876c,0x876d,0x876f,0x8771,0x8772,0x8773,0x8775,0x0000,
-0x8777,0x8778,0x8779,0x877a,0x877f,0x8780,0x8781,0x8784,
-0x8786,0x8787,0x8789,0x878a,0x878c,0x878e,0x878f,0x8790,
-0x8791,0x8792,0x8794,0x8795,0x8796,0x8798,0x8799,0x879a,
-0x879b,0x879c,0x879d,0x879e,0x87a0,0x87a1,0x87a2,0x87a3,
-0x87a4,0x5dcd,0x5fae,0x5371,0x97e6,0x8fdd,0x6845,0x56f4,
-0x552f,0x60df,0x4e3a,0x6f4d,0x7ef4,0x82c7,0x840e,0x59d4,
-0x4f1f,0x4f2a,0x5c3e,0x7eac,0x672a,0x851a,0x5473,0x754f,
-0x80c3,0x5582,0x9b4f,0x4f4d,0x6e2d,0x8c13,0x5c09,0x6170,
-0x536b,0x761f,0x6e29,0x868a,0x6587,0x95fb,0x7eb9,0x543b,
-0x7a33,0x7d0a,0x95ee,0x55e1,0x7fc1,0x74ee,0x631d,0x8717,
-0x6da1,0x7a9d,0x6211,0x65a1,0x5367,0x63e1,0x6c83,0x5deb,
-0x545c,0x94a8,0x4e4c,0x6c61,0x8bec,0x5c4b,0x65e0,0x829c,
-0x68a7,0x543e,0x5434,0x6bcb,0x6b66,0x4e94,0x6342,0x5348,
-0x821e,0x4f0d,0x4fae,0x575e,0x620a,0x96fe,0x6664,0x7269,
-0x52ff,0x52a1,0x609f,0x8bef,0x6614,0x7199,0x6790,0x897f,
-0x7852,0x77fd,0x6670,0x563b,0x5438,0x9521,0x727a,0x0000,
-/* 0xcf00 */
-0x87a5,0x87a6,0x87a7,0x87a9,0x87aa,0x87ae,0x87b0,0x87b1,
-0x87b2,0x87b4,0x87b6,0x87b7,0x87b8,0x87b9,0x87bb,0x87bc,
-0x87be,0x87bf,0x87c1,0x87c2,0x87c3,0x87c4,0x87c5,0x87c7,
-0x87c8,0x87c9,0x87cc,0x87cd,0x87ce,0x87cf,0x87d0,0x87d4,
-0x87d5,0x87d6,0x87d7,0x87d8,0x87d9,0x87da,0x87dc,0x87dd,
-0x87de,0x87df,0x87e1,0x87e2,0x87e3,0x87e4,0x87e6,0x87e7,
-0x87e8,0x87e9,0x87eb,0x87ec,0x87ed,0x87ef,0x87f0,0x87f1,
-0x87f2,0x87f3,0x87f4,0x87f5,0x87f6,0x87f7,0x87f8,0x0000,
-0x87fa,0x87fb,0x87fc,0x87fd,0x87ff,0x8800,0x8801,0x8802,
-0x8804,0x8805,0x8806,0x8807,0x8808,0x8809,0x880b,0x880c,
-0x880d,0x880e,0x880f,0x8810,0x8811,0x8812,0x8814,0x8817,
-0x8818,0x8819,0x881a,0x881c,0x881d,0x881e,0x881f,0x8820,
-0x8823,0x7a00,0x606f,0x5e0c,0x6089,0x819d,0x5915,0x60dc,
-0x7184,0x70ef,0x6eaa,0x6c50,0x7280,0x6a84,0x88ad,0x5e2d,
-0x4e60,0x5ab3,0x559c,0x94e3,0x6d17,0x7cfb,0x9699,0x620f,
-0x7ec6,0x778e,0x867e,0x5323,0x971e,0x8f96,0x6687,0x5ce1,
-0x4fa0,0x72ed,0x4e0b,0x53a6,0x590f,0x5413,0x6380,0x9528,
-0x5148,0x4ed9,0x9c9c,0x7ea4,0x54b8,0x8d24,0x8854,0x8237,
-0x95f2,0x6d8e,0x5f26,0x5acc,0x663e,0x9669,0x73b0,0x732e,
-0x53bf,0x817a,0x9985,0x7fa1,0x5baa,0x9677,0x9650,0x7ebf,
-0x76f8,0x53a2,0x9576,0x9999,0x7bb1,0x8944,0x6e58,0x4e61,
-0x7fd4,0x7965,0x8be6,0x60f3,0x54cd,0x4eab,0x9879,0x5df7,
-0x6a61,0x50cf,0x5411,0x8c61,0x8427,0x785d,0x9704,0x524a,
-0x54ee,0x56a3,0x9500,0x6d88,0x5bb5,0x6dc6,0x6653,0x0000,
-/* 0xd000 */
-0x8824,0x8825,0x8826,0x8827,0x8828,0x8829,0x882a,0x882b,
-0x882c,0x882d,0x882e,0x882f,0x8830,0x8831,0x8833,0x8834,
-0x8835,0x8836,0x8837,0x8838,0x883a,0x883b,0x883d,0x883e,
-0x883f,0x8841,0x8842,0x8843,0x8846,0x8847,0x8848,0x8849,
-0x884a,0x884b,0x884e,0x884f,0x8850,0x8851,0x8852,0x8853,
-0x8855,0x8856,0x8858,0x885a,0x885b,0x885c,0x885d,0x885e,
-0x885f,0x8860,0x8866,0x8867,0x886a,0x886d,0x886f,0x8871,
-0x8873,0x8874,0x8875,0x8876,0x8878,0x8879,0x887a,0x0000,
-0x887b,0x887c,0x8880,0x8883,0x8886,0x8887,0x8889,0x888a,
-0x888c,0x888e,0x888f,0x8890,0x8891,0x8893,0x8894,0x8895,
-0x8897,0x8898,0x8899,0x889a,0x889b,0x889d,0x889e,0x889f,
-0x88a0,0x88a1,0x88a3,0x88a5,0x88a6,0x88a7,0x88a8,0x88a9,
-0x88aa,0x5c0f,0x5b5d,0x6821,0x8096,0x5578,0x7b11,0x6548,
-0x6954,0x4e9b,0x6b47,0x874e,0x978b,0x534f,0x631f,0x643a,
-0x90aa,0x659c,0x80c1,0x8c10,0x5199,0x68b0,0x5378,0x87f9,
-0x61c8,0x6cc4,0x6cfb,0x8c22,0x5c51,0x85aa,0x82af,0x950c,
-0x6b23,0x8f9b,0x65b0,0x5ffb,0x5fc3,0x4fe1,0x8845,0x661f,
-0x8165,0x7329,0x60fa,0x5174,0x5211,0x578b,0x5f62,0x90a2,
-0x884c,0x9192,0x5e78,0x674f,0x6027,0x59d3,0x5144,0x51f6,
-0x80f8,0x5308,0x6c79,0x96c4,0x718a,0x4f11,0x4fee,0x7f9e,
-0x673d,0x55c5,0x9508,0x79c0,0x8896,0x7ee3,0x589f,0x620c,
-0x9700,0x865a,0x5618,0x987b,0x5f90,0x8bb8,0x84c4,0x9157,
-0x53d9,0x65ed,0x5e8f,0x755c,0x6064,0x7d6e,0x5a7f,0x7eea,
-0x7eed,0x8f69,0x55a7,0x5ba3,0x60ac,0x65cb,0x7384,0x0000,
-/* 0xd100 */
-0x88ac,0x88ae,0x88af,0x88b0,0x88b2,0x88b3,0x88b4,0x88b5,
-0x88b6,0x88b8,0x88b9,0x88ba,0x88bb,0x88bd,0x88be,0x88bf,
-0x88c0,0x88c3,0x88c4,0x88c7,0x88c8,0x88ca,0x88cb,0x88cc,
-0x88cd,0x88cf,0x88d0,0x88d1,0x88d3,0x88d6,0x88d7,0x88da,
-0x88db,0x88dc,0x88dd,0x88de,0x88e0,0x88e1,0x88e6,0x88e7,
-0x88e9,0x88ea,0x88eb,0x88ec,0x88ed,0x88ee,0x88ef,0x88f2,
-0x88f5,0x88f6,0x88f7,0x88fa,0x88fb,0x88fd,0x88ff,0x8900,
-0x8901,0x8903,0x8904,0x8905,0x8906,0x8907,0x8908,0x0000,
-0x8909,0x890b,0x890c,0x890d,0x890e,0x890f,0x8911,0x8914,
-0x8915,0x8916,0x8917,0x8918,0x891c,0x891d,0x891e,0x891f,
-0x8920,0x8922,0x8923,0x8924,0x8926,0x8927,0x8928,0x8929,
-0x892c,0x892d,0x892e,0x892f,0x8931,0x8932,0x8933,0x8935,
-0x8937,0x9009,0x7663,0x7729,0x7eda,0x9774,0x859b,0x5b66,
-0x7a74,0x96ea,0x8840,0x52cb,0x718f,0x5faa,0x65ec,0x8be2,
-0x5bfb,0x9a6f,0x5de1,0x6b89,0x6c5b,0x8bad,0x8baf,0x900a,
-0x8fc5,0x538b,0x62bc,0x9e26,0x9e2d,0x5440,0x4e2b,0x82bd,
-0x7259,0x869c,0x5d16,0x8859,0x6daf,0x96c5,0x54d1,0x4e9a,
-0x8bb6,0x7109,0x54bd,0x9609,0x70df,0x6df9,0x76d0,0x4e25,
-0x7814,0x8712,0x5ca9,0x5ef6,0x8a00,0x989c,0x960e,0x708e,
-0x6cbf,0x5944,0x63a9,0x773c,0x884d,0x6f14,0x8273,0x5830,
-0x71d5,0x538c,0x781a,0x96c1,0x5501,0x5f66,0x7130,0x5bb4,
-0x8c1a,0x9a8c,0x6b83,0x592e,0x9e2f,0x79e7,0x6768,0x626c,
-0x4f6f,0x75a1,0x7f8a,0x6d0b,0x9633,0x6c27,0x4ef0,0x75d2,
-0x517b,0x6837,0x6f3e,0x9080,0x8170,0x5996,0x7476,0x0000,
-/* 0xd200 */
-0x8938,0x8939,0x893a,0x893b,0x893c,0x893d,0x893e,0x893f,
-0x8940,0x8942,0x8943,0x8945,0x8946,0x8947,0x8948,0x8949,
-0x894a,0x894b,0x894c,0x894d,0x894e,0x894f,0x8950,0x8951,
-0x8952,0x8953,0x8954,0x8955,0x8956,0x8957,0x8958,0x8959,
-0x895a,0x895b,0x895c,0x895d,0x8960,0x8961,0x8962,0x8963,
-0x8964,0x8965,0x8967,0x8968,0x8969,0x896a,0x896b,0x896c,
-0x896d,0x896e,0x896f,0x8970,0x8971,0x8972,0x8973,0x8974,
-0x8975,0x8976,0x8977,0x8978,0x8979,0x897a,0x897c,0x0000,
-0x897d,0x897e,0x8980,0x8982,0x8984,0x8985,0x8987,0x8988,
-0x8989,0x898a,0x898b,0x898c,0x898d,0x898e,0x898f,0x8990,
-0x8991,0x8992,0x8993,0x8994,0x8995,0x8996,0x8997,0x8998,
-0x8999,0x899a,0x899b,0x899c,0x899d,0x899e,0x899f,0x89a0,
-0x89a1,0x6447,0x5c27,0x9065,0x7a91,0x8c23,0x59da,0x54ac,
-0x8200,0x836f,0x8981,0x8000,0x6930,0x564e,0x8036,0x7237,
-0x91ce,0x51b6,0x4e5f,0x9875,0x6396,0x4e1a,0x53f6,0x66f3,
-0x814b,0x591c,0x6db2,0x4e00,0x58f9,0x533b,0x63d6,0x94f1,
-0x4f9d,0x4f0a,0x8863,0x9890,0x5937,0x9057,0x79fb,0x4eea,
-0x80f0,0x7591,0x6c82,0x5b9c,0x59e8,0x5f5d,0x6905,0x8681,
-0x501a,0x5df2,0x4e59,0x77e3,0x4ee5,0x827a,0x6291,0x6613,
-0x9091,0x5c79,0x4ebf,0x5f79,0x81c6,0x9038,0x8084,0x75ab,
-0x4ea6,0x88d4,0x610f,0x6bc5,0x5fc6,0x4e49,0x76ca,0x6ea2,
-0x8be3,0x8bae,0x8c0a,0x8bd1,0x5f02,0x7ffc,0x7fcc,0x7ece,
-0x8335,0x836b,0x56e0,0x6bb7,0x97f3,0x9634,0x59fb,0x541f,
-0x94f6,0x6deb,0x5bc5,0x996e,0x5c39,0x5f15,0x9690,0x0000,
-/* 0xd300 */
-0x89a2,0x89a3,0x89a4,0x89a5,0x89a6,0x89a7,0x89a8,0x89a9,
-0x89aa,0x89ab,0x89ac,0x89ad,0x89ae,0x89af,0x89b0,0x89b1,
-0x89b2,0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,0x89b8,0x89b9,
-0x89ba,0x89bb,0x89bc,0x89bd,0x89be,0x89bf,0x89c0,0x89c3,
-0x89cd,0x89d3,0x89d4,0x89d5,0x89d7,0x89d8,0x89d9,0x89db,
-0x89dd,0x89df,0x89e0,0x89e1,0x89e2,0x89e4,0x89e7,0x89e8,
-0x89e9,0x89ea,0x89ec,0x89ed,0x89ee,0x89f0,0x89f1,0x89f2,
-0x89f4,0x89f5,0x89f6,0x89f7,0x89f8,0x89f9,0x89fa,0x0000,
-0x89fb,0x89fc,0x89fd,0x89fe,0x89ff,0x8a01,0x8a02,0x8a03,
-0x8a04,0x8a05,0x8a06,0x8a08,0x8a09,0x8a0a,0x8a0b,0x8a0c,
-0x8a0d,0x8a0e,0x8a0f,0x8a10,0x8a11,0x8a12,0x8a13,0x8a14,
-0x8a15,0x8a16,0x8a17,0x8a18,0x8a19,0x8a1a,0x8a1b,0x8a1c,
-0x8a1d,0x5370,0x82f1,0x6a31,0x5a74,0x9e70,0x5e94,0x7f28,
-0x83b9,0x8424,0x8425,0x8367,0x8747,0x8fce,0x8d62,0x76c8,
-0x5f71,0x9896,0x786c,0x6620,0x54df,0x62e5,0x4f63,0x81c3,
-0x75c8,0x5eb8,0x96cd,0x8e0a,0x86f9,0x548f,0x6cf3,0x6d8c,
-0x6c38,0x607f,0x52c7,0x7528,0x5e7d,0x4f18,0x60a0,0x5fe7,
-0x5c24,0x7531,0x90ae,0x94c0,0x72b9,0x6cb9,0x6e38,0x9149,
-0x6709,0x53cb,0x53f3,0x4f51,0x91c9,0x8bf1,0x53c8,0x5e7c,
-0x8fc2,0x6de4,0x4e8e,0x76c2,0x6986,0x865e,0x611a,0x8206,
-0x4f59,0x4fde,0x903e,0x9c7c,0x6109,0x6e1d,0x6e14,0x9685,
-0x4e88,0x5a31,0x96e8,0x4e0e,0x5c7f,0x79b9,0x5b87,0x8bed,
-0x7fbd,0x7389,0x57df,0x828b,0x90c1,0x5401,0x9047,0x55bb,
-0x5cea,0x5fa1,0x6108,0x6b32,0x72f1,0x80b2,0x8a89,0x0000,
-/* 0xd400 */
-0x8a1e,0x8a1f,0x8a20,0x8a21,0x8a22,0x8a23,0x8a24,0x8a25,
-0x8a26,0x8a27,0x8a28,0x8a29,0x8a2a,0x8a2b,0x8a2c,0x8a2d,
-0x8a2e,0x8a2f,0x8a30,0x8a31,0x8a32,0x8a33,0x8a34,0x8a35,
-0x8a36,0x8a37,0x8a38,0x8a39,0x8a3a,0x8a3b,0x8a3c,0x8a3d,
-0x8a3f,0x8a40,0x8a41,0x8a42,0x8a43,0x8a44,0x8a45,0x8a46,
-0x8a47,0x8a49,0x8a4a,0x8a4b,0x8a4c,0x8a4d,0x8a4e,0x8a4f,
-0x8a50,0x8a51,0x8a52,0x8a53,0x8a54,0x8a55,0x8a56,0x8a57,
-0x8a58,0x8a59,0x8a5a,0x8a5b,0x8a5c,0x8a5d,0x8a5e,0x0000,
-0x8a5f,0x8a60,0x8a61,0x8a62,0x8a63,0x8a64,0x8a65,0x8a66,
-0x8a67,0x8a68,0x8a69,0x8a6a,0x8a6b,0x8a6c,0x8a6d,0x8a6e,
-0x8a6f,0x8a70,0x8a71,0x8a72,0x8a73,0x8a74,0x8a75,0x8a76,
-0x8a77,0x8a78,0x8a7a,0x8a7b,0x8a7c,0x8a7d,0x8a7e,0x8a7f,
-0x8a80,0x6d74,0x5bd3,0x88d5,0x9884,0x8c6b,0x9a6d,0x9e33,
-0x6e0a,0x51a4,0x5143,0x57a3,0x8881,0x539f,0x63f4,0x8f95,
-0x56ed,0x5458,0x5706,0x733f,0x6e90,0x7f18,0x8fdc,0x82d1,
-0x613f,0x6028,0x9662,0x66f0,0x7ea6,0x8d8a,0x8dc3,0x94a5,
-0x5cb3,0x7ca4,0x6708,0x60a6,0x9605,0x8018,0x4e91,0x90e7,
-0x5300,0x9668,0x5141,0x8fd0,0x8574,0x915d,0x6655,0x97f5,
-0x5b55,0x531d,0x7838,0x6742,0x683d,0x54c9,0x707e,0x5bb0,
-0x8f7d,0x518d,0x5728,0x54b1,0x6512,0x6682,0x8d5e,0x8d43,
-0x810f,0x846c,0x906d,0x7cdf,0x51ff,0x85fb,0x67a3,0x65e9,
-0x6fa1,0x86a4,0x8e81,0x566a,0x9020,0x7682,0x7076,0x71e5,
-0x8d23,0x62e9,0x5219,0x6cfd,0x8d3c,0x600e,0x589e,0x618e,
-0x66fe,0x8d60,0x624e,0x55b3,0x6e23,0x672d,0x8f67,0x0000,
-/* 0xd500 */
-0x8a81,0x8a82,0x8a83,0x8a84,0x8a85,0x8a86,0x8a87,0x8a88,
-0x8a8b,0x8a8c,0x8a8d,0x8a8e,0x8a8f,0x8a90,0x8a91,0x8a92,
-0x8a94,0x8a95,0x8a96,0x8a97,0x8a98,0x8a99,0x8a9a,0x8a9b,
-0x8a9c,0x8a9d,0x8a9e,0x8a9f,0x8aa0,0x8aa1,0x8aa2,0x8aa3,
-0x8aa4,0x8aa5,0x8aa6,0x8aa7,0x8aa8,0x8aa9,0x8aaa,0x8aab,
-0x8aac,0x8aad,0x8aae,0x8aaf,0x8ab0,0x8ab1,0x8ab2,0x8ab3,
-0x8ab4,0x8ab5,0x8ab6,0x8ab7,0x8ab8,0x8ab9,0x8aba,0x8abb,
-0x8abc,0x8abd,0x8abe,0x8abf,0x8ac0,0x8ac1,0x8ac2,0x0000,
-0x8ac3,0x8ac4,0x8ac5,0x8ac6,0x8ac7,0x8ac8,0x8ac9,0x8aca,
-0x8acb,0x8acc,0x8acd,0x8ace,0x8acf,0x8ad0,0x8ad1,0x8ad2,
-0x8ad3,0x8ad4,0x8ad5,0x8ad6,0x8ad7,0x8ad8,0x8ad9,0x8ada,
-0x8adb,0x8adc,0x8add,0x8ade,0x8adf,0x8ae0,0x8ae1,0x8ae2,
-0x8ae3,0x94e1,0x95f8,0x7728,0x6805,0x69a8,0x548b,0x4e4d,
-0x70b8,0x8bc8,0x6458,0x658b,0x5b85,0x7a84,0x503a,0x5be8,
-0x77bb,0x6be1,0x8a79,0x7c98,0x6cbe,0x76cf,0x65a9,0x8f97,
-0x5d2d,0x5c55,0x8638,0x6808,0x5360,0x6218,0x7ad9,0x6e5b,
-0x7efd,0x6a1f,0x7ae0,0x5f70,0x6f33,0x5f20,0x638c,0x6da8,
-0x6756,0x4e08,0x5e10,0x8d26,0x4ed7,0x80c0,0x7634,0x969c,
-0x62db,0x662d,0x627e,0x6cbc,0x8d75,0x7167,0x7f69,0x5146,
-0x8087,0x53ec,0x906e,0x6298,0x54f2,0x86f0,0x8f99,0x8005,
-0x9517,0x8517,0x8fd9,0x6d59,0x73cd,0x659f,0x771f,0x7504,
-0x7827,0x81fb,0x8d1e,0x9488,0x4fa6,0x6795,0x75b9,0x8bca,
-0x9707,0x632f,0x9547,0x9635,0x84b8,0x6323,0x7741,0x5f81,
-0x72f0,0x4e89,0x6014,0x6574,0x62ef,0x6b63,0x653f,0x0000,
-/* 0xd600 */
-0x8ae4,0x8ae5,0x8ae6,0x8ae7,0x8ae8,0x8ae9,0x8aea,0x8aeb,
-0x8aec,0x8aed,0x8aee,0x8aef,0x8af0,0x8af1,0x8af2,0x8af3,
-0x8af4,0x8af5,0x8af6,0x8af7,0x8af8,0x8af9,0x8afa,0x8afb,
-0x8afc,0x8afd,0x8afe,0x8aff,0x8b00,0x8b01,0x8b02,0x8b03,
-0x8b04,0x8b05,0x8b06,0x8b08,0x8b09,0x8b0a,0x8b0b,0x8b0c,
-0x8b0d,0x8b0e,0x8b0f,0x8b10,0x8b11,0x8b12,0x8b13,0x8b14,
-0x8b15,0x8b16,0x8b17,0x8b18,0x8b19,0x8b1a,0x8b1b,0x8b1c,
-0x8b1d,0x8b1e,0x8b1f,0x8b20,0x8b21,0x8b22,0x8b23,0x0000,
-0x8b24,0x8b25,0x8b27,0x8b28,0x8b29,0x8b2a,0x8b2b,0x8b2c,
-0x8b2d,0x8b2e,0x8b2f,0x8b30,0x8b31,0x8b32,0x8b33,0x8b34,
-0x8b35,0x8b36,0x8b37,0x8b38,0x8b39,0x8b3a,0x8b3b,0x8b3c,
-0x8b3d,0x8b3e,0x8b3f,0x8b40,0x8b41,0x8b42,0x8b43,0x8b44,
-0x8b45,0x5e27,0x75c7,0x90d1,0x8bc1,0x829d,0x679d,0x652f,
-0x5431,0x8718,0x77e5,0x80a2,0x8102,0x6c41,0x4e4b,0x7ec7,
-0x804c,0x76f4,0x690d,0x6b96,0x6267,0x503c,0x4f84,0x5740,
-0x6307,0x6b62,0x8dbe,0x53ea,0x65e8,0x7eb8,0x5fd7,0x631a,
-0x63b7,0x81f3,0x81f4,0x7f6e,0x5e1c,0x5cd9,0x5236,0x667a,
-0x79e9,0x7a1a,0x8d28,0x7099,0x75d4,0x6ede,0x6cbb,0x7a92,
-0x4e2d,0x76c5,0x5fe0,0x949f,0x8877,0x7ec8,0x79cd,0x80bf,
-0x91cd,0x4ef2,0x4f17,0x821f,0x5468,0x5dde,0x6d32,0x8bcc,
-0x7ca5,0x8f74,0x8098,0x5e1a,0x5492,0x76b1,0x5b99,0x663c,
-0x9aa4,0x73e0,0x682a,0x86db,0x6731,0x732a,0x8bf8,0x8bdb,
-0x9010,0x7af9,0x70db,0x716e,0x62c4,0x77a9,0x5631,0x4e3b,
-0x8457,0x67f1,0x52a9,0x86c0,0x8d2e,0x94f8,0x7b51,0x0000,
-/* 0xd700 */
-0x8b46,0x8b47,0x8b48,0x8b49,0x8b4a,0x8b4b,0x8b4c,0x8b4d,
-0x8b4e,0x8b4f,0x8b50,0x8b51,0x8b52,0x8b53,0x8b54,0x8b55,
-0x8b56,0x8b57,0x8b58,0x8b59,0x8b5a,0x8b5b,0x8b5c,0x8b5d,
-0x8b5e,0x8b5f,0x8b60,0x8b61,0x8b62,0x8b63,0x8b64,0x8b65,
-0x8b67,0x8b68,0x8b69,0x8b6a,0x8b6b,0x8b6d,0x8b6e,0x8b6f,
-0x8b70,0x8b71,0x8b72,0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,
-0x8b78,0x8b79,0x8b7a,0x8b7b,0x8b7c,0x8b7d,0x8b7e,0x8b7f,
-0x8b80,0x8b81,0x8b82,0x8b83,0x8b84,0x8b85,0x8b86,0x0000,
-0x8b87,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0x8b8d,0x8b8e,
-0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,0x8b94,0x8b95,0x8b96,
-0x8b97,0x8b98,0x8b99,0x8b9a,0x8b9b,0x8b9c,0x8b9d,0x8b9e,
-0x8b9f,0x8bac,0x8bb1,0x8bbb,0x8bc7,0x8bd0,0x8bea,0x8c09,
-0x8c1e,0x4f4f,0x6ce8,0x795d,0x9a7b,0x6293,0x722a,0x62fd,
-0x4e13,0x7816,0x8f6c,0x64b0,0x8d5a,0x7bc6,0x6869,0x5e84,
-0x88c5,0x5986,0x649e,0x58ee,0x72b6,0x690e,0x9525,0x8ffd,
-0x8d58,0x5760,0x7f00,0x8c06,0x51c6,0x6349,0x62d9,0x5353,
-0x684c,0x7422,0x8301,0x914c,0x5544,0x7740,0x707c,0x6d4a,
-0x5179,0x54a8,0x8d44,0x59ff,0x6ecb,0x6dc4,0x5b5c,0x7d2b,
-0x4ed4,0x7c7d,0x6ed3,0x5b50,0x81ea,0x6e0d,0x5b57,0x9b03,
-0x68d5,0x8e2a,0x5b97,0x7efc,0x603b,0x7eb5,0x90b9,0x8d70,
-0x594f,0x63cd,0x79df,0x8db3,0x5352,0x65cf,0x7956,0x8bc5,
-0x963b,0x7ec4,0x94bb,0x7e82,0x5634,0x9189,0x6700,0x7f6a,
-0x5c0a,0x9075,0x6628,0x5de6,0x4f50,0x67de,0x505a,0x4f5c,
-0x5750,0x5ea7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xd800 */
-0x8c38,0x8c39,0x8c3a,0x8c3b,0x8c3c,0x8c3d,0x8c3e,0x8c3f,
-0x8c40,0x8c42,0x8c43,0x8c44,0x8c45,0x8c48,0x8c4a,0x8c4b,
-0x8c4d,0x8c4e,0x8c4f,0x8c50,0x8c51,0x8c52,0x8c53,0x8c54,
-0x8c56,0x8c57,0x8c58,0x8c59,0x8c5b,0x8c5c,0x8c5d,0x8c5e,
-0x8c5f,0x8c60,0x8c63,0x8c64,0x8c65,0x8c66,0x8c67,0x8c68,
-0x8c69,0x8c6c,0x8c6d,0x8c6e,0x8c6f,0x8c70,0x8c71,0x8c72,
-0x8c74,0x8c75,0x8c76,0x8c77,0x8c7b,0x8c7c,0x8c7d,0x8c7e,
-0x8c7f,0x8c80,0x8c81,0x8c83,0x8c84,0x8c86,0x8c87,0x0000,
-0x8c88,0x8c8b,0x8c8d,0x8c8e,0x8c8f,0x8c90,0x8c91,0x8c92,
-0x8c93,0x8c95,0x8c96,0x8c97,0x8c99,0x8c9a,0x8c9b,0x8c9c,
-0x8c9d,0x8c9e,0x8c9f,0x8ca0,0x8ca1,0x8ca2,0x8ca3,0x8ca4,
-0x8ca5,0x8ca6,0x8ca7,0x8ca8,0x8ca9,0x8caa,0x8cab,0x8cac,
-0x8cad,0x4e8d,0x4e0c,0x5140,0x4e10,0x5eff,0x5345,0x4e15,
-0x4e98,0x4e1e,0x9b32,0x5b6c,0x5669,0x4e28,0x79ba,0x4e3f,
-0x5315,0x4e47,0x592d,0x723b,0x536e,0x6c10,0x56df,0x80e4,
-0x9997,0x6bd3,0x777e,0x9f17,0x4e36,0x4e9f,0x9f10,0x4e5c,
-0x4e69,0x4e93,0x8288,0x5b5b,0x556c,0x560f,0x4ec4,0x538d,
-0x539d,0x53a3,0x53a5,0x53ae,0x9765,0x8d5d,0x531a,0x53f5,
-0x5326,0x532e,0x533e,0x8d5c,0x5366,0x5363,0x5202,0x5208,
-0x520e,0x522d,0x5233,0x523f,0x5240,0x524c,0x525e,0x5261,
-0x525c,0x84af,0x527d,0x5282,0x5281,0x5290,0x5293,0x5182,
-0x7f54,0x4ebb,0x4ec3,0x4ec9,0x4ec2,0x4ee8,0x4ee1,0x4eeb,
-0x4ede,0x4f1b,0x4ef3,0x4f22,0x4f64,0x4ef5,0x4f25,0x4f27,
-0x4f09,0x4f2b,0x4f5e,0x4f67,0x6538,0x4f5a,0x4f5d,0x0000,
-/* 0xd900 */
-0x8cae,0x8caf,0x8cb0,0x8cb1,0x8cb2,0x8cb3,0x8cb4,0x8cb5,
-0x8cb6,0x8cb7,0x8cb8,0x8cb9,0x8cba,0x8cbb,0x8cbc,0x8cbd,
-0x8cbe,0x8cbf,0x8cc0,0x8cc1,0x8cc2,0x8cc3,0x8cc4,0x8cc5,
-0x8cc6,0x8cc7,0x8cc8,0x8cc9,0x8cca,0x8ccb,0x8ccc,0x8ccd,
-0x8cce,0x8ccf,0x8cd0,0x8cd1,0x8cd2,0x8cd3,0x8cd4,0x8cd5,
-0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,0x8cdb,0x8cdc,0x8cdd,
-0x8cde,0x8cdf,0x8ce0,0x8ce1,0x8ce2,0x8ce3,0x8ce4,0x8ce5,
-0x8ce6,0x8ce7,0x8ce8,0x8ce9,0x8cea,0x8ceb,0x8cec,0x0000,
-0x8ced,0x8cee,0x8cef,0x8cf0,0x8cf1,0x8cf2,0x8cf3,0x8cf4,
-0x8cf5,0x8cf6,0x8cf7,0x8cf8,0x8cf9,0x8cfa,0x8cfb,0x8cfc,
-0x8cfd,0x8cfe,0x8cff,0x8d00,0x8d01,0x8d02,0x8d03,0x8d04,
-0x8d05,0x8d06,0x8d07,0x8d08,0x8d09,0x8d0a,0x8d0b,0x8d0c,
-0x8d0d,0x4f5f,0x4f57,0x4f32,0x4f3d,0x4f76,0x4f74,0x4f91,
-0x4f89,0x4f83,0x4f8f,0x4f7e,0x4f7b,0x4faa,0x4f7c,0x4fac,
-0x4f94,0x4fe6,0x4fe8,0x4fea,0x4fc5,0x4fda,0x4fe3,0x4fdc,
-0x4fd1,0x4fdf,0x4ff8,0x5029,0x504c,0x4ff3,0x502c,0x500f,
-0x502e,0x502d,0x4ffe,0x501c,0x500c,0x5025,0x5028,0x507e,
-0x5043,0x5055,0x5048,0x504e,0x506c,0x507b,0x50a5,0x50a7,
-0x50a9,0x50ba,0x50d6,0x5106,0x50ed,0x50ec,0x50e6,0x50ee,
-0x5107,0x510b,0x4edd,0x6c3d,0x4f58,0x4f65,0x4fce,0x9fa0,
-0x6c46,0x7c74,0x516e,0x5dfd,0x9ec9,0x9998,0x5181,0x5914,
-0x52f9,0x530d,0x8a07,0x5310,0x51eb,0x5919,0x5155,0x4ea0,
-0x5156,0x4eb3,0x886e,0x88a4,0x4eb5,0x8114,0x88d2,0x7980,
-0x5b34,0x8803,0x7fb8,0x51ab,0x51b1,0x51bd,0x51bc,0x0000,
-/* 0xda00 */
-0x8d0e,0x8d0f,0x8d10,0x8d11,0x8d12,0x8d13,0x8d14,0x8d15,
-0x8d16,0x8d17,0x8d18,0x8d19,0x8d1a,0x8d1b,0x8d1c,0x8d20,
-0x8d51,0x8d52,0x8d57,0x8d5f,0x8d65,0x8d68,0x8d69,0x8d6a,
-0x8d6c,0x8d6e,0x8d6f,0x8d71,0x8d72,0x8d78,0x8d79,0x8d7a,
-0x8d7b,0x8d7c,0x8d7d,0x8d7e,0x8d7f,0x8d80,0x8d82,0x8d83,
-0x8d86,0x8d87,0x8d88,0x8d89,0x8d8c,0x8d8d,0x8d8e,0x8d8f,
-0x8d90,0x8d92,0x8d93,0x8d95,0x8d96,0x8d97,0x8d98,0x8d99,
-0x8d9a,0x8d9b,0x8d9c,0x8d9d,0x8d9e,0x8da0,0x8da1,0x0000,
-0x8da2,0x8da4,0x8da5,0x8da6,0x8da7,0x8da8,0x8da9,0x8daa,
-0x8dab,0x8dac,0x8dad,0x8dae,0x8daf,0x8db0,0x8db2,0x8db6,
-0x8db7,0x8db9,0x8dbb,0x8dbd,0x8dc0,0x8dc1,0x8dc2,0x8dc5,
-0x8dc7,0x8dc8,0x8dc9,0x8dca,0x8dcd,0x8dd0,0x8dd2,0x8dd3,
-0x8dd4,0x51c7,0x5196,0x51a2,0x51a5,0x8ba0,0x8ba6,0x8ba7,
-0x8baa,0x8bb4,0x8bb5,0x8bb7,0x8bc2,0x8bc3,0x8bcb,0x8bcf,
-0x8bce,0x8bd2,0x8bd3,0x8bd4,0x8bd6,0x8bd8,0x8bd9,0x8bdc,
-0x8bdf,0x8be0,0x8be4,0x8be8,0x8be9,0x8bee,0x8bf0,0x8bf3,
-0x8bf6,0x8bf9,0x8bfc,0x8bff,0x8c00,0x8c02,0x8c04,0x8c07,
-0x8c0c,0x8c0f,0x8c11,0x8c12,0x8c14,0x8c15,0x8c16,0x8c19,
-0x8c1b,0x8c18,0x8c1d,0x8c1f,0x8c20,0x8c21,0x8c25,0x8c27,
-0x8c2a,0x8c2b,0x8c2e,0x8c2f,0x8c32,0x8c33,0x8c35,0x8c36,
-0x5369,0x537a,0x961d,0x9622,0x9621,0x9631,0x962a,0x963d,
-0x963c,0x9642,0x9649,0x9654,0x965f,0x9667,0x966c,0x9672,
-0x9674,0x9688,0x968d,0x9697,0x96b0,0x9097,0x909b,0x909d,
-0x9099,0x90ac,0x90a1,0x90b4,0x90b3,0x90b6,0x90ba,0x0000,
-/* 0xdb00 */
-0x8dd5,0x8dd8,0x8dd9,0x8ddc,0x8de0,0x8de1,0x8de2,0x8de5,
-0x8de6,0x8de7,0x8de9,0x8ded,0x8dee,0x8df0,0x8df1,0x8df2,
-0x8df4,0x8df6,0x8dfc,0x8dfe,0x8dff,0x8e00,0x8e01,0x8e02,
-0x8e03,0x8e04,0x8e06,0x8e07,0x8e08,0x8e0b,0x8e0d,0x8e0e,
-0x8e10,0x8e11,0x8e12,0x8e13,0x8e15,0x8e16,0x8e17,0x8e18,
-0x8e19,0x8e1a,0x8e1b,0x8e1c,0x8e20,0x8e21,0x8e24,0x8e25,
-0x8e26,0x8e27,0x8e28,0x8e2b,0x8e2d,0x8e30,0x8e32,0x8e33,
-0x8e34,0x8e36,0x8e37,0x8e38,0x8e3b,0x8e3c,0x8e3e,0x0000,
-0x8e3f,0x8e43,0x8e45,0x8e46,0x8e4c,0x8e4d,0x8e4e,0x8e4f,
-0x8e50,0x8e53,0x8e54,0x8e55,0x8e56,0x8e57,0x8e58,0x8e5a,
-0x8e5b,0x8e5c,0x8e5d,0x8e5e,0x8e5f,0x8e60,0x8e61,0x8e62,
-0x8e63,0x8e64,0x8e65,0x8e67,0x8e68,0x8e6a,0x8e6b,0x8e6e,
-0x8e71,0x90b8,0x90b0,0x90cf,0x90c5,0x90be,0x90d0,0x90c4,
-0x90c7,0x90d3,0x90e6,0x90e2,0x90dc,0x90d7,0x90db,0x90eb,
-0x90ef,0x90fe,0x9104,0x9122,0x911e,0x9123,0x9131,0x912f,
-0x9139,0x9143,0x9146,0x520d,0x5942,0x52a2,0x52ac,0x52ad,
-0x52be,0x54ff,0x52d0,0x52d6,0x52f0,0x53df,0x71ee,0x77cd,
-0x5ef4,0x51f5,0x51fc,0x9b2f,0x53b6,0x5f01,0x755a,0x5def,
-0x574c,0x57a9,0x57a1,0x587e,0x58bc,0x58c5,0x58d1,0x5729,
-0x572c,0x572a,0x5733,0x5739,0x572e,0x572f,0x575c,0x573b,
-0x5742,0x5769,0x5785,0x576b,0x5786,0x577c,0x577b,0x5768,
-0x576d,0x5776,0x5773,0x57ad,0x57a4,0x578c,0x57b2,0x57cf,
-0x57a7,0x57b4,0x5793,0x57a0,0x57d5,0x57d8,0x57da,0x57d9,
-0x57d2,0x57b8,0x57f4,0x57ef,0x57f8,0x57e4,0x57dd,0x0000,
-/* 0xdc00 */
-0x8e73,0x8e75,0x8e77,0x8e78,0x8e79,0x8e7a,0x8e7b,0x8e7d,
-0x8e7e,0x8e80,0x8e82,0x8e83,0x8e84,0x8e86,0x8e88,0x8e89,
-0x8e8a,0x8e8b,0x8e8c,0x8e8d,0x8e8e,0x8e91,0x8e92,0x8e93,
-0x8e95,0x8e96,0x8e97,0x8e98,0x8e99,0x8e9a,0x8e9b,0x8e9d,
-0x8e9f,0x8ea0,0x8ea1,0x8ea2,0x8ea3,0x8ea4,0x8ea5,0x8ea6,
-0x8ea7,0x8ea8,0x8ea9,0x8eaa,0x8ead,0x8eae,0x8eb0,0x8eb1,
-0x8eb3,0x8eb4,0x8eb5,0x8eb6,0x8eb7,0x8eb8,0x8eb9,0x8ebb,
-0x8ebc,0x8ebd,0x8ebe,0x8ebf,0x8ec0,0x8ec1,0x8ec2,0x0000,
-0x8ec3,0x8ec4,0x8ec5,0x8ec6,0x8ec7,0x8ec8,0x8ec9,0x8eca,
-0x8ecb,0x8ecc,0x8ecd,0x8ecf,0x8ed0,0x8ed1,0x8ed2,0x8ed3,
-0x8ed4,0x8ed5,0x8ed6,0x8ed7,0x8ed8,0x8ed9,0x8eda,0x8edb,
-0x8edc,0x8edd,0x8ede,0x8edf,0x8ee0,0x8ee1,0x8ee2,0x8ee3,
-0x8ee4,0x580b,0x580d,0x57fd,0x57ed,0x5800,0x581e,0x5819,
-0x5844,0x5820,0x5865,0x586c,0x5881,0x5889,0x589a,0x5880,
-0x99a8,0x9f19,0x61ff,0x8279,0x827d,0x827f,0x828f,0x828a,
-0x82a8,0x8284,0x828e,0x8291,0x8297,0x8299,0x82ab,0x82b8,
-0x82be,0x82b0,0x82c8,0x82ca,0x82e3,0x8298,0x82b7,0x82ae,
-0x82cb,0x82cc,0x82c1,0x82a9,0x82b4,0x82a1,0x82aa,0x829f,
-0x82c4,0x82ce,0x82a4,0x82e1,0x8309,0x82f7,0x82e4,0x830f,
-0x8307,0x82dc,0x82f4,0x82d2,0x82d8,0x830c,0x82fb,0x82d3,
-0x8311,0x831a,0x8306,0x8314,0x8315,0x82e0,0x82d5,0x831c,
-0x8351,0x835b,0x835c,0x8308,0x8392,0x833c,0x8334,0x8331,
-0x839b,0x835e,0x832f,0x834f,0x8347,0x8343,0x835f,0x8340,
-0x8317,0x8360,0x832d,0x833a,0x8333,0x8366,0x8365,0x0000,
-/* 0xdd00 */
-0x8ee5,0x8ee6,0x8ee7,0x8ee8,0x8ee9,0x8eea,0x8eeb,0x8eec,
-0x8eed,0x8eee,0x8eef,0x8ef0,0x8ef1,0x8ef2,0x8ef3,0x8ef4,
-0x8ef5,0x8ef6,0x8ef7,0x8ef8,0x8ef9,0x8efa,0x8efb,0x8efc,
-0x8efd,0x8efe,0x8eff,0x8f00,0x8f01,0x8f02,0x8f03,0x8f04,
-0x8f05,0x8f06,0x8f07,0x8f08,0x8f09,0x8f0a,0x8f0b,0x8f0c,
-0x8f0d,0x8f0e,0x8f0f,0x8f10,0x8f11,0x8f12,0x8f13,0x8f14,
-0x8f15,0x8f16,0x8f17,0x8f18,0x8f19,0x8f1a,0x8f1b,0x8f1c,
-0x8f1d,0x8f1e,0x8f1f,0x8f20,0x8f21,0x8f22,0x8f23,0x0000,
-0x8f24,0x8f25,0x8f26,0x8f27,0x8f28,0x8f29,0x8f2a,0x8f2b,
-0x8f2c,0x8f2d,0x8f2e,0x8f2f,0x8f30,0x8f31,0x8f32,0x8f33,
-0x8f34,0x8f35,0x8f36,0x8f37,0x8f38,0x8f39,0x8f3a,0x8f3b,
-0x8f3c,0x8f3d,0x8f3e,0x8f3f,0x8f40,0x8f41,0x8f42,0x8f43,
-0x8f44,0x8368,0x831b,0x8369,0x836c,0x836a,0x836d,0x836e,
-0x83b0,0x8378,0x83b3,0x83b4,0x83a0,0x83aa,0x8393,0x839c,
-0x8385,0x837c,0x83b6,0x83a9,0x837d,0x83b8,0x837b,0x8398,
-0x839e,0x83a8,0x83ba,0x83bc,0x83c1,0x8401,0x83e5,0x83d8,
-0x5807,0x8418,0x840b,0x83dd,0x83fd,0x83d6,0x841c,0x8438,
-0x8411,0x8406,0x83d4,0x83df,0x840f,0x8403,0x83f8,0x83f9,
-0x83ea,0x83c5,0x83c0,0x8426,0x83f0,0x83e1,0x845c,0x8451,
-0x845a,0x8459,0x8473,0x8487,0x8488,0x847a,0x8489,0x8478,
-0x843c,0x8446,0x8469,0x8476,0x848c,0x848e,0x8431,0x846d,
-0x84c1,0x84cd,0x84d0,0x84e6,0x84bd,0x84d3,0x84ca,0x84bf,
-0x84ba,0x84e0,0x84a1,0x84b9,0x84b4,0x8497,0x84e5,0x84e3,
-0x850c,0x750d,0x8538,0x84f0,0x8539,0x851f,0x853a,0x0000,
-/* 0xde00 */
-0x8f45,0x8f46,0x8f47,0x8f48,0x8f49,0x8f4a,0x8f4b,0x8f4c,
-0x8f4d,0x8f4e,0x8f4f,0x8f50,0x8f51,0x8f52,0x8f53,0x8f54,
-0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,0x8f5b,0x8f5c,
-0x8f5d,0x8f5e,0x8f5f,0x8f60,0x8f61,0x8f62,0x8f63,0x8f64,
-0x8f65,0x8f6a,0x8f80,0x8f8c,0x8f92,0x8f9d,0x8fa0,0x8fa1,
-0x8fa2,0x8fa4,0x8fa5,0x8fa6,0x8fa7,0x8faa,0x8fac,0x8fad,
-0x8fae,0x8faf,0x8fb2,0x8fb3,0x8fb4,0x8fb5,0x8fb7,0x8fb8,
-0x8fba,0x8fbb,0x8fbc,0x8fbf,0x8fc0,0x8fc3,0x8fc6,0x0000,
-0x8fc9,0x8fca,0x8fcb,0x8fcc,0x8fcd,0x8fcf,0x8fd2,0x8fd6,
-0x8fd7,0x8fda,0x8fe0,0x8fe1,0x8fe3,0x8fe7,0x8fec,0x8fef,
-0x8ff1,0x8ff2,0x8ff4,0x8ff5,0x8ff6,0x8ffa,0x8ffb,0x8ffc,
-0x8ffe,0x8fff,0x9007,0x9008,0x900c,0x900e,0x9013,0x9015,
-0x9018,0x8556,0x853b,0x84ff,0x84fc,0x8559,0x8548,0x8568,
-0x8564,0x855e,0x857a,0x77a2,0x8543,0x8572,0x857b,0x85a4,
-0x85a8,0x8587,0x858f,0x8579,0x85ae,0x859c,0x8585,0x85b9,
-0x85b7,0x85b0,0x85d3,0x85c1,0x85dc,0x85ff,0x8627,0x8605,
-0x8629,0x8616,0x863c,0x5efe,0x5f08,0x593c,0x5941,0x8037,
-0x5955,0x595a,0x5958,0x530f,0x5c22,0x5c25,0x5c2c,0x5c34,
-0x624c,0x626a,0x629f,0x62bb,0x62ca,0x62da,0x62d7,0x62ee,
-0x6322,0x62f6,0x6339,0x634b,0x6343,0x63ad,0x63f6,0x6371,
-0x637a,0x638e,0x63b4,0x636d,0x63ac,0x638a,0x6369,0x63ae,
-0x63bc,0x63f2,0x63f8,0x63e0,0x63ff,0x63c4,0x63de,0x63ce,
-0x6452,0x63c6,0x63be,0x6445,0x6441,0x640b,0x641b,0x6420,
-0x640c,0x6426,0x6421,0x645e,0x6484,0x646d,0x6496,0x0000,
-/* 0xdf00 */
-0x9019,0x901c,0x9023,0x9024,0x9025,0x9027,0x9028,0x9029,
-0x902a,0x902b,0x902c,0x9030,0x9031,0x9032,0x9033,0x9034,
-0x9037,0x9039,0x903a,0x903d,0x903f,0x9040,0x9043,0x9045,
-0x9046,0x9048,0x9049,0x904a,0x904b,0x904c,0x904e,0x9054,
-0x9055,0x9056,0x9059,0x905a,0x905c,0x905d,0x905e,0x905f,
-0x9060,0x9061,0x9064,0x9066,0x9067,0x9069,0x906a,0x906b,
-0x906c,0x906f,0x9070,0x9071,0x9072,0x9073,0x9076,0x9077,
-0x9078,0x9079,0x907a,0x907b,0x907c,0x907e,0x9081,0x0000,
-0x9084,0x9085,0x9086,0x9087,0x9089,0x908a,0x908c,0x908d,
-0x908e,0x908f,0x9090,0x9092,0x9094,0x9096,0x9098,0x909a,
-0x909c,0x909e,0x909f,0x90a0,0x90a4,0x90a5,0x90a7,0x90a8,
-0x90a9,0x90ab,0x90ad,0x90b2,0x90b7,0x90bc,0x90bd,0x90bf,
-0x90c0,0x647a,0x64b7,0x64b8,0x6499,0x64ba,0x64c0,0x64d0,
-0x64d7,0x64e4,0x64e2,0x6509,0x6525,0x652e,0x5f0b,0x5fd2,
-0x7519,0x5f11,0x535f,0x53f1,0x53fd,0x53e9,0x53e8,0x53fb,
-0x5412,0x5416,0x5406,0x544b,0x5452,0x5453,0x5454,0x5456,
-0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,0x5494,
-0x5477,0x5471,0x5464,0x549a,0x549b,0x5484,0x5476,0x5466,
-0x549d,0x54d0,0x54ad,0x54c2,0x54b4,0x54d2,0x54a7,0x54a6,
-0x54d3,0x54d4,0x5472,0x54a3,0x54d5,0x54bb,0x54bf,0x54cc,
-0x54d9,0x54da,0x54dc,0x54a9,0x54aa,0x54a4,0x54dd,0x54cf,
-0x54de,0x551b,0x54e7,0x5520,0x54fd,0x5514,0x54f3,0x5522,
-0x5523,0x550f,0x5511,0x5527,0x552a,0x5567,0x558f,0x55b5,
-0x5549,0x556d,0x5541,0x5555,0x553f,0x5550,0x553c,0x0000,
-/* 0xe000 */
-0x90c2,0x90c3,0x90c6,0x90c8,0x90c9,0x90cb,0x90cc,0x90cd,
-0x90d2,0x90d4,0x90d5,0x90d6,0x90d8,0x90d9,0x90da,0x90de,
-0x90df,0x90e0,0x90e3,0x90e4,0x90e5,0x90e9,0x90ea,0x90ec,
-0x90ee,0x90f0,0x90f1,0x90f2,0x90f3,0x90f5,0x90f6,0x90f7,
-0x90f9,0x90fa,0x90fb,0x90fc,0x90ff,0x9100,0x9101,0x9103,
-0x9105,0x9106,0x9107,0x9108,0x9109,0x910a,0x910b,0x910c,
-0x910d,0x910e,0x910f,0x9110,0x9111,0x9112,0x9113,0x9114,
-0x9115,0x9116,0x9117,0x9118,0x911a,0x911b,0x911c,0x0000,
-0x911d,0x911f,0x9120,0x9121,0x9124,0x9125,0x9126,0x9127,
-0x9128,0x9129,0x912a,0x912b,0x912c,0x912d,0x912e,0x9130,
-0x9132,0x9133,0x9134,0x9135,0x9136,0x9137,0x9138,0x913a,
-0x913b,0x913c,0x913d,0x913e,0x913f,0x9140,0x9141,0x9142,
-0x9144,0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530,
-0x555c,0x558b,0x55d2,0x5583,0x55b1,0x55b9,0x5588,0x5581,
-0x559f,0x557e,0x55d6,0x5591,0x557b,0x55df,0x55bd,0x55be,
-0x5594,0x5599,0x55ea,0x55f7,0x55c9,0x561f,0x55d1,0x55eb,
-0x55ec,0x55d4,0x55e6,0x55dd,0x55c4,0x55ef,0x55e5,0x55f2,
-0x55f3,0x55cc,0x55cd,0x55e8,0x55f5,0x55e4,0x8f94,0x561e,
-0x5608,0x560c,0x5601,0x5624,0x5623,0x55fe,0x5600,0x5627,
-0x562d,0x5658,0x5639,0x5657,0x562c,0x564d,0x5662,0x5659,
-0x565c,0x564c,0x5654,0x5686,0x5664,0x5671,0x566b,0x567b,
-0x567c,0x5685,0x5693,0x56af,0x56d4,0x56d7,0x56dd,0x56e1,
-0x56f5,0x56eb,0x56f9,0x56ff,0x5704,0x570a,0x5709,0x571c,
-0x5e0f,0x5e19,0x5e14,0x5e11,0x5e31,0x5e3b,0x5e3c,0x0000,
-/* 0xe100 */
-0x9145,0x9147,0x9148,0x9151,0x9153,0x9154,0x9155,0x9156,
-0x9158,0x9159,0x915b,0x915c,0x915f,0x9160,0x9166,0x9167,
-0x9168,0x916b,0x916d,0x9173,0x917a,0x917b,0x917c,0x9180,
-0x9181,0x9182,0x9183,0x9184,0x9186,0x9188,0x918a,0x918e,
-0x918f,0x9193,0x9194,0x9195,0x9196,0x9197,0x9198,0x9199,
-0x919c,0x919d,0x919e,0x919f,0x91a0,0x91a1,0x91a4,0x91a5,
-0x91a6,0x91a7,0x91a8,0x91a9,0x91ab,0x91ac,0x91b0,0x91b1,
-0x91b2,0x91b3,0x91b6,0x91b7,0x91b8,0x91b9,0x91bb,0x0000,
-0x91bc,0x91bd,0x91be,0x91bf,0x91c0,0x91c1,0x91c2,0x91c3,
-0x91c4,0x91c5,0x91c6,0x91c8,0x91cb,0x91d0,0x91d2,0x91d3,
-0x91d4,0x91d5,0x91d6,0x91d7,0x91d8,0x91d9,0x91da,0x91db,
-0x91dd,0x91de,0x91df,0x91e0,0x91e1,0x91e2,0x91e3,0x91e4,
-0x91e5,0x5e37,0x5e44,0x5e54,0x5e5b,0x5e5e,0x5e61,0x5c8c,
-0x5c7a,0x5c8d,0x5c90,0x5c96,0x5c88,0x5c98,0x5c99,0x5c91,
-0x5c9a,0x5c9c,0x5cb5,0x5ca2,0x5cbd,0x5cac,0x5cab,0x5cb1,
-0x5ca3,0x5cc1,0x5cb7,0x5cc4,0x5cd2,0x5ce4,0x5ccb,0x5ce5,
-0x5d02,0x5d03,0x5d27,0x5d26,0x5d2e,0x5d24,0x5d1e,0x5d06,
-0x5d1b,0x5d58,0x5d3e,0x5d34,0x5d3d,0x5d6c,0x5d5b,0x5d6f,
-0x5d5d,0x5d6b,0x5d4b,0x5d4a,0x5d69,0x5d74,0x5d82,0x5d99,
-0x5d9d,0x8c73,0x5db7,0x5dc5,0x5f73,0x5f77,0x5f82,0x5f87,
-0x5f89,0x5f8c,0x5f95,0x5f99,0x5f9c,0x5fa8,0x5fad,0x5fb5,
-0x5fbc,0x8862,0x5f61,0x72ad,0x72b0,0x72b4,0x72b7,0x72b8,
-0x72c3,0x72c1,0x72ce,0x72cd,0x72d2,0x72e8,0x72ef,0x72e9,
-0x72f2,0x72f4,0x72f7,0x7301,0x72f3,0x7303,0x72fa,0x0000,
-/* 0xe200 */
-0x91e6,0x91e7,0x91e8,0x91e9,0x91ea,0x91eb,0x91ec,0x91ed,
-0x91ee,0x91ef,0x91f0,0x91f1,0x91f2,0x91f3,0x91f4,0x91f5,
-0x91f6,0x91f7,0x91f8,0x91f9,0x91fa,0x91fb,0x91fc,0x91fd,
-0x91fe,0x91ff,0x9200,0x9201,0x9202,0x9203,0x9204,0x9205,
-0x9206,0x9207,0x9208,0x9209,0x920a,0x920b,0x920c,0x920d,
-0x920e,0x920f,0x9210,0x9211,0x9212,0x9213,0x9214,0x9215,
-0x9216,0x9217,0x9218,0x9219,0x921a,0x921b,0x921c,0x921d,
-0x921e,0x921f,0x9220,0x9221,0x9222,0x9223,0x9224,0x0000,
-0x9225,0x9226,0x9227,0x9228,0x9229,0x922a,0x922b,0x922c,
-0x922d,0x922e,0x922f,0x9230,0x9231,0x9232,0x9233,0x9234,
-0x9235,0x9236,0x9237,0x9238,0x9239,0x923a,0x923b,0x923c,
-0x923d,0x923e,0x923f,0x9240,0x9241,0x9242,0x9243,0x9244,
-0x9245,0x72fb,0x7317,0x7313,0x7321,0x730a,0x731e,0x731d,
-0x7315,0x7322,0x7339,0x7325,0x732c,0x7338,0x7331,0x7350,
-0x734d,0x7357,0x7360,0x736c,0x736f,0x737e,0x821b,0x5925,
-0x98e7,0x5924,0x5902,0x9963,0x9967,0x9968,0x9969,0x996a,
-0x996b,0x996c,0x9974,0x9977,0x997d,0x9980,0x9984,0x9987,
-0x998a,0x998d,0x9990,0x9991,0x9993,0x9994,0x9995,0x5e80,
-0x5e91,0x5e8b,0x5e96,0x5ea5,0x5ea0,0x5eb9,0x5eb5,0x5ebe,
-0x5eb3,0x8d53,0x5ed2,0x5ed1,0x5edb,0x5ee8,0x5eea,0x81ba,
-0x5fc4,0x5fc9,0x5fd6,0x5fcf,0x6003,0x5fee,0x6004,0x5fe1,
-0x5fe4,0x5ffe,0x6005,0x6006,0x5fea,0x5fed,0x5ff8,0x6019,
-0x6035,0x6026,0x601b,0x600f,0x600d,0x6029,0x602b,0x600a,
-0x603f,0x6021,0x6078,0x6079,0x607b,0x607a,0x6042,0x0000,
-/* 0xe300 */
-0x9246,0x9247,0x9248,0x9249,0x924a,0x924b,0x924c,0x924d,
-0x924e,0x924f,0x9250,0x9251,0x9252,0x9253,0x9254,0x9255,
-0x9256,0x9257,0x9258,0x9259,0x925a,0x925b,0x925c,0x925d,
-0x925e,0x925f,0x9260,0x9261,0x9262,0x9263,0x9264,0x9265,
-0x9266,0x9267,0x9268,0x9269,0x926a,0x926b,0x926c,0x926d,
-0x926e,0x926f,0x9270,0x9271,0x9272,0x9273,0x9275,0x9276,
-0x9277,0x9278,0x9279,0x927a,0x927b,0x927c,0x927d,0x927e,
-0x927f,0x9280,0x9281,0x9282,0x9283,0x9284,0x9285,0x0000,
-0x9286,0x9287,0x9288,0x9289,0x928a,0x928b,0x928c,0x928d,
-0x928f,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296,
-0x9297,0x9298,0x9299,0x929a,0x929b,0x929c,0x929d,0x929e,
-0x929f,0x92a0,0x92a1,0x92a2,0x92a3,0x92a4,0x92a5,0x92a6,
-0x92a7,0x606a,0x607d,0x6096,0x609a,0x60ad,0x609d,0x6083,
-0x6092,0x608c,0x609b,0x60ec,0x60bb,0x60b1,0x60dd,0x60d8,
-0x60c6,0x60da,0x60b4,0x6120,0x6126,0x6115,0x6123,0x60f4,
-0x6100,0x610e,0x612b,0x614a,0x6175,0x61ac,0x6194,0x61a7,
-0x61b7,0x61d4,0x61f5,0x5fdd,0x96b3,0x95e9,0x95eb,0x95f1,
-0x95f3,0x95f5,0x95f6,0x95fc,0x95fe,0x9603,0x9604,0x9606,
-0x9608,0x960a,0x960b,0x960c,0x960d,0x960f,0x9612,0x9615,
-0x9616,0x9617,0x9619,0x961a,0x4e2c,0x723f,0x6215,0x6c35,
-0x6c54,0x6c5c,0x6c4a,0x6ca3,0x6c85,0x6c90,0x6c94,0x6c8c,
-0x6c68,0x6c69,0x6c74,0x6c76,0x6c86,0x6ca9,0x6cd0,0x6cd4,
-0x6cad,0x6cf7,0x6cf8,0x6cf1,0x6cd7,0x6cb2,0x6ce0,0x6cd6,
-0x6cfa,0x6ceb,0x6cee,0x6cb1,0x6cd3,0x6cef,0x6cfe,0x0000,
-/* 0xe400 */
-0x92a8,0x92a9,0x92aa,0x92ab,0x92ac,0x92ad,0x92af,0x92b0,
-0x92b1,0x92b2,0x92b3,0x92b4,0x92b5,0x92b6,0x92b7,0x92b8,
-0x92b9,0x92ba,0x92bb,0x92bc,0x92bd,0x92be,0x92bf,0x92c0,
-0x92c1,0x92c2,0x92c3,0x92c4,0x92c5,0x92c6,0x92c7,0x92c9,
-0x92ca,0x92cb,0x92cc,0x92cd,0x92ce,0x92cf,0x92d0,0x92d1,
-0x92d2,0x92d3,0x92d4,0x92d5,0x92d6,0x92d7,0x92d8,0x92d9,
-0x92da,0x92db,0x92dc,0x92dd,0x92de,0x92df,0x92e0,0x92e1,
-0x92e2,0x92e3,0x92e4,0x92e5,0x92e6,0x92e7,0x92e8,0x0000,
-0x92e9,0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,
-0x92f1,0x92f2,0x92f3,0x92f4,0x92f5,0x92f6,0x92f7,0x92f8,
-0x92f9,0x92fa,0x92fb,0x92fc,0x92fd,0x92fe,0x92ff,0x9300,
-0x9301,0x9302,0x9303,0x9304,0x9305,0x9306,0x9307,0x9308,
-0x9309,0x6d39,0x6d27,0x6d0c,0x6d43,0x6d48,0x6d07,0x6d04,
-0x6d19,0x6d0e,0x6d2b,0x6d4d,0x6d2e,0x6d35,0x6d1a,0x6d4f,
-0x6d52,0x6d54,0x6d33,0x6d91,0x6d6f,0x6d9e,0x6da0,0x6d5e,
-0x6d93,0x6d94,0x6d5c,0x6d60,0x6d7c,0x6d63,0x6e1a,0x6dc7,
-0x6dc5,0x6dde,0x6e0e,0x6dbf,0x6de0,0x6e11,0x6de6,0x6ddd,
-0x6dd9,0x6e16,0x6dab,0x6e0c,0x6dae,0x6e2b,0x6e6e,0x6e4e,
-0x6e6b,0x6eb2,0x6e5f,0x6e86,0x6e53,0x6e54,0x6e32,0x6e25,
-0x6e44,0x6edf,0x6eb1,0x6e98,0x6ee0,0x6f2d,0x6ee2,0x6ea5,
-0x6ea7,0x6ebd,0x6ebb,0x6eb7,0x6ed7,0x6eb4,0x6ecf,0x6e8f,
-0x6ec2,0x6e9f,0x6f62,0x6f46,0x6f47,0x6f24,0x6f15,0x6ef9,
-0x6f2f,0x6f36,0x6f4b,0x6f74,0x6f2a,0x6f09,0x6f29,0x6f89,
-0x6f8d,0x6f8c,0x6f78,0x6f72,0x6f7c,0x6f7a,0x6fd1,0x0000,
-/* 0xe500 */
-0x930a,0x930b,0x930c,0x930d,0x930e,0x930f,0x9310,0x9311,
-0x9312,0x9313,0x9314,0x9315,0x9316,0x9317,0x9318,0x9319,
-0x931a,0x931b,0x931c,0x931d,0x931e,0x931f,0x9320,0x9321,
-0x9322,0x9323,0x9324,0x9325,0x9326,0x9327,0x9328,0x9329,
-0x932a,0x932b,0x932c,0x932d,0x932e,0x932f,0x9330,0x9331,
-0x9332,0x9333,0x9334,0x9335,0x9336,0x9337,0x9338,0x9339,
-0x933a,0x933b,0x933c,0x933d,0x933f,0x9340,0x9341,0x9342,
-0x9343,0x9344,0x9345,0x9346,0x9347,0x9348,0x9349,0x0000,
-0x934a,0x934b,0x934c,0x934d,0x934e,0x934f,0x9350,0x9351,
-0x9352,0x9353,0x9354,0x9355,0x9356,0x9357,0x9358,0x9359,
-0x935a,0x935b,0x935c,0x935d,0x935e,0x935f,0x9360,0x9361,
-0x9362,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369,
-0x936b,0x6fc9,0x6fa7,0x6fb9,0x6fb6,0x6fc2,0x6fe1,0x6fee,
-0x6fde,0x6fe0,0x6fef,0x701a,0x7023,0x701b,0x7039,0x7035,
-0x704f,0x705e,0x5b80,0x5b84,0x5b95,0x5b93,0x5ba5,0x5bb8,
-0x752f,0x9a9e,0x6434,0x5be4,0x5bee,0x8930,0x5bf0,0x8e47,
-0x8b07,0x8fb6,0x8fd3,0x8fd5,0x8fe5,0x8fee,0x8fe4,0x8fe9,
-0x8fe6,0x8ff3,0x8fe8,0x9005,0x9004,0x900b,0x9026,0x9011,
-0x900d,0x9016,0x9021,0x9035,0x9036,0x902d,0x902f,0x9044,
-0x9051,0x9052,0x9050,0x9068,0x9058,0x9062,0x905b,0x66b9,
-0x9074,0x907d,0x9082,0x9088,0x9083,0x908b,0x5f50,0x5f57,
-0x5f56,0x5f58,0x5c3b,0x54ab,0x5c50,0x5c59,0x5b71,0x5c63,
-0x5c66,0x7fbc,0x5f2a,0x5f29,0x5f2d,0x8274,0x5f3c,0x9b3b,
-0x5c6e,0x5981,0x5983,0x598d,0x59a9,0x59aa,0x59a3,0x0000,
-/* 0xe600 */
-0x936c,0x936d,0x936e,0x936f,0x9370,0x9371,0x9372,0x9373,
-0x9374,0x9375,0x9376,0x9377,0x9378,0x9379,0x937a,0x937b,
-0x937c,0x937d,0x937e,0x937f,0x9380,0x9381,0x9382,0x9383,
-0x9384,0x9385,0x9386,0x9387,0x9388,0x9389,0x938a,0x938b,
-0x938c,0x938d,0x938e,0x9390,0x9391,0x9392,0x9393,0x9394,
-0x9395,0x9396,0x9397,0x9398,0x9399,0x939a,0x939b,0x939c,
-0x939d,0x939e,0x939f,0x93a0,0x93a1,0x93a2,0x93a3,0x93a4,
-0x93a5,0x93a6,0x93a7,0x93a8,0x93a9,0x93aa,0x93ab,0x0000,
-0x93ac,0x93ad,0x93ae,0x93af,0x93b0,0x93b1,0x93b2,0x93b3,
-0x93b4,0x93b5,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,0x93bb,
-0x93bc,0x93bd,0x93be,0x93bf,0x93c0,0x93c1,0x93c2,0x93c3,
-0x93c4,0x93c5,0x93c6,0x93c7,0x93c8,0x93c9,0x93cb,0x93cc,
-0x93cd,0x5997,0x59ca,0x59ab,0x599e,0x59a4,0x59d2,0x59b2,
-0x59af,0x59d7,0x59be,0x5a05,0x5a06,0x59dd,0x5a08,0x59e3,
-0x59d8,0x59f9,0x5a0c,0x5a09,0x5a32,0x5a34,0x5a11,0x5a23,
-0x5a13,0x5a40,0x5a67,0x5a4a,0x5a55,0x5a3c,0x5a62,0x5a75,
-0x80ec,0x5aaa,0x5a9b,0x5a77,0x5a7a,0x5abe,0x5aeb,0x5ab2,
-0x5ad2,0x5ad4,0x5ab8,0x5ae0,0x5ae3,0x5af1,0x5ad6,0x5ae6,
-0x5ad8,0x5adc,0x5b09,0x5b17,0x5b16,0x5b32,0x5b37,0x5b40,
-0x5c15,0x5c1c,0x5b5a,0x5b65,0x5b73,0x5b51,0x5b53,0x5b62,
-0x9a75,0x9a77,0x9a78,0x9a7a,0x9a7f,0x9a7d,0x9a80,0x9a81,
-0x9a85,0x9a88,0x9a8a,0x9a90,0x9a92,0x9a93,0x9a96,0x9a98,
-0x9a9b,0x9a9c,0x9a9d,0x9a9f,0x9aa0,0x9aa2,0x9aa3,0x9aa5,
-0x9aa7,0x7e9f,0x7ea1,0x7ea3,0x7ea5,0x7ea8,0x7ea9,0x0000,
-/* 0xe700 */
-0x93ce,0x93cf,0x93d0,0x93d1,0x93d2,0x93d3,0x93d4,0x93d5,
-0x93d7,0x93d8,0x93d9,0x93da,0x93db,0x93dc,0x93dd,0x93de,
-0x93df,0x93e0,0x93e1,0x93e2,0x93e3,0x93e4,0x93e5,0x93e6,
-0x93e7,0x93e8,0x93e9,0x93ea,0x93eb,0x93ec,0x93ed,0x93ee,
-0x93ef,0x93f0,0x93f1,0x93f2,0x93f3,0x93f4,0x93f5,0x93f6,
-0x93f7,0x93f8,0x93f9,0x93fa,0x93fb,0x93fc,0x93fd,0x93fe,
-0x93ff,0x9400,0x9401,0x9402,0x9403,0x9404,0x9405,0x9406,
-0x9407,0x9408,0x9409,0x940a,0x940b,0x940c,0x940d,0x0000,
-0x940e,0x940f,0x9410,0x9411,0x9412,0x9413,0x9414,0x9415,
-0x9416,0x9417,0x9418,0x9419,0x941a,0x941b,0x941c,0x941d,
-0x941e,0x941f,0x9420,0x9421,0x9422,0x9423,0x9424,0x9425,
-0x9426,0x9427,0x9428,0x9429,0x942a,0x942b,0x942c,0x942d,
-0x942e,0x7ead,0x7eb0,0x7ebe,0x7ec0,0x7ec1,0x7ec2,0x7ec9,
-0x7ecb,0x7ecc,0x7ed0,0x7ed4,0x7ed7,0x7edb,0x7ee0,0x7ee1,
-0x7ee8,0x7eeb,0x7eee,0x7eef,0x7ef1,0x7ef2,0x7f0d,0x7ef6,
-0x7efa,0x7efb,0x7efe,0x7f01,0x7f02,0x7f03,0x7f07,0x7f08,
-0x7f0b,0x7f0c,0x7f0f,0x7f11,0x7f12,0x7f17,0x7f19,0x7f1c,
-0x7f1b,0x7f1f,0x7f21,0x7f22,0x7f23,0x7f24,0x7f25,0x7f26,
-0x7f27,0x7f2a,0x7f2b,0x7f2c,0x7f2d,0x7f2f,0x7f30,0x7f31,
-0x7f32,0x7f33,0x7f35,0x5e7a,0x757f,0x5ddb,0x753e,0x9095,
-0x738e,0x7391,0x73ae,0x73a2,0x739f,0x73cf,0x73c2,0x73d1,
-0x73b7,0x73b3,0x73c0,0x73c9,0x73c8,0x73e5,0x73d9,0x987c,
-0x740a,0x73e9,0x73e7,0x73de,0x73ba,0x73f2,0x740f,0x742a,
-0x745b,0x7426,0x7425,0x7428,0x7430,0x742e,0x742c,0x0000,
-/* 0xe800 */
-0x942f,0x9430,0x9431,0x9432,0x9433,0x9434,0x9435,0x9436,
-0x9437,0x9438,0x9439,0x943a,0x943b,0x943c,0x943d,0x943f,
-0x9440,0x9441,0x9442,0x9443,0x9444,0x9445,0x9446,0x9447,
-0x9448,0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,0x944f,
-0x9450,0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,
-0x9458,0x9459,0x945a,0x945b,0x945c,0x945d,0x945e,0x945f,
-0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467,
-0x9468,0x9469,0x946a,0x946c,0x946d,0x946e,0x946f,0x0000,
-0x9470,0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,
-0x9478,0x9479,0x947a,0x947b,0x947c,0x947d,0x947e,0x947f,
-0x9480,0x9481,0x9482,0x9483,0x9484,0x9491,0x9496,0x9498,
-0x94c7,0x94cf,0x94d3,0x94d4,0x94da,0x94e6,0x94fb,0x951c,
-0x9520,0x741b,0x741a,0x7441,0x745c,0x7457,0x7455,0x7459,
-0x7477,0x746d,0x747e,0x749c,0x748e,0x7480,0x7481,0x7487,
-0x748b,0x749e,0x74a8,0x74a9,0x7490,0x74a7,0x74d2,0x74ba,
-0x97ea,0x97eb,0x97ec,0x674c,0x6753,0x675e,0x6748,0x6769,
-0x67a5,0x6787,0x676a,0x6773,0x6798,0x67a7,0x6775,0x67a8,
-0x679e,0x67ad,0x678b,0x6777,0x677c,0x67f0,0x6809,0x67d8,
-0x680a,0x67e9,0x67b0,0x680c,0x67d9,0x67b5,0x67da,0x67b3,
-0x67dd,0x6800,0x67c3,0x67b8,0x67e2,0x680e,0x67c1,0x67fd,
-0x6832,0x6833,0x6860,0x6861,0x684e,0x6862,0x6844,0x6864,
-0x6883,0x681d,0x6855,0x6866,0x6841,0x6867,0x6840,0x683e,
-0x684a,0x6849,0x6829,0x68b5,0x688f,0x6874,0x6877,0x6893,
-0x686b,0x68c2,0x696e,0x68fc,0x691f,0x6920,0x68f9,0x0000,
-/* 0xe900 */
-0x9527,0x9533,0x953d,0x9543,0x9548,0x954b,0x9555,0x955a,
-0x9560,0x956e,0x9574,0x9575,0x9577,0x9578,0x9579,0x957a,
-0x957b,0x957c,0x957d,0x957e,0x9580,0x9581,0x9582,0x9583,
-0x9584,0x9585,0x9586,0x9587,0x9588,0x9589,0x958a,0x958b,
-0x958c,0x958d,0x958e,0x958f,0x9590,0x9591,0x9592,0x9593,
-0x9594,0x9595,0x9596,0x9597,0x9598,0x9599,0x959a,0x959b,
-0x959c,0x959d,0x959e,0x959f,0x95a0,0x95a1,0x95a2,0x95a3,
-0x95a4,0x95a5,0x95a6,0x95a7,0x95a8,0x95a9,0x95aa,0x0000,
-0x95ab,0x95ac,0x95ad,0x95ae,0x95af,0x95b0,0x95b1,0x95b2,
-0x95b3,0x95b4,0x95b5,0x95b6,0x95b7,0x95b8,0x95b9,0x95ba,
-0x95bb,0x95bc,0x95bd,0x95be,0x95bf,0x95c0,0x95c1,0x95c2,
-0x95c3,0x95c4,0x95c5,0x95c6,0x95c7,0x95c8,0x95c9,0x95ca,
-0x95cb,0x6924,0x68f0,0x690b,0x6901,0x6957,0x68e3,0x6910,
-0x6971,0x6939,0x6960,0x6942,0x695d,0x6984,0x696b,0x6980,
-0x6998,0x6978,0x6934,0x69cc,0x6987,0x6988,0x69ce,0x6989,
-0x6966,0x6963,0x6979,0x699b,0x69a7,0x69bb,0x69ab,0x69ad,
-0x69d4,0x69b1,0x69c1,0x69ca,0x69df,0x6995,0x69e0,0x698d,
-0x69ff,0x6a2f,0x69ed,0x6a17,0x6a18,0x6a65,0x69f2,0x6a44,
-0x6a3e,0x6aa0,0x6a50,0x6a5b,0x6a35,0x6a8e,0x6a79,0x6a3d,
-0x6a28,0x6a58,0x6a7c,0x6a91,0x6a90,0x6aa9,0x6a97,0x6aab,
-0x7337,0x7352,0x6b81,0x6b82,0x6b87,0x6b84,0x6b92,0x6b93,
-0x6b8d,0x6b9a,0x6b9b,0x6ba1,0x6baa,0x8f6b,0x8f6d,0x8f71,
-0x8f72,0x8f73,0x8f75,0x8f76,0x8f78,0x8f77,0x8f79,0x8f7a,
-0x8f7c,0x8f7e,0x8f81,0x8f82,0x8f84,0x8f87,0x8f8b,0x0000,
-/* 0xea00 */
-0x95cc,0x95cd,0x95ce,0x95cf,0x95d0,0x95d1,0x95d2,0x95d3,
-0x95d4,0x95d5,0x95d6,0x95d7,0x95d8,0x95d9,0x95da,0x95db,
-0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,0x95e2,0x95e3,
-0x95e4,0x95e5,0x95e6,0x95e7,0x95ec,0x95ff,0x9607,0x9613,
-0x9618,0x961b,0x961e,0x9620,0x9623,0x9624,0x9625,0x9626,
-0x9627,0x9628,0x9629,0x962b,0x962c,0x962d,0x962f,0x9630,
-0x9637,0x9638,0x9639,0x963a,0x963e,0x9641,0x9643,0x964a,
-0x964e,0x964f,0x9651,0x9652,0x9653,0x9656,0x9657,0x0000,
-0x9658,0x9659,0x965a,0x965c,0x965d,0x965e,0x9660,0x9663,
-0x9665,0x9666,0x966b,0x966d,0x966e,0x966f,0x9670,0x9671,
-0x9673,0x9678,0x9679,0x967a,0x967b,0x967c,0x967d,0x967e,
-0x967f,0x9680,0x9681,0x9682,0x9683,0x9684,0x9687,0x9689,
-0x968a,0x8f8d,0x8f8e,0x8f8f,0x8f98,0x8f9a,0x8ece,0x620b,
-0x6217,0x621b,0x621f,0x6222,0x6221,0x6225,0x6224,0x622c,
-0x81e7,0x74ef,0x74f4,0x74ff,0x750f,0x7511,0x7513,0x6534,
-0x65ee,0x65ef,0x65f0,0x660a,0x6619,0x6772,0x6603,0x6615,
-0x6600,0x7085,0x66f7,0x661d,0x6634,0x6631,0x6636,0x6635,
-0x8006,0x665f,0x6654,0x6641,0x664f,0x6656,0x6661,0x6657,
-0x6677,0x6684,0x668c,0x66a7,0x669d,0x66be,0x66db,0x66dc,
-0x66e6,0x66e9,0x8d32,0x8d33,0x8d36,0x8d3b,0x8d3d,0x8d40,
-0x8d45,0x8d46,0x8d48,0x8d49,0x8d47,0x8d4d,0x8d55,0x8d59,
-0x89c7,0x89ca,0x89cb,0x89cc,0x89ce,0x89cf,0x89d0,0x89d1,
-0x726e,0x729f,0x725d,0x7266,0x726f,0x727e,0x727f,0x7284,
-0x728b,0x728d,0x728f,0x7292,0x6308,0x6332,0x63b0,0x0000,
-/* 0xeb00 */
-0x968c,0x968e,0x9691,0x9692,0x9693,0x9695,0x9696,0x969a,
-0x969b,0x969d,0x969e,0x969f,0x96a0,0x96a1,0x96a2,0x96a3,
-0x96a4,0x96a5,0x96a6,0x96a8,0x96a9,0x96aa,0x96ab,0x96ac,
-0x96ad,0x96ae,0x96af,0x96b1,0x96b2,0x96b4,0x96b5,0x96b7,
-0x96b8,0x96ba,0x96bb,0x96bf,0x96c2,0x96c3,0x96c8,0x96ca,
-0x96cb,0x96d0,0x96d1,0x96d3,0x96d4,0x96d6,0x96d7,0x96d8,
-0x96d9,0x96da,0x96db,0x96dc,0x96dd,0x96de,0x96df,0x96e1,
-0x96e2,0x96e3,0x96e4,0x96e5,0x96e6,0x96e7,0x96eb,0x0000,
-0x96ec,0x96ed,0x96ee,0x96f0,0x96f1,0x96f2,0x96f4,0x96f5,
-0x96f8,0x96fa,0x96fb,0x96fc,0x96fd,0x96ff,0x9702,0x9703,
-0x9705,0x970a,0x970b,0x970c,0x9710,0x9711,0x9712,0x9714,
-0x9715,0x9717,0x9718,0x9719,0x971a,0x971b,0x971d,0x971f,
-0x9720,0x643f,0x64d8,0x8004,0x6bea,0x6bf3,0x6bfd,0x6bf5,
-0x6bf9,0x6c05,0x6c07,0x6c06,0x6c0d,0x6c15,0x6c18,0x6c19,
-0x6c1a,0x6c21,0x6c29,0x6c24,0x6c2a,0x6c32,0x6535,0x6555,
-0x656b,0x724d,0x7252,0x7256,0x7230,0x8662,0x5216,0x809f,
-0x809c,0x8093,0x80bc,0x670a,0x80bd,0x80b1,0x80ab,0x80ad,
-0x80b4,0x80b7,0x80e7,0x80e8,0x80e9,0x80ea,0x80db,0x80c2,
-0x80c4,0x80d9,0x80cd,0x80d7,0x6710,0x80dd,0x80eb,0x80f1,
-0x80f4,0x80ed,0x810d,0x810e,0x80f2,0x80fc,0x6715,0x8112,
-0x8c5a,0x8136,0x811e,0x812c,0x8118,0x8132,0x8148,0x814c,
-0x8153,0x8174,0x8159,0x815a,0x8171,0x8160,0x8169,0x817c,
-0x817d,0x816d,0x8167,0x584d,0x5ab5,0x8188,0x8182,0x8191,
-0x6ed5,0x81a3,0x81aa,0x81cc,0x6726,0x81ca,0x81bb,0x0000,
-/* 0xec00 */
-0x9721,0x9722,0x9723,0x9724,0x9725,0x9726,0x9727,0x9728,
-0x9729,0x972b,0x972c,0x972e,0x972f,0x9731,0x9733,0x9734,
-0x9735,0x9736,0x9737,0x973a,0x973b,0x973c,0x973d,0x973f,
-0x9740,0x9741,0x9742,0x9743,0x9744,0x9745,0x9746,0x9747,
-0x9748,0x9749,0x974a,0x974b,0x974c,0x974d,0x974e,0x974f,
-0x9750,0x9751,0x9754,0x9755,0x9757,0x9758,0x975a,0x975c,
-0x975d,0x975f,0x9763,0x9764,0x9766,0x9767,0x9768,0x976a,
-0x976b,0x976c,0x976d,0x976e,0x976f,0x9770,0x9771,0x0000,
-0x9772,0x9775,0x9777,0x9778,0x9779,0x977a,0x977b,0x977d,
-0x977e,0x977f,0x9780,0x9781,0x9782,0x9783,0x9784,0x9786,
-0x9787,0x9788,0x9789,0x978a,0x978c,0x978e,0x978f,0x9790,
-0x9793,0x9795,0x9796,0x9797,0x9799,0x979a,0x979b,0x979c,
-0x979d,0x81c1,0x81a6,0x6b24,0x6b37,0x6b39,0x6b43,0x6b46,
-0x6b59,0x98d1,0x98d2,0x98d3,0x98d5,0x98d9,0x98da,0x6bb3,
-0x5f40,0x6bc2,0x89f3,0x6590,0x9f51,0x6593,0x65bc,0x65c6,
-0x65c4,0x65c3,0x65cc,0x65ce,0x65d2,0x65d6,0x7080,0x709c,
-0x7096,0x709d,0x70bb,0x70c0,0x70b7,0x70ab,0x70b1,0x70e8,
-0x70ca,0x7110,0x7113,0x7116,0x712f,0x7131,0x7173,0x715c,
-0x7168,0x7145,0x7172,0x714a,0x7178,0x717a,0x7198,0x71b3,
-0x71b5,0x71a8,0x71a0,0x71e0,0x71d4,0x71e7,0x71f9,0x721d,
-0x7228,0x706c,0x7118,0x7166,0x71b9,0x623e,0x623d,0x6243,
-0x6248,0x6249,0x793b,0x7940,0x7946,0x7949,0x795b,0x795c,
-0x7953,0x795a,0x7962,0x7957,0x7960,0x796f,0x7967,0x797a,
-0x7985,0x798a,0x799a,0x79a7,0x79b3,0x5fd1,0x5fd0,0x0000,
-/* 0xed00 */
-0x979e,0x979f,0x97a1,0x97a2,0x97a4,0x97a5,0x97a6,0x97a7,
-0x97a8,0x97a9,0x97aa,0x97ac,0x97ae,0x97b0,0x97b1,0x97b3,
-0x97b5,0x97b6,0x97b7,0x97b8,0x97b9,0x97ba,0x97bb,0x97bc,
-0x97bd,0x97be,0x97bf,0x97c0,0x97c1,0x97c2,0x97c3,0x97c4,
-0x97c5,0x97c6,0x97c7,0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,
-0x97cd,0x97ce,0x97cf,0x97d0,0x97d1,0x97d2,0x97d3,0x97d4,
-0x97d5,0x97d6,0x97d7,0x97d8,0x97d9,0x97da,0x97db,0x97dc,
-0x97dd,0x97de,0x97df,0x97e0,0x97e1,0x97e2,0x97e3,0x0000,
-0x97e4,0x97e5,0x97e8,0x97ee,0x97ef,0x97f0,0x97f1,0x97f2,
-0x97f4,0x97f7,0x97f8,0x97f9,0x97fa,0x97fb,0x97fc,0x97fd,
-0x97fe,0x97ff,0x9800,0x9801,0x9802,0x9803,0x9804,0x9805,
-0x9806,0x9807,0x9808,0x9809,0x980a,0x980b,0x980c,0x980d,
-0x980e,0x603c,0x605d,0x605a,0x6067,0x6041,0x6059,0x6063,
-0x60ab,0x6106,0x610d,0x615d,0x61a9,0x619d,0x61cb,0x61d1,
-0x6206,0x8080,0x807f,0x6c93,0x6cf6,0x6dfc,0x77f6,0x77f8,
-0x7800,0x7809,0x7817,0x7818,0x7811,0x65ab,0x782d,0x781c,
-0x781d,0x7839,0x783a,0x783b,0x781f,0x783c,0x7825,0x782c,
-0x7823,0x7829,0x784e,0x786d,0x7856,0x7857,0x7826,0x7850,
-0x7847,0x784c,0x786a,0x789b,0x7893,0x789a,0x7887,0x789c,
-0x78a1,0x78a3,0x78b2,0x78b9,0x78a5,0x78d4,0x78d9,0x78c9,
-0x78ec,0x78f2,0x7905,0x78f4,0x7913,0x7924,0x791e,0x7934,
-0x9f9b,0x9ef9,0x9efb,0x9efc,0x76f1,0x7704,0x770d,0x76f9,
-0x7707,0x7708,0x771a,0x7722,0x7719,0x772d,0x7726,0x7735,
-0x7738,0x7750,0x7751,0x7747,0x7743,0x775a,0x7768,0x0000,
-/* 0xee00 */
-0x980f,0x9810,0x9811,0x9812,0x9813,0x9814,0x9815,0x9816,
-0x9817,0x9818,0x9819,0x981a,0x981b,0x981c,0x981d,0x981e,
-0x981f,0x9820,0x9821,0x9822,0x9823,0x9824,0x9825,0x9826,
-0x9827,0x9828,0x9829,0x982a,0x982b,0x982c,0x982d,0x982e,
-0x982f,0x9830,0x9831,0x9832,0x9833,0x9834,0x9835,0x9836,
-0x9837,0x9838,0x9839,0x983a,0x983b,0x983c,0x983d,0x983e,
-0x983f,0x9840,0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,
-0x9847,0x9848,0x9849,0x984a,0x984b,0x984c,0x984d,0x0000,
-0x984e,0x984f,0x9850,0x9851,0x9852,0x9853,0x9854,0x9855,
-0x9856,0x9857,0x9858,0x9859,0x985a,0x985b,0x985c,0x985d,
-0x985e,0x985f,0x9860,0x9861,0x9862,0x9863,0x9864,0x9865,
-0x9866,0x9867,0x9868,0x9869,0x986a,0x986b,0x986c,0x986d,
-0x986e,0x7762,0x7765,0x777f,0x778d,0x777d,0x7780,0x778c,
-0x7791,0x779f,0x77a0,0x77b0,0x77b5,0x77bd,0x753a,0x7540,
-0x754e,0x754b,0x7548,0x755b,0x7572,0x7579,0x7583,0x7f58,
-0x7f61,0x7f5f,0x8a48,0x7f68,0x7f74,0x7f71,0x7f79,0x7f81,
-0x7f7e,0x76cd,0x76e5,0x8832,0x9485,0x9486,0x9487,0x948b,
-0x948a,0x948c,0x948d,0x948f,0x9490,0x9494,0x9497,0x9495,
-0x949a,0x949b,0x949c,0x94a3,0x94a4,0x94ab,0x94aa,0x94ad,
-0x94ac,0x94af,0x94b0,0x94b2,0x94b4,0x94b6,0x94b7,0x94b8,
-0x94b9,0x94ba,0x94bc,0x94bd,0x94bf,0x94c4,0x94c8,0x94c9,
-0x94ca,0x94cb,0x94cc,0x94cd,0x94ce,0x94d0,0x94d1,0x94d2,
-0x94d5,0x94d6,0x94d7,0x94d9,0x94d8,0x94db,0x94de,0x94df,
-0x94e0,0x94e2,0x94e4,0x94e5,0x94e7,0x94e8,0x94ea,0x0000,
-/* 0xef00 */
-0x986f,0x9870,0x9871,0x9872,0x9873,0x9874,0x988b,0x988e,
-0x9892,0x9895,0x9899,0x98a3,0x98a8,0x98a9,0x98aa,0x98ab,
-0x98ac,0x98ad,0x98ae,0x98af,0x98b0,0x98b1,0x98b2,0x98b3,
-0x98b4,0x98b5,0x98b6,0x98b7,0x98b8,0x98b9,0x98ba,0x98bb,
-0x98bc,0x98bd,0x98be,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,
-0x98c4,0x98c5,0x98c6,0x98c7,0x98c8,0x98c9,0x98ca,0x98cb,
-0x98cc,0x98cd,0x98cf,0x98d0,0x98d4,0x98d6,0x98d7,0x98db,
-0x98dc,0x98dd,0x98e0,0x98e1,0x98e2,0x98e3,0x98e4,0x0000,
-0x98e5,0x98e6,0x98e9,0x98ea,0x98eb,0x98ec,0x98ed,0x98ee,
-0x98ef,0x98f0,0x98f1,0x98f2,0x98f3,0x98f4,0x98f5,0x98f6,
-0x98f7,0x98f8,0x98f9,0x98fa,0x98fb,0x98fc,0x98fd,0x98fe,
-0x98ff,0x9900,0x9901,0x9902,0x9903,0x9904,0x9905,0x9906,
-0x9907,0x94e9,0x94eb,0x94ee,0x94ef,0x94f3,0x94f4,0x94f5,
-0x94f7,0x94f9,0x94fc,0x94fd,0x94ff,0x9503,0x9502,0x9506,
-0x9507,0x9509,0x950a,0x950d,0x950e,0x950f,0x9512,0x9513,
-0x9514,0x9515,0x9516,0x9518,0x951b,0x951d,0x951e,0x951f,
-0x9522,0x952a,0x952b,0x9529,0x952c,0x9531,0x9532,0x9534,
-0x9536,0x9537,0x9538,0x953c,0x953e,0x953f,0x9542,0x9535,
-0x9544,0x9545,0x9546,0x9549,0x954c,0x954e,0x954f,0x9552,
-0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955b,0x955e,
-0x955f,0x955d,0x9561,0x9562,0x9564,0x9565,0x9566,0x9567,
-0x9568,0x9569,0x956a,0x956b,0x956c,0x956f,0x9571,0x9572,
-0x9573,0x953a,0x77e7,0x77ec,0x96c9,0x79d5,0x79ed,0x79e3,
-0x79eb,0x7a06,0x5d47,0x7a03,0x7a02,0x7a1e,0x7a14,0x0000,
-/* 0xf000 */
-0x9908,0x9909,0x990a,0x990b,0x990c,0x990e,0x990f,0x9911,
-0x9912,0x9913,0x9914,0x9915,0x9916,0x9917,0x9918,0x9919,
-0x991a,0x991b,0x991c,0x991d,0x991e,0x991f,0x9920,0x9921,
-0x9922,0x9923,0x9924,0x9925,0x9926,0x9927,0x9928,0x9929,
-0x992a,0x992b,0x992c,0x992d,0x992f,0x9930,0x9931,0x9932,
-0x9933,0x9934,0x9935,0x9936,0x9937,0x9938,0x9939,0x993a,
-0x993b,0x993c,0x993d,0x993e,0x993f,0x9940,0x9941,0x9942,
-0x9943,0x9944,0x9945,0x9946,0x9947,0x9948,0x9949,0x0000,
-0x994a,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951,
-0x9952,0x9953,0x9956,0x9957,0x9958,0x9959,0x995a,0x995b,
-0x995c,0x995d,0x995e,0x995f,0x9960,0x9961,0x9962,0x9964,
-0x9966,0x9973,0x9978,0x9979,0x997b,0x997e,0x9982,0x9983,
-0x9989,0x7a39,0x7a37,0x7a51,0x9ecf,0x99a5,0x7a70,0x7688,
-0x768e,0x7693,0x7699,0x76a4,0x74de,0x74e0,0x752c,0x9e20,
-0x9e22,0x9e28,0x9e29,0x9e2a,0x9e2b,0x9e2c,0x9e32,0x9e31,
-0x9e36,0x9e38,0x9e37,0x9e39,0x9e3a,0x9e3e,0x9e41,0x9e42,
-0x9e44,0x9e46,0x9e47,0x9e48,0x9e49,0x9e4b,0x9e4c,0x9e4e,
-0x9e51,0x9e55,0x9e57,0x9e5a,0x9e5b,0x9e5c,0x9e5e,0x9e63,
-0x9e66,0x9e67,0x9e68,0x9e69,0x9e6a,0x9e6b,0x9e6c,0x9e71,
-0x9e6d,0x9e73,0x7592,0x7594,0x7596,0x75a0,0x759d,0x75ac,
-0x75a3,0x75b3,0x75b4,0x75b8,0x75c4,0x75b1,0x75b0,0x75c3,
-0x75c2,0x75d6,0x75cd,0x75e3,0x75e8,0x75e6,0x75e4,0x75eb,
-0x75e7,0x7603,0x75f1,0x75fc,0x75ff,0x7610,0x7600,0x7605,
-0x760c,0x7617,0x760a,0x7625,0x7618,0x7615,0x7619,0x0000,
-/* 0xf100 */
-0x998c,0x998e,0x999a,0x999b,0x999c,0x999d,0x999e,0x999f,
-0x99a0,0x99a1,0x99a2,0x99a3,0x99a4,0x99a6,0x99a7,0x99a9,
-0x99aa,0x99ab,0x99ac,0x99ad,0x99ae,0x99af,0x99b0,0x99b1,
-0x99b2,0x99b3,0x99b4,0x99b5,0x99b6,0x99b7,0x99b8,0x99b9,
-0x99ba,0x99bb,0x99bc,0x99bd,0x99be,0x99bf,0x99c0,0x99c1,
-0x99c2,0x99c3,0x99c4,0x99c5,0x99c6,0x99c7,0x99c8,0x99c9,
-0x99ca,0x99cb,0x99cc,0x99cd,0x99ce,0x99cf,0x99d0,0x99d1,
-0x99d2,0x99d3,0x99d4,0x99d5,0x99d6,0x99d7,0x99d8,0x0000,
-0x99d9,0x99da,0x99db,0x99dc,0x99dd,0x99de,0x99df,0x99e0,
-0x99e1,0x99e2,0x99e3,0x99e4,0x99e5,0x99e6,0x99e7,0x99e8,
-0x99e9,0x99ea,0x99eb,0x99ec,0x99ed,0x99ee,0x99ef,0x99f0,
-0x99f1,0x99f2,0x99f3,0x99f4,0x99f5,0x99f6,0x99f7,0x99f8,
-0x99f9,0x761b,0x763c,0x7622,0x7620,0x7640,0x762d,0x7630,
-0x763f,0x7635,0x7643,0x763e,0x7633,0x764d,0x765e,0x7654,
-0x765c,0x7656,0x766b,0x766f,0x7fca,0x7ae6,0x7a78,0x7a79,
-0x7a80,0x7a86,0x7a88,0x7a95,0x7aa6,0x7aa0,0x7aac,0x7aa8,
-0x7aad,0x7ab3,0x8864,0x8869,0x8872,0x887d,0x887f,0x8882,
-0x88a2,0x88c6,0x88b7,0x88bc,0x88c9,0x88e2,0x88ce,0x88e3,
-0x88e5,0x88f1,0x891a,0x88fc,0x88e8,0x88fe,0x88f0,0x8921,
-0x8919,0x8913,0x891b,0x890a,0x8934,0x892b,0x8936,0x8941,
-0x8966,0x897b,0x758b,0x80e5,0x76b2,0x76b4,0x77dc,0x8012,
-0x8014,0x8016,0x801c,0x8020,0x8022,0x8025,0x8026,0x8027,
-0x8029,0x8028,0x8031,0x800b,0x8035,0x8043,0x8046,0x804d,
-0x8052,0x8069,0x8071,0x8983,0x9878,0x9880,0x9883,0x0000,
-/* 0xf200 */
-0x99fa,0x99fb,0x99fc,0x99fd,0x99fe,0x99ff,0x9a00,0x9a01,
-0x9a02,0x9a03,0x9a04,0x9a05,0x9a06,0x9a07,0x9a08,0x9a09,
-0x9a0a,0x9a0b,0x9a0c,0x9a0d,0x9a0e,0x9a0f,0x9a10,0x9a11,
-0x9a12,0x9a13,0x9a14,0x9a15,0x9a16,0x9a17,0x9a18,0x9a19,
-0x9a1a,0x9a1b,0x9a1c,0x9a1d,0x9a1e,0x9a1f,0x9a20,0x9a21,
-0x9a22,0x9a23,0x9a24,0x9a25,0x9a26,0x9a27,0x9a28,0x9a29,
-0x9a2a,0x9a2b,0x9a2c,0x9a2d,0x9a2e,0x9a2f,0x9a30,0x9a31,
-0x9a32,0x9a33,0x9a34,0x9a35,0x9a36,0x9a37,0x9a38,0x0000,
-0x9a39,0x9a3a,0x9a3b,0x9a3c,0x9a3d,0x9a3e,0x9a3f,0x9a40,
-0x9a41,0x9a42,0x9a43,0x9a44,0x9a45,0x9a46,0x9a47,0x9a48,
-0x9a49,0x9a4a,0x9a4b,0x9a4c,0x9a4d,0x9a4e,0x9a4f,0x9a50,
-0x9a51,0x9a52,0x9a53,0x9a54,0x9a55,0x9a56,0x9a57,0x9a58,
-0x9a59,0x9889,0x988c,0x988d,0x988f,0x9894,0x989a,0x989b,
-0x989e,0x989f,0x98a1,0x98a2,0x98a5,0x98a6,0x864d,0x8654,
-0x866c,0x866e,0x867f,0x867a,0x867c,0x867b,0x86a8,0x868d,
-0x868b,0x86ac,0x869d,0x86a7,0x86a3,0x86aa,0x8693,0x86a9,
-0x86b6,0x86c4,0x86b5,0x86ce,0x86b0,0x86ba,0x86b1,0x86af,
-0x86c9,0x86cf,0x86b4,0x86e9,0x86f1,0x86f2,0x86ed,0x86f3,
-0x86d0,0x8713,0x86de,0x86f4,0x86df,0x86d8,0x86d1,0x8703,
-0x8707,0x86f8,0x8708,0x870a,0x870d,0x8709,0x8723,0x873b,
-0x871e,0x8725,0x872e,0x871a,0x873e,0x8748,0x8734,0x8731,
-0x8729,0x8737,0x873f,0x8782,0x8722,0x877d,0x877e,0x877b,
-0x8760,0x8770,0x874c,0x876e,0x878b,0x8753,0x8763,0x877c,
-0x8764,0x8759,0x8765,0x8793,0x87af,0x87a8,0x87d2,0x0000,
-/* 0xf300 */
-0x9a5a,0x9a5b,0x9a5c,0x9a5d,0x9a5e,0x9a5f,0x9a60,0x9a61,
-0x9a62,0x9a63,0x9a64,0x9a65,0x9a66,0x9a67,0x9a68,0x9a69,
-0x9a6a,0x9a6b,0x9a72,0x9a83,0x9a89,0x9a8d,0x9a8e,0x9a94,
-0x9a95,0x9a99,0x9aa6,0x9aa9,0x9aaa,0x9aab,0x9aac,0x9aad,
-0x9aae,0x9aaf,0x9ab2,0x9ab3,0x9ab4,0x9ab5,0x9ab9,0x9abb,
-0x9abd,0x9abe,0x9abf,0x9ac3,0x9ac4,0x9ac6,0x9ac7,0x9ac8,
-0x9ac9,0x9aca,0x9acd,0x9ace,0x9acf,0x9ad0,0x9ad2,0x9ad4,
-0x9ad5,0x9ad6,0x9ad7,0x9ad9,0x9ada,0x9adb,0x9adc,0x0000,
-0x9add,0x9ade,0x9ae0,0x9ae2,0x9ae3,0x9ae4,0x9ae5,0x9ae7,
-0x9ae8,0x9ae9,0x9aea,0x9aec,0x9aee,0x9af0,0x9af1,0x9af2,
-0x9af3,0x9af4,0x9af5,0x9af6,0x9af7,0x9af8,0x9afa,0x9afc,
-0x9afd,0x9afe,0x9aff,0x9b00,0x9b01,0x9b02,0x9b04,0x9b05,
-0x9b06,0x87c6,0x8788,0x8785,0x87ad,0x8797,0x8783,0x87ab,
-0x87e5,0x87ac,0x87b5,0x87b3,0x87cb,0x87d3,0x87bd,0x87d1,
-0x87c0,0x87ca,0x87db,0x87ea,0x87e0,0x87ee,0x8816,0x8813,
-0x87fe,0x880a,0x881b,0x8821,0x8839,0x883c,0x7f36,0x7f42,
-0x7f44,0x7f45,0x8210,0x7afa,0x7afd,0x7b08,0x7b03,0x7b04,
-0x7b15,0x7b0a,0x7b2b,0x7b0f,0x7b47,0x7b38,0x7b2a,0x7b19,
-0x7b2e,0x7b31,0x7b20,0x7b25,0x7b24,0x7b33,0x7b3e,0x7b1e,
-0x7b58,0x7b5a,0x7b45,0x7b75,0x7b4c,0x7b5d,0x7b60,0x7b6e,
-0x7b7b,0x7b62,0x7b72,0x7b71,0x7b90,0x7ba6,0x7ba7,0x7bb8,
-0x7bac,0x7b9d,0x7ba8,0x7b85,0x7baa,0x7b9c,0x7ba2,0x7bab,
-0x7bb4,0x7bd1,0x7bc1,0x7bcc,0x7bdd,0x7bda,0x7be5,0x7be6,
-0x7bea,0x7c0c,0x7bfe,0x7bfc,0x7c0f,0x7c16,0x7c0b,0x0000,
-/* 0xf400 */
-0x9b07,0x9b09,0x9b0a,0x9b0b,0x9b0c,0x9b0d,0x9b0e,0x9b10,
-0x9b11,0x9b12,0x9b14,0x9b15,0x9b16,0x9b17,0x9b18,0x9b19,
-0x9b1a,0x9b1b,0x9b1c,0x9b1d,0x9b1e,0x9b20,0x9b21,0x9b22,
-0x9b24,0x9b25,0x9b26,0x9b27,0x9b28,0x9b29,0x9b2a,0x9b2b,
-0x9b2c,0x9b2d,0x9b2e,0x9b30,0x9b31,0x9b33,0x9b34,0x9b35,
-0x9b36,0x9b37,0x9b38,0x9b39,0x9b3a,0x9b3d,0x9b3e,0x9b3f,
-0x9b40,0x9b46,0x9b4a,0x9b4b,0x9b4c,0x9b4e,0x9b50,0x9b52,
-0x9b53,0x9b55,0x9b56,0x9b57,0x9b58,0x9b59,0x9b5a,0x0000,
-0x9b5b,0x9b5c,0x9b5d,0x9b5e,0x9b5f,0x9b60,0x9b61,0x9b62,
-0x9b63,0x9b64,0x9b65,0x9b66,0x9b67,0x9b68,0x9b69,0x9b6a,
-0x9b6b,0x9b6c,0x9b6d,0x9b6e,0x9b6f,0x9b70,0x9b71,0x9b72,
-0x9b73,0x9b74,0x9b75,0x9b76,0x9b77,0x9b78,0x9b79,0x9b7a,
-0x9b7b,0x7c1f,0x7c2a,0x7c26,0x7c38,0x7c41,0x7c40,0x81fe,
-0x8201,0x8202,0x8204,0x81ec,0x8844,0x8221,0x8222,0x8223,
-0x822d,0x822f,0x8228,0x822b,0x8238,0x823b,0x8233,0x8234,
-0x823e,0x8244,0x8249,0x824b,0x824f,0x825a,0x825f,0x8268,
-0x887e,0x8885,0x8888,0x88d8,0x88df,0x895e,0x7f9d,0x7f9f,
-0x7fa7,0x7faf,0x7fb0,0x7fb2,0x7c7c,0x6549,0x7c91,0x7c9d,
-0x7c9c,0x7c9e,0x7ca2,0x7cb2,0x7cbc,0x7cbd,0x7cc1,0x7cc7,
-0x7ccc,0x7ccd,0x7cc8,0x7cc5,0x7cd7,0x7ce8,0x826e,0x66a8,
-0x7fbf,0x7fce,0x7fd5,0x7fe5,0x7fe1,0x7fe6,0x7fe9,0x7fee,
-0x7ff3,0x7cf8,0x7d77,0x7da6,0x7dae,0x7e47,0x7e9b,0x9eb8,
-0x9eb4,0x8d73,0x8d84,0x8d94,0x8d91,0x8db1,0x8d67,0x8d6d,
-0x8c47,0x8c49,0x914a,0x9150,0x914e,0x914f,0x9164,0x0000,
-/* 0xf500 */
-0x9b7c,0x9b7d,0x9b7e,0x9b7f,0x9b80,0x9b81,0x9b82,0x9b83,
-0x9b84,0x9b85,0x9b86,0x9b87,0x9b88,0x9b89,0x9b8a,0x9b8b,
-0x9b8c,0x9b8d,0x9b8e,0x9b8f,0x9b90,0x9b91,0x9b92,0x9b93,
-0x9b94,0x9b95,0x9b96,0x9b97,0x9b98,0x9b99,0x9b9a,0x9b9b,
-0x9b9c,0x9b9d,0x9b9e,0x9b9f,0x9ba0,0x9ba1,0x9ba2,0x9ba3,
-0x9ba4,0x9ba5,0x9ba6,0x9ba7,0x9ba8,0x9ba9,0x9baa,0x9bab,
-0x9bac,0x9bad,0x9bae,0x9baf,0x9bb0,0x9bb1,0x9bb2,0x9bb3,
-0x9bb4,0x9bb5,0x9bb6,0x9bb7,0x9bb8,0x9bb9,0x9bba,0x0000,
-0x9bbb,0x9bbc,0x9bbd,0x9bbe,0x9bbf,0x9bc0,0x9bc1,0x9bc2,
-0x9bc3,0x9bc4,0x9bc5,0x9bc6,0x9bc7,0x9bc8,0x9bc9,0x9bca,
-0x9bcb,0x9bcc,0x9bcd,0x9bce,0x9bcf,0x9bd0,0x9bd1,0x9bd2,
-0x9bd3,0x9bd4,0x9bd5,0x9bd6,0x9bd7,0x9bd8,0x9bd9,0x9bda,
-0x9bdb,0x9162,0x9161,0x9170,0x9169,0x916f,0x917d,0x917e,
-0x9172,0x9174,0x9179,0x918c,0x9185,0x9190,0x918d,0x9191,
-0x91a2,0x91a3,0x91aa,0x91ad,0x91ae,0x91af,0x91b5,0x91b4,
-0x91ba,0x8c55,0x9e7e,0x8db8,0x8deb,0x8e05,0x8e59,0x8e69,
-0x8db5,0x8dbf,0x8dbc,0x8dba,0x8dc4,0x8dd6,0x8dd7,0x8dda,
-0x8dde,0x8dce,0x8dcf,0x8ddb,0x8dc6,0x8dec,0x8df7,0x8df8,
-0x8de3,0x8df9,0x8dfb,0x8de4,0x8e09,0x8dfd,0x8e14,0x8e1d,
-0x8e1f,0x8e2c,0x8e2e,0x8e23,0x8e2f,0x8e3a,0x8e40,0x8e39,
-0x8e35,0x8e3d,0x8e31,0x8e49,0x8e41,0x8e42,0x8e51,0x8e52,
-0x8e4a,0x8e70,0x8e76,0x8e7c,0x8e6f,0x8e74,0x8e85,0x8e8f,
-0x8e94,0x8e90,0x8e9c,0x8e9e,0x8c78,0x8c82,0x8c8a,0x8c85,
-0x8c98,0x8c94,0x659b,0x89d6,0x89de,0x89da,0x89dc,0x0000,
-/* 0xf600 */
-0x9bdc,0x9bdd,0x9bde,0x9bdf,0x9be0,0x9be1,0x9be2,0x9be3,
-0x9be4,0x9be5,0x9be6,0x9be7,0x9be8,0x9be9,0x9bea,0x9beb,
-0x9bec,0x9bed,0x9bee,0x9bef,0x9bf0,0x9bf1,0x9bf2,0x9bf3,
-0x9bf4,0x9bf5,0x9bf6,0x9bf7,0x9bf8,0x9bf9,0x9bfa,0x9bfb,
-0x9bfc,0x9bfd,0x9bfe,0x9bff,0x9c00,0x9c01,0x9c02,0x9c03,
-0x9c04,0x9c05,0x9c06,0x9c07,0x9c08,0x9c09,0x9c0a,0x9c0b,
-0x9c0c,0x9c0d,0x9c0e,0x9c0f,0x9c10,0x9c11,0x9c12,0x9c13,
-0x9c14,0x9c15,0x9c16,0x9c17,0x9c18,0x9c19,0x9c1a,0x0000,
-0x9c1b,0x9c1c,0x9c1d,0x9c1e,0x9c1f,0x9c20,0x9c21,0x9c22,
-0x9c23,0x9c24,0x9c25,0x9c26,0x9c27,0x9c28,0x9c29,0x9c2a,
-0x9c2b,0x9c2c,0x9c2d,0x9c2e,0x9c2f,0x9c30,0x9c31,0x9c32,
-0x9c33,0x9c34,0x9c35,0x9c36,0x9c37,0x9c38,0x9c39,0x9c3a,
-0x9c3b,0x89e5,0x89eb,0x89ef,0x8a3e,0x8b26,0x9753,0x96e9,
-0x96f3,0x96ef,0x9706,0x9701,0x9708,0x970f,0x970e,0x972a,
-0x972d,0x9730,0x973e,0x9f80,0x9f83,0x9f85,0x9f86,0x9f87,
-0x9f88,0x9f89,0x9f8a,0x9f8c,0x9efe,0x9f0b,0x9f0d,0x96b9,
-0x96bc,0x96bd,0x96ce,0x96d2,0x77bf,0x96e0,0x928e,0x92ae,
-0x92c8,0x933e,0x936a,0x93ca,0x938f,0x943e,0x946b,0x9c7f,
-0x9c82,0x9c85,0x9c86,0x9c87,0x9c88,0x7a23,0x9c8b,0x9c8e,
-0x9c90,0x9c91,0x9c92,0x9c94,0x9c95,0x9c9a,0x9c9b,0x9c9e,
-0x9c9f,0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca5,0x9ca6,0x9ca7,
-0x9ca8,0x9ca9,0x9cab,0x9cad,0x9cae,0x9cb0,0x9cb1,0x9cb2,
-0x9cb3,0x9cb4,0x9cb5,0x9cb6,0x9cb7,0x9cba,0x9cbb,0x9cbc,
-0x9cbd,0x9cc4,0x9cc5,0x9cc6,0x9cc7,0x9cca,0x9ccb,0x0000,
-/* 0xf700 */
-0x9c3c,0x9c3d,0x9c3e,0x9c3f,0x9c40,0x9c41,0x9c42,0x9c43,
-0x9c44,0x9c45,0x9c46,0x9c47,0x9c48,0x9c49,0x9c4a,0x9c4b,
-0x9c4c,0x9c4d,0x9c4e,0x9c4f,0x9c50,0x9c51,0x9c52,0x9c53,
-0x9c54,0x9c55,0x9c56,0x9c57,0x9c58,0x9c59,0x9c5a,0x9c5b,
-0x9c5c,0x9c5d,0x9c5e,0x9c5f,0x9c60,0x9c61,0x9c62,0x9c63,
-0x9c64,0x9c65,0x9c66,0x9c67,0x9c68,0x9c69,0x9c6a,0x9c6b,
-0x9c6c,0x9c6d,0x9c6e,0x9c6f,0x9c70,0x9c71,0x9c72,0x9c73,
-0x9c74,0x9c75,0x9c76,0x9c77,0x9c78,0x9c79,0x9c7a,0x0000,
-0x9c7b,0x9c7d,0x9c7e,0x9c80,0x9c83,0x9c84,0x9c89,0x9c8a,
-0x9c8c,0x9c8f,0x9c93,0x9c96,0x9c97,0x9c98,0x9c99,0x9c9d,
-0x9caa,0x9cac,0x9caf,0x9cb9,0x9cbe,0x9cbf,0x9cc0,0x9cc1,
-0x9cc2,0x9cc8,0x9cc9,0x9cd1,0x9cd2,0x9cda,0x9cdb,0x9ce0,
-0x9ce1,0x9ccc,0x9ccd,0x9cce,0x9ccf,0x9cd0,0x9cd3,0x9cd4,
-0x9cd5,0x9cd7,0x9cd8,0x9cd9,0x9cdc,0x9cdd,0x9cdf,0x9ce2,
-0x977c,0x9785,0x9791,0x9792,0x9794,0x97af,0x97ab,0x97a3,
-0x97b2,0x97b4,0x9ab1,0x9ab0,0x9ab7,0x9e58,0x9ab6,0x9aba,
-0x9abc,0x9ac1,0x9ac0,0x9ac5,0x9ac2,0x9acb,0x9acc,0x9ad1,
-0x9b45,0x9b43,0x9b47,0x9b49,0x9b48,0x9b4d,0x9b51,0x98e8,
-0x990d,0x992e,0x9955,0x9954,0x9adf,0x9ae1,0x9ae6,0x9aef,
-0x9aeb,0x9afb,0x9aed,0x9af9,0x9b08,0x9b0f,0x9b13,0x9b1f,
-0x9b23,0x9ebd,0x9ebe,0x7e3b,0x9e82,0x9e87,0x9e88,0x9e8b,
-0x9e92,0x93d6,0x9e9d,0x9e9f,0x9edb,0x9edc,0x9edd,0x9ee0,
-0x9edf,0x9ee2,0x9ee9,0x9ee7,0x9ee5,0x9eea,0x9eef,0x9f22,
-0x9f2c,0x9f2f,0x9f39,0x9f37,0x9f3d,0x9f3e,0x9f44,0x0000,
-/* 0xf800 */
-0x9ce3,0x9ce4,0x9ce5,0x9ce6,0x9ce7,0x9ce8,0x9ce9,0x9cea,
-0x9ceb,0x9cec,0x9ced,0x9cee,0x9cef,0x9cf0,0x9cf1,0x9cf2,
-0x9cf3,0x9cf4,0x9cf5,0x9cf6,0x9cf7,0x9cf8,0x9cf9,0x9cfa,
-0x9cfb,0x9cfc,0x9cfd,0x9cfe,0x9cff,0x9d00,0x9d01,0x9d02,
-0x9d03,0x9d04,0x9d05,0x9d06,0x9d07,0x9d08,0x9d09,0x9d0a,
-0x9d0b,0x9d0c,0x9d0d,0x9d0e,0x9d0f,0x9d10,0x9d11,0x9d12,
-0x9d13,0x9d14,0x9d15,0x9d16,0x9d17,0x9d18,0x9d19,0x9d1a,
-0x9d1b,0x9d1c,0x9d1d,0x9d1e,0x9d1f,0x9d20,0x9d21,0x0000,
-0x9d22,0x9d23,0x9d24,0x9d25,0x9d26,0x9d27,0x9d28,0x9d29,
-0x9d2a,0x9d2b,0x9d2c,0x9d2d,0x9d2e,0x9d2f,0x9d30,0x9d31,
-0x9d32,0x9d33,0x9d34,0x9d35,0x9d36,0x9d37,0x9d38,0x9d39,
-0x9d3a,0x9d3b,0x9d3c,0x9d3d,0x9d3e,0x9d3f,0x9d40,0x9d41,
-0x9d42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xf900 */
-0x9d43,0x9d44,0x9d45,0x9d46,0x9d47,0x9d48,0x9d49,0x9d4a,
-0x9d4b,0x9d4c,0x9d4d,0x9d4e,0x9d4f,0x9d50,0x9d51,0x9d52,
-0x9d53,0x9d54,0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0x9d5a,
-0x9d5b,0x9d5c,0x9d5d,0x9d5e,0x9d5f,0x9d60,0x9d61,0x9d62,
-0x9d63,0x9d64,0x9d65,0x9d66,0x9d67,0x9d68,0x9d69,0x9d6a,
-0x9d6b,0x9d6c,0x9d6d,0x9d6e,0x9d6f,0x9d70,0x9d71,0x9d72,
-0x9d73,0x9d74,0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,
-0x9d7b,0x9d7c,0x9d7d,0x9d7e,0x9d7f,0x9d80,0x9d81,0x0000,
-0x9d82,0x9d83,0x9d84,0x9d85,0x9d86,0x9d87,0x9d88,0x9d89,
-0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,0x9d90,0x9d91,
-0x9d92,0x9d93,0x9d94,0x9d95,0x9d96,0x9d97,0x9d98,0x9d99,
-0x9d9a,0x9d9b,0x9d9c,0x9d9d,0x9d9e,0x9d9f,0x9da0,0x9da1,
-0x9da2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfa00 */
-0x9da3,0x9da4,0x9da5,0x9da6,0x9da7,0x9da8,0x9da9,0x9daa,
-0x9dab,0x9dac,0x9dad,0x9dae,0x9daf,0x9db0,0x9db1,0x9db2,
-0x9db3,0x9db4,0x9db5,0x9db6,0x9db7,0x9db8,0x9db9,0x9dba,
-0x9dbb,0x9dbc,0x9dbd,0x9dbe,0x9dbf,0x9dc0,0x9dc1,0x9dc2,
-0x9dc3,0x9dc4,0x9dc5,0x9dc6,0x9dc7,0x9dc8,0x9dc9,0x9dca,
-0x9dcb,0x9dcc,0x9dcd,0x9dce,0x9dcf,0x9dd0,0x9dd1,0x9dd2,
-0x9dd3,0x9dd4,0x9dd5,0x9dd6,0x9dd7,0x9dd8,0x9dd9,0x9dda,
-0x9ddb,0x9ddc,0x9ddd,0x9dde,0x9ddf,0x9de0,0x9de1,0x0000,
-0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,0x9de7,0x9de8,0x9de9,
-0x9dea,0x9deb,0x9dec,0x9ded,0x9dee,0x9def,0x9df0,0x9df1,
-0x9df2,0x9df3,0x9df4,0x9df5,0x9df6,0x9df7,0x9df8,0x9df9,
-0x9dfa,0x9dfb,0x9dfc,0x9dfd,0x9dfe,0x9dff,0x9e00,0x9e01,
-0x9e02,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfb00 */
-0x9e03,0x9e04,0x9e05,0x9e06,0x9e07,0x9e08,0x9e09,0x9e0a,
-0x9e0b,0x9e0c,0x9e0d,0x9e0e,0x9e0f,0x9e10,0x9e11,0x9e12,
-0x9e13,0x9e14,0x9e15,0x9e16,0x9e17,0x9e18,0x9e19,0x9e1a,
-0x9e1b,0x9e1c,0x9e1d,0x9e1e,0x9e24,0x9e27,0x9e2e,0x9e30,
-0x9e34,0x9e3b,0x9e3c,0x9e40,0x9e4d,0x9e50,0x9e52,0x9e53,
-0x9e54,0x9e56,0x9e59,0x9e5d,0x9e5f,0x9e60,0x9e61,0x9e62,
-0x9e65,0x9e6e,0x9e6f,0x9e72,0x9e74,0x9e75,0x9e76,0x9e77,
-0x9e78,0x9e79,0x9e7a,0x9e7b,0x9e7c,0x9e7d,0x9e80,0x0000,
-0x9e81,0x9e83,0x9e84,0x9e85,0x9e86,0x9e89,0x9e8a,0x9e8c,
-0x9e8d,0x9e8e,0x9e8f,0x9e90,0x9e91,0x9e94,0x9e95,0x9e96,
-0x9e97,0x9e98,0x9e99,0x9e9a,0x9e9b,0x9e9c,0x9e9e,0x9ea0,
-0x9ea1,0x9ea2,0x9ea3,0x9ea4,0x9ea5,0x9ea7,0x9ea8,0x9ea9,
-0x9eaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfc00 */
-0x9eab,0x9eac,0x9ead,0x9eae,0x9eaf,0x9eb0,0x9eb1,0x9eb2,
-0x9eb3,0x9eb5,0x9eb6,0x9eb7,0x9eb9,0x9eba,0x9ebc,0x9ebf,
-0x9ec0,0x9ec1,0x9ec2,0x9ec3,0x9ec5,0x9ec6,0x9ec7,0x9ec8,
-0x9eca,0x9ecb,0x9ecc,0x9ed0,0x9ed2,0x9ed3,0x9ed5,0x9ed6,
-0x9ed7,0x9ed9,0x9eda,0x9ede,0x9ee1,0x9ee3,0x9ee4,0x9ee6,
-0x9ee8,0x9eeb,0x9eec,0x9eed,0x9eee,0x9ef0,0x9ef1,0x9ef2,
-0x9ef3,0x9ef4,0x9ef5,0x9ef6,0x9ef7,0x9ef8,0x9efa,0x9efd,
-0x9eff,0x9f00,0x9f01,0x9f02,0x9f03,0x9f04,0x9f05,0x0000,
-0x9f06,0x9f07,0x9f08,0x9f09,0x9f0a,0x9f0c,0x9f0f,0x9f11,
-0x9f12,0x9f14,0x9f15,0x9f16,0x9f18,0x9f1a,0x9f1b,0x9f1c,
-0x9f1d,0x9f1e,0x9f1f,0x9f21,0x9f23,0x9f24,0x9f25,0x9f26,
-0x9f27,0x9f28,0x9f29,0x9f2a,0x9f2b,0x9f2d,0x9f2e,0x9f30,
-0x9f31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfd00 */
-0x9f32,0x9f33,0x9f34,0x9f35,0x9f36,0x9f38,0x9f3a,0x9f3c,
-0x9f3f,0x9f40,0x9f41,0x9f42,0x9f43,0x9f45,0x9f46,0x9f47,
-0x9f48,0x9f49,0x9f4a,0x9f4b,0x9f4c,0x9f4d,0x9f4e,0x9f4f,
-0x9f52,0x9f53,0x9f54,0x9f55,0x9f56,0x9f57,0x9f58,0x9f59,
-0x9f5a,0x9f5b,0x9f5c,0x9f5d,0x9f5e,0x9f5f,0x9f60,0x9f61,
-0x9f62,0x9f63,0x9f64,0x9f65,0x9f66,0x9f67,0x9f68,0x9f69,
-0x9f6a,0x9f6b,0x9f6c,0x9f6d,0x9f6e,0x9f6f,0x9f70,0x9f71,
-0x9f72,0x9f73,0x9f74,0x9f75,0x9f76,0x9f77,0x9f78,0x0000,
-0x9f79,0x9f7a,0x9f7b,0x9f7c,0x9f7d,0x9f7e,0x9f81,0x9f82,
-0x9f8d,0x9f8e,0x9f8f,0x9f90,0x9f91,0x9f92,0x9f93,0x9f94,
-0x9f95,0x9f96,0x9f97,0x9f98,0x9f9c,0x9f9d,0x9f9e,0x9fa1,
-0x9fa2,0x9fa3,0x9fa4,0x9fa5,0xf92c,0xf979,0xf995,0xf9e7,
-0xf9f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfe00 */
-0xfa0c,0xfa0d,0xfa0e,0xfa0f,0xfa11,0xfa13,0xfa14,0xfa18,
-0xfa1f,0xfa20,0xfa21,0xfa23,0xfa24,0xfa27,0xfa28,0xfa29};
-
-static const int cp936_ucs_table_size = (sizeof(cp936_ucs_table)/sizeof(unsigned short));
-
-
-/* UCS -> CP936 */
-static const unsigned short ucs_a1_cp936_table[] = {
-0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
-0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
-0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
-0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
-0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
-0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
-0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
-0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
-0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
-0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
-0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
-0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
-0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
-0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
-0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
-0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1e8,0x0000,0x0000,0xa1ec,
-0xa1a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e3,0xa1c0,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8a4,0xa8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8a8,0xa8a6,0xa8ba,0x0000,0xa8ac,0xa8aa,0x0000,0x0000,
-0x0000,0x0000,0xa8b0,0xa8ae,0x0000,0x0000,0x0000,0xa1c2,
-0x0000,0xa8b4,0xa8b2,0x0000,0xa8b9,0x0000,0x0000,0x0000,
-/* 0x0100 */
-0x0000,0xa8a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8a5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8a7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8a9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa8bd,0x0000,0x0000,0x0000,
-0xa8be,0x0000,0x0000,0x0000,0x0000,0xa8ad,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8b1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a3,0x0000,
-0xa8ab,0x0000,0xa8af,0x0000,0xa8b3,0x0000,0xa8b5,0x0000,
-0xa8b6,0x0000,0xa8b7,0x0000,0xa8b8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa8bb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa8c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a6,
-0x0000,0xa1a5,0xa840,0xa841,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa842,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa6a1,0xa6a2,0xa6a3,0xa6a4,0xa6a5,0xa6a6,0xa6a7,
-0xa6a8,0xa6a9,0xa6aa,0xa6ab,0xa6ac,0xa6ad,0xa6ae,0xa6af,
-0xa6b0,0xa6b1,0x0000,0xa6b2,0xa6b3,0xa6b4,0xa6b5,0xa6b6,
-0xa6b7,0xa6b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa6c1,0xa6c2,0xa6c3,0xa6c4,0xa6c5,0xa6c6,0xa6c7,
-0xa6c8,0xa6c9,0xa6ca,0xa6cb,0xa6cc,0xa6cd,0xa6ce,0xa6cf,
-0xa6d0,0xa6d1,0x0000,0xa6d2,0xa6d3,0xa6d4,0xa6d5,0xa6d6,
-0xa6d7,0xa6d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0400 */
-0x0000,0xa7a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa7a1,0xa7a2,0xa7a3,0xa7a4,0xa7a5,0xa7a6,0xa7a8,0xa7a9,
-0xa7aa,0xa7ab,0xa7ac,0xa7ad,0xa7ae,0xa7af,0xa7b0,0xa7b1,
-0xa7b2,0xa7b3,0xa7b4,0xa7b5,0xa7b6,0xa7b7,0xa7b8,0xa7b9,
-0xa7ba,0xa7bb,0xa7bc,0xa7bd,0xa7be,0xa7bf,0xa7c0,0xa7c1,
-0xa7d1,0xa7d2,0xa7d3,0xa7d4,0xa7d5,0xa7d6,0xa7d8,0xa7d9,
-0xa7da,0xa7db,0xa7dc,0xa7dd,0xa7de,0xa7df,0xa7e0,0xa7e1,
-0xa7e2,0xa7e3,0xa7e4,0xa7e5,0xa7e6,0xa7e7,0xa7e8,0xa7e9,
-0xa7ea,0xa7eb,0xa7ec,0xa7ed,0xa7ee,0xa7ef,0xa7f0,0xa7f1,
-0x0000,0xa7d7};
-
-static const int ucs_a1_cp936_table_min = 0x0000;
-static const int ucs_a1_cp936_table_max = 0x0000 + (sizeof (ucs_a1_cp936_table) / sizeof (unsigned short));
-
-/* 0x2000 */
-static const unsigned short ucs_a2_cp936_table[] = {
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa95c,0x0000,0x0000,0xa843,0xa1aa,0xa844,0xa1ac,0x0000,
-0xa1ae,0xa1af,0x0000,0x0000,0xa1b0,0xa1b1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa845,0xa1ad,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1eb,0x0000,0xa1e4,0xa1e5,0x0000,0xa846,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1f9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0080,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2100 */
-0x0000,0x0000,0x0000,0xa1e6,0x0000,0xa847,0x0000,0x0000,
-0x0000,0xa848,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1ed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa959,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2f1,0xa2f2,0xa2f3,0xa2f4,0xa2f5,0xa2f6,0xa2f7,0xa2f8,
-0xa2f9,0xa2fa,0xa2fb,0xa2fc,0x0000,0x0000,0x0000,0x0000,
-0xa2a1,0xa2a2,0xa2a3,0xa2a4,0xa2a5,0xa2a6,0xa2a7,0xa2a8,
-0xa2a9,0xa2aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1fb,0xa1fc,0xa1fa,0xa1fd,0x0000,0x0000,0xa849,0xa84a,
-0xa84b,0xa84c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1ca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c7,
-0x0000,0xa1c6,0x0000,0x0000,0x0000,0xa84d,0x0000,0x0000,
-0x0000,0x0000,0xa1cc,0x0000,0x0000,0xa1d8,0xa1de,0xa84e,
-0xa1cf,0x0000,0x0000,0xa84f,0x0000,0xa1ce,0x0000,0xa1c4,
-0xa1c5,0xa1c9,0xa1c8,0xa1d2,0x0000,0x0000,0xa1d3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1e0,0xa1df,0xa1c3,0xa1cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1d6,0x0000,0x0000,0x0000,0xa1d5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa850,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1d9,0xa1d4,0x0000,0x0000,0xa1dc,0xa1dd,0xa851,0xa852,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1da,0xa1db,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa892,0x0000,0x0000,
-0x0000,0xa1d1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1cd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa853,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2d9,0xa2da,0xa2db,0xa2dc,0xa2dd,0xa2de,0xa2df,0xa2e0,
-0xa2e1,0xa2e2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa2c5,0xa2c6,0xa2c7,0xa2c8,
-0xa2c9,0xa2ca,0xa2cb,0xa2cc,0xa2cd,0xa2ce,0xa2cf,0xa2d0,
-0xa2d1,0xa2d2,0xa2d3,0xa2d4,0xa2d5,0xa2d6,0xa2d7,0xa2d8,
-0xa2b1,0xa2b2,0xa2b3,0xa2b4,0xa2b5,0xa2b6,0xa2b7,0xa2b8,
-0xa2b9,0xa2ba,0xa2bb,0xa2bc,0xa2bd,0xa2be,0xa2bf,0xa2c0,
-0xa2c1,0xa2c2,0xa2c3,0xa2c4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2500 */
-0xa9a4,0xa9a5,0xa9a6,0xa9a7,0xa9a8,0xa9a9,0xa9aa,0xa9ab,
-0xa9ac,0xa9ad,0xa9ae,0xa9af,0xa9b0,0xa9b1,0xa9b2,0xa9b3,
-0xa9b4,0xa9b5,0xa9b6,0xa9b7,0xa9b8,0xa9b9,0xa9ba,0xa9bb,
-0xa9bc,0xa9bd,0xa9be,0xa9bf,0xa9c0,0xa9c1,0xa9c2,0xa9c3,
-0xa9c4,0xa9c5,0xa9c6,0xa9c7,0xa9c8,0xa9c9,0xa9ca,0xa9cb,
-0xa9cc,0xa9cd,0xa9ce,0xa9cf,0xa9d0,0xa9d1,0xa9d2,0xa9d3,
-0xa9d4,0xa9d5,0xa9d6,0xa9d7,0xa9d8,0xa9d9,0xa9da,0xa9db,
-0xa9dc,0xa9dd,0xa9de,0xa9df,0xa9e0,0xa9e1,0xa9e2,0xa9e3,
-0xa9e4,0xa9e5,0xa9e6,0xa9e7,0xa9e8,0xa9e9,0xa9ea,0xa9eb,
-0xa9ec,0xa9ed,0xa9ee,0xa9ef,0x0000,0x0000,0x0000,0x0000,
-0xa854,0xa855,0xa856,0xa857,0xa858,0xa859,0xa85a,0xa85b,
-0xa85c,0xa85d,0xa85e,0xa85f,0xa860,0xa861,0xa862,0xa863,
-0xa864,0xa865,0xa866,0xa867,0xa868,0xa869,0xa86a,0xa86b,
-0xa86c,0xa86d,0xa86e,0xa86f,0xa870,0xa871,0xa872,0xa873,
-0xa874,0xa875,0xa876,0xa877,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa878,0xa879,0xa87a,0xa87b,0xa87c,0xa87d,0xa87e,
-0xa880,0xa881,0xa882,0xa883,0xa884,0xa885,0xa886,0xa887,
-0x0000,0x0000,0x0000,0xa888,0xa889,0xa88a,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1f6,0xa1f5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1f8,0xa1f7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa88b,0xa88c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1f4,0xa1f3,
-0x0000,0x0000,0x0000,0xa1f0,0x0000,0x0000,0xa1f2,0xa1f1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa88d,0xa88e,0xa88f,0xa890,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1ef,0xa1ee,0x0000,
-0x0000,0xa891,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e2,0x0000,0xa1e1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-static const int ucs_a2_cp936_table_min = 0x2000;
-static const int ucs_a2_cp936_table_max = 0x2000 + (sizeof (ucs_a2_cp936_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_a3_cp936_table[] = {
-/* 0x2f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1a1,0xa1a2,0xa1a3,0xa1a8,0x0000,0xa1a9,0xa965,0xa996,
-0xa1b4,0xa1b5,0xa1b6,0xa1b7,0xa1b8,0xa1b9,0xa1ba,0xa1bb,
-0xa1be,0xa1bf,0xa893,0xa1fe,0xa1b2,0xa1b3,0xa1bc,0xa1bd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa894,0xa895,0x0000,
-0x0000,0xa940,0xa941,0xa942,0xa943,0xa944,0xa945,0xa946,
-0xa947,0xa948,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa4a1,0xa4a2,0xa4a3,0xa4a4,0xa4a5,0xa4a6,0xa4a7,
-0xa4a8,0xa4a9,0xa4aa,0xa4ab,0xa4ac,0xa4ad,0xa4ae,0xa4af,
-0xa4b0,0xa4b1,0xa4b2,0xa4b3,0xa4b4,0xa4b5,0xa4b6,0xa4b7,
-0xa4b8,0xa4b9,0xa4ba,0xa4bb,0xa4bc,0xa4bd,0xa4be,0xa4bf,
-0xa4c0,0xa4c1,0xa4c2,0xa4c3,0xa4c4,0xa4c5,0xa4c6,0xa4c7,
-0xa4c8,0xa4c9,0xa4ca,0xa4cb,0xa4cc,0xa4cd,0xa4ce,0xa4cf,
-0xa4d0,0xa4d1,0xa4d2,0xa4d3,0xa4d4,0xa4d5,0xa4d6,0xa4d7,
-0xa4d8,0xa4d9,0xa4da,0xa4db,0xa4dc,0xa4dd,0xa4de,0xa4df,
-0xa4e0,0xa4e1,0xa4e2,0xa4e3,0xa4e4,0xa4e5,0xa4e6,0xa4e7,
-0xa4e8,0xa4e9,0xa4ea,0xa4eb,0xa4ec,0xa4ed,0xa4ee,0xa4ef,
-0xa4f0,0xa4f1,0xa4f2,0xa4f3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa961,0xa962,0xa966,0xa967,0x0000,
-0x0000,0xa5a1,0xa5a2,0xa5a3,0xa5a4,0xa5a5,0xa5a6,0xa5a7,
-0xa5a8,0xa5a9,0xa5aa,0xa5ab,0xa5ac,0xa5ad,0xa5ae,0xa5af,
-0xa5b0,0xa5b1,0xa5b2,0xa5b3,0xa5b4,0xa5b5,0xa5b6,0xa5b7,
-0xa5b8,0xa5b9,0xa5ba,0xa5bb,0xa5bc,0xa5bd,0xa5be,0xa5bf,
-0xa5c0,0xa5c1,0xa5c2,0xa5c3,0xa5c4,0xa5c5,0xa5c6,0xa5c7,
-0xa5c8,0xa5c9,0xa5ca,0xa5cb,0xa5cc,0xa5cd,0xa5ce,0xa5cf,
-0xa5d0,0xa5d1,0xa5d2,0xa5d3,0xa5d4,0xa5d5,0xa5d6,0xa5d7,
-0xa5d8,0xa5d9,0xa5da,0xa5db,0xa5dc,0xa5dd,0xa5de,0xa5df,
-0xa5e0,0xa5e1,0xa5e2,0xa5e3,0xa5e4,0xa5e5,0xa5e6,0xa5e7,
-0xa5e8,0xa5e9,0xa5ea,0xa5eb,0xa5ec,0xa5ed,0xa5ee,0xa5ef,
-0xa5f0,0xa5f1,0xa5f2,0xa5f3,0xa5f4,0xa5f5,0xa5f6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa960,0xa963,0xa964,0x0000,
-/* 0x3100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa8c5,0xa8c6,0xa8c7,
-0xa8c8,0xa8c9,0xa8ca,0xa8cb,0xa8cc,0xa8cd,0xa8ce,0xa8cf,
-0xa8d0,0xa8d1,0xa8d2,0xa8d3,0xa8d4,0xa8d5,0xa8d6,0xa8d7,
-0xa8d8,0xa8d9,0xa8da,0xa8db,0xa8dc,0xa8dd,0xa8de,0xa8df,
-0xa8e0,0xa8e1,0xa8e2,0xa8e3,0xa8e4,0xa8e5,0xa8e6,0xa8e7,
-0xa8e8,0xa8e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2e5,0xa2e6,0xa2e7,0xa2e8,0xa2e9,0xa2ea,0xa2eb,0xa2ec,
-0xa2ed,0xa2ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa95a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa949,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa94a,0xa94b,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa94c,0xa94d,0xa94e,0x0000,
-0x0000,0xa94f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa950,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa951,0x0000,
-0x0000,0xa952,0xa953,0x0000,0x0000,0xa954,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-
-static const int ucs_a3_cp936_table_min = 0x2f00;
-static const int ucs_a3_cp936_table_max = 0x2f00 + (sizeof (ucs_a3_cp936_table) / sizeof (unsigned short));
-
-/* 4d00h CJK Unified Ideographs (+ Extension A) */
-static const unsigned short ucs_i_cp936_table[] = {
-/* 0x4d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd2bb,0xb6a1,0x8140,0xc6df,0x8141,0x8142,0x8143,0xcdf2,
-0xd5c9,0xc8fd,0xc9cf,0xcfc2,0xd8a2,0xb2bb,0xd3eb,0x8144,
-0xd8a4,0xb3f3,0x8145,0xd7a8,0xc7d2,0xd8a7,0xcac0,0x8146,
-0xc7f0,0xb1fb,0xd2b5,0xb4d4,0xb6ab,0xcbbf,0xd8a9,0x8147,
-0x8148,0x8149,0xb6aa,0x814a,0xc1bd,0xd1cf,0x814b,0xc9a5,
-0xd8ad,0x814c,0xb8f6,0xd1be,0xe3dc,0xd6d0,0x814d,0x814e,
-0xb7e1,0x814f,0xb4ae,0x8150,0xc1d9,0x8151,0xd8bc,0x8152,
-0xcde8,0xb5a4,0xceaa,0xd6f7,0x8153,0xc0f6,0xbed9,0xd8af,
-0x8154,0x8155,0x8156,0xc4cb,0x8157,0xbec3,0x8158,0xd8b1,
-0xc3b4,0xd2e5,0x8159,0xd6ae,0xceda,0xd5a7,0xbaf5,0xb7a6,
-0xc0d6,0x815a,0xc6b9,0xc5d2,0xc7c7,0x815b,0xb9d4,0x815c,
-0xb3cb,0xd2d2,0x815d,0x815e,0xd8bf,0xbec5,0xc6f2,0xd2b2,
-0xcfb0,0xcfe7,0x815f,0x8160,0x8161,0x8162,0xcae9,0x8163,
-0x8164,0xd8c0,0x8165,0x8166,0x8167,0x8168,0x8169,0x816a,
-0xc2f2,0xc2d2,0x816b,0xc8e9,0x816c,0x816d,0x816e,0x816f,
-0x8170,0x8171,0x8172,0x8173,0x8174,0x8175,0xc7ac,0x8176,
-0x8177,0x8178,0x8179,0x817a,0x817b,0x817c,0xc1cb,0x817d,
-0xd3e8,0xd5f9,0x817e,0xcac2,0xb6fe,0xd8a1,0xd3da,0xbff7,
-0x8180,0xd4c6,0xbba5,0xd8c1,0xcee5,0xbeae,0x8181,0x8182,
-0xd8a8,0x8183,0xd1c7,0xd0a9,0x8184,0x8185,0x8186,0xd8bd,
-0xd9ef,0xcdf6,0xbfba,0x8187,0xbdbb,0xbaa5,0xd2e0,0xb2fa,
-0xbae0,0xc4b6,0x8188,0xcfed,0xbea9,0xcda4,0xc1c1,0x8189,
-0x818a,0x818b,0xc7d7,0xd9f1,0x818c,0xd9f4,0x818d,0x818e,
-0x818f,0x8190,0xc8cb,0xd8e9,0x8191,0x8192,0x8193,0xd2da,
-0xcab2,0xc8ca,0xd8ec,0xd8ea,0xd8c6,0xbdf6,0xc6cd,0xb3f0,
-0x8194,0xd8eb,0xbdf1,0xbde9,0x8195,0xc8d4,0xb4d3,0x8196,
-0x8197,0xc2d8,0x8198,0xb2d6,0xd7d0,0xcacb,0xcbfb,0xd5cc,
-0xb8b6,0xcfc9,0x8199,0x819a,0x819b,0xd9da,0xd8f0,0xc7aa,
-0x819c,0xd8ee,0x819d,0xb4fa,0xc1ee,0xd2d4,0x819e,0x819f,
-0xd8ed,0x81a0,0xd2c7,0xd8ef,0xc3c7,0x81a1,0x81a2,0x81a3,
-0xd1f6,0x81a4,0xd6d9,0xd8f2,0x81a5,0xd8f5,0xbcfe,0xbcdb,
-0x81a6,0x81a7,0x81a8,0xc8ce,0x81a9,0xb7dd,0x81aa,0xb7c2,
-0x81ab,0xc6f3,0x81ac,0x81ad,0x81ae,0x81af,0x81b0,0x81b1,
-0x81b2,0xd8f8,0xd2c1,0x81b3,0x81b4,0xcee9,0xbcbf,0xb7fc,
-0xb7a5,0xd0dd,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,0xd6da,
-0xd3c5,0xbbef,0xbbe1,0xd8f1,0x81ba,0x81bb,0xc9a1,0xceb0,
-0xb4ab,0x81bc,0xd8f3,0x81bd,0xc9cb,0xd8f6,0xc2d7,0xd8f7,
-0x81be,0x81bf,0xceb1,0xd8f9,0x81c0,0x81c1,0x81c2,0xb2ae,
-0xb9c0,0x81c3,0xd9a3,0x81c4,0xb0e9,0x81c5,0xc1e6,0x81c6,
-0xc9ec,0x81c7,0xcbc5,0x81c8,0xcbc6,0xd9a4,0x81c9,0x81ca,
-0x81cb,0x81cc,0x81cd,0xb5e8,0x81ce,0x81cf,0xb5ab,0x81d0,
-0x81d1,0x81d2,0x81d3,0x81d4,0x81d5,0xcebb,0xb5cd,0xd7a1,
-0xd7f4,0xd3d3,0x81d6,0xcce5,0x81d7,0xbace,0x81d8,0xd9a2,
-0xd9dc,0xd3e0,0xd8fd,0xb7f0,0xd7f7,0xd8fe,0xd8fa,0xd9a1,
-0xc4e3,0x81d9,0x81da,0xd3b6,0xd8f4,0xd9dd,0x81db,0xd8fb,
-0x81dc,0xc5e5,0x81dd,0x81de,0xc0d0,0x81df,0x81e0,0xd1f0,
-0xb0db,0x81e1,0x81e2,0xbcd1,0xd9a6,0x81e3,0xd9a5,0x81e4,
-0x81e5,0x81e6,0x81e7,0xd9ac,0xd9ae,0x81e8,0xd9ab,0xcab9,
-0x81e9,0x81ea,0x81eb,0xd9a9,0xd6b6,0x81ec,0x81ed,0x81ee,
-0xb3de,0xd9a8,0x81ef,0xc0fd,0x81f0,0xcacc,0x81f1,0xd9aa,
-0x81f2,0xd9a7,0x81f3,0x81f4,0xd9b0,0x81f5,0x81f6,0xb6b1,
-0x81f7,0x81f8,0x81f9,0xb9a9,0x81fa,0xd2c0,0x81fb,0x81fc,
-0xcfc0,0x81fd,0x81fe,0xc2c2,0x8240,0xbdc4,0xd5ec,0xb2e0,
-0xc7c8,0xbfeb,0xd9ad,0x8241,0xd9af,0x8242,0xceea,0xbaee,
-0x8243,0x8244,0x8245,0x8246,0x8247,0xc7d6,0x8248,0x8249,
-0x824a,0x824b,0x824c,0x824d,0x824e,0x824f,0x8250,0xb1e3,
-0x8251,0x8252,0x8253,0xb4d9,0xb6ed,0xd9b4,0x8254,0x8255,
-0x8256,0x8257,0xbfa1,0x8258,0x8259,0x825a,0xd9de,0xc7ce,
-0xc0fe,0xd9b8,0x825b,0x825c,0x825d,0x825e,0x825f,0xcbd7,
-0xb7fd,0x8260,0xd9b5,0x8261,0xd9b7,0xb1a3,0xd3e1,0xd9b9,
-0x8262,0xd0c5,0x8263,0xd9b6,0x8264,0x8265,0xd9b1,0x8266,
-0xd9b2,0xc1a9,0xd9b3,0x8267,0x8268,0xbcf3,0xd0de,0xb8a9,
-0x8269,0xbee3,0x826a,0xd9bd,0x826b,0x826c,0x826d,0x826e,
-0xd9ba,0x826f,0xb0b3,0x8270,0x8271,0x8272,0xd9c2,0x8273,
-0x8274,0x8275,0x8276,0x8277,0x8278,0x8279,0x827a,0x827b,
-0x827c,0x827d,0x827e,0x8280,0xd9c4,0xb1b6,0x8281,0xd9bf,
-0x8282,0x8283,0xb5b9,0x8284,0xbef3,0x8285,0x8286,0x8287,
-0xccc8,0xbaf2,0xd2d0,0x8288,0xd9c3,0x8289,0x828a,0xbde8,
-0x828b,0xb3ab,0x828c,0x828d,0x828e,0xd9c5,0xbeeb,0x828f,
-0xd9c6,0xd9bb,0xc4df,0x8290,0xd9be,0xd9c1,0xd9c0,0x8291,
-0x8292,0x8293,0x8294,0x8295,0x8296,0x8297,0x8298,0x8299,
-0x829a,0x829b,0xd5ae,0x829c,0xd6b5,0x829d,0xc7e3,0x829e,
-0x829f,0x82a0,0x82a1,0xd9c8,0x82a2,0x82a3,0x82a4,0xbcd9,
-0xd9ca,0x82a5,0x82a6,0x82a7,0xd9bc,0x82a8,0xd9cb,0xc6ab,
-0x82a9,0x82aa,0x82ab,0x82ac,0x82ad,0xd9c9,0x82ae,0x82af,
-0x82b0,0x82b1,0xd7f6,0x82b2,0xcda3,0x82b3,0x82b4,0x82b5,
-0x82b6,0x82b7,0x82b8,0x82b9,0x82ba,0xbda1,0x82bb,0x82bc,
-0x82bd,0x82be,0x82bf,0x82c0,0xd9cc,0x82c1,0x82c2,0x82c3,
-0x82c4,0x82c5,0x82c6,0x82c7,0x82c8,0x82c9,0xc5bc,0xcdb5,
-0x82ca,0x82cb,0x82cc,0xd9cd,0x82cd,0x82ce,0xd9c7,0xb3a5,
-0xbffe,0x82cf,0x82d0,0x82d1,0x82d2,0xb8b5,0x82d3,0x82d4,
-0xc0fc,0x82d5,0x82d6,0x82d7,0x82d8,0xb0f8,0x82d9,0x82da,
-0x82db,0x82dc,0x82dd,0x82de,0x82df,0x82e0,0x82e1,0x82e2,
-0x82e3,0x82e4,0x82e5,0x82e6,0x82e7,0x82e8,0x82e9,0x82ea,
-0x82eb,0x82ec,0x82ed,0xb4f6,0x82ee,0xd9ce,0x82ef,0xd9cf,
-0xb4a2,0xd9d0,0x82f0,0x82f1,0xb4df,0x82f2,0x82f3,0x82f4,
-0x82f5,0x82f6,0xb0c1,0x82f7,0x82f8,0x82f9,0x82fa,0x82fb,
-0x82fc,0x82fd,0xd9d1,0xc9b5,0x82fe,0x8340,0x8341,0x8342,
-0x8343,0x8344,0x8345,0x8346,0x8347,0x8348,0x8349,0x834a,
-0x834b,0x834c,0x834d,0x834e,0x834f,0x8350,0x8351,0xcff1,
-0x8352,0x8353,0x8354,0x8355,0x8356,0x8357,0xd9d2,0x8358,
-0x8359,0x835a,0xc1c5,0x835b,0x835c,0x835d,0x835e,0x835f,
-0x8360,0x8361,0x8362,0x8363,0x8364,0x8365,0xd9d6,0xc9ae,
-0x8366,0x8367,0x8368,0x8369,0xd9d5,0xd9d4,0xd9d7,0x836a,
-0x836b,0x836c,0x836d,0xcbdb,0x836e,0xbda9,0x836f,0x8370,
-0x8371,0x8372,0x8373,0xc6a7,0x8374,0x8375,0x8376,0x8377,
-0x8378,0x8379,0x837a,0x837b,0x837c,0x837d,0xd9d3,0xd9d8,
-0x837e,0x8380,0x8381,0xd9d9,0x8382,0x8383,0x8384,0x8385,
-0x8386,0x8387,0xc8e5,0x8388,0x8389,0x838a,0x838b,0x838c,
-0x838d,0x838e,0x838f,0x8390,0x8391,0x8392,0x8393,0x8394,
-0x8395,0xc0dc,0x8396,0x8397,0x8398,0x8399,0x839a,0x839b,
-0x839c,0x839d,0x839e,0x839f,0x83a0,0x83a1,0x83a2,0x83a3,
-0x83a4,0x83a5,0x83a6,0x83a7,0x83a8,0x83a9,0x83aa,0x83ab,
-0x83ac,0x83ad,0x83ae,0x83af,0x83b0,0x83b1,0x83b2,0xb6f9,
-0xd8a3,0xd4ca,0x83b3,0xd4aa,0xd0d6,0xb3e4,0xd5d7,0x83b4,
-0xcfc8,0xb9e2,0x83b5,0xbfcb,0x83b6,0xc3e2,0x83b7,0x83b8,
-0x83b9,0xb6d2,0x83ba,0x83bb,0xcdc3,0xd9ee,0xd9f0,0x83bc,
-0x83bd,0x83be,0xb5b3,0x83bf,0xb6b5,0x83c0,0x83c1,0x83c2,
-0x83c3,0x83c4,0xbea4,0x83c5,0x83c6,0xc8eb,0x83c7,0x83c8,
-0xc8ab,0x83c9,0x83ca,0xb0cb,0xb9ab,0xc1f9,0xd9e2,0x83cb,
-0xc0bc,0xb9b2,0x83cc,0xb9d8,0xd0cb,0xb1f8,0xc6e4,0xbedf,
-0xb5e4,0xd7c8,0x83cd,0xd1f8,0xbce6,0xcade,0x83ce,0x83cf,
-0xbcbd,0xd9e6,0xd8e7,0x83d0,0x83d1,0xc4da,0x83d2,0x83d3,
-0xb8d4,0xc8bd,0x83d4,0x83d5,0xb2e1,0xd4d9,0x83d6,0x83d7,
-0x83d8,0x83d9,0xc3b0,0x83da,0x83db,0xc3e1,0xdaa2,0xc8df,
-0x83dc,0xd0b4,0x83dd,0xbefc,0xc5a9,0x83de,0x83df,0x83e0,
-0xb9da,0x83e1,0xdaa3,0x83e2,0xd4a9,0xdaa4,0x83e3,0x83e4,
-0x83e5,0x83e6,0x83e7,0xd9fb,0xb6ac,0x83e8,0x83e9,0xb7eb,
-0xb1f9,0xd9fc,0xb3e5,0xbef6,0x83ea,0xbff6,0xd2b1,0xc0e4,
-0x83eb,0x83ec,0x83ed,0xb6b3,0xd9fe,0xd9fd,0x83ee,0x83ef,
-0xbebb,0x83f0,0x83f1,0x83f2,0xc6e0,0x83f3,0xd7bc,0xdaa1,
-0x83f4,0xc1b9,0x83f5,0xb5f2,0xc1e8,0x83f6,0x83f7,0xbcf5,
-0x83f8,0xb4d5,0x83f9,0x83fa,0x83fb,0x83fc,0x83fd,0x83fe,
-0x8440,0x8441,0x8442,0xc1dd,0x8443,0xc4fd,0x8444,0x8445,
-0xbcb8,0xb7b2,0x8446,0x8447,0xb7ef,0x8448,0x8449,0x844a,
-0x844b,0x844c,0x844d,0xd9ec,0x844e,0xc6be,0x844f,0xbfad,
-0xbbcb,0x8450,0x8451,0xb5ca,0x8452,0xdbc9,0xd0d7,0x8453,
-0xcdb9,0xb0bc,0xb3f6,0xbbf7,0xdbca,0xbaaf,0x8454,0xd4e4,
-0xb5b6,0xb5f3,0xd8d6,0xc8d0,0x8455,0x8456,0xb7d6,0xc7d0,
-0xd8d7,0x8457,0xbfaf,0x8458,0x8459,0xdbbb,0xd8d8,0x845a,
-0x845b,0xd0cc,0xbbae,0x845c,0x845d,0x845e,0xebbe,0xc1d0,
-0xc1f5,0xd4f2,0xb8d5,0xb4b4,0x845f,0xb3f5,0x8460,0x8461,
-0xc9be,0x8462,0x8463,0x8464,0xc5d0,0x8465,0x8466,0x8467,
-0xc5d9,0xc0fb,0x8468,0xb1f0,0x8469,0xd8d9,0xb9ce,0x846a,
-0xb5bd,0x846b,0x846c,0xd8da,0x846d,0x846e,0xd6c6,0xcba2,
-0xc8af,0xc9b2,0xb4cc,0xbfcc,0x846f,0xb9f4,0x8470,0xd8db,
-0xd8dc,0xb6e7,0xbcc1,0xccea,0x8471,0x8472,0x8473,0x8474,
-0x8475,0x8476,0xcff7,0x8477,0xd8dd,0xc7b0,0x8478,0x8479,
-0xb9d0,0xbda3,0x847a,0x847b,0xccde,0x847c,0xc6ca,0x847d,
-0x847e,0x8480,0x8481,0x8482,0xd8e0,0x8483,0xd8de,0x8484,
-0x8485,0xd8df,0x8486,0x8487,0x8488,0xb0fe,0x8489,0xbee7,
-0x848a,0xcaa3,0xbcf4,0x848b,0x848c,0x848d,0x848e,0xb8b1,
-0x848f,0x8490,0xb8ee,0x8491,0x8492,0x8493,0x8494,0x8495,
-0x8496,0x8497,0x8498,0x8499,0x849a,0xd8e2,0x849b,0xbdcb,
-0x849c,0xd8e4,0xd8e3,0x849d,0x849e,0x849f,0x84a0,0x84a1,
-0xc5fc,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,0x84a7,0x84a8,
-0xd8e5,0x84a9,0x84aa,0xd8e6,0x84ab,0x84ac,0x84ad,0x84ae,
-0x84af,0x84b0,0x84b1,0xc1a6,0x84b2,0xc8b0,0xb0ec,0xb9a6,
-0xbcd3,0xcef1,0xdbbd,0xc1d3,0x84b3,0x84b4,0x84b5,0x84b6,
-0xb6af,0xd6fa,0xc5ac,0xbdd9,0xdbbe,0xdbbf,0x84b7,0x84b8,
-0x84b9,0xc0f8,0xbea2,0xc0cd,0x84ba,0x84bb,0x84bc,0x84bd,
-0x84be,0x84bf,0x84c0,0x84c1,0x84c2,0x84c3,0xdbc0,0xcac6,
-0x84c4,0x84c5,0x84c6,0xb2aa,0x84c7,0x84c8,0x84c9,0xd3c2,
-0x84ca,0xc3e3,0x84cb,0xd1ab,0x84cc,0x84cd,0x84ce,0x84cf,
-0xdbc2,0x84d0,0xc0d5,0x84d1,0x84d2,0x84d3,0xdbc3,0x84d4,
-0xbfb1,0x84d5,0x84d6,0x84d7,0x84d8,0x84d9,0x84da,0xc4bc,
-0x84db,0x84dc,0x84dd,0x84de,0xc7da,0x84df,0x84e0,0x84e1,
-0x84e2,0x84e3,0x84e4,0x84e5,0x84e6,0x84e7,0x84e8,0x84e9,
-0xdbc4,0x84ea,0x84eb,0x84ec,0x84ed,0x84ee,0x84ef,0x84f0,
-0x84f1,0xd9e8,0xc9d7,0x84f2,0x84f3,0x84f4,0xb9b4,0xcef0,
-0xd4c8,0x84f5,0x84f6,0x84f7,0x84f8,0xb0fc,0xb4d2,0x84f9,
-0xd0d9,0x84fa,0x84fb,0x84fc,0x84fd,0xd9e9,0x84fe,0xdecb,
-0xd9eb,0x8540,0x8541,0x8542,0x8543,0xd8b0,0xbbaf,0xb1b1,
-0x8544,0xb3d7,0xd8ce,0x8545,0x8546,0xd4d1,0x8547,0x8548,
-0xbdb3,0xbfef,0x8549,0xcfbb,0x854a,0x854b,0xd8d0,0x854c,
-0x854d,0x854e,0xb7cb,0x854f,0x8550,0x8551,0xd8d1,0x8552,
-0x8553,0x8554,0x8555,0x8556,0x8557,0x8558,0x8559,0x855a,
-0x855b,0xc6a5,0xc7f8,0xd2bd,0x855c,0x855d,0xd8d2,0xc4e4,
-0x855e,0xcaae,0x855f,0xc7a7,0x8560,0xd8a6,0x8561,0xc9fd,
-0xcee7,0xbbdc,0xb0eb,0x8562,0x8563,0x8564,0xbbaa,0xd0ad,
-0x8565,0xb1b0,0xd7e4,0xd7bf,0x8566,0xb5a5,0xc2f4,0xc4cf,
-0x8567,0x8568,0xb2a9,0x8569,0xb2b7,0x856a,0xb1e5,0xdfb2,
-0xd5bc,0xbfa8,0xc2ac,0xd8d5,0xc2b1,0x856b,0xd8d4,0xced4,
-0x856c,0xdae0,0x856d,0xcec0,0x856e,0x856f,0xd8b4,0xc3ae,
-0xd3a1,0xcea3,0x8570,0xbcb4,0xc8b4,0xc2d1,0x8571,0xbeed,
-0xd0b6,0x8572,0xdae1,0x8573,0x8574,0x8575,0x8576,0xc7e4,
-0x8577,0x8578,0xb3a7,0x8579,0xb6f2,0xccfc,0xc0fa,0x857a,
-0x857b,0xc0f7,0x857c,0xd1b9,0xd1e1,0xd8c7,0x857d,0x857e,
-0x8580,0x8581,0x8582,0x8583,0x8584,0xb2de,0x8585,0x8586,
-0xc0e5,0x8587,0xbaf1,0x8588,0x8589,0xd8c8,0x858a,0xd4ad,
-0x858b,0x858c,0xcfe1,0xd8c9,0x858d,0xd8ca,0xcfc3,0x858e,
-0xb3f8,0xbec7,0x858f,0x8590,0x8591,0x8592,0xd8cb,0x8593,
-0x8594,0x8595,0x8596,0x8597,0x8598,0x8599,0xdbcc,0x859a,
-0x859b,0x859c,0x859d,0xc8a5,0x859e,0x859f,0x85a0,0xcfd8,
-0x85a1,0xc8fe,0xb2ce,0x85a2,0x85a3,0x85a4,0x85a5,0x85a6,
-0xd3d6,0xb2e6,0xbcb0,0xd3d1,0xcbab,0xb7b4,0x85a7,0x85a8,
-0x85a9,0xb7a2,0x85aa,0x85ab,0xcae5,0x85ac,0xc8a1,0xcadc,
-0xb1e4,0xd0f0,0x85ad,0xc5d1,0x85ae,0x85af,0x85b0,0xdbc5,
-0xb5fe,0x85b1,0x85b2,0xbfda,0xb9c5,0xbee4,0xc1ed,0x85b3,
-0xdfb6,0xdfb5,0xd6bb,0xbdd0,0xd5d9,0xb0c8,0xb6a3,0xbfc9,
-0xcca8,0xdfb3,0xcab7,0xd3d2,0x85b4,0xd8cf,0xd2b6,0xbac5,
-0xcbbe,0xccbe,0x85b5,0xdfb7,0xb5f0,0xdfb4,0x85b6,0x85b7,
-0x85b8,0xd3f5,0x85b9,0xb3d4,0xb8f7,0x85ba,0xdfba,0x85bb,
-0xbacf,0xbcaa,0xb5f5,0x85bc,0xcdac,0xc3fb,0xbaf3,0xc0f4,
-0xcdc2,0xcff2,0xdfb8,0xcfc5,0x85bd,0xc2c0,0xdfb9,0xc2f0,
-0x85be,0x85bf,0x85c0,0xbefd,0x85c1,0xc1df,0xcdcc,0xd2f7,
-0xb7cd,0xdfc1,0x85c2,0xdfc4,0x85c3,0x85c4,0xb7f1,0xb0c9,
-0xb6d6,0xb7d4,0x85c5,0xbaac,0xccfd,0xbfd4,0xcbb1,0xc6f4,
-0x85c6,0xd6a8,0xdfc5,0x85c7,0xcee2,0xb3b3,0x85c8,0x85c9,
-0xcefc,0xb4b5,0x85ca,0xcec7,0xbaf0,0x85cb,0xcee1,0x85cc,
-0xd1bd,0x85cd,0x85ce,0xdfc0,0x85cf,0x85d0,0xb4f4,0x85d1,
-0xb3ca,0x85d2,0xb8e6,0xdfbb,0x85d3,0x85d4,0x85d5,0x85d6,
-0xc4c5,0x85d7,0xdfbc,0xdfbd,0xdfbe,0xc5bb,0xdfbf,0xdfc2,
-0xd4b1,0xdfc3,0x85d8,0xc7ba,0xced8,0x85d9,0x85da,0x85db,
-0x85dc,0x85dd,0xc4d8,0x85de,0xdfca,0x85df,0xdfcf,0x85e0,
-0xd6dc,0x85e1,0x85e2,0x85e3,0x85e4,0x85e5,0x85e6,0x85e7,
-0x85e8,0xdfc9,0xdfda,0xceb6,0x85e9,0xbac7,0xdfce,0xdfc8,
-0xc5de,0x85ea,0x85eb,0xc9eb,0xbaf4,0xc3fc,0x85ec,0x85ed,
-0xbed7,0x85ee,0xdfc6,0x85ef,0xdfcd,0x85f0,0xc5d8,0x85f1,
-0x85f2,0x85f3,0x85f4,0xd5a6,0xbacd,0x85f5,0xbecc,0xd3bd,
-0xb8c0,0x85f6,0xd6e4,0x85f7,0xdfc7,0xb9be,0xbfa7,0x85f8,
-0x85f9,0xc1fc,0xdfcb,0xdfcc,0x85fa,0xdfd0,0x85fb,0x85fc,
-0x85fd,0x85fe,0x8640,0xdfdb,0xdfe5,0x8641,0xdfd7,0xdfd6,
-0xd7c9,0xdfe3,0xdfe4,0xe5eb,0xd2a7,0xdfd2,0x8642,0xbfa9,
-0x8643,0xd4db,0x8644,0xbfc8,0xdfd4,0x8645,0x8646,0x8647,
-0xcfcc,0x8648,0x8649,0xdfdd,0x864a,0xd1ca,0x864b,0xdfde,
-0xb0a7,0xc6b7,0xdfd3,0x864c,0xbae5,0x864d,0xb6df,0xcddb,
-0xb9fe,0xd4d5,0x864e,0x864f,0xdfdf,0xcfec,0xb0a5,0xdfe7,
-0xdfd1,0xd1c6,0xdfd5,0xdfd8,0xdfd9,0xdfdc,0x8650,0xbba9,
-0x8651,0xdfe0,0xdfe1,0x8652,0xdfe2,0xdfe6,0xdfe8,0xd3b4,
-0x8653,0x8654,0x8655,0x8656,0x8657,0xb8e7,0xc5b6,0xdfea,
-0xc9da,0xc1a8,0xc4c4,0x8658,0x8659,0xbfde,0xcff8,0x865a,
-0x865b,0x865c,0xd5dc,0xdfee,0x865d,0x865e,0x865f,0x8660,
-0x8661,0x8662,0xb2b8,0x8663,0xbadf,0xdfec,0x8664,0xdbc1,
-0x8665,0xd1e4,0x8666,0x8667,0x8668,0x8669,0xcbf4,0xb4bd,
-0x866a,0xb0a6,0x866b,0x866c,0x866d,0x866e,0x866f,0xdff1,
-0xccc6,0xdff2,0x8670,0x8671,0xdfed,0x8672,0x8673,0x8674,
-0x8675,0x8676,0x8677,0xdfe9,0x8678,0x8679,0x867a,0x867b,
-0xdfeb,0x867c,0xdfef,0xdff0,0xbbbd,0x867d,0x867e,0xdff3,
-0x8680,0x8681,0xdff4,0x8682,0xbba3,0x8683,0xcadb,0xcea8,
-0xe0a7,0xb3aa,0x8684,0xe0a6,0x8685,0x8686,0x8687,0xe0a1,
-0x8688,0x8689,0x868a,0x868b,0xdffe,0x868c,0xcdd9,0xdffc,
-0x868d,0xdffa,0x868e,0xbfd0,0xd7c4,0x868f,0xc9cc,0x8690,
-0x8691,0xdff8,0xb0a1,0x8692,0x8693,0x8694,0x8695,0x8696,
-0xdffd,0x8697,0x8698,0x8699,0x869a,0xdffb,0xe0a2,0x869b,
-0x869c,0x869d,0x869e,0x869f,0xe0a8,0x86a0,0x86a1,0x86a2,
-0x86a3,0xb7c8,0x86a4,0x86a5,0xc6a1,0xc9b6,0xc0b2,0xdff5,
-0x86a6,0x86a7,0xc5be,0x86a8,0xd8c4,0xdff9,0xc4f6,0x86a9,
-0x86aa,0x86ab,0x86ac,0x86ad,0x86ae,0xe0a3,0xe0a4,0xe0a5,
-0xd0a5,0x86af,0x86b0,0xe0b4,0xcce4,0x86b1,0xe0b1,0x86b2,
-0xbfa6,0xe0af,0xceb9,0xe0ab,0xc9c6,0x86b3,0x86b4,0xc0ae,
-0xe0ae,0xbaed,0xbab0,0xe0a9,0x86b5,0x86b6,0x86b7,0xdff6,
-0x86b8,0xe0b3,0x86b9,0x86ba,0xe0b8,0x86bb,0x86bc,0x86bd,
-0xb4ad,0xe0b9,0x86be,0x86bf,0xcfb2,0xbac8,0x86c0,0xe0b0,
-0x86c1,0x86c2,0x86c3,0x86c4,0x86c5,0x86c6,0x86c7,0xd0fa,
-0x86c8,0x86c9,0x86ca,0x86cb,0x86cc,0x86cd,0x86ce,0x86cf,
-0x86d0,0xe0ac,0x86d1,0xd4fb,0x86d2,0xdff7,0x86d3,0xc5e7,
-0x86d4,0xe0ad,0x86d5,0xd3f7,0x86d6,0xe0b6,0xe0b7,0x86d7,
-0x86d8,0x86d9,0x86da,0x86db,0xe0c4,0xd0e1,0x86dc,0x86dd,
-0x86de,0xe0bc,0x86df,0x86e0,0xe0c9,0xe0ca,0x86e1,0x86e2,
-0x86e3,0xe0be,0xe0aa,0xc9a4,0xe0c1,0x86e4,0xe0b2,0x86e5,
-0x86e6,0x86e7,0x86e8,0x86e9,0xcac8,0xe0c3,0x86ea,0xe0b5,
-0x86eb,0xcecb,0x86ec,0xcbc3,0xe0cd,0xe0c6,0xe0c2,0x86ed,
-0xe0cb,0x86ee,0xe0ba,0xe0bf,0xe0c0,0x86ef,0x86f0,0xe0c5,
-0x86f1,0x86f2,0xe0c7,0xe0c8,0x86f3,0xe0cc,0x86f4,0xe0bb,
-0x86f5,0x86f6,0x86f7,0x86f8,0x86f9,0xcbd4,0xe0d5,0x86fa,
-0xe0d6,0xe0d2,0x86fb,0x86fc,0x86fd,0x86fe,0x8740,0x8741,
-0xe0d0,0xbcce,0x8742,0x8743,0xe0d1,0x8744,0xb8c2,0xd8c5,
-0x8745,0x8746,0x8747,0x8748,0x8749,0x874a,0x874b,0x874c,
-0xd0ea,0x874d,0x874e,0xc2ef,0x874f,0x8750,0xe0cf,0xe0bd,
-0x8751,0x8752,0x8753,0xe0d4,0xe0d3,0x8754,0x8755,0xe0d7,
-0x8756,0x8757,0x8758,0x8759,0xe0dc,0xe0d8,0x875a,0x875b,
-0x875c,0xd6f6,0xb3b0,0x875d,0xd7ec,0x875e,0xcbbb,0x875f,
-0x8760,0xe0da,0x8761,0xcefb,0x8762,0x8763,0x8764,0xbad9,
-0x8765,0x8766,0x8767,0x8768,0x8769,0x876a,0x876b,0x876c,
-0x876d,0x876e,0x876f,0x8770,0xe0e1,0xe0dd,0xd2ad,0x8771,
-0x8772,0x8773,0x8774,0x8775,0xe0e2,0x8776,0x8777,0xe0db,
-0xe0d9,0xe0df,0x8778,0x8779,0xe0e0,0x877a,0x877b,0x877c,
-0x877d,0x877e,0xe0de,0x8780,0xe0e4,0x8781,0x8782,0x8783,
-0xc6f7,0xd8ac,0xd4eb,0xe0e6,0xcac9,0x8784,0x8785,0x8786,
-0x8787,0xe0e5,0x8788,0x8789,0x878a,0x878b,0xb8c1,0x878c,
-0x878d,0x878e,0x878f,0xe0e7,0xe0e8,0x8790,0x8791,0x8792,
-0x8793,0x8794,0x8795,0x8796,0x8797,0xe0e9,0xe0e3,0x8798,
-0x8799,0x879a,0x879b,0x879c,0x879d,0x879e,0xbabf,0xcce7,
-0x879f,0x87a0,0x87a1,0xe0ea,0x87a2,0x87a3,0x87a4,0x87a5,
-0x87a6,0x87a7,0x87a8,0x87a9,0x87aa,0x87ab,0x87ac,0x87ad,
-0x87ae,0x87af,0x87b0,0xcff9,0x87b1,0x87b2,0x87b3,0x87b4,
-0x87b5,0x87b6,0x87b7,0x87b8,0x87b9,0x87ba,0x87bb,0xe0eb,
-0x87bc,0x87bd,0x87be,0x87bf,0x87c0,0x87c1,0x87c2,0xc8c2,
-0x87c3,0x87c4,0x87c5,0x87c6,0xbdc0,0x87c7,0x87c8,0x87c9,
-0x87ca,0x87cb,0x87cc,0x87cd,0x87ce,0x87cf,0x87d0,0x87d1,
-0x87d2,0x87d3,0xc4d2,0x87d4,0x87d5,0x87d6,0x87d7,0x87d8,
-0x87d9,0x87da,0x87db,0x87dc,0xe0ec,0x87dd,0x87de,0xe0ed,
-0x87df,0x87e0,0xc7f4,0xcbc4,0x87e1,0xe0ee,0xbbd8,0xd8b6,
-0xd2f2,0xe0ef,0xcdc5,0x87e2,0xb6da,0x87e3,0x87e4,0x87e5,
-0x87e6,0x87e7,0x87e8,0xe0f1,0x87e9,0xd4b0,0x87ea,0x87eb,
-0xc0a7,0xb4d1,0x87ec,0x87ed,0xcea7,0xe0f0,0x87ee,0x87ef,
-0x87f0,0xe0f2,0xb9cc,0x87f1,0x87f2,0xb9fa,0xcdbc,0xe0f3,
-0x87f3,0x87f4,0x87f5,0xc6d4,0xe0f4,0x87f6,0xd4b2,0x87f7,
-0xc8a6,0xe0f6,0xe0f5,0x87f8,0x87f9,0x87fa,0x87fb,0x87fc,
-0x87fd,0x87fe,0x8840,0x8841,0x8842,0x8843,0x8844,0x8845,
-0x8846,0x8847,0x8848,0x8849,0xe0f7,0x884a,0x884b,0xcdc1,
-0x884c,0x884d,0x884e,0xcaa5,0x884f,0x8850,0x8851,0x8852,
-0xd4da,0xdbd7,0xdbd9,0x8853,0xdbd8,0xb9e7,0xdbdc,0xdbdd,
-0xb5d8,0x8854,0x8855,0xdbda,0x8856,0x8857,0x8858,0x8859,
-0x885a,0xdbdb,0xb3a1,0xdbdf,0x885b,0x885c,0xbbf8,0x885d,
-0xd6b7,0x885e,0xdbe0,0x885f,0x8860,0x8861,0x8862,0xbef9,
-0x8863,0x8864,0xb7bb,0x8865,0xdbd0,0xccae,0xbfb2,0xbbb5,
-0xd7f8,0xbfd3,0x8866,0x8867,0x8868,0x8869,0x886a,0xbfe9,
-0x886b,0x886c,0xbce1,0xccb3,0xdbde,0xb0d3,0xceeb,0xb7d8,
-0xd7b9,0xc6c2,0x886d,0x886e,0xc0a4,0x886f,0xccb9,0x8870,
-0xdbe7,0xdbe1,0xc6ba,0xdbe3,0x8871,0xdbe8,0x8872,0xc5f7,
-0x8873,0x8874,0x8875,0xdbea,0x8876,0x8877,0xdbe9,0xbfc0,
-0x8878,0x8879,0x887a,0xdbe6,0xdbe5,0x887b,0x887c,0x887d,
-0x887e,0x8880,0xb4b9,0xc0ac,0xc2a2,0xdbe2,0xdbe4,0x8881,
-0x8882,0x8883,0x8884,0xd0cd,0xdbed,0x8885,0x8886,0x8887,
-0x8888,0x8889,0xc0dd,0xdbf2,0x888a,0x888b,0x888c,0x888d,
-0x888e,0x888f,0x8890,0xb6e2,0x8891,0x8892,0x8893,0x8894,
-0xdbf3,0xdbd2,0xb9b8,0xd4ab,0xdbec,0x8895,0xbfd1,0xdbf0,
-0x8896,0xdbd1,0x8897,0xb5e6,0x8898,0xdbeb,0xbfe5,0x8899,
-0x889a,0x889b,0xdbee,0x889c,0xdbf1,0x889d,0x889e,0x889f,
-0xdbf9,0x88a0,0x88a1,0x88a2,0x88a3,0x88a4,0x88a5,0x88a6,
-0x88a7,0x88a8,0xb9a1,0xb0a3,0x88a9,0x88aa,0x88ab,0x88ac,
-0x88ad,0x88ae,0x88af,0xc2f1,0x88b0,0x88b1,0xb3c7,0xdbef,
-0x88b2,0x88b3,0xdbf8,0x88b4,0xc6d2,0xdbf4,0x88b5,0x88b6,
-0xdbf5,0xdbf7,0xdbf6,0x88b7,0x88b8,0xdbfe,0x88b9,0xd3f2,
-0xb2ba,0x88ba,0x88bb,0x88bc,0xdbfd,0x88bd,0x88be,0x88bf,
-0x88c0,0x88c1,0x88c2,0x88c3,0x88c4,0xdca4,0x88c5,0xdbfb,
-0x88c6,0x88c7,0x88c8,0x88c9,0xdbfa,0x88ca,0x88cb,0x88cc,
-0xdbfc,0xc5e0,0xbbf9,0x88cd,0x88ce,0xdca3,0x88cf,0x88d0,
-0xdca5,0x88d1,0xccc3,0x88d2,0x88d3,0x88d4,0xb6d1,0xddc0,
-0x88d5,0x88d6,0x88d7,0xdca1,0x88d8,0xdca2,0x88d9,0x88da,
-0x88db,0xc7b5,0x88dc,0x88dd,0x88de,0xb6e9,0x88df,0x88e0,
-0x88e1,0xdca7,0x88e2,0x88e3,0x88e4,0x88e5,0xdca6,0x88e6,
-0xdca9,0xb1a4,0x88e7,0x88e8,0xb5cc,0x88e9,0x88ea,0x88eb,
-0x88ec,0x88ed,0xbfb0,0x88ee,0x88ef,0x88f0,0x88f1,0x88f2,
-0xd1df,0x88f3,0x88f4,0x88f5,0x88f6,0xb6c2,0x88f7,0x88f8,
-0x88f9,0x88fa,0x88fb,0x88fc,0x88fd,0x88fe,0x8940,0x8941,
-0x8942,0x8943,0x8944,0x8945,0xdca8,0x8946,0x8947,0x8948,
-0x8949,0x894a,0x894b,0x894c,0xcbfa,0xebf3,0x894d,0x894e,
-0x894f,0xcbdc,0x8950,0x8951,0xcbfe,0x8952,0x8953,0x8954,
-0xccc1,0x8955,0x8956,0x8957,0x8958,0x8959,0xc8fb,0x895a,
-0x895b,0x895c,0x895d,0x895e,0x895f,0xdcaa,0x8960,0x8961,
-0x8962,0x8963,0x8964,0xccee,0xdcab,0x8965,0x8966,0x8967,
-0x8968,0x8969,0x896a,0x896b,0x896c,0x896d,0x896e,0x896f,
-0x8970,0x8971,0x8972,0x8973,0x8974,0x8975,0xdbd3,0x8976,
-0xdcaf,0xdcac,0x8977,0xbeb3,0x8978,0xcafb,0x8979,0x897a,
-0x897b,0xdcad,0x897c,0x897d,0x897e,0x8980,0x8981,0x8982,
-0x8983,0x8984,0xc9ca,0xc4b9,0x8985,0x8986,0x8987,0x8988,
-0x8989,0xc7bd,0xdcae,0x898a,0x898b,0x898c,0xd4f6,0xd0e6,
-0x898d,0x898e,0x898f,0x8990,0x8991,0x8992,0x8993,0x8994,
-0xc4ab,0xb6d5,0x8995,0x8996,0x8997,0x8998,0x8999,0x899a,
-0x899b,0x899c,0x899d,0x899e,0x899f,0x89a0,0x89a1,0x89a2,
-0x89a3,0x89a4,0x89a5,0x89a6,0xdbd4,0x89a7,0x89a8,0x89a9,
-0x89aa,0xb1da,0x89ab,0x89ac,0x89ad,0xdbd5,0x89ae,0x89af,
-0x89b0,0x89b1,0x89b2,0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,
-0x89b8,0xdbd6,0x89b9,0x89ba,0x89bb,0xbabe,0x89bc,0x89bd,
-0x89be,0x89bf,0x89c0,0x89c1,0x89c2,0x89c3,0x89c4,0x89c5,
-0x89c6,0x89c7,0x89c8,0x89c9,0xc8c0,0x89ca,0x89cb,0x89cc,
-0x89cd,0x89ce,0x89cf,0xcabf,0xc8c9,0x89d0,0xd7b3,0x89d1,
-0xc9f9,0x89d2,0x89d3,0xbfc7,0x89d4,0x89d5,0xbaf8,0x89d6,
-0x89d7,0xd2bc,0x89d8,0x89d9,0x89da,0x89db,0x89dc,0x89dd,
-0x89de,0x89df,0xe2ba,0x89e0,0xb4a6,0x89e1,0x89e2,0xb1b8,
-0x89e3,0x89e4,0x89e5,0x89e6,0x89e7,0xb8b4,0x89e8,0xcfc4,
-0x89e9,0x89ea,0x89eb,0x89ec,0xd9e7,0xcfa6,0xcde2,0x89ed,
-0x89ee,0xd9ed,0xb6e0,0x89ef,0xd2b9,0x89f0,0x89f1,0xb9bb,
-0x89f2,0x89f3,0x89f4,0x89f5,0xe2b9,0xe2b7,0x89f6,0xb4f3,
-0x89f7,0xccec,0xccab,0xb7f2,0x89f8,0xd8b2,0xd1eb,0xbabb,
-0x89f9,0xcaa7,0x89fa,0x89fb,0xcdb7,0x89fc,0x89fd,0xd2c4,
-0xbfe4,0xbcd0,0xb6e1,0x89fe,0xdec5,0x8a40,0x8a41,0x8a42,
-0x8a43,0xdec6,0xdbbc,0x8a44,0xd1d9,0x8a45,0x8a46,0xc6e6,
-0xc4ce,0xb7ee,0x8a47,0xb7dc,0x8a48,0x8a49,0xbffc,0xd7e0,
-0x8a4a,0xc6f5,0x8a4b,0x8a4c,0xb1bc,0xdec8,0xbdb1,0xccd7,
-0xdeca,0x8a4d,0xdec9,0x8a4e,0x8a4f,0x8a50,0x8a51,0x8a52,
-0xb5ec,0x8a53,0xc9dd,0x8a54,0x8a55,0xb0c2,0x8a56,0x8a57,
-0x8a58,0x8a59,0x8a5a,0x8a5b,0x8a5c,0x8a5d,0x8a5e,0x8a5f,
-0x8a60,0x8a61,0x8a62,0xc5ae,0xc5ab,0x8a63,0xc4cc,0x8a64,
-0xbce9,0xcbfd,0x8a65,0x8a66,0x8a67,0xbac3,0x8a68,0x8a69,
-0x8a6a,0xe5f9,0xc8e7,0xe5fa,0xcdfd,0x8a6b,0xd7b1,0xb8be,
-0xc2e8,0x8a6c,0xc8d1,0x8a6d,0x8a6e,0xe5fb,0x8a6f,0x8a70,
-0x8a71,0x8a72,0xb6ca,0xbccb,0x8a73,0x8a74,0xd1fd,0xe6a1,
-0x8a75,0xc3ee,0x8a76,0x8a77,0x8a78,0x8a79,0xe6a4,0x8a7a,
-0x8a7b,0x8a7c,0x8a7d,0xe5fe,0xe6a5,0xcdd7,0x8a7e,0x8a80,
-0xb7c1,0xe5fc,0xe5fd,0xe6a3,0x8a81,0x8a82,0xc4dd,0xe6a8,
-0x8a83,0x8a84,0xe6a7,0x8a85,0x8a86,0x8a87,0x8a88,0x8a89,
-0x8a8a,0xc3c3,0x8a8b,0xc6de,0x8a8c,0x8a8d,0xe6aa,0x8a8e,
-0x8a8f,0x8a90,0x8a91,0x8a92,0x8a93,0x8a94,0xc4b7,0x8a95,
-0x8a96,0x8a97,0xe6a2,0xcabc,0x8a98,0x8a99,0x8a9a,0x8a9b,
-0xbde3,0xb9c3,0xe6a6,0xd0d5,0xceaf,0x8a9c,0x8a9d,0xe6a9,
-0xe6b0,0x8a9e,0xd2a6,0x8a9f,0xbdaa,0xe6ad,0x8aa0,0x8aa1,
-0x8aa2,0x8aa3,0x8aa4,0xe6af,0x8aa5,0xc0d1,0x8aa6,0x8aa7,
-0xd2cc,0x8aa8,0x8aa9,0x8aaa,0xbca7,0x8aab,0x8aac,0x8aad,
-0x8aae,0x8aaf,0x8ab0,0x8ab1,0x8ab2,0x8ab3,0x8ab4,0x8ab5,
-0x8ab6,0xe6b1,0x8ab7,0xd2f6,0x8ab8,0x8ab9,0x8aba,0xd7cb,
-0x8abb,0xcdfe,0x8abc,0xcdde,0xc2a6,0xe6ab,0xe6ac,0xbdbf,
-0xe6ae,0xe6b3,0x8abd,0x8abe,0xe6b2,0x8abf,0x8ac0,0x8ac1,
-0x8ac2,0xe6b6,0x8ac3,0xe6b8,0x8ac4,0x8ac5,0x8ac6,0x8ac7,
-0xc4ef,0x8ac8,0x8ac9,0x8aca,0xc4c8,0x8acb,0x8acc,0xbeea,
-0xc9ef,0x8acd,0x8ace,0xe6b7,0x8acf,0xb6f0,0x8ad0,0x8ad1,
-0x8ad2,0xc3e4,0x8ad3,0x8ad4,0x8ad5,0x8ad6,0x8ad7,0x8ad8,
-0x8ad9,0xd3e9,0xe6b4,0x8ada,0xe6b5,0x8adb,0xc8a2,0x8adc,
-0x8add,0x8ade,0x8adf,0x8ae0,0xe6bd,0x8ae1,0x8ae2,0x8ae3,
-0xe6b9,0x8ae4,0x8ae5,0x8ae6,0x8ae7,0x8ae8,0xc6c5,0x8ae9,
-0x8aea,0xcdf1,0xe6bb,0x8aeb,0x8aec,0x8aed,0x8aee,0x8aef,
-0x8af0,0x8af1,0x8af2,0x8af3,0x8af4,0xe6bc,0x8af5,0x8af6,
-0x8af7,0x8af8,0xbbe9,0x8af9,0x8afa,0x8afb,0x8afc,0x8afd,
-0x8afe,0x8b40,0xe6be,0x8b41,0x8b42,0x8b43,0x8b44,0xe6ba,
-0x8b45,0x8b46,0xc0b7,0x8b47,0x8b48,0x8b49,0x8b4a,0x8b4b,
-0x8b4c,0x8b4d,0x8b4e,0x8b4f,0xd3a4,0xe6bf,0xc9f4,0xe6c3,
-0x8b50,0x8b51,0xe6c4,0x8b52,0x8b53,0x8b54,0x8b55,0xd0f6,
-0x8b56,0x8b57,0x8b58,0x8b59,0x8b5a,0x8b5b,0x8b5c,0x8b5d,
-0x8b5e,0x8b5f,0x8b60,0x8b61,0x8b62,0x8b63,0x8b64,0x8b65,
-0x8b66,0x8b67,0xc3bd,0x8b68,0x8b69,0x8b6a,0x8b6b,0x8b6c,
-0x8b6d,0x8b6e,0xc3c4,0xe6c2,0x8b6f,0x8b70,0x8b71,0x8b72,
-0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,0x8b78,0x8b79,0x8b7a,
-0x8b7b,0x8b7c,0xe6c1,0x8b7d,0x8b7e,0x8b80,0x8b81,0x8b82,
-0x8b83,0x8b84,0xe6c7,0xcfb1,0x8b85,0xebf4,0x8b86,0x8b87,
-0xe6ca,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0xe6c5,0x8b8d,
-0x8b8e,0xbcde,0xc9a9,0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,
-0x8b94,0xbcb5,0x8b95,0x8b96,0xcfd3,0x8b97,0x8b98,0x8b99,
-0x8b9a,0x8b9b,0xe6c8,0x8b9c,0xe6c9,0x8b9d,0xe6ce,0x8b9e,
-0xe6d0,0x8b9f,0x8ba0,0x8ba1,0xe6d1,0x8ba2,0x8ba3,0x8ba4,
-0xe6cb,0xb5d5,0x8ba5,0xe6cc,0x8ba6,0x8ba7,0xe6cf,0x8ba8,
-0x8ba9,0xc4db,0x8baa,0xe6c6,0x8bab,0x8bac,0x8bad,0x8bae,
-0x8baf,0xe6cd,0x8bb0,0x8bb1,0x8bb2,0x8bb3,0x8bb4,0x8bb5,
-0x8bb6,0x8bb7,0x8bb8,0x8bb9,0x8bba,0x8bbb,0x8bbc,0x8bbd,
-0x8bbe,0x8bbf,0x8bc0,0x8bc1,0x8bc2,0x8bc3,0x8bc4,0x8bc5,
-0x8bc6,0xe6d2,0x8bc7,0x8bc8,0x8bc9,0x8bca,0x8bcb,0x8bcc,
-0x8bcd,0x8bce,0x8bcf,0x8bd0,0x8bd1,0x8bd2,0xe6d4,0xe6d3,
-0x8bd3,0x8bd4,0x8bd5,0x8bd6,0x8bd7,0x8bd8,0x8bd9,0x8bda,
-0x8bdb,0x8bdc,0x8bdd,0x8bde,0x8bdf,0x8be0,0x8be1,0x8be2,
-0x8be3,0x8be4,0x8be5,0x8be6,0x8be7,0x8be8,0x8be9,0x8bea,
-0x8beb,0x8bec,0xe6d5,0x8bed,0xd9f8,0x8bee,0x8bef,0xe6d6,
-0x8bf0,0x8bf1,0x8bf2,0x8bf3,0x8bf4,0x8bf5,0x8bf6,0x8bf7,
-0xe6d7,0x8bf8,0x8bf9,0x8bfa,0x8bfb,0x8bfc,0x8bfd,0x8bfe,
-0x8c40,0x8c41,0x8c42,0x8c43,0x8c44,0x8c45,0x8c46,0x8c47,
-0xd7d3,0xe6dd,0x8c48,0xe6de,0xbfd7,0xd4d0,0x8c49,0xd7d6,
-0xb4e6,0xcbef,0xe6da,0xd8c3,0xd7ce,0xd0a2,0x8c4a,0xc3cf,
-0x8c4b,0x8c4c,0xe6df,0xbcbe,0xb9c2,0xe6db,0xd1a7,0x8c4d,
-0x8c4e,0xbaa2,0xc2cf,0x8c4f,0xd8ab,0x8c50,0x8c51,0x8c52,
-0xcaeb,0xe5ee,0x8c53,0xe6dc,0x8c54,0xb7f5,0x8c55,0x8c56,
-0x8c57,0x8c58,0xc8e6,0x8c59,0x8c5a,0xc4f5,0x8c5b,0x8c5c,
-0xe5b2,0xc4fe,0x8c5d,0xcbfc,0xe5b3,0xd5ac,0x8c5e,0xd3ee,
-0xcad8,0xb0b2,0x8c5f,0xcbce,0xcdea,0x8c60,0x8c61,0xbaea,
-0x8c62,0x8c63,0x8c64,0xe5b5,0x8c65,0xe5b4,0x8c66,0xd7da,
-0xb9d9,0xd6e6,0xb6a8,0xcdf0,0xd2cb,0xb1a6,0xcab5,0x8c67,
-0xb3e8,0xc9f3,0xbfcd,0xd0fb,0xcad2,0xe5b6,0xbbc2,0x8c68,
-0x8c69,0x8c6a,0xcfdc,0xb9ac,0x8c6b,0x8c6c,0x8c6d,0x8c6e,
-0xd4d7,0x8c6f,0x8c70,0xbaa6,0xd1e7,0xcffc,0xbcd2,0x8c71,
-0xe5b7,0xc8dd,0x8c72,0x8c73,0x8c74,0xbfed,0xb1f6,0xcbde,
-0x8c75,0x8c76,0xbcc5,0x8c77,0xbcc4,0xd2fa,0xc3dc,0xbfdc,
-0x8c78,0x8c79,0x8c7a,0x8c7b,0xb8bb,0x8c7c,0x8c7d,0x8c7e,
-0xc3c2,0x8c80,0xbaae,0xd4a2,0x8c81,0x8c82,0x8c83,0x8c84,
-0x8c85,0x8c86,0x8c87,0x8c88,0x8c89,0xc7de,0xc4af,0xb2ec,
-0x8c8a,0xb9d1,0x8c8b,0x8c8c,0xe5bb,0xc1c8,0x8c8d,0x8c8e,
-0xd5af,0x8c8f,0x8c90,0x8c91,0x8c92,0x8c93,0xe5bc,0x8c94,
-0xe5be,0x8c95,0x8c96,0x8c97,0x8c98,0x8c99,0x8c9a,0x8c9b,
-0xb4e7,0xb6d4,0xcbc2,0xd1b0,0xb5bc,0x8c9c,0x8c9d,0xcad9,
-0x8c9e,0xb7e2,0x8c9f,0x8ca0,0xc9e4,0x8ca1,0xbdab,0x8ca2,
-0x8ca3,0xcebe,0xd7f0,0x8ca4,0x8ca5,0x8ca6,0x8ca7,0xd0a1,
-0x8ca8,0xc9d9,0x8ca9,0x8caa,0xb6fb,0xe6d8,0xbce2,0x8cab,
-0xb3be,0x8cac,0xc9d0,0x8cad,0xe6d9,0xb3a2,0x8cae,0x8caf,
-0x8cb0,0x8cb1,0xdecc,0x8cb2,0xd3c8,0xdecd,0x8cb3,0xd2a2,
-0x8cb4,0x8cb5,0x8cb6,0x8cb7,0xdece,0x8cb8,0x8cb9,0x8cba,
-0x8cbb,0xbecd,0x8cbc,0x8cbd,0xdecf,0x8cbe,0x8cbf,0x8cc0,
-0xcaac,0xd2fc,0xb3df,0xe5ea,0xc4e1,0xbea1,0xceb2,0xc4f2,
-0xbed6,0xc6a8,0xb2e3,0x8cc1,0x8cc2,0xbed3,0x8cc3,0x8cc4,
-0xc7fc,0xcceb,0xbdec,0xcedd,0x8cc5,0x8cc6,0xcaba,0xc6c1,
-0xe5ec,0xd0bc,0x8cc7,0x8cc8,0x8cc9,0xd5b9,0x8cca,0x8ccb,
-0x8ccc,0xe5ed,0x8ccd,0x8cce,0x8ccf,0x8cd0,0xcaf4,0x8cd1,
-0xcdc0,0xc2c5,0x8cd2,0xe5ef,0x8cd3,0xc2c4,0xe5f0,0x8cd4,
-0x8cd5,0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,0xe5f8,0xcdcd,
-0x8cdb,0xc9bd,0x8cdc,0x8cdd,0x8cde,0x8cdf,0x8ce0,0x8ce1,
-0x8ce2,0xd2d9,0xe1a8,0x8ce3,0x8ce4,0x8ce5,0x8ce6,0xd3ec,
-0x8ce7,0xcbea,0xc6f1,0x8ce8,0x8ce9,0x8cea,0x8ceb,0x8cec,
-0xe1ac,0x8ced,0x8cee,0x8cef,0xe1a7,0xe1a9,0x8cf0,0x8cf1,
-0xe1aa,0xe1af,0x8cf2,0x8cf3,0xb2ed,0x8cf4,0xe1ab,0xb8da,
-0xe1ad,0xe1ae,0xe1b0,0xb5ba,0xe1b1,0x8cf5,0x8cf6,0x8cf7,
-0x8cf8,0x8cf9,0xe1b3,0xe1b8,0x8cfa,0x8cfb,0x8cfc,0x8cfd,
-0x8cfe,0xd1d2,0x8d40,0xe1b6,0xe1b5,0xc1eb,0x8d41,0x8d42,
-0x8d43,0xe1b7,0x8d44,0xd4c0,0x8d45,0xe1b2,0x8d46,0xe1ba,
-0xb0b6,0x8d47,0x8d48,0x8d49,0x8d4a,0xe1b4,0x8d4b,0xbff9,
-0x8d4c,0xe1b9,0x8d4d,0x8d4e,0xe1bb,0x8d4f,0x8d50,0x8d51,
-0x8d52,0x8d53,0x8d54,0xe1be,0x8d55,0x8d56,0x8d57,0x8d58,
-0x8d59,0x8d5a,0xe1bc,0x8d5b,0x8d5c,0x8d5d,0x8d5e,0x8d5f,
-0x8d60,0xd6c5,0x8d61,0x8d62,0x8d63,0x8d64,0x8d65,0x8d66,
-0x8d67,0xcfbf,0x8d68,0x8d69,0xe1bd,0xe1bf,0xc2cd,0x8d6a,
-0xb6eb,0x8d6b,0xd3f8,0x8d6c,0x8d6d,0xc7cd,0x8d6e,0x8d6f,
-0xb7e5,0x8d70,0x8d71,0x8d72,0x8d73,0x8d74,0x8d75,0x8d76,
-0x8d77,0x8d78,0x8d79,0xbefe,0x8d7a,0x8d7b,0x8d7c,0x8d7d,
-0x8d7e,0x8d80,0xe1c0,0xe1c1,0x8d81,0x8d82,0xe1c7,0xb3e7,
-0x8d83,0x8d84,0x8d85,0x8d86,0x8d87,0x8d88,0xc6e9,0x8d89,
-0x8d8a,0x8d8b,0x8d8c,0x8d8d,0xb4de,0x8d8e,0xd1c2,0x8d8f,
-0x8d90,0x8d91,0x8d92,0xe1c8,0x8d93,0x8d94,0xe1c6,0x8d95,
-0x8d96,0x8d97,0x8d98,0x8d99,0xe1c5,0x8d9a,0xe1c3,0xe1c2,
-0x8d9b,0xb1c0,0x8d9c,0x8d9d,0x8d9e,0xd5b8,0xe1c4,0x8d9f,
-0x8da0,0x8da1,0x8da2,0x8da3,0xe1cb,0x8da4,0x8da5,0x8da6,
-0x8da7,0x8da8,0x8da9,0x8daa,0x8dab,0xe1cc,0xe1ca,0x8dac,
-0x8dad,0x8dae,0x8daf,0x8db0,0x8db1,0x8db2,0x8db3,0xeffa,
-0x8db4,0x8db5,0xe1d3,0xe1d2,0xc7b6,0x8db6,0x8db7,0x8db8,
-0x8db9,0x8dba,0x8dbb,0x8dbc,0x8dbd,0x8dbe,0x8dbf,0x8dc0,
-0xe1c9,0x8dc1,0x8dc2,0xe1ce,0x8dc3,0xe1d0,0x8dc4,0x8dc5,
-0x8dc6,0x8dc7,0x8dc8,0x8dc9,0x8dca,0x8dcb,0x8dcc,0x8dcd,
-0x8dce,0xe1d4,0x8dcf,0xe1d1,0xe1cd,0x8dd0,0x8dd1,0xe1cf,
-0x8dd2,0x8dd3,0x8dd4,0x8dd5,0xe1d5,0x8dd6,0x8dd7,0x8dd8,
-0x8dd9,0x8dda,0x8ddb,0x8ddc,0x8ddd,0x8dde,0x8ddf,0x8de0,
-0x8de1,0x8de2,0xe1d6,0x8de3,0x8de4,0x8de5,0x8de6,0x8de7,
-0x8de8,0x8de9,0x8dea,0x8deb,0x8dec,0x8ded,0x8dee,0x8def,
-0x8df0,0x8df1,0x8df2,0x8df3,0x8df4,0x8df5,0x8df6,0x8df7,
-0x8df8,0xe1d7,0x8df9,0x8dfa,0x8dfb,0xe1d8,0x8dfc,0x8dfd,
-0x8dfe,0x8e40,0x8e41,0x8e42,0x8e43,0x8e44,0x8e45,0x8e46,
-0x8e47,0x8e48,0x8e49,0x8e4a,0x8e4b,0x8e4c,0x8e4d,0x8e4e,
-0x8e4f,0x8e50,0x8e51,0x8e52,0x8e53,0x8e54,0x8e55,0xe1da,
-0x8e56,0x8e57,0x8e58,0x8e59,0x8e5a,0x8e5b,0x8e5c,0x8e5d,
-0x8e5e,0x8e5f,0x8e60,0x8e61,0x8e62,0xe1db,0x8e63,0x8e64,
-0x8e65,0x8e66,0x8e67,0x8e68,0x8e69,0xcea1,0x8e6a,0x8e6b,
-0x8e6c,0x8e6d,0x8e6e,0x8e6f,0x8e70,0x8e71,0x8e72,0x8e73,
-0x8e74,0x8e75,0x8e76,0xe7dd,0x8e77,0xb4a8,0xd6dd,0x8e78,
-0x8e79,0xd1b2,0xb3b2,0x8e7a,0x8e7b,0xb9a4,0xd7f3,0xc7c9,
-0xbede,0xb9ae,0x8e7c,0xced7,0x8e7d,0x8e7e,0xb2ee,0xdbcf,
-0x8e80,0xbcba,0xd2d1,0xcbc8,0xb0cd,0x8e81,0x8e82,0xcfef,
-0x8e83,0x8e84,0x8e85,0x8e86,0x8e87,0xd9e3,0xbded,0x8e88,
-0x8e89,0xb1d2,0xcad0,0xb2bc,0x8e8a,0xcba7,0xb7ab,0x8e8b,
-0xcaa6,0x8e8c,0x8e8d,0x8e8e,0xcfa3,0x8e8f,0x8e90,0xe0f8,
-0xd5ca,0xe0fb,0x8e91,0x8e92,0xe0fa,0xc5c1,0xccfb,0x8e93,
-0xc1b1,0xe0f9,0xd6e3,0xb2af,0xd6c4,0xb5db,0x8e94,0x8e95,
-0x8e96,0x8e97,0x8e98,0x8e99,0x8e9a,0x8e9b,0xb4f8,0xd6a1,
-0x8e9c,0x8e9d,0x8e9e,0x8e9f,0x8ea0,0xcfaf,0xb0ef,0x8ea1,
-0x8ea2,0xe0fc,0x8ea3,0x8ea4,0x8ea5,0x8ea6,0x8ea7,0xe1a1,
-0xb3a3,0x8ea8,0x8ea9,0xe0fd,0xe0fe,0xc3b1,0x8eaa,0x8eab,
-0x8eac,0x8ead,0xc3dd,0x8eae,0xe1a2,0xb7f9,0x8eaf,0x8eb0,
-0x8eb1,0x8eb2,0x8eb3,0x8eb4,0xbbcf,0x8eb5,0x8eb6,0x8eb7,
-0x8eb8,0x8eb9,0x8eba,0x8ebb,0xe1a3,0xc4bb,0x8ebc,0x8ebd,
-0x8ebe,0x8ebf,0x8ec0,0xe1a4,0x8ec1,0x8ec2,0xe1a5,0x8ec3,
-0x8ec4,0xe1a6,0xb4b1,0x8ec5,0x8ec6,0x8ec7,0x8ec8,0x8ec9,
-0x8eca,0x8ecb,0x8ecc,0x8ecd,0x8ece,0x8ecf,0x8ed0,0x8ed1,
-0x8ed2,0x8ed3,0xb8c9,0xc6bd,0xc4ea,0x8ed4,0xb2a2,0x8ed5,
-0xd0d2,0x8ed6,0xe7db,0xbbc3,0xd3d7,0xd3c4,0x8ed7,0xb9e3,
-0xe2cf,0x8ed8,0x8ed9,0x8eda,0xd7af,0x8edb,0xc7ec,0xb1d3,
-0x8edc,0x8edd,0xb4b2,0xe2d1,0x8ede,0x8edf,0x8ee0,0xd0f2,
-0xc2ae,0xe2d0,0x8ee1,0xbfe2,0xd3a6,0xb5d7,0xe2d2,0xb5ea,
-0x8ee2,0xc3ed,0xb8fd,0x8ee3,0xb8ae,0x8ee4,0xc5d3,0xb7cf,
-0xe2d4,0x8ee5,0x8ee6,0x8ee7,0x8ee8,0xe2d3,0xb6c8,0xd7f9,
-0x8ee9,0x8eea,0x8eeb,0x8eec,0x8eed,0xcda5,0x8eee,0x8eef,
-0x8ef0,0x8ef1,0x8ef2,0xe2d8,0x8ef3,0xe2d6,0xcafc,0xbfb5,
-0xd3b9,0xe2d5,0x8ef4,0x8ef5,0x8ef6,0x8ef7,0xe2d7,0x8ef8,
-0x8ef9,0x8efa,0x8efb,0x8efc,0x8efd,0x8efe,0x8f40,0x8f41,
-0x8f42,0xc1ae,0xc0c8,0x8f43,0x8f44,0x8f45,0x8f46,0x8f47,
-0x8f48,0xe2db,0xe2da,0xc0aa,0x8f49,0x8f4a,0xc1ce,0x8f4b,
-0x8f4c,0x8f4d,0x8f4e,0xe2dc,0x8f4f,0x8f50,0x8f51,0x8f52,
-0x8f53,0x8f54,0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,
-0xe2dd,0x8f5b,0xe2de,0x8f5c,0x8f5d,0x8f5e,0x8f5f,0x8f60,
-0x8f61,0x8f62,0x8f63,0x8f64,0xdbc8,0x8f65,0xd1d3,0xcda2,
-0x8f66,0x8f67,0xbda8,0x8f68,0x8f69,0x8f6a,0xdec3,0xd8a5,
-0xbfaa,0xdbcd,0xd2ec,0xc6fa,0xc5aa,0x8f6b,0x8f6c,0x8f6d,
-0xdec4,0x8f6e,0xb1d7,0xdfae,0x8f6f,0x8f70,0x8f71,0xcabd,
-0x8f72,0xdfb1,0x8f73,0xb9ad,0x8f74,0xd2fd,0x8f75,0xb8a5,
-0xbaeb,0x8f76,0x8f77,0xb3da,0x8f78,0x8f79,0x8f7a,0xb5dc,
-0xd5c5,0x8f7b,0x8f7c,0x8f7d,0x8f7e,0xc3d6,0xcfd2,0xbba1,
-0x8f80,0xe5f3,0xe5f2,0x8f81,0x8f82,0xe5f4,0x8f83,0xcde4,
-0x8f84,0xc8f5,0x8f85,0x8f86,0x8f87,0x8f88,0x8f89,0x8f8a,
-0x8f8b,0xb5af,0xc7bf,0x8f8c,0xe5f6,0x8f8d,0x8f8e,0x8f8f,
-0xecb0,0x8f90,0x8f91,0x8f92,0x8f93,0x8f94,0x8f95,0x8f96,
-0x8f97,0x8f98,0x8f99,0x8f9a,0x8f9b,0x8f9c,0x8f9d,0x8f9e,
-0xe5e6,0x8f9f,0xb9e9,0xb5b1,0x8fa0,0xc2bc,0xe5e8,0xe5e7,
-0xe5e9,0x8fa1,0x8fa2,0x8fa3,0x8fa4,0xd2cd,0x8fa5,0x8fa6,
-0x8fa7,0xe1ea,0xd0ce,0x8fa8,0xcdae,0x8fa9,0xd1e5,0x8faa,
-0x8fab,0xb2ca,0xb1eb,0x8fac,0xb1f2,0xc5ed,0x8fad,0x8fae,
-0xd5c3,0xd3b0,0x8faf,0xe1dc,0x8fb0,0x8fb1,0x8fb2,0xe1dd,
-0x8fb3,0xd2db,0x8fb4,0xb3b9,0xb1cb,0x8fb5,0x8fb6,0x8fb7,
-0xcdf9,0xd5f7,0xe1de,0x8fb8,0xbeb6,0xb4fd,0x8fb9,0xe1df,
-0xbadc,0xe1e0,0xbbb2,0xc2c9,0xe1e1,0x8fba,0x8fbb,0x8fbc,
-0xd0ec,0x8fbd,0xcdbd,0x8fbe,0x8fbf,0xe1e2,0x8fc0,0xb5c3,
-0xc5c7,0xe1e3,0x8fc1,0x8fc2,0xe1e4,0x8fc3,0x8fc4,0x8fc5,
-0x8fc6,0xd3f9,0x8fc7,0x8fc8,0x8fc9,0x8fca,0x8fcb,0x8fcc,
-0xe1e5,0x8fcd,0xd1ad,0x8fce,0x8fcf,0xe1e6,0xcea2,0x8fd0,
-0x8fd1,0x8fd2,0x8fd3,0x8fd4,0x8fd5,0xe1e7,0x8fd6,0xb5c2,
-0x8fd7,0x8fd8,0x8fd9,0x8fda,0xe1e8,0xbbd5,0x8fdb,0x8fdc,
-0x8fdd,0x8fde,0x8fdf,0xd0c4,0xe2e0,0xb1d8,0xd2e4,0x8fe0,
-0x8fe1,0xe2e1,0x8fe2,0x8fe3,0xbcc9,0xc8cc,0x8fe4,0xe2e3,
-0xecfe,0xecfd,0xdfaf,0x8fe5,0x8fe6,0x8fe7,0xe2e2,0xd6be,
-0xcdfc,0xc3a6,0x8fe8,0x8fe9,0x8fea,0xe3c3,0x8feb,0x8fec,
-0xd6d2,0xe2e7,0x8fed,0x8fee,0xe2e8,0x8fef,0x8ff0,0xd3c7,
-0x8ff1,0x8ff2,0xe2ec,0xbfec,0x8ff3,0xe2ed,0xe2e5,0x8ff4,
-0x8ff5,0xb3c0,0x8ff6,0x8ff7,0x8ff8,0xc4ee,0x8ff9,0x8ffa,
-0xe2ee,0x8ffb,0x8ffc,0xd0c3,0x8ffd,0xbaf6,0xe2e9,0xb7de,
-0xbbb3,0xccac,0xcbcb,0xe2e4,0xe2e6,0xe2ea,0xe2eb,0x8ffe,
-0x9040,0x9041,0xe2f7,0x9042,0x9043,0xe2f4,0xd4f5,0xe2f3,
-0x9044,0x9045,0xc5ad,0x9046,0xd5fa,0xc5c2,0xb2c0,0x9047,
-0x9048,0xe2ef,0x9049,0xe2f2,0xc1af,0xcbbc,0x904a,0x904b,
-0xb5a1,0xe2f9,0x904c,0x904d,0x904e,0xbcb1,0xe2f1,0xd0d4,
-0xd4b9,0xe2f5,0xb9d6,0xe2f6,0x904f,0x9050,0x9051,0xc7d3,
-0x9052,0x9053,0x9054,0x9055,0x9056,0xe2f0,0x9057,0x9058,
-0x9059,0x905a,0x905b,0xd7dc,0xeda1,0x905c,0x905d,0xe2f8,
-0x905e,0xeda5,0xe2fe,0xcad1,0x905f,0x9060,0x9061,0x9062,
-0x9063,0x9064,0x9065,0xc1b5,0x9066,0xbbd0,0x9067,0x9068,
-0xbfd6,0x9069,0xbae3,0x906a,0x906b,0xcba1,0x906c,0x906d,
-0x906e,0xeda6,0xeda3,0x906f,0x9070,0xeda2,0x9071,0x9072,
-0x9073,0x9074,0xbbd6,0xeda7,0xd0f4,0x9075,0x9076,0xeda4,
-0xbade,0xb6f7,0xe3a1,0xb6b2,0xccf1,0xb9a7,0x9077,0xcfa2,
-0xc7a1,0x9078,0x9079,0xbfd2,0x907a,0x907b,0xb6f1,0x907c,
-0xe2fa,0xe2fb,0xe2fd,0xe2fc,0xc4d5,0xe3a2,0x907d,0xd3c1,
-0x907e,0x9080,0x9081,0xe3a7,0xc7c4,0x9082,0x9083,0x9084,
-0x9085,0xcfa4,0x9086,0x9087,0xe3a9,0xbab7,0x9088,0x9089,
-0x908a,0x908b,0xe3a8,0x908c,0xbbda,0x908d,0xe3a3,0x908e,
-0x908f,0x9090,0xe3a4,0xe3aa,0x9091,0xe3a6,0x9092,0xcef2,
-0xd3c6,0x9093,0x9094,0xbbbc,0x9095,0x9096,0xd4c3,0x9097,
-0xc4fa,0x9098,0x9099,0xeda8,0xd0fc,0xe3a5,0x909a,0xc3f5,
-0x909b,0xe3ad,0xb1af,0x909c,0xe3b2,0x909d,0x909e,0x909f,
-0xbcc2,0x90a0,0x90a1,0xe3ac,0xb5bf,0x90a2,0x90a3,0x90a4,
-0x90a5,0x90a6,0x90a7,0x90a8,0x90a9,0xc7e9,0xe3b0,0x90aa,
-0x90ab,0x90ac,0xbeaa,0xcdef,0x90ad,0x90ae,0x90af,0x90b0,
-0x90b1,0xbbf3,0x90b2,0x90b3,0x90b4,0xcce8,0x90b5,0x90b6,
-0xe3af,0x90b7,0xe3b1,0x90b8,0xcfa7,0xe3ae,0x90b9,0xcea9,
-0xbbdd,0x90ba,0x90bb,0x90bc,0x90bd,0x90be,0xb5eb,0xbee5,
-0xb2d2,0xb3cd,0x90bf,0xb1b9,0xe3ab,0xb2d1,0xb5ac,0xb9df,
-0xb6e8,0x90c0,0x90c1,0xcfeb,0xe3b7,0x90c2,0xbbcc,0x90c3,
-0x90c4,0xc8c7,0xd0ca,0x90c5,0x90c6,0x90c7,0x90c8,0x90c9,
-0xe3b8,0xb3ee,0x90ca,0x90cb,0x90cc,0x90cd,0xeda9,0x90ce,
-0xd3fa,0xd3e4,0x90cf,0x90d0,0x90d1,0xedaa,0xe3b9,0xd2e2,
-0x90d2,0x90d3,0x90d4,0x90d5,0x90d6,0xe3b5,0x90d7,0x90d8,
-0x90d9,0x90da,0xd3de,0x90db,0x90dc,0x90dd,0x90de,0xb8d0,
-0xe3b3,0x90df,0x90e0,0xe3b6,0xb7df,0x90e1,0xe3b4,0xc0a2,
-0x90e2,0x90e3,0x90e4,0xe3ba,0x90e5,0x90e6,0x90e7,0x90e8,
-0x90e9,0x90ea,0x90eb,0x90ec,0x90ed,0x90ee,0x90ef,0x90f0,
-0x90f1,0x90f2,0x90f3,0x90f4,0x90f5,0x90f6,0x90f7,0xd4b8,
-0x90f8,0x90f9,0x90fa,0x90fb,0x90fc,0x90fd,0x90fe,0x9140,
-0xb4c8,0x9141,0xe3bb,0x9142,0xbbc5,0x9143,0xc9f7,0x9144,
-0x9145,0xc9e5,0x9146,0x9147,0x9148,0xc4bd,0x9149,0x914a,
-0x914b,0x914c,0x914d,0x914e,0x914f,0xedab,0x9150,0x9151,
-0x9152,0x9153,0xc2fd,0x9154,0x9155,0x9156,0x9157,0xbbdb,
-0xbfae,0x9158,0x9159,0x915a,0x915b,0x915c,0x915d,0x915e,
-0xcebf,0x915f,0x9160,0x9161,0x9162,0xe3bc,0x9163,0xbfb6,
-0x9164,0x9165,0x9166,0x9167,0x9168,0x9169,0x916a,0x916b,
-0x916c,0x916d,0x916e,0x916f,0x9170,0x9171,0x9172,0x9173,
-0x9174,0x9175,0x9176,0xb1ef,0x9177,0x9178,0xd4f7,0x9179,
-0x917a,0x917b,0x917c,0x917d,0xe3be,0x917e,0x9180,0x9181,
-0x9182,0x9183,0x9184,0x9185,0x9186,0xedad,0x9187,0x9188,
-0x9189,0x918a,0x918b,0x918c,0x918d,0x918e,0x918f,0xe3bf,
-0xbaa9,0xedac,0x9190,0x9191,0xe3bd,0x9192,0x9193,0x9194,
-0x9195,0x9196,0x9197,0x9198,0x9199,0x919a,0x919b,0xe3c0,
-0x919c,0x919d,0x919e,0x919f,0x91a0,0x91a1,0xbab6,0x91a2,
-0x91a3,0x91a4,0xb6ae,0x91a5,0x91a6,0x91a7,0x91a8,0x91a9,
-0xd0b8,0x91aa,0xb0c3,0xedae,0x91ab,0x91ac,0x91ad,0x91ae,
-0x91af,0xedaf,0xc0c1,0x91b0,0xe3c1,0x91b1,0x91b2,0x91b3,
-0x91b4,0x91b5,0x91b6,0x91b7,0x91b8,0x91b9,0x91ba,0x91bb,
-0x91bc,0x91bd,0x91be,0x91bf,0x91c0,0x91c1,0xc5b3,0x91c2,
-0x91c3,0x91c4,0x91c5,0x91c6,0x91c7,0x91c8,0x91c9,0x91ca,
-0x91cb,0x91cc,0x91cd,0x91ce,0x91cf,0xe3c2,0x91d0,0x91d1,
-0x91d2,0x91d3,0x91d4,0x91d5,0x91d6,0x91d7,0x91d8,0xdcb2,
-0x91d9,0x91da,0x91db,0x91dc,0x91dd,0x91de,0xedb0,0x91df,
-0xb8ea,0x91e0,0xceec,0xeaa7,0xd0e7,0xcaf9,0xc8d6,0xcfb7,
-0xb3c9,0xced2,0xbde4,0x91e1,0x91e2,0xe3de,0xbbf2,0xeaa8,
-0xd5bd,0x91e3,0xc6dd,0xeaa9,0x91e4,0x91e5,0x91e6,0xeaaa,
-0x91e7,0xeaac,0xeaab,0x91e8,0xeaae,0xeaad,0x91e9,0x91ea,
-0x91eb,0x91ec,0xbdd8,0x91ed,0xeaaf,0x91ee,0xc2be,0x91ef,
-0x91f0,0x91f1,0x91f2,0xb4c1,0xb4f7,0x91f3,0x91f4,0xbba7,
-0x91f5,0x91f6,0x91f7,0x91f8,0x91f9,0xece6,0xece5,0xb7bf,
-0xcbf9,0xb1e2,0x91fa,0xece7,0x91fb,0x91fc,0x91fd,0xc9c8,
-0xece8,0xece9,0x91fe,0xcad6,0xded0,0xb2c5,0xd4fa,0x9240,
-0x9241,0xc6cb,0xb0c7,0xb4f2,0xc8d3,0x9242,0x9243,0x9244,
-0xcdd0,0x9245,0x9246,0xbfb8,0x9247,0x9248,0x9249,0x924a,
-0x924b,0x924c,0x924d,0xbfdb,0x924e,0x924f,0xc7a4,0xd6b4,
-0x9250,0xc0a9,0xded1,0xc9a8,0xd1ef,0xc5a4,0xb0e7,0xb3b6,
-0xc8c5,0x9251,0x9252,0xb0e2,0x9253,0x9254,0xb7f6,0x9255,
-0x9256,0xc5fa,0x9257,0x9258,0xb6f3,0x9259,0xd5d2,0xb3d0,
-0xbcbc,0x925a,0x925b,0x925c,0xb3ad,0x925d,0x925e,0x925f,
-0x9260,0xbef1,0xb0d1,0x9261,0x9262,0x9263,0x9264,0x9265,
-0x9266,0xd2d6,0xcae3,0xd7a5,0x9267,0xcdb6,0xb6b6,0xbfb9,
-0xd5db,0x9268,0xb8a7,0xc5d7,0x9269,0x926a,0x926b,0xded2,
-0xbfd9,0xc2d5,0xc7c0,0x926c,0xbba4,0xb1a8,0x926d,0x926e,
-0xc5ea,0x926f,0x9270,0xc5fb,0xcca7,0x9271,0x9272,0x9273,
-0x9274,0xb1a7,0x9275,0x9276,0x9277,0xb5d6,0x9278,0x9279,
-0x927a,0xc4a8,0x927b,0xded3,0xd1ba,0xb3e9,0x927c,0xc3f2,
-0x927d,0x927e,0xb7f7,0x9280,0xd6f4,0xb5a3,0xb2f0,0xc4b4,
-0xc4e9,0xc0ad,0xded4,0x9281,0xb0e8,0xc5c4,0xc1e0,0x9282,
-0xb9d5,0x9283,0xbedc,0xcdd8,0xb0ce,0x9284,0xcdcf,0xded6,
-0xbed0,0xd7be,0xded5,0xd5d0,0xb0dd,0x9285,0x9286,0xc4e2,
-0x9287,0x9288,0xc2a3,0xbcf0,0x9289,0xd3b5,0xc0b9,0xc5a1,
-0xb2a6,0xd4f1,0x928a,0x928b,0xc0a8,0xcac3,0xded7,0xd5fc,
-0x928c,0xb9b0,0x928d,0xc8ad,0xcba9,0x928e,0xded9,0xbfbd,
-0x928f,0x9290,0x9291,0x9292,0xc6b4,0xd7a7,0xcab0,0xc4c3,
-0x9293,0xb3d6,0xb9d2,0x9294,0x9295,0x9296,0x9297,0xd6b8,
-0xeafc,0xb0b4,0x9298,0x9299,0x929a,0x929b,0xbfe6,0x929c,
-0x929d,0xccf4,0x929e,0x929f,0x92a0,0x92a1,0xcdda,0x92a2,
-0x92a3,0x92a4,0xd6bf,0xc2ce,0x92a5,0xcece,0xcca2,0xd0ae,
-0xc4d3,0xb5b2,0xded8,0xd5f5,0xbcb7,0xbbd3,0x92a6,0x92a7,
-0xb0a4,0x92a8,0xc5b2,0xb4ec,0x92a9,0x92aa,0x92ab,0xd5f1,
-0x92ac,0x92ad,0xeafd,0x92ae,0x92af,0x92b0,0x92b1,0x92b2,
-0x92b3,0xdeda,0xcda6,0x92b4,0x92b5,0xcdec,0x92b6,0x92b7,
-0x92b8,0x92b9,0xcee6,0xdedc,0x92ba,0xcdb1,0xc0a6,0x92bb,
-0x92bc,0xd7bd,0x92bd,0xdedb,0xb0c6,0xbab4,0xc9d3,0xc4f3,
-0xbee8,0x92be,0x92bf,0x92c0,0x92c1,0xb2b6,0x92c2,0x92c3,
-0x92c4,0x92c5,0x92c6,0x92c7,0x92c8,0x92c9,0xc0cc,0xcbf0,
-0x92ca,0xbcf1,0xbbbb,0xb5b7,0x92cb,0x92cc,0x92cd,0xc5f5,
-0x92ce,0xdee6,0x92cf,0x92d0,0x92d1,0xdee3,0xbedd,0x92d2,
-0x92d3,0xdedf,0x92d4,0x92d5,0x92d6,0x92d7,0xb4b7,0xbddd,
-0x92d8,0x92d9,0xdee0,0xc4ed,0x92da,0x92db,0x92dc,0x92dd,
-0xcfc6,0x92de,0xb5e0,0x92df,0x92e0,0x92e1,0x92e2,0xb6de,
-0xcada,0xb5f4,0xdee5,0x92e3,0xd5c6,0x92e4,0xdee1,0xcccd,
-0xc6fe,0x92e5,0xc5c5,0x92e6,0x92e7,0x92e8,0xd2b4,0x92e9,
-0xbef2,0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,
-0xc2d3,0x92f1,0xccbd,0xb3b8,0x92f2,0xbdd3,0x92f3,0xbfd8,
-0xcdc6,0xd1da,0xb4eb,0x92f4,0xdee4,0xdedd,0xdee7,0x92f5,
-0xeafe,0x92f6,0x92f7,0xc2b0,0xdee2,0x92f8,0x92f9,0xd6c0,
-0xb5a7,0x92fa,0xb2f4,0x92fb,0xdee8,0x92fc,0xdef2,0x92fd,
-0x92fe,0x9340,0x9341,0x9342,0xdeed,0x9343,0xdef1,0x9344,
-0x9345,0xc8e0,0x9346,0x9347,0x9348,0xd7e1,0xdeef,0xc3e8,
-0xcce1,0x9349,0xb2e5,0x934a,0x934b,0x934c,0xd2be,0x934d,
-0x934e,0x934f,0x9350,0x9351,0x9352,0x9353,0xdeee,0x9354,
-0xdeeb,0xced5,0x9355,0xb4a7,0x9356,0x9357,0x9358,0x9359,
-0x935a,0xbfab,0xbebe,0x935b,0x935c,0xbdd2,0x935d,0x935e,
-0x935f,0x9360,0xdee9,0x9361,0xd4ae,0x9362,0xdede,0x9363,
-0xdeea,0x9364,0x9365,0x9366,0x9367,0xc0bf,0x9368,0xdeec,
-0xb2f3,0xb8e9,0xc2a7,0x9369,0x936a,0xbdc1,0x936b,0x936c,
-0x936d,0x936e,0x936f,0xdef5,0xdef8,0x9370,0x9371,0xb2ab,
-0xb4a4,0x9372,0x9373,0xb4ea,0xc9a6,0x9374,0x9375,0x9376,
-0x9377,0x9378,0x9379,0xdef6,0xcbd1,0x937a,0xb8e3,0x937b,
-0xdef7,0xdefa,0x937c,0x937d,0x937e,0x9380,0xdef9,0x9381,
-0x9382,0x9383,0xccc2,0x9384,0xb0e1,0xb4ee,0x9385,0x9386,
-0x9387,0x9388,0x9389,0x938a,0xe5ba,0x938b,0x938c,0x938d,
-0x938e,0x938f,0xd0af,0x9390,0x9391,0xb2eb,0x9392,0xeba1,
-0x9393,0xdef4,0x9394,0x9395,0xc9e3,0xdef3,0xb0da,0xd2a1,
-0xb1f7,0x9396,0xccaf,0x9397,0x9398,0x9399,0x939a,0x939b,
-0x939c,0x939d,0xdef0,0x939e,0xcba4,0x939f,0x93a0,0x93a1,
-0xd5aa,0x93a2,0x93a3,0x93a4,0x93a5,0x93a6,0xdefb,0x93a7,
-0x93a8,0x93a9,0x93aa,0x93ab,0x93ac,0x93ad,0x93ae,0xb4dd,
-0x93af,0xc4a6,0x93b0,0x93b1,0x93b2,0xdefd,0x93b3,0x93b4,
-0x93b5,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,0x93bb,0x93bc,
-0xc3fe,0xc4a1,0xdfa1,0x93bd,0x93be,0x93bf,0x93c0,0x93c1,
-0x93c2,0x93c3,0xc1cc,0x93c4,0xdefc,0xbeef,0x93c5,0xc6b2,
-0x93c6,0x93c7,0x93c8,0x93c9,0x93ca,0x93cb,0x93cc,0x93cd,
-0x93ce,0xb3c5,0xc8f6,0x93cf,0x93d0,0xcbba,0xdefe,0x93d1,
-0x93d2,0xdfa4,0x93d3,0x93d4,0x93d5,0x93d6,0xd7b2,0x93d7,
-0x93d8,0x93d9,0x93da,0x93db,0xb3b7,0x93dc,0x93dd,0x93de,
-0x93df,0xc1c3,0x93e0,0x93e1,0xc7cb,0xb2a5,0xb4e9,0x93e2,
-0xd7ab,0x93e3,0x93e4,0x93e5,0x93e6,0xc4ec,0x93e7,0xdfa2,
-0xdfa3,0x93e8,0xdfa5,0x93e9,0xbab3,0x93ea,0x93eb,0x93ec,
-0xdfa6,0x93ed,0xc0de,0x93ee,0x93ef,0xc9c3,0x93f0,0x93f1,
-0x93f2,0x93f3,0x93f4,0x93f5,0x93f6,0xb2d9,0xc7e6,0x93f7,
-0xdfa7,0x93f8,0xc7dc,0x93f9,0x93fa,0x93fb,0x93fc,0xdfa8,
-0xeba2,0x93fd,0x93fe,0x9440,0x9441,0x9442,0xcbd3,0x9443,
-0x9444,0x9445,0xdfaa,0x9446,0xdfa9,0x9447,0xb2c1,0x9448,
-0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,0x944f,0x9450,
-0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,0x9458,
-0x9459,0x945a,0x945b,0x945c,0x945d,0x945e,0x945f,0x9460,
-0xc5ca,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467,
-0x9468,0xdfab,0x9469,0x946a,0x946b,0x946c,0x946d,0x946e,
-0x946f,0x9470,0xd4dc,0x9471,0x9472,0x9473,0x9474,0x9475,
-0xc8c1,0x9476,0x9477,0x9478,0x9479,0x947a,0x947b,0x947c,
-0x947d,0x947e,0x9480,0x9481,0x9482,0xdfac,0x9483,0x9484,
-0x9485,0x9486,0x9487,0xbef0,0x9488,0x9489,0xdfad,0xd6a7,
-0x948a,0x948b,0x948c,0x948d,0xeab7,0xebb6,0xcad5,0x948e,
-0xd8fc,0xb8c4,0x948f,0xb9a5,0x9490,0x9491,0xb7c5,0xd5fe,
-0x9492,0x9493,0x9494,0x9495,0x9496,0xb9ca,0x9497,0x9498,
-0xd0a7,0xf4cd,0x9499,0x949a,0xb5d0,0x949b,0x949c,0xc3f4,
-0x949d,0xbec8,0x949e,0x949f,0x94a0,0xebb7,0xb0bd,0x94a1,
-0x94a2,0xbdcc,0x94a3,0xc1b2,0x94a4,0xb1d6,0xb3a8,0x94a5,
-0x94a6,0x94a7,0xb8d2,0xc9a2,0x94a8,0x94a9,0xb6d8,0x94aa,
-0x94ab,0x94ac,0x94ad,0xebb8,0xbeb4,0x94ae,0x94af,0x94b0,
-0xcafd,0x94b1,0xc7c3,0x94b2,0xd5fb,0x94b3,0x94b4,0xb7f3,
-0x94b5,0x94b6,0x94b7,0x94b8,0x94b9,0x94ba,0x94bb,0x94bc,
-0x94bd,0x94be,0x94bf,0x94c0,0x94c1,0x94c2,0x94c3,0xcec4,
-0x94c4,0x94c5,0x94c6,0xd5ab,0xb1f3,0x94c7,0x94c8,0x94c9,
-0xecb3,0xb0df,0x94ca,0xecb5,0x94cb,0x94cc,0x94cd,0xb6b7,
-0x94ce,0xc1cf,0x94cf,0xf5fa,0xd0b1,0x94d0,0x94d1,0xd5e5,
-0x94d2,0xced3,0x94d3,0x94d4,0xbdef,0xb3e2,0x94d5,0xb8ab,
-0x94d6,0xd5b6,0x94d7,0xedbd,0x94d8,0xb6cf,0x94d9,0xcbb9,
-0xd0c2,0x94da,0x94db,0x94dc,0x94dd,0x94de,0x94df,0x94e0,
-0x94e1,0xb7bd,0x94e2,0x94e3,0xecb6,0xcaa9,0x94e4,0x94e5,
-0x94e6,0xc5d4,0x94e7,0xecb9,0xecb8,0xc2c3,0xecb7,0x94e8,
-0x94e9,0x94ea,0x94eb,0xd0fd,0xecba,0x94ec,0xecbb,0xd7e5,
-0x94ed,0x94ee,0xecbc,0x94ef,0x94f0,0x94f1,0xecbd,0xc6ec,
-0x94f2,0x94f3,0x94f4,0x94f5,0x94f6,0x94f7,0x94f8,0x94f9,
-0xcede,0x94fa,0xbcc8,0x94fb,0x94fc,0xc8d5,0xb5a9,0xbec9,
-0xd6bc,0xd4e7,0x94fd,0x94fe,0xd1ae,0xd0f1,0xeab8,0xeab9,
-0xeaba,0xbab5,0x9540,0x9541,0x9542,0x9543,0xcab1,0xbff5,
-0x9544,0x9545,0xcdfa,0x9546,0x9547,0x9548,0x9549,0x954a,
-0xeac0,0x954b,0xb0ba,0xeabe,0x954c,0x954d,0xc0a5,0x954e,
-0x954f,0x9550,0xeabb,0x9551,0xb2fd,0x9552,0xc3f7,0xbbe8,
-0x9553,0x9554,0x9555,0xd2d7,0xcef4,0xeabf,0x9556,0x9557,
-0x9558,0xeabc,0x9559,0x955a,0x955b,0xeac3,0x955c,0xd0c7,
-0xd3b3,0x955d,0x955e,0x955f,0x9560,0xb4ba,0x9561,0xc3c1,
-0xd7f2,0x9562,0x9563,0x9564,0x9565,0xd5d1,0x9566,0xcac7,
-0x9567,0xeac5,0x9568,0x9569,0xeac4,0xeac7,0xeac6,0x956a,
-0x956b,0x956c,0x956d,0x956e,0xd6e7,0x956f,0xcfd4,0x9570,
-0x9571,0xeacb,0x9572,0xbbce,0x9573,0x9574,0x9575,0x9576,
-0x9577,0x9578,0x9579,0xbdfa,0xc9ce,0x957a,0x957b,0xeacc,
-0x957c,0x957d,0xc9b9,0xcffe,0xeaca,0xd4ce,0xeacd,0xeacf,
-0x957e,0x9580,0xcded,0x9581,0x9582,0x9583,0x9584,0xeac9,
-0x9585,0xeace,0x9586,0x9587,0xceee,0x9588,0xbbde,0x9589,
-0xb3bf,0x958a,0x958b,0x958c,0x958d,0x958e,0xc6d5,0xbeb0,
-0xcefa,0x958f,0x9590,0x9591,0xc7e7,0x9592,0xbea7,0xead0,
-0x9593,0x9594,0xd6c7,0x9595,0x9596,0x9597,0xc1c0,0x9598,
-0x9599,0x959a,0xd4dd,0x959b,0xead1,0x959c,0x959d,0xcfbe,
-0x959e,0x959f,0x95a0,0x95a1,0xead2,0x95a2,0x95a3,0x95a4,
-0x95a5,0xcaee,0x95a6,0x95a7,0x95a8,0x95a9,0xc5af,0xb0b5,
-0x95aa,0x95ab,0x95ac,0x95ad,0x95ae,0xead4,0x95af,0x95b0,
-0x95b1,0x95b2,0x95b3,0x95b4,0x95b5,0x95b6,0x95b7,0xead3,
-0xf4df,0x95b8,0x95b9,0x95ba,0x95bb,0x95bc,0xc4ba,0x95bd,
-0x95be,0x95bf,0x95c0,0x95c1,0xb1a9,0x95c2,0x95c3,0x95c4,
-0x95c5,0xe5df,0x95c6,0x95c7,0x95c8,0x95c9,0xead5,0x95ca,
-0x95cb,0x95cc,0x95cd,0x95ce,0x95cf,0x95d0,0x95d1,0x95d2,
-0x95d3,0x95d4,0x95d5,0x95d6,0x95d7,0x95d8,0x95d9,0x95da,
-0x95db,0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,0x95e2,
-0x95e3,0xcaef,0x95e4,0xead6,0xead7,0xc6d8,0x95e5,0x95e6,
-0x95e7,0x95e8,0x95e9,0x95ea,0x95eb,0x95ec,0xead8,0x95ed,
-0x95ee,0xead9,0x95ef,0x95f0,0x95f1,0x95f2,0x95f3,0x95f4,
-0xd4bb,0x95f5,0xc7fa,0xd2b7,0xb8fc,0x95f6,0x95f7,0xeac2,
-0x95f8,0xb2dc,0x95f9,0x95fa,0xc2fc,0x95fb,0xd4f8,0xcce6,
-0xd7ee,0x95fc,0x95fd,0x95fe,0x9640,0x9641,0x9642,0x9643,
-0xd4c2,0xd3d0,0xebc3,0xc5f3,0x9644,0xb7fe,0x9645,0x9646,
-0xebd4,0x9647,0x9648,0x9649,0xcbb7,0xebde,0x964a,0xc0ca,
-0x964b,0x964c,0x964d,0xcdfb,0x964e,0xb3af,0x964f,0xc6da,
-0x9650,0x9651,0x9652,0x9653,0x9654,0x9655,0xebfc,0x9656,
-0xc4be,0x9657,0xceb4,0xc4a9,0xb1be,0xd4fd,0x9658,0xcaf5,
-0x9659,0xd6ec,0x965a,0x965b,0xc6d3,0xb6e4,0x965c,0x965d,
-0x965e,0x965f,0xbbfa,0x9660,0x9661,0xd0e0,0x9662,0x9663,
-0xc9b1,0x9664,0xd4d3,0xc8a8,0x9665,0x9666,0xb8cb,0x9667,
-0xe8be,0xc9bc,0x9668,0x9669,0xe8bb,0x966a,0xc0ee,0xd0d3,
-0xb2c4,0xb4e5,0x966b,0xe8bc,0x966c,0x966d,0xd5c8,0x966e,
-0x966f,0x9670,0x9671,0x9672,0xb6c5,0x9673,0xe8bd,0xcaf8,
-0xb8dc,0xccf5,0x9674,0x9675,0x9676,0xc0b4,0x9677,0x9678,
-0xd1ee,0xe8bf,0xe8c2,0x9679,0x967a,0xbabc,0x967b,0xb1ad,
-0xbddc,0x967c,0xeabd,0xe8c3,0x967d,0xe8c6,0x967e,0xe8cb,
-0x9680,0x9681,0x9682,0x9683,0xe8cc,0x9684,0xcbc9,0xb0e5,
-0x9685,0xbcab,0x9686,0x9687,0xb9b9,0x9688,0x9689,0xe8c1,
-0x968a,0xcdf7,0x968b,0xe8ca,0x968c,0x968d,0x968e,0x968f,
-0xcef6,0x9690,0x9691,0x9692,0x9693,0xd5ed,0x9694,0xc1d6,
-0xe8c4,0x9695,0xc3b6,0x9696,0xb9fb,0xd6a6,0xe8c8,0x9697,
-0x9698,0x9699,0xcae0,0xd4e6,0x969a,0xe8c0,0x969b,0xe8c5,
-0xe8c7,0x969c,0xc7b9,0xb7e3,0x969d,0xe8c9,0x969e,0xbfdd,
-0xe8d2,0x969f,0x96a0,0xe8d7,0x96a1,0xe8d5,0xbcdc,0xbccf,
-0xe8db,0x96a2,0x96a3,0x96a4,0x96a5,0x96a6,0x96a7,0x96a8,
-0x96a9,0xe8de,0x96aa,0xe8da,0xb1fa,0x96ab,0x96ac,0x96ad,
-0x96ae,0x96af,0x96b0,0x96b1,0x96b2,0x96b3,0x96b4,0xb0d8,
-0xc4b3,0xb8cc,0xc6e2,0xc8be,0xc8e1,0x96b5,0x96b6,0x96b7,
-0xe8cf,0xe8d4,0xe8d6,0x96b8,0xb9f1,0xe8d8,0xd7f5,0x96b9,
-0xc4fb,0x96ba,0xe8dc,0x96bb,0x96bc,0xb2e9,0x96bd,0x96be,
-0x96bf,0xe8d1,0x96c0,0x96c1,0xbced,0x96c2,0x96c3,0xbfc2,
-0xe8cd,0xd6f9,0x96c4,0xc1f8,0xb2f1,0x96c5,0x96c6,0x96c7,
-0x96c8,0x96c9,0x96ca,0x96cb,0x96cc,0xe8df,0x96cd,0xcac1,
-0xe8d9,0x96ce,0x96cf,0x96d0,0x96d1,0xd5a4,0x96d2,0xb1ea,
-0xd5bb,0xe8ce,0xe8d0,0xb6b0,0xe8d3,0x96d3,0xe8dd,0xc0b8,
-0x96d4,0xcaf7,0x96d5,0xcba8,0x96d6,0x96d7,0xc6dc,0xc0f5,
-0x96d8,0x96d9,0x96da,0x96db,0x96dc,0xe8e9,0x96dd,0x96de,
-0x96df,0xd0a3,0x96e0,0x96e1,0x96e2,0x96e3,0x96e4,0x96e5,
-0x96e6,0xe8f2,0xd6ea,0x96e7,0x96e8,0x96e9,0x96ea,0x96eb,
-0x96ec,0x96ed,0xe8e0,0xe8e1,0x96ee,0x96ef,0x96f0,0xd1f9,
-0xbacb,0xb8f9,0x96f1,0x96f2,0xb8f1,0xd4d4,0xe8ef,0x96f3,
-0xe8ee,0xe8ec,0xb9f0,0xccd2,0xe8e6,0xcea6,0xbff2,0x96f4,
-0xb0b8,0xe8f1,0xe8f0,0x96f5,0xd7c0,0x96f6,0xe8e4,0x96f7,
-0xcda9,0xc9a3,0x96f8,0xbbb8,0xbddb,0xe8ea,0x96f9,0x96fa,
-0x96fb,0x96fc,0x96fd,0x96fe,0x9740,0x9741,0x9742,0x9743,
-0xe8e2,0xe8e3,0xe8e5,0xb5b5,0xe8e7,0xc7c5,0xe8eb,0xe8ed,
-0xbdb0,0xd7ae,0x9744,0xe8f8,0x9745,0x9746,0x9747,0x9748,
-0x9749,0x974a,0x974b,0x974c,0xe8f5,0x974d,0xcdb0,0xe8f6,
-0x974e,0x974f,0x9750,0x9751,0x9752,0x9753,0x9754,0x9755,
-0x9756,0xc1ba,0x9757,0xe8e8,0x9758,0xc3b7,0xb0f0,0x9759,
-0x975a,0x975b,0x975c,0x975d,0x975e,0x975f,0x9760,0xe8f4,
-0x9761,0x9762,0x9763,0xe8f7,0x9764,0x9765,0x9766,0xb9a3,
-0x9767,0x9768,0x9769,0x976a,0x976b,0x976c,0x976d,0x976e,
-0x976f,0x9770,0xc9d2,0x9771,0x9772,0x9773,0xc3ce,0xcee0,
-0xc0e6,0x9774,0x9775,0x9776,0x9777,0xcbf3,0x9778,0xccdd,
-0xd0b5,0x9779,0x977a,0xcae1,0x977b,0xe8f3,0x977c,0x977d,
-0x977e,0x9780,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786,
-0xbcec,0x9787,0xe8f9,0x9788,0x9789,0x978a,0x978b,0x978c,
-0x978d,0xc3de,0x978e,0xc6e5,0x978f,0xb9f7,0x9790,0x9791,
-0x9792,0x9793,0xb0f4,0x9794,0x9795,0xd7d8,0x9796,0x9797,
-0xbcac,0x9798,0xc5ef,0x9799,0x979a,0x979b,0x979c,0x979d,
-0xccc4,0x979e,0x979f,0xe9a6,0x97a0,0x97a1,0x97a2,0x97a3,
-0x97a4,0x97a5,0x97a6,0x97a7,0x97a8,0x97a9,0xc9ad,0x97aa,
-0xe9a2,0xc0e2,0x97ab,0x97ac,0x97ad,0xbfc3,0x97ae,0x97af,
-0x97b0,0xe8fe,0xb9d7,0x97b1,0xe8fb,0x97b2,0x97b3,0x97b4,
-0x97b5,0xe9a4,0x97b6,0x97b7,0x97b8,0xd2ce,0x97b9,0x97ba,
-0x97bb,0x97bc,0x97bd,0xe9a3,0x97be,0xd6b2,0xd7b5,0x97bf,
-0xe9a7,0x97c0,0xbdb7,0x97c1,0x97c2,0x97c3,0x97c4,0x97c5,
-0x97c6,0x97c7,0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,0xe8fc,
-0xe8fd,0x97cd,0x97ce,0x97cf,0xe9a1,0x97d0,0x97d1,0x97d2,
-0x97d3,0x97d4,0x97d5,0x97d6,0x97d7,0xcdd6,0x97d8,0x97d9,
-0xd2ac,0x97da,0x97db,0x97dc,0xe9b2,0x97dd,0x97de,0x97df,
-0x97e0,0xe9a9,0x97e1,0x97e2,0x97e3,0xb4aa,0x97e4,0xb4bb,
-0x97e5,0x97e6,0xe9ab,0x97e7,0x97e8,0x97e9,0x97ea,0x97eb,
-0x97ec,0x97ed,0x97ee,0x97ef,0x97f0,0x97f1,0x97f2,0x97f3,
-0x97f4,0x97f5,0x97f6,0x97f7,0xd0a8,0x97f8,0x97f9,0xe9a5,
-0x97fa,0x97fb,0xb3fe,0x97fc,0x97fd,0xe9ac,0xc0e3,0x97fe,
-0xe9aa,0x9840,0x9841,0xe9b9,0x9842,0x9843,0xe9b8,0x9844,
-0x9845,0x9846,0x9847,0xe9ae,0x9848,0x9849,0xe8fa,0x984a,
-0x984b,0xe9a8,0x984c,0x984d,0x984e,0x984f,0x9850,0xbfac,
-0xe9b1,0xe9ba,0x9851,0x9852,0xc2a5,0x9853,0x9854,0x9855,
-0xe9af,0x9856,0xb8c5,0x9857,0xe9ad,0x9858,0xd3dc,0xe9b4,
-0xe9b5,0xe9b7,0x9859,0x985a,0x985b,0xe9c7,0x985c,0x985d,
-0x985e,0x985f,0x9860,0x9861,0xc0c6,0xe9c5,0x9862,0x9863,
-0xe9b0,0x9864,0x9865,0xe9bb,0xb0f1,0x9866,0x9867,0x9868,
-0x9869,0x986a,0x986b,0x986c,0x986d,0x986e,0x986f,0xe9bc,
-0xd5a5,0x9870,0x9871,0xe9be,0x9872,0xe9bf,0x9873,0x9874,
-0x9875,0xe9c1,0x9876,0x9877,0xc1f1,0x9878,0x9879,0xc8b6,
-0x987a,0x987b,0x987c,0xe9bd,0x987d,0x987e,0x9880,0x9881,
-0x9882,0xe9c2,0x9883,0x9884,0x9885,0x9886,0x9887,0x9888,
-0x9889,0x988a,0xe9c3,0x988b,0xe9b3,0x988c,0xe9b6,0x988d,
-0xbbb1,0x988e,0x988f,0x9890,0xe9c0,0x9891,0x9892,0x9893,
-0x9894,0x9895,0x9896,0xbcf7,0x9897,0x9898,0x9899,0xe9c4,
-0xe9c6,0x989a,0x989b,0x989c,0x989d,0x989e,0x989f,0x98a0,
-0x98a1,0x98a2,0x98a3,0x98a4,0x98a5,0xe9ca,0x98a6,0x98a7,
-0x98a8,0x98a9,0xe9ce,0x98aa,0x98ab,0x98ac,0x98ad,0x98ae,
-0x98af,0x98b0,0x98b1,0x98b2,0x98b3,0xb2db,0x98b4,0xe9c8,
-0x98b5,0x98b6,0x98b7,0x98b8,0x98b9,0x98ba,0x98bb,0x98bc,
-0x98bd,0x98be,0xb7ae,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,
-0x98c4,0x98c5,0x98c6,0x98c7,0x98c8,0x98c9,0x98ca,0xe9cb,
-0xe9cc,0x98cb,0x98cc,0x98cd,0x98ce,0x98cf,0x98d0,0xd5c1,
-0x98d1,0xc4a3,0x98d2,0x98d3,0x98d4,0x98d5,0x98d6,0x98d7,
-0xe9d8,0x98d8,0xbae1,0x98d9,0x98da,0x98db,0x98dc,0xe9c9,
-0x98dd,0xd3a3,0x98de,0x98df,0x98e0,0xe9d4,0x98e1,0x98e2,
-0x98e3,0x98e4,0x98e5,0x98e6,0x98e7,0xe9d7,0xe9d0,0x98e8,
-0x98e9,0x98ea,0x98eb,0x98ec,0xe9cf,0x98ed,0x98ee,0xc7c1,
-0x98ef,0x98f0,0x98f1,0x98f2,0x98f3,0x98f4,0x98f5,0x98f6,
-0xe9d2,0x98f7,0x98f8,0x98f9,0x98fa,0x98fb,0x98fc,0x98fd,
-0xe9d9,0xb3c8,0x98fe,0xe9d3,0x9940,0x9941,0x9942,0x9943,
-0x9944,0xcff0,0x9945,0x9946,0x9947,0xe9cd,0x9948,0x9949,
-0x994a,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951,
-0x9952,0xb3f7,0x9953,0x9954,0x9955,0x9956,0x9957,0x9958,
-0x9959,0xe9d6,0x995a,0x995b,0xe9da,0x995c,0x995d,0x995e,
-0xccb4,0x995f,0x9960,0x9961,0xcfad,0x9962,0x9963,0x9964,
-0x9965,0x9966,0x9967,0x9968,0x9969,0x996a,0xe9d5,0x996b,
-0xe9dc,0xe9db,0x996c,0x996d,0x996e,0x996f,0x9970,0xe9de,
-0x9971,0x9972,0x9973,0x9974,0x9975,0x9976,0x9977,0x9978,
-0xe9d1,0x9979,0x997a,0x997b,0x997c,0x997d,0x997e,0x9980,
-0x9981,0xe9dd,0x9982,0xe9df,0xc3ca,0x9983,0x9984,0x9985,
-0x9986,0x9987,0x9988,0x9989,0x998a,0x998b,0x998c,0x998d,
-0x998e,0x998f,0x9990,0x9991,0x9992,0x9993,0x9994,0x9995,
-0x9996,0x9997,0x9998,0x9999,0x999a,0x999b,0x999c,0x999d,
-0x999e,0x999f,0x99a0,0x99a1,0x99a2,0x99a3,0x99a4,0x99a5,
-0x99a6,0x99a7,0x99a8,0x99a9,0x99aa,0x99ab,0x99ac,0x99ad,
-0x99ae,0x99af,0x99b0,0x99b1,0x99b2,0x99b3,0x99b4,0x99b5,
-0x99b6,0x99b7,0x99b8,0x99b9,0x99ba,0x99bb,0x99bc,0x99bd,
-0x99be,0x99bf,0x99c0,0x99c1,0x99c2,0x99c3,0x99c4,0x99c5,
-0x99c6,0x99c7,0x99c8,0x99c9,0x99ca,0x99cb,0x99cc,0x99cd,
-0x99ce,0x99cf,0x99d0,0x99d1,0x99d2,0x99d3,0x99d4,0x99d5,
-0x99d6,0x99d7,0x99d8,0x99d9,0x99da,0x99db,0x99dc,0x99dd,
-0x99de,0x99df,0x99e0,0x99e1,0x99e2,0x99e3,0x99e4,0x99e5,
-0x99e6,0x99e7,0x99e8,0x99e9,0x99ea,0x99eb,0x99ec,0x99ed,
-0x99ee,0x99ef,0x99f0,0x99f1,0x99f2,0x99f3,0x99f4,0x99f5,
-0xc7b7,0xb4ce,0xbbb6,0xd0c0,0xeca3,0x99f6,0x99f7,0xc5b7,
-0x99f8,0x99f9,0x99fa,0x99fb,0x99fc,0x99fd,0x99fe,0x9a40,
-0x9a41,0x9a42,0xd3fb,0x9a43,0x9a44,0x9a45,0x9a46,0xeca4,
-0x9a47,0xeca5,0xc6db,0x9a48,0x9a49,0x9a4a,0xbfee,0x9a4b,
-0x9a4c,0x9a4d,0x9a4e,0xeca6,0x9a4f,0x9a50,0xeca7,0xd0aa,
-0x9a51,0xc7b8,0x9a52,0x9a53,0xb8e8,0x9a54,0x9a55,0x9a56,
-0x9a57,0x9a58,0x9a59,0x9a5a,0x9a5b,0x9a5c,0x9a5d,0x9a5e,
-0x9a5f,0xeca8,0x9a60,0x9a61,0x9a62,0x9a63,0x9a64,0x9a65,
-0x9a66,0x9a67,0xd6b9,0xd5fd,0xb4cb,0xb2bd,0xcee4,0xc6e7,
-0x9a68,0x9a69,0xcde1,0x9a6a,0x9a6b,0x9a6c,0x9a6d,0x9a6e,
-0x9a6f,0x9a70,0x9a71,0x9a72,0x9a73,0x9a74,0x9a75,0x9a76,
-0x9a77,0xb4f5,0x9a78,0xcbc0,0xbcdf,0x9a79,0x9a7a,0x9a7b,
-0x9a7c,0xe9e2,0xe9e3,0xd1ea,0xe9e5,0x9a7d,0xb4f9,0xe9e4,
-0x9a7e,0xd1b3,0xcae2,0xb2d0,0x9a80,0xe9e8,0x9a81,0x9a82,
-0x9a83,0x9a84,0xe9e6,0xe9e7,0x9a85,0x9a86,0xd6b3,0x9a87,
-0x9a88,0x9a89,0xe9e9,0xe9ea,0x9a8a,0x9a8b,0x9a8c,0x9a8d,
-0x9a8e,0xe9eb,0x9a8f,0x9a90,0x9a91,0x9a92,0x9a93,0x9a94,
-0x9a95,0x9a96,0xe9ec,0x9a97,0x9a98,0x9a99,0x9a9a,0x9a9b,
-0x9a9c,0x9a9d,0x9a9e,0xecaf,0xc5b9,0xb6ce,0x9a9f,0xd2f3,
-0x9aa0,0x9aa1,0x9aa2,0x9aa3,0x9aa4,0x9aa5,0x9aa6,0xb5ee,
-0x9aa7,0xbbd9,0xecb1,0x9aa8,0x9aa9,0xd2e3,0x9aaa,0x9aab,
-0x9aac,0x9aad,0x9aae,0xcee3,0x9aaf,0xc4b8,0x9ab0,0xc3bf,
-0x9ab1,0x9ab2,0xb6be,0xd8b9,0xb1c8,0xb1cf,0xb1d1,0xc5fe,
-0x9ab3,0xb1d0,0x9ab4,0xc3ab,0x9ab5,0x9ab6,0x9ab7,0x9ab8,
-0x9ab9,0xd5b1,0x9aba,0x9abb,0x9abc,0x9abd,0x9abe,0x9abf,
-0x9ac0,0x9ac1,0xeba4,0xbac1,0x9ac2,0x9ac3,0x9ac4,0xccba,
-0x9ac5,0x9ac6,0x9ac7,0xeba5,0x9ac8,0xeba7,0x9ac9,0x9aca,
-0x9acb,0xeba8,0x9acc,0x9acd,0x9ace,0xeba6,0x9acf,0x9ad0,
-0x9ad1,0x9ad2,0x9ad3,0x9ad4,0x9ad5,0xeba9,0xebab,0xebaa,
-0x9ad6,0x9ad7,0x9ad8,0x9ad9,0x9ada,0xebac,0x9adb,0xcacf,
-0xd8b5,0xc3f1,0x9adc,0xc3a5,0xc6f8,0xebad,0xc4ca,0x9add,
-0xebae,0xebaf,0xebb0,0xb7d5,0x9ade,0x9adf,0x9ae0,0xb7fa,
-0x9ae1,0xebb1,0xc7e2,0x9ae2,0xebb3,0x9ae3,0xbaa4,0xd1f5,
-0xb0b1,0xebb2,0xebb4,0x9ae4,0x9ae5,0x9ae6,0xb5aa,0xc2c8,
-0xc7e8,0x9ae7,0xebb5,0x9ae8,0xcbae,0xe3df,0x9ae9,0x9aea,
-0xd3c0,0x9aeb,0x9aec,0x9aed,0x9aee,0xd9db,0x9aef,0x9af0,
-0xcda1,0xd6ad,0xc7f3,0x9af1,0x9af2,0x9af3,0xd9e0,0xbbe3,
-0x9af4,0xbaba,0xe3e2,0x9af5,0x9af6,0x9af7,0x9af8,0x9af9,
-0xcfab,0x9afa,0x9afb,0x9afc,0xe3e0,0xc9c7,0x9afd,0xbab9,
-0x9afe,0x9b40,0x9b41,0xd1b4,0xe3e1,0xc8ea,0xb9af,0xbdad,
-0xb3d8,0xcedb,0x9b42,0x9b43,0xccc0,0x9b44,0x9b45,0x9b46,
-0xe3e8,0xe3e9,0xcdf4,0x9b47,0x9b48,0x9b49,0x9b4a,0x9b4b,
-0xccad,0x9b4c,0xbcb3,0x9b4d,0xe3ea,0x9b4e,0xe3eb,0x9b4f,
-0x9b50,0xd0da,0x9b51,0x9b52,0x9b53,0xc6fb,0xb7da,0x9b54,
-0x9b55,0xc7df,0xd2ca,0xced6,0x9b56,0xe3e4,0xe3ec,0x9b57,
-0xc9f2,0xb3c1,0x9b58,0x9b59,0xe3e7,0x9b5a,0x9b5b,0xc6e3,
-0xe3e5,0x9b5c,0x9b5d,0xedb3,0xe3e6,0x9b5e,0x9b5f,0x9b60,
-0x9b61,0xc9b3,0x9b62,0xc5e6,0x9b63,0x9b64,0x9b65,0xb9b5,
-0x9b66,0xc3bb,0x9b67,0xe3e3,0xc5bd,0xc1a4,0xc2d9,0xb2d7,
-0x9b68,0xe3ed,0xbba6,0xc4ad,0x9b69,0xe3f0,0xbeda,0x9b6a,
-0x9b6b,0xe3fb,0xe3f5,0xbad3,0x9b6c,0x9b6d,0x9b6e,0x9b6f,
-0xb7d0,0xd3cd,0x9b70,0xd6ce,0xd5d3,0xb9c1,0xd5b4,0xd1d8,
-0x9b71,0x9b72,0x9b73,0x9b74,0xd0b9,0xc7f6,0x9b75,0x9b76,
-0x9b77,0xc8aa,0xb2b4,0x9b78,0xc3da,0x9b79,0x9b7a,0x9b7b,
-0xe3ee,0x9b7c,0x9b7d,0xe3fc,0xe3ef,0xb7a8,0xe3f7,0xe3f4,
-0x9b7e,0x9b80,0x9b81,0xb7ba,0x9b82,0x9b83,0xc5a2,0x9b84,
-0xe3f6,0xc5dd,0xb2a8,0xc6fc,0x9b85,0xc4e0,0x9b86,0x9b87,
-0xd7a2,0x9b88,0xc0e1,0xe3f9,0x9b89,0x9b8a,0xe3fa,0xe3fd,
-0xcca9,0xe3f3,0x9b8b,0xd3be,0x9b8c,0xb1c3,0xedb4,0xe3f1,
-0xe3f2,0x9b8d,0xe3f8,0xd0ba,0xc6c3,0xd4f3,0xe3fe,0x9b8e,
-0x9b8f,0xbde0,0x9b90,0x9b91,0xe4a7,0x9b92,0x9b93,0xe4a6,
-0x9b94,0x9b95,0x9b96,0xd1f3,0xe4a3,0x9b97,0xe4a9,0x9b98,
-0x9b99,0x9b9a,0xc8f7,0x9b9b,0x9b9c,0x9b9d,0x9b9e,0xcfb4,
-0x9b9f,0xe4a8,0xe4ae,0xc2e5,0x9ba0,0x9ba1,0xb6b4,0x9ba2,
-0x9ba3,0x9ba4,0x9ba5,0x9ba6,0x9ba7,0xbdf2,0x9ba8,0xe4a2,
-0x9ba9,0x9baa,0xbae9,0xe4aa,0x9bab,0x9bac,0xe4ac,0x9bad,
-0x9bae,0xb6fd,0xd6de,0xe4b2,0x9baf,0xe4ad,0x9bb0,0x9bb1,
-0x9bb2,0xe4a1,0x9bb3,0xbbee,0xcddd,0xc7a2,0xc5c9,0x9bb4,
-0x9bb5,0xc1f7,0x9bb6,0xe4a4,0x9bb7,0xc7b3,0xbdac,0xbdbd,
-0xe4a5,0x9bb8,0xd7c7,0xb2e2,0x9bb9,0xe4ab,0xbcc3,0xe4af,
-0x9bba,0xbbeb,0xe4b0,0xc5a8,0xe4b1,0x9bbb,0x9bbc,0x9bbd,
-0x9bbe,0xd5e3,0xbfa3,0x9bbf,0xe4ba,0x9bc0,0xe4b7,0x9bc1,
-0xe4bb,0x9bc2,0x9bc3,0xe4bd,0x9bc4,0x9bc5,0xc6d6,0x9bc6,
-0x9bc7,0xbac6,0xc0cb,0x9bc8,0x9bc9,0x9bca,0xb8a1,0xe4b4,
-0x9bcb,0x9bcc,0x9bcd,0x9bce,0xd4a1,0x9bcf,0x9bd0,0xbaa3,
-0xbdfe,0x9bd1,0x9bd2,0x9bd3,0xe4bc,0x9bd4,0x9bd5,0x9bd6,
-0x9bd7,0x9bd8,0xcdbf,0x9bd9,0x9bda,0xc4f9,0x9bdb,0x9bdc,
-0xcffb,0xc9e6,0x9bdd,0x9bde,0xd3bf,0x9bdf,0xcfd1,0x9be0,
-0x9be1,0xe4b3,0x9be2,0xe4b8,0xe4b9,0xcce9,0x9be3,0x9be4,
-0x9be5,0x9be6,0x9be7,0xccce,0x9be8,0xc0d4,0xe4b5,0xc1b0,
-0xe4b6,0xced0,0x9be9,0xbbc1,0xb5d3,0x9bea,0xc8f3,0xbda7,
-0xd5c7,0xc9ac,0xb8a2,0xe4ca,0x9beb,0x9bec,0xe4cc,0xd1c4,
-0x9bed,0x9bee,0xd2ba,0x9bef,0x9bf0,0xbaad,0x9bf1,0x9bf2,
-0xbad4,0x9bf3,0x9bf4,0x9bf5,0x9bf6,0x9bf7,0x9bf8,0xe4c3,
-0xb5ed,0x9bf9,0x9bfa,0x9bfb,0xd7cd,0xe4c0,0xcffd,0xe4bf,
-0x9bfc,0x9bfd,0x9bfe,0xc1dc,0xccca,0x9c40,0x9c41,0x9c42,
-0x9c43,0xcae7,0x9c44,0x9c45,0x9c46,0x9c47,0xc4d7,0x9c48,
-0xccd4,0xe4c8,0x9c49,0x9c4a,0x9c4b,0xe4c7,0xe4c1,0x9c4c,
-0xe4c4,0xb5ad,0x9c4d,0x9c4e,0xd3d9,0x9c4f,0xe4c6,0x9c50,
-0x9c51,0x9c52,0x9c53,0xd2f9,0xb4e3,0x9c54,0xbbb4,0x9c55,
-0x9c56,0xc9ee,0x9c57,0xb4be,0x9c58,0x9c59,0x9c5a,0xbbec,
-0x9c5b,0xd1cd,0x9c5c,0xcced,0xedb5,0x9c5d,0x9c5e,0x9c5f,
-0x9c60,0x9c61,0x9c62,0x9c63,0x9c64,0xc7e5,0x9c65,0x9c66,
-0x9c67,0x9c68,0xd4a8,0x9c69,0xe4cb,0xd7d5,0xe4c2,0x9c6a,
-0xbda5,0xe4c5,0x9c6b,0x9c6c,0xd3e6,0x9c6d,0xe4c9,0xc9f8,
-0x9c6e,0x9c6f,0xe4be,0x9c70,0x9c71,0xd3e5,0x9c72,0x9c73,
-0xc7fe,0xb6c9,0x9c74,0xd4fc,0xb2b3,0xe4d7,0x9c75,0x9c76,
-0x9c77,0xcec2,0x9c78,0xe4cd,0x9c79,0xcebc,0x9c7a,0xb8db,
-0x9c7b,0x9c7c,0xe4d6,0x9c7d,0xbfca,0x9c7e,0x9c80,0x9c81,
-0xd3ce,0x9c82,0xc3ec,0x9c83,0x9c84,0x9c85,0x9c86,0x9c87,
-0x9c88,0x9c89,0x9c8a,0xc5c8,0xe4d8,0x9c8b,0x9c8c,0x9c8d,
-0x9c8e,0x9c8f,0x9c90,0x9c91,0x9c92,0xcdc4,0xe4cf,0x9c93,
-0x9c94,0x9c95,0x9c96,0xe4d4,0xe4d5,0x9c97,0xbafe,0x9c98,
-0xcfe6,0x9c99,0x9c9a,0xd5bf,0x9c9b,0x9c9c,0x9c9d,0xe4d2,
-0x9c9e,0x9c9f,0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca4,0x9ca5,
-0x9ca6,0x9ca7,0x9ca8,0xe4d0,0x9ca9,0x9caa,0xe4ce,0x9cab,
-0x9cac,0x9cad,0x9cae,0x9caf,0x9cb0,0x9cb1,0x9cb2,0x9cb3,
-0x9cb4,0x9cb5,0x9cb6,0x9cb7,0x9cb8,0x9cb9,0xcde5,0xcaaa,
-0x9cba,0x9cbb,0x9cbc,0xc0a3,0x9cbd,0xbda6,0xe4d3,0x9cbe,
-0x9cbf,0xb8c8,0x9cc0,0x9cc1,0x9cc2,0x9cc3,0x9cc4,0xe4e7,
-0xd4b4,0x9cc5,0x9cc6,0x9cc7,0x9cc8,0x9cc9,0x9cca,0x9ccb,
-0xe4db,0x9ccc,0x9ccd,0x9cce,0xc1ef,0x9ccf,0x9cd0,0xe4e9,
-0x9cd1,0x9cd2,0xd2e7,0x9cd3,0x9cd4,0xe4df,0x9cd5,0xe4e0,
-0x9cd6,0x9cd7,0xcfaa,0x9cd8,0x9cd9,0x9cda,0x9cdb,0xcbdd,
-0x9cdc,0xe4da,0xe4d1,0x9cdd,0xe4e5,0x9cde,0xc8dc,0xe4e3,
-0x9cdf,0x9ce0,0xc4e7,0xe4e2,0x9ce1,0xe4e1,0x9ce2,0x9ce3,
-0x9ce4,0xb3fc,0xe4e8,0x9ce5,0x9ce6,0x9ce7,0x9ce8,0xb5e1,
-0x9ce9,0x9cea,0x9ceb,0xd7cc,0x9cec,0x9ced,0x9cee,0xe4e6,
-0x9cef,0xbbac,0x9cf0,0xd7d2,0xcccf,0xebf8,0x9cf1,0xe4e4,
-0x9cf2,0x9cf3,0xb9f6,0x9cf4,0x9cf5,0x9cf6,0xd6cd,0xe4d9,
-0xe4dc,0xc2fa,0xe4de,0x9cf7,0xc2cb,0xc0c4,0xc2d0,0x9cf8,
-0xb1f5,0xccb2,0x9cf9,0x9cfa,0x9cfb,0x9cfc,0x9cfd,0x9cfe,
-0x9d40,0x9d41,0x9d42,0x9d43,0xb5ce,0x9d44,0x9d45,0x9d46,
-0x9d47,0xe4ef,0x9d48,0x9d49,0x9d4a,0x9d4b,0x9d4c,0x9d4d,
-0x9d4e,0x9d4f,0xc6af,0x9d50,0x9d51,0x9d52,0xc6e1,0x9d53,
-0x9d54,0xe4f5,0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0xc2a9,
-0x9d5a,0x9d5b,0x9d5c,0xc0ec,0xd1dd,0xe4ee,0x9d5d,0x9d5e,
-0x9d5f,0x9d60,0x9d61,0x9d62,0x9d63,0x9d64,0x9d65,0x9d66,
-0xc4ae,0x9d67,0x9d68,0x9d69,0xe4ed,0x9d6a,0x9d6b,0x9d6c,
-0x9d6d,0xe4f6,0xe4f4,0xc2fe,0x9d6e,0xe4dd,0x9d6f,0xe4f0,
-0x9d70,0xcafe,0x9d71,0xd5c4,0x9d72,0x9d73,0xe4f1,0x9d74,
-0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,0xd1fa,0x9d7b,
-0x9d7c,0x9d7d,0x9d7e,0x9d80,0x9d81,0x9d82,0xe4eb,0xe4ec,
-0x9d83,0x9d84,0x9d85,0xe4f2,0x9d86,0xceab,0x9d87,0x9d88,
-0x9d89,0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,0x9d90,
-0xc5cb,0x9d91,0x9d92,0x9d93,0xc7b1,0x9d94,0xc2ba,0x9d95,
-0x9d96,0x9d97,0xe4ea,0x9d98,0x9d99,0x9d9a,0xc1ca,0x9d9b,
-0x9d9c,0x9d9d,0x9d9e,0x9d9f,0x9da0,0xccb6,0xb3b1,0x9da1,
-0x9da2,0x9da3,0xe4fb,0x9da4,0xe4f3,0x9da5,0x9da6,0x9da7,
-0xe4fa,0x9da8,0xe4fd,0x9da9,0xe4fc,0x9daa,0x9dab,0x9dac,
-0x9dad,0x9dae,0x9daf,0x9db0,0xb3ce,0x9db1,0x9db2,0x9db3,
-0xb3ba,0xe4f7,0x9db4,0x9db5,0xe4f9,0xe4f8,0xc5ec,0x9db6,
-0x9db7,0x9db8,0x9db9,0x9dba,0x9dbb,0x9dbc,0x9dbd,0x9dbe,
-0x9dbf,0x9dc0,0x9dc1,0x9dc2,0xc0bd,0x9dc3,0x9dc4,0x9dc5,
-0x9dc6,0xd4e8,0x9dc7,0x9dc8,0x9dc9,0x9dca,0x9dcb,0xe5a2,
-0x9dcc,0x9dcd,0x9dce,0x9dcf,0x9dd0,0x9dd1,0x9dd2,0x9dd3,
-0x9dd4,0x9dd5,0x9dd6,0xb0c4,0x9dd7,0x9dd8,0xe5a4,0x9dd9,
-0x9dda,0xe5a3,0x9ddb,0x9ddc,0x9ddd,0x9dde,0x9ddf,0x9de0,
-0xbca4,0x9de1,0xe5a5,0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,
-0x9de7,0xe5a1,0x9de8,0x9de9,0x9dea,0x9deb,0x9dec,0x9ded,
-0x9dee,0xe4fe,0xb1f4,0x9def,0x9df0,0x9df1,0x9df2,0x9df3,
-0x9df4,0x9df5,0x9df6,0x9df7,0x9df8,0x9df9,0xe5a8,0x9dfa,
-0xe5a9,0xe5a6,0x9dfb,0x9dfc,0x9dfd,0x9dfe,0x9e40,0x9e41,
-0x9e42,0x9e43,0x9e44,0x9e45,0x9e46,0x9e47,0xe5a7,0xe5aa,
-0x9e48,0x9e49,0x9e4a,0x9e4b,0x9e4c,0x9e4d,0x9e4e,0x9e4f,
-0x9e50,0x9e51,0x9e52,0x9e53,0x9e54,0x9e55,0x9e56,0x9e57,
-0x9e58,0x9e59,0x9e5a,0x9e5b,0x9e5c,0x9e5d,0x9e5e,0x9e5f,
-0x9e60,0x9e61,0x9e62,0x9e63,0x9e64,0x9e65,0x9e66,0x9e67,
-0x9e68,0xc6d9,0x9e69,0x9e6a,0x9e6b,0x9e6c,0x9e6d,0x9e6e,
-0x9e6f,0x9e70,0xe5ab,0xe5ad,0x9e71,0x9e72,0x9e73,0x9e74,
-0x9e75,0x9e76,0x9e77,0xe5ac,0x9e78,0x9e79,0x9e7a,0x9e7b,
-0x9e7c,0x9e7d,0x9e7e,0x9e80,0x9e81,0x9e82,0x9e83,0x9e84,
-0x9e85,0x9e86,0x9e87,0x9e88,0x9e89,0xe5af,0x9e8a,0x9e8b,
-0x9e8c,0xe5ae,0x9e8d,0x9e8e,0x9e8f,0x9e90,0x9e91,0x9e92,
-0x9e93,0x9e94,0x9e95,0x9e96,0x9e97,0x9e98,0x9e99,0x9e9a,
-0x9e9b,0x9e9c,0x9e9d,0x9e9e,0xb9e0,0x9e9f,0x9ea0,0xe5b0,
-0x9ea1,0x9ea2,0x9ea3,0x9ea4,0x9ea5,0x9ea6,0x9ea7,0x9ea8,
-0x9ea9,0x9eaa,0x9eab,0x9eac,0x9ead,0x9eae,0xe5b1,0x9eaf,
-0x9eb0,0x9eb1,0x9eb2,0x9eb3,0x9eb4,0x9eb5,0x9eb6,0x9eb7,
-0x9eb8,0x9eb9,0x9eba,0xbbf0,0xece1,0xc3f0,0x9ebb,0xb5c6,
-0xbbd2,0x9ebc,0x9ebd,0x9ebe,0x9ebf,0xc1e9,0xd4ee,0x9ec0,
-0xbec4,0x9ec1,0x9ec2,0x9ec3,0xd7c6,0x9ec4,0xd4d6,0xb2d3,
-0xecbe,0x9ec5,0x9ec6,0x9ec7,0x9ec8,0xeac1,0x9ec9,0x9eca,
-0x9ecb,0xc2af,0xb4b6,0x9ecc,0x9ecd,0x9ece,0xd1d7,0x9ecf,
-0x9ed0,0x9ed1,0xb3b4,0x9ed2,0xc8b2,0xbfbb,0xecc0,0x9ed3,
-0x9ed4,0xd6cb,0x9ed5,0x9ed6,0xecbf,0xecc1,0x9ed7,0x9ed8,
-0x9ed9,0x9eda,0x9edb,0x9edc,0x9edd,0x9ede,0x9edf,0x9ee0,
-0x9ee1,0x9ee2,0x9ee3,0xecc5,0xbee6,0xccbf,0xc5da,0xbebc,
-0x9ee4,0xecc6,0x9ee5,0xb1fe,0x9ee6,0x9ee7,0x9ee8,0xecc4,
-0xd5a8,0xb5e3,0x9ee9,0xecc2,0xc1b6,0xb3e3,0x9eea,0x9eeb,
-0xecc3,0xcbb8,0xc0c3,0xccfe,0x9eec,0x9eed,0x9eee,0x9eef,
-0xc1d2,0x9ef0,0xecc8,0x9ef1,0x9ef2,0x9ef3,0x9ef4,0x9ef5,
-0x9ef6,0x9ef7,0x9ef8,0x9ef9,0x9efa,0x9efb,0x9efc,0x9efd,
-0xbae6,0xc0d3,0x9efe,0xd6f2,0x9f40,0x9f41,0x9f42,0xd1cc,
-0x9f43,0x9f44,0x9f45,0x9f46,0xbfbe,0x9f47,0xb7b3,0xc9d5,
-0xecc7,0xbbe2,0x9f48,0xcccc,0xbdfd,0xc8c8,0x9f49,0xcfa9,
-0x9f4a,0x9f4b,0x9f4c,0x9f4d,0x9f4e,0x9f4f,0x9f50,0xcde9,
-0x9f51,0xc5eb,0x9f52,0x9f53,0x9f54,0xb7e9,0x9f55,0x9f56,
-0x9f57,0x9f58,0x9f59,0x9f5a,0x9f5b,0x9f5c,0x9f5d,0x9f5e,
-0x9f5f,0xd1c9,0xbab8,0x9f60,0x9f61,0x9f62,0x9f63,0x9f64,
-0xecc9,0x9f65,0x9f66,0xecca,0x9f67,0xbbc0,0xeccb,0x9f68,
-0xece2,0xb1ba,0xb7d9,0x9f69,0x9f6a,0x9f6b,0x9f6c,0x9f6d,
-0x9f6e,0x9f6f,0x9f70,0x9f71,0x9f72,0x9f73,0xbdb9,0x9f74,
-0x9f75,0x9f76,0x9f77,0x9f78,0x9f79,0x9f7a,0x9f7b,0xeccc,
-0xd1e6,0xeccd,0x9f7c,0x9f7d,0x9f7e,0x9f80,0xc8bb,0x9f81,
-0x9f82,0x9f83,0x9f84,0x9f85,0x9f86,0x9f87,0x9f88,0x9f89,
-0x9f8a,0x9f8b,0x9f8c,0x9f8d,0x9f8e,0xecd1,0x9f8f,0x9f90,
-0x9f91,0x9f92,0xecd3,0x9f93,0xbbcd,0x9f94,0xbce5,0x9f95,
-0x9f96,0x9f97,0x9f98,0x9f99,0x9f9a,0x9f9b,0x9f9c,0x9f9d,
-0x9f9e,0x9f9f,0x9fa0,0x9fa1,0xeccf,0x9fa2,0xc9b7,0x9fa3,
-0x9fa4,0x9fa5,0x9fa6,0x9fa7,0xc3ba,0x9fa8,0xece3,0xd5d5,
-0xecd0,0x9fa9,0x9faa,0x9fab,0x9fac,0x9fad,0xd6f3,0x9fae,
-0x9faf,0x9fb0,0xecd2,0xecce,0x9fb1,0x9fb2,0x9fb3,0x9fb4,
-0xecd4,0x9fb5,0xecd5,0x9fb6,0x9fb7,0xc9bf,0x9fb8,0x9fb9,
-0x9fba,0x9fbb,0x9fbc,0x9fbd,0xcfa8,0x9fbe,0x9fbf,0x9fc0,
-0x9fc1,0x9fc2,0xd0dc,0x9fc3,0x9fc4,0x9fc5,0x9fc6,0xd1ac,
-0x9fc7,0x9fc8,0x9fc9,0x9fca,0xc8db,0x9fcb,0x9fcc,0x9fcd,
-0xecd6,0xcef5,0x9fce,0x9fcf,0x9fd0,0x9fd1,0x9fd2,0xcaec,
-0xecda,0x9fd3,0x9fd4,0x9fd5,0x9fd6,0x9fd7,0x9fd8,0x9fd9,
-0xecd9,0x9fda,0x9fdb,0x9fdc,0xb0be,0x9fdd,0x9fde,0x9fdf,
-0x9fe0,0x9fe1,0x9fe2,0xecd7,0x9fe3,0xecd8,0x9fe4,0x9fe5,
-0x9fe6,0xece4,0x9fe7,0x9fe8,0x9fe9,0x9fea,0x9feb,0x9fec,
-0x9fed,0x9fee,0x9fef,0xc8bc,0x9ff0,0x9ff1,0x9ff2,0x9ff3,
-0x9ff4,0x9ff5,0x9ff6,0x9ff7,0x9ff8,0x9ff9,0xc1c7,0x9ffa,
-0x9ffb,0x9ffc,0x9ffd,0x9ffe,0xecdc,0xd1e0,0xa040,0xa041,
-0xa042,0xa043,0xa044,0xa045,0xa046,0xa047,0xa048,0xa049,
-0xecdb,0xa04a,0xa04b,0xa04c,0xa04d,0xd4ef,0xa04e,0xecdd,
-0xa04f,0xa050,0xa051,0xa052,0xa053,0xa054,0xdbc6,0xa055,
-0xa056,0xa057,0xa058,0xa059,0xa05a,0xa05b,0xa05c,0xa05d,
-0xa05e,0xecde,0xa05f,0xa060,0xa061,0xa062,0xa063,0xa064,
-0xa065,0xa066,0xa067,0xa068,0xa069,0xa06a,0xb1ac,0xa06b,
-0xa06c,0xa06d,0xa06e,0xa06f,0xa070,0xa071,0xa072,0xa073,
-0xa074,0xa075,0xa076,0xa077,0xa078,0xa079,0xa07a,0xa07b,
-0xa07c,0xa07d,0xa07e,0xa080,0xa081,0xecdf,0xa082,0xa083,
-0xa084,0xa085,0xa086,0xa087,0xa088,0xa089,0xa08a,0xa08b,
-0xece0,0xa08c,0xd7a6,0xa08d,0xc5c0,0xa08e,0xa08f,0xa090,
-0xebbc,0xb0ae,0xa091,0xa092,0xa093,0xbef4,0xb8b8,0xd2af,
-0xb0d6,0xb5f9,0xa094,0xd8b3,0xa095,0xcbac,0xa096,0xe3dd,
-0xa097,0xa098,0xa099,0xa09a,0xa09b,0xa09c,0xa09d,0xc6ac,
-0xb0e6,0xa09e,0xa09f,0xa0a0,0xc5c6,0xebb9,0xa0a1,0xa0a2,
-0xa0a3,0xa0a4,0xebba,0xa0a5,0xa0a6,0xa0a7,0xebbb,0xa0a8,
-0xa0a9,0xd1c0,0xa0aa,0xc5a3,0xa0ab,0xeaf2,0xa0ac,0xc4b2,
-0xa0ad,0xc4b5,0xc0ce,0xa0ae,0xa0af,0xa0b0,0xeaf3,0xc4c1,
-0xa0b1,0xceef,0xa0b2,0xa0b3,0xa0b4,0xa0b5,0xeaf0,0xeaf4,
-0xa0b6,0xa0b7,0xc9fc,0xa0b8,0xa0b9,0xc7a3,0xa0ba,0xa0bb,
-0xa0bc,0xccd8,0xcefe,0xa0bd,0xa0be,0xa0bf,0xeaf5,0xeaf6,
-0xcfac,0xc0e7,0xa0c0,0xa0c1,0xeaf7,0xa0c2,0xa0c3,0xa0c4,
-0xa0c5,0xa0c6,0xb6bf,0xeaf8,0xa0c7,0xeaf9,0xa0c8,0xeafa,
-0xa0c9,0xa0ca,0xeafb,0xa0cb,0xa0cc,0xa0cd,0xa0ce,0xa0cf,
-0xa0d0,0xa0d1,0xa0d2,0xa0d3,0xa0d4,0xa0d5,0xa0d6,0xeaf1,
-0xa0d7,0xa0d8,0xa0d9,0xa0da,0xa0db,0xa0dc,0xa0dd,0xa0de,
-0xa0df,0xa0e0,0xa0e1,0xa0e2,0xc8ae,0xe1eb,0xa0e3,0xb7b8,
-0xe1ec,0xa0e4,0xa0e5,0xa0e6,0xe1ed,0xa0e7,0xd7b4,0xe1ee,
-0xe1ef,0xd3cc,0xa0e8,0xa0e9,0xa0ea,0xa0eb,0xa0ec,0xa0ed,
-0xa0ee,0xe1f1,0xbff1,0xe1f0,0xb5d2,0xa0ef,0xa0f0,0xa0f1,
-0xb1b7,0xa0f2,0xa0f3,0xa0f4,0xa0f5,0xe1f3,0xe1f2,0xa0f6,
-0xbafc,0xa0f7,0xe1f4,0xa0f8,0xa0f9,0xa0fa,0xa0fb,0xb9b7,
-0xa0fc,0xbed1,0xa0fd,0xa0fe,0xaa40,0xaa41,0xc4fc,0xaa42,
-0xbadd,0xbdc6,0xaa43,0xaa44,0xaa45,0xaa46,0xaa47,0xaa48,
-0xe1f5,0xe1f7,0xaa49,0xaa4a,0xb6c0,0xcfc1,0xcaa8,0xe1f6,
-0xd5f8,0xd3fc,0xe1f8,0xe1fc,0xe1f9,0xaa4b,0xaa4c,0xe1fa,
-0xc0ea,0xaa4d,0xe1fe,0xe2a1,0xc0c7,0xaa4e,0xaa4f,0xaa50,
-0xaa51,0xe1fb,0xaa52,0xe1fd,0xaa53,0xaa54,0xaa55,0xaa56,
-0xaa57,0xaa58,0xe2a5,0xaa59,0xaa5a,0xaa5b,0xc1d4,0xaa5c,
-0xaa5d,0xaa5e,0xaa5f,0xe2a3,0xaa60,0xe2a8,0xb2fe,0xe2a2,
-0xaa61,0xaa62,0xaa63,0xc3cd,0xb2c2,0xe2a7,0xe2a6,0xaa64,
-0xaa65,0xe2a4,0xe2a9,0xaa66,0xaa67,0xe2ab,0xaa68,0xaa69,
-0xaa6a,0xd0c9,0xd6ed,0xc3a8,0xe2ac,0xaa6b,0xcfd7,0xaa6c,
-0xaa6d,0xe2ae,0xaa6e,0xaa6f,0xbaef,0xaa70,0xaa71,0xe9e0,
-0xe2ad,0xe2aa,0xaa72,0xaa73,0xaa74,0xaa75,0xbbab,0xd4b3,
-0xaa76,0xaa77,0xaa78,0xaa79,0xaa7a,0xaa7b,0xaa7c,0xaa7d,
-0xaa7e,0xaa80,0xaa81,0xaa82,0xaa83,0xe2b0,0xaa84,0xaa85,
-0xe2af,0xaa86,0xe9e1,0xaa87,0xaa88,0xaa89,0xaa8a,0xe2b1,
-0xaa8b,0xaa8c,0xaa8d,0xaa8e,0xaa8f,0xaa90,0xaa91,0xaa92,
-0xe2b2,0xaa93,0xaa94,0xaa95,0xaa96,0xaa97,0xaa98,0xaa99,
-0xaa9a,0xaa9b,0xaa9c,0xaa9d,0xe2b3,0xcca1,0xaa9e,0xe2b4,
-0xaa9f,0xaaa0,0xab40,0xab41,0xab42,0xab43,0xab44,0xab45,
-0xab46,0xab47,0xab48,0xab49,0xab4a,0xab4b,0xe2b5,0xab4c,
-0xab4d,0xab4e,0xab4f,0xab50,0xd0fe,0xab51,0xab52,0xc2ca,
-0xab53,0xd3f1,0xab54,0xcdf5,0xab55,0xab56,0xe7e0,0xab57,
-0xab58,0xe7e1,0xab59,0xab5a,0xab5b,0xab5c,0xbec1,0xab5d,
-0xab5e,0xab5f,0xab60,0xc2ea,0xab61,0xab62,0xab63,0xe7e4,
-0xab64,0xab65,0xe7e3,0xab66,0xab67,0xab68,0xab69,0xab6a,
-0xab6b,0xcde6,0xab6c,0xc3b5,0xab6d,0xab6e,0xe7e2,0xbbb7,
-0xcfd6,0xab6f,0xc1e1,0xe7e9,0xab70,0xab71,0xab72,0xe7e8,
-0xab73,0xab74,0xe7f4,0xb2a3,0xab75,0xab76,0xab77,0xab78,
-0xe7ea,0xab79,0xe7e6,0xab7a,0xab7b,0xab7c,0xab7d,0xab7e,
-0xe7ec,0xe7eb,0xc9ba,0xab80,0xab81,0xd5e4,0xab82,0xe7e5,
-0xb7a9,0xe7e7,0xab83,0xab84,0xab85,0xab86,0xab87,0xab88,
-0xab89,0xe7ee,0xab8a,0xab8b,0xab8c,0xab8d,0xe7f3,0xab8e,
-0xd6e9,0xab8f,0xab90,0xab91,0xab92,0xe7ed,0xab93,0xe7f2,
-0xab94,0xe7f1,0xab95,0xab96,0xab97,0xb0e0,0xab98,0xab99,
-0xab9a,0xab9b,0xe7f5,0xab9c,0xab9d,0xab9e,0xab9f,0xaba0,
-0xac40,0xac41,0xac42,0xac43,0xac44,0xac45,0xac46,0xac47,
-0xac48,0xac49,0xac4a,0xc7f2,0xac4b,0xc0c5,0xc0ed,0xac4c,
-0xac4d,0xc1f0,0xe7f0,0xac4e,0xac4f,0xac50,0xac51,0xe7f6,
-0xcbf6,0xac52,0xac53,0xac54,0xac55,0xac56,0xac57,0xac58,
-0xac59,0xac5a,0xe8a2,0xe8a1,0xac5b,0xac5c,0xac5d,0xac5e,
-0xac5f,0xac60,0xd7c1,0xac61,0xac62,0xe7fa,0xe7f9,0xac63,
-0xe7fb,0xac64,0xe7f7,0xac65,0xe7fe,0xac66,0xe7fd,0xac67,
-0xe7fc,0xac68,0xac69,0xc1d5,0xc7d9,0xc5fd,0xc5c3,0xac6a,
-0xac6b,0xac6c,0xac6d,0xac6e,0xc7ed,0xac6f,0xac70,0xac71,
-0xac72,0xe8a3,0xac73,0xac74,0xac75,0xac76,0xac77,0xac78,
-0xac79,0xac7a,0xac7b,0xac7c,0xac7d,0xac7e,0xac80,0xac81,
-0xac82,0xac83,0xac84,0xac85,0xac86,0xe8a6,0xac87,0xe8a5,
-0xac88,0xe8a7,0xbaf7,0xe7f8,0xe8a4,0xac89,0xc8f0,0xc9aa,
-0xac8a,0xac8b,0xac8c,0xac8d,0xac8e,0xac8f,0xac90,0xac91,
-0xac92,0xac93,0xac94,0xac95,0xac96,0xe8a9,0xac97,0xac98,
-0xb9e5,0xac99,0xac9a,0xac9b,0xac9c,0xac9d,0xd1fe,0xe8a8,
-0xac9e,0xac9f,0xaca0,0xad40,0xad41,0xad42,0xe8aa,0xad43,
-0xe8ad,0xe8ae,0xad44,0xc1a7,0xad45,0xad46,0xad47,0xe8af,
-0xad48,0xad49,0xad4a,0xe8b0,0xad4b,0xad4c,0xe8ac,0xad4d,
-0xe8b4,0xad4e,0xad4f,0xad50,0xad51,0xad52,0xad53,0xad54,
-0xad55,0xad56,0xad57,0xad58,0xe8ab,0xad59,0xe8b1,0xad5a,
-0xad5b,0xad5c,0xad5d,0xad5e,0xad5f,0xad60,0xad61,0xe8b5,
-0xe8b2,0xe8b3,0xad62,0xad63,0xad64,0xad65,0xad66,0xad67,
-0xad68,0xad69,0xad6a,0xad6b,0xad6c,0xad6d,0xad6e,0xad6f,
-0xad70,0xad71,0xe8b7,0xad72,0xad73,0xad74,0xad75,0xad76,
-0xad77,0xad78,0xad79,0xad7a,0xad7b,0xad7c,0xad7d,0xad7e,
-0xad80,0xad81,0xad82,0xad83,0xad84,0xad85,0xad86,0xad87,
-0xad88,0xad89,0xe8b6,0xad8a,0xad8b,0xad8c,0xad8d,0xad8e,
-0xad8f,0xad90,0xad91,0xad92,0xb9cf,0xad93,0xf0ac,0xad94,
-0xf0ad,0xad95,0xc6b0,0xb0ea,0xc8bf,0xad96,0xcddf,0xad97,
-0xad98,0xad99,0xad9a,0xad9b,0xad9c,0xad9d,0xcecd,0xeab1,
-0xad9e,0xad9f,0xada0,0xae40,0xeab2,0xae41,0xc6bf,0xb4c9,
-0xae42,0xae43,0xae44,0xae45,0xae46,0xae47,0xae48,0xeab3,
-0xae49,0xae4a,0xae4b,0xae4c,0xd5e7,0xae4d,0xae4e,0xae4f,
-0xae50,0xae51,0xae52,0xae53,0xae54,0xddf9,0xae55,0xeab4,
-0xae56,0xeab5,0xae57,0xeab6,0xae58,0xae59,0xae5a,0xae5b,
-0xb8ca,0xdfb0,0xc9f5,0xae5c,0xccf0,0xae5d,0xae5e,0xc9fa,
-0xae5f,0xae60,0xae61,0xae62,0xae63,0xc9fb,0xae64,0xae65,
-0xd3c3,0xcba6,0xae66,0xb8a6,0xf0ae,0xb1c2,0xae67,0xe5b8,
-0xccef,0xd3c9,0xbcd7,0xc9ea,0xae68,0xb5e7,0xae69,0xc4d0,
-0xb5e9,0xae6a,0xeeae,0xbbad,0xae6b,0xae6c,0xe7de,0xae6d,
-0xeeaf,0xae6e,0xae6f,0xae70,0xae71,0xb3a9,0xae72,0xae73,
-0xeeb2,0xae74,0xae75,0xeeb1,0xbde7,0xae76,0xeeb0,0xceb7,
-0xae77,0xae78,0xae79,0xae7a,0xc5cf,0xae7b,0xae7c,0xae7d,
-0xae7e,0xc1f4,0xdbce,0xeeb3,0xd0f3,0xae80,0xae81,0xae82,
-0xae83,0xae84,0xae85,0xae86,0xae87,0xc2d4,0xc6e8,0xae88,
-0xae89,0xae8a,0xb7ac,0xae8b,0xae8c,0xae8d,0xae8e,0xae8f,
-0xae90,0xae91,0xeeb4,0xae92,0xb3eb,0xae93,0xae94,0xae95,
-0xbbfb,0xeeb5,0xae96,0xae97,0xae98,0xae99,0xae9a,0xe7dc,
-0xae9b,0xae9c,0xae9d,0xeeb6,0xae9e,0xae9f,0xbdae,0xaea0,
-0xaf40,0xaf41,0xaf42,0xf1e2,0xaf43,0xaf44,0xaf45,0xcae8,
-0xaf46,0xd2c9,0xf0da,0xaf47,0xf0db,0xaf48,0xf0dc,0xc1c6,
-0xaf49,0xb8ed,0xbece,0xaf4a,0xaf4b,0xf0de,0xaf4c,0xc5b1,
-0xf0dd,0xd1f1,0xaf4d,0xf0e0,0xb0cc,0xbdea,0xaf4e,0xaf4f,
-0xaf50,0xaf51,0xaf52,0xd2df,0xf0df,0xaf53,0xb4af,0xb7e8,
-0xf0e6,0xf0e5,0xc6a3,0xf0e1,0xf0e2,0xb4c3,0xaf54,0xaf55,
-0xf0e3,0xd5ee,0xaf56,0xaf57,0xccdb,0xbed2,0xbcb2,0xaf58,
-0xaf59,0xaf5a,0xf0e8,0xf0e7,0xf0e4,0xb2a1,0xaf5b,0xd6a2,
-0xd3b8,0xbeb7,0xc8ac,0xaf5c,0xaf5d,0xf0ea,0xaf5e,0xaf5f,
-0xaf60,0xaf61,0xd1f7,0xaf62,0xd6cc,0xbadb,0xf0e9,0xaf63,
-0xb6bb,0xaf64,0xaf65,0xcdb4,0xaf66,0xaf67,0xc6a6,0xaf68,
-0xaf69,0xaf6a,0xc1a1,0xf0eb,0xf0ee,0xaf6b,0xf0ed,0xf0f0,
-0xf0ec,0xaf6c,0xbbbe,0xf0ef,0xaf6d,0xaf6e,0xaf6f,0xaf70,
-0xccb5,0xf0f2,0xaf71,0xaf72,0xb3d5,0xaf73,0xaf74,0xaf75,
-0xaf76,0xb1d4,0xaf77,0xaf78,0xf0f3,0xaf79,0xaf7a,0xf0f4,
-0xf0f6,0xb4e1,0xaf7b,0xf0f1,0xaf7c,0xf0f7,0xaf7d,0xaf7e,
-0xaf80,0xaf81,0xf0fa,0xaf82,0xf0f8,0xaf83,0xaf84,0xaf85,
-0xf0f5,0xaf86,0xaf87,0xaf88,0xaf89,0xf0fd,0xaf8a,0xf0f9,
-0xf0fc,0xf0fe,0xaf8b,0xf1a1,0xaf8c,0xaf8d,0xaf8e,0xcec1,
-0xf1a4,0xaf8f,0xf1a3,0xaf90,0xc1f6,0xf0fb,0xcadd,0xaf91,
-0xaf92,0xb4f1,0xb1f1,0xccb1,0xaf93,0xf1a6,0xaf94,0xaf95,
-0xf1a7,0xaf96,0xaf97,0xf1ac,0xd5ce,0xf1a9,0xaf98,0xaf99,
-0xc8b3,0xaf9a,0xaf9b,0xaf9c,0xf1a2,0xaf9d,0xf1ab,0xf1a8,
-0xf1a5,0xaf9e,0xaf9f,0xf1aa,0xafa0,0xb040,0xb041,0xb042,
-0xb043,0xb044,0xb045,0xb046,0xb0a9,0xf1ad,0xb047,0xb048,
-0xb049,0xb04a,0xb04b,0xb04c,0xf1af,0xb04d,0xf1b1,0xb04e,
-0xb04f,0xb050,0xb051,0xb052,0xf1b0,0xb053,0xf1ae,0xb054,
-0xb055,0xb056,0xb057,0xd1a2,0xb058,0xb059,0xb05a,0xb05b,
-0xb05c,0xb05d,0xb05e,0xf1b2,0xb05f,0xb060,0xb061,0xf1b3,
-0xb062,0xb063,0xb064,0xb065,0xb066,0xb067,0xb068,0xb069,
-0xb9ef,0xb06a,0xb06b,0xb5c7,0xb06c,0xb0d7,0xb0d9,0xb06d,
-0xb06e,0xb06f,0xd4ed,0xb070,0xb5c4,0xb071,0xbdd4,0xbbca,
-0xf0a7,0xb072,0xb073,0xb8de,0xb074,0xb075,0xf0a8,0xb076,
-0xb077,0xb0a8,0xb078,0xf0a9,0xb079,0xb07a,0xcdee,0xb07b,
-0xb07c,0xf0aa,0xb07d,0xb07e,0xb080,0xb081,0xb082,0xb083,
-0xb084,0xb085,0xb086,0xb087,0xf0ab,0xb088,0xb089,0xb08a,
-0xb08b,0xb08c,0xb08d,0xb08e,0xb08f,0xb090,0xc6a4,0xb091,
-0xb092,0xd6e5,0xf1e4,0xb093,0xf1e5,0xb094,0xb095,0xb096,
-0xb097,0xb098,0xb099,0xb09a,0xb09b,0xb09c,0xb09d,0xc3f3,
-0xb09e,0xb09f,0xd3db,0xb0a0,0xb140,0xd6d1,0xc5e8,0xb141,
-0xd3af,0xb142,0xd2e6,0xb143,0xb144,0xeec1,0xb0bb,0xd5b5,
-0xd1ce,0xbce0,0xbad0,0xb145,0xbff8,0xb146,0xb8c7,0xb5c1,
-0xc5cc,0xb147,0xb148,0xcaa2,0xb149,0xb14a,0xb14b,0xc3cb,
-0xb14c,0xb14d,0xb14e,0xb14f,0xb150,0xeec2,0xb151,0xb152,
-0xb153,0xb154,0xb155,0xb156,0xb157,0xb158,0xc4bf,0xb6a2,
-0xb159,0xedec,0xc3a4,0xb15a,0xd6b1,0xb15b,0xb15c,0xb15d,
-0xcfe0,0xedef,0xb15e,0xb15f,0xc5ce,0xb160,0xb6dc,0xb161,
-0xb162,0xcaa1,0xb163,0xb164,0xeded,0xb165,0xb166,0xedf0,
-0xedf1,0xc3bc,0xb167,0xbfb4,0xb168,0xedee,0xb169,0xb16a,
-0xb16b,0xb16c,0xb16d,0xb16e,0xb16f,0xb170,0xb171,0xb172,
-0xb173,0xedf4,0xedf2,0xb174,0xb175,0xb176,0xb177,0xd5e6,
-0xc3df,0xb178,0xedf3,0xb179,0xb17a,0xb17b,0xedf6,0xb17c,
-0xd5a3,0xd1a3,0xb17d,0xb17e,0xb180,0xedf5,0xb181,0xc3d0,
-0xb182,0xb183,0xb184,0xb185,0xb186,0xedf7,0xbff4,0xbeec,
-0xedf8,0xb187,0xccf7,0xb188,0xd1db,0xb189,0xb18a,0xb18b,
-0xd7c5,0xd5f6,0xb18c,0xedfc,0xb18d,0xb18e,0xb18f,0xedfb,
-0xb190,0xb191,0xb192,0xb193,0xb194,0xb195,0xb196,0xb197,
-0xedf9,0xedfa,0xb198,0xb199,0xb19a,0xb19b,0xb19c,0xb19d,
-0xb19e,0xb19f,0xedfd,0xbea6,0xb1a0,0xb240,0xb241,0xb242,
-0xb243,0xcbaf,0xeea1,0xb6bd,0xb244,0xeea2,0xc4c0,0xb245,
-0xedfe,0xb246,0xb247,0xbdde,0xb2c7,0xb248,0xb249,0xb24a,
-0xb24b,0xb24c,0xb24d,0xb24e,0xb24f,0xb250,0xb251,0xb252,
-0xb253,0xb6c3,0xb254,0xb255,0xb256,0xeea5,0xd8ba,0xeea3,
-0xeea6,0xb257,0xb258,0xb259,0xc3e9,0xb3f2,0xb25a,0xb25b,
-0xb25c,0xb25d,0xb25e,0xb25f,0xeea7,0xeea4,0xcfb9,0xb260,
-0xb261,0xeea8,0xc2f7,0xb262,0xb263,0xb264,0xb265,0xb266,
-0xb267,0xb268,0xb269,0xb26a,0xb26b,0xb26c,0xb26d,0xeea9,
-0xeeaa,0xb26e,0xdeab,0xb26f,0xb270,0xc6b3,0xb271,0xc7c6,
-0xb272,0xd6f5,0xb5c9,0xb273,0xcbb2,0xb274,0xb275,0xb276,
-0xeeab,0xb277,0xb278,0xcdab,0xb279,0xeeac,0xb27a,0xb27b,
-0xb27c,0xb27d,0xb27e,0xd5b0,0xb280,0xeead,0xb281,0xf6c4,
-0xb282,0xb283,0xb284,0xb285,0xb286,0xb287,0xb288,0xb289,
-0xb28a,0xb28b,0xb28c,0xb28d,0xb28e,0xdbc7,0xb28f,0xb290,
-0xb291,0xb292,0xb293,0xb294,0xb295,0xb296,0xb297,0xb4a3,
-0xb298,0xb299,0xb29a,0xc3ac,0xf1e6,0xb29b,0xb29c,0xb29d,
-0xb29e,0xb29f,0xcab8,0xd2d3,0xb2a0,0xd6aa,0xb340,0xeff2,
-0xb341,0xbed8,0xb342,0xbdc3,0xeff3,0xb6cc,0xb0ab,0xb343,
-0xb344,0xb345,0xb346,0xcaaf,0xb347,0xb348,0xedb6,0xb349,
-0xedb7,0xb34a,0xb34b,0xb34c,0xb34d,0xcef9,0xb7af,0xbff3,
-0xedb8,0xc2eb,0xc9b0,0xb34e,0xb34f,0xb350,0xb351,0xb352,
-0xb353,0xedb9,0xb354,0xb355,0xc6f6,0xbfb3,0xb356,0xb357,
-0xb358,0xedbc,0xc5f8,0xb359,0xd1d0,0xb35a,0xd7a9,0xedba,
-0xedbb,0xb35b,0xd1e2,0xb35c,0xedbf,0xedc0,0xb35d,0xedc4,
-0xb35e,0xb35f,0xb360,0xedc8,0xb361,0xedc6,0xedce,0xd5e8,
-0xb362,0xedc9,0xb363,0xb364,0xedc7,0xedbe,0xb365,0xb366,
-0xc5e9,0xb367,0xb368,0xb369,0xc6c6,0xb36a,0xb36b,0xc9e9,
-0xd4d2,0xedc1,0xedc2,0xedc3,0xedc5,0xb36c,0xc0f9,0xb36d,
-0xb4a1,0xb36e,0xb36f,0xb370,0xb371,0xb9e8,0xb372,0xedd0,
-0xb373,0xb374,0xb375,0xb376,0xedd1,0xb377,0xedca,0xb378,
-0xedcf,0xb379,0xcef8,0xb37a,0xb37b,0xcbb6,0xedcc,0xedcd,
-0xb37c,0xb37d,0xb37e,0xb380,0xb381,0xcff5,0xb382,0xb383,
-0xb384,0xb385,0xb386,0xb387,0xb388,0xb389,0xb38a,0xb38b,
-0xb38c,0xb38d,0xedd2,0xc1f2,0xd3b2,0xedcb,0xc8b7,0xb38e,
-0xb38f,0xb390,0xb391,0xb392,0xb393,0xb394,0xb395,0xbcef,
-0xb396,0xb397,0xb398,0xb399,0xc5f0,0xb39a,0xb39b,0xb39c,
-0xb39d,0xb39e,0xb39f,0xb3a0,0xb440,0xb441,0xb442,0xedd6,
-0xb443,0xb5ef,0xb444,0xb445,0xc2b5,0xb0ad,0xcbe9,0xb446,
-0xb447,0xb1ae,0xb448,0xedd4,0xb449,0xb44a,0xb44b,0xcdeb,
-0xb5e2,0xb44c,0xedd5,0xedd3,0xedd7,0xb44d,0xb44e,0xb5fa,
-0xb44f,0xedd8,0xb450,0xedd9,0xb451,0xeddc,0xb452,0xb1cc,
-0xb453,0xb454,0xb455,0xb456,0xb457,0xb458,0xb459,0xb45a,
-0xc5f6,0xbcee,0xedda,0xccbc,0xb2ea,0xb45b,0xb45c,0xb45d,
-0xb45e,0xeddb,0xb45f,0xb460,0xb461,0xb462,0xc4eb,0xb463,
-0xb464,0xb4c5,0xb465,0xb466,0xb467,0xb0f5,0xb468,0xb469,
-0xb46a,0xeddf,0xc0da,0xb4e8,0xb46b,0xb46c,0xb46d,0xb46e,
-0xc5cd,0xb46f,0xb470,0xb471,0xeddd,0xbfc4,0xb472,0xb473,
-0xb474,0xedde,0xb475,0xb476,0xb477,0xb478,0xb479,0xb47a,
-0xb47b,0xb47c,0xb47d,0xb47e,0xb480,0xb481,0xb482,0xb483,
-0xc4a5,0xb484,0xb485,0xb486,0xede0,0xb487,0xb488,0xb489,
-0xb48a,0xb48b,0xede1,0xb48c,0xede3,0xb48d,0xb48e,0xc1d7,
-0xb48f,0xb490,0xbbc7,0xb491,0xb492,0xb493,0xb494,0xb495,
-0xb496,0xbdb8,0xb497,0xb498,0xb499,0xede2,0xb49a,0xb49b,
-0xb49c,0xb49d,0xb49e,0xb49f,0xb4a0,0xb540,0xb541,0xb542,
-0xb543,0xb544,0xb545,0xede4,0xb546,0xb547,0xb548,0xb549,
-0xb54a,0xb54b,0xb54c,0xb54d,0xb54e,0xb54f,0xede6,0xb550,
-0xb551,0xb552,0xb553,0xb554,0xede5,0xb555,0xb556,0xb557,
-0xb558,0xb559,0xb55a,0xb55b,0xb55c,0xb55d,0xb55e,0xb55f,
-0xb560,0xb561,0xb562,0xb563,0xede7,0xb564,0xb565,0xb566,
-0xb567,0xb568,0xcabe,0xecea,0xc0f1,0xb569,0xc9e7,0xb56a,
-0xeceb,0xc6ee,0xb56b,0xb56c,0xb56d,0xb56e,0xecec,0xb56f,
-0xc6ed,0xeced,0xb570,0xb571,0xb572,0xb573,0xb574,0xb575,
-0xb576,0xb577,0xb578,0xecf0,0xb579,0xb57a,0xd7e6,0xecf3,
-0xb57b,0xb57c,0xecf1,0xecee,0xecef,0xd7a3,0xc9f1,0xcbee,
-0xecf4,0xb57d,0xecf2,0xb57e,0xb580,0xcfe9,0xb581,0xecf6,
-0xc6b1,0xb582,0xb583,0xb584,0xb585,0xbcc0,0xb586,0xecf5,
-0xb587,0xb588,0xb589,0xb58a,0xb58b,0xb58c,0xb58d,0xb5bb,
-0xbbf6,0xb58e,0xecf7,0xb58f,0xb590,0xb591,0xb592,0xb593,
-0xd9f7,0xbdfb,0xb594,0xb595,0xc2bb,0xecf8,0xb596,0xb597,
-0xb598,0xb599,0xecf9,0xb59a,0xb59b,0xb59c,0xb59d,0xb8a3,
-0xb59e,0xb59f,0xb5a0,0xb640,0xb641,0xb642,0xb643,0xb644,
-0xb645,0xb646,0xecfa,0xb647,0xb648,0xb649,0xb64a,0xb64b,
-0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,0xb652,0xecfb,
-0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,0xb65a,
-0xb65b,0xb65c,0xb65d,0xecfc,0xb65e,0xb65f,0xb660,0xb661,
-0xb662,0xd3ed,0xd8ae,0xc0eb,0xb663,0xc7dd,0xbacc,0xb664,
-0xd0e3,0xcbbd,0xb665,0xcdba,0xb666,0xb667,0xb8d1,0xb668,
-0xb669,0xb1fc,0xb66a,0xc7ef,0xb66b,0xd6d6,0xb66c,0xb66d,
-0xb66e,0xbfc6,0xc3eb,0xb66f,0xb670,0xeff5,0xb671,0xb672,
-0xc3d8,0xb673,0xb674,0xb675,0xb676,0xb677,0xb678,0xd7e2,
-0xb679,0xb67a,0xb67b,0xeff7,0xb3d3,0xb67c,0xc7d8,0xd1ed,
-0xb67d,0xd6c8,0xb67e,0xeff8,0xb680,0xeff6,0xb681,0xbbfd,
-0xb3c6,0xb682,0xb683,0xb684,0xb685,0xb686,0xb687,0xb688,
-0xbdd5,0xb689,0xb68a,0xd2c6,0xb68b,0xbbe0,0xb68c,0xb68d,
-0xcfa1,0xb68e,0xeffc,0xeffb,0xb68f,0xb690,0xeff9,0xb691,
-0xb692,0xb693,0xb694,0xb3cc,0xb695,0xc9d4,0xcbb0,0xb696,
-0xb697,0xb698,0xb699,0xb69a,0xeffe,0xb69b,0xb69c,0xb0de,
-0xb69d,0xb69e,0xd6c9,0xb69f,0xb6a0,0xb740,0xeffd,0xb741,
-0xb3ed,0xb742,0xb743,0xf6d5,0xb744,0xb745,0xb746,0xb747,
-0xb748,0xb749,0xb74a,0xb74b,0xb74c,0xb74d,0xb74e,0xb74f,
-0xb750,0xb751,0xb752,0xcec8,0xb753,0xb754,0xb755,0xf0a2,
-0xb756,0xf0a1,0xb757,0xb5be,0xbcda,0xbbfc,0xb758,0xb8e5,
-0xb759,0xb75a,0xb75b,0xb75c,0xb75d,0xb75e,0xc4c2,0xb75f,
-0xb760,0xb761,0xb762,0xb763,0xb764,0xb765,0xb766,0xb767,
-0xb768,0xf0a3,0xb769,0xb76a,0xb76b,0xb76c,0xb76d,0xcbeb,
-0xb76e,0xb76f,0xb770,0xb771,0xb772,0xb773,0xb774,0xb775,
-0xb776,0xb777,0xb778,0xb779,0xb77a,0xb77b,0xb77c,0xb77d,
-0xb77e,0xb780,0xb781,0xb782,0xb783,0xb784,0xb785,0xb786,
-0xf0a6,0xb787,0xb788,0xb789,0xd1a8,0xb78a,0xbebf,0xc7ee,
-0xf1b6,0xf1b7,0xbfd5,0xb78b,0xb78c,0xb78d,0xb78e,0xb4a9,
-0xf1b8,0xcdbb,0xb78f,0xc7d4,0xd5ad,0xb790,0xf1b9,0xb791,
-0xf1ba,0xb792,0xb793,0xb794,0xb795,0xc7cf,0xb796,0xb797,
-0xb798,0xd2a4,0xd6cf,0xb799,0xb79a,0xf1bb,0xbdd1,0xb4b0,
-0xbebd,0xb79b,0xb79c,0xb79d,0xb4dc,0xced1,0xb79e,0xbfdf,
-0xf1bd,0xb79f,0xb7a0,0xb840,0xb841,0xbffa,0xf1bc,0xb842,
-0xf1bf,0xb843,0xb844,0xb845,0xf1be,0xf1c0,0xb846,0xb847,
-0xb848,0xb849,0xb84a,0xf1c1,0xb84b,0xb84c,0xb84d,0xb84e,
-0xb84f,0xb850,0xb851,0xb852,0xb853,0xb854,0xb855,0xc1fe,
-0xb856,0xb857,0xb858,0xb859,0xb85a,0xb85b,0xb85c,0xb85d,
-0xb85e,0xb85f,0xb860,0xc1a2,0xb861,0xb862,0xb863,0xb864,
-0xb865,0xb866,0xb867,0xb868,0xb869,0xb86a,0xcafa,0xb86b,
-0xb86c,0xd5be,0xb86d,0xb86e,0xb86f,0xb870,0xbeba,0xbeb9,
-0xd5c2,0xb871,0xb872,0xbfa2,0xb873,0xcdaf,0xf1b5,0xb874,
-0xb875,0xb876,0xb877,0xb878,0xb879,0xbddf,0xb87a,0xb6cb,
-0xb87b,0xb87c,0xb87d,0xb87e,0xb880,0xb881,0xb882,0xb883,
-0xb884,0xd6f1,0xf3c3,0xb885,0xb886,0xf3c4,0xb887,0xb8cd,
-0xb888,0xb889,0xb88a,0xf3c6,0xf3c7,0xb88b,0xb0ca,0xb88c,
-0xf3c5,0xb88d,0xf3c9,0xcbf1,0xb88e,0xb88f,0xb890,0xf3cb,
-0xb891,0xd0a6,0xb892,0xb893,0xb1ca,0xf3c8,0xb894,0xb895,
-0xb896,0xf3cf,0xb897,0xb5d1,0xb898,0xb899,0xf3d7,0xb89a,
-0xf3d2,0xb89b,0xb89c,0xb89d,0xf3d4,0xf3d3,0xb7fb,0xb89e,
-0xb1bf,0xb89f,0xf3ce,0xf3ca,0xb5da,0xb8a0,0xf3d0,0xb940,
-0xb941,0xf3d1,0xb942,0xf3d5,0xb943,0xb944,0xb945,0xb946,
-0xf3cd,0xb947,0xbce3,0xb948,0xc1fd,0xb949,0xf3d6,0xb94a,
-0xb94b,0xb94c,0xb94d,0xb94e,0xb94f,0xf3da,0xb950,0xf3cc,
-0xb951,0xb5c8,0xb952,0xbdee,0xf3dc,0xb953,0xb954,0xb7a4,
-0xbff0,0xd6fe,0xcdb2,0xb955,0xb4f0,0xb956,0xb2df,0xb957,
-0xf3d8,0xb958,0xf3d9,0xc9b8,0xb959,0xf3dd,0xb95a,0xb95b,
-0xf3de,0xb95c,0xf3e1,0xb95d,0xb95e,0xb95f,0xb960,0xb961,
-0xb962,0xb963,0xb964,0xb965,0xb966,0xb967,0xf3df,0xb968,
-0xb969,0xf3e3,0xf3e2,0xb96a,0xb96b,0xf3db,0xb96c,0xbfea,
-0xb96d,0xb3ef,0xb96e,0xf3e0,0xb96f,0xb970,0xc7a9,0xb971,
-0xbcf2,0xb972,0xb973,0xb974,0xb975,0xf3eb,0xb976,0xb977,
-0xb978,0xb979,0xb97a,0xb97b,0xb97c,0xb9bf,0xb97d,0xb97e,
-0xf3e4,0xb980,0xb981,0xb982,0xb2ad,0xbbfe,0xb983,0xcbe3,
-0xb984,0xb985,0xb986,0xb987,0xf3ed,0xf3e9,0xb988,0xb989,
-0xb98a,0xb9dc,0xf3ee,0xb98b,0xb98c,0xb98d,0xf3e5,0xf3e6,
-0xf3ea,0xc2e1,0xf3ec,0xf3ef,0xf3e8,0xbcfd,0xb98e,0xb98f,
-0xb990,0xcfe4,0xb991,0xb992,0xf3f0,0xb993,0xb994,0xb995,
-0xf3e7,0xb996,0xb997,0xb998,0xb999,0xb99a,0xb99b,0xb99c,
-0xb99d,0xf3f2,0xb99e,0xb99f,0xb9a0,0xba40,0xd7ad,0xc6aa,
-0xba41,0xba42,0xba43,0xba44,0xf3f3,0xba45,0xba46,0xba47,
-0xba48,0xf3f1,0xba49,0xc2a8,0xba4a,0xba4b,0xba4c,0xba4d,
-0xba4e,0xb8dd,0xf3f5,0xba4f,0xba50,0xf3f4,0xba51,0xba52,
-0xba53,0xb4db,0xba54,0xba55,0xba56,0xf3f6,0xf3f7,0xba57,
-0xba58,0xba59,0xf3f8,0xba5a,0xba5b,0xba5c,0xc0ba,0xba5d,
-0xba5e,0xc0e9,0xba5f,0xba60,0xba61,0xba62,0xba63,0xc5f1,
-0xba64,0xba65,0xba66,0xba67,0xf3fb,0xba68,0xf3fa,0xba69,
-0xba6a,0xba6b,0xba6c,0xba6d,0xba6e,0xba6f,0xba70,0xb4d8,
-0xba71,0xba72,0xba73,0xf3fe,0xf3f9,0xba74,0xba75,0xf3fc,
-0xba76,0xba77,0xba78,0xba79,0xba7a,0xba7b,0xf3fd,0xba7c,
-0xba7d,0xba7e,0xba80,0xba81,0xba82,0xba83,0xba84,0xf4a1,
-0xba85,0xba86,0xba87,0xba88,0xba89,0xba8a,0xf4a3,0xbbc9,
-0xba8b,0xba8c,0xf4a2,0xba8d,0xba8e,0xba8f,0xba90,0xba91,
-0xba92,0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99,
-0xf4a4,0xba9a,0xba9b,0xba9c,0xba9d,0xba9e,0xba9f,0xb2be,
-0xf4a6,0xf4a5,0xbaa0,0xbb40,0xbb41,0xbb42,0xbb43,0xbb44,
-0xbb45,0xbb46,0xbb47,0xbb48,0xbb49,0xbcae,0xbb4a,0xbb4b,
-0xbb4c,0xbb4d,0xbb4e,0xbb4f,0xbb50,0xbb51,0xbb52,0xbb53,
-0xbb54,0xbb55,0xbb56,0xbb57,0xbb58,0xbb59,0xbb5a,0xbb5b,
-0xbb5c,0xbb5d,0xbb5e,0xbb5f,0xbb60,0xbb61,0xbb62,0xbb63,
-0xbb64,0xbb65,0xbb66,0xbb67,0xbb68,0xbb69,0xbb6a,0xbb6b,
-0xbb6c,0xbb6d,0xbb6e,0xc3d7,0xd9e1,0xbb6f,0xbb70,0xbb71,
-0xbb72,0xbb73,0xbb74,0xc0e0,0xf4cc,0xd7d1,0xbb75,0xbb76,
-0xbb77,0xbb78,0xbb79,0xbb7a,0xbb7b,0xbb7c,0xbb7d,0xbb7e,
-0xbb80,0xb7db,0xbb81,0xbb82,0xbb83,0xbb84,0xbb85,0xbb86,
-0xbb87,0xf4ce,0xc1a3,0xbb88,0xbb89,0xc6c9,0xbb8a,0xb4d6,
-0xd5b3,0xbb8b,0xbb8c,0xbb8d,0xf4d0,0xf4cf,0xf4d1,0xcbda,
-0xbb8e,0xbb8f,0xf4d2,0xbb90,0xd4c1,0xd6e0,0xbb91,0xbb92,
-0xbb93,0xbb94,0xb7e0,0xbb95,0xbb96,0xbb97,0xc1b8,0xbb98,
-0xbb99,0xc1bb,0xf4d3,0xbeac,0xbb9a,0xbb9b,0xbb9c,0xbb9d,
-0xbb9e,0xb4e2,0xbb9f,0xbba0,0xf4d4,0xf4d5,0xbeab,0xbc40,
-0xbc41,0xf4d6,0xbc42,0xbc43,0xbc44,0xf4db,0xbc45,0xf4d7,
-0xf4da,0xbc46,0xbafd,0xbc47,0xf4d8,0xf4d9,0xbc48,0xbc49,
-0xbc4a,0xbc4b,0xbc4c,0xbc4d,0xbc4e,0xb8e2,0xccc7,0xf4dc,
-0xbc4f,0xb2da,0xbc50,0xbc51,0xc3d3,0xbc52,0xbc53,0xd4e3,
-0xbfb7,0xbc54,0xbc55,0xbc56,0xbc57,0xbc58,0xbc59,0xbc5a,
-0xf4dd,0xbc5b,0xbc5c,0xbc5d,0xbc5e,0xbc5f,0xbc60,0xc5b4,
-0xbc61,0xbc62,0xbc63,0xbc64,0xbc65,0xbc66,0xbc67,0xbc68,
-0xf4e9,0xbc69,0xbc6a,0xcfb5,0xbc6b,0xbc6c,0xbc6d,0xbc6e,
-0xbc6f,0xbc70,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76,
-0xbc77,0xbc78,0xcec9,0xbc79,0xbc7a,0xbc7b,0xbc7c,0xbc7d,
-0xbc7e,0xbc80,0xbc81,0xbc82,0xbc83,0xbc84,0xbc85,0xbc86,
-0xbc87,0xbc88,0xbc89,0xbc8a,0xbc8b,0xbc8c,0xbc8d,0xbc8e,
-0xcbd8,0xbc8f,0xcbf7,0xbc90,0xbc91,0xbc92,0xbc93,0xbdf4,
-0xbc94,0xbc95,0xbc96,0xd7cf,0xbc97,0xbc98,0xbc99,0xc0db,
-0xbc9a,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca0,0xbd40,
-0xbd41,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd48,
-0xbd49,0xbd4a,0xbd4b,0xbd4c,0xbd4d,0xbd4e,0xbd4f,0xbd50,
-0xbd51,0xbd52,0xbd53,0xbd54,0xbd55,0xbd56,0xbd57,0xbd58,
-0xbd59,0xbd5a,0xbd5b,0xbd5c,0xbd5d,0xbd5e,0xbd5f,0xbd60,
-0xbd61,0xbd62,0xbd63,0xbd64,0xbd65,0xbd66,0xbd67,0xbd68,
-0xbd69,0xbd6a,0xbd6b,0xbd6c,0xbd6d,0xbd6e,0xbd6f,0xbd70,
-0xbd71,0xbd72,0xbd73,0xbd74,0xbd75,0xbd76,0xd0f5,0xbd77,
-0xbd78,0xbd79,0xbd7a,0xbd7b,0xbd7c,0xbd7d,0xbd7e,0xf4ea,
-0xbd80,0xbd81,0xbd82,0xbd83,0xbd84,0xbd85,0xbd86,0xbd87,
-0xbd88,0xbd89,0xbd8a,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,
-0xbd90,0xbd91,0xbd92,0xbd93,0xbd94,0xbd95,0xbd96,0xbd97,
-0xbd98,0xbd99,0xbd9a,0xbd9b,0xbd9c,0xbd9d,0xbd9e,0xbd9f,
-0xbda0,0xbe40,0xbe41,0xbe42,0xbe43,0xbe44,0xbe45,0xbe46,
-0xbe47,0xbe48,0xbe49,0xbe4a,0xbe4b,0xbe4c,0xf4eb,0xbe4d,
-0xbe4e,0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xf4ec,0xbe54,
-0xbe55,0xbe56,0xbe57,0xbe58,0xbe59,0xbe5a,0xbe5b,0xbe5c,
-0xbe5d,0xbe5e,0xbe5f,0xbe60,0xbe61,0xbe62,0xbe63,0xbe64,
-0xbe65,0xbe66,0xbe67,0xbe68,0xbe69,0xbe6a,0xbe6b,0xbe6c,
-0xbe6d,0xbe6e,0xbe6f,0xbe70,0xbe71,0xbe72,0xbe73,0xbe74,
-0xbe75,0xbe76,0xbe77,0xbe78,0xbe79,0xbe7a,0xbe7b,0xbe7c,
-0xbe7d,0xbe7e,0xbe80,0xbe81,0xbe82,0xbe83,0xbe84,0xbe85,
-0xbe86,0xbe87,0xbe88,0xbe89,0xbe8a,0xbe8b,0xbe8c,0xbe8d,
-0xbe8e,0xbe8f,0xbe90,0xbe91,0xbe92,0xbe93,0xbe94,0xbe95,
-0xbe96,0xbe97,0xbe98,0xbe99,0xbe9a,0xbe9b,0xbe9c,0xbe9d,
-0xbe9e,0xbe9f,0xbea0,0xbf40,0xbf41,0xbf42,0xbf43,0xbf44,
-0xbf45,0xbf46,0xbf47,0xbf48,0xbf49,0xbf4a,0xbf4b,0xbf4c,
-0xbf4d,0xbf4e,0xbf4f,0xbf50,0xbf51,0xbf52,0xbf53,0xbf54,
-0xbf55,0xbf56,0xbf57,0xbf58,0xbf59,0xbf5a,0xbf5b,0xbf5c,
-0xbf5d,0xbf5e,0xbf5f,0xbf60,0xbf61,0xbf62,0xbf63,0xbf64,
-0xbf65,0xbf66,0xbf67,0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,
-0xbf6d,0xbf6e,0xbf6f,0xbf70,0xbf71,0xbf72,0xbf73,0xbf74,
-0xbf75,0xbf76,0xbf77,0xbf78,0xbf79,0xbf7a,0xbf7b,0xbf7c,
-0xbf7d,0xbf7e,0xbf80,0xf7e3,0xbf81,0xbf82,0xbf83,0xbf84,
-0xbf85,0xb7b1,0xbf86,0xbf87,0xbf88,0xbf89,0xbf8a,0xf4ed,
-0xbf8b,0xbf8c,0xbf8d,0xbf8e,0xbf8f,0xbf90,0xbf91,0xbf92,
-0xbf93,0xbf94,0xbf95,0xbf96,0xbf97,0xbf98,0xbf99,0xbf9a,
-0xbf9b,0xbf9c,0xbf9d,0xbf9e,0xbf9f,0xbfa0,0xc040,0xc041,
-0xc042,0xc043,0xc044,0xc045,0xc046,0xc047,0xc048,0xc049,
-0xc04a,0xc04b,0xc04c,0xc04d,0xc04e,0xc04f,0xc050,0xc051,
-0xc052,0xc053,0xc054,0xc055,0xc056,0xc057,0xc058,0xc059,
-0xc05a,0xc05b,0xc05c,0xc05d,0xc05e,0xc05f,0xc060,0xc061,
-0xc062,0xc063,0xd7eb,0xc064,0xc065,0xc066,0xc067,0xc068,
-0xc069,0xc06a,0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,0xc070,
-0xc071,0xc072,0xc073,0xc074,0xc075,0xc076,0xc077,0xc078,
-0xc079,0xc07a,0xc07b,0xf4ee,0xc07c,0xc07d,0xc07e,0xe6f9,
-0xbec0,0xe6fa,0xbaec,0xe6fb,0xcfcb,0xe6fc,0xd4bc,0xbcb6,
-0xe6fd,0xe6fe,0xbccd,0xc8d2,0xceb3,0xe7a1,0xc080,0xb4bf,
-0xe7a2,0xc9b4,0xb8d9,0xc4c9,0xc081,0xd7dd,0xc2da,0xb7d7,
-0xd6bd,0xcec6,0xb7c4,0xc082,0xc083,0xc5a6,0xe7a3,0xcfdf,
-0xe7a4,0xe7a5,0xe7a6,0xc1b7,0xd7e9,0xc9f0,0xcfb8,0xd6af,
-0xd6d5,0xe7a7,0xb0ed,0xe7a8,0xe7a9,0xc9dc,0xd2ef,0xbead,
-0xe7aa,0xb0f3,0xc8de,0xbde1,0xe7ab,0xc8c6,0xc084,0xe7ac,
-0xbbe6,0xb8f8,0xd1a4,0xe7ad,0xc2e7,0xbef8,0xbdca,0xcdb3,
-0xe7ae,0xe7af,0xbeee,0xd0e5,0xc085,0xcbe7,0xccd0,0xbccc,
-0xe7b0,0xbca8,0xd0f7,0xe7b1,0xc086,0xd0f8,0xe7b2,0xe7b3,
-0xb4c2,0xe7b4,0xe7b5,0xc9fe,0xceac,0xc3e0,0xe7b7,0xb1c1,
-0xb3f1,0xc087,0xe7b8,0xe7b9,0xd7db,0xd5c0,0xe7ba,0xc2cc,
-0xd7ba,0xe7bb,0xe7bc,0xe7bd,0xbcea,0xc3e5,0xc0c2,0xe7be,
-0xe7bf,0xbca9,0xc088,0xe7c0,0xe7c1,0xe7b6,0xb6d0,0xe7c2,
-0xc089,0xe7c3,0xe7c4,0xbbba,0xb5de,0xc2c6,0xb1e0,0xe7c5,
-0xd4b5,0xe7c6,0xb8bf,0xe7c8,0xe7c7,0xb7ec,0xc08a,0xe7c9,
-0xb2f8,0xe7ca,0xe7cb,0xe7cc,0xe7cd,0xe7ce,0xe7cf,0xe7d0,
-0xd3a7,0xcbf5,0xe7d1,0xe7d2,0xe7d3,0xe7d4,0xc9c9,0xe7d5,
-0xe7d6,0xe7d7,0xe7d8,0xe7d9,0xbdc9,0xe7da,0xf3be,0xc08b,
-0xb8d7,0xc08c,0xc8b1,0xc08d,0xc08e,0xc08f,0xc090,0xc091,
-0xc092,0xc093,0xf3bf,0xc094,0xf3c0,0xf3c1,0xc095,0xc096,
-0xc097,0xc098,0xc099,0xc09a,0xc09b,0xc09c,0xc09d,0xc09e,
-0xb9de,0xcdf8,0xc09f,0xc0a0,0xd8e8,0xbab1,0xc140,0xc2de,
-0xeeb7,0xc141,0xb7a3,0xc142,0xc143,0xc144,0xc145,0xeeb9,
-0xc146,0xeeb8,0xb0d5,0xc147,0xc148,0xc149,0xc14a,0xc14b,
-0xeebb,0xd5d6,0xd7ef,0xc14c,0xc14d,0xc14e,0xd6c3,0xc14f,
-0xc150,0xeebd,0xcaf0,0xc151,0xeebc,0xc152,0xc153,0xc154,
-0xc155,0xeebe,0xc156,0xc157,0xc158,0xc159,0xeec0,0xc15a,
-0xc15b,0xeebf,0xc15c,0xc15d,0xc15e,0xc15f,0xc160,0xc161,
-0xc162,0xc163,0xd1f2,0xc164,0xc7bc,0xc165,0xc3c0,0xc166,
-0xc167,0xc168,0xc169,0xc16a,0xb8e1,0xc16b,0xc16c,0xc16d,
-0xc16e,0xc16f,0xc1e7,0xc170,0xc171,0xf4c6,0xd0df,0xf4c7,
-0xc172,0xcfdb,0xc173,0xc174,0xc8ba,0xc175,0xc176,0xf4c8,
-0xc177,0xc178,0xc179,0xc17a,0xc17b,0xc17c,0xc17d,0xf4c9,
-0xf4ca,0xc17e,0xf4cb,0xc180,0xc181,0xc182,0xc183,0xc184,
-0xd9fa,0xb8fe,0xc185,0xc186,0xe5f1,0xd3f0,0xc187,0xf4e0,
-0xc188,0xcecc,0xc189,0xc18a,0xc18b,0xb3e1,0xc18c,0xc18d,
-0xc18e,0xc18f,0xf1b4,0xc190,0xd2ee,0xc191,0xf4e1,0xc192,
-0xc193,0xc194,0xc195,0xc196,0xcfe8,0xf4e2,0xc197,0xc198,
-0xc7cc,0xc199,0xc19a,0xc19b,0xc19c,0xc19d,0xc19e,0xb5d4,
-0xb4e4,0xf4e4,0xc19f,0xc1a0,0xc240,0xf4e3,0xf4e5,0xc241,
-0xc242,0xf4e6,0xc243,0xc244,0xc245,0xc246,0xf4e7,0xc247,
-0xbab2,0xb0bf,0xc248,0xf4e8,0xc249,0xc24a,0xc24b,0xc24c,
-0xc24d,0xc24e,0xc24f,0xb7ad,0xd2ed,0xc250,0xc251,0xc252,
-0xd2ab,0xc0cf,0xc253,0xbfbc,0xeba3,0xd5df,0xeac8,0xc254,
-0xc255,0xc256,0xc257,0xf1f3,0xb6f8,0xcba3,0xc258,0xc259,
-0xc4cd,0xc25a,0xf1e7,0xc25b,0xf1e8,0xb8fb,0xf1e9,0xbac4,
-0xd4c5,0xb0d2,0xc25c,0xc25d,0xf1ea,0xc25e,0xc25f,0xc260,
-0xf1eb,0xc261,0xf1ec,0xc262,0xc263,0xf1ed,0xf1ee,0xf1ef,
-0xf1f1,0xf1f0,0xc5d5,0xc264,0xc265,0xc266,0xc267,0xc268,
-0xc269,0xf1f2,0xc26a,0xb6fa,0xc26b,0xf1f4,0xd2ae,0xdec7,
-0xcbca,0xc26c,0xc26d,0xb3dc,0xc26e,0xb5a2,0xc26f,0xb9a2,
-0xc270,0xc271,0xc4f4,0xf1f5,0xc272,0xc273,0xf1f6,0xc274,
-0xc275,0xc276,0xc1c4,0xc1fb,0xd6b0,0xf1f7,0xc277,0xc278,
-0xc279,0xc27a,0xf1f8,0xc27b,0xc1aa,0xc27c,0xc27d,0xc27e,
-0xc6b8,0xc280,0xbedb,0xc281,0xc282,0xc283,0xc284,0xc285,
-0xc286,0xc287,0xc288,0xc289,0xc28a,0xc28b,0xc28c,0xc28d,
-0xc28e,0xf1f9,0xb4cf,0xc28f,0xc290,0xc291,0xc292,0xc293,
-0xc294,0xf1fa,0xc295,0xc296,0xc297,0xc298,0xc299,0xc29a,
-0xc29b,0xc29c,0xc29d,0xc29e,0xc29f,0xc2a0,0xc340,0xedb2,
-0xedb1,0xc341,0xc342,0xcbe0,0xd2de,0xc343,0xcbc1,0xd5d8,
-0xc344,0xc8e2,0xc345,0xc0df,0xbca1,0xc346,0xc347,0xc348,
-0xc349,0xc34a,0xc34b,0xebc1,0xc34c,0xc34d,0xd0a4,0xc34e,
-0xd6e2,0xc34f,0xb6c7,0xb8d8,0xebc0,0xb8ce,0xc350,0xebbf,
-0xb3a6,0xb9c9,0xd6ab,0xc351,0xb7f4,0xb7ca,0xc352,0xc353,
-0xc354,0xbce7,0xb7be,0xebc6,0xc355,0xebc7,0xb0b9,0xbfcf,
-0xc356,0xebc5,0xd3fd,0xc357,0xebc8,0xc358,0xc359,0xebc9,
-0xc35a,0xc35b,0xb7ce,0xc35c,0xebc2,0xebc4,0xc9f6,0xd6d7,
-0xd5cd,0xd0b2,0xebcf,0xceb8,0xebd0,0xc35d,0xb5a8,0xc35e,
-0xc35f,0xc360,0xc361,0xc362,0xb1b3,0xebd2,0xcca5,0xc363,
-0xc364,0xc365,0xc366,0xc367,0xc368,0xc369,0xc5d6,0xebd3,
-0xc36a,0xebd1,0xc5df,0xebce,0xcaa4,0xebd5,0xb0fb,0xc36b,
-0xc36c,0xbafa,0xc36d,0xc36e,0xd8b7,0xf1e3,0xc36f,0xebca,
-0xebcb,0xebcc,0xebcd,0xebd6,0xe6c0,0xebd9,0xc370,0xbfe8,
-0xd2c8,0xebd7,0xebdc,0xb8ec,0xebd8,0xc371,0xbdba,0xc372,
-0xd0d8,0xc373,0xb0b7,0xc374,0xebdd,0xc4dc,0xc375,0xc376,
-0xc377,0xc378,0xd6ac,0xc379,0xc37a,0xc37b,0xb4e0,0xc37c,
-0xc37d,0xc2f6,0xbcb9,0xc37e,0xc380,0xebda,0xebdb,0xd4e0,
-0xc6ea,0xc4d4,0xebdf,0xc5a7,0xd9f5,0xc381,0xb2b1,0xc382,
-0xebe4,0xc383,0xbdc5,0xc384,0xc385,0xc386,0xebe2,0xc387,
-0xc388,0xc389,0xc38a,0xc38b,0xc38c,0xc38d,0xc38e,0xc38f,
-0xc390,0xc391,0xc392,0xc393,0xebe3,0xc394,0xc395,0xb8ac,
-0xc396,0xcdd1,0xebe5,0xc397,0xc398,0xc399,0xebe1,0xc39a,
-0xc1b3,0xc39b,0xc39c,0xc39d,0xc39e,0xc39f,0xc6a2,0xc3a0,
-0xc440,0xc441,0xc442,0xc443,0xc444,0xc445,0xccf3,0xc446,
-0xebe6,0xc447,0xc0b0,0xd2b8,0xebe7,0xc448,0xc449,0xc44a,
-0xb8af,0xb8ad,0xc44b,0xebe8,0xc7bb,0xcdf3,0xc44c,0xc44d,
-0xc44e,0xebea,0xebeb,0xc44f,0xc450,0xc451,0xc452,0xc453,
-0xebed,0xc454,0xc455,0xc456,0xc457,0xd0c8,0xc458,0xebf2,
-0xc459,0xebee,0xc45a,0xc45b,0xc45c,0xebf1,0xc8f9,0xc45d,
-0xd1fc,0xebec,0xc45e,0xc45f,0xebe9,0xc460,0xc461,0xc462,
-0xc463,0xb8b9,0xcfd9,0xc4e5,0xebef,0xebf0,0xccda,0xcdc8,
-0xb0f2,0xc464,0xebf6,0xc465,0xc466,0xc467,0xc468,0xc469,
-0xebf5,0xc46a,0xb2b2,0xc46b,0xc46c,0xc46d,0xc46e,0xb8e0,
-0xc46f,0xebf7,0xc470,0xc471,0xc472,0xc473,0xc474,0xc475,
-0xb1ec,0xc476,0xc477,0xccc5,0xc4a4,0xcfa5,0xc478,0xc479,
-0xc47a,0xc47b,0xc47c,0xebf9,0xc47d,0xc47e,0xeca2,0xc480,
-0xc5f2,0xc481,0xebfa,0xc482,0xc483,0xc484,0xc485,0xc486,
-0xc487,0xc488,0xc489,0xc9c5,0xc48a,0xc48b,0xc48c,0xc48d,
-0xc48e,0xc48f,0xe2df,0xebfe,0xc490,0xc491,0xc492,0xc493,
-0xcdce,0xeca1,0xb1db,0xd3b7,0xc494,0xc495,0xd2dc,0xc496,
-0xc497,0xc498,0xebfd,0xc499,0xebfb,0xc49a,0xc49b,0xc49c,
-0xc49d,0xc49e,0xc49f,0xc4a0,0xc540,0xc541,0xc542,0xc543,
-0xc544,0xc545,0xc546,0xc547,0xc548,0xc549,0xc54a,0xc54b,
-0xc54c,0xc54d,0xc54e,0xb3bc,0xc54f,0xc550,0xc551,0xeab0,
-0xc552,0xc553,0xd7d4,0xc554,0xf4ab,0xb3f4,0xc555,0xc556,
-0xc557,0xc558,0xc559,0xd6c1,0xd6c2,0xc55a,0xc55b,0xc55c,
-0xc55d,0xc55e,0xc55f,0xd5e9,0xbeca,0xc560,0xf4a7,0xc561,
-0xd2a8,0xf4a8,0xf4a9,0xc562,0xf4aa,0xbecb,0xd3df,0xc563,
-0xc564,0xc565,0xc566,0xc567,0xc9e0,0xc9e1,0xc568,0xc569,
-0xf3c2,0xc56a,0xcae6,0xc56b,0xccf2,0xc56c,0xc56d,0xc56e,
-0xc56f,0xc570,0xc571,0xe2b6,0xcbb4,0xc572,0xcee8,0xd6db,
-0xc573,0xf4ad,0xf4ae,0xf4af,0xc574,0xc575,0xc576,0xc577,
-0xf4b2,0xc578,0xbabd,0xf4b3,0xb0e3,0xf4b0,0xc579,0xf4b1,
-0xbda2,0xb2d5,0xc57a,0xf4b6,0xf4b7,0xb6e6,0xb2b0,0xcfcf,
-0xf4b4,0xb4ac,0xc57b,0xf4b5,0xc57c,0xc57d,0xf4b8,0xc57e,
-0xc580,0xc581,0xc582,0xc583,0xf4b9,0xc584,0xc585,0xcda7,
-0xc586,0xf4ba,0xc587,0xf4bb,0xc588,0xc589,0xc58a,0xf4bc,
-0xc58b,0xc58c,0xc58d,0xc58e,0xc58f,0xc590,0xc591,0xc592,
-0xcbd2,0xc593,0xf4bd,0xc594,0xc595,0xc596,0xc597,0xf4be,
-0xc598,0xc599,0xc59a,0xc59b,0xc59c,0xc59d,0xc59e,0xc59f,
-0xf4bf,0xc5a0,0xc640,0xc641,0xc642,0xc643,0xf4de,0xc1bc,
-0xbce8,0xc644,0xc9ab,0xd1de,0xe5f5,0xc645,0xc646,0xc647,
-0xc648,0xdcb3,0xd2d5,0xc649,0xc64a,0xdcb4,0xb0ac,0xdcb5,
-0xc64b,0xc64c,0xbdda,0xc64d,0xdcb9,0xc64e,0xc64f,0xc650,
-0xd8c2,0xc651,0xdcb7,0xd3f3,0xc652,0xc9d6,0xdcba,0xdcb6,
-0xc653,0xdcbb,0xc3a2,0xc654,0xc655,0xc656,0xc657,0xdcbc,
-0xdcc5,0xdcbd,0xc658,0xc659,0xcedf,0xd6a5,0xc65a,0xdccf,
-0xc65b,0xdccd,0xc65c,0xc65d,0xdcd2,0xbde6,0xc2ab,0xc65e,
-0xdcb8,0xdccb,0xdcce,0xdcbe,0xb7d2,0xb0c5,0xdcc7,0xd0be,
-0xdcc1,0xbba8,0xc65f,0xb7bc,0xdccc,0xc660,0xc661,0xdcc6,
-0xdcbf,0xc7db,0xc662,0xc663,0xc664,0xd1bf,0xdcc0,0xc665,
-0xc666,0xdcca,0xc667,0xc668,0xdcd0,0xc669,0xc66a,0xcead,
-0xdcc2,0xc66b,0xdcc3,0xdcc8,0xdcc9,0xb2d4,0xdcd1,0xcbd5,
-0xc66c,0xd4b7,0xdcdb,0xdcdf,0xcca6,0xdce6,0xc66d,0xc3e7,
-0xdcdc,0xc66e,0xc66f,0xbfc1,0xdcd9,0xc670,0xb0fa,0xb9b6,
-0xdce5,0xdcd3,0xc671,0xdcc4,0xdcd6,0xc8f4,0xbfe0,0xc672,
-0xc673,0xc674,0xc675,0xc9bb,0xc676,0xc677,0xc678,0xb1bd,
-0xc679,0xd3a2,0xc67a,0xc67b,0xdcda,0xc67c,0xc67d,0xdcd5,
-0xc67e,0xc6bb,0xc680,0xdcde,0xc681,0xc682,0xc683,0xc684,
-0xc685,0xd7c2,0xc3af,0xb7b6,0xc7d1,0xc3a9,0xdce2,0xdcd8,
-0xdceb,0xdcd4,0xc686,0xc687,0xdcdd,0xc688,0xbea5,0xdcd7,
-0xc689,0xdce0,0xc68a,0xc68b,0xdce3,0xdce4,0xc68c,0xdcf8,
-0xc68d,0xc68e,0xdce1,0xdda2,0xdce7,0xc68f,0xc690,0xc691,
-0xc692,0xc693,0xc694,0xc695,0xc696,0xc697,0xc698,0xbceb,
-0xb4c4,0xc699,0xc69a,0xc3a3,0xb2e7,0xdcfa,0xc69b,0xdcf2,
-0xc69c,0xdcef,0xc69d,0xdcfc,0xdcee,0xd2f0,0xb2e8,0xc69e,
-0xc8d7,0xc8e3,0xdcfb,0xc69f,0xdced,0xc6a0,0xc740,0xc741,
-0xdcf7,0xc742,0xc743,0xdcf5,0xc744,0xc745,0xbea3,0xdcf4,
-0xc746,0xb2dd,0xc747,0xc748,0xc749,0xc74a,0xc74b,0xdcf3,
-0xbcf6,0xdce8,0xbbc4,0xc74c,0xc0f3,0xc74d,0xc74e,0xc74f,
-0xc750,0xc751,0xbcd4,0xdce9,0xdcea,0xc752,0xdcf1,0xdcf6,
-0xdcf9,0xb5b4,0xc753,0xc8d9,0xbbe7,0xdcfe,0xdcfd,0xd3ab,
-0xdda1,0xdda3,0xdda5,0xd2f1,0xdda4,0xdda6,0xdda7,0xd2a9,
-0xc754,0xc755,0xc756,0xc757,0xc758,0xc759,0xc75a,0xbac9,
-0xdda9,0xc75b,0xc75c,0xddb6,0xddb1,0xddb4,0xc75d,0xc75e,
-0xc75f,0xc760,0xc761,0xc762,0xc763,0xddb0,0xc6ce,0xc764,
-0xc765,0xc0f2,0xc766,0xc767,0xc768,0xc769,0xc9af,0xc76a,
-0xc76b,0xc76c,0xdcec,0xddae,0xc76d,0xc76e,0xc76f,0xc770,
-0xddb7,0xc771,0xc772,0xdcf0,0xddaf,0xc773,0xddb8,0xc774,
-0xddac,0xc775,0xc776,0xc777,0xc778,0xc779,0xc77a,0xc77b,
-0xddb9,0xddb3,0xddad,0xc4aa,0xc77c,0xc77d,0xc77e,0xc780,
-0xdda8,0xc0b3,0xc1ab,0xddaa,0xddab,0xc781,0xddb2,0xbbf1,
-0xddb5,0xd3a8,0xddba,0xc782,0xddbb,0xc3a7,0xc783,0xc784,
-0xddd2,0xddbc,0xc785,0xc786,0xc787,0xddd1,0xc788,0xb9bd,
-0xc789,0xc78a,0xbed5,0xc78b,0xbefa,0xc78c,0xc78d,0xbaca,
-0xc78e,0xc78f,0xc790,0xc791,0xddca,0xc792,0xddc5,0xc793,
-0xddbf,0xc794,0xc795,0xc796,0xb2cb,0xddc3,0xc797,0xddcb,
-0xb2a4,0xddd5,0xc798,0xc799,0xc79a,0xddbe,0xc79b,0xc79c,
-0xc79d,0xc6d0,0xddd0,0xc79e,0xc79f,0xc7a0,0xc840,0xc841,
-0xddd4,0xc1e2,0xb7c6,0xc842,0xc843,0xc844,0xc845,0xc846,
-0xddce,0xddcf,0xc847,0xc848,0xc849,0xddc4,0xc84a,0xc84b,
-0xc84c,0xddbd,0xc84d,0xddcd,0xccd1,0xc84e,0xddc9,0xc84f,
-0xc850,0xc851,0xc852,0xddc2,0xc3c8,0xc6bc,0xceae,0xddcc,
-0xc853,0xddc8,0xc854,0xc855,0xc856,0xc857,0xc858,0xc859,
-0xddc1,0xc85a,0xc85b,0xc85c,0xddc6,0xc2dc,0xc85d,0xc85e,
-0xc85f,0xc860,0xc861,0xc862,0xd3a9,0xd3aa,0xddd3,0xcff4,
-0xc8f8,0xc863,0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,
-0xc86a,0xdde6,0xc86b,0xc86c,0xc86d,0xc86e,0xc86f,0xc870,
-0xddc7,0xc871,0xc872,0xc873,0xdde0,0xc2e4,0xc874,0xc875,
-0xc876,0xc877,0xc878,0xc879,0xc87a,0xc87b,0xdde1,0xc87c,
-0xc87d,0xc87e,0xc880,0xc881,0xc882,0xc883,0xc884,0xc885,
-0xc886,0xddd7,0xc887,0xc888,0xc889,0xc88a,0xc88b,0xd6f8,
-0xc88c,0xddd9,0xddd8,0xb8f0,0xddd6,0xc88d,0xc88e,0xc88f,
-0xc890,0xc6cf,0xc891,0xb6ad,0xc892,0xc893,0xc894,0xc895,
-0xc896,0xdde2,0xc897,0xbaf9,0xd4e1,0xdde7,0xc898,0xc899,
-0xc89a,0xb4d0,0xc89b,0xddda,0xc89c,0xbffb,0xdde3,0xc89d,
-0xdddf,0xc89e,0xdddd,0xc89f,0xc8a0,0xc940,0xc941,0xc942,
-0xc943,0xc944,0xb5d9,0xc945,0xc946,0xc947,0xc948,0xdddb,
-0xdddc,0xddde,0xc949,0xbdaf,0xdde4,0xc94a,0xdde5,0xc94b,
-0xc94c,0xc94d,0xc94e,0xc94f,0xc950,0xc951,0xc952,0xddf5,
-0xc953,0xc3c9,0xc954,0xc955,0xcbe2,0xc956,0xc957,0xc958,
-0xc959,0xddf2,0xc95a,0xc95b,0xc95c,0xc95d,0xc95e,0xc95f,
-0xc960,0xc961,0xc962,0xc963,0xc964,0xc965,0xc966,0xd8e1,
-0xc967,0xc968,0xc6d1,0xc969,0xddf4,0xc96a,0xc96b,0xc96c,
-0xd5f4,0xddf3,0xddf0,0xc96d,0xc96e,0xddec,0xc96f,0xddef,
-0xc970,0xdde8,0xc971,0xc972,0xd0ee,0xc973,0xc974,0xc975,
-0xc976,0xc8d8,0xddee,0xc977,0xc978,0xdde9,0xc979,0xc97a,
-0xddea,0xcbf2,0xc97b,0xdded,0xc97c,0xc97d,0xb1cd,0xc97e,
-0xc980,0xc981,0xc982,0xc983,0xc984,0xc0b6,0xc985,0xbcbb,
-0xddf1,0xc986,0xc987,0xddf7,0xc988,0xddf6,0xddeb,0xc989,
-0xc98a,0xc98b,0xc98c,0xc98d,0xc5ee,0xc98e,0xc98f,0xc990,
-0xddfb,0xc991,0xc992,0xc993,0xc994,0xc995,0xc996,0xc997,
-0xc998,0xc999,0xc99a,0xc99b,0xdea4,0xc99c,0xc99d,0xdea3,
-0xc99e,0xc99f,0xc9a0,0xca40,0xca41,0xca42,0xca43,0xca44,
-0xca45,0xca46,0xca47,0xca48,0xddf8,0xca49,0xca4a,0xca4b,
-0xca4c,0xc3ef,0xca4d,0xc2fb,0xca4e,0xca4f,0xca50,0xd5e1,
-0xca51,0xca52,0xceb5,0xca53,0xca54,0xca55,0xca56,0xddfd,
-0xca57,0xb2cc,0xca58,0xca59,0xca5a,0xca5b,0xca5c,0xca5d,
-0xca5e,0xca5f,0xca60,0xc4e8,0xcadf,0xca61,0xca62,0xca63,
-0xca64,0xca65,0xca66,0xca67,0xca68,0xca69,0xca6a,0xc7be,
-0xddfa,0xddfc,0xddfe,0xdea2,0xb0aa,0xb1ce,0xca6b,0xca6c,
-0xca6d,0xca6e,0xca6f,0xdeac,0xca70,0xca71,0xca72,0xca73,
-0xdea6,0xbdb6,0xc8ef,0xca74,0xca75,0xca76,0xca77,0xca78,
-0xca79,0xca7a,0xca7b,0xca7c,0xca7d,0xca7e,0xdea1,0xca80,
-0xca81,0xdea5,0xca82,0xca83,0xca84,0xca85,0xdea9,0xca86,
-0xca87,0xca88,0xca89,0xca8a,0xdea8,0xca8b,0xca8c,0xca8d,
-0xdea7,0xca8e,0xca8f,0xca90,0xca91,0xca92,0xca93,0xca94,
-0xca95,0xca96,0xdead,0xca97,0xd4cc,0xca98,0xca99,0xca9a,
-0xca9b,0xdeb3,0xdeaa,0xdeae,0xca9c,0xca9d,0xc0d9,0xca9e,
-0xca9f,0xcaa0,0xcb40,0xcb41,0xb1a1,0xdeb6,0xcb42,0xdeb1,
-0xcb43,0xcb44,0xcb45,0xcb46,0xcb47,0xcb48,0xcb49,0xdeb2,
-0xcb4a,0xcb4b,0xcb4c,0xcb4d,0xcb4e,0xcb4f,0xcb50,0xcb51,
-0xcb52,0xcb53,0xcb54,0xd1a6,0xdeb5,0xcb55,0xcb56,0xcb57,
-0xcb58,0xcb59,0xcb5a,0xcb5b,0xdeaf,0xcb5c,0xcb5d,0xcb5e,
-0xdeb0,0xcb5f,0xd0bd,0xcb60,0xcb61,0xcb62,0xdeb4,0xcaed,
-0xdeb9,0xcb63,0xcb64,0xcb65,0xcb66,0xcb67,0xcb68,0xdeb8,
-0xcb69,0xdeb7,0xcb6a,0xcb6b,0xcb6c,0xcb6d,0xcb6e,0xcb6f,
-0xcb70,0xdebb,0xcb71,0xcb72,0xcb73,0xcb74,0xcb75,0xcb76,
-0xcb77,0xbde5,0xcb78,0xcb79,0xcb7a,0xcb7b,0xcb7c,0xb2d8,
-0xc3ea,0xcb7d,0xcb7e,0xdeba,0xcb80,0xc5ba,0xcb81,0xcb82,
-0xcb83,0xcb84,0xcb85,0xcb86,0xdebc,0xcb87,0xcb88,0xcb89,
-0xcb8a,0xcb8b,0xcb8c,0xcb8d,0xccd9,0xcb8e,0xcb8f,0xcb90,
-0xcb91,0xb7aa,0xcb92,0xcb93,0xcb94,0xcb95,0xcb96,0xcb97,
-0xcb98,0xcb99,0xcb9a,0xcb9b,0xcb9c,0xcb9d,0xcb9e,0xcb9f,
-0xcba0,0xcc40,0xcc41,0xd4e5,0xcc42,0xcc43,0xcc44,0xdebd,
-0xcc45,0xcc46,0xcc47,0xcc48,0xcc49,0xdebf,0xcc4a,0xcc4b,
-0xcc4c,0xcc4d,0xcc4e,0xcc4f,0xcc50,0xcc51,0xcc52,0xcc53,
-0xcc54,0xc4a2,0xcc55,0xcc56,0xcc57,0xcc58,0xdec1,0xcc59,
-0xcc5a,0xcc5b,0xcc5c,0xcc5d,0xcc5e,0xcc5f,0xcc60,0xcc61,
-0xcc62,0xcc63,0xcc64,0xcc65,0xcc66,0xcc67,0xcc68,0xdebe,
-0xcc69,0xdec0,0xcc6a,0xcc6b,0xcc6c,0xcc6d,0xcc6e,0xcc6f,
-0xcc70,0xcc71,0xcc72,0xcc73,0xcc74,0xcc75,0xcc76,0xcc77,
-0xd5ba,0xcc78,0xcc79,0xcc7a,0xdec2,0xcc7b,0xcc7c,0xcc7d,
-0xcc7e,0xcc80,0xcc81,0xcc82,0xcc83,0xcc84,0xcc85,0xcc86,
-0xcc87,0xcc88,0xcc89,0xcc8a,0xcc8b,0xf2ae,0xbba2,0xc2b2,
-0xc5b0,0xc2c7,0xcc8c,0xcc8d,0xf2af,0xcc8e,0xcc8f,0xcc90,
-0xcc91,0xcc92,0xd0e9,0xcc93,0xcc94,0xcc95,0xd3dd,0xcc96,
-0xcc97,0xcc98,0xebbd,0xcc99,0xcc9a,0xcc9b,0xcc9c,0xcc9d,
-0xcc9e,0xcc9f,0xcca0,0xb3e6,0xf2b0,0xcd40,0xf2b1,0xcd41,
-0xcd42,0xcaad,0xcd43,0xcd44,0xcd45,0xcd46,0xcd47,0xcd48,
-0xcd49,0xbae7,0xf2b3,0xf2b5,0xf2b4,0xcbe4,0xcfba,0xf2b2,
-0xcab4,0xd2cf,0xc2ec,0xcd4a,0xcd4b,0xcd4c,0xcd4d,0xcd4e,
-0xcd4f,0xcd50,0xcec3,0xf2b8,0xb0f6,0xf2b7,0xcd51,0xcd52,
-0xcd53,0xcd54,0xcd55,0xf2be,0xcd56,0xb2cf,0xcd57,0xcd58,
-0xcd59,0xcd5a,0xcd5b,0xcd5c,0xd1c1,0xf2ba,0xcd5d,0xcd5e,
-0xcd5f,0xcd60,0xcd61,0xf2bc,0xd4e9,0xcd62,0xcd63,0xf2bb,
-0xf2b6,0xf2bf,0xf2bd,0xcd64,0xf2b9,0xcd65,0xcd66,0xf2c7,
-0xf2c4,0xf2c6,0xcd67,0xcd68,0xf2ca,0xf2c2,0xf2c0,0xcd69,
-0xcd6a,0xcd6b,0xf2c5,0xcd6c,0xcd6d,0xcd6e,0xcd6f,0xcd70,
-0xd6fb,0xcd71,0xcd72,0xcd73,0xf2c1,0xcd74,0xc7f9,0xc9df,
-0xcd75,0xf2c8,0xb9c6,0xb5b0,0xcd76,0xcd77,0xf2c3,0xf2c9,
-0xf2d0,0xf2d6,0xcd78,0xcd79,0xbbd7,0xcd7a,0xcd7b,0xcd7c,
-0xf2d5,0xcddc,0xcd7d,0xd6eb,0xcd7e,0xcd80,0xf2d2,0xf2d4,
-0xcd81,0xcd82,0xcd83,0xcd84,0xb8f2,0xcd85,0xcd86,0xcd87,
-0xcd88,0xf2cb,0xcd89,0xcd8a,0xcd8b,0xf2ce,0xc2f9,0xcd8c,
-0xd5dd,0xf2cc,0xf2cd,0xf2cf,0xf2d3,0xcd8d,0xcd8e,0xcd8f,
-0xf2d9,0xd3bc,0xcd90,0xcd91,0xcd92,0xcd93,0xb6ea,0xcd94,
-0xcaf1,0xcd95,0xb7e4,0xf2d7,0xcd96,0xcd97,0xcd98,0xf2d8,
-0xf2da,0xf2dd,0xf2db,0xcd99,0xcd9a,0xf2dc,0xcd9b,0xcd9c,
-0xcd9d,0xcd9e,0xd1d1,0xf2d1,0xcd9f,0xcdc9,0xcda0,0xcecf,
-0xd6a9,0xce40,0xf2e3,0xce41,0xc3db,0xce42,0xf2e0,0xce43,
-0xce44,0xc0af,0xf2ec,0xf2de,0xce45,0xf2e1,0xce46,0xce47,
-0xce48,0xf2e8,0xce49,0xce4a,0xce4b,0xce4c,0xf2e2,0xce4d,
-0xce4e,0xf2e7,0xce4f,0xce50,0xf2e6,0xce51,0xce52,0xf2e9,
-0xce53,0xce54,0xce55,0xf2df,0xce56,0xce57,0xf2e4,0xf2ea,
-0xce58,0xce59,0xce5a,0xce5b,0xce5c,0xce5d,0xce5e,0xd3ac,
-0xf2e5,0xb2f5,0xce5f,0xce60,0xf2f2,0xce61,0xd0ab,0xce62,
-0xce63,0xce64,0xce65,0xf2f5,0xce66,0xce67,0xce68,0xbbc8,
-0xce69,0xf2f9,0xce6a,0xce6b,0xce6c,0xce6d,0xce6e,0xce6f,
-0xf2f0,0xce70,0xce71,0xf2f6,0xf2f8,0xf2fa,0xce72,0xce73,
-0xce74,0xce75,0xce76,0xce77,0xce78,0xce79,0xf2f3,0xce7a,
-0xf2f1,0xce7b,0xce7c,0xce7d,0xbafb,0xce7e,0xb5fb,0xce80,
-0xce81,0xce82,0xce83,0xf2ef,0xf2f7,0xf2ed,0xf2ee,0xce84,
-0xce85,0xce86,0xf2eb,0xf3a6,0xce87,0xf3a3,0xce88,0xce89,
-0xf3a2,0xce8a,0xce8b,0xf2f4,0xce8c,0xc8da,0xce8d,0xce8e,
-0xce8f,0xce90,0xce91,0xf2fb,0xce92,0xce93,0xce94,0xf3a5,
-0xce95,0xce96,0xce97,0xce98,0xce99,0xce9a,0xce9b,0xc3f8,
-0xce9c,0xce9d,0xce9e,0xce9f,0xcea0,0xcf40,0xcf41,0xcf42,
-0xf2fd,0xcf43,0xcf44,0xf3a7,0xf3a9,0xf3a4,0xcf45,0xf2fc,
-0xcf46,0xcf47,0xcf48,0xf3ab,0xcf49,0xf3aa,0xcf4a,0xcf4b,
-0xcf4c,0xcf4d,0xc2dd,0xcf4e,0xcf4f,0xf3ae,0xcf50,0xcf51,
-0xf3b0,0xcf52,0xcf53,0xcf54,0xcf55,0xcf56,0xf3a1,0xcf57,
-0xcf58,0xcf59,0xf3b1,0xf3ac,0xcf5a,0xcf5b,0xcf5c,0xcf5d,
-0xcf5e,0xf3af,0xf2fe,0xf3ad,0xcf5f,0xcf60,0xcf61,0xcf62,
-0xcf63,0xcf64,0xcf65,0xf3b2,0xcf66,0xcf67,0xcf68,0xcf69,
-0xf3b4,0xcf6a,0xcf6b,0xcf6c,0xcf6d,0xf3a8,0xcf6e,0xcf6f,
-0xcf70,0xcf71,0xf3b3,0xcf72,0xcf73,0xcf74,0xf3b5,0xcf75,
-0xcf76,0xcf77,0xcf78,0xcf79,0xcf7a,0xcf7b,0xcf7c,0xcf7d,
-0xcf7e,0xd0b7,0xcf80,0xcf81,0xcf82,0xcf83,0xf3b8,0xcf84,
-0xcf85,0xcf86,0xcf87,0xd9f9,0xcf88,0xcf89,0xcf8a,0xcf8b,
-0xcf8c,0xcf8d,0xf3b9,0xcf8e,0xcf8f,0xcf90,0xcf91,0xcf92,
-0xcf93,0xcf94,0xcf95,0xf3b7,0xcf96,0xc8e4,0xf3b6,0xcf97,
-0xcf98,0xcf99,0xcf9a,0xf3ba,0xcf9b,0xcf9c,0xcf9d,0xcf9e,
-0xcf9f,0xf3bb,0xb4c0,0xcfa0,0xd040,0xd041,0xd042,0xd043,
-0xd044,0xd045,0xd046,0xd047,0xd048,0xd049,0xd04a,0xd04b,
-0xd04c,0xd04d,0xeec3,0xd04e,0xd04f,0xd050,0xd051,0xd052,
-0xd053,0xf3bc,0xd054,0xd055,0xf3bd,0xd056,0xd057,0xd058,
-0xd1aa,0xd059,0xd05a,0xd05b,0xf4ac,0xd0c6,0xd05c,0xd05d,
-0xd05e,0xd05f,0xd060,0xd061,0xd0d0,0xd1dc,0xd062,0xd063,
-0xd064,0xd065,0xd066,0xd067,0xcfce,0xd068,0xd069,0xbdd6,
-0xd06a,0xd1c3,0xd06b,0xd06c,0xd06d,0xd06e,0xd06f,0xd070,
-0xd071,0xbae2,0xe1e9,0xd2c2,0xf1c2,0xb2b9,0xd072,0xd073,
-0xb1ed,0xf1c3,0xd074,0xc9c0,0xb3c4,0xd075,0xd9f2,0xd076,
-0xcba5,0xd077,0xf1c4,0xd078,0xd079,0xd07a,0xd07b,0xd6d4,
-0xd07c,0xd07d,0xd07e,0xd080,0xd081,0xf1c5,0xf4c0,0xf1c6,
-0xd082,0xd4ac,0xf1c7,0xd083,0xb0c0,0xf4c1,0xd084,0xd085,
-0xf4c2,0xd086,0xd087,0xb4fc,0xd088,0xc5db,0xd089,0xd08a,
-0xd08b,0xd08c,0xccbb,0xd08d,0xd08e,0xd08f,0xd0e4,0xd090,
-0xd091,0xd092,0xd093,0xd094,0xcde0,0xd095,0xd096,0xd097,
-0xd098,0xd099,0xf1c8,0xd09a,0xd9f3,0xd09b,0xd09c,0xd09d,
-0xd09e,0xd09f,0xd0a0,0xb1bb,0xd140,0xcfae,0xd141,0xd142,
-0xd143,0xb8a4,0xd144,0xd145,0xd146,0xd147,0xd148,0xf1ca,
-0xd149,0xd14a,0xd14b,0xd14c,0xf1cb,0xd14d,0xd14e,0xd14f,
-0xd150,0xb2c3,0xc1d1,0xd151,0xd152,0xd7b0,0xf1c9,0xd153,
-0xd154,0xf1cc,0xd155,0xd156,0xd157,0xd158,0xf1ce,0xd159,
-0xd15a,0xd15b,0xd9f6,0xd15c,0xd2e1,0xd4a3,0xd15d,0xd15e,
-0xf4c3,0xc8b9,0xd15f,0xd160,0xd161,0xd162,0xd163,0xf4c4,
-0xd164,0xd165,0xf1cd,0xf1cf,0xbfe3,0xf1d0,0xd166,0xd167,
-0xf1d4,0xd168,0xd169,0xd16a,0xd16b,0xd16c,0xd16d,0xd16e,
-0xf1d6,0xf1d1,0xd16f,0xc9d1,0xc5e1,0xd170,0xd171,0xd172,
-0xc2e3,0xb9fc,0xd173,0xd174,0xf1d3,0xd175,0xf1d5,0xd176,
-0xd177,0xd178,0xb9d3,0xd179,0xd17a,0xd17b,0xd17c,0xd17d,
-0xd17e,0xd180,0xf1db,0xd181,0xd182,0xd183,0xd184,0xd185,
-0xbad6,0xd186,0xb0fd,0xf1d9,0xd187,0xd188,0xd189,0xd18a,
-0xd18b,0xf1d8,0xf1d2,0xf1da,0xd18c,0xd18d,0xd18e,0xd18f,
-0xd190,0xf1d7,0xd191,0xd192,0xd193,0xc8ec,0xd194,0xd195,
-0xd196,0xd197,0xcdca,0xf1dd,0xd198,0xd199,0xd19a,0xd19b,
-0xe5bd,0xd19c,0xd19d,0xd19e,0xf1dc,0xd19f,0xf1de,0xd1a0,
-0xd240,0xd241,0xd242,0xd243,0xd244,0xd245,0xd246,0xd247,
-0xd248,0xf1df,0xd249,0xd24a,0xcfe5,0xd24b,0xd24c,0xd24d,
-0xd24e,0xd24f,0xd250,0xd251,0xd252,0xd253,0xd254,0xd255,
-0xd256,0xd257,0xd258,0xd259,0xd25a,0xd25b,0xd25c,0xd25d,
-0xd25e,0xd25f,0xd260,0xd261,0xd262,0xd263,0xf4c5,0xbdf3,
-0xd264,0xd265,0xd266,0xd267,0xd268,0xd269,0xf1e0,0xd26a,
-0xd26b,0xd26c,0xd26d,0xd26e,0xd26f,0xd270,0xd271,0xd272,
-0xd273,0xd274,0xd275,0xd276,0xd277,0xd278,0xd279,0xd27a,
-0xd27b,0xd27c,0xd27d,0xf1e1,0xd27e,0xd280,0xd281,0xcef7,
-0xd282,0xd2aa,0xd283,0xf1fb,0xd284,0xd285,0xb8b2,0xd286,
-0xd287,0xd288,0xd289,0xd28a,0xd28b,0xd28c,0xd28d,0xd28e,
-0xd28f,0xd290,0xd291,0xd292,0xd293,0xd294,0xd295,0xd296,
-0xd297,0xd298,0xd299,0xd29a,0xd29b,0xd29c,0xd29d,0xd29e,
-0xd29f,0xd2a0,0xd340,0xd341,0xd342,0xd343,0xd344,0xd345,
-0xd346,0xd347,0xd348,0xd349,0xd34a,0xd34b,0xd34c,0xd34d,
-0xd34e,0xd34f,0xd350,0xd351,0xd352,0xd353,0xd354,0xd355,
-0xd356,0xd357,0xd358,0xd359,0xd35a,0xd35b,0xd35c,0xd35d,
-0xd35e,0xbcfb,0xb9db,0xd35f,0xb9e6,0xc3d9,0xcad3,0xeae8,
-0xc0c0,0xbef5,0xeae9,0xeaea,0xeaeb,0xd360,0xeaec,0xeaed,
-0xeaee,0xeaef,0xbdc7,0xd361,0xd362,0xd363,0xf5fb,0xd364,
-0xd365,0xd366,0xf5fd,0xd367,0xf5fe,0xd368,0xf5fc,0xd369,
-0xd36a,0xd36b,0xd36c,0xbde2,0xd36d,0xf6a1,0xb4a5,0xd36e,
-0xd36f,0xd370,0xd371,0xf6a2,0xd372,0xd373,0xd374,0xf6a3,
-0xd375,0xd376,0xd377,0xecb2,0xd378,0xd379,0xd37a,0xd37b,
-0xd37c,0xd37d,0xd37e,0xd380,0xd381,0xd382,0xd383,0xd384,
-0xd1d4,0xd385,0xd386,0xd387,0xd388,0xd389,0xd38a,0xd9ea,
-0xd38b,0xd38c,0xd38d,0xd38e,0xd38f,0xd390,0xd391,0xd392,
-0xd393,0xd394,0xd395,0xd396,0xd397,0xd398,0xd399,0xd39a,
-0xd39b,0xd39c,0xd39d,0xd39e,0xd39f,0xd3a0,0xd440,0xd441,
-0xd442,0xd443,0xd444,0xd445,0xd446,0xd447,0xd448,0xd449,
-0xd44a,0xd44b,0xd44c,0xd44d,0xd44e,0xd44f,0xd450,0xd451,
-0xd452,0xd453,0xd454,0xd455,0xd456,0xd457,0xd458,0xd459,
-0xd45a,0xd45b,0xd45c,0xd45d,0xd45e,0xd45f,0xf6a4,0xd460,
-0xd461,0xd462,0xd463,0xd464,0xd465,0xd466,0xd467,0xd468,
-0xeeba,0xd469,0xd46a,0xd46b,0xd46c,0xd46d,0xd46e,0xd46f,
-0xd470,0xd471,0xd472,0xd473,0xd474,0xd475,0xd476,0xd477,
-0xd478,0xd479,0xd47a,0xd47b,0xd47c,0xd47d,0xd47e,0xd480,
-0xd481,0xd482,0xd483,0xd484,0xd485,0xd486,0xd487,0xd488,
-0xd489,0xd48a,0xd48b,0xd48c,0xd48d,0xd48e,0xd48f,0xd490,
-0xd491,0xd492,0xd493,0xd494,0xd495,0xd496,0xd497,0xd498,
-0xd499,0xd5b2,0xd49a,0xd49b,0xd49c,0xd49d,0xd49e,0xd49f,
-0xd4a0,0xd540,0xd541,0xd542,0xd543,0xd544,0xd545,0xd546,
-0xd547,0xd3fe,0xccdc,0xd548,0xd549,0xd54a,0xd54b,0xd54c,
-0xd54d,0xd54e,0xd54f,0xcac4,0xd550,0xd551,0xd552,0xd553,
-0xd554,0xd555,0xd556,0xd557,0xd558,0xd559,0xd55a,0xd55b,
-0xd55c,0xd55d,0xd55e,0xd55f,0xd560,0xd561,0xd562,0xd563,
-0xd564,0xd565,0xd566,0xd567,0xd568,0xd569,0xd56a,0xd56b,
-0xd56c,0xd56d,0xd56e,0xd56f,0xd570,0xd571,0xd572,0xd573,
-0xd574,0xd575,0xd576,0xd577,0xd578,0xd579,0xd57a,0xd57b,
-0xd57c,0xd57d,0xd57e,0xd580,0xd581,0xd582,0xd583,0xd584,
-0xd585,0xd586,0xd587,0xd588,0xd589,0xd58a,0xd58b,0xd58c,
-0xd58d,0xd58e,0xd58f,0xd590,0xd591,0xd592,0xd593,0xd594,
-0xd595,0xd596,0xd597,0xd598,0xd599,0xd59a,0xd59b,0xd59c,
-0xd59d,0xd59e,0xd59f,0xd5a0,0xd640,0xd641,0xd642,0xd643,
-0xd644,0xd645,0xd646,0xd647,0xd648,0xd649,0xd64a,0xd64b,
-0xd64c,0xd64d,0xd64e,0xd64f,0xd650,0xd651,0xd652,0xd653,
-0xd654,0xd655,0xd656,0xd657,0xd658,0xd659,0xd65a,0xd65b,
-0xd65c,0xd65d,0xd65e,0xd65f,0xd660,0xd661,0xd662,0xe5c0,
-0xd663,0xd664,0xd665,0xd666,0xd667,0xd668,0xd669,0xd66a,
-0xd66b,0xd66c,0xd66d,0xd66e,0xd66f,0xd670,0xd671,0xd672,
-0xd673,0xd674,0xd675,0xd676,0xd677,0xd678,0xd679,0xd67a,
-0xd67b,0xd67c,0xd67d,0xd67e,0xd680,0xd681,0xf6a5,0xd682,
-0xd683,0xd684,0xd685,0xd686,0xd687,0xd688,0xd689,0xd68a,
-0xd68b,0xd68c,0xd68d,0xd68e,0xd68f,0xd690,0xd691,0xd692,
-0xd693,0xd694,0xd695,0xd696,0xd697,0xd698,0xd699,0xd69a,
-0xd69b,0xd69c,0xd69d,0xd69e,0xd69f,0xd6a0,0xd740,0xd741,
-0xd742,0xd743,0xd744,0xd745,0xd746,0xd747,0xd748,0xd749,
-0xd74a,0xd74b,0xd74c,0xd74d,0xd74e,0xd74f,0xd750,0xd751,
-0xd752,0xd753,0xd754,0xd755,0xd756,0xd757,0xd758,0xd759,
-0xd75a,0xd75b,0xd75c,0xd75d,0xd75e,0xd75f,0xbeaf,0xd760,
-0xd761,0xd762,0xd763,0xd764,0xc6a9,0xd765,0xd766,0xd767,
-0xd768,0xd769,0xd76a,0xd76b,0xd76c,0xd76d,0xd76e,0xd76f,
-0xd770,0xd771,0xd772,0xd773,0xd774,0xd775,0xd776,0xd777,
-0xd778,0xd779,0xd77a,0xd77b,0xd77c,0xd77d,0xd77e,0xd780,
-0xd781,0xd782,0xd783,0xd784,0xd785,0xd786,0xd787,0xd788,
-0xd789,0xd78a,0xd78b,0xd78c,0xd78d,0xd78e,0xd78f,0xd790,
-0xd791,0xd792,0xd793,0xd794,0xd795,0xd796,0xd797,0xd798,
-0xdaa5,0xbcc6,0xb6a9,0xb8bc,0xc8cf,0xbca5,0xdaa6,0xdaa7,
-0xccd6,0xc8c3,0xdaa8,0xc6fd,0xd799,0xd1b5,0xd2e9,0xd1b6,
-0xbcc7,0xd79a,0xbdb2,0xbbe4,0xdaa9,0xdaaa,0xd1c8,0xdaab,
-0xd0ed,0xb6ef,0xc2db,0xd79b,0xcbcf,0xb7ed,0xc9e8,0xb7c3,
-0xbef7,0xd6a4,0xdaac,0xdaad,0xc6c0,0xd7e7,0xcab6,0xd79c,
-0xd5a9,0xcbdf,0xd5ef,0xdaae,0xd6df,0xb4ca,0xdab0,0xdaaf,
-0xd79d,0xd2eb,0xdab1,0xdab2,0xdab3,0xcad4,0xdab4,0xcaab,
-0xdab5,0xdab6,0xb3cf,0xd6ef,0xdab7,0xbbb0,0xb5ae,0xdab8,
-0xdab9,0xb9ee,0xd1af,0xd2e8,0xdaba,0xb8c3,0xcfea,0xb2ef,
-0xdabb,0xdabc,0xd79e,0xbdeb,0xcedc,0xd3ef,0xdabd,0xcef3,
-0xdabe,0xd3d5,0xbbe5,0xdabf,0xcbb5,0xcbd0,0xdac0,0xc7eb,
-0xd6ee,0xdac1,0xc5b5,0xb6c1,0xdac2,0xb7cc,0xbfce,0xdac3,
-0xdac4,0xcbad,0xdac5,0xb5f7,0xdac6,0xc1c2,0xd7bb,0xdac7,
-0xccb8,0xd79f,0xd2ea,0xc4b1,0xdac8,0xb5fd,0xbbd1,0xdac9,
-0xd0b3,0xdaca,0xdacb,0xcebd,0xdacc,0xdacd,0xdace,0xb2f7,
-0xdad1,0xdacf,0xd1e8,0xdad0,0xc3d5,0xdad2,0xd7a0,0xdad3,
-0xdad4,0xdad5,0xd0bb,0xd2a5,0xb0f9,0xdad6,0xc7ab,0xdad7,
-0xbdf7,0xc3a1,0xdad8,0xdad9,0xc3fd,0xccb7,0xdada,0xdadb,
-0xc0be,0xc6d7,0xdadc,0xdadd,0xc7b4,0xdade,0xdadf,0xb9c8,
-0xd840,0xd841,0xd842,0xd843,0xd844,0xd845,0xd846,0xd847,
-0xd848,0xbbed,0xd849,0xd84a,0xd84b,0xd84c,0xb6b9,0xf4f8,
-0xd84d,0xf4f9,0xd84e,0xd84f,0xcde3,0xd850,0xd851,0xd852,
-0xd853,0xd854,0xd855,0xd856,0xd857,0xf5b9,0xd858,0xd859,
-0xd85a,0xd85b,0xebe0,0xd85c,0xd85d,0xd85e,0xd85f,0xd860,
-0xd861,0xcff3,0xbbbf,0xd862,0xd863,0xd864,0xd865,0xd866,
-0xd867,0xd868,0xbac0,0xd4a5,0xd869,0xd86a,0xd86b,0xd86c,
-0xd86d,0xd86e,0xd86f,0xe1d9,0xd870,0xd871,0xd872,0xd873,
-0xf5f4,0xb1aa,0xb2f2,0xd874,0xd875,0xd876,0xd877,0xd878,
-0xd879,0xd87a,0xf5f5,0xd87b,0xd87c,0xf5f7,0xd87d,0xd87e,
-0xd880,0xbad1,0xf5f6,0xd881,0xc3b2,0xd882,0xd883,0xd884,
-0xd885,0xd886,0xd887,0xd888,0xf5f9,0xd889,0xd88a,0xd88b,
-0xf5f8,0xd88c,0xd88d,0xd88e,0xd88f,0xd890,0xd891,0xd892,
-0xd893,0xd894,0xd895,0xd896,0xd897,0xd898,0xd899,0xd89a,
-0xd89b,0xd89c,0xd89d,0xd89e,0xd89f,0xd8a0,0xd940,0xd941,
-0xd942,0xd943,0xd944,0xd945,0xd946,0xd947,0xd948,0xd949,
-0xd94a,0xd94b,0xd94c,0xd94d,0xd94e,0xd94f,0xd950,0xd951,
-0xd952,0xd953,0xd954,0xd955,0xd956,0xd957,0xd958,0xd959,
-0xd95a,0xd95b,0xd95c,0xd95d,0xd95e,0xd95f,0xd960,0xd961,
-0xd962,0xd963,0xd964,0xd965,0xd966,0xd967,0xd968,0xd969,
-0xd96a,0xd96b,0xd96c,0xd96d,0xd96e,0xd96f,0xd970,0xd971,
-0xd972,0xd973,0xd974,0xd975,0xd976,0xd977,0xd978,0xd979,
-0xd97a,0xd97b,0xd97c,0xd97d,0xd97e,0xd980,0xd981,0xd982,
-0xd983,0xd984,0xd985,0xd986,0xd987,0xd988,0xd989,0xd98a,
-0xd98b,0xd98c,0xd98d,0xd98e,0xd98f,0xd990,0xd991,0xd992,
-0xd993,0xd994,0xd995,0xd996,0xd997,0xd998,0xd999,0xd99a,
-0xd99b,0xd99c,0xd99d,0xd99e,0xd99f,0xd9a0,0xda40,0xda41,
-0xda42,0xda43,0xda44,0xda45,0xda46,0xda47,0xda48,0xda49,
-0xda4a,0xda4b,0xda4c,0xda4d,0xda4e,0xb1b4,0xd5ea,0xb8ba,
-0xda4f,0xb9b1,0xb2c6,0xd4f0,0xcfcd,0xb0dc,0xd5cb,0xbbf5,
-0xd6ca,0xb7b7,0xccb0,0xc6b6,0xb1e1,0xb9ba,0xd6fc,0xb9e1,
-0xb7a1,0xbcfa,0xeada,0xeadb,0xccf9,0xb9f3,0xeadc,0xb4fb,
-0xc3b3,0xb7d1,0xbad8,0xeadd,0xd4f4,0xeade,0xbcd6,0xbbdf,
-0xeadf,0xc1de,0xc2b8,0xd4df,0xd7ca,0xeae0,0xeae1,0xeae4,
-0xeae2,0xeae3,0xc9de,0xb8b3,0xb6c4,0xeae5,0xcaea,0xc9cd,
-0xb4cd,0xda50,0xda51,0xe2d9,0xc5e2,0xeae6,0xc0b5,0xda52,
-0xd7b8,0xeae7,0xd7ac,0xc8fc,0xd8d3,0xd8cd,0xd4de,0xda53,
-0xd4f9,0xc9c4,0xd3ae,0xb8d3,0xb3e0,0xda54,0xc9e2,0xf4f6,
-0xda55,0xda56,0xda57,0xbad5,0xda58,0xf4f7,0xda59,0xda5a,
-0xd7df,0xda5b,0xda5c,0xf4f1,0xb8b0,0xd5d4,0xb8cf,0xc6f0,
-0xda5d,0xda5e,0xda5f,0xda60,0xda61,0xda62,0xda63,0xda64,
-0xda65,0xb3c3,0xda66,0xda67,0xf4f2,0xb3ac,0xda68,0xda69,
-0xda6a,0xda6b,0xd4bd,0xc7f7,0xda6c,0xda6d,0xda6e,0xda6f,
-0xda70,0xf4f4,0xda71,0xda72,0xf4f3,0xda73,0xda74,0xda75,
-0xda76,0xda77,0xda78,0xda79,0xda7a,0xda7b,0xda7c,0xcccb,
-0xda7d,0xda7e,0xda80,0xc8a4,0xda81,0xda82,0xda83,0xda84,
-0xda85,0xda86,0xda87,0xda88,0xda89,0xda8a,0xda8b,0xda8c,
-0xda8d,0xf4f5,0xda8e,0xd7e3,0xc5bf,0xf5c0,0xda8f,0xda90,
-0xf5bb,0xda91,0xf5c3,0xda92,0xf5c2,0xda93,0xd6ba,0xf5c1,
-0xda94,0xda95,0xda96,0xd4be,0xf5c4,0xda97,0xf5cc,0xda98,
-0xda99,0xda9a,0xda9b,0xb0cf,0xb5f8,0xda9c,0xf5c9,0xf5ca,
-0xda9d,0xc5dc,0xda9e,0xda9f,0xdaa0,0xdb40,0xf5c5,0xf5c6,
-0xdb41,0xdb42,0xf5c7,0xf5cb,0xdb43,0xbee0,0xf5c8,0xb8fa,
-0xdb44,0xdb45,0xdb46,0xf5d0,0xf5d3,0xdb47,0xdb48,0xdb49,
-0xbfe7,0xdb4a,0xb9f2,0xf5bc,0xf5cd,0xdb4b,0xdb4c,0xc2b7,
-0xdb4d,0xdb4e,0xdb4f,0xccf8,0xdb50,0xbcf9,0xdb51,0xf5ce,
-0xf5cf,0xf5d1,0xb6e5,0xf5d2,0xdb52,0xf5d5,0xdb53,0xdb54,
-0xdb55,0xdb56,0xdb57,0xdb58,0xdb59,0xf5bd,0xdb5a,0xdb5b,
-0xdb5c,0xf5d4,0xd3bb,0xdb5d,0xb3ec,0xdb5e,0xdb5f,0xcca4,
-0xdb60,0xdb61,0xdb62,0xdb63,0xf5d6,0xdb64,0xdb65,0xdb66,
-0xdb67,0xdb68,0xdb69,0xdb6a,0xdb6b,0xf5d7,0xbee1,0xf5d8,
-0xdb6c,0xdb6d,0xccdf,0xf5db,0xdb6e,0xdb6f,0xdb70,0xdb71,
-0xdb72,0xb2c8,0xd7d9,0xdb73,0xf5d9,0xdb74,0xf5da,0xf5dc,
-0xdb75,0xf5e2,0xdb76,0xdb77,0xdb78,0xf5e0,0xdb79,0xdb7a,
-0xdb7b,0xf5df,0xf5dd,0xdb7c,0xdb7d,0xf5e1,0xdb7e,0xdb80,
-0xf5de,0xf5e4,0xf5e5,0xdb81,0xcce3,0xdb82,0xdb83,0xe5bf,
-0xb5b8,0xf5e3,0xf5e8,0xcca3,0xdb84,0xdb85,0xdb86,0xdb87,
-0xdb88,0xf5e6,0xf5e7,0xdb89,0xdb8a,0xdb8b,0xdb8c,0xdb8d,
-0xdb8e,0xf5be,0xdb8f,0xdb90,0xdb91,0xdb92,0xdb93,0xdb94,
-0xdb95,0xdb96,0xdb97,0xdb98,0xdb99,0xdb9a,0xb1c4,0xdb9b,
-0xdb9c,0xf5bf,0xdb9d,0xdb9e,0xb5c5,0xb2e4,0xdb9f,0xf5ec,
-0xf5e9,0xdba0,0xb6d7,0xdc40,0xf5ed,0xdc41,0xf5ea,0xdc42,
-0xdc43,0xdc44,0xdc45,0xdc46,0xf5eb,0xdc47,0xdc48,0xb4da,
-0xdc49,0xd4ea,0xdc4a,0xdc4b,0xdc4c,0xf5ee,0xdc4d,0xb3f9,
-0xdc4e,0xdc4f,0xdc50,0xdc51,0xdc52,0xdc53,0xdc54,0xf5ef,
-0xf5f1,0xdc55,0xdc56,0xdc57,0xf5f0,0xdc58,0xdc59,0xdc5a,
-0xdc5b,0xdc5c,0xdc5d,0xdc5e,0xf5f2,0xdc5f,0xf5f3,0xdc60,
-0xdc61,0xdc62,0xdc63,0xdc64,0xdc65,0xdc66,0xdc67,0xdc68,
-0xdc69,0xdc6a,0xdc6b,0xc9ed,0xb9aa,0xdc6c,0xdc6d,0xc7fb,
-0xdc6e,0xdc6f,0xb6e3,0xdc70,0xdc71,0xdc72,0xdc73,0xdc74,
-0xdc75,0xdc76,0xccc9,0xdc77,0xdc78,0xdc79,0xdc7a,0xdc7b,
-0xdc7c,0xdc7d,0xdc7e,0xdc80,0xdc81,0xdc82,0xdc83,0xdc84,
-0xdc85,0xdc86,0xdc87,0xdc88,0xdc89,0xdc8a,0xeaa6,0xdc8b,
-0xdc8c,0xdc8d,0xdc8e,0xdc8f,0xdc90,0xdc91,0xdc92,0xdc93,
-0xdc94,0xdc95,0xdc96,0xdc97,0xdc98,0xdc99,0xdc9a,0xdc9b,
-0xdc9c,0xdc9d,0xdc9e,0xdc9f,0xdca0,0xdd40,0xdd41,0xdd42,
-0xdd43,0xdd44,0xdd45,0xdd46,0xdd47,0xdd48,0xdd49,0xdd4a,
-0xdd4b,0xdd4c,0xdd4d,0xdd4e,0xdd4f,0xdd50,0xdd51,0xdd52,
-0xdd53,0xdd54,0xdd55,0xdd56,0xdd57,0xdd58,0xdd59,0xdd5a,
-0xdd5b,0xdd5c,0xdd5d,0xdd5e,0xdd5f,0xdd60,0xdd61,0xdd62,
-0xdd63,0xdd64,0xdd65,0xdd66,0xdd67,0xdd68,0xdd69,0xdd6a,
-0xdd6b,0xdd6c,0xdd6d,0xdd6e,0xdd6f,0xdd70,0xdd71,0xdd72,
-0xdd73,0xdd74,0xdd75,0xdd76,0xdd77,0xdd78,0xdd79,0xdd7a,
-0xdd7b,0xdd7c,0xdd7d,0xdd7e,0xdd80,0xdd81,0xdd82,0xdd83,
-0xdd84,0xdd85,0xdd86,0xdd87,0xdd88,0xdd89,0xdd8a,0xdd8b,
-0xdd8c,0xdd8d,0xdd8e,0xdd8f,0xdd90,0xdd91,0xdd92,0xdd93,
-0xdd94,0xdd95,0xdd96,0xdd97,0xdd98,0xdd99,0xdd9a,0xdd9b,
-0xdd9c,0xdd9d,0xdd9e,0xdd9f,0xdda0,0xde40,0xde41,0xde42,
-0xde43,0xde44,0xde45,0xde46,0xde47,0xde48,0xde49,0xde4a,
-0xde4b,0xde4c,0xde4d,0xde4e,0xde4f,0xde50,0xde51,0xde52,
-0xde53,0xde54,0xde55,0xde56,0xde57,0xde58,0xde59,0xde5a,
-0xde5b,0xde5c,0xde5d,0xde5e,0xde5f,0xde60,0xb3b5,0xd4fe,
-0xb9ec,0xd0f9,0xde61,0xe9ed,0xd7aa,0xe9ee,0xc2d6,0xc8ed,
-0xbae4,0xe9ef,0xe9f0,0xe9f1,0xd6e1,0xe9f2,0xe9f3,0xe9f5,
-0xe9f4,0xe9f6,0xe9f7,0xc7e1,0xe9f8,0xd4d8,0xe9f9,0xbdce,
-0xde62,0xe9fa,0xe9fb,0xbdcf,0xe9fc,0xb8a8,0xc1be,0xe9fd,
-0xb1b2,0xbbd4,0xb9f5,0xe9fe,0xde63,0xeaa1,0xeaa2,0xeaa3,
-0xb7f8,0xbcad,0xde64,0xcae4,0xe0ce,0xd4af,0xcfbd,0xd5b7,
-0xeaa4,0xd5de,0xeaa5,0xd0c1,0xb9bc,0xde65,0xb4c7,0xb1d9,
-0xde66,0xde67,0xde68,0xc0b1,0xde69,0xde6a,0xde6b,0xde6c,
-0xb1e6,0xb1e7,0xde6d,0xb1e8,0xde6e,0xde6f,0xde70,0xde71,
-0xb3bd,0xc8e8,0xde72,0xde73,0xde74,0xde75,0xe5c1,0xde76,
-0xde77,0xb1df,0xde78,0xde79,0xde7a,0xc1c9,0xb4ef,0xde7b,
-0xde7c,0xc7a8,0xd3d8,0xde7d,0xc6f9,0xd1b8,0xde7e,0xb9fd,
-0xc2f5,0xde80,0xde81,0xde82,0xde83,0xde84,0xd3ad,0xde85,
-0xd4cb,0xbdfc,0xde86,0xe5c2,0xb7b5,0xe5c3,0xde87,0xde88,
-0xbbb9,0xd5e2,0xde89,0xbdf8,0xd4b6,0xcea5,0xc1ac,0xb3d9,
-0xde8a,0xde8b,0xccf6,0xde8c,0xe5c6,0xe5c4,0xe5c8,0xde8d,
-0xe5ca,0xe5c7,0xb5cf,0xc6c8,0xde8e,0xb5fc,0xe5c5,0xde8f,
-0xcaf6,0xde90,0xde91,0xe5c9,0xde92,0xde93,0xde94,0xc3d4,
-0xb1c5,0xbca3,0xde95,0xde96,0xde97,0xd7b7,0xde98,0xde99,
-0xcdcb,0xcbcd,0xcaca,0xccd3,0xe5cc,0xe5cb,0xc4e6,0xde9a,
-0xde9b,0xd1a1,0xd1b7,0xe5cd,0xde9c,0xe5d0,0xde9d,0xcdb8,
-0xd6f0,0xe5cf,0xb5dd,0xde9e,0xcdbe,0xde9f,0xe5d1,0xb6ba,
-0xdea0,0xdf40,0xcda8,0xb9e4,0xdf41,0xcac5,0xb3d1,0xcbd9,
-0xd4ec,0xe5d2,0xb7ea,0xdf42,0xdf43,0xdf44,0xe5ce,0xdf45,
-0xdf46,0xdf47,0xdf48,0xdf49,0xdf4a,0xe5d5,0xb4fe,0xe5d6,
-0xdf4b,0xdf4c,0xdf4d,0xdf4e,0xdf4f,0xe5d3,0xe5d4,0xdf50,
-0xd2dd,0xdf51,0xdf52,0xc2df,0xb1c6,0xdf53,0xd3e2,0xdf54,
-0xdf55,0xb6dd,0xcbec,0xdf56,0xe5d7,0xdf57,0xdf58,0xd3f6,
-0xdf59,0xdf5a,0xdf5b,0xdf5c,0xdf5d,0xb1e9,0xdf5e,0xb6f4,
-0xe5da,0xe5d8,0xe5d9,0xb5c0,0xdf5f,0xdf60,0xdf61,0xd2c5,
-0xe5dc,0xdf62,0xdf63,0xe5de,0xdf64,0xdf65,0xdf66,0xdf67,
-0xdf68,0xdf69,0xe5dd,0xc7b2,0xdf6a,0xd2a3,0xdf6b,0xdf6c,
-0xe5db,0xdf6d,0xdf6e,0xdf6f,0xdf70,0xd4e2,0xd5da,0xdf71,
-0xdf72,0xdf73,0xdf74,0xdf75,0xe5e0,0xd7f1,0xdf76,0xdf77,
-0xdf78,0xdf79,0xdf7a,0xdf7b,0xdf7c,0xe5e1,0xdf7d,0xb1dc,
-0xd1fb,0xdf7e,0xe5e2,0xe5e4,0xdf80,0xdf81,0xdf82,0xdf83,
-0xe5e3,0xdf84,0xdf85,0xe5e5,0xdf86,0xdf87,0xdf88,0xdf89,
-0xdf8a,0xd2d8,0xdf8b,0xb5cb,0xdf8c,0xe7df,0xdf8d,0xdaf5,
-0xdf8e,0xdaf8,0xdf8f,0xdaf6,0xdf90,0xdaf7,0xdf91,0xdf92,
-0xdf93,0xdafa,0xd0cf,0xc4c7,0xdf94,0xdf95,0xb0ee,0xdf96,
-0xdf97,0xdf98,0xd0b0,0xdf99,0xdaf9,0xdf9a,0xd3ca,0xbaaa,
-0xdba2,0xc7f1,0xdf9b,0xdafc,0xdafb,0xc9db,0xdafd,0xdf9c,
-0xdba1,0xd7de,0xdafe,0xc1da,0xdf9d,0xdf9e,0xdba5,0xdf9f,
-0xdfa0,0xd3f4,0xe040,0xe041,0xdba7,0xdba4,0xe042,0xdba8,
-0xe043,0xe044,0xbdbc,0xe045,0xe046,0xe047,0xc0c9,0xdba3,
-0xdba6,0xd6a3,0xe048,0xdba9,0xe049,0xe04a,0xe04b,0xdbad,
-0xe04c,0xe04d,0xe04e,0xdbae,0xdbac,0xbac2,0xe04f,0xe050,
-0xe051,0xbfa4,0xdbab,0xe052,0xe053,0xe054,0xdbaa,0xd4c7,
-0xb2bf,0xe055,0xe056,0xdbaf,0xe057,0xb9f9,0xe058,0xdbb0,
-0xe059,0xe05a,0xe05b,0xe05c,0xb3bb,0xe05d,0xe05e,0xe05f,
-0xb5a6,0xe060,0xe061,0xe062,0xe063,0xb6bc,0xdbb1,0xe064,
-0xe065,0xe066,0xb6f5,0xe067,0xdbb2,0xe068,0xe069,0xe06a,
-0xe06b,0xe06c,0xe06d,0xe06e,0xe06f,0xe070,0xe071,0xe072,
-0xe073,0xe074,0xe075,0xe076,0xe077,0xe078,0xe079,0xe07a,
-0xe07b,0xb1c9,0xe07c,0xe07d,0xe07e,0xe080,0xdbb4,0xe081,
-0xe082,0xe083,0xdbb3,0xdbb5,0xe084,0xe085,0xe086,0xe087,
-0xe088,0xe089,0xe08a,0xe08b,0xe08c,0xe08d,0xe08e,0xdbb7,
-0xe08f,0xdbb6,0xe090,0xe091,0xe092,0xe093,0xe094,0xe095,
-0xe096,0xdbb8,0xe097,0xe098,0xe099,0xe09a,0xe09b,0xe09c,
-0xe09d,0xe09e,0xe09f,0xdbb9,0xe0a0,0xe140,0xdbba,0xe141,
-0xe142,0xd3cf,0xf4fa,0xc7f5,0xd7c3,0xc5e4,0xf4fc,0xf4fd,
-0xf4fb,0xe143,0xbec6,0xe144,0xe145,0xe146,0xe147,0xd0ef,
-0xe148,0xe149,0xb7d3,0xe14a,0xe14b,0xd4cd,0xccaa,0xe14c,
-0xe14d,0xf5a2,0xf5a1,0xbaa8,0xf4fe,0xcbd6,0xe14e,0xe14f,
-0xe150,0xf5a4,0xc0d2,0xe151,0xb3ea,0xe152,0xcdaa,0xf5a5,
-0xf5a3,0xbdb4,0xf5a8,0xe153,0xf5a9,0xbdcd,0xc3b8,0xbfe1,
-0xcbe1,0xf5aa,0xe154,0xe155,0xe156,0xf5a6,0xf5a7,0xc4f0,
-0xe157,0xe158,0xe159,0xe15a,0xe15b,0xf5ac,0xe15c,0xb4bc,
-0xe15d,0xd7ed,0xe15e,0xb4d7,0xf5ab,0xf5ae,0xe15f,0xe160,
-0xf5ad,0xf5af,0xd0d1,0xe161,0xe162,0xe163,0xe164,0xe165,
-0xe166,0xe167,0xc3d1,0xc8a9,0xe168,0xe169,0xe16a,0xe16b,
-0xe16c,0xe16d,0xf5b0,0xf5b1,0xe16e,0xe16f,0xe170,0xe171,
-0xe172,0xe173,0xf5b2,0xe174,0xe175,0xf5b3,0xf5b4,0xf5b5,
-0xe176,0xe177,0xe178,0xe179,0xf5b7,0xf5b6,0xe17a,0xe17b,
-0xe17c,0xe17d,0xf5b8,0xe17e,0xe180,0xe181,0xe182,0xe183,
-0xe184,0xe185,0xe186,0xe187,0xe188,0xe189,0xe18a,0xb2c9,
-0xe18b,0xd3d4,0xcacd,0xe18c,0xc0ef,0xd6d8,0xd2b0,0xc1bf,
-0xe18d,0xbdf0,0xe18e,0xe18f,0xe190,0xe191,0xe192,0xe193,
-0xe194,0xe195,0xe196,0xe197,0xb8aa,0xe198,0xe199,0xe19a,
-0xe19b,0xe19c,0xe19d,0xe19e,0xe19f,0xe1a0,0xe240,0xe241,
-0xe242,0xe243,0xe244,0xe245,0xe246,0xe247,0xe248,0xe249,
-0xe24a,0xe24b,0xe24c,0xe24d,0xe24e,0xe24f,0xe250,0xe251,
-0xe252,0xe253,0xe254,0xe255,0xe256,0xe257,0xe258,0xe259,
-0xe25a,0xe25b,0xe25c,0xe25d,0xe25e,0xe25f,0xe260,0xe261,
-0xe262,0xe263,0xe264,0xe265,0xe266,0xe267,0xe268,0xe269,
-0xe26a,0xe26b,0xe26c,0xe26d,0xe26e,0xe26f,0xe270,0xe271,
-0xe272,0xe273,0xe274,0xe275,0xe276,0xe277,0xe278,0xe279,
-0xe27a,0xe27b,0xe27c,0xe27d,0xe27e,0xe280,0xe281,0xe282,
-0xe283,0xe284,0xe285,0xe286,0xe287,0xe288,0xe289,0xe28a,
-0xe28b,0xe28c,0xe28d,0xe28e,0xe28f,0xe290,0xe291,0xe292,
-0xe293,0xe294,0xe295,0xe296,0xe297,0xe298,0xe299,0xe29a,
-0xe29b,0xe29c,0xe29d,0xe29e,0xe29f,0xe2a0,0xe340,0xe341,
-0xe342,0xe343,0xe344,0xe345,0xe346,0xe347,0xe348,0xe349,
-0xe34a,0xe34b,0xe34c,0xe34d,0xe34e,0xe34f,0xe350,0xe351,
-0xe352,0xe353,0xe354,0xe355,0xe356,0xe357,0xe358,0xe359,
-0xe35a,0xe35b,0xe35c,0xe35d,0xe35e,0xe35f,0xe360,0xe361,
-0xe362,0xe363,0xe364,0xe365,0xe366,0xe367,0xe368,0xe369,
-0xe36a,0xe36b,0xe36c,0xe36d,0xbcf8,0xe36e,0xe36f,0xe370,
-0xe371,0xe372,0xe373,0xe374,0xe375,0xe376,0xe377,0xe378,
-0xe379,0xe37a,0xe37b,0xe37c,0xe37d,0xe37e,0xe380,0xe381,
-0xe382,0xe383,0xe384,0xe385,0xe386,0xe387,0xf6c6,0xe388,
-0xe389,0xe38a,0xe38b,0xe38c,0xe38d,0xe38e,0xe38f,0xe390,
-0xe391,0xe392,0xe393,0xe394,0xe395,0xe396,0xe397,0xe398,
-0xe399,0xe39a,0xe39b,0xe39c,0xe39d,0xe39e,0xe39f,0xe3a0,
-0xe440,0xe441,0xe442,0xe443,0xe444,0xe445,0xf6c7,0xe446,
-0xe447,0xe448,0xe449,0xe44a,0xe44b,0xe44c,0xe44d,0xe44e,
-0xe44f,0xe450,0xe451,0xe452,0xe453,0xe454,0xe455,0xe456,
-0xe457,0xe458,0xe459,0xe45a,0xe45b,0xe45c,0xe45d,0xe45e,
-0xf6c8,0xe45f,0xe460,0xe461,0xe462,0xe463,0xe464,0xe465,
-0xe466,0xe467,0xe468,0xe469,0xe46a,0xe46b,0xe46c,0xe46d,
-0xe46e,0xe46f,0xe470,0xe471,0xe472,0xe473,0xe474,0xe475,
-0xe476,0xe477,0xe478,0xe479,0xe47a,0xe47b,0xe47c,0xe47d,
-0xe47e,0xe480,0xe481,0xe482,0xe483,0xe484,0xe485,0xe486,
-0xe487,0xe488,0xe489,0xe48a,0xe48b,0xe48c,0xe48d,0xe48e,
-0xe48f,0xe490,0xe491,0xe492,0xe493,0xe494,0xe495,0xe496,
-0xe497,0xe498,0xe499,0xe49a,0xe49b,0xe49c,0xe49d,0xe49e,
-0xe49f,0xe4a0,0xe540,0xe541,0xe542,0xe543,0xe544,0xe545,
-0xe546,0xe547,0xe548,0xe549,0xe54a,0xe54b,0xe54c,0xe54d,
-0xe54e,0xe54f,0xe550,0xe551,0xe552,0xe553,0xe554,0xe555,
-0xe556,0xe557,0xe558,0xe559,0xe55a,0xe55b,0xe55c,0xe55d,
-0xe55e,0xe55f,0xe560,0xe561,0xe562,0xe563,0xe564,0xe565,
-0xe566,0xe567,0xe568,0xe569,0xe56a,0xe56b,0xe56c,0xe56d,
-0xe56e,0xe56f,0xe570,0xe571,0xe572,0xe573,0xf6c9,0xe574,
-0xe575,0xe576,0xe577,0xe578,0xe579,0xe57a,0xe57b,0xe57c,
-0xe57d,0xe57e,0xe580,0xe581,0xe582,0xe583,0xe584,0xe585,
-0xe586,0xe587,0xe588,0xe589,0xe58a,0xe58b,0xe58c,0xe58d,
-0xe58e,0xe58f,0xe590,0xe591,0xe592,0xe593,0xe594,0xe595,
-0xe596,0xe597,0xe598,0xe599,0xe59a,0xe59b,0xe59c,0xe59d,
-0xe59e,0xe59f,0xf6ca,0xe5a0,0xe640,0xe641,0xe642,0xe643,
-0xe644,0xe645,0xe646,0xe647,0xe648,0xe649,0xe64a,0xe64b,
-0xe64c,0xe64d,0xe64e,0xe64f,0xe650,0xe651,0xe652,0xe653,
-0xe654,0xe655,0xe656,0xe657,0xe658,0xe659,0xe65a,0xe65b,
-0xe65c,0xe65d,0xe65e,0xe65f,0xe660,0xe661,0xe662,0xf6cc,
-0xe663,0xe664,0xe665,0xe666,0xe667,0xe668,0xe669,0xe66a,
-0xe66b,0xe66c,0xe66d,0xe66e,0xe66f,0xe670,0xe671,0xe672,
-0xe673,0xe674,0xe675,0xe676,0xe677,0xe678,0xe679,0xe67a,
-0xe67b,0xe67c,0xe67d,0xe67e,0xe680,0xe681,0xe682,0xe683,
-0xe684,0xe685,0xe686,0xe687,0xe688,0xe689,0xe68a,0xe68b,
-0xe68c,0xe68d,0xe68e,0xe68f,0xe690,0xe691,0xe692,0xe693,
-0xe694,0xe695,0xe696,0xe697,0xe698,0xe699,0xe69a,0xe69b,
-0xe69c,0xe69d,0xf6cb,0xe69e,0xe69f,0xe6a0,0xe740,0xe741,
-0xe742,0xe743,0xe744,0xe745,0xe746,0xe747,0xf7e9,0xe748,
-0xe749,0xe74a,0xe74b,0xe74c,0xe74d,0xe74e,0xe74f,0xe750,
-0xe751,0xe752,0xe753,0xe754,0xe755,0xe756,0xe757,0xe758,
-0xe759,0xe75a,0xe75b,0xe75c,0xe75d,0xe75e,0xe75f,0xe760,
-0xe761,0xe762,0xe763,0xe764,0xe765,0xe766,0xe767,0xe768,
-0xe769,0xe76a,0xe76b,0xe76c,0xe76d,0xe76e,0xe76f,0xe770,
-0xe771,0xe772,0xe773,0xe774,0xe775,0xe776,0xe777,0xe778,
-0xe779,0xe77a,0xe77b,0xe77c,0xe77d,0xe77e,0xe780,0xe781,
-0xe782,0xe783,0xe784,0xe785,0xe786,0xe787,0xe788,0xe789,
-0xe78a,0xe78b,0xe78c,0xe78d,0xe78e,0xe78f,0xe790,0xe791,
-0xe792,0xe793,0xe794,0xe795,0xe796,0xe797,0xe798,0xe799,
-0xe79a,0xe79b,0xe79c,0xe79d,0xe79e,0xe79f,0xe7a0,0xe840,
-0xe841,0xe842,0xe843,0xe844,0xe845,0xe846,0xe847,0xe848,
-0xe849,0xe84a,0xe84b,0xe84c,0xe84d,0xe84e,0xf6cd,0xe84f,
-0xe850,0xe851,0xe852,0xe853,0xe854,0xe855,0xe856,0xe857,
-0xe858,0xe859,0xe85a,0xe85b,0xe85c,0xe85d,0xe85e,0xe85f,
-0xe860,0xe861,0xe862,0xe863,0xe864,0xe865,0xe866,0xe867,
-0xe868,0xe869,0xe86a,0xe86b,0xe86c,0xe86d,0xe86e,0xe86f,
-0xe870,0xe871,0xe872,0xe873,0xe874,0xe875,0xe876,0xe877,
-0xe878,0xe879,0xe87a,0xf6ce,0xe87b,0xe87c,0xe87d,0xe87e,
-0xe880,0xe881,0xe882,0xe883,0xe884,0xe885,0xe886,0xe887,
-0xe888,0xe889,0xe88a,0xe88b,0xe88c,0xe88d,0xe88e,0xe88f,
-0xe890,0xe891,0xe892,0xe893,0xe894,0xeec4,0xeec5,0xeec6,
-0xd5eb,0xb6a4,0xeec8,0xeec7,0xeec9,0xeeca,0xc7a5,0xeecb,
-0xeecc,0xe895,0xb7b0,0xb5f6,0xeecd,0xeecf,0xe896,0xeece,
-0xe897,0xb8c6,0xeed0,0xeed1,0xeed2,0xb6db,0xb3ae,0xd6d3,
-0xc4c6,0xb1b5,0xb8d6,0xeed3,0xeed4,0xd4bf,0xc7d5,0xbefb,
-0xced9,0xb9b3,0xeed6,0xeed5,0xeed8,0xeed7,0xc5a5,0xeed9,
-0xeeda,0xc7ae,0xeedb,0xc7af,0xeedc,0xb2a7,0xeedd,0xeede,
-0xeedf,0xeee0,0xeee1,0xd7ea,0xeee2,0xeee3,0xbcd8,0xeee4,
-0xd3cb,0xccfa,0xb2ac,0xc1e5,0xeee5,0xc7a6,0xc3ad,0xe898,
-0xeee6,0xeee7,0xeee8,0xeee9,0xeeea,0xeeeb,0xeeec,0xe899,
-0xeeed,0xeeee,0xeeef,0xe89a,0xe89b,0xeef0,0xeef1,0xeef2,
-0xeef4,0xeef3,0xe89c,0xeef5,0xcdad,0xc2c1,0xeef6,0xeef7,
-0xeef8,0xd5a1,0xeef9,0xcfb3,0xeefa,0xeefb,0xe89d,0xeefc,
-0xeefd,0xefa1,0xeefe,0xefa2,0xb8f5,0xc3fa,0xefa3,0xefa4,
-0xbdc2,0xd2bf,0xb2f9,0xefa5,0xefa6,0xefa7,0xd2f8,0xefa8,
-0xd6fd,0xefa9,0xc6cc,0xe89e,0xefaa,0xefab,0xc1b4,0xefac,
-0xcffa,0xcbf8,0xefae,0xefad,0xb3fa,0xb9f8,0xefaf,0xefb0,
-0xd0e2,0xefb1,0xefb2,0xb7e6,0xd0bf,0xefb3,0xefb4,0xefb5,
-0xc8f1,0xcce0,0xefb6,0xefb7,0xefb8,0xefb9,0xefba,0xd5e0,
-0xefbb,0xb4ed,0xc3aa,0xefbc,0xe89f,0xefbd,0xefbe,0xefbf,
-0xe8a0,0xcefd,0xefc0,0xc2e0,0xb4b8,0xd7b6,0xbdf5,0xe940,
-0xcfc7,0xefc3,0xefc1,0xefc2,0xefc4,0xb6a7,0xbcfc,0xbee2,
-0xc3cc,0xefc5,0xefc6,0xe941,0xefc7,0xefcf,0xefc8,0xefc9,
-0xefca,0xc7c2,0xeff1,0xb6cd,0xefcb,0xe942,0xefcc,0xefcd,
-0xb6c6,0xc3be,0xefce,0xe943,0xefd0,0xefd1,0xefd2,0xd5f2,
-0xe944,0xefd3,0xc4f7,0xe945,0xefd4,0xc4f8,0xefd5,0xefd6,
-0xb8e4,0xb0f7,0xefd7,0xefd8,0xefd9,0xe946,0xefda,0xefdb,
-0xefdc,0xefdd,0xe947,0xefde,0xbeb5,0xefe1,0xefdf,0xefe0,
-0xe948,0xefe2,0xefe3,0xc1cd,0xefe4,0xefe5,0xefe6,0xefe7,
-0xefe8,0xefe9,0xefea,0xefeb,0xefec,0xc0d8,0xe949,0xefed,
-0xc1ad,0xefee,0xefef,0xeff0,0xe94a,0xe94b,0xcfe2,0xe94c,
-0xe94d,0xe94e,0xe94f,0xe950,0xe951,0xe952,0xe953,0xb3a4,
-0xe954,0xe955,0xe956,0xe957,0xe958,0xe959,0xe95a,0xe95b,
-0xe95c,0xe95d,0xe95e,0xe95f,0xe960,0xe961,0xe962,0xe963,
-0xe964,0xe965,0xe966,0xe967,0xe968,0xe969,0xe96a,0xe96b,
-0xe96c,0xe96d,0xe96e,0xe96f,0xe970,0xe971,0xe972,0xe973,
-0xe974,0xe975,0xe976,0xe977,0xe978,0xe979,0xe97a,0xe97b,
-0xe97c,0xe97d,0xe97e,0xe980,0xe981,0xe982,0xe983,0xe984,
-0xe985,0xe986,0xe987,0xe988,0xe989,0xe98a,0xe98b,0xe98c,
-0xe98d,0xe98e,0xe98f,0xe990,0xe991,0xe992,0xe993,0xe994,
-0xe995,0xe996,0xe997,0xe998,0xe999,0xe99a,0xe99b,0xe99c,
-0xe99d,0xe99e,0xe99f,0xe9a0,0xea40,0xea41,0xea42,0xea43,
-0xea44,0xea45,0xea46,0xea47,0xea48,0xea49,0xea4a,0xea4b,
-0xea4c,0xea4d,0xea4e,0xea4f,0xea50,0xea51,0xea52,0xea53,
-0xea54,0xea55,0xea56,0xea57,0xea58,0xea59,0xea5a,0xea5b,
-0xc3c5,0xe3c5,0xc9c1,0xe3c6,0xea5c,0xb1d5,0xceca,0xb4b3,
-0xc8f2,0xe3c7,0xcfd0,0xe3c8,0xbce4,0xe3c9,0xe3ca,0xc3c6,
-0xd5a2,0xc4d6,0xb9eb,0xcec5,0xe3cb,0xc3f6,0xe3cc,0xea5d,
-0xb7a7,0xb8f3,0xbad2,0xe3cd,0xe3ce,0xd4c4,0xe3cf,0xea5e,
-0xe3d0,0xd1cb,0xe3d1,0xe3d2,0xe3d3,0xe3d4,0xd1d6,0xe3d5,
-0xb2fb,0xc0bb,0xe3d6,0xea5f,0xc0ab,0xe3d7,0xe3d8,0xe3d9,
-0xea60,0xe3da,0xe3db,0xea61,0xb8b7,0xdae2,0xea62,0xb6d3,
-0xea63,0xdae4,0xdae3,0xea64,0xea65,0xea66,0xea67,0xea68,
-0xea69,0xea6a,0xdae6,0xea6b,0xea6c,0xea6d,0xc8ee,0xea6e,
-0xea6f,0xdae5,0xb7c0,0xd1f4,0xd2f5,0xd5f3,0xbdd7,0xea70,
-0xea71,0xea72,0xea73,0xd7e8,0xdae8,0xdae7,0xea74,0xb0a2,
-0xcdd3,0xea75,0xdae9,0xea76,0xb8bd,0xbcca,0xc2bd,0xc2a4,
-0xb3c2,0xdaea,0xea77,0xc2aa,0xc4b0,0xbdb5,0xea78,0xea79,
-0xcfde,0xea7a,0xea7b,0xea7c,0xdaeb,0xc9c2,0xea7d,0xea7e,
-0xea80,0xea81,0xea82,0xb1dd,0xea83,0xea84,0xea85,0xdaec,
-0xea86,0xb6b8,0xd4ba,0xea87,0xb3fd,0xea88,0xea89,0xdaed,
-0xd4c9,0xcfd5,0xc5e3,0xea8a,0xdaee,0xea8b,0xea8c,0xea8d,
-0xea8e,0xea8f,0xdaef,0xea90,0xdaf0,0xc1ea,0xccd5,0xcfdd,
-0xea91,0xea92,0xea93,0xea94,0xea95,0xea96,0xea97,0xea98,
-0xea99,0xea9a,0xea9b,0xea9c,0xea9d,0xd3e7,0xc2a1,0xea9e,
-0xdaf1,0xea9f,0xeaa0,0xcbe5,0xeb40,0xdaf2,0xeb41,0xcbe6,
-0xd2fe,0xeb42,0xeb43,0xeb44,0xb8f4,0xeb45,0xeb46,0xdaf3,
-0xb0af,0xcfb6,0xeb47,0xeb48,0xd5cf,0xeb49,0xeb4a,0xeb4b,
-0xeb4c,0xeb4d,0xeb4e,0xeb4f,0xeb50,0xeb51,0xeb52,0xcbed,
-0xeb53,0xeb54,0xeb55,0xeb56,0xeb57,0xeb58,0xeb59,0xeb5a,
-0xdaf4,0xeb5b,0xeb5c,0xe3c4,0xeb5d,0xeb5e,0xc1a5,0xeb5f,
-0xeb60,0xf6bf,0xeb61,0xeb62,0xf6c0,0xf6c1,0xc4d1,0xeb63,
-0xc8b8,0xd1e3,0xeb64,0xeb65,0xd0db,0xd1c5,0xbcaf,0xb9cd,
-0xeb66,0xeff4,0xeb67,0xeb68,0xb4c6,0xd3ba,0xf6c2,0xb3fb,
-0xeb69,0xeb6a,0xf6c3,0xeb6b,0xeb6c,0xb5f1,0xeb6d,0xeb6e,
-0xeb6f,0xeb70,0xeb71,0xeb72,0xeb73,0xeb74,0xeb75,0xeb76,
-0xf6c5,0xeb77,0xeb78,0xeb79,0xeb7a,0xeb7b,0xeb7c,0xeb7d,
-0xd3ea,0xf6a7,0xd1a9,0xeb7e,0xeb80,0xeb81,0xeb82,0xf6a9,
-0xeb83,0xeb84,0xeb85,0xf6a8,0xeb86,0xeb87,0xc1e3,0xc0d7,
-0xeb88,0xb1a2,0xeb89,0xeb8a,0xeb8b,0xeb8c,0xceed,0xeb8d,
-0xd0e8,0xf6ab,0xeb8e,0xeb8f,0xcff6,0xeb90,0xf6aa,0xd5f0,
-0xf6ac,0xc3b9,0xeb91,0xeb92,0xeb93,0xbbf4,0xf6ae,0xf6ad,
-0xeb94,0xeb95,0xeb96,0xc4de,0xeb97,0xeb98,0xc1d8,0xeb99,
-0xeb9a,0xeb9b,0xeb9c,0xeb9d,0xcbaa,0xeb9e,0xcfbc,0xeb9f,
-0xeba0,0xec40,0xec41,0xec42,0xec43,0xec44,0xec45,0xec46,
-0xec47,0xec48,0xf6af,0xec49,0xec4a,0xf6b0,0xec4b,0xec4c,
-0xf6b1,0xec4d,0xc2b6,0xec4e,0xec4f,0xec50,0xec51,0xec52,
-0xb0d4,0xc5f9,0xec53,0xec54,0xec55,0xec56,0xf6b2,0xec57,
-0xec58,0xec59,0xec5a,0xec5b,0xec5c,0xec5d,0xec5e,0xec5f,
-0xec60,0xec61,0xec62,0xec63,0xec64,0xec65,0xec66,0xec67,
-0xec68,0xec69,0xc7e0,0xf6a6,0xec6a,0xec6b,0xbeb8,0xec6c,
-0xec6d,0xbeb2,0xec6e,0xb5e5,0xec6f,0xec70,0xb7c7,0xec71,
-0xbfbf,0xc3d2,0xc3e6,0xec72,0xec73,0xd8cc,0xec74,0xec75,
-0xec76,0xb8ef,0xec77,0xec78,0xec79,0xec7a,0xec7b,0xec7c,
-0xec7d,0xec7e,0xec80,0xbdf9,0xd1a5,0xec81,0xb0d0,0xec82,
-0xec83,0xec84,0xec85,0xec86,0xf7b0,0xec87,0xec88,0xec89,
-0xec8a,0xec8b,0xec8c,0xec8d,0xec8e,0xf7b1,0xec8f,0xec90,
-0xec91,0xec92,0xec93,0xd0ac,0xec94,0xb0b0,0xec95,0xec96,
-0xec97,0xf7b2,0xf7b3,0xec98,0xf7b4,0xec99,0xec9a,0xec9b,
-0xc7ca,0xec9c,0xec9d,0xec9e,0xec9f,0xeca0,0xed40,0xed41,
-0xbecf,0xed42,0xed43,0xf7b7,0xed44,0xed45,0xed46,0xed47,
-0xed48,0xed49,0xed4a,0xf7b6,0xed4b,0xb1de,0xed4c,0xf7b5,
-0xed4d,0xed4e,0xf7b8,0xed4f,0xf7b9,0xed50,0xed51,0xed52,
-0xed53,0xed54,0xed55,0xed56,0xed57,0xed58,0xed59,0xed5a,
-0xed5b,0xed5c,0xed5d,0xed5e,0xed5f,0xed60,0xed61,0xed62,
-0xed63,0xed64,0xed65,0xed66,0xed67,0xed68,0xed69,0xed6a,
-0xed6b,0xed6c,0xed6d,0xed6e,0xed6f,0xed70,0xed71,0xed72,
-0xed73,0xed74,0xed75,0xed76,0xed77,0xed78,0xed79,0xed7a,
-0xed7b,0xed7c,0xed7d,0xed7e,0xed80,0xed81,0xcea4,0xc8cd,
-0xed82,0xbaab,0xe8b8,0xe8b9,0xe8ba,0xbec2,0xed83,0xed84,
-0xed85,0xed86,0xed87,0xd2f4,0xed88,0xd4cf,0xc9d8,0xed89,
-0xed8a,0xed8b,0xed8c,0xed8d,0xed8e,0xed8f,0xed90,0xed91,
-0xed92,0xed93,0xed94,0xed95,0xed96,0xed97,0xed98,0xed99,
-0xed9a,0xed9b,0xed9c,0xed9d,0xed9e,0xed9f,0xeda0,0xee40,
-0xee41,0xee42,0xee43,0xee44,0xee45,0xee46,0xee47,0xee48,
-0xee49,0xee4a,0xee4b,0xee4c,0xee4d,0xee4e,0xee4f,0xee50,
-0xee51,0xee52,0xee53,0xee54,0xee55,0xee56,0xee57,0xee58,
-0xee59,0xee5a,0xee5b,0xee5c,0xee5d,0xee5e,0xee5f,0xee60,
-0xee61,0xee62,0xee63,0xee64,0xee65,0xee66,0xee67,0xee68,
-0xee69,0xee6a,0xee6b,0xee6c,0xee6d,0xee6e,0xee6f,0xee70,
-0xee71,0xee72,0xee73,0xee74,0xee75,0xee76,0xee77,0xee78,
-0xee79,0xee7a,0xee7b,0xee7c,0xee7d,0xee7e,0xee80,0xee81,
-0xee82,0xee83,0xee84,0xee85,0xee86,0xee87,0xee88,0xee89,
-0xee8a,0xee8b,0xee8c,0xee8d,0xee8e,0xee8f,0xee90,0xee91,
-0xee92,0xee93,0xee94,0xee95,0xee96,0xee97,0xee98,0xee99,
-0xee9a,0xee9b,0xee9c,0xee9d,0xee9e,0xee9f,0xeea0,0xef40,
-0xef41,0xef42,0xef43,0xef44,0xef45,0xd2b3,0xb6a5,0xc7ea,
-0xf1fc,0xcfee,0xcbb3,0xd0eb,0xe7ef,0xcde7,0xb9cb,0xb6d9,
-0xf1fd,0xb0e4,0xcbcc,0xf1fe,0xd4a4,0xc2ad,0xc1ec,0xc6c4,
-0xbeb1,0xf2a1,0xbcd5,0xef46,0xf2a2,0xf2a3,0xef47,0xf2a4,
-0xd2c3,0xc6b5,0xef48,0xcdc7,0xf2a5,0xef49,0xd3b1,0xbfc5,
-0xcce2,0xef4a,0xf2a6,0xf2a7,0xd1d5,0xb6ee,0xf2a8,0xf2a9,
-0xb5df,0xf2aa,0xf2ab,0xef4b,0xb2fc,0xf2ac,0xf2ad,0xc8a7,
-0xef4c,0xef4d,0xef4e,0xef4f,0xef50,0xef51,0xef52,0xef53,
-0xef54,0xef55,0xef56,0xef57,0xef58,0xef59,0xef5a,0xef5b,
-0xef5c,0xef5d,0xef5e,0xef5f,0xef60,0xef61,0xef62,0xef63,
-0xef64,0xef65,0xef66,0xef67,0xef68,0xef69,0xef6a,0xef6b,
-0xef6c,0xef6d,0xef6e,0xef6f,0xef70,0xef71,0xb7e7,0xef72,
-0xef73,0xeca9,0xecaa,0xecab,0xef74,0xecac,0xef75,0xef76,
-0xc6ae,0xecad,0xecae,0xef77,0xef78,0xef79,0xb7c9,0xcab3,
-0xef7a,0xef7b,0xef7c,0xef7d,0xef7e,0xef80,0xef81,0xe2b8,
-0xf7cf,0xef82,0xef83,0xef84,0xef85,0xef86,0xef87,0xef88,
-0xef89,0xef8a,0xef8b,0xef8c,0xef8d,0xef8e,0xef8f,0xef90,
-0xef91,0xef92,0xef93,0xef94,0xef95,0xef96,0xef97,0xef98,
-0xef99,0xef9a,0xef9b,0xef9c,0xef9d,0xef9e,0xef9f,0xefa0,
-0xf040,0xf041,0xf042,0xf043,0xf044,0xf7d0,0xf045,0xf046,
-0xb2cd,0xf047,0xf048,0xf049,0xf04a,0xf04b,0xf04c,0xf04d,
-0xf04e,0xf04f,0xf050,0xf051,0xf052,0xf053,0xf054,0xf055,
-0xf056,0xf057,0xf058,0xf059,0xf05a,0xf05b,0xf05c,0xf05d,
-0xf05e,0xf05f,0xf060,0xf061,0xf062,0xf063,0xf7d1,0xf064,
-0xf065,0xf066,0xf067,0xf068,0xf069,0xf06a,0xf06b,0xf06c,
-0xf06d,0xf06e,0xf06f,0xf070,0xf071,0xf072,0xf073,0xf074,
-0xf075,0xf076,0xf077,0xf078,0xf079,0xf07a,0xf07b,0xf07c,
-0xf07d,0xf07e,0xf080,0xf081,0xf082,0xf083,0xf084,0xf085,
-0xf086,0xf087,0xf088,0xf089,0xf7d3,0xf7d2,0xf08a,0xf08b,
-0xf08c,0xf08d,0xf08e,0xf08f,0xf090,0xf091,0xf092,0xf093,
-0xf094,0xf095,0xf096,0xe2bb,0xf097,0xbca2,0xf098,0xe2bc,
-0xe2bd,0xe2be,0xe2bf,0xe2c0,0xe2c1,0xb7b9,0xd2fb,0xbda4,
-0xcace,0xb1a5,0xcbc7,0xf099,0xe2c2,0xb6fc,0xc8c4,0xe2c3,
-0xf09a,0xf09b,0xbdc8,0xf09c,0xb1fd,0xe2c4,0xf09d,0xb6f6,
-0xe2c5,0xc4d9,0xf09e,0xf09f,0xe2c6,0xcfda,0xb9dd,0xe2c7,
-0xc0a1,0xf0a0,0xe2c8,0xb2f6,0xf140,0xe2c9,0xf141,0xc1f3,
-0xe2ca,0xe2cb,0xc2f8,0xe2cc,0xe2cd,0xe2ce,0xcad7,0xd8b8,
-0xd9e5,0xcfe3,0xf142,0xf143,0xf144,0xf145,0xf146,0xf147,
-0xf148,0xf149,0xf14a,0xf14b,0xf14c,0xf0a5,0xf14d,0xf14e,
-0xdcb0,0xf14f,0xf150,0xf151,0xf152,0xf153,0xf154,0xf155,
-0xf156,0xf157,0xf158,0xf159,0xf15a,0xf15b,0xf15c,0xf15d,
-0xf15e,0xf15f,0xf160,0xf161,0xf162,0xf163,0xf164,0xf165,
-0xf166,0xf167,0xf168,0xf169,0xf16a,0xf16b,0xf16c,0xf16d,
-0xf16e,0xf16f,0xf170,0xf171,0xf172,0xf173,0xf174,0xf175,
-0xf176,0xf177,0xf178,0xf179,0xf17a,0xf17b,0xf17c,0xf17d,
-0xf17e,0xf180,0xf181,0xf182,0xf183,0xf184,0xf185,0xf186,
-0xf187,0xf188,0xf189,0xf18a,0xf18b,0xf18c,0xf18d,0xf18e,
-0xf18f,0xf190,0xf191,0xf192,0xf193,0xf194,0xf195,0xf196,
-0xf197,0xf198,0xf199,0xf19a,0xf19b,0xf19c,0xf19d,0xf19e,
-0xf19f,0xf1a0,0xf240,0xf241,0xf242,0xf243,0xf244,0xf245,
-0xf246,0xf247,0xf248,0xf249,0xf24a,0xf24b,0xf24c,0xf24d,
-0xf24e,0xf24f,0xf250,0xf251,0xf252,0xf253,0xf254,0xf255,
-0xf256,0xf257,0xf258,0xf259,0xf25a,0xf25b,0xf25c,0xf25d,
-0xf25e,0xf25f,0xf260,0xf261,0xf262,0xf263,0xf264,0xf265,
-0xf266,0xf267,0xf268,0xf269,0xf26a,0xf26b,0xf26c,0xf26d,
-0xf26e,0xf26f,0xf270,0xf271,0xf272,0xf273,0xf274,0xf275,
-0xf276,0xf277,0xf278,0xf279,0xf27a,0xf27b,0xf27c,0xf27d,
-0xf27e,0xf280,0xf281,0xf282,0xf283,0xf284,0xf285,0xf286,
-0xf287,0xf288,0xf289,0xf28a,0xf28b,0xf28c,0xf28d,0xf28e,
-0xf28f,0xf290,0xf291,0xf292,0xf293,0xf294,0xf295,0xf296,
-0xf297,0xf298,0xf299,0xf29a,0xf29b,0xf29c,0xf29d,0xf29e,
-0xf29f,0xf2a0,0xf340,0xf341,0xf342,0xf343,0xf344,0xf345,
-0xf346,0xf347,0xf348,0xf349,0xf34a,0xf34b,0xf34c,0xf34d,
-0xf34e,0xf34f,0xf350,0xf351,0xc2ed,0xd4a6,0xcdd4,0xd1b1,
-0xb3db,0xc7fd,0xf352,0xb2b5,0xc2bf,0xe6e0,0xcabb,0xe6e1,
-0xe6e2,0xbed4,0xe6e3,0xd7a4,0xcdd5,0xe6e5,0xbcdd,0xe6e4,
-0xe6e6,0xe6e7,0xc2ee,0xf353,0xbdbe,0xe6e8,0xc2e6,0xbaa7,
-0xe6e9,0xf354,0xe6ea,0xb3d2,0xd1e9,0xf355,0xf356,0xbfa5,
-0xe6eb,0xc6ef,0xe6ec,0xe6ed,0xf357,0xf358,0xe6ee,0xc6ad,
-0xe6ef,0xf359,0xc9a7,0xe6f0,0xe6f1,0xe6f2,0xe5b9,0xe6f3,
-0xe6f4,0xc2e2,0xe6f5,0xe6f6,0xd6e8,0xe6f7,0xf35a,0xe6f8,
-0xb9c7,0xf35b,0xf35c,0xf35d,0xf35e,0xf35f,0xf360,0xf361,
-0xf7bb,0xf7ba,0xf362,0xf363,0xf364,0xf365,0xf7be,0xf7bc,
-0xbaa1,0xf366,0xf7bf,0xf367,0xf7c0,0xf368,0xf369,0xf36a,
-0xf7c2,0xf7c1,0xf7c4,0xf36b,0xf36c,0xf7c3,0xf36d,0xf36e,
-0xf36f,0xf370,0xf371,0xf7c5,0xf7c6,0xf372,0xf373,0xf374,
-0xf375,0xf7c7,0xf376,0xcbe8,0xf377,0xf378,0xf379,0xf37a,
-0xb8df,0xf37b,0xf37c,0xf37d,0xf37e,0xf380,0xf381,0xf7d4,
-0xf382,0xf7d5,0xf383,0xf384,0xf385,0xf386,0xf7d6,0xf387,
-0xf388,0xf389,0xf38a,0xf7d8,0xf38b,0xf7da,0xf38c,0xf7d7,
-0xf38d,0xf38e,0xf38f,0xf390,0xf391,0xf392,0xf393,0xf394,
-0xf395,0xf7db,0xf396,0xf7d9,0xf397,0xf398,0xf399,0xf39a,
-0xf39b,0xf39c,0xf39d,0xd7d7,0xf39e,0xf39f,0xf3a0,0xf440,
-0xf7dc,0xf441,0xf442,0xf443,0xf444,0xf445,0xf446,0xf7dd,
-0xf447,0xf448,0xf449,0xf7de,0xf44a,0xf44b,0xf44c,0xf44d,
-0xf44e,0xf44f,0xf450,0xf451,0xf452,0xf453,0xf454,0xf7df,
-0xf455,0xf456,0xf457,0xf7e0,0xf458,0xf459,0xf45a,0xf45b,
-0xf45c,0xf45d,0xf45e,0xf45f,0xf460,0xf461,0xf462,0xdbcb,
-0xf463,0xf464,0xd8aa,0xf465,0xf466,0xf467,0xf468,0xf469,
-0xf46a,0xf46b,0xf46c,0xe5f7,0xb9ed,0xf46d,0xf46e,0xf46f,
-0xf470,0xbffd,0xbbea,0xf7c9,0xc6c7,0xf7c8,0xf471,0xf7ca,
-0xf7cc,0xf7cb,0xf472,0xf473,0xf474,0xf7cd,0xf475,0xceba,
-0xf476,0xf7ce,0xf477,0xf478,0xc4a7,0xf479,0xf47a,0xf47b,
-0xf47c,0xf47d,0xf47e,0xf480,0xf481,0xf482,0xf483,0xf484,
-0xf485,0xf486,0xf487,0xf488,0xf489,0xf48a,0xf48b,0xf48c,
-0xf48d,0xf48e,0xf48f,0xf490,0xf491,0xf492,0xf493,0xf494,
-0xf495,0xf496,0xf497,0xf498,0xf499,0xf49a,0xf49b,0xf49c,
-0xf49d,0xf49e,0xf49f,0xf4a0,0xf540,0xf541,0xf542,0xf543,
-0xf544,0xf545,0xf546,0xf547,0xf548,0xf549,0xf54a,0xf54b,
-0xf54c,0xf54d,0xf54e,0xf54f,0xf550,0xf551,0xf552,0xf553,
-0xf554,0xf555,0xf556,0xf557,0xf558,0xf559,0xf55a,0xf55b,
-0xf55c,0xf55d,0xf55e,0xf55f,0xf560,0xf561,0xf562,0xf563,
-0xf564,0xf565,0xf566,0xf567,0xf568,0xf569,0xf56a,0xf56b,
-0xf56c,0xf56d,0xf56e,0xf56f,0xf570,0xf571,0xf572,0xf573,
-0xf574,0xf575,0xf576,0xf577,0xf578,0xf579,0xf57a,0xf57b,
-0xf57c,0xf57d,0xf57e,0xf580,0xf581,0xf582,0xf583,0xf584,
-0xf585,0xf586,0xf587,0xf588,0xf589,0xf58a,0xf58b,0xf58c,
-0xf58d,0xf58e,0xf58f,0xf590,0xf591,0xf592,0xf593,0xf594,
-0xf595,0xf596,0xf597,0xf598,0xf599,0xf59a,0xf59b,0xf59c,
-0xf59d,0xf59e,0xf59f,0xf5a0,0xf640,0xf641,0xf642,0xf643,
-0xf644,0xf645,0xf646,0xf647,0xf648,0xf649,0xf64a,0xf64b,
-0xf64c,0xf64d,0xf64e,0xf64f,0xf650,0xf651,0xf652,0xf653,
-0xf654,0xf655,0xf656,0xf657,0xf658,0xf659,0xf65a,0xf65b,
-0xf65c,0xf65d,0xf65e,0xf65f,0xf660,0xf661,0xf662,0xf663,
-0xf664,0xf665,0xf666,0xf667,0xf668,0xf669,0xf66a,0xf66b,
-0xf66c,0xf66d,0xf66e,0xf66f,0xf670,0xf671,0xf672,0xf673,
-0xf674,0xf675,0xf676,0xf677,0xf678,0xf679,0xf67a,0xf67b,
-0xf67c,0xf67d,0xf67e,0xf680,0xf681,0xf682,0xf683,0xf684,
-0xf685,0xf686,0xf687,0xf688,0xf689,0xf68a,0xf68b,0xf68c,
-0xf68d,0xf68e,0xf68f,0xf690,0xf691,0xf692,0xf693,0xf694,
-0xf695,0xf696,0xf697,0xf698,0xf699,0xf69a,0xf69b,0xf69c,
-0xf69d,0xf69e,0xf69f,0xf6a0,0xf740,0xf741,0xf742,0xf743,
-0xf744,0xf745,0xf746,0xf747,0xf748,0xf749,0xf74a,0xf74b,
-0xf74c,0xf74d,0xf74e,0xf74f,0xf750,0xf751,0xf752,0xf753,
-0xf754,0xf755,0xf756,0xf757,0xf758,0xf759,0xf75a,0xf75b,
-0xf75c,0xf75d,0xf75e,0xf75f,0xf760,0xf761,0xf762,0xf763,
-0xf764,0xf765,0xf766,0xf767,0xf768,0xf769,0xf76a,0xf76b,
-0xf76c,0xf76d,0xf76e,0xf76f,0xf770,0xf771,0xf772,0xf773,
-0xf774,0xf775,0xf776,0xf777,0xf778,0xf779,0xf77a,0xf77b,
-0xf77c,0xf77d,0xf77e,0xf780,0xd3e3,0xf781,0xf782,0xf6cf,
-0xf783,0xc2b3,0xf6d0,0xf784,0xf785,0xf6d1,0xf6d2,0xf6d3,
-0xf6d4,0xf786,0xf787,0xf6d6,0xf788,0xb1ab,0xf6d7,0xf789,
-0xf6d8,0xf6d9,0xf6da,0xf78a,0xf6db,0xf6dc,0xf78b,0xf78c,
-0xf78d,0xf78e,0xf6dd,0xf6de,0xcfca,0xf78f,0xf6df,0xf6e0,
-0xf6e1,0xf6e2,0xf6e3,0xf6e4,0xc0f0,0xf6e5,0xf6e6,0xf6e7,
-0xf6e8,0xf6e9,0xf790,0xf6ea,0xf791,0xf6eb,0xf6ec,0xf792,
-0xf6ed,0xf6ee,0xf6ef,0xf6f0,0xf6f1,0xf6f2,0xf6f3,0xf6f4,
-0xbea8,0xf793,0xf6f5,0xf6f6,0xf6f7,0xf6f8,0xf794,0xf795,
-0xf796,0xf797,0xf798,0xc8fa,0xf6f9,0xf6fa,0xf6fb,0xf6fc,
-0xf799,0xf79a,0xf6fd,0xf6fe,0xf7a1,0xf7a2,0xf7a3,0xf7a4,
-0xf7a5,0xf79b,0xf79c,0xf7a6,0xf7a7,0xf7a8,0xb1ee,0xf7a9,
-0xf7aa,0xf7ab,0xf79d,0xf79e,0xf7ac,0xf7ad,0xc1db,0xf7ae,
-0xf79f,0xf7a0,0xf7af,0xf840,0xf841,0xf842,0xf843,0xf844,
-0xf845,0xf846,0xf847,0xf848,0xf849,0xf84a,0xf84b,0xf84c,
-0xf84d,0xf84e,0xf84f,0xf850,0xf851,0xf852,0xf853,0xf854,
-0xf855,0xf856,0xf857,0xf858,0xf859,0xf85a,0xf85b,0xf85c,
-0xf85d,0xf85e,0xf85f,0xf860,0xf861,0xf862,0xf863,0xf864,
-0xf865,0xf866,0xf867,0xf868,0xf869,0xf86a,0xf86b,0xf86c,
-0xf86d,0xf86e,0xf86f,0xf870,0xf871,0xf872,0xf873,0xf874,
-0xf875,0xf876,0xf877,0xf878,0xf879,0xf87a,0xf87b,0xf87c,
-0xf87d,0xf87e,0xf880,0xf881,0xf882,0xf883,0xf884,0xf885,
-0xf886,0xf887,0xf888,0xf889,0xf88a,0xf88b,0xf88c,0xf88d,
-0xf88e,0xf88f,0xf890,0xf891,0xf892,0xf893,0xf894,0xf895,
-0xf896,0xf897,0xf898,0xf899,0xf89a,0xf89b,0xf89c,0xf89d,
-0xf89e,0xf89f,0xf8a0,0xf940,0xf941,0xf942,0xf943,0xf944,
-0xf945,0xf946,0xf947,0xf948,0xf949,0xf94a,0xf94b,0xf94c,
-0xf94d,0xf94e,0xf94f,0xf950,0xf951,0xf952,0xf953,0xf954,
-0xf955,0xf956,0xf957,0xf958,0xf959,0xf95a,0xf95b,0xf95c,
-0xf95d,0xf95e,0xf95f,0xf960,0xf961,0xf962,0xf963,0xf964,
-0xf965,0xf966,0xf967,0xf968,0xf969,0xf96a,0xf96b,0xf96c,
-0xf96d,0xf96e,0xf96f,0xf970,0xf971,0xf972,0xf973,0xf974,
-0xf975,0xf976,0xf977,0xf978,0xf979,0xf97a,0xf97b,0xf97c,
-0xf97d,0xf97e,0xf980,0xf981,0xf982,0xf983,0xf984,0xf985,
-0xf986,0xf987,0xf988,0xf989,0xf98a,0xf98b,0xf98c,0xf98d,
-0xf98e,0xf98f,0xf990,0xf991,0xf992,0xf993,0xf994,0xf995,
-0xf996,0xf997,0xf998,0xf999,0xf99a,0xf99b,0xf99c,0xf99d,
-0xf99e,0xf99f,0xf9a0,0xfa40,0xfa41,0xfa42,0xfa43,0xfa44,
-0xfa45,0xfa46,0xfa47,0xfa48,0xfa49,0xfa4a,0xfa4b,0xfa4c,
-0xfa4d,0xfa4e,0xfa4f,0xfa50,0xfa51,0xfa52,0xfa53,0xfa54,
-0xfa55,0xfa56,0xfa57,0xfa58,0xfa59,0xfa5a,0xfa5b,0xfa5c,
-0xfa5d,0xfa5e,0xfa5f,0xfa60,0xfa61,0xfa62,0xfa63,0xfa64,
-0xfa65,0xfa66,0xfa67,0xfa68,0xfa69,0xfa6a,0xfa6b,0xfa6c,
-0xfa6d,0xfa6e,0xfa6f,0xfa70,0xfa71,0xfa72,0xfa73,0xfa74,
-0xfa75,0xfa76,0xfa77,0xfa78,0xfa79,0xfa7a,0xfa7b,0xfa7c,
-0xfa7d,0xfa7e,0xfa80,0xfa81,0xfa82,0xfa83,0xfa84,0xfa85,
-0xfa86,0xfa87,0xfa88,0xfa89,0xfa8a,0xfa8b,0xfa8c,0xfa8d,
-0xfa8e,0xfa8f,0xfa90,0xfa91,0xfa92,0xfa93,0xfa94,0xfa95,
-0xfa96,0xfa97,0xfa98,0xfa99,0xfa9a,0xfa9b,0xfa9c,0xfa9d,
-0xfa9e,0xfa9f,0xfaa0,0xfb40,0xfb41,0xfb42,0xfb43,0xfb44,
-0xfb45,0xfb46,0xfb47,0xfb48,0xfb49,0xfb4a,0xfb4b,0xfb4c,
-0xfb4d,0xfb4e,0xfb4f,0xfb50,0xfb51,0xfb52,0xfb53,0xfb54,
-0xfb55,0xfb56,0xfb57,0xfb58,0xfb59,0xfb5a,0xfb5b,0xc4f1,
-0xf0af,0xbca6,0xf0b0,0xc3f9,0xfb5c,0xc5b8,0xd1bb,0xfb5d,
-0xf0b1,0xf0b2,0xf0b3,0xf0b4,0xf0b5,0xd1bc,0xfb5e,0xd1ec,
-0xfb5f,0xf0b7,0xf0b6,0xd4a7,0xfb60,0xcdd2,0xf0b8,0xf0ba,
-0xf0b9,0xf0bb,0xf0bc,0xfb61,0xfb62,0xb8eb,0xf0bd,0xbae8,
-0xfb63,0xf0be,0xf0bf,0xbee9,0xf0c0,0xb6ec,0xf0c1,0xf0c2,
-0xf0c3,0xf0c4,0xc8b5,0xf0c5,0xf0c6,0xfb64,0xf0c7,0xc5f4,
-0xfb65,0xf0c8,0xfb66,0xfb67,0xfb68,0xf0c9,0xfb69,0xf0ca,
-0xf7bd,0xfb6a,0xf0cb,0xf0cc,0xf0cd,0xfb6b,0xf0ce,0xfb6c,
-0xfb6d,0xfb6e,0xfb6f,0xf0cf,0xbad7,0xfb70,0xf0d0,0xf0d1,
-0xf0d2,0xf0d3,0xf0d4,0xf0d5,0xf0d6,0xf0d8,0xfb71,0xfb72,
-0xd3a5,0xf0d7,0xfb73,0xf0d9,0xfb74,0xfb75,0xfb76,0xfb77,
-0xfb78,0xfb79,0xfb7a,0xfb7b,0xfb7c,0xfb7d,0xf5ba,0xc2b9,
-0xfb7e,0xfb80,0xf7e4,0xfb81,0xfb82,0xfb83,0xfb84,0xf7e5,
-0xf7e6,0xfb85,0xfb86,0xf7e7,0xfb87,0xfb88,0xfb89,0xfb8a,
-0xfb8b,0xfb8c,0xf7e8,0xc2b4,0xfb8d,0xfb8e,0xfb8f,0xfb90,
-0xfb91,0xfb92,0xfb93,0xfb94,0xfb95,0xf7ea,0xfb96,0xf7eb,
-0xfb97,0xfb98,0xfb99,0xfb9a,0xfb9b,0xfb9c,0xc2f3,0xfb9d,
-0xfb9e,0xfb9f,0xfba0,0xfc40,0xfc41,0xfc42,0xfc43,0xfc44,
-0xfc45,0xfc46,0xfc47,0xfc48,0xf4f0,0xfc49,0xfc4a,0xfc4b,
-0xf4ef,0xfc4c,0xfc4d,0xc2e9,0xfc4e,0xf7e1,0xf7e2,0xfc4f,
-0xfc50,0xfc51,0xfc52,0xfc53,0xbbc6,0xfc54,0xfc55,0xfc56,
-0xfc57,0xd9e4,0xfc58,0xfc59,0xfc5a,0xcaf2,0xc0e8,0xf0a4,
-0xfc5b,0xbada,0xfc5c,0xfc5d,0xc7ad,0xfc5e,0xfc5f,0xfc60,
-0xc4ac,0xfc61,0xfc62,0xf7ec,0xf7ed,0xf7ee,0xfc63,0xf7f0,
-0xf7ef,0xfc64,0xf7f1,0xfc65,0xfc66,0xf7f4,0xfc67,0xf7f3,
-0xfc68,0xf7f2,0xf7f5,0xfc69,0xfc6a,0xfc6b,0xfc6c,0xf7f6,
-0xfc6d,0xfc6e,0xfc6f,0xfc70,0xfc71,0xfc72,0xfc73,0xfc74,
-0xfc75,0xede9,0xfc76,0xedea,0xedeb,0xfc77,0xf6bc,0xfc78,
-0xfc79,0xfc7a,0xfc7b,0xfc7c,0xfc7d,0xfc7e,0xfc80,0xfc81,
-0xfc82,0xfc83,0xfc84,0xf6bd,0xfc85,0xf6be,0xb6a6,0xfc86,
-0xd8be,0xfc87,0xfc88,0xb9c4,0xfc89,0xfc8a,0xfc8b,0xd8bb,
-0xfc8c,0xdcb1,0xfc8d,0xfc8e,0xfc8f,0xfc90,0xfc91,0xfc92,
-0xcaf3,0xfc93,0xf7f7,0xfc94,0xfc95,0xfc96,0xfc97,0xfc98,
-0xfc99,0xfc9a,0xfc9b,0xfc9c,0xf7f8,0xfc9d,0xfc9e,0xf7f9,
-0xfc9f,0xfca0,0xfd40,0xfd41,0xfd42,0xfd43,0xfd44,0xf7fb,
-0xfd45,0xf7fa,0xfd46,0xb1c7,0xfd47,0xf7fc,0xf7fd,0xfd48,
-0xfd49,0xfd4a,0xfd4b,0xfd4c,0xf7fe,0xfd4d,0xfd4e,0xfd4f,
-0xfd50,0xfd51,0xfd52,0xfd53,0xfd54,0xfd55,0xfd56,0xfd57,
-0xc6eb,0xecb4,0xfd58,0xfd59,0xfd5a,0xfd5b,0xfd5c,0xfd5d,
-0xfd5e,0xfd5f,0xfd60,0xfd61,0xfd62,0xfd63,0xfd64,0xfd65,
-0xfd66,0xfd67,0xfd68,0xfd69,0xfd6a,0xfd6b,0xfd6c,0xfd6d,
-0xfd6e,0xfd6f,0xfd70,0xfd71,0xfd72,0xfd73,0xfd74,0xfd75,
-0xfd76,0xfd77,0xfd78,0xfd79,0xfd7a,0xfd7b,0xfd7c,0xfd7d,
-0xfd7e,0xfd80,0xfd81,0xfd82,0xfd83,0xfd84,0xfd85,0xb3dd,
-0xf6b3,0xfd86,0xfd87,0xf6b4,0xc1e4,0xf6b5,0xf6b6,0xf6b7,
-0xf6b8,0xf6b9,0xf6ba,0xc8a3,0xf6bb,0xfd88,0xfd89,0xfd8a,
-0xfd8b,0xfd8c,0xfd8d,0xfd8e,0xfd8f,0xfd90,0xfd91,0xfd92,
-0xfd93,0xc1fa,0xb9a8,0xede8,0xfd94,0xfd95,0xfd96,0xb9ea,
-0xd9df,0xfd97,0xfd98,0xfd99,0xfd9a,0xfd9b,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-}; /* 9fffh */
-static const int ucs_i_cp936_table_min = 0x4d00;
-static const int ucs_i_cp936_table_max = 0x4d00 + (sizeof (ucs_i_cp936_table) / sizeof (unsigned short));
-
-
-
-/* 0xf900 CJK Compatibility Ideographs */
-static const unsigned short ucs_ci_cp936_table[] = {
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfd9c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfd9d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfd9e,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfd9f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfda0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfa00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfe40,0xfe41,0xfe42,0xfe43,
-0x0000,0xfe44,0x0000,0xfe45,0xfe46,0x0000,0x0000,0x0000,
-0xfe47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfe48,
-0xfe49,0xfe4a,0x0000,0xfe4b,0xfe4c,0x0000,0x0000,0xfe4d,
-0xfe4e,0xfe4f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
-static const int ucs_ci_cp936_table_min = 0xf900;
-static const int ucs_ci_cp936_table_max = 0xf900 + (sizeof (ucs_ci_cp936_table) / sizeof (unsigned short));
-
-
- /* FE30h CJK Compatibility Forms */
-static const unsigned short ucs_cf_cp936_table[] = {
-0xa955,0xa6f2,0x0000,0xa6f4,0xa6f5,0xa6e0,0xa6e1,0xa6f0,
-0xa6f1,0xa6e2,0xa6e3,0xa6ee,0xa6ef,0xa6e6,0xa6e7,0xa6e4,
-0xa6e5,0xa6e8,0xa6e9,0xa6ea,0xa6eb,0x0000,0x0000,0x0000,
-0x0000,0xa968,0xa969,0xa96a,0xa96b,0xa96c,0xa96d,0xa96e};
-
-static const int ucs_cf_cp936_table_min = 0xfe30;
-static const int ucs_cf_cp936_table_max = 0xfe30 + (sizeof (ucs_cf_cp936_table) / sizeof (unsigned short));
-
-
- /* FE50h Small Form Variants */
-static const unsigned short ucs_sfv_cp936_table[] = {
-0xa96f,0xa970,0xa971,0x0000,0xa972,0xa973,0xa974,0xa975,
-0x0000,0xa976,0xa977,0xa978,0xa979,0xa97a,0xa97b,0xa97c,
-0xa97d,0xa97e,0xa980,0xa981,0xa982,0xa983,0xa984,0x0000,
-0xa985,0xa986,0xa987,0xa988,0x0000,0x0000,0x0000,0x0000};
-
-static const int ucs_sfv_cp936_table_min = 0xfe50;
-static const int ucs_sfv_cp936_table_max = 0xfe50 + (sizeof (ucs_sfv_cp936_table) / sizeof (unsigned short));
-
- /* FF00h Halfwidth and Fullwidth Forms */
-static const unsigned short ucs_hff_cp936_table[] = {
-0x0000,0xa3a1,0xa3a2,0xa3a3,0xa1e7,0xa3a5,0xa3a6,0xa3a7,
-0xa3a8,0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,
-0xa3b0,0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,
-0xa3b8,0xa3b9,0xa3ba,0xa3bb,0xa3bc,0xa3bd,0xa3be,0xa3bf,
-0xa3c0,0xa3c1,0xa3c2,0xa3c3,0xa3c4,0xa3c5,0xa3c6,0xa3c7,
-0xa3c8,0xa3c9,0xa3ca,0xa3cb,0xa3cc,0xa3cd,0xa3ce,0xa3cf,
-0xa3d0,0xa3d1,0xa3d2,0xa3d3,0xa3d4,0xa3d5,0xa3d6,0xa3d7,
-0xa3d8,0xa3d9,0xa3da,0xa3db,0xa3dc,0xa3dd,0xa3de,0xa3df,
-0xa3e0,0xa3e1,0xa3e2,0xa3e3,0xa3e4,0xa3e5,0xa3e6,0xa3e7,
-0xa3e8,0xa3e9,0xa3ea,0xa3eb,0xa3ec,0xa3ed,0xa3ee,0xa3ef,
-0xa3f0,0xa3f1,0xa3f2,0xa3f3,0xa3f4,0xa3f5,0xa3f6,0xa3f7,
-0xa3f8,0xa3f9,0xa3fa,0xa3fb,0xa3fc,0xa3fd,0xa1ab,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e9,0xa1ea,0xa956,0xa3fe,0xa957,0xa3a4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-static const int ucs_hff_cp936_table_min = 0xff00;
-static const int ucs_hff_cp936_table_max = 0xff00 + (sizeof (ucs_hff_cp936_table) / sizeof (unsigned short));
-
-
-
diff --git a/ext/mbstring/unicode_table_ja.h b/ext/mbstring/unicode_table_ja.h
deleted file mode 100644
index 961eb4731c..0000000000
--- a/ext/mbstring/unicode_table_ja.h
+++ /dev/null
@@ -1,5961 +0,0 @@
-/*
- * Unicode table
- */
-static const unsigned short jisx0208_ucs_table[] = {
- /* ku 1 */
- 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B,
- 0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E,
- 0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD,
- 0x3005,0x3006,0x3007,0x30FC,0x2015,0x2010,0xFF0F,0xFF3C,
- 0x301C,0x2016,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C,
- 0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B,
- 0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,
- 0x300F,0x3010,0x3011,0xFF0B,0x2212,0x00B1,0x00D7,0x00F7,
- 0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,0x2234,
- 0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,0xFF04,
- 0x00A2,0x00A3,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,0x00A7,
- 0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,
-
- /* ku 2 */
- 0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B,
- 0x3012,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A,
- 0x2229,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2227,0x2228,0x00AC,0x21D2,0x21D4,0x2200,0x2203,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2220,0x22A5,0x2312,0x2202,0x2207,
- 0x2261,0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x2235,
- 0x222B,0x222C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x212B,0x2030,0x266F,0x266D,0x266A,0x2020,0x2021,
- 0x00B6,0x0000,0x0000,0x0000,0x0000,0x25EF,
-
- /* ku 3 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFF10,
- 0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18,
- 0xFF19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,
- 0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,
- 0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,
- 0xFF39,0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,
- 0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,
- 0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,
- 0xFF59,0xFF5A,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 4 */
- 0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,
- 0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050,
- 0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058,
- 0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060,
- 0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068,
- 0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070,
- 0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,
- 0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080,
- 0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088,
- 0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090,
- 0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 5 */
- 0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8,
- 0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0,
- 0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8,
- 0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0,
- 0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8,
- 0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0,
- 0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8,
- 0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0,
- 0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8,
- 0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0,
- 0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 6 */
- 0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,
- 0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,
- 0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,
- 0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,
- 0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 7 */
- 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416,
- 0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,
- 0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,
- 0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,
- 0x042F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436,
- 0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,
- 0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,
- 0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,
- 0x044F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 8 */
- 0x2500,0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,0x252C,
- 0x2524,0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,0x251B,
- 0x2517,0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,0x252F,
- 0x2528,0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,0x2542,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 9 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 10 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 11 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 12 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 13 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 14 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 15 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 16 */
- 0x4E9C,0x5516,0x5A03,0x963F,0x54C0,0x611B,0x6328,0x59F6,
- 0x9022,0x8475,0x831C,0x7A50,0x60AA,0x63E1,0x6E25,0x65ED,
- 0x8466,0x82A6,0x9BF5,0x6893,0x5727,0x65A1,0x6271,0x5B9B,
- 0x59D0,0x867B,0x98F4,0x7D62,0x7DBE,0x9B8E,0x6216,0x7C9F,
- 0x88B7,0x5B89,0x5EB5,0x6309,0x6697,0x6848,0x95C7,0x978D,
- 0x674F,0x4EE5,0x4F0A,0x4F4D,0x4F9D,0x5049,0x56F2,0x5937,
- 0x59D4,0x5A01,0x5C09,0x60DF,0x610F,0x6170,0x6613,0x6905,
- 0x70BA,0x754F,0x7570,0x79FB,0x7DAD,0x7DEF,0x80C3,0x840E,
- 0x8863,0x8B02,0x9055,0x907A,0x533B,0x4E95,0x4EA5,0x57DF,
- 0x80B2,0x90C1,0x78EF,0x4E00,0x58F1,0x6EA2,0x9038,0x7A32,
- 0x8328,0x828B,0x9C2F,0x5141,0x5370,0x54BD,0x54E1,0x56E0,
- 0x59FB,0x5F15,0x98F2,0x6DEB,0x80E4,0x852D,
-
- /* ku 17 */
- 0x9662,0x9670,0x96A0,0x97FB,0x540B,0x53F3,0x5B87,0x70CF,
- 0x7FBD,0x8FC2,0x96E8,0x536F,0x9D5C,0x7ABA,0x4E11,0x7893,
- 0x81FC,0x6E26,0x5618,0x5504,0x6B1D,0x851A,0x9C3B,0x59E5,
- 0x53A9,0x6D66,0x74DC,0x958F,0x5642,0x4E91,0x904B,0x96F2,
- 0x834F,0x990C,0x53E1,0x55B6,0x5B30,0x5F71,0x6620,0x66F3,
- 0x6804,0x6C38,0x6CF3,0x6D29,0x745B,0x76C8,0x7A4E,0x9834,
- 0x82F1,0x885B,0x8A60,0x92ED,0x6DB2,0x75AB,0x76CA,0x99C5,
- 0x60A6,0x8B01,0x8D8A,0x95B2,0x698E,0x53AD,0x5186,0x5712,
- 0x5830,0x5944,0x5BB4,0x5EF6,0x6028,0x63A9,0x63F4,0x6CBF,
- 0x6F14,0x708E,0x7114,0x7159,0x71D5,0x733F,0x7E01,0x8276,
- 0x82D1,0x8597,0x9060,0x925B,0x9D1B,0x5869,0x65BC,0x6C5A,
- 0x7525,0x51F9,0x592E,0x5965,0x5F80,0x5FDC,
-
- /* ku 18 */
- 0x62BC,0x65FA,0x6A2A,0x6B27,0x6BB4,0x738B,0x7FC1,0x8956,
- 0x9D2C,0x9D0E,0x9EC4,0x5CA1,0x6C96,0x837B,0x5104,0x5C4B,
- 0x61B6,0x81C6,0x6876,0x7261,0x4E59,0x4FFA,0x5378,0x6069,
- 0x6E29,0x7A4F,0x97F3,0x4E0B,0x5316,0x4EEE,0x4F55,0x4F3D,
- 0x4FA1,0x4F73,0x52A0,0x53EF,0x5609,0x590F,0x5AC1,0x5BB6,
- 0x5BE1,0x79D1,0x6687,0x679C,0x67B6,0x6B4C,0x6CB3,0x706B,
- 0x73C2,0x798D,0x79BE,0x7A3C,0x7B87,0x82B1,0x82DB,0x8304,
- 0x8377,0x83EF,0x83D3,0x8766,0x8AB2,0x5629,0x8CA8,0x8FE6,
- 0x904E,0x971E,0x868A,0x4FC4,0x5CE8,0x6211,0x7259,0x753B,
- 0x81E5,0x82BD,0x86FE,0x8CC0,0x96C5,0x9913,0x99D5,0x4ECB,
- 0x4F1A,0x89E3,0x56DE,0x584A,0x58CA,0x5EFB,0x5FEB,0x602A,
- 0x6094,0x6062,0x61D0,0x6212,0x62D0,0x6539,
-
- /* ku 19 */
- 0x9B41,0x6666,0x68B0,0x6D77,0x7070,0x754C,0x7686,0x7D75,
- 0x82A5,0x87F9,0x958B,0x968E,0x8C9D,0x51F1,0x52BE,0x5916,
- 0x54B3,0x5BB3,0x5D16,0x6168,0x6982,0x6DAF,0x788D,0x84CB,
- 0x8857,0x8A72,0x93A7,0x9AB8,0x6D6C,0x99A8,0x86D9,0x57A3,
- 0x67FF,0x86CE,0x920E,0x5283,0x5687,0x5404,0x5ED3,0x62E1,
- 0x64B9,0x683C,0x6838,0x6BBB,0x7372,0x78BA,0x7A6B,0x899A,
- 0x89D2,0x8D6B,0x8F03,0x90ED,0x95A3,0x9694,0x9769,0x5B66,
- 0x5CB3,0x697D,0x984D,0x984E,0x639B,0x7B20,0x6A2B,0x6A7F,
- 0x68B6,0x9C0D,0x6F5F,0x5272,0x559D,0x6070,0x62EC,0x6D3B,
- 0x6E07,0x6ED1,0x845B,0x8910,0x8F44,0x4E14,0x9C39,0x53F6,
- 0x691B,0x6A3A,0x9784,0x682A,0x515C,0x7AC3,0x84B2,0x91DC,
- 0x938C,0x565B,0x9D28,0x6822,0x8305,0x8431,
-
- /* ku 20 */
- 0x7CA5,0x5208,0x82C5,0x74E6,0x4E7E,0x4F83,0x51A0,0x5BD2,
- 0x520A,0x52D8,0x52E7,0x5DFB,0x559A,0x582A,0x59E6,0x5B8C,
- 0x5B98,0x5BDB,0x5E72,0x5E79,0x60A3,0x611F,0x6163,0x61BE,
- 0x63DB,0x6562,0x67D1,0x6853,0x68FA,0x6B3E,0x6B53,0x6C57,
- 0x6F22,0x6F97,0x6F45,0x74B0,0x7518,0x76E3,0x770B,0x7AFF,
- 0x7BA1,0x7C21,0x7DE9,0x7F36,0x7FF0,0x809D,0x8266,0x839E,
- 0x89B3,0x8ACC,0x8CAB,0x9084,0x9451,0x9593,0x9591,0x95A2,
- 0x9665,0x97D3,0x9928,0x8218,0x4E38,0x542B,0x5CB8,0x5DCC,
- 0x73A9,0x764C,0x773C,0x5CA9,0x7FEB,0x8D0B,0x96C1,0x9811,
- 0x9854,0x9858,0x4F01,0x4F0E,0x5371,0x559C,0x5668,0x57FA,
- 0x5947,0x5B09,0x5BC4,0x5C90,0x5E0C,0x5E7E,0x5FCC,0x63EE,
- 0x673A,0x65D7,0x65E2,0x671F,0x68CB,0x68C4,
-
- /* ku 21 */
- 0x6A5F,0x5E30,0x6BC5,0x6C17,0x6C7D,0x757F,0x7948,0x5B63,
- 0x7A00,0x7D00,0x5FBD,0x898F,0x8A18,0x8CB4,0x8D77,0x8ECC,
- 0x8F1D,0x98E2,0x9A0E,0x9B3C,0x4E80,0x507D,0x5100,0x5993,
- 0x5B9C,0x622F,0x6280,0x64EC,0x6B3A,0x72A0,0x7591,0x7947,
- 0x7FA9,0x87FB,0x8ABC,0x8B70,0x63AC,0x83CA,0x97A0,0x5409,
- 0x5403,0x55AB,0x6854,0x6A58,0x8A70,0x7827,0x6775,0x9ECD,
- 0x5374,0x5BA2,0x811A,0x8650,0x9006,0x4E18,0x4E45,0x4EC7,
- 0x4F11,0x53CA,0x5438,0x5BAE,0x5F13,0x6025,0x6551,0x673D,
- 0x6C42,0x6C72,0x6CE3,0x7078,0x7403,0x7A76,0x7AAE,0x7B08,
- 0x7D1A,0x7CFE,0x7D66,0x65E7,0x725B,0x53BB,0x5C45,0x5DE8,
- 0x62D2,0x62E0,0x6319,0x6E20,0x865A,0x8A31,0x8DDD,0x92F8,
- 0x6F01,0x79A6,0x9B5A,0x4EA8,0x4EAB,0x4EAC,
-
- /* ku 22 */
- 0x4F9B,0x4FA0,0x50D1,0x5147,0x7AF6,0x5171,0x51F6,0x5354,
- 0x5321,0x537F,0x53EB,0x55AC,0x5883,0x5CE1,0x5F37,0x5F4A,
- 0x602F,0x6050,0x606D,0x631F,0x6559,0x6A4B,0x6CC1,0x72C2,
- 0x72ED,0x77EF,0x80F8,0x8105,0x8208,0x854E,0x90F7,0x93E1,
- 0x97FF,0x9957,0x9A5A,0x4EF0,0x51DD,0x5C2D,0x6681,0x696D,
- 0x5C40,0x66F2,0x6975,0x7389,0x6850,0x7C81,0x50C5,0x52E4,
- 0x5747,0x5DFE,0x9326,0x65A4,0x6B23,0x6B3D,0x7434,0x7981,
- 0x79BD,0x7B4B,0x7DCA,0x82B9,0x83CC,0x887F,0x895F,0x8B39,
- 0x8FD1,0x91D1,0x541F,0x9280,0x4E5D,0x5036,0x53E5,0x533A,
- 0x72D7,0x7396,0x77E9,0x82E6,0x8EAF,0x99C6,0x99C8,0x99D2,
- 0x5177,0x611A,0x865E,0x55B0,0x7A7A,0x5076,0x5BD3,0x9047,
- 0x9685,0x4E32,0x6ADB,0x91E7,0x5C51,0x5C48,
-
- /* ku 23 */
- 0x6398,0x7A9F,0x6C93,0x9774,0x8F61,0x7AAA,0x718A,0x9688,
- 0x7C82,0x6817,0x7E70,0x6851,0x936C,0x52F2,0x541B,0x85AB,
- 0x8A13,0x7FA4,0x8ECD,0x90E1,0x5366,0x8888,0x7941,0x4FC2,
- 0x50BE,0x5211,0x5144,0x5553,0x572D,0x73EA,0x578B,0x5951,
- 0x5F62,0x5F84,0x6075,0x6176,0x6167,0x61A9,0x63B2,0x643A,
- 0x656C,0x666F,0x6842,0x6E13,0x7566,0x7A3D,0x7CFB,0x7D4C,
- 0x7D99,0x7E4B,0x7F6B,0x830E,0x834A,0x86CD,0x8A08,0x8A63,
- 0x8B66,0x8EFD,0x981A,0x9D8F,0x82B8,0x8FCE,0x9BE8,0x5287,
- 0x621F,0x6483,0x6FC0,0x9699,0x6841,0x5091,0x6B20,0x6C7A,
- 0x6F54,0x7A74,0x7D50,0x8840,0x8A23,0x6708,0x4EF6,0x5039,
- 0x5026,0x5065,0x517C,0x5238,0x5263,0x55A7,0x570F,0x5805,
- 0x5ACC,0x5EFA,0x61B2,0x61F8,0x62F3,0x6372,
-
- /* ku 24 */
- 0x691C,0x6A29,0x727D,0x72AC,0x732E,0x7814,0x786F,0x7D79,
- 0x770C,0x80A9,0x898B,0x8B19,0x8CE2,0x8ED2,0x9063,0x9375,
- 0x967A,0x9855,0x9A13,0x9E78,0x5143,0x539F,0x53B3,0x5E7B,
- 0x5F26,0x6E1B,0x6E90,0x7384,0x73FE,0x7D43,0x8237,0x8A00,
- 0x8AFA,0x9650,0x4E4E,0x500B,0x53E4,0x547C,0x56FA,0x59D1,
- 0x5B64,0x5DF1,0x5EAB,0x5F27,0x6238,0x6545,0x67AF,0x6E56,
- 0x72D0,0x7CCA,0x88B4,0x80A1,0x80E1,0x83F0,0x864E,0x8A87,
- 0x8DE8,0x9237,0x96C7,0x9867,0x9F13,0x4E94,0x4E92,0x4F0D,
- 0x5348,0x5449,0x543E,0x5A2F,0x5F8C,0x5FA1,0x609F,0x68A7,
- 0x6A8E,0x745A,0x7881,0x8A9E,0x8AA4,0x8B77,0x9190,0x4E5E,
- 0x9BC9,0x4EA4,0x4F7C,0x4FAF,0x5019,0x5016,0x5149,0x516C,
- 0x529F,0x52B9,0x52FE,0x539A,0x53E3,0x5411,
-
- /* ku 25 */
- 0x540E,0x5589,0x5751,0x57A2,0x597D,0x5B54,0x5B5D,0x5B8F,
- 0x5DE5,0x5DE7,0x5DF7,0x5E78,0x5E83,0x5E9A,0x5EB7,0x5F18,
- 0x6052,0x614C,0x6297,0x62D8,0x63A7,0x653B,0x6602,0x6643,
- 0x66F4,0x676D,0x6821,0x6897,0x69CB,0x6C5F,0x6D2A,0x6D69,
- 0x6E2F,0x6E9D,0x7532,0x7687,0x786C,0x7A3F,0x7CE0,0x7D05,
- 0x7D18,0x7D5E,0x7DB1,0x8015,0x8003,0x80AF,0x80B1,0x8154,
- 0x818F,0x822A,0x8352,0x884C,0x8861,0x8B1B,0x8CA2,0x8CFC,
- 0x90CA,0x9175,0x9271,0x783F,0x92FC,0x95A4,0x964D,0x9805,
- 0x9999,0x9AD8,0x9D3B,0x525B,0x52AB,0x53F7,0x5408,0x58D5,
- 0x62F7,0x6FE0,0x8C6A,0x8F5F,0x9EB9,0x514B,0x523B,0x544A,
- 0x56FD,0x7A40,0x9177,0x9D60,0x9ED2,0x7344,0x6F09,0x8170,
- 0x7511,0x5FFD,0x60DA,0x9AA8,0x72DB,0x8FBC,
-
- /* ku 26 */
- 0x6B64,0x9803,0x4ECA,0x56F0,0x5764,0x58BE,0x5A5A,0x6068,
- 0x61C7,0x660F,0x6606,0x6839,0x68B1,0x6DF7,0x75D5,0x7D3A,
- 0x826E,0x9B42,0x4E9B,0x4F50,0x53C9,0x5506,0x5D6F,0x5DE6,
- 0x5DEE,0x67FB,0x6C99,0x7473,0x7802,0x8A50,0x9396,0x88DF,
- 0x5750,0x5EA7,0x632B,0x50B5,0x50AC,0x518D,0x6700,0x54C9,
- 0x585E,0x59BB,0x5BB0,0x5F69,0x624D,0x63A1,0x683D,0x6B73,
- 0x6E08,0x707D,0x91C7,0x7280,0x7815,0x7826,0x796D,0x658E,
- 0x7D30,0x83DC,0x88C1,0x8F09,0x969B,0x5264,0x5728,0x6750,
- 0x7F6A,0x8CA1,0x51B4,0x5742,0x962A,0x583A,0x698A,0x80B4,
- 0x54B2,0x5D0E,0x57FC,0x7895,0x9DFA,0x4F5C,0x524A,0x548B,
- 0x643E,0x6628,0x6714,0x67F5,0x7A84,0x7B56,0x7D22,0x932F,
- 0x685C,0x9BAD,0x7B39,0x5319,0x518A,0x5237,
-
- /* ku 27 */
- 0x5BDF,0x62F6,0x64AE,0x64E6,0x672D,0x6BBA,0x85A9,0x96D1,
- 0x7690,0x9BD6,0x634C,0x9306,0x9BAB,0x76BF,0x6652,0x4E09,
- 0x5098,0x53C2,0x5C71,0x60E8,0x6492,0x6563,0x685F,0x71E6,
- 0x73CA,0x7523,0x7B97,0x7E82,0x8695,0x8B83,0x8CDB,0x9178,
- 0x9910,0x65AC,0x66AB,0x6B8B,0x4ED5,0x4ED4,0x4F3A,0x4F7F,
- 0x523A,0x53F8,0x53F2,0x55E3,0x56DB,0x58EB,0x59CB,0x59C9,
- 0x59FF,0x5B50,0x5C4D,0x5E02,0x5E2B,0x5FD7,0x601D,0x6307,
- 0x652F,0x5B5C,0x65AF,0x65BD,0x65E8,0x679D,0x6B62,0x6B7B,
- 0x6C0F,0x7345,0x7949,0x79C1,0x7CF8,0x7D19,0x7D2B,0x80A2,
- 0x8102,0x81F3,0x8996,0x8A5E,0x8A69,0x8A66,0x8A8C,0x8AEE,
- 0x8CC7,0x8CDC,0x96CC,0x98FC,0x6B6F,0x4E8B,0x4F3C,0x4F8D,
- 0x5150,0x5B57,0x5BFA,0x6148,0x6301,0x6642,
-
- /* ku 28 */
- 0x6B21,0x6ECB,0x6CBB,0x723E,0x74BD,0x75D4,0x78C1,0x793A,
- 0x800C,0x8033,0x81EA,0x8494,0x8F9E,0x6C50,0x9E7F,0x5F0F,
- 0x8B58,0x9D2B,0x7AFA,0x8EF8,0x5B8D,0x96EB,0x4E03,0x53F1,
- 0x57F7,0x5931,0x5AC9,0x5BA4,0x6089,0x6E7F,0x6F06,0x75BE,
- 0x8CEA,0x5B9F,0x8500,0x7BE0,0x5072,0x67F4,0x829D,0x5C61,
- 0x854A,0x7E1E,0x820E,0x5199,0x5C04,0x6368,0x8D66,0x659C,
- 0x716E,0x793E,0x7D17,0x8005,0x8B1D,0x8ECA,0x906E,0x86C7,
- 0x90AA,0x501F,0x52FA,0x5C3A,0x6753,0x707C,0x7235,0x914C,
- 0x91C8,0x932B,0x82E5,0x5BC2,0x5F31,0x60F9,0x4E3B,0x53D6,
- 0x5B88,0x624B,0x6731,0x6B8A,0x72E9,0x73E0,0x7A2E,0x816B,
- 0x8DA3,0x9152,0x9996,0x5112,0x53D7,0x546A,0x5BFF,0x6388,
- 0x6A39,0x7DAC,0x9700,0x56DA,0x53CE,0x5468,
-
- /* ku 29 */
- 0x5B97,0x5C31,0x5DDE,0x4FEE,0x6101,0x62FE,0x6D32,0x79C0,
- 0x79CB,0x7D42,0x7E4D,0x7FD2,0x81ED,0x821F,0x8490,0x8846,
- 0x8972,0x8B90,0x8E74,0x8F2F,0x9031,0x914B,0x916C,0x96C6,
- 0x919C,0x4EC0,0x4F4F,0x5145,0x5341,0x5F93,0x620E,0x67D4,
- 0x6C41,0x6E0B,0x7363,0x7E26,0x91CD,0x9283,0x53D4,0x5919,
- 0x5BBF,0x6DD1,0x795D,0x7E2E,0x7C9B,0x587E,0x719F,0x51FA,
- 0x8853,0x8FF0,0x4FCA,0x5CFB,0x6625,0x77AC,0x7AE3,0x821C,
- 0x99FF,0x51C6,0x5FAA,0x65EC,0x696F,0x6B89,0x6DF3,0x6E96,
- 0x6F64,0x76FE,0x7D14,0x5DE1,0x9075,0x9187,0x9806,0x51E6,
- 0x521D,0x6240,0x6691,0x66D9,0x6E1A,0x5EB6,0x7DD2,0x7F72,
- 0x66F8,0x85AF,0x85F7,0x8AF8,0x52A9,0x53D9,0x5973,0x5E8F,
- 0x5F90,0x6055,0x92E4,0x9664,0x50B7,0x511F,
-
- /* ku 30 */
- 0x52DD,0x5320,0x5347,0x53EC,0x54E8,0x5546,0x5531,0x5617,
- 0x5968,0x59BE,0x5A3C,0x5BB5,0x5C06,0x5C0F,0x5C11,0x5C1A,
- 0x5E84,0x5E8A,0x5EE0,0x5F70,0x627F,0x6284,0x62DB,0x638C,
- 0x6377,0x6607,0x660C,0x662D,0x6676,0x677E,0x68A2,0x6A1F,
- 0x6A35,0x6CBC,0x6D88,0x6E09,0x6E58,0x713C,0x7126,0x7167,
- 0x75C7,0x7701,0x785D,0x7901,0x7965,0x79F0,0x7AE0,0x7B11,
- 0x7CA7,0x7D39,0x8096,0x83D6,0x848B,0x8549,0x885D,0x88F3,
- 0x8A1F,0x8A3C,0x8A54,0x8A73,0x8C61,0x8CDE,0x91A4,0x9266,
- 0x937E,0x9418,0x969C,0x9798,0x4E0A,0x4E08,0x4E1E,0x4E57,
- 0x5197,0x5270,0x57CE,0x5834,0x58CC,0x5B22,0x5E38,0x60C5,
- 0x64FE,0x6761,0x6756,0x6D44,0x72B6,0x7573,0x7A63,0x84B8,
- 0x8B72,0x91B8,0x9320,0x5631,0x57F4,0x98FE,
-
- /* ku 31 */
- 0x62ED,0x690D,0x6B96,0x71ED,0x7E54,0x8077,0x8272,0x89E6,
- 0x98DF,0x8755,0x8FB1,0x5C3B,0x4F38,0x4FE1,0x4FB5,0x5507,
- 0x5A20,0x5BDD,0x5BE9,0x5FC3,0x614E,0x632F,0x65B0,0x664B,
- 0x68EE,0x699B,0x6D78,0x6DF1,0x7533,0x75B9,0x771F,0x795E,
- 0x79E6,0x7D33,0x81E3,0x82AF,0x85AA,0x89AA,0x8A3A,0x8EAB,
- 0x8F9B,0x9032,0x91DD,0x9707,0x4EBA,0x4EC1,0x5203,0x5875,
- 0x58EC,0x5C0B,0x751A,0x5C3D,0x814E,0x8A0A,0x8FC5,0x9663,
- 0x976D,0x7B25,0x8ACF,0x9808,0x9162,0x56F3,0x53A8,0x9017,
- 0x5439,0x5782,0x5E25,0x63A8,0x6C34,0x708A,0x7761,0x7C8B,
- 0x7FE0,0x8870,0x9042,0x9154,0x9310,0x9318,0x968F,0x745E,
- 0x9AC4,0x5D07,0x5D69,0x6570,0x67A2,0x8DA8,0x96DB,0x636E,
- 0x6749,0x6919,0x83C5,0x9817,0x96C0,0x88FE,
-
- /* ku 32 */
- 0x6F84,0x647A,0x5BF8,0x4E16,0x702C,0x755D,0x662F,0x51C4,
- 0x5236,0x52E2,0x59D3,0x5F81,0x6027,0x6210,0x653F,0x6574,
- 0x661F,0x6674,0x68F2,0x6816,0x6B63,0x6E05,0x7272,0x751F,
- 0x76DB,0x7CBE,0x8056,0x58F0,0x88FD,0x897F,0x8AA0,0x8A93,
- 0x8ACB,0x901D,0x9192,0x9752,0x9759,0x6589,0x7A0E,0x8106,
- 0x96BB,0x5E2D,0x60DC,0x621A,0x65A5,0x6614,0x6790,0x77F3,
- 0x7A4D,0x7C4D,0x7E3E,0x810A,0x8CAC,0x8D64,0x8DE1,0x8E5F,
- 0x78A9,0x5207,0x62D9,0x63A5,0x6442,0x6298,0x8A2D,0x7A83,
- 0x7BC0,0x8AAC,0x96EA,0x7D76,0x820C,0x8749,0x4ED9,0x5148,
- 0x5343,0x5360,0x5BA3,0x5C02,0x5C16,0x5DDD,0x6226,0x6247,
- 0x64B0,0x6813,0x6834,0x6CC9,0x6D45,0x6D17,0x67D3,0x6F5C,
- 0x714E,0x717D,0x65CB,0x7A7F,0x7BAD,0x7DDA,
-
- /* ku 33 */
- 0x7E4A,0x7FA8,0x817A,0x821B,0x8239,0x85A6,0x8A6E,0x8CCE,
- 0x8DF5,0x9078,0x9077,0x92AD,0x9291,0x9583,0x9BAE,0x524D,
- 0x5584,0x6F38,0x7136,0x5168,0x7985,0x7E55,0x81B3,0x7CCE,
- 0x564C,0x5851,0x5CA8,0x63AA,0x66FE,0x66FD,0x695A,0x72D9,
- 0x758F,0x758E,0x790E,0x7956,0x79DF,0x7C97,0x7D20,0x7D44,
- 0x8607,0x8A34,0x963B,0x9061,0x9F20,0x50E7,0x5275,0x53CC,
- 0x53E2,0x5009,0x55AA,0x58EE,0x594F,0x723D,0x5B8B,0x5C64,
- 0x531D,0x60E3,0x60F3,0x635C,0x6383,0x633F,0x63BB,0x64CD,
- 0x65E9,0x66F9,0x5DE3,0x69CD,0x69FD,0x6F15,0x71E5,0x4E89,
- 0x75E9,0x76F8,0x7A93,0x7CDF,0x7DCF,0x7D9C,0x8061,0x8349,
- 0x8358,0x846C,0x84BC,0x85FB,0x88C5,0x8D70,0x9001,0x906D,
- 0x9397,0x971C,0x9A12,0x50CF,0x5897,0x618E,
-
- /* ku 34 */
- 0x81D3,0x8535,0x8D08,0x9020,0x4FC3,0x5074,0x5247,0x5373,
- 0x606F,0x6349,0x675F,0x6E2C,0x8DB3,0x901F,0x4FD7,0x5C5E,
- 0x8CCA,0x65CF,0x7D9A,0x5352,0x8896,0x5176,0x63C3,0x5B58,
- 0x5B6B,0x5C0A,0x640D,0x6751,0x905C,0x4ED6,0x591A,0x592A,
- 0x6C70,0x8A51,0x553E,0x5815,0x59A5,0x60F0,0x6253,0x67C1,
- 0x8235,0x6955,0x9640,0x99C4,0x9A28,0x4F53,0x5806,0x5BFE,
- 0x8010,0x5CB1,0x5E2F,0x5F85,0x6020,0x614B,0x6234,0x66FF,
- 0x6CF0,0x6EDE,0x80CE,0x817F,0x82D4,0x888B,0x8CB8,0x9000,
- 0x902E,0x968A,0x9EDB,0x9BDB,0x4EE3,0x53F0,0x5927,0x7B2C,
- 0x918D,0x984C,0x9DF9,0x6EDD,0x7027,0x5353,0x5544,0x5B85,
- 0x6258,0x629E,0x62D3,0x6CA2,0x6FEF,0x7422,0x8A17,0x9438,
- 0x6FC1,0x8AFE,0x8338,0x51E7,0x86F8,0x53EA,
-
- /* ku 35 */
- 0x53E9,0x4F46,0x9054,0x8FB0,0x596A,0x8131,0x5DFD,0x7AEA,
- 0x8FBF,0x68DA,0x8C37,0x72F8,0x9C48,0x6A3D,0x8AB0,0x4E39,
- 0x5358,0x5606,0x5766,0x62C5,0x63A2,0x65E6,0x6B4E,0x6DE1,
- 0x6E5B,0x70AD,0x77ED,0x7AEF,0x7BAA,0x7DBB,0x803D,0x80C6,
- 0x86CB,0x8A95,0x935B,0x56E3,0x58C7,0x5F3E,0x65AD,0x6696,
- 0x6A80,0x6BB5,0x7537,0x8AC7,0x5024,0x77E5,0x5730,0x5F1B,
- 0x6065,0x667A,0x6C60,0x75F4,0x7A1A,0x7F6E,0x81F4,0x8718,
- 0x9045,0x99B3,0x7BC9,0x755C,0x7AF9,0x7B51,0x84C4,0x9010,
- 0x79E9,0x7A92,0x8336,0x5AE1,0x7740,0x4E2D,0x4EF2,0x5B99,
- 0x5FE0,0x62BD,0x663C,0x67F1,0x6CE8,0x866B,0x8877,0x8A3B,
- 0x914E,0x92F3,0x99D0,0x6A17,0x7026,0x732A,0x82E7,0x8457,
- 0x8CAF,0x4E01,0x5146,0x51CB,0x558B,0x5BF5,
-
- /* ku 36 */
- 0x5E16,0x5E33,0x5E81,0x5F14,0x5F35,0x5F6B,0x5FB4,0x61F2,
- 0x6311,0x66A2,0x671D,0x6F6E,0x7252,0x753A,0x773A,0x8074,
- 0x8139,0x8178,0x8776,0x8ABF,0x8ADC,0x8D85,0x8DF3,0x929A,
- 0x9577,0x9802,0x9CE5,0x52C5,0x6357,0x76F4,0x6715,0x6C88,
- 0x73CD,0x8CC3,0x93AE,0x9673,0x6D25,0x589C,0x690E,0x69CC,
- 0x8FFD,0x939A,0x75DB,0x901A,0x585A,0x6802,0x63B4,0x69FB,
- 0x4F43,0x6F2C,0x67D8,0x8FBB,0x8526,0x7DB4,0x9354,0x693F,
- 0x6F70,0x576A,0x58F7,0x5B2C,0x7D2C,0x722A,0x540A,0x91E3,
- 0x9DB4,0x4EAD,0x4F4E,0x505C,0x5075,0x5243,0x8C9E,0x5448,
- 0x5824,0x5B9A,0x5E1D,0x5E95,0x5EAD,0x5EF7,0x5F1F,0x608C,
- 0x62B5,0x633A,0x63D0,0x68AF,0x6C40,0x7887,0x798E,0x7A0B,
- 0x7DE0,0x8247,0x8A02,0x8AE6,0x8E44,0x9013,
-
- /* ku 37 */
- 0x90B8,0x912D,0x91D8,0x9F0E,0x6CE5,0x6458,0x64E2,0x6575,
- 0x6EF4,0x7684,0x7B1B,0x9069,0x93D1,0x6EBA,0x54F2,0x5FB9,
- 0x64A4,0x8F4D,0x8FED,0x9244,0x5178,0x586B,0x5929,0x5C55,
- 0x5E97,0x6DFB,0x7E8F,0x751C,0x8CBC,0x8EE2,0x985B,0x70B9,
- 0x4F1D,0x6BBF,0x6FB1,0x7530,0x96FB,0x514E,0x5410,0x5835,
- 0x5857,0x59AC,0x5C60,0x5F92,0x6597,0x675C,0x6E21,0x767B,
- 0x83DF,0x8CED,0x9014,0x90FD,0x934D,0x7825,0x783A,0x52AA,
- 0x5EA6,0x571F,0x5974,0x6012,0x5012,0x515A,0x51AC,0x51CD,
- 0x5200,0x5510,0x5854,0x5858,0x5957,0x5B95,0x5CF6,0x5D8B,
- 0x60BC,0x6295,0x642D,0x6771,0x6843,0x68BC,0x68DF,0x76D7,
- 0x6DD8,0x6E6F,0x6D9B,0x706F,0x71C8,0x5F53,0x75D8,0x7977,
- 0x7B49,0x7B54,0x7B52,0x7CD6,0x7D71,0x5230,
-
- /* ku 38 */
- 0x8463,0x8569,0x85E4,0x8A0E,0x8B04,0x8C46,0x8E0F,0x9003,
- 0x900F,0x9419,0x9676,0x982D,0x9A30,0x95D8,0x50CD,0x52D5,
- 0x540C,0x5802,0x5C0E,0x61A7,0x649E,0x6D1E,0x77B3,0x7AE5,
- 0x80F4,0x8404,0x9053,0x9285,0x5CE0,0x9D07,0x533F,0x5F97,
- 0x5FB3,0x6D9C,0x7279,0x7763,0x79BF,0x7BE4,0x6BD2,0x72EC,
- 0x8AAD,0x6803,0x6A61,0x51F8,0x7A81,0x6934,0x5C4A,0x9CF6,
- 0x82EB,0x5BC5,0x9149,0x701E,0x5678,0x5C6F,0x60C7,0x6566,
- 0x6C8C,0x8C5A,0x9041,0x9813,0x5451,0x66C7,0x920D,0x5948,
- 0x90A3,0x5185,0x4E4D,0x51EA,0x8599,0x8B0E,0x7058,0x637A,
- 0x934B,0x6962,0x99B4,0x7E04,0x7577,0x5357,0x6960,0x8EDF,
- 0x96E3,0x6C5D,0x4E8C,0x5C3C,0x5F10,0x8FE9,0x5302,0x8CD1,
- 0x8089,0x8679,0x5EFF,0x65E5,0x4E73,0x5165,
-
- /* ku 39 */
- 0x5982,0x5C3F,0x97EE,0x4EFB,0x598A,0x5FCD,0x8A8D,0x6FE1,
- 0x79B0,0x7962,0x5BE7,0x8471,0x732B,0x71B1,0x5E74,0x5FF5,
- 0x637B,0x649A,0x71C3,0x7C98,0x4E43,0x5EFC,0x4E4B,0x57DC,
- 0x56A2,0x60A9,0x6FC3,0x7D0D,0x80FD,0x8133,0x81BF,0x8FB2,
- 0x8997,0x86A4,0x5DF4,0x628A,0x64AD,0x8987,0x6777,0x6CE2,
- 0x6D3E,0x7436,0x7834,0x5A46,0x7F75,0x82AD,0x99AC,0x4FF3,
- 0x5EC3,0x62DD,0x6392,0x6557,0x676F,0x76C3,0x724C,0x80CC,
- 0x80BA,0x8F29,0x914D,0x500D,0x57F9,0x5A92,0x6885,0x6973,
- 0x7164,0x72FD,0x8CB7,0x58F2,0x8CE0,0x966A,0x9019,0x877F,
- 0x79E4,0x77E7,0x8429,0x4F2F,0x5265,0x535A,0x62CD,0x67CF,
- 0x6CCA,0x767D,0x7B94,0x7C95,0x8236,0x8584,0x8FEB,0x66DD,
- 0x6F20,0x7206,0x7E1B,0x83AB,0x99C1,0x9EA6,
-
- /* ku 40 */
- 0x51FD,0x7BB1,0x7872,0x7BB8,0x8087,0x7B48,0x6AE8,0x5E61,
- 0x808C,0x7551,0x7560,0x516B,0x9262,0x6E8C,0x767A,0x9197,
- 0x9AEA,0x4F10,0x7F70,0x629C,0x7B4F,0x95A5,0x9CE9,0x567A,
- 0x5859,0x86E4,0x96BC,0x4F34,0x5224,0x534A,0x53CD,0x53DB,
- 0x5E06,0x642C,0x6591,0x677F,0x6C3E,0x6C4E,0x7248,0x72AF,
- 0x73ED,0x7554,0x7E41,0x822C,0x85E9,0x8CA9,0x7BC4,0x91C6,
- 0x7169,0x9812,0x98EF,0x633D,0x6669,0x756A,0x76E4,0x78D0,
- 0x8543,0x86EE,0x532A,0x5351,0x5426,0x5983,0x5E87,0x5F7C,
- 0x60B2,0x6249,0x6279,0x62AB,0x6590,0x6BD4,0x6CCC,0x75B2,
- 0x76AE,0x7891,0x79D8,0x7DCB,0x7F77,0x80A5,0x88AB,0x8AB9,
- 0x8CBB,0x907F,0x975E,0x98DB,0x6A0B,0x7C38,0x5099,0x5C3E,
- 0x5FAE,0x6787,0x6BD8,0x7435,0x7709,0x7F8E,
-
- /* ku 41 */
- 0x9F3B,0x67CA,0x7A17,0x5339,0x758B,0x9AED,0x5F66,0x819D,
- 0x83F1,0x8098,0x5F3C,0x5FC5,0x7562,0x7B46,0x903C,0x6867,
- 0x59EB,0x5A9B,0x7D10,0x767E,0x8B2C,0x4FF5,0x5F6A,0x6A19,
- 0x6C37,0x6F02,0x74E2,0x7968,0x8868,0x8A55,0x8C79,0x5EDF,
- 0x63CF,0x75C5,0x79D2,0x82D7,0x9328,0x92F2,0x849C,0x86ED,
- 0x9C2D,0x54C1,0x5F6C,0x658C,0x6D5C,0x7015,0x8CA7,0x8CD3,
- 0x983B,0x654F,0x74F6,0x4E0D,0x4ED8,0x57E0,0x592B,0x5A66,
- 0x5BCC,0x51A8,0x5E03,0x5E9C,0x6016,0x6276,0x6577,0x65A7,
- 0x666E,0x6D6E,0x7236,0x7B26,0x8150,0x819A,0x8299,0x8B5C,
- 0x8CA0,0x8CE6,0x8D74,0x961C,0x9644,0x4FAE,0x64AB,0x6B66,
- 0x821E,0x8461,0x856A,0x90E8,0x5C01,0x6953,0x98A8,0x847A,
- 0x8557,0x4F0F,0x526F,0x5FA9,0x5E45,0x670D,
-
- /* ku 42 */
- 0x798F,0x8179,0x8907,0x8986,0x6DF5,0x5F17,0x6255,0x6CB8,
- 0x4ECF,0x7269,0x9B92,0x5206,0x543B,0x5674,0x58B3,0x61A4,
- 0x626E,0x711A,0x596E,0x7C89,0x7CDE,0x7D1B,0x96F0,0x6587,
- 0x805E,0x4E19,0x4F75,0x5175,0x5840,0x5E63,0x5E73,0x5F0A,
- 0x67C4,0x4E26,0x853D,0x9589,0x965B,0x7C73,0x9801,0x50FB,
- 0x58C1,0x7656,0x78A7,0x5225,0x77A5,0x8511,0x7B86,0x504F,
- 0x5909,0x7247,0x7BC7,0x7DE8,0x8FBA,0x8FD4,0x904D,0x4FBF,
- 0x52C9,0x5A29,0x5F01,0x97AD,0x4FDD,0x8217,0x92EA,0x5703,
- 0x6355,0x6B69,0x752B,0x88DC,0x8F14,0x7A42,0x52DF,0x5893,
- 0x6155,0x620A,0x66AE,0x6BCD,0x7C3F,0x83E9,0x5023,0x4FF8,
- 0x5305,0x5446,0x5831,0x5949,0x5B9D,0x5CF0,0x5CEF,0x5D29,
- 0x5E96,0x62B1,0x6367,0x653E,0x65B9,0x670B,
-
- /* ku 43 */
- 0x6CD5,0x6CE1,0x70F9,0x7832,0x7E2B,0x80DE,0x82B3,0x840C,
- 0x84EC,0x8702,0x8912,0x8A2A,0x8C4A,0x90A6,0x92D2,0x98FD,
- 0x9CF3,0x9D6C,0x4E4F,0x4EA1,0x508D,0x5256,0x574A,0x59A8,
- 0x5E3D,0x5FD8,0x5FD9,0x623F,0x66B4,0x671B,0x67D0,0x68D2,
- 0x5192,0x7D21,0x80AA,0x81A8,0x8B00,0x8C8C,0x8CBF,0x927E,
- 0x9632,0x5420,0x982C,0x5317,0x50D5,0x535C,0x58A8,0x64B2,
- 0x6734,0x7267,0x7766,0x7A46,0x91E6,0x52C3,0x6CA1,0x6B86,
- 0x5800,0x5E4C,0x5954,0x672C,0x7FFB,0x51E1,0x76C6,0x6469,
- 0x78E8,0x9B54,0x9EBB,0x57CB,0x59B9,0x6627,0x679A,0x6BCE,
- 0x54E9,0x69D9,0x5E55,0x819C,0x6795,0x9BAA,0x67FE,0x9C52,
- 0x685D,0x4EA6,0x4FE3,0x53C8,0x62B9,0x672B,0x6CAB,0x8FC4,
- 0x4FAD,0x7E6D,0x9EBF,0x4E07,0x6162,0x6E80,
-
- /* ku 44 */
- 0x6F2B,0x8513,0x5473,0x672A,0x9B45,0x5DF3,0x7B95,0x5CAC,
- 0x5BC6,0x871C,0x6E4A,0x84D1,0x7A14,0x8108,0x5999,0x7C8D,
- 0x6C11,0x7720,0x52D9,0x5922,0x7121,0x725F,0x77DB,0x9727,
- 0x9D61,0x690B,0x5A7F,0x5A18,0x51A5,0x540D,0x547D,0x660E,
- 0x76DF,0x8FF7,0x9298,0x9CF4,0x59EA,0x725D,0x6EC5,0x514D,
- 0x68C9,0x7DBF,0x7DEC,0x9762,0x9EBA,0x6478,0x6A21,0x8302,
- 0x5984,0x5B5F,0x6BDB,0x731B,0x76F2,0x7DB2,0x8017,0x8499,
- 0x5132,0x6728,0x9ED9,0x76EE,0x6762,0x52FF,0x9905,0x5C24,
- 0x623B,0x7C7E,0x8CB0,0x554F,0x60B6,0x7D0B,0x9580,0x5301,
- 0x4E5F,0x51B6,0x591C,0x723A,0x8036,0x91CE,0x5F25,0x77E2,
- 0x5384,0x5F79,0x7D04,0x85AC,0x8A33,0x8E8D,0x9756,0x67F3,
- 0x85AE,0x9453,0x6109,0x6108,0x6CB9,0x7652,
-
- /* ku 45 */
- 0x8AED,0x8F38,0x552F,0x4F51,0x512A,0x52C7,0x53CB,0x5BA5,
- 0x5E7D,0x60A0,0x6182,0x63D6,0x6709,0x67DA,0x6E67,0x6D8C,
- 0x7336,0x7337,0x7531,0x7950,0x88D5,0x8A98,0x904A,0x9091,
- 0x90F5,0x96C4,0x878D,0x5915,0x4E88,0x4F59,0x4E0E,0x8A89,
- 0x8F3F,0x9810,0x50AD,0x5E7C,0x5996,0x5BB9,0x5EB8,0x63DA,
- 0x63FA,0x64C1,0x66DC,0x694A,0x69D8,0x6D0B,0x6EB6,0x7194,
- 0x7528,0x7AAF,0x7F8A,0x8000,0x8449,0x84C9,0x8981,0x8B21,
- 0x8E0A,0x9065,0x967D,0x990A,0x617E,0x6291,0x6B32,0x6C83,
- 0x6D74,0x7FCC,0x7FFC,0x6DC0,0x7F85,0x87BA,0x88F8,0x6765,
- 0x83B1,0x983C,0x96F7,0x6D1B,0x7D61,0x843D,0x916A,0x4E71,
- 0x5375,0x5D50,0x6B04,0x6FEB,0x85CD,0x862D,0x89A7,0x5229,
- 0x540F,0x5C65,0x674E,0x68A8,0x7406,0x7483,
-
- /* ku 46 */
- 0x75E2,0x88CF,0x88E1,0x91CC,0x96E2,0x9678,0x5F8B,0x7387,
- 0x7ACB,0x844E,0x63A0,0x7565,0x5289,0x6D41,0x6E9C,0x7409,
- 0x7559,0x786B,0x7C92,0x9686,0x7ADC,0x9F8D,0x4FB6,0x616E,
- 0x65C5,0x865C,0x4E86,0x4EAE,0x50DA,0x4E21,0x51CC,0x5BEE,
- 0x6599,0x6881,0x6DBC,0x731F,0x7642,0x77AD,0x7A1C,0x7CE7,
- 0x826F,0x8AD2,0x907C,0x91CF,0x9675,0x9818,0x529B,0x7DD1,
- 0x502B,0x5398,0x6797,0x6DCB,0x71D0,0x7433,0x81E8,0x8F2A,
- 0x96A3,0x9C57,0x9E9F,0x7460,0x5841,0x6D99,0x7D2F,0x985E,
- 0x4EE4,0x4F36,0x4F8B,0x51B7,0x52B1,0x5DBA,0x601C,0x73B2,
- 0x793C,0x82D3,0x9234,0x96B7,0x96F6,0x970A,0x9E97,0x9F62,
- 0x66A6,0x6B74,0x5217,0x52A3,0x70C8,0x88C2,0x5EC9,0x604B,
- 0x6190,0x6F23,0x7149,0x7C3E,0x7DF4,0x806F,
-
- /* ku 47 */
- 0x84EE,0x9023,0x932C,0x5442,0x9B6F,0x6AD3,0x7089,0x8CC2,
- 0x8DEF,0x9732,0x52B4,0x5A41,0x5ECA,0x5F04,0x6717,0x697C,
- 0x6994,0x6D6A,0x6F0F,0x7262,0x72FC,0x7BED,0x8001,0x807E,
- 0x874B,0x90CE,0x516D,0x9E93,0x7984,0x808B,0x9332,0x8AD6,
- 0x502D,0x548C,0x8A71,0x6B6A,0x8CC4,0x8107,0x60D1,0x67A0,
- 0x9DF2,0x4E99,0x4E98,0x9C10,0x8A6B,0x85C1,0x8568,0x6900,
- 0x6E7E,0x7897,0x8155,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 48 */
- 0x5F0C,0x4E10,0x4E15,0x4E2A,0x4E31,0x4E36,0x4E3C,0x4E3F,
- 0x4E42,0x4E56,0x4E58,0x4E82,0x4E85,0x8C6B,0x4E8A,0x8212,
- 0x5F0D,0x4E8E,0x4E9E,0x4E9F,0x4EA0,0x4EA2,0x4EB0,0x4EB3,
- 0x4EB6,0x4ECE,0x4ECD,0x4EC4,0x4EC6,0x4EC2,0x4ED7,0x4EDE,
- 0x4EED,0x4EDF,0x4EF7,0x4F09,0x4F5A,0x4F30,0x4F5B,0x4F5D,
- 0x4F57,0x4F47,0x4F76,0x4F88,0x4F8F,0x4F98,0x4F7B,0x4F69,
- 0x4F70,0x4F91,0x4F6F,0x4F86,0x4F96,0x5118,0x4FD4,0x4FDF,
- 0x4FCE,0x4FD8,0x4FDB,0x4FD1,0x4FDA,0x4FD0,0x4FE4,0x4FE5,
- 0x501A,0x5028,0x5014,0x502A,0x5025,0x5005,0x4F1C,0x4FF6,
- 0x5021,0x5029,0x502C,0x4FFE,0x4FEF,0x5011,0x5006,0x5043,
- 0x5047,0x6703,0x5055,0x5050,0x5048,0x505A,0x5056,0x506C,
- 0x5078,0x5080,0x509A,0x5085,0x50B4,0x50B2,
-
- /* ku 49 */
- 0x50C9,0x50CA,0x50B3,0x50C2,0x50D6,0x50DE,0x50E5,0x50ED,
- 0x50E3,0x50EE,0x50F9,0x50F5,0x5109,0x5101,0x5102,0x5116,
- 0x5115,0x5114,0x511A,0x5121,0x513A,0x5137,0x513C,0x513B,
- 0x513F,0x5140,0x5152,0x514C,0x5154,0x5162,0x7AF8,0x5169,
- 0x516A,0x516E,0x5180,0x5182,0x56D8,0x518C,0x5189,0x518F,
- 0x5191,0x5193,0x5195,0x5196,0x51A4,0x51A6,0x51A2,0x51A9,
- 0x51AA,0x51AB,0x51B3,0x51B1,0x51B2,0x51B0,0x51B5,0x51BD,
- 0x51C5,0x51C9,0x51DB,0x51E0,0x8655,0x51E9,0x51ED,0x51F0,
- 0x51F5,0x51FE,0x5204,0x520B,0x5214,0x520E,0x5227,0x522A,
- 0x522E,0x5233,0x5239,0x524F,0x5244,0x524B,0x524C,0x525E,
- 0x5254,0x526A,0x5274,0x5269,0x5273,0x527F,0x527D,0x528D,
- 0x5294,0x5292,0x5271,0x5288,0x5291,0x8FA8,
-
- /* ku 50 */
- 0x8FA7,0x52AC,0x52AD,0x52BC,0x52B5,0x52C1,0x52CD,0x52D7,
- 0x52DE,0x52E3,0x52E6,0x98ED,0x52E0,0x52F3,0x52F5,0x52F8,
- 0x52F9,0x5306,0x5308,0x7538,0x530D,0x5310,0x530F,0x5315,
- 0x531A,0x5323,0x532F,0x5331,0x5333,0x5338,0x5340,0x5346,
- 0x5345,0x4E17,0x5349,0x534D,0x51D6,0x535E,0x5369,0x536E,
- 0x5918,0x537B,0x5377,0x5382,0x5396,0x53A0,0x53A6,0x53A5,
- 0x53AE,0x53B0,0x53B6,0x53C3,0x7C12,0x96D9,0x53DF,0x66FC,
- 0x71EE,0x53EE,0x53E8,0x53ED,0x53FA,0x5401,0x543D,0x5440,
- 0x542C,0x542D,0x543C,0x542E,0x5436,0x5429,0x541D,0x544E,
- 0x548F,0x5475,0x548E,0x545F,0x5471,0x5477,0x5470,0x5492,
- 0x547B,0x5480,0x5476,0x5484,0x5490,0x5486,0x54C7,0x54A2,
- 0x54B8,0x54A5,0x54AC,0x54C4,0x54C8,0x54A8,
-
- /* ku 51 */
- 0x54AB,0x54C2,0x54A4,0x54BE,0x54BC,0x54D8,0x54E5,0x54E6,
- 0x550F,0x5514,0x54FD,0x54EE,0x54ED,0x54FA,0x54E2,0x5539,
- 0x5540,0x5563,0x554C,0x552E,0x555C,0x5545,0x5556,0x5557,
- 0x5538,0x5533,0x555D,0x5599,0x5580,0x54AF,0x558A,0x559F,
- 0x557B,0x557E,0x5598,0x559E,0x55AE,0x557C,0x5583,0x55A9,
- 0x5587,0x55A8,0x55DA,0x55C5,0x55DF,0x55C4,0x55DC,0x55E4,
- 0x55D4,0x5614,0x55F7,0x5616,0x55FE,0x55FD,0x561B,0x55F9,
- 0x564E,0x5650,0x71DF,0x5634,0x5636,0x5632,0x5638,0x566B,
- 0x5664,0x562F,0x566C,0x566A,0x5686,0x5680,0x568A,0x56A0,
- 0x5694,0x568F,0x56A5,0x56AE,0x56B6,0x56B4,0x56C2,0x56BC,
- 0x56C1,0x56C3,0x56C0,0x56C8,0x56CE,0x56D1,0x56D3,0x56D7,
- 0x56EE,0x56F9,0x5700,0x56FF,0x5704,0x5709,
-
- /* ku 52 */
- 0x5708,0x570B,0x570D,0x5713,0x5718,0x5716,0x55C7,0x571C,
- 0x5726,0x5737,0x5738,0x574E,0x573B,0x5740,0x574F,0x5769,
- 0x57C0,0x5788,0x5761,0x577F,0x5789,0x5793,0x57A0,0x57B3,
- 0x57A4,0x57AA,0x57B0,0x57C3,0x57C6,0x57D4,0x57D2,0x57D3,
- 0x580A,0x57D6,0x57E3,0x580B,0x5819,0x581D,0x5872,0x5821,
- 0x5862,0x584B,0x5870,0x6BC0,0x5852,0x583D,0x5879,0x5885,
- 0x58B9,0x589F,0x58AB,0x58BA,0x58DE,0x58BB,0x58B8,0x58AE,
- 0x58C5,0x58D3,0x58D1,0x58D7,0x58D9,0x58D8,0x58E5,0x58DC,
- 0x58E4,0x58DF,0x58EF,0x58FA,0x58F9,0x58FB,0x58FC,0x58FD,
- 0x5902,0x590A,0x5910,0x591B,0x68A6,0x5925,0x592C,0x592D,
- 0x5932,0x5938,0x593E,0x7AD2,0x5955,0x5950,0x594E,0x595A,
- 0x5958,0x5962,0x5960,0x5967,0x596C,0x5969,
-
- /* ku 53 */
- 0x5978,0x5981,0x599D,0x4F5E,0x4FAB,0x59A3,0x59B2,0x59C6,
- 0x59E8,0x59DC,0x598D,0x59D9,0x59DA,0x5A25,0x5A1F,0x5A11,
- 0x5A1C,0x5A09,0x5A1A,0x5A40,0x5A6C,0x5A49,0x5A35,0x5A36,
- 0x5A62,0x5A6A,0x5A9A,0x5ABC,0x5ABE,0x5ACB,0x5AC2,0x5ABD,
- 0x5AE3,0x5AD7,0x5AE6,0x5AE9,0x5AD6,0x5AFA,0x5AFB,0x5B0C,
- 0x5B0B,0x5B16,0x5B32,0x5AD0,0x5B2A,0x5B36,0x5B3E,0x5B43,
- 0x5B45,0x5B40,0x5B51,0x5B55,0x5B5A,0x5B5B,0x5B65,0x5B69,
- 0x5B70,0x5B73,0x5B75,0x5B78,0x6588,0x5B7A,0x5B80,0x5B83,
- 0x5BA6,0x5BB8,0x5BC3,0x5BC7,0x5BC9,0x5BD4,0x5BD0,0x5BE4,
- 0x5BE6,0x5BE2,0x5BDE,0x5BE5,0x5BEB,0x5BF0,0x5BF6,0x5BF3,
- 0x5C05,0x5C07,0x5C08,0x5C0D,0x5C13,0x5C20,0x5C22,0x5C28,
- 0x5C38,0x5C39,0x5C41,0x5C46,0x5C4E,0x5C53,
-
- /* ku 54 */
- 0x5C50,0x5C4F,0x5B71,0x5C6C,0x5C6E,0x4E62,0x5C76,0x5C79,
- 0x5C8C,0x5C91,0x5C94,0x599B,0x5CAB,0x5CBB,0x5CB6,0x5CBC,
- 0x5CB7,0x5CC5,0x5CBE,0x5CC7,0x5CD9,0x5CE9,0x5CFD,0x5CFA,
- 0x5CED,0x5D8C,0x5CEA,0x5D0B,0x5D15,0x5D17,0x5D5C,0x5D1F,
- 0x5D1B,0x5D11,0x5D14,0x5D22,0x5D1A,0x5D19,0x5D18,0x5D4C,
- 0x5D52,0x5D4E,0x5D4B,0x5D6C,0x5D73,0x5D76,0x5D87,0x5D84,
- 0x5D82,0x5DA2,0x5D9D,0x5DAC,0x5DAE,0x5DBD,0x5D90,0x5DB7,
- 0x5DBC,0x5DC9,0x5DCD,0x5DD3,0x5DD2,0x5DD6,0x5DDB,0x5DEB,
- 0x5DF2,0x5DF5,0x5E0B,0x5E1A,0x5E19,0x5E11,0x5E1B,0x5E36,
- 0x5E37,0x5E44,0x5E43,0x5E40,0x5E4E,0x5E57,0x5E54,0x5E5F,
- 0x5E62,0x5E64,0x5E47,0x5E75,0x5E76,0x5E7A,0x9EBC,0x5E7F,
- 0x5EA0,0x5EC1,0x5EC2,0x5EC8,0x5ED0,0x5ECF,
-
- /* ku 55 */
- 0x5ED6,0x5EE3,0x5EDD,0x5EDA,0x5EDB,0x5EE2,0x5EE1,0x5EE8,
- 0x5EE9,0x5EEC,0x5EF1,0x5EF3,0x5EF0,0x5EF4,0x5EF8,0x5EFE,
- 0x5F03,0x5F09,0x5F5D,0x5F5C,0x5F0B,0x5F11,0x5F16,0x5F29,
- 0x5F2D,0x5F38,0x5F41,0x5F48,0x5F4C,0x5F4E,0x5F2F,0x5F51,
- 0x5F56,0x5F57,0x5F59,0x5F61,0x5F6D,0x5F73,0x5F77,0x5F83,
- 0x5F82,0x5F7F,0x5F8A,0x5F88,0x5F91,0x5F87,0x5F9E,0x5F99,
- 0x5F98,0x5FA0,0x5FA8,0x5FAD,0x5FBC,0x5FD6,0x5FFB,0x5FE4,
- 0x5FF8,0x5FF1,0x5FDD,0x60B3,0x5FFF,0x6021,0x6060,0x6019,
- 0x6010,0x6029,0x600E,0x6031,0x601B,0x6015,0x602B,0x6026,
- 0x600F,0x603A,0x605A,0x6041,0x606A,0x6077,0x605F,0x604A,
- 0x6046,0x604D,0x6063,0x6043,0x6064,0x6042,0x606C,0x606B,
- 0x6059,0x6081,0x608D,0x60E7,0x6083,0x609A,
-
- /* ku 56 */
- 0x6084,0x609B,0x6096,0x6097,0x6092,0x60A7,0x608B,0x60E1,
- 0x60B8,0x60E0,0x60D3,0x60B4,0x5FF0,0x60BD,0x60C6,0x60B5,
- 0x60D8,0x614D,0x6115,0x6106,0x60F6,0x60F7,0x6100,0x60F4,
- 0x60FA,0x6103,0x6121,0x60FB,0x60F1,0x610D,0x610E,0x6147,
- 0x613E,0x6128,0x6127,0x614A,0x613F,0x613C,0x612C,0x6134,
- 0x613D,0x6142,0x6144,0x6173,0x6177,0x6158,0x6159,0x615A,
- 0x616B,0x6174,0x616F,0x6165,0x6171,0x615F,0x615D,0x6153,
- 0x6175,0x6199,0x6196,0x6187,0x61AC,0x6194,0x619A,0x618A,
- 0x6191,0x61AB,0x61AE,0x61CC,0x61CA,0x61C9,0x61F7,0x61C8,
- 0x61C3,0x61C6,0x61BA,0x61CB,0x7F79,0x61CD,0x61E6,0x61E3,
- 0x61F6,0x61FA,0x61F4,0x61FF,0x61FD,0x61FC,0x61FE,0x6200,
- 0x6208,0x6209,0x620D,0x620C,0x6214,0x621B,
-
- /* ku 57 */
- 0x621E,0x6221,0x622A,0x622E,0x6230,0x6232,0x6233,0x6241,
- 0x624E,0x625E,0x6263,0x625B,0x6260,0x6268,0x627C,0x6282,
- 0x6289,0x627E,0x6292,0x6293,0x6296,0x62D4,0x6283,0x6294,
- 0x62D7,0x62D1,0x62BB,0x62CF,0x62FF,0x62C6,0x64D4,0x62C8,
- 0x62DC,0x62CC,0x62CA,0x62C2,0x62C7,0x629B,0x62C9,0x630C,
- 0x62EE,0x62F1,0x6327,0x6302,0x6308,0x62EF,0x62F5,0x6350,
- 0x633E,0x634D,0x641C,0x634F,0x6396,0x638E,0x6380,0x63AB,
- 0x6376,0x63A3,0x638F,0x6389,0x639F,0x63B5,0x636B,0x6369,
- 0x63BE,0x63E9,0x63C0,0x63C6,0x63E3,0x63C9,0x63D2,0x63F6,
- 0x63C4,0x6416,0x6434,0x6406,0x6413,0x6426,0x6436,0x651D,
- 0x6417,0x6428,0x640F,0x6467,0x646F,0x6476,0x644E,0x652A,
- 0x6495,0x6493,0x64A5,0x64A9,0x6488,0x64BC,
-
- /* ku 58 */
- 0x64DA,0x64D2,0x64C5,0x64C7,0x64BB,0x64D8,0x64C2,0x64F1,
- 0x64E7,0x8209,0x64E0,0x64E1,0x62AC,0x64E3,0x64EF,0x652C,
- 0x64F6,0x64F4,0x64F2,0x64FA,0x6500,0x64FD,0x6518,0x651C,
- 0x6505,0x6524,0x6523,0x652B,0x6534,0x6535,0x6537,0x6536,
- 0x6538,0x754B,0x6548,0x6556,0x6555,0x654D,0x6558,0x655E,
- 0x655D,0x6572,0x6578,0x6582,0x6583,0x8B8A,0x659B,0x659F,
- 0x65AB,0x65B7,0x65C3,0x65C6,0x65C1,0x65C4,0x65CC,0x65D2,
- 0x65DB,0x65D9,0x65E0,0x65E1,0x65F1,0x6772,0x660A,0x6603,
- 0x65FB,0x6773,0x6635,0x6636,0x6634,0x661C,0x664F,0x6644,
- 0x6649,0x6641,0x665E,0x665D,0x6664,0x6667,0x6668,0x665F,
- 0x6662,0x6670,0x6683,0x6688,0x668E,0x6689,0x6684,0x6698,
- 0x669D,0x66C1,0x66B9,0x66C9,0x66BE,0x66BC,
-
- /* ku 59 */
- 0x66C4,0x66B8,0x66D6,0x66DA,0x66E0,0x663F,0x66E6,0x66E9,
- 0x66F0,0x66F5,0x66F7,0x670F,0x6716,0x671E,0x6726,0x6727,
- 0x9738,0x672E,0x673F,0x6736,0x6741,0x6738,0x6737,0x6746,
- 0x675E,0x6760,0x6759,0x6763,0x6764,0x6789,0x6770,0x67A9,
- 0x677C,0x676A,0x678C,0x678B,0x67A6,0x67A1,0x6785,0x67B7,
- 0x67EF,0x67B4,0x67EC,0x67B3,0x67E9,0x67B8,0x67E4,0x67DE,
- 0x67DD,0x67E2,0x67EE,0x67B9,0x67CE,0x67C6,0x67E7,0x6A9C,
- 0x681E,0x6846,0x6829,0x6840,0x684D,0x6832,0x684E,0x68B3,
- 0x682B,0x6859,0x6863,0x6877,0x687F,0x689F,0x688F,0x68AD,
- 0x6894,0x689D,0x689B,0x6883,0x6AAE,0x68B9,0x6874,0x68B5,
- 0x68A0,0x68BA,0x690F,0x688D,0x687E,0x6901,0x68CA,0x6908,
- 0x68D8,0x6922,0x6926,0x68E1,0x690C,0x68CD,
-
- /* ku 60 */
- 0x68D4,0x68E7,0x68D5,0x6936,0x6912,0x6904,0x68D7,0x68E3,
- 0x6925,0x68F9,0x68E0,0x68EF,0x6928,0x692A,0x691A,0x6923,
- 0x6921,0x68C6,0x6979,0x6977,0x695C,0x6978,0x696B,0x6954,
- 0x697E,0x696E,0x6939,0x6974,0x693D,0x6959,0x6930,0x6961,
- 0x695E,0x695D,0x6981,0x696A,0x69B2,0x69AE,0x69D0,0x69BF,
- 0x69C1,0x69D3,0x69BE,0x69CE,0x5BE8,0x69CA,0x69DD,0x69BB,
- 0x69C3,0x69A7,0x6A2E,0x6991,0x69A0,0x699C,0x6995,0x69B4,
- 0x69DE,0x69E8,0x6A02,0x6A1B,0x69FF,0x6B0A,0x69F9,0x69F2,
- 0x69E7,0x6A05,0x69B1,0x6A1E,0x69ED,0x6A14,0x69EB,0x6A0A,
- 0x6A12,0x6AC1,0x6A23,0x6A13,0x6A44,0x6A0C,0x6A72,0x6A36,
- 0x6A78,0x6A47,0x6A62,0x6A59,0x6A66,0x6A48,0x6A38,0x6A22,
- 0x6A90,0x6A8D,0x6AA0,0x6A84,0x6AA2,0x6AA3,
-
- /* ku 61 */
- 0x6A97,0x8617,0x6ABB,0x6AC3,0x6AC2,0x6AB8,0x6AB3,0x6AAC,
- 0x6ADE,0x6AD1,0x6ADF,0x6AAA,0x6ADA,0x6AEA,0x6AFB,0x6B05,
- 0x8616,0x6AFA,0x6B12,0x6B16,0x9B31,0x6B1F,0x6B38,0x6B37,
- 0x76DC,0x6B39,0x98EE,0x6B47,0x6B43,0x6B49,0x6B50,0x6B59,
- 0x6B54,0x6B5B,0x6B5F,0x6B61,0x6B78,0x6B79,0x6B7F,0x6B80,
- 0x6B84,0x6B83,0x6B8D,0x6B98,0x6B95,0x6B9E,0x6BA4,0x6BAA,
- 0x6BAB,0x6BAF,0x6BB2,0x6BB1,0x6BB3,0x6BB7,0x6BBC,0x6BC6,
- 0x6BCB,0x6BD3,0x6BDF,0x6BEC,0x6BEB,0x6BF3,0x6BEF,0x9EBE,
- 0x6C08,0x6C13,0x6C14,0x6C1B,0x6C24,0x6C23,0x6C5E,0x6C55,
- 0x6C62,0x6C6A,0x6C82,0x6C8D,0x6C9A,0x6C81,0x6C9B,0x6C7E,
- 0x6C68,0x6C73,0x6C92,0x6C90,0x6CC4,0x6CF1,0x6CD3,0x6CBD,
- 0x6CD7,0x6CC5,0x6CDD,0x6CAE,0x6CB1,0x6CBE,
-
- /* ku 62 */
- 0x6CBA,0x6CDB,0x6CEF,0x6CD9,0x6CEA,0x6D1F,0x884D,0x6D36,
- 0x6D2B,0x6D3D,0x6D38,0x6D19,0x6D35,0x6D33,0x6D12,0x6D0C,
- 0x6D63,0x6D93,0x6D64,0x6D5A,0x6D79,0x6D59,0x6D8E,0x6D95,
- 0x6FE4,0x6D85,0x6DF9,0x6E15,0x6E0A,0x6DB5,0x6DC7,0x6DE6,
- 0x6DB8,0x6DC6,0x6DEC,0x6DDE,0x6DCC,0x6DE8,0x6DD2,0x6DC5,
- 0x6DFA,0x6DD9,0x6DE4,0x6DD5,0x6DEA,0x6DEE,0x6E2D,0x6E6E,
- 0x6E2E,0x6E19,0x6E72,0x6E5F,0x6E3E,0x6E23,0x6E6B,0x6E2B,
- 0x6E76,0x6E4D,0x6E1F,0x6E43,0x6E3A,0x6E4E,0x6E24,0x6EFF,
- 0x6E1D,0x6E38,0x6E82,0x6EAA,0x6E98,0x6EC9,0x6EB7,0x6ED3,
- 0x6EBD,0x6EAF,0x6EC4,0x6EB2,0x6ED4,0x6ED5,0x6E8F,0x6EA5,
- 0x6EC2,0x6E9F,0x6F41,0x6F11,0x704C,0x6EEC,0x6EF8,0x6EFE,
- 0x6F3F,0x6EF2,0x6F31,0x6EEF,0x6F32,0x6ECC,
-
- /* ku 63 */
- 0x6F3E,0x6F13,0x6EF7,0x6F86,0x6F7A,0x6F78,0x6F81,0x6F80,
- 0x6F6F,0x6F5B,0x6FF3,0x6F6D,0x6F82,0x6F7C,0x6F58,0x6F8E,
- 0x6F91,0x6FC2,0x6F66,0x6FB3,0x6FA3,0x6FA1,0x6FA4,0x6FB9,
- 0x6FC6,0x6FAA,0x6FDF,0x6FD5,0x6FEC,0x6FD4,0x6FD8,0x6FF1,
- 0x6FEE,0x6FDB,0x7009,0x700B,0x6FFA,0x7011,0x7001,0x700F,
- 0x6FFE,0x701B,0x701A,0x6F74,0x701D,0x7018,0x701F,0x7030,
- 0x703E,0x7032,0x7051,0x7063,0x7099,0x7092,0x70AF,0x70F1,
- 0x70AC,0x70B8,0x70B3,0x70AE,0x70DF,0x70CB,0x70DD,0x70D9,
- 0x7109,0x70FD,0x711C,0x7119,0x7165,0x7155,0x7188,0x7166,
- 0x7162,0x714C,0x7156,0x716C,0x718F,0x71FB,0x7184,0x7195,
- 0x71A8,0x71AC,0x71D7,0x71B9,0x71BE,0x71D2,0x71C9,0x71D4,
- 0x71CE,0x71E0,0x71EC,0x71E7,0x71F5,0x71FC,
-
- /* ku 64 */
- 0x71F9,0x71FF,0x720D,0x7210,0x721B,0x7228,0x722D,0x722C,
- 0x7230,0x7232,0x723B,0x723C,0x723F,0x7240,0x7246,0x724B,
- 0x7258,0x7274,0x727E,0x7282,0x7281,0x7287,0x7292,0x7296,
- 0x72A2,0x72A7,0x72B9,0x72B2,0x72C3,0x72C6,0x72C4,0x72CE,
- 0x72D2,0x72E2,0x72E0,0x72E1,0x72F9,0x72F7,0x500F,0x7317,
- 0x730A,0x731C,0x7316,0x731D,0x7334,0x732F,0x7329,0x7325,
- 0x733E,0x734E,0x734F,0x9ED8,0x7357,0x736A,0x7368,0x7370,
- 0x7378,0x7375,0x737B,0x737A,0x73C8,0x73B3,0x73CE,0x73BB,
- 0x73C0,0x73E5,0x73EE,0x73DE,0x74A2,0x7405,0x746F,0x7425,
- 0x73F8,0x7432,0x743A,0x7455,0x743F,0x745F,0x7459,0x7441,
- 0x745C,0x7469,0x7470,0x7463,0x746A,0x7476,0x747E,0x748B,
- 0x749E,0x74A7,0x74CA,0x74CF,0x74D4,0x73F1,
-
- /* ku 65 */
- 0x74E0,0x74E3,0x74E7,0x74E9,0x74EE,0x74F2,0x74F0,0x74F1,
- 0x74F8,0x74F7,0x7504,0x7503,0x7505,0x750C,0x750E,0x750D,
- 0x7515,0x7513,0x751E,0x7526,0x752C,0x753C,0x7544,0x754D,
- 0x754A,0x7549,0x755B,0x7546,0x755A,0x7569,0x7564,0x7567,
- 0x756B,0x756D,0x7578,0x7576,0x7586,0x7587,0x7574,0x758A,
- 0x7589,0x7582,0x7594,0x759A,0x759D,0x75A5,0x75A3,0x75C2,
- 0x75B3,0x75C3,0x75B5,0x75BD,0x75B8,0x75BC,0x75B1,0x75CD,
- 0x75CA,0x75D2,0x75D9,0x75E3,0x75DE,0x75FE,0x75FF,0x75FC,
- 0x7601,0x75F0,0x75FA,0x75F2,0x75F3,0x760B,0x760D,0x7609,
- 0x761F,0x7627,0x7620,0x7621,0x7622,0x7624,0x7634,0x7630,
- 0x763B,0x7647,0x7648,0x7646,0x765C,0x7658,0x7661,0x7662,
- 0x7668,0x7669,0x766A,0x7667,0x766C,0x7670,
-
- /* ku 66 */
- 0x7672,0x7676,0x7678,0x767C,0x7680,0x7683,0x7688,0x768B,
- 0x768E,0x7696,0x7693,0x7699,0x769A,0x76B0,0x76B4,0x76B8,
- 0x76B9,0x76BA,0x76C2,0x76CD,0x76D6,0x76D2,0x76DE,0x76E1,
- 0x76E5,0x76E7,0x76EA,0x862F,0x76FB,0x7708,0x7707,0x7704,
- 0x7729,0x7724,0x771E,0x7725,0x7726,0x771B,0x7737,0x7738,
- 0x7747,0x775A,0x7768,0x776B,0x775B,0x7765,0x777F,0x777E,
- 0x7779,0x778E,0x778B,0x7791,0x77A0,0x779E,0x77B0,0x77B6,
- 0x77B9,0x77BF,0x77BC,0x77BD,0x77BB,0x77C7,0x77CD,0x77D7,
- 0x77DA,0x77DC,0x77E3,0x77EE,0x77FC,0x780C,0x7812,0x7926,
- 0x7820,0x792A,0x7845,0x788E,0x7874,0x7886,0x787C,0x789A,
- 0x788C,0x78A3,0x78B5,0x78AA,0x78AF,0x78D1,0x78C6,0x78CB,
- 0x78D4,0x78BE,0x78BC,0x78C5,0x78CA,0x78EC,
-
- /* ku 67 */
- 0x78E7,0x78DA,0x78FD,0x78F4,0x7907,0x7912,0x7911,0x7919,
- 0x792C,0x792B,0x7940,0x7960,0x7957,0x795F,0x795A,0x7955,
- 0x7953,0x797A,0x797F,0x798A,0x799D,0x79A7,0x9F4B,0x79AA,
- 0x79AE,0x79B3,0x79B9,0x79BA,0x79C9,0x79D5,0x79E7,0x79EC,
- 0x79E1,0x79E3,0x7A08,0x7A0D,0x7A18,0x7A19,0x7A20,0x7A1F,
- 0x7980,0x7A31,0x7A3B,0x7A3E,0x7A37,0x7A43,0x7A57,0x7A49,
- 0x7A61,0x7A62,0x7A69,0x9F9D,0x7A70,0x7A79,0x7A7D,0x7A88,
- 0x7A97,0x7A95,0x7A98,0x7A96,0x7AA9,0x7AC8,0x7AB0,0x7AB6,
- 0x7AC5,0x7AC4,0x7ABF,0x9083,0x7AC7,0x7ACA,0x7ACD,0x7ACF,
- 0x7AD5,0x7AD3,0x7AD9,0x7ADA,0x7ADD,0x7AE1,0x7AE2,0x7AE6,
- 0x7AED,0x7AF0,0x7B02,0x7B0F,0x7B0A,0x7B06,0x7B33,0x7B18,
- 0x7B19,0x7B1E,0x7B35,0x7B28,0x7B36,0x7B50,
-
- /* ku 68 */
- 0x7B7A,0x7B04,0x7B4D,0x7B0B,0x7B4C,0x7B45,0x7B75,0x7B65,
- 0x7B74,0x7B67,0x7B70,0x7B71,0x7B6C,0x7B6E,0x7B9D,0x7B98,
- 0x7B9F,0x7B8D,0x7B9C,0x7B9A,0x7B8B,0x7B92,0x7B8F,0x7B5D,
- 0x7B99,0x7BCB,0x7BC1,0x7BCC,0x7BCF,0x7BB4,0x7BC6,0x7BDD,
- 0x7BE9,0x7C11,0x7C14,0x7BE6,0x7BE5,0x7C60,0x7C00,0x7C07,
- 0x7C13,0x7BF3,0x7BF7,0x7C17,0x7C0D,0x7BF6,0x7C23,0x7C27,
- 0x7C2A,0x7C1F,0x7C37,0x7C2B,0x7C3D,0x7C4C,0x7C43,0x7C54,
- 0x7C4F,0x7C40,0x7C50,0x7C58,0x7C5F,0x7C64,0x7C56,0x7C65,
- 0x7C6C,0x7C75,0x7C83,0x7C90,0x7CA4,0x7CAD,0x7CA2,0x7CAB,
- 0x7CA1,0x7CA8,0x7CB3,0x7CB2,0x7CB1,0x7CAE,0x7CB9,0x7CBD,
- 0x7CC0,0x7CC5,0x7CC2,0x7CD8,0x7CD2,0x7CDC,0x7CE2,0x9B3B,
- 0x7CEF,0x7CF2,0x7CF4,0x7CF6,0x7CFA,0x7D06,
-
- /* ku 69 */
- 0x7D02,0x7D1C,0x7D15,0x7D0A,0x7D45,0x7D4B,0x7D2E,0x7D32,
- 0x7D3F,0x7D35,0x7D46,0x7D73,0x7D56,0x7D4E,0x7D72,0x7D68,
- 0x7D6E,0x7D4F,0x7D63,0x7D93,0x7D89,0x7D5B,0x7D8F,0x7D7D,
- 0x7D9B,0x7DBA,0x7DAE,0x7DA3,0x7DB5,0x7DC7,0x7DBD,0x7DAB,
- 0x7E3D,0x7DA2,0x7DAF,0x7DDC,0x7DB8,0x7D9F,0x7DB0,0x7DD8,
- 0x7DDD,0x7DE4,0x7DDE,0x7DFB,0x7DF2,0x7DE1,0x7E05,0x7E0A,
- 0x7E23,0x7E21,0x7E12,0x7E31,0x7E1F,0x7E09,0x7E0B,0x7E22,
- 0x7E46,0x7E66,0x7E3B,0x7E35,0x7E39,0x7E43,0x7E37,0x7E32,
- 0x7E3A,0x7E67,0x7E5D,0x7E56,0x7E5E,0x7E59,0x7E5A,0x7E79,
- 0x7E6A,0x7E69,0x7E7C,0x7E7B,0x7E83,0x7DD5,0x7E7D,0x8FAE,
- 0x7E7F,0x7E88,0x7E89,0x7E8C,0x7E92,0x7E90,0x7E93,0x7E94,
- 0x7E96,0x7E8E,0x7E9B,0x7E9C,0x7F38,0x7F3A,
-
- /* ku 70 */
- 0x7F45,0x7F4C,0x7F4D,0x7F4E,0x7F50,0x7F51,0x7F55,0x7F54,
- 0x7F58,0x7F5F,0x7F60,0x7F68,0x7F69,0x7F67,0x7F78,0x7F82,
- 0x7F86,0x7F83,0x7F88,0x7F87,0x7F8C,0x7F94,0x7F9E,0x7F9D,
- 0x7F9A,0x7FA3,0x7FAF,0x7FB2,0x7FB9,0x7FAE,0x7FB6,0x7FB8,
- 0x8B71,0x7FC5,0x7FC6,0x7FCA,0x7FD5,0x7FD4,0x7FE1,0x7FE6,
- 0x7FE9,0x7FF3,0x7FF9,0x98DC,0x8006,0x8004,0x800B,0x8012,
- 0x8018,0x8019,0x801C,0x8021,0x8028,0x803F,0x803B,0x804A,
- 0x8046,0x8052,0x8058,0x805A,0x805F,0x8062,0x8068,0x8073,
- 0x8072,0x8070,0x8076,0x8079,0x807D,0x807F,0x8084,0x8086,
- 0x8085,0x809B,0x8093,0x809A,0x80AD,0x5190,0x80AC,0x80DB,
- 0x80E5,0x80D9,0x80DD,0x80C4,0x80DA,0x80D6,0x8109,0x80EF,
- 0x80F1,0x811B,0x8129,0x8123,0x812F,0x814B,
-
- /* ku 71 */
- 0x968B,0x8146,0x813E,0x8153,0x8151,0x80FC,0x8171,0x816E,
- 0x8165,0x8166,0x8174,0x8183,0x8188,0x818A,0x8180,0x8182,
- 0x81A0,0x8195,0x81A4,0x81A3,0x815F,0x8193,0x81A9,0x81B0,
- 0x81B5,0x81BE,0x81B8,0x81BD,0x81C0,0x81C2,0x81BA,0x81C9,
- 0x81CD,0x81D1,0x81D9,0x81D8,0x81C8,0x81DA,0x81DF,0x81E0,
- 0x81E7,0x81FA,0x81FB,0x81FE,0x8201,0x8202,0x8205,0x8207,
- 0x820A,0x820D,0x8210,0x8216,0x8229,0x822B,0x8238,0x8233,
- 0x8240,0x8259,0x8258,0x825D,0x825A,0x825F,0x8264,0x8262,
- 0x8268,0x826A,0x826B,0x822E,0x8271,0x8277,0x8278,0x827E,
- 0x828D,0x8292,0x82AB,0x829F,0x82BB,0x82AC,0x82E1,0x82E3,
- 0x82DF,0x82D2,0x82F4,0x82F3,0x82FA,0x8393,0x8303,0x82FB,
- 0x82F9,0x82DE,0x8306,0x82DC,0x8309,0x82D9,
-
- /* ku 72 */
- 0x8335,0x8334,0x8316,0x8332,0x8331,0x8340,0x8339,0x8350,
- 0x8345,0x832F,0x832B,0x8317,0x8318,0x8385,0x839A,0x83AA,
- 0x839F,0x83A2,0x8396,0x8323,0x838E,0x8387,0x838A,0x837C,
- 0x83B5,0x8373,0x8375,0x83A0,0x8389,0x83A8,0x83F4,0x8413,
- 0x83EB,0x83CE,0x83FD,0x8403,0x83D8,0x840B,0x83C1,0x83F7,
- 0x8407,0x83E0,0x83F2,0x840D,0x8422,0x8420,0x83BD,0x8438,
- 0x8506,0x83FB,0x846D,0x842A,0x843C,0x855A,0x8484,0x8477,
- 0x846B,0x84AD,0x846E,0x8482,0x8469,0x8446,0x842C,0x846F,
- 0x8479,0x8435,0x84CA,0x8462,0x84B9,0x84BF,0x849F,0x84D9,
- 0x84CD,0x84BB,0x84DA,0x84D0,0x84C1,0x84C6,0x84D6,0x84A1,
- 0x8521,0x84FF,0x84F4,0x8517,0x8518,0x852C,0x851F,0x8515,
- 0x8514,0x84FC,0x8540,0x8563,0x8558,0x8548,
-
- /* ku 73 */
- 0x8541,0x8602,0x854B,0x8555,0x8580,0x85A4,0x8588,0x8591,
- 0x858A,0x85A8,0x856D,0x8594,0x859B,0x85EA,0x8587,0x859C,
- 0x8577,0x857E,0x8590,0x85C9,0x85BA,0x85CF,0x85B9,0x85D0,
- 0x85D5,0x85DD,0x85E5,0x85DC,0x85F9,0x860A,0x8613,0x860B,
- 0x85FE,0x85FA,0x8606,0x8622,0x861A,0x8630,0x863F,0x864D,
- 0x4E55,0x8654,0x865F,0x8667,0x8671,0x8693,0x86A3,0x86A9,
- 0x86AA,0x868B,0x868C,0x86B6,0x86AF,0x86C4,0x86C6,0x86B0,
- 0x86C9,0x8823,0x86AB,0x86D4,0x86DE,0x86E9,0x86EC,0x86DF,
- 0x86DB,0x86EF,0x8712,0x8706,0x8708,0x8700,0x8703,0x86FB,
- 0x8711,0x8709,0x870D,0x86F9,0x870A,0x8734,0x873F,0x8737,
- 0x873B,0x8725,0x8729,0x871A,0x8760,0x875F,0x8778,0x874C,
- 0x874E,0x8774,0x8757,0x8768,0x876E,0x8759,
-
- /* ku 74 */
- 0x8753,0x8763,0x876A,0x8805,0x87A2,0x879F,0x8782,0x87AF,
- 0x87CB,0x87BD,0x87C0,0x87D0,0x96D6,0x87AB,0x87C4,0x87B3,
- 0x87C7,0x87C6,0x87BB,0x87EF,0x87F2,0x87E0,0x880F,0x880D,
- 0x87FE,0x87F6,0x87F7,0x880E,0x87D2,0x8811,0x8816,0x8815,
- 0x8822,0x8821,0x8831,0x8836,0x8839,0x8827,0x883B,0x8844,
- 0x8842,0x8852,0x8859,0x885E,0x8862,0x886B,0x8881,0x887E,
- 0x889E,0x8875,0x887D,0x88B5,0x8872,0x8882,0x8897,0x8892,
- 0x88AE,0x8899,0x88A2,0x888D,0x88A4,0x88B0,0x88BF,0x88B1,
- 0x88C3,0x88C4,0x88D4,0x88D8,0x88D9,0x88DD,0x88F9,0x8902,
- 0x88FC,0x88F4,0x88E8,0x88F2,0x8904,0x890C,0x890A,0x8913,
- 0x8943,0x891E,0x8925,0x892A,0x892B,0x8941,0x8944,0x893B,
- 0x8936,0x8938,0x894C,0x891D,0x8960,0x895E,
-
- /* ku 75 */
- 0x8966,0x8964,0x896D,0x896A,0x896F,0x8974,0x8977,0x897E,
- 0x8983,0x8988,0x898A,0x8993,0x8998,0x89A1,0x89A9,0x89A6,
- 0x89AC,0x89AF,0x89B2,0x89BA,0x89BD,0x89BF,0x89C0,0x89DA,
- 0x89DC,0x89DD,0x89E7,0x89F4,0x89F8,0x8A03,0x8A16,0x8A10,
- 0x8A0C,0x8A1B,0x8A1D,0x8A25,0x8A36,0x8A41,0x8A5B,0x8A52,
- 0x8A46,0x8A48,0x8A7C,0x8A6D,0x8A6C,0x8A62,0x8A85,0x8A82,
- 0x8A84,0x8AA8,0x8AA1,0x8A91,0x8AA5,0x8AA6,0x8A9A,0x8AA3,
- 0x8AC4,0x8ACD,0x8AC2,0x8ADA,0x8AEB,0x8AF3,0x8AE7,0x8AE4,
- 0x8AF1,0x8B14,0x8AE0,0x8AE2,0x8AF7,0x8ADE,0x8ADB,0x8B0C,
- 0x8B07,0x8B1A,0x8AE1,0x8B16,0x8B10,0x8B17,0x8B20,0x8B33,
- 0x97AB,0x8B26,0x8B2B,0x8B3E,0x8B28,0x8B41,0x8B4C,0x8B4F,
- 0x8B4E,0x8B49,0x8B56,0x8B5B,0x8B5A,0x8B6B,
-
- /* ku 76 */
- 0x8B5F,0x8B6C,0x8B6F,0x8B74,0x8B7D,0x8B80,0x8B8C,0x8B8E,
- 0x8B92,0x8B93,0x8B96,0x8B99,0x8B9A,0x8C3A,0x8C41,0x8C3F,
- 0x8C48,0x8C4C,0x8C4E,0x8C50,0x8C55,0x8C62,0x8C6C,0x8C78,
- 0x8C7A,0x8C82,0x8C89,0x8C85,0x8C8A,0x8C8D,0x8C8E,0x8C94,
- 0x8C7C,0x8C98,0x621D,0x8CAD,0x8CAA,0x8CBD,0x8CB2,0x8CB3,
- 0x8CAE,0x8CB6,0x8CC8,0x8CC1,0x8CE4,0x8CE3,0x8CDA,0x8CFD,
- 0x8CFA,0x8CFB,0x8D04,0x8D05,0x8D0A,0x8D07,0x8D0F,0x8D0D,
- 0x8D10,0x9F4E,0x8D13,0x8CCD,0x8D14,0x8D16,0x8D67,0x8D6D,
- 0x8D71,0x8D73,0x8D81,0x8D99,0x8DC2,0x8DBE,0x8DBA,0x8DCF,
- 0x8DDA,0x8DD6,0x8DCC,0x8DDB,0x8DCB,0x8DEA,0x8DEB,0x8DDF,
- 0x8DE3,0x8DFC,0x8E08,0x8E09,0x8DFF,0x8E1D,0x8E1E,0x8E10,
- 0x8E1F,0x8E42,0x8E35,0x8E30,0x8E34,0x8E4A,
-
- /* ku 77 */
- 0x8E47,0x8E49,0x8E4C,0x8E50,0x8E48,0x8E59,0x8E64,0x8E60,
- 0x8E2A,0x8E63,0x8E55,0x8E76,0x8E72,0x8E7C,0x8E81,0x8E87,
- 0x8E85,0x8E84,0x8E8B,0x8E8A,0x8E93,0x8E91,0x8E94,0x8E99,
- 0x8EAA,0x8EA1,0x8EAC,0x8EB0,0x8EC6,0x8EB1,0x8EBE,0x8EC5,
- 0x8EC8,0x8ECB,0x8EDB,0x8EE3,0x8EFC,0x8EFB,0x8EEB,0x8EFE,
- 0x8F0A,0x8F05,0x8F15,0x8F12,0x8F19,0x8F13,0x8F1C,0x8F1F,
- 0x8F1B,0x8F0C,0x8F26,0x8F33,0x8F3B,0x8F39,0x8F45,0x8F42,
- 0x8F3E,0x8F4C,0x8F49,0x8F46,0x8F4E,0x8F57,0x8F5C,0x8F62,
- 0x8F63,0x8F64,0x8F9C,0x8F9F,0x8FA3,0x8FAD,0x8FAF,0x8FB7,
- 0x8FDA,0x8FE5,0x8FE2,0x8FEA,0x8FEF,0x9087,0x8FF4,0x9005,
- 0x8FF9,0x8FFA,0x9011,0x9015,0x9021,0x900D,0x901E,0x9016,
- 0x900B,0x9027,0x9036,0x9035,0x9039,0x8FF8,
-
- /* ku 78 */
- 0x904F,0x9050,0x9051,0x9052,0x900E,0x9049,0x903E,0x9056,
- 0x9058,0x905E,0x9068,0x906F,0x9076,0x96A8,0x9072,0x9082,
- 0x907D,0x9081,0x9080,0x908A,0x9089,0x908F,0x90A8,0x90AF,
- 0x90B1,0x90B5,0x90E2,0x90E4,0x6248,0x90DB,0x9102,0x9112,
- 0x9119,0x9132,0x9130,0x914A,0x9156,0x9158,0x9163,0x9165,
- 0x9169,0x9173,0x9172,0x918B,0x9189,0x9182,0x91A2,0x91AB,
- 0x91AF,0x91AA,0x91B5,0x91B4,0x91BA,0x91C0,0x91C1,0x91C9,
- 0x91CB,0x91D0,0x91D6,0x91DF,0x91E1,0x91DB,0x91FC,0x91F5,
- 0x91F6,0x921E,0x91FF,0x9214,0x922C,0x9215,0x9211,0x925E,
- 0x9257,0x9245,0x9249,0x9264,0x9248,0x9295,0x923F,0x924B,
- 0x9250,0x929C,0x9296,0x9293,0x929B,0x925A,0x92CF,0x92B9,
- 0x92B7,0x92E9,0x930F,0x92FA,0x9344,0x932E,
-
- /* ku 79 */
- 0x9319,0x9322,0x931A,0x9323,0x933A,0x9335,0x933B,0x935C,
- 0x9360,0x937C,0x936E,0x9356,0x93B0,0x93AC,0x93AD,0x9394,
- 0x93B9,0x93D6,0x93D7,0x93E8,0x93E5,0x93D8,0x93C3,0x93DD,
- 0x93D0,0x93C8,0x93E4,0x941A,0x9414,0x9413,0x9403,0x9407,
- 0x9410,0x9436,0x942B,0x9435,0x9421,0x943A,0x9441,0x9452,
- 0x9444,0x945B,0x9460,0x9462,0x945E,0x946A,0x9229,0x9470,
- 0x9475,0x9477,0x947D,0x945A,0x947C,0x947E,0x9481,0x947F,
- 0x9582,0x9587,0x958A,0x9594,0x9596,0x9598,0x9599,0x95A0,
- 0x95A8,0x95A7,0x95AD,0x95BC,0x95BB,0x95B9,0x95BE,0x95CA,
- 0x6FF6,0x95C3,0x95CD,0x95CC,0x95D5,0x95D4,0x95D6,0x95DC,
- 0x95E1,0x95E5,0x95E2,0x9621,0x9628,0x962E,0x962F,0x9642,
- 0x964C,0x964F,0x964B,0x9677,0x965C,0x965E,
-
- /* ku 80 */
- 0x965D,0x965F,0x9666,0x9672,0x966C,0x968D,0x9698,0x9695,
- 0x9697,0x96AA,0x96A7,0x96B1,0x96B2,0x96B0,0x96B4,0x96B6,
- 0x96B8,0x96B9,0x96CE,0x96CB,0x96C9,0x96CD,0x894D,0x96DC,
- 0x970D,0x96D5,0x96F9,0x9704,0x9706,0x9708,0x9713,0x970E,
- 0x9711,0x970F,0x9716,0x9719,0x9724,0x972A,0x9730,0x9739,
- 0x973D,0x973E,0x9744,0x9746,0x9748,0x9742,0x9749,0x975C,
- 0x9760,0x9764,0x9766,0x9768,0x52D2,0x976B,0x9771,0x9779,
- 0x9785,0x977C,0x9781,0x977A,0x9786,0x978B,0x978F,0x9790,
- 0x979C,0x97A8,0x97A6,0x97A3,0x97B3,0x97B4,0x97C3,0x97C6,
- 0x97C8,0x97CB,0x97DC,0x97ED,0x9F4F,0x97F2,0x7ADF,0x97F6,
- 0x97F5,0x980F,0x980C,0x9838,0x9824,0x9821,0x9837,0x983D,
- 0x9846,0x984F,0x984B,0x986B,0x986F,0x9870,
-
- /* ku 81 */
- 0x9871,0x9874,0x9873,0x98AA,0x98AF,0x98B1,0x98B6,0x98C4,
- 0x98C3,0x98C6,0x98E9,0x98EB,0x9903,0x9909,0x9912,0x9914,
- 0x9918,0x9921,0x991D,0x991E,0x9924,0x9920,0x992C,0x992E,
- 0x993D,0x993E,0x9942,0x9949,0x9945,0x9950,0x994B,0x9951,
- 0x9952,0x994C,0x9955,0x9997,0x9998,0x99A5,0x99AD,0x99AE,
- 0x99BC,0x99DF,0x99DB,0x99DD,0x99D8,0x99D1,0x99ED,0x99EE,
- 0x99F1,0x99F2,0x99FB,0x99F8,0x9A01,0x9A0F,0x9A05,0x99E2,
- 0x9A19,0x9A2B,0x9A37,0x9A45,0x9A42,0x9A40,0x9A43,0x9A3E,
- 0x9A55,0x9A4D,0x9A5B,0x9A57,0x9A5F,0x9A62,0x9A65,0x9A64,
- 0x9A69,0x9A6B,0x9A6A,0x9AAD,0x9AB0,0x9ABC,0x9AC0,0x9ACF,
- 0x9AD1,0x9AD3,0x9AD4,0x9ADE,0x9ADF,0x9AE2,0x9AE3,0x9AE6,
- 0x9AEF,0x9AEB,0x9AEE,0x9AF4,0x9AF1,0x9AF7,
-
- /* ku 82 */
- 0x9AFB,0x9B06,0x9B18,0x9B1A,0x9B1F,0x9B22,0x9B23,0x9B25,
- 0x9B27,0x9B28,0x9B29,0x9B2A,0x9B2E,0x9B2F,0x9B32,0x9B44,
- 0x9B43,0x9B4F,0x9B4D,0x9B4E,0x9B51,0x9B58,0x9B74,0x9B93,
- 0x9B83,0x9B91,0x9B96,0x9B97,0x9B9F,0x9BA0,0x9BA8,0x9BB4,
- 0x9BC0,0x9BCA,0x9BB9,0x9BC6,0x9BCF,0x9BD1,0x9BD2,0x9BE3,
- 0x9BE2,0x9BE4,0x9BD4,0x9BE1,0x9C3A,0x9BF2,0x9BF1,0x9BF0,
- 0x9C15,0x9C14,0x9C09,0x9C13,0x9C0C,0x9C06,0x9C08,0x9C12,
- 0x9C0A,0x9C04,0x9C2E,0x9C1B,0x9C25,0x9C24,0x9C21,0x9C30,
- 0x9C47,0x9C32,0x9C46,0x9C3E,0x9C5A,0x9C60,0x9C67,0x9C76,
- 0x9C78,0x9CE7,0x9CEC,0x9CF0,0x9D09,0x9D08,0x9CEB,0x9D03,
- 0x9D06,0x9D2A,0x9D26,0x9DAF,0x9D23,0x9D1F,0x9D44,0x9D15,
- 0x9D12,0x9D41,0x9D3F,0x9D3E,0x9D46,0x9D48,
-
- /* ku 83 */
- 0x9D5D,0x9D5E,0x9D64,0x9D51,0x9D50,0x9D59,0x9D72,0x9D89,
- 0x9D87,0x9DAB,0x9D6F,0x9D7A,0x9D9A,0x9DA4,0x9DA9,0x9DB2,
- 0x9DC4,0x9DC1,0x9DBB,0x9DB8,0x9DBA,0x9DC6,0x9DCF,0x9DC2,
- 0x9DD9,0x9DD3,0x9DF8,0x9DE6,0x9DED,0x9DEF,0x9DFD,0x9E1A,
- 0x9E1B,0x9E1E,0x9E75,0x9E79,0x9E7D,0x9E81,0x9E88,0x9E8B,
- 0x9E8C,0x9E92,0x9E95,0x9E91,0x9E9D,0x9EA5,0x9EA9,0x9EB8,
- 0x9EAA,0x9EAD,0x9761,0x9ECC,0x9ECE,0x9ECF,0x9ED0,0x9ED4,
- 0x9EDC,0x9EDE,0x9EDD,0x9EE0,0x9EE5,0x9EE8,0x9EEF,0x9EF4,
- 0x9EF6,0x9EF7,0x9EF9,0x9EFB,0x9EFC,0x9EFD,0x9F07,0x9F08,
- 0x76B7,0x9F15,0x9F21,0x9F2C,0x9F3E,0x9F4A,0x9F52,0x9F54,
- 0x9F63,0x9F5F,0x9F60,0x9F61,0x9F66,0x9F67,0x9F6C,0x9F6A,
- 0x9F77,0x9F72,0x9F76,0x9F95,0x9F9C,0x9FA0,
-
- /* ku 84 */
- 0x582F,0x69C7,0x9059,0x7464,0x51DC,0x7199
-};
-
-static const int jisx0208_ucs_table_size = (sizeof (jisx0208_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cp932ext1_ucs_table[] = {
- /* ku 13 */
- 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,
- 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,
- 0x2470,0x2471,0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,
- 0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x0000,0x3349,
- 0x3314,0x3322,0x334D,0x3318,0x3327,0x3303,0x3336,0x3351,
- 0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,0x333B,0x339C,
- 0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x337B,0x301D,
- 0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
- 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,
- 0x2261,0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,
- 0x22BF,0x2235,0x2229,0x222A,0x0000,0x0000
-};
-static const int cp932ext1_ucs_table_min = (13 - 1)*94;
-static const int cp932ext1_ucs_table_max = (13 - 1)*94 + (sizeof (cp932ext1_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cp932ext2_ucs_table[] = {
- /* ku 89 */
- 0x7E8A,0x891C,0x9348,0x9288,0x84DC,0x4FC9,0x70BB,0x6631,
- 0x68C8,0x92F9,0x66FB,0x5F45,0x4E28,0x4EE1,0x4EFC,0x4F00,
- 0x4F03,0x4F39,0x4F56,0x4F92,0x4F8A,0x4F9A,0x4F94,0x4FCD,
- 0x5040,0x5022,0x4FFF,0x501E,0x5046,0x5070,0x5042,0x5094,
- 0x50F4,0x50D8,0x514A,0x5164,0x519D,0x51BE,0x51EC,0x5215,
- 0x529C,0x52A6,0x52C0,0x52DB,0x5300,0x5307,0x5324,0x5372,
- 0x5393,0x53B2,0x53DD,0xFA0E,0x549C,0x548A,0x54A9,0x54FF,
- 0x5586,0x5759,0x5765,0x57AC,0x57C8,0x57C7,0xFA0F,0xFA10,
- 0x589E,0x58B2,0x590B,0x5953,0x595B,0x595D,0x5963,0x59A4,
- 0x59BA,0x5B56,0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6,
- 0x5CBA,0x5CF5,0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8,
- 0x5DB9,0x5DD0,0x5F21,0x5F34,0x5F67,0x5FB7,
-
- /* ku 90 */
- 0x5FDE,0x605D,0x6085,0x608A,0x60DE,0x60D5,0x6120,0x60F2,
- 0x6111,0x6137,0x6130,0x6198,0x6213,0x62A6,0x63F5,0x6460,
- 0x649D,0x64CE,0x654E,0x6600,0x6615,0x663B,0x6609,0x662E,
- 0x661E,0x6624,0x6665,0x6657,0x6659,0xFA12,0x6673,0x6699,
- 0x66A0,0x66B2,0x66BF,0x66FA,0x670E,0xF929,0x6766,0x67BB,
- 0x6852,0x67C0,0x6801,0x6844,0x68CF,0xFA13,0x6968,0xFA14,
- 0x6998,0x69E2,0x6A30,0x6A6B,0x6A46,0x6A73,0x6A7E,0x6AE2,
- 0x6AE4,0x6BD6,0x6C3F,0x6C5C,0x6C86,0x6C6F,0x6CDA,0x6D04,
- 0x6D87,0x6D6F,0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,
- 0x6E39,0x6E5C,0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,
- 0x7005,0x7007,0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,
- 0x7146,0x7147,0xFA15,0x71C1,0x71FE,0x72B1,
-
- /* ku 91 */
- 0x72BE,0x7324,0xFA16,0x7377,0x73BD,0x73C9,0x73D6,0x73E3,
- 0x73D2,0x7407,0x73F5,0x7426,0x742A,0x7429,0x742E,0x7462,
- 0x7489,0x749F,0x7501,0x756F,0x7682,0x769C,0x769E,0x769B,
- 0x76A6,0xFA17,0x7746,0x52AF,0x7821,0x784E,0x7864,0x787A,
- 0x7930,0xFA18,0xFA19,0xFA1A,0x7994,0xFA1B,0x799B,0x7AD1,
- 0x7AE7,0xFA1C,0x7AEB,0x7B9E,0xFA1D,0x7D48,0x7D5C,0x7DB7,
- 0x7DA0,0x7DD6,0x7E52,0x7F47,0x7FA1,0xFA1E,0x8301,0x8362,
- 0x837F,0x83C7,0x83F6,0x8448,0x84B4,0x8553,0x8559,0x856B,
- 0xFA1F,0x85B0,0xFA20,0xFA21,0x8807,0x88F5,0x8A12,0x8A37,
- 0x8A79,0x8AA7,0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F,
- 0x8CF0,0x8CF4,0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25,
- 0x9067,0x90DE,0xFA26,0x9115,0x9127,0x91DA,
-
- /* ku 92 */
- 0x91D7,0x91DE,0x91ED,0x91EE,0x91E4,0x91E5,0x9206,0x9210,
- 0x920A,0x923A,0x9240,0x923C,0x924E,0x9259,0x9251,0x9239,
- 0x9267,0x92A7,0x9277,0x9278,0x92E7,0x92D7,0x92D9,0x92D0,
- 0xFA27,0x92D5,0x92E0,0x92D3,0x9325,0x9321,0x92FB,0xFA28,
- 0x931E,0x92FF,0x931D,0x9302,0x9370,0x9357,0x93A4,0x93C6,
- 0x93DE,0x93F8,0x9431,0x9445,0x9448,0x9592,0xF9DC,0xFA29,
- 0x969D,0x96AF,0x9733,0x973B,0x9743,0x974D,0x974F,0x9751,
- 0x9755,0x9857,0x9865,0xFA2A,0xFA2B,0x9927,0xFA2C,0x999E,
- 0x9A4E,0x9AD9,0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,
- 0x9C00,0x9D70,0x9D6B,0xFA2D,0x9E19,0x9ED1,0x0000,0x0000,
- 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,
- 0x2178,0x2179,0xFFE2,0xFFE4,0xFF07,0xFF02
-};
-static const int cp932ext2_ucs_table_min = (89 - 1)*94;
-static const int cp932ext2_ucs_table_max = (89 - 1)*94 + (sizeof (cp932ext2_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cp932ext3_ucs_table[] = {
- /* ku 115 */
- 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,
- 0x2178,0x2179,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,
- 0x2166,0x2167,0x2168,0x2169,0xFFE2,0xFFE4,0xFF07,0xFF02,
- 0x3231,0x2116,0x2121,0x2235,0x7E8A,0x891C,0x9348,0x9288,
- 0x84DC,0x4FC9,0x70BB,0x6631,0x68C8,0x92F9,0x66FB,0x5F45,
- 0x4E28,0x4EE1,0x4EFC,0x4F00,0x4F03,0x4F39,0x4F56,0x4F92,
- 0x4F8A,0x4F9A,0x4F94,0x4FCD,0x5040,0x5022,0x4FFF,0x501E,
- 0x5046,0x5070,0x5042,0x5094,0x50F4,0x50D8,0x514A,0x5164,
- 0x519D,0x51BE,0x51EC,0x5215,0x529C,0x52A6,0x52C0,0x52DB,
- 0x5300,0x5307,0x5324,0x5372,0x5393,0x53B2,0x53DD,0xFA0E,
- 0x549C,0x548A,0x54A9,0x54FF,0x5586,0x5759,0x5765,0x57AC,
- 0x57C8,0x57C7,0xFA0F,0xFA10,0x589E,0x58B2,
-
- /* ku 116 */
- 0x590B,0x5953,0x595B,0x595D,0x5963,0x59A4,0x59BA,0x5B56,
- 0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6,0x5CBA,0x5CF5,
- 0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8,0x5DB9,0x5DD0,
- 0x5F21,0x5F34,0x5F67,0x5FB7,0x5FDE,0x605D,0x6085,0x608A,
- 0x60DE,0x60D5,0x6120,0x60F2,0x6111,0x6137,0x6130,0x6198,
- 0x6213,0x62A6,0x63F5,0x6460,0x649D,0x64CE,0x654E,0x6600,
- 0x6615,0x663B,0x6609,0x662E,0x661E,0x6624,0x6665,0x6657,
- 0x6659,0xFA12,0x6673,0x6699,0x66A0,0x66B2,0x66BF,0x66FA,
- 0x670E,0xF929,0x6766,0x67BB,0x6852,0x67C0,0x6801,0x6844,
- 0x68CF,0xFA13,0x6968,0xFA14,0x6998,0x69E2,0x6A30,0x6A6B,
- 0x6A46,0x6A73,0x6A7E,0x6AE2,0x6AE4,0x6BD6,0x6C3F,0x6C5C,
- 0x6C86,0x6C6F,0x6CDA,0x6D04,0x6D87,0x6D6F,
-
- /* ku 117 */
- 0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,0x6E39,0x6E5C,
- 0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,0x7005,0x7007,
- 0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,0x7146,0x7147,
- 0xFA15,0x71C1,0x71FE,0x72B1,0x72BE,0x7324,0xFA16,0x7377,
- 0x73BD,0x73C9,0x73D6,0x73E3,0x73D2,0x7407,0x73F5,0x7426,
- 0x742A,0x7429,0x742E,0x7462,0x7489,0x749F,0x7501,0x756F,
- 0x7682,0x769C,0x769E,0x769B,0x76A6,0xFA17,0x7746,0x52AF,
- 0x7821,0x784E,0x7864,0x787A,0x7930,0xFA18,0xFA19,0xFA1A,
- 0x7994,0xFA1B,0x799B,0x7AD1,0x7AE7,0xFA1C,0x7AEB,0x7B9E,
- 0xFA1D,0x7D48,0x7D5C,0x7DB7,0x7DA0,0x7DD6,0x7E52,0x7F47,
- 0x7FA1,0xFA1E,0x8301,0x8362,0x837F,0x83C7,0x83F6,0x8448,
- 0x84B4,0x8553,0x8559,0x856B,0xFA1F,0x85B0,
-
- /* ku 118 */
- 0xFA20,0xFA21,0x8807,0x88F5,0x8A12,0x8A37,0x8A79,0x8AA7,
- 0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F,0x8CF0,0x8CF4,
- 0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25,0x9067,0x90DE,
- 0xFA26,0x9115,0x9127,0x91DA,0x91D7,0x91DE,0x91ED,0x91EE,
- 0x91E4,0x91E5,0x9206,0x9210,0x920A,0x923A,0x9240,0x923C,
- 0x924E,0x9259,0x9251,0x9239,0x9267,0x92A7,0x9277,0x9278,
- 0x92E7,0x92D7,0x92D9,0x92D0,0xFA27,0x92D5,0x92E0,0x92D3,
- 0x9325,0x9321,0x92FB,0xFA28,0x931E,0x92FF,0x931D,0x9302,
- 0x9370,0x9357,0x93A4,0x93C6,0x93DE,0x93F8,0x9431,0x9445,
- 0x9448,0x9592,0xF9DC,0xFA29,0x969D,0x96AF,0x9733,0x973B,
- 0x9743,0x974D,0x974F,0x9751,0x9755,0x9857,0x9865,0xFA2A,
- 0xFA2B,0x9927,0xFA2C,0x999E,0x9A4E,0x9AD9,
-
- /* ku 119 */
- 0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,0x9C00,0x9D70,
- 0x9D6B,0xFA2D,0x9E19,0x9ED1
-};
-static const int cp932ext3_ucs_table_min = (115 - 1)*94;
-static const int cp932ext3_ucs_table_max = (115 - 1)*94 + (sizeof (cp932ext3_ucs_table) / sizeof (unsigned short));
-
-
-static const unsigned short jisx0212_ucs_table[] = {
- /* ku 1 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 2 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x02D8,0x02C7,
- 0x00B8,0x02D9,0x02DD,0x00AF,0x02DB,0x02DA,0x007E,0x0384,
- 0x0385,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x00A1,0x00A6,0x00BF,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x00BA,0x00AA,0x00A9,0x00AE,0x2122,0x00A4,
- 0x2116,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 3 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 4 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 5 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 6 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0386,0x0388,0x0389,0x038A,0x03AA,0x0000,0x038C,0x0000,
- 0x038E,0x03AB,0x0000,0x038F,0x0000,0x0000,0x0000,0x0000,
- 0x03AC,0x03AD,0x03AE,0x03AF,0x03CA,0x0390,0x03CC,0x03C2,
- 0x03CD,0x03CB,0x03B0,0x03CE,0x0000,0x0000,
-
- /* ku 7 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408,
- 0x0409,0x040A,0x040B,0x040C,0x040E,0x040F,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457,0x0458,
- 0x0459,0x045A,0x045B,0x045C,0x045E,0x045F,
-
- /* ku 8 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 9 */
- 0x00C6,0x0110,0x0000,0x0126,0x0000,0x0132,0x0000,0x0141,
- 0x013F,0x0000,0x014A,0x00D8,0x0152,0x0000,0x0166,0x00DE,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x00E6,0x0111,0x00F0,0x0127,0x0131,0x0133,0x0138,0x0142,
- 0x0140,0x0149,0x014B,0x00F8,0x0153,0x00DF,0x0167,0x00FE,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 10 */
- 0x00C1,0x00C0,0x00C4,0x00C2,0x0102,0x01CD,0x0100,0x0104,
- 0x00C5,0x00C3,0x0106,0x0108,0x010C,0x00C7,0x010A,0x010E,
- 0x00C9,0x00C8,0x00CB,0x00CA,0x011A,0x0116,0x0112,0x0118,
- 0x0000,0x011C,0x011E,0x0122,0x0120,0x0124,0x00CD,0x00CC,
- 0x00CF,0x00CE,0x01CF,0x0130,0x012A,0x012E,0x0128,0x0134,
- 0x0136,0x0139,0x013D,0x013B,0x0143,0x0147,0x0145,0x00D1,
- 0x00D3,0x00D2,0x00D6,0x00D4,0x01D1,0x0150,0x014C,0x00D5,
- 0x0154,0x0158,0x0156,0x015A,0x015C,0x0160,0x015E,0x0164,
- 0x0162,0x00DA,0x00D9,0x00DC,0x00DB,0x016C,0x01D3,0x0170,
- 0x016A,0x0172,0x016E,0x0168,0x01D7,0x01DB,0x01D9,0x01D5,
- 0x0174,0x00DD,0x0178,0x0176,0x0179,0x017D,0x017B,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 11 */
- 0x00E1,0x00E0,0x00E4,0x00E2,0x0103,0x01CE,0x0101,0x0105,
- 0x00E5,0x00E3,0x0107,0x0109,0x010D,0x00E7,0x010B,0x010F,
- 0x00E9,0x00E8,0x00EB,0x00EA,0x011B,0x0117,0x0113,0x0119,
- 0x01F5,0x011D,0x011F,0x0000,0x0121,0x0125,0x00ED,0x00EC,
- 0x00EF,0x00EE,0x01D0,0x0000,0x012B,0x012F,0x0129,0x0135,
- 0x0137,0x013A,0x013E,0x013C,0x0144,0x0148,0x0146,0x00F1,
- 0x00F3,0x00F2,0x00F6,0x00F4,0x01D2,0x0151,0x014D,0x00F5,
- 0x0155,0x0159,0x0157,0x015B,0x015D,0x0161,0x015F,0x0165,
- 0x0163,0x00FA,0x00F9,0x00FC,0x00FB,0x016D,0x01D4,0x0171,
- 0x016B,0x0173,0x016F,0x0169,0x01D8,0x01DC,0x01DA,0x01D6,
- 0x0175,0x00FD,0x00FF,0x0177,0x017A,0x017E,0x017C,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 12 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 13 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 14 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 15 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 16 */
- 0x4E02,0x4E04,0x4E05,0x4E0C,0x4E12,0x4E1F,0x4E23,0x4E24,
- 0x4E28,0x4E2B,0x4E2E,0x4E2F,0x4E30,0x4E35,0x4E40,0x4E41,
- 0x4E44,0x4E47,0x4E51,0x4E5A,0x4E5C,0x4E63,0x4E68,0x4E69,
- 0x4E74,0x4E75,0x4E79,0x4E7F,0x4E8D,0x4E96,0x4E97,0x4E9D,
- 0x4EAF,0x4EB9,0x4EC3,0x4ED0,0x4EDA,0x4EDB,0x4EE0,0x4EE1,
- 0x4EE2,0x4EE8,0x4EEF,0x4EF1,0x4EF3,0x4EF5,0x4EFD,0x4EFE,
- 0x4EFF,0x4F00,0x4F02,0x4F03,0x4F08,0x4F0B,0x4F0C,0x4F12,
- 0x4F15,0x4F16,0x4F17,0x4F19,0x4F2E,0x4F31,0x4F60,0x4F33,
- 0x4F35,0x4F37,0x4F39,0x4F3B,0x4F3E,0x4F40,0x4F42,0x4F48,
- 0x4F49,0x4F4B,0x4F4C,0x4F52,0x4F54,0x4F56,0x4F58,0x4F5F,
- 0x4F63,0x4F6A,0x4F6C,0x4F6E,0x4F71,0x4F77,0x4F78,0x4F79,
- 0x4F7A,0x4F7D,0x4F7E,0x4F81,0x4F82,0x4F84,
-
- /* ku 17 */
- 0x4F85,0x4F89,0x4F8A,0x4F8C,0x4F8E,0x4F90,0x4F92,0x4F93,
- 0x4F94,0x4F97,0x4F99,0x4F9A,0x4F9E,0x4F9F,0x4FB2,0x4FB7,
- 0x4FB9,0x4FBB,0x4FBC,0x4FBD,0x4FBE,0x4FC0,0x4FC1,0x4FC5,
- 0x4FC6,0x4FC8,0x4FC9,0x4FCB,0x4FCC,0x4FCD,0x4FCF,0x4FD2,
- 0x4FDC,0x4FE0,0x4FE2,0x4FF0,0x4FF2,0x4FFC,0x4FFD,0x4FFF,
- 0x5000,0x5001,0x5004,0x5007,0x500A,0x500C,0x500E,0x5010,
- 0x5013,0x5017,0x5018,0x501B,0x501C,0x501D,0x501E,0x5022,
- 0x5027,0x502E,0x5030,0x5032,0x5033,0x5035,0x5040,0x5041,
- 0x5042,0x5045,0x5046,0x504A,0x504C,0x504E,0x5051,0x5052,
- 0x5053,0x5057,0x5059,0x505F,0x5060,0x5062,0x5063,0x5066,
- 0x5067,0x506A,0x506D,0x5070,0x5071,0x503B,0x5081,0x5083,
- 0x5084,0x5086,0x508A,0x508E,0x508F,0x5090,
-
- /* ku 18 */
- 0x5092,0x5093,0x5094,0x5096,0x509B,0x509C,0x509E,0x509F,
- 0x50A0,0x50A1,0x50A2,0x50AA,0x50AF,0x50B0,0x50B9,0x50BA,
- 0x50BD,0x50C0,0x50C3,0x50C4,0x50C7,0x50CC,0x50CE,0x50D0,
- 0x50D3,0x50D4,0x50D8,0x50DC,0x50DD,0x50DF,0x50E2,0x50E4,
- 0x50E6,0x50E8,0x50E9,0x50EF,0x50F1,0x50F6,0x50FA,0x50FE,
- 0x5103,0x5106,0x5107,0x5108,0x510B,0x510C,0x510D,0x510E,
- 0x50F2,0x5110,0x5117,0x5119,0x511B,0x511C,0x511D,0x511E,
- 0x5123,0x5127,0x5128,0x512C,0x512D,0x512F,0x5131,0x5133,
- 0x5134,0x5135,0x5138,0x5139,0x5142,0x514A,0x514F,0x5153,
- 0x5155,0x5157,0x5158,0x515F,0x5164,0x5166,0x517E,0x5183,
- 0x5184,0x518B,0x518E,0x5198,0x519D,0x51A1,0x51A3,0x51AD,
- 0x51B8,0x51BA,0x51BC,0x51BE,0x51BF,0x51C2,
-
- /* ku 19 */
- 0x51C8,0x51CF,0x51D1,0x51D2,0x51D3,0x51D5,0x51D8,0x51DE,
- 0x51E2,0x51E5,0x51EE,0x51F2,0x51F3,0x51F4,0x51F7,0x5201,
- 0x5202,0x5205,0x5212,0x5213,0x5215,0x5216,0x5218,0x5222,
- 0x5228,0x5231,0x5232,0x5235,0x523C,0x5245,0x5249,0x5255,
- 0x5257,0x5258,0x525A,0x525C,0x525F,0x5260,0x5261,0x5266,
- 0x526E,0x5277,0x5278,0x5279,0x5280,0x5282,0x5285,0x528A,
- 0x528C,0x5293,0x5295,0x5296,0x5297,0x5298,0x529A,0x529C,
- 0x52A4,0x52A5,0x52A6,0x52A7,0x52AF,0x52B0,0x52B6,0x52B7,
- 0x52B8,0x52BA,0x52BB,0x52BD,0x52C0,0x52C4,0x52C6,0x52C8,
- 0x52CC,0x52CF,0x52D1,0x52D4,0x52D6,0x52DB,0x52DC,0x52E1,
- 0x52E5,0x52E8,0x52E9,0x52EA,0x52EC,0x52F0,0x52F1,0x52F4,
- 0x52F6,0x52F7,0x5300,0x5303,0x530A,0x530B,
-
- /* ku 20 */
- 0x530C,0x5311,0x5313,0x5318,0x531B,0x531C,0x531E,0x531F,
- 0x5325,0x5327,0x5328,0x5329,0x532B,0x532C,0x532D,0x5330,
- 0x5332,0x5335,0x533C,0x533D,0x533E,0x5342,0x534C,0x534B,
- 0x5359,0x535B,0x5361,0x5363,0x5365,0x536C,0x536D,0x5372,
- 0x5379,0x537E,0x5383,0x5387,0x5388,0x538E,0x5393,0x5394,
- 0x5399,0x539D,0x53A1,0x53A4,0x53AA,0x53AB,0x53AF,0x53B2,
- 0x53B4,0x53B5,0x53B7,0x53B8,0x53BA,0x53BD,0x53C0,0x53C5,
- 0x53CF,0x53D2,0x53D3,0x53D5,0x53DA,0x53DD,0x53DE,0x53E0,
- 0x53E6,0x53E7,0x53F5,0x5402,0x5413,0x541A,0x5421,0x5427,
- 0x5428,0x542A,0x542F,0x5431,0x5434,0x5435,0x5443,0x5444,
- 0x5447,0x544D,0x544F,0x545E,0x5462,0x5464,0x5466,0x5467,
- 0x5469,0x546B,0x546D,0x546E,0x5474,0x547F,
-
- /* ku 21 */
- 0x5481,0x5483,0x5485,0x5488,0x5489,0x548D,0x5491,0x5495,
- 0x5496,0x549C,0x549F,0x54A1,0x54A6,0x54A7,0x54A9,0x54AA,
- 0x54AD,0x54AE,0x54B1,0x54B7,0x54B9,0x54BA,0x54BB,0x54BF,
- 0x54C6,0x54CA,0x54CD,0x54CE,0x54E0,0x54EA,0x54EC,0x54EF,
- 0x54F6,0x54FC,0x54FE,0x54FF,0x5500,0x5501,0x5505,0x5508,
- 0x5509,0x550C,0x550D,0x550E,0x5515,0x552A,0x552B,0x5532,
- 0x5535,0x5536,0x553B,0x553C,0x553D,0x5541,0x5547,0x5549,
- 0x554A,0x554D,0x5550,0x5551,0x5558,0x555A,0x555B,0x555E,
- 0x5560,0x5561,0x5564,0x5566,0x557F,0x5581,0x5582,0x5586,
- 0x5588,0x558E,0x558F,0x5591,0x5592,0x5593,0x5594,0x5597,
- 0x55A3,0x55A4,0x55AD,0x55B2,0x55BF,0x55C1,0x55C3,0x55C6,
- 0x55C9,0x55CB,0x55CC,0x55CE,0x55D1,0x55D2,
-
- /* ku 22 */
- 0x55D3,0x55D7,0x55D8,0x55DB,0x55DE,0x55E2,0x55E9,0x55F6,
- 0x55FF,0x5605,0x5608,0x560A,0x560D,0x560E,0x560F,0x5610,
- 0x5611,0x5612,0x5619,0x562C,0x5630,0x5633,0x5635,0x5637,
- 0x5639,0x563B,0x563C,0x563D,0x563F,0x5640,0x5641,0x5643,
- 0x5644,0x5646,0x5649,0x564B,0x564D,0x564F,0x5654,0x565E,
- 0x5660,0x5661,0x5662,0x5663,0x5666,0x5669,0x566D,0x566F,
- 0x5671,0x5672,0x5675,0x5684,0x5685,0x5688,0x568B,0x568C,
- 0x5695,0x5699,0x569A,0x569D,0x569E,0x569F,0x56A6,0x56A7,
- 0x56A8,0x56A9,0x56AB,0x56AC,0x56AD,0x56B1,0x56B3,0x56B7,
- 0x56BE,0x56C5,0x56C9,0x56CA,0x56CB,0x56CF,0x56D0,0x56CC,
- 0x56CD,0x56D9,0x56DC,0x56DD,0x56DF,0x56E1,0x56E4,0x56E5,
- 0x56E6,0x56E7,0x56E8,0x56F1,0x56EB,0x56ED,
-
- /* ku 23 */
- 0x56F6,0x56F7,0x5701,0x5702,0x5707,0x570A,0x570C,0x5711,
- 0x5715,0x571A,0x571B,0x571D,0x5720,0x5722,0x5723,0x5724,
- 0x5725,0x5729,0x572A,0x572C,0x572E,0x572F,0x5733,0x5734,
- 0x573D,0x573E,0x573F,0x5745,0x5746,0x574C,0x574D,0x5752,
- 0x5762,0x5765,0x5767,0x5768,0x576B,0x576D,0x576E,0x576F,
- 0x5770,0x5771,0x5773,0x5774,0x5775,0x5777,0x5779,0x577A,
- 0x577B,0x577C,0x577E,0x5781,0x5783,0x578C,0x5794,0x5797,
- 0x5799,0x579A,0x579C,0x579D,0x579E,0x579F,0x57A1,0x5795,
- 0x57A7,0x57A8,0x57A9,0x57AC,0x57B8,0x57BD,0x57C7,0x57C8,
- 0x57CC,0x57CF,0x57D5,0x57DD,0x57DE,0x57E4,0x57E6,0x57E7,
- 0x57E9,0x57ED,0x57F0,0x57F5,0x57F6,0x57F8,0x57FD,0x57FE,
- 0x57FF,0x5803,0x5804,0x5808,0x5809,0x57E1,
-
- /* ku 24 */
- 0x580C,0x580D,0x581B,0x581E,0x581F,0x5820,0x5826,0x5827,
- 0x582D,0x5832,0x5839,0x583F,0x5849,0x584C,0x584D,0x584F,
- 0x5850,0x5855,0x585F,0x5861,0x5864,0x5867,0x5868,0x5878,
- 0x587C,0x587F,0x5880,0x5881,0x5887,0x5888,0x5889,0x588A,
- 0x588C,0x588D,0x588F,0x5890,0x5894,0x5896,0x589D,0x58A0,
- 0x58A1,0x58A2,0x58A6,0x58A9,0x58B1,0x58B2,0x58C4,0x58BC,
- 0x58C2,0x58C8,0x58CD,0x58CE,0x58D0,0x58D2,0x58D4,0x58D6,
- 0x58DA,0x58DD,0x58E1,0x58E2,0x58E9,0x58F3,0x5905,0x5906,
- 0x590B,0x590C,0x5912,0x5913,0x5914,0x8641,0x591D,0x5921,
- 0x5923,0x5924,0x5928,0x592F,0x5930,0x5933,0x5935,0x5936,
- 0x593F,0x5943,0x5946,0x5952,0x5953,0x5959,0x595B,0x595D,
- 0x595E,0x595F,0x5961,0x5963,0x596B,0x596D,
-
- /* ku 25 */
- 0x596F,0x5972,0x5975,0x5976,0x5979,0x597B,0x597C,0x598B,
- 0x598C,0x598E,0x5992,0x5995,0x5997,0x599F,0x59A4,0x59A7,
- 0x59AD,0x59AE,0x59AF,0x59B0,0x59B3,0x59B7,0x59BA,0x59BC,
- 0x59C1,0x59C3,0x59C4,0x59C8,0x59CA,0x59CD,0x59D2,0x59DD,
- 0x59DE,0x59DF,0x59E3,0x59E4,0x59E7,0x59EE,0x59EF,0x59F1,
- 0x59F2,0x59F4,0x59F7,0x5A00,0x5A04,0x5A0C,0x5A0D,0x5A0E,
- 0x5A12,0x5A13,0x5A1E,0x5A23,0x5A24,0x5A27,0x5A28,0x5A2A,
- 0x5A2D,0x5A30,0x5A44,0x5A45,0x5A47,0x5A48,0x5A4C,0x5A50,
- 0x5A55,0x5A5E,0x5A63,0x5A65,0x5A67,0x5A6D,0x5A77,0x5A7A,
- 0x5A7B,0x5A7E,0x5A8B,0x5A90,0x5A93,0x5A96,0x5A99,0x5A9C,
- 0x5A9E,0x5A9F,0x5AA0,0x5AA2,0x5AA7,0x5AAC,0x5AB1,0x5AB2,
- 0x5AB3,0x5AB5,0x5AB8,0x5ABA,0x5ABB,0x5ABF,
-
- /* ku 26 */
- 0x5AC4,0x5AC6,0x5AC8,0x5ACF,0x5ADA,0x5ADC,0x5AE0,0x5AE5,
- 0x5AEA,0x5AEE,0x5AF5,0x5AF6,0x5AFD,0x5B00,0x5B01,0x5B08,
- 0x5B17,0x5B34,0x5B19,0x5B1B,0x5B1D,0x5B21,0x5B25,0x5B2D,
- 0x5B38,0x5B41,0x5B4B,0x5B4C,0x5B52,0x5B56,0x5B5E,0x5B68,
- 0x5B6E,0x5B6F,0x5B7C,0x5B7D,0x5B7E,0x5B7F,0x5B81,0x5B84,
- 0x5B86,0x5B8A,0x5B8E,0x5B90,0x5B91,0x5B93,0x5B94,0x5B96,
- 0x5BA8,0x5BA9,0x5BAC,0x5BAD,0x5BAF,0x5BB1,0x5BB2,0x5BB7,
- 0x5BBA,0x5BBC,0x5BC0,0x5BC1,0x5BCD,0x5BCF,0x5BD6,0x5BD7,
- 0x5BD8,0x5BD9,0x5BDA,0x5BE0,0x5BEF,0x5BF1,0x5BF4,0x5BFD,
- 0x5C0C,0x5C17,0x5C1E,0x5C1F,0x5C23,0x5C26,0x5C29,0x5C2B,
- 0x5C2C,0x5C2E,0x5C30,0x5C32,0x5C35,0x5C36,0x5C59,0x5C5A,
- 0x5C5C,0x5C62,0x5C63,0x5C67,0x5C68,0x5C69,
-
- /* ku 27 */
- 0x5C6D,0x5C70,0x5C74,0x5C75,0x5C7A,0x5C7B,0x5C7C,0x5C7D,
- 0x5C87,0x5C88,0x5C8A,0x5C8F,0x5C92,0x5C9D,0x5C9F,0x5CA0,
- 0x5CA2,0x5CA3,0x5CA6,0x5CAA,0x5CB2,0x5CB4,0x5CB5,0x5CBA,
- 0x5CC9,0x5CCB,0x5CD2,0x5CDD,0x5CD7,0x5CEE,0x5CF1,0x5CF2,
- 0x5CF4,0x5D01,0x5D06,0x5D0D,0x5D12,0x5D2B,0x5D23,0x5D24,
- 0x5D26,0x5D27,0x5D31,0x5D34,0x5D39,0x5D3D,0x5D3F,0x5D42,
- 0x5D43,0x5D46,0x5D48,0x5D55,0x5D51,0x5D59,0x5D4A,0x5D5F,
- 0x5D60,0x5D61,0x5D62,0x5D64,0x5D6A,0x5D6D,0x5D70,0x5D79,
- 0x5D7A,0x5D7E,0x5D7F,0x5D81,0x5D83,0x5D88,0x5D8A,0x5D92,
- 0x5D93,0x5D94,0x5D95,0x5D99,0x5D9B,0x5D9F,0x5DA0,0x5DA7,
- 0x5DAB,0x5DB0,0x5DB4,0x5DB8,0x5DB9,0x5DC3,0x5DC7,0x5DCB,
- 0x5DD0,0x5DCE,0x5DD8,0x5DD9,0x5DE0,0x5DE4,
-
- /* ku 28 */
- 0x5DE9,0x5DF8,0x5DF9,0x5E00,0x5E07,0x5E0D,0x5E12,0x5E14,
- 0x5E15,0x5E18,0x5E1F,0x5E20,0x5E2E,0x5E28,0x5E32,0x5E35,
- 0x5E3E,0x5E4B,0x5E50,0x5E49,0x5E51,0x5E56,0x5E58,0x5E5B,
- 0x5E5C,0x5E5E,0x5E68,0x5E6A,0x5E6B,0x5E6C,0x5E6D,0x5E6E,
- 0x5E70,0x5E80,0x5E8B,0x5E8E,0x5EA2,0x5EA4,0x5EA5,0x5EA8,
- 0x5EAA,0x5EAC,0x5EB1,0x5EB3,0x5EBD,0x5EBE,0x5EBF,0x5EC6,
- 0x5ECC,0x5ECB,0x5ECE,0x5ED1,0x5ED2,0x5ED4,0x5ED5,0x5EDC,
- 0x5EDE,0x5EE5,0x5EEB,0x5F02,0x5F06,0x5F07,0x5F08,0x5F0E,
- 0x5F19,0x5F1C,0x5F1D,0x5F21,0x5F22,0x5F23,0x5F24,0x5F28,
- 0x5F2B,0x5F2C,0x5F2E,0x5F30,0x5F34,0x5F36,0x5F3B,0x5F3D,
- 0x5F3F,0x5F40,0x5F44,0x5F45,0x5F47,0x5F4D,0x5F50,0x5F54,
- 0x5F58,0x5F5B,0x5F60,0x5F63,0x5F64,0x5F67,
-
- /* ku 29 */
- 0x5F6F,0x5F72,0x5F74,0x5F75,0x5F78,0x5F7A,0x5F7D,0x5F7E,
- 0x5F89,0x5F8D,0x5F8F,0x5F96,0x5F9C,0x5F9D,0x5FA2,0x5FA7,
- 0x5FAB,0x5FA4,0x5FAC,0x5FAF,0x5FB0,0x5FB1,0x5FB8,0x5FC4,
- 0x5FC7,0x5FC8,0x5FC9,0x5FCB,0x5FD0,0x5FD1,0x5FD2,0x5FD3,
- 0x5FD4,0x5FDE,0x5FE1,0x5FE2,0x5FE8,0x5FE9,0x5FEA,0x5FEC,
- 0x5FED,0x5FEE,0x5FEF,0x5FF2,0x5FF3,0x5FF6,0x5FFA,0x5FFC,
- 0x6007,0x600A,0x600D,0x6013,0x6014,0x6017,0x6018,0x601A,
- 0x601F,0x6024,0x602D,0x6033,0x6035,0x6040,0x6047,0x6048,
- 0x6049,0x604C,0x6051,0x6054,0x6056,0x6057,0x605D,0x6061,
- 0x6067,0x6071,0x607E,0x607F,0x6082,0x6086,0x6088,0x608A,
- 0x608E,0x6091,0x6093,0x6095,0x6098,0x609D,0x609E,0x60A2,
- 0x60A4,0x60A5,0x60A8,0x60B0,0x60B1,0x60B7,
-
- /* ku 30 */
- 0x60BB,0x60BE,0x60C2,0x60C4,0x60C8,0x60C9,0x60CA,0x60CB,
- 0x60CE,0x60CF,0x60D4,0x60D5,0x60D9,0x60DB,0x60DD,0x60DE,
- 0x60E2,0x60E5,0x60F2,0x60F5,0x60F8,0x60FC,0x60FD,0x6102,
- 0x6107,0x610A,0x610C,0x6110,0x6111,0x6112,0x6113,0x6114,
- 0x6116,0x6117,0x6119,0x611C,0x611E,0x6122,0x612A,0x612B,
- 0x6130,0x6131,0x6135,0x6136,0x6137,0x6139,0x6141,0x6145,
- 0x6146,0x6149,0x615E,0x6160,0x616C,0x6172,0x6178,0x617B,
- 0x617C,0x617F,0x6180,0x6181,0x6183,0x6184,0x618B,0x618D,
- 0x6192,0x6193,0x6197,0x6198,0x619C,0x619D,0x619F,0x61A0,
- 0x61A5,0x61A8,0x61AA,0x61AD,0x61B8,0x61B9,0x61BC,0x61C0,
- 0x61C1,0x61C2,0x61CE,0x61CF,0x61D5,0x61DC,0x61DD,0x61DE,
- 0x61DF,0x61E1,0x61E2,0x61E7,0x61E9,0x61E5,
-
- /* ku 31 */
- 0x61EC,0x61ED,0x61EF,0x6201,0x6203,0x6204,0x6207,0x6213,
- 0x6215,0x621C,0x6220,0x6222,0x6223,0x6227,0x6229,0x622B,
- 0x6239,0x623D,0x6242,0x6243,0x6244,0x6246,0x624C,0x6250,
- 0x6251,0x6252,0x6254,0x6256,0x625A,0x625C,0x6264,0x626D,
- 0x626F,0x6273,0x627A,0x627D,0x628D,0x628E,0x628F,0x6290,
- 0x62A6,0x62A8,0x62B3,0x62B6,0x62B7,0x62BA,0x62BE,0x62BF,
- 0x62C4,0x62CE,0x62D5,0x62D6,0x62DA,0x62EA,0x62F2,0x62F4,
- 0x62FC,0x62FD,0x6303,0x6304,0x630A,0x630B,0x630D,0x6310,
- 0x6313,0x6316,0x6318,0x6329,0x632A,0x632D,0x6335,0x6336,
- 0x6339,0x633C,0x6341,0x6342,0x6343,0x6344,0x6346,0x634A,
- 0x634B,0x634E,0x6352,0x6353,0x6354,0x6358,0x635B,0x6365,
- 0x6366,0x636C,0x636D,0x6371,0x6374,0x6375,
-
- /* ku 32 */
- 0x6378,0x637C,0x637D,0x637F,0x6382,0x6384,0x6387,0x638A,
- 0x6390,0x6394,0x6395,0x6399,0x639A,0x639E,0x63A4,0x63A6,
- 0x63AD,0x63AE,0x63AF,0x63BD,0x63C1,0x63C5,0x63C8,0x63CE,
- 0x63D1,0x63D3,0x63D4,0x63D5,0x63DC,0x63E0,0x63E5,0x63EA,
- 0x63EC,0x63F2,0x63F3,0x63F5,0x63F8,0x63F9,0x6409,0x640A,
- 0x6410,0x6412,0x6414,0x6418,0x641E,0x6420,0x6422,0x6424,
- 0x6425,0x6429,0x642A,0x642F,0x6430,0x6435,0x643D,0x643F,
- 0x644B,0x644F,0x6451,0x6452,0x6453,0x6454,0x645A,0x645B,
- 0x645C,0x645D,0x645F,0x6460,0x6461,0x6463,0x646D,0x6473,
- 0x6474,0x647B,0x647D,0x6485,0x6487,0x648F,0x6490,0x6491,
- 0x6498,0x6499,0x649B,0x649D,0x649F,0x64A1,0x64A3,0x64A6,
- 0x64A8,0x64AC,0x64B3,0x64BD,0x64BE,0x64BF,
-
- /* ku 33 */
- 0x64C4,0x64C9,0x64CA,0x64CB,0x64CC,0x64CE,0x64D0,0x64D1,
- 0x64D5,0x64D7,0x64E4,0x64E5,0x64E9,0x64EA,0x64ED,0x64F0,
- 0x64F5,0x64F7,0x64FB,0x64FF,0x6501,0x6504,0x6508,0x6509,
- 0x650A,0x650F,0x6513,0x6514,0x6516,0x6519,0x651B,0x651E,
- 0x651F,0x6522,0x6526,0x6529,0x652E,0x6531,0x653A,0x653C,
- 0x653D,0x6543,0x6547,0x6549,0x6550,0x6552,0x6554,0x655F,
- 0x6560,0x6567,0x656B,0x657A,0x657D,0x6581,0x6585,0x658A,
- 0x6592,0x6595,0x6598,0x659D,0x65A0,0x65A3,0x65A6,0x65AE,
- 0x65B2,0x65B3,0x65B4,0x65BF,0x65C2,0x65C8,0x65C9,0x65CE,
- 0x65D0,0x65D4,0x65D6,0x65D8,0x65DF,0x65F0,0x65F2,0x65F4,
- 0x65F5,0x65F9,0x65FE,0x65FF,0x6600,0x6604,0x6608,0x6609,
- 0x660D,0x6611,0x6612,0x6615,0x6616,0x661D,
-
- /* ku 34 */
- 0x661E,0x6621,0x6622,0x6623,0x6624,0x6626,0x6629,0x662A,
- 0x662B,0x662C,0x662E,0x6630,0x6631,0x6633,0x6639,0x6637,
- 0x6640,0x6645,0x6646,0x664A,0x664C,0x6651,0x664E,0x6657,
- 0x6658,0x6659,0x665B,0x665C,0x6660,0x6661,0x66FB,0x666A,
- 0x666B,0x666C,0x667E,0x6673,0x6675,0x667F,0x6677,0x6678,
- 0x6679,0x667B,0x6680,0x667C,0x668B,0x668C,0x668D,0x6690,
- 0x6692,0x6699,0x669A,0x669B,0x669C,0x669F,0x66A0,0x66A4,
- 0x66AD,0x66B1,0x66B2,0x66B5,0x66BB,0x66BF,0x66C0,0x66C2,
- 0x66C3,0x66C8,0x66CC,0x66CE,0x66CF,0x66D4,0x66DB,0x66DF,
- 0x66E8,0x66EB,0x66EC,0x66EE,0x66FA,0x6705,0x6707,0x670E,
- 0x6713,0x6719,0x671C,0x6720,0x6722,0x6733,0x673E,0x6745,
- 0x6747,0x6748,0x674C,0x6754,0x6755,0x675D,
-
- /* ku 35 */
- 0x6766,0x676C,0x676E,0x6774,0x6776,0x677B,0x6781,0x6784,
- 0x678E,0x678F,0x6791,0x6793,0x6796,0x6798,0x6799,0x679B,
- 0x67B0,0x67B1,0x67B2,0x67B5,0x67BB,0x67BC,0x67BD,0x67F9,
- 0x67C0,0x67C2,0x67C3,0x67C5,0x67C8,0x67C9,0x67D2,0x67D7,
- 0x67D9,0x67DC,0x67E1,0x67E6,0x67F0,0x67F2,0x67F6,0x67F7,
- 0x6852,0x6814,0x6819,0x681D,0x681F,0x6828,0x6827,0x682C,
- 0x682D,0x682F,0x6830,0x6831,0x6833,0x683B,0x683F,0x6844,
- 0x6845,0x684A,0x684C,0x6855,0x6857,0x6858,0x685B,0x686B,
- 0x686E,0x686F,0x6870,0x6871,0x6872,0x6875,0x6879,0x687A,
- 0x687B,0x687C,0x6882,0x6884,0x6886,0x6888,0x6896,0x6898,
- 0x689A,0x689C,0x68A1,0x68A3,0x68A5,0x68A9,0x68AA,0x68AE,
- 0x68B2,0x68BB,0x68C5,0x68C8,0x68CC,0x68CF,
-
- /* ku 36 */
- 0x68D0,0x68D1,0x68D3,0x68D6,0x68D9,0x68DC,0x68DD,0x68E5,
- 0x68E8,0x68EA,0x68EB,0x68EC,0x68ED,0x68F0,0x68F1,0x68F5,
- 0x68F6,0x68FB,0x68FC,0x68FD,0x6906,0x6909,0x690A,0x6910,
- 0x6911,0x6913,0x6916,0x6917,0x6931,0x6933,0x6935,0x6938,
- 0x693B,0x6942,0x6945,0x6949,0x694E,0x6957,0x695B,0x6963,
- 0x6964,0x6965,0x6966,0x6968,0x6969,0x696C,0x6970,0x6971,
- 0x6972,0x697A,0x697B,0x697F,0x6980,0x698D,0x6992,0x6996,
- 0x6998,0x69A1,0x69A5,0x69A6,0x69A8,0x69AB,0x69AD,0x69AF,
- 0x69B7,0x69B8,0x69BA,0x69BC,0x69C5,0x69C8,0x69D1,0x69D6,
- 0x69D7,0x69E2,0x69E5,0x69EE,0x69EF,0x69F1,0x69F3,0x69F5,
- 0x69FE,0x6A00,0x6A01,0x6A03,0x6A0F,0x6A11,0x6A15,0x6A1A,
- 0x6A1D,0x6A20,0x6A24,0x6A28,0x6A30,0x6A32,
-
- /* ku 37 */
- 0x6A34,0x6A37,0x6A3B,0x6A3E,0x6A3F,0x6A45,0x6A46,0x6A49,
- 0x6A4A,0x6A4E,0x6A50,0x6A51,0x6A52,0x6A55,0x6A56,0x6A5B,
- 0x6A64,0x6A67,0x6A6A,0x6A71,0x6A73,0x6A7E,0x6A81,0x6A83,
- 0x6A86,0x6A87,0x6A89,0x6A8B,0x6A91,0x6A9B,0x6A9D,0x6A9E,
- 0x6A9F,0x6AA5,0x6AAB,0x6AAF,0x6AB0,0x6AB1,0x6AB4,0x6ABD,
- 0x6ABE,0x6ABF,0x6AC6,0x6AC9,0x6AC8,0x6ACC,0x6AD0,0x6AD4,
- 0x6AD5,0x6AD6,0x6ADC,0x6ADD,0x6AE4,0x6AE7,0x6AEC,0x6AF0,
- 0x6AF1,0x6AF2,0x6AFC,0x6AFD,0x6B02,0x6B03,0x6B06,0x6B07,
- 0x6B09,0x6B0F,0x6B10,0x6B11,0x6B17,0x6B1B,0x6B1E,0x6B24,
- 0x6B28,0x6B2B,0x6B2C,0x6B2F,0x6B35,0x6B36,0x6B3B,0x6B3F,
- 0x6B46,0x6B4A,0x6B4D,0x6B52,0x6B56,0x6B58,0x6B5D,0x6B60,
- 0x6B67,0x6B6B,0x6B6E,0x6B70,0x6B75,0x6B7D,
-
- /* ku 38 */
- 0x6B7E,0x6B82,0x6B85,0x6B97,0x6B9B,0x6B9F,0x6BA0,0x6BA2,
- 0x6BA3,0x6BA8,0x6BA9,0x6BAC,0x6BAD,0x6BAE,0x6BB0,0x6BB8,
- 0x6BB9,0x6BBD,0x6BBE,0x6BC3,0x6BC4,0x6BC9,0x6BCC,0x6BD6,
- 0x6BDA,0x6BE1,0x6BE3,0x6BE6,0x6BE7,0x6BEE,0x6BF1,0x6BF7,
- 0x6BF9,0x6BFF,0x6C02,0x6C04,0x6C05,0x6C09,0x6C0D,0x6C0E,
- 0x6C10,0x6C12,0x6C19,0x6C1F,0x6C26,0x6C27,0x6C28,0x6C2C,
- 0x6C2E,0x6C33,0x6C35,0x6C36,0x6C3A,0x6C3B,0x6C3F,0x6C4A,
- 0x6C4B,0x6C4D,0x6C4F,0x6C52,0x6C54,0x6C59,0x6C5B,0x6C5C,
- 0x6C6B,0x6C6D,0x6C6F,0x6C74,0x6C76,0x6C78,0x6C79,0x6C7B,
- 0x6C85,0x6C86,0x6C87,0x6C89,0x6C94,0x6C95,0x6C97,0x6C98,
- 0x6C9C,0x6C9F,0x6CB0,0x6CB2,0x6CB4,0x6CC2,0x6CC6,0x6CCD,
- 0x6CCF,0x6CD0,0x6CD1,0x6CD2,0x6CD4,0x6CD6,
-
- /* ku 39 */
- 0x6CDA,0x6CDC,0x6CE0,0x6CE7,0x6CE9,0x6CEB,0x6CEC,0x6CEE,
- 0x6CF2,0x6CF4,0x6D04,0x6D07,0x6D0A,0x6D0E,0x6D0F,0x6D11,
- 0x6D13,0x6D1A,0x6D26,0x6D27,0x6D28,0x6C67,0x6D2E,0x6D2F,
- 0x6D31,0x6D39,0x6D3C,0x6D3F,0x6D57,0x6D5E,0x6D5F,0x6D61,
- 0x6D65,0x6D67,0x6D6F,0x6D70,0x6D7C,0x6D82,0x6D87,0x6D91,
- 0x6D92,0x6D94,0x6D96,0x6D97,0x6D98,0x6DAA,0x6DAC,0x6DB4,
- 0x6DB7,0x6DB9,0x6DBD,0x6DBF,0x6DC4,0x6DC8,0x6DCA,0x6DCE,
- 0x6DCF,0x6DD6,0x6DDB,0x6DDD,0x6DDF,0x6DE0,0x6DE2,0x6DE5,
- 0x6DE9,0x6DEF,0x6DF0,0x6DF4,0x6DF6,0x6DFC,0x6E00,0x6E04,
- 0x6E1E,0x6E22,0x6E27,0x6E32,0x6E36,0x6E39,0x6E3B,0x6E3C,
- 0x6E44,0x6E45,0x6E48,0x6E49,0x6E4B,0x6E4F,0x6E51,0x6E52,
- 0x6E53,0x6E54,0x6E57,0x6E5C,0x6E5D,0x6E5E,
-
- /* ku 40 */
- 0x6E62,0x6E63,0x6E68,0x6E73,0x6E7B,0x6E7D,0x6E8D,0x6E93,
- 0x6E99,0x6EA0,0x6EA7,0x6EAD,0x6EAE,0x6EB1,0x6EB3,0x6EBB,
- 0x6EBF,0x6EC0,0x6EC1,0x6EC3,0x6EC7,0x6EC8,0x6ECA,0x6ECD,
- 0x6ECE,0x6ECF,0x6EEB,0x6EED,0x6EEE,0x6EF9,0x6EFB,0x6EFD,
- 0x6F04,0x6F08,0x6F0A,0x6F0C,0x6F0D,0x6F16,0x6F18,0x6F1A,
- 0x6F1B,0x6F26,0x6F29,0x6F2A,0x6F2F,0x6F30,0x6F33,0x6F36,
- 0x6F3B,0x6F3C,0x6F2D,0x6F4F,0x6F51,0x6F52,0x6F53,0x6F57,
- 0x6F59,0x6F5A,0x6F5D,0x6F5E,0x6F61,0x6F62,0x6F68,0x6F6C,
- 0x6F7D,0x6F7E,0x6F83,0x6F87,0x6F88,0x6F8B,0x6F8C,0x6F8D,
- 0x6F90,0x6F92,0x6F93,0x6F94,0x6F96,0x6F9A,0x6F9F,0x6FA0,
- 0x6FA5,0x6FA6,0x6FA7,0x6FA8,0x6FAE,0x6FAF,0x6FB0,0x6FB5,
- 0x6FB6,0x6FBC,0x6FC5,0x6FC7,0x6FC8,0x6FCA,
-
- /* ku 41 */
- 0x6FDA,0x6FDE,0x6FE8,0x6FE9,0x6FF0,0x6FF5,0x6FF9,0x6FFC,
- 0x6FFD,0x7000,0x7005,0x7006,0x7007,0x700D,0x7017,0x7020,
- 0x7023,0x702F,0x7034,0x7037,0x7039,0x703C,0x7043,0x7044,
- 0x7048,0x7049,0x704A,0x704B,0x7054,0x7055,0x705D,0x705E,
- 0x704E,0x7064,0x7065,0x706C,0x706E,0x7075,0x7076,0x707E,
- 0x7081,0x7085,0x7086,0x7094,0x7095,0x7096,0x7097,0x7098,
- 0x709B,0x70A4,0x70AB,0x70B0,0x70B1,0x70B4,0x70B7,0x70CA,
- 0x70D1,0x70D3,0x70D4,0x70D5,0x70D6,0x70D8,0x70DC,0x70E4,
- 0x70FA,0x7103,0x7104,0x7105,0x7106,0x7107,0x710B,0x710C,
- 0x710F,0x711E,0x7120,0x712B,0x712D,0x712F,0x7130,0x7131,
- 0x7138,0x7141,0x7145,0x7146,0x7147,0x714A,0x714B,0x7150,
- 0x7152,0x7157,0x715A,0x715C,0x715E,0x7160,
-
- /* ku 42 */
- 0x7168,0x7179,0x7180,0x7185,0x7187,0x718C,0x7192,0x719A,
- 0x719B,0x71A0,0x71A2,0x71AF,0x71B0,0x71B2,0x71B3,0x71BA,
- 0x71BF,0x71C0,0x71C1,0x71C4,0x71CB,0x71CC,0x71D3,0x71D6,
- 0x71D9,0x71DA,0x71DC,0x71F8,0x71FE,0x7200,0x7207,0x7208,
- 0x7209,0x7213,0x7217,0x721A,0x721D,0x721F,0x7224,0x722B,
- 0x722F,0x7234,0x7238,0x7239,0x7241,0x7242,0x7243,0x7245,
- 0x724E,0x724F,0x7250,0x7253,0x7255,0x7256,0x725A,0x725C,
- 0x725E,0x7260,0x7263,0x7268,0x726B,0x726E,0x726F,0x7271,
- 0x7277,0x7278,0x727B,0x727C,0x727F,0x7284,0x7289,0x728D,
- 0x728E,0x7293,0x729B,0x72A8,0x72AD,0x72AE,0x72B1,0x72B4,
- 0x72BE,0x72C1,0x72C7,0x72C9,0x72CC,0x72D5,0x72D6,0x72D8,
- 0x72DF,0x72E5,0x72F3,0x72F4,0x72FA,0x72FB,
-
- /* ku 43 */
- 0x72FE,0x7302,0x7304,0x7305,0x7307,0x730B,0x730D,0x7312,
- 0x7313,0x7318,0x7319,0x731E,0x7322,0x7324,0x7327,0x7328,
- 0x732C,0x7331,0x7332,0x7335,0x733A,0x733B,0x733D,0x7343,
- 0x734D,0x7350,0x7352,0x7356,0x7358,0x735D,0x735E,0x735F,
- 0x7360,0x7366,0x7367,0x7369,0x736B,0x736C,0x736E,0x736F,
- 0x7371,0x7377,0x7379,0x737C,0x7380,0x7381,0x7383,0x7385,
- 0x7386,0x738E,0x7390,0x7393,0x7395,0x7397,0x7398,0x739C,
- 0x739E,0x739F,0x73A0,0x73A2,0x73A5,0x73A6,0x73AA,0x73AB,
- 0x73AD,0x73B5,0x73B7,0x73B9,0x73BC,0x73BD,0x73BF,0x73C5,
- 0x73C6,0x73C9,0x73CB,0x73CC,0x73CF,0x73D2,0x73D3,0x73D6,
- 0x73D9,0x73DD,0x73E1,0x73E3,0x73E6,0x73E7,0x73E9,0x73F4,
- 0x73F5,0x73F7,0x73F9,0x73FA,0x73FB,0x73FD,
-
- /* ku 44 */
- 0x73FF,0x7400,0x7401,0x7404,0x7407,0x740A,0x7411,0x741A,
- 0x741B,0x7424,0x7426,0x7428,0x7429,0x742A,0x742B,0x742C,
- 0x742D,0x742E,0x742F,0x7430,0x7431,0x7439,0x7440,0x7443,
- 0x7444,0x7446,0x7447,0x744B,0x744D,0x7451,0x7452,0x7457,
- 0x745D,0x7462,0x7466,0x7467,0x7468,0x746B,0x746D,0x746E,
- 0x7471,0x7472,0x7480,0x7481,0x7485,0x7486,0x7487,0x7489,
- 0x748F,0x7490,0x7491,0x7492,0x7498,0x7499,0x749A,0x749C,
- 0x749F,0x74A0,0x74A1,0x74A3,0x74A6,0x74A8,0x74A9,0x74AA,
- 0x74AB,0x74AE,0x74AF,0x74B1,0x74B2,0x74B5,0x74B9,0x74BB,
- 0x74BF,0x74C8,0x74C9,0x74CC,0x74D0,0x74D3,0x74D8,0x74DA,
- 0x74DB,0x74DE,0x74DF,0x74E4,0x74E8,0x74EA,0x74EB,0x74EF,
- 0x74F4,0x74FA,0x74FB,0x74FC,0x74FF,0x7506,
-
- /* ku 45 */
- 0x7512,0x7516,0x7517,0x7520,0x7521,0x7524,0x7527,0x7529,
- 0x752A,0x752F,0x7536,0x7539,0x753D,0x753E,0x753F,0x7540,
- 0x7543,0x7547,0x7548,0x754E,0x7550,0x7552,0x7557,0x755E,
- 0x755F,0x7561,0x756F,0x7571,0x7579,0x757A,0x757B,0x757C,
- 0x757D,0x757E,0x7581,0x7585,0x7590,0x7592,0x7593,0x7595,
- 0x7599,0x759C,0x75A2,0x75A4,0x75B4,0x75BA,0x75BF,0x75C0,
- 0x75C1,0x75C4,0x75C6,0x75CC,0x75CE,0x75CF,0x75D7,0x75DC,
- 0x75DF,0x75E0,0x75E1,0x75E4,0x75E7,0x75EC,0x75EE,0x75EF,
- 0x75F1,0x75F9,0x7600,0x7602,0x7603,0x7604,0x7607,0x7608,
- 0x760A,0x760C,0x760F,0x7612,0x7613,0x7615,0x7616,0x7619,
- 0x761B,0x761C,0x761D,0x761E,0x7623,0x7625,0x7626,0x7629,
- 0x762D,0x7632,0x7633,0x7635,0x7638,0x7639,
-
- /* ku 46 */
- 0x763A,0x763C,0x764A,0x7640,0x7641,0x7643,0x7644,0x7645,
- 0x7649,0x764B,0x7655,0x7659,0x765F,0x7664,0x7665,0x766D,
- 0x766E,0x766F,0x7671,0x7674,0x7681,0x7685,0x768C,0x768D,
- 0x7695,0x769B,0x769C,0x769D,0x769F,0x76A0,0x76A2,0x76A3,
- 0x76A4,0x76A5,0x76A6,0x76A7,0x76A8,0x76AA,0x76AD,0x76BD,
- 0x76C1,0x76C5,0x76C9,0x76CB,0x76CC,0x76CE,0x76D4,0x76D9,
- 0x76E0,0x76E6,0x76E8,0x76EC,0x76F0,0x76F1,0x76F6,0x76F9,
- 0x76FC,0x7700,0x7706,0x770A,0x770E,0x7712,0x7714,0x7715,
- 0x7717,0x7719,0x771A,0x771C,0x7722,0x7728,0x772D,0x772E,
- 0x772F,0x7734,0x7735,0x7736,0x7739,0x773D,0x773E,0x7742,
- 0x7745,0x7746,0x774A,0x774D,0x774E,0x774F,0x7752,0x7756,
- 0x7757,0x775C,0x775E,0x775F,0x7760,0x7762,
-
- /* ku 47 */
- 0x7764,0x7767,0x776A,0x776C,0x7770,0x7772,0x7773,0x7774,
- 0x777A,0x777D,0x7780,0x7784,0x778C,0x778D,0x7794,0x7795,
- 0x7796,0x779A,0x779F,0x77A2,0x77A7,0x77AA,0x77AE,0x77AF,
- 0x77B1,0x77B5,0x77BE,0x77C3,0x77C9,0x77D1,0x77D2,0x77D5,
- 0x77D9,0x77DE,0x77DF,0x77E0,0x77E4,0x77E6,0x77EA,0x77EC,
- 0x77F0,0x77F1,0x77F4,0x77F8,0x77FB,0x7805,0x7806,0x7809,
- 0x780D,0x780E,0x7811,0x781D,0x7821,0x7822,0x7823,0x782D,
- 0x782E,0x7830,0x7835,0x7837,0x7843,0x7844,0x7847,0x7848,
- 0x784C,0x784E,0x7852,0x785C,0x785E,0x7860,0x7861,0x7863,
- 0x7864,0x7868,0x786A,0x786E,0x787A,0x787E,0x788A,0x788F,
- 0x7894,0x7898,0x78A1,0x789D,0x789E,0x789F,0x78A4,0x78A8,
- 0x78AC,0x78AD,0x78B0,0x78B1,0x78B2,0x78B3,
-
- /* ku 48 */
- 0x78BB,0x78BD,0x78BF,0x78C7,0x78C8,0x78C9,0x78CC,0x78CE,
- 0x78D2,0x78D3,0x78D5,0x78D6,0x78E4,0x78DB,0x78DF,0x78E0,
- 0x78E1,0x78E6,0x78EA,0x78F2,0x78F3,0x7900,0x78F6,0x78F7,
- 0x78FA,0x78FB,0x78FF,0x7906,0x790C,0x7910,0x791A,0x791C,
- 0x791E,0x791F,0x7920,0x7925,0x7927,0x7929,0x792D,0x7931,
- 0x7934,0x7935,0x793B,0x793D,0x793F,0x7944,0x7945,0x7946,
- 0x794A,0x794B,0x794F,0x7951,0x7954,0x7958,0x795B,0x795C,
- 0x7967,0x7969,0x796B,0x7972,0x7979,0x797B,0x797C,0x797E,
- 0x798B,0x798C,0x7991,0x7993,0x7994,0x7995,0x7996,0x7998,
- 0x799B,0x799C,0x79A1,0x79A8,0x79A9,0x79AB,0x79AF,0x79B1,
- 0x79B4,0x79B8,0x79BB,0x79C2,0x79C4,0x79C7,0x79C8,0x79CA,
- 0x79CF,0x79D4,0x79D6,0x79DA,0x79DD,0x79DE,
-
- /* ku 49 */
- 0x79E0,0x79E2,0x79E5,0x79EA,0x79EB,0x79ED,0x79F1,0x79F8,
- 0x79FC,0x7A02,0x7A03,0x7A07,0x7A09,0x7A0A,0x7A0C,0x7A11,
- 0x7A15,0x7A1B,0x7A1E,0x7A21,0x7A27,0x7A2B,0x7A2D,0x7A2F,
- 0x7A30,0x7A34,0x7A35,0x7A38,0x7A39,0x7A3A,0x7A44,0x7A45,
- 0x7A47,0x7A48,0x7A4C,0x7A55,0x7A56,0x7A59,0x7A5C,0x7A5D,
- 0x7A5F,0x7A60,0x7A65,0x7A67,0x7A6A,0x7A6D,0x7A75,0x7A78,
- 0x7A7E,0x7A80,0x7A82,0x7A85,0x7A86,0x7A8A,0x7A8B,0x7A90,
- 0x7A91,0x7A94,0x7A9E,0x7AA0,0x7AA3,0x7AAC,0x7AB3,0x7AB5,
- 0x7AB9,0x7ABB,0x7ABC,0x7AC6,0x7AC9,0x7ACC,0x7ACE,0x7AD1,
- 0x7ADB,0x7AE8,0x7AE9,0x7AEB,0x7AEC,0x7AF1,0x7AF4,0x7AFB,
- 0x7AFD,0x7AFE,0x7B07,0x7B14,0x7B1F,0x7B23,0x7B27,0x7B29,
- 0x7B2A,0x7B2B,0x7B2D,0x7B2E,0x7B2F,0x7B30,
-
- /* ku 50 */
- 0x7B31,0x7B34,0x7B3D,0x7B3F,0x7B40,0x7B41,0x7B47,0x7B4E,
- 0x7B55,0x7B60,0x7B64,0x7B66,0x7B69,0x7B6A,0x7B6D,0x7B6F,
- 0x7B72,0x7B73,0x7B77,0x7B84,0x7B89,0x7B8E,0x7B90,0x7B91,
- 0x7B96,0x7B9B,0x7B9E,0x7BA0,0x7BA5,0x7BAC,0x7BAF,0x7BB0,
- 0x7BB2,0x7BB5,0x7BB6,0x7BBA,0x7BBB,0x7BBC,0x7BBD,0x7BC2,
- 0x7BC5,0x7BC8,0x7BCA,0x7BD4,0x7BD6,0x7BD7,0x7BD9,0x7BDA,
- 0x7BDB,0x7BE8,0x7BEA,0x7BF2,0x7BF4,0x7BF5,0x7BF8,0x7BF9,
- 0x7BFA,0x7BFC,0x7BFE,0x7C01,0x7C02,0x7C03,0x7C04,0x7C06,
- 0x7C09,0x7C0B,0x7C0C,0x7C0E,0x7C0F,0x7C19,0x7C1B,0x7C20,
- 0x7C25,0x7C26,0x7C28,0x7C2C,0x7C31,0x7C33,0x7C34,0x7C36,
- 0x7C39,0x7C3A,0x7C46,0x7C4A,0x7C55,0x7C51,0x7C52,0x7C53,
- 0x7C59,0x7C5A,0x7C5B,0x7C5C,0x7C5D,0x7C5E,
-
- /* ku 51 */
- 0x7C61,0x7C63,0x7C67,0x7C69,0x7C6D,0x7C6E,0x7C70,0x7C72,
- 0x7C79,0x7C7C,0x7C7D,0x7C86,0x7C87,0x7C8F,0x7C94,0x7C9E,
- 0x7CA0,0x7CA6,0x7CB0,0x7CB6,0x7CB7,0x7CBA,0x7CBB,0x7CBC,
- 0x7CBF,0x7CC4,0x7CC7,0x7CC8,0x7CC9,0x7CCD,0x7CCF,0x7CD3,
- 0x7CD4,0x7CD5,0x7CD7,0x7CD9,0x7CDA,0x7CDD,0x7CE6,0x7CE9,
- 0x7CEB,0x7CF5,0x7D03,0x7D07,0x7D08,0x7D09,0x7D0F,0x7D11,
- 0x7D12,0x7D13,0x7D16,0x7D1D,0x7D1E,0x7D23,0x7D26,0x7D2A,
- 0x7D2D,0x7D31,0x7D3C,0x7D3D,0x7D3E,0x7D40,0x7D41,0x7D47,
- 0x7D48,0x7D4D,0x7D51,0x7D53,0x7D57,0x7D59,0x7D5A,0x7D5C,
- 0x7D5D,0x7D65,0x7D67,0x7D6A,0x7D70,0x7D78,0x7D7A,0x7D7B,
- 0x7D7F,0x7D81,0x7D82,0x7D83,0x7D85,0x7D86,0x7D88,0x7D8B,
- 0x7D8C,0x7D8D,0x7D91,0x7D96,0x7D97,0x7D9D,
-
- /* ku 52 */
- 0x7D9E,0x7DA6,0x7DA7,0x7DAA,0x7DB3,0x7DB6,0x7DB7,0x7DB9,
- 0x7DC2,0x7DC3,0x7DC4,0x7DC5,0x7DC6,0x7DCC,0x7DCD,0x7DCE,
- 0x7DD7,0x7DD9,0x7E00,0x7DE2,0x7DE5,0x7DE6,0x7DEA,0x7DEB,
- 0x7DED,0x7DF1,0x7DF5,0x7DF6,0x7DF9,0x7DFA,0x7E08,0x7E10,
- 0x7E11,0x7E15,0x7E17,0x7E1C,0x7E1D,0x7E20,0x7E27,0x7E28,
- 0x7E2C,0x7E2D,0x7E2F,0x7E33,0x7E36,0x7E3F,0x7E44,0x7E45,
- 0x7E47,0x7E4E,0x7E50,0x7E52,0x7E58,0x7E5F,0x7E61,0x7E62,
- 0x7E65,0x7E6B,0x7E6E,0x7E6F,0x7E73,0x7E78,0x7E7E,0x7E81,
- 0x7E86,0x7E87,0x7E8A,0x7E8D,0x7E91,0x7E95,0x7E98,0x7E9A,
- 0x7E9D,0x7E9E,0x7F3C,0x7F3B,0x7F3D,0x7F3E,0x7F3F,0x7F43,
- 0x7F44,0x7F47,0x7F4F,0x7F52,0x7F53,0x7F5B,0x7F5C,0x7F5D,
- 0x7F61,0x7F63,0x7F64,0x7F65,0x7F66,0x7F6D,
-
- /* ku 53 */
- 0x7F71,0x7F7D,0x7F7E,0x7F7F,0x7F80,0x7F8B,0x7F8D,0x7F8F,
- 0x7F90,0x7F91,0x7F96,0x7F97,0x7F9C,0x7FA1,0x7FA2,0x7FA6,
- 0x7FAA,0x7FAD,0x7FB4,0x7FBC,0x7FBF,0x7FC0,0x7FC3,0x7FC8,
- 0x7FCE,0x7FCF,0x7FDB,0x7FDF,0x7FE3,0x7FE5,0x7FE8,0x7FEC,
- 0x7FEE,0x7FEF,0x7FF2,0x7FFA,0x7FFD,0x7FFE,0x7FFF,0x8007,
- 0x8008,0x800A,0x800D,0x800E,0x800F,0x8011,0x8013,0x8014,
- 0x8016,0x801D,0x801E,0x801F,0x8020,0x8024,0x8026,0x802C,
- 0x802E,0x8030,0x8034,0x8035,0x8037,0x8039,0x803A,0x803C,
- 0x803E,0x8040,0x8044,0x8060,0x8064,0x8066,0x806D,0x8071,
- 0x8075,0x8081,0x8088,0x808E,0x809C,0x809E,0x80A6,0x80A7,
- 0x80AB,0x80B8,0x80B9,0x80C8,0x80CD,0x80CF,0x80D2,0x80D4,
- 0x80D5,0x80D7,0x80D8,0x80E0,0x80ED,0x80EE,
-
- /* ku 54 */
- 0x80F0,0x80F2,0x80F3,0x80F6,0x80F9,0x80FA,0x80FE,0x8103,
- 0x810B,0x8116,0x8117,0x8118,0x811C,0x811E,0x8120,0x8124,
- 0x8127,0x812C,0x8130,0x8135,0x813A,0x813C,0x8145,0x8147,
- 0x814A,0x814C,0x8152,0x8157,0x8160,0x8161,0x8167,0x8168,
- 0x8169,0x816D,0x816F,0x8177,0x8181,0x8190,0x8184,0x8185,
- 0x8186,0x818B,0x818E,0x8196,0x8198,0x819B,0x819E,0x81A2,
- 0x81AE,0x81B2,0x81B4,0x81BB,0x81CB,0x81C3,0x81C5,0x81CA,
- 0x81CE,0x81CF,0x81D5,0x81D7,0x81DB,0x81DD,0x81DE,0x81E1,
- 0x81E4,0x81EB,0x81EC,0x81F0,0x81F1,0x81F2,0x81F5,0x81F6,
- 0x81F8,0x81F9,0x81FD,0x81FF,0x8200,0x8203,0x820F,0x8213,
- 0x8214,0x8219,0x821A,0x821D,0x8221,0x8222,0x8228,0x8232,
- 0x8234,0x823A,0x8243,0x8244,0x8245,0x8246,
-
- /* ku 55 */
- 0x824B,0x824E,0x824F,0x8251,0x8256,0x825C,0x8260,0x8263,
- 0x8267,0x826D,0x8274,0x827B,0x827D,0x827F,0x8280,0x8281,
- 0x8283,0x8284,0x8287,0x8289,0x828A,0x828E,0x8291,0x8294,
- 0x8296,0x8298,0x829A,0x829B,0x82A0,0x82A1,0x82A3,0x82A4,
- 0x82A7,0x82A8,0x82A9,0x82AA,0x82AE,0x82B0,0x82B2,0x82B4,
- 0x82B7,0x82BA,0x82BC,0x82BE,0x82BF,0x82C6,0x82D0,0x82D5,
- 0x82DA,0x82E0,0x82E2,0x82E4,0x82E8,0x82EA,0x82ED,0x82EF,
- 0x82F6,0x82F7,0x82FD,0x82FE,0x8300,0x8301,0x8307,0x8308,
- 0x830A,0x830B,0x8354,0x831B,0x831D,0x831E,0x831F,0x8321,
- 0x8322,0x832C,0x832D,0x832E,0x8330,0x8333,0x8337,0x833A,
- 0x833C,0x833D,0x8342,0x8343,0x8344,0x8347,0x834D,0x834E,
- 0x8351,0x8355,0x8356,0x8357,0x8370,0x8378,
-
- /* ku 56 */
- 0x837D,0x837F,0x8380,0x8382,0x8384,0x8386,0x838D,0x8392,
- 0x8394,0x8395,0x8398,0x8399,0x839B,0x839C,0x839D,0x83A6,
- 0x83A7,0x83A9,0x83AC,0x83BE,0x83BF,0x83C0,0x83C7,0x83C9,
- 0x83CF,0x83D0,0x83D1,0x83D4,0x83DD,0x8353,0x83E8,0x83EA,
- 0x83F6,0x83F8,0x83F9,0x83FC,0x8401,0x8406,0x840A,0x840F,
- 0x8411,0x8415,0x8419,0x83AD,0x842F,0x8439,0x8445,0x8447,
- 0x8448,0x844A,0x844D,0x844F,0x8451,0x8452,0x8456,0x8458,
- 0x8459,0x845A,0x845C,0x8460,0x8464,0x8465,0x8467,0x846A,
- 0x8470,0x8473,0x8474,0x8476,0x8478,0x847C,0x847D,0x8481,
- 0x8485,0x8492,0x8493,0x8495,0x849E,0x84A6,0x84A8,0x84A9,
- 0x84AA,0x84AF,0x84B1,0x84B4,0x84BA,0x84BD,0x84BE,0x84C0,
- 0x84C2,0x84C7,0x84C8,0x84CC,0x84CF,0x84D3,
-
- /* ku 57 */
- 0x84DC,0x84E7,0x84EA,0x84EF,0x84F0,0x84F1,0x84F2,0x84F7,
- 0x8532,0x84FA,0x84FB,0x84FD,0x8502,0x8503,0x8507,0x850C,
- 0x850E,0x8510,0x851C,0x851E,0x8522,0x8523,0x8524,0x8525,
- 0x8527,0x852A,0x852B,0x852F,0x8533,0x8534,0x8536,0x853F,
- 0x8546,0x854F,0x8550,0x8551,0x8552,0x8553,0x8556,0x8559,
- 0x855C,0x855D,0x855E,0x855F,0x8560,0x8561,0x8562,0x8564,
- 0x856B,0x856F,0x8579,0x857A,0x857B,0x857D,0x857F,0x8581,
- 0x8585,0x8586,0x8589,0x858B,0x858C,0x858F,0x8593,0x8598,
- 0x859D,0x859F,0x85A0,0x85A2,0x85A5,0x85A7,0x85B4,0x85B6,
- 0x85B7,0x85B8,0x85BC,0x85BD,0x85BE,0x85BF,0x85C2,0x85C7,
- 0x85CA,0x85CB,0x85CE,0x85AD,0x85D8,0x85DA,0x85DF,0x85E0,
- 0x85E6,0x85E8,0x85ED,0x85F3,0x85F6,0x85FC,
-
- /* ku 58 */
- 0x85FF,0x8600,0x8604,0x8605,0x860D,0x860E,0x8610,0x8611,
- 0x8612,0x8618,0x8619,0x861B,0x861E,0x8621,0x8627,0x8629,
- 0x8636,0x8638,0x863A,0x863C,0x863D,0x8640,0x8642,0x8646,
- 0x8652,0x8653,0x8656,0x8657,0x8658,0x8659,0x865D,0x8660,
- 0x8661,0x8662,0x8663,0x8664,0x8669,0x866C,0x866F,0x8675,
- 0x8676,0x8677,0x867A,0x868D,0x8691,0x8696,0x8698,0x869A,
- 0x869C,0x86A1,0x86A6,0x86A7,0x86A8,0x86AD,0x86B1,0x86B3,
- 0x86B4,0x86B5,0x86B7,0x86B8,0x86B9,0x86BF,0x86C0,0x86C1,
- 0x86C3,0x86C5,0x86D1,0x86D2,0x86D5,0x86D7,0x86DA,0x86DC,
- 0x86E0,0x86E3,0x86E5,0x86E7,0x8688,0x86FA,0x86FC,0x86FD,
- 0x8704,0x8705,0x8707,0x870B,0x870E,0x870F,0x8710,0x8713,
- 0x8714,0x8719,0x871E,0x871F,0x8721,0x8723,
-
- /* ku 59 */
- 0x8728,0x872E,0x872F,0x8731,0x8732,0x8739,0x873A,0x873C,
- 0x873D,0x873E,0x8740,0x8743,0x8745,0x874D,0x8758,0x875D,
- 0x8761,0x8764,0x8765,0x876F,0x8771,0x8772,0x877B,0x8783,
- 0x8784,0x8785,0x8786,0x8787,0x8788,0x8789,0x878B,0x878C,
- 0x8790,0x8793,0x8795,0x8797,0x8798,0x8799,0x879E,0x87A0,
- 0x87A3,0x87A7,0x87AC,0x87AD,0x87AE,0x87B1,0x87B5,0x87BE,
- 0x87BF,0x87C1,0x87C8,0x87C9,0x87CA,0x87CE,0x87D5,0x87D6,
- 0x87D9,0x87DA,0x87DC,0x87DF,0x87E2,0x87E3,0x87E4,0x87EA,
- 0x87EB,0x87ED,0x87F1,0x87F3,0x87F8,0x87FA,0x87FF,0x8801,
- 0x8803,0x8806,0x8809,0x880A,0x880B,0x8810,0x8819,0x8812,
- 0x8813,0x8814,0x8818,0x881A,0x881B,0x881C,0x881E,0x881F,
- 0x8828,0x882D,0x882E,0x8830,0x8832,0x8835,
-
- /* ku 60 */
- 0x883A,0x883C,0x8841,0x8843,0x8845,0x8848,0x8849,0x884A,
- 0x884B,0x884E,0x8851,0x8855,0x8856,0x8858,0x885A,0x885C,
- 0x885F,0x8860,0x8864,0x8869,0x8871,0x8879,0x887B,0x8880,
- 0x8898,0x889A,0x889B,0x889C,0x889F,0x88A0,0x88A8,0x88AA,
- 0x88BA,0x88BD,0x88BE,0x88C0,0x88CA,0x88CB,0x88CC,0x88CD,
- 0x88CE,0x88D1,0x88D2,0x88D3,0x88DB,0x88DE,0x88E7,0x88EF,
- 0x88F0,0x88F1,0x88F5,0x88F7,0x8901,0x8906,0x890D,0x890E,
- 0x890F,0x8915,0x8916,0x8918,0x8919,0x891A,0x891C,0x8920,
- 0x8926,0x8927,0x8928,0x8930,0x8931,0x8932,0x8935,0x8939,
- 0x893A,0x893E,0x8940,0x8942,0x8945,0x8946,0x8949,0x894F,
- 0x8952,0x8957,0x895A,0x895B,0x895C,0x8961,0x8962,0x8963,
- 0x896B,0x896E,0x8970,0x8973,0x8975,0x897A,
-
- /* ku 61 */
- 0x897B,0x897C,0x897D,0x8989,0x898D,0x8990,0x8994,0x8995,
- 0x899B,0x899C,0x899F,0x89A0,0x89A5,0x89B0,0x89B4,0x89B5,
- 0x89B6,0x89B7,0x89BC,0x89D4,0x89D5,0x89D6,0x89D7,0x89D8,
- 0x89E5,0x89E9,0x89EB,0x89ED,0x89F1,0x89F3,0x89F6,0x89F9,
- 0x89FD,0x89FF,0x8A04,0x8A05,0x8A07,0x8A0F,0x8A11,0x8A12,
- 0x8A14,0x8A15,0x8A1E,0x8A20,0x8A22,0x8A24,0x8A26,0x8A2B,
- 0x8A2C,0x8A2F,0x8A35,0x8A37,0x8A3D,0x8A3E,0x8A40,0x8A43,
- 0x8A45,0x8A47,0x8A49,0x8A4D,0x8A4E,0x8A53,0x8A56,0x8A57,
- 0x8A58,0x8A5C,0x8A5D,0x8A61,0x8A65,0x8A67,0x8A75,0x8A76,
- 0x8A77,0x8A79,0x8A7A,0x8A7B,0x8A7E,0x8A7F,0x8A80,0x8A83,
- 0x8A86,0x8A8B,0x8A8F,0x8A90,0x8A92,0x8A96,0x8A97,0x8A99,
- 0x8A9F,0x8AA7,0x8AA9,0x8AAE,0x8AAF,0x8AB3,
-
- /* ku 62 */
- 0x8AB6,0x8AB7,0x8ABB,0x8ABE,0x8AC3,0x8AC6,0x8AC8,0x8AC9,
- 0x8ACA,0x8AD1,0x8AD3,0x8AD4,0x8AD5,0x8AD7,0x8ADD,0x8ADF,
- 0x8AEC,0x8AF0,0x8AF4,0x8AF5,0x8AF6,0x8AFC,0x8AFF,0x8B05,
- 0x8B06,0x8B0B,0x8B11,0x8B1C,0x8B1E,0x8B1F,0x8B0A,0x8B2D,
- 0x8B30,0x8B37,0x8B3C,0x8B42,0x8B43,0x8B44,0x8B45,0x8B46,
- 0x8B48,0x8B52,0x8B53,0x8B54,0x8B59,0x8B4D,0x8B5E,0x8B63,
- 0x8B6D,0x8B76,0x8B78,0x8B79,0x8B7C,0x8B7E,0x8B81,0x8B84,
- 0x8B85,0x8B8B,0x8B8D,0x8B8F,0x8B94,0x8B95,0x8B9C,0x8B9E,
- 0x8B9F,0x8C38,0x8C39,0x8C3D,0x8C3E,0x8C45,0x8C47,0x8C49,
- 0x8C4B,0x8C4F,0x8C51,0x8C53,0x8C54,0x8C57,0x8C58,0x8C5B,
- 0x8C5D,0x8C59,0x8C63,0x8C64,0x8C66,0x8C68,0x8C69,0x8C6D,
- 0x8C73,0x8C75,0x8C76,0x8C7B,0x8C7E,0x8C86,
-
- /* ku 63 */
- 0x8C87,0x8C8B,0x8C90,0x8C92,0x8C93,0x8C99,0x8C9B,0x8C9C,
- 0x8CA4,0x8CB9,0x8CBA,0x8CC5,0x8CC6,0x8CC9,0x8CCB,0x8CCF,
- 0x8CD6,0x8CD5,0x8CD9,0x8CDD,0x8CE1,0x8CE8,0x8CEC,0x8CEF,
- 0x8CF0,0x8CF2,0x8CF5,0x8CF7,0x8CF8,0x8CFE,0x8CFF,0x8D01,
- 0x8D03,0x8D09,0x8D12,0x8D17,0x8D1B,0x8D65,0x8D69,0x8D6C,
- 0x8D6E,0x8D7F,0x8D82,0x8D84,0x8D88,0x8D8D,0x8D90,0x8D91,
- 0x8D95,0x8D9E,0x8D9F,0x8DA0,0x8DA6,0x8DAB,0x8DAC,0x8DAF,
- 0x8DB2,0x8DB5,0x8DB7,0x8DB9,0x8DBB,0x8DC0,0x8DC5,0x8DC6,
- 0x8DC7,0x8DC8,0x8DCA,0x8DCE,0x8DD1,0x8DD4,0x8DD5,0x8DD7,
- 0x8DD9,0x8DE4,0x8DE5,0x8DE7,0x8DEC,0x8DF0,0x8DBC,0x8DF1,
- 0x8DF2,0x8DF4,0x8DFD,0x8E01,0x8E04,0x8E05,0x8E06,0x8E0B,
- 0x8E11,0x8E14,0x8E16,0x8E20,0x8E21,0x8E22,
-
- /* ku 64 */
- 0x8E23,0x8E26,0x8E27,0x8E31,0x8E33,0x8E36,0x8E37,0x8E38,
- 0x8E39,0x8E3D,0x8E40,0x8E41,0x8E4B,0x8E4D,0x8E4E,0x8E4F,
- 0x8E54,0x8E5B,0x8E5C,0x8E5D,0x8E5E,0x8E61,0x8E62,0x8E69,
- 0x8E6C,0x8E6D,0x8E6F,0x8E70,0x8E71,0x8E79,0x8E7A,0x8E7B,
- 0x8E82,0x8E83,0x8E89,0x8E90,0x8E92,0x8E95,0x8E9A,0x8E9B,
- 0x8E9D,0x8E9E,0x8EA2,0x8EA7,0x8EA9,0x8EAD,0x8EAE,0x8EB3,
- 0x8EB5,0x8EBA,0x8EBB,0x8EC0,0x8EC1,0x8EC3,0x8EC4,0x8EC7,
- 0x8ECF,0x8ED1,0x8ED4,0x8EDC,0x8EE8,0x8EEE,0x8EF0,0x8EF1,
- 0x8EF7,0x8EF9,0x8EFA,0x8EED,0x8F00,0x8F02,0x8F07,0x8F08,
- 0x8F0F,0x8F10,0x8F16,0x8F17,0x8F18,0x8F1E,0x8F20,0x8F21,
- 0x8F23,0x8F25,0x8F27,0x8F28,0x8F2C,0x8F2D,0x8F2E,0x8F34,
- 0x8F35,0x8F36,0x8F37,0x8F3A,0x8F40,0x8F41,
-
- /* ku 65 */
- 0x8F43,0x8F47,0x8F4F,0x8F51,0x8F52,0x8F53,0x8F54,0x8F55,
- 0x8F58,0x8F5D,0x8F5E,0x8F65,0x8F9D,0x8FA0,0x8FA1,0x8FA4,
- 0x8FA5,0x8FA6,0x8FB5,0x8FB6,0x8FB8,0x8FBE,0x8FC0,0x8FC1,
- 0x8FC6,0x8FCA,0x8FCB,0x8FCD,0x8FD0,0x8FD2,0x8FD3,0x8FD5,
- 0x8FE0,0x8FE3,0x8FE4,0x8FE8,0x8FEE,0x8FF1,0x8FF5,0x8FF6,
- 0x8FFB,0x8FFE,0x9002,0x9004,0x9008,0x900C,0x9018,0x901B,
- 0x9028,0x9029,0x902F,0x902A,0x902C,0x902D,0x9033,0x9034,
- 0x9037,0x903F,0x9043,0x9044,0x904C,0x905B,0x905D,0x9062,
- 0x9066,0x9067,0x906C,0x9070,0x9074,0x9079,0x9085,0x9088,
- 0x908B,0x908C,0x908E,0x9090,0x9095,0x9097,0x9098,0x9099,
- 0x909B,0x90A0,0x90A1,0x90A2,0x90A5,0x90B0,0x90B2,0x90B3,
- 0x90B4,0x90B6,0x90BD,0x90CC,0x90BE,0x90C3,
-
- /* ku 66 */
- 0x90C4,0x90C5,0x90C7,0x90C8,0x90D5,0x90D7,0x90D8,0x90D9,
- 0x90DC,0x90DD,0x90DF,0x90E5,0x90D2,0x90F6,0x90EB,0x90EF,
- 0x90F0,0x90F4,0x90FE,0x90FF,0x9100,0x9104,0x9105,0x9106,
- 0x9108,0x910D,0x9110,0x9114,0x9116,0x9117,0x9118,0x911A,
- 0x911C,0x911E,0x9120,0x9125,0x9122,0x9123,0x9127,0x9129,
- 0x912E,0x912F,0x9131,0x9134,0x9136,0x9137,0x9139,0x913A,
- 0x913C,0x913D,0x9143,0x9147,0x9148,0x914F,0x9153,0x9157,
- 0x9159,0x915A,0x915B,0x9161,0x9164,0x9167,0x916D,0x9174,
- 0x9179,0x917A,0x917B,0x9181,0x9183,0x9185,0x9186,0x918A,
- 0x918E,0x9191,0x9193,0x9194,0x9195,0x9198,0x919E,0x91A1,
- 0x91A6,0x91A8,0x91AC,0x91AD,0x91AE,0x91B0,0x91B1,0x91B2,
- 0x91B3,0x91B6,0x91BB,0x91BC,0x91BD,0x91BF,
-
- /* ku 67 */
- 0x91C2,0x91C3,0x91C5,0x91D3,0x91D4,0x91D7,0x91D9,0x91DA,
- 0x91DE,0x91E4,0x91E5,0x91E9,0x91EA,0x91EC,0x91ED,0x91EE,
- 0x91EF,0x91F0,0x91F1,0x91F7,0x91F9,0x91FB,0x91FD,0x9200,
- 0x9201,0x9204,0x9205,0x9206,0x9207,0x9209,0x920A,0x920C,
- 0x9210,0x9212,0x9213,0x9216,0x9218,0x921C,0x921D,0x9223,
- 0x9224,0x9225,0x9226,0x9228,0x922E,0x922F,0x9230,0x9233,
- 0x9235,0x9236,0x9238,0x9239,0x923A,0x923C,0x923E,0x9240,
- 0x9242,0x9243,0x9246,0x9247,0x924A,0x924D,0x924E,0x924F,
- 0x9251,0x9258,0x9259,0x925C,0x925D,0x9260,0x9261,0x9265,
- 0x9267,0x9268,0x9269,0x926E,0x926F,0x9270,0x9275,0x9276,
- 0x9277,0x9278,0x9279,0x927B,0x927C,0x927D,0x927F,0x9288,
- 0x9289,0x928A,0x928D,0x928E,0x9292,0x9297,
-
- /* ku 68 */
- 0x9299,0x929F,0x92A0,0x92A4,0x92A5,0x92A7,0x92A8,0x92AB,
- 0x92AF,0x92B2,0x92B6,0x92B8,0x92BA,0x92BB,0x92BC,0x92BD,
- 0x92BF,0x92C0,0x92C1,0x92C2,0x92C3,0x92C5,0x92C6,0x92C7,
- 0x92C8,0x92CB,0x92CC,0x92CD,0x92CE,0x92D0,0x92D3,0x92D5,
- 0x92D7,0x92D8,0x92D9,0x92DC,0x92DD,0x92DF,0x92E0,0x92E1,
- 0x92E3,0x92E5,0x92E7,0x92E8,0x92EC,0x92EE,0x92F0,0x92F9,
- 0x92FB,0x92FF,0x9300,0x9302,0x9308,0x930D,0x9311,0x9314,
- 0x9315,0x931C,0x931D,0x931E,0x931F,0x9321,0x9324,0x9325,
- 0x9327,0x9329,0x932A,0x9333,0x9334,0x9336,0x9337,0x9347,
- 0x9348,0x9349,0x9350,0x9351,0x9352,0x9355,0x9357,0x9358,
- 0x935A,0x935E,0x9364,0x9365,0x9367,0x9369,0x936A,0x936D,
- 0x936F,0x9370,0x9371,0x9373,0x9374,0x9376,
-
- /* ku 69 */
- 0x937A,0x937D,0x937F,0x9380,0x9381,0x9382,0x9388,0x938A,
- 0x938B,0x938D,0x938F,0x9392,0x9395,0x9398,0x939B,0x939E,
- 0x93A1,0x93A3,0x93A4,0x93A6,0x93A8,0x93AB,0x93B4,0x93B5,
- 0x93B6,0x93BA,0x93A9,0x93C1,0x93C4,0x93C5,0x93C6,0x93C7,
- 0x93C9,0x93CA,0x93CB,0x93CC,0x93CD,0x93D3,0x93D9,0x93DC,
- 0x93DE,0x93DF,0x93E2,0x93E6,0x93E7,0x93F9,0x93F7,0x93F8,
- 0x93FA,0x93FB,0x93FD,0x9401,0x9402,0x9404,0x9408,0x9409,
- 0x940D,0x940E,0x940F,0x9415,0x9416,0x9417,0x941F,0x942E,
- 0x942F,0x9431,0x9432,0x9433,0x9434,0x943B,0x943F,0x943D,
- 0x9443,0x9445,0x9448,0x944A,0x944C,0x9455,0x9459,0x945C,
- 0x945F,0x9461,0x9463,0x9468,0x946B,0x946D,0x946E,0x946F,
- 0x9471,0x9472,0x9484,0x9483,0x9578,0x9579,
-
- /* ku 70 */
- 0x957E,0x9584,0x9588,0x958C,0x958D,0x958E,0x959D,0x959E,
- 0x959F,0x95A1,0x95A6,0x95A9,0x95AB,0x95AC,0x95B4,0x95B6,
- 0x95BA,0x95BD,0x95BF,0x95C6,0x95C8,0x95C9,0x95CB,0x95D0,
- 0x95D1,0x95D2,0x95D3,0x95D9,0x95DA,0x95DD,0x95DE,0x95DF,
- 0x95E0,0x95E4,0x95E6,0x961D,0x961E,0x9622,0x9624,0x9625,
- 0x9626,0x962C,0x9631,0x9633,0x9637,0x9638,0x9639,0x963A,
- 0x963C,0x963D,0x9641,0x9652,0x9654,0x9656,0x9657,0x9658,
- 0x9661,0x966E,0x9674,0x967B,0x967C,0x967E,0x967F,0x9681,
- 0x9682,0x9683,0x9684,0x9689,0x9691,0x9696,0x969A,0x969D,
- 0x969F,0x96A4,0x96A5,0x96A6,0x96A9,0x96AE,0x96AF,0x96B3,
- 0x96BA,0x96CA,0x96D2,0x5DB2,0x96D8,0x96DA,0x96DD,0x96DE,
- 0x96DF,0x96E9,0x96EF,0x96F1,0x96FA,0x9702,
-
- /* ku 71 */
- 0x9703,0x9705,0x9709,0x971A,0x971B,0x971D,0x9721,0x9722,
- 0x9723,0x9728,0x9731,0x9733,0x9741,0x9743,0x974A,0x974E,
- 0x974F,0x9755,0x9757,0x9758,0x975A,0x975B,0x9763,0x9767,
- 0x976A,0x976E,0x9773,0x9776,0x9777,0x9778,0x977B,0x977D,
- 0x977F,0x9780,0x9789,0x9795,0x9796,0x9797,0x9799,0x979A,
- 0x979E,0x979F,0x97A2,0x97AC,0x97AE,0x97B1,0x97B2,0x97B5,
- 0x97B6,0x97B8,0x97B9,0x97BA,0x97BC,0x97BE,0x97BF,0x97C1,
- 0x97C4,0x97C5,0x97C7,0x97C9,0x97CA,0x97CC,0x97CD,0x97CE,
- 0x97D0,0x97D1,0x97D4,0x97D7,0x97D8,0x97D9,0x97DD,0x97DE,
- 0x97E0,0x97DB,0x97E1,0x97E4,0x97EF,0x97F1,0x97F4,0x97F7,
- 0x97F8,0x97FA,0x9807,0x980A,0x9819,0x980D,0x980E,0x9814,
- 0x9816,0x981C,0x981E,0x9820,0x9823,0x9826,
-
- /* ku 72 */
- 0x982B,0x982E,0x982F,0x9830,0x9832,0x9833,0x9835,0x9825,
- 0x983E,0x9844,0x9847,0x984A,0x9851,0x9852,0x9853,0x9856,
- 0x9857,0x9859,0x985A,0x9862,0x9863,0x9865,0x9866,0x986A,
- 0x986C,0x98AB,0x98AD,0x98AE,0x98B0,0x98B4,0x98B7,0x98B8,
- 0x98BA,0x98BB,0x98BF,0x98C2,0x98C5,0x98C8,0x98CC,0x98E1,
- 0x98E3,0x98E5,0x98E6,0x98E7,0x98EA,0x98F3,0x98F6,0x9902,
- 0x9907,0x9908,0x9911,0x9915,0x9916,0x9917,0x991A,0x991B,
- 0x991C,0x991F,0x9922,0x9926,0x9927,0x992B,0x9931,0x9932,
- 0x9933,0x9934,0x9935,0x9939,0x993A,0x993B,0x993C,0x9940,
- 0x9941,0x9946,0x9947,0x9948,0x994D,0x994E,0x9954,0x9958,
- 0x9959,0x995B,0x995C,0x995E,0x995F,0x9960,0x999B,0x999D,
- 0x999F,0x99A6,0x99B0,0x99B1,0x99B2,0x99B5,
-
- /* ku 73 */
- 0x99B9,0x99BA,0x99BD,0x99BF,0x99C3,0x99C9,0x99D3,0x99D4,
- 0x99D9,0x99DA,0x99DC,0x99DE,0x99E7,0x99EA,0x99EB,0x99EC,
- 0x99F0,0x99F4,0x99F5,0x99F9,0x99FD,0x99FE,0x9A02,0x9A03,
- 0x9A04,0x9A0B,0x9A0C,0x9A10,0x9A11,0x9A16,0x9A1E,0x9A20,
- 0x9A22,0x9A23,0x9A24,0x9A27,0x9A2D,0x9A2E,0x9A33,0x9A35,
- 0x9A36,0x9A38,0x9A47,0x9A41,0x9A44,0x9A4A,0x9A4B,0x9A4C,
- 0x9A4E,0x9A51,0x9A54,0x9A56,0x9A5D,0x9AAA,0x9AAC,0x9AAE,
- 0x9AAF,0x9AB2,0x9AB4,0x9AB5,0x9AB6,0x9AB9,0x9ABB,0x9ABE,
- 0x9ABF,0x9AC1,0x9AC3,0x9AC6,0x9AC8,0x9ACE,0x9AD0,0x9AD2,
- 0x9AD5,0x9AD6,0x9AD7,0x9ADB,0x9ADC,0x9AE0,0x9AE4,0x9AE5,
- 0x9AE7,0x9AE9,0x9AEC,0x9AF2,0x9AF3,0x9AF5,0x9AF9,0x9AFA,
- 0x9AFD,0x9AFF,0x9B00,0x9B01,0x9B02,0x9B03,
-
- /* ku 74 */
- 0x9B04,0x9B05,0x9B08,0x9B09,0x9B0B,0x9B0C,0x9B0D,0x9B0E,
- 0x9B10,0x9B12,0x9B16,0x9B19,0x9B1B,0x9B1C,0x9B20,0x9B26,
- 0x9B2B,0x9B2D,0x9B33,0x9B34,0x9B35,0x9B37,0x9B39,0x9B3A,
- 0x9B3D,0x9B48,0x9B4B,0x9B4C,0x9B55,0x9B56,0x9B57,0x9B5B,
- 0x9B5E,0x9B61,0x9B63,0x9B65,0x9B66,0x9B68,0x9B6A,0x9B6B,
- 0x9B6C,0x9B6D,0x9B6E,0x9B73,0x9B75,0x9B77,0x9B78,0x9B79,
- 0x9B7F,0x9B80,0x9B84,0x9B85,0x9B86,0x9B87,0x9B89,0x9B8A,
- 0x9B8B,0x9B8D,0x9B8F,0x9B90,0x9B94,0x9B9A,0x9B9D,0x9B9E,
- 0x9BA6,0x9BA7,0x9BA9,0x9BAC,0x9BB0,0x9BB1,0x9BB2,0x9BB7,
- 0x9BB8,0x9BBB,0x9BBC,0x9BBE,0x9BBF,0x9BC1,0x9BC7,0x9BC8,
- 0x9BCE,0x9BD0,0x9BD7,0x9BD8,0x9BDD,0x9BDF,0x9BE5,0x9BE7,
- 0x9BEA,0x9BEB,0x9BEF,0x9BF3,0x9BF7,0x9BF8,
-
- /* ku 75 */
- 0x9BF9,0x9BFA,0x9BFD,0x9BFF,0x9C00,0x9C02,0x9C0B,0x9C0F,
- 0x9C11,0x9C16,0x9C18,0x9C19,0x9C1A,0x9C1C,0x9C1E,0x9C22,
- 0x9C23,0x9C26,0x9C27,0x9C28,0x9C29,0x9C2A,0x9C31,0x9C35,
- 0x9C36,0x9C37,0x9C3D,0x9C41,0x9C43,0x9C44,0x9C45,0x9C49,
- 0x9C4A,0x9C4E,0x9C4F,0x9C50,0x9C53,0x9C54,0x9C56,0x9C58,
- 0x9C5B,0x9C5D,0x9C5E,0x9C5F,0x9C63,0x9C69,0x9C6A,0x9C5C,
- 0x9C6B,0x9C68,0x9C6E,0x9C70,0x9C72,0x9C75,0x9C77,0x9C7B,
- 0x9CE6,0x9CF2,0x9CF7,0x9CF9,0x9D0B,0x9D02,0x9D11,0x9D17,
- 0x9D18,0x9D1C,0x9D1D,0x9D1E,0x9D2F,0x9D30,0x9D32,0x9D33,
- 0x9D34,0x9D3A,0x9D3C,0x9D45,0x9D3D,0x9D42,0x9D43,0x9D47,
- 0x9D4A,0x9D53,0x9D54,0x9D5F,0x9D63,0x9D62,0x9D65,0x9D69,
- 0x9D6A,0x9D6B,0x9D70,0x9D76,0x9D77,0x9D7B,
-
- /* ku 76 */
- 0x9D7C,0x9D7E,0x9D83,0x9D84,0x9D86,0x9D8A,0x9D8D,0x9D8E,
- 0x9D92,0x9D93,0x9D95,0x9D96,0x9D97,0x9D98,0x9DA1,0x9DAA,
- 0x9DAC,0x9DAE,0x9DB1,0x9DB5,0x9DB9,0x9DBC,0x9DBF,0x9DC3,
- 0x9DC7,0x9DC9,0x9DCA,0x9DD4,0x9DD5,0x9DD6,0x9DD7,0x9DDA,
- 0x9DDE,0x9DDF,0x9DE0,0x9DE5,0x9DE7,0x9DE9,0x9DEB,0x9DEE,
- 0x9DF0,0x9DF3,0x9DF4,0x9DFE,0x9E0A,0x9E02,0x9E07,0x9E0E,
- 0x9E10,0x9E11,0x9E12,0x9E15,0x9E16,0x9E19,0x9E1C,0x9E1D,
- 0x9E7A,0x9E7B,0x9E7C,0x9E80,0x9E82,0x9E83,0x9E84,0x9E85,
- 0x9E87,0x9E8E,0x9E8F,0x9E96,0x9E98,0x9E9B,0x9E9E,0x9EA4,
- 0x9EA8,0x9EAC,0x9EAE,0x9EAF,0x9EB0,0x9EB3,0x9EB4,0x9EB5,
- 0x9EC6,0x9EC8,0x9ECB,0x9ED5,0x9EDF,0x9EE4,0x9EE7,0x9EEC,
- 0x9EED,0x9EEE,0x9EF0,0x9EF1,0x9EF2,0x9EF5,
-
- /* ku 77 */
- 0x9EF8,0x9EFF,0x9F02,0x9F03,0x9F09,0x9F0F,0x9F10,0x9F11,
- 0x9F12,0x9F14,0x9F16,0x9F17,0x9F19,0x9F1A,0x9F1B,0x9F1F,
- 0x9F22,0x9F26,0x9F2A,0x9F2B,0x9F2F,0x9F31,0x9F32,0x9F34,
- 0x9F37,0x9F39,0x9F3A,0x9F3C,0x9F3D,0x9F3F,0x9F41,0x9F43,
- 0x9F44,0x9F45,0x9F46,0x9F47,0x9F53,0x9F55,0x9F56,0x9F57,
- 0x9F58,0x9F5A,0x9F5D,0x9F5E,0x9F68,0x9F69,0x9F6D,0x9F6E,
- 0x9F6F,0x9F70,0x9F71,0x9F73,0x9F75,0x9F7A,0x9F7D,0x9F8F,
- 0x9F90,0x9F91,0x9F92,0x9F94,0x9F96,0x9F97,0x9F9E,0x9FA1,
- 0x9FA2,0x9FA3,0x9FA5
-};
-
-static const int jisx0212_ucs_table_size = (sizeof (jisx0212_ucs_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a1_jis_table[] = {
- /* 0000h */
- 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
- 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
- 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
- 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
- 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
- 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
- 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
- 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
- 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
- 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
- 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
- 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
- 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
- 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
- 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
- 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xA2C2,0x2171,0x2172,0xA2F0,0x0000,0xA2C3,0x2178,
- 0x212F,0xA2ED,0xA2EC,0x0000,0x224C,0x0000,0xA2EE,0xA2B4,
- 0x216B,0x215E,0x0000,0x0000,0x212D,0x0000,0x2279,0x0000,
- 0xA2B1,0x0000,0xA2EB,0x0000,0x0000,0x0000,0x0000,0xA2C4,
- 0xAAA2,0xAAA1,0xAAA4,0xAAAA,0xAAA3,0xAAA9,0xA9A1,0xAAAE,
- 0xAAB2,0xAAB1,0xAAB4,0xAAB3,0xAAC0,0xAABF,0xAAC2,0xAAC1,
- 0x0000,0xAAD0,0xAAD2,0xAAD1,0xAAD4,0xAAD8,0xAAD3,0x215F,
- 0xA9AC,0xAAE3,0xAAE2,0xAAE5,0xAAE4,0xAAF2,0xA9B0,0xA9CE,
- 0xABA2,0xABA1,0xABA4,0xABAA,0xABA3,0xABA9,0xA9C1,0xABAE,
- 0xABB2,0xABB1,0xABB4,0xABB3,0xABC0,0xABBF,0xABC2,0xABC1,
- 0xA9C3,0xABD0,0xABD2,0xABD1,0xABD4,0xABD8,0xABD3,0x2160,
- 0xA9CC,0xABE3,0xABE2,0xABE5,0xABE4,0xABF2,0xA9D0,0xABF3,
-
- /* 0100h */
- 0xAAA7,0xABA7,0xAAA5,0xABA5,0xAAA8,0xABA8,0xAAAB,0xABAB,
- 0xAAAC,0xABAC,0xAAAF,0xABAF,0xAAAD,0xABAD,0xAAB0,0xABB0,
- 0xA9A2,0xA9C2,0xAAB7,0xABB7,0x0000,0x0000,0xAAB6,0xABB6,
- 0xAAB8,0xABB8,0xAAB5,0xABB5,0xAABA,0xABBA,0xAABB,0xABBB,
- 0xAABD,0xABBD,0xAABC,0x0000,0xAABE,0xABBE,0xA9A4,0xA9C4,
- 0xAAC7,0xABC7,0xAAC5,0xABC5,0x0000,0x0000,0xAAC6,0xABC6,
- 0xAAC4,0xA9C5,0xA9A6,0xA9C6,0xAAC8,0xABC8,0xAAC9,0xABC9,
- 0xA9C7,0xAACA,0xABCA,0xAACC,0xABCC,0xAACB,0xABCB,0xA9A9,
- 0xA9C9,0xA9A8,0xA9C8,0xAACD,0xABCD,0xAACF,0xABCF,0xAACE,
- 0xABCE,0xA9CA,0xA9AB,0xA9CB,0xAAD7,0xABD7,0x0000,0x0000,
- 0xAAD6,0xABD6,0xA9AD,0xA9CD,0xAAD9,0xABD9,0xAADB,0xABDB,
- 0xAADA,0xABDA,0xAADC,0xABDC,0xAADD,0xABDD,0xAADF,0xABDF,
- 0xAADE,0xABDE,0xAAE1,0xABE1,0xAAE0,0xABE0,0xA9AF,0xA9CF,
- 0xAAEC,0xABEC,0xAAE9,0xABE9,0xAAE6,0xABE6,0xAAEB,0xABEB,
- 0xAAE8,0xABE8,0xAAEA,0xABEA,0xAAF1,0xABF1,0xAAF4,0xABF4,
- 0xAAF3,0xAAF5,0xABF5,0xAAF7,0xABF7,0xAAF6,0xABF6,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xAAA6,0xABA6,0xAAC3,
- 0xABC3,0xAAD5,0xABD5,0xAAE7,0xABE7,0xAAF0,0xABF0,0xAAED,
- 0xABED,0xAAEF,0xABEF,0xAAEE,0xABEE,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xABB9,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 0200h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xA2B0,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xA2AF,0xA2B2,0xA2B6,0xA2B5,0x0000,0xA2B3,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 0300h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xA2B8,0xA2B9,0xA6E1,0x0000,
- 0xA6E2,0xA6E3,0xA6E4,0x0000,0xA6E7,0x0000,0xA6E9,0xA6EC,
- 0xA6F6,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626,0x2627,
- 0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E,0x262F,
- 0x2630,0x2631,0x0000,0x2632,0x2633,0x2634,0x2635,0x2636,
- 0x2637,0x2638,0xA6E5,0xA6EA,0xA6F1,0xA6F2,0xA6F3,0xA6F4,
- 0xA6FB,0x2641,0x2642,0x2643,0x2644,0x2645,0x2646,0x2647,
- 0x2648,0x2649,0x264A,0x264B,0x264C,0x264D,0x264E,0x264F,
- 0x2650,0x2651,0xA6F8,0x2652,0x2653,0x2654,0x2655,0x2656,
- 0x2657,0x2658,0xA6F5,0xA6FA,0xA6F7,0xA6F9,0xA6FC,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 0400h */
- 0x0000,0x2727,0xA7C2,0xA7C3,0xA7C4,0xA7C5,0xA7C6,0xA7C7,
- 0xA7C8,0xA7C9,0xA7CA,0xA7CB,0xA7CC,0x0000,0xA7CD,0xA7CE,
- 0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2728,0x2729,
- 0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,0x2730,0x2731,
- 0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,0x2738,0x2739,
- 0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,0x2740,0x2741,
- 0x2751,0x2752,0x2753,0x2754,0x2755,0x2756,0x2758,0x2759,
- 0x275A,0x275B,0x275C,0x275D,0x275E,0x275F,0x2760,0x2761,
- 0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,0x2768,0x2769,
- 0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771,
- 0x0000,0x2757,0xA7F2,0xA7F3,0xA7F4,0xA7F5,0xA7F6,0xA7F7,
- 0xA7F8,0xA7F9,0xA7FA,0xA7FB,0xA7FC,0x0000,0xA7FD,0xA7FE
-};
-static const int ucs_a1_jis_table_min = 0x0000;
-static const int ucs_a1_jis_table_max = 0x0000 + (sizeof (ucs_a1_jis_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a2_jis_table[] = {
- /* 2000h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x213E,0x0000,0x0000,0x0000,0x0000,0x213D,0x2142,0x0000,
- 0x2146,0x2147,0x0000,0x0000,0x2148,0x2149,0x0000,0x0000,
- 0x2277,0x2278,0x0000,0x0000,0x0000,0x2145,0x2144,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x2273,0x0000,0x216C,0x216D,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2228,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2100h */
- 0x0000,0x0000,0x0000,0x216E,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xA2F1,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xA2EF,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2272,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x222B,0x222C,0x222A,0x222D,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x224D,0x0000,0x224E,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2200h */
- 0x224F,0x0000,0x225F,0x2250,0x0000,0x0000,0x0000,0x2260,
- 0x223A,0x0000,0x0000,0x223B,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x215D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2265,0x0000,0x0000,0x2267,0x2167,0x0000,
- 0x225C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x224A,
- 0x224B,0x2241,0x2240,0x2269,0x226A,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2168,0x2268,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x2266,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2262,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x2162,0x2261,0x0000,0x0000,0x0000,0x0000,0x2165,0x2166,
- 0x0000,0x0000,0x2263,0x2264,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x223E,0x223F,0x0000,0x0000,0x223C,0x223D,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x225D,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2300h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x225E,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2400h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2500h */
- 0x2821,0x282C,0x2822,0x282D,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2823,0x0000,0x0000,0x282E,
- 0x2824,0x0000,0x0000,0x282F,0x2826,0x0000,0x0000,0x2831,
- 0x2825,0x0000,0x0000,0x2830,0x2827,0x283C,0x0000,0x0000,
- 0x2837,0x0000,0x0000,0x2832,0x2829,0x283E,0x0000,0x0000,
- 0x2839,0x0000,0x0000,0x2834,0x2828,0x0000,0x0000,0x2838,
- 0x283D,0x0000,0x0000,0x2833,0x282A,0x0000,0x0000,0x283A,
- 0x283F,0x0000,0x0000,0x2835,0x282B,0x0000,0x0000,0x283B,
- 0x0000,0x0000,0x2840,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2836,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x2223,0x2222,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2225,0x2224,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2227,0x2226,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2221,0x217E,
- 0x0000,0x0000,0x0000,0x217B,0x0000,0x0000,0x217D,0x217C,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x227E,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2600h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x217A,0x2179,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x216A,0x0000,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2276,0x0000,0x0000,0x2275,0x0000,0x2274,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2700h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2800h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2900h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2A00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2B00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2C00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2D00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2E00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2F00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 3000h */
- 0x2121,0x2122,0x2123,0x2137,0x0000,0x2139,0x213A,0x213B,
- 0x2152,0x2153,0x2154,0x2155,0x2156,0x2157,0x2158,0x2159,
- 0x215A,0x215B,0x2229,0x222E,0x214C,0x214D,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2141,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427,
- 0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F,
- 0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437,
- 0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F,
- 0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447,
- 0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F,
- 0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457,
- 0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F,
- 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,
- 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,
- 0x2470,0x2471,0x2472,0x2473,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x212B,0x212C,0x2135,0x2136,0x0000,
- 0x0000,0x2521,0x2522,0x2523,0x2524,0x2525,0x2526,0x2527,
- 0x2528,0x2529,0x252A,0x252B,0x252C,0x252D,0x252E,0x252F,
- 0x2530,0x2531,0x2532,0x2533,0x2534,0x2535,0x2536,0x2537,
- 0x2538,0x2539,0x253A,0x253B,0x253C,0x253D,0x253E,0x253F,
- 0x2540,0x2541,0x2542,0x2543,0x2544,0x2545,0x2546,0x2547,
- 0x2548,0x2549,0x254A,0x254B,0x254C,0x254D,0x254E,0x254F,
- 0x2550,0x2551,0x2552,0x2553,0x2554,0x2555,0x2556,0x2557,
- 0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,0x255F,
- 0x2560,0x2561,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567,
- 0x2568,0x2569,0x256A,0x256B,0x256C,0x256D,0x256E,0x256F,
- 0x2570,0x2571,0x2572,0x2573,0x2574,0x2575,0x2576,0x0000,
- 0x0000,0x0000,0x0000,0x2126,0x213C,0x2133,0x2134,0x0000
-};
-static const int ucs_a2_jis_table_min = 0x2000;
-static const int ucs_a2_jis_table_max = 0x2000 + (sizeof (ucs_a2_jis_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_i_jis_table[] = {
- /* 4E00h */
- 0x306C,0x437A,0xB0A1,0x3C37,0xB0A2,0xB0A3,0x0000,0x4B7C,
- 0x3E66,0x3B30,0x3E65,0x323C,0xB0A4,0x4954,0x4D3F,0x0000,
- 0x5022,0x312F,0xB0A5,0x0000,0x336E,0x5023,0x4024,0x5242,
- 0x3556,0x4A3A,0x0000,0x0000,0x0000,0x0000,0x3E67,0xB0A6,
- 0x0000,0x4E3E,0x0000,0xB0A7,0xB0A8,0x0000,0x4A42,0x0000,
- 0xB0A9,0x0000,0x5024,0xB0AA,0x0000,0x4366,0xB0AB,0xB0AC,
- 0xB0AD,0x5025,0x367A,0x0000,0x0000,0xB0AE,0x5026,0x0000,
- 0x345D,0x4330,0x0000,0x3C67,0x5027,0x0000,0x0000,0x5028,
- 0xB0AF,0xB0B0,0x5029,0x4735,0xB0B1,0x3557,0x0000,0xB0B2,
- 0x0000,0x0000,0x0000,0x4737,0x0000,0x4663,0x3843,0x4B33,
- 0x0000,0xB0B3,0x0000,0x0000,0x0000,0x6949,0x502A,0x3E68,
- 0x502B,0x3235,0xB0B4,0x0000,0xB0B5,0x3665,0x3870,0x4C69,
- 0x0000,0x0000,0x5626,0xB0B6,0x0000,0x0000,0x0000,0x0000,
- 0xB0B7,0xB0B8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x4D70,0x0000,0x467D,0xB0B9,0xB0BA,0x0000,0x0000,
- 0x0000,0xB0BB,0x0000,0x0000,0x0000,0x0000,0x3425,0xB0BC,
- 0x3535,0x0000,0x502C,0x0000,0x0000,0x502D,0x4E3B,0x0000,
- 0x4D3D,0x4168,0x502F,0x3B76,0x4673,0xB0BD,0x5032,0x0000,
- 0x0000,0x313E,0x385F,0x0000,0x385E,0x3066,0xB0BE,0xB0BF,
- 0x4F4B,0x4F4A,0x0000,0x3A33,0x3021,0xB0C0,0x5033,0x5034,
- 0x5035,0x4B34,0x5036,0x0000,0x3872,0x3067,0x4B72,0x0000,
- 0x357C,0x0000,0x0000,0x357D,0x357E,0x4462,0x4E3C,0xB0C1,
- 0x5037,0x0000,0x0000,0x5038,0x0000,0x0000,0x5039,0x0000,
- 0x0000,0xB0C2,0x3F4D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x3D3A,0x3F4E,0x503E,0xB0C3,0x503C,0x0000,0x503D,0x3558,
- 0x0000,0x0000,0x3A23,0x3270,0x0000,0x503B,0x503A,0x4A29,
- 0xB0C4,0x0000,0x0000,0x0000,0x3B46,0x3B45,0x423E,0x503F,
- 0x4955,0x4067,0xB0C5,0xB0C6,0x0000,0x2138,0x5040,0x5042,
- 0xB0C7,0xB0C8,0xB0C9,0x4265,0x4E61,0x304A,0x0000,0x0000,
- 0xB0CA,0x0000,0x0000,0x0000,0x0000,0x5041,0x323E,0xB0CB,
- 0x3644,0xB0CC,0x4367,0xB0CD,0x0000,0xB0CE,0x376F,0x5043,
- 0x0000,0x0000,0x0000,0x4724,0x0000,0xB0CF,0xB0D0,0xB0D1,
-
- /* 4F00h */
- 0xB0D2,0x346B,0xB0D3,0xB0D4,0x0000,0x0000,0x0000,0x0000,
- 0xB0D5,0x5044,0x304B,0xB0D6,0xB0D7,0x3860,0x346C,0x497A,
- 0x4832,0x3559,0xB0D8,0x0000,0x0000,0xB0D9,0xB0DA,0xB0DB,
- 0x0000,0xB0DC,0x3271,0x0000,0x5067,0x4541,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB0DD,0x476C,
- 0x5046,0xB0DE,0x0000,0xB0E0,0x483C,0xB0E1,0x4E62,0xB0E2,
- 0x3F2D,0xB0E3,0x3B47,0xB0E4,0x3B77,0x3240,0xB0E5,0x0000,
- 0xB0E6,0x0000,0xB0E7,0x4451,0x0000,0x0000,0x4322,0x504A,
- 0xB0E8,0xB0E9,0x0000,0xB0EA,0xB0EB,0x304C,0x4463,0x3D3B,
- 0x3A34,0x4D24,0xB0EC,0x424E,0xB0ED,0x323F,0xB0EE,0x5049,
- 0xB0EF,0x4D3E,0x5045,0x5047,0x3A6E,0x5048,0x5524,0xB0F0,
- 0xB0DF,0x0000,0x0000,0xB0F1,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5050,0xB0F2,0x0000,0xB0F3,0x0000,0xB0F4,0x5053,
- 0x5051,0xB0F5,0x0000,0x3242,0x0000,0x4A3B,0x504B,0xB0F6,
- 0xB0F7,0xB0F8,0xB0F9,0x504F,0x3873,0xB0FA,0xB0FB,0x3B48,
- 0x0000,0xB0FC,0xB0FD,0x3426,0xB0FE,0xB1A1,0x5054,0x0000,
- 0x504C,0xB1A2,0xB1A3,0x4E63,0xB1A4,0x3B78,0xB1A5,0x504D,
- 0xB1A6,0x5052,0xB1A7,0xB1A8,0xB1A9,0x0000,0x5055,0xB1AA,
- 0x504E,0xB1AB,0xB1AC,0x3621,0x0000,0x304D,0xB1AD,0xB1AE,
- 0x3622,0x3241,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5525,0x0000,0x4B79,0x496E,0x3874,
- 0x0000,0x0000,0xB1AF,0x0000,0x0000,0x3F2F,0x4E37,0xB1B0,
- 0x0000,0xB1B1,0x0000,0xB1B2,0xB1B3,0xB1B4,0xB1B5,0x4A58,
- 0xB1B6,0xB1B7,0x3738,0x4225,0x3264,0xB1B8,0xB1B9,0x0000,
- 0xB1BA,0xB1BB,0x3D53,0xB1BC,0xB1BD,0xB1BE,0x5059,0xB1BF,
- 0x505E,0x505C,0xB1C0,0x0000,0x5057,0x0000,0x0000,0x422F,
- 0x505A,0x0000,0x505D,0x505B,0xB1C1,0x4A5D,0x0000,0x5058,
- 0xB1C2,0x3F2E,0xB1C3,0x4B73,0x505F,0x5060,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3D24,0x506D,
- 0xB1C4,0x0000,0xB1C5,0x4750,0x0000,0x4936,0x5068,0x0000,
- 0x4A70,0x0000,0x3236,0x0000,0xB1C6,0xB1C7,0x506C,0xB1C8,
-
- /* 5000h */
- 0xB1C9,0xB1CA,0x0000,0x0000,0xB1CB,0x5066,0x506F,0xB1CC,
- 0x0000,0x4152,0xB1CD,0x3844,0xB1CE,0x475C,0xB1CF,0x6047,
- 0xB1D0,0x506E,0x455D,0xB1D1,0x5063,0x0000,0x3876,0xB1D2,
- 0xB1D3,0x3875,0x5061,0xB1D4,0xB1D5,0xB1D6,0xB1D7,0x3C5A,
- 0x0000,0x5069,0xB1D8,0x4A6F,0x434D,0x5065,0x3771,0xB1D9,
- 0x5062,0x506A,0x5064,0x4E51,0x506B,0x4F41,0xB1DA,0x0000,
- 0xB1DB,0x0000,0xB1DC,0xB1DD,0x0000,0xB1DE,0x3666,0x0000,
- 0x0000,0x3770,0x0000,0xB1F6,0x0000,0x0000,0x0000,0x0000,
- 0xB1DF,0xB1E0,0xB1E1,0x5070,0x0000,0xB1E2,0xB1E3,0x5071,
- 0x5075,0x304E,0xB1E4,0x0000,0xB1E5,0x0000,0xB1E6,0x4A50,
- 0x5074,0xB1E7,0xB1E8,0xB1E9,0x0000,0x5073,0x5077,0xB1EA,
- 0x0000,0xB1EB,0x5076,0x0000,0x4464,0x0000,0x0000,0xB1EC,
- 0xB1ED,0x0000,0xB1EE,0xB1EF,0x0000,0x3772,0xB1F0,0xB1F1,
- 0x0000,0x0000,0xB1F2,0x0000,0x5078,0xB1F3,0x0000,0x0000,
- 0xB1F4,0xB1F5,0x3C45,0x0000,0x4226,0x4465,0x3676,0x0000,
- 0x5079,0x0000,0x0000,0x0000,0x0000,0x3536,0x0000,0x0000,
- 0x507A,0xB1F7,0x0000,0xB1F8,0xB1F9,0x507C,0xB1FA,0x0000,
- 0x0000,0x0000,0xB1FB,0x0000,0x0000,0x4B35,0xB1FC,0xB1FD,
- 0xB1FE,0x3766,0xB2A1,0xB2A2,0xB2A3,0x0000,0xB2A4,0x0000,
- 0x3B31,0x4877,0x507B,0xB2A5,0xB2A6,0x0000,0xB2A7,0xB2A8,
- 0xB2A9,0xB2AA,0xB2AB,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xB2AC,0x0000,0x3A45,0x4D43,0x0000,0xB2AD,
- 0xB2AE,0x0000,0x507E,0x5123,0x507D,0x3A44,0x0000,0x3D7D,
- 0x0000,0xB2AF,0xB2B0,0x0000,0x0000,0xB2B1,0x3739,0x0000,
- 0xB2B2,0x0000,0x5124,0xB2B3,0xB2B4,0x364F,0x0000,0xB2B5,
- 0x0000,0x5121,0x5122,0x0000,0xB2B6,0x462F,0xB2B7,0x417C,
- 0xB2B8,0x3623,0x0000,0xB2B9,0xB2BA,0x4B4D,0x5125,0x0000,
- 0xB2BB,0x0000,0x4E3D,0x0000,0xB2BC,0xB2BD,0x5126,0xB2BE,
- 0x0000,0x0000,0xB2BF,0x5129,0xB2C0,0x5127,0xB2C1,0x414E,
- 0xB2C2,0xB2C3,0x0000,0x0000,0x0000,0x5128,0x512A,0xB2C4,
- 0x0000,0xB2C5,0xB2D1,0x0000,0x0000,0x512C,0xB2C6,0x0000,
- 0x0000,0x512B,0xB2C7,0x4A48,0x0000,0x0000,0xB2C8,0x0000,
-
- /* 5100h */
- 0x3537,0x512E,0x512F,0xB2C9,0x322F,0x0000,0xB2CA,0xB2CB,
- 0xB2CC,0x512D,0x0000,0xB2CD,0xB2CE,0xB2CF,0xB2D0,0x0000,
- 0xB2D2,0x0000,0x3C74,0x0000,0x5132,0x5131,0x5130,0xB2D3,
- 0x5056,0xB2D4,0x5133,0xB2D5,0xB2D6,0xB2D7,0xB2D8,0x3D7E,
- 0x0000,0x5134,0x0000,0xB2D9,0x0000,0x0000,0x0000,0xB2DA,
- 0xB2DB,0x0000,0x4D25,0x0000,0xB2DC,0xB2DD,0x0000,0xB2DE,
- 0x0000,0xB2DF,0x4C59,0xB2E0,0xB2E1,0xB2E2,0x0000,0x5136,
- 0xB2E3,0xB2E4,0x5135,0x5138,0x5137,0x0000,0x0000,0x5139,
- 0x513A,0x3074,0xB2E5,0x3835,0x373B,0x3D3C,0x437B,0x3624,
- 0x4068,0x3877,0xB2E6,0x396E,0x513C,0x4C48,0x4546,0xB2E7,
- 0x3B79,0x0000,0x513B,0xB2E8,0x513D,0xB2E9,0x0000,0xB2EA,
- 0xB2EB,0x0000,0x455E,0x0000,0x3375,0x0000,0x0000,0xB2EC,
- 0x0000,0x0000,0x513E,0x0000,0xB2ED,0x467E,0xB2EE,0x0000,
- 0x4134,0x5140,0x5141,0x482C,0x3878,0x4F3B,0x5142,0x0000,
- 0x0000,0x3626,0x0000,0x0000,0x0000,0x4A3C,0x4236,0x3671,
- 0x4535,0x0000,0x0000,0x0000,0x3773,0x0000,0xB2EF,0x0000,
- 0x5143,0x0000,0x5144,0xB2F0,0xB2F1,0x4662,0x315F,0x0000,
- 0x0000,0x5147,0x3A7D,0xB2F2,0x5146,0x3A46,0xB2F3,0x5148,
- 0x666E,0x5149,0x4B41,0x514A,0x0000,0x514B,0x514C,0x3E69,
- 0xB2F4,0x3C4C,0x0000,0x0000,0x0000,0xB2F5,0x0000,0x0000,
- 0x3427,0xB2F6,0x514F,0xB2F7,0x514D,0x4C3D,0x514E,0x0000,
- 0x495A,0x5150,0x5151,0x5152,0x455F,0xB2F8,0x0000,0x0000,
- 0x5156,0x5154,0x5155,0x5153,0x3A63,0x5157,0x4C6A,0x4E64,
- 0xB2F9,0x0000,0xB2FA,0x0000,0xB2FB,0x5158,0xB2FC,0xB2FD,
- 0x0000,0x0000,0xB2FE,0x0000,0x4028,0x5159,0x3D5A,0x0000,
- 0xB3A1,0x515A,0x0000,0x437C,0x4E3F,0x4560,0x0000,0xB3A2,
- 0x0000,0xB3A3,0xB3A4,0xB3A5,0x0000,0xB3A6,0x5245,0x0000,
- 0xB3A7,0x0000,0x0000,0x515B,0x7425,0x3645,0xB3A8,0x0000,
- 0x515C,0x4B5E,0xB3A9,0x0000,0x0000,0xB3AA,0x3D68,0x427C,
- 0x0000,0x515E,0x4664,0x0000,0x0000,0x515F,0xB3AB,0x0000,
- 0x5160,0x332E,0xB3AC,0xB3AD,0xB3AE,0x5161,0x3627,0xB3AF,
- 0x464C,0x317A,0x3D50,0x0000,0x0000,0x4821,0x5162,0x0000,
-
- /* 5200h */
- 0x4561,0xB3B0,0xB3B1,0x3F4F,0x5163,0xB3B2,0x4A2C,0x405A,
- 0x3422,0x0000,0x3429,0x5164,0x0000,0x0000,0x5166,0x0000,
- 0x0000,0x373A,0xB3B3,0xB3B4,0x5165,0xB3B5,0xB3B6,0x4E73,
- 0xB3B7,0x0000,0x0000,0x0000,0x0000,0x3D69,0x0000,0x0000,
- 0x0000,0x0000,0xB3B8,0x0000,0x483D,0x4A4C,0x0000,0x5167,
- 0xB3B9,0x4D78,0x5168,0x0000,0x0000,0x0000,0x5169,0x0000,
- 0x457E,0xB3BA,0xB3BB,0x516A,0x0000,0xB3BC,0x4029,0x3A7E,
- 0x3774,0x516B,0x3B49,0x396F,0xB3BD,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4466,0x516D,0xB3BE,0x0000,0x4227,
- 0x0000,0xB3BF,0x3A6F,0x516E,0x516F,0x4130,0x0000,0x516C,
- 0x0000,0x0000,0x0000,0x0000,0x5171,0xB3C0,0x4B36,0xB3C1,
- 0xB3C2,0x0000,0xB3C3,0x3964,0xB3C4,0x0000,0x5170,0xB3C5,
- 0xB3C6,0xB3C7,0x0000,0x3775,0x3A5E,0x476D,0xB3C8,0x0000,
- 0x0000,0x5174,0x5172,0x0000,0x0000,0x0000,0xB3C9,0x497B,
- 0x3E6A,0x517B,0x3364,0x5175,0x5173,0x414F,0x0000,0xB3CA,
- 0xB3CB,0xB3CC,0x0000,0x0000,0x0000,0x5177,0x0000,0x5176,
- 0xB3CD,0x0000,0xB3CE,0x3344,0x0000,0xB3CF,0x0000,0x3760,
- 0x517C,0x4E2D,0xB3D0,0x0000,0xB3D1,0x5178,0x0000,0x0000,
- 0x0000,0x517D,0x517A,0xB3D2,0x5179,0xB3D3,0xB3D4,0xB3D5,
- 0xB3D6,0x0000,0xB3D7,0x4E4F,0xB3D8,0x0000,0x0000,0x3879,
- 0x3243,0x0000,0x0000,0x4E74,0xB3D9,0xB3DA,0xB3DB,0xB3DC,
- 0x0000,0x3D75,0x4558,0x3965,0x5222,0x5223,0x0000,0xB3DD,
- 0xB3DE,0x4E65,0x0000,0x0000,0x4F2B,0x5225,0xB3DF,0xB3E0,
- 0xB3E1,0x387A,0xB3E2,0xB3E3,0x5224,0xB3E4,0x332F,0x0000,
- 0xB3E5,0x5226,0x0000,0x4B56,0xB3E6,0x443C,0xB3E7,0x4D26,
- 0xB3E8,0x4A59,0x0000,0x0000,0xB3E9,0x5227,0x0000,0xB3EA,
- 0x0000,0xB3EB,0x7055,0x0000,0xB3EC,0x4630,0xB3ED,0x5228,
- 0x342A,0x4C33,0x0000,0xB3EE,0xB3EF,0x3E21,0x5229,0x4A67,
- 0x522D,0xB3F0,0x402A,0x522A,0x3650,0xB3F1,0x522B,0x342B,
- 0xB3F2,0xB3F3,0xB3F4,0x0000,0xB3F5,0x0000,0x0000,0x0000,
- 0xB3F6,0xB3F7,0x372E,0x522E,0xB3F8,0x522F,0xB3F9,0xB3FA,
- 0x5230,0x5231,0x3C5B,0x0000,0x0000,0x0000,0x387B,0x4C5E,
-
- /* 5300h */
- 0xB3FB,0x4C68,0x4677,0xB3FC,0x0000,0x4A71,0x5232,0x0000,
- 0x5233,0x0000,0xB3FD,0xB3FE,0xB4A1,0x5235,0x0000,0x5237,
- 0x5236,0xB4A2,0x0000,0xB4A3,0x0000,0x5238,0x323D,0x4B4C,
- 0xB4A4,0x3A7C,0x5239,0xB4A5,0xB4A6,0x4159,0xB4A7,0xB4A8,
- 0x3E22,0x3629,0x0000,0x523A,0x0000,0xB4A9,0x0000,0xB4AA,
- 0xB4AB,0xB4AC,0x485B,0xB4AD,0xB4AE,0xB4AF,0x0000,0x523B,
- 0xB4B0,0x523C,0xB4B1,0x523D,0x0000,0xB4B2,0x0000,0x0000,
- 0x523E,0x4924,0x3668,0x3065,0xB4B3,0xB4B4,0xB4B5,0x463F,
- 0x523F,0x3D3D,0xB4B6,0x4069,0x0000,0x5241,0x5240,0x3E23,
- 0x3861,0x5243,0x483E,0xB4B8,0xB4B7,0x5244,0x0000,0x0000,
- 0x0000,0x485C,0x4234,0x426E,0x3628,0x0000,0x0000,0x466E,
- 0x4331,0xB4B9,0x476E,0xB4BA,0x4B4E,0x0000,0x5246,0x0000,
- 0x406A,0xB4BB,0x0000,0xB4BC,0x0000,0xB4BD,0x3735,0x0000,
- 0x0000,0x5247,0x0000,0x0000,0xB4BE,0xB4BF,0x5248,0x312C,
- 0x3075,0x346D,0xB4C0,0x4228,0x3551,0x4D71,0x0000,0x524B,
- 0x3237,0xB4C1,0x0000,0x524A,0x0000,0x0000,0xB4C2,0x362A,
- 0x0000,0x0000,0x524C,0xB4C3,0x4C71,0x0000,0x0000,0xB4C4,
- 0xB4C5,0x0000,0x0000,0x0000,0x0000,0x0000,0xB4C6,0x0000,
- 0x0000,0x0000,0x0000,0xB4C7,0xB4C8,0x0000,0x524D,0x0000,
- 0x4E52,0xB4C9,0x387C,0x0000,0x0000,0xB4CA,0x0000,0x3836,
- 0x524E,0xB4CB,0x0000,0x0000,0xB4CC,0x5250,0x524F,0x0000,
- 0x3F5F,0x3139,0xB4CD,0xB4CE,0x0000,0x315E,0x5251,0xB4CF,
- 0x5252,0x0000,0xB4D0,0x3837,0xB4D1,0xB4D2,0x5253,0xB4D3,
- 0xB4D4,0x0000,0xB4D5,0x356E,0x0000,0xB4D6,0x0000,0x0000,
- 0xB4D7,0x0000,0x3B32,0x5254,0x0000,0xB4D8,0x0000,0x0000,
- 0x4B74,0x3A35,0x355A,0x4D27,0x4150,0x483F,0x3C7D,0xB4D9,
- 0x0000,0x0000,0xB4DA,0xB4DB,0x3D47,0xB4DC,0x3C68,0x3C75,
- 0x0000,0x3D76,0xB4DD,0x4840,0x0000,0xB4DE,0xB4DF,0x5257,
- 0xB4E0,0x3143,0x4151,0x387D,0x3845,0x3667,0xB4E1,0xB4E2,
- 0x525B,0x4321,0x427E,0x362B,0x3E24,0x525C,0x525A,0x3244,
- 0x4266,0x3C38,0x3B4B,0x3126,0x0000,0xB4E3,0x3370,0x3966,
- 0x3B4A,0x0000,0x525D,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 5400h */
- 0x0000,0x525E,0xB4E4,0x3549,0x3346,0x0000,0x0000,0x0000,
- 0x3967,0x3548,0x445F,0x3125,0x4631,0x4C3E,0x3921,0x4D79,
- 0x4547,0x387E,0x0000,0xB4E5,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xB4E6,0x372F,0x0000,0x5267,0x0000,0x3663,
- 0x4B4A,0xB4E7,0x0000,0x0000,0x0000,0x0000,0x485D,0xB4E8,
- 0xB4E9,0x5266,0xB4EA,0x345E,0x5261,0x5262,0x5264,0xB4EB,
- 0x0000,0xB4EC,0x0000,0x0000,0xB4ED,0xB4EE,0x5265,0x0000,
- 0x355B,0x3F61,0x0000,0x4A2D,0x5263,0x525F,0x3863,0x0000,
- 0x5260,0x0000,0x4F24,0xB4EF,0xB4F0,0x0000,0x4A72,0xB4F1,
- 0x4468,0x3862,0x3970,0x0000,0x0000,0xB4F2,0x5268,0xB4F3,
- 0x0000,0x465D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB4F4,0x526C,
- 0x0000,0x0000,0xB4F5,0x0000,0xB4F6,0x0000,0xB4F7,0xB4F8,
- 0x3C7E,0xB4F9,0x3C76,0xB4FA,0x0000,0xB4FB,0xB4FC,0x0000,
- 0x526F,0x526D,0x0000,0x4C23,0xB4FD,0x526A,0x5273,0x526E,
- 0x0000,0x0000,0x0000,0x5271,0x3846,0x4C3F,0x0000,0xB4FE,
- 0x5272,0xB5A1,0x0000,0xB5A2,0x5274,0xB5A3,0x5276,0x0000,
- 0xB5A4,0xB5A5,0x0000,0x3A70,0x4F42,0xB5A6,0x526B,0x5269,
- 0x5275,0xB5A7,0x5270,0x0000,0x0000,0xB5A8,0xB5A9,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xB5AA,0x0000,0x0000,0xB5AB,
- 0x0000,0xB5AC,0x5278,0x0000,0x5323,0x527A,0xB5AD,0xB5AE,
- 0x527E,0xB5AF,0xB5B0,0x5321,0x527B,0xB5B1,0xB5B2,0x533E,
- 0x0000,0xB5B3,0x3A69,0x3331,0x0000,0x0000,0x0000,0xB5B4,
- 0x5279,0xB5B5,0xB5B6,0xB5B7,0x5325,0x3076,0x5324,0xB5B8,
- 0x3025,0x494A,0x5322,0x0000,0x527C,0x0000,0xB5B9,0x5277,
- 0x527D,0x3A48,0xB5BA,0x0000,0x0000,0xB5BB,0xB5BC,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5326,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xB5BD,0x3077,0x532F,0x0000,0x0000,0x5327,0x5328,0x0000,
- 0x3E25,0x4B69,0xB5BE,0x0000,0xB5BF,0x532D,0x532C,0xB5C0,
- 0x0000,0x0000,0x452F,0x0000,0x0000,0x0000,0xB5C1,0x0000,
- 0x0000,0x0000,0x532E,0x0000,0xB5C2,0x532B,0xB5C3,0xB5C4,
-
- /* 5500h */
- 0xB5C5,0xB5C6,0x0000,0x0000,0x3134,0xB5C7,0x3A36,0x3F30,
- 0xB5C8,0xB5C9,0x0000,0x0000,0xB5CA,0xB5CB,0xB5CC,0x5329,
- 0x4562,0x0000,0x0000,0x0000,0x532A,0xB5CD,0x3022,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xB5CE,0xB5CF,0x0000,0x0000,0x5334,0x4D23,
- 0x0000,0x3E27,0xB5D0,0x533A,0x0000,0xB5D1,0xB5D2,0x0000,
- 0x5339,0x5330,0x0000,0xB5D3,0xB5D4,0xB5D5,0x4243,0x0000,
- 0x5331,0xB5D6,0x0000,0x0000,0x426F,0x5336,0x3E26,0xB5D7,
- 0x0000,0xB5D8,0xB5D9,0x0000,0x5333,0xB5DA,0x0000,0x4C64,
- 0xB5DB,0xB5DC,0x0000,0x373C,0x0000,0x0000,0x5337,0x5338,
- 0xB5DD,0x0000,0xB5DE,0xB5DF,0x5335,0x533B,0xB5E0,0x0000,
- 0xB5E1,0xB5E2,0x0000,0x5332,0xB5E3,0x0000,0xB5E4,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5341,0x5346,0x0000,0x5342,0xB5E5,
- 0x533D,0xB5E6,0xB5E7,0x5347,0x4131,0x0000,0xB5E8,0x5349,
- 0xB5E9,0x3922,0x533F,0x437D,0x0000,0x0000,0xB5EA,0xB5EB,
- 0x0000,0xB5EC,0xB5ED,0xB5EE,0xB5EF,0x0000,0x0000,0xB5F0,
- 0x5343,0x533C,0x342D,0x0000,0x346E,0x3365,0x5344,0x5340,
- 0x0000,0x0000,0x0000,0xB5F1,0xB5F2,0x0000,0x0000,0x3776,
- 0x534A,0x5348,0x4153,0x354A,0x362C,0xB5F3,0x5345,0x0000,
- 0x3674,0x0000,0xB5F4,0x0000,0x0000,0x0000,0x3144,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB5F5,
- 0x0000,0xB5F6,0x0000,0xB5F7,0x534E,0x534C,0xB5F8,0x5427,
- 0x0000,0xB5F9,0x0000,0xB5FA,0xB5FB,0x0000,0xB5FC,0x0000,
- 0x0000,0xB5FD,0xB5FE,0xB6A1,0x5351,0x0000,0x0000,0xB6A2,
- 0xB6A3,0x0000,0x534B,0xB6A4,0x534F,0x0000,0xB6A5,0x534D,
- 0x0000,0x0000,0xB6A6,0x3B4C,0x5350,0x0000,0x0000,0x0000,
- 0x0000,0xB6A7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB6A8,0x5353,
- 0x0000,0x5358,0x0000,0x0000,0x0000,0x5356,0x5355,0xB6A9,
-
- /* 5600h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xB6AA,0x4332,0x0000,
- 0xB6AB,0x3245,0xB6AC,0x0000,0x0000,0xB6AD,0xB6AE,0xB6AF,
- 0xB6B0,0xB6B1,0xB6B2,0x0000,0x5352,0x0000,0x5354,0x3E28,
- 0x3133,0xB6B3,0x0000,0x5357,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x325E,0x0000,0x0000,0xB6B4,0x0000,0x0000,0x5362,
- 0xB6B5,0x3E7C,0x535E,0xB6B6,0x535C,0xB6B7,0x535D,0xB6B8,
- 0x535F,0xB6B9,0x0000,0xB6BA,0xB6BB,0xB6BC,0x0000,0xB6BD,
- 0xB6BE,0xB6BF,0x313D,0xB6C0,0xB6C1,0x0000,0xB6C2,0x0000,
- 0x0000,0xB6C3,0x0000,0xB6C4,0x4139,0xB6C5,0x5359,0xB6C6,
- 0x535A,0x0000,0x0000,0x0000,0xB6C7,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x337A,0x0000,0x0000,0xB6C8,0x0000,
- 0xB6C9,0xB6CA,0xB6CB,0xB6CC,0x5361,0x0000,0xB6CD,0x0000,
- 0x346F,0xB6CE,0x5364,0x5360,0x5363,0xB6CF,0x0000,0xB6D0,
- 0x0000,0xB6D1,0xB6D2,0x0000,0x4A2E,0xB6D3,0x0000,0x0000,
- 0x4655,0x0000,0x4838,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5366,0x0000,0x0000,0x0000,0xB6D4,0xB6D5,0x5365,0x3345,
- 0xB6D6,0x0000,0x5367,0xB6D7,0xB6D8,0x0000,0x0000,0x536A,
- 0x0000,0x0000,0x0000,0x0000,0x5369,0xB6D9,0x0000,0x0000,
- 0x0000,0xB6DA,0xB6DB,0x0000,0x0000,0xB6DC,0xB6DD,0xB6DE,
- 0x5368,0x0000,0x4739,0x0000,0x0000,0x536B,0xB6DF,0xB6E0,
- 0xB6E1,0xB6E2,0x0000,0xB6E3,0xB6E4,0xB6E5,0x536C,0x0000,
- 0x0000,0xB6E6,0x0000,0xB6E7,0x536E,0x0000,0x536D,0xB6E8,
- 0x0000,0x0000,0x0000,0x0000,0x5370,0x0000,0xB6E9,0x0000,
- 0x5373,0x5371,0x536F,0x5372,0x0000,0xB6EA,0x0000,0x0000,
- 0x5374,0xB6EB,0xB6EC,0xB6ED,0xB6F0,0xB6F1,0x5375,0xB6EE,
- 0xB6EF,0x5376,0x0000,0x5377,0x0000,0x0000,0x0000,0x5378,
- 0x5145,0xB6F2,0x3C7C,0x3B4D,0xB6F3,0xB6F4,0x3273,0xB6F5,
- 0x3078,0xB6F6,0x0000,0x4344,0xB6F7,0xB6F8,0xB6F9,0xB6FA,
- 0xB6FB,0x0000,0x0000,0xB6FD,0x0000,0xB6FE,0x5379,0x0000,
- 0x3A24,0xB6FC,0x304F,0x3F5E,0x0000,0x0000,0xB7A1,0xB7A2,
- 0x0000,0x537A,0x3847,0x0000,0x0000,0x3971,0x0000,0x537C,
-
- /* 5700h */
- 0x537B,0xB7A3,0xB7A4,0x4A60,0x537D,0x0000,0x0000,0xB7A5,
- 0x5421,0x537E,0xB7A6,0x5422,0xB7A7,0x5423,0x0000,0x3777,
- 0x0000,0xB7A8,0x3160,0x5424,0x0000,0xB7A9,0x5426,0x0000,
- 0x5425,0x0000,0xB7AA,0xB7AB,0x5428,0xB7AC,0x0000,0x455A,
- 0xB7AD,0x0000,0xB7AE,0xB7AF,0xB7B0,0xB7B1,0x5429,0x3035,
- 0x3A5F,0xB7B2,0xB7B3,0x0000,0xB7B4,0x373D,0xB7B5,0xB7B6,
- 0x434F,0x0000,0x0000,0xB7B7,0xB7B8,0x0000,0x0000,0x542A,
- 0x542B,0x0000,0x0000,0x542D,0x0000,0xB7B9,0xB7BA,0xB7BB,
- 0x542E,0x0000,0x3A64,0x0000,0x0000,0xB7BC,0xB7BD,0x3651,
- 0x0000,0x0000,0x4B37,0x0000,0xB7BE,0xB7BF,0x542C,0x542F,
- 0x3A41,0x3923,0xB7C0,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5433,0xB7C1,0x0000,0x3A25,0xB7C2,0x4333,0xB7C3,
- 0xB7C4,0x5430,0x445A,0xB7C5,0x0000,0xB7C6,0xB7C7,0xB7C8,
- 0xB7C9,0xB7CA,0x0000,0xB7CB,0xB7CC,0xB7CD,0x0000,0xB7CE,
- 0x0000,0xB7CF,0xB7D0,0xB7D1,0xB7D2,0x0000,0xB7D3,0x5434,
- 0x0000,0xB7D4,0x3F62,0xB7D5,0x0000,0x0000,0x0000,0x0000,
- 0x5432,0x5435,0x0000,0x373F,0xB7D6,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5436,0xB7D7,0xB7E0,0x0000,0xB7D8,
- 0x0000,0xB7D9,0xB7DA,0x0000,0xB7DB,0xB7DC,0xB7DD,0xB7DE,
- 0x5437,0xB7DF,0x3924,0x3340,0x5439,0x0000,0x0000,0xB7E1,
- 0xB7E2,0xB7E3,0x543A,0x0000,0xB7E4,0x0000,0x0000,0x0000,
- 0x543B,0x0000,0x0000,0x5438,0x0000,0x0000,0x0000,0x0000,
- 0xB7E5,0x0000,0x0000,0x0000,0x0000,0xB7E6,0x0000,0x0000,
- 0x5431,0x0000,0x0000,0x543C,0x0000,0x0000,0x543D,0xB7E7,
- 0xB7E8,0x0000,0x0000,0x4B64,0xB7E9,0x0000,0x3E6B,0xB7EA,
- 0x0000,0x0000,0x543F,0x5440,0x543E,0xB7EB,0x5442,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x4738,0xB7EC,0xB7ED,0x3068,
- 0x4956,0xB7FE,0x0000,0x5443,0xB7EE,0x0000,0xB7EF,0xB7F0,
- 0x0000,0xB7F1,0x0000,0x0000,0x0000,0xB7F2,0x0000,0x0000,
- 0xB7F3,0x0000,0x0000,0x0000,0x3E7D,0xB7F4,0xB7F5,0x3C39,
- 0xB7F6,0x475D,0x3470,0x0000,0x3A6B,0xB7F7,0xB7F8,0xB7F9,
-
- /* 5800h */
- 0x4B59,0x0000,0x4632,0xB7FA,0xB7FB,0x3778,0x424F,0x0000,
- 0xB7FC,0xB7FD,0x5441,0x5444,0xB8A1,0xB8A2,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4244,0x0000,0x0000,
- 0x0000,0x5445,0x0000,0xB8A3,0x0000,0x5446,0xB8A4,0xB8A5,
- 0xB8A6,0x5448,0x0000,0x0000,0x4469,0x0000,0xB8A7,0xB8A8,
- 0x0000,0x0000,0x342E,0x0000,0x0000,0xB8A9,0x0000,0x7421,
- 0x3161,0x4A73,0xB8AA,0x0000,0x3E6C,0x4548,0x0000,0x0000,
- 0x0000,0xB8AB,0x3A66,0x0000,0x0000,0x544E,0x0000,0xB8AC,
- 0x4A3D,0x4E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xB8AD,0x3274,0x544A,0xB8AE,0xB8AF,0x0000,0xB8B0,
- 0xB8B1,0x413A,0x544D,0x0000,0x4563,0xB8B2,0x0000,0x4549,
- 0x4564,0x4839,0x444D,0x0000,0x0000,0x0000,0x3A49,0xB8B3,
- 0x0000,0xB8B4,0x5449,0x0000,0xB8B5,0x0000,0x0000,0xB8B6,
- 0xB8B7,0x3176,0x0000,0x4536,0x0000,0x0000,0x0000,0x0000,
- 0x544B,0x0000,0x5447,0x0000,0x0000,0x3F50,0x0000,0x0000,
- 0xB8B8,0x544F,0x0000,0x0000,0xB8B9,0x0000,0x3D4E,0xB8BA,
- 0xB8BB,0xB8BC,0x0000,0x362D,0x0000,0x5450,0x0000,0xB8BD,
- 0xB8BE,0xB8BF,0xB8C0,0x0000,0xB8C1,0xB8C2,0x0000,0xB8C3,
- 0xB8C4,0x0000,0x0000,0x4A68,0xB8C5,0x0000,0xB8C6,0x417D,
- 0x0000,0x0000,0x0000,0x0000,0x4446,0xB8C7,0x0000,0x5452,
- 0xB8C8,0xB8C9,0xB8CA,0x0000,0x0000,0x0000,0xB8CB,0x0000,
- 0x4B4F,0xB8CC,0x0000,0x5453,0x0000,0x0000,0x5458,0x0000,
- 0x0000,0xB8CD,0xB8CE,0x4A2F,0x0000,0x0000,0x0000,0x0000,
- 0x5457,0x5451,0x5454,0x5456,0xB8D0,0x0000,0x3A26,0x0000,
- 0x0000,0x4A49,0xB8D1,0x0000,0xB8CF,0x5459,0x0000,0x4345,
- 0xB8D2,0x0000,0x3275,0x0000,0x3E6D,0xB8D3,0xB8D4,0x0000,
- 0xB8D5,0x545B,0xB8D6,0x545A,0xB8D7,0x3968,0xB8D8,0x545C,
- 0x545E,0x545D,0xB8D9,0x0000,0x5460,0xB8DA,0x5455,0x5462,
- 0x0000,0xB8DB,0xB8DC,0x0000,0x5461,0x545F,0x0000,0x0000,
- 0x0000,0xB8DD,0x0000,0x3B4E,0x3F51,0x0000,0x4154,0x5463,
- 0x403C,0x306D,0x4764,0xB8DE,0x0000,0x0000,0x0000,0x445B,
- 0x0000,0x5465,0x5464,0x5466,0x5467,0x5468,0x0000,0x0000,
-
- /* 5900h */
- 0x0000,0x0000,0x5469,0x0000,0x0000,0xB8DF,0xB8E0,0x0000,
- 0x0000,0x4A51,0x546A,0xB8E1,0xB8E2,0x0000,0x0000,0x3246,
- 0x546B,0x0000,0xB8E3,0xB8E4,0xB8E5,0x4D3C,0x3330,0x0000,
- 0x5249,0x3D48,0x423F,0x546C,0x4C6B,0xB8E7,0x0000,0x0000,
- 0x0000,0xB8E8,0x4C34,0xB8E9,0xB8EA,0x546E,0x0000,0x4267,
- 0xB8EB,0x4537,0x4240,0x4957,0x546F,0x5470,0x317B,0xB8EC,
- 0xB8ED,0x3C3A,0x5471,0xB8EE,0x0000,0xB8EF,0xB8F0,0x3050,
- 0x5472,0x0000,0x0000,0x0000,0x0000,0x0000,0x5473,0xB8F1,
- 0x0000,0x0000,0x0000,0xB8F2,0x3162,0x0000,0xB8F3,0x3471,
- 0x4660,0x4A74,0x0000,0x0000,0x0000,0x0000,0x5477,0x4155,
- 0x5476,0x3740,0xB8F4,0xB8F5,0x4B5B,0x5475,0x0000,0x4565,
- 0x5479,0xB8F6,0x5478,0xB8F7,0x0000,0xB8F8,0xB8F9,0xB8FA,
- 0x547B,0xB8FB,0x547A,0xB8FC,0x0000,0x317C,0x0000,0x547C,
- 0x3E29,0x547E,0x4325,0xB8FD,0x547D,0xB8FE,0x4A33,0xB9A1,
- 0x0000,0x0000,0xB9A2,0x3D77,0x455B,0xB9A3,0xB9A4,0x0000,
- 0x5521,0xB9A5,0x0000,0xB9A6,0xB9A7,0x3925,0x0000,0x0000,
- 0x0000,0x5522,0x4721,0x485E,0x4C51,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4725,0xB9A8,0xB9A9,0x552B,0xB9AA,0x0000,
- 0x0000,0x0000,0xB9AB,0x3538,0x0000,0xB9AC,0x4D45,0xB9AD,
- 0x0000,0x4C2F,0x0000,0x562C,0x0000,0x5523,0x0000,0xB9AE,
- 0x0000,0x0000,0x0000,0x5526,0xB9AF,0x4245,0x0000,0xB9B0,
- 0x4B38,0x0000,0x0000,0x0000,0x454A,0xB9B1,0xB9B2,0xB9B3,
- 0xB9B4,0x0000,0x5527,0xB9B5,0x0000,0x0000,0x0000,0xB9B6,
- 0x0000,0x4B65,0xB9B7,0x3A4A,0xB9B8,0x0000,0x3E2A,0x0000,
- 0x0000,0xB9B9,0x0000,0xB9BA,0xB9BB,0x0000,0x5528,0x0000,
- 0xB9BC,0x3B50,0xB9BD,0x3B4F,0x0000,0xB9BE,0x0000,0x0000,
- 0x3039,0x3848,0xB9BF,0x402B,0x3051,0x0000,0x0000,0x0000,
- 0x0000,0x552C,0x552D,0x0000,0x552A,0xB9C0,0xB9C1,0xB9C2,
- 0x0000,0x0000,0x0000,0xB9C3,0xB9C4,0x3138,0x342F,0xB9C5,
- 0x5529,0x0000,0x4C45,0x4931,0x0000,0x0000,0xB9C6,0xB9C7,
- 0x0000,0xB9C8,0xB9C9,0x0000,0xB9CA,0x0000,0x3028,0xB9CB,
- 0x0000,0x0000,0x0000,0x3079,0x0000,0x0000,0x0000,0x3B51,
-
- /* 5A00h */
- 0xB9CC,0x3052,0x0000,0x3023,0xB9CD,0x0000,0x0000,0x0000,
- 0x0000,0x5532,0x0000,0x0000,0xB9CE,0xB9CF,0xB9D0,0x0000,
- 0x0000,0x5530,0xB9D1,0xB9D2,0x0000,0x0000,0x0000,0x0000,
- 0x4C3C,0x0000,0x5533,0x0000,0x5531,0x0000,0xB9D3,0x552F,
- 0x3F31,0x0000,0x0000,0xB9D4,0xB9D5,0x552E,0x0000,0xB9D6,
- 0xB9D7,0x4A5A,0xB9D8,0x0000,0x0000,0xB9D9,0x0000,0x3864,
- 0xB9DA,0x0000,0x0000,0x0000,0x0000,0x5537,0x5538,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x3E2B,0x0000,0x0000,0x0000,
- 0x5534,0x4F2C,0x0000,0x0000,0xB9DB,0xB9DC,0x474C,0xB9DD,
- 0xB9DE,0x5536,0x0000,0x0000,0xB9DF,0x0000,0x0000,0x0000,
- 0xB9E0,0x0000,0x0000,0x0000,0x0000,0xB9E1,0x0000,0x0000,
- 0x0000,0x0000,0x3A27,0x0000,0x0000,0x0000,0xB9E2,0x0000,
- 0x0000,0x0000,0x5539,0xB9E3,0x0000,0xB9E4,0x4958,0xB9E5,
- 0x0000,0x0000,0x553A,0x0000,0x5535,0xB9E6,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB9E7,
- 0x0000,0x0000,0xB9E8,0xB9E9,0x0000,0x0000,0xB9EA,0x4C3B,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xB9EB,0x0000,0x0000,0x0000,0x0000,
- 0xB9EC,0x0000,0x475E,0xB9ED,0x0000,0x0000,0xB9EE,0x0000,
- 0x0000,0xB9EF,0x553B,0x4932,0xB9F0,0x0000,0xB9F1,0xB9F2,
- 0xB9F3,0x0000,0xB9F4,0x0000,0x0000,0x0000,0x0000,0xB9F5,
- 0x0000,0x0000,0x0000,0x0000,0xB9F6,0x0000,0x0000,0x0000,
- 0x0000,0xB9F7,0xB9F8,0xB9F9,0x0000,0xB9FA,0x0000,0x0000,
- 0xB9FB,0x0000,0xB9FC,0xB9FD,0x553C,0x5540,0x553D,0xB9FE,
- 0x0000,0x3247,0x553F,0x0000,0xBAA1,0x0000,0xBAA2,0x0000,
- 0xBAA3,0x3C3B,0x0000,0x553E,0x3779,0x0000,0x0000,0xBAA4,
- 0x554C,0x0000,0x0000,0x0000,0x0000,0x0000,0x5545,0x5542,
- 0x0000,0x0000,0xBAA5,0x0000,0xBAA6,0x0000,0x0000,0x0000,
- 0xBAA7,0x4364,0x0000,0x5541,0x0000,0xBAA8,0x5543,0x0000,
- 0x0000,0x5544,0xBAA9,0x0000,0x0000,0x0000,0xBAAA,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBAAB,0xBAAC,0x0000,
- 0x0000,0x0000,0x5546,0x5547,0x0000,0xBAAD,0x0000,0x0000,
-
- /* 5B00h */
- 0xBAAE,0xBAAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xBAB0,0x3472,0x0000,0x5549,0x5548,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x554A,0xBAB1,
- 0x0000,0xBAB3,0x0000,0xBAB4,0x0000,0xBAB5,0x0000,0x0000,
- 0x0000,0xBAB6,0x3E6E,0x0000,0x0000,0xBAB7,0x0000,0x0000,
- 0x0000,0x0000,0x554D,0x0000,0x445C,0xBAB8,0x0000,0x0000,
- 0x3145,0x0000,0x554B,0x0000,0xBAB2,0x0000,0x554E,0x0000,
- 0xBAB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x554F,0x0000,
- 0x5552,0xBABA,0x0000,0x5550,0x0000,0x5551,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xBABB,0xBABC,0x0000,0x0000,0x0000,
- 0x3B52,0x5553,0xBABD,0x0000,0x3926,0x5554,0xBABE,0x3B7A,
- 0x4238,0x0000,0x5555,0x5556,0x3B5A,0x3927,0xBABF,0x4C52,
- 0x0000,0x0000,0x0000,0x3528,0x3849,0x5557,0x3358,0x0000,
- 0xBAC0,0x5558,0x0000,0x4239,0x0000,0x0000,0xBAC1,0xBAC2,
- 0x5559,0x5623,0x0000,0x555A,0x0000,0x555B,0x0000,0x0000,
- 0x555C,0x0000,0x555E,0x0000,0xBAC3,0xBAC4,0xBAC5,0xBAC6,
- 0x555F,0xBAC7,0x0000,0x5560,0xBAC8,0x4270,0xBAC9,0x3127,
- 0x3C69,0x3042,0xBACA,0x4157,0x3430,0x3C35,0xBACB,0x3928,
- 0xBACC,0xBACD,0x0000,0xBACE,0xBACF,0x4566,0xBAD0,0x3D21,
- 0x3431,0x4368,0x446A,0x3038,0x3539,0x4A75,0x0000,0x3C42,
- 0x0000,0x0000,0x3552,0x406B,0x3C3C,0x4D28,0x5561,0x0000,
- 0xBAD1,0xBAD2,0x0000,0x0000,0xBAD3,0xBAD4,0x355C,0xBAD5,
- 0x3A4B,0xBAD6,0xBAD7,0x3332,0x3163,0x3E2C,0x3248,0xBAD8,
- 0x5562,0x4D46,0xBAD9,0x0000,0xBADA,0x0000,0x0000,0x3D49,
- 0xBADB,0xBADC,0x3C64,0x5563,0x3473,0x4652,0x4C29,0x5564,
- 0x0000,0x5565,0x0000,0x0000,0x4959,0xBADD,0x0000,0xBADE,
- 0x5567,0x0000,0x3428,0x3677,0x5566,0x0000,0xBADF,0xBAE0,
- 0xBAE1,0xBAE2,0xBAE3,0x3432,0x0000,0x3F32,0x556B,0x3B21,
- 0xBAE4,0x3249,0x556A,0x0000,0x5568,0x556C,0x5569,0x472B,
- 0x5C4D,0x3F33,0x0000,0x556D,0x0000,0x0000,0x4E40,0xBAE5,
- 0x556E,0xBAE6,0x0000,0x5570,0xBAE7,0x437E,0x556F,0x0000,
- 0x4023,0x0000,0x3B7B,0x0000,0x0000,0xBAE8,0x4250,0x3C77,
-
- /* 5C00h */
- 0x0000,0x4975,0x406C,0x0000,0x3C4D,0x5571,0x3E2D,0x5572,
- 0x5573,0x3053,0x423A,0x3F52,0xBAE9,0x5574,0x4633,0x3E2E,
- 0x0000,0x3E2F,0x0000,0x5575,0x0000,0x0000,0x406D,0xBAEA,
- 0x0000,0x0000,0x3E30,0x0000,0x0000,0x0000,0xBAEB,0xBAEC,
- 0x5576,0x0000,0x5577,0xBAED,0x4C60,0x0000,0xBAEE,0x0000,
- 0x5578,0xBAEF,0x0000,0xBAF0,0xBAF1,0x3646,0xBAF2,0x0000,
- 0xBAF3,0x3D22,0xBAF4,0x0000,0x0000,0xBAF5,0xBAF6,0x0000,
- 0x5579,0x557A,0x3C5C,0x3F2C,0x4674,0x3F54,0x4878,0x4722,
- 0x3649,0x557B,0x0000,0x0000,0x0000,0x356F,0x557C,0x0000,
- 0x367E,0x0000,0x464F,0x3230,0x0000,0x3B53,0x557D,0x5622,
- 0x5621,0x367D,0x0000,0x557E,0x0000,0x4538,0x0000,0x0000,
- 0x0000,0xBAF7,0xBAF8,0x0000,0xBAF9,0x0000,0x4230,0x0000,
- 0x454B,0x3C48,0xBAFA,0xBAFB,0x4158,0x4D7A,0x0000,0xBAFC,
- 0xBAFD,0xBAFE,0x0000,0x0000,0x5624,0xBBA1,0x5625,0x4656,
- 0xBBA2,0x3B33,0x0000,0x0000,0xBBA3,0xBBA4,0x5627,0x0000,
- 0x0000,0x5628,0xBBA5,0xBBA6,0xBBA7,0xBBA8,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBBA9,
- 0xBBAA,0x0000,0xBBAB,0x0000,0x5629,0x0000,0x0000,0xBBAC,
- 0x3474,0x562A,0xBBAD,0x0000,0x562B,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBBAE,0x0000,0xBBAF,
- 0xBBB0,0x322C,0xBBB1,0xBBB2,0x0000,0x0000,0xBBB3,0x0000,
- 0x413B,0x3464,0xBBB4,0x562D,0x4C28,0x0000,0x0000,0x0000,
- 0x0000,0x4252,0xBBB5,0x3359,0xBBB6,0xBBB7,0x562F,0x5631,
- 0x345F,0x0000,0xBBB8,0x562E,0x5630,0x0000,0x5633,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x5632,0x0000,0x5634,
- 0x0000,0xBBB9,0x0000,0xBBBA,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xBBBB,0x0000,0x0000,0x0000,0x0000,0xBBBD,
- 0x0000,0x5635,0x0000,0x0000,0x0000,0xBBBC,0x0000,0x0000,
- 0x463D,0x362E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x3265,0x5636,0x563B,0x0000,0x0000,0x5639,0xBBBE,0x4A77,
- 0x4A76,0xBBBF,0xBBC0,0x0000,0xBBC1,0x0000,0x4567,0x0000,
- 0x0000,0x0000,0x5638,0x3D54,0x0000,0x5637,0x0000,0x0000,
-
- /* 5D00h */
- 0x0000,0xBBC2,0x0000,0x0000,0x0000,0x0000,0xBBC3,0x3F72,
- 0x0000,0x0000,0x0000,0x563C,0x0000,0xBBC4,0x3A6A,0x0000,
- 0x0000,0x5642,0xBBC5,0x0000,0x5643,0x563D,0x3333,0x563E,
- 0x5647,0x5646,0x5645,0x5641,0x0000,0x0000,0x0000,0x5640,
- 0x0000,0x0000,0x5644,0xBBC7,0xBBC8,0x0000,0xBBC9,0xBBCA,
- 0x0000,0x4A78,0x0000,0xBBC6,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xBBCB,0x0000,0x0000,0xBBCC,0x0000,0x0000,0x0000,
- 0x0000,0xBBCD,0x0000,0x0000,0x0000,0xBBCE,0x0000,0xBBCF,
- 0x0000,0x0000,0xBBD0,0xBBD1,0x0000,0x0000,0xBBD2,0x0000,
- 0xBBD3,0x0000,0xBBD7,0x564B,0x5648,0x0000,0x564A,0x0000,
- 0x4D72,0xBBD5,0x5649,0x0000,0x0000,0xBBD4,0x0000,0x0000,
- 0x0000,0xBBD6,0x0000,0x0000,0x563F,0x0000,0x0000,0xBBD8,
- 0xBBD9,0xBBDA,0xBBDB,0x0000,0xBBDC,0x0000,0x0000,0x0000,
- 0x0000,0x3F73,0xBBDD,0x0000,0x564C,0xBBDE,0x0000,0x3A37,
- 0xBBDF,0x0000,0x0000,0x564D,0x0000,0x0000,0x564E,0x0000,
- 0x0000,0xBBE0,0xBBE1,0x0000,0x0000,0x0000,0xBBE2,0xBBE3,
- 0x0000,0xBBE4,0x5651,0xBBE5,0x5650,0x0000,0x0000,0x564F,
- 0xBBE6,0x0000,0xBBE7,0x4568,0x563A,0x0000,0x0000,0x0000,
- 0x5657,0x0000,0xBBE8,0xBBE9,0xBBEA,0xBBEB,0x0000,0x0000,
- 0x0000,0xBBEC,0x0000,0xBBED,0x0000,0x5653,0x0000,0xBBEE,
- 0xBBEF,0x0000,0x5652,0x0000,0x0000,0x0000,0x0000,0xBBF0,
- 0x0000,0x0000,0x0000,0xBBF1,0x5654,0x0000,0x5655,0x0000,
- 0xBBF2,0x0000,0xE6F4,0x0000,0xBBF3,0x0000,0x0000,0x5658,
- 0xBBF4,0xBBF5,0x4E66,0x0000,0x5659,0x5656,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xBBF6,0x0000,0x0000,0x0000,0xBBF7,
- 0x0000,0x565A,0x0000,0xBBF8,0x3460,0x565B,0xBBFA,0x0000,
- 0xBBF9,0x0000,0x565D,0x565C,0x0000,0x0000,0x565E,0x0000,
- 0xBBFB,0xBBFC,0x0000,0x565F,0x0000,0x406E,0x3D23,0x0000,
- 0xBBFD,0x3D64,0x0000,0x4163,0xBBFE,0x3929,0x3A38,0x392A,
- 0x3570,0xBCA1,0x0000,0x5660,0x0000,0x0000,0x3A39,0x0000,
- 0x0000,0x384A,0x5661,0x4C26,0x4743,0x5662,0x0000,0x392B,
- 0xBCA2,0xBCA3,0x0000,0x342C,0x0000,0x4327,0x3652,0x0000,
-
- /* 5E00h */
- 0xBCA4,0x0000,0x3B54,0x495B,0x0000,0x0000,0x4841,0xBCA5,
- 0x0000,0x0000,0x0000,0x5663,0x3475,0xBCA6,0x0000,0x0000,
- 0x0000,0x5666,0xBCA7,0x0000,0xBCA8,0xBCA9,0x4421,0x0000,
- 0xBCAA,0x5665,0x5664,0x5667,0x0000,0x446B,0x0000,0xBCAB,
- 0xBCAC,0x0000,0x0000,0x0000,0x0000,0x3F63,0x0000,0x0000,
- 0xBCAE,0x0000,0x0000,0x3B55,0x0000,0x404A,0xBCAD,0x4253,
- 0x3522,0x0000,0xBCAF,0x4422,0x0000,0xBCB0,0x5668,0x5669,
- 0x3E6F,0x0000,0x0000,0x0000,0x0000,0x4B39,0xBCB1,0x0000,
- 0x566C,0x0000,0x0000,0x566B,0x566A,0x497D,0x0000,0x5673,
- 0x0000,0xBCB4,0x0000,0xBCB2,0x4B5A,0x0000,0x566D,0x0000,
- 0xBCB3,0xBCB5,0x0000,0x0000,0x566F,0x4B6B,0xBCB6,0x566E,
- 0xBCB7,0x0000,0x0000,0xBCB8,0xBCB9,0x0000,0xBCBA,0x5670,
- 0x0000,0x4828,0x5671,0x4A3E,0x5672,0x0000,0x0000,0x0000,
- 0xBCBB,0x0000,0xBCBC,0xBCBD,0xBCBE,0xBCBF,0xBCC0,0x0000,
- 0xBCC1,0x0000,0x3433,0x4A3F,0x472F,0x5674,0x5675,0x0000,
- 0x392C,0x3434,0x5676,0x3838,0x4D44,0x4D29,0x3476,0x5678,
- 0xBCC2,0x4423,0x0000,0x392D,0x3E31,0x0000,0x0000,0x485F,
- 0x0000,0x0000,0x3E32,0xBCC3,0x0000,0x0000,0xBCC4,0x3D78,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x446C,0x4A79,0x4539,
- 0x0000,0x0000,0x392E,0x0000,0x495C,0x0000,0x0000,0x0000,
- 0x5679,0x0000,0xBCC5,0x0000,0xBCC6,0xBCC7,0x4559,0x3A42,
- 0xBCC8,0x0000,0xBCC9,0x384B,0xBCCA,0x446D,0x0000,0x0000,
- 0x0000,0xBCCB,0x0000,0xBCCC,0x0000,0x3043,0x3D6E,0x392F,
- 0x4D47,0x0000,0x0000,0x0000,0x0000,0xBCCD,0xBCCE,0xBCCF,
- 0x0000,0x567A,0x567B,0x4751,0x0000,0x0000,0xBCD0,0x0000,
- 0x567C,0x4E77,0x4F2D,0xBCD2,0xBCD1,0x0000,0xBCD3,0x567E,
- 0x567D,0xBCD4,0xBCD5,0x3347,0xBCD6,0xBCD7,0x5721,0x0000,
- 0x0000,0x0000,0x5724,0x5725,0xBCD8,0x5723,0xBCD9,0x4940,
- 0x3E33,0x5727,0x5726,0x5722,0x0000,0xBCDA,0x0000,0x0000,
- 0x5728,0x5729,0x0000,0xBCDB,0x572A,0x0000,0x0000,0x0000,
- 0x572D,0x572B,0x0000,0x572C,0x572E,0x0000,0x3164,0x446E,
- 0x572F,0x0000,0x377A,0x3276,0x4736,0x0000,0x5730,0x467B,
-
- /* 5F00h */
- 0x0000,0x4A5B,0xBCDC,0x5731,0x4F2E,0x0000,0xBCDD,0xBCDE,
- 0xBCDF,0x5732,0x4A40,0x5735,0x5021,0x5031,0xBCE0,0x3C30,
- 0x4675,0x5736,0x0000,0x355D,0x4424,0x307A,0x5737,0x4A26,
- 0x3930,0xBCE1,0x0000,0x4350,0xBCE2,0xBCE3,0x0000,0x446F,
- 0x0000,0xBCE4,0xBCE5,0xBCE6,0xBCE7,0x4C6F,0x3839,0x384C,
- 0xBCE8,0x5738,0x0000,0xBCE9,0xBCEA,0x5739,0xBCEB,0x573F,
- 0xBCEC,0x3C65,0x0000,0x0000,0xBCED,0x4425,0xBCEE,0x362F,
- 0x573A,0x0000,0x0000,0xBCEF,0x492B,0xBCF0,0x4346,0xBCF1,
- 0xBCF2,0x573B,0x0000,0x0000,0xBCF3,0xBCF4,0x0000,0xBCF5,
- 0x573C,0x0000,0x3630,0x0000,0x573D,0xBCF6,0x573E,0x0000,
- 0xBCF7,0x5740,0x0000,0x4576,0xBCF8,0x0000,0x5741,0x5742,
- 0xBCF9,0x5743,0x0000,0xBCFA,0x5734,0x5733,0x0000,0x0000,
- 0xBCFB,0x5744,0x3741,0xBCFC,0xBCFD,0x0000,0x4927,0xBCFE,
- 0x0000,0x3A4C,0x4937,0x4426,0x494B,0x5745,0x0000,0xBDA1,
- 0x3E34,0x3146,0xBDA2,0x5746,0xBDA3,0xBDA4,0x0000,0x5747,
- 0xBDA5,0x4C72,0xBDA6,0x0000,0x4860,0xBDA7,0xBDA8,0x574A,
- 0x317D,0x402C,0x5749,0x5748,0x3742,0x4254,0x0000,0x574E,
- 0x574C,0xBDA9,0x574B,0x4E27,0x3865,0xBDAA,0x0000,0xBDAB,
- 0x3D79,0x574D,0x454C,0x3D3E,0x0000,0x0000,0xBDAC,0x4640,
- 0x5751,0x5750,0x0000,0x0000,0xBDAD,0xBDAE,0x574F,0x0000,
- 0x5752,0x3866,0xBDAF,0x0000,0xBDB2,0x0000,0x0000,0xBDB0,
- 0x5753,0x497C,0x3D5B,0xBDB1,0xBDB3,0x5754,0x4879,0xBDB4,
- 0xBDB5,0xBDB6,0x0000,0x4641,0x4427,0x0000,0x0000,0x0000,
- 0xBDB7,0x4530,0x0000,0x0000,0x5755,0x352B,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3F34,0xBDB8,0x492C,0x0000,0xBDB9,
- 0xBDBA,0xBDBB,0x0000,0xBDBC,0x3477,0x4726,0x0000,0x0000,
- 0xBDBD,0xBDBE,0xBDBF,0xBDC0,0xBDC1,0x0000,0x5756,0x3B56,
- 0x4B3A,0x4B3B,0x0000,0x0000,0x317E,0x575B,0xBDC2,0x0000,
- 0x4369,0xBDC3,0xBDC4,0x0000,0x5758,0x0000,0x0000,0x0000,
- 0xBDC5,0xBDC6,0xBDC7,0x3277,0xBDC8,0xBDC9,0xBDCA,0xBDCB,
- 0x582D,0x575A,0xBDCC,0xBDCD,0x0000,0x4730,0xBDCE,0x0000,
- 0x5759,0x0000,0xBDCF,0x5757,0xBDD0,0x397A,0x0000,0x575D,
-
- /* 6000h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBDD1,
- 0x0000,0x0000,0xBDD2,0x0000,0x0000,0xBDD3,0x5763,0x5769,
- 0x5761,0x0000,0x455C,0xBDD4,0xBDD5,0x5766,0x495D,0xBDD6,
- 0xBDD7,0x5760,0xBDD8,0x5765,0x4E67,0x3B57,0x0000,0xBDD9,
- 0x4255,0x575E,0x0000,0x0000,0xBDDA,0x355E,0x5768,0x402D,
- 0x3165,0x5762,0x3278,0x5767,0x0000,0xBDDB,0x0000,0x3631,
- 0x0000,0x5764,0x0000,0xBDDC,0x0000,0xBDDD,0x0000,0x0000,
- 0x0000,0x0000,0x576A,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xBDDE,0x576C,0x5776,0x5774,0x0000,0x0000,0x5771,0xBDDF,
- 0xBDE0,0xBDE1,0x5770,0x4E78,0xBDE2,0x5772,0x0000,0x0000,
- 0x3632,0xBDE3,0x3931,0x0000,0xBDE4,0x3D7A,0xBDE5,0xBDE6,
- 0x0000,0x5779,0x576B,0x0000,0x0000,0xBDE7,0x0000,0x576F,
- 0x575F,0xBDE8,0x327A,0x5773,0x5775,0x4351,0x0000,0xBDE9,
- 0x3A28,0x3238,0x576D,0x5778,0x5777,0x3633,0x0000,0x4229,
- 0x3366,0xBDEA,0x0000,0x0000,0x0000,0x3743,0x0000,0x576E,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBDEB,0xBDEC,
- 0x0000,0x577A,0xBDED,0x577D,0x5821,0x0000,0xBDEE,0x0000,
- 0xBDEF,0x3C3D,0xBDF0,0x5827,0x4470,0x577B,0xBDF1,0x0000,
- 0x0000,0xBDF2,0x5825,0xBDF3,0x3279,0xBDF4,0x5823,0x5824,
- 0xBDF5,0x0000,0x577E,0x5822,0x0000,0xBDF6,0xBDF7,0x3867,
- 0x4D2A,0x0000,0xBDF8,0x3435,0xBDF9,0xBDFA,0x3159,0x5826,
- 0xBDFB,0x473A,0x302D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xBDFC,0xBDFD,0x4861,0x575C,0x582C,0x5830,0x4C65,0xBDFE,
- 0x5829,0x0000,0x0000,0xBEA1,0x4569,0x582E,0xBEA2,0x0000,
- 0x0000,0x0000,0xBEA3,0x0000,0xBEA4,0x3E70,0x582F,0x4657,
- 0xBEA5,0xBEA6,0xBEA7,0xBEA8,0x0000,0x0000,0xBEA9,0xBEAA,
- 0x0000,0x4F47,0x0000,0x582B,0xBEAB,0xBEAC,0x0000,0x0000,
- 0x5831,0xBEAD,0x397B,0xBEAE,0x404B,0xBEAF,0xBEB0,0x3054,
- 0x582A,0x5828,0xBEB1,0x415A,0x0000,0xBEB2,0x0000,0x577C,
- 0x3B34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4246,0x583D,0xBEB3,0x415B,0x5838,0xBEB4,0x5835,0x5836,
- 0xBEB5,0x3C66,0x5839,0x583C,0xBEB6,0xBEB7,0x0000,0x0000,
-
- /* 6100h */
- 0x5837,0x3D25,0xBEB8,0x583A,0x0000,0x0000,0x5834,0xBEB9,
- 0x4C7C,0x4C7B,0xBEBA,0x0000,0xBEBB,0x583E,0x583F,0x3055,
- 0xBEBC,0xBEBD,0xBEBE,0xBEBF,0xBEC0,0x5833,0xBEC1,0xBEC2,
- 0x0000,0xBEC3,0x3672,0x3026,0xBEC4,0x0000,0xBEC5,0x3436,
- 0x0000,0x583B,0xBEC6,0x0000,0x0000,0x0000,0x0000,0x5843,
- 0x5842,0x0000,0xBEC7,0xBEC8,0x5847,0x0000,0x0000,0x0000,
- 0xBEC9,0xBECA,0x0000,0x0000,0x5848,0xBECB,0xBECC,0xBECD,
- 0x0000,0xBECE,0x0000,0x0000,0x5846,0x5849,0x5841,0x5845,
- 0x0000,0xBECF,0x584A,0x0000,0x584B,0xBED0,0xBED1,0x5840,
- 0x3B7C,0xBED2,0x5844,0x4256,0x3932,0x5832,0x3F35,0x0000,
- 0x0000,0x0000,0x0000,0x5858,0x0000,0x4A69,0x0000,0x0000,
- 0x584E,0x584F,0x5850,0x0000,0x0000,0x5857,0xBED3,0x5856,
- 0xBED4,0x0000,0x4B7D,0x3437,0x0000,0x5854,0x0000,0x3745,
- 0x3334,0x0000,0x0000,0x5851,0xBED5,0x0000,0x4E38,0x5853,
- 0x3056,0x5855,0xBED6,0x584C,0x5852,0x5859,0x3744,0x584D,
- 0xBED7,0x0000,0x0000,0xBED8,0xBED9,0x0000,0x4D5D,0xBEDA,
- 0xBEDB,0xBEDC,0x4D2B,0xBEDD,0xBEDE,0x0000,0x0000,0x585C,
- 0x0000,0x0000,0x5860,0xBEDF,0x0000,0xBEE0,0x417E,0x0000,
- 0x4E79,0x5861,0xBEE1,0xBEE2,0x585E,0x0000,0x585B,0xBEE3,
- 0xBEE4,0x585A,0x585F,0x0000,0xBEE5,0xBEE6,0x0000,0xBEE7,
- 0xBEE8,0x0000,0x0000,0x0000,0x4A30,0xBEE9,0x0000,0x4634,
- 0xBEEA,0x3746,0xBEEB,0x5862,0x585D,0xBEEC,0x5863,0x0000,
- 0x0000,0x0000,0x377B,0x0000,0x0000,0x0000,0x3231,0x0000,
- 0xBEED,0xBEEE,0x586B,0x0000,0xBEEF,0x0000,0x3438,0x0000,
- 0xBEF0,0xBEF1,0xBEF2,0x5869,0x0000,0x0000,0x586A,0x3A29,
- 0x5868,0x5866,0x5865,0x586C,0x5864,0x586E,0xBEF3,0xBEF4,
- 0x327B,0x0000,0x0000,0x0000,0x0000,0xBEF5,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xBEF6,0xBEF7,0xBEF8,0xBEF9,
- 0x0000,0xBEFA,0xBEFB,0x5870,0x0000,0xBEFE,0x586F,0xBEFC,
- 0x0000,0xBEFD,0x0000,0x0000,0xBFA1,0xBFA2,0x0000,0xBFA3,
- 0x0000,0x0000,0x4428,0x0000,0x5873,0x0000,0x5871,0x5867,
- 0x377C,0x0000,0x5872,0x0000,0x5876,0x5875,0x5877,0x5874,
-
- /* 6200h */
- 0x5878,0xBFA4,0x0000,0xBFA5,0xBFA6,0x0000,0x0000,0xBFA7,
- 0x5879,0x587A,0x4A6A,0x0000,0x587C,0x587B,0x3D3F,0x0000,
- 0x402E,0x3266,0x327C,0xBFA8,0x587D,0xBFA9,0x303F,0x0000,
- 0x0000,0x0000,0x404C,0x587E,0xBFAA,0x6C43,0x5921,0x3761,
- 0xBFAB,0x5922,0xBFAC,0xBFAD,0x0000,0x0000,0x406F,0xBFAE,
- 0x0000,0xBFAF,0x5923,0xBFB0,0x0000,0x0000,0x5924,0x353A,
- 0x5925,0x0000,0x5926,0x5927,0x4257,0x0000,0x0000,0x0000,
- 0x384D,0xBFB1,0x0000,0x4C61,0x0000,0xBFB2,0x0000,0x4B3C,
- 0x3D6A,0x5928,0xBFB3,0xBFB4,0xBFB5,0x0000,0xBFB6,0x4070,
- 0x6E3D,0x4862,0x0000,0x3C6A,0xBFB7,0x3A4D,0x5929,0x0000,
- 0xBFB8,0xBFB9,0xBFBA,0x4247,0xBFBB,0x4A27,0xBFBC,0x0000,
- 0x4271,0x0000,0xBFBD,0x592C,0xBFBE,0x0000,0x592A,0x0000,
- 0x592D,0x0000,0x0000,0x592B,0xBFBF,0x0000,0x0000,0x0000,
- 0x592E,0x0000,0x0000,0x0000,0x0000,0xBFC0,0x4A31,0xBFC1,
- 0x0000,0x3037,0x0000,0xBFC2,0x0000,0x0000,0x495E,0x0000,
- 0x0000,0x4863,0xBFC3,0x0000,0x592F,0xBFC4,0x5932,0x3E35,
- 0x353B,0x0000,0x5930,0x5937,0x3E36,0x0000,0x0000,0x0000,
- 0x0000,0x5931,0x4744,0x0000,0x0000,0xBFC5,0xBFC6,0xBFC7,
- 0xBFC8,0x4D5E,0x5933,0x5934,0x5938,0x456A,0x5935,0x3933,
- 0x405E,0x0000,0x0000,0x5946,0x4834,0x0000,0x4272,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBFC9,0x0000,
- 0xBFCA,0x0000,0x0000,0x4864,0x5A2D,0x0000,0x0000,0x0000,
- 0x0000,0x4A7A,0x0000,0xBFCB,0x0000,0x4471,0xBFCC,0xBFCD,
- 0x0000,0x4B75,0xBFCE,0x593B,0x3221,0x436A,0xBFCF,0xBFD0,
- 0x0000,0x0000,0x5944,0x0000,0xBFD1,0x4334,0x593E,0x5945,
- 0x5940,0x5947,0x5943,0x0000,0x5942,0x476F,0xBFD2,0x593C,
- 0x327D,0x593A,0x3571,0x4273,0x5936,0xBFD3,0xBFD4,0x5939,
- 0x3934,0x405B,0xBFD5,0x3E37,0x5941,0x4752,0x0000,0x0000,
- 0x3572,0x3348,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xBFD6,0x0000,0x3367,0x3F21,0x5949,0x594E,
- 0x0000,0x594A,0xBFD7,0x377D,0xBFD8,0x594F,0x3B22,0x3969,
- 0x0000,0x0000,0x0000,0x0000,0xBFD9,0xBFDA,0x3D26,0x593D,
-
- /* 6300h */
- 0x0000,0x3B7D,0x594C,0xBFDB,0xBFDC,0x0000,0x0000,0x3B58,
- 0x594D,0x3044,0xBFDD,0xBFDE,0x5948,0xBFDF,0x0000,0x0000,
- 0xBFE0,0x4429,0x0000,0xBFE1,0x0000,0x0000,0xBFE2,0x0000,
- 0xBFE3,0x3573,0x0000,0x0000,0x0000,0x0000,0x0000,0x3634,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x594B,
- 0x3027,0xBFE4,0xBFE5,0x3A43,0x0000,0xBFE6,0x0000,0x3F36,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBFE7,0xBFE8,0x0000,
- 0x0000,0xBFE9,0x4472,0x0000,0xBFEA,0x4854,0x5951,0x415E,
- 0x0000,0xBFEB,0xBFEC,0xBFED,0xBFEE,0x0000,0xBFEF,0x0000,
- 0x0000,0x422A,0xBFF0,0xBFF1,0x3B2B,0x5952,0xBFF2,0x5954,
- 0x5950,0x0000,0xBFF3,0xBFF4,0xBFF5,0x4A61,0x0000,0x443D,
- 0xBFF6,0x0000,0x0000,0xBFF7,0x415C,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBFF8,0xBFF9,0x4A7B,
- 0x3C4E,0x5960,0x0000,0x595F,0xBFFA,0xBFFB,0x3F78,0x0000,
- 0x0000,0xBFFC,0x377E,0x0000,0xBFFD,0xBFFE,0x5959,0x3E39,
- 0xC0A1,0x0000,0x4668,0x4731,0xC0A2,0xC0A3,0x0000,0xC0A4,
- 0x5957,0x0000,0xC0A5,0x415D,0xC0A6,0x0000,0x0000,0xC0A7,
- 0x3C78,0x595C,0xC0A8,0x0000,0x3E38,0x0000,0x5956,0x595B,
- 0xC0A9,0x0000,0x4753,0x0000,0xC0AA,0xC0AB,0x5955,0x0000,
- 0x3721,0xC0AC,0xC0AD,0x335D,0x0000,0x0000,0xC0AE,0x595D,
- 0x4E2B,0x3A4E,0x4335,0x595A,0xC0AF,0x405C,0xC0B0,0x3935,
- 0x3F64,0x3166,0x413C,0x5958,0x3545,0xC0B1,0xC0B2,0xC0B3,
- 0x0000,0x0000,0x3747,0x0000,0x444F,0x595E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x415F,0x0000,0xC0B4,0x5961,0x0000,
- 0x5963,0xC0B5,0x0000,0x4237,0x5969,0xC0B6,0x5964,0x0000,
- 0xC0B7,0x5966,0x0000,0x0000,0x0000,0x0000,0xC0B8,0x4941,
- 0x4473,0xC0B9,0x5967,0xC0BA,0xC0BB,0xC0BC,0x4D2C,0x0000,
- 0x0000,0x0000,0x4D48,0x3439,0xC0BD,0x0000,0x0000,0x0000,
- 0xC0BE,0x302E,0x0000,0x5965,0x0000,0xC0BF,0x0000,0x0000,
- 0x0000,0x5962,0xC0C0,0x0000,0xC0C1,0x0000,0x3478,0x0000,
- 0x0000,0x0000,0xC0C2,0xC0C3,0x3167,0xC0C4,0x5968,0x0000,
- 0xC0C5,0xC0C6,0x4D49,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 6400h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x596C,0x0000,
- 0x0000,0xC0C7,0xC0C8,0x0000,0x0000,0x423B,0x0000,0x5973,
- 0xC0C9,0x0000,0xC0CA,0x596D,0xC0CB,0x0000,0x596A,0x5971,
- 0xC0CC,0x0000,0x0000,0x0000,0x5953,0x0000,0xC0CD,0x0000,
- 0xC0CE,0x0000,0xC0CF,0x0000,0xC0D0,0xC0D1,0x596E,0x0000,
- 0x5972,0xC0D2,0xC0D3,0x0000,0x4842,0x456B,0x0000,0xC0D4,
- 0xC0D5,0x0000,0x0000,0x0000,0x596B,0xC0D6,0x596F,0x0000,
- 0x0000,0x0000,0x3748,0x0000,0x0000,0xC0D7,0x3A71,0xC0D8,
- 0x0000,0x0000,0x405D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xC0D9,0x0000,0x0000,0x5977,0xC0DA,
- 0x0000,0xC0DB,0xC0DC,0xC0DD,0xC0DE,0x0000,0x0000,0x0000,
- 0x4526,0x0000,0xC0DF,0xC0E0,0xC0E1,0xC0E2,0x0000,0xC0E3,
- 0xC0E4,0xC0E5,0x0000,0xC0E6,0x0000,0x0000,0x0000,0x5974,
- 0x0000,0x4B60,0x0000,0x0000,0x0000,0xC0E7,0x0000,0x5975,
- 0x0000,0x0000,0x0000,0xC0E8,0xC0E9,0x0000,0x5976,0x0000,
- 0x4C4E,0x0000,0x4022,0xC0EA,0x0000,0xC0EB,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3762,0x0000,0xC0EC,0x0000,0xC0ED,
- 0x597D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC0EE,
- 0xC0EF,0xC0F0,0x3B35,0x597A,0x0000,0x5979,0x0000,0x0000,
- 0xC0F1,0xC0F2,0x4732,0xC0F3,0x0000,0xC0F4,0x4635,0xC0F5,
- 0x0000,0xC0F6,0x0000,0xC0F7,0x4531,0x597B,0xC0F8,0x0000,
- 0xC0F9,0x597C,0x0000,0x496F,0xC0FA,0x4745,0x3B23,0x0000,
- 0x4071,0x0000,0x4B50,0xC0FB,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x3349,0x0000,0x5A25,0x597E,0xC0FC,0xC0FD,0xC0FE,
- 0x0000,0x4D4A,0x5A27,0x0000,0xC1A1,0x5A23,0x0000,0x5A24,
- 0x0000,0xC1A2,0xC1A3,0xC1A4,0xC1A5,0x4160,0xC1A6,0x0000,
- 0xC1A7,0xC1A8,0x5A22,0x0000,0x593F,0xC1A9,0x0000,0xC1AA,
- 0x5A26,0x0000,0x5A21,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5A2B,0x5A2C,0x4527,0x5A2E,0xC1AB,0xC1AC,0x3B24,0x5A29,
- 0x0000,0xC1AD,0xC1AE,0x0000,0x353C,0xC1AF,0x0000,0x5A2F,
- 0xC1B0,0x5A28,0x5A33,0x0000,0x5A32,0xC1B1,0x5A31,0xC1B2,
- 0x0000,0x0000,0x5A34,0xC1B3,0x0000,0x5A36,0x3E71,0xC1B4,
-
- /* 6500h */
- 0x5A35,0xC1B5,0x0000,0x0000,0xC1B6,0x5A39,0x0000,0x0000,
- 0xC1B7,0xC1B8,0xC1B9,0x0000,0x0000,0x0000,0x0000,0xC1BA,
- 0x0000,0x0000,0x0000,0xC1BB,0xC1BC,0x0000,0xC1BD,0x0000,
- 0x5A37,0xC1BE,0x0000,0xC1BF,0x5A38,0x5970,0xC1C0,0xC1C1,
- 0x0000,0x0000,0xC1C2,0x5A3B,0x5A3A,0x0000,0xC1C3,0x0000,
- 0x0000,0xC1C4,0x5978,0x5A3C,0x5A30,0x0000,0xC1C5,0x3B59,
- 0x0000,0xC1C6,0x0000,0x0000,0x5A3D,0x5A3E,0x5A40,0x5A3F,
- 0x5A41,0x327E,0xC1C7,0x3936,0xC1C8,0xC1C9,0x4A7C,0x402F,
- 0x0000,0x0000,0x0000,0xC1CA,0x0000,0x384E,0x0000,0xC1CB,
- 0x5A43,0xC1CC,0x0000,0x0000,0x0000,0x5A46,0x0000,0x4952,
- 0xC1CD,0x355F,0xC1CE,0x0000,0xC1CF,0x5A45,0x5A44,0x4754,
- 0x5A47,0x3635,0x0000,0x0000,0x0000,0x5A49,0x5A48,0xC1D0,
- 0xC1D1,0x0000,0x343A,0x3B36,0x0000,0x0000,0x4658,0xC1D2,
- 0x0000,0x0000,0x0000,0xC1D3,0x3749,0x0000,0x0000,0x0000,
- 0x3F74,0x0000,0x5A4A,0x0000,0x4030,0x4528,0x0000,0x495F,
- 0x5A4B,0x0000,0xC1D4,0x0000,0x0000,0xC1D5,0x0000,0x0000,
- 0x0000,0xC1D6,0x5A4C,0x5A4D,0x0000,0xC1D7,0x0000,0x4A38,
- 0x555D,0x4046,0xC1D8,0x0000,0x494C,0x0000,0x3A58,0x0000,
- 0x4865,0x4843,0xC1D9,0x0000,0x0000,0xC1DA,0x0000,0x454D,
- 0xC1DB,0x4E41,0x0000,0x5A4F,0x3C50,0xC1DC,0x0000,0x5A50,
- 0xC1DD,0x3036,0x0000,0xC1DE,0x3654,0x404D,0xC1DF,0x4960,
- 0x0000,0x0000,0x0000,0x5A51,0x3B42,0x4347,0xC1E0,0x3B5B,
- 0x3F37,0x0000,0xC1E1,0xC1E2,0xC1E3,0x0000,0x0000,0x5A52,
- 0x0000,0x4A7D,0x0000,0x0000,0x3177,0x3B5C,0x0000,0xC1E4,
- 0x0000,0x5A55,0xC1E5,0x5A53,0x5A56,0x4E39,0x5A54,0x0000,
- 0xC1E6,0xC1E7,0x0000,0x407B,0x5A57,0x0000,0xC1E8,0x4232,
- 0xC1E9,0x0000,0x5A58,0x0000,0xC1EA,0x0000,0xC1EB,0x347A,
- 0xC1EC,0x5A5A,0x0000,0x5A59,0x0000,0x0000,0x0000,0xC1ED,
- 0x5A5B,0x5A5C,0x347B,0x0000,0x0000,0x467C,0x4336,0x356C,
- 0x3B5D,0x4161,0x0000,0x0000,0x3D5C,0x3030,0x0000,0x0000,
- 0xC1EE,0x5A5D,0xC1EF,0x0000,0xC1F0,0xC1F1,0x0000,0x0000,
- 0x0000,0xC1F2,0x3222,0x5A61,0x0000,0x0000,0xC1F3,0xC1F4,
-
- /* 6600h */
- 0xC1F5,0x0000,0x3937,0x5A60,0xC1F6,0x0000,0x3A2B,0x3E3A,
- 0xC1F7,0xC1F8,0x5A5F,0x0000,0x3E3B,0xC1F9,0x4C40,0x3A2A,
- 0x0000,0xC1FA,0xC1FB,0x3057,0x404E,0xC1FC,0xC1FD,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x5A66,0xC1FE,0xC2A1,0x4031,
- 0x3147,0xC2A2,0xC2A3,0xC2A4,0xC2A5,0x3D55,0xC2A6,0x4B66,
- 0x3A72,0xC2A7,0xC2A8,0xC2A9,0xC2AA,0x3E3C,0xC2AB,0x4027,
- 0xC2AC,0xC2AD,0x0000,0xC2AE,0x5A65,0x5A63,0x5A64,0xC2B0,
- 0x0000,0xC2AF,0x0000,0x0000,0x436B,0x0000,0x0000,0x5B26,
- 0xC2B1,0x5A6A,0x3B7E,0x3938,0x5A68,0xC2B2,0xC2B3,0x0000,
- 0x0000,0x5A69,0xC2B4,0x3F38,0xC2B5,0x0000,0xC2B7,0x5A67,
- 0x0000,0xC2B6,0x3B2F,0x0000,0x0000,0x0000,0x0000,0xC2B8,
- 0xC2B9,0xC2BA,0x0000,0xC2BB,0xC2BC,0x5A6C,0x5A6B,0x5A70,
- 0xC2BD,0xC2BE,0x5A71,0x0000,0x5A6D,0x0000,0x3322,0x5A6E,
- 0x5A6F,0x4855,0xC2C0,0xC2C1,0xC2C2,0x0000,0x4961,0x374A,
- 0x5A72,0x0000,0x0000,0xC2C4,0x4032,0xC2C5,0x3E3D,0xC2C7,
- 0xC2C8,0xC2C9,0x4352,0xC2CA,0xC2CC,0x0000,0xC2C3,0xC2C6,
- 0xC2CB,0x3647,0x0000,0x5A73,0x5A77,0x0000,0x0000,0x324B,
- 0x5A74,0x5A76,0x0000,0xC2CD,0xC2CE,0xC2CF,0x5A75,0x0000,
- 0xC2D0,0x3D6B,0xC2D1,0x0000,0x0000,0x0000,0x4348,0x3045,
- 0x5A78,0xC2D2,0xC2D3,0xC2D4,0xC2D5,0x5A79,0x0000,0xC2D6,
- 0xC2D7,0x0000,0x442A,0x0000,0xC2D8,0x0000,0x4E71,0x0000,
- 0x0000,0x0000,0x0000,0x3B43,0x0000,0xC2D9,0x4A6B,0x0000,
- 0x0000,0xC2DA,0xC2DB,0x0000,0x4B3D,0xC2DC,0x0000,0x0000,
- 0x5B22,0x5A7B,0x0000,0xC2DD,0x5A7E,0x0000,0x5A7D,0xC2DE,
- 0xC2DF,0x5A7A,0xC2E0,0xC2E1,0x5B21,0x0000,0x0000,0x465E,
- 0xC2E2,0x5A7C,0x0000,0x0000,0xC2E3,0x0000,0xC2E4,0xC2E5,
- 0x0000,0x0000,0x0000,0x0000,0xC2E6,0x0000,0x5B23,0x0000,
- 0x0000,0x3D6C,0x5B24,0xC2E7,0x4D4B,0x4778,0x0000,0xC2E8,
- 0x5B25,0x0000,0x0000,0x0000,0x0000,0x0000,0x5B27,0x0000,
- 0xC2E9,0x5B28,0x0000,0xC2EA,0xC2EB,0x0000,0xC2EC,0x0000,
- 0x5B29,0x0000,0x364A,0x3148,0x3939,0x5B2A,0x0000,0x5B2B,
- 0x3D71,0x4162,0xC2ED,0xC2BF,0x5258,0x413E,0x413D,0x4258,
-
- /* 6700h */
- 0x3A47,0x0000,0x0000,0x5072,0x0000,0xC2EE,0x0000,0xC2EF,
- 0x376E,0x4D2D,0x0000,0x4A7E,0x0000,0x497E,0xC2F0,0x5B2C,
- 0x0000,0x0000,0x0000,0xC2F1,0x3A73,0x443F,0x5B2D,0x4F2F,
- 0x0000,0xC2F2,0x0000,0x4B3E,0xC2F3,0x442B,0x5B2E,0x347C,
- 0xC2F4,0x0000,0xC2F5,0x0000,0x0000,0x0000,0x5B2F,0x5B30,
- 0x4C5A,0x0000,0x4C24,0x4B76,0x4B5C,0x3B25,0x5B32,0x0000,
- 0x0000,0x3C6B,0x0000,0xC2F6,0x4B51,0x0000,0x5B34,0x5B37,
- 0x5B36,0x0000,0x3479,0x0000,0x0000,0x3560,0xC2F7,0x5B33,
- 0x0000,0x5B35,0x0000,0x0000,0x0000,0xC2F8,0x5B38,0xC2F9,
- 0xC2FA,0x3F79,0x0000,0x0000,0xC2FB,0x0000,0x4D7B,0x3049,
- 0x3A60,0x423C,0x0000,0x3C5D,0xC2FC,0xC2FD,0x3E73,0x0000,
- 0x0000,0x5B3B,0x0000,0x0000,0x454E,0xC2FE,0x5B39,0x422B,
- 0x5B3A,0x3E72,0x4C5D,0x5B3C,0x5B3D,0x4D68,0xC3A1,0x0000,
- 0x0000,0x0000,0x5B42,0x0000,0xC3A2,0x393A,0xC3A3,0x4755,
- 0x5B3F,0x456C,0x5A5E,0x5A62,0xC3A4,0x354F,0xC3A5,0x4747,
- 0x0000,0x0000,0x0000,0xC3A6,0x5B41,0x0000,0x3E3E,0x4844,
- 0x0000,0xC3A7,0x0000,0x0000,0xC3A8,0x5B47,0x0000,0x487A,
- 0x0000,0x5B3E,0x0000,0x5B44,0x5B43,0x0000,0xC3A9,0xC3AA,
- 0x404F,0xC3AB,0x0000,0xC3AC,0x0000,0x4B6D,0xC3AD,0x4E53,
- 0xC3AE,0xC3AF,0x4B67,0xC3B0,0x324C,0x3B5E,0x0000,0x0000,
- 0x4F48,0x5B46,0x3F75,0x0000,0x0000,0x0000,0x5B45,0x0000,
- 0x0000,0x5B40,0x0000,0x0000,0x0000,0x0000,0x0000,0x384F,
- 0xC3B1,0xC3B2,0xC3B3,0x5B4C,0x5B4A,0xC3B4,0x324D,0x5B48,
- 0x5B4E,0x5B54,0x0000,0xC3B5,0xC3B6,0xC3B7,0x0000,0x0000,
- 0xC3B9,0x4248,0xC3BA,0xC3BB,0x4A41,0xC3BC,0x5B56,0x0000,
- 0xC3BD,0xC3BE,0x4922,0x0000,0x0000,0x0000,0x5B55,0x4770,
- 0x4B3F,0x343B,0xC3BF,0x4077,0x3D40,0x0000,0x0000,0xC3C0,
- 0x4453,0xC3C1,0x4D2E,0x0000,0xC3C2,0x5B51,0x5B50,0x0000,
- 0x0000,0xC3C3,0x5B52,0x0000,0x5B4F,0x0000,0xC3C4,0x5B57,
- 0x0000,0x5B4D,0x0000,0x0000,0x5B4B,0x0000,0x5B53,0x5B49,
- 0xC3C5,0x436C,0xC3C6,0x4C78,0x3C46,0x3A74,0xC3C7,0xC3C8,
- 0x0000,0xC3B8,0x0000,0x3A3A,0x0000,0x0000,0x4B6F,0x3341,
-
- /* 6800h */
- 0x0000,0x0000,0x444E,0x464A,0x3149,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4072,0xC3CA,0x0000,0x4034,0x372A,
- 0x0000,0xC3CB,0x0000,0x0000,0x0000,0xC3CC,0x5B59,0xC3CD,
- 0x0000,0x393B,0x337C,0x0000,0x0000,0x0000,0x0000,0xC3CF,
- 0xC3CE,0x5B5B,0x3374,0x5B61,0xC3D0,0xC3D1,0x0000,0xC3D2,
- 0xC3D3,0xC3D4,0x5B5E,0xC3D5,0x4073,0x0000,0x0000,0x0000,
- 0x334B,0x3A2C,0x0000,0xC3D6,0x334A,0x3A4F,0x0000,0xC3D7,
- 0x5B5C,0x3765,0x374B,0x456D,0xC3D8,0xC3D9,0x5B5A,0x0000,
- 0x3046,0x0000,0xC3DA,0x0000,0xC3DB,0x5B5D,0x5B5F,0x0000,
- 0x364D,0x372C,0xC3C9,0x343C,0x354B,0xC3DC,0x0000,0xC3DD,
- 0xC3DE,0x5B62,0x0000,0xC3DF,0x3A79,0x4B71,0x0000,0x3B37,
- 0x0000,0x0000,0x0000,0x5B63,0x0000,0x0000,0x0000,0x4930,
- 0x0000,0x0000,0x0000,0xC3E0,0x0000,0x0000,0xC3E1,0xC3E2,
- 0xC3E3,0xC3E4,0xC3E5,0x0000,0x5B6F,0xC3E6,0x3233,0x5B64,
- 0x0000,0xC3E7,0xC3E8,0xC3E9,0xC3EA,0x0000,0x5B75,0x5B65,
- 0x0000,0x4E42,0xC3EB,0x5B6C,0xC3EC,0x475F,0xC3ED,0x0000,
- 0xC3EE,0x0000,0x0000,0x0000,0x0000,0x5B74,0x0000,0x5B67,
- 0x0000,0x0000,0x0000,0x3034,0x5B69,0x0000,0xC3EF,0x393C,
- 0xC3F0,0x0000,0xC3F1,0x5B6B,0xC3F2,0x5B6A,0x0000,0x5B66,
- 0x5B71,0xC3F3,0x3E3F,0xC3F4,0x0000,0xC3F5,0x546D,0x3868,
- 0x4D7C,0xC3F6,0xC3F7,0x0000,0x0000,0x5B68,0xC3F8,0x4474,
- 0x3323,0x3A2D,0xC3F9,0x5B60,0x0000,0x5B70,0x3361,0x0000,
- 0x0000,0x5B6E,0x5B72,0xC3FA,0x456E,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x347E,0xC3FB,0x5C32,0x0000,
- 0xC3FC,0x4C49,0x5B77,0x347D,0xC3FD,0x5B7E,0x0000,0xC3FE,
- 0xC4A1,0xC4A2,0x4B40,0xC4A3,0x5C21,0x5C23,0xC4A4,0x5C27,
- 0x5B79,0xC4A5,0x432A,0x0000,0xC4A6,0xC4A7,0x0000,0x456F,
- 0x5C2B,0x5B7C,0x0000,0x5C28,0x0000,0xC4A8,0x0000,0x5C22,
- 0xC4A9,0x0000,0xC4AA,0xC4AB,0xC4AC,0xC4AD,0x3F39,0x5C2C,
- 0xC4AE,0xC4AF,0x4033,0x0000,0x0000,0xC4B0,0xC4B1,0x0000,
- 0x0000,0x5C2A,0x343D,0xC4B2,0xC4B3,0xC4B4,0x0000,0x0000,
-
- /* 6900h */
- 0x4F50,0x5B76,0x0000,0x0000,0x5C26,0x3058,0xC4B5,0x0000,
- 0x5B78,0xC4B6,0xC4B7,0x4C3A,0x5B7D,0x3F22,0x4447,0x5B73,
- 0xC4B8,0xC4B9,0x5C25,0xC4BA,0x0000,0x0000,0xC4BB,0xC4BC,
- 0x0000,0x3F7A,0x5C2F,0x3371,0x3821,0x0000,0x0000,0x0000,
- 0x0000,0x5C31,0x5B7A,0x5C30,0x0000,0x5C29,0x5B7B,0x0000,
- 0x5C2D,0x0000,0x5C2E,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5C3F,0xC4BD,0x0000,0xC4BE,0x464E,0xC4BF,0x5C24,0x0000,
- 0xC4C0,0x5C3B,0x0000,0xC4C1,0x0000,0x5C3D,0x0000,0x4458,
- 0x0000,0x0000,0xC4C2,0x0000,0x0000,0xC4C3,0x0000,0x0000,
- 0x0000,0xC4C4,0x4D4C,0x0000,0x0000,0x0000,0xC4C5,0x0000,
- 0x0000,0x0000,0x0000,0x4976,0x5C38,0x424A,0x0000,0xC4C6,
- 0x0000,0x5C3E,0x413F,0xC4C7,0x5C35,0x5C42,0x5C41,0x0000,
- 0x466F,0x5C40,0x466A,0xC4C8,0xC4C9,0xC4CA,0xC4CB,0x0000,
- 0xC4CC,0xC4CD,0x5C44,0x5C37,0xC4CE,0x3648,0x5C3A,0x3D5D,
- 0xC4CF,0xC4D0,0xC4D1,0x4760,0x5C3C,0x364B,0x0000,0x5C34,
- 0x5C36,0x5C33,0xC4D2,0xC4D3,0x4F30,0x335A,0x5C39,0xC4D4,
- 0xC4D5,0x5C43,0x3335,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x3A67,0x0000,0x0000,0xC4D6,0x315D,0x0000,
- 0x0000,0x5C54,0xC4D7,0x0000,0x4F31,0x5C57,0xC4D8,0x0000,
- 0xC4D9,0x0000,0x0000,0x3F3A,0x5C56,0x0000,0x0000,0x0000,
- 0x5C55,0xC4DA,0x0000,0x0000,0x0000,0xC4DB,0xC4DC,0x5C52,
- 0xC4DD,0x0000,0x0000,0xC4DE,0x0000,0xC4DF,0x5C46,0xC4E0,
- 0x0000,0x5C63,0x5C45,0x0000,0x5C58,0x0000,0x0000,0xC4E1,
- 0xC4E2,0x0000,0xC4E3,0x5C50,0xC4E4,0x0000,0x5C4B,0x5C48,
- 0x0000,0x5C49,0x0000,0x5C51,0x0000,0xC4E5,0x0000,0x7422,
- 0xC4E6,0x0000,0x5C4E,0x393D,0x4448,0x4164,0x5C4C,0x0000,
- 0x5C47,0xC4E7,0x0000,0x5C4A,0x0000,0x0000,0xC4E8,0xC4E9,
- 0x4D4D,0x4B6A,0x0000,0x0000,0x0000,0x5C4F,0x5C59,0x0000,
- 0x0000,0x0000,0xC4EA,0x0000,0x0000,0xC4EB,0x0000,0x5C61,
- 0x5C5A,0x0000,0x0000,0x5C67,0x0000,0x5C65,0xC4EC,0xC4ED,
- 0x0000,0xC4EE,0x5C60,0xC4EF,0x0000,0xC4F0,0x0000,0x0000,
- 0x0000,0x5C5F,0x0000,0x4450,0x0000,0x4165,0xC4F1,0x5C5D,
-
- /* 6A00h */
- 0xC4F2,0xC4F3,0x5C5B,0xC4F4,0x0000,0x5C62,0x0000,0x0000,
- 0x0000,0x0000,0x5C68,0x4875,0x5C6E,0x0000,0x0000,0xC4F5,
- 0x0000,0xC4F6,0x5C69,0x5C6C,0x5C66,0xC4F7,0x0000,0x4374,
- 0x0000,0x4938,0xC4F8,0x5C5C,0x0000,0xC4F9,0x5C64,0x3E40,
- 0xC4FA,0x4C4F,0x5C78,0x5C6B,0xC4FB,0x0000,0x0000,0x0000,
- 0xC4FC,0x3822,0x3223,0x335F,0x0000,0x0000,0x5C53,0x0000,
- 0xC4FD,0x0000,0xC4FE,0x0000,0xC5A1,0x3E41,0x5C70,0xC5A2,
- 0x5C77,0x3C79,0x3372,0xC5A3,0x0000,0x432E,0xC5A4,0xC5A5,
- 0x0000,0x0000,0x0000,0x0000,0x5C6D,0xC5A6,0xC5A7,0x5C72,
- 0x5C76,0xC5A8,0xC5A9,0x3636,0x0000,0x0000,0xC5AA,0x0000,
- 0xC5AB,0xC5AC,0xC5AD,0x0000,0x0000,0xC5AE,0xC5AF,0x0000,
- 0x354C,0x5C74,0x0000,0xC5B0,0x0000,0x0000,0x0000,0x3521,
- 0x0000,0x464B,0x5C73,0x0000,0xC5B1,0x0000,0x5C75,0xC5B2,
- 0x0000,0x0000,0xC5B3,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xC5B4,0x5C6F,0xC5B5,0x0000,0x0000,0x0000,0x0000,
- 0x5C71,0x0000,0x0000,0x0000,0x0000,0x0000,0xC5B6,0x3360,
- 0x4349,0xC5B7,0x0000,0xC5B8,0x5C7C,0x0000,0xC5B9,0xC5BA,
- 0x0000,0xC5BB,0x0000,0xC5BC,0x0000,0x5C7A,0x3869,0x0000,
- 0x5C79,0xC5BD,0x0000,0x0000,0x0000,0x0000,0x0000,0x5D21,
- 0x0000,0x0000,0x0000,0xC5BE,0x5B58,0xC5BF,0xC5C0,0xC5C1,
- 0x5C7B,0x0000,0x5C7D,0x5C7E,0x0000,0xC5C2,0x0000,0x0000,
- 0x0000,0x0000,0x5D2C,0xC5C3,0x5D28,0x0000,0x5B6D,0xC5C4,
- 0xC5C5,0xC5C6,0x0000,0x5D27,0xC5C7,0x0000,0x0000,0x0000,
- 0x5D26,0x0000,0x0000,0x5D23,0x0000,0xC5C8,0xC5C9,0xC5CA,
- 0x0000,0x5C6A,0x5D25,0x5D24,0x0000,0x0000,0xC5CB,0x0000,
- 0xC5CD,0xC5CC,0x0000,0x0000,0xC5CE,0x0000,0x0000,0x0000,
- 0xC5CF,0x5D2A,0x0000,0x4F26,0xC5D0,0xC5D1,0xC5D2,0x0000,
- 0x0000,0x0000,0x5D2D,0x367B,0xC5D3,0xC5D4,0x5D29,0x5D2B,
- 0x0000,0x0000,0x0000,0x0000,0xC5D5,0x0000,0x0000,0xC5D6,
- 0x4827,0x0000,0x5D2E,0x0000,0xC5D7,0x0000,0x0000,0x0000,
- 0xC5D8,0xC5D9,0xC5DA,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x5D32,0x5D2F,0xC5DB,0xC5DC,0x0000,0x0000,
-
- /* 6B00h */
- 0x0000,0x0000,0xC5DD,0xC5DE,0x4D73,0x5D30,0xC5DF,0xC5E0,
- 0x0000,0xC5E1,0x5C5E,0x0000,0x0000,0x0000,0x0000,0xC5E2,
- 0xC5E3,0xC5E4,0x5D33,0x0000,0x0000,0x0000,0x5D34,0xC5E5,
- 0x0000,0x0000,0x0000,0xC5E6,0x0000,0x3135,0xC5E7,0x5D36,
- 0x3767,0x3C21,0x0000,0x3655,0xC5E8,0x0000,0x0000,0x3224,
- 0xC5E9,0x0000,0x0000,0xC5EA,0xC5EB,0x0000,0x0000,0xC5EC,
- 0x0000,0x0000,0x4D5F,0x0000,0x0000,0xC5ED,0xC5EE,0x5D38,
- 0x5D37,0x5D3A,0x353D,0xC5EF,0x0000,0x3656,0x343E,0xC5F0,
- 0x0000,0x0000,0x0000,0x5D3D,0x0000,0x0000,0xC5F1,0x5D3C,
- 0x0000,0x5D3E,0xC5F2,0x0000,0x324E,0xC5F3,0x4337,0x0000,
- 0x5D3F,0x0000,0xC5F4,0x343F,0x5D41,0x0000,0xC5F5,0x0000,
- 0xC5F6,0x5D40,0x0000,0x5D42,0x0000,0xC5F7,0x0000,0x5D43,
- 0xC5F8,0x5D44,0x3B5F,0x4035,0x3A21,0x0000,0x4970,0xC5F9,
- 0x0000,0x4A62,0x4F44,0xC5FA,0x0000,0x0000,0xC5FB,0x3B75,
- 0xC5FC,0x0000,0x0000,0x3A50,0x4E72,0xC5FD,0x0000,0x0000,
- 0x5D45,0x5D46,0x0000,0x3B60,0x0000,0xC5FE,0xC6A1,0x5D47,
- 0x5D48,0x0000,0xC6A2,0x5D4A,0x5D49,0xC6A3,0x4B58,0x0000,
- 0x0000,0x3D5E,0x3C6C,0x3B44,0x0000,0x5D4B,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x5D4D,0x3F23,0xC6A4,
- 0x5D4C,0x0000,0x0000,0xC6A5,0x0000,0x0000,0x5D4E,0xC6A6,
- 0xC6A7,0x0000,0xC6A8,0xC6A9,0x5D4F,0x0000,0x0000,0x0000,
- 0xC6AA,0xC6AB,0x5D50,0x5D51,0xC6AC,0xC6AD,0xC6AE,0x5D52,
- 0xC6AF,0x5D54,0x5D53,0x5D55,0x3225,0x434A,0x0000,0x5D56,
- 0xC6B0,0xC6B1,0x3B26,0x334C,0x5D57,0xC6B2,0xC6B3,0x4542,
- 0x544C,0x0000,0x0000,0xC6B4,0xC6B5,0x3523,0x5D58,0x0000,
- 0x0000,0xC6B6,0x0000,0x5D59,0xC6B7,0x4A6C,0x4B68,0x0000,
- 0x0000,0x0000,0x4647,0x5D5A,0x4866,0x0000,0xC6B8,0x0000,
- 0x487B,0x0000,0xC6B9,0x4C53,0x0000,0x0000,0x0000,0x5D5B,
- 0x0000,0xC6BA,0x0000,0xC6BB,0x0000,0x0000,0xC6BC,0xC6BD,
- 0x0000,0x0000,0x0000,0x5D5D,0x5D5C,0x0000,0xC6BE,0x5D5F,
- 0x0000,0xC6BF,0x0000,0x5D5E,0x0000,0x0000,0x0000,0xC6C0,
- 0x0000,0xC6C1,0x0000,0x0000,0x0000,0x0000,0x0000,0xC6C2,
-
- /* 6C00h */
- 0x0000,0x0000,0xC6C3,0x0000,0xC6C4,0xC6C5,0x0000,0x0000,
- 0x5D61,0xC6C6,0x0000,0x0000,0x0000,0xC6C7,0xC6C8,0x3B61,
- 0xC6C9,0x4C31,0xC6CA,0x5D62,0x5D63,0x0000,0x0000,0x3524,
- 0x0000,0xC6CB,0x0000,0x5D64,0x0000,0x0000,0x0000,0xC6CC,
- 0x0000,0x0000,0x0000,0x5D66,0x5D65,0x0000,0xC6CD,0xC6CE,
- 0xC6CF,0x0000,0x0000,0x0000,0xC6D0,0x0000,0xC6D1,0x0000,
- 0x0000,0x0000,0x0000,0xC6D2,0x3F65,0xC6D3,0xC6D4,0x4939,
- 0x314A,0x0000,0xC6D5,0xC6D6,0x0000,0x0000,0x4845,0xC6D7,
- 0x4475,0x3D41,0x3561,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xC6D8,0xC6D9,0x0000,0xC6DA,0x4846,0xC6DB,
- 0x3C2E,0x0000,0xC6DC,0x0000,0xC6DD,0x5D68,0x0000,0x3440,
- 0x0000,0xC6DE,0x3178,0xC6DF,0xC6E0,0x4672,0x5D67,0x393E,
- 0x4353,0x0000,0x5D69,0x0000,0x0000,0x0000,0x0000,0xC7B6,
- 0x5D71,0x0000,0x5D6A,0xC6E1,0x0000,0xC6E2,0x0000,0xC6E3,
- 0x4241,0x0000,0x3562,0x5D72,0xC6E4,0x0000,0xC6E5,0x0000,
- 0xC6E6,0xC6E7,0x3768,0xC6E8,0x0000,0x3525,0x5D70,0x0000,
- 0x0000,0x5D6E,0x5D6B,0x4D60,0x0000,0xC6E9,0xC6EA,0xC6EB,
- 0x4440,0xC6EC,0x0000,0x0000,0x4659,0x5D6C,0x0000,0x0000,
- 0x5D74,0x0000,0x5D73,0x3723,0xC6ED,0xC6EE,0x322D,0xC6EF,
- 0xC6F0,0x3A3B,0x5D6D,0x5D6F,0xC6F1,0x0000,0x0000,0xC6F2,
- 0x0000,0x4B57,0x4274,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4B77,0x0000,0x0000,0x5D7C,0x0000,
- 0xC6F3,0x5D7D,0xC6F4,0x324F,0xC6F5,0x0000,0x0000,0x0000,
- 0x4A28,0x4C7D,0x5E21,0x3C23,0x3E42,0x5D78,0x5D7E,0x3168,
- 0x0000,0x3637,0xC6F6,0x0000,0x5D75,0x5D7A,0xC6F7,0x0000,
- 0x0000,0x4074,0x4771,0x0000,0x4867,0xC6F8,0x0000,0xC6F9,
- 0xC6FA,0xC6FB,0xC6FC,0x5D77,0xC6FD,0x4B21,0xC6FE,0x5D79,
- 0x0000,0x5E24,0xC7A1,0x5E22,0xC7A2,0x5D7B,0x0000,0x0000,
- 0xC7A3,0x4B22,0x4748,0x3563,0x0000,0x4525,0x0000,0xC7A4,
- 0x436D,0xC7A5,0x5E25,0xC7A6,0xC7A7,0x0000,0xC7A8,0x5E23,
- 0x4259,0x5D76,0xC7A9,0x314B,0xC7AA,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 6D00h */
- 0x0000,0x0000,0x0000,0x0000,0xC7AB,0x0000,0x0000,0xC7AC,
- 0x0000,0x0000,0xC7AD,0x4D4E,0x5E30,0x0000,0xC7AE,0xC7AF,
- 0x0000,0xC7B0,0x5E2F,0xC7B1,0x0000,0x0000,0x0000,0x4076,
- 0x0000,0x5E2C,0xC7B2,0x4D6C,0x0000,0x0000,0x4636,0x5E26,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4445,0xC7B3,0xC7B4,
- 0xC7B5,0x314C,0x393F,0x5E29,0x0000,0x0000,0xC7B7,0xC7B8,
- 0x0000,0xC7B9,0x3D27,0x5E2E,0x0000,0x5E2D,0x5E28,0x0000,
- 0x5E2B,0xC7BA,0x0000,0x3368,0xC7BB,0x5E2A,0x4749,0xC7BC,
- 0x0000,0x4E2E,0x0000,0x0000,0x3E74,0x4075,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC7BD,
- 0x0000,0x5E36,0x5E34,0x0000,0x494D,0x0000,0xC7BE,0xC7BF,
- 0x0000,0xC7C0,0x0000,0x5E31,0x5E33,0xC7C1,0x313A,0xC7C2,
- 0x0000,0x3940,0x4F32,0x0000,0x333D,0x0000,0x4962,0xC7C3,
- 0xC7C4,0x0000,0x0000,0x0000,0x4D61,0x0000,0x0000,0x3324,
- 0x3F3B,0x5E35,0x0000,0x0000,0xC7C5,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xC7C6,0x0000,0x0000,0x5E3A,0x0000,0xC7C7,
- 0x3E43,0x0000,0x0000,0x0000,0x4D30,0x0000,0x5E37,0x0000,
- 0x0000,0xC7C8,0xC7C9,0x5E32,0xC7CA,0x5E38,0xC7CB,0xC7CC,
- 0xC7CD,0x4E5E,0x0000,0x4573,0x4642,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xC7CE,0x0000,0xC7CF,0x0000,0x0000,0x3336,
- 0x0000,0x0000,0x3155,0x0000,0xC7D0,0x5E3E,0x0000,0xC7D1,
- 0x5E41,0xC7D2,0x0000,0x0000,0x4E43,0xC7D3,0x0000,0xC7D4,
- 0x4D64,0x0000,0x0000,0x0000,0xC7D5,0x5E48,0x5E42,0x5E3F,
- 0xC7D6,0x0000,0xC7D7,0x4E54,0x5E45,0x0000,0xC7D8,0xC7D9,
- 0x0000,0x3D4A,0x5E47,0x0000,0x0000,0x5E4C,0xC7DA,0x0000,
- 0x4571,0x5E4A,0x0000,0xC7DB,0x0000,0xC7DC,0x5E44,0xC7DD,
- 0xC7DE,0x4338,0xC7DF,0x0000,0x5E4B,0xC7E0,0x5E40,0x0000,
- 0x5E46,0xC7E1,0x5E4D,0x307C,0x5E43,0x0000,0x5E4E,0xC7E2,
- 0xC7E3,0x3F3C,0x0000,0x3D5F,0xC7E4,0x4A25,0xC7E5,0x3A2E,
- 0x0000,0x5E3B,0x5E49,0x453A,0xC7E6,0x0000,0x0000,0x0000,
-
- /* 6E00h */
- 0xC7E7,0x0000,0x0000,0x0000,0xC7E8,0x4036,0x0000,0x3369,
- 0x3A51,0x3E44,0x5E3D,0x3D42,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x374C,0x0000,0x5E3C,0x0000,0x0000,
- 0x0000,0x5E52,0x3D6D,0x383A,0x0000,0x5E61,0xC7E9,0x5E5B,
- 0x3574,0x454F,0xC7EA,0x5E56,0x5E5F,0x302F,0x3132,0xC7EB,
- 0x0000,0x3239,0x0000,0x5E58,0x422C,0x5E4F,0x5E51,0x3941,
- 0x0000,0x0000,0xC7EC,0x0000,0x0000,0x0000,0xC7ED,0x0000,
- 0x5E62,0xC7EE,0x5E5D,0xC7EF,0xC7F0,0x0000,0x5E55,0x0000,
- 0x0000,0x0000,0x0000,0x5E5C,0xC7F1,0xC7F2,0x0000,0x0000,
- 0xC7F3,0xC7F4,0x4C2B,0xC7F5,0x0000,0x5E5A,0x5E5E,0xC7F6,
- 0x0000,0xC7F7,0xC7F8,0xC7F9,0xC7FA,0x0000,0x3850,0xC7FB,
- 0x3E45,0x0000,0x0000,0x4339,0xC7FC,0xC7FD,0xC7FE,0x5E54,
- 0x0000,0x0000,0xC8A1,0xC8A2,0x0000,0x0000,0x0000,0x4D2F,
- 0xC8A3,0x0000,0x0000,0x5E57,0x0000,0x0000,0x5E50,0x4572,
- 0x0000,0x0000,0x5E53,0xC8A4,0x0000,0x0000,0x5E59,0x0000,
- 0x0000,0x0000,0x0000,0xC8A5,0x0000,0xC8A6,0x4F51,0x3C3E,
- 0x4B7E,0x0000,0x5E63,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x482E,0xC8A7,0x0000,0x5E6F,
- 0x383B,0x0000,0x0000,0xC8A8,0x0000,0x0000,0x3D60,0x0000,
- 0x5E65,0xC8A9,0x0000,0x0000,0x4E2F,0x3942,0x0000,0x5E72,
- 0xC8AA,0x0000,0x306E,0x0000,0x0000,0x5E70,0x0000,0xC8AB,
- 0x0000,0x0000,0x5E64,0x0000,0x0000,0xC8AC,0xC8AD,0x5E6A,
- 0x0000,0xC8AE,0x5E6C,0xC8AF,0x0000,0x0000,0x4D4F,0x5E67,
- 0x0000,0x0000,0x452E,0xC8B0,0x0000,0x5E69,0x0000,0xC8B1,
- 0xC8B2,0xC8B3,0x5E71,0xC8B4,0x5E6B,0x4C47,0x0000,0xC8B5,
- 0xC8B6,0x5E66,0xC8B7,0x3C22,0x5E7E,0xC8B8,0xC8B9,0xC8BA,
- 0x0000,0x336A,0x0000,0x5E68,0x5E6D,0x5E6E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x426C,0x425A,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xC8BB,0x5E76,0xC8BC,0xC8BD,0x5E7C,
- 0x0000,0x0000,0x5E7A,0x0000,0x4529,0x0000,0x0000,0x5F23,
- 0x5E77,0xC8BE,0x0000,0xC8BF,0x0000,0xC8C0,0x5E78,0x5E60,
-
- /* 6F00h */
- 0x0000,0x3579,0x493A,0x0000,0xC8C1,0x0000,0x3C3F,0x0000,
- 0xC8C2,0x3977,0xC8C3,0x0000,0xC8C4,0xC8C5,0x0000,0x4F33,
- 0x0000,0x5E74,0x0000,0x5F22,0x3169,0x4166,0xC8C6,0x0000,
- 0xC8C7,0x0000,0xC8C8,0xC8C9,0x0000,0x0000,0x0000,0x0000,
- 0x4779,0x0000,0x3441,0x4E7A,0x0000,0x0000,0xC8CA,0x0000,
- 0x0000,0xC8CB,0xC8CC,0x4C21,0x4452,0xC8D3,0x0000,0xC8CD,
- 0xC8CE,0x5E7B,0x5E7D,0xC8CF,0x0000,0x0000,0xC8D0,0x0000,
- 0x4132,0x0000,0x0000,0xC8D1,0xC8D2,0x0000,0x5F21,0x5E79,
- 0x0000,0x5E73,0x0000,0x0000,0x0000,0x3443,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC8D4,
- 0x0000,0xC8D5,0xC8D6,0xC8D7,0x3769,0x0000,0x0000,0xC8D8,
- 0x5F2F,0xC8D9,0xC8DA,0x5F2A,0x4078,0xC8DB,0xC8DC,0x3363,
- 0x0000,0xC8DD,0xC8DE,0x0000,0x3D61,0x0000,0x5F33,0x0000,
- 0xC8DF,0x0000,0x0000,0x0000,0xC8E0,0x5F2C,0x442C,0x5F29,
- 0x4459,0x0000,0x0000,0x0000,0x5F4C,0x0000,0x0000,0x0000,
- 0x5F26,0x0000,0x5F25,0x0000,0x5F2E,0xC8E1,0xC8E2,0x0000,
- 0x5F28,0x5F27,0x5F2D,0xC8E3,0x4021,0x0000,0x5F24,0xC8E4,
- 0xC8E5,0x0000,0x0000,0xC8E6,0xC8E7,0xC8E8,0x5F30,0x0000,
- 0xC8E9,0x5F31,0xC8EA,0xC8EB,0xC8EC,0x0000,0xC8ED,0x3442,
- 0x0000,0x0000,0xC8EE,0x0000,0x0000,0x0000,0x0000,0xC8EF,
- 0xC8F0,0x5F36,0x0000,0x5F35,0x5F37,0xC8F1,0xC8F2,0xC8F3,
- 0xC8F4,0x0000,0x5F3A,0x0000,0x0000,0x0000,0xC8F5,0xC8F6,
- 0xC8F7,0x4543,0x0000,0x5F34,0x0000,0xC8F8,0xC8F9,0x0000,
- 0x0000,0x5F38,0x0000,0x0000,0xC8FA,0x0000,0x0000,0x0000,
- 0x3763,0x4279,0x5F32,0x473B,0x0000,0xC8FB,0x5F39,0xC8FC,
- 0xC8FD,0x0000,0xC8FE,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x5F3E,0x5F3C,0x0000,0x0000,
- 0x5F3F,0x0000,0xC9A1,0x5F42,0x0000,0x0000,0xC9A2,0x5F3B,
- 0x396A,0x4728,0x0000,0x0000,0x5E39,0x0000,0x0000,0x0000,
- 0xC9A3,0xC9A4,0x0000,0x4D74,0x5F3D,0x0000,0x5F41,0x4275,
- 0xC9A5,0x5F40,0x0000,0x5F2B,0x0000,0xC9A6,0x6F69,0x0000,
- 0x0000,0xC9A7,0x5F45,0x0000,0xC9A8,0xC9A9,0x5F49,0x0000,
-
- /* 7000h */
- 0xC9AA,0x5F47,0x0000,0x0000,0x0000,0xC9AB,0xC9AC,0xC9AD,
- 0x0000,0x5F43,0x0000,0x5F44,0x0000,0xC9AE,0x0000,0x5F48,
- 0x0000,0x5F46,0x0000,0x0000,0x0000,0x494E,0x0000,0xC9AF,
- 0x5F4E,0x0000,0x5F4B,0x5F4A,0x0000,0x5F4D,0x4654,0x5F4F,
- 0xC9B0,0x0000,0x0000,0xC9B1,0x0000,0x0000,0x4375,0x426D,
- 0x0000,0x0000,0x0000,0x0000,0x4025,0x0000,0x0000,0xC9B2,
- 0x5F50,0x0000,0x5F52,0x0000,0xC9B3,0x0000,0x0000,0xC9B4,
- 0x0000,0xC9B5,0x0000,0x0000,0xC9B6,0x0000,0x5F51,0x0000,
- 0x0000,0x0000,0x0000,0xC9B7,0xC9B8,0x0000,0x0000,0x0000,
- 0xC9B9,0xC9BA,0xC9BB,0xC9BC,0x5E75,0x0000,0xC9C1,0x0000,
- 0x0000,0x5F53,0x0000,0x0000,0xC9BD,0xC9BE,0x0000,0x0000,
- 0x4667,0x0000,0x0000,0x0000,0x0000,0xC9BF,0xC9C0,0x0000,
- 0x0000,0x0000,0x0000,0x5F54,0xC9C2,0xC9C3,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3250,0xC9C4,0x0000,0xC9C5,0x4574,
- 0x3325,0x0000,0x0000,0x0000,0x0000,0xC9C6,0xC9C7,0x0000,
- 0x3564,0x0000,0x0000,0x0000,0x3C5E,0x3A52,0xC9C8,0x0000,
- 0x0000,0xC9C9,0x0000,0x0000,0x0000,0xC9CA,0xC9CB,0x0000,
- 0x0000,0x4F27,0x3F66,0x0000,0x0000,0x0000,0x316A,0x0000,
- 0x0000,0x0000,0x5F56,0x0000,0xC9CC,0xC9CD,0xC9CE,0xC9CF,
- 0xC9D0,0x5F55,0x0000,0xC9D1,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xC9D2,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xC9D3,0x5F59,0x433A,0x5F5C,0x5F57,
- 0xC9D4,0xC9D5,0x0000,0x5F5B,0xC9D6,0x0000,0x0000,0xC9D7,
- 0x5F5A,0x4540,0x3059,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4E75,0x0000,0xC9D8,0x5F5E,0x0000,0x0000,0x0000,0x3128,
- 0x0000,0xC9D9,0x0000,0xC9DA,0xC9DB,0xC9DC,0xC9DD,0x0000,
- 0xC9DE,0x5F60,0x0000,0x0000,0xC9DF,0x5F5F,0x0000,0x5F5D,
- 0x0000,0x0000,0x0000,0x0000,0xC9E0,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5F58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x4B23,0xC9E1,0x0000,0x0000,0x5F62,0x0000,0x0000,
-
- /* 7100h */
- 0x0000,0x0000,0x0000,0xC9E2,0xC9E3,0xC9E4,0xC9E5,0xC9E6,
- 0x0000,0x5F61,0x0000,0xC9E7,0xC9E8,0x0000,0x0000,0xC9E9,
- 0x0000,0x0000,0x0000,0x0000,0x316B,0x0000,0x0000,0x0000,
- 0x0000,0x5F64,0x4A32,0x0000,0x5F63,0x0000,0xC9EA,0x0000,
- 0xC9EB,0x4C35,0x0000,0x0000,0x0000,0x0000,0x3E47,0x0000,
- 0x0000,0x0000,0x0000,0xC9EC,0x0000,0xC9ED,0x0000,0xC9EE,
- 0xC9EF,0xC9F0,0x0000,0x0000,0x0000,0x0000,0x4133,0x0000,
- 0xC9F1,0x0000,0x0000,0x0000,0x3E46,0x0000,0x0000,0x0000,
- 0x0000,0xC9F2,0x0000,0x0000,0x0000,0xC9F3,0xC9F4,0xC9F5,
- 0x0000,0x4E7B,0xC9F6,0xC9F7,0x5F6A,0x0000,0x4079,0x0000,
- 0xC9F8,0x0000,0xC9F9,0x0000,0x0000,0x5F66,0x5F6B,0xC9FA,
- 0x0000,0x316C,0xC9FB,0x0000,0xC9FC,0x0000,0xC9FD,0x0000,
- 0xC9FE,0x0000,0x5F69,0x0000,0x4761,0x5F65,0x5F68,0x3E48,
- 0xCAA1,0x4851,0x0000,0x0000,0x5F6C,0x0000,0x3C51,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xCAA2,0x0000,0x0000,0x0000,0x407A,0x0000,0x0000,
- 0xCAA3,0x0000,0x0000,0x0000,0x5F6F,0xCAA4,0x0000,0xCAA5,
- 0x5F67,0x0000,0x3727,0x0000,0xCAA6,0x0000,0x0000,0x5F6D,
- 0x0000,0x0000,0xCAA7,0x0000,0x4D50,0x5F70,0x0000,0x0000,
- 0x0000,0x7426,0xCAA8,0xCAA9,0x0000,0x0000,0x0000,0x3D4F,
- 0xCAAA,0x0000,0xCAAB,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5F71,0x0000,0x0000,0x0000,0x5F72,0x0000,0x0000,0xCAAC,
- 0xCAAD,0x472E,0xCAAE,0xCAAF,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5F74,0xCAB0,0x0000,0x0000,0x0000,0x5F75,0xCAB1,
- 0xCAB2,0xCAB3,0x0000,0x4733,0xCAB4,0x0000,0x0000,0x0000,
- 0x4575,0x5F77,0x0000,0xCAB5,0xCAB6,0x0000,0x5F79,0x0000,
- 0x4E55,0x0000,0x5F76,0xCAB7,0x5F78,0x316D,0xCAB8,0x5F73,
- 0x0000,0xCAB9,0xCABA,0x0000,0xCABB,0x0000,0x0000,0x535B,
- 0x5F7A,0x0000,0x0000,0x0000,0x0000,0x4167,0x3B38,0x5F7C,
- 0x0000,0x0000,0x0000,0x0000,0x5F7B,0x3F24,0x5259,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x5F7D,0x0000,0x0000,
- 0xCABC,0x6021,0x0000,0x5F6E,0x5F7E,0x0000,0xCABD,0x6022,
-
- /* 7200h */
- 0xCABE,0x0000,0x0000,0x0000,0x0000,0x0000,0x477A,0xCABF,
- 0xCAC0,0xCAC1,0x0000,0x0000,0x0000,0x6023,0x0000,0x0000,
- 0x6024,0x0000,0x0000,0xCAC2,0x0000,0x0000,0x0000,0xCAC3,
- 0x0000,0x0000,0xCAC4,0x6025,0x0000,0xCAC5,0x0000,0xCAC6,
- 0x0000,0x0000,0x0000,0x0000,0xCAC7,0x0000,0x0000,0x0000,
- 0x6026,0x0000,0x445E,0xCAC8,0x6028,0x6027,0x0000,0xCAC9,
- 0x6029,0x0000,0x602A,0x0000,0xCACA,0x3C5F,0x4963,0x0000,
- 0xCACB,0xCACC,0x4C6C,0x602B,0x602C,0x4156,0x3C24,0x602D,
- 0x602E,0xCACD,0xCACE,0xCACF,0x0000,0xCAD0,0x602F,0x4A52,
- 0x4847,0x0000,0x0000,0x6030,0x4757,0x0000,0xCAD1,0xCAD2,
- 0xCAD3,0x0000,0x442D,0xCAD4,0x0000,0xCAD5,0xCAD6,0x0000,
- 0x6031,0x3267,0xCAD7,0x356D,0xCAD8,0x4C46,0xCAD9,0x4C36,
- 0xCADA,0x3234,0x4F34,0xCADB,0x0000,0x0000,0x0000,0x4B52,
- 0xCADC,0x4A2A,0x0000,0xCADD,0x0000,0x0000,0xCADE,0xCADF,
- 0x0000,0xCAE0,0x4037,0x0000,0x6032,0x0000,0x0000,0xCAE1,
- 0xCAE2,0x4643,0x0000,0xCAE3,0xCAE4,0x3823,0x6033,0xCAE5,
- 0x3A54,0x6035,0x6034,0x0000,0xCAE6,0x0000,0x0000,0x6036,
- 0x0000,0xCAE7,0x0000,0x0000,0x0000,0xCAE8,0xCAE9,0x0000,
- 0x0000,0x0000,0x6037,0xCAEA,0x0000,0x0000,0x6038,0x0000,
- 0x0000,0x0000,0x0000,0xCAEB,0x0000,0x0000,0x0000,0x0000,
- 0x353E,0x0000,0x6039,0x0000,0x0000,0x0000,0x0000,0x603A,
- 0xCAEC,0x0000,0x0000,0x0000,0x3824,0xCAED,0xCAEE,0x4848,
- 0x0000,0xCAEF,0x603C,0x0000,0xCAF0,0x0000,0x3E75,0x0000,
- 0x0000,0x603B,0x0000,0x0000,0x0000,0x0000,0xCAF1,0x0000,
- 0x0000,0xCAF2,0x3638,0x603D,0x603F,0x0000,0x603E,0xCAF3,
- 0x0000,0xCAF4,0x0000,0x0000,0xCAF5,0x0000,0x6040,0x0000,
- 0x3851,0x0000,0x6041,0x0000,0x0000,0xCAF6,0xCAF7,0x3669,
- 0xCAF8,0x4140,0x0000,0x397D,0x0000,0x0000,0x0000,0xCAF9,
- 0x6043,0x6044,0x6042,0x0000,0x0000,0xCAFA,0x0000,0x0000,
- 0x0000,0x3C6D,0x0000,0x0000,0x4648,0x3639,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xCAFB,0xCAFC,0x0000,0x0000,0x6046,
- 0x432C,0x6045,0xCAFD,0xCAFE,0x4F35,0x4762,0xCBA1,0x0000,
-
- /* 7300h */
- 0x0000,0x0000,0xCBA2,0x0000,0xCBA3,0xCBA4,0x0000,0xCBA5,
- 0x0000,0x0000,0x6049,0xCBA6,0x0000,0xCBA7,0x0000,0x0000,
- 0x0000,0x0000,0xCBA8,0xCBA9,0x0000,0x0000,0x604B,0x6048,
- 0xCBAA,0xCBAB,0x0000,0x4C54,0x604A,0x604C,0xCBAC,0x4E44,
- 0x0000,0x0000,0xCBAD,0x0000,0xCBAE,0x6050,0x0000,0xCBAF,
- 0xCBB0,0x604F,0x4376,0x472D,0xCBB1,0x0000,0x3825,0x604E,
- 0x0000,0xCBB2,0xCBB3,0x0000,0x604D,0xCBB4,0x4D31,0x4D32,
- 0x0000,0x0000,0xCBB5,0xCBB6,0x0000,0xCBB7,0x6051,0x316E,
- 0x0000,0x0000,0x0000,0xCBB8,0x3976,0x3B62,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xCBB9,0x6052,0x6053,
- 0xCBBA,0x0000,0xCBBB,0x0000,0x0000,0x0000,0xCBBC,0x6055,
- 0xCBBD,0x0000,0x0000,0x0000,0x0000,0xCBBE,0xCBBF,0xCBC0,
- 0xCBC1,0x0000,0x0000,0x3D43,0x0000,0x0000,0xCBC2,0xCBC3,
- 0x6057,0xCBC4,0x6056,0xCBC5,0xCBC6,0x0000,0xCBC7,0xCBC8,
- 0x6058,0xCBC9,0x334D,0x0000,0x0000,0x605A,0x0000,0xCBCA,
- 0x6059,0xCBCB,0x605C,0x605B,0xCBCC,0x0000,0x0000,0x0000,
- 0xCBCD,0xCBCE,0x0000,0xCBCF,0x383C,0xCBD0,0xCBD1,0x4E28,
- 0x0000,0x364C,0x0000,0x3226,0x0000,0x0000,0xCBD2,0x0000,
- 0xCBD3,0x0000,0x0000,0xCBD4,0x0000,0xCBD5,0x366A,0xCBD6,
- 0xCBD7,0x0000,0x0000,0x0000,0xCBD8,0x0000,0xCBD9,0xCBDA,
- 0xCBDB,0x0000,0xCBDC,0x0000,0x0000,0xCBDD,0xCBDE,0x0000,
- 0x0000,0x3461,0xCBDF,0xCBE0,0x0000,0xCBE1,0x0000,0x0000,
- 0x0000,0x0000,0x4E68,0x605E,0x0000,0xCBE2,0x0000,0xCBE3,
- 0x0000,0xCBE4,0x0000,0x6060,0xCBE5,0xCBE6,0x0000,0xCBE7,
- 0x6061,0x0000,0x3251,0x0000,0x0000,0xCBE8,0xCBE9,0x0000,
- 0x605D,0xCBEA,0x3B39,0xCBEB,0xCBEC,0x4441,0x605F,0xCBED,
- 0x0000,0x0000,0xCBEE,0xCBEF,0x0000,0x0000,0xCBF0,0x0000,
- 0x0000,0xCBF1,0x0000,0x0000,0x0000,0xCBF2,0x6064,0x0000,
- 0x3C6E,0xCBF3,0x0000,0xCBF4,0x0000,0x6062,0xCBF5,0xCBF6,
- 0x0000,0xCBF7,0x373E,0x0000,0x0000,0x4849,0x6063,0x0000,
- 0x0000,0x607E,0x0000,0x0000,0xCBF8,0xCBF9,0x0000,0xCBFA,
- 0x6069,0xCBFB,0xCBFC,0xCBFD,0x0000,0xCBFE,0x383D,0xCCA1,
-
- /* 7400h */
- 0xCCA2,0xCCA3,0x0000,0x3565,0xCCA4,0x6066,0x4D7D,0xCCA5,
- 0x0000,0x4E30,0xCCA6,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xCCA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xCCA8,0xCCA9,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4276,0x0000,0xCCAA,0x6068,0xCCAB,0x0000,
- 0xCCAC,0xCCAD,0xCCAE,0xCCAF,0xCCB0,0xCCB1,0xCCB2,0xCCB3,
- 0xCCB4,0xCCB5,0x606A,0x4E56,0x3657,0x487C,0x474A,0x0000,
- 0x0000,0xCCB6,0x606B,0x0000,0x0000,0x0000,0x0000,0x606D,
- 0xCCB7,0x6070,0x0000,0xCCB8,0xCCB9,0x0000,0xCCBA,0xCCBB,
- 0x0000,0x0000,0x0000,0xCCBC,0x0000,0xCCBD,0x0000,0x0000,
- 0x0000,0xCCBE,0xCCBF,0x0000,0x0000,0x606C,0x0000,0xCCC0,
- 0x0000,0x606F,0x386A,0x314D,0x6071,0xCCC1,0x3F70,0x606E,
- 0x4E5C,0x0000,0xCCC2,0x6074,0x7424,0x0000,0xCCC3,0xCCC4,
- 0xCCC5,0x6072,0x6075,0xCCC6,0x0000,0xCCC7,0xCCC8,0x6067,
- 0x6073,0xCCC9,0xCCCA,0x3A3C,0x0000,0x0000,0x6076,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6077,0x0000,
- 0xCCCB,0xCCCC,0x0000,0x4D7E,0x0000,0xCCCD,0xCCCE,0xCCCF,
- 0x0000,0xCCD0,0x0000,0x6078,0x0000,0x0000,0x0000,0xCCD1,
- 0xCCD2,0xCCD3,0xCCD4,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xCCD5,0xCCD6,0xCCD7,0x0000,0xCCD8,0x0000,0x6079,0xCCD9,
- 0xCCDA,0xCCDB,0x6065,0xCCDC,0x0000,0x0000,0xCCDD,0x607A,
- 0xCCDE,0xCCDF,0xCCE0,0xCCE1,0x0000,0x0000,0xCCE2,0xCCE3,
- 0x3444,0xCCE4,0xCCE5,0x0000,0x0000,0xCCE6,0x0000,0x0000,
- 0x0000,0xCCE7,0x0000,0xCCE8,0x0000,0x3C25,0x0000,0xCCE9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xCCEA,0xCCEB,0x607B,0x0000,0xCCEC,0x0000,0x0000,0x607C,
- 0xCCED,0x0000,0x0000,0xCCEE,0x607D,0x0000,0x0000,0x0000,
- 0xCCEF,0x0000,0xCCF0,0xCCF1,0x313B,0x0000,0xCCF2,0xCCF3,
- 0x6121,0x0000,0x493B,0x6122,0xCCF4,0x0000,0x3424,0x6123,
- 0xCCF5,0x6124,0xCCF6,0xCCF7,0x0000,0x0000,0x6125,0xCCF8,
- 0x6127,0x6128,0x6126,0x0000,0xCCF9,0x0000,0x4953,0x612A,
- 0x6129,0x0000,0xCCFA,0xCCFB,0xCCFC,0x0000,0x0000,0xCCFD,
-
- /* 7500h */
- 0x0000,0x0000,0x0000,0x612C,0x612B,0x612D,0xCCFE,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x612E,0x6130,0x612F,0x0000,
- 0x0000,0x3979,0xCDA1,0x6132,0x0000,0x6131,0xCDA2,0xCDA3,
- 0x3445,0x0000,0x3F53,0x0000,0x453C,0x0000,0x6133,0x4038,
- 0xCDA4,0xCDA5,0x0000,0x3B3A,0xCDA6,0x3179,0x6134,0xCDA7,
- 0x4D51,0xCDA8,0xCDA9,0x4A63,0x6135,0x0000,0x0000,0xCDAA,
- 0x4544,0x4D33,0x3943,0x3F3D,0x0000,0x0000,0xCDAB,0x434B,
- 0x5234,0xCDAC,0x442E,0x3268,0x6136,0xCDAD,0xCDAE,0xCDAF,
- 0xCDB0,0x0000,0x0000,0xCDB1,0x6137,0x0000,0x613C,0xCDB2,
- 0xCDB3,0x613A,0x6139,0x5A42,0x3326,0x6138,0xCDB4,0x305A,
- 0xCDB5,0x482A,0xCDB6,0x0000,0x484A,0x0000,0x0000,0xCDB7,
- 0x0000,0x4E31,0x613D,0x613B,0x435C,0x4026,0xCDB8,0xCDB9,
- 0x482B,0xCDBA,0x492D,0x0000,0x613F,0x4E2C,0x374D,0x6140,
- 0x0000,0x613E,0x4856,0x6141,0x0000,0x6142,0x0000,0xCDBB,
- 0x305B,0xCDBC,0x0000,0x3E76,0x6147,0x0000,0x6144,0x466D,
- 0x6143,0xCDBD,0xCDBE,0xCDBF,0xCDC0,0xCDC1,0xCDC2,0x3526,
- 0x0000,0xCDC3,0x614A,0x0000,0x0000,0xCDC4,0x6145,0x6146,
- 0x0000,0x6149,0x6148,0x4925,0x0000,0x0000,0x4142,0x4141,
- 0xCDC5,0x353F,0xCDC6,0xCDC7,0x614B,0xCDC8,0x0000,0x0000,
- 0x0000,0xCDC9,0x614C,0x0000,0xCDCA,0x614D,0x0000,0x0000,
- 0x0000,0x0000,0xCDCB,0x614F,0xCDCC,0x614E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3156,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x6157,0x4868,0x6151,0xCDCD,0x6153,0x0000,0x0000,
- 0x6155,0x3F3E,0xCDCE,0x0000,0x6156,0x6154,0x3C40,0xCDCF,
- 0xCDD0,0xCDD1,0x6150,0x6152,0xCDD2,0x4942,0xCDD3,0x3E49,
- 0x0000,0x0000,0x6159,0x0000,0xCDD4,0x6158,0xCDD5,0xCDD6,
- 0x0000,0x0000,0x615A,0x0000,0x3C26,0x3A2F,0x0000,0xCDD7,
- 0x4577,0x615B,0x0000,0x444B,0xCDD8,0x0000,0x615D,0xCDD9,
- 0xCDDA,0xCDDB,0x4E21,0x615C,0xCDDC,0x0000,0x0000,0xCDDD,
- 0x0000,0x4169,0x0000,0x0000,0xCDDE,0x0000,0xCDDF,0xCDE0,
- 0x6162,0xCDE1,0x6164,0x6165,0x4354,0x0000,0x0000,0x0000,
- 0x0000,0xCDE2,0x6163,0x0000,0x6160,0x0000,0x615E,0x615F,
-
- /* 7600h */
- 0xCDE3,0x6161,0xCDE4,0xCDE5,0xCDE6,0x0000,0x0000,0xCDE7,
- 0xCDE8,0x6168,0xCDE9,0x6166,0xCDEA,0x6167,0x0000,0xCDEB,
- 0x0000,0x0000,0xCDEC,0xCDED,0x0000,0xCDEE,0xCDEF,0x0000,
- 0x0000,0xCDF0,0x0000,0xCDF1,0xCDF2,0xCDF3,0xCDF4,0x6169,
- 0x616B,0x616C,0x616D,0xCDF5,0x616E,0xCDF6,0xCDF7,0x616A,
- 0x0000,0xCDF8,0x0000,0x0000,0x0000,0xCDF9,0x0000,0x0000,
- 0x6170,0x0000,0xCDFA,0xCDFB,0x616F,0xCDFC,0x0000,0x0000,
- 0xCDFD,0xCDFE,0xCEA1,0x6171,0xCEA2,0x0000,0x0000,0x0000,
- 0xCEA4,0xCEA5,0x4E45,0xCEA6,0xCEA7,0xCEA8,0x6174,0x6172,
- 0x6173,0xCEA9,0xCEA3,0xCEAA,0x3462,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4C7E,0x0000,0x0000,0xCEAB,0x4A4A,0x0000,
- 0x6176,0xCEAC,0x0000,0x0000,0x6175,0x0000,0x0000,0xCEAD,
- 0x0000,0x6177,0x6178,0x0000,0xCEAE,0xCEAF,0x0000,0x617C,
- 0x6179,0x617A,0x617B,0x0000,0x617D,0xCEB0,0xCEB1,0xCEB2,
- 0x617E,0xCEB3,0x6221,0x0000,0xCEB4,0x0000,0x6222,0x0000,
- 0x6223,0x0000,0x482F,0x4550,0x6224,0x4772,0x4934,0x0000,
- 0x6225,0xCEB5,0x0000,0x6226,0x452A,0xCEB6,0x3327,0x3944,
- 0x6227,0x0000,0x0000,0x6228,0xCEB7,0xCEB8,0x6229,0x0000,
- 0x3B29,0x0000,0x0000,0x622B,0x0000,0xCEB9,0x622A,0x0000,
- 0x0000,0x622C,0x622D,0xCEBA,0xCEBB,0xCEBC,0x0000,0xCEBD,
- 0xCEBE,0x0000,0xCEBF,0xCEC0,0xCEC1,0xCEC2,0xCEC3,0xCEC4,
- 0xCEC5,0x0000,0xCEC6,0x0000,0x0000,0xCEC7,0x4869,0x0000,
- 0x622E,0x0000,0x0000,0x0000,0x622F,0x0000,0x0000,0x7369,
- 0x6230,0x6231,0x6232,0x0000,0x0000,0xCEC8,0x0000,0x3B2E,
- 0x0000,0xCEC9,0x6233,0x4756,0x0000,0xCECA,0x4B5F,0x0000,
- 0x314E,0xCECB,0x3157,0xCECC,0xCECD,0x6234,0xCECE,0x0000,
- 0x0000,0x0000,0x6236,0x0000,0xCECF,0x0000,0x6235,0x4570,
- 0x0000,0xCED0,0x0000,0x4039,0x5D39,0x0000,0x6237,0x4C41,
- 0xCED1,0x6238,0x0000,0x3446,0x4857,0x6239,0xCED2,0x623A,
- 0xCED3,0x0000,0x623B,0x0000,0xCED4,0x0000,0x4C5C,0x0000,
- 0xCED5,0xCED6,0x4C55,0x0000,0x443E,0x0000,0xCED7,0x0000,
- 0x416A,0xCED8,0x0000,0x623D,0xCED9,0x0000,0x3D62,0x0000,
-
- /* 7700h */
- 0xCEDA,0x3E4A,0x0000,0x0000,0x6240,0x0000,0xCEDB,0x623F,
- 0x623E,0x487D,0xCEDC,0x3447,0x3829,0x0000,0xCEDD,0x0000,
- 0x0000,0x0000,0xCEDE,0x0000,0xCEDF,0xCEE0,0x0000,0xCEE1,
- 0x0000,0xCEE2,0xCEE3,0x6246,0xCEE4,0x0000,0x6243,0x3F3F,
- 0x4C32,0x0000,0xCEE5,0x0000,0x6242,0x6244,0x6245,0x0000,
- 0xCEE6,0x6241,0x0000,0x0000,0x0000,0xCEE7,0xCEE8,0xCEE9,
- 0x0000,0x0000,0x0000,0x0000,0xCEEA,0xCEEB,0xCEEC,0x6247,
- 0x6248,0xCEED,0x442F,0x0000,0x3463,0xCEEE,0xCEEF,0x0000,
- 0x4365,0x0000,0xCEF0,0x0000,0x0000,0xCEF1,0xCEF2,0x6249,
- 0x0000,0x0000,0xCEF3,0x0000,0x0000,0xCEF4,0xCEF5,0xCEF6,
- 0x0000,0x0000,0xCEF7,0x0000,0x0000,0x0000,0xCEF8,0xCEF9,
- 0x0000,0x0000,0x624A,0x624D,0xCEFA,0x0000,0xCEFB,0xCEFC,
- 0xCEFD,0x3F67,0xCEFE,0x4644,0xCFA1,0x624E,0x4B53,0xCFA2,
- 0x624B,0x0000,0xCFA3,0x624C,0xCFA4,0x0000,0x0000,0x0000,
- 0xCFA5,0x0000,0xCFA6,0xCFA7,0xCFA8,0x0000,0x0000,0x0000,
- 0x0000,0x6251,0xCFA9,0x0000,0x0000,0xCFAA,0x6250,0x624F,
- 0xCFAB,0x0000,0x0000,0x0000,0xCFAC,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6253,0xCFAD,0xCFAE,0x6252,0x0000,
- 0x0000,0x6254,0x0000,0x0000,0xCFAF,0xCFB0,0xCFB1,0x0000,
- 0x0000,0x0000,0xCFB2,0x0000,0x0000,0x0000,0x6256,0xCFB3,
- 0x6255,0x0000,0xCFB4,0x0000,0x0000,0x4A4D,0x0000,0xCFB5,
- 0x0000,0x0000,0xCFB6,0x0000,0x3D56,0x4E46,0xCFB7,0xCFB8,
- 0x6257,0xCFB9,0x0000,0x4637,0x0000,0xCFBA,0x6258,0x0000,
- 0x0000,0x6259,0x0000,0x625D,0x625B,0x625C,0xCFBB,0x625A,
- 0x0000,0x0000,0x0000,0xCFBC,0x0000,0x0000,0x0000,0x625E,
- 0x0000,0xCFBD,0x0000,0x0000,0x0000,0x625F,0x0000,0x0000,
- 0x0000,0xCFBE,0xCFBF,0x0000,0x0000,0xCFC0,0x0000,0x6260,
- 0x0000,0xCFC1,0x6261,0x4C37,0x6262,0x0000,0xCFC2,0xCFC3,
- 0xCFC4,0x0000,0x4C70,0x6263,0xCFC5,0x434E,0xCFC6,0x476A,
- 0x0000,0x366B,0xCFC7,0x0000,0xCFC8,0x433B,0x6264,0x363A,
- 0xCFC9,0xCFCA,0x0000,0x4050,0xCFCB,0x0000,0x0000,0x0000,
- 0xCFCC,0x0000,0x0000,0xCFCD,0x6265,0x0000,0x0000,0x0000,
-
- /* 7800h */
- 0x0000,0x0000,0x3A3D,0x0000,0x0000,0xCFCE,0xCFCF,0x0000,
- 0x0000,0xCFD0,0x0000,0x0000,0x6266,0xCFD1,0xCFD2,0x0000,
- 0x0000,0xCFD3,0x6267,0x0000,0x3826,0x3A55,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xCFD4,0x0000,0x0000,
- 0x6269,0xCFD5,0xCFD6,0xCFD7,0x0000,0x4556,0x3A56,0x354E,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xCFD8,0xCFD9,0x0000,
- 0xCFDA,0x0000,0x4B24,0x0000,0x474B,0xCFDB,0x0000,0xCFDC,
- 0x0000,0x0000,0x4557,0x0000,0x0000,0x0000,0x0000,0x395C,
- 0x0000,0x0000,0x0000,0xCFDD,0xCFDE,0x626B,0x0000,0xCFDF,
- 0xCFE0,0x0000,0x0000,0x0000,0xCFE1,0x0000,0xCFE2,0x0000,
- 0x0000,0x0000,0xCFE3,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xCFE4,0x3E4B,0xCFE5,0x0000,
- 0xCFE6,0xCFE7,0x0000,0xCFE8,0xCFE9,0x0000,0x0000,0x0000,
- 0xCFEA,0x0000,0xCFEB,0x4E32,0x3945,0x0000,0xCFEC,0x3827,
- 0x0000,0x0000,0x4823,0x0000,0x626D,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xCFED,0x0000,0x626F,0x0000,0xCFEE,0x0000,
- 0x0000,0x386B,0x0000,0x0000,0x0000,0x0000,0x626E,0x4476,
- 0x0000,0x0000,0xCFEF,0x0000,0x6271,0x3337,0x626C,0xCFF0,
- 0x0000,0x486A,0x0000,0x3130,0xCFF1,0x3A6C,0x0000,0x4F52,
- 0xCFF2,0x0000,0x6270,0x0000,0x0000,0xCFF4,0xCFF5,0xCFF6,
- 0x0000,0xCFF3,0x0000,0x6272,0xCFF7,0x0000,0x0000,0x4A4B,
- 0xCFF8,0x4059,0x6274,0x0000,0xCFF9,0xCFFA,0x0000,0x6275,
- 0xCFFB,0xCFFC,0xCFFD,0xCFFE,0x0000,0x6273,0x0000,0x0000,
- 0x0000,0x0000,0x334E,0xD0A1,0x627B,0xD0A2,0x627A,0xD0A3,
- 0x0000,0x3C27,0x0000,0x0000,0x0000,0x627C,0x6277,0xD0A4,
- 0xD0A5,0xD0A6,0x627D,0x6278,0xD0A7,0x0000,0xD0A8,0x0000,
- 0x4858,0x6276,0xD0A9,0xD0AA,0x6279,0xD0AB,0xD0AC,0x0000,
- 0x0000,0x0000,0x6322,0xD0AE,0x0000,0x0000,0x0000,0xD0AF,
- 0xD0B0,0xD0B1,0x0000,0x0000,0xD0AD,0x0000,0xD0B2,0x6321,
- 0x4B61,0x0000,0xD0B3,0x0000,0x627E,0x0000,0x0000,0x306B,
- 0x0000,0x0000,0xD0B4,0xD0B5,0x6324,0x0000,0xD0B7,0xD0B8,
- 0x0000,0x0000,0xD0B9,0xD0BA,0x0000,0x6323,0x0000,0xD0BB,
-
- /* 7900h */
- 0xD0B6,0x3E4C,0x0000,0x0000,0x0000,0x0000,0xD0BC,0x6325,
- 0x0000,0x0000,0x0000,0x0000,0xD0BD,0x0000,0x4143,0x0000,
- 0xD0BE,0x6327,0x6326,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x6328,0xD0BF,0x0000,0xD0C0,0x0000,0xD0C1,0xD0C2,
- 0xD0C3,0x0000,0x0000,0x0000,0x0000,0xD0C4,0x6268,0xD0C5,
- 0x0000,0xD0C6,0x626A,0x632A,0x6329,0xD0C7,0x0000,0x0000,
- 0x0000,0xD0C8,0x0000,0x0000,0xD0C9,0xD0CA,0x0000,0x0000,
- 0x0000,0x0000,0x3C28,0xD0CB,0x4E69,0xD0CC,0x3C52,0xD0CD,
- 0x632B,0x3737,0x0000,0x0000,0xD0CE,0xD0CF,0xD0D0,0x3540,
- 0x3527,0x3B63,0xD0D1,0xD0D2,0x0000,0x0000,0x0000,0xD0D3,
- 0x4D34,0xD0D4,0x0000,0x6331,0xD0D5,0x6330,0x4144,0x632D,
- 0xD0D6,0x0000,0x632F,0xD0D7,0xD0D8,0x3D4B,0x3F40,0x632E,
- 0x632C,0x0000,0x472A,0x0000,0x0000,0x3E4D,0x0000,0xD0D9,
- 0x493C,0xD0DA,0x0000,0xD0DB,0x0000,0x3A57,0x0000,0x0000,
- 0x0000,0x0000,0xD0DC,0x0000,0x0000,0x0000,0x0000,0x4578,
- 0x0000,0xD0DD,0x6332,0xD0DE,0xD0DF,0x0000,0xD0E0,0x6333,
- 0x6349,0x3658,0x0000,0x0000,0x4F3D,0x4135,0x0000,0x0000,
- 0x0000,0x0000,0x6334,0xD0E1,0xD0E2,0x3252,0x4477,0x4A21,
- 0x0000,0xD0E3,0x0000,0xD0E4,0xD0E5,0xD0E6,0xD0E7,0x0000,
- 0xD0E8,0x0000,0x0000,0xD0E9,0xD0EA,0x6335,0x0000,0x0000,
- 0x0000,0xD0EB,0x0000,0x0000,0x0000,0x0000,0x357A,0x6336,
- 0xD0EC,0xD0ED,0x6338,0xD0EE,0x0000,0x0000,0x6339,0xD0EF,
- 0x4729,0xD0F0,0x0000,0x633A,0xD0F1,0x0000,0x0000,0x0000,
- 0xD0F2,0x633B,0x633C,0xD0F3,0x0000,0x3659,0x3253,0x4645,
- 0x3D28,0x3B64,0xD0F4,0x0000,0xD0F5,0x0000,0x0000,0xD0F6,
- 0xD0F7,0x633D,0xD0F8,0x3D29,0x0000,0x0000,0x0000,0xD0F9,
- 0x0000,0x324A,0x4943,0x0000,0xD0FA,0x633E,0xD0FB,0x0000,
- 0x486B,0x0000,0xD0FC,0x0000,0x0000,0xD0FD,0xD0FE,0x4145,
- 0xD1A1,0x6341,0xD1A2,0x6342,0x4769,0xD1A3,0x3F41,0x633F,
- 0x0000,0x4361,0xD1A4,0xD1A5,0x6340,0xD1A6,0x0000,0x0000,
- 0x3E4E,0xD1A7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD1A8,0x0000,0x0000,0x305C,0xD1A9,0x0000,0x0000,0x0000,
-
- /* 7A00h */
- 0x3529,0x0000,0xD1AA,0xD1AB,0x0000,0x0000,0x0000,0xD1AC,
- 0x6343,0xD1AD,0xD1AE,0x4478,0xD1AF,0x6344,0x4047,0x0000,
- 0x0000,0xD1B0,0x0000,0x0000,0x4C2D,0xD1B1,0x0000,0x4923,
- 0x6345,0x6346,0x4355,0xD1B2,0x4E47,0x0000,0xD1B3,0x6348,
- 0x6347,0xD1B4,0x0000,0x0000,0x0000,0x0000,0x0000,0xD1B5,
- 0x0000,0x0000,0x0000,0xD1B6,0x0000,0xD1B7,0x3C6F,0xD1B8,
- 0xD1B9,0x634A,0x3070,0x0000,0xD1BA,0xD1BB,0x0000,0x634D,
- 0xD1BC,0xD1BD,0xD1BE,0x634B,0x3254,0x374E,0x634C,0x3946,
- 0x3972,0x0000,0x4A66,0x634E,0xD1BF,0xD1C0,0x4B54,0xD1C1,
- 0xD1C2,0x6350,0x0000,0x0000,0xD1C3,0x4051,0x314F,0x323A,
- 0x302C,0x0000,0x0000,0x0000,0x0000,0xD1C4,0xD1C5,0x634F,
- 0x0000,0xD1C6,0x0000,0x0000,0xD1C7,0xD1C8,0x0000,0xD1C9,
- 0xD1CA,0x6351,0x6352,0x3E77,0x0000,0xD1CB,0x0000,0xD1CC,
- 0x0000,0x6353,0xD1CD,0x334F,0x0000,0xD1CE,0x0000,0x0000,
- 0x6355,0x0000,0x0000,0x0000,0x376A,0xD1CF,0x3566,0x0000,
- 0xD1D0,0x6356,0x3675,0x0000,0x0000,0x6357,0xD1D1,0x407C,
- 0xD1D2,0x464D,0xD1D3,0x4060,0x3A75,0xD1D4,0xD1D5,0x0000,
- 0x6358,0x0000,0xD1D6,0xD1D7,0x0000,0x0000,0x0000,0x0000,
- 0xD1D8,0xD1D9,0x4362,0x416B,0xD1DA,0x635A,0x635C,0x6359,
- 0x635B,0x0000,0x0000,0x0000,0x0000,0x0000,0xD1DB,0x3722,
- 0xD1DC,0x0000,0x0000,0xD1DD,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x635D,0x3726,0x0000,0xD1DE,0x0000,0x3567,0x4D52,
- 0x635F,0x0000,0x0000,0xD1DF,0x0000,0xD1E0,0x6360,0x0000,
- 0x0000,0xD1E1,0x312E,0xD1E2,0xD1E3,0x0000,0x0000,0x6363,
- 0x0000,0x0000,0x0000,0x3376,0x6362,0x6361,0xD1E4,0x6365,
- 0x635E,0xD1E5,0x6366,0x4E29,0xD1E6,0x6367,0xD1E7,0x6368,
- 0x0000,0xD1E8,0x5474,0x636A,0x0000,0x6369,0x0000,0x0000,
- 0x0000,0x636B,0x636C,0xD1E9,0x4E35,0x636D,0x0000,0x706F,
- 0x3E4F,0x636E,0x636F,0x3D57,0x0000,0x4638,0x6370,0x0000,
- 0xD1EA,0xD1EB,0x4328,0xD1EC,0xD1ED,0x6371,0x0000,0x433C,
- 0x6372,0xD1EE,0x0000,0x0000,0xD1EF,0x0000,0x3625,0x0000,
- 0x513F,0x435D,0x3C33,0xD1F0,0x0000,0xD1F1,0xD1F2,0x3448,
-
- /* 7B00h */
- 0x0000,0x0000,0x6373,0x0000,0x6422,0x0000,0x6376,0xD1F3,
- 0x3568,0x0000,0x6375,0x6424,0x0000,0x0000,0x0000,0x6374,
- 0x0000,0x3E50,0x0000,0x0000,0xD1F4,0x0000,0x0000,0x0000,
- 0x6378,0x6379,0x0000,0x452B,0x0000,0x0000,0x637A,0xD1F5,
- 0x335E,0x0000,0x0000,0xD1F6,0x0000,0x3F5A,0x4964,0xD1F7,
- 0x637C,0xD1F8,0xD1F9,0xD1FA,0x4268,0xD1FB,0xD1FC,0xD1FD,
- 0xD1FE,0xD2A1,0x0000,0x6377,0xD2A2,0x637B,0x637D,0x0000,
- 0x0000,0x3A7B,0x0000,0x0000,0x0000,0xD2A3,0x0000,0xD2A4,
- 0xD2A5,0xD2A6,0x0000,0x0000,0x0000,0x6426,0x492E,0xD2A7,
- 0x4826,0x4579,0x0000,0x365A,0x6425,0x6423,0xD2A8,0x4835,
- 0x637E,0x435E,0x457B,0x0000,0x457A,0xD2A9,0x3A76,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x6438,0x0000,0x0000,
- 0xD2AA,0x0000,0x0000,0x0000,0xD2AB,0x6428,0xD2AC,0x642A,
- 0x0000,0xD2AD,0xD2AE,0x0000,0x642D,0xD2AF,0x642E,0xD2B0,
- 0x642B,0x642C,0xD2B1,0xD2B2,0x6429,0x6427,0x0000,0xD2B3,
- 0x0000,0x0000,0x6421,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xD2B4,0x0000,0x4A4F,0x3255,
- 0x0000,0xD2B5,0x0000,0x6435,0x0000,0x6432,0xD2B6,0x6437,
- 0xD2B7,0xD2B8,0x6436,0x0000,0x4773,0x4C27,0xD2B9,0x3B3B,
- 0x6430,0x6439,0x6434,0xD2BA,0x6433,0x642F,0xD2BB,0x6431,
- 0xD2BC,0x3449,0x0000,0x0000,0x0000,0xD2BD,0x0000,0x0000,
- 0x0000,0x0000,0x433D,0x0000,0xD2BE,0x407D,0x0000,0xD2BF,
- 0xD2C0,0x4822,0xD2C1,0x0000,0x643E,0xD2C2,0xD2C3,0x0000,
- 0x4824,0x0000,0xD2C4,0xD2C5,0xD2C6,0xD2C7,0x0000,0x0000,
- 0x4061,0x643B,0xD2C8,0x0000,0x484F,0xD2C9,0x643F,0x4A53,
- 0xD2CA,0x435B,0xD2CB,0x643A,0x643C,0x0000,0x0000,0x643D,
- 0x0000,0x0000,0x0000,0x0000,0xD2CC,0x0000,0xD2CD,0xD2CE,
- 0x0000,0xD2CF,0xD2D0,0xD2D1,0x0000,0x6440,0x0000,0x0000,
- 0x3C44,0x0000,0x0000,0x0000,0x4646,0x6445,0x6444,0x0000,
- 0xD2D2,0x6441,0xD2D3,0x0000,0x0000,0x4F36,0x0000,0x0000,
- 0x0000,0x0000,0xD2D4,0x644A,0xD2D5,0xD2D6,0x644E,0x644B,
- 0xD2D7,0xD2D8,0xD2D9,0x0000,0xD2DA,0x0000,0xD2DB,0x0000,
-
- /* 7C00h */
- 0x6447,0xD2DC,0xD2DD,0xD2DE,0xD2DF,0x0000,0xD2E0,0x6448,
- 0x0000,0xD2E1,0x0000,0xD2E2,0xD2E3,0x644D,0xD2E4,0xD2E5,
- 0x0000,0x6442,0x5255,0x6449,0x6443,0x0000,0x0000,0x644C,
- 0x0000,0xD2E6,0x0000,0xD2E7,0x0000,0x0000,0x0000,0x6452,
- 0xD2E8,0x344A,0x0000,0x644F,0x0000,0xD2E9,0xD2EA,0x6450,
- 0xD2EB,0x0000,0x6451,0x6454,0xD2EC,0x0000,0x0000,0x0000,
- 0x0000,0xD2ED,0x0000,0xD2EE,0xD2EF,0x0000,0xD2F0,0x6453,
- 0x4876,0xD2F1,0xD2F2,0x0000,0x0000,0x6455,0x4E7C,0x4A6D,
- 0x645A,0x0000,0x0000,0x6457,0x0000,0x0000,0xD2F3,0x0000,
- 0x0000,0x0000,0xD2F4,0x0000,0x6456,0x4052,0x0000,0x6459,
- 0x645B,0xD2F6,0xD2F7,0xD2F8,0x6458,0xD2F5,0x645F,0x0000,
- 0x645C,0xD2F9,0xD2FA,0xD2FB,0xD2FC,0xD2FD,0xD2FE,0x645D,
- 0x6446,0xD3A1,0x0000,0xD3A2,0x645E,0x6460,0x0000,0xD3A3,
- 0x0000,0xD3A4,0x0000,0x0000,0x6461,0xD3A5,0xD3A6,0x0000,
- 0xD3A7,0x0000,0xD3A8,0x4A46,0x0000,0x6462,0x0000,0x0000,
- 0x0000,0xD3A9,0x0000,0x0000,0xD3AA,0xD3AB,0x4C62,0x0000,
- 0x0000,0x364E,0x3729,0x6463,0x0000,0x0000,0xD3AC,0xD3AD,
- 0x0000,0x4A34,0x0000,0x3F68,0x0000,0x4C30,0x0000,0xD3AE,
- 0x6464,0x0000,0x4E33,0x0000,0xD3AF,0x4774,0x0000,0x4146,
- 0x4734,0x0000,0x0000,0x3D4D,0x0000,0x0000,0xD3B0,0x3040,
- 0xD3B1,0x6469,0x6467,0x0000,0x6465,0x3421,0xD3B2,0x3E51,
- 0x646A,0x0000,0x0000,0x6468,0x0000,0x6466,0x646E,0x0000,
- 0xD3B3,0x646D,0x646C,0x646B,0x0000,0x0000,0xD3B4,0xD3B5,
- 0x0000,0x646F,0xD3B6,0xD3B7,0xD3B8,0x6470,0x403A,0xD3B9,
- 0x6471,0x0000,0x6473,0x0000,0xD3BA,0x6472,0x0000,0xD3BB,
- 0xD3BC,0xD3BD,0x3852,0x0000,0x0000,0xD3BE,0x4138,0xD3BF,
- 0x0000,0x0000,0x6475,0xD3C0,0xD3C1,0xD3C2,0x457C,0xD3C3,
- 0x6474,0xD3C4,0xD3C5,0x0000,0x6476,0xD3C6,0x4A35,0x416C,
- 0x3947,0x0000,0x6477,0x0000,0x0000,0x0000,0xD3C7,0x4E48,
- 0x0000,0xD3C8,0x0000,0xD3C9,0x0000,0x0000,0x0000,0x6479,
- 0x0000,0x0000,0x647A,0x0000,0x647B,0xD3CA,0x647C,0x0000,
- 0x3B65,0x0000,0x647D,0x374F,0x0000,0x0000,0x356A,0x0000,
-
- /* 7D00h */
- 0x352A,0x0000,0x6521,0xD3CB,0x4C73,0x3948,0x647E,0xD3CC,
- 0xD3CD,0xD3CE,0x6524,0x4C66,0x0000,0x473C,0x0000,0xD3CF,
- 0x4933,0xD3D0,0xD3D1,0xD3D2,0x3D63,0x6523,0xD3D3,0x3C53,
- 0x3949,0x3B66,0x3569,0x4A36,0x6522,0xD3D4,0xD3D5,0x0000,
- 0x4147,0x4B42,0x3A77,0xD3D6,0x0000,0x0000,0xD3D7,0x0000,
- 0x0000,0x0000,0xD3D8,0x3B67,0x445D,0xD3D9,0x6527,0x4E5F,
- 0x3A59,0xD3DA,0x6528,0x3F42,0x0000,0x652A,0x0000,0x0000,
- 0x0000,0x3E52,0x3A30,0x0000,0xD3DB,0xD3DC,0xD3DD,0x6529,
- 0xD3DE,0xD3DF,0x3D2A,0x383E,0x4148,0x6525,0x652B,0xD3E0,
- 0xD3E1,0x0000,0x0000,0x6526,0x3750,0xD3E2,0x652E,0x6532,
- 0x376B,0xD3E3,0x0000,0xD3E4,0x0000,0x0000,0x652D,0xD3E5,
- 0x0000,0xD3E6,0xD3E7,0x6536,0xD3E8,0xD3E9,0x394A,0x0000,
- 0x0000,0x4D6D,0x303C,0x6533,0x0000,0xD3EA,0x356B,0xD3EB,
- 0x6530,0x0000,0xD3EC,0x0000,0x0000,0x0000,0x6531,0x0000,
- 0xD3ED,0x457D,0x652F,0x652C,0x0000,0x3328,0x4064,0x0000,
- 0xD3EE,0x3828,0xD3EF,0xD3F0,0x0000,0x6538,0x0000,0xD3F1,
- 0x0000,0xD3F2,0xD3F3,0xD3F4,0x0000,0xD3F5,0xD3F6,0x0000,
- 0xD3F7,0x6535,0x0000,0xD3F8,0xD3F9,0xD3FA,0x0000,0x6537,
- 0x0000,0xD3FB,0x0000,0x6534,0x0000,0x0000,0xD3FC,0xD3FD,
- 0x0000,0x3751,0x4233,0x6539,0x416E,0xD3FE,0xD4A1,0x6546,
- 0x0000,0x0000,0x6542,0x653C,0x0000,0x0000,0xD4A2,0xD4A3,
- 0x0000,0x0000,0xD4A4,0x6540,0x3C7A,0x305D,0x653B,0x6543,
- 0x6547,0x394B,0x4C56,0xD4A5,0x4456,0x653D,0xD4A6,0xD4A7,
- 0x6545,0xD4A8,0x653A,0x433E,0x0000,0x653F,0x303D,0x4C4A,
- 0x0000,0x0000,0xD4A9,0xD4AA,0xD4AB,0xD4AC,0xD4AD,0x653E,
- 0x0000,0x0000,0x365B,0x486C,0xD4AE,0xD4AF,0xD4B0,0x416D,
- 0x0000,0x4E50,0x3D6F,0x0000,0x0000,0x656E,0x0000,0xD4B1,
- 0x6548,0xD4B2,0x407E,0x0000,0x6544,0x6549,0x654B,0x0000,
- 0x4479,0x654E,0xD4B4,0x0000,0x654A,0xD4B5,0xD4B6,0x0000,
- 0x4A54,0x344B,0xD4B7,0xD4B8,0x4C4B,0xD4B9,0x0000,0x305E,
- 0x0000,0xD4BA,0x654D,0x0000,0x4E7D,0xD4BB,0xD4BC,0x0000,
- 0x0000,0xD4BD,0xD4BE,0x654C,0x0000,0x0000,0x0000,0x0000,
-
- /* 7E00h */
- 0xD4B3,0x316F,0x0000,0x0000,0x466C,0x654F,0x0000,0x0000,
- 0xD4BF,0x6556,0x6550,0x6557,0x0000,0x0000,0x0000,0x0000,
- 0xD4C0,0xD4C1,0x6553,0x0000,0x0000,0xD4C2,0x0000,0xD4C3,
- 0x0000,0x0000,0x0000,0x477B,0xD4C4,0xD4C5,0x3C4A,0x6555,
- 0xD4C6,0x6552,0x6558,0x6551,0x0000,0x0000,0x3D44,0xD4C7,
- 0xD4C8,0x0000,0x0000,0x4B25,0xD4C9,0xD4CA,0x3D4C,0xD4CB,
- 0x0000,0x6554,0x6560,0xD4CC,0x0000,0x655C,0xD4CD,0x655F,
- 0x0000,0x655D,0x6561,0x655B,0x0000,0x6541,0x4053,0xD4CE,
- 0x0000,0x484B,0x0000,0x655E,0xD4CF,0xD4D0,0x6559,0xD4D1,
- 0x0000,0x0000,0x4121,0x3752,0x0000,0x3D2B,0xD4D2,0x0000,
- 0xD4D3,0x0000,0xD4D4,0x0000,0x3F25,0x4136,0x6564,0x0000,
- 0xD4D5,0x6566,0x6567,0x0000,0x0000,0x6563,0x6565,0xD4D6,
- 0x0000,0xD4D7,0xD4D8,0x0000,0x0000,0xD4D9,0x655A,0x6562,
- 0x0000,0x656A,0x6569,0xD4DA,0x0000,0x4B7A,0xD4DB,0xD4DC,
- 0x372B,0x0000,0x0000,0xD4DD,0x0000,0x0000,0x0000,0x0000,
- 0xD4DE,0x6568,0x0000,0x656C,0x656B,0x656F,0xD4DF,0x6571,
- 0x0000,0xD4E0,0x3B3C,0x656D,0x0000,0x0000,0xD4E1,0xD4E2,
- 0x6572,0x6573,0xD4E3,0x0000,0x6574,0xD4E4,0x657A,0x453B,
- 0x6576,0xD4E5,0x6575,0x6577,0x6578,0xD4E6,0x6579,0x0000,
- 0xD4E7,0x0000,0xD4E8,0x657B,0x657C,0xD4E9,0xD4EA,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 7F00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x344C,0x0000,
- 0x657D,0x0000,0x657E,0xD4EC,0xD4EB,0xD4ED,0xD4EE,0xD4EF,
- 0x0000,0x0000,0x0000,0xD4F0,0xD4F1,0x6621,0x0000,0xD4F2,
- 0x0000,0x0000,0x0000,0x0000,0x6622,0x6623,0x6624,0xD4F3,
- 0x6625,0x6626,0xD4F4,0xD4F5,0x6628,0x6627,0x0000,0x0000,
- 0x6629,0x0000,0x0000,0xD4F6,0xD4F7,0xD4F8,0x0000,0x662A,
- 0x662B,0xD4F9,0x0000,0xD4FA,0xD4FB,0xD4FC,0xD4FD,0x662E,
- 0x662C,0x662D,0x3A61,0x3753,0x0000,0xD4FE,0x4356,0x0000,
- 0x4833,0xD5A1,0x3D70,0x0000,0x0000,0x474D,0x0000,0x486D,
- 0x662F,0x586D,0x0000,0x0000,0x0000,0xD5A2,0xD5A3,0xD5A4,
- 0xD5A5,0x0000,0x6630,0x6632,0x0000,0x4D65,0x6631,0x6634,
- 0x6633,0x0000,0x4D53,0xD5A6,0x6635,0xD5A7,0x487E,0xD5A8,
- 0xD5A9,0xD5AA,0x0000,0x0000,0x6636,0x0000,0xD5AB,0xD5AC,
- 0x0000,0x0000,0x6639,0x0000,0xD5AD,0x6638,0x6637,0x0000,
- 0x0000,0xD5AE,0xD5AF,0x663A,0x3732,0x0000,0xD5B0,0x0000,
- 0x4122,0x3541,0xD5B1,0x0000,0x0000,0xD5B2,0x663E,0x663B,
- 0x0000,0x0000,0x663C,0x0000,0xD5B3,0x0000,0x663F,0x0000,
- 0x6640,0x663D,0x0000,0x0000,0xD5B4,0x3129,0x0000,0xD5B5,
- 0xD5B6,0x3227,0x0000,0xD5B7,0x0000,0x6642,0x6643,0x0000,
- 0xD5B8,0x0000,0x6644,0x0000,0x4D62,0x0000,0xD5B9,0xD5BA,
- 0x0000,0x0000,0x3D2C,0x0000,0x6646,0x6645,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xD5BB,0x0000,0x0000,0x0000,0xD5BC,
- 0x3F69,0x6647,0x0000,0xD5BD,0x0000,0xD5BE,0x6648,0x0000,
- 0xD5BF,0x6649,0x0000,0x3465,0xD5C0,0x0000,0xD5C1,0xD5C2,
- 0x344D,0x0000,0xD5C3,0x664A,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x664B,0xD5C4,0x4B5D,0x4D63,0xD5C5,0xD5C6,0xD5C7,
-
- /* 8000h */
- 0x4D54,0x4F37,0x0000,0x394D,0x664E,0x3C54,0x664D,0xD5C8,
- 0xD5C9,0x0000,0xD5CA,0x664F,0x3C29,0xD5CB,0xD5CC,0xD5CD,
- 0x4251,0xD5CE,0x6650,0xD5CF,0xD5D0,0x394C,0xD5D1,0x4C57,
- 0x6651,0x6652,0x0000,0x0000,0x6653,0xD5D2,0xD5D3,0xD5D4,
- 0xD5D5,0x6654,0x0000,0x0000,0xD5D6,0x0000,0xD5D7,0x0000,
- 0x6655,0x0000,0x0000,0x0000,0xD5D8,0x0000,0xD5D9,0x0000,
- 0xD5DA,0x0000,0x0000,0x3C2A,0xD5DB,0xD5DC,0x4C6D,0xD5DD,
- 0x0000,0xD5DE,0xD5DF,0x6657,0xD5E0,0x433F,0xD5E1,0x6656,
- 0xD5E2,0x0000,0x0000,0x0000,0xD5E3,0x0000,0x6659,0x0000,
- 0x0000,0x0000,0x6658,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x665A,0x0000,0x0000,0x0000,0x403B,0x0000,
- 0x665B,0x0000,0x665C,0x0000,0x0000,0x0000,0x4A39,0x665D,
- 0xD5E4,0x416F,0x665E,0x0000,0xD5E5,0x0000,0xD5E6,0x0000,
- 0x665F,0x0000,0x0000,0x0000,0x0000,0xD5E7,0x0000,0x4E7E,
- 0x6662,0xD5E8,0x6661,0x6660,0x4430,0xD5E9,0x6663,0x3F26,
- 0x0000,0x6664,0x0000,0x0000,0x0000,0x6665,0x4F38,0x6666,
- 0x0000,0xD5EA,0x0000,0x0000,0x6667,0x6669,0x6668,0x4825,
- 0xD5EB,0x4679,0x0000,0x4F3E,0x4829,0x0000,0xD5EC,0x0000,
- 0x0000,0x0000,0x0000,0x666B,0x0000,0x0000,0x3E53,0x0000,
- 0x492A,0x0000,0x666C,0x666A,0xD5ED,0x344E,0xD5EE,0x0000,
- 0x0000,0x3854,0x3B68,0x0000,0x0000,0x486E,0xD5EF,0xD5F0,
- 0x0000,0x382A,0x4B43,0xD5F1,0x666F,0x666D,0x0000,0x394E,
- 0x0000,0x394F,0x3069,0x0000,0x3A68,0x0000,0x0000,0x0000,
- 0xD5F2,0xD5F3,0x4759,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x305F,0x6674,0x0000,0x4340,0x0000,
- 0xD5F4,0x0000,0x0000,0x0000,0x4758,0xD5F5,0x425B,0xD5F6,
- 0x0000,0x0000,0xD5F7,0x0000,0xD5F8,0xD5F9,0x6676,0xD5FA,
- 0xD5FB,0x6672,0x6675,0x6670,0x0000,0x6673,0x4B26,0x0000,
- 0xD5FC,0x3855,0x0000,0x0000,0x307D,0x6671,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xD5FD,0xD5FE,0x6678,
- 0xD6A1,0x6679,0xD6A2,0xD6A3,0x4639,0x0000,0xD6A4,0x0000,
- 0x363B,0xD6A5,0xD6A6,0x0000,0x6726,0x473D,0xD6A7,0x0000,
-
- /* 8100h */
- 0x0000,0x0000,0x3B69,0xD6A8,0x0000,0x363C,0x4048,0x4F46,
- 0x4C2E,0x6677,0x4054,0xD6A9,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xD6AA,0xD6AB,
- 0xD6AC,0x0000,0x3553,0x667A,0xD6AD,0x0000,0xD6AE,0x0000,
- 0xD6AF,0x0000,0x0000,0x667C,0xD6B0,0x0000,0x0000,0xD6B1,
- 0x0000,0x667B,0x0000,0x0000,0xD6B2,0x0000,0x0000,0x667D,
- 0xD6B3,0x4326,0x0000,0x473E,0x0000,0xD6B4,0x0000,0x0000,
- 0x0000,0x4431,0xD6B5,0x0000,0xD6B6,0x0000,0x6723,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xD6B7,0x6722,0xD6B8,
- 0x0000,0x0000,0xD6B9,0x667E,0xD6BA,0x0000,0x3F55,0x0000,
- 0x4965,0x6725,0xD6BB,0x6724,0x3950,0x4F53,0x0000,0xD6BC,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6735,
- 0xD6BD,0xD6BE,0x0000,0x0000,0x0000,0x6729,0x672A,0xD6BF,
- 0xD6C0,0xD6C1,0x0000,0x3C70,0x0000,0xD6C2,0x6728,0xD6C3,
- 0x3978,0x6727,0x0000,0x0000,0x672B,0x0000,0x0000,0xD6C4,
- 0x4432,0x4A22,0x4123,0x0000,0x0000,0x0000,0x0000,0x425C,
- 0x672F,0xD6C5,0x6730,0x672C,0xD6C7,0xD6C8,0xD6C9,0x0000,
- 0x672D,0x0000,0x672E,0xD6CA,0x0000,0x0000,0xD6CB,0x3951,
- 0xD6C6,0x0000,0x0000,0x6736,0x0000,0x6732,0xD6CC,0x0000,
- 0xD6CD,0x0000,0x4966,0xD6CE,0x4B6C,0x4928,0xD6CF,0x0000,
- 0x6731,0x0000,0xD6D0,0x6734,0x6733,0x0000,0x0000,0x0000,
- 0x4B44,0x6737,0x0000,0x0000,0x0000,0x0000,0xD6D1,0x0000,
- 0x6738,0x0000,0xD6D2,0x4137,0xD6D3,0x6739,0x0000,0x0000,
- 0x673B,0x0000,0x673F,0xD6D4,0x0000,0x673C,0x673A,0x473F,
- 0x673D,0x0000,0x673E,0xD6D6,0x0000,0xD6D7,0x3232,0x0000,
- 0x6745,0x6740,0xD6D8,0xD6D5,0x0000,0x6741,0xD6D9,0xD6DA,
- 0x0000,0x6742,0x0000,0x4221,0x0000,0xD6DB,0x0000,0xD6DC,
- 0x6744,0x6743,0x6746,0xD6DD,0x0000,0xD6DE,0xD6DF,0x6747,
- 0x6748,0xD6E0,0x0000,0x3F43,0xD6E1,0x3269,0x0000,0x6749,
- 0x4E57,0x0000,0x3C2B,0xD6E2,0xD6E3,0x3D2D,0x0000,0x0000,
- 0xD6E4,0xD6E5,0xD6E6,0x3B6A,0x4357,0xD6E7,0xD6E8,0x0000,
- 0xD6E9,0xD6EA,0x674A,0x674B,0x3131,0xD6EB,0x674C,0xD6EC,
-
- /* 8200h */
- 0xD6ED,0x674D,0x674E,0xD6EE,0x0000,0x674F,0x0000,0x6750,
- 0x363D,0x5A2A,0x6751,0x0000,0x4065,0x6752,0x3C4B,0xD6EF,
- 0x6753,0x0000,0x5030,0xD6F0,0xD6F1,0x0000,0x6754,0x4A5E,
- 0x345C,0xD6F2,0xD6F3,0x4124,0x3D58,0xD6F4,0x4971,0x3D2E,
- 0x0000,0xD6F5,0xD6F6,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD6F7,0x6755,0x3952,0x6756,0x484C,0x0000,0x6764,0x0000,
- 0x0000,0x0000,0xD6F8,0x6758,0xD6F9,0x4249,0x4775,0x383F,
- 0x6757,0x4125,0xD6FA,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x6759,0x0000,0x0000,0xD6FB,0xD6FC,0xD6FD,0xD6FE,0x447A,
- 0x0000,0x0000,0x0000,0xD7A1,0x0000,0x0000,0xD7A2,0xD7A3,
- 0x0000,0xD7A4,0x0000,0x0000,0x0000,0x0000,0xD7A5,0x0000,
- 0x675B,0x675A,0x675D,0x0000,0xD7A6,0x675C,0x0000,0x675E,
- 0xD7A7,0x0000,0x6760,0xD7A8,0x675F,0x0000,0x344F,0xD7A9,
- 0x6761,0x0000,0x6762,0x6763,0x0000,0xD7AA,0x3A31,0x4E49,
- 0x0000,0x6765,0x3F27,0x0000,0xD7AB,0x0000,0x3170,0x6766,
- 0x6767,0x0000,0x0000,0xD7AC,0x0000,0xD7AD,0x6768,0xD7AE,
- 0xD7AF,0xD7B0,0x0000,0xD7B1,0xD7B2,0x0000,0x0000,0xD7B3,
- 0x0000,0xD7B4,0xD7B5,0x3072,0x0000,0x6769,0xD7B6,0x0000,
- 0x0000,0xD7B7,0x676A,0x0000,0xD7B8,0x0000,0xD7B9,0x0000,
- 0xD7BA,0x4967,0xD7BB,0xD7BC,0x0000,0x3C47,0x0000,0x676C,
- 0xD7BD,0xD7BE,0x0000,0xD7BF,0xD7C0,0x3329,0x3032,0xD7C1,
- 0xD7C2,0xD7C3,0xD7C4,0x676B,0x676E,0x474E,0xD7C5,0x3F44,
- 0xD7C6,0x3256,0xD7C7,0x4B27,0xD7C8,0x0000,0x0000,0xD7C9,
- 0x375D,0x365C,0xD7CA,0x676D,0xD7CB,0x326A,0xD7CC,0xD7CD,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x3423,0xD7CE,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD7CF,0x3171,0x6772,0x4E6A,0x425D,0xD7D0,0x0000,0x4944,
- 0x0000,0x677E,0xD7D1,0x3257,0x677C,0x0000,0x677A,0x6771,
- 0xD7D2,0x676F,0xD7D3,0x6770,0xD7D4,0x3C63,0x366C,0x4377,
- 0xD7D5,0x0000,0xD7D6,0x4651,0x0000,0xD7D7,0x0000,0xD7D8,
- 0x0000,0x3151,0x0000,0x6774,0x6773,0x0000,0xD7D9,0xD7DA,
- 0x0000,0x6779,0x6775,0x6778,0x0000,0xD7DB,0xD7DC,0x0000,
-
- /* 8300h */
- 0xD7DD,0xD7DE,0x4C50,0x6777,0x3258,0x337D,0x677B,0xD7DF,
- 0xD7E0,0x677D,0xD7E1,0xD7E2,0x0000,0x0000,0x3754,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6823,0x682C,
- 0x682D,0x0000,0x0000,0xD7E4,0x302B,0xD7E5,0xD7E6,0xD7E7,
- 0x0000,0xD7E8,0xD7E9,0x6834,0x0000,0x0000,0x0000,0x0000,
- 0x3071,0x0000,0x0000,0x682B,0xD7EA,0xD7EB,0xD7EC,0x682A,
- 0xD7ED,0x6825,0x6824,0xD7EE,0x6822,0x6821,0x4363,0xD7EF,
- 0x427B,0x6827,0xD7F0,0x0000,0xD7F1,0xD7F2,0x0000,0x0000,
- 0x6826,0x0000,0xD7F3,0xD7F4,0xD7F5,0x6829,0x0000,0xD7F6,
- 0x0000,0x4170,0x3755,0x0000,0x0000,0xD7F7,0xD7F8,0x3141,
- 0x6828,0xD7F9,0x3953,0xD8BE,0xD7E3,0xD7FA,0xD7FB,0xD7FC,
- 0x4171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD7FD,0x0000,0x0000,0x683A,0x0000,0x683B,0x0000,0x3259,
- 0xD7FE,0x0000,0x0000,0x322E,0x6838,0xD8A1,0x0000,0xD8A2,
- 0xD8A3,0x0000,0xD8A4,0x0000,0xD8A5,0x682E,0xD8A6,0x6836,
- 0x0000,0x683D,0x6837,0x0000,0x0000,0xD8A7,0x6835,0x0000,
- 0x0000,0x0000,0xD8A8,0x6776,0xD8A9,0xD8AA,0x6833,0x0000,
- 0xD8AB,0xD8AC,0x682F,0xD8AD,0xD8AE,0xD8AF,0x3450,0x6831,
- 0x683C,0x0000,0x6832,0x0000,0x0000,0x0000,0xD8B0,0xD8B1,
- 0x683E,0xD8B2,0x6830,0x477C,0xD8B3,0xD8CC,0x0000,0x0000,
- 0x0000,0x4D69,0x0000,0x0000,0x0000,0x6839,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x684F,0xD8B4,0xD8B5,
- 0xD8B6,0x6847,0x0000,0x0000,0x0000,0x3F7B,0x0000,0xD8B7,
- 0x0000,0xD8B8,0x3546,0x0000,0x365D,0x0000,0x6842,0xD8B9,
- 0xD8BA,0xD8BB,0x0000,0x325B,0xD8BC,0x0000,0x3E54,0x0000,
- 0x6845,0x0000,0x0000,0x0000,0x3A5A,0xD8BD,0x0000,0x4551,
- 0x684A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD8BF,0x4A6E,0xD8C0,0x6841,0x0000,0x0000,0x0000,0x325A,
- 0x3856,0x4929,0x684B,0x0000,0x683F,0x0000,0xD8C1,0x6848,
- 0xD8C2,0xD8C3,0x0000,0x6852,0xD8C4,0x6843,0x0000,0x0000,
-
- /* 8400h */
- 0x0000,0xD8C5,0x0000,0x6844,0x463A,0x0000,0xD8C6,0x6849,
- 0x0000,0x0000,0xD8C7,0x6846,0x4B28,0x684C,0x3060,0xD8C8,
- 0x0000,0xD8C9,0x0000,0x6840,0x0000,0xD8CA,0x0000,0x0000,
- 0x0000,0xD8CB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x684E,0x0000,0x684D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x476B,0x6854,0x0000,0x685F,0x0000,0x0000,0xD8CD,
- 0x0000,0x337E,0x0000,0x0000,0x0000,0x6862,0x0000,0x0000,
- 0x6850,0xD8CE,0x0000,0x0000,0x6855,0x4D6E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xD8CF,0x685E,0xD8D0,
- 0xD8D1,0x4D55,0xD8D2,0x0000,0x0000,0xD8D3,0x4E2A,0xD8D4,
- 0x0000,0xD8D5,0xD8D6,0x0000,0x0000,0x0000,0xD8D7,0x4378,
- 0xD8D8,0xD8D9,0xD8DA,0x336B,0xD8DB,0x0000,0x0000,0x0000,
- 0xD8DC,0x4972,0x6864,0x4621,0xD8DD,0xD8DE,0x3031,0xD8DF,
- 0x0000,0x685D,0xD8E0,0x6859,0x4172,0x6853,0x685B,0x6860,
- 0xD8E1,0x472C,0x0000,0xD8E2,0xD8E3,0x302A,0xD8E4,0x6858,
- 0xD8E5,0x6861,0x4978,0x0000,0xD8E6,0xD8E7,0x0000,0x0000,
- 0x0000,0xD8E8,0x685C,0x0000,0x6857,0xD8E9,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3E55,0x0000,0x0000,0x0000,0x0000,
- 0x3D2F,0x0000,0xD8EA,0xD8EB,0x3C2C,0xD8EC,0x0000,0x0000,
- 0x0000,0x4C58,0x0000,0x0000,0x4947,0x0000,0xD8ED,0x6867,
- 0x0000,0x6870,0x0000,0x0000,0x0000,0x0000,0xD8EE,0x0000,
- 0xD8EF,0xD8F0,0xD8F1,0x0000,0x0000,0x685A,0x0000,0xD8F2,
- 0x0000,0xD8F3,0x3377,0x0000,0xD8F4,0x0000,0x0000,0x0000,
- 0x3E78,0x6865,0xD8F5,0x686A,0x4173,0xD8F6,0xD8F7,0x6866,
- 0xD8F8,0x686D,0xD8F9,0x0000,0x435F,0x0000,0x686E,0xD8FA,
- 0xD8FB,0x4D56,0x6863,0x3338,0xD8FC,0x6869,0x0000,0xD8FD,
- 0x686C,0x4C2C,0x0000,0xD8FE,0x0000,0x0000,0x686F,0x0000,
- 0x0000,0x6868,0x686B,0x0000,0xD9A1,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xD9A2,
- 0x0000,0x0000,0xD9A3,0x0000,0x4B29,0x0000,0x4F21,0xD9A4,
- 0xD9A5,0xD9A6,0xD9A7,0x0000,0x6873,0x0000,0x0000,0xD9A8,
- 0x0000,0x0000,0xD9AA,0xD9AB,0x687A,0xD9AC,0x0000,0x6872,
-
- /* 8500h */
- 0x3C43,0x0000,0xD9AD,0xD9AE,0x0000,0x0000,0x6851,0xD9AF,
- 0x0000,0x0000,0x0000,0x0000,0xD9B0,0x0000,0xD9B1,0x0000,
- 0xD9B2,0x4A4E,0x0000,0x4C22,0x6879,0x6878,0x0000,0x6874,
- 0x6875,0x0000,0x3136,0x0000,0xD9B3,0x0000,0xD9B4,0x6877,
- 0x0000,0x6871,0xD9B5,0xD9B6,0xD9B7,0xD9B8,0x4455,0xD9B9,
- 0x0000,0x0000,0xD9BA,0xD9BB,0x6876,0x307E,0x0000,0xD9BC,
- 0x0000,0x0000,0xD9A9,0xD9BD,0xD9BE,0x4222,0xD9BF,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4A43,0x0000,0xD9C0,
- 0x687B,0x6921,0x0000,0x4859,0x0000,0x0000,0xD9C1,0x0000,
- 0x687E,0x3E56,0x3C49,0x6923,0x0000,0x0000,0x363E,0xD9C2,
- 0xD9C3,0xD9C4,0xD9C5,0xD9C6,0x0000,0x6924,0xD9C7,0x4979,
- 0x687D,0xD9C8,0x6856,0x0000,0xD9C9,0xD9CA,0xD9CB,0xD9CC,
- 0xD9CD,0xD9CE,0xD9CF,0x687C,0xD9D0,0x0000,0x0000,0x0000,
- 0x4F4F,0x4622,0x4973,0xD9D1,0x0000,0x692B,0x0000,0xD9D2,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6931,
- 0x0000,0xD9D3,0xD9D4,0xD9D5,0x0000,0xD9D6,0x6932,0xD9D7,
- 0x6925,0xD9D8,0x0000,0x0000,0x4776,0xD9D9,0xD9DA,0x692F,
- 0x6927,0xD9DB,0x6929,0xD9DC,0xD9DD,0x0000,0x0000,0xD9DE,
- 0x6933,0x6928,0x0000,0xD9DF,0x692C,0x0000,0x0000,0x3172,
- 0xD9E0,0x4665,0x0000,0x692D,0x6930,0xD9E1,0x0000,0xD9E2,
- 0xD9E3,0x0000,0xD9E4,0x0000,0x6926,0xD9E5,0x4126,0xD9E6,
- 0x692A,0x3B27,0x3F45,0x3730,0x4C74,0xD9F4,0x4C79,0x3D72,
- 0x0000,0x0000,0x0000,0x0000,0xD9E7,0x0000,0xD9E8,0xD9E9,
- 0xD9EA,0x6937,0x6935,0x0000,0xD9EB,0xD9EC,0xD9ED,0xD9EE,
- 0x0000,0x4F4E,0xD9EF,0x0000,0x0000,0x0000,0x0000,0xD9F0,
- 0x0000,0x6934,0xD9F1,0xD9F2,0x0000,0x4D75,0xD9F3,0x6936,
- 0x6938,0x0000,0x0000,0x0000,0x0000,0x6939,0x0000,0x0000,
- 0xD9F5,0x0000,0xD9F6,0x0000,0x693C,0x693A,0x0000,0xD9F7,
- 0xD9F8,0x0000,0x0000,0x0000,0x4623,0x693B,0xD9F9,0x0000,
- 0xD9FA,0x484D,0x692E,0x0000,0x0000,0xD9FB,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xD9FC,0x0000,0x0000,0xD9FD,0x3D73,
- 0x0000,0x693D,0x6942,0x4174,0xD9FE,0x0000,0x6941,0xDAA1,
-
- /* 8600h */
- 0xDAA2,0x0000,0x6922,0x0000,0xDAA3,0xDAA4,0x6943,0x4149,
- 0x0000,0x0000,0x693E,0x6940,0x0000,0xDAA5,0xDAA6,0x0000,
- 0xDAA7,0xDAA8,0xDAA9,0x693F,0x0000,0x0000,0x5D31,0x5D22,
- 0xDAAA,0xDAAB,0x6945,0xDAAC,0x0000,0x0000,0xDAAD,0x0000,
- 0x0000,0xDAAE,0x6944,0x0000,0x0000,0x0000,0x0000,0xDAAF,
- 0x0000,0xDAB0,0x0000,0x0000,0x0000,0x4D76,0x0000,0x623C,
- 0x6946,0x0000,0x0000,0x0000,0x0000,0x0000,0xDAB1,0x0000,
- 0xDAB2,0x0000,0xDAB3,0x0000,0xDAB4,0xDAB5,0x0000,0x6947,
- 0xDAB6,0xB8E6,0xDAB7,0x0000,0x0000,0x0000,0xDAB8,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x6948,0x3857,0x0000,
- 0x3554,0x0000,0xDAB9,0xDABA,0x694A,0x515D,0xDABB,0xDABC,
- 0xDABD,0xDABE,0x3575,0x0000,0x4E3A,0xDABF,0x3673,0x694B,
- 0xDAC0,0xDAC1,0xDAC2,0xDAC3,0xDAC4,0x0000,0x0000,0x694C,
- 0x0000,0xDAC5,0x0000,0x436E,0xDAC6,0x0000,0x0000,0xDAC7,
- 0x0000,0x694D,0x0000,0x0000,0x0000,0xDAC8,0xDAC9,0xDACA,
- 0x0000,0x467A,0xDACB,0x303A,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xDAED,0x0000,0x3263,0x6952,0x6953,0xDACC,0x0000,0x0000,
- 0x0000,0xDACD,0x0000,0x694E,0x0000,0x3B3D,0xDACE,0x0000,
- 0xDACF,0x0000,0xDAD0,0x0000,0xDAD1,0x0000,0x0000,0x0000,
- 0x0000,0xDAD2,0x0000,0x694F,0x4742,0x0000,0xDAD3,0xDAD4,
- 0xDAD5,0x6950,0x6951,0x695B,0x0000,0xDAD6,0x0000,0x6955,
- 0x6958,0xDAD7,0x0000,0xDAD8,0xDAD9,0xDADA,0x6954,0xDADB,
- 0xDADC,0xDADD,0x0000,0x0000,0x0000,0x0000,0x0000,0xDADE,
- 0xDADF,0xDAE0,0x0000,0xDAE1,0x6956,0xDAE2,0x6957,0x3C58,
- 0x0000,0x6959,0x0000,0x4341,0x0000,0x3756,0x3342,0x0000,
- 0x0000,0xDAE3,0xDAE4,0x0000,0x695C,0xDAE5,0x0000,0xDAE6,
- 0x0000,0x333F,0xDAE7,0x6961,0xDAE8,0x0000,0x695D,0x6960,
- 0xDAE9,0x0000,0x0000,0xDAEA,0x483A,0xDAEB,0x0000,0xDAEC,
- 0x0000,0x695E,0x0000,0x0000,0x695F,0x4948,0x485A,0x6962,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x427D,0x696C,0xDAEE,0x6968,0xDAEF,0xDAF0,0x326B,0x0000,
-
- /* 8700h */
- 0x6966,0x0000,0x4B2A,0x6967,0xDAF1,0xDAF2,0x6964,0xDAF3,
- 0x6965,0x696A,0x696D,0xDAF4,0x0000,0x696B,0xDAF5,0xDAF6,
- 0xDAF7,0x6969,0x6963,0xDAF8,0xDAF9,0x0000,0x0000,0x0000,
- 0x4358,0xDAFA,0x6974,0x0000,0x4C2A,0x0000,0xDAFB,0xDAFC,
- 0x0000,0xDAFD,0x0000,0xDAFE,0x0000,0x6972,0x0000,0x0000,
- 0xDBA1,0x6973,0x0000,0x0000,0x0000,0x0000,0xDBA2,0xDBA3,
- 0x0000,0xDBA4,0xDBA5,0x0000,0x696E,0x0000,0x0000,0x6970,
- 0x0000,0xDBA6,0xDBA7,0x6971,0xDBA8,0xDBA9,0xDBAA,0x696F,
- 0xDBAB,0x0000,0x0000,0xDBAC,0x0000,0xDBAD,0x0000,0x0000,
- 0x0000,0x4066,0x0000,0x4F39,0x6978,0xDBAE,0x6979,0x0000,
- 0x0000,0x0000,0x0000,0x6A21,0x0000,0x3F2A,0x0000,0x697B,
- 0xDBAF,0x697E,0x0000,0x0000,0x0000,0xDBB0,0x0000,0x6976,
- 0x6975,0xDBB1,0x0000,0x6A22,0xDBB2,0xDBB3,0x325C,0x0000,
- 0x697C,0x0000,0x6A23,0x0000,0x0000,0x0000,0x697D,0xDBB4,
- 0x0000,0xDBB5,0xDBB6,0x0000,0x697A,0x0000,0x4433,0x0000,
- 0x6977,0x0000,0x0000,0xDBB7,0x0000,0x0000,0x0000,0x4768,
- 0x0000,0x0000,0x6A27,0xDBB8,0xDBB9,0xDBBA,0xDBBB,0xDBBC,
- 0xDBBD,0xDBBE,0x0000,0xDBBF,0xDBC0,0x4D3B,0x0000,0x0000,
- 0xDBC1,0x0000,0x0000,0xDBC2,0x0000,0xDBC3,0x0000,0xDBC4,
- 0xDBC5,0xDBC6,0x0000,0x0000,0x0000,0x0000,0xDBC7,0x6A26,
- 0xDBC8,0x0000,0x6A25,0xDBC9,0x0000,0x0000,0x0000,0xDBCA,
- 0x0000,0x0000,0x0000,0x6A2E,0xDBCB,0xDBCC,0xDBCD,0x6A28,
- 0x0000,0xDBCE,0x0000,0x6A30,0x0000,0xDBCF,0x0000,0x0000,
- 0x0000,0x0000,0x4D66,0x6A33,0x0000,0x6A2A,0xDBD0,0xDBD1,
- 0x6A2B,0xDBD2,0x0000,0x0000,0x6A2F,0x0000,0x6A32,0x6A31,
- 0xDBD3,0xDBD4,0xDBD5,0x6A29,0x0000,0x0000,0xDBD6,0x0000,
- 0x6A2C,0x0000,0x6A3D,0x0000,0x0000,0xDBD7,0xDBD8,0x0000,
- 0x0000,0xDBD9,0xDBDA,0x0000,0xDBDB,0x0000,0x0000,0xDBDC,
- 0x6A36,0x0000,0xDBDD,0xDBDE,0xDBDF,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xDBE0,0xDBE1,0x0000,0xDBE2,0x0000,0x6A34,
- 0x0000,0xDBE3,0x6A35,0xDBE4,0x0000,0x0000,0x6A3A,0x6A3B,
- 0xDBE5,0x332A,0xDBE6,0x3542,0x0000,0x0000,0x6A39,0xDBE7,
-
- /* 8800h */
- 0x0000,0xDBE8,0x0000,0xDBE9,0x0000,0x6A24,0xDBEA,0x0000,
- 0x0000,0xDBEB,0xDBEC,0xDBED,0x0000,0x6A38,0x6A3C,0x6A37,
- 0xDBEE,0x6A3E,0xDBF0,0xDBF1,0xDBF2,0x6A40,0x6A3F,0x0000,
- 0xDBF3,0xDBEF,0xDBF4,0xDBF5,0xDBF6,0x0000,0xDBF7,0xDBF8,
- 0x0000,0x6A42,0x6A41,0x695A,0x0000,0x0000,0x0000,0x6A46,
- 0xDBF9,0x0000,0x0000,0x0000,0x0000,0xDBFA,0xDBFB,0x0000,
- 0xDBFC,0x6A43,0xDBFD,0x0000,0x0000,0xDBFE,0x6A44,0x0000,
- 0x0000,0x6A45,0xDCA1,0x6A47,0xDCA2,0x0000,0x0000,0x0000,
- 0x376C,0xDCA3,0x6A49,0xDCA4,0x6A48,0xDCA5,0x3D30,0x0000,
- 0xDCA6,0xDCA7,0xDCA8,0xDCA9,0x3954,0x5E27,0xDCAA,0x0000,
- 0x0000,0xDCAB,0x6A4A,0x3D51,0x0000,0xDCAC,0xDCAD,0x3339,
- 0xDCAE,0x6A4B,0xDCAF,0x3152,0xDCB0,0x3E57,0x6A4C,0xDCB1,
- 0xDCB2,0x3955,0x6A4D,0x3061,0xDCB3,0x0000,0x0000,0x0000,
- 0x493D,0xDCB4,0x0000,0x6A4E,0x0000,0x0000,0x0000,0x0000,
- 0x3F6A,0xDCB5,0x6A55,0x0000,0x0000,0x6A52,0x0000,0x436F,
- 0x0000,0xDCB6,0x0000,0xDCB7,0x0000,0x6A53,0x6A50,0x365E,
- 0xDCB8,0x6A4F,0x6A56,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x3736,0x0000,0x0000,0x425E,0x0000,0x6A5C,0x0000,0x0000,
- 0x0000,0x0000,0x6A58,0x0000,0x0000,0x0000,0x4235,0x6A57,
- 0xDCB9,0x6A5A,0xDCBA,0xDCBB,0xDCBC,0x0000,0x6A51,0xDCBD,
- 0xDCBE,0x0000,0x6A5B,0x0000,0x6A5D,0x0000,0x0000,0x0000,
- 0xDCBF,0x0000,0xDCC0,0x486F,0x0000,0x0000,0x6A59,0x0000,
- 0x6A5E,0x6A60,0x0000,0x0000,0x3853,0x6A54,0x0000,0x3041,
- 0x0000,0x0000,0xDCC1,0x0000,0x0000,0xDCC2,0xDCC3,0x6A5F,
- 0xDCC4,0x3A5B,0x4E76,0x6A61,0x6A62,0x4175,0x0000,0x0000,
- 0x0000,0x0000,0xDCC5,0xDCC6,0xDCC7,0xDCC8,0xDCC9,0x4E22,
- 0x0000,0xDCCA,0xDCCB,0xDCCC,0x6A63,0x4D35,0x0000,0x0000,
- 0x6A64,0x6A65,0x0000,0xDCCD,0x4A64,0x6A66,0xDCCE,0x3A40,
- 0x0000,0x4E23,0x0000,0x0000,0x0000,0x0000,0x0000,0xDCCF,
- 0x6A6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDCD0,
- 0xDCD1,0xDCD2,0x6A6C,0x3E58,0x6A6A,0xDCD3,0x0000,0xDCD4,
- 0x4D67,0x6A67,0x0000,0x0000,0x6A69,0x403D,0x3F7E,0x0000,
-
- /* 8900h */
- 0x0000,0xDCD5,0x6A68,0x0000,0x6A6D,0x0000,0xDCD6,0x4A23,
- 0x0000,0x0000,0x6A6F,0x0000,0x6A6E,0xDCD7,0xDCD8,0xDCD9,
- 0x336C,0x0000,0x4B2B,0x6A70,0x0000,0xDCDA,0xDCDB,0x0000,
- 0xDCDC,0xDCDD,0xDCDE,0x0000,0xDCDF,0x6A7C,0x6A72,0x0000,
- 0xDCE0,0x0000,0x0000,0x0000,0x0000,0x6A73,0xDCE1,0xDCE2,
- 0xDCE3,0x0000,0x6A74,0x6A75,0x0000,0x0000,0x0000,0x0000,
- 0xDCE4,0xDCE5,0xDCE6,0x0000,0x0000,0xDCE7,0x6A79,0x0000,
- 0x6A7A,0xDCE8,0xDCE9,0x6A78,0x0000,0x0000,0xDCEA,0x0000,
- 0xDCEB,0x6A76,0xDCEC,0x6A71,0x6A77,0xDCED,0xDCEE,0x0000,
- 0x0000,0xDCEF,0x0000,0x0000,0x6A7B,0x7037,0x0000,0xDCF0,
- 0x0000,0x0000,0xDCF1,0x0000,0x0000,0x0000,0x3228,0xDCF2,
- 0x0000,0x0000,0xDCF3,0xDCF4,0xDCF5,0x0000,0x6A7E,0x365F,
- 0x6A7D,0xDCF6,0xDCF7,0xDCF8,0x6B22,0x0000,0x6B21,0x0000,
- 0x0000,0x0000,0x6B24,0xDCF9,0x0000,0x6B23,0xDCFA,0x6B25,
- 0xDCFB,0x0000,0x3D31,0xDCFC,0x6B26,0xDCFD,0x0000,0x6B27,
- 0x0000,0x0000,0xDCFE,0xDDA1,0xDDA2,0xDDA3,0x6B28,0x403E,
- 0x0000,0x4D57,0x0000,0x6B29,0x0000,0x0000,0x4A24,0x4746,
- 0x6B2A,0xDDA4,0x6B2B,0x382B,0x0000,0xDDA5,0x0000,0x352C,
- 0xDDA6,0x0000,0x0000,0x6B2C,0xDDA7,0xDDA8,0x3B6B,0x4741,
- 0x6B2D,0x0000,0x3350,0xDDA9,0xDDAA,0x0000,0x0000,0xDDAB,
- 0xDDAC,0x6B2E,0x0000,0x0000,0x0000,0xDDAD,0x6B30,0x4D77,
- 0x0000,0x6B2F,0x3F46,0x0000,0x6B31,0x0000,0x0000,0x6B32,
- 0xDDAE,0x0000,0x6B33,0x3451,0xDDAF,0xDDB0,0xDDB1,0xDDB2,
- 0x0000,0x0000,0x6B34,0x0000,0xDDB3,0x6B35,0x0000,0x6B36,
- 0x6B37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x3351,0x0000,0xDDB4,0xDDB5,0xDDB6,0xDDB7,
- 0xDDB8,0x0000,0x6B38,0x0000,0x6B39,0x6B3A,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3272,0x0000,0xDDB9,0x3F28,0x6B3B,
- 0x0000,0xDDBA,0x0000,0xDDBB,0x0000,0xDDBC,0x0000,0x0000,
- 0x0000,0xDDBD,0x0000,0xDDBE,0x6B3C,0x0000,0xDDBF,0x0000,
- 0x6B3D,0xDDC0,0x0000,0x0000,0x0000,0xDDC1,0x0000,0xDDC2,
-
- /* 8A00h */
- 0x3840,0x0000,0x447B,0x6B3E,0xDDC3,0xDDC4,0x0000,0xDDC5,
- 0x3757,0x0000,0x3F56,0x0000,0x6B41,0x0000,0x4624,0xDDC6,
- 0x6B40,0xDDC7,0xDDC8,0x3731,0xDDC9,0xDDCA,0x6B3F,0x4277,
- 0x352D,0x0000,0x0000,0x6B42,0x0000,0x6B43,0xDDCB,0x3E59,
- 0xDDCC,0x0000,0xDDCD,0x376D,0xDDCE,0x6B44,0xDDCF,0x0000,
- 0x0000,0x0000,0x4B2C,0xDDD0,0xDDD1,0x405F,0x0000,0xDDD2,
- 0x0000,0x3576,0x0000,0x4C75,0x414A,0xDDD3,0x6B45,0xDDD4,
- 0x0000,0x0000,0x3F47,0x4370,0x3E5A,0xDDD5,0xDDD6,0x0000,
- 0xDDD7,0x6B46,0x0000,0xDDD8,0x0000,0xDDD9,0x6B49,0xDDDA,
- 0x6B4A,0xDDDB,0x0000,0x0000,0x0000,0xDDDC,0xDDDD,0x0000,
- 0x3A3E,0x4242,0x6B48,0xDDDE,0x3E5B,0x493E,0xDDDF,0xDDE0,
- 0xDDE1,0x0000,0x0000,0x6B47,0xDDE2,0xDDE3,0x3B6C,0x0000,
- 0x3153,0xDDE4,0x6B4E,0x3758,0x0000,0xDDE5,0x3B6E,0xDDE6,
- 0x0000,0x3B6D,0x0000,0x4F4D,0x6B4D,0x6B4C,0x4127,0x0000,
- 0x354D,0x4F43,0x333A,0x3E5C,0x0000,0xDDE7,0xDDE8,0xDDE9,
- 0x0000,0xDDEA,0xDDEB,0xDDEC,0x6B4B,0x0000,0xDDED,0xDDEE,
- 0xDDEF,0x0000,0x6B50,0xDDF0,0x6B51,0x6B4F,0xDDF1,0x3858,
- 0x0000,0x4D40,0x0000,0xDDF2,0x3B6F,0x4727,0x0000,0xDDF3,
- 0xDDF4,0x6B54,0xDDF5,0x4040,0x0000,0x4342,0xDDF6,0xDDF7,
- 0x4D36,0xDDF8,0x6B57,0x0000,0x0000,0x0000,0x386C,0xDDF9,
- 0x403F,0x6B53,0x0000,0x6B58,0x386D,0x6B55,0x6B56,0xDDFA,
- 0x6B52,0xDDFB,0x0000,0x0000,0x4062,0x4649,0xDDFC,0xDDFD,
- 0x432F,0x0000,0x325D,0xDDFE,0x0000,0x0000,0xDEA1,0xDEA2,
- 0x0000,0x4870,0x0000,0xDEA3,0x3543,0x0000,0xDEA4,0x4434,
- 0x0000,0x0000,0x6B5B,0xDEA5,0x6B59,0x0000,0xDEA6,0x434C,
- 0xDEA7,0xDEA8,0xDEA9,0x4041,0x3452,0x6B5A,0x0000,0x3F5B,
- 0x0000,0xDEAA,0x4E4A,0xDEAB,0xDEAC,0xDEAD,0x4F40,0xDEAE,
- 0x0000,0x0000,0x6B5C,0x6B67,0x4435,0xDEAF,0x6B66,0xDEB0,
- 0x6B63,0x6B6B,0x6B64,0x0000,0x6B60,0x0000,0x447C,0x6B5F,
- 0x0000,0x0000,0x0000,0x6B5D,0xDEB1,0x4D21,0x3B70,0x0000,
- 0xDEB2,0x6B61,0x0000,0x6B5E,0xDEB3,0xDEB4,0xDEB5,0x6B65,
- 0x3D74,0x0000,0x3841,0x0000,0xDEB6,0x0000,0x427A,0xDEB7,
-
- /* 8B00h */
- 0x4B45,0x315A,0x3062,0x0000,0x4625,0xDEB8,0xDEB9,0x6B69,
- 0x0000,0x0000,0xDEBF,0xDEBA,0x6B68,0x0000,0x4666,0x0000,
- 0x6B6D,0xDEBB,0x0000,0x0000,0x6B62,0x0000,0x6B6C,0x6B6E,
- 0x0000,0x382C,0x6B6A,0x3956,0xDEBC,0x3C55,0xDEBD,0xDEBE,
- 0x6B6F,0x4D58,0x0000,0x0000,0x0000,0x0000,0x6B72,0x0000,
- 0x6B75,0x0000,0x0000,0x6B73,0x4935,0xDEC0,0x0000,0x0000,
- 0xDEC1,0x0000,0x0000,0x6B70,0x0000,0x0000,0x0000,0xDEC2,
- 0x0000,0x3660,0x0000,0x0000,0xDEC3,0x0000,0x6B74,0x0000,
- 0x0000,0x6B76,0xDEC4,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0x0000,
- 0xDEC9,0x6B7A,0x0000,0x0000,0x6B77,0xDECE,0x6B79,0x6B78,
- 0x0000,0x0000,0xDECA,0xDECB,0xDECC,0x0000,0x6B7B,0x0000,
- 0x3C31,0xDECD,0x6B7D,0x6B7C,0x4968,0x0000,0xDECF,0x6C21,
- 0x0000,0x0000,0x0000,0xDED0,0x0000,0x0000,0x3759,0x0000,
- 0x0000,0x0000,0x0000,0x6B7E,0x6C22,0xDED1,0x0000,0x6C23,
- 0x3544,0x6641,0x3E79,0x0000,0x6C24,0x0000,0xDED2,0x386E,
- 0xDED3,0xDED4,0x0000,0x0000,0xDED5,0x6C25,0xDED6,0x0000,
- 0x6C26,0xDED7,0x0000,0x3B3E,0xDED8,0xDED9,0x0000,0x0000,
- 0x0000,0x0000,0x5A4E,0xDEDA,0x6C27,0xDEDB,0x6C28,0xDEDC,
- 0x3D32,0x0000,0x6C29,0x6C2A,0xDEDD,0xDEDE,0x6C2B,0x0000,
- 0x0000,0x6C2C,0x6C2D,0x0000,0xDEDF,0x0000,0xDEE0,0xDEE1,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 8C00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x432B,
- 0xDEE2,0xDEE3,0x6C2E,0x0000,0x0000,0xDEE4,0xDEE5,0x6C30,
- 0x0000,0x6C2F,0x0000,0x0000,0x0000,0xDEE6,0x4626,0xDEE7,
- 0x6C31,0xDEE8,0x4B2D,0xDEE9,0x6C32,0x0000,0x6C33,0xDEEA,
- 0x6C34,0xDEEB,0x0000,0xDEEC,0xDEED,0x6C35,0x0000,0xDEEE,
- 0xDEEF,0xDEF2,0x465A,0xDEF0,0x0000,0xDEF1,0x0000,0x0000,
- 0x0000,0x3E5D,0x6C36,0xDEF3,0xDEF4,0x0000,0xDEF5,0x0000,
- 0xDEF6,0xDEF7,0x396B,0x502E,0x6C37,0xDEF8,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xDEF9,0x0000,0xDEFA,0xDEFB,0x0000,
- 0x6C38,0x493F,0x6C39,0xDEFC,0x6C41,0x0000,0xDEFD,0x0000,
- 0x0000,0x0000,0x6C3A,0x0000,0x0000,0x6C3C,0xDEFE,0xDFA1,
- 0x0000,0x6C3B,0x6C3D,0xDFA2,0x4B46,0x6C3E,0x6C3F,0x0000,
- 0xDFA3,0x0000,0xDFA4,0xDFA5,0x6C40,0x0000,0x0000,0x0000,
- 0x6C42,0xDFA6,0x0000,0xDFA7,0xDFA8,0x332D,0x4467,0x0000,
- 0x4969,0x3A62,0x3957,0x0000,0xDFA9,0x0000,0x0000,0x494F,
- 0x325F,0x484E,0x6C45,0x3453,0x4055,0x6C44,0x6C49,0x4379,
- 0x4C63,0x0000,0x6C47,0x6C48,0x352E,0x0000,0x6C4A,0x4763,
- 0x425F,0xDFAA,0xDFAB,0x4871,0x453D,0x6C46,0x0000,0x4B47,
- 0x326C,0x6C4C,0x4F28,0x4442,0x4F45,0xDFAC,0xDFAD,0x3B71,
- 0x6C4B,0xDFAE,0x4231,0xDFAF,0x0000,0x6C5C,0x4128,0xDFB0,
- 0x0000,0x4678,0x0000,0x4950,0x0000,0xDFB2,0xDFB1,0x0000,
- 0x0000,0xDFB3,0x6C4F,0x3B3F,0x3B72,0xDFB4,0x3E5E,0x0000,
- 0x4765,0xDFB5,0x382D,0x6C4E,0x6C4D,0x0000,0x496A,0x0000,
- 0xDFB6,0x0000,0x3C41,0x0000,0xDFB7,0x4552,0x0000,0xDFB8,
- 0xDFB9,0x0000,0xDFBA,0x0000,0x0000,0xDFBB,0x0000,0xDFBC,
- 0xDFBD,0x0000,0x6C51,0x6C52,0x3958,0x6C50,0xDFBE,0xDFBF,
-
- /* 8D00h */
- 0x0000,0xDFC0,0x0000,0xDFC1,0x6C53,0x6C54,0x0000,0x6C56,
- 0x4223,0xDFC2,0x6C55,0x3466,0x0000,0x6C58,0x0000,0x6C57,
- 0x6C59,0x0000,0xDFC3,0x6C5B,0x6C5D,0x0000,0x6C5E,0xDFC4,
- 0x0000,0x0000,0x0000,0xDFC5,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x4056,0xDFC6,0x3C4F,0x6C5F,
- 0x0000,0xDFC7,0x0000,0x3352,0xDFC8,0x6C60,0xDFC9,0x0000,
- 0x4176,0x6C61,0x0000,0x6C62,0x496B,0x0000,0x0000,0x352F,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDFCA,
- 0x0000,0x6C63,0xDFCB,0x0000,0xDFCC,0x4436,0x0000,0x0000,
- 0xDFCD,0x0000,0x315B,0x0000,0x0000,0xDFCE,0x0000,0x0000,
- 0xDFCF,0xDFD0,0x0000,0x0000,0x0000,0xDFD1,0x0000,0x0000,
- 0x0000,0x6C64,0x0000,0x0000,0x0000,0x0000,0xDFD2,0xDFD3,
- 0xDFD4,0x0000,0x0000,0x3C71,0x0000,0x0000,0xDFD5,0x0000,
- 0x3F76,0x0000,0x0000,0xDFD6,0xDFD7,0x0000,0x0000,0xDFD8,
- 0x0000,0x0000,0xDFD9,0x422D,0x0000,0xDFDA,0x0000,0xDFDB,
- 0x0000,0xDFDC,0x6C67,0xDFDD,0xDFEF,0x0000,0x6C66,0x0000,
- 0xDFDE,0x0000,0x6C65,0x0000,0x0000,0xDFDF,0xDFE0,0xDFE1,
- 0xDFE2,0x0000,0xDFE3,0x6C6D,0x6C6B,0x0000,0xDFE4,0x6C68,
- 0x0000,0xDFE5,0x0000,0x0000,0xDFE6,0xDFE7,0x6C6A,0xDFE8,
- 0x0000,0xDFE9,0x6C69,0x6C6C,0x0000,0x3577,0x0000,0x6C70,
- 0x0000,0x4057,0x0000,0x6C71,0xDFEA,0xDFEB,0x0000,0xDFEC,
- 0x3859,0x0000,0x6C6E,0x6C6F,0xDFED,0x0000,0x0000,0x4F29,
- 0xDFEE,0xDFF0,0xDFF1,0x4437,0xDFF2,0x4129,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x6C72,0xDFF3,0x0000,0x6C75,
-
- /* 8E00h */
- 0x0000,0xDFF4,0x0000,0x0000,0xDFF5,0xDFF6,0xDFF7,0x0000,
- 0x6C73,0x6C74,0x4D59,0xDFF8,0x0000,0x0000,0x0000,0x4627,
- 0x6C78,0xDFF9,0x0000,0x0000,0xDFFA,0x0000,0xDFFB,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x6C76,0x6C77,0x6C79,
- 0xDFFC,0xDFFD,0xDFFE,0xE0A1,0x0000,0x0000,0xE0A2,0xE0A3,
- 0x0000,0x0000,0x6D29,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x6C7C,0xE0A4,0x0000,0xE0A5,0x6C7D,0x6C7B,0xE0A6,0xE0A7,
- 0xE0A8,0xE0A9,0x0000,0x0000,0x0000,0xE0AA,0x0000,0x0000,
- 0xE0AB,0xE0AC,0x6C7A,0x0000,0x447D,0x0000,0x0000,0x6D21,
- 0x6D25,0x6D22,0x6C7E,0xE0AD,0x6D23,0xE0AE,0xE0AF,0xE0B0,
- 0x6D24,0x0000,0x0000,0x0000,0xE0B1,0x6D2B,0x0000,0x0000,
- 0x0000,0x6D26,0x0000,0xE0B2,0xE0B3,0xE0B4,0xE0B5,0x4058,
- 0x6D28,0xE0B6,0xE0B7,0x6D2A,0x6D27,0x0000,0x0000,0x0000,
- 0x0000,0xE0B8,0x0000,0x0000,0xE0B9,0xE0BA,0x0000,0xE0BB,
- 0xE0BC,0xE0BD,0x6D2D,0x0000,0x3D33,0x0000,0x6D2C,0x0000,
- 0x0000,0xE0BE,0xE0BF,0xE0C0,0x6D2E,0x0000,0x0000,0x0000,
- 0x0000,0x6D2F,0xE0C1,0xE0C2,0x6D32,0x6D31,0x0000,0x6D30,
- 0x0000,0xE0C3,0x6D34,0x6D33,0x0000,0x4C76,0x0000,0x0000,
- 0xE0C4,0x6D36,0xE0C5,0x6D35,0x6D37,0xE0C6,0x0000,0x0000,
- 0x0000,0x6D38,0xE0C7,0xE0C8,0x0000,0xE0C9,0xE0CA,0x0000,
- 0x0000,0x6D3A,0xE0CB,0x0000,0x0000,0x0000,0x0000,0xE0CC,
- 0x0000,0xE0CD,0x6D39,0x3F48,0x6D3B,0xE0CE,0xE0CF,0x366D,
- 0x6D3C,0x6D3E,0x0000,0xE0D0,0x0000,0xE0D1,0x0000,0x0000,
- 0x0000,0x0000,0xE0D2,0xE0D3,0x0000,0x0000,0x6D3F,0x0000,
- 0xE0D4,0xE0D5,0x0000,0xE0D6,0xE0D7,0x6D40,0x6D3D,0xE0D8,
- 0x6D41,0x0000,0x3C56,0x6D42,0x3530,0x3733,0x0000,0xE0D9,
- 0x0000,0xE0DA,0x382E,0x0000,0xE0DB,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6D43,0xE0DC,0x0000,0x0000,0x4670,
- 0x0000,0x0000,0x453E,0x6D44,0x0000,0x0000,0x0000,0x0000,
- 0xE0DD,0x0000,0x0000,0x6D47,0x0000,0xE0E4,0xE0DE,0x0000,
- 0xE0DF,0xE0E0,0x0000,0x0000,0x0000,0x0000,0x0000,0xE0E1,
- 0x3C34,0xE0E2,0xE0E3,0x6D46,0x6D45,0x375A,0x6D48,0x0000,
-
- /* 8F00h */
- 0xE0E5,0x0000,0xE0E6,0x3353,0x0000,0x6D4A,0x0000,0xE0E7,
- 0xE0E8,0x3A5C,0x6D49,0x0000,0x6D52,0x0000,0x0000,0xE0E9,
- 0xE0EA,0x0000,0x6D4C,0x6D4E,0x4A65,0x6D4B,0xE0EB,0xE0EC,
- 0xE0ED,0x6D4D,0x0000,0x6D51,0x6D4F,0x3531,0xE0EE,0x6D50,
- 0xE0EF,0xE0F0,0x0000,0xE0F1,0x0000,0xE0F2,0x6D53,0xE0F3,
- 0xE0F4,0x475A,0x4E58,0x0000,0xE0F5,0xE0F6,0xE0F7,0x3D34,
- 0x0000,0x0000,0x0000,0x6D54,0xE0F8,0xE0F9,0xE0FA,0xE0FB,
- 0x4D22,0x6D56,0xE0FC,0x6D55,0x0000,0x0000,0x6D59,0x4D41,
- 0xE0FD,0xE0FE,0x6D58,0xE1A1,0x336D,0x6D57,0x6D5C,0xE1A2,
- 0x0000,0x6D5B,0x0000,0x0000,0x6D5A,0x4532,0x6D5D,0xE1A3,
- 0x0000,0xE1A4,0xE1A5,0xE1A6,0xE1A7,0xE1A8,0x0000,0x6D5E,
- 0xE1A9,0x0000,0x0000,0x0000,0x6D5F,0xE1AA,0xE1AB,0x396C,
- 0x0000,0x3725,0x6D60,0x6D61,0x6D62,0xE1AC,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3F49,0x6D63,0xE1AD,0x3C2D,0x6D64,
- 0xE1AE,0xE1AF,0x0000,0x6D65,0xE1B0,0xE1B1,0xE1B2,0x5221,
- 0x517E,0x0000,0x0000,0x0000,0x0000,0x6D66,0x6570,0x6D67,
- 0x4324,0x3F2B,0x4740,0x0000,0x0000,0xE1B3,0xE1B4,0x6D68,
- 0xE1B5,0x0000,0x4A55,0x4454,0x397E,0x0000,0xE1B6,0x4329,
- 0xE1B7,0xE1B8,0x312A,0x0000,0x4B78,0x3F57,0xE1B9,0x0000,
- 0x0000,0x0000,0xE1BA,0xE1BB,0x0000,0xE1BC,0x375E,0x0000,
- 0xE1BD,0x3661,0xE1BE,0xE1BF,0x4A56,0xE1C0,0x0000,0x0000,
- 0x0000,0x0000,0x6D69,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xE1C1,0x0000,0x6D6B,0xE1C2,0xE1C3,0x6D6A,0x3260,0x0000,
- 0xE1C4,0x4676,0x6D6C,0x4777,0x0000,0x4533,0xE1C5,0x6D6D,
- 0x3D52,0xE1C6,0x0000,0x0000,0x6D6F,0xE1C7,0xE1C8,0x4C42,
- 0x6D7E,0x6D71,0x6D72,0xE1C9,0x0000,0x4449,0xE1CA,0x0000,
-
- /* 9000h */
- 0x4260,0x4177,0xE1CB,0x4628,0xE1CC,0x6D70,0x3555,0x0000,
- 0xE1CD,0x0000,0x0000,0x6D79,0xE1CE,0x6D76,0x6E25,0x4629,
- 0x4360,0x6D73,0x0000,0x447E,0x4553,0x6D74,0x6D78,0x3F60,
- 0xE1CF,0x4767,0x444C,0xE1D0,0x0000,0x4042,0x6D77,0x422E,
- 0x4224,0x6D75,0x3029,0x4F22,0x0000,0x0000,0x0000,0x6D7A,
- 0xE1D1,0xE1D2,0xE1D4,0x0000,0xE1D5,0xE1D6,0x4261,0xE1D3,
- 0x0000,0x3D35,0x3F4A,0xE1D7,0xE1D8,0x6D7C,0x6D7B,0xE1D9,
- 0x306F,0x6D7D,0x0000,0x0000,0x492F,0x0000,0x6E27,0xE1DA,
- 0x0000,0x465B,0x3F6B,0xE1DB,0xE1DC,0x4359,0x0000,0x3678,
- 0x0000,0x6E26,0x4D37,0x313F,0xE1DD,0x4A57,0x3261,0x6E21,
- 0x6E22,0x6E23,0x6E24,0x463B,0x4323,0x3063,0x6E28,0x0000,
- 0x6E29,0x7423,0x0000,0xE1DE,0x423D,0xE1DF,0x6E2A,0x0000,
- 0x3173,0x414C,0xE1E0,0x382F,0x0000,0x4D5A,0xE1E1,0xE1E2,
- 0x6E2B,0x452C,0x0000,0x0000,0xE1E3,0x4178,0x3C57,0x6E2C,
- 0xE1E4,0x0000,0x6E2F,0x0000,0xE1E5,0x3D65,0x6E2D,0x412B,
- 0x412A,0xE1E6,0x3064,0x0000,0x4E4B,0x6E31,0x0000,0x4872,
- 0x6E33,0x6E32,0x6E30,0x6364,0x3454,0xE1E7,0x0000,0x6D6E,
- 0xE1E8,0x6E35,0x6E34,0xE1E9,0xE1EA,0x0000,0xE1EB,0x6E36,
- 0xE1EC,0x4D38,0x0000,0x0000,0x0000,0xE1ED,0x0000,0xE1EE,
- 0xE1EF,0xE1F0,0x0000,0xE1F1,0x0000,0x0000,0x0000,0x0000,
- 0xE1F2,0xE1F3,0xE1F4,0x4661,0x0000,0xE1F5,0x4B2E,0x0000,
- 0x6E37,0x0000,0x3C59,0x0000,0x0000,0x0000,0x0000,0x6E38,
- 0xE1F6,0x6E39,0xE1F7,0xE1F8,0xE1F9,0x6E3A,0xE1FA,0x0000,
- 0x4521,0x0000,0x0000,0x0000,0x0000,0xE1FB,0xE1FD,0x0000,
- 0x0000,0x306A,0x0000,0xE1FE,0xE2A1,0xE2A2,0x0000,0xE2A3,
- 0xE2A4,0x0000,0x3959,0x0000,0xE1FC,0x0000,0x4F3A,0x0000,
- 0x0000,0x0000,0xE2AD,0x0000,0x0000,0xE2A5,0x0000,0xE2A6,
- 0xE2A7,0xE2A8,0x0000,0x6E3E,0xE2A9,0xE2AA,0x0000,0xE2AB,
- 0x0000,0x3734,0x6E3B,0x0000,0x6E3C,0xE2AC,0x0000,0x0000,
- 0x4974,0x0000,0x0000,0xE2AF,0x0000,0x3354,0x0000,0xE2B0,
- 0xE2B1,0x0000,0x0000,0x0000,0xE2B2,0x4D39,0xE2AE,0x363F,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4554,0xE2B3,0xE2B4,
-
- /* 9100h */
- 0xE2B5,0x0000,0x6E3F,0x0000,0xE2B6,0xE2B7,0xE2B8,0x0000,
- 0xE2B9,0x0000,0x0000,0x0000,0x0000,0xE2BA,0x0000,0x0000,
- 0xE2BB,0x0000,0x6E40,0x0000,0xE2BC,0x0000,0xE2BD,0xE2BE,
- 0xE2BF,0x6E41,0xE2C0,0x0000,0xE2C1,0x0000,0xE2C2,0x0000,
- 0xE2C3,0x0000,0xE2C5,0xE2C6,0x0000,0xE2C4,0x0000,0xE2C7,
- 0x0000,0xE2C8,0x0000,0x0000,0x0000,0x4522,0xE2C9,0xE2CA,
- 0x6E43,0xE2CB,0x6E42,0x0000,0xE2CC,0x0000,0xE2CD,0xE2CE,
- 0x0000,0xE2CF,0xE2D0,0x0000,0xE2D1,0xE2D2,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xE2D3,0x0000,0x0000,0x0000,0xE2D4,
- 0xE2D5,0x4653,0x6E44,0x3D36,0x3C60,0x475B,0x4371,0xE2D6,
- 0x0000,0x0000,0x3C72,0xE2D7,0x3F6C,0x0000,0x6E45,0xE2D8,
- 0x6E46,0xE2D9,0xE2DA,0xE2DB,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xE2DC,0x3F5D,0x6E47,0xE2DD,0x6E48,0x0000,0xE2DE,
- 0x0000,0x6E49,0x4D6F,0x0000,0x3D37,0xE2DF,0x0000,0x0000,
- 0x0000,0x0000,0x6E4B,0x6E4A,0xE2E0,0x395A,0x0000,0x3973,
- 0x3B40,0xE2E1,0xE2E2,0xE2E3,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xE2E4,0x6E4E,0xE2E5,0x0000,0xE2E6,0xE2E7,0x3D66,
- 0x0000,0x6E4D,0xE2E8,0x6E4C,0x0000,0x4269,0xE2E9,0x0000,
- 0x386F,0xE2EA,0x4043,0xE2EB,0xE2EC,0xE2ED,0x0000,0x4830,
- 0xE2EE,0x0000,0x0000,0x0000,0x3D39,0x0000,0xE2EF,0x0000,
- 0x0000,0xE2F0,0x6E4F,0x0000,0x3E5F,0x0000,0xE2F1,0x0000,
- 0xE2F2,0x0000,0x6E52,0x6E50,0xE2F3,0xE2F4,0xE2F5,0x6E51,
- 0xE2F6,0xE2F7,0xE2F8,0xE2F9,0x6E54,0x6E53,0xE2FA,0x0000,
- 0x3E7A,0x0000,0x6E55,0xE2FB,0xE2FC,0xE2FD,0x0000,0xE2FE,
- 0x6E56,0x6E57,0xE3A1,0xE3A2,0x0000,0xE3A3,0x4850,0x3A53,
- 0x3C61,0x6E58,0x0000,0x6E59,0x4E24,0x3D45,0x4C6E,0x4E4C,
- 0x6E5A,0x3662,0x0000,0xE3A4,0xE3A5,0x0000,0x6E5B,0xE3A6,
- 0x4523,0xE3A7,0xE3A8,0x6E5E,0x3378,0x3F4B,0xE3A9,0x6E5C,
- 0x0000,0x6E5D,0x0000,0x4460,0xE3AA,0xE3AB,0x4B55,0x367C,
- 0x0000,0xE3AC,0xE3AD,0x0000,0xE3AE,0xE3AF,0xE3B0,0xE3B1,
- 0xE3B2,0xE3B3,0x0000,0x0000,0x0000,0x6E60,0x6E61,0xE3B4,
- 0x0000,0xE3B5,0x0000,0xE3B6,0x6E5F,0xE3B7,0x0000,0x6E63,
-
- /* 9200h */
- 0xE3B8,0xE3B9,0x0000,0x0000,0xE3BA,0xE3BB,0xE3BC,0xE3BD,
- 0x0000,0xE3BE,0xE3BF,0x0000,0xE3C0,0x465F,0x3343,0x0000,
- 0xE3C1,0x6E67,0xE3C2,0xE3C3,0x6E64,0x6E66,0xE3C4,0x0000,
- 0xE3C5,0x0000,0x0000,0x0000,0xE3C6,0xE3C7,0x6E62,0x0000,
- 0x0000,0x0000,0x0000,0xE3C8,0xE3C9,0xE3CA,0xE3CB,0x0000,
- 0xE3CC,0x6F4F,0x0000,0x0000,0x6E65,0x0000,0xE3CD,0xE3CE,
- 0xE3CF,0x0000,0x0000,0xE3D0,0x4E6B,0xE3D1,0xE3D2,0x385A,
- 0xE3D3,0xE3D4,0xE3D5,0x0000,0xE3D6,0x0000,0xE3D7,0x6E6F,
- 0xE3D8,0x0000,0xE3D9,0xE3DA,0x4534,0x6E6A,0xE3DB,0xE3DC,
- 0x6E6D,0x6E6B,0xE3DD,0x6E70,0x0000,0xE3DE,0xE3DF,0xE3E0,
- 0x6E71,0xE3E1,0x0000,0x0000,0x0000,0x0000,0x0000,0x6E69,
- 0xE3E2,0xE3E3,0x6E76,0x3174,0xE3E4,0xE3E5,0x6E68,0x0000,
- 0xE3E6,0xE3E7,0x482D,0x0000,0x6E6C,0xE3E8,0x3E60,0xE3E9,
- 0xE3EA,0xE3EB,0x0000,0x0000,0x0000,0x0000,0xE3EC,0xE3ED,
- 0xE3EE,0x395B,0x0000,0x0000,0x0000,0xE3EF,0xE3F0,0xE3F1,
- 0xE3F2,0xE3F3,0x0000,0xE3F4,0xE3F5,0xE3F6,0x4B48,0xE3F7,
- 0x3664,0x0000,0x0000,0x3D46,0x0000,0x463C,0x0000,0x0000,
- 0xE3F8,0xE3F9,0xE3FA,0x0000,0x0000,0xE3FB,0xE3FC,0x0000,
- 0x0000,0x412D,0xE3FD,0x6E74,0x0000,0x6E6E,0x6E73,0xE3FE,
- 0x4C43,0xE4A1,0x4438,0x6E75,0x6E72,0x0000,0x0000,0xE4A2,
- 0xE4A3,0x0000,0x0000,0x0000,0xE4A4,0xE4A5,0x0000,0xE4A6,
- 0xE4A7,0x0000,0x0000,0xE4A8,0x0000,0x412C,0x0000,0xE4A9,
- 0x0000,0x0000,0xE4AA,0x0000,0x0000,0x0000,0xE4AB,0x6E79,
- 0xE4AC,0x6E78,0xE4AD,0xE4AE,0xE4AF,0xE4B0,0x0000,0xE4B1,
- 0xE4B2,0xE4B3,0xE4B4,0xE4B5,0x0000,0xE4B6,0xE4B7,0xE4B8,
- 0xE4B9,0x0000,0x0000,0xE4BA,0xE4BB,0xE4BC,0xE4BD,0x6E77,
- 0xE4BE,0x0000,0x4B2F,0xE4BF,0x0000,0xE4C0,0x0000,0xE4C1,
- 0xE4C2,0xE4C3,0x0000,0x0000,0xE4C4,0xE4C5,0x0000,0xE4C6,
- 0xE4C7,0xE4C8,0x0000,0xE4C9,0x3D7B,0xE4CA,0x0000,0xE4CB,
- 0xE4CC,0x6E7A,0x4A5F,0x0000,0xE4CD,0x3154,0xE4CE,0x0000,
- 0xE4CF,0x0000,0x4946,0x4372,0x0000,0x0000,0x0000,0x0000,
- 0x3578,0xE4D0,0x6E7C,0xE4D1,0x395D,0x0000,0x0000,0xE4D2,
-
- /* 9300h */
- 0xE4D3,0x0000,0xE4D4,0x0000,0x0000,0x0000,0x3B2C,0x0000,
- 0xE4D5,0x0000,0x0000,0x0000,0x0000,0xE4D6,0x0000,0x6E7B,
- 0x3F6D,0xE4D7,0x0000,0x0000,0xE4D8,0xE4D9,0x0000,0x0000,
- 0x3F6E,0x6F21,0x6F23,0x0000,0xE4DA,0xE4DB,0xE4DC,0xE4DD,
- 0x3E7B,0xE4DE,0x6F22,0x6F24,0xE4DF,0xE4E0,0x3653,0xE4E1,
- 0x4945,0xE4E2,0xE4E3,0x3C62,0x4F23,0x0000,0x6E7E,0x3A78,
- 0x0000,0x0000,0x4F3F,0xE4E4,0xE4E5,0x6F26,0xE4E6,0xE4E7,
- 0x0000,0x0000,0x6F25,0x6F27,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x6E7D,0x0000,0x0000,0xE4E8,
- 0xE4E9,0xE4EA,0x0000,0x4669,0x0000,0x4555,0x0000,0x0000,
- 0xE4EB,0xE4EC,0xE4ED,0x0000,0x4457,0xE4EE,0x6F2C,0xE4EF,
- 0xE4F0,0x0000,0xE4F1,0x4343,0x6F28,0x0000,0xE4F2,0x0000,
- 0x6F29,0x0000,0x0000,0x0000,0xE4F3,0xE4F4,0x0000,0xE4F5,
- 0x0000,0xE4F6,0xE4F7,0x0000,0x372D,0xE4F8,0x6F2B,0xE4F9,
- 0xE4FA,0xE4FB,0x0000,0xE4FC,0xE4FD,0x3830,0xE4FE,0x0000,
- 0x0000,0x0000,0xE5A1,0x0000,0x6F2A,0xE5A2,0x3E61,0xE5A3,
- 0xE5A4,0xE5A5,0xE5A6,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xE5A7,0x0000,0xE5A8,0xE5A9,0x3379,0xE5AA,0x0000,0xE5AB,
- 0x0000,0x0000,0xE5AC,0x0000,0x6F30,0xE5AD,0x3A3F,0x4179,
- 0xE5AE,0x0000,0x444A,0xE5AF,0x0000,0x0000,0xE5B0,0x0000,
- 0x0000,0xE5B1,0x0000,0xE5B2,0xE5B3,0x0000,0xE5B4,0x333B,
- 0xE5B5,0xE5BB,0x0000,0xE5B6,0x6F2E,0x6F2F,0x4443,0x0000,
- 0x6F2D,0x0000,0x0000,0x0000,0xE5B7,0xE5B8,0xE5B9,0x0000,
- 0x0000,0x6F31,0xE5BA,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xE5BC,0x0000,0x6F37,0xE5BD,0xE5BE,0xE5BF,0xE5C0,
- 0x6F3A,0xE5C1,0xE5C2,0xE5C3,0xE5C4,0xE5C5,0x0000,0x0000,
- 0x6F39,0x452D,0x0000,0xE5C6,0x0000,0x0000,0x6F32,0x6F33,
- 0x6F36,0xE5C7,0x0000,0x0000,0xE5C8,0x6F38,0xE5C9,0xE5CA,
- 0x0000,0x3640,0xE5CB,0x0000,0x6F3B,0x6F35,0xE5CC,0xE5CD,
- 0x6F34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE5CF,
- 0xE5D0,0xE5CE,0xE5D1,0xE5D2,0x0000,0xE5D3,0x0000,0x0000,
-
- /* 9400h */
- 0x0000,0xE5D4,0xE5D5,0x6F3F,0xE5D6,0x0000,0x0000,0x6F40,
- 0xE5D7,0xE5D8,0x0000,0x0000,0x0000,0xE5D9,0xE5DA,0xE5DB,
- 0x6F41,0x0000,0x0000,0x6F3E,0x6F3D,0xE5DC,0xE5DD,0xE5DE,
- 0x3E62,0x462A,0x6F3C,0x0000,0x0000,0x0000,0x0000,0xE5DF,
- 0x0000,0x6F45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6F43,0x0000,0x0000,0xE5E0,0xE5E1,
- 0x0000,0xE5E2,0xE5E3,0xE5E4,0xE5E5,0x6F44,0x6F42,0x0000,
- 0x4278,0x0000,0x6F46,0xE5E6,0x0000,0xE5E8,0x0000,0xE5E7,
- 0x0000,0x6F47,0x0000,0xE5E9,0x6F49,0xE5EA,0x0000,0x0000,
- 0xE5EB,0x0000,0xE5EC,0x0000,0xE5ED,0x0000,0x0000,0x0000,
- 0x0000,0x3455,0x6F48,0x4C7A,0x0000,0xE5EE,0x0000,0x0000,
- 0x0000,0xE5EF,0x6F54,0x6F4A,0xE5F0,0x0000,0x6F4D,0xE5F1,
- 0x6F4B,0xE5F2,0x6F4C,0xE5F3,0x0000,0x0000,0x0000,0x0000,
- 0xE5F4,0x0000,0x6F4E,0xE5F5,0x0000,0xE5F6,0xE5F7,0xE5F8,
- 0x6F50,0xE5F9,0xE5FA,0x0000,0x0000,0x6F51,0x0000,0x6F52,
- 0x0000,0x0000,0x0000,0x0000,0x6F55,0x6F53,0x6F56,0x6F58,
- 0x0000,0x6F57,0x0000,0xE5FC,0xE5FB,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 9500h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4439,
- 0xE5FD,0xE5FE,0x0000,0x0000,0x0000,0x0000,0xE6A1,0x0000,
- 0x4C67,0x0000,0x6F59,0x412E,0xE6A2,0x0000,0x0000,0x6F5A,
- 0xE6A3,0x4A44,0x6F5B,0x332B,0xE6A4,0xE6A5,0xE6A6,0x313C,
- 0x0000,0x3457,0x0000,0x3456,0x6F5C,0x0000,0x6F5D,0x0000,
- 0x6F5E,0x6F5F,0x0000,0x0000,0x0000,0xE6A7,0xE6A8,0xE6A9,
- 0x6F60,0xE6AA,0x3458,0x3355,0x395E,0x4836,0xE6AB,0x6F62,
- 0x6F61,0xE6AC,0x0000,0xE6AD,0xE6AE,0x6F63,0x0000,0x0000,
- 0x0000,0x0000,0x315C,0x0000,0xE6AF,0x0000,0xE6B0,0x0000,
- 0x0000,0x6F66,0xE6B1,0x6F65,0x6F64,0xE6B2,0x6F67,0xE6B3,
- 0x0000,0x0000,0x0000,0x6F6A,0x0000,0x0000,0xE6B4,0x3047,
- 0xE6B5,0xE6B6,0x6F68,0xE6B7,0x6F6C,0x6F6B,0x0000,0x0000,
- 0xE6B8,0xE6B9,0xE6BA,0xE6BB,0x6F6E,0x6F6D,0x6F6F,0x0000,
- 0x462E,0xE6BC,0xE6BD,0x0000,0x6F70,0xE6BE,0xE6BF,0xE6C0,
- 0xE6C1,0x6F71,0x6F73,0x0000,0xE6C2,0x6F72,0xE6C3,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 9600h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x496C,0xE6C4,0xE6C5,0x0000,
- 0x0000,0x6F74,0xE6C6,0x0000,0xE6C7,0xE6C8,0xE6C9,0x0000,
- 0x6F75,0x0000,0x3A65,0x0000,0xE6CA,0x0000,0x6F76,0x6F77,
- 0x0000,0xE6CB,0x4B49,0xE6CC,0x0000,0x0000,0x0000,0xE6CD,
- 0xE6CE,0xE6CF,0xE6D0,0x414B,0xE6D1,0xE6D2,0x0000,0x3024,
- 0x424B,0xE6D3,0x6F78,0x0000,0x496D,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6F7B,0x6F79,0x395F,0x0000,0x6F7A,
- 0x3842,0x0000,0xE6D4,0x0000,0xE6D5,0x0000,0xE6D6,0xE6D7,
- 0xE6D8,0x0000,0x0000,0x4A45,0x6F7D,0x7021,0x6F7E,0x7022,
- 0x0000,0xE6D9,0x3121,0x3F58,0x3D7C,0x3459,0x7023,0x0000,
- 0x0000,0x0000,0x4766,0x0000,0x7025,0x0000,0xE6DA,0x0000,
- 0x3122,0x0000,0x7024,0x4444,0xE6DB,0x4E4D,0x462B,0x6F7C,
- 0x4E26,0x0000,0x3831,0xE6DC,0xE6DD,0x4D5B,0xE6DE,0xE6DF,
- 0x0000,0xE6E0,0xE6E1,0xE6E2,0xE6E3,0x3679,0x4E34,0x0000,
- 0x3728,0xE6E4,0x4262,0x6721,0x0000,0x7026,0x332C,0x3F6F,
- 0x0000,0xE6E5,0x0000,0x0000,0x3356,0x7028,0xE6E6,0x7029,
- 0x7027,0x3764,0xE6E7,0x3A5D,0x3E63,0xE6E8,0x0000,0xE6E9,
- 0x3123,0x0000,0x0000,0x4E59,0xE6EA,0xE6EB,0xE6EC,0x702B,
- 0x6E2E,0xE6ED,0x702A,0x0000,0x0000,0x0000,0xE6EE,0xE6EF,
- 0x702E,0x702C,0x702D,0xE6F0,0x702F,0x0000,0x7030,0x4E6C,
- 0x7031,0x7032,0xE6F1,0x4049,0x483B,0x0000,0x0000,0x0000,
- 0x3F7D,0x3467,0x0000,0x0000,0x4D3A,0x326D,0x3D38,0x385B,
- 0x0000,0x7035,0xE6F2,0x7034,0x3B73,0x7036,0x7033,0x0000,
- 0x0000,0x3B28,0xE6F3,0x0000,0x0000,0x703A,0x6A2D,0x0000,
- 0xE6F5,0x5256,0xE6F6,0x3F77,0x7038,0xE6F7,0xE6F8,0xE6F9,
- 0x0000,0x0000,0x4E25,0x4671,0x0000,0x0000,0x0000,0x0000,
- 0x312B,0xE6FA,0x4063,0x3C36,0x0000,0x0000,0x0000,0xE6FB,
- 0x4A37,0xE6FC,0x3140,0x0000,0x0000,0x0000,0x4E6D,0x4D6B,
- 0x0000,0x703B,0xE6FD,0x4545,0x0000,0x0000,0x0000,0x0000,
-
- /* 9700h */
- 0x3C7B,0x0000,0xE6FE,0xE7A1,0x703C,0xE7A2,0x703D,0x3F4C,
- 0x703E,0xE7A3,0x4E6E,0x0000,0x0000,0x7039,0x7040,0x7042,
- 0x0000,0x7041,0x0000,0x703F,0x0000,0x0000,0x7043,0x0000,
- 0x0000,0x7044,0xE7A4,0xE7A5,0x417A,0xE7A6,0x3262,0x0000,
- 0x0000,0xE7A7,0xE7A8,0xE7A9,0x7045,0x0000,0x0000,0x4C38,
- 0xE7AA,0x0000,0x7046,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x7047,0xE7AB,0x4F2A,0xE7AC,0x0000,0x0000,0x0000,0x0000,
- 0x5B31,0x7048,0x0000,0x0000,0x0000,0x7049,0x704A,0x0000,
- 0x0000,0xE7AD,0x704E,0xE7AE,0x704B,0x0000,0x704C,0x0000,
- 0x704D,0x704F,0xE7AF,0x0000,0x0000,0x0000,0xE7B0,0xE7B1,
- 0x0000,0x0000,0x4044,0x0000,0x0000,0xE7B2,0x4C77,0xE7B3,
- 0xE7B4,0x4045,0xE7B5,0xE7B6,0x7050,0x0000,0x4873,0x0000,
- 0x7051,0x7353,0x4C4C,0xE7B7,0x7052,0x0000,0x7053,0xE7B8,
- 0x7054,0x3357,0xE7B9,0x7056,0x0000,0x3F59,0xE7BA,0x0000,
- 0x0000,0x7057,0x0000,0xE7BB,0x3724,0x0000,0xE7BC,0xE7BD,
- 0xE7BE,0x7058,0x705C,0xE7BF,0x705A,0xE7C0,0x0000,0xE7C1,
- 0xE7C2,0x705B,0x0000,0x0000,0x3373,0x7059,0x705D,0x0000,
- 0x0000,0xE7C3,0x0000,0x705E,0x0000,0x3048,0x0000,0x705F,
- 0x7060,0x0000,0x0000,0x0000,0x0000,0xE7C4,0xE7C5,0xE7C6,
- 0x3E64,0xE7C7,0xE7C8,0x0000,0x7061,0x0000,0xE7C9,0xE7CA,
- 0x3547,0x0000,0xE7CB,0x7064,0x0000,0x0000,0x7063,0x0000,
- 0x7062,0x0000,0x0000,0x6B71,0xE7CC,0x4A5C,0xE7CD,0x0000,
- 0x0000,0xE7CE,0xE7CF,0x7065,0x7066,0xE7D0,0xE7D1,0x0000,
- 0xE7D2,0xE7D3,0xE7D4,0x0000,0xE7D5,0x0000,0xE7D6,0xE7D7,
- 0x0000,0xE7D8,0x0000,0x7067,0xE7D9,0xE7DA,0x7068,0xE7DB,
- 0x7069,0xE7DC,0xE7DD,0x706A,0xE7DE,0xE7DF,0xE7E0,0x0000,
- 0xE7E1,0xE7E2,0x0000,0x345A,0xE7E3,0x0000,0x0000,0xE7E4,
- 0xE7E5,0xE7E6,0x0000,0xE7EA,0x706B,0xE7E7,0xE7E8,0x0000,
- 0xE7E9,0xE7EB,0x0000,0x0000,0xE7EC,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x706C,0x4723,0xE7ED,
- 0x0000,0xE7EE,0x706E,0x323B,0xE7EF,0x7071,0x7070,0xE7F0,
- 0xE7F1,0x0000,0xE7F2,0x3124,0x0000,0x0000,0x0000,0x3641,
-
- /* 9800h */
- 0x0000,0x4A47,0x443A,0x3A22,0x0000,0x3960,0x3D67,0xE7F3,
- 0x3F5C,0x0000,0xE7F4,0x0000,0x7073,0xE7F6,0xE7F7,0x7072,
- 0x4D42,0x3468,0x4852,0x465C,0xE7F8,0x0000,0xE7F9,0x3F7C,
- 0x4E4E,0xE7F5,0x375B,0x0000,0xE7FA,0x0000,0xE7FB,0x0000,
- 0xE7FC,0x7076,0x0000,0xE7FD,0x7075,0xE8A8,0xE7FE,0x0000,
- 0x0000,0x0000,0x0000,0xE8A1,0x4B4B,0x462C,0xE8A2,0xE8A3,
- 0xE8A4,0x0000,0xE8A5,0xE8A6,0x3150,0xE8A7,0x0000,0x7077,
- 0x7074,0x0000,0x0000,0x4951,0x4D6A,0x7078,0xE8A9,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xE8AA,0x0000,0x7079,0xE8AB,
- 0x0000,0x0000,0xE8AC,0x707B,0x426A,0x335B,0x335C,0x707A,
- 0x0000,0xE8AD,0xE8AE,0xE8AF,0x3469,0x3832,0xE8B0,0xE8B1,
- 0x346A,0xE8B2,0xE8B3,0x453F,0x0000,0x0000,0x4E60,0x0000,
- 0x0000,0x0000,0xE8B4,0xE8B5,0x0000,0xE8B6,0xE8B7,0x385C,
- 0x0000,0x0000,0xE8B8,0x707C,0xE8B9,0x0000,0x0000,0x707D,
- 0x707E,0x7121,0x0000,0x7123,0x7122,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4977,0x0000,0x7124,0xE8BA,0x0000,0xE8BB,0xE8BC,0x7125,
- 0xE8BD,0x7126,0x0000,0x0000,0xE8BE,0x0000,0x7127,0xE8BF,
- 0xE8C0,0x0000,0xE8C1,0xE8C2,0x0000,0x0000,0x0000,0xE8C3,
- 0x0000,0x0000,0xE8C4,0x7129,0x7128,0xE8C5,0x712A,0x0000,
- 0xE8C6,0x0000,0x0000,0x0000,0xE8C7,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4874,0x664C,0x0000,0x0000,0x3F29,
- 0x0000,0xE8C8,0x3532,0xE8C9,0x0000,0xE8CA,0xE8CB,0xE8CC,
- 0x0000,0x712B,0xE8CD,0x712C,0x0000,0x522C,0x5D3B,0x4853,
- 0x0000,0x0000,0x307B,0xE8CE,0x303B,0x0000,0xE8CF,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x3B74,0x4B30,0x3E7E,0x0000,
-
- /* 9900h */
- 0x0000,0x0000,0xE8D0,0x712D,0x0000,0x4C5F,0x0000,0xE8D1,
- 0xE8D2,0x712E,0x4D5C,0x0000,0x3142,0x0000,0x0000,0x0000,
- 0x3B41,0xE8D3,0x712F,0x326E,0x7130,0xE8D4,0xE8D5,0xE8D6,
- 0x7131,0x0000,0xE8D7,0xE8D8,0xE8D9,0x7133,0x7134,0xE8DA,
- 0x7136,0x7132,0xE8DB,0x0000,0x7135,0x0000,0xE8DC,0xE8DD,
- 0x345B,0x0000,0x0000,0xE8DE,0x7137,0x0000,0x7138,0x0000,
- 0x0000,0xE8DF,0xE8E0,0xE8E1,0xE8E2,0xE8E3,0x0000,0x0000,
- 0x0000,0xE8E4,0xE8E5,0xE8E6,0xE8E7,0x7139,0x713A,0x0000,
- 0xE8E8,0xE8E9,0x713B,0x0000,0x0000,0x713D,0xE8EA,0xE8EB,
- 0xE8EC,0x713C,0x0000,0x713F,0x7142,0xE8ED,0xE8EE,0x0000,
- 0x713E,0x7140,0x7141,0x0000,0xE8EF,0x7143,0x0000,0x3642,
- 0xE8F0,0xE8F1,0x0000,0xE8F2,0xE8F3,0x0000,0xE8F4,0xE8F5,
- 0xE8F6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C73,0x7144,
- 0x7145,0x3961,0x0000,0xE8F7,0x0000,0xE8F8,0x0000,0xE8F9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x7146,0xE8FA,0x0000,
- 0x333E,0x0000,0x0000,0x0000,0x474F,0x7147,0x7148,0x0000,
- 0xE8FB,0xE8FC,0xE8FD,0x435A,0x466B,0xE8FE,0x0000,0x0000,
- 0x0000,0xE9A1,0xE9A2,0x0000,0x7149,0xE9A3,0x0000,0xE9A4,
- 0x0000,0x477D,0x0000,0xE9A5,0x424C,0x3158,0x366E,0x0000,
- 0x366F,0xE9A6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4373,0x714E,0x3670,0xE9A7,0xE9A8,0x326F,0x0000,0x0000,
- 0x714D,0xE9A9,0xE9AA,0x714B,0xE9AB,0x714C,0xE9AC,0x714A,
- 0x0000,0x0000,0x7158,0x0000,0x0000,0x0000,0x0000,0xE9AD,
- 0x0000,0x0000,0xE9AE,0xE9AF,0xE9B0,0x714F,0x7150,0x0000,
- 0xE9B1,0x7151,0x7152,0x0000,0xE9B2,0xE9B3,0x0000,0x0000,
- 0x7154,0xE9B4,0x0000,0x7153,0x0000,0xE9B5,0xE9B6,0x3D59,
-
- /* 9A00h */
- 0x0000,0x7155,0xE9B7,0xE9B8,0xE9B9,0x7157,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xE9BA,0xE9BB,0x0000,0x3533,0x7156,
- 0xE9BC,0xE9BD,0x417B,0x3833,0x0000,0x0000,0xE9BE,0x0000,
- 0x0000,0x7159,0x0000,0x0000,0x0000,0x0000,0xE9BF,0x0000,
- 0xE9C0,0x0000,0xE9C1,0xE9C2,0xE9C3,0x0000,0x0000,0xE9C4,
- 0x424D,0x0000,0x0000,0x715A,0x0000,0xE9C5,0xE9C6,0x0000,
- 0x462D,0x0000,0x0000,0xE9C7,0x0000,0xE9C8,0xE9C9,0x715B,
- 0xE9CA,0x0000,0x0000,0x0000,0x0000,0x0000,0x7160,0x0000,
- 0x715E,0xE9CC,0x715D,0x715F,0xE9CD,0x715C,0x0000,0xE9CB,
- 0x0000,0x0000,0xE9CE,0xE9CF,0xE9D0,0x7162,0xE9D1,0x0000,
- 0x0000,0xE9D2,0x0000,0x0000,0xE9D3,0x7161,0xE9D4,0x7164,
- 0x0000,0x0000,0x3643,0x7163,0x0000,0xE9D5,0x0000,0x7165,
- 0x0000,0x0000,0x7166,0x0000,0x7168,0x7167,0x0000,0x0000,
- 0x0000,0x7169,0x716B,0x716A,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x397C,0x0000,0xE9D6,0x0000,0xE9D7,0x716C,0xE9D8,0xE9D9,
- 0x716D,0x0000,0xE9DA,0x0000,0xE9DB,0xE9DC,0xE9DD,0x0000,
- 0x333C,0xE9DE,0x0000,0xE9DF,0x716E,0x0000,0xE9E0,0xE9E1,
- 0x716F,0xE9E2,0x0000,0xE9E3,0x3F71,0x0000,0xE9E4,0x0000,
- 0xE9E5,0x0000,0x0000,0x0000,0x0000,0x0000,0xE9E6,0x7170,
- 0xE9E7,0x7171,0xE9E8,0x7172,0x7173,0xE9E9,0xE9EA,0xE9EB,
- 0x3962,0x0000,0x0000,0xE9EC,0xE9ED,0x0000,0x7174,0x7175,
- 0xE9EE,0x0000,0x7176,0x7177,0xE9EF,0xE9F0,0x7178,0xE9F1,
- 0x0000,0xE9F2,0x4831,0x717A,0xE9F3,0x4926,0x717B,0x7179,
- 0x0000,0x717D,0xE9F4,0xE9F5,0x717C,0xE9F6,0x0000,0x717E,
- 0x0000,0xE9F7,0xE9F8,0x7221,0x0000,0xE9F9,0x0000,0xE9FA,
-
- /* 9B00h */
- 0xE9FB,0xE9FC,0xE9FD,0xE9FE,0xEAA1,0xEAA2,0x7222,0x0000,
- 0xEAA3,0xEAA4,0x0000,0xEAA5,0xEAA6,0xEAA7,0xEAA8,0x0000,
- 0xEAA9,0x0000,0xEAAA,0x0000,0x0000,0x0000,0xEAAB,0x0000,
- 0x7223,0xEAAC,0x7224,0xEAAD,0xEAAE,0x0000,0x0000,0x7225,
- 0xEAAF,0x0000,0x7226,0x7227,0x0000,0x7228,0xEAB0,0x7229,
- 0x722A,0x722B,0x722C,0xEAB1,0x0000,0xEAB2,0x722D,0x722E,
- 0x0000,0x5D35,0x722F,0xEAB3,0xEAB4,0xEAB5,0x0000,0xEAB6,
- 0x0000,0xEAB7,0xEAB8,0x6478,0x3534,0xEAB9,0x0000,0x0000,
- 0x0000,0x3321,0x3A32,0x7231,0x7230,0x4C25,0x0000,0x0000,
- 0xEABA,0x0000,0x0000,0xEABB,0xEABC,0x7233,0x7234,0x7232,
- 0x0000,0x7235,0x0000,0x0000,0x4B62,0xEABD,0xEABE,0xEABF,
- 0x7236,0x0000,0x357B,0xEAC0,0x0000,0x0000,0xEAC1,0x0000,
- 0x0000,0xEAC2,0x0000,0xEAC3,0x0000,0xEAC4,0xEAC5,0x0000,
- 0xEAC6,0x0000,0xEAC7,0xEAC8,0xEAC9,0xEACA,0xEACB,0x4F25,
- 0x0000,0x0000,0x0000,0xEACC,0x7237,0xEACD,0x0000,0xEACE,
- 0xEACF,0xEAD0,0x0000,0x0000,0x0000,0x0000,0x0000,0xEAD1,
- 0xEAD2,0x0000,0x0000,0x7239,0xEAD3,0xEAD4,0xEAD5,0xEAD6,
- 0x0000,0xEAD7,0xEAD8,0xEAD9,0x0000,0xEADA,0x303E,0xEADB,
- 0xEADC,0x723A,0x4A2B,0x7238,0xEADD,0x0000,0x723B,0x723C,
- 0x0000,0x0000,0xEADE,0x0000,0x0000,0xEADF,0xEAE0,0x723D,
- 0x723E,0x0000,0x0000,0x0000,0x0000,0x0000,0xEAE1,0xEAE2,
- 0x723F,0xEAE3,0x4B6E,0x3B2D,0xEAE4,0x3A7A,0x412F,0x0000,
- 0xEAE5,0xEAE6,0xEAE7,0x0000,0x7240,0x0000,0x0000,0xEAE8,
- 0xEAE9,0x7243,0x0000,0xEAEA,0xEAEB,0x0000,0xEAEC,0xEAED,
- 0x7241,0xEAEE,0x0000,0x0000,0x0000,0x0000,0x7244,0xEAEF,
- 0xEAF0,0x3871,0x7242,0x0000,0x0000,0x0000,0xEAF1,0x7245,
- 0xEAF2,0x7246,0x7247,0x0000,0x724B,0x0000,0x3B2A,0xEAF3,
- 0xEAF4,0x0000,0x0000,0x4264,0x0000,0xEAF5,0x0000,0xEAF6,
- 0x0000,0x724C,0x7249,0x7248,0x724A,0xEAF7,0x0000,0xEAF8,
- 0x375F,0x0000,0xEAF9,0xEAFA,0x0000,0x0000,0x0000,0xEAFB,
- 0x7250,0x724F,0x724E,0xEAFC,0x0000,0x3033,0x0000,0xEAFD,
- 0xEAFE,0xEBA1,0xEBA2,0x0000,0x0000,0xEBA3,0x0000,0xEBA4,
-
- /* 9C00h */
- 0xEBA5,0x0000,0xEBA6,0x0000,0x725A,0x0000,0x7256,0x0000,
- 0x7257,0x7253,0x7259,0xEBA7,0x7255,0x3362,0x0000,0xEBA8,
- 0x4F4C,0xEBA9,0x7258,0x7254,0x7252,0x7251,0xEBAA,0x0000,
- 0xEBAB,0xEBAC,0xEBAD,0x725C,0xEBAE,0x0000,0xEBAF,0x0000,
- 0x0000,0x725F,0xEBB0,0xEBB1,0x725E,0x725D,0xEBB2,0xEBB3,
- 0xEBB4,0xEBB5,0xEBB6,0x0000,0x0000,0x4949,0x725B,0x3073,
- 0x7260,0xEBB7,0x7262,0x0000,0x0000,0xEBB8,0xEBB9,0xEBBA,
- 0x0000,0x336F,0x724D,0x3137,0x0000,0xEBBB,0x7264,0x0000,
- 0x0000,0xEBBC,0x0000,0xEBBD,0xEBBE,0xEBBF,0x7263,0x7261,
- 0x432D,0xEBC0,0xEBC1,0x0000,0x0000,0x0000,0xEBC2,0xEBC3,
- 0xEBC4,0x0000,0x4B70,0xEBC5,0xEBC6,0x0000,0xEBC7,0x4E5A,
- 0xEBC8,0x0000,0x7265,0xEBC9,0xEBD0,0xEBCA,0xEBCB,0xEBCC,
- 0x7266,0x0000,0x0000,0xEBCD,0x0000,0x0000,0x0000,0x7267,
- 0xEBD2,0xEBCE,0xEBCF,0xEBD1,0x0000,0x0000,0xEBD3,0x0000,
- 0xEBD4,0x0000,0xEBD5,0x0000,0x0000,0xEBD6,0x7268,0xEBD7,
- 0x7269,0x0000,0x0000,0xEBD8,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x443B,0xEBD9,0x726A,
- 0x0000,0x4837,0x0000,0x726F,0x726B,0x0000,0x0000,0x0000,
- 0x726C,0x0000,0xEBDA,0x4B31,0x4C44,0x0000,0x4650,0xEBDB,
- 0x0000,0xEBDC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 9D00h */
- 0x0000,0x0000,0xEBDE,0x7270,0x0000,0x0000,0x7271,0x463E,
- 0x726E,0x726D,0x0000,0xEBDD,0x0000,0x0000,0x322A,0x0000,
- 0x0000,0xEBDF,0x7279,0x0000,0x0000,0x7278,0x0000,0xEBE0,
- 0xEBE1,0x0000,0x0000,0x3175,0xEBE2,0xEBE3,0xEBE4,0x7276,
- 0x0000,0x0000,0x0000,0x7275,0x0000,0x0000,0x7273,0x0000,
- 0x337B,0x0000,0x7272,0x3C32,0x3229,0x0000,0x0000,0xEBE5,
- 0xEBE6,0x0000,0xEBE7,0xEBE8,0xEBE9,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xEBEA,0x3963,0xEBEB,0xEBED,0x727C,0x727B,
- 0x0000,0x727A,0xEBEE,0xEBEF,0x7277,0xEBEC,0x727D,0xEBF0,
- 0x727E,0x0000,0xEBF1,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x7325,0x7324,0x0000,0xEBF2,0xEBF3,0x0000,0x0000,0x0000,
- 0x0000,0x7326,0x0000,0x0000,0x312D,0x7321,0x7322,0xEBF4,
- 0x3974,0x4C39,0xEBF6,0xEBF5,0x7323,0xEBF7,0x0000,0x0000,
- 0x0000,0xEBF8,0xEBF9,0xEBFA,0x4B32,0x0000,0x0000,0x732B,
- 0xEBFB,0x0000,0x7327,0x0000,0x0000,0x0000,0xEBFC,0xEBFD,
- 0x0000,0x0000,0x732C,0xEBFE,0xECA1,0x0000,0xECA2,0x0000,
- 0x0000,0x0000,0x0000,0xECA3,0xECA4,0x0000,0xECA5,0x7329,
- 0x0000,0x7328,0xECA6,0x0000,0x0000,0xECA7,0xECA8,0x375C,
- 0x0000,0x0000,0xECA9,0xECAA,0x0000,0xECAB,0xECAC,0xECAD,
- 0xECAE,0x0000,0x732D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xECAF,0x0000,0x0000,0x732E,0x0000,0x0000,0x0000,
- 0x0000,0x732F,0xECB0,0x732A,0xECB1,0x0000,0xECB2,0x7274,
- 0x0000,0xECB3,0x7330,0x0000,0x4461,0xECB4,0x0000,0x0000,
- 0x7334,0xECB5,0x7335,0x7333,0xECB6,0x0000,0x0000,0xECB7,
- 0x0000,0x7332,0x7338,0xECB8,0x7331,0x0000,0x7336,0xECB9,
- 0x0000,0xECBA,0xECBB,0x0000,0x0000,0x0000,0x0000,0x7337,
- 0x0000,0x0000,0x0000,0x733A,0xECBC,0xECBD,0xECBE,0xECBF,
- 0x0000,0x7339,0xECC0,0x0000,0x0000,0x0000,0xECC1,0xECC2,
- 0xECC3,0x0000,0x0000,0x0000,0x0000,0xECC4,0x733C,0xECC5,
- 0x0000,0xECC6,0x0000,0xECC7,0x0000,0x733D,0xECC8,0x733E,
- 0xECC9,0x0000,0x4F49,0xECCA,0xECCB,0x0000,0x0000,0x0000,
- 0x733B,0x426B,0x3A6D,0x0000,0x0000,0x733F,0xECCC,0x0000,
-
- /* 9E00h */
- 0x0000,0x0000,0xECCE,0x0000,0x0000,0x0000,0x0000,0xECCF,
- 0x0000,0x0000,0xECCD,0x0000,0x0000,0x0000,0xECD0,0x0000,
- 0xECD1,0xECD2,0xECD3,0x0000,0x0000,0xECD4,0xECD5,0x0000,
- 0x0000,0xECD6,0x7340,0x7341,0xECD7,0xECD8,0x7342,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x7343,0x0000,0x0000,
- 0x3834,0x7344,0xECD9,0xECDA,0xECDB,0x7345,0x0000,0x3C2F,
- 0xECDC,0x7346,0xECDD,0xECDE,0xECDF,0xECE0,0x0000,0xECE1,
- 0x7347,0x0000,0x0000,0x7348,0x7349,0x0000,0xECE2,0xECE3,
- 0x0000,0x734C,0x734A,0x4F3C,0x0000,0x734B,0xECE4,0x4E6F,
- 0xECE5,0x0000,0x0000,0xECE6,0x0000,0x734D,0xECE7,0x4E5B,
- 0x0000,0x0000,0x0000,0x0000,0xECE8,0x734E,0x477E,0x0000,
- 0xECE9,0x734F,0x7351,0x0000,0xECEA,0x7352,0xECEB,0xECEC,
- 0xECED,0x0000,0x0000,0xECEE,0xECEF,0xECF0,0x0000,0x0000,
- 0x7350,0x396D,0x4C4D,0x4B63,0x5677,0x0000,0x5D60,0x4B7B,
- 0x0000,0x0000,0x0000,0x0000,0x322B,0x0000,0xECF1,0x0000,
- 0xECF2,0x0000,0x0000,0xECF3,0x7354,0x3550,0x7355,0x7356,
- 0x7357,0x0000,0x3975,0x0000,0x7358,0xECF4,0x0000,0x0000,
- 0x6054,0x4C5B,0x0000,0x4263,0x7359,0x735B,0x735A,0xECF5,
- 0x735C,0x0000,0x0000,0x0000,0xECF6,0x735D,0x0000,0xECF7,
- 0x735E,0x0000,0x0000,0x0000,0xECF8,0xECF9,0xECFA,0x735F,
- 0xECFB,0xECFC,0xECFD,0x0000,0x7360,0xECFE,0x7361,0x7362,
- 0xEDA1,0x7363,0x0000,0x7364,0x7365,0x7366,0x0000,0xEDA2,
-
- /* 9F00h */
- 0x0000,0x0000,0xEDA3,0xEDA4,0x0000,0x0000,0x0000,0x7367,
- 0x7368,0xEDA5,0x0000,0x0000,0x0000,0x0000,0x4524,0xEDA6,
- 0xEDA7,0xEDA8,0xEDA9,0x385D,0xEDAA,0x736A,0xEDAB,0xEDAC,
- 0x0000,0xEDAD,0xEDAE,0xEDAF,0x0000,0x0000,0x0000,0xEDB0,
- 0x414D,0x736B,0xEDB1,0x0000,0x0000,0x0000,0xEDB2,0x0000,
- 0x0000,0x0000,0xEDB3,0xEDB4,0x736C,0x0000,0x0000,0xEDB5,
- 0x0000,0xEDB6,0xEDB7,0x0000,0xEDB8,0x0000,0x0000,0xEDB9,
- 0x0000,0xEDBA,0xEDBB,0x4921,0xEDBC,0xEDBD,0x736D,0xEDBE,
- 0x0000,0xEDBF,0x0000,0xEDC0,0xEDC1,0xEDC2,0xEDC3,0xEDC4,
- 0x0000,0x0000,0x736E,0x6337,0x0000,0x0000,0x6C5A,0x706D,
- 0x0000,0x0000,0x736F,0xEDC5,0x7370,0xEDC6,0xEDC7,0xEDC8,
- 0xEDC9,0x0000,0xEDCA,0x0000,0x0000,0xEDCB,0xEDCC,0x7372,
- 0x7373,0x7374,0x4E70,0x7371,0x0000,0x0000,0x7375,0x7376,
- 0xEDCD,0xEDCE,0x7378,0x0000,0x7377,0xEDCF,0xEDD0,0xEDD1,
- 0xEDD2,0xEDD3,0x737A,0xEDD4,0x0000,0xEDD5,0x737B,0x7379,
- 0x0000,0x0000,0xEDD6,0x0000,0x0000,0xEDD7,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4E36,0x0000,0xEDD8,
- 0xEDD9,0xEDDA,0xEDDB,0x0000,0xEDDC,0x737C,0xEDDD,0xEDDE,
- 0x0000,0x0000,0x0000,0x0000,0x737D,0x6354,0xEDDF,0x0000,
- 0x737E,0xEDE0,0xEDE1,0xEDE2,0x0000,0xEDE3,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-static const int ucs_i_jis_table_min = 0x4E00;
-static const int ucs_i_jis_table_max = 0x4E00 + (sizeof (ucs_i_jis_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_r_jis_table[] = {
- /* FF00h */
- 0x0000,0x212A,0x0000,0x2174,0x2170,0x2173,0x2175,0x0000,
- 0x214A,0x214B,0x2176,0x215C,0x2124,0x0000,0x2125,0x213F,
- 0x2330,0x2331,0x2332,0x2333,0x2334,0x2335,0x2336,0x2337,
- 0x2338,0x2339,0x2127,0x2128,0x2163,0x2161,0x2164,0x2129,
- 0x2177,0x2341,0x2342,0x2343,0x2344,0x2345,0x2346,0x2347,
- 0x2348,0x2349,0x234A,0x234B,0x234C,0x234D,0x234E,0x234F,
- 0x2350,0x2351,0x2352,0x2353,0x2354,0x2355,0x2356,0x2357,
- 0x2358,0x2359,0x235A,0x214E,0x2140,0x214F,0x2130,0x2132,
- 0x212E,0x2361,0x2362,0x2363,0x2364,0x2365,0x2366,0x2367,
- 0x2368,0x2369,0x236A,0x236B,0x236C,0x236D,0x236E,0x236F,
- 0x2370,0x2371,0x2372,0x2373,0x2374,0x2375,0x2376,0x2377,
- 0x2378,0x2379,0x237A,0x2150,0x2143,0x2151,0x0000,0x0000,
- 0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
- 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2131,0x0000,0x216F
-};
-static const int ucs_r_jis_table_min = 0xFF00;
-static const int ucs_r_jis_table_max = 0xFF00 + (sizeof (ucs_r_jis_table) / sizeof (unsigned short));
-
diff --git a/ext/mbstring/unicode_table_kr.h b/ext/mbstring/unicode_table_kr.h
deleted file mode 100644
index 4131be113f..0000000000
--- a/ext/mbstring/unicode_table_kr.h
+++ /dev/null
@@ -1,6934 +0,0 @@
-/*
- * Unicode table
- */
-
-static const unsigned short uhc1_ucs_table[] = {
-0xac02,0xac03,0xac05,0xac06,0xac0b,0xac0c,0xac0d,0xac0e,
-0xac0f,0xac18,0xac1e,0xac1f,0xac21,0xac22,0xac23,0xac25,
-0xac26,0xac27,0xac28,0xac29,0xac2a,0xac2b,0xac2e,0xac32,
-0xac33,0xac34,0xac35,0xac36,0xac37,0xac3a,0xac3b,0xac3d,
-0xac3e,0xac3f,0xac41,0xac42,0xac43,0xac44,0xac45,0xac46,
-0xac47,0xac48,0xac49,0xac4a,0xac4c,0xac4e,0xac4f,0xac50,
-0xac51,0xac52,0xac53,0xac55,0xac56,0xac57,0xac59,0xac5a,
-0xac5b,0xac5d,0xac5e,0xac5f,0xac60,0xac61,0xac62,0xac63,
-0xac64,0xac65,0xac66,0xac67,0xac68,0xac69,0xac6a,0xac6b,
-0xac6c,0xac6d,0xac6e,0xac6f,0xac72,0xac73,0xac75,0xac76,
-0xac79,0xac7b,0xac7c,0xac7d,0xac7e,0xac7f,0xac82,0xac87,
-0xac88,0xac8d,0xac8e,0xac8f,0xac91,0xac92,0xac93,0xac95,
-0xac96,0xac97,0xac98,0xac99,0xac9a,0xac9b,0xac9e,0xaca2,
-0xaca3,0xaca4,0xaca5,0xaca6,0xaca7,0xacab,0xacad,0xacae,
-0xacb1,0xacb2,0xacb3,0xacb4,0xacb5,0xacb6,0xacb7,0xacba,
-0xacbe,0xacbf,0xacc0,0xacc2,0xacc3,0xacc5,0xacc6,0xacc7,
-0xacc9,0xacca,0xaccb,0xaccd,0xacce,0xaccf,0xacd0,0xacd1,
-0xacd2,0xacd3,0xacd4,0xacd6,0xacd8,0xacd9,0xacda,0xacdb,
-0xacdc,0xacdd,0xacde,0xacdf,0xace2,0xace3,0xace5,0xace6,
-0xace9,0xaceb,0xaced,0xacee,0xacf2,0xacf4,0xacf7,0xacf8,
-0xacf9,0xacfa,0xacfb,0xacfe,0xacff,0xad01,0xad02,0xad03,
-0xad05,0xad07,0xad08,0xad09,0xad0a,0xad0b,0xad0e,0xad10,
-0xad12,0xad13,0xad14,0xad15,0xad16,0xad17,0xad19,0xad1a,
-0xad1b,0xad1d,0xad1e,0xad1f,0xad21,0xad22,0xad23,0xad24,
-0xad25,0xad26,0xad27,0xad28,0xad2a,0xad2b,0xad2e,0xad2f,
-0xad30,0xad31,0xad32,0xad33,0xad36,0xad37,0xad39,0xad3a,
-0xad3b,0xad3d,0xad3e,0xad3f,0xad40,0xad41,0xad42,0xad43,
-0xad46,0xad48,0xad4a,0xad4b,0xad4c,0xad4d,0xad4e,0xad4f,
-0xad51,0xad52,0xad53,0xad55,0xad56,0xad57,0xad59,0xad5a,
-0xad5b,0xad5c,0xad5d,0xad5e,0xad5f,0xad60,0xad62,0xad64,
-0xad65,0xad66,0xad67,0xad68,0xad69,0xad6a,0xad6b,0xad6e,
-0xad6f,0xad71,0xad72,0xad77,0xad78,0xad79,0xad7a,0xad7e,
-0xad80,0xad83,0xad84,0xad85,0xad86,0xad87,0xad8a,0xad8b,
-0xad8d,0xad8e,0xad8f,0xad91,0xad92,0xad93,0xad94,0xad95,
-0xad96,0xad97,0xad98,0xad99,0xad9a,0xad9b,0xad9e,0xad9f,
-0xada0,0xada1,0xada2,0xada3,0xada5,0xada6,0xada7,0xada8,
-0xada9,0xadaa,0xadab,0xadac,0xadad,0xadae,0xadaf,0xadb0,
-0xadb1,0xadb2,0xadb3,0xadb4,0xadb5,0xadb6,0xadb8,0xadb9,
-0xadba,0xadbb,0xadbc,0xadbd,0xadbe,0xadbf,0xadc2,0xadc3,
-0xadc5,0xadc6,0xadc7,0xadc9,0xadca,0xadcb,0xadcc,0xadcd,
-0xadce,0xadcf,0xadd2,0xadd4,0xadd5,0xadd6,0xadd7,0xadd8,
-0xadd9,0xadda,0xaddb,0xaddd,0xadde,0xaddf,0xade1,0xade2,
-0xade3,0xade5,0xade6,0xade7,0xade8,0xade9,0xadea,0xadeb,
-0xadec,0xaded,0xadee,0xadef,0xadf0,0xadf1,0xadf2,0xadf3,
-0xadf4,0xadf5,0xadf6,0xadf7,0xadfa,0xadfb,0xadfd,0xadfe,
-0xae02,0xae03,0xae04,0xae05,0xae06,0xae07,0xae0a,0xae0c,
-0xae0e,0xae0f,0xae10,0xae11,0xae12,0xae13,0xae15,0xae16,
-0xae17,0xae18,0xae19,0xae1a,0xae1b,0xae1c,0xae1d,0xae1e,
-0xae1f,0xae20,0xae21,0xae22,0xae23,0xae24,0xae25,0xae26,
-0xae27,0xae28,0xae29,0xae2a,0xae2b,0xae2c,0xae2d,0xae2e,
-0xae2f,0xae32,0xae33,0xae35,0xae36,0xae39,0xae3b,0xae3c,
-0xae3d,0xae3e,0xae3f,0xae42,0xae44,0xae47,0xae48,0xae49,
-0xae4b,0xae4f,0xae51,0xae52,0xae53,0xae55,0xae57,0xae58,
-0xae59,0xae5a,0xae5b,0xae5e,0xae62,0xae63,0xae64,0xae66,
-0xae67,0xae6a,0xae6b,0xae6d,0xae6e,0xae6f,0xae71,0xae72,
-0xae73,0xae74,0xae75,0xae76,0xae77,0xae7a,0xae7e,0xae7f,
-0xae80,0xae81,0xae82,0xae83,0xae86,0xae87,0xae88,0xae89,
-0xae8a,0xae8b,0xae8d,0xae8e,0xae8f,0xae90,0xae91,0xae92,
-0xae93,0xae94,0xae95,0xae96,0xae97,0xae98,0xae99,0xae9a,
-0xae9b,0xae9c,0xae9d,0xae9e,0xae9f,0xaea0,0xaea1,0xaea2,
-0xaea3,0xaea4,0xaea5,0xaea6,0xaea7,0xaea8,0xaea9,0xaeaa,
-0xaeab,0xaeac,0xaead,0xaeae,0xaeaf,0xaeb0,0xaeb1,0xaeb2,
-0xaeb3,0xaeb4,0xaeb5,0xaeb6,0xaeb7,0xaeb8,0xaeb9,0xaeba,
-0xaebb,0xaebf,0xaec1,0xaec2,0xaec3,0xaec5,0xaec6,0xaec7,
-0xaec8,0xaec9,0xaeca,0xaecb,0xaece,0xaed2,0xaed3,0xaed4,
-0xaed5,0xaed6,0xaed7,0xaeda,0xaedb,0xaedd,0xaede,0xaedf,
-0xaee0,0xaee1,0xaee2,0xaee3,0xaee4,0xaee5,0xaee6,0xaee7,
-0xaee9,0xaeea,0xaeec,0xaeee,0xaeef,0xaef0,0xaef1,0xaef2,
-0xaef3,0xaef5,0xaef6,0xaef7,0xaef9,0xaefa,0xaefb,0xaefd,
-0xaefe,0xaeff,0xaf00,0xaf01,0xaf02,0xaf03,0xaf04,0xaf05,
-0xaf06,0xaf09,0xaf0a,0xaf0b,0xaf0c,0xaf0e,0xaf0f,0xaf11,
-0xaf12,0xaf13,0xaf14,0xaf15,0xaf16,0xaf17,0xaf18,0xaf19,
-0xaf1a,0xaf1b,0xaf1c,0xaf1d,0xaf1e,0xaf1f,0xaf20,0xaf21,
-0xaf22,0xaf23,0xaf24,0xaf25,0xaf26,0xaf27,0xaf28,0xaf29,
-0xaf2a,0xaf2b,0xaf2e,0xaf2f,0xaf31,0xaf33,0xaf35,0xaf36,
-0xaf37,0xaf38,0xaf39,0xaf3a,0xaf3b,0xaf3e,0xaf40,0xaf44,
-0xaf45,0xaf46,0xaf47,0xaf4a,0xaf4b,0xaf4c,0xaf4d,0xaf4e,
-0xaf4f,0xaf51,0xaf52,0xaf53,0xaf54,0xaf55,0xaf56,0xaf57,
-0xaf58,0xaf59,0xaf5a,0xaf5b,0xaf5e,0xaf5f,0xaf60,0xaf61,
-0xaf62,0xaf63,0xaf66,0xaf67,0xaf68,0xaf69,0xaf6a,0xaf6b,
-0xaf6c,0xaf6d,0xaf6e,0xaf6f,0xaf70,0xaf71,0xaf72,0xaf73,
-0xaf74,0xaf75,0xaf76,0xaf77,0xaf78,0xaf7a,0xaf7b,0xaf7c,
-0xaf7d,0xaf7e,0xaf7f,0xaf81,0xaf82,0xaf83,0xaf85,0xaf86,
-0xaf87,0xaf89,0xaf8a,0xaf8b,0xaf8c,0xaf8d,0xaf8e,0xaf8f,
-0xaf92,0xaf93,0xaf94,0xaf96,0xaf97,0xaf98,0xaf99,0xaf9a,
-0xaf9b,0xaf9d,0xaf9e,0xaf9f,0xafa0,0xafa1,0xafa2,0xafa3,
-0xafa4,0xafa5,0xafa6,0xafa7,0xafa8,0xafa9,0xafaa,0xafab,
-0xafac,0xafad,0xafae,0xafaf,0xafb0,0xafb1,0xafb2,0xafb3,
-0xafb4,0xafb5,0xafb6,0xafb7,0xafba,0xafbb,0xafbd,0xafbe,
-0xafbf,0xafc1,0xafc2,0xafc3,0xafc4,0xafc5,0xafc6,0xafca,
-0xafcc,0xafcf,0xafd0,0xafd1,0xafd2,0xafd3,0xafd5,0xafd6,
-0xafd7,0xafd8,0xafd9,0xafda,0xafdb,0xafdd,0xafde,0xafdf,
-0xafe0,0xafe1,0xafe2,0xafe3,0xafe4,0xafe5,0xafe6,0xafe7,
-0xafea,0xafeb,0xafec,0xafed,0xafee,0xafef,0xaff2,0xaff3,
-0xaff5,0xaff6,0xaff7,0xaff9,0xaffa,0xaffb,0xaffc,0xaffd,
-0xaffe,0xafff,0xb002,0xb003,0xb005,0xb006,0xb007,0xb008,
-0xb009,0xb00a,0xb00b,0xb00d,0xb00e,0xb00f,0xb011,0xb012,
-0xb013,0xb015,0xb016,0xb017,0xb018,0xb019,0xb01a,0xb01b,
-0xb01e,0xb01f,0xb020,0xb021,0xb022,0xb023,0xb024,0xb025,
-0xb026,0xb027,0xb029,0xb02a,0xb02b,0xb02c,0xb02d,0xb02e,
-0xb02f,0xb030,0xb031,0xb032,0xb033,0xb034,0xb035,0xb036,
-0xb037,0xb038,0xb039,0xb03a,0xb03b,0xb03c,0xb03d,0xb03e,
-0xb03f,0xb040,0xb041,0xb042,0xb043,0xb046,0xb047,0xb049,
-0xb04b,0xb04d,0xb04f,0xb050,0xb051,0xb052,0xb056,0xb058,
-0xb05a,0xb05b,0xb05c,0xb05e,0xb05f,0xb060,0xb061,0xb062,
-0xb063,0xb064,0xb065,0xb066,0xb067,0xb068,0xb069,0xb06a,
-0xb06b,0xb06c,0xb06d,0xb06e,0xb06f,0xb070,0xb071,0xb072,
-0xb073,0xb074,0xb075,0xb076,0xb077,0xb078,0xb079,0xb07a,
-0xb07b,0xb07e,0xb07f,0xb081,0xb082,0xb083,0xb085,0xb086,
-0xb087,0xb088,0xb089,0xb08a,0xb08b,0xb08e,0xb090,0xb092,
-0xb093,0xb094,0xb095,0xb096,0xb097,0xb09b,0xb09d,0xb09e,
-0xb0a3,0xb0a4,0xb0a5,0xb0a6,0xb0a7,0xb0aa,0xb0b0,0xb0b2,
-0xb0b6,0xb0b7,0xb0b9,0xb0ba,0xb0bb,0xb0bd,0xb0be,0xb0bf,
-0xb0c0,0xb0c1,0xb0c2,0xb0c3,0xb0c6,0xb0ca,0xb0cb,0xb0cc,
-0xb0cd,0xb0ce,0xb0cf,0xb0d2,0xb0d3,0xb0d5,0xb0d6,0xb0d7,
-0xb0d9,0xb0da,0xb0db,0xb0dc,0xb0dd,0xb0de,0xb0df,0xb0e1,
-0xb0e2,0xb0e3,0xb0e4,0xb0e6,0xb0e7,0xb0e8,0xb0e9,0xb0ea,
-0xb0eb,0xb0ec,0xb0ed,0xb0ee,0xb0ef,0xb0f0,0xb0f1,0xb0f2,
-0xb0f3,0xb0f4,0xb0f5,0xb0f6,0xb0f7,0xb0f8,0xb0f9,0xb0fa,
-0xb0fb,0xb0fc,0xb0fd,0xb0fe,0xb0ff,0xb100,0xb101,0xb102,
-0xb103,0xb104,0xb105,0xb106,0xb107,0xb10a,0xb10d,0xb10e,
-0xb10f,0xb111,0xb114,0xb115,0xb116,0xb117,0xb11a,0xb11e,
-0xb11f,0xb120,0xb121,0xb122,0xb126,0xb127,0xb129,0xb12a,
-0xb12b,0xb12d,0xb12e,0xb12f,0xb130,0xb131,0xb132,0xb133,
-0xb136,0xb13a,0xb13b,0xb13c,0xb13d,0xb13e,0xb13f,0xb142,
-0xb143,0xb145,0xb146,0xb147,0xb149,0xb14a,0xb14b,0xb14c,
-0xb14d,0xb14e,0xb14f,0xb152,0xb153,0xb156,0xb157,0xb159,
-0xb15a,0xb15b,0xb15d,0xb15e,0xb15f,0xb161,0xb162,0xb163,
-0xb164,0xb165,0xb166,0xb167,0xb168,0xb169,0xb16a,0xb16b,
-0xb16c,0xb16d,0xb16e,0xb16f,0xb170,0xb171,0xb172,0xb173,
-0xb174,0xb175,0xb176,0xb177,0xb17a,0xb17b,0xb17d,0xb17e,
-0xb17f,0xb181,0xb183,0xb184,0xb185,0xb186,0xb187,0xb18a,
-0xb18c,0xb18e,0xb18f,0xb190,0xb191,0xb195,0xb196,0xb197,
-0xb199,0xb19a,0xb19b,0xb19d,0xb19e,0xb19f,0xb1a0,0xb1a1,
-0xb1a2,0xb1a3,0xb1a4,0xb1a5,0xb1a6,0xb1a7,0xb1a9,0xb1aa,
-0xb1ab,0xb1ac,0xb1ad,0xb1ae,0xb1af,0xb1b0,0xb1b1,0xb1b2,
-0xb1b3,0xb1b4,0xb1b5,0xb1b6,0xb1b7,0xb1b8,0xb1b9,0xb1ba,
-0xb1bb,0xb1bc,0xb1bd,0xb1be,0xb1bf,0xb1c0,0xb1c1,0xb1c2,
-0xb1c3,0xb1c4,0xb1c5,0xb1c6,0xb1c7,0xb1c8,0xb1c9,0xb1ca,
-0xb1cb,0xb1cd,0xb1ce,0xb1cf,0xb1d1,0xb1d2,0xb1d3,0xb1d5,
-0xb1d6,0xb1d7,0xb1d8,0xb1d9,0xb1da,0xb1db,0xb1de,0xb1e0,
-0xb1e1,0xb1e2,0xb1e3,0xb1e4,0xb1e5,0xb1e6,0xb1e7,0xb1ea,
-0xb1eb,0xb1ed,0xb1ee,0xb1ef,0xb1f1,0xb1f2,0xb1f3,0xb1f4,
-0xb1f5,0xb1f6,0xb1f7,0xb1f8,0xb1fa,0xb1fc,0xb1fe,0xb1ff,
-0xb200,0xb201,0xb202,0xb203,0xb206,0xb207,0xb209,0xb20a,
-0xb20d,0xb20e,0xb20f,0xb210,0xb211,0xb212,0xb213,0xb216,
-0xb218,0xb21a,0xb21b,0xb21c,0xb21d,0xb21e,0xb21f,0xb221,
-0xb222,0xb223,0xb224,0xb225,0xb226,0xb227,0xb228,0xb229,
-0xb22a,0xb22b,0xb22c,0xb22d,0xb22e,0xb22f,0xb230,0xb231,
-0xb232,0xb233,0xb235,0xb236,0xb237,0xb238,0xb239,0xb23a,
-0xb23b,0xb23d,0xb23e,0xb23f,0xb240,0xb241,0xb242,0xb243,
-0xb244,0xb245,0xb246,0xb247,0xb248,0xb249,0xb24a,0xb24b,
-0xb24c,0xb24d,0xb24e,0xb24f,0xb250,0xb251,0xb252,0xb253,
-0xb254,0xb255,0xb256,0xb257,0xb259,0xb25a,0xb25b,0xb25d,
-0xb25e,0xb25f,0xb261,0xb262,0xb263,0xb264,0xb265,0xb266,
-0xb267,0xb26a,0xb26b,0xb26c,0xb26d,0xb26e,0xb26f,0xb270,
-0xb271,0xb272,0xb273,0xb276,0xb277,0xb278,0xb279,0xb27a,
-0xb27b,0xb27d,0xb27e,0xb27f,0xb280,0xb281,0xb282,0xb283,
-0xb286,0xb287,0xb288,0xb28a,0xb28b,0xb28c,0xb28d,0xb28e,
-0xb28f,0xb292,0xb293,0xb295,0xb296,0xb297,0xb29b,0xb29c,
-0xb29d,0xb29e,0xb29f,0xb2a2,0xb2a4,0xb2a7,0xb2a8,0xb2a9,
-0xb2ab,0xb2ad,0xb2ae,0xb2af,0xb2b1,0xb2b2,0xb2b3,0xb2b5,
-0xb2b6,0xb2b7,0xb2b8,0xb2b9,0xb2ba,0xb2bb,0xb2bc,0xb2bd,
-0xb2be,0xb2bf,0xb2c0,0xb2c1,0xb2c2,0xb2c3,0xb2c4,0xb2c5,
-0xb2c6,0xb2c7,0xb2ca,0xb2cb,0xb2cd,0xb2ce,0xb2cf,0xb2d1,
-0xb2d3,0xb2d4,0xb2d5,0xb2d6,0xb2d7,0xb2da,0xb2dc,0xb2de,
-0xb2df,0xb2e0,0xb2e1,0xb2e3,0xb2e7,0xb2e9,0xb2ea,0xb2f0,
-0xb2f1,0xb2f2,0xb2f6,0xb2fc,0xb2fd,0xb2fe,0xb302,0xb303,
-0xb305,0xb306,0xb307,0xb309,0xb30a,0xb30b,0xb30c,0xb30d,
-0xb30e,0xb30f,0xb312,0xb316,0xb317,0xb318,0xb319,0xb31a,
-0xb31b,0xb31d,0xb31e,0xb31f,0xb320,0xb321,0xb322,0xb323,
-0xb324,0xb325,0xb326,0xb327,0xb328,0xb329,0xb32a,0xb32b,
-0xb32c,0xb32d,0xb32e,0xb32f,0xb330,0xb331,0xb332,0xb333,
-0xb334,0xb335,0xb336,0xb337,0xb338,0xb339,0xb33a,0xb33b,
-0xb33c,0xb33d,0xb33e,0xb33f,0xb340,0xb341,0xb342,0xb343,
-0xb344,0xb345,0xb346,0xb347,0xb348,0xb349,0xb34a,0xb34b,
-0xb34c,0xb34d,0xb34e,0xb34f,0xb350,0xb351,0xb352,0xb353,
-0xb357,0xb359,0xb35a,0xb35d,0xb360,0xb361,0xb362,0xb363,
-0xb366,0xb368,0xb36a,0xb36c,0xb36d,0xb36f,0xb372,0xb373,
-0xb375,0xb376,0xb377,0xb379,0xb37a,0xb37b,0xb37c,0xb37d,
-0xb37e,0xb37f,0xb382,0xb386,0xb387,0xb388,0xb389,0xb38a,
-0xb38b,0xb38d,0xb38e,0xb38f,0xb391,0xb392,0xb393,0xb395,
-0xb396,0xb397,0xb398,0xb399,0xb39a,0xb39b,0xb39c,0xb39d,
-0xb39e,0xb39f,0xb3a2,0xb3a3,0xb3a4,0xb3a5,0xb3a6,0xb3a7,
-0xb3a9,0xb3aa,0xb3ab,0xb3ad,0xb3ae,0xb3af,0xb3b0,0xb3b1,
-0xb3b2,0xb3b3,0xb3b4,0xb3b5,0xb3b6,0xb3b7,0xb3b8,0xb3b9,
-0xb3ba,0xb3bb,0xb3bc,0xb3bd,0xb3be,0xb3bf,0xb3c0,0xb3c1,
-0xb3c2,0xb3c3,0xb3c6,0xb3c7,0xb3c9,0xb3ca,0xb3cd,0xb3cf,
-0xb3d1,0xb3d2,0xb3d3,0xb3d6,0xb3d8,0xb3da,0xb3dc,0xb3de,
-0xb3df,0xb3e1,0xb3e2,0xb3e3,0xb3e5,0xb3e6,0xb3e7,0xb3e9,
-0xb3ea,0xb3eb,0xb3ec,0xb3ed,0xb3ee,0xb3ef,0xb3f0,0xb3f1,
-0xb3f2,0xb3f3,0xb3f4,0xb3f5,0xb3f6,0xb3f7,0xb3f8,0xb3f9,
-0xb3fa,0xb3fb,0xb3fd,0xb3fe,0xb3ff,0xb400,0xb401,0xb402,
-0xb403,0xb404,0xb405,0xb406,0xb407,0xb408,0xb409,0xb40a,
-0xb40b,0xb40c,0xb40d,0xb40e,0xb40f,0xb411,0xb412,0xb413,
-0xb414,0xb415,0xb416,0xb417,0xb419,0xb41a,0xb41b,0xb41d,
-0xb41e,0xb41f,0xb421,0xb422,0xb423,0xb424,0xb425,0xb426,
-0xb427,0xb42a,0xb42c,0xb42d,0xb42e,0xb42f,0xb430,0xb431,
-0xb432,0xb433,0xb435,0xb436,0xb437,0xb438,0xb439,0xb43a,
-0xb43b,0xb43c,0xb43d,0xb43e,0xb43f,0xb440,0xb441,0xb442,
-0xb443,0xb444,0xb445,0xb446,0xb447,0xb448,0xb449,0xb44a,
-0xb44b,0xb44c,0xb44d,0xb44e,0xb44f,0xb452,0xb453,0xb455,
-0xb456,0xb457,0xb459,0xb45a,0xb45b,0xb45c,0xb45d,0xb45e,
-0xb45f,0xb462,0xb464,0xb466,0xb467,0xb468,0xb469,0xb46a,
-0xb46b,0xb46d,0xb46e,0xb46f,0xb470,0xb471,0xb472,0xb473,
-0xb474,0xb475,0xb476,0xb477,0xb478,0xb479,0xb47a,0xb47b,
-0xb47c,0xb47d,0xb47e,0xb47f,0xb481,0xb482,0xb483,0xb484,
-0xb485,0xb486,0xb487,0xb489,0xb48a,0xb48b,0xb48c,0xb48d,
-0xb48e,0xb48f,0xb490,0xb491,0xb492,0xb493,0xb494,0xb495,
-0xb496,0xb497,0xb498,0xb499,0xb49a,0xb49b,0xb49c,0xb49e,
-0xb49f,0xb4a0,0xb4a1,0xb4a2,0xb4a3,0xb4a5,0xb4a6,0xb4a7,
-0xb4a9,0xb4aa,0xb4ab,0xb4ad,0xb4ae,0xb4af,0xb4b0,0xb4b1,
-0xb4b2,0xb4b3,0xb4b4,0xb4b6,0xb4b8,0xb4ba,0xb4bb,0xb4bc,
-0xb4bd,0xb4be,0xb4bf,0xb4c1,0xb4c2,0xb4c3,0xb4c5,0xb4c6,
-0xb4c7,0xb4c9,0xb4ca,0xb4cb,0xb4cc,0xb4cd,0xb4ce,0xb4cf,
-0xb4d1,0xb4d2,0xb4d3,0xb4d4,0xb4d6,0xb4d7,0xb4d8,0xb4d9,
-0xb4da,0xb4db,0xb4de,0xb4df,0xb4e1,0xb4e2,0xb4e5,0xb4e7,
-0xb4e8,0xb4e9,0xb4ea,0xb4eb,0xb4ee,0xb4f0,0xb4f2,0xb4f3,
-0xb4f4,0xb4f5,0xb4f6,0xb4f7,0xb4f9,0xb4fa,0xb4fb,0xb4fc,
-0xb4fd,0xb4fe,0xb4ff,0xb500,0xb501,0xb502,0xb503,0xb504,
-0xb505,0xb506,0xb507,0xb508,0xb509,0xb50a,0xb50b,0xb50c,
-0xb50d,0xb50e,0xb50f,0xb510,0xb511,0xb512,0xb513,0xb516,
-0xb517,0xb519,0xb51a,0xb51d,0xb51e,0xb51f,0xb520,0xb521,
-0xb522,0xb523,0xb526,0xb52b,0xb52c,0xb52d,0xb52e,0xb52f,
-0xb532,0xb533,0xb535,0xb536,0xb537,0xb539,0xb53a,0xb53b,
-0xb53c,0xb53d,0xb53e,0xb53f,0xb542,0xb546,0xb547,0xb548,
-0xb549,0xb54a,0xb54e,0xb54f,0xb551,0xb552,0xb553,0xb555,
-0xb556,0xb557,0xb558,0xb559,0xb55a,0xb55b,0xb55e,0xb562,
-0xb563,0xb564,0xb565,0xb566,0xb567,0xb568,0xb569,0xb56a,
-0xb56b,0xb56c,0xb56d,0xb56e,0xb56f,0xb570,0xb571,0xb572,
-0xb573,0xb574,0xb575,0xb576,0xb577,0xb578,0xb579,0xb57a,
-0xb57b,0xb57c,0xb57d,0xb57e,0xb57f,0xb580,0xb581,0xb582,
-0xb583,0xb584,0xb585,0xb586,0xb587,0xb588,0xb589,0xb58a,
-0xb58b,0xb58c,0xb58d,0xb58e,0xb58f,0xb590,0xb591,0xb592,
-0xb593,0xb594,0xb595,0xb596,0xb597,0xb598,0xb599,0xb59a,
-0xb59b,0xb59c,0xb59d,0xb59e,0xb59f,0xb5a2,0xb5a3,0xb5a5,
-0xb5a6,0xb5a7,0xb5a9,0xb5ac,0xb5ad,0xb5ae,0xb5af,0xb5b2,
-0xb5b6,0xb5b7,0xb5b8,0xb5b9,0xb5ba,0xb5be,0xb5bf,0xb5c1,
-0xb5c2,0xb5c3,0xb5c5,0xb5c6,0xb5c7,0xb5c8,0xb5c9,0xb5ca,
-0xb5cb,0xb5ce,0xb5d2,0xb5d3,0xb5d4,0xb5d5,0xb5d6,0xb5d7,
-0xb5d9,0xb5da,0xb5db,0xb5dc,0xb5dd,0xb5de,0xb5df,0xb5e0,
-0xb5e1,0xb5e2,0xb5e3,0xb5e4,0xb5e5,0xb5e6,0xb5e7,0xb5e8,
-0xb5e9,0xb5ea,0xb5eb,0xb5ed,0xb5ee,0xb5ef,0xb5f0,0xb5f1,
-0xb5f2,0xb5f3,0xb5f4,0xb5f5,0xb5f6,0xb5f7,0xb5f8,0xb5f9,
-0xb5fa,0xb5fb,0xb5fc,0xb5fd,0xb5fe,0xb5ff,0xb600,0xb601,
-0xb602,0xb603,0xb604,0xb605,0xb606,0xb607,0xb608,0xb609,
-0xb60a,0xb60b,0xb60c,0xb60d,0xb60e,0xb60f,0xb612,0xb613,
-0xb615,0xb616,0xb617,0xb619,0xb61a,0xb61b,0xb61c,0xb61d,
-0xb61e,0xb61f,0xb620,0xb621,0xb622,0xb623,0xb624,0xb626,
-0xb627,0xb628,0xb629,0xb62a,0xb62b,0xb62d,0xb62e,0xb62f,
-0xb630,0xb631,0xb632,0xb633,0xb635,0xb636,0xb637,0xb638,
-0xb639,0xb63a,0xb63b,0xb63c,0xb63d,0xb63e,0xb63f,0xb640,
-0xb641,0xb642,0xb643,0xb644,0xb645,0xb646,0xb647,0xb649,
-0xb64a,0xb64b,0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,
-0xb652,0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,
-0xb65a,0xb65b,0xb65c,0xb65d,0xb65e,0xb65f,0xb660,0xb661,
-0xb662,0xb663,0xb665,0xb666,0xb667,0xb669,0xb66a,0xb66b,
-0xb66c,0xb66d,0xb66e,0xb66f,0xb670,0xb671,0xb672,0xb673,
-0xb674,0xb675,0xb676,0xb677,0xb678,0xb679,0xb67a,0xb67b,
-0xb67c,0xb67d,0xb67e,0xb67f,0xb680,0xb681,0xb682,0xb683,
-0xb684,0xb685,0xb686,0xb687,0xb688,0xb689,0xb68a,0xb68b,
-0xb68c,0xb68d,0xb68e,0xb68f,0xb690,0xb691,0xb692,0xb693,
-0xb694,0xb695,0xb696,0xb697,0xb698,0xb699,0xb69a,0xb69b,
-0xb69e,0xb69f,0xb6a1,0xb6a2,0xb6a3,0xb6a5,0xb6a6,0xb6a7,
-0xb6a8,0xb6a9,0xb6aa,0xb6ad,0xb6ae,0xb6af,0xb6b0,0xb6b2,
-0xb6b3,0xb6b4,0xb6b5,0xb6b6,0xb6b7,0xb6b8,0xb6b9,0xb6ba,
-0xb6bb,0xb6bc,0xb6bd,0xb6be,0xb6bf,0xb6c0,0xb6c1,0xb6c2,
-0xb6c3,0xb6c4,0xb6c5,0xb6c6,0xb6c7,0xb6c8,0xb6c9,0xb6ca,
-0xb6cb,0xb6cc,0xb6cd,0xb6ce,0xb6cf,0xb6d0,0xb6d1,0xb6d2,
-0xb6d3,0xb6d5,0xb6d6,0xb6d7,0xb6d8,0xb6d9,0xb6da,0xb6db,
-0xb6dc,0xb6dd,0xb6de,0xb6df,0xb6e0,0xb6e1,0xb6e2,0xb6e3,
-0xb6e4,0xb6e5,0xb6e6,0xb6e7,0xb6e8,0xb6e9,0xb6ea,0xb6eb,
-0xb6ec,0xb6ed,0xb6ee,0xb6ef,0xb6f1,0xb6f2,0xb6f3,0xb6f5,
-0xb6f6,0xb6f7,0xb6f9,0xb6fa,0xb6fb,0xb6fc,0xb6fd,0xb6fe,
-0xb6ff,0xb702,0xb703,0xb704,0xb706,0xb707,0xb708,0xb709,
-0xb70a,0xb70b,0xb70c,0xb70d,0xb70e,0xb70f,0xb710,0xb711,
-0xb712,0xb713,0xb714,0xb715,0xb716,0xb717,0xb718,0xb719,
-0xb71a,0xb71b,0xb71c,0xb71d,0xb71e,0xb71f,0xb720,0xb721,
-0xb722,0xb723,0xb724,0xb725,0xb726,0xb727,0xb72a,0xb72b,
-0xb72d,0xb72e,0xb731,0xb732,0xb733,0xb734,0xb735,0xb736,
-0xb737,0xb73a,0xb73c,0xb73d,0xb73e,0xb73f,0xb740,0xb741,
-0xb742,0xb743,0xb745,0xb746,0xb747,0xb749,0xb74a,0xb74b,
-0xb74d,0xb74e,0xb74f,0xb750,0xb751,0xb752,0xb753,0xb756,
-0xb757,0xb758,0xb759,0xb75a,0xb75b,0xb75c,0xb75d,0xb75e,
-0xb75f,0xb761,0xb762,0xb763,0xb765,0xb766,0xb767,0xb769,
-0xb76a,0xb76b,0xb76c,0xb76d,0xb76e,0xb76f,0xb772,0xb774,
-0xb776,0xb777,0xb778,0xb779,0xb77a,0xb77b,0xb77e,0xb77f,
-0xb781,0xb782,0xb783,0xb785,0xb786,0xb787,0xb788,0xb789,
-0xb78a,0xb78b,0xb78e,0xb793,0xb794,0xb795,0xb79a,0xb79b,
-0xb79d,0xb79e,0xb79f,0xb7a1,0xb7a2,0xb7a3,0xb7a4,0xb7a5,
-0xb7a6,0xb7a7,0xb7aa,0xb7ae,0xb7af,0xb7b0,0xb7b1,0xb7b2,
-0xb7b3,0xb7b6,0xb7b7,0xb7b9,0xb7ba,0xb7bb,0xb7bc,0xb7bd,
-0xb7be,0xb7bf,0xb7c0,0xb7c1,0xb7c2,0xb7c3,0xb7c4,0xb7c5,
-0xb7c6,0xb7c8,0xb7ca,0xb7cb,0xb7cc,0xb7cd,0xb7ce,0xb7cf,
-0xb7d0,0xb7d1,0xb7d2,0xb7d3,0xb7d4,0xb7d5,0xb7d6,0xb7d7,
-0xb7d8,0xb7d9,0xb7da,0xb7db,0xb7dc,0xb7dd,0xb7de,0xb7df,
-0xb7e0,0xb7e1,0xb7e2,0xb7e3,0xb7e4,0xb7e5,0xb7e6,0xb7e7,
-0xb7e8,0xb7e9,0xb7ea,0xb7eb,0xb7ee,0xb7ef,0xb7f1,0xb7f2,
-0xb7f3,0xb7f5,0xb7f6,0xb7f7,0xb7f8,0xb7f9,0xb7fa,0xb7fb,
-0xb7fe,0xb802,0xb803,0xb804,0xb805,0xb806,0xb80a,0xb80b,
-0xb80d,0xb80e,0xb80f,0xb811,0xb812,0xb813,0xb814,0xb815,
-0xb816,0xb817,0xb81a,0xb81c,0xb81e,0xb81f,0xb820,0xb821,
-0xb822,0xb823,0xb826,0xb827,0xb829,0xb82a,0xb82b,0xb82d,
-0xb82e,0xb82f,0xb830,0xb831,0xb832,0xb833,0xb836,0xb83a,
-0xb83b,0xb83c,0xb83d,0xb83e,0xb83f,0xb841,0xb842,0xb843,
-0xb845,0xb846,0xb847,0xb848,0xb849,0xb84a,0xb84b,0xb84c,
-0xb84d,0xb84e,0xb84f,0xb850,0xb852,0xb854,0xb855,0xb856,
-0xb857,0xb858,0xb859,0xb85a,0xb85b,0xb85e,0xb85f,0xb861,
-0xb862,0xb863,0xb865,0xb866,0xb867,0xb868,0xb869,0xb86a,
-0xb86b,0xb86e,0xb870,0xb872,0xb873,0xb874,0xb875,0xb876,
-0xb877,0xb879,0xb87a,0xb87b,0xb87d,0xb87e,0xb87f,0xb880,
-0xb881,0xb882,0xb883,0xb884,0xb885,0xb886,0xb887,0xb888,
-0xb889,0xb88a,0xb88b,0xb88c,0xb88e,0xb88f,0xb890,0xb891,
-0xb892,0xb893,0xb894,0xb895,0xb896,0xb897,0xb898,0xb899,
-0xb89a,0xb89b,0xb89c,0xb89d,0xb89e,0xb89f,0xb8a0,0xb8a1,
-0xb8a2,0xb8a3,0xb8a4,0xb8a5,0xb8a6,0xb8a7,0xb8a9,0xb8aa,
-0xb8ab,0xb8ac,0xb8ad,0xb8ae,0xb8af,0xb8b1,0xb8b2,0xb8b3,
-0xb8b5,0xb8b6,0xb8b7,0xb8b9,0xb8ba,0xb8bb,0xb8bc,0xb8bd,
-0xb8be,0xb8bf,0xb8c2,0xb8c4,0xb8c6,0xb8c7,0xb8c8,0xb8c9,
-0xb8ca,0xb8cb,0xb8cd,0xb8ce,0xb8cf,0xb8d1,0xb8d2,0xb8d3,
-0xb8d5,0xb8d6,0xb8d7,0xb8d8,0xb8d9,0xb8da,0xb8db,0xb8dc,
-0xb8de,0xb8e0,0xb8e2,0xb8e3,0xb8e4,0xb8e5,0xb8e6,0xb8e7,
-0xb8ea,0xb8eb,0xb8ed,0xb8ee,0xb8ef,0xb8f1,0xb8f2,0xb8f3,
-0xb8f4,0xb8f5,0xb8f6,0xb8f7,0xb8fa,0xb8fc,0xb8fe,0xb8ff,
-0xb900,0xb901,0xb902,0xb903,0xb905,0xb906,0xb907,0xb908,
-0xb909,0xb90a,0xb90b,0xb90c,0xb90d,0xb90e,0xb90f,0xb910,
-0xb911,0xb912,0xb913,0xb914,0xb915,0xb916,0xb917,0xb919,
-0xb91a,0xb91b,0xb91c,0xb91d,0xb91e,0xb91f,0xb921,0xb922,
-0xb923,0xb924,0xb925,0xb926,0xb927,0xb928,0xb929,0xb92a,
-0xb92b,0xb92c,0xb92d,0xb92e,0xb92f,0xb930,0xb931,0xb932,
-0xb933,0xb934,0xb935,0xb936,0xb937,0xb938,0xb939,0xb93a,
-0xb93b,0xb93e,0xb93f,0xb941,0xb942,0xb943,0xb945,0xb946,
-0xb947,0xb948,0xb949,0xb94a,0xb94b,0xb94d,0xb94e,0xb950,
-0xb952,0xb953,0xb954,0xb955,0xb956,0xb957,0xb95a,0xb95b,
-0xb95d,0xb95e,0xb95f,0xb961,0xb962,0xb963,0xb964,0xb965,
-0xb966,0xb967,0xb96a,0xb96c,0xb96e,0xb96f,0xb970,0xb971,
-0xb972,0xb973,0xb976,0xb977,0xb979,0xb97a,0xb97b,0xb97d,
-0xb97e,0xb97f,0xb980,0xb981,0xb982,0xb983,0xb986,0xb988,
-0xb98b,0xb98c,0xb98f,0xb990,0xb991,0xb992,0xb993,0xb994,
-0xb995,0xb996,0xb997,0xb998,0xb999,0xb99a,0xb99b,0xb99c,
-0xb99d,0xb99e,0xb99f,0xb9a0,0xb9a1,0xb9a2,0xb9a3,0xb9a4,
-0xb9a5,0xb9a6,0xb9a7,0xb9a8,0xb9a9,0xb9aa,0xb9ab,0xb9ae,
-0xb9af,0xb9b1,0xb9b2,0xb9b3,0xb9b5,0xb9b6,0xb9b7,0xb9b8,
-0xb9b9,0xb9ba,0xb9bb,0xb9be,0xb9c0,0xb9c2,0xb9c3,0xb9c4,
-0xb9c5,0xb9c6,0xb9c7,0xb9ca,0xb9cb,0xb9cd,0xb9d3,0xb9d4,
-0xb9d5,0xb9d6,0xb9d7,0xb9da,0xb9dc,0xb9df,0xb9e0,0xb9e2,
-0xb9e6,0xb9e7,0xb9e9,0xb9ea,0xb9eb,0xb9ed,0xb9ee,0xb9ef,
-0xb9f0,0xb9f1,0xb9f2,0xb9f3,0xb9f6,0xb9fb,0xb9fc,0xb9fd,
-0xb9fe,0xb9ff,0xba02,0xba03,0xba04,0xba05,0xba06,0xba07,
-0xba09,0xba0a,0xba0b,0xba0c,0xba0d,0xba0e,0xba0f,0xba10,
-0xba11,0xba12,0xba13,0xba14,0xba16,0xba17,0xba18,0xba19,
-0xba1a,0xba1b,0xba1c,0xba1d,0xba1e,0xba1f,0xba20,0xba21,
-0xba22,0xba23,0xba24,0xba25,0xba26,0xba27,0xba28,0xba29,
-0xba2a,0xba2b,0xba2c,0xba2d,0xba2e,0xba2f,0xba30,0xba31,
-0xba32,0xba33,0xba34,0xba35,0xba36,0xba37,0xba3a,0xba3b,
-0xba3d,0xba3e,0xba3f,0xba41,0xba43,0xba44,0xba45,0xba46,
-0xba47,0xba4a,0xba4c,0xba4f,0xba50,0xba51,0xba52,0xba56,
-0xba57,0xba59,0xba5a,0xba5b,0xba5d,0xba5e,0xba5f,0xba60,
-0xba61,0xba62,0xba63,0xba66,0xba6a,0xba6b,0xba6c,0xba6d,
-0xba6e,0xba6f,0xba72,0xba73,0xba75,0xba76,0xba77,0xba79,
-0xba7a,0xba7b,0xba7c,0xba7d,0xba7e,0xba7f,0xba80,0xba81,
-0xba82,0xba86,0xba88,0xba89,0xba8a,0xba8b,0xba8d,0xba8e,
-0xba8f,0xba90,0xba91,0xba92,0xba93,0xba94,0xba95,0xba96,
-0xba97,0xba98,0xba99,0xba9a,0xba9b,0xba9c,0xba9d,0xba9e,
-0xba9f,0xbaa0,0xbaa1,0xbaa2,0xbaa3,0xbaa4,0xbaa5,0xbaa6,
-0xbaa7,0xbaaa,0xbaad,0xbaae,0xbaaf,0xbab1,0xbab3,0xbab4,
-0xbab5,0xbab6,0xbab7,0xbaba,0xbabc,0xbabe,0xbabf,0xbac0,
-0xbac1,0xbac2,0xbac3,0xbac5,0xbac6,0xbac7,0xbac9,0xbaca,
-0xbacb,0xbacc,0xbacd,0xbace,0xbacf,0xbad0,0xbad1,0xbad2,
-0xbad3,0xbad4,0xbad5,0xbad6,0xbad7,0xbada,0xbadb,0xbadc,
-0xbadd,0xbade,0xbadf,0xbae0,0xbae1,0xbae2,0xbae3,0xbae4,
-0xbae5,0xbae6,0xbae7,0xbae8,0xbae9,0xbaea,0xbaeb,0xbaec,
-0xbaed,0xbaee,0xbaef,0xbaf0,0xbaf1,0xbaf2,0xbaf3,0xbaf4,
-0xbaf5,0xbaf6,0xbaf7,0xbaf8,0xbaf9,0xbafa,0xbafb,0xbafd,
-0xbafe,0xbaff,0xbb01,0xbb02,0xbb03,0xbb05,0xbb06,0xbb07,
-0xbb08,0xbb09,0xbb0a,0xbb0b,0xbb0c,0xbb0e,0xbb10,0xbb12,
-0xbb13,0xbb14,0xbb15,0xbb16,0xbb17,0xbb19,0xbb1a,0xbb1b,
-0xbb1d,0xbb1e,0xbb1f,0xbb21,0xbb22,0xbb23,0xbb24,0xbb25,
-0xbb26,0xbb27,0xbb28,0xbb2a,0xbb2c,0xbb2d,0xbb2e,0xbb2f,
-0xbb30,0xbb31,0xbb32,0xbb33,0xbb37,0xbb39,0xbb3a,0xbb3f,
-0xbb40,0xbb41,0xbb42,0xbb43,0xbb46,0xbb48,0xbb4a,0xbb4b,
-0xbb4c,0xbb4e,0xbb51,0xbb52,0xbb53,0xbb55,0xbb56,0xbb57,
-0xbb59,0xbb5a,0xbb5b,0xbb5c,0xbb5d,0xbb5e,0xbb5f,0xbb60,
-0xbb62,0xbb64,0xbb65,0xbb66,0xbb67,0xbb68,0xbb69,0xbb6a,
-0xbb6b,0xbb6d,0xbb6e,0xbb6f,0xbb70,0xbb71,0xbb72,0xbb73,
-0xbb74,0xbb75,0xbb76,0xbb77,0xbb78,0xbb79,0xbb7a,0xbb7b,
-0xbb7c,0xbb7d,0xbb7e,0xbb7f,0xbb80,0xbb81,0xbb82,0xbb83,
-0xbb84,0xbb85,0xbb86,0xbb87,0xbb89,0xbb8a,0xbb8b,0xbb8d,
-0xbb8e,0xbb8f,0xbb91,0xbb92,0xbb93,0xbb94,0xbb95,0xbb96,
-0xbb97,0xbb98,0xbb99,0xbb9a,0xbb9b,0xbb9c,0xbb9d,0xbb9e,
-0xbb9f,0xbba0,0xbba1,0xbba2,0xbba3,0xbba5,0xbba6,0xbba7,
-0xbba9,0xbbaa,0xbbab,0xbbad,0xbbae,0xbbaf,0xbbb0,0xbbb1,
-0xbbb2,0xbbb3,0xbbb5,0xbbb6,0xbbb8,0xbbb9,0xbbba,0xbbbb,
-0xbbbc,0xbbbd,0xbbbe,0xbbbf,0xbbc1,0xbbc2,0xbbc3,0xbbc5,
-0xbbc6,0xbbc7,0xbbc9,0xbbca,0xbbcb,0xbbcc,0xbbcd,0xbbce,
-0xbbcf,0xbbd1,0xbbd2,0xbbd4,0xbbd5,0xbbd6,0xbbd7,0xbbd8,
-0xbbd9,0xbbda,0xbbdb,0xbbdc,0xbbdd,0xbbde,0xbbdf,0xbbe0,
-0xbbe1,0xbbe2,0xbbe3,0xbbe4,0xbbe5,0xbbe6,0xbbe7,0xbbe8,
-0xbbe9,0xbbea,0xbbeb,0xbbec,0xbbed,0xbbee,0xbbef,0xbbf0,
-0xbbf1,0xbbf2,0xbbf3,0xbbf4,0xbbf5,0xbbf6,0xbbf7,0xbbfa,
-0xbbfb,0xbbfd,0xbbfe,0xbc01,0xbc03,0xbc04,0xbc05,0xbc06,
-0xbc07,0xbc0a,0xbc0e,0xbc10,0xbc12,0xbc13,0xbc19,0xbc1a,
-0xbc20,0xbc21,0xbc22,0xbc23,0xbc26,0xbc28,0xbc2a,0xbc2b,
-0xbc2c,0xbc2e,0xbc2f,0xbc32,0xbc33,0xbc35,0xbc36,0xbc37,
-0xbc39,0xbc3a,0xbc3b,0xbc3c,0xbc3d,0xbc3e,0xbc3f,0xbc42,
-0xbc46,0xbc47,0xbc48,0xbc4a,0xbc4b,0xbc4e,0xbc4f,0xbc51,
-0xbc52,0xbc53,0xbc54,0xbc55,0xbc56,0xbc57,0xbc58,0xbc59,
-0xbc5a,0xbc5b,0xbc5c,0xbc5e,0xbc5f,0xbc60,0xbc61,0xbc62,
-0xbc63,0xbc64,0xbc65,0xbc66,0xbc67,0xbc68,0xbc69,0xbc6a,
-0xbc6b,0xbc6c,0xbc6d,0xbc6e,0xbc6f,0xbc70,0xbc71,0xbc72,
-0xbc73,0xbc74,0xbc75,0xbc76,0xbc77,0xbc78,0xbc79,0xbc7a,
-0xbc7b,0xbc7c,0xbc7d,0xbc7e,0xbc7f,0xbc80,0xbc81,0xbc82,
-0xbc83,0xbc86,0xbc87,0xbc89,0xbc8a,0xbc8d,0xbc8f,0xbc90,
-0xbc91,0xbc92,0xbc93,0xbc96,0xbc98,0xbc9b,0xbc9c,0xbc9d,
-0xbc9e,0xbc9f,0xbca2,0xbca3,0xbca5,0xbca6,0xbca9,0xbcaa,
-0xbcab,0xbcac,0xbcad,0xbcae,0xbcaf,0xbcb2,0xbcb6,0xbcb7,
-0xbcb8,0xbcb9,0xbcba,0xbcbb,0xbcbe,0xbcbf,0xbcc1,0xbcc2,
-0xbcc3,0xbcc5,0xbcc6,0xbcc7,0xbcc8,0xbcc9,0xbcca,0xbccb,
-0xbccc,0xbcce,0xbcd2,0xbcd3,0xbcd4,0xbcd6,0xbcd7,0xbcd9,
-0xbcda,0xbcdb,0xbcdd,0xbcde,0xbcdf,0xbce0,0xbce1,0xbce2,
-0xbce3,0xbce4,0xbce5,0xbce6,0xbce7,0xbce8,0xbce9,0xbcea,
-0xbceb,0xbcec,0xbced,0xbcee,0xbcef,0xbcf0,0xbcf1,0xbcf2,
-0xbcf3,0xbcf7,0xbcf9,0xbcfa,0xbcfb,0xbcfd,0xbcfe,0xbcff,
-0xbd00,0xbd01,0xbd02,0xbd03,0xbd06,0xbd08,0xbd0a,0xbd0b,
-0xbd0c,0xbd0d,0xbd0e,0xbd0f,0xbd11,0xbd12,0xbd13,0xbd15,
-0xbd16,0xbd17,0xbd18,0xbd19,0xbd1a,0xbd1b,0xbd1c,0xbd1d,
-0xbd1e,0xbd1f,0xbd20,0xbd21,0xbd22,0xbd23,0xbd25,0xbd26,
-0xbd27,0xbd28,0xbd29,0xbd2a,0xbd2b,0xbd2d,0xbd2e,0xbd2f,
-0xbd30,0xbd31,0xbd32,0xbd33,0xbd34,0xbd35,0xbd36,0xbd37,
-0xbd38,0xbd39,0xbd3a,0xbd3b,0xbd3c,0xbd3d,0xbd3e,0xbd3f,
-0xbd41,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd4a,
-0xbd4b,0xbd4d,0xbd4e,0xbd4f,0xbd51,0xbd52,0xbd53,0xbd54,
-0xbd55,0xbd56,0xbd57,0xbd5a,0xbd5b,0xbd5c,0xbd5d,0xbd5e,
-0xbd5f,0xbd60,0xbd61,0xbd62,0xbd63,0xbd65,0xbd66,0xbd67,
-0xbd69,0xbd6a,0xbd6b,0xbd6c,0xbd6d,0xbd6e,0xbd6f,0xbd70,
-0xbd71,0xbd72,0xbd73,0xbd74,0xbd75,0xbd76,0xbd77,0xbd78,
-0xbd79,0xbd7a,0xbd7b,0xbd7c,0xbd7d,0xbd7e,0xbd7f,0xbd82,
-0xbd83,0xbd85,0xbd86,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,
-0xbd92,0xbd94,0xbd96,0xbd97,0xbd98,0xbd9b,0xbd9d,0xbd9e,
-0xbd9f,0xbda0,0xbda1,0xbda2,0xbda3,0xbda5,0xbda6,0xbda7,
-0xbda8,0xbda9,0xbdaa,0xbdab,0xbdac,0xbdad,0xbdae,0xbdaf,
-0xbdb1,0xbdb2,0xbdb3,0xbdb4,0xbdb5,0xbdb6,0xbdb7,0xbdb9,
-0xbdba,0xbdbb,0xbdbc,0xbdbd,0xbdbe,0xbdbf,0xbdc0,0xbdc1,
-0xbdc2,0xbdc3,0xbdc4,0xbdc5,0xbdc6,0xbdc7,0xbdc8,0xbdc9,
-0xbdca,0xbdcb,0xbdcc,0xbdcd,0xbdce,0xbdcf,0xbdd0,0xbdd1,
-0xbdd2,0xbdd3,0xbdd6,0xbdd7,0xbdd9,0xbdda,0xbddb,0xbddd,
-0xbdde,0xbddf,0xbde0,0xbde1,0xbde2,0xbde3,0xbde4,0xbde5,
-0xbde6,0xbde7,0xbde8,0xbdea,0xbdeb,0xbdec,0xbded,0xbdee,
-0xbdef,0xbdf1,0xbdf2,0xbdf3,0xbdf5,0xbdf6,0xbdf7,0xbdf9,
-0xbdfa,0xbdfb,0xbdfc,0xbdfd,0xbdfe,0xbdff,0xbe01,0xbe02,
-0xbe04,0xbe06,0xbe07,0xbe08,0xbe09,0xbe0a,0xbe0b,0xbe0e,
-0xbe0f,0xbe11,0xbe12,0xbe13,0xbe15,0xbe16,0xbe17,0xbe18,
-0xbe19,0xbe1a,0xbe1b,0xbe1e,0xbe20,0xbe21,0xbe22,0xbe23,
-0xbe24,0xbe25,0xbe26,0xbe27,0xbe28,0xbe29,0xbe2a,0xbe2b,
-0xbe2c,0xbe2d,0xbe2e,0xbe2f,0xbe30,0xbe31,0xbe32,0xbe33,
-0xbe34,0xbe35,0xbe36,0xbe37,0xbe38,0xbe39,0xbe3a,0xbe3b,
-0xbe3c,0xbe3d,0xbe3e,0xbe3f,0xbe40,0xbe41,0xbe42,0xbe43,
-0xbe46,0xbe47,0xbe49,0xbe4a,0xbe4b,0xbe4d,0xbe4f,0xbe50,
-0xbe51,0xbe52,0xbe53,0xbe56,0xbe58,0xbe5c,0xbe5d,0xbe5e,
-0xbe5f,0xbe62,0xbe63,0xbe65,0xbe66,0xbe67,0xbe69,0xbe6b,
-0xbe6c,0xbe6d,0xbe6e,0xbe6f,0xbe72,0xbe76,0xbe77,0xbe78,
-0xbe79,0xbe7a,0xbe7e,0xbe7f,0xbe81,0xbe82,0xbe83,0xbe85,
-0xbe86,0xbe87,0xbe88,0xbe89,0xbe8a,0xbe8b,0xbe8e,0xbe92,
-0xbe93,0xbe94,0xbe95,0xbe96,0xbe97,0xbe9a,0xbe9b,0xbe9c,
-0xbe9d,0xbe9e,0xbe9f,0xbea0,0xbea1,0xbea2,0xbea3,0xbea4,
-0xbea5,0xbea6,0xbea7,0xbea9,0xbeaa,0xbeab,0xbeac,0xbead,
-0xbeae,0xbeaf,0xbeb0,0xbeb1,0xbeb2,0xbeb3,0xbeb4,0xbeb5,
-0xbeb6,0xbeb7,0xbeb8,0xbeb9,0xbeba,0xbebb,0xbebc,0xbebd,
-0xbebe,0xbebf,0xbec0,0xbec1,0xbec2,0xbec3,0xbec4,0xbec5,
-0xbec6,0xbec7,0xbec8,0xbec9,0xbeca,0xbecb,0xbecc,0xbecd,
-0xbece,0xbecf,0xbed2,0xbed3,0xbed5,0xbed6,0xbed9,0xbeda,
-0xbedb,0xbedc,0xbedd,0xbede,0xbedf,0xbee1,0xbee2,0xbee6,
-0xbee7,0xbee8,0xbee9,0xbeea,0xbeeb,0xbeed,0xbeee,0xbeef,
-0xbef0,0xbef1,0xbef2,0xbef3,0xbef4,0xbef5,0xbef6,0xbef7,
-0xbef8,0xbef9,0xbefa,0xbefb,0xbefc,0xbefd,0xbefe,0xbeff,
-0xbf00,0xbf02,0xbf03,0xbf04,0xbf05,0xbf06,0xbf07,0xbf0a,
-0xbf0b,0xbf0c,0xbf0d,0xbf0e,0xbf0f,0xbf10,0xbf11,0xbf12,
-0xbf13,0xbf14,0xbf15,0xbf16,0xbf17,0xbf1a,0xbf1e,0xbf1f,
-0xbf20,0xbf21,0xbf22,0xbf23,0xbf24,0xbf25,0xbf26,0xbf27,
-0xbf28,0xbf29,0xbf2a,0xbf2b,0xbf2c,0xbf2d,0xbf2e,0xbf2f,
-0xbf30,0xbf31,0xbf32,0xbf33,0xbf34,0xbf35,0xbf36,0xbf37,
-0xbf38,0xbf39,0xbf3a,0xbf3b,0xbf3c,0xbf3d,0xbf3e,0xbf3f,
-0xbf42,0xbf43,0xbf45,0xbf46,0xbf47,0xbf49,0xbf4a,0xbf4b,
-0xbf4c,0xbf4d,0xbf4e,0xbf4f,0xbf52,0xbf53,0xbf54,0xbf56,
-0xbf57,0xbf58,0xbf59,0xbf5a,0xbf5b,0xbf5c,0xbf5d,0xbf5e,
-0xbf5f,0xbf60,0xbf61,0xbf62,0xbf63,0xbf64,0xbf65,0xbf66,
-0xbf67,0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,0xbf6d,0xbf6e,
-0xbf6f,0xbf70,0xbf71,0xbf72,0xbf73,0xbf74,0xbf75,0xbf76,
-0xbf77,0xbf78,0xbf79,0xbf7a,0xbf7b,0xbf7c,0xbf7d,0xbf7e,
-0xbf7f,0xbf80,0xbf81,0xbf82,0xbf83,0xbf84,0xbf85,0xbf86,
-0xbf87,0xbf88,0xbf89,0xbf8a,0xbf8b,0xbf8c,0xbf8d,0xbf8e,
-0xbf8f,0xbf90,0xbf91,0xbf92,0xbf93,0xbf95,0xbf96,0xbf97,
-0xbf98,0xbf99,0xbf9a,0xbf9b,0xbf9c,0xbf9d,0xbf9e,0xbf9f,
-0xbfa0,0xbfa1,0xbfa2,0xbfa3,0xbfa4,0xbfa5,0xbfa6,0xbfa7,
-0xbfa8,0xbfa9,0xbfaa,0xbfab,0xbfac,0xbfad,0xbfae,0xbfaf,
-0xbfb1,0xbfb2,0xbfb3,0xbfb4,0xbfb5,0xbfb6,0xbfb7,0xbfb8,
-0xbfb9,0xbfba,0xbfbb,0xbfbc,0xbfbd,0xbfbe,0xbfbf,0xbfc0,
-0xbfc1,0xbfc2,0xbfc3,0xbfc4,0xbfc6,0xbfc7,0xbfc8,0xbfc9,
-0xbfca,0xbfcb,0xbfce,0xbfcf,0xbfd1,0xbfd2,0xbfd3,0xbfd5,
-0xbfd6,0xbfd7,0xbfd8,0xbfd9,0xbfda,0xbfdb,0xbfdd,0xbfde,
-0xbfe0,0xbfe2,0xbfe3,0xbfe4,0xbfe5,0xbfe6,0xbfe7,0xbfe8,
-0xbfe9,0xbfea,0xbfeb,0xbfec,0xbfed,0xbfee,0xbfef,0xbff0,
-0xbff1,0xbff2,0xbff3,0xbff4,0xbff5,0xbff6,0xbff7,0xbff8,
-0xbff9,0xbffa,0xbffb,0xbffc,0xbffd,0xbffe,0xbfff,0xc000,
-0xc001,0xc002,0xc003,0xc004,0xc005,0xc006,0xc007,0xc008,
-0xc009,0xc00a,0xc00b,0xc00c,0xc00d,0xc00e,0xc00f,0xc010,
-0xc011,0xc012,0xc013,0xc014,0xc015,0xc016,0xc017,0xc018,
-0xc019,0xc01a,0xc01b,0xc01c,0xc01d,0xc01e,0xc01f,0xc020,
-0xc021,0xc022,0xc023,0xc024,0xc025,0xc026,0xc027,0xc028,
-0xc029,0xc02a,0xc02b,0xc02c,0xc02d,0xc02e,0xc02f,0xc030,
-0xc031,0xc032,0xc033,0xc034,0xc035,0xc036,0xc037,0xc038,
-0xc039,0xc03a,0xc03b,0xc03d,0xc03e,0xc03f,0xc040,0xc041,
-0xc042,0xc043,0xc044,0xc045,0xc046,0xc047,0xc048,0xc049,
-0xc04a,0xc04b,0xc04c,0xc04d,0xc04e,0xc04f,0xc050,0xc052,
-0xc053,0xc054,0xc055,0xc056,0xc057,0xc059,0xc05a,0xc05b,
-0xc05d,0xc05e,0xc05f,0xc061,0xc062,0xc063,0xc064,0xc065,
-0xc066,0xc067,0xc06a,0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,
-0xc070,0xc071,0xc072,0xc073,0xc074,0xc075,0xc076,0xc077,
-0xc078,0xc079,0xc07a,0xc07b,0xc07c,0xc07d,0xc07e,0xc07f,
-0xc080,0xc081,0xc082,0xc083,0xc084,0xc085,0xc086,0xc087,
-0xc088,0xc089,0xc08a,0xc08b,0xc08c,0xc08d,0xc08e,0xc08f,
-0xc092,0xc093,0xc095,0xc096,0xc097,0xc099,0xc09a,0xc09b,
-0xc09c,0xc09d,0xc09e,0xc09f,0xc0a2,0xc0a4,0xc0a6,0xc0a7,
-0xc0a8,0xc0a9,0xc0aa,0xc0ab,0xc0ae,0xc0b1,0xc0b2,0xc0b7,
-0xc0b8,0xc0b9,0xc0ba,0xc0bb,0xc0be,0xc0c2,0xc0c3,0xc0c4,
-0xc0c6,0xc0c7,0xc0ca,0xc0cb,0xc0cd,0xc0ce,0xc0cf,0xc0d1,
-0xc0d2,0xc0d3,0xc0d4,0xc0d5,0xc0d6,0xc0d7,0xc0da,0xc0de,
-0xc0df,0xc0e0,0xc0e1,0xc0e2,0xc0e3,0xc0e6,0xc0e7,0xc0e9,
-0xc0ea,0xc0eb,0xc0ed,0xc0ee,0xc0ef,0xc0f0,0xc0f1,0xc0f2,
-0xc0f3,0xc0f6,0xc0f8,0xc0fa,0xc0fb,0xc0fc,0xc0fd,0xc0fe,
-0xc0ff,0xc101,0xc102,0xc103,0xc105,0xc106,0xc107,0xc109,
-0xc10a,0xc10b,0xc10c,0xc10d,0xc10e,0xc10f,0xc111,0xc112,
-0xc113,0xc114,0xc116,0xc117,0xc118,0xc119,0xc11a,0xc11b,
-0xc121,0xc122,0xc125,0xc128,0xc129,0xc12a,0xc12b,0xc12e,
-0xc132,0xc133,0xc134,0xc135,0xc137,0xc13a,0xc13b,0xc13d,
-0xc13e,0xc13f,0xc141,0xc142,0xc143,0xc144,0xc145,0xc146,
-0xc147,0xc14a,0xc14e,0xc14f,0xc150,0xc151,0xc152,0xc153,
-0xc156,0xc157,0xc159,0xc15a,0xc15b,0xc15d,0xc15e,0xc15f,
-0xc160,0xc161,0xc162,0xc163,0xc166,0xc16a,0xc16b,0xc16c,
-0xc16d,0xc16e,0xc16f,0xc171,0xc172,0xc173,0xc175,0xc176,
-0xc177,0xc179,0xc17a,0xc17b,0xc17c,0xc17d,0xc17e,0xc17f,
-0xc180,0xc181,0xc182,0xc183,0xc184,0xc186,0xc187,0xc188,
-0xc189,0xc18a,0xc18b,0xc18f,0xc191,0xc192,0xc193,0xc195,
-0xc197,0xc198,0xc199,0xc19a,0xc19b,0xc19e,0xc1a0,0xc1a2,
-0xc1a3,0xc1a4,0xc1a6,0xc1a7,0xc1aa,0xc1ab,0xc1ad,0xc1ae,
-0xc1af,0xc1b1,0xc1b2,0xc1b3,0xc1b4,0xc1b5,0xc1b6,0xc1b7,
-0xc1b8,0xc1b9,0xc1ba,0xc1bb,0xc1bc,0xc1be,0xc1bf,0xc1c0,
-0xc1c1,0xc1c2,0xc1c3,0xc1c5,0xc1c6,0xc1c7,0xc1c9,0xc1ca,
-0xc1cb,0xc1cd,0xc1ce,0xc1cf,0xc1d0,0xc1d1,0xc1d2,0xc1d3,
-0xc1d5,0xc1d6,0xc1d9,0xc1da,0xc1db,0xc1dc,0xc1dd,0xc1de,
-0xc1df,0xc1e1,0xc1e2,0xc1e3,0xc1e5,0xc1e6,0xc1e7,0xc1e9,
-0xc1ea,0xc1eb,0xc1ec,0xc1ed,0xc1ee,0xc1ef,0xc1f2,0xc1f4,
-0xc1f5,0xc1f6,0xc1f7,0xc1f8,0xc1f9,0xc1fa,0xc1fb,0xc1fe,
-0xc1ff,0xc201,0xc202,0xc203,0xc205,0xc206,0xc207,0xc208,
-0xc209,0xc20a,0xc20b,0xc20e,0xc210,0xc212,0xc213,0xc214,
-0xc215,0xc216,0xc217,0xc21a,0xc21b,0xc21d,0xc21e,0xc221,
-0xc222,0xc223,0xc224,0xc225,0xc226,0xc227,0xc22a,0xc22c,
-0xc22e,0xc230,0xc233,0xc235,0xc236,0xc237,0xc238,0xc239,
-0xc23a,0xc23b,0xc23c,0xc23d,0xc23e,0xc23f,0xc240,0xc241,
-0xc242,0xc243,0xc244,0xc245,0xc246,0xc247,0xc249,0xc24a,
-0xc24b,0xc24c,0xc24d,0xc24e,0xc24f,0xc252,0xc253,0xc255,
-0xc256,0xc257,0xc259,0xc25a,0xc25b,0xc25c,0xc25d,0xc25e,
-0xc25f,0xc261,0xc262,0xc263,0xc264,0xc266,0xc267,0xc268,
-0xc269,0xc26a,0xc26b,0xc26e,0xc26f,0xc271,0xc272,0xc273,
-0xc275,0xc276,0xc277,0xc278,0xc279,0xc27a,0xc27b,0xc27e,
-0xc280,0xc282,0xc283,0xc284,0xc285,0xc286,0xc287,0xc28a,
-0xc28b,0xc28c,0xc28d,0xc28e,0xc28f,0xc291,0xc292,0xc293,
-0xc294,0xc295,0xc296,0xc297,0xc299,0xc29a,0xc29c,0xc29e,
-0xc29f,0xc2a0,0xc2a1,0xc2a2,0xc2a3,0xc2a6,0xc2a7,0xc2a9,
-0xc2aa,0xc2ab,0xc2ae,0xc2af,0xc2b0,0xc2b1,0xc2b2,0xc2b3,
-0xc2b6,0xc2b8,0xc2ba,0xc2bb,0xc2bc,0xc2bd,0xc2be,0xc2bf,
-0xc2c0,0xc2c1,0xc2c2,0xc2c3,0xc2c4,0xc2c5,0xc2c6,0xc2c7,
-0xc2c8,0xc2c9,0xc2ca,0xc2cb,0xc2cc,0xc2cd,0xc2ce,0xc2cf,
-0xc2d0,0xc2d1,0xc2d2,0xc2d3,0xc2d4,0xc2d5,0xc2d6,0xc2d7,
-0xc2d8,0xc2d9,0xc2da,0xc2db,0xc2de,0xc2df,0xc2e1,0xc2e2,
-0xc2e5,0xc2e6,0xc2e7,0xc2e8,0xc2e9,0xc2ea,0xc2ee,0xc2f0,
-0xc2f2,0xc2f3,0xc2f4,0xc2f5,0xc2f7,0xc2fa,0xc2fd,0xc2fe,
-0xc2ff,0xc301,0xc302,0xc303,0xc304,0xc305,0xc306,0xc307,
-0xc30a,0xc30b,0xc30e,0xc30f,0xc310,0xc311,0xc312,0xc316,
-0xc317,0xc319,0xc31a,0xc31b,0xc31d,0xc31e,0xc31f,0xc320,
-0xc321,0xc322,0xc323,0xc326,0xc327,0xc32a,0xc32b,0xc32c,
-0xc32d,0xc32e,0xc32f,0xc330,0xc331,0xc332,0xc333,0xc334,
-0xc335,0xc336,0xc337,0xc338,0xc339,0xc33a,0xc33b,0xc33c,
-0xc33d,0xc33e,0xc33f,0xc340,0xc341,0xc342,0xc343,0xc344,
-0xc346,0xc347,0xc348,0xc349,0xc34a,0xc34b,0xc34c,0xc34d,
-0xc34e,0xc34f,0xc350,0xc351,0xc352,0xc353,0xc354,0xc355,
-0xc356,0xc357,0xc358,0xc359,0xc35a,0xc35b,0xc35c,0xc35d,
-0xc35e,0xc35f,0xc360,0xc361,0xc362,0xc363,0xc364,0xc365,
-0xc366,0xc367,0xc36a,0xc36b,0xc36d,0xc36e,0xc36f,0xc371,
-0xc373,0xc374,0xc375,0xc376,0xc377,0xc37a,0xc37b,0xc37e,
-0xc37f,0xc380,0xc381,0xc382,0xc383,0xc385,0xc386,0xc387,
-0xc389,0xc38a,0xc38b,0xc38d,0xc38e,0xc38f,0xc390,0xc391,
-0xc392,0xc393,0xc394,0xc395,0xc396,0xc397,0xc398,0xc399,
-0xc39a,0xc39b,0xc39c,0xc39d,0xc39e,0xc39f,0xc3a0,0xc3a1,
-0xc3a2,0xc3a3,0xc3a4,0xc3a5,0xc3a6,0xc3a7,0xc3a8,0xc3a9,
-0xc3aa,0xc3ab,0xc3ac,0xc3ad,0xc3ae,0xc3af,0xc3b0,0xc3b1,
-0xc3b2,0xc3b3,0xc3b4,0xc3b5,0xc3b6,0xc3b7,0xc3b8,0xc3b9,
-0xc3ba,0xc3bb,0xc3bc,0xc3bd,0xc3be,0xc3bf,0xc3c1,0xc3c2,
-0xc3c3,0xc3c4,0xc3c5,0xc3c6,0xc3c7,0xc3c8,0xc3c9,0xc3ca,
-0xc3cb,0xc3cc,0xc3cd,0xc3ce,0xc3cf,0xc3d0,0xc3d1,0xc3d2,
-0xc3d3,0xc3d4,0xc3d5,0xc3d6,0xc3d7,0xc3da,0xc3db,0xc3dd,
-0xc3de,0xc3e1,0xc3e3,0xc3e4,0xc3e5,0xc3e6,0xc3e7,0xc3ea,
-0xc3eb,0xc3ec,0xc3ee,0xc3ef,0xc3f0,0xc3f1,0xc3f2,0xc3f3,
-0xc3f6,0xc3f7,0xc3f9,0xc3fa,0xc3fb,0xc3fc,0xc3fd,0xc3fe,
-0xc3ff,0xc400,0xc401,0xc402,0xc403,0xc404,0xc405,0xc406,
-0xc407,0xc409,0xc40a,0xc40b,0xc40c,0xc40d,0xc40e,0xc40f,
-0xc411,0xc412,0xc413,0xc414,0xc415,0xc416,0xc417,0xc418,
-0xc419,0xc41a,0xc41b,0xc41c,0xc41d,0xc41e,0xc41f,0xc420,
-0xc421,0xc422,0xc423,0xc425,0xc426,0xc427,0xc428,0xc429,
-0xc42a,0xc42b,0xc42d,0xc42e,0xc42f,0xc431,0xc432,0xc433,
-0xc435,0xc436,0xc437,0xc438,0xc439,0xc43a,0xc43b,0xc43e,
-0xc43f,0xc440,0xc441,0xc442,0xc443,0xc444,0xc445,0xc446,
-0xc447,0xc449,0xc44a,0xc44b,0xc44c,0xc44d,0xc44e,0xc44f,
-0xc450,0xc451,0xc452,0xc453,0xc454,0xc455,0xc456,0xc457,
-0xc458,0xc459,0xc45a,0xc45b,0xc45c,0xc45d,0xc45e,0xc45f,
-0xc460,0xc461,0xc462,0xc463,0xc466,0xc467,0xc469,0xc46a,
-0xc46b,0xc46d,0xc46e,0xc46f,0xc470,0xc471,0xc472,0xc473,
-0xc476,0xc477,0xc478,0xc47a,0xc47b,0xc47c,0xc47d,0xc47e,
-0xc47f,0xc481,0xc482,0xc483,0xc484,0xc485,0xc486,0xc487,
-0xc488,0xc489,0xc48a,0xc48b,0xc48c,0xc48d,0xc48e,0xc48f,
-0xc490,0xc491,0xc492,0xc493,0xc495,0xc496,0xc497,0xc498,
-0xc499,0xc49a,0xc49b,0xc49d,0xc49e,0xc49f,0xc4a0,0xc4a1,
-0xc4a2,0xc4a3,0xc4a4,0xc4a5,0xc4a6,0xc4a7,0xc4a8,0xc4a9,
-0xc4aa,0xc4ab,0xc4ac,0xc4ad,0xc4ae,0xc4af,0xc4b0,0xc4b1,
-0xc4b2,0xc4b3,0xc4b4,0xc4b5,0xc4b6,0xc4b7,0xc4b9,0xc4ba,
-0xc4bb,0xc4bd,0xc4be,0xc4bf,0xc4c0,0xc4c1,0xc4c2,0xc4c3,
-0xc4c4,0xc4c5,0xc4c6,0xc4c7,0xc4c8,0xc4c9,0xc4ca,0xc4cb,
-0xc4cc,0xc4cd,0xc4ce,0xc4cf,0xc4d0,0xc4d1,0xc4d2,0xc4d3,
-0xc4d4,0xc4d5,0xc4d6,0xc4d7,0xc4d8,0xc4d9,0xc4da,0xc4db,
-0xc4dc,0xc4dd,0xc4de,0xc4df,0xc4e0,0xc4e1,0xc4e2,0xc4e3,
-0xc4e4,0xc4e5,0xc4e6,0xc4e7,0xc4e8,0xc4ea,0xc4eb,0xc4ec,
-0xc4ed,0xc4ee,0xc4ef,0xc4f2,0xc4f3,0xc4f5,0xc4f6,0xc4f7,
-0xc4f9,0xc4fb,0xc4fc,0xc4fd,0xc4fe,0xc502,0xc503,0xc504,
-0xc505,0xc506,0xc507,0xc508,0xc509,0xc50a,0xc50b,0xc50d,
-0xc50e,0xc50f,0xc511,0xc512,0xc513,0xc515,0xc516,0xc517,
-0xc518,0xc519,0xc51a,0xc51b,0xc51d,0xc51e,0xc51f,0xc520,
-0xc521,0xc522,0xc523,0xc524,0xc525,0xc526,0xc527,0xc52a,
-0xc52b,0xc52d,0xc52e,0xc52f,0xc531,0xc532,0xc533,0xc534,
-0xc535,0xc536,0xc537,0xc53a,0xc53c,0xc53e,0xc53f,0xc540,
-0xc541,0xc542,0xc543,0xc546,0xc547,0xc54b,0xc54f,0xc550,
-0xc551,0xc552,0xc556,0xc55a,0xc55b,0xc55c,0xc55f,0xc562,
-0xc563,0xc565,0xc566,0xc567,0xc569,0xc56a,0xc56b,0xc56c,
-0xc56d,0xc56e,0xc56f,0xc572,0xc576,0xc577,0xc578,0xc579,
-0xc57a,0xc57b,0xc57e,0xc57f,0xc581,0xc582,0xc583,0xc585,
-0xc586,0xc588,0xc589,0xc58a,0xc58b,0xc58e,0xc590,0xc592,
-0xc593,0xc594,0xc596,0xc599,0xc59a,0xc59b,0xc59d,0xc59e,
-0xc59f,0xc5a1,0xc5a2,0xc5a3,0xc5a4,0xc5a5,0xc5a6,0xc5a7,
-0xc5a8,0xc5aa,0xc5ab,0xc5ac,0xc5ad,0xc5ae,0xc5af,0xc5b0,
-0xc5b1,0xc5b2,0xc5b3,0xc5b6,0xc5b7,0xc5ba,0xc5bf,0xc5c0,
-0xc5c1,0xc5c2,0xc5c3,0xc5cb,0xc5cd,0xc5cf,0xc5d2,0xc5d3,
-0xc5d5,0xc5d6,0xc5d7,0xc5d9,0xc5da,0xc5db,0xc5dc,0xc5dd,
-0xc5de,0xc5df,0xc5e2,0xc5e4,0xc5e6,0xc5e7,0xc5e8,0xc5e9,
-0xc5ea,0xc5eb,0xc5ef,0xc5f1,0xc5f2,0xc5f3,0xc5f5,0xc5f8,
-0xc5f9,0xc5fa,0xc5fb,0xc602,0xc603,0xc604,0xc609,0xc60a,
-0xc60b,0xc60d,0xc60e,0xc60f,0xc611,0xc612,0xc613,0xc614,
-0xc615,0xc616,0xc617,0xc61a,0xc61d,0xc61e,0xc61f,0xc620,
-0xc621,0xc622,0xc623,0xc626,0xc627,0xc629,0xc62a,0xc62b,
-0xc62f,0xc631,0xc632,0xc636,0xc638,0xc63a,0xc63c,0xc63d,
-0xc63e,0xc63f,0xc642,0xc643,0xc645,0xc646,0xc647,0xc649,
-0xc64a,0xc64b,0xc64c,0xc64d,0xc64e,0xc64f,0xc652,0xc656,
-0xc657,0xc658,0xc659,0xc65a,0xc65b,0xc65e,0xc65f,0xc661,
-0xc662,0xc663,0xc664,0xc665,0xc666,0xc667,0xc668,0xc669,
-0xc66a,0xc66b,0xc66d,0xc66e,0xc670,0xc672,0xc673,0xc674,
-0xc675,0xc676,0xc677,0xc67a,0xc67b,0xc67d,0xc67e,0xc67f,
-0xc681,0xc682,0xc683,0xc684,0xc685,0xc686,0xc687,0xc68a,
-0xc68c,0xc68e,0xc68f,0xc690,0xc691,0xc692,0xc693,0xc696,
-0xc697,0xc699,0xc69a,0xc69b,0xc69d,0xc69e,0xc69f,0xc6a0,
-0xc6a1,0xc6a2,0xc6a3,0xc6a6,0xc6a8,0xc6aa,0xc6ab,0xc6ac,
-0xc6ad,0xc6ae,0xc6af,0xc6b2,0xc6b3,0xc6b5,0xc6b6,0xc6b7,
-0xc6bb,0xc6bc,0xc6bd,0xc6be,0xc6bf,0xc6c2,0xc6c4,0xc6c6,
-0xc6c7,0xc6c8,0xc6c9,0xc6ca,0xc6cb,0xc6ce,0xc6cf,0xc6d1,
-0xc6d2,0xc6d3,0xc6d5,0xc6d6,0xc6d7,0xc6d8,0xc6d9,0xc6da,
-0xc6db,0xc6de,0xc6df,0xc6e2,0xc6e3,0xc6e4,0xc6e5,0xc6e6,
-0xc6e7,0xc6ea,0xc6eb,0xc6ed,0xc6ee,0xc6ef,0xc6f1,0xc6f2,
-0xc6f3,0xc6f4,0xc6f5,0xc6f6,0xc6f7,0xc6fa,0xc6fb,0xc6fc,
-0xc6fe,0xc6ff,0xc700,0xc701,0xc702,0xc703,0xc706,0xc707,
-0xc709,0xc70a,0xc70b,0xc70d,0xc70e,0xc70f,0xc710,0xc711,
-0xc712,0xc713,0xc716,0xc718,0xc71a,0xc71b,0xc71c,0xc71d,
-0xc71e,0xc71f,0xc722,0xc723,0xc725,0xc726,0xc727,0xc729,
-0xc72a,0xc72b,0xc72c,0xc72d,0xc72e,0xc72f,0xc732,0xc734,
-0xc736,0xc738,0xc739,0xc73a,0xc73b,0xc73e,0xc73f,0xc741,
-0xc742,0xc743,0xc745,0xc746,0xc747,0xc748,0xc749,0xc74b,
-0xc74e,0xc750,0xc759,0xc75a,0xc75b,0xc75d,0xc75e,0xc75f,
-0xc761,0xc762,0xc763,0xc764,0xc765,0xc766,0xc767,0xc769,
-0xc76a,0xc76c,0xc76d,0xc76e,0xc76f,0xc770,0xc771,0xc772,
-0xc773,0xc776,0xc777,0xc779,0xc77a,0xc77b,0xc77f,0xc780,
-0xc781,0xc782,0xc786,0xc78b,0xc78c,0xc78d,0xc78f,0xc792,
-0xc793,0xc795,0xc799,0xc79b,0xc79c,0xc79d,0xc79e,0xc79f,
-0xc7a2,0xc7a7,0xc7a8,0xc7a9,0xc7aa,0xc7ab,0xc7ae,0xc7af,
-0xc7b1,0xc7b2,0xc7b3,0xc7b5,0xc7b6,0xc7b7,0xc7b8,0xc7b9,
-0xc7ba,0xc7bb,0xc7be,0xc7c2,0xc7c3,0xc7c4,0xc7c5,0xc7c6,
-0xc7c7,0xc7ca,0xc7cb,0xc7cd,0xc7cf,0xc7d1,0xc7d2,0xc7d3,
-0xc7d4,0xc7d5,0xc7d6,0xc7d7,0xc7d9,0xc7da,0xc7db,0xc7dc,
-0xc7de,0xc7df,0xc7e0,0xc7e1,0xc7e2,0xc7e3,0xc7e5,0xc7e6,
-0xc7e7,0xc7e9,0xc7ea,0xc7eb,0xc7ed,0xc7ee,0xc7ef,0xc7f0,
-0xc7f1,0xc7f2,0xc7f3,0xc7f4,0xc7f5,0xc7f6,0xc7f7,0xc7f8,
-0xc7f9,0xc7fa,0xc7fb,0xc7fc,0xc7fd,0xc7fe,0xc7ff,0xc802,
-0xc803,0xc805,0xc806,0xc807,0xc809,0xc80b,0xc80c,0xc80d,
-0xc80e,0xc80f,0xc812,0xc814,0xc817,0xc818,0xc819,0xc81a,
-0xc81b,0xc81e,0xc81f,0xc821,0xc822,0xc823,0xc825,0xc826,
-0xc827,0xc828,0xc829,0xc82a,0xc82b,0xc82e,0xc830,0xc832,
-0xc833,0xc834,0xc835,0xc836,0xc837,0xc839,0xc83a,0xc83b,
-0xc83d,0xc83e,0xc83f,0xc841,0xc842,0xc843,0xc844,0xc845,
-0xc846,0xc847,0xc84a,0xc84b,0xc84e,0xc84f,0xc850,0xc851,
-0xc852,0xc853,0xc855,0xc856,0xc857,0xc858,0xc859,0xc85a,
-0xc85b,0xc85c,0xc85d,0xc85e,0xc85f,0xc860,0xc861,0xc862,
-0xc863,0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,0xc86a,
-0xc86b,0xc86c,0xc86d,0xc86e,0xc86f,0xc872,0xc873,0xc875,
-0xc876,0xc877,0xc879,0xc87b,0xc87c,0xc87d,0xc87e,0xc87f,
-0xc882,0xc884,0xc888,0xc889,0xc88a,0xc88e,0xc88f,0xc890,
-0xc891,0xc892,0xc893,0xc895,0xc896,0xc897,0xc898,0xc899,
-0xc89a,0xc89b,0xc89c,0xc89e,0xc8a0,0xc8a2,0xc8a3,0xc8a4};
-
-static const int uhc1_ucs_table_size = (sizeof(uhc1_ucs_table)/sizeof(unsigned short));
-
-static const unsigned short uhc2_ucs_table[] = {
-0xc8a5,0xc8a6,0xc8a7,0xc8a9,0xc8aa,0xc8ab,0xc8ac,0xc8ad,
-0xc8ae,0xc8af,0xc8b0,0xc8b1,0xc8b2,0xc8b3,0xc8b4,0xc8b5,
-0xc8b6,0xc8b7,0xc8b8,0xc8b9,0xc8ba,0xc8bb,0xc8be,0xc8bf,
-0xc8c0,0xc8c1,0xc8c2,0xc8c3,0xc8c5,0xc8c6,0xc8c7,0xc8c9,
-0xc8ca,0xc8cb,0xc8cd,0xc8ce,0xc8cf,0xc8d0,0xc8d1,0xc8d2,
-0xc8d3,0xc8d6,0xc8d8,0xc8da,0xc8db,0xc8dc,0xc8dd,0xc8de,
-0xc8df,0xc8e2,0xc8e3,0xc8e5,0xc8e6,0xc8e7,0xc8e8,0xc8e9,
-0xc8ea,0xc8eb,0xc8ec,0xc8ed,0xc8ee,0xc8ef,0xc8f0,0xc8f1,
-0xc8f2,0xc8f3,0xc8f4,0xc8f6,0xc8f7,0xc8f8,0xc8f9,0xc8fa,
-0xc8fb,0xc8fe,0xc8ff,0xc901,0xc902,0xc903,0xc907,0xc908,
-0xc909,0xc90a,0xc90b,0xc90e,0x3000,0x3001,0x3002,0x00b7,
-0x2025,0x2026,0x00a8,0x3003,0x00ad,0x2015,0x2225,0xff3c,
-0x223c,0x2018,0x2019,0x201c,0x201d,0x3014,0x3015,0x3008,
-0x3009,0x300a,0x300b,0x300c,0x300d,0x300e,0x300f,0x3010,
-0x3011,0x00b1,0x00d7,0x00f7,0x2260,0x2264,0x2265,0x221e,
-0x2234,0x00b0,0x2032,0x2033,0x2103,0x212b,0xffe0,0xffe1,
-0xffe5,0x2642,0x2640,0x2220,0x22a5,0x2312,0x2202,0x2207,
-0x2261,0x2252,0x00a7,0x203b,0x2606,0x2605,0x25cb,0x25cf,
-0x25ce,0x25c7,0x25c6,0x25a1,0x25a0,0x25b3,0x25b2,0x25bd,
-0x25bc,0x2192,0x2190,0x2191,0x2193,0x2194,0x3013,0x226a,
-0x226b,0x221a,0x223d,0x221d,0x2235,0x222b,0x222c,0x2208,
-0x220b,0x2286,0x2287,0x2282,0x2283,0x222a,0x2229,0x2227,
-0x2228,0xffe2,0xc910,0xc912,0xc913,0xc914,0xc915,0xc916,
-0xc917,0xc919,0xc91a,0xc91b,0xc91c,0xc91d,0xc91e,0xc91f,
-0xc920,0xc921,0xc922,0xc923,0xc924,0xc925,0xc926,0xc927,
-0xc928,0xc929,0xc92a,0xc92b,0xc92d,0xc92e,0xc92f,0xc930,
-0xc931,0xc932,0xc933,0xc935,0xc936,0xc937,0xc938,0xc939,
-0xc93a,0xc93b,0xc93c,0xc93d,0xc93e,0xc93f,0xc940,0xc941,
-0xc942,0xc943,0xc944,0xc945,0xc946,0xc947,0xc948,0xc949,
-0xc94a,0xc94b,0xc94c,0xc94d,0xc94e,0xc94f,0xc952,0xc953,
-0xc955,0xc956,0xc957,0xc959,0xc95a,0xc95b,0xc95c,0xc95d,
-0xc95e,0xc95f,0xc962,0xc964,0xc965,0xc966,0xc967,0xc968,
-0xc969,0xc96a,0xc96b,0xc96d,0xc96e,0xc96f,0x21d2,0x21d4,
-0x2200,0x2203,0x00b4,0xff5e,0x02c7,0x02d8,0x02dd,0x02da,
-0x02d9,0x00b8,0x02db,0x00a1,0x00bf,0x02d0,0x222e,0x2211,
-0x220f,0x00a4,0x2109,0x2030,0x25c1,0x25c0,0x25b7,0x25b6,
-0x2664,0x2660,0x2661,0x2665,0x2667,0x2663,0x2299,0x25c8,
-0x25a3,0x25d0,0x25d1,0x2592,0x25a4,0x25a5,0x25a8,0x25a7,
-0x25a6,0x25a9,0x2668,0x260f,0x260e,0x261c,0x261e,0x00b6,
-0x2020,0x2021,0x2195,0x2197,0x2199,0x2196,0x2198,0x266d,
-0x2669,0x266a,0x266c,0x327f,0x321c,0x2116,0x33c7,0x2122,
-0x33c2,0x33d8,0x2121,0x20ac,0x00ae,0xc971,0xc972,0xc973,
-0xc975,0xc976,0xc977,0xc978,0xc979,0xc97a,0xc97b,0xc97d,
-0xc97e,0xc97f,0xc980,0xc981,0xc982,0xc983,0xc984,0xc985,
-0xc986,0xc987,0xc98a,0xc98b,0xc98d,0xc98e,0xc98f,0xc991,
-0xc992,0xc993,0xc994,0xc995,0xc996,0xc997,0xc99a,0xc99c,
-0xc99e,0xc99f,0xc9a0,0xc9a1,0xc9a2,0xc9a3,0xc9a4,0xc9a5,
-0xc9a6,0xc9a7,0xc9a8,0xc9a9,0xc9aa,0xc9ab,0xc9ac,0xc9ad,
-0xc9ae,0xc9af,0xc9b0,0xc9b1,0xc9b2,0xc9b3,0xc9b4,0xc9b5,
-0xc9b6,0xc9b7,0xc9b8,0xc9b9,0xc9ba,0xc9bb,0xc9bc,0xc9bd,
-0xc9be,0xc9bf,0xc9c2,0xc9c3,0xc9c5,0xc9c6,0xc9c9,0xc9cb,
-0xc9cc,0xc9cd,0xc9ce,0xc9cf,0xc9d2,0xc9d4,0xc9d7,0xc9d8,
-0xc9db,0xff01,0xff02,0xff03,0xff04,0xff05,0xff06,0xff07,
-0xff08,0xff09,0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,
-0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,0xff16,0xff17,
-0xff18,0xff19,0xff1a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,
-0xff20,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,0xff27,
-0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,0xff2f,
-0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,0xff37,
-0xff38,0xff39,0xff3a,0xff3b,0xffe6,0xff3d,0xff3e,0xff3f,
-0xff40,0xff41,0xff42,0xff43,0xff44,0xff45,0xff46,0xff47,
-0xff48,0xff49,0xff4a,0xff4b,0xff4c,0xff4d,0xff4e,0xff4f,
-0xff50,0xff51,0xff52,0xff53,0xff54,0xff55,0xff56,0xff57,
-0xff58,0xff59,0xff5a,0xff5b,0xff5c,0xff5d,0xffe3,0xc9de,
-0xc9df,0xc9e1,0xc9e3,0xc9e5,0xc9e6,0xc9e8,0xc9e9,0xc9ea,
-0xc9eb,0xc9ee,0xc9f2,0xc9f3,0xc9f4,0xc9f5,0xc9f6,0xc9f7,
-0xc9fa,0xc9fb,0xc9fd,0xc9fe,0xc9ff,0xca01,0xca02,0xca03,
-0xca04,0xca05,0xca06,0xca07,0xca0a,0xca0e,0xca0f,0xca10,
-0xca11,0xca12,0xca13,0xca15,0xca16,0xca17,0xca19,0xca1a,
-0xca1b,0xca1c,0xca1d,0xca1e,0xca1f,0xca20,0xca21,0xca22,
-0xca23,0xca24,0xca25,0xca26,0xca27,0xca28,0xca2a,0xca2b,
-0xca2c,0xca2d,0xca2e,0xca2f,0xca30,0xca31,0xca32,0xca33,
-0xca34,0xca35,0xca36,0xca37,0xca38,0xca39,0xca3a,0xca3b,
-0xca3c,0xca3d,0xca3e,0xca3f,0xca40,0xca41,0xca42,0xca43,
-0xca44,0xca45,0xca46,0x3131,0x3132,0x3133,0x3134,0x3135,
-0x3136,0x3137,0x3138,0x3139,0x313a,0x313b,0x313c,0x313d,
-0x313e,0x313f,0x3140,0x3141,0x3142,0x3143,0x3144,0x3145,
-0x3146,0x3147,0x3148,0x3149,0x314a,0x314b,0x314c,0x314d,
-0x314e,0x314f,0x3150,0x3151,0x3152,0x3153,0x3154,0x3155,
-0x3156,0x3157,0x3158,0x3159,0x315a,0x315b,0x315c,0x315d,
-0x315e,0x315f,0x3160,0x3161,0x3162,0x3163,0x3164,0x3165,
-0x3166,0x3167,0x3168,0x3169,0x316a,0x316b,0x316c,0x316d,
-0x316e,0x316f,0x3170,0x3171,0x3172,0x3173,0x3174,0x3175,
-0x3176,0x3177,0x3178,0x3179,0x317a,0x317b,0x317c,0x317d,
-0x317e,0x317f,0x3180,0x3181,0x3182,0x3183,0x3184,0x3185,
-0x3186,0x3187,0x3188,0x3189,0x318a,0x318b,0x318c,0x318d,
-0x318e,0xca47,0xca48,0xca49,0xca4a,0xca4b,0xca4e,0xca4f,
-0xca51,0xca52,0xca53,0xca55,0xca56,0xca57,0xca58,0xca59,
-0xca5a,0xca5b,0xca5e,0xca62,0xca63,0xca64,0xca65,0xca66,
-0xca67,0xca69,0xca6a,0xca6b,0xca6c,0xca6d,0xca6e,0xca6f,
-0xca70,0xca71,0xca72,0xca73,0xca74,0xca75,0xca76,0xca77,
-0xca78,0xca79,0xca7a,0xca7b,0xca7c,0xca7e,0xca7f,0xca80,
-0xca81,0xca82,0xca83,0xca85,0xca86,0xca87,0xca88,0xca89,
-0xca8a,0xca8b,0xca8c,0xca8d,0xca8e,0xca8f,0xca90,0xca91,
-0xca92,0xca93,0xca94,0xca95,0xca96,0xca97,0xca99,0xca9a,
-0xca9b,0xca9c,0xca9d,0xca9e,0xca9f,0xcaa0,0xcaa1,0xcaa2,
-0xcaa3,0xcaa4,0xcaa5,0xcaa6,0xcaa7,0x2170,0x2171,0x2172,
-0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x2160,
-0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,
-0x2169,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
-0x0398,0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f,
-0x03a0,0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,
-0x03a9,0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,
-0x03b8,0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf,
-0x03c0,0x03c1,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,
-0x03c9,0xcaa8,0xcaa9,0xcaaa,0xcaab,0xcaac,0xcaad,0xcaae,
-0xcaaf,0xcab0,0xcab1,0xcab2,0xcab3,0xcab4,0xcab5,0xcab6,
-0xcab7,0xcab8,0xcab9,0xcaba,0xcabb,0xcabe,0xcabf,0xcac1,
-0xcac2,0xcac3,0xcac5,0xcac6,0xcac7,0xcac8,0xcac9,0xcaca,
-0xcacb,0xcace,0xcad0,0xcad2,0xcad4,0xcad5,0xcad6,0xcad7,
-0xcada,0xcadb,0xcadc,0xcadd,0xcade,0xcadf,0xcae1,0xcae2,
-0xcae3,0xcae4,0xcae5,0xcae6,0xcae7,0xcae8,0xcae9,0xcaea,
-0xcaeb,0xcaed,0xcaee,0xcaef,0xcaf0,0xcaf1,0xcaf2,0xcaf3,
-0xcaf5,0xcaf6,0xcaf7,0xcaf8,0xcaf9,0xcafa,0xcafb,0xcafc,
-0xcafd,0xcafe,0xcaff,0xcb00,0xcb01,0xcb02,0xcb03,0xcb04,
-0xcb05,0xcb06,0xcb07,0xcb09,0xcb0a,0x2500,0x2502,0x250c,
-0x2510,0x2518,0x2514,0x251c,0x252c,0x2524,0x2534,0x253c,
-0x2501,0x2503,0x250f,0x2513,0x251b,0x2517,0x2523,0x2533,
-0x252b,0x253b,0x254b,0x2520,0x252f,0x2528,0x2537,0x253f,
-0x251d,0x2530,0x2525,0x2538,0x2542,0x2512,0x2511,0x251a,
-0x2519,0x2516,0x2515,0x250e,0x250d,0x251e,0x251f,0x2521,
-0x2522,0x2526,0x2527,0x2529,0x252a,0x252d,0x252e,0x2531,
-0x2532,0x2535,0x2536,0x2539,0x253a,0x253d,0x253e,0x2540,
-0x2541,0x2543,0x2544,0x2545,0x2546,0x2547,0x2548,0x2549,
-0x254a,0xcb0b,0xcb0c,0xcb0d,0xcb0e,0xcb0f,0xcb11,0xcb12,
-0xcb13,0xcb15,0xcb16,0xcb17,0xcb19,0xcb1a,0xcb1b,0xcb1c,
-0xcb1d,0xcb1e,0xcb1f,0xcb22,0xcb23,0xcb24,0xcb25,0xcb26,
-0xcb27,0xcb28,0xcb29,0xcb2a,0xcb2b,0xcb2c,0xcb2d,0xcb2e,
-0xcb2f,0xcb30,0xcb31,0xcb32,0xcb33,0xcb34,0xcb35,0xcb36,
-0xcb37,0xcb38,0xcb39,0xcb3a,0xcb3b,0xcb3c,0xcb3d,0xcb3e,
-0xcb3f,0xcb40,0xcb42,0xcb43,0xcb44,0xcb45,0xcb46,0xcb47,
-0xcb4a,0xcb4b,0xcb4d,0xcb4e,0xcb4f,0xcb51,0xcb52,0xcb53,
-0xcb54,0xcb55,0xcb56,0xcb57,0xcb5a,0xcb5b,0xcb5c,0xcb5e,
-0xcb5f,0xcb60,0xcb61,0xcb62,0xcb63,0xcb65,0xcb66,0xcb67,
-0xcb68,0xcb69,0xcb6a,0xcb6b,0xcb6c,0x3395,0x3396,0x3397,
-0x2113,0x3398,0x33c4,0x33a3,0x33a4,0x33a5,0x33a6,0x3399,
-0x339a,0x339b,0x339c,0x339d,0x339e,0x339f,0x33a0,0x33a1,
-0x33a2,0x33ca,0x338d,0x338e,0x338f,0x33cf,0x3388,0x3389,
-0x33c8,0x33a7,0x33a8,0x33b0,0x33b1,0x33b2,0x33b3,0x33b4,
-0x33b5,0x33b6,0x33b7,0x33b8,0x33b9,0x3380,0x3381,0x3382,
-0x3383,0x3384,0x33ba,0x33bb,0x33bc,0x33bd,0x33be,0x33bf,
-0x3390,0x3391,0x3392,0x3393,0x3394,0x2126,0x33c0,0x33c1,
-0x338a,0x338b,0x338c,0x33d6,0x33c5,0x33ad,0x33ae,0x33af,
-0x33db,0x33a9,0x33aa,0x33ab,0x33ac,0x33dd,0x33d0,0x33d3,
-0x33c3,0x33c9,0x33dc,0x33c6,0xcb6d,0xcb6e,0xcb6f,0xcb70,
-0xcb71,0xcb72,0xcb73,0xcb74,0xcb75,0xcb76,0xcb77,0xcb7a,
-0xcb7b,0xcb7c,0xcb7d,0xcb7e,0xcb7f,0xcb80,0xcb81,0xcb82,
-0xcb83,0xcb84,0xcb85,0xcb86,0xcb87,0xcb88,0xcb89,0xcb8a,
-0xcb8b,0xcb8c,0xcb8d,0xcb8e,0xcb8f,0xcb90,0xcb91,0xcb92,
-0xcb93,0xcb94,0xcb95,0xcb96,0xcb97,0xcb98,0xcb99,0xcb9a,
-0xcb9b,0xcb9d,0xcb9e,0xcb9f,0xcba0,0xcba1,0xcba2,0xcba3,
-0xcba4,0xcba5,0xcba6,0xcba7,0xcba8,0xcba9,0xcbaa,0xcbab,
-0xcbac,0xcbad,0xcbae,0xcbaf,0xcbb0,0xcbb1,0xcbb2,0xcbb3,
-0xcbb4,0xcbb5,0xcbb6,0xcbb7,0xcbb9,0xcbba,0xcbbb,0xcbbc,
-0xcbbd,0xcbbe,0xcbbf,0xcbc0,0xcbc1,0xcbc2,0xcbc3,0xcbc4,
-0x00c6,0x00d0,0x00aa,0x0126,0x0132,0x013f,0x0141,0x00d8,
-0x0152,0x00ba,0x00de,0x0166,0x014a,0x3260,0x3261,0x3262,
-0x3263,0x3264,0x3265,0x3266,0x3267,0x3268,0x3269,0x326a,
-0x326b,0x326c,0x326d,0x326e,0x326f,0x3270,0x3271,0x3272,
-0x3273,0x3274,0x3275,0x3276,0x3277,0x3278,0x3279,0x327a,
-0x327b,0x24d0,0x24d1,0x24d2,0x24d3,0x24d4,0x24d5,0x24d6,
-0x24d7,0x24d8,0x24d9,0x24da,0x24db,0x24dc,0x24dd,0x24de,
-0x24df,0x24e0,0x24e1,0x24e2,0x24e3,0x24e4,0x24e5,0x24e6,
-0x24e7,0x24e8,0x24e9,0x2460,0x2461,0x2462,0x2463,0x2464,
-0x2465,0x2466,0x2467,0x2468,0x2469,0x246a,0x246b,0x246c,
-0x246d,0x246e,0x00bd,0x2153,0x2154,0x00bc,0x00be,0x215b,
-0x215c,0x215d,0x215e,0xcbc5,0xcbc6,0xcbc7,0xcbc8,0xcbc9,
-0xcbca,0xcbcb,0xcbcc,0xcbcd,0xcbce,0xcbcf,0xcbd0,0xcbd1,
-0xcbd2,0xcbd3,0xcbd5,0xcbd6,0xcbd7,0xcbd8,0xcbd9,0xcbda,
-0xcbdb,0xcbdc,0xcbdd,0xcbde,0xcbdf,0xcbe0,0xcbe1,0xcbe2,
-0xcbe3,0xcbe5,0xcbe6,0xcbe8,0xcbea,0xcbeb,0xcbec,0xcbed,
-0xcbee,0xcbef,0xcbf0,0xcbf1,0xcbf2,0xcbf3,0xcbf4,0xcbf5,
-0xcbf6,0xcbf7,0xcbf8,0xcbf9,0xcbfa,0xcbfb,0xcbfc,0xcbfd,
-0xcbfe,0xcbff,0xcc00,0xcc01,0xcc02,0xcc03,0xcc04,0xcc05,
-0xcc06,0xcc07,0xcc08,0xcc09,0xcc0a,0xcc0b,0xcc0e,0xcc0f,
-0xcc11,0xcc12,0xcc13,0xcc15,0xcc16,0xcc17,0xcc18,0xcc19,
-0xcc1a,0xcc1b,0xcc1e,0xcc1f,0xcc20,0xcc23,0xcc24,0x00e6,
-0x0111,0x00f0,0x0127,0x0131,0x0133,0x0138,0x0140,0x0142,
-0x00f8,0x0153,0x00df,0x00fe,0x0167,0x014b,0x0149,0x3200,
-0x3201,0x3202,0x3203,0x3204,0x3205,0x3206,0x3207,0x3208,
-0x3209,0x320a,0x320b,0x320c,0x320d,0x320e,0x320f,0x3210,
-0x3211,0x3212,0x3213,0x3214,0x3215,0x3216,0x3217,0x3218,
-0x3219,0x321a,0x321b,0x249c,0x249d,0x249e,0x249f,0x24a0,
-0x24a1,0x24a2,0x24a3,0x24a4,0x24a5,0x24a6,0x24a7,0x24a8,
-0x24a9,0x24aa,0x24ab,0x24ac,0x24ad,0x24ae,0x24af,0x24b0,
-0x24b1,0x24b2,0x24b3,0x24b4,0x24b5,0x2474,0x2475,0x2476,
-0x2477,0x2478,0x2479,0x247a,0x247b,0x247c,0x247d,0x247e,
-0x247f,0x2480,0x2481,0x2482,0x00b9,0x00b2,0x00b3,0x2074,
-0x207f,0x2081,0x2082,0x2083,0x2084,0xcc25,0xcc26,0xcc2a,
-0xcc2b,0xcc2d,0xcc2f,0xcc31,0xcc32,0xcc33,0xcc34,0xcc35,
-0xcc36,0xcc37,0xcc3a,0xcc3f,0xcc40,0xcc41,0xcc42,0xcc43,
-0xcc46,0xcc47,0xcc49,0xcc4a,0xcc4b,0xcc4d,0xcc4e,0xcc4f,
-0xcc50,0xcc51,0xcc52,0xcc53,0xcc56,0xcc5a,0xcc5b,0xcc5c,
-0xcc5d,0xcc5e,0xcc5f,0xcc61,0xcc62,0xcc63,0xcc65,0xcc67,
-0xcc69,0xcc6a,0xcc6b,0xcc6c,0xcc6d,0xcc6e,0xcc6f,0xcc71,
-0xcc72,0xcc73,0xcc74,0xcc76,0xcc77,0xcc78,0xcc79,0xcc7a,
-0xcc7b,0xcc7c,0xcc7d,0xcc7e,0xcc7f,0xcc80,0xcc81,0xcc82,
-0xcc83,0xcc84,0xcc85,0xcc86,0xcc87,0xcc88,0xcc89,0xcc8a,
-0xcc8b,0xcc8c,0xcc8d,0xcc8e,0xcc8f,0xcc90,0xcc91,0xcc92,
-0xcc93,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,
-0x3048,0x3049,0x304a,0x304b,0x304c,0x304d,0x304e,0x304f,
-0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,
-0x3058,0x3059,0x305a,0x305b,0x305c,0x305d,0x305e,0x305f,
-0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,
-0x3068,0x3069,0x306a,0x306b,0x306c,0x306d,0x306e,0x306f,
-0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,
-0x3078,0x3079,0x307a,0x307b,0x307c,0x307d,0x307e,0x307f,
-0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,
-0x3088,0x3089,0x308a,0x308b,0x308c,0x308d,0x308e,0x308f,
-0x3090,0x3091,0x3092,0x3093,0xcc94,0xcc95,0xcc96,0xcc97,
-0xcc9a,0xcc9b,0xcc9d,0xcc9e,0xcc9f,0xcca1,0xcca2,0xcca3,
-0xcca4,0xcca5,0xcca6,0xcca7,0xccaa,0xccae,0xccaf,0xccb0,
-0xccb1,0xccb2,0xccb3,0xccb6,0xccb7,0xccb9,0xccba,0xccbb,
-0xccbd,0xccbe,0xccbf,0xccc0,0xccc1,0xccc2,0xccc3,0xccc6,
-0xccc8,0xccca,0xcccb,0xcccc,0xcccd,0xccce,0xcccf,0xccd1,
-0xccd2,0xccd3,0xccd5,0xccd6,0xccd7,0xccd8,0xccd9,0xccda,
-0xccdb,0xccdc,0xccdd,0xccde,0xccdf,0xcce0,0xcce1,0xcce2,
-0xcce3,0xcce5,0xcce6,0xcce7,0xcce8,0xcce9,0xccea,0xcceb,
-0xcced,0xccee,0xccef,0xccf1,0xccf2,0xccf3,0xccf4,0xccf5,
-0xccf6,0xccf7,0xccf8,0xccf9,0xccfa,0xccfb,0xccfc,0xccfd,
-0x30a1,0x30a2,0x30a3,0x30a4,0x30a5,0x30a6,0x30a7,0x30a8,
-0x30a9,0x30aa,0x30ab,0x30ac,0x30ad,0x30ae,0x30af,0x30b0,
-0x30b1,0x30b2,0x30b3,0x30b4,0x30b5,0x30b6,0x30b7,0x30b8,
-0x30b9,0x30ba,0x30bb,0x30bc,0x30bd,0x30be,0x30bf,0x30c0,
-0x30c1,0x30c2,0x30c3,0x30c4,0x30c5,0x30c6,0x30c7,0x30c8,
-0x30c9,0x30ca,0x30cb,0x30cc,0x30cd,0x30ce,0x30cf,0x30d0,
-0x30d1,0x30d2,0x30d3,0x30d4,0x30d5,0x30d6,0x30d7,0x30d8,
-0x30d9,0x30da,0x30db,0x30dc,0x30dd,0x30de,0x30df,0x30e0,
-0x30e1,0x30e2,0x30e3,0x30e4,0x30e5,0x30e6,0x30e7,0x30e8,
-0x30e9,0x30ea,0x30eb,0x30ec,0x30ed,0x30ee,0x30ef,0x30f0,
-0x30f1,0x30f2,0x30f3,0x30f4,0x30f5,0x30f6,0xccfe,0xccff,
-0xcd00,0xcd02,0xcd03,0xcd04,0xcd05,0xcd06,0xcd07,0xcd0a,
-0xcd0b,0xcd0d,0xcd0e,0xcd0f,0xcd11,0xcd12,0xcd13,0xcd14,
-0xcd15,0xcd16,0xcd17,0xcd1a,0xcd1c,0xcd1e,0xcd1f,0xcd20,
-0xcd21,0xcd22,0xcd23,0xcd25,0xcd26,0xcd27,0xcd29,0xcd2a,
-0xcd2b,0xcd2d,0xcd2e,0xcd2f,0xcd30,0xcd31,0xcd32,0xcd33,
-0xcd34,0xcd35,0xcd36,0xcd37,0xcd38,0xcd3a,0xcd3b,0xcd3c,
-0xcd3d,0xcd3e,0xcd3f,0xcd40,0xcd41,0xcd42,0xcd43,0xcd44,
-0xcd45,0xcd46,0xcd47,0xcd48,0xcd49,0xcd4a,0xcd4b,0xcd4c,
-0xcd4d,0xcd4e,0xcd4f,0xcd50,0xcd51,0xcd52,0xcd53,0xcd54,
-0xcd55,0xcd56,0xcd57,0xcd58,0xcd59,0xcd5a,0xcd5b,0xcd5d,
-0xcd5e,0xcd5f,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,
-0x0401,0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c,
-0x041d,0x041e,0x041f,0x0420,0x0421,0x0422,0x0423,0x0424,
-0x0425,0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c,
-0x042d,0x042e,0x042f,0x0430,0x0431,0x0432,0x0433,0x0434,
-0x0435,0x0451,0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,
-0x043c,0x043d,0x043e,0x043f,0x0440,0x0441,0x0442,0x0443,
-0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,
-0x044c,0x044d,0x044e,0x044f,0xcd61,0xcd62,0xcd63,0xcd65,
-0xcd66,0xcd67,0xcd68,0xcd69,0xcd6a,0xcd6b,0xcd6e,0xcd70,
-0xcd72,0xcd73,0xcd74,0xcd75,0xcd76,0xcd77,0xcd79,0xcd7a,
-0xcd7b,0xcd7c,0xcd7d,0xcd7e,0xcd7f,0xcd80,0xcd81,0xcd82,
-0xcd83,0xcd84,0xcd85,0xcd86,0xcd87,0xcd89,0xcd8a,0xcd8b,
-0xcd8c,0xcd8d,0xcd8e,0xcd8f,0xcd90,0xcd91,0xcd92,0xcd93,
-0xcd96,0xcd97,0xcd99,0xcd9a,0xcd9b,0xcd9d,0xcd9e,0xcd9f,
-0xcda0,0xcda1,0xcda2,0xcda3,0xcda6,0xcda8,0xcdaa,0xcdab,
-0xcdac,0xcdad,0xcdae,0xcdaf,0xcdb1,0xcdb2,0xcdb3,0xcdb4,
-0xcdb5,0xcdb6,0xcdb7,0xcdb8,0xcdb9,0xcdba,0xcdbb,0xcdbc,
-0xcdbd,0xcdbe,0xcdbf,0xcdc0,0xcdc1,0xcdc2,0xcdc3,0xcdc5,
-0xcdc6,0xcdc7,0xcdc8,0xcdc9,0xcdca,0xcdcb,0xcdcd,0xcdce,
-0xcdcf,0xcdd1,0xcdd2,0xcdd3,0xcdd4,0xcdd5,0xcdd6,0xcdd7,
-0xcdd8,0xcdd9,0xcdda,0xcddb,0xcddc,0xcddd,0xcdde,0xcddf,
-0xcde0,0xcde1,0xcde2,0xcde3,0xcde4,0xcde5,0xcde6,0xcde7,
-0xcde9,0xcdea,0xcdeb,0xcded,0xcdee,0xcdef,0xcdf1,0xcdf2,
-0xcdf3,0xcdf4,0xcdf5,0xcdf6,0xcdf7,0xcdfa,0xcdfc,0xcdfe,
-0xcdff,0xce00,0xce01,0xce02,0xce03,0xce05,0xce06,0xce07,
-0xce09,0xce0a,0xce0b,0xce0d,0xce0e,0xce0f,0xce10,0xce11,
-0xce12,0xce13,0xce15,0xce16,0xce17,0xce18,0xce1a,0xce1b,
-0xce1c,0xce1d,0xce1e,0xce1f,0xce22,0xce23,0xce25,0xce26,
-0xce27,0xce29,0xce2a,0xce2b,0xce2c,0xce2d,0xce2e,0xce2f,
-0xce32,0xce34,0xce36,0xce37,0xce38,0xce39,0xce3a,0xce3b,
-0xce3c,0xce3d,0xce3e,0xce3f,0xce40,0xce41,0xce42,0xce43,
-0xce44,0xce45,0xce46,0xce47,0xce48,0xce49,0xce4a,0xce4b,
-0xce4c,0xce4d,0xce4e,0xce4f,0xce50,0xce51,0xce52,0xce53,
-0xce54,0xce55,0xce56,0xce57,0xce5a,0xce5b,0xce5d,0xce5e,
-0xce62,0xce63,0xce64,0xce65,0xce66,0xce67,0xce6a,0xce6c,
-0xce6e,0xce6f,0xce70,0xce71,0xce72,0xce73,0xce76,0xce77,
-0xce79,0xce7a,0xce7b,0xce7d,0xce7e,0xce7f,0xce80,0xce81,
-0xce82,0xce83,0xce86,0xce88,0xce8a,0xce8b,0xce8c,0xce8d,
-0xce8e,0xce8f,0xce92,0xce93,0xce95,0xce96,0xce97,0xce99,
-0xce9a,0xce9b,0xce9c,0xce9d,0xce9e,0xce9f,0xcea2,0xcea6,
-0xcea7,0xcea8,0xcea9,0xceaa,0xceab,0xceae,0xceaf,0xceb0,
-0xceb1,0xceb2,0xceb3,0xceb4,0xceb5,0xceb6,0xceb7,0xceb8,
-0xceb9,0xceba,0xcebb,0xcebc,0xcebd,0xcebe,0xcebf,0xcec0,
-0xcec2,0xcec3,0xcec4,0xcec5,0xcec6,0xcec7,0xcec8,0xcec9,
-0xceca,0xcecb,0xcecc,0xcecd,0xcece,0xcecf,0xced0,0xced1,
-0xced2,0xced3,0xced4,0xced5,0xced6,0xced7,0xced8,0xced9,
-0xceda,0xcedb,0xcedc,0xcedd,0xcede,0xcedf,0xcee0,0xcee1,
-0xcee2,0xcee3,0xcee6,0xcee7,0xcee9,0xceea,0xceed,0xceee,
-0xceef,0xcef0,0xcef1,0xcef2,0xcef3,0xcef6,0xcefa,0xcefb,
-0xcefc,0xcefd,0xcefe,0xceff,0xac00,0xac01,0xac04,0xac07,
-0xac08,0xac09,0xac0a,0xac10,0xac11,0xac12,0xac13,0xac14,
-0xac15,0xac16,0xac17,0xac19,0xac1a,0xac1b,0xac1c,0xac1d,
-0xac20,0xac24,0xac2c,0xac2d,0xac2f,0xac30,0xac31,0xac38,
-0xac39,0xac3c,0xac40,0xac4b,0xac4d,0xac54,0xac58,0xac5c,
-0xac70,0xac71,0xac74,0xac77,0xac78,0xac7a,0xac80,0xac81,
-0xac83,0xac84,0xac85,0xac86,0xac89,0xac8a,0xac8b,0xac8c,
-0xac90,0xac94,0xac9c,0xac9d,0xac9f,0xaca0,0xaca1,0xaca8,
-0xaca9,0xacaa,0xacac,0xacaf,0xacb0,0xacb8,0xacb9,0xacbb,
-0xacbc,0xacbd,0xacc1,0xacc4,0xacc8,0xaccc,0xacd5,0xacd7,
-0xace0,0xace1,0xace4,0xace7,0xace8,0xacea,0xacec,0xacef,
-0xacf0,0xacf1,0xacf3,0xacf5,0xacf6,0xacfc,0xacfd,0xad00,
-0xad04,0xad06,0xcf02,0xcf03,0xcf05,0xcf06,0xcf07,0xcf09,
-0xcf0a,0xcf0b,0xcf0c,0xcf0d,0xcf0e,0xcf0f,0xcf12,0xcf14,
-0xcf16,0xcf17,0xcf18,0xcf19,0xcf1a,0xcf1b,0xcf1d,0xcf1e,
-0xcf1f,0xcf21,0xcf22,0xcf23,0xcf25,0xcf26,0xcf27,0xcf28,
-0xcf29,0xcf2a,0xcf2b,0xcf2e,0xcf32,0xcf33,0xcf34,0xcf35,
-0xcf36,0xcf37,0xcf39,0xcf3a,0xcf3b,0xcf3c,0xcf3d,0xcf3e,
-0xcf3f,0xcf40,0xcf41,0xcf42,0xcf43,0xcf44,0xcf45,0xcf46,
-0xcf47,0xcf48,0xcf49,0xcf4a,0xcf4b,0xcf4c,0xcf4d,0xcf4e,
-0xcf4f,0xcf50,0xcf51,0xcf52,0xcf53,0xcf56,0xcf57,0xcf59,
-0xcf5a,0xcf5b,0xcf5d,0xcf5e,0xcf5f,0xcf60,0xcf61,0xcf62,
-0xcf63,0xcf66,0xcf68,0xcf6a,0xcf6b,0xcf6c,0xad0c,0xad0d,
-0xad0f,0xad11,0xad18,0xad1c,0xad20,0xad29,0xad2c,0xad2d,
-0xad34,0xad35,0xad38,0xad3c,0xad44,0xad45,0xad47,0xad49,
-0xad50,0xad54,0xad58,0xad61,0xad63,0xad6c,0xad6d,0xad70,
-0xad73,0xad74,0xad75,0xad76,0xad7b,0xad7c,0xad7d,0xad7f,
-0xad81,0xad82,0xad88,0xad89,0xad8c,0xad90,0xad9c,0xad9d,
-0xada4,0xadb7,0xadc0,0xadc1,0xadc4,0xadc8,0xadd0,0xadd1,
-0xadd3,0xaddc,0xade0,0xade4,0xadf8,0xadf9,0xadfc,0xadff,
-0xae00,0xae01,0xae08,0xae09,0xae0b,0xae0d,0xae14,0xae30,
-0xae31,0xae34,0xae37,0xae38,0xae3a,0xae40,0xae41,0xae43,
-0xae45,0xae46,0xae4a,0xae4c,0xae4d,0xae4e,0xae50,0xae54,
-0xae56,0xae5c,0xae5d,0xae5f,0xae60,0xae61,0xae65,0xae68,
-0xae69,0xae6c,0xae70,0xae78,0xcf6d,0xcf6e,0xcf6f,0xcf72,
-0xcf73,0xcf75,0xcf76,0xcf77,0xcf79,0xcf7a,0xcf7b,0xcf7c,
-0xcf7d,0xcf7e,0xcf7f,0xcf81,0xcf82,0xcf83,0xcf84,0xcf86,
-0xcf87,0xcf88,0xcf89,0xcf8a,0xcf8b,0xcf8d,0xcf8e,0xcf8f,
-0xcf90,0xcf91,0xcf92,0xcf93,0xcf94,0xcf95,0xcf96,0xcf97,
-0xcf98,0xcf99,0xcf9a,0xcf9b,0xcf9c,0xcf9d,0xcf9e,0xcf9f,
-0xcfa0,0xcfa2,0xcfa3,0xcfa4,0xcfa5,0xcfa6,0xcfa7,0xcfa9,
-0xcfaa,0xcfab,0xcfac,0xcfad,0xcfae,0xcfaf,0xcfb1,0xcfb2,
-0xcfb3,0xcfb4,0xcfb5,0xcfb6,0xcfb7,0xcfb8,0xcfb9,0xcfba,
-0xcfbb,0xcfbc,0xcfbd,0xcfbe,0xcfbf,0xcfc0,0xcfc1,0xcfc2,
-0xcfc3,0xcfc5,0xcfc6,0xcfc7,0xcfc8,0xcfc9,0xcfca,0xcfcb,
-0xae79,0xae7b,0xae7c,0xae7d,0xae84,0xae85,0xae8c,0xaebc,
-0xaebd,0xaebe,0xaec0,0xaec4,0xaecc,0xaecd,0xaecf,0xaed0,
-0xaed1,0xaed8,0xaed9,0xaedc,0xaee8,0xaeeb,0xaeed,0xaef4,
-0xaef8,0xaefc,0xaf07,0xaf08,0xaf0d,0xaf10,0xaf2c,0xaf2d,
-0xaf30,0xaf32,0xaf34,0xaf3c,0xaf3d,0xaf3f,0xaf41,0xaf42,
-0xaf43,0xaf48,0xaf49,0xaf50,0xaf5c,0xaf5d,0xaf64,0xaf65,
-0xaf79,0xaf80,0xaf84,0xaf88,0xaf90,0xaf91,0xaf95,0xaf9c,
-0xafb8,0xafb9,0xafbc,0xafc0,0xafc7,0xafc8,0xafc9,0xafcb,
-0xafcd,0xafce,0xafd4,0xafdc,0xafe8,0xafe9,0xaff0,0xaff1,
-0xaff4,0xaff8,0xb000,0xb001,0xb004,0xb00c,0xb010,0xb014,
-0xb01c,0xb01d,0xb028,0xb044,0xb045,0xb048,0xb04a,0xb04c,
-0xb04e,0xb053,0xb054,0xb055,0xb057,0xb059,0xcfcc,0xcfcd,
-0xcfce,0xcfcf,0xcfd0,0xcfd1,0xcfd2,0xcfd3,0xcfd4,0xcfd5,
-0xcfd6,0xcfd7,0xcfd8,0xcfd9,0xcfda,0xcfdb,0xcfdc,0xcfdd,
-0xcfde,0xcfdf,0xcfe2,0xcfe3,0xcfe5,0xcfe6,0xcfe7,0xcfe9,
-0xcfea,0xcfeb,0xcfec,0xcfed,0xcfee,0xcfef,0xcff2,0xcff4,
-0xcff6,0xcff7,0xcff8,0xcff9,0xcffa,0xcffb,0xcffd,0xcffe,
-0xcfff,0xd001,0xd002,0xd003,0xd005,0xd006,0xd007,0xd008,
-0xd009,0xd00a,0xd00b,0xd00c,0xd00d,0xd00e,0xd00f,0xd010,
-0xd012,0xd013,0xd014,0xd015,0xd016,0xd017,0xd019,0xd01a,
-0xd01b,0xd01c,0xd01d,0xd01e,0xd01f,0xd020,0xd021,0xd022,
-0xd023,0xd024,0xd025,0xd026,0xd027,0xd028,0xd029,0xd02a,
-0xd02b,0xd02c,0xb05d,0xb07c,0xb07d,0xb080,0xb084,0xb08c,
-0xb08d,0xb08f,0xb091,0xb098,0xb099,0xb09a,0xb09c,0xb09f,
-0xb0a0,0xb0a1,0xb0a2,0xb0a8,0xb0a9,0xb0ab,0xb0ac,0xb0ad,
-0xb0ae,0xb0af,0xb0b1,0xb0b3,0xb0b4,0xb0b5,0xb0b8,0xb0bc,
-0xb0c4,0xb0c5,0xb0c7,0xb0c8,0xb0c9,0xb0d0,0xb0d1,0xb0d4,
-0xb0d8,0xb0e0,0xb0e5,0xb108,0xb109,0xb10b,0xb10c,0xb110,
-0xb112,0xb113,0xb118,0xb119,0xb11b,0xb11c,0xb11d,0xb123,
-0xb124,0xb125,0xb128,0xb12c,0xb134,0xb135,0xb137,0xb138,
-0xb139,0xb140,0xb141,0xb144,0xb148,0xb150,0xb151,0xb154,
-0xb155,0xb158,0xb15c,0xb160,0xb178,0xb179,0xb17c,0xb180,
-0xb182,0xb188,0xb189,0xb18b,0xb18d,0xb192,0xb193,0xb194,
-0xb198,0xb19c,0xb1a8,0xb1cc,0xb1d0,0xb1d4,0xb1dc,0xb1dd,
-0xd02e,0xd02f,0xd030,0xd031,0xd032,0xd033,0xd036,0xd037,
-0xd039,0xd03a,0xd03b,0xd03d,0xd03e,0xd03f,0xd040,0xd041,
-0xd042,0xd043,0xd046,0xd048,0xd04a,0xd04b,0xd04c,0xd04d,
-0xd04e,0xd04f,0xd051,0xd052,0xd053,0xd055,0xd056,0xd057,
-0xd059,0xd05a,0xd05b,0xd05c,0xd05d,0xd05e,0xd05f,0xd061,
-0xd062,0xd063,0xd064,0xd065,0xd066,0xd067,0xd068,0xd069,
-0xd06a,0xd06b,0xd06e,0xd06f,0xd071,0xd072,0xd073,0xd075,
-0xd076,0xd077,0xd078,0xd079,0xd07a,0xd07b,0xd07e,0xd07f,
-0xd080,0xd082,0xd083,0xd084,0xd085,0xd086,0xd087,0xd088,
-0xd089,0xd08a,0xd08b,0xd08c,0xd08d,0xd08e,0xd08f,0xd090,
-0xd091,0xd092,0xd093,0xd094,0xb1df,0xb1e8,0xb1e9,0xb1ec,
-0xb1f0,0xb1f9,0xb1fb,0xb1fd,0xb204,0xb205,0xb208,0xb20b,
-0xb20c,0xb214,0xb215,0xb217,0xb219,0xb220,0xb234,0xb23c,
-0xb258,0xb25c,0xb260,0xb268,0xb269,0xb274,0xb275,0xb27c,
-0xb284,0xb285,0xb289,0xb290,0xb291,0xb294,0xb298,0xb299,
-0xb29a,0xb2a0,0xb2a1,0xb2a3,0xb2a5,0xb2a6,0xb2aa,0xb2ac,
-0xb2b0,0xb2b4,0xb2c8,0xb2c9,0xb2cc,0xb2d0,0xb2d2,0xb2d8,
-0xb2d9,0xb2db,0xb2dd,0xb2e2,0xb2e4,0xb2e5,0xb2e6,0xb2e8,
-0xb2eb,0xb2ec,0xb2ed,0xb2ee,0xb2ef,0xb2f3,0xb2f4,0xb2f5,
-0xb2f7,0xb2f8,0xb2f9,0xb2fa,0xb2fb,0xb2ff,0xb300,0xb301,
-0xb304,0xb308,0xb310,0xb311,0xb313,0xb314,0xb315,0xb31c,
-0xb354,0xb355,0xb356,0xb358,0xb35b,0xb35c,0xb35e,0xb35f,
-0xb364,0xb365,0xd095,0xd096,0xd097,0xd098,0xd099,0xd09a,
-0xd09b,0xd09c,0xd09d,0xd09e,0xd09f,0xd0a0,0xd0a1,0xd0a2,
-0xd0a3,0xd0a6,0xd0a7,0xd0a9,0xd0aa,0xd0ab,0xd0ad,0xd0ae,
-0xd0af,0xd0b0,0xd0b1,0xd0b2,0xd0b3,0xd0b6,0xd0b8,0xd0ba,
-0xd0bb,0xd0bc,0xd0bd,0xd0be,0xd0bf,0xd0c2,0xd0c3,0xd0c5,
-0xd0c6,0xd0c7,0xd0ca,0xd0cb,0xd0cc,0xd0cd,0xd0ce,0xd0cf,
-0xd0d2,0xd0d6,0xd0d7,0xd0d8,0xd0d9,0xd0da,0xd0db,0xd0de,
-0xd0df,0xd0e1,0xd0e2,0xd0e3,0xd0e5,0xd0e6,0xd0e7,0xd0e8,
-0xd0e9,0xd0ea,0xd0eb,0xd0ee,0xd0f2,0xd0f3,0xd0f4,0xd0f5,
-0xd0f6,0xd0f7,0xd0f9,0xd0fa,0xd0fb,0xd0fc,0xd0fd,0xd0fe,
-0xd0ff,0xd100,0xd101,0xd102,0xd103,0xd104,0xb367,0xb369,
-0xb36b,0xb36e,0xb370,0xb371,0xb374,0xb378,0xb380,0xb381,
-0xb383,0xb384,0xb385,0xb38c,0xb390,0xb394,0xb3a0,0xb3a1,
-0xb3a8,0xb3ac,0xb3c4,0xb3c5,0xb3c8,0xb3cb,0xb3cc,0xb3ce,
-0xb3d0,0xb3d4,0xb3d5,0xb3d7,0xb3d9,0xb3db,0xb3dd,0xb3e0,
-0xb3e4,0xb3e8,0xb3fc,0xb410,0xb418,0xb41c,0xb420,0xb428,
-0xb429,0xb42b,0xb434,0xb450,0xb451,0xb454,0xb458,0xb460,
-0xb461,0xb463,0xb465,0xb46c,0xb480,0xb488,0xb49d,0xb4a4,
-0xb4a8,0xb4ac,0xb4b5,0xb4b7,0xb4b9,0xb4c0,0xb4c4,0xb4c8,
-0xb4d0,0xb4d5,0xb4dc,0xb4dd,0xb4e0,0xb4e3,0xb4e4,0xb4e6,
-0xb4ec,0xb4ed,0xb4ef,0xb4f1,0xb4f8,0xb514,0xb515,0xb518,
-0xb51b,0xb51c,0xb524,0xb525,0xb527,0xb528,0xb529,0xb52a,
-0xb530,0xb531,0xb534,0xb538,0xd105,0xd106,0xd107,0xd108,
-0xd109,0xd10a,0xd10b,0xd10c,0xd10e,0xd10f,0xd110,0xd111,
-0xd112,0xd113,0xd114,0xd115,0xd116,0xd117,0xd118,0xd119,
-0xd11a,0xd11b,0xd11c,0xd11d,0xd11e,0xd11f,0xd120,0xd121,
-0xd122,0xd123,0xd124,0xd125,0xd126,0xd127,0xd128,0xd129,
-0xd12a,0xd12b,0xd12c,0xd12d,0xd12e,0xd12f,0xd132,0xd133,
-0xd135,0xd136,0xd137,0xd139,0xd13b,0xd13c,0xd13d,0xd13e,
-0xd13f,0xd142,0xd146,0xd147,0xd148,0xd149,0xd14a,0xd14b,
-0xd14e,0xd14f,0xd151,0xd152,0xd153,0xd155,0xd156,0xd157,
-0xd158,0xd159,0xd15a,0xd15b,0xd15e,0xd160,0xd162,0xd163,
-0xd164,0xd165,0xd166,0xd167,0xd169,0xd16a,0xd16b,0xd16d,
-0xb540,0xb541,0xb543,0xb544,0xb545,0xb54b,0xb54c,0xb54d,
-0xb550,0xb554,0xb55c,0xb55d,0xb55f,0xb560,0xb561,0xb5a0,
-0xb5a1,0xb5a4,0xb5a8,0xb5aa,0xb5ab,0xb5b0,0xb5b1,0xb5b3,
-0xb5b4,0xb5b5,0xb5bb,0xb5bc,0xb5bd,0xb5c0,0xb5c4,0xb5cc,
-0xb5cd,0xb5cf,0xb5d0,0xb5d1,0xb5d8,0xb5ec,0xb610,0xb611,
-0xb614,0xb618,0xb625,0xb62c,0xb634,0xb648,0xb664,0xb668,
-0xb69c,0xb69d,0xb6a0,0xb6a4,0xb6ab,0xb6ac,0xb6b1,0xb6d4,
-0xb6f0,0xb6f4,0xb6f8,0xb700,0xb701,0xb705,0xb728,0xb729,
-0xb72c,0xb72f,0xb730,0xb738,0xb739,0xb73b,0xb744,0xb748,
-0xb74c,0xb754,0xb755,0xb760,0xb764,0xb768,0xb770,0xb771,
-0xb773,0xb775,0xb77c,0xb77d,0xb780,0xb784,0xb78c,0xb78d,
-0xb78f,0xb790,0xb791,0xb792,0xb796,0xb797,0xd16e,0xd16f,
-0xd170,0xd171,0xd172,0xd173,0xd174,0xd175,0xd176,0xd177,
-0xd178,0xd179,0xd17a,0xd17b,0xd17d,0xd17e,0xd17f,0xd180,
-0xd181,0xd182,0xd183,0xd185,0xd186,0xd187,0xd189,0xd18a,
-0xd18b,0xd18c,0xd18d,0xd18e,0xd18f,0xd190,0xd191,0xd192,
-0xd193,0xd194,0xd195,0xd196,0xd197,0xd198,0xd199,0xd19a,
-0xd19b,0xd19c,0xd19d,0xd19e,0xd19f,0xd1a2,0xd1a3,0xd1a5,
-0xd1a6,0xd1a7,0xd1a9,0xd1aa,0xd1ab,0xd1ac,0xd1ad,0xd1ae,
-0xd1af,0xd1b2,0xd1b4,0xd1b6,0xd1b7,0xd1b8,0xd1b9,0xd1bb,
-0xd1bd,0xd1be,0xd1bf,0xd1c1,0xd1c2,0xd1c3,0xd1c4,0xd1c5,
-0xd1c6,0xd1c7,0xd1c8,0xd1c9,0xd1ca,0xd1cb,0xd1cc,0xd1cd,
-0xd1ce,0xd1cf,0xb798,0xb799,0xb79c,0xb7a0,0xb7a8,0xb7a9,
-0xb7ab,0xb7ac,0xb7ad,0xb7b4,0xb7b5,0xb7b8,0xb7c7,0xb7c9,
-0xb7ec,0xb7ed,0xb7f0,0xb7f4,0xb7fc,0xb7fd,0xb7ff,0xb800,
-0xb801,0xb807,0xb808,0xb809,0xb80c,0xb810,0xb818,0xb819,
-0xb81b,0xb81d,0xb824,0xb825,0xb828,0xb82c,0xb834,0xb835,
-0xb837,0xb838,0xb839,0xb840,0xb844,0xb851,0xb853,0xb85c,
-0xb85d,0xb860,0xb864,0xb86c,0xb86d,0xb86f,0xb871,0xb878,
-0xb87c,0xb88d,0xb8a8,0xb8b0,0xb8b4,0xb8b8,0xb8c0,0xb8c1,
-0xb8c3,0xb8c5,0xb8cc,0xb8d0,0xb8d4,0xb8dd,0xb8df,0xb8e1,
-0xb8e8,0xb8e9,0xb8ec,0xb8f0,0xb8f8,0xb8f9,0xb8fb,0xb8fd,
-0xb904,0xb918,0xb920,0xb93c,0xb93d,0xb940,0xb944,0xb94c,
-0xb94f,0xb951,0xb958,0xb959,0xb95c,0xb960,0xb968,0xb969,
-0xd1d0,0xd1d1,0xd1d2,0xd1d3,0xd1d4,0xd1d5,0xd1d6,0xd1d7,
-0xd1d9,0xd1da,0xd1db,0xd1dc,0xd1dd,0xd1de,0xd1df,0xd1e0,
-0xd1e1,0xd1e2,0xd1e3,0xd1e4,0xd1e5,0xd1e6,0xd1e7,0xd1e8,
-0xd1e9,0xd1ea,0xd1eb,0xd1ec,0xd1ed,0xd1ee,0xd1ef,0xd1f0,
-0xd1f1,0xd1f2,0xd1f3,0xd1f5,0xd1f6,0xd1f7,0xd1f9,0xd1fa,
-0xd1fb,0xd1fc,0xd1fd,0xd1fe,0xd1ff,0xd200,0xd201,0xd202,
-0xd203,0xd204,0xd205,0xd206,0xd208,0xd20a,0xd20b,0xd20c,
-0xd20d,0xd20e,0xd20f,0xd211,0xd212,0xd213,0xd214,0xd215,
-0xd216,0xd217,0xd218,0xd219,0xd21a,0xd21b,0xd21c,0xd21d,
-0xd21e,0xd21f,0xd220,0xd221,0xd222,0xd223,0xd224,0xd225,
-0xd226,0xd227,0xd228,0xd229,0xb96b,0xb96d,0xb974,0xb975,
-0xb978,0xb97c,0xb984,0xb985,0xb987,0xb989,0xb98a,0xb98d,
-0xb98e,0xb9ac,0xb9ad,0xb9b0,0xb9b4,0xb9bc,0xb9bd,0xb9bf,
-0xb9c1,0xb9c8,0xb9c9,0xb9cc,0xb9ce,0xb9cf,0xb9d0,0xb9d1,
-0xb9d2,0xb9d8,0xb9d9,0xb9db,0xb9dd,0xb9de,0xb9e1,0xb9e3,
-0xb9e4,0xb9e5,0xb9e8,0xb9ec,0xb9f4,0xb9f5,0xb9f7,0xb9f8,
-0xb9f9,0xb9fa,0xba00,0xba01,0xba08,0xba15,0xba38,0xba39,
-0xba3c,0xba40,0xba42,0xba48,0xba49,0xba4b,0xba4d,0xba4e,
-0xba53,0xba54,0xba55,0xba58,0xba5c,0xba64,0xba65,0xba67,
-0xba68,0xba69,0xba70,0xba71,0xba74,0xba78,0xba83,0xba84,
-0xba85,0xba87,0xba8c,0xbaa8,0xbaa9,0xbaab,0xbaac,0xbab0,
-0xbab2,0xbab8,0xbab9,0xbabb,0xbabd,0xbac4,0xbac8,0xbad8,
-0xbad9,0xbafc,0xd22a,0xd22b,0xd22e,0xd22f,0xd231,0xd232,
-0xd233,0xd235,0xd236,0xd237,0xd238,0xd239,0xd23a,0xd23b,
-0xd23e,0xd240,0xd242,0xd243,0xd244,0xd245,0xd246,0xd247,
-0xd249,0xd24a,0xd24b,0xd24c,0xd24d,0xd24e,0xd24f,0xd250,
-0xd251,0xd252,0xd253,0xd254,0xd255,0xd256,0xd257,0xd258,
-0xd259,0xd25a,0xd25b,0xd25d,0xd25e,0xd25f,0xd260,0xd261,
-0xd262,0xd263,0xd265,0xd266,0xd267,0xd268,0xd269,0xd26a,
-0xd26b,0xd26c,0xd26d,0xd26e,0xd26f,0xd270,0xd271,0xd272,
-0xd273,0xd274,0xd275,0xd276,0xd277,0xd278,0xd279,0xd27a,
-0xd27b,0xd27c,0xd27d,0xd27e,0xd27f,0xd282,0xd283,0xd285,
-0xd286,0xd287,0xd289,0xd28a,0xd28b,0xd28c,0xbb00,0xbb04,
-0xbb0d,0xbb0f,0xbb11,0xbb18,0xbb1c,0xbb20,0xbb29,0xbb2b,
-0xbb34,0xbb35,0xbb36,0xbb38,0xbb3b,0xbb3c,0xbb3d,0xbb3e,
-0xbb44,0xbb45,0xbb47,0xbb49,0xbb4d,0xbb4f,0xbb50,0xbb54,
-0xbb58,0xbb61,0xbb63,0xbb6c,0xbb88,0xbb8c,0xbb90,0xbba4,
-0xbba8,0xbbac,0xbbb4,0xbbb7,0xbbc0,0xbbc4,0xbbc8,0xbbd0,
-0xbbd3,0xbbf8,0xbbf9,0xbbfc,0xbbff,0xbc00,0xbc02,0xbc08,
-0xbc09,0xbc0b,0xbc0c,0xbc0d,0xbc0f,0xbc11,0xbc14,0xbc15,
-0xbc16,0xbc17,0xbc18,0xbc1b,0xbc1c,0xbc1d,0xbc1e,0xbc1f,
-0xbc24,0xbc25,0xbc27,0xbc29,0xbc2d,0xbc30,0xbc31,0xbc34,
-0xbc38,0xbc40,0xbc41,0xbc43,0xbc44,0xbc45,0xbc49,0xbc4c,
-0xbc4d,0xbc50,0xbc5d,0xbc84,0xbc85,0xbc88,0xbc8b,0xbc8c,
-0xbc8e,0xbc94,0xbc95,0xbc97,0xd28d,0xd28e,0xd28f,0xd292,
-0xd293,0xd294,0xd296,0xd297,0xd298,0xd299,0xd29a,0xd29b,
-0xd29d,0xd29e,0xd29f,0xd2a1,0xd2a2,0xd2a3,0xd2a5,0xd2a6,
-0xd2a7,0xd2a8,0xd2a9,0xd2aa,0xd2ab,0xd2ad,0xd2ae,0xd2af,
-0xd2b0,0xd2b2,0xd2b3,0xd2b4,0xd2b5,0xd2b6,0xd2b7,0xd2ba,
-0xd2bb,0xd2bd,0xd2be,0xd2c1,0xd2c3,0xd2c4,0xd2c5,0xd2c6,
-0xd2c7,0xd2ca,0xd2cc,0xd2cd,0xd2ce,0xd2cf,0xd2d0,0xd2d1,
-0xd2d2,0xd2d3,0xd2d5,0xd2d6,0xd2d7,0xd2d9,0xd2da,0xd2db,
-0xd2dd,0xd2de,0xd2df,0xd2e0,0xd2e1,0xd2e2,0xd2e3,0xd2e6,
-0xd2e7,0xd2e8,0xd2e9,0xd2ea,0xd2eb,0xd2ec,0xd2ed,0xd2ee,
-0xd2ef,0xd2f2,0xd2f3,0xd2f5,0xd2f6,0xd2f7,0xd2f9,0xd2fa,
-0xbc99,0xbc9a,0xbca0,0xbca1,0xbca4,0xbca7,0xbca8,0xbcb0,
-0xbcb1,0xbcb3,0xbcb4,0xbcb5,0xbcbc,0xbcbd,0xbcc0,0xbcc4,
-0xbccd,0xbccf,0xbcd0,0xbcd1,0xbcd5,0xbcd8,0xbcdc,0xbcf4,
-0xbcf5,0xbcf6,0xbcf8,0xbcfc,0xbd04,0xbd05,0xbd07,0xbd09,
-0xbd10,0xbd14,0xbd24,0xbd2c,0xbd40,0xbd48,0xbd49,0xbd4c,
-0xbd50,0xbd58,0xbd59,0xbd64,0xbd68,0xbd80,0xbd81,0xbd84,
-0xbd87,0xbd88,0xbd89,0xbd8a,0xbd90,0xbd91,0xbd93,0xbd95,
-0xbd99,0xbd9a,0xbd9c,0xbda4,0xbdb0,0xbdb8,0xbdd4,0xbdd5,
-0xbdd8,0xbddc,0xbde9,0xbdf0,0xbdf4,0xbdf8,0xbe00,0xbe03,
-0xbe05,0xbe0c,0xbe0d,0xbe10,0xbe14,0xbe1c,0xbe1d,0xbe1f,
-0xbe44,0xbe45,0xbe48,0xbe4c,0xbe4e,0xbe54,0xbe55,0xbe57,
-0xbe59,0xbe5a,0xbe5b,0xbe60,0xbe61,0xbe64,0xd2fb,0xd2fc,
-0xd2fd,0xd2fe,0xd2ff,0xd302,0xd304,0xd306,0xd307,0xd308,
-0xd309,0xd30a,0xd30b,0xd30f,0xd311,0xd312,0xd313,0xd315,
-0xd317,0xd318,0xd319,0xd31a,0xd31b,0xd31e,0xd322,0xd323,
-0xd324,0xd326,0xd327,0xd32a,0xd32b,0xd32d,0xd32e,0xd32f,
-0xd331,0xd332,0xd333,0xd334,0xd335,0xd336,0xd337,0xd33a,
-0xd33e,0xd33f,0xd340,0xd341,0xd342,0xd343,0xd346,0xd347,
-0xd348,0xd349,0xd34a,0xd34b,0xd34c,0xd34d,0xd34e,0xd34f,
-0xd350,0xd351,0xd352,0xd353,0xd354,0xd355,0xd356,0xd357,
-0xd358,0xd359,0xd35a,0xd35b,0xd35c,0xd35d,0xd35e,0xd35f,
-0xd360,0xd361,0xd362,0xd363,0xd364,0xd365,0xd366,0xd367,
-0xd368,0xd369,0xbe68,0xbe6a,0xbe70,0xbe71,0xbe73,0xbe74,
-0xbe75,0xbe7b,0xbe7c,0xbe7d,0xbe80,0xbe84,0xbe8c,0xbe8d,
-0xbe8f,0xbe90,0xbe91,0xbe98,0xbe99,0xbea8,0xbed0,0xbed1,
-0xbed4,0xbed7,0xbed8,0xbee0,0xbee3,0xbee4,0xbee5,0xbeec,
-0xbf01,0xbf08,0xbf09,0xbf18,0xbf19,0xbf1b,0xbf1c,0xbf1d,
-0xbf40,0xbf41,0xbf44,0xbf48,0xbf50,0xbf51,0xbf55,0xbf94,
-0xbfb0,0xbfc5,0xbfcc,0xbfcd,0xbfd0,0xbfd4,0xbfdc,0xbfdf,
-0xbfe1,0xc03c,0xc051,0xc058,0xc05c,0xc060,0xc068,0xc069,
-0xc090,0xc091,0xc094,0xc098,0xc0a0,0xc0a1,0xc0a3,0xc0a5,
-0xc0ac,0xc0ad,0xc0af,0xc0b0,0xc0b3,0xc0b4,0xc0b5,0xc0b6,
-0xc0bc,0xc0bd,0xc0bf,0xc0c0,0xc0c1,0xc0c5,0xc0c8,0xc0c9,
-0xc0cc,0xc0d0,0xc0d8,0xc0d9,0xc0db,0xc0dc,0xc0dd,0xc0e4,
-0xd36a,0xd36b,0xd36c,0xd36d,0xd36e,0xd36f,0xd370,0xd371,
-0xd372,0xd373,0xd374,0xd375,0xd376,0xd377,0xd378,0xd379,
-0xd37a,0xd37b,0xd37e,0xd37f,0xd381,0xd382,0xd383,0xd385,
-0xd386,0xd387,0xd388,0xd389,0xd38a,0xd38b,0xd38e,0xd392,
-0xd393,0xd394,0xd395,0xd396,0xd397,0xd39a,0xd39b,0xd39d,
-0xd39e,0xd39f,0xd3a1,0xd3a2,0xd3a3,0xd3a4,0xd3a5,0xd3a6,
-0xd3a7,0xd3aa,0xd3ac,0xd3ae,0xd3af,0xd3b0,0xd3b1,0xd3b2,
-0xd3b3,0xd3b5,0xd3b6,0xd3b7,0xd3b9,0xd3ba,0xd3bb,0xd3bd,
-0xd3be,0xd3bf,0xd3c0,0xd3c1,0xd3c2,0xd3c3,0xd3c6,0xd3c7,
-0xd3ca,0xd3cb,0xd3cc,0xd3cd,0xd3ce,0xd3cf,0xd3d1,0xd3d2,
-0xd3d3,0xd3d4,0xd3d5,0xd3d6,0xc0e5,0xc0e8,0xc0ec,0xc0f4,
-0xc0f5,0xc0f7,0xc0f9,0xc100,0xc104,0xc108,0xc110,0xc115,
-0xc11c,0xc11d,0xc11e,0xc11f,0xc120,0xc123,0xc124,0xc126,
-0xc127,0xc12c,0xc12d,0xc12f,0xc130,0xc131,0xc136,0xc138,
-0xc139,0xc13c,0xc140,0xc148,0xc149,0xc14b,0xc14c,0xc14d,
-0xc154,0xc155,0xc158,0xc15c,0xc164,0xc165,0xc167,0xc168,
-0xc169,0xc170,0xc174,0xc178,0xc185,0xc18c,0xc18d,0xc18e,
-0xc190,0xc194,0xc196,0xc19c,0xc19d,0xc19f,0xc1a1,0xc1a5,
-0xc1a8,0xc1a9,0xc1ac,0xc1b0,0xc1bd,0xc1c4,0xc1c8,0xc1cc,
-0xc1d4,0xc1d7,0xc1d8,0xc1e0,0xc1e4,0xc1e8,0xc1f0,0xc1f1,
-0xc1f3,0xc1fc,0xc1fd,0xc200,0xc204,0xc20c,0xc20d,0xc20f,
-0xc211,0xc218,0xc219,0xc21c,0xc21f,0xc220,0xc228,0xc229,
-0xc22b,0xc22d,0xd3d7,0xd3d9,0xd3da,0xd3db,0xd3dc,0xd3dd,
-0xd3de,0xd3df,0xd3e0,0xd3e2,0xd3e4,0xd3e5,0xd3e6,0xd3e7,
-0xd3e8,0xd3e9,0xd3ea,0xd3eb,0xd3ee,0xd3ef,0xd3f1,0xd3f2,
-0xd3f3,0xd3f5,0xd3f6,0xd3f7,0xd3f8,0xd3f9,0xd3fa,0xd3fb,
-0xd3fe,0xd400,0xd402,0xd403,0xd404,0xd405,0xd406,0xd407,
-0xd409,0xd40a,0xd40b,0xd40c,0xd40d,0xd40e,0xd40f,0xd410,
-0xd411,0xd412,0xd413,0xd414,0xd415,0xd416,0xd417,0xd418,
-0xd419,0xd41a,0xd41b,0xd41c,0xd41e,0xd41f,0xd420,0xd421,
-0xd422,0xd423,0xd424,0xd425,0xd426,0xd427,0xd428,0xd429,
-0xd42a,0xd42b,0xd42c,0xd42d,0xd42e,0xd42f,0xd430,0xd431,
-0xd432,0xd433,0xd434,0xd435,0xd436,0xd437,0xc22f,0xc231,
-0xc232,0xc234,0xc248,0xc250,0xc251,0xc254,0xc258,0xc260,
-0xc265,0xc26c,0xc26d,0xc270,0xc274,0xc27c,0xc27d,0xc27f,
-0xc281,0xc288,0xc289,0xc290,0xc298,0xc29b,0xc29d,0xc2a4,
-0xc2a5,0xc2a8,0xc2ac,0xc2ad,0xc2b4,0xc2b5,0xc2b7,0xc2b9,
-0xc2dc,0xc2dd,0xc2e0,0xc2e3,0xc2e4,0xc2eb,0xc2ec,0xc2ed,
-0xc2ef,0xc2f1,0xc2f6,0xc2f8,0xc2f9,0xc2fb,0xc2fc,0xc300,
-0xc308,0xc309,0xc30c,0xc30d,0xc313,0xc314,0xc315,0xc318,
-0xc31c,0xc324,0xc325,0xc328,0xc329,0xc345,0xc368,0xc369,
-0xc36c,0xc370,0xc372,0xc378,0xc379,0xc37c,0xc37d,0xc384,
-0xc388,0xc38c,0xc3c0,0xc3d8,0xc3d9,0xc3dc,0xc3df,0xc3e0,
-0xc3e2,0xc3e8,0xc3e9,0xc3ed,0xc3f4,0xc3f5,0xc3f8,0xc408,
-0xc410,0xc424,0xc42c,0xc430,0xd438,0xd439,0xd43a,0xd43b,
-0xd43c,0xd43d,0xd43e,0xd43f,0xd441,0xd442,0xd443,0xd445,
-0xd446,0xd447,0xd448,0xd449,0xd44a,0xd44b,0xd44c,0xd44d,
-0xd44e,0xd44f,0xd450,0xd451,0xd452,0xd453,0xd454,0xd455,
-0xd456,0xd457,0xd458,0xd459,0xd45a,0xd45b,0xd45d,0xd45e,
-0xd45f,0xd461,0xd462,0xd463,0xd465,0xd466,0xd467,0xd468,
-0xd469,0xd46a,0xd46b,0xd46c,0xd46e,0xd470,0xd471,0xd472,
-0xd473,0xd474,0xd475,0xd476,0xd477,0xd47a,0xd47b,0xd47d,
-0xd47e,0xd481,0xd483,0xd484,0xd485,0xd486,0xd487,0xd48a,
-0xd48c,0xd48e,0xd48f,0xd490,0xd491,0xd492,0xd493,0xd495,
-0xd496,0xd497,0xd498,0xd499,0xd49a,0xd49b,0xd49c,0xd49d,
-0xc434,0xc43c,0xc43d,0xc448,0xc464,0xc465,0xc468,0xc46c,
-0xc474,0xc475,0xc479,0xc480,0xc494,0xc49c,0xc4b8,0xc4bc,
-0xc4e9,0xc4f0,0xc4f1,0xc4f4,0xc4f8,0xc4fa,0xc4ff,0xc500,
-0xc501,0xc50c,0xc510,0xc514,0xc51c,0xc528,0xc529,0xc52c,
-0xc530,0xc538,0xc539,0xc53b,0xc53d,0xc544,0xc545,0xc548,
-0xc549,0xc54a,0xc54c,0xc54d,0xc54e,0xc553,0xc554,0xc555,
-0xc557,0xc558,0xc559,0xc55d,0xc55e,0xc560,0xc561,0xc564,
-0xc568,0xc570,0xc571,0xc573,0xc574,0xc575,0xc57c,0xc57d,
-0xc580,0xc584,0xc587,0xc58c,0xc58d,0xc58f,0xc591,0xc595,
-0xc597,0xc598,0xc59c,0xc5a0,0xc5a9,0xc5b4,0xc5b5,0xc5b8,
-0xc5b9,0xc5bb,0xc5bc,0xc5bd,0xc5be,0xc5c4,0xc5c5,0xc5c6,
-0xc5c7,0xc5c8,0xc5c9,0xc5ca,0xc5cc,0xc5ce,0xd49e,0xd49f,
-0xd4a0,0xd4a1,0xd4a2,0xd4a3,0xd4a4,0xd4a5,0xd4a6,0xd4a7,
-0xd4a8,0xd4aa,0xd4ab,0xd4ac,0xd4ad,0xd4ae,0xd4af,0xd4b0,
-0xd4b1,0xd4b2,0xd4b3,0xd4b4,0xd4b5,0xd4b6,0xd4b7,0xd4b8,
-0xd4b9,0xd4ba,0xd4bb,0xd4bc,0xd4bd,0xd4be,0xd4bf,0xd4c0,
-0xd4c1,0xd4c2,0xd4c3,0xd4c4,0xd4c5,0xd4c6,0xd4c7,0xd4c8,
-0xd4c9,0xd4ca,0xd4cb,0xd4cd,0xd4ce,0xd4cf,0xd4d1,0xd4d2,
-0xd4d3,0xd4d5,0xd4d6,0xd4d7,0xd4d8,0xd4d9,0xd4da,0xd4db,
-0xd4dd,0xd4de,0xd4e0,0xd4e1,0xd4e2,0xd4e3,0xd4e4,0xd4e5,
-0xd4e6,0xd4e7,0xd4e9,0xd4ea,0xd4eb,0xd4ed,0xd4ee,0xd4ef,
-0xd4f1,0xd4f2,0xd4f3,0xd4f4,0xd4f5,0xd4f6,0xd4f7,0xd4f9,
-0xd4fa,0xd4fc,0xc5d0,0xc5d1,0xc5d4,0xc5d8,0xc5e0,0xc5e1,
-0xc5e3,0xc5e5,0xc5ec,0xc5ed,0xc5ee,0xc5f0,0xc5f4,0xc5f6,
-0xc5f7,0xc5fc,0xc5fd,0xc5fe,0xc5ff,0xc600,0xc601,0xc605,
-0xc606,0xc607,0xc608,0xc60c,0xc610,0xc618,0xc619,0xc61b,
-0xc61c,0xc624,0xc625,0xc628,0xc62c,0xc62d,0xc62e,0xc630,
-0xc633,0xc634,0xc635,0xc637,0xc639,0xc63b,0xc640,0xc641,
-0xc644,0xc648,0xc650,0xc651,0xc653,0xc654,0xc655,0xc65c,
-0xc65d,0xc660,0xc66c,0xc66f,0xc671,0xc678,0xc679,0xc67c,
-0xc680,0xc688,0xc689,0xc68b,0xc68d,0xc694,0xc695,0xc698,
-0xc69c,0xc6a4,0xc6a5,0xc6a7,0xc6a9,0xc6b0,0xc6b1,0xc6b4,
-0xc6b8,0xc6b9,0xc6ba,0xc6c0,0xc6c1,0xc6c3,0xc6c5,0xc6cc,
-0xc6cd,0xc6d0,0xc6d4,0xc6dc,0xc6dd,0xc6e0,0xc6e1,0xc6e8,
-0xd4fe,0xd4ff,0xd500,0xd501,0xd502,0xd503,0xd505,0xd506,
-0xd507,0xd509,0xd50a,0xd50b,0xd50d,0xd50e,0xd50f,0xd510,
-0xd511,0xd512,0xd513,0xd516,0xd518,0xd519,0xd51a,0xd51b,
-0xd51c,0xd51d,0xd51e,0xd51f,0xd520,0xd521,0xd522,0xd523,
-0xd524,0xd525,0xd526,0xd527,0xd528,0xd529,0xd52a,0xd52b,
-0xd52c,0xd52d,0xd52e,0xd52f,0xd530,0xd531,0xd532,0xd533,
-0xd534,0xd535,0xd536,0xd537,0xd538,0xd539,0xd53a,0xd53b,
-0xd53e,0xd53f,0xd541,0xd542,0xd543,0xd545,0xd546,0xd547,
-0xd548,0xd549,0xd54a,0xd54b,0xd54e,0xd550,0xd552,0xd553,
-0xd554,0xd555,0xd556,0xd557,0xd55a,0xd55b,0xd55d,0xd55e,
-0xd55f,0xd561,0xd562,0xd563,0xc6e9,0xc6ec,0xc6f0,0xc6f8,
-0xc6f9,0xc6fd,0xc704,0xc705,0xc708,0xc70c,0xc714,0xc715,
-0xc717,0xc719,0xc720,0xc721,0xc724,0xc728,0xc730,0xc731,
-0xc733,0xc735,0xc737,0xc73c,0xc73d,0xc740,0xc744,0xc74a,
-0xc74c,0xc74d,0xc74f,0xc751,0xc752,0xc753,0xc754,0xc755,
-0xc756,0xc757,0xc758,0xc75c,0xc760,0xc768,0xc76b,0xc774,
-0xc775,0xc778,0xc77c,0xc77d,0xc77e,0xc783,0xc784,0xc785,
-0xc787,0xc788,0xc789,0xc78a,0xc78e,0xc790,0xc791,0xc794,
-0xc796,0xc797,0xc798,0xc79a,0xc7a0,0xc7a1,0xc7a3,0xc7a4,
-0xc7a5,0xc7a6,0xc7ac,0xc7ad,0xc7b0,0xc7b4,0xc7bc,0xc7bd,
-0xc7bf,0xc7c0,0xc7c1,0xc7c8,0xc7c9,0xc7cc,0xc7ce,0xc7d0,
-0xc7d8,0xc7dd,0xc7e4,0xc7e8,0xc7ec,0xc800,0xc801,0xc804,
-0xc808,0xc80a,0xd564,0xd566,0xd567,0xd56a,0xd56c,0xd56e,
-0xd56f,0xd570,0xd571,0xd572,0xd573,0xd576,0xd577,0xd579,
-0xd57a,0xd57b,0xd57d,0xd57e,0xd57f,0xd580,0xd581,0xd582,
-0xd583,0xd586,0xd58a,0xd58b,0xd58c,0xd58d,0xd58e,0xd58f,
-0xd591,0xd592,0xd593,0xd594,0xd595,0xd596,0xd597,0xd598,
-0xd599,0xd59a,0xd59b,0xd59c,0xd59d,0xd59e,0xd59f,0xd5a0,
-0xd5a1,0xd5a2,0xd5a3,0xd5a4,0xd5a6,0xd5a7,0xd5a8,0xd5a9,
-0xd5aa,0xd5ab,0xd5ac,0xd5ad,0xd5ae,0xd5af,0xd5b0,0xd5b1,
-0xd5b2,0xd5b3,0xd5b4,0xd5b5,0xd5b6,0xd5b7,0xd5b8,0xd5b9,
-0xd5ba,0xd5bb,0xd5bc,0xd5bd,0xd5be,0xd5bf,0xd5c0,0xd5c1,
-0xd5c2,0xd5c3,0xd5c4,0xd5c5,0xd5c6,0xd5c7,0xc810,0xc811,
-0xc813,0xc815,0xc816,0xc81c,0xc81d,0xc820,0xc824,0xc82c,
-0xc82d,0xc82f,0xc831,0xc838,0xc83c,0xc840,0xc848,0xc849,
-0xc84c,0xc84d,0xc854,0xc870,0xc871,0xc874,0xc878,0xc87a,
-0xc880,0xc881,0xc883,0xc885,0xc886,0xc887,0xc88b,0xc88c,
-0xc88d,0xc894,0xc89d,0xc89f,0xc8a1,0xc8a8,0xc8bc,0xc8bd,
-0xc8c4,0xc8c8,0xc8cc,0xc8d4,0xc8d5,0xc8d7,0xc8d9,0xc8e0,
-0xc8e1,0xc8e4,0xc8f5,0xc8fc,0xc8fd,0xc900,0xc904,0xc905,
-0xc906,0xc90c,0xc90d,0xc90f,0xc911,0xc918,0xc92c,0xc934,
-0xc950,0xc951,0xc954,0xc958,0xc960,0xc961,0xc963,0xc96c,
-0xc970,0xc974,0xc97c,0xc988,0xc989,0xc98c,0xc990,0xc998,
-0xc999,0xc99b,0xc99d,0xc9c0,0xc9c1,0xc9c4,0xc9c7,0xc9c8,
-0xc9ca,0xc9d0,0xc9d1,0xc9d3,0xd5ca,0xd5cb,0xd5cd,0xd5ce,
-0xd5cf,0xd5d1,0xd5d3,0xd5d4,0xd5d5,0xd5d6,0xd5d7,0xd5da,
-0xd5dc,0xd5de,0xd5df,0xd5e0,0xd5e1,0xd5e2,0xd5e3,0xd5e6,
-0xd5e7,0xd5e9,0xd5ea,0xd5eb,0xd5ed,0xd5ee,0xd5ef,0xd5f0,
-0xd5f1,0xd5f2,0xd5f3,0xd5f6,0xd5f8,0xd5fa,0xd5fb,0xd5fc,
-0xd5fd,0xd5fe,0xd5ff,0xd602,0xd603,0xd605,0xd606,0xd607,
-0xd609,0xd60a,0xd60b,0xd60c,0xd60d,0xd60e,0xd60f,0xd612,
-0xd616,0xd617,0xd618,0xd619,0xd61a,0xd61b,0xd61d,0xd61e,
-0xd61f,0xd621,0xd622,0xd623,0xd625,0xd626,0xd627,0xd628,
-0xd629,0xd62a,0xd62b,0xd62c,0xd62e,0xd62f,0xd630,0xd631,
-0xd632,0xd633,0xd634,0xd635,0xd636,0xd637,0xd63a,0xd63b,
-0xc9d5,0xc9d6,0xc9d9,0xc9da,0xc9dc,0xc9dd,0xc9e0,0xc9e2,
-0xc9e4,0xc9e7,0xc9ec,0xc9ed,0xc9ef,0xc9f0,0xc9f1,0xc9f8,
-0xc9f9,0xc9fc,0xca00,0xca08,0xca09,0xca0b,0xca0c,0xca0d,
-0xca14,0xca18,0xca29,0xca4c,0xca4d,0xca50,0xca54,0xca5c,
-0xca5d,0xca5f,0xca60,0xca61,0xca68,0xca7d,0xca84,0xca98,
-0xcabc,0xcabd,0xcac0,0xcac4,0xcacc,0xcacd,0xcacf,0xcad1,
-0xcad3,0xcad8,0xcad9,0xcae0,0xcaec,0xcaf4,0xcb08,0xcb10,
-0xcb14,0xcb18,0xcb20,0xcb21,0xcb41,0xcb48,0xcb49,0xcb4c,
-0xcb50,0xcb58,0xcb59,0xcb5d,0xcb64,0xcb78,0xcb79,0xcb9c,
-0xcbb8,0xcbd4,0xcbe4,0xcbe7,0xcbe9,0xcc0c,0xcc0d,0xcc10,
-0xcc14,0xcc1c,0xcc1d,0xcc21,0xcc22,0xcc27,0xcc28,0xcc29,
-0xcc2c,0xcc2e,0xcc30,0xcc38,0xcc39,0xcc3b,0xd63d,0xd63e,
-0xd63f,0xd641,0xd642,0xd643,0xd644,0xd646,0xd647,0xd64a,
-0xd64c,0xd64e,0xd64f,0xd650,0xd652,0xd653,0xd656,0xd657,
-0xd659,0xd65a,0xd65b,0xd65d,0xd65e,0xd65f,0xd660,0xd661,
-0xd662,0xd663,0xd664,0xd665,0xd666,0xd668,0xd66a,0xd66b,
-0xd66c,0xd66d,0xd66e,0xd66f,0xd672,0xd673,0xd675,0xd676,
-0xd677,0xd678,0xd679,0xd67a,0xd67b,0xd67c,0xd67d,0xd67e,
-0xd67f,0xd680,0xd681,0xd682,0xd684,0xd686,0xd687,0xd688,
-0xd689,0xd68a,0xd68b,0xd68e,0xd68f,0xd691,0xd692,0xd693,
-0xd695,0xd696,0xd697,0xd698,0xd699,0xd69a,0xd69b,0xd69c,
-0xd69e,0xd6a0,0xd6a2,0xd6a3,0xd6a4,0xd6a5,0xd6a6,0xd6a7,
-0xd6a9,0xd6aa,0xcc3c,0xcc3d,0xcc3e,0xcc44,0xcc45,0xcc48,
-0xcc4c,0xcc54,0xcc55,0xcc57,0xcc58,0xcc59,0xcc60,0xcc64,
-0xcc66,0xcc68,0xcc70,0xcc75,0xcc98,0xcc99,0xcc9c,0xcca0,
-0xcca8,0xcca9,0xccab,0xccac,0xccad,0xccb4,0xccb5,0xccb8,
-0xccbc,0xccc4,0xccc5,0xccc7,0xccc9,0xccd0,0xccd4,0xcce4,
-0xccec,0xccf0,0xcd01,0xcd08,0xcd09,0xcd0c,0xcd10,0xcd18,
-0xcd19,0xcd1b,0xcd1d,0xcd24,0xcd28,0xcd2c,0xcd39,0xcd5c,
-0xcd60,0xcd64,0xcd6c,0xcd6d,0xcd6f,0xcd71,0xcd78,0xcd88,
-0xcd94,0xcd95,0xcd98,0xcd9c,0xcda4,0xcda5,0xcda7,0xcda9,
-0xcdb0,0xcdc4,0xcdcc,0xcdd0,0xcde8,0xcdec,0xcdf0,0xcdf8,
-0xcdf9,0xcdfb,0xcdfd,0xce04,0xce08,0xce0c,0xce14,0xce19,
-0xce20,0xce21,0xce24,0xce28,0xce30,0xce31,0xce33,0xce35,
-0xd6ab,0xd6ad,0xd6ae,0xd6af,0xd6b1,0xd6b2,0xd6b3,0xd6b4,
-0xd6b5,0xd6b6,0xd6b7,0xd6b8,0xd6ba,0xd6bc,0xd6bd,0xd6be,
-0xd6bf,0xd6c0,0xd6c1,0xd6c2,0xd6c3,0xd6c6,0xd6c7,0xd6c9,
-0xd6ca,0xd6cb,0xd6cd,0xd6ce,0xd6cf,0xd6d0,0xd6d2,0xd6d3,
-0xd6d5,0xd6d6,0xd6d8,0xd6da,0xd6db,0xd6dc,0xd6dd,0xd6de,
-0xd6df,0xd6e1,0xd6e2,0xd6e3,0xd6e5,0xd6e6,0xd6e7,0xd6e9,
-0xd6ea,0xd6eb,0xd6ec,0xd6ed,0xd6ee,0xd6ef,0xd6f1,0xd6f2,
-0xd6f3,0xd6f4,0xd6f6,0xd6f7,0xd6f8,0xd6f9,0xd6fa,0xd6fb,
-0xd6fe,0xd6ff,0xd701,0xd702,0xd703,0xd705,0xd706,0xd707,
-0xd708,0xd709,0xd70a,0xd70b,0xd70c,0xd70d,0xd70e,0xd70f,
-0xd710,0xd712,0xd713,0xd714,0xce58,0xce59,0xce5c,0xce5f,
-0xce60,0xce61,0xce68,0xce69,0xce6b,0xce6d,0xce74,0xce75,
-0xce78,0xce7c,0xce84,0xce85,0xce87,0xce89,0xce90,0xce91,
-0xce94,0xce98,0xcea0,0xcea1,0xcea3,0xcea4,0xcea5,0xceac,
-0xcead,0xcec1,0xcee4,0xcee5,0xcee8,0xceeb,0xceec,0xcef4,
-0xcef5,0xcef7,0xcef8,0xcef9,0xcf00,0xcf01,0xcf04,0xcf08,
-0xcf10,0xcf11,0xcf13,0xcf15,0xcf1c,0xcf20,0xcf24,0xcf2c,
-0xcf2d,0xcf2f,0xcf30,0xcf31,0xcf38,0xcf54,0xcf55,0xcf58,
-0xcf5c,0xcf64,0xcf65,0xcf67,0xcf69,0xcf70,0xcf71,0xcf74,
-0xcf78,0xcf80,0xcf85,0xcf8c,0xcfa1,0xcfa8,0xcfb0,0xcfc4,
-0xcfe0,0xcfe1,0xcfe4,0xcfe8,0xcff0,0xcff1,0xcff3,0xcff5,
-0xcffc,0xd000,0xd004,0xd011,0xd018,0xd02d,0xd034,0xd035,
-0xd038,0xd03c,0xd715,0xd716,0xd717,0xd71a,0xd71b,0xd71d,
-0xd71e,0xd71f,0xd721,0xd722,0xd723,0xd724,0xd725,0xd726,
-0xd727,0xd72a,0xd72c,0xd72e,0xd72f,0xd730,0xd731,0xd732,
-0xd733,0xd736,0xd737,0xd739,0xd73a,0xd73b,0xd73d,0xd73e,
-0xd73f,0xd740,0xd741,0xd742,0xd743,0xd745,0xd746,0xd748,
-0xd74a,0xd74b,0xd74c,0xd74d,0xd74e,0xd74f,0xd752,0xd753,
-0xd755,0xd75a,0xd75b,0xd75c,0xd75d,0xd75e,0xd75f,0xd762,
-0xd764,0xd766,0xd767,0xd768,0xd76a,0xd76b,0xd76d,0xd76e,
-0xd76f,0xd771,0xd772,0xd773,0xd775,0xd776,0xd777,0xd778,
-0xd779,0xd77a,0xd77b,0xd77e,0xd77f,0xd780,0xd782,0xd783,
-0xd784,0xd785,0xd786,0xd787,0xd78a,0xd78b,0xd044,0xd045,
-0xd047,0xd049,0xd050,0xd054,0xd058,0xd060,0xd06c,0xd06d,
-0xd070,0xd074,0xd07c,0xd07d,0xd081,0xd0a4,0xd0a5,0xd0a8,
-0xd0ac,0xd0b4,0xd0b5,0xd0b7,0xd0b9,0xd0c0,0xd0c1,0xd0c4,
-0xd0c8,0xd0c9,0xd0d0,0xd0d1,0xd0d3,0xd0d4,0xd0d5,0xd0dc,
-0xd0dd,0xd0e0,0xd0e4,0xd0ec,0xd0ed,0xd0ef,0xd0f0,0xd0f1,
-0xd0f8,0xd10d,0xd130,0xd131,0xd134,0xd138,0xd13a,0xd140,
-0xd141,0xd143,0xd144,0xd145,0xd14c,0xd14d,0xd150,0xd154,
-0xd15c,0xd15d,0xd15f,0xd161,0xd168,0xd16c,0xd17c,0xd184,
-0xd188,0xd1a0,0xd1a1,0xd1a4,0xd1a8,0xd1b0,0xd1b1,0xd1b3,
-0xd1b5,0xd1ba,0xd1bc,0xd1c0,0xd1d8,0xd1f4,0xd1f8,0xd207,
-0xd209,0xd210,0xd22c,0xd22d,0xd230,0xd234,0xd23c,0xd23d,
-0xd23f,0xd241,0xd248,0xd25c,0xd78d,0xd78e,0xd78f,0xd791,
-0xd792,0xd793,0xd794,0xd795,0xd796,0xd797,0xd79a,0xd79c,
-0xd79e,0xd79f,0xd7a0,0xd7a1,0xd7a2,0xd7a3,0xd264,0xd280,
-0xd281,0xd284,0xd288,0xd290,0xd291,0xd295,0xd29c,0xd2a0,
-0xd2a4,0xd2ac,0xd2b1,0xd2b8,0xd2b9,0xd2bc,0xd2bf,0xd2c0,
-0xd2c2,0xd2c8,0xd2c9,0xd2cb,0xd2d4,0xd2d8,0xd2dc,0xd2e4,
-0xd2e5,0xd2f0,0xd2f1,0xd2f4,0xd2f8,0xd300,0xd301,0xd303,
-0xd305,0xd30c,0xd30d,0xd30e,0xd310,0xd314,0xd316,0xd31c,
-0xd31d,0xd31f,0xd320,0xd321,0xd325,0xd328,0xd329,0xd32c,
-0xd330,0xd338,0xd339,0xd33b,0xd33c,0xd33d,0xd344,0xd345,
-0xd37c,0xd37d,0xd380,0xd384,0xd38c,0xd38d,0xd38f,0xd390,
-0xd391,0xd398,0xd399,0xd39c,0xd3a0,0xd3a8,0xd3a9,0xd3ab,
-0xd3ad,0xd3b4,0xd3b8,0xd3bc,0xd3c4,0xd3c5,0xd3c8,0xd3c9,
-0xd3d0,0xd3d8,0xd3e1,0xd3e3,0xd3ec,0xd3ed,0xd3f0,0xd3f4,
-0xd3fc,0xd3fd,0xd3ff,0xd401};
-
-static const int uhc2_ucs_table_size = (sizeof(uhc2_ucs_table)/sizeof(unsigned short));
-
-static const unsigned short uhc3_ucs_table[] = {
-0xd408,0xd41d,0xd440,0xd444,0xd45c,0xd460,0xd464,0xd46d, /* 0xc7a1 */
-0xd46f,0xd478,0xd479,0xd47c,0xd47f,0xd480,0xd482,0xd488,
-0xd489,0xd48b,0xd48d,0xd494,0xd4a9,0xd4cc,0xd4d0,0xd4d4, /* 0xc7b1 */
-0xd4dc,0xd4df,0xd4e8,0xd4ec,0xd4f0,0xd4f8,0xd4fb,0xd4fd,
-0xd504,0xd508,0xd50c,0xd514,0xd515,0xd517,0xd53c,0xd53d, /* 0xc7c1 */
-0xd540,0xd544,0xd54c,0xd54d,0xd54f,0xd551,0xd558,0xd559,
-0xd55c,0xd560,0xd565,0xd568,0xd569,0xd56b,0xd56d,0xd574, /* 0xc7d1 */
-0xd575,0xd578,0xd57c,0xd584,0xd585,0xd587,0xd588,0xd589,
-0xd590,0xd5a5,0xd5c8,0xd5c9,0xd5cc,0xd5d0,0xd5d2,0xd5d8, /* 0xc7e1 */
-0xd5d9,0xd5db,0xd5dd,0xd5e4,0xd5e5,0xd5e8,0xd5ec,0xd5f4,
-0xd5f5,0xd5f7,0xd5f9,0xd600,0xd601,0xd604,0xd608,0xd610, /* 0xc7f1 */
-0xd611,0xd613,0xd614,0xd615,0xd61c,0xd620,0xd624,0xd62d,
-0xd638,0xd639,0xd63c,0xd640,0xd645,0xd648,0xd649,0xd64b, /* 0xc8a3 */
-0xd64d,0xd651,0xd654,0xd655,0xd658,0xd65c,0xd667,0xd669,
-0xd670,0xd671,0xd674,0xd683,0xd685,0xd68c,0xd68d,0xd690, /* 0xc8b3 */
-0xd694,0xd69d,0xd69f,0xd6a1,0xd6a8,0xd6ac,0xd6b0,0xd6b9,
-0xd6bb,0xd6c4,0xd6c5,0xd6c8,0xd6cc,0xd6d1,0xd6d4,0xd6d7, /* 0xc8c3 */
-0xd6d9,0xd6e0,0xd6e4,0xd6e8,0xd6f0,0xd6f5,0xd6fc,0xd6fd,
-0xd700,0xd704,0xd711,0xd718,0xd719,0xd71c,0xd720,0xd728, /* 0xc8d3 */
-0xd729,0xd72b,0xd72d,0xd734,0xd735,0xd738,0xd73c,0xd744,
-0xd747,0xd749,0xd750,0xd751,0xd754,0xd756,0xd757,0xd758, /* 0xc8e3 */
-0xd759,0xd760,0xd761,0xd763,0xd765,0xd769,0xd76c,0xd770,
-0xd774,0xd77c,0xd77d,0xd781,0xd788,0xd789,0xd78c,0xd790, /* 0xc8f3 */
-0xd798,0xd799,0xd79b,0xd79d,0x4f3d,0x4f73,0x5047,0x50f9,
-0x52a0,0x53ef,0x5475,0x54e5,0x5609,0x5ac1,0x5bb6,0x6687, /* 0xcaa5 */
-0x67b6,0x67b7,0x67ef,0x6b4c,0x73c2,0x75c2,0x7a3c,0x82db,
-0x8304,0x8857,0x8888,0x8a36,0x8cc8,0x8dcf,0x8efb,0x8fe6, /* 0xcab5 */
-0x99d5,0x523b,0x5374,0x5404,0x606a,0x6164,0x6bbc,0x73cf,
-0x811a,0x89ba,0x89d2,0x95a3,0x4f83,0x520a,0x58be,0x5978, /* 0xcac5 */
-0x59e6,0x5e72,0x5e79,0x61c7,0x63c0,0x6746,0x67ec,0x687f,
-0x6f97,0x764e,0x770b,0x78f5,0x7a08,0x7aff,0x7c21,0x809d, /* 0xcad5 */
-0x826e,0x8271,0x8aeb,0x9593,0x4e6b,0x559d,0x66f7,0x6e34,
-0x78a3,0x7aed,0x845b,0x8910,0x874e,0x97a8,0x52d8,0x574e, /* 0xcae5 */
-0x582a,0x5d4c,0x611f,0x61be,0x6221,0x6562,0x67d1,0x6a44,
-0x6e1b,0x7518,0x75b3,0x76e3,0x77b0,0x7d3a,0x90af,0x9451, /* 0xcaf5 */
-0x9452,0x9f95,0x5323,0x5cac,0x7532,0x80db,0x9240,0x9598,
-0x525b,0x5808,0x59dc,0x5ca1,0x5d17,0x5eb7,0x5f3a,0x5f4a, /* 0xcba7 */
-0x6177,0x6c5f,0x757a,0x7586,0x7ce0,0x7d73,0x7db1,0x7f8c,
-0x8154,0x8221,0x8591,0x8941,0x8b1b,0x92fc,0x964d,0x9c47, /* 0xcbb7 */
-0x4ecb,0x4ef7,0x500b,0x51f1,0x584f,0x6137,0x613e,0x6168,
-0x6539,0x69ea,0x6f11,0x75a5,0x7686,0x76d6,0x7b87,0x82a5, /* 0xcbc7 */
-0x84cb,0xf900,0x93a7,0x958b,0x5580,0x5ba2,0x5751,0xf901,
-0x7cb3,0x7fb9,0x91b5,0x5028,0x53bb,0x5c45,0x5de8,0x62d2, /* 0xcbd7 */
-0x636e,0x64da,0x64e7,0x6e20,0x70ac,0x795b,0x8ddd,0x8e1e,
-0xf902,0x907d,0x9245,0x92f8,0x4e7e,0x4ef6,0x5065,0x5dfe, /* 0xcbe7 */
-0x5efa,0x6106,0x6957,0x8171,0x8654,0x8e47,0x9375,0x9a2b,
-0x4e5e,0x5091,0x6770,0x6840,0x5109,0x528d,0x5292,0x6aa2, /* 0xcbf7 */
-0x77bc,0x9210,0x9ed4,0x52ab,0x602f,0x8ff2,0x5048,0x61a9,
-0x63ed,0x64ca,0x683c,0x6a84,0x6fc0,0x8188,0x89a1,0x9694, /* 0xcca9 */
-0x5805,0x727d,0x72ac,0x7504,0x7d79,0x7e6d,0x80a9,0x898b,
-0x8b74,0x9063,0x9d51,0x6289,0x6c7a,0x6f54,0x7d50,0x7f3a, /* 0xccb9 */
-0x8a23,0x517c,0x614a,0x7b9d,0x8b19,0x9257,0x938c,0x4eac,
-0x4fd3,0x501e,0x50be,0x5106,0x52c1,0x52cd,0x537f,0x5770, /* 0xccc9 */
-0x5883,0x5e9a,0x5f91,0x6176,0x61ac,0x64ce,0x656c,0x666f,
-0x66bb,0x66f4,0x6897,0x6d87,0x7085,0x70f1,0x749f,0x74a5, /* 0xccd9 */
-0x74ca,0x75d9,0x786c,0x78ec,0x7adf,0x7af6,0x7d45,0x7d93,
-0x8015,0x803f,0x811b,0x8396,0x8b66,0x8f15,0x9015,0x93e1, /* 0xcce9 */
-0x9803,0x9838,0x9a5a,0x9be8,0x4fc2,0x5553,0x583a,0x5951,
-0x5b63,0x5c46,0x60b8,0x6212,0x6842,0x68b0,0x68e8,0x6eaa, /* 0xccf9 */
-0x754c,0x7678,0x78ce,0x7a3d,0x7cfb,0x7e6b,0x7e7c,0x8a08,
-0x8aa1,0x8c3f,0x968e,0x9dc4,0x53e4,0x53e9,0x544a,0x5471, /* 0xcdab */
-0x56fa,0x59d1,0x5b64,0x5c3b,0x5eab,0x62f7,0x6537,0x6545,
-0x6572,0x66a0,0x67af,0x69c1,0x6cbd,0x75fc,0x7690,0x777e, /* 0xcdbb */
-0x7a3f,0x7f94,0x8003,0x80a1,0x818f,0x82e6,0x82fd,0x83f0,
-0x85c1,0x8831,0x88b4,0x8aa5,0xf903,0x8f9c,0x932e,0x96c7, /* 0xcdcb */
-0x9867,0x9ad8,0x9f13,0x54ed,0x659b,0x66f2,0x688f,0x7a40,
-0x8c37,0x9d60,0x56f0,0x5764,0x5d11,0x6606,0x68b1,0x68cd, /* 0xcddb */
-0x6efe,0x7428,0x889e,0x9be4,0x6c68,0xf904,0x9aa8,0x4f9b,
-0x516c,0x5171,0x529f,0x5b54,0x5de5,0x6050,0x606d,0x62f1, /* 0xcdeb */
-0x63a7,0x653b,0x73d9,0x7a7a,0x86a3,0x8ca2,0x978f,0x4e32,
-0x5be1,0x6208,0x679c,0x74dc,0x79d1,0x83d3,0x8a87,0x8ab2, /* 0xcdfb */
-0x8de8,0x904e,0x934b,0x9846,0x5ed3,0x69e8,0x85ff,0x90ed,
-0xf905,0x51a0,0x5b98,0x5bec,0x6163,0x68fa,0x6b3e,0x704c, /* 0xcead */
-0x742f,0x74d8,0x7ba1,0x7f50,0x83c5,0x89c0,0x8cab,0x95dc,
-0x9928,0x522e,0x605d,0x62ec,0x9002,0x4f8a,0x5149,0x5321, /* 0xcebd */
-0x58d9,0x5ee3,0x66e0,0x6d38,0x709a,0x72c2,0x73d6,0x7b50,
-0x80f1,0x945b,0x5366,0x639b,0x7f6b,0x4e56,0x5080,0x584a, /* 0xcecd */
-0x58de,0x602a,0x6127,0x62d0,0x69d0,0x9b41,0x5b8f,0x7d18,
-0x80b1,0x8f5f,0x4ea4,0x50d1,0x54ac,0x55ac,0x5b0c,0x5da0, /* 0xcedd */
-0x5de7,0x652a,0x654e,0x6821,0x6a4b,0x72e1,0x768e,0x77ef,
-0x7d5e,0x7ff9,0x81a0,0x854e,0x86df,0x8f03,0x8f4e,0x90ca, /* 0xceed */
-0x9903,0x9a55,0x9bab,0x4e18,0x4e45,0x4e5d,0x4ec7,0x4ff1,
-0x5177,0x52fe,0x5340,0x53e3,0x53e5,0x548e,0x5614,0x5775, /* 0xcefd */
-0x57a2,0x5bc7,0x5d87,0x5ed0,0x61fc,0x62d8,0x6551,0x67b8,
-0x67e9,0x69cb,0x6b50,0x6bc6,0x6bec,0x6c42,0x6e9d,0x7078, /* 0xcfaf */
-0x72d7,0x7396,0x7403,0x77bf,0x77e9,0x7a76,0x7d7f,0x8009,
-0x81fc,0x8205,0x820a,0x82df,0x8862,0x8b33,0x8cfc,0x8ec0, /* 0xcfbf */
-0x9011,0x90b1,0x9264,0x92b6,0x99d2,0x9a45,0x9ce9,0x9dd7,
-0x9f9c,0x570b,0x5c40,0x83ca,0x97a0,0x97ab,0x9eb4,0x541b, /* 0xcfcf */
-0x7a98,0x7fa4,0x88d9,0x8ecd,0x90e1,0x5800,0x5c48,0x6398,
-0x7a9f,0x5bae,0x5f13,0x7a79,0x7aae,0x828e,0x8eac,0x5026, /* 0xcfdf */
-0x5238,0x52f8,0x5377,0x5708,0x62f3,0x6372,0x6b0a,0x6dc3,
-0x7737,0x53a5,0x7357,0x8568,0x8e76,0x95d5,0x673a,0x6ac3, /* 0xcfef */
-0x6f70,0x8a6d,0x8ecc,0x994b,0xf906,0x6677,0x6b78,0x8cb4,
-0x9b3c,0xf907,0x53eb,0x572d,0x594e,0x63c6,0x69fb,0x73ea, /* 0xd0a1 */
-0x7845,0x7aba,0x7ac5,0x7cfe,0x8475,0x898f,0x8d73,0x9035,
-0x95a8,0x52fb,0x5747,0x7547,0x7b60,0x83cc,0x921e,0xf908, /* 0xd0b1 */
-0x6a58,0x514b,0x524b,0x5287,0x621f,0x68d8,0x6975,0x9699,
-0x50c5,0x52a4,0x52e4,0x61c3,0x65a4,0x6839,0x69ff,0x747e, /* 0xd0c1 */
-0x7b4b,0x82b9,0x83eb,0x89b2,0x8b39,0x8fd1,0x9949,0xf909,
-0x4eca,0x5997,0x64d2,0x6611,0x6a8e,0x7434,0x7981,0x79bd, /* 0xd0d1 */
-0x82a9,0x887e,0x887f,0x895f,0xf90a,0x9326,0x4f0b,0x53ca,
-0x6025,0x6271,0x6c72,0x7d1a,0x7d66,0x4e98,0x5162,0x77dc, /* 0xd0e1 */
-0x80af,0x4f01,0x4f0e,0x5176,0x5180,0x55dc,0x5668,0x573b,
-0x57fa,0x57fc,0x5914,0x5947,0x5993,0x5bc4,0x5c90,0x5d0e, /* 0xd0f1 */
-0x5df1,0x5e7e,0x5fcc,0x6280,0x65d7,0x65e3,0x671e,0x671f,
-0x675e,0x68cb,0x68c4,0x6a5f,0x6b3a,0x6c23,0x6c7d,0x6c82, /* 0xd1a3 */
-0x6dc7,0x7398,0x7426,0x742a,0x7482,0x74a3,0x7578,0x757f,
-0x7881,0x78ef,0x7941,0x7947,0x7948,0x797a,0x7b95,0x7d00, /* 0xd1b3 */
-0x7dba,0x7f88,0x8006,0x802d,0x808c,0x8a18,0x8b4f,0x8c48,
-0x8d77,0x9321,0x9324,0x98e2,0x9951,0x9a0e,0x9a0f,0x9a65, /* 0xd1c3 */
-0x9e92,0x7dca,0x4f76,0x5409,0x62ee,0x6854,0x91d1,0x55ab,
-0x513a,0xf90b,0xf90c,0x5a1c,0x61e6,0xf90d,0x62cf,0x62ff, /* 0xd1d3 */
-0xf90e,0xf90f,0xf910,0xf911,0xf912,0xf913,0x90a3,0xf914,
-0xf915,0xf916,0xf917,0xf918,0x8afe,0xf919,0xf91a,0xf91b, /* 0xd1e3 */
-0xf91c,0x6696,0xf91d,0x7156,0xf91e,0xf91f,0x96e3,0xf920,
-0x634f,0x637a,0x5357,0xf921,0x678f,0x6960,0x6e73,0xf922, /* 0xd1f3 */
-0x7537,0xf923,0xf924,0xf925,0x7d0d,0xf926,0xf927,0x8872,
-0x56ca,0x5a18,0xf928,0xf929,0xf92a,0xf92b,0xf92c,0x4e43, /* 0xd2a5 */
-0xf92d,0x5167,0x5948,0x67f0,0x8010,0xf92e,0x5973,0x5e74,
-0x649a,0x79ca,0x5ff5,0x606c,0x62c8,0x637b,0x5be7,0x5bd7, /* 0xd2b5 */
-0x52aa,0xf92f,0x5974,0x5f29,0x6012,0xf930,0xf931,0xf932,
-0x7459,0xf933,0xf934,0xf935,0xf936,0xf937,0xf938,0x99d1, /* 0xd2c5 */
-0xf939,0xf93a,0xf93b,0xf93c,0xf93d,0xf93e,0xf93f,0xf940,
-0xf941,0xf942,0xf943,0x6fc3,0xf944,0xf945,0x81bf,0x8fb2, /* 0xd2d5 */
-0x60f1,0xf946,0xf947,0x8166,0xf948,0xf949,0x5c3f,0xf94a,
-0xf94b,0xf94c,0xf94d,0xf94e,0xf94f,0xf950,0xf951,0x5ae9, /* 0xd2e5 */
-0x8a25,0x677b,0x7d10,0xf952,0xf953,0xf954,0xf955,0xf956,
-0xf957,0x80fd,0xf958,0xf959,0x5c3c,0x6ce5,0x533f,0x6eba, /* 0xd2f5 */
-0x591a,0x8336,0x4e39,0x4eb6,0x4f46,0x55ae,0x5718,0x58c7,
-0x5f56,0x65b7,0x65e6,0x6a80,0x6bb5,0x6e4d,0x77ed,0x7aef, /* 0xd3a7 */
-0x7c1e,0x7dde,0x86cb,0x8892,0x9132,0x935b,0x64bb,0x6fbe,
-0x737a,0x75b8,0x9054,0x5556,0x574d,0x61ba,0x64d4,0x66c7, /* 0xd3b7 */
-0x6de1,0x6e5b,0x6f6d,0x6fb9,0x75f0,0x8043,0x81bd,0x8541,
-0x8983,0x8ac7,0x8b5a,0x931f,0x6c93,0x7553,0x7b54,0x8e0f, /* 0xd3c7 */
-0x905d,0x5510,0x5802,0x5858,0x5e62,0x6207,0x649e,0x68e0,
-0x7576,0x7cd6,0x87b3,0x9ee8,0x4ee3,0x5788,0x576e,0x5927, /* 0xd3d7 */
-0x5c0d,0x5cb1,0x5e36,0x5f85,0x6234,0x64e1,0x73b3,0x81fa,
-0x888b,0x8cb8,0x968a,0x9edb,0x5b85,0x5fb7,0x60b3,0x5012, /* 0xd3e7 */
-0x5200,0x5230,0x5716,0x5835,0x5857,0x5c0e,0x5c60,0x5cf6,
-0x5d8b,0x5ea6,0x5f92,0x60bc,0x6311,0x6389,0x6417,0x6843, /* 0xd3f7 */
-0x68f9,0x6ac2,0x6dd8,0x6e21,0x6ed4,0x6fe4,0x71fe,0x76dc,
-0x7779,0x79b1,0x7a3b,0x8404,0x89a9,0x8ced,0x8df3,0x8e48, /* 0xd4a9 */
-0x9003,0x9014,0x9053,0x90fd,0x934d,0x9676,0x97dc,0x6bd2,
-0x7006,0x7258,0x72a2,0x7368,0x7763,0x79bf,0x7be4,0x7e9b, /* 0xd4b9 */
-0x8b80,0x58a9,0x60c7,0x6566,0x65fd,0x66be,0x6c8c,0x711e,
-0x71c9,0x8c5a,0x9813,0x4e6d,0x7a81,0x4edd,0x51ac,0x51cd, /* 0xd4c9 */
-0x52d5,0x540c,0x61a7,0x6771,0x6850,0x68df,0x6d1e,0x6f7c,
-0x75bc,0x77b3,0x7ae5,0x80f4,0x8463,0x9285,0x515c,0x6597, /* 0xd4d9 */
-0x675c,0x6793,0x75d8,0x7ac7,0x8373,0xf95a,0x8c46,0x9017,
-0x982d,0x5c6f,0x81c0,0x829a,0x9041,0x906f,0x920d,0x5f97, /* 0xd4e9 */
-0x5d9d,0x6a59,0x71c8,0x767b,0x7b49,0x85e4,0x8b04,0x9127,
-0x9a30,0x5587,0x61f6,0xf95b,0x7669,0x7f85,0x863f,0x87ba, /* 0xd4f9 */
-0x88f8,0x908f,0xf95c,0x6d1b,0x70d9,0x73de,0x7d61,0x843d,
-0xf95d,0x916a,0x99f1,0xf95e,0x4e82,0x5375,0x6b04,0x6b12, /* 0xd5ab */
-0x703e,0x721b,0x862d,0x9e1e,0x524c,0x8fa3,0x5d50,0x64e5,
-0x652c,0x6b16,0x6feb,0x7c43,0x7e9c,0x85cd,0x8964,0x89bd, /* 0xd5bb */
-0x62c9,0x81d8,0x881f,0x5eca,0x6717,0x6d6a,0x72fc,0x7405,
-0x746f,0x8782,0x90de,0x4f86,0x5d0d,0x5fa0,0x840a,0x51b7, /* 0xd5cb */
-0x63a0,0x7565,0x4eae,0x5006,0x5169,0x51c9,0x6881,0x6a11,
-0x7cae,0x7cb1,0x7ce7,0x826f,0x8ad2,0x8f1b,0x91cf,0x4fb6, /* 0xd5db */
-0x5137,0x52f5,0x5442,0x5eec,0x616e,0x623e,0x65c5,0x6ada,
-0x6ffe,0x792a,0x85dc,0x8823,0x95ad,0x9a62,0x9a6a,0x9e97, /* 0xd5eb */
-0x9ece,0x529b,0x66c6,0x6b77,0x701d,0x792b,0x8f62,0x9742,
-0x6190,0x6200,0x6523,0x6f23,0x7149,0x7489,0x7df4,0x806f, /* 0xd5fb */
-0x84ee,0x8f26,0x9023,0x934a,0x51bd,0x5217,0x52a3,0x6d0c,
-0x70c8,0x88c2,0x5ec9,0x6582,0x6bae,0x6fc2,0x7c3e,0x7375, /* 0xd6ad */
-0x4ee4,0x4f36,0x56f9,0xf95f,0x5cba,0x5dba,0x601c,0x73b2,
-0x7b2d,0x7f9a,0x7fce,0x8046,0x901e,0x9234,0x96f6,0x9748, /* 0xd6bd */
-0x9818,0x9f61,0x4f8b,0x6fa7,0x79ae,0x91b4,0x96b7,0x52de,
-0xf960,0x6488,0x64c4,0x6ad3,0x6f5e,0x7018,0x7210,0x76e7, /* 0xd6cd */
-0x8001,0x8606,0x865c,0x8def,0x8f05,0x9732,0x9b6f,0x9dfa,
-0x9e75,0x788c,0x797f,0x7da0,0x83c9,0x9304,0x9e7f,0x9e93, /* 0xd6dd */
-0x8ad6,0x58df,0x5f04,0x6727,0x7027,0x74cf,0x7c60,0x807e,
-0x5121,0x7028,0x7262,0x78ca,0x8cc2,0x8cda,0x8cf4,0x96f7, /* 0xd6ed */
-0x4e86,0x50da,0x5bee,0x5ed6,0x6599,0x71ce,0x7642,0x77ad,
-0x804a,0x84fc,0x907c,0x9b27,0x9f8d,0x58d8,0x5a41,0x5c62, /* 0xd6fd */
-0x6a13,0x6dda,0x6f0f,0x763b,0x7d2f,0x7e37,0x851e,0x8938,
-0x93e4,0x964b,0x5289,0x65d2,0x67f3,0x69b4,0x6d41,0x6e9c, /* 0xd7af */
-0x700f,0x7409,0x7460,0x7559,0x7624,0x786b,0x8b2c,0x985e,
-0x516d,0x622e,0x9678,0x4f96,0x502b,0x5d19,0x6dea,0x7db8, /* 0xd7bf */
-0x8f2a,0x5f8b,0x6144,0x6817,0xf961,0x9686,0x52d2,0x808b,
-0x51dc,0x51cc,0x695e,0x7a1c,0x7dbe,0x83f1,0x9675,0x4fda, /* 0xd7cf */
-0x5229,0x5398,0x540f,0x550e,0x5c65,0x60a7,0x674e,0x68a8,
-0x6d6c,0x7281,0x72f8,0x7406,0x7483,0xf962,0x75e2,0x7c6c, /* 0xd7df */
-0x7f79,0x7fb8,0x8389,0x88cf,0x88e1,0x91cc,0x91d0,0x96e2,
-0x9bc9,0x541d,0x6f7e,0x71d0,0x7498,0x85fa,0x8eaa,0x96a3, /* 0xd7ef */
-0x9c57,0x9e9f,0x6797,0x6dcb,0x7433,0x81e8,0x9716,0x782c,
-0x7acb,0x7b20,0x7c92,0x6469,0x746a,0x75f2,0x78bc,0x78e8, /* 0xd8a1 */
-0x99ac,0x9b54,0x9ebb,0x5bde,0x5e55,0x6f20,0x819c,0x83ab,
-0x9088,0x4e07,0x534d,0x5a29,0x5dd2,0x5f4e,0x6162,0x633d, /* 0xd8b1 */
-0x6669,0x66fc,0x6eff,0x6f2b,0x7063,0x779e,0x842c,0x8513,
-0x883b,0x8f13,0x9945,0x9c3b,0x551c,0x62b9,0x672b,0x6cab, /* 0xd8c1 */
-0x8309,0x896a,0x977a,0x4ea1,0x5984,0x5fd8,0x5fd9,0x671b,
-0x7db2,0x7f54,0x8292,0x832b,0x83bd,0x8f1e,0x9099,0x57cb, /* 0xd8d1 */
-0x59b9,0x5a92,0x5bd0,0x6627,0x679a,0x6885,0x6bcf,0x7164,
-0x7f75,0x8cb7,0x8ce3,0x9081,0x9b45,0x8108,0x8c8a,0x964c, /* 0xd8e1 */
-0x9a40,0x9ea5,0x5b5f,0x6c13,0x731b,0x76f2,0x76df,0x840c,
-0x51aa,0x8993,0x514d,0x5195,0x52c9,0x68c9,0x6c94,0x7704, /* 0xd8f1 */
-0x7720,0x7dbf,0x7dec,0x9762,0x9eb5,0x6ec5,0x8511,0x51a5,
-0x540d,0x547d,0x660e,0x669d,0x6927,0x6e9f,0x76bf,0x7791, /* 0xd9a3 */
-0x8317,0x84c2,0x879f,0x9169,0x9298,0x9cf4,0x8882,0x4fae,
-0x5192,0x52df,0x59c6,0x5e3d,0x6155,0x6478,0x6479,0x66ae, /* 0xd9b3 */
-0x67d0,0x6a21,0x6bcd,0x6bdb,0x725f,0x7261,0x7441,0x7738,
-0x77db,0x8017,0x82bc,0x8305,0x8b00,0x8b28,0x8c8c,0x6728, /* 0xd9c3 */
-0x6c90,0x7267,0x76ee,0x7766,0x7a46,0x9da9,0x6b7f,0x6c92,
-0x5922,0x6726,0x8499,0x536f,0x5893,0x5999,0x5edf,0x63cf, /* 0xd9d3 */
-0x6634,0x6773,0x6e3a,0x732b,0x7ad7,0x82d7,0x9328,0x52d9,
-0x5deb,0x61ae,0x61cb,0x620a,0x62c7,0x64ab,0x65e0,0x6959, /* 0xd9e3 */
-0x6b66,0x6bcb,0x7121,0x73f7,0x755d,0x7e46,0x821e,0x8302,
-0x856a,0x8aa3,0x8cbf,0x9727,0x9d61,0x58a8,0x9ed8,0x5011, /* 0xd9f3 */
-0x520e,0x543b,0x554f,0x6587,0x6c76,0x7d0a,0x7d0b,0x805e,
-0x868a,0x9580,0x96ef,0x52ff,0x6c95,0x7269,0x5473,0x5a9a, /* 0xdaa5 */
-0x5c3e,0x5d4b,0x5f4c,0x5fae,0x672a,0x68b6,0x6963,0x6e3c,
-0x6e44,0x7709,0x7c73,0x7f8e,0x8587,0x8b0e,0x8ff7,0x9761, /* 0xdab5 */
-0x9ef4,0x5cb7,0x60b6,0x610d,0x61ab,0x654f,0x65fb,0x65fc,
-0x6c11,0x6cef,0x739f,0x73c9,0x7de1,0x9594,0x5bc6,0x871c, /* 0xdac5 */
-0x8b10,0x525d,0x535a,0x62cd,0x640f,0x64b2,0x6734,0x6a38,
-0x6cca,0x73c0,0x749e,0x7b94,0x7c95,0x7e1b,0x818a,0x8236, /* 0xdad5 */
-0x8584,0x8feb,0x96f9,0x99c1,0x4f34,0x534a,0x53cd,0x53db,
-0x62cc,0x642c,0x6500,0x6591,0x69c3,0x6cee,0x6f58,0x73ed, /* 0xdae5 */
-0x7554,0x7622,0x76e4,0x76fc,0x78d0,0x78fb,0x792c,0x7d46,
-0x822c,0x87e0,0x8fd4,0x9812,0x98ef,0x52c3,0x62d4,0x64a5, /* 0xdaf5 */
-0x6e24,0x6f51,0x767c,0x8dcb,0x91b1,0x9262,0x9aee,0x9b43,
-0x5023,0x508d,0x574a,0x59a8,0x5c28,0x5e47,0x5f77,0x623f, /* 0xdba7 */
-0x653e,0x65b9,0x65c1,0x6609,0x678b,0x699c,0x6ec2,0x78c5,
-0x7d21,0x80aa,0x8180,0x822b,0x82b3,0x84a1,0x868c,0x8a2a, /* 0xdbb7 */
-0x8b17,0x90a6,0x9632,0x9f90,0x500d,0x4ff3,0xf963,0x57f9,
-0x5f98,0x62dc,0x6392,0x676f,0x6e43,0x7119,0x76c3,0x80cc, /* 0xdbc7 */
-0x80da,0x88f4,0x88f5,0x8919,0x8ce0,0x8f29,0x914d,0x966a,
-0x4f2f,0x4f70,0x5e1b,0x67cf,0x6822,0x767d,0x767e,0x9b44, /* 0xdbd7 */
-0x5e61,0x6a0a,0x7169,0x71d4,0x756a,0xf964,0x7e41,0x8543,
-0x85e9,0x98dc,0x4f10,0x7b4f,0x7f70,0x95a5,0x51e1,0x5e06, /* 0xdbe7 */
-0x68b5,0x6c3e,0x6c4e,0x6cdb,0x72af,0x7bc4,0x8303,0x6cd5,
-0x743a,0x50fb,0x5288,0x58c1,0x64d8,0x6a97,0x74a7,0x7656, /* 0xdbf7 */
-0x78a7,0x8617,0x95e2,0x9739,0xf965,0x535e,0x5f01,0x8b8a,
-0x8fa8,0x8faf,0x908a,0x5225,0x77a5,0x9c49,0x9f08,0x4e19, /* 0xdca9 */
-0x5002,0x5175,0x5c5b,0x5e77,0x661e,0x663a,0x67c4,0x68c5,
-0x70b3,0x7501,0x75c5,0x79c9,0x7add,0x8f27,0x9920,0x9a08,
-0x4fdd,0x5821,0x5831,0x5bf6,0x666e,0x6b65,0x6d11,0x6e7a,
-0x6f7d,0x73e4,0x752b,0x83e9,0x88dc,0x8913,0x8b5c,0x8f14,
-0x4f0f,0x50d5,0x5310,0x535c,0x5b93,0x5fa9,0x670d,0x798f,
-0x8179,0x832f,0x8514,0x8907,0x8986,0x8f39,0x8f3b,0x99a5,
-0x9c12,0x672c,0x4e76,0x4ff8,0x5949,0x5c01,0x5cef,0x5cf0,
-0x6367,0x68d2,0x70fd,0x71a2,0x742b,0x7e2b,0x84ec,0x8702,
-0x9022,0x92d2,0x9cf3,0x4e0d,0x4ed8,0x4fef,0x5085,0x5256,
-0x526f,0x5426,0x5490,0x57e0,0x592b,0x5a66,0x5b5a,0x5b75,
-0x5bcc,0x5e9c,0xf966,0x6276,0x6577,0x65a7,0x6d6e,0x6ea5,
-0x7236,0x7b26,0x7c3f,0x7f36,0x8150,0x8151,0x819a,0x8240,
-0x8299,0x83a9,0x8a03,0x8ca0,0x8ce6,0x8cfb,0x8d74,0x8dba,
-0x90e8,0x91dc,0x961c,0x9644,0x99d9,0x9ce7,0x5317,0x5206,
-0x5429,0x5674,0x58b3,0x5954,0x596e,0x5fff,0x61a4,0x626e,
-0x6610,0x6c7e,0x711a,0x76c6,0x7c89,0x7cde,0x7d1b,0x82ac,
-0x8cc1,0x96f0,0xf967,0x4f5b,0x5f17,0x5f7f,0x62c2,0x5d29,
-0x670b,0x68da,0x787c,0x7e43,0x9d6c,0x4e15,0x5099,0x5315,
-0x532a,0x5351,0x5983,0x5a62,0x5e87,0x60b2,0x618a,0x6249,
-0x6279,0x6590,0x6787,0x69a7,0x6bd4,0x6bd6,0x6bd7,0x6bd8,
-0x6cb8,0xf968,0x7435,0x75fa,0x7812,0x7891,0x79d5,0x79d8,
-0x7c83,0x7dcb,0x7fe1,0x80a5,0x813e,0x81c2,0x83f2,0x871a,
-0x88e8,0x8ab9,0x8b6c,0x8cbb,0x9119,0x975e,0x98db,0x9f3b,
-0x56ac,0x5b2a,0x5f6c,0x658c,0x6ab3,0x6baf,0x6d5c,0x6ff1,
-0x7015,0x725d,0x73ad,0x8ca7,0x8cd3,0x983b,0x6191,0x6c37,
-0x8058,0x9a01,0x4e4d,0x4e8b,0x4e9b,0x4ed5,0x4f3a,0x4f3c,
-0x4f7f,0x4fdf,0x50ff,0x53f2,0x53f8,0x5506,0x55e3,0x56db,
-0x58eb,0x5962,0x5a11,0x5beb,0x5bfa,0x5c04,0x5df3,0x5e2b,
-0x5f99,0x601d,0x6368,0x659c,0x65af,0x67f6,0x67fb,0x68ad,
-0x6b7b,0x6c99,0x6cd7,0x6e23,0x7009,0x7345,0x7802,0x793e,
-0x7940,0x7960,0x79c1,0x7be9,0x7d17,0x7d72,0x8086,0x820d,
-0x838e,0x84d1,0x86c7,0x88df,0x8a50,0x8a5e,0x8b1d,0x8cdc,
-0x8d66,0x8fad,0x90aa,0x98fc,0x99df,0x9e9d,0x524a,0xf969,
-0x6714,0xf96a,0x5098,0x522a,0x5c71,0x6563,0x6c55,0x73ca,
-0x7523,0x759d,0x7b97,0x849c,0x9178,0x9730,0x4e77,0x6492,
-0x6bba,0x715e,0x85a9,0x4e09,0xf96b,0x6749,0x68ee,0x6e17,
-0x829f,0x8518,0x886b,0x63f7,0x6f81,0x9212,0x98af,0x4e0a,
-0x50b7,0x50cf,0x511f,0x5546,0x55aa,0x5617,0x5b40,0x5c19,
-0x5ce0,0x5e38,0x5e8a,0x5ea0,0x5ec2,0x60f3,0x6851,0x6a61,
-0x6e58,0x723d,0x7240,0x72c0,0x76f8,0x7965,0x7bb1,0x7fd4,
-0x88f3,0x89f4,0x8a73,0x8c61,0x8cde,0x971c,0x585e,0x74bd,
-0x8cfd,0x55c7,0xf96c,0x7a61,0x7d22,0x8272,0x7272,0x751f,
-0x7525,0xf96d,0x7b19,0x5885,0x58fb,0x5dbc,0x5e8f,0x5eb6,
-0x5f90,0x6055,0x6292,0x637f,0x654d,0x6691,0x66d9,0x66f8,
-0x6816,0x68f2,0x7280,0x745e,0x7b6e,0x7d6e,0x7dd6,0x7f72,
-0x80e5,0x8212,0x85af,0x897f,0x8a93,0x901d,0x92e4,0x9ecd,
-0x9f20,0x5915,0x596d,0x5e2d,0x60dc,0x6614,0x6673,0x6790,
-0x6c50,0x6dc5,0x6f5f,0x77f3,0x78a9,0x84c6,0x91cb,0x932b,
-0x4ed9,0x50ca,0x5148,0x5584,0x5b0b,0x5ba3,0x6247,0x657e,
-0x65cb,0x6e32,0x717d,0x7401,0x7444,0x7487,0x74bf,0x766c,
-0x79aa,0x7dda,0x7e55,0x7fa8,0x817a,0x81b3,0x8239,0x861a,
-0x87ec,0x8a75,0x8de3,0x9078,0x9291,0x9425,0x994d,0x9bae,
-0x5368,0x5c51,0x6954,0x6cc4,0x6d29,0x6e2b,0x820c,0x859b,
-0x893b,0x8a2d,0x8aaa,0x96ea,0x9f67,0x5261,0x66b9,0x6bb2,
-0x7e96,0x87fe,0x8d0d,0x9583,0x965d,0x651d,0x6d89,0x71ee,
-0xf96e,0x57ce,0x59d3,0x5bac,0x6027,0x60fa,0x6210,0x661f,
-0x665f,0x7329,0x73f9,0x76db,0x7701,0x7b6c,0x8056,0x8072,
-0x8165,0x8aa0,0x9192,0x4e16,0x52e2,0x6b72,0x6d17,0x7a05,
-0x7b39,0x7d30,0xf96f,0x8cb0,0x53ec,0x562f,0x5851,0x5bb5,
-0x5c0f,0x5c11,0x5de2,0x6240,0x6383,0x6414,0x662d,0x68b3,
-0x6cbc,0x6d88,0x6eaf,0x701f,0x70a4,0x71d2,0x7526,0x758f,
-0x758e,0x7619,0x7b11,0x7be0,0x7c2b,0x7d20,0x7d39,0x852c,
-0x856d,0x8607,0x8a34,0x900d,0x9061,0x90b5,0x92b7,0x97f6,
-0x9a37,0x4fd7,0x5c6c,0x675f,0x6d91,0x7c9f,0x7e8c,0x8b16,
-0x8d16,0x901f,0x5b6b,0x5dfd,0x640d,0x84c0,0x905c,0x98e1,
-0x7387,0x5b8b,0x609a,0x677e,0x6dde,0x8a1f,0x8aa6,0x9001,
-0x980c,0x5237,0xf970,0x7051,0x788e,0x9396,0x8870,0x91d7,
-0x4fee,0x53d7,0x55fd,0x56da,0x5782,0x58fd,0x5ac2,0x5b88,
-0x5cab,0x5cc0,0x5e25,0x6101,0x620d,0x624b,0x6388,0x641c,
-0x6536,0x6578,0x6a39,0x6b8a,0x6c34,0x6d19,0x6f31,0x71e7,
-0x72e9,0x7378,0x7407,0x74b2,0x7626,0x7761,0x79c0,0x7a57,
-0x7aea,0x7cb9,0x7d8f,0x7dac,0x7e61,0x7f9e,0x8129,0x8331,
-0x8490,0x84da,0x85ea,0x8896,0x8ab0,0x8b90,0x8f38,0x9042,
-0x9083,0x916c,0x9296,0x92b9,0x968b,0x96a7,0x96a8,0x96d6,
-0x9700,0x9808,0x9996,0x9ad3,0x9b1a,0x53d4,0x587e,0x5919,
-0x5b70,0x5bbf,0x6dd1,0x6f5a,0x719f,0x7421,0x74b9,0x8085,
-0x83fd,0x5de1,0x5f87,0x5faa,0x6042,0x65ec,0x6812,0x696f,
-0x6a53,0x6b89,0x6d35,0x6df3,0x73e3,0x76fe,0x77ac,0x7b4d,
-0x7d14,0x8123,0x821c,0x8340,0x84f4,0x8563,0x8a62,0x8ac4,
-0x9187,0x931e,0x9806,0x99b4,0x620c,0x8853,0x8ff0,0x9265,
-0x5d07,0x5d27,0x5d69,0x745f,0x819d,0x8768,0x6fd5,0x62fe,
-0x7fd2,0x8936,0x8972,0x4e1e,0x4e58,0x50e7,0x52dd,0x5347,
-0x627f,0x6607,0x7e69,0x8805,0x965e,0x4f8d,0x5319,0x5636,
-0x59cb,0x5aa4,0x5c38,0x5c4e,0x5c4d,0x5e02,0x5f11,0x6043,
-0x65bd,0x662f,0x6642,0x67be,0x67f4,0x731c,0x77e2,0x793a,
-0x7fc5,0x8494,0x84cd,0x8996,0x8a66,0x8a69,0x8ae1,0x8c55,
-0x8c7a,0x57f4,0x5bd4,0x5f0f,0x606f,0x62ed,0x690d,0x6b96,
-0x6e5c,0x7184,0x7bd2,0x8755,0x8b58,0x8efe,0x98df,0x98fe,
-0x4f38,0x4f81,0x4fe1,0x547b,0x5a20,0x5bb8,0x613c,0x65b0,
-0x6668,0x71fc,0x7533,0x795e,0x7d33,0x814e,0x81e3,0x8398,
-0x85aa,0x85ce,0x8703,0x8a0a,0x8eab,0x8f9b,0xf971,0x8fc5,
-0x5931,0x5ba4,0x5be6,0x6089,0x5be9,0x5c0b,0x5fc3,0x6c81,
-0xf972,0x6df1,0x700b,0x751a,0x82af,0x8af6,0x4ec0,0x5341,
-0xf973,0x96d9,0x6c0f,0x4e9e,0x4fc4,0x5152,0x555e,0x5a25,
-0x5ce8,0x6211,0x7259,0x82bd,0x83aa,0x86fe,0x8859,0x8a1d,
-0x963f,0x96c5,0x9913,0x9d09,0x9d5d,0x580a,0x5cb3,0x5dbd,
-0x5e44,0x60e1,0x6115,0x63e1,0x6a02,0x6e25,0x9102,0x9354,
-0x984e,0x9c10,0x9f77,0x5b89,0x5cb8,0x6309,0x664f,0x6848,
-0x773c,0x96c1,0x978d,0x9854,0x9b9f,0x65a1,0x8b01,0x8ecb,
-0x95bc,0x5535,0x5ca9,0x5dd6,0x5eb5,0x6697,0x764c,0x83f4,
-0x95c7,0x58d3,0x62bc,0x72ce,0x9d28,0x4ef0,0x592e,0x600f,
-0x663b,0x6b83,0x79e7,0x9d26,0x5393,0x54c0,0x57c3,0x5d16,
-0x611b,0x66d6,0x6daf,0x788d,0x827e,0x9698,0x9744,0x5384,
-0x627c,0x6396,0x6db2,0x7e0a,0x814b,0x984d,0x6afb,0x7f4c,
-0x9daf,0x9e1a,0x4e5f,0x503b,0x51b6,0x591c,0x60f9,0x63f6,
-0x6930,0x723a,0x8036,0xf974,0x91ce,0x5f31,0xf975,0xf976,
-0x7d04,0x82e5,0x846f,0x84bb,0x85e5,0x8e8d,0xf977,0x4f6f,
-0xf978,0xf979,0x58e4,0x5b43,0x6059,0x63da,0x6518,0x656d,
-0x6698,0xf97a,0x694a,0x6a23,0x6d0b,0x7001,0x716c,0x75d2,
-0x760d,0x79b3,0x7a70,0xf97b,0x7f8a,0xf97c,0x8944,0xf97d,
-0x8b93,0x91c0,0x967d,0xf97e,0x990a,0x5704,0x5fa1,0x65bc,
-0x6f01,0x7600,0x79a6,0x8a9e,0x99ad,0x9b5a,0x9f6c,0x5104,
-0x61b6,0x6291,0x6a8d,0x81c6,0x5043,0x5830,0x5f66,0x7109,
-0x8a00,0x8afa,0x5b7c,0x8616,0x4ffa,0x513c,0x56b4,0x5944,
-0x63a9,0x6df9,0x5daa,0x696d,0x5186,0x4e88,0x4f59,0xf97f,
-0xf980,0xf981,0x5982,0xf982,0xf983,0x6b5f,0x6c5d,0xf984,
-0x74b5,0x7916,0xf985,0x8207,0x8245,0x8339,0x8f3f,0x8f5d,
-0xf986,0x9918,0xf987,0xf988,0xf989,0x4ea6,0xf98a,0x57df,
-0x5f79,0x6613,0xf98b,0xf98c,0x75ab,0x7e79,0x8b6f,0xf98d,
-0x9006,0x9a5b,0x56a5,0x5827,0x59f8,0x5a1f,0x5bb4,0xf98e,
-0x5ef6,0xf98f,0xf990,0x6350,0x633b,0xf991,0x693d,0x6c87,
-0x6cbf,0x6d8e,0x6d93,0x6df5,0x6f14,0xf992,0x70df,0x7136,
-0x7159,0xf993,0x71c3,0x71d5,0xf994,0x784f,0x786f,0xf995,
-0x7b75,0x7de3,0xf996,0x7e2f,0xf997,0x884d,0x8edf,0xf998,
-0xf999,0xf99a,0x925b,0xf99b,0x9cf6,0xf99c,0xf99d,0xf99e,
-0x6085,0x6d85,0xf99f,0x71b1,0xf9a0,0xf9a1,0x95b1,0x53ad,
-0xf9a2,0xf9a3,0xf9a4,0x67d3,0xf9a5,0x708e,0x7130,0x7430,
-0x8276,0x82d2,0xf9a6,0x95bb,0x9ae5,0x9e7d,0x66c4,0xf9a7,
-0x71c1,0x8449,0xf9a8,0xf9a9,0x584b,0xf9aa,0xf9ab,0x5db8,
-0x5f71,0xf9ac,0x6620,0x668e,0x6979,0x69ae,0x6c38,0x6cf3,
-0x6e36,0x6f41,0x6fda,0x701b,0x702f,0x7150,0x71df,0x7370,
-0xf9ad,0x745b,0xf9ae,0x74d4,0x76c8,0x7a4e,0x7e93,0xf9af,
-0xf9b0,0x82f1,0x8a60,0x8fce,0xf9b1,0x9348,0xf9b2,0x9719,
-0xf9b3,0xf9b4,0x4e42,0x502a,0xf9b5,0x5208,0x53e1,0x66f3,
-0x6c6d,0x6fca,0x730a,0x777f,0x7a62,0x82ae,0x85dd,0x8602,
-0xf9b6,0x88d4,0x8a63,0x8b7d,0x8c6b,0xf9b7,0x92b3,0xf9b8,
-0x9713,0x9810,0x4e94,0x4f0d,0x4fc9,0x50b2,0x5348,0x543e,
-0x5433,0x55da,0x5862,0x58ba,0x5967,0x5a1b,0x5be4,0x609f,
-0xf9b9,0x61ca,0x6556,0x65ff,0x6664,0x68a7,0x6c5a,0x6fb3,
-0x70cf,0x71ac,0x7352,0x7b7d,0x8708,0x8aa4,0x9c32,0x9f07,
-0x5c4b,0x6c83,0x7344,0x7389,0x923a,0x6eab,0x7465,0x761f,
-0x7a69,0x7e15,0x860a,0x5140,0x58c5,0x64c1,0x74ee,0x7515,
-0x7670,0x7fc1,0x9095,0x96cd,0x9954,0x6e26,0x74e6,0x7aa9,
-0x7aaa,0x81e5,0x86d9,0x8778,0x8a1b,0x5a49,0x5b8c,0x5b9b,
-0x68a1,0x6900,0x6d63,0x73a9,0x7413,0x742c,0x7897,0x7de9,
-0x7feb,0x8118,0x8155,0x839e,0x8c4c,0x962e,0x9811,0x66f0,
-0x5f80,0x65fa,0x6789,0x6c6a,0x738b,0x502d,0x5a03,0x6b6a,
-0x77ee,0x5916,0x5d6c,0x5dcd,0x7325,0x754f,0xf9ba,0xf9bb,
-0x50e5,0x51f9,0x582f,0x592d,0x5996,0x59da,0x5be5,0xf9bc,
-0xf9bd,0x5da2,0x62d7,0x6416,0x6493,0x64fe,0xf9be,0x66dc,
-0xf9bf,0x6a48,0xf9c0,0x71ff,0x7464,0xf9c1,0x7a88,0x7aaf,
-0x7e47,0x7e5e,0x8000,0x8170,0xf9c2,0x87ef,0x8981,0x8b20,
-0x9059,0xf9c3,0x9080,0x9952,0x617e,0x6b32,0x6d74,0x7e1f,
-0x8925,0x8fb1,0x4fd1,0x50ad,0x5197,0x52c7,0x57c7,0x5889,
-0x5bb9,0x5eb8,0x6142,0x6995,0x6d8c,0x6e67,0x6eb6,0x7194,
-0x7462,0x7528,0x752c,0x8073,0x8338,0x84c9,0x8e0a,0x9394,
-0x93de,0xf9c4,0x4e8e,0x4f51,0x5076,0x512a,0x53c8,0x53cb,
-0x53f3,0x5b87,0x5bd3,0x5c24,0x611a,0x6182,0x65f4,0x725b,
-0x7397,0x7440,0x76c2,0x7950,0x7991,0x79b9,0x7d06,0x7fbd,
-0x828b,0x85d5,0x865e,0x8fc2,0x9047,0x90f5,0x91ea,0x9685,
-0x96e8,0x96e9,0x52d6,0x5f67,0x65ed,0x6631,0x682f,0x715c,
-0x7a36,0x90c1,0x980a,0x4e91,0xf9c5,0x6a52,0x6b9e,0x6f90,
-0x7189,0x8018,0x82b8,0x8553,0x904b,0x9695,0x96f2,0x97fb,
-0x851a,0x9b31,0x4e90,0x718a,0x96c4,0x5143,0x539f,0x54e1,
-0x5713,0x5712,0x57a3,0x5a9b,0x5ac4,0x5bc3,0x6028,0x613f,
-0x63f4,0x6c85,0x6d39,0x6e72,0x6e90,0x7230,0x733f,0x7457,
-0x82d1,0x8881,0x8f45,0x9060,0xf9c6,0x9662,0x9858,0x9d1b,
-0x6708,0x8d8a,0x925e,0x4f4d,0x5049,0x50de,0x5371,0x570d,
-0x59d4,0x5a01,0x5c09,0x6170,0x6690,0x6e2d,0x7232,0x744b,
-0x7def,0x80c3,0x840e,0x8466,0x853f,0x875f,0x885b,0x8918,
-0x8b02,0x9055,0x97cb,0x9b4f,0x4e73,0x4f91,0x5112,0x516a,
-0xf9c7,0x552f,0x55a9,0x5b7a,0x5ba5,0x5e7c,0x5e7d,0x5ebe,
-0x60a0,0x60df,0x6108,0x6109,0x63c4,0x6538,0x6709,0xf9c8,
-0x67d4,0x67da,0xf9c9,0x6961,0x6962,0x6cb9,0x6d27,0xf9ca,
-0x6e38,0xf9cb,0x6fe1,0x7336,0x7337,0xf9cc,0x745c,0x7531,
-0xf9cd,0x7652,0xf9ce,0xf9cf,0x7dad,0x81fe,0x8438,0x88d5,
-0x8a98,0x8adb,0x8aed,0x8e30,0x8e42,0x904a,0x903e,0x907a,
-0x9149,0x91c9,0x936e,0xf9d0,0xf9d1,0x5809,0xf9d2,0x6bd3,
-0x8089,0x80b2,0xf9d3,0xf9d4,0x5141,0x596b,0x5c39,0xf9d5,
-0xf9d6,0x6f64,0x73a7,0x80e4,0x8d07,0xf9d7,0x9217,0x958f,
-0xf9d8,0xf9d9,0xf9da,0xf9db,0x807f,0x620e,0x701c,0x7d68,
-0x878d,0xf9dc,0x57a0,0x6069,0x6147,0x6bb7,0x8abe,0x9280,
-0x96b1,0x4e59,0x541f,0x6deb,0x852d,0x9670,0x97f3,0x98ee,
-0x63d6,0x6ce3,0x9091,0x51dd,0x61c9,0x81ba,0x9df9,0x4f9d,
-0x501a,0x5100,0x5b9c,0x610f,0x61ff,0x64ec,0x6905,0x6bc5,
-0x7591,0x77e3,0x7fa9,0x8264,0x858f,0x87fb,0x8863,0x8abc,
-0x8b70,0x91ab,0x4e8c,0x4ee5,0x4f0a,0xf9dd,0xf9de,0x5937,
-0x59e8,0xf9df,0x5df2,0x5f1b,0x5f5b,0x6021,0xf9e0,0xf9e1,
-0xf9e2,0xf9e3,0x723e,0x73e5,0xf9e4,0x7570,0x75cd,0xf9e5,
-0x79fb,0xf9e6,0x800c,0x8033,0x8084,0x82e1,0x8351,0xf9e7,
-0xf9e8,0x8cbd,0x8cb3,0x9087,0xf9e9,0xf9ea,0x98f4,0x990c,
-0xf9eb,0xf9ec,0x7037,0x76ca,0x7fca,0x7fcc,0x7ffc,0x8b1a,
-0x4eba,0x4ec1,0x5203,0x5370,0xf9ed,0x54bd,0x56e0,0x59fb,
-0x5bc5,0x5f15,0x5fcd,0x6e6e,0xf9ee,0xf9ef,0x7d6a,0x8335,
-0xf9f0,0x8693,0x8a8d,0xf9f1,0x976d,0x9777,0xf9f2,0xf9f3,
-0x4e00,0x4f5a,0x4f7e,0x58f9,0x65e5,0x6ea2,0x9038,0x93b0,
-0x99b9,0x4efb,0x58ec,0x598a,0x59d9,0x6041,0xf9f4,0xf9f5,
-0x7a14,0xf9f6,0x834f,0x8cc3,0x5165,0x5344,0xf9f7,0xf9f8,
-0xf9f9,0x4ecd,0x5269,0x5b55,0x82bf,0x4ed4,0x523a,0x54a8,
-0x59c9,0x59ff,0x5b50,0x5b57,0x5b5c,0x6063,0x6148,0x6ecb,
-0x7099,0x716e,0x7386,0x74f7,0x75b5,0x78c1,0x7d2b,0x8005,
-0x81ea,0x8328,0x8517,0x85c9,0x8aee,0x8cc7,0x96cc,0x4f5c,
-0x52fa,0x56bc,0x65ab,0x6628,0x707c,0x70b8,0x7235,0x7dbd,
-0x828d,0x914c,0x96c0,0x9d72,0x5b71,0x68e7,0x6b98,0x6f7a,
-0x76de,0x5c91,0x66ab,0x6f5b,0x7bb4,0x7c2a,0x8836,0x96dc,
-0x4e08,0x4ed7,0x5320,0x5834,0x58bb,0x58ef,0x596c,0x5c07,
-0x5e33,0x5e84,0x5f35,0x638c,0x66b2,0x6756,0x6a1f,0x6aa3,
-0x6b0c,0x6f3f,0x7246,0xf9fa,0x7350,0x748b,0x7ae0,0x7ca7,
-0x8178,0x81df,0x81e7,0x838a,0x846c,0x8523,0x8594,0x85cf,
-0x88dd,0x8d13,0x91ac,0x9577,0x969c,0x518d,0x54c9,0x5728,
-0x5bb0,0x624d,0x6750,0x683d,0x6893,0x6e3d,0x6ed3,0x707d,
-0x7e21,0x88c1,0x8ca1,0x8f09,0x9f4b,0x9f4e,0x722d,0x7b8f,
-0x8acd,0x931a,0x4f47,0x4f4e,0x5132,0x5480,0x59d0,0x5e95,
-0x62b5,0x6775,0x696e,0x6a17,0x6cae,0x6e1a,0x72d9,0x732a,
-0x75bd,0x7bb8,0x7d35,0x82e7,0x83f9,0x8457,0x85f7,0x8a5b,
-0x8caf,0x8e87,0x9019,0x90b8,0x96ce,0x9f5f,0x52e3,0x540a,
-0x5ae1,0x5bc2,0x6458,0x6575,0x6ef4,0x72c4,0xf9fb,0x7684,
-0x7a4d,0x7b1b,0x7c4d,0x7e3e,0x7fdf,0x837b,0x8b2b,0x8cca,
-0x8d64,0x8de1,0x8e5f,0x8fea,0x8ff9,0x9069,0x93d1,0x4f43,
-0x4f7a,0x50b3,0x5168,0x5178,0x524d,0x526a,0x5861,0x587c,
-0x5960,0x5c08,0x5c55,0x5edb,0x609b,0x6230,0x6813,0x6bbf,
-0x6c08,0x6fb1,0x714e,0x7420,0x7530,0x7538,0x7551,0x7672,
-0x7b4c,0x7b8b,0x7bad,0x7bc6,0x7e8f,0x8a6e,0x8f3e,0x8f49,
-0x923f,0x9293,0x9322,0x942b,0x96fb,0x985a,0x986b,0x991e,
-0x5207,0x622a,0x6298,0x6d59,0x7664,0x7aca,0x7bc0,0x7d76,
-0x5360,0x5cbe,0x5e97,0x6f38,0x70b9,0x7c98,0x9711,0x9b8e,
-0x9ede,0x63a5,0x647a,0x8776,0x4e01,0x4e95,0x4ead,0x505c,
-0x5075,0x5448,0x59c3,0x5b9a,0x5e40,0x5ead,0x5ef7,0x5f81,
-0x60c5,0x633a,0x653f,0x6574,0x65cc,0x6676,0x6678,0x67fe,
-0x6968,0x6a89,0x6b63,0x6c40,0x6dc0,0x6de8,0x6e1f,0x6e5e,
-0x701e,0x70a1,0x738e,0x73fd,0x753a,0x775b,0x7887,0x798e,
-0x7a0b,0x7a7d,0x7cbe,0x7d8e,0x8247,0x8a02,0x8aea,0x8c9e,
-0x912d,0x914a,0x91d8,0x9266,0x92cc,0x9320,0x9706,0x9756,
-0x975c,0x9802,0x9f0e,0x5236,0x5291,0x557c,0x5824,0x5e1d,
-0x5f1f,0x608c,0x63d0,0x68af,0x6fdf,0x796d,0x7b2c,0x81cd,
-0x85ba,0x88fd,0x8af8,0x8e44,0x918d,0x9664,0x969b,0x973d,
-0x984c,0x9f4a,0x4fce,0x5146,0x51cb,0x52a9,0x5632,0x5f14,
-0x5f6b,0x63aa,0x64cd,0x65e9,0x6641,0x66fa,0x66f9,0x671d,
-0x689d,0x68d7,0x69fd,0x6f15,0x6f6e,0x7167,0x71e5,0x722a,
-0x74aa,0x773a,0x7956,0x795a,0x79df,0x7a20,0x7a95,0x7c97,
-0x7cdf,0x7d44,0x7e70,0x8087,0x85fb,0x86a4,0x8a54,0x8abf,
-0x8d99,0x8e81,0x9020,0x906d,0x91e3,0x963b,0x96d5,0x9ce5,
-0x65cf,0x7c07,0x8db3,0x93c3,0x5b58,0x5c0a,0x5352,0x62d9,
-0x731d,0x5027,0x5b97,0x5f9e,0x60b0,0x616b,0x68d5,0x6dd9,
-0x742e,0x7a2e,0x7d42,0x7d9c,0x7e31,0x816b,0x8e2a,0x8e35,
-0x937e,0x9418,0x4f50,0x5750,0x5de6,0x5ea7,0x632b,0x7f6a,
-0x4e3b,0x4f4f,0x4f8f,0x505a,0x59dd,0x80c4,0x546a,0x5468,
-0x55fe,0x594f,0x5b99,0x5dde,0x5eda,0x665d,0x6731,0x67f1,
-0x682a,0x6ce8,0x6d32,0x6e4a,0x6f8d,0x70b7,0x73e0,0x7587,
-0x7c4c,0x7d02,0x7d2c,0x7da2,0x821f,0x86db,0x8a3b,0x8a85,
-0x8d70,0x8e8a,0x8f33,0x9031,0x914e,0x9152,0x9444,0x99d0,
-0x7af9,0x7ca5,0x4fca,0x5101,0x51c6,0x57c8,0x5bef,0x5cfb,
-0x6659,0x6a3d,0x6d5a,0x6e96,0x6fec,0x710c,0x756f,0x7ae3,
-0x8822,0x9021,0x9075,0x96cb,0x99ff,0x8301,0x4e2d,0x4ef2,
-0x8846,0x91cd,0x537d,0x6adb,0x696b,0x6c41,0x847a,0x589e,
-0x618e,0x66fe,0x62ef,0x70dd,0x7511,0x75c7,0x7e52,0x84b8,
-0x8b49,0x8d08,0x4e4b,0x53ea,0x54ab,0x5730,0x5740,0x5fd7,
-0x6301,0x6307,0x646f,0x652f,0x65e8,0x667a,0x679d,0x67b3,
-0x6b62,0x6c60,0x6c9a,0x6f2c,0x77e5,0x7825,0x7949,0x7957,
-0x7d19,0x80a2,0x8102,0x81f3,0x829d,0x82b7,0x8718,0x8a8c,
-0xf9fc,0x8d04,0x8dbe,0x9072,0x76f4,0x7a19,0x7a37,0x7e54,
-0x8077,0x5507,0x55d4,0x5875,0x632f,0x6422,0x6649,0x664b,
-0x686d,0x699b,0x6b84,0x6d25,0x6eb1,0x73cd,0x7468,0x74a1,
-0x755b,0x75b9,0x76e1,0x771e,0x778b,0x79e6,0x7e09,0x7e1d,
-0x81fb,0x852f,0x8897,0x8a3a,0x8cd1,0x8eeb,0x8fb0,0x9032,
-0x93ad,0x9663,0x9673,0x9707,0x4f84,0x53f1,0x59ea,0x5ac9,
-0x5e19,0x684e,0x74c6,0x75be,0x79e9,0x7a92,0x81a3,0x86ed,
-0x8cea,0x8dcc,0x8fed,0x659f,0x6715,0xf9fd,0x57f7,0x6f57,
-0x7ddd,0x8f2f,0x93f6,0x96c6,0x5fb5,0x61f2,0x6f84,0x4e14,
-0x4f98,0x501f,0x53c9,0x55df,0x5d6f,0x5dee,0x6b21,0x6b64,
-0x78cb,0x7b9a,0xf9fe,0x8e49,0x8eca,0x906e,0x6349,0x643e,
-0x7740,0x7a84,0x932f,0x947f,0x9f6a,0x64b0,0x6faf,0x71e6,
-0x74a8,0x74da,0x7ac4,0x7c12,0x7e82,0x7cb2,0x7e98,0x8b9a,
-0x8d0a,0x947d,0x9910,0x994c,0x5239,0x5bdf,0x64e6,0x672d,
-0x7d2e,0x50ed,0x53c3,0x5879,0x6158,0x6159,0x61fa,0x65ac,
-0x7ad9,0x8b92,0x8b96,0x5009,0x5021,0x5275,0x5531,0x5a3c,
-0x5ee0,0x5f70,0x6134,0x655e,0x660c,0x6636,0x66a2,0x69cd,
-0x6ec4,0x6f32,0x7316,0x7621,0x7a93,0x8139,0x8259,0x83d6,
-0x84bc,0x50b5,0x57f0,0x5bc0,0x5be8,0x5f69,0x63a1,0x7826,
-0x7db5,0x83dc,0x8521,0x91c7,0x91f5,0x518a,0x67f5,0x7b56,
-0x8cac,0x51c4,0x59bb,0x60bd,0x8655,0x501c,0xf9ff,0x5254,
-0x5c3a,0x617d,0x621a,0x62d3,0x64f2,0x65a5,0x6ecc,0x7620,
-0x810a,0x8e60,0x965f,0x96bb,0x4edf,0x5343,0x5598,0x5929,
-0x5ddd,0x64c5,0x6cc9,0x6dfa,0x7394,0x7a7f,0x821b,0x85a6,
-0x8ce4,0x8e10,0x9077,0x91e7,0x95e1,0x9621,0x97c6,0x51f8,
-0x54f2,0x5586,0x5fb9,0x64a4,0x6f88,0x7db4,0x8f1f,0x8f4d,
-0x9435,0x50c9,0x5c16,0x6cbe,0x6dfb,0x751b,0x77bb,0x7c3d,
-0x7c64,0x8a79,0x8ac2,0x581e,0x59be,0x5e16,0x6377,0x7252,
-0x758a,0x776b,0x8adc,0x8cbc,0x8f12,0x5ef3,0x6674,0x6df8,
-0x807d,0x83c1,0x8acb,0x9751,0x9bd6,0xfa00,0x5243,0x66ff,
-0x6d95,0x6eef,0x7de0,0x8ae6,0x902e,0x905e,0x9ad4,0x521d,
-0x527f,0x54e8,0x6194,0x6284,0x62db,0x68a2,0x6912,0x695a,
-0x6a35,0x7092,0x7126,0x785d,0x7901,0x790e,0x79d2,0x7a0d,
-0x8096,0x8278,0x82d5,0x8349,0x8549,0x8c82,0x8d85,0x9162,
-0x918b,0x91ae,0x4fc3,0x56d1,0x71ed,0x77d7,0x8700,0x89f8,
-0x5bf8,0x5fd6,0x6751,0x90a8,0x53e2,0x585a,0x5bf5,0x60a4,
-0x6181,0x6460,0x7e3d,0x8070,0x8525,0x9283,0x64ae,0x50ac,
-0x5d14,0x6700,0x589c,0x62bd,0x63a8,0x690e,0x6978,0x6a1e,
-0x6e6b,0x76ba,0x79cb,0x82bb,0x8429,0x8acf,0x8da8,0x8ffd,
-0x9112,0x914b,0x919c,0x9310,0x9318,0x939a,0x96db,0x9a36,
-0x9c0d,0x4e11,0x755c,0x795d,0x7afa,0x7b51,0x7bc9,0x7e2e,
-0x84c4,0x8e59,0x8e74,0x8ef8,0x9010,0x6625,0x693f,0x7443,
-0x51fa,0x672e,0x9edc,0x5145,0x5fe0,0x6c96,0x87f2,0x885d,
-0x8877,0x60b4,0x81b5,0x8403,0x8d05,0x53d6,0x5439,0x5634,
-0x5a36,0x5c31,0x708a,0x7fe0,0x805a,0x8106,0x81ed,0x8da3,
-0x9189,0x9a5f,0x9df2,0x5074,0x4ec4,0x53a0,0x60fb,0x6e2c,
-0x5c64,0x4f88,0x5024,0x55e4,0x5cd9,0x5e5f,0x6065,0x6894,
-0x6cbb,0x6dc4,0x71be,0x75d4,0x75f4,0x7661,0x7a1a,0x7a49,
-0x7dc7,0x7dfb,0x7f6e,0x81f4,0x86a9,0x8f1c,0x96c9,0x99b3,
-0x9f52,0x5247,0x52c5,0x98ed,0x89aa,0x4e03,0x67d2,0x6f06,
-0x4fb5,0x5be2,0x6795,0x6c88,0x6d78,0x741b,0x7827,0x91dd,
-0x937c,0x87c4,0x79e4,0x7a31,0x5feb,0x4ed6,0x54a4,0x553e,
-0x58ae,0x59a5,0x60f0,0x6253,0x62d6,0x6736,0x6955,0x8235,
-0x9640,0x99b1,0x99dd,0x502c,0x5353,0x5544,0x577c,0xfa01,
-0x6258,0xfa02,0x64e2,0x666b,0x67dd,0x6fc1,0x6fef,0x7422,
-0x7438,0x8a17,0x9438,0x5451,0x5606,0x5766,0x5f48,0x619a,
-0x6b4e,0x7058,0x70ad,0x7dbb,0x8a95,0x596a,0x812b,0x63a2,
-0x7708,0x803d,0x8caa,0x5854,0x642d,0x69bb,0x5b95,0x5e11,
-0x6e6f,0xfa03,0x8569,0x514c,0x53f0,0x592a,0x6020,0x614b,
-0x6b86,0x6c70,0x6cf0,0x7b1e,0x80ce,0x82d4,0x8dc6,0x90b0,
-0x98b1,0xfa04,0x64c7,0x6fa4,0x6491,0x6504,0x514e,0x5410,
-0x571f,0x8a0e,0x615f,0x6876,0xfa05,0x75db,0x7b52,0x7d71,
-0x901a,0x5806,0x69cc,0x817f,0x892a,0x9000,0x9839,0x5078,
-0x5957,0x59ac,0x6295,0x900f,0x9b2a,0x615d,0x7279,0x95d6,
-0x5761,0x5a46,0x5df4,0x628a,0x64ad,0x64fa,0x6777,0x6ce2,
-0x6d3e,0x722c,0x7436,0x7834,0x7f77,0x82ad,0x8ddb,0x9817,
-0x5224,0x5742,0x677f,0x7248,0x74e3,0x8ca9,0x8fa6,0x9211,
-0x962a,0x516b,0x53ed,0x634c,0x4f69,0x5504,0x6096,0x6557,
-0x6c9b,0x6d7f,0x724c,0x72fd,0x7a17,0x8987,0x8c9d,0x5f6d,
-0x6f8e,0x70f9,0x81a8,0x610e,0x4fbf,0x504f,0x6241,0x7247,
-0x7bc7,0x7de8,0x7fe9,0x904d,0x97ad,0x9a19,0x8cb6,0x576a,
-0x5e73,0x67b0,0x840d,0x8a55,0x5420,0x5b16,0x5e63,0x5ee2,
-0x5f0a,0x6583,0x80ba,0x853d,0x9589,0x965b,0x4f48,0x5305,
-0x530d,0x530f,0x5486,0x54fa,0x5703,0x5e03,0x6016,0x629b,
-0x62b1,0x6355,0xfa06,0x6ce1,0x6d66,0x75b1,0x7832,0x80de,
-0x812f,0x82de,0x8461,0x84b2,0x888d,0x8912,0x900b,0x92ea,
-0x98fd,0x9b91,0x5e45,0x66b4,0x66dd,0x7011,0x7206,0xfa07,
-0x4ff5,0x527d,0x5f6a,0x6153,0x6753,0x6a19,0x6f02,0x74e2,
-0x7968,0x8868,0x8c79,0x98c7,0x98c4,0x9a43,0x54c1,0x7a1f,
-0x6953,0x8af7,0x8c4a,0x98a8,0x99ae,0x5f7c,0x62ab,0x75b2,
-0x76ae,0x88ab,0x907f,0x9642,0x5339,0x5f3c,0x5fc5,0x6ccc,
-0x73cc,0x7562,0x758b,0x7b46,0x82fe,0x999d,0x4e4f,0x903c,
-0x4e0b,0x4f55,0x53a6,0x590f,0x5ec8,0x6630,0x6cb3,0x7455,
-0x8377,0x8766,0x8cc0,0x9050,0x971e,0x9c15,0x58d1,0x5b78,
-0x8650,0x8b14,0x9db4,0x5bd2,0x6068,0x608d,0x65f1,0x6c57,
-0x6f22,0x6fa3,0x701a,0x7f55,0x7ff0,0x9591,0x9592,0x9650,
-0x97d3,0x5272,0x8f44,0x51fd,0x542b,0x54b8,0x5563,0x558a,
-0x6abb,0x6db5,0x7dd8,0x8266,0x929c,0x9677,0x9e79,0x5408,
-0x54c8,0x76d2,0x86e4,0x95a4,0x95d4,0x965c,0x4ea2,0x4f09,
-0x59ee,0x5ae6,0x5df7,0x6052,0x6297,0x676d,0x6841,0x6c86,
-0x6e2f,0x7f38,0x809b,0x822a,0xfa08,0xfa09,0x9805,0x4ea5,
-0x5055,0x54b3,0x5793,0x595a,0x5b69,0x5bb3,0x61c8,0x6977,
-0x6d77,0x7023,0x87f9,0x89e3,0x8a72,0x8ae7,0x9082,0x99ed,
-0x9ab8,0x52be,0x6838,0x5016,0x5e78,0x674f,0x8347,0x884c,
-0x4eab,0x5411,0x56ae,0x73e6,0x9115,0x97ff,0x9909,0x9957,
-0x9999,0x5653,0x589f,0x865b,0x8a31,0x61b2,0x6af6,0x737b,
-0x8ed2,0x6b47,0x96aa,0x9a57,0x5955,0x7200,0x8d6b,0x9769,
-0x4fd4,0x5cf4,0x5f26,0x61f8,0x665b,0x6ceb,0x70ab,0x7384,
-0x73b9,0x73fe,0x7729,0x774d,0x7d43,0x7d62,0x7e23,0x8237,
-0x8852,0xfa0a,0x8ce2,0x9249,0x986f,0x5b51,0x7a74,0x8840,
-0x9801,0x5acc,0x4fe0,0x5354,0x593e,0x5cfd,0x633e,0x6d79,
-0x72f9,0x8105,0x8107,0x83a2,0x92cf,0x9830,0x4ea8,0x5144,
-0x5211,0x578b,0x5f62,0x6cc2,0x6ece,0x7005,0x7050,0x70af,
-0x7192,0x73e9,0x7469,0x834a,0x87a2,0x8861,0x9008,0x90a2,
-0x93a3,0x99a8,0x516e,0x5f57,0x60e0,0x6167,0x66b3,0x8559,
-0x8e4a,0x91af,0x978b,0x4e4e,0x4e92,0x547c,0x58d5,0x58fa,
-0x597d,0x5cb5,0x5f27,0x6236,0x6248,0x660a,0x6667,0x6beb,
-0x6d69,0x6dcf,0x6e56,0x6ef8,0x6f94,0x6fe0,0x6fe9,0x705d,
-0x72d0,0x7425,0x745a,0x74e0,0x7693,0x795c,0x7cca,0x7e1e,
-0x80e1,0x82a6,0x846b,0x84bf,0x864e,0x865f,0x8774,0x8b77,
-0x8c6a,0x93ac,0x9800,0x9865,0x60d1,0x6216,0x9177,0x5a5a,
-0x660f,0x6df7,0x6e3e,0x743f,0x9b42,0x5ffd,0x60da,0x7b0f,
-0x54c4,0x5f18,0x6c5e,0x6cd3,0x6d2a,0x70d8,0x7d05,0x8679,
-0x8a0c,0x9d3b,0x5316,0x548c,0x5b05,0x6a3a,0x706b,0x7575,
-0x798d,0x79be,0x82b1,0x83ef,0x8a71,0x8b41,0x8ca8,0x9774,
-0xfa0b,0x64f4,0x652b,0x78ba,0x78bb,0x7a6b,0x4e38,0x559a,
-0x5950,0x5ba6,0x5e7b,0x60a3,0x63db,0x6b61,0x6665,0x6853,
-0x6e19,0x7165,0x74b0,0x7d08,0x9084,0x9a69,0x9c25,0x6d3b,
-0x6ed1,0x733e,0x8c41,0x95ca,0x51f0,0x5e4c,0x5fa8,0x604d,
-0x60f6,0x6130,0x614c,0x6643,0x6644,0x69a5,0x6cc1,0x6e5f,
-0x6ec9,0x6f62,0x714c,0x749c,0x7687,0x7bc1,0x7c27,0x8352,
-0x8757,0x9051,0x968d,0x9ec3,0x532f,0x56de,0x5efb,0x5f8a,
-0x6062,0x6094,0x61f7,0x6666,0x6703,0x6a9c,0x6dee,0x6fae,
-0x7070,0x736a,0x7e6a,0x81be,0x8334,0x86d4,0x8aa8,0x8cc4,
-0x5283,0x7372,0x5b96,0x6a6b,0x9404,0x54ee,0x5686,0x5b5d,
-0x6548,0x6585,0x66c9,0x689f,0x6d8d,0x6dc6,0x723b,0x80b4,
-0x9175,0x9a4d,0x4faf,0x5019,0x539a,0x540e,0x543c,0x5589,
-0x55c5,0x5e3f,0x5f8c,0x673d,0x7166,0x73dd,0x9005,0x52db,
-0x52f3,0x5864,0x58ce,0x7104,0x718f,0x71fb,0x85b0,0x8a13,
-0x6688,0x85a8,0x55a7,0x6684,0x714a,0x8431,0x5349,0x5599,
-0x6bc1,0x5f59,0x5fbd,0x63ee,0x6689,0x7147,0x8af1,0x8f1d,
-0x9ebe,0x4f11,0x643a,0x70cb,0x7566,0x8667,0x6064,0x8b4e,
-0x9df8,0x5147,0x51f6,0x5308,0x6d36,0x80f8,0x9ed1,0x6615,
-0x6b23,0x7098,0x75d5,0x5403,0x5c79,0x7d07,0x8a16,0x6b20,
-0x6b3d,0x6b46,0x5438,0x6070,0x6d3d,0x7fd5,0x8208,0x50d6,
-0x51de,0x559c,0x566b,0x56cd,0x59ec,0x5b09,0x5e0c,0x6199,
-0x6198,0x6231,0x665e,0x66e6,0x7199,0x71b9,0x71ba,0x72a7,
-0x79a7,0x7a00,0x7fb2,0x8a70};
-
-static const int uhc3_ucs_table_size = (sizeof(uhc3_ucs_table)/sizeof(unsigned short));
-
-/* UCS -> UHC */
-static const unsigned short ucs_a1_uhc_table[] = {
-0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
-0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
-0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
-0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
-0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
-0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
-0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
-0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
-0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
-0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
-0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
-0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
-0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
-0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
-0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
-0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2ae,0x0000,0x0000,0xa2b4,0x0000,0x0000,0xa1d7,
-0xa1a7,0x0000,0xa8a3,0x0000,0x0000,0xa1a9,0xa2e7,0x0000,
-0xa1c6,0xa1be,0xa9f7,0xa9f8,0xa2a5,0x0000,0xa2d2,0xa1a4,
-0xa2ac,0xa9f6,0xa8ac,0x0000,0xa8f9,0xa8f6,0xa8fa,0xa2af,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1bf,
-0xa8aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8ad,0xa9ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9a1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa9a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c0,
-0xa9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9ad,0x0000,
-/* 0x0100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa9a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a4,0xa9a4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa9a5,0xa8a6,0xa9a6,0x0000,0x0000,0x0000,0x0000,
-0xa9a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a8,
-0xa9a8,0xa8a9,0xa9a9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa9b0,0xa8af,0xa9af,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa8ab,0xa9ab,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8ae,0xa9ae,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa2a7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2b0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2a8,0xa2ab,0xa2aa,0xa2ad,0x0000,0xa2a9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa5c1,0xa5c2,0xa5c3,0xa5c4,0xa5c5,0xa5c6,0xa5c7,
-0xa5c8,0xa5c9,0xa5ca,0xa5cb,0xa5cc,0xa5cd,0xa5ce,0xa5cf,
-0xa5d0,0xa5d1,0x0000,0xa5d2,0xa5d3,0xa5d4,0xa5d5,0xa5d6,
-0xa5d7,0xa5d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa5e1,0xa5e2,0xa5e3,0xa5e4,0xa5e5,0xa5e6,0xa5e7,
-0xa5e8,0xa5e9,0xa5ea,0xa5eb,0xa5ec,0xa5ed,0xa5ee,0xa5ef,
-0xa5f0,0xa5f1,0x0000,0xa5f2,0xa5f3,0xa5f4,0xa5f5,0xa5f6,
-0xa5f7,0xa5f8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0400 */
-0x0000,0xaca7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xaca1,0xaca2,0xaca3,0xaca4,0xaca5,0xaca6,0xaca8,0xaca9,
-0xacaa,0xacab,0xacac,0xacad,0xacae,0xacaf,0xacb0,0xacb1,
-0xacb2,0xacb3,0xacb4,0xacb5,0xacb6,0xacb7,0xacb8,0xacb9,
-0xacba,0xacbb,0xacbc,0xacbd,0xacbe,0xacbf,0xacc0,0xacc1,
-0xacd1,0xacd2,0xacd3,0xacd4,0xacd5,0xacd6,0xacd8,0xacd9,
-0xacda,0xacdb,0xacdc,0xacdd,0xacde,0xacdf,0xace0,0xace1,
-0xace2,0xace3,0xace4,0xace5,0xace6,0xace7,0xace8,0xace9,
-0xacea,0xaceb,0xacec,0xaced,0xacee,0xacef,0xacf0,0xacf1,
-0x0000,0xacd7};
-
-static const int ucs_a1_uhc_table_min = 0x0000;
-static const int ucs_a1_uhc_table_max = 0x0000 + (sizeof(ucs_a1_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_a2_uhc_table[] = {
-/* 0x2000 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1aa,0x0000,0x0000,
-0xa1ae,0xa1af,0x0000,0x0000,0xa1b0,0xa1b1,0x0000,0x0000,
-0xa2d3,0xa2d4,0x0000,0x0000,0x0000,0xa1a5,0xa1a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2b6,0x0000,0xa1c7,0xa1c8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1d8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa9f9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9fa,
-0x0000,0xa9fb,0xa9fc,0xa9fd,0xa9fe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa2e6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2100 */
-0x0000,0x0000,0x0000,0xa1c9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa7a4,0x0000,0x0000,0xa2e0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2e5,0xa2e2,0x0000,0x0000,0x0000,0xa7d9,0x0000,
-0x0000,0x0000,0x0000,0xa1ca,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8f7,0xa8f8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8fb,0xa8fc,0xa8fd,0xa8fe,0x0000,
-0xa5b0,0xa5b1,0xa5b2,0xa5b3,0xa5b4,0xa5b5,0xa5b6,0xa5b7,
-0xa5b8,0xa5b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa5a1,0xa5a2,0xa5a3,0xa5a4,0xa5a5,0xa5a6,0xa5a7,0xa5a8,
-0xa5a9,0xa5aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e7,0xa1e8,0xa1e6,0xa1e9,0xa1ea,0xa2d5,0xa2d8,0xa2d6,
-0xa2d9,0xa2d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa2a1,0x0000,0xa2a2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2a3,0x0000,0xa1d3,0xa2a4,0x0000,0x0000,0x0000,0xa1d4,
-0xa1f4,0x0000,0x0000,0xa1f5,0x0000,0x0000,0x0000,0xa2b3,
-0x0000,0xa2b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1ee,0x0000,0x0000,0xa1f0,0xa1c4,0x0000,
-0xa1d0,0x0000,0x0000,0x0000,0x0000,0xa1ab,0x0000,0xa1fc,
-0xa1fd,0xa1fb,0xa1fa,0xa1f2,0xa1f3,0x0000,0xa2b1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1c5,0xa1f1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1ad,0xa1ef,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1d6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1c1,0xa1d5,0x0000,0x0000,0xa1c2,0xa1c3,0x0000,0x0000,
-0x0000,0x0000,0xa1ec,0xa1ed,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1f8,0xa1f9,0x0000,0x0000,0xa1f6,0xa1f7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1d2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8e7,0xa8e8,0xa8e9,0xa8ea,0xa8eb,0xa8ec,0xa8ed,0xa8ee,
-0xa8ef,0xa8f0,0xa8f1,0xa8f2,0xa8f3,0xa8f4,0xa8f5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa9e7,0xa9e8,0xa9e9,0xa9ea,
-0xa9eb,0xa9ec,0xa9ed,0xa9ee,0xa9ef,0xa9f0,0xa9f1,0xa9f2,
-0xa9f3,0xa9f4,0xa9f5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa9cd,0xa9ce,0xa9cf,0xa9d0,
-0xa9d1,0xa9d2,0xa9d3,0xa9d4,0xa9d5,0xa9d6,0xa9d7,0xa9d8,
-0xa9d9,0xa9da,0xa9db,0xa9dc,0xa9dd,0xa9de,0xa9df,0xa9e0,
-0xa9e1,0xa9e2,0xa9e3,0xa9e4,0xa9e5,0xa9e6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8cd,0xa8ce,0xa8cf,0xa8d0,0xa8d1,0xa8d2,0xa8d3,0xa8d4,
-0xa8d5,0xa8d6,0xa8d7,0xa8d8,0xa8d9,0xa8da,0xa8db,0xa8dc,
-0xa8dd,0xa8de,0xa8df,0xa8e0,0xa8e1,0xa8e2,0xa8e3,0xa8e4,
-0xa8e5,0xa8e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa6a1,0xa6ac,0xa6a2,0xa6ad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa6a3,0xa6c8,0xa6c7,0xa6ae,
-0xa6a4,0xa6c2,0xa6c1,0xa6af,0xa6a6,0xa6c6,0xa6c5,0xa6b1,
-0xa6a5,0xa6c4,0xa6c3,0xa6b0,0xa6a7,0xa6bc,0xa6c9,0xa6ca,
-0xa6b7,0xa6cb,0xa6cc,0xa6b2,0xa6a9,0xa6be,0xa6cd,0xa6ce,
-0xa6b9,0xa6cf,0xa6d0,0xa6b4,0xa6a8,0xa6d1,0xa6d2,0xa6b8,
-0xa6bd,0xa6d3,0xa6d4,0xa6b3,0xa6aa,0xa6d5,0xa6d6,0xa6ba,
-0xa6bf,0xa6d7,0xa6d8,0xa6b5,0xa6ab,0xa6d9,0xa6da,0xa6bb,
-0xa6db,0xa6dc,0xa6c0,0xa6dd,0xa6de,0xa6df,0xa6e0,0xa6e1,
-0xa6e2,0xa6e3,0xa6e4,0xa6b6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa2c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e1,0xa1e0,0x0000,0xa2c3,0xa2c7,0xa2c8,0xa2cb,0xa2ca,
-0xa2c9,0xa2cc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1e3,0xa1e2,0x0000,0x0000,0xa2ba,0xa2b9,
-0x0000,0x0000,0x0000,0x0000,0xa1e5,0xa1e4,0x0000,0x0000,
-0xa2b8,0xa2b7,0x0000,0x0000,0x0000,0x0000,0xa1df,0xa1de,
-0xa2c2,0x0000,0x0000,0xa1db,0x0000,0x0000,0xa1dd,0xa1dc,
-0xa2c4,0xa2c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1da,0xa1d9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa2cf,0xa2ce,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa2d0,0x0000,0xa2d1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1cf,0x0000,0xa1ce,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2bc,0xa2bd,0x0000,0xa2c0,0xa2bb,0xa2be,0x0000,0xa2bf,
-0xa2cd,0xa2db,0xa2dc,0x0000,0xa2dd,0xa2da};
-
-static const int ucs_a2_uhc_table_min = 0x2000;
-static const int ucs_a2_uhc_table_max = 0x2000 + (sizeof(ucs_a2_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_a3_uhc_table[] = {
-/* 0x2f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1a1,0xa1a2,0xa1a3,0xa1a8,0x0000,0x0000,0x0000,0x0000,
-0xa1b4,0xa1b5,0xa1b6,0xa1b7,0xa1b8,0xa1b9,0xa1ba,0xa1bb,
-0xa1bc,0xa1bd,0x0000,0xa1eb,0xa1b2,0xa1b3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xaaa1,0xaaa2,0xaaa3,0xaaa4,0xaaa5,0xaaa6,0xaaa7,
-0xaaa8,0xaaa9,0xaaaa,0xaaab,0xaaac,0xaaad,0xaaae,0xaaaf,
-0xaab0,0xaab1,0xaab2,0xaab3,0xaab4,0xaab5,0xaab6,0xaab7,
-0xaab8,0xaab9,0xaaba,0xaabb,0xaabc,0xaabd,0xaabe,0xaabf,
-0xaac0,0xaac1,0xaac2,0xaac3,0xaac4,0xaac5,0xaac6,0xaac7,
-0xaac8,0xaac9,0xaaca,0xaacb,0xaacc,0xaacd,0xaace,0xaacf,
-0xaad0,0xaad1,0xaad2,0xaad3,0xaad4,0xaad5,0xaad6,0xaad7,
-0xaad8,0xaad9,0xaada,0xaadb,0xaadc,0xaadd,0xaade,0xaadf,
-0xaae0,0xaae1,0xaae2,0xaae3,0xaae4,0xaae5,0xaae6,0xaae7,
-0xaae8,0xaae9,0xaaea,0xaaeb,0xaaec,0xaaed,0xaaee,0xaaef,
-0xaaf0,0xaaf1,0xaaf2,0xaaf3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xaba1,0xaba2,0xaba3,0xaba4,0xaba5,0xaba6,0xaba7,
-0xaba8,0xaba9,0xabaa,0xabab,0xabac,0xabad,0xabae,0xabaf,
-0xabb0,0xabb1,0xabb2,0xabb3,0xabb4,0xabb5,0xabb6,0xabb7,
-0xabb8,0xabb9,0xabba,0xabbb,0xabbc,0xabbd,0xabbe,0xabbf,
-0xabc0,0xabc1,0xabc2,0xabc3,0xabc4,0xabc5,0xabc6,0xabc7,
-0xabc8,0xabc9,0xabca,0xabcb,0xabcc,0xabcd,0xabce,0xabcf,
-0xabd0,0xabd1,0xabd2,0xabd3,0xabd4,0xabd5,0xabd6,0xabd7,
-0xabd8,0xabd9,0xabda,0xabdb,0xabdc,0xabdd,0xabde,0xabdf,
-0xabe0,0xabe1,0xabe2,0xabe3,0xabe4,0xabe5,0xabe6,0xabe7,
-0xabe8,0xabe9,0xabea,0xabeb,0xabec,0xabed,0xabee,0xabef,
-0xabf0,0xabf1,0xabf2,0xabf3,0xabf4,0xabf5,0xabf6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa4a1,0xa4a2,0xa4a3,0xa4a4,0xa4a5,0xa4a6,0xa4a7,
-0xa4a8,0xa4a9,0xa4aa,0xa4ab,0xa4ac,0xa4ad,0xa4ae,0xa4af,
-0xa4b0,0xa4b1,0xa4b2,0xa4b3,0xa4b4,0xa4b5,0xa4b6,0xa4b7,
-0xa4b8,0xa4b9,0xa4ba,0xa4bb,0xa4bc,0xa4bd,0xa4be,0xa4bf,
-0xa4c0,0xa4c1,0xa4c2,0xa4c3,0xa4c4,0xa4c5,0xa4c6,0xa4c7,
-0xa4c8,0xa4c9,0xa4ca,0xa4cb,0xa4cc,0xa4cd,0xa4ce,0xa4cf,
-0xa4d0,0xa4d1,0xa4d2,0xa4d3,0xa4d4,0xa4d5,0xa4d6,0xa4d7,
-0xa4d8,0xa4d9,0xa4da,0xa4db,0xa4dc,0xa4dd,0xa4de,0xa4df,
-0xa4e0,0xa4e1,0xa4e2,0xa4e3,0xa4e4,0xa4e5,0xa4e6,0xa4e7,
-0xa4e8,0xa4e9,0xa4ea,0xa4eb,0xa4ec,0xa4ed,0xa4ee,0xa4ef,
-0xa4f0,0xa4f1,0xa4f2,0xa4f3,0xa4f4,0xa4f5,0xa4f6,0xa4f7,
-0xa4f8,0xa4f9,0xa4fa,0xa4fb,0xa4fc,0xa4fd,0xa4fe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa9b1,0xa9b2,0xa9b3,0xa9b4,0xa9b5,0xa9b6,0xa9b7,0xa9b8,
-0xa9b9,0xa9ba,0xa9bb,0xa9bc,0xa9bd,0xa9be,0xa9bf,0xa9c0,
-0xa9c1,0xa9c2,0xa9c3,0xa9c4,0xa9c5,0xa9c6,0xa9c7,0xa9c8,
-0xa9c9,0xa9ca,0xa9cb,0xa9cc,0xa2df,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8b1,0xa8b2,0xa8b3,0xa8b4,0xa8b5,0xa8b6,0xa8b7,0xa8b8,
-0xa8b9,0xa8ba,0xa8bb,0xa8bc,0xa8bd,0xa8be,0xa8bf,0xa8c0,
-0xa8c1,0xa8c2,0xa8c3,0xa8c4,0xa8c5,0xa8c6,0xa8c7,0xa8c8,
-0xa8c9,0xa8ca,0xa8cb,0xa8cc,0x0000,0x0000,0x0000,0xa2de,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa7c9,0xa7ca,0xa7cb,0xa7cc,0xa7cd,0x0000,0x0000,0x0000,
-0xa7ba,0xa7bb,0xa7dc,0xa7dd,0xa7de,0xa7b6,0xa7b7,0xa7b8,
-0xa7d4,0xa7d5,0xa7d6,0xa7d7,0xa7d8,0xa7a1,0xa7a2,0xa7a3,
-0xa7a5,0xa7ab,0xa7ac,0xa7ad,0xa7ae,0xa7af,0xa7b0,0xa7b1,
-0xa7b2,0xa7b3,0xa7b4,0xa7a7,0xa7a8,0xa7a9,0xa7aa,0xa7bd,
-0xa7be,0xa7e5,0xa7e6,0xa7e7,0xa7e8,0xa7e1,0xa7e2,0xa7e3,
-0xa7bf,0xa7c0,0xa7c1,0xa7c2,0xa7c3,0xa7c4,0xa7c5,0xa7c6,
-0xa7c7,0xa7c8,0xa7ce,0xa7cf,0xa7d0,0xa7d1,0xa7d2,0xa7d3,
-0xa7da,0xa7db,0xa2e3,0xa7ec,0xa7a6,0xa7e0,0xa7ef,0xa2e1,
-0xa7bc,0xa7ed,0xa7b5,0x0000,0x0000,0x0000,0x0000,0xa7b9,
-0xa7ea,0x0000,0x0000,0xa7eb,0x0000,0x0000,0xa7df,0x0000,
-0xa2e4,0x0000,0x0000,0xa7e4,0xa7ee,0xa7e9};
-
-static const int ucs_a3_uhc_table_min = 0x2f00;
-static const int ucs_a3_uhc_table_max = 0x2f00 + (sizeof(ucs_a3_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_i_uhc_table[] = {
-/* 0x4d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xece9,0xefcb,0x0000,0xf6d2,0x0000,0x0000,0x0000,0xd8b2,
-0xeddb,0xdfb2,0xdfbe,0xf9bb,0x0000,0xdcf4,0x0000,0x0000,
-0x0000,0xf5e4,0x0000,0x0000,0xf3a6,0xdde0,0xe1a6,0x0000,
-0xcef8,0xdcb0,0x0000,0x0000,0x0000,0x0000,0xe3aa,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1e9,0x0000,0x0000,
-0x0000,0x0000,0xcdfa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcaf,0xd3a1,0x0000,0xf1ab,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7d1,0xd2ac,0x0000,0xcef9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf1fd,0x0000,0xdebf,0xfbba,0xf9b9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xced2,0x0000,
-0xe3ab,0xebe0,0x0000,0x0000,0x0000,0xcefa,0xcbf7,0xe5a5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcae1,0x0000,0xd4cc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeae1,0x0000,0x0000,0xdce3,0xdfad,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbeb,0x0000,
-0x0000,0x0000,0xd5af,0x0000,0x0000,0x0000,0xd6f5,0x0000,
-0xe5f8,0x0000,0x0000,0xdec0,0xeca3,0x0000,0xe9cd,0x0000,
-0xeaa7,0xe9f6,0xfbbb,0x0000,0xe7e9,0xefcc,0x0000,0x0000,
-0xd0e6,0x0000,0x0000,0xdec1,0x0000,0x0000,0xe4ac,0x0000,
-0x0000,0xd8cc,0xf9f1,0x0000,0xcedf,0xfaa4,0xe6b2,0x0000,
-0xfafb,0x0000,0x0000,0xfabd,0xccc8,0xefcd,0xd5d5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a2,0x0000,
-0x0000,0x0000,0xecd1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe4a7,0xecd2,0x0000,0x0000,0xf6b1,0x0000,0x0000,0xcefb,
-0x0000,0x0000,0xd0d1,0xcbbf,0x0000,0xeda4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeda8,0xdec2,0xf6e2,0xeddc,
-0xdcf5,0xe0b9,0x0000,0x0000,0x0000,0xd4ce,0x0000,0xf4b5,
-0x0000,0x0000,0x0000,0xd3db,0xd6b5,0xeca4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe4e6,0x0000,0xf1ea,0x0000,0x0000,0x0000,0xcbec,0xcbc0,
-0x0000,0x0000,0x0000,0xecf2,0x0000,0x0000,0x0000,0x0000,
-/* 0x4f00 */
-0x0000,0xd0ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf9f2,0xeca5,0xd0df,0x0000,0xe7ea,0xd0eb,0xdcd1,
-0xdbe9,0xfdcc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbd7,
-0x0000,0x0000,0x0000,0x0000,0xdae1,0x0000,0xd6b6,0x0000,
-0xe3df,0x0000,0xdec3,0x0000,0xdec4,0xcaa1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeeec,0x0000,0x0000,0xd3a3,0xeeb7,
-0xf8cf,0x0000,0x0000,0x0000,0x0000,0xeac8,0xeeb8,0xf1ac,
-0xf1a5,0xe9ce,0x0000,0x0000,0x0000,0xf9bc,0x0000,0x0000,
-0x0000,0xe5f9,0xecea,0xddd6,0xedc2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8a5,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5ba,
-0xdbd8,0x0000,0x0000,0xcaa2,0x0000,0x0000,0xd1cd,0x0000,
-0x0000,0x0000,0xeeed,0x0000,0x0000,0x0000,0xeceb,0xdec5,
-0x0000,0xe3e0,0x0000,0xcac9,0xf2e9,0x0000,0xd5ce,0x0000,
-0xf6b6,0x0000,0xcec2,0xd6c7,0x0000,0xe3b4,0x0000,0xf1ad,
-0x0000,0xeae2,0x0000,0x0000,0x0000,0x0000,0xd7c2,0x0000,
-0xf3a7,0x0000,0x0000,0xcdea,0x0000,0xebee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9b2,0xfda5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6d5,0xd5e2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8b5,
-0x0000,0x0000,0xccf5,0xf5b5,0xe4ad,0x0000,0x0000,0x0000,
-0x0000,0xe7eb,0xf1d5,0x0000,0x0000,0x0000,0xf0bb,0x0000,
-0x0000,0xe9b5,0x0000,0xccc9,0xfad5,0x0000,0x0000,0xe1d4,
-0x0000,0x0000,0xd7d6,0x0000,0x0000,0xdcc1,0x0000,0xdec6,
-0xfaef,0xe3e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f3,0xdcf6,
-0x0000,0xcefc,0x0000,0xdbc4,0x0000,0xf8f1,0x0000,0x0000,
-0xdce4,0x0000,0xe5ef,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5000 */
-0x0000,0x0000,0xdcb1,0x0000,0x0000,0x0000,0xd5d6,0x0000,
-0x0000,0xf3da,0x0000,0xcbc1,0x0000,0xdbc3,0x0000,0x0000,
-0x0000,0xd9fa,0xd3ee,0x0000,0x0000,0x0000,0xfab8,0x0000,
-0x0000,0xfda6,0xebef,0x0000,0xf4a6,0x0000,0xccca,0xf3a8,
-0x0000,0xf3db,0x0000,0xdba7,0xf6b7,0x0000,0xcfe6,0xf0f2,
-0xcbda,0x0000,0xe7d2,0xd7c3,0xf6f0,0xe8de,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe5a6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe5e7,0x0000,0x0000,0x0000,0xcaa3,
-0xcca7,0xeac9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8b6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfaa5,0x0000,0x0000,
-0x0000,0x0000,0xf1ae,0x0000,0xefce,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbed,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6b0,0xefcf,0xe9cf,0x0000,
-0xf7de,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xced3,0x0000,0x0000,0x0000,0x0000,0xdcf7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdba8,0x0000,0x0000,
-0x0000,0xcbf8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfa1,0xdde1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5ca,0xe9b6,0x0000,0x0000,
-0x0000,0x0000,0xe7ec,0xeeee,0x0000,0xf3f0,0x0000,0xdfbf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcccb,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0c1,0x0000,0x0000,
-0x0000,0xf4d2,0xe0ba,0x0000,0x0000,0x0000,0x0000,0xdfc0,
-0x0000,0xcee0,0x0000,0x0000,0x0000,0xdcd2,0xfdea,0x0000,
-0x0000,0x0000,0xd6f6,0x0000,0x0000,0x0000,0xeaca,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e9,0x0000,0xe3ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3d0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcaa4,0x0000,0xdbf8,0x0000,0x0000,0x0000,0xdec7,
-0xebf0,0xf1d6,0x0000,0x0000,0xe5e2,0x0000,0xcccc,0x0000,
-0x0000,0xcbfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xeae3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfc1,
-0x0000,0xd6ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xeeb9,0x0000,0x0000,0x0000,0x0000,0xd5e3,
-0x0000,0x0000,0xd1d3,0x0000,0xe5f0,0x0000,0x0000,0x0000,
-0xe8b4,0xebc3,0x0000,0xeaaa,0xfafc,0xf5f6,0xf0bc,0xfdd4,
-0xe0bb,0xcec3,0x0000,0xd0ba,0xf7ba,0xd8f3,0xf7cd,0x0000,
-0x0000,0x0000,0xe4ae,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4df,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0e7,0x0000,0x0000,0xecfd,0x0000,0xd2ae,
-0xeeef,0xd5d7,0xeae4,0xf8a2,0xcdeb,0xd7bf,0xfbb1,0x0000,
-0x0000,0xcdec,0x0000,0x0000,0x0000,0xdcb2,0xd0ec,0xcefd,
-0xeef0,0x0000,0x0000,0x0000,0xccc2,0x0000,0x0000,0x0000,
-0xd0ed,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5f7,0x0000,
-0x0000,0x0000,0xf3fc,0x0000,0x0000,0xeea2,0x0000,0x0000,
-0x0000,0x0000,0xd9b3,0x0000,0x0000,0xd8f4,0x0000,0xe9b7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xceae,0x0000,0x0000,0x0000,0x0000,0xd9a2,0x0000,0x0000,
-0x0000,0x0000,0xd8f1,0x0000,0xd4cf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a7,0xd5d2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4a2,0x0000,0xf1d7,0x0000,
-0x0000,0xd5d8,0x0000,0xf0bd,0xd7d0,0xd4d0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7cf,0xebea,0xfdeb,0x0000,
-0x0000,0xdbed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcc5,0xcbc2,0x0000,0x0000,0x0000,0x0000,0xfdd5,0x0000,
-0xf4c8,0xe8ea,0xf5f3,0x0000,0x0000,0xf9de,0x0000,0x0000,
-0xd3ef,0x0000,0x0000,0xecd3,0x0000,0x0000,0xddc2,0xefb7,
-0xe7d4,0x0000,0xcaca,0x0000,0x0000,0x0000,0xd9fb,0x0000,
-0x0000,0xfafd,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6aa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf7f7,0xdcac,0x0000,0x0000,
-0x0000,0xd7d7,0xdfa2,0x0000,0x0000,0x0000,0xcebe,0x0000,
-0xd3f0,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0a4,0xe1ec,
-0xcfe7,0xf3cb,0xeda9,0xcabe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4ef,0x0000,0x0000,0x0000,0xf6ce,
-0x0000,0x0000,0xdefb,0xd0bb,0xd5b7,0xeef1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4a8,0x0000,0xdcf8,0x0000,
-0x0000,0x0000,0x0000,0xcba7,0x0000,0xdace,0x0000,0x0000,
-0x0000,0xe0e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeda5,0xeef2,0x0000,0x0000,0x0000,0x0000,0xdcf9,
-0x0000,0x0000,0xf9dc,0x0000,0x0000,0xf3dc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8f2,0x0000,0xf4f9,
-0x0000,0x0000,0x0000,0xfcf1,0x0000,0x0000,0x0000,0xd0bc,
-0xdbf9,0xd7b1,0x0000,0x0000,0x0000,0xcbfc,0x0000,0x0000,
-0x0000,0xf0a5,0xcbfd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5f4,0x0000,0x0000,0x0000,0xcded,
-0xcaa5,0x0000,0x0000,0xd6ab,0xd0c2,0x0000,0x0000,0x0000,
-0x0000,0xf0be,0xd2bd,0xcca4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfab6,0x0000,
-0x0000,0xcccd,0x0000,0xdafa,0x0000,0xf6cf,0x0000,0xe9b8,
-0x0000,0xd8f5,0x0000,0x0000,0x0000,0xccce,0x0000,0x0000,
-0x0000,0x0000,0xd7cd,0x0000,0x0000,0xd4d1,0xe9ed,0x0000,
-0xcaeb,0xd9e2,0x0000,0xfdb2,0x0000,0xe3ad,0xd6cc,0xd9b4,
-0x0000,0x0000,0xe1a7,0xeed3,0xd0c3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfdb3,0x0000,0xd5e4,0x0000,0x0000,
-0xcfe8,0x0000,0xedc3,0xd0b2,0x0000,0x0000,0xcefe,0xdaa8,
-/* 0x5300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8d0,0x0000,0x0000,
-0xfdd6,0x0000,0x0000,0x0000,0x0000,0xf8d1,0x0000,0xf8d2,
-0xdcd3,0x0000,0x0000,0x0000,0x0000,0xdde2,0xfbf9,0xddc1,
-0x0000,0xe3b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeddd,0xcec4,0x0000,0xcba1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdde3,0x0000,0x0000,0x0000,0x0000,0xfcdd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf9af,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2fb,
-0xcfa1,0xe4a8,0x0000,0xf4b6,0xecfe,0x0000,0x0000,0xe3ae,
-0xe7ed,0xfdc1,0xdae2,0x0000,0x0000,0xd8b3,0x0000,0x0000,
-0x0000,0xdde4,0xf0ef,0xf6f1,0xfaf0,0x0000,0x0000,0xd1f5,
-0x0000,0x0000,0xdacf,0x0000,0xdcd4,0x0000,0xdca6,0x0000,
-0xefbf,0x0000,0x0000,0x0000,0x0000,0x0000,0xcecf,0x0000,
-0xe0d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d6,
-0xecd4,0xeacb,0x0000,0x0000,0xcabf,0xd5b0,0x0000,0xcfe9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1ed,0x0000,0xcccf,
-0x0000,0x0000,0x0000,0x0000,0xe4f8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe4ed,0x0000,0x0000,0x0000,0x0000,
-0xd7d8,0x0000,0xfda7,0x0000,0x0000,0x0000,0x0000,0xeaab,
-0xf6b2,0x0000,0x0000,0x0000,0x0000,0xcff0,0xf9bd,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6f4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcbdb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf3d1,0x0000,0x0000,0x0000,0x0000,
-0xe9d1,0xf3a9,0xd0e0,0xe9d2,0x0000,0xdae3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2d2,0x0000,0xf6a2,0xe1f4,
-0x0000,0x0000,0x0000,0xdae4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe7d5,0xf5bf,0xcfa2,0xcdaf,0xcfa3,0x0000,0x0000,
-0x0000,0xcdb0,0xf1fe,0xd0a3,0xe1af,0xf8a3,0x0000,0xcaa6,
-0xf7bb,0xf2ea,0xdec8,0xe9d3,0x0000,0x0000,0x0000,0x0000,
-0xdec9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5400 */
-0x0000,0x0000,0x0000,0xfdde,0xcac0,0x0000,0x0000,0x0000,
-0xf9ea,0xd1ce,0xeed4,0x0000,0xd4d2,0xd9a3,0xfda8,0xd7d9,
-0xf7ce,0xfabe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcfd6,0x0000,0xd7f0,0x0000,0xebe1,
-0xf8c5,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcfa,0x0000,
-0x0000,0xddc3,0x0000,0xf9df,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe7ef,0x0000,0x0000,0x0000,0x0000,
-0xfde5,0xf6a3,0x0000,0xd9fc,0xfda9,0x0000,0xe7ee,0x0000,
-0x0000,0x0000,0xd5e5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefd0,0x0000,0xcdb1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1b2,0x0000,0xf1b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdb2,0x0000,0xdaab,0x0000,0xcaa7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe3e2,0xfbbc,0xd9a4,0x0000,0x0000,
-0xeeba,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8d3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfbfa,0x0000,0xcfa4,0x0000,
-0xdcfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6e3,0x0000,0x0000,0x0000,
-0xedaa,0x0000,0x0000,0xf2a1,0xcee1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfaa6,0x0000,0x0000,0x0000,0x0000,
-0xf9e0,0x0000,0x0000,0x0000,0x0000,0xecd6,0x0000,0x0000,
-0xe4ee,0xf9a1,0x0000,0x0000,0xfbef,0x0000,0x0000,0x0000,
-0xf9eb,0xeea3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeaac,0x0000,0x0000,0x0000,0xcaa8,0x0000,0x0000,
-0xf4fa,0x0000,0x0000,0x0000,0x0000,0xcdd6,0xfcf6,0x0000,
-0x0000,0x0000,0xf4c9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8d4,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5500 */
-0x0000,0x0000,0x0000,0x0000,0xf8a6,0x0000,0xdeca,0xf2c6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7da,0x0000,
-0xd3d0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd8c5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeae6,
-0x0000,0xf3dd,0x0000,0x0000,0x0000,0xe4da,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6e4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6f2,0x0000,0xdfc2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9fd,
-0x0000,0x0000,0x0000,0xccf6,0x0000,0x0000,0xd3ba,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4af,0x0000,
-0x0000,0x0000,0x0000,0xf9e1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0a6,0x0000,0x0000,0x0000,
-0xcbd3,0x0000,0x0000,0x0000,0xe0bc,0x0000,0xf4ca,0xd4fa,
-0x0000,0xfdaa,0xf9e2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf4b7,0xfdc2,0xfcb0,0x0000,0xfdec,0xcae2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdbd,
-0x0000,0xeae7,0xdfc3,0xd1d2,0xcee2,0x0000,0xd3a4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfdab,0x0000,0xdfe0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf2c7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7f0,0x0000,0xd0ee,0x0000,0x0000,0xf3aa,
-0x0000,0x0000,0x0000,0xdecb,0xf6b8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f5,0xf1b3,0x0000,
-/* 0x5600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7a3,0x0000,
-0x0000,0xcaa9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfa5,0x0000,0x0000,0xdfc4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1b0,
-0x0000,0x0000,0xf0bf,0x0000,0xf6a4,0x0000,0xe3b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfac6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0ef,0x0000,0x0000,0xfded,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xddc4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcf7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6bf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdead,0x0000,0xfabf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe5f1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xedc4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd2a5,0x0000,0x0000,0xfdee,0x0000,0x0000,
-0x0000,0xf5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe1f6,0xdecc,0x0000,0x0000,0xfcde,0x0000,
-0xecd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcddd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd6b7,0xcdb3,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5700 */
-0x0000,0x0000,0x0000,0xf8d5,0xe5d8,0x0000,0x0000,0x0000,
-0xcfea,0x0000,0x0000,0xcfd0,0x0000,0xeacc,0x0000,0x0000,
-0x0000,0x0000,0xeaae,0xeaad,0x0000,0x0000,0xd3f1,0x0000,
-0xd3a5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeea4,0x0000,0x0000,0x0000,0x0000,0xd0a4,0x0000,0x0000,
-0xf2a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd0f0,0x0000,0x0000,0x0000,0x0000,
-0xf2a3,0x0000,0xf7f8,0x0000,0x0000,0x0000,0x0000,0xd0b3,
-0x0000,0x0000,0xdba9,0x0000,0x0000,0xd3bb,0xcaec,0x0000,
-0xf1a6,0xcbd5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7e7,0x0000,0x0000,0xcdde,0x0000,0xf7a4,0x0000,
-0x0000,0x0000,0xf8c0,0x0000,0x0000,0x0000,0xd3dd,0x0000,
-0xccd0,0x0000,0x0000,0x0000,0x0000,0xcfa6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6f3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe1f7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3dc,0x0000,0x0000,0xfafe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfaa7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebd9,0x0000,0xcfa7,0xeaaf,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe4ef,0x0000,0x0000,0x0000,0xe9b9,
-0xf1d8,0x0000,0x0000,0xd8d8,0x0000,0x0000,0xe0f2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6b4,
-0xdcfc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf3f1,0x0000,0x0000,0x0000,0xe3d0,0x0000,0x0000,0xf2fb,
-0x0000,0xdbc6,0xd0f1,0x0000,0xd0f2,0x0000,0x0000,0x0000,
-0xcfdc,0x0000,0xd3d1,0x0000,0x0000,0xccb1,0xf7d8,0x0000,
-0xcba8,0xebbc,0xe4be,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4dc,0x0000,
-0x0000,0xdcc2,0x0000,0x0000,0xf0a7,0x0000,0x0000,0xe6c0,
-0x0000,0x0000,0xcaed,0x0000,0x0000,0x0000,0x0000,0xe8eb,
-0xe5e8,0xdcc3,0x0000,0x0000,0xedde,0xd3f2,0x0000,0x0000,
-0x0000,0x0000,0xccf7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xced4,0xe7ab,0x0000,0x0000,0x0000,0xcbc3,
-0x0000,0xe1b1,0x0000,0x0000,0xf7b2,0x0000,0x0000,0xd3f3,
-0xd3d2,0x0000,0xf5c0,0x0000,0x0000,0x0000,0xdfdd,0x0000,
-0x0000,0xeef3,0xe7f1,0x0000,0xfdb4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2c8,0x0000,0x0000,
-0x0000,0xf3d2,0x0000,0x0000,0xeef4,0x0000,0xe2d3,0x0000,
-0x0000,0x0000,0x0000,0xccd1,0x0000,0xdfea,0x0000,0x0000,
-0x0000,0xe9ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd9d7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5cd,0x0000,0xf1f2,0xfac7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9f8,0xd4c2,0x0000,0x0000,0x0000,0x0000,0xf6e5,0x0000,
-0x0000,0x0000,0x0000,0xddc5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7f2,0xeddf,0x0000,0x0000,0xcacb,0x0000,
-0x0000,0xdbfa,0x0000,0x0000,0x0000,0xe8b5,0x0000,0xd3a6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdb5,0x0000,
-0x0000,0xf9c9,0x0000,0xe4e2,0x0000,0xfbbd,0x0000,0x0000,
-0xd7a4,0xcec5,0x0000,0x0000,0x0000,0x0000,0xced5,0xd6e6,
-0x0000,0x0000,0x0000,0x0000,0xe5bd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdecd,0xecf3,0x0000,0x0000,0xede0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xecec,0xfbbe,0xdfeb,0x0000,0xe1f8,0x0000,0x0000,
-/* 0x5900 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9be,
-0x0000,0x0000,0x0000,0x0000,0xd0f3,0xe0aa,0xe8e2,0x0000,
-0x0000,0xe2d4,0xd2fd,0x0000,0xe5a8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd9d3,0x0000,0x0000,0x0000,0x0000,0xd3de,
-0x0000,0xf4b8,0xf7bc,0xdcfd,0x0000,0xe8ec,0xe4e7,0x0000,
-0x0000,0xe3f7,0x0000,0x0000,0x0000,0x0000,0x0000,0xeca8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfaf1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe5f2,0x0000,0x0000,0xd0f4,
-0xd2af,0xdce5,0x0000,0x0000,0x0000,0x0000,0xd0a5,0xf1b4,
-0xfcb1,0xccf8,0x0000,0x0000,0xddc6,0xfad1,0x0000,0xf7df,
-0x0000,0x0000,0xfaa8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeef5,0x0000,0xdece,0x0000,0x0000,0x0000,0x0000,0xe7f3,
-0x0000,0x0000,0xf7ac,0xebc4,0xede1,0xe0ab,0xddc7,0x0000,
-0x0000,0x0000,0x0000,0xd2b3,0xd2bf,0x0000,0x0000,0x0000,
-0xcacc,0x0000,0x0000,0x0000,0x0000,0xfbbf,0x0000,0x0000,
-0x0000,0x0000,0xe5fd,0xdde5,0xd8cd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xecf4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd0f5,0x0000,0x0000,0xe8ed,0xd0d2,
-0x0000,0xd9d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6e6,0x0000,0x0000,
-0xdbaa,0x0000,0x0000,0x0000,0xf7e0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd8d9,0x0000,0xf4a3,0x0000,0x0000,0xf4dd,0x0000,
-0x0000,0x0000,0x0000,0xefd1,0x0000,0x0000,0xd9b5,0x0000,
-0x0000,0xedab,0x0000,0xe3b7,0x0000,0x0000,0x0000,0x0000,
-0xeebb,0xcdb4,0x0000,0xe0f3,0xeacd,0x0000,0x0000,0x0000,
-0x0000,0xecf5,0xe8ee,0x0000,0xcba9,0xf1af,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcacd,0x0000,
-0xeca9,0x0000,0xf2eb,0x0000,0xfdef,0x0000,0xf9f3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe6c1,0x0000,0x0000,0xecd8,0x0000,0x0000,0x0000,0xedac,
-/* 0x5a00 */
-0x0000,0xeace,0x0000,0xe8df,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdecf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd2a6,0x0000,0x0000,0xe7f4,0xd1d6,0x0000,0x0000,0xe6c2,
-0xe3e3,0x0000,0x0000,0x0000,0x0000,0xe4b0,0x0000,0x0000,
-0x0000,0xd8b4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6a5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf3de,0x0000,0x0000,0x0000,
-0x0000,0xd7a5,0x0000,0x0000,0x0000,0x0000,0xf7e8,0x0000,
-0x0000,0xe8c6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbe6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdde6,0x0000,0x0000,0x0000,0xdcfe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8da,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdaac,0xeab0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe3b8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcaaa,0xe1f9,0x0000,0xeab1,0x0000,0x0000,0x0000,
-0x0000,0xf2ec,0x0000,0x0000,0xfaee,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeed5,0x0000,0x0000,0x0000,0x0000,0xf9f4,0x0000,
-0x0000,0xd2ec,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5b00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfbfb,0x0000,0x0000,
-0x0000,0xfdf0,0x0000,0xe0bd,0xcee3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8c6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdeae,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfc5,0x0000,0x0000,0xe5be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedad,0xfaea,0x0000,0x0000,0xcdee,0xeda6,0x0000,0xedae,
-0xf0ed,0x0000,0xdda1,0x0000,0xedaf,0xfcf8,0x0000,0xd8eb,
-0x0000,0x0000,0x0000,0xccf9,0xcdb5,0x0000,0x0000,0x0000,
-0x0000,0xfaa9,0x0000,0xe1dd,0x0000,0x0000,0x0000,0x0000,
-0xe2d5,0xedcf,0x0000,0x0000,0x0000,0xdda2,0x0000,0x0000,
-0xf9ca,0x0000,0xeae8,0x0000,0xe5ed,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd3eb,0x0000,0xe9d4,
-0xe1fa,0xe4cc,0x0000,0xe1e4,0xe8c7,0x0000,0x0000,0xcedb,
-0x0000,0x0000,0x0000,0xdcd5,0x0000,0xf7b5,0xfcf3,0xf0f3,
-0xceaf,0xf1b5,0xefd2,0xe8c8,0xebf1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcbd4,0xe0be,0xe3f8,0xeae9,0xfcb2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0f4,0x0000,0xcfe0,0x0000,
-0xeea5,0x0000,0x0000,0xfaaa,0xe6c3,0xe1b2,0xcaab,0x0000,
-0xe3e4,0xe9bb,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2d6,
-0xf3f2,0x0000,0xeed6,0xeab2,0xd0f6,0xecd9,0xdacb,0xcfa8,
-0x0000,0x0000,0x0000,0x0000,0xdda3,0x0000,0x0000,0x0000,
-0xd8db,0x0000,0xf9ce,0xe9d5,0xe3d1,0x0000,0x0000,0xd2bc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ac,0xf3cc,
-0x0000,0xcdfb,0xf6d6,0x0000,0xe7f5,0xe8ef,0xe3f9,0xd2bb,
-0xf3f3,0xe3fb,0x0000,0xded0,0xceb0,0x0000,0xd6f7,0xf1d9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5c1,0xdcc4,0x0000,
-0xf5bb,0x0000,0xded1,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5c00 */
-0x0000,0xdce6,0x0000,0x0000,0xded2,0x0000,0x0000,0xede2,
-0xeef6,0xeacf,0xf0ee,0xe3fc,0x0000,0xd3df,0xd3f4,0xe1b3,
-0x0000,0xe1b4,0x0000,0x0000,0x0000,0x0000,0xf4d3,0x0000,
-0x0000,0xdfc6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe9d6,0x0000,0x0000,0x0000,
-0xdbab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf6a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe3b9,0xebc5,0xf4a9,0xcdb6,0xd2f9,0x0000,0xdaad,0xd2e3,
-0xcfd1,0x0000,0x0000,0x0000,0x0000,0xcbdc,0xccfa,0x0000,
-0xcfdd,0x0000,0x0000,0xe8a9,0x0000,0xe3bb,0xe3ba,0x0000,
-0x0000,0xe0da,0x0000,0x0000,0x0000,0xeef7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdcb3,0x0000,0x0000,0x0000,0x0000,
-0xd3f5,0x0000,0xd7a6,0x0000,0xf6b5,0xd7db,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe1d5,0x0000,0x0000,0xd4ea,
-0x0000,0xdfa3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfddf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0f7,0xedd4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcbaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe4db,0x0000,0xe1fb,0xcba2,0x0000,0x0000,0x0000,
-0x0000,0xd3e0,0x0000,0xe4bf,0x0000,0xfbc0,0x0000,0xdabe,
-0xe4cd,0x0000,0xd6b9,0x0000,0x0000,0x0000,0xefc0,0x0000,
-0xe1fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf6b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfc7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe4b1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdce7,
-0xdce8,0x0000,0x0000,0x0000,0xfad6,0x0000,0xd3f6,0x0000,
-0x0000,0x0000,0x0000,0xf1da,0x0000,0xfaf2,0x0000,0x0000,
-/* 0x5d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2fd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd5cf,0xd0f8,0x0000,
-0x0000,0xcddf,0x0000,0x0000,0xf5cb,0x0000,0xe4f0,0xcbab,
-0x0000,0xd7c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2fe,
-0x0000,0xddda,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdaae,0xcaee,0x0000,0x0000,0x0000,
-0xd5b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe3a1,0x0000,0x0000,0xe8e3,0x0000,0x0000,0xf3ab,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfa9,
-0x0000,0x0000,0x0000,0xd3f7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4f1,0x0000,0x0000,
-0xcee4,0x0000,0xe8f2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5f5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe7ae,0x0000,0xd6ba,0x0000,0xdfec,0xe4c0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e4,0x0000,0x0000,
-0x0000,0x0000,0xd8b5,0x0000,0x0000,0x0000,0xe4dc,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4b9,0xf1b6,0x0000,
-0x0000,0xe2de,0xe1b5,0x0000,0x0000,0xcdef,0xf1a7,0xcee5,
-0xcbdd,0x0000,0x0000,0xd9e3,0x0000,0x0000,0xf3ac,0x0000,
-0x0000,0xd0f9,0xecab,0xded3,0xf7e9,0x0000,0x0000,0xf9f5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1de,0xcbee,0x0000,
-/* 0x5e00 */
-0x0000,0x0000,0xe3bc,0xf8d6,0x0000,0x0000,0xdbee,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfdf1,0x0000,0x0000,0x0000,
-0x0000,0xf7b6,0x0000,0x0000,0x0000,0x0000,0xf4de,0x0000,
-0x0000,0xf2ed,0x0000,0xdbd9,0x0000,0xf0a8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1fd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xded4,0x0000,0xe0ac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xede3,0x0000,0x0000,0xd3e1,0x0000,
-0xdfc8,0x0000,0x0000,0x0000,0x0000,0xd9b6,0x0000,0xfdac,
-0xefd3,0x0000,0x0000,0x0000,0xe4c1,0xf8eb,0x0000,0xdbac,
-0x0000,0x0000,0x0000,0x0000,0xfcc6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ad,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6ba,
-0x0000,0xdbdf,0xd3d3,0xf8c7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcace,0xf8c1,0xd2b4,0x0000,0x0000,0xdcb4,
-0xfab9,0xcacf,0x0000,0xfcb3,0xeaea,0xeaeb,0xd0fa,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xede4,0x0000,0x0000,0xdde7,
-0x0000,0x0000,0xdfc9,0x0000,0x0000,0x0000,0x0000,0xdfed,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xeebc,0x0000,0xefc1,
-0x0000,0x0000,0xccd2,0x0000,0xdda4,0x0000,0x0000,0x0000,
-0xdfca,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3f8,0xf1a8,
-0x0000,0x0000,0x0000,0xcdb7,0x0000,0xefd4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4dd,0xdfee,0xcbac,
-0xe9bc,0x0000,0x0000,0x0000,0x0000,0x0000,0xeaec,0x0000,
-0x0000,0x0000,0xdfcb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf9bf,0xd6af,0xd5c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfaa,0x0000,0x0000,0xcea9,0x0000,0x0000,0xd6f8,0x0000,
-0x0000,0x0000,0xf1b7,0xeef8,0x0000,0x0000,0x0000,0xd9d9,
-0xf3df,0x0000,0xf8c8,0xcec6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd5e6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4e6,0x0000,0x0000,0xe6c5,0xefd5,
-0x0000,0x0000,0xcbef,0xfcdf,0x0000,0x0000,0x0000,0x0000,
-/* 0x5f00 */
-0x0000,0xdca7,0x0000,0x0000,0xd6e7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8c9,0x0000,0x0000,0x0000,0x0000,0xe3d2,
-0x0000,0xe3bd,0x0000,0xcfe1,0xf0c0,0xecda,0x0000,0xddd7,
-0xfbf0,0x0000,0x0000,0xecac,0x0000,0x0000,0x0000,0xf0a9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfad7,0xfbc1,
-0x0000,0xd2c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe5b0,0x0000,0x0000,0x0000,0xede5,0x0000,0x0000,
-0x0000,0x0000,0xcbad,0x0000,0xf9b0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf7a5,0x0000,0xcbae,0x0000,0xdaaf,0x0000,0xd8b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a7,0xfbb2,
-0x0000,0xfdc4,0x0000,0xecad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfba1,0x0000,0x0000,0x0000,0xe5e9,0xe9ee,
-0x0000,0xf3f4,0xf8f3,0xf0c1,0xdeaf,0xf8b0,0x0000,0x0000,
-0xf3e0,0xe7af,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbad,
-0x0000,0xe6b5,0x0000,0x0000,0xf9a8,0x0000,0x0000,0xddd8,
-0xe8d9,0xefd6,0x0000,0x0000,0x0000,0xd3e2,0x0000,0xe2df,
-0x0000,0x0000,0xfce0,0xd7c8,0xfdad,0x0000,0x0000,0x0000,
-0xdfef,0xccd3,0xd3f9,0x0000,0x0000,0x0000,0x0000,0xd4f0,
-0xdbc7,0xded5,0x0000,0x0000,0x0000,0x0000,0xf0f4,0x0000,
-0xd5d0,0xe5d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcc7,0xdcd6,0xe2e0,0x0000,0x0000,0x0000,0xdab0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3a3,0x0000,0xd3ec,
-0x0000,0xf4cb,0x0000,0x0000,0x0000,0xfdc5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe3fd,0x0000,0xf9b1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd0fb,0xecdb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5bc,0xf2a4,
-0xd8ce,0xd8cf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6e1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd2b7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfbec,0x0000,0xddc8,
-/* 0x6000 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e8,
-0x0000,0x0000,0xd2c1,0x0000,0x0000,0x0000,0xf8d7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6bb,0xded6,0x0000,0x0000,
-0xf7bd,0xecae,0x0000,0x0000,0x0000,0xd0e1,0x0000,0xe0f5,
-0xeab3,0x0000,0xced6,0x0000,0x0000,0x0000,0x0000,0xcca5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xecf6,0xe2e1,0xe3be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfcc8,0x0000,0x0000,
-0xcdf0,0x0000,0xf9f6,0x0000,0x0000,0xdff0,0x0000,0x0000,
-0x0000,0xe5bf,0x0000,0x0000,0x0000,0xcebf,0x0000,0x0000,
-0x0000,0x0000,0xfce1,0xedb0,0xfdd1,0xf6bb,0x0000,0x0000,
-0xf9cf,0xebda,0xcac1,0x0000,0xd2b8,0xcdf1,0x0000,0xe3d3,
-0xfde6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ed,0x0000,0x0000,
-0x0000,0xe3fa,0x0000,0x0000,0xf0aa,0xf9d0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfce2,0x0000,0xf8a7,0x0000,
-0x0000,0x0000,0xe1e5,0xeef9,0x0000,0x0000,0x0000,0xe7f6,
-0xeaed,0x0000,0x0000,0xfcb4,0xf5c2,0x0000,0x0000,0xd7dc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf0f5,0x0000,0xdde8,0xd3ed,0xf5fc,0x0000,0xdabf,0x0000,
-0xccfb,0x0000,0x0000,0x0000,0xd3fa,0xf4a4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xefd7,0x0000,0xd4c3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfbe3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbed,0x0000,0xe0ad,0x0000,0x0000,0xeaee,
-0xfbb3,0xe4c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf6e7,0xd2dd,0x0000,0xdfcc,0x0000,0x0000,0xfcc9,0x0000,
-0x0000,0xe5a9,0xe0f6,0xf6b3,0x0000,0x0000,0x0000,0x0000,
-/* 0x6100 */
-0x0000,0xe1fe,0x0000,0x0000,0x0000,0x0000,0xcbf0,0x0000,
-0xeaef,0xeaf0,0x0000,0x0000,0x0000,0xdac0,0xf8b4,0xebf2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4c3,0x0000,0x0000,
-0x0000,0x0000,0xe9d7,0xe4f1,0x0000,0x0000,0x0000,0xcaef,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xced7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcca,0x0000,0x0000,0x0000,0xf3e1,0x0000,0x0000,0xcbc4,
-0x0000,0x0000,0x0000,0x0000,0xe3e5,0x0000,0xcbc5,0xeab4,
-0x0000,0x0000,0xe9bd,0x0000,0xd7c9,0x0000,0x0000,0xebdb,
-0xedb1,0x0000,0xccc3,0xf7be,0xfccb,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf8f4,0x0000,0xd9b7,0x0000,0x0000,
-0xf3d3,0xf3d4,0x0000,0x0000,0x0000,0xf7e4,0x0000,0xf7d1,
-0x0000,0x0000,0xd8b7,0xceb1,0xcac2,0x0000,0x0000,0xfbb4,
-0xcbc6,0x0000,0x0000,0xf0f6,0x0000,0x0000,0xd5e7,0x0000,
-0xead0,0x0000,0x0000,0x0000,0x0000,0x0000,0xccd4,0xcbaf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4aa,0xe9af,0x0000,
-0x0000,0xf5c3,0xe9d8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdde9,0x0000,0x0000,0x0000,0xf1f3,0x0000,
-0xd5fb,0xdebb,0x0000,0x0000,0xf4fb,0x0000,0x0000,0x0000,
-0xfdf3,0xfdf2,0xf7a6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xddc9,0x0000,0x0000,0xd4d3,
-0x0000,0xcca8,0x0000,0xdac1,0xccd5,0x0000,0xd9e4,0x0000,
-0x0000,0x0000,0xfaca,0x0000,0x0000,0x0000,0xe5e3,0x0000,
-0x0000,0x0000,0xd3bc,0x0000,0x0000,0x0000,0xcaf0,0x0000,
-0x0000,0x0000,0x0000,0xd0c4,0x0000,0x0000,0x0000,0xcad0,
-0xfaab,0xebeb,0xe7f8,0xd9e5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1d7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3a4,0x0000,0x0000,0x0000,0xd4fb,0xfce3,
-0xfad8,0x0000,0xf3d5,0x0000,0xcfab,0x0000,0x0000,0xebf3,
-0xd5fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3d4,
-0xcdfc,0x0000,0xd9e6,0x0000,0xe2f9,0xe2a1,0xebd4,0x0000,
-0xe0f7,0xe4b2,0xccfc,0x0000,0x0000,0x0000,0xfbe4,0x0000,
-0x0000,0x0000,0xf4ab,0x0000,0x0000,0x0000,0x0000,0xd0bd,
-0x0000,0xcaf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xefb8,0x0000,0x0000,0x0000,0xd7c0,0x0000,
-0xeefa,0xfdf4,0x0000,0x0000,0xd3e3,0x0000,0xfbc2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5e8,0xdbae,
-0xe1b6,0xf8b7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0bf,
-0xfbc3,0xddea,0x0000,0xe2a2,0x0000,0xeea6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6e8,0x0000,0x0000,0x0000,0x0000,
-0xf6f5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddca,0x0000,
-0x0000,0xd0e2,0x0000,0x0000,0x0000,0x0000,0xdda6,0x0000,
-0x0000,0xddeb,0x0000,0x0000,0xe4f9,0x0000,0x0000,0xe3af,
-0xd0fc,0x0000,0x0000,0x0000,0xf4fc,0x0000,0x0000,0x0000,
-0x0000,0xccbc,0xf7ea,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe5e4,0xdff1,0x0000,0x0000,0xf7e1,0x0000,0xf9f7,
-0xefb9,0x0000,0x0000,0xf8d8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9a9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8d9,0x0000,0x0000,0x0000,0xeebd,0x0000,0x0000,
-0x0000,0xd8c6,0x0000,0x0000,0xe4e3,0xf5ce,0x0000,0x0000,
-0x0000,0x0000,0xddd9,0x0000,0x0000,0x0000,0x0000,0xd9e7,
-0xd2b9,0xd5c3,0x0000,0x0000,0xdae5,0xdad0,0x0000,0xd1d9,
-0xced8,0x0000,0xcbde,0xf4ac,0xdafb,0x0000,0xf6e9,0xe8f3,
-0xcfac,0xf0f0,0x0000,0xf4fd,0xdbc8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcec0,0xe3d4,0xd1cf,0xf1f5,
-0x0000,0xcdf2,0x0000,0xcfeb,0x0000,0x0000,0x0000,0xcdb8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a6,0xd1da,
-/* 0x6300 */
-0x0000,0xf2a5,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2a6,
-0x0000,0xe4ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd3fb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf1a9,0x0000,0x0000,0x0000,0xf2c9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xefd8,0xe6c9,0x0000,0xd8b8,0xfaf3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf3b5,0x0000,0x0000,0xf8a4,0x0000,0x0000,0xd1f3,
-0xe6c8,0x0000,0x0000,0x0000,0x0000,0xf8da,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdce9,
-0xded7,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbdf,0x0000,
-0x0000,0x0000,0xcfec,0x0000,0x0000,0x0000,0x0000,0xf4df,
-0x0000,0x0000,0xd1f4,0xd2ba,0x0000,0x0000,0x0000,0xdff2,
-0x0000,0x0000,0x0000,0xe1b7,0x0000,0x0000,0x0000,0x0000,
-0xe2a3,0xd3fc,0x0000,0x0000,0xede6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbc9,0x0000,0x0000,0x0000,0xe4fa,0x0000,
-0xcfde,0x0000,0x0000,0xced0,0x0000,0x0000,0x0000,0x0000,
-0xd5d3,0xf3f5,0xf7ae,0x0000,0x0000,0xefc8,0x0000,0xcdf3,
-0xf5cf,0xe5f3,0xf0c2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcad1,0x0000,0x0000,0x0000,0xeaf1,0x0000,0xd0a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9da,
-0xf0ab,0x0000,0x0000,0x0000,0x0000,0x0000,0xebe7,0x0000,
-0x0000,0x0000,0xe5c0,0xfcb5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe4c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcca9,0xfdc6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeab5,0x0000,0xe5aa,0xdfba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1df,0x0000,0xdad1,
-0x0000,0x0000,0x0000,0x0000,0xe1b8,0x0000,0xe8f4,0xd3fd,
-0x0000,0x0000,0x0000,0x0000,0xe2a4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf2ca,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdae6,0xf7b3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfdcd,0x0000,0x0000,0x0000,0xf3b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeed7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd8a4,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2a7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9b8,0xd9b9,0xefc9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7cb,0xdfae,0xe8f5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd2b5,0x0000,0x0000,0x0000,0xd3d5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4cc,0xdafc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd9e8,0x0000,0xf7eb,0xf5c9,0x0000,
-0xf3bc,0x0000,0xdad2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd3b5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe8b6,0x0000,0x0000,0xd6cf,0xf4ba,0x0000,0xf7c9,
-0x0000,0x0000,0xccaa,0x0000,0x0000,0xf0c3,0xccd6,0x0000,
-0x0000,0x0000,0xd0d3,0x0000,0xd3bd,0x0000,0x0000,0x0000,
-0xdbfb,0x0000,0xcbe0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd3e4,0xf6f7,0x0000,0x0000,0xd5ba,0xf3cd,0xcbe1,
-0x0000,0x0000,0x0000,0x0000,0xebf4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf4ad,0x0000,0xfcaa,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf7ec,0x0000,0x0000,0x0000,0xe8f6,0x0000,
-0xdae7,0x0000,0x0000,0x0000,0xf7cc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5c1,0x0000,0x0000,0x0000,0x0000,0xe0ee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5fd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcee6,0xfcab,0xd5bb,0x0000,0x0000,0xf2a8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2a5,0xcdb9,
-0xeaf2,0xcbc7,0x0000,0xcdf4,0x0000,0x0000,0xdbaf,0xefd9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcdba,0x0000,0x0000,
-0xfcf9,0x0000,0x0000,0x0000,0x0000,0xdff3,0xcee7,0xdac2,
-0x0000,0xcfad,0x0000,0x0000,0x0000,0x0000,0xe7f9,0xf8a8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3e2,0x0000,
-0x0000,0x0000,0xcaf2,0xdfa4,0x0000,0x0000,0xd4c4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccd7,0xe5c2,0x0000,0x0000,
-0x0000,0x0000,0xcdbb,0x0000,0xefda,0xeed8,0x0000,0xdda7,
-0xe2a6,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0c0,0x0000,
-0x0000,0x0000,0xd6b0,0xf8ca,0x0000,0xfcfa,0x0000,0xd9fe,
-0x0000,0x0000,0x0000,0x0000,0xdeb0,0x0000,0x0000,0x0000,
-0xddec,0xdae8,0x0000,0x0000,0x0000,0x0000,0x0000,0xd4e0,
-0x0000,0xd6f9,0x0000,0xcdd7,0xded8,0x0000,0x0000,0xf2f8,
-0x0000,0xe4d6,0x0000,0x0000,0xd0c5,0xf4ae,0x0000,0xdda8,
-0x0000,0x0000,0x0000,0xedc5,0xf3d6,0x0000,0x0000,0xded9,
-0xe3e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a8,
-0x0000,0xdbb0,0x0000,0x0000,0xe5da,0xe3bf,0x0000,0x0000,
-0x0000,0xdbb1,0x0000,0x0000,0x0000,0xd5e9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0c1,0xefdb,0x0000,0x0000,0xf0e9,
-0x0000,0x0000,0xd7b2,0x0000,0x0000,0x0000,0x0000,0xd0fd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9e9,0x0000,0x0000,0xd0fe,0x0000,0xeced,0xd3a9,0x0000,
-0xf2a9,0xf0c4,0x0000,0x0000,0xe2e2,0xe9ef,0x0000,0x0000,
-0x0000,0xf9d1,0x0000,0x0000,0xe9d9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe8da,0xdac3,0xdac4,0xd4c5,0x0000,0xe7fa,
-/* 0x6600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde0,0xe3b0,
-0x0000,0xdbb2,0xfbc4,0x0000,0xf3e3,0x0000,0xd9a5,0xfbe7,
-0xddcb,0xd0d4,0x0000,0xe6b6,0xe0ae,0xfdda,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcb5,0xe0f8,
-0xe7b1,0x0000,0x0000,0x0000,0x0000,0xf5f0,0x0000,0xd8dc,
-0xedc6,0x0000,0x0000,0x0000,0x0000,0xe1b9,0x0000,0xe3c0,
-0xf9c0,0xe9f0,0x0000,0x0000,0xd9db,0x0000,0xf3e4,0x0000,
-0x0000,0x0000,0xdcb6,0xe4e9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf0c5,0xe3c1,0xfccc,0xfccd,0x0000,0x0000,0x0000,
-0x0000,0xf2cb,0x0000,0xf2cc,0x0000,0x0000,0x0000,0xe4cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf1db,0x0000,0xfad9,0x0000,0xf1b8,0xfdf5,0xe0f9,
-0x0000,0x0000,0x0000,0x0000,0xe7fb,0xfcb7,0xfce4,0xfbc5,
-0xe3e7,0xd8b9,0x0000,0xf6f8,0x0000,0x0000,0xdcc5,0xccd8,
-0x0000,0x0000,0x0000,0xe0af,0xf4e7,0x0000,0xefdc,0xcffc,
-0xefdd,0x0000,0xf2aa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfdbe,0x0000,0x0000,0xcaac,
-0xfdbb,0xfdc7,0x0000,0x0000,0x0000,0x0000,0xe7b2,0x0000,
-0xead1,0xdff4,0x0000,0x0000,0x0000,0x0000,0xd1ec,0xe4de,
-0xe5c3,0x0000,0x0000,0x0000,0x0000,0xd9a6,0x0000,0x0000,
-0xcdbc,0x0000,0xf3e5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xedd5,0x0000,0x0000,0xd9ba,0x0000,
-0x0000,0x0000,0xede7,0xfbb5,0xf8ec,0x0000,0x0000,0x0000,
-0x0000,0xe0e7,0x0000,0xccd9,0x0000,0x0000,0xd4c6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe7a5,0x0000,0xd5f5,0xd3be,
-0x0000,0xfcfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f2,0x0000,
-0x0000,0xdff5,0x0000,0x0000,0xe8f8,0xf8ed,0x0000,0x0000,
-0xcec7,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdf6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe8d8,0x0000,0xcdd8,0xe7d6,0xccda,0x0000,0x0000,0xcae3,
-0xdff6,0xf0c7,0xf0c6,0x0000,0xd8ba,0x0000,0xf1f4,0xf4f0,
-0xf5cc,0x0000,0x0000,0xfce5,0x0000,0x0000,0x0000,0x0000,
-0xeac5,0xeaf3,0x0000,0xdddb,0x0000,0xdcd7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdefd,0xf2f9,0x0000,0xd5c7,
-0x0000,0x0000,0x0000,0xd8d0,0x0000,0xf0c8,0xd1a1,0xd1a2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d4,0xd6e8,
-0xd9ca,0x0000,0xdab1,0xd8c7,0xdce2,0xf3ce,0xf5f4,0x0000,
-0x0000,0xf1b9,0x0000,0x0000,0xdad3,0x0000,0xf6ea,0x0000,
-0x0000,0x0000,0xcff5,0x0000,0x0000,0xfdae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcad2,0x0000,
-0x0000,0xdfb4,0x0000,0x0000,0x0000,0x0000,0xd7dd,0xfaba,
-0xeea7,0xf5bd,0x0000,0xf8f5,0x0000,0x0000,0xede8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4e1,0x0000,0xd1a3,0xe1d6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf9f8,0x0000,0xdbca,
-0xcbf9,0xd4d4,0x0000,0xd9dc,0x0000,0xeebe,0x0000,0xf7ed,
-0x0000,0x0000,0x0000,0xd2ee,0x0000,0x0000,0xe1e6,0xf7f9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdded,
-0x0000,0xe8db,0x0000,0xdbb3,0x0000,0x0000,0x0000,0xd1f7,
-0xe0b0,0x0000,0x0000,0xd4e2,0x0000,0xf6d7,0x0000,0xd7f9,
-0x0000,0x0000,0xd8dd,0x0000,0xcdfd,0xf2ab,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdbd,
-0xf8c2,0x0000,0x0000,0xf2ac,0x0000,0x0000,0xcaad,0xcaae,
-0xcfae,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3c2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdcb7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbda,
-0xd9bb,0xcaf3,0xf6d3,0xe6f8,0xeaf5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xeaf6,0x0000,0x0000,0xf6f9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcfaf,0x0000,0x0000,0xcad3,0x0000,0x0000,0xcaaf,
-0xd2b0,0xf1ba,0x0000,0xd7b3,0xe3c3,0xf3fd,0xdeda,0x0000,
-0x0000,0x0000,0x0000,0xdedb,0x0000,0x0000,0xefde,0x0000,
-/* 0x6800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe2e3,0xeefb,0x0000,0x0000,0xdff7,0xd7ca,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcee8,0xdbdb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1bb,0x0000,0x0000,0x0000,0x0000,0xe9f1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfab7,0xd0c6,0x0000,0x0000,0xccab,0xeea8,0x0000,0x0000,
-0xcbfa,0xf9f9,0xccfd,0xd3fe,0x0000,0x0000,0x0000,0x0000,
-0xe4d0,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2ee,0x0000,
-0xd4d5,0xdfcd,0x0000,0xfcb8,0xd1d0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2cd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7d2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcad4,
-0x0000,0xd5d9,0x0000,0x0000,0x0000,0xd8de,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdd9,
-0x0000,0x0000,0x0000,0xeea9,0xf6bc,0x0000,0x0000,0xccdb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0c9,0x0000,0xfcfc,
-0x0000,0xe8c9,0xf4fe,0x0000,0x0000,0x0000,0x0000,0xe7fc,
-0xd7de,0x0000,0x0000,0x0000,0x0000,0xdedc,0x0000,0xf0ac,
-0xccfe,0xcde1,0x0000,0xe1ba,0x0000,0xdbef,0xdab2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd1a5,0xdcb8,0x0000,0x0000,
-0x0000,0xd8f6,0x0000,0xd1a4,0x0000,0xcde2,0x0000,0x0000,
-0x0000,0x0000,0xdcea,0x0000,0x0000,0xf0f7,0x0000,0xf0ca,
-0xd0be,0x0000,0xdddc,0x0000,0x0000,0x0000,0x0000,0xd4d6,
-0xd3d6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedd0,
-0xcda1,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfb5,0x0000,
-0x0000,0x0000,0xdff8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd4a1,0xceb2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe8ca,0x0000,0x0000,0x0000,0x0000,0xebf5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3d5,0xf5d0,0x0000,
-0x0000,0x0000,0xf5a1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9a7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6cb,0x0000,0xf5f1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5c5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9a3,0xe0db,0xf6eb,0x0000,0xcbf1,
-0x0000,0xd9ea,0xf5a2,0x0000,0x0000,0x0000,0xd7d1,0x0000,
-0xd1f8,0xeaf8,0xeaf9,0xdab3,0x0000,0x0000,0x0000,0x0000,
-0xefdf,0x0000,0x0000,0xf1ef,0x0000,0xe5f6,0xeebf,0xe2e4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0bf,0x0000,0xfaac,
-0xf5d1,0xe7b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9be,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2ce,0xdbb4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfcce,0x0000,0xddee,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7b4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7b4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf7b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdbe,0x0000,0xdae9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcfb0,0xf7d9,0xf3e6,0x0000,0x0000,
-0xced9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xceaa,0x0000,0xcbc8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd0a7,0x0000,0xf0cb,0x0000,0xd0c7,
-/* 0x6a00 */
-0x0000,0x0000,0xe4c5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbe0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd5da,0x0000,0xd7a7,0x0000,0x0000,0x0000,0xeec0,
-0x0000,0xf8f6,0x0000,0x0000,0x0000,0x0000,0xf5d2,0xede9,
-0x0000,0xd9bc,0x0000,0xe5c6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a3,0x0000,0x0000,
-0xdad4,0xe2a7,0xfbfc,0x0000,0x0000,0xf1dc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcaf4,0x0000,0x0000,0x0000,
-0xe8fa,0x0000,0x0000,0xcee9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9f8,0xe2e5,0x0000,0x0000,0x0000,0x0000,
-0xd0b9,0xd4f2,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1a6,
-0x0000,0xdfce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfcf4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3aa,0x0000,0x0000,0x0000,0xccac,0x0000,0x0000,0x0000,
-0x0000,0xefe0,0x0000,0x0000,0x0000,0xe5e5,0xd0d5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbfc,
-0x0000,0x0000,0x0000,0x0000,0xfce6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcbfe,0xedea,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdeb1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9e3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd4a2,0xcff6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd6d0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5ea,0xf1ee,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfacb,0x0000,
-0x0000,0x0000,0x0000,0xe5a1,0x0000,0x0000,0x0000,0x0000,
-/* 0x6b00 */
-0x0000,0x0000,0x0000,0x0000,0xd5b1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcfed,0x0000,0xedeb,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5b2,0x0000,0x0000,0x0000,0xd5bc,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfde2,0xf3ad,0x0000,0xfddb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9b0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1a7,0x0000,0x0000,0xfde3,0xceb3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfde4,0xface,
-0x0000,0x0000,0x0000,0x0000,0xcab0,0x0000,0xf7a7,0x0000,
-0xcfb1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6a2,
-0x0000,0xfcb6,0xf2ad,0xefe1,0xf3ae,0xdcc6,0xd9eb,0x0000,
-0x0000,0x0000,0xe8e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe1a8,0x0000,0x0000,0x0000,0x0000,0xd5f6,
-0xcffd,0x0000,0x0000,0xdedd,0x0000,0x0000,0x0000,0xd9d1,
-0x0000,0x0000,0x0000,0xe4ea,0xf2cf,0x0000,0xf7bf,0x0000,
-0x0000,0xe2e6,0xe2a8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3d6,0x0000,
-0xedd1,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9f9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6b1,0xdeb2,
-0x0000,0x0000,0xe0e8,0x0000,0x0000,0xd3ab,0x0000,0xebdc,
-0x0000,0x0000,0xdfaf,0x0000,0xcac3,0x0000,0x0000,0xeefc,
-0x0000,0xfdc3,0x0000,0x0000,0x0000,0xebf6,0xcfb2,0x0000,
-0x0000,0x0000,0x0000,0xd9ec,0x0000,0xd9bd,0x0000,0xd8df,
-0x0000,0x0000,0xd4b8,0xebbe,0xddef,0x0000,0xddf0,0xddf1,
-0xddf2,0x0000,0x0000,0xd9be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbc6,0xcfb3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeefd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ab,
-0x0000,0xdac5,0x0000,0xd8ec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd1a8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2a9,0x0000,0x0000,0xdebc,
-0xe7b5,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf0,0x0000,
-0xefe2,0xf1f0,0xcfb4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf1,0x0000,
-0xe0b1,0x0000,0x0000,0x0000,0x0000,0xdfa5,0x0000,0xf9d2,
-0x0000,0x0000,0xe7fd,0x0000,0x0000,0xe6a3,0xfbf1,0xcbb0,
-0xf2ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcde7,0x0000,0xe8dc,0x0000,0x0000,0xe7d7,0x0000,0x0000,
-0xf7c0,0x0000,0xd0e3,0x0000,0x0000,0x0000,0xdaa1,0x0000,
-0x0000,0x0000,0xccbd,0x0000,0x0000,0xd1a9,0xddcc,0x0000,
-0x0000,0xe3fe,0xd1aa,0xe8aa,0x0000,0xeab6,0xf9fa,0xe6cc,
-0xf6d8,0x0000,0x0000,0x0000,0xd4c7,0x0000,0x0000,0x0000,
-0xd9cb,0x0000,0xd9d2,0xd3cb,0xd8f7,0xdaa9,0xf5f8,0x0000,
-0x0000,0xdede,0xf2af,0xf8a9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8c8,0x0000,0x0000,0xeec1,0x0000,
-0x0000,0x0000,0x0000,0xf9c1,0x0000,0x0000,0x0000,0x0000,
-0xddf3,0xeafa,0x0000,0xf6bd,0xe1bb,0xcdbf,0xf4d4,0xe6cd,
-0x0000,0xfccf,0xfba2,0x0000,0xe0dc,0x0000,0x0000,0x0000,
-0x0000,0xf4bb,0xdad5,0x0000,0xf9b2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbf2,0x0000,0xdbf6,0x0000,0xdedf,
-0x0000,0x0000,0x0000,0xdbf2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8dc,0xf7ee,0xebe8,0x0000,0xd2fa,0x0000,0x0000,
-0xf1bc,0x0000,0x0000,0xfada,0x0000,0x0000,0xdaea,0xdac6,
-0xf7c1,0x0000,0x0000,0xe7b6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe5c7,0xd6ac,0x0000,0x0000,0x0000,
-0x0000,0xdcc7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a9,
-0x0000,0xe2aa,0x0000,0xd5a6,0x0000,0x0000,0xd4d7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2d0,0x0000,0xeafb,
-0x0000,0xe0dd,0xfbf3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1bd,0x0000,0x0000,0xe2e7,0xfdd7,0x0000,
-0xcec8,0xeab7,0x0000,0xfcc0,0x0000,0xfde7,0xf7ef,0x0000,
-0x0000,0xd7b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xefba,0xf1dd,0x0000,0xdeb3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe8cb,0x0000,0x0000,0xf8dd,0x0000,
-0x0000,0xfbc7,0xd5c8,0x0000,0xd7df,0x0000,0xdda9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe9b1,0x0000,0x0000,0xfaad,
-0xf6d9,0xfaf4,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8aa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ee,0x0000,0xccdc,
-0xe1bc,0xe0ef,0x0000,0x0000,0xe9bf,0xfcfd,0xe6ce,0x0000,
-0x0000,0xe1d7,0x0000,0xe6cf,0x0000,0xf4f1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f3,
-0x0000,0x0000,0xe4fb,0x0000,0x0000,0xf9e4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefe3,0x0000,0x0000,0xcfee,0xf6be,0xe0b2,0xfcfe,0xd1ab,
-0x0000,0x0000,0x0000,0xd7fa,0x0000,0x0000,0x0000,0xfbc8,
-0x0000,0xe2d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd4a3,0xf0f8,0xd7a8,0x0000,0x0000,0x0000,0xe1e7,0x0000,
-0x0000,0xd3bf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefe4,0x0000,0xd7c5,0xebe2,0x0000,0x0000,0xfce7,0x0000,
-0x0000,0xe4a2,0x0000,0xe2e8,0x0000,0xe6d0,0x0000,0xfbe8,
-0xf4e8,0xe5f4,0xf4bc,0xf4d5,0x0000,0x0000,0x0000,0x0000,
-/* 0x6e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfb6,
-0x0000,0xfcb9,0xeec2,0xcaf5,0x0000,0x0000,0x0000,0xefe5,
-0xcbe2,0xd4a4,0x0000,0xdee0,0xdafd,0xe4c6,0xe8be,0x0000,
-0x0000,0x0000,0x0000,0xe0de,0xf6b4,0xead2,0x0000,0xf9fb,
-0x0000,0x0000,0xe0c2,0x0000,0xcae4,0x0000,0xe7b7,0x0000,
-0xeafd,0x0000,0xd9dd,0x0000,0xdab4,0xeeaa,0xfbe9,0x0000,
-0x0000,0x0000,0x0000,0xdbcb,0xdab5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1be,0x0000,0x0000,0xd3ac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbc9,0x0000,
-0xdfcf,0x0000,0x0000,0xd3c0,0xe3d7,0x0000,0xefe6,0xfcd0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9c0,
-0x0000,0x0000,0x0000,0xf5d3,0x0000,0x0000,0xecdc,0xf7b7,
-0x0000,0x0000,0xeab8,0xd1f9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdcc8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeab9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1de,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7b6,0xcfb5,0x0000,0xd9a8,
-0x0000,0x0000,0xecee,0x0000,0x0000,0xddaa,0x0000,0x0000,
-0x0000,0x0000,0xcda2,0xe8ae,0x0000,0x0000,0x0000,0xe1bd,
-0x0000,0xf2d1,0x0000,0x0000,0x0000,0x0000,0xe9c1,0x0000,
-0x0000,0x0000,0xd2fc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbb5,0x0000,0xf3e7,0xd8fe,0x0000,0x0000,
-0x0000,0xfcd1,0x0000,0xedb2,0xf4af,0x0000,0xfba3,0x0000,
-0x0000,0xfcc1,0x0000,0xeeab,0xd4a5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f2,
-0x0000,0x0000,0x0000,0x0000,0xeed9,0x0000,0x0000,0x0000,
-0xfbca,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde3,0xd8bb,
-/* 0x6f00 */
-0x0000,0xe5db,0xf8f7,0x0000,0x0000,0x0000,0xf6d4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a9,
-0x0000,0xcbc9,0x0000,0x0000,0xe6d1,0xf0cc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8ae,0x0000,0xf9d3,0xd5fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8bc,0xf2b0,0x0000,0x0000,0x0000,
-0x0000,0xe2ab,0xf3e8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefc2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedec,
-0x0000,0xe7b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdafe,0x0000,0x0000,0xccbe,0x0000,0x0000,0xf2fc,
-0xdaeb,0x0000,0xe2d8,0xedd6,0x0000,0x0000,0xd6d1,0xe0b3,
-0x0000,0x0000,0xfcd2,0x0000,0xebc8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd3c1,0xf0cd,0x0000,
-0xcff7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xedd2,0x0000,0xd4d8,0xdcc9,0xd7f1,0x0000,
-0x0000,0xdfbb,0x0000,0x0000,0xf3a5,0x0000,0x0000,0x0000,
-0xf4cd,0x0000,0x0000,0x0000,0x0000,0xf1bf,0xf8b1,0x0000,
-0xe9fa,0x0000,0x0000,0x0000,0xfbcb,0x0000,0x0000,0xcad5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9d4,0xf7ca,0x0000,0x0000,0xd6c8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfce8,0xf3bd,
-0x0000,0xeefe,0x0000,0xe7fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd3c2,0x0000,0x0000,0x0000,0x0000,0xd3b6,0x0000,
-0xccad,0xf6fa,0xd6b2,0xd2d8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7d8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a5,0x0000,0x0000,
-0x0000,0x0000,0xe7b9,0x0000,0x0000,0x0000,0x0000,0xf0ad,
-0xfbcc,0xeba1,0x0000,0x0000,0xd4a6,0x0000,0x0000,0x0000,
-0x0000,0xfbcd,0x0000,0xd5bd,0xf1df,0x0000,0x0000,0xf6fb,
-0x0000,0xdeb4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5eb,0x0000,
-/* 0x7000 */
-0x0000,0xe5c8,0x0000,0x0000,0x0000,0xfba4,0xd4b9,0x0000,
-0x0000,0xdee1,0x0000,0xe4a3,0x0000,0x0000,0x0000,0xd7b7,
-0x0000,0xf8ee,0x0000,0x0000,0x0000,0xdeb5,0x0000,0x0000,
-0xd6d2,0x0000,0xf9d5,0xe7ba,0xebd5,0xd5f7,0xefe7,0xe1be,
-0x0000,0x0000,0x0000,0xfaae,0x0000,0x0000,0x0000,0xd6e9,
-0xd6ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7bb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeccb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5b3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xceb4,0x0000,0x0000,0x0000,
-0xfba5,0xe1ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf7a8,0x0000,0x0000,0x0000,0x0000,0xfbce,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8bd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbfd,0x0000,0x0000,0x0000,0x0000,
-0xfce9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfb6,0x0000,0x0000,0x0000,0xedc7,0xeeac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xccdd,0x0000,0x0000,
-0x0000,0x0000,0xf6a7,0x0000,0x0000,0x0000,0xe6fa,0x0000,
-0x0000,0x0000,0xf5a4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfddc,0xedb3,0xcec9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xefe8,0x0000,0x0000,0xe1bf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfadb,0xcbe3,0xf7a9,0x0000,0xfba6,
-0x0000,0x0000,0x0000,0xdcb9,0x0000,0x0000,0x0000,0xf1c0,
-0xedc8,0xefc3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6ad,0x0000,0x0000,0xfdce,0x0000,0x0000,0x0000,0xe8a1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfbf4,0xd5a7,0x0000,0x0000,0x0000,0xf1f6,0x0000,0xe6d3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccde,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8b2,0x0000,0x0000,0x0000,0xdceb,0x0000,0x0000,
-/* 0x7100 */
-0x0000,0x0000,0x0000,0x0000,0xfdb6,0x0000,0x0000,0x0000,
-0x0000,0xe5ea,0x0000,0x0000,0xf1e0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdbcc,0xddcd,0x0000,0x0000,0x0000,0xd4c8,0x0000,
-0x0000,0xd9ed,0x0000,0x0000,0x0000,0x0000,0xf5a5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe6fb,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6d4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdc8,
-0x0000,0xd6a1,0xfdbf,0x0000,0xfcd3,0x0000,0xefa1,0x0000,
-0xe7bc,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1ee,0x0000,
-0x0000,0xe6d5,0x0000,0x0000,0xe9f2,0x0000,0xdfb0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd8e0,0xfcba,0xfdaf,0xf0ce,
-0x0000,0xdbe1,0x0000,0x0000,0xe5c9,0x0000,0xedb4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe0c3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe3d8,0x0000,0x0000,0x0000,
-0x0000,0xe9fb,0xeaa8,0x0000,0x0000,0x0000,0x0000,0xfdb7,
-0x0000,0x0000,0xfba7,0x0000,0xe9c2,0x0000,0x0000,0x0000,
-0x0000,0xfdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2d9,
-0x0000,0x0000,0xdcec,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe8a2,0x0000,0x0000,0x0000,
-0x0000,0xe6f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfdf8,0xfdf9,0x0000,0x0000,0x0000,0xf6bf,0x0000,
-0x0000,0xe7a7,0x0000,0xe6d7,0x0000,0x0000,0x0000,0x0000,
-0xd4f3,0xd4c9,0x0000,0x0000,0x0000,0x0000,0xd6fa,0x0000,
-0xd7f2,0x0000,0xe1c0,0x0000,0xdbe2,0xe6d8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7bd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0cf,0xf3be,0xe2ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b7,0xe0f0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfdb8,0xe3e8,0x0000,0xd4a7,0xe8fc,
-0xfad2,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8ef,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6d3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0d0,0x0000,0xf7f0,0xeeb3,0x0000,0x0000,
-0xeaba,0x0000,0xead3,0x0000,0x0000,0xedc9,0xddab,0x0000,
-0x0000,0x0000,0xe5ac,0xfda1,0x0000,0xdfd0,0xecb3,0x0000,
-0xdfd1,0x0000,0x0000,0x0000,0x0000,0x0000,0xeded,0xf8b8,
-0xf7fa,0x0000,0x0000,0x0000,0xf8ab,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf4e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd4ba,0xe4b3,0x0000,0xe9da,0x0000,0xdeb6,0x0000,0xd9bf,
-0x0000,0xd9c0,0xd6ef,0x0000,0x0000,0x0000,0x0000,0xd9cc,
-0x0000,0xdaaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdfe5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7e5,0x0000,0x0000,0x0000,0xccb2,0x0000,0x0000,
-0xdff9,0xd7e0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd4bb,0x0000,0x0000,0x0000,0x0000,0xfdfa,
-0x0000,0x0000,0x0000,0x0000,0xccb3,0x0000,0x0000,0xdbf3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfd2,0x0000,0xceca,0x0000,0xeeda,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e4,0x0000,
-0xfbcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfb7,
-0x0000,0xeec3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xceea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd7e1,0xfaf5,0x0000,0x0000,0xd5c9,0xf8ac,0x0000,0x0000,
-/* 0x7300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7d9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3e9,0x0000,
-0x0000,0x0000,0x0000,0xd8ed,0xe3c4,0xf0f1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e5,0x0000,0x0000,
-0x0000,0xe0fa,0xeec4,0xd9de,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeba2,0xeba3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcc2,0xeabb,
-0x0000,0x0000,0x0000,0x0000,0xe8ab,0xdee2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedef,0x0000,0xe8a3,0x0000,0x0000,0x0000,0x0000,0xcff1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd4bc,0x0000,0xfcea,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe7be,0x0000,0xfcf2,0x0000,0x0000,0xd6b4,0x0000,0x0000,
-0xe2ae,0x0000,0xd3b7,0xfacc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfadc,0x0000,0xedb5,0xe1e3,
-0x0000,0xe8ac,0x0000,0xe8dd,0x0000,0x0000,0xefe9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4bd,0x0000,0xcfb8,0xe9db,
-0xd1ac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdac7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebc9,
-0x0000,0xe8cc,0x0000,0x0000,0x0000,0xdeb7,0x0000,0x0000,
-0x0000,0x0000,0xd6bc,0xd3e5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfadd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdad6,0x0000,0xcab1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdac8,0xdfa6,0x0000,0xf9b3,0xf2d2,0x0000,0xcac4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcecb,0x0000,
-0x0000,0xcdf5,0x0000,0x0000,0x0000,0xfdb0,0xd5a8,0x0000,
-0xf1c1,0x0000,0x0000,0xe2e9,0xdcca,0xecb4,0xfac0,0x0000,
-0x0000,0xfba8,0xd0a8,0x0000,0x0000,0xdaec,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ee,
-0x0000,0xe0fb,0x0000,0x0000,0x0000,0xefea,0xfade,0x0000,
-/* 0x7400 */
-0x0000,0xe0c4,0x0000,0xcfb9,0x0000,0xd5ca,0xd7e2,0xe2af,
-0x0000,0xd7b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe8cd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6da,0x0000,0x0000,0x0000,0x0000,
-0xefa2,0xe2da,0xf6fc,0x0000,0x0000,0xfbd0,0xd1ad,0x0000,
-0xcde4,0x0000,0xd1ae,0xdced,0xe8ce,0x0000,0xf0f9,0xceb5,
-0xe6fc,0x0000,0x0000,0xd7fb,0xd0d6,0xddf5,0xf7f1,0x0000,
-0xf6fd,0x0000,0xdbf7,0x0000,0x0000,0x0000,0x0000,0xfbea,
-0xe9dc,0xd9c1,0x0000,0xf5f2,0xe0c5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xead4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf9c2,0x0000,0xeabc,
-0x0000,0xd2c5,0xfbd1,0xe7c0,0xeba5,0x0000,0xdffa,0xe3a2,
-0xd7b9,0x0000,0xe9c3,0x0000,0xe8fd,0xe8af,0x0000,0x0000,
-0xf2d3,0xfba9,0xd8a5,0x0000,0x0000,0x0000,0x0000,0xd5cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0c8,0x0000,
-0x0000,0x0000,0xd1af,0xd7e3,0x0000,0x0000,0x0000,0xe0c6,
-0x0000,0xd6a2,0x0000,0xedf0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd7f3,0x0000,0x0000,0x0000,0xfcd4,0x0000,0xdad7,0xccdf,
-0x0000,0xf2d4,0x0000,0xd1b0,0x0000,0xcce0,0x0000,0xdbfd,
-0xf3bf,0x0000,0xf0d1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcbb,0x0000,0xe2b0,0x0000,0x0000,0xe6a5,0x0000,0x0000,
-0x0000,0xe2db,0x0000,0x0000,0x0000,0xdfde,0x0000,0xe0c7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2ef,0x0000,
-0x0000,0x0000,0xcce1,0x0000,0x0000,0x0000,0x0000,0xd6ea,
-0x0000,0x0000,0x0000,0x0000,0xe7c2,0x0000,0x0000,0x0000,
-0xceb6,0x0000,0xf3c0,0x0000,0xcdfe,0x0000,0x0000,0x0000,
-0xfbd2,0x0000,0xf8f8,0xf7fb,0x0000,0x0000,0xe8bf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedb6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7500 */
-0x0000,0xdcba,0x0000,0x0000,0xccb4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf1f7,0x0000,0x0000,0x0000,0xe8b8,0x0000,0x0000,
-0xcaf6,0x0000,0xe4a4,0xf4d6,0x0000,0x0000,0x0000,0xdfe6,
-0x0000,0x0000,0x0000,0xdfa7,0x0000,0xdfe7,0xe1c1,0x0000,
-0xe9c4,0x0000,0x0000,0xdccb,0xe9c5,0x0000,0x0000,0x0000,
-0xefa3,0xeba6,0xcba3,0xe3e9,0x0000,0x0000,0x0000,0xd1fb,
-0xefa4,0x0000,0xefeb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0b4,
-0x0000,0x0000,0x0000,0x0000,0xcda3,0x0000,0x0000,0xe8e6,
-0x0000,0xefa5,0x0000,0xd3cc,0xdaed,0x0000,0x0000,0x0000,
-0x0000,0xd7ba,0x0000,0xf2d5,0xf5e5,0xd9ef,0x0000,0x0000,
-0x0000,0x0000,0xf9b4,0x0000,0x0000,0xd5d4,0xfdcf,0x0000,
-0x0000,0x0000,0xdbe3,0x0000,0x0000,0x0000,0x0000,0xf1e1,
-0xecb6,0x0000,0x0000,0x0000,0x0000,0xfbfe,0xd3d7,0x0000,
-0xd1b1,0x0000,0xcbb1,0x0000,0x0000,0x0000,0x0000,0xd1b2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbb2,0xf1c2,
-0x0000,0x0000,0xf4e1,0xf9b5,0x0000,0x0000,0xe1c3,0xe1c2,
-0x0000,0xebf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdfa8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbca,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe6b9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8de,0xf9aa,0xcaf7,0x0000,0xedb7,0x0000,0x0000,
-0xd3b8,0xf2d6,0x0000,0x0000,0xd4d9,0xeec5,0xf2f0,0x0000,
-0x0000,0x0000,0xcab2,0x0000,0x0000,0xdcbb,0x0000,0xf1f8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xecb7,0x0000,0x0000,
-0x0000,0x0000,0xe5ca,0x0000,0xf6c0,0xfddd,0x0000,0x0000,
-0xd4e3,0xcce2,0x0000,0xf7d4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd7e5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3c3,0x0000,0xd8a6,0x0000,0xf6c1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddf6,0x0000,0xcdc0,0x0000,0x0000,0x0000,
-0xe5dc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe5cb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe1c4,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b0,
-0xf4b0,0xf3ea,0xdaee,0x0000,0xd7bb,0x0000,0xe2b1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7aa,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6fb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe4df,0x0000,0xcad6,0x0000,
-0x0000,0x0000,0xeba8,0x0000,0x0000,0x0000,0xdbfe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf6c2,0x0000,0x0000,0xefbb,0x0000,0x0000,0x0000,
-0x0000,0xd4fd,0x0000,0x0000,0xe0c8,0x0000,0x0000,0x0000,
-0xe8b9,0x0000,0xefa6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcda4,0x0000,0x0000,0xd4f4,0xdba1,0xdbdc,0xdbdd,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeedc,0x0000,0xcbcb,0xfcd5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceeb,0x0000,
-0xcdc1,0x0000,0x0000,0xfbd3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9ab,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5d4,0x0000,0x0000,0x0000,0x0000,0xd9a9,
-0x0000,0x0000,0xe9dd,0xdbcd,0x0000,0x0000,0xddce,0x0000,
-0xe7c3,0x0000,0xeccc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf9ec,0x0000,0x0000,0x0000,0xcbcc,0x0000,
-0x0000,0x0000,0x0000,0xe0fc,0xd4a8,0x0000,0xedd3,0xd8ef,
-0x0000,0xf2d7,0x0000,0xcaf8,0xdaef,0x0000,0x0000,0xd6d4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9cd,0x0000,
-0x0000,0x0000,0xd8ee,0x0000,0xf2c1,0x0000,0x0000,0x0000,
-0xdfd3,0x0000,0x0000,0x0000,0xdaf0,0x0000,0xe2ea,0x0000,
-/* 0x7700 */
-0x0000,0xe0fd,0x0000,0x0000,0xd8f8,0x0000,0x0000,0x0000,
-0xf7af,0xdab6,0x0000,0xcad7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2d8,0x0000,
-0xd8f9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfadf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfef,
-0xd9c2,0x0000,0xf0d2,0x0000,0xe4d1,0x0000,0x0000,0x0000,
-0xf3b7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfae0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xefec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2b2,0x0000,0xd4bd,0x0000,0x0000,0xd9ce,0x0000,
-0x0000,0x0000,0x0000,0xf4e2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd4a9,0x0000,0x0000,0x0000,0x0000,0xcdc2,0xe7da,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2d9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd8be,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdcad,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2eb,0xd6fc,0x0000,0x0000,
-0xcaf9,0x0000,0x0000,0xd4da,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4d7,0xcca1,0x0000,0x0000,0xcfba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b8,
-0x0000,0x0000,0x0000,0xd9c3,0xd0e8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3c5,0xebf8,0x0000,0xf2b1,0x0000,0x0000,
-0x0000,0xcfbb,0x0000,0x0000,0x0000,0xd3ad,0xe8e1,0xceec,
-0x0000,0x0000,0x0000,0xe0b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7800 */
-0x0000,0x0000,0xdee3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddf7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2b2,0xf3f6,0xf6db,
-0x0000,0x0000,0x0000,0x0000,0xd7fe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8df,0x0000,0xf7f2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0a9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6da,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7bc,0xcce3,0x0000,0x0000,0xe6db,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdddd,0x0000,0x0000,0x0000,
-0x0000,0xd1b3,0x0000,0x0000,0x0000,0x0000,0x0000,0xefed,
-0x0000,0x0000,0x0000,0x0000,0xd6de,0xe4f4,0xe1ef,0x0000,
-0x0000,0xddf8,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcae5,0x0000,0x0000,0x0000,0xdca1,
-0x0000,0xe0b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfcac,0xfcad,0xd8a7,0x0000,0x0000,0x0000,
-0x0000,0xedb8,0x0000,0x0000,0x0000,0xdbb6,0x0000,0x0000,
-0x0000,0x0000,0xd6f0,0xf3af,0x0000,0x0000,0xcda5,0x0000,
-0xdaf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8a8,0x0000,0x0000,0x0000,0xcce4,0x0000,0x0000,0xd1b4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcad8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdaf2,0x0000,0x0000,0x0000,0x0000,
-/* 0x7900 */
-0x0000,0xf5a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5ec,0xd5f8,0xdaf3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3c6,0x0000,0x0000,0x0000,0xdee4,0x0000,
-0xdee5,0xd1b5,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1b6,
-0xd1b7,0xf2b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe9de,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0d3,0xf2b4,
-0x0000,0x0000,0xf0d4,0xcbe4,0xfbd4,0xf5e6,0xe3ea,0x0000,
-0xdee6,0x0000,0x0000,0x0000,0x0000,0xdfd4,0x0000,0x0000,
-0xf8f9,0x0000,0x0000,0x0000,0x0000,0xf0ae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1b8,0x0000,0x0000,0x0000,0x0000,0xd6df,
-0x0000,0xd0d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfca1,0xefee,0xdcd8,
-0x0000,0xe9df,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5dd,0xfdfb,
-0x0000,0x0000,0xe0c9,0x0000,0x0000,0x0000,0xd6c9,0x0000,
-0x0000,0xd4aa,0x0000,0xe5cc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe9e0,0x0000,0x0000,0x0000,0xd0d8,0xfca2,0xd4be,
-0xe2b3,0xdee7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdcbc,0xd2b6,0xf5d5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcea1,0xf5a9,0x0000,0x0000,0xddf9,0x0000,0x0000,
-0xddfa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0d5,
-0x0000,0x0000,0x0000,0x0000,0xf6df,0x0000,0xf2da,0xe4eb,
-0x0000,0xf2f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xecb9,0x0000,0x0000,0x0000,0x0000,
-0xfdfc,0x0000,0x0000,0x0000,0x0000,0xe1aa,0x0000,0x0000,
-0xcad9,0x0000,0x0000,0xefef,0x0000,0xf5aa,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xecf9,0x0000,0x0000,0xf8ad,
-0x0000,0xf2c2,0xf6c3,0x0000,0xd7d2,0x0000,0x0000,0xf9a2,
-0xf0d6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0fa,0x0000,
-0x0000,0xf6e0,0x0000,0x0000,0x0000,0x0000,0xe9f3,0xf2c3,
-0x0000,0x0000,0x0000,0xd4ab,0xcab3,0xcda6,0x0000,0xcdc3,
-0xcdda,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9cf,0x0000,
-0x0000,0xf6c4,0x0000,0x0000,0x0000,0xeedd,0xe7c4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2b4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfe2,0xe7db,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe8b1,0x0000,0xfcae,0x0000,0x0000,0x0000,0x0000,
-0xe5cd,0x0000,0x0000,0x0000,0xfaeb,0x0000,0xcfbc,0x0000,
-0x0000,0xcfe2,0xcdf6,0x0000,0x0000,0xeff0,0x0000,0xf4be,
-0x0000,0xd4cd,0x0000,0x0000,0xf3b8,0x0000,0x0000,0x0000,
-0xe9a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf2f2,0xf3eb,0x0000,0xf0d7,0x0000,0x0000,
-0xcfd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfdf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe8c0,0xe8c1,0x0000,0x0000,0x0000,0xcfe3,0xe9a2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0aa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf3c1,0xd0ab,0x0000,0xd4e4,
-0x0000,0x0000,0xefbc,0xd8a1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9df,
-0x0000,0xf3d7,0x0000,0x0000,0x0000,0xdcbd,0x0000,0xcce5,
-0xedf1,0x0000,0x0000,0xf1e2,0x0000,0xd4db,0x0000,0x0000,
-0x0000,0x0000,0xe2b5,0x0000,0x0000,0xcae6,0x0000,0xd3ae,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcce6,0x0000,
-0x0000,0xf1d3,0xf5e7,0x0000,0x0000,0x0000,0x0000,0xcada,
-/* 0x7b00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbee,
-0x0000,0xe1c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfe9,0x0000,0xeede,0x0000,0x0000,0xf7c2,0x0000,
-0xd8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0xddac,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0af,0xd6bd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe1ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9b6,0x0000,
-0x0000,0xd4f5,0x0000,0xd0c9,0xefa7,0xe2ec,0x0000,0xdbea,
-0xcecc,0xf5e8,0xf7d5,0x0000,0xd3cd,0x0000,0xf3fe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0fe,0x0000,0xdffb,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6dd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8a4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbcd,
-0x0000,0x0000,0x0000,0xefa8,0x0000,0x0000,0x0000,0xeeb4,
-0x0000,0x0000,0x0000,0x0000,0xdad8,0xd1b9,0x0000,0xdfa9,
-0x0000,0x0000,0xf3b0,0x0000,0x0000,0xccc4,0x0000,0x0000,
-0x0000,0xceb7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xefa9,0x0000,0x0000,
-0x0000,0xdfd5,0x0000,0x0000,0xedd7,0x0000,0x0000,0x0000,
-0xeec6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefbd,0xfcd6,0x0000,0x0000,0xdbf4,0x0000,0xefaa,0xf8b9,
-0x0000,0xf5e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3d9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe1c6,0x0000,0x0000,0x0000,0xd4bf,0x0000,0x0000,0x0000,
-0x0000,0xdee8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0ea,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3c2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3af,0x0000,
-0x0000,0xcadb,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcd7,
-0x0000,0x0000,0xedd8,0xe1c7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4d8,0xd6b3,0xddad,
-0x0000,0x0000,0x0000,0xd5be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf1c3,0xeedf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6eb,0x0000,0x0000,0x0000,0xf4d9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7e6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdab7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xddfb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xddcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8a3,0x0000,0x0000,0xdad9,0x0000,0xf0d8,
-0xefc4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1d8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1d4,0x0000,0xedf2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5db,0x0000,
-0x0000,0xd5dc,0xf3c4,0xcbd7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2b6,0x0000,0x0000,0x0000,0x0000,0xeff1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbd5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3d8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddd0,0xf0d9,
-0xcbb3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5dd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcda7,0x0000,0x0000,0xd0ac,0x0000,
-0xd1ba,0x0000,0xf1c4,0x0000,0xe5b3,0xfbf5,0xe9e1,0xfde0,
-0xfcbc,0x0000,0xdaa2,0xdaa3,0x0000,0xd2a1,0x0000,0x0000,
-0xd2ef,0x0000,0x0000,0x0000,0xe2ed,0x0000,0x0000,0xdee9,
-0xcedc,0xf2b5,0xd0e4,0xddd1,0x0000,0x0000,0x0000,0x0000,
-0xe1c8,0xdbb7,0xdfe3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xedb9,0xf1c5,0x0000,0xf3cf,0xd7ab,
-0xe1ac,0x0000,0x0000,0xe3eb,0x0000,0xeec7,0x0000,0x0000,
-0x0000,0xe1c9,0xcafa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0fb,0xfae1,0xf0da,0xcce7,0xdaf4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xccbf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceed,0x0000,
-0x0000,0xd5a9,0xfae2,0x0000,0x0000,0x0000,0xd0e5,0x0000,
-0xebd6,0x0000,0xecdf,0x0000,0x0000,0x0000,0xdffc,0x0000,
-0x0000,0xf7d6,0xdeea,0xcbb4,0x0000,0x0000,0xefbe,0x0000,
-0x0000,0xccb5,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfbd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeff2,0xe2b7,
-0x0000,0x0000,0x0000,0xcce8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0fc,0x0000,0x0000,0x0000,
-0xd6e0,0x0000,0xf1c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2b8,0xebab,0x0000,0x0000,
-0x0000,0xcbb5,0xd8d1,0x0000,0xf4ce,0xf3f7,0x0000,0x0000,
-0xd7c6,0x0000,0xd1bb,0xf7aa,0x0000,0xedca,0xd7d3,0xd8fa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6c5,
-0x0000,0x0000,0xd1cc,0xddfc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdffd,0x0000,
-0xf9e5,0x0000,0xe0ca,0x0000,0x0000,0xf2fd,0xd3b0,0x0000,
-0xf4f3,0xdac9,0x0000,0xe6de,0x0000,0x0000,0x0000,0x0000,
-0xf8ba,0xe8d0,0x0000,0x0000,0xd8fb,0x0000,0x0000,0xead5,
-0x0000,0x0000,0x0000,0x0000,0xd6a3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6c6,0x0000,0x0000,0x0000,0x0000,
-/* 0x7e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf2db,0xe4fc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdada,0x0000,0xf2dc,0xfbd6,0xe9b2,
-0x0000,0xeead,0x0000,0xfae3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdcee,0x0000,0x0000,0xf5ea,0xe6e0,
-0x0000,0xf0fd,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5c5,0xeee0,0x0000,
-0x0000,0xdbe5,0x0000,0xddde,0x0000,0x0000,0xd9f0,0xe9a3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1f9,0x0000,0xf2c4,0xe0cb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9a4,0x0000,
-0x0000,0xe2b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe3b1,0xfceb,0xcda8,0x0000,0xccb6,0x0000,0x0000,
-0xf0db,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe6ba,0x0000,0x0000,0xcda9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3c3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe1d9,0x0000,0x0000,0xefab,
-0x0000,0x0000,0x0000,0xe7c5,0x0000,0x0000,0xe0e9,0x0000,
-0xf3c5,0x0000,0x0000,0xd4c0,0xd5bf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddae,0x0000,
-0xf9fc,0x0000,0xccc0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe5a2,0x0000,0x0000,0x0000,
-0xceb8,0x0000,0x0000,0x0000,0xd8d2,0xf9d6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1aa,0xced1,0x0000,0x0000,0xf6c7,0x0000,
-0xdbeb,0x0000,0xdffe,0x0000,0x0000,0xd8e1,0x0000,0xf7f3,
-0x0000,0xd7e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4fe,0x0000,0x0000,
-0xd1bc,0x0000,0xe5cf,0x0000,0xcbb6,0x0000,0xdab8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdc4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6be,0x0000,0x0000,0x0000,0xe2ba,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfd8,0x0000,0x0000,0x0000,
-0xe0cc,0xebf9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfdfd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd7e8,0xcbd8,0x0000,0x0000,0x0000,0xe9e2,0x0000,0x0000,
-0x0000,0xe8ba,0x0000,0x0000,0x0000,0xe3c7,0x0000,0x0000,
-0x0000,0x0000,0xeccd,0x0000,0xecce,0x0000,0xd6bf,0x0000,
-0x0000,0x0000,0xe3a7,0x0000,0xdfd6,0xfde8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeee1,
-0xf6a8,0xddfd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8bb,0x0000,0xe8d1,0x0000,0x0000,0x0000,0x0000,
-0xf9d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xceee,0x0000,0x0000,0xeccf,0x0000,0x0000,0x0000,
-0xe9a5,0xd6d5,0x0000,0xcdc5,0x0000,0xedba,0xd1bd,0x0000,
-0x0000,0xcfbe,0x0000,0x0000,0xecbb,0x0000,0x0000,0x0000,
-0xd2b1,0x0000,0x0000,0x0000,0x0000,0xcce9,0x0000,0xd9c4,
-0xe9fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd1be,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xecbc,0x0000,0x0000,0xe5ad,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf7b0,0x0000,0xccea,
-0x0000,0x0000,0x0000,0xd3c4,0x0000,0x0000,0xd6c0,0x0000,
-0x0000,0x0000,0xd6fd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a1,0x0000,
-0xdebd,0x0000,0xf6a9,0x0000,0x0000,0x0000,0xdaa4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a4,
-0xf5c6,0x0000,0xe1a2,0xe9c6,0x0000,0x0000,0x0000,0xf2c5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4e9,0xd6ec,0xebd3,
-0x0000,0x0000,0x0000,0x0000,0xecbd,0xe2dc,0xdeeb,0xf0dc,
-0x0000,0xebbf,0x0000,0xd7ce,0xd1bf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5ab,0x0000,
-0x0000,0x0000,0x0000,0xf9fd,0x0000,0xcadc,0x0000,0x0000,
-0x0000,0xcdc6,0xf2b6,0x0000,0x0000,0xddfe,0x0000,0x0000,
-0x0000,0xccb7,0xdbb8,0x0000,0x0000,0x0000,0x0000,0xd0e9,
-0x0000,0xcedd,0xebc0,0x0000,0xfda2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8cb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xead6,0xf1b0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdbce,0x0000,0xf7c3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbcf,0xcba4,0x0000,0x0000,0xf8e0,0x0000,
-0x0000,0xfbd7,0x0000,0x0000,0xebca,0xe0a1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcecd,0x0000,0x0000,0xd4dc,0x0000,0x0000,0x0000,
-0xfdd8,0x0000,0x0000,0x0000,0x0000,0xd2f6,0x0000,0x0000,
-/* 0x8100 */
-0x0000,0x0000,0xf2b7,0x0000,0x0000,0xfaf6,0xf6aa,0xfaf7,
-0xd8e6,0x0000,0xf4b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe8d2,0x0000,0xcac5,0xcceb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2ee,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2bb,0x0000,0xf7ad,0x0000,0x0000,0x0000,0xf8e1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf3ec,0x0000,0x0000,0x0000,0x0000,0xdea1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe4fd,0x0000,0x0000,0xe3ec,0x0000,
-0xddaf,0xddb0,0x0000,0x0000,0xcbb7,0xe8d3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a3,0xd2e0,0x0000,
-0x0000,0x0000,0x0000,0xf0fe,0x0000,0x0000,0x0000,0x0000,
-0xe9a6,0xcbf2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedf3,0xdcd9,0xe0cd,0x0000,0x0000,0x0000,0x0000,0xf7da,
-0xdbb9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xccae,0x0000,0xdadb,0x0000,0x0000,0x0000,0x0000,0xcdc7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddb1,0x0000,0xd8af,0xe3a3,0x0000,0x0000,
-0xceef,0x0000,0x0000,0xf2f3,0x0000,0x0000,0x0000,0x0000,
-0xf8b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0ce,0x0000,0xf5fd,0x0000,0x0000,
-0x0000,0x0000,0xebec,0x0000,0x0000,0xd3c5,0xfcec,0xd2db,
-0xd4eb,0x0000,0xdea2,0x0000,0x0000,0x0000,0xe5e6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0b0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd5c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedf4,
-0x0000,0x0000,0x0000,0xe3ed,0x0000,0xe8c2,0x0000,0xedf5,
-0xd7fc,0x0000,0xedbb,0x0000,0x0000,0xf6ab,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2b8,0xf6c8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd3e6,0xf2dd,0xcfbf,0x0000,0xebac,0x0000,
-/* 0x8200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcfc0,0x0000,0xe6a8,
-0xfde9,0x0000,0xcfc1,0x0000,0xe0df,0xdeec,0x0000,0x0000,
-0x0000,0x0000,0xe0a2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4bf,0xe2ef,0x0000,0xd9f1,0xf1c7,
-0x0000,0xcbb8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf9fe,0xdbba,0xdaf5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6ec,0xdadc,0xfae4,
-0x0000,0xe0cf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xddb2,0x0000,0x0000,0x0000,0x0000,0xe6a9,0x0000,0xeff3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf3ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xebfa,0x0000,0xf9e6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcadd,0xd5de,
-0x0000,0xcade,0xdfe4,0x0000,0x0000,0x0000,0xe6fd,0x0000,
-0xf5ac,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe9e3,0x0000,0xedcb,0xcfe4,0x0000,
-0x0000,0x0000,0xd8d3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xddb3,0xd4ec,0x0000,0x0000,0xf2b9,0x0000,0xdfb7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbce,0xfbd8,0x0000,
-0x0000,0xd0d9,0x0000,0x0000,0xddd2,0xf7f4,0xe7dc,0xe4a5,
-0x0000,0xfca3,0x0000,0xdbbb,0x0000,0x0000,0x0000,0xf2ba,
-0xe9fd,0xd0ca,0x0000,0xf5d6,0xd9c5,0xe4b4,0x0000,0xeda7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeabd,0xe6fe,0x0000,0xf7c4,0xf5ad,0x0000,0xd9e0,
-0x0000,0x0000,0x0000,0xcab4,0x0000,0x0000,0xf8e2,0xcfc2,
-0x0000,0xecbe,0x0000,0x0000,0x0000,0xe5b4,0xcdc8,0xeec8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe7c8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcdc9,0xf9b7,0x0000,
-/* 0x8300 */
-0x0000,0xf1e8,0xd9f2,0xdbf5,0xcab5,0xd9c6,0x0000,0x0000,
-0x0000,0xd8c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ab,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedbc,0x0000,0x0000,0xd8d4,0x0000,0x0000,0x0000,0xdcda,
-0x0000,0xe2bc,0x0000,0x0000,0xfced,0xece0,0xd2fe,0x0000,
-0xe9c7,0xe6aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfabb,
-0x0000,0xf5ae,0xfbaa,0x0000,0x0000,0x0000,0x0000,0xecfb,
-0x0000,0xecbf,0xfcd8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd4e5,0x0000,0x0000,0x0000,0xf9c3,
-0x0000,0x0000,0x0000,0xeee2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd7e9,0xedf6,0x0000,0x0000,0x0000,0xdeed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xccec,0x0000,
-0xe3ee,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8d4,0x0000,
-0x0000,0x0000,0xfaf8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xddb4,0xe4b5,0xd8b0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8d5,0x0000,0x0000,
-0x0000,0xf4ea,0x0000,0x0000,0x0000,0xceb9,0x0000,0x0000,
-0x0000,0xd6e1,0xcfd2,0x0000,0xd0b6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcea2,0x0000,0x0000,0xf3ee,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf3f8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdccc,0x0000,0xd0cb,0x0000,0x0000,0x0000,0xfca4,
-0xcdca,0xd7d4,0xdea3,0x0000,0xe4e0,0x0000,0x0000,0x0000,
-0x0000,0xeec9,0x0000,0x0000,0x0000,0xe2dd,0x0000,0x0000,
-/* 0x8400 */
-0x0000,0x0000,0x0000,0xf5fe,0xd4ac,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5d1,0x0000,0xd8f0,0xf8c3,0xead7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf5d7,0x0000,0x0000,0xd8bf,0x0000,0x0000,0x0000,
-0x0000,0xfdc0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebad,0x0000,0x0000,0x0000,0x0000,0xd5aa,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe7a8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeeca,
-0x0000,0x0000,0x0000,0xcae7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8e3,0x0000,0xd4dd,0x0000,0x0000,0xead8,0x0000,
-0x0000,0x0000,0x0000,0xfbd9,0xedf7,0x0000,0x0000,0xe5b5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0ad,0x0000,0x0000,
-0x0000,0x0000,0xf1f1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2bd,0x0000,0x0000,0x0000,0xe3c8,0x0000,0x0000,0x0000,
-0x0000,0xd9d5,0x0000,0x0000,0xdfaa,0x0000,0x0000,0x0000,
-0x0000,0xdbbc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8e4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1fa,0x0000,0x0000,0xe5b6,0xf3ef,0x0000,0x0000,0xfbda,
-0xe1e0,0x0000,0xd9ac,0x0000,0xf5eb,0x0000,0xe0b6,0x0000,
-0x0000,0xe9c8,0x0000,0xcbcf,0x0000,0xe3c9,0x0000,0x0000,
-0x0000,0xdeee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe2be,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdcef,0x0000,0xd6a5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2f1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6fe,0x0000,0x0000,0x0000,
-/* 0x8500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9a1,0x0000,0xd8c0,0xdcdb,0x0000,0x0000,0xedbd,
-0xdfb8,0x0000,0xeaa5,0x0000,0x0000,0x0000,0xd7ad,0x0000,
-0x0000,0xf3f9,0x0000,0xedf8,0x0000,0xf5c7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe1ca,0xebe3,0x0000,0xf2de,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8cc,0x0000,0xead9,
-0x0000,0xd3c6,0x0000,0xdbe6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf5af,0x0000,0x0000,0x0000,0x0000,0xcef0,0x0000,
-0x0000,0x0000,0x0000,0xe9fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfbb6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2f2,0x0000,0x0000,0x0000,0x0000,
-0xcff2,0xf7b9,0xd9f3,0x0000,0x0000,0xe1cb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdadd,0x0000,0x0000,0xdab9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebfb,
-0x0000,0xcbb9,0x0000,0x0000,0xedf9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0e0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4c0,0x0000,
-0xfdbc,0xdfb1,0xe3ef,0x0000,0x0000,0x0000,0x0000,0xe0a3,
-0xfdb9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdcb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xedbe,0x0000,0x0000,0x0000,0xd5c0,0xe3f0,0xedfa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9e4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd5ed,0xe7dd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4f6,0xe5b7,0x0000,0x0000,
-0x0000,0xdbe7,0xe2bf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeecb,
-0x0000,0x0000,0xd7f4,0xf0dd,0x0000,0x0000,0x0000,0xceab,
-/* 0x8600 */
-0x0000,0x0000,0xe7de,0x0000,0x0000,0x0000,0xd6d6,0xe1cc,
-0x0000,0x0000,0xe8b3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5ee,0xdca2,
-0x0000,0x0000,0xe0d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd5b5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5a1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbdb,0x0000,
-0xf9cb,0x0000,0x0000,0x0000,0xcbf3,0xf4a5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfac8,0xd6d7,0x0000,0xe9e5,0xfbdc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdd0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfbf6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdaa5,0x0000,0xdbbd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xece2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcdf7,0xf0de,0x0000,0x0000,0x0000,
-0x0000,0xf6c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdeef,
-0x0000,0x0000,0x0000,0xd3b1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfcee,0x0000,0x0000,0x0000,
-0x0000,0xe8c3,0x0000,0xf1c8,0x0000,0x0000,0x0000,0xcef1,
-0x0000,0x0000,0x0000,0x0000,0xf9ed,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2f4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4b6,0x0000,
-0xf5b9,0x0000,0xdcf0,0xe3f1,0x0000,0x0000,0x0000,0x0000,
-0xe8a5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf2bb,0x0000,0xdea4,0x0000,0xdacc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcae9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3da,0x0000,0xfcd9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeada,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9c4,0x0000,
-0xe3a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfbdd,0x0000,0xefca,0x0000,
-0xe8c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5cc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xebd7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ad,
-0x0000,0x0000,0xfbab,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd3d9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5a2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6de,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdaf6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0d1,0x0000,0x0000,0xe9a8,
-0x0000,0x0000,0xf5f9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfaaf,0x0000,0xebfc,0x0000,0x0000,0xe0ea,0x0000,
-/* 0x8800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3b2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5c5,
-0x0000,0x0000,0xf1e3,0xd5ee,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdcc,0x0000,0x0000,0x0000,0x0000,0xedd9,0x0000,
-0x0000,0x0000,0x0000,0xd8c1,0x0000,0x0000,0x0000,0x0000,
-0xfaec,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1eb,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfabc,0xe6e2,0x0000,0x0000,
-0x0000,0x0000,0xfae5,0xe2fa,0x0000,0x0000,0x0000,0xcab6,
-0x0000,0xe4b7,0x0000,0xeadb,0x0000,0xf5fa,0x0000,0x0000,
-0x0000,0xfbac,0xcfc3,0xebfd,0x0000,0x0000,0x0000,0x0000,
-0xf8fa,0x0000,0x0000,0xdfb9,0x0000,0x0000,0x0000,0x0000,
-0xe1f1,0x0000,0xd2a4,0x0000,0x0000,0x0000,0x0000,0xf5fb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0da,0xd0db,
-0x0000,0xeabe,0xd9b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcab7,0x0000,0x0000,0xd3e7,0x0000,0xf8e5,0x0000,0x0000,
-0x0000,0x0000,0xd3b2,0x0000,0x0000,0x0000,0xe2c0,0xf2df,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9ac,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdcd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeeae,0xd6ae,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7ea,
-0x0000,0x0000,0x0000,0x0000,0xe7e0,0xebae,0x0000,0x0000,
-0x0000,0xcfd9,0x0000,0x0000,0xdccd,0xedfb,0x0000,0xdef0,
-0x0000,0xd7eb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdea5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdfd7,0xdbd0,0xdbd1,0x0000,0x0000,
-0xd5a3,0x0000,0x0000,0x0000,0x0000,0xf0b2,0x0000,0x0000,
-/* 0x8900 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcdc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcae8,0x0000,0xf8e6,0xdcce,0x0000,0x0000,0x0000,0x0000,
-0xeadc,0xdbd2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9b3,0x0000,0x0000,
-0x0000,0x0000,0xf7db,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a8,0x0000,
-0xd7ae,0x0000,0x0000,0xe0e1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcbba,0x0000,0x0000,0xe5d1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0dc,
-0x0000,0x0000,0x0000,0x0000,0xd5c1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8ca,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3a9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0a4,
-0x0000,0xe9a9,0x0000,0xd3c7,0x0000,0x0000,0xdcdd,0xf8ae,
-0x0000,0x0000,0x0000,0xccb8,0x0000,0x0000,0x0000,0xd0ae,
-0x0000,0x0000,0x0000,0xd8f2,0x0000,0x0000,0xe3ca,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccaf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd4ad,0xf6d1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0cc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcac6,0x0000,0x0000,0xd5c2,0x0000,0x0000,
-0xceba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcac7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfab0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdfd8,0x0000,0x0000,0x0000,
-0xf5ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5eb,0x0000,0xeff4,0xddb5,0x0000,0x0000,0x0000,0x0000,
-0xcdaa,0x0000,0xe3f2,0x0000,0xfbf7,0x0000,0xf7d0,0x0000,
-0x0000,0x0000,0x0000,0xfdba,0x0000,0x0000,0xfde1,0xf6fe,
-0xd1c0,0x0000,0x0000,0xe8c5,0x0000,0xe4b8,0x0000,0xe1e8,
-0x0000,0x0000,0x0000,0xccc1,0x0000,0xd2ed,0x0000,0x0000,
-0x0000,0x0000,0xdbbe,0x0000,0x0000,0xe0e2,0x0000,0x0000,
-0x0000,0xfac9,0x0000,0x0000,0xe1cd,0x0000,0xcab8,0x0000,
-0x0000,0x0000,0xf2e0,0xf1c9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdef1,0x0000,0x0000,0x0000,0xf0df,0xf8c4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeecc,0x0000,0x0000,0xdef2,0x0000,
-0xe7c9,0x0000,0xe2f3,0xe7e1,0x0000,0x0000,0xe3cb,0x0000,
-0x0000,0xe3cc,0x0000,0x0000,0x0000,0xcff8,0xefac,0x0000,
-0xfdfe,0xfca5,0xfab1,0xdfd9,0x0000,0xe0d2,0x0000,0x0000,
-0x0000,0xf4da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1ca,0x0000,0xcea3,
-0x0000,0x0000,0x0000,0x0000,0xf2bc,0xece3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0a5,0x0000,0xf7ab,0x0000,0x0000,
-0xebaf,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5de,0x0000,
-0xe1a4,0xcdab,0x0000,0xd9f4,0xe8a6,0xcdce,0xe1e9,0x0000,
-0xfcef,0x0000,0xe0e3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2c1,0x0000,0xcea4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdea6,0x0000,0x0000,0xebfe,0x0000,0xebdd,0xf0e0,
-0x0000,0x0000,0xf4db,0x0000,0xe2f4,0x0000,0x0000,0xd3c8,
-0x0000,0x0000,0x0000,0xf4eb,0x0000,0xeeb5,0x0000,0xf5d8,
-0x0000,0x0000,0xd5df,0x0000,0x0000,0x0000,0xd6e5,0x0000,
-0x0000,0x0000,0x0000,0xebb0,0xf4e3,0x0000,0x0000,0x0000,
-0x0000,0xe3cd,0x0000,0x0000,0x0000,0x0000,0xf4f4,0xfab2,
-0x0000,0x0000,0xeff5,0xcadf,0x0000,0xebb1,0xedbf,0x0000,
-0x0000,0xfdc9,0x0000,0x0000,0x0000,0x0000,0xe4a6,0xf9a4,
-0xf0b3,0x0000,0xe5ec,0x0000,0x0000,0x0000,0xd1e7,0x0000,
-0xd9c7,0xe4d7,0xeadd,0x0000,0xd4f7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdaba,0x0000,
-0xdacd,0x0000,0x0000,0x0000,0xf9cc,0x0000,0xe1da,0xdbbf,
-0x0000,0xccc5,0xecd0,0xcbbb,0x0000,0xdef3,0x0000,0x0000,
-0xe9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9c8,0x0000,0x0000,0xeee3,0xd7bd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcfc4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd0cd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfca6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf1fb,0x0000,0x0000,0x0000,0x0000,0xfdd2,0xd1c1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe3db,0x0000,0xd3c9,0x0000,0xdccf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcced,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdea7,0x0000,0x0000,0xe6bb,
-0xeca1,0x0000,0x0000,0x0000,0xccb9,0x0000,0x0000,0xfbde,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe7e2,0x0000,0x0000,
-0xd4c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdca8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2c2,0x0000,0xf3d8,0xe5d3,0x0000,0x0000,0xf3d9,0x0000,
-0x0000,0x0000,0xf3c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x8c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcddb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdac,
-0x0000,0xfcc3,0x0000,0x0000,0x0000,0x0000,0xd4e7,0x0000,
-0xd1c2,0x0000,0xf9a5,0x0000,0xe8d5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3ce,0x0000,0x0000,
-0x0000,0x0000,0xd4ca,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfda,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbdf,0xe7e3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8fb,0xe3cf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5b0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8e7,0x0000,0xd9c9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8af,0xeff6,0x0000,
-0xddb6,0xeeaf,0xcdf8,0x0000,0x0000,0x0000,0x0000,0xdeb8,
-0xfca7,0xf7fc,0xf7b1,0xcebb,0xf4a1,0x0000,0x0000,0xeecd,
-0xe1ae,0x0000,0x0000,0xecc3,0xcffe,0x0000,0xf8bf,0xd8e2,
-0xd3e8,0x0000,0x0000,0xdea8,0xf4e4,0xecc2,0x0000,0xd9f5,
-0xf9c5,0xddd3,0xd6f1,0xecfc,0xfcf0,0x0000,0x0000,0xedc0,
-0xcab9,0x0000,0xeee4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf2e1,0x0000,0xdeb9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6f2,0x0000,0xdef4,0x0000,0xdfdb,0x0000,
-0xdbd3,0x0000,0xfae7,0xd8e3,0xf4c1,0x0000,0xddb7,0x0000,
-0x0000,0x0000,0xf2f5,0x0000,0x0000,0xd4ae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6f3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xddb8,0xcfc5,0xdfdf,0x0000,0x0000,
-/* 0x8d00 */
-0x0000,0x0000,0x0000,0x0000,0xf2be,0xf6a1,0x0000,0xebcb,
-0xf1fc,0x0000,0xf3c7,0x0000,0x0000,0xe0eb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xedfc,0x0000,0x0000,0xe1db,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeee5,0x0000,0xdef5,0x0000,
-0x0000,0x0000,0x0000,0xfad3,0x0000,0x0000,0x0000,0x0000,
-0xf1cb,0x0000,0x0000,0xd0af,0xddb9,0x0000,0x0000,0xd1c3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b1,0x0000,0x0000,
-0x0000,0x0000,0xeac6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf0e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6ac,0x0000,0x0000,0x0000,0x0000,
-0xf5d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0eb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddba,0x0000,0x0000,0x0000,0xf2bf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7c5,0x0000,
-0x0000,0x0000,0x0000,0xdba2,0xf2f6,0x0000,0x0000,0xcaba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf7f5,0x0000,0xcbe5,0x0000,0x0000,
-0x0000,0xeee6,0x0000,0xe0d3,0x0000,0x0000,0x0000,0x0000,
-0xcea5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6d8,
-0x0000,0x0000,0x0000,0xd4af,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x8e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9c9,0x0000,0x0000,0x0000,0x0000,0xd3ce,
-0xf4c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbe6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1a1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebb2,0x0000,0x0000,0x0000,0x0000,0xf1a2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xebb3,0x0000,0xf0b4,0x0000,0x0000,0xcbf4,
-0xd4b0,0xf3b2,0xfbb7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf5ec,0x0000,0x0000,0x0000,0x0000,0x0000,0xeee7,
-0xf4b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5ed,0x0000,0xcff3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf0e2,0x0000,0x0000,0x0000,0x0000,0x0000,0xeece,
-0x0000,0x0000,0xf1cc,0x0000,0x0000,0xe5b8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd7f5,0xe3f3,0xcfe5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfc6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3b3,0xe4d8,0xcff9,0xcfda,0x0000,0x0000,
-0x0000,0x0000,0xfacd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6e3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2e2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5ee,0x0000,0x0000,0xcabb,0x0000,0x0000,0xe3dc,0x0000,
-/* 0x8f00 */
-0x0000,0x0000,0x0000,0xcef2,0x0000,0xd6d9,0x0000,0x0000,
-0x0000,0xeeb0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf4e5,0xd8c2,0xdcd0,0xccee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5e0,0xf6ca,0xfdca,0xd8d6,0xf4cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a6,0xdcbe,
-0x0000,0xdbd4,0xd7c7,0x0000,0x0000,0x0000,0x0000,0xf2fe,
-0x0000,0x0000,0x0000,0xf1cd,0x0000,0x0000,0x0000,0x0000,
-0xe2c3,0xdcde,0x0000,0xdcdf,0x0000,0x0000,0xefad,0xe6ab,
-0x0000,0x0000,0x0000,0x0000,0xf9dd,0xeabf,0x0000,0x0000,
-0x0000,0xefae,0x0000,0x0000,0x0000,0xf4d0,0xcef3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ac,0x0000,0xcede,
-0x0000,0x0000,0xd5f9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe3f4,0xcdd0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5b8,0x0000,0x0000,0xf7fd,0x0000,
-0xdca9,0x0000,0x0000,0x0000,0x0000,0xdef6,0x0000,0xdcaa,
-0xf2e3,0xe9b4,0xd2dc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9e6,0x0000,0x0000,0xe3f6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7ca,0x0000,
-0x0000,0xd0ce,0x0000,0x0000,0xdaf7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcabc,0x0000,
-0x0000,0x0000,0xeee8,0xdade,0x0000,0xf2f7,0x0000,0x0000,
-0xe2fb,0x0000,0xcca6,0x0000,0x0000,0x0000,0x0000,0xdabb,
-0x0000,0xeee9,0x0000,0x0000,0x0000,0xf5da,0x0000,0x0000,
-0xf7dc,0xe1ea,0xcec1,0xd4b1,0x0000,0xfdb1,0xe6bd,0x0000,
-0xfbad,0x0000,0x0000,0xf8e7,0x0000,0xe1ce,0x0000,0xf7e2,
-0xf5ef,0xcfc7,0x0000,0x0000,0xd4b2,0xccef,0x0000,0xd4e8,
-0x0000,0xeecf,0xf7d7,0x0000,0x0000,0xe0a6,0xd6c1,0xe1dc,
-0xf0e3,0xf1e4,0xdcf1,0xd6a7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f5,0x0000,
-0x0000,0xf1ce,0xf2e4,0x0000,0x0000,0xd0b0,0x0000,0x0000,
-0xecef,0x0000,0x0000,0x0000,0xf9ba,0x0000,0xebb5,0x0000,
-0x0000,0xd4ed,0xe2c4,0x0000,0x0000,0x0000,0x0000,0xe9e7,
-0x0000,0x0000,0xebb4,0xeaa1,0x0000,0xf8bc,0xcea6,0x0000,
-0xf9c6,0xfcda,0x0000,0xd4b3,0xd3b9,0xeade,0x0000,0x0000,
-0x0000,0xe9ab,0x0000,0x0000,0xe1e1,0xd3cf,0xf4f6,0x0000,
-0xeac0,0xe1cf,0x0000,0xccba,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeeea,0x0000,0x0000,0x0000,0xf0e4,0xf3b4,0xd4ee,
-0x0000,0x0000,0xf2c0,0x0000,0x0000,0xf1e5,0x0000,0xf4c3,
-0xe0d4,0x0000,0xebb6,0x0000,0xd7a1,0xcbe8,0x0000,0xf9ad,
-0xe9ad,0xd8e4,0xfab3,0xe2c5,0xfcbd,0x0000,0x0000,0xecc4,
-0xd8b1,0x0000,0xdcab,0x0000,0x0000,0x0000,0x0000,0xd5a4,
-0x0000,0xebe9,0x0000,0x0000,0x0000,0xe8bb,0x0000,0x0000,
-0x0000,0xd8d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbae,0xd1e1,0x0000,0x0000,0xdbc0,0x0000,
-0xf5be,0x0000,0xdef7,0x0000,0x0000,0x0000,0x0000,0xcafb,
-0xf7c6,0xcfc8,0x0000,0x0000,0x0000,0xe1d0,0x0000,0x0000,
-0xeed0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe9f4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcef4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5cd,0x0000,
-0x0000,0xcfdb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xddbb,0x0000,0x0000,0x0000,0x0000,0xceac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9e8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4b4,0x0000,0x0000,
-/* 0x9100 */
-0x0000,0x0000,0xe4c7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5db,0x0000,0x0000,0xfac1,0x0000,0x0000,
-0x0000,0xdea9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd4f8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xeff7,0x0000,0x0000,
-0x0000,0x0000,0xd3b3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xebb7,0xeff8,0xf5dc,0xedcc,0xdbd5,0xf1cf,0x0000,
-0x0000,0x0000,0xf1d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5b2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9ae,0xd5ac,0x0000,0xe2c6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfda3,0x0000,0xfbe5,
-0xdfab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2f5,
-0x0000,0xf6ad,0x0000,0xf5b3,0x0000,0xf0b5,0x0000,0x0000,
-0x0000,0x0000,0xe1a5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5dd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeca2,0xedfd,0x0000,0xf5b4,0xfbb8,
-0x0000,0xdba3,0x0000,0x0000,0xd6ca,0xcbd9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5d4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3fa,
-0x0000,0xebb8,0x0000,0xe0b7,0xd7ec,0xf1ec,0xe5af,0xd5e1,
-0xd7ed,0xd1d1,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f2,
-0xeff9,0x0000,0x0000,0x0000,0xddbc,0xf6dc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0e5,0x0000,0x0000,0x0000,0xf4c4,
-0x0000,0x0000,0xe9e9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3fb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4ef,0x0000,0x0000,
-0xcca2,0xf7fe,0xdfbc,0x0000,0x0000,0x0000,0x0000,0xebcd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0b7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6c2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe8ad,0x0000,0x0000,0x0000,0x0000,0xefaf,
-0xcba5,0x0000,0x0000,0x0000,0x0000,0xcbe9,0x0000,0x0000,
-0x0000,0xfae8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xccc6,
-0x0000,0x0000,0x0000,0xe6e7,0x0000,0x0000,0xeac7,0x0000,
-0x0000,0x0000,0xdba4,0x0000,0xcfc9,0xe2fc,0xeffa,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebde,0x0000,0x0000,0xf5c8,0x0000,0xd4de,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe0d5,0x0000,0xefb0,0x0000,0x0000,0xe2c7,0x0000,
-0xd9af,0x0000,0x0000,0x0000,0xf9e7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe7e5,0x0000,0x0000,0xcfca,0xe1d1,
-0x0000,0xe2c8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeffb,0x0000,0x0000,0xfaf9,
-0x0000,0x0000,0xdcf2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0a7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8e8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbea,0x0000,0x0000,0x0000,0xcbbc,0x0000,0x0000,0x0000,
-/* 0x9300 */
-0x0000,0x0000,0x0000,0x0000,0xd6e2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5de,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5df,0x0000,0xeeb6,0x0000,0x0000,0x0000,0xe2f6,0xd3ca,
-0xeffc,0xd1c4,0xefb1,0x0000,0xd1c5,0x0000,0xd0de,0x0000,
-0xd9e1,0x0000,0x0000,0xe0b8,0x0000,0x0000,0xcdd1,0xf3b9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe7cc,0x0000,0xd6a8,0xcea7,0x0000,0xd4b5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe4c8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd3b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebb9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbf5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6dd,0x0000,0xf1a3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccc7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe9ca,0x0000,0xe1f0,0x0000,
-0x0000,0x0000,0xf5e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbaf,0x0000,0x0000,0x0000,0xcbd1,
-0x0000,0x0000,0x0000,0x0000,0xfbe0,0xf2e5,0x0000,0x0000,
-0xecf0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0ec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeeeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9cb,0x0000,
-0x0000,0xccf0,0x0000,0x0000,0xd7af,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3a1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9400 */
-0x0000,0x0000,0x0000,0x0000,0xfcf5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe0d6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xefb2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4d1,0x0000,0x0000,
-0xf7a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf1d1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcafc,0xcafd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcece,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3c8,0x0000,0xf3ba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedfe,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdaa6,0x0000,0x0000,0xe0ec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8cd,0x0000,0xcbd2,0x0000,0x0000,0x0000,0xebce,
-0x0000,0xf9d8,0xf9d9,0xcae0,0xdaca,0x0000,0x0000,0x0000,
-0xcba6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcac8,0xf9ee,0xdbec,0x0000,0x0000,
-0xd0b1,0x0000,0x0000,0x0000,0x0000,0xd5ef,0x0000,0x0000,
-0x0000,0xe6f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe7a2,0xe4d9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e1,
-0x0000,0x0000,0xfcc4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf9ef,0xcff4,0xf7e6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcebc,0x0000,0x0000,0x0000,
-0x0000,0xf4c5,0xdca3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xddbd,0x0000,0x0000,0x0000,
-0x0000,0xf4c6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8a1,0x0000,0x0000,0x0000,0xe8d6,0x0000,
-0x0000,0x0000,0xdbc1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0e6,0x0000,0x0000,0x0000,0xe4b9,
-0xf6ed,0x0000,0xf9ae,0x0000,0xddbe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7b0,0xd8e8,0xcbbd,0x0000,0x0000,
-0xf9da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf8ce,0xf9f0,0xe0ed,0xe3b3,0xf4b3,
-0x0000,0x0000,0xeac2,0xf2e6,0xf0b6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbd6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebe4,0x0000,0x0000,0xf2e7,0x0000,0xd7d5,0xd4b6,0xf9e8,
-0xd7c1,0x0000,0x0000,0x0000,0x0000,0xe5d5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9ea,0xd7cc,0x0000,
-0x0000,0x0000,0xd3e9,0xe2c9,0x0000,0xfcdb,0xcdad,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccb0,0xeaa2,0x0000,0x0000,
-0xe4f6,0xd0c0,0x0000,0xf0b7,0xeea1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7f6,0x0000,0x0000,0x0000,0xe2ca,
-0xe2cb,0x0000,0xfacf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xebdf,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6cb,
-0x0000,0x0000,0x0000,0xf4b4,0x0000,0x0000,0x0000,0x0000,
-0xedcd,0xe4d2,0x0000,0x0000,0xeaa9,0xe4ba,0xf3a2,0xcdd2,
-0x0000,0xf6cb,0x0000,0xf1e6,0xedc1,0xe8bc,0xeed1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0e7,0xe2cc,0x0000,
-0x0000,0xe4aa,0x0000,0xf5e1,0xedda,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd7ee,0xd1f1,0x0000,0x0000,0x0000,0x0000,
-0xe9eb,0xe9ec,0xe0e4,0x0000,0x0000,0x0000,0x0000,0xdaa7,
-0xddd4,0x0000,0xeaa3,0x0000,0x0000,0x0000,0xd6c3,0xd6f4,
-0x0000,0xdadf,0x0000,0xefb3,0x0000,0x0000,0x0000,0x0000,
-0xe2cd,0x0000,0x0000,0x0000,0x0000,0x0000,0xeffd,0xf2e8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xefc5,0x0000,0xe7e7,0x0000,0x0000,0xd7fd,0x0000,
-0x0000,0xe7ce,0x0000,0x0000,0xdfdc,0x0000,0xf9c7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9f6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfac,0x0000,0xd6da,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdca4,0x0000,0x0000,0x0000,0xf0b8,0x0000,0x0000,
-0x0000,0x0000,0xd5fa,0x0000,0xe4f7,0x0000,0x0000,0x0000,
-0xd6c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf4ec,0x0000,0x0000,0x0000,0x0000,0xeffe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0a1,0x0000,0xdeaa,0x0000,
-0x0000,0xdabc,0xd8fc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfad4,0x0000,0x0000,0x0000,0xece5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfca8,0x0000,0x0000,0xece6,
-0x0000,0x0000,0xd8cb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbb9,0x0000,0xe4d3,0x0000,0xcdf9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcaea,0x0000,0x0000,0xcfd4,0x0000,0xf8bd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4c7,0x0000,
-0x0000,0x0000,0x0000,0xeadf,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9db,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4b7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xebe5,0x0000,0x0000,0xe1d2,0x0000,
-0x0000,0x0000,0x0000,0xeaa4,0x0000,0x0000,0x0000,0xfac2,
-0xfbe1,0xfaed,0xf0a2,0xccf1,0x0000,0xfaa3,0xe2f7,0x0000,
-0xe2ce,0x0000,0xe9f5,0x0000,0xe1eb,0x0000,0x0000,0x0000,
-0xe7e8,0xe8d7,0xdaf8,0xd4cb,0x0000,0x0000,0x0000,0xf7f6,
-0xd6c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4e9,0x0000,0x0000,
-0xfafa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xccf2,0xf7dd,0x0000,0xdeba,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcea8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0b9,0xe4fe,0xe4c9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe4d4,0x0000,0x0000,0x0000,
-0xeac3,0x0000,0xefb4,0x0000,0x0000,0x0000,0xd7be,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfbe2,0x0000,0xcdd3,
-0x0000,0x0000,0x0000,0xefb5,0x0000,0x0000,0x0000,0xfae9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf9a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfbd,
-0x0000,0xf7c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf8fd,0x0000,0x0000,0xf8fc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdeab,0xdbe8,0x0000,0x0000,0xe3dd,
-0x0000,0xe1e2,0xd1c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6d0,0xebe6,0xdaf9,
-0x0000,0x0000,0x0000,0x0000,0xecc7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdef8,0xf8e9,0xe3de,0x0000,
-/* 0x9900 */
-0x0000,0x0000,0x0000,0xcef5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfac3,0xe5d7,0x0000,0xecc8,0x0000,0x0000,0x0000,
-0xf3c9,0x0000,0x0000,0xe4bb,0x0000,0x0000,0x0000,0x0000,
-0xe6ae,0x0000,0x0000,0x0000,0x0000,0x0000,0xefb6,0x0000,
-0xdcbf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcebd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8c3,0x0000,0x0000,
-0x0000,0xd0cf,0x0000,0xcffa,0xf3ca,0xe0d7,0x0000,0x0000,
-0x0000,0xd1c7,0xe9ae,0x0000,0xe8bd,0x0000,0x0000,0xfac4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2cf,0x0000,
-0x0000,0xfac5,0x0000,0x0000,0x0000,0xf9b8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdce0,0x0000,0x0000,
-0xfbb0,0x0000,0x0000,0x0000,0xd8a9,0xe5df,0xf9a7,0x0000,
-0x0000,0xf6ee,0x0000,0xf6cc,0xe2f8,0x0000,0x0000,0x0000,
-0x0000,0xecf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdae0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1d2,0xd2cc,0xcfcb,0x0000,0x0000,0xcabd,0x0000,0x0000,
-0x0000,0xddbf,0x0000,0x0000,0x0000,0xf6ef,0x0000,0xdef9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfab4,0x0000,0x0000,
-0x0000,0xd5ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1e7,
-/* 0x9a00 */
-0x0000,0xdebe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdcc0,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1c8,0xd1c9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8be,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcbf6,0x0000,0x0000,0x0000,0x0000,
-0xd4f9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5e2,0xe1d3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8e9,0x0000,0x0000,0xf8fe,0x0000,0xcfcc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfda4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcef6,0x0000,0xfad0,
-0x0000,0x0000,0xccf3,0xe6be,0x0000,0x0000,0x0000,0xf6ae,
-0x0000,0x0000,0xd5f0,0x0000,0x0000,0xd1ca,0x0000,0x0000,
-0x0000,0xfcbe,0xd5f1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcde9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfab5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2d0,0xf4f7,0x0000,0x0000,0x0000,
-0xcdd4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe7a3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdba5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9b00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe2d1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a2,
-0x0000,0x0000,0xf7e3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeaa6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd0a1,0x0000,0x0000,0x0000,
-0x0000,0xceda,0xfbeb,0xdba6,0xdbde,0xd8e5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeae0,
-0x0000,0x0000,0x0000,0x0000,0xd8aa,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6db,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xefc6,0x0000,
-0x0000,0xf8ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4d5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcef7,0x0000,0x0000,0xe0d8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd7ef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4ed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcde6,0x0000,0x0000,0x0000,
-0xccf4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5e3,0x0000,0x0000,
-0xe4ca,0x0000,0xdce1,0x0000,0x0000,0xf9c8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfcbf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe8a7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8c4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbbe,
-0x0000,0xdcae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7f7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0e8,0x0000,0xddc0,
-0x0000,0xcfcd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdcf3,0xd9b0,0x0000,0xe6e9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe4bc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeac4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ec,0x0000,
-0xe4e5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbf8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccbb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4bd,0x0000,0x0000,
-0xcddc,0xd9f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdddf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xedce,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9d0,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a3,
-0x0000,0x0000,0x0000,0x0000,0xf9cd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdae,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfce,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf6af,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfdd3,0xebed,0xd6dc,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5a4,0x0000,0x0000,0x0000,0xd5b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd6dd,0x0000,0x0000,
-0x0000,0xf9e9,0x0000,0x0000,0x0000,0xe7a4,0x0000,0xd6e3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1cb,0xd6e4,0x0000,0x0000,0x0000,0xd5f2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdefa,0x0000,0xd7f8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ea,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfd5,0xd8fd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8ab,0x0000,0x0000,0xfdcb,0x0000,
-0x0000,0x0000,0x0000,0xfcdc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe0a8,0xd5f3,0x0000,
-0x0000,0xfdd9,0x0000,0x0000,0xcca3,0x0000,0x0000,0x0000,
-0xd9f9,0x0000,0x0000,0xd3ea,0xf5f5,0x0000,0xefc7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdabd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8a8,
-0xdcaf,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0a3,0x0000,
-0x0000,0x0000,0x0000,0xcdd5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe0a9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdeac,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0ba,0xeeb1,0x0000,0x0000,0xeeb2,0x0000,
-0x0000,0x0000,0xf6cd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeed2,
-0x0000,0xd6c6,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0e5,
-0x0000,0x0000,0xf3bb,0x0000,0xe5e1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a3,0x0000,0x0000,
-0xdbc2,0x0000,0x0000,0x0000,0x0000,0xcafe,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfcf};
-
-static const int ucs_i_uhc_table_min = 0x4d00;
-static const int ucs_i_uhc_table_max = 0x4d00 + (sizeof(ucs_i_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_s_uhc_table[] = {
-/* 0xab00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb0a1,0xb0a2,0x8141,0x8142,0xb0a3,0x8143,0x8144,0xb0a4,
-0xb0a5,0xb0a6,0xb0a7,0x8145,0x8146,0x8147,0x8148,0x8149,
-0xb0a8,0xb0a9,0xb0aa,0xb0ab,0xb0ac,0xb0ad,0xb0ae,0xb0af,
-0x814a,0xb0b0,0xb0b1,0xb0b2,0xb0b3,0xb0b4,0x814b,0x814c,
-0xb0b5,0x814d,0x814e,0x814f,0xb0b6,0x8150,0x8151,0x8152,
-0x8153,0x8154,0x8155,0x8156,0xb0b7,0xb0b8,0x8157,0xb0b9,
-0xb0ba,0xb0bb,0x8158,0x8159,0x815a,0x8161,0x8162,0x8163,
-0xb0bc,0xb0bd,0x8164,0x8165,0xb0be,0x8166,0x8167,0x8168,
-0xb0bf,0x8169,0x816a,0x816b,0x816c,0x816d,0x816e,0x816f,
-0x8170,0x8171,0x8172,0xb0c0,0x8173,0xb0c1,0x8174,0x8175,
-0x8176,0x8177,0x8178,0x8179,0xb0c2,0x817a,0x8181,0x8182,
-0xb0c3,0x8183,0x8184,0x8185,0xb0c4,0x8186,0x8187,0x8188,
-0x8189,0x818a,0x818b,0x818c,0x818d,0x818e,0x818f,0x8190,
-0x8191,0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8198,
-0xb0c5,0xb0c6,0x8199,0x819a,0xb0c7,0x819b,0x819c,0xb0c8,
-0xb0c9,0x819d,0xb0ca,0x819e,0x819f,0x81a0,0x81a1,0x81a2,
-0xb0cb,0xb0cc,0x81a3,0xb0cd,0xb0ce,0xb0cf,0xb0d0,0x81a4,
-0x81a5,0xb0d1,0xb0d2,0xb0d3,0xb0d4,0x81a6,0x81a7,0x81a8,
-0xb0d5,0x81a9,0x81aa,0x81ab,0xb0d6,0x81ac,0x81ad,0x81ae,
-0x81af,0x81b0,0x81b1,0x81b2,0xb0d7,0xb0d8,0x81b3,0xb0d9,
-0xb0da,0xb0db,0x81b4,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,
-0xb0dc,0xb0dd,0xb0de,0x81ba,0xb0df,0x81bb,0x81bc,0xb0e0,
-0xb0e1,0x81bd,0x81be,0x81bf,0x81c0,0x81c1,0x81c2,0x81c3,
-0xb0e2,0xb0e3,0x81c4,0xb0e4,0xb0e5,0xb0e6,0x81c5,0x81c6,
-0x81c7,0xb0e7,0x81c8,0x81c9,0xb0e8,0x81ca,0x81cb,0x81cc,
-0xb0e9,0x81cd,0x81ce,0x81cf,0xb0ea,0x81d0,0x81d1,0x81d2,
-0x81d3,0x81d4,0x81d5,0x81d6,0x81d7,0xb0eb,0x81d8,0xb0ec,
-0x81d9,0x81da,0x81db,0x81dc,0x81dd,0x81de,0x81df,0x81e0,
-0xb0ed,0xb0ee,0x81e1,0x81e2,0xb0ef,0x81e3,0x81e4,0xb0f0,
-0xb0f1,0x81e5,0xb0f2,0x81e6,0xb0f3,0x81e7,0x81e8,0xb0f4,
-0xb0f5,0xb0f6,0x81e9,0xb0f7,0x81ea,0xb0f8,0xb0f9,0x81eb,
-0x81ec,0x81ed,0x81ee,0x81ef,0xb0fa,0xb0fb,0x81f0,0x81f1,
-0xb0fc,0x81f2,0x81f3,0x81f4,0xb0fd,0x81f5,0xb0fe,0x81f6,
-0x81f7,0x81f8,0x81f9,0x81fa,0xb1a1,0xb1a2,0x81fb,0xb1a3,
-0x81fc,0xb1a4,0x81fd,0x81fe,0x8241,0x8242,0x8243,0x8244,
-0xb1a5,0x8245,0x8246,0x8247,0xb1a6,0x8248,0x8249,0x824a,
-0xb1a7,0x824b,0x824c,0x824d,0x824e,0x824f,0x8250,0x8251,
-0x8252,0xb1a8,0x8253,0x8254,0xb1a9,0xb1aa,0x8255,0x8256,
-0x8257,0x8258,0x8259,0x825a,0xb1ab,0xb1ac,0x8261,0x8262,
-0xb1ad,0x8263,0x8264,0x8265,0xb1ae,0x8266,0x8267,0x8268,
-0x8269,0x826a,0x826b,0x826c,0xb1af,0xb1b0,0x826d,0xb1b1,
-0x826e,0xb1b2,0x826f,0x8270,0x8271,0x8272,0x8273,0x8274,
-0xb1b3,0x8275,0x8276,0x8277,0xb1b4,0x8278,0x8279,0x827a,
-0xb1b5,0x8281,0x8282,0x8283,0x8284,0x8285,0x8286,0x8287,
-0x8288,0xb1b6,0x8289,0xb1b7,0x828a,0x828b,0x828c,0x828d,
-0x828e,0x828f,0x8290,0x8291,0xb1b8,0xb1b9,0x8292,0x8293,
-0xb1ba,0x8294,0x8295,0xb1bb,0xb1bc,0xb1bd,0xb1be,0x8296,
-0x8297,0x8298,0x8299,0xb1bf,0xb1c0,0xb1c1,0x829a,0xb1c2,
-0x829b,0xb1c3,0xb1c4,0x829c,0x829d,0x829e,0x829f,0x82a0,
-0xb1c5,0xb1c6,0x82a1,0x82a2,0xb1c7,0x82a3,0x82a4,0x82a5,
-0xb1c8,0x82a6,0x82a7,0x82a8,0x82a9,0x82aa,0x82ab,0x82ac,
-0x82ad,0x82ae,0x82af,0x82b0,0xb1c9,0xb1ca,0x82b1,0x82b2,
-0x82b3,0x82b4,0x82b5,0x82b6,0xb1cb,0x82b7,0x82b8,0x82b9,
-0x82ba,0x82bb,0x82bc,0x82bd,0x82be,0x82bf,0x82c0,0x82c1,
-0x82c2,0x82c3,0x82c4,0x82c5,0x82c6,0x82c7,0x82c8,0xb1cc,
-0x82c9,0x82ca,0x82cb,0x82cc,0x82cd,0x82ce,0x82cf,0x82d0,
-0xb1cd,0xb1ce,0x82d1,0x82d2,0xb1cf,0x82d3,0x82d4,0x82d5,
-0xb1d0,0x82d6,0x82d7,0x82d8,0x82d9,0x82da,0x82db,0x82dc,
-0xb1d1,0xb1d2,0x82dd,0xb1d3,0x82de,0x82df,0x82e0,0x82e1,
-0x82e2,0x82e3,0x82e4,0x82e5,0xb1d4,0x82e6,0x82e7,0x82e8,
-0xb1d5,0x82e9,0x82ea,0x82eb,0xb1d6,0x82ec,0x82ed,0x82ee,
-0x82ef,0x82f0,0x82f1,0x82f2,0x82f3,0x82f4,0x82f5,0x82f6,
-0x82f7,0x82f8,0x82f9,0x82fa,0x82fb,0x82fc,0x82fd,0x82fe,
-0xb1d7,0xb1d8,0x8341,0x8342,0xb1d9,0x8343,0x8344,0xb1da,
-0xb1db,0xb1dc,0x8345,0x8346,0x8347,0x8348,0x8349,0x834a,
-0xb1dd,0xb1de,0x834b,0xb1df,0x834c,0xb1e0,0x834d,0x834e,
-0x834f,0x8350,0x8351,0x8352,0xb1e1,0x8353,0x8354,0x8355,
-0x8356,0x8357,0x8358,0x8359,0x835a,0x8361,0x8362,0x8363,
-0x8364,0x8365,0x8366,0x8367,0x8368,0x8369,0x836a,0x836b,
-0x836c,0x836d,0x836e,0x836f,0x8370,0x8371,0x8372,0x8373,
-0xb1e2,0xb1e3,0x8374,0x8375,0xb1e4,0x8376,0x8377,0xb1e5,
-0xb1e6,0x8378,0xb1e7,0x8379,0x837a,0x8381,0x8382,0x8383,
-0xb1e8,0xb1e9,0x8384,0xb1ea,0x8385,0xb1eb,0xb1ec,0x8386,
-0x8387,0x8388,0xb1ed,0x8389,0xb1ee,0xb1ef,0xb1f0,0x838a,
-0xb1f1,0x838b,0x838c,0x838d,0xb1f2,0x838e,0xb1f3,0x838f,
-0x8390,0x8391,0x8392,0x8393,0xb1f4,0xb1f5,0x8394,0xb1f6,
-0xb1f7,0xb1f8,0x8395,0x8396,0x8397,0xb1f9,0x8398,0x8399,
-0xb1fa,0xb1fb,0x839a,0x839b,0xb1fc,0x839c,0x839d,0x839e,
-0xb1fd,0x839f,0x83a0,0x83a1,0x83a2,0x83a3,0x83a4,0x83a5,
-0xb1fe,0xb2a1,0x83a6,0xb2a2,0xb2a3,0xb2a4,0x83a7,0x83a8,
-0x83a9,0x83aa,0x83ab,0x83ac,0xb2a5,0xb2a6,0x83ad,0x83ae,
-0x83af,0x83b0,0x83b1,0x83b2,0xb2a7,0x83b3,0x83b4,0x83b5,
-0x83b6,0x83b7,0x83b8,0x83b9,0x83ba,0x83bb,0x83bc,0x83bd,
-0x83be,0x83bf,0x83c0,0x83c1,0x83c2,0x83c3,0x83c4,0x83c5,
-0x83c6,0x83c7,0x83c8,0x83c9,0x83ca,0x83cb,0x83cc,0x83cd,
-0x83ce,0x83cf,0x83d0,0x83d1,0x83d2,0x83d3,0x83d4,0x83d5,
-0x83d6,0x83d7,0x83d8,0x83d9,0x83da,0x83db,0x83dc,0x83dd,
-0x83de,0x83df,0x83e0,0x83e1,0xb2a8,0xb2a9,0xb2aa,0x83e2,
-0xb2ab,0x83e3,0x83e4,0x83e5,0xb2ac,0x83e6,0x83e7,0x83e8,
-0x83e9,0x83ea,0x83eb,0x83ec,0xb2ad,0xb2ae,0x83ed,0xb2af,
-0xb2b0,0xb2b1,0x83ee,0x83ef,0x83f0,0x83f1,0x83f2,0x83f3,
-0xb2b2,0xb2b3,0x83f4,0x83f5,0xb2b4,0x83f6,0x83f7,0x83f8,
-0x83f9,0x83fa,0x83fb,0x83fc,0x83fd,0x83fe,0x8441,0x8442,
-0xb2b5,0x8443,0x8444,0xb2b6,0x8445,0xb2b7,0x8446,0x8447,
-0x8448,0x8449,0x844a,0x844b,0xb2b8,0x844c,0x844d,0x844e,
-0xb2b9,0x844f,0x8450,0x8451,0xb2ba,0x8452,0x8453,0x8454,
-0x8455,0x8456,0x8457,0x8458,0x8459,0x845a,0x8461,0xb2bb,
-0xb2bc,0x8462,0x8463,0x8464,0x8465,0xb2bd,0x8466,0x8467,
-0xb2be,0x8468,0x8469,0x846a,0x846b,0x846c,0x846d,0x846e,
-0x846f,0x8470,0x8471,0x8472,0x8473,0x8474,0x8475,0x8476,
-0x8477,0x8478,0x8479,0x847a,0x8481,0x8482,0x8483,0x8484,
-0x8485,0x8486,0x8487,0x8488,0xb2bf,0xb2c0,0x8489,0x848a,
-0xb2c1,0x848b,0xb2c2,0x848c,0xb2c3,0x848d,0x848e,0x848f,
-0x8490,0x8491,0x8492,0x8493,0xb2c4,0xb2c5,0x8494,0xb2c6,
-0x8495,0xb2c7,0xb2c8,0xb2c9,0x8496,0x8497,0x8498,0x8499,
-0xb2ca,0xb2cb,0x849a,0x849b,0x849c,0x849d,0x849e,0x849f,
-0xb2cc,0x84a0,0x84a1,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,
-0x84a7,0x84a8,0x84a9,0x84aa,0xb2cd,0xb2ce,0x84ab,0x84ac,
-0x84ad,0x84ae,0x84af,0x84b0,0xb2cf,0xb2d0,0x84b1,0x84b2,
-0x84b3,0x84b4,0x84b5,0x84b6,0x84b7,0x84b8,0x84b9,0x84ba,
-0x84bb,0x84bc,0x84bd,0x84be,0x84bf,0x84c0,0x84c1,0x84c2,
-0x84c3,0xb2d1,0x84c4,0x84c5,0x84c6,0x84c7,0x84c8,0x84c9,
-0xb2d2,0x84ca,0x84cb,0x84cc,0xb2d3,0x84cd,0x84ce,0x84cf,
-0xb2d4,0x84d0,0x84d1,0x84d2,0x84d3,0x84d4,0x84d5,0x84d6,
-0xb2d5,0xb2d6,0x84d7,0x84d8,0x84d9,0xb2d7,0x84da,0x84db,
-0x84dc,0x84dd,0x84de,0x84df,0xb2d8,0x84e0,0x84e1,0x84e2,
-0x84e3,0x84e4,0x84e5,0x84e6,0x84e7,0x84e8,0x84e9,0x84ea,
-0x84eb,0x84ec,0x84ed,0x84ee,0x84ef,0x84f0,0x84f1,0x84f2,
-0x84f3,0x84f4,0x84f5,0x84f6,0x84f7,0x84f8,0x84f9,0x84fa,
-0xb2d9,0xb2da,0x84fb,0x84fc,0xb2db,0x84fd,0x84fe,0x8541,
-0xb2dc,0x8542,0x8543,0x8544,0x8545,0x8546,0x8547,0xb2dd,
-0xb2de,0xb2df,0x8548,0xb2e0,0x8549,0xb2e1,0xb2e2,0x854a,
-0x854b,0x854c,0x854d,0x854e,0xb2e3,0x854f,0x8550,0x8551,
-0x8552,0x8553,0x8554,0x8555,0xb2e4,0x8556,0x8557,0x8558,
-0x8559,0x855a,0x8561,0x8562,0x8563,0x8564,0x8565,0x8566,
-0xb2e5,0xb2e6,0x8567,0x8568,0x8569,0x856a,0x856b,0x856c,
-0xb2e7,0xb2e8,0x856d,0x856e,0xb2e9,0x856f,0x8570,0x8571,
-0xb2ea,0x8572,0x8573,0x8574,0x8575,0x8576,0x8577,0x8578,
-0xb2eb,0xb2ec,0x8579,0x857a,0xb2ed,0x8581,0x8582,0x8583,
-0x8584,0x8585,0x8586,0x8587,0xb2ee,0x8588,0x8589,0x858a,
-0xb2ef,0x858b,0x858c,0x858d,0xb2f0,0x858e,0x858f,0x8590,
-0x8591,0x8592,0x8593,0x8594,0xb2f1,0xb2f2,0x8595,0x8596,
-0x8597,0x8598,0x8599,0x859a,0x859b,0x859c,0x859d,0x859e,
-0xb2f3,0x859f,0x85a0,0x85a1,0x85a2,0x85a3,0x85a4,0x85a5,
-0x85a6,0x85a7,0x85a8,0x85a9,0x85aa,0x85ab,0x85ac,0x85ad,
-0x85ae,0x85af,0x85b0,0x85b1,0x85b2,0x85b3,0x85b4,0x85b5,
-0x85b6,0x85b7,0x85b8,0x85b9,0xb2f4,0xb2f5,0x85ba,0x85bb,
-0xb2f6,0x85bc,0xb2f7,0x85bd,0xb2f8,0x85be,0xb2f9,0x85bf,
-0x85c0,0x85c1,0x85c2,0xb2fa,0xb2fb,0xb2fc,0x85c3,0xb2fd,
-0x85c4,0xb2fe,0x85c5,0x85c6,0x85c7,0xb3a1,0x85c8,0x85c9,
-0x85ca,0x85cb,0x85cc,0x85cd,0x85ce,0x85cf,0x85d0,0x85d1,
-0x85d2,0x85d3,0x85d4,0x85d5,0x85d6,0x85d7,0x85d8,0x85d9,
-0x85da,0x85db,0x85dc,0x85dd,0x85de,0x85df,0x85e0,0x85e1,
-0x85e2,0x85e3,0x85e4,0x85e5,0xb3a2,0xb3a3,0x85e6,0x85e7,
-0xb3a4,0x85e8,0x85e9,0x85ea,0xb3a5,0x85eb,0x85ec,0x85ed,
-0x85ee,0x85ef,0x85f0,0x85f1,0xb3a6,0xb3a7,0x85f2,0xb3a8,
-0x85f3,0xb3a9,0x85f4,0x85f5,0x85f6,0x85f7,0x85f8,0x85f9,
-0xb3aa,0xb3ab,0xb3ac,0x85fa,0xb3ad,0x85fb,0x85fc,0xb3ae,
-0xb3af,0xb3b0,0xb3b1,0x85fd,0x85fe,0x8641,0x8642,0x8643,
-0xb3b2,0xb3b3,0x8644,0xb3b4,0xb3b5,0xb3b6,0xb3b7,0xb3b8,
-0x8645,0xb3b9,0x8646,0xb3ba,0xb3bb,0xb3bc,0x8647,0x8648,
-0xb3bd,0x8649,0x864a,0x864b,0xb3be,0x864c,0x864d,0x864e,
-0x864f,0x8650,0x8651,0x8652,0xb3bf,0xb3c0,0x8653,0xb3c1,
-0xb3c2,0xb3c3,0x8654,0x8655,0x8656,0x8657,0x8658,0x8659,
-0xb3c4,0xb3c5,0x865a,0x8661,0xb3c6,0x8662,0x8663,0x8664,
-0xb3c7,0x8665,0x8666,0x8667,0x8668,0x8669,0x866a,0x866b,
-0xb3c8,0x866c,0x866d,0x866e,0x866f,0xb3c9,0x8670,0x8671,
-0x8672,0x8673,0x8674,0x8675,0x8676,0x8677,0x8678,0x8679,
-0x867a,0x8681,0x8682,0x8683,0x8684,0x8685,0x8686,0x8687,
-0x8688,0x8689,0x868a,0x868b,0x868c,0x868d,0x868e,0x868f,
-0x8690,0x8691,0x8692,0x8693,0x8694,0x8695,0x8696,0x8697,
-0xb3ca,0xb3cb,0x8698,0xb3cc,0xb3cd,0x8699,0x869a,0x869b,
-0xb3ce,0x869c,0xb3cf,0xb3d0,0x869d,0x869e,0x869f,0x86a0,
-0xb3d1,0xb3d2,0x86a1,0xb3d3,0xb3d4,0xb3d5,0x86a2,0x86a3,
-0x86a4,0x86a5,0x86a6,0xb3d6,0xb3d7,0xb3d8,0x86a7,0x86a8,
-0xb3d9,0x86a9,0x86aa,0x86ab,0xb3da,0x86ac,0x86ad,0x86ae,
-0x86af,0x86b0,0x86b1,0x86b2,0xb3db,0xb3dc,0x86b3,0xb3dd,
-0xb3de,0xb3df,0x86b4,0x86b5,0x86b6,0x86b7,0x86b8,0x86b9,
-0xb3e0,0xb3e1,0x86ba,0x86bb,0xb3e2,0x86bc,0x86bd,0x86be,
-0xb3e3,0x86bf,0x86c0,0x86c1,0x86c2,0x86c3,0x86c4,0x86c5,
-0xb3e4,0xb3e5,0x86c6,0x86c7,0xb3e6,0xb3e7,0x86c8,0x86c9,
-0xb3e8,0x86ca,0x86cb,0x86cc,0xb3e9,0x86cd,0x86ce,0x86cf,
-0xb3ea,0x86d0,0x86d1,0x86d2,0x86d3,0x86d4,0x86d5,0x86d6,
-0x86d7,0x86d8,0x86d9,0x86da,0x86db,0x86dc,0x86dd,0x86de,
-0x86df,0x86e0,0x86e1,0x86e2,0x86e3,0x86e4,0x86e5,0x86e6,
-0xb3eb,0xb3ec,0x86e7,0x86e8,0xb3ed,0x86e9,0x86ea,0x86eb,
-0xb3ee,0x86ec,0xb3ef,0x86ed,0x86ee,0x86ef,0x86f0,0x86f1,
-0xb3f0,0xb3f1,0x86f2,0xb3f2,0x86f3,0xb3f3,0x86f4,0x86f5,
-0x86f6,0x86f7,0xb3f4,0xb3f5,0xb3f6,0x86f8,0x86f9,0x86fa,
-0xb3f7,0x86fb,0x86fc,0x86fd,0xb3f8,0x86fe,0x8741,0x8742,
-0x8743,0x8744,0x8745,0x8746,0x8747,0x8748,0x8749,0x874a,
-0xb3f9,0x874b,0x874c,0x874d,0x874e,0x874f,0x8750,0x8751,
-0x8752,0x8753,0x8754,0x8755,0x8756,0x8757,0x8758,0x8759,
-0x875a,0x8761,0x8762,0x8763,0x8764,0x8765,0x8766,0x8767,
-0x8768,0x8769,0x876a,0x876b,0x876c,0x876d,0x876e,0x876f,
-0x8770,0x8771,0x8772,0x8773,0xb3fa,0x8774,0x8775,0x8776,
-0xb3fb,0x8777,0x8778,0x8779,0xb3fc,0x877a,0x8781,0x8782,
-0x8783,0x8784,0x8785,0x8786,0xb3fd,0xb3fe,0x8787,0xb4a1,
-0x8788,0x8789,0x878a,0x878b,0x878c,0x878d,0x878e,0x878f,
-0xb4a2,0xb4a3,0x8790,0x8791,0xb4a4,0x8792,0x8793,0x8794,
-0xb4a5,0x8795,0x8796,0x8797,0x8798,0x8799,0x879a,0x879b,
-0x879c,0xb4a6,0x879d,0xb4a7,0x879e,0xb4a8,0x879f,0x87a0,
-0x87a1,0x87a2,0x87a3,0x87a4,0xb4a9,0xb4aa,0x87a5,0x87a6,
-0xb4ab,0x87a7,0x87a8,0xb4ac,0xb4ad,0x87a9,0x87aa,0x87ab,
-0x87ac,0x87ad,0x87ae,0x87af,0xb4ae,0xb4af,0x87b0,0xb4b0,
-0x87b1,0xb4b1,0x87b2,0x87b3,0x87b4,0x87b5,0x87b6,0x87b7,
-0xb4b2,0x87b8,0x87b9,0x87ba,0x87bb,0x87bc,0x87bd,0x87be,
-0x87bf,0x87c0,0x87c1,0x87c2,0x87c3,0x87c4,0x87c5,0x87c6,
-0x87c7,0x87c8,0x87c9,0x87ca,0xb4b3,0x87cb,0x87cc,0x87cd,
-0x87ce,0x87cf,0x87d0,0x87d1,0xb4b4,0x87d2,0x87d3,0x87d4,
-0x87d5,0x87d6,0x87d7,0x87d8,0x87d9,0x87da,0x87db,0x87dc,
-0x87dd,0x87de,0x87df,0x87e0,0x87e1,0x87e2,0x87e3,0x87e4,
-0x87e5,0x87e6,0x87e7,0x87e8,0x87e9,0x87ea,0x87eb,0x87ec,
-0xb4b5,0x87ed,0x87ee,0x87ef,0xb4b6,0x87f0,0x87f1,0x87f2,
-0xb4b7,0x87f3,0x87f4,0x87f5,0x87f6,0x87f7,0x87f8,0x87f9,
-0xb4b8,0xb4b9,0x87fa,0x87fb,0x87fc,0x87fd,0x87fe,0x8841,
-0x8842,0x8843,0x8844,0x8845,0xb4ba,0xb4bb,0x8846,0x8847,
-0x8848,0x8849,0x884a,0x884b,0xb4bc,0x884c,0x884d,0x884e,
-0x884f,0x8850,0x8851,0x8852,0xb4bd,0xb4be,0x8853,0x8854,
-0x8855,0xb4bf,0x8856,0x8857,0x8858,0x8859,0x885a,0x8861,
-0xb4c0,0xb4c1,0x8862,0x8863,0xb4c2,0x8864,0x8865,0x8866,
-0xb4c3,0xb4c4,0xb4c5,0x8867,0x8868,0x8869,0x886a,0x886b,
-0xb4c6,0xb4c7,0x886c,0xb4c8,0x886d,0xb4c9,0xb4ca,0x886e,
-0x886f,0x8870,0xb4cb,0x8871,0xb4cc,0x8872,0x8873,0x8874,
-0xb4cd,0x8875,0x8876,0x8877,0xb4ce,0x8878,0x8879,0x887a,
-0x8881,0x8882,0x8883,0x8884,0x8885,0x8886,0x8887,0x8888,
-0x8889,0x888a,0x888b,0x888c,0x888d,0x888e,0x888f,0x8890,
-0xb4cf,0xb4d0,0x8891,0x8892,0xb4d1,0x8893,0x8894,0x8895,
-0xb4d2,0x8896,0xb4d3,0x8897,0x8898,0x8899,0x889a,0x889b,
-0xb4d4,0xb4d5,0x889c,0xb4d6,0x889d,0xb4d7,0x889e,0x889f,
-0x88a0,0x88a1,0xb4d8,0x88a2,0xb4d9,0xb4da,0xb4db,0x88a3,
-0xb4dc,0x88a4,0x88a5,0xb4dd,0xb4de,0xb4df,0xb4e0,0xb4e1,
-0x88a6,0x88a7,0x88a8,0xb4e2,0xb4e3,0xb4e4,0x88a9,0xb4e5,
-0xb4e6,0xb4e7,0xb4e8,0xb4e9,0x88aa,0x88ab,0x88ac,0xb4ea,
-0xb4eb,0xb4ec,0x88ad,0x88ae,0xb4ed,0x88af,0x88b0,0x88b1,
-0xb4ee,0x88b2,0x88b3,0x88b4,0x88b5,0x88b6,0x88b7,0x88b8,
-0xb4ef,0xb4f0,0x88b9,0xb4f1,0xb4f2,0xb4f3,0x88ba,0x88bb,
-0x88bc,0x88bd,0x88be,0x88bf,0xb4f4,0x88c0,0x88c1,0x88c2,
-0x88c3,0x88c4,0x88c5,0x88c6,0x88c7,0x88c8,0x88c9,0x88ca,
-0x88cb,0x88cc,0x88cd,0x88ce,0x88cf,0x88d0,0x88d1,0x88d2,
-0x88d3,0x88d4,0x88d5,0x88d6,0x88d7,0x88d8,0x88d9,0x88da,
-0x88db,0x88dc,0x88dd,0x88de,0x88df,0x88e0,0x88e1,0x88e2,
-0x88e3,0x88e4,0x88e5,0x88e6,0x88e7,0x88e8,0x88e9,0x88ea,
-0x88eb,0x88ec,0x88ed,0x88ee,0x88ef,0x88f0,0x88f1,0x88f2,
-0x88f3,0x88f4,0x88f5,0x88f6,0xb4f5,0xb4f6,0xb4f7,0x88f7,
-0xb4f8,0x88f8,0x88f9,0xb4f9,0xb4fa,0x88fa,0xb4fb,0xb4fc,
-0x88fb,0x88fc,0x88fd,0x88fe,0xb4fd,0xb4fe,0x8941,0xb5a1,
-0x8942,0xb5a2,0x8943,0xb5a3,0x8944,0x8945,0xb5a4,0x8946,
-0xb5a5,0xb5a6,0x8947,0x8948,0xb5a7,0x8949,0x894a,0x894b,
-0xb5a8,0x894c,0x894d,0x894e,0x894f,0x8950,0x8951,0x8952,
-0xb5a9,0xb5aa,0x8953,0xb5ab,0xb5ac,0xb5ad,0x8954,0x8955,
-0x8956,0x8957,0x8958,0x8959,0xb5ae,0x895a,0x8961,0x8962,
-0xb5af,0x8963,0x8964,0x8965,0xb5b0,0x8966,0x8967,0x8968,
-0x8969,0x896a,0x896b,0x896c,0x896d,0x896e,0x896f,0x8970,
-0xb5b1,0xb5b2,0x8971,0x8972,0x8973,0x8974,0x8975,0x8976,
-0xb5b3,0x8977,0x8978,0x8979,0xb5b4,0x897a,0x8981,0x8982,
-0x8983,0x8984,0x8985,0x8986,0x8987,0x8988,0x8989,0x898a,
-0x898b,0x898c,0x898d,0x898e,0x898f,0x8990,0x8991,0x8992,
-0x8993,0x8994,0x8995,0x8996,0xb5b5,0xb5b6,0x8997,0x8998,
-0xb5b7,0x8999,0x899a,0xb5b8,0xb5b9,0x899b,0xb5ba,0x899c,
-0xb5bb,0x899d,0x899e,0x899f,0xb5bc,0xb5bd,0x89a0,0xb5be,
-0x89a1,0xb5bf,0x89a2,0xb5c0,0x89a3,0xb5c1,0x89a4,0x89a5,
-0xb5c2,0x89a6,0x89a7,0x89a8,0xb5c3,0x89a9,0x89aa,0x89ab,
-0xb5c4,0x89ac,0x89ad,0x89ae,0x89af,0x89b0,0x89b1,0x89b2,
-0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,0x89b8,0x89b9,0x89ba,
-0x89bb,0x89bc,0x89bd,0x89be,0xb5c5,0x89bf,0x89c0,0x89c1,
-0x89c2,0x89c3,0x89c4,0x89c5,0x89c6,0x89c7,0x89c8,0x89c9,
-0x89ca,0x89cb,0x89cc,0x89cd,0x89ce,0x89cf,0x89d0,0x89d1,
-0xb5c6,0x89d2,0x89d3,0x89d4,0x89d5,0x89d6,0x89d7,0x89d8,
-0xb5c7,0x89d9,0x89da,0x89db,0xb5c8,0x89dc,0x89dd,0x89de,
-0xb5c9,0x89df,0x89e0,0x89e1,0x89e2,0x89e3,0x89e4,0x89e5,
-0xb5ca,0xb5cb,0x89e6,0xb5cc,0x89e7,0x89e8,0x89e9,0x89ea,
-0x89eb,0x89ec,0x89ed,0x89ee,0xb5cd,0x89ef,0x89f0,0x89f1,
-0x89f2,0x89f3,0x89f4,0x89f5,0x89f6,0x89f7,0x89f8,0x89f9,
-0x89fa,0x89fb,0x89fc,0x89fd,0x89fe,0x8a41,0x8a42,0x8a43,
-0x8a44,0x8a45,0x8a46,0x8a47,0x8a48,0x8a49,0x8a4a,0x8a4b,
-0xb5ce,0xb5cf,0x8a4c,0x8a4d,0xb5d0,0x8a4e,0x8a4f,0x8a50,
-0xb5d1,0x8a51,0x8a52,0x8a53,0x8a54,0x8a55,0x8a56,0x8a57,
-0xb5d2,0xb5d3,0x8a58,0xb5d4,0x8a59,0xb5d5,0x8a5a,0x8a61,
-0x8a62,0x8a63,0x8a64,0x8a65,0xb5d6,0x8a66,0x8a67,0x8a68,
-0x8a69,0x8a6a,0x8a6b,0x8a6c,0x8a6d,0x8a6e,0x8a6f,0x8a70,
-0x8a71,0x8a72,0x8a73,0x8a74,0x8a75,0x8a76,0x8a77,0x8a78,
-0xb5d7,0x8a79,0x8a7a,0x8a81,0x8a82,0x8a83,0x8a84,0x8a85,
-0xb5d8,0x8a86,0x8a87,0x8a88,0x8a89,0x8a8a,0x8a8b,0x8a8c,
-0x8a8d,0x8a8e,0x8a8f,0x8a90,0x8a91,0x8a92,0x8a93,0x8a94,
-0x8a95,0x8a96,0x8a97,0x8a98,0x8a99,0xb5d9,0x8a9a,0x8a9b,
-0x8a9c,0x8a9d,0x8a9e,0x8a9f,0xb5da,0x8aa0,0x8aa1,0x8aa2,
-0xb5db,0x8aa3,0x8aa4,0x8aa5,0xb5dc,0x8aa6,0x8aa7,0x8aa8,
-0x8aa9,0x8aaa,0x8aab,0x8aac,0x8aad,0xb5dd,0x8aae,0xb5de,
-0x8aaf,0xb5df,0x8ab0,0x8ab1,0x8ab2,0x8ab3,0x8ab4,0x8ab5,
-0xb5e0,0x8ab6,0x8ab7,0x8ab8,0xb5e1,0x8ab9,0x8aba,0x8abb,
-0xb5e2,0x8abc,0x8abd,0x8abe,0x8abf,0x8ac0,0x8ac1,0x8ac2,
-0xb5e3,0x8ac3,0x8ac4,0x8ac5,0x8ac6,0xb5e4,0x8ac7,0x8ac8,
-0x8ac9,0x8aca,0x8acb,0x8acc,0xb5e5,0xb5e6,0x8acd,0x8ace,
-0xb5e7,0x8acf,0x8ad0,0xb5e8,0xb5e9,0x8ad1,0xb5ea,0x8ad2,
-0x8ad3,0x8ad4,0x8ad5,0x8ad6,0xb5eb,0xb5ec,0x8ad7,0xb5ed,
-0x8ad8,0xb5ee,0x8ad9,0x8ada,0x8adb,0x8adc,0x8add,0x8ade,
-0xb5ef,0x8adf,0x8ae0,0x8ae1,0x8ae2,0x8ae3,0x8ae4,0x8ae5,
-0x8ae6,0x8ae7,0x8ae8,0x8ae9,0x8aea,0x8aeb,0x8aec,0x8aed,
-0x8aee,0x8aef,0x8af0,0x8af1,0x8af2,0x8af3,0x8af4,0x8af5,
-0x8af6,0x8af7,0x8af8,0x8af9,0xb5f0,0xb5f1,0x8afa,0x8afb,
-0xb5f2,0x8afc,0x8afd,0xb5f3,0xb5f4,0x8afe,0x8b41,0x8b42,
-0x8b43,0x8b44,0x8b45,0x8b46,0xb5f5,0xb5f6,0x8b47,0xb5f7,
-0xb5f8,0xb5f9,0xb5fa,0x8b48,0x8b49,0x8b4a,0x8b4b,0x8b4c,
-0xb5fb,0xb5fc,0x8b4d,0x8b4e,0xb5fd,0x8b4f,0x8b50,0x8b51,
-0xb5fe,0x8b52,0x8b53,0x8b54,0x8b55,0x8b56,0x8b57,0x8b58,
-0xb6a1,0xb6a2,0x8b59,0xb6a3,0xb6a4,0xb6a5,0x8b5a,0x8b61,
-0x8b62,0x8b63,0x8b64,0xb6a6,0xb6a7,0xb6a8,0x8b65,0x8b66,
-0xb6a9,0x8b67,0x8b68,0x8b69,0xb6aa,0x8b6a,0x8b6b,0x8b6c,
-0x8b6d,0x8b6e,0x8b6f,0x8b70,0xb6ab,0xb6ac,0x8b71,0xb6ad,
-0xb6ae,0xb6af,0x8b72,0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,
-0x8b78,0x8b79,0x8b7a,0x8b81,0x8b82,0x8b83,0x8b84,0x8b85,
-0x8b86,0x8b87,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0x8b8d,
-0x8b8e,0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,0x8b94,0x8b95,
-0x8b96,0x8b97,0x8b98,0x8b99,0x8b9a,0x8b9b,0x8b9c,0x8b9d,
-0x8b9e,0x8b9f,0x8ba0,0x8ba1,0x8ba2,0x8ba3,0x8ba4,0x8ba5,
-0x8ba6,0x8ba7,0x8ba8,0x8ba9,0x8baa,0x8bab,0x8bac,0x8bad,
-0x8bae,0x8baf,0x8bb0,0x8bb1,0x8bb2,0x8bb3,0x8bb4,0x8bb5,
-0xb6b0,0xb6b1,0x8bb6,0x8bb7,0xb6b2,0x8bb8,0x8bb9,0x8bba,
-0xb6b3,0x8bbb,0xb6b4,0xb6b5,0x8bbc,0x8bbd,0x8bbe,0x8bbf,
-0xb6b6,0xb6b7,0x8bc0,0xb6b8,0xb6b9,0xb6ba,0x8bc1,0x8bc2,
-0x8bc3,0x8bc4,0x8bc5,0xb6bb,0xb6bc,0xb6bd,0x8bc6,0x8bc7,
-0xb6be,0x8bc8,0x8bc9,0x8bca,0xb6bf,0x8bcb,0x8bcc,0x8bcd,
-0x8bce,0x8bcf,0x8bd0,0x8bd1,0xb6c0,0xb6c1,0x8bd2,0xb6c2,
-0xb6c3,0xb6c4,0x8bd3,0x8bd4,0x8bd5,0x8bd6,0x8bd7,0x8bd8,
-0xb6c5,0x8bd9,0x8bda,0x8bdb,0x8bdc,0x8bdd,0x8bde,0x8bdf,
-0x8be0,0x8be1,0x8be2,0x8be3,0x8be4,0x8be5,0x8be6,0x8be7,
-0x8be8,0x8be9,0x8bea,0x8beb,0xb6c6,0x8bec,0x8bed,0x8bee,
-0x8bef,0x8bf0,0x8bf1,0x8bf2,0x8bf3,0x8bf4,0x8bf5,0x8bf6,
-0x8bf7,0x8bf8,0x8bf9,0x8bfa,0x8bfb,0x8bfc,0x8bfd,0x8bfe,
-0x8c41,0x8c42,0x8c43,0x8c44,0x8c45,0x8c46,0x8c47,0x8c48,
-0x8c49,0x8c4a,0x8c4b,0x8c4c,0x8c4d,0x8c4e,0x8c4f,0x8c50,
-0xb6c7,0xb6c8,0x8c51,0x8c52,0xb6c9,0x8c53,0x8c54,0x8c55,
-0xb6ca,0x8c56,0x8c57,0x8c58,0x8c59,0x8c5a,0x8c61,0x8c62,
-0x8c63,0x8c64,0x8c65,0x8c66,0x8c67,0xb6cb,0x8c68,0x8c69,
-0x8c6a,0x8c6b,0x8c6c,0x8c6d,0xb6cc,0x8c6e,0x8c6f,0x8c70,
-0x8c71,0x8c72,0x8c73,0x8c74,0xb6cd,0x8c75,0x8c76,0x8c77,
-0x8c78,0x8c79,0x8c7a,0x8c81,0x8c82,0x8c83,0x8c84,0x8c85,
-0x8c86,0x8c87,0x8c88,0x8c89,0x8c8a,0x8c8b,0x8c8c,0x8c8d,
-0xb6ce,0x8c8e,0x8c8f,0x8c90,0x8c91,0x8c92,0x8c93,0x8c94,
-0x8c95,0x8c96,0x8c97,0x8c98,0x8c99,0x8c9a,0x8c9b,0x8c9c,
-0x8c9d,0x8c9e,0x8c9f,0x8ca0,0x8ca1,0x8ca2,0x8ca3,0x8ca4,
-0x8ca5,0x8ca6,0x8ca7,0x8ca8,0xb6cf,0x8ca9,0x8caa,0x8cab,
-0xb6d0,0x8cac,0x8cad,0x8cae,0x8caf,0x8cb0,0x8cb1,0x8cb2,
-0x8cb3,0x8cb4,0x8cb5,0x8cb6,0x8cb7,0x8cb8,0x8cb9,0x8cba,
-0x8cbb,0x8cbc,0x8cbd,0x8cbe,0x8cbf,0x8cc0,0x8cc1,0x8cc2,
-0x8cc3,0x8cc4,0x8cc5,0x8cc6,0x8cc7,0x8cc8,0x8cc9,0x8cca,
-0x8ccb,0x8ccc,0x8ccd,0x8cce,0x8ccf,0x8cd0,0x8cd1,0x8cd2,
-0x8cd3,0x8cd4,0x8cd5,0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,
-0x8cdb,0x8cdc,0x8cdd,0x8cde,0xb6d1,0xb6d2,0x8cdf,0x8ce0,
-0xb6d3,0x8ce1,0x8ce2,0x8ce3,0xb6d4,0x8ce4,0x8ce5,0x8ce6,
-0x8ce7,0x8ce8,0x8ce9,0xb6d5,0xb6d6,0x8cea,0x8ceb,0x8cec,
-0x8ced,0xb6d7,0x8cee,0x8cef,0x8cf0,0x8cf1,0x8cf2,0x8cf3,
-0x8cf4,0x8cf5,0x8cf6,0x8cf7,0x8cf8,0x8cf9,0x8cfa,0x8cfb,
-0x8cfc,0x8cfd,0x8cfe,0x8d41,0x8d42,0x8d43,0x8d44,0x8d45,
-0x8d46,0x8d47,0x8d48,0x8d49,0x8d4a,0x8d4b,0x8d4c,0x8d4d,
-0x8d4e,0x8d4f,0x8d50,0x8d51,0xb6d8,0x8d52,0x8d53,0x8d54,
-0x8d55,0x8d56,0x8d57,0x8d58,0x8d59,0x8d5a,0x8d61,0x8d62,
-0x8d63,0x8d64,0x8d65,0x8d66,0x8d67,0x8d68,0x8d69,0x8d6a,
-0x8d6b,0x8d6c,0x8d6d,0x8d6e,0x8d6f,0x8d70,0x8d71,0x8d72,
-0xb6d9,0x8d73,0x8d74,0x8d75,0xb6da,0x8d76,0x8d77,0x8d78,
-0xb6db,0x8d79,0x8d7a,0x8d81,0x8d82,0x8d83,0x8d84,0x8d85,
-0xb6dc,0xb6dd,0x8d86,0x8d87,0x8d88,0xb6de,0x8d89,0x8d8a,
-0x8d8b,0x8d8c,0x8d8d,0x8d8e,0x8d8f,0x8d90,0x8d91,0x8d92,
-0x8d93,0x8d94,0x8d95,0x8d96,0x8d97,0x8d98,0x8d99,0x8d9a,
-0x8d9b,0x8d9c,0x8d9d,0x8d9e,0x8d9f,0x8da0,0x8da1,0x8da2,
-0x8da3,0x8da4,0x8da5,0x8da6,0x8da7,0x8da8,0x8da9,0x8daa,
-0xb6df,0xb6e0,0x8dab,0x8dac,0xb6e1,0x8dad,0x8dae,0xb6e2,
-0xb6e3,0x8daf,0x8db0,0x8db1,0x8db2,0x8db3,0x8db4,0x8db5,
-0xb6e4,0xb6e5,0x8db6,0xb6e6,0x8db7,0x8db8,0x8db9,0x8dba,
-0x8dbb,0x8dbc,0x8dbd,0x8dbe,0xb6e7,0x8dbf,0x8dc0,0x8dc1,
-0xb6e8,0x8dc2,0x8dc3,0x8dc4,0xb6e9,0x8dc5,0x8dc6,0x8dc7,
-0x8dc8,0x8dc9,0x8dca,0x8dcb,0xb6ea,0xb6eb,0x8dcc,0x8dcd,
-0x8dce,0x8dcf,0x8dd0,0x8dd1,0x8dd2,0x8dd3,0x8dd4,0x8dd5,
-0xb6ec,0x8dd6,0x8dd7,0x8dd8,0xb6ed,0x8dd9,0x8dda,0x8ddb,
-0xb6ee,0x8ddc,0x8ddd,0x8dde,0x8ddf,0x8de0,0x8de1,0x8de2,
-0xb6ef,0xb6f0,0x8de3,0xb6f1,0x8de4,0xb6f2,0x8de5,0x8de6,
-0x8de7,0x8de8,0x8de9,0x8dea,0xb6f3,0xb6f4,0x8deb,0x8dec,
-0xb6f5,0x8ded,0x8dee,0x8def,0xb6f6,0x8df0,0x8df1,0x8df2,
-0x8df3,0x8df4,0x8df5,0x8df6,0xb6f7,0xb6f8,0x8df7,0xb6f9,
-0xb6fa,0xb6fb,0xb6fc,0x8df8,0x8df9,0x8dfa,0xb6fd,0xb6fe,
-0xb7a1,0xb7a2,0x8dfb,0x8dfc,0xb7a3,0x8dfd,0x8dfe,0x8e41,
-0xb7a4,0x8e42,0x8e43,0x8e44,0x8e45,0x8e46,0x8e47,0x8e48,
-0xb7a5,0xb7a6,0x8e49,0xb7a7,0xb7a8,0xb7a9,0x8e4a,0x8e4b,
-0x8e4c,0x8e4d,0x8e4e,0x8e4f,0xb7aa,0xb7ab,0x8e50,0x8e51,
-0xb7ac,0x8e52,0x8e53,0x8e54,0x8e55,0x8e56,0x8e57,0x8e58,
-0x8e59,0x8e5a,0x8e61,0x8e62,0x8e63,0x8e64,0x8e65,0xb7ad,
-0x8e66,0xb7ae,0x8e67,0x8e68,0x8e69,0x8e6a,0x8e6b,0x8e6c,
-0x8e6d,0x8e6e,0x8e6f,0x8e70,0x8e71,0x8e72,0x8e73,0x8e74,
-0x8e75,0x8e76,0x8e77,0x8e78,0x8e79,0x8e7a,0x8e81,0x8e82,
-0x8e83,0x8e84,0x8e85,0x8e86,0x8e87,0x8e88,0x8e89,0x8e8a,
-0x8e8b,0x8e8c,0x8e8d,0x8e8e,0xb7af,0xb7b0,0x8e8f,0x8e90,
-0xb7b1,0x8e91,0x8e92,0x8e93,0xb7b2,0x8e94,0x8e95,0x8e96,
-0x8e97,0x8e98,0x8e99,0x8e9a,0xb7b3,0xb7b4,0x8e9b,0xb7b5,
-0xb7b6,0xb7b7,0x8e9c,0x8e9d,0x8e9e,0x8e9f,0x8ea0,0xb7b8,
-0xb7b9,0xb7ba,0x8ea1,0x8ea2,0xb7bb,0x8ea3,0x8ea4,0x8ea5,
-0xb7bc,0x8ea6,0x8ea7,0x8ea8,0x8ea9,0x8eaa,0x8eab,0x8eac,
-0xb7bd,0xb7be,0x8ead,0xb7bf,0x8eae,0xb7c0,0x8eaf,0x8eb0,
-0x8eb1,0x8eb2,0x8eb3,0x8eb4,0xb7c1,0xb7c2,0x8eb5,0x8eb6,
-0xb7c3,0x8eb7,0x8eb8,0x8eb9,0xb7c4,0x8eba,0x8ebb,0x8ebc,
-0x8ebd,0x8ebe,0x8ebf,0x8ec0,0xb7c5,0xb7c6,0x8ec1,0xb7c7,
-0xb7c8,0xb7c9,0x8ec2,0x8ec3,0x8ec4,0x8ec5,0x8ec6,0x8ec7,
-0xb7ca,0x8ec8,0x8ec9,0x8eca,0xb7cb,0x8ecb,0x8ecc,0x8ecd,
-0x8ece,0x8ecf,0x8ed0,0x8ed1,0x8ed2,0x8ed3,0x8ed4,0x8ed5,
-0x8ed6,0xb7cc,0x8ed7,0xb7cd,0x8ed8,0x8ed9,0x8eda,0x8edb,
-0x8edc,0x8edd,0x8ede,0x8edf,0xb7ce,0xb7cf,0x8ee0,0x8ee1,
-0xb7d0,0x8ee2,0x8ee3,0x8ee4,0xb7d1,0x8ee5,0x8ee6,0x8ee7,
-0x8ee8,0x8ee9,0x8eea,0x8eeb,0xb7d2,0xb7d3,0x8eec,0xb7d4,
-0x8eed,0xb7d5,0x8eee,0x8eef,0x8ef0,0x8ef1,0x8ef2,0x8ef3,
-0xb7d6,0x8ef4,0x8ef5,0x8ef6,0xb7d7,0x8ef7,0x8ef8,0x8ef9,
-0x8efa,0x8efb,0x8efc,0x8efd,0x8efe,0x8f41,0x8f42,0x8f43,
-0x8f44,0x8f45,0x8f46,0x8f47,0x8f48,0xb7d8,0x8f49,0x8f4a,
-0x8f4b,0x8f4c,0x8f4d,0x8f4e,0x8f4f,0x8f50,0x8f51,0x8f52,
-0x8f53,0x8f54,0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,
-0x8f61,0x8f62,0x8f63,0x8f64,0x8f65,0x8f66,0x8f67,0x8f68,
-0xb7d9,0x8f69,0x8f6a,0x8f6b,0x8f6c,0x8f6d,0x8f6e,0x8f6f,
-0xb7da,0x8f70,0x8f71,0x8f72,0xb7db,0x8f73,0x8f74,0x8f75,
-0xb7dc,0x8f76,0x8f77,0x8f78,0x8f79,0x8f7a,0x8f81,0x8f82,
-0xb7dd,0xb7de,0x8f83,0xb7df,0x8f84,0xb7e0,0x8f85,0x8f86,
-0x8f87,0x8f88,0x8f89,0x8f8a,0xb7e1,0x8f8b,0x8f8c,0x8f8d,
-0xb7e2,0x8f8e,0x8f8f,0x8f90,0xb7e3,0x8f91,0x8f92,0x8f93,
-0x8f94,0x8f95,0x8f96,0x8f97,0x8f98,0xb7e4,0x8f99,0xb7e5,
-0x8f9a,0xb7e6,0x8f9b,0x8f9c,0x8f9d,0x8f9e,0x8f9f,0x8fa0,
-0xb7e7,0xb7e8,0x8fa1,0x8fa2,0xb7e9,0x8fa3,0x8fa4,0x8fa5,
-0xb7ea,0x8fa6,0x8fa7,0x8fa8,0x8fa9,0x8faa,0x8fab,0x8fac,
-0xb7eb,0xb7ec,0x8fad,0xb7ed,0x8fae,0xb7ee,0x8faf,0x8fb0,
-0x8fb1,0x8fb2,0x8fb3,0x8fb4,0xb7ef,0x8fb5,0x8fb6,0x8fb7,
-0x8fb8,0x8fb9,0x8fba,0x8fbb,0x8fbc,0x8fbd,0x8fbe,0x8fbf,
-0x8fc0,0x8fc1,0x8fc2,0x8fc3,0x8fc4,0x8fc5,0x8fc6,0x8fc7,
-0xb7f0,0x8fc8,0x8fc9,0x8fca,0x8fcb,0x8fcc,0x8fcd,0x8fce,
-0xb7f1,0x8fcf,0x8fd0,0x8fd1,0x8fd2,0x8fd3,0x8fd4,0x8fd5,
-0x8fd6,0x8fd7,0x8fd8,0x8fd9,0x8fda,0x8fdb,0x8fdc,0x8fdd,
-0x8fde,0x8fdf,0x8fe0,0x8fe1,0x8fe2,0x8fe3,0x8fe4,0x8fe5,
-0x8fe6,0x8fe7,0x8fe8,0x8fe9,0xb7f2,0xb7f3,0x8fea,0x8feb,
-0xb7f4,0x8fec,0x8fed,0x8fee,0xb7f5,0x8fef,0x8ff0,0x8ff1,
-0x8ff2,0x8ff3,0x8ff4,0x8ff5,0xb7f6,0x8ff6,0x8ff7,0xb7f7,
-0x8ff8,0xb7f8,0x8ff9,0x8ffa,0x8ffb,0x8ffc,0x8ffd,0x8ffe,
-0xb7f9,0xb7fa,0x9041,0x9042,0xb7fb,0x9043,0x9044,0x9045,
-0xb7fc,0x9046,0x9047,0x9048,0x9049,0x904a,0x904b,0x904c,
-0xb7fd,0xb7fe,0x904d,0xb8a1,0x904e,0xb8a2,0x904f,0x9050,
-0x9051,0x9052,0x9053,0x9054,0xb8a3,0xb8a4,0x9055,0x9056,
-0xb8a5,0x9057,0x9058,0x9059,0xb8a6,0x905a,0x9061,0x9062,
-0x9063,0x9064,0x9065,0x9066,0xb8a7,0xb8a8,0x9067,0xb8a9,
-0x9068,0xb8aa,0xb8ab,0x9069,0x906a,0xb8ac,0xb8ad,0x906b,
-0x906c,0x906d,0x906e,0x906f,0x9070,0x9071,0x9072,0x9073,
-0x9074,0x9075,0x9076,0x9077,0x9078,0x9079,0x907a,0x9081,
-0x9082,0x9083,0x9084,0x9085,0x9086,0x9087,0x9088,0x9089,
-0x908a,0x908b,0x908c,0x908d,0xb8ae,0xb8af,0x908e,0x908f,
-0xb8b0,0x9090,0x9091,0x9092,0xb8b1,0x9093,0x9094,0x9095,
-0x9096,0x9097,0x9098,0x9099,0xb8b2,0xb8b3,0x909a,0xb8b4,
-0x909b,0xb8b5,0x909c,0x909d,0x909e,0x909f,0x90a0,0x90a1,
-0xb8b6,0xb8b7,0x90a2,0x90a3,0xb8b8,0x90a4,0xb8b9,0xb8ba,
-0xb8bb,0xb8bc,0xb8bd,0x90a5,0x90a6,0x90a7,0x90a8,0x90a9,
-0xb8be,0xb8bf,0x90aa,0xb8c0,0x90ab,0xb8c1,0xb8c2,0x90ac,
-0x90ad,0xb8c3,0x90ae,0xb8c4,0xb8c5,0xb8c6,0x90af,0x90b0,
-0xb8c7,0x90b1,0x90b2,0x90b3,0xb8c8,0x90b4,0x90b5,0x90b6,
-0x90b7,0x90b8,0x90b9,0x90ba,0xb8c9,0xb8ca,0x90bb,0xb8cb,
-0xb8cc,0xb8cd,0xb8ce,0x90bc,0x90bd,0x90be,0x90bf,0x90c0,
-0xb8cf,0xb8d0,0x90c1,0x90c2,0x90c3,0x90c4,0x90c5,0x90c6,
-0xb8d1,0x90c7,0x90c8,0x90c9,0x90ca,0x90cb,0x90cc,0x90cd,
-0x90ce,0x90cf,0x90d0,0x90d1,0x90d2,0xb8d2,0x90d3,0x90d4,
-0x90d5,0x90d6,0x90d7,0x90d8,0x90d9,0x90da,0x90db,0x90dc,
-0x90dd,0x90de,0x90df,0x90e0,0x90e1,0x90e2,0x90e3,0x90e4,
-0x90e5,0x90e6,0x90e7,0x90e8,0x90e9,0x90ea,0x90eb,0x90ec,
-0x90ed,0x90ee,0x90ef,0x90f0,0x90f1,0x90f2,0x90f3,0x90f4,
-0xb8d3,0xb8d4,0x90f5,0x90f6,0xb8d5,0x90f7,0x90f8,0x90f9,
-0xb8d6,0x90fa,0xb8d7,0x90fb,0x90fc,0x90fd,0x90fe,0x9141,
-0xb8d8,0xb8d9,0x9142,0xb8da,0x9143,0xb8db,0xb8dc,0x9144,
-0x9145,0x9146,0x9147,0xb8dd,0xb8de,0xb8df,0x9148,0x9149,
-0xb8e0,0x914a,0x914b,0x914c,0xb8e1,0x914d,0x914e,0x914f,
-0x9150,0x9151,0x9152,0x9153,0xb8e2,0xb8e3,0x9154,0xb8e4,
-0xb8e5,0xb8e6,0x9155,0x9156,0x9157,0x9158,0x9159,0x915a,
-0xb8e7,0xb8e8,0x9161,0x9162,0xb8e9,0x9163,0x9164,0x9165,
-0xb8ea,0x9166,0x9167,0x9168,0x9169,0x916a,0x916b,0x916c,
-0x916d,0x916e,0x916f,0xb8eb,0xb8ec,0xb8ed,0x9170,0xb8ee,
-0x9171,0x9172,0x9173,0x9174,0xb8ef,0x9175,0x9176,0x9177,
-0x9178,0x9179,0x917a,0x9181,0x9182,0x9183,0x9184,0x9185,
-0x9186,0x9187,0x9188,0x9189,0x918a,0x918b,0x918c,0x918d,
-0x918e,0x918f,0x9190,0x9191,0x9192,0x9193,0x9194,0x9195,
-0xb8f0,0xb8f1,0x9196,0xb8f2,0xb8f3,0x9197,0x9198,0x9199,
-0xb8f4,0x919a,0xb8f5,0x919b,0x919c,0x919d,0x919e,0x919f,
-0xb8f6,0xb8f7,0x91a0,0xb8f8,0x91a1,0xb8f9,0x91a2,0x91a3,
-0x91a4,0x91a5,0x91a6,0x91a7,0xb8fa,0x91a8,0x91a9,0x91aa,
-0xb8fb,0x91ab,0x91ac,0x91ad,0x91ae,0x91af,0x91b0,0x91b1,
-0x91b2,0x91b3,0x91b4,0x91b5,0x91b6,0x91b7,0x91b8,0x91b9,
-0xb8fc,0xb8fd,0x91ba,0x91bb,0x91bc,0x91bd,0x91be,0x91bf,
-0x91c0,0x91c1,0x91c2,0x91c3,0x91c4,0x91c5,0x91c6,0x91c7,
-0x91c8,0x91c9,0x91ca,0x91cb,0x91cc,0x91cd,0x91ce,0x91cf,
-0x91d0,0x91d1,0x91d2,0x91d3,0x91d4,0x91d5,0x91d6,0x91d7,
-0x91d8,0x91d9,0x91da,0x91db,0xb8fe,0x91dc,0x91dd,0x91de,
-0xb9a1,0x91df,0x91e0,0x91e1,0xb9a2,0x91e2,0x91e3,0x91e4,
-0x91e5,0x91e6,0x91e7,0x91e8,0x91e9,0xb9a3,0x91ea,0xb9a4,
-0x91eb,0xb9a5,0x91ec,0x91ed,0x91ee,0x91ef,0x91f0,0x91f1,
-0xb9a6,0x91f2,0x91f3,0x91f4,0xb9a7,0x91f5,0x91f6,0x91f7,
-0xb9a8,0x91f8,0x91f9,0x91fa,0x91fb,0x91fc,0x91fd,0x91fe,
-0x9241,0xb9a9,0x9242,0xb9aa,0x9243,0x9244,0x9245,0x9246,
-0x9247,0x9248,0x9249,0x924a,0xb9ab,0xb9ac,0xb9ad,0x924b,
-0xb9ae,0x924c,0x924d,0xb9af,0xb9b0,0xb9b1,0xb9b2,0x924e,
-0x924f,0x9250,0x9251,0x9252,0xb9b3,0xb9b4,0x9253,0xb9b5,
-0x9254,0xb9b6,0x9255,0x9256,0x9257,0xb9b7,0x9258,0xb9b8,
-0xb9b9,0x9259,0x925a,0x9261,0xb9ba,0x9262,0x9263,0x9264,
-0xb9bb,0x9265,0x9266,0x9267,0x9268,0x9269,0x926a,0x926b,
-0x926c,0xb9bc,0x926d,0xb9bd,0x926e,0x926f,0x9270,0x9271,
-0x9272,0x9273,0x9274,0x9275,0xb9be,0x9276,0x9277,0x9278,
-0x9279,0x927a,0x9281,0x9282,0x9283,0x9284,0x9285,0x9286,
-0x9287,0x9288,0x9289,0x928a,0x928b,0x928c,0x928d,0x928e,
-0x928f,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296,
-0xb9bf,0x9297,0x9298,0x9299,0xb9c0,0x929a,0x929b,0x929c,
-0xb9c1,0x929d,0x929e,0x929f,0x92a0,0x92a1,0x92a2,0x92a3,
-0x92a4,0x92a5,0x92a6,0x92a7,0x92a8,0x92a9,0x92aa,0x92ab,
-0x92ac,0x92ad,0x92ae,0x92af,0xb9c2,0x92b0,0x92b1,0x92b2,
-0xb9c3,0x92b3,0x92b4,0x92b5,0xb9c4,0x92b6,0x92b7,0x92b8,
-0x92b9,0x92ba,0x92bb,0x92bc,0xb9c5,0x92bd,0x92be,0xb9c6,
-0x92bf,0x92c0,0x92c1,0x92c2,0x92c3,0x92c4,0x92c5,0x92c6,
-0xb9c7,0x92c7,0x92c8,0x92c9,0xb9c8,0x92ca,0x92cb,0x92cc,
-0xb9c9,0x92cd,0x92ce,0x92cf,0x92d0,0x92d1,0x92d2,0x92d3,
-0xb9ca,0x92d4,0x92d5,0xb9cb,0x92d6,0x92d7,0x92d8,0x92d9,
-0x92da,0x92db,0x92dc,0x92dd,0x92de,0x92df,0x92e0,0x92e1,
-0x92e2,0x92e3,0x92e4,0x92e5,0x92e6,0x92e7,0x92e8,0x92e9,
-0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,0x92f1,
-0x92f2,0x92f3,0x92f4,0x92f5,0x92f6,0x92f7,0x92f8,0x92f9,
-0xb9cc,0xb9cd,0x92fa,0x92fb,0xb9ce,0x92fc,0x92fd,0xb9cf,
-0xb9d0,0x92fe,0xb9d1,0x9341,0x9342,0x9343,0x9344,0x9345,
-0xb9d2,0xb9d3,0x9346,0xb9d4,0xb9d5,0xb9d6,0x9347,0xb9d7,
-0x9348,0xb9d8,0x9349,0x934a,0xb9d9,0xb9da,0xb9db,0xb9dc,
-0xb9dd,0x934b,0x934c,0xb9de,0xb9df,0xb9e0,0xb9e1,0xb9e2,
-0x934d,0x934e,0x934f,0x9350,0xb9e3,0xb9e4,0x9351,0xb9e5,
-0x9352,0xb9e6,0x9353,0x9354,0x9355,0xb9e7,0x9356,0x9357,
-0xb9e8,0xb9e9,0x9358,0x9359,0xb9ea,0x935a,0x9361,0x9362,
-0xb9eb,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369,
-0xb9ec,0xb9ed,0x936a,0xb9ee,0xb9ef,0xb9f0,0x936b,0x936c,
-0x936d,0xb9f1,0x936e,0x936f,0xb9f2,0xb9f3,0x9370,0x9371,
-0xb9f4,0x9372,0x9373,0x9374,0x9375,0x9376,0x9377,0x9378,
-0x9379,0x937a,0x9381,0x9382,0x9383,0xb9f5,0x9384,0x9385,
-0x9386,0x9387,0x9388,0x9389,0x938a,0x938b,0x938c,0x938d,
-0x938e,0x938f,0x9390,0x9391,0x9392,0x9393,0x9394,0x9395,
-0x9396,0x9397,0x9398,0x9399,0x939a,0x939b,0x939c,0x939d,
-0x939e,0x939f,0x93a0,0x93a1,0x93a2,0x93a3,0x93a4,0x93a5,
-0x93a6,0x93a7,0x93a8,0x93a9,0xb9f6,0xb9f7,0x93aa,0x93ab,
-0xb9f8,0x93ac,0x93ad,0xb9f9,0xb9fa,0x93ae,0xb9fb,0x93af,
-0x93b0,0x93b1,0x93b2,0x93b3,0xb9fc,0xb9fd,0x93b4,0xb9fe,
-0x93b5,0xbaa1,0xbaa2,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,
-0xbaa3,0xbaa4,0x93bb,0x93bc,0xbaa5,0x93bd,0x93be,0xbaa6,
-0xbaa7,0x93bf,0x93c0,0x93c1,0x93c2,0x93c3,0x93c4,0x93c5,
-0xbaa8,0xbaa9,0x93c6,0xbaaa,0xbaab,0xbaac,0x93c7,0x93c8,
-0x93c9,0x93ca,0x93cb,0x93cc,0xbaad,0xbaae,0x93cd,0x93ce,
-0xbaaf,0x93cf,0x93d0,0x93d1,0xbab0,0x93d2,0x93d3,0x93d4,
-0x93d5,0x93d6,0x93d7,0x93d8,0x93d9,0xbab1,0x93da,0xbab2,
-0xbab3,0xbab4,0x93db,0x93dc,0x93dd,0xbab5,0x93de,0x93df,
-0xbab6,0x93e0,0x93e1,0x93e2,0xbab7,0x93e3,0x93e4,0x93e5,
-0x93e6,0x93e7,0x93e8,0x93e9,0x93ea,0x93eb,0x93ec,0x93ed,
-0x93ee,0x93ef,0x93f0,0x93f1,0x93f2,0x93f3,0x93f4,0x93f5,
-0x93f6,0x93f7,0x93f8,0x93f9,0xbab8,0xbab9,0xbaba,0x93fa,
-0xbabb,0x93fb,0x93fc,0x93fd,0xbabc,0x93fe,0x9441,0x9442,
-0x9443,0x9444,0x9445,0x9446,0xbabd,0xbabe,0x9447,0xbabf,
-0x9448,0xbac0,0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,
-0xbac1,0x944f,0x9450,0x9451,0xbac2,0x9452,0x9453,0x9454,
-0x9455,0x9456,0x9457,0x9458,0x9459,0x945a,0x9461,0x9462,
-0x9463,0x9464,0x9465,0x9466,0xbac3,0x9467,0x9468,0x9469,
-0x946a,0x946b,0x946c,0x946d,0xbac4,0x946e,0x946f,0x9470,
-0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,0x9478,
-0x9479,0x947a,0x9481,0x9482,0x9483,0x9484,0x9485,0x9486,
-0xbac5,0x9487,0x9488,0x9489,0x948a,0x948b,0x948c,0x948d,
-0xbac6,0xbac7,0x948e,0x948f,0xbac8,0x9490,0x9491,0x9492,
-0xbac9,0x9493,0x9494,0x9495,0x9496,0x9497,0x9498,0x9499,
-0xbaca,0xbacb,0x949a,0x949b,0x949c,0x949d,0x949e,0x949f,
-0x94a0,0x94a1,0x94a2,0x94a3,0xbacc,0x94a4,0x94a5,0x94a6,
-0xbacd,0x94a7,0x94a8,0x94a9,0x94aa,0x94ab,0x94ac,0x94ad,
-0x94ae,0x94af,0x94b0,0x94b1,0x94b2,0x94b3,0x94b4,0x94b5,
-0x94b6,0x94b7,0x94b8,0x94b9,0x94ba,0x94bb,0x94bc,0x94bd,
-0xbace,0xbacf,0x94be,0x94bf,0xbad0,0x94c0,0x94c1,0xbad1,
-0xbad2,0xbad3,0xbad4,0x94c2,0x94c3,0x94c4,0x94c5,0x94c6,
-0xbad5,0xbad6,0x94c7,0xbad7,0x94c8,0xbad8,0x94c9,0x94ca,
-0x94cb,0xbad9,0xbada,0x94cc,0xbadb,0x94cd,0x94ce,0x94cf,
-0x94d0,0x94d1,0x94d2,0x94d3,0xbadc,0x94d4,0x94d5,0x94d6,
-0x94d7,0x94d8,0x94d9,0x94da,0x94db,0x94dc,0x94dd,0x94de,
-0xbadd,0x94df,0x94e0,0x94e1,0x94e2,0x94e3,0x94e4,0x94e5,
-0xbade,0x94e6,0x94e7,0x94e8,0x94e9,0x94ea,0x94eb,0x94ec,
-0x94ed,0x94ee,0x94ef,0x94f0,0x94f1,0x94f2,0x94f3,0x94f4,
-0x94f5,0x94f6,0x94f7,0x94f8,0x94f9,0x94fa,0x94fb,0x94fc,
-0x94fd,0x94fe,0x9541,0x9542,0xbadf,0xbae0,0x9543,0x9544,
-0xbae1,0x9545,0x9546,0x9547,0xbae2,0x9548,0x9549,0x954a,
-0x954b,0x954c,0x954d,0x954e,0x954f,0x9550,0x9551,0x9552,
-0x9553,0xbae3,0x9554,0x9555,0x9556,0x9557,0x9558,0x9559,
-0xbae4,0x955a,0x9561,0x9562,0xbae5,0x9563,0x9564,0x9565,
-0xbae6,0x9566,0x9567,0x9568,0x9569,0x956a,0x956b,0x956c,
-0xbae7,0x956d,0x956e,0xbae8,0x956f,0xbae9,0x9570,0x9571,
-0x9572,0x9573,0x9574,0x9575,0xbaea,0xbaeb,0x9576,0x9577,
-0xbaec,0x9578,0x9579,0x957a,0xbaed,0x9581,0x9582,0x9583,
-0x9584,0x9585,0x9586,0x9587,0xbaee,0xbaef,0x9588,0xbaf0,
-0x9589,0x958a,0x958b,0x958c,0x958d,0x958e,0x958f,0x9590,
-0x9591,0x9592,0x9593,0x9594,0x9595,0x9596,0x9597,0x9598,
-0x9599,0x959a,0x959b,0x959c,0x959d,0x959e,0x959f,0x95a0,
-0x95a1,0x95a2,0x95a3,0x95a4,0x95a5,0x95a6,0x95a7,0x95a8,
-0x95a9,0x95aa,0x95ab,0x95ac,0xbaf1,0xbaf2,0x95ad,0x95ae,
-0xbaf3,0x95af,0x95b0,0x95b1,0xbaf4,0x95b2,0xbaf5,0x95b3,
-0x95b4,0x95b5,0x95b6,0x95b7,0xbaf6,0xbaf7,0x95b8,0xbaf8,
-0x95b9,0xbaf9,0xbafa,0xbafb,0x95ba,0x95bb,0x95bc,0x95bd,
-0xbafc,0xbafd,0x95be,0x95bf,0xbafe,0x95c0,0x95c1,0x95c2,
-0xbba1,0x95c3,0xbba2,0x95c4,0x95c5,0x95c6,0x95c7,0x95c8,
-0xbba3,0xbba4,0x95c9,0xbba5,0xbba6,0xbba7,0x95ca,0x95cb,
-0x95cc,0x95cd,0x95ce,0xbba8,0xbba9,0xbbaa,0x95cf,0x95d0,
-0xbbab,0x95d1,0x95d2,0x95d3,0xbbac,0x95d4,0x95d5,0x95d6,
-0x95d7,0x95d8,0x95d9,0x95da,0xbbad,0xbbae,0x95db,0xbbaf,
-0xbbb0,0xbbb1,0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,
-0xbbb2,0xbbb3,0x95e2,0x95e3,0x95e4,0x95e5,0x95e6,0x95e7,
-0x95e8,0x95e9,0x95ea,0x95eb,0x95ec,0x95ed,0x95ee,0x95ef,
-0xbbb4,0x95f0,0x95f1,0x95f2,0x95f3,0x95f4,0x95f5,0x95f6,
-0x95f7,0x95f8,0x95f9,0x95fa,0x95fb,0x95fc,0x95fd,0x95fe,
-0x9641,0x9642,0x9643,0x9644,0x9645,0x9646,0x9647,0x9648,
-0x9649,0x964a,0x964b,0x964c,0x964d,0x964e,0x964f,0x9650,
-0x9651,0x9652,0x9653,0x9654,0x9655,0x9656,0x9657,0x9658,
-0xbbb5,0xbbb6,0x9659,0x965a,0xbbb7,0x9661,0x9662,0xbbb8,
-0xbbb9,0x9663,0x9664,0x9665,0x9666,0x9667,0x9668,0x9669,
-0xbbba,0x966a,0x966b,0xbbbb,0xbbbc,0xbbbd,0x966c,0x966d,
-0x966e,0x966f,0x9670,0x9671,0xbbbe,0x9672,0x9673,0x9674,
-0x9675,0x9676,0x9677,0x9678,0x9679,0x967a,0x9681,0x9682,
-0x9683,0x9684,0x9685,0x9686,0x9687,0x9688,0x9689,0x968a,
-0x968b,0xbbbf,0x968c,0x968d,0x968e,0x968f,0x9690,0x9691,
-0xbbc0,0xbbc1,0x9692,0x9693,0x9694,0x9695,0x9696,0x9697,
-0x9698,0x9699,0x969a,0x969b,0x969c,0x969d,0x969e,0x969f,
-0xbbc2,0xbbc3,0x96a0,0xbbc4,0xbbc5,0xbbc6,0x96a1,0x96a2,
-0x96a3,0x96a4,0x96a5,0x96a6,0x96a7,0x96a8,0x96a9,0x96aa,
-0x96ab,0x96ac,0x96ad,0x96ae,0x96af,0x96b0,0x96b1,0x96b2,
-0x96b3,0x96b4,0x96b5,0x96b6,0x96b7,0x96b8,0x96b9,0x96ba,
-0x96bb,0x96bc,0x96bd,0x96be,0x96bf,0x96c0,0x96c1,0x96c2,
-0xbbc7,0xbbc8,0x96c3,0x96c4,0xbbc9,0x96c5,0x96c6,0x96c7,
-0xbbca,0x96c8,0x96c9,0x96ca,0x96cb,0x96cc,0x96cd,0x96ce,
-0xbbcb,0xbbcc,0x96cf,0x96d0,0x96d1,0xbbcd,0x96d2,0x96d3,
-0x96d4,0x96d5,0x96d6,0x96d7,0x96d8,0x96d9,0x96da,0x96db,
-0x96dc,0x96dd,0x96de,0x96df,0x96e0,0x96e1,0x96e2,0x96e3,
-0x96e4,0x96e5,0x96e6,0x96e7,0x96e8,0x96e9,0x96ea,0x96eb,
-0x96ec,0x96ed,0x96ee,0x96ef,0x96f0,0x96f1,0x96f2,0x96f3,
-0x96f4,0x96f5,0x96f6,0x96f7,0x96f8,0x96f9,0x96fa,0x96fb,
-0x96fc,0x96fd,0x96fe,0x9741,0x9742,0x9743,0x9744,0x9745,
-0x9746,0x9747,0x9748,0x9749,0x974a,0x974b,0x974c,0x974d,
-0x974e,0x974f,0x9750,0x9751,0xbbce,0x9752,0x9753,0x9754,
-0x9755,0x9756,0x9757,0x9758,0x9759,0x975a,0x9761,0x9762,
-0x9763,0x9764,0x9765,0x9766,0x9767,0x9768,0x9769,0x976a,
-0x976b,0x976c,0x976d,0x976e,0x976f,0x9770,0x9771,0x9772,
-0xbbcf,0x9773,0x9774,0x9775,0x9776,0x9777,0x9778,0x9779,
-0x977a,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786,0x9787,
-0x9788,0x9789,0x978a,0x978b,0x978c,0xbbd0,0x978d,0x978e,
-0x978f,0x9790,0x9791,0x9792,0xbbd1,0xbbd2,0x9793,0x9794,
-0xbbd3,0x9795,0x9796,0x9797,0xbbd4,0x9798,0x9799,0x979a,
-0x979b,0x979c,0x979d,0x979e,0xbbd5,0x979f,0x97a0,0xbbd6,
-0x97a1,0xbbd7,0x97a2,0x97a3,0x97a4,0x97a5,0x97a6,0x97a7,
-0x97a8,0x97a9,0x97aa,0x97ab,0x97ac,0x97ad,0x97ae,0x97af,
-0x97b0,0x97b1,0x97b2,0x97b3,0x97b4,0x97b5,0x97b6,0x97b7,
-0x97b8,0x97b9,0x97ba,0x97bb,0x97bc,0x97bd,0x97be,0x97bf,
-0x97c0,0x97c1,0x97c2,0x97c3,0x97c4,0x97c5,0x97c6,0x97c7,
-0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,0x97cd,0x97ce,0x97cf,
-0x97d0,0x97d1,0x97d2,0x97d3,0x97d4,0x97d5,0x97d6,0x97d7,
-0x97d8,0x97d9,0x97da,0x97db,0x97dc,0x97dd,0x97de,0x97df,
-0x97e0,0x97e1,0x97e2,0x97e3,0x97e4,0x97e5,0x97e6,0x97e7,
-0x97e8,0x97e9,0x97ea,0x97eb,0x97ec,0x97ed,0x97ee,0x97ef,
-0x97f0,0x97f1,0x97f2,0x97f3,0x97f4,0x97f5,0x97f6,0x97f7,
-0x97f8,0x97f9,0x97fa,0x97fb,0xbbd8,0x97fc,0x97fd,0x97fe,
-0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,0x9847,0x9848,
-0x9849,0x984a,0x984b,0x984c,0x984d,0x984e,0x984f,0x9850,
-0x9851,0xbbd9,0x9852,0x9853,0x9854,0x9855,0x9856,0x9857,
-0xbbda,0x9858,0x9859,0x985a,0xbbdb,0x9861,0x9862,0x9863,
-0xbbdc,0x9864,0x9865,0x9866,0x9867,0x9868,0x9869,0x986a,
-0xbbdd,0xbbde,0x986b,0x986c,0x986d,0x986e,0x986f,0x9870,
-0x9871,0x9872,0x9873,0x9874,0x9875,0x9876,0x9877,0x9878,
-0x9879,0x987a,0x9881,0x9882,0x9883,0x9884,0x9885,0x9886,
-0x9887,0x9888,0x9889,0x988a,0x988b,0x988c,0x988d,0x988e,
-0x988f,0x9890,0x9891,0x9892,0x9893,0x9894,0x9895,0x9896,
-0xbbdf,0xbbe0,0x9897,0x9898,0xbbe1,0x9899,0x989a,0x989b,
-0xbbe2,0x989c,0x989d,0x989e,0x989f,0x98a0,0x98a1,0x98a2,
-0xbbe3,0xbbe4,0x98a3,0xbbe5,0x98a4,0xbbe6,0x98a5,0x98a6,
-0x98a7,0x98a8,0x98a9,0x98aa,0xbbe7,0xbbe8,0x98ab,0xbbe9,
-0xbbea,0x98ac,0x98ad,0xbbeb,0xbbec,0xbbed,0xbbee,0x98ae,
-0x98af,0x98b0,0x98b1,0x98b2,0xbbef,0xbbf0,0x98b3,0xbbf1,
-0xbbf2,0xbbf3,0x98b4,0x98b5,0x98b6,0xbbf4,0x98b7,0x98b8,
-0xbbf5,0xbbf6,0x98b9,0x98ba,0xbbf7,0x98bb,0x98bc,0x98bd,
-0xbbf8,0x98be,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,0x98c4,
-0xbbf9,0xbbfa,0x98c5,0xbbfb,0xbbfc,0xbbfd,0x98c6,0x98c7,
-0x98c8,0x98c9,0x98ca,0x98cb,0xbbfe,0xbca1,0x98cc,0x98cd,
-0xbca2,0x98ce,0x98cf,0x98d0,0xbca3,0x98d1,0x98d2,0x98d3,
-0x98d4,0x98d5,0x98d6,0x98d7,0xbca4,0xbca5,0x98d8,0xbca6,
-0x98d9,0xbca7,0x98da,0x98db,0x98dc,0x98dd,0x98de,0x98df,
-0xbca8,0x98e0,0x98e1,0x98e2,0xbca9,0x98e3,0x98e4,0x98e5,
-0xbcaa,0x98e6,0x98e7,0x98e8,0x98e9,0x98ea,0x98eb,0x98ec,
-0xbcab,0x98ed,0x98ee,0x98ef,0x98f0,0xbcac,0x98f1,0x98f2,
-0x98f3,0x98f4,0x98f5,0x98f6,0xbcad,0xbcae,0xbcaf,0xbcb0,
-0xbcb1,0x98f7,0x98f8,0xbcb2,0xbcb3,0x98f9,0xbcb4,0xbcb5,
-0x98fa,0x98fb,0x98fc,0x98fd,0xbcb6,0xbcb7,0x98fe,0xbcb8,
-0xbcb9,0xbcba,0x9941,0x9942,0x9943,0x9944,0xbcbb,0x9945,
-0xbcbc,0xbcbd,0x9946,0x9947,0xbcbe,0x9948,0x9949,0x994a,
-0xbcbf,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951,
-0xbcc0,0xbcc1,0x9952,0xbcc2,0xbcc3,0xbcc4,0x9953,0x9954,
-0x9955,0x9956,0x9957,0x9958,0xbcc5,0xbcc6,0x9959,0x995a,
-0xbcc7,0x9961,0x9962,0x9963,0xbcc8,0x9964,0x9965,0x9966,
-0x9967,0x9968,0x9969,0x996a,0xbcc9,0xbcca,0x996b,0xbccb,
-0xbccc,0xbccd,0x996c,0x996d,0x996e,0x996f,0x9970,0x9971,
-0xbcce,0x9972,0x9973,0x9974,0xbccf,0x9975,0x9976,0x9977,
-0xbcd0,0x9978,0x9979,0x997a,0x9981,0x9982,0x9983,0x9984,
-0x9985,0x9986,0x9987,0x9988,0x9989,0xbcd1,0x998a,0x998b,
-0x998c,0x998d,0x998e,0x998f,0xbcd2,0xbcd3,0xbcd4,0x9990,
-0xbcd5,0x9991,0x9992,0x9993,0xbcd6,0x9994,0xbcd7,0x9995,
-0x9996,0x9997,0x9998,0x9999,0xbcd8,0xbcd9,0x999a,0xbcda,
-0x999b,0xbcdb,0x999c,0x999d,0x999e,0xbcdc,0x999f,0x99a0,
-0xbcdd,0xbcde,0x99a1,0x99a2,0xbcdf,0x99a3,0x99a4,0x99a5,
-0xbce0,0x99a6,0x99a7,0x99a8,0x99a9,0x99aa,0x99ab,0x99ac,
-0x99ad,0x99ae,0x99af,0x99b0,0x99b1,0xbce1,0x99b2,0x99b3,
-0x99b4,0x99b5,0x99b6,0x99b7,0xbce2,0x99b8,0x99b9,0x99ba,
-0xbce3,0x99bb,0x99bc,0x99bd,0xbce4,0x99be,0x99bf,0x99c0,
-0x99c1,0x99c2,0x99c3,0x99c4,0xbce5,0x99c5,0x99c6,0xbce6,
-0xbce7,0x99c7,0x99c8,0x99c9,0x99ca,0x99cb,0x99cc,0x99cd,
-0xbce8,0x99ce,0x99cf,0x99d0,0xbce9,0x99d1,0x99d2,0x99d3,
-0xbcea,0x99d4,0x99d5,0x99d6,0x99d7,0x99d8,0x99d9,0x99da,
-0xbceb,0xbcec,0x99db,0xbced,0x99dc,0x99dd,0x99de,0x99df,
-0x99e0,0x99e1,0x99e2,0x99e3,0xbcee,0xbcef,0x99e4,0x99e5,
-0xbcf0,0x99e6,0x99e7,0x99e8,0xbcf1,0x99e9,0x99ea,0x99eb,
-0x99ec,0x99ed,0x99ee,0x99ef,0xbcf2,0xbcf3,0x99f0,0xbcf4,
-0x99f1,0xbcf5,0x99f2,0x99f3,0x99f4,0x99f5,0x99f6,0x99f7,
-0xbcf6,0xbcf7,0x99f8,0x99f9,0xbcf8,0x99fa,0x99fb,0xbcf9,
-0xbcfa,0x99fc,0x99fd,0x99fe,0x9a41,0x9a42,0x9a43,0x9a44,
-0xbcfb,0xbcfc,0x9a45,0xbcfd,0x9a46,0xbcfe,0x9a47,0xbda1,
-0x9a48,0xbda2,0xbda3,0x9a49,0xbda4,0x9a4a,0x9a4b,0x9a4c,
-0x9a4d,0x9a4e,0x9a4f,0x9a50,0x9a51,0x9a52,0x9a53,0x9a54,
-0x9a55,0x9a56,0x9a57,0x9a58,0x9a59,0x9a5a,0x9a61,0x9a62,
-0xbda5,0x9a63,0x9a64,0x9a65,0x9a66,0x9a67,0x9a68,0x9a69,
-0xbda6,0xbda7,0x9a6a,0x9a6b,0xbda8,0x9a6c,0x9a6d,0x9a6e,
-0xbda9,0x9a6f,0x9a70,0x9a71,0x9a72,0x9a73,0x9a74,0x9a75,
-0xbdaa,0x9a76,0x9a77,0x9a78,0x9a79,0xbdab,0x9a7a,0x9a81,
-0x9a82,0x9a83,0x9a84,0x9a85,0xbdac,0xbdad,0x9a86,0x9a87,
-0xbdae,0x9a88,0x9a89,0x9a8a,0xbdaf,0x9a8b,0x9a8c,0x9a8d,
-0x9a8e,0x9a8f,0x9a90,0x9a91,0xbdb0,0xbdb1,0x9a92,0xbdb2,
-0x9a93,0xbdb3,0x9a94,0x9a95,0x9a96,0x9a97,0x9a98,0x9a99,
-0xbdb4,0xbdb5,0x9a9a,0x9a9b,0x9a9c,0x9a9d,0x9a9e,0x9a9f,
-0xbdb6,0x9aa0,0x9aa1,0x9aa2,0x9aa3,0x9aa4,0x9aa5,0x9aa6,
-0xbdb7,0x9aa7,0x9aa8,0xbdb8,0x9aa9,0xbdb9,0x9aaa,0x9aab,
-0x9aac,0x9aad,0x9aae,0x9aaf,0xbdba,0xbdbb,0x9ab0,0x9ab1,
-0xbdbc,0x9ab2,0x9ab3,0x9ab4,0xbdbd,0xbdbe,0x9ab5,0x9ab6,
-0x9ab7,0x9ab8,0x9ab9,0x9aba,0xbdbf,0xbdc0,0x9abb,0xbdc1,
-0x9abc,0xbdc2,0x9abd,0x9abe,0x9abf,0x9ac0,0x9ac1,0x9ac2,
-0x9ac3,0x9ac4,0x9ac5,0x9ac6,0x9ac7,0x9ac8,0x9ac9,0x9aca,
-0x9acb,0x9acc,0x9acd,0x9ace,0x9acf,0x9ad0,0x9ad1,0x9ad2,
-0x9ad3,0x9ad4,0x9ad5,0x9ad6,0x9ad7,0x9ad8,0x9ad9,0x9ada,
-0x9adb,0x9adc,0x9add,0x9ade,0xbdc3,0xbdc4,0x9adf,0x9ae0,
-0xbdc5,0x9ae1,0x9ae2,0xbdc6,0xbdc7,0x9ae3,0x9ae4,0x9ae5,
-0x9ae6,0x9ae7,0x9ae8,0xbdc8,0xbdc9,0xbdca,0x9ae9,0xbdcb,
-0x9aea,0xbdcc,0x9aeb,0x9aec,0x9aed,0x9aee,0xbdcd,0x9aef,
-0xbdce,0xbdcf,0x9af0,0xbdd0,0xbdd1,0x9af1,0x9af2,0x9af3,
-0xbdd2,0x9af4,0x9af5,0x9af6,0x9af7,0x9af8,0x9af9,0x9afa,
-0xbdd3,0xbdd4,0x9afb,0x9afc,0xbdd5,0xbdd6,0x9afd,0x9afe,
-0x9b41,0x9b42,0x9b43,0xbdd7,0xbdd8,0xbdd9,0x9b44,0x9b45,
-0xbdda,0x9b46,0x9b47,0x9b48,0xbddb,0x9b49,0x9b4a,0x9b4b,
-0x9b4c,0x9b4d,0x9b4e,0x9b4f,0xbddc,0xbddd,0x9b50,0x9b51,
-0xbdde,0xbddf,0x9b52,0x9b53,0x9b54,0x9b55,0x9b56,0x9b57,
-0x9b58,0x9b59,0x9b5a,0x9b61,0x9b62,0x9b63,0x9b64,0x9b65,
-0x9b66,0x9b67,0x9b68,0x9b69,0x9b6a,0x9b6b,0x9b6c,0x9b6d,
-0x9b6e,0x9b6f,0x9b70,0x9b71,0x9b72,0xbde0,0x9b73,0x9b74,
-0x9b75,0x9b76,0x9b77,0x9b78,0x9b79,0x9b7a,0x9b81,0x9b82,
-0x9b83,0x9b84,0x9b85,0x9b86,0x9b87,0x9b88,0x9b89,0x9b8a,
-0x9b8b,0x9b8c,0x9b8d,0x9b8e,0x9b8f,0x9b90,0x9b91,0x9b92,
-0x9b93,0x9b94,0x9b95,0x9b96,0x9b97,0x9b98,0x9b99,0x9b9a,
-0xbde1,0xbde2,0x9b9b,0x9b9c,0xbde3,0x9b9d,0x9b9e,0x9b9f,
-0xbde4,0x9ba0,0xbde5,0x9ba1,0x9ba2,0x9ba3,0x9ba4,0x9ba5,
-0xbde6,0xbde7,0x9ba6,0x9ba7,0xbde8,0xbde9,0x9ba8,0x9ba9,
-0x9baa,0x9bab,0x9bac,0x9bad,0xbdea,0x9bae,0x9baf,0x9bb0,
-0xbdeb,0x9bb1,0x9bb2,0x9bb3,0xbdec,0x9bb4,0x9bb5,0x9bb6,
-0x9bb7,0x9bb8,0x9bb9,0x9bba,0x9bbb,0x9bbc,0x9bbd,0x9bbe,
-0x9bbf,0x9bc0,0x9bc1,0x9bc2,0x9bc3,0x9bc4,0x9bc5,0x9bc6,
-0x9bc7,0x9bc8,0x9bc9,0x9bca,0x9bcb,0x9bcc,0x9bcd,0x9bce,
-0x9bcf,0x9bd0,0x9bd1,0x9bd2,0x9bd3,0x9bd4,0x9bd5,0x9bd6,
-0x9bd7,0x9bd8,0x9bd9,0x9bda,0x9bdb,0x9bdc,0x9bdd,0x9bde,
-0x9bdf,0x9be0,0x9be1,0x9be2,0x9be3,0x9be4,0x9be5,0x9be6,
-0xbded,0x9be7,0x9be8,0x9be9,0x9bea,0x9beb,0x9bec,0x9bed,
-0x9bee,0x9bef,0x9bf0,0x9bf1,0x9bf2,0x9bf3,0x9bf4,0x9bf5,
-0x9bf6,0x9bf7,0x9bf8,0x9bf9,0x9bfa,0x9bfb,0x9bfc,0x9bfd,
-0xbdee,0xbdef,0x9bfe,0x9c41,0xbdf0,0x9c42,0x9c43,0xbdf1,
-0xbdf2,0x9c44,0xbdf3,0x9c45,0x9c46,0x9c47,0x9c48,0x9c49,
-0xbdf4,0xbdf5,0x9c4a,0x9c4b,0x9c4c,0xbdf6,0x9c4d,0x9c4e,
-0x9c4f,0x9c50,0x9c51,0x9c52,0xbdf7,0xbdf8,0x9c53,0x9c54,
-0xbdf9,0x9c55,0x9c56,0x9c57,0x9c58,0x9c59,0x9c5a,0x9c61,
-0x9c62,0x9c63,0x9c64,0x9c65,0x9c66,0x9c67,0x9c68,0x9c69,
-0xbdfa,0x9c6a,0x9c6b,0x9c6c,0x9c6d,0x9c6e,0x9c6f,0x9c70,
-0xbdfb,0x9c71,0x9c72,0x9c73,0x9c74,0x9c75,0x9c76,0x9c77,
-0x9c78,0x9c79,0x9c7a,0x9c81,0x9c82,0x9c83,0x9c84,0x9c85,
-0x9c86,0x9c87,0x9c88,0x9c89,0xbdfc,0x9c8a,0x9c8b,0x9c8c,
-0x9c8d,0x9c8e,0x9c8f,0x9c90,0xbdfd,0x9c91,0x9c92,0x9c93,
-0xbdfe,0x9c94,0x9c95,0x9c96,0xbea1,0x9c97,0x9c98,0x9c99,
-0x9c9a,0x9c9b,0x9c9c,0x9c9d,0xbea2,0xbea3,0x9c9e,0x9c9f,
-0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca4,0x9ca5,0x9ca6,0x9ca7,
-0xbea4,0x9ca8,0x9ca9,0x9caa,0x9cab,0x9cac,0x9cad,0x9cae,
-0x9caf,0x9cb0,0x9cb1,0x9cb2,0x9cb3,0x9cb4,0x9cb5,0x9cb6,
-0x9cb7,0x9cb8,0x9cb9,0x9cba,0x9cbb,0x9cbc,0x9cbd,0x9cbe,
-0x9cbf,0x9cc0,0x9cc1,0x9cc2,0xbea5,0xbea6,0x9cc3,0x9cc4,
-0xbea7,0x9cc5,0x9cc6,0x9cc7,0xbea8,0x9cc8,0x9cc9,0x9cca,
-0x9ccb,0x9ccc,0x9ccd,0x9cce,0xbea9,0xbeaa,0x9ccf,0x9cd0,
-0x9cd1,0xbeab,0x9cd2,0x9cd3,0x9cd4,0x9cd5,0x9cd6,0x9cd7,
-0xbeac,0x9cd8,0x9cd9,0x9cda,0x9cdb,0x9cdc,0x9cdd,0x9cde,
-0x9cdf,0x9ce0,0x9ce1,0x9ce2,0x9ce3,0x9ce4,0x9ce5,0x9ce6,
-0x9ce7,0x9ce8,0x9ce9,0x9cea,0xbead,0x9ceb,0x9cec,0x9ced,
-0x9cee,0x9cef,0x9cf0,0x9cf1,0xbeae,0x9cf2,0x9cf3,0x9cf4,
-0x9cf5,0x9cf6,0x9cf7,0x9cf8,0x9cf9,0x9cfa,0x9cfb,0x9cfc,
-0x9cfd,0x9cfe,0x9d41,0x9d42,0x9d43,0x9d44,0x9d45,0x9d46,
-0x9d47,0x9d48,0x9d49,0x9d4a,0x9d4b,0x9d4c,0x9d4d,0x9d4e,
-0xbeaf,0x9d4f,0x9d50,0x9d51,0xbeb0,0x9d52,0x9d53,0x9d54,
-0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0x9d5a,0x9d61,0x9d62,
-0x9d63,0x9d64,0x9d65,0x9d66,0x9d67,0x9d68,0x9d69,0x9d6a,
-0x9d6b,0x9d6c,0x9d6d,0x9d6e,0x9d6f,0x9d70,0x9d71,0x9d72,
-0x9d73,0x9d74,0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,
-0x9d81,0x9d82,0x9d83,0x9d84,0x9d85,0x9d86,0x9d87,0x9d88,
-0x9d89,0xbeb1,0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,
-0xbeb2,0xbeb3,0x9d90,0x9d91,0xbeb4,0x9d92,0x9d93,0x9d94,
-0xbeb5,0x9d95,0xbeb6,0x9d96,0x9d97,0x9d98,0x9d99,0xbeb7,
-0xbeb8,0xbeb9,0x9d9a,0x9d9b,0x9d9c,0x9d9d,0x9d9e,0x9d9f,
-0x9da0,0x9da1,0x9da2,0x9da3,0xbeba,0x9da4,0x9da5,0x9da6,
-0xbebb,0x9da7,0x9da8,0x9da9,0xbebc,0x9daa,0x9dab,0x9dac,
-0x9dad,0x9dae,0x9daf,0x9db0,0xbebd,0x9db1,0x9db2,0x9db3,
-0x9db4,0x9db5,0x9db6,0x9db7,0x9db8,0x9db9,0x9dba,0x9dbb,
-0xbebe,0xbebf,0x9dbc,0x9dbd,0xbec0,0x9dbe,0x9dbf,0x9dc0,
-0xbec1,0x9dc1,0x9dc2,0x9dc3,0x9dc4,0x9dc5,0x9dc6,0x9dc7,
-0xbec2,0xbec3,0x9dc8,0xbec4,0x9dc9,0xbec5,0x9dca,0x9dcb,
-0x9dcc,0x9dcd,0x9dce,0x9dcf,0xbec6,0xbec7,0x9dd0,0x9dd1,
-0xbec8,0xbec9,0xbeca,0x9dd2,0xbecb,0xbecc,0xbecd,0x9dd3,
-0x9dd4,0x9dd5,0x9dd6,0xbece,0xbecf,0xbed0,0x9dd7,0xbed1,
-0xbed2,0xbed3,0x9dd8,0x9dd9,0x9dda,0xbed4,0xbed5,0x9ddb,
-0xbed6,0xbed7,0x9ddc,0x9ddd,0xbed8,0x9dde,0x9ddf,0x9de0,
-0xbed9,0x9de1,0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,0x9de7,
-0xbeda,0xbedb,0x9de8,0xbedc,0xbedd,0xbede,0x9de9,0x9dea,
-0x9deb,0x9dec,0x9ded,0x9dee,0xbedf,0xbee0,0x9def,0x9df0,
-0xbee1,0x9df1,0x9df2,0x9df3,0xbee2,0x9df4,0x9df5,0xbee3,
-0x9df6,0x9df7,0x9df8,0x9df9,0xbee4,0xbee5,0x9dfa,0xbee6,
-0x9dfb,0xbee7,0x9dfc,0x9dfd,0x9dfe,0xbee8,0x9e41,0xbee9,
-0xbeea,0x9e42,0x9e43,0x9e44,0xbeeb,0x9e45,0x9e46,0x9e47,
-0xbeec,0x9e48,0x9e49,0x9e4a,0x9e4b,0x9e4c,0x9e4d,0x9e4e,
-0x9e4f,0xbeed,0x9e50,0x9e51,0x9e52,0x9e53,0x9e54,0x9e55,
-0x9e56,0x9e57,0x9e58,0x9e59,0xbeee,0xbeef,0x9e5a,0x9e61,
-0xbef0,0xbef1,0x9e62,0xbef2,0xbef3,0xbef4,0xbef5,0x9e63,
-0x9e64,0x9e65,0x9e66,0x9e67,0xbef6,0xbef7,0xbef8,0xbef9,
-0xbefa,0xbefb,0xbefc,0x9e68,0xbefd,0x9e69,0xbefe,0x9e6a,
-0xbfa1,0xbfa2,0x9e6b,0x9e6c,0xbfa3,0x9e6d,0x9e6e,0x9e6f,
-0xbfa4,0x9e70,0x9e71,0x9e72,0x9e73,0x9e74,0x9e75,0x9e76,
-0xbfa5,0xbfa6,0x9e77,0xbfa7,0x9e78,0xbfa8,0x9e79,0x9e7a,
-0x9e81,0x9e82,0x9e83,0x9e84,0xbfa9,0xbfaa,0xbfab,0x9e85,
-0xbfac,0x9e86,0x9e87,0x9e88,0xbfad,0x9e89,0xbfae,0xbfaf,
-0x9e8a,0x9e8b,0x9e8c,0x9e8d,0xbfb0,0xbfb1,0xbfb2,0xbfb3,
-0xbfb4,0xbfb5,0x9e8e,0x9e8f,0x9e90,0xbfb6,0xbfb7,0xbfb8,
-0xbfb9,0x9e91,0x9e92,0x9e93,0xbfba,0x9e94,0x9e95,0x9e96,
-0xbfbb,0x9e97,0x9e98,0x9e99,0x9e9a,0x9e9b,0x9e9c,0x9e9d,
-0xbfbc,0xbfbd,0x9e9e,0xbfbe,0xbfbf,0x9e9f,0x9ea0,0x9ea1,
-0x9ea2,0x9ea3,0x9ea4,0x9ea5,0xbfc0,0xbfc1,0x9ea6,0x9ea7,
-0xbfc2,0x9ea8,0x9ea9,0x9eaa,0xbfc3,0xbfc4,0xbfc5,0x9eab,
-0xbfc6,0x9eac,0x9ead,0xbfc7,0xbfc8,0xbfc9,0x9eae,0xbfca,
-0x9eaf,0xbfcb,0x9eb0,0xbfcc,0x9eb1,0x9eb2,0x9eb3,0x9eb4,
-0xbfcd,0xbfce,0x9eb5,0x9eb6,0xbfcf,0x9eb7,0x9eb8,0x9eb9,
-0xbfd0,0x9eba,0x9ebb,0x9ebc,0x9ebd,0x9ebe,0x9ebf,0x9ec0,
-0xbfd1,0xbfd2,0x9ec1,0xbfd3,0xbfd4,0xbfd5,0x9ec2,0x9ec3,
-0x9ec4,0x9ec5,0x9ec6,0x9ec7,0xbfd6,0xbfd7,0x9ec8,0x9ec9,
-0xbfd8,0x9eca,0x9ecb,0x9ecc,0x9ecd,0x9ece,0x9ecf,0x9ed0,
-0x9ed1,0x9ed2,0x9ed3,0x9ed4,0xbfd9,0x9ed5,0x9ed6,0xbfda,
-0x9ed7,0xbfdb,0x9ed8,0x9ed9,0x9eda,0x9edb,0x9edc,0x9edd,
-0xbfdc,0xbfdd,0x9ede,0x9edf,0xbfde,0x9ee0,0x9ee1,0x9ee2,
-0xbfdf,0x9ee3,0x9ee4,0x9ee5,0x9ee6,0x9ee7,0x9ee8,0x9ee9,
-0xbfe0,0xbfe1,0x9eea,0xbfe2,0x9eeb,0xbfe3,0x9eec,0x9eed,
-0x9eee,0x9eef,0x9ef0,0x9ef1,0xbfe4,0xbfe5,0x9ef2,0x9ef3,
-0xbfe6,0x9ef4,0x9ef5,0x9ef6,0xbfe7,0x9ef7,0x9ef8,0x9ef9,
-0x9efa,0x9efb,0x9efc,0x9efd,0xbfe8,0xbfe9,0x9efe,0xbfea,
-0x9f41,0xbfeb,0x9f42,0x9f43,0x9f44,0x9f45,0x9f46,0x9f47,
-0xbfec,0xbfed,0x9f48,0x9f49,0xbfee,0x9f4a,0x9f4b,0x9f4c,
-0xbfef,0xbff0,0xbff1,0x9f4d,0x9f4e,0x9f4f,0x9f50,0x9f51,
-0xbff2,0xbff3,0x9f52,0xbff4,0x9f53,0xbff5,0x9f54,0x9f55,
-0x9f56,0x9f57,0x9f58,0x9f59,0xbff6,0xbff7,0x9f5a,0x9f61,
-0xbff8,0x9f62,0x9f63,0x9f64,0xbff9,0x9f65,0x9f66,0x9f67,
-0x9f68,0x9f69,0x9f6a,0x9f6b,0xbffa,0xbffb,0x9f6c,0x9f6d,
-0xbffc,0xbffd,0x9f6e,0x9f6f,0x9f70,0x9f71,0x9f72,0x9f73,
-0xbffe,0xc0a1,0x9f74,0x9f75,0xc0a2,0x9f76,0x9f77,0x9f78,
-0xc0a3,0x9f79,0x9f7a,0x9f81,0x9f82,0x9f83,0x9f84,0x9f85,
-0xc0a4,0xc0a5,0x9f86,0x9f87,0x9f88,0xc0a6,0x9f89,0x9f8a,
-0x9f8b,0x9f8c,0x9f8d,0x9f8e,0xc0a7,0xc0a8,0x9f8f,0x9f90,
-0xc0a9,0x9f91,0x9f92,0x9f93,0xc0aa,0x9f94,0x9f95,0x9f96,
-0x9f97,0x9f98,0x9f99,0x9f9a,0xc0ab,0xc0ac,0x9f9b,0xc0ad,
-0x9f9c,0xc0ae,0x9f9d,0x9f9e,0x9f9f,0x9fa0,0x9fa1,0x9fa2,
-0xc0af,0xc0b0,0x9fa3,0x9fa4,0xc0b1,0x9fa5,0x9fa6,0x9fa7,
-0xc0b2,0x9fa8,0x9fa9,0x9faa,0x9fab,0x9fac,0x9fad,0x9fae,
-0xc0b3,0xc0b4,0x9faf,0xc0b5,0x9fb0,0xc0b6,0x9fb1,0xc0b7,
-0x9fb2,0x9fb3,0x9fb4,0x9fb5,0xc0b8,0xc0b9,0x9fb6,0x9fb7,
-0xc0ba,0x9fb8,0x9fb9,0x9fba,0xc0bb,0x9fbb,0x9fbc,0x9fbd,
-0x9fbe,0x9fbf,0xc0bc,0x9fc0,0xc0bd,0xc0be,0x9fc1,0xc0bf,
-0x9fc2,0xc0c0,0xc0c1,0xc0c2,0xc0c3,0xc0c4,0xc0c5,0xc0c6,
-0xc0c7,0x9fc3,0x9fc4,0x9fc5,0xc0c8,0x9fc6,0x9fc7,0x9fc8,
-0xc0c9,0x9fc9,0x9fca,0x9fcb,0x9fcc,0x9fcd,0x9fce,0x9fcf,
-0xc0ca,0x9fd0,0x9fd1,0xc0cb,0x9fd2,0x9fd3,0x9fd4,0x9fd5,
-0x9fd6,0x9fd7,0x9fd8,0x9fd9,0xc0cc,0xc0cd,0x9fda,0x9fdb,
-0xc0ce,0x9fdc,0x9fdd,0x9fde,0xc0cf,0xc0d0,0xc0d1,0x9fdf,
-0x9fe0,0x9fe1,0x9fe2,0xc0d2,0xc0d3,0xc0d4,0x9fe3,0xc0d5,
-0xc0d6,0xc0d7,0xc0d8,0x9fe4,0x9fe5,0x9fe6,0xc0d9,0x9fe7,
-0xc0da,0xc0db,0x9fe8,0x9fe9,0xc0dc,0x9fea,0xc0dd,0xc0de,
-0xc0df,0x9feb,0xc0e0,0x9fec,0x9fed,0x9fee,0x9fef,0x9ff0,
-0xc0e1,0xc0e2,0x9ff1,0xc0e3,0xc0e4,0xc0e5,0xc0e6,0x9ff2,
-0x9ff3,0x9ff4,0x9ff5,0x9ff6,0xc0e7,0xc0e8,0x9ff7,0x9ff8,
-0xc0e9,0x9ff9,0x9ffa,0x9ffb,0xc0ea,0x9ffc,0x9ffd,0x9ffe,
-0xa041,0xa042,0xa043,0xa044,0xc0eb,0xc0ec,0xa045,0xc0ed,
-0xc0ee,0xc0ef,0xa046,0xa047,0xa048,0xa049,0xa04a,0xa04b,
-0xc0f0,0xc0f1,0xa04c,0xa04d,0xc0f2,0xa04e,0xc0f3,0xa04f,
-0xc0f4,0xa050,0xa051,0xa052,0xa053,0xa054,0xa055,0xa056,
-0xc0f5,0xa057,0xa058,0xa059,0xa05a,0xc0f6,0xa061,0xa062,
-0xa063,0xa064,0xa065,0xa066,0xc0f7,0xa067,0xa068,0xa069,
-0xc0f8,0xa06a,0xa06b,0xa06c,0xc0f9,0xa06d,0xa06e,0xa06f,
-0xa070,0xa071,0xa072,0xa073,0xa074,0xa075,0xa076,0xa077,
-0xa078,0xa079,0xa07a,0xa081,0xa082,0xa083,0xa084,0xa085,
-0xc0fa,0xc0fb,0xa086,0xa087,0xc0fc,0xa088,0xa089,0xa08a,
-0xc0fd,0xa08b,0xc0fe,0xa08c,0xa08d,0xa08e,0xa08f,0xa090,
-0xc1a1,0xc1a2,0xa091,0xc1a3,0xa092,0xc1a4,0xc1a5,0xa093,
-0xa094,0xa095,0xa096,0xa097,0xc1a6,0xc1a7,0xa098,0xa099,
-0xc1a8,0xa09a,0xa09b,0xa09c,0xc1a9,0xa09d,0xa09e,0xa09f,
-0xa0a0,0xa0a1,0xa0a2,0xa0a3,0xc1aa,0xc1ab,0xa0a4,0xc1ac,
-0xa0a5,0xc1ad,0xa0a6,0xa0a7,0xa0a8,0xa0a9,0xa0aa,0xa0ab,
-0xc1ae,0xa0ac,0xa0ad,0xa0ae,0xc1af,0xa0af,0xa0b0,0xa0b1,
-0xc1b0,0xa0b2,0xa0b3,0xa0b4,0xa0b5,0xa0b6,0xa0b7,0xa0b8,
-0xc1b1,0xc1b2,0xa0b9,0xa0ba,0xc1b3,0xc1b4,0xa0bb,0xa0bc,
-0xa0bd,0xa0be,0xa0bf,0xa0c0,0xc1b5,0xa0c1,0xa0c2,0xa0c3,
-0xa0c4,0xa0c5,0xa0c6,0xa0c7,0xa0c8,0xa0c9,0xa0ca,0xa0cb,
-0xa0cc,0xa0cd,0xa0ce,0xa0cf,0xa0d0,0xa0d1,0xa0d2,0xa0d3,
-0xa0d4,0xa0d5,0xa0d6,0xa0d7,0xa0d8,0xa0d9,0xa0da,0xa0db,
-0xc1b6,0xc1b7,0xa0dc,0xa0dd,0xc1b8,0xa0de,0xa0df,0xa0e0,
-0xc1b9,0xa0e1,0xc1ba,0xa0e2,0xa0e3,0xa0e4,0xa0e5,0xa0e6,
-0xc1bb,0xc1bc,0xa0e7,0xc1bd,0xa0e8,0xc1be,0xc1bf,0xc1c0,
-0xa0e9,0xa0ea,0xa0eb,0xc1c1,0xc1c2,0xc1c3,0xa0ec,0xa0ed,
-0xa0ee,0xa0ef,0xa0f0,0xa0f1,0xc1c4,0xa0f2,0xa0f3,0xa0f4,
-0xa0f5,0xa0f6,0xa0f7,0xa0f8,0xa0f9,0xc1c5,0xa0fa,0xc1c6,
-0xa0fb,0xc1c7,0xa0fc,0xa0fd,0xa0fe,0xa141,0xa142,0xa143,
-0xc1c8,0xa144,0xa145,0xa146,0xa147,0xa148,0xa149,0xa14a,
-0xa14b,0xa14c,0xa14d,0xa14e,0xa14f,0xa150,0xa151,0xa152,
-0xa153,0xa154,0xa155,0xa156,0xc1c9,0xc1ca,0xa157,0xa158,
-0xa159,0xa15a,0xa161,0xa162,0xc1cb,0xa163,0xa164,0xa165,
-0xc1cc,0xa166,0xa167,0xa168,0xc1cd,0xa169,0xa16a,0xa16b,
-0xa16c,0xa16d,0xa16e,0xa16f,0xc1ce,0xc1cf,0xa170,0xc1d0,
-0xa171,0xc1d1,0xa172,0xa173,0xa174,0xa175,0xa176,0xa177,
-0xc1d2,0xc1d3,0xa178,0xa179,0xc1d4,0xa17a,0xa181,0xa182,
-0xa183,0xa184,0xa185,0xa186,0xa187,0xa188,0xa189,0xa18a,
-0xa18b,0xa18c,0xa18d,0xa18e,0xa18f,0xc1d5,0xa190,0xa191,
-0xa192,0xa193,0xa194,0xa195,0xc1d6,0xc1d7,0xa196,0xa197,
-0xc1d8,0xa198,0xa199,0xa19a,0xc1d9,0xc1da,0xc1db,0xa19b,
-0xa19c,0xa19d,0xa19e,0xa19f,0xc1dc,0xc1dd,0xa1a0,0xc1de,
-0xa241,0xc1df,0xa242,0xa243,0xa244,0xa245,0xa246,0xa247,
-0xc1e0,0xa248,0xa249,0xa24a,0xa24b,0xa24c,0xa24d,0xa24e,
-0xa24f,0xa250,0xa251,0xa252,0xa253,0xa254,0xa255,0xa256,
-0xa257,0xa258,0xa259,0xa25a,0xc1e1,0xa261,0xa262,0xa263,
-0xa264,0xa265,0xa266,0xa267,0xc1e2,0xa268,0xa269,0xa26a,
-0xa26b,0xa26c,0xa26d,0xa26e,0xa26f,0xa270,0xa271,0xa272,
-0xa273,0xa274,0xa275,0xa276,0xa277,0xa278,0xa279,0xa27a,
-0xa281,0xa282,0xa283,0xa284,0xa285,0xa286,0xa287,0xa288,
-0xc1e3,0xc1e4,0xa289,0xa28a,0xc1e5,0xa28b,0xa28c,0xa28d,
-0xc1e6,0xa28e,0xa28f,0xa290,0xa291,0xa292,0xa293,0xa294,
-0xc1e7,0xc1e8,0xa295,0xc1e9,0xa296,0xa297,0xa298,0xa299,
-0xa29a,0xa29b,0xa29c,0xa29d,0xc1ea,0xa29e,0xa29f,0xa2a0,
-0xc1eb,0xa341,0xa342,0xa343,0xc1ec,0xa344,0xa345,0xa346,
-0xa347,0xa348,0xa349,0xa34a,0xc1ed,0xa34b,0xa34c,0xa34d,
-0xa34e,0xa34f,0xa350,0xa351,0xa352,0xa353,0xa354,0xa355,
-0xc1ee,0xc1ef,0xa356,0xa357,0xc1f0,0xa358,0xa359,0xa35a,
-0xc1f1,0xa361,0xa362,0xa363,0xa364,0xa365,0xa366,0xa367,
-0xc1f2,0xc1f3,0xa368,0xc1f4,0xa369,0xc1f5,0xa36a,0xa36b,
-0xa36c,0xa36d,0xa36e,0xa36f,0xa370,0xa371,0xa372,0xa373,
-0xa374,0xa375,0xa376,0xa377,0xa378,0xa379,0xa37a,0xa381,
-0xa382,0xa383,0xa384,0xa385,0xa386,0xa387,0xa388,0xa389,
-0xa38a,0xa38b,0xa38c,0xa38d,0xa38e,0xa38f,0xa390,0xa391,
-0xc1f6,0xc1f7,0xa392,0xa393,0xc1f8,0xa394,0xa395,0xc1f9,
-0xc1fa,0xa396,0xc1fb,0xa397,0xa398,0xa399,0xa39a,0xa39b,
-0xc1fc,0xc1fd,0xa39c,0xc1fe,0xa39d,0xc2a1,0xc2a2,0xa39e,
-0xa39f,0xc2a3,0xc2a4,0xa3a0,0xc2a5,0xc2a6,0xa441,0xa442,
-0xc2a7,0xa443,0xc2a8,0xa444,0xc2a9,0xa445,0xa446,0xc2aa,
-0xa447,0xa448,0xa449,0xa44a,0xc2ab,0xc2ac,0xa44b,0xc2ad,
-0xc2ae,0xc2af,0xa44c,0xa44d,0xa44e,0xa44f,0xa450,0xa451,
-0xc2b0,0xc2b1,0xa452,0xa453,0xc2b2,0xa454,0xa455,0xa456,
-0xc2b3,0xa457,0xa458,0xa459,0xa45a,0xa461,0xa462,0xa463,
-0xc2b4,0xc2b5,0xa464,0xc2b6,0xc2b7,0xc2b8,0xa465,0xa466,
-0xa467,0xa468,0xa469,0xa46a,0xc2b9,0xa46b,0xa46c,0xa46d,
-0xc2ba,0xa46e,0xa46f,0xa470,0xa471,0xa472,0xa473,0xa474,
-0xa475,0xa476,0xa477,0xa478,0xa479,0xa47a,0xa481,0xa482,
-0xa483,0xc2bb,0xa484,0xa485,0xa486,0xa487,0xa488,0xa489,
-0xa48a,0xa48b,0xa48c,0xa48d,0xa48e,0xa48f,0xa490,0xa491,
-0xa492,0xa493,0xa494,0xa495,0xa496,0xa497,0xa498,0xa499,
-0xa49a,0xa49b,0xa49c,0xa49d,0xa49e,0xa49f,0xa4a0,0xa541,
-0xa542,0xa543,0xa544,0xa545,0xc2bc,0xc2bd,0xa546,0xa547,
-0xc2be,0xa548,0xa549,0xa54a,0xc2bf,0xa54b,0xa54c,0xa54d,
-0xa54e,0xa54f,0xa550,0xa551,0xc2c0,0xc2c1,0xa552,0xc2c2,
-0xc2c3,0xc2c4,0xa553,0xa554,0xa555,0xa556,0xa557,0xa558,
-0xc2c5,0xa559,0xa55a,0xa561,0xa562,0xa563,0xa564,0xa565,
-0xa566,0xa567,0xa568,0xa569,0xa56a,0xa56b,0xa56c,0xa56d,
-0xa56e,0xa56f,0xa570,0xa571,0xa572,0xc2c6,0xa573,0xa574,
-0xa575,0xa576,0xa577,0xa578,0xc2c7,0xa579,0xa57a,0xa581,
-0xa582,0xa583,0xa584,0xa585,0xa586,0xa587,0xa588,0xa589,
-0xa58a,0xa58b,0xa58c,0xa58d,0xa58e,0xa58f,0xa590,0xa591,
-0xc2c8,0xa592,0xa593,0xa594,0xa595,0xa596,0xa597,0xa598,
-0xa599,0xa59a,0xa59b,0xa59c,0xa59d,0xa59e,0xa59f,0xa5a0,
-0xa641,0xa642,0xa643,0xa644,0xa645,0xa646,0xa647,0xa648,
-0xa649,0xa64a,0xa64b,0xa64c,0xa64d,0xa64e,0xa64f,0xa650,
-0xa651,0xa652,0xa653,0xa654,0xc2c9,0xc2ca,0xa655,0xa656,
-0xc2cb,0xa657,0xa658,0xa659,0xc2cc,0xa65a,0xa661,0xa662,
-0xa663,0xa664,0xa665,0xa666,0xc2cd,0xc2ce,0xa667,0xc2cf,
-0xa668,0xc2d0,0xa669,0xc2d1,0xa66a,0xa66b,0xa66c,0xa66d,
-0xc2d2,0xc2d3,0xa66e,0xa66f,0xa670,0xa671,0xa672,0xa673,
-0xc2d4,0xa674,0xa675,0xa676,0xa677,0xa678,0xa679,0xa67a,
-0xa681,0xa682,0xa683,0xa684,0xc2d5,0xa685,0xa686,0xa687,
-0xa688,0xa689,0xa68a,0xa68b,0xc2d6,0xa68c,0xa68d,0xa68e,
-0xa68f,0xa690,0xa691,0xa692,0xa693,0xa694,0xa695,0xa696,
-0xa697,0xa698,0xa699,0xa69a,0xa69b,0xa69c,0xa69d,0xa69e,
-0xc2d7,0xa69f,0xa6a0,0xa741,0xa742,0xa743,0xa744,0xa745,
-0xc2d8,0xa746,0xa747,0xa748,0xc2d9,0xa749,0xa74a,0xa74b,
-0xc2da,0xa74c,0xa74d,0xa74e,0xa74f,0xa750,0xa751,0xa752,
-0xc2db,0xc2dc,0xa753,0xa754,0xa755,0xa756,0xa757,0xa758,
-0xa759,0xa75a,0xa761,0xa762,0xa763,0xa764,0xa765,0xa766,
-0xa767,0xa768,0xa769,0xa76a,0xa76b,0xa76c,0xa76d,0xa76e,
-0xa76f,0xa770,0xa771,0xa772,0xa773,0xa774,0xa775,0xa776,
-0xa777,0xc2dd,0xa778,0xa779,0xa77a,0xa781,0xa782,0xa783,
-0xc2de,0xc2df,0xa784,0xa785,0xc2e0,0xa786,0xa787,0xa788,
-0xc2e1,0xa789,0xa78a,0xa78b,0xa78c,0xa78d,0xa78e,0xa78f,
-0xc2e2,0xc2e3,0xa790,0xa791,0xa792,0xc2e4,0xa793,0xa794,
-0xa795,0xa796,0xa797,0xa798,0xc2e5,0xa799,0xa79a,0xa79b,
-0xa79c,0xa79d,0xa79e,0xa79f,0xa7a0,0xa841,0xa842,0xa843,
-0xa844,0xa845,0xa846,0xa847,0xa848,0xa849,0xa84a,0xa84b,
-0xc2e6,0xc2e7,0xa84c,0xa84d,0xa84e,0xa84f,0xa850,0xa851,
-0xa852,0xa853,0xa854,0xa855,0xa856,0xa857,0xa858,0xa859,
-0xa85a,0xa861,0xa862,0xa863,0xa864,0xa865,0xa866,0xa867,
-0xa868,0xa869,0xa86a,0xa86b,0xa86c,0xa86d,0xa86e,0xa86f,
-0xa870,0xa871,0xa872,0xa873,0xc2e8,0xa874,0xa875,0xa876,
-0xa877,0xa878,0xa879,0xa87a,0xa881,0xa882,0xa883,0xa884,
-0xa885,0xa886,0xa887,0xa888,0xa889,0xa88a,0xa88b,0xa88c,
-0xa88d,0xa88e,0xa88f,0xa890,0xa891,0xa892,0xa893,0xa894,
-0xc2e9,0xa895,0xa896,0xa897,0xa898,0xa899,0xa89a,0xa89b,
-0xa89c,0xa89d,0xa89e,0xa89f,0xa8a0,0xa941,0xa942,0xa943,
-0xa944,0xa945,0xa946,0xa947,0xa948,0xa949,0xa94a,0xa94b,
-0xa94c,0xa94d,0xa94e,0xa94f,0xc2ea,0xa950,0xa951,0xa952,
-0xa953,0xa954,0xa955,0xa956,0xa957,0xa958,0xa959,0xa95a,
-0xa961,0xa962,0xa963,0xa964,0xc2eb,0xa965,0xa966,0xc2ec,
-0xa967,0xc2ed,0xa968,0xa969,0xa96a,0xa96b,0xa96c,0xa96d,
-0xa96e,0xa96f,0xa970,0xa971,0xa972,0xa973,0xa974,0xa975,
-0xa976,0xa977,0xa978,0xa979,0xa97a,0xa981,0xa982,0xa983,
-0xa984,0xa985,0xa986,0xa987,0xa988,0xa989,0xa98a,0xa98b,
-0xa98c,0xa98d,0xa98e,0xa98f,0xc2ee,0xc2ef,0xa990,0xa991,
-0xc2f0,0xa992,0xa993,0xa994,0xc2f1,0xa995,0xa996,0xa997,
-0xa998,0xa999,0xa99a,0xa99b,0xc2f2,0xc2f3,0xa99c,0xa99d,
-0xa99e,0xc2f4,0xc2f5,0xa99f,0xa9a0,0xaa41,0xaa42,0xc2f6,
-0xc2f7,0xc2f8,0xaa43,0xaa44,0xc2f9,0xaa45,0xc2fa,0xaa46,
-0xc2fb,0xaa47,0xaa48,0xaa49,0xaa4a,0xaa4b,0xaa4c,0xaa4d,
-0xc2fc,0xc2fd,0xaa4e,0xc2fe,0xc3a1,0xc3a2,0xc3a3,0xaa4f,
-0xaa50,0xaa51,0xaa52,0xaa53,0xc3a4,0xc3a5,0xaa54,0xaa55,
-0xc3a6,0xaa56,0xaa57,0xaa58,0xc3a7,0xaa59,0xaa5a,0xaa61,
-0xaa62,0xaa63,0xaa64,0xaa65,0xc3a8,0xc3a9,0xaa66,0xc3aa,
-0xc3ab,0xc3ac,0xaa67,0xaa68,0xaa69,0xaa6a,0xaa6b,0xaa6c,
-0xc3ad,0xaa6d,0xaa6e,0xaa6f,0xc3ae,0xaa70,0xc3af,0xaa71,
-0xc3b0,0xaa72,0xaa73,0xaa74,0xaa75,0xaa76,0xaa77,0xaa78,
-0xc3b1,0xaa79,0xaa7a,0xaa81,0xaa82,0xc3b2,0xaa83,0xaa84,
-0xaa85,0xaa86,0xaa87,0xaa88,0xaa89,0xaa8a,0xaa8b,0xaa8c,
-0xaa8d,0xaa8e,0xaa8f,0xaa90,0xaa91,0xaa92,0xaa93,0xaa94,
-0xaa95,0xaa96,0xaa97,0xaa98,0xaa99,0xaa9a,0xaa9b,0xaa9c,
-0xaa9d,0xaa9e,0xaa9f,0xaaa0,0xab41,0xab42,0xab43,0xab44,
-0xc3b3,0xc3b4,0xab45,0xab46,0xc3b5,0xab47,0xab48,0xab49,
-0xc3b6,0xab4a,0xab4b,0xab4c,0xab4d,0xab4e,0xab4f,0xab50,
-0xc3b7,0xc3b8,0xab51,0xc3b9,0xc3ba,0xc3bb,0xab52,0xab53,
-0xab54,0xab55,0xab56,0xab57,0xc3bc,0xc3bd,0xab58,0xab59,
-0xc3be,0xab5a,0xab61,0xab62,0xc3bf,0xab63,0xab64,0xab65,
-0xab66,0xab67,0xab68,0xab69,0xc3c0,0xc3c1,0xab6a,0xc3c2,
-0xab6b,0xc3c3,0xab6c,0xab6d,0xab6e,0xab6f,0xab70,0xab71,
-0xc3c4,0xab72,0xab73,0xab74,0xc3c5,0xab75,0xab76,0xab77,
-0xab78,0xab79,0xab7a,0xab81,0xab82,0xab83,0xab84,0xab85,
-0xab86,0xab87,0xab88,0xab89,0xc3c6,0xab8a,0xab8b,0xab8c,
-0xab8d,0xab8e,0xab8f,0xab90,0xc3c7,0xab91,0xab92,0xab93,
-0xc3c8,0xab94,0xab95,0xab96,0xab97,0xab98,0xab99,0xab9a,
-0xab9b,0xab9c,0xab9d,0xab9e,0xab9f,0xaba0,0xac41,0xac42,
-0xac43,0xc3c9,0xac44,0xac45,0xac46,0xac47,0xac48,0xac49,
-0xc3ca,0xc3cb,0xac4a,0xac4b,0xc3cc,0xac4c,0xac4d,0xac4e,
-0xc3cd,0xac4f,0xac50,0xac51,0xac52,0xac53,0xac54,0xac55,
-0xc3ce,0xc3cf,0xac56,0xc3d0,0xac57,0xc3d1,0xac58,0xac59,
-0xac5a,0xac61,0xac62,0xac63,0xc3d2,0xac64,0xac65,0xac66,
-0xc3d3,0xac67,0xac68,0xac69,0xc3d4,0xac6a,0xac6b,0xac6c,
-0xac6d,0xac6e,0xac6f,0xac70,0xac71,0xac72,0xac73,0xac74,
-0xac75,0xc3d5,0xac76,0xac77,0xac78,0xac79,0xac7a,0xac81,
-0xac82,0xac83,0xac84,0xac85,0xac86,0xac87,0xac88,0xac89,
-0xac8a,0xac8b,0xac8c,0xac8d,0xac8e,0xac8f,0xac90,0xac91,
-0xac92,0xac93,0xac94,0xac95,0xac96,0xac97,0xac98,0xac99,
-0xac9a,0xac9b,0xac9c,0xac9d,0xc3d6,0xac9e,0xac9f,0xaca0,
-0xc3d7,0xad41,0xad42,0xad43,0xc3d8,0xad44,0xad45,0xad46,
-0xad47,0xad48,0xad49,0xad4a,0xc3d9,0xc3da,0xad4b,0xc3db,
-0xad4c,0xc3dc,0xad4d,0xad4e,0xad4f,0xad50,0xad51,0xad52,
-0xc3dd,0xad53,0xad54,0xad55,0xad56,0xad57,0xad58,0xad59,
-0xad5a,0xad61,0xad62,0xad63,0xad64,0xad65,0xad66,0xad67,
-0xc3de,0xad68,0xad69,0xad6a,0xad6b,0xad6c,0xad6d,0xad6e,
-0xad6f,0xad70,0xad71,0xad72,0xc3df,0xc3e0,0xad73,0xad74,
-0xc3e1,0xad75,0xad76,0xad77,0xc3e2,0xad78,0xad79,0xad7a,
-0xad81,0xad82,0xad83,0xad84,0xc3e3,0xc3e4,0xad85,0xc3e5,
-0xad86,0xc3e6,0xad87,0xad88,0xad89,0xad8a,0xad8b,0xad8c,
-0xc3e7,0xad8d,0xad8e,0xad8f,0xad90,0xad91,0xad92,0xad93,
-0xad94,0xad95,0xad96,0xad97,0xad98,0xad99,0xad9a,0xad9b,
-0xad9c,0xad9d,0xad9e,0xad9f,0xc3e8,0xada0,0xae41,0xae42,
-0xae43,0xae44,0xae45,0xae46,0xc3e9,0xae47,0xae48,0xae49,
-0xc3ea,0xae4a,0xae4b,0xae4c,0xae4d,0xae4e,0xae4f,0xae50,
-0xae51,0xae52,0xae53,0xae54,0xae55,0xae56,0xae57,0xae58,
-0xae59,0xae5a,0xae61,0xae62,0xae63,0xae64,0xae65,0xae66,
-0xc3eb,0xae67,0xae68,0xae69,0xc3ec,0xae6a,0xae6b,0xae6c,
-0xc3ed,0xae6d,0xae6e,0xae6f,0xae70,0xae71,0xae72,0xae73,
-0xc3ee,0xc3ef,0xae74,0xc3f0,0xae75,0xc3f1,0xae76,0xae77,
-0xae78,0xae79,0xae7a,0xae81,0xc3f2,0xae82,0xae83,0xae84,
-0xc3f3,0xae85,0xae86,0xae87,0xc3f4,0xae88,0xae89,0xae8a,
-0xae8b,0xae8c,0xae8d,0xae8e,0xc3f5,0xae8f,0xae90,0xae91,
-0xae92,0xc3f6,0xae93,0xae94,0xae95,0xae96,0xae97,0xae98,
-0xc3f7,0xc3f8,0xae99,0xae9a,0xc3f9,0xae9b,0xae9c,0xae9d,
-0xc3fa,0xae9e,0xae9f,0xaea0,0xaf41,0xaf42,0xaf43,0xaf44,
-0xc3fb,0xc3fc,0xaf45,0xc3fd,0xaf46,0xc3fe,0xaf47,0xaf48,
-0xaf49,0xaf4a,0xaf4b,0xaf4c,0xaf4d,0xaf4e,0xaf4f,0xaf50,
-0xaf51,0xaf52,0xaf53,0xaf54,0xaf55,0xaf56,0xaf57,0xaf58,
-0xaf59,0xaf5a,0xaf61,0xaf62,0xaf63,0xaf64,0xaf65,0xaf66,
-0xaf67,0xaf68,0xaf69,0xaf6a,0xaf6b,0xaf6c,0xaf6d,0xaf6e,
-0xc4a1,0xc4a2,0xaf6f,0xaf70,0xc4a3,0xaf71,0xaf72,0xc4a4,
-0xc4a5,0xc4a6,0xaf73,0xaf74,0xaf75,0xaf76,0xaf77,0xaf78,
-0xc4a7,0xc4a8,0xaf79,0xc4a9,0xaf7a,0xc4aa,0xaf81,0xaf82,
-0xaf83,0xaf84,0xaf85,0xaf86,0xc4ab,0xc4ac,0xaf87,0xaf88,
-0xc4ad,0xaf89,0xaf8a,0xaf8b,0xc4ae,0xaf8c,0xaf8d,0xaf8e,
-0xaf8f,0xaf90,0xaf91,0xaf92,0xc4af,0xc4b0,0xaf93,0xc4b1,
-0xaf94,0xc4b2,0xaf95,0xaf96,0xaf97,0xaf98,0xaf99,0xaf9a,
-0xc4b3,0xc4b4,0xaf9b,0xaf9c,0xc4b5,0xaf9d,0xaf9e,0xaf9f,
-0xc4b6,0xafa0,0xb041,0xb042,0xb043,0xb044,0xb045,0xb046,
-0xc4b7,0xc4b8,0xb047,0xc4b9,0xc4ba,0xc4bb,0xb048,0xb049,
-0xb04a,0xb04b,0xb04c,0xb04d,0xc4bc,0xc4bd,0xb04e,0xb04f,
-0xb050,0xb051,0xb052,0xb053,0xb054,0xb055,0xb056,0xb057,
-0xb058,0xb059,0xb05a,0xb061,0xb062,0xb063,0xb064,0xb065,
-0xb066,0xc4be,0xb067,0xb068,0xb069,0xb06a,0xb06b,0xb06c,
-0xb06d,0xb06e,0xb06f,0xb070,0xb071,0xb072,0xb073,0xb074,
-0xb075,0xb076,0xb077,0xb078,0xb079,0xb07a,0xb081,0xb082,
-0xb083,0xb084,0xb085,0xb086,0xb087,0xb088,0xb089,0xb08a,
-0xb08b,0xb08c,0xb08d,0xb08e,0xc4bf,0xc4c0,0xb08f,0xb090,
-0xc4c1,0xb091,0xb092,0xc4c2,0xc4c3,0xb093,0xb094,0xb095,
-0xb096,0xb097,0xb098,0xb099,0xc4c4,0xc4c5,0xb09a,0xc4c6,
-0xc4c7,0xc4c8,0xb09b,0xb09c,0xb09d,0xb09e,0xb09f,0xb0a0,
-0xc4c9,0xc4ca,0xb141,0xb142,0xc4cb,0xb143,0xb144,0xb145,
-0xc4cc,0xb146,0xb147,0xb148,0xb149,0xb14a,0xb14b,0xb14c,
-0xc4cd,0xc4ce,0xb14d,0xc4cf,0xb14e,0xc4d0,0xb14f,0xb150,
-0xb151,0xb152,0xb153,0xb154,0xc4d1,0xb155,0xb156,0xb157,
-0xc4d2,0xb158,0xb159,0xb15a,0xc4d3,0xb161,0xb162,0xb163,
-0xb164,0xb165,0xb166,0xb167,0xc4d4,0xc4d5,0xb168,0xc4d6,
-0xc4d7,0xc4d8,0xb169,0xb16a,0xb16b,0xb16c,0xb16d,0xb16e,
-0xc4d9,0xb16f,0xb170,0xb171,0xb172,0xb173,0xb174,0xb175,
-0xb176,0xb177,0xb178,0xb179,0xb17a,0xb181,0xb182,0xb183,
-0xb184,0xb185,0xb186,0xb187,0xb188,0xb189,0xb18a,0xb18b,
-0xb18c,0xb18d,0xb18e,0xb18f,0xc4da,0xc4db,0xb190,0xb191,
-0xc4dc,0xb192,0xb193,0xb194,0xc4dd,0xb195,0xb196,0xb197,
-0xb198,0xb199,0xb19a,0xb19b,0xc4de,0xc4df,0xb19c,0xc4e0,
-0xb19d,0xc4e1,0xb19e,0xb19f,0xb1a0,0xb241,0xb242,0xb243,
-0xc4e2,0xc4e3,0xb244,0xb245,0xc4e4,0xb246,0xb247,0xb248,
-0xc4e5,0xb249,0xb24a,0xb24b,0xb24c,0xb24d,0xb24e,0xb24f,
-0xc4e6,0xb250,0xb251,0xb252,0xb253,0xc4e7,0xb254,0xb255,
-0xb256,0xb257,0xb258,0xb259,0xc4e8,0xb25a,0xb261,0xb262,
-0xb263,0xb264,0xb265,0xb266,0xb267,0xb268,0xb269,0xb26a,
-0xb26b,0xb26c,0xb26d,0xb26e,0xb26f,0xb270,0xb271,0xb272,
-0xb273,0xc4e9,0xb274,0xb275,0xb276,0xb277,0xb278,0xb279,
-0xc4ea,0xb27a,0xb281,0xb282,0xb283,0xb284,0xb285,0xb286,
-0xc4eb,0xb287,0xb288,0xb289,0xb28a,0xb28b,0xb28c,0xb28d,
-0xb28e,0xb28f,0xb290,0xb291,0xb292,0xb293,0xb294,0xb295,
-0xb296,0xb297,0xb298,0xb299,0xc4ec,0xb29a,0xb29b,0xb29c,
-0xb29d,0xb29e,0xb29f,0xb2a0,0xb341,0xb342,0xb343,0xb344,
-0xb345,0xb346,0xb347,0xb348,0xb349,0xb34a,0xb34b,0xb34c,
-0xb34d,0xb34e,0xb34f,0xb350,0xb351,0xb352,0xb353,0xb354,
-0xc4ed,0xc4ee,0xb355,0xb356,0xc4ef,0xb357,0xb358,0xb359,
-0xc4f0,0xb35a,0xb361,0xb362,0xb363,0xb364,0xb365,0xb366,
-0xc4f1,0xc4f2,0xb367,0xc4f3,0xb368,0xc4f4,0xb369,0xb36a,
-0xb36b,0xb36c,0xb36d,0xb36e,0xc4f5,0xb36f,0xb370,0xb371,
-0xc4f6,0xb372,0xb373,0xb374,0xc4f7,0xb375,0xb376,0xb377,
-0xb378,0xb379,0xb37a,0xb381,0xb382,0xb383,0xb384,0xb385,
-0xb386,0xc4f8,0xb387,0xb388,0xb389,0xb38a,0xb38b,0xb38c,
-0xc4f9,0xb38d,0xb38e,0xb38f,0xb390,0xb391,0xb392,0xb393,
-0xb394,0xb395,0xb396,0xb397,0xb398,0xb399,0xb39a,0xb39b,
-0xb39c,0xb39d,0xb39e,0xb39f,0xb3a0,0xc4fa,0xb441,0xb442,
-0xb443,0xb444,0xb445,0xb446,0xc4fb,0xc4fc,0xb447,0xb448,
-0xc4fd,0xb449,0xb44a,0xb44b,0xc4fe,0xb44c,0xb44d,0xb44e,
-0xb44f,0xb450,0xb451,0xb452,0xc5a1,0xc5a2,0xb453,0xc5a3,
-0xb454,0xc5a4,0xb455,0xb456,0xb457,0xb458,0xb459,0xb45a,
-0xc5a5,0xb461,0xb462,0xb463,0xc5a6,0xb464,0xb465,0xb466,
-0xc5a7,0xb467,0xb468,0xb469,0xb46a,0xb46b,0xb46c,0xb46d,
-0xc5a8,0xb46e,0xb46f,0xb470,0xb471,0xb472,0xb473,0xb474,
-0xb475,0xb476,0xb477,0xb478,0xc5a9,0xc5aa,0xb479,0xb47a,
-0xc5ab,0xb481,0xb482,0xb483,0xc5ac,0xb484,0xb485,0xb486,
-0xb487,0xb488,0xb489,0xb48a,0xc5ad,0xc5ae,0xb48b,0xb48c,
-0xb48d,0xc5af,0xb48e,0xb48f,0xb490,0xb491,0xb492,0xb493,
-0xb494,0xb495,0xb496,0xb497,0xb498,0xb499,0xb49a,0xb49b,
-0xb49c,0xb49d,0xb49e,0xb49f,0xb4a0,0xb541,0xb542,0xb543,
-0xb544,0xb545,0xb546,0xb547,0xb548,0xb549,0xb54a,0xb54b,
-0xb54c,0xb54d,0xb54e,0xb54f,0xc5b0,0xc5b1,0xb550,0xb551,
-0xc5b2,0xb552,0xb553,0xb554,0xc5b3,0xb555,0xb556,0xb557,
-0xb558,0xb559,0xb55a,0xb561,0xc5b4,0xc5b5,0xb562,0xc5b6,
-0xb563,0xc5b7,0xb564,0xb565,0xb566,0xb567,0xb568,0xb569,
-0xc5b8,0xc5b9,0xb56a,0xb56b,0xc5ba,0xb56c,0xb56d,0xb56e,
-0xc5bb,0xc5bc,0xb56f,0xb570,0xb571,0xb572,0xb573,0xb574,
-0xc5bd,0xc5be,0xb575,0xc5bf,0xc5c0,0xc5c1,0xb576,0xb577,
-0xb578,0xb579,0xb57a,0xb581,0xc5c2,0xc5c3,0xb582,0xb583,
-0xc5c4,0xb584,0xb585,0xb586,0xc5c5,0xb587,0xb588,0xb589,
-0xb58a,0xb58b,0xb58c,0xb58d,0xc5c6,0xc5c7,0xb58e,0xc5c8,
-0xc5c9,0xc5ca,0xb58f,0xb590,0xb591,0xb592,0xb593,0xb594,
-0xc5cb,0xb595,0xb596,0xb597,0xb598,0xb599,0xb59a,0xb59b,
-0xb59c,0xb59d,0xb59e,0xb59f,0xb5a0,0xb641,0xb642,0xb643,
-0xb644,0xb645,0xb646,0xb647,0xb648,0xc5cc,0xb649,0xb64a,
-0xb64b,0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,0xb652,
-0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,0xb65a,
-0xb661,0xb662,0xb663,0xb664,0xb665,0xb666,0xb667,0xb668,
-0xb669,0xb66a,0xb66b,0xb66c,0xb66d,0xb66e,0xb66f,0xb670,
-0xc5cd,0xc5ce,0xb671,0xb672,0xc5cf,0xb673,0xb674,0xb675,
-0xc5d0,0xb676,0xc5d1,0xb677,0xb678,0xb679,0xb67a,0xb681,
-0xc5d2,0xc5d3,0xb682,0xc5d4,0xc5d5,0xc5d6,0xb683,0xb684,
-0xb685,0xb686,0xb687,0xb688,0xc5d7,0xc5d8,0xb689,0xb68a,
-0xc5d9,0xb68b,0xb68c,0xb68d,0xc5da,0xb68e,0xb68f,0xb690,
-0xb691,0xb692,0xb693,0xb694,0xc5db,0xc5dc,0xb695,0xc5dd,
-0xb696,0xc5de,0xb697,0xb698,0xb699,0xb69a,0xb69b,0xb69c,
-0xc5df,0xb69d,0xb69e,0xb69f,0xc5e0,0xb6a0,0xb741,0xb742,
-0xb743,0xb744,0xb745,0xb746,0xb747,0xb748,0xb749,0xb74a,
-0xb74b,0xb74c,0xb74d,0xb74e,0xc5e1,0xb74f,0xb750,0xb751,
-0xb752,0xb753,0xb754,0xb755,0xc5e2,0xb756,0xb757,0xb758,
-0xc5e3,0xb759,0xb75a,0xb761,0xb762,0xb763,0xb764,0xb765,
-0xb766,0xb767,0xb768,0xb769,0xb76a,0xb76b,0xb76c,0xb76d,
-0xb76e,0xb76f,0xb770,0xb771,0xb772,0xb773,0xb774,0xb775,
-0xc5e4,0xc5e5,0xb776,0xb777,0xc5e6,0xb778,0xb779,0xb77a,
-0xc5e7,0xb781,0xb782,0xb783,0xb784,0xb785,0xb786,0xb787,
-0xc5e8,0xc5e9,0xb788,0xc5ea,0xb789,0xc5eb,0xb78a,0xb78b,
-0xb78c,0xb78d,0xc5ec,0xb78e,0xc5ed,0xb78f,0xb790,0xb791,
-0xc5ee,0xb792,0xb793,0xb794,0xb795,0xb796,0xb797,0xb798,
-0xb799,0xb79a,0xb79b,0xb79c,0xb79d,0xb79e,0xb79f,0xb7a0,
-0xb841,0xb842,0xb843,0xb844,0xb845,0xb846,0xb847,0xb848,
-0xc5ef,0xb849,0xb84a,0xb84b,0xb84c,0xb84d,0xb84e,0xb84f,
-0xb850,0xb851,0xb852,0xb853,0xb854,0xb855,0xb856,0xb857,
-0xb858,0xb859,0xb85a,0xb861,0xb862,0xb863,0xb864,0xb865,
-0xb866,0xb867,0xb868,0xb869,0xc5f0,0xb86a,0xb86b,0xb86c,
-0xc5f1,0xb86d,0xb86e,0xb86f,0xb870,0xb871,0xb872,0xb873,
-0xb874,0xb875,0xb876,0xb877,0xb878,0xb879,0xb87a,0xc5f2,
-0xb881,0xc5f3,0xb882,0xb883,0xb884,0xb885,0xb886,0xb887,
-0xc5f4,0xb888,0xb889,0xb88a,0xb88b,0xb88c,0xb88d,0xb88e,
-0xb88f,0xb890,0xb891,0xb892,0xb893,0xb894,0xb895,0xb896,
-0xb897,0xb898,0xb899,0xb89a,0xb89b,0xb89c,0xb89d,0xb89e,
-0xb89f,0xb8a0,0xb941,0xb942,0xc5f5,0xc5f6,0xb943,0xb944,
-0xc5f7,0xb945,0xb946,0xb947,0xc5f8,0xb948,0xb949,0xb94a,
-0xb94b,0xb94c,0xb94d,0xb94e,0xc5f9,0xc5fa,0xb94f,0xc5fb,
-0xb950,0xc5fc,0xb951,0xb952,0xb953,0xb954,0xb955,0xb956,
-0xc5fd,0xb957,0xb958,0xb959,0xb95a,0xb961,0xb962,0xb963,
-0xb964,0xb965,0xb966,0xb967,0xb968,0xb969,0xb96a,0xb96b,
-0xb96c,0xb96d,0xb96e,0xb96f,0xc5fe,0xb970,0xb971,0xb972,
-0xb973,0xb974,0xb975,0xb976,0xc6a1,0xb977,0xb978,0xb979,
-0xb97a,0xb981,0xb982,0xb983,0xb984,0xb985,0xb986,0xb987,
-0xb988,0xb989,0xb98a,0xb98b,0xb98c,0xb98d,0xb98e,0xb98f,
-0xb990,0xb991,0xb992,0xb993,0xb994,0xb995,0xb996,0xb997,
-0xc6a2,0xc6a3,0xb998,0xb999,0xc6a4,0xb99a,0xb99b,0xb99c,
-0xc6a5,0xb99d,0xb99e,0xb99f,0xb9a0,0xba41,0xba42,0xba43,
-0xc6a6,0xc6a7,0xba44,0xba45,0xba46,0xc6a8,0xba47,0xba48,
-0xba49,0xba4a,0xba4b,0xba4c,0xc6a9,0xba4d,0xba4e,0xba4f,
-0xc6aa,0xba50,0xba51,0xba52,0xc6ab,0xba53,0xba54,0xba55,
-0xba56,0xba57,0xba58,0xba59,0xc6ac,0xba5a,0xba61,0xba62,
-0xba63,0xc6ad,0xba64,0xba65,0xba66,0xba67,0xba68,0xba69,
-0xc6ae,0xc6af,0xba6a,0xba6b,0xc6b0,0xba6c,0xba6d,0xc6b1,
-0xc6b2,0xba6e,0xc6b3,0xba6f,0xba70,0xba71,0xba72,0xba73,
-0xc6b4,0xc6b5,0xba74,0xc6b6,0xba75,0xba76,0xba77,0xba78,
-0xba79,0xba7a,0xba81,0xba82,0xc6b7,0xba83,0xba84,0xba85,
-0xc6b8,0xba86,0xba87,0xba88,0xc6b9,0xba89,0xba8a,0xba8b,
-0xba8c,0xba8d,0xba8e,0xba8f,0xc6ba,0xc6bb,0xba90,0xba91,
-0xba92,0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99,
-0xc6bc,0xc6bd,0xba9a,0xba9b,0xc6be,0xba9c,0xba9d,0xba9e,
-0xc6bf,0xba9f,0xbaa0,0xbb41,0xbb42,0xbb43,0xbb44,0xbb45,
-0xc6c0,0xc6c1,0xbb46,0xc6c2,0xbb47,0xc6c3,0xbb48,0xbb49,
-0xbb4a,0xbb4b,0xbb4c,0xbb4d,0xc6c4,0xc6c5,0xc6c6,0xbb4e,
-0xc6c7,0xbb4f,0xbb50,0xbb51,0xc6c8,0xbb52,0xc6c9,0xbb53,
-0xbb54,0xbb55,0xbb56,0xbb57,0xc6ca,0xc6cb,0xbb58,0xc6cc,
-0xc6cd,0xc6ce,0xbb59,0xbb5a,0xbb61,0xc6cf,0xbb62,0xbb63,
-0xc6d0,0xc6d1,0xbb64,0xbb65,0xc6d2,0xbb66,0xbb67,0xbb68,
-0xc6d3,0xbb69,0xbb6a,0xbb6b,0xbb6c,0xbb6d,0xbb6e,0xbb6f,
-0xc6d4,0xc6d5,0xbb70,0xc6d6,0xc6d7,0xc6d8,0xbb71,0xbb72,
-0xbb73,0xbb74,0xbb75,0xbb76,0xc6d9,0xc6da,0xbb77,0xbb78,
-0xbb79,0xbb7a,0xbb81,0xbb82,0xbb83,0xbb84,0xbb85,0xbb86,
-0xbb87,0xbb88,0xbb89,0xbb8a,0xbb8b,0xbb8c,0xbb8d,0xbb8e,
-0xbb8f,0xbb90,0xbb91,0xbb92,0xbb93,0xbb94,0xbb95,0xbb96,
-0xbb97,0xbb98,0xbb99,0xbb9a,0xbb9b,0xbb9c,0xbb9d,0xbb9e,
-0xbb9f,0xbba0,0xbc41,0xbc42,0xbc43,0xbc44,0xbc45,0xbc46,
-0xbc47,0xbc48,0xbc49,0xbc4a,0xbc4b,0xbc4c,0xbc4d,0xbc4e,
-0xbc4f,0xbc50,0xbc51,0xbc52,0xc6db,0xc6dc,0xbc53,0xbc54,
-0xc6dd,0xbc55,0xbc56,0xbc57,0xc6de,0xbc58,0xbc59,0xbc5a,
-0xbc61,0xbc62,0xbc63,0xbc64,0xc6df,0xc6e0,0xbc65,0xc6e1,
-0xc6e2,0xc6e3,0xbc66,0xbc67,0xbc68,0xbc69,0xbc6a,0xbc6b,
-0xc6e4,0xc6e5,0xbc6c,0xbc6d,0xc6e6,0xbc6e,0xbc6f,0xbc70,
-0xc6e7,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76,0xbc77,
-0xc6e8,0xc6e9,0xbc78,0xc6ea,0xbc79,0xc6eb,0xbc7a,0xbc81,
-0xbc82,0xbc83,0xbc84,0xbc85,0xc6ec,0xbc86,0xbc87,0xbc88,
-0xc6ed,0xbc89,0xbc8a,0xbc8b,0xc6ee,0xbc8c,0xbc8d,0xbc8e,
-0xbc8f,0xbc90,0xbc91,0xbc92,0xc6ef,0xc6f0,0xbc93,0xbc94,
-0xc6f1,0xc6f2,0xbc95,0xbc96,0xbc97,0xbc98,0xbc99,0xbc9a,
-0xc6f3,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca0,0xbd41,
-0xc6f4,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd48,
-0xbd49,0xc6f5,0xbd4a,0xc6f6,0xbd4b,0xbd4c,0xbd4d,0xbd4e,
-0xbd4f,0xbd50,0xbd51,0xbd52,0xc6f7,0xc6f8,0xbd53,0xbd54,
-0xc6f9,0xbd55,0xbd56,0xbd57,0xc6fa,0xbd58,0xbd59,0xbd5a,
-0xbd61,0xbd62,0xbd63,0xbd64,0xc6fb,0xc6fc,0xbd65,0xc6fd,
-0xbd66,0xc6fe,0xbd67,0xbd68,0xbd69,0xbd6a,0xbd6b,0xbd6c,
-0xc7a1,0xbd6d,0xbd6e,0xbd6f,0xbd70,0xbd71,0xbd72,0xbd73,
-0xbd74,0xbd75,0xbd76,0xbd77,0xbd78,0xbd79,0xbd7a,0xbd81,
-0xbd82,0xbd83,0xbd84,0xbd85,0xbd86,0xc7a2,0xbd87,0xbd88,
-0xbd89,0xbd8a,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,0xbd90,
-0xbd91,0xbd92,0xbd93,0xbd94,0xbd95,0xbd96,0xbd97,0xbd98,
-0xbd99,0xbd9a,0xbd9b,0xbd9c,0xbd9d,0xbd9e,0xbd9f,0xbda0,
-0xbe41,0xbe42,0xbe43,0xbe44,0xbe45,0xbe46,0xbe47,0xbe48,
-0xc7a3,0xbe49,0xbe4a,0xbe4b,0xc7a4,0xbe4c,0xbe4d,0xbe4e,
-0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xbe54,0xbe55,0xbe56,
-0xbe57,0xbe58,0xbe59,0xbe5a,0xbe61,0xbe62,0xbe63,0xbe64,
-0xbe65,0xbe66,0xbe67,0xbe68,0xc7a5,0xbe69,0xbe6a,0xbe6b,
-0xc7a6,0xbe6c,0xbe6d,0xbe6e,0xc7a7,0xbe6f,0xbe70,0xbe71,
-0xbe72,0xbe73,0xbe74,0xbe75,0xbe76,0xc7a8,0xbe77,0xc7a9,
-0xbe78,0xbe79,0xbe7a,0xbe81,0xbe82,0xbe83,0xbe84,0xbe85,
-0xc7aa,0xc7ab,0xbe86,0xbe87,0xc7ac,0xbe88,0xbe89,0xc7ad,
-0xc7ae,0xbe8a,0xc7af,0xbe8b,0xbe8c,0xbe8d,0xbe8e,0xbe8f,
-0xc7b0,0xc7b1,0xbe90,0xc7b2,0xbe91,0xc7b3,0xbe92,0xbe93,
-0xbe94,0xbe95,0xbe96,0xbe97,0xc7b4,0xbe98,0xbe99,0xbe9a,
-0xbe9b,0xbe9c,0xbe9d,0xbe9e,0xbe9f,0xbea0,0xbf41,0xbf42,
-0xbf43,0xbf44,0xbf45,0xbf46,0xbf47,0xbf48,0xbf49,0xbf4a,
-0xbf4b,0xc7b5,0xbf4c,0xbf4d,0xbf4e,0xbf4f,0xbf50,0xbf51,
-0xbf52,0xbf53,0xbf54,0xbf55,0xbf56,0xbf57,0xbf58,0xbf59,
-0xbf5a,0xbf61,0xbf62,0xbf63,0xbf64,0xbf65,0xbf66,0xbf67,
-0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,0xbf6d,0xbf6e,0xbf6f,
-0xbf70,0xbf71,0xbf72,0xbf73,0xc7b6,0xbf74,0xbf75,0xbf76,
-0xc7b7,0xbf77,0xbf78,0xbf79,0xc7b8,0xbf7a,0xbf81,0xbf82,
-0xbf83,0xbf84,0xbf85,0xbf86,0xc7b9,0xbf87,0xbf88,0xc7ba,
-0xbf89,0xbf8a,0xbf8b,0xbf8c,0xbf8d,0xbf8e,0xbf8f,0xbf90,
-0xc7bb,0xbf91,0xbf92,0xbf93,0xc7bc,0xbf94,0xbf95,0xbf96,
-0xc7bd,0xbf97,0xbf98,0xbf99,0xbf9a,0xbf9b,0xbf9c,0xbf9d,
-0xc7be,0xbf9e,0xbf9f,0xc7bf,0xbfa0,0xc7c0,0xc041,0xc042,
-0xc043,0xc044,0xc045,0xc046,0xc7c1,0xc047,0xc048,0xc049,
-0xc7c2,0xc04a,0xc04b,0xc04c,0xc7c3,0xc04d,0xc04e,0xc04f,
-0xc050,0xc051,0xc052,0xc053,0xc7c4,0xc7c5,0xc054,0xc7c6,
-0xc055,0xc056,0xc057,0xc058,0xc059,0xc05a,0xc061,0xc062,
-0xc063,0xc064,0xc065,0xc066,0xc067,0xc068,0xc069,0xc06a,
-0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,0xc070,0xc071,0xc072,
-0xc073,0xc074,0xc075,0xc076,0xc077,0xc078,0xc079,0xc07a,
-0xc081,0xc082,0xc083,0xc084,0xc7c7,0xc7c8,0xc085,0xc086,
-0xc7c9,0xc087,0xc088,0xc089,0xc7ca,0xc08a,0xc08b,0xc08c,
-0xc08d,0xc08e,0xc08f,0xc090,0xc7cb,0xc7cc,0xc091,0xc7cd,
-0xc092,0xc7ce,0xc093,0xc094,0xc095,0xc096,0xc097,0xc098,
-0xc7cf,0xc7d0,0xc099,0xc09a,0xc7d1,0xc09b,0xc09c,0xc09d,
-0xc7d2,0xc09e,0xc09f,0xc0a0,0xc141,0xc7d3,0xc142,0xc143,
-0xc7d4,0xc7d5,0xc144,0xc7d6,0xc145,0xc7d7,0xc146,0xc147,
-0xc148,0xc149,0xc14a,0xc14b,0xc7d8,0xc7d9,0xc14c,0xc14d,
-0xc7da,0xc14e,0xc14f,0xc150,0xc7db,0xc151,0xc152,0xc153,
-0xc154,0xc155,0xc156,0xc157,0xc7dc,0xc7dd,0xc158,0xc7de,
-0xc7df,0xc7e0,0xc159,0xc15a,0xc161,0xc162,0xc163,0xc164,
-0xc7e1,0xc165,0xc166,0xc167,0xc168,0xc169,0xc16a,0xc16b,
-0xc16c,0xc16d,0xc16e,0xc16f,0xc170,0xc171,0xc172,0xc173,
-0xc174,0xc175,0xc176,0xc177,0xc178,0xc7e2,0xc179,0xc17a,
-0xc181,0xc182,0xc183,0xc184,0xc185,0xc186,0xc187,0xc188,
-0xc189,0xc18a,0xc18b,0xc18c,0xc18d,0xc18e,0xc18f,0xc190,
-0xc191,0xc192,0xc193,0xc194,0xc195,0xc196,0xc197,0xc198,
-0xc199,0xc19a,0xc19b,0xc19c,0xc19d,0xc19e,0xc19f,0xc1a0,
-0xc7e3,0xc7e4,0xc241,0xc242,0xc7e5,0xc243,0xc244,0xc245,
-0xc7e6,0xc246,0xc7e7,0xc247,0xc248,0xc249,0xc24a,0xc24b,
-0xc7e8,0xc7e9,0xc24c,0xc7ea,0xc24d,0xc7eb,0xc24e,0xc24f,
-0xc250,0xc251,0xc252,0xc253,0xc7ec,0xc7ed,0xc254,0xc255,
-0xc7ee,0xc256,0xc257,0xc258,0xc7ef,0xc259,0xc25a,0xc261,
-0xc262,0xc263,0xc264,0xc265,0xc7f0,0xc7f1,0xc266,0xc7f2,
-0xc267,0xc7f3,0xc268,0xc269,0xc26a,0xc26b,0xc26c,0xc26d,
-0xc7f4,0xc7f5,0xc26e,0xc26f,0xc7f6,0xc270,0xc271,0xc272,
-0xc7f7,0xc273,0xc274,0xc275,0xc276,0xc277,0xc278,0xc279,
-0xc7f8,0xc7f9,0xc27a,0xc7fa,0xc7fb,0xc7fc,0xc281,0xc282,
-0xc283,0xc284,0xc285,0xc286,0xc7fd,0xc287,0xc288,0xc289,
-0xc7fe,0xc28a,0xc28b,0xc28c,0xc8a1,0xc28d,0xc28e,0xc28f,
-0xc290,0xc291,0xc292,0xc293,0xc294,0xc8a2,0xc295,0xc296,
-0xc297,0xc298,0xc299,0xc29a,0xc29b,0xc29c,0xc29d,0xc29e,
-0xc8a3,0xc8a4,0xc29f,0xc2a0,0xc8a5,0xc341,0xc342,0xc343,
-0xc8a6,0xc344,0xc345,0xc346,0xc347,0xc8a7,0xc348,0xc349,
-0xc8a8,0xc8a9,0xc34a,0xc8aa,0xc34b,0xc8ab,0xc34c,0xc34d,
-0xc34e,0xc8ac,0xc34f,0xc350,0xc8ad,0xc8ae,0xc351,0xc352,
-0xc8af,0xc353,0xc354,0xc355,0xc8b0,0xc356,0xc357,0xc358,
-0xc359,0xc35a,0xc361,0xc362,0xc363,0xc364,0xc365,0xc8b1,
-0xc366,0xc8b2,0xc367,0xc368,0xc369,0xc36a,0xc36b,0xc36c,
-0xc8b3,0xc8b4,0xc36d,0xc36e,0xc8b5,0xc36f,0xc370,0xc371,
-0xc372,0xc373,0xc374,0xc375,0xc376,0xc377,0xc378,0xc379,
-0xc37a,0xc381,0xc382,0xc8b6,0xc383,0xc8b7,0xc384,0xc385,
-0xc386,0xc387,0xc388,0xc389,0xc8b8,0xc8b9,0xc38a,0xc38b,
-0xc8ba,0xc38c,0xc38d,0xc38e,0xc8bb,0xc38f,0xc390,0xc391,
-0xc392,0xc393,0xc394,0xc395,0xc396,0xc8bc,0xc397,0xc8bd,
-0xc398,0xc8be,0xc399,0xc39a,0xc39b,0xc39c,0xc39d,0xc39e,
-0xc8bf,0xc39f,0xc3a0,0xc441,0xc8c0,0xc442,0xc443,0xc444,
-0xc8c1,0xc445,0xc446,0xc447,0xc448,0xc449,0xc44a,0xc44b,
-0xc44c,0xc8c2,0xc44d,0xc8c3,0xc44e,0xc44f,0xc450,0xc451,
-0xc452,0xc453,0xc454,0xc455,0xc8c4,0xc8c5,0xc456,0xc457,
-0xc8c6,0xc458,0xc459,0xc45a,0xc8c7,0xc461,0xc462,0xc463,
-0xc464,0xc8c8,0xc465,0xc466,0xc8c9,0xc467,0xc468,0xc8ca,
-0xc469,0xc8cb,0xc46a,0xc46b,0xc46c,0xc46d,0xc46e,0xc46f,
-0xc8cc,0xc470,0xc471,0xc472,0xc8cd,0xc473,0xc474,0xc475,
-0xc8ce,0xc476,0xc477,0xc478,0xc479,0xc47a,0xc481,0xc482,
-0xc8cf,0xc483,0xc484,0xc485,0xc486,0xc8d0,0xc487,0xc488,
-0xc489,0xc48a,0xc48b,0xc48c,0xc8d1,0xc8d2,0xc48d,0xc48e,
-0xc8d3,0xc48f,0xc490,0xc491,0xc8d4,0xc492,0xc493,0xc494,
-0xc495,0xc496,0xc497,0xc498,0xc499,0xc49a,0xc49b,0xc49c,
-0xc49d,0xc8d5,0xc49e,0xc49f,0xc4a0,0xc541,0xc542,0xc543,
-0xc8d6,0xc8d7,0xc544,0xc545,0xc8d8,0xc546,0xc547,0xc548,
-0xc8d9,0xc549,0xc54a,0xc54b,0xc54c,0xc54d,0xc54e,0xc54f,
-0xc8da,0xc8db,0xc550,0xc8dc,0xc551,0xc8dd,0xc552,0xc553,
-0xc554,0xc555,0xc556,0xc557,0xc8de,0xc8df,0xc558,0xc559,
-0xc8e0,0xc55a,0xc561,0xc562,0xc8e1,0xc563,0xc564,0xc565,
-0xc566,0xc567,0xc568,0xc569,0xc8e2,0xc56a,0xc56b,0xc8e3,
-0xc56c,0xc8e4,0xc56d,0xc56e,0xc56f,0xc570,0xc571,0xc572,
-0xc8e5,0xc8e6,0xc573,0xc574,0xc8e7,0xc575,0xc8e8,0xc8e9,
-0xc8ea,0xc8eb,0xc576,0xc577,0xc578,0xc579,0xc57a,0xc581,
-0xc8ec,0xc8ed,0xc582,0xc8ee,0xc583,0xc8ef,0xc584,0xc585,
-0xc586,0xc8f0,0xc587,0xc588,0xc8f1,0xc589,0xc58a,0xc58b,
-0xc8f2,0xc58c,0xc58d,0xc58e,0xc8f3,0xc58f,0xc590,0xc591,
-0xc592,0xc593,0xc594,0xc595,0xc8f4,0xc8f5,0xc596,0xc597,
-0xc598,0xc8f6,0xc599,0xc59a,0xc59b,0xc59c,0xc59d,0xc59e,
-0xc8f7,0xc8f8,0xc59f,0xc5a0,0xc8f9,0xc641,0xc642,0xc643,
-0xc8fa,0xc644,0xc645,0xc646,0xc647,0xc648,0xc649,0xc64a,
-0xc8fb,0xc8fc,0xc64b,0xc8fd,0xc64c,0xc8fe,0xc64d,0xc64e,
-0xc64f,0xc650,0xc651,0xc652};
-
-static const int ucs_s_uhc_table_min = 0xab00;
-static const int ucs_s_uhc_table_max = 0xab00 + (sizeof(ucs_s_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_r1_uhc_table[] = {
-/* 0xf800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbd0,0xcbd6,0xcbe7,0xcdcf,0xcde8,0xcead,0xcffb,0xd0a2,
-0xd0b8,0xd0d0,0xd0dd,0xd1d4,0xd1d5,0xd1d8,0xd1db,0xd1dc,
-0xd1dd,0xd1de,0xd1df,0xd1e0,0xd1e2,0xd1e3,0xd1e4,0xd1e5,
-0xd1e6,0xd1e8,0xd1e9,0xd1ea,0xd1eb,0xd1ed,0xd1ef,0xd1f0,
-0xd1f2,0xd1f6,0xd1fa,0xd1fc,0xd1fd,0xd1fe,0xd2a2,0xd2a3,
-0xd2a7,0xd2a8,0xd2a9,0xd2aa,0xd2ab,0xd2ad,0xd2b2,0xd2be,
-0xd2c2,0xd2c3,0xd2c4,0xd2c6,0xd2c7,0xd2c8,0xd2c9,0xd2ca,
-0xd2cb,0xd2cd,0xd2ce,0xd2cf,0xd2d0,0xd2d1,0xd2d2,0xd2d3,
-0xd2d4,0xd2d5,0xd2d6,0xd2d7,0xd2d9,0xd2da,0xd2de,0xd2df,
-0xd2e1,0xd2e2,0xd2e4,0xd2e5,0xd2e6,0xd2e7,0xd2e8,0xd2e9,
-0xd2ea,0xd2eb,0xd2f0,0xd2f1,0xd2f2,0xd2f3,0xd2f4,0xd2f5,
-0xd2f7,0xd2f8,0xd4e6,0xd4fc,0xd5a5,0xd5ab,0xd5ae,0xd6b8,
-0xd6cd,0xd7cb,0xd7e4,0xdbc5,0xdbe4,0xdca5,0xdda5,0xddd5,
-0xddf4,0xdefc,0xdefe,0xdfb3,0xdfe1,0xdfe8,0xe0f1,0xe1ad,
-0xe1ed,0xe3f5,0xe4a1,0xe4a9,0xe5ae,0xe5b1,0xe5b2,0xe5b9,
-0xe5bb,0xe5bc,0xe5c4,0xe5ce,0xe5d0,0xe5d2,0xe5d6,0xe5fa,
-0xe5fb,0xe5fc,0xe5fe,0xe6a1,0xe6a4,0xe6a7,0xe6ad,0xe6af,
-0xe6b0,0xe6b1,0xe6b3,0xe6b7,0xe6b8,0xe6bc,0xe6c4,0xe6c6,
-0xe6c7,0xe6ca,0xe6d2,0xe6d6,0xe6d9,0xe6dc,0xe6df,0xe6e1,
-0xe6e4,0xe6e5,0xe6e6,0xe6e8,0xe6ea,0xe6eb,0xe6ec,0xe6ef,
-0xe6f1,0xe6f2,0xe6f5,0xe6f6,0xe6f7,0xe6f9,0xe7a1,0xe7a6,
-0xe7a9,0xe7aa,0xe7ac,0xe7ad,0xe7b0,0xe7bf,0xe7c1,0xe7c6,
-0xe7c7,0xe7cb,0xe7cd,0xe7cf,0xe7d0,0xe7d3,0xe7df,0xe7e4,
-0xe7e6,0xe7f7,0xe8e7,0xe8e8,0xe8f0,0xe8f1,0xe8f7,0xe8f9,
-0xe8fb,0xe8fe,0xe9a7,0xe9ac,0xe9cc,0xe9f7,0xeac1,0xeae5,
-0xeaf4,0xeaf7,0xeafc,0xeafe,0xeba4,0xeba7,0xeba9,0xebaa,
-0xebba,0xebbb,0xebbd,0xebc1,0xebc2,0xebc6,0xebc7,0xebcc,
-0xebcf,0xebd0,0xebd1,0xebd2,0xebd8,0xeca6,0xeca7,0xecaa,
-0xecaf,0xecb0,0xecb1,0xecb2,0xecb5,0xecb8,0xecba,0xecc0,
-0xecc1,0xecc5,0xecc6,0xecc9,0xecca,0xecd5,0xecdd,0xecde,
-0xece1,0xece4,0xece7,0xece8,0xecf7,0xecf8,0xecfa,0xeda1,
-0xeda2,0xeda3,0xedee,0xeedb,0xf2bd,0xf2fa,0xf3b1,0xf4a7,
-0xf4ee,0xf6f4,0xf6f6,0xf7b8,0xf7c8,0xf7d3,0xf8db,0xf8f0,
-0xfaa1,0xfaa2,0xfae6,0xfca9};
-
-static const int ucs_r1_uhc_table_min = 0xf800;
-static const int ucs_r1_uhc_table_max = 0xf800 + (sizeof(ucs_r1_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_r2_uhc_table[] = {
-/* 0xff00 */
-0x0000,0xa3a1,0xa3a2,0xa3a3,0xa3a4,0xa3a5,0xa3a6,0xa3a7,
-0xa3a8,0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,
-0xa3b0,0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,
-0xa3b8,0xa3b9,0xa3ba,0xa3bb,0xa3bc,0xa3bd,0xa3be,0xa3bf,
-0xa3c0,0xa3c1,0xa3c2,0xa3c3,0xa3c4,0xa3c5,0xa3c6,0xa3c7,
-0xa3c8,0xa3c9,0xa3ca,0xa3cb,0xa3cc,0xa3cd,0xa3ce,0xa3cf,
-0xa3d0,0xa3d1,0xa3d2,0xa3d3,0xa3d4,0xa3d5,0xa3d6,0xa3d7,
-0xa3d8,0xa3d9,0xa3da,0xa3db,0xa1ac,0xa3dd,0xa3de,0xa3df,
-0xa3e0,0xa3e1,0xa3e2,0xa3e3,0xa3e4,0xa3e5,0xa3e6,0xa3e7,
-0xa3e8,0xa3e9,0xa3ea,0xa3eb,0xa3ec,0xa3ed,0xa3ee,0xa3ef,
-0xa3f0,0xa3f1,0xa3f2,0xa3f3,0xa3f4,0xa3f5,0xa3f6,0xa3f7,
-0xa3f8,0xa3f9,0xa3fa,0xa3fb,0xa3fc,0xa3fd,0xa2a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1cb,0xa1cc,0xa1fe,0xa3fe,0x0000,0xa1cd,0xa3dc};
-
-static const int ucs_r2_uhc_table_min = 0xff00;
-static const int ucs_r2_uhc_table_max = 0xff00 + (sizeof (ucs_r2_uhc_table) / sizeof (unsigned short));
-
-
-
diff --git a/ext/mbstring/unicode_table_ru.h b/ext/mbstring/unicode_table_ru.h
deleted file mode 100644
index 74d02fef34..0000000000
--- a/ext/mbstring/unicode_table_ru.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// cp1251 to Unicode table
-static const unsigned short cp1251_ucs_table[] = {
- 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
- 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f,
- 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
- 0x003f, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f,
- 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
- 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
- 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
- 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f
-};
-static const int cp1251_ucs_table_min = 0x80;
-static const int cp1251_ucs_table_len = (sizeof (cp1251_ucs_table) / sizeof (unsigned short));
-static const int cp1251_ucs_table_max = 0x80 + (sizeof (cp1251_ucs_table) / sizeof (unsigned short));
-
-// cp866_DOSCyrillicRussian to Unicode table
-static const unsigned short cp866_ucs_table[] = {
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
- 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
- 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
- 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
- 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
- 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
- 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0
-};
-static const int cp866_ucs_table_min = 0x80;
-static const int cp866_ucs_table_len = (sizeof (cp866_ucs_table) / sizeof (unsigned short));
-static const int cp866_ucs_table_max = 0x80 + (sizeof (cp866_ucs_table) / sizeof (unsigned short));
-
-// KOI8-R (RFC1489) to Unicode
-static const unsigned short koi8r_ucs_table[] = {
- 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
- 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
- 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
- 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
- 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
- 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
- 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
- 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
- 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
- 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
- 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
- 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
- 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
- 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
- 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
- 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
-};
-static const int koi8r_ucs_table_min = 0x80;
-static const int koi8r_ucs_table_len = (sizeof (koi8r_ucs_table) / sizeof (unsigned short));
-static const int koi8r_ucs_table_max = 0x80 + (sizeof (koi8r_ucs_table) / sizeof (unsigned short));
-
diff --git a/ext/mbstring/unicode_table_tw.h b/ext/mbstring/unicode_table_tw.h
deleted file mode 100644
index ac29cc818a..0000000000
--- a/ext/mbstring/unicode_table_tw.h
+++ /dev/null
@@ -1,11215 +0,0 @@
-/*
- * Unicode table
- */
-
-/* CNS11643 -> UCS */
-static const unsigned short cns11643_1_ucs_table[] = {
-0x3000,0xff0c,0x3001,0x3002,0xff0e,0x30fb,0xff1b,0xff1a,
-0xff1f,0xff01,0xfe30,0x2026,0x2025,0xfe50,0xfe51,0xfe52,
-0x00b7,0xfe54,0xfe55,0xfe56,0xfe57,0xfe31,0x2014,0xfe32,
-0x2013,0x0000,0x0000,0x0000,0x0000,0xff08,0xff09,0xfe35,
-0xfe36,0xff5b,0xff5d,0xfe37,0xfe38,0x3014,0x3015,0xfe39,
-0xfe3a,0x3010,0x3011,0xfe3b,0xfe3c,0x300a,0x300b,0xfe3d,
-0xfe3e,0x3008,0x3009,0xfe3f,0xfe40,0x300c,0x300d,0xfe41,
-0xfe42,0x300e,0x300f,0xfe43,0xfe44,0xfe59,0xfe5a,0xfe5b,
-0xfe5c,0xfe5d,0xfe5e,0x2018,0x2019,0x201c,0x201d,0x301d,
-0x301e,0x2032,0x2035,0xff03,0xff06,0xff0a,0x203b,0x00a7,
-0x3003,0x25cb,0x25cf,0x25b3,0x25b2,0x25ce,0x2606,0x2605,
-0x25c7,0x25c6,0x25a1,0x25a0,0x25bd,0x25bc,0x32a3,0x2105,
-0x203e,0x0000,0xff3f,0x0000,0xfe49,0xfe4a,0xfe4d,0xfe4e,
-0xfe4b,0xfe4c,0xfe5f,0xfe60,0xfe61,0xff0b,0xff0d,0x00d7,
-0x00f7,0x00b1,0x221a,0xff1c,0xff1e,0xff1d,0x2266,0x2267,
-0x2260,0x221e,0x2252,0x2261,0xfe62,0xfe63,0xfe64,0xfe66,
-0xfe65,0x223c,0x2229,0x222a,0x22a5,0x2220,0x221f,0x22bf,
-0x33d2,0x33d1,0x222b,0x222e,0x2235,0x2234,0x2640,0x2642,
-0x2641,0x2609,0x2191,0x2193,0x2192,0x2190,0x2196,0x2197,
-0x2199,0x2198,0x2016,0xff5c,0xff0f,0xff3c,0x2215,0xfe68,
-0xff04,0xffe5,0x3012,0xffe0,0xffe1,0xff05,0xff20,0x2103,
-0x2109,0xfe69,0xfe6a,0xfe6b,0x33d5,0x339c,0x339d,0x339e,
-0x33ce,0x33a1,0x338e,0x338f,0x33c4,0x00b0,0x5159,0x515b,
-0x515e,0x515d,0x5161,0x5163,0x55e7,0x74e9,0x7cce,0x2581,
-0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x2588,0x258f,
-0x258e,0x258d,0x258c,0x258b,0x258a,0x2589,0x253c,0x2534,
-0x252c,0x2524,0x251c,0x2594,0x2500,0x2502,0x2595,0x250c,
-0x2510,0x2514,0x2518,0x256d,0x256e,0x2570,0x256f,0x2550,
-0x255e,0x256a,0x2561,0x25e2,0x25e3,0x25e5,0x25e4,0x2571,
-0x2572,0x2573,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,
-0xff16,0xff17,0xff18,0xff19,0x2160,0x2161,0x2162,0x2163,
-0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x3021,0x3022,
-0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029,0x0000,
-0x5344,0x0000,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,
-0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,
-0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,
-0xff37,0xff38,0xff39,0xff3a,0xff41,0xff42,0xff43,0xff44,
-0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c,
-0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54,
-0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0x0391,0x0392,
-0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a,
-0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,0x03a1,0x03a3,
-0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2,
-0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,0x03b9,0x03ba,
-0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3,
-0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,0x3105,0x3106,
-0x3107,0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,
-0x310f,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,
-0x3117,0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,
-0x311f,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,
-0x3127,0x3128,0x3129,0x02d9,0x02c9,0x02ca,0x02c7,0x02cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2460,0x2461,
-0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,
-0x2474,0x2475,0x2476,0x2477,0x2478,0x2479,0x247a,0x247b,
-0x247c,0x247d,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,
-0x2176,0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2400,0x2401,
-0x2402,0x2403,0x2404,0x2405,0x2406,0x2407,0x2408,0x2409,
-0x240a,0x240b,0x240c,0x240d,0x240e,0x240f,0x2410,0x2411,
-0x2412,0x2413,0x2414,0x2415,0x2416,0x2417,0x2418,0x2419,
-0x241a,0x241b,0x241c,0x241d,0x241e,0x241f,0x2421,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x4e00,0x4e59,0x4e01,0x4e03,0x4e43,0x4e5d,
-0x4e86,0x4e8c,0x4eba,0x513f,0x5165,0x516b,0x51e0,0x5200,
-0x5201,0x529b,0x5315,0x5341,0x535c,0x53c8,0x4e09,0x4e0b,
-0x4e08,0x4e0a,0x4e2b,0x4e38,0x51e1,0x4e45,0x4e48,0x4e5f,
-0x4e5e,0x4e8e,0x4ea1,0x5140,0x5203,0x52fa,0x5343,0x53c9,
-0x53e3,0x571f,0x58eb,0x5915,0x5927,0x5973,0x5b50,0x5b51,
-0x5b53,0x5bf8,0x5c0f,0x5c22,0x5c38,0x5c71,0x5ddd,0x5de5,
-0x5df1,0x5df2,0x5df3,0x5dfe,0x5e72,0x5efe,0x5f0b,0x5f13,
-0x624d,0x4e11,0x4e10,0x4e0d,0x4e2d,0x4e30,0x4e39,0x4e4b,
-0x5c39,0x4e88,0x4e91,0x4e95,0x4e92,0x4e94,0x4ea2,0x4ec1,
-0x4ec0,0x4ec3,0x4ec6,0x4ec7,0x4ecd,0x4eca,0x4ecb,0x4ec4,
-0x5143,0x5141,0x5167,0x516d,0x516e,0x516c,0x5197,0x51f6,
-0x5206,0x5207,0x5208,0x52fb,0x52fe,0x52ff,0x5316,0x5339,
-0x5348,0x5347,0x5345,0x535e,0x5384,0x53cb,0x53ca,0x53cd,
-0x58ec,0x5929,0x592b,0x592a,0x592d,0x5b54,0x5c11,0x5c24,
-0x5c3a,0x5c6f,0x5df4,0x5e7b,0x5eff,0x5f14,0x5f15,0x5fc3,
-0x6208,0x6236,0x624b,0x624e,0x652f,0x6587,0x6597,0x65a4,
-0x65b9,0x65e5,0x66f0,0x6708,0x6728,0x6b20,0x6b62,0x6b79,
-0x6bcb,0x6bd4,0x6bdb,0x6c0f,0x6c34,0x706b,0x722a,0x7236,
-0x723b,0x7247,0x7259,0x725b,0x72ac,0x738b,0x4e19,0x4e16,
-0x4e15,0x4e14,0x4e18,0x4e3b,0x4e4d,0x4e4f,0x4e4e,0x4ee5,
-0x4ed8,0x4ed4,0x4ed5,0x4ed6,0x4ed7,0x4ee3,0x4ee4,0x4ed9,
-0x4ede,0x5145,0x5144,0x5189,0x518a,0x51ac,0x51f9,0x51fa,
-0x51f8,0x520a,0x52a0,0x529f,0x5305,0x5306,0x5317,0x531d,
-0x4edf,0x534a,0x5349,0x5361,0x5360,0x536f,0x536e,0x53bb,
-0x53ef,0x53e4,0x53f3,0x53ec,0x53ee,0x53e9,0x53e8,0x53fc,
-0x53f8,0x53f5,0x53eb,0x53e6,0x53ea,0x53f2,0x53f1,0x53f0,
-0x53e5,0x53ed,0x53fb,0x56db,0x56da,0x5916,0x592e,0x5931,
-0x5974,0x5976,0x5b55,0x5b83,0x5c3c,0x5de8,0x5de7,0x5de6,
-0x5e02,0x5e03,0x5e73,0x5e7c,0x5f01,0x5f18,0x5f17,0x5fc5,
-0x620a,0x6253,0x6254,0x6252,0x6251,0x65a5,0x65e6,0x672e,
-0x672c,0x672a,0x672b,0x672d,0x6b63,0x6bcd,0x6c11,0x6c10,
-0x6c38,0x6c41,0x6c40,0x6c3e,0x72af,0x7384,0x7389,0x74dc,
-0x74e6,0x7518,0x751f,0x7528,0x7529,0x7530,0x7531,0x7532,
-0x7533,0x758b,0x767d,0x76ae,0x76bf,0x76ee,0x77db,0x77e2,
-0x77f3,0x793a,0x79be,0x7a74,0x7acb,0x4e1e,0x4e1f,0x4e52,
-0x4e53,0x4e69,0x4e99,0x4ea4,0x4ea6,0x4ea5,0x4eff,0x4f09,
-0x4f19,0x4f0a,0x4f15,0x4f0d,0x4f10,0x4f11,0x4f0f,0x4ef2,
-0x4ef6,0x4efb,0x4ef0,0x4ef3,0x4efd,0x4f01,0x4f0b,0x5149,
-0x5147,0x5146,0x5148,0x5168,0x5171,0x518d,0x51b0,0x5217,
-0x5211,0x5212,0x520e,0x5216,0x52a3,0x5308,0x5321,0x5320,
-0x5370,0x5371,0x5409,0x540f,0x540c,0x540a,0x5410,0x5401,
-0x540b,0x5404,0x5411,0x540d,0x5408,0x5403,0x540e,0x5406,
-0x5412,0x56e0,0x56de,0x56dd,0x5733,0x5730,0x5728,0x572d,
-0x572c,0x572f,0x5729,0x5919,0x591a,0x5937,0x5938,0x5984,
-0x5978,0x5983,0x597d,0x5979,0x5982,0x5981,0x5b57,0x5b58,
-0x5b87,0x5b88,0x5b85,0x5b89,0x5bfa,0x5c16,0x5c79,0x5dde,
-0x5e06,0x5e76,0x5e74,0x5f0f,0x5f1b,0x5fd9,0x5fd6,0x620e,
-0x620c,0x620d,0x6210,0x6263,0x625b,0x6258,0x6536,0x65e9,
-0x65e8,0x65ec,0x65ed,0x66f2,0x66f3,0x6709,0x673d,0x6734,
-0x6731,0x6735,0x6b21,0x6b64,0x6b7b,0x6c16,0x6c5d,0x6c57,
-0x6c59,0x6c5f,0x6c60,0x6c50,0x6c55,0x6c61,0x6c5b,0x6c4d,
-0x6c4e,0x7070,0x725f,0x725d,0x767e,0x7af9,0x7c73,0x7cf8,
-0x7f36,0x7f8a,0x7fbd,0x8001,0x8003,0x800c,0x8012,0x8033,
-0x807f,0x8089,0x808b,0x808c,0x81e3,0x81ea,0x81f3,0x81fc,
-0x820c,0x821b,0x821f,0x826e,0x8272,0x827e,0x866b,0x8840,
-0x884c,0x8863,0x897f,0x9621,0x4e32,0x4ea8,0x4f4d,0x4f4f,
-0x4f47,0x4f57,0x4f5e,0x4f34,0x4f5b,0x4f55,0x4f30,0x4f50,
-0x4f51,0x4f3d,0x4f3a,0x4f38,0x4f43,0x4f54,0x4f3c,0x4f46,
-0x4f63,0x4f5c,0x4f60,0x4f2f,0x4f4e,0x4f36,0x4f59,0x4f5d,
-0x4f48,0x4f5a,0x514c,0x514b,0x514d,0x5175,0x51b6,0x51b7,
-0x5225,0x5224,0x5229,0x522a,0x5228,0x52ab,0x52a9,0x52aa,
-0x52ac,0x5323,0x5373,0x5375,0x541d,0x542d,0x541e,0x543e,
-0x5426,0x544e,0x5427,0x5446,0x5443,0x5433,0x5448,0x5442,
-0x541b,0x5429,0x544a,0x5439,0x543b,0x5438,0x542e,0x5435,
-0x5436,0x5420,0x543c,0x5440,0x5431,0x542b,0x541f,0x542c,
-0x56ea,0x56f0,0x56e4,0x56eb,0x574a,0x5751,0x5740,0x574d,
-0x5747,0x574e,0x573e,0x5750,0x574f,0x573b,0x58ef,0x593e,
-0x599d,0x5992,0x59a8,0x599e,0x59a3,0x5999,0x5996,0x598d,
-0x59a4,0x5993,0x598a,0x59a5,0x5b5d,0x5b5c,0x5b5a,0x5b5b,
-0x5b8c,0x5b8b,0x5b8f,0x5c2c,0x5c40,0x5c41,0x5c3f,0x5c3e,
-0x5c90,0x5c91,0x5c94,0x5c8c,0x5deb,0x5e0c,0x5e8f,0x5e87,
-0x5e8a,0x5ef7,0x5f04,0x5f1f,0x5f64,0x5f62,0x5f77,0x5f79,
-0x5fd8,0x5fcc,0x5fd7,0x5fcd,0x5ff1,0x5feb,0x5ff8,0x5fea,
-0x6212,0x6211,0x6284,0x6297,0x6296,0x6280,0x6276,0x6289,
-0x626d,0x628a,0x627c,0x627e,0x6279,0x6273,0x6292,0x626f,
-0x6298,0x626e,0x6295,0x6293,0x6291,0x6286,0x6539,0x653b,
-0x6538,0x65f1,0x66f4,0x675f,0x674e,0x674f,0x6750,0x6751,
-0x675c,0x6756,0x675e,0x6749,0x6746,0x6760,0x6753,0x6757,
-0x6b65,0x6bcf,0x6c42,0x6c5e,0x6c99,0x6c81,0x6c88,0x6c89,
-0x6c85,0x6c9b,0x6c6a,0x6c7a,0x6c90,0x6c70,0x6c8c,0x6c68,
-0x6c96,0x6c92,0x6c7d,0x6c83,0x6c72,0x6c7e,0x6c74,0x6c86,
-0x6c76,0x6c8d,0x6c94,0x6c98,0x6c82,0x7076,0x707c,0x707d,
-0x7078,0x7262,0x7261,0x7260,0x72c4,0x72c2,0x7396,0x752c,
-0x752b,0x7537,0x7538,0x7682,0x76ef,0x77e3,0x79c1,0x79c0,
-0x79bf,0x7a76,0x7cfb,0x7f55,0x8096,0x8093,0x809d,0x8098,
-0x809b,0x809a,0x80b2,0x826f,0x8292,0x828b,0x828d,0x898b,
-0x89d2,0x8a00,0x8c37,0x8c46,0x8c55,0x8c9d,0x8d64,0x8d70,
-0x8db3,0x8eab,0x8eca,0x8f9b,0x8fb0,0x8fc2,0x8fc6,0x8fc5,
-0x8fc4,0x5de1,0x9091,0x90a2,0x90aa,0x90a6,0x90a3,0x9149,
-0x91c6,0x91cc,0x9632,0x962e,0x9631,0x962a,0x962c,0x4e26,
-0x4e56,0x4e73,0x4e8b,0x4e9b,0x4e9e,0x4eab,0x4eac,0x4f6f,
-0x4f9d,0x4f8d,0x4f73,0x4f7f,0x4f6c,0x4f9b,0x4f8b,0x4f86,
-0x4f83,0x4f70,0x4f75,0x4f88,0x4f69,0x4f7b,0x4f96,0x4f7e,
-0x4f8f,0x4f91,0x4f7a,0x5154,0x5152,0x5155,0x5169,0x5177,
-0x5176,0x5178,0x51bd,0x51fd,0x523b,0x5238,0x5237,0x523a,
-0x5230,0x522e,0x5236,0x5241,0x52be,0x52bb,0x5352,0x5354,
-0x5353,0x5351,0x5366,0x5377,0x5378,0x5379,0x53d6,0x53d4,
-0x53d7,0x5473,0x5475,0x5496,0x5478,0x5495,0x5480,0x547b,
-0x5477,0x5484,0x5492,0x5486,0x547c,0x5490,0x5471,0x5476,
-0x548c,0x549a,0x5462,0x5468,0x548b,0x547d,0x548e,0x56fa,
-0x5783,0x5777,0x576a,0x5769,0x5761,0x5766,0x5764,0x577c,
-0x591c,0x5949,0x5947,0x5948,0x5944,0x5954,0x59be,0x59bb,
-0x59d4,0x59b9,0x59ae,0x59d1,0x59c6,0x59d0,0x59cd,0x59cb,
-0x59d3,0x59ca,0x59af,0x59b3,0x59d2,0x59c5,0x5b5f,0x5b64,
-0x5b63,0x5b97,0x5b9a,0x5b98,0x5b9c,0x5b99,0x5b9b,0x5c1a,
-0x5c48,0x5c45,0x5c46,0x5cb7,0x5ca1,0x5cb8,0x5ca9,0x5cab,
-0x5cb1,0x5cb3,0x5e18,0x5e1a,0x5e16,0x5e15,0x5e1b,0x5e11,
-0x5e78,0x5e9a,0x5e97,0x5e9c,0x5e95,0x5e96,0x5ef6,0x5f26,
-0x5f27,0x5f29,0x5f80,0x5f81,0x5f7f,0x5f7c,0x5fdd,0x5fe0,
-0x5ffd,0x5ff5,0x5fff,0x600f,0x6014,0x602f,0x6035,0x6016,
-0x602a,0x6015,0x6021,0x6027,0x6029,0x602b,0x601b,0x6216,
-0x6215,0x623f,0x623e,0x6240,0x627f,0x62c9,0x62cc,0x62c4,
-0x62bf,0x62c2,0x62b9,0x62d2,0x62db,0x62ab,0x62d3,0x62d4,
-0x62cb,0x62c8,0x62a8,0x62bd,0x62bc,0x62d0,0x62d9,0x62c7,
-0x62cd,0x62b5,0x62da,0x62b1,0x62d8,0x62d6,0x62d7,0x62c6,
-0x62ac,0x62ce,0x653e,0x65a7,0x65bc,0x65fa,0x6614,0x6613,
-0x660c,0x6606,0x6602,0x660e,0x6600,0x660f,0x6615,0x660a,
-0x6607,0x670d,0x670b,0x676d,0x678b,0x6795,0x6771,0x679c,
-0x6773,0x6777,0x6787,0x679d,0x6797,0x676f,0x6770,0x677f,
-0x6789,0x677e,0x6790,0x6775,0x679a,0x6793,0x677c,0x676a,
-0x6772,0x6b23,0x6b66,0x6b67,0x6b7f,0x6c13,0x6c1b,0x6ce3,
-0x6ce8,0x6cf3,0x6cb1,0x6ccc,0x6ce5,0x6cb3,0x6cbd,0x6cbe,
-0x6cbc,0x6ce2,0x6cab,0x6cd5,0x6cd3,0x6cb8,0x6cc4,0x6cb9,
-0x6cc1,0x6cae,0x6cd7,0x6cc5,0x6cf1,0x6cbf,0x6cbb,0x6ce1,
-0x6cdb,0x6cca,0x6cac,0x6cef,0x6cdc,0x6cd6,0x6ce0,0x7095,
-0x708e,0x7092,0x708a,0x7099,0x722c,0x722d,0x7238,0x7248,
-0x7267,0x7269,0x72c0,0x72ce,0x72d9,0x72d7,0x72d0,0x73a9,
-0x73a8,0x739f,0x73ab,0x73a5,0x753d,0x759d,0x7599,0x759a,
-0x7684,0x76c2,0x76f2,0x76f4,0x77e5,0x77fd,0x793e,0x7940,
-0x7941,0x79c9,0x79c8,0x7a7a,0x7a79,0x7afa,0x7cfe,0x7f54,
-0x7f8c,0x7f8b,0x8005,0x80ba,0x80a5,0x80a2,0x80b1,0x80a1,
-0x80ab,0x80a9,0x80b4,0x80aa,0x80af,0x81e5,0x81fe,0x820d,
-0x82b3,0x829d,0x8299,0x82ad,0x82bd,0x829f,0x82b9,0x82b1,
-0x82ac,0x82a5,0x82af,0x82b8,0x82a3,0x82b0,0x82be,0x82b7,
-0x864e,0x8671,0x521d,0x8868,0x8ecb,0x8fce,0x8fd4,0x8fd1,
-0x90b5,0x90b8,0x90b1,0x90b6,0x91c7,0x91d1,0x9577,0x9580,
-0x961c,0x9640,0x963f,0x963b,0x9644,0x9642,0x96b9,0x96e8,
-0x9752,0x975e,0x4e9f,0x4ead,0x4eae,0x4fe1,0x4fb5,0x4faf,
-0x4fbf,0x4fe0,0x4fd1,0x4fcf,0x4fdd,0x4fc3,0x4fb6,0x4fd8,
-0x4fdf,0x4fca,0x4fd7,0x4fae,0x4fd0,0x4fc4,0x4fc2,0x4fda,
-0x4fce,0x4fde,0x4fb7,0x5157,0x5192,0x5191,0x51a0,0x524e,
-0x5243,0x524a,0x524d,0x524c,0x524b,0x5247,0x52c7,0x52c9,
-0x52c3,0x52c1,0x530d,0x5357,0x537b,0x539a,0x53db,0x54ac,
-0x54c0,0x54a8,0x54ce,0x54c9,0x54b8,0x54a6,0x54b3,0x54c7,
-0x54c2,0x54bd,0x54aa,0x54c1,0x54c4,0x54c8,0x54af,0x54ab,
-0x54b1,0x54bb,0x54a9,0x54a7,0x54bf,0x56ff,0x5782,0x578b,
-0x57a0,0x57a3,0x57a2,0x57ce,0x57ae,0x5793,0x5955,0x5951,
-0x594f,0x594e,0x5950,0x59dc,0x59d8,0x59ff,0x59e3,0x59e8,
-0x5a03,0x59e5,0x59ea,0x59da,0x59e6,0x5a01,0x59fb,0x5b69,
-0x5ba3,0x5ba6,0x5ba4,0x5ba2,0x5ba5,0x5c01,0x5c4e,0x5c4f,
-0x5c4d,0x5c4b,0x5cd9,0x5cd2,0x5df7,0x5e1d,0x5e25,0x5e1f,
-0x5e7d,0x5ea0,0x5ea6,0x5efa,0x5f08,0x5f2d,0x5f65,0x5f88,
-0x5f85,0x5f8a,0x5f8b,0x5f87,0x5f8c,0x5f89,0x6012,0x601d,
-0x6020,0x6025,0x600e,0x6028,0x604d,0x6070,0x6068,0x6062,
-0x6046,0x6043,0x606c,0x606b,0x606a,0x6064,0x6241,0x62dc,
-0x6316,0x6309,0x62fc,0x62ed,0x6301,0x62ee,0x62fd,0x6307,
-0x62f1,0x62f7,0x62ef,0x62ec,0x62fe,0x62f4,0x6311,0x6302,
-0x653f,0x6545,0x65ab,0x65bd,0x65e2,0x6625,0x662d,0x6620,
-0x6627,0x662f,0x661f,0x6628,0x6631,0x6624,0x66f7,0x67ff,
-0x67d3,0x67f1,0x67d4,0x67d0,0x67ec,0x67b6,0x67af,0x67f5,
-0x67e9,0x67ef,0x67c4,0x67d1,0x67b4,0x67da,0x67e5,0x67b8,
-0x67cf,0x67de,0x67f3,0x67b0,0x67d9,0x67e2,0x67dd,0x67d2,
-0x6b6a,0x6b83,0x6b86,0x6bb5,0x6bd2,0x6bd7,0x6c1f,0x6cc9,
-0x6d0b,0x6d32,0x6d2a,0x6d41,0x6d25,0x6d0c,0x6d31,0x6d1e,
-0x6d17,0x6d3b,0x6d3d,0x6d3e,0x6d36,0x6d1b,0x6cf5,0x6d39,
-0x6d27,0x6d38,0x6d29,0x6d2e,0x6d35,0x6d0e,0x6d2b,0x70ab,
-0x70ba,0x70b3,0x70ac,0x70af,0x70ad,0x70b8,0x70ae,0x70a4,
-0x7230,0x7272,0x726f,0x7274,0x72e9,0x72e0,0x72e1,0x73b7,
-0x73ca,0x73bb,0x73b2,0x73cd,0x73c0,0x73b3,0x751a,0x752d,
-0x754f,0x754c,0x754e,0x754b,0x75ab,0x75a4,0x75a5,0x75a2,
-0x75a3,0x7678,0x7686,0x7687,0x7688,0x76c8,0x76c6,0x76c3,
-0x76c5,0x7701,0x76f9,0x76f8,0x7709,0x770b,0x76fe,0x76fc,
-0x7707,0x77dc,0x7802,0x7814,0x780c,0x780d,0x7946,0x7949,
-0x7948,0x7947,0x79b9,0x79ba,0x79d1,0x79d2,0x79cb,0x7a7f,
-0x7a81,0x7aff,0x7afd,0x7c7d,0x7d02,0x7d05,0x7d00,0x7d09,
-0x7d07,0x7d04,0x7d06,0x7f38,0x7f8e,0x7fbf,0x8010,0x800d,
-0x8011,0x8036,0x80d6,0x80e5,0x80da,0x80c3,0x80c4,0x80cc,
-0x80e1,0x80db,0x80ce,0x80de,0x80e4,0x80dd,0x81f4,0x8222,
-0x82e7,0x8303,0x8305,0x82e3,0x82db,0x82e6,0x8304,0x82e5,
-0x8302,0x8309,0x82d2,0x82d7,0x82f1,0x8301,0x82dc,0x82d4,
-0x82d1,0x82de,0x82d3,0x82df,0x82ef,0x8306,0x8650,0x8679,
-0x867b,0x867a,0x884d,0x886b,0x8981,0x89d4,0x8a08,0x8a02,
-0x8a03,0x8c9e,0x8ca0,0x8d74,0x8d73,0x8db4,0x8ecd,0x8ecc,
-0x8ff0,0x8fe6,0x8fe2,0x8fea,0x8fe5,0x8fed,0x8feb,0x8fe4,
-0x8fe8,0x90ca,0x90ce,0x90c1,0x90c3,0x914b,0x914a,0x91cd,
-0x9582,0x9650,0x964b,0x964c,0x964d,0x9762,0x9769,0x97cb,
-0x97ed,0x97f3,0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999,
-0x4e58,0x4eb3,0x500c,0x500d,0x5023,0x4fef,0x5026,0x5025,
-0x4ff8,0x5029,0x5016,0x5006,0x503c,0x501f,0x501a,0x5012,
-0x5011,0x4ffa,0x5000,0x5014,0x5028,0x4ff1,0x5021,0x500b,
-0x5019,0x5018,0x4ff3,0x4fee,0x502d,0x502a,0x4ffe,0x502b,
-0x5009,0x517c,0x51a4,0x51a5,0x51a2,0x51cd,0x51cc,0x51c6,
-0x51cb,0x5256,0x525c,0x5254,0x525b,0x525d,0x532a,0x537f,
-0x539f,0x539d,0x53df,0x54e8,0x5510,0x5501,0x5537,0x54fc,
-0x54e5,0x54f2,0x5506,0x54fa,0x5514,0x54e9,0x54ed,0x54e1,
-0x5509,0x54ee,0x54ea,0x54e6,0x5527,0x5507,0x54fd,0x550f,
-0x5703,0x5704,0x57c2,0x57d4,0x57cb,0x57c3,0x5809,0x590f,
-0x5957,0x5958,0x595a,0x5a11,0x5a18,0x5a1c,0x5a1f,0x5a1b,
-0x5a13,0x59ec,0x5a20,0x5a23,0x5a29,0x5a25,0x5a0c,0x5a09,
-0x5b6b,0x5c58,0x5bb0,0x5bb3,0x5bb6,0x5bb4,0x5bae,0x5bb5,
-0x5bb9,0x5bb8,0x5c04,0x5c51,0x5c55,0x5c50,0x5ced,0x5cfd,
-0x5cfb,0x5cea,0x5ce8,0x5cf0,0x5cf6,0x5d01,0x5cf4,0x5dee,
-0x5e2d,0x5e2b,0x5eab,0x5ead,0x5ea7,0x5f31,0x5f92,0x5f91,
-0x5f90,0x6059,0x6063,0x6065,0x6050,0x6055,0x606d,0x6069,
-0x606f,0x6084,0x609f,0x609a,0x608d,0x6094,0x608c,0x6085,
-0x6096,0x6247,0x62f3,0x6308,0x62ff,0x634e,0x633e,0x632f,
-0x6355,0x6342,0x6346,0x634f,0x6349,0x633a,0x6350,0x633d,
-0x632a,0x632b,0x6328,0x634d,0x634c,0x6548,0x6549,0x6599,
-0x65c1,0x65c5,0x6642,0x6649,0x664f,0x6643,0x6652,0x664c,
-0x6645,0x6641,0x66f8,0x6714,0x6715,0x6717,0x6821,0x6838,
-0x6848,0x6846,0x6853,0x6839,0x6842,0x6854,0x6829,0x68b3,
-0x6817,0x684c,0x6851,0x683d,0x67f4,0x6850,0x6840,0x683c,
-0x6843,0x682a,0x6845,0x6813,0x6818,0x6841,0x6b8a,0x6b89,
-0x6bb7,0x6c23,0x6c27,0x6c28,0x6c26,0x6c24,0x6cf0,0x6d6a,
-0x6d95,0x6d88,0x6d87,0x6d66,0x6d78,0x6d77,0x6d59,0x6d93,
-0x6d6c,0x6d89,0x6d6e,0x6d5a,0x6d74,0x6d69,0x6d8c,0x6d8a,
-0x6d79,0x6d85,0x6d65,0x6d94,0x70ca,0x70d8,0x70e4,0x70d9,
-0x70c8,0x70cf,0x7239,0x7279,0x72fc,0x72f9,0x72fd,0x72f8,
-0x72f7,0x7386,0x73ed,0x7409,0x73ee,0x73e0,0x73ea,0x73de,
-0x7554,0x755d,0x755c,0x755a,0x7559,0x75be,0x75c5,0x75c7,
-0x75b2,0x75b3,0x75bd,0x75bc,0x75b9,0x75c2,0x75b8,0x768b,
-0x76b0,0x76ca,0x76cd,0x76ce,0x7729,0x771f,0x7720,0x7728,
-0x77e9,0x7830,0x7827,0x7838,0x781d,0x7834,0x7837,0x7825,
-0x782d,0x7820,0x781f,0x7832,0x7955,0x7950,0x7960,0x795f,
-0x7956,0x795e,0x795d,0x7957,0x795a,0x79e4,0x79e3,0x79e7,
-0x79df,0x79e6,0x79e9,0x79d8,0x7a84,0x7a88,0x7ad9,0x7b06,
-0x7b11,0x7c89,0x7d21,0x7d17,0x7d0b,0x7d0a,0x7d20,0x7d22,
-0x7d14,0x7d10,0x7d15,0x7d1a,0x7d1c,0x7d0d,0x7d19,0x7d1b,
-0x7f3a,0x7f5f,0x7f94,0x7fc5,0x7fc1,0x8006,0x8004,0x8018,
-0x8015,0x8019,0x8017,0x803d,0x803f,0x80f1,0x8102,0x80f0,
-0x8105,0x80ed,0x80f4,0x8106,0x80f8,0x80f3,0x8108,0x80fd,
-0x810a,0x80fc,0x80ef,0x81ed,0x81ec,0x8200,0x8210,0x822a,
-0x822b,0x8228,0x822c,0x82bb,0x832b,0x8352,0x8354,0x834a,
-0x8338,0x8350,0x8349,0x8335,0x8334,0x834f,0x8332,0x8339,
-0x8336,0x8317,0x8340,0x8331,0x8328,0x8343,0x8654,0x868a,
-0x86aa,0x8693,0x86a4,0x86a9,0x868c,0x86a3,0x869c,0x8870,
-0x8877,0x8881,0x8882,0x887d,0x8879,0x8a18,0x8a10,0x8a0e,
-0x8a0c,0x8a15,0x8a0a,0x8a17,0x8a13,0x8a16,0x8a0f,0x8a11,
-0x8c48,0x8c7a,0x8c79,0x8ca1,0x8ca2,0x8d77,0x8eac,0x8ed2,
-0x8ed4,0x8ecf,0x8fb1,0x9001,0x9006,0x8ff7,0x9000,0x8ffa,
-0x8ff4,0x9003,0x8ffd,0x9005,0x8ff8,0x9095,0x90e1,0x90dd,
-0x90e2,0x9152,0x914d,0x914c,0x91d8,0x91dd,0x91d7,0x91dc,
-0x91d9,0x9583,0x9662,0x9663,0x9661,0x965b,0x965d,0x9664,
-0x9658,0x965e,0x96bb,0x98e2,0x99ac,0x9aa8,0x9ad8,0x9b25,
-0x9b32,0x9b3c,0x4e7e,0x507a,0x507d,0x505c,0x5047,0x5043,
-0x504c,0x505a,0x5049,0x5065,0x5076,0x504e,0x5055,0x5075,
-0x5074,0x5077,0x504f,0x500f,0x506f,0x506d,0x515c,0x5195,
-0x51f0,0x526a,0x526f,0x52d2,0x52d9,0x52d8,0x52d5,0x5310,
-0x530f,0x5319,0x533f,0x5340,0x533e,0x53c3,0x66fc,0x5546,
-0x556a,0x5566,0x5544,0x555e,0x5561,0x5543,0x554a,0x5531,
-0x5556,0x554f,0x5555,0x552f,0x5564,0x5538,0x552e,0x555c,
-0x552c,0x5563,0x5533,0x5541,0x5557,0x5708,0x570b,0x5709,
-0x57df,0x5805,0x580a,0x5806,0x57e0,0x57e4,0x57fa,0x5802,
-0x5835,0x57f7,0x57f9,0x5920,0x5962,0x5a36,0x5a41,0x5a49,
-0x5a66,0x5a6a,0x5a40,0x5a3c,0x5a62,0x5a5a,0x5a46,0x5a4a,
-0x5b70,0x5bc7,0x5bc5,0x5bc4,0x5bc2,0x5bbf,0x5bc6,0x5c09,
-0x5c08,0x5c07,0x5c60,0x5c5c,0x5c5d,0x5d07,0x5d06,0x5d0e,
-0x5d1b,0x5d16,0x5d22,0x5d11,0x5d29,0x5d14,0x5d19,0x5d24,
-0x5d27,0x5d17,0x5de2,0x5e38,0x5e36,0x5e33,0x5e37,0x5eb7,
-0x5eb8,0x5eb6,0x5eb5,0x5ebe,0x5f35,0x5f37,0x5f57,0x5f6c,
-0x5f69,0x5f6b,0x5f97,0x5f99,0x5f9e,0x5f98,0x5fa1,0x5fa0,
-0x5f9c,0x607f,0x60a3,0x6089,0x60a0,0x60a8,0x60cb,0x60b4,
-0x60e6,0x60bd,0x60c5,0x60bb,0x60b5,0x60dc,0x60bc,0x60d8,
-0x60d5,0x60c6,0x60df,0x60b8,0x60da,0x60c7,0x621a,0x621b,
-0x6248,0x63a0,0x63a7,0x6372,0x6396,0x63a2,0x63a5,0x6377,
-0x6367,0x6398,0x63aa,0x6371,0x63a9,0x6389,0x6383,0x639b,
-0x636b,0x63a8,0x6384,0x6388,0x6399,0x63a1,0x63ac,0x6392,
-0x638f,0x6380,0x637b,0x6369,0x6368,0x637a,0x655d,0x6556,
-0x6551,0x6559,0x6557,0x555f,0x654f,0x6558,0x6555,0x6554,
-0x659c,0x659b,0x65ac,0x65cf,0x65cb,0x65cc,0x65ce,0x665d,
-0x665a,0x6664,0x6668,0x6666,0x665e,0x66f9,0x52d7,0x671b,
-0x6881,0x68af,0x68a2,0x6893,0x68b5,0x687f,0x6876,0x68b1,
-0x68a7,0x6897,0x68b0,0x6883,0x68c4,0x68ad,0x6886,0x6885,
-0x6894,0x689d,0x68a8,0x689f,0x68a1,0x6882,0x6b32,0x6bba,
-0x6beb,0x6bec,0x6c2b,0x6d8e,0x6dbc,0x6df3,0x6dd9,0x6db2,
-0x6de1,0x6dcc,0x6de4,0x6dfb,0x6dfa,0x6e05,0x6dc7,0x6dcb,
-0x6daf,0x6dd1,0x6dae,0x6dde,0x6df9,0x6db8,0x6df7,0x6df5,
-0x6dc5,0x6dd2,0x6e1a,0x6db5,0x6dda,0x6deb,0x6dd8,0x6dea,
-0x6df1,0x6dee,0x6de8,0x6dc6,0x6dc4,0x6daa,0x6dec,0x6dbf,
-0x6de6,0x70f9,0x7109,0x710a,0x70fd,0x70ef,0x723d,0x727d,
-0x7281,0x731c,0x731b,0x7316,0x7313,0x7319,0x7387,0x7405,
-0x740a,0x7403,0x7406,0x73fe,0x740d,0x74e0,0x74f6,0x74f7,
-0x751c,0x7522,0x7565,0x7566,0x7562,0x7570,0x758f,0x75d4,
-0x75d5,0x75b5,0x75ca,0x75cd,0x768e,0x76d4,0x76d2,0x76db,
-0x7737,0x773e,0x773c,0x7736,0x7738,0x773a,0x786b,0x7843,
-0x784e,0x7965,0x7968,0x796d,0x79fb,0x7a92,0x7a95,0x7b20,
-0x7b28,0x7b1b,0x7b2c,0x7b26,0x7b19,0x7b1e,0x7b2e,0x7c92,
-0x7c97,0x7c95,0x7d46,0x7d43,0x7d71,0x7d2e,0x7d39,0x7d3c,
-0x7d40,0x7d30,0x7d33,0x7d44,0x7d2f,0x7d42,0x7d32,0x7d31,
-0x7f3d,0x7f9e,0x7f9a,0x7fcc,0x7fce,0x7fd2,0x801c,0x804a,
-0x8046,0x812f,0x8116,0x8123,0x812b,0x8129,0x8130,0x8124,
-0x8202,0x8235,0x8237,0x8236,0x8239,0x838e,0x839e,0x8398,
-0x8378,0x83a2,0x8396,0x83bd,0x83ab,0x8392,0x838a,0x8393,
-0x8389,0x83a0,0x8377,0x837b,0x837c,0x8386,0x83a7,0x8655,
-0x5f6a,0x86c7,0x86c0,0x86b6,0x86c4,0x86b5,0x86c6,0x86cb,
-0x86b1,0x86af,0x86c9,0x8853,0x889e,0x8888,0x88ab,0x8892,
-0x8896,0x888d,0x888b,0x8993,0x898f,0x8a2a,0x8a1d,0x8a23,
-0x8a25,0x8a31,0x8a2d,0x8a1f,0x8a1b,0x8a22,0x8c49,0x8c5a,
-0x8ca9,0x8cac,0x8cab,0x8ca8,0x8caa,0x8ca7,0x8d67,0x8d66,
-0x8dbe,0x8dba,0x8edb,0x8edf,0x9019,0x900d,0x901a,0x9017,
-0x9023,0x901f,0x901d,0x9010,0x9015,0x901e,0x9020,0x900f,
-0x9022,0x9016,0x901b,0x9014,0x90e8,0x90ed,0x90fd,0x9157,
-0x91ce,0x91f5,0x91e6,0x91e3,0x91e7,0x91ed,0x91e9,0x9589,
-0x966a,0x9675,0x9673,0x9678,0x9670,0x9674,0x9676,0x9677,
-0x966c,0x96c0,0x96ea,0x96e9,0x7ae0,0x7adf,0x9802,0x9803,
-0x9b5a,0x9ce5,0x9e75,0x9e7f,0x9ea5,0x9ebb,0x50a2,0x508d,
-0x5085,0x5099,0x5091,0x5080,0x5096,0x5098,0x509a,0x6700,
-0x51f1,0x5272,0x5274,0x5275,0x5269,0x52de,0x52dd,0x52db,
-0x535a,0x53a5,0x557b,0x5580,0x55a7,0x557c,0x558a,0x559d,
-0x5598,0x5582,0x559c,0x55aa,0x5594,0x5587,0x558b,0x5583,
-0x55b3,0x55ae,0x559f,0x553e,0x55b2,0x559a,0x55bb,0x55ac,
-0x55b1,0x557e,0x5589,0x55ab,0x5599,0x570d,0x582f,0x582a,
-0x5834,0x5824,0x5830,0x5831,0x5821,0x581d,0x5820,0x58f9,
-0x58fa,0x5960,0x5a77,0x5a9a,0x5a7f,0x5a92,0x5a9b,0x5aa7,
-0x5b73,0x5b71,0x5bd2,0x5bcc,0x5bd3,0x5bd0,0x5c0a,0x5c0b,
-0x5c31,0x5d4c,0x5d50,0x5d34,0x5d47,0x5dfd,0x5e45,0x5e3d,
-0x5e40,0x5e43,0x5e7e,0x5eca,0x5ec1,0x5ec2,0x5ec4,0x5f3c,
-0x5f6d,0x5fa9,0x5faa,0x5fa8,0x60d1,0x60e1,0x60b2,0x60b6,
-0x60e0,0x611c,0x6123,0x60fa,0x6115,0x60f0,0x60fb,0x60f4,
-0x6168,0x60f1,0x610e,0x60f6,0x6109,0x6100,0x6112,0x621f,
-0x6249,0x63a3,0x638c,0x63cf,0x63c0,0x63e9,0x63c9,0x63c6,
-0x63cd,0x63d2,0x63e3,0x63d0,0x63e1,0x63d6,0x63ed,0x63ee,
-0x6376,0x63f4,0x63ea,0x63db,0x6452,0x63da,0x63f9,0x655e,
-0x6566,0x6562,0x6563,0x6591,0x6590,0x65af,0x666e,0x6670,
-0x6674,0x6676,0x666f,0x6691,0x667a,0x667e,0x6677,0x66fe,
-0x66ff,0x671f,0x671d,0x68fa,0x68d5,0x68e0,0x68d8,0x68d7,
-0x6905,0x68df,0x68f5,0x68ee,0x68e7,0x68f9,0x68d2,0x68f2,
-0x68e3,0x68cb,0x68cd,0x690d,0x6912,0x690e,0x68c9,0x68da,
-0x696e,0x68fb,0x6b3e,0x6b3a,0x6b3d,0x6b98,0x6b96,0x6bbc,
-0x6bef,0x6c2e,0x6c2f,0x6c2c,0x6e2f,0x6e38,0x6e54,0x6e21,
-0x6e32,0x6e67,0x6e4a,0x6e20,0x6e25,0x6e23,0x6e1b,0x6e5b,
-0x6e58,0x6e24,0x6e56,0x6e6e,0x6e2d,0x6e26,0x6e6f,0x6e34,
-0x6e4d,0x6e3a,0x6e2c,0x6e43,0x6e1d,0x6e3e,0x6ecb,0x6e89,
-0x6e19,0x6e4e,0x6e63,0x6e44,0x6e72,0x6e69,0x6e5f,0x7119,
-0x711a,0x7126,0x7130,0x7121,0x7136,0x716e,0x711c,0x724c,
-0x7284,0x7280,0x7336,0x7325,0x7334,0x7329,0x743a,0x742a,
-0x7433,0x7422,0x7425,0x7435,0x7436,0x7434,0x742f,0x741b,
-0x7426,0x7428,0x7525,0x7526,0x756b,0x756a,0x75e2,0x75db,
-0x75e3,0x75d9,0x75d8,0x75de,0x75e0,0x767b,0x767c,0x7696,
-0x7693,0x76b4,0x76dc,0x774f,0x77ed,0x785d,0x786c,0x786f,
-0x7a0d,0x7a08,0x7a0b,0x7a05,0x7a00,0x7a98,0x7a97,0x7a96,
-0x7ae5,0x7ae3,0x7b49,0x7b56,0x7b46,0x7b50,0x7b52,0x7b54,
-0x7b4d,0x7b4b,0x7b4f,0x7b51,0x7c9f,0x7ca5,0x7d5e,0x7d50,
-0x7d68,0x7d55,0x7d2b,0x7d6e,0x7d72,0x7d61,0x7d66,0x7d62,
-0x7d70,0x7d73,0x5584,0x7fd4,0x7fd5,0x800b,0x8052,0x8085,
-0x8155,0x8154,0x814b,0x8151,0x814e,0x8139,0x8146,0x813e,
-0x814c,0x8153,0x8174,0x8212,0x821c,0x83e9,0x8403,0x83f8,
-0x840d,0x83e0,0x83c5,0x840b,0x83c1,0x83ef,0x83f1,0x83f4,
-0x8457,0x840a,0x83f0,0x840c,0x83cc,0x83fd,0x83f2,0x83ca,
-0x8438,0x840e,0x8404,0x83dc,0x8407,0x83d4,0x83df,0x865b,
-0x86df,0x86d9,0x86ed,0x86d4,0x86db,0x86e4,0x86d0,0x86de,
-0x8857,0x88c1,0x88c2,0x88b1,0x8983,0x8996,0x8a3b,0x8a60,
-0x8a55,0x8a5e,0x8a3c,0x8a41,0x8a54,0x8a5b,0x8a50,0x8a46,
-0x8a34,0x8a3a,0x8a36,0x8a56,0x8c61,0x8c82,0x8caf,0x8cbc,
-0x8cb3,0x8cbd,0x8cc1,0x8cbb,0x8cc0,0x8cb4,0x8cb7,0x8cb6,
-0x8cbf,0x8cb8,0x8d8a,0x8d85,0x8d81,0x8dce,0x8ddd,0x8dcb,
-0x8dda,0x8dd1,0x8dcc,0x8ddb,0x8dc6,0x8efb,0x8ef8,0x8efc,
-0x8f9c,0x902e,0x9035,0x9031,0x9038,0x9032,0x9036,0x9102,
-0x90f5,0x9109,0x90fe,0x9163,0x9165,0x91cf,0x9214,0x9215,
-0x9223,0x9209,0x921e,0x920d,0x9210,0x9207,0x9211,0x9594,
-0x958f,0x958b,0x9591,0x9593,0x9592,0x958e,0x968a,0x968e,
-0x968b,0x967d,0x9685,0x9686,0x968d,0x9672,0x9684,0x96c1,
-0x96c5,0x96c4,0x96c6,0x96c7,0x96ef,0x96f2,0x97cc,0x9805,
-0x9806,0x9808,0x98e7,0x98ea,0x98ef,0x98e9,0x98f2,0x98ed,
-0x99ae,0x99ad,0x9ec3,0x9ecd,0x9ed1,0x4e82,0x50ad,0x50b5,
-0x50b2,0x50b3,0x50c5,0x50be,0x50ac,0x50b7,0x50bb,0x50af,
-0x50c7,0x527f,0x5277,0x527d,0x52df,0x52e6,0x52e4,0x52e2,
-0x52e3,0x532f,0x55df,0x55e8,0x55d3,0x55e6,0x55ce,0x55dc,
-0x55c7,0x55d1,0x55e3,0x55e4,0x55ef,0x55da,0x55e1,0x55c5,
-0x55c6,0x55e5,0x55c9,0x5712,0x5713,0x585e,0x5851,0x5858,
-0x5857,0x585a,0x5854,0x586b,0x584c,0x586d,0x584a,0x5862,
-0x5852,0x584b,0x5967,0x5ac1,0x5ac9,0x5acc,0x5abe,0x5abd,
-0x5abc,0x5ab3,0x5ac2,0x5ab2,0x5d69,0x5d6f,0x5e4c,0x5e79,
-0x5ec9,0x5ec8,0x5f12,0x5f59,0x5fac,0x5fae,0x611a,0x610f,
-0x6148,0x611f,0x60f3,0x611b,0x60f9,0x6101,0x6108,0x614e,
-0x614c,0x6144,0x614d,0x613e,0x6134,0x6127,0x610d,0x6106,
-0x6137,0x6221,0x6222,0x6413,0x643e,0x641e,0x642a,0x642d,
-0x643d,0x642c,0x640f,0x641c,0x6414,0x640d,0x6436,0x6416,
-0x6417,0x6406,0x656c,0x659f,0x65b0,0x6697,0x6689,0x6687,
-0x6688,0x6696,0x6684,0x6698,0x668d,0x6703,0x6994,0x696d,
-0x695a,0x6977,0x6960,0x6954,0x6975,0x6930,0x6982,0x694a,
-0x6968,0x696b,0x695e,0x6953,0x6979,0x6986,0x695d,0x6963,
-0x695b,0x6b47,0x6b72,0x6bc0,0x6bbf,0x6bd3,0x6bfd,0x6ea2,
-0x6eaf,0x6ed3,0x6eb6,0x6ec2,0x6e90,0x6e9d,0x6ec7,0x6ec5,
-0x6ea5,0x6e98,0x6ebc,0x6eba,0x6eab,0x6ed1,0x6e96,0x6e9c,
-0x6ec4,0x6ed4,0x6eaa,0x6ea7,0x6eb4,0x714e,0x7159,0x7169,
-0x7164,0x7149,0x7167,0x715c,0x716c,0x7166,0x714c,0x7165,
-0x715e,0x7146,0x7168,0x7156,0x723a,0x7252,0x7337,0x7345,
-0x733f,0x733e,0x746f,0x745a,0x7455,0x745f,0x745e,0x7441,
-0x743f,0x7459,0x745b,0x745c,0x7576,0x7578,0x7600,0x75f0,
-0x7601,0x75f2,0x75f1,0x75fa,0x75ff,0x75f4,0x75f3,0x76de,
-0x76df,0x775b,0x776b,0x7766,0x775e,0x7763,0x7779,0x776a,
-0x776c,0x775c,0x7765,0x7768,0x7762,0x77ee,0x788e,0x78b0,
-0x7897,0x7898,0x788c,0x7889,0x787c,0x7891,0x7893,0x787f,
-0x797a,0x797f,0x7981,0x842c,0x79bd,0x7a1c,0x7a1a,0x7a20,
-0x7a14,0x7a1f,0x7a1e,0x7a9f,0x7aa0,0x7b77,0x7bc0,0x7b60,
-0x7b6e,0x7b67,0x7cb1,0x7cb3,0x7cb5,0x7d93,0x7d79,0x7d91,
-0x7d81,0x7d8f,0x7d5b,0x7f6e,0x7f69,0x7f6a,0x7f72,0x7fa9,
-0x7fa8,0x7fa4,0x8056,0x8058,0x8086,0x8084,0x8171,0x8170,
-0x8178,0x8165,0x816e,0x8173,0x816b,0x8179,0x817a,0x8166,
-0x8205,0x8247,0x8482,0x8477,0x843d,0x8431,0x8475,0x8466,
-0x846b,0x8449,0x846c,0x845b,0x843c,0x8435,0x8461,0x8463,
-0x8469,0x846d,0x8446,0x865e,0x865c,0x865f,0x86f9,0x8713,
-0x8708,0x8707,0x8700,0x86fe,0x86fb,0x8702,0x8703,0x8706,
-0x870a,0x8859,0x88df,0x88d4,0x88d9,0x88dc,0x88d8,0x88dd,
-0x88e1,0x88ca,0x88d5,0x88d2,0x899c,0x89e3,0x8a6b,0x8a72,
-0x8a73,0x8a66,0x8a69,0x8a70,0x8a87,0x8a7c,0x8a63,0x8aa0,
-0x8a71,0x8a85,0x8a6d,0x8a62,0x8a6e,0x8a6c,0x8a79,0x8a7b,
-0x8a3e,0x8a68,0x8c62,0x8c8a,0x8c89,0x8cca,0x8cc7,0x8cc8,
-0x8cc4,0x8cb2,0x8cc3,0x8cc2,0x8cc5,0x8de1,0x8ddf,0x8de8,
-0x8def,0x8df3,0x8dfa,0x8dea,0x8de4,0x8de6,0x8eb2,0x8f03,
-0x8f09,0x8efe,0x8f0a,0x8f9f,0x8fb2,0x904b,0x904a,0x9053,
-0x9042,0x9054,0x903c,0x9055,0x9050,0x9047,0x904f,0x904e,
-0x904d,0x9051,0x903e,0x9041,0x9112,0x9117,0x916c,0x916a,
-0x9169,0x91c9,0x9237,0x9257,0x9238,0x923d,0x9240,0x923e,
-0x925b,0x924b,0x9264,0x9251,0x9234,0x9249,0x924d,0x9245,
-0x9239,0x923f,0x925a,0x9598,0x9698,0x9694,0x9695,0x96cd,
-0x96cb,0x96c9,0x96ca,0x96f7,0x96fb,0x96f9,0x96f6,0x9756,
-0x9774,0x9776,0x9810,0x9811,0x9813,0x980a,0x9812,0x980c,
-0x98fc,0x98f4,0x98fd,0x98fe,0x99b3,0x99b1,0x99b4,0x9ae1,
-0x9ce9,0x9e82,0x9f0e,0x9f13,0x9f20,0x50e7,0x50ee,0x50e5,
-0x50d6,0x50ed,0x50da,0x50d5,0x50cf,0x50d1,0x50f1,0x50ce,
-0x50e9,0x5162,0x51f3,0x5283,0x5282,0x5331,0x53ad,0x55fe,
-0x5600,0x561b,0x5617,0x55fd,0x5614,0x5606,0x5609,0x560d,
-0x560e,0x55f7,0x5616,0x561f,0x5608,0x5610,0x55f6,0x5718,
-0x5716,0x5875,0x587e,0x5883,0x5893,0x588a,0x5879,0x5885,
-0x587d,0x58fd,0x5925,0x5922,0x5924,0x596a,0x5969,0x5ae1,
-0x5ae6,0x5ae9,0x5ad7,0x5ad6,0x5ad8,0x5ae3,0x5b75,0x5bde,
-0x5be7,0x5be1,0x5be5,0x5be6,0x5be8,0x5be2,0x5be4,0x5bdf,
-0x5c0d,0x5c62,0x5d84,0x5d87,0x5e5b,0x5e63,0x5e55,0x5e57,
-0x5e54,0x5ed3,0x5ed6,0x5f0a,0x5f46,0x5f70,0x5fb9,0x6147,
-0x613f,0x614b,0x6177,0x6162,0x6163,0x615f,0x615a,0x6158,
-0x6175,0x622a,0x6487,0x6458,0x6454,0x64a4,0x6478,0x645f,
-0x647a,0x6451,0x6467,0x6434,0x646d,0x647b,0x6572,0x65a1,
-0x65d7,0x65d6,0x66a2,0x66a8,0x669d,0x699c,0x69a8,0x6995,
-0x69c1,0x69ae,0x69d3,0x69cb,0x699b,0x69b7,0x69bb,0x69ab,
-0x69b4,0x69d0,0x69cd,0x69ad,0x69cc,0x69a6,0x69c3,0x69a3,
-0x6b49,0x6b4c,0x6c33,0x6f33,0x6f14,0x6efe,0x6f13,0x6ef4,
-0x6f29,0x6f3e,0x6f20,0x6f2c,0x6f0f,0x6f02,0x6f22,0x6eff,
-0x6eef,0x6f06,0x6f31,0x6f38,0x6f32,0x6f23,0x6f15,0x6f2b,
-0x6f2f,0x6f88,0x6f2a,0x6eec,0x6f01,0x6ef2,0x6ecc,0x6ef7,
-0x7194,0x7199,0x717d,0x718a,0x7184,0x7192,0x723e,0x7292,
-0x7296,0x7344,0x7350,0x7464,0x7463,0x746a,0x7470,0x746d,
-0x7504,0x7591,0x7627,0x760d,0x760b,0x7609,0x7613,0x76e1,
-0x76e3,0x7784,0x777d,0x777f,0x7761,0x78c1,0x789f,0x78a7,
-0x78b3,0x78a9,0x78a3,0x798e,0x798f,0x798d,0x7a2e,0x7a31,
-0x7aaa,0x7aa9,0x7aed,0x7aef,0x7ba1,0x7b95,0x7b8b,0x7b75,
-0x7b97,0x7b9d,0x7b94,0x7b8f,0x7bb8,0x7b87,0x7b84,0x7cb9,
-0x7cbd,0x7cbe,0x7dbb,0x7db0,0x7d9c,0x7dbd,0x7dbe,0x7da0,
-0x7dca,0x7db4,0x7db2,0x7db1,0x7dba,0x7da2,0x7dbf,0x7db5,
-0x7db8,0x7dad,0x7dd2,0x7dc7,0x7dac,0x7f70,0x7fe0,0x7fe1,
-0x7fdf,0x805e,0x805a,0x8087,0x8150,0x8180,0x818f,0x8188,
-0x818a,0x817f,0x8182,0x81e7,0x81fa,0x8207,0x8214,0x821e,
-0x824b,0x84c9,0x84bf,0x84c6,0x84c4,0x8499,0x849e,0x84b2,
-0x849c,0x84cb,0x84b8,0x84c0,0x84d3,0x8490,0x84bc,0x84d1,
-0x84ca,0x873f,0x871c,0x873b,0x8722,0x8725,0x8734,0x8718,
-0x8755,0x8737,0x8729,0x88f3,0x8902,0x88f4,0x88f9,0x88f8,
-0x88fd,0x88e8,0x891a,0x88ef,0x8aa6,0x8a8c,0x8a9e,0x8aa3,
-0x8a8d,0x8aa1,0x8a93,0x8aa4,0x8aaa,0x8aa5,0x8aa8,0x8a98,
-0x8a91,0x8a9a,0x8aa7,0x8c6a,0x8c8d,0x8c8c,0x8cd3,0x8cd1,
-0x8cd2,0x8d6b,0x8d99,0x8d95,0x8dfc,0x8f14,0x8f12,0x8f15,
-0x8f13,0x8fa3,0x9060,0x9058,0x905c,0x9063,0x9059,0x905e,
-0x9062,0x905d,0x905b,0x9119,0x9118,0x911e,0x9175,0x9178,
-0x9177,0x9174,0x9278,0x92ac,0x9280,0x9285,0x9298,0x9296,
-0x927b,0x9293,0x929c,0x92a8,0x927c,0x9291,0x95a1,0x95a8,
-0x95a9,0x95a3,0x95a5,0x95a4,0x9699,0x969c,0x969b,0x96cc,
-0x96d2,0x9700,0x977c,0x9785,0x97f6,0x9817,0x9818,0x98af,
-0x98b1,0x9903,0x9905,0x990c,0x9909,0x99c1,0x9aaf,0x9ab0,
-0x9ae6,0x9b41,0x9b42,0x9cf4,0x9cf6,0x9cf3,0x9ebc,0x9f3b,
-0x9f4a,0x5104,0x5100,0x50fb,0x50f5,0x50f9,0x5102,0x5108,
-0x5109,0x5105,0x51dc,0x5287,0x5288,0x5289,0x528d,0x528a,
-0x52f0,0x53b2,0x562e,0x563b,0x5639,0x5632,0x563f,0x5634,
-0x5629,0x5653,0x564e,0x5657,0x5674,0x5636,0x562f,0x5630,
-0x5880,0x589f,0x589e,0x58b3,0x589c,0x58ae,0x58a9,0x58a6,
-0x596d,0x5b09,0x5afb,0x5b0b,0x5af5,0x5b0c,0x5b08,0x5bee,
-0x5bec,0x5be9,0x5beb,0x5c64,0x5c65,0x5d9d,0x5d94,0x5e62,
-0x5e5f,0x5e61,0x5ee2,0x5eda,0x5edf,0x5edd,0x5ee3,0x5ee0,
-0x5f48,0x5f71,0x5fb7,0x5fb5,0x6176,0x6167,0x616e,0x615d,
-0x6155,0x6182,0x617c,0x6170,0x616b,0x617e,0x61a7,0x6190,
-0x61ab,0x618e,0x61ac,0x619a,0x61a4,0x6194,0x61ae,0x622e,
-0x6469,0x646f,0x6479,0x649e,0x64b2,0x6488,0x6490,0x64b0,
-0x64a5,0x6493,0x6495,0x64a9,0x6492,0x64ae,0x64ad,0x64ab,
-0x649a,0x64ac,0x6499,0x64a2,0x64b3,0x6575,0x6577,0x6578,
-0x66ae,0x66ab,0x66b4,0x66b1,0x6a23,0x6a1f,0x69e8,0x6a01,
-0x6a1e,0x6a19,0x69fd,0x6a21,0x6a13,0x6a0a,0x69f3,0x6a02,
-0x6a05,0x69ed,0x6a11,0x6b50,0x6b4e,0x6ba4,0x6bc5,0x6bc6,
-0x6f3f,0x6f7c,0x6f84,0x6f51,0x6f66,0x6f54,0x6f86,0x6f6d,
-0x6f5b,0x6f78,0x6f6e,0x6f8e,0x6f7a,0x6f70,0x6f64,0x6f97,
-0x6f58,0x6ed5,0x6f6f,0x6f60,0x6f5f,0x719f,0x71ac,0x71b1,
-0x71a8,0x7256,0x729b,0x734e,0x7357,0x7469,0x748b,0x7483,
-0x747e,0x7480,0x757f,0x7620,0x7629,0x761f,0x7624,0x7626,
-0x7621,0x7622,0x769a,0x76ba,0x76e4,0x778e,0x7787,0x778c,
-0x7791,0x778b,0x78cb,0x78c5,0x78ba,0x78ca,0x78be,0x78d5,
-0x78bc,0x78d0,0x7a3f,0x7a3c,0x7a40,0x7a3d,0x7a37,0x7a3b,
-0x7aaf,0x7aae,0x7bad,0x7bb1,0x7bc4,0x7bb4,0x7bc6,0x7bc7,
-0x7bc1,0x7ba0,0x7bcc,0x7cca,0x7de0,0x7df4,0x7def,0x7dfb,
-0x7dd8,0x7dec,0x7ddd,0x7de8,0x7de3,0x7dda,0x7dde,0x7de9,
-0x7d9e,0x7dd9,0x7df2,0x7df9,0x7f75,0x7f77,0x7faf,0x7fe9,
-0x8026,0x819b,0x819c,0x819d,0x81a0,0x819a,0x8198,0x8517,
-0x853d,0x851a,0x84ee,0x852c,0x852d,0x8513,0x8511,0x8523,
-0x8521,0x8514,0x84ec,0x8525,0x84ff,0x8506,0x8782,0x8774,
-0x8776,0x8760,0x8766,0x8778,0x8768,0x8759,0x8757,0x874c,
-0x8753,0x885b,0x885d,0x8910,0x8907,0x8912,0x8913,0x8915,
-0x890a,0x8abc,0x8ad2,0x8ac7,0x8ac4,0x8a95,0x8acb,0x8af8,
-0x8ab2,0x8ac9,0x8ac2,0x8abf,0x8ab0,0x8ad6,0x8acd,0x8ab6,
-0x8ab9,0x8adb,0x8c4c,0x8c4e,0x8c6c,0x8ce0,0x8cde,0x8ce6,
-0x8ce4,0x8cec,0x8ced,0x8ce2,0x8ce3,0x8cdc,0x8cea,0x8ce1,
-0x8d6d,0x8d9f,0x8da3,0x8e2b,0x8e10,0x8e1d,0x8e22,0x8e0f,
-0x8e29,0x8e1f,0x8e21,0x8e1e,0x8eba,0x8f1d,0x8f1b,0x8f1f,
-0x8f29,0x8f26,0x8f2a,0x8f1c,0x8f1e,0x8f25,0x9069,0x906e,
-0x9068,0x906d,0x9077,0x9130,0x912d,0x9127,0x9131,0x9187,
-0x9189,0x918b,0x9183,0x92c5,0x92bb,0x92b7,0x92ea,0x92e4,
-0x92c1,0x92b3,0x92bc,0x92d2,0x92c7,0x92f0,0x92b2,0x95ad,
-0x95b1,0x9704,0x9706,0x9707,0x9709,0x9760,0x978d,0x978b,
-0x978f,0x9821,0x982b,0x981c,0x98b3,0x990a,0x9913,0x9912,
-0x9918,0x99dd,0x99d0,0x99df,0x99db,0x99d1,0x99d5,0x99d2,
-0x99d9,0x9ab7,0x9aee,0x9aef,0x9b27,0x9b45,0x9b44,0x9b77,
-0x9b6f,0x9d06,0x9d09,0x9d03,0x9ea9,0x9ebe,0x9ece,0x58a8,
-0x9f52,0x5112,0x5118,0x5114,0x5110,0x5115,0x5180,0x51aa,
-0x51dd,0x5291,0x5293,0x52f3,0x5659,0x566b,0x5679,0x5669,
-0x5664,0x5678,0x566a,0x5668,0x5665,0x5671,0x566f,0x566c,
-0x5662,0x5676,0x58c1,0x58be,0x58c7,0x58c5,0x596e,0x5b1d,
-0x5b34,0x5b78,0x5bf0,0x5c0e,0x5f4a,0x61b2,0x6191,0x61a9,
-0x618a,0x61cd,0x61b6,0x61be,0x61ca,0x61c8,0x6230,0x64c5,
-0x64c1,0x64cb,0x64bb,0x64bc,0x64da,0x64c4,0x64c7,0x64c2,
-0x64cd,0x64bf,0x64d2,0x64d4,0x64be,0x6574,0x66c6,0x66c9,
-0x66b9,0x66c4,0x66c7,0x66b8,0x6a3d,0x6a38,0x6a3a,0x6a59,
-0x6a6b,0x6a58,0x6a39,0x6a44,0x6a62,0x6a61,0x6a4b,0x6a47,
-0x6a35,0x6a5f,0x6a48,0x6b59,0x6b77,0x6c05,0x6fc2,0x6fb1,
-0x6fa1,0x6fc3,0x6fa4,0x6fc1,0x6fa7,0x6fb3,0x6fc0,0x6fb9,
-0x6fb6,0x6fa6,0x6fa0,0x6fb4,0x71be,0x71c9,0x71d0,0x71d2,
-0x71c8,0x71d5,0x71b9,0x71ce,0x71d9,0x71dc,0x71c3,0x71c4,
-0x7368,0x749c,0x74a3,0x7498,0x749f,0x749e,0x74e2,0x750c,
-0x750d,0x7634,0x7638,0x763a,0x76e7,0x76e5,0x77a0,0x779e,
-0x779f,0x77a5,0x78e8,0x78da,0x78ec,0x78e7,0x79a6,0x7a4d,
-0x7a4e,0x7a46,0x7a4c,0x7a4b,0x7aba,0x7bd9,0x7c11,0x7bc9,
-0x7be4,0x7bdb,0x7be1,0x7be9,0x7be6,0x7cd5,0x7cd6,0x7e0a,
-0x7e11,0x7e08,0x7e1b,0x7e23,0x7e1e,0x7e1d,0x7e09,0x7e10,
-0x7f79,0x7fb2,0x7ff0,0x7ff1,0x7fee,0x8028,0x81b3,0x81a9,
-0x81a8,0x81fb,0x8208,0x8258,0x8259,0x854a,0x8559,0x8548,
-0x8568,0x8569,0x8543,0x8549,0x856d,0x856a,0x855e,0x8783,
-0x879f,0x879e,0x87a2,0x878d,0x8861,0x892a,0x8932,0x8925,
-0x892b,0x8921,0x89aa,0x89a6,0x8ae6,0x8afa,0x8aeb,0x8af1,
-0x8b00,0x8adc,0x8ae7,0x8aee,0x8afe,0x8b01,0x8b02,0x8af7,
-0x8aed,0x8af3,0x8af6,0x8afc,0x8c6b,0x8c6d,0x8c93,0x8cf4,
-0x8e44,0x8e31,0x8e34,0x8e42,0x8e39,0x8e35,0x8f3b,0x8f2f,
-0x8f38,0x8f33,0x8fa8,0x8fa6,0x9075,0x9074,0x9078,0x9072,
-0x907c,0x907a,0x9134,0x9192,0x9320,0x9336,0x92f8,0x9333,
-0x932f,0x9322,0x92fc,0x932b,0x9304,0x931a,0x9310,0x9326,
-0x9321,0x9315,0x932e,0x9319,0x95bb,0x96a7,0x96a8,0x96aa,
-0x96d5,0x970e,0x9711,0x9716,0x970d,0x9713,0x970f,0x975b,
-0x975c,0x9766,0x9798,0x9830,0x9838,0x983b,0x9837,0x982d,
-0x9839,0x9824,0x9910,0x9928,0x991e,0x991b,0x9921,0x991a,
-0x99ed,0x99e2,0x99f1,0x9ab8,0x9abc,0x9afb,0x9aed,0x9b28,
-0x9b91,0x9d15,0x9d23,0x9d26,0x9d28,0x9d12,0x9d1b,0x9ed8,
-0x9ed4,0x9f8d,0x9f9c,0x512a,0x511f,0x5121,0x5132,0x52f5,
-0x568e,0x5680,0x5690,0x5685,0x5687,0x568f,0x58d5,0x58d3,
-0x58d1,0x58ce,0x5b30,0x5b2a,0x5b24,0x5b7a,0x5c37,0x5c68,
-0x5dbc,0x5dba,0x5dbd,0x5db8,0x5e6b,0x5f4c,0x5fbd,0x61c9,
-0x61c2,0x61c7,0x61e6,0x61cb,0x6232,0x6234,0x64ce,0x64ca,
-0x64d8,0x64e0,0x64f0,0x64e6,0x64ec,0x64f1,0x64e2,0x64ed,
-0x6582,0x6583,0x66d9,0x66d6,0x6a80,0x6a94,0x6a84,0x6aa2,
-0x6a9c,0x6adb,0x6aa3,0x6a7e,0x6a97,0x6a90,0x6aa0,0x6b5c,
-0x6bae,0x6bda,0x6c08,0x6fd8,0x6ff1,0x6fdf,0x6fe0,0x6fdb,
-0x6fe4,0x6feb,0x6fef,0x6f80,0x6fec,0x6fe1,0x6fe9,0x6fd5,
-0x6fee,0x6ff0,0x71e7,0x71df,0x71ee,0x71e6,0x71e5,0x71ed,
-0x71ec,0x71f4,0x71e0,0x7235,0x7246,0x7370,0x7372,0x74a9,
-0x74b0,0x74a6,0x74a8,0x7646,0x7642,0x764c,0x76ea,0x77b3,
-0x77aa,0x77b0,0x77ac,0x77a7,0x77ad,0x77ef,0x78f7,0x78fa,
-0x78f4,0x78ef,0x7901,0x79a7,0x79aa,0x7a57,0x7abf,0x7c07,
-0x7c0d,0x7bfe,0x7bf7,0x7c0c,0x7be0,0x7ce0,0x7cdc,0x7cde,
-0x7ce2,0x7cdf,0x7cd9,0x7cdd,0x7e2e,0x7e3e,0x7e46,0x7e37,
-0x7e32,0x7e43,0x7e2b,0x7e3d,0x7e31,0x7e45,0x7e41,0x7e34,
-0x7e39,0x7e48,0x7e35,0x7e3f,0x7e2f,0x7f44,0x7ff3,0x7ffc,
-0x8071,0x8072,0x8070,0x806f,0x8073,0x81c6,0x81c3,0x81ba,
-0x81c2,0x81c0,0x81bf,0x81bd,0x81c9,0x81be,0x81e8,0x8209,
-0x8271,0x85aa,0x8584,0x857e,0x859c,0x8591,0x8594,0x85af,
-0x859b,0x8587,0x85a8,0x858a,0x85a6,0x8667,0x87c0,0x87d1,
-0x87b3,0x87d2,0x87c6,0x87ab,0x87bb,0x87ba,0x87c8,0x87cb,
-0x893b,0x8936,0x8944,0x8938,0x893d,0x89ac,0x8b0e,0x8b17,
-0x8b19,0x8b1b,0x8b0a,0x8b20,0x8b1d,0x8b04,0x8b10,0x8c41,
-0x8c3f,0x8c73,0x8cfa,0x8cfd,0x8cfc,0x8cf8,0x8cfb,0x8da8,
-0x8e49,0x8e4b,0x8e48,0x8e4a,0x8f44,0x8f3e,0x8f42,0x8f45,
-0x8f3f,0x907f,0x907d,0x9084,0x9081,0x9082,0x9080,0x9139,
-0x91a3,0x919e,0x919c,0x934d,0x9382,0x9328,0x9375,0x934a,
-0x9365,0x934b,0x9318,0x937e,0x936c,0x935b,0x9370,0x935a,
-0x9354,0x95ca,0x95cb,0x95cc,0x95c8,0x95c6,0x96b1,0x96b8,
-0x96d6,0x971c,0x971e,0x97a0,0x97d3,0x9846,0x98b6,0x9935,
-0x9a01,0x99ff,0x9bae,0x9bab,0x9baa,0x9bad,0x9d3b,0x9d3f,
-0x9e8b,0x9ecf,0x9ede,0x9edc,0x9edd,0x9edb,0x9f3e,0x9f4b,
-0x53e2,0x5695,0x56ae,0x58d9,0x58d8,0x5b38,0x5f5e,0x61e3,
-0x6233,0x64f4,0x64f2,0x64fe,0x6506,0x64fa,0x64fb,0x64f7,
-0x65b7,0x66dc,0x6726,0x6ab3,0x6aac,0x6ac3,0x6abb,0x6ab8,
-0x6ac2,0x6aae,0x6aaf,0x6b5f,0x6b78,0x6baf,0x7009,0x700b,
-0x6ffe,0x7006,0x6ffa,0x7011,0x700f,0x71fb,0x71fc,0x71fe,
-0x71f8,0x7377,0x7375,0x74a7,0x74bf,0x7515,0x7656,0x7658,
-0x7652,0x77bd,0x77bf,0x77bb,0x77bc,0x790e,0x79ae,0x7a61,
-0x7a62,0x7a60,0x7ac4,0x7ac5,0x7c2b,0x7c27,0x7c2a,0x7c1e,
-0x7c23,0x7c21,0x7ce7,0x7e54,0x7e55,0x7e5e,0x7e5a,0x7e61,
-0x7e52,0x7e59,0x7f48,0x7ff9,0x7ffb,0x8077,0x8076,0x81cd,
-0x81cf,0x820a,0x85cf,0x85a9,0x85cd,0x85d0,0x85c9,0x85b0,
-0x85ba,0x85b9,0x87ef,0x87ec,0x87f2,0x87e0,0x8986,0x89b2,
-0x89f4,0x8b28,0x8b39,0x8b2c,0x8b2b,0x8c50,0x8d05,0x8e59,
-0x8e63,0x8e66,0x8e64,0x8e5f,0x8e55,0x8ec0,0x8f49,0x8f4d,
-0x9087,0x9083,0x9088,0x91ab,0x91ac,0x91d0,0x9394,0x938a,
-0x9396,0x93a2,0x93b3,0x93ae,0x93ac,0x93b0,0x9398,0x939a,
-0x9397,0x95d4,0x95d6,0x95d0,0x95d5,0x96e2,0x96dc,0x96d9,
-0x96db,0x96de,0x9724,0x97a3,0x97a6,0x97ad,0x97f9,0x984d,
-0x984f,0x984c,0x984e,0x9853,0x98ba,0x993e,0x993f,0x993d,
-0x992e,0x99a5,0x9a0e,0x9ac1,0x9b03,0x9b06,0x9b4f,0x9b4e,
-0x9b4d,0x9bca,0x9bc9,0x9bfd,0x9bc8,0x9bc0,0x9d51,0x9d5d,
-0x9d60,0x9ee0,0x9f15,0x9f2c,0x5133,0x56a5,0x56a8,0x58de,
-0x58df,0x58e2,0x5bf5,0x9f90,0x5eec,0x61f2,0x61f7,0x61f6,
-0x61f5,0x6500,0x650f,0x66e0,0x66dd,0x6ae5,0x6add,0x6ada,
-0x6ad3,0x701b,0x701f,0x7028,0x701a,0x701d,0x7015,0x7018,
-0x7206,0x720d,0x7258,0x72a2,0x7378,0x737a,0x74bd,0x74ca,
-0x74e3,0x7587,0x7586,0x765f,0x7661,0x77c7,0x7919,0x79b1,
-0x7a6b,0x7a69,0x7c3e,0x7c3f,0x7c38,0x7c3d,0x7c37,0x7c40,
-0x7e6b,0x7e6d,0x7e79,0x7e69,0x7e6a,0x7e73,0x7f85,0x7fb6,
-0x7fb9,0x7fb8,0x81d8,0x85e9,0x85dd,0x85ea,0x85d5,0x85e4,
-0x85e5,0x85f7,0x87fb,0x8805,0x880d,0x87f9,0x87fe,0x8960,
-0x895f,0x8956,0x895e,0x8b41,0x8b5c,0x8b58,0x8b49,0x8b5a,
-0x8b4e,0x8b4f,0x8b46,0x8b59,0x8d08,0x8d0a,0x8e7c,0x8e72,
-0x8e87,0x8e76,0x8e6c,0x8e7a,0x8e74,0x8f54,0x8f4e,0x8fad,
-0x908a,0x908b,0x91b1,0x91ae,0x93e1,0x93d1,0x93df,0x93c3,
-0x93c8,0x93dc,0x93dd,0x93d6,0x93e2,0x93cd,0x93d8,0x93e4,
-0x93d7,0x93e8,0x95dc,0x96b4,0x96e3,0x972a,0x9727,0x9761,
-0x97dc,0x97fb,0x985e,0x9858,0x985b,0x98bc,0x9945,0x9949,
-0x9a16,0x9a19,0x9b0d,0x9be8,0x9be7,0x9bd6,0x9bdb,0x9d89,
-0x9d61,0x9d72,0x9d6a,0x9d6c,0x9e92,0x9e97,0x9e93,0x9eb4,
-0x52f8,0x56b7,0x56b6,0x56b4,0x56bc,0x58e4,0x5b40,0x5b43,
-0x5b7d,0x5bf6,0x5dc9,0x61f8,0x61fa,0x6518,0x6514,0x6519,
-0x66e6,0x6727,0x6aec,0x703e,0x7030,0x7032,0x7210,0x737b,
-0x74cf,0x7662,0x7665,0x7926,0x792a,0x792c,0x792b,0x7ac7,
-0x7af6,0x7c4c,0x7c43,0x7c4d,0x7cef,0x7cf0,0x8fae,0x7e7d,
-0x7e7c,0x7e82,0x7f4c,0x8000,0x81da,0x8266,0x85fb,0x85f9,
-0x8611,0x85fa,0x8606,0x860b,0x8607,0x860a,0x8814,0x8815,
-0x8964,0x89ba,0x89f8,0x8b70,0x8b6c,0x8b66,0x8b6f,0x8b5f,
-0x8b6b,0x8d0f,0x8d0d,0x8e89,0x8e81,0x8e85,0x8e82,0x91b4,
-0x91cb,0x9418,0x9403,0x93fd,0x95e1,0x9730,0x98c4,0x9952,
-0x9951,0x99a8,0x9a2b,0x9a30,0x9a37,0x9a35,0x9c13,0x9c0d,
-0x9e79,0x9eb5,0x9ee8,0x9f2f,0x9f5f,0x9f63,0x9f61,0x5137,
-0x5138,0x56c1,0x56c0,0x56c2,0x5914,0x5c6c,0x5dcd,0x61fc,
-0x61fe,0x651d,0x651c,0x6595,0x66e9,0x6afb,0x6b04,0x6afa,
-0x6bb2,0x704c,0x721b,0x72a7,0x74d6,0x74d4,0x7669,0x77d3,
-0x7c50,0x7e8f,0x7e8c,0x7fbc,0x8617,0x862d,0x861a,0x8823,
-0x8822,0x8821,0x881f,0x896a,0x896c,0x89bd,0x8b74,0x8b77,
-0x8b7d,0x8d13,0x8e8a,0x8e8d,0x8e8b,0x8f5f,0x8faf,0x91ba,
-0x942e,0x9433,0x9435,0x943a,0x9438,0x9432,0x942b,0x95e2,
-0x9738,0x9739,0x9732,0x97ff,0x9867,0x9865,0x9957,0x9a45,
-0x9a43,0x9a40,0x9a3e,0x9acf,0x9b54,0x9b51,0x9c2d,0x9c25,
-0x9daf,0x9db4,0x9dc2,0x9db8,0x9e9d,0x9eef,0x9f19,0x9f5c,
-0x9f66,0x9f67,0x513c,0x513b,0x56c8,0x56ca,0x56c9,0x5b7f,
-0x5dd4,0x5dd2,0x5f4e,0x61ff,0x6524,0x6b0a,0x6b61,0x7051,
-0x7058,0x7380,0x74e4,0x758a,0x766e,0x766c,0x79b3,0x7c60,
-0x7c5f,0x807e,0x807d,0x81df,0x8972,0x896f,0x89fc,0x8b80,
-0x8d16,0x8d17,0x8e91,0x8e93,0x8f61,0x9148,0x9444,0x9451,
-0x9452,0x973d,0x973e,0x97c3,0x97c1,0x986b,0x9955,0x9a55,
-0x9a4d,0x9ad2,0x9b1a,0x9c49,0x9c31,0x9c3e,0x9c3b,0x9dd3,
-0x9dd7,0x9f34,0x9f6c,0x9f6a,0x9f94,0x56cc,0x5dd6,0x6200,
-0x6523,0x652b,0x652a,0x66ec,0x6b10,0x74da,0x7aca,0x7c64,
-0x7c63,0x7c65,0x7e93,0x7e96,0x7e94,0x81e2,0x8638,0x863f,
-0x8831,0x8b8a,0x9090,0x908f,0x9463,0x9460,0x9464,0x9768,
-0x986f,0x995c,0x9a5a,0x9a5b,0x9a57,0x9ad3,0x9ad4,0x9ad1,
-0x9c54,0x9c57,0x9c56,0x9de5,0x9e9f,0x9ef4,0x56d1,0x58e9,
-0x652c,0x705e,0x7671,0x7672,0x77d7,0x7f50,0x7f88,0x8836,
-0x8839,0x8862,0x8b93,0x8b92,0x8b96,0x8277,0x8d1b,0x91c0,
-0x946a,0x9742,0x9748,0x9744,0x97c6,0x9870,0x9a5f,0x9b22,
-0x9b58,0x9c5f,0x9df9,0x9dfa,0x9e7c,0x9e7d,0x9f07,0x9f77,
-0x9f72,0x5ef3,0x6b16,0x7063,0x7c6c,0x7c6e,0x883b,0x89c0,
-0x8ea1,0x91c1,0x9472,0x9470,0x9871,0x995e,0x9ad6,0x9b23,
-0x9ecc,0x7064,0x77da,0x8b9a,0x9477,0x97c9,0x9a62,0x9a65,
-0x7e9c,0x8b9c,0x8eaa,0x91c5,0x947d,0x947e,0x947c,0x9c77,
-0x9c78,0x9ef7,0x8c54,0x947f,0x9e1a,0x7228,0x9a6a,0x9b31,
-0x9e1b,0x9e1e,0x7c72};
-
-static const int cns11643_1_ucs_table_size = (sizeof(cns11643_1_ucs_table)/sizeof(unsigned short));
-
-static const unsigned short cns11643_2_ucs_table[] = {
-0x4e42,0x4e5c,0x51f5,0x531a,0x5382,0x4e07,0x4e0c,0x4e47,
-0x4e8d,0x56d7,0x5c6e,0x5f73,0x4e0f,0x5187,0x4e0e,0x4e2e,
-0x4e93,0x4ec2,0x4ec9,0x4ec8,0x5198,0x52fc,0x536c,0x53b9,
-0x5720,0x5903,0x592c,0x5c10,0x5dff,0x65e1,0x6bb3,0x6bcc,
-0x6c14,0x723f,0x4e31,0x4e3c,0x4ee8,0x4edc,0x4ee9,0x4ee1,
-0x4edd,0x4eda,0x520c,0x5209,0x531c,0x534c,0x5722,0x5723,
-0x5917,0x592f,0x5b81,0x5b84,0x5c12,0x5c3b,0x5c74,0x5c73,
-0x5e04,0x5e80,0x5e82,0x5fc9,0x6209,0x6250,0x6c15,0x6c36,
-0x6c43,0x6c3f,0x6c3b,0x72ae,0x72b0,0x738a,0x79b8,0x808a,
-0x961e,0x4f0e,0x4f18,0x4f2c,0x4ef5,0x4f14,0x4ef1,0x4f00,
-0x4ef7,0x4f08,0x4f1d,0x4f02,0x4f05,0x4f22,0x4f13,0x4f04,
-0x4ef4,0x4f12,0x51b1,0x5213,0x5210,0x52a6,0x5322,0x531f,
-0x534d,0x538a,0x5407,0x56e1,0x56df,0x572e,0x572a,0x5734,
-0x593c,0x5980,0x597c,0x5985,0x597b,0x597e,0x5977,0x597f,
-0x5b56,0x5c15,0x5c25,0x5c7c,0x5c7a,0x5c7b,0x5c7e,0x5ddf,
-0x5e75,0x5e84,0x5f02,0x5f1a,0x5f74,0x5fd5,0x5fd4,0x5fcf,
-0x625c,0x625e,0x6264,0x6261,0x6266,0x6262,0x6259,0x6260,
-0x625a,0x6265,0x6537,0x65ef,0x65ee,0x673e,0x6739,0x6738,
-0x673b,0x673a,0x673f,0x673c,0x6733,0x6c18,0x6c46,0x6c52,
-0x6c5c,0x6c4f,0x6c4a,0x6c54,0x6c4b,0x6c4c,0x7071,0x725e,
-0x72b4,0x72b5,0x738e,0x752a,0x767f,0x7a75,0x7f51,0x8278,
-0x827c,0x8280,0x827d,0x827f,0x864d,0x897e,0x9099,0x9097,
-0x9098,0x909b,0x9094,0x9622,0x9624,0x9620,0x9623,0x4f56,
-0x4f3b,0x4f62,0x4f49,0x4f53,0x4f64,0x4f3e,0x4f67,0x4f52,
-0x4f5f,0x4f41,0x4f58,0x4f2d,0x4f33,0x4f3f,0x4f61,0x518f,
-0x51b9,0x521c,0x521e,0x5221,0x52ad,0x52ae,0x5309,0x5363,
-0x5372,0x538e,0x538f,0x5430,0x5437,0x542a,0x5454,0x5445,
-0x5419,0x541c,0x5425,0x5418,0x543d,0x544f,0x5441,0x5428,
-0x5424,0x5447,0x56ee,0x56e7,0x56e5,0x5741,0x5745,0x574c,
-0x5749,0x574b,0x5752,0x5906,0x5940,0x59a6,0x5998,0x59a0,
-0x5997,0x598e,0x59a2,0x5990,0x598f,0x59a7,0x59a1,0x5b8e,
-0x5b92,0x5c28,0x5c2a,0x5c8d,0x5c8f,0x5c88,0x5c8b,0x5c89,
-0x5c92,0x5c8a,0x5c86,0x5c93,0x5c95,0x5de0,0x5e0a,0x5e0e,
-0x5e8b,0x5e89,0x5e8c,0x5e88,0x5e8d,0x5f05,0x5f1d,0x5f78,
-0x5f76,0x5fd2,0x5fd1,0x5fd0,0x5fed,0x5fe8,0x5fee,0x5ff3,
-0x5fe1,0x5fe4,0x5fe3,0x5ffa,0x5fef,0x5ff7,0x5ffb,0x6000,
-0x5ff4,0x623a,0x6283,0x628c,0x628e,0x628f,0x6294,0x6287,
-0x6271,0x627b,0x627a,0x6270,0x6281,0x6288,0x6277,0x627d,
-0x6272,0x6274,0x65f0,0x65f4,0x65f3,0x65f2,0x65f5,0x6745,
-0x6747,0x6759,0x6755,0x674c,0x6748,0x675d,0x674d,0x675a,
-0x674b,0x6bd0,0x6c19,0x6c1a,0x6c78,0x6c67,0x6c6b,0x6c84,
-0x6c8b,0x6c8f,0x6c71,0x6c6f,0x6c69,0x6c9a,0x6c6d,0x6c87,
-0x6c95,0x6c9c,0x6c66,0x6c73,0x6c65,0x6c7b,0x6c8e,0x7074,
-0x707a,0x7263,0x72bf,0x72bd,0x72c3,0x72c6,0x72c1,0x72ba,
-0x72c5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753a,0x7539,
-0x7594,0x7595,0x7681,0x793d,0x8034,0x8095,0x8099,0x8090,
-0x8092,0x809c,0x8290,0x828f,0x8285,0x828e,0x8291,0x8293,
-0x828a,0x8283,0x8284,0x8c78,0x8fc9,0x8fbf,0x909f,0x90a1,
-0x90a5,0x909e,0x90a7,0x90a0,0x9630,0x9628,0x962f,0x962d,
-0x4e33,0x4f98,0x4f7c,0x4f85,0x4f7d,0x4f80,0x4f87,0x4f76,
-0x4f74,0x4f89,0x4f84,0x4f77,0x4f4c,0x4f97,0x4f6a,0x4f9a,
-0x4f79,0x4f81,0x4f78,0x4f90,0x4f9c,0x4f94,0x4f9e,0x4f92,
-0x4f82,0x4f95,0x4f6b,0x4f6e,0x519e,0x51bc,0x51be,0x5235,
-0x5232,0x5233,0x5246,0x5231,0x52bc,0x530a,0x530b,0x533c,
-0x5392,0x5394,0x5487,0x547f,0x5481,0x5491,0x5482,0x5488,
-0x546b,0x547a,0x547e,0x5465,0x546c,0x5474,0x5466,0x548d,
-0x546f,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464,0x56f7,
-0x56f9,0x576f,0x5772,0x576d,0x576b,0x5771,0x5770,0x5776,
-0x5780,0x5775,0x577b,0x5773,0x5774,0x5762,0x5768,0x577d,
-0x590c,0x5945,0x59b5,0x59ba,0x59cf,0x59ce,0x59b2,0x59cc,
-0x59c1,0x59b6,0x59bc,0x59c3,0x59d6,0x59b1,0x59bd,0x59c0,
-0x59c8,0x59b4,0x59c7,0x5b62,0x5b65,0x5b93,0x5b95,0x5c44,
-0x5c47,0x5cae,0x5ca4,0x5ca0,0x5cb5,0x5caf,0x5ca8,0x5cac,
-0x5c9f,0x5ca3,0x5cad,0x5ca2,0x5caa,0x5ca7,0x5c9d,0x5ca5,
-0x5cb6,0x5cb0,0x5ca6,0x5e17,0x5e14,0x5e19,0x5f28,0x5f22,
-0x5f23,0x5f24,0x5f54,0x5f82,0x5f7e,0x5f7d,0x5fde,0x5fe5,
-0x602d,0x6026,0x6019,0x6032,0x600b,0x6034,0x600a,0x6017,
-0x6033,0x601a,0x601e,0x602c,0x6022,0x600d,0x6010,0x602e,
-0x6013,0x6011,0x600c,0x6009,0x601c,0x6214,0x623d,0x62ad,
-0x62b4,0x62d1,0x62be,0x62aa,0x62b6,0x62ca,0x62ae,0x62b3,
-0x62af,0x62bb,0x62a9,0x62b0,0x62b8,0x653d,0x65a8,0x65bb,
-0x6609,0x65fc,0x6604,0x6612,0x6608,0x65fb,0x6603,0x660b,
-0x660d,0x6605,0x65fd,0x6611,0x6610,0x66f6,0x670a,0x6785,
-0x676c,0x678e,0x6792,0x6776,0x677b,0x6798,0x6786,0x6784,
-0x6774,0x678d,0x678c,0x677a,0x679f,0x6791,0x6799,0x6783,
-0x677d,0x6781,0x6778,0x6779,0x6794,0x6b25,0x6b80,0x6b7e,
-0x6bde,0x6c1d,0x6c93,0x6cec,0x6ceb,0x6cee,0x6cd9,0x6cb6,
-0x6cd4,0x6cad,0x6ce7,0x6cb7,0x6cd0,0x6cc2,0x6cba,0x6cc3,
-0x6cc6,0x6ced,0x6cf2,0x6cd2,0x6cdd,0x6cb4,0x6c8a,0x6c9d,
-0x6c80,0x6cde,0x6cc0,0x6d30,0x6ccd,0x6cc7,0x6cb0,0x6cf9,
-0x6ccf,0x6ce9,0x6cd1,0x7094,0x7098,0x7085,0x7093,0x7086,
-0x7084,0x7091,0x7096,0x7082,0x709a,0x7083,0x726a,0x72d6,
-0x72cb,0x72d8,0x72c9,0x72dc,0x72d2,0x72d4,0x72da,0x72cc,
-0x72d1,0x73a4,0x73a1,0x73ad,0x73a6,0x73a2,0x73a0,0x73ac,
-0x739d,0x74dd,0x74e8,0x753f,0x7540,0x753e,0x758c,0x7598,
-0x76af,0x76f3,0x76f1,0x76f0,0x76f5,0x77f8,0x77fc,0x77f9,
-0x77fb,0x77fa,0x77f7,0x7942,0x793f,0x79c5,0x7a78,0x7a7b,
-0x7afb,0x7c75,0x7cfd,0x8035,0x808f,0x80ae,0x80a3,0x80b8,
-0x80b5,0x80ad,0x8220,0x82a0,0x82c0,0x82ab,0x829a,0x8298,
-0x829b,0x82b5,0x82a7,0x82ae,0x82bc,0x829e,0x82ba,0x82b4,
-0x82a8,0x82a1,0x82a9,0x82c2,0x82a4,0x82c3,0x82b6,0x82a2,
-0x8670,0x866f,0x866d,0x866e,0x8c56,0x8fd2,0x8fcb,0x8fd3,
-0x8fcd,0x8fd6,0x8fd5,0x8fd7,0x90b2,0x90b4,0x90af,0x90b3,
-0x90b0,0x9639,0x963d,0x963c,0x963a,0x9643,0x4fcd,0x4fc5,
-0x4fd3,0x4fb2,0x4fc9,0x4fcb,0x4fc1,0x4fd4,0x4fdc,0x4fd9,
-0x4fbb,0x4fb3,0x4fdb,0x4fc7,0x4fd6,0x4fba,0x4fc0,0x4fb9,
-0x4fec,0x5244,0x5249,0x52c0,0x52c2,0x533d,0x537c,0x5397,
-0x5396,0x5399,0x5398,0x54ba,0x54a1,0x54ad,0x54a5,0x54cf,
-0x54c3,0x830d,0x54b7,0x54ae,0x54d6,0x54b6,0x54c5,0x54c6,
-0x54a0,0x5470,0x54bc,0x54a2,0x54be,0x5472,0x54de,0x54b0,
-0x57b5,0x579e,0x579f,0x57a4,0x578c,0x5797,0x579d,0x579b,
-0x5794,0x5798,0x578f,0x5799,0x57a5,0x579a,0x5795,0x58f4,
-0x590d,0x5953,0x59e1,0x59de,0x59ee,0x5a00,0x59f1,0x59dd,
-0x59fa,0x59fd,0x59fc,0x59f6,0x59e4,0x59f2,0x59f7,0x59db,
-0x59e9,0x59f3,0x59f5,0x59e0,0x59fe,0x59f4,0x59ed,0x5ba8,
-0x5c4c,0x5cd0,0x5cd8,0x5ccc,0x5cd7,0x5ccb,0x5cdb,0x5cde,
-0x5cda,0x5cc9,0x5cc7,0x5cca,0x5cd6,0x5cd3,0x5cd4,0x5ccf,
-0x5cc8,0x5cc6,0x5cce,0x5cdf,0x5cf8,0x5df9,0x5e21,0x5e22,
-0x5e23,0x5e20,0x5e24,0x5eb0,0x5ea4,0x5ea2,0x5e9b,0x5ea3,
-0x5ea5,0x5f07,0x5f2e,0x5f56,0x5f86,0x6037,0x6039,0x6054,
-0x6072,0x605e,0x6045,0x6053,0x6047,0x6049,0x605b,0x604c,
-0x6040,0x6042,0x605f,0x6024,0x6044,0x6058,0x6066,0x606e,
-0x6242,0x6243,0x62cf,0x630d,0x630b,0x62f5,0x630e,0x6303,
-0x62eb,0x62f9,0x630f,0x630c,0x62f8,0x62f6,0x6300,0x6313,
-0x6314,0x62fa,0x6315,0x62fb,0x62f0,0x6541,0x6543,0x65aa,
-0x65bf,0x6636,0x6621,0x6632,0x6635,0x661c,0x6626,0x6622,
-0x6633,0x662b,0x663a,0x661d,0x6634,0x6639,0x662e,0x670f,
-0x6710,0x67c1,0x67f2,0x67c8,0x67ba,0x67dc,0x67bb,0x67f8,
-0x67d8,0x67c0,0x67b7,0x67c5,0x67eb,0x67e4,0x67df,0x67b5,
-0x67cd,0x67b3,0x67f7,0x67f6,0x67ee,0x67e3,0x67c2,0x67b9,
-0x67ce,0x67e7,0x67f0,0x67b2,0x67fc,0x67c6,0x67ed,0x67cc,
-0x67ae,0x67e6,0x67db,0x67fa,0x67c9,0x67ca,0x67c3,0x67ea,
-0x67cb,0x6b28,0x6b82,0x6b84,0x6bb6,0x6bd6,0x6bd8,0x6be0,
-0x6c20,0x6c21,0x6d28,0x6d34,0x6d2d,0x6d1f,0x6d3c,0x6d3f,
-0x6d12,0x6d0a,0x6cda,0x6d33,0x6d04,0x6d19,0x6d3a,0x6d1a,
-0x6d11,0x6d00,0x6d1d,0x6d42,0x6d01,0x6d18,0x6d37,0x6d03,
-0x6d0f,0x6d40,0x6d07,0x6d20,0x6d2c,0x6d08,0x6d22,0x6d09,
-0x6d10,0x70b7,0x709f,0x70be,0x70b1,0x70b0,0x70a1,0x70b4,
-0x70b5,0x70a9,0x7241,0x7249,0x724a,0x726c,0x7270,0x7273,
-0x726e,0x72ca,0x72e4,0x72e8,0x72eb,0x72df,0x72ea,0x72e6,
-0x72e3,0x7385,0x73cc,0x73c2,0x73c8,0x73c5,0x73b9,0x73b6,
-0x73b5,0x73b4,0x73eb,0x73bf,0x73c7,0x73be,0x73c3,0x73c6,
-0x73b8,0x73cb,0x74ec,0x74ee,0x752e,0x7547,0x7548,0x75a7,
-0x75aa,0x7679,0x76c4,0x7708,0x7703,0x7704,0x7705,0x770a,
-0x76f7,0x76fb,0x76fa,0x77e7,0x77e8,0x7806,0x7811,0x7812,
-0x7805,0x7810,0x780f,0x780e,0x7809,0x7803,0x7813,0x794a,
-0x794c,0x794b,0x7945,0x7944,0x79d5,0x79cd,0x79cf,0x79d6,
-0x79ce,0x7a80,0x7a7e,0x7ad1,0x7b00,0x7b01,0x7c7a,0x7c78,
-0x7c79,0x7c7f,0x7c80,0x7c81,0x7d03,0x7d08,0x7d01,0x7f58,
-0x7f91,0x7f8d,0x7fbe,0x8007,0x800e,0x800f,0x8014,0x8037,
-0x80d8,0x80c7,0x80e0,0x80d1,0x80c8,0x80c2,0x80d0,0x80c5,
-0x80e3,0x80d9,0x80dc,0x80ca,0x80d5,0x80c9,0x80cf,0x80d7,
-0x80e6,0x80cd,0x81ff,0x8221,0x8294,0x82d9,0x82fe,0x82f9,
-0x8307,0x82e8,0x8300,0x82d5,0x833a,0x82eb,0x82d6,0x82f4,
-0x82ec,0x82e1,0x82f2,0x82f5,0x830c,0x82fb,0x82f6,0x82f0,
-0x82ea,0x82e4,0x82e0,0x82fa,0x82f3,0x82ed,0x8677,0x8674,
-0x867c,0x8673,0x8841,0x884e,0x8867,0x886a,0x8869,0x89d3,
-0x8a04,0x8a07,0x8d72,0x8fe3,0x8fe1,0x8fee,0x8fe0,0x90f1,
-0x90bd,0x90bf,0x90d5,0x90c5,0x90be,0x90c7,0x90cb,0x90c8,
-0x91d4,0x91d3,0x9654,0x964f,0x9651,0x9653,0x964a,0x964e,
-0x501e,0x5005,0x5007,0x5013,0x5022,0x5030,0x501b,0x4ff5,
-0x4ff4,0x5033,0x5037,0x502c,0x4ff6,0x4ff7,0x5017,0x501c,
-0x5020,0x5027,0x5035,0x502f,0x5031,0x500e,0x515a,0x5194,
-0x5193,0x51ca,0x51c4,0x51c5,0x51c8,0x51ce,0x5261,0x525a,
-0x5252,0x525e,0x525f,0x5255,0x5262,0x52cd,0x530e,0x539e,
-0x5526,0x54e2,0x5517,0x5512,0x54e7,0x54f3,0x54e4,0x551a,
-0x54ff,0x5504,0x5508,0x54eb,0x5511,0x5505,0x54f1,0x550a,
-0x54fb,0x54f7,0x54f8,0x54e0,0x550e,0x5503,0x550b,0x5701,
-0x5702,0x57cc,0x5832,0x57d5,0x57d2,0x57ba,0x57c6,0x57bd,
-0x57bc,0x57b8,0x57b6,0x57bf,0x57c7,0x57d0,0x57b9,0x57c1,
-0x590e,0x594a,0x5a19,0x5a16,0x5a2d,0x5a2e,0x5a15,0x5a0f,
-0x5a17,0x5a0a,0x5a1e,0x5a33,0x5b6c,0x5ba7,0x5bad,0x5bac,
-0x5c03,0x5c56,0x5c54,0x5cec,0x5cff,0x5cee,0x5cf1,0x5cf7,
-0x5d00,0x5cf9,0x5e29,0x5e28,0x5ea8,0x5eae,0x5eaa,0x5eac,
-0x5f33,0x5f30,0x5f67,0x605d,0x605a,0x6067,0x6041,0x60a2,
-0x6088,0x6080,0x6092,0x6081,0x609d,0x6083,0x6095,0x609b,
-0x6097,0x6087,0x609c,0x608e,0x6219,0x6246,0x62f2,0x6310,
-0x6356,0x632c,0x6344,0x6345,0x6336,0x6343,0x63e4,0x6339,
-0x634b,0x634a,0x633c,0x6329,0x6341,0x6334,0x6358,0x6354,
-0x6359,0x632d,0x6347,0x6333,0x635a,0x6351,0x6338,0x6357,
-0x6340,0x6348,0x654a,0x6546,0x65c6,0x65c3,0x65c4,0x65c2,
-0x664a,0x665f,0x6647,0x6651,0x6712,0x6713,0x681f,0x681a,
-0x6849,0x6832,0x6833,0x683b,0x684b,0x684f,0x6816,0x6831,
-0x681c,0x6835,0x682b,0x682d,0x682f,0x684e,0x6844,0x6834,
-0x681d,0x6812,0x6814,0x6826,0x6828,0x682e,0x684d,0x683a,
-0x6825,0x6820,0x6b2c,0x6b2f,0x6b2d,0x6b31,0x6b34,0x6b6d,
-0x8082,0x6b88,0x6be6,0x6be4,0x6be8,0x6be3,0x6be2,0x6be7,
-0x6c25,0x6d7a,0x6d63,0x6d64,0x6d76,0x6d0d,0x6d61,0x6d92,
-0x6d58,0x6d62,0x6d6d,0x6d6f,0x6d91,0x6d8d,0x6def,0x6d7f,
-0x6d86,0x6d5e,0x6d67,0x6d60,0x6d97,0x6d70,0x6d7c,0x6d5f,
-0x6d82,0x6d98,0x6d2f,0x6d68,0x6d8b,0x6d7e,0x6d80,0x6d84,
-0x6d16,0x6d83,0x6d7b,0x6d7d,0x6d75,0x6d90,0x70dc,0x70d3,
-0x70d1,0x70dd,0x70cb,0x7f39,0x70e2,0x70d7,0x70d2,0x70de,
-0x70e0,0x70d4,0x70cd,0x70c5,0x70c6,0x70c7,0x70da,0x70ce,
-0x70e1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72fa,0x72f4,
-0x72fe,0x72f6,0x72f3,0x72fb,0x7301,0x73d3,0x73d9,0x73e5,
-0x73d6,0x73bc,0x73e7,0x73e3,0x73e9,0x73dc,0x73d2,0x73db,
-0x73d4,0x73dd,0x73da,0x73d7,0x73d8,0x73e8,0x74de,0x74df,
-0x74f4,0x74f5,0x7521,0x755b,0x755f,0x75b0,0x75c1,0x75bb,
-0x75c4,0x75c0,0x75bf,0x75b6,0x75ba,0x768a,0x76c9,0x771d,
-0x771b,0x7710,0x7713,0x7712,0x7723,0x7711,0x7715,0x7719,
-0x771a,0x7722,0x7727,0x7823,0x782c,0x7822,0x7835,0x782f,
-0x7828,0x782e,0x782b,0x7821,0x7829,0x7833,0x782a,0x7831,
-0x7954,0x795b,0x794f,0x795c,0x7953,0x7952,0x7951,0x79eb,
-0x79ec,0x79e0,0x79ee,0x79ed,0x79ea,0x79dc,0x79de,0x79dd,
-0x7a86,0x7a89,0x7a85,0x7a8b,0x7a8c,0x7a8a,0x7a87,0x7ad8,
-0x7b10,0x7b04,0x7b13,0x7b05,0x7b0f,0x7b08,0x7b0a,0x7b0e,
-0x7b09,0x7b12,0x7c84,0x7c91,0x7c8a,0x7c8c,0x7c88,0x7c8d,
-0x7c85,0x7d1e,0x7d1d,0x7d11,0x7d0e,0x7d18,0x7d16,0x7d13,
-0x7d1f,0x7d12,0x7d0f,0x7d0c,0x7f5c,0x7f61,0x7f5e,0x7f60,
-0x7f5d,0x7f5b,0x7f96,0x7f92,0x7fc3,0x7fc2,0x7fc0,0x8016,
-0x803e,0x8039,0x80fa,0x80f2,0x80f9,0x80f5,0x8101,0x80fb,
-0x8100,0x8201,0x822f,0x8225,0x8333,0x832d,0x8344,0x8319,
-0x8351,0x8325,0x8356,0x833f,0x8341,0x8326,0x831c,0x8322,
-0x8342,0x834e,0x831b,0x832a,0x8308,0x833c,0x834d,0x8316,
-0x8324,0x8320,0x8337,0x832f,0x8329,0x8347,0x8345,0x834c,
-0x8353,0x831e,0x832c,0x834b,0x8327,0x8348,0x8653,0x8652,
-0x86a2,0x86a8,0x8696,0x868d,0x8691,0x869e,0x8687,0x8697,
-0x8686,0x868b,0x869a,0x8685,0x86a5,0x8699,0x86a1,0x86a7,
-0x8695,0x8698,0x868e,0x869d,0x8690,0x8694,0x8843,0x8844,
-0x886d,0x8875,0x8876,0x8872,0x8880,0x8871,0x887f,0x886f,
-0x8883,0x887e,0x8874,0x887c,0x8a12,0x8c47,0x8c57,0x8c7b,
-0x8ca4,0x8ca3,0x8d76,0x8d78,0x8db5,0x8db7,0x8db6,0x8ed1,
-0x8ed3,0x8ffe,0x8ff5,0x9002,0x8fff,0x8ffb,0x9004,0x8ffc,
-0x8ff6,0x90d6,0x90e0,0x90d9,0x90da,0x90e3,0x90df,0x90e5,
-0x90d8,0x90db,0x90d7,0x90dc,0x90e4,0x9150,0x914e,0x914f,
-0x91d5,0x91e2,0x91da,0x965c,0x965f,0x96bc,0x98e3,0x9adf,
-0x9b2f,0x4e7f,0x5070,0x506a,0x5061,0x505e,0x5060,0x5053,
-0x504b,0x505d,0x5072,0x5048,0x504d,0x5041,0x505b,0x504a,
-0x5062,0x5015,0x5045,0x505f,0x5069,0x506b,0x5063,0x5064,
-0x5046,0x5040,0x506e,0x5073,0x5057,0x5051,0x51d0,0x526b,
-0x526d,0x526c,0x526e,0x52d6,0x52d3,0x532d,0x539c,0x5575,
-0x5576,0x553c,0x554d,0x5550,0x5534,0x552a,0x5551,0x5562,
-0x5536,0x5535,0x5530,0x5552,0x5545,0x550c,0x5532,0x5565,
-0x554e,0x5539,0x5548,0x552d,0x553b,0x5540,0x554b,0x570a,
-0x5707,0x57fb,0x5814,0x57e2,0x57f6,0x57dc,0x57f4,0x5800,
-0x57ed,0x57fd,0x5808,0x57f8,0x580b,0x57f3,0x57cf,0x5807,
-0x57ee,0x57e3,0x57f2,0x57e5,0x57ec,0x57e1,0x580e,0x57fc,
-0x5810,0x57e7,0x5801,0x580c,0x57f1,0x57e9,0x57f0,0x580d,
-0x5804,0x595c,0x5a60,0x5a58,0x5a55,0x5a67,0x5a5e,0x5a38,
-0x5a35,0x5a6d,0x5a50,0x5a5f,0x5a65,0x5a6c,0x5a53,0x5a64,
-0x5a57,0x5a43,0x5a5d,0x5a52,0x5a44,0x5a5b,0x5a48,0x5a8e,
-0x5a3e,0x5a4d,0x5a39,0x5a4c,0x5a70,0x5a69,0x5a47,0x5a51,
-0x5a56,0x5a42,0x5a5c,0x5b72,0x5b6e,0x5bc1,0x5bc0,0x5c59,
-0x5d1e,0x5d0b,0x5d1d,0x5d1a,0x5d20,0x5d0c,0x5d28,0x5d0d,
-0x5d26,0x5d25,0x5d0f,0x5d30,0x5d12,0x5d23,0x5d1f,0x5d2e,
-0x5e3e,0x5e34,0x5eb1,0x5eb4,0x5eb9,0x5eb2,0x5eb3,0x5f36,
-0x5f38,0x5f9b,0x5f96,0x5f9f,0x608a,0x6090,0x6086,0x60be,
-0x60b0,0x60ba,0x60d3,0x60d4,0x60cf,0x60e4,0x60d9,0x60dd,
-0x60c8,0x60b1,0x60db,0x60b7,0x60ca,0x60bf,0x60c3,0x60cd,
-0x60c0,0x6332,0x6365,0x638a,0x6382,0x637d,0x63bd,0x639e,
-0x63ad,0x639d,0x6397,0x63ab,0x638e,0x636f,0x6387,0x6390,
-0x636e,0x63af,0x6375,0x639c,0x636d,0x63ae,0x637c,0x63a4,
-0x633b,0x639f,0x6378,0x6385,0x6381,0x6391,0x638d,0x6370,
-0x6553,0x65cd,0x6665,0x6661,0x665b,0x6659,0x665c,0x6662,
-0x6718,0x6879,0x6887,0x6890,0x689c,0x686d,0x686e,0x68ae,
-0x68ab,0x6956,0x686f,0x68a3,0x68ac,0x68a9,0x6875,0x6874,
-0x68b2,0x688f,0x6877,0x6892,0x687c,0x686b,0x6872,0x68aa,
-0x6880,0x6871,0x687e,0x689b,0x6896,0x688b,0x68a0,0x6889,
-0x68a4,0x6878,0x687b,0x6891,0x688c,0x688a,0x687d,0x6b36,
-0x6b33,0x6b37,0x6b38,0x6b91,0x6b8f,0x6b8d,0x6b8e,0x6b8c,
-0x6c2a,0x6dc0,0x6dab,0x6db4,0x6db3,0x6e74,0x6dac,0x6de9,
-0x6de2,0x6db7,0x6df6,0x6dd4,0x6e00,0x6dc8,0x6de0,0x6ddf,
-0x6dd6,0x6dbe,0x6de5,0x6ddc,0x6ddd,0x6ddb,0x6df4,0x6dca,
-0x6dbd,0x6ded,0x6df0,0x6dba,0x6dd5,0x6dc2,0x6dcf,0x6dc9,
-0x6dd0,0x6df2,0x6dd3,0x6dfd,0x6dd7,0x6dcd,0x6de3,0x6dbb,
-0x70fa,0x710d,0x70f7,0x7117,0x70f4,0x710c,0x70f0,0x7104,
-0x70f3,0x7110,0x70fc,0x70ff,0x7106,0x7113,0x7100,0x70f8,
-0x70f6,0x710b,0x7102,0x710e,0x727e,0x727b,0x727c,0x727f,
-0x731d,0x7317,0x7307,0x7311,0x7318,0x730a,0x7308,0x72ff,
-0x730f,0x731e,0x7388,0x73f6,0x73f8,0x73f5,0x7404,0x7401,
-0x73fd,0x7407,0x7400,0x73fa,0x73fc,0x73ff,0x740c,0x740b,
-0x73f4,0x7408,0x7564,0x7563,0x75ce,0x75d2,0x75cf,0x75cb,
-0x75cc,0x75d1,0x75d0,0x768f,0x7689,0x76d3,0x7739,0x772f,
-0x772d,0x7731,0x7732,0x7734,0x7733,0x773d,0x7725,0x773b,
-0x7735,0x7848,0x7852,0x7849,0x784d,0x784a,0x784c,0x7826,
-0x7845,0x7850,0x7964,0x7967,0x7969,0x796a,0x7963,0x796b,
-0x7961,0x79bb,0x79fa,0x79f8,0x79f6,0x79f7,0x7a8f,0x7a94,
-0x7a90,0x7b35,0x7b3b,0x7b34,0x7b25,0x7b30,0x7b22,0x7b24,
-0x7b33,0x7b18,0x7b2a,0x7b1d,0x7b31,0x7b2b,0x7b2d,0x7b2f,
-0x7b32,0x7b38,0x7b1a,0x7b23,0x7c94,0x7c98,0x7c96,0x7ca3,
-0x7d35,0x7d3d,0x7d38,0x7d36,0x7d3a,0x7d45,0x7d2c,0x7d29,
-0x7d41,0x7d47,0x7d3e,0x7d3f,0x7d4a,0x7d3b,0x7d28,0x7f63,
-0x7f95,0x7f9c,0x7f9d,0x7f9b,0x7fca,0x7fcb,0x7fcd,0x7fd0,
-0x7fd1,0x7fc7,0x7fcf,0x7fc9,0x801f,0x801e,0x801b,0x8047,
-0x8043,0x8048,0x8118,0x8125,0x8119,0x811b,0x812d,0x811f,
-0x812c,0x811e,0x8121,0x8115,0x8127,0x811d,0x8122,0x8211,
-0x8238,0x8233,0x823a,0x8234,0x8232,0x8274,0x8390,0x83a3,
-0x83a8,0x838d,0x837a,0x8373,0x83a4,0x8374,0x838f,0x8381,
-0x8395,0x8399,0x8375,0x8394,0x83a9,0x837d,0x8383,0x838c,
-0x839d,0x839b,0x83aa,0x838b,0x837e,0x83a5,0x83af,0x8388,
-0x8397,0x83b0,0x837f,0x83a6,0x8387,0x83ae,0x8376,0x8659,
-0x8656,0x86bf,0x86b7,0x86c2,0x86c1,0x86c5,0x86ba,0x86b0,
-0x86c8,0x86b9,0x86b3,0x86b8,0x86cc,0x86b4,0x86bb,0x86bc,
-0x86c3,0x86bd,0x86be,0x8852,0x8889,0x8895,0x88a8,0x88a2,
-0x88aa,0x889a,0x8891,0x88a1,0x889f,0x8898,0x88a7,0x8899,
-0x889b,0x8897,0x88a4,0x88ac,0x888c,0x8893,0x888e,0x8982,
-0x89d6,0x89d9,0x89d5,0x8a30,0x8a27,0x8a2c,0x8a1e,0x8c39,
-0x8c3b,0x8c5c,0x8c5d,0x8c7d,0x8ca5,0x8d7d,0x8d7b,0x8d79,
-0x8dbc,0x8dc2,0x8db9,0x8dbf,0x8dc1,0x8ed8,0x8ede,0x8edd,
-0x8edc,0x8ed7,0x8ee0,0x8ee1,0x9024,0x900b,0x9011,0x901c,
-0x900c,0x9021,0x90ef,0x90ea,0x90f0,0x90f4,0x90f2,0x90f3,
-0x90d4,0x90eb,0x90ec,0x90e9,0x9156,0x9158,0x915a,0x9153,
-0x9155,0x91ec,0x91f4,0x91f1,0x91f3,0x91f8,0x91e4,0x91f9,
-0x91ea,0x91eb,0x91f7,0x91e8,0x91ee,0x957a,0x9586,0x9588,
-0x967c,0x966d,0x966b,0x9671,0x966f,0x96bf,0x976a,0x9804,
-0x98e5,0x9997,0x509b,0x5095,0x5094,0x509e,0x508b,0x50a3,
-0x5083,0x508c,0x508e,0x509d,0x5068,0x509c,0x5092,0x5082,
-0x5087,0x515f,0x51d4,0x5312,0x5311,0x53a4,0x53a7,0x5591,
-0x55a8,0x55a5,0x55ad,0x5577,0x5645,0x55a2,0x5593,0x5588,
-0x558f,0x55b5,0x5581,0x55a3,0x5592,0x55a4,0x557d,0x558c,
-0x55a6,0x557f,0x5595,0x55a1,0x558e,0x570c,0x5829,0x5837,
-0x5819,0x581e,0x5827,0x5823,0x5828,0x57f5,0x5848,0x5825,
-0x581c,0x581b,0x5833,0x583f,0x5836,0x582e,0x5839,0x5838,
-0x582d,0x582c,0x583b,0x5961,0x5aaf,0x5a94,0x5a9f,0x5a7a,
-0x5aa2,0x5a9e,0x5a78,0x5aa6,0x5a7c,0x5aa5,0x5aac,0x5a95,
-0x5aae,0x5a37,0x5a84,0x5a8a,0x5a97,0x5a83,0x5a8b,0x5aa9,
-0x5a7b,0x5a7d,0x5a8c,0x5a9c,0x5a8f,0x5a93,0x5a9d,0x5bea,
-0x5bcd,0x5bcb,0x5bd4,0x5bd1,0x5bca,0x5bce,0x5c0c,0x5c30,
-0x5d37,0x5d43,0x5d6b,0x5d41,0x5d4b,0x5d3f,0x5d35,0x5d51,
-0x5d4e,0x5d55,0x5d33,0x5d3a,0x5d52,0x5d3d,0x5d31,0x5d59,
-0x5d42,0x5d39,0x5d49,0x5d38,0x5d3c,0x5d32,0x5d36,0x5d40,
-0x5d45,0x5e44,0x5e41,0x5f58,0x5fa6,0x5fa5,0x5fab,0x60c9,
-0x60b9,0x60cc,0x60e2,0x60ce,0x60c4,0x6114,0x60f2,0x610a,
-0x6116,0x6105,0x60f5,0x6113,0x60f8,0x60fc,0x60fe,0x60c1,
-0x6103,0x6118,0x611d,0x6110,0x60ff,0x6104,0x610b,0x624a,
-0x6394,0x63b1,0x63b0,0x63ce,0x63e5,0x63e8,0x63ef,0x63c3,
-0x649d,0x63f3,0x63ca,0x63e0,0x63f6,0x63d5,0x63f2,0x63f5,
-0x6461,0x63df,0x63be,0x63dd,0x63dc,0x63c4,0x63d8,0x63d3,
-0x63c2,0x63c7,0x63cc,0x63cb,0x63c8,0x63f0,0x63d7,0x63d9,
-0x6532,0x6567,0x656a,0x6564,0x655c,0x6568,0x6565,0x658c,
-0x659d,0x659e,0x65ae,0x65d0,0x65d2,0x667c,0x666c,0x667b,
-0x6680,0x6671,0x6679,0x666a,0x6672,0x6701,0x690c,0x68d3,
-0x6904,0x68dc,0x692a,0x68ec,0x68ea,0x68f1,0x690f,0x68d6,
-0x68f7,0x68eb,0x68e4,0x68f6,0x6913,0x6910,0x68f3,0x68e1,
-0x6907,0x68cc,0x6908,0x6970,0x68b4,0x6911,0x68ef,0x68c6,
-0x6914,0x68f8,0x68d0,0x68fd,0x68fc,0x68e8,0x690b,0x690a,
-0x6917,0x68ce,0x68c8,0x68dd,0x68de,0x68e6,0x68f4,0x68d1,
-0x6906,0x68d4,0x68e9,0x6915,0x6925,0x68c7,0x6b39,0x6b3b,
-0x6b3f,0x6b3c,0x6b94,0x6b97,0x6b99,0x6b95,0x6bbd,0x6bf0,
-0x6bf2,0x6bf3,0x6c30,0x6dfc,0x6e46,0x6e47,0x6e1f,0x6e49,
-0x6e88,0x6e3c,0x6e3d,0x6e45,0x6e62,0x6e2b,0x6e3f,0x6e41,
-0x6e5d,0x6e73,0x6e1c,0x6e33,0x6e4b,0x6e40,0x6e51,0x6e3b,
-0x6e03,0x6e2e,0x6e5e,0x6e68,0x6e5c,0x6e61,0x6e31,0x6e28,
-0x6e60,0x6e71,0x6e6b,0x6e39,0x6e22,0x6e30,0x6e53,0x6e65,
-0x6e27,0x6e78,0x6e64,0x6e77,0x6e55,0x6e79,0x6e52,0x6e66,
-0x6e35,0x6e36,0x6e5a,0x7120,0x711e,0x712f,0x70fb,0x712e,
-0x7131,0x7123,0x7125,0x7122,0x7132,0x711f,0x7128,0x713a,
-0x711b,0x724b,0x725a,0x7288,0x7289,0x7286,0x7285,0x728b,
-0x7312,0x730b,0x7330,0x7322,0x7331,0x7333,0x7327,0x7332,
-0x732d,0x7326,0x7323,0x7335,0x730c,0x742e,0x742c,0x7430,
-0x742b,0x7416,0x741a,0x7421,0x742d,0x7431,0x7424,0x7423,
-0x741d,0x7429,0x7420,0x7432,0x74fb,0x752f,0x756f,0x756c,
-0x75e7,0x75da,0x75e1,0x75e6,0x75dd,0x75df,0x75e4,0x75d7,
-0x7695,0x7692,0x76da,0x7746,0x7747,0x7744,0x774d,0x7745,
-0x774a,0x774e,0x774b,0x774c,0x77de,0x77ec,0x7860,0x7864,
-0x7865,0x785c,0x786d,0x7871,0x786a,0x786e,0x7870,0x7869,
-0x7868,0x785e,0x7862,0x7974,0x7973,0x7972,0x7970,0x7a02,
-0x7a0a,0x7a03,0x7a0c,0x7a04,0x7a99,0x7ae6,0x7ae4,0x7b4a,
-0x7b47,0x7b44,0x7b48,0x7b4c,0x7b4e,0x7b40,0x7b58,0x7b45,
-0x7ca2,0x7c9e,0x7ca8,0x7ca1,0x7d58,0x7d6f,0x7d63,0x7d53,
-0x7d56,0x7d67,0x7d6a,0x7d4f,0x7d6d,0x7d5c,0x7d6b,0x7d52,
-0x7d54,0x7d69,0x7d51,0x7d5f,0x7d4e,0x7f3e,0x7f3f,0x7f65,
-0x7f66,0x7fa2,0x7fa0,0x7fa1,0x7fd7,0x8051,0x804f,0x8050,
-0x80fe,0x80d4,0x8143,0x814a,0x8152,0x814f,0x8147,0x813d,
-0x814d,0x813a,0x81e6,0x81ee,0x81f7,0x81f8,0x81f9,0x8204,
-0x823c,0x823d,0x823f,0x8275,0x833b,0x83cf,0x83f9,0x8423,
-0x83c0,0x83e8,0x8412,0x83e7,0x83e4,0x83fc,0x83f6,0x8410,
-0x83c6,0x83c8,0x83eb,0x83e3,0x83bf,0x8401,0x83dd,0x83e5,
-0x83d8,0x83ff,0x83e1,0x83cb,0x83ce,0x83d6,0x83f5,0x83c9,
-0x8409,0x840f,0x83de,0x8411,0x8406,0x83c2,0x83f3,0x83d5,
-0x83fa,0x83c7,0x83d1,0x83ea,0x8413,0x839a,0x83c3,0x83ec,
-0x83ee,0x83c4,0x83fb,0x83d7,0x83e2,0x841b,0x83db,0x83fe,
-0x86d8,0x86e2,0x86e6,0x86d3,0x86e3,0x86da,0x86ea,0x86dd,
-0x86eb,0x86dc,0x86ec,0x86e9,0x86d7,0x86e8,0x86d1,0x8848,
-0x8856,0x8855,0x88ba,0x88d7,0x88b9,0x88b8,0x88c0,0x88be,
-0x88b6,0x88bc,0x88b7,0x88bd,0x88b2,0x8901,0x88c9,0x8995,
-0x8998,0x8997,0x89dd,0x89da,0x89db,0x8a4e,0x8a4d,0x8a39,
-0x8a59,0x8a40,0x8a57,0x8a58,0x8a44,0x8a45,0x8a52,0x8a48,
-0x8a51,0x8a4a,0x8a4c,0x8a4f,0x8c5f,0x8c81,0x8c80,0x8cba,
-0x8cbe,0x8cb0,0x8cb9,0x8cb5,0x8d84,0x8d80,0x8d89,0x8dd8,
-0x8dd3,0x8dcd,0x8dc7,0x8dd6,0x8ddc,0x8dcf,0x8dd5,0x8dd9,
-0x8dc8,0x8dd7,0x8dc5,0x8eef,0x8ef7,0x8efa,0x8ef9,0x8ee6,
-0x8eee,0x8ee5,0x8ef5,0x8ee7,0x8ee8,0x8ef6,0x8eeb,0x8ef1,
-0x8eec,0x8ef4,0x8ee9,0x902d,0x9034,0x902f,0x9106,0x912c,
-0x9104,0x90ff,0x90fc,0x9108,0x90f9,0x90fb,0x9101,0x9100,
-0x9107,0x9105,0x9103,0x9161,0x9164,0x915f,0x9162,0x9160,
-0x9201,0x920a,0x9225,0x9203,0x921a,0x9226,0x920f,0x920c,
-0x9200,0x9212,0x91ff,0x91fd,0x9206,0x9204,0x9227,0x9202,
-0x921c,0x9224,0x9219,0x9217,0x9205,0x9216,0x957b,0x958d,
-0x958c,0x9590,0x9687,0x967e,0x9688,0x9689,0x9683,0x9680,
-0x96c2,0x96c8,0x96c3,0x96f1,0x96f0,0x976c,0x9770,0x976e,
-0x9807,0x98a9,0x98eb,0x9ce6,0x9ef9,0x4e83,0x4e84,0x4eb6,
-0x50bd,0x50bf,0x50c6,0x50ae,0x50c4,0x50ca,0x50b4,0x50c8,
-0x50c2,0x50b0,0x50c1,0x50ba,0x50b1,0x50cb,0x50c9,0x50b6,
-0x50b8,0x51d7,0x527a,0x5278,0x527b,0x527c,0x55c3,0x55db,
-0x55cc,0x55d0,0x55cb,0x55ca,0x55dd,0x55c0,0x55d4,0x55c4,
-0x55e9,0x55bf,0x55d2,0x558d,0x55cf,0x55d5,0x55e2,0x55d6,
-0x55c8,0x55f2,0x55cd,0x55d9,0x55c2,0x5714,0x5853,0x5868,
-0x5864,0x584f,0x584d,0x5849,0x586f,0x5855,0x584e,0x585d,
-0x5859,0x5865,0x585b,0x583d,0x5863,0x5871,0x58fc,0x5ac7,
-0x5ac4,0x5acb,0x5aba,0x5ab8,0x5ab1,0x5ab5,0x5ab0,0x5abf,
-0x5ac8,0x5abb,0x5ac6,0x5ab7,0x5ac0,0x5aca,0x5ab4,0x5ab6,
-0x5acd,0x5ab9,0x5a90,0x5bd6,0x5bd8,0x5bd9,0x5c1f,0x5c33,
-0x5d71,0x5d63,0x5d4a,0x5d65,0x5d72,0x5d6c,0x5d5e,0x5d68,
-0x5d67,0x5d62,0x5df0,0x5e4f,0x5e4e,0x5e4a,0x5e4d,0x5e4b,
-0x5ec5,0x5ecc,0x5ec6,0x5ecb,0x5ec7,0x5f40,0x5faf,0x5fad,
-0x60f7,0x6149,0x614a,0x612b,0x6145,0x6136,0x6132,0x612e,
-0x6146,0x612f,0x614f,0x6129,0x6140,0x6220,0x9168,0x6223,
-0x6225,0x6224,0x63c5,0x63f1,0x63eb,0x6410,0x6412,0x6409,
-0x6420,0x6424,0x6433,0x6443,0x641f,0x6415,0x6418,0x6439,
-0x6437,0x6422,0x6423,0x640c,0x6426,0x6430,0x6428,0x6441,
-0x6435,0x642f,0x640a,0x641a,0x6440,0x6425,0x6427,0x640b,
-0x63e7,0x641b,0x642e,0x6421,0x640e,0x656f,0x6592,0x65d3,
-0x6686,0x668c,0x6695,0x6690,0x668b,0x668a,0x6699,0x6694,
-0x6678,0x6720,0x6966,0x695f,0x6938,0x694e,0x6962,0x6971,
-0x693f,0x6945,0x696a,0x6939,0x6942,0x6957,0x6959,0x697a,
-0x6948,0x6949,0x6935,0x696c,0x6933,0x693d,0x6965,0x68f0,
-0x6978,0x6934,0x6969,0x6940,0x696f,0x6944,0x6976,0x6958,
-0x6941,0x6974,0x694c,0x693b,0x694b,0x6937,0x695c,0x694f,
-0x6951,0x6932,0x6952,0x692f,0x697b,0x693c,0x6b46,0x6b45,
-0x6b43,0x6b42,0x6b48,0x6b41,0x6b9b,0x6bfb,0x6bfc,0x6bf9,
-0x6bf7,0x6bf8,0x6e9b,0x6ed6,0x6ec8,0x6e8f,0x6ec0,0x6e9f,
-0x6e93,0x6e94,0x6ea0,0x6eb1,0x6eb9,0x6ec6,0x6ed2,0x6ebd,
-0x6ec1,0x6e9e,0x6ec9,0x6eb7,0x6eb0,0x6ecd,0x6ea6,0x6ecf,
-0x6eb2,0x6ebe,0x6ec3,0x6edc,0x6ed8,0x6e99,0x6e92,0x6e8e,
-0x6e8d,0x6ea4,0x6ea1,0x6ebf,0x6eb3,0x6ed0,0x6eca,0x6e97,
-0x6eae,0x6ea3,0x7147,0x7154,0x7152,0x7163,0x7160,0x7141,
-0x715d,0x7162,0x7172,0x7178,0x716a,0x7161,0x7142,0x7158,
-0x7143,0x714b,0x7170,0x715f,0x7150,0x7153,0x7144,0x714d,
-0x715a,0x724f,0x728d,0x728c,0x7291,0x7290,0x728e,0x733c,
-0x7342,0x733b,0x733a,0x7340,0x734a,0x7349,0x7444,0x744a,
-0x744b,0x7452,0x7451,0x7457,0x7440,0x744f,0x7450,0x744e,
-0x7442,0x7446,0x744d,0x7454,0x74e1,0x74ff,0x74fe,0x74fd,
-0x751d,0x7579,0x7577,0x6983,0x75ef,0x760f,0x7603,0x75f7,
-0x75fe,0x75fc,0x75f9,0x75f8,0x7610,0x75fb,0x75f6,0x75ed,
-0x75f5,0x75fd,0x7699,0x76b5,0x76dd,0x7755,0x775f,0x7760,
-0x7752,0x7756,0x775a,0x7769,0x7767,0x7754,0x7759,0x776d,
-0x77e0,0x7887,0x789a,0x7894,0x788f,0x7884,0x7895,0x7885,
-0x7886,0x78a1,0x7883,0x7879,0x7899,0x7880,0x7896,0x787b,
-0x797c,0x7982,0x797d,0x7979,0x7a11,0x7a18,0x7a19,0x7a12,
-0x7a17,0x7a15,0x7a22,0x7a13,0x7a1b,0x7a10,0x7aa3,0x7aa2,
-0x7a9e,0x7aeb,0x7b66,0x7b64,0x7b6d,0x7b74,0x7b69,0x7b72,
-0x7b65,0x7b73,0x7b71,0x7b70,0x7b61,0x7b78,0x7b76,0x7b63,
-0x7cb2,0x7cb4,0x7caf,0x7d88,0x7d86,0x7d80,0x7d8d,0x7d7f,
-0x7d85,0x7d7a,0x7d8e,0x7d7b,0x7d83,0x7d7c,0x7d8c,0x7d94,
-0x7d84,0x7d7d,0x7d92,0x7f6d,0x7f6b,0x7f67,0x7f68,0x7f6c,
-0x7fa6,0x7fa5,0x7fa7,0x7fdb,0x7fdc,0x8021,0x8164,0x8160,
-0x8177,0x815c,0x8169,0x815b,0x8162,0x8172,0x6721,0x815e,
-0x8176,0x8167,0x816f,0x8144,0x8161,0x821d,0x8249,0x8244,
-0x8240,0x8242,0x8245,0x84f1,0x843f,0x8456,0x8476,0x8479,
-0x848f,0x848d,0x8465,0x8451,0x8440,0x8486,0x8467,0x8430,
-0x844d,0x847d,0x845a,0x8459,0x8474,0x8473,0x845d,0x8507,
-0x845e,0x8437,0x843a,0x8434,0x847a,0x8443,0x8478,0x8432,
-0x8445,0x8429,0x83d9,0x844b,0x842f,0x8442,0x842d,0x845f,
-0x8470,0x8439,0x844e,0x844c,0x8452,0x846f,0x84c5,0x848e,
-0x843b,0x8447,0x8436,0x8433,0x8468,0x847e,0x8444,0x842b,
-0x8460,0x8454,0x846e,0x8450,0x870b,0x8704,0x86f7,0x870c,
-0x86fa,0x86d6,0x86f5,0x874d,0x86f8,0x870e,0x8709,0x8701,
-0x86f6,0x870d,0x8705,0x88d6,0x88cb,0x88cd,0x88ce,0x88de,
-0x88db,0x88da,0x88cc,0x88d0,0x8985,0x899b,0x89df,0x89e5,
-0x89e4,0x89e1,0x89e0,0x89e2,0x89dc,0x89e6,0x8a76,0x8a86,
-0x8a7f,0x8a61,0x8a3f,0x8a77,0x8a82,0x8a84,0x8a75,0x8a83,
-0x8a81,0x8a74,0x8a7a,0x8c3c,0x8c4b,0x8c4a,0x8c65,0x8c64,
-0x8c66,0x8c86,0x8c84,0x8c85,0x8ccc,0x8d68,0x8d69,0x8d91,
-0x8d8c,0x8d8e,0x8d8f,0x8d8d,0x8d93,0x8d94,0x8d90,0x8d92,
-0x8df0,0x8de0,0x8dec,0x8df1,0x8dee,0x8dd0,0x8de9,0x8de3,
-0x8de2,0x8de7,0x8df2,0x8deb,0x8df4,0x8f06,0x8eff,0x8f01,
-0x8f00,0x8f05,0x8f07,0x8f08,0x8f02,0x8f0b,0x9052,0x903f,
-0x9044,0x9049,0x903d,0x9110,0x910d,0x910f,0x9111,0x9116,
-0x9114,0x910b,0x910e,0x916e,0x916f,0x9248,0x9252,0x9230,
-0x923a,0x9266,0x9233,0x9265,0x925e,0x9283,0x922e,0x924a,
-0x9246,0x926d,0x926c,0x924f,0x9260,0x9267,0x926f,0x9236,
-0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,0x9272,0x924e,
-0x9253,0x924c,0x9256,0x9232,0x959f,0x959c,0x959e,0x959b,
-0x9692,0x9693,0x9691,0x9697,0x96ce,0x96fa,0x96fd,0x96f8,
-0x96f5,0x9773,0x9777,0x9778,0x9772,0x980f,0x980d,0x980e,
-0x98ac,0x98f6,0x98f9,0x99af,0x99b2,0x99b0,0x99b5,0x9aad,
-0x9aab,0x9b5b,0x9cea,0x9ced,0x9ce7,0x9e80,0x9efd,0x50e6,
-0x50d4,0x50d7,0x50e8,0x50f3,0x50db,0x50ea,0x50dd,0x50e4,
-0x50d3,0x50ec,0x50f0,0x50ef,0x50e3,0x50e0,0x51d8,0x5280,
-0x5281,0x52e9,0x52eb,0x5330,0x53ac,0x5627,0x5615,0x560c,
-0x5612,0x55fc,0x560f,0x561c,0x5601,0x5613,0x5602,0x55fa,
-0x561d,0x5604,0x55ff,0x55f9,0x5889,0x587c,0x5890,0x5898,
-0x5886,0x5881,0x587f,0x5874,0x588b,0x587a,0x5887,0x5891,
-0x588e,0x5876,0x5882,0x5888,0x587b,0x5894,0x588f,0x58fe,
-0x596b,0x5adc,0x5aee,0x5ae5,0x5ad5,0x5aea,0x5ada,0x5aed,
-0x5aeb,0x5af3,0x5ae2,0x5ae0,0x5adb,0x5aec,0x5ade,0x5add,
-0x5ad9,0x5ae8,0x5adf,0x5b77,0x5be0,0x5be3,0x5c63,0x5d82,
-0x5d80,0x5d7d,0x5d86,0x5d7a,0x5d81,0x5d77,0x5d8a,0x5d89,
-0x5d88,0x5d7e,0x5d7c,0x5d8d,0x5d79,0x5d7f,0x5e58,0x5e59,
-0x5e53,0x5ed8,0x5ed1,0x5ed7,0x5ece,0x5edc,0x5ed5,0x5ed9,
-0x5ed2,0x5ed4,0x5f44,0x5f43,0x5f6f,0x5fb6,0x612c,0x6128,
-0x6141,0x615e,0x6171,0x6173,0x6152,0x6153,0x6172,0x616c,
-0x6180,0x6174,0x6154,0x617a,0x615b,0x6165,0x613b,0x616a,
-0x6161,0x6156,0x6229,0x6227,0x622b,0x642b,0x644d,0x645b,
-0x645d,0x6474,0x6476,0x6472,0x6473,0x647d,0x6475,0x6466,
-0x64a6,0x644e,0x6482,0x645e,0x645c,0x644b,0x6453,0x6460,
-0x6450,0x647f,0x643f,0x646c,0x646b,0x6459,0x6465,0x6477,
-0x6573,0x65a0,0x66a1,0x66a0,0x669f,0x6705,0x6704,0x6722,
-0x69b1,0x69b6,0x69c9,0x69a0,0x69ce,0x6996,0x69b0,0x69ac,
-0x69bc,0x6991,0x6999,0x698e,0x69a7,0x698d,0x69a9,0x69be,
-0x69af,0x69bf,0x69c4,0x69bd,0x69a4,0x69d4,0x69b9,0x69ca,
-0x699a,0x69cf,0x69b3,0x6993,0x69aa,0x69a1,0x699e,0x69d9,
-0x6997,0x6990,0x69c2,0x69b5,0x69a5,0x69c6,0x6b4a,0x6b4d,
-0x6b4b,0x6b9e,0x6b9f,0x6ba0,0x6bc3,0x6bc4,0x6bfe,0x6ece,
-0x6ef5,0x6ef1,0x6f03,0x6f25,0x6ef8,0x6f37,0x6efb,0x6f2e,
-0x6f09,0x6f4e,0x6f19,0x6f1a,0x6f27,0x6f18,0x6f3b,0x6f12,
-0x6eed,0x6f0a,0x6f36,0x6f73,0x6ef9,0x6eee,0x6f2d,0x6f40,
-0x6f30,0x6f3c,0x6f35,0x6eeb,0x6f07,0x6f0e,0x6f43,0x6f05,
-0x6efd,0x6ef6,0x6f39,0x6f1c,0x6efc,0x6f3a,0x6f1f,0x6f0d,
-0x6f1e,0x6f08,0x6f21,0x7187,0x7190,0x7189,0x7180,0x7185,
-0x7182,0x718f,0x717b,0x7186,0x7181,0x7197,0x7244,0x7253,
-0x7297,0x7295,0x7293,0x7343,0x734d,0x7351,0x734c,0x7462,
-0x7473,0x7471,0x7475,0x7472,0x7467,0x746e,0x7500,0x7502,
-0x7503,0x757d,0x7590,0x7616,0x7608,0x760c,0x7615,0x7611,
-0x760a,0x7614,0x76b8,0x7781,0x777c,0x7785,0x7782,0x776e,
-0x7780,0x776f,0x777e,0x7783,0x78b2,0x78aa,0x78b4,0x78ad,
-0x78a8,0x787e,0x78ab,0x789e,0x78a5,0x78a0,0x78ac,0x78a2,
-0x78a4,0x7998,0x798a,0x798b,0x7996,0x7995,0x7994,0x7993,
-0x7997,0x7988,0x7992,0x7990,0x7a2b,0x7a4a,0x7a30,0x7a2f,
-0x7a28,0x7a26,0x7aa8,0x7aab,0x7aac,0x7aee,0x7b88,0x7b9c,
-0x7b8a,0x7b91,0x7b90,0x7b96,0x7b8d,0x7b8c,0x7b9b,0x7b8e,
-0x7b85,0x7b98,0x5284,0x7b99,0x7ba4,0x7b82,0x7cbb,0x7cbf,
-0x7cbc,0x7cba,0x7da7,0x7db7,0x7dc2,0x7da3,0x7daa,0x7dc1,
-0x7dc0,0x7dc5,0x7d9d,0x7dce,0x7dc4,0x7dc6,0x7dcb,0x7dcc,
-0x7daf,0x7db9,0x7d96,0x7dbc,0x7d9f,0x7da6,0x7dae,0x7da9,
-0x7da1,0x7dc9,0x7f73,0x7fe2,0x7fe3,0x7fe5,0x7fde,0x8024,
-0x805d,0x805c,0x8189,0x8186,0x8183,0x8187,0x818d,0x818c,
-0x818b,0x8215,0x8497,0x84a4,0x84a1,0x849f,0x84ba,0x84ce,
-0x84c2,0x84ac,0x84ae,0x84ab,0x84b9,0x84b4,0x84c1,0x84cd,
-0x84aa,0x849a,0x84b1,0x84d0,0x849d,0x84a7,0x84bb,0x84a2,
-0x8494,0x84c7,0x84cc,0x849b,0x84a9,0x84af,0x84a8,0x84d6,
-0x8498,0x84b6,0x84cf,0x84a0,0x84d7,0x84d4,0x84d2,0x84db,
-0x84b0,0x8491,0x8661,0x8733,0x8723,0x8728,0x876b,0x8740,
-0x872e,0x871e,0x8721,0x8719,0x871b,0x8743,0x872c,0x8741,
-0x873e,0x8746,0x8720,0x8732,0x872a,0x872d,0x873c,0x8712,
-0x873a,0x8731,0x8735,0x8742,0x8726,0x8727,0x8738,0x8724,
-0x871a,0x8730,0x8711,0x88f7,0x88e7,0x88f1,0x88f2,0x88fa,
-0x88fe,0x88ee,0x88fc,0x88f6,0x88fb,0x88f0,0x88ec,0x88eb,
-0x899d,0x89a1,0x899f,0x899e,0x89e9,0x89eb,0x89e8,0x8aab,
-0x8a99,0x8a8b,0x8a92,0x8a8f,0x8a96,0x8c3d,0x8c68,0x8c69,
-0x8cd5,0x8ccf,0x8cd7,0x8d96,0x8e09,0x8e02,0x8dff,0x8e0d,
-0x8dfd,0x8e0a,0x8e03,0x8e07,0x8e06,0x8e05,0x8dfe,0x8e00,
-0x8e04,0x8f10,0x8f11,0x8f0e,0x8f0d,0x9123,0x911c,0x9120,
-0x9122,0x911f,0x911d,0x911a,0x9124,0x9121,0x911b,0x917a,
-0x9172,0x9179,0x9173,0x92a5,0x92a4,0x9276,0x929b,0x927a,
-0x92a0,0x9294,0x92aa,0x928d,0x92a6,0x929a,0x92ab,0x9279,
-0x9297,0x927f,0x92a3,0x92ee,0x928e,0x9282,0x9295,0x92a2,
-0x927d,0x9288,0x92a1,0x928a,0x9286,0x928c,0x9299,0x92a7,
-0x927e,0x9287,0x92a9,0x929d,0x928b,0x922d,0x969e,0x96a1,
-0x96ff,0x9758,0x977d,0x977a,0x977e,0x9783,0x9780,0x9782,
-0x977b,0x9784,0x9781,0x977f,0x97ce,0x97cd,0x9816,0x98ad,
-0x98ae,0x9902,0x9900,0x9907,0x999d,0x999c,0x99c3,0x99b9,
-0x99bb,0x99ba,0x99c2,0x99bd,0x99c7,0x9ab1,0x9ae3,0x9ae7,
-0x9b3e,0x9b3f,0x9b60,0x9b61,0x9b5f,0x9cf1,0x9cf2,0x9cf5,
-0x9ea7,0x50ff,0x5103,0x5130,0x50f8,0x5106,0x5107,0x50f6,
-0x50fe,0x510b,0x510c,0x50fd,0x510a,0x528b,0x528c,0x52f1,
-0x52ef,0x5648,0x5642,0x564c,0x5635,0x5641,0x564a,0x5649,
-0x5646,0x5658,0x565a,0x5640,0x5633,0x563d,0x562c,0x563e,
-0x5638,0x562a,0x563a,0x571a,0x58ab,0x589d,0x58b1,0x58a0,
-0x58a3,0x58af,0x58ac,0x58a5,0x58a1,0x58ff,0x5aff,0x5af4,
-0x5afd,0x5af7,0x5af6,0x5b03,0x5af8,0x5b02,0x5af9,0x5b01,
-0x5b07,0x5b05,0x5b0f,0x5c67,0x5d99,0x5d97,0x5d9f,0x5d92,
-0x5da2,0x5d93,0x5d95,0x5da0,0x5d9c,0x5da1,0x5d9a,0x5d9e,
-0x5e69,0x5e5d,0x5e60,0x5e5c,0x7df3,0x5edb,0x5ede,0x5ee1,
-0x5f49,0x5fb2,0x618b,0x6183,0x6179,0x61b1,0x61b0,0x61a2,
-0x6189,0x619b,0x6193,0x61af,0x61ad,0x619f,0x6192,0x61aa,
-0x61a1,0x618d,0x6166,0x61b3,0x622d,0x646e,0x6470,0x6496,
-0x64a0,0x6485,0x6497,0x649c,0x648f,0x648b,0x648a,0x648c,
-0x64a3,0x649f,0x6468,0x64b1,0x6498,0x6576,0x657a,0x6579,
-0x657b,0x65b2,0x65b3,0x66b5,0x66b0,0x66a9,0x66b2,0x66b7,
-0x66aa,0x66af,0x6a00,0x6a06,0x6a17,0x69e5,0x69f8,0x6a15,
-0x69f1,0x69e4,0x6a20,0x69ff,0x69ec,0x69e2,0x6a1b,0x6a1d,
-0x69fe,0x6a27,0x69f2,0x69ee,0x6a14,0x69f7,0x69e7,0x6a40,
-0x6a08,0x69e6,0x69fb,0x6a0d,0x69fc,0x69eb,0x6a09,0x6a04,
-0x6a18,0x6a25,0x6a0f,0x69f6,0x6a26,0x6a07,0x69f4,0x6a16,
-0x6b51,0x6ba5,0x6ba3,0x6ba2,0x6ba6,0x6c01,0x6c00,0x6bff,
-0x6c02,0x6f41,0x6f26,0x6f7e,0x6f87,0x6fc6,0x6f92,0x6f8d,
-0x6f89,0x6f8c,0x6f62,0x6f4f,0x6f85,0x6f5a,0x6f96,0x6f76,
-0x6f6c,0x6f82,0x6f55,0x6f72,0x6f52,0x6f50,0x6f57,0x6f94,
-0x6f93,0x6f5d,0x6f00,0x6f61,0x6f6b,0x6f7d,0x6f67,0x6f90,
-0x6f53,0x6f8b,0x6f69,0x6f7f,0x6f95,0x6f63,0x6f77,0x6f6a,
-0x6f7b,0x71b2,0x71af,0x719b,0x71b0,0x71a0,0x719a,0x71a9,
-0x71b5,0x719d,0x71a5,0x719e,0x71a4,0x71a1,0x71aa,0x719c,
-0x71a7,0x71b3,0x7298,0x729a,0x7358,0x7352,0x735e,0x735f,
-0x7360,0x735d,0x735b,0x7361,0x735a,0x7359,0x7362,0x7487,
-0x7489,0x748a,0x7486,0x7481,0x747d,0x7485,0x7488,0x747c,
-0x7479,0x7508,0x7507,0x757e,0x7625,0x761e,0x7619,0x761d,
-0x761c,0x7623,0x761a,0x7628,0x761b,0x769c,0x769d,0x769e,
-0x769b,0x778d,0x778f,0x7789,0x7788,0x78cd,0x78bb,0x78cf,
-0x78cc,0x78d1,0x78ce,0x78d4,0x78c8,0x78c3,0x78c4,0x78c9,
-0x799a,0x79a1,0x79a0,0x799c,0x79a2,0x799b,0x6b76,0x7a39,
-0x7ab2,0x7ab4,0x7ab3,0x7bb7,0x7bcb,0x7bbe,0x7bac,0x7bce,
-0x7baf,0x7bb9,0x7bca,0x7bb5,0x7cc5,0x7cc8,0x7ccc,0x7ccb,
-0x7df7,0x7ddb,0x7dea,0x7de7,0x7dd7,0x7de1,0x7e03,0x7dfa,
-0x7de6,0x7df6,0x7df1,0x7df0,0x7dee,0x7ddf,0x7f76,0x7fac,
-0x7fb0,0x7fad,0x7fed,0x7feb,0x7fea,0x7fec,0x7fe6,0x7fe8,
-0x8064,0x8067,0x81a3,0x819f,0x819e,0x8195,0x81a2,0x8199,
-0x8197,0x8216,0x824f,0x8253,0x8252,0x8250,0x824e,0x8251,
-0x8524,0x853b,0x850f,0x8500,0x8529,0x850e,0x8509,0x850d,
-0x851f,0x850a,0x8527,0x851c,0x84fb,0x852b,0x84fa,0x8508,
-0x850c,0x84f4,0x852a,0x84f2,0x8515,0x84f7,0x84eb,0x84f3,
-0x84fc,0x8512,0x84ea,0x84e9,0x8516,0x84fe,0x8528,0x851d,
-0x852e,0x8502,0x84fd,0x851e,0x84f6,0x8531,0x8526,0x84e7,
-0x84e8,0x84f0,0x84ef,0x84f9,0x8518,0x8520,0x8530,0x850b,
-0x8519,0x852f,0x8662,0x8756,0x8763,0x8764,0x8777,0x87e1,
-0x8773,0x8758,0x8754,0x875b,0x8752,0x8761,0x875a,0x8751,
-0x875e,0x876d,0x876a,0x8750,0x874e,0x875f,0x875d,0x876f,
-0x876c,0x877a,0x876e,0x875c,0x8765,0x874f,0x877b,0x8775,
-0x8762,0x8767,0x8769,0x885a,0x8905,0x890c,0x8914,0x890b,
-0x8917,0x8918,0x8919,0x8906,0x8916,0x8911,0x890e,0x8909,
-0x89a2,0x89a4,0x89a3,0x89ed,0x89f0,0x89ec,0x8acf,0x8ac6,
-0x8ab8,0x8ad3,0x8ad1,0x8ad4,0x8ad5,0x8abb,0x8ad7,0x8abe,
-0x8ac0,0x8ac5,0x8ad8,0x8ac3,0x8aba,0x8abd,0x8ad9,0x8c3e,
-0x8c4d,0x8c8f,0x8ce5,0x8cdf,0x8cd9,0x8ce8,0x8cda,0x8cdd,
-0x8ce7,0x8da0,0x8d9c,0x8da1,0x8d9b,0x8e20,0x8e23,0x8e25,
-0x8e24,0x8e2e,0x8e15,0x8e1b,0x8e16,0x8e11,0x8e19,0x8e26,
-0x8e27,0x8e14,0x8e12,0x8e18,0x8e13,0x8e1c,0x8e17,0x8e1a,
-0x8f2c,0x8f24,0x8f18,0x8f1a,0x8f20,0x8f23,0x8f16,0x8f17,
-0x9073,0x9070,0x906f,0x9067,0x906b,0x912f,0x912b,0x9129,
-0x912a,0x9132,0x9126,0x912e,0x9185,0x9186,0x918a,0x9181,
-0x9182,0x9184,0x9180,0x92d0,0x92c3,0x92c4,0x92c0,0x92d9,
-0x92b6,0x92cf,0x92f1,0x92df,0x92d8,0x92e9,0x92d7,0x92dd,
-0x92cc,0x92ef,0x92c2,0x92e8,0x92ca,0x92c8,0x92ce,0x92e6,
-0x92cd,0x92d5,0x92c9,0x92e0,0x92de,0x92e7,0x92d1,0x92d3,
-0x92b5,0x92e1,0x9325,0x92c6,0x92b4,0x957c,0x95ac,0x95ab,
-0x95ae,0x95b0,0x96a4,0x96a2,0x96d3,0x9705,0x9708,0x9702,
-0x975a,0x978a,0x978e,0x9788,0x97d0,0x97cf,0x981e,0x981d,
-0x9826,0x9829,0x9828,0x9820,0x981b,0x9827,0x98b2,0x9908,
-0x98fa,0x9911,0x9914,0x9916,0x9917,0x9915,0x99dc,0x99cd,
-0x99cf,0x99d3,0x99d4,0x99ce,0x99c9,0x99d6,0x99d8,0x99cb,
-0x99d7,0x99cc,0x9ab3,0x9aec,0x9aeb,0x9af3,0x9af2,0x9af1,
-0x9b46,0x9b43,0x9b67,0x9b74,0x9b71,0x9b66,0x9b76,0x9b75,
-0x9b70,0x9b68,0x9b64,0x9b6c,0x9cfc,0x9cfa,0x9cfd,0x9cff,
-0x9cf7,0x9d07,0x9d00,0x9cf9,0x9cfb,0x9d08,0x9d05,0x9d04,
-0x9e83,0x9ed3,0x9f0f,0x9f10,0x511c,0x5113,0x5117,0x511a,
-0x5111,0x51de,0x5334,0x53e1,0x5670,0x5660,0x566e,0x5673,
-0x5666,0x5663,0x566d,0x5672,0x565e,0x5677,0x571c,0x571b,
-0x58c8,0x58bd,0x58c9,0x58bf,0x58ba,0x58c2,0x58bc,0x58c6,
-0x5b17,0x5b19,0x5b1b,0x5b21,0x5b14,0x5b13,0x5b10,0x5b16,
-0x5b28,0x5b1a,0x5b20,0x5b1e,0x5bef,0x5dac,0x5db1,0x5da9,
-0x5da7,0x5db5,0x5db0,0x5dae,0x5daa,0x5da8,0x5db2,0x5dad,
-0x5daf,0x5db4,0x5e67,0x5e68,0x5e66,0x5e6f,0x5ee9,0x5ee7,
-0x5ee6,0x5ee8,0x5ee5,0x5f4b,0x5fbc,0x5fbb,0x619d,0x61a8,
-0x6196,0x61c5,0x61b4,0x61c6,0x61c1,0x61cc,0x61ba,0x61bf,
-0x61b8,0x618c,0x64d7,0x64d6,0x64d0,0x64cf,0x64c9,0x64bd,
-0x6489,0x64c3,0x64db,0x64f3,0x64d9,0x6533,0x657f,0x657c,
-0x65a2,0x66c8,0x66be,0x66c0,0x66ca,0x66cb,0x66cf,0x66bd,
-0x66bb,0x66ba,0x66cc,0x6723,0x6a34,0x6a66,0x6a49,0x6a67,
-0x6a32,0x6a68,0x6a3e,0x6a5d,0x6a6d,0x6a76,0x6a5b,0x6a51,
-0x6a28,0x6a5a,0x6a3b,0x6a3f,0x6a41,0x6a6a,0x6a64,0x6a50,
-0x6a4f,0x6a54,0x6a6f,0x6a69,0x6a60,0x6a3c,0x6a5e,0x6a56,
-0x6a55,0x6a4d,0x6a4e,0x6a46,0x6b55,0x6b54,0x6b56,0x6ba7,
-0x6baa,0x6bab,0x6bc8,0x6bc7,0x6c04,0x6c03,0x6c06,0x6fad,
-0x6fcb,0x6fa3,0x6fc7,0x6fbc,0x6fce,0x6fc8,0x6f5e,0x6fc4,
-0x6fbd,0x6f9e,0x6fca,0x6fa8,0x7004,0x6fa5,0x6fae,0x6fba,
-0x6fac,0x6faa,0x6fcf,0x6fbf,0x6fb8,0x6fa2,0x6fc9,0x6fab,
-0x6fcd,0x6faf,0x6fb2,0x6fb0,0x71c5,0x71c2,0x71bf,0x71b8,
-0x71d6,0x71c0,0x71c1,0x71cb,0x71d4,0x71ca,0x71c7,0x71cf,
-0x71bd,0x71d8,0x71bc,0x71c6,0x71da,0x71db,0x729d,0x729e,
-0x7369,0x7366,0x7367,0x736c,0x7365,0x736b,0x736a,0x747f,
-0x749a,0x74a0,0x7494,0x7492,0x7495,0x74a1,0x750b,0x7580,
-0x762f,0x762d,0x7631,0x763d,0x7633,0x763c,0x7635,0x7632,
-0x7630,0x76bb,0x76e6,0x779a,0x779d,0x77a1,0x779c,0x779b,
-0x77a2,0x77a3,0x7795,0x7799,0x7797,0x78dd,0x78e9,0x78e5,
-0x78ea,0x78de,0x78e3,0x78db,0x78e1,0x78e2,0x78ed,0x78df,
-0x78e0,0x79a4,0x7a44,0x7a48,0x7a47,0x7ab6,0x7ab8,0x7ab5,
-0x7ab1,0x7ab7,0x7bde,0x7be3,0x7be7,0x7bdd,0x7bd5,0x7be5,
-0x7bda,0x7be8,0x7bf9,0x7bd4,0x7bea,0x7be2,0x7bdc,0x7beb,
-0x7bd8,0x7bdf,0x7cd2,0x7cd4,0x7cd7,0x7cd0,0x7cd1,0x7e12,
-0x7e21,0x7e17,0x7e0c,0x7e1f,0x7e20,0x7e13,0x7e0e,0x7e1c,
-0x7e15,0x7e1a,0x7e22,0x7e0b,0x7e0f,0x7e16,0x7e0d,0x7e14,
-0x7e25,0x7e24,0x7f43,0x7f7b,0x7f7c,0x7f7a,0x7fb1,0x7fef,
-0x802a,0x8029,0x806c,0x81b1,0x81a6,0x81ae,0x81b9,0x81b5,
-0x81ab,0x81b0,0x81ac,0x81b4,0x81b2,0x81b7,0x81a7,0x81f2,
-0x8255,0x8256,0x8257,0x8556,0x8545,0x856b,0x854d,0x8553,
-0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562,0x8544,
-0x8551,0x8547,0x8563,0x853e,0x855b,0x8571,0x854e,0x856e,
-0x8575,0x8555,0x8567,0x8560,0x858c,0x8566,0x855d,0x8554,
-0x8565,0x856c,0x8663,0x8665,0x8664,0x87a4,0x879b,0x878f,
-0x8797,0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779,
-0x8787,0x87a3,0x8785,0x8790,0x8791,0x879d,0x8784,0x8794,
-0x879c,0x879a,0x8789,0x891e,0x8926,0x8930,0x892d,0x892e,
-0x8927,0x8931,0x8922,0x8929,0x8923,0x892f,0x892c,0x891f,
-0x89f1,0x8ae0,0x8ae2,0x8af2,0x8af4,0x8af5,0x8add,0x8b14,
-0x8ae4,0x8adf,0x8af0,0x8ac8,0x8ade,0x8ae1,0x8ae8,0x8aff,
-0x8aef,0x8afb,0x8c91,0x8c92,0x8c90,0x8cf5,0x8cee,0x8cf1,
-0x8cf0,0x8cf3,0x8d6c,0x8d6e,0x8da5,0x8da7,0x8e33,0x8e3e,
-0x8e38,0x8e40,0x8e45,0x8e36,0x8e3c,0x8e3d,0x8e41,0x8e30,
-0x8e3f,0x8ebd,0x8f36,0x8f2e,0x8f35,0x8f32,0x8f39,0x8f37,
-0x8f34,0x9076,0x9079,0x907b,0x9086,0x90fa,0x9133,0x9135,
-0x9136,0x9193,0x9190,0x9191,0x918d,0x918f,0x9327,0x931e,
-0x9308,0x931f,0x9306,0x930f,0x937a,0x9338,0x933c,0x931b,
-0x9323,0x9312,0x9301,0x9346,0x932d,0x930e,0x930d,0x92cb,
-0x931d,0x92fa,0x9313,0x92f9,0x92f7,0x9334,0x9302,0x9324,
-0x92ff,0x9329,0x9339,0x9335,0x932a,0x9314,0x930c,0x930b,
-0x92fe,0x9309,0x9300,0x92fb,0x9316,0x95bc,0x95cd,0x95be,
-0x95b9,0x95ba,0x95b6,0x95bf,0x95b5,0x95bd,0x96a9,0x96d4,
-0x970b,0x9712,0x9710,0x9799,0x9797,0x9794,0x97f0,0x97f8,
-0x9835,0x982f,0x9832,0x9924,0x991f,0x9927,0x9929,0x999e,
-0x99ee,0x99ec,0x99e5,0x99e4,0x99f0,0x99e3,0x99ea,0x99e9,
-0x99e7,0x9ab9,0x9abf,0x9ab4,0x9abb,0x9af6,0x9afa,0x9af9,
-0x9af7,0x9b33,0x9b80,0x9b85,0x9b87,0x9b7c,0x9b7e,0x9b7b,
-0x9b82,0x9b93,0x9b92,0x9b90,0x9b7a,0x9b95,0x9b7d,0x9b88,
-0x9d25,0x9d17,0x9d20,0x9d1e,0x9d14,0x9d29,0x9d1d,0x9d18,
-0x9d22,0x9d10,0x9d19,0x9d1f,0x9e88,0x9e86,0x9e87,0x9eae,
-0x9ead,0x9ed5,0x9ed6,0x9efa,0x9f12,0x9f3d,0x5126,0x5125,
-0x5122,0x5124,0x5120,0x5129,0x52f4,0x5693,0x568c,0x568d,
-0x5686,0x5684,0x5683,0x567e,0x5682,0x567f,0x5681,0x58d6,
-0x58d4,0x58cf,0x58d2,0x5b2d,0x5b25,0x5b32,0x5b23,0x5b2c,
-0x5b27,0x5b26,0x5b2f,0x5b2e,0x5b7b,0x5bf1,0x5bf2,0x5db7,
-0x5e6c,0x5e6a,0x5fbe,0x61c3,0x61b5,0x61bc,0x61e7,0x61e0,
-0x61e5,0x61e4,0x61e8,0x61de,0x64ef,0x64e9,0x64e3,0x64eb,
-0x64e4,0x64e8,0x6581,0x6580,0x65b6,0x65da,0x66d2,0x6a8d,
-0x6a96,0x6a81,0x6aa5,0x6a89,0x6a9f,0x6a9b,0x6aa1,0x6a9e,
-0x6a87,0x6a93,0x6a8e,0x6a95,0x6a83,0x6aa8,0x6aa4,0x6a91,
-0x6a7f,0x6aa6,0x6a9a,0x6a85,0x6a8c,0x6a92,0x6b5b,0x6bad,
-0x6c09,0x6fcc,0x6fa9,0x6ff4,0x6fd4,0x6fe3,0x6fdc,0x6fed,
-0x6fe7,0x6fe6,0x6fde,0x6ff2,0x6fdd,0x6fe2,0x6fe8,0x71e1,
-0x71f1,0x71e8,0x71f2,0x71e4,0x71f0,0x71e2,0x7373,0x736e,
-0x736f,0x7497,0x74b2,0x74ab,0x7490,0x74aa,0x74ad,0x74b1,
-0x74a5,0x74af,0x7510,0x7511,0x7512,0x750f,0x7584,0x7643,
-0x7648,0x7649,0x7647,0x76a4,0x76e9,0x77b5,0x77ab,0x77b2,
-0x77b7,0x77b6,0x77b4,0x77b1,0x77a8,0x77f0,0x78f3,0x78fd,
-0x7902,0x78fb,0x78fc,0x78ff,0x78f2,0x7905,0x78f9,0x78fe,
-0x7904,0x79ab,0x79a8,0x7a5c,0x7a5b,0x7a56,0x7a58,0x7a54,
-0x7a5a,0x7abe,0x7ac0,0x7ac1,0x7c05,0x7c0f,0x7bf2,0x7c00,
-0x7bff,0x7bfb,0x7c0e,0x7bf4,0x7c0b,0x7bf3,0x7c02,0x7c09,
-0x7c03,0x7c01,0x7bf8,0x7bfd,0x7c06,0x7bf0,0x7bf1,0x7c10,
-0x7c0a,0x7ce8,0x7e2d,0x7e3c,0x7e42,0x7e33,0x9848,0x7e38,
-0x7e2a,0x7e49,0x7e40,0x7e47,0x7e29,0x7e4c,0x7e30,0x7e3b,
-0x7e36,0x7e44,0x7e3a,0x7f45,0x7f7f,0x7f7e,0x7f7d,0x7ff4,
-0x7ff2,0x802c,0x81bb,0x81c4,0x81cc,0x81ca,0x81c5,0x81c7,
-0x81bc,0x81e9,0x825b,0x825a,0x825c,0x8583,0x8580,0x858f,
-0x85a7,0x8595,0x85a0,0x858b,0x85a3,0x857b,0x85a4,0x859a,
-0x859e,0x8577,0x857c,0x8589,0x85a1,0x857a,0x8578,0x8557,
-0x858e,0x8596,0x8586,0x858d,0x8599,0x859d,0x8581,0x85a2,
-0x8582,0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859f,
-0x8668,0x87be,0x87aa,0x87ad,0x87c5,0x87b0,0x87ac,0x87b9,
-0x87b5,0x87bc,0x87ae,0x87c9,0x87c3,0x87c2,0x87cc,0x87b7,
-0x87af,0x87c4,0x87ca,0x87b4,0x87b6,0x87bf,0x87b8,0x87bd,
-0x87de,0x87b2,0x8935,0x8933,0x893c,0x893e,0x8941,0x8952,
-0x8937,0x8942,0x89ad,0x89af,0x89ae,0x89f2,0x89f3,0x8b1e,
-0x8b18,0x8b16,0x8b11,0x8b05,0x8b0b,0x8b22,0x8b0f,0x8b12,
-0x8b15,0x8b07,0x8b0d,0x8b08,0x8b06,0x8b1c,0x8b13,0x8b1a,
-0x8c4f,0x8c70,0x8c72,0x8c71,0x8c6f,0x8c95,0x8c94,0x8cf9,
-0x8d6f,0x8e4e,0x8e4d,0x8e53,0x8e50,0x8e4c,0x8e47,0x8f43,
-0x8f40,0x9085,0x907e,0x9138,0x919a,0x91a2,0x919b,0x9199,
-0x919f,0x91a1,0x919d,0x91a0,0x93a1,0x9383,0x93af,0x9364,
-0x9356,0x9347,0x937c,0x9358,0x935c,0x9376,0x9349,0x9350,
-0x9351,0x9360,0x936d,0x938f,0x934c,0x936a,0x9379,0x9357,
-0x9355,0x9352,0x934f,0x9371,0x9377,0x937b,0x9361,0x935e,
-0x9363,0x9367,0x934e,0x9359,0x95c7,0x95c0,0x95c9,0x95c3,
-0x95c5,0x95b7,0x96ae,0x96b0,0x96ac,0x9720,0x971f,0x9718,
-0x971d,0x9719,0x979a,0x97a1,0x979c,0x979e,0x979d,0x97d5,
-0x97d4,0x97f1,0x9841,0x9844,0x984a,0x9849,0x9845,0x9843,
-0x9925,0x992b,0x992c,0x992a,0x9933,0x9932,0x992f,0x992d,
-0x9931,0x9930,0x9998,0x99a3,0x99a1,0x9a02,0x99fa,0x99f4,
-0x99f7,0x99f9,0x99f8,0x99f6,0x99fb,0x99fd,0x99fe,0x99fc,
-0x9a03,0x9abe,0x9afe,0x9afd,0x9b01,0x9afc,0x9b48,0x9b9a,
-0x9ba8,0x9b9e,0x9b9b,0x9ba6,0x9ba1,0x9ba5,0x9ba4,0x9b86,
-0x9ba2,0x9ba0,0x9baf,0x9d33,0x9d41,0x9d67,0x9d36,0x9d2e,
-0x9d2f,0x9d31,0x9d38,0x9d30,0x9d45,0x9d42,0x9d43,0x9d3e,
-0x9d37,0x9d40,0x9d3d,0x7ff5,0x9d2d,0x9e8a,0x9e89,0x9e8d,
-0x9eb0,0x9ec8,0x9eda,0x9efb,0x9eff,0x9f24,0x9f23,0x9f22,
-0x9f54,0x9fa0,0x5131,0x512d,0x512e,0x5698,0x569c,0x5697,
-0x569a,0x569d,0x5699,0x5970,0x5b3c,0x5c69,0x5c6a,0x5dc0,
-0x5e6d,0x5e6e,0x61d8,0x61df,0x61ed,0x61ee,0x61f1,0x61ea,
-0x61f0,0x61eb,0x61d6,0x61e9,0x64ff,0x6504,0x64fd,0x64f8,
-0x6501,0x6503,0x64fc,0x6594,0x65db,0x66da,0x66db,0x66d8,
-0x6ac5,0x6ab9,0x6abd,0x6ae1,0x6ac6,0x6aba,0x6ab6,0x6ab7,
-0x6ac7,0x6ab4,0x6aad,0x6b5e,0x6bc9,0x6c0b,0x7007,0x700c,
-0x700d,0x7001,0x7005,0x7014,0x700e,0x6fff,0x7000,0x6ffb,
-0x7026,0x6ffc,0x6ff7,0x700a,0x7201,0x71ff,0x71f9,0x7203,
-0x71fd,0x7376,0x74b8,0x74c0,0x74b5,0x74c1,0x74be,0x74b6,
-0x74bb,0x74c2,0x7514,0x7513,0x765c,0x7664,0x7659,0x7650,
-0x7653,0x7657,0x765a,0x76a6,0x76bd,0x76ec,0x77c2,0x77ba,
-0x790c,0x7913,0x7914,0x7909,0x7910,0x7912,0x7911,0x79ad,
-0x79ac,0x7a5f,0x7c1c,0x7c29,0x7c19,0x7c20,0x7c1f,0x7c2d,
-0x7c1d,0x7c26,0x7c28,0x7c22,0x7c25,0x7c30,0x7e5c,0x7e50,
-0x7e56,0x7e63,0x7e58,0x7e62,0x7e5f,0x7e51,0x7e60,0x7e57,
-0x7e53,0x7fb5,0x7fb3,0x7ff7,0x7ff8,0x8075,0x81d1,0x81d2,
-0x81d0,0x825f,0x825e,0x85b4,0x85c6,0x85c0,0x85c3,0x85c2,
-0x85b3,0x85b5,0x85bd,0x85c7,0x85c4,0x85bf,0x85cb,0x85ce,
-0x85c8,0x85c5,0x85b1,0x85b6,0x85d2,0x8624,0x85b8,0x85b7,
-0x85be,0x8669,0x87e7,0x87e6,0x87e2,0x87db,0x87eb,0x87ea,
-0x87e5,0x87df,0x87f3,0x87e4,0x87d4,0x87dc,0x87d3,0x87ed,
-0x87d8,0x87e3,0x87d7,0x87d9,0x8801,0x87f4,0x87e8,0x87dd,
-0x8953,0x894b,0x894f,0x894c,0x8946,0x8950,0x8951,0x8949,
-0x8b2a,0x8b27,0x8b23,0x8b33,0x8b30,0x8b35,0x8b47,0x8b2f,
-0x8b3c,0x8b3e,0x8b31,0x8b25,0x8b37,0x8b26,0x8b36,0x8b2e,
-0x8b24,0x8b3b,0x8b3d,0x8b3a,0x8c42,0x8c75,0x8c99,0x8c98,
-0x8c97,0x8cfe,0x8d04,0x8d02,0x8d00,0x8e5c,0x8e62,0x8e60,
-0x8e57,0x8e56,0x8e5e,0x8e65,0x8e67,0x8e5b,0x8e5a,0x8e61,
-0x8e5d,0x8e69,0x8e54,0x8f46,0x8f47,0x8f48,0x8f4b,0x9128,
-0x913a,0x913b,0x913e,0x91a8,0x91a5,0x91a7,0x91af,0x91aa,
-0x93b5,0x938c,0x9392,0x93b7,0x939b,0x939d,0x9389,0x93a7,
-0x938e,0x93aa,0x939e,0x93a6,0x9395,0x9388,0x9399,0x939f,
-0x9380,0x938d,0x93b1,0x9391,0x93b2,0x93a4,0x93a8,0x93b4,
-0x93a3,0x95d2,0x95d3,0x95d1,0x96b3,0x96d7,0x96da,0x5dc2,
-0x96df,0x96d8,0x96dd,0x9723,0x9722,0x9725,0x97ac,0x97ae,
-0x97a8,0x97ab,0x97a4,0x97aa,0x97a2,0x97a5,0x97d7,0x97d9,
-0x97d6,0x97d8,0x97fa,0x9850,0x9851,0x9852,0x98b8,0x9941,
-0x993c,0x993a,0x9a0f,0x9a0b,0x9a09,0x9a0d,0x9a04,0x9a11,
-0x9a0a,0x9a05,0x9a07,0x9a06,0x9ac0,0x9adc,0x9b08,0x9b04,
-0x9b05,0x9b29,0x9b35,0x9b4a,0x9b4c,0x9b4b,0x9bc7,0x9bc6,
-0x9bc3,0x9bbf,0x9bc1,0x9bb5,0x9bb8,0x9bd3,0x9bb6,0x9bc4,
-0x9bb9,0x9bbd,0x9d5c,0x9d53,0x9d4f,0x9d4a,0x9d5b,0x9d4b,
-0x9d59,0x9d56,0x9d4c,0x9d57,0x9d52,0x9d54,0x9d5f,0x9d58,
-0x9d5a,0x9e8e,0x9e8c,0x9edf,0x9f01,0x9f00,0x9f16,0x9f25,
-0x9f2b,0x9f2a,0x9f29,0x9f28,0x9f4c,0x9f55,0x5134,0x5135,
-0x5296,0x52f7,0x53b4,0x56ab,0x56ad,0x56a6,0x56a7,0x56aa,
-0x56ac,0x58da,0x58dd,0x58db,0x5912,0x5b3d,0x5b3e,0x5b3f,
-0x5dc3,0x5e70,0x5fbf,0x61fb,0x6507,0x6510,0x650d,0x6509,
-0x650c,0x650e,0x6584,0x65de,0x65dd,0x66de,0x6ae7,0x6ae0,
-0x6acc,0x6ad1,0x6ad9,0x6acb,0x6adf,0x6adc,0x6ad0,0x6aeb,
-0x6acf,0x6acd,0x6ade,0x6b60,0x6bb0,0x6c0c,0x7019,0x7027,
-0x7020,0x7016,0x702b,0x7021,0x7022,0x7023,0x7029,0x7017,
-0x7024,0x701c,0x720c,0x720a,0x7207,0x7202,0x7205,0x72a5,
-0x72a6,0x72a4,0x72a3,0x72a1,0x74cb,0x74c5,0x74b7,0x74c3,
-0x7516,0x7660,0x77c9,0x77ca,0x77c4,0x77f1,0x791d,0x791b,
-0x7921,0x791c,0x7917,0x791e,0x79b0,0x7a67,0x7a68,0x7c33,
-0x7c3c,0x7c39,0x7c2c,0x7c3b,0x7cec,0x7cea,0x7e76,0x7e75,
-0x7e78,0x7e70,0x7e77,0x7e6f,0x7e7a,0x7e72,0x7e74,0x7e68,
-0x7f4b,0x7f4a,0x7f83,0x7f86,0x7fb7,0x7ffd,0x7ffe,0x8078,
-0x81d7,0x81d5,0x820b,0x8264,0x8261,0x8263,0x85eb,0x85f1,
-0x85ed,0x85d9,0x85e1,0x85e8,0x85da,0x85d7,0x85ec,0x85f2,
-0x85f8,0x85d8,0x85df,0x85e3,0x85dc,0x85d1,0x85f0,0x85e6,
-0x85ef,0x85de,0x85e2,0x8800,0x87fa,0x8803,0x87f6,0x87f7,
-0x8809,0x880c,0x880b,0x8806,0x87fc,0x8808,0x87ff,0x880a,
-0x8802,0x8962,0x895a,0x895b,0x8957,0x8961,0x895c,0x8958,
-0x895d,0x8959,0x8988,0x89b7,0x89b6,0x89f6,0x8b50,0x8b48,
-0x8b4a,0x8b40,0x8b53,0x8b56,0x8b54,0x8b4b,0x8b55,0x8b51,
-0x8b42,0x8b52,0x8b57,0x8c43,0x8c77,0x8c76,0x8c9a,0x8d06,
-0x8d07,0x8d09,0x8dac,0x8daa,0x8dad,0x8dab,0x8e6d,0x8e78,
-0x8e73,0x8e6a,0x8e6f,0x8e7b,0x8ec2,0x8f52,0x8f51,0x8f4f,
-0x8f50,0x8f53,0x8fb4,0x9140,0x913f,0x91b0,0x91ad,0x93de,
-0x93c7,0x93cf,0x93c2,0x93da,0x93d0,0x93f9,0x93ec,0x93cc,
-0x93d9,0x93a9,0x93e6,0x93ca,0x93d4,0x93ee,0x93e3,0x93d5,
-0x93c4,0x93ce,0x93c0,0x93d2,0x93a5,0x93e7,0x957d,0x95da,
-0x95db,0x96e1,0x9729,0x972b,0x972c,0x9728,0x9726,0x97b3,
-0x97b7,0x97b6,0x97dd,0x97de,0x97df,0x985c,0x9859,0x985d,
-0x9857,0x98bf,0x98bd,0x98bb,0x98be,0x9948,0x9947,0x9943,
-0x99a6,0x99a7,0x9a1a,0x9a15,0x9a25,0x9a1d,0x9a24,0x9a1b,
-0x9a22,0x9a20,0x9a27,0x9a23,0x9a1e,0x9a1c,0x9a14,0x9ac2,
-0x9b0b,0x9b0a,0x9b0e,0x9b0c,0x9b37,0x9bea,0x9beb,0x9be0,
-0x9bde,0x9be4,0x9be6,0x9be2,0x9bf0,0x9bd4,0x9bd7,0x9bec,
-0x9bdc,0x9bd9,0x9be5,0x9bd5,0x9be1,0x9bda,0x9d77,0x9d81,
-0x9d8a,0x9d84,0x9d88,0x9d71,0x9d80,0x9d78,0x9d86,0x9d8b,
-0x9d8c,0x9d7d,0x9d6b,0x9d74,0x9d75,0x9d70,0x9d69,0x9d85,
-0x9d73,0x9d7b,0x9d82,0x9d6f,0x9d79,0x9d7f,0x9d87,0x9d68,
-0x9e94,0x9e91,0x9ec0,0x9efc,0x9f2d,0x9f40,0x9f41,0x9f4d,
-0x9f56,0x9f57,0x9f58,0x5337,0x56b2,0x56b5,0x56b3,0x58e3,
-0x5b45,0x5dc6,0x5dc7,0x5eee,0x5eef,0x5fc0,0x5fc1,0x61f9,
-0x6517,0x6516,0x6515,0x6513,0x65df,0x66e8,0x66e3,0x66e4,
-0x6af3,0x6af0,0x6aea,0x6ae8,0x6af9,0x6af1,0x6aee,0x6aef,
-0x703c,0x7035,0x702f,0x7037,0x7034,0x7031,0x7042,0x7038,
-0x703f,0x703a,0x7039,0x702a,0x7040,0x703b,0x7033,0x7041,
-0x7213,0x7214,0x72a8,0x737d,0x737c,0x74ba,0x76ab,0x76aa,
-0x76be,0x76ed,0x77cc,0x77ce,0x77cf,0x77cd,0x77f2,0x7925,
-0x7923,0x7927,0x7928,0x7924,0x7929,0x79b2,0x7a6e,0x7a6c,
-0x7a6d,0x7af7,0x7c49,0x7c48,0x7c4a,0x7c47,0x7c45,0x7cee,
-0x7e7b,0x7e7e,0x7e81,0x7e80,0x7fba,0x7fff,0x8079,0x81db,
-0x81d9,0x8268,0x8269,0x8622,0x85ff,0x8601,0x85fe,0x861b,
-0x8600,0x85f6,0x8604,0x8609,0x8605,0x860c,0x85fd,0x8819,
-0x8810,0x8811,0x8817,0x8813,0x8816,0x8963,0x8966,0x89b9,
-0x89f7,0x8b60,0x8b6a,0x8b5d,0x8b68,0x8b63,0x8b65,0x8b67,
-0x8b6d,0x8dae,0x8e86,0x8e88,0x8e84,0x8f59,0x8f56,0x8f57,
-0x8f55,0x8f58,0x8f5a,0x908d,0x9143,0x9141,0x91b7,0x91b5,
-0x91b2,0x91b3,0x940b,0x9413,0x93fb,0x9420,0x940f,0x9414,
-0x93fe,0x9415,0x9410,0x9428,0x9419,0x940d,0x93f5,0x9400,
-0x93f7,0x9407,0x940e,0x9416,0x9412,0x93fa,0x9409,0x93f8,
-0x943c,0x940a,0x93ff,0x93fc,0x940c,0x93f6,0x9411,0x9406,
-0x95de,0x95e0,0x95df,0x972e,0x972f,0x97b9,0x97bb,0x97fd,
-0x97fe,0x9860,0x9862,0x9863,0x985f,0x98c1,0x98c2,0x9950,
-0x994e,0x9959,0x994c,0x994b,0x9953,0x9a32,0x9a34,0x9a31,
-0x9a2c,0x9a2a,0x9a36,0x9a29,0x9a2e,0x9a38,0x9a2d,0x9ac7,
-0x9aca,0x9ac6,0x9b10,0x9b12,0x9b11,0x9c0b,0x9c08,0x9bf7,
-0x9c05,0x9c12,0x9bf8,0x9c40,0x9c07,0x9c0e,0x9c06,0x9c17,
-0x9c14,0x9c09,0x9d9f,0x9d99,0x9da4,0x9d9d,0x9d92,0x9d98,
-0x9d90,0x9d9b,0x9da0,0x9d94,0x9d9c,0x9daa,0x9d97,0x9da1,
-0x9d9a,0x9da2,0x9da8,0x9d9e,0x9da3,0x9dbf,0x9da9,0x9d96,
-0x9da6,0x9da7,0x9e99,0x9e9b,0x9e9a,0x9ee5,0x9ee4,0x9ee7,
-0x9ee6,0x9f30,0x9f2e,0x9f5b,0x9f60,0x9f5e,0x9f5d,0x9f59,
-0x9f91,0x513a,0x5139,0x5298,0x5297,0x56c3,0x56bd,0x56be,
-0x5b48,0x5b47,0x5dcb,0x5dcf,0x5ef1,0x61fd,0x651b,0x6b02,
-0x6afc,0x6b03,0x6af8,0x6b00,0x7043,0x7044,0x704a,0x7048,
-0x7049,0x7045,0x7046,0x721d,0x721a,0x7219,0x737e,0x7517,
-0x766a,0x77d0,0x792d,0x7931,0x792f,0x7c54,0x7c53,0x7cf2,
-0x7e8a,0x7e87,0x7e88,0x7e8b,0x7e86,0x7e8d,0x7f4d,0x7fbb,
-0x8030,0x81dd,0x8618,0x862a,0x8626,0x861f,0x8623,0x861c,
-0x8619,0x8627,0x862e,0x8621,0x8620,0x8629,0x861e,0x8625,
-0x8829,0x881d,0x881b,0x8820,0x8824,0x881c,0x882b,0x884a,
-0x896d,0x8969,0x896e,0x896b,0x89fa,0x8b79,0x8b78,0x8b45,
-0x8b7a,0x8b7b,0x8d10,0x8d14,0x8daf,0x8e8e,0x8e8c,0x8f5e,
-0x8f5b,0x8f5d,0x9146,0x9144,0x9145,0x91b9,0x943f,0x943b,
-0x9436,0x9429,0x943d,0x9430,0x9439,0x942a,0x9437,0x942c,
-0x9440,0x9431,0x95e5,0x95e4,0x95e3,0x9735,0x973a,0x97bf,
-0x97e1,0x9864,0x98c9,0x98c6,0x98c0,0x9958,0x9956,0x9a39,
-0x9a3d,0x9a46,0x9a44,0x9a42,0x9a41,0x9a3a,0x9a3f,0x9acd,
-0x9b15,0x9b17,0x9b18,0x9b16,0x9b3a,0x9b52,0x9c2b,0x9c1d,
-0x9c1c,0x9c2c,0x9c23,0x9c28,0x9c29,0x9c24,0x9c21,0x9db7,
-0x9db6,0x9dbc,0x9dc1,0x9dc7,0x9dca,0x9dcf,0x9dbe,0x9dc5,
-0x9dc3,0x9dbb,0x9db5,0x9dce,0x9db9,0x9dba,0x9dac,0x9dc8,
-0x9db1,0x9dad,0x9dcc,0x9db3,0x9dcd,0x9db2,0x9e7a,0x9e9c,
-0x9eeb,0x9eee,0x9eed,0x9f1b,0x9f18,0x9f1a,0x9f31,0x9f4e,
-0x9f65,0x9f64,0x9f92,0x4eb9,0x56c6,0x56c5,0x56cb,0x5971,
-0x5b4b,0x5b4c,0x5dd5,0x5dd1,0x5ef2,0x6521,0x6520,0x6526,
-0x6522,0x6b0b,0x6b08,0x6b09,0x6c0d,0x7055,0x7056,0x7057,
-0x7052,0x721e,0x721f,0x72a9,0x737f,0x74d8,0x74d5,0x74d9,
-0x74d7,0x766d,0x76ad,0x7935,0x79b4,0x7a70,0x7a71,0x7c57,
-0x7c5c,0x7c59,0x7c5b,0x7c5a,0x7cf4,0x7cf1,0x7e91,0x7f4f,
-0x7f87,0x81de,0x826b,0x8634,0x8635,0x8633,0x862c,0x8632,
-0x8636,0x882c,0x8828,0x8826,0x882a,0x8825,0x8971,0x89bf,
-0x89be,0x89fb,0x8b7e,0x8b84,0x8b82,0x8b86,0x8b85,0x8b7f,
-0x8d15,0x8e95,0x8e94,0x8e9a,0x8e92,0x8e90,0x8e96,0x8e97,
-0x8f60,0x8f62,0x9147,0x944c,0x9450,0x944a,0x944b,0x944f,
-0x9447,0x9445,0x9448,0x9449,0x9446,0x973f,0x97e3,0x986a,
-0x9869,0x98cb,0x9954,0x995b,0x9a4e,0x9a53,0x9a54,0x9a4c,
-0x9a4f,0x9a48,0x9a4a,0x9a49,0x9a52,0x9a50,0x9ad0,0x9b19,
-0x9b2b,0x9b3b,0x9b56,0x9b55,0x9c46,0x9c48,0x9c3f,0x9c44,
-0x9c39,0x9c33,0x9c41,0x9c3c,0x9c37,0x9c34,0x9c32,0x9c3d,
-0x9c36,0x9ddb,0x9dd2,0x9dde,0x9dda,0x9dcb,0x9dd0,0x9ddc,
-0x9dd1,0x9ddf,0x9de9,0x9dd9,0x9dd8,0x9dd6,0x9df5,0x9dd5,
-0x9ddd,0x9eb6,0x9ef0,0x9f35,0x9f33,0x9f32,0x9f42,0x9f6b,
-0x9f95,0x9fa2,0x513d,0x5299,0x58e8,0x58e7,0x5972,0x5b4d,
-0x5dd8,0x882f,0x5f4f,0x6201,0x6203,0x6204,0x6529,0x6525,
-0x6596,0x66eb,0x6b11,0x6b12,0x6b0f,0x6bca,0x705b,0x705a,
-0x7222,0x7382,0x7381,0x7383,0x7670,0x77d4,0x7c67,0x7c66,
-0x7e95,0x826c,0x863a,0x8640,0x8639,0x863c,0x8631,0x863b,
-0x863e,0x8830,0x8832,0x882e,0x8833,0x8976,0x8974,0x8973,
-0x89fe,0x8b8c,0x8b8e,0x8b8b,0x8b88,0x8c45,0x8d19,0x8e98,
-0x8f64,0x8f63,0x91bc,0x9462,0x9455,0x945d,0x9457,0x945e,
-0x97c4,0x97c5,0x9800,0x9a56,0x9a59,0x9b1e,0x9b1f,0x9b20,
-0x9c52,0x9c58,0x9c50,0x9c4a,0x9c4d,0x9c4b,0x9c55,0x9c59,
-0x9c4c,0x9c4e,0x9dfb,0x9df7,0x9def,0x9de3,0x9deb,0x9df8,
-0x9de4,0x9df6,0x9de1,0x9dee,0x9de6,0x9df2,0x9df0,0x9de2,
-0x9dec,0x9df4,0x9df3,0x9de8,0x9ded,0x9ec2,0x9ed0,0x9ef2,
-0x9ef3,0x9f06,0x9f1c,0x9f38,0x9f37,0x9f36,0x9f43,0x9f4f,
-0x9f71,0x9f70,0x9f6e,0x9f6f,0x56d3,0x56cd,0x5b4e,0x5c6d,
-0x652d,0x66ed,0x66ee,0x6b13,0x705f,0x7061,0x705d,0x7060,
-0x7223,0x74db,0x74e5,0x77d5,0x7938,0x79b7,0x79b6,0x7c6a,
-0x7e97,0x7f89,0x826d,0x8643,0x8838,0x8837,0x8835,0x884b,
-0x8b94,0x8b95,0x8e9e,0x8e9f,0x8ea0,0x8e9d,0x91be,0x91bd,
-0x91c2,0x946b,0x9468,0x9469,0x96e5,0x9746,0x9743,0x9747,
-0x97c7,0x97e5,0x9a5e,0x9ad5,0x9b59,0x9c63,0x9c67,0x9c66,
-0x9c62,0x9c5e,0x9c60,0x9e02,0x9dfe,0x9e07,0x9e03,0x9e06,
-0x9e05,0x9e00,0x9e01,0x9e09,0x9dff,0x9dfd,0x9e04,0x9ea0,
-0x9f1e,0x9f46,0x9f74,0x9f75,0x9f76,0x56d4,0x652e,0x65b8,
-0x6b18,0x6b19,0x6b17,0x6b1a,0x7062,0x7226,0x72aa,0x77d8,
-0x77d9,0x7939,0x7c69,0x7c6b,0x7cf6,0x7e9a,0x7e98,0x7e9b,
-0x7e99,0x81e0,0x81e1,0x8646,0x8647,0x8648,0x8979,0x897a,
-0x897c,0x897b,0x89ff,0x8b98,0x8b99,0x8ea5,0x8ea4,0x8ea3,
-0x946e,0x946d,0x946f,0x9471,0x9473,0x9749,0x9872,0x995f,
-0x9c68,0x9c6e,0x9c6d,0x9e0b,0x9e0d,0x9e10,0x9e0f,0x9e12,
-0x9e11,0x9ea1,0x9ef5,0x9f09,0x9f47,0x9f78,0x9f7b,0x9f7a,
-0x9f79,0x571e,0x7066,0x7c6f,0x883c,0x8db2,0x8ea6,0x91c3,
-0x9474,0x9478,0x9476,0x9475,0x9a60,0x9b2e,0x9c74,0x9c73,
-0x9c71,0x9c75,0x9e14,0x9e13,0x9ef6,0x9f0a,0x9fa4,0x7068,
-0x7065,0x7cf7,0x866a,0x883e,0x883d,0x883f,0x8b9e,0x8c9c,
-0x8ea9,0x8ec9,0x974b,0x9873,0x9874,0x98cc,0x9961,0x99ab,
-0x9a64,0x9a66,0x9a67,0x9b24,0x9e15,0x9e17,0x9f48,0x6207,
-0x6b1e,0x7227,0x864c,0x8ea8,0x9482,0x9480,0x9481,0x9a69,
-0x9a68,0x9e19,0x864b,0x8b9f,0x9483,0x9c79,0x9eb7,0x7675,
-0x9a6b,0x9c7a,0x9e1d,0x7069,0x706a,0x7229,0x9ea4,0x9f7e,
-0x9f49,0x9f98};
-
-static const int cns11643_2_ucs_table_size = (sizeof (cns11643_2_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cns11643_14_ucs_table[] = {
-0x4e28,0x4e36,0x4e3f,0x4e85,0x4e05,0x4e04,0x5182,0x5196,
-0x5338,0x5369,0x53b6,0x4e2a,0x4e87,0x4e49,0x51e2,0x4e46,
-0x4e8f,0x4ebc,0x4ebe,0x5166,0x51e3,0x5204,0x529c,0x0000,
-0x5902,0x590a,0x5b80,0x5ddb,0x5e7a,0x5e7f,0x5ef4,0x5f50,
-0x5f51,0x5f61,0x961d,0x0000,0x4e63,0x4e62,0x4ea3,0x5185,
-0x4ec5,0x4ecf,0x4ece,0x4ecc,0x5184,0x5186,0x0000,0x0000,
-0x51e4,0x5205,0x529e,0x529d,0x52fd,0x5300,0x533a,0x0000,
-0x5346,0x535d,0x5386,0x53b7,0x0000,0x53cc,0x0000,0x53ce,
-0x5721,0x0000,0x5e00,0x5f0c,0x6237,0x6238,0x6534,0x6535,
-0x65e0,0x0000,0x738d,0x4e97,0x4ee0,0x0000,0x0000,0x4ee7,
-0x0000,0x4ee6,0x0000,0x0000,0x0000,0x0000,0x56d8,0x518b,
-0x518c,0x5199,0x51e5,0x0000,0x520b,0x0000,0x0000,0x5304,
-0x5303,0x5307,0x0000,0x531e,0x535f,0x536d,0x5389,0x53ba,
-0x53d0,0x0000,0x53f6,0x53f7,0x53f9,0x0000,0x53f4,0x0000,
-0x0000,0x5724,0x5904,0x5918,0x5932,0x5930,0x5934,0x0000,
-0x5975,0x0000,0x5b82,0x5bf9,0x5c14,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x5e81,0x5e83,0x5f0d,0x5f52,
-0x0000,0x5fca,0x5fc7,0x6239,0x0000,0x624f,0x65e7,0x672f,
-0x6b7a,0x6c39,0x0000,0x0000,0x6c37,0x6c44,0x6c45,0x738c,
-0x7592,0x7676,0x9093,0x9092,0x0000,0x0000,0x4e21,0x4e20,
-0x4e22,0x4e68,0x4e89,0x4e98,0x4ef9,0x4eef,0x0000,0x0000,
-0x4ef8,0x4f06,0x4f03,0x4efc,0x4eee,0x4f16,0x0000,0x4f28,
-0x4f1c,0x4f07,0x4f1a,0x4efa,0x4f17,0x514a,0x0000,0x5172,
-0x0000,0x51b4,0x51b3,0x51b2,0x0000,0x51e8,0x0000,0x5214,
-0x520f,0x5215,0x5218,0x52a8,0x0000,0x534b,0x534f,0x0000,
-0x5350,0x0000,0x538b,0x0000,0x53be,0x0000,0x53d2,0x5416,
-0x53ff,0x0000,0x5400,0x0000,0x5405,0x5413,0x5415,0x0000,
-0x0000,0x56e3,0x5735,0x5736,0x5731,0x5732,0x58ee,0x5905,
-0x4e54,0x0000,0x5936,0x0000,0x0000,0x0000,0x597a,0x0000,
-0x5986,0x0000,0x0000,0x5b86,0x5f53,0x5c18,0x0000,0x5c3d,
-0x5c78,0x0000,0x0000,0x0000,0x0000,0x5c80,0x0000,0x5e08,
-0x0000,0x0000,0x0000,0x0000,0x5ef5,0x5f0e,0x0000,0x0000,
-0x0000,0x5fd3,0x5fda,0x0000,0x5fdb,0x0000,0x620f,0x625d,
-0x625f,0x6267,0x6257,0x9f50,0x0000,0x65eb,0x65ea,0x0000,
-0x6737,0x0000,0x6732,0x6736,0x6b22,0x6bce,0x0000,0x6c58,
-0x6c51,0x6c77,0x6c3c,0x0000,0x6c5a,0x0000,0x6c53,0x706f,
-0x7072,0x706e,0x0000,0x0000,0x7073,0x72b1,0x72b2,0x0000,
-0x738f,0x0000,0x0000,0x0000,0x793c,0x0000,0x808d,0x808e,
-0x0000,0x827b,0x0000,0x8d71,0x8fb9,0x9096,0x909a,0x0000,
-0x4e24,0x4e71,0x0000,0x4e9c,0x4f45,0x4f4a,0x4f39,0x4f37,
-0x0000,0x4f32,0x4f42,0x0000,0x4f44,0x4f4b,0x0000,0x4f40,
-0x4f35,0x4f31,0x5151,0x0000,0x5150,0x514e,0x0000,0x0000,
-0x519d,0x0000,0x51b5,0x51b8,0x51ec,0x5223,0x5227,0x5226,
-0x521f,0x522b,0x5220,0x52b4,0x52b3,0x0000,0x5325,0x533b,
-0x5374,0x0000,0x0000,0x0000,0x0000,0x0000,0x544d,0x0000,
-0x0000,0x543a,0x0000,0x0000,0x5444,0x544c,0x5423,0x541a,
-0x5432,0x544b,0x5421,0x0000,0x5434,0x5449,0x5450,0x5422,
-0x543f,0x5451,0x545a,0x542f,0x0000,0x56e9,0x56f2,0x56f3,
-0x56ef,0x56ed,0x56ec,0x56e6,0x5748,0x0000,0x5744,0x573f,
-0x573c,0x5753,0x5756,0x0000,0x575f,0x5743,0x5758,0x5757,
-0x0000,0x0000,0x0000,0x5746,0x0000,0x573d,0x0000,0x5742,
-0x5754,0x5755,0x58f1,0x58f2,0x58f0,0x590b,0x9ea6,0x56f1,
-0x593d,0x0000,0x5994,0x598c,0x0000,0x599c,0x0000,0x0000,
-0x599f,0x0000,0x599b,0x0000,0x5989,0x599a,0x0000,0x6588,
-0x0000,0x5b8d,0x0000,0x5bfe,0x5bff,0x5bfd,0x5c2b,0x0000,
-0x5c84,0x5c8e,0x5c9c,0x0000,0x0000,0x5c85,0x5df5,0x5e09,
-0x0000,0x0000,0x5e0b,0x0000,0x5e92,0x5e90,0x5f03,0x0000,
-0x5f1e,0x5f63,0x0000,0x5fe7,0x5ffe,0x5fe6,0x5fdc,0x5fce,
-0x0000,0x5ffc,0x5fdf,0x5fec,0x5ff6,0x0000,0x5ff2,0x5ff0,
-0x5ff9,0x0000,0x6213,0x0000,0x0000,0x623b,0x623c,0x6282,
-0x0000,0x0000,0x0000,0x6278,0x628b,0x0000,0x629e,0x62a5,
-0x629b,0x629c,0x6299,0x628d,0x6285,0x629d,0x6275,0x0000,
-0x0000,0x0000,0x65f6,0x0000,0x0000,0x0000,0x66f5,0x675b,
-0x0000,0x6754,0x6752,0x0000,0x6758,0x6744,0x674a,0x6761,
-0x0000,0x6c7f,0x6c91,0x6c9e,0x0000,0x6c6e,0x6c7c,0x6c9f,
-0x6c75,0x0000,0x6c56,0x6ca2,0x6c79,0x0000,0x6ca1,0x0000,
-0x6caa,0x6ca0,0x0000,0x7079,0x7077,0x707e,0x0000,0x7075,
-0x707b,0x7264,0x0000,0x72bb,0x72bc,0x72c7,0x72b9,0x72be,
-0x72b6,0x0000,0x0000,0x7398,0x0000,0x0000,0x0000,0x0000,
-0x7593,0x7680,0x0000,0x7683,0x76c0,0x76c1,0x0000,0x0000,
-0x77f4,0x77f5,0x0000,0x7acc,0x7acd,0x7cfa,0x809f,0x8091,
-0x8097,0x8094,0x0000,0x8286,0x828c,0x0000,0x8295,0x0000,
-0x866c,0x0000,0x8fb5,0x8fbe,0x8fc7,0x0000,0x8fc1,0x90a9,
-0x90a4,0x0000,0x0000,0x0000,0x90a8,0x9627,0x9626,0x962b,
-0x9633,0x9634,0x9629,0x4e3d,0x0000,0x4e9d,0x4f93,0x4f8a,
-0x0000,0x0000,0x4f6d,0x4f8e,0x4fa0,0x4fa2,0x4fa1,0x4f9f,
-0x4fa3,0x0000,0x4f72,0x0000,0x4f8c,0x5156,0x0000,0x0000,
-0x5190,0x0000,0x0000,0x0000,0x51ed,0x51fe,0x522f,0x0000,
-0x523c,0x5234,0x5239,0x52b9,0x52b5,0x52bf,0x5355,0x0000,
-0x5376,0x537a,0x5393,0x0000,0x53c1,0x53c2,0x53d5,0x5485,
-0x0000,0x545f,0x5493,0x5489,0x5479,0x9efe,0x548f,0x5469,
-0x546d,0x0000,0x5494,0x546a,0x548a,0x0000,0x56fd,0x56fb,
-0x56f8,0x0000,0x56fc,0x56f6,0x5765,0x5781,0x5763,0x5767,
-0x0000,0x576e,0x5778,0x577f,0x0000,0x0000,0x58f3,0x594b,
-0x594c,0x0000,0x0000,0x0000,0x59ad,0x0000,0x59c4,0x0000,
-0x59c2,0x59b0,0x0000,0x0000,0x0000,0x0000,0x59bf,0x0000,
-0x59c9,0x59b8,0x59ac,0x0000,0x0000,0x0000,0x59b7,0x59d7,
-0x0000,0x5b60,0x0000,0x5b96,0x5b9e,0x5b94,0x5b9f,0x5b9d,
-0x0000,0x5c00,0x5c19,0x0000,0x0000,0x5c49,0x5c4a,0x0000,
-0x5cbb,0x5cc1,0x0000,0x0000,0x0000,0x5cb9,0x5c9e,0x5cb4,
-0x5cba,0x5df6,0x5e13,0x5e12,0x5e77,0x0000,0x5e98,0x0000,
-0x5e99,0x5e9d,0x5ef8,0x0000,0x5ef9,0x0000,0x5f06,0x5f21,
-0x0000,0x5f25,0x5f55,0x0000,0x0000,0x0000,0x5f84,0x5f83,
-0x6030,0x6007,0x0000,0x6036,0x0000,0x0000,0x0000,0x5fe9,
-0x603d,0x6008,0x0000,0x0000,0x62ba,0x62b2,0x0000,0x62b7,
-0x62e4,0x62a7,0x0000,0x0000,0x0000,0x62d5,0x62e1,0x62dd,
-0x62a6,0x62c1,0x62c5,0x62c0,0x62df,0x62e0,0x62de,0x0000,
-0x6589,0x0000,0x65a6,0x65ba,0x0000,0x65ff,0x0000,0x6617,
-0x6618,0x6601,0x65fe,0x0000,0x670c,0x0000,0x676b,0x6796,
-0x6782,0x678a,0x0000,0x67a3,0x0000,0x67a2,0x678f,0x0000,
-0x67f9,0x6780,0x6b26,0x6b27,0x6b68,0x6b69,0x0000,0x6b81,
-0x6bb4,0x6bd1,0x0000,0x0000,0x6c1c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x6c97,0x6c6c,0x6cdf,0x0000,0x6cea,0x0000,
-0x6ce4,0x6cd8,0x6cb2,0x6cce,0x6cc8,0x0000,0x708b,0x7088,
-0x7090,0x708f,0x0000,0x7087,0x7089,0x708d,0x7081,0x0000,
-0x708c,0x0000,0x0000,0x7240,0x0000,0x0000,0x7265,0x7266,
-0x7268,0x0000,0x0000,0x72cd,0x72d3,0x72db,0x0000,0x72cf,
-0x73a7,0x73a3,0x739e,0x0000,0x73af,0x0000,0x0000,0x73aa,
-0x739c,0x0000,0x7542,0x7544,0x753b,0x7541,0x0000,0x759b,
-0x759e,0x0000,0x79c4,0x79c3,0x79c6,0x0000,0x0000,0x79c7,
-0x0000,0x79ca,0x0000,0x0000,0x7acf,0x7c76,0x7c74,0x7cff,
-0x7cfc,0x0000,0x0000,0x7f59,0x80a8,0x0000,0x0000,0x80b0,
-0x0000,0x80b3,0x0000,0x80a4,0x80b6,0x80a7,0x80ac,0x0000,
-0x80a6,0x5367,0x820e,0x82c4,0x833e,0x829c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x82aa,0x0000,0x82c9,0x0000,0x0000,
-0x82a6,0x82b2,0x0000,0x0000,0x0000,0x8fcc,0x8fd9,0x8fca,
-0x8fd8,0x8fcf,0x90b7,0x0000,0x90ad,0x90b9,0x9637,0x0000,
-0x9641,0x963e,0x96b6,0x9751,0x9763,0x4e57,0x4e79,0x4eb2,
-0x4eb0,0x4eaf,0x4eb1,0x4fd2,0x4fd5,0x0000,0x4fbe,0x4fb8,
-0x4fb0,0x4fb1,0x4fc8,0x0000,0x0000,0x4fc6,0x4fcc,0x4fe5,
-0x4fe3,0x4fb4,0x516a,0x0000,0x519f,0x0000,0x51c1,0x0000,
-0x51c2,0x51c3,0x5245,0x5248,0x0000,0x0000,0x524f,0x0000,
-0x0000,0x52c5,0x52ca,0x52c4,0x5327,0x5358,0x537d,0x0000,
-0x53dd,0x53dc,0x53da,0x53d9,0x54b9,0x0000,0x54d0,0x54b4,
-0x54ca,0x0000,0x54a3,0x54da,0x54a4,0x0000,0x54b2,0x549e,
-0x549f,0x54b5,0x0000,0x0000,0x54cd,0x0000,0x54cc,0x0000,
-0x5700,0x57ac,0x5791,0x578e,0x578d,0x5792,0x57a1,0x5790,
-0x57a6,0x57a8,0x0000,0x579c,0x5796,0x57a7,0x0000,0x0000,
-0x0000,0x0000,0x58f5,0x0000,0x5909,0x5908,0x0000,0x5952,
-0x0000,0x0000,0x59df,0x0000,0x59eb,0x59ef,0x59f0,0x59d5,
-0x5a0d,0x5a04,0x59f9,0x5a02,0x59f8,0x59e2,0x59d9,0x59e7,
-0x5b6a,0x0000,0x0000,0x5bab,0x0000,0x5c1b,0x5c2f,0x0000,
-0x663c,0x0000,0x0000,0x0000,0x5cd1,0x5cdc,0x5ce6,0x5ce1,
-0x5ccd,0x0000,0x5ce2,0x5cdd,0x5ce5,0x5dfb,0x5dfa,0x5e1e,
-0x0000,0x5ea1,0x0000,0x0000,0x5efc,0x5efb,0x5f2f,0x0000,
-0x0000,0x5f66,0x0000,0x0000,0x0000,0x605c,0x0000,0x604e,
-0x6051,0x0000,0x0000,0x6023,0x6031,0x607c,0x6052,0x0000,
-0x6060,0x604a,0x6061,0x0000,0x6218,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x631f,0x6317,0x62ea,0x6321,
-0x6304,0x6305,0x0000,0x6531,0x6544,0x6540,0x0000,0x6542,
-0x65be,0x0000,0x6629,0x661b,0x0000,0x6623,0x662c,0x661a,
-0x6630,0x663b,0x661e,0x6637,0x6638,0x0000,0x670e,0x0000,
-0x0000,0x67e8,0x67d6,0x0000,0x67c7,0x67bc,0x6852,0x67bf,
-0x67d5,0x67fe,0x8363,0x67fb,0x0000,0x67b1,0x6801,0x6805,
-0x6800,0x67d7,0x0000,0x6b2a,0x6b6b,0x0000,0x0000,0x0000,
-0x0000,0x6be1,0x0000,0x0000,0x6d23,0x6cff,0x6d14,0x6d05,
-0x6d13,0x6d06,0x6d21,0x0000,0x6d15,0x6caf,0x6cf4,0x6d02,
-0x6d45,0x0000,0x6d26,0x0000,0x6d44,0x0000,0x6d24,0x70a5,
-0x0000,0x70a3,0x0000,0x70a2,0x70bb,0x70a0,0x70aa,0x0000,
-0x0000,0x70a8,0x70b6,0x70b2,0x70a7,0x0000,0x0000,0x70b9,
-0x722e,0x0000,0x723c,0x0000,0x726d,0x0000,0x0000,0x72e7,
-0x72ed,0x0000,0x72ec,0x72e5,0x72e2,0x0000,0x73c4,0x73bd,
-0x73cf,0x73c9,0x73c1,0x73d0,0x0000,0x73ce,0x74ed,0x74eb,
-0x0000,0x74ef,0x7549,0x7550,0x7546,0x754a,0x0000,0x754d,
-0x75a6,0x0000,0x0000,0x0000,0x75a8,0x0000,0x0000,0x76c7,
-0x76ff,0x0000,0x76fd,0x77e6,0x780a,0x0000,0x7804,0x780b,
-0x7807,0x0000,0x7815,0x7808,0x0000,0x79d3,0x79d4,0x79d0,
-0x79d7,0x7a7c,0x0000,0x0000,0x7a7d,0x7a83,0x7a82,0x0000,
-0x7ad4,0x7ad5,0x7ad3,0x7ad0,0x7ad2,0x7afe,0x7afc,0x7c77,
-0x7c7c,0x7c7b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x7f8f,0x80d3,0x0000,0x80cb,0x80d2,0x0000,
-0x8109,0x80e2,0x80df,0x80c6,0x0000,0x8224,0x82f7,0x82d8,
-0x82dd,0x0000,0x0000,0x82f8,0x82fc,0x0000,0x0000,0x82e9,
-0x0000,0x82ee,0x0000,0x82d0,0x830e,0x82e2,0x830b,0x82fd,
-0x5179,0x8676,0x0000,0x8678,0x0000,0x0000,0x8675,0x867d,
-0x0000,0x8842,0x8866,0x0000,0x898c,0x8a05,0x0000,0x8a06,
-0x0000,0x8c9f,0x0000,0x8ff1,0x8fe7,0x8fe9,0x8fef,0x90c2,
-0x90bc,0x0000,0x90c6,0x90c0,0x0000,0x0000,0x90cd,0x90c9,
-0x0000,0x90c4,0x0000,0x9581,0x0000,0x9cec,0x5032,0x4ff9,
-0x501d,0x4fff,0x5004,0x4ff0,0x5003,0x0000,0x5002,0x4ffc,
-0x4ff2,0x5024,0x5008,0x5036,0x502e,0x0000,0x5010,0x5038,
-0x5039,0x4ffd,0x5056,0x4ffb,0x51a3,0x51a6,0x51a1,0x0000,
-0x0000,0x51c7,0x51c9,0x5260,0x5264,0x5259,0x5265,0x5267,
-0x5257,0x5263,0x0000,0x5253,0x0000,0x52cf,0x0000,0x52ce,
-0x52d0,0x52d1,0x52cc,0x0000,0x0000,0x0000,0x550d,0x54f4,
-0x0000,0x5513,0x54ef,0x54f5,0x54f9,0x5502,0x5500,0x0000,
-0x0000,0x5518,0x54f0,0x54f6,0x0000,0x0000,0x5519,0x0000,
-0x5705,0x57c9,0x0000,0x57b7,0x57cd,0x0000,0x0000,0x0000,
-0x57be,0x57bb,0x0000,0x57db,0x57c8,0x57c4,0x57c5,0x57d1,
-0x57ca,0x57c0,0x0000,0x0000,0x5a21,0x5a2a,0x0000,0x5a1d,
-0x0000,0x5a0b,0x0000,0x0000,0x0000,0x0000,0x5a22,0x0000,
-0x0000,0x5a24,0x0000,0x5a14,0x5a31,0x0000,0x5a2f,0x5a1a,
-0x5a12,0x0000,0x0000,0x5a26,0x0000,0x0000,0x5bbc,0x5bbb,
-0x5bb7,0x5c05,0x5c06,0x5c52,0x5c53,0x0000,0x0000,0x5cfa,
-0x5ceb,0x0000,0x5cf3,0x5cf5,0x5ce9,0x5cef,0x0000,0x5e2a,
-0x5e30,0x5e2e,0x5e2c,0x5e2f,0x5eaf,0x5ea9,0x0000,0x5efd,
-0x5f32,0x5f8e,0x5f93,0x5f8f,0x604f,0x6099,0x0000,0x607e,
-0x0000,0x6074,0x604b,0x6073,0x6075,0x0000,0x0000,0x6056,
-0x60a9,0x608b,0x60a6,0x0000,0x6093,0x60ae,0x609e,0x60a7,
-0x6245,0x0000,0x0000,0x632e,0x0000,0x6352,0x6330,0x635b,
-0x0000,0x6319,0x631b,0x0000,0x6331,0x635d,0x6337,0x6335,
-0x6353,0x0000,0x635c,0x633f,0x654b,0x0000,0x0000,0x658b,
-0x0000,0x659a,0x6650,0x6646,0x664e,0x6640,0x0000,0x664b,
-0x6648,0x0000,0x6660,0x6644,0x664d,0x0000,0x6837,0x6824,
-0x0000,0x0000,0x681b,0x6836,0x0000,0x682c,0x6819,0x6856,
-0x6847,0x683e,0x681e,0x0000,0x6815,0x6822,0x6827,0x6859,
-0x6858,0x6855,0x6830,0x6823,0x6b2e,0x6b2b,0x6b30,0x6b6c,
-0x0000,0x6b8b,0x0000,0x6be9,0x6bea,0x6be5,0x6d6b,0x0000,
-0x0000,0x6d73,0x6d57,0x0000,0x0000,0x6d5d,0x6d56,0x6d8f,
-0x6d5b,0x6d1c,0x6d9a,0x6d9b,0x6d99,0x0000,0x6d81,0x6d71,
-0x0000,0x0000,0x6d72,0x6d5c,0x6d96,0x70c4,0x70db,0x70cc,
-0x70d0,0x70e3,0x70df,0x0000,0x70d6,0x70ee,0x70d5,0x0000,
-0x0000,0x0000,0x0000,0x727a,0x0000,0x72f5,0x7302,0x0000,
-0x0000,0x73e2,0x73ec,0x73d5,0x73f9,0x73df,0x73e6,0x0000,
-0x0000,0x0000,0x0000,0x73e4,0x73e1,0x74f3,0x0000,0x0000,
-0x0000,0x0000,0x7556,0x7555,0x7558,0x7557,0x755e,0x75c3,
-0x0000,0x0000,0x75b4,0x0000,0x75b1,0x0000,0x0000,0x76cb,
-0x76cc,0x772a,0x0000,0x7716,0x770f,0x0000,0x0000,0x773f,
-0x772b,0x770e,0x7724,0x0000,0x7721,0x7718,0x77dd,0x0000,
-0x0000,0x7824,0x7836,0x0000,0x7958,0x7959,0x0000,0x7962,
-0x79da,0x79d9,0x0000,0x79e1,0x79e5,0x79e8,0x79db,0x0000,
-0x79e2,0x79f0,0x0000,0x0000,0x0000,0x0000,0x7ada,0x7add,
-0x0000,0x7adb,0x7adc,0x0000,0x0000,0x7b0d,0x7b0b,0x7b14,
-0x7c8e,0x7c86,0x0000,0x7c87,0x7c83,0x7c8b,0x0000,0x0000,
-0x0000,0x0000,0x7d24,0x0000,0x0000,0x0000,0x7d25,0x7f62,
-0x7f93,0x7f99,0x7f97,0x0000,0x0000,0x7fc4,0x7fc6,0x800a,
-0x0000,0x0000,0x8040,0x803c,0x803b,0x80f6,0x80ff,0x80ee,
-0x8104,0x8103,0x8107,0x0000,0x0000,0x80f7,0x0000,0x0000,
-0x822d,0x0000,0x8227,0x8229,0x831f,0x8357,0x0000,0x0000,
-0x0000,0x0000,0x8321,0x0000,0x0000,0x8318,0x8358,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x8684,0x869f,0x869b,0x8689,
-0x86a6,0x8692,0x868f,0x86a0,0x884f,0x8878,0x887a,0x886e,
-0x887b,0x8884,0x8873,0x0000,0x0000,0x8a0d,0x8a0b,0x8a19,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8ff9,0x9009,
-0x9008,0x0000,0x90de,0x9151,0x0000,0x0000,0x91db,0x91df,
-0x91de,0x91d6,0x91e0,0x9585,0x9660,0x9659,0x0000,0x9656,
-0x0000,0x0000,0x96bd,0x0000,0x0000,0x5042,0x5059,0x0000,
-0x5044,0x5066,0x5052,0x5054,0x5071,0x5050,0x507b,0x507c,
-0x5058,0x0000,0x0000,0x5079,0x506c,0x5078,0x51a8,0x51d1,
-0x51cf,0x5268,0x5276,0x52d4,0x0000,0x53a0,0x53c4,0x0000,
-0x5558,0x554c,0x5568,0x0000,0x5549,0x0000,0x0000,0x555d,
-0x5529,0x0000,0x5554,0x5553,0x0000,0x555a,0x0000,0x553a,
-0x553f,0x552b,0x57ea,0x0000,0x57ef,0x0000,0x0000,0x57dd,
-0x57fe,0x0000,0x57de,0x57e6,0x0000,0x57e8,0x57ff,0x5803,
-0x58f7,0x68a6,0x591f,0x0000,0x595b,0x595d,0x595e,0x0000,
-0x0000,0x5a2b,0x0000,0x5a3b,0x0000,0x0000,0x5a61,0x5a3a,
-0x5a6e,0x5a4b,0x5a6b,0x0000,0x0000,0x5a45,0x5a4e,0x5a68,
-0x5a3d,0x5a71,0x5a3f,0x5a6f,0x5a75,0x0000,0x5a73,0x5a2c,
-0x5a59,0x5a54,0x5a4f,0x5a63,0x0000,0x0000,0x5bc8,0x0000,
-0x5bc3,0x0000,0x5c5b,0x5c61,0x0000,0x5d21,0x5d0a,0x5d09,
-0x0000,0x5d2c,0x5d08,0x0000,0x0000,0x5d2a,0x5d15,0x0000,
-0x5d10,0x5d13,0x0000,0x5d2f,0x5d18,0x0000,0x5de3,0x5e39,
-0x5e35,0x5e3a,0x5e32,0x0000,0x0000,0x0000,0x0000,0x5ebb,
-0x5eba,0x5f34,0x5f39,0x0000,0x0000,0x0000,0x0000,0x6098,
-0x0000,0x60d0,0x0000,0x0000,0x0000,0x60d7,0x60aa,0x0000,
-0x60a1,0x60a4,0x0000,0x60ee,0x0000,0x60e7,0x0000,0x0000,
-0x60de,0x0000,0x0000,0x637e,0x638b,0x0000,0x0000,0x6379,
-0x6386,0x6393,0x0000,0x6373,0x636a,0x0000,0x636c,0x0000,
-0x637f,0x0000,0x63b2,0x63ba,0x0000,0x0000,0x6366,0x6374,
-0x0000,0x655a,0x0000,0x654e,0x654d,0x658d,0x658e,0x65ad,
-0x0000,0x65c7,0x65ca,0x0000,0x65c9,0x0000,0x65e3,0x6657,
-0x0000,0x6663,0x6667,0x671a,0x6719,0x6716,0x0000,0x0000,
-0x689e,0x68b6,0x6898,0x6873,0x0000,0x689a,0x688e,0x68b7,
-0x68db,0x68a5,0x686c,0x68c1,0x6884,0x0000,0x0000,0x6895,
-0x687a,0x6899,0x0000,0x68b8,0x68b9,0x6870,0x0000,0x6b35,
-0x0000,0x6b90,0x6bbb,0x6bed,0x0000,0x0000,0x0000,0x6dc1,
-0x6dc3,0x6dce,0x0000,0x0000,0x6dad,0x6e04,0x0000,0x6db9,
-0x0000,0x6de7,0x0000,0x6e08,0x6e06,0x0000,0x6e0a,0x6db0,
-0x0000,0x6df8,0x6e0c,0x0000,0x6db1,0x0000,0x6e02,0x6e07,
-0x6e09,0x6e01,0x6e17,0x6dff,0x6e12,0x0000,0x0000,0x7103,
-0x7107,0x7101,0x70f5,0x70f1,0x7108,0x70f2,0x710f,0x0000,
-0x70fe,0x0000,0x0000,0x0000,0x731a,0x7310,0x730e,0x7402,
-0x73f3,0x0000,0x0000,0x73fb,0x0000,0x0000,0x0000,0x751b,
-0x7523,0x7561,0x7568,0x0000,0x7567,0x75d3,0x0000,0x0000,
-0x7690,0x0000,0x0000,0x76d5,0x76d7,0x76d6,0x7730,0x0000,
-0x7726,0x0000,0x7740,0x0000,0x771e,0x0000,0x0000,0x0000,
-0x7847,0x0000,0x784b,0x7851,0x784f,0x7842,0x7846,0x0000,
-0x796e,0x796c,0x79f2,0x0000,0x79f1,0x79f5,0x79f3,0x79f9,
-0x0000,0x0000,0x0000,0x7a9a,0x7a93,0x7a91,0x7ae1,0x0000,
-0x0000,0x7b21,0x7b1c,0x7b16,0x7b17,0x7b36,0x7b1f,0x0000,
-0x7c93,0x7c99,0x7c9a,0x7c9c,0x0000,0x7d49,0x0000,0x7d34,
-0x7d37,0x0000,0x7d2d,0x0000,0x7d4c,0x0000,0x0000,0x7d48,
-0x0000,0x0000,0x7f3b,0x0000,0x0000,0x0000,0x0000,0x8008,
-0x801a,0x0000,0x801d,0x0000,0x8049,0x8045,0x8044,0x7c9b,
-0x0000,0x0000,0x812a,0x812e,0x0000,0x0000,0x8131,0x0000,
-0x811a,0x8134,0x8117,0x0000,0x0000,0x0000,0x831d,0x8371,
-0x8384,0x8380,0x8372,0x83a1,0x0000,0x8379,0x8391,0x0000,
-0x839f,0x83ad,0x0000,0x0000,0x8323,0x0000,0x8385,0x839c,
-0x83b7,0x8658,0x865a,0x0000,0x8657,0x86b2,0x0000,0x86ae,
-0x0000,0x0000,0x0000,0x8845,0x889c,0x8894,0x88a3,0x888f,
-0x88a5,0x88a9,0x88a6,0x888a,0x88a0,0x8890,0x8992,0x8991,
-0x8994,0x0000,0x8a26,0x8a32,0x8a28,0x0000,0x0000,0x8a1c,
-0x0000,0x8a2b,0x8a20,0x0000,0x8a29,0x0000,0x0000,0x0000,
-0x8a21,0x8c3a,0x0000,0x8c5b,0x8c58,0x8c7c,0x0000,0x8ca6,
-0x8cae,0x8cad,0x8d65,0x0000,0x8d7e,0x0000,0x8d7c,0x8d7f,
-0x8d7a,0x8dbd,0x0000,0x0000,0x8dc0,0x8dbb,0x8ead,0x8eaf,
-0x8ed6,0x0000,0x0000,0x0000,0x0000,0x0000,0x8ed9,0x0000,
-0x0000,0x9012,0x900e,0x9025,0x0000,0x9013,0x90ee,0x0000,
-0x90ab,0x90f7,0x0000,0x9159,0x9154,0x91f2,0x91f0,0x91e5,
-0x91f6,0x0000,0x0000,0x9587,0x0000,0x965a,0x0000,0x0000,
-0x966e,0x0000,0x0000,0x0000,0x9679,0x0000,0x98e1,0x98e6,
-0x0000,0x9ec4,0x9ed2,0x4e80,0x0000,0x4e81,0x508f,0x5097,
-0x5088,0x5089,0x0000,0x0000,0x5081,0x5160,0x0000,0x0000,
-0x5e42,0x51d3,0x0000,0x0000,0x51d2,0x51d6,0x5273,0x0000,
-0x5270,0x0000,0x0000,0x0000,0x53a8,0x53a6,0x53c5,0x5597,
-0x55de,0x0000,0x0000,0x5596,0x55b4,0x0000,0x5585,0x0000,
-0x559b,0x55a0,0x0000,0x5559,0x0000,0x5586,0x0000,0x0000,
-0x55af,0x557a,0x0000,0x0000,0x0000,0x559e,0x0000,0x55a9,
-0x570f,0x570e,0x581a,0x0000,0x581f,0x0000,0x583c,0x5818,
-0x583e,0x5826,0x0000,0x583a,0x0000,0x5822,0x0000,0x58fb,
-0x5963,0x5964,0x0000,0x5aa8,0x5aa3,0x5a82,0x5a88,0x5aa1,
-0x5a85,0x5a98,0x0000,0x5a99,0x0000,0x5a89,0x5a81,0x5a96,
-0x5a80,0x0000,0x0000,0x5a91,0x0000,0x0000,0x0000,0x0000,
-0x5acf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5a87,
-0x5aa0,0x0000,0x5a79,0x0000,0x5a86,0x5aab,0x5aaa,0x5aa4,
-0x5a8d,0x5a7e,0x0000,0x5bd5,0x0000,0x0000,0x0000,0x5c1e,
-0x5c5f,0x5c5e,0x5d44,0x5d3e,0x0000,0x5d48,0x5d1c,0x0000,
-0x5d5b,0x5d4d,0x0000,0x0000,0x5d57,0x0000,0x5d53,0x5d4f,
-0x0000,0x5d3b,0x5d46,0x0000,0x0000,0x5e46,0x5e47,0x0000,
-0x5e48,0x5ec0,0x5ebd,0x5ebf,0x0000,0x5f11,0x0000,0x5f3e,
-0x5f3b,0x0000,0x5f3a,0x0000,0x0000,0x0000,0x5fa7,0x0000,
-0x60ea,0x0000,0x6107,0x6122,0x610c,0x0000,0x0000,0x60b3,
-0x60d6,0x60d2,0x0000,0x60e3,0x60e5,0x60e9,0x0000,0x0000,
-0x6111,0x60fd,0x0000,0x0000,0x611e,0x6120,0x6121,0x621e,
-0x0000,0x63e2,0x63de,0x63e6,0x0000,0x0000,0x0000,0x0000,
-0x63f8,0x0000,0x63fe,0x63c1,0x63bf,0x63f7,0x63d1,0x655f,
-0x6560,0x6561,0x0000,0x0000,0x65d1,0x0000,0x0000,0x667d,
-0x666b,0x667f,0x0000,0x0000,0x6673,0x6681,0x666d,0x6669,
-0x0000,0x0000,0x671e,0x68ed,0x0000,0x0000,0x0000,0x0000,
-0x6903,0x0000,0x68fe,0x68e5,0x691e,0x6902,0x0000,0x0000,
-0x6909,0x68ca,0x6900,0x0000,0x6901,0x6918,0x68e2,0x68cf,
-0x0000,0x692e,0x68c5,0x68ff,0x0000,0x691c,0x68c3,0x0000,
-0x6b6f,0x0000,0x6b6e,0x0000,0x6bbe,0x0000,0x6bf4,0x6c2d,
-0x0000,0x6db6,0x6e75,0x6e1e,0x0000,0x6e18,0x0000,0x6e48,
-0x0000,0x6e4f,0x0000,0x6e42,0x6e6a,0x6e70,0x6dfe,0x0000,
-0x0000,0x6e6d,0x0000,0x6e7b,0x6e7e,0x6e59,0x0000,0x6e57,
-0x0000,0x6e80,0x6e50,0x0000,0x6e29,0x6e76,0x6e2a,0x6e4c,
-0x712a,0x0000,0x7135,0x712c,0x7137,0x711d,0x0000,0x0000,
-0x7138,0x0000,0x7134,0x712b,0x7133,0x7127,0x7124,0x0000,
-0x712d,0x7232,0x7283,0x7282,0x7287,0x7306,0x7324,0x7338,
-0x732a,0x732c,0x732b,0x0000,0x732f,0x7328,0x7417,0x0000,
-0x0000,0x7419,0x7438,0x0000,0x741f,0x7414,0x743c,0x73f7,
-0x741c,0x7415,0x7418,0x7439,0x74f9,0x7524,0x0000,0x0000,
-0x0000,0x756e,0x756d,0x7571,0x758e,0x0000,0x75e5,0x0000,
-0x0000,0x0000,0x0000,0x7694,0x76b3,0x0000,0x76d9,0x0000,
-0x7748,0x7749,0x7743,0x0000,0x0000,0x7742,0x77df,0x0000,
-0x7863,0x7876,0x0000,0x785f,0x7866,0x7966,0x7971,0x0000,
-0x0000,0x7976,0x7984,0x7975,0x79ff,0x7a07,0x0000,0x7a0e,
-0x7a09,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7ae7,
-0x7ae2,0x7b55,0x0000,0x0000,0x7b43,0x7b57,0x7b6c,0x7b42,
-0x7b53,0x0000,0x7b41,0x0000,0x0000,0x7ca7,0x7ca0,0x7ca6,
-0x7ca4,0x7d74,0x0000,0x7d59,0x0000,0x7d60,0x7d57,0x7d6c,
-0x7d7e,0x7d64,0x0000,0x7d5a,0x7d5d,0x0000,0x0000,0x0000,
-0x7d76,0x7d4d,0x7d75,0x0000,0x7fd3,0x7fd6,0x0000,0x0000,
-0x8060,0x804e,0x8145,0x813b,0x0000,0x8148,0x8142,0x8149,
-0x8140,0x8114,0x8141,0x0000,0x81ef,0x81f6,0x8203,0x0000,
-0x83ed,0x0000,0x83da,0x8418,0x83d2,0x8408,0x0000,0x8400,
-0x0000,0x0000,0x0000,0x8417,0x8346,0x8414,0x83d3,0x8405,
-0x841f,0x8402,0x8416,0x83cd,0x83e6,0x0000,0x865d,0x86d5,
-0x86e1,0x0000,0x0000,0x0000,0x0000,0x86ee,0x8847,0x8846,
-0x0000,0x0000,0x88bb,0x0000,0x88bf,0x88b4,0x0000,0x88b5,
-0x0000,0x899a,0x8a43,0x0000,0x0000,0x8a5a,0x0000,0x0000,
-0x0000,0x8a35,0x8a38,0x8a42,0x8a49,0x8a5d,0x8a4b,0x8a3d,
-0x0000,0x0000,0x0000,0x0000,0x8c60,0x8c5e,0x8c7f,0x8c7e,
-0x8c83,0x0000,0x8cb1,0x8d87,0x0000,0x0000,0x8d88,0x8d83,
-0x0000,0x0000,0x8d86,0x8d8b,0x8d82,0x8dca,0x8dd2,0x0000,
-0x0000,0x8dd4,0x8dc9,0x8eb0,0x0000,0x0000,0x0000,0x8ef2,
-0x8ee4,0x8ef3,0x8eea,0x0000,0x8efd,0x0000,0x8f9d,0x902b,
-0x902a,0x0000,0x9028,0x9029,0x902c,0x0000,0x0000,0x903a,
-0x9030,0x9037,0x903b,0x0000,0x910a,0x0000,0x0000,0x0000,
-0x91fe,0x9220,0x0000,0x920b,0x0000,0x9218,0x9222,0x0000,
-0x921b,0x9208,0x0000,0x920e,0x9213,0x0000,0x0000,0x9595,
-0x0000,0x0000,0x0000,0x968c,0x967b,0x967f,0x9681,0x0000,
-0x9682,0x0000,0x0000,0x0000,0x0000,0x0000,0x96ee,0x96ed,
-0x0000,0x96ec,0x975f,0x976f,0x0000,0x976d,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x98f0,0x0000,0x0000,0x0000,
-0x9aa9,0x0000,0x0000,0x9ae0,0x4eb7,0x0000,0x0000,0x50cc,
-0x50bc,0x0000,0x50aa,0x50b9,0x0000,0x50ab,0x50c3,0x50cd,
-0x517e,0x527e,0x5279,0x0000,0x0000,0x52e1,0x52e0,0x52e7,
-0x5380,0x53ab,0x53aa,0x53a9,0x53e0,0x55ea,0x0000,0x55d7,
-0x0000,0x0000,0x55c1,0x5715,0x0000,0x586c,0x0000,0x585c,
-0x5850,0x5861,0x586a,0x5869,0x5856,0x5860,0x5866,0x585f,
-0x5923,0x5966,0x5968,0x0000,0x0000,0x5ace,0x0000,0x5ac5,
-0x5ac3,0x0000,0x0000,0x5ad0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x5b74,0x5b76,0x5bdc,0x5bd7,0x5bda,0x5bdb,
-0x0000,0x5c20,0x5d6d,0x5d66,0x0000,0x5d64,0x5d6e,0x0000,
-0x5d60,0x5f42,0x5f5a,0x5f6e,0x0000,0x0000,0x6130,0x613a,
-0x612a,0x6143,0x6119,0x6131,0x0000,0x613d,0x0000,0x0000,
-0x0000,0x6408,0x6432,0x6438,0x0000,0x6431,0x0000,0x6419,
-0x0000,0x6411,0x0000,0x0000,0x6429,0x641d,0x0000,0x0000,
-0x0000,0x643c,0x0000,0x6446,0x6447,0x0000,0x0000,0x643a,
-0x6407,0x0000,0x656b,0x0000,0x6570,0x656d,0x0000,0x65e4,
-0x6693,0x0000,0x0000,0x0000,0x0000,0x668f,0x0000,0x0000,
-0x6692,0x0000,0x668e,0x0000,0x6946,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x6931,0x0000,0x0000,0x693e,
-0x0000,0x697c,0x6943,0x0000,0x6973,0x0000,0x6955,0x0000,
-0x0000,0x6985,0x694d,0x6950,0x6947,0x6967,0x6936,0x6964,
-0x6961,0x0000,0x697d,0x6b44,0x6b40,0x6b71,0x6b73,0x6b9c,
-0x0000,0x0000,0x0000,0x6bc1,0x0000,0x6bfa,0x6c31,0x6c32,
-0x0000,0x0000,0x6eb8,0x6ea8,0x0000,0x6e91,0x6ebb,0x0000,
-0x6e9a,0x0000,0x0000,0x6ea9,0x0000,0x0000,0x6eb5,0x6e6c,
-0x6ee8,0x0000,0x6edd,0x6eda,0x6ee6,0x6eac,0x0000,0x0000,
-0x0000,0x6ed9,0x6ee3,0x6ee9,0x6edb,0x0000,0x716f,0x0000,
-0x0000,0x7148,0x0000,0x714a,0x716b,0x0000,0x714f,0x7157,
-0x7174,0x0000,0x0000,0x0000,0x7145,0x7151,0x716d,0x0000,
-0x7251,0x7250,0x724e,0x0000,0x7341,0x0000,0x732e,0x7346,
-0x0000,0x7427,0x0000,0x7448,0x7453,0x743d,0x0000,0x745d,
-0x7456,0x0000,0x741e,0x7447,0x7443,0x7458,0x7449,0x0000,
-0x744c,0x7445,0x743e,0x0000,0x7501,0x751e,0x0000,0x0000,
-0x757a,0x75ee,0x7602,0x7697,0x7698,0x0000,0x0000,0x0000,
-0x775d,0x7764,0x7753,0x7758,0x7882,0x7890,0x788a,0x0000,
-0x787a,0x787d,0x0000,0x788b,0x7878,0x0000,0x0000,0x788d,
-0x7888,0x7892,0x7881,0x797e,0x7983,0x0000,0x0000,0x0000,
-0x7980,0x0000,0x0000,0x0000,0x7a0f,0x0000,0x0000,0x7a1d,
-0x0000,0x7aa1,0x7aa4,0x0000,0x7ae9,0x7aea,0x0000,0x7b62,
-0x7b6b,0x0000,0x7b5e,0x0000,0x7b79,0x0000,0x0000,0x7b6f,
-0x7b68,0x0000,0x0000,0x7cae,0x0000,0x0000,0x0000,0x7cb0,
-0x0000,0x7d90,0x0000,0x7d8a,0x0000,0x7d8b,0x7d99,0x7d95,
-0x0000,0x7d87,0x7d78,0x7d97,0x7d89,0x7d98,0x0000,0x0000,
-0x0000,0x7fa3,0x0000,0x0000,0x0000,0x7fdd,0x8057,0x0000,
-0x8163,0x816a,0x816c,0x0000,0x0000,0x0000,0x815d,0x8175,
-0x0000,0x815f,0x0000,0x817d,0x816d,0x0000,0x0000,0x8241,
-0x844f,0x8484,0x0000,0x847f,0x0000,0x8448,0x842a,0x847b,
-0x8472,0x8464,0x842e,0x845c,0x8453,0x0000,0x8441,0x84c8,
-0x0000,0x8462,0x8480,0x843e,0x8483,0x8471,0x0000,0x844a,
-0x8455,0x8458,0x0000,0x0000,0x0000,0x86fc,0x86fd,0x8715,
-0x0000,0x8716,0x86ff,0x0000,0x0000,0x0000,0x8858,0x88cf,
-0x88e0,0x0000,0x0000,0x0000,0x0000,0x89e7,0x8a6a,0x8a80,
-0x0000,0x8a6f,0x8a65,0x0000,0x8a78,0x8a7d,0x8a88,0x0000,
-0x0000,0x8a64,0x8a7e,0x0000,0x8a67,0x8c63,0x8c88,0x0000,
-0x8ccd,0x0000,0x8cc9,0x0000,0x8ded,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x8eb1,0x0000,0x0000,0x8f04,
-0x8f9e,0x8fa0,0x9043,0x9046,0x9048,0x9045,0x9040,0x904c,
-0x0000,0x0000,0x910c,0x9113,0x9115,0x0000,0x916b,0x9167,
-0x925d,0x9255,0x9235,0x0000,0x9259,0x922f,0x923c,0x928f,
-0x925c,0x926a,0x9262,0x925f,0x926b,0x926e,0x923b,0x9244,
-0x9241,0x959a,0x0000,0x9599,0x0000,0x0000,0x0000,0x968f,
-0x0000,0x9696,0x0000,0x0000,0x0000,0x96f4,0x96fc,0x0000,
-0x9755,0x0000,0x9779,0x0000,0x0000,0x0000,0x97ee,0x97f5,
-0x0000,0x980b,0x0000,0x98f3,0x0000,0x0000,0x98f7,0x98ff,
-0x98f5,0x0000,0x98ec,0x98f1,0x0000,0x0000,0x999a,0x0000,
-0x9ae2,0x9b3d,0x9b5d,0x9ce8,0x0000,0x9ceb,0x9cef,0x9cee,
-0x9e81,0x9f14,0x50d0,0x50d9,0x50dc,0x50d8,0x0000,0x50e1,
-0x50eb,0x0000,0x0000,0x50f4,0x50e2,0x50de,0x0000,0x0000,
-0x0000,0x51f4,0x0000,0x0000,0x0000,0x52ed,0x52ea,0x0000,
-0x5332,0x0000,0x53ae,0x53b0,0x0000,0x55fb,0x5603,0x560b,
-0x0000,0x5607,0x0000,0x55f8,0x0000,0x5628,0x561e,0x0000,
-0x5618,0x5611,0x5651,0x5605,0x5717,0x5892,0x0000,0x588c,
-0x0000,0x5878,0x5884,0x5873,0x58ad,0x5897,0x5895,0x5877,
-0x5872,0x5896,0x588d,0x5910,0x0000,0x596c,0x0000,0x5ae7,
-0x0000,0x5ae4,0x0000,0x0000,0x5aef,0x5626,0x0000,0x0000,
-0x5af0,0x5d7b,0x0000,0x5d83,0x0000,0x0000,0x5d8b,0x5d8c,
-0x0000,0x5d78,0x5e52,0x0000,0x0000,0x5ed0,0x5ecf,0x0000,
-0x5fb3,0x5fb4,0x0000,0x0000,0x0000,0x617b,0x0000,0x616f,
-0x6181,0x613c,0x6142,0x6138,0x6133,0x0000,0x6160,0x6169,
-0x617d,0x6186,0x622c,0x6228,0x0000,0x644c,0x0000,0x6457,
-0x647c,0x0000,0x0000,0x6455,0x6462,0x6471,0x646a,0x6456,
-0x643b,0x6481,0x0000,0x644f,0x647e,0x6464,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x6571,0x0000,0x0000,0x66a5,0x669a,
-0x669c,0x0000,0x66a6,0x0000,0x66a4,0x698f,0x69c5,0x69c8,
-0x6992,0x69b2,0x0000,0x0000,0x0000,0x69e3,0x69c0,0x69d6,
-0x69d1,0x699f,0x69a2,0x69d2,0x0000,0x0000,0x0000,0x69e1,
-0x69d5,0x699d,0x0000,0x0000,0x6998,0x0000,0x6b74,0x6ba1,
-0x0000,0x6ef0,0x6ef3,0x0000,0x0000,0x6f1b,0x6f0c,0x6f1d,
-0x6f34,0x6f28,0x6f17,0x0000,0x6f44,0x6f42,0x6f04,0x6f11,
-0x6efa,0x6f4a,0x7191,0x718e,0x0000,0x718b,0x718d,0x717f,
-0x718c,0x717e,0x717c,0x7183,0x0000,0x7188,0x0000,0x0000,
-0x7294,0x0000,0x7355,0x7353,0x734f,0x7354,0x746c,0x7465,
-0x7466,0x7461,0x746b,0x7468,0x7476,0x0000,0x7460,0x0000,
-0x7474,0x7506,0x760e,0x0000,0x7607,0x0000,0x0000,0x76b9,
-0x0000,0x76b7,0x76e2,0x0000,0x7774,0x7777,0x7776,0x7775,
-0x0000,0x7778,0x7771,0x0000,0x777a,0x715b,0x777b,0x78a6,
-0x78ae,0x78b8,0x0000,0x0000,0x0000,0x78b1,0x78af,0x0000,
-0x7989,0x7987,0x0000,0x0000,0x7a29,0x0000,0x7a2a,0x0000,
-0x7a2d,0x7a2c,0x0000,0x7a32,0x0000,0x7aec,0x7af0,0x7b81,
-0x7b9e,0x7b83,0x0000,0x7b92,0x0000,0x7ba3,0x7b9f,0x7b93,
-0x0000,0x7b86,0x7cb8,0x7cb7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x7dc8,0x7db6,0x0000,0x7dd1,0x0000,0x7da8,0x7dab,
-0x0000,0x7db3,0x7dcd,0x0000,0x7dcf,0x7da4,0x0000,0x0000,
-0x7f41,0x7f6f,0x7f71,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x8023,0x805b,0x0000,0x8061,0x805f,0x8181,0x0000,
-0x0000,0x8184,0x8213,0x0000,0x824a,0x824c,0x0000,0x0000,
-0x0000,0x84bd,0x8495,0x0000,0x8492,0x84c3,0x0000,0x8496,
-0x84a5,0x84b5,0x84b3,0x84a3,0x84e4,0x84d8,0x84d5,0x0000,
-0x84b7,0x84ad,0x84da,0x8493,0x8736,0x0000,0x0000,0x0000,
-0x873d,0x872b,0x8747,0x8739,0x0000,0x8745,0x871d,0x0000,
-0x88ff,0x88ea,0x0000,0x88f5,0x0000,0x8900,0x88ed,0x8903,
-0x88e9,0x0000,0x0000,0x89ea,0x0000,0x8a9b,0x8a8e,0x8aa2,
-0x0000,0x8a9c,0x8a94,0x8a90,0x8aa9,0x8aac,0x0000,0x8a9f,
-0x0000,0x0000,0x8a9d,0x0000,0x8c67,0x0000,0x0000,0x8cd0,
-0x8cd6,0x8cd4,0x8d98,0x8d9a,0x8d97,0x0000,0x0000,0x0000,
-0x8e0b,0x8e08,0x8e01,0x8eb4,0x8eb3,0x0000,0x8fa1,0x8fa2,
-0x0000,0x905a,0x0000,0x9061,0x905f,0x0000,0x0000,0x9125,
-0x917b,0x9176,0x917c,0x0000,0x9289,0x92f6,0x92b1,0x92ad,
-0x9292,0x9281,0x9284,0x0000,0x92ae,0x9290,0x929e,0x0000,
-0x0000,0x0000,0x95a2,0x95a7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x96a0,0x969d,0x969f,0x96d0,0x0000,0x96d1,0x0000,
-0x0000,0x9759,0x0000,0x9764,0x0000,0x0000,0x0000,0x9819,
-0x0000,0x9814,0x9815,0x981a,0x0000,0x0000,0x0000,0x0000,
-0x9906,0x0000,0x98f8,0x9901,0x0000,0x99be,0x99bc,0x99b7,
-0x99b6,0x99c0,0x0000,0x99b8,0x0000,0x0000,0x0000,0x99c4,
-0x0000,0x99bf,0x0000,0x9ada,0x9ae4,0x9ae9,0x9ae8,0x9aea,
-0x9ae5,0x0000,0x9b26,0x0000,0x0000,0x9b40,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x9ebd,0x0000,0x0000,
-0x0000,0x0000,0x510e,0x0000,0x50f7,0x0000,0x50fc,0x510d,
-0x5101,0x51da,0x51d9,0x51db,0x5286,0x528e,0x52ee,0x5333,
-0x53b1,0x0000,0x5647,0x562d,0x5654,0x0000,0x564b,0x5652,
-0x5631,0x5644,0x5656,0x5650,0x562b,0x0000,0x564d,0x5637,
-0x564f,0x58a2,0x58b7,0x0000,0x58b2,0x0000,0x58aa,0x58b5,
-0x58b0,0x0000,0x58b4,0x58a4,0x58a7,0x0000,0x5926,0x5afe,
-0x0000,0x5b04,0x0000,0x5afc,0x0000,0x5b06,0x5b0a,0x5afa,
-0x5b0d,0x5b00,0x5b0e,0x0000,0x0000,0x0000,0x5d91,0x0000,
-0x5d8f,0x5d90,0x5d98,0x5da4,0x5d9b,0x5da3,0x5d96,0x5de4,
-0x5e5a,0x0000,0x0000,0x5e5e,0x0000,0x5fb8,0x6157,0x615c,
-0x61a6,0x6195,0x6188,0x0000,0x61a3,0x618f,0x0000,0x6164,
-0x0000,0x6159,0x6178,0x0000,0x6185,0x6187,0x619e,0x0000,
-0x0000,0x6198,0x619c,0x0000,0x0000,0x622f,0x6480,0x649b,
-0x648e,0x648d,0x6494,0x64c6,0x0000,0x64a8,0x6483,0x0000,
-0x64b9,0x6486,0x64b4,0x64af,0x6491,0x0000,0x64aa,0x64a1,
-0x64a7,0x66b6,0x66b3,0x0000,0x66bc,0x66ac,0x0000,0x66ad,
-0x6a0e,0x0000,0x6a1c,0x6a1a,0x0000,0x0000,0x6a0b,0x0000,
-0x69ef,0x6a0c,0x69f0,0x6a22,0x0000,0x69d8,0x0000,0x6a12,
-0x69fa,0x0000,0x6a2a,0x0000,0x6a10,0x0000,0x0000,0x6a29,
-0x69f9,0x69ea,0x6a2c,0x6a24,0x0000,0x69e9,0x6b52,0x6b4f,
-0x6b53,0x0000,0x0000,0x6f10,0x6f65,0x6f75,0x0000,0x0000,
-0x0000,0x0000,0x6fd0,0x0000,0x6f5c,0x6f3d,0x6f71,0x0000,
-0x6f91,0x6f0b,0x6f79,0x6f81,0x6f8f,0x0000,0x6f59,0x6f74,
-0x0000,0x71ae,0x0000,0x71a3,0x71ad,0x0000,0x0000,0x71ab,
-0x71a6,0x71a2,0x0000,0x52f2,0x7257,0x7255,0x7299,0x734b,
-0x747a,0x0000,0x0000,0x0000,0x748c,0x7484,0x0000,0x0000,
-0x7482,0x7493,0x747b,0x0000,0x7509,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x778a,0x0000,0x7790,0x0000,0x78c6,
-0x78d3,0x78c0,0x78d2,0x78c7,0x78c2,0x0000,0x799f,0x799d,
-0x799e,0x0000,0x7a41,0x0000,0x7a38,0x7a3a,0x7a42,0x0000,
-0x0000,0x7a3e,0x7ab0,0x7bae,0x7bb3,0x0000,0x0000,0x7bbf,
-0x0000,0x0000,0x7bcd,0x0000,0x7bb2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x7cc4,0x7ccd,0x7cc2,0x7cc6,
-0x7cc3,0x7cc9,0x7cc7,0x0000,0x7df8,0x0000,0x7ded,0x7de2,
-0x0000,0x0000,0x0000,0x7ddc,0x7e02,0x7e01,0x0000,0x7dd6,
-0x0000,0x7de4,0x7dfe,0x0000,0x7e00,0x7dfc,0x7dfd,0x0000,
-0x7df5,0x7dff,0x0000,0x7deb,0x7de5,0x7f78,0x7fae,0x7fe7,
-0x0000,0x8065,0x806a,0x8066,0x8068,0x806b,0x8194,0x81a1,
-0x8192,0x8196,0x8193,0x0000,0x0000,0x8501,0x0000,0x84f8,
-0x0000,0x84f5,0x0000,0x8504,0x0000,0x0000,0x0000,0x0000,
-0x851b,0x8503,0x8533,0x8534,0x84ed,0x0000,0x0000,0x8535,
-0x0000,0x8505,0x0000,0x0000,0x0000,0x0000,0x877d,0x0000,
-0x0000,0x0000,0x8771,0x0000,0x885c,0x88e6,0x890f,0x891b,
-0x0000,0x89a9,0x89a5,0x89ee,0x8ab1,0x0000,0x8acc,0x8ace,
-0x0000,0x8ab7,0x0000,0x8ab5,0x8ae9,0x8ab4,0x0000,0x8ab3,
-0x8ac1,0x8aaf,0x8aca,0x8ad0,0x0000,0x0000,0x0000,0x8c8e,
-0x0000,0x0000,0x8ce9,0x8cdb,0x0000,0x8ceb,0x8da4,0x0000,
-0x8da2,0x8d9d,0x0000,0x0000,0x0000,0x0000,0x8e2a,0x8e28,
-0x0000,0x0000,0x8eb8,0x8eb6,0x8eb9,0x8eb7,0x8f22,0x8f2b,
-0x8f27,0x8f19,0x8fa4,0x0000,0x8fb3,0x0000,0x9071,0x906a,
-0x0000,0x0000,0x9188,0x918c,0x92bf,0x92b8,0x92be,0x92dc,
-0x92e5,0x0000,0x0000,0x92d4,0x92d6,0x0000,0x92da,0x92ed,
-0x92f3,0x92db,0x0000,0x92b9,0x92e2,0x92eb,0x95af,0x0000,
-0x95b2,0x95b3,0x0000,0x0000,0x0000,0x96a3,0x96a5,0x0000,
-0x0000,0x0000,0x0000,0x970a,0x0000,0x9787,0x9789,0x978c,
-0x97ef,0x982a,0x9822,0x0000,0x981f,0x0000,0x9919,0x0000,
-0x99ca,0x99da,0x0000,0x0000,0x0000,0x99de,0x99c8,0x99e0,
-0x0000,0x9ab6,0x9ab5,0x0000,0x9af4,0x0000,0x9b6b,0x9b69,
-0x9b72,0x9b63,0x0000,0x9d0d,0x0000,0x9d01,0x9d0c,0x0000,
-0x9cf8,0x0000,0x0000,0x9cfe,0x9d02,0x9e84,0x0000,0x9eab,
-0x9eaa,0x511d,0x5116,0x0000,0x512b,0x511e,0x511b,0x5290,
-0x5294,0x5314,0x0000,0x0000,0x5667,0x0000,0x567b,0x0000,
-0x565f,0x5661,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x58c3,0x58ca,0x58bb,0x58c0,0x58c4,0x5901,0x5b1f,
-0x5b18,0x5b11,0x5b15,0x0000,0x5b12,0x5b1c,0x0000,0x5b22,
-0x5b79,0x5da6,0x0000,0x5db3,0x5dab,0x5eea,0x0000,0x5f5b,
-0x0000,0x0000,0x61b7,0x61ce,0x61b9,0x61bd,0x61cf,0x61c0,
-0x6199,0x6197,0x0000,0x61bb,0x61d0,0x61c4,0x6231,0x0000,
-0x64d3,0x64c0,0x0000,0x0000,0x0000,0x0000,0x64dc,0x64d1,
-0x64c8,0x0000,0x64d5,0x66c3,0x0000,0x0000,0x66bf,0x66c5,
-0x0000,0x66cd,0x66c1,0x6706,0x0000,0x6724,0x6a63,0x6a42,
-0x6a52,0x0000,0x6a43,0x6a33,0x0000,0x6a6c,0x6a57,0x0000,
-0x6a4c,0x6a6e,0x0000,0x0000,0x0000,0x0000,0x0000,0x6a37,
-0x0000,0x6a71,0x6a4a,0x6a36,0x0000,0x6a53,0x0000,0x6a45,
-0x6a70,0x0000,0x0000,0x6a5c,0x6b58,0x6b57,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x6fbb,0x0000,0x0000,0x6fbe,
-0x0000,0x0000,0x0000,0x6fb5,0x6fd3,0x6f9f,0x0000,0x6fb7,
-0x6ff5,0x71b7,0x0000,0x71bb,0x0000,0x71d1,0x0000,0x71ba,
-0x0000,0x71b6,0x71cc,0x0000,0x0000,0x71d3,0x749b,0x0000,
-0x0000,0x7496,0x74a2,0x749d,0x750a,0x750e,0x0000,0x7581,
-0x762c,0x7637,0x7636,0x763b,0x0000,0x76a1,0x0000,0x0000,
-0x7798,0x0000,0x7796,0x0000,0x0000,0x0000,0x78d6,0x78eb,
-0x0000,0x78dc,0x0000,0x79a5,0x79a9,0x9834,0x7a53,0x7a45,
-0x0000,0x7a4f,0x0000,0x7abd,0x7abb,0x7af1,0x0000,0x0000,
-0x7bec,0x7bed,0x0000,0x0000,0x7cd3,0x0000,0x7ce1,0x0000,
-0x7e19,0x0000,0x0000,0x0000,0x7e27,0x7e26,0x0000,0x0000,
-0x806e,0x81af,0x0000,0x0000,0x81ad,0x0000,0x81aa,0x8218,
-0x0000,0x0000,0x0000,0x0000,0x856f,0x854c,0x0000,0x8542,
-0x0000,0x855c,0x8570,0x855f,0x0000,0x855a,0x854b,0x853f,
-0x878a,0x0000,0x878b,0x87a1,0x878e,0x0000,0x0000,0x8799,
-0x885e,0x885f,0x8924,0x89a7,0x8aea,0x8afd,0x8af9,0x8ae3,
-0x8ae5,0x0000,0x0000,0x8aec,0x0000,0x0000,0x0000,0x0000,
-0x8cf2,0x0000,0x8cef,0x0000,0x8da6,0x0000,0x0000,0x0000,
-0x8e3b,0x8e43,0x0000,0x8e32,0x8f31,0x8f30,0x0000,0x8f2d,
-0x8f3c,0x8fa7,0x8fa5,0x0000,0x0000,0x0000,0x9137,0x9195,
-0x918e,0x0000,0x9196,0x0000,0x9345,0x930a,0x0000,0x0000,
-0x92fd,0x9317,0x931c,0x9307,0x9331,0x9332,0x932c,0x9330,
-0x9303,0x9305,0x0000,0x95c2,0x0000,0x95b8,0x0000,0x95c1,
-0x0000,0x0000,0x0000,0x96ab,0x96b7,0x0000,0x0000,0x9715,
-0x9714,0x0000,0x0000,0x970c,0x9717,0x0000,0x9793,0x0000,
-0x97d2,0x0000,0x0000,0x9836,0x9831,0x9833,0x983c,0x982e,
-0x983a,0x0000,0x983d,0x0000,0x98b5,0x9922,0x9923,0x9920,
-0x991c,0x991d,0x0000,0x99a0,0x0000,0x99ef,0x99e8,0x99eb,
-0x0000,0x0000,0x0000,0x99e1,0x99e6,0x0000,0x0000,0x9af8,
-0x9af5,0x0000,0x0000,0x9b83,0x9b94,0x9b84,0x0000,0x9b8b,
-0x9b8f,0x0000,0x9b8c,0x0000,0x9b89,0x0000,0x9b8e,0x0000,
-0x0000,0x0000,0x9d24,0x9d0f,0x0000,0x9d13,0x9d0a,0x0000,
-0x0000,0x0000,0x0000,0x9d2a,0x9d1a,0x0000,0x9d27,0x9d16,
-0x9d21,0x0000,0x9e85,0x9eac,0x9ec6,0x9ec5,0x9ed7,0x9f53,
-0x0000,0x5128,0x5127,0x51df,0x0000,0x5335,0x53b3,0x0000,
-0x568a,0x567d,0x5689,0x0000,0x58cd,0x58d0,0x0000,0x5b2b,
-0x5b33,0x5b29,0x5b35,0x5b31,0x5b37,0x5c36,0x5dbe,0x0000,
-0x5db9,0x0000,0x5dbb,0x0000,0x61e2,0x61db,0x61dd,0x61dc,
-0x61da,0x0000,0x61d9,0x0000,0x0000,0x64df,0x0000,0x0000,
-0x64e1,0x0000,0x64ee,0x0000,0x65b5,0x66d4,0x66d5,0x0000,
-0x66d0,0x66d1,0x66ce,0x66d7,0x0000,0x0000,0x6a7d,0x6a8a,
-0x0000,0x6aa7,0x0000,0x6a99,0x6a82,0x6a88,0x0000,0x0000,
-0x6a86,0x0000,0x6a98,0x6a9d,0x0000,0x0000,0x6a8f,0x0000,
-0x6aaa,0x0000,0x6b5d,0x0000,0x6c0a,0x0000,0x6fd7,0x6fd6,
-0x6fe5,0x0000,0x0000,0x0000,0x6fd9,0x6fda,0x6fea,0x0000,
-0x6ff6,0x0000,0x0000,0x71e3,0x0000,0x71e9,0x0000,0x71eb,
-0x71ef,0x71f3,0x71ea,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x7371,0x0000,0x74ae,0x0000,0x74b3,0x0000,0x74ac,0x0000,
-0x0000,0x7583,0x7645,0x764e,0x7644,0x76a3,0x76a5,0x77a6,
-0x77a4,0x0000,0x77a9,0x77af,0x0000,0x0000,0x0000,0x78f0,
-0x78f8,0x78f1,0x0000,0x7a49,0x0000,0x0000,0x0000,0x7ac2,
-0x7af2,0x7af3,0x7bfa,0x0000,0x7bf6,0x7bfc,0x7c18,0x7c08,
-0x7c12,0x0000,0x0000,0x7cdb,0x7cda,0x0000,0x0000,0x0000,
-0x7e2c,0x7e4d,0x0000,0x0000,0x7f46,0x7ff6,0x802b,0x8074,
-0x81b8,0x81c8,0x0000,0x0000,0x0000,0x8592,0x8593,0x0000,
-0x857f,0x85ab,0x8597,0x0000,0x0000,0x85ac,0x0000,0x0000,
-0x0000,0x87ce,0x0000,0x87cd,0x0000,0x0000,0x87c1,0x87b1,
-0x87c7,0x0000,0x8940,0x0000,0x893f,0x8939,0x0000,0x8943,
-0x0000,0x0000,0x0000,0x89ab,0x0000,0x8b1f,0x8b09,0x8b0c,
-0x0000,0x0000,0x8c40,0x0000,0x8c96,0x0000,0x8cf6,0x8cf7,
-0x0000,0x8e46,0x8e4f,0x0000,0x0000,0x0000,0x8f3d,0x8f41,
-0x9366,0x9378,0x935d,0x9369,0x9374,0x937d,0x936e,0x9372,
-0x9373,0x9362,0x9348,0x9353,0x935f,0x9368,0x0000,0x937f,
-0x936b,0x0000,0x95c4,0x0000,0x96af,0x96ad,0x96b2,0x0000,
-0x0000,0x971a,0x971b,0x0000,0x0000,0x0000,0x0000,0x979b,
-0x979f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x9840,0x0000,0x9847,0x0000,0x98b7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x99a2,0x0000,0x0000,0x9a00,0x99f3,
-0x0000,0x0000,0x99f5,0x0000,0x0000,0x9abd,0x9b00,0x9b02,
-0x0000,0x9b34,0x9b49,0x9b9f,0x0000,0x9ba3,0x9bcd,0x9b99,
-0x9b9d,0x0000,0x0000,0x9d39,0x0000,0x9d44,0x0000,0x0000,
-0x9d35,0x0000,0x0000,0x9eaf,0x0000,0x512f,0x0000,0x0000,
-0x9f8e,0x0000,0x569f,0x569b,0x569e,0x5696,0x5694,0x56a0,
-0x0000,0x5b3b,0x0000,0x0000,0x5b3a,0x5dc1,0x5f4d,0x5f5d,
-0x61f3,0x0000,0x0000,0x0000,0x0000,0x64f6,0x64e5,0x64ea,
-0x64e7,0x6505,0x0000,0x64f9,0x0000,0x0000,0x0000,0x6aab,
-0x6aed,0x6ab2,0x6ab0,0x6ab5,0x6abe,0x6ac1,0x6ac8,0x0000,
-0x6ac0,0x6abc,0x6ab1,0x6ac4,0x6abf,0x0000,0x0000,0x7008,
-0x7003,0x6ffd,0x7010,0x7002,0x7013,0x0000,0x71fa,0x7200,
-0x74b9,0x74bc,0x0000,0x765b,0x7651,0x764f,0x76eb,0x77b8,
-0x0000,0x77b9,0x77c1,0x77c0,0x77be,0x790b,0x0000,0x7907,
-0x790a,0x7908,0x0000,0x790d,0x7906,0x7915,0x79af,0x0000,
-0x0000,0x0000,0x7af5,0x0000,0x0000,0x7c2e,0x0000,0x7c1b,
-0x0000,0x7c1a,0x7c24,0x0000,0x0000,0x7ce6,0x7ce3,0x0000,
-0x0000,0x7e5d,0x7e4f,0x7e66,0x7e5b,0x7f47,0x7fb4,0x0000,
-0x0000,0x0000,0x7ffa,0x802e,0x0000,0x0000,0x81ce,0x0000,
-0x0000,0x8219,0x0000,0x0000,0x85cc,0x85b2,0x0000,0x85bb,
-0x85c1,0x0000,0x0000,0x0000,0x87e9,0x87ee,0x87f0,0x87d6,
-0x880e,0x87da,0x8948,0x894a,0x894e,0x894d,0x89b1,0x89b0,
-0x89b3,0x0000,0x8b38,0x8b32,0x0000,0x8b2d,0x0000,0x8b34,
-0x0000,0x8b29,0x8c74,0x0000,0x0000,0x8d03,0x0000,0x0000,
-0x8da9,0x8e58,0x0000,0x0000,0x8ebf,0x8ec1,0x8f4a,0x8fac,
-0x0000,0x9089,0x913d,0x913c,0x91a9,0x93a0,0x0000,0x9390,
-0x0000,0x9393,0x938b,0x93ad,0x93bb,0x93b8,0x0000,0x0000,
-0x939c,0x95d8,0x95d7,0x0000,0x0000,0x0000,0x975d,0x97a9,
-0x97da,0x0000,0x0000,0x0000,0x0000,0x9854,0x0000,0x9855,
-0x984b,0x0000,0x983f,0x98b9,0x0000,0x0000,0x0000,0x0000,
-0x9938,0x9936,0x9940,0x0000,0x993b,0x9939,0x99a4,0x0000,
-0x0000,0x9a08,0x9a0c,0x0000,0x9a10,0x0000,0x9b07,0x0000,
-0x9bd2,0x0000,0x9bc2,0x9bbb,0x9bcc,0x9bcb,0x0000,0x0000,
-0x9d4d,0x9d63,0x9d4e,0x0000,0x9d50,0x9d55,0x0000,0x9d5e,
-0x0000,0x9e90,0x9eb2,0x9eb1,0x0000,0x9eca,0x9f02,0x9f27,
-0x9f26,0x0000,0x56af,0x58e0,0x58dc,0x0000,0x5b39,0x0000,
-0x0000,0x5b7c,0x5bf3,0x0000,0x0000,0x5c6b,0x5dc4,0x650b,
-0x6508,0x650a,0x0000,0x0000,0x65dc,0x0000,0x0000,0x66e1,
-0x66df,0x6ace,0x6ad4,0x6ae3,0x6ad7,0x6ae2,0x0000,0x0000,
-0x0000,0x0000,0x6ad8,0x6ad5,0x6ad2,0x0000,0x0000,0x701e,
-0x702c,0x7025,0x6ff3,0x7204,0x7208,0x7215,0x0000,0x74c4,
-0x74c9,0x74c7,0x74c8,0x76a9,0x77c6,0x77c5,0x7918,0x791a,
-0x7920,0x0000,0x7a66,0x7a64,0x7a6a,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x7c35,0x7c34,0x0000,0x0000,0x7e6c,
-0x0000,0x7e6e,0x7e71,0x0000,0x81d4,0x81d6,0x821a,0x8262,
-0x8265,0x8276,0x85db,0x85d6,0x0000,0x85e7,0x0000,0x0000,
-0x85f4,0x0000,0x87fd,0x87d5,0x8807,0x0000,0x880f,0x87f8,
-0x0000,0x0000,0x8987,0x0000,0x89b5,0x89f5,0x0000,0x8b3f,
-0x8b43,0x8b4c,0x0000,0x8d0b,0x8e6b,0x8e68,0x8e70,0x8e75,
-0x8e77,0x0000,0x8ec3,0x0000,0x93e9,0x93ea,0x93cb,0x93c5,
-0x93c6,0x0000,0x93ed,0x93d3,0x0000,0x93e5,0x0000,0x0000,
-0x93db,0x93eb,0x93e0,0x93c1,0x0000,0x0000,0x95dd,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x97b2,0x97b4,0x97b1,0x97b5,0x97f2,0x0000,0x0000,0x0000,
-0x9856,0x0000,0x0000,0x0000,0x9944,0x0000,0x9a26,0x9a1f,
-0x9a18,0x9a21,0x9a17,0x0000,0x9b09,0x0000,0x0000,0x9bc5,
-0x9bdf,0x0000,0x9be3,0x0000,0x9be9,0x9bee,0x0000,0x0000,
-0x9d66,0x9d7a,0x0000,0x9d6e,0x9d91,0x9d83,0x9d76,0x9d7e,
-0x9d6d,0x0000,0x9e95,0x9ee3,0x0000,0x0000,0x9f03,0x9f04,
-0x0000,0x9f17,0x0000,0x5136,0x0000,0x5336,0x0000,0x5b42,
-0x0000,0x0000,0x5b44,0x5b46,0x5b7e,0x5dca,0x5dc8,0x5dcc,
-0x5ef0,0x0000,0x6585,0x66e5,0x66e7,0x0000,0x0000,0x0000,
-0x6af4,0x0000,0x6ae9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x703d,0x0000,0x7036,0x0000,0x7216,0x0000,0x7212,0x720f,
-0x7217,0x7211,0x720b,0x0000,0x0000,0x74cd,0x74d0,0x74cc,
-0x74ce,0x74d1,0x0000,0x7589,0x0000,0x7a6f,0x7c4b,0x7c44,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x7e7f,0x8b71,0x0000,
-0x802f,0x807a,0x807b,0x807c,0x0000,0x0000,0x0000,0x85fc,
-0x8610,0x8602,0x0000,0x0000,0x85ee,0x8603,0x0000,0x860d,
-0x8613,0x8608,0x860f,0x8818,0x8812,0x0000,0x0000,0x8967,
-0x8965,0x89bb,0x8b69,0x8b62,0x0000,0x8b6e,0x0000,0x8b61,
-0x0000,0x8b64,0x8b4d,0x8c51,0x0000,0x0000,0x8e83,0x8ec6,
-0x0000,0x941f,0x0000,0x9404,0x9417,0x9408,0x9405,0x0000,
-0x93f3,0x941e,0x9402,0x941a,0x941b,0x9427,0x941c,0x0000,
-0x96b5,0x0000,0x0000,0x9733,0x0000,0x9734,0x9731,0x97b8,
-0x97ba,0x0000,0x97fc,0x0000,0x0000,0x98c3,0x0000,0x994d,
-0x0000,0x9a2f,0x0000,0x0000,0x0000,0x9ac9,0x0000,0x9ac8,
-0x9ac4,0x9b2a,0x9b38,0x9b50,0x0000,0x9c0a,0x9bfb,0x9c04,
-0x9bfc,0x9bfe,0x0000,0x0000,0x0000,0x9c02,0x9bf6,0x9c1b,
-0x9bf9,0x9c15,0x9c10,0x9bff,0x9c00,0x9c0c,0x0000,0x0000,
-0x9d95,0x9da5,0x0000,0x0000,0x0000,0x0000,0x9e98,0x9ec1,
-0x0000,0x9f5a,0x5164,0x56bb,0x0000,0x58e6,0x5b49,0x5bf7,
-0x0000,0x0000,0x5dd0,0x0000,0x5fc2,0x0000,0x6511,0x0000,
-0x6aff,0x6afe,0x6afd,0x0000,0x6b01,0x0000,0x0000,0x704b,
-0x704d,0x7047,0x74d3,0x7668,0x7667,0x0000,0x0000,0x77d1,
-0x7930,0x7932,0x792e,0x0000,0x9f9d,0x7ac9,0x7ac8,0x0000,
-0x7c56,0x7c51,0x0000,0x0000,0x0000,0x7e85,0x7e89,0x7e8e,
-0x7e84,0x0000,0x826a,0x862b,0x862f,0x8628,0x0000,0x8616,
-0x8615,0x861d,0x881a,0x0000,0x0000,0x0000,0x89bc,0x8b75,
-0x8b7c,0x0000,0x8d11,0x8d12,0x8f5c,0x91bb,0x0000,0x93f4,
-0x0000,0x0000,0x942d,0x0000,0x0000,0x96e4,0x9737,0x9736,
-0x9767,0x97be,0x97bd,0x97e2,0x9868,0x9866,0x98c8,0x98ca,
-0x98c7,0x98dc,0x0000,0x994f,0x99a9,0x9a3c,0x0000,0x9a3b,
-0x9ace,0x0000,0x9b14,0x9b53,0x0000,0x9c2e,0x0000,0x9c1f,
-0x0000,0x0000,0x0000,0x0000,0x9db0,0x9dbd,0x0000,0x0000,
-0x9dae,0x9dc4,0x9e7b,0x0000,0x0000,0x9e9e,0x0000,0x9f05,
-0x0000,0x9f69,0x9fa1,0x56c7,0x571d,0x5b4a,0x5dd3,0x0000,
-0x5f72,0x6202,0x0000,0x6235,0x6527,0x651e,0x651f,0x0000,
-0x0000,0x6b07,0x6b06,0x0000,0x0000,0x7054,0x721c,0x7220,
-0x7af8,0x0000,0x7c5d,0x7c58,0x0000,0x7e92,0x7f4e,0x0000,
-0x0000,0x0000,0x8827,0x0000,0x8b81,0x8b83,0x0000,0x8c44,
-0x0000,0x0000,0x0000,0x0000,0x9442,0x944d,0x9454,0x944e,
-0x0000,0x9443,0x0000,0x0000,0x973c,0x9740,0x97c0,0x0000,
-0x0000,0x0000,0x0000,0x995a,0x9a51,0x0000,0x9add,0x0000,
-0x0000,0x9c38,0x0000,0x9c45,0x9c3a,0x0000,0x9c35,0x0000,
-0x0000,0x0000,0x9ef1,0x0000,0x9f93,0x529a,0x0000,0x0000,
-0x8641,0x5dd7,0x0000,0x6528,0x0000,0x0000,0x0000,0x7053,
-0x7059,0x0000,0x7221,0x0000,0x766f,0x7937,0x79b5,0x7c62,
-0x7c5e,0x7cf5,0x0000,0x0000,0x863d,0x0000,0x882d,0x8989,
-0x8b8d,0x8b87,0x8b90,0x8d1a,0x8e99,0x0000,0x0000,0x0000,
-0x945f,0x0000,0x0000,0x9456,0x9461,0x945b,0x945a,0x945c,
-0x9465,0x0000,0x9741,0x0000,0x0000,0x986e,0x986c,0x986d,
-0x0000,0x99aa,0x9a5c,0x9a58,0x9ade,0x0000,0x9c4f,0x9c51,
-0x0000,0x9c53,0x0000,0x0000,0x0000,0x9dfc,0x9f39,0x0000,
-0x513e,0x0000,0x56d2,0x0000,0x5b4f,0x6b14,0x0000,0x7a72,
-0x7a73,0x0000,0x0000,0x0000,0x8b91,0x0000,0x0000,0x91bf,
-0x0000,0x946c,0x0000,0x0000,0x96e6,0x9745,0x0000,0x97c8,
-0x97e4,0x995d,0x0000,0x9b21,0x0000,0x9b2c,0x9b57,0x0000,
-0x0000,0x9c5d,0x9c61,0x9c65,0x9e08,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x9f45,0x0000,0x0000,0x6205,0x66ef,0x6b1b,
-0x6b1d,0x7225,0x7224,0x7c6d,0x0000,0x8642,0x8649,0x0000,
-0x8978,0x898a,0x8b97,0x0000,0x8c9b,0x8d1c,0x0000,0x8ea2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x9c6c,0x0000,0x9c6f,0x0000,0x9e0e,0x0000,0x9f08,0x9f1d,
-0x9fa3,0x0000,0x0000,0x5f60,0x6b1c,0x0000,0x0000,0x0000,
-0x7cf3,0x0000,0x8b9b,0x8ea7,0x91c4,0x0000,0x947a,0x0000,
-0x0000,0x9a61,0x9a63,0x9ad7,0x9c76,0x0000,0x9fa5,0x0000,
-0x7067,0x0000,0x72ab,0x864a,0x897d,0x8b9d,0x8c53,0x8f65,
-0x947b,0x0000,0x98cd,0x98dd,0x0000,0x9b30,0x9e16,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x96e7,0x9e18,0x9ea2,0x0000,
-0x9f7c,0x0000,0x7e9e,0x9484,0x0000,0x9e1c,0x0000,0x7c71,
-0x97ca,0x0000,0x0000,0x0000,0x9ea3,0x0000,0x9c7b,0x9f97,
-0x0000,0x0000,0x9750,0x0000,0x0000,0x0000,0x5727,0x5c13,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5fc8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x6765,0x0000,0x0000,0x52bd,
-0x0000,0x5b66,0x0000,0x65f9,0x6788,0x6ce6,0x6ccb,0x0000,
-0x4fbd,0x5f8d,0x0000,0x6018,0x6048,0x0000,0x6b29,0x70a6,
-0x0000,0x7706,0x0000,0x0000,0x0000,0x5a10,0x5cfc,0x5cfe,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x70c9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9579,0x0000,
-0x96ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x7b29,0x8128,0x0000,0x8a2e,0x0000,0x0000,0x0000,0x9ad9,
-0x0000,0x582b,0x5845,0x0000,0x63fa,0x0000,0x0000,0x0000,
-0x6e86,0x0000,0x0000,0x0000,0x0000,0x0000,0x5867,0x0000,
-0x5bdd,0x656e,0x0000,0x0000,0x0000,0x8c87,0x0000,0x50d2,
-0x50df,0x0000,0x0000,0x0000,0x0000,0x69ba,0x0000,0x6b9d,
-0x0000,0x8059,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6f8a,0x0000,
-0x0000,0x7bc3,0x7bc2,0x0000,0x0000,0x0000,0x0000,0x90f6,
-0x0000,0x9823,0x0000,0x0000,0x0000,0x0000,0x0000,0x71cd,
-0x7499,0x0000,0x0000,0x0000,0x0000,0x0000,0x9842,0x0000,
-0x0000,0x0000,0x0000,0x7f84,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x8d0e,0x0000,0x9861,0x0000,0x0000,0x8b73,0x0000,
-0x9c27,0x0000,0x9458,0x77d6,0x9b2d,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x4f66,0x4f68,0x4fe7,0x503f,0x0000,0x50a6,0x510f,
-0x523e,0x5324,0x5365,0x539b,0x517f,0x54cb,0x5573,0x5571,
-0x556b,0x55f4,0x5622,0x5620,0x5692,0x56ba,0x5691,0x56b0,
-0x5759,0x578a,0x580f,0x5812,0x5813,0x5847,0x589b,0x5900,
-0x594d,0x5ad1,0x5ad3,0x5b67,0x5c57,0x5c77,0x5cd5,0x5d75,
-0x5d8e,0x5da5,0x5db6,0x5dbf,0x5e65,0x5ecd,0x5eed,0x5f94,
-0x5f9a,0x5fba,0x6125,0x6150,0x62a3,0x6360,0x6364,0x63b6,
-0x6403,0x64b6,0x651a,0x7a25,0x5c21,0x66e2,0x6702,0x67a4,
-0x67ac,0x6810,0x6806,0x685e,0x685a,0x692c,0x6929,0x6a2d,
-0x6a77,0x6a7a,0x6aca,0x6ae6,0x6af5,0x6b0d,0x6b0e,0x6bdc,
-0x6bdd,0x6bf6,0x6c1e,0x6c63,0x6da5,0x6e0f,0x6e8a,0x6e84,
-0x6e8b,0x6e7c,0x6f4c,0x6f48,0x6f49,0x6f9d,0x6f99,0x6ff8,
-0x702e,0x702d,0x705c,0x79cc,0x70bf,0x70ea,0x70e5,0x7111,
-0x7112,0x713f,0x7139,0x713b,0x713d,0x7177,0x7175,0x7176,
-0x7171,0x7196,0x7193,0x71b4,0x71dd,0x71de,0x720e,0x5911,
-0x7218,0x7347,0x7348,0x73ef,0x7412,0x743b,0x74a4,0x748d,
-0x74b4,0x7673,0x7677,0x76bc,0x7819,0x781b,0x783d,0x7853,
-0x7854,0x7858,0x78b7,0x78d8,0x78ee,0x7922,0x794d,0x7986,
-0x7999,0x79a3,0x79bc,0x7aa7,0x7b37,0x7b59,0x7bd0,0x7c2f,
-0x7c32,0x7c42,0x7c4e,0x7c68,0x7ca9,0x7ced,0x7dd0,0x7e07,
-0x7dd3,0x7e64,0x7f40,0x0000,0x8041,0x8063,0x80bb,0x6711,
-0x6725,0x8248,0x8310,0x8362,0x8312,0x8421,0x841e,0x84e2,
-0x84de,0x84e1,0x8573,0x85d4,0x85f5,0x8637,0x8645,0x8672,
-0x874a,0x87a9,0x87a5,0x87f5,0x8834,0x8850,0x8887,0x8954,
-0x8984,0x8b03,0x8c52,0x8cd8,0x8d0c,0x8d18,0x8db0,0x8ebc,
-0x8ed5,0x8faa,0x909c,0x0000,0x915c,0x922b,0x9221,0x9273,
-0x92f4,0x92f5,0x933f,0x9342,0x9386,0x93be,0x93bc,0x93bd,
-0x93f1,0x93f2,0x93ef,0x9422,0x9423,0x9424,0x9467,0x9466,
-0x9597,0x95ce,0x95e7,0x973b,0x974d,0x98e4,0x9942,0x9b1d,
-0x9b98,0x0000,0x9d49,0x6449,0x5e71,0x5e85,0x61d3,0x990e,
-0x8002,0x781e,0x0000,0x0000,0x5528,0x5572,0x55ba,0x55f0,
-0x55ee,0x56b8,0x56b9,0x56c4,0x8053,0x92b0};
-
-static const int cns11643_14_ucs_table_size = (sizeof(cns11643_14_ucs_table)/sizeof(unsigned short));
-
-/* UCS -> CNS11643 */
-static const unsigned int ucs_a1_cns11643_table[] = {
-/* 0x0000 */
-0x00000,0x00001,0x00002,0x00003,0x00004,0x00005,0x00006,0x00007,
-0x00008,0x00009,0x0000a,0x0000b,0x0000c,0x0000d,0x0000e,0x0000f,
-0x00010,0x00011,0x00012,0x00013,0x00014,0x00015,0x00016,0x00017,
-0x00018,0x00019,0x0001a,0x0001b,0x0001c,0x0001d,0x0001e,0x0001f,
-0x00020,0x00021,0x00022,0x00023,0x00024,0x00025,0x00026,0x00027,
-0x00028,0x00029,0x0002a,0x0002b,0x0002c,0x0002d,0x0002e,0x0002f,
-0x00030,0x00031,0x00032,0x00033,0x00034,0x00035,0x00036,0x00037,
-0x00038,0x00039,0x0003a,0x0003b,0x0003c,0x0003d,0x0003e,0x0003f,
-0x00040,0x00041,0x00042,0x00043,0x00044,0x00045,0x00046,0x00047,
-0x00048,0x00049,0x0004a,0x0004b,0x0004c,0x0004d,0x0004e,0x0004f,
-0x00050,0x00051,0x00052,0x00053,0x00054,0x00055,0x00056,0x00057,
-0x00058,0x00059,0x0005a,0x0005b,0x0005c,0x0005d,0x0005e,0x0005f,
-0x00060,0x00061,0x00062,0x00063,0x00064,0x00065,0x00066,0x00067,
-0x00068,0x00069,0x0006a,0x0006b,0x0006c,0x0006d,0x0006e,0x0006f,
-0x00070,0x00071,0x00072,0x00073,0x00074,0x00075,0x00076,0x00077,
-0x00078,0x00079,0x0007a,0x0007b,0x0007c,0x0007d,0x0007e,0x0007f,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12170,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12278,0x12234,0x00000,0x00000,0x00000,0x00000,0x00000,0x12131,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12232,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12233,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x0100 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x0200 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1256f,
-0x00000,0x1256d,0x1256e,0x12570,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x1256c,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x0300 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x12475,0x12476,0x12477,0x12478,0x12479,0x1247a,0x1247b,
-0x1247c,0x1247d,0x1247e,0x12521,0x12522,0x12523,0x12524,0x12525,
-0x12526,0x12527,0x00000,0x12528,0x12529,0x1252a,0x1252b,0x1252c,
-0x1252d,0x1252e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x1252f,0x12530,0x12531,0x12532,0x12533,0x12534,0x12535,
-0x12536,0x12537,0x12538,0x12539,0x1253a,0x1253b,0x1253c,0x1253d,
-0x1253e,0x1253f,0x00000,0x12540,0x12541,0x12542,0x12543,0x12544,
-0x12545,0x12546};
-
-static const int ucs_a1_cns11643_table_min = 0x0000;
-static const int ucs_a1_cns11643_table_max = 0x0000 + (sizeof (ucs_a1_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_a2_cns11643_table[] = {
-/* 0x2000 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x12139,0x12137,0x00000,0x1225d,0x00000,
-0x12164,0x12165,0x00000,0x00000,0x12166,0x12167,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x1212d,0x1212c,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x1216a,0x00000,0x00000,0x1216b,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x1216f,0x00000,0x00000,0x12223,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2100 */
-0x00000,0x00000,0x00000,0x1226a,0x00000,0x12222,0x00000,0x00000,
-0x00000,0x1226b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1242b,0x1242c,0x1242d,0x1242e,0x1242f,0x12430,0x12431,0x12432,
-0x12433,0x12434,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12635,0x12636,0x12637,0x12638,0x12639,0x1263a,0x1263b,0x1263c,
-0x1263d,0x1263e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12258,0x12255,0x12257,0x12256,0x00000,0x00000,0x12259,0x1225a,
-0x1225c,0x1225b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2200 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12261,0x00000,0x00000,
-0x00000,0x00000,0x12235,0x00000,0x00000,0x00000,0x1223c,0x12249,
-0x12248,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x12245,0x12246,0x1224d,0x00000,0x00000,0x1224e,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12250,0x1224f,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12244,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x1223d,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1223b,0x1223e,0x00000,0x00000,0x00000,0x00000,0x12239,0x1223a,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12247,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1224a,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2300 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x14221,0x14222,0x14223,0x14224,0x14225,0x14226,0x14227,0x14228,
-0x14229,0x1422a,0x1422b,0x1422c,0x1422d,0x1422e,0x1422f,0x14230,
-0x14231,0x14232,0x14233,0x14234,0x14235,0x14236,0x14237,0x14238,
-0x14239,0x1423a,0x1423b,0x1423c,0x1423d,0x1423e,0x1423f,0x14240,
-0x00000,0x14241,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12621,0x12622,0x12623,0x12624,0x12625,0x12626,0x12627,0x12628,
-0x12629,0x1262a,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x1262b,0x1262c,0x1262d,0x1262e,
-0x1262f,0x12630,0x12631,0x12632,0x12633,0x12634,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12339,0x00000,0x1233a,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x1233c,0x00000,0x00000,0x00000,
-0x1233d,0x00000,0x00000,0x00000,0x1233e,0x00000,0x00000,0x00000,
-0x1233f,0x00000,0x00000,0x00000,0x12337,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12336,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12335,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12334,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12333,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12344,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12345,0x00000,
-0x00000,0x12347,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x12346,0x00000,0x00000,0x12340,0x12341,0x12343,
-0x12342,0x1234c,0x1234d,0x1234e,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x12324,0x12325,0x12326,0x12327,0x12328,0x12329,0x1232a,
-0x1232b,0x12332,0x12331,0x12330,0x1232f,0x1232e,0x1232d,0x1232c,
-0x00000,0x00000,0x00000,0x00000,0x12338,0x1233b,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1217c,0x1217b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x12175,0x12174,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x1217e,0x1217d,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1217a,0x12179,
-0x00000,0x00000,0x00000,0x12172,0x00000,0x00000,0x12176,0x12173,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x12348,0x12349,0x1234b,0x1234a,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2600 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12178,0x12177,0x00000,
-0x00000,0x12254,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12251,0x12253,0x12252};
-
-static const int ucs_a2_cns11643_table_min = 0x2000;
-static const int ucs_a2_cns11643_table_max = 0x2000 + (sizeof (ucs_a1_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_a3_cns11643_table[] = {
-/* 0x2f00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12121,0x12123,0x12124,0x12171,0x00000,0x00000,0x00000,0x00000,
-0x12152,0x12153,0x1214e,0x1214f,0x12156,0x12157,0x1215a,0x1215b,
-0x1214a,0x1214b,0x12265,0x00000,0x12146,0x12147,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12168,0x12169,0x00000,
-0x00000,0x12435,0x12436,0x12437,0x12438,0x12439,0x1243a,0x1243b,
-0x1243c,0x1243d,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x12126,0x00000,0x00000,0x00000,0x00000,
-/* 0x3100 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12547,0x12548,0x12549,
-0x1254a,0x1254b,0x1254c,0x1254d,0x1254e,0x1254f,0x12550,0x12551,
-0x12552,0x12553,0x12554,0x12555,0x12556,0x12557,0x12558,0x12559,
-0x1255a,0x1255b,0x1255c,0x1255d,0x1255e,0x1255f,0x12560,0x12561,
-0x12562,0x12563,0x12564,0x12565,0x12566,0x12567,0x12568,0x12569,
-0x1256a,0x1256b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x3200 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x12221,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x3300 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12275,0x12276,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12270,0x12271,0x12272,0x00000,
-0x00000,0x12274,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12277,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12273,0x00000,
-0x00000,0x1224c,0x1224b,0x00000,0x00000,0x1226f};
-
-static const int ucs_a3_cns11643_table_min = 0x2f00;
-static const int ucs_a3_cns11643_table_max = 0x2f00 + (sizeof (ucs_a3_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_i_cns11643_table[] = {
-/* 0x4d00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x14421,0x14423,0x00000,0x14424,0xe2126,0xe2125,0x00000,0x22126,
-0x14437,0x14435,0x14438,0x14436,0x22127,0x14462,0x2212f,0x2212d,
-0x14461,0x14460,0x00000,0x00000,0x14562,0x14561,0x14560,0x00000,
-0x14563,0x1455f,0x00000,0x00000,0x00000,0x00000,0x14722,0x14723,
-0xe2262,0xe2261,0xe2263,0x00000,0xe243f,0x00000,0x14b64,0x00000,
-0xe2121,0x00000,0xe212c,0x14439,0x00000,0x14463,0x22130,0x00000,
-0x14464,0x22143,0x1486b,0x22531,0x00000,0x00000,0xe2122,0x00000,
-0x1443a,0x14465,0x00000,0x14564,0x22144,0xe2740,0x00000,0xe2123,
-0x00000,0x00000,0x22121,0x14425,0x00000,0x1443c,0xe2130,0x22128,
-0x1443d,0xe212e,0x00000,0x14466,0x00000,0x14565,0x14567,0x14566,
-0x00000,0x00000,0x14724,0x14725,0xe2345,0x00000,0x14b65,0xe2b22,
-0x1537d,0x14422,0x00000,0x00000,0x22122,0x14426,0x1443f,0x1443e,
-0x00000,0x00000,0xe2146,0xe2145,0x00000,0x00000,0x00000,0x00000,
-0xe2264,0x14726,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe2440,0x00000,0x14b66,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe2b23,0x00000,0x00000,0x00000,0x00000,0x15871,0x2334e,
-0xe396c,0xe396e,0x1632a,0x24156,0x24157,0xe2124,0x14427,0xe212d,
-0x14468,0xe2265,0x00000,0x14b67,0x14428,0x22129,0x14440,0xe2131,
-0x00000,0x14469,0x1446b,0x22131,0x1446c,0x1446a,0x00000,0xe216c,
-0xe2266,0x14727,0x00000,0x14b68,0xe2442,0xe2742,0x14b69,0x14f67,
-0x00000,0x14441,0x1446d,0xe2147,0x14728,0x1472a,0x14729,0x00000,
-0x1486c,0x00000,0x00000,0x14b6a,0x14b6b,0x14f68,0x14f69,0xe2b26,
-0xe2b25,0xe2b27,0xe2b24,0x1537e,0x00000,0x00000,0x24158,0xe4033,
-0x00000,0x26d44,0x14429,0x00000,0xe2132,0x00000,0xe2133,0x00000,
-0x1446f,0x1446e,0x22132,0x14470,0x14476,0xe2149,0x14471,0x14472,
-0x22134,0x22133,0x14474,0x14475,0xe214c,0x14473,0xe214b,0xe214a,
-0x00000,0x00000,0x00000,0x00000,0x1456a,0x1456b,0x1456c,0x1456d,
-0x14569,0x14570,0x2214a,0x00000,0x22146,0x22149,0x14571,0x14623,
-0xe216d,0x22148,0x00000,0x1456e,0x1456f,0x14568,0xe2172,0xe2170,
-0x22145,0x22147,0x00000,0x00000,0x00000,0x00000,0xe226f,0xe2268,
-0x14737,0x2216f,0x14734,0x14738,0x22179,0x2216d,0x14735,0x22171,
-0xe226b,0xe2267,0xe2276,0x14736,0xe226e,0x14739,0x00000,0x1472b,
-0x22170,0x1473a,0x22174,0xe226d,0x22178,0x22175,0xe226c,0xe2274,
-0x22172,0x1472c,0x1472e,0x1473b,0x00000,0x14730,0x2216a,0x14733,
-0x14731,0x14732,0x2217a,0x22177,0x2216e,0x1472f,0xe2270,0xe2277,
-0x2216b,0x1472d,0xe2275,0x00000,0xe2273,0x22173,0x00000,0x00000,
-0x00000,0x00000,0x22176,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe2272,0x00000,0x00000,0x00000,0x2216c,0x22328,0x00000,0x14924,
-0x14875,0xe2450,0xe2448,0x22329,0x14872,0xe244f,0x14926,0xe2446,
-0x1487a,0xe2445,0x14879,0x2227b,0x1487d,0x14878,0x22322,0x2232a,
-0xe244e,0x22326,0xe2449,0x1487b,0xe244b,0xe2443,0x1487e,0x1486f,
-0x14929,0x2227d,0xe2444,0xe244c,0x2253d,0x1486d,0x14925,0x1486e,
-0x14876,0x14877,0x22324,0x2227e,0x1487c,0x14874,0x2227a,0x14870,
-0x22327,0x14927,0x1492a,0x14873,0x14922,0x14928,0x14871,0x22325,
-0x14923,0x2232b,0x2227c,0x14921,0x22321,0x00000,0xe6448,0x22323,
-0xe6449,0x14b79,0x2253f,0x2254b,0x14b71,0xe2747,0x2254c,0x14b6c,
-0x14b76,0x00000,0xe274f,0x14b6f,0x22539,0x14b77,0x22538,0x2253c,
-0x22543,0x22541,0x14c21,0x14b7a,0x22533,0x22535,0x14b7c,0x14b70,
-0x22536,0x22542,0x22549,0x14b75,0x2253b,0x22534,0x14b74,0x22537,
-0x14b78,0x2253a,0xe2744,0x14b73,0xe2751,0x14b6e,0xe2748,0x14b7d,
-0x22544,0x14b7e,0x22548,0xe2743,0x22546,0x2254a,0x14b7b,0x2253e,
-0x22532,0x00000,0x22540,0x14b72,0x22545,0x14b6d,0x22547,0xe274c,
-0xe2749,0xe274b,0xe274a,0xe274d,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14f78,0x14f6c,
-0xe2b2d,0xe2b2e,0x22922,0x2292a,0xe2b36,0x14f6b,0x14f73,0x15021,
-0xe2b2c,0x22930,0x2292e,0x22929,0x00000,0xe6263,0xe2b2b,0x14f6d,
-0x2292f,0x22925,0x14f7b,0x14f72,0x14f7a,0x2287e,0xe2b32,0x2292c,
-0xe2b2f,0x22923,0x14f76,0x22924,0xe2b33,0x2287d,0x14f7d,0x14f70,
-0x14f79,0x14f6f,0xe2b28,0x22921,0x22926,0xe2b29,0x2292d,0x14f77,
-0x14f74,0x22928,0x14f7c,0x2292b,0x22927,0x14f71,0x14f7e,0x14f75,
-0x14f6e,0x14f6a,0x00000,0xe2b35,0x00000,0xe2b34,0x00000,0xe644a,
-0x00000,0x00000,0x00000,0x00000,0x22931,0x00000,0x1543a,0x15424,
-0xe2f48,0x15434,0xe2f4d,0x15439,0x22d71,0x22d70,0x22d75,0x22d76,
-0x15427,0xe2f44,0x15430,0xe2f58,0xe2f4c,0xe2f56,0x1543d,0xe2f46,
-0x15431,0x00000,0xe2f4b,0xe2f49,0xe2f47,0x22d6a,0x1542a,0x22d6b,
-0xe2f4f,0x1543f,0x00000,0x15436,0x15421,0x15422,0x22d7e,0x15924,
-0xe2f53,0x1542f,0x1542e,0x22d6c,0x15432,0x2335e,0x15429,0x22d77,
-0x15438,0x15437,0x1542d,0x22d6f,0x22d78,0xe2f45,0x22d69,0x1542c,
-0x22d79,0x15435,0x22d6d,0x15423,0xe2f4e,0x15426,0x15425,0x22d7a,
-0x15433,0x15428,0x1543c,0x1543e,0x22d74,0x1543b,0xe2f51,0x22d7c,
-0x22d6e,0x22d7d,0xe2f43,0x22d72,0x00000,0x22d7b,0xe2f50,0x22d73,
-0xe2f54,0xe2f55,0x00000,0x00000,0x1542b,0x00000,0x00000,0xe644b,
-0x23366,0x2335a,0xe343c,0x15876,0xe343f,0x2335f,0x23365,0x15875,
-0x23358,0x15879,0x2335c,0x23355,0x15877,0x23359,0x1587c,0x15923,
-0xe3444,0x2336a,0xe3441,0x23354,0xe3442,0x1587d,0xe2f57,0x23369,
-0xe3447,0xe343d,0x15878,0x2335b,0x15874,0x23356,0x23352,0x23360,
-0x23353,0x23351,0x2335d,0x23363,0x23364,0x1587a,0xe3440,0x00000,
-0x23a3f,0x23361,0x23350,0x23362,0xe344b,0x15926,0x23367,0x15925,
-0x2334f,0xe3443,0x23357,0x23368,0x15921,0x1587e,0x1587b,0x15922,
-0xe344c,0xe344a,0x15872,0xe3445,0xe3446,0x15873,0x00000,0x00000,
-0x15e2e,0xe3975,0x23a42,0x23a3b,0x00000,0x15e2b,0x00000,0x23a43,
-0xe3971,0xe3972,0x00000,0x23a39,0x23a3c,0x15e2a,0x23a3d,0xe396f,
-0x00000,0x15e2d,0x23a41,0x00000,0x23a37,0x23a36,0x15e2f,0xe3970,
-0x15e30,0x15e2c,0x15e31,0x23a35,0x23a40,0x23a3e,0x23a38,0x00000,
-0x00000,0x00000,0x15e29,0x23a3a,0x00000,0x00000,0xe644d,0x00000,
-0x00000,0x00000,0xe4039,0xe403c,0x16331,0x1632b,0x2415c,0x16334,
-0x24162,0x24165,0x1632d,0x1632e,0x2415f,0x1632c,0x24168,0x16332,
-0x24169,0xe403a,0x24164,0x16333,0xe4037,0x24159,0x16330,0x2415a,
-0x00000,0x24163,0x24161,0xe403d,0x2415d,0x1632f,0x2415b,0x16335,
-0x24160,0x24167,0x2415e,0x24166,0xe4036,0xe403e,0x1677c,0x16779,
-0xe456b,0x1677a,0xe634c,0x24921,0x24877,0x16778,0x16775,0x24878,
-0xe456e,0xe456c,0x16777,0x2487b,0xe456d,0x2487d,0xe4576,0xe634d,
-0x24926,0xe4570,0xe4575,0x24925,0x2487e,0x16774,0x24876,0x16772,
-0x24879,0x1677d,0x2487c,0xe4571,0x24922,0x16776,0x16773,0x24924,
-0x24923,0x1677b,0x00000,0x2487a,0xe4574,0x16c23,0x24f54,0xe4b29,
-0x24f51,0x16c24,0x00000,0x16c22,0xe4b2b,0x24f58,0x24f55,0x24f4e,
-0x16c21,0xe4b2d,0x16c25,0x24f4f,0x16b7e,0x16c28,0x24f52,0x24f53,
-0x16c26,0x16c27,0x24f59,0x24f56,0x24f57,0xe4b2c,0xe4b27,0xe644e,
-0x17033,0x25643,0x17030,0x25640,0x17032,0x17034,0xe5031,0x25641,
-0x17031,0x00000,0x25642,0xe5035,0x2563f,0xe5030,0xe5034,0x17341,
-0x25c49,0x17342,0x25c47,0x00000,0x25c48,0x25c46,0x25c45,0xe5441,
-0xe5440,0x25c4a,0x17340,0xe5033,0x00000,0x26144,0x26145,0xe5752,
-0x24f50,0x26143,0x17343,0x1782b,0x26537,0x26538,0xe5c32,0x17a62,
-0x17a63,0x26b4f,0x26b4e,0x17b58,0x17b57,0x26e7d,0xe606f,0x1442a,
-0x14442,0x14478,0x00000,0x14477,0x14573,0x14572,0x1473e,0x1473d,
-0x1473f,0x1473c,0xe2278,0x1492c,0x1492b,0x1492d,0xe2454,0x00000,
-0xe2453,0xe2451,0x14c23,0x00000,0x14c22,0x14c24,0xe2752,0x15022,
-0x00000,0x12279,0x22e21,0x1227a,0x15927,0x1227c,0x1227b,0x23a44,
-0xe3976,0x1227d,0x1677e,0x1227e,0xe5e25,0x1442b,0xe2134,0x14479,
-0x14740,0x14c25,0xe2b37,0x1442c,0x1447c,0x1447a,0x1447b,0x00000,
-0x00000,0x14741,0xe227a,0x00000,0x00000,0x1492e,0x14c27,0x14c26,
-0x14c28,0xe2e7b,0x00000,0x00000,0x15440,0x00000,0xe403f,0xe6453,
-0x17035,0x00000,0xe2127,0x00000,0xe214d,0xe2148,0xe214e,0x2212e,
-0x00000,0x14574,0x14575,0xe2178,0xe2179,0x14742,0x00000,0x2232c,
-0xe2755,0x15024,0x15023,0x22e23,0x22e22,0x15928,0xe2128,0x1447d,
-0x22135,0xe217a,0x00000,0x00000,0x00000,0xe2457,0x2254d,0xe2b39,
-0x15025,0xe2f5b,0x15443,0xe2f59,0x15441,0x15442,0xe2f5a,0x00000,
-0xe344d,0x00000,0x17036,0x00000,0x14576,0x00000,0x00000,0x00000,
-0x14743,0x2217b,0xe227e,0xe227d,0xe227c,0xe2459,0x1492f,0x14930,
-0xe245a,0x2232d,0x00000,0x00000,0x2254e,0x14c29,0x2254f,0x00000,
-0x00000,0xe2b3b,0xe2b3d,0xe2b3e,0x22e25,0x22e26,0x15446,0xe2f5e,
-0x22e27,0xe2f5f,0x22e24,0x15447,0x15445,0x15444,0x22e28,0xe344f,
-0x2336b,0xe344e,0xe397d,0xe397a,0x23a45,0x00000,0xe397e,0x2416a,
-0x24927,0xe4b2f,0xe4b2e,0xe4b30,0x16c29,0x17037,0x25644,0xe5442,
-0x1442d,0x1443b,0xe212f,0xe2135,0xe2151,0xe217b,0x00000,0x00000,
-0xe2322,0x00000,0x00000,0x00000,0xe245b,0xe2759,0x00000,0x00000,
-0x15929,0x15e33,0x00000,0x16821,0xe457a,0x22123,0x1447e,0x00000,
-0x14579,0x14577,0x14578,0x00000,0x00000,0x14c2a,0xe275a,0x00000,
-0x1442e,0x1442f,0x00000,0x14443,0xe2136,0xe2152,0x14521,0x14522,
-0x14523,0x2214c,0x1457a,0xe217d,0x2214b,0x00000,0x14747,0xe2325,
-0x2217d,0x14745,0x14746,0x2217c,0xe2324,0xe2326,0x14748,0x14744,
-0xe2327,0x00000,0x00000,0x00000,0x2232e,0x14f4f,0x2232f,0xe245f,
-0xe2461,0x22330,0x00000,0xe245c,0x14932,0x14931,0xe245e,0xe245d,
-0x14935,0x14933,0x14934,0xe2460,0x00000,0x00000,0x14c30,0xe275b,
-0x14c2f,0x22554,0x22551,0x22552,0xe275e,0x22550,0x14c31,0x14c2d,
-0x14c2c,0xe275f,0x14c2e,0x14c2b,0xe275d,0x00000,0xe644f,0x00000,
-0x00000,0x14c32,0x00000,0x15027,0x22932,0xe2b3f,0x22553,0x1502c,
-0xe2b40,0x22933,0x15028,0x1502b,0x1502a,0x15029,0x15026,0xe2b43,
-0x00000,0x00000,0x22e2b,0xe2f68,0x1544a,0x22e2e,0x15448,0xe2f65,
-0x00000,0xe2f62,0x22e2a,0x1544b,0x15449,0x1544c,0x22e2c,0x22e2d,
-0xe2f60,0x22e29,0x22e2f,0xe2f66,0xe2f61,0xe2f63,0x00000,0xe2f64,
-0xe3450,0x15e37,0x1592a,0x2336c,0x2336e,0x2336d,0x2336f,0x1592b,
-0xe3a23,0x00000,0x15e34,0xe3a21,0x15e35,0x15e36,0xe3451,0x16337,
-0x2416c,0xe4041,0x2416b,0x2416d,0x2416e,0x16338,0xe4040,0x16336,
-0x24928,0x24929,0x16823,0x16822,0x24c61,0x00000,0xe4b31,0x16c2a,
-0x16c2b,0x16c2c,0x16c2e,0x24f5a,0x24f5b,0x16c2d,0xe4b32,0x00000,
-0xe5036,0x17038,0x00000,0x17039,0xe5037,0x00000,0x26539,0x26b51,
-0x26b50,0x26e7e,0xe602c,0x14430,0xe2137,0xe2154,0xe2153,0x1457c,
-0x1457b,0x00000,0x00000,0x14749,0x00000,0x00000,0x2217e,0x00000,
-0xe2328,0x14937,0x14938,0x14936,0x14939,0x22331,0x22332,0x00000,
-0x00000,0x00000,0x00000,0xe2463,0xe2462,0xe2761,0x00000,0x00000,
-0x00000,0xe2760,0x00000,0x14c34,0x22555,0xe625a,0x14c33,0xe2762,
-0x22934,0x15030,0x22935,0x1502f,0xe2b48,0xe2b46,0x00000,0x1502d,
-0x00000,0x1502e,0xe2b47,0x00000,0xe2f6f,0x22e30,0xe2f6c,0xe2f6a,
-0xe2f6d,0xe2f6e,0x1592c,0x23371,0xe3452,0x1592f,0x23370,0x15b2b,
-0x1592e,0x1592d,0x00000,0x15e3a,0x00000,0x15e39,0x15e38,0x16339,
-0xe4045,0xe4044,0x1633c,0x1633d,0x1633b,0x00000,0x1633a,0xe4046,
-0x00000,0x2492a,0xe4621,0x2492b,0x00000,0xe457e,0xe4b33,0x24f5d,
-0x16c2f,0x24f5c,0xe4d2c,0x1703a,0x25c4b,0x17344,0x00000,0x2653a,
-0x17961,0x00000,0x14444,0x14524,0x22136,0xe2155,0x14525,0x14526,
-0xe2156,0x00000,0x00000,0xe2223,0xe2222,0x1457d,0x1457e,0xe2224,
-0x1474a,0x22333,0x22556,0x22557,0x00000,0x15031,0x22e31,0x15931,
-0x15930,0x23a47,0x23a46,0x00000,0xe5038,0x14431,0x14527,0x14621,
-0x00000,0x15932,0x22124,0x00000,0x2214d,0x14622,0xe2226,0x22222,
-0x1474c,0x1474b,0x22221,0x1493a,0xe6450,0xe2465,0x00000,0xe2b49,
-0x00000,0x00000,0x1544d,0x00000,0x00000,0x23372,0x00000,0x1633e,
-0x2492c,0x16824,0xe4623,0xe4b34,0x25645,0xe5444,0xe5c34,0x2686a,
-0xe2129,0x14528,0xe2157,0xe2466,0x22558,0x22936,0x15935,0x15933,
-0x15934,0x14432,0x00000,0x14445,0x1243f,0x1452b,0xe2159,0x1452a,
-0x14529,0x14625,0x14624,0xe232a,0x2214e,0x22223,0x00000,0xe232b,
-0xe232d,0x14c38,0x14c35,0x14c37,0x14c36,0xe2763,0x00000,0x15032,
-0xe2b4a,0x00000,0x15e3b,0x00000,0x14433,0xe215a,0x1452c,0xe2227,
-0x14627,0x14626,0x00000,0x22334,0x00000,0xe6451,0x14c39,0xe2a5c,
-0x00000,0xe212a,0x00000,0x00000,0x22137,0xe2228,0x14629,0x14628,
-0x1474d,0x1474e,0x22335,0x1493b,0xe2467,0x1493c,0xe2765,0x14c3a,
-0x14c3b,0x14c3c,0xe2766,0x15033,0x22937,0xe2b4b,0x00000,0x1544e,
-0xe4047,0x00000,0x22125,0x00000,0x1452d,0x00000,0xe215b,0x00000,
-0x00000,0xe2229,0x22224,0xe232f,0x00000,0x00000,0x22336,0x22337,
-0x00000,0x00000,0x22559,0xe2767,0x2255a,0x00000,0x22939,0x22938,
-0x2293b,0x2293a,0x15034,0xe6452,0x23373,0x15450,0x22e32,0x1544f,
-0xe3454,0x00000,0x00000,0x00000,0x23a48,0x15e3c,0xe3a28,0x23a49,
-0xe3a27,0xe404a,0xe4049,0xe4048,0x2492d,0x16825,0xe4625,0x00000,
-0xe4626,0xe4b35,0x16c30,0xe5445,0x2653b,0x00000,0xe212b,0xe215c,
-0x00000,0x22138,0xe222a,0x1462a,0x00000,0x00000,0xe2331,0x00000,
-0x00000,0xe2769,0xe276a,0x15936,0xe3455,0xe3a29,0x00000,0x00000,
-0x14434,0x14446,0x1452f,0x1452e,0xe215e,0x14530,0xe2160,0x00000,
-0xe222b,0x00000,0xe2333,0x00000,0x14c3e,0xe276b,0x14c3d,0x14c3f,
-0x00000,0xe2b50,0xe2b4f,0x15035,0xe2b4e,0xe2b4d,0x00000,0x15451,
-0xe404b,0x25646,0x1763b,0x14447,0x1462c,0x1463b,0x14636,0x00000,
-0x14631,0x14630,0x14637,0x14635,0x1462e,0x1463c,0x1462f,0x1462b,
-0x1463a,0x14639,0x14638,0x1462d,0xe2231,0x14634,0xe222d,0xe222e,
-0x14633,0xe222f,0x00000,0x1463d,0x14632,0x00000,0x00000,0xe2335,
-0xe2337,0x14754,0x00000,0x1475a,0x14756,0xe2339,0x1475c,0x22225,
-0x14759,0x1474f,0x14752,0x14755,0x14751,0x14758,0x1475b,0x14750,
-0x14753,0x14757,0x1475d,0xe233a,0x00000,0xe233b,0xe2334,0x00000,
-0x22340,0x2233d,0xe2476,0x14949,0x2233e,0x1493d,0x1493f,0x14957,
-0x14952,0xe2479,0xe247e,0xe2475,0x22345,0x2233f,0x14941,0x14943,
-0x22344,0x1494a,0x2233a,0x14956,0x14958,0x1493e,0x1494f,0xe2524,
-0x22338,0x14955,0xe2477,0x14946,0xe247b,0x14950,0x14951,0x22339,
-0x1494e,0x1494c,0xe2470,0x1494d,0x14953,0x22341,0x14940,0xe2521,
-0x14954,0x22343,0x14948,0x14945,0xe2473,0x2233c,0x14944,0x22346,
-0x14947,0xe247c,0x1494b,0xe2478,0xe2474,0xe246d,0x14942,0x22342,
-0xe247d,0xe2522,0x00000,0x00000,0x2233b,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe2523,0x00000,0x00000,0x00000,0x00000,0xe276e,
-0x2256b,0x2256a,0x14c51,0x2256d,0x2256f,0x22564,0x22567,0x2256e,
-0x14c52,0xe2774,0xe2778,0x22561,0x22565,0xe2775,0x00000,0x22569,
-0x2294a,0x14c4d,0x2294e,0x14c40,0x22566,0x14c41,0x14c4e,0x14c47,
-0x14c43,0xe2771,0x22562,0x14c46,0x14c4b,0x14c54,0x22563,0x2255c,
-0x14c45,0x2255d,0x2255f,0x00000,0x14c48,0xe276c,0x14c4a,0x2255b,
-0x22560,0xe2770,0xe2779,0x14c53,0x14c4f,0x22568,0x14c55,0xe2773,
-0x14c4c,0x2255e,0x14c49,0xe276f,0xe2777,0x14c44,0x14c42,0x00000,
-0x2256c,0x00000,0x14c50,0x00000,0x00000,0x00000,0xe2b5c,0xe2b5d,
-0x22949,0x2293d,0x2294c,0xe2b57,0xe2b59,0x2293f,0x1503c,0x1504a,
-0x15038,0x15049,0x15041,0x15046,0x15036,0x2293e,0x22944,0x15045,
-0x22950,0x15047,0xe2b5b,0x1503d,0xe2b54,0xe2b5e,0x22946,0x22943,
-0x1503b,0xe2b51,0x2293c,0x15048,0x2294b,0x15040,0x2294d,0x1504b,
-0x15037,0x15042,0x1503f,0x22941,0x15043,0x22947,0x22948,0x1503e,
-0x15044,0x1503a,0xe2b55,0xe6454,0xe2b63,0xe2b61,0x15039,0x22940,
-0xe2b53,0x00000,0x00000,0x00000,0x00000,0x00000,0x22945,0x00000,
-0x00000,0x00000,0xe2b58,0x00000,0x00000,0x00000,0x2294f,0x00000,
-0x22e46,0x1545e,0x22e34,0x00000,0x22e39,0x15457,0x15462,0x22e37,
-0x15452,0x1545c,0x15461,0x22e3e,0x00000,0x1545d,0x15460,0xe2f77,
-0xe3021,0x22e41,0x15458,0x22e38,0xe2f74,0xe2f78,0xe3022,0x22e44,
-0x22e45,0xe2f79,0x1545a,0x22e43,0x15456,0x15465,0x00000,0x22e3b,
-0xe2f7b,0x15454,0xe2f7a,0x22e48,0x22e3c,0x22e40,0x15459,0x15464,
-0x22e3d,0x1545f,0x22e42,0x22e49,0x23424,0xe2f73,0x22e47,0x15466,
-0x15453,0x22e3f,0x22e36,0xe2f76,0x1545b,0x00000,0x00000,0x22e35,
-0xe2f7e,0xe3025,0x22e3a,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x22e33,0x15463,
-0xe6721,0xe345f,0x2337a,0xe3468,0x15949,0x2342a,0x15947,0x15944,
-0x23421,0x15940,0x23425,0x1594b,0x23379,0x2337e,0x2337d,0x15455,
-0x15946,0x23428,0xe3466,0x2342b,0x23376,0x00000,0x15e4e,0xe3467,
-0x2342c,0x1594c,0x00000,0x1593e,0x1593b,0x23423,0x15938,0x00000,
-0x23429,0xe345b,0x1593f,0x2342d,0xe3458,0x23377,0x23427,0x15942,
-0x23378,0x2337b,0x23422,0xe3462,0xe3461,0x15943,0x15941,0x1594d,
-0xe3457,0xe3a36,0xe3464,0x00000,0x15948,0xe345e,0x1593c,0x15a76,
-0x00000,0x1593d,0x2337c,0x1594a,0x15945,0x23426,0x1593a,0x00000,
-0xe3459,0x00000,0x15939,0xe6457,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe6456,0xe6722,0xe6455,0x00000,0x23374,0x23375,0x23a4e,
-0x00000,0x00000,0xe3a3c,0x15e3d,0x15e40,0x23a59,0x15e54,0x23a5c,
-0x15e3e,0x23a55,0x15e44,0x15e4a,0x16143,0xe3a31,0xe3a38,0x15e48,
-0x23a52,0x15e55,0x15e41,0x15e49,0x23a5a,0x2417c,0x23a5f,0x23a53,
-0x00000,0x23a4a,0x23a57,0x23a51,0x15e47,0x23a5d,0xe3a2e,0xe3a2a,
-0x15e43,0x15e57,0x15e50,0xe3a33,0x15e45,0x15e42,0xe3a40,0x15e4d,
-0xe3a34,0x23a5e,0x23a50,0x23a56,0x23a58,0x23a4c,0x23a5b,0x15e3f,
-0x23a4b,0xe3a42,0x15e46,0x15e56,0x15e52,0x23a4d,0x15e4c,0xe3a3b,
-0x00000,0x15e53,0x15e4f,0x15e4b,0xe3a2f,0x23a54,0x00000,0x00000,
-0x00000,0x00000,0xe6723,0x15e51,0x00000,0x00000,0x00000,0x2417a,
-0x24176,0xe4051,0x24227,0x2416f,0x24178,0x1634c,0x1634d,0x16345,
-0x24223,0x1634f,0x24174,0x24173,0x24171,0x24225,0x16343,0x2417d,
-0x24172,0x16346,0x2417b,0x16341,0x24177,0x2417e,0x24222,0xe404e,
-0x00000,0x24226,0x1634a,0x24170,0x16344,0x24175,0xe3a2b,0x1633f,
-0x00000,0x1634b,0x24221,0x16347,0x16348,0x1634e,0x16342,0x12321,
-0x16340,0x24179,0xe404c,0x00000,0x00000,0x00000,0xe6725,0x16349,
-0xe6724,0x00000,0x24224,0x00000,0xe6458,0x00000,0x16835,0x16830,
-0xe462e,0x2493c,0x24938,0xe4628,0x24932,0x1682a,0x16826,0x2493b,
-0x16827,0x24935,0x24937,0xe4629,0x2493a,0xe4636,0x1682c,0xe462c,
-0x16833,0x1682d,0x00000,0xe462a,0x24930,0x1682e,0x1682f,0x24933,
-0x16834,0xe4634,0x24931,0x24936,0x1682b,0x2492f,0x16831,0x16829,
-0xe4633,0x00000,0x00000,0x16828,0x24934,0x24939,0xe4631,0x16832,
-0xe645a,0x00000,0xe6459,0x00000,0x00000,0x00000,0xe4650,0x2492e,
-0xe4630,0x16c37,0x24f6e,0xe4b41,0x24f6b,0xe4b38,0x16c31,0x16c3d,
-0x16c3e,0xe4b3d,0x16c34,0x24f69,0x16c36,0x24f61,0x16c3c,0xe4b44,
-0x24f6d,0x16c33,0x24f6f,0x16c32,0x00000,0x24f6a,0x24f6c,0x16c35,
-0x24f68,0x24f62,0x24f5f,0x00000,0xe4b3e,0x23a4f,0x24f65,0xe4b37,
-0x24f5e,0x24f64,0x24f63,0xe4b3b,0x24f60,0xe4b43,0x16c39,0xe4b45,
-0xe4b40,0xe4635,0xe4b3c,0x16c38,0xe4b39,0x00000,0xe4b3f,0x16c3a,
-0x24f66,0x1703b,0x24f67,0x00000,0x00000,0x00000,0x2564f,0xe503f,
-0x25648,0xe5040,0x17047,0x2564c,0x1703f,0x17043,0x2564b,0xe503b,
-0x17042,0x1703e,0x17041,0x1703c,0x17046,0x2564d,0x25649,0x17045,
-0x25647,0x17044,0x2564e,0x2564a,0x16c3b,0x00000,0x17048,0x25650,
-0x17040,0x1703d,0x00000,0xe503d,0x00000,0xe5448,0x25c52,0x25c54,
-0x17346,0x25c55,0x25c53,0x25c51,0x25c50,0x17348,0x25c4f,0x17349,
-0x00000,0xe5449,0xe5447,0x00000,0x25c4d,0x25c4e,0x17345,0x1734a,
-0x17347,0xe645d,0xe645b,0x25c4c,0xe575b,0x1763c,0xe575a,0x26148,
-0x26146,0x2614b,0x26149,0xe5758,0x26147,0x2614a,0xe5759,0xe5757,
-0xe575c,0x00000,0x00000,0x00000,0x00000,0x1782c,0x2653e,0x2653f,
-0x1782d,0x00000,0x26540,0x2653c,0x26541,0x2653d,0x1763d,0xe5a2d,
-0xe645e,0x00000,0x2686b,0x2686d,0x17964,0x2686c,0x17963,0x17962,
-0xe6726,0xe6727,0xe645c,0xe5e26,0x17965,0x26b53,0x26b54,0x00000,
-0x17a65,0x17a64,0x17a66,0x26b52,0xe6728,0x26d46,0x26d45,0xe5f40,
-0x17b59,0x17b5b,0x17b5a,0x26d47,0x17c34,0x27034,0x00000,0x00000,
-0x00000,0x17c5d,0xe6071,0x27033,0x2707c,0x00000,0x00000,0x2212a,
-0xe2177,0x00000,0x1463f,0x1463e,0x00000,0x14760,0x1475f,0x22227,
-0x1475e,0x22226,0x00000,0xe233e,0x1495b,0x22349,0xe252c,0x22348,
-0x00000,0xe2526,0x14959,0x1495c,0xe252b,0xe252a,0x22347,0xe2529,
-0x1495a,0xe2548,0xe2527,0xe2528,0x00000,0x00000,0xe2822,0x22570,
-0xe277d,0x22571,0x14c56,0xe277c,0xe2821,0xe277b,0x00000,0x1504c,
-0xe2b65,0x22e4a,0x22e4b,0x15467,0x15468,0xe3027,0x00000,0x2342f,
-0x1594e,0x15950,0x2342e,0x1594f,0x23a60,0x15e58,0xe3a44,0xe3a43,
-0x00000,0x00000,0x16350,0x16351,0x24228,0xe4052,0x16837,0xe4637,
-0x16836,0x00000,0x24f70,0x25652,0x25651,0xe5f41,0x2715a,0x14448,
-0x22139,0xe2161,0x2214f,0x22150,0xe2234,0x00000,0x00000,0xe6249,
-0x14763,0x14767,0x22229,0x00000,0x14765,0x14764,0x22228,0x14766,
-0x14762,0xe2341,0xe2342,0x14761,0x2222a,0xe233f,0xe2340,0x00000,
-0x00000,0x00000,0x00000,0x14966,0xe2531,0xe253e,0x14963,0xe2530,
-0x1495f,0x2234a,0xe2540,0xe2536,0xe252f,0x2234b,0xe253c,0x14961,
-0xe252d,0x2234d,0x1495d,0x2234e,0x2234c,0x14960,0x14962,0x14965,
-0x14964,0x1495e,0x2234f,0xe2532,0xe2541,0xe2542,0xe2533,0xe2538,
-0xe2537,0xe645f,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2535,
-0x00000,0x14c5b,0x2257e,0xe2825,0x14c5d,0xe2823,0x14c5c,0xe2826,
-0x22621,0x14c5a,0x14c59,0x22575,0x00000,0x22574,0xe2828,0x22572,
-0x22577,0x22576,0x22573,0x2257c,0x2257d,0x2257a,0x22578,0x14c58,
-0xe2829,0x00000,0x00000,0x2257b,0x14c5e,0x22622,0x00000,0xe282a,
-0x22579,0xe2824,0x1504d,0x14c57,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe6460,0x1504e,0x22955,0xe2b69,0xe2b68,0x2295b,
-0xe2b6c,0xe2b67,0xe2b6a,0x15054,0x22959,0x2295f,0xe2b71,0x22956,
-0x2295a,0x2295c,0x2295e,0x22958,0xe2b70,0x22957,0x22952,0x22953,
-0x1504f,0xe2b6b,0x15051,0x15050,0x22954,0x2295d,0xe2b6d,0xe2b72,
-0xe2b6e,0x00000,0x00000,0x00000,0xe2b66,0x00000,0x15053,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x22951,0x22e55,0xe302a,
-0x22e54,0x22e59,0x22e50,0xe3030,0x22e53,0x22e52,0xe302f,0x22e56,
-0xe3038,0x22e5a,0x15469,0x1546c,0xe3034,0xe3035,0x22e51,0x22e57,
-0xe3033,0xe3028,0xe3037,0x1546b,0x22e4c,0xe302b,0x15052,0x2343d,
-0x22e58,0xe3036,0x22e4f,0x00000,0x1546a,0x22e4e,0x00000,0x00000,
-0x00000,0x00000,0x00000,0xe3032,0x23434,0xe346e,0xe3471,0x15951,
-0x15955,0x23444,0x23432,0x23440,0x15956,0x23442,0xe3472,0x23448,
-0xe3474,0x2344c,0xe3469,0x00000,0x23443,0x23437,0x2343f,0xe346b,
-0x2344d,0x2344b,0x23441,0x2343c,0x23435,0x23a68,0x23433,0x1595a,
-0x2343a,0x1595b,0x15957,0x23430,0x23446,0x23438,0xe346f,0xe3475,
-0x23436,0x23449,0x15958,0xe3476,0x2344f,0x15952,0x15954,0x2343e,
-0x23439,0x1546d,0x15953,0x2343b,0x2344a,0x2344e,0x23445,0xe6461,
-0x23447,0x00000,0xe6462,0xe6463,0x23431,0x00000,0x00000,0x00000,
-0xe3a4a,0x23a63,0xe3a45,0x23a6c,0x23a6b,0x15e60,0x23a64,0xe3a47,
-0x15e61,0x15e5f,0xe3a50,0x23a66,0x15e5c,0x23a6a,0xe3a4c,0x23a65,
-0x23a67,0x23a61,0x15e5a,0xe6336,0x23a74,0x23a73,0x23a70,0x15e59,
-0x15e5d,0x15e5e,0x22e4d,0x23a6d,0x15e5b,0x15959,0x23a6f,0x23a62,
-0x23a72,0x23a71,0xe3a4e,0x23a75,0xe3a49,0x24236,0xe3a4b,0x23a6e,
-0x00000,0x00000,0x00000,0x00000,0x00000,0xe6337,0x00000,0xe6464,
-0x23a69,0x2422e,0x1635b,0x1635e,0x16359,0x2422d,0x24231,0x2422c,
-0xe4057,0x16353,0x1635d,0x24229,0x16357,0x24230,0xe405b,0x16355,
-0x16354,0x24233,0x16356,0x24235,0xe4056,0x24232,0x16352,0xe405e,
-0xe405c,0xe4058,0x1635c,0x24237,0x2422b,0x24234,0xe405d,0xe6343,
-0x2422a,0xe405a,0xe4059,0x16358,0xe4054,0x1635a,0x00000,0x2422f,
-0x00000,0x24238,0xe4643,0xe463e,0x24944,0x16838,0x2494a,0xe4642,
-0xe463c,0x1683d,0x24946,0x2494d,0x2493e,0x1683f,0x16839,0x24943,
-0x16c3f,0x24942,0x2494b,0x1683a,0xe463d,0x1683e,0x24941,0x24947,
-0x2494c,0x2493d,0x1683c,0x24945,0xe463a,0xe4645,0x24949,0x2494f,
-0x2493f,0x24948,0xe4638,0x1683b,0x2494e,0xe4641,0xe4644,0xe4640,
-0x24940,0x00000,0x00000,0xe6465,0x16c43,0x24f72,0x16c41,0x16c40,
-0x24f74,0x24f79,0xe4b46,0x24f75,0xe4b50,0x24f78,0x16c46,0xe4b51,
-0x1702e,0x16c45,0xe4b4b,0x24f71,0x24f77,0xe463f,0x16c44,0x24f76,
-0xe4b4d,0x24f73,0xe4b49,0x16c42,0xe4b4f,0xe4b4c,0x00000,0xe4b47,
-0x00000,0x00000,0x25657,0xe504a,0x25659,0x25654,0x1704a,0x25656,
-0xe504b,0x17049,0x25658,0xe5048,0xe504c,0x1704c,0x2565a,0x1704b,
-0x25653,0x25655,0xe5049,0x00000,0x00000,0xe544b,0x1734e,0x25c58,
-0xe544c,0x1734d,0x25c59,0x1734c,0x25c57,0x1734b,0x25c56,0x00000,
-0x1763f,0x1763e,0x26542,0x26544,0xe5a2f,0x26543,0x1782e,0x1782f,
-0xe5a2e,0x00000,0x17830,0x2686e,0x17966,0x00000,0xe5e28,0x26f22,
-0x26f21,0x17c5e,0x00000,0x14449,0x14531,0x00000,0xe2343,0x14967,
-0xe2545,0xe2543,0xe2544,0xe282d,0x22960,0xe2b77,0x00000,0xe3477,
-0x00000,0x15e62,0x15e63,0xe3a52,0x24239,0x16840,0x24950,0x24f7a,
-0xe6466,0xe504d,0xe2139,0x2213a,0xe2235,0xe2344,0x22350,0x00000,
-0xe2b7a,0xe2b79,0xe213a,0xe2546,0x22623,0x22961,0x22e5b,0x1546e,
-0xe4646,0xe6560,0x26545,0x00000,0x17a67,0x1444a,0x14640,0x22151,
-0xe2236,0x14768,0x14769,0x00000,0x14c5f,0x00000,0x00000,0xe3479,
-0x1595c,0x00000,0x16842,0xe405f,0x16843,0x16841,0xe4b53,0x1444b,
-0x00000,0x14532,0x14534,0x14533,0x2213b,0x14535,0x14641,0x22152,
-0xe2238,0x14642,0xe2237,0x00000,0xe2239,0x00000,0xe2347,0x1476a,
-0x1476b,0x00000,0x00000,0x00000,0x2222b,0xe2549,0x14968,0x00000,
-0x22351,0x00000,0x00000,0x00000,0x14c63,0x22624,0x00000,0x14c61,
-0x14c62,0x14c60,0x22e5c,0xe282e,0xe282f,0xe6467,0x15058,0x15057,
-0x15059,0x15056,0xe2b7c,0x22962,0x14c64,0x15055,0x00000,0x1546f,
-0x15470,0x00000,0x15471,0xe347b,0x23450,0xe347c,0xe347d,0x00000,
-0x15e64,0x23a76,0x1595d,0xe3a53,0xe3a54,0x00000,0xe4060,0x1635f,
-0xe4061,0x16845,0x16844,0x24951,0xe4648,0x16c47,0x1704d,0x00000,
-0x2614c,0x26d48,0x26f23,0x1444c,0x14643,0xe223b,0x14644,0x22231,
-0x1476d,0x14770,0xe234b,0x2222f,0x2222d,0x1476f,0x22230,0x22232,
-0x2222c,0x14772,0x14771,0x1476e,0x1476c,0x2222e,0xe234d,0x00000,
-0x00000,0xe2555,0x14973,0x00000,0xe254c,0x14970,0x22356,0x22359,
-0x22358,0x00000,0x1496a,0x14972,0xe254b,0x00000,0x1496f,0x22355,
-0x22353,0x1496e,0xe2556,0xe2553,0xe254e,0x14969,0x1496c,0xe2551,
-0x22354,0x2235b,0x22357,0x1496d,0x14971,0x14974,0x22352,0x2235a,
-0x1496b,0x00000,0x00000,0x00000,0xe2841,0xe2833,0x14c69,0x14c71,
-0xe2838,0x22630,0x22629,0x14c72,0x22634,0x22625,0x2262c,0xe2845,
-0xe2840,0x14c68,0x22626,0x14c66,0x2262d,0x22631,0x14c65,0xe283d,
-0x22632,0x2262b,0xe2837,0x2262e,0xe2835,0x14c74,0x14c6b,0x22635,
-0x22633,0xe283f,0x14c70,0x14c6e,0x2262a,0x14c6d,0x22628,0x22627,
-0x14c6c,0x14c6a,0x14c73,0x14c6f,0x14c67,0xe2c26,0x2262f,0xe2846,
-0x1505b,0xe2c2d,0x15062,0x22970,0x1505a,0x22968,0x22964,0xe2c21,
-0x22974,0x22963,0xe2c2c,0x1505d,0x2296d,0x15060,0x15063,0xe2c2e,
-0x1505e,0x22971,0x15061,0xe2c23,0x15478,0x22977,0x22965,0xe2c24,
-0xe2c25,0x22967,0x2296e,0x22972,0x22976,0x22973,0x2296c,0x2296f,
-0xe2c2b,0xe2c29,0x22969,0x15065,0x2296b,0x2296a,0x22975,0x1505c,
-0x22966,0x15064,0xe2c2a,0x1505f,0xe2c28,0x00000,0x00000,0x00000,
-0x00000,0x1547e,0x22e64,0xe3040,0x1547d,0xe2c27,0x00000,0x22e62,
-0xe6270,0x15472,0xe304f,0x15477,0xe304a,0x22e61,0x22e5e,0x22e63,
-0x15473,0x22e5d,0xe304e,0x15476,0x15474,0xe303e,0x22e65,0x15475,
-0x15479,0xe303b,0xe3045,0x1547a,0xe3048,0x1547c,0xe3052,0x00000,
-0x00000,0x1547b,0xe303c,0xe3522,0xe3538,0x22e5f,0x22e60,0xe304d,
-0x00000,0xe304b,0x00000,0x22e66,0x00000,0x23457,0x1595e,0x23b26,
-0x23456,0x23469,0xe3528,0xe3524,0x15964,0xe3531,0x23467,0xe3533,
-0x15963,0x1595f,0x23470,0x23460,0x23463,0xe352e,0x15967,0x2346d,
-0x23465,0x15960,0x15968,0xe352a,0x2346a,0x23468,0xe352f,0xe353b,
-0x23459,0x2346e,0x23462,0x2345d,0xe353a,0x23453,0x2346f,0x2345f,
-0x23452,0xe3539,0x15966,0x23464,0x23471,0x23461,0x23455,0x2345a,
-0x23451,0xe3527,0x15965,0xe353c,0x2345e,0x2345b,0x15961,0x23454,
-0xe3530,0x2346c,0x15962,0xe352b,0x2345c,0x23458,0xe3529,0xe3534,
-0x2346b,0xe3532,0x00000,0xe3537,0x00000,0xe3535,0x00000,0x15e65,
-0x23a7d,0xe3a75,0x23a7a,0x23b2d,0x23b21,0x23b2e,0xe3a7c,0x15e67,
-0xe3a63,0xe3a61,0xe3a58,0x23b2a,0x23b27,0xe3a5b,0xe3a77,0xe3a72,
-0xe3a59,0xe3a60,0x23b28,0x23b2b,0x23b2f,0xe3a7b,0x23466,0x23b31,
-0x2424d,0xe3a66,0x15e68,0x23b32,0x23a78,0x23b24,0xe3a62,0x23b29,
-0xe3a5c,0xe3a5e,0x15e66,0x15e69,0x23b30,0x23b33,0x23a7c,0x23a79,
-0xe3a73,0xe3a5a,0x23a7b,0xe3a57,0xe3a7a,0x23b22,0x23a7e,0x15e6a,
-0xe3a56,0x23b2c,0xe3a79,0xe3a78,0x23b23,0x00000,0x23b25,0x23a77,
-0x24241,0x2423f,0x16368,0x16366,0x24249,0x24240,0x2424a,0x24246,
-0x2423e,0x2424c,0x2423d,0x24244,0x16365,0x16364,0x16363,0x24242,
-0x24247,0x16360,0x16367,0xe4067,0x2423b,0xe4066,0x24245,0x2423a,
-0x24243,0x16361,0x24248,0x2423c,0x16362,0x2424b,0xe4064,0xe3a6b,
-0xe406a,0xe6468,0x00000,0xe6469,0x00000,0x24955,0x1684a,0x16849,
-0x1684b,0x24961,0x24957,0x2495d,0x24952,0x24960,0x2495f,0x24963,
-0x2495c,0x16846,0x2495b,0x1684c,0xe464c,0x24954,0x16847,0xe464a,
-0x24962,0x16848,0x24956,0x24959,0x2495e,0x24958,0x24953,0xe464f,
-0xe4653,0x00000,0x00000,0x2495a,0x24f7c,0x16c4b,0x25021,0x24f7e,
-0x25023,0x25025,0xe4b5c,0x16c49,0xe4b58,0x24f7d,0xe4b54,0x24f7b,
-0xe4b5e,0x25026,0x25024,0x25022,0xe4b56,0x25028,0xe4b5a,0x25027,
-0x16c4d,0x16c48,0xe4b5b,0x16c4a,0x16c4c,0xe4b5d,0xe4b5f,0x25029,
-0x25661,0xe5050,0xe5053,0x25660,0x2565f,0xe5051,0x25662,0x2565b,
-0xe504f,0x2565c,0x25664,0x2565d,0xe5054,0x1704e,0x25666,0xe504e,
-0x25665,0x2565e,0xe5056,0x25c5d,0x17351,0x25c5b,0x25c60,0x25c5f,
-0x25663,0xe5450,0x17350,0xe544e,0x25c5e,0x25c5a,0x25c62,0x25c61,
-0x1734f,0xe5452,0x25c5c,0xe544f,0x1704f,0xe5451,0x00000,0xe5453,
-0x17640,0xe5a31,0xe5761,0xe575e,0x2614d,0x26546,0x26547,0x26548,
-0x17967,0x00000,0xe5c36,0x17968,0xe5c39,0x2686f,0xe5c3a,0x26b56,
-0x26b55,0xe5e29,0xe5f42,0x26d49,0x26d4a,0x26f24,0x27035,0xe6073,
-0x1444d,0x1444e,0x00000,0x1444f,0x14536,0x14645,0x22233,0x14773,
-0x14774,0x00000,0x14977,0x14978,0x14976,0x14975,0x00000,0x14c75,
-0xe2848,0x00000,0x22636,0x14c77,0x14c76,0x22637,0xe625c,0xe646a,
-0x00000,0x15066,0xe2c2f,0x15521,0x22e67,0x00000,0x23473,0x00000,
-0x15969,0x15e6c,0x23472,0x15e6b,0xe4071,0x1684d,0xe4072,0x24964,
-0x17050,0xe5057,0x17352,0x25c63,0xe5a34,0x17969,0xe5c3b,0x17b5c,
-0xe213b,0x22153,0xe223d,0x14646,0x22154,0x14777,0xe2350,0x14775,
-0x14776,0x14778,0x00000,0x1497a,0x14979,0xe255a,0x2235c,0x1497b,
-0x00000,0x00000,0x2235d,0x22638,0xe284c,0x22639,0xe284a,0x14c78,
-0x14c7a,0x14c7c,0x14c79,0x14c7d,0x14c7b,0xe284e,0xe284b,0xe284d,
-0x00000,0x00000,0x1506a,0x15067,0x15069,0x1506b,0x15068,0x22e68,
-0x22978,0x00000,0x00000,0xe2c32,0x22e6a,0x22e69,0x15527,0x00000,
-0x15523,0x00000,0x00000,0x15524,0x15526,0x15528,0x15525,0xe3057,
-0x1552a,0x15529,0x00000,0xe3056,0xe3055,0x00000,0x00000,0x1596e,
-0x23475,0x23474,0x1596d,0xe3541,0x1596c,0x1596b,0x1596f,0x1596a,
-0xe353f,0x00000,0x23b39,0x23b36,0x15e6e,0x23b35,0x23b3a,0x00000,
-0x15e70,0x23b38,0x15e6d,0x15e6f,0x23b37,0xe3a7e,0x2424e,0xe4074,
-0x2424f,0x24250,0xe4075,0xe4076,0xe4073,0xe6345,0x1684e,0x16856,
-0x24965,0x16850,0x16854,0x24966,0x16855,0x16851,0x16852,0x1684f,
-0x16853,0x16c50,0x23b34,0x16c51,0x16c4f,0x00000,0x16c4e,0x25667,
-0x17051,0x25c64,0x25c65,0xe5a35,0x00000,0x17831,0x1796a,0xe5e2a,
-0x14450,0xe223e,0x14779,0x00000,0x00000,0xe255e,0xe255c,0xe255d,
-0xe2850,0x1506c,0x00000,0x22e6b,0x1552b,0xe3058,0xe3059,0x15972,
-0x15971,0x15970,0x15e71,0x15e72,0x23b3b,0x16857,0x17052,0x14451,
-0x2213c,0x14537,0x22155,0xe624a,0xe223f,0x22234,0x1477a,0x00000,
-0xe2352,0xe2851,0x14c7e,0xe2c34,0x00000,0x00000,0xe3b24,0x24251,
-0xe4078,0xe6525,0x14452,0x00000,0x14538,0x22235,0x00000,0x00000,
-0x2235e,0x00000,0x2235f,0xe255f,0x1497c,0x00000,0x00000,0xe2c35,
-0x23b3c,0x15e73,0x00000,0x24252,0x00000,0x00000,0xe5454,0x17353,
-0x14453,0x14467,0x14539,0x22156,0x14647,0xe2354,0x14a22,0x14a21,
-0x1497d,0x1497e,0x00000,0x00000,0x2263a,0x14d22,0x14d23,0x2263b,
-0x14d21,0xe2854,0xe2855,0x15070,0x22979,0x1506f,0x1506d,0x1506e,
-0x1552e,0x1552c,0xe305a,0xe305b,0x22e6d,0x1552d,0x22e6c,0xe646b,
-0x15522,0x23476,0x00000,0xe3543,0x15974,0x15975,0xe3b26,0xe3b25,
-0x15973,0xe3544,0x16858,0x24967,0x16c52,0x16c53,0x00000,0x2502a,
-0x17354,0x2614e,0x2614f,0xe5a38,0x17a68,0x27036,0x2212b,0x1453a,
-0x00000,0x14454,0x00000,0x22158,0x22157,0x00000,0x00000,0xe646c,
-0xe2355,0x1477b,0x22237,0x22238,0x22236,0x00000,0x22239,0x00000,
-0xe235a,0x00000,0x00000,0x00000,0xe2561,0xe2566,0x22367,0x00000,
-0x22362,0x22364,0x22366,0x22363,0x14a26,0x22360,0xe2562,0x22361,
-0x14a23,0x14a24,0x22365,0x22368,0x14a25,0x22369,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe2563,0x22649,0xe285d,0x22643,
-0x2263e,0x14d25,0x22646,0x22644,0x2263d,0x2264a,0x2264d,0x22648,
-0x22641,0x14d27,0x22647,0x14d28,0x22642,0x22645,0x2263c,0x22640,
-0x2264c,0x14d29,0x00000,0x14d2a,0xe285e,0x2263f,0x2264b,0x14d24,
-0x14d26,0xe285c,0xe285f,0xe2857,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe2858,0x00000,0x00000,0x00000,0x00000,0x22a2c,0x22a25,
-0x22a2b,0x22a24,0x22a26,0x2297e,0x2297c,0xe2c3f,0x22a2d,0x22a2a,
-0x2297a,0xe2c3b,0x15072,0x22a28,0x22a29,0xe646d,0x22a27,0x2297d,
-0x2297b,0x15071,0x22a23,0x22a21,0xe2c3c,0xe2c42,0x22a22,0x22a2e,
-0x00000,0xe2c3e,0xe2c41,0x00000,0x00000,0xe2c43,0xe2c3d,0x00000,
-0x15533,0xe3063,0x15532,0xe305f,0x22e6e,0x1552f,0x22e70,0xe3064,
-0x15534,0x22e71,0x00000,0xe3061,0x15537,0xe3062,0x15535,0x22e72,
-0x22a2f,0x22e74,0xe305e,0x15531,0xe6271,0x15530,0xe6272,0x22e6f,
-0x22e73,0x15536,0x00000,0x00000,0x00000,0x00000,0x15977,0x15976,
-0xe354b,0xe3548,0xe3547,0x23478,0x2347c,0x2347e,0x15978,0x23523,
-0xe3551,0x1597c,0x23525,0xe3552,0x1597e,0xe354f,0x1597a,0x15a24,
-0xe3555,0x15a21,0x2347a,0x15979,0xe3b2b,0x23479,0x23477,0x23527,
-0x2347b,0xe3546,0x1597b,0x23526,0x15a22,0x23522,0x23521,0x15a23,
-0x2347d,0x1597d,0xe354e,0x00000,0xe354a,0x00000,0x23528,0xe3554,
-0x23524,0x23b4b,0x23b52,0x23b47,0x15e76,0x23b43,0x23b53,0x23b3d,
-0x23b50,0x23b4e,0x23b48,0xe3b36,0x23b51,0x23b4a,0xe3b28,0x23b42,
-0x23b54,0x23b40,0x23b4d,0x23b3e,0xe3b27,0x23b55,0xe3b37,0x15e77,
-0xe3b2a,0x23b4f,0x24255,0x23b41,0x15e74,0xe3b2e,0x23b45,0xe3b34,
-0x15e75,0x23b44,0x23b49,0xe3b33,0x00000,0x23b46,0x00000,0xe3b31,
-0x00000,0x23b4c,0x00000,0xe3b2d,0x00000,0x00000,0x24259,0x00000,
-0xe4121,0x00000,0x2425c,0x24254,0xe407c,0x24256,0xe407a,0x2425b,
-0x2425a,0x16369,0x00000,0x23b3f,0x24258,0xe4079,0xe407d,0x1636a,
-0x00000,0x24253,0x24257,0x00000,0x00000,0xe646e,0x00000,0x2496e,
-0xe465c,0x24975,0x2496c,0xe4654,0x24973,0x2496a,0x24972,0x24976,
-0x24969,0x2496d,0x24968,0xe4656,0x16859,0x00000,0x2496b,0x1685a,
-0x24971,0x24970,0x2496f,0xe4659,0xe465a,0x24974,0xe646f,0xe4b65,
-0xe4b66,0xe4b63,0x2502e,0x25030,0x16c55,0x25031,0xe4b6b,0x2502c,
-0xe4b67,0x2502b,0x25035,0xe4b69,0x25033,0x16c54,0x25036,0x2502d,
-0x25032,0x25034,0x2502f,0xe4b6a,0xe4b68,0xe6470,0xe5058,0x2566b,
-0x25670,0x2566a,0x2566f,0xe505b,0x25668,0x25672,0x2566e,0x25673,
-0x2566d,0x25669,0x25671,0xe505a,0x25674,0x2566c,0xe6471,0x25c66,
-0x17358,0xe5457,0x17356,0xe5459,0x17355,0x17357,0xe5455,0xe6472,
-0x26150,0xe5762,0x2643e,0x26549,0xe5a39,0x00000,0x26870,0x26871,
-0xe5c3d,0x1796b,0xe5c3c,0x26b57,0xe5c3e,0x17a69,0x00000,0x26b58,
-0xe5e2d,0x26d4c,0x17b5e,0xe5f43,0x17b5d,0x26d4b,0x17c35,0xe6030,
-0x26f25,0x00000,0x00000,0xe213c,0x00000,0x14455,0x1477c,0x2223a,
-0x2236a,0x14b56,0x15a25,0xe3557,0xe4b6c,0x14456,0x1464a,0x14649,
-0x14648,0x00000,0x00000,0x14a27,0x00000,0x00000,0x15538,0x00000,
-0x2425d,0x14457,0x14458,0x14459,0x1453b,0xe2567,0xe2860,0x15073,
-0x00000,0x22a30,0xe2c45,0xe2c44,0x00000,0x15e78,0x1445a,0x2213d,
-0xe2163,0x00000,0x1464b,0x1464c,0x22159,0x00000,0x1477d,0x00000,
-0xe235c,0xe2568,0x2236b,0xe256b,0x14a28,0x00000,0x2236c,0x00000,
-0x00000,0x14d30,0xe2862,0xe2861,0x2264f,0x14d2e,0x14d2d,0x2264e,
-0x14d2b,0x22650,0x14d2c,0x14d2f,0x00000,0x15074,0xe2c46,0x15076,
-0x22a34,0x22a31,0x22a32,0x22a33,0x22a35,0x15075,0x00000,0x00000,
-0x22e76,0x22e75,0xe3066,0x1553a,0xe3069,0x15539,0xe3068,0xe306a,
-0xe3067,0x00000,0xe355b,0x15a28,0x2352a,0xe3559,0x15a27,0x15a29,
-0x15a26,0xe3558,0xe355a,0x00000,0x00000,0x15e7a,0x23529,0x00000,
-0x15e7b,0x23b57,0xe3979,0x15e7c,0x23b56,0x15e79,0xe3b3a,0xe3b3b,
-0xe3b3d,0x00000,0x24260,0x24262,0x1636b,0x24261,0x2425f,0x2425e,
-0x00000,0x00000,0xe465d,0x24979,0x1685f,0x1685d,0x00000,0x1685e,
-0x24977,0x24978,0xe4b6d,0x1685b,0x2503a,0x25038,0xe4b70,0x16c57,
-0x25039,0x16c58,0x16c56,0x1685c,0x00000,0xe6473,0x25677,0x25675,
-0x25676,0x25037,0x25c68,0x17359,0x25c67,0x26151,0x26152,0x25678,
-0x2654a,0xe6677,0x1445b,0x1464d,0x14821,0x2223b,0x1477e,0xe2863,
-0x14d31,0x1636c,0xe213d,0x1453c,0x1464e,0x15077,0x15e7d,0xe213e,
-0x2215a,0xe2247,0x2215b,0xe2248,0x2223c,0xe6678,0x00000,0x14a2a,
-0x22370,0x2236e,0x14a2b,0x2236d,0x2236f,0x22371,0x00000,0x14a29,
-0xe256e,0x00000,0xe256d,0x00000,0x00000,0x14d35,0x14d36,0x14d33,
-0xe2865,0xe2867,0x14d32,0x22a39,0x14d34,0xe2868,0x00000,0x00000,
-0x15078,0xe2c48,0x22a38,0x22a3a,0x22a37,0x22a3b,0x15079,0x1553d,
-0x22e77,0xe306c,0x22e79,0x1553b,0x22e7a,0x1553c,0x22e78,0xe306b,
-0x22a36,0x2352b,0x2352e,0x2352f,0x2352c,0x15a2d,0x15a2c,0x15a2a,
-0x15a2b,0x2352d,0xe3561,0xe3560,0x00000,0xe3b3f,0x15a2e,0xe3b40,
-0xe3b3e,0x15f21,0x15f22,0x00000,0x15f23,0x24263,0x24265,0x24267,
-0x1636e,0x1636d,0x15e7e,0x24266,0x24264,0xe6474,0x2497d,0xe4661,
-0xe4660,0x2497b,0x24a23,0x16860,0x24a24,0x24a21,0x16861,0x2497c,
-0x2497a,0x24a22,0x16c5a,0x2503c,0x2497e,0x16c5c,0x2503d,0x16c5b,
-0x16c5e,0x2503e,0x16c59,0x16c5d,0x00000,0x2567d,0x2567b,0x2567a,
-0x2567c,0x25679,0xe505c,0x00000,0x17833,0xe6475,0x26872,0x26873,
-0xe5c3f,0x26b59,0x26d4d,0x17d22,0xe213f,0xe2361,0x14d37,0x14a2c,
-0xe2869,0xe286b,0x1507a,0xe2c4c,0xe2c4b,0xe306e,0x1445c,0x1453d,
-/* 0x5f00 */
-0x00000,0x1464f,0x2223d,0xe256f,0x14a2d,0x22372,0xe286d,0x22a3c,
-0x1507b,0x00000,0x16862,0x1445d,0xe2164,0xe2249,0xe2362,0x14822,
-0x00000,0xe3b42,0x1636f,0x1445e,0x1453e,0x1453f,0x00000,0x14651,
-0x14650,0x00000,0x2223e,0x14823,0x00000,0x22373,0xe2571,0x14a2e,
-0x00000,0xe286e,0x22652,0x22653,0x22654,0xe2870,0x14d38,0x14d39,
-0x22651,0x14d3a,0x00000,0x00000,0x00000,0x1507c,0x22a3d,0xe2c4d,
-0x22e7c,0x1553e,0xe306f,0x22e7b,0xe3562,0x15a2f,0x23530,0x15a30,
-0x23531,0xe3563,0xe3b47,0xe3b45,0x15f24,0x00000,0xe3b44,0x00000,
-0x24268,0x00000,0xe4122,0x24a26,0x24a25,0x00000,0x16863,0x00000,
-0x16c5f,0x2503f,0x17053,0x2567e,0x1735a,0xe5763,0x17b5f,0x26f27,
-0xe2140,0xe2141,0xe224a,0xe2351,0x22655,0xe2871,0x22a3e,0x15a31,
-0x23b58,0x16370,0xe4123,0xe505e,0x00000,0xe5764,0x17641,0x00000,
-0xe6164,0xe2142,0x14a30,0xe2572,0x14a2f,0x1507d,0xe2c50,0x22e7d,
-0x00000,0x15a33,0x15d29,0x15a34,0x15a32,0x15f25,0xe4124,0x24a27,
-0x16864,0x16c60,0xe5f45,0x2212c,0x2223f,0x00000,0x22375,0x14a31,
-0x22374,0x14a32,0x00000,0x00000,0x14d3e,0x22658,0x22657,0x14d3d,
-0x14d3b,0x14d3c,0x22656,0xe2876,0xe2875,0x15121,0x22a3f,0x15124,
-0x1507e,0x15126,0x15122,0x15123,0x15125,0xe6264,0xe3070,0xe3072,
-0x15541,0x15540,0x1553f,0xe3071,0xe6476,0x00000,0x23533,0x15a35,
-0x15a38,0x15a36,0xe6477,0x23532,0x15a3b,0x00000,0x15a37,0x23534,
-0x15a3a,0x15a39,0x00000,0x00000,0x00000,0x23b5a,0x23b59,0xe3b4b,
-0x15f28,0x15f26,0x15f27,0x23b5b,0x16371,0x2426a,0x16372,0x24269,
-0x00000,0x00000,0x25040,0xe4663,0xe4664,0x16c62,0x24a28,0x16c61,
-0xe4b72,0x16865,0xe6478,0x25722,0x25721,0x1735b,0x25c69,0x2654b,
-0x26874,0x26875,0xe5e2f,0x14540,0x00000,0x14652,0x00000,0xe224d,
-0xe6251,0x2215c,0xe224c,0x00000,0x14a34,0x14a36,0xe2578,0x22242,
-0x22378,0x22377,0x22376,0xe2366,0x22241,0x22240,0x14825,0x14a35,
-0x14a33,0x14824,0xe2367,0xe2369,0xe2577,0x14d3f,0x22659,0xe257b,
-0x14d40,0x2237d,0x00000,0x22421,0x2237e,0x2265a,0xe2576,0xe2574,
-0x2237a,0xe287e,0x14a3a,0x14a38,0xe257c,0x22379,0x2237b,0x22423,
-0xe2622,0x14a37,0xe2621,0x2237c,0x22427,0x14d42,0xe257d,0x22424,
-0x14a39,0xe2623,0x22422,0x22425,0xe257a,0x14d41,0xe2575,0x14d43,
-0x22426,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2878,
-0xe2922,0x2266e,0x22661,0x2265f,0x2266d,0x22668,0x1512b,0x14d44,
-0x22669,0x2266c,0x15127,0x2266b,0x14d45,0x14d4a,0x14d48,0x22662,
-0xe6266,0x2265d,0x22664,0x14d4f,0x2266f,0x15128,0x22665,0x00000,
-0x15129,0x14d4b,0x22667,0xe2c5a,0x22a4e,0x1512a,0x2265c,0x14d4c,
-0x1512c,0x14d4d,0x14d49,0x14d4e,0x22666,0x2265b,0x2266a,0x14d46,
-0xe2877,0xe2c5b,0x2265e,0x22663,0x22660,0x14d47,0xe287a,0x22a40,
-0x00000,0x22a41,0x00000,0x00000,0x00000,0xe2921,0x00000,0x00000,
-0x22a4b,0x22f23,0x22a4c,0x15132,0x22a4f,0x22a45,0x15131,0x22a47,
-0xe6267,0x22a48,0xe2c60,0xe3079,0x22a4a,0x1512d,0xe2c56,0xe3073,
-0x15545,0xe2c57,0xe2c5d,0x22a46,0x22a42,0x15546,0xe307e,0x00000,
-0x22a50,0x15542,0x22f21,0x22a49,0xe2c54,0x22e7e,0x22a44,0x22a4d,
-0xe2c5f,0xe2c61,0x15130,0x15543,0x15136,0x15544,0x22a51,0x22f22,
-0x1512f,0x15548,0x15135,0x15134,0x15133,0x15547,0x22a52,0x15549,
-0x1512e,0x00000,0x22a43,0xe307a,0xe3078,0xe307b,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe2c5c,0x00000,0xe3076,0x15a3c,
-0x22f26,0x22f28,0x00000,0x22f2a,0x1554a,0x15550,0x23537,0x22f2e,
-0x22f25,0x15a3e,0x23535,0xe3122,0x1554f,0x1554d,0x22f30,0x00000,
-0x23536,0x00000,0x22f27,0xe3125,0x1554e,0x22f2b,0x15551,0x22f2d,
-0xe3568,0xe3074,0x1554c,0x22f2c,0x22f2f,0x22f29,0xe3127,0x1554b,
-0x15a3f,0xe3571,0x22f24,0x15a3d,0xe3572,0x00000,0xe3123,0xe3128,
-0x15a40,0xe3121,0xe356f,0x00000,0x00000,0x00000,0xe3126,0x00000,
-0x23539,0x23542,0x15f2b,0xe3b54,0x15a42,0x15a47,0x15f2c,0x23544,
-0x15a4e,0x23b5d,0x2353a,0x15a46,0x15a49,0x15a44,0x23538,0x23546,
-0x23549,0x23b6c,0x00000,0x23547,0x23b61,0x15a45,0x15a4c,0x15a50,
-0x23541,0x23b5c,0x23545,0x15a41,0x23b5e,0x23548,0x23b60,0x2353d,
-0xe356a,0x15f29,0xe3b56,0x2353b,0x2353c,0x15a4b,0xe3b55,0xe356e,
-0x15a4a,0x2353f,0x15a4f,0x23543,0x15a48,0x23540,0xe3579,0x15a4d,
-0x15f2d,0x15f2a,0x23b5f,0xe3b58,0x2353e,0xe3b59,0x15a43,0xe3576,
-0x00000,0xe3b5a,0xe3b4d,0x00000,0x00000,0x00000,0xe3574,0x00000,
-0x15f32,0x15f36,0x23b63,0x16377,0x15f34,0x23b67,0x15f38,0x2426b,
-0x23b69,0x16379,0x15f30,0x15f33,0x23b6a,0xe3b5e,0x23b6b,0x23b71,
-0x15f3a,0x1637a,0x00000,0x23b6d,0x23b72,0x23b66,0x16426,0xe3b4f,
-0x1637b,0x15f39,0x23b64,0x23b73,0xe3b51,0x16425,0x15f37,0x16374,
-0x23b70,0xe3b5d,0x15f3b,0x23b68,0x23b62,0x15f31,0x23b65,0x00000,
-0x23b6e,0xe412b,0x16373,0x16378,0x15f2e,0x23b6f,0xe3b61,0x16376,
-0xe3b62,0xe3b63,0xe3b50,0x15f2f,0x00000,0xe6479,0x00000,0x16424,
-0x24a2a,0x24276,0xe4129,0x2426e,0x24a29,0x00000,0x24272,0x24274,
-0xe4127,0xe412c,0x24271,0xe466f,0x16423,0x00000,0x24270,0x16427,
-0xe466e,0x00000,0xe4128,0x24a39,0xe466c,0xe412e,0x16422,0x16867,
-0x24277,0x24a2b,0xe466d,0xe412a,0x1637e,0x2426f,0x24273,0x16866,
-0x16375,0x2426c,0x2426d,0x16868,0x1637d,0x16421,0x1637c,0x24275,
-0xe647a,0x00000,0x24a2f,0x24a30,0x24a35,0x16c67,0x24a3c,0xe4b73,
-0x1686e,0xe4b7e,0x1686d,0x24a37,0xe4b74,0x16c66,0x24a2c,0x1686c,
-0xe4671,0x24a3b,0x1686a,0x1686b,0xe4b7c,0x24a38,0x25051,0x16c64,
-0x15f35,0xe4672,0x24a3a,0x16c6b,0x24a32,0x00000,0x16c65,0xe466a,
-0x16c6a,0x24a2d,0x24a31,0x24a2e,0x24a34,0x1686f,0x16c63,0x16869,
-0xe4c21,0x25043,0x24a36,0xe4668,0x16c69,0xe4673,0x16c6c,0x00000,
-0x24a33,0xe466b,0x16c68,0x25042,0x00000,0xe4c23,0xe4674,0xe4c24,
-0xe4b77,0x25047,0x17057,0x25041,0x2572e,0x25050,0x16c70,0xe4b7a,
-0x16c6e,0x17055,0x2504d,0x25049,0x16c74,0xe4b76,0x25725,0xe5068,
-0xe4c28,0xe5067,0x16c72,0x25048,0xe4c29,0x25723,0xe4c25,0x2504c,
-0x00000,0x2504f,0x25046,0xe4b79,0x16c73,0x00000,0xe4b75,0x16c6d,
-0x25724,0x17056,0x2504e,0x16c6f,0x16c71,0x2504b,0x16c75,0x2504a,
-0x25045,0x25044,0x17054,0x25052,0x25727,0x25c6b,0x17059,0xe5061,
-0x2572d,0xe5063,0x2572b,0xe506a,0x25c6c,0xe5064,0x1705a,0x2572c,
-0xe5066,0x25729,0x1735d,0x25c6a,0xe506c,0x25726,0x25728,0x1735e,
-0x1705c,0x1735c,0x1705b,0x17360,0x2572a,0x17058,0xe5062,0xe5065,
-0xe506b,0x00000,0x00000,0xe6679,0x00000,0x00000,0x2615b,0x00000,
-0x26153,0xe5461,0xe545f,0xe545c,0xe545e,0xe545d,0x25c72,0x26154,
-0x25c6e,0x00000,0xe545b,0x17642,0x25c70,0x25c6f,0x1735f,0x25c6d,
-0x25c71,0x2615c,0x26158,0x2615a,0x00000,0x26155,0x26156,0x00000,
-0x26159,0x26157,0x17834,0xe5765,0x00000,0x17837,0x17836,0x17835,
-0x1796c,0x26876,0x1796d,0x2654c,0x17a6a,0x26b5a,0x17a6b,0x17b60,
-0x17c36,0x26f28,0xe5f46,0x26f29,0x26f2a,0xe613e,0x00000,0x2722a,
-0x14541,0x2215d,0x14653,0x00000,0x14827,0x14828,0x14826,0xe236b,
-0x14829,0x14a3c,0x14a3b,0xe2625,0x22670,0x14d51,0x14d50,0x00000,
-0xe2c63,0x22f31,0x15a51,0x15a52,0x00000,0x00000,0xe3b64,0x15f3c,
-0x24278,0x16428,0x16429,0x2427a,0x2427c,0x2427b,0x00000,0x24a3e,
-0xe4676,0x24a3d,0x16870,0x24a3f,0xe4675,0x25053,0x16c76,0xe4c2c,
-0x1705d,0xe506d,0x17361,0x17643,0x17362,0xe5f48,0x14542,0xe2165,
-0xe2166,0xe224e,0x22428,0xe2628,0xe2629,0x22671,0x14d53,0x14d52,
-0x14d54,0x15137,0x22a53,0x22a54,0x00000,0xe3129,0x22f32,0x15552,
-0x15a53,0x15f3d,0x23b74,0x14543,0x00000,0x1445f,0x14544,0xe2250,
-0x2215e,0x14657,0x14656,0x14654,0x14655,0x00000,0x00000,0xe236f,
-0x1482c,0x22249,0x2224b,0x1482b,0x22243,0xe236c,0x22244,0xe236d,
-0x2224a,0x22246,0x22248,0x1482a,0x22245,0x2224c,0x22247,0xe236e,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x14a43,0x14a4c,0x14a4a,
-0x22432,0x2242f,0x22437,0x14a48,0x22438,0xe2639,0x14a41,0x22435,
-0xe262e,0x14a47,0x22431,0x22430,0x14a45,0x22436,0x14a46,0x14d55,
-0x14a40,0x22433,0xe262a,0x22429,0x14a3d,0xe2637,0x14a50,0x2242e,
-0x22434,0x14a42,0x14a44,0xe262f,0x2242a,0xe2636,0x2242b,0x2242c,
-0x00000,0x14a4f,0x14a49,0x14a4e,0x2242d,0x14a4d,0x14a3f,0x14a3e,
-0x14a4b,0xe2635,0x00000,0xe2633,0xe2634,0xe2638,0xe2631,0x00000,
-0x00000,0x00000,0x00000,0xe647b,0x00000,0xe2632,0xe2931,0xe292a,
-0x14d63,0x2267d,0x22676,0x14d5e,0x14d71,0x22672,0x22679,0x2267b,
-0x2267e,0x14d6c,0xe2926,0x2267a,0x22673,0x14d6a,0x22677,0xe2928,
-0x22721,0x14d5b,0xe2925,0x2267c,0x14d65,0x14d64,0x22675,0x14d59,
-0xe2934,0xe2932,0x14d5a,0x00000,0x14d58,0xe2933,0x14d70,0x14d68,
-0x14d62,0x14d56,0x22678,0x14d61,0x14d57,0x14d69,0x14d72,0x22a55,
-0x14d66,0x22674,0x14d5c,0x14d5f,0x14d60,0xe292e,0x14d6e,0x14d6f,
-0x14d6d,0x14d67,0x14d6b,0x14d5d,0x15138,0xe2930,0xe2937,0xe2935,
-0xe2936,0xe292f,0x00000,0x00000,0xe2929,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe2c6d,0x22a5b,0x15144,0x1513c,0x1513e,0x15143,
-0x22a67,0x15141,0x22f33,0x15553,0x15146,0x22a58,0x22a60,0x15142,
-0x22a5f,0x22a5c,0x22a64,0x22a66,0x1513b,0x1513f,0x15145,0x15555,
-0x22a61,0x1513d,0x15148,0x22a5a,0xe2c6f,0xe2c70,0x00000,0x15140,
-0x15554,0x1513a,0x00000,0x22a57,0x22a5e,0x22a56,0x22a59,0x22a5d,
-0x22f34,0x15147,0x00000,0x22a62,0x22a63,0x22a65,0x15139,0xe2c6c,
-0x00000,0xe3132,0x00000,0xe3133,0x00000,0x00000,0x00000,0xe2c6b,
-0x00000,0xe2c6e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x15563,0x22f40,0x15561,0x15562,0x22f36,0x22f46,0xe312c,0x15558,
-0xe312f,0xe3135,0x2354a,0x22f48,0x22f42,0xe3138,0x22f39,0xe3137,
-0x22f4b,0x22f3c,0x1555e,0x23561,0x22f3f,0x15560,0x15557,0xe313c,
-0x22f4d,0x22f41,0x1555a,0x22f3a,0x22f37,0x22f38,0x1555b,0x22f47,
-0x22f4e,0x1555d,0x22f3e,0x22f3d,0x15565,0x15564,0x15556,0x1555c,
-0x1555f,0x22f4a,0xe312e,0xe3139,0x22f44,0x15559,0x22f35,0x22f4c,
-0x22f43,0x22f45,0x22f49,0xe3130,0xe313b,0xe3136,0x00000,0x00000,
-0xe647c,0x00000,0x00000,0x00000,0xe647d,0x2354b,0xe3631,0x15a5b,
-0x15a6f,0x15a6e,0xe3627,0x15a63,0xe3629,0x2355d,0x23559,0x23556,
-0x23568,0x15a5e,0x15a56,0xe3626,0xe3632,0x2355b,0x15f4d,0x15a5a,
-0x23563,0xe3622,0x15a70,0x15a6d,0x2355f,0x2354e,0xe357c,0xe362b,
-0x15a6c,0x23565,0x2354d,0x15a61,0x15a65,0x23564,0xe3623,0x23557,
-0x15a66,0x15a60,0x2354c,0xe357d,0x15f3f,0x23567,0x23555,0x15a6b,
-0x23558,0x23566,0x15a6a,0xe3624,0x23b75,0x00000,0x15a57,0x23553,
-0x15a5c,0x15a67,0x00000,0x15a62,0x2355c,0x23552,0x23550,0x23562,
-0x15a54,0x15a68,0x15a58,0x15f3e,0x23560,0x15a59,0x00000,0x15a55,
-0x15a64,0x15a5f,0x15a5d,0x23554,0x15a69,0x23551,0x2355e,0x2355a,
-0x23b77,0x23b76,0xe362d,0x00000,0x00000,0x00000,0xe647e,0x00000,
-0x00000,0x00000,0xe362e,0x00000,0x00000,0x2354f,0x23c29,0xe3b71,
-0x15f41,0xe3b70,0x23c2f,0x23b7c,0x23c2c,0x2427d,0x15f44,0x23c30,
-0x23c33,0x15f43,0x23c21,0x23c32,0x23c31,0x15f45,0x23b78,0x15f40,
-0x15f48,0xe3b73,0x15f46,0x23c2e,0x00000,0x23c24,0x15f4a,0x23c35,
-0x23c2d,0x23c36,0x15f52,0x15f50,0x23c2b,0x23c2a,0xe3b67,0x23c28,
-0x23c22,0x15f49,0xe3b66,0x15f47,0x22f3b,0x23b79,0xe3b68,0x2433d,
-0x23b7a,0x15f42,0x15f4f,0x24321,0x00000,0x15f4b,0x15f4c,0x23b7b,
-0x23c34,0x2427e,0x23c25,0x23b7e,0x15f4e,0x23c26,0x23c23,0xe3b72,
-0xe3b6d,0x15f53,0xe6339,0x00000,0x00000,0x00000,0xe3b6f,0x00000,
-/* 0x6400 */
-0x00000,0x00000,0x00000,0xe6521,0x00000,0x00000,0x16438,0xe4149,
-0xe4132,0x24324,0x24337,0x2433c,0x24330,0x16434,0x24341,0x16431,
-0x24322,0xe413a,0x24323,0x1642a,0x16433,0x2432a,0x16436,0x16437,
-0x2432b,0xe4138,0x24338,0x2433e,0x16432,0xe413e,0x1642c,0x24329,
-0x24325,0x24340,0x2432e,0x2432f,0x24326,0x2433a,0x24331,0x2433b,
-0x24333,0xe413d,0x1642d,0x24a40,0x16430,0x1642e,0x2433f,0x24336,
-0x24332,0xe4136,0xe4133,0x24327,0x1687a,0x24335,0x16435,0x2432d,
-0xe4134,0x2432c,0xe4148,0xe4725,0xe4142,0x1642f,0x1642b,0x24a55,
-0x24339,0x24334,0x00000,0x24328,0x00000,0x00000,0xe4144,0xe4145,
-0x00000,0xe6676,0x00000,0x24a50,0xe4678,0x24a41,0x24a4c,0xe4728,
-0x24a53,0x16878,0x15f51,0x24a51,0x16873,0xe467e,0xe4724,0xe467a,
-0x16872,0x24a58,0x00000,0x24a42,0x24a4f,0x24a43,0x24a4e,0x16876,
-0x24a52,0x23c27,0xe4721,0x00000,0xe472a,0x24a59,0x24a4a,0x16879,
-0x25061,0x16c77,0xe4723,0x24a57,0x24a56,0x1687b,0x25054,0x16c78,
-0x25055,0xe4722,0x24a46,0x24a47,0x24a44,0x24a49,0x24a45,0x24a5a,
-0x16875,0x16c79,0x16877,0x1687c,0xe467b,0x24a48,0xe4729,0x24a54,
-0xe4c2d,0xe4726,0x24a4d,0xe4c35,0x00000,0x25058,0xe4c38,0x16871,
-0x16c7c,0x25735,0x2505d,0x2505c,0x2505e,0xe4c30,0xe4c2f,0x2505b,
-0x16c7d,0xe4c3b,0x16d25,0x16d22,0xe4c31,0x16d23,0x25056,0x25059,
-0x25063,0x16d2b,0x16d29,0xe4c2e,0x2505a,0x23b7d,0x16c7a,0x25060,
-0x25057,0xe4c3e,0x16d2c,0x2505f,0x16874,0x16d21,0x24a4b,0xe4c3f,
-0xe4c34,0x16d24,0xe4c3d,0x16d28,0x16d2a,0x16d27,0x16d26,0xe4c3a,
-0x16c7e,0x25062,0x16c7b,0x16d2d,0xe4c39,0x00000,0xe6522,0x00000,
-0x00000,0xe4c37,0x00000,0x17061,0x17062,0x25734,0x1706b,0x17068,
-0xe5070,0x1705f,0x17066,0x25736,0x17064,0x1705e,0xe4c32,0x17065,
-0xe5077,0x25733,0x17364,0x17060,0x00000,0x17067,0x17363,0x25732,
-0x25731,0xe5076,0x17069,0xe506f,0x1706a,0xe5079,0x25730,0x2572f,
-0x17365,0x25739,0x17063,0x25737,0xe5075,0x00000,0x00000,0xe5464,
-0x17366,0xe5467,0x1736b,0x25c75,0x25c77,0xe576b,0x17368,0xe576d,
-0x25c78,0x25c74,0xe576c,0x25c76,0x17369,0x1736c,0xe5469,0x25c73,
-0x17367,0x1736a,0x17645,0x25738,0x17644,0x00000,0xe576a,0x1764a,
-0x26160,0xe5770,0x17648,0x17649,0x26163,0x2615f,0x17646,0x2615d,
-0x17838,0x26161,0x00000,0x26162,0x2615e,0xe576e,0x17647,0x2654d,
-0xe5a3b,0x26550,0xe5a3c,0xe5a3a,0x26551,0x2654f,0x26552,0x17839,
-0x2654e,0xe5e31,0x00000,0x2687a,0x1796f,0x26879,0x26878,0x26877,
-0x1796e,0x17970,0xe6523,0x26b5b,0x17a6d,0x17a6c,0xe5f4a,0xe5f4b,
-0x26d4f,0x26d4e,0x26d51,0x17c37,0x17b61,0x26f2c,0x26d50,0xe5f49,
-0xe6032,0x26f2b,0x17c39,0x17c38,0x17c5f,0x27037,0x2707d,0x14545,
-0x00000,0xe2c72,0x23c37,0x2573a,0xe2167,0xe2168,0x1482d,0x2224d,
-0x14a53,0x14a51,0x00000,0x14a52,0x00000,0x22722,0x14d73,0x15149,
-0xe2c74,0x22a68,0xe2c76,0x22a69,0xe2c73,0x1514a,0x22f50,0x00000,
-0x15566,0x15567,0x22f4f,0xe313d,0x00000,0xe3637,0xe3636,0x15a77,
-0x00000,0x15a73,0x00000,0x23569,0x15a7a,0x15a79,0x15a72,0x15a75,
-0x15a78,0x15a74,0xe3634,0x00000,0x23c3b,0x15a71,0x15f54,0xe3b74,
-0xe3b75,0xe3b76,0x15f56,0x15f57,0x23c3a,0x23c3d,0x15f55,0x23c38,
-0x23c3c,0x00000,0x23c39,0xe414b,0x16439,0xe414e,0xe6346,0x24342,
-0xe414d,0xe4730,0x1687d,0x24a5b,0x1706c,0x16d2e,0x25064,0x16d2f,
-0x16d30,0x25066,0x25065,0x25067,0x2573c,0x00000,0x00000,0x2573b,
-0x25c7a,0x25c79,0x1736d,0x1736e,0x26553,0xe5c41,0x00000,0x14546,
-0xe2558,0xe2939,0x00000,0xe3140,0x23c3e,0xe3638,0xe3639,0x00000,
-0x15f59,0x15f58,0x24343,0x00000,0x26164,0x17a6e,0x26f2d,0x14547,
-0x00000,0x15568,0xe3142,0x15a7c,0x15a7b,0x23c3f,0x23c40,0x1643a,
-0x24a5c,0x1687e,0x2573d,0x00000,0x14548,0x14658,0xe293b,0x14d74,
-0x22723,0x00000,0x22a6a,0x1514b,0x15a7d,0xe363a,0x23c41,0x15f5a,
-0x1643b,0x00000,0x25068,0x25069,0x00000,0xe546b,0x25c7b,0x1764b,
-0x2707e,0x14549,0xe293c,0x22724,0x14d75,0x1514c,0xe2c77,0x22a6b,
-0x00000,0x15569,0x22f54,0x22f52,0x22f53,0x1556a,0x22f51,0xe363c,
-0x00000,0xe363f,0xe363d,0x15b21,0x15b22,0x2356a,0x15b23,0x15a7e,
-0x23c42,0xe3b79,0x23c43,0x24344,0x00000,0x00000,0x16922,0x16921,
-0x00000,0x00000,0x25c7c,0x26165,0xe5a3f,0x26555,0x26554,0x2687b,
-0xe2169,0x2213e,0x1514d,0xe3641,0xe4150,0x1454a,0x14659,0xe2251,
-0x1482f,0x1482e,0xe2373,0xe2372,0x14830,0x14831,0x2224f,0x2224e,
-0x22439,0x14a54,0x2243c,0x2243b,0x2243a,0x2243d,0xe263d,0x00000,
-0x00000,0xe625e,0x14d76,0x2272a,0x22726,0x2272f,0xe2943,0xe293e,
-0x14d7d,0xe2942,0x14d7b,0x2272b,0x22727,0x2272e,0x14d7a,0x14e23,
-0x22729,0x22725,0x14e22,0x2272c,0x14d79,0x2272d,0x14d7c,0x14d7e,
-0x22731,0x22730,0x22728,0x14d78,0x14d77,0x14e21,0x00000,0xe2940,
-0xe2941,0x00000,0xe2c7e,0xe2c7a,0x22a70,0x22a76,0xe2d23,0x15153,
-0x15150,0x22a6d,0x22a72,0xe2c7c,0x15156,0x1514e,0x22a71,0x15151,
-0x15154,0xe2c79,0x00000,0x22a74,0xe2c7d,0x1514f,0x22a79,0x15152,
-0xe2d21,0x15155,0x22a6e,0x22a73,0x22a77,0x22a6f,0x22a6c,0xe2d24,
-0xe2d25,0x22a78,0x22a75,0xe2d22,0xe2c37,0x00000,0x00000,0x00000,
-0xe3146,0x15572,0x1556b,0x1556e,0xe314c,0x15571,0xe3144,0x22f57,
-0xe3149,0x1556c,0x22f55,0xe3148,0x15570,0xe314d,0xe3145,0x1556d,
-0xe3143,0x22f58,0x1556f,0x00000,0x00000,0x00000,0x00000,0xe3642,
-0x00000,0x2356e,0x15b25,0x2356d,0x2356f,0x15b24,0x15b29,0x22f56,
-0xe314b,0x2356c,0x23570,0xe3644,0x15b26,0x2356b,0x15b28,0xe3645,
-0x15b27,0xe3c26,0x23c4a,0xe3b7d,0x23c45,0xe3c25,0x15f5b,0x15f5f,
-0x15f5c,0x23c48,0x23c4b,0xe3c23,0x15f5d,0x00000,0x15f5e,0x15f63,
-0x2434d,0x23c49,0x15f61,0x23c46,0x23c44,0xe3b7c,0x15f62,0xe3b7e,
-0x23c47,0xe3c24,0x00000,0x00000,0x16441,0x00000,0x24345,0x1643e,
-0x1643f,0x1643d,0x2434a,0x24349,0x24346,0x16443,0xe415b,0xe4156,
-0x24348,0x15f60,0xe4159,0xe4151,0x2434c,0x24347,0x16440,0x1643c,
-0x16442,0x2434b,0xe4734,0x00000,0xe4735,0x16925,0x00000,0x24a5f,
-0x24a5e,0x24a5d,0x16923,0x00000,0xe4739,0xe4733,0xe4737,0x00000,
-0x16924,0x2506c,0x2506f,0x16d32,0xe4c44,0xe4c46,0x16d31,0x25070,
-0x2506b,0x16d34,0x2506d,0xe4c41,0x16d33,0x2506a,0xe4c40,0x2506e,
-0x17072,0x1706f,0x25746,0x25745,0xe4c43,0x25744,0x2573f,0xe507d,
-0x25740,0xe5123,0x00000,0xe507a,0x17070,0xe507e,0x1706d,0x17071,
-0x2573e,0x1706e,0x25741,0x25742,0x25747,0xe5122,0xe5471,0x25743,
-0xe546f,0xe5470,0x25c7d,0x00000,0xe546c,0xe546d,0x17370,0xe5472,
-0x26168,0x1736f,0x26166,0x26167,0x1764c,0x1783b,0x26556,0xe5a43,
-0x1783a,0xe5a42,0xe6526,0x2687d,0x2687e,0xe5c42,0x17971,0xe5c43,
-0x2687c,0x17a6f,0x00000,0x26f2e,0x17c3a,0x27038,0x27039,0xe613f,
-0x1454b,0x00000,0x14832,0x14833,0x14a55,0xe2641,0x22732,0x15157,
-0x15573,0x15b2a,0x00000,0x00000,0x15937,0x00000,0x15f64,0x15f65,
-0x15e32,0x23c4c,0xe6527,0x16444,0x24a61,0x24a60,0xe5124,0x00000,
-0x1454c,0x14834,0x22733,0x14e25,0xe2945,0x14e24,0xe2d27,0x22a7a,
-0x22a7b,0xe6632,0x22f59,0x22f5a,0x15574,0x15575,0xe3648,0x15576,
-0x23571,0xe3647,0xe3646,0x15b2c,0x00000,0x15f67,0xe3c29,0x15f66,
-0x2434e,0x24641,0x24a62,0x25748,0xe5126,0xe6633,0x1764d,0x17972,
-0x1454d,0x00000,0x1465c,0x1465d,0x1465b,0x1465e,0x1465a,0xe2252,
-0x00000,0x14837,0xe2377,0x22257,0x14836,0x14838,0xe2378,0xe2375,
-0x22252,0x22251,0x22254,0x22253,0x22256,0x14835,0x22250,0x22255,
-0x00000,0x00000,0x00000,0x00000,0xe2648,0x2243e,0x14a5f,0x2243f,
-0x22443,0x14a5e,0xe2649,0x22447,0x22442,0x22445,0x14a57,0x14a58,
-0x14a59,0x14a5a,0xe2645,0x14a61,0xe2644,0x22441,0x14a5c,0x14a62,
-0xe2647,0x22440,0x22446,0xe2642,0x14a5b,0x22444,0x14a5d,0x14a56,
-0x14a60,0xe264a,0x00000,0x00000,0x00000,0xe6257,0x00000,0x00000,
-0x00000,0x00000,0x14e3a,0xe2947,0x22735,0x14e26,0x00000,0x14e30,
-0x14e31,0x14e29,0x14e3b,0x14e2b,0x2273d,0x14e36,0x22738,0x14e2c,
-0x22747,0x22748,0x22740,0x22739,0x14e39,0x22745,0x14e34,0x14e32,
-0xe2952,0x22746,0xe2949,0x22744,0x2273c,0x22734,0x2273b,0x14e2d,
-0xe625f,0x14e33,0xe294a,0x14e27,0x2273f,0x2273e,0x22736,0xe294f,
-0x14e35,0x22742,0x22737,0x14e38,0x22749,0x14e28,0xe2948,0x14e2f,
-0x2273a,0x22743,0x14e37,0x00000,0x14e2a,0x14e2e,0x00000,0x22741,
-0x00000,0x00000,0xe294e,0xe294c,0xe6528,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe6529,0x00000,0x22b3d,0x1515f,
-0x1516c,0xe2d36,0x22b38,0x22b2e,0x15165,0x22b2c,0x1515e,0x22b27,
-0x15168,0x22b34,0x22b21,0x22b23,0xe2d2e,0x00000,0x00000,0xe2d30,
-0x22b26,0x22a7c,0x22b33,0x22b43,0x15163,0x22b28,0x22b3a,0xe2d2d,
-0x22a7e,0x22b41,0x22b42,0x22b45,0x22b3c,0x22b2d,0x22b35,0x15169,
-0x1515c,0x15164,0x15170,0x15159,0x1515b,0xe2d31,0xe2d2b,0xe2d3a,
-0x22b25,0x1516d,0x15166,0x22b3f,0x22b22,0x1516f,0x1516a,0x22b2b,
-0x00000,0x00000,0x1516e,0x22b32,0x22b2a,0x15167,0x22b3e,0x22b36,
-0xe2d2a,0x15161,0x22b44,0x22b29,0x1515d,0x22b3b,0x22b31,0x15162,
-0x22b37,0x1515a,0x22a7d,0x1516b,0x15627,0x15160,0x22b30,0x22b2f,
-0x22b24,0xe2951,0x22b40,0xe2d34,0x22b39,0x00000,0xe2d32,0x15158,
-0xe2d39,0xe2d37,0x00000,0x00000,0x00000,0xe2d38,0xe652b,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe652a,0x00000,0x22f6e,0x1562e,0x22f6f,0xe315d,0x22f63,0x15623,
-0x1562f,0xe3157,0x22f5c,0xe3153,0x22f65,0x22f6d,0xe315b,0x22f5b,
-0x22f76,0x15577,0xe315e,0xe3164,0xe3150,0x22f75,0x22f70,0xe315f,
-0x22f71,0x15621,0x1562c,0x22f67,0xe3156,0x22f68,0x22f72,0x22f69,
-0xe3163,0x22f64,0x22f5e,0x22f5f,0x22f6c,0x22f66,0xe3154,0xe314f,
-0x15578,0x1557c,0x22f74,0x22f60,0x1562a,0x15626,0xe315a,0x00000,
-0x15629,0x15630,0x1557d,0x1562b,0x22f6b,0x1562d,0x1557a,0xe3159,
-0x15579,0x22f5d,0x00000,0x22f61,0x15624,0x22f73,0x22f6a,0x22f62,
-0x15628,0x15625,0xe2d2f,0x1557b,0x1557e,0xe3162,0xe3158,0x00000,
-0xe3161,0xe3160,0xe652d,0x00000,0x00000,0x00000,0xe652c,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x23628,0xe3655,0x23576,0x23577,0x2357b,
-0xe3660,0x2362c,0x23629,0xe364e,0x23622,0x23621,0x15b33,0x23625,
-0x23634,0x23572,0xe365b,0x23635,0x23627,0x23639,0x2362d,0x15b32,
-0x2362b,0x15b2d,0x15b42,0x15b38,0xe3657,0x15b3c,0x15b3b,0x23573,
-0x00000,0x23632,0x23638,0x23630,0x23637,0x00000,0xe3651,0x23624,
-0x23574,0x23636,0x23626,0x15b30,0x15b3d,0xe365a,0x2362f,0x15b36,
-0xe364d,0xe365c,0xe3650,0x2362e,0x23575,0x15b3e,0xe364b,0x15b40,
-0x23631,0x15b41,0x15b2f,0x2357c,0x23633,0xe3654,0xe3478,0x15b35,
-0x15b3f,0x2357e,0x2362a,0x23579,0x2357d,0x15b3a,0x23578,0x15b2e,
-0x15b37,0x15b34,0x23623,0x15622,0x23c63,0x15b31,0xe364c,0xe3652,
-0xe365e,0xe365f,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe3656,0x00000,0xe3c45,0x15b39,0xe3c41,0x23c66,0x23c7c,
-0x23c71,0x15f7b,0xe3c38,0x15f76,0x23c60,0x15f77,0x23c70,0xe3c3e,
-0x23c69,0x23c76,0x15f73,0x23c4e,0x23c78,0x15f69,0x23c56,0x15f6c,
-0x15f6b,0x00000,0x15f7c,0xe3653,0x23c50,0x23c72,0x23c73,0x15f6e,
-0x15f6a,0x23c5e,0xe3c3d,0x15f75,0x23c59,0xe3c32,0x23c74,0x15f71,
-0x23c6c,0x23c79,0x23c53,0x23c58,0x23c52,0xe3c2a,0x15f70,0x23c65,
-0x24364,0x23c54,0x15f74,0x23c5d,0x23c75,0x15f6f,0x23c5a,0x23c57,
-0x23c68,0x15f72,0x15f68,0x15f7e,0x23c6b,0x23c6a,0xe3c31,0xe3c42,
-0xe3c39,0xe3c3b,0xe3c34,0xe3c2f,0x23c4f,0x15f6d,0x23c77,0x23c5f,
-0x23c61,0xe3c37,0x23c6e,0x23c6d,0x23c4d,0x15f78,0x15f7a,0x23c55,
-0x23c5c,0x23c64,0x15f79,0x23c5b,0x23c67,0x23c7a,0x00000,0x23c6f,
-0xe3c3c,0x00000,0x00000,0x00000,0xe3c44,0x00000,0xe3c33,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x23c7b,0x00000,0x00000,
-0x00000,0xe652f,0x23c51,0x00000,0xe652e,0x00000,0xe3c40,0x24378,
-0x1644c,0xe4165,0x24376,0x24361,0x24366,0x2435f,0xe4177,0x24372,
-0x24351,0x24358,0x00000,0x24370,0x2437a,0x24362,0xe4168,0x24355,
-0x24368,0x2436d,0x24359,0xe416b,0x2436a,0x24356,0xe415d,0xe4175,
-0x2435d,0x2435e,0x1644e,0x24371,0x2436f,0xe4173,0x24352,0x24374,
-0xe4174,0x24375,0x24377,0x16452,0x1644a,0xe416f,0x2357a,0x2435a,
-0x2436c,0x2435b,0x16447,0x16457,0x24373,0x16455,0x16451,0x24350,
-0x16449,0xe4179,0x24353,0x16456,0xe4178,0x24363,0x2434f,0xe4176,
-0x1644f,0x24367,0x24357,0x16450,0x24360,0x16446,0x15f7d,0x24369,
-0x23c62,0x24354,0x00000,0xe416d,0x2436e,0x1644b,0x2436b,0x16448,
-0x24365,0x16453,0x2435c,0x24379,0xe416a,0xe417b,0x00000,0x00000,
-0x00000,0x00000,0x1644d,0x2452c,0x00000,0xe4172,0x16454,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x24a70,0x24a6e,0xe473a,
-0x24b26,0x24a6c,0xe473d,0x24a7e,0x16445,0x16928,0x24a68,0x24b25,
-0xe4751,0x24a6d,0x24a7b,0x1692d,0x16926,0xe474e,0x24b23,0xe4746,
-0x24a66,0x24b22,0xe4747,0x16938,0x24a77,0x24b29,0x16936,0x24a6f,
-0x16927,0x24a71,0x24b21,0x16930,0x24a6a,0x16934,0x1692a,0x24a73,
-0x24a69,0x24a63,0xe473e,0x24a7d,0x16931,0x24b28,0x24a64,0x1692e,
-0x00000,0x24a79,0xe6352,0x1692f,0x24a6b,0x24a76,0x24a72,0x24a74,
-0xe4743,0x16929,0x24b27,0x16937,0x24a75,0xe473b,0x24b2a,0x00000,
-0xe473c,0x24a65,0x24a7a,0x1692c,0x16935,0x16933,0x24a67,0x24a7c,
-0x16932,0xe4745,0xe4748,0x1692b,0x24a78,0xe474d,0xe4744,0x00000,
-0xe4c54,0x24b24,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe474c,0x2507c,0xe4742,0x25078,0x25074,0x2512a,0x25127,
-0x16d37,0xe4c64,0xe4c60,0x2512e,0x2507b,0x16d42,0x25124,0xe4c4f,
-0xe4c51,0x25077,0x25123,0x16d3f,0x25137,0x00000,0x25134,0x25126,
-0x25075,0xe4c5f,0xe4c57,0x2512b,0x2512d,0x16d3b,0x25121,0x2507a,
-0x25071,0x16d38,0x16d40,0x00000,0x25130,0x16d41,0x25072,0x25136,
-0x25129,0x2512f,0x16d3e,0xe4c4d,0xe4c50,0x2512c,0xe4c47,0x25133,
-0xe4c5b,0x16d43,0xe4c56,0x16d3d,0x25125,0x25076,0x25138,0x25073,
-0x25131,0x16d3a,0xe4c4a,0x2507d,0xe4c49,0x2507e,0x16d39,0x16d36,
-0x25079,0x16d3c,0xe4c52,0x16d35,0xe4c62,0x25132,0x25135,0x25122,
-0x25755,0xe4c5e,0xe4c59,0x00000,0xe4c61,0xe6530,0x00000,0x00000,
-0x00000,0x00000,0x2574d,0xe512c,0x25749,0x17121,0xe513c,0xe5138,
-0x17074,0x17079,0x17075,0x25757,0x25762,0x17073,0x2574f,0x25758,
-0x25128,0x25759,0xe5128,0xe512b,0x1707a,0xe5140,0x25768,0x1707e,
-0x17123,0x2574b,0xe513b,0x1707d,0xe5131,0x25766,0x25767,0x2575d,
-0x2575c,0x25754,0xe5129,0xe513e,0x2575e,0x25765,0x25764,0xe512f,
-0x17078,0x17076,0x25756,0x25753,0xe5144,0x25750,0x25763,0x17122,
-0x25761,0x1707c,0x1707b,0xe5127,0x2575b,0x00000,0x2574a,0x2574c,
-0x2574e,0x25760,0x2575a,0x17077,0xe512e,0x25751,0xe5132,0x2575f,
-0xe5141,0xe513a,0x00000,0x00000,0x00000,0x00000,0x25752,0xe6531,
-0x00000,0x00000,0xe6532,0x00000,0x00000,0xe5475,0x17378,0x25d31,
-0x17371,0x25d22,0xe547b,0x25d2d,0x17373,0x25d34,0xe5521,0x25d29,
-0xe547c,0x25d24,0xe5476,0x00000,0x25d35,0x25c7e,0x25d2b,0xe5527,
-0x1737a,0x25d30,0x25d36,0x25d2a,0x17372,0x25d2c,0x25d21,0x17379,
-0xe5523,0xe547a,0x25d33,0x25d26,0x17375,0xe5524,0x25d28,0x25d25,
-0x1737b,0x25d27,0x17374,0x17377,0x25d2f,0x25d23,0x25d32,0xe5478,
-0x25d2e,0x00000,0xe5529,0xe5774,0x1764f,0x26173,0x17654,0x17655,
-0xe5777,0xe5821,0xe5776,0x1764e,0x26172,0xe5778,0x2616f,0x26170,
-0x17652,0x2616a,0x2616e,0x17651,0xe577e,0x2616b,0xe5779,0xe5823,
-0xe577d,0xe577a,0x17653,0x17650,0xe5822,0x26169,0x2616d,0x26171,
-0xe577b,0x00000,0xe6533,0x2655c,0x26559,0x26562,0xe5a44,0x26561,
-0x2655f,0x2655a,0xe5a4f,0x1783f,0xe5a45,0xe5a4e,0x00000,0xe5a47,
-0xe5a4d,0x2655b,0x1783e,0x17376,0x2655e,0x1783d,0x26563,0x2655d,
-0x26558,0x2616c,0xe5a48,0xe5a46,0x00000,0x1783c,0xe6534,0x26557,
-0x26924,0xe5c49,0x26923,0x26560,0x17973,0xe5775,0x26927,0x26928,
-0x26922,0x26926,0x00000,0x26921,0xe5c47,0xe6535,0x00000,0x00000,
-0x26b5f,0x26925,0x17a72,0x17a70,0x26b5d,0xe5e35,0xe5e34,0xe5e33,
-0x26b60,0xe5e37,0x26b5c,0x26b5e,0x17a71,0x00000,0xe5f4f,0xe5f4e,
-0x26d53,0x26d54,0x17b62,0x26d52,0x00000,0xe6536,0xe6537,0x26f31,
-0x17c3b,0x26f2f,0x26f30,0x2703a,0xe6074,0x00000,0x17d23,0x27123,
-0x27121,0x27122,0x27124,0xe6140,0xe6165,0xe6141,0x2722b,0x00000,
-0x1454e,0x14839,0xe2379,0x14e3c,0x00000,0x2274a,0xe2953,0xe2954,
-0x22b46,0xe6269,0xe2d3c,0xe3166,0x22f77,0x22f79,0xe3165,0x22f78,
-0xe3167,0x22f7a,0x15b43,0x2363b,0x22f7b,0xe3662,0x2363a,0x2363c,
-0x2363d,0x23c7d,0x16022,0x23c7e,0x23d22,0x16023,0x16021,0x23d21,
-0xe417d,0x24422,0x2437e,0x2437d,0xe417c,0x2437c,0x2437b,0x16458,
-0x24421,0x16939,0x24b2b,0x24b2d,0x1693a,0x24b2c,0x16d45,0xe4c66,
-0x16d44,0x25139,0xe4c65,0xe4c67,0x2576a,0x25769,0x2576b,0xe5146,
-0xe5145,0x17124,0x00000,0x25d37,0x1737c,0xe552b,0x26174,0x17656,
-0x26564,0x17b63,0x1454f,0x1465f,0x1483a,0x14a63,0x14e3d,0x14e3e,
-0xe2955,0xe2956,0x15171,0xe2d3d,0xe3168,0x22f7c,0xe3c49,0xe3c47,
-0x00000,0xe417e,0x16459,0xe4221,0xe4753,0x00000,0x25259,0x17125,
-0x17657,0x14550,0xe2253,0x1483b,0x00000,0x00000,0x2274c,0x14e3f,
-0x2274b,0xe2958,0x22b47,0x15172,0x22b48,0x00000,0x15173,0x00000,
-0x22f7e,0x15632,0x15631,0xe316a,0x23642,0x23640,0x23641,0x2363f,
-0xe3664,0x2363e,0x00000,0x00000,0x23d23,0x23d26,0x16025,0x23d24,
-0x16024,0x23d25,0x00000,0x24423,0xe4222,0xe6354,0x24b2e,0x24b2f,
-0x24b30,0xe4754,0x2513c,0x2513b,0x16d46,0x2513a,0x2513d,0x2576c,
-0x00000,0x00000,0x2576d,0x2576e,0x00000,0x25d38,0x1737d,0x17658,
-0x26565,0x00000,0x17a73,0x2213f,0xe2959,0x15174,0x22b49,0x15633,
-0x00000,0x00000,0x15b44,0xe3665,0x16026,0x23d27,0xe3c4b,0x1645b,
-0x1645a,0xe4226,0x00000,0x24b31,0x24b32,0x16d47,0x16d48,0x25770,
-0x2576f,0x26175,0x26f32,0x14551,0x22140,0x14660,0xe237a,0x14a64,
-0x22448,0xe295a,0x15175,0x1645c,0x14552,0x00000,0x22b4a,0x15176,
-0x22b4b,0x00000,0x1737e,0x14553,0xe6538,0xe6539,0x2274d,0x00000,
-0x22b4c,0xe2d42,0x23025,0x23024,0x23022,0xe316e,0x23021,0x23026,
-0x23023,0xe316c,0xe316d,0x15b45,0x15b46,0xe3666,0x00000,0x16027,
-0x23d28,0x00000,0x23d29,0x23d2a,0xe3c4d,0x00000,0xe653a,0x24427,
-0x24428,0x24426,0xe4228,0x24424,0x24425,0x1645d,0x24b33,0x25140,
-0x2513f,0x2513e,0x25141,0x25772,0x25771,0x17126,0x25773,0x00000,
-0x17421,0x25d39,0xe552d,0x26176,0x26566,0x26d55,0x00000,0x14554,
-0x14662,0x14661,0x00000,0x14e40,0x22141,0x2215f,0x1483c,0x00000,
-0x22258,0x22449,0x2244a,0x14e41,0xe295d,0x2274e,0xe653b,0x15177,
-0x22b4d,0x22b4e,0x00000,0x15634,0x15638,0x23027,0x15637,0x15635,
-0x15636,0x00000,0x23643,0x15b47,0x1602a,0xe3c4e,0x16028,0x16029,
-0x23d2b,0xe4229,0xe422a,0x1693b,0x14555,0x00000,0x22160,0xe2257,
-0x14663,0xe2254,0x00000,0x22163,0xe2421,0x00000,0x14666,0x22162,
-0x14665,0x14664,0x14a65,0x22161,0xe2258,0xe2259,0x22259,0x00000,
-0x00000,0x00000,0x2225d,0x2225f,0x22260,0x14846,0x14847,0x2225c,
-0x14842,0xe237d,0x2225a,0xe2425,0x2225e,0x14843,0xe2655,0x1483e,
-0xe237c,0x1483f,0xe2423,0x14845,0x2225b,0x1483d,0x14a66,0x14840,
-0x14841,0x14844,0x00000,0xe653c,0x00000,0x2245b,0x22459,0x2244c,
-0x14a72,0x22453,0x14a6d,0x2244d,0xe2964,0x22455,0xe2650,0x22452,
-0x14a70,0x22451,0x14a77,0x2245a,0x14a79,0xe2653,0x14a7b,0xe237e,
-0x2244b,0xe2657,0x14a6e,0x2245c,0xe2651,0x14a75,0x14a78,0xe264c,
-0x22765,0x14a68,0x14b21,0x14a76,0x2244e,0x14a6b,0x14a7a,0x22456,
-0x14a69,0x14a6a,0x22763,0x2244f,0x14a71,0x14a7c,0x2245d,0x22450,
-0x14a6f,0xe264d,0x14a74,0x2274f,0x14a7d,0x22457,0x14a73,0xe2963,
-0x14a7e,0x14a67,0x22454,0x14a6c,0x22458,0x22764,0xe264e,0xe2652,
-0xe265c,0xe2659,0xe2656,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe265b,0x14e4d,0x14e5d,0x22756,0x14e54,0xe2d4e,
-0x2276b,0x14e45,0xe296b,0x14e48,0x22762,0x00000,0x22754,0x22758,
-0x14e50,0x14e52,0x2275b,0x14e59,0x14e4b,0x14e49,0x14e4a,0x14e58,
-0x22767,0x14e53,0x2275a,0x2275c,0x14e51,0x14e56,0x2275d,0x2276a,
-0xe296d,0x15178,0x14e5c,0xe6261,0x14e46,0x22769,0xe296c,0x2276d,
-0x22759,0x2276f,0x22760,0x14e4f,0x22755,0x14e4e,0x14e60,0x14e55,
-0xe296a,0x22753,0x22b57,0x14e5b,0x14e5f,0x22761,0x22766,0xe2965,
-0x14e61,0x14e5a,0x14e4c,0x14e42,0xe2969,0x14e47,0xe6260,0x22757,
-0x14e43,0x2276e,0xe2967,0x22751,0x22750,0x2275e,0x22752,0x14e5e,
-0x15639,0x14e57,0x2275f,0x14e44,0xe2d4f,0x15229,0x00000,0x00000,
-0x00000,0x2276c,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2d46,
-0x22b5e,0x22b61,0xe2d50,0x22b64,0x22b59,0xe2d48,0xe2d4a,0x22b67,
-0x22b6a,0x22b6c,0x22b56,0x15179,0x1517e,0x2302c,0x15230,0x22b65,
-0x22b6d,0x22b5d,0x22b55,0xe2d49,0xe2d47,0xe2d4d,0x23047,0x15223,
-0x22b62,0x22b5a,0x22b5c,0x15228,0xe317a,0x22b5f,0x15222,0x22b52,
-0x22b68,0xe2d4b,0x22b6b,0xe2d45,0xe2d57,0x1517d,0xe2d53,0x1522b,
-0x22b4f,0x1522d,0x1517b,0x15231,0x22b69,0x22b51,0x1522e,0x23041,
-0x22768,0x15221,0x1517a,0x22b58,0x22b50,0x1522f,0x15227,0x22b63,
-0x1522c,0x1522a,0x22b5b,0x15224,0x22b53,0x15225,0x15226,0x22b54,
-0x22b66,0x1517c,0x22b60,0x00000,0xe2d55,0xe2d51,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe3177,0xe3173,
-0x2302f,0x15641,0x15646,0xe3179,0xe3226,0xe3176,0x23038,0x2303e,
-0x2303a,0x2302d,0x23030,0x23029,0x2302a,0x1564d,0x1563e,0x23039,
-0x23042,0x15648,0x1563a,0xe316f,0x15643,0x23031,0x15645,0x23032,
-0x2303c,0xe3222,0xe3225,0xe3172,0x15647,0x2304b,0x2302b,0x15640,
-0x1563f,0x1564b,0x23028,0x23049,0x2303d,0x2304a,0x23044,0x23036,
-0x23045,0xe3221,0x2303f,0x23048,0x23046,0x1564c,0x23037,0x1563d,
-0x1563c,0x15644,0x1564a,0x23043,0x15649,0x23034,0x15b48,0xe3178,
-0x2304c,0x23033,0x2302e,0x15642,0x1564e,0x1563b,0xe3227,0x2303b,
-0x23040,0xe317d,0xe317b,0xe317c,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0xe653d,0x00000,0x00000,
-0x00000,0x00000,0x15b6a,0x23645,0x23649,0xe366f,0x15b57,0x15b55,
-0xe367a,0xe3721,0x15b4c,0x23647,0x23646,0x15b60,0xe3c50,0x2364c,
-0x15b5a,0xe3672,0x2365e,0x2366a,0x15b49,0x2365b,0x23654,0x15b6c,
-0x23644,0xe366a,0x23660,0xe366b,0x15b69,0x15b5d,0x15b68,0x15b53,
-0x23650,0x23662,0x2365a,0x15b54,0x15b4e,0x23668,0xe366c,0x23661,
-0x23663,0x15b56,0x15b5e,0x23665,0x2364e,0x2365f,0x23653,0x23667,
-0x15b63,0x15b4b,0x15b61,0x23658,0x23656,0x23657,0x15b58,0x23652,
-0x23651,0x15b4d,0x2364b,0x23669,0x15b4f,0x23655,0x15b6d,0xe3674,
-0x15b67,0x2364a,0x15b64,0x15b62,0x15b6b,0x2365c,0x15b66,0x23035,
-0x2365d,0x15b65,0x23664,0x15b4a,0x23659,0x15b5c,0x2364d,0x15b5b,
-0xe367c,0x15b59,0x15b51,0x15b50,0x23d2c,0x23666,0xe3c5d,0xe3728,
-0x2364f,0xe3726,0xe3723,0x23d41,0xe3670,0x15b52,0xe3677,0xe3724,
-0xe3676,0xe3725,0xe3679,0x00000,0xe367d,0x00000,0x00000,0xe653e,
-0x00000,0x00000,0xe3729,0x00000,0x00000,0x00000,0x00000,0xe3727,
-0xe3c54,0x16047,0x15b5f,0x16035,0x23d3b,0x16043,0xe3c52,0x23d2f,
-0x16032,0x1602e,0x23d4d,0x16034,0x16038,0x16033,0x1603c,0x23d51,
-0x23d48,0xe3c6b,0xe3c6d,0x23d36,0x16041,0x1603b,0x23d42,0x1602b,
-0x23d4e,0x23d47,0x1602f,0x23d3c,0x1603e,0x23d59,0x23d5a,0x00000,
-0x1602c,0x23d4c,0x16040,0x23d40,0x23d32,0x23d33,0x16044,0x23d37,
-0x23d3e,0x23d38,0xe3c5a,0x16042,0x1604a,0x23d34,0x23d2d,0x23d2e,
-0xe3c56,0x23d30,0x16031,0x23d3d,0xe3c6e,0x1603f,0x16048,0xe3c58,
-0xe3c69,0x23d3f,0x23d57,0x23d4f,0x1602d,0x23d55,0x16039,0xe3c66,
-0x16037,0xe3c64,0x23d5b,0x16036,0x23d45,0x23d39,0x23d43,0x1604d,
-0x23d49,0x23d46,0x23d35,0x16049,0x23d53,0x23d50,0x23d58,0x16030,
-0x23d44,0x1604c,0xe3c5b,0x23d4b,0xe423a,0xe3c60,0x1603a,0x1603d,
-0xe3c5c,0x23d4a,0x1604b,0x23d3a,0x23648,0xe3c51,0xe3c6c,0x23d54,
-0x23d52,0x23d56,0x00000,0xe3c62,0xe6542,0x00000,0xe3c63,0x00000,
-0xe3c68,0x00000,0x00000,0x00000,0xe6540,0x00000,0xe633d,0x00000,
-0x23d31,0x16046,0xe653f,0xe6541,0x00000,0x24447,0x24446,0x2442c,
-0x16463,0xe4230,0x24445,0x2442f,0x24430,0x00000,0x1646d,0x2444e,
-0x16468,0x24444,0xe4233,0x24429,0x1646e,0x16464,0x24438,0x2442e,
-0x24431,0x24449,0x1645e,0x24450,0x24448,0x16467,0x2443d,0x16472,
-0xe422e,0xe4236,0x16471,0x1646b,0xe4240,0x00000,0x2444f,0x1645f,
-0x2443b,0x24432,0x2443f,0x2444b,0x16473,0xe4239,0x16461,0x2443a,
-0xe422d,0x24433,0x1646a,0xe4231,0x16469,0x24436,0x24440,0x2444a,
-0x2442d,0x24437,0x16462,0x24441,0x1646f,0x16466,0x24434,0x16465,
-0x2442b,0x24439,0x2444d,0x16045,0x16957,0x2443c,0x24b34,0x2443e,
-0x2444c,0x1646c,0x24435,0x16460,0x16470,0x16d5a,0x2442a,0x00000,
-0x24443,0xe4244,0xe423e,0xe4247,0x24442,0xe423d,0x00000,0x00000,
-0x00000,0x00000,0x00000,0xe4245,0x00000,0x00000,0xe423f,0x00000,
-0xe423b,0xe4246,0x00000,0x24b50,0x16954,0x24b45,0x24b4a,0x16949,
-0xe4756,0x24b36,0x16956,0xe4757,0x16940,0x24b35,0x24b56,0x16958,
-0x24b39,0x24b49,0xe4765,0x24b3b,0x24b59,0x24b55,0x1693e,0x16948,
-0x2515b,0x16955,0x16946,0x24b37,0xe4763,0x24b54,0x1694a,0x24b51,
-0x24b5e,0x24b3d,0x24b46,0xe4c78,0xe475b,0x24b5c,0x24b52,0x16945,
-0xe4c6a,0xe4764,0x24b44,0x1693f,0x1693d,0x1694f,0x00000,0xe475f,
-0x24b42,0x24b3f,0x24b40,0xe475a,0x24b58,0xe475c,0x24b5d,0x24b5b,
-0x16943,0x24b5f,0x16947,0x1694e,0x00000,0x24b38,0x25143,0x24b41,
-0xe475e,0x16941,0x16953,0x16950,0x16944,0x24b4b,0x24b3c,0x16951,
-0x24b4d,0x1694b,0x1694d,0x1693c,0xe475d,0x24b4f,0x24b47,0x24b3a,
-0x1694c,0x24b57,0x24b5a,0x24b43,0x24b4e,0xe4c74,0x16942,0x16d49,
-0x24b4c,0x25142,0xe4762,0x24b53,0xe4761,0x00000,0x00000,0x00000,
-0xe6544,0xe6545,0xe4766,0x00000,0xe6543,0x00000,0x24b3e,0x2514c,
-0x25156,0x16d4c,0x25155,0x25161,0x16d4e,0x25153,0x00000,0x25157,
-0x16d59,0xe4c7d,0x2514e,0x16d51,0xe4c73,0x2515a,0x2577b,0x16d5d,
-0x16d5c,0x2515c,0x2514b,0x25166,0x16d57,0xe4c6b,0x16d4d,0x2515f,
-0x00000,0x25163,0x25168,0x2515d,0x25151,0x16d50,0x16d53,0x16d5b,
-0x16d56,0xe4c75,0x25154,0x24b48,0xe4c7e,0xe4c6c,0x25150,0x25167,
-0x16d52,0xe4c79,0x16d55,0x25169,0x16d4a,0x2515e,0x25144,0x25164,
-0x1742a,0xe4c7a,0x25152,0x00000,0x16d4b,0x2514d,0x16d4f,0x25145,
-0x16952,0x25149,0xe6363,0x25162,0x2514a,0x25148,0x16d54,0xe4c7b,
-0x25160,0xe4c77,0x25147,0x25159,0x25158,0x25165,0x2514f,0x16d58,
-0x00000,0xe6547,0x00000,0x00000,0x00000,0xe6546,0x2577e,0xe5156,
-0x17133,0x17129,0x2582c,0x25776,0x1712b,0x25824,0x17132,0x1712d,
-0x25822,0x25d3b,0x25828,0x2582e,0x25827,0x25774,0x25825,0x25830,
-0x25832,0x17128,0x25831,0x1712e,0x17134,0xe5154,0x17131,0xe5158,
-0x2582b,0x17130,0x25826,0xe514d,0x25778,0x2577d,0xe5150,0x2582a,
-0x1712f,0x1712c,0x17127,0x1712a,0x2577c,0x00000,0x25146,0x25777,
-0x2577a,0x2582d,0x25821,0x25775,0x25d3a,0x2582f,0x25779,0x25829,
-0xe4c71,0x00000,0x00000,0xe5155,0x25d3d,0x1742e,0xe5530,0xe552f,
-0x17422,0xe5535,0xe5536,0x17426,0x25d3f,0x25d45,0x25d43,0x17424,
-0x17425,0x1742c,0x25d46,0x25d3e,0x17427,0xe5531,0x25d42,0x25d41,
-0x25d47,0x1742d,0xe5537,0x17428,0x1742b,0x25d40,0x1742f,0x17429,
-0x17430,0x17423,0x25d44,0xe5a55,0x25d3c,0xe5159,0xe5539,0x26225,
-0xe6548,0x00000,0x1765d,0x26222,0x26224,0xe5828,0x1765b,0x2617e,
-0x26221,0x2617a,0xe582a,0xe5827,0x25823,0x2617b,0x1765c,0x26177,
-0xe5826,0x17659,0x26226,0x1765a,0x26178,0x26179,0x2617d,0x1765f,
-0xe5829,0x1765e,0x00000,0xe582b,0x2617c,0x17845,0x2656a,0x26570,
-0x17846,0x26567,0x17843,0x17840,0x26572,0x17844,0xe5a52,0x17841,
-0x26569,0x2656c,0x2656d,0x2656e,0x26571,0xe5a54,0x26223,0x26568,
-0x17842,0x2656f,0x26934,0x2656b,0xe5a53,0xe654a,0xe6549,0x2692b,
-0x17975,0x2692e,0x17976,0x26937,0x2692d,0x2692a,0xe5c51,0x2692c,
-0x26930,0x26933,0x26932,0x26936,0x26929,0xe5c4f,0x17974,0x26931,
-0x26935,0x26938,0x2692f,0x26b61,0x26b62,0x26b66,0x26b67,0xe5e3c,
-0x26b64,0x26b65,0x26b63,0xe5e3a,0x17a74,0xe5e3b,0x00000,0x00000,
-0x00000,0x17b64,0x26d59,0xe6036,0xe5f52,0x26d56,0x26d57,0x26d58,
-0x17b65,0xe6037,0x26f34,0x26f33,0xe654b,0x2703d,0x17c60,0x2703b,
-0x2703e,0x2703c,0x27125,0x17d24,0x17d32,0x27171,0x2715b,0xe6179,
-0x27170,0x2723e,0x2723f,0x14556,0x00000,0x00000,0xe2428,0xe2426,
-0x14848,0x22261,0xe2427,0xe242b,0x2245e,0xe2662,0x14b22,0xe265f,
-0x14b25,0xe265e,0x2245f,0xe2663,0x14b23,0x14b24,0xe2660,0x00000,
-0x00000,0xe2977,0x22778,0x2277a,0x22775,0x22772,0x22774,0xe2974,
-0xe2970,0xe2975,0x14e65,0xe296f,0xe2979,0xe2976,0x14e63,0xe2972,
-0xe2971,0x22776,0x14e64,0x22773,0x22770,0x14e62,0x22777,0x00000,
-0x22771,0x14e66,0x22779,0x00000,0x00000,0x00000,0x00000,0x22b6f,
-0xe2d5e,0x22b73,0xe2d5c,0xe2d5a,0x1523a,0xe2d58,0xe626a,0xe2d65,
-0xe2d62,0x22b76,0xe2d5f,0x15232,0x15235,0x15237,0x15239,0x15236,
-0x22b72,0x22b71,0xe2d64,0x15234,0x22b74,0x22b75,0xe2d63,0x22b6e,
-0x15238,0xe2d68,0x15233,0xe2d5d,0x00000,0x00000,0x22b70,0xe654d,
-0x00000,0x00000,0x00000,0x00000,0xe3228,0x2305a,0x2305b,0x2305c,
-0x15653,0xe6279,0x1564f,0x23051,0xe322a,0x23059,0x2305e,0x15654,
-0xe322b,0x2304f,0x23055,0x2304e,0x23058,0xe3231,0xe322f,0x23054,
-0x15650,0x15652,0x2305d,0xe3229,0x2304d,0x23050,0x23056,0xe322d,
-0x23057,0x2305f,0x23053,0xe322c,0x15651,0xe654f,0x00000,0x00000,
-0x00000,0x00000,0xe654e,0x00000,0x00000,0x00000,0xe3230,0x15b72,
-0x23671,0xe3730,0xe3732,0x23673,0x2366f,0xe372f,0x2367b,0x2366d,
-0x2367a,0x15b6e,0x2366b,0x23d5f,0x23675,0x15b71,0xe3735,0x23676,
-0x23679,0xe372e,0x2367d,0xe372c,0x23672,0x00000,0x23677,0xe372d,
-0xe3731,0x15b6f,0x15b70,0x2367c,0x23670,0x2366c,0x2367e,0xe3733,
-0x23674,0xe6550,0xe6551,0x23678,0x00000,0x00000,0x00000,0x2366e,
-0x00000,0x1604e,0x1604f,0x23d69,0x16055,0xe3c74,0x23d5d,0x23d66,
-0x23d5c,0x16052,0x23d64,0x23d62,0xe3c7d,0x23d63,0x16050,0xe3c7c,
-0x23d67,0x00000,0xe3c6f,0xe3c7a,0xe3c72,0xe3d21,0x23d60,0x23d5e,
-0x16051,0x23d61,0x23d65,0xe3c7b,0xe3c79,0xe3c71,0x16053,0xe3c73,
-0xe3c77,0xe6553,0x23d68,0xe6554,0x00000,0xe6555,0x00000,0xe6552,
-0x00000,0x24456,0x2445d,0x2445f,0x24465,0xe4257,0x16522,0x24451,
-0xe424c,0x16478,0xe424e,0x24460,0x1647d,0x24466,0x16474,0xe4251,
-0x24463,0xe4258,0x24453,0x24464,0x24452,0x00000,0x16524,0xe4252,
-0x2445e,0x16475,0x24467,0xe483c,0x1647a,0x24457,0x16521,0x24462,
-0x24455,0x2445c,0x24458,0x24454,0x16477,0x1647e,0x1647c,0x16479,
-0x16523,0x16476,0x2445b,0xe424f,0x1647b,0xe4259,0x16054,0xe4249,
-0x24461,0xe6559,0x24459,0x00000,0xe4253,0xe6557,0xe6558,0xe6556,
-0x2445a,0x00000,0x00000,0x24b67,0xe476f,0x1695b,0xe476e,0xe476c,
-0x24b63,0x24b69,0x24b65,0xe4770,0x1695d,0x24b64,0x24b68,0x24b60,
-0xe4772,0x24b62,0x1695c,0xe476a,0xe476d,0xe476b,0xe4768,0x24b66,
-0x24b61,0xe4767,0x1695e,0xe655b,0x16959,0x00000,0xe655a,0x24b6a,
-0x00000,0x1695a,0x2516f,0x2516c,0x25178,0x25172,0x25174,0x16d5e,
-0x2516e,0x25176,0xe4d2a,0xe4d24,0x25175,0x25173,0xe4d29,0x25179,
-0x16d61,0x25170,0x25177,0xe4d28,0x16d5f,0xe4d25,0xe4d22,0x2516b,
-0x2516d,0x16d60,0x2516a,0x2517a,0xe655c,0x25171,0xe5162,0xe515a,
-0x25836,0x1713b,0xe5160,0xe515c,0x25841,0x2583f,0x17135,0x25835,
-0x25838,0x25839,0x25834,0x1713f,0x17140,0x25833,0x25842,0x2583d,
-0x17139,0x17136,0x2583c,0x2583a,0xe5163,0xe6374,0x1713c,0x2583e,
-0x17137,0xe515e,0x17138,0xe5166,0x2583b,0x1713a,0x25837,0x00000,
-0x25840,0x1713d,0x25843,0x25844,0x1713e,0xe655d,0xe655e,0x17432,
-0x17439,0x25d48,0x25d4e,0xe553c,0x25d4c,0x17435,0x17434,0x17431,
-0x25d4a,0xe553e,0xe5543,0xe5540,0x17437,0x17436,0x17433,0xe5541,
-0x25d4d,0x25d49,0x25d4b,0xe5542,0x17438,0x00000,0x00000,0x00000,
-0x17663,0x26229,0xe582d,0x17660,0x17661,0x2622b,0x17662,0x26228,
-0xe582e,0x26227,0x26576,0x2622a,0xe5a56,0x26577,0x17847,0x26575,
-0xe5a57,0x00000,0x26574,0xe5c59,0x26573,0x17848,0xe655f,0xe5c56,
-0x17977,0xe5c58,0xe5c55,0x26939,0x2693a,0xe5a58,0xe5c53,0xe5c57,
-0xe6561,0x26b6a,0x26b69,0x17a75,0xe5f53,0x26b68,0x26d5a,0x26d5b,
-0xe5f54,0xe6039,0x26f35,0x2703f,0xe6143,0xe6142,0x27126,0x2722c,
-0x17d46,0x27240,0x14557,0x00000,0x14e67,0x14e68,0xe2d69,0x00000,
-0x1523b,0x00000,0xe3d22,0x00000,0x00000,0x1743a,0x14558,0x00000,
-0x14e69,0x15655,0x16525,0x14559,0xe2d6b,0x15b73,0x1695f,0x22142,
-0xe297c,0x22b77,0x23060,0x00000,0x24b6b,0x00000,0x1743b,0x1455a,
-0x14e6a,0x22b78,0x22b79,0x23d6a,0x16056,0x00000,0xe425d,0x24468,
-0xe425c,0xe425b,0x16526,0x24b6c,0x00000,0xe4d2e,0x16d62,0xe4d2d,
-0x17849,0x1455b,0x23d6b,0x1455c,0x00000,0x1484a,0x22262,0x14849,
-0x14b28,0x14b27,0x14b26,0x22460,0xe2664,0xe2a21,0xe2a22,0x14e6b,
-0xe2a23,0x14e6c,0x2277b,0x00000,0x22b7a,0xe2d6d,0x22b7d,0x1523d,
-0x22b7b,0x00000,0x1523c,0x22b7c,0x1523e,0x00000,0x23063,0x23062,
-0x23061,0x15656,0xe3236,0x23722,0x23723,0x15b74,0x23721,0x23724,
-0x16058,0x15b75,0xe3d24,0xe3d23,0x16057,0x23d6f,0x23d6e,0xe3d25,
-0x23d6c,0x23d6d,0x00000,0x23d70,0x2446a,0x24469,0x2446d,0x00000,
-0x2446c,0x2446b,0x16960,0x24b6f,0xe4775,0x24b6e,0x16961,0x24b6d,
-0x2517b,0xe4d2f,0x2517c,0x16d63,0x00000,0x25845,0x25846,0x00000,
-0x00000,0x2657c,0x1784a,0x2657b,0x2657a,0x26578,0x26579,0x17a76,
-0x2693b,0x26d5c,0x27127,0xe617b,0x1455d,0x00000,0x22164,0x14667,
-0x22165,0xe242c,0xe242d,0x00000,0x22263,0x22264,0xe266b,0x00000,
-0x00000,0xe2669,0x22466,0xe2666,0xe2667,0x22462,0xe266a,0x22461,
-0x14e6d,0x22465,0x14b2a,0x22463,0x14b29,0x22467,0x22464,0xe2668,
-0x00000,0x22821,0x22b7e,0x2277d,0x22826,0xe2a26,0x14e6e,0xe2a2a,
-0x14e71,0x22827,0x22823,0xe2a27,0x22824,0x00000,0x2277c,0x14e70,
-0x2277e,0x14e6f,0x22825,0xe2a28,0x22822,0x00000,0x00000,0x22c24,
-0x15240,0x15241,0xe2d75,0x22c27,0x22c21,0xe2d74,0x22c26,0xe2d70,
-0x22c22,0x1523f,0x22c25,0x22c23,0xe2d73,0xe2d71,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x23069,0x23066,0xe3238,0x23068,0x1565b,
-0x1565a,0x15658,0x23065,0x2306a,0x15657,0x15659,0x23067,0x2372c,
-0x23064,0x2306b,0xe3239,0x00000,0x00000,0x00000,0xe3d26,0x23727,
-0x2372b,0x00000,0x2372a,0x23d72,0x23d7d,0x00000,0xe373b,0x2372d,
-0xe373a,0x23728,0x23d71,0x15b79,0x00000,0x00000,0x15b78,0x23726,
-0x23729,0x15b7a,0xe3739,0x15b77,0x15b76,0x23725,0x2372e,0x00000,
-0x00000,0x00000,0x23d74,0x23d7b,0xe3d27,0x1605a,0x23d7a,0x23d77,
-0xe3d2e,0x1605c,0xe3d29,0xe3d2b,0xe3d2a,0x23d79,0xe4261,0xe3d2d,
-0x23d73,0x23d75,0x23d78,0x23d76,0x1605b,0x23d7c,0x16059,0x16527,
-0xe3d28,0x00000,0x24471,0x24470,0x2446e,0x00000,0x1652a,0x16529,
-0x24472,0xe425f,0x2446f,0x24b70,0x16962,0x16528,0xe4262,0xe6562,
-0xe6563,0x24474,0x24473,0xe4d30,0x24b73,0x24b71,0x16d64,0xe4779,
-0x16963,0x24b72,0x2517e,0xe4778,0xe477a,0xe4777,0x00000,0x16d65,
-0x2517d,0x25228,0x25227,0x25225,0x00000,0x25224,0x25221,0x25222,
-0x25223,0x25226,0x25229,0x00000,0x00000,0x2584b,0x25848,0x25849,
-0x17141,0x25847,0x2584d,0x2584c,0x2584a,0x00000,0x25d50,0x25d51,
-0x1743c,0xe5549,0x1743d,0x25d4f,0x00000,0x17665,0x2622c,0x17664,
-0x1784b,0x00000,0x1784c,0x17978,0x2693d,0x2693c,0x26b6b,0x26d5d,
-0x17b66,0x26f37,0x26f36,0x26f38,0x14668,0x22c28,0x1565c,0x15b7b,
-0x2372f,0x14669,0x22166,0x1455e,0xe225a,0xe216b,0x22265,0xe242f,
-0x00000,0x00000,0x2246c,0x2246a,0x2246b,0x22468,0x14b2b,0x22469,
-0xe266e,0x00000,0x00000,0x00000,0xe2a33,0x2282f,0xe2a2d,0x14e74,
-0x2282d,0x22829,0x2282c,0xe2a2c,0x22828,0x14e76,0x2282b,0xe2a2b,
-0x14e73,0x14e72,0xe2a32,0x14e75,0x2282e,0x2282a,0x00000,0xe2a2f,
-0x00000,0x00000,0x15245,0x15248,0x22c30,0x22c2f,0x22c2e,0x15242,
-0x22c37,0x22c2d,0x00000,0x15244,0x23070,0xe2d78,0x22c34,0x22c32,
-0x15247,0xe2d7b,0x22c2a,0x22c35,0xe2d77,0x22c2c,0x22c36,0x22c33,
-0x22c2b,0xe2d7a,0x15243,0x22c38,0x22c29,0x15246,0xe2d7e,0xe2d79,
-0xe2d7c,0x00000,0x23075,0x2306c,0x23077,0xe323e,0x2306f,0x2307a,
-0x2307b,0x2306d,0x23079,0x23076,0x23074,0x23078,0x15662,0xe3240,
-0x15660,0xe3247,0xe323c,0x23072,0xe3246,0x2306e,0xe3241,0x23071,
-0x2307c,0x23073,0x15661,0x22c31,0xe323d,0x1565d,0x1565f,0xe6564,
-0x00000,0x00000,0x00000,0xe373d,0x2373d,0x23732,0x23730,0xe3d38,
-0x23731,0xe323f,0x23738,0xe3740,0x23739,0x23735,0x15c22,0x2373a,
-0x23737,0x23734,0xe373c,0x15b7e,0x23733,0x15b7c,0x15c21,0x23736,
-0x2373e,0x1565e,0x15b7d,0x2373c,0x2373b,0x15c23,0x00000,0x00000,
-0x00000,0x00000,0xe6565,0x00000,0xe3d36,0xe3d3a,0x23e24,0xe3d2f,
-0xe3d3b,0xe3d32,0x23e25,0x16066,0xe3d39,0x23e2b,0xe426d,0xe3d35,
-0x23e2d,0x23e26,0x16060,0x23e2a,0x23e29,0x16061,0x16067,0xe4264,
-0x16068,0x23e2c,0x1605e,0x23e23,0x23e21,0x23e27,0x23d7e,0x16065,
-0x23e22,0x23e28,0x23e2e,0x1605f,0x16064,0x16062,0x16063,0x00000,
-0xe3d33,0xe3d3c,0x1605d,0xe6566,0xe3d37,0xe4268,0xe4275,0x16531,
-0x2447b,0x16530,0x24521,0xe426f,0x24475,0xe4274,0x24522,0xe426e,
-0xe4266,0xe4271,0x24476,0x24477,0xe4273,0x24523,0x2447e,0x2447c,
-0x2447d,0x24479,0x24478,0xe4267,0x24524,0x1652d,0xe426b,0x2447a,
-0xe4270,0x16532,0x1652c,0x16533,0x16534,0xe426a,0x1652f,0x1652e,
-0xe4825,0xe477e,0x24b74,0x16965,0x16964,0xe477c,0xe477d,0x24b79,
-0xe4822,0x16d66,0x16966,0xe4821,0xe477b,0x16968,0x24b7a,0x1652b,
-0x16967,0x24b76,0x24b78,0x24b75,0xe4827,0x24b77,0xe4823,0x00000,
-0x00000,0x25233,0xe4d31,0xe4d3b,0x25232,0x2522f,0x16d69,0x2584e,
-0x16d6a,0x2522e,0xe4d39,0x16d68,0xe4d36,0x25230,0x2522d,0x2522a,
-0x25231,0x2522b,0x2522c,0x16d67,0xe4d35,0xe6568,0x00000,0x00000,
-0x25d55,0x00000,0x25852,0xe4d3a,0x25851,0x25853,0xe516a,0x25d52,
-0x17144,0xe6375,0x2584f,0xe5167,0x17142,0xe516c,0x17146,0x17145,
-0x25850,0x25854,0xe516b,0x17143,0xe6567,0x25d59,0x17440,0x17666,
-0x17441,0x1743e,0x25d56,0x25d54,0xe554f,0x25d57,0xe554b,0x25d5a,
-0x1743f,0x25d58,0x25d53,0xe554d,0xe6569,0x2622f,0x26232,0x26621,
-0x2622d,0xe582f,0x2693e,0x26233,0xe5830,0x1784d,0x26231,0x17667,
-0x2622e,0x26230,0x26234,0x26622,0xe5a5a,0x2657e,0x00000,0xe5a5c,
-0xe5a5d,0xe5a5b,0x1784e,0x2657d,0xe5c5e,0xe5c5c,0xe5c5f,0x17979,
-0xe5c5d,0xe5c60,0x00000,0xe5e3d,0x17a78,0x26d5f,0x17a77,0x26d61,
-0x26d5e,0x26d60,0x17c3c,0x27040,0x1466a,0x22830,0x2307d,0x2307e,
-0x15c24,0x24525,0x17147,0x1784f,0x17b67,0x27041,0x1466b,0x00000,
-0x22831,0x12322,0x00000,0xe2e22,0x22c39,0xe2e21,0x22c3a,0xe2e24,
-0x00000,0x00000,0x00000,0xe3248,0x23121,0x23122,0x15c25,0x15c26,
-0x00000,0xe3d3d,0x00000,0x23e2f,0x00000,0x24528,0x24527,0x24526,
-0x24b7b,0xe4277,0x24b7c,0x24b7d,0x16969,0x00000,0xe4828,0x25235,
-0x25234,0xe4d3d,0xe516d,0x25855,0x17148,0x17149,0xe516e,0x25d5e,
-0x25d5b,0x25d5c,0x25d5d,0x26236,0x26235,0x17668,0x26623,0x26b6c,
-0x1466c,0x00000,0x15249,0xe3744,0x15c27,0x24529,0xe4278,0x1466d,
-0x00000,0x23123,0x15c28,0xe3745,0xe3d3e,0x16069,0x1606a,0x00000,
-0x1466e,0x1466f,0x22266,0x14b2d,0x14b2c,0x1524a,0x22c3b,0x23e30,
-0x14670,0x14671,0x14672,0x14673,0x00000,0x00000,0x00000,0x14b2e,
-0x14b2f,0x2246e,0x2246d,0xe2a37,0x00000,0x14e77,0x22834,0x22832,
-0x22833,0xe2a38,0xe2a35,0x00000,0xe2a36,0x00000,0xe2e27,0x22c3c,
-0x22c3d,0xe2e25,0xe2e28,0x1524e,0x1524c,0xe2e2a,0x1524d,0x1524b,
-0xe2e26,0x00000,0x00000,0x00000,0x15663,0xe324e,0xe324d,0xe3250,
-0xe324f,0x15667,0x15666,0x23124,0x15665,0x15664,0xe3251,0x23125,
-0x00000,0xe3746,0x15c2b,0x23740,0x2373f,0x15c29,0x15c2a,0xe3749,
-0xe3747,0x00000,0x1606c,0x1606b,0x23e32,0xe3d43,0xe3d42,0x23e31,
-0x15c2c,0xe3d44,0x00000,0x00000,0x00000,0x00000,0x16535,0x2452b,
-0x16536,0x2452a,0xe427b,0x00000,0x00000,0x24b7e,0x25236,0x16d6b,
-0x25856,0xe5170,0x00000,0xe5552,0x25d5f,0x00000,0x17851,0x17850,
-0x00000,0xe5c62,0x17b68,0x14674,0x22835,0x00000,0xe3d45,0x15c2d,
-0x24c21,0x1696a,0xe225b,0xe2673,0x2246f,0x22470,0x00000,0x00000,
-0x22836,0x14e79,0x14e7a,0xe2a3a,0x00000,0x14e78,0xe2a3b,0x00000,
-0x00000,0x00000,0x15252,0x15253,0x15250,0x15251,0xe2e2b,0x22c3e,
-0xe2e2f,0x00000,0x22c3f,0x1524f,0x00000,0x00000,0x00000,0x00000,
-0x23126,0xe3257,0x1566b,0x1566c,0xe3255,0x15c30,0x2312c,0x00000,
-0x15671,0x1566f,0x2312d,0x23128,0x1566e,0x1566d,0x15668,0x2312b,
-0x2312a,0x23127,0x15670,0xe3252,0x23129,0x15669,0x00000,0x1566a,
-0x00000,0x00000,0x15c31,0x23744,0x23745,0x15c32,0x23741,0x23743,
-0x23747,0x23746,0x23742,0xe374a,0x15c2e,0x15c2f,0x00000,0x23e3a,
-0x16071,0x16070,0x23e34,0x1606e,0x00000,0x23e37,0x16072,0x23e38,
-0x16073,0x23e35,0x1606d,0x1606f,0x23e39,0xe3d47,0x23e36,0x23e33,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x24538,0xe427c,0x2452d,
-0x16538,0x1653b,0x1653a,0x1653f,0x1653e,0x24539,0x24537,0x24530,
-0x24534,0x24533,0x1653c,0x24536,0x24532,0x2453a,0x24531,0x1653d,
-0x16537,0x16539,0xe427d,0x2452f,0x00000,0x00000,0x00000,0xe482b,
-0x24c23,0x1696e,0x24c27,0x1696d,0x24c24,0x1696c,0xe4829,0x2452e,
-0x24535,0x24c26,0x00000,0x1696f,0x24c28,0x24c25,0x24c22,0x00000,
-0x00000,0x25239,0x2523d,0x2523f,0x2523b,0x2523a,0x25238,0x16d6e,
-0x16d6c,0x16d71,0x16d72,0x2523c,0x16d6f,0x25237,0x16d70,0x1696b,
-0x2523e,0x16d6d,0x00000,0x00000,0xe5171,0x25858,0x00000,0x25857,
-0x2585f,0x25859,0x2585e,0x2585b,0x1714a,0x2585d,0xe5173,0xe5172,
-0x1714b,0x00000,0x1714c,0xe5174,0x2585c,0x2585a,0x00000,0x00000,
-0x00000,0x00000,0x17443,0x25d60,0xe5555,0xe5553,0x17442,0x25d63,
-0x25d61,0x25d62,0x00000,0x00000,0x17444,0x00000,0xe5554,0xe5834,
-0x2623a,0xe5833,0x1766b,0x2623b,0x00000,0x00000,0x17669,0x2623c,
-0x1766a,0x26239,0x2623d,0xe5832,0x26237,0x00000,0x00000,0x17852,
-0x26624,0x17853,0x1797a,0x00000,0x26238,0x1797b,0x00000,0xe5e3f,
-0xe5e3e,0x17a79,0x26b6d,0x00000,0x17b6a,0x26d62,0x17b69,0xe603b,
-0x26f39,0x17c61,0x17c62,0xe656a,0x00000,0x2723a,0xe225c,0xe656b,
-0x15254,0x22c40,0x00000,0x16074,0x16075,0x14675,0x1484b,0x22267,
-0xe2674,0x22471,0x14b30,0xe2676,0x14e7b,0x00000,0x15255,0x15256,
-0x15257,0x23749,0x2312e,0x15672,0x00000,0x00000,0x15c33,0x23748,
-0xe374d,0x00000,0x23e3c,0x16077,0xe3d4c,0x23e3b,0x16076,0xe427e,
-0xe4321,0x2453b,0x16d73,0x25243,0x25240,0x25241,0x25242,0x00000,
-0x00000,0xe5176,0x00000,0xe5556,0x25d64,0xe5557,0x2623e,0x00000,
-0x00000,0xe5a5e,0x26940,0x2693f,0x00000,0x26d63,0x14676,0x22837,
-0x15673,0x00000,0x00000,0xe3d4d,0x16078,0x2453c,0x00000,0xe4830,
-0x24c29,0xe482e,0x16d74,0x25860,0xe656c,0x2623f,0x26941,0x14677,
-0xe2677,0xe2678,0x14e7c,0x1525a,0x22c41,0x1525b,0x15259,0xe2e32,
-0x15258,0x2312f,0x15674,0xe325a,0xe325b,0x15675,0x15676,0x00000,
-0x00000,0x00000,0x15c35,0x2374a,0x15c34,0xe3750,0xe3752,0xe3751,
-0x00000,0xe3d4f,0x23e3d,0x15c36,0x16079,0x2453d,0x16540,0x16541,
-0x00000,0x16970,0xe4831,0x16971,0x16d75,0x1714e,0x25861,0x1714d,
-0x00000,0x25d65,0x17445,0xe5835,0x26240,0x26942,0x14678,0x14b31,
-0x2283a,0x22839,0x14e7d,0x22838,0x14e7e,0x2283b,0x00000,0x22c47,
-0x1525e,0x1525d,0x22c49,0x22c48,0x15262,0xe2e35,0x15261,0xe2e33,
-/* 0x7700 */
-0x00000,0x1525c,0x00000,0x22c43,0x22c44,0x22c45,0xe626c,0x15263,
-0x22c42,0x1525f,0x22c46,0x15260,0x00000,0x00000,0xe3264,0xe325f,
-0x23132,0x23136,0x23134,0x23133,0x00000,0x23137,0xe325e,0x00000,
-0xe3268,0x23138,0x23139,0x23131,0x00000,0x23130,0xe3759,0x15678,
-0x15679,0xe3267,0x2313a,0x23135,0xe3265,0x23753,0xe3755,0x2313b,
-0x1567a,0x15677,0xe325c,0xe3263,0x00000,0x2374d,0x00000,0x2374c,
-0xe3753,0x2374e,0x2374f,0x23751,0x23750,0x23755,0x15c3a,0x15c37,
-0x15c3b,0x2374b,0x15c3c,0x23754,0x15c39,0x23752,0x15c38,0xe3262,
-0xe3757,0x00000,0xe3d56,0xe3d53,0x23e40,0x23e42,0x23e3e,0x23e3f,
-0xe3d51,0xe3d52,0x23e43,0x23e45,0x23e46,0x23e41,0x23e44,0x1607a,
-0x00000,0x00000,0x24541,0xe4327,0x24546,0x2453e,0x24542,0x00000,
-0xe4328,0x24547,0x24543,0x16542,0x1654a,0xe4325,0x16545,0x2453f,
-0x24540,0x16975,0x1654d,0x16546,0xe4326,0x1654b,0x16544,0x24545,
-0x1654c,0x24544,0x16548,0x16543,0x16549,0x24548,0x24c2e,0x24c30,
-0x00000,0xe4839,0x00000,0x00000,0xe4833,0xe4836,0xe4835,0xe4834,
-0xe4838,0x16547,0xe483b,0xe483d,0x24c2b,0x16973,0x24c31,0x16974,
-0x24c2f,0x24c2a,0x24c2d,0x24c32,0x16972,0x24c2c,0x00000,0x16d77,
-0x25247,0x25246,0xe4d44,0x16d7a,0x16d78,0x25244,0x16d76,0x25245,
-0xe4d46,0x16d79,0x00000,0x00000,0x00000,0x25869,0xe517b,0x2586b,
-0xe5179,0x2586a,0x25862,0x25866,0x25865,0x25863,0x17150,0x17151,
-0x1714f,0x25864,0x25867,0x25868,0xe5559,0x17152,0xe5558,0x1744a,
-0x25d6d,0xe555b,0x17447,0x25d67,0x17449,0x1744b,0x00000,0xe555c,
-0x17448,0x25d6c,0x25d68,0x17446,0x25d6b,0x25d66,0x25d6a,0x25d69,
-0xe5836,0xe5838,0x26242,0x1766e,0x1766f,0x1766c,0xe583b,0x1766d,
-0xe583a,0xe5839,0x26241,0x00000,0x26627,0xe5a60,0xe5a5f,0x17854,
-0x00000,0x26625,0x26626,0x00000,0x26943,0x26946,0x26944,0x26945,
-0x26b6e,0xe5e42,0x00000,0x17a7a,0x26f3a,0x27042,0xe6432,0x17c63,
-0x27128,0x27129,0x17d33,0x14679,0x15264,0xe3269,0x23e47,0xe3d57,
-0x24549,0x00000,0x1467a,0x14b32,0x00000,0x14f21,0xe2e36,0x22c4a,
-0x22c4b,0x1567b,0x00000,0x00000,0x23e48,0x1607b,0x1654e,0x1744c,
-0x25d6e,0x26628,0x26947,0x1467b,0xe267b,0xe267c,0x00000,0x22841,
-0x2283c,0x2283e,0x22840,0x2283f,0x2283d,0x14f22,0x00000,0x00000,
-/* 0x7800 */
-0x00000,0x00000,0x15265,0x22c54,0xe2e39,0x22c4f,0x22c4c,0xe2e3b,
-0xe2e3e,0x22c53,0xe2e37,0xe2e3a,0x15267,0x15268,0x22c52,0x22c51,
-0x22c50,0x22c4d,0x22c4e,0x22c55,0x15266,0xe2e3d,0x00000,0x00000,
-0x00000,0xe656d,0x00000,0xe656e,0x00000,0x15721,0xe667c,0x15727,
-0x15726,0x23144,0x2313e,0x2313c,0xe326c,0x15724,0x2375c,0x1567d,
-0x23141,0x23145,0x23147,0x23143,0x2313d,0x15725,0x23142,0x23140,
-0x1567c,0x23148,0x15728,0x23146,0x15722,0x2313f,0xe326d,0x15723,
-0x1567e,0x00000,0x00000,0x00000,0x00000,0xe656f,0x00000,0x00000,
-0x00000,0x00000,0xe3762,0x15c3e,0x00000,0x2375d,0xe3763,0xe375d,
-0x23756,0x23758,0x2375a,0xe375f,0x2375b,0x23759,0x15c3f,0xe3761,
-0x2375e,0xe3760,0x23757,0xe6570,0xe6571,0x00000,0x00000,0x00000,
-0xe6572,0x00000,0x00000,0x00000,0x23e4c,0x1607c,0x23e54,0xe3d5c,
-0x23e49,0x00000,0x23e55,0xe3d59,0x23e4a,0x23e4b,0xe3d5d,0x00000,
-0x23e53,0x23e52,0x23e4f,0x15c3d,0x1607d,0x23e4d,0x23e50,0x1607e,
-0x23e51,0x23e4e,0x00000,0x00000,0x00000,0x00000,0xe3d5a,0x00000,
-0xe4331,0x24554,0xe432d,0x24558,0x16555,0xe432e,0x24c38,0x16558,
-0x24556,0xe4337,0xe4329,0x24553,0x2454e,0x24550,0x24551,0x2454a,
-0xe4335,0x16554,0xe432b,0xe4330,0x16553,0xe4334,0x1654f,0x2454d,
-0xe432a,0x16556,0xe4336,0x16557,0x2454c,0x2454f,0x24557,0x16551,
-0x16552,0x24555,0x2454b,0x00000,0x00000,0x00000,0x24c3a,0x16977,
-0x24c3c,0x24552,0x24c3e,0x1697b,0x24c3f,0x24c3b,0xe483e,0x16978,
-0x24c37,0x1697a,0x24c34,0x24c39,0x24c3d,0x24c36,0xe483f,0xe4845,
-0x16550,0xe4844,0x24c33,0x16979,0x24c35,0x00000,0x00000,0xe6573,
-0xe4840,0x00000,0x16d7d,0x25249,0x16e23,0x00000,0x16e21,0x00000,
-0xe4d4a,0x16976,0xe4d4d,0x25250,0x25251,0x16d7c,0xe4d48,0xe4d4c,
-0x2524f,0x25252,0x16d7e,0x16d7b,0x2524b,0x25248,0x2524d,0x2524a,
-0x16e24,0x2524c,0xe4d4b,0xe4d49,0x2524e,0x16e22,0xe5221,0x00000,
-0xe6574,0x00000,0x17154,0x25872,0xe5224,0x2586c,0x25870,0x25876,
-0x25877,0x25873,0x25874,0x25871,0x00000,0x2586e,0x00000,0x17156,
-0x17153,0x2586d,0x2586f,0xe5222,0x17155,0x25875,0xe6575,0x17450,
-0xe5560,0xe5562,0x25d75,0x25d6f,0x1744f,0x00000,0x00000,0x1744d,
-0xe5561,0x25d77,0x1744e,0x25d72,0x25d73,0x25d70,0x25d78,0x25d74,
-/* 0x7900 */
-0x00000,0x17451,0x25d71,0x00000,0x25d79,0x25d76,0xe5843,0xe583e,
-0xe5840,0x26246,0xe583f,0xe583c,0x26243,0xe5842,0x17670,0x00000,
-0x26247,0x26249,0x26248,0x26244,0x26245,0xe5844,0x00000,0x2662d,
-0xe5a61,0x17855,0xe5a62,0x2662a,0x2662c,0x26629,0x2662e,0x00000,
-0xe5a63,0x2662b,0xe6576,0x26949,0x2694c,0x26948,0x1797c,0x2694a,
-0x2694b,0x2694d,0x1797d,0x17a21,0x1797e,0x26b6f,0xe5e45,0x26b71,
-0xe5e43,0x26b70,0xe5e44,0x00000,0x00000,0x26d64,0x00000,0xe603c,
-0x27043,0x2712a,0x1467c,0x00000,0xe2433,0x22472,0x14f23,0x22843,
-0x14f24,0x14f25,0x22842,0x00000,0x22c5a,0x22c59,0x15269,0x1526c,
-0x1526b,0x1526a,0x22c56,0x22c58,0x22c57,0xe6577,0x00000,0x2314b,
-0x1572a,0x2314f,0x2314e,0x2314d,0x23149,0x15729,0x1572d,0x15730,
-0xe326f,0xe3270,0x15731,0x2314a,0x2314c,0x1572f,0x1572e,0x1572c,
-0x1572b,0x23765,0xe3272,0x23763,0x2375f,0x15c40,0xe3d5e,0x23760,
-0x15c41,0x23761,0x23762,0x23764,0xe3766,0x15c42,0xe3765,0x00000,
-0x23e59,0xe3d5f,0x23e58,0x23e57,0x23e56,0xe3d64,0xe3d62,0x00000,
-0x00000,0x2455c,0x16559,0x00000,0x24559,0x2455b,0xe4338,0x1655a,
-0xe433d,0x1655b,0x2455a,0xe4339,0xe3d63,0x00000,0xe6578,0xe4848,
-0x24c48,0xe4847,0x24c41,0x24c42,0x00000,0x1697e,0x1697c,0x1697d,
-0x24c4a,0x00000,0x24c49,0x24c46,0x24c45,0x24c44,0x24c43,0x24c47,
-0x24c40,0xe6579,0x25253,0x25258,0x25256,0xe4d50,0xe4d51,0xe4d4f,
-0x25255,0x25254,0x25257,0xe657a,0x25878,0xe5226,0x17157,0x17452,
-0x25d7b,0xe5227,0x17453,0x25d7a,0x2624b,0x2624a,0x17671,0xe5845,
-0x2662f,0x17856,0x2694e,0x17b6b,0x26d65,0xe603d,0x27045,0x27044,
-0x22167,0x1526d,0x1526e,0x23766,0xe657b,0x1655d,0x1467d,0x14b35,
-0x14b34,0x14b33,0x00000,0xe2a3e,0xe2a3d,0x22844,0xe2a3f,0xe2a42,
-0x14f27,0x14f26,0xe2a44,0x15271,0xe654c,0x22c5c,0x22c5f,0x22c5d,
-0xe2e42,0x1526f,0x15270,0xe2e40,0xe2e41,0x22c5b,0x22c5e,0xe2e43,
-0x15738,0xe3274,0xe3273,0xe3279,0x23156,0x23158,0x23157,0x15735,
-0x23152,0xe3276,0xe327b,0x15733,0x15732,0xe3277,0x15736,0x15734,
-0xe3278,0x15737,0x23155,0x23150,0x23151,0x23154,0x23153,0x00000,
-0xe327c,0xe3769,0xe3767,0xe376b,0x00000,0xe376a,0x23769,0x2376a,
-0x23768,0xe376c,0x23767,0x15c43,0x00000,0x00000,0x00000,0xe3d65,
-0x16125,0x00000,0x23e5a,0x23e5c,0x23e5e,0x16124,0x00000,0xe3d66,
-0x16122,0xe3d69,0x23e5b,0x16123,0x23e5d,0x16121,0xe3d68,0xe4341,
-0x24566,0x2455d,0x24560,0x24564,0x16561,0x24562,0x00000,0x24561,
-0x2455e,0x2455f,0x1655f,0x24565,0x1655e,0xe4344,0x16563,0x16562,
-0x16560,0x00000,0x24563,0x00000,0x00000,0xe6524,0x24c50,0x00000,
-0x24c4f,0xe484b,0xe484d,0x24c4b,0xe4850,0xe484f,0x16a21,0x24c4e,
-0x24c4d,0x16a22,0xe4852,0x00000,0x00000,0x00000,0x00000,0x16e29,
-0xe4d55,0x2525a,0xe4d56,0x16e2a,0x16e26,0x16e28,0xe4d5a,0x16e25,
-0x16e27,0xe4d53,0xe4d57,0x00000,0x25879,0xe522a,0x1715a,0x2587b,
-0x2587a,0xe5564,0x24c4c,0x1715c,0x1715b,0x17158,0x17159,0xe522c,
-0x00000,0x00000,0x00000,0xe5229,0x25e22,0x00000,0x25d7e,0x17454,
-0x25e21,0x00000,0x25e23,0x25d7d,0x25d7c,0x00000,0x00000,0x2624c,
-0x17674,0x17672,0x17673,0x00000,0xe5a66,0x00000,0xe5a65,0x26630,
-0x26631,0x17858,0xe5a67,0x17857,0x26950,0x26951,0x2694f,0xe5c64,
-0x26d66,0x26d67,0xe6076,0xe6077,0x1467e,0x22268,0x14b36,0x00000,
-0x22845,0x14f29,0x14f28,0x22846,0xe2e44,0xe2e47,0x22c61,0x15272,
-0x22c60,0x15273,0xe2e49,0xe2e48,0x15739,0x2315b,0x23159,0x2315f,
-0x1573a,0x2315a,0x2315e,0x2315c,0x2315d,0x00000,0x00000,0x2376b,
-0x2376d,0xe3772,0x15c44,0xe3771,0x2376c,0x15c45,0x16128,0x16127,
-0x16126,0x23e5f,0xe3770,0x00000,0x00000,0x00000,0x24569,0x16564,
-0x16565,0xe4346,0x24568,0x24567,0xe4347,0x00000,0x00000,0xe657c,
-0x24c51,0x16a24,0x16a23,0x24c52,0x24c53,0x00000,0x16e2c,0x16e2b,
-0xe4d5b,0x25921,0x2525b,0x2525d,0x2525c,0x2587e,0x2587c,0x25922,
-0x2587d,0x00000,0x1715d,0xe522f,0x00000,0xe522e,0x25e24,0x17455,
-0x25e25,0x25e26,0xe5568,0x00000,0x17675,0x17676,0x00000,0x17a22,
-0xe5e49,0xe5e48,0x17c3d,0x14721,0xe267e,0xe2721,0x00000,0xe2a47,
-0xe2e4e,0x22c62,0xe2e4f,0xe2e4d,0xe2e4b,0xe2e4c,0x00000,0x00000,
-0x23160,0x1573b,0xe3323,0xe3326,0xe3327,0xe3324,0x00000,0x15d7e,
-0x15d7d,0xe3773,0xe3d71,0x1612a,0x23e61,0x16129,0x23e60,0xe3d70,
-0x00000,0xe4349,0xe434a,0x2456a,0xe4854,0x16a25,0x24c54,0x16a26,
-0xe4855,0xe5230,0xe5569,0xe556a,0x00000,0xe5849,0x17a23,0x26952,
-0xe5f55,0x1484c,0x14f2a,0x22847,0xe2e51,0x15275,0xe2e50,0x15274,
-0x22c63,0x22c64,0x00000,0x00000,0x23162,0x23164,0x1573c,0x00000,
-0x23166,0x23169,0x23167,0xe332b,0x00000,0xe332a,0x23168,0x23165,
-0x23161,0x1573d,0x2316a,0x23163,0xe332c,0x00000,0xe3778,0xe3779,
-0x23776,0x15c4b,0x23821,0x15c48,0xe3777,0x23778,0x15c4c,0xe377b,
-0x15c46,0xe3776,0x23773,0x23822,0x23774,0x23771,0x15c4a,0x00000,
-0x15c47,0xe632d,0x23777,0x2377a,0x15c49,0x2377b,0x15c4d,0x2377c,
-0x23772,0x23779,0x2377d,0x23775,0x23770,0x2376e,0xe377a,0xe657d,
-0x2377e,0x00000,0x00000,0x2376f,0x00000,0x00000,0x00000,0x00000,
-0x23e68,0xe3d7b,0xe3d78,0xe3d75,0x23e64,0x23e6a,0x1612d,0x23e63,
-0x23e65,0x1612b,0x23e62,0x16132,0x23e66,0x16131,0x23e67,0x16133,
-0x1612e,0x16134,0x1612f,0xe3d79,0x16130,0xe3d72,0x1612c,0xe3d76,
-0x23e69,0xe657e,0x00000,0x00000,0x00000,0x00000,0xe434f,0x00000,
-0x16568,0x24575,0xe434c,0x24578,0x2456c,0x24571,0x2456b,0x1656a,
-0xe4355,0x2456f,0x00000,0xe434d,0xe3d77,0x2456d,0x16569,0xe4354,
-0x24574,0x24573,0x24570,0x24572,0x2456e,0x16a2a,0x24577,0x16566,
-0x24576,0xe4351,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe4856,0x24c64,0xe4858,0x16a31,0x24c5f,0xe4860,0x16a30,
-0x24c55,0x00000,0x24c57,0x16a29,0x24c5c,0x24c5b,0x24c5e,0x16a2e,
-0x24c59,0x24c58,0xe485a,0xe485e,0x16a2d,0x16a28,0x24c5a,0x16a2b,
-0x24c60,0x24c62,0x00000,0x24c5d,0x24c56,0x16a2c,0xe4857,0xe485d,
-0x16e34,0x16a27,0x00000,0xe485c,0x24c63,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x25261,0x16e2d,0xe4d5c,0x25263,
-0x00000,0x16e2e,0xe4d65,0xe4d5d,0x16e30,0x25266,0x00000,0x2525e,
-0x16a2f,0x25264,0x00000,0x00000,0x00000,0x00000,0x25260,0xe4d60,
-0x16567,0x16e33,0xe6367,0xe6366,0x16e2f,0x00000,0x16e31,0x16e32,
-0x00000,0x17160,0x25265,0x2525f,0x16e35,0xe4d63,0x25262,0x00000,
-0xe6621,0x00000,0x00000,0x00000,0x2592c,0x25927,0x00000,0x00000,
-0x25931,0x1715e,0x25929,0x17162,0x2592f,0x25926,0x25923,0x25932,
-0x1745b,0x17163,0x2592e,0x25924,0x17161,0x25928,0x17165,0x25925,
-0x2592a,0x17164,0x2592d,0x25930,0xe5233,0xe5234,0x00000,0x00000,
-0x25e38,0x25e39,0x25e29,0x25e30,0x25e2e,0x00000,0xe556d,0x17459,
-0x25e35,0x2592b,0xe556b,0x25e2c,0xe556e,0x25e36,0x17458,0x25e2b,
-0x25e2a,0x25e34,0x25e31,0x25e33,0x00000,0x25e27,0x25e37,0x17456,
-0xe5570,0x25e32,0x25e3b,0x25e2f,0x1745a,0x17457,0x25e2d,0x25e28,
-0x25e3a,0x1715f,0xe5571,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe556f,0x2624f,0xe5850,0xe584e,0x2624d,0x26253,0x1767a,0x26251,
-0x26250,0x1767c,0x26256,0x1767b,0xe5851,0x26257,0x26254,0x17678,
-0x26255,0x2624e,0x17679,0x17677,0x26635,0x26252,0xe584c,0xe6622,
-0x26258,0x00000,0xe6623,0x26632,0xe5a6f,0xe5a6e,0x00000,0x1785d,
-0x1785b,0x26634,0x00000,0x26636,0x26633,0x1785c,0x17859,0x1785a,
-0x1785e,0x00000,0xe6624,0x17a25,0xe5c66,0x26957,0x00000,0x26956,
-0x26954,0x26953,0x26955,0xe5c65,0x17a24,0x17a26,0xe6625,0x00000,
-0x17a7b,0xe5e4c,0x00000,0x26b73,0x26b72,0x00000,0xe5e4b,0x26d68,
-0xe5f58,0x26d6a,0x26d6c,0x26d6b,0x26d69,0xe5f57,0xe603f,0x17b6d,
-0x17b6c,0x00000,0xe603e,0x17c3f,0x17c3e,0x17c40,0x26f3c,0x26f3b,
-0xe6626,0x2712b,0x27046,0x2712c,0x17d25,0xe6144,0x17d26,0x2715c,
-0x00000,0xe623a,0x17d4b,0x1484d,0xe2a49,0x22848,0xe2a48,0xe2e52,
-0x22c66,0x22c67,0x22c65,0xe2e54,0xe2e53,0x15276,0x00000,0x22c68,
-0x22c69,0x22c6a,0x00000,0xe3331,0x2316b,0x23171,0xe332e,0xe3330,
-0x2316f,0x1573e,0x2316d,0xe3332,0x2316e,0x23170,0xe332d,0x00000,
-0x00000,0x2316c,0x15c4e,0xe377d,0x23823,0x15c50,0x23825,0x15c4f,
-0x23824,0xe377e,0xe3821,0xe383e,0xe3822,0x00000,0x23e6c,0x16135,
-0xe3e21,0x23e6e,0x23e6b,0x23826,0xe3e23,0x16136,0xe3e22,0xe3d7e,
-0x23e6d,0xe6627,0x00000,0x00000,0x00000,0x00000,0xe4358,0x2457b,
-0xe435c,0x1656b,0x24579,0x1656c,0x2457a,0x1656d,0x00000,0xe4862,
-0xe4861,0x16a32,0x24c68,0x24c65,0x24c67,0x16a33,0x16a34,0x24c66,
-0x00000,0x00000,0xe4d6f,0xe4d71,0xe4d6d,0x25267,0xe4d70,0xe4d73,
-0x25268,0xe4d72,0x16e36,0x2526a,0x25269,0xe4d6e,0x12323,0x00000,
-0x25936,0x25937,0x25933,0xe5237,0x25934,0x17166,0x17167,0x25935,
-0x00000,0x17461,0xe5575,0xe5574,0x1745d,0x17462,0x1745e,0x17460,
-0x1745c,0xe5239,0x1745f,0xe5855,0x00000,0x00000,0xe5854,0x1767d,
-0x25e3c,0x00000,0x26638,0x00000,0x26637,0xe6628,0x26958,0x17a27,
-0x17a28,0x26d6e,0x26b74,0xe6169,0x26d6d,0xe6040,0x2712d,0x27172,
-0x1484e,0x00000,0xe2722,0x14b37,0xe2a4b,0x22849,0x14f2b,0xe2a4a,
-0x15279,0x22c6d,0x15277,0x22c6b,0x1527c,0x15278,0x1527d,0x1527b,
-0x22c6c,0x1527a,0x15742,0x15741,0x2317c,0x1574a,0x23175,0x2317b,
-0x15746,0x23174,0x2317a,0x23178,0x15745,0x15747,0x23177,0x15740,
-0x23176,0x1574b,0x15748,0x1574c,0x15749,0x23173,0x23172,0x23179,
-0x15743,0x1573f,0x15744,0x00000,0xe3337,0xe333b,0x00000,0x00000,
-0x23835,0x2382e,0x00000,0x1613b,0x2382d,0xe3829,0x15c54,0x15c5b,
-0x15c58,0x15c5e,0x15c5d,0x15c59,0xe3826,0x23827,0x2382a,0xe3827,
-0x23829,0x15c55,0x2382b,0x23834,0x15c56,0x23828,0x23831,0x23832,
-0x15c57,0x2382f,0x15c5c,0x15c52,0x15c5a,0x2382c,0x15c51,0x23830,
-0xe382e,0xe3824,0x23833,0x00000,0xe382b,0xe3e34,0x23f21,0x23e76,
-0x16138,0x23e7d,0x23e7a,0x23e72,0x23e7b,0x1613a,0x23e73,0xe3e29,
-0x23e6f,0xe3e26,0xe3e2e,0x16573,0x23e78,0xe3e2f,0x16137,0x23e7e,
-0xe3e28,0x1613e,0x16140,0x23e71,0xe3e2c,0x00000,0x1613f,0x23e74,
-0x16139,0x23e7c,0x23e75,0x23e79,0xe3e2a,0x23e77,0x1613c,0x23e70,
-0x16141,0x15c53,0x1613d,0x16142,0xe3e24,0xe3e35,0xe3e33,0x00000,
-0xe4367,0x1656f,0x24624,0x24626,0x24628,0x2462c,0xe3e2b,0x24622,
-0x2457e,0x16571,0x00000,0x24627,0x2462b,0x24623,0x2457d,0xe4366,
-0x2457c,0xe4369,0xe4360,0xe4362,0x24629,0x24621,0x24625,0x16572,
-0xe435e,0x16570,0x2462d,0x1656e,0x2462a,0xe4364,0x24c79,0xe4368,
-0xe436a,0xe4363,0x00000,0x00000,0x16a37,0x24c71,0x16e43,0x24c7b,
-0x16a3a,0x24d21,0x16a40,0x24c6c,0xe4874,0x00000,0x24c7c,0x24c69,
-0xe486d,0x24c7e,0x24c6d,0xe486e,0x16a47,0x16a44,0x24c7d,0x24c77,
-0x16a36,0x16a3e,0x16a3d,0xe4870,0x16a3c,0x16a42,0xe4869,0x24c6a,
-0x16a43,0x24c78,0x16a3f,0x16a35,0x24c7a,0x16a38,0x16a39,0x16a41,
-0x24c6f,0x24c6e,0x24c6b,0x00000,0x24c73,0x24c70,0x24c74,0x16a46,
-0xe4868,0x24d22,0x16a3b,0x24c75,0x24c76,0xe4871,0x24c72,0xe4873,
-0xe6629,0xe486b,0x16a45,0xe662b,0x00000,0x00000,0xe4e22,0x2526f,
-0x16e3b,0x16e44,0x16e40,0x2526c,0xe4d7c,0x16e3d,0x16e41,0x25278,
-0x16e37,0x25270,0xe4d78,0x16e3f,0xe4e24,0xe4e2f,0x25273,0x2526e,
-0x16e3e,0x16e42,0x2526d,0xe4e2e,0x16e3c,0xe4d77,0x25277,0x16e39,
-0x25276,0x25275,0x16e45,0x2503b,0x16e38,0xe4e2b,0x25274,0x2526b,
-0xe4d75,0x16e46,0x25272,0x16e3a,0xe4e28,0xe4e29,0xe4e25,0xe4e2c,
-0xe4e27,0xe4d7e,0xe4d7d,0x25271,0x00000,0x00000,0x00000,0xe662a,
-0x1716a,0x1716f,0x17168,0x25944,0x2593b,0x25947,0x2593f,0x25945,
-0x17170,0x17169,0x25938,0x2593e,0x25948,0x25941,0x25946,0x2593a,
-0x00000,0xe523b,0x25942,0x1716b,0x25940,0x1716e,0x1716d,0x2593c,
-0x2593d,0x25939,0x25943,0x1716c,0x2594a,0x25949,0xe5240,0xe523f,
-0x00000,0x25e47,0x25e43,0x17469,0xe5579,0x25e3d,0x17463,0x17473,
-0x25e49,0x1746b,0x17467,0x25e40,0x1746e,0x17471,0x25e4b,0x17466,
-0x25e42,0x1746f,0x25e4d,0x25e4a,0x25e3e,0x1746a,0x17464,0x17472,
-0x25e45,0x1746d,0x25e3f,0x17468,0x25e4c,0x1746c,0x17465,0x25e46,
-0x17470,0x25e44,0x00000,0x00000,0x25e48,0xe557a,0x00000,0xe5859,
-0x2625a,0x26260,0x17725,0x26263,0x1767e,0x17721,0x2625b,0x26262,
-0x2625d,0x17726,0x17723,0xe585b,0x26259,0xe5858,0x17722,0x2625f,
-0x26261,0x17724,0x2625e,0x2625c,0xe662c,0x00000,0xe585a,0x00000,
-0x26642,0x17862,0x17863,0x1785f,0xe5a72,0x17860,0xe5a74,0x2663e,
-0x2663c,0xe5a75,0x26640,0x17864,0x26641,0x2663a,0x26639,0x2663d,
-0x2663b,0x17861,0x2663f,0x26959,0x17a2b,0x17a2a,0x2695a,0xe5c6c,
-0x2695c,0x2695b,0x17a2c,0x00000,0xe5e53,0xe5e50,0x26b79,0x26b76,
-0x26b77,0xe5e51,0x26b75,0x26b78,0x17a7d,0x26b7a,0xe5e52,0x17a7c,
-0x00000,0x26d6f,0xe5f5a,0x17c41,0x17c43,0x26f3d,0x17c42,0x27047,
-0x2712f,0x27131,0x2712e,0x27130,0x17d39,0x00000,0xe6235,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x7f00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1484f,0x00000,
-0x1527e,0x23052,0x1574d,0xe3831,0x00000,0x15c5f,0x23f22,0x23f23,
-0xe662d,0xe4877,0x00000,0x2594b,0x17474,0x25e4e,0xe557d,0xe585c,
-0x17727,0x00000,0x26644,0x26643,0x17a2d,0x26b7b,0xe5f5b,0x26d70,
-0x17c64,0x22269,0x00000,0x00000,0x14f2c,0x14b38,0x00000,0x00000,
-0x22c6e,0xe2a4e,0x00000,0x23224,0x2317d,0x23223,0x23221,0x1574e,
-0x23222,0x2317e,0xe333c,0x23836,0x00000,0x23f24,0x23f25,0x24630,
-0x24631,0x16575,0x16576,0x2462f,0x24632,0x2462e,0x16574,0xe4878,
-0x16a48,0xe4879,0x16577,0x24d23,0x00000,0x16e47,0x25279,0x16e48,
-0xe4e30,0x17171,0x2594e,0x2594c,0x2594d,0x25e51,0x25e50,0x25e4f,
-0x00000,0x00000,0x00000,0x26645,0xe6422,0x17865,0x26646,0x26d71,
-0x17c65,0x27048,0x14850,0x14f2e,0x14f2d,0x22c70,0x15321,0xe2e5d,
-0x00000,0x22c6f,0x23226,0xe333d,0x1574f,0x23837,0x23225,0xe333f,
-0x00000,0xe333e,0x15c61,0x2383a,0x23838,0x23839,0x15c60,0x00000,
-0x23f27,0x23f28,0x23f26,0xe436e,0x1657a,0x24634,0x24633,0x24635,
-0x16579,0x16578,0x00000,0x00000,0x2527a,0x2527c,0xe4e31,0x16e49,
-0x2527b,0x2594f,0x17172,0x26265,0xe585d,0x26264,0x17866,0x26647,
-0x17868,0x17867,0x2695d,0x26b7c,0x17a7e,0x14851,0x22c71,0x15322,
-0x23229,0x15751,0x23228,0x23227,0xe3342,0x15750,0xe3343,0x23840,
-0x00000,0x23842,0x2383b,0x2383c,0x15c62,0x2383d,0x15c63,0x23841,
-0x2383e,0x2383f,0x15c64,0xe3e37,0x16144,0x16145,0xe3e38,0x23f29,
-0x00000,0x00000,0x00000,0x24636,0x24637,0xe4372,0x24d27,0x16a4b,
-0x16a49,0x16a4a,0x24d24,0x24d25,0x00000,0x24d26,0x25323,0xe4e32,
-0x25324,0x16e4a,0x25321,0x2527e,0x25322,0x2527d,0x17175,0x25950,
-0x17173,0x17174,0x25e53,0x17475,0x25e52,0x26134,0xe557e,0x26266,
-0x26267,0x17728,0xe5861,0x17729,0x17476,0x26648,0x26649,0x2695e,
-0x17a2e,0x14852,0xe667b,0x14853,0x15753,0x14f2f,0x15752,0x22c72,
-0xe3836,0x00000,0xe3344,0x16146,0x14854,0x15324,0x22c73,0x22c74,
-0x15323,0x15325,0x14855,0x00000,0x22c75,0x15755,0x2322a,0x15757,
-0x15754,0x15756,0xe3837,0x23845,0x15c65,0xe3839,0x23844,0x23843,
-0x00000,0x24638,0x00000,0xe4922,0x24d28,0x00000,0x16e4b,0x00000,
-0x17176,0x25952,0x25951,0xe5621,0x25e54,0x00000,0xe5862,0xe5c6f,
-0x26b7d,0x00000,0x00000,0x14856,0x22473,0x2284a,0x15326,0x22c76,
-0x00000,0x2322c,0x00000,0xe3349,0xe3348,0x15758,0x2322b,0x15759,
-0xe3347,0xe662f,0x00000,0x23847,0xe383d,0xe383c,0x15c67,0x23846,
-0x23848,0xe383b,0x15c66,0x00000,0x00000,0x00000,0xe3e3c,0x23f2b,
-0x23f2c,0x23f2a,0x16147,0xe6729,0x00000,0x00000,0x1657b,0xe4373,
-0x1657c,0xe6356,0x16a4d,0xe4923,0x24d2a,0x24d29,0x16a4c,0xe4926,
-0xe3e3b,0xe4925,0x00000,0xe6630,0x25325,0xe4e34,0xe4e36,0x25326,
-0xe4e37,0x00000,0xe4e35,0xe4e38,0x25953,0x00000,0xe5243,0x1747a,
-0x17479,0x17477,0x17478,0x1747b,0xe5622,0x26268,0x1772b,0x1772a,
-0x2664a,0x2695f,0xe5c70,0xe5c71,0xe5c72,0x17b6f,0x17b6e,0x14857,
-0x00000,0x00000,0x22f7d,0x00000,0x1657e,0x16148,0x1657d,0x16a4e,
-0x00000,0x14858,0x22168,0x14859,0x1485a,0xe2435,0xe2436,0x2284b,
-0x22476,0xe2724,0x22477,0x14b3a,0xe2726,0x22474,0x14b39,0xe2725,
-0x14b3c,0x22475,0x14b3e,0x14b3d,0x22478,0x14b3b,0x00000,0xe2723,
-0x00000,0x14f34,0x14f32,0x2284d,0xe2a56,0x14f31,0xe2a5b,0xe2a58,
-0xe2a4f,0x14f36,0x14f38,0x14f35,0xe2a59,0x22850,0x2284c,0x14f39,
-0xe2a52,0x14f33,0x14b3f,0xe2a54,0x14f37,0x2284f,0xe2a57,0x00000,
-0x2284e,0x00000,0x14f30,0xe6631,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x22c7c,0x1532a,0x1532b,0x22c7e,0xe2e66,0x22c78,
-0x22c7b,0x22d26,0x22d24,0xe2e60,0x1532c,0x22d2a,0x1532f,0x22d27,
-0x22c7d,0x22c7a,0xe2e61,0xe2e5e,0x23f2e,0x22d25,0x15327,0x22d28,
-0x22c77,0x22d22,0x15329,0x1532e,0x22d23,0x15332,0x15330,0xe2e65,
-0x22c79,0x1532d,0xe2e64,0x22d21,0x15331,0x15328,0x22d29,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x1575e,0xe334c,0x15767,
-0x1575c,0x1575a,0x2322e,0x15762,0x1575f,0x23230,0xe334a,0xe3352,
-0x15761,0x2322f,0x2322d,0x23232,0x15766,0x15764,0x23f2d,0xe334b,
-0x23233,0x23231,0x1575b,0xe334e,0xe334d,0x1575d,0x15760,0xe334f,
-0x15763,0xe2e63,0x15765,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe3e44,0x23852,0x15c69,0xe3849,
-0x23849,0x2384b,0xe3847,0x2384c,0x00000,0x23854,0x23850,0x2384e,
-0x00000,0x23851,0x23855,0x15c6a,0x15c6e,0x2384a,0x00000,0x23853,
-0xe632e,0x15c6c,0xe3841,0x15c6b,0x2384f,0x2384d,0xe3842,0x15c68,
-0x15c6d,0xe3845,0x00000,0x00000,0xe3848,0x00000,0x00000,0x00000,
-0x00000,0x1614e,0x23f36,0xe3e3e,0x00000,0x23f34,0x16150,0x00000,
-0xe3e43,0xe3e45,0xe3e41,0x23f2f,0x24646,0xe3e3d,0x1614f,0x23f33,
-0xe3e40,0xe3e42,0x23f30,0x1614b,0x16151,0x23f35,0x1614d,0x23f32,
-0x16a4f,0x1614c,0x23f31,0x16152,0x1614a,0x16149,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x2463e,0x2463c,0xe437b,0x24642,0xe437e,
-0x2463a,0x24647,0x2463f,0xe4375,0x24639,0x16624,0x1662a,0x24644,
-0x00000,0x2463d,0xe4376,0x16627,0xe4377,0xe4423,0x16625,0x24645,
-0x16622,0x16621,0x24640,0x16626,0x16153,0xe437c,0x24643,0x2463b,
-0x16623,0x16628,0x16629,0x00000,0x00000,0xe4422,0x00000,0x16a54,
-0x16a50,0xe4927,0x16a55,0x24d2d,0xe492a,0x00000,0x24d2c,0x24d2e,
-0x16a52,0x24d2b,0x16a53,0x24d31,0x24d30,0x24d2f,0x00000,0x16a51,
-0x00000,0x00000,0xe4e3b,0xe4e3d,0xe4e39,0x2532a,0xe4e3c,0x2532d,
-0x16e51,0x2532c,0x16e50,0x16e4c,0x16e4d,0x16e4e,0x25329,0x25328,
-0x16e4f,0xe4e3a,0x2532b,0x25327,0x00000,0x00000,0x25955,0x2595f,
-0x17179,0x17178,0xe5249,0x25959,0x2595b,0xe5247,0x25956,0xe5244,
-0x2595a,0x25954,0x2595d,0x17177,0x2595c,0x25958,0x00000,0x2595e,
-0xe5623,0x25957,0x1747e,0x25e55,0x25e5b,0x17524,0x17526,0x17523,
-0x17522,0x00000,0x17521,0x1747d,0x25e56,0x25e59,0x1747c,0x25e5a,
-0xe5624,0x17525,0x25e58,0x00000,0x25e57,0x1772c,0xe5865,0x1772d,
-0x2626b,0x26269,0x2626a,0x00000,0xe5a77,0x2664c,0xe5a78,0x2664b,
-0x17869,0x26961,0x17a2f,0x26960,0x00000,0x26b7e,0x26d72,0x17b70,
-0x27132,0x27133,0x17c44,0x1485b,0x00000,0x14f3a,0x23f37,0x16a56,
-0x17527,0x25e5c,0x1485c,0x00000,0x15769,0x15768,0x23f38,0xe3e47,
-0x00000,0x00000,0x25960,0x1485d,0x15333,0x00000,0xe3e48,0x23f39,
-0x23f3a,0x23f3b,0x16a57,0x1717a,0x1485e,0x00000,0x14f3b,0x22d2b,
-0x1576a,0x23234,0x15c6f,0xe3e49,0x23f3c,0x1662b,0x00000,0x16a58,
-0x1717b,0x17528,0x1772e,0x2664d,0x1485f,0x14f3c,0xe2a5d,0x00000,
-0x1576b,0x23856,0x16154,0xe492b,0x16a59,0x24d32,0x2532e,0x00000,
-0xe524a,0xe5868,0xe5a79,0x14860,0x16155,0x24648,0x16a5a,0x14861,
-0x22851,0x22d2c,0x15334,0x00000,0xe2e68,0x23236,0x00000,0xe3357,
-0x1576e,0xe3358,0x1576c,0x1576d,0x1576f,0xe3355,0x00000,0x23235,
-0x00000,0x00000,0x2385b,0x23858,0x2385a,0x15c70,0x15c72,0x15c71,
-0x23857,0x15c73,0x23859,0x00000,0x23f3d,0x23f3e,0x00000,0x23f3f,
-0x2464b,0xe4426,0x2464c,0x00000,0x2464a,0x2464d,0x00000,0x1662c,
-0xe6634,0x24649,0xe492d,0x16a5b,0xe492e,0x00000,0x25333,0x2532f,
-0x25332,0x25334,0x25331,0x25330,0x00000,0x25961,0x25962,0x25963,
-0x1717c,0x1717d,0x25e5e,0x25e5d,0x25e5f,0x00000,0x2626d,0x2626c,
-0x00000,0x2664f,0xe5a7a,0x26650,0x2664e,0xe5a7b,0x17a30,0x00000,
-0x26962,0x26963,0xe5e55,0x26d73,0x26f3e,0x27049,0x14862,0x14b40,
-0x00000,0x17529,0x14863,0x00000,0x2385c,0x23f40,0xe5a7c,0x17c6c,
-0x2226a,0x00000,0x00000,0xe2438,0x2226b,0x2226d,0x14864,0x2226e,
-0x2226c,0x00000,0x00000,0x22522,0x22523,0x2247b,0xe2728,0x00000,
-0x00000,0x00000,0x22521,0x14b42,0xe2729,0x14b43,0x2247c,0x2247a,
-0x22479,0x2247d,0x14b41,0x2247e,0x22d2d,0xe272b,0x00000,0x00000,
-0x22856,0x14f3f,0x22855,0x22857,0xe2a60,0x14f3e,0x2285c,0x14f42,
-0x22852,0x22860,0x22866,0x14f49,0x22863,0x14f46,0xe2a6b,0x22859,
-0x2285f,0x22861,0xe2a66,0x22854,0x14f45,0x14f40,0x2285a,0x14f47,
-0x14f4a,0x14f44,0xe2a6c,0x14f3d,0x2285e,0x22858,0x22865,0x14f4c,
-0x14f48,0x14f43,0x2285d,0x15770,0x2285b,0x14f41,0x14f4b,0x00000,
-0x22853,0x00000,0x22862,0x22864,0xe2a5e,0x00000,0x00000,0x00000,
-0x00000,0xe2a68,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe2e76,0x15345,0x1533f,0x15347,0x15344,0x22d34,0x22d37,0x15340,
-0xe2e6a,0x22d2e,0x00000,0x15339,0x15343,0xe2e6b,0x15346,0x15348,
-0x22d43,0x22d3a,0xe2e78,0x15338,0x22d42,0x1533c,0x1533a,0x15335,
-0x22d32,0xe2e72,0x22d41,0x22d36,0x22d39,0x22d46,0xe2e74,0x15349,
-0x22d40,0x15341,0x22d3b,0x22d45,0x22d38,0x22d3c,0x22d3f,0xe2e69,
-0xe2e6e,0x22d30,0x22d44,0x22d3e,0xe2e6f,0xe2e7a,0x22d2f,0x00000,
-0x22d33,0x15342,0x1533d,0x15336,0x1533b,0x15337,0x1534a,0x22d31,
-0x23247,0x1533e,0x00000,0xe2e79,0x22d3d,0x22942,0xe2e77,0x00000,
-0xe6635,0x00000,0xe6637,0x00000,0x00000,0x00000,0x2324a,0x1577e,
-0xe3362,0x2323a,0x00000,0x23245,0x23241,0xe384d,0x23254,0xe3359,
-0x2324c,0xe335f,0x23242,0xe385b,0x2324b,0x2323c,0x23240,0x23257,
-0x15823,0x2324f,0x23246,0x15771,0x23255,0x23238,0x00000,0x2324e,
-0x00000,0x15822,0x1577b,0x23237,0x15779,0x15778,0x1577d,0x2324d,
-0x15775,0x1577c,0x22d35,0x23f41,0x23248,0x00000,0xe2a5f,0x2323e,
-0x15821,0x2323f,0x23243,0x15824,0x23239,0x23251,0xe3e57,0x23250,
-0x23258,0x15777,0x15774,0x23256,0x23252,0x23249,0x23244,0x1577a,
-0x15776,0x2323b,0x15772,0x23253,0x15773,0x00000,0x2323d,0xe335a,
-0xe3363,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe6636,0xe2d33,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe384e,0xe3851,0x23862,0x23864,0x23869,0x2387d,0x15d23,
-0x15c77,0xe3854,0x23861,0x15d24,0x15d25,0x2386c,0x23873,0x23879,
-0xe3850,0x23866,0x00000,0x2386d,0xe384f,0xe385d,0x15d26,0x2387b,
-0x23876,0x15d21,0x15c7d,0x23872,0x2386e,0x23860,0x15c74,0x23865,
-0x2385d,0xe3855,0x15c7c,0x15c7e,0x2386a,0x23867,0x15c79,0x23877,
-0x15c76,0x23868,0x23f6a,0x23870,0xe385e,0x2386f,0x15c75,0xe3857,
-0x15d22,0xe3852,0x15c78,0x2385e,0x23863,0x23874,0x2387a,0x15d27,
-0x2385f,0x2386b,0x23871,0x15c7b,0x00000,0xe3858,0x2387c,0x23875,
-0x23878,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe385f,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15c7a,0x00000,0x23f51,
-0x23f45,0x1615d,0x23f62,0x23f6b,0x23f6e,0x1615b,0x23f4d,0x23f66,
-0x23f4e,0x23f5c,0x16168,0x23f58,0x16165,0xe3e5e,0x23f59,0x23f42,
-0x00000,0x23f67,0xe3e4f,0xe3e59,0x1616e,0x23f64,0x23f5a,0x23f70,
-0x23f55,0x2466d,0xe3e4d,0x23f73,0x1616c,0x23f53,0x23f5f,0x1616f,
-0x1615a,0x23f57,0x23f71,0x23f50,0x23f49,0x23f54,0xe3e5f,0x23f48,
-0x23f46,0x16156,0x23f68,0x23f4f,0x23f6c,0xe3e4b,0x23f6d,0x1615e,
-0x16163,0x1615f,0x16167,0x23f63,0x16160,0x23f5b,0x23f4b,0x00000,
-0x16158,0x23f43,0x23f65,0x23f6f,0x23f4a,0x16166,0x23f74,0x23f56,
-0xe3e52,0x23f52,0xe3e5c,0x16157,0x1616b,0xe3e5a,0x23f61,0x1616d,
-0xe3e50,0x23f5d,0x16162,0x1615c,0x16164,0x16159,0x1616a,0x23f5e,
-0x23f4c,0x23f60,0x23f47,0x23f69,0xe3e58,0x00000,0xe3e5d,0xe3e56,
-0xe3e4e,0x00000,0x00000,0x23f72,0x00000,0x00000,0xe6639,0xe3e5b,
-0x00000,0xe6638,0x00000,0x23f44,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x2466c,0xe442d,0x24724,0x1655c,0x24671,0xe4431,0x2466f,
-0x2465a,0x16630,0x2466a,0x2467e,0x24666,0x16638,0x2467d,0x24664,
-0x16169,0x24674,0x24665,0x2467b,0x16637,0x1662f,0xe443a,0x2464f,
-0x24657,0xe4435,0x24670,0x24668,0x24723,0x2466b,0x1663d,0x2467c,
-0xe442c,0x16634,0xe443e,0x2466e,0x24676,0x2465b,0x24675,0xe4427,
-0x24728,0x24656,0x24677,0xe4433,0x24726,0xe443f,0x24650,0x16161,
-0xe4440,0x2465e,0x2465d,0x16636,0xe4432,0x24661,0x24663,0x24672,
-0x24725,0x16639,0xe4438,0x1663a,0xe4430,0x24655,0x16632,0x24659,
-0x24721,0x1663b,0x00000,0x16633,0x16635,0x1663c,0x24727,0x24678,
-0x24673,0xe443c,0xe442f,0x24660,0x2465f,0x16631,0x24651,0x1662e,
-0x24669,0x24652,0x24667,0xe442e,0x00000,0x2465c,0x24722,0xe442a,
-0xe4439,0x00000,0x1662d,0xe443b,0xe4428,0x00000,0x24658,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x24654,0x2467a,0x24653,
-0x16a68,0x24d5a,0xe4935,0xe4944,0x24d49,0xe4933,0xe4938,0x24d33,
-0x24d51,0x16a60,0x24d42,0x24d4c,0x16a63,0x24d45,0x16a61,0x24d36,
-0x24d54,0x24d35,0x24d48,0xe493c,0x24d34,0xe4939,0x00000,0x24d46,
-0x24d4f,0x24d4d,0x24d41,0x24d3c,0x24d3a,0xe4942,0x24d3b,0x24d4e,
-0x24d59,0x24d43,0x16a62,0xe493b,0x24d3e,0xe493a,0x24d52,0xe4941,
-0x16a65,0x24d3d,0x24d37,0x24d47,0x16a69,0xe4932,0x00000,0x16a5d,
-0x16a66,0x24d3f,0x24d39,0xe4936,0x16a5f,0x24679,0x16a5e,0x24d4a,
-0xe4436,0x16a5c,0x16a6b,0x16a64,0x24d4b,0x24d40,0x24d38,0x24d53,
-0x24d44,0x16a6a,0x24d57,0x16a67,0x24d56,0xe493f,0x24d50,0x24d55,
-0xe493e,0x00000,0xe4943,0x24d58,0x00000,0x00000,0xe663b,0x00000,
-0x00000,0xe663c,0xe663a,0x00000,0xe493d,0x00000,0x00000,0x2535c,
-0x2535d,0x25350,0x2534f,0x2534b,0x16e5d,0xe4e4f,0x16e55,0x2535f,
-0x2535e,0x2464e,0x25348,0x2534c,0x25346,0xe4e44,0x25359,0x2534a,
-0xe4e42,0x25360,0x25343,0x25341,0x2534d,0x25357,0x25352,0x16e5f,
-0x25338,0xe4e40,0x25356,0xe4e4c,0xe4e46,0xe4e54,0x16e60,0x24662,
-0x25344,0x2533b,0x2533e,0x25364,0x25345,0x2533c,0x2533a,0x25337,
-0x00000,0x16e59,0x2534e,0x16e58,0x16e5c,0x25349,0x25351,0x16e52,
-0x25361,0x25365,0x16e54,0xe4e4b,0x25340,0x25354,0x25358,0x2533d,
-0x25362,0x16e5b,0x00000,0x16e5a,0x25335,0x16e5e,0x2535b,0x2533f,
-0x25353,0x25339,0x25347,0x25342,0x16e56,0x16e57,0x25355,0x25366,
-0x25363,0x2535a,0x00000,0xe4e4d,0xe4e4e,0xe4e52,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x25336,0x00000,0x16e53,0x25974,0xe525a,
-0x2596b,0x2596e,0xe5252,0x17225,0x25970,0x25965,0x2596c,0x25972,
-0x17222,0x17226,0x1717e,0xe5259,0xe5250,0x25967,0x25977,0x00000,
-0x00000,0x25971,0x00000,0x25968,0x25a22,0x2597a,0x25964,0x25e72,
-0x2596a,0x17221,0xe5258,0x25975,0xe5254,0x25a21,0x17229,0xe5256,
-0x2597c,0x25969,0x2596f,0x25973,0x2596d,0x25a23,0x2597e,0x2597b,
-0x17223,0x17224,0x17228,0x25966,0x25a24,0x17227,0x25978,0xe524f,
-0xe5255,0x25976,0x00000,0xe663d,0x00000,0x25979,0x25f21,0x25e6c,
-0x25e71,0x25e7e,0x25e70,0x25e68,0x25e6d,0x00000,0x1752c,0xe562b,
-0x25e61,0x25e79,0x25e7b,0x25e60,0x1752b,0x25e7d,0x25e75,0x17532,
-0x25e7c,0x25e6e,0x17534,0x25e66,0x2597d,0x25e76,0x25e73,0x25e62,
-0x25f23,0x1752e,0xe5628,0xe5629,0x1752f,0x25e64,0x25e74,0xe562d,
-0x25f22,0x25e77,0x25e6a,0x17531,0x1752d,0x25e78,0x25e6b,0x25f24,
-0x25e65,0x25e6f,0x25e7a,0x25e67,0x25e69,0x00000,0x17535,0x25e63,
-0x17533,0x17730,0x1752a,0xe562c,0xe5630,0x00000,0x00000,0x17530,
-0x17734,0x2627d,0xe586c,0x26273,0x2626e,0x26274,0x2627e,0x26324,
-0x26323,0x17736,0x17735,0xe586e,0x00000,0x26275,0x26325,0x26278,
-0x26270,0xe586f,0x26272,0x26271,0x26277,0x2627c,0x2626f,0x26276,
-0x2627b,0x17733,0x00000,0x26279,0xe586b,0x17731,0x2627a,0x1772f,
-0x17732,0x26660,0x26321,0x00000,0xe663e,0x1786d,0xe5a7e,0x26658,
-0x2665c,0x26654,0x26657,0xe5a7d,0x2665f,0x1786b,0x26664,0x2665d,
-0x00000,0x26655,0x26665,0x2665e,0x1786e,0x1786f,0x26662,0xe5b22,
-0x26656,0x1786a,0x1786c,0x26651,0x26659,0x26653,0xe5c7b,0x26663,
-0x26661,0x26652,0x2665a,0x00000,0xe5b25,0xe663f,0x2696a,0x17870,
-0x2665b,0x17a32,0x17a34,0x17a31,0xe5c76,0x2696f,0x26967,0x26965,
-0x26969,0x26966,0xe5c78,0xe5c7c,0x2696b,0x2696d,0x17a35,0x17a37,
-0xe5d22,0x2696c,0x17a38,0x17a36,0x2696e,0xe5c7e,0x00000,0xe5d23,
-0xe5c77,0x17a33,0x00000,0xe5d21,0x00000,0xe5e5b,0xe5e5a,0x17b21,
-0x26c21,0x26c27,0x17b23,0x26968,0x26c26,0xe5e5c,0x26c2d,0x26c24,
-0x26c2b,0x26c2a,0x26964,0x26c25,0x26322,0x26c2e,0x26c23,0x26c28,
-0xe5e58,0x26c2c,0x26c22,0xe5e56,0x26d77,0x17b22,0x26c29,0xe5e57,
-0x00000,0x26f43,0x26d78,0x26d76,0x26d74,0x26d75,0x26d79,0xe6640,
-0x17c45,0x26f41,0x26f3f,0x26f44,0x26f42,0xe6043,0x26f45,0x17c46,
-0x26f40,0xe602f,0xe6146,0x2704a,0x00000,0xe6641,0x27134,0x27135,
-0x27136,0xe6147,0xe617c,0x27235,0x2722d,0x2226f,0x14f4d,0x00000,
-0x1534b,0x00000,0x2325a,0x23259,0x15825,0x15d28,0x23921,0xe3863,
-0xe3860,0x2387e,0xe3861,0x16170,0x1663f,0xe3e61,0x1663e,0x16640,
-0x00000,0x24d5b,0x25367,0x25a25,0x25a27,0x25a26,0x00000,0x17536,
-0x25f25,0x26326,0x27173,0x14865,0xe272d,0x22869,0x2286a,0x22868,
-0x22867,0x14f4e,0xe6642,0x22d4a,0x22d48,0xe2f23,0xe2e7c,0x22d47,
-0xe2e7e,0x1534c,0x1534e,0x1534d,0x22d49,0xe2f24,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe3369,0x23266,0x23263,0x23261,
-0x00000,0xe336c,0x15826,0x23264,0x1582b,0x2325e,0x2326d,0xe336f,
-0x2326f,0x2325f,0xe336e,0x15828,0x23270,0x2326b,0x2325d,0x23262,
-0x2326c,0x23268,0x23265,0xe336b,0x1582d,0x2326e,0x23260,0xe336a,
-0xe3370,0x23269,0x2325b,0x1582c,0x15829,0x23267,0xe336d,0x2326a,
-0x2325c,0x1582a,0x15827,0x00000,0x00000,0x00000,0xe3866,0x15d32,
-0x23928,0x15d31,0xe3864,0x2392b,0x2392e,0x15d2e,0x15d2c,0x23923,
-0x2392c,0x2392a,0x23927,0x2392f,0x23930,0x23932,0x23933,0x23922,
-0x15d2b,0x23925,0x23924,0x23931,0x15d2d,0x23926,0x15d2f,0x15d2a,
-0x23929,0x15d33,0x00000,0x15d30,0x2392d,0x00000,0x00000,0x00000,
-0x16177,0x24025,0x00000,0x23f78,0x16174,0xe3e62,0x2472e,0x24023,
-0x23f75,0x16172,0x23f7a,0x16175,0x23f7e,0x23f7c,0x16178,0x16171,
-0x00000,0xe3e63,0x23f76,0x23f79,0x16176,0x00000,0x23f77,0x00000,
-0x24024,0x24022,0x23f7b,0x23f7d,0x24021,0x16173,0xe3e68,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x2472f,0x24735,0x2472b,
-0x24731,0x16641,0x2472d,0x16647,0xe4444,0xe4445,0x16646,0xe4449,
-0x16645,0x24734,0x16648,0x16649,0x2472a,0x24737,0x1664a,0x16644,
-0x16643,0x24733,0x1664b,0x24729,0x2472c,0x24736,0x24732,0x00000,
-0x00000,0x24d7b,0x24d70,0x16642,0x00000,0xe4446,0xe4448,0x00000,
-0x16a72,0x24d64,0x24d79,0x24d65,0x16a6d,0xe494f,0x24d62,0x00000,
-0x24d6b,0x24d63,0x16a6f,0x24d5d,0x24d78,0x16a70,0x24d75,0x24d76,
-0x24d5e,0x16a75,0x24d6d,0xe494a,0x24d67,0x24d6e,0x24d61,0x00000,
-0x24d7a,0x24d72,0x24d6c,0x24d5c,0x16a71,0x24d73,0xe4945,0x16a74,
-0x24d77,0xe494c,0x24d71,0x16a6e,0x24d6f,0xe4949,0x24d69,0x16a6c,
-0x24d60,0x24d68,0x24d74,0x24d66,0x00000,0xe494e,0x24d6a,0xe494b,
-0x00000,0x00000,0xe6643,0x00000,0x16e6a,0x24730,0x25379,0x25424,
-0x25378,0x25374,0x25371,0x16e6b,0x2536f,0x16a73,0x25368,0x16e69,
-0x2536e,0x16e68,0x25373,0x25370,0x25422,0x2537b,0x25375,0x2537a,
-0x16e64,0x25372,0x25427,0x25369,0x2536a,0x25423,0x16e65,0x25428,
-0x16e67,0x25429,0x25377,0x24d5f,0x2537d,0x25376,0x25421,0x2537c,
-0x00000,0xe4e5d,0x00000,0x2536d,0x16e62,0x25426,0x16e63,0x2536b,
-0x16e66,0x25a32,0x2537e,0x25425,0x00000,0xe4e59,0x00000,0x00000,
-0x00000,0x25a2f,0x16e61,0x1722a,0x25a39,0x25a35,0x00000,0x25a33,
-0x25a2e,0x25a3d,0xe525b,0xe525d,0x00000,0x1722e,0xe525f,0x25a2a,
-0x25a36,0x25a37,0x25a2d,0x25a2c,0x25a3a,0x00000,0x25a30,0x25a2b,
-0x25a31,0xe5262,0x25a3c,0x25a29,0x25a3b,0x25a38,0x1722c,0x1722b,
-0x00000,0xe525e,0x1722d,0x25a34,0x25a28,0xe6645,0x00000,0x00000,
-0x00000,0xe6644,0x25f27,0x1753c,0x25f2b,0x25f28,0x25f2f,0x25f35,
-0x25f2a,0xe563a,0x25f3e,0x17539,0x25f38,0x25f2d,0x25f39,0x25f34,
-0x25f3b,0x25f2c,0x1753e,0x1753d,0x25f2e,0x25f3c,0x25f26,0x25f3a,
-0x17537,0xe5639,0x25f32,0x25f31,0x25f36,0x25f29,0x1753b,0xe563b,
-0x1753f,0x25f30,0x25f37,0x17540,0x25f33,0xe5636,0xe5634,0x00000,
-0x00000,0x17538,0x1753a,0x26333,0x26331,0xe5b28,0xe5876,0x26337,
-0x26335,0x26338,0xe5878,0x2632a,0x26332,0x2633c,0x25f3d,0x2632e,
-0x1773a,0x2536c,0x26329,0x26336,0x26330,0x2632d,0x26328,0x26327,
-0x2633b,0xe5873,0x2632c,0x2632b,0x17738,0x26334,0xe5874,0x17737,
-0xe5875,0x00000,0x17739,0x2632f,0x2633a,0xe6646,0x26669,0x2666a,
-0xe5b2c,0x17874,0x26667,0x17871,0x2666f,0xe5b27,0x17875,0x26671,
-0x26666,0x26339,0x26673,0x26668,0x00000,0x17872,0x2666e,0xe5b29,
-0x26670,0x2666b,0x26672,0x2666d,0x2666c,0x17873,0xe5877,0xe5b2b,
-0x26971,0x26972,0xe5d25,0x26974,0x17a39,0x17a3a,0x26975,0x26973,
-0xe5d24,0x26970,0xe5e5d,0x26c31,0x26c34,0x26c30,0x00000,0x17b27,
-0x26c32,0x17b26,0x17b25,0x17b24,0x26c33,0x26d7e,0x26d7c,0xe5f5f,
-0x26d7b,0x26c2f,0x26d7d,0x26c35,0x26d7a,0xe6045,0x26f48,0x26f26,
-0x26f46,0x17c47,0x26f47,0x26f49,0xe6647,0x2704d,0x17c66,0x2704c,
-0x2704b,0x17c67,0x00000,0x17d27,0x2715d,0x27175,0x27174,0x27176,
-0x14866,0x22d4b,0xe2f26,0x23271,0x23272,0xe386a,0xe3e6a,0xe3e69,
-0x24026,0x00000,0x26c36,0x2704e,0x14867,0x1534f,0x22d4c,0xe3371,
-0xe6648,0x00000,0x23934,0x15d34,0x00000,0x24028,0x24027,0x16179,
-0xe444d,0x1664c,0x2542a,0x16e6c,0xe4e5f,0x16e6d,0xe5263,0xe5264,
-0x00000,0x1722f,0x17c68,0x14868,0x00000,0x00000,0xe2f27,0x22d4d,
-0x14f50,0x22d4f,0x22d4e,0x15350,0x00000,0x23273,0xe3374,0x2327a,
-0x1582e,0x23278,0x23276,0xe3377,0x2327d,0x23274,0x23275,0x1582f,
-0xe3372,0x15833,0xe3373,0xe3375,0x2327e,0x15832,0x2327c,0x23279,
-0x23277,0x15830,0x15831,0x2327b,0xe3376,0x00000,0x00000,0xe6649,
-0x15d36,0x23935,0xe3872,0x15d3b,0x23945,0x15d3a,0x23947,0xe386e,
-0xe3874,0x2393b,0x15d38,0x23946,0xe386c,0x23936,0x15d39,0x23942,
-0x2393e,0x23940,0x2393a,0x23941,0xe386b,0x00000,0x15d35,0x2393d,
-0xe3873,0x2393c,0x23938,0xe386d,0x23943,0xe386f,0xe3871,0x2393f,
-0x23937,0xe3870,0x23939,0x15d37,0x23944,0x00000,0x00000,0x00000,
-0x00000,0x1617c,0x24033,0x00000,0xe3e70,0xe3e72,0x2402f,0x24031,
-0x2402c,0x2402b,0x24029,0xe3e6d,0x24030,0x24032,0x2402e,0xe3e6f,
-0x2402d,0x1617a,0x1617b,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x24035,0x16654,0x24739,0x2473f,0x2473a,0x2473b,0xe444e,
-0x24740,0x00000,0x16656,0x00000,0x1664e,0x16655,0x24738,0x2402a,
-0x16651,0x1664f,0x2473e,0x2473d,0x16650,0x16652,0x2473c,0x1664d,
-0xe444f,0x16653,0x00000,0x00000,0x00000,0x00000,0xe4e60,0x24d7d,
-0x16a7c,0xe4959,0xe4952,0x24e2a,0x24e29,0xe4957,0x24e24,0x16a7e,
-0x24e28,0x24d7e,0x24e21,0x16a76,0x16a78,0xe4954,0x24e26,0x24d7c,
-0x16a7a,0x16a79,0x24e22,0x24e27,0x24e25,0x16a7b,0x24e23,0xe4951,
-0xe4956,0x24034,0x16a77,0xe4958,0x00000,0x2542b,0x25432,0x16e6f,
-0x00000,0x25436,0x16e73,0x2542e,0x2542c,0x00000,0x25435,0xe4e61,
-0x16e6e,0x25434,0x16e70,0x16e71,0x2542d,0x16e72,0x25433,0x2542f,
-0x25430,0x25431,0x16a7d,0xe4e62,0x00000,0x00000,0x25a3e,0x25a4a,
-0x00000,0x17234,0x25a45,0x25a47,0xe5265,0x17232,0x25a3f,0x25a43,
-0x00000,0x25a46,0x17230,0x17233,0x25a49,0x25a41,0x25a42,0x25a48,
-0x25a40,0x25a44,0x17231,0x25f40,0x00000,0x25f3f,0x17542,0x25f45,
-0x17544,0xe5640,0x00000,0x17541,0x25f41,0x17545,0x25f42,0xe563f,
-0xe563d,0x25f43,0x25f46,0xe5642,0x17543,0x00000,0x26341,0x00000,
-0xe5879,0x26344,0xe587a,0x2633e,0x26340,0xe587c,0xe587b,0x2633f,
-0x26342,0x26343,0x25f44,0x2633d,0xe664a,0x00000,0x17878,0x26677,
-0x2667a,0x2667c,0x26675,0x26676,0x26679,0x2667b,0x17879,0x17877,
-0x17876,0x26678,0x26674,0x26976,0x17a3b,0xe5d29,0x26977,0xe5d28,
-0x00000,0x26c38,0x17b28,0x26c3a,0x17b29,0x26c37,0x26c39,0x17b72,
-0x00000,0x26e21,0x17b71,0x26f4c,0x26f4b,0x00000,0x26f4a,0x00000,
-0xe6149,0x27137,0x27138,0x2713a,0x27139,0xe617d,0x22270,0x14869,
-0x00000,0x15351,0x23948,0x1617d,0xe664b,0x24741,0x1773b,0xe5b2f,
-0x2667d,0xe6046,0xe614a,0x14b44,0xe2f29,0x00000,0x00000,0x15d3d,
-0x00000,0xe3876,0xe3875,0x15d3c,0xe3877,0x24036,0x1617e,0x24038,
-0x24037,0x00000,0xe3e74,0x24742,0x16657,0x24e2b,0x24e2e,0x24e2d,
-0x00000,0x24e2c,0x25437,0x25439,0x25438,0xe4e65,0x17236,0xe5266,
-0x00000,0xe4e64,0x17235,0xe5646,0x17546,0x25f47,0x25f49,0x25f48,
-0xe587e,0xe587d,0x1773c,0xe5921,0x00000,0xe5b31,0x26721,0x2667e,
-0x00000,0x26978,0x17a3c,0xe5d2a,0xe5e61,0x17b2a,0x26e23,0x26e22,
-0x17d28,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x14b45,0x22d50,0x15352,0x2394b,0x23949,0x00000,
-0x00000,0x2394a,0x2403a,0x2403b,0x24749,0x24039,0x00000,0x24743,
-0x24747,0x24746,0x24748,0x16658,0x24745,0x24744,0x2474a,0xe4454,
-0x24e31,0x24e2f,0xe495c,0x24e30,0x2543c,0x2543a,0xe4e66,0x00000,
-0x2543b,0x25a4b,0x25f4a,0x25f4b,0x1773d,0xe5b32,0x26722,0x26979,
-0x17a3d,0x00000,0x26c3b,0x26e24,0x17b73,0x00000,0x26f4d,0x2713b,
-0x14b46,0x00000,0x15354,0x15355,0x22d51,0xe2f2a,0xe2f2c,0x22d52,
-0x15353,0x00000,0x15839,0xe337b,0x15837,0xe337a,0x15836,0x1583d,
-0x15835,0x1583e,0x23321,0x1583b,0x00000,0x15838,0x1583c,0x1583a,
-0x15834,0xe337c,0x00000,0x15d45,0xe387e,0x15d3f,0x2394f,0x15d44,
-0xe3923,0xe3929,0x15d46,0x15d40,0x00000,0x15d41,0xe3879,0x2394d,
-0xe387b,0xe3925,0x15d3e,0xe3922,0x2394e,0x15d43,0xe6330,0x00000,
-0x2394c,0x15d42,0xe387a,0x00000,0x1622b,0xe3e7c,0x1622d,0x00000,
-0xe3e7d,0x2403e,0x1622c,0x16221,0x16225,0xe3f24,0x1666b,0x2474f,
-0x24040,0x16226,0xe3e7e,0xe3e75,0x24043,0x24044,0x1622a,0x00000,
-0x24046,0xe3f21,0x24048,0xe3f23,0x24049,0x2403d,0x2403c,0x2404a,
-0x16229,0x24047,0x24045,0x00000,0x16227,0x16223,0x1622e,0x24041,
-0x24042,0x2403f,0xe3e78,0x16228,0x00000,0xe3f22,0x16224,0x00000,
-0x16222,0x2474e,0x16666,0x16661,0xe4460,0xe4459,0x1665c,0xe4463,
-0x1666c,0x1665d,0xe4455,0x16659,0x16668,0x16665,0x16667,0xe4458,
-0x1665e,0x16663,0x1665a,0x1665b,0x24756,0x24753,0x2474b,0x24750,
-0xe445b,0x16669,0x24757,0x1666a,0x16660,0xe445c,0xe4461,0x2474d,
-0xe4456,0x24755,0x24751,0x24754,0x24752,0x16664,0x2474c,0x1665f,
-0xe445d,0x00000,0x00000,0x24e34,0x16b22,0x16b25,0xe495f,0x24e36,
-0xe4964,0x16b2d,0x24e35,0x16b27,0xe4963,0x16e78,0x24e37,0x00000,
-0x16b2c,0x24e33,0x16b2e,0xe495e,0xe4962,0xe496b,0x16b23,0xe4968,
-0x16662,0x16b26,0xe4960,0x16b24,0x16b28,0x16b2a,0x16b21,0x16b2f,
-0x16b2b,0xe4965,0x16b29,0x24e32,0xe4966,0x00000,0x00000,0xe4e74,
-0x16f21,0xe4e67,0x16e7b,0xe4e72,0xe4e70,0xe4e6e,0x16f24,0xe4e6c,
-0x2543f,0x16f25,0x2544b,0x25444,0x16e74,0x2544c,0x25446,0x16e7e,
-0x25447,0xe4e73,0x16e7d,0x2544a,0x16e77,0x25448,0x2543e,0x16e76,
-0x25a56,0x16e7c,0xe4e75,0x16e79,0xe4e69,0x16f23,0xe4e6a,0x2543d,
-0xe4e76,0x25441,0x16e75,0x25440,0x25442,0x25443,0x16f22,0x25445,
-0x25449,0x2544d,0x00000,0x16f26,0x1723c,0x25a51,0x25a57,0x25a54,
-0x25a4c,0x25a58,0x25a4d,0xe526a,0x25a53,0xe526b,0x17237,0x1723d,
-0x25a59,0xe4e6f,0xe5267,0x17239,0xe526e,0x17243,0x1723e,0x25a5b,
-0x25a55,0x1723a,0x25a4e,0x17244,0x25a4f,0x25a50,0x17245,0x17242,
-0x16e7a,0xe5269,0x17238,0x25a5c,0x17246,0xe5268,0x1723f,0x25a5a,
-0x1723b,0x17240,0x17241,0xe664c,0x1754e,0x25f50,0x25f59,0x25f56,
-0x25f58,0xe5649,0x1754b,0x25f51,0xe564a,0x25f57,0x17547,0x25f53,
-0x1754f,0x25f4f,0x25f54,0x25f5b,0x25a52,0x25f55,0x25f4e,0x17548,
-0x25f4d,0x17549,0x25f5c,0x1754a,0x25f5a,0x1754d,0x25f4c,0xe5648,
-0x1754c,0x00000,0x25f52,0x26347,0x26355,0x26350,0x26352,0x26346,
-0x1773e,0xe592a,0x26345,0x17741,0x17740,0xe5926,0x26354,0x2634c,
-0x26349,0x2634f,0xe5924,0x26348,0xe5928,0x2634a,0x26353,0x26351,
-0xe5923,0x1773f,0x26358,0x26356,0x2634d,0x26357,0x2634e,0xe5b34,
-0x26726,0x1787a,0x2672d,0xe5b35,0x00000,0x26c3e,0x17923,0x2634b,
-0x26724,0x1787d,0x26725,0x2672a,0xe5b36,0xe5d33,0x17921,0x17922,
-0x26723,0x2672c,0x2672e,0x26727,0x26729,0x2672b,0x26728,0x2672f,
-0x1787c,0x17924,0x1787e,0x00000,0x1787b,0x2697c,0x00000,0x17a42,
-0x2697a,0xe5d30,0xe5d2c,0x2697e,0xe5d32,0x26a21,0x17a40,0x26a22,
-0x2697d,0xe5d2b,0x2697b,0x17a43,0x17a3f,0x26a23,0xe5d2e,0x17a41,
-0x17a3e,0xe5c6d,0x00000,0xe642d,0x17b2b,0xe5e62,0x00000,0x17b2c,
-0x26c3d,0x26c3c,0x26c3f,0x26c40,0xe5e63,0x17b2d,0x26e25,0x26e2a,
-0x17b74,0xe5f61,0x26e27,0xe5f62,0x26e26,0x26e29,0x26e28,0xe6048,
-0x26f51,0x00000,0x17c48,0x26f50,0x26f4e,0xe6047,0x26f4f,0x00000,
-0xe6049,0xe607b,0x17c6a,0x17c69,0x2704f,0x27050,0x17c6b,0xe614b,
-0x2713c,0x2713d,0x17d34,0xe616b,0x17d3a,0xe617e,0x27177,0x27236,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x8c00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14b47,
-0x00000,0x23950,0xe392a,0x23951,0x24758,0x24e38,0x2544e,0x17551,
-0xe564d,0x17550,0x26359,0x26730,0xe5f64,0x26f52,0x14b48,0x23322,
-0x1583f,0x15d47,0x2475a,0x24759,0x16f27,0x2544f,0x16f28,0x25f5d,
-0x17742,0xe5d34,0xe664d,0xe6221,0x17d43,0x14b49,0x2286b,0x23323,
-0xe392d,0x00000,0x15d48,0xe392c,0x23952,0x23953,0xe3f2a,0x2404b,
-0xe3f29,0x1622f,0x1666d,0xe4464,0x2475c,0x2475b,0x2475d,0xe496d,
-0x24e39,0x24e3a,0x16b30,0x17247,0x16f29,0x17248,0x00000,0x25f61,
-0x25f5e,0x25f60,0x25f5f,0x17552,0xe592b,0x2635a,0x26732,0x26731,
-0x22524,0x15841,0x15840,0x23324,0xe392e,0x23954,0xe3f2c,0xe3f2b,
-0x2404d,0x2404c,0x16230,0xe3f2d,0x2475f,0x24760,0x2475e,0xe634a,
-0xe4465,0x1666f,0x1666e,0x00000,0x16b32,0x16b31,0xe4e7a,0x25450,
-0x25a5f,0x25a5d,0x25a5e,0x17249,0x25f63,0x25f62,0xe564f,0x2635d,
-0x2635c,0x2635b,0x26733,0xe614d,0x27178,0x14b4a,0x15356,0xe2f2e,
-0x15357,0x15842,0x15843,0x23326,0x23325,0x23955,0xe3930,0x15d4e,
-0x15d4c,0x15d49,0x15d4d,0x15d4b,0x15d4a,0xe3932,0xe3931,0x16231,
-0x24050,0xe3f2f,0x16674,0x16233,0x16238,0x24052,0x1623a,0x16239,
-0x1623c,0x24051,0x2404e,0x16236,0x16232,0x16234,0x2404f,0x1623b,
-0x16237,0x16235,0x16676,0x16675,0x16673,0x16677,0x00000,0x16671,
-0x16672,0xe4469,0x16670,0x00000,0x24761,0xe4467,0x00000,0x24e3c,
-0xe4970,0x16b34,0x16b35,0x16b33,0xe4972,0x24e3b,0xe4971,0x24e3d,
-0xe664e,0x25453,0x25455,0xe4e7e,0x16f32,0x25456,0x16f2b,0x25452,
-0x16f2a,0x16f34,0x16f30,0x16f31,0x16f2d,0x25451,0x16f2c,0x25457,
-0x25454,0xe4e7d,0x16f33,0xe4f22,0x16f2e,0x16f2f,0x25a61,0xe5275,
-0x25a63,0x25a62,0xe5273,0x25a64,0x1724a,0x25a60,0xe5651,0xe5652,
-0x17556,0x25f64,0x17553,0x17557,0x17555,0x17554,0x2635e,0x00000,
-0x26361,0x00000,0x26360,0xe592e,0x2635f,0x17743,0x26734,0x26735,
-0x17925,0x26736,0x17926,0xe5b38,0xe664f,0x17a45,0xe6428,0x17a44,
-0x26c41,0xe5e65,0xe5e66,0x17b2e,0x26c42,0x26e2b,0x17b75,0x17b76,
-0xe6650,0x26f53,0xe604a,0x17c6d,0xe614e,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x14b4b,0xe3933,0x15d50,0x15d4f,
-0x24762,0x24763,0x00000,0x16b36,0x25a65,0x16f35,0x25a66,0x25f65,
-0x14b4c,0xe243a,0x22d53,0x15359,0x15358,0x00000,0x23327,0x15844,
-0x23328,0x23958,0xe3939,0x23957,0xe3937,0x23956,0xe3935,0xe3938,
-0x24054,0x1623f,0xe3f39,0xe3f34,0x24053,0x1623e,0xe3f37,0xe3f30,
-0xe3f33,0x24055,0x1623d,0xe3f38,0x24765,0x24768,0x24766,0x24767,
-0x2476b,0x24764,0x2476c,0x24769,0x2476a,0x16b38,0x24e3e,0xe4975,
-0xe4973,0x16b37,0xe4974,0x2545b,0x25459,0xe4f26,0x00000,0x16f36,
-0x25458,0x2545a,0xe4f25,0x16f37,0xe4f23,0x25a67,0xe5277,0x25a68,
-0x17558,0xe5931,0x26738,0x2673a,0x26737,0x26739,0x26a24,0x26c43,
-0xe6651,0x00000,0x2715e,0x14b4d,0x1535a,0x23329,0x2332b,0x2332a,
-0x00000,0x2395b,0x15d52,0xe393e,0x23959,0xe393a,0x15d51,0x2395c,
-0xe393d,0x2395d,0x2395a,0x00000,0x00000,0x24061,0x16247,0x24059,
-0x2405f,0xe3f3f,0xe3f3a,0x16242,0x16245,0x24058,0x16240,0x2405c,
-0x24772,0x16244,0xe3f3b,0x24057,0xe3f3e,0x2405d,0x2405a,0x24060,
-0x24056,0x2405e,0x16243,0x16246,0x2405b,0x16241,0x00000,0x16679,
-0x2476e,0x16678,0x24775,0x24774,0x16721,0x00000,0x16722,0x24776,
-0x1667a,0x24773,0x1667e,0x24778,0x2476f,0xe446b,0x24771,0x1667b,
-0x2476d,0x24770,0x24777,0x1667c,0x24779,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x1667d,0x00000,0x16b39,0x24e43,0x24e49,0x24e41,
-0x24e4a,0xe497b,0x24e40,0x24e45,0x24e4b,0x24e48,0x24e47,0x24e46,
-0xe497a,0x24e3f,0x24e44,0xe4979,0x00000,0x24e42,0x00000,0x16f3c,
-0x16f39,0x25464,0x25469,0x2546b,0x25468,0x25461,0x25463,0x2546d,
-0x2546a,0x25465,0x2546e,0x25462,0x2546c,0x16f3a,0x16f40,0x16f3e,
-0x2545c,0x16f3f,0x16f3b,0x2545d,0x2545f,0x2545e,0x25466,0x25467,
-0xe4f2c,0x16f3d,0xe4f2b,0x16f38,0x00000,0x00000,0x25460,0x00000,
-0x25a72,0x1724c,0xe527e,0x25a69,0x1724d,0x17250,0x25a6e,0x00000,
-0x25a6b,0x1724f,0x00000,0xe527b,0x25a6f,0x25a70,0x25a6a,0x25a73,
-0x25a6c,0x25a71,0x1724e,0xe527c,0x1724b,0x25a6d,0xe5654,0x25f6b,
-0x1755b,0x17559,0x1755c,0x1755a,0x25f6a,0x25f67,0x25f66,0xe5655,
-0x25f69,0x00000,0x00000,0x25f68,0x2636f,0x17749,0x26366,0x26365,
-0xe5932,0x17744,0x2636b,0x2636a,0x26362,0x2636d,0x26367,0x17748,
-0x26364,0x2636c,0x26363,0x17745,0x17747,0x26368,0x17746,0x26369,
-0xe5b3a,0x2636e,0x2673e,0xe5b39,0x1792b,0x2673b,0x00000,0x2673f,
-0xe5b3b,0x00000,0x17928,0x2673d,0x1792d,0xe5b3c,0x1792a,0xe5b3d,
-0x2673c,0x00000,0x1792c,0x26740,0x17927,0x00000,0x00000,0x00000,
-0x00000,0x17a47,0x17a49,0xe5d37,0x26a27,0x17a48,0x26a25,0x17929,
-0x26a26,0x17a46,0x17b2f,0x17b31,0x26c45,0x17b30,0x26c44,0x00000,
-0x26e30,0x17b77,0x26e2f,0x17b78,0x26e2d,0x26e2c,0x26e31,0x26e32,
-0x26f54,0xe604b,0x26e2e,0x00000,0x00000,0x27054,0x27051,0x27052,
-0x27053,0x17d29,0xe6150,0x27140,0x2713f,0x2713e,0x2715f,0xe616c,
-0x2722e,0x27179,0x17d3b,0x14b4e,0x15845,0xe393f,0x00000,0xe3940,
-0xe3f40,0xe4473,0x16723,0xe497d,0xe497c,0x00000,0xe4f30,0xe4f32,
-0xe4f2f,0xe4f31,0x16f41,0x00000,0xe6652,0x25a74,0x00000,0xe5935,
-0x1774a,0xe5936,0x26741,0xe5b3f,0x00000,0x00000,0xe5d38,0x00000,
-0x00000,0x2717a,0x14b4f,0x14f51,0x1535c,0x1535b,0x00000,0x15848,
-0x00000,0x2332c,0x15846,0x2332d,0x15847,0xe6653,0xe3941,0x23962,
-0x2395e,0xe3947,0x00000,0x15d53,0x23961,0x23960,0x2395f,0x15d54,
-0x23963,0x23964,0x00000,0x00000,0xe3f45,0x24068,0x24066,0x2406a,
-0x2406b,0x24071,0xe3f47,0x2406d,0x2406f,0x00000,0x24067,0x24062,
-0x00000,0x2406e,0xe3f44,0xe3f46,0x24070,0x24069,0x2406c,0x24063,
-0x16249,0x24065,0x24064,0x16248,0x1624a,0xe3f49,0x16726,0x2477b,
-0x2477d,0x2477c,0x24823,0x16724,0xe4476,0x2477e,0x2477a,0x24821,
-0x24822,0x16725,0x16727,0x24824,0x00000,0x24e4f,0x24e4e,0x00000,
-0x24e4c,0x24e4d,0x16b3b,0x16b3d,0x16b3a,0x16b3c,0x25475,0x25476,
-0x25471,0xe4f36,0x25472,0x16f43,0x16f48,0x16f42,0x16f49,0x16f44,
-0x25473,0x00000,0xe4f33,0x25474,0x25470,0x16f4a,0x16f46,0xe4f35,
-0x00000,0x16f45,0x16f47,0xe4f34,0x2546f,0xe5324,0x25a76,0x17252,
-0xe5322,0xe5321,0x25a78,0x17254,0x25a7b,0x25a77,0x25a75,0x25a7a,
-0x17253,0x25a79,0x00000,0x17251,0xe5325,0xe5659,0x1755e,0x17561,
-0x25f6d,0xe565a,0x1755f,0x25f6c,0x1755d,0x17560,0x26370,0x26371,
-0x26372,0x1774b,0xe5937,0x26373,0x00000,0x1774c,0x1792f,0x26744,
-0x26745,0x26743,0x26742,0x26746,0x1792e,0x26a2b,0x26a29,0x26a2a,
-0x26a2c,0x26a28,0x26a2d,0x26c47,0xe5e67,0x26c48,0x26c46,0x17b32,
-0x26e33,0x17b79,0x26e34,0x26f56,0x26f55,0xe6222,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x14b50,0x1624b,0xe3f4b,0xe4477,0x16728,
-0xe4478,0xe4a21,0xe4a22,0x16b3e,0xe4f37,0xe5327,0x17256,0xe5326,
-0x17255,0x00000,0xe6654,0x00000,0xe5938,0x17930,0x17a29,0x17b33,
-0x14b51,0x15849,0x16729,0xe4f39,0x26747,0xe272f,0x00000,0x00000,
-0x00000,0xe243b,0x00000,0x00000,0x00000,0x00000,0xe2730,0x22526,
-0x00000,0xe2733,0x14b52,0x00000,0x14b55,0x14b54,0x14b53,0xe2731,
-0x00000,0x22525,0xe2a72,0x2286d,0xe2a70,0x2286f,0x14f52,0xe2a74,
-0x00000,0x14f54,0x2286c,0x2286e,0x14f53,0x22871,0x22870,0x22872,
-0xe2a73,0xe2a71,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x22d57,0x22d55,0x1535f,0x22d54,0x15364,0x15361,0x1535e,0xe2f31,
-0x15365,0xe2f32,0x15360,0x15363,0x00000,0x15362,0x22d56,0xe2f33,
-0x1535d,0xe2f30,0x00000,0x00000,0x1584f,0x2332f,0x23335,0x1584c,
-0x15853,0xe3425,0x1584e,0x23332,0x23334,0x15851,0x2332e,0x23331,
-0x1584d,0x1584a,0x23330,0x15850,0x23333,0x15852,0x1584b,0x00000,
-0xe3427,0xe3426,0x00000,0x23966,0x23969,0x15d56,0xe394b,0x15d60,
-0x15d5c,0x23967,0xe394a,0xe394e,0x15d64,0x15d5d,0x15d62,0x15d58,
-0x00000,0x15d55,0x15d57,0x15d63,0x23968,0x15d5b,0x15d5e,0x15d5a,
-0x15d5f,0x2396a,0x15d61,0x15d59,0x23965,0xe394c,0x00000,0x00000,
-0xe3f4f,0xe3f50,0xe3f4d,0xe3f4c,0xe3f51,0x24072,0x1624c,0x24074,
-0xe3f55,0x1624e,0x16250,0x00000,0x24073,0x1624d,0x16251,0xe3f56,
-0x1624f,0x00000,0xe3f54,0xe3f57,0x1672f,0x24829,0x16737,0x24826,
-0xe447d,0x16738,0x1672d,0xe4479,0x24827,0xe447c,0xe447a,0x16732,
-0xe447b,0x24828,0x1672b,0x1672a,0xe447e,0x16735,0x16734,0x16733,
-0x16731,0x16736,0x24825,0x1672c,0x1672e,0x16730,0x00000,0x00000,
-0x16b40,0x16b43,0xe4a24,0x16b47,0x16b41,0x16b46,0x16b44,0xe4a27,
-0x16b3f,0xe4a26,0x16b45,0x16b42,0x00000,0x00000,0x00000,0x2547a,
-0x16f4d,0x16f4b,0xe4f3c,0x2547b,0x00000,0x16f4e,0x16f4c,0x25479,
-0x25478,0xe4f3b,0x1725a,0x25477,0x17258,0x17257,0x25a7c,0x16f4f,
-0x17259,0x25a7d,0x1725c,0x25a7e,0x1725b,0x17563,0x25f6f,0x17562,
-0x17567,0x17565,0x17566,0x1774e,0x17564,0x25f6e,0x25b21,0x1774d,
-0x1774f,0xe593a,0x17931,0x17932,0x00000,0x26a2e,0x00000,0x17c4a,
-0x17c49,0x14b57,0xe225e,0xe225d,0x22275,0x15854,0xe243c,0x22272,
-0x22273,0x22271,0xe243d,0x22274,0xe6655,0x00000,0x2252a,0x22527,
-0x2252c,0x22528,0x14b58,0x14b5b,0xe2735,0x22529,0x14b5a,0x2252b,
-0xe2739,0xe2734,0x14b59,0xe3951,0x00000,0xe2a77,0x00000,0x22875,
-0x22877,0x14f57,0x22873,0x22876,0x22874,0x14f55,0x14f58,0xe2a75,
-0x14f56,0xe2a78,0x00000,0x00000,0xe2f35,0x22d59,0x22d5d,0x22d5a,
-0xe2f38,0x15368,0xe2f34,0x15369,0xe2f3e,0x22d5c,0xe2f37,0x22d5e,
-0x22d60,0xe2f3c,0x15366,0x22d5f,0x00000,0xe2f3b,0x15367,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x23971,0x22d5b,0x23336,0x2333f,
-0x2333d,0x23338,0x23339,0x2333e,0x23340,0x15856,0xe3429,0x2333b,
-0x23337,0x15855,0x15857,0x2333a,0x23341,0x2333c,0x00000,0x00000,
-0x15d65,0x23974,0x2396c,0x23972,0x23973,0x15d66,0xe394f,0x2396b,
-0x2396d,0x22d58,0x2396f,0x23970,0x2396e,0x16253,0xe636c,0xe3952,
-0x00000,0x2407b,0x25b22,0x2407c,0x24079,0x15d67,0x16255,0x24078,
-0x2407e,0x2407d,0x16252,0x24123,0x24077,0x24122,0x24075,0x24121,
-0x2407a,0x16254,0xe3f59,0x24830,0xe4523,0x2482b,0x24831,0x2482c,
-0x2482a,0x2482d,0x16739,0xe4524,0x2482f,0xe4525,0x2482e,0x1673a,
-0x16b49,0x16b48,0x24e56,0x24e59,0x24e51,0x24e55,0x16b4a,0x24e54,
-0x24e52,0x24e58,0x24e53,0x24e50,0x24e57,0xe4a2a,0x25523,0x16f52,
-0x26374,0x2547e,0x25521,0x2547d,0x24076,0x16f51,0x25524,0x2547c,
-0x16f50,0x16f53,0x25522,0x25b23,0x1725d,0x25b24,0x25b25,0xe532b,
-0x25f70,0x17568,0x26375,0x26376,0xe593c,0xe593b,0x26377,0x26749,
-0x26748,0x26a30,0x00000,0x26a2f,0x26c4a,0x26c4b,0x26c49,0x26e35,
-0x17b7a,0x14b5c,0x1536b,0x1536a,0x1585a,0x15859,0x23343,0x23344,
-0x23342,0xe342a,0x15858,0x23978,0xe3955,0x23979,0x23975,0x15d68,
-0x23976,0xe3954,0x23977,0x00000,0xe6657,0x00000,0x00000,0x24126,
-0x24128,0x24124,0x24127,0x16256,0x24125,0x16257,0x00000,0xe4528,
-0x24279,0x1673d,0x1673c,0xe4527,0x1673b,0x00000,0x24832,0x24833,
-0x00000,0x00000,0x24e5b,0x24e5d,0x16b4e,0x16b4b,0xe4a2c,0x16b4d,
-0x16b4c,0x24e5c,0x24e5a,0xe4a2b,0xe4a2d,0x00000,0x00000,0x00000,
-0x2552b,0x25528,0x25529,0x16f57,0x2552a,0x25525,0x25526,0x16f54,
-0xe4f3f,0x16f55,0x25527,0x16f56,0xe4f40,0x25b29,0xe532d,0x25b2a,
-0x25b27,0x25b28,0x1725e,0x25b26,0x00000,0xe532c,0xe532f,0x00000,
-0x00000,0x25f74,0x25f71,0x25f73,0x1756b,0x25f77,0x1756a,0x25f75,
-0x25f78,0x25f76,0x25f72,0x17569,0x00000,0x26379,0x00000,0x2637a,
-0x26378,0xe593d,0x2637c,0x17750,0x17751,0x2674b,0x17934,0x2637b,
-0x2674a,0x17933,0x26a33,0x26a34,0x17a4a,0x26a32,0x00000,0x26a31,
-0x00000,0x26c4c,0x17b34,0xe5e68,0x26f57,0x27056,0x27055,0xe607e,
-0x17c6e,0x17d2a,0x27057,0x27160,0xe616d,0x17d3c,0x14b5d,0x14f59,
-0x00000,0x1673e,0x00000,0x17a4b,0x14b5e,0x1536c,0x15d69,0x16258,
-0x17752,0x14f5a,0x00000,0x22d62,0x22d61,0x23345,0xe3430,0x1585d,
-0x1585b,0x1585f,0x23347,0xe342d,0x1585e,0x1585c,0xe342f,0xe342e,
-0xe3431,0x00000,0x23346,0x15d6c,0x23a21,0xe3958,0x15d6b,0x15d6d,
-0x23a26,0x15d6f,0x23a23,0x23a24,0x2397a,0x15d6e,0x23a27,0x00000,
-0xe3957,0x2397c,0xe3956,0x2397d,0x2397b,0x15d6a,0xe3959,0x23a25,
-0x2397e,0x23a22,0x00000,0x00000,0x00000,0x24134,0xe3f5d,0x24133,
-0x24131,0x24129,0x24138,0x2412c,0x24136,0x2413d,0x24135,0x16260,
-0xe3f66,0x1625c,0x2412a,0xe3f60,0x24130,0x1625e,0xe3f68,0x2412f,
-0x1625f,0x16261,0x24132,0xe3f69,0x16259,0x1625a,0x2413e,0x2413c,
-0xe3f62,0x2413b,0x2412d,0xe3f65,0x24139,0x00000,0x1625d,0x00000,
-0xe3f5e,0xe6659,0xe3f63,0x1625b,0x2413a,0x2412b,0x2412e,0x24137,
-0x00000,0x00000,0x00000,0xe6658,0x00000,0x24f22,0x2483d,0xe452e,
-0x24836,0x24849,0x24852,0x24839,0x16749,0xe452b,0x24846,0x1673f,
-0x16741,0x1674d,0x24837,0xe4537,0xe452f,0x16742,0x16744,0x1674e,
-0x16743,0xe4539,0x00000,0x00000,0xe4538,0x1674c,0x2483f,0x00000,
-0x24834,0x1674a,0x2483e,0x16746,0x24850,0x1674b,0x2484e,0x24842,
-0x2484c,0x16748,0x24835,0x2484f,0x2484a,0xe452a,0x24851,0x16740,
-0x00000,0xe452d,0x1674f,0x16745,0xe4531,0xe4529,0x2483b,0xe4534,
-0x24843,0x24847,0xe4533,0x2484b,0x16747,0x2483a,0x24838,0x24844,
-0x00000,0x00000,0xe4532,0xe4535,0x24841,0x24840,0xe4536,0x24845,
-0x24848,0x00000,0x2484d,0xe665a,0x00000,0x00000,0x24e60,0x00000,
-0x16b4f,0x24e6a,0x24e62,0x16b55,0x16b59,0x24e73,0x24e7b,0x24e6c,
-0x16b51,0xe4a34,0x24e70,0x2483c,0xe4a35,0x16b52,0x24e77,0x24e7c,
-0x24e74,0xe4a2f,0x24e76,0x24f21,0x24e78,0x24e66,0x24e6f,0xe4530,
-0xe4a38,0x16b5a,0xe4a33,0x16b56,0x24e64,0x24e71,0x16b54,0x24e6b,
-0x16b53,0x24e79,0x24e68,0x24e61,0x16b57,0x24e7e,0xe4a39,0x00000,
-0x24e63,0x24e75,0x24e72,0x24e6d,0x24e5f,0x24e5e,0x24e67,0x24e7a,
-0x16b58,0x24e7d,0x24e65,0x24e69,0x16b50,0xe4a32,0xe4a37,0x00000,
-0xe672a,0xe4a31,0x16f63,0x16f5e,0x2554d,0x25549,0x25531,0x16f5a,
-0xe4f42,0xe4f50,0x00000,0x16f59,0x16f5f,0x00000,0xe4f43,0xe4f41,
-0x2552f,0x16f5d,0x2553b,0x2552d,0x2552e,0x16f58,0x2554c,0x16f61,
-0x2553e,0x25543,0x2553d,0x25b3c,0x25539,0x25541,0x2553f,0x25532,
-0x2552c,0x25547,0x16f60,0x25548,0xe4f48,0x25542,0xe4f49,0x25537,
-0x25535,0x25530,0xe4f4b,0xe4f4e,0xe4f44,0x25538,0x25545,0x25534,
-0x25544,0x2554a,0xe4f51,0x00000,0x16f5c,0xe4f45,0x25540,0x25546,
-0x2553c,0x25536,0x16f5b,0xe4f52,0x00000,0xe4f4c,0x24e6e,0x2553a,
-0x16f62,0x25533,0x00000,0xe4f4d,0xe665b,0xe665c,0xe4a30,0x25b41,
-0x17261,0x25b40,0x25b3e,0x25b50,0x17265,0xe5335,0x25b4d,0x25b45,
-0x25b4f,0x25b37,0x25b43,0xe533d,0x17267,0xe533e,0x25b2f,0xe5338,
-0x25b2d,0x25b4e,0xe5332,0x25b4c,0x25b4b,0x25b3b,0x25b3a,0x25b30,
-0x17269,0x00000,0x25b36,0x25b3f,0x25b4a,0x1726c,0x25b51,0xe5336,
-0x17573,0x1726e,0x17268,0x25b34,0xe5337,0x25b3d,0x25b2c,0x25b2e,
-0x1725f,0x1726b,0x17264,0x25b35,0x25b44,0x2554b,0x1726a,0x25b2b,
-0x1756e,0x25b46,0x25b49,0x17266,0xe533b,0x25b39,0x1726d,0x17263,
-0xe533c,0xe5339,0xe533a,0x17262,0x25b42,0x25b48,0x17260,0x00000,
-0x25b32,0x25b47,0x00000,0x00000,0x25b33,0x00000,0x00000,0xe665d,
-0x00000,0x00000,0xe665e,0x00000,0x00000,0xe5331,0x25b38,0x25f7e,
-0xe5665,0x26025,0x17570,0x17572,0x2602b,0x1756c,0x26039,0x26031,
-0x26026,0x26027,0x26030,0xe5666,0x17579,0x2602f,0x25f7d,0x2602e,
-0x26022,0x2603a,0x17578,0x17576,0x26023,0xe565d,0x26036,0xe5667,
-0x26028,0x26035,0xe5664,0x26037,0x25f7c,0x17571,0xe565b,0x26038,
-0xe5668,0xe565e,0x2602c,0xe566b,0x17575,0x26029,0xe5661,0x00000,
-0x17577,0x26032,0xe5662,0xe5663,0xe565f,0x1756f,0x26024,0x26033,
-0xe565c,0x2602d,0x25b31,0x26034,0x26021,0xe5660,0x17574,0xe566a,
-0x2642f,0x00000,0x1756d,0x25f7a,0x00000,0x00000,0xe665f,0x00000,
-0x2642c,0x26425,0x17754,0xe5943,0x2637e,0x26430,0x26427,0x2602a,
-0xe5940,0x26432,0x26421,0xe5942,0x17753,0x2642b,0x17755,0x1775d,
-0x1775b,0x2642d,0x1775c,0x26423,0xe5949,0x26424,0x26429,0x2642e,
-0xe593e,0x25f79,0x17756,0x26437,0x26434,0x26761,0x2642a,0x26426,
-0x26435,0x26756,0x26428,0x00000,0x17759,0xe5944,0x17758,0x25f7b,
-0x1775a,0x26431,0x26433,0x17757,0x26436,0x2637d,0x00000,0x26422,
-0xe5946,0x00000,0x00000,0xe5945,0xe6661,0xe6662,0xe6660,0x00000,
-0x2675f,0xe5b50,0x2674f,0x17938,0x2675d,0xe5b44,0xe5b45,0x2674d,
-0x17939,0x00000,0x26758,0xe5b43,0x26754,0x1793e,0x2675e,0x2674e,
-0x26751,0x17936,0x26760,0xe5b48,0x26759,0x2675c,0x1793c,0x17941,
-0x1793f,0x26755,0x26750,0xe5b4d,0x1793a,0x1793b,0x2674c,0x17937,
-0xe5b4f,0x17935,0x1793d,0x2675b,0x17940,0xe5b4a,0x26757,0x26762,
-0x17942,0xe5b41,0xe5b42,0xe5b4e,0x26753,0xe5b47,0x2675a,0xe6665,
-0x00000,0xe6663,0xe6664,0xe5d41,0xe5e6a,0x26a41,0x26a50,0x26a43,
-0x26a4a,0x26752,0x26a48,0x26a37,0x26a4e,0x17a4e,0x26a3b,0x26a4d,
-0x26a42,0x00000,0xe5d43,0x17a4d,0xe5d3c,0xe5d3f,0x26a52,0x26a44,
-0xe5d3e,0x26a49,0x26a4c,0x26a35,0x26a4f,0x26a40,0x26a45,0x26a39,
-0x26a3d,0x26a51,0x26a47,0x26a36,0x26a3a,0x26a3c,0x26a46,0xe5d3d,
-0x17a4c,0x26a3f,0xe5d44,0xe5d45,0xe5d47,0x00000,0xe5d42,0xe5d3a,
-0x26a38,0x00000,0xe6666,0xe6667,0xe6668,0x00000,0x00000,0xe5d46,
-0x26a3e,0x26c50,0x26c54,0x17b3b,0x26c56,0xe5e6d,0x17b35,0x00000,
-0x26c52,0x26c58,0x17b3a,0x17b36,0x00000,0x17b37,0x26c4f,0x26c55,
-0x17b39,0x26c53,0x17b38,0x26c4e,0x26a4b,0x26c51,0x00000,0x26c4d,
-0x26c57,0x00000,0xe5f69,0xe5f6e,0x17b7b,0x26e3c,0x26e3f,0x26e3b,
-0x26e3d,0x26e3e,0x26e38,0x26e39,0x26e36,0xe5f6a,0xe5f6c,0x26e3a,
-0x26e37,0x17b7c,0x17b7d,0x00000,0xe5f6b,0x26f59,0xe6052,0x26f5b,
-0xe6431,0x00000,0xe6055,0xe6054,0xe6056,0x26f5a,0x26f5c,0xe604f,
-0x17c4c,0xe6053,0x26f58,0x17c4b,0x17c4d,0xe6057,0xe666a,0xe6669,
-0x27059,0x2705a,0x17c6f,0x27058,0xe6122,0x27142,0x27141,0x27143,
-0x17d2c,0x27144,0x17d2b,0x27145,0x27161,0x27164,0x27163,0x17d35,
-0x27162,0x00000,0xe616f,0xe6223,0x17d3f,0x17d3d,0x17d3e,0x17d44,
-0x27230,0x27231,0x2722f,0x27237,0xe6236,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x9500 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14f5b,
-0x00000,0xe6323,0x23a28,0x2413f,0x2554e,0x26763,0x00000,0x00000,
-0x14f5c,0xe2f40,0x1536d,0x15860,0x00000,0xe3432,0x23a29,0xe395c,
-0x23a2a,0x15d70,0x00000,0x16264,0x24141,0x24140,0x16268,0x16263,
-0x24142,0x16265,0x16267,0x16266,0x16262,0xe3f6c,0x00000,0xe666b,
-0x16750,0xe453c,0xe453a,0x24856,0x24854,0x00000,0x24855,0x24853,
-0x00000,0x16b5b,0xe4a3d,0x16b5e,0x16b60,0x16b5f,0x00000,0xe4a3e,
-0x16b5c,0x16b5d,0x00000,0x25550,0x2554f,0x16f64,0x25551,0xe4f53,
-0x25552,0x16f65,0xe4f55,0xe4f56,0x00000,0x25b59,0x25b57,0x26040,
-0xe5342,0x25b55,0x25b56,0x1726f,0x25b52,0x25b5a,0x25b54,0x25b58,
-0x2603c,0xe5344,0xe5340,0x2603e,0xe566d,0x2603f,0x1757e,0x2603b,
-0x1757d,0x2603d,0x1757a,0x1757b,0x1757c,0x25b53,0xe666c,0x00000,
-0x17760,0x2643a,0x26438,0x26439,0x1775e,0x17761,0x1775f,0xe594b,
-0xe594a,0x00000,0x26764,0x26765,0x17943,0xe5b53,0x26a53,0x26a55,
-0x26a54,0x17a4f,0x17b3c,0x26c5b,0x26c5a,0x26c59,0x00000,0xe666d,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x9600 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x14f5d,0xe2143,0x22169,0x00000,
-0x22278,0x1486a,0x22276,0x22279,0x22277,0x00000,0xe273b,0xe273a,
-0x2252e,0xe273f,0x14b62,0xe273c,0x14b63,0x22530,0x14b60,0x2252f,
-0x2252d,0x14b61,0x14b5f,0xe273d,0xe273e,0x00000,0x00000,0xe2a79,
-0x00000,0x22878,0x2287b,0x14f60,0x2287a,0x22879,0xe2a7c,0x14f5f,
-0x14f5e,0xe2a7b,0x14f62,0x2287c,0x14f61,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x22d67,0x1536f,0x15370,0x15371,0x22d68,0x22d64,
-0x1536e,0x22d65,0x00000,0x22d66,0x22d63,0x00000,0xe3436,0x00000,
-0x15867,0xe3434,0xe395e,0x15864,0x23348,0x15865,0x15868,0x23349,
-0xe3433,0x15863,0x15861,0x15862,0x15866,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x15d71,0x23a2d,0x15d79,0x23a2c,0xe3961,0x23a2f,
-0x15d75,0x23a2e,0x16270,0x15d73,0x15d76,0x15d72,0x15d77,0x15d78,
-0x15d74,0xe3965,0x00000,0xe3f71,0x23a2b,0x1626c,0x24144,0xe3f72,
-0x24148,0xe3f73,0xe3f75,0x24147,0x16271,0x1626d,0x1626e,0x24143,
-0x24145,0x24146,0x16269,0x1626b,0xe3f70,0x1626f,0x1626a,0xe4540,
-0x00000,0x24859,0x24857,0x24858,0x16752,0x16753,0xe4542,0x2485a,
-0x16751,0x16b61,0x00000,0x16b63,0x16b62,0xe4a45,0x24f23,0xe4a46,
-0xe4a44,0x24f24,0x25554,0xe4f5a,0x25553,0xe4f5b,0x00000,0x17270,
-0x17271,0x25b5b,0x17272,0xe5348,0x26043,0xe5670,0x26041,0xe566f,
-0x26042,0x17621,0xe5671,0x2643b,0x17944,0xe5d49,0xe2a7d,0xe5349,
-0x17622,0x14f63,0xe6325,0x15869,0x2334a,0xe3439,0x00000,0x23a30,
-0x15d7a,0x16272,0x24149,0x2414b,0x16274,0x16273,0x16275,0x16276,
-0x2414a,0x16756,0x16757,0x16755,0x16b64,0x16754,0x2485b,0x00000,
-0xe4a47,0xe4a49,0x16b65,0x25555,0x25b5c,0x17273,0x17623,0x2643c,
-0x26440,0x17764,0x2643d,0x17765,0x17763,0x26441,0x17766,0x2643f,
-0x00000,0x26766,0x17762,0x17945,0xe5e70,0x2705b,0xe6125,0xe622f,
-0x14f64,0x15d7c,0x15d7b,0x00000,0xe3f7e,0xe3f7c,0xe3f7b,0x16277,
-0x2414d,0x2414c,0x16278,0x00000,0xe4546,0x2485f,0x1675b,0x16758,
-0x2485e,0x1675a,0x2485c,0x16759,0xe4547,0x2485d,0x00000,0x24f25,
-0x16b66,0x00000,0x25558,0x00000,0x16f66,0x25556,0x16f67,0x16f68,
-0x25557,0x16f69,0xe4f60,0x25b5d,0xe5350,0x17277,0x17274,0x17279,
-0x25b5f,0x17275,0x25b5e,0x17278,0xe534d,0xe534c,0x17276,0xe5351,
-0x26046,0x26048,0xe5674,0xe5675,0x17624,0x26047,0x17625,0x26045,
-0x26044,0x00000,0x26443,0x26442,0x17767,0x26444,0x2676b,0x17947,
-0x2676a,0x26767,0x17946,0x26768,0x26769,0x00000,0x26a56,0x26a57,
-0x17a50,0xe5d4f,0x17b3f,0xe5d4c,0xe5d4e,0x26c5c,0xe5e72,0xe5e71,
-0x17b3d,0x17b3e,0x26c5d,0xe666e,0xe5f71,0x17b7e,0x17c21,0x26e40,
-0xe5f72,0xe6059,0x17c70,0x2705d,0x17c72,0xe6126,0x2705c,0x2705e,
-0x17c71,0x27146,0x00000,0x2717b,0x00000,0xe666f,0x00000,0x00000,
-0xe6245,0xe2a7e,0x14f65,0x00000,0x00000,0xe4549,0x1675c,0x00000,
-0x24f26,0xe4a4c,0x25559,0x1727a,0x1727b,0xe594f,0x14f66,0xe4021,
-0x16f6a,0x17948,0x15372,0xe2b21,0xe4a4e,0x00000,0x1727c,0xe5e73,
-0x17c4e,0x15373,0x23a31,0x00000,0x2414e,0xe4024,0x24150,0xe4022,
-0x2414f,0x00000,0x24863,0x24860,0x1675d,0x00000,0x1675e,0x24861,
-0x24862,0xe454b,0x24f28,0x24f2d,0x16b67,0x24f27,0x24f29,0x24f30,
-0x24f2b,0x24f2f,0x24f2c,0x24f2a,0x24f2e,0x16b68,0x00000,0xe4f62,
-0x2555c,0xe4f63,0x2555a,0x16f6c,0xe4f64,0x16f6b,0x2555b,0x16f6d,
-0x00000,0x00000,0x00000,0xe5353,0x25b62,0x00000,0x00000,0x25b61,
-0x1727d,0x25b60,0x26049,0xe567a,0x2604b,0x2604d,0x2604c,0xe567b,
-0x17626,0x2604a,0x2644b,0x17768,0x26449,0x2644c,0x17769,0x00000,
-0x26447,0xe5950,0x2644a,0x26448,0x26445,0x1776a,0x26446,0x00000,
-0x00000,0xe5b5f,0xe5b5d,0x2676c,0xe5b5e,0xe5b60,0x2676e,0x2676d,
-0xe5d50,0x26a58,0xe5d51,0x26a59,0x00000,0xe5e75,0xe5e74,0x26c5e,
-0xe5f73,0x17c23,0x00000,0x17c22,0x26f5d,0x26f5e,0x17c73,0x2705f,
-0xe6128,0x17d36,0xe623b,0x15374,0x16279,0x24f32,0x24f31,0x2555e,
-0x2555d,0x00000,0xe5355,0x17627,0x2604f,0x2604e,0x2644f,0x2644d,
-0x26450,0x2644e,0xe5951,0x00000,0x17949,0x2676f,0x26770,0x26771,
-0x00000,0x26c5f,0xe5e76,0x26e41,0xe6129,0x27060,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15375,0xe454f,0xe4f65,
-0x25b63,0x26050,0xe5b61,0x15376,0x00000,0xe4550,0x16b69,0x00000,
-0x25b64,0x1776b,0x26451,0x1794a,0xe5d53,0x26a5a,0x26a5b,0x17b40,
-0x26f5f,0x15377,0x15e21,0x15e22,0x23a32,0x1627a,0x1627b,0x24151,
-0x1627c,0x00000,0x16762,0xe4552,0x16764,0x24865,0x24866,0x24864,
-0x1675f,0x16760,0x16763,0x16761,0xe4a54,0xe4a55,0x24f33,0x16b6a,
-0x16b6b,0xe4a52,0xe4a56,0x25565,0x16f70,0x25560,0x2555f,0xe4f69,
-0x25564,0x16f6e,0xe4f67,0xe636e,0x17326,0x00000,0x25561,0x25566,
-0x25563,0x25562,0xe4f66,0x16f6f,0x00000,0x17324,0xe535c,0x25b66,
-0x1727e,0xe5359,0x25b67,0xe535a,0xe5228,0x25b65,0xe5358,0x17323,
-0x17321,0x17325,0xe535d,0x17322,0xe535b,0xe535f,0x00000,0xe595b,
-0xe5726,0x26051,0xe637b,0x26056,0x26052,0x26055,0x17628,0xe5728,
-0x25e41,0x26054,0x26053,0xe5959,0x1776e,0x1776c,0x1776f,0x1776d,
-0x26452,0x26453,0x26454,0x17770,0xe5956,0xe5958,0xe5b65,0x26775,
-0x1794c,0x26773,0x00000,0x1794d,0x26772,0x26774,0x1794b,0x26a5f,
-0x26a5c,0xe642a,0x26a5d,0x26a5e,0x26c60,0x17b42,0xe5e78,0x17b41,
-0xe5e77,0x26e43,0x26e42,0x17c24,0xe605d,0xe605e,0xe605c,0x17c4f,
-0x17c74,0x17d2d,0x27147,0x2717c,0x2717d,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x15378,0x24152,0x00000,0x00000,0x24867,0x24f34,0x24f35,0x16b6c,
-0x00000,0x16b6d,0x25567,0x16f71,0x00000,0xe5361,0x17629,0xe572a,
-0x26455,0xe595c,0x17771,0x26778,0x1794e,0x26777,0x26779,0x26776,
-0x26c63,0x26a60,0x26a61,0xe5d56,0x17a51,0x00000,0x26c62,0xe5e7b,
-0xe5e79,0x26c61,0xe5e7a,0x26e44,0x2717e,0xe6225,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x15379,0xe5e7c,0xe6226,0x00000,0x1537a,
-0x00000,0xe3967,0x1586a,0x2334b,0xe6670,0x23a33,0xe3968,0x1627d,
-0x00000,0x16322,0x1627e,0x24153,0xe455b,0x16324,0x00000,0x16321,
-0xe402b,0xe455c,0x16323,0xe4554,0x16766,0xe4559,0x24868,0xe4557,
-0xe4a5d,0x24869,0x25569,0x00000,0x16765,0x16767,0x16768,0xe4558,
-0x24f37,0xe4a5e,0x24f36,0x16b6e,0x00000,0x16b6f,0xe4a5b,0x24f38,
-0x25568,0x16b71,0x16f72,0x00000,0x16b70,0x00000,0xe667a,0x00000,
-0x17327,0x2556a,0x16f74,0x16f73,0x2556b,0x2556e,0x2556c,0x2556d,
-0x16f75,0xe4f6b,0x1732c,0x1732a,0xe5365,0xe5366,0x17329,0x25b69,
-0xe5364,0x1732b,0xe5362,0xe5363,0x25b68,0x26057,0x00000,0x25b6a,
-0x17328,0x25b6b,0x2605a,0x26058,0x26059,0x2605e,0x17775,0x2605d,
-0x26060,0x2605f,0x2605c,0x2605b,0x00000,0x1762a,0xe5962,0x00000,
-0xe5961,0xe5966,0x26458,0xe5965,0x26457,0x17774,0x17772,0x17773,
-0xe5963,0x26456,0xe6671,0x2677c,0xe5b69,0x1794f,0x00000,0x2677b,
-0x2677a,0x17950,0x00000,0x26a66,0x26a65,0xe5d58,0x26a63,0xe5e7e,
-0x26a62,0x17a53,0x17a52,0x26a67,0x26e45,0x17c25,0x26c65,0x17b43,
-0x26c64,0x26a64,0xe5f78,0x26e46,0x17c50,0xe612a,0x17d2e,0x27148,
-0x00000,0x27221,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1537b,0x23a34,
-0x26061,0x1537c,0xe455f,0x00000,0x24f3a,0x24f39,0x25b6c,0x00000,
-0xe5368,0x26063,0xe5730,0x26062,0xe5967,0x17776,0x2677d,0x2677e,
-0x17a54,0xe5f21,0xe6060,0x27222,0x1586b,0x16326,0x16325,0x2486a,
-0x2486c,0x1676a,0x2486b,0x16769,0x1676b,0x2486d,0xe4a63,0xe4a62,
-0xe4a66,0x24f3c,0x24f3e,0x24f3d,0xe4a61,0x24f40,0xe4a60,0xe4a6c,
-0xe4a64,0x16b72,0x24f3f,0x24f3b,0xe4a6a,0x00000,0x00000,0x24f41,
-0xe4f73,0x25575,0xe4f6d,0x25578,0x2557a,0x25570,0x25574,0x25571,
-0x16f77,0x16f7a,0x16f7c,0x25572,0x25573,0x16f7b,0x25576,0x25579,
-0x25577,0x16f7d,0xe4f6e,0x16f79,0x2556f,0x16f76,0xe4f72,0x16f78,
-0xe4f74,0xe5370,0x1732e,0x25b72,0x25b70,0x25b6f,0xe5371,0x25b75,
-0xe536b,0x25b74,0x25b73,0xe536c,0x25b6e,0x1732d,0x25b6d,0xe536a,
-0x25b71,0x1732f,0x00000,0xe5734,0x26066,0xe5737,0x2606a,0x26067,
-0x26069,0x26068,0x26065,0x2606b,0x2606e,0x2606c,0x2606d,0x1762c,
-0xe5733,0x1762b,0x26064,0x2606f,0x2645d,0x26460,0x26462,0x26461,
-0xe596a,0x2645b,0x2645f,0x2645a,0xe596b,0x2645c,0x17777,0x26459,
-0xe596d,0x2645e,0x00000,0x00000,0x2682d,0x26822,0x17951,0xe5b6f,
-0xe5b6d,0x17952,0x26821,0x26826,0x2682c,0x26824,0x2682b,0xe5b6c,
-0x26828,0xe5b6e,0x26827,0x2682a,0x26825,0x26823,0xe5b6b,0x26829,
-0x00000,0x26a6e,0x26a6c,0x17a55,0x26a6b,0x26a71,0x26a6f,0xe5d5a,
-0x17a56,0x26a6a,0x26a68,0x00000,0x26a69,0x17a58,0x26a6d,0x17a57,
-0x26a70,0x26c66,0x26c6c,0xe5f24,0xe5f22,0x26c67,0x17b47,0x26c6d,
-0x17b46,0x26c6b,0x26c6a,0x17b45,0x26c69,0x17b44,0x26c68,0x00000,
-0x26e4c,0x26e4e,0x26e4d,0x00000,0x26e4a,0x17c27,0x26e47,0x26e4b,
-0x26e50,0xe5f79,0x26e4f,0x26e48,0x26e49,0x17c26,0x26f60,0x17c53,
-0xe6062,0x26f61,0x17c51,0x17c52,0xe6061,0x00000,0x27061,0x17c75,
-0x27165,0xe6172,0x17d37,0xe6173,0x27223,0x17d38,0x27224,0x27225,
-0x27233,0x27232,0x17d47,0x2723b,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1586c,0xe402f,0x00000,0x2486f,0x00000,0x2486e,0x00000,0x16b73,
-0x16b74,0x24f42,0x00000,0x2557b,0x25b78,0xe4f77,0xe4f76,0x16f7e,
-0x17330,0x25b76,0x00000,0x25b79,0x17331,0xe573a,0x26070,0x25b77,
-0x26463,0x17778,0x2682e,0x00000,0xe5d61,0x00000,0x26a74,0x26a72,
-0xe5d60,0xe5d5e,0x26a73,0x00000,0x00000,0x26c6e,0xe5f25,0x17b48,
-0x26e51,0x17c56,0x17c28,0x17c54,0x17c55,0x27062,0x17d2f,0xe6174,
-0x1586d,0xe6334,0xe4a6e,0x00000,0x26464,0xe5f7b,0xe6063,0x2334c,
-0xe4032,0x1676c,0xe4561,0x24f43,0xe4a6f,0xe4a73,0x16b75,0x24f44,
-0xe4a71,0xe4a70,0xe4a72,0x2557d,0x2557c,0x17333,0x17021,0x17022,
-0x00000,0x25622,0x25621,0x2557e,0xe4f79,0xe5375,0x25b7a,0x25b7d,
-0xe5374,0x25b7c,0x25b7b,0x17332,0x26074,0x26072,0x26071,0x00000,
-0xe573b,0x26073,0xe573c,0x17779,0x26466,0x26467,0x1777a,0xe596f,
-0x26465,0xe5b71,0x26830,0x2682f,0x26832,0x17953,0x26831,0x00000,
-0x26a75,0x26a77,0x26a76,0x00000,0xe5f27,0x26c6f,0x26c72,0x26c70,
-0x26c71,0x26e52,0x17c29,0x00000,0x00000,0xe6672,0x26f62,0x26f63,
-0x26f64,0xe612c,0x17c76,0x17d30,0x27226,0x1586e,0xe4a75,0x17023,
-0x17334,0x26468,0xe5d62,0x26e53,0xe612e,0xe6433,0x27166,0x2334d,
-0xe6228,0x17d48,0x1586f,0x25b7e,0xe573e,0x26469,0x00000,0x26833,
-0xe5d63,0x00000,0x26c73,0x26e54,0x15870,0xe4562,0x24f45,0x24f46,
-0xe4a78,0x16b76,0x16b77,0x25624,0x17025,0x17024,0x25623,0x00000,
-0x26075,0xe573f,0x2646a,0x2646c,0x2646b,0x1777d,0x1777c,0x1777b,
-0xe5d64,0x17b4a,0x26c74,0xe5f28,0x17b49,0x26e56,0x26e55,0xe612f,
-0x17c77,0x27063,0x15e23,0x24870,0x00000,0xe4563,0x00000,0x24f49,
-0x24f47,0x24f48,0x00000,0xe4f7e,0x2562d,0x00000,0x25628,0x25625,
-0x2562c,0xe4f7c,0x00000,0xe4f7b,0x2562e,0x00000,0x00000,0x17027,
-0x2562b,0x25627,0xe4f7d,0x00000,0x25626,0x2562a,0x25629,0x17026,
-0x00000,0x00000,0x25c2b,0x25c26,0x25c24,0x25c2d,0x25c25,0x00000,
-0x25c21,0x00000,0x25c27,0xe5378,0xe537a,0x25c22,0x2607e,0x25c23,
-0x25c2e,0xe5423,0x00000,0xe537c,0xe5421,0x00000,0xe5425,0xe537d,
-0x25c2a,0x17335,0x25c29,0x25c28,0xe5379,0x25c2c,0x00000,0x00000,
-0xe6673,0xe5744,0x26076,0x26079,0x00000,0xe5745,0x26078,0xe5740,
-0x26122,0x2607b,0x26121,0xe5742,0x2607d,0x2607c,0x2607a,0x00000,
-0x26077,0x00000,0x1762f,0x1762e,0x00000,0x17630,0x1762d,0x26123,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x26472,0x26475,0x00000,
-0x26473,0x26477,0x00000,0xe5974,0x00000,0x26478,0x00000,0x26470,
-0x17824,0x26471,0xe5973,0x2646f,0x26476,0xe5b74,0x2646e,0x2646d,
-0x17823,0x17821,0x1777e,0xe5976,0xe5975,0xe5743,0x00000,0x00000,
-0x00000,0x00000,0xe5971,0x26474,0x2683c,0x26842,0x17956,0x2683d,
-0x00000,0x26840,0x26844,0x17957,0x2683f,0x00000,0x26837,0xe5b75,
-0x26836,0x26843,0x2683a,0xe5b77,0x26838,0x26841,0x26839,0x17955,
-0x17954,0xe5b79,0x26834,0x26835,0x2683e,0x00000,0xe5b7a,0x00000,
-0x2683b,0x00000,0x00000,0x00000,0x00000,0x00000,0xe5d6f,0x26a7a,
-0x26a7d,0xe5d71,0x00000,0xe5d67,0xe5d69,0x17822,0xe5d6a,0xe5d74,
-0xe5d75,0x00000,0xe5d6e,0x00000,0xe5d68,0x26a7b,0x26b23,0x26b21,
-0x26a79,0x26b26,0xe5d66,0x26a78,0xe5d76,0x17a5a,0x26b22,0x00000,
-0xe5d73,0x00000,0x26a7c,0x17a59,0x26b25,0xe5d72,0x00000,0x26b24,
-0x00000,0x00000,0x00000,0xe5d70,0x26c77,0x26c76,0x00000,0xe5f2c,
-0x00000,0x26c7d,0x00000,0x26c79,0x26c7c,0x17b4c,0x00000,0xe642f,
-0x26c7a,0x26c7b,0x00000,0x26c75,0x26c78,0x17b4b,0xe5f2a,0x00000,
-0x00000,0x17c2b,0x26e61,0x26e5c,0x26e60,0xe6025,0x26e63,0x26e5f,
-0xe5f7e,0x26e5b,0xe6023,0x17c2d,0x26e5e,0x26e62,0x17c2c,0x26e59,
-0x26a7e,0x26e5d,0x00000,0x00000,0x26e5a,0xe6022,0x26e57,0x00000,
-0x26e58,0x17c2a,0x26f68,0x26f6a,0x26f6d,0x26f69,0x26f6e,0xe6065,
-0x26f67,0xe6066,0x26f65,0xe6068,0x17c57,0x26f6b,0x17c59,0x17c58,
-0x26f66,0x26f6c,0x00000,0x00000,0x00000,0xe6132,0x27068,0x17c78,
-0x27069,0xe6133,0x27067,0x27064,0x00000,0xe6134,0x27066,0x27065,
-0x27149,0x00000,0x00000,0x00000,0xe6159,0x2714b,0x2714a,0xe615b,
-0x00000,0x27169,0x00000,0x27168,0x27167,0x2716a,0xe6175,0x17d40,
-0x17d41,0x27238,0x2723c,0xe6241,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15e24,0x24154,0x24873,
-0xe4564,0x1676d,0x24871,0xe4566,0xe2f42,0x24872,0xe4568,0xe4567,
-0x00000,0x24f4a,0x24f4b,0x16b7a,0x16b78,0x24f4c,0x16b79,0x25633,
-0xe5027,0x25636,0x25630,0x25637,0x2562f,0x25631,0xe502a,0x25632,
-0x25635,0xe5024,0xe502b,0x1702a,0x2563a,0x25639,0x17028,0x25634,
-0x25638,0x17029,0xe542d,0x00000,0xe5025,0xe5022,0x00000,0xe542a,
-0x25c38,0x00000,0x1733a,0xe542c,0x25c33,0x17336,0xe5436,0x25c30,
-0x25c36,0x25c39,0xe5433,0x1733b,0x00000,0x25c35,0x25c32,0x25c3a,
-0x25c31,0xe5437,0x25c37,0x17337,0xe5429,0x25c2f,0x17338,0xe5435,
-0x17339,0x25c34,0xe5432,0x00000,0x00000,0x26135,0x26128,0x26129,
-0x2612c,0x2612a,0x00000,0x26124,0x00000,0xe574d,0x26127,0x26131,
-0x2612b,0xe5748,0x00000,0x17631,0x00000,0x26133,0x26130,0x17632,
-0x26132,0x26125,0x2612e,0x2612f,0xe574a,0x2612d,0x00000,0x00000,
-0x00000,0xe6675,0x2647c,0x2647e,0x26523,0xe5979,0xe597b,0x2647b,
-0xe597d,0x17825,0x26525,0x2647a,0x26526,0xe597e,0x26522,0x26524,
-0x26528,0x26521,0x26529,0x2647d,0x26479,0x17826,0xe5a22,0x26527,
-0x17827,0x17959,0x00000,0xe597a,0x00000,0x00000,0xe5b7d,0x26126,
-0x2685e,0x26855,0x1795b,0x26851,0x1795c,0xe5c27,0xe5c22,0x2685a,
-0x26854,0x2684a,0x1795a,0x26857,0x26852,0x26853,0xe5c25,0x26845,
-0x2684c,0x2685b,0xe5b7e,0x26858,0x00000,0x26850,0xe5c26,0x2685c,
-0x2684b,0x26846,0x26859,0xe5c24,0x26848,0x26856,0x2684d,0x2685d,
-0x26849,0x17958,0x26847,0x2684e,0x2684f,0x00000,0x00000,0x00000,
-0x26b2d,0xe5c23,0x26b2b,0x00000,0x26b30,0xe5d79,0x26b3c,0x26b33,
-0x26b2c,0x26b28,0x26b35,0x26b2e,0x26b31,0x26b2a,0x26b38,0x26b27,
-0x26b2f,0x26b34,0x26b36,0x26b39,0x26b29,0xe5d7a,0x26b3d,0x26b3e,
-0x26b37,0x26b3b,0x26b32,0x00000,0x26d2f,0x26d32,0xe5f35,0x17b4d,
-0xe5f31,0x26d31,0x26d36,0x26d34,0x17b4e,0x26d2b,0x26d21,0x26c7e,
-0x17b50,0x26d2d,0x26d2e,0x26d2a,0x26d22,0xe5f32,0x26d27,0x26b3a,
-0x00000,0x26d23,0x17b4f,0x26d29,0xe5f36,0x26d28,0x00000,0x26d24,
-0x26d30,0x00000,0x26d25,0x26e68,0x26d33,0x26d35,0x26d2c,0x26d26,
-0x26e69,0x26e6b,0x26e65,0x17c2e,0x00000,0x26e72,0x26e70,0x17c2f,
-0x26e6f,0x26e6e,0x26e67,0x26e64,0x26e6a,0x26e73,0x26e66,0x26e6c,
-0x00000,0x26f77,0x26f7c,0x26f72,0x26f75,0x17c5a,0x26f79,0x00000,
-0x27022,0x26e6d,0x00000,0x26f73,0x26f7d,0x27023,0x26f78,0x26f71,
-0x26f7b,0x00000,0x26f7a,0x27021,0x26f7e,0x26e71,0x26f76,0x26f70,
-0x26f74,0x17c79,0x17c7a,0x26f6f,0xe606c,0x27074,0x2706b,0x27073,
-0x27070,0x27071,0x2706a,0x2706d,0x27075,0x2706f,0x2706e,0x2706c,
-0xe6135,0x27072,0x00000,0x2714c,0x00000,0x2714d,0xe615d,0x2714f,
-0x2714e,0x27151,0x27150,0x2716c,0x2716b,0x27227,0xe6229,0x27228,
-0xe6230,0x27234,0x17d45,0x17d49,0xe6238,0x2723d,0x17d4a,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15e25,0x00000,0x00000,
-0x00000,0x17a5b,0x26d37,0xe5f37,0x17c7b,0x17c7c,0x00000,0x15e26,
-0x24874,0xe4569,0x1676e,0x2563b,0xe502c,0xe5439,0x25c3c,0x25c3d,
-0x25c3b,0x26137,0x26136,0x17633,0x2652b,0x26138,0x2652a,0x00000,
-0xe5a24,0x26860,0x1795d,0x1795f,0x2685f,0xe5c29,0x00000,0x1795e,
-0xe5e21,0x26b3f,0x26b41,0x26b40,0x26d38,0x17b51,0xe5f3a,0x17c5b,
-0x27076,0x27152,0xe6231,0xe623f,0x27241,0x15e27,0xe2547,0x24f4d,
-0x00000,0x1702b,0xe502f,0xe502e,0xe543a,0x25c3f,0x25c3e,0xe5750,
-0x26139,0xe5a26,0xe5a25,0x00000,0x17960,0x17a5c,0x26e74,0x27239,
-0x00000,0x00000,0x00000,0x15e28,0x16b7b,0xe4b22,0x1702c,0x00000,
-0x26861,0xe5e22,0x27024,0x16327,0xe396a,0xe543c,0xe543b,0x00000,
-0x2613a,0x00000,0xe5a28,0x00000,0x17d31,0x16328,0x1702d,0x17634,
-0x27025,0x16329,0xe396b,0x2563c,0x1733d,0x25c40,0x25c41,0xe543d,
-0x1733c,0x00000,0x2613b,0x17638,0x17636,0x17637,0x17635,0x2652c,
-0x17828,0x00000,0x00000,0xe5c2a,0x26b43,0x26b42,0x26b45,0x26b44,
-0x17a5d,0x00000,0x00000,0x26d39,0x00000,0x26d3b,0x26d3a,0x17b52,
-0x26e75,0xe6029,0x27026,0x27027,0x17c5c,0x27153,0x2716d,0x17d42,
-0x00000,0x24155,0x25c42,0x2613c,0x26862,0x24875,0xe2772,0x2613d,
-0x2652e,0x2652d,0xe5a29,0xe5c2d,0xe5c2e,0xe5f3c,0x27028,0x17c7d,
-0xe615f,0x27154,0x2716e,0x00000,0x00000,0x00000,0x1676f,0x2563d,
-0x2563e,0x00000,0x25c43,0x16770,0xe456a,0x17829,0x2652f,0xe5c30,
-0x26d3d,0x17b53,0x26d3e,0x26d3c,0x27029,0xe6160,0x27077,0x00000,
-0x16771,0x00000,0x26140,0x2613f,0x2613e,0x26530,0xe5a2b,0xe5a2a,
-0x26534,0x26533,0x26532,0x26531,0x1782a,0x26863,0x26b47,0x17a5e,
-0x26b46,0x26d3f,0x26e78,0x26e77,0x17c30,0x26e76,0x2702c,0x2702b,
-0x2702a,0xe606d,0x00000,0x16b7c,0x00000,0x25c44,0x17639,0x00000,
-0x26864,0x26865,0x26e79,0x2702d,0x00000,0xe613b,0x27078,0x27155,
-0x27229,0x27243,0x16b7d,0x1763a,0x26535,0x26866,0x26d40,0x2702e,
-0xe2370,0x00000,0x1702f,0xe543e,0x26141,0x26536,0x26867,0x26868,
-0x26869,0x26b4c,0xe5e24,0x26b48,0x17b54,0x26b4b,0x26b4a,0x17a5f,
-0x26b49,0x17a61,0x00000,0x17a60,0x26d42,0x26d41,0x17b55,0x17b56,
-0x00000,0xe5f3e,0x17c32,0x26e7a,0x17c31,0x00000,0x27031,0x27032,
-0x27030,0x2702f,0x17d21,0x00000,0x27079,0x2707a,0x2707b,0x17c7e,
-0x27156,0x27159,0x27158,0x27157,0xe6233,0x00000,0x27242,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x1733e,0xe5755,0x00000,
-0x17832,0x26b4d,0x26d43,0xe602b,0x17c33,0x26e7b,0x00000,0xe6242,
-0x27244,0x00000,0x00000,0x00000,0x1733f,0xe5e47,0x00000,0x00000,
-0x26142,0xe5f3f,0x26e7c,0xe6161,0x2716f,0xe6177};
-
-static const int ucs_i_cns11643_table_min = 0x4d00;
-static const int ucs_i_cns11643_table_max = 0x4d00 + (sizeof (ucs_i_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_r_cns11643_table[] = {
-/* 0xfe00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1212b,0x12136,0x12138,0x00000,0x00000,0x12140,0x12141,0x12144,
-0x12145,0x12148,0x12149,0x1214c,0x1214d,0x12150,0x12151,0x12154,
-0x12155,0x12158,0x12159,0x1215c,0x1215d,0x00000,0x00000,0x00000,
-0x00000,0x12227,0x12228,0x1222b,0x1222c,0x12229,0x1222a,0x00000,
-0x1212e,0x1212f,0x12130,0x00000,0x12132,0x12133,0x12134,0x12135,
-0x00000,0x1215e,0x1215f,0x12160,0x12161,0x12162,0x12163,0x1222d,
-0x1222e,0x1222f,0x1223f,0x12240,0x12241,0x12243,0x12242,0x00000,
-0x12262,0x1226c,0x1226d,0x1226e,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0xff00 */
-0x00000,0x1212a,0x00000,0x1216c,0x12263,0x12268,0x1216d,0x00000,
-0x1213e,0x1213f,0x1216e,0x12230,0x12122,0x12231,0x12125,0x1225f,
-0x12421,0x12422,0x12423,0x12424,0x12425,0x12426,0x12427,0x12428,
-0x12429,0x1242a,0x12128,0x12127,0x12236,0x12238,0x12237,0x12129,
-0x12269,0x12441,0x12442,0x12443,0x12444,0x12445,0x12446,0x12447,
-0x12448,0x12449,0x1244a,0x1244b,0x1244c,0x1244d,0x1244e,0x1244f,
-0x12450,0x12451,0x12452,0x12453,0x12454,0x12455,0x12456,0x12457,
-0x12458,0x12459,0x1245a,0x00000,0x12260,0x00000,0x00000,0x12225,
-0x00000,0x1245b,0x1245c,0x1245d,0x1245e,0x1245f,0x12460,0x12461,
-0x12462,0x12463,0x12464,0x12465,0x12466,0x12467,0x12468,0x12469,
-0x1246a,0x1246b,0x1246c,0x1246d,0x1246e,0x1246f,0x12470,0x12471,
-0x12472,0x12473,0x12474,0x12142,0x1225e,0x12143,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12266,0x12267,0x00000,0x00000,0x00000,0x12264};
-
-static const int ucs_r_cns11643_table_min = 0xfe00;
-static const int ucs_r_cns11643_table_max = 0xfe00 + (sizeof (ucs_r_cns11643_table) / sizeof (unsigned int));
-
-
-/* Big5 -> UCS */
-static const unsigned short big5_ucs_table[] = {
-0x3000,0xff0c,0x3001,0x3002,0xff0e,0x2027,0xff1b,0xff1a,
-0xff1f,0xff01,0xfe30,0x2026,0x2025,0xfe50,0xfe51,0xfe52,
-0x00b7,0xfe54,0xfe55,0xfe56,0xfe57,0xff5c,0x2013,0xfe31,
-0x2014,0xfe33,0x2574,0xfe34,0xfe4f,0xff08,0xff09,0xfe35,
-0xfe36,0xff5b,0xff5d,0xfe37,0xfe38,0x3014,0x3015,0xfe39,
-0xfe3a,0x3010,0x3011,0xfe3b,0xfe3c,0x300a,0x300b,0xfe3d,
-0xfe3e,0x3008,0x3009,0xfe3f,0xfe40,0x300c,0x300d,0xfe41,
-0xfe42,0x300e,0x300f,0xfe43,0xfe44,0xfe59,0xfe5a,0xfe5b,
-0xfe5c,0xfe5d,0xfe5e,0x2018,0x2019,0x201c,0x201d,0x301d,
-0x301e,0x2035,0x2032,0xff03,0xff06,0xff0a,0x203b,0x00a7,
-0x3003,0x25cb,0x25cf,0x25b3,0x25b2,0x25ce,0x2606,0x2605,
-0x25c7,0x25c6,0x25a1,0x25a0,0x25bd,0x25bc,0x32a3,0x2105,
-0x00af,0xffe3,0xff3f,0x02cd,0xfe49,0xfe4a,0xfe4d,0xfe4e,
-0xfe4b,0xfe4c,0xfe5f,0xfe60,0xfe61,0xff0b,0xff0d,0x00d7,
-0x00f7,0x00b1,0x221a,0xff1c,0xff1e,0xff1d,0x2266,0x2267,
-0x2260,0x221e,0x2252,0x2261,0xfe62,0xfe63,0xfe64,0xfe65,
-0xfe66,0xff5e,0x2229,0x222a,0x22a5,0x2220,0x221f,0x22bf,
-0x33d2,0x33d1,0x222b,0x222e,0x2235,0x2234,0x2640,0x2642,
-0x2295,0x2299,0x2191,0x2193,0x2190,0x2192,0x2196,0x2197,
-0x2199,0x2198,0x2225,0x2223,0xff0f,0xff3c,0x2215,0xfe68,
-0xff04,0xffe5,0x3012,0xffe0,0xffe1,0xff05,0xff20,0x2103,
-0x2109,0xfe69,0xfe6a,0xfe6b,0x33d5,0x339c,0x339d,0x339e,
-0x33ce,0x33a1,0x338e,0x338f,0x33c4,0x00b0,0x5159,0x515b,
-0x515e,0x515d,0x5161,0x5163,0x55e7,0x74e9,0x7cce,0x2581,
-0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x2588,0x258f,
-0x258e,0x258d,0x258c,0x258b,0x258a,0x2589,0x253c,0x2534,
-0x252c,0x2524,0x251c,0x2594,0x2500,0x2502,0x2595,0x250c,
-0x2510,0x2514,0x2518,0x256d,0x256e,0x2570,0x256f,0x2550,
-0x255e,0x256a,0x2561,0x25e2,0x25e3,0x25e5,0x25e4,0x2571,
-0x2572,0x2573,0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,
-0xff16,0xff17,0xff18,0xff19,0x2160,0x2161,0x2162,0x2163,
-0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x3021,0x3022,
-0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029,0x5341,
-0x5344,0x5345,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,
-0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,
-0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,
-0xff37,0xff38,0xff39,0xff3a,0xff41,0xff42,0xff43,0xff44,
-0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c,
-0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54,
-0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0x0391,0x0392,
-0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a,
-0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,0x03a1,0x03a3,
-0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2,
-0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,0x03b9,0x03ba,
-0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3,
-0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,0x3105,0x3106,
-0x3107,0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,
-0x310f,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,
-0x3117,0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,
-0x311f,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,
-0x3127,0x3128,0x3129,0x02d9,0x02c9,0x02ca,0x02c7,0x02cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x20ac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4e00,
-0x4e59,0x4e01,0x4e03,0x4e43,0x4e5d,0x4e86,0x4e8c,0x4eba,
-0x513f,0x5165,0x516b,0x51e0,0x5200,0x5201,0x529b,0x5315,
-0x5341,0x535c,0x53c8,0x4e09,0x4e0b,0x4e08,0x4e0a,0x4e2b,
-0x4e38,0x51e1,0x4e45,0x4e48,0x4e5f,0x4e5e,0x4e8e,0x4ea1,
-0x5140,0x5203,0x52fa,0x5343,0x53c9,0x53e3,0x571f,0x58eb,
-0x5915,0x5927,0x5973,0x5b50,0x5b51,0x5b53,0x5bf8,0x5c0f,
-0x5c22,0x5c38,0x5c71,0x5ddd,0x5de5,0x5df1,0x5df2,0x5df3,
-0x5dfe,0x5e72,0x5efe,0x5f0b,0x5f13,0x624d,0x4e11,0x4e10,
-0x4e0d,0x4e2d,0x4e30,0x4e39,0x4e4b,0x5c39,0x4e88,0x4e91,
-0x4e95,0x4e92,0x4e94,0x4ea2,0x4ec1,0x4ec0,0x4ec3,0x4ec6,
-0x4ec7,0x4ecd,0x4eca,0x4ecb,0x4ec4,0x5143,0x5141,0x5167,
-0x516d,0x516e,0x516c,0x5197,0x51f6,0x5206,0x5207,0x5208,
-0x52fb,0x52fe,0x52ff,0x5316,0x5339,0x5348,0x5347,0x5345,
-0x535e,0x5384,0x53cb,0x53ca,0x53cd,0x58ec,0x5929,0x592b,
-0x592a,0x592d,0x5b54,0x5c11,0x5c24,0x5c3a,0x5c6f,0x5df4,
-0x5e7b,0x5eff,0x5f14,0x5f15,0x5fc3,0x6208,0x6236,0x624b,
-0x624e,0x652f,0x6587,0x6597,0x65a4,0x65b9,0x65e5,0x66f0,
-0x6708,0x6728,0x6b20,0x6b62,0x6b79,0x6bcb,0x6bd4,0x6bdb,
-0x6c0f,0x6c34,0x706b,0x722a,0x7236,0x723b,0x7247,0x7259,
-0x725b,0x72ac,0x738b,0x4e19,0x4e16,0x4e15,0x4e14,0x4e18,
-0x4e3b,0x4e4d,0x4e4f,0x4e4e,0x4ee5,0x4ed8,0x4ed4,0x4ed5,
-0x4ed6,0x4ed7,0x4ee3,0x4ee4,0x4ed9,0x4ede,0x5145,0x5144,
-0x5189,0x518a,0x51ac,0x51f9,0x51fa,0x51f8,0x520a,0x52a0,
-0x529f,0x5305,0x5306,0x5317,0x531d,0x4edf,0x534a,0x5349,
-0x5361,0x5360,0x536f,0x536e,0x53bb,0x53ef,0x53e4,0x53f3,
-0x53ec,0x53ee,0x53e9,0x53e8,0x53fc,0x53f8,0x53f5,0x53eb,
-0x53e6,0x53ea,0x53f2,0x53f1,0x53f0,0x53e5,0x53ed,0x53fb,
-0x56db,0x56da,0x5916,0x592e,0x5931,0x5974,0x5976,0x5b55,
-0x5b83,0x5c3c,0x5de8,0x5de7,0x5de6,0x5e02,0x5e03,0x5e73,
-0x5e7c,0x5f01,0x5f18,0x5f17,0x5fc5,0x620a,0x6253,0x6254,
-0x6252,0x6251,0x65a5,0x65e6,0x672e,0x672c,0x672a,0x672b,
-0x672d,0x6b63,0x6bcd,0x6c11,0x6c10,0x6c38,0x6c41,0x6c40,
-0x6c3e,0x72af,0x7384,0x7389,0x74dc,0x74e6,0x7518,0x751f,
-0x7528,0x7529,0x7530,0x7531,0x7532,0x7533,0x758b,0x767d,
-0x76ae,0x76bf,0x76ee,0x77db,0x77e2,0x77f3,0x793a,0x79be,
-0x7a74,0x7acb,0x4e1e,0x4e1f,0x4e52,0x4e53,0x4e69,0x4e99,
-0x4ea4,0x4ea6,0x4ea5,0x4eff,0x4f09,0x4f19,0x4f0a,0x4f15,
-0x4f0d,0x4f10,0x4f11,0x4f0f,0x4ef2,0x4ef6,0x4efb,0x4ef0,
-0x4ef3,0x4efd,0x4f01,0x4f0b,0x5149,0x5147,0x5146,0x5148,
-0x5168,0x5171,0x518d,0x51b0,0x5217,0x5211,0x5212,0x520e,
-0x5216,0x52a3,0x5308,0x5321,0x5320,0x5370,0x5371,0x5409,
-0x540f,0x540c,0x540a,0x5410,0x5401,0x540b,0x5404,0x5411,
-0x540d,0x5408,0x5403,0x540e,0x5406,0x5412,0x56e0,0x56de,
-0x56dd,0x5733,0x5730,0x5728,0x572d,0x572c,0x572f,0x5729,
-0x5919,0x591a,0x5937,0x5938,0x5984,0x5978,0x5983,0x597d,
-0x5979,0x5982,0x5981,0x5b57,0x5b58,0x5b87,0x5b88,0x5b85,
-0x5b89,0x5bfa,0x5c16,0x5c79,0x5dde,0x5e06,0x5e76,0x5e74,
-0x5f0f,0x5f1b,0x5fd9,0x5fd6,0x620e,0x620c,0x620d,0x6210,
-0x6263,0x625b,0x6258,0x6536,0x65e9,0x65e8,0x65ec,0x65ed,
-0x66f2,0x66f3,0x6709,0x673d,0x6734,0x6731,0x6735,0x6b21,
-0x6b64,0x6b7b,0x6c16,0x6c5d,0x6c57,0x6c59,0x6c5f,0x6c60,
-0x6c50,0x6c55,0x6c61,0x6c5b,0x6c4d,0x6c4e,0x7070,0x725f,
-0x725d,0x767e,0x7af9,0x7c73,0x7cf8,0x7f36,0x7f8a,0x7fbd,
-0x8001,0x8003,0x800c,0x8012,0x8033,0x807f,0x8089,0x808b,
-0x808c,0x81e3,0x81ea,0x81f3,0x81fc,0x820c,0x821b,0x821f,
-0x826e,0x8272,0x827e,0x866b,0x8840,0x884c,0x8863,0x897f,
-0x9621,0x4e32,0x4ea8,0x4f4d,0x4f4f,0x4f47,0x4f57,0x4f5e,
-0x4f34,0x4f5b,0x4f55,0x4f30,0x4f50,0x4f51,0x4f3d,0x4f3a,
-0x4f38,0x4f43,0x4f54,0x4f3c,0x4f46,0x4f63,0x4f5c,0x4f60,
-0x4f2f,0x4f4e,0x4f36,0x4f59,0x4f5d,0x4f48,0x4f5a,0x514c,
-0x514b,0x514d,0x5175,0x51b6,0x51b7,0x5225,0x5224,0x5229,
-0x522a,0x5228,0x52ab,0x52a9,0x52aa,0x52ac,0x5323,0x5373,
-0x5375,0x541d,0x542d,0x541e,0x543e,0x5426,0x544e,0x5427,
-0x5446,0x5443,0x5433,0x5448,0x5442,0x541b,0x5429,0x544a,
-0x5439,0x543b,0x5438,0x542e,0x5435,0x5436,0x5420,0x543c,
-0x5440,0x5431,0x542b,0x541f,0x542c,0x56ea,0x56f0,0x56e4,
-0x56eb,0x574a,0x5751,0x5740,0x574d,0x5747,0x574e,0x573e,
-0x5750,0x574f,0x573b,0x58ef,0x593e,0x599d,0x5992,0x59a8,
-0x599e,0x59a3,0x5999,0x5996,0x598d,0x59a4,0x5993,0x598a,
-0x59a5,0x5b5d,0x5b5c,0x5b5a,0x5b5b,0x5b8c,0x5b8b,0x5b8f,
-0x5c2c,0x5c40,0x5c41,0x5c3f,0x5c3e,0x5c90,0x5c91,0x5c94,
-0x5c8c,0x5deb,0x5e0c,0x5e8f,0x5e87,0x5e8a,0x5ef7,0x5f04,
-0x5f1f,0x5f64,0x5f62,0x5f77,0x5f79,0x5fd8,0x5fcc,0x5fd7,
-0x5fcd,0x5ff1,0x5feb,0x5ff8,0x5fea,0x6212,0x6211,0x6284,
-0x6297,0x6296,0x6280,0x6276,0x6289,0x626d,0x628a,0x627c,
-0x627e,0x6279,0x6273,0x6292,0x626f,0x6298,0x626e,0x6295,
-0x6293,0x6291,0x6286,0x6539,0x653b,0x6538,0x65f1,0x66f4,
-0x675f,0x674e,0x674f,0x6750,0x6751,0x675c,0x6756,0x675e,
-0x6749,0x6746,0x6760,0x6753,0x6757,0x6b65,0x6bcf,0x6c42,
-0x6c5e,0x6c99,0x6c81,0x6c88,0x6c89,0x6c85,0x6c9b,0x6c6a,
-0x6c7a,0x6c90,0x6c70,0x6c8c,0x6c68,0x6c96,0x6c92,0x6c7d,
-0x6c83,0x6c72,0x6c7e,0x6c74,0x6c86,0x6c76,0x6c8d,0x6c94,
-0x6c98,0x6c82,0x7076,0x707c,0x707d,0x7078,0x7262,0x7261,
-0x7260,0x72c4,0x72c2,0x7396,0x752c,0x752b,0x7537,0x7538,
-0x7682,0x76ef,0x77e3,0x79c1,0x79c0,0x79bf,0x7a76,0x7cfb,
-0x7f55,0x8096,0x8093,0x809d,0x8098,0x809b,0x809a,0x80b2,
-0x826f,0x8292,0x828b,0x828d,0x898b,0x89d2,0x8a00,0x8c37,
-0x8c46,0x8c55,0x8c9d,0x8d64,0x8d70,0x8db3,0x8eab,0x8eca,
-0x8f9b,0x8fb0,0x8fc2,0x8fc6,0x8fc5,0x8fc4,0x5de1,0x9091,
-0x90a2,0x90aa,0x90a6,0x90a3,0x9149,0x91c6,0x91cc,0x9632,
-0x962e,0x9631,0x962a,0x962c,0x4e26,0x4e56,0x4e73,0x4e8b,
-0x4e9b,0x4e9e,0x4eab,0x4eac,0x4f6f,0x4f9d,0x4f8d,0x4f73,
-0x4f7f,0x4f6c,0x4f9b,0x4f8b,0x4f86,0x4f83,0x4f70,0x4f75,
-0x4f88,0x4f69,0x4f7b,0x4f96,0x4f7e,0x4f8f,0x4f91,0x4f7a,
-0x5154,0x5152,0x5155,0x5169,0x5177,0x5176,0x5178,0x51bd,
-0x51fd,0x523b,0x5238,0x5237,0x523a,0x5230,0x522e,0x5236,
-0x5241,0x52be,0x52bb,0x5352,0x5354,0x5353,0x5351,0x5366,
-0x5377,0x5378,0x5379,0x53d6,0x53d4,0x53d7,0x5473,0x5475,
-0x5496,0x5478,0x5495,0x5480,0x547b,0x5477,0x5484,0x5492,
-0x5486,0x547c,0x5490,0x5471,0x5476,0x548c,0x549a,0x5462,
-0x5468,0x548b,0x547d,0x548e,0x56fa,0x5783,0x5777,0x576a,
-0x5769,0x5761,0x5766,0x5764,0x577c,0x591c,0x5949,0x5947,
-0x5948,0x5944,0x5954,0x59be,0x59bb,0x59d4,0x59b9,0x59ae,
-0x59d1,0x59c6,0x59d0,0x59cd,0x59cb,0x59d3,0x59ca,0x59af,
-0x59b3,0x59d2,0x59c5,0x5b5f,0x5b64,0x5b63,0x5b97,0x5b9a,
-0x5b98,0x5b9c,0x5b99,0x5b9b,0x5c1a,0x5c48,0x5c45,0x5c46,
-0x5cb7,0x5ca1,0x5cb8,0x5ca9,0x5cab,0x5cb1,0x5cb3,0x5e18,
-0x5e1a,0x5e16,0x5e15,0x5e1b,0x5e11,0x5e78,0x5e9a,0x5e97,
-0x5e9c,0x5e95,0x5e96,0x5ef6,0x5f26,0x5f27,0x5f29,0x5f80,
-0x5f81,0x5f7f,0x5f7c,0x5fdd,0x5fe0,0x5ffd,0x5ff5,0x5fff,
-0x600f,0x6014,0x602f,0x6035,0x6016,0x602a,0x6015,0x6021,
-0x6027,0x6029,0x602b,0x601b,0x6216,0x6215,0x623f,0x623e,
-0x6240,0x627f,0x62c9,0x62cc,0x62c4,0x62bf,0x62c2,0x62b9,
-0x62d2,0x62db,0x62ab,0x62d3,0x62d4,0x62cb,0x62c8,0x62a8,
-0x62bd,0x62bc,0x62d0,0x62d9,0x62c7,0x62cd,0x62b5,0x62da,
-0x62b1,0x62d8,0x62d6,0x62d7,0x62c6,0x62ac,0x62ce,0x653e,
-0x65a7,0x65bc,0x65fa,0x6614,0x6613,0x660c,0x6606,0x6602,
-0x660e,0x6600,0x660f,0x6615,0x660a,0x6607,0x670d,0x670b,
-0x676d,0x678b,0x6795,0x6771,0x679c,0x6773,0x6777,0x6787,
-0x679d,0x6797,0x676f,0x6770,0x677f,0x6789,0x677e,0x6790,
-0x6775,0x679a,0x6793,0x677c,0x676a,0x6772,0x6b23,0x6b66,
-0x6b67,0x6b7f,0x6c13,0x6c1b,0x6ce3,0x6ce8,0x6cf3,0x6cb1,
-0x6ccc,0x6ce5,0x6cb3,0x6cbd,0x6cbe,0x6cbc,0x6ce2,0x6cab,
-0x6cd5,0x6cd3,0x6cb8,0x6cc4,0x6cb9,0x6cc1,0x6cae,0x6cd7,
-0x6cc5,0x6cf1,0x6cbf,0x6cbb,0x6ce1,0x6cdb,0x6cca,0x6cac,
-0x6cef,0x6cdc,0x6cd6,0x6ce0,0x7095,0x708e,0x7092,0x708a,
-0x7099,0x722c,0x722d,0x7238,0x7248,0x7267,0x7269,0x72c0,
-0x72ce,0x72d9,0x72d7,0x72d0,0x73a9,0x73a8,0x739f,0x73ab,
-0x73a5,0x753d,0x759d,0x7599,0x759a,0x7684,0x76c2,0x76f2,
-0x76f4,0x77e5,0x77fd,0x793e,0x7940,0x7941,0x79c9,0x79c8,
-0x7a7a,0x7a79,0x7afa,0x7cfe,0x7f54,0x7f8c,0x7f8b,0x8005,
-0x80ba,0x80a5,0x80a2,0x80b1,0x80a1,0x80ab,0x80a9,0x80b4,
-0x80aa,0x80af,0x81e5,0x81fe,0x820d,0x82b3,0x829d,0x8299,
-0x82ad,0x82bd,0x829f,0x82b9,0x82b1,0x82ac,0x82a5,0x82af,
-0x82b8,0x82a3,0x82b0,0x82be,0x82b7,0x864e,0x8671,0x521d,
-0x8868,0x8ecb,0x8fce,0x8fd4,0x8fd1,0x90b5,0x90b8,0x90b1,
-0x90b6,0x91c7,0x91d1,0x9577,0x9580,0x961c,0x9640,0x963f,
-0x963b,0x9644,0x9642,0x96b9,0x96e8,0x9752,0x975e,0x4e9f,
-0x4ead,0x4eae,0x4fe1,0x4fb5,0x4faf,0x4fbf,0x4fe0,0x4fd1,
-0x4fcf,0x4fdd,0x4fc3,0x4fb6,0x4fd8,0x4fdf,0x4fca,0x4fd7,
-0x4fae,0x4fd0,0x4fc4,0x4fc2,0x4fda,0x4fce,0x4fde,0x4fb7,
-0x5157,0x5192,0x5191,0x51a0,0x524e,0x5243,0x524a,0x524d,
-0x524c,0x524b,0x5247,0x52c7,0x52c9,0x52c3,0x52c1,0x530d,
-0x5357,0x537b,0x539a,0x53db,0x54ac,0x54c0,0x54a8,0x54ce,
-0x54c9,0x54b8,0x54a6,0x54b3,0x54c7,0x54c2,0x54bd,0x54aa,
-0x54c1,0x54c4,0x54c8,0x54af,0x54ab,0x54b1,0x54bb,0x54a9,
-0x54a7,0x54bf,0x56ff,0x5782,0x578b,0x57a0,0x57a3,0x57a2,
-0x57ce,0x57ae,0x5793,0x5955,0x5951,0x594f,0x594e,0x5950,
-0x59dc,0x59d8,0x59ff,0x59e3,0x59e8,0x5a03,0x59e5,0x59ea,
-0x59da,0x59e6,0x5a01,0x59fb,0x5b69,0x5ba3,0x5ba6,0x5ba4,
-0x5ba2,0x5ba5,0x5c01,0x5c4e,0x5c4f,0x5c4d,0x5c4b,0x5cd9,
-0x5cd2,0x5df7,0x5e1d,0x5e25,0x5e1f,0x5e7d,0x5ea0,0x5ea6,
-0x5efa,0x5f08,0x5f2d,0x5f65,0x5f88,0x5f85,0x5f8a,0x5f8b,
-0x5f87,0x5f8c,0x5f89,0x6012,0x601d,0x6020,0x6025,0x600e,
-0x6028,0x604d,0x6070,0x6068,0x6062,0x6046,0x6043,0x606c,
-0x606b,0x606a,0x6064,0x6241,0x62dc,0x6316,0x6309,0x62fc,
-0x62ed,0x6301,0x62ee,0x62fd,0x6307,0x62f1,0x62f7,0x62ef,
-0x62ec,0x62fe,0x62f4,0x6311,0x6302,0x653f,0x6545,0x65ab,
-0x65bd,0x65e2,0x6625,0x662d,0x6620,0x6627,0x662f,0x661f,
-0x6628,0x6631,0x6624,0x66f7,0x67ff,0x67d3,0x67f1,0x67d4,
-0x67d0,0x67ec,0x67b6,0x67af,0x67f5,0x67e9,0x67ef,0x67c4,
-0x67d1,0x67b4,0x67da,0x67e5,0x67b8,0x67cf,0x67de,0x67f3,
-0x67b0,0x67d9,0x67e2,0x67dd,0x67d2,0x6b6a,0x6b83,0x6b86,
-0x6bb5,0x6bd2,0x6bd7,0x6c1f,0x6cc9,0x6d0b,0x6d32,0x6d2a,
-0x6d41,0x6d25,0x6d0c,0x6d31,0x6d1e,0x6d17,0x6d3b,0x6d3d,
-0x6d3e,0x6d36,0x6d1b,0x6cf5,0x6d39,0x6d27,0x6d38,0x6d29,
-0x6d2e,0x6d35,0x6d0e,0x6d2b,0x70ab,0x70ba,0x70b3,0x70ac,
-0x70af,0x70ad,0x70b8,0x70ae,0x70a4,0x7230,0x7272,0x726f,
-0x7274,0x72e9,0x72e0,0x72e1,0x73b7,0x73ca,0x73bb,0x73b2,
-0x73cd,0x73c0,0x73b3,0x751a,0x752d,0x754f,0x754c,0x754e,
-0x754b,0x75ab,0x75a4,0x75a5,0x75a2,0x75a3,0x7678,0x7686,
-0x7687,0x7688,0x76c8,0x76c6,0x76c3,0x76c5,0x7701,0x76f9,
-0x76f8,0x7709,0x770b,0x76fe,0x76fc,0x7707,0x77dc,0x7802,
-0x7814,0x780c,0x780d,0x7946,0x7949,0x7948,0x7947,0x79b9,
-0x79ba,0x79d1,0x79d2,0x79cb,0x7a7f,0x7a81,0x7aff,0x7afd,
-0x7c7d,0x7d02,0x7d05,0x7d00,0x7d09,0x7d07,0x7d04,0x7d06,
-0x7f38,0x7f8e,0x7fbf,0x8004,0x8010,0x800d,0x8011,0x8036,
-0x80d6,0x80e5,0x80da,0x80c3,0x80c4,0x80cc,0x80e1,0x80db,
-0x80ce,0x80de,0x80e4,0x80dd,0x81f4,0x8222,0x82e7,0x8303,
-0x8305,0x82e3,0x82db,0x82e6,0x8304,0x82e5,0x8302,0x8309,
-0x82d2,0x82d7,0x82f1,0x8301,0x82dc,0x82d4,0x82d1,0x82de,
-0x82d3,0x82df,0x82ef,0x8306,0x8650,0x8679,0x867b,0x867a,
-0x884d,0x886b,0x8981,0x89d4,0x8a08,0x8a02,0x8a03,0x8c9e,
-0x8ca0,0x8d74,0x8d73,0x8db4,0x8ecd,0x8ecc,0x8ff0,0x8fe6,
-0x8fe2,0x8fea,0x8fe5,0x8fed,0x8feb,0x8fe4,0x8fe8,0x90ca,
-0x90ce,0x90c1,0x90c3,0x914b,0x914a,0x91cd,0x9582,0x9650,
-0x964b,0x964c,0x964d,0x9762,0x9769,0x97cb,0x97ed,0x97f3,
-0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999,0x4e58,0x4eb3,
-0x500c,0x500d,0x5023,0x4fef,0x5026,0x5025,0x4ff8,0x5029,
-0x5016,0x5006,0x503c,0x501f,0x501a,0x5012,0x5011,0x4ffa,
-0x5000,0x5014,0x5028,0x4ff1,0x5021,0x500b,0x5019,0x5018,
-0x4ff3,0x4fee,0x502d,0x502a,0x4ffe,0x502b,0x5009,0x517c,
-0x51a4,0x51a5,0x51a2,0x51cd,0x51cc,0x51c6,0x51cb,0x5256,
-0x525c,0x5254,0x525b,0x525d,0x532a,0x537f,0x539f,0x539d,
-0x53df,0x54e8,0x5510,0x5501,0x5537,0x54fc,0x54e5,0x54f2,
-0x5506,0x54fa,0x5514,0x54e9,0x54ed,0x54e1,0x5509,0x54ee,
-0x54ea,0x54e6,0x5527,0x5507,0x54fd,0x550f,0x5703,0x5704,
-0x57c2,0x57d4,0x57cb,0x57c3,0x5809,0x590f,0x5957,0x5958,
-0x595a,0x5a11,0x5a18,0x5a1c,0x5a1f,0x5a1b,0x5a13,0x59ec,
-0x5a20,0x5a23,0x5a29,0x5a25,0x5a0c,0x5a09,0x5b6b,0x5c58,
-0x5bb0,0x5bb3,0x5bb6,0x5bb4,0x5bae,0x5bb5,0x5bb9,0x5bb8,
-0x5c04,0x5c51,0x5c55,0x5c50,0x5ced,0x5cfd,0x5cfb,0x5cea,
-0x5ce8,0x5cf0,0x5cf6,0x5d01,0x5cf4,0x5dee,0x5e2d,0x5e2b,
-0x5eab,0x5ead,0x5ea7,0x5f31,0x5f92,0x5f91,0x5f90,0x6059,
-0x6063,0x6065,0x6050,0x6055,0x606d,0x6069,0x606f,0x6084,
-0x609f,0x609a,0x608d,0x6094,0x608c,0x6085,0x6096,0x6247,
-0x62f3,0x6308,0x62ff,0x634e,0x633e,0x632f,0x6355,0x6342,
-0x6346,0x634f,0x6349,0x633a,0x6350,0x633d,0x632a,0x632b,
-0x6328,0x634d,0x634c,0x6548,0x6549,0x6599,0x65c1,0x65c5,
-0x6642,0x6649,0x664f,0x6643,0x6652,0x664c,0x6645,0x6641,
-0x66f8,0x6714,0x6715,0x6717,0x6821,0x6838,0x6848,0x6846,
-0x6853,0x6839,0x6842,0x6854,0x6829,0x68b3,0x6817,0x684c,
-0x6851,0x683d,0x67f4,0x6850,0x6840,0x683c,0x6843,0x682a,
-0x6845,0x6813,0x6818,0x6841,0x6b8a,0x6b89,0x6bb7,0x6c23,
-0x6c27,0x6c28,0x6c26,0x6c24,0x6cf0,0x6d6a,0x6d95,0x6d88,
-0x6d87,0x6d66,0x6d78,0x6d77,0x6d59,0x6d93,0x6d6c,0x6d89,
-0x6d6e,0x6d5a,0x6d74,0x6d69,0x6d8c,0x6d8a,0x6d79,0x6d85,
-0x6d65,0x6d94,0x70ca,0x70d8,0x70e4,0x70d9,0x70c8,0x70cf,
-0x7239,0x7279,0x72fc,0x72f9,0x72fd,0x72f8,0x72f7,0x7386,
-0x73ed,0x7409,0x73ee,0x73e0,0x73ea,0x73de,0x7554,0x755d,
-0x755c,0x755a,0x7559,0x75be,0x75c5,0x75c7,0x75b2,0x75b3,
-0x75bd,0x75bc,0x75b9,0x75c2,0x75b8,0x768b,0x76b0,0x76ca,
-0x76cd,0x76ce,0x7729,0x771f,0x7720,0x7728,0x77e9,0x7830,
-0x7827,0x7838,0x781d,0x7834,0x7837,0x7825,0x782d,0x7820,
-0x781f,0x7832,0x7955,0x7950,0x7960,0x795f,0x7956,0x795e,
-0x795d,0x7957,0x795a,0x79e4,0x79e3,0x79e7,0x79df,0x79e6,
-0x79e9,0x79d8,0x7a84,0x7a88,0x7ad9,0x7b06,0x7b11,0x7c89,
-0x7d21,0x7d17,0x7d0b,0x7d0a,0x7d20,0x7d22,0x7d14,0x7d10,
-0x7d15,0x7d1a,0x7d1c,0x7d0d,0x7d19,0x7d1b,0x7f3a,0x7f5f,
-0x7f94,0x7fc5,0x7fc1,0x8006,0x8018,0x8015,0x8019,0x8017,
-0x803d,0x803f,0x80f1,0x8102,0x80f0,0x8105,0x80ed,0x80f4,
-0x8106,0x80f8,0x80f3,0x8108,0x80fd,0x810a,0x80fc,0x80ef,
-0x81ed,0x81ec,0x8200,0x8210,0x822a,0x822b,0x8228,0x822c,
-0x82bb,0x832b,0x8352,0x8354,0x834a,0x8338,0x8350,0x8349,
-0x8335,0x8334,0x834f,0x8332,0x8339,0x8336,0x8317,0x8340,
-0x8331,0x8328,0x8343,0x8654,0x868a,0x86aa,0x8693,0x86a4,
-0x86a9,0x868c,0x86a3,0x869c,0x8870,0x8877,0x8881,0x8882,
-0x887d,0x8879,0x8a18,0x8a10,0x8a0e,0x8a0c,0x8a15,0x8a0a,
-0x8a17,0x8a13,0x8a16,0x8a0f,0x8a11,0x8c48,0x8c7a,0x8c79,
-0x8ca1,0x8ca2,0x8d77,0x8eac,0x8ed2,0x8ed4,0x8ecf,0x8fb1,
-0x9001,0x9006,0x8ff7,0x9000,0x8ffa,0x8ff4,0x9003,0x8ffd,
-0x9005,0x8ff8,0x9095,0x90e1,0x90dd,0x90e2,0x9152,0x914d,
-0x914c,0x91d8,0x91dd,0x91d7,0x91dc,0x91d9,0x9583,0x9662,
-0x9663,0x9661,0x965b,0x965d,0x9664,0x9658,0x965e,0x96bb,
-0x98e2,0x99ac,0x9aa8,0x9ad8,0x9b25,0x9b32,0x9b3c,0x4e7e,
-0x507a,0x507d,0x505c,0x5047,0x5043,0x504c,0x505a,0x5049,
-0x5065,0x5076,0x504e,0x5055,0x5075,0x5074,0x5077,0x504f,
-0x500f,0x506f,0x506d,0x515c,0x5195,0x51f0,0x526a,0x526f,
-0x52d2,0x52d9,0x52d8,0x52d5,0x5310,0x530f,0x5319,0x533f,
-0x5340,0x533e,0x53c3,0x66fc,0x5546,0x556a,0x5566,0x5544,
-0x555e,0x5561,0x5543,0x554a,0x5531,0x5556,0x554f,0x5555,
-0x552f,0x5564,0x5538,0x552e,0x555c,0x552c,0x5563,0x5533,
-0x5541,0x5557,0x5708,0x570b,0x5709,0x57df,0x5805,0x580a,
-0x5806,0x57e0,0x57e4,0x57fa,0x5802,0x5835,0x57f7,0x57f9,
-0x5920,0x5962,0x5a36,0x5a41,0x5a49,0x5a66,0x5a6a,0x5a40,
-0x5a3c,0x5a62,0x5a5a,0x5a46,0x5a4a,0x5b70,0x5bc7,0x5bc5,
-0x5bc4,0x5bc2,0x5bbf,0x5bc6,0x5c09,0x5c08,0x5c07,0x5c60,
-0x5c5c,0x5c5d,0x5d07,0x5d06,0x5d0e,0x5d1b,0x5d16,0x5d22,
-0x5d11,0x5d29,0x5d14,0x5d19,0x5d24,0x5d27,0x5d17,0x5de2,
-0x5e38,0x5e36,0x5e33,0x5e37,0x5eb7,0x5eb8,0x5eb6,0x5eb5,
-0x5ebe,0x5f35,0x5f37,0x5f57,0x5f6c,0x5f69,0x5f6b,0x5f97,
-0x5f99,0x5f9e,0x5f98,0x5fa1,0x5fa0,0x5f9c,0x607f,0x60a3,
-0x6089,0x60a0,0x60a8,0x60cb,0x60b4,0x60e6,0x60bd,0x60c5,
-0x60bb,0x60b5,0x60dc,0x60bc,0x60d8,0x60d5,0x60c6,0x60df,
-0x60b8,0x60da,0x60c7,0x621a,0x621b,0x6248,0x63a0,0x63a7,
-0x6372,0x6396,0x63a2,0x63a5,0x6377,0x6367,0x6398,0x63aa,
-0x6371,0x63a9,0x6389,0x6383,0x639b,0x636b,0x63a8,0x6384,
-0x6388,0x6399,0x63a1,0x63ac,0x6392,0x638f,0x6380,0x637b,
-0x6369,0x6368,0x637a,0x655d,0x6556,0x6551,0x6559,0x6557,
-0x555f,0x654f,0x6558,0x6555,0x6554,0x659c,0x659b,0x65ac,
-0x65cf,0x65cb,0x65cc,0x65ce,0x665d,0x665a,0x6664,0x6668,
-0x6666,0x665e,0x66f9,0x52d7,0x671b,0x6881,0x68af,0x68a2,
-0x6893,0x68b5,0x687f,0x6876,0x68b1,0x68a7,0x6897,0x68b0,
-0x6883,0x68c4,0x68ad,0x6886,0x6885,0x6894,0x689d,0x68a8,
-0x689f,0x68a1,0x6882,0x6b32,0x6bba,0x6beb,0x6bec,0x6c2b,
-0x6d8e,0x6dbc,0x6df3,0x6dd9,0x6db2,0x6de1,0x6dcc,0x6de4,
-0x6dfb,0x6dfa,0x6e05,0x6dc7,0x6dcb,0x6daf,0x6dd1,0x6dae,
-0x6dde,0x6df9,0x6db8,0x6df7,0x6df5,0x6dc5,0x6dd2,0x6e1a,
-0x6db5,0x6dda,0x6deb,0x6dd8,0x6dea,0x6df1,0x6dee,0x6de8,
-0x6dc6,0x6dc4,0x6daa,0x6dec,0x6dbf,0x6de6,0x70f9,0x7109,
-0x710a,0x70fd,0x70ef,0x723d,0x727d,0x7281,0x731c,0x731b,
-0x7316,0x7313,0x7319,0x7387,0x7405,0x740a,0x7403,0x7406,
-0x73fe,0x740d,0x74e0,0x74f6,0x74f7,0x751c,0x7522,0x7565,
-0x7566,0x7562,0x7570,0x758f,0x75d4,0x75d5,0x75b5,0x75ca,
-0x75cd,0x768e,0x76d4,0x76d2,0x76db,0x7737,0x773e,0x773c,
-0x7736,0x7738,0x773a,0x786b,0x7843,0x784e,0x7965,0x7968,
-0x796d,0x79fb,0x7a92,0x7a95,0x7b20,0x7b28,0x7b1b,0x7b2c,
-0x7b26,0x7b19,0x7b1e,0x7b2e,0x7c92,0x7c97,0x7c95,0x7d46,
-0x7d43,0x7d71,0x7d2e,0x7d39,0x7d3c,0x7d40,0x7d30,0x7d33,
-0x7d44,0x7d2f,0x7d42,0x7d32,0x7d31,0x7f3d,0x7f9e,0x7f9a,
-0x7fcc,0x7fce,0x7fd2,0x801c,0x804a,0x8046,0x812f,0x8116,
-0x8123,0x812b,0x8129,0x8130,0x8124,0x8202,0x8235,0x8237,
-0x8236,0x8239,0x838e,0x839e,0x8398,0x8378,0x83a2,0x8396,
-0x83bd,0x83ab,0x8392,0x838a,0x8393,0x8389,0x83a0,0x8377,
-0x837b,0x837c,0x8386,0x83a7,0x8655,0x5f6a,0x86c7,0x86c0,
-0x86b6,0x86c4,0x86b5,0x86c6,0x86cb,0x86b1,0x86af,0x86c9,
-0x8853,0x889e,0x8888,0x88ab,0x8892,0x8896,0x888d,0x888b,
-0x8993,0x898f,0x8a2a,0x8a1d,0x8a23,0x8a25,0x8a31,0x8a2d,
-0x8a1f,0x8a1b,0x8a22,0x8c49,0x8c5a,0x8ca9,0x8cac,0x8cab,
-0x8ca8,0x8caa,0x8ca7,0x8d67,0x8d66,0x8dbe,0x8dba,0x8edb,
-0x8edf,0x9019,0x900d,0x901a,0x9017,0x9023,0x901f,0x901d,
-0x9010,0x9015,0x901e,0x9020,0x900f,0x9022,0x9016,0x901b,
-0x9014,0x90e8,0x90ed,0x90fd,0x9157,0x91ce,0x91f5,0x91e6,
-0x91e3,0x91e7,0x91ed,0x91e9,0x9589,0x966a,0x9675,0x9673,
-0x9678,0x9670,0x9674,0x9676,0x9677,0x966c,0x96c0,0x96ea,
-0x96e9,0x7ae0,0x7adf,0x9802,0x9803,0x9b5a,0x9ce5,0x9e75,
-0x9e7f,0x9ea5,0x9ebb,0x50a2,0x508d,0x5085,0x5099,0x5091,
-0x5080,0x5096,0x5098,0x509a,0x6700,0x51f1,0x5272,0x5274,
-0x5275,0x5269,0x52de,0x52dd,0x52db,0x535a,0x53a5,0x557b,
-0x5580,0x55a7,0x557c,0x558a,0x559d,0x5598,0x5582,0x559c,
-0x55aa,0x5594,0x5587,0x558b,0x5583,0x55b3,0x55ae,0x559f,
-0x553e,0x55b2,0x559a,0x55bb,0x55ac,0x55b1,0x557e,0x5589,
-0x55ab,0x5599,0x570d,0x582f,0x582a,0x5834,0x5824,0x5830,
-0x5831,0x5821,0x581d,0x5820,0x58f9,0x58fa,0x5960,0x5a77,
-0x5a9a,0x5a7f,0x5a92,0x5a9b,0x5aa7,0x5b73,0x5b71,0x5bd2,
-0x5bcc,0x5bd3,0x5bd0,0x5c0a,0x5c0b,0x5c31,0x5d4c,0x5d50,
-0x5d34,0x5d47,0x5dfd,0x5e45,0x5e3d,0x5e40,0x5e43,0x5e7e,
-0x5eca,0x5ec1,0x5ec2,0x5ec4,0x5f3c,0x5f6d,0x5fa9,0x5faa,
-0x5fa8,0x60d1,0x60e1,0x60b2,0x60b6,0x60e0,0x611c,0x6123,
-0x60fa,0x6115,0x60f0,0x60fb,0x60f4,0x6168,0x60f1,0x610e,
-0x60f6,0x6109,0x6100,0x6112,0x621f,0x6249,0x63a3,0x638c,
-0x63cf,0x63c0,0x63e9,0x63c9,0x63c6,0x63cd,0x63d2,0x63e3,
-0x63d0,0x63e1,0x63d6,0x63ed,0x63ee,0x6376,0x63f4,0x63ea,
-0x63db,0x6452,0x63da,0x63f9,0x655e,0x6566,0x6562,0x6563,
-0x6591,0x6590,0x65af,0x666e,0x6670,0x6674,0x6676,0x666f,
-0x6691,0x667a,0x667e,0x6677,0x66fe,0x66ff,0x671f,0x671d,
-0x68fa,0x68d5,0x68e0,0x68d8,0x68d7,0x6905,0x68df,0x68f5,
-0x68ee,0x68e7,0x68f9,0x68d2,0x68f2,0x68e3,0x68cb,0x68cd,
-0x690d,0x6912,0x690e,0x68c9,0x68da,0x696e,0x68fb,0x6b3e,
-0x6b3a,0x6b3d,0x6b98,0x6b96,0x6bbc,0x6bef,0x6c2e,0x6c2f,
-0x6c2c,0x6e2f,0x6e38,0x6e54,0x6e21,0x6e32,0x6e67,0x6e4a,
-0x6e20,0x6e25,0x6e23,0x6e1b,0x6e5b,0x6e58,0x6e24,0x6e56,
-0x6e6e,0x6e2d,0x6e26,0x6e6f,0x6e34,0x6e4d,0x6e3a,0x6e2c,
-0x6e43,0x6e1d,0x6e3e,0x6ecb,0x6e89,0x6e19,0x6e4e,0x6e63,
-0x6e44,0x6e72,0x6e69,0x6e5f,0x7119,0x711a,0x7126,0x7130,
-0x7121,0x7136,0x716e,0x711c,0x724c,0x7284,0x7280,0x7336,
-0x7325,0x7334,0x7329,0x743a,0x742a,0x7433,0x7422,0x7425,
-0x7435,0x7436,0x7434,0x742f,0x741b,0x7426,0x7428,0x7525,
-0x7526,0x756b,0x756a,0x75e2,0x75db,0x75e3,0x75d9,0x75d8,
-0x75de,0x75e0,0x767b,0x767c,0x7696,0x7693,0x76b4,0x76dc,
-0x774f,0x77ed,0x785d,0x786c,0x786f,0x7a0d,0x7a08,0x7a0b,
-0x7a05,0x7a00,0x7a98,0x7a97,0x7a96,0x7ae5,0x7ae3,0x7b49,
-0x7b56,0x7b46,0x7b50,0x7b52,0x7b54,0x7b4d,0x7b4b,0x7b4f,
-0x7b51,0x7c9f,0x7ca5,0x7d5e,0x7d50,0x7d68,0x7d55,0x7d2b,
-0x7d6e,0x7d72,0x7d61,0x7d66,0x7d62,0x7d70,0x7d73,0x5584,
-0x7fd4,0x7fd5,0x800b,0x8052,0x8085,0x8155,0x8154,0x814b,
-0x8151,0x814e,0x8139,0x8146,0x813e,0x814c,0x8153,0x8174,
-0x8212,0x821c,0x83e9,0x8403,0x83f8,0x840d,0x83e0,0x83c5,
-0x840b,0x83c1,0x83ef,0x83f1,0x83f4,0x8457,0x840a,0x83f0,
-0x840c,0x83cc,0x83fd,0x83f2,0x83ca,0x8438,0x840e,0x8404,
-0x83dc,0x8407,0x83d4,0x83df,0x865b,0x86df,0x86d9,0x86ed,
-0x86d4,0x86db,0x86e4,0x86d0,0x86de,0x8857,0x88c1,0x88c2,
-0x88b1,0x8983,0x8996,0x8a3b,0x8a60,0x8a55,0x8a5e,0x8a3c,
-0x8a41,0x8a54,0x8a5b,0x8a50,0x8a46,0x8a34,0x8a3a,0x8a36,
-0x8a56,0x8c61,0x8c82,0x8caf,0x8cbc,0x8cb3,0x8cbd,0x8cc1,
-0x8cbb,0x8cc0,0x8cb4,0x8cb7,0x8cb6,0x8cbf,0x8cb8,0x8d8a,
-0x8d85,0x8d81,0x8dce,0x8ddd,0x8dcb,0x8dda,0x8dd1,0x8dcc,
-0x8ddb,0x8dc6,0x8efb,0x8ef8,0x8efc,0x8f9c,0x902e,0x9035,
-0x9031,0x9038,0x9032,0x9036,0x9102,0x90f5,0x9109,0x90fe,
-0x9163,0x9165,0x91cf,0x9214,0x9215,0x9223,0x9209,0x921e,
-0x920d,0x9210,0x9207,0x9211,0x9594,0x958f,0x958b,0x9591,
-0x9593,0x9592,0x958e,0x968a,0x968e,0x968b,0x967d,0x9685,
-0x9686,0x968d,0x9672,0x9684,0x96c1,0x96c5,0x96c4,0x96c6,
-0x96c7,0x96ef,0x96f2,0x97cc,0x9805,0x9806,0x9808,0x98e7,
-0x98ea,0x98ef,0x98e9,0x98f2,0x98ed,0x99ae,0x99ad,0x9ec3,
-0x9ecd,0x9ed1,0x4e82,0x50ad,0x50b5,0x50b2,0x50b3,0x50c5,
-0x50be,0x50ac,0x50b7,0x50bb,0x50af,0x50c7,0x527f,0x5277,
-0x527d,0x52df,0x52e6,0x52e4,0x52e2,0x52e3,0x532f,0x55df,
-0x55e8,0x55d3,0x55e6,0x55ce,0x55dc,0x55c7,0x55d1,0x55e3,
-0x55e4,0x55ef,0x55da,0x55e1,0x55c5,0x55c6,0x55e5,0x55c9,
-0x5712,0x5713,0x585e,0x5851,0x5858,0x5857,0x585a,0x5854,
-0x586b,0x584c,0x586d,0x584a,0x5862,0x5852,0x584b,0x5967,
-0x5ac1,0x5ac9,0x5acc,0x5abe,0x5abd,0x5abc,0x5ab3,0x5ac2,
-0x5ab2,0x5d69,0x5d6f,0x5e4c,0x5e79,0x5ec9,0x5ec8,0x5f12,
-0x5f59,0x5fac,0x5fae,0x611a,0x610f,0x6148,0x611f,0x60f3,
-0x611b,0x60f9,0x6101,0x6108,0x614e,0x614c,0x6144,0x614d,
-0x613e,0x6134,0x6127,0x610d,0x6106,0x6137,0x6221,0x6222,
-0x6413,0x643e,0x641e,0x642a,0x642d,0x643d,0x642c,0x640f,
-0x641c,0x6414,0x640d,0x6436,0x6416,0x6417,0x6406,0x656c,
-0x659f,0x65b0,0x6697,0x6689,0x6687,0x6688,0x6696,0x6684,
-0x6698,0x668d,0x6703,0x6994,0x696d,0x695a,0x6977,0x6960,
-0x6954,0x6975,0x6930,0x6982,0x694a,0x6968,0x696b,0x695e,
-0x6953,0x6979,0x6986,0x695d,0x6963,0x695b,0x6b47,0x6b72,
-0x6bc0,0x6bbf,0x6bd3,0x6bfd,0x6ea2,0x6eaf,0x6ed3,0x6eb6,
-0x6ec2,0x6e90,0x6e9d,0x6ec7,0x6ec5,0x6ea5,0x6e98,0x6ebc,
-0x6eba,0x6eab,0x6ed1,0x6e96,0x6e9c,0x6ec4,0x6ed4,0x6eaa,
-0x6ea7,0x6eb4,0x714e,0x7159,0x7169,0x7164,0x7149,0x7167,
-0x715c,0x716c,0x7166,0x714c,0x7165,0x715e,0x7146,0x7168,
-0x7156,0x723a,0x7252,0x7337,0x7345,0x733f,0x733e,0x746f,
-0x745a,0x7455,0x745f,0x745e,0x7441,0x743f,0x7459,0x745b,
-0x745c,0x7576,0x7578,0x7600,0x75f0,0x7601,0x75f2,0x75f1,
-0x75fa,0x75ff,0x75f4,0x75f3,0x76de,0x76df,0x775b,0x776b,
-0x7766,0x775e,0x7763,0x7779,0x776a,0x776c,0x775c,0x7765,
-0x7768,0x7762,0x77ee,0x788e,0x78b0,0x7897,0x7898,0x788c,
-0x7889,0x787c,0x7891,0x7893,0x787f,0x797a,0x797f,0x7981,
-0x842c,0x79bd,0x7a1c,0x7a1a,0x7a20,0x7a14,0x7a1f,0x7a1e,
-0x7a9f,0x7aa0,0x7b77,0x7bc0,0x7b60,0x7b6e,0x7b67,0x7cb1,
-0x7cb3,0x7cb5,0x7d93,0x7d79,0x7d91,0x7d81,0x7d8f,0x7d5b,
-0x7f6e,0x7f69,0x7f6a,0x7f72,0x7fa9,0x7fa8,0x7fa4,0x8056,
-0x8058,0x8086,0x8084,0x8171,0x8170,0x8178,0x8165,0x816e,
-0x8173,0x816b,0x8179,0x817a,0x8166,0x8205,0x8247,0x8482,
-0x8477,0x843d,0x8431,0x8475,0x8466,0x846b,0x8449,0x846c,
-0x845b,0x843c,0x8435,0x8461,0x8463,0x8469,0x846d,0x8446,
-0x865e,0x865c,0x865f,0x86f9,0x8713,0x8708,0x8707,0x8700,
-0x86fe,0x86fb,0x8702,0x8703,0x8706,0x870a,0x8859,0x88df,
-0x88d4,0x88d9,0x88dc,0x88d8,0x88dd,0x88e1,0x88ca,0x88d5,
-0x88d2,0x899c,0x89e3,0x8a6b,0x8a72,0x8a73,0x8a66,0x8a69,
-0x8a70,0x8a87,0x8a7c,0x8a63,0x8aa0,0x8a71,0x8a85,0x8a6d,
-0x8a62,0x8a6e,0x8a6c,0x8a79,0x8a7b,0x8a3e,0x8a68,0x8c62,
-0x8c8a,0x8c89,0x8cca,0x8cc7,0x8cc8,0x8cc4,0x8cb2,0x8cc3,
-0x8cc2,0x8cc5,0x8de1,0x8ddf,0x8de8,0x8def,0x8df3,0x8dfa,
-0x8dea,0x8de4,0x8de6,0x8eb2,0x8f03,0x8f09,0x8efe,0x8f0a,
-0x8f9f,0x8fb2,0x904b,0x904a,0x9053,0x9042,0x9054,0x903c,
-0x9055,0x9050,0x9047,0x904f,0x904e,0x904d,0x9051,0x903e,
-0x9041,0x9112,0x9117,0x916c,0x916a,0x9169,0x91c9,0x9237,
-0x9257,0x9238,0x923d,0x9240,0x923e,0x925b,0x924b,0x9264,
-0x9251,0x9234,0x9249,0x924d,0x9245,0x9239,0x923f,0x925a,
-0x9598,0x9698,0x9694,0x9695,0x96cd,0x96cb,0x96c9,0x96ca,
-0x96f7,0x96fb,0x96f9,0x96f6,0x9756,0x9774,0x9776,0x9810,
-0x9811,0x9813,0x980a,0x9812,0x980c,0x98fc,0x98f4,0x98fd,
-0x98fe,0x99b3,0x99b1,0x99b4,0x9ae1,0x9ce9,0x9e82,0x9f0e,
-0x9f13,0x9f20,0x50e7,0x50ee,0x50e5,0x50d6,0x50ed,0x50da,
-0x50d5,0x50cf,0x50d1,0x50f1,0x50ce,0x50e9,0x5162,0x51f3,
-0x5283,0x5282,0x5331,0x53ad,0x55fe,0x5600,0x561b,0x5617,
-0x55fd,0x5614,0x5606,0x5609,0x560d,0x560e,0x55f7,0x5616,
-0x561f,0x5608,0x5610,0x55f6,0x5718,0x5716,0x5875,0x587e,
-0x5883,0x5893,0x588a,0x5879,0x5885,0x587d,0x58fd,0x5925,
-0x5922,0x5924,0x596a,0x5969,0x5ae1,0x5ae6,0x5ae9,0x5ad7,
-0x5ad6,0x5ad8,0x5ae3,0x5b75,0x5bde,0x5be7,0x5be1,0x5be5,
-0x5be6,0x5be8,0x5be2,0x5be4,0x5bdf,0x5c0d,0x5c62,0x5d84,
-0x5d87,0x5e5b,0x5e63,0x5e55,0x5e57,0x5e54,0x5ed3,0x5ed6,
-0x5f0a,0x5f46,0x5f70,0x5fb9,0x6147,0x613f,0x614b,0x6177,
-0x6162,0x6163,0x615f,0x615a,0x6158,0x6175,0x622a,0x6487,
-0x6458,0x6454,0x64a4,0x6478,0x645f,0x647a,0x6451,0x6467,
-0x6434,0x646d,0x647b,0x6572,0x65a1,0x65d7,0x65d6,0x66a2,
-0x66a8,0x669d,0x699c,0x69a8,0x6995,0x69c1,0x69ae,0x69d3,
-0x69cb,0x699b,0x69b7,0x69bb,0x69ab,0x69b4,0x69d0,0x69cd,
-0x69ad,0x69cc,0x69a6,0x69c3,0x69a3,0x6b49,0x6b4c,0x6c33,
-0x6f33,0x6f14,0x6efe,0x6f13,0x6ef4,0x6f29,0x6f3e,0x6f20,
-0x6f2c,0x6f0f,0x6f02,0x6f22,0x6eff,0x6eef,0x6f06,0x6f31,
-0x6f38,0x6f32,0x6f23,0x6f15,0x6f2b,0x6f2f,0x6f88,0x6f2a,
-0x6eec,0x6f01,0x6ef2,0x6ecc,0x6ef7,0x7194,0x7199,0x717d,
-0x718a,0x7184,0x7192,0x723e,0x7292,0x7296,0x7344,0x7350,
-0x7464,0x7463,0x746a,0x7470,0x746d,0x7504,0x7591,0x7627,
-0x760d,0x760b,0x7609,0x7613,0x76e1,0x76e3,0x7784,0x777d,
-0x777f,0x7761,0x78c1,0x789f,0x78a7,0x78b3,0x78a9,0x78a3,
-0x798e,0x798f,0x798d,0x7a2e,0x7a31,0x7aaa,0x7aa9,0x7aed,
-0x7aef,0x7ba1,0x7b95,0x7b8b,0x7b75,0x7b97,0x7b9d,0x7b94,
-0x7b8f,0x7bb8,0x7b87,0x7b84,0x7cb9,0x7cbd,0x7cbe,0x7dbb,
-0x7db0,0x7d9c,0x7dbd,0x7dbe,0x7da0,0x7dca,0x7db4,0x7db2,
-0x7db1,0x7dba,0x7da2,0x7dbf,0x7db5,0x7db8,0x7dad,0x7dd2,
-0x7dc7,0x7dac,0x7f70,0x7fe0,0x7fe1,0x7fdf,0x805e,0x805a,
-0x8087,0x8150,0x8180,0x818f,0x8188,0x818a,0x817f,0x8182,
-0x81e7,0x81fa,0x8207,0x8214,0x821e,0x824b,0x84c9,0x84bf,
-0x84c6,0x84c4,0x8499,0x849e,0x84b2,0x849c,0x84cb,0x84b8,
-0x84c0,0x84d3,0x8490,0x84bc,0x84d1,0x84ca,0x873f,0x871c,
-0x873b,0x8722,0x8725,0x8734,0x8718,0x8755,0x8737,0x8729,
-0x88f3,0x8902,0x88f4,0x88f9,0x88f8,0x88fd,0x88e8,0x891a,
-0x88ef,0x8aa6,0x8a8c,0x8a9e,0x8aa3,0x8a8d,0x8aa1,0x8a93,
-0x8aa4,0x8aaa,0x8aa5,0x8aa8,0x8a98,0x8a91,0x8a9a,0x8aa7,
-0x8c6a,0x8c8d,0x8c8c,0x8cd3,0x8cd1,0x8cd2,0x8d6b,0x8d99,
-0x8d95,0x8dfc,0x8f14,0x8f12,0x8f15,0x8f13,0x8fa3,0x9060,
-0x9058,0x905c,0x9063,0x9059,0x905e,0x9062,0x905d,0x905b,
-0x9119,0x9118,0x911e,0x9175,0x9178,0x9177,0x9174,0x9278,
-0x9280,0x9285,0x9298,0x9296,0x927b,0x9293,0x929c,0x92a8,
-0x927c,0x9291,0x95a1,0x95a8,0x95a9,0x95a3,0x95a5,0x95a4,
-0x9699,0x969c,0x969b,0x96cc,0x96d2,0x9700,0x977c,0x9785,
-0x97f6,0x9817,0x9818,0x98af,0x98b1,0x9903,0x9905,0x990c,
-0x9909,0x99c1,0x9aaf,0x9ab0,0x9ae6,0x9b41,0x9b42,0x9cf4,
-0x9cf6,0x9cf3,0x9ebc,0x9f3b,0x9f4a,0x5104,0x5100,0x50fb,
-0x50f5,0x50f9,0x5102,0x5108,0x5109,0x5105,0x51dc,0x5287,
-0x5288,0x5289,0x528d,0x528a,0x52f0,0x53b2,0x562e,0x563b,
-0x5639,0x5632,0x563f,0x5634,0x5629,0x5653,0x564e,0x5657,
-0x5674,0x5636,0x562f,0x5630,0x5880,0x589f,0x589e,0x58b3,
-0x589c,0x58ae,0x58a9,0x58a6,0x596d,0x5b09,0x5afb,0x5b0b,
-0x5af5,0x5b0c,0x5b08,0x5bee,0x5bec,0x5be9,0x5beb,0x5c64,
-0x5c65,0x5d9d,0x5d94,0x5e62,0x5e5f,0x5e61,0x5ee2,0x5eda,
-0x5edf,0x5edd,0x5ee3,0x5ee0,0x5f48,0x5f71,0x5fb7,0x5fb5,
-0x6176,0x6167,0x616e,0x615d,0x6155,0x6182,0x617c,0x6170,
-0x616b,0x617e,0x61a7,0x6190,0x61ab,0x618e,0x61ac,0x619a,
-0x61a4,0x6194,0x61ae,0x622e,0x6469,0x646f,0x6479,0x649e,
-0x64b2,0x6488,0x6490,0x64b0,0x64a5,0x6493,0x6495,0x64a9,
-0x6492,0x64ae,0x64ad,0x64ab,0x649a,0x64ac,0x6499,0x64a2,
-0x64b3,0x6575,0x6577,0x6578,0x66ae,0x66ab,0x66b4,0x66b1,
-0x6a23,0x6a1f,0x69e8,0x6a01,0x6a1e,0x6a19,0x69fd,0x6a21,
-0x6a13,0x6a0a,0x69f3,0x6a02,0x6a05,0x69ed,0x6a11,0x6b50,
-0x6b4e,0x6ba4,0x6bc5,0x6bc6,0x6f3f,0x6f7c,0x6f84,0x6f51,
-0x6f66,0x6f54,0x6f86,0x6f6d,0x6f5b,0x6f78,0x6f6e,0x6f8e,
-0x6f7a,0x6f70,0x6f64,0x6f97,0x6f58,0x6ed5,0x6f6f,0x6f60,
-0x6f5f,0x719f,0x71ac,0x71b1,0x71a8,0x7256,0x729b,0x734e,
-0x7357,0x7469,0x748b,0x7483,0x747e,0x7480,0x757f,0x7620,
-0x7629,0x761f,0x7624,0x7626,0x7621,0x7622,0x769a,0x76ba,
-0x76e4,0x778e,0x7787,0x778c,0x7791,0x778b,0x78cb,0x78c5,
-0x78ba,0x78ca,0x78be,0x78d5,0x78bc,0x78d0,0x7a3f,0x7a3c,
-0x7a40,0x7a3d,0x7a37,0x7a3b,0x7aaf,0x7aae,0x7bad,0x7bb1,
-0x7bc4,0x7bb4,0x7bc6,0x7bc7,0x7bc1,0x7ba0,0x7bcc,0x7cca,
-0x7de0,0x7df4,0x7def,0x7dfb,0x7dd8,0x7dec,0x7ddd,0x7de8,
-0x7de3,0x7dda,0x7dde,0x7de9,0x7d9e,0x7dd9,0x7df2,0x7df9,
-0x7f75,0x7f77,0x7faf,0x7fe9,0x8026,0x819b,0x819c,0x819d,
-0x81a0,0x819a,0x8198,0x8517,0x853d,0x851a,0x84ee,0x852c,
-0x852d,0x8513,0x8511,0x8523,0x8521,0x8514,0x84ec,0x8525,
-0x84ff,0x8506,0x8782,0x8774,0x8776,0x8760,0x8766,0x8778,
-0x8768,0x8759,0x8757,0x874c,0x8753,0x885b,0x885d,0x8910,
-0x8907,0x8912,0x8913,0x8915,0x890a,0x8abc,0x8ad2,0x8ac7,
-0x8ac4,0x8a95,0x8acb,0x8af8,0x8ab2,0x8ac9,0x8ac2,0x8abf,
-0x8ab0,0x8ad6,0x8acd,0x8ab6,0x8ab9,0x8adb,0x8c4c,0x8c4e,
-0x8c6c,0x8ce0,0x8cde,0x8ce6,0x8ce4,0x8cec,0x8ced,0x8ce2,
-0x8ce3,0x8cdc,0x8cea,0x8ce1,0x8d6d,0x8d9f,0x8da3,0x8e2b,
-0x8e10,0x8e1d,0x8e22,0x8e0f,0x8e29,0x8e1f,0x8e21,0x8e1e,
-0x8eba,0x8f1d,0x8f1b,0x8f1f,0x8f29,0x8f26,0x8f2a,0x8f1c,
-0x8f1e,0x8f25,0x9069,0x906e,0x9068,0x906d,0x9077,0x9130,
-0x912d,0x9127,0x9131,0x9187,0x9189,0x918b,0x9183,0x92c5,
-0x92bb,0x92b7,0x92ea,0x92ac,0x92e4,0x92c1,0x92b3,0x92bc,
-0x92d2,0x92c7,0x92f0,0x92b2,0x95ad,0x95b1,0x9704,0x9706,
-0x9707,0x9709,0x9760,0x978d,0x978b,0x978f,0x9821,0x982b,
-0x981c,0x98b3,0x990a,0x9913,0x9912,0x9918,0x99dd,0x99d0,
-0x99df,0x99db,0x99d1,0x99d5,0x99d2,0x99d9,0x9ab7,0x9aee,
-0x9aef,0x9b27,0x9b45,0x9b44,0x9b77,0x9b6f,0x9d06,0x9d09,
-0x9d03,0x9ea9,0x9ebe,0x9ece,0x58a8,0x9f52,0x5112,0x5118,
-0x5114,0x5110,0x5115,0x5180,0x51aa,0x51dd,0x5291,0x5293,
-0x52f3,0x5659,0x566b,0x5679,0x5669,0x5664,0x5678,0x566a,
-0x5668,0x5665,0x5671,0x566f,0x566c,0x5662,0x5676,0x58c1,
-0x58be,0x58c7,0x58c5,0x596e,0x5b1d,0x5b34,0x5b78,0x5bf0,
-0x5c0e,0x5f4a,0x61b2,0x6191,0x61a9,0x618a,0x61cd,0x61b6,
-0x61be,0x61ca,0x61c8,0x6230,0x64c5,0x64c1,0x64cb,0x64bb,
-0x64bc,0x64da,0x64c4,0x64c7,0x64c2,0x64cd,0x64bf,0x64d2,
-0x64d4,0x64be,0x6574,0x66c6,0x66c9,0x66b9,0x66c4,0x66c7,
-0x66b8,0x6a3d,0x6a38,0x6a3a,0x6a59,0x6a6b,0x6a58,0x6a39,
-0x6a44,0x6a62,0x6a61,0x6a4b,0x6a47,0x6a35,0x6a5f,0x6a48,
-0x6b59,0x6b77,0x6c05,0x6fc2,0x6fb1,0x6fa1,0x6fc3,0x6fa4,
-0x6fc1,0x6fa7,0x6fb3,0x6fc0,0x6fb9,0x6fb6,0x6fa6,0x6fa0,
-0x6fb4,0x71be,0x71c9,0x71d0,0x71d2,0x71c8,0x71d5,0x71b9,
-0x71ce,0x71d9,0x71dc,0x71c3,0x71c4,0x7368,0x749c,0x74a3,
-0x7498,0x749f,0x749e,0x74e2,0x750c,0x750d,0x7634,0x7638,
-0x763a,0x76e7,0x76e5,0x77a0,0x779e,0x779f,0x77a5,0x78e8,
-0x78da,0x78ec,0x78e7,0x79a6,0x7a4d,0x7a4e,0x7a46,0x7a4c,
-0x7a4b,0x7aba,0x7bd9,0x7c11,0x7bc9,0x7be4,0x7bdb,0x7be1,
-0x7be9,0x7be6,0x7cd5,0x7cd6,0x7e0a,0x7e11,0x7e08,0x7e1b,
-0x7e23,0x7e1e,0x7e1d,0x7e09,0x7e10,0x7f79,0x7fb2,0x7ff0,
-0x7ff1,0x7fee,0x8028,0x81b3,0x81a9,0x81a8,0x81fb,0x8208,
-0x8258,0x8259,0x854a,0x8559,0x8548,0x8568,0x8569,0x8543,
-0x8549,0x856d,0x856a,0x855e,0x8783,0x879f,0x879e,0x87a2,
-0x878d,0x8861,0x892a,0x8932,0x8925,0x892b,0x8921,0x89aa,
-0x89a6,0x8ae6,0x8afa,0x8aeb,0x8af1,0x8b00,0x8adc,0x8ae7,
-0x8aee,0x8afe,0x8b01,0x8b02,0x8af7,0x8aed,0x8af3,0x8af6,
-0x8afc,0x8c6b,0x8c6d,0x8c93,0x8cf4,0x8e44,0x8e31,0x8e34,
-0x8e42,0x8e39,0x8e35,0x8f3b,0x8f2f,0x8f38,0x8f33,0x8fa8,
-0x8fa6,0x9075,0x9074,0x9078,0x9072,0x907c,0x907a,0x9134,
-0x9192,0x9320,0x9336,0x92f8,0x9333,0x932f,0x9322,0x92fc,
-0x932b,0x9304,0x931a,0x9310,0x9326,0x9321,0x9315,0x932e,
-0x9319,0x95bb,0x96a7,0x96a8,0x96aa,0x96d5,0x970e,0x9711,
-0x9716,0x970d,0x9713,0x970f,0x975b,0x975c,0x9766,0x9798,
-0x9830,0x9838,0x983b,0x9837,0x982d,0x9839,0x9824,0x9910,
-0x9928,0x991e,0x991b,0x9921,0x991a,0x99ed,0x99e2,0x99f1,
-0x9ab8,0x9abc,0x9afb,0x9aed,0x9b28,0x9b91,0x9d15,0x9d23,
-0x9d26,0x9d28,0x9d12,0x9d1b,0x9ed8,0x9ed4,0x9f8d,0x9f9c,
-0x512a,0x511f,0x5121,0x5132,0x52f5,0x568e,0x5680,0x5690,
-0x5685,0x5687,0x568f,0x58d5,0x58d3,0x58d1,0x58ce,0x5b30,
-0x5b2a,0x5b24,0x5b7a,0x5c37,0x5c68,0x5dbc,0x5dba,0x5dbd,
-0x5db8,0x5e6b,0x5f4c,0x5fbd,0x61c9,0x61c2,0x61c7,0x61e6,
-0x61cb,0x6232,0x6234,0x64ce,0x64ca,0x64d8,0x64e0,0x64f0,
-0x64e6,0x64ec,0x64f1,0x64e2,0x64ed,0x6582,0x6583,0x66d9,
-0x66d6,0x6a80,0x6a94,0x6a84,0x6aa2,0x6a9c,0x6adb,0x6aa3,
-0x6a7e,0x6a97,0x6a90,0x6aa0,0x6b5c,0x6bae,0x6bda,0x6c08,
-0x6fd8,0x6ff1,0x6fdf,0x6fe0,0x6fdb,0x6fe4,0x6feb,0x6fef,
-0x6f80,0x6fec,0x6fe1,0x6fe9,0x6fd5,0x6fee,0x6ff0,0x71e7,
-0x71df,0x71ee,0x71e6,0x71e5,0x71ed,0x71ec,0x71f4,0x71e0,
-0x7235,0x7246,0x7370,0x7372,0x74a9,0x74b0,0x74a6,0x74a8,
-0x7646,0x7642,0x764c,0x76ea,0x77b3,0x77aa,0x77b0,0x77ac,
-0x77a7,0x77ad,0x77ef,0x78f7,0x78fa,0x78f4,0x78ef,0x7901,
-0x79a7,0x79aa,0x7a57,0x7abf,0x7c07,0x7c0d,0x7bfe,0x7bf7,
-0x7c0c,0x7be0,0x7ce0,0x7cdc,0x7cde,0x7ce2,0x7cdf,0x7cd9,
-0x7cdd,0x7e2e,0x7e3e,0x7e46,0x7e37,0x7e32,0x7e43,0x7e2b,
-0x7e3d,0x7e31,0x7e45,0x7e41,0x7e34,0x7e39,0x7e48,0x7e35,
-0x7e3f,0x7e2f,0x7f44,0x7ff3,0x7ffc,0x8071,0x8072,0x8070,
-0x806f,0x8073,0x81c6,0x81c3,0x81ba,0x81c2,0x81c0,0x81bf,
-0x81bd,0x81c9,0x81be,0x81e8,0x8209,0x8271,0x85aa,0x8584,
-0x857e,0x859c,0x8591,0x8594,0x85af,0x859b,0x8587,0x85a8,
-0x858a,0x8667,0x87c0,0x87d1,0x87b3,0x87d2,0x87c6,0x87ab,
-0x87bb,0x87ba,0x87c8,0x87cb,0x893b,0x8936,0x8944,0x8938,
-0x893d,0x89ac,0x8b0e,0x8b17,0x8b19,0x8b1b,0x8b0a,0x8b20,
-0x8b1d,0x8b04,0x8b10,0x8c41,0x8c3f,0x8c73,0x8cfa,0x8cfd,
-0x8cfc,0x8cf8,0x8cfb,0x8da8,0x8e49,0x8e4b,0x8e48,0x8e4a,
-0x8f44,0x8f3e,0x8f42,0x8f45,0x8f3f,0x907f,0x907d,0x9084,
-0x9081,0x9082,0x9080,0x9139,0x91a3,0x919e,0x919c,0x934d,
-0x9382,0x9328,0x9375,0x934a,0x9365,0x934b,0x9318,0x937e,
-0x936c,0x935b,0x9370,0x935a,0x9354,0x95ca,0x95cb,0x95cc,
-0x95c8,0x95c6,0x96b1,0x96b8,0x96d6,0x971c,0x971e,0x97a0,
-0x97d3,0x9846,0x98b6,0x9935,0x9a01,0x99ff,0x9bae,0x9bab,
-0x9baa,0x9bad,0x9d3b,0x9d3f,0x9e8b,0x9ecf,0x9ede,0x9edc,
-0x9edd,0x9edb,0x9f3e,0x9f4b,0x53e2,0x5695,0x56ae,0x58d9,
-0x58d8,0x5b38,0x5f5d,0x61e3,0x6233,0x64f4,0x64f2,0x64fe,
-0x6506,0x64fa,0x64fb,0x64f7,0x65b7,0x66dc,0x6726,0x6ab3,
-0x6aac,0x6ac3,0x6abb,0x6ab8,0x6ac2,0x6aae,0x6aaf,0x6b5f,
-0x6b78,0x6baf,0x7009,0x700b,0x6ffe,0x7006,0x6ffa,0x7011,
-0x700f,0x71fb,0x71fc,0x71fe,0x71f8,0x7377,0x7375,0x74a7,
-0x74bf,0x7515,0x7656,0x7658,0x7652,0x77bd,0x77bf,0x77bb,
-0x77bc,0x790e,0x79ae,0x7a61,0x7a62,0x7a60,0x7ac4,0x7ac5,
-0x7c2b,0x7c27,0x7c2a,0x7c1e,0x7c23,0x7c21,0x7ce7,0x7e54,
-0x7e55,0x7e5e,0x7e5a,0x7e61,0x7e52,0x7e59,0x7f48,0x7ff9,
-0x7ffb,0x8077,0x8076,0x81cd,0x81cf,0x820a,0x85cf,0x85a9,
-0x85cd,0x85d0,0x85c9,0x85b0,0x85ba,0x85b9,0x85a6,0x87ef,
-0x87ec,0x87f2,0x87e0,0x8986,0x89b2,0x89f4,0x8b28,0x8b39,
-0x8b2c,0x8b2b,0x8c50,0x8d05,0x8e59,0x8e63,0x8e66,0x8e64,
-0x8e5f,0x8e55,0x8ec0,0x8f49,0x8f4d,0x9087,0x9083,0x9088,
-0x91ab,0x91ac,0x91d0,0x9394,0x938a,0x9396,0x93a2,0x93b3,
-0x93ae,0x93ac,0x93b0,0x9398,0x939a,0x9397,0x95d4,0x95d6,
-0x95d0,0x95d5,0x96e2,0x96dc,0x96d9,0x96db,0x96de,0x9724,
-0x97a3,0x97a6,0x97ad,0x97f9,0x984d,0x984f,0x984c,0x984e,
-0x9853,0x98ba,0x993e,0x993f,0x993d,0x992e,0x99a5,0x9a0e,
-0x9ac1,0x9b03,0x9b06,0x9b4f,0x9b4e,0x9b4d,0x9bca,0x9bc9,
-0x9bfd,0x9bc8,0x9bc0,0x9d51,0x9d5d,0x9d60,0x9ee0,0x9f15,
-0x9f2c,0x5133,0x56a5,0x58de,0x58df,0x58e2,0x5bf5,0x9f90,
-0x5eec,0x61f2,0x61f7,0x61f6,0x61f5,0x6500,0x650f,0x66e0,
-0x66dd,0x6ae5,0x6add,0x6ada,0x6ad3,0x701b,0x701f,0x7028,
-0x701a,0x701d,0x7015,0x7018,0x7206,0x720d,0x7258,0x72a2,
-0x7378,0x737a,0x74bd,0x74ca,0x74e3,0x7587,0x7586,0x765f,
-0x7661,0x77c7,0x7919,0x79b1,0x7a6b,0x7a69,0x7c3e,0x7c3f,
-0x7c38,0x7c3d,0x7c37,0x7c40,0x7e6b,0x7e6d,0x7e79,0x7e69,
-0x7e6a,0x7f85,0x7e73,0x7fb6,0x7fb9,0x7fb8,0x81d8,0x85e9,
-0x85dd,0x85ea,0x85d5,0x85e4,0x85e5,0x85f7,0x87fb,0x8805,
-0x880d,0x87f9,0x87fe,0x8960,0x895f,0x8956,0x895e,0x8b41,
-0x8b5c,0x8b58,0x8b49,0x8b5a,0x8b4e,0x8b4f,0x8b46,0x8b59,
-0x8d08,0x8d0a,0x8e7c,0x8e72,0x8e87,0x8e76,0x8e6c,0x8e7a,
-0x8e74,0x8f54,0x8f4e,0x8fad,0x908a,0x908b,0x91b1,0x91ae,
-0x93e1,0x93d1,0x93df,0x93c3,0x93c8,0x93dc,0x93dd,0x93d6,
-0x93e2,0x93cd,0x93d8,0x93e4,0x93d7,0x93e8,0x95dc,0x96b4,
-0x96e3,0x972a,0x9727,0x9761,0x97dc,0x97fb,0x985e,0x9858,
-0x985b,0x98bc,0x9945,0x9949,0x9a16,0x9a19,0x9b0d,0x9be8,
-0x9be7,0x9bd6,0x9bdb,0x9d89,0x9d61,0x9d72,0x9d6a,0x9d6c,
-0x9e92,0x9e97,0x9e93,0x9eb4,0x52f8,0x56a8,0x56b7,0x56b6,
-0x56b4,0x56bc,0x58e4,0x5b40,0x5b43,0x5b7d,0x5bf6,0x5dc9,
-0x61f8,0x61fa,0x6518,0x6514,0x6519,0x66e6,0x6727,0x6aec,
-0x703e,0x7030,0x7032,0x7210,0x737b,0x74cf,0x7662,0x7665,
-0x7926,0x792a,0x792c,0x792b,0x7ac7,0x7af6,0x7c4c,0x7c43,
-0x7c4d,0x7cef,0x7cf0,0x8fae,0x7e7d,0x7e7c,0x7e82,0x7f4c,
-0x8000,0x81da,0x8266,0x85fb,0x85f9,0x8611,0x85fa,0x8606,
-0x860b,0x8607,0x860a,0x8814,0x8815,0x8964,0x89ba,0x89f8,
-0x8b70,0x8b6c,0x8b66,0x8b6f,0x8b5f,0x8b6b,0x8d0f,0x8d0d,
-0x8e89,0x8e81,0x8e85,0x8e82,0x91b4,0x91cb,0x9418,0x9403,
-0x93fd,0x95e1,0x9730,0x98c4,0x9952,0x9951,0x99a8,0x9a2b,
-0x9a30,0x9a37,0x9a35,0x9c13,0x9c0d,0x9e79,0x9eb5,0x9ee8,
-0x9f2f,0x9f5f,0x9f63,0x9f61,0x5137,0x5138,0x56c1,0x56c0,
-0x56c2,0x5914,0x5c6c,0x5dcd,0x61fc,0x61fe,0x651d,0x651c,
-0x6595,0x66e9,0x6afb,0x6b04,0x6afa,0x6bb2,0x704c,0x721b,
-0x72a7,0x74d6,0x74d4,0x7669,0x77d3,0x7c50,0x7e8f,0x7e8c,
-0x7fbc,0x8617,0x862d,0x861a,0x8823,0x8822,0x8821,0x881f,
-0x896a,0x896c,0x89bd,0x8b74,0x8b77,0x8b7d,0x8d13,0x8e8a,
-0x8e8d,0x8e8b,0x8f5f,0x8faf,0x91ba,0x942e,0x9433,0x9435,
-0x943a,0x9438,0x9432,0x942b,0x95e2,0x9738,0x9739,0x9732,
-0x97ff,0x9867,0x9865,0x9957,0x9a45,0x9a43,0x9a40,0x9a3e,
-0x9acf,0x9b54,0x9b51,0x9c2d,0x9c25,0x9daf,0x9db4,0x9dc2,
-0x9db8,0x9e9d,0x9eef,0x9f19,0x9f5c,0x9f66,0x9f67,0x513c,
-0x513b,0x56c8,0x56ca,0x56c9,0x5b7f,0x5dd4,0x5dd2,0x5f4e,
-0x61ff,0x6524,0x6b0a,0x6b61,0x7051,0x7058,0x7380,0x74e4,
-0x758a,0x766e,0x766c,0x79b3,0x7c60,0x7c5f,0x807e,0x807d,
-0x81df,0x8972,0x896f,0x89fc,0x8b80,0x8d16,0x8d17,0x8e91,
-0x8e93,0x8f61,0x9148,0x9444,0x9451,0x9452,0x973d,0x973e,
-0x97c3,0x97c1,0x986b,0x9955,0x9a55,0x9a4d,0x9ad2,0x9b1a,
-0x9c49,0x9c31,0x9c3e,0x9c3b,0x9dd3,0x9dd7,0x9f34,0x9f6c,
-0x9f6a,0x9f94,0x56cc,0x5dd6,0x6200,0x6523,0x652b,0x652a,
-0x66ec,0x6b10,0x74da,0x7aca,0x7c64,0x7c63,0x7c65,0x7e93,
-0x7e96,0x7e94,0x81e2,0x8638,0x863f,0x8831,0x8b8a,0x9090,
-0x908f,0x9463,0x9460,0x9464,0x9768,0x986f,0x995c,0x9a5a,
-0x9a5b,0x9a57,0x9ad3,0x9ad4,0x9ad1,0x9c54,0x9c57,0x9c56,
-0x9de5,0x9e9f,0x9ef4,0x56d1,0x58e9,0x652c,0x705e,0x7671,
-0x7672,0x77d7,0x7f50,0x7f88,0x8836,0x8839,0x8862,0x8b93,
-0x8b92,0x8b96,0x8277,0x8d1b,0x91c0,0x946a,0x9742,0x9748,
-0x9744,0x97c6,0x9870,0x9a5f,0x9b22,0x9b58,0x9c5f,0x9df9,
-0x9dfa,0x9e7c,0x9e7d,0x9f07,0x9f77,0x9f72,0x5ef3,0x6b16,
-0x7063,0x7c6c,0x7c6e,0x883b,0x89c0,0x8ea1,0x91c1,0x9472,
-0x9470,0x9871,0x995e,0x9ad6,0x9b23,0x9ecc,0x7064,0x77da,
-0x8b9a,0x9477,0x97c9,0x9a62,0x9a65,0x7e9c,0x8b9c,0x8eaa,
-0x91c5,0x947d,0x947e,0x947c,0x9c77,0x9c78,0x9ef7,0x8c54,
-0x947f,0x9e1a,0x7228,0x9a6a,0x9b31,0x9e1b,0x9e1e,0x7c72,
-0xf6b1,0xf6b2,0xf6b3,0xf6b4,0xf6b5,0xf6b6,0xf6b7,0xf6b8,
-0xf6b9,0xf6ba,0xf6bb,0xf6bc,0xf6bd,0xf6be,0xf6bf,0xf6c0,
-0xf6c1,0xf6c2,0xf6c3,0xf6c4,0xf6c5,0xf6c6,0xf6c7,0xf6c8,
-0xf6c9,0xf6ca,0xf6cb,0xf6cc,0xf6cd,0xf6ce,0xf6cf,0xf6d0,
-0xf6d1,0xf6d2,0xf6d3,0xf6d4,0xf6d5,0xf6d6,0xf6d7,0xf6d8,
-0xf6d9,0xf6da,0xf6db,0xf6dc,0xf6dd,0xf6de,0xf6df,0xf6e0,
-0xf6e1,0xf6e2,0xf6e3,0xf6e4,0xf6e5,0xf6e6,0xf6e7,0xf6e8,
-0xf6e9,0xf6ea,0xf6eb,0xf6ec,0xf6ed,0xf6ee,0xf6ef,0xf6f0,
-0xf6f1,0xf6f2,0xf6f3,0xf6f4,0xf6f5,0xf6f6,0xf6f7,0xf6f8,
-0xf6f9,0xf6fa,0xf6fb,0xf6fc,0xf6fd,0xf6fe,0xf6ff,0xf700,
-0xf701,0xf702,0xf703,0xf704,0xf705,0xf706,0xf707,0xf708,
-0xf709,0xf70a,0xf70b,0xf70c,0xf70d,0xf70e,0xf70f,0xf710,
-0xf711,0xf712,0xf713,0xf714,0xf715,0xf716,0xf717,0xf718,
-0xf719,0xf71a,0xf71b,0xf71c,0xf71d,0xf71e,0xf71f,0xf720,
-0xf721,0xf722,0xf723,0xf724,0xf725,0xf726,0xf727,0xf728,
-0xf729,0xf72a,0xf72b,0xf72c,0xf72d,0xf72e,0xf72f,0xf730,
-0xf731,0xf732,0xf733,0xf734,0xf735,0xf736,0xf737,0xf738,
-0xf739,0xf73a,0xf73b,0xf73c,0xf73d,0xf73e,0xf73f,0xf740,
-0xf741,0xf742,0xf743,0xf744,0xf745,0xf746,0xf747,0xf748,
-0xf749,0xf74a,0xf74b,0xf74c,0xf74d,0xf74e,0xf74f,0xf750,
-0xf751,0xf752,0xf753,0xf754,0xf755,0xf756,0xf757,0xf758,
-0xf759,0xf75a,0xf75b,0xf75c,0xf75d,0xf75e,0xf75f,0xf760,
-0xf761,0xf762,0xf763,0xf764,0xf765,0xf766,0xf767,0xf768,
-0xf769,0xf76a,0xf76b,0xf76c,0xf76d,0xf76e,0xf76f,0xf770,
-0xf771,0xf772,0xf773,0xf774,0xf775,0xf776,0xf777,0xf778,
-0xf779,0xf77a,0xf77b,0xf77c,0xf77d,0xf77e,0xf77f,0xf780,
-0xf781,0xf782,0xf783,0xf784,0xf785,0xf786,0xf787,0xf788,
-0xf789,0xf78a,0xf78b,0xf78c,0xf78d,0xf78e,0xf78f,0xf790,
-0xf791,0xf792,0xf793,0xf794,0xf795,0xf796,0xf797,0xf798,
-0xf799,0xf79a,0xf79b,0xf79c,0xf79d,0xf79e,0xf79f,0xf7a0,
-0xf7a1,0xf7a2,0xf7a3,0xf7a4,0xf7a5,0xf7a6,0xf7a7,0xf7a8,
-0xf7a9,0xf7aa,0xf7ab,0xf7ac,0xf7ad,0xf7ae,0xf7af,0xf7b0,
-0xf7b1,0xf7b2,0xf7b3,0xf7b4,0xf7b5,0xf7b6,0xf7b7,0xf7b8,
-0xf7b9,0xf7ba,0xf7bb,0xf7bc,0xf7bd,0xf7be,0xf7bf,0xf7c0,
-0xf7c1,0xf7c2,0xf7c3,0xf7c4,0xf7c5,0xf7c6,0xf7c7,0xf7c8,
-0xf7c9,0xf7ca,0xf7cb,0xf7cc,0xf7cd,0xf7ce,0xf7cf,0xf7d0,
-0xf7d1,0xf7d2,0xf7d3,0xf7d4,0xf7d5,0xf7d6,0xf7d7,0xf7d8,
-0xf7d9,0xf7da,0xf7db,0xf7dc,0xf7dd,0xf7de,0xf7df,0xf7e0,
-0xf7e1,0xf7e2,0xf7e3,0xf7e4,0xf7e5,0xf7e6,0xf7e7,0xf7e8,
-0xf7e9,0xf7ea,0xf7eb,0xf7ec,0xf7ed,0xf7ee,0xf7ef,0xf7f0,
-0xf7f1,0xf7f2,0xf7f3,0xf7f4,0xf7f5,0xf7f6,0xf7f7,0xf7f8,
-0xf7f9,0xf7fa,0xf7fb,0xf7fc,0xf7fd,0xf7fe,0xf7ff,0xf800,
-0xf801,0xf802,0xf803,0xf804,0xf805,0xf806,0xf807,0xf808,
-0xf809,0xf80a,0xf80b,0xf80c,0xf80d,0xf80e,0xf80f,0xf810,
-0xf811,0xf812,0xf813,0xf814,0xf815,0xf816,0xf817,0xf818,
-0xf819,0xf81a,0xf81b,0xf81c,0xf81d,0xf81e,0xf81f,0xf820,
-0xf821,0xf822,0xf823,0xf824,0xf825,0xf826,0xf827,0xf828,
-0xf829,0xf82a,0xf82b,0xf82c,0xf82d,0xf82e,0xf82f,0xf830,
-0xf831,0xf832,0xf833,0xf834,0xf835,0xf836,0xf837,0xf838,
-0xf839,0xf83a,0xf83b,0xf83c,0xf83d,0xf83e,0xf83f,0xf840,
-0xf841,0xf842,0xf843,0xf844,0xf845,0xf846,0xf847,0xf848,
-0x4e42,0x4e5c,0x51f5,0x531a,0x5382,0x4e07,0x4e0c,0x4e47,
-0x4e8d,0x56d7,0xfa0c,0x5c6e,0x5f73,0x4e0f,0x5187,0x4e0e,
-0x4e2e,0x4e93,0x4ec2,0x4ec9,0x4ec8,0x5198,0x52fc,0x536c,
-0x53b9,0x5720,0x5903,0x592c,0x5c10,0x5dff,0x65e1,0x6bb3,
-0x6bcc,0x6c14,0x723f,0x4e31,0x4e3c,0x4ee8,0x4edc,0x4ee9,
-0x4ee1,0x4edd,0x4eda,0x520c,0x531c,0x534c,0x5722,0x5723,
-0x5917,0x592f,0x5b81,0x5b84,0x5c12,0x5c3b,0x5c74,0x5c73,
-0x5e04,0x5e80,0x5e82,0x5fc9,0x6209,0x6250,0x6c15,0x6c36,
-0x6c43,0x6c3f,0x6c3b,0x72ae,0x72b0,0x738a,0x79b8,0x808a,
-0x961e,0x4f0e,0x4f18,0x4f2c,0x4ef5,0x4f14,0x4ef1,0x4f00,
-0x4ef7,0x4f08,0x4f1d,0x4f02,0x4f05,0x4f22,0x4f13,0x4f04,
-0x4ef4,0x4f12,0x51b1,0x5213,0x5209,0x5210,0x52a6,0x5322,
-0x531f,0x534d,0x538a,0x5407,0x56e1,0x56df,0x572e,0x572a,
-0x5734,0x593c,0x5980,0x597c,0x5985,0x597b,0x597e,0x5977,
-0x597f,0x5b56,0x5c15,0x5c25,0x5c7c,0x5c7a,0x5c7b,0x5c7e,
-0x5ddf,0x5e75,0x5e84,0x5f02,0x5f1a,0x5f74,0x5fd5,0x5fd4,
-0x5fcf,0x625c,0x625e,0x6264,0x6261,0x6266,0x6262,0x6259,
-0x6260,0x625a,0x6265,0x65ef,0x65ee,0x673e,0x6739,0x6738,
-0x673b,0x673a,0x673f,0x673c,0x6733,0x6c18,0x6c46,0x6c52,
-0x6c5c,0x6c4f,0x6c4a,0x6c54,0x6c4b,0x6c4c,0x7071,0x725e,
-0x72b4,0x72b5,0x738e,0x752a,0x767f,0x7a75,0x7f51,0x8278,
-0x827c,0x8280,0x827d,0x827f,0x864d,0x897e,0x9099,0x9097,
-0x9098,0x909b,0x9094,0x9622,0x9624,0x9620,0x9623,0x4f56,
-0x4f3b,0x4f62,0x4f49,0x4f53,0x4f64,0x4f3e,0x4f67,0x4f52,
-0x4f5f,0x4f41,0x4f58,0x4f2d,0x4f33,0x4f3f,0x4f61,0x518f,
-0x51b9,0x521c,0x521e,0x5221,0x52ad,0x52ae,0x5309,0x5363,
-0x5372,0x538e,0x538f,0x5430,0x5437,0x542a,0x5454,0x5445,
-0x5419,0x541c,0x5425,0x5418,0x543d,0x544f,0x5441,0x5428,
-0x5424,0x5447,0x56ee,0x56e7,0x56e5,0x5741,0x5745,0x574c,
-0x5749,0x574b,0x5752,0x5906,0x5940,0x59a6,0x5998,0x59a0,
-0x5997,0x598e,0x59a2,0x5990,0x598f,0x59a7,0x59a1,0x5b8e,
-0x5b92,0x5c28,0x5c2a,0x5c8d,0x5c8f,0x5c88,0x5c8b,0x5c89,
-0x5c92,0x5c8a,0x5c86,0x5c93,0x5c95,0x5de0,0x5e0a,0x5e0e,
-0x5e8b,0x5e89,0x5e8c,0x5e88,0x5e8d,0x5f05,0x5f1d,0x5f78,
-0x5f76,0x5fd2,0x5fd1,0x5fd0,0x5fed,0x5fe8,0x5fee,0x5ff3,
-0x5fe1,0x5fe4,0x5fe3,0x5ffa,0x5fef,0x5ff7,0x5ffb,0x6000,
-0x5ff4,0x623a,0x6283,0x628c,0x628e,0x628f,0x6294,0x6287,
-0x6271,0x627b,0x627a,0x6270,0x6281,0x6288,0x6277,0x627d,
-0x6272,0x6274,0x6537,0x65f0,0x65f4,0x65f3,0x65f2,0x65f5,
-0x6745,0x6747,0x6759,0x6755,0x674c,0x6748,0x675d,0x674d,
-0x675a,0x674b,0x6bd0,0x6c19,0x6c1a,0x6c78,0x6c67,0x6c6b,
-0x6c84,0x6c8b,0x6c8f,0x6c71,0x6c6f,0x6c69,0x6c9a,0x6c6d,
-0x6c87,0x6c95,0x6c9c,0x6c66,0x6c73,0x6c65,0x6c7b,0x6c8e,
-0x7074,0x707a,0x7263,0x72bf,0x72bd,0x72c3,0x72c6,0x72c1,
-0x72ba,0x72c5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753a,
-0x7539,0x7594,0x7595,0x7681,0x793d,0x8034,0x8095,0x8099,
-0x8090,0x8092,0x809c,0x8290,0x828f,0x8285,0x828e,0x8291,
-0x8293,0x828a,0x8283,0x8284,0x8c78,0x8fc9,0x8fbf,0x909f,
-0x90a1,0x90a5,0x909e,0x90a7,0x90a0,0x9630,0x9628,0x962f,
-0x962d,0x4e33,0x4f98,0x4f7c,0x4f85,0x4f7d,0x4f80,0x4f87,
-0x4f76,0x4f74,0x4f89,0x4f84,0x4f77,0x4f4c,0x4f97,0x4f6a,
-0x4f9a,0x4f79,0x4f81,0x4f78,0x4f90,0x4f9c,0x4f94,0x4f9e,
-0x4f92,0x4f82,0x4f95,0x4f6b,0x4f6e,0x519e,0x51bc,0x51be,
-0x5235,0x5232,0x5233,0x5246,0x5231,0x52bc,0x530a,0x530b,
-0x533c,0x5392,0x5394,0x5487,0x547f,0x5481,0x5491,0x5482,
-0x5488,0x546b,0x547a,0x547e,0x5465,0x546c,0x5474,0x5466,
-0x548d,0x546f,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464,
-0x56f7,0x56f9,0x576f,0x5772,0x576d,0x576b,0x5771,0x5770,
-0x5776,0x5780,0x5775,0x577b,0x5773,0x5774,0x5762,0x5768,
-0x577d,0x590c,0x5945,0x59b5,0x59ba,0x59cf,0x59ce,0x59b2,
-0x59cc,0x59c1,0x59b6,0x59bc,0x59c3,0x59d6,0x59b1,0x59bd,
-0x59c0,0x59c8,0x59b4,0x59c7,0x5b62,0x5b65,0x5b93,0x5b95,
-0x5c44,0x5c47,0x5cae,0x5ca4,0x5ca0,0x5cb5,0x5caf,0x5ca8,
-0x5cac,0x5c9f,0x5ca3,0x5cad,0x5ca2,0x5caa,0x5ca7,0x5c9d,
-0x5ca5,0x5cb6,0x5cb0,0x5ca6,0x5e17,0x5e14,0x5e19,0x5f28,
-0x5f22,0x5f23,0x5f24,0x5f54,0x5f82,0x5f7e,0x5f7d,0x5fde,
-0x5fe5,0x602d,0x6026,0x6019,0x6032,0x600b,0x6034,0x600a,
-0x6017,0x6033,0x601a,0x601e,0x602c,0x6022,0x600d,0x6010,
-0x602e,0x6013,0x6011,0x600c,0x6009,0x601c,0x6214,0x623d,
-0x62ad,0x62b4,0x62d1,0x62be,0x62aa,0x62b6,0x62ca,0x62ae,
-0x62b3,0x62af,0x62bb,0x62a9,0x62b0,0x62b8,0x653d,0x65a8,
-0x65bb,0x6609,0x65fc,0x6604,0x6612,0x6608,0x65fb,0x6603,
-0x660b,0x660d,0x6605,0x65fd,0x6611,0x6610,0x66f6,0x670a,
-0x6785,0x676c,0x678e,0x6792,0x6776,0x677b,0x6798,0x6786,
-0x6784,0x6774,0x678d,0x678c,0x677a,0x679f,0x6791,0x6799,
-0x6783,0x677d,0x6781,0x6778,0x6779,0x6794,0x6b25,0x6b80,
-0x6b7e,0x6bde,0x6c1d,0x6c93,0x6cec,0x6ceb,0x6cee,0x6cd9,
-0x6cb6,0x6cd4,0x6cad,0x6ce7,0x6cb7,0x6cd0,0x6cc2,0x6cba,
-0x6cc3,0x6cc6,0x6ced,0x6cf2,0x6cd2,0x6cdd,0x6cb4,0x6c8a,
-0x6c9d,0x6c80,0x6cde,0x6cc0,0x6d30,0x6ccd,0x6cc7,0x6cb0,
-0x6cf9,0x6ccf,0x6ce9,0x6cd1,0x7094,0x7098,0x7085,0x7093,
-0x7086,0x7084,0x7091,0x7096,0x7082,0x709a,0x7083,0x726a,
-0x72d6,0x72cb,0x72d8,0x72c9,0x72dc,0x72d2,0x72d4,0x72da,
-0x72cc,0x72d1,0x73a4,0x73a1,0x73ad,0x73a6,0x73a2,0x73a0,
-0x73ac,0x739d,0x74dd,0x74e8,0x753f,0x7540,0x753e,0x758c,
-0x7598,0x76af,0x76f3,0x76f1,0x76f0,0x76f5,0x77f8,0x77fc,
-0x77f9,0x77fb,0x77fa,0x77f7,0x7942,0x793f,0x79c5,0x7a78,
-0x7a7b,0x7afb,0x7c75,0x7cfd,0x8035,0x808f,0x80ae,0x80a3,
-0x80b8,0x80b5,0x80ad,0x8220,0x82a0,0x82c0,0x82ab,0x829a,
-0x8298,0x829b,0x82b5,0x82a7,0x82ae,0x82bc,0x829e,0x82ba,
-0x82b4,0x82a8,0x82a1,0x82a9,0x82c2,0x82a4,0x82c3,0x82b6,
-0x82a2,0x8670,0x866f,0x866d,0x866e,0x8c56,0x8fd2,0x8fcb,
-0x8fd3,0x8fcd,0x8fd6,0x8fd5,0x8fd7,0x90b2,0x90b4,0x90af,
-0x90b3,0x90b0,0x9639,0x963d,0x963c,0x963a,0x9643,0x4fcd,
-0x4fc5,0x4fd3,0x4fb2,0x4fc9,0x4fcb,0x4fc1,0x4fd4,0x4fdc,
-0x4fd9,0x4fbb,0x4fb3,0x4fdb,0x4fc7,0x4fd6,0x4fba,0x4fc0,
-0x4fb9,0x4fec,0x5244,0x5249,0x52c0,0x52c2,0x533d,0x537c,
-0x5397,0x5396,0x5399,0x5398,0x54ba,0x54a1,0x54ad,0x54a5,
-0x54cf,0x54c3,0x830d,0x54b7,0x54ae,0x54d6,0x54b6,0x54c5,
-0x54c6,0x54a0,0x5470,0x54bc,0x54a2,0x54be,0x5472,0x54de,
-0x54b0,0x57b5,0x579e,0x579f,0x57a4,0x578c,0x5797,0x579d,
-0x579b,0x5794,0x5798,0x578f,0x5799,0x57a5,0x579a,0x5795,
-0x58f4,0x590d,0x5953,0x59e1,0x59de,0x59ee,0x5a00,0x59f1,
-0x59dd,0x59fa,0x59fd,0x59fc,0x59f6,0x59e4,0x59f2,0x59f7,
-0x59db,0x59e9,0x59f3,0x59f5,0x59e0,0x59fe,0x59f4,0x59ed,
-0x5ba8,0x5c4c,0x5cd0,0x5cd8,0x5ccc,0x5cd7,0x5ccb,0x5cdb,
-0x5cde,0x5cda,0x5cc9,0x5cc7,0x5cca,0x5cd6,0x5cd3,0x5cd4,
-0x5ccf,0x5cc8,0x5cc6,0x5cce,0x5cdf,0x5cf8,0x5df9,0x5e21,
-0x5e22,0x5e23,0x5e20,0x5e24,0x5eb0,0x5ea4,0x5ea2,0x5e9b,
-0x5ea3,0x5ea5,0x5f07,0x5f2e,0x5f56,0x5f86,0x6037,0x6039,
-0x6054,0x6072,0x605e,0x6045,0x6053,0x6047,0x6049,0x605b,
-0x604c,0x6040,0x6042,0x605f,0x6024,0x6044,0x6058,0x6066,
-0x606e,0x6242,0x6243,0x62cf,0x630d,0x630b,0x62f5,0x630e,
-0x6303,0x62eb,0x62f9,0x630f,0x630c,0x62f8,0x62f6,0x6300,
-0x6313,0x6314,0x62fa,0x6315,0x62fb,0x62f0,0x6541,0x6543,
-0x65aa,0x65bf,0x6636,0x6621,0x6632,0x6635,0x661c,0x6626,
-0x6622,0x6633,0x662b,0x663a,0x661d,0x6634,0x6639,0x662e,
-0x670f,0x6710,0x67c1,0x67f2,0x67c8,0x67ba,0x67dc,0x67bb,
-0x67f8,0x67d8,0x67c0,0x67b7,0x67c5,0x67eb,0x67e4,0x67df,
-0x67b5,0x67cd,0x67b3,0x67f7,0x67f6,0x67ee,0x67e3,0x67c2,
-0x67b9,0x67ce,0x67e7,0x67f0,0x67b2,0x67fc,0x67c6,0x67ed,
-0x67cc,0x67ae,0x67e6,0x67db,0x67fa,0x67c9,0x67ca,0x67c3,
-0x67ea,0x67cb,0x6b28,0x6b82,0x6b84,0x6bb6,0x6bd6,0x6bd8,
-0x6be0,0x6c20,0x6c21,0x6d28,0x6d34,0x6d2d,0x6d1f,0x6d3c,
-0x6d3f,0x6d12,0x6d0a,0x6cda,0x6d33,0x6d04,0x6d19,0x6d3a,
-0x6d1a,0x6d11,0x6d00,0x6d1d,0x6d42,0x6d01,0x6d18,0x6d37,
-0x6d03,0x6d0f,0x6d40,0x6d07,0x6d20,0x6d2c,0x6d08,0x6d22,
-0x6d09,0x6d10,0x70b7,0x709f,0x70be,0x70b1,0x70b0,0x70a1,
-0x70b4,0x70b5,0x70a9,0x7241,0x7249,0x724a,0x726c,0x7270,
-0x7273,0x726e,0x72ca,0x72e4,0x72e8,0x72eb,0x72df,0x72ea,
-0x72e6,0x72e3,0x7385,0x73cc,0x73c2,0x73c8,0x73c5,0x73b9,
-0x73b6,0x73b5,0x73b4,0x73eb,0x73bf,0x73c7,0x73be,0x73c3,
-0x73c6,0x73b8,0x73cb,0x74ec,0x74ee,0x752e,0x7547,0x7548,
-0x75a7,0x75aa,0x7679,0x76c4,0x7708,0x7703,0x7704,0x7705,
-0x770a,0x76f7,0x76fb,0x76fa,0x77e7,0x77e8,0x7806,0x7811,
-0x7812,0x7805,0x7810,0x780f,0x780e,0x7809,0x7803,0x7813,
-0x794a,0x794c,0x794b,0x7945,0x7944,0x79d5,0x79cd,0x79cf,
-0x79d6,0x79ce,0x7a80,0x7a7e,0x7ad1,0x7b00,0x7b01,0x7c7a,
-0x7c78,0x7c79,0x7c7f,0x7c80,0x7c81,0x7d03,0x7d08,0x7d01,
-0x7f58,0x7f91,0x7f8d,0x7fbe,0x8007,0x800e,0x800f,0x8014,
-0x8037,0x80d8,0x80c7,0x80e0,0x80d1,0x80c8,0x80c2,0x80d0,
-0x80c5,0x80e3,0x80d9,0x80dc,0x80ca,0x80d5,0x80c9,0x80cf,
-0x80d7,0x80e6,0x80cd,0x81ff,0x8221,0x8294,0x82d9,0x82fe,
-0x82f9,0x8307,0x82e8,0x8300,0x82d5,0x833a,0x82eb,0x82d6,
-0x82f4,0x82ec,0x82e1,0x82f2,0x82f5,0x830c,0x82fb,0x82f6,
-0x82f0,0x82ea,0x82e4,0x82e0,0x82fa,0x82f3,0x82ed,0x8677,
-0x8674,0x867c,0x8673,0x8841,0x884e,0x8867,0x886a,0x8869,
-0x89d3,0x8a04,0x8a07,0x8d72,0x8fe3,0x8fe1,0x8fee,0x8fe0,
-0x90f1,0x90bd,0x90bf,0x90d5,0x90c5,0x90be,0x90c7,0x90cb,
-0x90c8,0x91d4,0x91d3,0x9654,0x964f,0x9651,0x9653,0x964a,
-0x964e,0x501e,0x5005,0x5007,0x5013,0x5022,0x5030,0x501b,
-0x4ff5,0x4ff4,0x5033,0x5037,0x502c,0x4ff6,0x4ff7,0x5017,
-0x501c,0x5020,0x5027,0x5035,0x502f,0x5031,0x500e,0x515a,
-0x5194,0x5193,0x51ca,0x51c4,0x51c5,0x51c8,0x51ce,0x5261,
-0x525a,0x5252,0x525e,0x525f,0x5255,0x5262,0x52cd,0x530e,
-0x539e,0x5526,0x54e2,0x5517,0x5512,0x54e7,0x54f3,0x54e4,
-0x551a,0x54ff,0x5504,0x5508,0x54eb,0x5511,0x5505,0x54f1,
-0x550a,0x54fb,0x54f7,0x54f8,0x54e0,0x550e,0x5503,0x550b,
-0x5701,0x5702,0x57cc,0x5832,0x57d5,0x57d2,0x57ba,0x57c6,
-0x57bd,0x57bc,0x57b8,0x57b6,0x57bf,0x57c7,0x57d0,0x57b9,
-0x57c1,0x590e,0x594a,0x5a19,0x5a16,0x5a2d,0x5a2e,0x5a15,
-0x5a0f,0x5a17,0x5a0a,0x5a1e,0x5a33,0x5b6c,0x5ba7,0x5bad,
-0x5bac,0x5c03,0x5c56,0x5c54,0x5cec,0x5cff,0x5cee,0x5cf1,
-0x5cf7,0x5d00,0x5cf9,0x5e29,0x5e28,0x5ea8,0x5eae,0x5eaa,
-0x5eac,0x5f33,0x5f30,0x5f67,0x605d,0x605a,0x6067,0x6041,
-0x60a2,0x6088,0x6080,0x6092,0x6081,0x609d,0x6083,0x6095,
-0x609b,0x6097,0x6087,0x609c,0x608e,0x6219,0x6246,0x62f2,
-0x6310,0x6356,0x632c,0x6344,0x6345,0x6336,0x6343,0x63e4,
-0x6339,0x634b,0x634a,0x633c,0x6329,0x6341,0x6334,0x6358,
-0x6354,0x6359,0x632d,0x6347,0x6333,0x635a,0x6351,0x6338,
-0x6357,0x6340,0x6348,0x654a,0x6546,0x65c6,0x65c3,0x65c4,
-0x65c2,0x664a,0x665f,0x6647,0x6651,0x6712,0x6713,0x681f,
-0x681a,0x6849,0x6832,0x6833,0x683b,0x684b,0x684f,0x6816,
-0x6831,0x681c,0x6835,0x682b,0x682d,0x682f,0x684e,0x6844,
-0x6834,0x681d,0x6812,0x6814,0x6826,0x6828,0x682e,0x684d,
-0x683a,0x6825,0x6820,0x6b2c,0x6b2f,0x6b2d,0x6b31,0x6b34,
-0x6b6d,0x8082,0x6b88,0x6be6,0x6be4,0x6be8,0x6be3,0x6be2,
-0x6be7,0x6c25,0x6d7a,0x6d63,0x6d64,0x6d76,0x6d0d,0x6d61,
-0x6d92,0x6d58,0x6d62,0x6d6d,0x6d6f,0x6d91,0x6d8d,0x6def,
-0x6d7f,0x6d86,0x6d5e,0x6d67,0x6d60,0x6d97,0x6d70,0x6d7c,
-0x6d5f,0x6d82,0x6d98,0x6d2f,0x6d68,0x6d8b,0x6d7e,0x6d80,
-0x6d84,0x6d16,0x6d83,0x6d7b,0x6d7d,0x6d75,0x6d90,0x70dc,
-0x70d3,0x70d1,0x70dd,0x70cb,0x7f39,0x70e2,0x70d7,0x70d2,
-0x70de,0x70e0,0x70d4,0x70cd,0x70c5,0x70c6,0x70c7,0x70da,
-0x70ce,0x70e1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72fa,
-0x72f4,0x72fe,0x72f6,0x72f3,0x72fb,0x7301,0x73d3,0x73d9,
-0x73e5,0x73d6,0x73bc,0x73e7,0x73e3,0x73e9,0x73dc,0x73d2,
-0x73db,0x73d4,0x73dd,0x73da,0x73d7,0x73d8,0x73e8,0x74de,
-0x74df,0x74f4,0x74f5,0x7521,0x755b,0x755f,0x75b0,0x75c1,
-0x75bb,0x75c4,0x75c0,0x75bf,0x75b6,0x75ba,0x768a,0x76c9,
-0x771d,0x771b,0x7710,0x7713,0x7712,0x7723,0x7711,0x7715,
-0x7719,0x771a,0x7722,0x7727,0x7823,0x782c,0x7822,0x7835,
-0x782f,0x7828,0x782e,0x782b,0x7821,0x7829,0x7833,0x782a,
-0x7831,0x7954,0x795b,0x794f,0x795c,0x7953,0x7952,0x7951,
-0x79eb,0x79ec,0x79e0,0x79ee,0x79ed,0x79ea,0x79dc,0x79de,
-0x79dd,0x7a86,0x7a89,0x7a85,0x7a8b,0x7a8c,0x7a8a,0x7a87,
-0x7ad8,0x7b10,0x7b04,0x7b13,0x7b05,0x7b0f,0x7b08,0x7b0a,
-0x7b0e,0x7b09,0x7b12,0x7c84,0x7c91,0x7c8a,0x7c8c,0x7c88,
-0x7c8d,0x7c85,0x7d1e,0x7d1d,0x7d11,0x7d0e,0x7d18,0x7d16,
-0x7d13,0x7d1f,0x7d12,0x7d0f,0x7d0c,0x7f5c,0x7f61,0x7f5e,
-0x7f60,0x7f5d,0x7f5b,0x7f96,0x7f92,0x7fc3,0x7fc2,0x7fc0,
-0x8016,0x803e,0x8039,0x80fa,0x80f2,0x80f9,0x80f5,0x8101,
-0x80fb,0x8100,0x8201,0x822f,0x8225,0x8333,0x832d,0x8344,
-0x8319,0x8351,0x8325,0x8356,0x833f,0x8341,0x8326,0x831c,
-0x8322,0x8342,0x834e,0x831b,0x832a,0x8308,0x833c,0x834d,
-0x8316,0x8324,0x8320,0x8337,0x832f,0x8329,0x8347,0x8345,
-0x834c,0x8353,0x831e,0x832c,0x834b,0x8327,0x8348,0x8653,
-0x8652,0x86a2,0x86a8,0x8696,0x868d,0x8691,0x869e,0x8687,
-0x8697,0x8686,0x868b,0x869a,0x8685,0x86a5,0x8699,0x86a1,
-0x86a7,0x8695,0x8698,0x868e,0x869d,0x8690,0x8694,0x8843,
-0x8844,0x886d,0x8875,0x8876,0x8872,0x8880,0x8871,0x887f,
-0x886f,0x8883,0x887e,0x8874,0x887c,0x8a12,0x8c47,0x8c57,
-0x8c7b,0x8ca4,0x8ca3,0x8d76,0x8d78,0x8db5,0x8db7,0x8db6,
-0x8ed1,0x8ed3,0x8ffe,0x8ff5,0x9002,0x8fff,0x8ffb,0x9004,
-0x8ffc,0x8ff6,0x90d6,0x90e0,0x90d9,0x90da,0x90e3,0x90df,
-0x90e5,0x90d8,0x90db,0x90d7,0x90dc,0x90e4,0x9150,0x914e,
-0x914f,0x91d5,0x91e2,0x91da,0x965c,0x965f,0x96bc,0x98e3,
-0x9adf,0x9b2f,0x4e7f,0x5070,0x506a,0x5061,0x505e,0x5060,
-0x5053,0x504b,0x505d,0x5072,0x5048,0x504d,0x5041,0x505b,
-0x504a,0x5062,0x5015,0x5045,0x505f,0x5069,0x506b,0x5063,
-0x5064,0x5046,0x5040,0x506e,0x5073,0x5057,0x5051,0x51d0,
-0x526b,0x526d,0x526c,0x526e,0x52d6,0x52d3,0x532d,0x539c,
-0x5575,0x5576,0x553c,0x554d,0x5550,0x5534,0x552a,0x5551,
-0x5562,0x5536,0x5535,0x5530,0x5552,0x5545,0x550c,0x5532,
-0x5565,0x554e,0x5539,0x5548,0x552d,0x553b,0x5540,0x554b,
-0x570a,0x5707,0x57fb,0x5814,0x57e2,0x57f6,0x57dc,0x57f4,
-0x5800,0x57ed,0x57fd,0x5808,0x57f8,0x580b,0x57f3,0x57cf,
-0x5807,0x57ee,0x57e3,0x57f2,0x57e5,0x57ec,0x57e1,0x580e,
-0x57fc,0x5810,0x57e7,0x5801,0x580c,0x57f1,0x57e9,0x57f0,
-0x580d,0x5804,0x595c,0x5a60,0x5a58,0x5a55,0x5a67,0x5a5e,
-0x5a38,0x5a35,0x5a6d,0x5a50,0x5a5f,0x5a65,0x5a6c,0x5a53,
-0x5a64,0x5a57,0x5a43,0x5a5d,0x5a52,0x5a44,0x5a5b,0x5a48,
-0x5a8e,0x5a3e,0x5a4d,0x5a39,0x5a4c,0x5a70,0x5a69,0x5a47,
-0x5a51,0x5a56,0x5a42,0x5a5c,0x5b72,0x5b6e,0x5bc1,0x5bc0,
-0x5c59,0x5d1e,0x5d0b,0x5d1d,0x5d1a,0x5d20,0x5d0c,0x5d28,
-0x5d0d,0x5d26,0x5d25,0x5d0f,0x5d30,0x5d12,0x5d23,0x5d1f,
-0x5d2e,0x5e3e,0x5e34,0x5eb1,0x5eb4,0x5eb9,0x5eb2,0x5eb3,
-0x5f36,0x5f38,0x5f9b,0x5f96,0x5f9f,0x608a,0x6090,0x6086,
-0x60be,0x60b0,0x60ba,0x60d3,0x60d4,0x60cf,0x60e4,0x60d9,
-0x60dd,0x60c8,0x60b1,0x60db,0x60b7,0x60ca,0x60bf,0x60c3,
-0x60cd,0x60c0,0x6332,0x6365,0x638a,0x6382,0x637d,0x63bd,
-0x639e,0x63ad,0x639d,0x6397,0x63ab,0x638e,0x636f,0x6387,
-0x6390,0x636e,0x63af,0x6375,0x639c,0x636d,0x63ae,0x637c,
-0x63a4,0x633b,0x639f,0x6378,0x6385,0x6381,0x6391,0x638d,
-0x6370,0x6553,0x65cd,0x6665,0x6661,0x665b,0x6659,0x665c,
-0x6662,0x6718,0x6879,0x6887,0x6890,0x689c,0x686d,0x686e,
-0x68ae,0x68ab,0x6956,0x686f,0x68a3,0x68ac,0x68a9,0x6875,
-0x6874,0x68b2,0x688f,0x6877,0x6892,0x687c,0x686b,0x6872,
-0x68aa,0x6880,0x6871,0x687e,0x689b,0x6896,0x688b,0x68a0,
-0x6889,0x68a4,0x6878,0x687b,0x6891,0x688c,0x688a,0x687d,
-0x6b36,0x6b33,0x6b37,0x6b38,0x6b91,0x6b8f,0x6b8d,0x6b8e,
-0x6b8c,0x6c2a,0x6dc0,0x6dab,0x6db4,0x6db3,0x6e74,0x6dac,
-0x6de9,0x6de2,0x6db7,0x6df6,0x6dd4,0x6e00,0x6dc8,0x6de0,
-0x6ddf,0x6dd6,0x6dbe,0x6de5,0x6ddc,0x6ddd,0x6ddb,0x6df4,
-0x6dca,0x6dbd,0x6ded,0x6df0,0x6dba,0x6dd5,0x6dc2,0x6dcf,
-0x6dc9,0x6dd0,0x6df2,0x6dd3,0x6dfd,0x6dd7,0x6dcd,0x6de3,
-0x6dbb,0x70fa,0x710d,0x70f7,0x7117,0x70f4,0x710c,0x70f0,
-0x7104,0x70f3,0x7110,0x70fc,0x70ff,0x7106,0x7113,0x7100,
-0x70f8,0x70f6,0x710b,0x7102,0x710e,0x727e,0x727b,0x727c,
-0x727f,0x731d,0x7317,0x7307,0x7311,0x7318,0x730a,0x7308,
-0x72ff,0x730f,0x731e,0x7388,0x73f6,0x73f8,0x73f5,0x7404,
-0x7401,0x73fd,0x7407,0x7400,0x73fa,0x73fc,0x73ff,0x740c,
-0x740b,0x73f4,0x7408,0x7564,0x7563,0x75ce,0x75d2,0x75cf,
-0x75cb,0x75cc,0x75d1,0x75d0,0x768f,0x7689,0x76d3,0x7739,
-0x772f,0x772d,0x7731,0x7732,0x7734,0x7733,0x773d,0x7725,
-0x773b,0x7735,0x7848,0x7852,0x7849,0x784d,0x784a,0x784c,
-0x7826,0x7845,0x7850,0x7964,0x7967,0x7969,0x796a,0x7963,
-0x796b,0x7961,0x79bb,0x79fa,0x79f8,0x79f6,0x79f7,0x7a8f,
-0x7a94,0x7a90,0x7b35,0x7b47,0x7b34,0x7b25,0x7b30,0x7b22,
-0x7b24,0x7b33,0x7b18,0x7b2a,0x7b1d,0x7b31,0x7b2b,0x7b2d,
-0x7b2f,0x7b32,0x7b38,0x7b1a,0x7b23,0x7c94,0x7c98,0x7c96,
-0x7ca3,0x7d35,0x7d3d,0x7d38,0x7d36,0x7d3a,0x7d45,0x7d2c,
-0x7d29,0x7d41,0x7d47,0x7d3e,0x7d3f,0x7d4a,0x7d3b,0x7d28,
-0x7f63,0x7f95,0x7f9c,0x7f9d,0x7f9b,0x7fca,0x7fcb,0x7fcd,
-0x7fd0,0x7fd1,0x7fc7,0x7fcf,0x7fc9,0x801f,0x801e,0x801b,
-0x8047,0x8043,0x8048,0x8118,0x8125,0x8119,0x811b,0x812d,
-0x811f,0x812c,0x811e,0x8121,0x8115,0x8127,0x811d,0x8122,
-0x8211,0x8238,0x8233,0x823a,0x8234,0x8232,0x8274,0x8390,
-0x83a3,0x83a8,0x838d,0x837a,0x8373,0x83a4,0x8374,0x838f,
-0x8381,0x8395,0x8399,0x8375,0x8394,0x83a9,0x837d,0x8383,
-0x838c,0x839d,0x839b,0x83aa,0x838b,0x837e,0x83a5,0x83af,
-0x8388,0x8397,0x83b0,0x837f,0x83a6,0x8387,0x83ae,0x8376,
-0x839a,0x8659,0x8656,0x86bf,0x86b7,0x86c2,0x86c1,0x86c5,
-0x86ba,0x86b0,0x86c8,0x86b9,0x86b3,0x86b8,0x86cc,0x86b4,
-0x86bb,0x86bc,0x86c3,0x86bd,0x86be,0x8852,0x8889,0x8895,
-0x88a8,0x88a2,0x88aa,0x889a,0x8891,0x88a1,0x889f,0x8898,
-0x88a7,0x8899,0x889b,0x8897,0x88a4,0x88ac,0x888c,0x8893,
-0x888e,0x8982,0x89d6,0x89d9,0x89d5,0x8a30,0x8a27,0x8a2c,
-0x8a1e,0x8c39,0x8c3b,0x8c5c,0x8c5d,0x8c7d,0x8ca5,0x8d7d,
-0x8d7b,0x8d79,0x8dbc,0x8dc2,0x8db9,0x8dbf,0x8dc1,0x8ed8,
-0x8ede,0x8edd,0x8edc,0x8ed7,0x8ee0,0x8ee1,0x9024,0x900b,
-0x9011,0x901c,0x900c,0x9021,0x90ef,0x90ea,0x90f0,0x90f4,
-0x90f2,0x90f3,0x90d4,0x90eb,0x90ec,0x90e9,0x9156,0x9158,
-0x915a,0x9153,0x9155,0x91ec,0x91f4,0x91f1,0x91f3,0x91f8,
-0x91e4,0x91f9,0x91ea,0x91eb,0x91f7,0x91e8,0x91ee,0x957a,
-0x9586,0x9588,0x967c,0x966d,0x966b,0x9671,0x966f,0x96bf,
-0x976a,0x9804,0x98e5,0x9997,0x509b,0x5095,0x5094,0x509e,
-0x508b,0x50a3,0x5083,0x508c,0x508e,0x509d,0x5068,0x509c,
-0x5092,0x5082,0x5087,0x515f,0x51d4,0x5312,0x5311,0x53a4,
-0x53a7,0x5591,0x55a8,0x55a5,0x55ad,0x5577,0x5645,0x55a2,
-0x5593,0x5588,0x558f,0x55b5,0x5581,0x55a3,0x5592,0x55a4,
-0x557d,0x558c,0x55a6,0x557f,0x5595,0x55a1,0x558e,0x570c,
-0x5829,0x5837,0x5819,0x581e,0x5827,0x5823,0x5828,0x57f5,
-0x5848,0x5825,0x581c,0x581b,0x5833,0x583f,0x5836,0x582e,
-0x5839,0x5838,0x582d,0x582c,0x583b,0x5961,0x5aaf,0x5a94,
-0x5a9f,0x5a7a,0x5aa2,0x5a9e,0x5a78,0x5aa6,0x5a7c,0x5aa5,
-0x5aac,0x5a95,0x5aae,0x5a37,0x5a84,0x5a8a,0x5a97,0x5a83,
-0x5a8b,0x5aa9,0x5a7b,0x5a7d,0x5a8c,0x5a9c,0x5a8f,0x5a93,
-0x5a9d,0x5bea,0x5bcd,0x5bcb,0x5bd4,0x5bd1,0x5bca,0x5bce,
-0x5c0c,0x5c30,0x5d37,0x5d43,0x5d6b,0x5d41,0x5d4b,0x5d3f,
-0x5d35,0x5d51,0x5d4e,0x5d55,0x5d33,0x5d3a,0x5d52,0x5d3d,
-0x5d31,0x5d59,0x5d42,0x5d39,0x5d49,0x5d38,0x5d3c,0x5d32,
-0x5d36,0x5d40,0x5d45,0x5e44,0x5e41,0x5f58,0x5fa6,0x5fa5,
-0x5fab,0x60c9,0x60b9,0x60cc,0x60e2,0x60ce,0x60c4,0x6114,
-0x60f2,0x610a,0x6116,0x6105,0x60f5,0x6113,0x60f8,0x60fc,
-0x60fe,0x60c1,0x6103,0x6118,0x611d,0x6110,0x60ff,0x6104,
-0x610b,0x624a,0x6394,0x63b1,0x63b0,0x63ce,0x63e5,0x63e8,
-0x63ef,0x63c3,0x649d,0x63f3,0x63ca,0x63e0,0x63f6,0x63d5,
-0x63f2,0x63f5,0x6461,0x63df,0x63be,0x63dd,0x63dc,0x63c4,
-0x63d8,0x63d3,0x63c2,0x63c7,0x63cc,0x63cb,0x63c8,0x63f0,
-0x63d7,0x63d9,0x6532,0x6567,0x656a,0x6564,0x655c,0x6568,
-0x6565,0x658c,0x659d,0x659e,0x65ae,0x65d0,0x65d2,0x667c,
-0x666c,0x667b,0x6680,0x6671,0x6679,0x666a,0x6672,0x6701,
-0x690c,0x68d3,0x6904,0x68dc,0x692a,0x68ec,0x68ea,0x68f1,
-0x690f,0x68d6,0x68f7,0x68eb,0x68e4,0x68f6,0x6913,0x6910,
-0x68f3,0x68e1,0x6907,0x68cc,0x6908,0x6970,0x68b4,0x6911,
-0x68ef,0x68c6,0x6914,0x68f8,0x68d0,0x68fd,0x68fc,0x68e8,
-0x690b,0x690a,0x6917,0x68ce,0x68c8,0x68dd,0x68de,0x68e6,
-0x68f4,0x68d1,0x6906,0x68d4,0x68e9,0x6915,0x6925,0x68c7,
-0x6b39,0x6b3b,0x6b3f,0x6b3c,0x6b94,0x6b97,0x6b99,0x6b95,
-0x6bbd,0x6bf0,0x6bf2,0x6bf3,0x6c30,0x6dfc,0x6e46,0x6e47,
-0x6e1f,0x6e49,0x6e88,0x6e3c,0x6e3d,0x6e45,0x6e62,0x6e2b,
-0x6e3f,0x6e41,0x6e5d,0x6e73,0x6e1c,0x6e33,0x6e4b,0x6e40,
-0x6e51,0x6e3b,0x6e03,0x6e2e,0x6e5e,0x6e68,0x6e5c,0x6e61,
-0x6e31,0x6e28,0x6e60,0x6e71,0x6e6b,0x6e39,0x6e22,0x6e30,
-0x6e53,0x6e65,0x6e27,0x6e78,0x6e64,0x6e77,0x6e55,0x6e79,
-0x6e52,0x6e66,0x6e35,0x6e36,0x6e5a,0x7120,0x711e,0x712f,
-0x70fb,0x712e,0x7131,0x7123,0x7125,0x7122,0x7132,0x711f,
-0x7128,0x713a,0x711b,0x724b,0x725a,0x7288,0x7289,0x7286,
-0x7285,0x728b,0x7312,0x730b,0x7330,0x7322,0x7331,0x7333,
-0x7327,0x7332,0x732d,0x7326,0x7323,0x7335,0x730c,0x742e,
-0x742c,0x7430,0x742b,0x7416,0x741a,0x7421,0x742d,0x7431,
-0x7424,0x7423,0x741d,0x7429,0x7420,0x7432,0x74fb,0x752f,
-0x756f,0x756c,0x75e7,0x75da,0x75e1,0x75e6,0x75dd,0x75df,
-0x75e4,0x75d7,0x7695,0x7692,0x76da,0x7746,0x7747,0x7744,
-0x774d,0x7745,0x774a,0x774e,0x774b,0x774c,0x77de,0x77ec,
-0x7860,0x7864,0x7865,0x785c,0x786d,0x7871,0x786a,0x786e,
-0x7870,0x7869,0x7868,0x785e,0x7862,0x7974,0x7973,0x7972,
-0x7970,0x7a02,0x7a0a,0x7a03,0x7a0c,0x7a04,0x7a99,0x7ae6,
-0x7ae4,0x7b4a,0x7b3b,0x7b44,0x7b48,0x7b4c,0x7b4e,0x7b40,
-0x7b58,0x7b45,0x7ca2,0x7c9e,0x7ca8,0x7ca1,0x7d58,0x7d6f,
-0x7d63,0x7d53,0x7d56,0x7d67,0x7d6a,0x7d4f,0x7d6d,0x7d5c,
-0x7d6b,0x7d52,0x7d54,0x7d69,0x7d51,0x7d5f,0x7d4e,0x7f3e,
-0x7f3f,0x7f65,0x7f66,0x7fa2,0x7fa0,0x7fa1,0x7fd7,0x8051,
-0x804f,0x8050,0x80fe,0x80d4,0x8143,0x814a,0x8152,0x814f,
-0x8147,0x813d,0x814d,0x813a,0x81e6,0x81ee,0x81f7,0x81f8,
-0x81f9,0x8204,0x823c,0x823d,0x823f,0x8275,0x833b,0x83cf,
-0x83f9,0x8423,0x83c0,0x83e8,0x8412,0x83e7,0x83e4,0x83fc,
-0x83f6,0x8410,0x83c6,0x83c8,0x83eb,0x83e3,0x83bf,0x8401,
-0x83dd,0x83e5,0x83d8,0x83ff,0x83e1,0x83cb,0x83ce,0x83d6,
-0x83f5,0x83c9,0x8409,0x840f,0x83de,0x8411,0x8406,0x83c2,
-0x83f3,0x83d5,0x83fa,0x83c7,0x83d1,0x83ea,0x8413,0x83c3,
-0x83ec,0x83ee,0x83c4,0x83fb,0x83d7,0x83e2,0x841b,0x83db,
-0x83fe,0x86d8,0x86e2,0x86e6,0x86d3,0x86e3,0x86da,0x86ea,
-0x86dd,0x86eb,0x86dc,0x86ec,0x86e9,0x86d7,0x86e8,0x86d1,
-0x8848,0x8856,0x8855,0x88ba,0x88d7,0x88b9,0x88b8,0x88c0,
-0x88be,0x88b6,0x88bc,0x88b7,0x88bd,0x88b2,0x8901,0x88c9,
-0x8995,0x8998,0x8997,0x89dd,0x89da,0x89db,0x8a4e,0x8a4d,
-0x8a39,0x8a59,0x8a40,0x8a57,0x8a58,0x8a44,0x8a45,0x8a52,
-0x8a48,0x8a51,0x8a4a,0x8a4c,0x8a4f,0x8c5f,0x8c81,0x8c80,
-0x8cba,0x8cbe,0x8cb0,0x8cb9,0x8cb5,0x8d84,0x8d80,0x8d89,
-0x8dd8,0x8dd3,0x8dcd,0x8dc7,0x8dd6,0x8ddc,0x8dcf,0x8dd5,
-0x8dd9,0x8dc8,0x8dd7,0x8dc5,0x8eef,0x8ef7,0x8efa,0x8ef9,
-0x8ee6,0x8eee,0x8ee5,0x8ef5,0x8ee7,0x8ee8,0x8ef6,0x8eeb,
-0x8ef1,0x8eec,0x8ef4,0x8ee9,0x902d,0x9034,0x902f,0x9106,
-0x912c,0x9104,0x90ff,0x90fc,0x9108,0x90f9,0x90fb,0x9101,
-0x9100,0x9107,0x9105,0x9103,0x9161,0x9164,0x915f,0x9162,
-0x9160,0x9201,0x920a,0x9225,0x9203,0x921a,0x9226,0x920f,
-0x920c,0x9200,0x9212,0x91ff,0x91fd,0x9206,0x9204,0x9227,
-0x9202,0x921c,0x9224,0x9219,0x9217,0x9205,0x9216,0x957b,
-0x958d,0x958c,0x9590,0x9687,0x967e,0x9688,0x9689,0x9683,
-0x9680,0x96c2,0x96c8,0x96c3,0x96f1,0x96f0,0x976c,0x9770,
-0x976e,0x9807,0x98a9,0x98eb,0x9ce6,0x9ef9,0x4e83,0x4e84,
-0x4eb6,0x50bd,0x50bf,0x50c6,0x50ae,0x50c4,0x50ca,0x50b4,
-0x50c8,0x50c2,0x50b0,0x50c1,0x50ba,0x50b1,0x50cb,0x50c9,
-0x50b6,0x50b8,0x51d7,0x527a,0x5278,0x527b,0x527c,0x55c3,
-0x55db,0x55cc,0x55d0,0x55cb,0x55ca,0x55dd,0x55c0,0x55d4,
-0x55c4,0x55e9,0x55bf,0x55d2,0x558d,0x55cf,0x55d5,0x55e2,
-0x55d6,0x55c8,0x55f2,0x55cd,0x55d9,0x55c2,0x5714,0x5853,
-0x5868,0x5864,0x584f,0x584d,0x5849,0x586f,0x5855,0x584e,
-0x585d,0x5859,0x5865,0x585b,0x583d,0x5863,0x5871,0x58fc,
-0x5ac7,0x5ac4,0x5acb,0x5aba,0x5ab8,0x5ab1,0x5ab5,0x5ab0,
-0x5abf,0x5ac8,0x5abb,0x5ac6,0x5ab7,0x5ac0,0x5aca,0x5ab4,
-0x5ab6,0x5acd,0x5ab9,0x5a90,0x5bd6,0x5bd8,0x5bd9,0x5c1f,
-0x5c33,0x5d71,0x5d63,0x5d4a,0x5d65,0x5d72,0x5d6c,0x5d5e,
-0x5d68,0x5d67,0x5d62,0x5df0,0x5e4f,0x5e4e,0x5e4a,0x5e4d,
-0x5e4b,0x5ec5,0x5ecc,0x5ec6,0x5ecb,0x5ec7,0x5f40,0x5faf,
-0x5fad,0x60f7,0x6149,0x614a,0x612b,0x6145,0x6136,0x6132,
-0x612e,0x6146,0x612f,0x614f,0x6129,0x6140,0x6220,0x9168,
-0x6223,0x6225,0x6224,0x63c5,0x63f1,0x63eb,0x6410,0x6412,
-0x6409,0x6420,0x6424,0x6433,0x6443,0x641f,0x6415,0x6418,
-0x6439,0x6437,0x6422,0x6423,0x640c,0x6426,0x6430,0x6428,
-0x6441,0x6435,0x642f,0x640a,0x641a,0x6440,0x6425,0x6427,
-0x640b,0x63e7,0x641b,0x642e,0x6421,0x640e,0x656f,0x6592,
-0x65d3,0x6686,0x668c,0x6695,0x6690,0x668b,0x668a,0x6699,
-0x6694,0x6678,0x6720,0x6966,0x695f,0x6938,0x694e,0x6962,
-0x6971,0x693f,0x6945,0x696a,0x6939,0x6942,0x6957,0x6959,
-0x697a,0x6948,0x6949,0x6935,0x696c,0x6933,0x693d,0x6965,
-0x68f0,0x6978,0x6934,0x6969,0x6940,0x696f,0x6944,0x6976,
-0x6958,0x6941,0x6974,0x694c,0x693b,0x694b,0x6937,0x695c,
-0x694f,0x6951,0x6932,0x6952,0x692f,0x697b,0x693c,0x6b46,
-0x6b45,0x6b43,0x6b42,0x6b48,0x6b41,0x6b9b,0xfa0d,0x6bfb,
-0x6bfc,0x6bf9,0x6bf7,0x6bf8,0x6e9b,0x6ed6,0x6ec8,0x6e8f,
-0x6ec0,0x6e9f,0x6e93,0x6e94,0x6ea0,0x6eb1,0x6eb9,0x6ec6,
-0x6ed2,0x6ebd,0x6ec1,0x6e9e,0x6ec9,0x6eb7,0x6eb0,0x6ecd,
-0x6ea6,0x6ecf,0x6eb2,0x6ebe,0x6ec3,0x6edc,0x6ed8,0x6e99,
-0x6e92,0x6e8e,0x6e8d,0x6ea4,0x6ea1,0x6ebf,0x6eb3,0x6ed0,
-0x6eca,0x6e97,0x6eae,0x6ea3,0x7147,0x7154,0x7152,0x7163,
-0x7160,0x7141,0x715d,0x7162,0x7172,0x7178,0x716a,0x7161,
-0x7142,0x7158,0x7143,0x714b,0x7170,0x715f,0x7150,0x7153,
-0x7144,0x714d,0x715a,0x724f,0x728d,0x728c,0x7291,0x7290,
-0x728e,0x733c,0x7342,0x733b,0x733a,0x7340,0x734a,0x7349,
-0x7444,0x744a,0x744b,0x7452,0x7451,0x7457,0x7440,0x744f,
-0x7450,0x744e,0x7442,0x7446,0x744d,0x7454,0x74e1,0x74ff,
-0x74fe,0x74fd,0x751d,0x7579,0x7577,0x6983,0x75ef,0x760f,
-0x7603,0x75f7,0x75fe,0x75fc,0x75f9,0x75f8,0x7610,0x75fb,
-0x75f6,0x75ed,0x75f5,0x75fd,0x7699,0x76b5,0x76dd,0x7755,
-0x775f,0x7760,0x7752,0x7756,0x775a,0x7769,0x7767,0x7754,
-0x7759,0x776d,0x77e0,0x7887,0x789a,0x7894,0x788f,0x7884,
-0x7895,0x7885,0x7886,0x78a1,0x7883,0x7879,0x7899,0x7880,
-0x7896,0x787b,0x797c,0x7982,0x797d,0x7979,0x7a11,0x7a18,
-0x7a19,0x7a12,0x7a17,0x7a15,0x7a22,0x7a13,0x7a1b,0x7a10,
-0x7aa3,0x7aa2,0x7a9e,0x7aeb,0x7b66,0x7b64,0x7b6d,0x7b74,
-0x7b69,0x7b72,0x7b65,0x7b73,0x7b71,0x7b70,0x7b61,0x7b78,
-0x7b76,0x7b63,0x7cb2,0x7cb4,0x7caf,0x7d88,0x7d86,0x7d80,
-0x7d8d,0x7d7f,0x7d85,0x7d7a,0x7d8e,0x7d7b,0x7d83,0x7d7c,
-0x7d8c,0x7d94,0x7d84,0x7d7d,0x7d92,0x7f6d,0x7f6b,0x7f67,
-0x7f68,0x7f6c,0x7fa6,0x7fa5,0x7fa7,0x7fdb,0x7fdc,0x8021,
-0x8164,0x8160,0x8177,0x815c,0x8169,0x815b,0x8162,0x8172,
-0x6721,0x815e,0x8176,0x8167,0x816f,0x8144,0x8161,0x821d,
-0x8249,0x8244,0x8240,0x8242,0x8245,0x84f1,0x843f,0x8456,
-0x8476,0x8479,0x848f,0x848d,0x8465,0x8451,0x8440,0x8486,
-0x8467,0x8430,0x844d,0x847d,0x845a,0x8459,0x8474,0x8473,
-0x845d,0x8507,0x845e,0x8437,0x843a,0x8434,0x847a,0x8443,
-0x8478,0x8432,0x8445,0x8429,0x83d9,0x844b,0x842f,0x8442,
-0x842d,0x845f,0x8470,0x8439,0x844e,0x844c,0x8452,0x846f,
-0x84c5,0x848e,0x843b,0x8447,0x8436,0x8433,0x8468,0x847e,
-0x8444,0x842b,0x8460,0x8454,0x846e,0x8450,0x870b,0x8704,
-0x86f7,0x870c,0x86fa,0x86d6,0x86f5,0x874d,0x86f8,0x870e,
-0x8709,0x8701,0x86f6,0x870d,0x8705,0x88d6,0x88cb,0x88cd,
-0x88ce,0x88de,0x88db,0x88da,0x88cc,0x88d0,0x8985,0x899b,
-0x89df,0x89e5,0x89e4,0x89e1,0x89e0,0x89e2,0x89dc,0x89e6,
-0x8a76,0x8a86,0x8a7f,0x8a61,0x8a3f,0x8a77,0x8a82,0x8a84,
-0x8a75,0x8a83,0x8a81,0x8a74,0x8a7a,0x8c3c,0x8c4b,0x8c4a,
-0x8c65,0x8c64,0x8c66,0x8c86,0x8c84,0x8c85,0x8ccc,0x8d68,
-0x8d69,0x8d91,0x8d8c,0x8d8e,0x8d8f,0x8d8d,0x8d93,0x8d94,
-0x8d90,0x8d92,0x8df0,0x8de0,0x8dec,0x8df1,0x8dee,0x8dd0,
-0x8de9,0x8de3,0x8de2,0x8de7,0x8df2,0x8deb,0x8df4,0x8f06,
-0x8eff,0x8f01,0x8f00,0x8f05,0x8f07,0x8f08,0x8f02,0x8f0b,
-0x9052,0x903f,0x9044,0x9049,0x903d,0x9110,0x910d,0x910f,
-0x9111,0x9116,0x9114,0x910b,0x910e,0x916e,0x916f,0x9248,
-0x9252,0x9230,0x923a,0x9266,0x9233,0x9265,0x925e,0x9283,
-0x922e,0x924a,0x9246,0x926d,0x926c,0x924f,0x9260,0x9267,
-0x926f,0x9236,0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,
-0x9272,0x924e,0x9253,0x924c,0x9256,0x9232,0x959f,0x959c,
-0x959e,0x959b,0x9692,0x9693,0x9691,0x9697,0x96ce,0x96fa,
-0x96fd,0x96f8,0x96f5,0x9773,0x9777,0x9778,0x9772,0x980f,
-0x980d,0x980e,0x98ac,0x98f6,0x98f9,0x99af,0x99b2,0x99b0,
-0x99b5,0x9aad,0x9aab,0x9b5b,0x9cea,0x9ced,0x9ce7,0x9e80,
-0x9efd,0x50e6,0x50d4,0x50d7,0x50e8,0x50f3,0x50db,0x50ea,
-0x50dd,0x50e4,0x50d3,0x50ec,0x50f0,0x50ef,0x50e3,0x50e0,
-0x51d8,0x5280,0x5281,0x52e9,0x52eb,0x5330,0x53ac,0x5627,
-0x5615,0x560c,0x5612,0x55fc,0x560f,0x561c,0x5601,0x5613,
-0x5602,0x55fa,0x561d,0x5604,0x55ff,0x55f9,0x5889,0x587c,
-0x5890,0x5898,0x5886,0x5881,0x587f,0x5874,0x588b,0x587a,
-0x5887,0x5891,0x588e,0x5876,0x5882,0x5888,0x587b,0x5894,
-0x588f,0x58fe,0x596b,0x5adc,0x5aee,0x5ae5,0x5ad5,0x5aea,
-0x5ada,0x5aed,0x5aeb,0x5af3,0x5ae2,0x5ae0,0x5adb,0x5aec,
-0x5ade,0x5add,0x5ad9,0x5ae8,0x5adf,0x5b77,0x5be0,0x5be3,
-0x5c63,0x5d82,0x5d80,0x5d7d,0x5d86,0x5d7a,0x5d81,0x5d77,
-0x5d8a,0x5d89,0x5d88,0x5d7e,0x5d7c,0x5d8d,0x5d79,0x5d7f,
-0x5e58,0x5e59,0x5e53,0x5ed8,0x5ed1,0x5ed7,0x5ece,0x5edc,
-0x5ed5,0x5ed9,0x5ed2,0x5ed4,0x5f44,0x5f43,0x5f6f,0x5fb6,
-0x612c,0x6128,0x6141,0x615e,0x6171,0x6173,0x6152,0x6153,
-0x6172,0x616c,0x6180,0x6174,0x6154,0x617a,0x615b,0x6165,
-0x613b,0x616a,0x6161,0x6156,0x6229,0x6227,0x622b,0x642b,
-0x644d,0x645b,0x645d,0x6474,0x6476,0x6472,0x6473,0x647d,
-0x6475,0x6466,0x64a6,0x644e,0x6482,0x645e,0x645c,0x644b,
-0x6453,0x6460,0x6450,0x647f,0x643f,0x646c,0x646b,0x6459,
-0x6465,0x6477,0x6573,0x65a0,0x66a1,0x66a0,0x669f,0x6705,
-0x6704,0x6722,0x69b1,0x69b6,0x69c9,0x69a0,0x69ce,0x6996,
-0x69b0,0x69ac,0x69bc,0x6991,0x6999,0x698e,0x69a7,0x698d,
-0x69a9,0x69be,0x69af,0x69bf,0x69c4,0x69bd,0x69a4,0x69d4,
-0x69b9,0x69ca,0x699a,0x69cf,0x69b3,0x6993,0x69aa,0x69a1,
-0x699e,0x69d9,0x6997,0x6990,0x69c2,0x69b5,0x69a5,0x69c6,
-0x6b4a,0x6b4d,0x6b4b,0x6b9e,0x6b9f,0x6ba0,0x6bc3,0x6bc4,
-0x6bfe,0x6ece,0x6ef5,0x6ef1,0x6f03,0x6f25,0x6ef8,0x6f37,
-0x6efb,0x6f2e,0x6f09,0x6f4e,0x6f19,0x6f1a,0x6f27,0x6f18,
-0x6f3b,0x6f12,0x6eed,0x6f0a,0x6f36,0x6f73,0x6ef9,0x6eee,
-0x6f2d,0x6f40,0x6f30,0x6f3c,0x6f35,0x6eeb,0x6f07,0x6f0e,
-0x6f43,0x6f05,0x6efd,0x6ef6,0x6f39,0x6f1c,0x6efc,0x6f3a,
-0x6f1f,0x6f0d,0x6f1e,0x6f08,0x6f21,0x7187,0x7190,0x7189,
-0x7180,0x7185,0x7182,0x718f,0x717b,0x7186,0x7181,0x7197,
-0x7244,0x7253,0x7297,0x7295,0x7293,0x7343,0x734d,0x7351,
-0x734c,0x7462,0x7473,0x7471,0x7475,0x7472,0x7467,0x746e,
-0x7500,0x7502,0x7503,0x757d,0x7590,0x7616,0x7608,0x760c,
-0x7615,0x7611,0x760a,0x7614,0x76b8,0x7781,0x777c,0x7785,
-0x7782,0x776e,0x7780,0x776f,0x777e,0x7783,0x78b2,0x78aa,
-0x78b4,0x78ad,0x78a8,0x787e,0x78ab,0x789e,0x78a5,0x78a0,
-0x78ac,0x78a2,0x78a4,0x7998,0x798a,0x798b,0x7996,0x7995,
-0x7994,0x7993,0x7997,0x7988,0x7992,0x7990,0x7a2b,0x7a4a,
-0x7a30,0x7a2f,0x7a28,0x7a26,0x7aa8,0x7aab,0x7aac,0x7aee,
-0x7b88,0x7b9c,0x7b8a,0x7b91,0x7b90,0x7b96,0x7b8d,0x7b8c,
-0x7b9b,0x7b8e,0x7b85,0x7b98,0x5284,0x7b99,0x7ba4,0x7b82,
-0x7cbb,0x7cbf,0x7cbc,0x7cba,0x7da7,0x7db7,0x7dc2,0x7da3,
-0x7daa,0x7dc1,0x7dc0,0x7dc5,0x7d9d,0x7dce,0x7dc4,0x7dc6,
-0x7dcb,0x7dcc,0x7daf,0x7db9,0x7d96,0x7dbc,0x7d9f,0x7da6,
-0x7dae,0x7da9,0x7da1,0x7dc9,0x7f73,0x7fe2,0x7fe3,0x7fe5,
-0x7fde,0x8024,0x805d,0x805c,0x8189,0x8186,0x8183,0x8187,
-0x818d,0x818c,0x818b,0x8215,0x8497,0x84a4,0x84a1,0x849f,
-0x84ba,0x84ce,0x84c2,0x84ac,0x84ae,0x84ab,0x84b9,0x84b4,
-0x84c1,0x84cd,0x84aa,0x849a,0x84b1,0x84d0,0x849d,0x84a7,
-0x84bb,0x84a2,0x8494,0x84c7,0x84cc,0x849b,0x84a9,0x84af,
-0x84a8,0x84d6,0x8498,0x84b6,0x84cf,0x84a0,0x84d7,0x84d4,
-0x84d2,0x84db,0x84b0,0x8491,0x8661,0x8733,0x8723,0x8728,
-0x876b,0x8740,0x872e,0x871e,0x8721,0x8719,0x871b,0x8743,
-0x872c,0x8741,0x873e,0x8746,0x8720,0x8732,0x872a,0x872d,
-0x873c,0x8712,0x873a,0x8731,0x8735,0x8742,0x8726,0x8727,
-0x8738,0x8724,0x871a,0x8730,0x8711,0x88f7,0x88e7,0x88f1,
-0x88f2,0x88fa,0x88fe,0x88ee,0x88fc,0x88f6,0x88fb,0x88f0,
-0x88ec,0x88eb,0x899d,0x89a1,0x899f,0x899e,0x89e9,0x89eb,
-0x89e8,0x8aab,0x8a99,0x8a8b,0x8a92,0x8a8f,0x8a96,0x8c3d,
-0x8c68,0x8c69,0x8cd5,0x8ccf,0x8cd7,0x8d96,0x8e09,0x8e02,
-0x8dff,0x8e0d,0x8dfd,0x8e0a,0x8e03,0x8e07,0x8e06,0x8e05,
-0x8dfe,0x8e00,0x8e04,0x8f10,0x8f11,0x8f0e,0x8f0d,0x9123,
-0x911c,0x9120,0x9122,0x911f,0x911d,0x911a,0x9124,0x9121,
-0x911b,0x917a,0x9172,0x9179,0x9173,0x92a5,0x92a4,0x9276,
-0x929b,0x927a,0x92a0,0x9294,0x92aa,0x928d,0x92a6,0x929a,
-0x92ab,0x9279,0x9297,0x927f,0x92a3,0x92ee,0x928e,0x9282,
-0x9295,0x92a2,0x927d,0x9288,0x92a1,0x928a,0x9286,0x928c,
-0x9299,0x92a7,0x927e,0x9287,0x92a9,0x929d,0x928b,0x922d,
-0x969e,0x96a1,0x96ff,0x9758,0x977d,0x977a,0x977e,0x9783,
-0x9780,0x9782,0x977b,0x9784,0x9781,0x977f,0x97ce,0x97cd,
-0x9816,0x98ad,0x98ae,0x9902,0x9900,0x9907,0x999d,0x999c,
-0x99c3,0x99b9,0x99bb,0x99ba,0x99c2,0x99bd,0x99c7,0x9ab1,
-0x9ae3,0x9ae7,0x9b3e,0x9b3f,0x9b60,0x9b61,0x9b5f,0x9cf1,
-0x9cf2,0x9cf5,0x9ea7,0x50ff,0x5103,0x5130,0x50f8,0x5106,
-0x5107,0x50f6,0x50fe,0x510b,0x510c,0x50fd,0x510a,0x528b,
-0x528c,0x52f1,0x52ef,0x5648,0x5642,0x564c,0x5635,0x5641,
-0x564a,0x5649,0x5646,0x5658,0x565a,0x5640,0x5633,0x563d,
-0x562c,0x563e,0x5638,0x562a,0x563a,0x571a,0x58ab,0x589d,
-0x58b1,0x58a0,0x58a3,0x58af,0x58ac,0x58a5,0x58a1,0x58ff,
-0x5aff,0x5af4,0x5afd,0x5af7,0x5af6,0x5b03,0x5af8,0x5b02,
-0x5af9,0x5b01,0x5b07,0x5b05,0x5b0f,0x5c67,0x5d99,0x5d97,
-0x5d9f,0x5d92,0x5da2,0x5d93,0x5d95,0x5da0,0x5d9c,0x5da1,
-0x5d9a,0x5d9e,0x5e69,0x5e5d,0x5e60,0x5e5c,0x7df3,0x5edb,
-0x5ede,0x5ee1,0x5f49,0x5fb2,0x618b,0x6183,0x6179,0x61b1,
-0x61b0,0x61a2,0x6189,0x619b,0x6193,0x61af,0x61ad,0x619f,
-0x6192,0x61aa,0x61a1,0x618d,0x6166,0x61b3,0x622d,0x646e,
-0x6470,0x6496,0x64a0,0x6485,0x6497,0x649c,0x648f,0x648b,
-0x648a,0x648c,0x64a3,0x649f,0x6468,0x64b1,0x6498,0x6576,
-0x657a,0x6579,0x657b,0x65b2,0x65b3,0x66b5,0x66b0,0x66a9,
-0x66b2,0x66b7,0x66aa,0x66af,0x6a00,0x6a06,0x6a17,0x69e5,
-0x69f8,0x6a15,0x69f1,0x69e4,0x6a20,0x69ff,0x69ec,0x69e2,
-0x6a1b,0x6a1d,0x69fe,0x6a27,0x69f2,0x69ee,0x6a14,0x69f7,
-0x69e7,0x6a40,0x6a08,0x69e6,0x69fb,0x6a0d,0x69fc,0x69eb,
-0x6a09,0x6a04,0x6a18,0x6a25,0x6a0f,0x69f6,0x6a26,0x6a07,
-0x69f4,0x6a16,0x6b51,0x6ba5,0x6ba3,0x6ba2,0x6ba6,0x6c01,
-0x6c00,0x6bff,0x6c02,0x6f41,0x6f26,0x6f7e,0x6f87,0x6fc6,
-0x6f92,0x6f8d,0x6f89,0x6f8c,0x6f62,0x6f4f,0x6f85,0x6f5a,
-0x6f96,0x6f76,0x6f6c,0x6f82,0x6f55,0x6f72,0x6f52,0x6f50,
-0x6f57,0x6f94,0x6f93,0x6f5d,0x6f00,0x6f61,0x6f6b,0x6f7d,
-0x6f67,0x6f90,0x6f53,0x6f8b,0x6f69,0x6f7f,0x6f95,0x6f63,
-0x6f77,0x6f6a,0x6f7b,0x71b2,0x71af,0x719b,0x71b0,0x71a0,
-0x719a,0x71a9,0x71b5,0x719d,0x71a5,0x719e,0x71a4,0x71a1,
-0x71aa,0x719c,0x71a7,0x71b3,0x7298,0x729a,0x7358,0x7352,
-0x735e,0x735f,0x7360,0x735d,0x735b,0x7361,0x735a,0x7359,
-0x7362,0x7487,0x7489,0x748a,0x7486,0x7481,0x747d,0x7485,
-0x7488,0x747c,0x7479,0x7508,0x7507,0x757e,0x7625,0x761e,
-0x7619,0x761d,0x761c,0x7623,0x761a,0x7628,0x761b,0x769c,
-0x769d,0x769e,0x769b,0x778d,0x778f,0x7789,0x7788,0x78cd,
-0x78bb,0x78cf,0x78cc,0x78d1,0x78ce,0x78d4,0x78c8,0x78c3,
-0x78c4,0x78c9,0x799a,0x79a1,0x79a0,0x799c,0x79a2,0x799b,
-0x6b76,0x7a39,0x7ab2,0x7ab4,0x7ab3,0x7bb7,0x7bcb,0x7bbe,
-0x7bac,0x7bce,0x7baf,0x7bb9,0x7bca,0x7bb5,0x7cc5,0x7cc8,
-0x7ccc,0x7ccb,0x7df7,0x7ddb,0x7dea,0x7de7,0x7dd7,0x7de1,
-0x7e03,0x7dfa,0x7de6,0x7df6,0x7df1,0x7df0,0x7dee,0x7ddf,
-0x7f76,0x7fac,0x7fb0,0x7fad,0x7fed,0x7feb,0x7fea,0x7fec,
-0x7fe6,0x7fe8,0x8064,0x8067,0x81a3,0x819f,0x819e,0x8195,
-0x81a2,0x8199,0x8197,0x8216,0x824f,0x8253,0x8252,0x8250,
-0x824e,0x8251,0x8524,0x853b,0x850f,0x8500,0x8529,0x850e,
-0x8509,0x850d,0x851f,0x850a,0x8527,0x851c,0x84fb,0x852b,
-0x84fa,0x8508,0x850c,0x84f4,0x852a,0x84f2,0x8515,0x84f7,
-0x84eb,0x84f3,0x84fc,0x8512,0x84ea,0x84e9,0x8516,0x84fe,
-0x8528,0x851d,0x852e,0x8502,0x84fd,0x851e,0x84f6,0x8531,
-0x8526,0x84e7,0x84e8,0x84f0,0x84ef,0x84f9,0x8518,0x8520,
-0x8530,0x850b,0x8519,0x852f,0x8662,0x8756,0x8763,0x8764,
-0x8777,0x87e1,0x8773,0x8758,0x8754,0x875b,0x8752,0x8761,
-0x875a,0x8751,0x875e,0x876d,0x876a,0x8750,0x874e,0x875f,
-0x875d,0x876f,0x876c,0x877a,0x876e,0x875c,0x8765,0x874f,
-0x877b,0x8775,0x8762,0x8767,0x8769,0x885a,0x8905,0x890c,
-0x8914,0x890b,0x8917,0x8918,0x8919,0x8906,0x8916,0x8911,
-0x890e,0x8909,0x89a2,0x89a4,0x89a3,0x89ed,0x89f0,0x89ec,
-0x8acf,0x8ac6,0x8ab8,0x8ad3,0x8ad1,0x8ad4,0x8ad5,0x8abb,
-0x8ad7,0x8abe,0x8ac0,0x8ac5,0x8ad8,0x8ac3,0x8aba,0x8abd,
-0x8ad9,0x8c3e,0x8c4d,0x8c8f,0x8ce5,0x8cdf,0x8cd9,0x8ce8,
-0x8cda,0x8cdd,0x8ce7,0x8da0,0x8d9c,0x8da1,0x8d9b,0x8e20,
-0x8e23,0x8e25,0x8e24,0x8e2e,0x8e15,0x8e1b,0x8e16,0x8e11,
-0x8e19,0x8e26,0x8e27,0x8e14,0x8e12,0x8e18,0x8e13,0x8e1c,
-0x8e17,0x8e1a,0x8f2c,0x8f24,0x8f18,0x8f1a,0x8f20,0x8f23,
-0x8f16,0x8f17,0x9073,0x9070,0x906f,0x9067,0x906b,0x912f,
-0x912b,0x9129,0x912a,0x9132,0x9126,0x912e,0x9185,0x9186,
-0x918a,0x9181,0x9182,0x9184,0x9180,0x92d0,0x92c3,0x92c4,
-0x92c0,0x92d9,0x92b6,0x92cf,0x92f1,0x92df,0x92d8,0x92e9,
-0x92d7,0x92dd,0x92cc,0x92ef,0x92c2,0x92e8,0x92ca,0x92c8,
-0x92ce,0x92e6,0x92cd,0x92d5,0x92c9,0x92e0,0x92de,0x92e7,
-0x92d1,0x92d3,0x92b5,0x92e1,0x92c6,0x92b4,0x957c,0x95ac,
-0x95ab,0x95ae,0x95b0,0x96a4,0x96a2,0x96d3,0x9705,0x9708,
-0x9702,0x975a,0x978a,0x978e,0x9788,0x97d0,0x97cf,0x981e,
-0x981d,0x9826,0x9829,0x9828,0x9820,0x981b,0x9827,0x98b2,
-0x9908,0x98fa,0x9911,0x9914,0x9916,0x9917,0x9915,0x99dc,
-0x99cd,0x99cf,0x99d3,0x99d4,0x99ce,0x99c9,0x99d6,0x99d8,
-0x99cb,0x99d7,0x99cc,0x9ab3,0x9aec,0x9aeb,0x9af3,0x9af2,
-0x9af1,0x9b46,0x9b43,0x9b67,0x9b74,0x9b71,0x9b66,0x9b76,
-0x9b75,0x9b70,0x9b68,0x9b64,0x9b6c,0x9cfc,0x9cfa,0x9cfd,
-0x9cff,0x9cf7,0x9d07,0x9d00,0x9cf9,0x9cfb,0x9d08,0x9d05,
-0x9d04,0x9e83,0x9ed3,0x9f0f,0x9f10,0x511c,0x5113,0x5117,
-0x511a,0x5111,0x51de,0x5334,0x53e1,0x5670,0x5660,0x566e,
-0x5673,0x5666,0x5663,0x566d,0x5672,0x565e,0x5677,0x571c,
-0x571b,0x58c8,0x58bd,0x58c9,0x58bf,0x58ba,0x58c2,0x58bc,
-0x58c6,0x5b17,0x5b19,0x5b1b,0x5b21,0x5b14,0x5b13,0x5b10,
-0x5b16,0x5b28,0x5b1a,0x5b20,0x5b1e,0x5bef,0x5dac,0x5db1,
-0x5da9,0x5da7,0x5db5,0x5db0,0x5dae,0x5daa,0x5da8,0x5db2,
-0x5dad,0x5daf,0x5db4,0x5e67,0x5e68,0x5e66,0x5e6f,0x5ee9,
-0x5ee7,0x5ee6,0x5ee8,0x5ee5,0x5f4b,0x5fbc,0x619d,0x61a8,
-0x6196,0x61c5,0x61b4,0x61c6,0x61c1,0x61cc,0x61ba,0x61bf,
-0x61b8,0x618c,0x64d7,0x64d6,0x64d0,0x64cf,0x64c9,0x64bd,
-0x6489,0x64c3,0x64db,0x64f3,0x64d9,0x6533,0x657f,0x657c,
-0x65a2,0x66c8,0x66be,0x66c0,0x66ca,0x66cb,0x66cf,0x66bd,
-0x66bb,0x66ba,0x66cc,0x6723,0x6a34,0x6a66,0x6a49,0x6a67,
-0x6a32,0x6a68,0x6a3e,0x6a5d,0x6a6d,0x6a76,0x6a5b,0x6a51,
-0x6a28,0x6a5a,0x6a3b,0x6a3f,0x6a41,0x6a6a,0x6a64,0x6a50,
-0x6a4f,0x6a54,0x6a6f,0x6a69,0x6a60,0x6a3c,0x6a5e,0x6a56,
-0x6a55,0x6a4d,0x6a4e,0x6a46,0x6b55,0x6b54,0x6b56,0x6ba7,
-0x6baa,0x6bab,0x6bc8,0x6bc7,0x6c04,0x6c03,0x6c06,0x6fad,
-0x6fcb,0x6fa3,0x6fc7,0x6fbc,0x6fce,0x6fc8,0x6f5e,0x6fc4,
-0x6fbd,0x6f9e,0x6fca,0x6fa8,0x7004,0x6fa5,0x6fae,0x6fba,
-0x6fac,0x6faa,0x6fcf,0x6fbf,0x6fb8,0x6fa2,0x6fc9,0x6fab,
-0x6fcd,0x6faf,0x6fb2,0x6fb0,0x71c5,0x71c2,0x71bf,0x71b8,
-0x71d6,0x71c0,0x71c1,0x71cb,0x71d4,0x71ca,0x71c7,0x71cf,
-0x71bd,0x71d8,0x71bc,0x71c6,0x71da,0x71db,0x729d,0x729e,
-0x7369,0x7366,0x7367,0x736c,0x7365,0x736b,0x736a,0x747f,
-0x749a,0x74a0,0x7494,0x7492,0x7495,0x74a1,0x750b,0x7580,
-0x762f,0x762d,0x7631,0x763d,0x7633,0x763c,0x7635,0x7632,
-0x7630,0x76bb,0x76e6,0x779a,0x779d,0x77a1,0x779c,0x779b,
-0x77a2,0x77a3,0x7795,0x7799,0x7797,0x78dd,0x78e9,0x78e5,
-0x78ea,0x78de,0x78e3,0x78db,0x78e1,0x78e2,0x78ed,0x78df,
-0x78e0,0x79a4,0x7a44,0x7a48,0x7a47,0x7ab6,0x7ab8,0x7ab5,
-0x7ab1,0x7ab7,0x7bde,0x7be3,0x7be7,0x7bdd,0x7bd5,0x7be5,
-0x7bda,0x7be8,0x7bf9,0x7bd4,0x7bea,0x7be2,0x7bdc,0x7beb,
-0x7bd8,0x7bdf,0x7cd2,0x7cd4,0x7cd7,0x7cd0,0x7cd1,0x7e12,
-0x7e21,0x7e17,0x7e0c,0x7e1f,0x7e20,0x7e13,0x7e0e,0x7e1c,
-0x7e15,0x7e1a,0x7e22,0x7e0b,0x7e0f,0x7e16,0x7e0d,0x7e14,
-0x7e25,0x7e24,0x7f43,0x7f7b,0x7f7c,0x7f7a,0x7fb1,0x7fef,
-0x802a,0x8029,0x806c,0x81b1,0x81a6,0x81ae,0x81b9,0x81b5,
-0x81ab,0x81b0,0x81ac,0x81b4,0x81b2,0x81b7,0x81a7,0x81f2,
-0x8255,0x8256,0x8257,0x8556,0x8545,0x856b,0x854d,0x8553,
-0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562,0x8544,
-0x8551,0x8547,0x8563,0x853e,0x855b,0x8571,0x854e,0x856e,
-0x8575,0x8555,0x8567,0x8560,0x858c,0x8566,0x855d,0x8554,
-0x8565,0x856c,0x8663,0x8665,0x8664,0x879b,0x878f,0x8797,
-0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779,0x8787,
-0x87a3,0x8785,0x8790,0x8791,0x879d,0x8784,0x8794,0x879c,
-0x879a,0x8789,0x891e,0x8926,0x8930,0x892d,0x892e,0x8927,
-0x8931,0x8922,0x8929,0x8923,0x892f,0x892c,0x891f,0x89f1,
-0x8ae0,0x8ae2,0x8af2,0x8af4,0x8af5,0x8add,0x8b14,0x8ae4,
-0x8adf,0x8af0,0x8ac8,0x8ade,0x8ae1,0x8ae8,0x8aff,0x8aef,
-0x8afb,0x8c91,0x8c92,0x8c90,0x8cf5,0x8cee,0x8cf1,0x8cf0,
-0x8cf3,0x8d6c,0x8d6e,0x8da5,0x8da7,0x8e33,0x8e3e,0x8e38,
-0x8e40,0x8e45,0x8e36,0x8e3c,0x8e3d,0x8e41,0x8e30,0x8e3f,
-0x8ebd,0x8f36,0x8f2e,0x8f35,0x8f32,0x8f39,0x8f37,0x8f34,
-0x9076,0x9079,0x907b,0x9086,0x90fa,0x9133,0x9135,0x9136,
-0x9193,0x9190,0x9191,0x918d,0x918f,0x9327,0x931e,0x9308,
-0x931f,0x9306,0x930f,0x937a,0x9338,0x933c,0x931b,0x9323,
-0x9312,0x9301,0x9346,0x932d,0x930e,0x930d,0x92cb,0x931d,
-0x92fa,0x9325,0x9313,0x92f9,0x92f7,0x9334,0x9302,0x9324,
-0x92ff,0x9329,0x9339,0x9335,0x932a,0x9314,0x930c,0x930b,
-0x92fe,0x9309,0x9300,0x92fb,0x9316,0x95bc,0x95cd,0x95be,
-0x95b9,0x95ba,0x95b6,0x95bf,0x95b5,0x95bd,0x96a9,0x96d4,
-0x970b,0x9712,0x9710,0x9799,0x9797,0x9794,0x97f0,0x97f8,
-0x9835,0x982f,0x9832,0x9924,0x991f,0x9927,0x9929,0x999e,
-0x99ee,0x99ec,0x99e5,0x99e4,0x99f0,0x99e3,0x99ea,0x99e9,
-0x99e7,0x9ab9,0x9abf,0x9ab4,0x9abb,0x9af6,0x9afa,0x9af9,
-0x9af7,0x9b33,0x9b80,0x9b85,0x9b87,0x9b7c,0x9b7e,0x9b7b,
-0x9b82,0x9b93,0x9b92,0x9b90,0x9b7a,0x9b95,0x9b7d,0x9b88,
-0x9d25,0x9d17,0x9d20,0x9d1e,0x9d14,0x9d29,0x9d1d,0x9d18,
-0x9d22,0x9d10,0x9d19,0x9d1f,0x9e88,0x9e86,0x9e87,0x9eae,
-0x9ead,0x9ed5,0x9ed6,0x9efa,0x9f12,0x9f3d,0x5126,0x5125,
-0x5122,0x5124,0x5120,0x5129,0x52f4,0x5693,0x568c,0x568d,
-0x5686,0x5684,0x5683,0x567e,0x5682,0x567f,0x5681,0x58d6,
-0x58d4,0x58cf,0x58d2,0x5b2d,0x5b25,0x5b32,0x5b23,0x5b2c,
-0x5b27,0x5b26,0x5b2f,0x5b2e,0x5b7b,0x5bf1,0x5bf2,0x5db7,
-0x5e6c,0x5e6a,0x5fbe,0x5fbb,0x61c3,0x61b5,0x61bc,0x61e7,
-0x61e0,0x61e5,0x61e4,0x61e8,0x61de,0x64ef,0x64e9,0x64e3,
-0x64eb,0x64e4,0x64e8,0x6581,0x6580,0x65b6,0x65da,0x66d2,
-0x6a8d,0x6a96,0x6a81,0x6aa5,0x6a89,0x6a9f,0x6a9b,0x6aa1,
-0x6a9e,0x6a87,0x6a93,0x6a8e,0x6a95,0x6a83,0x6aa8,0x6aa4,
-0x6a91,0x6a7f,0x6aa6,0x6a9a,0x6a85,0x6a8c,0x6a92,0x6b5b,
-0x6bad,0x6c09,0x6fcc,0x6fa9,0x6ff4,0x6fd4,0x6fe3,0x6fdc,
-0x6fed,0x6fe7,0x6fe6,0x6fde,0x6ff2,0x6fdd,0x6fe2,0x6fe8,
-0x71e1,0x71f1,0x71e8,0x71f2,0x71e4,0x71f0,0x71e2,0x7373,
-0x736e,0x736f,0x7497,0x74b2,0x74ab,0x7490,0x74aa,0x74ad,
-0x74b1,0x74a5,0x74af,0x7510,0x7511,0x7512,0x750f,0x7584,
-0x7643,0x7648,0x7649,0x7647,0x76a4,0x76e9,0x77b5,0x77ab,
-0x77b2,0x77b7,0x77b6,0x77b4,0x77b1,0x77a8,0x77f0,0x78f3,
-0x78fd,0x7902,0x78fb,0x78fc,0x78f2,0x7905,0x78f9,0x78fe,
-0x7904,0x79ab,0x79a8,0x7a5c,0x7a5b,0x7a56,0x7a58,0x7a54,
-0x7a5a,0x7abe,0x7ac0,0x7ac1,0x7c05,0x7c0f,0x7bf2,0x7c00,
-0x7bff,0x7bfb,0x7c0e,0x7bf4,0x7c0b,0x7bf3,0x7c02,0x7c09,
-0x7c03,0x7c01,0x7bf8,0x7bfd,0x7c06,0x7bf0,0x7bf1,0x7c10,
-0x7c0a,0x7ce8,0x7e2d,0x7e3c,0x7e42,0x7e33,0x9848,0x7e38,
-0x7e2a,0x7e49,0x7e40,0x7e47,0x7e29,0x7e4c,0x7e30,0x7e3b,
-0x7e36,0x7e44,0x7e3a,0x7f45,0x7f7f,0x7f7e,0x7f7d,0x7ff4,
-0x7ff2,0x802c,0x81bb,0x81c4,0x81cc,0x81ca,0x81c5,0x81c7,
-0x81bc,0x81e9,0x825b,0x825a,0x825c,0x8583,0x8580,0x858f,
-0x85a7,0x8595,0x85a0,0x858b,0x85a3,0x857b,0x85a4,0x859a,
-0x859e,0x8577,0x857c,0x8589,0x85a1,0x857a,0x8578,0x8557,
-0x858e,0x8596,0x8586,0x858d,0x8599,0x859d,0x8581,0x85a2,
-0x8582,0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859f,
-0x8668,0x87be,0x87aa,0x87ad,0x87c5,0x87b0,0x87ac,0x87b9,
-0x87b5,0x87bc,0x87ae,0x87c9,0x87c3,0x87c2,0x87cc,0x87b7,
-0x87af,0x87c4,0x87ca,0x87b4,0x87b6,0x87bf,0x87b8,0x87bd,
-0x87de,0x87b2,0x8935,0x8933,0x893c,0x893e,0x8941,0x8952,
-0x8937,0x8942,0x89ad,0x89af,0x89ae,0x89f2,0x89f3,0x8b1e,
-0x8b18,0x8b16,0x8b11,0x8b05,0x8b0b,0x8b22,0x8b0f,0x8b12,
-0x8b15,0x8b07,0x8b0d,0x8b08,0x8b06,0x8b1c,0x8b13,0x8b1a,
-0x8c4f,0x8c70,0x8c72,0x8c71,0x8c6f,0x8c95,0x8c94,0x8cf9,
-0x8d6f,0x8e4e,0x8e4d,0x8e53,0x8e50,0x8e4c,0x8e47,0x8f43,
-0x8f40,0x9085,0x907e,0x9138,0x919a,0x91a2,0x919b,0x9199,
-0x919f,0x91a1,0x919d,0x91a0,0x93a1,0x9383,0x93af,0x9364,
-0x9356,0x9347,0x937c,0x9358,0x935c,0x9376,0x9349,0x9350,
-0x9351,0x9360,0x936d,0x938f,0x934c,0x936a,0x9379,0x9357,
-0x9355,0x9352,0x934f,0x9371,0x9377,0x937b,0x9361,0x935e,
-0x9363,0x9367,0x9380,0x934e,0x9359,0x95c7,0x95c0,0x95c9,
-0x95c3,0x95c5,0x95b7,0x96ae,0x96b0,0x96ac,0x9720,0x971f,
-0x9718,0x971d,0x9719,0x979a,0x97a1,0x979c,0x979e,0x979d,
-0x97d5,0x97d4,0x97f1,0x9841,0x9844,0x984a,0x9849,0x9845,
-0x9843,0x9925,0x992b,0x992c,0x992a,0x9933,0x9932,0x992f,
-0x992d,0x9931,0x9930,0x9998,0x99a3,0x99a1,0x9a02,0x99fa,
-0x99f4,0x99f7,0x99f9,0x99f8,0x99f6,0x99fb,0x99fd,0x99fe,
-0x99fc,0x9a03,0x9abe,0x9afe,0x9afd,0x9b01,0x9afc,0x9b48,
-0x9b9a,0x9ba8,0x9b9e,0x9b9b,0x9ba6,0x9ba1,0x9ba5,0x9ba4,
-0x9b86,0x9ba2,0x9ba0,0x9baf,0x9d33,0x9d41,0x9d67,0x9d36,
-0x9d2e,0x9d2f,0x9d31,0x9d38,0x9d30,0x9d45,0x9d42,0x9d43,
-0x9d3e,0x9d37,0x9d40,0x9d3d,0x7ff5,0x9d2d,0x9e8a,0x9e89,
-0x9e8d,0x9eb0,0x9ec8,0x9eda,0x9efb,0x9eff,0x9f24,0x9f23,
-0x9f22,0x9f54,0x9fa0,0x5131,0x512d,0x512e,0x5698,0x569c,
-0x5697,0x569a,0x569d,0x5699,0x5970,0x5b3c,0x5c69,0x5c6a,
-0x5dc0,0x5e6d,0x5e6e,0x61d8,0x61df,0x61ed,0x61ee,0x61f1,
-0x61ea,0x61f0,0x61eb,0x61d6,0x61e9,0x64ff,0x6504,0x64fd,
-0x64f8,0x6501,0x6503,0x64fc,0x6594,0x65db,0x66da,0x66db,
-0x66d8,0x6ac5,0x6ab9,0x6abd,0x6ae1,0x6ac6,0x6aba,0x6ab6,
-0x6ab7,0x6ac7,0x6ab4,0x6aad,0x6b5e,0x6bc9,0x6c0b,0x7007,
-0x700c,0x700d,0x7001,0x7005,0x7014,0x700e,0x6fff,0x7000,
-0x6ffb,0x7026,0x6ffc,0x6ff7,0x700a,0x7201,0x71ff,0x71f9,
-0x7203,0x71fd,0x7376,0x74b8,0x74c0,0x74b5,0x74c1,0x74be,
-0x74b6,0x74bb,0x74c2,0x7514,0x7513,0x765c,0x7664,0x7659,
-0x7650,0x7653,0x7657,0x765a,0x76a6,0x76bd,0x76ec,0x77c2,
-0x77ba,0x78ff,0x790c,0x7913,0x7914,0x7909,0x7910,0x7912,
-0x7911,0x79ad,0x79ac,0x7a5f,0x7c1c,0x7c29,0x7c19,0x7c20,
-0x7c1f,0x7c2d,0x7c1d,0x7c26,0x7c28,0x7c22,0x7c25,0x7c30,
-0x7e5c,0x7e50,0x7e56,0x7e63,0x7e58,0x7e62,0x7e5f,0x7e51,
-0x7e60,0x7e57,0x7e53,0x7fb5,0x7fb3,0x7ff7,0x7ff8,0x8075,
-0x81d1,0x81d2,0x81d0,0x825f,0x825e,0x85b4,0x85c6,0x85c0,
-0x85c3,0x85c2,0x85b3,0x85b5,0x85bd,0x85c7,0x85c4,0x85bf,
-0x85cb,0x85ce,0x85c8,0x85c5,0x85b1,0x85b6,0x85d2,0x8624,
-0x85b8,0x85b7,0x85be,0x8669,0x87e7,0x87e6,0x87e2,0x87db,
-0x87eb,0x87ea,0x87e5,0x87df,0x87f3,0x87e4,0x87d4,0x87dc,
-0x87d3,0x87ed,0x87d8,0x87e3,0x87a4,0x87d7,0x87d9,0x8801,
-0x87f4,0x87e8,0x87dd,0x8953,0x894b,0x894f,0x894c,0x8946,
-0x8950,0x8951,0x8949,0x8b2a,0x8b27,0x8b23,0x8b33,0x8b30,
-0x8b35,0x8b47,0x8b2f,0x8b3c,0x8b3e,0x8b31,0x8b25,0x8b37,
-0x8b26,0x8b36,0x8b2e,0x8b24,0x8b3b,0x8b3d,0x8b3a,0x8c42,
-0x8c75,0x8c99,0x8c98,0x8c97,0x8cfe,0x8d04,0x8d02,0x8d00,
-0x8e5c,0x8e62,0x8e60,0x8e57,0x8e56,0x8e5e,0x8e65,0x8e67,
-0x8e5b,0x8e5a,0x8e61,0x8e5d,0x8e69,0x8e54,0x8f46,0x8f47,
-0x8f48,0x8f4b,0x9128,0x913a,0x913b,0x913e,0x91a8,0x91a5,
-0x91a7,0x91af,0x91aa,0x93b5,0x938c,0x9392,0x93b7,0x939b,
-0x939d,0x9389,0x93a7,0x938e,0x93aa,0x939e,0x93a6,0x9395,
-0x9388,0x9399,0x939f,0x938d,0x93b1,0x9391,0x93b2,0x93a4,
-0x93a8,0x93b4,0x93a3,0x93a5,0x95d2,0x95d3,0x95d1,0x96b3,
-0x96d7,0x96da,0x5dc2,0x96df,0x96d8,0x96dd,0x9723,0x9722,
-0x9725,0x97ac,0x97ae,0x97a8,0x97ab,0x97a4,0x97aa,0x97a2,
-0x97a5,0x97d7,0x97d9,0x97d6,0x97d8,0x97fa,0x9850,0x9851,
-0x9852,0x98b8,0x9941,0x993c,0x993a,0x9a0f,0x9a0b,0x9a09,
-0x9a0d,0x9a04,0x9a11,0x9a0a,0x9a05,0x9a07,0x9a06,0x9ac0,
-0x9adc,0x9b08,0x9b04,0x9b05,0x9b29,0x9b35,0x9b4a,0x9b4c,
-0x9b4b,0x9bc7,0x9bc6,0x9bc3,0x9bbf,0x9bc1,0x9bb5,0x9bb8,
-0x9bd3,0x9bb6,0x9bc4,0x9bb9,0x9bbd,0x9d5c,0x9d53,0x9d4f,
-0x9d4a,0x9d5b,0x9d4b,0x9d59,0x9d56,0x9d4c,0x9d57,0x9d52,
-0x9d54,0x9d5f,0x9d58,0x9d5a,0x9e8e,0x9e8c,0x9edf,0x9f01,
-0x9f00,0x9f16,0x9f25,0x9f2b,0x9f2a,0x9f29,0x9f28,0x9f4c,
-0x9f55,0x5134,0x5135,0x5296,0x52f7,0x53b4,0x56ab,0x56ad,
-0x56a6,0x56a7,0x56aa,0x56ac,0x58da,0x58dd,0x58db,0x5912,
-0x5b3d,0x5b3e,0x5b3f,0x5dc3,0x5e70,0x5fbf,0x61fb,0x6507,
-0x6510,0x650d,0x6509,0x650c,0x650e,0x6584,0x65de,0x65dd,
-0x66de,0x6ae7,0x6ae0,0x6acc,0x6ad1,0x6ad9,0x6acb,0x6adf,
-0x6adc,0x6ad0,0x6aeb,0x6acf,0x6acd,0x6ade,0x6b60,0x6bb0,
-0x6c0c,0x7019,0x7027,0x7020,0x7016,0x702b,0x7021,0x7022,
-0x7023,0x7029,0x7017,0x7024,0x701c,0x702a,0x720c,0x720a,
-0x7207,0x7202,0x7205,0x72a5,0x72a6,0x72a4,0x72a3,0x72a1,
-0x74cb,0x74c5,0x74b7,0x74c3,0x7516,0x7660,0x77c9,0x77ca,
-0x77c4,0x77f1,0x791d,0x791b,0x7921,0x791c,0x7917,0x791e,
-0x79b0,0x7a67,0x7a68,0x7c33,0x7c3c,0x7c39,0x7c2c,0x7c3b,
-0x7cec,0x7cea,0x7e76,0x7e75,0x7e78,0x7e70,0x7e77,0x7e6f,
-0x7e7a,0x7e72,0x7e74,0x7e68,0x7f4b,0x7f4a,0x7f83,0x7f86,
-0x7fb7,0x7ffd,0x7ffe,0x8078,0x81d7,0x81d5,0x8264,0x8261,
-0x8263,0x85eb,0x85f1,0x85ed,0x85d9,0x85e1,0x85e8,0x85da,
-0x85d7,0x85ec,0x85f2,0x85f8,0x85d8,0x85df,0x85e3,0x85dc,
-0x85d1,0x85f0,0x85e6,0x85ef,0x85de,0x85e2,0x8800,0x87fa,
-0x8803,0x87f6,0x87f7,0x8809,0x880c,0x880b,0x8806,0x87fc,
-0x8808,0x87ff,0x880a,0x8802,0x8962,0x895a,0x895b,0x8957,
-0x8961,0x895c,0x8958,0x895d,0x8959,0x8988,0x89b7,0x89b6,
-0x89f6,0x8b50,0x8b48,0x8b4a,0x8b40,0x8b53,0x8b56,0x8b54,
-0x8b4b,0x8b55,0x8b51,0x8b42,0x8b52,0x8b57,0x8c43,0x8c77,
-0x8c76,0x8c9a,0x8d06,0x8d07,0x8d09,0x8dac,0x8daa,0x8dad,
-0x8dab,0x8e6d,0x8e78,0x8e73,0x8e6a,0x8e6f,0x8e7b,0x8ec2,
-0x8f52,0x8f51,0x8f4f,0x8f50,0x8f53,0x8fb4,0x9140,0x913f,
-0x91b0,0x91ad,0x93de,0x93c7,0x93cf,0x93c2,0x93da,0x93d0,
-0x93f9,0x93ec,0x93cc,0x93d9,0x93a9,0x93e6,0x93ca,0x93d4,
-0x93ee,0x93e3,0x93d5,0x93c4,0x93ce,0x93c0,0x93d2,0x93e7,
-0x957d,0x95da,0x95db,0x96e1,0x9729,0x972b,0x972c,0x9728,
-0x9726,0x97b3,0x97b7,0x97b6,0x97dd,0x97de,0x97df,0x985c,
-0x9859,0x985d,0x9857,0x98bf,0x98bd,0x98bb,0x98be,0x9948,
-0x9947,0x9943,0x99a6,0x99a7,0x9a1a,0x9a15,0x9a25,0x9a1d,
-0x9a24,0x9a1b,0x9a22,0x9a20,0x9a27,0x9a23,0x9a1e,0x9a1c,
-0x9a14,0x9ac2,0x9b0b,0x9b0a,0x9b0e,0x9b0c,0x9b37,0x9bea,
-0x9beb,0x9be0,0x9bde,0x9be4,0x9be6,0x9be2,0x9bf0,0x9bd4,
-0x9bd7,0x9bec,0x9bdc,0x9bd9,0x9be5,0x9bd5,0x9be1,0x9bda,
-0x9d77,0x9d81,0x9d8a,0x9d84,0x9d88,0x9d71,0x9d80,0x9d78,
-0x9d86,0x9d8b,0x9d8c,0x9d7d,0x9d6b,0x9d74,0x9d75,0x9d70,
-0x9d69,0x9d85,0x9d73,0x9d7b,0x9d82,0x9d6f,0x9d79,0x9d7f,
-0x9d87,0x9d68,0x9e94,0x9e91,0x9ec0,0x9efc,0x9f2d,0x9f40,
-0x9f41,0x9f4d,0x9f56,0x9f57,0x9f58,0x5337,0x56b2,0x56b5,
-0x56b3,0x58e3,0x5b45,0x5dc6,0x5dc7,0x5eee,0x5eef,0x5fc0,
-0x5fc1,0x61f9,0x6517,0x6516,0x6515,0x6513,0x65df,0x66e8,
-0x66e3,0x66e4,0x6af3,0x6af0,0x6aea,0x6ae8,0x6af9,0x6af1,
-0x6aee,0x6aef,0x703c,0x7035,0x702f,0x7037,0x7034,0x7031,
-0x7042,0x7038,0x703f,0x703a,0x7039,0x7040,0x703b,0x7033,
-0x7041,0x7213,0x7214,0x72a8,0x737d,0x737c,0x74ba,0x76ab,
-0x76aa,0x76be,0x76ed,0x77cc,0x77ce,0x77cf,0x77cd,0x77f2,
-0x7925,0x7923,0x7927,0x7928,0x7924,0x7929,0x79b2,0x7a6e,
-0x7a6c,0x7a6d,0x7af7,0x7c49,0x7c48,0x7c4a,0x7c47,0x7c45,
-0x7cee,0x7e7b,0x7e7e,0x7e81,0x7e80,0x7fba,0x7fff,0x8079,
-0x81db,0x81d9,0x820b,0x8268,0x8269,0x8622,0x85ff,0x8601,
-0x85fe,0x861b,0x8600,0x85f6,0x8604,0x8609,0x8605,0x860c,
-0x85fd,0x8819,0x8810,0x8811,0x8817,0x8813,0x8816,0x8963,
-0x8966,0x89b9,0x89f7,0x8b60,0x8b6a,0x8b5d,0x8b68,0x8b63,
-0x8b65,0x8b67,0x8b6d,0x8dae,0x8e86,0x8e88,0x8e84,0x8f59,
-0x8f56,0x8f57,0x8f55,0x8f58,0x8f5a,0x908d,0x9143,0x9141,
-0x91b7,0x91b5,0x91b2,0x91b3,0x940b,0x9413,0x93fb,0x9420,
-0x940f,0x9414,0x93fe,0x9415,0x9410,0x9428,0x9419,0x940d,
-0x93f5,0x9400,0x93f7,0x9407,0x940e,0x9416,0x9412,0x93fa,
-0x9409,0x93f8,0x940a,0x93ff,0x93fc,0x940c,0x93f6,0x9411,
-0x9406,0x95de,0x95e0,0x95df,0x972e,0x972f,0x97b9,0x97bb,
-0x97fd,0x97fe,0x9860,0x9862,0x9863,0x985f,0x98c1,0x98c2,
-0x9950,0x994e,0x9959,0x994c,0x994b,0x9953,0x9a32,0x9a34,
-0x9a31,0x9a2c,0x9a2a,0x9a36,0x9a29,0x9a2e,0x9a38,0x9a2d,
-0x9ac7,0x9aca,0x9ac6,0x9b10,0x9b12,0x9b11,0x9c0b,0x9c08,
-0x9bf7,0x9c05,0x9c12,0x9bf8,0x9c40,0x9c07,0x9c0e,0x9c06,
-0x9c17,0x9c14,0x9c09,0x9d9f,0x9d99,0x9da4,0x9d9d,0x9d92,
-0x9d98,0x9d90,0x9d9b,0x9da0,0x9d94,0x9d9c,0x9daa,0x9d97,
-0x9da1,0x9d9a,0x9da2,0x9da8,0x9d9e,0x9da3,0x9dbf,0x9da9,
-0x9d96,0x9da6,0x9da7,0x9e99,0x9e9b,0x9e9a,0x9ee5,0x9ee4,
-0x9ee7,0x9ee6,0x9f30,0x9f2e,0x9f5b,0x9f60,0x9f5e,0x9f5d,
-0x9f59,0x9f91,0x513a,0x5139,0x5298,0x5297,0x56c3,0x56bd,
-0x56be,0x5b48,0x5b47,0x5dcb,0x5dcf,0x5ef1,0x61fd,0x651b,
-0x6b02,0x6afc,0x6b03,0x6af8,0x6b00,0x7043,0x7044,0x704a,
-0x7048,0x7049,0x7045,0x7046,0x721d,0x721a,0x7219,0x737e,
-0x7517,0x766a,0x77d0,0x792d,0x7931,0x792f,0x7c54,0x7c53,
-0x7cf2,0x7e8a,0x7e87,0x7e88,0x7e8b,0x7e86,0x7e8d,0x7f4d,
-0x7fbb,0x8030,0x81dd,0x8618,0x862a,0x8626,0x861f,0x8623,
-0x861c,0x8619,0x8627,0x862e,0x8621,0x8620,0x8629,0x861e,
-0x8625,0x8829,0x881d,0x881b,0x8820,0x8824,0x881c,0x882b,
-0x884a,0x896d,0x8969,0x896e,0x896b,0x89fa,0x8b79,0x8b78,
-0x8b45,0x8b7a,0x8b7b,0x8d10,0x8d14,0x8daf,0x8e8e,0x8e8c,
-0x8f5e,0x8f5b,0x8f5d,0x9146,0x9144,0x9145,0x91b9,0x943f,
-0x943b,0x9436,0x9429,0x943d,0x943c,0x9430,0x9439,0x942a,
-0x9437,0x942c,0x9440,0x9431,0x95e5,0x95e4,0x95e3,0x9735,
-0x973a,0x97bf,0x97e1,0x9864,0x98c9,0x98c6,0x98c0,0x9958,
-0x9956,0x9a39,0x9a3d,0x9a46,0x9a44,0x9a42,0x9a41,0x9a3a,
-0x9a3f,0x9acd,0x9b15,0x9b17,0x9b18,0x9b16,0x9b3a,0x9b52,
-0x9c2b,0x9c1d,0x9c1c,0x9c2c,0x9c23,0x9c28,0x9c29,0x9c24,
-0x9c21,0x9db7,0x9db6,0x9dbc,0x9dc1,0x9dc7,0x9dca,0x9dcf,
-0x9dbe,0x9dc5,0x9dc3,0x9dbb,0x9db5,0x9dce,0x9db9,0x9dba,
-0x9dac,0x9dc8,0x9db1,0x9dad,0x9dcc,0x9db3,0x9dcd,0x9db2,
-0x9e7a,0x9e9c,0x9eeb,0x9eee,0x9eed,0x9f1b,0x9f18,0x9f1a,
-0x9f31,0x9f4e,0x9f65,0x9f64,0x9f92,0x4eb9,0x56c6,0x56c5,
-0x56cb,0x5971,0x5b4b,0x5b4c,0x5dd5,0x5dd1,0x5ef2,0x6521,
-0x6520,0x6526,0x6522,0x6b0b,0x6b08,0x6b09,0x6c0d,0x7055,
-0x7056,0x7057,0x7052,0x721e,0x721f,0x72a9,0x737f,0x74d8,
-0x74d5,0x74d9,0x74d7,0x766d,0x76ad,0x7935,0x79b4,0x7a70,
-0x7a71,0x7c57,0x7c5c,0x7c59,0x7c5b,0x7c5a,0x7cf4,0x7cf1,
-0x7e91,0x7f4f,0x7f87,0x81de,0x826b,0x8634,0x8635,0x8633,
-0x862c,0x8632,0x8636,0x882c,0x8828,0x8826,0x882a,0x8825,
-0x8971,0x89bf,0x89be,0x89fb,0x8b7e,0x8b84,0x8b82,0x8b86,
-0x8b85,0x8b7f,0x8d15,0x8e95,0x8e94,0x8e9a,0x8e92,0x8e90,
-0x8e96,0x8e97,0x8f60,0x8f62,0x9147,0x944c,0x9450,0x944a,
-0x944b,0x944f,0x9447,0x9445,0x9448,0x9449,0x9446,0x973f,
-0x97e3,0x986a,0x9869,0x98cb,0x9954,0x995b,0x9a4e,0x9a53,
-0x9a54,0x9a4c,0x9a4f,0x9a48,0x9a4a,0x9a49,0x9a52,0x9a50,
-0x9ad0,0x9b19,0x9b2b,0x9b3b,0x9b56,0x9b55,0x9c46,0x9c48,
-0x9c3f,0x9c44,0x9c39,0x9c33,0x9c41,0x9c3c,0x9c37,0x9c34,
-0x9c32,0x9c3d,0x9c36,0x9ddb,0x9dd2,0x9dde,0x9dda,0x9dcb,
-0x9dd0,0x9ddc,0x9dd1,0x9ddf,0x9de9,0x9dd9,0x9dd8,0x9dd6,
-0x9df5,0x9dd5,0x9ddd,0x9eb6,0x9ef0,0x9f35,0x9f33,0x9f32,
-0x9f42,0x9f6b,0x9f95,0x9fa2,0x513d,0x5299,0x58e8,0x58e7,
-0x5972,0x5b4d,0x5dd8,0x882f,0x5f4f,0x6201,0x6203,0x6204,
-0x6529,0x6525,0x6596,0x66eb,0x6b11,0x6b12,0x6b0f,0x6bca,
-0x705b,0x705a,0x7222,0x7382,0x7381,0x7383,0x7670,0x77d4,
-0x7c67,0x7c66,0x7e95,0x826c,0x863a,0x8640,0x8639,0x863c,
-0x8631,0x863b,0x863e,0x8830,0x8832,0x882e,0x8833,0x8976,
-0x8974,0x8973,0x89fe,0x8b8c,0x8b8e,0x8b8b,0x8b88,0x8c45,
-0x8d19,0x8e98,0x8f64,0x8f63,0x91bc,0x9462,0x9455,0x945d,
-0x9457,0x945e,0x97c4,0x97c5,0x9800,0x9a56,0x9a59,0x9b1e,
-0x9b1f,0x9b20,0x9c52,0x9c58,0x9c50,0x9c4a,0x9c4d,0x9c4b,
-0x9c55,0x9c59,0x9c4c,0x9c4e,0x9dfb,0x9df7,0x9def,0x9de3,
-0x9deb,0x9df8,0x9de4,0x9df6,0x9de1,0x9dee,0x9de6,0x9df2,
-0x9df0,0x9de2,0x9dec,0x9df4,0x9df3,0x9de8,0x9ded,0x9ec2,
-0x9ed0,0x9ef2,0x9ef3,0x9f06,0x9f1c,0x9f38,0x9f37,0x9f36,
-0x9f43,0x9f4f,0x9f71,0x9f70,0x9f6e,0x9f6f,0x56d3,0x56cd,
-0x5b4e,0x5c6d,0x652d,0x66ed,0x66ee,0x6b13,0x705f,0x7061,
-0x705d,0x7060,0x7223,0x74db,0x74e5,0x77d5,0x7938,0x79b7,
-0x79b6,0x7c6a,0x7e97,0x7f89,0x826d,0x8643,0x8838,0x8837,
-0x8835,0x884b,0x8b94,0x8b95,0x8e9e,0x8e9f,0x8ea0,0x8e9d,
-0x91be,0x91bd,0x91c2,0x946b,0x9468,0x9469,0x96e5,0x9746,
-0x9743,0x9747,0x97c7,0x97e5,0x9a5e,0x9ad5,0x9b59,0x9c63,
-0x9c67,0x9c66,0x9c62,0x9c5e,0x9c60,0x9e02,0x9dfe,0x9e07,
-0x9e03,0x9e06,0x9e05,0x9e00,0x9e01,0x9e09,0x9dff,0x9dfd,
-0x9e04,0x9ea0,0x9f1e,0x9f46,0x9f74,0x9f75,0x9f76,0x56d4,
-0x652e,0x65b8,0x6b18,0x6b19,0x6b17,0x6b1a,0x7062,0x7226,
-0x72aa,0x77d8,0x77d9,0x7939,0x7c69,0x7c6b,0x7cf6,0x7e9a,
-0x7e98,0x7e9b,0x7e99,0x81e0,0x81e1,0x8646,0x8647,0x8648,
-0x8979,0x897a,0x897c,0x897b,0x89ff,0x8b98,0x8b99,0x8ea5,
-0x8ea4,0x8ea3,0x946e,0x946d,0x946f,0x9471,0x9473,0x9749,
-0x9872,0x995f,0x9c68,0x9c6e,0x9c6d,0x9e0b,0x9e0d,0x9e10,
-0x9e0f,0x9e12,0x9e11,0x9ea1,0x9ef5,0x9f09,0x9f47,0x9f78,
-0x9f7b,0x9f7a,0x9f79,0x571e,0x7066,0x7c6f,0x883c,0x8db2,
-0x8ea6,0x91c3,0x9474,0x9478,0x9476,0x9475,0x9a60,0x9c74,
-0x9c73,0x9c71,0x9c75,0x9e14,0x9e13,0x9ef6,0x9f0a,0x9fa4,
-0x7068,0x7065,0x7cf7,0x866a,0x883e,0x883d,0x883f,0x8b9e,
-0x8c9c,0x8ea9,0x8ec9,0x974b,0x9873,0x9874,0x98cc,0x9961,
-0x99ab,0x9a64,0x9a66,0x9a67,0x9b24,0x9e15,0x9e17,0x9f48,
-0x6207,0x6b1e,0x7227,0x864c,0x8ea8,0x9482,0x9480,0x9481,
-0x9a69,0x9a68,0x9b2e,0x9e19,0x7229,0x864b,0x8b9f,0x9483,
-0x9c79,0x9eb7,0x7675,0x9a6b,0x9c7a,0x9e1d,0x7069,0x706a,
-0x9ea4,0x9f7e,0x9f49,0x9f98,0x7881,0x92b9,0x88cf,0x58bb,
-0x6052,0x7ca7,0x5afa,0x2554,0x2566,0x2557,0x2560,0x256c,
-0x2563,0x255a,0x2569,0x255d,0x2552,0x2564,0x2555,0x255e,
-0x256a,0x2561,0x2558,0x2567,0x255b,0x2553,0x2565,0x2556,
-0x255f,0x256b,0x2562,0x2559,0x2568,0x255c,0x2551,0x2550,
-0x256d,0x256e,0x2570,0x256f,0x2593};
-
-static const int big5_ucs_table_size = sizeof(big5_ucs_table)/sizeof(unsigned short);
-
-/* UCS -> Big5 */
-static const unsigned short ucs_a1_big5_table[] = {
-/* 0x0000 */
-0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
-0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
-0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
-0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
-0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
-0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
-0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
-0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
-0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
-0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
-0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
-0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
-0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
-0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
-0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
-0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1b1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c2,
-0xa258,0xa1d3,0x0000,0x0000,0x0000,0x0000,0x0000,0xa150,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa3be,
-0x0000,0xa3bc,0xa3bd,0xa3bf,0x0000,0xa1c5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa3bb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa344,0xa345,0xa346,0xa347,0xa348,0xa349,0xa34a,
-0xa34b,0xa34c,0xa34d,0xa34e,0xa34f,0xa350,0xa351,0xa352,
-0xa353,0xa354,0x0000,0xa355,0xa356,0xa357,0xa358,0xa359,
-0xa35a,0xa35b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa35c,0xa35d,0xa35e,0xa35f,0xa360,0xa361,0xa362,
-0xa363,0xa364,0xa365,0xa366,0xa367,0xa368,0xa369,0xa36a,
-0xa36b,0xa36c,0x0000,0xa36d,0xa36e,0xa36f,0xa370,0xa371,
-0xa372,0xa373};
-
-static const int ucs_a1_big5_table_min = 0x0000;
-static const int ucs_a1_big5_table_max = 0x0000 + (sizeof (ucs_a1_big5_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a2_big5_table[] = {
-/* 0x2000 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa156,0xa158,0x0000,0x0000,0x0000,
-0xa1a5,0xa1a6,0x0000,0x0000,0xa1a7,0xa1a8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa14c,0xa14b,0xa145,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1ac,0x0000,0x0000,0xa1ab,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1b0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa3e1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2100 */
-0x0000,0x0000,0x0000,0xa24a,0x0000,0xa1c1,0x0000,0x0000,
-0x0000,0xa24b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2b9,0xa2ba,0xa2bb,0xa2bc,0xa2bd,0xa2be,0xa2bf,0xa2c0,
-0xa2c1,0xa2c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1f6,0xa1f4,0xa1f7,0xa1f5,0x0000,0x0000,0xa1f8,0xa1f9,
-0xa1fb,0xa1fa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa241,0x0000,0x0000,
-0x0000,0x0000,0xa1d4,0x0000,0x0000,0x0000,0xa1db,0xa1e8,
-0xa1e7,0x0000,0x0000,0xa1fd,0x0000,0xa1fc,0x0000,0x0000,
-0x0000,0xa1e4,0xa1e5,0xa1ec,0x0000,0x0000,0xa1ed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1ef,0xa1ee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1dc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1da,0xa1dd,0x0000,0x0000,0x0000,0x0000,0xa1d8,0xa1d9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1f2,0x0000,0x0000,
-0x0000,0xa1f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1e6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1e9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa277,0x0000,0xa278,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa27a,0x0000,0x0000,0x0000,
-0xa27b,0x0000,0x0000,0x0000,0xa27c,0x0000,0x0000,0x0000,
-0xa27d,0x0000,0x0000,0x0000,0xa275,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa274,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa273,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa272,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa271,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf9f9,0xf9f8,0xf9e6,0xf9ef,0xf9dd,0xf9e8,0xf9f1,0xf9df,
-0xf9ec,0xf9f5,0xf9e3,0xf9ee,0xf9f7,0xf9e5,0xf9e9,0xf9f2,
-0xf9e0,0xf9eb,0xf9f4,0xf9e2,0xf9e7,0xf9f0,0xf9de,0xf9ed,
-0xf9f6,0xf9e4,0xf9ea,0xf9f3,0xf9e1,0xf9fa,0xf9fb,0xf9fd,
-0xf9fc,0xa2ac,0xa2ad,0xa2ae,0xa15a,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa262,0xa263,0xa264,0xa265,0xa266,0xa267,0xa268,
-0xa269,0xa270,0xa26f,0xa26e,0xa26d,0xa26c,0xa26b,0xa26a,
-0x0000,0x0000,0x0000,0xf9fe,0xa276,0xa279,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1bd,0xa1bc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1b6,0xa1b5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1bf,0xa1be,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1bb,0xa1ba,
-0x0000,0x0000,0x0000,0xa1b3,0x0000,0x0000,0xa1b7,0xa1b4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa2a8,0xa2a9,0xa2ab,0xa2aa,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1b9,0xa1b8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1f0,0x0000,0xa1f1};
-
-static const int ucs_a2_big5_table_min = 0x2000;
-static const int ucs_a2_big5_table_max = 0x2000 + (sizeof (ucs_a2_big5_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a3_big5_table[] = {
-/* 0x2f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa140,0xa142,0xa143,0xa1b2,0x0000,0x0000,0x0000,0x0000,
-0xa171,0xa172,0xa16d,0xa16e,0xa175,0xa176,0xa179,0xa17a,
-0xa169,0xa16a,0xa245,0x0000,0xa165,0xa166,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a9,0xa1aa,0x0000,
-0x0000,0xa2c3,0xa2c4,0xa2c5,0xa2c6,0xa2c7,0xa2c8,0xa2c9,
-0xa2ca,0xa2cb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa374,0xa375,0xa376,
-0xa377,0xa378,0xa379,0xa37a,0xa37b,0xa37c,0xa37d,0xa37e,
-0xa3a1,0xa3a2,0xa3a3,0xa3a4,0xa3a5,0xa3a6,0xa3a7,0xa3a8,
-0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,0xa3b0,
-0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,0xa3b8,
-0xa3b9,0xa3ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1c0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa255,0xa256,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa250,0xa251,0xa252,0x0000,
-0x0000,0xa254,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa257,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa253,0x0000,
-0x0000,0xa1eb,0xa1ea,0x0000,0x0000,0xa24f};
-
-static const int ucs_a3_big5_table_min = 0x2f00;
-static const int ucs_a3_big5_table_max = 0x2f00 + (sizeof (ucs_a3_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_i_big5_table[] = {
-/* 0x4d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa440,0xa442,0x0000,0xa443,0x0000,0x0000,0x0000,0xc945,
-0xa456,0xa454,0xa457,0xa455,0xc946,0xa4a3,0xc94f,0xc94d,
-0xa4a2,0xa4a1,0x0000,0x0000,0xa542,0xa541,0xa540,0x0000,
-0xa543,0xa4fe,0x0000,0x0000,0x0000,0x0000,0xa5e0,0xa5e1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8c3,0x0000,
-0x0000,0x0000,0x0000,0xa458,0x0000,0xa4a4,0xc950,0x0000,
-0xa4a5,0xc963,0xa6ea,0xcbb1,0x0000,0x0000,0x0000,0x0000,
-0xa459,0xa4a6,0x0000,0xa544,0xc964,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc940,0xa444,0x0000,0xa45b,0x0000,0xc947,
-0xa45c,0x0000,0x0000,0xa4a7,0x0000,0xa545,0xa547,0xa546,
-0x0000,0x0000,0xa5e2,0xa5e3,0x0000,0x0000,0xa8c4,0x0000,
-0xadbc,0xa441,0x0000,0x0000,0xc941,0xa445,0xa45e,0xa45d,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa5e4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8c5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0ae,0xd44b,
-0x0000,0x0000,0xb6c3,0xdcb1,0xdcb2,0x0000,0xa446,0x0000,
-0xa4a9,0x0000,0x0000,0xa8c6,0xa447,0xc948,0xa45f,0x0000,
-0x0000,0xa4aa,0xa4ac,0xc951,0xa4ad,0xa4ab,0x0000,0x0000,
-0x0000,0xa5e5,0x0000,0xa8c7,0x0000,0x0000,0xa8c8,0xab45,
-0x0000,0xa460,0xa4ae,0x0000,0xa5e6,0xa5e8,0xa5e7,0x0000,
-0xa6eb,0x0000,0x0000,0xa8c9,0xa8ca,0xab46,0xab47,0x0000,
-0x0000,0x0000,0x0000,0xadbd,0x0000,0x0000,0xdcb3,0x0000,
-0x0000,0xf6d6,0xa448,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa4b0,0xa4af,0xc952,0xa4b1,0xa4b7,0x0000,0xa4b2,0xa4b3,
-0xc954,0xc953,0xa4b5,0xa4b6,0x0000,0xa4b4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa54a,0xa54b,0xa54c,0xa54d,
-0xa549,0xa550,0xc96a,0x0000,0xc966,0xc969,0xa551,0xa561,
-0x0000,0xc968,0x0000,0xa54e,0xa54f,0xa548,0x0000,0x0000,
-0xc965,0xc967,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa5f5,0xc9b0,0xa5f2,0xa5f6,0xc9ba,0xc9ae,0xa5f3,0xc9b2,
-0x0000,0x0000,0x0000,0xa5f4,0x0000,0xa5f7,0x0000,0xa5e9,
-0xc9b1,0xa5f8,0xc9b5,0x0000,0xc9b9,0xc9b6,0x0000,0x0000,
-0xc9b3,0xa5ea,0xa5ec,0xa5f9,0x0000,0xa5ee,0xc9ab,0xa5f1,
-0xa5ef,0xa5f0,0xc9bb,0xc9b8,0xc9af,0xa5ed,0x0000,0x0000,
-0xc9ac,0xa5eb,0x0000,0x0000,0x0000,0xc9b4,0x0000,0x0000,
-0x0000,0x0000,0xc9b7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc9ad,0xca66,0x0000,0xa742,
-0xa6f4,0x0000,0x0000,0xca67,0xa6f1,0x0000,0xa744,0x0000,
-0xa6f9,0x0000,0xa6f8,0xca5b,0xa6fc,0xa6f7,0xca60,0xca68,
-0x0000,0xca64,0x0000,0xa6fa,0x0000,0x0000,0xa6fd,0xa6ee,
-0xa747,0xca5d,0x0000,0x0000,0xcbbd,0xa6ec,0xa743,0xa6ed,
-0xa6f5,0xa6f6,0xca62,0xca5e,0xa6fb,0xa6f3,0xca5a,0xa6ef,
-0xca65,0xa745,0xa748,0xa6f2,0xa740,0xa746,0xa6f0,0xca63,
-0xa741,0xca69,0xca5c,0xa6fe,0xca5f,0x0000,0x0000,0xca61,
-0x0000,0xa8d8,0xcbbf,0xcbcb,0xa8d0,0x0000,0xcbcc,0xa8cb,
-0xa8d5,0x0000,0x0000,0xa8ce,0xcbb9,0xa8d6,0xcbb8,0xcbbc,
-0xcbc3,0xcbc1,0xa8de,0xa8d9,0xcbb3,0xcbb5,0xa8db,0xa8cf,
-0xcbb6,0xcbc2,0xcbc9,0xa8d4,0xcbbb,0xcbb4,0xa8d3,0xcbb7,
-0xa8d7,0xcbba,0x0000,0xa8d2,0x0000,0xa8cd,0x0000,0xa8dc,
-0xcbc4,0xa8dd,0xcbc8,0x0000,0xcbc6,0xcbca,0xa8da,0xcbbe,
-0xcbb2,0x0000,0xcbc0,0xa8d1,0xcbc5,0xa8cc,0xcbc7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xab56,0xab4a,
-0x0000,0x0000,0xcde0,0xcde8,0x0000,0xab49,0xab51,0xab5d,
-0x0000,0xcdee,0xcdec,0xcde7,0x0000,0x0000,0x0000,0xab4b,
-0xcded,0xcde3,0xab59,0xab50,0xab58,0xcdde,0x0000,0xcdea,
-0x0000,0xcde1,0xab54,0xcde2,0x0000,0xcddd,0xab5b,0xab4e,
-0xab57,0xab4d,0x0000,0xcddf,0xcde4,0x0000,0xcdeb,0xab55,
-0xab52,0xcde6,0xab5a,0xcde9,0xcde5,0xab4f,0xab5c,0xab53,
-0xab4c,0xab48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdef,0x0000,0xadd7,0xadc1,
-0x0000,0xadd1,0x0000,0xadd6,0xd0d0,0xd0cf,0xd0d4,0xd0d5,
-0xadc4,0x0000,0xadcd,0x0000,0x0000,0x0000,0xadda,0x0000,
-0xadce,0x0000,0x0000,0x0000,0x0000,0xd0c9,0xadc7,0xd0ca,
-0x0000,0xaddc,0x0000,0xadd3,0xadbe,0xadbf,0xd0dd,0xb0bf,
-0x0000,0xadcc,0xadcb,0xd0cb,0xadcf,0xd45b,0xadc6,0xd0d6,
-0xadd5,0xadd4,0xadca,0xd0ce,0xd0d7,0x0000,0xd0c8,0xadc9,
-0xd0d8,0xadd2,0xd0cc,0xadc0,0x0000,0xadc3,0xadc2,0xd0d9,
-0xadd0,0xadc5,0xadd9,0xaddb,0xd0d3,0xadd8,0x0000,0xd0db,
-0xd0cd,0xd0dc,0x0000,0xd0d1,0x0000,0xd0da,0x0000,0xd0d2,
-0x0000,0x0000,0x0000,0x0000,0xadc8,0x0000,0x0000,0x0000,
-0xd463,0xd457,0x0000,0xb0b3,0x0000,0xd45c,0xd462,0xb0b2,
-0xd455,0xb0b6,0xd459,0xd452,0xb0b4,0xd456,0xb0b9,0xb0be,
-0x0000,0xd467,0x0000,0xd451,0x0000,0xb0ba,0x0000,0xd466,
-0x0000,0x0000,0xb0b5,0xd458,0xb0b1,0xd453,0xd44f,0xd45d,
-0xd450,0xd44e,0xd45a,0xd460,0xd461,0xb0b7,0x0000,0x0000,
-0xd85b,0xd45e,0xd44d,0xd45f,0x0000,0xb0c1,0xd464,0xb0c0,
-0xd44c,0x0000,0xd454,0xd465,0xb0bc,0xb0bb,0xb0b8,0xb0bd,
-0x0000,0x0000,0xb0af,0x0000,0x0000,0xb0b0,0x0000,0x0000,
-0xb3c8,0x0000,0xd85e,0xd857,0x0000,0xb3c5,0x0000,0xd85f,
-0x0000,0x0000,0x0000,0xd855,0xd858,0xb3c4,0xd859,0x0000,
-0x0000,0xb3c7,0xd85d,0x0000,0xd853,0xd852,0xb3c9,0x0000,
-0xb3ca,0xb3c6,0xb3cb,0xd851,0xd85c,0xd85a,0xd854,0x0000,
-0x0000,0x0000,0xb3c3,0xd856,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb6ca,0xb6c4,0xdcb7,0xb6cd,
-0xdcbd,0xdcc0,0xb6c6,0xb6c7,0xdcba,0xb6c5,0xdcc3,0xb6cb,
-0xdcc4,0x0000,0xdcbf,0xb6cc,0x0000,0xdcb4,0xb6c9,0xdcb5,
-0x0000,0xdcbe,0xdcbc,0x0000,0xdcb8,0xb6c8,0xdcb6,0xb6ce,
-0xdcbb,0xdcc2,0xdcb9,0xdcc1,0x0000,0x0000,0xb9b6,0xb9b3,
-0x0000,0xb9b4,0x0000,0xe0f9,0xe0f1,0xb9b2,0xb9af,0xe0f2,
-0x0000,0x0000,0xb9b1,0xe0f5,0x0000,0xe0f7,0x0000,0x0000,
-0xe0fe,0x0000,0x0000,0xe0fd,0xe0f8,0xb9ae,0xe0f0,0xb9ac,
-0xe0f3,0xb9b7,0xe0f6,0x0000,0xe0fa,0xb9b0,0xb9ad,0xe0fc,
-0xe0fb,0xb9b5,0x0000,0xe0f4,0x0000,0xbbf8,0xe4ec,0x0000,
-0xe4e9,0xbbf9,0x0000,0xbbf7,0x0000,0xe4f0,0xe4ed,0xe4e6,
-0xbbf6,0x0000,0xbbfa,0xe4e7,0xbbf5,0xbbfd,0xe4ea,0xe4eb,
-0xbbfb,0xbbfc,0xe4f1,0xe4ee,0xe4ef,0x0000,0x0000,0x0000,
-0xbeaa,0xe8f8,0xbea7,0xe8f5,0xbea9,0xbeab,0x0000,0xe8f6,
-0xbea8,0x0000,0xe8f7,0x0000,0xe8f4,0x0000,0x0000,0xc076,
-0xecbd,0xc077,0xecbb,0x0000,0xecbc,0xecba,0xecb9,0x0000,
-0x0000,0xecbe,0xc075,0x0000,0x0000,0xefb8,0xefb9,0x0000,
-0xe4e8,0xefb7,0xc078,0xc35f,0xf1eb,0xf1ec,0x0000,0xc4d7,
-0xc4d8,0xf5c1,0xf5c0,0xc56c,0xc56b,0xf7d0,0x0000,0xa449,
-0xa461,0xa4b9,0x0000,0xa4b8,0xa553,0xa552,0xa5fc,0xa5fb,
-0xa5fd,0xa5fa,0x0000,0xa74a,0xa749,0xa74b,0x0000,0x0000,
-0x0000,0x0000,0xa8e0,0x0000,0xa8df,0xa8e1,0x0000,0xab5e,
-0x0000,0xa259,0xd0de,0xa25a,0xb0c2,0xa25c,0xa25b,0xd860,
-0x0000,0xa25d,0xb9b8,0xa25e,0x0000,0xa44a,0x0000,0xa4ba,
-0xa5fe,0xa8e2,0x0000,0xa44b,0xa4bd,0xa4bb,0xa4bc,0x0000,
-0x0000,0xa640,0x0000,0x0000,0x0000,0xa74c,0xa8e4,0xa8e3,
-0xa8e5,0x0000,0x0000,0x0000,0xaddd,0x0000,0x0000,0x0000,
-0xbeac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc94e,
-0x0000,0xa554,0xa555,0x0000,0x0000,0xa641,0x0000,0xca6a,
-0x0000,0xab60,0xab5f,0xd0e0,0xd0df,0xb0c3,0x0000,0xa4be,
-0xc955,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbcd,0x0000,
-0xab61,0x0000,0xade0,0x0000,0xadde,0xaddf,0x0000,0x0000,
-0x0000,0x0000,0xbead,0x0000,0xa556,0x0000,0x0000,0x0000,
-0xa642,0xc9bc,0x0000,0x0000,0x0000,0x0000,0xa74d,0xa74e,
-0x0000,0xca6b,0x0000,0x0000,0xcbce,0xa8e6,0xcbcf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd0e2,0xd0e3,0xade3,0x0000,
-0xd0e4,0x0000,0xd0e1,0xade4,0xade2,0xade1,0xd0e5,0x0000,
-0xd468,0x0000,0x0000,0x0000,0xd861,0x0000,0x0000,0xdcc5,
-0xe140,0x0000,0x0000,0x0000,0xbbfe,0xbeae,0xe8f9,0x0000,
-0xa44c,0xa45a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb0c4,0xb3cd,0x0000,0xb9b9,0x0000,0xc942,0xa4bf,0x0000,
-0xa559,0xa557,0xa558,0x0000,0x0000,0xa8e7,0x0000,0x0000,
-0xa44d,0xa44e,0x0000,0xa462,0x0000,0x0000,0xa4c0,0xa4c1,
-0xa4c2,0xc9be,0xa55a,0x0000,0xc96b,0x0000,0xa646,0x0000,
-0xc9bf,0xa644,0xa645,0xc9bd,0x0000,0x0000,0xa647,0xa643,
-0x0000,0x0000,0x0000,0x0000,0xca6c,0xaaec,0xca6d,0x0000,
-0x0000,0xca6e,0x0000,0x0000,0xa750,0xa74f,0x0000,0x0000,
-0xa753,0xa751,0xa752,0x0000,0x0000,0x0000,0xa8ed,0x0000,
-0xa8ec,0xcbd4,0xcbd1,0xcbd2,0x0000,0xcbd0,0xa8ee,0xa8ea,
-0xa8e9,0x0000,0xa8eb,0xa8e8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa8ef,0x0000,0xab63,0xcdf0,0x0000,0xcbd3,0xab68,
-0x0000,0xcdf1,0xab64,0xab67,0xab66,0xab65,0xab62,0x0000,
-0x0000,0x0000,0xd0e8,0x0000,0xade7,0xd0eb,0xade5,0x0000,
-0x0000,0x0000,0xd0e7,0xade8,0xade6,0xade9,0xd0e9,0xd0ea,
-0x0000,0xd0e6,0xd0ec,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb3d1,0xb0c5,0xd469,0xd46b,0xd46a,0xd46c,0xb0c6,
-0x0000,0x0000,0xb3ce,0x0000,0xb3cf,0xb3d0,0x0000,0xb6d0,
-0xdcc7,0x0000,0xdcc6,0xdcc8,0xdcc9,0xb6d1,0x0000,0xb6cf,
-0xe141,0xe142,0xb9bb,0xb9ba,0xe35a,0x0000,0x0000,0xbc40,
-0xbc41,0xbc42,0xbc44,0xe4f2,0xe4f3,0xbc43,0x0000,0x0000,
-0x0000,0xbeaf,0x0000,0xbeb0,0x0000,0x0000,0xf1ed,0xf5c3,
-0xf5c2,0xf7d1,0x0000,0xa44f,0x0000,0x0000,0x0000,0xa55c,
-0xa55b,0x0000,0x0000,0xa648,0x0000,0x0000,0xc9c0,0x0000,
-0x0000,0xa755,0xa756,0xa754,0xa757,0xca6f,0xca70,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8f1,0xcbd5,0x0000,0xa8f0,0x0000,
-0xcdf2,0xab6c,0xcdf3,0xab6b,0x0000,0x0000,0x0000,0xab69,
-0x0000,0xab6a,0x0000,0x0000,0x0000,0xd0ed,0x0000,0x0000,
-0x0000,0x0000,0xb0c7,0xd46e,0x0000,0xb0ca,0xd46d,0xb1e5,
-0xb0c9,0xb0c8,0x0000,0xb3d4,0x0000,0xb3d3,0xb3d2,0xb6d2,
-0x0000,0x0000,0xb6d5,0xb6d6,0xb6d4,0x0000,0xb6d3,0x0000,
-0x0000,0xe143,0x0000,0xe144,0x0000,0x0000,0x0000,0xe4f5,
-0xbc45,0xe4f4,0x0000,0xbeb1,0xecbf,0xc079,0x0000,0xf1ee,
-0xc455,0x0000,0xa463,0xa4c3,0xc956,0x0000,0xa4c4,0xa4c5,
-/* 0x5300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa55d,0xa55e,0x0000,
-0xa649,0xca71,0xcbd6,0xcbd7,0x0000,0xab6d,0xd0ee,0xb0cc,
-0xb0cb,0xd863,0xd862,0x0000,0x0000,0xa450,0xa4c6,0xa55f,
-0x0000,0xb0cd,0xc943,0x0000,0xc96c,0xa560,0x0000,0xc9c2,
-0xa64b,0xa64a,0xc9c1,0xa758,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xadea,0x0000,0x0000,0xd46f,0x0000,0xb6d7,
-0xe145,0xb9bc,0x0000,0x0000,0xe8fa,0x0000,0x0000,0xf3fd,
-0x0000,0xa4c7,0x0000,0x0000,0xcbd8,0xcdf4,0xb0d0,0xb0ce,
-0xb0cf,0xa451,0x0000,0xa464,0xa2cd,0xa4ca,0x0000,0xa4c9,
-0xa4c8,0xa563,0xa562,0x0000,0xc96d,0xc9c3,0x0000,0x0000,
-0x0000,0xa8f5,0xa8f2,0xa8f4,0xa8f3,0x0000,0x0000,0xab6e,
-0x0000,0x0000,0xb3d5,0x0000,0xa452,0x0000,0xa4cb,0x0000,
-0xa565,0xa564,0x0000,0xca72,0x0000,0x0000,0xa8f6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc957,0x0000,0xa567,0xa566,
-0xa64c,0xa64d,0xca73,0xa759,0x0000,0xa75a,0x0000,0xa8f7,
-0xa8f8,0xa8f9,0x0000,0xab6f,0xcdf5,0x0000,0x0000,0xadeb,
-0x0000,0x0000,0xc944,0x0000,0xa4cc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc9c4,0x0000,0x0000,0x0000,0xca74,0xca75,
-0x0000,0x0000,0xcbd9,0x0000,0xcbda,0x0000,0xcdf7,0xcdf6,
-0xcdf9,0xcdf8,0xab70,0x0000,0xd470,0xaded,0xd0ef,0xadec,
-0x0000,0x0000,0x0000,0x0000,0xd864,0xb3d6,0x0000,0xd865,
-0x0000,0x0000,0x0000,0x0000,0xe146,0xb9bd,0x0000,0x0000,
-0x0000,0x0000,0xbc46,0x0000,0xf1ef,0x0000,0x0000,0x0000,
-0x0000,0xc958,0x0000,0xa568,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb0d1,0x0000,0x0000,0x0000,0x0000,
-0xa453,0xa465,0xa4ce,0xa4cd,0x0000,0xa4cf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa8fb,0x0000,0xa8fa,0xa8fc,
-0x0000,0x0000,0x0000,0xab71,0x0000,0x0000,0x0000,0xadee,
-0x0000,0xe8fb,0xc24f,0xa466,0xa56a,0xa579,0xa574,0x0000,
-0xa56f,0xa56e,0xa575,0xa573,0xa56c,0xa57a,0xa56d,0xa569,
-0xa578,0xa577,0xa576,0xa56b,0x0000,0xa572,0x0000,0x0000,
-0xa571,0x0000,0x0000,0xa57b,0xa570,0x0000,0x0000,0x0000,
-/* 0x5400 */
-0x0000,0xa653,0x0000,0xa659,0xa655,0x0000,0xa65b,0xc9c5,
-0xa658,0xa64e,0xa651,0xa654,0xa650,0xa657,0xa65a,0xa64f,
-0xa652,0xa656,0xa65c,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xca7e,0xca7b,0x0000,0xa767,0xca7c,0xa75b,0xa75d,0xa775,
-0xa770,0x0000,0x0000,0x0000,0xcaa5,0xca7d,0xa75f,0xa761,
-0xcaa4,0xa768,0xca78,0xa774,0xa776,0xa75c,0xa76d,0x0000,
-0xca76,0xa773,0x0000,0xa764,0x0000,0xa76e,0xa76f,0xca77,
-0xa76c,0xa76a,0x0000,0xa76b,0xa771,0xcaa1,0xa75e,0x0000,
-0xa772,0xcaa3,0xa766,0xa763,0x0000,0xca7a,0xa762,0xcaa6,
-0xa765,0x0000,0xa769,0x0000,0x0000,0x0000,0xa760,0xcaa2,
-0x0000,0x0000,0x0000,0x0000,0xca79,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbeb,0xcbea,0xa94f,0xcbed,0xcbef,0xcbe4,0xcbe7,0xcbee,
-0xa950,0x0000,0x0000,0xcbe1,0xcbe5,0x0000,0x0000,0xcbe9,
-0xce49,0xa94b,0xce4d,0xa8fd,0xcbe6,0xa8fe,0xa94c,0xa945,
-0xa941,0x0000,0xcbe2,0xa944,0xa949,0xa952,0xcbe3,0xcbdc,
-0xa943,0xcbdd,0xcbdf,0x0000,0xa946,0x0000,0xa948,0xcbdb,
-0xcbe0,0x0000,0x0000,0xa951,0xa94d,0xcbe8,0xa953,0x0000,
-0xa94a,0xcbde,0xa947,0x0000,0x0000,0xa942,0xa940,0x0000,
-0xcbec,0x0000,0xa94e,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xce48,0xcdfb,0xce4b,0x0000,0x0000,0xcdfd,0xab78,0xaba8,
-0xab74,0xaba7,0xab7d,0xaba4,0xab72,0xcdfc,0xce43,0xaba3,
-0xce4f,0xaba5,0x0000,0xab79,0x0000,0x0000,0xce45,0xce42,
-0xab77,0x0000,0xcdfa,0xaba6,0xce4a,0xab7c,0xce4c,0xaba9,
-0xab73,0xab7e,0xab7b,0xce40,0xaba1,0xce46,0xce47,0xab7a,
-0xaba2,0xab76,0x0000,0x0000,0x0000,0x0000,0xab75,0xcdfe,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce44,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce4e,0x0000,
-0xd144,0xadfb,0xd0f1,0x0000,0xd0f6,0xadf4,0xae40,0xd0f4,
-0xadef,0xadf9,0xadfe,0xd0fb,0x0000,0xadfa,0xadfd,0x0000,
-0x0000,0xd0fe,0xadf5,0xd0f5,0x0000,0x0000,0x0000,0xd142,
-0xd143,0x0000,0xadf7,0xd141,0xadf3,0xae43,0x0000,0xd0f8,
-/* 0x5500 */
-0x0000,0xadf1,0x0000,0xd146,0xd0f9,0xd0fd,0xadf6,0xae42,
-0xd0fa,0xadfc,0xd140,0xd147,0xd4a1,0x0000,0xd145,0xae44,
-0xadf0,0xd0fc,0xd0f3,0x0000,0xadf8,0x0000,0x0000,0xd0f2,
-0x0000,0x0000,0xd0f7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0f0,0xae41,
-0x0000,0x0000,0xd477,0x0000,0xb0e4,0xd4a7,0xb0e2,0xb0df,
-0xd47c,0xb0db,0xd4a2,0xb0e6,0xd476,0xd47b,0xd47a,0xadf2,
-0xb0e1,0xd4a5,0x0000,0xd4a8,0xd473,0x0000,0xb3e8,0x0000,
-0xd4a9,0xb0e7,0x0000,0xb0d9,0xb0d6,0xd47e,0xb0d3,0x0000,
-0xd4a6,0x0000,0xb0da,0xd4aa,0x0000,0xd474,0xd4a4,0xb0dd,
-0xd475,0xd478,0xd47d,0x0000,0x0000,0xb0de,0xb0dc,0xb0e8,
-0x0000,0x0000,0x0000,0x0000,0xb0e3,0x0000,0xb0d7,0xb1d2,
-0x0000,0xb0d8,0xd479,0xb0e5,0xb0e0,0xd4a3,0xb0d5,0x0000,
-0x0000,0x0000,0xb0d4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd471,0xd472,0xd86a,
-0x0000,0x0000,0x0000,0xb3d7,0xb3da,0xd875,0xb3ee,0xd878,
-0xb3d8,0xd871,0xb3de,0xb3e4,0xb5bd,0x0000,0x0000,0xb3e2,
-0xd86e,0xb3ef,0xb3db,0xb3e3,0xd876,0xdcd7,0xd87b,0xd86f,
-0x0000,0xd866,0xd873,0xd86d,0xb3e1,0xd879,0x0000,0x0000,
-0xb3dd,0xb3f1,0xb3ea,0x0000,0xb3df,0xb3dc,0x0000,0xb3e7,
-0x0000,0xd87a,0xd86c,0xd872,0xd874,0xd868,0xd877,0xb3d9,
-0xd867,0x0000,0xb3e0,0xb3f0,0xb3ec,0xd869,0xb3e6,0x0000,
-0x0000,0xb3ed,0xb3e9,0xb3e5,0x0000,0xd870,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb3eb,0x0000,0x0000,0x0000,0xdcd5,
-0xdcd1,0x0000,0xdce0,0xdcca,0xdcd3,0xb6e5,0xb6e6,0xb6de,
-0xdcdc,0xb6e8,0xdccf,0xdcce,0xdccc,0xdcde,0xb6dc,0xdcd8,
-0xdccd,0xb6df,0xdcd6,0xb6da,0xdcd2,0xdcd9,0xdcdb,0x0000,
-0x0000,0xdcdf,0xb6e3,0xdccb,0xb6dd,0xdcd0,0x0000,0xb6d8,
-0x0000,0xb6e4,0xdcda,0xb6e0,0xb6e1,0xb6e7,0xb6db,0xa25f,
-0xb6d9,0xdcd4,0x0000,0x0000,0x0000,0x0000,0x0000,0xb6e2,
-0x0000,0x0000,0xdcdd,0x0000,0x0000,0x0000,0xb9cd,0xb9c8,
-0x0000,0xe155,0xe151,0x0000,0xe14b,0xb9c2,0xb9be,0xe154,
-0xb9bf,0xe14e,0xe150,0x0000,0xe153,0x0000,0xb9c4,0x0000,
-0xb9cb,0xb9c5,0x0000,0x0000,0xe149,0xb9c6,0xb9c7,0xe14c,
-0xb9cc,0x0000,0xe14a,0xe14f,0xb9c3,0xe148,0xb9c9,0xb9c1,
-0x0000,0x0000,0x0000,0xb9c0,0xe14d,0xe152,0x0000,0xb9ca,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe147,
-0x0000,0xbc4d,0xe547,0x0000,0xe544,0x0000,0xbc47,0xbc53,
-0xbc54,0x0000,0xbc4a,0xe542,0xbc4c,0xe4f9,0xbc52,0x0000,
-0xe546,0xbc49,0xe548,0xbc48,0x0000,0xe543,0xe545,0xbc4b,
-0xe541,0xe4fa,0xe4f7,0x0000,0x0000,0xd86b,0xe4fd,0x0000,
-0xe4f6,0xe4fc,0xe4fb,0x0000,0xe4f8,0x0000,0xbc4f,0x0000,
-0x0000,0x0000,0x0000,0xbc4e,0x0000,0x0000,0x0000,0xbc50,
-0xe4fe,0xbeb2,0xe540,0x0000,0x0000,0x0000,0xe945,0x0000,
-0xe8fd,0x0000,0xbebe,0xe942,0xbeb6,0xbeba,0xe941,0x0000,
-0xbeb9,0xbeb5,0xbeb8,0xbeb3,0xbebd,0xe943,0xe8fe,0xbebc,
-0xe8fc,0xbebb,0xe944,0xe940,0xbc51,0x0000,0xbebf,0xe946,
-0xbeb7,0xbeb4,0x0000,0x0000,0x0000,0x0000,0xecc6,0xecc8,
-0xc07b,0xecc9,0xecc7,0xecc5,0xecc4,0xc07d,0xecc3,0xc07e,
-0x0000,0x0000,0x0000,0x0000,0xecc1,0xecc2,0xc07a,0xc0a1,
-0xc07c,0x0000,0x0000,0xecc0,0x0000,0xc250,0x0000,0xefbc,
-0xefba,0xefbf,0xefbd,0x0000,0xefbb,0xefbe,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xc360,0xf1f2,0xf1f3,
-0xc456,0x0000,0xf1f4,0xf1f0,0xf1f5,0xf1f1,0xc251,0x0000,
-0x0000,0x0000,0xf3fe,0xf441,0xc459,0xf440,0xc458,0xc457,
-0x0000,0x0000,0x0000,0x0000,0xc45a,0xf5c5,0xf5c6,0x0000,
-0xc4da,0xc4d9,0xc4db,0xf5c4,0x0000,0xf6d8,0xf6d7,0x0000,
-0xc56d,0xc56f,0xc56e,0xf6d9,0xc5c8,0xf8a6,0x0000,0x0000,
-0x0000,0xc5f1,0x0000,0xf8a5,0xf8ee,0x0000,0x0000,0xc949,
-0x0000,0x0000,0xa57d,0xa57c,0x0000,0xa65f,0xa65e,0xc9c7,
-0xa65d,0xc9c6,0x0000,0x0000,0xa779,0xcaa9,0x0000,0xcaa8,
-0x0000,0x0000,0xa777,0xa77a,0x0000,0x0000,0xcaa7,0x0000,
-0xa778,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbf0,
-0x0000,0xcbf1,0xa954,0x0000,0x0000,0x0000,0x0000,0xabaa,
-/* 0x5700 */
-0x0000,0xd148,0xd149,0xae45,0xae46,0x0000,0x0000,0xd4ac,
-0xb0e9,0xb0eb,0xd4ab,0xb0ea,0xd87c,0xb3f2,0x0000,0x0000,
-0x0000,0x0000,0xb6e9,0xb6ea,0xdce1,0x0000,0xb9cf,0x0000,
-0xb9ce,0x0000,0xe549,0xe948,0xe947,0x0000,0xf96b,0xa467,
-0xc959,0x0000,0xc96e,0xc96f,0x0000,0x0000,0x0000,0x0000,
-0xa662,0xa666,0xc9c9,0x0000,0xa664,0xa663,0xc9c8,0xa665,
-0xa661,0x0000,0x0000,0xa660,0xc9ca,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa7a6,0x0000,0x0000,0xa7a3,0x0000,
-0xa77d,0xcaaa,0x0000,0x0000,0x0000,0xcaab,0x0000,0xa7a1,
-0x0000,0xcaad,0xa77b,0xcaae,0xcaac,0xa77e,0xa7a2,0xa7a5,
-0xa7a4,0xa77c,0xcaaf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa959,0xcbfe,0x0000,0xa95b,0x0000,0xa95a,0x0000,
-0xcc40,0xa958,0xa957,0xcbf5,0x0000,0xcbf4,0x0000,0xcbf2,
-0xcbf7,0xcbf6,0xcbf3,0xcbfc,0xcbfd,0xcbfa,0xcbf8,0xa956,
-0x0000,0x0000,0x0000,0xcbfb,0xa95c,0xcc41,0x0000,0x0000,
-0xcbf9,0x0000,0xabab,0xa955,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xabac,0xce54,0x0000,0x0000,0xce5a,
-0x0000,0x0000,0x0000,0xabb2,0xce58,0xce5e,0x0000,0xce55,
-0xce59,0xce5b,0xce5d,0xce57,0x0000,0xce56,0xce51,0xce52,
-0xabad,0x0000,0xabaf,0xabae,0xce53,0xce5c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xabb1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xce50,0xd153,0x0000,
-0xd152,0xd157,0xd14e,0x0000,0xd151,0xd150,0x0000,0xd154,
-0x0000,0xd158,0xae47,0xae4a,0x0000,0x0000,0xd14f,0xd155,
-0x0000,0x0000,0x0000,0xae49,0xd14a,0x0000,0xabb0,0xd4ba,
-0xd156,0x0000,0xd14d,0x0000,0xae48,0xd14c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4b1,0x0000,0x0000,0xb0ec,
-0xb0f0,0xd4c1,0xd4af,0xd4bd,0xb0f1,0xd4bf,0x0000,0xd4c5,
-0x0000,0xd4c9,0x0000,0x0000,0xd4c0,0xd4b4,0xd4bc,0x0000,
-0xd4ca,0xd4c8,0xd4be,0xd4b9,0xd4b2,0xd8a6,0xd4b0,0xb0f5,
-0xd4b7,0xb0f6,0xb0f2,0xd4ad,0xd4c3,0xd4b5,0x0000,0x0000,
-0xd4b3,0xd4c6,0xb0f3,0x0000,0xd4cc,0xb0ed,0xb0ef,0xd4bb,
-0xd4b6,0xae4b,0xb0ee,0xd4b8,0xd4c7,0xd4cb,0xd4c2,0x0000,
-0xd4c4,0x0000,0x0000,0x0000,0xd4ae,0x0000,0x0000,0x0000,
-0x0000,0xd8a1,0x0000,0xd8aa,0xd8a9,0xb3fa,0xd8a2,0x0000,
-0xb3fb,0xb3f9,0x0000,0xd8a4,0xb3f6,0xd8a8,0x0000,0xd8a3,
-0xd8a5,0xd87d,0xb3f4,0x0000,0xd8b2,0xd8b1,0xd8ae,0xb3f3,
-0xb3f7,0xb3f8,0xd14b,0xd8ab,0xb3f5,0xb0f4,0xd8ad,0xd87e,
-0xd8b0,0xd8af,0x0000,0xd8b3,0x0000,0xdcef,0x0000,0xd8ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8a7,0xdce7,0xb6f4,0xb6f7,0xb6f2,0xdce6,0xdcea,0xdce5,
-0x0000,0xb6ec,0xb6f6,0xdce2,0xb6f0,0xdce9,0x0000,0xb6ee,
-0xb6ed,0xdcec,0xb6ef,0xdcee,0x0000,0xdceb,0xb6eb,0x0000,
-0x0000,0x0000,0xb6f5,0xdcf0,0xdce4,0xdced,0x0000,0x0000,
-0xdce3,0x0000,0x0000,0xb6f1,0x0000,0xb6f3,0x0000,0xdce8,
-0x0000,0xdcf1,0x0000,0x0000,0xe15d,0xb9d0,0xe163,0x0000,
-0x0000,0xb9d5,0xe15f,0xe166,0xe157,0xb9d7,0xb9d1,0xe15c,
-0xbc55,0xe15b,0xe164,0xb9d2,0x0000,0xb9d6,0xe15a,0xe160,
-0xe165,0xe156,0xb9d4,0xe15e,0x0000,0x0000,0xe162,0xe168,
-0xe158,0xe161,0x0000,0xb9d3,0xe167,0x0000,0x0000,0x0000,
-0xe159,0x0000,0x0000,0x0000,0xbc59,0xe54b,0xbc57,0xbc56,
-0xe54d,0xe552,0x0000,0xe54e,0x0000,0xe551,0xbc5c,0x0000,
-0xbea5,0xbc5b,0x0000,0xe54a,0xe550,0x0000,0xbc5a,0xe54f,
-0x0000,0xe54c,0x0000,0xbc58,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe94d,0xf9d9,0xe94f,0xe94a,0xbec1,0xe94c,
-0x0000,0xbec0,0xe94e,0x0000,0x0000,0xbec3,0xe950,0xbec2,
-0xe949,0xe94b,0x0000,0x0000,0x0000,0x0000,0xc0a5,0xeccc,
-0x0000,0xc0a4,0xeccd,0xc0a3,0xeccb,0xc0a2,0xecca,0x0000,
-0xc253,0xc252,0xf1f6,0xf1f8,0x0000,0xf1f7,0xc361,0xc362,
-0x0000,0x0000,0xc363,0xf442,0xc45b,0x0000,0x0000,0xf7d3,
-0xf7d2,0xc5f2,0x0000,0xa468,0xa4d0,0x0000,0x0000,0xa7a7,
-0x0000,0x0000,0x0000,0x0000,0xce5f,0x0000,0x0000,0x0000,
-0x0000,0xb3fc,0xb3fd,0x0000,0xdcf2,0xb9d8,0xe169,0xe553,
-/* 0x5900 */
-0x0000,0x0000,0x0000,0xc95a,0x0000,0x0000,0xcab0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcc42,0xce60,0xd159,0xae4c,
-0x0000,0x0000,0xf1f9,0x0000,0xc4dc,0xa469,0xa57e,0xc970,
-0x0000,0xa667,0xa668,0x0000,0xa95d,0x0000,0x0000,0x0000,
-0xb0f7,0x0000,0xb9da,0x0000,0xb9db,0xb9d9,0x0000,0xa46a,
-0x0000,0xa4d1,0xa4d3,0xa4d2,0xc95b,0xa4d4,0xa5a1,0xc971,
-0x0000,0xa5a2,0x0000,0x0000,0x0000,0x0000,0x0000,0xa669,
-0xa66a,0x0000,0x0000,0x0000,0xc9cb,0x0000,0xa7a8,0x0000,
-0xcab1,0x0000,0x0000,0x0000,0xa961,0xcc43,0x0000,0xa95f,
-0xa960,0xa95e,0xd15a,0x0000,0x0000,0x0000,0xabb6,0xabb5,
-0xabb7,0xabb4,0x0000,0xce61,0xa962,0xabb3,0x0000,0xae4d,
-0xae4e,0x0000,0xae4f,0x0000,0xd4cd,0x0000,0x0000,0x0000,
-0xb3fe,0xd8b4,0xb0f8,0x0000,0x0000,0x0000,0x0000,0xb6f8,
-0x0000,0xb9dd,0xb9dc,0xe16a,0x0000,0xbc5d,0xbec4,0x0000,
-0xefc0,0xf6da,0xf7d4,0xa46b,0xa5a3,0x0000,0xa5a4,0xc9d1,
-0xa66c,0xa66f,0x0000,0xc9cf,0xc9cd,0xa66e,0xc9d0,0xc9d2,
-0xc9cc,0xa671,0xa670,0xa66d,0xa66b,0xc9ce,0x0000,0x0000,
-0x0000,0x0000,0xa7b3,0x0000,0x0000,0xa7b0,0xcab6,0xcab9,
-0xcab8,0x0000,0xa7aa,0xa7b2,0x0000,0x0000,0xa7af,0xcab5,
-0xcab3,0xa7ae,0x0000,0x0000,0x0000,0xa7a9,0xa7ac,0x0000,
-0xcab4,0xcabb,0xcab7,0xa7ad,0xa7b1,0xa7b4,0xcab2,0xcaba,
-0xa7ab,0x0000,0x0000,0x0000,0x0000,0x0000,0xa967,0xa96f,
-0x0000,0xcc4f,0xcc48,0xa970,0xcc53,0xcc44,0xcc4b,0x0000,
-0x0000,0xa966,0xcc45,0xa964,0xcc4c,0xcc50,0xa963,0x0000,
-0xcc51,0xcc4a,0x0000,0xcc4d,0x0000,0xa972,0xa969,0xcc54,
-0xcc52,0x0000,0xa96e,0xa96c,0xcc49,0xa96b,0xcc47,0xcc46,
-0xa96a,0xa968,0xa971,0xa96d,0xa965,0x0000,0xcc4e,0x0000,
-0xabb9,0x0000,0xabc0,0xce6f,0xabb8,0xce67,0xce63,0x0000,
-0xce73,0xce62,0x0000,0xabbb,0xce6c,0xabbe,0xabc1,0x0000,
-0xabbc,0xce70,0xabbf,0x0000,0xae56,0xce76,0xce64,0x0000,
-0x0000,0xce66,0xce6d,0xce71,0xce75,0xce72,0xce6b,0xce6e,
-0x0000,0x0000,0xce68,0xabc3,0xce6a,0xce69,0xce74,0xabba,
-0xce65,0xabc2,0x0000,0xabbd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xae5c,0xd162,0x0000,0xae5b,0x0000,0x0000,0xd160,
-0x0000,0xae50,0x0000,0xae55,0x0000,0xd15f,0xd15c,0xd161,
-0xae51,0xd15b,0x0000,0xae54,0xae52,0x0000,0xd163,0xae53,
-0xae57,0x0000,0x0000,0xae58,0x0000,0xae5a,0x0000,0x0000,
-0x0000,0xae59,0x0000,0x0000,0x0000,0xd15d,0xd15e,0x0000,
-0x0000,0x0000,0x0000,0xd164,0x0000,0xd4d4,0xb0f9,0xd8c2,
-0xd4d3,0xd4e6,0x0000,0x0000,0xb140,0x0000,0xd4e4,0x0000,
-0xb0fe,0xb0fa,0xd4ed,0xd4dd,0xd4e0,0x0000,0xb143,0xd4ea,
-0xd4e2,0xb0fb,0xb144,0x0000,0xd4e7,0xd4e5,0x0000,0x0000,
-0xd4d6,0xd4eb,0xd4df,0xd4da,0x0000,0xd4d0,0xd4ec,0xd4dc,
-0xd4cf,0x0000,0xb142,0xd4e1,0xd4ee,0xd4de,0xd4d2,0xd4d7,
-0xd4ce,0x0000,0xb141,0x0000,0xd4db,0xd4d8,0xb0fc,0xd4d1,
-0x0000,0xd4e9,0xb0fd,0x0000,0xd4d9,0xd4d5,0x0000,0x0000,
-0xd4e8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb440,
-0xd8bb,0x0000,0xd8b8,0xd8c9,0xd8bd,0xd8ca,0x0000,0xb442,
-0x0000,0x0000,0x0000,0xd8c6,0xd8c3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8c4,0xd8c7,0xd8cb,0x0000,0xd4e3,0xd8cd,
-0xdd47,0x0000,0xb443,0xd8ce,0xd8b6,0xd8c0,0x0000,0xd8c5,
-0x0000,0x0000,0xb441,0xb444,0xd8cc,0xd8cf,0xd8ba,0xd8b7,
-0x0000,0x0000,0xd8b9,0x0000,0x0000,0xd8be,0xd8bc,0xb445,
-0x0000,0xd8c8,0x0000,0x0000,0xd8bf,0x0000,0xd8c1,0xd8b5,
-0xdcfa,0xdcf8,0xb742,0xb740,0xdd43,0xdcf9,0xdd44,0xdd40,
-0xdcf7,0xdd46,0xdcf6,0xdcfd,0xb6fe,0xb6fd,0xb6fc,0xdcfb,
-0xdd41,0xb6f9,0xb741,0x0000,0xdcf4,0x0000,0xdcfe,0xdcf3,
-0xdcfc,0xb6fa,0xdd42,0xdcf5,0xb6fb,0xdd45,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe16e,0xb9e2,0xb9e1,
-0xb9e3,0xe17a,0xe170,0xe176,0xe16b,0xe179,0xe178,0xe17c,
-0xe175,0xb9de,0xe174,0xb9e4,0x0000,0xe16d,0xb9df,0x0000,
-0xe17b,0xb9e0,0xe16f,0xe172,0xe177,0xe171,0xe16c,0x0000,
-0x0000,0x0000,0x0000,0xe173,0xe555,0xbc61,0xe558,0xe557,
-0xe55a,0xe55c,0xf9dc,0xbc5f,0x0000,0xe556,0x0000,0xe554,
-/* 0x5b00 */
-0x0000,0xe55d,0xe55b,0xe559,0x0000,0xe55f,0x0000,0xe55e,
-0xbc63,0xbc5e,0x0000,0xbc60,0xbc62,0x0000,0x0000,0xe560,
-0xe957,0x0000,0x0000,0xe956,0xe955,0x0000,0xe958,0xe951,
-0x0000,0xe952,0xe95a,0xe953,0x0000,0xbec5,0xe95c,0x0000,
-0xe95b,0xe954,0x0000,0xecd1,0xc0a8,0xeccf,0xecd4,0xecd3,
-0xe959,0x0000,0xc0a7,0x0000,0xecd2,0xecce,0xecd6,0xecd5,
-0xc0a6,0x0000,0xecd0,0x0000,0xbec6,0x0000,0x0000,0x0000,
-0xc254,0x0000,0x0000,0x0000,0xefc1,0xf1fa,0xf1fb,0xf1fc,
-0xc45c,0x0000,0x0000,0xc45d,0x0000,0xf443,0x0000,0xf5c8,
-0xf5c7,0x0000,0x0000,0xf6db,0xf6dc,0xf7d5,0xf8a7,0x0000,
-0xa46c,0xa46d,0x0000,0xa46e,0xa4d5,0xa5a5,0xc9d3,0xa672,
-0xa673,0x0000,0xa7b7,0xa7b8,0xa7b6,0xa7b5,0x0000,0xa973,
-0x0000,0x0000,0xcc55,0xa975,0xa974,0xcc56,0x0000,0x0000,
-0x0000,0xabc4,0x0000,0xae5d,0xd165,0x0000,0xd4f0,0x0000,
-0xb145,0xb447,0xd4ef,0xb446,0x0000,0xb9e5,0x0000,0xe17d,
-0xbec7,0x0000,0xc0a9,0xecd7,0x0000,0xc45e,0x0000,0xc570,
-0x0000,0xc972,0x0000,0xa5a6,0xc973,0xa676,0x0000,0xa674,
-0xa675,0xa677,0x0000,0xa7ba,0xa7b9,0x0000,0xcabc,0xa7bb,
-0x0000,0x0000,0xcabd,0xcc57,0x0000,0xcc58,0x0000,0xa976,
-0xa978,0xa97a,0xa977,0xa97b,0xa979,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xabc8,0xabc5,0xabc7,0xabc9,0xabc6,0xd166,
-0xce77,0x0000,0x0000,0x0000,0xd168,0xd167,0xae63,0x0000,
-0xae5f,0x0000,0x0000,0xae60,0xae62,0xae64,0xae61,0x0000,
-0xae66,0xae65,0x0000,0x0000,0x0000,0x0000,0x0000,0xb14a,
-0xd4f2,0xd4f1,0xb149,0x0000,0xb148,0xb147,0xb14b,0xb146,
-0x0000,0x0000,0xd8d5,0xd8d2,0xb449,0xd8d1,0xd8d6,0x0000,
-0xb44b,0xd8d4,0xb448,0xb44a,0xd8d3,0x0000,0xdd48,0x0000,
-0xdd49,0xdd4a,0x0000,0x0000,0x0000,0x0000,0xb9e6,0xb9ee,
-0xe17e,0xb9e8,0xb9ec,0xe1a1,0xb9ed,0xb9e9,0xb9ea,0xb9e7,
-0xb9eb,0xbc66,0xd8d0,0xbc67,0xbc65,0x0000,0xbc64,0xe95d,
-0xbec8,0xecd8,0xecd9,0x0000,0x0000,0xc364,0xc45f,0x0000,
-0xa46f,0x0000,0xa678,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5c00 */
-0x0000,0xabca,0x0000,0xd169,0xae67,0x0000,0x0000,0xb14e,
-0xb14d,0xb14c,0xb44c,0xb44d,0xd8d7,0xb9ef,0xbec9,0xa470,
-0xc95c,0xa4d6,0xc974,0x0000,0x0000,0xc9d4,0xa679,0x0000,
-0x0000,0x0000,0xa97c,0x0000,0x0000,0x0000,0x0000,0xdd4b,
-0x0000,0x0000,0xa471,0x0000,0xa4d7,0xc9d5,0x0000,0x0000,
-0xcabe,0x0000,0xcabf,0x0000,0xa7bc,0x0000,0x0000,0x0000,
-0xd8d8,0xb44e,0x0000,0xdd4c,0x0000,0x0000,0x0000,0xc0aa,
-0xa472,0xa4a8,0xa4d8,0xc975,0xa5a7,0x0000,0xa7c0,0xa7bf,
-0xa7bd,0xa7be,0x0000,0x0000,0xcc59,0xa97e,0xa9a1,0xcc5a,
-0xa97d,0x0000,0x0000,0xabce,0xce78,0xabcd,0xabcb,0xabcc,
-0xae6a,0xae68,0x0000,0x0000,0xd16b,0xae69,0xd16a,0x0000,
-0xae5e,0xd4f3,0x0000,0x0000,0xb150,0xb151,0x0000,0x0000,
-0xb14f,0x0000,0xb9f0,0xe1a2,0xbc68,0xbc69,0x0000,0xe561,
-0xc0ab,0xefc2,0xefc3,0x0000,0xc4dd,0xf8a8,0xc94b,0xa4d9,
-0x0000,0xa473,0x0000,0xc977,0xc976,0x0000,0x0000,0x0000,
-0x0000,0xa67a,0xc9d7,0xc9d8,0xc9d6,0x0000,0xc9d9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcac7,0x0000,
-0xcac2,0xcac4,0xcac6,0xcac3,0xa7c4,0xcac0,0x0000,0xcac1,
-0xa7c1,0xa7c2,0xcac5,0xcac8,0xa7c3,0xcac9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcc68,0x0000,0xcc62,
-0xcc5d,0xa9a3,0xcc65,0xcc63,0xcc5c,0xcc69,0xcc6c,0xcc67,
-0xcc60,0xa9a5,0xcc66,0xa9a6,0xcc61,0xcc64,0xcc5b,0xcc5f,
-0xcc6b,0xa9a7,0x0000,0xa9a8,0x0000,0xcc5e,0xcc6a,0xa9a2,
-0xa9a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceab,0xcea4,
-0xceaa,0xcea3,0xcea5,0xce7d,0xce7b,0x0000,0xceac,0xcea9,
-0xce79,0x0000,0xabd0,0xcea7,0xcea8,0x0000,0xcea6,0xce7c,
-0xce7a,0xabcf,0xcea2,0xce7e,0x0000,0x0000,0xcea1,0xcead,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xae6f,0x0000,0xae6e,0x0000,0xd16c,0xae6b,0xd16e,0x0000,
-0xae70,0xd16f,0x0000,0x0000,0xae73,0x0000,0xae71,0xd170,
-0xceae,0xd172,0x0000,0xae6d,0x0000,0xae6c,0x0000,0xd16d,
-0xd171,0xae72,0x0000,0x0000,0x0000,0x0000,0xb153,0xb152,
-0x0000,0x0000,0x0000,0xd4f5,0xd4f9,0xd4fb,0xb154,0xd4fe,
-0x0000,0xb158,0xd541,0x0000,0xb15a,0x0000,0xb156,0xb15e,
-0x0000,0xb15b,0xd4f7,0xb155,0x0000,0xd4f6,0xd4f4,0xd543,
-0xd4f8,0x0000,0xb157,0xd542,0xb15c,0xd4fd,0xd4fc,0xb15d,
-0xd4fa,0xb159,0x0000,0x0000,0x0000,0x0000,0xd544,0x0000,
-0xd540,0xd8e7,0xd8ee,0xd8e3,0xb451,0xd8df,0xd8ef,0xd8d9,
-0xd8ec,0xd8ea,0xd8e4,0x0000,0xd8ed,0xd8e6,0x0000,0xd8de,
-0xd8f0,0xd8dc,0xd8e9,0xd8da,0x0000,0xd8f1,0x0000,0xb452,
-0x0000,0xd8eb,0xdd4f,0xd8dd,0xb44f,0x0000,0xd8e1,0x0000,
-0xb450,0xd8e0,0xd8e5,0x0000,0x0000,0xd8e2,0x0000,0x0000,
-0x0000,0xd8e8,0x0000,0x0000,0x0000,0x0000,0xdd53,0x0000,
-0x0000,0x0000,0xdd56,0xdd4e,0x0000,0xdd50,0x0000,0xdd55,
-0xdd54,0xb743,0x0000,0xd8db,0xdd52,0x0000,0x0000,0xb744,
-0x0000,0xdd4d,0xdd51,0x0000,0x0000,0x0000,0x0000,0xe1a9,
-0x0000,0xe1b0,0xe1a7,0x0000,0xe1ae,0xe1a5,0xe1ad,0xe1b1,
-0xe1a4,0xe1a8,0xe1a3,0x0000,0xb9f1,0x0000,0xe1a6,0xb9f2,
-0xe1ac,0xe1ab,0xe1aa,0x0000,0x0000,0xe1af,0x0000,0x0000,
-0x0000,0x0000,0xe565,0xe567,0xbc6b,0xe568,0x0000,0xe563,
-0x0000,0xe562,0xe56c,0x0000,0xe56a,0xbc6a,0xe56d,0xe564,
-0xe569,0xe56b,0xe566,0x0000,0x0000,0x0000,0x0000,0xe961,
-0xe966,0xe960,0xe965,0x0000,0xe95e,0xe968,0xe964,0xe969,
-0xe963,0xe95f,0xe967,0x0000,0xe96a,0xe962,0x0000,0xecda,
-0xc0af,0x0000,0xc0ad,0x0000,0xc0ac,0xc0ae,0x0000,0x0000,
-0xefc4,0x0000,0xf172,0xf1fd,0x0000,0x0000,0xf444,0xf445,
-0x0000,0xc460,0x0000,0xf5c9,0x0000,0xc4de,0x0000,0xf5ca,
-0x0000,0xf6de,0xc572,0x0000,0xc571,0xf6dd,0xc5c9,0x0000,
-0xf7d6,0x0000,0x0000,0x0000,0x0000,0xa474,0xa67b,0xc9da,
-0xcaca,0xa8b5,0xb15f,0x0000,0x0000,0xa475,0xa5aa,0xa5a9,
-0xa5a8,0x0000,0x0000,0xa7c5,0x0000,0x0000,0xae74,0x0000,
-0xdd57,0xa476,0xa477,0xa478,0xa4da,0x0000,0x0000,0xabd1,
-0x0000,0xceaf,0x0000,0x0000,0x0000,0xb453,0xa479,0xc95d,
-/* 0x5e00 */
-0x0000,0x0000,0xa5ab,0xa5ac,0xc978,0x0000,0xa67c,0x0000,
-0x0000,0x0000,0xcacb,0x0000,0xa7c6,0x0000,0xcacc,0x0000,
-0x0000,0xa9ae,0x0000,0x0000,0xcc6e,0xa9ac,0xa9ab,0xcc6d,
-0xa9a9,0xcc6f,0xa9aa,0xa9ad,0x0000,0xabd2,0x0000,0xabd4,
-0xceb3,0xceb0,0xceb1,0xceb2,0xceb4,0xabd3,0x0000,0x0000,
-0xd174,0xd173,0x0000,0xae76,0x0000,0xae75,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb162,0xd546,0x0000,0xb161,0xb163,
-0xb160,0x0000,0x0000,0x0000,0x0000,0xb455,0xd545,0x0000,
-0xb456,0xd8f3,0x0000,0xb457,0xd8f2,0xb454,0x0000,0x0000,
-0x0000,0x0000,0xdd5a,0xdd5c,0xb745,0xdd5b,0xdd59,0xdd58,
-0x0000,0x0000,0x0000,0xe1b4,0xb9f7,0xb9f5,0x0000,0xb9f6,
-0xe1b2,0xe1b3,0x0000,0xb9f3,0xe571,0xe56f,0x0000,0xbc6d,
-0xe570,0xbc6e,0xbc6c,0xb9f4,0x0000,0x0000,0xe96d,0xe96b,
-0xe96c,0xe56e,0xecdc,0xc0b0,0xecdb,0xefc5,0xefc6,0xe96e,
-0xf1fe,0x0000,0xa47a,0xa5ad,0xa67e,0xc9db,0xa67d,0x0000,
-0xa9af,0xb746,0x0000,0xa4db,0xa5ae,0xabd5,0xb458,0x0000,
-0xc979,0x0000,0xc97a,0x0000,0xc9dc,0x0000,0x0000,0xa7c8,
-0xcad0,0xcace,0xa7c9,0xcacd,0xcacf,0xcad1,0x0000,0xa7c7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa9b3,0xa9b4,0xa9b1,
-0x0000,0x0000,0xa9b0,0xceb8,0xa9b2,0x0000,0x0000,0x0000,
-0xabd6,0x0000,0xceb7,0xceb9,0xceb6,0xceba,0xabd7,0xae79,
-0xd175,0x0000,0xd177,0xae77,0xd178,0xae78,0xd176,0x0000,
-0xceb5,0xd547,0xd54a,0xd54b,0xd548,0xb167,0xb166,0xb164,
-0xb165,0xd549,0x0000,0x0000,0x0000,0x0000,0xb168,0x0000,
-0x0000,0xb45a,0xb45b,0x0000,0xb45c,0xdd5d,0xdd5f,0xdd61,
-0xb748,0xb747,0xb459,0xdd60,0xdd5e,0x0000,0xe1b8,0x0000,
-0x0000,0xe1b6,0xe1bc,0xb9f8,0xe1bd,0xe1ba,0xb9f9,0xe1b7,
-0xe1b5,0xe1bb,0xbc70,0xe573,0xe1b9,0xbc72,0xe574,0xbc71,
-0xbc74,0xe575,0xbc6f,0xbc73,0x0000,0xe973,0xe971,0xe970,
-0xe972,0xe96f,0x0000,0x0000,0xc366,0x0000,0xf446,0xf447,
-0x0000,0xf5cb,0xf6df,0xc655,0x0000,0x0000,0xa9b5,0xa7ca,
-0x0000,0x0000,0xabd8,0x0000,0x0000,0x0000,0xa47b,0xa4dc,
-/* 0x5f00 */
-0x0000,0xa5af,0xc9dd,0x0000,0xa7cb,0xcad2,0x0000,0xcebb,
-0xabd9,0x0000,0xb9fa,0xa47c,0x0000,0x0000,0x0000,0xa6a1,
-0x0000,0x0000,0xb749,0xa47d,0xa4dd,0xa4de,0x0000,0xa5b1,
-0xa5b0,0x0000,0xc9de,0xa6a2,0x0000,0xcad3,0x0000,0xa7cc,
-0x0000,0x0000,0xcc71,0xcc72,0xcc73,0x0000,0xa9b6,0xa9b7,
-0xcc70,0xa9b8,0x0000,0x0000,0x0000,0xabda,0xcebc,0x0000,
-0xd17a,0xae7a,0x0000,0xd179,0x0000,0xb169,0xd54c,0xb16a,
-0xd54d,0x0000,0x0000,0x0000,0xb45d,0x0000,0x0000,0x0000,
-0xdd62,0x0000,0x0000,0xe1bf,0xe1be,0x0000,0xb9fb,0x0000,
-0xbc75,0xe576,0xbeca,0xe974,0xc0b1,0x0000,0xc573,0xf7d8,
-0x0000,0x0000,0x0000,0x0000,0xcc74,0x0000,0xcebd,0xb16b,
-0xd8f4,0xb74a,0x0000,0x0000,0x0000,0xc255,0x0000,0x0000,
-0x0000,0x0000,0xa7ce,0x0000,0xa7cd,0xabdb,0x0000,0xd17b,
-0x0000,0xb16d,0xb343,0xb16e,0xb16c,0xb45e,0x0000,0xe1c0,
-0xb9fc,0xbc76,0x0000,0xc94c,0xc9df,0x0000,0xcad5,0xa7cf,
-0xcad4,0xa7d0,0x0000,0x0000,0xa9bc,0xcc77,0xcc76,0xa9bb,
-0xa9b9,0xa9ba,0xcc75,0x0000,0x0000,0xabdd,0xcebe,0xabe0,
-0xabdc,0xabe2,0xabde,0xabdf,0xabe1,0x0000,0x0000,0x0000,
-0xae7d,0xae7c,0xae7b,0x0000,0x0000,0x0000,0xd54f,0xb16f,
-0xb172,0xb170,0x0000,0xd54e,0xb175,0x0000,0xb171,0xd550,
-0xb174,0xb173,0x0000,0x0000,0x0000,0xd8f6,0xd8f5,0x0000,
-0xb461,0xb45f,0xb460,0xd8f7,0xb74b,0xdd64,0xb74c,0xdd63,
-0x0000,0x0000,0xe577,0x0000,0x0000,0xbc78,0xe1c1,0xbc77,
-0x0000,0xb9fd,0x0000,0xecde,0xe975,0xc0b2,0xecdd,0xf240,
-0xf448,0xf449,0x0000,0xa4df,0x0000,0xa5b2,0x0000,0x0000,
-0x0000,0xc97b,0x0000,0x0000,0xa7d2,0xa7d4,0x0000,0xc9e2,
-0xcad8,0xcad7,0xcad6,0x0000,0xc9e1,0xc9e0,0xa6a4,0xa7d3,
-0xa7d1,0xa6a3,0x0000,0x0000,0x0000,0xa9bd,0xcc78,0x0000,
-0xa9be,0xcadd,0x0000,0xcadf,0xcade,0xcc79,0x0000,0x0000,
-0xcada,0x0000,0xa7d8,0xa7d6,0x0000,0xcad9,0xcadb,0xcae1,
-0x0000,0xa7d5,0x0000,0xcadc,0xcae5,0xa9c0,0x0000,0xcae2,
-0xa7d7,0x0000,0xcae0,0xcae3,0x0000,0xa9bf,0x0000,0xa9c1,
-0xcae4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccaf,0xcca2,0xcc7e,0xccae,0xcca9,0xabe7,0xa9c2,
-0xccaa,0xccad,0xabe3,0xccac,0xa9c3,0xa9c8,0xa9c6,0xcca3,
-0x0000,0xcc7c,0xcca5,0xa9cd,0xccb0,0xabe4,0xcca6,0x0000,
-0xabe5,0xa9c9,0xcca8,0x0000,0xcecd,0xabe6,0xcc7b,0xa9ca,
-0xabe8,0xa9cb,0xa9c7,0xa9cc,0xcca7,0xcc7a,0xccab,0xa9c4,
-0x0000,0x0000,0xcc7d,0xcca4,0xcca1,0xa9c5,0x0000,0xcebf,
-0x0000,0xcec0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xceca,0xd1a1,0xcecb,0xabee,0xcece,0xcec4,0xabed,0xcec6,
-0x0000,0xcec7,0x0000,0x0000,0xcec9,0xabe9,0x0000,0x0000,
-0xaea3,0x0000,0xf9da,0xcec5,0xcec1,0xaea4,0x0000,0x0000,
-0xcecf,0xae7e,0xd17d,0xcec8,0x0000,0xd17c,0xcec3,0xcecc,
-0x0000,0x0000,0xabec,0xaea1,0xabf2,0xaea2,0xced0,0xd17e,
-0xabeb,0xaea6,0xabf1,0xabf0,0xabef,0xaea5,0xced1,0xaea7,
-0xabea,0x0000,0xcec2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb176,
-0xd1a4,0xd1a6,0x0000,0xd1a8,0xaea8,0xaeae,0xd553,0xd1ac,
-0xd1a3,0xb178,0xd551,0x0000,0xaead,0xaeab,0xd1ae,0x0000,
-0xd552,0x0000,0xd1a5,0x0000,0xaeac,0xd1a9,0xaeaf,0xd1ab,
-0x0000,0x0000,0xaeaa,0xd1aa,0xd1ad,0xd1a7,0x0000,0xaea9,
-0xb179,0x0000,0xd1a2,0xb177,0x0000,0x0000,0x0000,0x0000,
-0xb17a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd555,0xd55e,0xb464,0x0000,0xb17c,0xb1a3,0xb465,0xd560,
-0xb1aa,0xd8f9,0xd556,0xb1a2,0xb1a5,0xb17e,0xd554,0xd562,
-0xd565,0xd949,0x0000,0xd563,0xd8fd,0xb1a1,0xb1a8,0xb1ac,
-0xd55d,0xd8f8,0xd561,0xb17b,0xd8fa,0xd564,0xd8fc,0xd559,
-0x0000,0xb462,0x0000,0xd557,0xd558,0xb1a7,0x0000,0x0000,
-0xb1a6,0xd55b,0xb1ab,0xd55f,0xb1a4,0xd55c,0x0000,0xb1a9,
-0xb466,0xb463,0xd8fb,0x0000,0xd55a,0x0000,0xb17d,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb46b,0xb46f,0xd940,0xb751,0xb46d,0xd944,0xb471,0xdd65,
-0xd946,0xb753,0xb469,0xb46c,0xd947,0x0000,0xd948,0xd94e,
-0xb473,0xb754,0x0000,0xd94a,0xd94f,0xd943,0xb75e,0x0000,
-0xb755,0xb472,0xd941,0xd950,0x0000,0xb75d,0xb470,0xb74e,
-0xd94d,0x0000,0xb474,0xd945,0xd8fe,0xb46a,0xd942,0x0000,
-0xd94b,0x0000,0xb74d,0xb752,0xb467,0xd94c,0x0000,0xb750,
-0x0000,0x0000,0x0000,0xb468,0x0000,0x0000,0x0000,0xb75c,
-0xe1c3,0xdd70,0x0000,0xdd68,0xe1c2,0x0000,0xdd6c,0xdd6e,
-0x0000,0x0000,0xdd6b,0x0000,0xb75b,0x0000,0xdd6a,0xb75f,
-0x0000,0x0000,0x0000,0xe1d2,0x0000,0x0000,0xb75a,0xba40,
-0xdd71,0xe1c4,0x0000,0x0000,0xb758,0xdd69,0xdd6d,0xb9fe,
-0xb74f,0xdd66,0xdd67,0xba41,0xb757,0xb759,0xb756,0xdd6f,
-0x0000,0x0000,0xe1c8,0xe1c9,0xe1ce,0xbc7d,0xe1d5,0x0000,
-0xba47,0x0000,0xba46,0xe1d0,0x0000,0xbc7c,0xe1c5,0xba45,
-0x0000,0xe1d4,0xba43,0xba44,0x0000,0xe1d1,0xe5aa,0xbc7a,
-0xb46e,0x0000,0xe1d3,0xbca3,0xe1cb,0x0000,0xbc7b,0x0000,
-0xbca2,0xe1c6,0xe1ca,0xe1c7,0xe1cd,0xba48,0xbc79,0xba42,
-0x0000,0xe57a,0xe1cf,0x0000,0xbca1,0x0000,0xbca4,0x0000,
-0xe1cc,0x0000,0xbc7e,0xe579,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe57e,0xbece,0xe578,0xe9a3,0xe5a9,0xbca8,0x0000,
-0xbca6,0xbecc,0xe5a6,0xe5a2,0xbcac,0x0000,0xe978,0x0000,
-0x0000,0x0000,0xbcaa,0xe5a1,0x0000,0xe976,0x0000,0xe5a5,
-0x0000,0xe5a8,0xe57d,0x0000,0xbcab,0x0000,0x0000,0xbca5,
-0xe977,0xbecd,0xe5a7,0xbca7,0xbca9,0xe5a4,0xbcad,0xe5a3,
-0xe57c,0xe57b,0xbecb,0xe5ab,0xe97a,0xece0,0xbed0,0x0000,
-0xe9a2,0x0000,0xe97e,0x0000,0xece1,0x0000,0xbed1,0xe9a1,
-0x0000,0xe97c,0xc0b4,0xecdf,0x0000,0xe979,0xe97b,0xc0b5,
-0xbed3,0xc0b3,0xbed2,0xc0b7,0xe97d,0xbecf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xefcf,0x0000,
-0xefc7,0x0000,0x0000,0x0000,0x0000,0x0000,0xece7,0xefc8,
-0xece3,0x0000,0x0000,0xc256,0xece5,0xece4,0xc0b6,0xece2,
-0xece6,0xefd0,0xefcc,0xefce,0x0000,0xefc9,0xefca,0x0000,
-0xefcd,0xefcb,0xc367,0x0000,0x0000,0xc36a,0xc369,0xc368,
-0xc461,0xf44a,0xc462,0xf241,0xc4df,0xf5cc,0xc4e0,0xc574,
-0xc5ca,0xf7d9,0x0000,0xf7da,0xf7db,0x0000,0x0000,0xf9ba,
-0xa4e0,0xc97c,0xa5b3,0x0000,0xa6a6,0xa6a7,0xa6a5,0x0000,
-0xa6a8,0xa7da,0xa7d9,0x0000,0xccb1,0xa9cf,0xa9ce,0x0000,
-0x0000,0xd1af,0xb1ad,0xb1ae,0x0000,0x0000,0x0000,0xb475,
-0xdd72,0xb760,0xb761,0xdd74,0xdd76,0xdd75,0x0000,0xe1d7,
-0x0000,0xe1d6,0xba49,0xe1d8,0x0000,0xe5ac,0xbcae,0x0000,
-0xbed4,0x0000,0xc0b8,0xc257,0xc0b9,0x0000,0xa4e1,0x0000,
-0x0000,0x0000,0xcae6,0x0000,0x0000,0xccb2,0xa9d1,0xa9d0,
-0xa9d2,0xabf3,0xced2,0xced3,0x0000,0x0000,0xd1b0,0xaeb0,
-0xb1af,0xb476,0xd951,0xa4e2,0x0000,0xa47e,0xa4e3,0x0000,
-0xc97d,0xa5b7,0xa5b6,0xa5b4,0xa5b5,0x0000,0x0000,0x0000,
-0xa6ab,0xc9e9,0xc9eb,0xa6aa,0xc9e3,0x0000,0xc9e4,0x0000,
-0xc9ea,0xc9e6,0xc9e8,0xa6a9,0xc9e5,0xc9ec,0xc9e7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa7e1,0xa7ea,0xa7e8,
-0xcaf0,0xcaed,0xcaf5,0xa7e6,0xcaf6,0x0000,0xa7df,0xcaf3,
-0x0000,0xa7e5,0xcaef,0xcaee,0xa7e3,0xcaf4,0xa7e4,0xa9d3,
-0xa7de,0xcaf1,0x0000,0xcae7,0xa7db,0x0000,0xa7ee,0xcaec,
-0xcaf2,0xa7e0,0xa7e2,0x0000,0xcae8,0x0000,0xcae9,0xcaea,
-0x0000,0xa7ed,0xa7e7,0xa7ec,0xcaeb,0xa7eb,0xa7dd,0xa7dc,
-0xa7e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa9e1,0xccbe,0xccb7,0xa9dc,0xa9ef,0xccb3,0xccba,0xccbc,
-0xccbf,0xa9ea,0x0000,0xccbb,0xccb4,0xa9e8,0xccb8,0x0000,
-0xccc0,0xa9d9,0x0000,0xccbd,0xa9e3,0xa9e2,0xccb6,0xa9d7,
-0x0000,0x0000,0xa9d8,0x0000,0xa9d6,0x0000,0xa9ee,0xa9e6,
-0xa9e0,0xa9d4,0xccb9,0xa9df,0xa9d5,0xa9e7,0xa9f0,0xced4,
-0xa9e4,0xccb5,0xa9da,0xa9dd,0xa9de,0x0000,0xa9ec,0xa9ed,
-0xa9eb,0xa9e5,0xa9e9,0xa9db,0xabf4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xceda,0xac41,0xabf8,0xabfa,0xac40,
-0xcee6,0xabfd,0xd1b1,0xaeb1,0xac43,0xced7,0xcedf,0xabfe,
-0xcede,0xcedb,0xcee3,0xcee5,0xabf7,0xabfb,0xac42,0xaeb3,
-0xcee0,0xabf9,0xac45,0xced9,0x0000,0x0000,0x0000,0xabfc,
-0xaeb2,0xabf6,0x0000,0xced6,0xcedd,0xced5,0xced8,0xcedc,
-0xd1b2,0xac44,0x0000,0xcee1,0xcee2,0xcee4,0xabf5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xaec1,0xd1be,0xaebf,0xaec0,0xd1b4,0xd1c4,0x0000,0xaeb6,
-0x0000,0x0000,0xd566,0xd1c6,0xd1c0,0x0000,0xd1b7,0x0000,
-0xd1c9,0xd1ba,0xaebc,0xd57d,0xd1bd,0xaebe,0xaeb5,0x0000,
-0xd1cb,0xd1bf,0xaeb8,0xd1b8,0xd1b5,0xd1b6,0xaeb9,0xd1c5,
-0xd1cc,0xaebb,0xd1bc,0xd1bb,0xaec3,0xaec2,0xaeb4,0xaeba,
-0xaebd,0xd1c8,0x0000,0x0000,0xd1c2,0xaeb7,0xd1b3,0xd1ca,
-0xd1c1,0xd1c3,0xd1c7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd567,0x0000,0xb1b7,
-0xb1cb,0xb1ca,0x0000,0xb1bf,0x0000,0xd579,0xd575,0xd572,
-0xd5a6,0xb1ba,0xb1b2,0x0000,0x0000,0xd577,0xb4a8,0xb1b6,
-0xd5a1,0x0000,0xb1cc,0xb1c9,0xd57b,0xd56a,0x0000,0x0000,
-0xb1c8,0xd5a3,0xd569,0xb1bd,0xb1c1,0xd5a2,0x0000,0xd573,
-0xb1c2,0xb1bc,0xd568,0x0000,0xb478,0xd5a5,0xd571,0xb1c7,
-0xd574,0xd5a4,0xb1c6,0x0000,0xd952,0x0000,0xb1b3,0xd56f,
-0xb1b8,0xb1c3,0x0000,0xb1be,0xd578,0xd56e,0xd56c,0xd57e,
-0xb1b0,0xb1c4,0xb1b4,0xb477,0xd57c,0xb1b5,0x0000,0xb1b1,
-0xb1c0,0xb1bb,0xb1b9,0xd570,0xb1c5,0xd56d,0xd57a,0xd576,
-0xd954,0xd953,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd56b,0xd964,0x0000,
-0xb47a,0x0000,0xd96a,0xd959,0xd967,0xdd77,0xb47d,0xd96b,
-0xd96e,0xb47c,0xd95c,0xd96d,0xd96c,0xb47e,0xd955,0xb479,
-0xb4a3,0x0000,0xb4a1,0xd969,0x0000,0xd95f,0xb4a5,0xd970,
-0xd968,0xd971,0xb4ad,0xb4ab,0xd966,0xd965,0x0000,0xd963,
-0xd95d,0xb4a4,0x0000,0xb4a2,0xd1b9,0xd956,0x0000,0xddb7,
-0xd957,0xb47b,0xb4aa,0xdd79,0x0000,0xb4a6,0xb4a7,0xd958,
-0xd96f,0xdd78,0xd960,0xd95b,0xb4a9,0xd961,0xd95e,0x0000,
-0x0000,0xb4ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb770,0x0000,
-0x0000,0xdd7c,0xddb1,0xddb6,0xddaa,0xb76c,0xddbb,0xb769,
-0xdd7a,0x0000,0xdd7b,0xb762,0xb76b,0xdda4,0xb76e,0xb76f,
-0xdda5,0x0000,0xddb2,0xddb8,0xb76a,0x0000,0xb764,0xdda3,
-0xdd7d,0xddba,0xdda8,0xdda9,0xdd7e,0xddb4,0xddab,0xddb5,
-0xddad,0x0000,0xb765,0xe1d9,0xb768,0xb766,0xddb9,0xddb0,
-0xddac,0x0000,0x0000,0xdda1,0xba53,0xddaf,0xb76d,0xdda7,
-0x0000,0xdda6,0x0000,0x0000,0x0000,0xb767,0xb763,0xe1ee,
-0xddb3,0xddae,0x0000,0xdda2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe1e9,0x0000,0xe1da,0xe1e5,0x0000,
-0xe1ec,0xba51,0xb4ac,0xe1ea,0xba4c,0x0000,0x0000,0x0000,
-0xba4b,0xe1f1,0x0000,0xe1db,0xe1e8,0xe1dc,0xe1e7,0xba4f,
-0xe1eb,0xd962,0x0000,0x0000,0x0000,0xe1f2,0xe1e3,0xba52,
-0xe5ba,0xbcaf,0x0000,0xe1f0,0xe1ef,0xba54,0xe5ad,0xbcb0,
-0xe5ae,0x0000,0xe1df,0xe1e0,0xe1dd,0xe1e2,0xe1de,0xe1f3,
-0xba4e,0xbcb1,0xba50,0xba55,0x0000,0xe1e1,0x0000,0xe1ed,
-0x0000,0x0000,0xe1e6,0x0000,0x0000,0xe5b1,0x0000,0xba4a,
-0xbcb4,0xe9aa,0xe5b6,0xe5b5,0xe5b7,0x0000,0x0000,0xe5b4,
-0xbcb5,0x0000,0xbcbb,0xbcb8,0x0000,0xbcb9,0xe5af,0xe5b2,
-0xe5bc,0xbcc1,0xbcbf,0x0000,0xe5b3,0xd95a,0xbcb2,0xe5b9,
-0xe5b0,0x0000,0xbcc2,0xe5b8,0xba4d,0xbcb7,0xe1e4,0x0000,
-0x0000,0xbcba,0x0000,0xbcbe,0xbcc0,0xbcbd,0xbcbc,0x0000,
-0xbcb6,0xe5bb,0xbcb3,0xbcc3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xbed8,0xbed9,0xe9a9,0xbee2,0xbedf,
-0x0000,0xbed6,0xbedd,0xe9ab,0xbedb,0xbed5,0x0000,0xbedc,
-0x0000,0xe9a8,0xc0bb,0xbed7,0x0000,0xbede,0xc0ba,0xe9a7,
-0xe9a6,0x0000,0xbee0,0x0000,0xbee1,0x0000,0xe9a5,0xe9a4,
-0xc0bc,0xe9ae,0xbeda,0xe9ac,0x0000,0x0000,0x0000,0x0000,
-0xc0bd,0x0000,0xc0c2,0xecea,0xecec,0x0000,0xc0bf,0x0000,
-0xeced,0xece9,0x0000,0xeceb,0xc0c0,0xc0c3,0x0000,0xece8,
-0xc0be,0xc0c1,0xc259,0xe9ad,0xc258,0x0000,0x0000,0xc25e,
-0xefd4,0x0000,0xc25c,0xc25d,0xefd7,0xefd3,0xc25a,0xefd1,
-0xc36b,0xefd5,0x0000,0xefd6,0xefd2,0x0000,0xc25b,0xf242,
-0x0000,0xf245,0x0000,0x0000,0xf246,0xf244,0xf247,0xc36c,
-0xf243,0x0000,0x0000,0xf44e,0xc464,0xf44d,0xf44c,0xf44b,
-0xc463,0xc465,0x0000,0xf5cd,0xc4e2,0xc4e1,0x0000,0x0000,
-0xf6e1,0xf6e0,0xf6e3,0xc5cb,0xc575,0xf7dd,0xf6e2,0x0000,
-0x0000,0xf7dc,0xc5cd,0xc5cc,0xc5f3,0xf8a9,0xf8ef,0xa4e4,
-0x0000,0x0000,0xd972,0xe9af,0x0000,0x0000,0xa6ac,0xcaf7,
-0xa7f1,0xa7ef,0x0000,0xa7f0,0x0000,0xccc1,0xa9f1,0xac46,
-0x0000,0xcee7,0x0000,0xcee8,0x0000,0xac47,0xd1ce,0x0000,
-0xaec4,0xaec5,0xd1cd,0x0000,0x0000,0x0000,0x0000,0xb1d3,
-0x0000,0xb1cf,0x0000,0xd5a7,0xb1d6,0xb1d5,0xb1ce,0xb1d1,
-0xb1d4,0xb1d0,0x0000,0x0000,0xd976,0xb1cd,0xb4af,0x0000,
-0x0000,0x0000,0xb4b1,0xb4b2,0xd975,0xd978,0xb4b0,0xd973,
-0xd977,0x0000,0xd974,0x0000,0xb771,0x0000,0x0000,0xddbc,
-0x0000,0x0000,0xba56,0xe1f4,0xbee3,0xbcc4,0xe5bd,0xbcc5,
-0xbcc6,0xe5bf,0xe5be,0xe5c0,0xe9b1,0x0000,0x0000,0xe9b0,
-0xecef,0xecee,0xc0c4,0xc0c5,0xf248,0x0000,0x0000,0xa4e5,
-0x0000,0x0000,0x0000,0x0000,0xd979,0x0000,0x0000,0x0000,
-0xb4b4,0xb4b3,0xddbd,0x0000,0xefd8,0xc4e3,0xf7de,0xa4e6,
-0x0000,0xaec6,0x0000,0xb1d8,0xb1d7,0xd97a,0xd97b,0xb772,
-0xe1f5,0xba57,0xe9b2,0x0000,0xa4e7,0xa5b8,0x0000,0xa9f2,
-0xccc2,0x0000,0xcee9,0xac48,0xb1d9,0x0000,0xd97c,0xb4b5,
-0xb773,0x0000,0xe5c1,0xe5c2,0x0000,0x0000,0xecf0,0xc25f,
-0xf8f0,0xa4e8,0x0000,0xccc3,0xa9f3,0xac49,0x0000,0xceea,
-0x0000,0xaec7,0xd1d2,0xd1d0,0xd1d1,0xaec8,0xd1cf,0x0000,
-0x0000,0x0000,0x0000,0xb1db,0xb1dc,0xd5a8,0xb1dd,0xb1da,
-0xd97d,0x0000,0xd97e,0xddbe,0x0000,0x0000,0xba59,0xba58,
-0x0000,0x0000,0xecf1,0xefd9,0x0000,0xf24a,0xf249,0xf44f,
-0x0000,0xc95e,0xac4a,0x0000,0x0000,0xa4e9,0xa5b9,0x0000,
-0xa6ae,0xa6ad,0x0000,0x0000,0xa6af,0xa6b0,0xc9ee,0xc9ed,
-0xcaf8,0xa7f2,0xcafb,0xcafa,0xcaf9,0xcafc,0x0000,0x0000,
-0x0000,0x0000,0xa9f4,0xccc9,0xccc5,0xccce,0x0000,0x0000,
-0xa9fb,0x0000,0xa9f9,0xccca,0xccc6,0xcccd,0xa9f8,0xaa40,
-0xccc8,0xccc4,0xa9fe,0xcccb,0xa9f7,0xcccc,0xa9fa,0xa9fc,
-0xccd0,0xcccf,0xccc7,0xa9f6,0xa9f5,0xa9fd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xceef,0xcef5,0x0000,0xac50,
-0xac4d,0xceec,0xcef1,0x0000,0xac53,0xac4b,0xcef0,0xac4e,
-0xac51,0x0000,0x0000,0xcef3,0x0000,0xac4c,0xcef8,0xac4f,
-0x0000,0xac52,0xceed,0xcef2,0xcef6,0xceee,0xceeb,0x0000,
-0x0000,0xcef7,0xcef4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xaed0,0xaec9,0xaecc,0x0000,0xaecf,0x0000,0xd1d5,
-0x0000,0xaeca,0xd1d3,0x0000,0xaece,0x0000,0x0000,0xaecb,
-0x0000,0xd1d6,0xaecd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd5ac,0xb1df,0xd5ab,0xd5ad,0xb1de,0xb1e3,0xd1d4,
-0x0000,0xd5aa,0xd5ae,0x0000,0xb1e0,0xd5a9,0xb1e2,0x0000,
-0xb1e1,0x0000,0xd9a7,0x0000,0xd9a2,0x0000,0xb4b6,0xb4ba,
-0xb4b7,0xd9a5,0xd9a8,0x0000,0xb4b8,0x0000,0xb4b9,0xb4be,
-0xddc7,0xd9a6,0xb4bc,0xd9a3,0xd9a1,0x0000,0xb4bd,0x0000,
-0xd9a4,0x0000,0x0000,0x0000,0xb779,0x0000,0xddbf,0xb776,
-0xb777,0xb775,0xddc4,0xddc3,0xddc0,0xb77b,0x0000,0x0000,
-0xddc2,0xb4bb,0x0000,0x0000,0xddc6,0xddc1,0xb778,0xb774,
-0xb77a,0xddc5,0x0000,0x0000,0x0000,0xba5c,0x0000,0xe1f8,
-0xe1f7,0xe1f6,0xba5a,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xba5b,0xe5c5,0xe5c8,0xbcc8,0x0000,0x0000,0xbcc7,0xe5c9,
-0xe5c4,0xbcca,0xe5c6,0x0000,0xbcc9,0xe5c3,0x0000,0xe5c7,
-0xbee9,0xbee6,0xe9bb,0xe9ba,0x0000,0xe9b9,0xe9b4,0x0000,
-0xe9b5,0x0000,0x0000,0x0000,0xbee7,0x0000,0xbee4,0xbee8,
-0xe9b3,0xbee5,0xe9b6,0xe9b7,0xe9bc,0x0000,0x0000,0xe9b8,
-0x0000,0x0000,0xecf2,0x0000,0x0000,0x0000,0xc0c7,0x0000,
-0xefdc,0xc0c6,0xefda,0xefdb,0xc260,0xc36e,0xf24b,0x0000,
-0xc36d,0x0000,0x0000,0xf451,0xf452,0x0000,0xc466,0x0000,
-0xf450,0xc4e4,0x0000,0xf7df,0xc5ce,0xf8aa,0xf8ab,0x0000,
-0xa4ea,0x0000,0xa6b1,0xa6b2,0xa7f3,0x0000,0xccd1,0xac54,
-0xaed1,0xb1e4,0x0000,0x0000,0xb0d2,0x0000,0xb4bf,0xb4c0,
-0xb3cc,0xd9a9,0x0000,0xb77c,0xe1fa,0xe1f9,0x0000,0x0000,
-0xa4eb,0xa6b3,0xccd2,0xaa42,0x0000,0xaa41,0x0000,0xcef9,
-0xcefa,0x0000,0xd1d7,0xd1d8,0xaed2,0xaed3,0x0000,0xaed4,
-0xd5af,0x0000,0x0000,0xb1e6,0x0000,0xb4c2,0x0000,0xb4c1,
-0xddc8,0xdf7a,0xe1fb,0xe9bd,0x0000,0x0000,0xc261,0xc467,
-0xa4ec,0x0000,0xa5bc,0xa5bd,0xa5bb,0xa5be,0xa5ba,0x0000,
-0x0000,0xa6b6,0x0000,0xc9f6,0xa6b5,0xa6b7,0x0000,0x0000,
-0xc9f1,0xc9f0,0xc9f3,0xc9f2,0xc9f5,0xa6b4,0xc9ef,0xc9f4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcafd,0xa7fd,0xcafe,
-0xcb43,0xa7fc,0x0000,0xcb47,0xcb42,0xcb45,0xa7f5,0xa7f6,
-0xa7f7,0xa7f8,0x0000,0xa840,0x0000,0xcb41,0xa7fa,0xa841,
-0x0000,0xcb40,0xcb46,0x0000,0xa7f9,0xcb44,0xa7fb,0xa7f4,
-0xa7fe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xaa57,0x0000,0xccd4,0xaa43,0x0000,0xaa4d,
-0xaa4e,0xaa46,0xaa58,0xaa48,0xccdc,0xaa53,0xccd7,0xaa49,
-0xcce6,0xcce7,0xccdf,0xccd8,0xaa56,0xcce4,0xaa51,0xaa4f,
-0x0000,0xcce5,0x0000,0xcce3,0xccdb,0xccd3,0xccda,0xaa4a,
-0x0000,0xaa50,0x0000,0xaa44,0xccde,0xccdd,0xccd5,0x0000,
-0xaa52,0xcce1,0xccd6,0xaa55,0xcce8,0xaa45,0x0000,0xaa4c,
-0xccd9,0xcce2,0xaa54,0x0000,0xaa47,0xaa4b,0x0000,0xcce0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcf5b,0xac5c,
-0xac69,0x0000,0xcf56,0xcf4c,0xac62,0xcf4a,0xac5b,0xcf45,
-0xac65,0xcf52,0xcefe,0xcf41,0x0000,0x0000,0x0000,0x0000,
-0xcf44,0xcefb,0xcf51,0xcf61,0xac60,0xcf46,0xcf58,0x0000,
-0xcefd,0xcf5f,0xcf60,0xcf63,0xcf5a,0xcf4b,0xcf53,0xac66,
-0xac59,0xac61,0xac6d,0xac56,0xac58,0x0000,0x0000,0x0000,
-0xcf43,0xac6a,0xac63,0xcf5d,0xcf40,0xac6c,0xac67,0xcf49,
-0x0000,0x0000,0xac6b,0xcf50,0xcf48,0xac64,0xcf5c,0xcf54,
-0x0000,0xac5e,0xcf62,0xcf47,0xac5a,0xcf59,0xcf4f,0xac5f,
-0xcf55,0xac57,0xcefc,0xac68,0xaee3,0xac5d,0xcf4e,0xcf4d,
-0xcf42,0x0000,0xcf5e,0x0000,0xcf57,0x0000,0x0000,0xac55,
-/* 0x6800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1ec,0xaeea,0xd1ed,0x0000,0xd1e1,0xaedf,
-0xaeeb,0x0000,0xd1da,0x0000,0xd1e3,0xd1eb,0x0000,0xd1d9,
-0xd1f4,0xaed5,0x0000,0x0000,0x0000,0xd1f3,0xd1ee,0x0000,
-0xd1ef,0xaedd,0xaee8,0xd1e5,0x0000,0xd1e6,0xd1f0,0xd1e7,
-0x0000,0xd1e2,0xd1dc,0xd1dd,0xd1ea,0xd1e4,0x0000,0x0000,
-0xaed6,0xaeda,0xd1f2,0xd1de,0xaee6,0xaee2,0x0000,0x0000,
-0xaee5,0xaeec,0xaedb,0xaee7,0xd1e9,0xaee9,0xaed8,0x0000,
-0xaed7,0xd1db,0x0000,0xd1df,0xaee0,0xd1f1,0xd1e8,0xd1e0,
-0xaee4,0xaee1,0x0000,0xaed9,0xaedc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5c4,0x0000,0xd5b4,0xd5b5,0xd5b9,
-0x0000,0xd5c8,0xd5c5,0x0000,0xd5be,0xd5bd,0xb1ed,0xd5c1,
-0xd5d0,0xd5b0,0x0000,0xd5d1,0xd5c3,0xd5d5,0xd5c9,0xb1ec,
-0xd5c7,0xb1e7,0xb1fc,0xb1f2,0x0000,0xb1f6,0xb1f5,0xd5b1,
-0x0000,0xd5ce,0xd5d4,0xd5cc,0xd5d3,0x0000,0x0000,0xd5c0,
-0xd5b2,0xd5d2,0xd5c2,0xb1ea,0xb1f7,0x0000,0xd5cb,0xb1f0,
-0x0000,0x0000,0x0000,0xd5ca,0xd5b3,0xb1f8,0x0000,0xb1fa,
-0xd5cd,0xb1fb,0xb1e9,0xd5ba,0xd5cf,0x0000,0x0000,0xb1ef,
-0xb1f9,0xd5bc,0xd5c6,0xd5b7,0xd5bb,0xb1f4,0xd5b6,0xb1e8,
-0xb1f1,0xb1ee,0xd5bf,0xaede,0xd9c0,0xb1eb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb1f3,0x0000,0xd9c3,0xd9d9,
-0xd9ce,0xb4d6,0x0000,0xb4d1,0xd9bd,0xb4d2,0xd9cd,0x0000,
-0xd9c6,0xd9d3,0xb4ce,0xd9ab,0xd9d5,0xb4c4,0xd9b3,0xb4c7,
-0xb4c6,0x0000,0xb4d7,0x0000,0xd9ad,0xd9cf,0xd9d0,0xb4c9,
-0xb4c5,0xd9bb,0x0000,0xb4d0,0xd9b6,0x0000,0xd9d1,0xb4cc,
-0xd9c9,0xd9d6,0xd9b0,0xd9b5,0xd9af,0x0000,0xb4cb,0xd9c2,
-0xddde,0xd9b1,0xb4cf,0xd9ba,0xd9d2,0xb4ca,0xd9b7,0xd9b4,
-0xd9c5,0xb4cd,0xb4c3,0xb4d9,0xd9c8,0xd9c7,0x0000,0x0000,
-/* 0x6900 */
-0x0000,0x0000,0x0000,0x0000,0xd9ac,0xb4c8,0xd9d4,0xd9bc,
-0xd9be,0x0000,0xd9cb,0xd9ca,0xd9aa,0xb4d3,0xb4d5,0xd9b2,
-0xd9b9,0xd9c1,0xb4d4,0xd9b8,0xd9c4,0xd9d7,0x0000,0xd9cc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d8,0x0000,0x0000,
-0x0000,0x0000,0xd9ae,0x0000,0x0000,0x0000,0x0000,0xddf2,
-0xb7a6,0x0000,0xddf0,0xdddb,0xdde0,0xddd9,0x0000,0xddec,
-0xddcb,0xddd2,0x0000,0xddea,0xddf4,0xdddc,0x0000,0xddcf,
-0xdde2,0xdde7,0xddd3,0x0000,0xdde4,0xddd0,0x0000,0x0000,
-0xddd7,0xddd8,0xb7a8,0xddeb,0xdde9,0x0000,0xddcc,0xddee,
-0x0000,0xddef,0xddf1,0xb7ac,0xb7a4,0x0000,0xd5b8,0xddd4,
-0xdde6,0xddd5,0xb7a1,0xb7b1,0xdded,0xb7af,0xb7ab,0xddca,
-0xb7a3,0x0000,0xddcd,0xb7b0,0x0000,0xdddd,0xddc9,0x0000,
-0xb7a9,0xdde1,0xddd1,0xb7aa,0xddda,0xb77e,0xb4d8,0xdde3,
-0xd9bf,0xddce,0x0000,0x0000,0xdde8,0xb7a5,0xdde5,0xb7a2,
-0xdddf,0xb7ad,0xddd6,0xddf3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb7a7,0xdec6,0x0000,0x0000,0xb7ae,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe24a,0xe248,0x0000,
-0xe25e,0xe246,0x0000,0xe258,0xb77d,0xba5f,0xe242,0xe25d,
-0x0000,0xe247,0xe255,0xba64,0xba5d,0x0000,0xe25b,0x0000,
-0xe240,0xe25a,0x0000,0xba6f,0xe251,0xe261,0xba6d,0xe249,
-0xba5e,0xe24b,0xe259,0xba67,0xe244,0xba6b,0xba61,0xe24d,
-0xe243,0xe1fc,0x0000,0xe257,0xba68,0xe260,0xe1fd,0xba65,
-0x0000,0xe253,0x0000,0xba66,0xe245,0xe250,0xe24c,0xe24e,
-0x0000,0xba60,0xe25f,0xba6e,0xe24f,0x0000,0xe262,0x0000,
-0x0000,0xe1fe,0xe254,0xba63,0xba6c,0xba6a,0xe241,0xe256,
-0xba69,0x0000,0x0000,0xba62,0xe252,0x0000,0x0000,0x0000,
-0x0000,0xe25c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5d5,0x0000,0xe5d1,0xe5cd,0xe5e1,0xe5de,
-0xbccd,0x0000,0x0000,0xe5e5,0xe5d4,0xbcd8,0xe5db,0x0000,
-0x0000,0xe5d0,0xe5da,0xbcd5,0xe5ee,0x0000,0xe5eb,0xe5dd,
-0xe5ce,0x0000,0x0000,0xe5e2,0xe5e4,0xbcd1,0xe5d8,0xe5d3,
-0xe5ca,0xbcce,0xbcd6,0x0000,0xe5e7,0xbcd7,0xe5cb,0xe5ed,
-0xe5e0,0xe5e6,0xbcd4,0x0000,0x0000,0xe5e3,0x0000,0xe5ea,
-0x0000,0xbcd9,0x0000,0xbcd3,0xe5dc,0xe5cf,0xe5ef,0xe5cc,
-0xe5e8,0xbcd0,0x0000,0xe5d6,0x0000,0xe5d7,0xbccf,0xbccc,
-0xe5d2,0xbcd2,0x0000,0xbccb,0x0000,0xe5e9,0xe5ec,0xe5d9,
-0xe9ca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9c2,0x0000,0xe9be,0xbef6,0x0000,0x0000,
-0xbeeb,0xbef0,0xbeec,0xe9cc,0xe9d7,0xbeea,0xe9c4,0xe9cd,
-0xe5df,0xe9ce,0x0000,0x0000,0xbef1,0x0000,0xe9dd,0xbef5,
-0xbef8,0xe9c0,0x0000,0xbef4,0x0000,0xe9db,0xe9dc,0xe9d2,
-0xe9d1,0xe9c9,0x0000,0x0000,0xe9d3,0xe9da,0xe9d9,0x0000,
-0xbeef,0xbeed,0xe9cb,0xe9c8,0x0000,0xe9c5,0xe9d8,0xbef7,
-0xe9d6,0xbef3,0xbef2,0x0000,0xe9d0,0x0000,0xe9bf,0xe9c1,
-0xe9c3,0xe9d5,0xe9cf,0xbeee,0x0000,0xe9c6,0x0000,0xe9d4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9c7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc0cf,0xed45,
-0xc0c8,0xecf5,0x0000,0xed41,0xc0ca,0xed48,0x0000,0xecfc,
-0x0000,0xecf7,0x0000,0x0000,0xed49,0xecf3,0xecfe,0x0000,
-0xc0d1,0xed44,0xed4a,0xecfd,0xc0c9,0xed40,0xecf4,0xc0d0,
-0x0000,0x0000,0xed47,0xecf9,0xc0cc,0x0000,0xecfb,0xecf8,
-0xc0d2,0xecfa,0xc0cb,0xc0ce,0xed43,0xecf6,0xed46,0x0000,
-0xed42,0x0000,0x0000,0x0000,0xc263,0xefe7,0xc268,0xc269,
-0x0000,0x0000,0x0000,0xc262,0xefe6,0x0000,0xefe3,0xefe4,
-0xc266,0xefde,0xefe2,0xc265,0x0000,0xefdf,0x0000,0x0000,
-0x0000,0x0000,0xc267,0xc264,0x0000,0xefdd,0xefe1,0xefe5,
-0x0000,0x0000,0x0000,0xf251,0xf24e,0xf257,0x0000,0xf256,
-0xf254,0xf24f,0x0000,0xc372,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf250,0xc371,0xc0cd,0xf253,0xc370,0xf258,0xf252,
-0xf24d,0xefe0,0x0000,0x0000,0x0000,0xc36f,0x0000,0xf24c,
-0xf456,0x0000,0xf455,0xf255,0xc468,0x0000,0xf459,0xf45a,
-0xf454,0xf458,0x0000,0xf453,0x0000,0x0000,0x0000,0x0000,
-0xf5d1,0xf457,0xc4e7,0xc4e5,0xf5cf,0x0000,0x0000,0x0000,
-0xf5d2,0x0000,0xf5ce,0xf5d0,0xc4e6,0x0000,0x0000,0x0000,
-0xf6e5,0xf6e6,0xc576,0xf6e4,0x0000,0x0000,0x0000,0xf7e2,
-0xc5cf,0xf7e0,0xf7e1,0xf8ac,0x0000,0x0000,0xc656,0xf8f3,
-0xf8f1,0xf8f2,0xf8f4,0x0000,0x0000,0x0000,0xf9bb,0x0000,
-0xa4ed,0xa6b8,0x0000,0xaa59,0x0000,0xcce9,0x0000,0x0000,
-0xcf64,0x0000,0x0000,0x0000,0xd1f5,0xd1f7,0x0000,0xd1f6,
-0x0000,0xd1f8,0xb1fd,0xd5d7,0xd1f9,0x0000,0xd5d6,0xd5d8,
-0xd5d9,0xd9da,0xb4db,0xd9db,0xd9dd,0xb4dc,0xb4da,0xd9dc,
-0x0000,0xddfa,0xddf8,0xddf7,0x0000,0xddf6,0xddf5,0xb7b2,
-0xddf9,0xba70,0xe263,0xe265,0xba71,0xe264,0xbcdb,0x0000,
-0xbcda,0xe5f0,0x0000,0x0000,0xe9df,0xe9de,0xe9e0,0x0000,
-0x0000,0xbef9,0x0000,0xed4b,0xc0d3,0x0000,0xefe8,0xc26a,
-0xf259,0xc577,0xa4ee,0xa5bf,0xa6b9,0xa842,0xaa5a,0xaa5b,
-0x0000,0x0000,0xac6e,0x0000,0x0000,0xd1fa,0x0000,0x0000,
-0x0000,0x0000,0xb7b3,0x0000,0x0000,0x0000,0xe6d1,0xbefa,
-0xc26b,0xa4ef,0x0000,0xa6ba,0x0000,0x0000,0xcceb,0xaa5c,
-0xccea,0x0000,0xcf65,0xac6f,0xcf66,0x0000,0xac70,0x0000,
-0xd1fc,0xaeee,0xaeed,0x0000,0xd5de,0xd5dc,0xd5dd,0xd5db,
-0x0000,0xd5da,0x0000,0x0000,0xd9de,0xd9e1,0xb4de,0xd9df,
-0xb4dd,0xd9e0,0x0000,0xddfb,0x0000,0x0000,0xe266,0xe267,
-0xe268,0x0000,0xe5f3,0xe5f2,0xbcdc,0xe5f1,0xe5f4,0xe9e1,
-0x0000,0x0000,0xe9e2,0xe9e3,0x0000,0xed4c,0xc0d4,0xc26c,
-0xf25a,0x0000,0xc4e8,0xc95f,0x0000,0xac71,0xcf67,0xaeef,
-0x0000,0x0000,0xb1fe,0x0000,0xb4df,0xd9e2,0x0000,0xb7b5,
-0xb7b4,0x0000,0x0000,0xe269,0xe26a,0xbcdd,0xbcde,0xe9e5,
-0xe9e4,0xefe9,0xf7e3,0xa4f0,0xc960,0xa5c0,0x0000,0xa843,
-0xcb48,0x0000,0xac72,0xb7b6,0xa4f1,0x0000,0xcf68,0xac73,
-0xcf69,0x0000,0xc0d5,0xa4f2,0x0000,0x0000,0xccec,0x0000,
-0xcf6a,0x0000,0xd242,0xd241,0xd1fe,0x0000,0xd1fd,0xd243,
-0xd240,0x0000,0x0000,0xb240,0xb241,0x0000,0x0000,0xb4e0,
-0xd9e3,0x0000,0xd9e4,0xd9e5,0x0000,0x0000,0x0000,0xde41,
-0xde42,0xde40,0x0000,0xddfd,0xddfe,0xb7b7,0xe26b,0xe5f7,
-0xe5f6,0xe5f5,0xe5f8,0xe9e7,0xe9e6,0xbefb,0xe9e8,0x0000,
-0xc0d6,0xed4d,0x0000,0xefea,0xf25b,0xf6e7,0x0000,0xa4f3,
-0xa5c2,0xa5c1,0x0000,0xaa5d,0xc961,0xc97e,0xa6bb,0x0000,
-0xc9f7,0xcb49,0xcb4a,0xaa5e,0x0000,0xcced,0x0000,0xac74,
-0xcf6b,0xcf6c,0x0000,0xaef0,0xaef4,0xd244,0xaef3,0xaef1,
-0xaef2,0x0000,0xd5df,0xb242,0xb4e3,0x0000,0xb4e1,0xb4e2,
-0xd9e6,0x0000,0x0000,0xba72,0xa4f4,0x0000,0xc9a1,0x0000,
-0xa5c3,0x0000,0x0000,0xc9a4,0x0000,0x0000,0xa5c6,0xc9a3,
-0xa5c5,0xa5c4,0xa844,0xc9a2,0x0000,0x0000,0xc9f8,0x0000,
-0x0000,0x0000,0xc9fc,0xc9fe,0xca40,0xa6c5,0xa6c6,0xc9fb,
-0xa6c1,0x0000,0xc9f9,0x0000,0xc9fd,0xa6c2,0x0000,0xa6bd,
-0x0000,0xa6be,0x0000,0xa6c4,0xc9fa,0xa6bc,0xa845,0xa6bf,
-0xa6c0,0xa6c3,0x0000,0x0000,0x0000,0xcb5b,0xcb59,0xcb4c,
-0xa851,0xcb53,0xa84c,0xcb4d,0x0000,0xcb55,0x0000,0xcb52,
-0xa84f,0xcb51,0xa856,0xcb5a,0xa858,0x0000,0xa85a,0x0000,
-0xcb4b,0x0000,0xa84d,0xcb5c,0x0000,0xa854,0xa857,0x0000,
-0xcd45,0xa847,0xa85e,0xa855,0xcb4e,0xa84a,0xa859,0xcb56,
-0xa848,0xa849,0xcd43,0xcb4f,0xa850,0xa85b,0xcb5d,0xcb50,
-0xa84e,0x0000,0xa853,0xccee,0xa85c,0xcb57,0xa852,0x0000,
-0xa85d,0xa846,0xcb54,0xa84b,0xcb58,0xcd44,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xaa6a,0xaa7a,0xccf5,0xaa71,0x0000,
-0xcd4b,0xaa62,0x0000,0xaa65,0xcd42,0x0000,0xccf3,0xccf7,
-0xaa6d,0xaa6f,0xccfa,0xaa76,0xaa68,0xaa66,0xaa67,0xaa75,
-0xcd47,0xaa70,0xccf9,0xccfb,0xaa6e,0xaa73,0xccfc,0xcd4a,
-0x0000,0xac75,0xaa79,0x0000,0xaa63,0xcd49,0x0000,0xcd4d,
-0xccf8,0xcd4f,0xcd40,0xaa6c,0xccf4,0xaa6b,0xaa7d,0xaa72,
-0x0000,0xccf2,0xcf75,0xaa78,0xaa7c,0xcd41,0xcd46,0x0000,
-0xaa7e,0xaa77,0xaa69,0xaa5f,0x0000,0xaa64,0x0000,0xccf6,
-0xaa60,0xcd4e,0x0000,0xccf0,0xccef,0xccfd,0xccf1,0xaa7b,
-0xaef5,0xaa74,0xccfe,0xaa61,0x0000,0xaca6,0x0000,0x0000,
-0x0000,0xcd4c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcf7c,0xcfa1,0x0000,0xcfa4,0xcf77,0x0000,0x0000,0xcfa7,
-0xcfaa,0xcfac,0xcf74,0xac76,0xac7b,0xd249,0xacad,0xcfa5,
-0xcfad,0xcf7b,0xcf73,0x0000,0x0000,0x0000,0xd264,0xac7e,
-0xcfa2,0xcf78,0xcf7a,0xaca5,0x0000,0xcf7d,0xac7d,0xcf70,
-0xcfa8,0x0000,0xcfab,0x0000,0x0000,0xac7a,0x0000,0xaca8,
-0xcf6d,0xacaa,0xac78,0xacae,0xcfa9,0xcf6f,0xacab,0xd25e,
-0xcd48,0xac7c,0xac77,0xcf76,0xcf6e,0xacac,0xaca4,0xcfa3,
-0xaca9,0xaca7,0xcf79,0xaca1,0xcf71,0xaca2,0xaca3,0xcf72,
-0xcfa6,0xac79,0xcf7e,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd24c,0xaefd,0xaf43,0x0000,0x0000,0x0000,0xd255,0xd25b,
-0xd257,0xd24a,0xd24d,0xd246,0xd247,0xaf4a,0xaefa,0xd256,
-0xd25f,0xaf45,0xaef6,0x0000,0xaf40,0xd24e,0xaf42,0xd24f,
-0xd259,0x0000,0x0000,0x0000,0xaf44,0xd268,0xd248,0xaefc,
-0xaefb,0xaf48,0xd245,0xd266,0xd25a,0xd267,0xd261,0xd253,
-0xd262,0x0000,0xd25c,0xd265,0xd263,0xaf49,0xd254,0xaef9,
-0xaef8,0xaf41,0xaf47,0xd260,0xaf46,0xd251,0xb243,0x0000,
-0xd269,0xd250,0xd24b,0xaefe,0xaf4b,0xaef7,0x0000,0xd258,
-0xd25d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb265,0xd5e1,0xd5e5,0x0000,0xb252,0xb250,
-0x0000,0x0000,0xb247,0xd5e3,0xd5e2,0xb25b,0x0000,0xd5e8,
-0xb255,0x0000,0xd5fa,0xd647,0xb244,0xd5f7,0xd5f0,0xb267,
-0xd5e0,0x0000,0xd5fc,0x0000,0xb264,0xb258,0xb263,0xb24e,
-0xd5ec,0xd5fe,0xd5f6,0xb24f,0xb249,0xd645,0x0000,0xd5fd,
-0xd640,0xb251,0xb259,0xd642,0xd5ea,0xd5fb,0xd5ef,0xd644,
-0xb25e,0xb246,0xb25c,0xd5f4,0xd5f2,0xd5f3,0xb253,0xd5ee,
-0xd5ed,0xb248,0xd5e7,0xd646,0xb24a,0xd5f1,0xb268,0x0000,
-0xb262,0xd5e6,0xb25f,0xb25d,0xb266,0xd5f8,0xb261,0xd252,
-0xd5f9,0xb260,0xd641,0xb245,0xd5f5,0xb257,0xd5e9,0xb256,
-0x0000,0xb254,0xb24c,0xb24b,0xd9e7,0xd643,0x0000,0x0000,
-0xd5eb,0x0000,0x0000,0xd9fc,0x0000,0xb24d,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb541,0xb25a,0xb4ee,0xd9f6,0xb4fc,0x0000,0xd9ea,
-0xb4eb,0xb4e7,0xda49,0xb4ed,0xb4f1,0xb4ec,0xb4f5,0xda4d,
-0xda44,0x0000,0x0000,0xd9f1,0xb4fa,0xb4f4,0xd9fd,0xb4e4,
-0xda4a,0xda43,0xb4e8,0xd9f7,0xb4f7,0xda55,0xda56,0x0000,
-0xb4e5,0xda48,0xb4f9,0xd9fb,0xd9ed,0xd9ee,0xb4fd,0xd9f2,
-0xd9f9,0xd9f3,0x0000,0xb4fb,0xb544,0xd9ef,0xd9e8,0xd9e9,
-0x0000,0xd9eb,0xb4ea,0xd9f8,0x0000,0xb4f8,0xb542,0x0000,
-0x0000,0xd9fa,0xda53,0xda4b,0xb4e6,0xda51,0xb4f2,0x0000,
-0xb4f0,0x0000,0xda57,0xb4ef,0xda41,0xd9f4,0xd9fe,0xb547,
-0xda45,0xda42,0xd9f0,0xb543,0xda4f,0xda4c,0xda54,0xb4e9,
-0xda40,0xb546,0x0000,0xda47,0x0000,0x0000,0xb4f3,0xb4f6,
-0x0000,0xda46,0xb545,0xd9f5,0xd5e4,0x0000,0x0000,0xda50,
-0xda4e,0xda52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9ec,0xb540,0x0000,0x0000,0x0000,0xde61,0xde60,0xde46,
-0xb7bd,0x0000,0xde5f,0xde49,0xde4a,0x0000,0xb7c7,0xde68,
-0xb7c2,0xde5e,0x0000,0xde43,0xb7c8,0xb7be,0xde52,0xde48,
-0xde4b,0xde63,0xb7b8,0xde6a,0xde62,0xb7c1,0xde57,0xb7cc,
-0x0000,0x0000,0xb7cb,0xb7c5,0x0000,0x0000,0xde69,0xb7b9,
-0xde55,0xde4c,0xde59,0xde65,0xb7cd,0x0000,0xb7bb,0xde54,
-0x0000,0xde4d,0xb7c4,0x0000,0xb7c3,0xde50,0xde5a,0xde64,
-0xde47,0xde51,0xb7bc,0xde5b,0xb7c9,0xb7c0,0xde4e,0xb7bf,
-0xde45,0xde53,0xde67,0xb4fe,0xbab0,0xde56,0xe26c,0xde58,
-0xde66,0xb7c6,0xde4f,0xb7ba,0xb7ca,0xbcf0,0xde44,0x0000,
-0xde5d,0x0000,0x0000,0x0000,0xde5c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2aa,0xbaad,0xe27d,0xe2a4,0xbaa2,
-0x0000,0xe26e,0xbaaf,0x0000,0xba77,0xe26d,0xe2b0,0xbab1,
-0xe271,0xe2a3,0x0000,0xe273,0xe2b3,0xe2af,0xba75,0xbaa1,
-0xe653,0xbaae,0xba7d,0xe26f,0x0000,0xe2ae,0xbaa3,0xe2ab,
-0xe2b8,0xe275,0xe27e,0x0000,0x0000,0xe2b6,0xe2ac,0xba7c,
-0x0000,0x0000,0xe27c,0xba76,0xba74,0xbaa8,0x0000,0x0000,
-0xe27a,0xe277,0xe278,0x0000,0xe2b2,0x0000,0xe2b7,0xe2b5,
-0xba7a,0xe2b9,0xba7e,0xbaa7,0x0000,0xe270,0xe5fa,0xe279,
-0x0000,0xba78,0xbaac,0xbaa9,0xba7b,0xe2a5,0xe274,0xbaaa,
-0xe2a7,0xbaa4,0xbaa6,0xba73,0x0000,0xe2a9,0xe2a1,0xe272,
-0xbaa5,0xe2b1,0xe2b4,0xe27b,0xe2a8,0x0000,0xba79,0xbcdf,
-0xe2a6,0xe5f9,0x0000,0xe2ad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe276,0xe644,
-0xe64e,0xbce2,0xe64d,0xe659,0xbce4,0xe64b,0x0000,0xe64f,
-0xbcef,0x0000,0xe646,0xbce7,0x0000,0xe652,0xe9f0,0xbcf3,
-0xbcf2,0xe654,0xe643,0xe65e,0xbced,0x0000,0xbce3,0xe657,
-0x0000,0xe65b,0xe660,0xe655,0xe649,0xbce6,0xbce9,0xbcf1,
-0xbcec,0x0000,0xe64c,0xe2a2,0x0000,0x0000,0xe648,0xe65f,
-0xbce8,0x0000,0xbceb,0xe661,0xbce0,0xe656,0xe5fb,0xe65c,
-0xc0df,0x0000,0xe64a,0x0000,0xbce1,0xe645,0xbce5,0xe5fc,
-0xbaab,0xe641,0x0000,0xe65a,0xe642,0xe640,0xbcea,0x0000,
-0xe658,0x0000,0xe5fe,0xe651,0xe650,0xe65d,0xe647,0xbcee,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9f3,0x0000,
-0xbf49,0xbefe,0xea40,0xe9eb,0xbf41,0xe9f7,0xbf48,0xbf43,
-0xe9f5,0xed4f,0xe9fb,0xea42,0xe9fa,0xe9e9,0xe9f8,0xea44,
-0xea46,0xbefd,0xea45,0xbf44,0xbf4a,0x0000,0xbf47,0x0000,
-0xe9fe,0xbf46,0xe9f9,0x0000,0xe9ed,0xe9f2,0x0000,0xe9fd,
-0xbf45,0xbf42,0xbefc,0xbf40,0xe9f1,0x0000,0xe5fd,0xe9ec,
-0xe9ef,0xea41,0xe9f4,0xe9ea,0xed4e,0xea43,0xe9ee,0xe9fc,
-0x0000,0x0000,0x0000,0x0000,0xed51,0xc0e3,0x0000,0x0000,
-0xc0d7,0x0000,0x0000,0xc0db,0xed53,0xed59,0xed57,0xc0d9,
-0xc0da,0xc0e1,0xed5a,0xed52,0xc0dc,0x0000,0xed56,0xed55,
-0xed5b,0xc0e2,0x0000,0xc0dd,0xc0e0,0xed54,0xc0e4,0xc0de,
-0xc0e5,0xc0d8,0xed58,0x0000,0xed50,0x0000,0x0000,0xeff7,
-0x0000,0x0000,0xc271,0xeff4,0xeff6,0x0000,0xc26f,0xeff2,
-0xeff3,0xefee,0x0000,0x0000,0xe9f6,0xefef,0xc270,0xefeb,
-0x0000,0xc26d,0xeff8,0xc26e,0xefec,0xefed,0xeff1,0xc273,
-0x0000,0xc272,0x0000,0x0000,0xeff0,0xc378,0xf25f,0xf265,
-0xc379,0xf25c,0xc376,0xc373,0xf267,0xc377,0x0000,0xc374,
-0xf25e,0xf261,0xf262,0xf263,0xf266,0x0000,0xeff5,0xf25d,
-0xc375,0xf264,0xf268,0xf260,0x0000,0x0000,0x0000,0xf45d,
-0xc46a,0xf460,0xc46b,0xf468,0xf45f,0xf45c,0x0000,0xf45e,
-0xf462,0xf465,0xf464,0xf467,0xf45b,0x0000,0xc469,0xf463,
-0xf466,0xf469,0xf461,0xf5d3,0xf5d4,0xf5d8,0xf5d9,0x0000,
-0xf5d6,0xf5d7,0xf5d5,0x0000,0xc4e9,0x0000,0x0000,0x0000,
-0x0000,0xc578,0xf6eb,0x0000,0x0000,0xf6e8,0xf6e9,0xf6ea,
-0xc579,0x0000,0xf7e5,0xf7e4,0x0000,0xf8af,0xc5f4,0xf8ad,
-0xf8b0,0xf8ae,0xf8f5,0xc657,0xc665,0xf9a3,0xf96c,0x0000,
-0xf9a2,0xf9d0,0xf9d1,0xa4f5,0x0000,0x0000,0x0000,0x0000,
-0xa6c7,0xca41,0x0000,0x0000,0xcb5e,0x0000,0xa85f,0x0000,
-0xa862,0x0000,0xcb5f,0x0000,0xa860,0xa861,0x0000,0x0000,
-0x0000,0x0000,0xcd58,0xcd5a,0xcd55,0xcd52,0xcd54,0x0000,
-0x0000,0x0000,0xaaa4,0x0000,0x0000,0x0000,0xaaa2,0x0000,
-0x0000,0xcd56,0xaaa3,0xcd53,0xcd50,0xaaa1,0xcd57,0x0000,
-0xcd51,0xaaa5,0xcd59,0x0000,0x0000,0x0000,0x0000,0xcfaf,
-0x0000,0xcfb3,0x0000,0x0000,0xacb7,0x0000,0x0000,0x0000,
-0x0000,0xcfb6,0x0000,0xacaf,0xacb2,0xacb4,0xacb6,0xacb3,
-0xcfb2,0xcfb1,0x0000,0xacb1,0xcfb4,0xcfb5,0x0000,0xcfae,
-0xacb5,0x0000,0xacb0,0x0000,0x0000,0x0000,0xcfb0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd277,0xd278,0xd279,
-0xaf50,0x0000,0xaf4c,0xd26e,0x0000,0xd276,0xd27b,0xaf51,
-0x0000,0xd26c,0xd272,0xd26b,0xd275,0x0000,0x0000,0xd271,
-0xaf4d,0xaf4f,0xd27a,0x0000,0xd26a,0xd26d,0xd273,0x0000,
-0xd274,0xd27c,0xd270,0x0000,0xaf4e,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb26d,
-0xd64e,0x0000,0x0000,0xd650,0xd64c,0x0000,0xd658,0xd64a,
-0xd657,0xb269,0xd648,0xda5b,0xd652,0xb26c,0x0000,0xd653,
-0xd656,0x0000,0xd65a,0x0000,0xd64f,0x0000,0xd654,0x0000,
-0x0000,0xb26a,0xb26b,0xd659,0xd64d,0xd649,0xd65b,0x0000,
-0xd651,0x0000,0x0000,0xd655,0x0000,0x0000,0x0000,0xd64b,
-0x0000,0xb548,0xb549,0xda65,0xb54f,0x0000,0xda59,0xda62,
-0xda58,0xb54c,0xda60,0xda5e,0x0000,0xda5f,0xb54a,0x0000,
-0xda63,0x0000,0x0000,0x0000,0x0000,0x0000,0xda5c,0xda5a,
-0xb54b,0xda5d,0xda61,0x0000,0x0000,0x0000,0xb54d,0x0000,
-0x0000,0x0000,0xda64,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xde70,0xde77,0xde79,0xdea1,0x0000,0xb7da,0xde6b,
-0x0000,0xb7d2,0x0000,0xde7a,0xb7d7,0xdea2,0xb7ce,0x0000,
-0xde7d,0x0000,0xde6d,0xde7e,0xde6c,0x0000,0xb7dc,0x0000,
-0xde78,0xb7cf,0xdea3,0x0000,0xb7d4,0xde71,0xb7d9,0xde7c,
-0xde6f,0xde76,0xde72,0xde6e,0xb7d1,0xb7d8,0xb7d6,0xb7d3,
-0xb7db,0xb7d0,0xde75,0x0000,0xb7d5,0x0000,0xb54e,0x0000,
-0xde7b,0x0000,0xde73,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xde74,0x0000,0x0000,0xe2c1,0x0000,0xbab4,0x0000,0x0000,
-0xe2bd,0xe2c3,0xe2bf,0x0000,0xbab6,0xe2be,0xe2c2,0xe2ba,
-0x0000,0xe2bc,0xbab5,0x0000,0x0000,0x0000,0x0000,0xe2c0,
-0xe2bb,0x0000,0xbab7,0x0000,0xbab2,0x0000,0x0000,0xe2c4,
-0x0000,0xbab3,0xe667,0xe664,0xe670,0xe66a,0xe66c,0xbcf4,
-0xe666,0xe66e,0x0000,0x0000,0xe66d,0xe66b,0x0000,0xe671,
-0xbcf7,0xe668,0xe66f,0x0000,0xbcf5,0x0000,0x0000,0xe663,
-0xe665,0xbcf6,0xe662,0xe672,0x0000,0xe669,0x0000,0x0000,
-0xea4a,0xbf51,0x0000,0x0000,0xea55,0xea53,0xbf4b,0xea49,
-0xea4c,0xea4d,0xea48,0xbf55,0xbf56,0xea47,0xea56,0xea51,
-0xbf4f,0xbf4c,0xea50,0xea4e,0x0000,0x0000,0xbf52,0xea52,
-0xbf4d,0x0000,0xbf4e,0x0000,0xea4f,0xbf50,0xea4b,0x0000,
-0xea54,0xbf53,0xea57,0xea58,0xbf54,0x0000,0x0000,0xc0e7,
-0xc0ee,0xed5c,0xed62,0x0000,0xed60,0xc0ea,0xc0e9,0xc0e6,
-0xed5e,0x0000,0x0000,0x0000,0xc0ec,0xc0eb,0xc0e8,0x0000,
-0xed61,0xed5d,0xed5f,0x0000,0xc0ed,0x0000,0x0000,0x0000,
-0xc277,0xeffb,0x0000,0xc274,0xc275,0xeffd,0xc276,0xeffa,
-/* 0x7200 */
-0x0000,0xeff9,0xf26c,0xeffc,0x0000,0xf26d,0xc37a,0xf26b,
-0x0000,0x0000,0xf26a,0x0000,0xf269,0xc37b,0x0000,0x0000,
-0xc46c,0x0000,0x0000,0xf46a,0xf46b,0x0000,0x0000,0x0000,
-0x0000,0xf5dc,0xf5db,0xc4ea,0x0000,0xf5da,0xf6ec,0xf6ed,
-0x0000,0x0000,0xf7e6,0xf8b1,0x0000,0x0000,0xf8f6,0xf9bc,
-0xc679,0xf9c6,0xa4f6,0x0000,0xaaa6,0xaaa7,0x0000,0x0000,
-0xacb8,0x0000,0x0000,0x0000,0x0000,0xc0ef,0xa4f7,0x0000,
-0xaaa8,0xaf52,0xb7dd,0xa4f8,0x0000,0xb26e,0xbab8,0xc962,
-0x0000,0xcfb7,0xd27d,0x0000,0xe2c5,0x0000,0xc0f0,0xa4f9,
-0xaaa9,0xcfb8,0xcfb9,0xda66,0xb550,0x0000,0x0000,0xdea4,
-0x0000,0x0000,0xb7de,0xe2c6,0x0000,0x0000,0xbcf8,0x0000,
-0xc37c,0xa4fa,0xda67,0xa4fb,0x0000,0xa6c9,0xca42,0xa6c8,
-0xa865,0xa864,0xa863,0xcb60,0x0000,0x0000,0x0000,0xaaaa,
-0x0000,0xaaab,0xcd5b,0x0000,0xcfba,0x0000,0xcfbd,0xacba,
-0xcfbb,0x0000,0xacb9,0xcfbc,0xacbb,0x0000,0xd2a2,0xd2a1,
-0xd27e,0xaf53,0x0000,0xd65d,0xd65e,0xb26f,0xd65c,0xd65f,
-0xb552,0xb270,0x0000,0x0000,0xb551,0xda6b,0xda6a,0x0000,
-0xda68,0xda69,0x0000,0xda6c,0xdea6,0xdea5,0xdea9,0x0000,
-0xdea8,0xdea7,0xbab9,0xe2c9,0x0000,0xe2c8,0xbaba,0xe2c7,
-0xe673,0x0000,0xe674,0xbcf9,0x0000,0xea59,0xea5a,0x0000,
-0x0000,0xf272,0xc37d,0xf271,0xf270,0xf26e,0xf26f,0xc4eb,
-0xf46c,0xf6ee,0xf8f7,0x0000,0xa4fc,0x0000,0xc9a5,0xa5c7,
-0xc9a6,0x0000,0x0000,0x0000,0xca43,0xca44,0x0000,0x0000,
-0x0000,0x0000,0xcb66,0x0000,0x0000,0xcb62,0x0000,0xcb61,
-0xaaac,0xcb65,0xa867,0xcb63,0xa866,0xcb67,0xcb64,0x0000,
-0x0000,0xcd5f,0xcfbe,0xcd5d,0xcd64,0x0000,0xaaad,0x0000,
-0xaab0,0xcd65,0xcd61,0x0000,0xcd62,0x0000,0xcd5c,0xaaaf,
-0xcd5e,0xaaae,0xcd63,0x0000,0xcd60,0x0000,0x0000,0xcfc2,
-0xacbd,0xacbe,0x0000,0xcfc5,0xcfbf,0x0000,0xcfc4,0x0000,
-0xcfc0,0xacbc,0xcfc3,0xcfc1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd2a8,0xd2a5,0x0000,0xd2a7,0xaf58,
-0xaf57,0xaf55,0xd2a4,0xd2a9,0xaf54,0xaf56,0xd2a6,0xd667,
-0xd2a3,0xd2aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xd662,
-0xd666,0x0000,0xd665,0xda6e,0xda79,0x0000,0x0000,0xd668,
-0x0000,0xd663,0xda6d,0xb274,0x0000,0x0000,0xb273,0xd661,
-0xd664,0xb275,0x0000,0xb272,0xb271,0xd660,0xd669,0x0000,
-0x0000,0x0000,0xda70,0xda77,0x0000,0xb554,0xda76,0xda73,
-0x0000,0xb556,0x0000,0x0000,0x0000,0xda75,0x0000,0x0000,
-0xda6f,0xda71,0xda74,0xda72,0xb555,0xda78,0xb553,0xb7df,
-0x0000,0x0000,0xdead,0xdeac,0xdeaa,0x0000,0xb7e2,0xb7e1,
-0xdeae,0x0000,0xdeab,0xe2ca,0xbabb,0xb7e0,0x0000,0x0000,
-0x0000,0xdeb0,0xdeaf,0x0000,0xe2cd,0xe2cb,0xbcfa,0x0000,
-0xbabc,0xe2cc,0xe676,0x0000,0x0000,0x0000,0x0000,0xbcfb,
-0xe675,0xe67e,0xe67d,0xe67b,0x0000,0xe67a,0xe677,0xe678,
-0xe679,0xe67c,0xe6a1,0x0000,0x0000,0xea5f,0xea5c,0xea5d,
-0xbf57,0xea5b,0xea61,0xea60,0xea5e,0x0000,0xed64,0xed65,
-0xc0f1,0x0000,0xc0f2,0xed63,0x0000,0xc279,0xeffe,0xc278,
-0xc37e,0x0000,0xc3a1,0xc46d,0xf46e,0xf46d,0xf5dd,0xf6ef,
-0xc57a,0xf7e8,0xf7e7,0xf7e9,0xa5c8,0xcfc6,0xaf59,0xb276,
-0xd66a,0xa5c9,0xc9a7,0xa4fd,0x0000,0x0000,0xca45,0x0000,
-0x0000,0x0000,0xcb6c,0xcb6a,0xcb6b,0xcb68,0xa868,0xcb69,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcd6d,0x0000,0xaab3,
-0xcd6b,0xcd67,0xcd6a,0x0000,0xcd66,0xaab5,0xcd69,0x0000,
-0xaab2,0xaab1,0x0000,0xaab4,0xcd6c,0xcd68,0x0000,0x0000,
-0x0000,0x0000,0xacc2,0xacc5,0xcfce,0xcfcd,0xcfcc,0xacbf,
-0xcfd5,0xcfcb,0x0000,0xacc1,0xd2af,0x0000,0xcfd2,0xcfd0,
-0xacc4,0x0000,0xcfc8,0xcfd3,0x0000,0xcfca,0xcfd4,0xcfd1,
-0xcfc9,0x0000,0xacc0,0xcfd6,0xcfc7,0xacc3,0x0000,0x0000,
-0x0000,0x0000,0xd2b4,0xd2ab,0xd2b6,0x0000,0xd2ae,0xd2b9,
-0xd2ba,0xd2ac,0xd2b8,0xd2b5,0xd2b3,0xd2b7,0xaf5f,0x0000,
-0xaf5d,0x0000,0x0000,0xd2b1,0x0000,0xd2ad,0x0000,0xd2b0,
-0xd2bb,0xd2b2,0xaf5e,0xcfcf,0x0000,0xaf5a,0xaf5c,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd678,0xd66d,0xd66b,0x0000,
-0xd66c,0x0000,0xd673,0x0000,0xd674,0xd670,0xb27b,0xd675,
-0xd672,0xd66f,0x0000,0xb279,0xd66e,0xb277,0xb27a,0xd671,
-0xd679,0xaf5b,0xb278,0xd677,0xd676,0xb27c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xda7e,0x0000,
-0x0000,0x0000,0xdaa1,0xb560,0x0000,0xdaa7,0x0000,0x0000,
-0xdaa9,0xdaa2,0xb55a,0xdaa6,0xdaa5,0xb55b,0xb561,0x0000,
-0xb562,0xdaa8,0xb558,0xda7d,0xda7b,0xdaa3,0xda7a,0xb55f,
-0xda7c,0xdaa4,0xdaaa,0xb559,0xb55e,0xb55c,0xb55d,0x0000,
-0x0000,0x0000,0xb557,0x0000,0x0000,0x0000,0x0000,0xb7e9,
-0xdeb7,0xb7e8,0xdebb,0x0000,0xdeb1,0x0000,0xdebc,0x0000,
-0x0000,0x0000,0xdeb2,0xdeb3,0x0000,0xdebd,0xdeba,0xdeb8,
-0xdeb9,0xdeb5,0xdeb4,0x0000,0xdebe,0xb7e5,0x0000,0xdeb6,
-0x0000,0xb7ea,0xb7e4,0xb7eb,0xb7ec,0x0000,0xb7e7,0xb7e6,
-0x0000,0x0000,0xe2ce,0xbabe,0xbabd,0x0000,0x0000,0xe2d3,
-0x0000,0xbcfc,0xbabf,0x0000,0x0000,0xbac1,0xe2d4,0xb7e3,
-0xbac0,0xe2d0,0xe2d2,0xe2cf,0x0000,0xe2d1,0x0000,0x0000,
-0x0000,0xe6ab,0x0000,0x0000,0xe6aa,0xe6a7,0xbd40,0xea62,
-0xbd41,0xe6a6,0x0000,0xbcfe,0x0000,0xe6a8,0xe6a5,0xe6a2,
-0xe6a9,0xe6a3,0xe6a4,0xbcfd,0x0000,0x0000,0x0000,0x0000,
-0xed69,0x0000,0xea66,0x0000,0xea65,0xea67,0x0000,0xed66,
-0xbf5a,0x0000,0xea63,0x0000,0xbf58,0x0000,0xbf5c,0xbf5b,
-0xea64,0xea68,0x0000,0xbf59,0x0000,0xed6d,0xc0f5,0xc27a,
-0xc0f6,0xc0f3,0xed6a,0xed68,0x0000,0xed6b,0x0000,0xed6e,
-0xc0f4,0xed6c,0xed67,0x0000,0x0000,0xf042,0xf045,0xf275,
-0xf040,0x0000,0xf46f,0xf046,0x0000,0xc3a2,0xf044,0xc27b,
-0xf041,0xf043,0xf047,0xf276,0x0000,0xf274,0x0000,0x0000,
-0x0000,0x0000,0xc3a3,0xf273,0x0000,0x0000,0x0000,0xc46e,
-0x0000,0x0000,0x0000,0x0000,0xc4ed,0xf6f1,0xc4ec,0xf6f3,
-0xf6f0,0xf6f2,0xc5d0,0xf8b2,0xa5ca,0xcd6e,0xd2bc,0xd2bd,
-0xb27d,0xdebf,0xbf5d,0xc3a4,0xc57b,0xf8b3,0xa5cb,0x0000,
-0xcd6f,0xa260,0x0000,0x0000,0xcfd7,0x0000,0xcfd8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd2be,0xd2bf,0xb27e,0xb2a1,
-0x0000,0x0000,0x0000,0xdaab,0x0000,0xdec2,0xdec1,0xdec0,
-0xe2d5,0x0000,0xe2d6,0xe2d7,0xbac2,0x0000,0x0000,0xe6ad,
-0xe6ac,0x0000,0x0000,0xea69,0xbf5e,0xbf5f,0x0000,0xed72,
-0xed6f,0xed70,0xed71,0xf049,0xf048,0xc27c,0xf277,0xf5de,
-0xa5cc,0x0000,0xacc6,0x0000,0xb2a2,0xdec3,0x0000,0xa5cd,
-0x0000,0xd2c0,0xb2a3,0x0000,0x0000,0xb563,0xb564,0x0000,
-0xa5ce,0xa5cf,0xca46,0xa86a,0xa869,0xacc7,0xcfd9,0xdaac,
-0xa5d0,0xa5d1,0xa5d2,0xa5d3,0x0000,0x0000,0x0000,0xa86b,
-0xa86c,0xcb6e,0xcb6d,0x0000,0x0000,0xaab6,0xcd72,0xcd70,
-0xcd71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfda,
-0xcfdb,0x0000,0x0000,0xaccb,0xacc9,0x0000,0xacca,0xacc8,
-0x0000,0x0000,0x0000,0x0000,0xaf60,0x0000,0x0000,0x0000,
-0x0000,0xaf64,0xaf63,0xd2c1,0xaf62,0xaf61,0x0000,0xd2c2,
-0x0000,0x0000,0xb2a6,0xd67b,0xd67a,0xb2a4,0xb2a5,0x0000,
-0x0000,0x0000,0xb566,0xb565,0xdaae,0x0000,0x0000,0xdaad,
-0xb2a7,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7ed,0xdec5,
-0xb7ee,0xdec4,0x0000,0x0000,0x0000,0xe2d8,0xe6ae,0xbd42,
-0xea6a,0x0000,0x0000,0x0000,0xed73,0x0000,0xc3a6,0xc3a5,
-0x0000,0x0000,0xc57c,0xa5d4,0xcd73,0x0000,0x0000,0xb2a8,
-0xe2d9,0xbac3,0x0000,0x0000,0xcb6f,0xcb70,0x0000,0x0000,
-0xcd74,0xaab8,0xaab9,0x0000,0x0000,0xaab7,0x0000,0x0000,
-0x0000,0x0000,0xaccf,0xacd0,0xaccd,0xacce,0x0000,0xcfdc,
-0x0000,0x0000,0xcfdd,0xaccc,0x0000,0x0000,0x0000,0x0000,
-0xd2c3,0x0000,0xaf68,0xaf69,0x0000,0xb2ab,0xd2c9,0x0000,
-0xaf6e,0xaf6c,0xd2ca,0xd2c5,0xaf6b,0xaf6a,0xaf65,0xd2c8,
-0xd2c7,0xd2c4,0xaf6d,0x0000,0xd2c6,0xaf66,0x0000,0xaf67,
-0x0000,0x0000,0xb2ac,0xd6a1,0xd6a2,0xb2ad,0xd67c,0xd67e,
-0xd6a4,0xd6a3,0xd67d,0x0000,0xb2a9,0xb2aa,0x0000,0xdab6,
-0xb56b,0xb56a,0xdab0,0xb568,0x0000,0xdab3,0xb56c,0xdab4,
-0xb56d,0xdab1,0xb567,0xb569,0xdab5,0x0000,0xdab2,0xdaaf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xded2,0x0000,0xdec7,
-0xb7f0,0xb7f3,0xb7f2,0xb7f7,0xb7f6,0xded3,0xded1,0xdeca,
-0xdece,0xdecd,0xb7f4,0xded0,0xdecc,0xded4,0xdecb,0xb7f5,
-0xb7ef,0xb7f1,0x0000,0xdec9,0x0000,0x0000,0x0000,0x0000,
-0xe2db,0xbac7,0xe2df,0xbac6,0xe2dc,0xbac5,0x0000,0xdec8,
-0xdecf,0xe2de,0x0000,0xbac8,0xe2e0,0xe2dd,0xe2da,0x0000,
-0x0000,0xe6b1,0xe6b5,0xe6b7,0xe6b3,0xe6b2,0xe6b0,0xbd45,
-0xbd43,0xbd48,0xbd49,0xe6b4,0xbd46,0xe6af,0xbd47,0xbac4,
-0xe6b6,0xbd44,0x0000,0x0000,0x0000,0xea6c,0x0000,0xea6b,
-0xea73,0xea6d,0xea72,0xea6f,0xbf60,0xea71,0x0000,0x0000,
-0xbf61,0x0000,0xbf62,0x0000,0xea70,0xea6e,0x0000,0x0000,
-0x0000,0x0000,0xc0f8,0xed74,0x0000,0x0000,0xc0f7,0xed77,
-0xed75,0xed76,0x0000,0x0000,0xc0f9,0x0000,0x0000,0x0000,
-0xf04d,0x0000,0xc2a1,0xf04e,0x0000,0x0000,0xc27d,0xf04f,
-0xc27e,0xf04c,0xf050,0x0000,0xf04a,0x0000,0x0000,0xc3a7,
-0xf278,0xc3a8,0xc46f,0x0000,0xf04b,0xc470,0x0000,0x0000,
-0x0000,0xc4ee,0xf5df,0x0000,0xc57e,0xf6f4,0xc57d,0x0000,
-0xf7ea,0xc5f5,0xc5f6,0x0000,0x0000,0xf9cc,0x0000,0x0000,
-0xacd1,0xcfde,0x0000,0xb56e,0xb56f,0xa5d5,0xa6ca,0xca47,
-0x0000,0xcb71,0xa86d,0x0000,0xaaba,0x0000,0xacd2,0xacd3,
-0xacd4,0xd6a6,0xd2cb,0xaf6f,0x0000,0x0000,0xb2ae,0xd6a5,
-0x0000,0x0000,0xdab8,0xb571,0x0000,0xdab7,0xb570,0x0000,
-0x0000,0xded5,0xbd4a,0xe6bb,0xe6b8,0xe6b9,0xe6ba,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xed78,0x0000,0xf051,0x0000,
-0x0000,0x0000,0xf471,0xf470,0x0000,0xf6f5,0xa5d6,0xcd75,
-0xaf70,0x0000,0x0000,0x0000,0xb572,0xded6,0x0000,0x0000,
-0xe2e1,0x0000,0xbd4b,0xea74,0x0000,0xf052,0xf472,0xa5d7,
-0x0000,0x0000,0xaabb,0xacd7,0xcfdf,0xacd8,0xacd6,0x0000,
-0xacd5,0xd2cc,0xaf71,0x0000,0x0000,0xaf72,0xaf73,0x0000,
-0x0000,0x0000,0xb2b0,0xd6a7,0xb2af,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdab9,0xb2b1,0xb573,0xded7,0xb7f8,0xb7f9,
-0x0000,0xbac9,0x0000,0xbaca,0xbd4c,0xbf64,0xea75,0xbf63,
-0x0000,0xed79,0xc0fa,0x0000,0xf053,0xf473,0xa5d8,0xa86e,
-0xcd78,0xcd77,0xaabc,0xcd76,0xaabd,0xcd79,0x0000,0xcfe5,
-0xacdb,0xacda,0xcfe7,0xcfe6,0xacdf,0x0000,0xacde,0x0000,
-/* 0x7700 */
-0x0000,0xacd9,0x0000,0xcfe1,0xcfe2,0xcfe3,0x0000,0xace0,
-0xcfe0,0xacdc,0xcfe4,0xacdd,0x0000,0x0000,0x0000,0x0000,
-0xd2cf,0xd2d3,0xd2d1,0xd2d0,0x0000,0xd2d4,0x0000,0x0000,
-0x0000,0xd2d5,0xd2d6,0xd2ce,0x0000,0xd2cd,0x0000,0xaf75,
-0xaf76,0x0000,0xd2d7,0xd2d2,0x0000,0xd6b0,0x0000,0xd2d8,
-0xaf77,0xaf74,0x0000,0x0000,0x0000,0xd6aa,0x0000,0xd6a9,
-0x0000,0xd6ab,0xd6ac,0xd6ae,0xd6ad,0xd6b2,0xb2b5,0xb2b2,
-0xb2b6,0xd6a8,0xb2b7,0xd6b1,0xb2b4,0xd6af,0xb2b3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdabc,0xdabe,0xdaba,0xdabb,
-0x0000,0x0000,0xdabf,0xdac1,0xdac2,0xdabd,0xdac0,0xb574,
-0x0000,0x0000,0xdedb,0x0000,0xdee0,0xded8,0xdedc,0x0000,
-0x0000,0xdee1,0xdedd,0xb7fa,0xb843,0x0000,0xb7fd,0xded9,
-0xdeda,0xbace,0xb846,0xb7fe,0x0000,0xb844,0xb7fc,0xdedf,
-0xb845,0xdede,0xb841,0xb7fb,0xb842,0xdee2,0xe2e6,0xe2e8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb840,0x0000,0x0000,0xe2e3,0xbacc,0xe2e9,0xbacd,
-0xe2e7,0xe2e2,0xe2e5,0xe2ea,0xbacb,0xe2e4,0x0000,0xbd4e,
-0xe6bf,0xe6be,0x0000,0xbd51,0xbd4f,0xe6bc,0xbd4d,0xe6bd,
-0x0000,0xbd50,0x0000,0x0000,0x0000,0xea7d,0x0000,0xeaa1,
-0x0000,0xea7e,0xea76,0xea7a,0xea79,0xea77,0xbf66,0xbf67,
-0xbf65,0xea78,0xea7b,0xea7c,0x0000,0xbf68,0x0000,0xc140,
-0xeda3,0x0000,0xc0fc,0xed7b,0xc0fe,0xc141,0x0000,0x0000,
-0xc0fd,0xeda2,0xed7c,0xc0fb,0xeda1,0xed7a,0xed7e,0xed7d,
-0x0000,0x0000,0xf055,0xc2a4,0xc2a5,0xc2a2,0x0000,0xc2a3,
-0x0000,0x0000,0xf054,0x0000,0xf27b,0x0000,0x0000,0xc3a9,
-0x0000,0xf279,0xf27a,0x0000,0xf474,0xf477,0xf475,0xf476,
-0xf5e0,0x0000,0x0000,0xc4ef,0xf7eb,0xf8b4,0x0000,0xc5f7,
-0xf8f8,0xf8f9,0xc666,0xa5d9,0xace1,0x0000,0xdac3,0x0000,
-0xdee3,0x0000,0xa5da,0xa86f,0x0000,0xaabe,0x0000,0xcfe8,
-0xcfe9,0xaf78,0x0000,0x0000,0xdac4,0xb575,0xb847,0xc142,
-0xeda4,0xf27c,0xf478,0xa5db,0x0000,0x0000,0x0000,0xcda1,
-0xcd7a,0xcd7c,0xcd7e,0xcd7d,0xcd7b,0xaabf,0x0000,0x0000,
-/* 0x7800 */
-0x0000,0x0000,0xace2,0xcff2,0x0000,0xcfed,0xcfea,0x0000,
-0x0000,0xcff1,0x0000,0x0000,0xace4,0xace5,0xcff0,0xcfef,
-0xcfee,0xcfeb,0xcfec,0xcff3,0xace3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xaf7c,0x0000,0xafa4,
-0xafa3,0xd2e1,0xd2db,0xd2d9,0x0000,0xafa1,0xd6b9,0xaf7a,
-0xd2de,0xd2e2,0xd2e4,0xd2e0,0xd2da,0xafa2,0xd2df,0xd2dd,
-0xaf79,0xd2e5,0xafa5,0xd2e3,0xaf7d,0xd2dc,0x0000,0xaf7e,
-0xaf7b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb2b9,0x0000,0xd6ba,0x0000,0x0000,
-0xd6b3,0xd6b5,0xd6b7,0x0000,0xd6b8,0xd6b6,0xb2ba,0x0000,
-0xd6bb,0x0000,0xd6b4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdac8,0xb576,0xdad0,0x0000,
-0xdac5,0x0000,0xdad1,0x0000,0xdac6,0xdac7,0x0000,0x0000,
-0xdacf,0xdace,0xdacb,0xb2b8,0xb577,0xdac9,0xdacc,0xb578,
-0xdacd,0xdaca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdeee,0x0000,0xdef2,0xb84e,0x0000,0xe2f0,0xb851,
-0xdef0,0xf9d6,0x0000,0xdeed,0xdee8,0xdeea,0xdeeb,0xdee4,
-0x0000,0xb84d,0x0000,0x0000,0xb84c,0x0000,0xb848,0xdee7,
-0x0000,0xb84f,0x0000,0xb850,0xdee6,0xdee9,0xdef1,0xb84a,
-0xb84b,0xdeef,0xdee5,0x0000,0x0000,0x0000,0xe2f2,0xbad0,
-0xe2f4,0xdeec,0xe2f6,0xbad4,0xe2f7,0xe2f3,0x0000,0xbad1,
-0xe2ef,0xbad3,0xe2ec,0xe2f1,0xe2f5,0xe2ee,0x0000,0x0000,
-0xb849,0x0000,0xe2eb,0xbad2,0xe2ed,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbd54,0xe6c1,0xbd58,0x0000,0xbd56,0x0000,
-0x0000,0xbacf,0x0000,0xe6c8,0xe6c9,0xbd53,0x0000,0x0000,
-0xe6c7,0xe6ca,0xbd55,0xbd52,0xe6c3,0xe6c0,0xe6c5,0xe6c2,
-0xbd59,0xe6c4,0x0000,0x0000,0xe6c6,0xbd57,0x0000,0x0000,
-0x0000,0x0000,0xbf6a,0xeaa8,0x0000,0xeaa2,0xeaa6,0xeaac,
-0xeaad,0xeaa9,0xeaaa,0xeaa7,0x0000,0xeaa4,0x0000,0xbf6c,
-0xbf69,0xeaa3,0xeaa5,0x0000,0xbf6b,0xeaab,0x0000,0xc146,
-0x0000,0x0000,0xedaa,0xeda5,0xc145,0x0000,0x0000,0xc143,
-0x0000,0xedac,0xc144,0xeda8,0xeda9,0xeda6,0xedad,0xf056,
-/* 0x7900 */
-0x0000,0xc147,0xeda7,0x0000,0xedae,0xedab,0x0000,0x0000,
-0x0000,0xf05a,0x0000,0x0000,0xf057,0x0000,0xc2a6,0x0000,
-0xf05b,0xf05d,0xf05c,0xf058,0xf059,0x0000,0x0000,0xf2a3,
-0x0000,0xc3aa,0x0000,0xf27e,0xf2a2,0xf27d,0xf2a4,0x0000,
-0x0000,0xf2a1,0x0000,0xf47a,0xf47d,0xf479,0xc471,0xf47b,
-0xf47c,0xf47e,0xc472,0xc474,0xc473,0xf5e1,0x0000,0xf5e3,
-0x0000,0xf5e2,0x0000,0x0000,0x0000,0xf6f6,0x0000,0x0000,
-0xf8b5,0xf8fa,0xa5dc,0x0000,0x0000,0xcb72,0xaac0,0xcda3,
-0xaac1,0xaac2,0xcda2,0x0000,0xcff8,0xcff7,0xace6,0xace9,
-0xace8,0xace7,0xcff4,0xcff6,0xcff5,0x0000,0x0000,0xd2e8,
-0xafa7,0xd2ec,0xd2eb,0xd2ea,0xd2e6,0xafa6,0xafaa,0xafad,
-0x0000,0x0000,0xafae,0xd2e7,0xd2e9,0xafac,0xafab,0xafa9,
-0xafa8,0xd6c2,0x0000,0xd6c0,0xd6bc,0xb2bb,0x0000,0xd6bd,
-0xb2bc,0xd6be,0xd6bf,0xd6c1,0x0000,0xb2bd,0x0000,0x0000,
-0xdad5,0x0000,0xdad4,0xdad3,0xdad2,0x0000,0x0000,0x0000,
-0x0000,0xdef6,0xb852,0x0000,0xdef3,0xdef5,0x0000,0xb853,
-0x0000,0xb854,0xdef4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe341,0x0000,0xe2f9,0xe2fa,0x0000,0xbad7,0xbad5,0xbad6,
-0xe343,0x0000,0xe342,0xe2fe,0xe2fd,0xe2fc,0xe2fb,0xe340,
-0xe2f8,0x0000,0xe6cb,0xe6d0,0xe6ce,0x0000,0x0000,0x0000,
-0xe6cd,0xe6cc,0xe6cf,0x0000,0xeaae,0x0000,0xbf6d,0xc148,
-0xedb0,0x0000,0xc149,0xedaf,0xf05f,0xf05e,0xc2a7,0x0000,
-0xf2a5,0xc3ab,0xf4a1,0xc5a1,0xf6f7,0x0000,0xf8b7,0xf8b6,
-0xc9a8,0xacea,0xaceb,0xd6c3,0x0000,0xb856,0xa5dd,0xa872,
-0xa871,0xa870,0x0000,0x0000,0x0000,0xcda4,0x0000,0x0000,
-0xaac4,0xaac3,0x0000,0xacee,0x0000,0xcffa,0xcffd,0xcffb,
-0x0000,0xacec,0xaced,0x0000,0x0000,0xcff9,0xcffc,0x0000,
-0xafb5,0x0000,0x0000,0x0000,0xd2f3,0xd2f5,0xd2f4,0xafb2,
-0xd2ef,0x0000,0x0000,0xafb0,0xafaf,0x0000,0xafb3,0xafb1,
-0x0000,0xafb4,0xd2f2,0xd2ed,0xd2ee,0xd2f1,0xd2f0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6c6,0xd6c7,
-0xd6c5,0x0000,0xd6c4,0xb2be,0x0000,0x0000,0x0000,0x0000,
-0xb57d,0x0000,0xdad6,0xdad8,0xdada,0xb57c,0x0000,0x0000,
-0xb57a,0x0000,0xdad7,0xb57b,0xdad9,0xb579,0x0000,0x0000,
-0xdf41,0xdef7,0xdefa,0xdefe,0xb85a,0xdefc,0x0000,0xdefb,
-0xdef8,0xdef9,0xb858,0xdf40,0xb857,0x0000,0xb85c,0xb85b,
-0xb859,0x0000,0xdefd,0x0000,0x0000,0x0000,0xe349,0x0000,
-0xe348,0x0000,0x0000,0xe344,0x0000,0x0000,0xbad8,0xe347,
-0xe346,0xbad9,0x0000,0x0000,0x0000,0x0000,0x0000,0xbd5e,
-0x0000,0xe6d2,0x0000,0xbd5f,0xbd5b,0xbd5d,0x0000,0xbd5a,
-0xbd5c,0x0000,0x0000,0x0000,0xeaaf,0x0000,0xbf70,0xeab1,
-0xeab0,0x0000,0xe345,0xbf72,0xbf71,0xbf6e,0xbf6f,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xedb5,0x0000,0xedb3,0xc14a,
-0xedb4,0x0000,0xedb6,0xedb2,0xedb1,0x0000,0x0000,0xf060,
-0xc2aa,0xc2a8,0xc2a9,0x0000,0x0000,0x0000,0x0000,0xf2a6,
-0xf2a7,0xc3ad,0x0000,0xc3ac,0xf4a3,0xf4a4,0xf4a2,0x0000,
-0xf6f8,0xf6f9,0x0000,0x0000,0xa5de,0xca48,0xa873,0x0000,
-0xcda5,0xaac6,0xaac5,0xcda6,0x0000,0x0000,0xd040,0xacef,
-0xcffe,0xacf0,0x0000,0x0000,0xafb6,0xd2f8,0xd2f6,0xd2fc,
-0xafb7,0xd2f7,0xd2fb,0xd2f9,0xd2fa,0x0000,0x0000,0xd6c8,
-0xd6ca,0x0000,0xb2bf,0x0000,0xd6c9,0xb2c0,0xb5a2,0xb5a1,
-0xb57e,0xdadb,0x0000,0x0000,0x0000,0x0000,0xdf44,0xb85d,
-0xb85e,0x0000,0xdf43,0xdf42,0x0000,0x0000,0x0000,0x0000,
-0xe34a,0xbadb,0xbada,0xe34b,0xe34c,0x0000,0xbd61,0xbd60,
-0x0000,0xeab5,0xe6d3,0xe6d5,0xe6d4,0xeab4,0xeab2,0xeab6,
-0xeab3,0x0000,0xbf73,0x0000,0x0000,0x0000,0xedb7,0xc14b,
-0xedb8,0xedb9,0x0000,0x0000,0xc2ab,0xc2ac,0x0000,0xc475,
-0x0000,0x0000,0xc5d1,0xa5df,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd2fd,0xafb8,0x0000,0x0000,0x0000,0x0000,0x0000,0xb3ba,
-0xb3b9,0x0000,0x0000,0xb5a4,0xdadd,0xb5a3,0xdadc,0x0000,
-0x0000,0x0000,0x0000,0xdf45,0x0000,0xbadc,0xe34d,0xbadd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc476,0xf4a5,
-0x0000,0xa6cb,0xaac7,0xcda7,0x0000,0xacf2,0x0000,0xacf1,
-0xd042,0xd043,0x0000,0x0000,0xd340,0xd342,0xafb9,0x0000,
-0xd344,0xd347,0xd345,0x0000,0x0000,0x0000,0xd346,0xd343,
-0xd2fe,0xafba,0xd348,0xd341,0x0000,0x0000,0x0000,0x0000,
-0xd6d3,0xb2c6,0xd6dc,0xb2c3,0x0000,0xd6d5,0xb2c7,0x0000,
-0xb2c1,0x0000,0xd6d0,0xd6dd,0xd6d1,0xd6ce,0xb2c5,0x0000,
-0xb2c2,0x0000,0xd6d4,0xd6d7,0xb2c4,0xd6d8,0xb2c8,0xd6d9,
-0xd6cf,0xd6d6,0xd6da,0xd6d2,0xd6cd,0xd6cb,0x0000,0x0000,
-0xd6db,0x0000,0x0000,0xdadf,0x0000,0x0000,0x0000,0x0000,
-0xdae4,0x0000,0x0000,0x0000,0xdae0,0xdae6,0xb5a7,0xd6cc,
-0xdae1,0xb5a5,0xdade,0xb5ac,0xdae2,0xb5ab,0xdae3,0xb5ad,
-0xb5a8,0xb5ae,0xb5a9,0x0000,0xb5aa,0x0000,0xb5a6,0x0000,
-0xdae5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb861,0xdf50,0x0000,0xdf53,0xdf47,0xdf4c,0xdf46,0xb863,
-0x0000,0xdf4a,0x0000,0x0000,0x0000,0xdf48,0xb862,0x0000,
-0xdf4f,0xdf4e,0xdf4b,0xdf4d,0xdf49,0xbae1,0xdf52,0xb85f,
-0xdf51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe35d,0x0000,0xbae8,0xe358,0x0000,0xbae7,
-0xe34e,0x0000,0xe350,0xbae0,0xe355,0xe354,0xe357,0xbae5,
-0xe352,0xe351,0x0000,0x0000,0xbae4,0xbadf,0xe353,0xbae2,
-0xe359,0xe35b,0x0000,0xe356,0xe34f,0xbae3,0x0000,0x0000,
-0xbd69,0xbade,0x0000,0x0000,0xe35c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe6d9,0xbd62,0x0000,0xe6db,
-0x0000,0xbd63,0x0000,0x0000,0xbd65,0xe6de,0x0000,0xe6d6,
-0xbae6,0xe6dc,0x0000,0x0000,0x0000,0x0000,0xe6d8,0x0000,
-0xb860,0xbd68,0x0000,0x0000,0xbd64,0x0000,0xbd66,0xbd67,
-0x0000,0xbf76,0xe6dd,0xe6d7,0xbd6a,0x0000,0xe6da,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeac0,0xeabb,0x0000,0x0000,
-0xeac5,0xbf74,0xeabd,0xbf78,0xeac3,0xeaba,0xeab7,0xeac6,
-0xc151,0xbf79,0xeac2,0xeab8,0xbf77,0xeabc,0xbf7b,0xeab9,
-0xeabe,0xbf7a,0xeac1,0xeac4,0x0000,0x0000,0x0000,0x0000,
-0xedcb,0xedcc,0xedbc,0xedc3,0xedc1,0x0000,0x0000,0xc14f,
-0xedc8,0xeabf,0x0000,0xedbf,0x0000,0xedc9,0xc14e,0xedbe,
-0xedbd,0xedc7,0xedc4,0xedc6,0x0000,0xedba,0xedca,0xc14c,
-0x0000,0xedc5,0xedce,0xedc2,0xc150,0xc14d,0xedc0,0xedbb,
-0xedcd,0xbf75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf063,0x0000,0x0000,0xf061,0xf067,0xc2b0,0xf065,
-0xf064,0xc2b2,0xf06a,0xc2b1,0x0000,0xf06b,0xf068,0xc2ae,
-0xf069,0xf062,0xc2af,0xc2ad,0xf2ab,0xf066,0x0000,0x0000,
-0xf06c,0x0000,0x0000,0xf2a8,0x0000,0x0000,0x0000,0xc3b2,
-0xc3b0,0xf2aa,0x0000,0xf2ac,0xf2a9,0xc3b1,0xc3ae,0xc3af,
-0xc3b3,0x0000,0x0000,0xc478,0x0000,0xf4aa,0x0000,0xf4a9,
-0xf4a7,0xf4a6,0xf4a8,0x0000,0xc477,0xc479,0x0000,0x0000,
-0xc4f0,0x0000,0x0000,0xf5e5,0xf5e4,0x0000,0x0000,0xf6fa,
-0x0000,0xf6fc,0xf6fe,0xf6fd,0xf6fb,0x0000,0x0000,0xc5a3,
-0xc5a2,0x0000,0x0000,0xc5d3,0xc5d2,0xc5d4,0xf7ed,0xf7ec,
-0x0000,0xf8fb,0xf8b8,0xf8fc,0xc658,0x0000,0xc659,0xf96d,
-0x0000,0x0000,0xc67e,0xa6cc,0x0000,0xcda8,0x0000,0x0000,
-0xd045,0xd046,0xd044,0x0000,0x0000,0xacf3,0x0000,0xd047,
-0xd048,0xd049,0x0000,0x0000,0xd349,0xd34f,0x0000,0x0000,
-0xd34d,0xafbb,0xd34b,0x0000,0xd34c,0xd34e,0x0000,0x0000,
-0x0000,0xd34a,0xb2c9,0x0000,0xd6de,0xb2cb,0xd6e0,0xb2ca,
-0xd6df,0x0000,0x0000,0x0000,0x0000,0x0000,0xdae8,0xb5af,
-0x0000,0xdaea,0xdae7,0xd6e1,0x0000,0xb5b0,0x0000,0xf9db,
-0xdae9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdf56,
-0x0000,0xb864,0xdf54,0xb865,0xdf55,0xb866,0x0000,0x0000,
-0x0000,0xbae9,0xe361,0xe35e,0xe360,0xbaea,0xbaeb,0xe35f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6df,0x0000,0x0000,
-0xe6e0,0x0000,0xbd6b,0xe6e2,0xe6e1,0x0000,0xa261,0x0000,
-0xeaca,0xeacb,0xeac7,0x0000,0xeac8,0xbf7c,0xbf7d,0xeac9,
-0x0000,0xc157,0x0000,0x0000,0xc153,0xc158,0xc154,0xc156,
-0xc152,0x0000,0xc155,0x0000,0x0000,0x0000,0x0000,0xc2b3,
-0xedcf,0x0000,0xf2ae,0x0000,0xf2ad,0x0000,0xf4ab,0xc47a,
-0xc47b,0xf741,0xf5e6,0x0000,0xf740,0x0000,0xf8fd,0xf9a4,
-0xa6cd,0x0000,0x0000,0xa874,0x0000,0xcda9,0xaac8,0x0000,
-0xacf6,0xd04c,0xacf4,0xd04a,0xacf9,0xacf5,0xacfa,0xacf8,
-0xd04b,0xacf7,0xafbf,0xafbe,0xd35a,0xafc7,0xd353,0xd359,
-0xafc3,0xd352,0xd358,0xd356,0xafc2,0xafc4,0xd355,0xafbd,
-0xd354,0xafc8,0xafc5,0xafc9,0xafc6,0xd351,0xd350,0xd357,
-0xafc0,0xafbc,0xafc1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6f0,0xd6e9,0x0000,0xb5b5,0xd6e8,0x0000,0xb2cf,0xb2d6,
-0xb2d3,0xb2d9,0xb2d8,0xb2d4,0x0000,0xd6e2,0xd6e5,0x0000,
-0xd6e4,0xb2d0,0xd6e6,0xd6ef,0xb2d1,0xd6e3,0xd6ec,0xd6ed,
-0xb2d2,0xd6ea,0xb2d7,0xb2cd,0xb2d5,0xd6e7,0xb2cc,0xd6eb,
-0x0000,0x0000,0xd6ee,0x0000,0x0000,0x0000,0xdafb,0xdaf2,
-0xb5b2,0xdaf9,0xdaf6,0xdaee,0xdaf7,0xb5b4,0xdaef,0x0000,
-0xdaeb,0x0000,0x0000,0xb86c,0xdaf4,0x0000,0xb5b1,0xdafa,
-0x0000,0xb5b8,0xb5ba,0xdaed,0x0000,0x0000,0xb5b9,0xdaf0,
-0xb5b3,0xdaf8,0xdaf1,0xdaf5,0x0000,0xdaf3,0xb5b6,0xdaec,
-0xb5bb,0xb2ce,0xb5b7,0xb5bc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb868,0xdf5d,0xdf5f,0xdf61,0xdf65,0x0000,0xdf5b,
-0xdf59,0xb86a,0x0000,0xdf60,0xdf64,0xdf5c,0xdf58,0x0000,
-0xdf57,0x0000,0x0000,0x0000,0xdf62,0xdf5a,0xdf5e,0xb86b,
-0x0000,0xb869,0xdf66,0xb867,0xdf63,0x0000,0xe372,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbaee,0xe36a,0xbd78,0xe374,
-0xbaf1,0xe378,0xbaf7,0xe365,0x0000,0x0000,0xe375,0xe362,
-0x0000,0xe377,0xe366,0x0000,0xbafe,0xbafb,0xe376,0xe370,
-0xbaed,0xbaf5,0xbaf4,0x0000,0xbaf3,0xbaf9,0x0000,0xe363,
-0xbafa,0xe371,0xbaf6,0xbaec,0xe373,0xbaef,0xbaf0,0xbaf8,
-0xe368,0xe367,0xe364,0x0000,0xe36c,0xe369,0xe36d,0xbafd,
-0x0000,0xe379,0xbaf2,0xe36e,0xe36f,0x0000,0xe36b,0x0000,
-0x0000,0x0000,0xbafc,0x0000,0x0000,0x0000,0x0000,0xe6e7,
-0xbd70,0xbd79,0xbd75,0xe6e4,0x0000,0xbd72,0xbd76,0xe6f0,
-0xbd6c,0xe6e8,0x0000,0xbd74,0x0000,0x0000,0xe6eb,0xe6e6,
-0xbd73,0xbd77,0xe6e5,0x0000,0xbd71,0x0000,0xe6ef,0xbd6e,
-0xe6ee,0xe6ed,0xbd7a,0xe572,0xbd6d,0x0000,0xe6ec,0xe6e3,
-0x0000,0xbd7b,0xe6ea,0xbd6f,0x0000,0x0000,0x0000,0x0000,
-/* 0x7e00 */
-0x0000,0x0000,0x0000,0xe6e9,0x0000,0x0000,0x0000,0x0000,
-0xbfa2,0xbfa7,0xbf7e,0xead8,0xeacf,0xeadb,0xead3,0xead9,
-0xbfa8,0xbfa1,0xeacc,0xead2,0xeadc,0xead5,0xeada,0xeace,
-0x0000,0x0000,0xead6,0xbfa3,0xead4,0xbfa6,0xbfa5,0xead0,
-0xead1,0xeacd,0xead7,0xbfa4,0xeade,0xeadd,0x0000,0x0000,
-0x0000,0xedda,0xedd6,0xc15f,0x0000,0xedd0,0xc159,0xc169,
-0xeddc,0xc161,0xc15d,0xedd3,0xc164,0xc167,0xedde,0xc15c,
-0xedd5,0xc165,0xede0,0xeddd,0xedd1,0xc160,0xc15a,0xc168,
-0xedd8,0xc163,0xedd2,0xc15e,0xeddf,0xc162,0xc15b,0xedd9,
-0xc166,0xedd7,0x0000,0x0000,0xeddb,0x0000,0x0000,0x0000,
-0xf06e,0xf074,0xc2b9,0xf077,0xc2b4,0xc2b5,0xf06f,0xf076,
-0xf071,0xc2ba,0xc2b7,0x0000,0xf06d,0x0000,0xc2b6,0xf073,
-0xf075,0xc2b8,0xf072,0xf070,0x0000,0x0000,0x0000,0x0000,
-0xf2b8,0xc3b7,0xc3b8,0xc3b4,0x0000,0xc3b5,0x0000,0xf2b4,
-0xf2b2,0x0000,0xf2b6,0xc3ba,0xf2b7,0xf2b0,0xf2af,0xf2b3,
-0xf2b1,0xc3b6,0xf2b5,0xf4ac,0xc47e,0xc47d,0xf4ad,0x0000,
-0xf4af,0xf4ae,0xc4a1,0x0000,0x0000,0x0000,0xf5eb,0xf5e8,
-0xf5e9,0x0000,0xf5e7,0xf5ea,0xc4f2,0xf5ec,0x0000,0xc4f1,
-0x0000,0xf742,0x0000,0xc5d5,0xc5d7,0xf7ee,0xc5d6,0xf8b9,
-0xf940,0xf942,0xf8fe,0xf941,0xc66c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa6ce,0x0000,
-0xacfb,0xd26f,0xafca,0x0000,0x0000,0xb2da,0xdafc,0xdafd,
-0x0000,0x0000,0x0000,0xeadf,0xc16a,0xede1,0x0000,0x0000,
-0xc2bb,0x0000,0xf2ba,0xf2b9,0xc4a2,0xf5ed,0x0000,0xf743,
-0xc5f8,0xca49,0x0000,0x0000,0xaac9,0xa875,0x0000,0x0000,
-0xd04d,0x0000,0x0000,0xd360,0xd35b,0xd35f,0xd35d,0xafcb,
-0xd35e,0xd35c,0x0000,0xd6f1,0x0000,0xdafe,0xdb40,0xdf69,
-0xdf6a,0xb86e,0xb86f,0xdf68,0xdf6b,0xdf67,0xb86d,0x0000,
-0xbb40,0x0000,0xb870,0xe37a,0x0000,0xbd7c,0xe6f1,0xbd7d,
-0x0000,0xbfa9,0xeae2,0xeae0,0xeae1,0xede4,0xede3,0xede2,
-0x0000,0x0000,0x0000,0xf2bb,0x0000,0xc3b9,0xf2bc,0xf744,
-0xc5f9,0xf8ba,0xa6cf,0xaacb,0xaaca,0xd04f,0xacfc,0x0000,
-0x0000,0xd04e,0xd362,0x0000,0xafcc,0xd6f2,0xd361,0x0000,
-0x0000,0x0000,0xb2dc,0xd6f5,0xd6f3,0xd6f4,0xb2db,0x0000,
-0xdb42,0xdb43,0xdb41,0x0000,0xb873,0xdf6d,0xdf6c,0xdf6e,
-0xb872,0xb871,0x0000,0x0000,0xe6f2,0xe6f4,0x0000,0xbd7e,
-0xe6f3,0xeae3,0xbfaa,0xf079,0x0000,0xf078,0xc3bb,0xf2bd,
-0xc3bd,0xc3bc,0xf4b0,0xf5ee,0xc4f3,0xa6d0,0xd050,0xacfd,
-0xd365,0xafce,0xd364,0xd363,0x0000,0xafcd,0x0000,0xd6fb,
-0x0000,0xd6fd,0xd6f6,0xd6f7,0xb2dd,0xd6f8,0xb2de,0xd6fc,
-0xd6f9,0xd6fa,0xb2df,0x0000,0xb5be,0xb5bf,0x0000,0xdb44,
-0x0000,0x0000,0x0000,0xdf6f,0xdf70,0x0000,0xe37e,0xbb43,
-0xbb41,0xbb42,0xe37b,0xe37c,0x0000,0xe37d,0xe6f9,0x0000,
-0xe6fa,0xbda1,0xe6f7,0xe6f6,0xe6f8,0xe6f5,0xbfad,0xeae4,
-0xbfab,0xbfac,0xede6,0xc16b,0xede5,0xefa8,0x0000,0xf07a,
-0xf07b,0xc2bc,0x0000,0xc2bd,0xc16c,0xf2be,0xf2bf,0xf4b1,
-0xc4a3,0xa6d1,0x0000,0xa6d2,0xacfe,0xaacc,0xafcf,0xd051,
-0x0000,0x0000,0x0000,0xb5c0,0xa6d3,0xad41,0xd052,0xd053,
-0xad40,0xad42,0xa6d4,0x0000,0xd054,0xafd1,0xd366,0xafd3,
-0xafd0,0xafd2,0x0000,0xd741,0xb2e0,0x0000,0xd740,0xd6fe,
-0x0000,0xdf71,0x0000,0x0000,0xe3a1,0x0000,0xbda2,0x0000,
-0xbfae,0xeae6,0xeae5,0x0000,0xede7,0x0000,0x0000,0x0000,
-0xf5ef,0x0000,0x0000,0xa6d5,0xcb73,0xcdaa,0xad43,0xd055,
-0x0000,0xd368,0x0000,0x0000,0x0000,0xafd4,0xd367,0xafd5,
-0x0000,0x0000,0x0000,0xd743,0x0000,0x0000,0xb2e2,0xd742,
-0xd744,0x0000,0xb2e1,0x0000,0x0000,0x0000,0x0000,0xdb46,
-0xdb47,0xdb45,0xb5c1,0x0000,0x0000,0x0000,0xb874,0x0000,
-0xb875,0x0000,0xbb45,0x0000,0xe3a3,0xe3a2,0xbb44,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe6fb,0x0000,0x0000,0xe6fc,
-0x0000,0x0000,0x0000,0x0000,0xeae7,0x0000,0x0000,0xc170,
-0xc16f,0xc16d,0xc16e,0xc171,0x0000,0xf07c,0xc2bf,0xc2be,
-0xf2c0,0xf4b2,0x0000,0x0000,0x0000,0xc5a5,0xc5a4,0xa6d6,
-0x0000,0x0000,0xd1fb,0x0000,0xb877,0xb5c2,0xb876,0xbb46,
-0x0000,0xa6d7,0xc9a9,0xa6d8,0xa6d9,0x0000,0x0000,0xcdab,
-0xcb76,0x0000,0xcb77,0xa877,0x0000,0xcb74,0xa876,0x0000,
-0xa879,0xcb75,0xa87b,0xa87a,0xcb78,0xa878,0x0000,0x0000,
-0x0000,0xaad1,0xaacf,0xcdad,0x0000,0xaace,0x0000,0x0000,
-0x0000,0xaad3,0xaad5,0xaad2,0x0000,0xcdb0,0xcdac,0xaad6,
-0x0000,0xaad0,0xa87c,0x0000,0xaad4,0xcdaf,0x0000,0x0000,
-0xcdae,0x0000,0xaacd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd05b,0xad47,0xad48,0xd05d,0x0000,0xd057,
-0xd05a,0xd063,0xd061,0x0000,0xad49,0xd067,0xad4c,0xd064,
-0xd05c,0xd059,0x0000,0x0000,0xdb49,0xd062,0xad44,0xd065,
-0xd056,0xd05f,0xad46,0xad4b,0xd060,0xad4f,0xad4d,0x0000,
-0xd058,0xad4a,0x0000,0xd05e,0xad4e,0xad45,0xd066,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xafda,0x0000,0xafe3,
-0xafd8,0xafd6,0xd36a,0xafde,0xafdb,0xd36c,0x0000,0x0000,
-0xafdd,0xd36b,0xd369,0xd36e,0xafe2,0xafe0,0xdb48,0x0000,
-0xd36f,0xd36d,0xafd7,0x0000,0x0000,0xafd9,0xafdc,0x0000,
-0xafdf,0x0000,0xafe1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd74e,0xb2e4,0x0000,
-0xd745,0xd747,0x0000,0xd748,0x0000,0xd750,0xd74c,0xd74a,
-0x0000,0xd74d,0xd751,0xb2e5,0xb2e9,0xd746,0x0000,0xd74f,
-0x0000,0xb2e7,0x0000,0xb2e6,0xd74b,0xd749,0x0000,0xb2e3,
-0xb2e8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb5c8,0xdb51,0x0000,0x0000,0xdb4f,0xb5ca,0x0000,
-0x0000,0x0000,0x0000,0xdb4a,0xdfa1,0x0000,0xb5c9,0xdb4e,
-0x0000,0x0000,0xdb4b,0xb5c5,0xb5cb,0xdb50,0xb5c7,0xdb4d,
-0xbb47,0xb5c6,0xdb4c,0xb5cc,0xb5c4,0xb5c3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdf77,0xdf75,0x0000,0xdf7b,0x0000,
-0xdf73,0xdfa2,0xdf78,0x0000,0xdf72,0xb87b,0xb8a3,0xdf7d,
-0x0000,0xdf76,0x0000,0xb87e,0x0000,0x0000,0xb87c,0xdf7e,
-0xb879,0xb878,0xdf79,0xb87d,0xb5cd,0x0000,0xdf7c,0xdf74,
-0xb87a,0xb8a1,0xb8a2,0x0000,0x0000,0x0000,0x0000,0xbb4c,
-0xbb48,0x0000,0xbb4d,0xe3a6,0x0000,0x0000,0xe3a5,0xe3a7,
-0xbb4a,0xe3a4,0xbb4b,0xe3aa,0xe3a9,0xe3a8,0x0000,0xbb49,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe741,0x0000,0xe744,
-0xbda8,0xe743,0xbda7,0xbda3,0xbda4,0xbda5,0xe740,0xe6fe,
-0xbda6,0x0000,0xe742,0xe6fd,0x0000,0x0000,0xeae9,0xeaf3,
-0xbfb1,0xbfb0,0x0000,0xeaed,0xeaef,0x0000,0xeaea,0x0000,
-0xeaee,0xeae8,0xeaf1,0xbfaf,0xeaf0,0xeaec,0x0000,0xeaf2,
-0x0000,0xeaeb,0xc174,0xede8,0xedee,0xc178,0xc17a,0xc177,
-0xc176,0x0000,0xc175,0xc173,0xede9,0xedec,0xc172,0xeded,
-0x0000,0xc179,0xedeb,0x0000,0xedea,0xc2c0,0x0000,0xc2c1,
-0xf0a1,0xf07d,0xf07e,0x0000,0x0000,0xf2c2,0x0000,0xf2c1,
-0xc3be,0xf4b4,0xc4a4,0xf4b3,0x0000,0xf5f0,0xf745,0xc5a6,
-0xf943,0xf944,0xc5d8,0xa6da,0x0000,0xaad7,0xdb52,0xbb4e,
-0xc17b,0xedef,0xa6db,0x0000,0xafe5,0xafe4,0xdb53,0x0000,
-0x0000,0x0000,0xeaf4,0xa6dc,0xad50,0x0000,0x0000,0xdb54,
-0xdb55,0xdb56,0xbb4f,0xbfb2,0xa6dd,0x0000,0xaad8,0xd068,
-0xafe6,0xd370,0xb2ea,0x0000,0xdb57,0xb8a4,0x0000,0xbb50,
-0xbfb3,0xc17c,0xc2c2,0xf4b5,0xa6de,0xaad9,0x0000,0x0000,
-0xafe7,0xd752,0xb5ce,0x0000,0xbb51,0xe3ab,0xe745,0x0000,
-0x0000,0x0000,0x0000,0xa6df,0xb5cf,0xdfa3,0xbb52,0xa6e0,
-0xcdb1,0xd069,0xad51,0x0000,0x0000,0xd372,0x0000,0x0000,
-0xafea,0x0000,0xafe8,0xafe9,0xafeb,0x0000,0x0000,0xd371,
-0x0000,0x0000,0xd757,0xd754,0xd756,0xb2eb,0xb2ed,0xb2ec,
-0xd753,0xb2ee,0xd755,0x0000,0xdb58,0xdb59,0x0000,0xdb5a,
-0xdfa6,0x0000,0xdfa7,0x0000,0xdfa5,0xdfa8,0x0000,0xb8a5,
-0x0000,0xdfa4,0x0000,0xbb53,0x0000,0x0000,0xe74a,0xe746,
-0xe749,0xe74b,0xe748,0xe747,0x0000,0xeaf5,0xeaf6,0xeaf7,
-0xbfb4,0xbfb5,0xedf1,0xedf0,0xedf2,0x0000,0xf0a3,0xf0a2,
-0x0000,0xf2c4,0x0000,0xf2c5,0xf2c3,0x0000,0xc4a5,0x0000,
-0xf4b6,0xf4b7,0x0000,0xf746,0xf7ef,0xf8bb,0xa6e1,0xa87d,
-0x0000,0xc17d,0xa6e2,0x0000,0xd758,0xdb5b,0x0000,0xc641,
-0xca4a,0x0000,0x0000,0x0000,0xca4b,0xca4d,0xa6e3,0xca4e,
-0xca4c,0x0000,0x0000,0xcba2,0xcba3,0xcb7b,0x0000,0x0000,
-0x0000,0x0000,0xcba1,0xa8a1,0x0000,0xa8a2,0xcb7c,0xcb7a,
-0xcb79,0xcb7d,0xa87e,0xcb7e,0xd06a,0x0000,0x0000,0x0000,
-0xcdb6,0xaadc,0xcdb5,0xcdb7,0x0000,0xaadb,0xcdbc,0xaadf,
-0xcdb2,0xcdc0,0xcdc6,0xaae6,0xcdc3,0xaae3,0x0000,0xcdb9,
-0xcdbf,0xcdc1,0x0000,0xcdb4,0xaae2,0xaadd,0xcdba,0xaae4,
-0xaae7,0xaae1,0x0000,0xaada,0xcdbe,0xcdb8,0xcdc5,0xaae9,
-0xaae5,0xaae0,0xcdbd,0xafec,0xcdbb,0xaade,0xaae8,0x0000,
-0xcdb3,0x0000,0xcdc2,0xcdc4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xad62,0xad5c,0xad64,0xad61,0xd071,0xd074,0xad5d,
-0x0000,0xd06b,0x0000,0xad56,0xad60,0x0000,0xad63,0xad65,
-0xd0a2,0xd077,0x0000,0xad55,0xd0a1,0xad59,0xad57,0xad52,
-0xd06f,0x0000,0xd07e,0xd073,0xd076,0xd0a5,0x0000,0xad66,
-0xd07d,0xad5e,0xd078,0xd0a4,0xd075,0xd079,0xd07c,0x0000,
-0x0000,0xd06d,0xd0a3,0xd07b,0x0000,0x0000,0xd06c,0x0000,
-0xd070,0xad5f,0xad5a,0xad53,0xad58,0xad54,0xad67,0xd06e,
-0xd3a5,0xad5b,0x0000,0x0000,0xd07a,0xce41,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a8,0xaffa,
-0x0000,0xd376,0x0000,0xd3a3,0xd37d,0x0000,0xd3b2,0x0000,
-0xd3aa,0x0000,0xd37e,0x0000,0xd3a9,0xd378,0xd37c,0xd3b5,
-0xaffd,0xd3ad,0xd3a4,0xafed,0xd3b3,0xd374,0x0000,0xd3ac,
-0x0000,0xaffc,0xaff7,0xd373,0xaff5,0xaff4,0xaff9,0xd3ab,
-0xaff1,0xaff8,0xd072,0xdb5c,0xd3a6,0x0000,0x0000,0xd37a,
-0xaffb,0xd37b,0xd3a1,0xaffe,0xd375,0xd3af,0x0000,0xd3ae,
-0xd3b6,0xaff3,0xaff0,0xd3b4,0xd3b0,0xd3a7,0xd3a2,0xaff6,
-0xaff2,0xd377,0xafee,0xd3b1,0xafef,0x0000,0xd379,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd75e,0xd760,0xd765,0xd779,0xb2fc,
-0xb2f2,0x0000,0xd75d,0xb2fd,0xb2fe,0xd768,0xd76f,0xd775,
-0x0000,0xd762,0x0000,0xd769,0x0000,0x0000,0xb340,0xd777,
-0xd772,0xb2fa,0xb2f8,0xd76e,0xd76a,0xd75c,0xb2ef,0xd761,
-0xd759,0x0000,0xb2f7,0xb2f9,0xd766,0xd763,0xb2f4,0xd773,
-0xb2f1,0xd764,0xd77a,0xd76c,0x0000,0xd76b,0xb2f0,0x0000,
-0xb2fb,0x0000,0xb2f3,0xd75a,0xd75f,0xd770,0xd776,0xb341,
-0xd75b,0xd767,0xd76d,0xb2f6,0x0000,0x0000,0xd778,0xd771,
-0xd774,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xb2f5,0x0000,0xdb6c,
-0xdb60,0xb5d7,0xdb7d,0xdba7,0xdbaa,0xb5d5,0xdb68,0xdba3,
-0xdb69,0xdb77,0xb5e2,0xdb73,0xb5df,0x0000,0xdb74,0xdb5d,
-0x0000,0xdba4,0x0000,0x0000,0xb5e8,0xdba1,0xdb75,0xdbac,
-0xdb70,0xdfc8,0x0000,0xdbaf,0xb5e6,0xdb6e,0xdb7a,0xb5e9,
-0xb5d4,0xdb72,0xdbad,0xdb6b,0xdb64,0xdb6f,0x0000,0xdb63,
-0xdb61,0xb5d0,0xdba5,0xdb6a,0xdba8,0x0000,0xdba9,0xb5d8,
-0xb5dd,0xb5d9,0xb5e1,0xdb7e,0xb5da,0xdb76,0xdb66,0x0000,
-0xb5d2,0xdb5e,0xdba2,0xdbab,0xdb65,0xb5e0,0xdbb0,0xdb71,
-/* 0x8400 */
-0x0000,0xdb6d,0x0000,0xb5d1,0xb5e5,0x0000,0xdb7c,0xb5e7,
-0x0000,0xdb78,0xb5dc,0xb5d6,0xb5de,0xb5d3,0xb5e4,0xdb79,
-0xdb67,0xdb7b,0xdb62,0xdba6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdbae,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdb5f,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfc7,0x0000,0xdfdd,0xb855,0xdfcc,0x0000,0xdfca,
-0xdfb5,0xb8a9,0xdfc5,0xdfd9,0xdfc1,0xb8b1,0xdfd8,0xdfbf,
-0xb5e3,0xdfcf,0xdfc0,0xdfd6,0xb8b0,0xb8a8,0x0000,0xdfaa,
-0xdfb2,0x0000,0xdfcb,0xdfc3,0xdfdc,0xdfc6,0xb8b6,0xdfd7,
-0x0000,0xb8ad,0x0000,0xdfc9,0xdfd1,0xdfb6,0xdfd0,0x0000,
-0xdfe1,0xdfb1,0xdfd2,0x0000,0xdfdf,0x0000,0xdfab,0xb5db,
-0x0000,0xdfb9,0xdfb8,0xb8af,0x0000,0xdfbc,0xdfbe,0xdfcd,
-0xdfde,0xb8b2,0x0000,0xb8b3,0x0000,0xdfb0,0xb8ab,0xdfb4,
-0xdfda,0xb8b4,0x0000,0xb8ac,0xb8ae,0xb8b5,0xdfe0,0xdfd3,
-0xdfce,0x0000,0x0000,0xdfbb,0xdfba,0xb8aa,0xdfac,0xb8a7,
-0xdfc4,0xdfad,0xdfc2,0x0000,0x0000,0xdfb7,0xdfdb,0x0000,
-0x0000,0x0000,0xb8a6,0x0000,0x0000,0x0000,0xdfb3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdfaf,0xdfd5,0xdfae,
-0xbb60,0xe3d3,0x0000,0x0000,0xe3c2,0x0000,0x0000,0xe3ac,
-0xe3ca,0xbb58,0xe3bb,0xe3c5,0xbb5b,0xe3be,0xbb59,0xe3af,
-0xe3cd,0xe3ae,0xe3c1,0x0000,0xe3ad,0x0000,0x0000,0xe3bf,
-0xe3c8,0xe3c6,0xe3ba,0xe3b5,0xe3b3,0x0000,0xe3b4,0xe3c7,
-0xe3d2,0xe3bc,0xbb5a,0x0000,0xe3b7,0x0000,0xe3cb,0x0000,
-0xbb5d,0xe3b6,0xe3b0,0xe3c0,0xbb61,0x0000,0x0000,0xbb55,
-0xbb5e,0xe3b8,0xe3b2,0x0000,0xbb57,0xdfd4,0xbb56,0xe3c3,
-0x0000,0xbb54,0xbb63,0xbb5c,0xe3c4,0xe3b9,0xe3b1,0xe3cc,
-0xe3bd,0xbb62,0xe3d0,0xbb5f,0xe3cf,0x0000,0xe3c9,0xe3ce,
-0x0000,0x0000,0x0000,0xe3d1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe773,
-0xe774,0xe767,0xe766,0xe762,0xbdb4,0x0000,0xbdac,0xe776,
-0xe775,0xdfa9,0xe75f,0xe763,0xe75d,0x0000,0xe770,0xe761,
-0x0000,0xe777,0xe75a,0xe758,0xe764,0xe76e,0xe769,0xbdb6,
-0xe74f,0x0000,0xe76d,0x0000,0x0000,0x0000,0xbdb7,0xdfbd,
-0xe75b,0xe752,0xe755,0xe77b,0xe75c,0xe753,0xe751,0xe74e,
-0x0000,0xbdb0,0xe765,0xbdaf,0xbdb3,0xe760,0xe768,0xbda9,
-0xe778,0xe77c,0xbdab,0x0000,0xe757,0xe76b,0xe76f,0xe754,
-0xe779,0xbdb2,0x0000,0xbdb1,0xe74c,0xbdb5,0xe772,0xe756,
-0xe76a,0xe750,0xe75e,0xe759,0xbdad,0xbdae,0xe76c,0xe77d,
-0xe77a,0xe771,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe74d,0x0000,0xbdaa,0xeb49,0x0000,
-0xeb40,0xeb43,0x0000,0xbfbb,0xeb45,0xeaf9,0xeb41,0xeb47,
-0xbfb8,0xbfbc,0xbfb6,0x0000,0x0000,0xeafb,0xeb4c,0x0000,
-0x0000,0xeb46,0x0000,0xeafc,0xeb55,0xeb4f,0xeaf8,0xee46,
-0xeafe,0xbfb7,0x0000,0xeb4a,0x0000,0xeb54,0xbfbf,0x0000,
-0xeb51,0xeafd,0xeb44,0xeb48,0xeb42,0xeb56,0xeb53,0xeb50,
-0xbfb9,0xbfba,0xbfbe,0xeafa,0xeb57,0xbfbd,0xeb4d,0x0000,
-0x0000,0xeb4b,0x0000,0x0000,0x0000,0xeb4e,0xee53,0xee40,
-0xee45,0xee52,0xee44,0xedfb,0xee41,0x0000,0xc1a2,0x0000,
-0xedf4,0xee4d,0xee4f,0xedf3,0xc1a1,0xee51,0xee49,0xc1a8,
-0xee50,0xee42,0xc1aa,0xedf9,0xeb52,0xee4a,0xee47,0xedf5,
-0xee55,0xc1a4,0x0000,0x0000,0xc1a5,0xedf7,0xee48,0x0000,
-0xee54,0xee4b,0xedfd,0xc1a7,0xc1a3,0xee4c,0xedfe,0xee56,
-0xedf8,0xee43,0xee4e,0xedfa,0xedfc,0x0000,0xc2cb,0xedf6,
-0xc1a9,0xc2c4,0xc17e,0x0000,0x0000,0x0000,0x0000,0xc1a6,
-0xc2c8,0xf0b3,0x0000,0xf0a9,0xf0a4,0xf0aa,0xf0b4,0xf0b8,
-0xf0b7,0xc2ca,0xc2c9,0x0000,0x0000,0xf0ab,0xf0b9,0xf0ae,
-0xf0a6,0x0000,0xf0a8,0xf0a7,0xf0ad,0xf0b2,0xf0a5,0xf0ac,
-0xf0b1,0xc2c7,0x0000,0xf0af,0x0000,0xc2c5,0xf0b0,0xc2c3,
-0xc2c6,0xf2d5,0xf0b5,0x0000,0x0000,0xc3c2,0x0000,0xf2cd,
-0xf2d1,0xf2c9,0xf2cc,0x0000,0xf2d4,0xc3c0,0xf2d9,0xf2d2,
-0x0000,0xf2ca,0xf2da,0xf2d3,0xc3c3,0xc3c4,0xf2d7,0x0000,
-0xf2cb,0xc3bf,0xc3c1,0xf2c6,0xf2ce,0xf2c8,0x0000,0xf2d8,
-0xf2d6,0xf2c7,0xf2cf,0x0000,0x0000,0x0000,0xf4be,0xc3c5,
-0xf2d0,0xc4a7,0xc4a9,0xc4a6,0x0000,0xf4c3,0xf4bb,0xf4b9,
-0xf4bd,0xf4ba,0x0000,0x0000,0xf4bf,0xf4c1,0xc4aa,0xc4ac,
-0x0000,0xf4c0,0xc4ad,0xc4ab,0xf4c2,0x0000,0x0000,0x0000,
-0x0000,0xc4a8,0x0000,0x0000,0x0000,0x0000,0x0000,0xc4f4,
-0xf5f1,0xf5f7,0xc4f6,0xf4bc,0xf5f6,0x0000,0xf5fd,0xf5f4,
-0xf5fb,0xf5fa,0xf4b8,0xf5f5,0xf0b6,0xf5fe,0xf5f3,0xf5f8,
-0x0000,0xf5fc,0xf5f2,0x0000,0xf74a,0xc4f5,0xf5f9,0x0000,
-0x0000,0xf7f4,0xf74b,0xf749,0xf747,0xf748,0xf74c,0x0000,
-0xc5d9,0xf7f2,0xf7f0,0xf7f5,0xf7f3,0x0000,0xf7f6,0xc5da,
-0xf7f1,0x0000,0x0000,0xf8bc,0x0000,0x0000,0xf945,0xf946,
-0xf947,0x0000,0x0000,0xf9c7,0xf9bd,0xca4f,0xaaea,0x0000,
-0xad68,0x0000,0xd3b8,0xd3b7,0xb040,0xb342,0xd77c,0x0000,
-0x0000,0xd77b,0x0000,0xb5ea,0xb8b8,0x0000,0xb8b7,0xb8b9,
-0x0000,0xe3d4,0xe77e,0xeb58,0xeb5a,0xeb59,0x0000,0xc1ab,
-0xee57,0xf0ba,0xf9a5,0xa6e4,0x0000,0xcdc9,0xcdca,0xcdc8,
-0xcdc7,0xaaeb,0x0000,0xd0a9,0xd0a7,0x0000,0x0000,0xd0a6,
-0x0000,0xad69,0xad6b,0xad6a,0xd0a8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd3c4,0xd3c1,0xd3bf,
-0x0000,0x0000,0xb041,0xd3c2,0xb046,0xd3bc,0xd3cb,0x0000,
-0xd3cd,0xd3bd,0x0000,0xb043,0xd3ce,0xd3c9,0xd3bb,0xd3c0,
-0xd3ca,0xd3c6,0xd3c3,0x0000,0xb048,0xd3cc,0xd3be,0x0000,
-0x0000,0xd3c7,0xd3b9,0xb047,0xb044,0xd3c5,0x0000,0xd3c8,
-0xd3ba,0xb045,0xb042,0x0000,0x0000,0x0000,0x0000,0xb34c,
-0xd7a5,0xb34b,0x0000,0xd7a8,0xd7ab,0xb348,0xb346,0xd77e,
-0xd7a9,0xd7a7,0xd7a4,0xd7ac,0xd7ad,0xd7af,0xd7b0,0xd77d,
-0xb345,0xd7a2,0xd7a1,0xd7ae,0xb347,0xd7a3,0xb349,0xb344,
-0xd7a6,0xb34d,0x0000,0xb34a,0xd7aa,0x0000,0x0000,0x0000,
-0xb5f1,0xdbbf,0x0000,0xdbb4,0xb5ee,0x0000,0xdfe7,0xdbbd,
-0xdbb1,0xb5ec,0xdbb6,0xb5ef,0xdbba,0xdbb8,0xb5f2,0xb5eb,
-0x0000,0x0000,0xdbb2,0xdbb5,0xb5f0,0x0000,0xdbb3,0x0000,
-0xdbbe,0xdbbc,0xdbb7,0xdbb9,0xdbbb,0xb5ed,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdfe8,0xdfee,0xdfe4,
-0xdfea,0xb8ba,0xdfe6,0xb8c0,0x0000,0x0000,0xb8bf,0x0000,
-0xb8be,0xdfed,0xb8c1,0xb8c2,0xdfe3,0xdff0,0xb8c3,0xb8bd,
-0xb8bc,0xdfec,0xb8c4,0xdfe2,0xdfe5,0xdfef,0xdfeb,0x0000,
-0x0000,0xe3f4,0xe3e9,0xb8bb,0x0000,0x0000,0x0000,0x0000,
-0xbb6a,0xe3dd,0xe3f2,0xe3de,0xbb65,0x0000,0xe3db,0x0000,
-0xe3e4,0xe3dc,0xbb67,0xe3d6,0xe3f1,0xbb68,0xe3ee,0xe3ef,
-0xe3d7,0xbb6d,0xe3e6,0x0000,0xe3e0,0xe3e7,0xe3da,0x0000,
-0xe3f3,0xe3eb,0xe3e5,0xe3d5,0xbb69,0xe3ec,0x0000,0xbb6c,
-0xe3f0,0x0000,0xe3ea,0xbb66,0xe3e8,0x0000,0xe3e2,0xbb64,
-0xe3d9,0xe3e1,0xe3ed,0xe3df,0x0000,0x0000,0xe3e3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbdc1,0xdfe9,0xe7b2,0xe7bb,
-0xe7b1,0xe7ad,0xe7aa,0xbdc2,0xe7a8,0xbb6b,0xe7a1,0xbdc0,
-0xe7a7,0xbdbf,0xe7ac,0xe7a9,0xe7b9,0xe7b4,0xe7ae,0xe7b3,
-0xbdbb,0xe7ab,0xe7be,0xe7a2,0xe7a3,0xe7ba,0xbdbc,0xe7bf,
-0xbdbe,0xe7c0,0xe7b0,0xe3d8,0xe7b6,0xe7af,0xe7b8,0xe7b5,
-0x0000,0x0000,0x0000,0xe7a6,0xbdb9,0xe7bd,0xbdba,0xe7a4,
-0xbdbd,0xeb64,0xe7b7,0xe7bc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeb61,0xbdb8,0xbfc0,0xeb6b,0xeb67,0x0000,0xeb65,
-0xeb60,0xeb6f,0x0000,0x0000,0x0000,0xbfc4,0x0000,0xeb5c,
-0xeb68,0xeb69,0xeb5f,0xeb5e,0xeb6c,0x0000,0xeb62,0xeb5d,
-0xeb63,0x0000,0xeb6e,0xeb5b,0xeb6d,0xeb6a,0xbfc2,0xbfc1,
-0x0000,0x0000,0xbfc3,0xeb66,0xf0cb,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xee59,0xc1b1,0xee5d,0xee5a,0xee61,0xee67,
-0xee5c,0x0000,0xee70,0xc1ae,0xee6a,0xee5f,0xee6b,0xee66,
-0xee6d,0xee5e,0xc1b3,0xc1b2,0xee60,0xee6e,0xee58,0xee6c,
-0xc1ac,0x0000,0xee64,0xee63,0xee68,0xee5b,0xc1b0,0x0000,
-0xc1b4,0xee62,0xee69,0xc1b5,0xee65,0x0000,0x0000,0x0000,
-0x0000,0xc1ad,0xc1af,0xf0c7,0xf0c5,0x0000,0x0000,0xf0cc,
-0xf0c9,0xf0cd,0x0000,0xf0be,0xf0c6,0xf0d1,0xee6f,0xf0c2,
-0xc2cf,0xe7a5,0xf0bd,0xf0ca,0xf0c4,0xf0c1,0xf0bc,0xf0bb,
-0xf0d0,0x0000,0xf0c0,0xf0bf,0xc2cd,0xf0c8,0x0000,0xc2cc,
-0x0000,0x0000,0xc2ce,0xf0c3,0xf0cf,0x0000,0xf2de,0xf2df,
-0x0000,0xc3c9,0xf2dc,0xc3c6,0xf2e4,0x0000,0xc3ca,0xf2e6,
-0xf2db,0xf0ce,0xf2e8,0xf2dd,0x0000,0xc3c7,0xf2e3,0x0000,
-0xf2e5,0xf2e0,0xf2e7,0xf2e2,0xf2e1,0xc3c8,0x0000,0x0000,
-0xf4c5,0xf4c6,0x0000,0xf4c8,0xc4ae,0xc4af,0xf4c9,0xf4c7,
-0x0000,0xf4c4,0x0000,0xf642,0xf645,0xf641,0x0000,0xc4fa,
-0xf643,0xc4f9,0xc4f8,0xc4f7,0xf644,0xf751,0xf74f,0x0000,
-0xf74e,0xf640,0xf750,0xf646,0xf74d,0x0000,0xf7f9,0xf7d7,
-0xf7f7,0xc5db,0xf7f8,0xf7fa,0x0000,0xf8bf,0xc5fa,0xf8be,
-0xf8bd,0xc5fb,0x0000,0xc65a,0xf96e,0xf9a7,0xf9a6,0xf9a8,
-0xa6e5,0xd0aa,0x0000,0xd3cf,0xd3d0,0x0000,0x0000,0x0000,
-0xdbc0,0x0000,0xf647,0xf8c0,0xa6e6,0xad6c,0xd0ab,0x0000,
-0x0000,0x0000,0xd7b1,0xb34e,0x0000,0xdbc2,0xdbc1,0xb5f3,
-0x0000,0xb8c5,0xe7c1,0xbdc3,0x0000,0xbdc4,0x0000,0x0000,
-0x0000,0xbfc5,0xc5fc,0xa6e7,0x0000,0x0000,0x0000,0xd0ac,
-0xaaed,0xd0ae,0xd0ad,0xad6d,0x0000,0xd3d1,0x0000,0xd3d8,
-0xb049,0xd3d6,0xd3d4,0x0000,0xd3db,0xd3d2,0xd3d3,0xb04a,
-0x0000,0xb04e,0x0000,0x0000,0xd3dc,0xb04d,0xd3da,0xd3d7,
-0xd3d5,0xb04b,0xb04c,0xd3d9,0x0000,0x0000,0x0000,0x0000,
-0xb350,0xd7b2,0x0000,0xb355,0xd7c2,0xb354,0xd7c4,0x0000,
-0x0000,0xd7b8,0xb352,0xd7c3,0x0000,0xd7b3,0xb353,0xd7bf,
-0xd7bb,0xd7bd,0xd7b7,0xd7be,0x0000,0x0000,0xb34f,0xd7ba,
-0x0000,0xd7b9,0xd7b5,0x0000,0xd7c0,0x0000,0x0000,0xd7bc,
-0xd7b4,0x0000,0xd7b6,0xb351,0xd7c1,0x0000,0x0000,0x0000,
-0x0000,0xb5f6,0xdbcd,0x0000,0x0000,0x0000,0xdbc9,0xdbcb,
-0xdbc6,0xdbc5,0xdbc3,0x0000,0xdbca,0xdbcc,0xdbc8,0x0000,
-0xdbc7,0xb5f4,0xb5f5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdbcf,0xb8cd,0xdff2,0xdff8,0xdff3,0xdff4,0xf9d8,
-0xdff9,0x0000,0xb8cf,0x0000,0xb8c7,0xb8ce,0xdff1,0xdbc4,
-0xb8ca,0xb8c8,0xdff7,0xdff6,0xb8c9,0xb8cb,0xdff5,0xb8c6,
-0x0000,0xb8cc,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3f6,
-0xbb74,0x0000,0x0000,0xe442,0xe441,0x0000,0xe3fb,0xbb76,
-0xe440,0xe3f7,0xe3f8,0xbb6e,0xbb70,0x0000,0xe3fd,0xe3f5,
-0xbb72,0xbb71,0xe3f9,0xe3fe,0xe3fc,0xbb73,0xe3fa,0x0000,
-/* 0x8900 */
-0x0000,0xdbce,0xbb6f,0x0000,0x0000,0xe7c2,0xe7c9,0xbdc6,
-0x0000,0xe7cd,0xbdca,0xe7c5,0xe7c3,0x0000,0xe7cc,0x0000,
-0xbdc5,0xe7cb,0xbdc7,0xbdc8,0xe7c4,0xbdc9,0xe7ca,0xe7c6,
-0xe7c7,0xe7c8,0xbb75,0x0000,0x0000,0x0000,0xeb70,0xeb7c,
-0x0000,0xbfca,0xeb77,0xeb79,0x0000,0xbfc8,0xeb71,0xeb75,
-0x0000,0xeb78,0xbfc6,0xbfc9,0xeb7b,0xeb73,0xeb74,0xeb7a,
-0xeb72,0xeb76,0xbfc7,0xee72,0x0000,0xee71,0xc1b7,0xee77,
-0xc1b9,0x0000,0x0000,0xc1b6,0xee73,0xc1ba,0xee74,0x0000,
-0x0000,0xee75,0xee78,0x0000,0xc1b8,0x0000,0xf0d6,0x0000,
-0x0000,0xf0d9,0x0000,0xf0d3,0xf0d5,0x0000,0x0000,0xf0d4,
-0xf0d7,0xf0d8,0xee76,0xf0d2,0x0000,0x0000,0xc3cd,0xf2ec,
-0xf2ef,0xf2f1,0xf2ea,0xf2eb,0xf2ee,0xf2f0,0xc3ce,0xc3cc,
-0xc3cb,0xf2ed,0xf2e9,0xf4ca,0xc4b0,0x0000,0xf4cb,0x0000,
-0x0000,0xf649,0xc4fb,0xf64b,0xc4fc,0xf648,0xf64a,0xc5a8,
-0x0000,0xf752,0xc5a7,0xf7fd,0xf7fc,0x0000,0xf7fb,0x0000,
-0x0000,0xf948,0xf949,0xf94b,0xf94a,0x0000,0xca50,0xa6e8,
-0x0000,0xad6e,0xd7c5,0xb5f7,0x0000,0xdffa,0xc2d0,0x0000,
-0xf2f2,0x0000,0x0000,0xa8a3,0x0000,0x0000,0x0000,0xb357,
-0x0000,0x0000,0x0000,0xb356,0x0000,0xdbd0,0xb5f8,0xdbd2,
-0xdbd1,0x0000,0x0000,0xdffb,0xb8d0,0xe443,0xe446,0xe445,
-0x0000,0xe444,0xe7ce,0xe7d0,0xe7cf,0x0000,0xbfcc,0x0000,
-0x0000,0x0000,0xbfcb,0x0000,0xc1bb,0xee79,0xee7b,0xee7a,
-0x0000,0x0000,0xc2d1,0x0000,0x0000,0x0000,0xf2f4,0xf2f3,
-0x0000,0xf4cc,0xc4b1,0x0000,0x0000,0xc4fd,0xf754,0xf753,
-0xc65b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa8a4,0xd0af,0xad6f,0xd7c8,0xd7c6,0x0000,
-0x0000,0xd7c7,0xdbd4,0xdbd5,0xe043,0xdbd3,0x0000,0xdffc,
-0xe041,0xe040,0xe042,0xb8d1,0xdffe,0xdffd,0xe044,0x0000,
-0xe449,0xe447,0x0000,0xe448,0xe7d3,0xe7d1,0x0000,0x0000,
-0xe7d2,0xeb7d,0xee7c,0xee7d,0xc2d2,0x0000,0xf2f5,0xf4cd,
-0xc4b2,0x0000,0xf64c,0xf755,0xc5a9,0x0000,0xf7fe,0xf94c,
-0xa8a5,0x0000,0xad71,0xad72,0xd0b0,0x0000,0x0000,0xd0b1,
-0xad70,0x0000,0xb054,0x0000,0xb052,0x0000,0xb051,0xb058,
-0xb050,0xb059,0xd3dd,0xb056,0x0000,0xb053,0xb057,0xb055,
-0xb04f,0x0000,0x0000,0xb35f,0x0000,0xb359,0xd7cc,0xb35e,
-0x0000,0x0000,0xb360,0xb35a,0x0000,0xb35b,0x0000,0xd7ca,
-0x0000,0x0000,0xb358,0x0000,0xd7cb,0xb35d,0x0000,0x0000,
-0xd7c9,0xb35c,0x0000,0x0000,0xb644,0x0000,0xb646,0x0000,
-0x0000,0xdbd8,0xb645,0xb5f9,0xb5fd,0x0000,0xb8e4,0xe049,
-0xdbda,0xb5fe,0x0000,0x0000,0xdbdd,0xdbde,0xb643,0x0000,
-0xdbe0,0x0000,0xdbe2,0x0000,0xdbe3,0xdbd7,0xdbd6,0xdbe4,
-0xb642,0xdbe1,0xdbdf,0x0000,0xb640,0xb5fb,0xb647,0xdbdb,
-0xdbdc,0xdbd9,0x0000,0xb641,0x0000,0x0000,0xb5fc,0x0000,
-0xb5fa,0xe048,0xb8df,0xb8da,0x0000,0x0000,0xb8d5,0x0000,
-0xb8e5,0xb8d6,0x0000,0xb8d2,0xb8e1,0xb8de,0xb8e0,0x0000,
-0xb8d7,0xb8dc,0xb8d3,0xb8d4,0xe050,0xe04d,0xe045,0xe04a,
-0x0000,0xb8e2,0xe051,0xb8e3,0xb8d9,0x0000,0x0000,0xe047,
-0x0000,0xe04f,0xe04b,0xe04e,0xe04c,0xb8dd,0xe046,0xb8d8,
-0x0000,0x0000,0x0000,0xe44c,0xbb78,0xbb7b,0x0000,0xe44e,
-0x0000,0xbba5,0xe44d,0xbb7d,0x0000,0xbdcf,0xe44f,0x0000,
-0xbba4,0xe44b,0xbba6,0x0000,0x0000,0x0000,0xbb79,0x0000,
-0xb8db,0xbb7c,0x0000,0xbb7a,0xbb7e,0xbba2,0xbb77,0xbba7,
-0xbba3,0x0000,0xbba1,0xe44a,0x0000,0x0000,0x0000,0x0000,
-0xbdd6,0x0000,0xbdd2,0x0000,0x0000,0x0000,0xbdd9,0x0000,
-0xe7d6,0xbdda,0xe7e2,0xe7db,0xbdcb,0xe7e3,0xe7dd,0xbdd5,
-0xe7de,0x0000,0xbdd4,0xe7e1,0xbdce,0xe7df,0xe7d5,0xbdcd,
-0xebaa,0xbdd3,0x0000,0xbdd0,0x0000,0xbdd8,0x0000,0xe7d4,
-0x0000,0xe7d8,0xbdcc,0xe7d7,0xe7d9,0xe7da,0xbdd7,0xe7dc,
-0xe7e0,0xe7e4,0x0000,0xbddb,0xbfd2,0xeba5,0xebab,0xeba8,
-0xeb7e,0xebac,0xeba1,0x0000,0xeba7,0x0000,0xbfcd,0xbfd3,
-0xebad,0x0000,0x0000,0xbfcf,0x0000,0xbfd9,0xbfd4,0xebaf,
-0xeba9,0xbfd0,0xeba2,0xbfda,0xeba3,0xeba4,0xbfdb,0xbfd8,
-0xbdd1,0x0000,0xbfce,0xebb0,0xbfdc,0x0000,0xbfd5,0xebae,
-0xbfd1,0xbfd6,0xbfd7,0x0000,0xc1c3,0xeea4,0xeead,0xeeaa,
-0xeeac,0x0000,0xc1c0,0xeea5,0x0000,0xeeab,0xc1bc,0xeea7,
-0xc1c4,0xeea3,0xeea8,0xeeaf,0xeba6,0xeea9,0xeea2,0xc1bd,
-0xeea1,0xc1be,0xeeb0,0xc1bf,0xeeae,0xc1c2,0xee7e,0x0000,
-0xc1c1,0x0000,0xeea6,0xf0dc,0xf0ea,0xf0e5,0xf0e7,0xf0db,
-0xc2d3,0x0000,0xf0da,0xc2d6,0xc2d5,0x0000,0xf0e9,0xf0e1,
-0xf0de,0xf0e4,0x0000,0xf0dd,0x0000,0xf0df,0xf0e8,0xf0e6,
-0x0000,0xc2d4,0xf0ed,0xf0eb,0xf0e2,0xf0ec,0xf0e3,0x0000,
-0xf2f9,0xc3cf,0xf341,0x0000,0x0000,0xf64f,0xc3d6,0xf0e0,
-0xf2f7,0xc3d2,0xf2f8,0xf2fd,0x0000,0x0000,0xc3d4,0xc3d5,
-0xf2f6,0xf340,0xf342,0xf2fa,0xf2fc,0xf2fe,0xf2fb,0xf343,
-0xc3d1,0xc3d7,0xc3d3,0x0000,0xc3d0,0xf4d0,0x0000,0xc4b7,
-0xf4ce,0x0000,0x0000,0xf4d2,0x0000,0xf4d3,0xc4b5,0xf4d4,
-0xf4d1,0x0000,0xf4cf,0xc4b8,0xc4b4,0xf4d5,0x0000,0xc4b6,
-0xc4b3,0x0000,0x0000,0x0000,0xc4fe,0x0000,0x0000,0xc540,
-0xf64e,0xf64d,0xf650,0xf651,0x0000,0xc541,0xf756,0xf75b,
-0xc5aa,0x0000,0xf758,0x0000,0xf757,0xf75a,0xf759,0x0000,
-0xf843,0x0000,0xc5dc,0xf842,0xf840,0x0000,0xf841,0x0000,
-0x0000,0x0000,0xc5fe,0xc5fd,0xf8c1,0xf8c2,0xc640,0x0000,
-0xf94d,0xf94e,0xc667,0x0000,0xc66d,0x0000,0xf9a9,0xf9c8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x8c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a6,
-0x0000,0xd7cd,0x0000,0xd7ce,0xe052,0xe450,0xe7e5,0xc1c6,
-0x0000,0xc1c5,0xf0ee,0xf344,0x0000,0xf844,0xa8a7,0xd3de,
-0xb05a,0xb361,0xe054,0xe053,0xbddc,0xe7e6,0xbddd,0xeeb1,
-0xc2d7,0x0000,0x0000,0x0000,0xc676,0xa8a8,0xcdcb,0xd3df,
-0x0000,0x0000,0xb362,0x0000,0xd7cf,0xd7d0,0x0000,0xdbe5,
-0x0000,0xb648,0xb8e6,0x0000,0xe056,0xe055,0xe057,0x0000,
-0xe451,0xe452,0xbba8,0xbfdd,0xbdde,0xbfde,0x0000,0xeeb5,
-0xeeb2,0xeeb4,0xeeb3,0xc1c7,0x0000,0xf0ef,0xf346,0xf345,
-0xcba4,0xb05c,0xb05b,0xd3e0,0x0000,0xd7d1,0x0000,0x0000,
-0xdbe7,0xdbe6,0xb649,0x0000,0xe059,0xe05a,0xe058,0x0000,
-0x0000,0xb8e8,0xb8e7,0x0000,0xbbaa,0xbba9,0x0000,0xe7e7,
-0xebb3,0xebb1,0xebb2,0xbfdf,0xeeb7,0xeeb6,0x0000,0xf0f2,
-0xf0f1,0xf0f0,0xf347,0x0000,0xf9aa,0xa8a9,0xad73,0x0000,
-0xad74,0xb05d,0xb05e,0xd3e2,0xd3e1,0xd7d2,0x0000,0xb368,
-0xb366,0xb363,0xb367,0xb365,0xb364,0x0000,0x0000,0xb64a,
-0xdbea,0x0000,0xb8ed,0xb64c,0xb651,0xdbec,0xb653,0xb652,
-0xb655,0xdbeb,0xdbe8,0xb64f,0xb64b,0xb64d,0xdbe9,0xb654,
-0xb650,0xb64e,0xb8ef,0xb8ee,0xb8ec,0xb8f0,0x0000,0xb8ea,
-0xb8eb,0x0000,0xb8e9,0x0000,0xe05b,0x0000,0x0000,0xe454,
-0x0000,0xbbac,0xbbad,0xbbab,0x0000,0xe453,0x0000,0xe455,
-0x0000,0xe7ea,0xe7ec,0x0000,0xbde7,0xe7ed,0xbde0,0xe7e9,
-0xbddf,0xbde9,0xbde5,0xbde6,0xbde2,0xe7e8,0xbde1,0xe7ee,
-0xe7eb,0x0000,0xbde8,0x0000,0xbde3,0xbde4,0xebb5,0x0000,
-0xebb7,0xebb6,0x0000,0xebb8,0xbfe0,0xebb4,0x0000,0x0000,
-0xc1cb,0xeeb8,0xc1c8,0xc1cc,0xc1ca,0xc1c9,0xf0f3,0x0000,
-0xf0f6,0x0000,0xf0f5,0x0000,0xf0f4,0xc2d8,0xf348,0xf349,
-0xc3d8,0xf34a,0xc3d9,0x0000,0x0000,0xc4ba,0x0000,0xc4b9,
-0xf652,0x0000,0x0000,0xc542,0xf653,0xf75c,0xc5ab,0xc5ac,
-0x0000,0xf845,0x0000,0xc642,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa8aa,0x0000,0xb36a,0xb369,
-0xe05c,0xe05d,0x0000,0xbbae,0xebb9,0xbdea,0xebba,0xeeb9,
-0xa8ab,0x0000,0xd0b2,0xad76,0xad75,0x0000,0xd3e3,0xb05f,
-0xd3e4,0xd7d5,0x0000,0xd7d4,0x0000,0xd7d3,0x0000,0x0000,
-0xdbee,0xb658,0x0000,0x0000,0xdbed,0xb657,0x0000,0x0000,
-0x0000,0xdbef,0xb656,0x0000,0xe05f,0xe062,0xe060,0xe061,
-0xe065,0xe05e,0xe066,0xe063,0xe064,0xbbb0,0xe456,0x0000,
-0x0000,0xbbaf,0x0000,0xe7f2,0xe7f0,0x0000,0x0000,0xbdeb,
-0xe7ef,0xe7f1,0x0000,0xbdec,0x0000,0xebbb,0x0000,0xebbc,
-0xc1cd,0x0000,0xf34c,0xf34e,0xf34b,0xf34d,0xf4d6,0xf654,
-0x0000,0x0000,0xf96f,0xa8ac,0xad77,0xd3e5,0xd3e7,0xd3e6,
-0x0000,0xd7d8,0xb36c,0x0000,0xd7d6,0x0000,0xb36b,0xd7d9,
-0x0000,0xd7da,0xd7d7,0x0000,0x0000,0xdbfb,0xb660,0xdbf3,
-0xdbf9,0x0000,0x0000,0xb65b,0xb65e,0xdbf2,0xb659,0xdbf6,
-0xe06c,0xb65d,0x0000,0xdbf1,0x0000,0xdbf7,0xdbf4,0xdbfa,
-0xdbf0,0xdbf8,0xb65c,0xb65f,0xdbf5,0xb65a,0x0000,0xb8f2,
-0xe068,0xb8f1,0xe06f,0xe06e,0xb8f8,0x0000,0xb8f9,0xe070,
-0xb8f3,0xe06d,0xb8f7,0xe072,0xe069,0x0000,0xe06b,0xb8f4,
-0xe067,0xe06a,0xe071,0xb8f5,0xe073,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb8f6,0x0000,0xbbb1,0xe45b,0xe461,0xe459,
-0xe462,0x0000,0xe458,0xe45d,0xe463,0xe460,0xe45f,0xe45e,
-0x0000,0xe457,0xe45c,0x0000,0x0000,0xe45a,0x0000,0xbdf1,
-0xbdee,0xe7fb,0xe841,0xe843,0xe840,0xe7f8,0xe7fa,0xe845,
-0xe842,0xe7fc,0xe846,0xe7f9,0xe844,0xbdef,0xbdf5,0xbdf3,
-0xe7f3,0xbdf4,0xbdf0,0xe7f4,0xe7f6,0xe7f5,0xe7fd,0xe7fe,
-0x0000,0xbdf2,0x0000,0xbded,0x0000,0x0000,0xe7f7,0x0000,
-0xebc6,0xbfe2,0x0000,0xebbd,0xbfe3,0xbfe6,0xebc2,0x0000,
-0xebbf,0xbfe5,0x0000,0x0000,0xebc3,0xebc4,0xebbe,0xebc7,
-0xebc0,0xebc5,0xbfe4,0x0000,0xbfe1,0xebc1,0x0000,0xeebf,
-0xc1d0,0xc1ce,0xc1d1,0xc1cf,0xeebe,0xeebb,0xeeba,0x0000,
-0xeebd,0x0000,0x0000,0xeebc,0xf145,0xc2de,0xf0fb,0xf0fa,
-0x0000,0xc2d9,0xf141,0xf140,0xf0f7,0xf143,0xf0fc,0xc2dd,
-0xf0f9,0xf142,0xf0f8,0xc2da,0xc2dc,0xf0fd,0xc2db,0xf0fe,
-0x0000,0xf144,0xf352,0x0000,0xc3de,0xf34f,0x0000,0xf353,
-0x0000,0x0000,0xc3db,0xf351,0xc3e0,0x0000,0xc3dd,0x0000,
-0xf350,0x0000,0xc3df,0xf354,0xc3da,0x0000,0x0000,0x0000,
-0x0000,0xc4bc,0xc4be,0x0000,0xf4d9,0xc4bd,0xf4d7,0xc3dc,
-0xf4d8,0xc4bb,0xc543,0xc545,0xf656,0xc544,0xf655,0x0000,
-0xf761,0xc5ad,0xf760,0xc5ae,0xf75e,0xf75d,0xf762,0xf763,
-0xf846,0x0000,0xf75f,0x0000,0x0000,0xf8c6,0xf8c3,0xf8c4,
-0xf8c5,0xc65c,0x0000,0xf951,0xf950,0xf94f,0xf970,0x0000,
-0xf9be,0xf9ab,0xc66e,0xa8ad,0xb060,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb8fa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbdf6,0x0000,0x0000,0xebc8,0x0000,0x0000,
-0xc2df,0x0000,0xf355,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf9ac,0xa8ae,0xaaee,0xad79,0xad78,0x0000,0xb063,
-0x0000,0xd3e8,0xb061,0xd3e9,0xb062,0x0000,0x0000,0xd7df,
-0xd7db,0x0000,0x0000,0xb36d,0xd7de,0xd7dd,0xd7dc,0xb36e,
-0xd7e0,0xd7e1,0x0000,0x0000,0x0000,0xdc43,0xdc41,0xdc45,
-0xdc46,0xdc4c,0x0000,0xdc48,0xdc4a,0x0000,0xdc42,0xdbfc,
-0x0000,0xdc49,0x0000,0x0000,0xdc4b,0xdc44,0xdc47,0xdbfd,
-0xb662,0xdc40,0xdbfe,0xb661,0xb663,0x0000,0xb8fd,0xe075,
-0xe077,0xe076,0xe07b,0xb8fb,0x0000,0xe078,0xe074,0xe079,
-0xe07a,0xb8fc,0xb8fe,0xe07c,0x0000,0xe467,0xe466,0x0000,
-0xe464,0xe465,0xbbb3,0xbbb5,0xbbb2,0xbbb4,0xe84d,0xe84e,
-0xe849,0x0000,0xe84a,0xbdf8,0xbdfd,0xbdf7,0xbdfe,0xbdf9,
-0xe84b,0x0000,0x0000,0xe84c,0xe848,0xbe40,0xbdfb,0x0000,
-0x0000,0xbdfa,0xbdfc,0x0000,0xe847,0x0000,0xebca,0xbfe8,
-0x0000,0x0000,0xebcc,0xbfea,0xebcf,0xebcb,0xebc9,0xebce,
-0xbfe9,0xebcd,0x0000,0xbfe7,0x0000,0x0000,0xc1d3,0xc1d6,
-0xeec1,0x0000,0xc1d4,0xeec0,0xc1d2,0xc1d5,0xf146,0xf147,
-0xf148,0xc2e0,0x0000,0xf149,0x0000,0xc2e1,0xc3e2,0xf358,
-0xf359,0xf357,0xf356,0xf35a,0xc3e1,0xf4dd,0xf4db,0xf4dc,
-0xf4de,0xf4da,0xf4df,0xf658,0x0000,0xf659,0xf657,0xc546,
-0xf764,0xc5af,0xf765,0xf848,0xf847,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8af,0xb664,0x0000,0x0000,0xb940,
-0x0000,0x0000,0x0000,0xbbb6,0x0000,0x0000,0xbfec,0x0000,
-0xbfeb,0x0000,0x0000,0x0000,0x0000,0xc3e3,0xc47c,0xc547,
-0xa8b0,0xb064,0xb941,0x0000,0xf35b,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcba6,
-0x0000,0x0000,0xa8b1,0x0000,0xa8b4,0xa8b3,0xa8b2,0x0000,
-0x0000,0xcba5,0x0000,0xcdcd,0x0000,0xcdcf,0xaaef,0x0000,
-0x0000,0xaaf1,0xcdcc,0xcdce,0xaaf0,0xcdd1,0xcdd0,0xcdd2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0b6,0xd0b4,0xad7c,0xd0b3,0xada3,0xad7e,0xad7b,0x0000,
-0xada4,0x0000,0xad7d,0xada2,0x0000,0xada1,0xd0b5,0x0000,
-0xad7a,0x0000,0x0000,0x0000,0xb06a,0xd3eb,0xd3f1,0xb067,
-0xb06e,0x0000,0xb069,0xd3ee,0xd3f0,0xb06c,0xd3ea,0xd3ed,
-0xb068,0xb065,0xd3ec,0xb06b,0xd3ef,0xb06d,0xb066,0x0000,
-0x0000,0x0000,0x0000,0xd7e3,0xd7e6,0xb370,0x0000,0xb37a,
-0xb376,0xd7e4,0x0000,0x0000,0xb37e,0xb377,0xb37c,0xb372,
-0x0000,0xb36f,0xb371,0xb37d,0xd7e5,0xb375,0xb378,0xb374,
-0xb379,0xd7e7,0xb37b,0xb373,0xd7e2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdc4d,0xb665,0xdc4f,
-0x0000,0xb667,0xb669,0x0000,0xdc4e,0xb666,0xb66a,0x0000,
-0xb668,0x0000,0x0000,0x0000,0xb947,0xe0a3,0xb94f,0xe07e,
-0x0000,0xb950,0xb945,0x0000,0xe0a1,0x0000,0x0000,0xb94a,
-0x0000,0xe0a2,0xb943,0xb942,0x0000,0xb94d,0xb94c,0xb94b,
-0xb949,0xb94e,0xe07d,0xb944,0xb946,0xb948,0x0000,0x0000,
-0xbbb8,0xbbbb,0x0000,0xbbbf,0xbbb9,0xbbbe,0xbbbc,0x0000,
-0xbbb7,0x0000,0xbbbd,0xbbba,0x0000,0x0000,0x0000,0xe852,
-0xbe43,0xbe41,0x0000,0xe853,0x0000,0xbe44,0xbe42,0xe851,
-0xe850,0x0000,0xbff0,0xe84f,0xbfee,0xbfed,0xebd0,0xbe45,
-0xbfef,0xebd1,0xbff2,0xebd2,0xbff1,0xc1d8,0xeec3,0xc1d7,
-0xc1dc,0xc1da,0xc1db,0xc2e3,0xc1d9,0xeec2,0xebd3,0xc2e2,
-0xc2e4,0x0000,0xc3e4,0xc3e5,0x0000,0xf4e0,0x0000,0xc5de,
-0xc5dd,0xa8b6,0x0000,0x0000,0xca55,0xb06f,0x0000,0xca52,
-0xca53,0xca51,0x0000,0xca54,0x0000,0x0000,0xcbaa,0xcba7,
-0xcbac,0xcba8,0xa8b7,0xa8ba,0x0000,0xcba9,0xa8b9,0xcbab,
-0x0000,0x0000,0xa8b8,0x0000,0x0000,0x0000,0x0000,0xcdd5,
-0xcdd7,0xaaf4,0xcdd3,0xcdd6,0xcdd4,0xaaf2,0xaaf5,0x0000,
-0xaaf3,0x0000,0x0000,0x0000,0x0000,0xd0b8,0xd0bc,0xd0b9,
-0x0000,0xada7,0x0000,0xada8,0x0000,0xd0bb,0x0000,0xd0bd,
-0xd0bf,0x0000,0xada5,0xd0be,0x0000,0x0000,0xada6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7ee,0xd0ba,0xd3f2,0xd3fb,
-0xd3f9,0xd3f4,0xd3f5,0xd3fa,0xd3fc,0xb071,0x0000,0xd3f7,
-0xd3f3,0xb070,0xb072,0xd3f6,0xd3fd,0xd3f8,0x0000,0x0000,
-0xb3a1,0xd7f1,0xd7e9,0xd7ef,0xd7f0,0xb3a2,0x0000,0xd7e8,
-0xd7ea,0xd0b7,0xd7ec,0xd7ed,0xd7eb,0xb66c,0x0000,0x0000,
-0x0000,0xdc56,0xebd4,0xdc57,0xdc54,0xb3a3,0xb66e,0xdc53,
-0xdc59,0xdc58,0xb66b,0xdc5c,0xdc52,0xdc5b,0xdc50,0xdc5a,
-0xdc55,0xb66d,0x0000,0xe0aa,0x0000,0xe0a5,0xe0ab,0xe0a6,
-0xe0a4,0xe0a7,0xb951,0x0000,0xe0a9,0x0000,0xe0a8,0xb952,
-0xbbc1,0xbbc0,0xe46e,0xe471,0xe469,0xe46d,0xbbc2,0xe46c,
-0xe46a,0xe470,0xe46b,0xe468,0xe46f,0x0000,0xe859,0xbe48,
-0xf14a,0xe856,0xe857,0xe855,0xdc51,0xbe47,0xe85a,0xe854,
-0xbe46,0xbe49,0xe858,0xebd5,0xbff3,0xebd6,0xebd7,0x0000,
-0xeec4,0xc1dd,0xf14b,0xf14c,0x0000,0x0000,0xf14d,0xf35d,
-0xf35c,0xf4e2,0x0000,0xf4e1,0xf65b,0xf65c,0xf65a,0xf766,
-0xc5b0,0xa8bb,0xadaa,0xada9,0xb075,0xb074,0xd440,0xd441,
-0xd3fe,0x0000,0xb073,0xd7f5,0x0000,0xd7f6,0xd7f2,0xb3a4,
-0xd7f3,0x0000,0xd7f4,0x0000,0x0000,0x0000,0x0000,0xdc5f,
-0xdc61,0xdc5d,0xdc60,0xb66f,0xdc5e,0xb670,0x0000,0x0000,
-0xdd73,0xb955,0xb954,0x0000,0xb953,0x0000,0xe0ac,0xe0ad,
-0x0000,0x0000,0xe473,0xe475,0xbbc6,0xbbc3,0x0000,0xbbc5,
-0xbbc4,0xe474,0xe472,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe861,0xe85e,0xe85f,0xbe4d,0xe860,0xe85b,0xe85c,0xbe4a,
-0x0000,0xbe4b,0xe85d,0xbe4c,0x0000,0xebdb,0x0000,0xebdc,
-0xebd9,0xebda,0xbff4,0xebd8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeec8,0xeec5,0xeec7,0xc1e0,0xeecb,0xc1df,0xeec9,
-0xeecc,0xeeca,0xeec6,0xc1de,0x0000,0xf14f,0x0000,0xf150,
-0xf14e,0x0000,0xf152,0xc2e5,0xc2e6,0xf35f,0xc3e7,0xf151,
-0xf35e,0xc3e6,0xf4e5,0xf4e6,0xc4bf,0xf4e4,0x0000,0xf4e3,
-0x0000,0xf65d,0xc548,0x0000,0xf849,0xf8c8,0xf8c7,0x0000,
-0xc643,0xc65d,0xf8c9,0xf971,0x0000,0xc66f,0xa8bc,0xaaf6,
-0x0000,0xb956,0x0000,0xc4c0,0xa8bd,0xadab,0xb3a5,0xb671,
-0xc2e7,0xaaf7,0x0000,0xd0c1,0xd0c0,0xd442,0x0000,0xb078,
-0xb076,0xb07a,0xd444,0x0000,0xb079,0xb077,0x0000,0x0000,
-0x0000,0x0000,0xd443,0xb3a8,0xd7fc,0x0000,0xb3a7,0xb3a9,
-0xd842,0xb3ab,0xd7fe,0xd840,0xd7f7,0xb3aa,0xd843,0x0000,
-0x0000,0xd7f9,0x0000,0xd7fa,0xd7f8,0xb3a6,0x0000,0xd841,
-0xd7fb,0xd7fd,0x0000,0x0000,0x0000,0xdc6d,0x0000,0xdc6c,
-0xdc6a,0xdc62,0xdc71,0xdc65,0xdc6f,0xdc76,0xdc6e,0xb679,
-0x0000,0xb675,0xdc63,0x0000,0xdc69,0xb677,0x0000,0xdc68,
-0xb678,0xb67a,0xdc6b,0x0000,0xb672,0xb673,0xdc77,0xdc75,
-0x0000,0xdc74,0xdc66,0x0000,0xdc72,0x0000,0xb676,0x0000,
-0x0000,0x0000,0x0000,0xb674,0xdc73,0xdc64,0xdc67,0xdc70,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ba,0xe0b7,0x0000,
-0xe0b0,0xe0c3,0xe0cc,0xe0b3,0xb961,0x0000,0xe0c0,0xb957,
-0xb959,0xb965,0xe0b1,0x0000,0x0000,0xb95a,0xb95c,0xb966,
-0xb95b,0x0000,0x0000,0x0000,0x0000,0xb964,0xe0b9,0x0000,
-0xe0ae,0xb962,0xe0b8,0xb95e,0xe0ca,0xb963,0xe0c8,0xe0bc,
-0xe0c6,0xb960,0xe0af,0xe0c9,0xe0c4,0x0000,0xe0cb,0xb958,
-0x0000,0x0000,0xb967,0xb95d,0x0000,0x0000,0xe0b5,0x0000,
-0xe0bd,0xe0c1,0x0000,0xe0c5,0xb95f,0xe0b4,0xe0b2,0xe0be,
-0x0000,0x0000,0x0000,0x0000,0xe0bb,0xe0ba,0x0000,0xe0bf,
-0xe0c2,0x0000,0xe0c7,0x0000,0x0000,0x0000,0xe478,0x0000,
-0xbbc7,0xe4a4,0xe47a,0xbbcc,0xbbd0,0xe4ad,0xe4b5,0xe4a6,
-0xbbc8,0x0000,0xe4aa,0xe0b6,0x0000,0xbbc9,0xe4b1,0xe4b6,
-0xe4ae,0x0000,0xe4b0,0xe4b9,0xe4b2,0xe47e,0xe4a9,0x0000,
-0x0000,0xbbd1,0x0000,0xbbcd,0xe47c,0xe4ab,0xbbcb,0xe4a5,
-0xbbca,0xe4b3,0xe4a2,0xe479,0xbbce,0xe4b8,0x0000,0x0000,
-0xe47b,0xe4af,0xe4ac,0xe4a7,0xe477,0xe476,0xe4a1,0xe4b4,
-0xbbcf,0xe4b7,0xe47d,0xe4a3,0xbe52,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbe5a,0xbe55,0xe8a4,0xe8a1,0xe867,0xbe50,
-0x0000,0xf9d7,0x0000,0xbe4f,0xbe56,0x0000,0x0000,0x0000,
-0xe865,0xbe54,0xe871,0xe863,0xe864,0xbe4e,0xe8a3,0xbe58,
-0xe874,0xe879,0xe873,0xebee,0xe86f,0xe877,0xe875,0xe868,
-0xe862,0xe87d,0xbe57,0xe87e,0x0000,0xe878,0x0000,0xe86d,
-0xe86b,0xe866,0x0000,0x0000,0x0000,0xe86e,0xe87b,0xe86a,
-0xe87a,0xe8a2,0x0000,0x0000,0xbe53,0x0000,0xe876,0xe87c,
-0xe872,0xe86c,0xbe51,0x0000,0x0000,0x0000,0xe4a8,0xe870,
-0xbe59,0xe869,0x0000,0x0000,0x0000,0x0000,0x0000,0xebf4,
-0xbff7,0xebf3,0xebf0,0xec44,0xbffb,0x0000,0xec41,0xebf8,
-0xec43,0xebe9,0xebf6,0x0000,0xbffd,0x0000,0xebe1,0x0000,
-0xebdf,0xec42,0x0000,0xec40,0xebfe,0xebed,0xebec,0xebe2,
-0xc040,0x0000,0xebe8,0xebf2,0xebfd,0xc043,0xec45,0x0000,
-0xc1e8,0xc045,0xbffe,0xebe6,0x0000,0xebef,0xebde,0xebe0,
-0xbff5,0xc042,0xbffa,0xebe7,0xebf7,0xebf1,0xc041,0xebdd,
-0xc1e3,0xebf9,0xebfc,0xbffc,0x0000,0xebeb,0xc044,0xbff9,
-0x0000,0x0000,0x0000,0xbff8,0xebf5,0xebfb,0xbff6,0x0000,
-0xebe4,0xebfa,0x0000,0x0000,0xebe5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebea,0xeed2,
-0x0000,0xeed7,0xc1e5,0xc1e7,0xeedd,0xc1e1,0xeeec,0xeee3,
-0xeed8,0xeed9,0xeee2,0x0000,0xc1ee,0xeee1,0xeed1,0xeee0,
-0xeed4,0xeeed,0xc1ed,0xc1eb,0xeed5,0x0000,0xeee8,0x0000,
-0xeeda,0xeee7,0x0000,0xeee9,0xeed0,0xc1e6,0x0000,0xeeea,
-0x0000,0x0000,0xeede,0x0000,0xc1ea,0xeedb,0x0000,0x0000,
-0xc1ec,0xeee4,0x0000,0x0000,0x0000,0xc1e4,0xeed6,0xeee5,
-0x0000,0xeedf,0xebe3,0xeee6,0xeed3,0x0000,0xc1e9,0x0000,
-0xeeeb,0x0000,0xc1e2,0xeece,0x0000,0x0000,0x0000,0x0000,
-0xf160,0xf159,0xc2e9,0x0000,0xf154,0xf163,0xf15b,0xeedc,
-0x0000,0xf165,0xf155,0x0000,0xc2e8,0xf15f,0xc2ea,0xc2f2,
-0xc2f0,0xf161,0xc2f1,0xf157,0x0000,0xf158,0xf15d,0xf162,
-0x0000,0xeecd,0xc2eb,0xf16a,0xf167,0xf16b,0xf15e,0xf15a,
-0xf168,0xf36a,0xf15c,0x0000,0xc2ee,0x0000,0xc2ed,0xeecf,
-0xc2ef,0xf164,0xf166,0xc2ec,0xf169,0xf153,0x0000,0xf156,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf373,0x0000,0xf363,0xc3eb,0xf371,0x0000,0x0000,0xf361,
-0xc3ec,0x0000,0xf36c,0x0000,0xf368,0xc3f1,0xf372,0xf362,
-0xf365,0xc3e9,0xf374,0x0000,0xf36d,0xf370,0xc3ef,0xc3f4,
-0xc3f2,0xf369,0xf364,0x0000,0xc3ed,0xc3ee,0xf360,0xc3ea,
-0x0000,0xc3e8,0xc3f0,0xf36f,0xc3f3,0x0000,0xf36b,0xf375,
-0xc3f5,0x0000,0x0000,0x0000,0xf367,0x0000,0xf36e,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f3,0xf542,0xf4f5,
-0xf4fc,0xf366,0xf4fa,0xf4e9,0xf540,0xc4c3,0xf4ed,0xf4fe,
-0xf4f4,0x0000,0x0000,0xc4c2,0x0000,0x0000,0xf544,0xf4f6,
-0x0000,0xf4fb,0xf4fd,0xf4e7,0xf541,0xf4f2,0xf4f7,0xf4eb,
-0xf4ef,0xf543,0xf4f9,0xf4e8,0xf4ec,0xf4ee,0xf4f8,0x0000,
-0xc4c1,0xf4f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf4ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf4f0,0xf661,0xf666,0xc54f,0xf668,0x0000,0xc549,0x0000,
-0xf664,0xf66a,0xc54e,0xc54a,0x0000,0xc54b,0xf660,0xf667,
-0xc54d,0xf665,0xc54c,0xf65f,0xf663,0xf662,0x0000,0xf65e,
-0xf669,0x0000,0x0000,0x0000,0xc5b1,0xf76d,0xf770,0xf76c,
-0xf76e,0xf76f,0xf769,0xf76a,0xf767,0x0000,0x0000,0xf76b,
-0xf768,0xc5b2,0xc5b3,0x0000,0x0000,0xf84b,0x0000,0xf84d,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf84c,0xf84e,0x0000,
-0xc5e0,0x0000,0xf84a,0xc5df,0xc5e1,0x0000,0x0000,0x0000,
-0xf8cb,0xf8cc,0xc644,0xf8ca,0x0000,0xf953,0xf952,0xf954,
-0xc65f,0xf955,0xc65e,0xf956,0xf972,0xf975,0xf974,0xc668,
-0xf973,0x0000,0x0000,0x0000,0xc672,0xc670,0xc671,0xc677,
-0xf9c0,0xf9c1,0xf9bf,0xf9c9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xaaf8,
-0x0000,0x0000,0xd844,0xdc78,0xe8a5,0xf376,0x0000,0x0000,
-0xaaf9,0x0000,0xadac,0xb07b,0x0000,0x0000,0xd845,0x0000,
-0xd846,0xb3ac,0x0000,0xb67d,0xdc7a,0xdc79,0xb6a3,0xb67c,
-0xdc7b,0xb67e,0xb6a2,0xb6a1,0xb67b,0x0000,0x0000,0x0000,
-0xb968,0x0000,0x0000,0xe0d0,0xe0ce,0x0000,0xe0cf,0xe0cd,
-0x0000,0xbbd2,0x0000,0xbbd5,0xbbd7,0xbbd6,0x0000,0x0000,
-0xbbd3,0xbbd4,0x0000,0xe8a7,0xe8a6,0xbe5b,0xe8a8,0x0000,
-0xe8a9,0xbe5c,0x0000,0x0000,0x0000,0xec4d,0xec4b,0xeef3,
-0x0000,0xec49,0xec4a,0xc046,0xec46,0xec4e,0xec48,0xec4c,
-0xeeef,0x0000,0x0000,0xeef1,0x0000,0xeef2,0xc1f3,0xeeee,
-0xc1f2,0xeef0,0xc1ef,0xc1f0,0xc1f1,0xec47,0x0000,0x0000,
-0xc2f5,0xf16e,0xf16c,0xf16d,0xc2f3,0xc2f6,0xc2f4,0x0000,
-0x0000,0x0000,0xf377,0xf378,0xc3f6,0x0000,0xf545,0xf547,
-0xf546,0xc4c4,0xc550,0xf66d,0xf66c,0xf66b,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xaafa,0x0000,0xc9aa,0x0000,
-0xca58,0xa6e9,0xca56,0xca59,0xca57,0x0000,0x0000,0x0000,
-0xcbae,0x0000,0xa8c1,0x0000,0xa8c2,0xcbb0,0xa8bf,0xcbaf,
-0xcbad,0xa8c0,0xa8be,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdd8,0xcddb,0xaafd,0xcdda,0xcdd9,0x0000,0xaafc,
-0xaafb,0x0000,0xab40,0xcddc,0xaafe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0c6,0xadae,0xadaf,0xadb0,0xd0c7,0xd0c3,
-0xadad,0xd0c4,0x0000,0xd0c5,0xd0c2,0x0000,0x0000,0x0000,
-0xb0a4,0x0000,0x0000,0xb0a1,0xd445,0xb0a2,0xb0a5,0xd446,
-0x0000,0xb07e,0xb07c,0xb07d,0xb0a3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb3ad,0xd849,0xb3b5,0xd848,0x0000,0xd84b,
-0xb3b1,0xd84a,0xb6ab,0xb3af,0xb3b2,0xb3ae,0xb3b3,0xb3b4,
-0xb3b0,0x0000,0x0000,0x0000,0xd847,0xb6a7,0xdc7d,0x0000,
-0xdca3,0x0000,0x0000,0xdca2,0xb6ac,0xb6a8,0xb6a9,0xdc7c,
-0xdc7e,0xdca1,0xb6a4,0xb6a6,0x0000,0xb6aa,0xb6a5,0x0000,
-0x0000,0xe0d3,0xe0d1,0xe0d2,0xb96a,0xb96b,0x0000,0xe0d4,
-0xb969,0xbbd8,0x0000,0xbbda,0xbbd9,0x0000,0xe4bb,0x0000,
-0x0000,0xe4bc,0xe8ab,0x0000,0xe8aa,0x0000,0x0000,0xc047,
-0xc048,0xec4f,0xc049,0x0000,0xeef6,0x0000,0xeef4,0x0000,
-0xeef5,0xc1f4,0x0000,0xf16f,0xc3f7,0x0000,0x0000,0x0000,
-0xc1f5,0xab41,0x0000,0xb0a6,0xd447,0x0000,0x0000,0xd84c,
-0xb3b6,0xb6ad,0xdca4,0xdca6,0xb6af,0xb6ae,0xb6b0,0xb6b1,
-0xdca5,0xb96e,0xb96f,0xb96d,0xbbdb,0xb96c,0xe0d5,0x0000,
-0x0000,0x0000,0xbbdc,0xe8ac,0xec50,0xc04a,0xc1f6,0xf170,
-0xf174,0xc2f9,0xf171,0xc2fa,0xc2f8,0xf175,0xc2fb,0xf173,
-0x0000,0xf379,0xc2f7,0xc3f8,0x0000,0xf8cd,0x0000,0x0000,
-0xab42,0xb3b8,0xb3b7,0x0000,0x0000,0x0000,0x0000,0xb6b2,
-0xdca8,0xdca7,0xb6b3,0x0000,0x0000,0xe0d9,0xb973,0xb970,
-0xe0d8,0xb972,0xe0d6,0xb971,0x0000,0xe0d7,0x0000,0xe4bd,
-0xbbdd,0x0000,0xe8af,0x0000,0xbe5d,0xe8ad,0xbe5e,0xbe5f,
-0xe8ae,0xbe60,0x0000,0xec51,0x0000,0xc04e,0xc04b,0xc050,
-0xec53,0xc04c,0xec52,0xc04f,0x0000,0x0000,0xc04d,0x0000,
-0xeef9,0xeefb,0x0000,0x0000,0xc1f7,0xeefa,0xc1f8,0xeef8,
-0xeef7,0x0000,0xf177,0xf176,0xc2fc,0xf178,0xf37e,0xc3fa,
-0xf37d,0xf37a,0xc3f9,0xf37b,0xf37c,0x0000,0xf548,0xf549,
-0xc4c5,0x0000,0xc553,0x0000,0x0000,0xf66e,0x0000,0x0000,
-0xc551,0xc552,0xf66f,0x0000,0x0000,0xc5b4,0xc5b5,0xf771,
-0x0000,0x0000,0xc645,0xf8cf,0xc647,0x0000,0xf8ce,0xf8d0,
-0xc646,0xf957,0x0000,0xf9ad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xab43,0x0000,0x0000,0x0000,0xb974,0x0000,
-0xe4be,0x0000,0xe8b0,0xc051,0xc052,0x0000,0xab44,0x0000,
-0xbe61,0xc3fb,0xadb1,0x0000,0x0000,0x0000,0xc053,0x0000,
-0xc5e2,0xadb2,0xd84d,0x0000,0xdca9,0x0000,0xdcab,0x0000,
-0xdcaa,0x0000,0xe0dd,0xe0da,0xb975,0x0000,0xb976,0xe0db,
-0xe0dc,0x0000,0xe4c0,0xe4c5,0xbbde,0xe4bf,0xe4c1,0xe4c8,
-0xe4c3,0xe4c7,0xe4c4,0xe4c2,0xe4c6,0xbbdf,0x0000,0x0000,
-0xe8b3,0x0000,0xe8b1,0xbe63,0x0000,0xbe62,0xe8b2,0xbe64,
-0x0000,0x0000,0x0000,0x0000,0xec56,0x0000,0x0000,0xec55,
-0xc054,0xec54,0xeefc,0x0000,0xeefe,0xef41,0xef40,0x0000,
-0xc1f9,0xeefd,0xf1a1,0xc2fd,0xf17d,0xf1a2,0xc2fe,0x0000,
-0xf17b,0x0000,0xf17e,0xf17c,0xf179,0xc340,0xf17a,0x0000,
-0x0000,0x0000,0x0000,0xf3a1,0x0000,0x0000,0xf3a3,0xf3a2,
-0x0000,0xf54a,0x0000,0xf54b,0x0000,0x0000,0x0000,0xf670,
-0x0000,0xc5b7,0x0000,0xc5b6,0xf84f,0xf850,0xc648,0xf8d1,
-0x0000,0xc669,0x0000,0xadb3,0xb6b4,0xe4ca,0xe4c9,0xe8b5,
-0xe8b4,0x0000,0x0000,0xc1fa,0xef43,0xef42,0xf1a5,0xf1a3,
-0xf1a6,0xf1a4,0x0000,0x0000,0xc3fc,0xf3a4,0xf3a5,0xf3a6,
-0x0000,0xf671,0x0000,0xf772,0x0000,0xf8d2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xadb4,0x0000,0x0000,
-0xec57,0xef44,0x0000,0xadb5,0x0000,0x0000,0xbbe0,0x0000,
-0xec58,0xc341,0xf1a7,0xc3fd,0x0000,0xf54c,0xf54d,0xc554,
-0xf851,0xadb6,0xb3bb,0xb3bc,0xd84e,0xb6b5,0xb6b6,0xdcac,
-0xb6b7,0x0000,0xb97a,0x0000,0xb97c,0xe0df,0xe0e0,0xe0de,
-0xb977,0xb978,0xb97b,0xb979,0x0000,0x0000,0xe4cb,0xbbe1,
-0xbbe2,0x0000,0x0000,0xe8bc,0xbe67,0xe8b7,0xe8b6,0x0000,
-0xe8bb,0xbe65,0x0000,0x0000,0xc05b,0x0000,0xe8b8,0xe8bd,
-0xe8ba,0xe8b9,0x0000,0xbe66,0x0000,0xc059,0x0000,0xec5a,
-0xc055,0x0000,0xec5b,0x0000,0x0000,0xec59,0x0000,0xc058,
-0xc056,0xc05a,0x0000,0xc057,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xef45,0x0000,0xef4a,0xef46,0xef49,0xc1fb,0x0000,
-0xedd4,0xef48,0xef47,0x0000,0xc344,0xc342,0xc345,0xc343,
-0xf1a8,0xf1a9,0xf1aa,0xc346,0x0000,0x0000,0x0000,0xf3aa,
-0xc440,0xf3a8,0x0000,0xc441,0xf3a7,0xf3a9,0xc3fe,0xf551,
-0xf54e,0x0000,0xf54f,0xf550,0xf672,0xc556,0x0000,0xc555,
-0x0000,0xf774,0xf773,0xc5b8,0x0000,0x0000,0x0000,0xc5e3,
-0xc649,0xc660,0xf958,0xf9ae,0xf9af,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xadb7,0xdcad,0x0000,0x0000,0xe0e1,0xe4cc,0xe4cd,0xbbe3,
-0x0000,0xbbe4,0xe8be,0xbe68,0x0000,0x0000,0xc1fc,0x0000,
-0xf1ab,0x0000,0xc347,0xf3ad,0xc442,0xf3ac,0xf3ae,0xf3ab,
-0xf675,0xf552,0xf553,0x0000,0xc4c6,0x0000,0xf674,0x0000,
-0x0000,0xf673,0x0000,0xf775,0xf9b0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xadb8,0x0000,0x0000,0x0000,0xadb9,
-0x0000,0x0000,0xb0a7,0xd448,0x0000,0xd84f,0x0000,0xb6b8,
-0x0000,0xb6bb,0xb6b9,0xdcae,0x0000,0xb6bd,0x0000,0xb6ba,
-0x0000,0x0000,0xb6bc,0x0000,0xb97e,0x0000,0xe0e2,0x0000,
-0x0000,0xe0e3,0xe8c0,0x0000,0xb97d,0xb9a1,0xb9a2,0x0000,
-0xe4cf,0x0000,0xe4ce,0xbbe5,0x0000,0xbbe6,0x0000,0xe4d0,
-0xe8bf,0xbbe8,0xbe69,0x0000,0xbbe7,0x0000,0x0000,0x0000,
-0xc05c,0xe8c1,0xbe6b,0xbe6a,0xe8c2,0xe8c5,0xe8c3,0xe8c4,
-0xbe6c,0x0000,0xc061,0xc05f,0x0000,0x0000,0xc05e,0xec5d,
-0x0000,0xc060,0x0000,0x0000,0xec5c,0xef4b,0x0000,0xec5e,
-0xc05d,0xec5f,0xef4e,0xef4c,0xef4d,0xef52,0xc34b,0xef51,
-0xef54,0xef53,0xef50,0xef4f,0x0000,0xc1fd,0x0000,0x0000,
-0x0000,0x0000,0xf1ae,0x0000,0xf1ad,0xc34a,0xc348,0xc349,
-0x0000,0xf1ac,0x0000,0xf3b1,0x0000,0xc443,0x0000,0xf3b0,
-0xf3af,0xc444,0x0000,0xf558,0xf557,0x0000,0xf555,0x0000,
-0xf554,0xc4c8,0xc4c7,0xf559,0xf776,0xc5b9,0xf677,0xc557,
-0xf676,0xf556,0x0000,0xf777,0xc5e4,0x0000,0xc661,0xf959,
-0x0000,0xf9b1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xadba,0xd850,
-0xef55,0xadbb,0x0000,0x0000,0xe4d2,0xe4d1,0xec60,0x0000,
-0x0000,0xef57,0x0000,0xef56,0x0000,0xc34c,0xf3b2,0xf3b3,
-0xc4c9,0x0000,0x0000,0xf9b2,0xb0a8,0xb6bf,0xb6be,0xe0e4,
-0xe0e6,0xb9a4,0xe0e5,0xb9a3,0xb9a5,0xe0e7,0x0000,0x0000,
-0x0000,0xe4d4,0xe4d6,0xe4d5,0x0000,0xe4d8,0x0000,0x0000,
-0x0000,0xbbe9,0xe4d7,0xe4d3,0x0000,0x0000,0x0000,0xe4d9,
-0x0000,0xe8cc,0x0000,0xe8cf,0xe8d1,0xe8c7,0xe8cb,0xe8c8,
-0xbe6e,0xbe71,0xbe73,0xe8c9,0xe8ca,0xbe72,0xe8cd,0xe8d0,
-0xe8ce,0xbe74,0x0000,0xbe70,0xe8c6,0xbe6d,0x0000,0xbe6f,
-0x0000,0x0000,0xc063,0xec66,0xec64,0xec63,0x0000,0xec69,
-0x0000,0xec68,0xec67,0x0000,0xec62,0xc062,0xec61,0x0000,
-0xec65,0xc064,0x0000,0x0000,0xef5a,0x0000,0xef5e,0xef5b,
-0xef5d,0xef5c,0xef59,0xef5f,0xef62,0xef60,0xef61,0xc240,
-/* 0x9a00 */
-0x0000,0xc1fe,0xef58,0xef63,0xf1b3,0xf1b6,0xf1b8,0xf1b7,
-0x0000,0xf1b1,0xf1b5,0xf1b0,0x0000,0xf1b2,0xc34d,0xf1af,
-0x0000,0xf1b4,0x0000,0x0000,0xf3c0,0xf3b5,0xc445,0x0000,
-0x0000,0xc446,0xf3b4,0xf3b9,0xf3bf,0xf3b7,0xf3be,0x0000,
-0xf3bb,0x0000,0xf3ba,0xf3bd,0xf3b8,0xf3b6,0x0000,0xf3bc,
-0x0000,0xf560,0xf55e,0xc4ca,0xf55d,0xf563,0xf561,0x0000,
-0xc4cb,0xf55c,0xf55a,0x0000,0xf55b,0xc4cd,0xf55f,0xc4cc,
-0xf562,0xf678,0xf67e,0x0000,0x0000,0xf679,0xc55b,0xf6a1,
-0xc55a,0xf67d,0xf67c,0xc559,0xf67b,0xc558,0xf67a,0x0000,
-0xf77d,0xf7a1,0xf77e,0x0000,0xf77b,0xc5bb,0xf778,0xf77c,
-0xf7a3,0x0000,0xf7a2,0xf779,0xf77a,0xc5ba,0xf852,0xc5e7,
-0x0000,0xf853,0xc5e5,0xc5e6,0x0000,0x0000,0xf8d3,0xc64a,
-0xf976,0x0000,0xc66a,0x0000,0xf9b3,0xc66b,0xf9b4,0xf9b5,
-0xf9c3,0xf9c2,0xc67a,0xf9cd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb0a9,0x0000,0x0000,0xe0e9,0x0000,0xe0e8,0x0000,0xbbea,
-0xbbeb,0xe4da,0x0000,0xe8d2,0xec6c,0x0000,0x0000,0xbe75,
-0xc065,0xec6a,0x0000,0xec6d,0xc066,0x0000,0xef64,0xec6b,
-0xf1b9,0xc34e,0xf3c1,0x0000,0x0000,0x0000,0xf566,0xf564,
-0x0000,0x0000,0xf565,0x0000,0x0000,0xf6a2,0x0000,0xc55c,
-0xf7a4,0xc5ea,0xc5bc,0xc5e8,0xc5e9,0xf8d4,0xc662,0x0000,
-0xb0aa,0x0000,0x0000,0x0000,0xf1ba,0x0000,0x0000,0xd449,
-0x0000,0xb9a6,0x0000,0xe4db,0x0000,0x0000,0xbbec,0xe4dc,
-0x0000,0x0000,0x0000,0xe8d4,0xe8d3,0xc068,0xbe76,0xbe77,
-0x0000,0xe8d7,0xe8d6,0xe8d5,0x0000,0x0000,0xec6e,0xec71,
-0x0000,0xec70,0xec6f,0xc067,0xef68,0xef66,0xef65,0x0000,
-/* 0x9b00 */
-0x0000,0xef67,0x0000,0xc34f,0xf1bc,0xf1bd,0xc350,0x0000,
-0xf1bb,0x0000,0xf3c3,0xf3c2,0xf3c5,0xc447,0xf3c4,0x0000,
-0xf567,0xf569,0xf568,0x0000,0x0000,0xf6a3,0xf6a6,0xf6a4,
-0xf6a5,0xf7a5,0xc5bd,0x0000,0x0000,0x0000,0xf854,0xf855,
-0xf856,0x0000,0xc64b,0xc663,0xf9b6,0xb0ab,0x0000,0xbe78,
-0xc069,0xf1be,0x0000,0xf7a6,0x0000,0x0000,0xf9c4,0xd44a,
-0x0000,0xc67b,0xb0ac,0xec72,0x0000,0xf1bf,0x0000,0xf3c6,
-0x0000,0x0000,0xf6a7,0xf7a7,0xb0ad,0x0000,0xe4dd,0xe4de,
-0x0000,0xbbed,0xbbee,0xe8d9,0xbe7a,0xbe79,0xe8d8,0x0000,
-0xef69,0x0000,0xf1c0,0xf1c2,0xf1c1,0xc353,0xc352,0xc351,
-0x0000,0xc55e,0xf6a8,0x0000,0xc55d,0xf7a9,0xf7a8,0x0000,
-0xc64c,0xf8d5,0xb3bd,0xe0ea,0x0000,0x0000,0x0000,0xe4e1,
-0xe4df,0xe4e0,0x0000,0x0000,0xe8e2,0x0000,0xe8dd,0xe8da,
-0xe8e1,0x0000,0x0000,0x0000,0xe8e3,0x0000,0x0000,0xbe7c,
-0xe8e0,0xe8dc,0x0000,0x0000,0xe8db,0xe8df,0xe8de,0xbe7b,
-0x0000,0x0000,0xec7d,0xec78,0xec76,0xeca1,0xec77,0x0000,
-0xec73,0x0000,0xec79,0x0000,0x0000,0xec74,0xef72,0xec75,
-0xeca2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xec7c,0xc06a,0xec7b,0xec7a,0x0000,0xec7e,0x0000,0x0000,
-0x0000,0x0000,0xef6a,0xef6d,0x0000,0x0000,0xef6c,0x0000,
-0xef74,0xef6f,0xef73,0x0000,0xef71,0xef70,0xef6e,0x0000,
-0xef6b,0x0000,0xc243,0xc242,0x0000,0xc244,0xc241,0xef75,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1c8,0xf1cb,0x0000,
-0xf1c9,0xf1cd,0x0000,0x0000,0x0000,0xf1ce,0x0000,0xf1c6,
-0xc358,0xf1c7,0x0000,0xf1c5,0xf1cc,0x0000,0xf1c4,0xf1c3,
-0xc357,0xc355,0xc354,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf1ca,0xf3cf,0xf3d5,0xc44a,0xf3d0,
-0x0000,0xf3d3,0xf3d7,0xc44b,0xf3d2,0x0000,0xf3ca,0x0000,
-0xf3c9,0xf3d6,0xf3cd,0x0000,0xf3cb,0xf3d4,0xf3cc,0xc449,
-0xc448,0x0000,0xf3c7,0xf3c8,0xf3d1,0x0000,0x0000,0x0000,
-0xf3ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf56c,
-0xf56f,0x0000,0x0000,0x0000,0x0000,0xc356,0x0000,0x0000,
-/* 0x9c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf56d,0xf573,0xf571,
-0xf56b,0xf576,0x0000,0xf56a,0x0000,0xc4cf,0xf572,0x0000,
-0x0000,0x0000,0xf56e,0xc4ce,0xf575,0x0000,0x0000,0xf574,
-0x0000,0x0000,0x0000,0x0000,0xf6ab,0xf6aa,0x0000,0x0000,
-0x0000,0xf6b1,0x0000,0xf6ad,0xf6b0,0xc560,0x0000,0x0000,
-0xf6ae,0xf6af,0x0000,0xf6a9,0xf6ac,0xc55f,0x0000,0x0000,
-0x0000,0xc5bf,0xf7b4,0xf7af,0xf7b3,0x0000,0xf7b6,0xf7b2,
-0x0000,0xf7ae,0x0000,0xc5c1,0xf7b1,0xf7b5,0xc5c0,0xf7ac,
-0xf570,0xf7b0,0x0000,0x0000,0xf7ad,0x0000,0xf7aa,0x0000,
-0xf7ab,0xc5be,0xf85a,0xf85c,0xf85f,0xf85b,0xf860,0x0000,
-0xf859,0x0000,0xf857,0x0000,0xc5eb,0xf85d,0xc5ed,0xc5ec,
-0xf858,0xf85e,0x0000,0x0000,0x0000,0x0000,0xf8da,0xc64d,
-0xf8db,0x0000,0xf8d9,0xf8d6,0x0000,0x0000,0xf8d8,0xf8d7,
-0xf95a,0x0000,0x0000,0x0000,0x0000,0xf95c,0xf95b,0x0000,
-0x0000,0xf979,0x0000,0xf978,0xf977,0xf97a,0x0000,0xc673,
-0xc674,0xf9ca,0xf9ce,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xb3be,0xdcaf,0xe0ed,
-0x0000,0xb9a7,0xe0eb,0x0000,0x0000,0xe0ec,0x0000,0x0000,
-0x0000,0xe4e2,0xe4e3,0xbbf1,0xbbef,0xe4e4,0xbbf0,0xe8e8,
-0x0000,0xe8eb,0xe8e5,0xe8ec,0xe8e4,0xe8e6,0x0000,0xe8e7,
-0xe8ea,0x0000,0x0000,0xbea1,0xe8ef,0xe8ee,0xbe7d,0xe8e9,
-0xe8ed,0xbe7e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xecac,0x0000,0xc06f,0x0000,0xeca7,0xc06b,0x0000,0xeca4,
-0xecaa,0xecad,0x0000,0xc070,0x0000,0xeca9,0xeca6,0xecae,
-0xeca5,0x0000,0xecab,0xc06c,0x0000,0xeca3,0xc06d,0x0000,
-0xc06e,0xeca8,0x0000,0x0000,0x0000,0xefa9,0xef7a,0xef7b,
-0xef7e,0xef7c,0x0000,0xef76,0x0000,0x0000,0xef79,0xefa5,
-0xef7d,0x0000,0x0000,0xc245,0x0000,0xefa7,0xefa4,0xc246,
-0xefa6,0xef77,0xefa2,0xefa3,0x0000,0xefa1,0x0000,0x0000,
-0x0000,0x0000,0xf1d2,0xf1d4,0xf1d7,0x0000,0x0000,0xf1d1,
-0x0000,0xc359,0xf1d9,0xf1d0,0xf1da,0x0000,0xf1d6,0xf1d8,
-0xf1dc,0xf1d5,0xf1dd,0xf1d3,0xf1cf,0xc35a,0x0000,0xf1db,
-0xc35b,0xc44d,0x0000,0x0000,0x0000,0x0000,0x0000,0xef78,
-0xf3f1,0xf3e8,0xc44f,0xf3e4,0xc450,0x0000,0x0000,0xf3ed,
-0xf3e7,0xf3dd,0xc44e,0xf3ea,0xf3e5,0xf3e6,0x0000,0xf3d8,
-0xf3df,0xf3ee,0x0000,0xf3eb,0x0000,0xf3e3,0x0000,0xf3ef,
-0xf3de,0xf3d9,0xf3ec,0x0000,0xf3db,0xf3e9,0xf3e0,0xf3f0,
-0xf3dc,0xc44c,0xf3da,0xf3e1,0xf3e2,0x0000,0x0000,0x0000,
-0xf57d,0x0000,0xf57b,0x0000,0xf5a2,0x0000,0xf5ae,0xf5a5,
-0xf57c,0xf578,0xf5a7,0xf57e,0xf5a3,0xf57a,0xf5aa,0xf577,
-0xf5a1,0xf5a6,0xf5a8,0xf5ab,0xf579,0x0000,0xf5af,0xf5b0,
-0xf5a9,0xf5ad,0xf5a4,0x0000,0xf6c1,0xf6c4,0x0000,0xc561,
-0x0000,0xf6c3,0xf6c8,0xf6c6,0xc562,0xf6bd,0xf6b3,0xf6b2,
-0xc564,0xf6bf,0xf6c0,0xf6bc,0xf6b4,0x0000,0xf6b9,0xf5ac,
-0x0000,0xf6b5,0xc563,0xf6bb,0x0000,0xf6ba,0x0000,0xf6b6,
-0xf6c2,0x0000,0xf6b7,0xf7bb,0xf6c5,0xf6c7,0xf6be,0xf6b8,
-0xf7bc,0xf7be,0xf7b8,0xc5c2,0x0000,0xf7c5,0xf7c3,0xc5c3,
-0xf7c2,0xf7c1,0xf7ba,0xf7b7,0xf7bd,0xf7c6,0xf7b9,0xf7bf,
-0x0000,0xf869,0xf86e,0xf864,0xf867,0xc5ee,0xf86b,0x0000,
-0xf872,0xf7c0,0x0000,0xf865,0xf86f,0xf873,0xf86a,0xf863,
-0xf86d,0x0000,0xf86c,0xf871,0xf870,0xf7c4,0xf868,0xf862,
-0xf866,0xc64e,0xc64f,0xf861,0x0000,0xf8e6,0xf8dd,0xf8e5,
-0xf8e2,0xf8e3,0xf8dc,0xf8df,0xf8e7,0xf8e1,0xf8e0,0xf8de,
-0x0000,0xf8e4,0x0000,0xf95d,0x0000,0xf95e,0x0000,0xf960,
-0xf95f,0xf962,0xf961,0xf97c,0xf97b,0xf9b7,0x0000,0xf9b8,
-0x0000,0xf9c5,0xc678,0xc67c,0x0000,0xf9cf,0xc67d,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xb3bf,0x0000,0x0000,
-0x0000,0xc4d0,0xf6c9,0x0000,0xc650,0xc651,0x0000,0xb3c0,
-0xe0ee,0x0000,0xb9a8,0xe8f0,0x0000,0x0000,0xecb0,0xecb1,
-0xecaf,0xefab,0xefaa,0xc247,0xf1df,0xefac,0xf1de,0x0000,
-0x0000,0xf3f3,0xc451,0xc453,0xf3f2,0x0000,0x0000,0xc452,
-0x0000,0xf5b1,0xf5b3,0xf5b2,0xf6ca,0xc565,0x0000,0xc5ef,
-0xf8e8,0xf963,0x0000,0x0000,0xf9d2,0xb3c1,0x0000,0xe4e5,
-0x0000,0xbea2,0x0000,0x0000,0x0000,0xecb3,0xecb2,0x0000,
-0xefad,0x0000,0x0000,0x0000,0xc454,0xc4d1,0xf7c7,0xf9cb,
-0x0000,0x0000,0x0000,0xb3c2,0xbbf2,0x0000,0xbea3,0x0000,
-0xf3f4,0x0000,0xf874,0xb6c0,0x0000,0x0000,0x0000,0x0000,
-0xefae,0x0000,0x0000,0x0000,0xc664,0xb6c1,0xbea4,0xc248,
-0xf875,0xb6c2,0x0000,0xe8f1,0xc072,0xecb4,0xecb5,0x0000,
-0xc071,0x0000,0xefaf,0xc24c,0xc24a,0xc24b,0xc249,0xf1e0,
-0xc35c,0x0000,0x0000,0x0000,0xf5b5,0xf5b4,0xf5b7,0xf5b6,
-0xc4d2,0x0000,0x0000,0xf6cb,0x0000,0xf6cd,0xf6cc,0xc566,
-0xf7c8,0x0000,0xf876,0xf877,0xc5f0,0xf964,0xf97d,0xc675,
-0x0000,0xdcb0,0xecb6,0xefb0,0xf3f5,0xe0ef,0x0000,0xefb1,
-0xf1e2,0xf1e1,0x0000,0x0000,0x0000,0x0000,0xf878,0xc652,
-0x0000,0xf965,0xf97e,0x0000,0x0000,0x0000,0xb9a9,0xe8f2,
-0xe8f3,0x0000,0xecb7,0xb9aa,0x0000,0xc35d,0xf1e3,0x0000,
-0xf6cf,0xc567,0xf6d0,0xf6ce,0xf879,0x0000,0xf8e9,0x0000,
-0xb9ab,0x0000,0xefb4,0xefb3,0xefb2,0xf1e4,0x0000,0x0000,
-0xf1e8,0xf1e7,0xf1e6,0xf1e5,0xc35e,0xf3f6,0xf5b9,0xc4d3,
-0xf5b8,0xf6d1,0xf7cb,0xf7ca,0xc5c4,0xf7c9,0xf87c,0xf87b,
-0xf87a,0x0000,0x0000,0xbbf3,0x0000,0xecb8,0xc24d,0x0000,
-0xf3f7,0xf3f8,0xf7cc,0xf87d,0x0000,0x0000,0xf8ea,0xf966,
-0xf9b9,0xf9d4,0xbbf4,0xc24e,0xf1e9,0xf3f9,0xf6d2,0xf87e,
-0x0000,0x0000,0xbea6,0x0000,0xefb5,0xf1ea,0xf3fa,0xf3fb,
-0xf3fc,0xf5be,0x0000,0xf5ba,0xc568,0xf5bd,0xf5bc,0xc4d4,
-0xf5bb,0xc4d6,0x0000,0xc4d5,0xf6d4,0xf6d3,0xc569,0xc56a,
-0x0000,0x0000,0xc5c6,0xf7cd,0xc5c5,0x0000,0xf8a3,0xf8a4,
-0xf8a2,0xf8a1,0xc654,0x0000,0xf8eb,0xf8ec,0xf8ed,0xc653,
-0xf967,0xf96a,0xf969,0xf968,0x0000,0x0000,0xf9d3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xc073,0x0000,0x0000,
-0xc365,0xf5bf,0xf6d5,0x0000,0xc5c7,0xf7ce,0x0000,0x0000,
-0xf9d5,0x0000,0x0000,0x0000,0xc074,0x0000,0x0000,0x0000,
-0xefb6,0x0000,0xf7cf,0x0000,0xf9a1};
-
-static const int ucs_i_big5_table_min = 0x4d00;
-static const int ucs_i_big5_table_max = 0x4d00 + (sizeof (ucs_i_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_pua_big5_table[] = {
-/* 0xf600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xc6a1,0xc6a2,0xc6a3,0xc6a4,0xc6a5,0xc6a6,0xc6a7,
-0xc6a8,0xc6a9,0xc6aa,0xc6ab,0xc6ac,0xc6ad,0xc6ae,0xc6af,
-0xc6b0,0xc6b1,0xc6b2,0xc6b3,0xc6b4,0xc6b5,0xc6b6,0xc6b7,
-0xc6b8,0xc6b9,0xc6ba,0xc6bb,0xc6bc,0xc6bd,0xc6be,0xc6bf,
-0xc6c0,0xc6c1,0xc6c2,0xc6c3,0xc6c4,0xc6c5,0xc6c6,0xc6c7,
-0xc6c8,0xc6c9,0xc6ca,0xc6cb,0xc6cc,0xc6cd,0xc6ce,0xc6cf,
-0xc6d0,0xc6d1,0xc6d2,0xc6d3,0xc6d4,0xc6d5,0xc6d6,0xc6d7,
-0xc6d8,0xc6d9,0xc6da,0xc6db,0xc6dc,0xc6dd,0xc6de,0xc6df,
-0xc6e0,0xc6e1,0xc6e2,0xc6e3,0xc6e4,0xc6e5,0xc6e6,0xc6e7,
-0xc6e8,0xc6e9,0xc6ea,0xc6eb,0xc6ec,0xc6ed,0xc6ee,0xc6ef,
-0xc6f0,0xc6f1,0xc6f2,0xc6f3,0xc6f4,0xc6f5,0xc6f6,0xc6f7,
-0xc6f8,0xc6f9,0xc6fa,0xc6fb,0xc6fc,0xc6fd,0xc6fe,0xc740,
-0xc741,0xc742,0xc743,0xc744,0xc745,0xc746,0xc747,0xc748,
-0xc749,0xc74a,0xc74b,0xc74c,0xc74d,0xc74e,0xc74f,0xc750,
-0xc751,0xc752,0xc753,0xc754,0xc755,0xc756,0xc757,0xc758,
-0xc759,0xc75a,0xc75b,0xc75c,0xc75d,0xc75e,0xc75f,0xc760,
-0xc761,0xc762,0xc763,0xc764,0xc765,0xc766,0xc767,0xc768,
-0xc769,0xc76a,0xc76b,0xc76c,0xc76d,0xc76e,0xc76f,0xc770,
-0xc771,0xc772,0xc773,0xc774,0xc775,0xc776,0xc777,0xc778,
-0xc779,0xc77a,0xc77b,0xc77c,0xc77d,0xc77e,0xc7a1,0xc7a2,
-0xc7a3,0xc7a4,0xc7a5,0xc7a6,0xc7a7,0xc7a8,0xc7a9,0xc7aa,
-0xc7ab,0xc7ac,0xc7ad,0xc7ae,0xc7af,0xc7b0,0xc7b1,0xc7b2,
-0xc7b3,0xc7b4,0xc7b5,0xc7b6,0xc7b7,0xc7b8,0xc7b9,0xc7ba,
-0xc7bb,0xc7bc,0xc7bd,0xc7be,0xc7bf,0xc7c0,0xc7c1,0xc7c2,
-0xc7c3,0xc7c4,0xc7c5,0xc7c6,0xc7c7,0xc7c8,0xc7c9,0xc7ca,
-0xc7cb,0xc7cc,0xc7cd,0xc7ce,0xc7cf,0xc7d0,0xc7d1,0xc7d2,
-0xc7d3,0xc7d4,0xc7d5,0xc7d6,0xc7d7,0xc7d8,0xc7d9,0xc7da,
-0xc7db,0xc7dc,0xc7dd,0xc7de,0xc7df,0xc7e0,0xc7e1,0xc7e2,
-0xc7e3,0xc7e4,0xc7e5,0xc7e6,0xc7e7,0xc7e8,0xc7e9,0xc7ea,
-0xc7eb,0xc7ec,0xc7ed,0xc7ee,0xc7ef,0xc7f0,0xc7f1,0xc7f2,
-0xc7f3,0xc7f4,0xc7f5,0xc7f6,0xc7f7,0xc7f8,0xc7f9,0xc7fa,
-0xc7fb,0xc7fc,0xc7fd,0xc7fe,0xc840,0xc841,0xc842,0xc843,
-0xc844,0xc845,0xc846,0xc847,0xc848,0xc849,0xc84a,0xc84b,
-0xc84c,0xc84d,0xc84e,0xc84f,0xc850,0xc851,0xc852,0xc853,
-0xc854,0xc855,0xc856,0xc857,0xc858,0xc859,0xc85a,0xc85b,
-0xc85c,0xc85d,0xc85e,0xc85f,0xc860,0xc861,0xc862,0xc863,
-0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,0xc86a,0xc86b,
-0xc86c,0xc86d,0xc86e,0xc86f,0xc870,0xc871,0xc872,0xc873,
-0xc874,0xc875,0xc876,0xc877,0xc878,0xc879,0xc87a,0xc87b,
-0xc87c,0xc87d,0xc87e,0xc8a1,0xc8a2,0xc8a3,0xc8a4,0xc8a5,
-0xc8a6,0xc8a7,0xc8a8,0xc8a9,0xc8aa,0xc8ab,0xc8ac,0xc8ad,
-0xc8ae,0xc8af,0xc8b0,0xc8b1,0xc8b2,0xc8b3,0xc8b4,0xc8b5,
-0xc8b6,0xc8b7,0xc8b8,0xc8b9,0xc8ba,0xc8bb,0xc8bc,0xc8bd,
-0xc8be,0xc8bf,0xc8c0,0xc8c1,0xc8c2,0xc8c3,0xc8c4,0xc8c5,
-0xc8c6,0xc8c7,0xc8c8,0xc8c9,0xc8ca,0xc8cb,0xc8cc,0xc8cd,
-0xc8ce,0xc8cf,0xc8d0,0xc8d1,0xc8d2,0xc8d3,0xc8d4,0xc8d5,
-0xc8d6,0xc8d7,0xc8d8,0xc8d9,0xc8da,0xc8db,0xc8dc,0xc8dd,
-0xc8de,0xc8df,0xc8e0,0xc8e1,0xc8e2,0xc8e3,0xc8e4,0xc8e5,
-0xc8e6,0xc8e7,0xc8e8,0xc8e9,0xc8ea,0xc8eb,0xc8ec,0xc8ed,
-0xc8ee,0xc8ef,0xc8f0,0xc8f1,0xc8f2,0xc8f3,0xc8f4,0xc8f5,
-0xc8f6,0xc8f7,0xc8f8,0xc8f9,0xc8fa,0xc8fb,0xc8fc,0xc8fd,
-0xc8fe};
-
-static const int ucs_pua_big5_table_min = 0xf600;
-static const int ucs_pua_big5_table_max = 0xf600 + (sizeof (ucs_pua_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_r1_big5_table[] = {
-/* 0xfa00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc94a,0xddfc};
-
-static const int ucs_r1_big5_table_min = 0xfa00;
-static const int ucs_r1_big5_table_max = 0xfa00 + (sizeof (ucs_r1_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_r2_big5_table[] = {
-/* 0xfe00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa14a,0xa157,0x0000,0xa159,0xa15b,0xa15f,0xa160,0xa163,
-0xa164,0xa167,0xa168,0xa16b,0xa16c,0xa16f,0xa170,0xa173,
-0xa174,0xa177,0xa178,0xa17b,0xa17c,0x0000,0x0000,0x0000,
-0x0000,0xa1c6,0xa1c7,0xa1ca,0xa1cb,0xa1c8,0xa1c9,0xa15c,
-0xa14d,0xa14e,0xa14f,0x0000,0xa151,0xa152,0xa153,0xa154,
-0x0000,0xa17d,0xa17e,0xa1a1,0xa1a2,0xa1a3,0xa1a4,0xa1cc,
-0xa1cd,0xa1ce,0xa1de,0xa1df,0xa1e0,0xa1e1,0xa1e2,0x0000,
-0xa242,0xa24c,0xa24d,0xa24e,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xff00 */
-0x0000,0xa149,0x0000,0xa1ad,0xa243,0xa248,0xa1ae,0x0000,
-0xa15d,0xa15e,0xa1af,0xa1cf,0xa141,0xa1d0,0xa144,0xa1fe,
-0xa2af,0xa2b0,0xa2b1,0xa2b2,0xa2b3,0xa2b4,0xa2b5,0xa2b6,
-0xa2b7,0xa2b8,0xa147,0xa146,0xa1d5,0xa1d7,0xa1d6,0xa148,
-0xa249,0xa2cf,0xa2d0,0xa2d1,0xa2d2,0xa2d3,0xa2d4,0xa2d5,
-0xa2d6,0xa2d7,0xa2d8,0xa2d9,0xa2da,0xa2db,0xa2dc,0xa2dd,
-0xa2de,0xa2df,0xa2e0,0xa2e1,0xa2e2,0xa2e3,0xa2e4,0xa2e5,
-0xa2e6,0xa2e7,0xa2e8,0x0000,0xa240,0x0000,0x0000,0xa1c4,
-0x0000,0xa2e9,0xa2ea,0xa2eb,0xa2ec,0xa2ed,0xa2ee,0xa2ef,
-0xa2f0,0xa2f1,0xa2f2,0xa2f3,0xa2f4,0xa2f5,0xa2f6,0xa2f7,
-0xa2f8,0xa2f9,0xa2fa,0xa2fb,0xa2fc,0xa2fd,0xa2fe,0xa340,
-0xa341,0xa342,0xa343,0xa161,0xa155,0xa162,0xa1e3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa246,0xa247,0x0000,0xa1c3,0x0000,0xa244};
-
-static const int ucs_r2_big5_table_min = 0xfe00;
-static const int ucs_r2_big5_table_max = 0xfe00 + (sizeof (ucs_r2_big5_table) / sizeof (unsigned short));
diff --git a/ext/mcal/CREDITS b/ext/mcal/CREDITS
deleted file mode 100644
index 7d9c3a1290..0000000000
--- a/ext/mcal/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MCAL
-Mark Musone, Chuck Hagenbuch
diff --git a/ext/mcal/config.m4 b/ext/mcal/config.m4
deleted file mode 100644
index c2f119c5e6..0000000000
--- a/ext/mcal/config.m4
+++ /dev/null
@@ -1,45 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mcal,for MCAL support,
-[ --with-mcal[=DIR] Include MCAL support.])
-
-if test "$PHP_MCAL" != "no"; then
- MCAL_DEFAULT_SEARCH=/usr/local
- if test "$PHP_MCAL" = "yes"; then
- MCAL_DIR=$MCAL_DEFAULT_SEARCH
- else
- PHP_EXPAND_PATH($PHP_MCAL, MCAL_DIR)
- fi
-
- for i in $MCAL_DIR $MCAL_DIR/mcal $MCAL_DIR/mcal/include $MCAL_DIR/include/mcal $MCAL_DIR/include; do
- if test -r "$i/mcal.h"; then
- MCAL_INCLUDE=$i
- fi
- done
-
- for i in $MCAL_DIR $MCAL_DIR/mcal $MCAL_DIR/mcal/lib $MCAL_DIR/lib/mcal $MCAL_DIR/lib; do
- if test -r "$i/libmcal.a"; then
- MCAL_LIBRARY=$i
- fi
- done
-
- for i in mcal cal_misc icalroutines; do
- if test ! -f "$MCAL_INCLUDE/$i.h"; then
- AC_MSG_ERROR(Unable to locate your libmcal header files - $i.h should be in the directory you specify or in the include/ subdirectory below it - default search location is $MCAL_DEFAULT_SEARCH)
- fi
- done
-
- if test ! -f "$MCAL_LIBRARY/libmcal.a"; then
- AC_MSG_ERROR(Unable to locate your libmcal library files - libmcal.a should be in the directory you specify or in the lib/ subdirectory below it - default search location is $MCAL_DEFAULT_SEARCH)
- fi
-
- PHP_ADD_INCLUDE($MCAL_INCLUDE)
- PHP_ADD_LIBPATH($MCAL_LIBRARY,MCAL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER(mcal,[],MCAL_SHARED_LIBADD)
- PHP_SUBST(MCAL_SHARED_LIBADD)
- AC_DEFINE(HAVE_MCAL,1,[ ])
- PHP_NEW_EXTENSION(mcal, php_mcal.c, $ext_shared)
-fi
-
diff --git a/ext/mcal/php_mcal.c b/ext/mcal/php_mcal.c
deleted file mode 100644
index 51eac13fce..0000000000
--- a/ext/mcal/php_mcal.c
+++ /dev/null
@@ -1,1631 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Mark Musone <musone@chek.com> |
- | Chuck Hagenbuch <chuck@horde.org> |
- +----------------------------------------------------------------------+
-*/
-
-#define MCAL1
-
-#ifdef ERROR
-#undef ERROR
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_MCAL
-
-#include <time.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-#include <stdarg.h>
-#include "mcal.h"
-#include "php_mcal.h"
-#include "zend_modules.h"
-#include "ext/standard/info.h"
-#include "ext/standard/basic_functions.h"
-#ifdef PHP_WIN32
-#include "winsock.h"
-#endif
-
-static void cal_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-typedef struct _php_mcal_le_struct {
- CALSTREAM *mcal_stream;
- long public;
- CALEVENT *event;
- long flags;
-} pils;
-
-
-typedef struct cal_list {
- php_uint32 uid;
- struct cal_list *next;
-} cal_list_t;
-
-static cal_list_t *g_cal_list=NULL;
-static cal_list_t *g_cal_list_end=NULL;
-/*
- * this array should be set up as:
- * {"PHPScriptFunctionName",dllFunctionName,1}
- */
-
-function_entry mcal_functions[] = {
- PHP_FE(mcal_open,NULL)
- PHP_FE(mcal_close,NULL)
- PHP_FE(mcal_popen,NULL)
- PHP_FE(mcal_reopen,NULL)
- PHP_FE(mcal_fetch_event,NULL)
- PHP_FE(mcal_list_events,NULL)
- PHP_FE(mcal_list_alarms,NULL)
- PHP_FE(mcal_create_calendar,NULL)
- PHP_FE(mcal_rename_calendar,NULL)
- PHP_FE(mcal_delete_calendar,NULL)
- PHP_FE(mcal_delete_event,NULL)
- PHP_FE(mcal_append_event,NULL)
- PHP_FE(mcal_store_event,NULL)
- PHP_FE(mcal_snooze,NULL)
- PHP_FE(mcal_event_set_category,NULL)
- PHP_FE(mcal_event_set_title,NULL)
- PHP_FE(mcal_event_set_description,NULL)
- PHP_FE(mcal_event_set_start,NULL)
- PHP_FE(mcal_event_set_end,NULL)
- PHP_FE(mcal_event_set_alarm,NULL)
- PHP_FE(mcal_event_set_class,NULL)
- PHP_FE(mcal_event_add_attribute,NULL)
- PHP_FE(mcal_is_leap_year,NULL)
- PHP_FE(mcal_days_in_month,NULL)
- PHP_FE(mcal_date_valid,NULL)
- PHP_FE(mcal_time_valid,NULL)
- PHP_FE(mcal_day_of_week,NULL)
- PHP_FE(mcal_day_of_year,NULL)
- PHP_FE(mcal_week_of_year,NULL)
- PHP_FE(mcal_date_compare,NULL)
- PHP_FE(mcal_event_init,NULL)
- PHP_FE(mcal_next_recurrence,NULL)
- PHP_FE(mcal_event_set_recur_none,NULL)
- PHP_FE(mcal_event_set_recur_daily,NULL)
- PHP_FE(mcal_event_set_recur_weekly,NULL)
- PHP_FE(mcal_event_set_recur_monthly_mday,NULL)
- PHP_FE(mcal_event_set_recur_monthly_wday,NULL)
- PHP_FE(mcal_event_set_recur_yearly,NULL)
- PHP_FE(mcal_fetch_current_stream_event,NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry php_mcal_module_entry = {
- STANDARD_MODULE_HEADER,
- "mcal",
- mcal_functions,
- PHP_MINIT(mcal),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(mcal),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_MCAL
-ZEND_GET_MODULE(php_mcal)
-#endif
-
-/*
- I believe since this global is used ONLY within this module,
- and nothing will link to this module, we can use the simple
- thread local_ storage
-*/
-static int le_mcal;
-char *mcal_user;
-char *mcal_password;
-
-
-static void cal_close_it (zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pils *mcal_le_struct = (pils *)rsrc->ptr;
-
- cal_close(mcal_le_struct->mcal_stream,0);
- efree(mcal_le_struct);
-}
-
-
-PHP_MINFO_FUNCTION(mcal)
-{
- char tmp[128];
-
- php_info_print_table_start();
- php_info_print_table_row(2, "MCAL Support", "enabled" );
-#ifdef MCALVER
- snprintf(tmp, 128, "%s - %d", CALVER, MCALVER);
-#else
- snprintf(tmp, 128, "%s", CALVER );
-#endif
- php_info_print_table_row(2, "MCAL Version", tmp );
- php_info_print_table_end();
-}
-
-PHP_MINIT_FUNCTION(mcal)
-{
- le_mcal = zend_register_list_destructors_ex(cal_close_it, NULL, "mcal", module_number);
-
- REGISTER_LONG_CONSTANT("MCAL_SUNDAY", SUNDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_MONDAY", MONDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_TUESDAY", TUESDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_WEDNESDAY", WEDNESDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_THURSDAY", THURSDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_FRIDAY", FRIDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_SATURDAY", SATURDAY, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("MCAL_JANUARY", JANUARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_FEBRUARY", FEBRUARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_MARCH", MARCH, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_APRIL", APRIL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_MAY", MAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_JUNE", JUNE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_JULY", JULY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_AUGUST", AUGUST, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_SEPTEMBER", SEPTEMBER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_OCTOBER", OCTOBER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_NOVEMBER", NOVEMBER, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("MCAL_RECUR_NONE", RECUR_NONE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_RECUR_DAILY", RECUR_DAILY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_RECUR_WEEKLY", RECUR_WEEKLY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_RECUR_MONTHLY_MDAY", RECUR_MONTHLY_MDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_RECUR_MONTHLY_WDAY", RECUR_MONTHLY_WDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_RECUR_YEARLY", RECUR_YEARLY, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("MCAL_M_SUNDAY", M_SUNDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_MONDAY", M_MONDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_TUESDAY", M_TUESDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_WEDNESDAY", M_WEDNESDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_THURSDAY", M_THURSDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_FRIDAY", M_FRIDAY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_SATURDAY", M_SATURDAY, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("MCAL_M_WEEKDAYS", M_WEEKDAYS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_WEEKEND", M_WEEKEND, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("MCAL_M_ALLDAYS", M_ALLDAYS, CONST_PERSISTENT | CONST_CS);
-
- return SUCCESS;
-}
-
-static int add_assoc_object(zval *arg, char *key, zval *tmp)
-{
- HashTable *symtable;
-
- if (Z_TYPE_P(arg) == IS_OBJECT) {
- symtable = Z_OBJPROP_P(arg);
- } else {
- symtable = Z_ARRVAL_P(arg);
- }
- return zend_hash_update(symtable, key, strlen(key)+1, (void *)&tmp, sizeof(zval *), NULL);
-}
-
-static void php_mcal_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval **calendar, **user, **passwd, **options;
- CALSTREAM *mcal_stream;
- pils *mcal_le_struct;
- long flags=0;
- int ind;
-
- int myargc = ZEND_NUM_ARGS();
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &calendar, &user, &passwd, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(calendar);
- convert_to_string_ex(user);
- convert_to_string_ex(passwd);
- mcal_user = estrndup(Z_STRVAL_PP(user), Z_STRLEN_PP(user));
- mcal_password = estrndup(Z_STRVAL_PP(passwd), Z_STRLEN_PP(passwd));
- if (myargc == 4) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- }
- mcal_stream = cal_open(NULL, Z_STRVAL_PP(calendar), 0);
- efree(mcal_user);
- efree(mcal_password);
-
- if (!mcal_stream) {
- php_error(E_WARNING, "Couldn't open stream %s\n", Z_STRVAL_PP(calendar));
- RETURN_FALSE;
- }
-
- mcal_le_struct = emalloc(sizeof(pils));
- mcal_le_struct->mcal_stream = mcal_stream;
- mcal_le_struct->event=calevent_new();
-
- ind = zend_list_insert(mcal_le_struct, le_mcal);
- RETURN_LONG(ind);
-}
-
-static void php_mcal_event_init(struct _php_mcal_le_struct *mystruct)
-{
- calevent_free(mystruct->event);
- mystruct->event=calevent_new();
-}
-
-static void _php_make_event_object(zval *myzvalue, CALEVENT *event TSRMLS_DC)
-{
- zval *start, *end, *recurend, *attrlist;
- CALATTR *attr;
-
- object_init(myzvalue);
- add_property_long(myzvalue,"id",event->id);
- add_property_long(myzvalue,"public",event->public);
-
- MAKE_STD_ZVAL(start);
- object_init(start);
- if (event->start.has_date) {
- add_property_long(start,"year",event->start.year);
- add_property_long(start,"month",event->start.mon);
- add_property_long(start,"mday",event->start.mday);
- }
- if (event->start.has_time) {
- add_property_long(start,"hour",event->start.hour);
- add_property_long(start,"min",event->start.min);
- add_property_long(start,"sec",event->start.sec);
- }
- add_assoc_object(myzvalue, "start", start);
-
- MAKE_STD_ZVAL(end);
- object_init(end);
- if (event->end.has_date) {
- add_property_long(end,"year",event->end.year);
- add_property_long(end,"month",event->end.mon);
- add_property_long(end,"mday",event->end.mday);
- }
- if (event->end.has_time) {
- add_property_long(end,"hour",event->end.hour);
- add_property_long(end,"min",event->end.min);
- add_property_long(end,"sec",event->end.sec);
- }
- add_assoc_object(myzvalue, "end", end);
-
- if (event->category)
- add_property_string(myzvalue,"category",event->category,1);
- if (event->title)
- add_property_string(myzvalue,"title",event->title,1);
- if (event->description)
- add_property_string(myzvalue,"description",event->description,1);
- add_property_long(myzvalue,"alarm",event->alarm);
- add_property_long(myzvalue,"recur_type",event->recur_type);
- add_property_long(myzvalue,"recur_interval",event->recur_interval);
-
- MAKE_STD_ZVAL(recurend);
- object_init(recurend);
- if (event->recur_enddate.has_date) {
- add_property_long(recurend,"year",event->recur_enddate.year);
- add_property_long(recurend,"month",event->recur_enddate.mon);
- add_property_long(recurend,"mday",event->recur_enddate.mday);
- }
- if (event->recur_enddate.has_time) {
- add_property_long(recurend,"hour",event->recur_enddate.hour);
- add_property_long(recurend,"min",event->recur_enddate.min);
- add_property_long(recurend,"sec",event->recur_enddate.sec);
- }
- add_assoc_object(myzvalue, "recur_enddate", recurend);
-
- add_property_long(myzvalue,"recur_data",event->recur_data.weekly_wday);
-
- if (event->attrlist) {
- MAKE_STD_ZVAL(attrlist);
- object_init(attrlist);
- array_init(attrlist);
- for (attr = event->attrlist; attr; attr = attr->next) {
- add_assoc_string(attrlist, attr->name, attr->value, 1);
- }
- add_assoc_object(myzvalue, "attrlist", attrlist);
- }
-}
-
-/* {{{ proto int mcal_close(int stream_id [, int options])
- Close an MCAL stream */
-PHP_FUNCTION(mcal_close)
-{
- zval **options, **streamind;
- int ind, ind_type;
- pils *mcal_le_struct=NULL;
- int myargcount=ZEND_NUM_ARGS();
- long flags = 0;
-
- if (myargcount < 1 || myargcount > 2 || zend_get_parameters_ex(myargcount, &streamind, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- if (myargcount==2) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- mcal_le_struct->flags = flags;
- }
- zend_list_delete(ind);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mcal_open(string calendar, string user, string password [, int options])
- Open an MCAL stream to a calendar */
-PHP_FUNCTION(mcal_open)
-{
- php_mcal_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string mcal_popen(string calendar, string user, string password [, int options])
- Open a persistent MCAL stream to a calendar */
-PHP_FUNCTION(mcal_popen)
-{
- php_mcal_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-
-/* {{{ proto int mcal_reopen(int stream_id, string calendar [, int options])
- Reopen MCAL stream to a new calendar */
-PHP_FUNCTION(mcal_reopen)
-{
- zval **streamind, **calendar, **options;
- CALSTREAM *mcal_stream=NULL;
- pils *mcal_le_struct;
- int ind, ind_type;
- long flags=0;
- long cl_flags=0;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &calendar, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(calendar);
- if (myargc == 3) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- mcal_le_struct->flags = cl_flags;
- }
- if (mcal_stream == NULL) {
- php_error(E_WARNING,"Couldn't re-open stream\n");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mcal_expunge(int stream_id)
- Delete all events marked for deletion */
-PHP_FUNCTION(mcal_expunge)
-{
- zval **streamind;
- int ind, ind_type;
- pils *mcal_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
-
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- /* cal_expunge (mcal_le_struct->mcal_stream);
- */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mcal_fetch_event(int stream_id, int eventid [, int options])
- Fetch an event */
-PHP_FUNCTION(mcal_fetch_event)
-{
- zval **streamind, **eventid, **options=NULL;
- int ind, ind_type;
- pils *mcal_le_struct=NULL;
- CALEVENT *myevent;
- int myargcount=ZEND_NUM_ARGS();
-
- if (myargcount < 1 || myargcount > 3 || zend_get_parameters_ex(myargcount, &streamind, &eventid, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(streamind);
- convert_to_long_ex(eventid);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- if (myargcount == 3) {
- convert_to_long_ex(options);
- }
- cal_fetch(mcal_le_struct->mcal_stream, Z_LVAL_PP(eventid), &myevent);
- if (myevent == NULL) {
- RETURN_FALSE;
- }
- calevent_free(mcal_le_struct->event);
- mcal_le_struct->event = myevent;
- _php_make_event_object(return_value, mcal_le_struct->event TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto object mcal_fetch_current_stream_event(int stream_id)
- Fetch the current event stored in the stream's event structure */
-PHP_FUNCTION(mcal_fetch_current_stream_event)
-{
- zval **streamind;
- int ind, ind_type;
- pils *mcal_le_struct=NULL;
- int myargcount=ZEND_NUM_ARGS();
-
- if (myargcount != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- _php_make_event_object(return_value, mcal_le_struct->event TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto array mcal_list_events(int stream_id, object begindate [, object enddate])
- Returns list of UIDs for that day or range of days */
-PHP_FUNCTION(mcal_list_events)
-{
- zval **streamind, **startyear, **startmonth, **startday;
- zval **endyear, **endmonth, **endday;
- int ind, ind_type;
- pils *mcal_le_struct;
- cal_list_t *my_cal_list;
- int myargc;
- datetime_t startdate=DT_INIT;
- datetime_t enddate=DT_INIT;
-
- myargc = ZEND_NUM_ARGS();
- if ((myargc != 1 && myargc != 7) || zend_get_parameters_ex(myargc, &streamind, &startyear, &startmonth, &startday, &endyear, &endmonth, &endday) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (myargc == 7) {
- convert_to_long_ex(startyear);
- convert_to_long_ex(startmonth);
- convert_to_long_ex(startday);
- convert_to_long_ex(endyear);
- convert_to_long_ex(endmonth);
- convert_to_long_ex(endday);
- dt_setdate(&startdate, Z_LVAL_PP(startyear), Z_LVAL_PP(startmonth), Z_LVAL_PP(startday));
- dt_setdate(&enddate, Z_LVAL_PP(endyear), Z_LVAL_PP(endmonth), Z_LVAL_PP(endday));
- }
- else {
- startdate = mcal_le_struct->event->start;
- enddate = mcal_le_struct->event->end;
- }
-
- g_cal_list = NULL;
- cal_search_range(mcal_le_struct->mcal_stream, &startdate, &enddate);
- my_cal_list = g_cal_list;
- while (my_cal_list != NULL) {
- add_next_index_long(return_value, my_cal_list->uid);
- my_cal_list = my_cal_list->next;
- free(g_cal_list);
- g_cal_list = my_cal_list;
- }
-}
-/* }}} */
-
-/* {{{ proto string mcal_create_calendar(int stream_id, string calendar)
- Create a new calendar */
-PHP_FUNCTION(mcal_create_calendar)
-{
- zval **streamind, **calendar;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &calendar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(calendar);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- /*
- if (mcal_create(mcal_le_struct->mcal_stream,Z_STRVAL_P(calendar)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
- */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mcal_rename_calendar(int stream_id, string src_calendar, string dest_calendar)
- Rename a calendar */
-PHP_FUNCTION(mcal_rename_calendar)
-{
- zval **streamind, **src_calendar, **dest_calendar;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &streamind, &src_calendar, &dest_calendar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(src_calendar);
- convert_to_string_ex(dest_calendar);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- /*
- if(mcal_rename(mcal_le_struct->mcal_stream,Z_STRVAL_P(src_calendar),Z_STRVAL_P(dest_calendar))) {RETURN_TRUE;}
- else {RETURN_FALSE; }
- */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mcal_list_alarms(int stream_id, int year, int month, int day, int hour, int min, int sec)
- List alarms for a given time */
-PHP_FUNCTION(mcal_list_alarms)
-{
- zval **streamind, **year, **month, **day, **hour, **min, **sec;
- datetime_t mydate=DT_INIT;
- int ind, ind_type;
- pils *mcal_le_struct;
- cal_list_t *my_cal_list;
- int myargc=ZEND_NUM_ARGS();
- if ((myargc != 1 && myargc != 7) || zend_get_parameters_ex(myargc, &streamind, &year, &month, &day, &hour, &min, &sec) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (myargc == 7) {
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(hour);
- convert_to_long_ex(min);
- convert_to_long_ex(sec);
- dt_setdate(&mydate, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- dt_settime(&mydate, Z_LVAL_PP(hour), Z_LVAL_PP(min), Z_LVAL_PP(sec));
- }
- else {
- mydate = mcal_le_struct->event->start;
- }
- g_cal_list = NULL;
- cal_search_alarm(mcal_le_struct->mcal_stream, &mydate);
- my_cal_list = g_cal_list;
- while (my_cal_list != NULL) {
- add_next_index_long(return_value, my_cal_list->uid);
- my_cal_list = my_cal_list->next;
- free(g_cal_list);
- g_cal_list = my_cal_list;
- }
-}
-/* }}} */
-
-/* {{{ proto string mcal_delete_calendar(int stream_id, string calendar)
- Delete calendar */
-PHP_FUNCTION(mcal_delete_calendar)
-{
- zval **streamind, **calendar;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &calendar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(calendar);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- /* if (mcal_delete_calendar(mcal_le_struct->mcal_stream,Z_STRVAL_P(calendar)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
- */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mcal_delete_event(int stream_id, int event_id)
- Delete an event */
-PHP_FUNCTION(mcal_delete_event)
-{
- zval **streamind, **event_id;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc=ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &event_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(event_id);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if (cal_remove(mcal_le_struct->mcal_stream, Z_LVAL_PP(event_id))) {
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mcal_append_event(int stream_id)
- Append a new event to the calendar stream */
-PHP_FUNCTION(mcal_append_event)
-{
- zval **streamind;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- unsigned long event_id;
- CALEVENT *myevent=NULL;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- myevent = mcal_le_struct->event;
- cal_append(mcal_le_struct->mcal_stream, "INBOX", &event_id, myevent);
- calevent_free(myevent);
- RETURN_LONG(event_id);
-}
-/* }}} */
-
-/* {{{ proto string mcal_store_event(int stream_id)
- Store changes to an event */
-PHP_FUNCTION(mcal_store_event)
-{
- zval **streamind;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- CALEVENT *myevent=NULL;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- myevent = mcal_le_struct->event;
- cal_store(mcal_le_struct->mcal_stream, myevent);
- RETURN_LONG(myevent->id);
-}
-/* }}} */
-
-/* {{{ proto string mcal_snooze(int stream_id, int uid)
- Snooze an alarm */
-PHP_FUNCTION(mcal_snooze)
-{
- zval **streamind, **uid;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &uid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(uid);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if (cal_snooze(mcal_le_struct->mcal_stream, Z_LVAL_PP(uid))) {
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_category(int stream_id, string category)
- Attach a category to an event */
-PHP_FUNCTION(mcal_event_set_category)
-{
- zval **streamind, **category;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(category);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- mcal_le_struct->event->category = strdup(Z_STRVAL_PP(category));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_title(int stream_id, string title)
- Attach a title to an event */
-PHP_FUNCTION(mcal_event_set_title)
-{
- zval **streamind, **title;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &title) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(title);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- mcal_le_struct->event->title = strdup(Z_STRVAL_PP(title));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_description(int stream_id, string description)
- Attach a description to an event */
-PHP_FUNCTION(mcal_event_set_description)
-{
- zval **streamind, **description;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &description) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(description);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
- mcal_le_struct->event->description = strdup(Z_STRVAL_PP(description));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_start(int stream_id, int year,int month, int day [[[, int hour], int min], int sec])
- Attach a start datetime to an event */
-PHP_FUNCTION(mcal_event_set_start)
-{
- zval **streamind, **year, **month, **date, **hour, **min, **sec;
- int ind, ind_type;
- int myhour=0, mymin=0, mysec=0;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc < 4 || myargc > 7 || zend_get_parameters_ex(myargc, &streamind, &year, &month, &date, &hour, &min, &sec) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(date);
- if (myargc > 4) convert_to_long_ex(hour);
- if (myargc > 5) convert_to_long_ex(min);
- if (myargc > 6) convert_to_long_ex(sec);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&(mcal_le_struct->event->start), Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(date));
-
- if (myargc > 4) myhour = Z_LVAL_PP(hour);
- if (myargc > 5) mymin = Z_LVAL_PP(min);
- if (myargc > 6) mysec = Z_LVAL_PP(sec);
- if (myargc > 4) dt_settime(&(mcal_le_struct->event->start), myhour, mymin, mysec);
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_end(int stream_id, int year,int month, int day [[[, int hour], int min], int sec])
- Attach an end datetime to an event */
-PHP_FUNCTION(mcal_event_set_end)
-{
- zval **streamind, **year, **month, **date, **hour, **min, **sec;
- int ind, ind_type;
- /* initialize these to zero to make sure we don't use them
- uninitialized (and to avoid the gcc warning) */
- int myhour = 0; int mymin = 0; int mysec = 0;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc < 4 || myargc > 7 || zend_get_parameters_ex(myargc, &streamind, &year, &month, &date, &hour, &min, &sec) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(date);
- if (myargc > 4) convert_to_long_ex(hour);
- if (myargc > 5) convert_to_long_ex(min);
- if (myargc > 6) convert_to_long_ex(sec);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&(mcal_le_struct->event->end), Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(date));
-
- if (myargc > 4) myhour = Z_LVAL_PP(hour);
- if (myargc > 5) mymin = Z_LVAL_PP(min);
- if (myargc > 6) mysec = Z_LVAL_PP(sec);
- if (myargc > 4) dt_settime(&(mcal_le_struct->event->end), myhour, mymin, mysec);
-}
-/* }}} */
-
-/* {{{ proto int mcal_event_set_alarm(int stream_id, int alarm)
- Add an alarm to the streams global event */
-PHP_FUNCTION(mcal_event_set_alarm)
-{
- zval **streamind, **alarm;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- myargc=ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &alarm) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(alarm);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- mcal_le_struct->event->alarm = Z_LVAL_PP(alarm);
-}
-/* }}} */
-
-/* {{{ proto int mcal_event_init(int stream_id)
- Initialize a streams global event */
-PHP_FUNCTION(mcal_event_init)
-{
- zval **streamind;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- php_mcal_event_init(mcal_le_struct);
-}
-/* }}} */
-
-/* {{{ proto int mcal_event_set_class(int stream_id, int class)
- Add an class to the streams global event */
-PHP_FUNCTION(mcal_event_set_class)
-{
- zval **streamind, **class;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &streamind, &class) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(class);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- mcal_le_struct->event->public = Z_LVAL_PP(class);
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_add_attribute(int stream_id, string attribute, string value)
- Add an attribute and value to an event */
-PHP_FUNCTION(mcal_event_add_attribute)
-{
- zval **streamind, **attribute, **val;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &streamind, &attribute, &val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_string_ex(attribute);
- convert_to_string_ex(val);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-#if MCALVER >= 20000121
- if (calevent_setattr(mcal_le_struct->event, Z_STRVAL_PP(attribute), Z_STRVAL_PP(val))) {
- RETURN_TRUE;
- }
- else
-#endif
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool mcal_is_leap_year(int year)
- Returns true if year is a leap year, false if not */
-PHP_FUNCTION(mcal_is_leap_year)
-{
- zval **year;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 1 || zend_get_parameters_ex(1, &year) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(year);
-
- if (isleapyear(Z_LVAL_PP(year))) {
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mcal_days_in_month(int month, bool leap_year)
- Returns the number of days in the given month, needs to know if the year is a leap year or not */
-PHP_FUNCTION(mcal_days_in_month)
-{
- zval **month, **leap;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 2 || zend_get_parameters_ex(2, &month, &leap) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(month);
- convert_to_long_ex(leap);
- convert_to_boolean_ex(leap);
-
- RETURN_LONG(daysinmonth(Z_LVAL_PP(month), Z_LVAL_PP(leap)));
-}
-/* }}} */
-
-/* {{{ proto bool mcal_date_valid(int year, int month, int day)
- Returns true if the date is a valid date */
-PHP_FUNCTION(mcal_date_valid)
-{
- zval **year, **month, **day;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &year, &month, &day) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
-
- if (datevalid(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day))) {
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool mcal_time_valid(int hour, int min, int sec)
- Returns true if the time is a valid time */
-PHP_FUNCTION(mcal_time_valid)
-{
- zval **hour, **min, **sec;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &hour, &min, &sec) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(hour);
- convert_to_long_ex(min);
- convert_to_long_ex(sec);
-
- if (timevalid(Z_LVAL_PP(hour), Z_LVAL_PP(min), Z_LVAL_PP(sec))) {
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mcal_day_of_week(int year, int month, int day)
- Returns the day of the week of the given date */
-PHP_FUNCTION(mcal_day_of_week)
-{
- zval **year, **month, **day;
- int myargc;
- datetime_t mydate;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &year, &month, &day) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
-
- dt_init(&mydate);
- dt_setdate(&mydate, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
-
- RETURN_LONG(dt_dayofweek(&mydate));
-}
-/* }}} */
-
-/* {{{ proto int mcal_day_of_year(int year, int month, int day)
- Returns the day of the year of the given date */
-PHP_FUNCTION(mcal_day_of_year)
-{
- zval **year, **month, **day;
- int myargc;
- datetime_t mydate;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &year, &month, &day) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
-
- dt_init(&mydate);
- dt_setdate(&mydate, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
-
- RETURN_LONG(dt_dayofyear(&mydate));
-}
-/* }}} */
-
-/* {{{ proto int mcal_week_of_year(int day, int month, int year)
- Returns the week number of the given date */
-PHP_FUNCTION(mcal_week_of_year)
-{
- zval **year, **month, **day;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &day, &month, &year) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
-
- if (datevalid(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day))) {
- RETURN_LONG(dt_weekofyear(Z_LVAL_PP(day), Z_LVAL_PP(month), Z_LVAL_PP(year)));
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mcal_date_compare(int ayear, int amonth, int aday, int byear, int bmonth, int bday)
- Returns <0, 0, >0 if a<b, a==b, a>b respectively */
-PHP_FUNCTION(mcal_date_compare)
-{
- zval **ayear, **amonth, **aday;
- zval **byear, **bmonth, **bday;
- int myargc;
- datetime_t myadate, mybdate;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 6 || zend_get_parameters_ex(6, &ayear, &amonth, &aday, &byear, &bmonth, &bday) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(ayear);
- convert_to_long_ex(amonth);
- convert_to_long_ex(aday);
- convert_to_long_ex(byear);
- convert_to_long_ex(bmonth);
- convert_to_long_ex(bday);
-
- dt_init(&myadate);
- dt_init(&mybdate);
- dt_setdate(&myadate, Z_LVAL_PP(ayear), Z_LVAL_PP(amonth), Z_LVAL_PP(aday));
- dt_setdate(&mybdate, Z_LVAL_PP(byear), Z_LVAL_PP(bmonth), Z_LVAL_PP(bday));
-
- RETURN_LONG(dt_compare(&myadate, &mybdate));
-}
-/* }}} */
-
-/* {{{ proto object mcal_next_recurrence(int stream_id, int weekstart, array next)
- Returns an object filled with the next date the event occurs, on or after the supplied date. Returns empty date field if event does not occur or something is invalid. */
-PHP_FUNCTION(mcal_next_recurrence)
-{
- zval **streamind, **weekstart, **next, **zvalue;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- datetime_t mydate;
-
- myargc=ZEND_NUM_ARGS();
- if (myargc != 3 || zend_get_parameters_ex(3, &streamind, &weekstart, &next) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(weekstart);
- convert_to_array_ex(next);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(next), "year", sizeof("year"), (void **) &zvalue) == SUCCESS) {
- SEPARATE_ZVAL(zvalue);
- convert_to_long_ex(zvalue);
- mydate.year = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(next), "month", sizeof("month"), (void **) &zvalue) == SUCCESS) {
- SEPARATE_ZVAL(zvalue);
- convert_to_long_ex(zvalue);
- mydate.mon = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(next), "mday", sizeof("mday"), (void **) &zvalue) == SUCCESS) {
- SEPARATE_ZVAL(zvalue);
- convert_to_long_ex(zvalue);
- mydate.mday = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(next), "hour", sizeof("hour"), (void **) &zvalue) == SUCCESS) {
- SEPARATE_ZVAL(zvalue);
- convert_to_long_ex(zvalue);
- mydate.hour = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(next), "min", sizeof("min"), (void **) &zvalue) == SUCCESS) {
- SEPARATE_ZVAL(zvalue);
- convert_to_long_ex(zvalue);
- mydate.min = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(next), "sec", sizeof("sec"), (void **) &zvalue) == SUCCESS) {
- SEPARATE_ZVAL(zvalue);
- convert_to_long_ex(zvalue);
- mydate.sec = Z_LVAL_PP(zvalue);
- }
-
- calevent_next_recurrence(mcal_le_struct->event, &mydate, Z_LVAL_PP(weekstart));
-
- if (object_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (mydate.has_date) {
- add_property_long(return_value, "year", mydate.year);
- add_property_long(return_value, "month", mydate.mon);
- add_property_long(return_value, "mday", mydate.mday);
- }
- if (mydate.has_time) {
- add_property_long(return_value, "hour", mydate.hour);
- add_property_long(return_value, "min", mydate.min);
- add_property_long(return_value, "sec", mydate.sec);
- }
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_recur_none(int stream_id)
- Create a daily recurrence */
-PHP_FUNCTION(mcal_event_set_recur_none)
-{
- zval **streamind;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- calevent_recur_none(mcal_le_struct->event);
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_recur_daily(int stream_id, int year, int month, int day, int interval)
- Create a daily recurrence */
-PHP_FUNCTION(mcal_event_set_recur_daily)
-{
- zval **streamind, **year, **month, **day, **interval;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- datetime_t endtime = DT_INIT;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 5 || zend_get_parameters_ex(5, &streamind, &year, &month, &day, &interval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(interval);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&endtime, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- calevent_recur_daily(mcal_le_struct->event, &endtime, Z_LVAL_PP(interval));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_recur_weekly(int stream_id, int year, int month, int day, int interval, int weekdays)
- Create a weekly recurrence */
-PHP_FUNCTION(mcal_event_set_recur_weekly)
-{
- zval **streamind, **year, **month, **day, **interval, **weekdays;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- datetime_t endtime=DT_INIT;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 6 || zend_get_parameters_ex(6, &streamind, &year, &month, &day, &interval, &weekdays) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(interval);
- convert_to_long_ex(weekdays);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&endtime, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- calevent_recur_weekly(mcal_le_struct->event, &endtime, Z_LVAL_PP(interval), Z_LVAL_PP(weekdays));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_recur_monthly_mday(int stream_id, int year, int month, int day, int interval)
- Create a monthly by day recurrence */
-PHP_FUNCTION(mcal_event_set_recur_monthly_mday)
-{
- zval **streamind, **year, **month, **day, **interval;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- datetime_t endtime=DT_INIT;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 5 || zend_get_parameters_ex(5, &streamind, &year, &month, &day, &interval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(interval);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&endtime, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- calevent_recur_monthly_mday(mcal_le_struct->event, &endtime, Z_LVAL_PP(interval));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_recur_monthly_wday(int stream_id, int year, int month, int day, int interval)
- Create a monthly by week recurrence */
-PHP_FUNCTION(mcal_event_set_recur_monthly_wday)
-{
- zval **streamind, **year, **month, **day, **interval;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- datetime_t endtime=DT_INIT;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 5 || zend_get_parameters_ex(5, &streamind, &year, &month, &day, &interval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(interval);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&endtime, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- calevent_recur_monthly_wday(mcal_le_struct->event, &endtime, Z_LVAL_PP(interval));
-}
-/* }}} */
-
-/* {{{ proto string mcal_event_set_recur_yearly(int stream_id, int year, int month, int day, int interval)
- Create a yearly recurrence */
-PHP_FUNCTION(mcal_event_set_recur_yearly)
-{
- zval **streamind, **year, **month, **day, **interval;
- int ind, ind_type;
- pils *mcal_le_struct;
- int myargc;
- datetime_t endtime=DT_INIT;
-
- myargc = ZEND_NUM_ARGS();
- if (myargc != 5 || zend_get_parameters_ex(5, &streamind, &year, &month, &day, &interval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(streamind);
- convert_to_long_ex(year);
- convert_to_long_ex(month);
- convert_to_long_ex(day);
- convert_to_long_ex(interval);
-
- ind = Z_LVAL_PP(streamind);
- mcal_le_struct = (pils *)zend_list_find(ind, &ind_type);
- if (!mcal_le_struct) {
- php_error(E_WARNING, "Unable to find stream pointer");
- RETURN_FALSE;
- }
-
- dt_setdate(&endtime, Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day));
- calevent_recur_yearly(mcal_le_struct->event, &endtime, Z_LVAL_PP(interval));
-}
-/* }}} */
-
-
-/* Interfaces to callbacks */
-void cc_searched (unsigned long cal_uid)
-{
- if (g_cal_list == NULL) {
- g_cal_list = malloc(sizeof(struct cal_list));
- g_cal_list->uid = cal_uid;
- g_cal_list->next = NULL;
- g_cal_list_end = g_cal_list;
- }
- else {
- g_cal_list_end->next = malloc(sizeof(struct cal_list));
- g_cal_list_end = g_cal_list_end->next;
- g_cal_list_end->uid = cal_uid;
- g_cal_list_end->next = NULL;
- }
-}
-
-void cc_appended(php_uint32 uid)
-{
-}
-
-void cc_fetched(const CALEVENT *event)
-{
-}
-
-void cc_login(const char **user, const char **pwd)
-{
- *user=mcal_user;
- *pwd=mcal_password;
-}
-
-void cc_vlog(const char *fmt,va_list ap)
-{
-}
-
-void cc_vdlog(const char *fmt,va_list ap)
-{
-}
-
-#endif
-
-/*
- * Local_ variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mcal/php_mcal.h b/ext/mcal/php_mcal.h
deleted file mode 100644
index 07b32a2a7f..0000000000
--- a/ext/mcal/php_mcal.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* $Id$ */
-
-#ifndef PHP_MCAL_H
-#define PHP_MCAL_H
-
-#if HAVE_MCAL
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-/* Functions accessable to PHP */
-extern zend_module_entry php_mcal_module_entry;
-#define php_mcal_module_ptr &php_mcal_module_entry
-
-extern int mcal_init_request(INIT_FUNC_ARGS);
-extern int mcal_end_request(void);
-
-PHP_MINIT_FUNCTION(mcal);
-PHP_MINFO_FUNCTION(mcal);
-
-PHP_FUNCTION(mcal_open);
-PHP_FUNCTION(mcal_popen);
-PHP_FUNCTION(mcal_reopen);
-PHP_FUNCTION(mcal_close);
-PHP_FUNCTION(mcal_fetch_event);
-PHP_FUNCTION(mcal_list_events);
-PHP_FUNCTION(mcal_create_calendar);
-PHP_FUNCTION(mcal_rename_calendar);
-PHP_FUNCTION(mcal_delete_calendar);
-PHP_FUNCTION(mcal_append_event);
-PHP_FUNCTION(mcal_store_event);
-PHP_FUNCTION(mcal_delete_event);
-PHP_FUNCTION(mcal_snooze);
-PHP_FUNCTION(mcal_list_alarms);
-PHP_FUNCTION(mcal_event_set_category);
-PHP_FUNCTION(mcal_event_set_title);
-PHP_FUNCTION(mcal_event_set_description);
-PHP_FUNCTION(mcal_event_set_start);
-PHP_FUNCTION(mcal_event_set_end);
-PHP_FUNCTION(mcal_event_set_alarm);
-PHP_FUNCTION(mcal_event_set_class);
-PHP_FUNCTION(mcal_event_add_attribute);
-PHP_FUNCTION(mcal_is_leap_year);
-PHP_FUNCTION(mcal_days_in_month);
-PHP_FUNCTION(mcal_date_valid);
-PHP_FUNCTION(mcal_time_valid);
-PHP_FUNCTION(mcal_day_of_week);
-PHP_FUNCTION(mcal_day_of_year);
-PHP_FUNCTION(mcal_week_of_year);
-PHP_FUNCTION(mcal_date_compare);
-PHP_FUNCTION(mcal_event_init);
-PHP_FUNCTION(mcal_next_recurrence);
-PHP_FUNCTION(mcal_event_set_recur_none);
-PHP_FUNCTION(mcal_event_set_recur_daily);
-PHP_FUNCTION(mcal_event_set_recur_weekly);
-PHP_FUNCTION(mcal_event_set_recur_monthly_mday);
-PHP_FUNCTION(mcal_event_set_recur_monthly_wday);
-PHP_FUNCTION(mcal_event_set_recur_yearly);
-PHP_FUNCTION(mcal_fetch_current_stream_event);
-
-#else
-#define php_mcal_module_ptr NULL
-#endif /* HAVE_MCAL */
-
-#define phpext_mcal_ptr php_mcal_module_ptr
-
-#endif
diff --git a/ext/mcrypt/CREDITS b/ext/mcrypt/CREDITS
deleted file mode 100644
index 00f871b171..0000000000
--- a/ext/mcrypt/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mcrypt
-Sascha Schumann, Derick Rethans
diff --git a/ext/mcrypt/TODO b/ext/mcrypt/TODO
deleted file mode 100644
index e18567de07..0000000000
--- a/ext/mcrypt/TODO
+++ /dev/null
@@ -1,6 +0,0 @@
-/* $Id$ */
-
-TODO:
-- Convert to zend_parse_parameters
-- Unify error handling
-- Get rid of libmcrypt 2.2.x compability
diff --git a/ext/mcrypt/config.m4 b/ext/mcrypt/config.m4
deleted file mode 100644
index bae44a3d4b..0000000000
--- a/ext/mcrypt/config.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mcrypt, for mcrypt support,
-[ --with-mcrypt[=DIR] Include mcrypt support.])
-
-if test "$PHP_MCRYPT" != "no"; then
- for i in /usr/local /usr $PHP_MCRYPT; do
- if test -f $i/include/mcrypt.h; then
- MCRYPT_DIR=$i
- fi
- done
-
- if test -z "$MCRYPT_DIR"; then
- AC_MSG_ERROR(mcrypt.h not found. Please reinstall libmcrypt.)
- fi
-
- PHP_CHECK_LIBRARY(mcrypt, mcrypt_module_open,
- [
- PHP_ADD_LIBRARY(ltdl,, MCRYPT_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBMCRYPT24,1,[ ])
-
- PHP_CHECK_LIBRARY(mcrypt, mcrypt_generic_deinit,
- [
- AC_DEFINE(HAVE_MCRYPT_GENERIC_DEINIT,1,[ ])
- ],[],[
- -L$MCRYPT_DIR/lib
- ])
-
- ],[
- PHP_CHECK_LIBRARY(mcrypt, init_mcrypt,
- [
- AC_DEFINE(HAVE_LIBMCRYPT22,1,[ ])
- ],[
- AC_MSG_ERROR([Sorry, I was not able to diagnose which libmcrypt version you have installed.])
- ],[
- -L$MCRYPT_DIR/lib
- ])
-
- ],[
- -L$MCRYPT_DIR/lib -lltdl
- ])
-
- PHP_ADD_LIBRARY_WITH_PATH(mcrypt, $MCRYPT_DIR/lib, MCRYPT_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MCRYPT_DIR/include)
- AC_DEFINE(HAVE_LIBMCRYPT,1,[ ])
-
- PHP_SUBST(MCRYPT_SHARED_LIBADD)
- PHP_NEW_EXTENSION(mcrypt, mcrypt.c, $ext_shared)
-fi
diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c
deleted file mode 100644
index 53006158d9..0000000000
--- a/ext/mcrypt/mcrypt.c
+++ /dev/null
@@ -1,1646 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Derick Rethans <d.rethans@jdimedia.nl> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_LIBMCRYPT
-
-#include "php_mcrypt.h"
-#include "fcntl.h"
-
-#define NON_FREE
-#define MCRYPT2
-#include "mcrypt.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-
-static int le_mcrypt;
-
-
-function_entry mcrypt_functions[] = {
- PHP_FE(mcrypt_ecb, NULL)
- PHP_FE(mcrypt_cbc, NULL)
- PHP_FE(mcrypt_cfb, NULL)
- PHP_FE(mcrypt_ofb, NULL)
- PHP_FE(mcrypt_get_key_size, NULL)
- PHP_FE(mcrypt_get_block_size, NULL)
- PHP_FE(mcrypt_get_cipher_name, NULL)
- PHP_FE(mcrypt_create_iv, NULL)
-#if HAVE_LIBMCRYPT24
- PHP_FE(mcrypt_list_algorithms, NULL)
- PHP_FE(mcrypt_list_modes, NULL)
- PHP_FE(mcrypt_get_iv_size, NULL)
- PHP_FE(mcrypt_encrypt, NULL)
- PHP_FE(mcrypt_decrypt, NULL)
-
- PHP_FE(mcrypt_module_open, NULL)
- PHP_FE(mcrypt_generic_init, NULL)
- PHP_FE(mcrypt_generic, NULL)
- PHP_FE(mdecrypt_generic, NULL)
- PHP_FE(mcrypt_generic_end, NULL)
-#if HAVE_MCRYPT_GENERIC_DEINIT
- PHP_FE(mcrypt_generic_deinit, NULL)
-#endif
- PHP_FE(mcrypt_enc_self_test, NULL)
- PHP_FE(mcrypt_enc_is_block_algorithm_mode, NULL)
- PHP_FE(mcrypt_enc_is_block_algorithm, NULL)
- PHP_FE(mcrypt_enc_is_block_mode, NULL)
- PHP_FE(mcrypt_enc_get_block_size, NULL)
- PHP_FE(mcrypt_enc_get_key_size, NULL)
- PHP_FE(mcrypt_enc_get_supported_key_sizes, NULL)
- PHP_FE(mcrypt_enc_get_iv_size, NULL)
- PHP_FE(mcrypt_enc_get_algorithms_name, NULL)
- PHP_FE(mcrypt_enc_get_modes_name, NULL)
- PHP_FE(mcrypt_module_self_test, NULL)
-
- PHP_FE(mcrypt_module_is_block_algorithm_mode, NULL)
- PHP_FE(mcrypt_module_is_block_algorithm, NULL)
- PHP_FE(mcrypt_module_is_block_mode, NULL)
- PHP_FE(mcrypt_module_get_algo_block_size, NULL)
- PHP_FE(mcrypt_module_get_algo_key_size, NULL)
- PHP_FE(mcrypt_module_get_supported_key_sizes, NULL)
-
- PHP_FE(mcrypt_module_close, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-static PHP_MINFO_FUNCTION(mcrypt);
-static PHP_MINIT_FUNCTION(mcrypt);
-static PHP_MSHUTDOWN_FUNCTION(mcrypt);
-
-zend_module_entry mcrypt_module_entry = {
- STANDARD_MODULE_HEADER,
- "mcrypt",
- mcrypt_functions,
- PHP_MINIT(mcrypt), PHP_MSHUTDOWN(mcrypt),
- NULL, NULL,
- PHP_MINFO(mcrypt),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-
-#if HAVE_LIBMCRYPT24
-ZEND_DECLARE_MODULE_GLOBALS(mcrypt)
-#endif
-
-#ifdef COMPILE_DL_MCRYPT
-ZEND_GET_MODULE(mcrypt)
-#endif
-
-#define MCRYPT_ARGS2 \
- zval **cipher, **data, **key, **mode; \
- int td; \
- char *ndata; \
- size_t bsize; \
- size_t nr; \
- size_t nsize
-
-#define MCRYPT_ARGS \
- MCRYPT_ARGS2; \
- zval **iv
-
-#if HAVE_LIBMCRYPT22
-#define MCRYPT_CONVERT \
- convert_to_long_ex(cipher); \
- convert_to_long_ex(mode); \
- convert_to_string_ex(data); \
- convert_to_string_ex(key)
-#else
-#define MCRYPT_CONVERT \
- convert_to_string_ex(cipher); \
- convert_to_string_ex(mode); \
- convert_to_string_ex(data); \
- convert_to_string_ex(key)
-#define MCRYPT_CONVERT_WO_MODE \
- convert_to_string_ex(cipher); \
- convert_to_string_ex(data); \
- convert_to_string_ex(key)
-#endif
-
-#define MCRYPT_SIZE \
- bsize = mcrypt_get_block_size(Z_LVAL_PP(cipher)); \
- nr = (Z_STRLEN_PP(data) + bsize - 1) / bsize; \
- nsize = nr * bsize
-
-#define MCRYPT_CHECK_TD_CPY \
- if(td < 0) { \
- php_error(E_WARNING, MCRYPT_FAILED); \
- RETURN_FALSE; \
- } \
- ndata = ecalloc(nr, bsize); \
- memcpy(ndata, Z_STRVAL_PP(data), Z_STRLEN_PP(data))
-
-#define MCRYPT_CHECK_IV \
- convert_to_string_ex(iv); \
- if(Z_STRLEN_PP(iv) != bsize) { \
- php_error(E_WARNING, MCRYPT_IV_WRONG_SIZE); \
- RETURN_FALSE; \
- }
-
-#define MCRYPT_ACTION(x) \
- if(Z_LVAL_PP(mode) == 0) \
- mcrypt_##x(td, ndata, nsize); \
- else \
- mdecrypt_##x(td, ndata, nsize); \
- end_mcrypt_##x(td)
-
-#define MCRYPT_IV_WRONG_SIZE "The IV parameter must be as long as the blocksize"
-
-#if HAVE_LIBMCRYPT24
-#define MCRYPT_ENCRYPT 0
-#define MCRYPT_DECRYPT 1
-
-#define MCRYPT_GET_INI \
- cipher_dir_string = MCG(algorithms_dir); \
- module_dir_string = MCG(modes_dir);
-
-#define MCRYPT_CHECK_PARAM_COUNT(a,b) \
- if (argc < (a) || argc > (b)) { \
- WRONG_PARAM_COUNT; \
- }
-
-#define MCRYPT_GET_CRYPT_ARGS \
- switch (argc) { \
- case 5: \
- if (zend_get_parameters_ex(5, &cipher, &key, &data, &mode, &iv) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_string_ex(iv); \
- break; \
- case 4: \
- if (zend_get_parameters_ex(4, &cipher, &key, &data, &mode) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } \
- iv = NULL; \
- break; \
- default: \
- WRONG_PARAM_COUNT; \
- }
-
-#define MCRYPT_GET_TD_ARG \
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &mcryptind) == FAILURE) { \
- WRONG_PARAM_COUNT \
- } \
- ZEND_FETCH_RESOURCE (td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
-
-#define MCRYPT_GET_MODE_DIR_ARGS(DIRECTORY) \
- char *dir = NULL; \
- int dir_len; \
- char *module; \
- int module_len; \
- if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, \
- "s|s", &module, &module_len, &dir, &dir_len) == FAILURE) { \
- return; \
- }
-
-#endif
-
-#if HAVE_LIBMCRYPT22
-#define MCRYPT_FAILED "mcrypt initialization failed"
-#else
-#define MCRYPT_OPEN_MODULE_FAILED "mcrypt module initialization failed"
-#endif
-
-#if HAVE_LIBMCRYPT22
-#define MCRYPT_ENTRY_NAMED(a,b) REGISTER_LONG_CONSTANT("MCRYPT_" #a, b, CONST_PERSISTENT)
-#define MCRYPT_ENTRY2(a) MCRYPT_ENTRY_NAMED(a, MCRYPT_##a)
-#define MCRYPT_ENTRY(a) MCRYPT_ENTRY_NAMED(a, a)
-#else /* MCRYPT_2_4 */
-#define MCRYPT_ENTRY2_2_4(a,b) REGISTER_STRING_CONSTANT("MCRYPT_" #a, b, CONST_PERSISTENT)
-#define MCRYPT_ENTRY2_4(a) MCRYPT_ENTRY_NAMED(a, a)
-#endif
-
-#if HAVE_LIBMCRYPT24
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("mcrypt.algorithms_dir", NULL, PHP_INI_ALL, OnUpdateString, algorithms_dir, zend_mcrypt_globals, mcrypt_globals)
- STD_PHP_INI_ENTRY("mcrypt.modes_dir", NULL, PHP_INI_ALL, OnUpdateString, modes_dir, zend_mcrypt_globals, mcrypt_globals)
-PHP_INI_END()
-#endif
-
-static void php_mcrypt_module_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-#if HAVE_LIBMCRYPT24
- MCRYPT td = (MCRYPT) rsrc->ptr;
- mcrypt_module_close (td);
-#endif
-}
-
-
-static PHP_MINIT_FUNCTION(mcrypt)
-{
-#if defined(ZTS) && defined(HAVE_LIBMCRYPT24)
- ZEND_INIT_MODULE_GLOBALS(mcrypt, NULL, NULL);
- Z_TYPE(mcrypt_module_entry) = type;
-#endif
-
- le_mcrypt = zend_register_list_destructors_ex(php_mcrypt_module_dtor, NULL, "mcrypt", module_number);
-
- /* modes for mcrypt_??? routines */
- REGISTER_LONG_CONSTANT("MCRYPT_ENCRYPT", 0, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MCRYPT_DECRYPT", 1, CONST_PERSISTENT);
-
- /* sources for mcrypt_create_iv */
- REGISTER_LONG_CONSTANT("MCRYPT_DEV_RANDOM", 0, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MCRYPT_DEV_URANDOM", 1, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MCRYPT_RAND", 2, CONST_PERSISTENT);
-
- /* ciphers */
-#if HAVE_LIBMCRYPT22
- MCRYPT_ENTRY2(3DES);
- MCRYPT_ENTRY2(3WAY);
- MCRYPT_ENTRY2(BLOWFISH_128);
- MCRYPT_ENTRY2(BLOWFISH_192);
- MCRYPT_ENTRY2(BLOWFISH_256);
- MCRYPT_ENTRY2(BLOWFISH_448);
- MCRYPT_ENTRY2(CAST_128);
- MCRYPT_ENTRY2(CAST_256);
- MCRYPT_ENTRY2(DES);
- MCRYPT_ENTRY2(GOST);
- MCRYPT_ENTRY2(IDEA);
- MCRYPT_ENTRY2(LOKI97);
- MCRYPT_ENTRY2(RIJNDAEL_128);
- MCRYPT_ENTRY2(RIJNDAEL_192);
- MCRYPT_ENTRY2(RIJNDAEL_256);
- MCRYPT_ENTRY2(RC2_128);
- MCRYPT_ENTRY2(RC2_256);
- MCRYPT_ENTRY2(RC2_1024);
- MCRYPT_ENTRY2(RC4);
- MCRYPT_ENTRY2(RC6_128);
- MCRYPT_ENTRY2(RC6_192);
- MCRYPT_ENTRY2(RC6_256);
- MCRYPT_ENTRY2(SAFER_64);
- MCRYPT_ENTRY2(SAFER_128);
- MCRYPT_ENTRY2(SAFERPLUS);
- MCRYPT_ENTRY2(SERPENT_128);
- MCRYPT_ENTRY2(SERPENT_192);
- MCRYPT_ENTRY2(SERPENT_256);
- MCRYPT_ENTRY2(TWOFISH_128);
- MCRYPT_ENTRY2(TWOFISH_192);
- MCRYPT_ENTRY2(TWOFISH_256);
- MCRYPT_ENTRY2(XTEA);
-#endif
-#if HAVE_LIBMCRYPT24
- MCRYPT_ENTRY2_2_4(3DES, "tripledes");
- MCRYPT_ENTRY2_2_4(ARCFOUR_IV, "arcfour-iv");
- MCRYPT_ENTRY2_2_4(ARCFOUR, "arcfour");
- MCRYPT_ENTRY2_2_4(BLOWFISH, "blowfish");
- MCRYPT_ENTRY2_2_4(BLOWFISH_COMPAT, "blowfish-compat");
- MCRYPT_ENTRY2_2_4(CAST_128, "cast-128");
- MCRYPT_ENTRY2_2_4(CAST_256, "cast-256");
- MCRYPT_ENTRY2_2_4(CRYPT, "crypt");
- MCRYPT_ENTRY2_2_4(DES, "des");
- MCRYPT_ENTRY2_2_4(ENIGNA, "crypt");
- MCRYPT_ENTRY2_2_4(GOST, "gost");
- MCRYPT_ENTRY2_2_4(LOKI97, "loki97");
- MCRYPT_ENTRY2_2_4(PANAMA, "panama");
- MCRYPT_ENTRY2_2_4(RC2, "rc2");
- MCRYPT_ENTRY2_2_4(RIJNDAEL_128, "rijndael-128");
- MCRYPT_ENTRY2_2_4(RIJNDAEL_192, "rijndael-192");
- MCRYPT_ENTRY2_2_4(RIJNDAEL_256, "rijndael-256");
- MCRYPT_ENTRY2_2_4(SAFER64, "safer-sk64");
- MCRYPT_ENTRY2_2_4(SAFER128, "safer-sk128");
- MCRYPT_ENTRY2_2_4(SAFERPLUS, "saferplus");
- MCRYPT_ENTRY2_2_4(SERPENT, "serpent");
- MCRYPT_ENTRY2_2_4(THREEWAY, "threeway");
- MCRYPT_ENTRY2_2_4(TRIPLEDES, "tripledes");
- MCRYPT_ENTRY2_2_4(TWOFISH, "twofish");
- MCRYPT_ENTRY2_2_4(WAKE, "wake");
- MCRYPT_ENTRY2_2_4(XTEA, "xtea");
-
- MCRYPT_ENTRY2_2_4(IDEA, "idea");
- MCRYPT_ENTRY2_2_4(MARS, "mars");
- MCRYPT_ENTRY2_2_4(RC6, "rc6");
- MCRYPT_ENTRY2_2_4(SKIPJACK, "skipjack");
-/* modes */
- MCRYPT_ENTRY2_2_4(MODE_CBC, "cbc");
- MCRYPT_ENTRY2_2_4(MODE_CFB, "cfb");
- MCRYPT_ENTRY2_2_4(MODE_ECB, "ecb");
- MCRYPT_ENTRY2_2_4(MODE_NOFB, "nofb");
- MCRYPT_ENTRY2_2_4(MODE_OFB, "ofb");
- MCRYPT_ENTRY2_2_4(MODE_STREAM, "stream");
- REGISTER_INI_ENTRIES();
-#endif
- return SUCCESS;
-}
-
-static PHP_MSHUTDOWN_FUNCTION(mcrypt)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-#include "ext/standard/php_smart_str.h"
-
-PHP_MINFO_FUNCTION(mcrypt)
-{
-#if HAVE_LIBMCRYPT24
- char **modules;
- int i, count;
- smart_str tmp1 = {0};
- smart_str tmp2 = {0};
-
- modules = mcrypt_list_algorithms (MCG(algorithms_dir), &count);
- if (count == 0) {
- smart_str_appends (&tmp1, "none");
- }
- for (i = 0; i < count; i++) {
- smart_str_appends (&tmp1, modules[i]);
- smart_str_appendc (&tmp1, ' ');
- }
- smart_str_0 (&tmp1);
- mcrypt_free_p (modules, count);
-
- modules = mcrypt_list_modes (MCG(modes_dir), &count);
- if (count == 0) {
- smart_str_appends (&tmp2, "none");
- }
- for (i = 0; i < count; i++) {
- smart_str_appends (&tmp2, modules[i]);
- smart_str_appendc (&tmp2, ' ');
- }
- smart_str_0 (&tmp2);
- mcrypt_free_p (modules, count);
-#endif
-
- php_info_print_table_start();
- php_info_print_table_header(2, "mcrypt support", "enabled");
-#if HAVE_LIBMCRYPT22
- php_info_print_table_row(2, "version", "2.2.x");
-#endif
-#if HAVE_LIBMCRYPT24
- php_info_print_table_row(2, "version", "2.4.x");
- php_info_print_table_row(2, "Supported ciphers", tmp1.c);
- php_info_print_table_row(2, "Supported modes", tmp2.c);
- smart_str_free (&tmp1);
- smart_str_free (&tmp2);
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-typedef enum {
- RANDOM = 0,
- URANDOM,
- RAND
-} iv_source;
-
-#if HAVE_LIBMCRYPT24
-
-/* {{{ proto resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)
- Opens the module of the algorithm and the mode to be used */
-PHP_FUNCTION(mcrypt_module_open)
-{
- zval **cipher, **cipher_directory, **mode, **mode_directory;
- MCRYPT td;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (4,4)
-
- zend_get_parameters_ex(4, &cipher, &cipher_directory, &mode, &mode_directory);
- convert_to_string_ex(cipher);
- convert_to_string_ex(cipher_directory);
- convert_to_string_ex(mode);
- convert_to_string_ex(mode_directory);
-
- td = mcrypt_module_open (Z_STRVAL_PP(cipher),
- Z_STRLEN_PP(cipher_directory) > 0 ? Z_STRVAL_PP(cipher_directory) : MCG(algorithms_dir),
- Z_STRVAL_PP(mode),
- Z_STRLEN_PP(mode_directory) > 0 ? Z_STRVAL_PP(mode_directory) : MCG(modes_dir));
-
- if (td == MCRYPT_FAILED) {
- php_error (E_WARNING, "could not open encryption module");
- RETURN_FALSE;
- } else {
- ZEND_REGISTER_RESOURCE (return_value, td, le_mcrypt);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_generic_init(resource td, string key, string iv)
- This function initializes all buffers for the specific module */
-PHP_FUNCTION(mcrypt_generic_init)
-{
- zval **key, **iv;
- zval **mcryptind;
- unsigned char *key_s, *iv_s;
- char dummy[256];
- int max_key_size, key_size, iv_size;
- MCRYPT td;
- int argc;
- int result = 0;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (3,3)
-
- zend_get_parameters_ex(3, &mcryptind, &key, &iv);
- ZEND_FETCH_RESOURCE (td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
- convert_to_string_ex (key);
- convert_to_string_ex (iv);
-
- max_key_size = mcrypt_enc_get_key_size (td);
- iv_size = mcrypt_enc_get_iv_size (td);
-
- if (Z_STRLEN_PP(key) == 0) {
- php_error (E_WARNING, "key size is 0");
- }
-
- key_s = emalloc (Z_STRLEN_PP(key));
- memset (key_s, 0, Z_STRLEN_PP(key));
-
- iv_s = emalloc (iv_size + 1);
- memset (iv_s, 0, iv_size + 1);
-
- if (Z_STRLEN_PP(key) > max_key_size) {
- sprintf (dummy, "key size too large; supplied length: %d, max: %d",
- Z_STRLEN_PP(key), max_key_size);
- php_error (E_WARNING, dummy);
- key_size = max_key_size;
- } else {
- key_size = Z_STRLEN_PP(key);
- }
- memcpy (key_s, Z_STRVAL_PP(key), Z_STRLEN_PP(key));
-
- if (Z_STRLEN_PP(iv) != iv_size) {
- sprintf (dummy, "iv size incorrect; supplied length: %d, needed: %d",
- Z_STRLEN_PP(iv), iv_size);
- php_error (E_WARNING, dummy);
- }
- memcpy (iv_s, Z_STRVAL_PP(iv), iv_size);
-
- result = mcrypt_generic_init (td, key_s, key_size, iv_s);
-
- /* If this function fails, close the mcrypt module to prevent crashes
- * when further functions want to access this resource */
- if (result < 0) {
- zend_list_delete (Z_LVAL_PP(mcryptind));
- switch (result) {
- case -3:
- php_error (E_WARNING, "mcrypt_generic_init: Key length incorrect");
- break;
- case -4:
- php_error (E_WARNING, "mcrypt_generic_init: Memory allocation error");
- break;
- case -1:
- default:
- php_error (E_WARNING, "mcrypt_generic_init: Unknown error");
- break;
- }
- }
- RETVAL_LONG (result);
-
- efree (iv_s);
- efree (key_s);
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_generic(resource td, string data)
- This function encrypts the plaintext */
-PHP_FUNCTION(mcrypt_generic)
-{
- zval **data, **mcryptind;
- MCRYPT td;
- int argc;
- unsigned char* data_s;
- int block_size, data_size;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (2,2)
-
- zend_get_parameters_ex(2, &mcryptind, &data);
- ZEND_FETCH_RESOURCE (td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
- convert_to_string_ex (data);
-
- /* Check blocksize */
- if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
- block_size = mcrypt_enc_get_block_size (td);
- data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
- data_s = emalloc (data_size + 1);
- memset (data_s, 0, data_size);
- memcpy (data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
- else { /* It's not a block algorithm */
- data_size = Z_STRLEN_PP(data);
- data_s = emalloc (data_size + 1);
- memset (data_s, 0, data_size);
- memcpy (data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- mcrypt_generic (td, data_s, data_size);
- data_s[data_size] = '\0';
-
- RETVAL_STRINGL (data_s, data_size, 1);
- efree (data_s);
-}
-/* }}} */
-
-
-/* {{{ proto string mdecrypt_generic(resource td, string data)
- This function decrypts the plaintext */
-PHP_FUNCTION(mdecrypt_generic)
-{
- zval **data, **mcryptind;
- MCRYPT td;
- int argc;
- char* data_s;
- int block_size, data_size;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (2,2)
-
- zend_get_parameters_ex(2, &mcryptind, &data);
- ZEND_FETCH_RESOURCE (td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
- convert_to_string_ex (data);
-
- /* Check blocksize */
- if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
- block_size = mcrypt_enc_get_block_size (td);
- data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
- data_s = emalloc (data_size + 1);
- memset (data_s, 0, data_size);
- memcpy (data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
- else { /* It's not a block algorithm */
- data_size = Z_STRLEN_PP(data);
- data_s = emalloc (data_size + 1);
- memset (data_s, 0, data_size);
- memcpy (data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- mdecrypt_generic (td, data_s, data_size);
-
- RETVAL_STRINGL (data_s, data_size, 1);
- efree (data_s);
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_supported_key_sizes(resource td)
- This function decrypts the crypttext */
-PHP_FUNCTION(mcrypt_enc_get_supported_key_sizes)
-{
- zval **mcryptind;
- MCRYPT td;
- int argc, i, count;
- int *key_sizes;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_GET_TD_ARG
-
- key_sizes = mcrypt_enc_get_supported_key_sizes (td, &count);
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- return;
- }
- if (count != 0) {
- for (i = 0; i < count; i++) {
- add_index_long(return_value, i, key_sizes[i]);
- }
- }
- mcrypt_free (key_sizes);
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_self_test(resource td)
- This function runs the self test on the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_self_test)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- RETURN_LONG (mcrypt_enc_self_test (td));
-}
-/* }}} */
-
-/* {{{ proto bool mcrypt_module_close(resource td)
- Free the descriptor td */
-PHP_FUNCTION(mcrypt_module_close)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- zend_list_delete (Z_LVAL_PP(mcryptind));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_generic_end(resource td)
- This function terminates encrypt specified by the descriptor td */
-PHP_FUNCTION(mcrypt_generic_end)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
-#if HAVE_MCRYPT_GENERIC_DEINIT
- php_error(E_NOTICE, "mcrypt_generic_end is deprecated, please use mcrypt_generic_deinit");
- if (mcrypt_generic_deinit (td) < 0) {
-#else
- if (mcrypt_generic_end (td) < 0) {
-#endif
- php_error (E_WARNING, "could not terminate encryption specifier");
- RETURN_FALSE
- }
- RETURN_TRUE
-}
-/* }}} */
-
-
-#if HAVE_MCRYPT_GENERIC_DEINIT
-
-/* {{{ proto bool mcrypt_generic_deinit(resource td)
- This function terminates encrypt specified by the descriptor td */
-PHP_FUNCTION(mcrypt_generic_deinit)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_generic_deinit (td) < 0) {
- php_error (E_WARNING, "could not terminate encryption specifier");
- RETURN_FALSE
- }
- RETURN_TRUE
-}
-/* }}} */
-
-#endif
-
-
-/* {{{ proto bool mcrypt_enc_is_block_algorithm_mode(resource td)
- Returns TRUE if the mode is for use with block algorithms */
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm_mode)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_enc_is_block_algorithm_mode (td) == 1)
- RETURN_TRUE
- else
- RETURN_FALSE
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_enc_is_block_algorithm(resource td)
- Returns TRUE if the alrogithm is a block algorithms */
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_enc_is_block_algorithm (td) == 1)
- RETURN_TRUE
- else
- RETURN_FALSE
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_enc_is_block_mode(resource td)
- Returns TRUE if the mode outputs blocks */
-PHP_FUNCTION(mcrypt_enc_is_block_mode)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_enc_is_block_mode (td) == 1)
- RETURN_TRUE
- else
- RETURN_FALSE
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_block_size(resource td)
- Returns the block size of the cipher specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_block_size)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- RETURN_LONG (mcrypt_enc_get_block_size (td));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_key_size(resource td)
- Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_key_size)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- RETURN_LONG (mcrypt_enc_get_key_size (td));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_iv_size(resource td)
- Returns the size of the IV in bytes of the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_iv_size)
-{
- zval **mcryptind;
- MCRYPT td;
-
- MCRYPT_GET_TD_ARG
-
- RETURN_LONG (mcrypt_enc_get_iv_size (td));
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_enc_get_algorithms_name(resource td)
- Returns the name of the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_algorithms_name)
-{
- zval **mcryptind;
- MCRYPT td;
- char *name;
-
- MCRYPT_GET_TD_ARG
-
- name = mcrypt_enc_get_algorithms_name (td);
- RETVAL_STRING (name, 1);
- mcrypt_free (name);
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_enc_get_modes_name(resource td)
- Returns the name of the mode specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_modes_name)
-{
- zval **mcryptind;
- MCRYPT td;
- char *name;
-
- MCRYPT_GET_TD_ARG
-
- name = mcrypt_enc_get_modes_name (td);
- RETVAL_STRING (name, 1);
- mcrypt_free (name);
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_self_test(string algorithm [, string lib_dir])
- Does a self test of the module "module" */
-PHP_FUNCTION(mcrypt_module_self_test)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir);
-
- if (mcrypt_module_self_test (module, dir) == 0) {
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])
- Returns TRUE if the mode is for use with block algorithms */
-PHP_FUNCTION(mcrypt_module_is_block_algorithm_mode)
-{
- MCRYPT_GET_MODE_DIR_ARGS(modes_dir)
-
- if (mcrypt_module_is_block_algorithm_mode (module, dir) == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])
- Returns TRUE if the algorithm is a block algorithm */
-PHP_FUNCTION(mcrypt_module_is_block_algorithm)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir)
-
- if (mcrypt_module_is_block_algorithm (module, dir) == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_is_block_mode(string mode [, string lib_dir])
- Returns TRUE if the mode outputs blocks of bytes */
-PHP_FUNCTION(mcrypt_module_is_block_mode)
-{
- MCRYPT_GET_MODE_DIR_ARGS(modes_dir)
-
- if (mcrypt_module_is_block_mode (module, dir) == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])
- Returns the block size of the algorithm */
-PHP_FUNCTION(mcrypt_module_get_algo_block_size)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir)
-
- RETURN_LONG(mcrypt_module_get_algo_block_size (module, dir));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])
- Returns the maximum supported key size of the algorithm */
-PHP_FUNCTION(mcrypt_module_get_algo_key_size)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir);
-
- RETURN_LONG(mcrypt_module_get_algo_key_size (module, dir));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])
- This function decrypts the crypttext */
-PHP_FUNCTION(mcrypt_module_get_supported_key_sizes)
-{
- int argc, i, count;
- int *key_sizes;
-
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir)
-
- key_sizes = mcrypt_module_get_algo_supported_key_sizes (module, dir, &count);
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- return;
- }
- if (count != 0) {
- for (i = 0; i < count; i++) {
- add_index_long(return_value, i, key_sizes[i]);
- }
- }
- mcrypt_free (key_sizes);
-}
-/* }}} */
-
-
-/* {{{ proto array mcrypt_list_algorithms([string lib_dir])
- List all algorithms in "module_dir" */
-PHP_FUNCTION(mcrypt_list_algorithms)
-{
- zval **lib_dir;
- char **modules;
- char *lib_dir_s;
- int i, count, argc;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (0,1)
-
- switch (argc) {
- case 1:
- if (zend_get_parameters_ex (1, &lib_dir) == FAILURE) {
- WRONG_PARAM_COUNT
- }
- convert_to_string_ex (lib_dir);
- lib_dir_s = Z_STRVAL_PP(lib_dir);
- break;
- case 0:
- lib_dir_s = INI_STR("mcrypt.algorithms_dir");
- break;
- default:
- WRONG_PARAM_COUNT
- }
-
- modules = mcrypt_list_algorithms (lib_dir_s, &count);
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- return;
- }
- if (count == 0) {
- php_error (E_WARNING, "No algorithms found in module dir");
- }
- for (i = 0; i < count; i++) {
- add_index_string(return_value, i, modules[i], 1);
- }
- mcrypt_free_p (modules, count);
-}
-/* }}} */
-
-
-/* {{{ proto array mcrypt_list_modes([string lib_dir])
- List all modes "module_dir" */
-PHP_FUNCTION(mcrypt_list_modes)
-{
- zval **lib_dir;
- char **modules;
- char *lib_dir_s;
- int i, count, argc;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (0,1)
-
- switch (argc) {
- case 1:
- if (zend_get_parameters_ex (1, &lib_dir) == FAILURE) {
- WRONG_PARAM_COUNT
- }
- convert_to_string_ex (lib_dir);
- lib_dir_s = Z_STRVAL_PP(lib_dir);
- break;
- case 0:
- lib_dir_s = MCG(modes_dir);
- break;
- default:
- WRONG_PARAM_COUNT
- }
-
- modules = mcrypt_list_modes (lib_dir_s, &count);
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- return;
- }
- if (count == 0) {
- php_error (E_WARNING, "No modes found in module dir");
- }
- for (i = 0; i < count; i++) {
- add_index_string(return_value, i, modules[i], 1);
- }
- mcrypt_free_p (modules, count);
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_get_key_size(string cipher, string module)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_key_size)
-{
- zval **cipher;
- zval **module;
- char *cipher_dir_string;
- char *module_dir_string;
- long key_size;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &cipher, &module) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(cipher);
- convert_to_string_ex(module);
-
- td = mcrypt_module_open(
- Z_STRVAL_PP(cipher),
- cipher_dir_string,
- Z_STRVAL_PP(module),
- module_dir_string);
- if (td != MCRYPT_FAILED)
- {
- key_size = mcrypt_enc_get_key_size(td);
- mcrypt_module_close(td);
- RETVAL_LONG(key_size);
- }
- else
- {
- php_error (E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETVAL_LONG(0);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_get_block_size(string cipher, string module)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_block_size)
-{
- zval **cipher;
- zval **module;
- char *cipher_dir_string;
- char *module_dir_string;
- long key_size;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &cipher, &module) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(cipher);
- convert_to_string_ex(module);
-
- td = mcrypt_module_open(
- Z_STRVAL_PP(cipher),
- cipher_dir_string,
- Z_STRVAL_PP(module),
- module_dir_string);
- if (td != MCRYPT_FAILED)
- {
- key_size = mcrypt_enc_get_block_size(td);
- mcrypt_module_close(td);
- RETVAL_LONG(key_size);
- }
- else
- {
- php_error (E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETVAL_LONG(0);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_get_iv_size(string cipher, string module)
- Get the IV size of cipher (Usually the same as the blocksize) */
-PHP_FUNCTION(mcrypt_get_iv_size)
-{
- zval **cipher;
- zval **module;
- char *cipher_dir_string;
- char *module_dir_string;
- long key_size;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &cipher, &module) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(cipher);
- convert_to_string_ex(module);
-
- td = mcrypt_module_open(
- Z_STRVAL_PP(cipher),
- cipher_dir_string,
- Z_STRVAL_PP(module),
- module_dir_string);
- if (td != MCRYPT_FAILED)
- {
- key_size = mcrypt_enc_get_iv_size(td);
- mcrypt_module_close(td);
- RETURN_LONG(key_size);
- }
- else
- {
- php_error (E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_get_cipher_name(string cipher)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_cipher_name)
-{
- zval **cipher;
- char *cipher_dir_string;
- char *module_dir_string;
- char *cipher_name;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cipher) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(cipher);
-
- /* The code below is actually not very nice, but I didn see a better method */
- td = mcrypt_module_open(
- Z_STRVAL_PP(cipher),
- cipher_dir_string,
- "ecb",
- module_dir_string);
- if (td != MCRYPT_FAILED)
- {
- cipher_name = mcrypt_enc_get_algorithms_name(td);
- mcrypt_module_close(td);
- RETVAL_STRING(cipher_name,1);
- mcrypt_free (cipher_name);
- }
- else
- {
- td = mcrypt_module_open(
- Z_STRVAL_PP(cipher),
- cipher_dir_string,
- "stream",
- module_dir_string);
- if (td != MCRYPT_FAILED)
- {
- cipher_name = mcrypt_enc_get_algorithms_name(td);
- mcrypt_module_close(td);
- RETVAL_STRING(cipher_name,1);
- mcrypt_free (cipher_name);
- }
- else
- {
- php_error (E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-
-static void php_mcrypt_do_crypt (char* cipher, zval **key, zval **data, char *mode, zval **iv, int argc, int dencrypt, zval* return_value TSRMLS_DC)
-{
- char *cipher_dir_string;
- char *module_dir_string;
- int block_size, max_key_length, use_key_length, i, count, iv_size;
- unsigned long int data_size;
- int *key_length_sizes;
- char *key_s = NULL, *iv_s;
- char *data_s;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- td = mcrypt_module_open (
- cipher,
- cipher_dir_string,
- mode,
- module_dir_string);
- if (td == MCRYPT_FAILED) {
- php_error (E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
- /* Checking for key-length */
- max_key_length = mcrypt_enc_get_key_size (td);
- if (Z_STRLEN_PP(key) > max_key_length) {
- php_error (E_WARNING, "size of key is too large for this algorithm");
- }
- key_length_sizes = mcrypt_enc_get_supported_key_sizes (td, &count);
- if (count == 0 && key_length_sizes == NULL) { /* all lengths 1 - k_l_s = OK */
- use_key_length = Z_STRLEN_PP(key);
- key_s = emalloc (use_key_length);
- memset (key_s, 0, use_key_length);
- memcpy (key_s, Z_STRVAL_PP(key), use_key_length);
- }
- else if (count == 1) { /* only m_k_l = OK */
- key_s = emalloc (key_length_sizes[0]);
- memset (key_s, 0, key_length_sizes[0]);
- memcpy (key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), key_length_sizes[0]));
- use_key_length = key_length_sizes[0];
- }
- else { /* derterminating smallest supported key > length of requested key */
- use_key_length = max_key_length; /* start with max key length */
- for (i = 0; i < count; i++) {
- if (key_length_sizes[i] >= Z_STRLEN_PP(key) &&
- key_length_sizes[i] < use_key_length)
- {
- use_key_length = key_length_sizes[i];
- }
- }
- key_s = emalloc (use_key_length);
- memset (key_s, 0, use_key_length);
- memcpy (key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), use_key_length));
- }
- mcrypt_free (key_length_sizes);
-
- /* Check IV */
- iv_s = NULL;
- iv_size = mcrypt_enc_get_iv_size (td);
- if (argc == 5) {
- if (iv_size != Z_STRLEN_PP(iv)) {
- php_error (E_WARNING, MCRYPT_IV_WRONG_SIZE);
-
- }
- else {
- iv_s = emalloc (iv_size + 1);
- memcpy (iv_s, Z_STRVAL_PP(iv), iv_size);
- }
- }
- else if (argc == 4)
- {
- if (iv_size != 0) {
- php_error (E_WARNING, "attempt to use an empty IV, which is NOT recommend");
- iv_s = emalloc (iv_size + 1);
- memset (iv_s, 0, iv_size + 1);
- }
- }
-
- /* Check blocksize */
- if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
- block_size = mcrypt_enc_get_block_size (td);
- data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
- data_s = emalloc (data_size);
- memset (data_s, 0, data_size);
- memcpy (data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
- else { /* It's not a block algorithm */
- data_size = Z_STRLEN_PP(data);
- data_s = emalloc (data_size);
- memset (data_s, 0, data_size);
- memcpy (data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- if (mcrypt_generic_init (td, key_s, use_key_length, iv_s) < 0) {
- php_error (E_ERROR, "generic_init failed");
- }
- if (dencrypt == MCRYPT_ENCRYPT)
- mcrypt_generic (td, data_s, data_size);
- else
- mdecrypt_generic (td, data_s, data_size);
-
- RETVAL_STRINGL (data_s, data_size, 1);
-
-/* freeing vars */
- mcrypt_generic_end (td);
- if (key_s != NULL)
- efree (key_s);
- if (iv_s != NULL)
- efree (iv_s);
- efree (data_s);
-}
-
-/* {{{ proto string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_encrypt)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT (4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT;
-
- php_mcrypt_do_crypt (Z_STRVAL_PP(cipher), key, data, Z_STRVAL_PP(mode), iv, argc, MCRYPT_ENCRYPT, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_decrypt)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT (4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT;
-
- php_mcrypt_do_crypt (Z_STRVAL_PP(cipher), key, data, Z_STRVAL_PP(mode), iv, argc, MCRYPT_DECRYPT, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)
- ECB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_ecb)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT (4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt (Z_STRVAL_PP(cipher), key, data, "ecb", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
- CBC crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_cbc)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT (4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt (Z_STRVAL_PP(cipher), key, data, "cbc", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)
- CFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_cfb)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT (4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt (Z_STRVAL_PP(cipher), key, data, "cfb", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_ofb)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT (4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt (Z_STRVAL_PP(cipher), key, data, "ofb", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-#endif
-
-/* {{{ proto string mcrypt_create_iv(int size, int source)
- Create an initialization vector (IV) */
-PHP_FUNCTION(mcrypt_create_iv)
-{
- char *iv;
- iv_source source = RANDOM;
- long size;
- int n = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &size, &source) == FAILURE) {
- return;
- }
-
- if (size <= 0) {
- php_error(E_WARNING, "can not create an IV with size 0 or smaller");
- RETURN_FALSE;
- }
-
- iv = ecalloc(size + 1, 1);
-
- if (source == RANDOM || source == URANDOM) {
- int fd;
- size_t read_bytes = 0;
-
- fd = open(source == RANDOM ? "/dev/random" : "/dev/urandom",
- O_RDONLY);
- if (fd < 0) {
- efree(iv);
- php_error(E_WARNING, "cannot open source device");
- RETURN_FALSE;
- }
- while (read_bytes < size) {
- n = read(fd, iv + read_bytes, size - read_bytes);
- if (n < 0)
- break;
- read_bytes += n;
- }
- n = read_bytes;
- close(fd);
- if (n < size) {
- php_error(E_WARNING, "could not gather sufficient random data");
- RETURN_FALSE;
- }
- } else {
- n = size;
- while (size) {
- iv[--size] = 255.0 * rand() / RAND_MAX;
- }
- }
- RETURN_STRINGL(iv, n, 0);
-}
-/* }}} */
-
-
-#if HAVE_LIBMCRYPT22
-
-/* {{{ proto string mcrypt_get_cipher_name(int cipher)
- Get the name of cipher */
-PHP_FUNCTION(mcrypt_get_cipher_name)
-{
- zval **cipher;
- char *str, *nstr;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cipher) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(cipher);
-
- str = mcrypt_get_algorithms_name(Z_LVAL_PP(cipher));
- if (str) {
- nstr = estrdup(str);
- free(str);
- RETURN_STRING(nstr, 0);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int mcrypt_get_key_size(int cipher)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_key_size)
-{
- zval **cipher;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cipher) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(cipher);
-
- RETURN_LONG(mcrypt_get_key_size(Z_LVAL_PP(cipher)));
-}
-/* }}} */
-
-/* {{{ proto int mcrypt_get_block_size(int cipher)
- Get the block size of cipher */
-PHP_FUNCTION(mcrypt_get_block_size)
-{
- zval **cipher;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cipher) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(cipher);
-
- RETURN_LONG(mcrypt_get_block_size(Z_LVAL_PP(cipher)));
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_ofb)
-{
- MCRYPT_ARGS;
-
- if(ZEND_NUM_ARGS() != 5 ||
- zend_get_parameters_ex(5, &cipher, &key, &data, &mode, &iv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- MCRYPT_CONVERT;
- MCRYPT_SIZE;
- MCRYPT_CHECK_IV;
-
- td = init_mcrypt_ofb(Z_LVAL_PP(cipher), Z_STRVAL_PP(key), Z_STRLEN_PP(key), Z_STRVAL_PP(iv));
- MCRYPT_CHECK_TD_CPY;
- MCRYPT_ACTION(ofb);
-
- RETURN_STRINGL(ndata, nsize, 0);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)
- CFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_cfb)
-{
- MCRYPT_ARGS;
-
- if(ZEND_NUM_ARGS() != 5 ||
- zend_get_parameters_ex(5, &cipher, &key, &data, &mode, &iv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- MCRYPT_CONVERT;
- MCRYPT_SIZE;
- MCRYPT_CHECK_IV;
-
- td = init_mcrypt_cfb(Z_LVAL_PP(cipher), Z_STRVAL_PP(key), Z_STRLEN_PP(key), Z_STRVAL_PP(iv));
- MCRYPT_CHECK_TD_CPY;
- MCRYPT_ACTION(cfb);
-
- RETURN_STRINGL(ndata, nsize, 0);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_cbc(int cipher, string key, string data, int mode [, string iv])
- CBC crypt/decrypt data using key key with cipher cipher using optional iv */
-PHP_FUNCTION(mcrypt_cbc)
-{
- MCRYPT_ARGS;
- int ac = ZEND_NUM_ARGS();
-
- if(ac < 4 || ac > 5 ||
- zend_get_parameters_ex(ac, &cipher, &key, &data, &mode, &iv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- MCRYPT_CONVERT;
- MCRYPT_SIZE;
- if(ac > 4) {
- MCRYPT_CHECK_IV;
- }
-
- td = init_mcrypt_cbc(Z_LVAL_PP(cipher), Z_STRVAL_PP(key), Z_STRLEN_PP(key));
- MCRYPT_CHECK_TD_CPY;
-
- if(ac > 4) {
- mcrypt(td, Z_STRVAL_PP(iv));
- }
-
- MCRYPT_ACTION(cbc);
-
- RETURN_STRINGL(ndata, nsize, 0);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_ecb(int cipher, string key, string data, int mode)
- ECB crypt/decrypt data using key key with cipher cipher */
-PHP_FUNCTION(mcrypt_ecb)
-{
- MCRYPT_ARGS2;
-
- if(ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &cipher, &key, &data, &mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- MCRYPT_CONVERT;
- MCRYPT_SIZE;
-
- td = init_mcrypt_ecb(Z_LVAL_PP(cipher), Z_STRVAL_PP(key), Z_STRLEN_PP(key));
- MCRYPT_CHECK_TD_CPY;
- MCRYPT_ACTION(ecb);
-
- RETURN_STRINGL(ndata, nsize, 0);
-}
-/* }}} */
-
-#endif /* MCRYPT_2_2 */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/mcrypt/mcrypt.dsp b/ext/mcrypt/mcrypt.dsp
deleted file mode 100644
index 57ed3e36b8..0000000000
--- a/ext/mcrypt/mcrypt.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mcrypt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mcrypt - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mcrypt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mcrypt.mak" CFG="mcrypt - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mcrypt - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mcrypt - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mcrypt - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MCRYPT" /D "DBNTWIN32" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\mcrypt\include" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MCRYPT_EXPORTS" /D "COMPILE_DL_MCRYPT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBMCRYPT=1 /D HAVE_LIBMCRYPT24=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib libmcrypt.lib libltdl.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mcrypt.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\mcrypt" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\TSRM\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mcrypt - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MCRYPT" /D "DBNTWIN32" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\mcrypt\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MCRYPT_EXPORTS" /D "COMPILE_DL_MCRYPT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBMCRYPT=1 /D HAVE_LIBMCRYPT24=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"mssql-70"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib libmcrypt.lib libltdl.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mcrypt.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\mcrypt\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mcrypt - Win32 Release_TS"
-# Name "mcrypt - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mcrypt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\readdir.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mcrypt.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\readdir.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mcrypt/php_mcrypt.h b/ext/mcrypt/php_mcrypt.h
deleted file mode 100644
index e9650ccfaa..0000000000
--- a/ext/mcrypt/php_mcrypt.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Derick Rethans <d.rethans@jdimedia.nl> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_MCRYPT_H
-#define PHP_MCRYPT_H
-
-#if HAVE_LIBMCRYPT
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#if PHP_API_VERSION < 19990421
-#define zend_module_entry zend_module_entry
-#include "zend_modules.h"
-#include "internal_functions.h"
-#endif
-
-extern zend_module_entry mcrypt_module_entry;
-
-#define mcrypt_module_ptr &mcrypt_module_entry
-
-/* Functions for both old and new API */
-PHP_FUNCTION(mcrypt_ecb);
-PHP_FUNCTION(mcrypt_cbc);
-PHP_FUNCTION(mcrypt_cfb);
-PHP_FUNCTION(mcrypt_ofb);
-PHP_FUNCTION(mcrypt_get_cipher_name);
-PHP_FUNCTION(mcrypt_get_block_size);
-PHP_FUNCTION(mcrypt_get_key_size);
-PHP_FUNCTION(mcrypt_create_iv);
-
-#if HAVE_LIBMCRYPT24
-/* Support functions for old API */
-PHP_FUNCTION(mcrypt_list_algorithms);
-PHP_FUNCTION(mcrypt_list_modes);
-PHP_FUNCTION(mcrypt_get_iv_size);
-PHP_FUNCTION(mcrypt_encrypt);
-PHP_FUNCTION(mcrypt_decrypt);
-
-/* Functions for new API */
-PHP_FUNCTION(mcrypt_module_open);
-PHP_FUNCTION(mcrypt_generic_init);
-PHP_FUNCTION(mcrypt_generic);
-PHP_FUNCTION(mdecrypt_generic);
-PHP_FUNCTION(mcrypt_generic_end);
-#if HAVE_MCRYPT_GENERIC_DEINIT
-PHP_FUNCTION(mcrypt_generic_deinit);
-#endif
-PHP_FUNCTION(mcrypt_enc_self_test);
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm_mode);
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm);
-PHP_FUNCTION(mcrypt_enc_is_block_mode);
-PHP_FUNCTION(mcrypt_enc_get_block_size);
-PHP_FUNCTION(mcrypt_enc_get_key_size);
-PHP_FUNCTION(mcrypt_enc_get_supported_key_sizes);
-PHP_FUNCTION(mcrypt_enc_get_iv_size);
-PHP_FUNCTION(mcrypt_enc_get_algorithms_name);
-PHP_FUNCTION(mcrypt_enc_get_modes_name);
-PHP_FUNCTION(mcrypt_module_self_test);
-PHP_FUNCTION(mcrypt_module_is_block_algorithm_mode);
-PHP_FUNCTION(mcrypt_module_is_block_algorithm);
-PHP_FUNCTION(mcrypt_module_is_block_mode);
-PHP_FUNCTION(mcrypt_module_get_algo_block_size);
-PHP_FUNCTION(mcrypt_module_get_algo_key_size);
-PHP_FUNCTION(mcrypt_module_get_supported_key_sizes);
-PHP_FUNCTION(mcrypt_module_close);
-
-ZEND_BEGIN_MODULE_GLOBALS(mcrypt)
- int le_h;
- char *modes_dir;
- char *algorithms_dir;
-ZEND_END_MODULE_GLOBALS(mcrypt)
-
-#ifdef ZTS
-# define MCG(v) TSRMG(mcrypt_globals_id, zend_mcrypt_globals *, v)
-#else
-# define MCG(v) (mcrypt_globals.v)
-#endif
-
-#endif
-
-#else
-#define mcrypt_module_ptr NULL
-#endif
-
-#define phpext_mcrypt_ptr mcrypt_module_ptr
-
-#endif
diff --git a/ext/mcrypt/tests/001.phpt b/ext/mcrypt/tests/001.phpt
deleted file mode 100644
index 4e1b3da631..0000000000
--- a/ext/mcrypt/tests/001.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Bug #8040
---SKIPIF--
-<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
- error_reporting (E_ALL ^ E_NOTICE);
- echo MCRYPT_TWOFISH."\n";
- echo MCRYPT_MODE_CBC."\n";
-?>
-
-<?php
- define ("MODE1", MCRYPT_MODE_CBC);
- echo MODE1."\n";
-?>
-
-<?php
- define ("CIPHER", MCRYPT_TWOFISH);
- define ("MODE2", MCRYPT_MODE_CBC);
- define ("MODE3", MCRYPT_CBC);
-
- printf ("cipher=".CIPHER. " mode1=".MODE2. " mode2=". MODE3."\n");
-?>
---EXPECT--
-twofish
-cbc
-
-cbc
-
-cipher=twofish mode1=cbc mode2=MCRYPT_CBC
diff --git a/ext/mcve/CREDITS b/ext/mcve/CREDITS
deleted file mode 100644
index 9111acffab..0000000000
--- a/ext/mcve/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MCVE
-Brad House, Chris Faulhaber, Steven Schoch
diff --git a/ext/mcve/config.m4 b/ext/mcve/config.m4
deleted file mode 100644
index 6a5ad4eb73..0000000000
--- a/ext/mcve/config.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-dnl config.m4 for PHP4 MCVE Extension
-
-PHP_ARG_WITH(mcve, for MCVE support,
-[ --with-mcve[=DIR] Include MCVE support])
-
-if test "$PHP_MCVE" != "no"; then
- if test -r $PHP_MCVE/include/mcve.h; then
- MCVE_DIR=$PHP_MCVE
- else
- for i in /usr /usr/local /usr/local/mcve ; do
- if test -r $i/include/mcve.h; then
- MCVE_DIR=$i
- fi
- done
- fi
-
- if test -z "$MCVE_DIR"; then
- AC_MSG_ERROR(not found. Please check your MCVE installation; mcve.h NOT FOUND)
- fi
-
- PHP_ADD_INCLUDE($MCVE_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(mcve, $MCVE_DIR/lib, MCVE_SHARED_LIBADD)
- PHP_NEW_EXTENSION(mcve, mcve.c, $ext_shared)
- PHP_SUBST(MCVE_SHARED_LIBADD)
-fi
diff --git a/ext/mcve/mcve.c b/ext/mcve/mcve.c
deleted file mode 100644
index 420c723228..0000000000
--- a/ext/mcve/mcve.c
+++ /dev/null
@@ -1,1712 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Brad House <brad@mainstreetsoftworks.com> |
- | Chris Faulhaber <jedgar@fxp.org> |
- +----------------------------------------------------------------------+
-*/
-
-/* standard php include(s) */
-#include "php.h"
-#include "ext/standard/head.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-
-/* local include(s) */
-#include <mcve.h>
-
-/* local php include(s) */
-#include "php_mcve.h"
-
-/* {{{ globals */
-static int le_conn; /* connection resource */
-static int le_user; /* store add/edit/get user information */
-
-static int mcve_init; /* For Safe Memory Dealocation */
-/* }}} */
-
-/* {{{ extension definition structures */
-static unsigned char second_arg_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
-
-function_entry php_mcve_functions[] = {
- PHP_FE(mcve_initengine, NULL)
- PHP_FE(mcve_initconn, NULL)
- PHP_FE(mcve_deleteresponse, NULL)
- PHP_FE(mcve_destroyconn, NULL)
- PHP_FE(mcve_setdropfile, NULL)
- PHP_FE(mcve_setip, NULL)
- PHP_FE(mcve_setssl, NULL)
- PHP_FE(mcve_settimeout, NULL)
- PHP_FE(mcve_connect, NULL)
- PHP_FE(mcve_returnstatus, NULL)
- PHP_FE(mcve_returncode, NULL)
- PHP_FE(mcve_transactionssent, NULL)
- PHP_FE(mcve_transactionitem, NULL)
- PHP_FE(mcve_transactionbatch, NULL)
- PHP_FE(mcve_transactionid, NULL)
- PHP_FE(mcve_transactionauth, NULL)
- PHP_FE(mcve_transactiontext, NULL)
- PHP_FE(mcve_transactionavs, NULL)
- PHP_FE(mcve_transactioncv, NULL)
- PHP_FE(mcve_monitor, NULL)
- PHP_FE(mcve_transinqueue, NULL)
- PHP_FE(mcve_checkstatus, NULL)
- PHP_FE(mcve_completeauthorizations, second_arg_force_ref)
- PHP_FE(mcve_sale, NULL)
- PHP_FE(mcve_preauth, NULL)
- PHP_FE(mcve_void, NULL)
- PHP_FE(mcve_preauthcompletion, NULL)
- PHP_FE(mcve_force, NULL)
- PHP_FE(mcve_override, NULL)
- PHP_FE(mcve_return, NULL)
- PHP_FE(mcve_iscommadelimited, NULL)
- PHP_FE(mcve_parsecommadelimited, NULL)
- PHP_FE(mcve_getcommadelimited, NULL)
- PHP_FE(mcve_getcell, NULL)
- PHP_FE(mcve_getcellbynum, NULL)
- PHP_FE(mcve_numcolumns, NULL)
- PHP_FE(mcve_numrows, NULL)
- PHP_FE(mcve_getheader, NULL)
- PHP_FE(mcve_destroyengine, NULL)
- PHP_FE(mcve_settle, NULL)
- PHP_FE(mcve_gut, NULL)
- PHP_FE(mcve_gl, NULL)
- PHP_FE(mcve_gft, NULL)
- PHP_FE(mcve_qc, NULL)
- PHP_FE(mcve_ub, NULL)
- PHP_FE(mcve_chkpwd, NULL)
- PHP_FE(mcve_bt, NULL)
-/* Administrator Functions */
- PHP_FE(mcve_chngpwd, NULL)
- PHP_FE(mcve_listusers, NULL)
- PHP_FE(mcve_adduser, NULL)
- PHP_FE(mcve_enableuser, NULL)
- PHP_FE(mcve_disableuser, NULL)
- PHP_FE(mcve_getuserarg, NULL)
- PHP_FE(mcve_adduserarg, NULL)
- PHP_FE(mcve_deleteusersetup, NULL)
- PHP_FE(mcve_initusersetup, NULL)
- PHP_FE(mcve_deluser, NULL)
- PHP_FE(mcve_edituser, NULL)
- PHP_FE(mcve_liststats, NULL)
-
- { NULL, NULL, NULL }
-};
-
-zend_module_entry php_mcve_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "MCVE", /* module name */
- php_mcve_functions, /* struct of functions (see above) */
- PHP_MINIT(mcve), /* module initialization functions */
- NULL, /* module shutdown functions */
- NULL, /* request initialization functions */
- NULL, /* request shutdown functions */
- PHP_MINFO(mcve), /* declare the info function for phpinfo() */
-#if ZEND_MODULE_API_NO >= 20010901
- PHP_MCVE_VERSION, /* declare MCVE version number */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-/* }}} */
-
-/* declare the module for dynamic loading */
-ZEND_GET_MODULE(php_mcve)
-
-/* {{{ MCVE_CONN destructor */
-static void _free_mcve_conn(zend_rsrc_list_entry *rsrc)
-{
- MCVE_CONN *conn;
-
- conn = (MCVE_CONN *)rsrc->ptr;
- MCVE_DestroyConn(conn);
- efree(conn);
-}
-/* }}} */
-
-/* {{{ module initialization */
-PHP_MINIT_FUNCTION(mcve)
-{
- /* register the MCVE_CONN destructor */
- le_conn = zend_register_list_destructors_ex(_free_mcve_conn, NULL,
- "mcve connection", module_number);
-
- /* set up the mcve defines */
- REGISTER_LONG_CONSTANT("MCVE_UNUSED", MCVE_UNUSED, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PENDING", MCVE_PENDING, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_DONE", MCVE_DONE, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("MCVE_GOOD", MCVE_GOOD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_BAD", MCVE_BAD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_STREET", MCVE_STREET, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_ZIP", MCVE_ZIP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_UNKNOWN", MCVE_UNKNOWN, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("MCVE_ERROR", MCVE_ERROR, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_FAIL", MCVE_FAIL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SUCCESS", MCVE_SUCCESS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_AUTH", MCVE_AUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_DENY", MCVE_DENY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_CALL", MCVE_CALL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_DUPL", MCVE_DUPL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PKUP", MCVE_PKUP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_RETRY", MCVE_RETRY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SETUP", MCVE_SETUP, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("MCVE_SALE", MCVE_SALE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PREAUTH", MCVE_PREAUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_FORCE", MCVE_FORCE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_OVERRIDE", MCVE_OVERRIDE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_RETURN", MCVE_RETURN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SETTLE", MCVE_SETTLE, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("MCVE_PROC", MCVE_PROC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_USER", MCVE_USER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PWD", MCVE_PWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_INDCODE", MCVE_INDCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERCHID", MCVE_MERCHID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_BANKID", MCVE_BANKID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_TERMID", MCVE_TERMID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_CLIENTNUM", MCVE_CLIENTNUM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_STOREID", MCVE_STOREID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_AGENTID", MCVE_AGENTID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_CHAINID", MCVE_CHAINID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_ZIPCODE", MCVE_ZIPCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_TIMEZONE", MCVE_TIMEZONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERCHCAT", MCVE_MERCHCAT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERNAME", MCVE_MERNAME, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERCHLOC", MCVE_MERCHLOC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_STATECODE", MCVE_STATECODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SERVICEPHONE", MCVE_SERVICEPHONE, MCVE_CONST);
-
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ module information */
-PHP_MINFO_FUNCTION(mcve)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "mcve support", "enabled");
- php_info_print_table_row(2, "mcve ssl support",
-#ifdef ENABLE_SSL
- "enabled");
-#else
- "disabled");
-#endif
- php_info_print_table_row(2, "version", PHP_MCVE_VERSION);
- php_info_print_table_end();
-}
-/* }}} */
-
-
-/* {{{ proto int mcve_initengine(string location)
- Ready the client for IP/SSL Communication */
-PHP_FUNCTION(mcve_initengine)
-{
- int ret;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(arg);
-
- if (mcve_init) {
- MCVE_DestroyEngine();
- }
- ret = MCVE_InitEngine(Z_STRVAL_PP(arg));
- mcve_init = 1;
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto resource mcve_initconn(void)
- Create and initialize an MCVE_CONN structure */
-PHP_FUNCTION(mcve_initconn)
-{
- MCVE_CONN *conn;
-
- conn = emalloc(sizeof(MCVE_CONN));
-
- MCVE_InitConn(conn);
-
- ZEND_REGISTER_RESOURCE(return_value, conn, le_conn);
-}
-/* }}} */
-
-
-/* {{{ proto bool mcve_deleteresponse(resource conn, int identifier)
- Delete specified transaction from MCVE_CONN structure */
-PHP_FUNCTION(mcve_deleteresponse)
-{
- MCVE_CONN *conn;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- MCVE_DeleteResponse(conn, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mcve_destroyconn(resource conn)
- Destroy the connection and MCVE_CONN structure */
-PHP_FUNCTION(mcve_destroyconn)
-{
- MCVE_CONN *conn;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection",
- le_conn);
-
- MCVE_DestroyConn(conn);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mcve_setdropfile(resource conn, string directory)
- Set the connection method to Drop-File */
-PHP_FUNCTION(mcve_setdropfile)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_SetDropFile(conn, Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_setip(resource conn, string host, int port)
- Set the connection method to IP */
-PHP_FUNCTION(mcve_setip)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_SetIP(conn, Z_STRVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_setssl(resource conn, string host, int port)
- Set the connection method to SSL */
-PHP_FUNCTION(mcve_setssl)
-{
-#ifdef ENABLE_SSL
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_SetSSL(conn, Z_STRVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- RETURN_LONG(retval);
-#else
- RETURN_LONG(MCVE_FAIL);
-#endif
-}
-/* }}} */
-
-/* {{{ proto int mcve_settimeout(resource conn, int seconds)
- Set maximum transaction time (per trans)
-*/
-PHP_FUNCTION(mcve_settimeout)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_SetTimeout(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_connect(resource conn)
- Establish the connection to MCVE */
-PHP_FUNCTION(mcve_connect)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection",
- le_conn);
-
- retval = MCVE_Connect(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_transactionssent(resource conn)
- Check to see if outgoing buffer is clear */
-PHP_FUNCTION(mcve_transactionssent)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection",
- le_conn);
-
- retval = MCVE_TransactionsSent(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_returnstatus(resource conn, int identifier)
- Check to see if the transaction was successful */
-PHP_FUNCTION(mcve_returnstatus)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_ReturnStatus(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_returncode(resource conn, int identifier)
- Grab the exact return code from the transaction */
-PHP_FUNCTION(mcve_returncode)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_ReturnCode(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_transactionitem(resource conn, int identifier)
- Get the ITEM number in the associated batch for this transaction */
-PHP_FUNCTION(mcve_transactionitem)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionItem(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_transactionavs(resource conn, int identifier)
- Get the Address Verification return status */
-PHP_FUNCTION(mcve_transactionavs)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionAVS(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int mcve_transactioncv(resource conn, int identifier)
- Get the CVC2/CVV2/CID return status */
-PHP_FUNCTION(mcve_transactioncv)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionCV(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_transactionbatch(resource conn, int identifier)
- Get the batch number associated with the transaction */
-PHP_FUNCTION(mcve_transactionbatch)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionBatch(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_transactionid(resource conn, int identifier)
- Get the unique system id for the transaction
-*/
-PHP_FUNCTION(mcve_transactionid)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionID(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string mcve_transactionauth(resource conn, int identifier)
- Get the authorization number returned for the transaction (alpha-numeric) */
-PHP_FUNCTION(mcve_transactionauth)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionAuth(conn, Z_LVAL_PP(arg2));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string mcve_transactiontext(resource conn, int identifier)
- Get verbiage (text) return from MCVE or processing institution */
-PHP_FUNCTION(mcve_transactiontext)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionText(conn, Z_LVAL_PP(arg2));
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int mcve_monitor(resource conn)
- Perform communication with MCVE (send/receive data) Non-blocking */
-PHP_FUNCTION(mcve_monitor)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection",
- le_conn);
-
- retval = MCVE_Monitor(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_transinqueue(resource conn)
- Number of transactions in client-queue */
-PHP_FUNCTION(mcve_transinqueue)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection",
- le_conn);
-
- retval = MCVE_TransInQueue(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_checkstatus(resource conn, int identifier)
- Check to see if a transaction has completed */
-PHP_FUNCTION(mcve_checkstatus)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_CheckStatus(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int mcve_completeauthorizations(resource conn, int &array)
- Number of complete authorizations in queue, returning an array of their identifiers */
-PHP_FUNCTION(mcve_completeauthorizations)
-{
- MCVE_CONN *conn;
- long i, *list, listnum;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2))
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- listnum = MCVE_CompleteAuthorizations(conn, &list);
-
- if (listnum) {
- /* should use ZVAL_DESTRUCTOR */
- pval_destructor(*arg2);
- array_init(*arg2);
- for (i = 0; i < listnum; i++)
- add_index_long(*arg2, i, list[i]);
- free(list);
- }
-
- RETURN_LONG(listnum);
-}
-/* }}} */
-
-/* {{{ proto int mcve_sale(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)
- Send a SALE to MCVE */
-PHP_FUNCTION(mcve_sale)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12, **arg13, **arg14;
-
- if (ZEND_NUM_ARGS() != 14 || zend_get_parameters_ex(14, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12, &arg13, &arg14) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
- convert_to_string_ex(arg13);
- convert_to_long_ex(arg14);
-
- retval = MCVE_Sale(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12),
- Z_STRVAL_PP(arg13), Z_LVAL_PP(arg14));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_preauth(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)
- Send a PREAUTHORIZATION to MCVE */
-PHP_FUNCTION(mcve_preauth)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12, **arg13, **arg14;
-
- if (ZEND_NUM_ARGS() != 14 || zend_get_parameters_ex(14, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12, &arg13, &arg14) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
- convert_to_string_ex(arg13);
- convert_to_long_ex(arg14);
-
- retval = MCVE_PreAuth(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12),
- Z_STRVAL_PP(arg13), Z_LVAL_PP(arg14));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_override(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)
- Send an OVERRIDE to MCVE */
-PHP_FUNCTION(mcve_override)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12, **arg13, **arg14;
-
- if (ZEND_NUM_ARGS() != 14 || zend_get_parameters_ex(14, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12, &arg13, &arg14) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
- convert_to_string_ex(arg13);
- convert_to_long_ex(arg14);
-
- retval = MCVE_Override(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12),
- Z_STRVAL_PP(arg13), Z_LVAL_PP(arg14));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_void(resource conn, string username, string password, int sid, int ptrannum)
- VOID a transaction in the settlement queue */
-PHP_FUNCTION(mcve_void)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2,
- &arg3, &arg4, &arg5) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_long_ex(arg5);
-
- retval = MCVE_Void(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_LVAL_PP(arg4), Z_LVAL_PP(arg5));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_preauthcompletion(resource conn, string username, string password, float finalamount, int sid, int ptrannum)
- Complete a PREAUTHORIZATION... Ready it for settlement */
-PHP_FUNCTION(mcve_preauthcompletion)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_long_ex(arg5);
- convert_to_long_ex(arg6);
-
- retval = MCVE_PreAuthCompletion(conn, Z_STRVAL_PP(arg2),
- Z_STRVAL_PP(arg3), Z_DVAL_PP(arg4), Z_LVAL_PP(arg5),
- Z_LVAL_PP(arg6));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_force(resiurce conn, string username, string password, string trackdata, string account, string expdate, float amount, string authcode, string comments, string clerkid, string stationid, int ptrannum)
- Send a FORCE to MCVE. (typically, a phone-authorization) */
-PHP_FUNCTION(mcve_force)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12;
-
- if (ZEND_NUM_ARGS() != 12 || zend_get_parameters_ex(12, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_long_ex(arg12);
-
- retval = MCVE_Force(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_LVAL_PP(arg12));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_return(int conn, string username, string password, string trackdata, string account, string expdate, float amount, string comments, string clerkid, string stationid, int ptrannum)
- Issue a RETURN or CREDIT to MCVE */
-PHP_FUNCTION(mcve_return)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11;
-
- if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_long_ex(arg11);
-
- retval = MCVE_Return(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_LVAL_PP(arg11));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int mcve_settle(resource conn, string username, string password, string batch)
- Issue a settlement command to do a batch deposit */
-PHP_FUNCTION(mcve_settle)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2,
- &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
-
- retval = MCVE_Settle(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_STRVAL_PP(arg4));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_ub(resource conn, string username, string password)
- Get a list of all Unsettled batches */
-PHP_FUNCTION(mcve_ub)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Ub(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_qc(resource conn, string username, string password, string clerkid, string stationid, string comments, int ptrannum)
- Audit MCVE for a list of transactions in the outgoing queue */
-PHP_FUNCTION(mcve_qc)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
-
- if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_long_ex(arg7);
-
-
- retval = MCVE_Qc(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6), Z_LVAL_PP(arg7));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_gut(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)
- Audit MCVE for Unsettled Transactions */
-PHP_FUNCTION(mcve_gut)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10, **arg11;
-
- if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_long_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
-
- retval = MCVE_Gut(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4), Z_STRVAL_PP(arg5),Z_STRVAL_PP(arg6),
- Z_STRVAL_PP(arg7),Z_STRVAL_PP(arg8),Z_LVAL_PP(arg9),Z_STRVAL_PP(arg10),Z_STRVAL_PP(arg11));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int mcve_gl(int conn, string username, string password, int type, string account, string batch, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)
- Audit MCVE for settled transactions */
-PHP_FUNCTION(mcve_gl)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10, **arg11, **arg12;
-
- if (ZEND_NUM_ARGS() != 12 || zend_get_parameters_ex(12, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11, &arg12) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_long_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
-
- retval = MCVE_Gl(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4), Z_STRVAL_PP(arg5),
- Z_STRVAL_PP(arg6),Z_STRVAL_PP(arg7),Z_STRVAL_PP(arg8),Z_STRVAL_PP(arg9),Z_LVAL_PP(arg10),
- Z_STRVAL_PP(arg11),Z_STRVAL_PP(arg12));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_gft(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)
- Audit MCVE for Failed transactions
-*/
-PHP_FUNCTION(mcve_gft)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10, **arg11;
-
- if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_long_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
-
- retval = MCVE_Gft(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4),Z_STRVAL_PP(arg5),
- Z_STRVAL_PP(arg6),Z_STRVAL_PP(arg7),Z_STRVAL_PP(arg8),Z_LVAL_PP(arg9),Z_STRVAL_PP(arg10),Z_STRVAL_PP(arg11));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_chkpwd(resource conn, string username, string password)
- Verify Password */
-PHP_FUNCTION(mcve_chkpwd)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Chkpwd(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_bt(resource conn, string username, string password)
- Get unsettled batch totals */
-PHP_FUNCTION(mcve_bt)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Bt(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto string mcve_getcell(resource conn, int identifier, string column, int row)
- Get a specific cell from a comma delimited response by column name */
-PHP_FUNCTION(mcve_getcell)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3, **arg4;
-
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
-
- retval = MCVE_GetCell(conn, Z_LVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_LVAL_PP(arg4));
-
- if (retval == NULL) {
- RETURN_STRING("", 1);
- } else {
- RETURN_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string mcve_getcellbynum(resource conn, int identifier, int column, int row)
- Get a specific cell from a comma delimited response by column number */
-PHP_FUNCTION(mcve_getcellbynum)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3, **arg4;
-
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
-
- retval = MCVE_GetCellByNum(conn, Z_LVAL_PP(arg2), Z_LVAL_PP(arg3),
- Z_LVAL_PP(arg4));
-
- if (retval == NULL) {
- RETURN_STRING("", 1);
- } else {
- RETURN_STRING(retval, 1);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcve_numcolumns(resource conn, int identifier)
- Number of columns returned in a comma delimited response */
-PHP_FUNCTION(mcve_numcolumns)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_NumColumns(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_numrows(resource conn, int identifier)
- Number of rows returned in a comma delimited response */
-PHP_FUNCTION(mcve_numrows)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_NumRows(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_iscommadelimited(resource conn, int identifier)
- Checks to see if response is comma delimited */
-PHP_FUNCTION(mcve_iscommadelimited)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_IsCommaDelimited(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_parsecommadelimited(resource conn, int identifier)
- Parse the comma delimited response so mcve_getcell, etc will work */
-PHP_FUNCTION(mcve_parsecommadelimited)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_ParseCommaDelimited(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string mcve_getcommadelimited(resource conn, int identifier)
- Get the RAW comma delimited data returned from MCVE */
-PHP_FUNCTION(mcve_getcommadelimited)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
- convert_to_long_ex(arg2);
- retval = MCVE_GetCommaDelimited(conn, Z_LVAL_PP(arg2));
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto string mcve_getheader(resource conn, int identifier, int column_num)
- Get the name of the column in a comma-delimited response */
-PHP_FUNCTION(mcve_getheader)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_GetHeader(conn, Z_LVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto void mcve_destroyengine(void)
- Free memory associated with IP/SSL connectivity */
-PHP_FUNCTION(mcve_destroyengine)
-{
- MCVE_DestroyEngine();
- mcve_init = 0;
-}
-/* }}} */
-
-/* {{{ proto int mcve_chngpwd(resource conn, string admin_password, string new_password)
- Change the system administrator's password */
-PHP_FUNCTION(mcve_chngpwd)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Chngpwd(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_listusers(resource conn, string admin_password)
- List all users on MCVE system */
-PHP_FUNCTION(mcve_listusers)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_ListUsers(conn, Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_enableuser(resource conn, string admin_password, string username)
- Enable an inactive MCVE user account */
-PHP_FUNCTION(mcve_enableuser)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_EnableUser(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_disableuser(resource conn, string admin_password, string username)
- Disable an active MCVE user account */
-PHP_FUNCTION(mcve_disableuser)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_DisableUser(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_deluser(resource conn, string admin_password, string username)
- Delete an MCVE user account */
-PHP_FUNCTION(mcve_deluser)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_DelUser(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_liststats(resource conn, string admin_password)
- List statistics for all users on MCVE system */
-PHP_FUNCTION(mcve_liststats)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_ListStats(conn, Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto resource mcve_initusersetup(void)
- Initialize structure to store user data */
-PHP_FUNCTION(mcve_initusersetup)
-{
- MCVE_UserSetup *usersetup;
-
- usersetup = emalloc(sizeof(MCVE_UserSetup));
-
- MCVE_InitUserSetup(usersetup);
-
- ZEND_REGISTER_RESOURCE(return_value, usersetup, le_user);
-}
-/* }}} */
-
-/* {{{ proto void mcve_deleteusersetup(resource usersetup)
- Deallocate data associated with usersetup structure */
-PHP_FUNCTION(mcve_deleteusersetup)
-{
- MCVE_UserSetup *usersetup;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg, -1, "mcve user setup",
- le_user);
-
- MCVE_DeleteUserSetup(usersetup);
- efree(usersetup);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mcve_adduserarg(resource usersetup, int argtype, string argval)
- Add a value to user configuration structure */
-PHP_FUNCTION(mcve_adduserarg)
-{
- MCVE_UserSetup *usersetup;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg1, -1, "mcve user setup",
- le_user);
-
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_AddUserArg(usersetup, Z_LVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string mcve_getuserarg(resource usersetup, int argtype)
- Grab a value from usersetup structure */
-PHP_FUNCTION(mcve_getuserarg)
-{
- MCVE_UserSetup *usersetup;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg1, -1, "mcve user setup",
- le_user);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_GetUserArg(usersetup, Z_LVAL_PP(arg2));
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto int mcve_adduser(resource conn, string admin_password, int usersetup)
- Add an MCVE user using usersetup structure */
-PHP_FUNCTION(mcve_adduser)
-{
- MCVE_CONN *conn;
- MCVE_UserSetup *usersetup;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg3, -1, "mcve user setup",
- le_user);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_AddUser(conn, Z_STRVAL_PP(arg2), usersetup);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int mcve_edituser(resource conn, string admin_password, int usersetup)
- Edit MCVE user using usersetup structure */
-PHP_FUNCTION(mcve_edituser)
-{
- MCVE_CONN *conn;
- MCVE_UserSetup *usersetup;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2,
- &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg3, -1, "mcve user setup",
- le_user);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_EditUser(conn, Z_STRVAL_PP(arg2), usersetup);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* END OF MCVE PHP EXTENSION */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
-
diff --git a/ext/mcve/mcve.php b/ext/mcve/mcve.php
deleted file mode 100644
index f749220b32..0000000000
--- a/ext/mcve/mcve.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?
-$module = 'MCVE';
-if(!extension_loaded($module)) {
- dl('mcve.so');
-}
-$functions = get_extension_funcs($module);
-echo "Functions available in the $module extension:<br>\n";
-foreach($functions as $func) {
- echo $func."<br>\n";
-}
-echo "<br>\n";
-?>
diff --git a/ext/mcve/mcve_simple_test.php b/ext/mcve/mcve_simple_test.php
deleted file mode 100644
index 3a1c4f0601..0000000000
--- a/ext/mcve/mcve_simple_test.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
- MCVE_InitEngine(NULL);
- $conn=MCVE_InitConn();
- if (MCVE_SetIP($conn, "testbox.mcve.com", 8333)) {
- echo "Set connection Properly";
- } else {
- echo "Failed Setting method";
- exit();
- }
- if (!MCVE_Connect($conn)) {
- echo "<BR>Could not connect<BR>";
- } else {
- echo "<BR>Connection Established<BR>";
- }
- MCVE_DestroyConn($conn);
- MCVE_DestroyEngine();
-
-?>
diff --git a/ext/mcve/mcve_test1.php b/ext/mcve/mcve_test1.php
deleted file mode 100644
index a4f7dba8d6..0000000000
--- a/ext/mcve/mcve_test1.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<HTML>
-<BODY>
-<?php
-
-// MCVE Config stuff
-$username="vitale";
-$password="test";
-// 1:IP or 2:SSL
-$method=2;
-$host="testbox.mcve.com";
-$port=8444; //8444 is typically SSL and 8333 is standard
-// End config stuff
-
-
-if (!$account)
- $account="4012888888881";
-if (!$exp)
- $exp="0512";
-if (!$amount)
- $amount=12.00;
-
-function flush_buffer()
-{
- for ($i=0; $i<2048; $i++) {
- echo " ";
- }
- flush();
-}
-
-
-dl("./php_mcve.so");
-
- echo "Initializing MCVE<BR>";
- flush_buffer();
- mcve_initengine("./CAfile.pem");
- $conn=mcve_initconn();
- if ($method == 1)
- $ret=mcve_setip($conn, $host, $port);
- else if ($method == 2)
- $ret=mcve_setssl($conn, $host, $port);
-
- if (!$ret) {
- echo "Could not set method<BR>";
- exit(1);
- }
- echo "Connection method and location set<BR>";
- flush_buffer();
- if (!mcve_connect($conn)) {
- echo "Connection Failed<BR>";
- exit(1);
- }
- echo "Connection Established<BR>";
- flush_buffer();
- $identifier=mcve_sale($conn, $username, $password, NULL, $account, $exp,
- $amount, NULL, NULL, NULL, NULL, NULL, NULL, 001);
- echo "Transaction Sent: CC: $account EXP: $exp AMOUNT: $amount<BR>";
- flush_buffer();
- while (mcve_checkstatus($conn, $identifier) != MCVE_DONE) {
- mcve_monitor($conn);
- }
- echo "Transaction Complete<BR>";
- flush_buffer();
- $status=mcve_returnstatus($conn, $identifier);
- if ($status == MCVE_SUCCESS) {
- $text=mcve_transactiontext($conn, $identifier);
- $auth=mcve_transactionauth($conn, $identifier);
- echo "Transaction Authorized<BR>";
- echo "Auth: $auth<BR>";
- echo "Text: $text<BR>";
- } else if ($status == MCVE_FAIL) {
- $text=mcve_transactiontext($conn, $identifier);
- echo "Transaction Denied<BR>";
- echo "Text: $text<BR>";
- } else
- echo "Transaction error<BR>";
- flush_buffer();
- mcve_destroyconn($conn);
- mcve_destroyengine();
-
-?>
-</BODY>
-</HTML>
-
diff --git a/ext/mcve/mcve_test2.php b/ext/mcve/mcve_test2.php
deleted file mode 100644
index 4cb251b538..0000000000
--- a/ext/mcve/mcve_test2.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?
- #
- # $Id$
- #
-
-$connect_type = "IP";
-
-dl("php_mcve.so");
-
-$conn = MCVE_InitConn();
-print "MCVE_InitConn() returned $conn<br>\n";
-
-if ($connect_type == "IP") {
- MCVE_SetIP($conn, "localhost", 8333) or
- die("MCVE_SetIP() failed");
- print "MCVE_SetIP() successful<br>\n";
-} else {
- MCVE_SetDropFile($conn, "/var/mcve/trans") or
- die("MCVE_SetDropFile() failed");
- print "MCVE_SetDropFile() successful<br>\n";
-}
-
-MCVE_Connect($conn) or
- die("MCVE_Connect() failed");
-print "MCVE_Connect() successful<br>\n";
-
-# send a request
-$ident = MCVE_Sale($conn, "test", "test", NULL, "5454545454545454",
- "1205", 11.00, NULL, NULL, NULL, NULL, "me", NULL, 54321);
-if ($ident == -1)
- die("MCVE_Sale() failed");
-else
- print "Identifier: $ident<br>\n";
-
-$ident = MCVE_Sale($conn, "test", "test", NULL, "5454545454545454",
- "1205", 12.00, NULL, NULL, NULL, NULL, "me", NULL, 54321);
-if ($ident == -1)
- die("MCVE_Sale() failed");
-else
- print "Identifier: $ident<br>\n";
-
-$pending = 0;
-$complete = -1;
-while ($pending != $complete) {
- sleep(2);
-
- MCVE_Monitor($conn);
-
- $pending = MCVE_TransInQueue($conn);
- print "Transactions pending: $pending<br>\n";
-
- $complete = MCVE_CompleteAuthorizations($conn, &$list);
- print "Authorizations complete: $complete<br>\n";
-
- flush();
-}
-
-for ($i = 0; $i < $complete; $i++) {
- $status = MCVE_CheckStatus($conn, $i);
- print "Transaction #" . $list[$i] . " complete: $status<br>\n";
-}
-
-MCVE_DestroyConn($conn);
-print "MCVE_DestroyConn() completed<br>\n";
-
-#phpinfo();
-
-?>
diff --git a/ext/mcve/php_mcve.h b/ext/mcve/php_mcve.h
deleted file mode 100644
index 83e3c57200..0000000000
--- a/ext/mcve/php_mcve.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * basic mcve php module
- *
- * $Id$
- */
-
-#ifndef _PHP_MCVE_H
-#define _PHP_MCVE_H
-
-extern zend_module_entry php_mcve_module_entry;
-
-#define mcve_module_ptr &php_mcve_module_entry
-#define phpext_mcve_ptr mcve_module_ptr
-
-//#if COMPILE_DL
-// DLEXPORT zend_module_entry *get_module(void) { return
-//&php_mcve_module_entry; }
-//#endif
-
-
-#define PHP_MCVE_VERSION "1.0"
-
-#define MCVE_CONST (CONST_CS | CONST_PERSISTENT)
-
-PHP_MINIT_FUNCTION(mcve);
-PHP_MINFO_FUNCTION(mcve);
-
-PHP_FUNCTION(mcve_initengine);
-PHP_FUNCTION(mcve_initconn);
-PHP_FUNCTION(mcve_deleteresponse);
-PHP_FUNCTION(mcve_destroyconn);
-PHP_FUNCTION(mcve_setdropfile);
-PHP_FUNCTION(mcve_setip);
-PHP_FUNCTION(mcve_setssl);
-PHP_FUNCTION(mcve_settimeout);
-PHP_FUNCTION(mcve_connect);
-PHP_FUNCTION(mcve_returnstatus);
-PHP_FUNCTION(mcve_returncode);
-PHP_FUNCTION(mcve_transactionssent);
-PHP_FUNCTION(mcve_transactionitem);
-PHP_FUNCTION(mcve_transactionbatch);
-PHP_FUNCTION(mcve_transactionid);
-PHP_FUNCTION(mcve_transactionauth);
-PHP_FUNCTION(mcve_transactionavs);
-PHP_FUNCTION(mcve_transactioncv);
-PHP_FUNCTION(mcve_transactiontext);
-PHP_FUNCTION(mcve_monitor);
-PHP_FUNCTION(mcve_transinqueue);
-PHP_FUNCTION(mcve_checkstatus);
-PHP_FUNCTION(mcve_completeauthorizations);
-PHP_FUNCTION(mcve_sale);
-PHP_FUNCTION(mcve_preauth);
-PHP_FUNCTION(mcve_override);
-PHP_FUNCTION(mcve_void);
-PHP_FUNCTION(mcve_preauthcompletion);
-PHP_FUNCTION(mcve_force);
-PHP_FUNCTION(mcve_return);
-PHP_FUNCTION(mcve_iscommadelimited);
-PHP_FUNCTION(mcve_parsecommadelimited);
-PHP_FUNCTION(mcve_getcommadelimited);
-PHP_FUNCTION(mcve_getcell);
-PHP_FUNCTION(mcve_getcellbynum);
-PHP_FUNCTION(mcve_numcolumns);
-PHP_FUNCTION(mcve_numrows);
-PHP_FUNCTION(mcve_getheader);
-PHP_FUNCTION(mcve_destroyengine);
-PHP_FUNCTION(mcve_settle);
-PHP_FUNCTION(mcve_qc);
-PHP_FUNCTION(mcve_gut);
-PHP_FUNCTION(mcve_gft);
-PHP_FUNCTION(mcve_ub);
-PHP_FUNCTION(mcve_gl);
-PHP_FUNCTION(mcve_chkpwd);
-PHP_FUNCTION(mcve_bt);
-
-PHP_FUNCTION(mcve_chngpwd);
-PHP_FUNCTION(mcve_listusers);
-PHP_FUNCTION(mcve_adduser);
-PHP_FUNCTION(mcve_enableuser);
-PHP_FUNCTION(mcve_disableuser);
-PHP_FUNCTION(mcve_getuserarg);
-PHP_FUNCTION(mcve_adduserarg);
-PHP_FUNCTION(mcve_deleteusersetup);
-PHP_FUNCTION(mcve_initusersetup);
-PHP_FUNCTION(mcve_deluser);
-PHP_FUNCTION(mcve_edituser);
-PHP_FUNCTION(mcve_liststats);
-#endif /* _PHP_MCVE_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/mcve/tests/001.phpt b/ext/mcve/tests/001.phpt
deleted file mode 100644
index c41eaa18ca..0000000000
--- a/ext/mcve/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for mcve presence
---SKIPIF--
-<?php if (!extension_loaded("MCVE")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "mcve extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-mcve extension is available
diff --git a/ext/mhash/CREDITS b/ext/mhash/CREDITS
deleted file mode 100644
index 54851e1ac7..0000000000
--- a/ext/mhash/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mhash
-Sascha Schumann
diff --git a/ext/mhash/config.m4 b/ext/mhash/config.m4
deleted file mode 100644
index e53bd28f61..0000000000
--- a/ext/mhash/config.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mhash, for mhash support,
-[ --with-mhash[=DIR] Include mhash support.])
-
-if test "$PHP_MHASH" != "no"; then
- for i in /usr/local /usr /opt/mhash $PHP_MHASH; do
- if test -f $i/include/mhash.h; then
- MHASH_DIR=$i
- fi
- done
-
- if test -z "$MHASH_DIR"; then
- AC_MSG_ERROR(Please reinstall libmhash - I cannot find mhash.h)
- fi
- PHP_ADD_INCLUDE($MHASH_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(mhash, $MHASH_DIR/lib, MHASH_SHARED_LIBADD)
- PHP_SUBST(MHASH_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_LIBMHASH,1,[ ])
-
- PHP_NEW_EXTENSION(mhash, mhash.c, $ext_shared)
-fi
diff --git a/ext/mhash/mhash.c b/ext/mhash/mhash.c
deleted file mode 100644
index e7ba9ed85b..0000000000
--- a/ext/mhash/mhash.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Nikos Mavroyanopoulos <nmav@hellug.gr> (HMAC, KEYGEN) |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_LIBMHASH
-
-#include "fcntl.h"
-#include "php_mhash.h"
-#include "mhash.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-
-function_entry mhash_functions[] = {
- PHP_FE(mhash_get_block_size, NULL)
- PHP_FE(mhash_get_hash_name, NULL)
- PHP_FE(mhash_keygen_s2k, NULL)
- PHP_FE(mhash_count, NULL)
- PHP_FE(mhash, NULL)
- {NULL, NULL, NULL}
-};
-
-static PHP_MINIT_FUNCTION(mhash);
-
-zend_module_entry mhash_module_entry = {
- STANDARD_MODULE_HEADER,
- "mhash",
- mhash_functions,
- PHP_MINIT(mhash), NULL,
- NULL, NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-
-#ifdef COMPILE_DL_MHASH
-ZEND_GET_MODULE(mhash)
-#endif
-#define MHASH_FAILED_MSG "mhash initialization failed"
-#define MHASH_KEYGEN_FAILED_MSG "mhash key generation failed"
-static PHP_MINIT_FUNCTION(mhash)
-{
- int i;
- char *name;
- char buf[128];
-
- for (i = 0; i <= mhash_count(); i++) {
- name = mhash_get_hash_name(i);
- if (name) {
- snprintf(buf, 127, "MHASH_%s", name);
- zend_register_long_constant(buf, strlen(buf) + 1,
- i, CONST_PERSISTENT,
- module_number TSRMLS_CC);
- free(name);
- }
- }
-
- return SUCCESS;
-}
-
-/* {{{ proto int mhash_count(void)
- Gets the number of available hashes */
-PHP_FUNCTION(mhash_count)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(mhash_count());
-}
-
-/* }}} */
-
-/* {{{ proto int mhash_get_block_size(int hash)
- Gets the block size of hash */
-PHP_FUNCTION(mhash_get_block_size)
-{
- pval **hash;
-
- if (ZEND_NUM_ARGS() != 1
- || zend_get_parameters_ex(1, &hash) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(hash);
-
- RETURN_LONG(mhash_get_block_size(Z_LVAL_PP(hash)));
-}
-
-/* }}} */
-
-/* {{{ proto string mhash_get_hash_name(int hash)
- Gets the name of hash */
-PHP_FUNCTION(mhash_get_hash_name)
-{
- pval **hash;
- char *name;
-
- if (ZEND_NUM_ARGS() != 1
- || zend_get_parameters_ex(1, &hash) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(hash);
-
- name = mhash_get_hash_name(Z_LVAL_PP(hash));
- if (name) {
- RETVAL_STRING(name, 1);
- free(name);
- } else {
- RETVAL_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string mhash(int hash, string data [, string key])
- Hash data with hash */
-PHP_FUNCTION(mhash)
-{
- pval **hash, **data, **key;
- MHASH td;
- int bsize;
- unsigned char *hash_data;
- int num_args;
-
- num_args = ZEND_NUM_ARGS();
-
- if (num_args < 2 || num_args > 3) {
- WRONG_PARAM_COUNT;
- }
- if (num_args == 2) { /* 2 arguments, just hash */
- if (zend_get_parameters_ex(2, &hash, &data) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else { /* 3 arguments, do HMAC hash (keyed hash) */
- if (zend_get_parameters_ex(3, &hash, &data, &key) ==
- FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(key);
- }
-
- convert_to_long_ex(hash);
- convert_to_string_ex(data);
-
- bsize = mhash_get_block_size(Z_LVAL_PP(hash));
-
- if (num_args == 3) {
- if (mhash_get_hash_pblock(Z_LVAL_PP(hash)) == 0) {
- php_error(E_WARNING, MHASH_FAILED_MSG);
- RETURN_FALSE;
- }
- td = mhash_hmac_init(Z_LVAL_PP(hash),
- Z_STRVAL_PP(key),
- Z_STRLEN_PP(key),
- mhash_get_hash_pblock(Z_LVAL_PP(hash)));
- } else {
- td = mhash_init(Z_LVAL_PP(hash));
- }
- if (td == MHASH_FAILED) {
- php_error(E_WARNING, MHASH_FAILED_MSG);
- RETURN_FALSE;
- }
-
- mhash(td, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
-
- if (num_args == 3) {
- hash_data = (unsigned char *) mhash_hmac_end(td);
- } else {
- hash_data = (unsigned char *) mhash_end(td);
- }
- if (hash_data) {
- RETVAL_STRINGL(hash_data, bsize, 1);
- mhash_free(hash_data);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)
- Generates a key using hash functions */
-/* SALTED S2K uses a fixed salt */
-#define SALT_SIZE 8
-PHP_FUNCTION(mhash_keygen_s2k)
-{
- pval **hash, **input_password, **bytes, **input_salt;
- int password_len, salt_len;
- int hashid, size=0, val;
- KEYGEN keystruct;
- char salt[SALT_SIZE], *ret;
- char* password, error[128];
-
- if (ZEND_NUM_ARGS() != 4) {
- WRONG_PARAM_COUNT;
- }
- if (zend_get_parameters_ex(4, &hash, &input_password, &input_salt, &bytes) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(hash);
- convert_to_string_ex(input_password);
- convert_to_string_ex(input_salt);
- convert_to_long_ex(bytes);
-
- password = Z_STRVAL_PP(input_password);
- password_len = Z_STRLEN_PP(input_password);
-
- salt_len = MIN(Z_STRLEN_PP(input_salt), SALT_SIZE);
-
- if (salt_len > mhash_get_keygen_salt_size(KEYGEN_S2K_SALTED)) {
- sprintf( error, "The specified salt [%d] is more bytes than the required by the algorithm [%d]\n", salt_len, mhash_get_keygen_salt_size(KEYGEN_S2K_SALTED));
-
- php_error(E_WARNING, error);
- }
-
- memcpy(salt, Z_STRVAL_PP(input_salt), salt_len);
- if (salt_len < SALT_SIZE)
- memset(salt + salt_len, 0, SALT_SIZE - salt_len);
- salt_len=SALT_SIZE;
-
-/* if (salt_len==0) {
- * php_error(E_WARNING, "Not using salt is really not recommended);
- * }
- */
-
- hashid = Z_LVAL_PP(hash);
- size = Z_LVAL_PP(bytes);
-
- keystruct.hash_algorithm[0]=hashid;
- keystruct.hash_algorithm[1]=hashid;
- keystruct.count=0;
- keystruct.salt = salt;
- keystruct.salt_size = salt_len;
-
- ret = emalloc(size);
- if (ret==NULL) {
- php_error(E_WARNING, MHASH_KEYGEN_FAILED_MSG);
- RETURN_FALSE;
- }
-
- val = mhash_keygen_ext( KEYGEN_S2K_SALTED, keystruct, ret, size, password, password_len);
- if (val >= 0) {
- RETVAL_STRINGL(ret, size, 0);
- } else {
- php_error(E_WARNING, MHASH_KEYGEN_FAILED_MSG);
- efree(ret);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/mhash/mhash.dsp b/ext/mhash/mhash.dsp
deleted file mode 100644
index 12525935d8..0000000000
--- a/ext/mhash/mhash.dsp
+++ /dev/null
@@ -1,115 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mhash" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mhash - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mhash.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mhash.mak" CFG="mhash - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mhash - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mhash - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mhash - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_MHASH" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /D "WIN32" /D "MHASH_EXPORTS" /D "COMPILE_DL_MHASH" /D HAVE_LIBMHASH=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib libmhash.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mhash.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "mhash - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_MHASH" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MHASH_EXPORTS" /D "COMPILE_DL_MHASH" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MHASH=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib libmhash.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mhash.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "mhash - Win32 Release_TS"
-# Name "mhash - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mhash.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mhash.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/mhash/php_mhash.h b/ext/mhash/php_mhash.h
deleted file mode 100644
index 9acd447d81..0000000000
--- a/ext/mhash/php_mhash.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef PHP_MHASH_H
-#define PHP_MHASH_H
-
-#if HAVE_LIBMHASH
-
-#if PHP_API_VERSION < 19990421
-#define zend_module_entry zend_module_entry
-#include "zend_modules.h"
-#include "internal_functions.h"
-#endif
-
-extern zend_module_entry mhash_module_entry;
-#define mhash_module_ptr &mhash_module_entry
-
-PHP_FUNCTION(mhash_get_block_size);
-PHP_FUNCTION(mhash_get_hash_name);
-PHP_FUNCTION(mhash_count);
-PHP_FUNCTION(mhash_keygen_s2k);
-PHP_FUNCTION(mhash);
-
-#else
-#define mhash_module_ptr NULL
-#endif
-
-#define phpext_mhash_ptr mhash_module_ptr
-
-#endif
diff --git a/ext/mime_magic/CREDITS b/ext/mime_magic/CREDITS
deleted file mode 100644
index ce54609ecc..0000000000
--- a/ext/mime_magic/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mime_magic
-Hartmut Holzgraefe
diff --git a/ext/mime_magic/EXPERIMENTAL b/ext/mime_magic/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/mime_magic/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/mime_magic/TODO b/ext/mime_magic/TODO
deleted file mode 100644
index a1487ffdae..0000000000
--- a/ext/mime_magic/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-- general cleanup
-- support for content-encoding / compressed files
-- use streams
diff --git a/ext/mime_magic/config.m4 b/ext/mime_magic/config.m4
deleted file mode 100644
index 9342ed2306..0000000000
--- a/ext/mime_magic/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension mime_magic
-
-PHP_ARG_ENABLE(mime_magic, whether to enable mime_magic support,
-[ --enable-mime_magic Enable mime_magic support])
-
-if test "$PHP_MIME_MAGIC" = "yes"; then
- dnl PHP_SUBST(MIME_MAGIC_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(mime_magic, mime_magic.c, $ext_shared)
-fi
diff --git a/ext/mime_magic/mime_magic.c b/ext/mime_magic/mime_magic.c
deleted file mode 100644
index 451e71568d..0000000000
--- a/ext/mime_magic/mime_magic.c
+++ /dev/null
@@ -1,2023 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
-
- $Id$
-
- This module contains a lot of stuff taken from Apache mod_mime_magic,
- so the lincense section is a little bit longer than usual:
-
- ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation. 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 the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * 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 THE APACHE SOFTWARE FOUNDATION OR
- * ITS 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 the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Group in July
- * 1997. Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Group.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix. Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- * For compliance with Mr Darwin's terms: this has been very significantly
- * modified from the free "file" command.
- * - all-in-one file for compilation convenience when moving from one
- * version of Apache to the next.
- * - Memory allocation is done through the Apache API's pool structure.
- * - All functions have had necessary Apache API request or server
- * structures passed to them where necessary to call other Apache API
- * routines. (i.e. usually for logging, files, or memory allocation in
- * itself or a called function.)
- * - struct magic has been converted from an array to a single-ended linked
- * list because it only grows one record at a time, it's only accessed
- * sequentially, and the Apache API has no equivalent of realloc().
- * - Functions have been changed to get their parameters from the server
- * configuration instead of globals. (It should be reentrant now but has
- * not been tested in a threaded environment.)
- * - Places where it used to print results to stdout now saves them in a
- * list where they're used to set the MIME type in the Apache request
- * record.
- * - Command-line flags have been removed since they will never be used here.
- *
- * Ian Kluft <ikluft@cisco.com>
- * Engineering Information Framework
- * Central Engineering
- * Cisco Systems, Inc.
- * San Jose, CA, USA
- *
- * Initial installation July/August 1996
- * Misc bug fixes May 1997
- * Submission to Apache Group July 1997
- *
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mime_magic.h"
-
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#define MODNAME "mime_magic"
-
-static int apprentice(void);
-static int ascmagic(unsigned char *, int);
-static int is_tar(unsigned char *, int);
-static int softmagic(unsigned char *, int);
-static void tryit(unsigned char *, int, int);
-
-static int getvalue(struct magic *, char **);
-static int hextoint(int);
-static char *getstr(char *, char *, int, int *);
-static int parse(char *, int);
-
-static int match(unsigned char *, int);
-static int mget(union VALUETYPE *, unsigned char *,
- struct magic *, int);
-static int mcheck(union VALUETYPE *, struct magic *);
-static void mprint(union VALUETYPE *, struct magic *);
-static int mconvert(union VALUETYPE *, struct magic *);
-static int magic_rsl_get(char **, char **);
-static int magic_process(char *);
-
-static long from_oct(int, char *);
-static int fsmagic(const char *fn);
-
-
-#if HAVE_ZLIB
-static int zmagic(unsigned char *, int);
-#endif
-
-static magic_req_rec *magic_set_config(void);
-static void magic_free_config(magic_req_rec *);
-
-ZEND_DECLARE_MODULE_GLOBALS(mime_magic)
-
-
-/* True global resources - no need for thread safety here */
-/* static int le_mime_magic; */
-static magic_server_config_rec mime_global;
-
-/* {{{ mime_magic_functions[]
- *
- * Every user visible function must have an entry in mime_magic_functions[].
- */
-function_entry mime_magic_functions[] = {
- PHP_FE(mime_content_type, NULL) /* For testing, remove later. */
- {NULL, NULL, NULL} /* Must be the last line in mime_magic_functions[] */
-};
-/* }}} */
-
-/* {{{ mime_magic_module_entry
- */
-zend_module_entry mime_magic_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "mime_magic",
- mime_magic_functions,
- PHP_MINIT(mime_magic),
- PHP_MSHUTDOWN(mime_magic),
- PHP_RINIT(mime_magic), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(mime_magic), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(mime_magic),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_MIME_MAGIC
-ZEND_GET_MODULE(mime_magic)
-#endif
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-STD_PHP_INI_ENTRY("mime_magic.magicfile", "/usr/share/misc/magic.mime", PHP_INI_SYSTEM, OnUpdateString, magicfile, zend_mime_magic_globals, mime_magic_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_mime_magic_init_globals
- */
-static void php_mime_magic_init_globals(zend_mime_magic_globals *mime_magic_globals)
-{
- mime_global.magicfile = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(mime_magic)
-{
- ZEND_INIT_MODULE_GLOBALS(mime_magic, php_mime_magic_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
- mime_global.magicfile = MIME_MAGIC_G(magicfile);
-
- if(mime_global.magicfile) {
- apprentice();
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(mime_magic)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(mime_magic)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(mime_magic)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mime_magic)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "mime_magic support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-
-/* Remove the following function when you have succesfully modified config.m4
- so that your module can be compiled into PHP, it exists only for testing
- purposes. */
-
-/* {{{ proto string mime_content_type(string filename)
- Return content-type for file */
-PHP_FUNCTION(mime_content_type)
-{
- char *filename = NULL;
- int filename_len;
- magic_server_config_rec *conf = &mime_global;
- char *content_type=NULL, *content_encoding=NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
- return;
- }
-
- if(!conf->magic) {
- php_error(E_WARNING, MODNAME " not initialized");
- RETURN_FALSE;
- }
-
- MIME_MAGIC_G(req_dat) = magic_set_config();
-
- if(MIME_MAGIC_OK != magic_process(filename)) {
- RETVAL_FALSE;
- } else if(MIME_MAGIC_OK != magic_rsl_get(&content_type, &content_encoding)) {
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(content_type, 1);
- }
-
- if(content_type) efree(content_type);
- if(content_encoding) efree(content_encoding);
-
- magic_free_config(MIME_MAGIC_G(req_dat));
-}
-/* }}} */
-
-#define EATAB {while (isspace((unsigned char) *l)) ++l;}
-
-/*
- * apprentice - load configuration from the magic file r
- * API request record
- */
-static int apprentice(void)
-{
- FILE *f;
- char line[BUFSIZ + 1];
- int errs = 0;
- int lineno;
-#if MIME_MAGIC_DEBUG
- int rule = 0;
- struct magic *m, *prevm;
-#endif
- char *fname;
- magic_server_config_rec *conf = &mime_global;
-
- fname = conf->magicfile; // todo cwd?
- f = fopen(fname, "r");
- if (f == NULL) {
- php_error(E_WARNING,
- MODNAME ": can't read magic file %s", fname);
- return -1;
- }
-
- /* set up the magic list (empty) */
- conf->magic = conf->last = NULL;
-
- /* parse it */
- for (lineno = 1; fgets(line, BUFSIZ, f) != NULL; lineno++) {
- int ws_offset;
-
- /* delete newline */
- if (line[0]) {
- line[strlen(line) - 1] = '\0';
- }
-
- /* skip leading whitespace */
- ws_offset = 0;
- while (line[ws_offset] && isspace(line[ws_offset])) {
- ws_offset++;
- }
-
- /* skip blank lines */
- if (line[ws_offset] == 0) {
- continue;
- }
-
- /* comment, do not parse */
- if (line[ws_offset] == '#')
- continue;
-
-#if MIME_MAGIC_DEBUG
- /* if we get here, we're going to use it so count it */
- rule++;
-#endif
-
- /* parse it */
- if (parse(line + ws_offset, lineno) != 0)
- ++errs;
- }
-
- (void) fclose(f);
-
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": apprentice conf=%x file=%s m=%s m->next=%s last=%s",
- conf,
- conf->magicfile ? conf->magicfile : "NULL",
- conf->magic ? "set" : "NULL",
- (conf->magic && conf->magic->next) ? "set" : "NULL",
- conf->last ? "set" : "NULL");
- php_error(E_NOTICE,
- MODNAME ": apprentice read %d lines, %d rules, %d errors",
- lineno, rule, errs);
-#endif
-
-#if MIME_MAGIC_DEBUG
- prevm = 0;
- php_error(E_NOTICE,
- MODNAME ": apprentice test");
- for (m = conf->magic; m; m = m->next) {
- if (isprint((((unsigned long) m) >> 24) & 255) &&
- isprint((((unsigned long) m) >> 16) & 255) &&
- isprint((((unsigned long) m) >> 8) & 255) &&
- isprint(((unsigned long) m) & 255)) {
- php_error(E_NOTICE,
- MODNAME ": apprentice: POINTER CLOBBERED! "
- "m=\"%c%c%c%c\" line=%d",
- (((unsigned long) m) >> 24) & 255,
- (((unsigned long) m) >> 16) & 255,
- (((unsigned long) m) >> 8) & 255,
- ((unsigned long) m) & 255,
- prevm ? prevm->lineno : -1);
- break;
- }
- prevm = m;
- }
-#endif
-
- return (errs ? -1 : 0);
-}
-
-/*
- * extend the sign bit if the comparison is to be signed
- */
-static unsigned long signextend(struct magic *m, unsigned long v)
-{
- if (!(m->flag & UNSIGNED))
- switch (m->type) {
- /*
- * Do not remove the casts below. They are vital. When later
- * compared with the data, the sign extension must have happened.
- */
- case BYTE:
- v = (char) v;
- break;
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = (short) v;
- break;
- case DATE:
- case BEDATE:
- case LEDATE:
- case LONG:
- case BELONG:
- case LELONG:
- v = (long) v;
- break;
- case STRING:
- break;
- default:
- php_error(E_WARNING,
- MODNAME ": can't happen: m->type=%d", m->type);
- return -1;
- }
- return v;
-}
-
-/*
- * parse one line from magic file, put into magic[index++] if valid
- */
-static int parse(char *l, int lineno)
-{
- struct magic *m;
- char *t, *s;
- magic_server_config_rec *conf = &mime_global;
-
- /* allocate magic structure entry */
- m = (struct magic *) calloc(1, sizeof(struct magic));
-
- /* append to linked list */
- m->next = NULL;
- if (!conf->magic || !conf->last) {
- conf->magic = conf->last = m;
- }
- else {
- conf->last->next = m;
- conf->last = m;
- }
-
- /* set values in magic structure */
- m->flag = 0;
- m->cont_level = 0;
- m->lineno = lineno;
-
- while (*l == '>') {
- ++l; /* step over */
- m->cont_level++;
- }
-
- if (m->cont_level != 0 && *l == '(') {
- ++l; /* step over */
- m->flag |= INDIR;
- }
-
- /* get offset, then skip over it */
- m->offset = (int) strtol(l, &t, 0);
- if (l == t) {
- php_error(E_WARNING,
- MODNAME ": offset %s invalid", l);
- }
- l = t;
-
- if (m->flag & INDIR) {
- m->in.type = LONG;
- m->in.offset = 0;
- /*
- * read [.lbs][+-]nnnnn)
- */
- if (*l == '.') {
- switch (*++l) {
- case 'l':
- m->in.type = LONG;
- break;
- case 's':
- m->in.type = SHORT;
- break;
- case 'b':
- m->in.type = BYTE;
- break;
- default:
- php_error(E_WARNING,
- MODNAME ": indirect offset type %c invalid", *l);
- break;
- }
- l++;
- }
- s = l;
- if (*l == '+' || *l == '-')
- l++;
- if (isdigit((unsigned char) *l)) {
- m->in.offset = strtol(l, &t, 0);
- if (*s == '-')
- m->in.offset = -m->in.offset;
- }
- else
- t = l;
- if (*t++ != ')') {
- php_error(E_WARNING,
- MODNAME ": missing ')' in indirect offset");
- }
- l = t;
- }
-
-
- while (isdigit((unsigned char) *l))
- ++l;
- EATAB;
-
-#define NBYTE 4
-#define NSHORT 5
-#define NLONG 4
-#define NSTRING 6
-#define NDATE 4
-#define NBESHORT 7
-#define NBELONG 6
-#define NBEDATE 6
-#define NLESHORT 7
-#define NLELONG 6
-#define NLEDATE 6
-
- if (*l == 'u') {
- ++l;
- m->flag |= UNSIGNED;
- }
-
- /* get type, skip it */
- if (strncmp(l, "byte", NBYTE) == 0) {
- m->type = BYTE;
- l += NBYTE;
- }
- else if (strncmp(l, "short", NSHORT) == 0) {
- m->type = SHORT;
- l += NSHORT;
- }
- else if (strncmp(l, "long", NLONG) == 0) {
- m->type = LONG;
- l += NLONG;
- }
- else if (strncmp(l, "string", NSTRING) == 0) {
- m->type = STRING;
- l += NSTRING;
- }
- else if (strncmp(l, "date", NDATE) == 0) {
- m->type = DATE;
- l += NDATE;
- }
- else if (strncmp(l, "beshort", NBESHORT) == 0) {
- m->type = BESHORT;
- l += NBESHORT;
- }
- else if (strncmp(l, "belong", NBELONG) == 0) {
- m->type = BELONG;
- l += NBELONG;
- }
- else if (strncmp(l, "bedate", NBEDATE) == 0) {
- m->type = BEDATE;
- l += NBEDATE;
- }
- else if (strncmp(l, "leshort", NLESHORT) == 0) {
- m->type = LESHORT;
- l += NLESHORT;
- }
- else if (strncmp(l, "lelong", NLELONG) == 0) {
- m->type = LELONG;
- l += NLELONG;
- }
- else if (strncmp(l, "ledate", NLEDATE) == 0) {
- m->type = LEDATE;
- l += NLEDATE;
- }
- else {
- php_error(E_WARNING,
- MODNAME ": type %s invalid", l);
- return -1;
- }
- /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
- if (*l == '&') {
- ++l;
- m->mask = signextend(m, strtol(l, &l, 0));
- }
- else
- m->mask = ~0L;
- EATAB;
-
- switch (*l) {
- case '>':
- case '<':
- /* Old-style anding: "0 byte &0x80 dynamically linked" */
- case '&':
- case '^':
- case '=':
- m->reln = *l;
- ++l;
- break;
- case '!':
- if (m->type != STRING) {
- m->reln = *l;
- ++l;
- break;
- }
- /* FALL THROUGH */
- default:
- if (*l == 'x' && isspace((unsigned char) l[1])) {
- m->reln = *l;
- ++l;
- goto GetDesc; /* Bill The Cat */
- }
- m->reln = '=';
- break;
- }
- EATAB;
-
- if (getvalue(m, &l))
- return -1;
- /*
- * now get last part - the description
- */
- GetDesc:
- EATAB;
- if (l[0] == '\b') {
- ++l;
- m->nospflag = 1;
- }
- else if ((l[0] == '\\') && (l[1] == 'b')) {
- ++l;
- ++l;
- m->nospflag = 1;
- }
- else
- m->nospflag = 0;
- strncpy(m->desc, l, sizeof(m->desc) - 1);
- m->desc[sizeof(m->desc) - 1] = '\0';
-
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": parse line=%d m=%x next=%x cont=%d desc=%s",
- lineno, m, m->next, m->cont_level, m->desc);
-#endif /* MIME_MAGIC_DEBUG */
-
- return 0;
-}
-
-/*
- * Read a numeric value from a pointer, into the value union of a magic
- * pointer, according to the magic type. Update the string pointer to point
- * just after the number read. Return 0 for success, non-zero for failure.
- */
-static int getvalue(struct magic *m, char **p)
-{
- int slen;
-
- if (m->type == STRING) {
- *p = getstr(*p, m->value.s, sizeof(m->value.s), &slen);
- m->vallen = slen;
- }
- else if (m->reln != 'x')
- m->value.l = signextend(m, strtol(*p, p, 0));
- return 0;
-}
-
-/*
- * Convert a string containing C character escapes. Stop at an unescaped
- * space or tab. Copy the converted version to "p", returning its length in
- * *slen. Return updated scan pointer as function result.
- */
-static char *getstr(register char *s, register char *p,
- int plen, int *slen)
-{
- char *origs = s, *origp = p;
- char *pmax = p + plen - 1;
- register int c;
- register int val;
-
- while ((c = *s++) != '\0') {
- if (isspace((unsigned char) c))
- break;
- if (p >= pmax) {
- php_error(E_WARNING,
- MODNAME ": string too long: %s", origs);
- break;
- }
- if (c == '\\') {
- switch (c = *s++) {
-
- case '\0':
- goto out;
-
- default:
- *p++ = (char) c;
- break;
-
- case 'n':
- *p++ = '\n';
- break;
-
- case 'r':
- *p++ = '\r';
- break;
-
- case 'b':
- *p++ = '\b';
- break;
-
- case 't':
- *p++ = '\t';
- break;
-
- case 'f':
- *p++ = '\f';
- break;
-
- case 'v':
- *p++ = '\v';
- break;
-
- /* \ and up to 3 octal digits */
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- val = c - '0';
- c = *s++; /* try for 2 */
- if (c >= '0' && c <= '7') {
- val = (val << 3) | (c - '0');
- c = *s++; /* try for 3 */
- if (c >= '0' && c <= '7')
- val = (val << 3) | (c - '0');
- else
- --s;
- }
- else
- --s;
- *p++ = (char) val;
- break;
-
- /* \x and up to 3 hex digits */
- case 'x':
- val = 'x'; /* Default if no digits */
- c = hextoint(*s++); /* Get next char */
- if (c >= 0) {
- val = c;
- c = hextoint(*s++);
- if (c >= 0) {
- val = (val << 4) + c;
- c = hextoint(*s++);
- if (c >= 0) {
- val = (val << 4) + c;
- }
- else
- --s;
- }
- else
- --s;
- }
- else
- --s;
- *p++ = (char) val;
- break;
- }
- }
- else
- *p++ = (char) c;
- }
- out:
- *p = '\0';
- *slen = p - origp;
- return s;
-}
-
-/* Single hex char to int; -1 if not a hex char. */
-static int hextoint(int c)
-{
- if (isdigit((unsigned char) c))
- return c - '0';
- if ((c >= 'a') && (c <= 'f'))
- return c + 10 - 'a';
- if ((c >= 'A') && (c <= 'F'))
- return c + 10 - 'A';
- return -1;
-}
-
-
-/*
- * RSL (result string list) processing routines
- *
- * These collect strings that would have been printed in fragments by file(1)
- * into a list of magic_rsl structures with the strings. When complete,
- * they're concatenated together to become the MIME content and encoding
- * types.
- *
- * return value conventions for these functions: functions which return int:
- * failure = -1, other = result functions which return pointers: failure = 0,
- * other = result
- */
-
-/* allocate a per-request structure and put it in the request record */
-static magic_req_rec *magic_set_config(void)
-{
- magic_req_rec *req_dat = (magic_req_rec *) emalloc(sizeof(magic_req_rec));
-
- req_dat->head = req_dat->tail = (magic_rsl *) NULL;
- return req_dat;
-}
-
-static void magic_free_config(magic_req_rec *req_dat) {
- magic_rsl *curr, *next;
-
- if(!req_dat) return;
-
- curr = req_dat->head;
- while(curr) {
- next = curr->next;
- efree(curr->str);
- efree(curr);
- curr = next;
- }
-
- efree(req_dat);
-}
-
-/* add a string to the result string list for this request */
-/* it is the responsibility of the caller to allocate "str" */
-static int magic_rsl_add(char *str)
-{
- magic_req_rec *req_dat;
- magic_rsl *rsl;
- TSRMLS_FETCH();
-
- req_dat = MIME_MAGIC_G(req_dat);
-
- /* make sure we have a list to put it in */
- if (!req_dat) {
- php_error(E_WARNING,
- MODNAME ": request config should not be NULL");
- if (!(req_dat = magic_set_config())) {
- /* failure */
- return -1;
- }
- }
-
- /* allocate the list entry */
- rsl = (magic_rsl *) emalloc(sizeof(magic_rsl));
-
- /* fill it */
- rsl->str = estrdup(str);
- rsl->next = (magic_rsl *) NULL;
-
- /* append to the list */
- if (req_dat->head && req_dat->tail) {
- req_dat->tail->next = rsl;
- req_dat->tail = rsl;
- }
- else {
- req_dat->head = req_dat->tail = rsl;
- }
-
- /* success */
- return 0;
-}
-
-/* RSL hook for puts-type functions */
-static int magic_rsl_puts(char *str)
-{
- return magic_rsl_add(str);
-}
-
-/* RSL hook for printf-type functions */
-static int magic_rsl_printf(char *str,...)
-{
- va_list ap;
-
- char buf[MAXMIMESTRING];
-
- /* assemble the string into the buffer */
- va_start(ap, str);
- vsnprintf(buf, sizeof(buf), str, ap);
- va_end(ap);
-
- /* add the buffer to the list */
- return magic_rsl_add(buf);
-}
-
-/* RSL hook for putchar-type functions */
-static int magic_rsl_putchar(char c)
-{
- char str[2];
-
- /* high overhead for 1 char - just hope they don't do this much */
- str[0] = c;
- str[1] = '\0';
- return magic_rsl_add(str);
-}
-
-/* allocate and copy a contiguous string from a result string list */
-static char *rsl_strdup(int start_frag, int start_pos, int len)
-{
- char *result; /* return value */
- int cur_frag, /* current fragment number/counter */
- cur_pos, /* current position within fragment */
- res_pos; /* position in result string */
- magic_rsl *frag; /* list-traversal pointer */
- magic_req_rec *req_dat;
- TSRMLS_FETCH();
-
- req_dat = MIME_MAGIC_G(req_dat);
-
- /* allocate the result string */
- result = (char *) emalloc(len + 1);
-
- /* loop through and collect the string */
- res_pos = 0;
- for (frag = req_dat->head, cur_frag = 0;
- frag->next;
- frag = frag->next, cur_frag++) {
- /* loop to the first fragment */
- if (cur_frag < start_frag)
- continue;
-
- /* loop through and collect chars */
- for (cur_pos = (cur_frag == start_frag) ? start_pos : 0;
- frag->str[cur_pos];
- cur_pos++) {
- if (cur_frag >= start_frag
- && cur_pos >= start_pos
- && res_pos <= len) {
- result[res_pos++] = frag->str[cur_pos];
- if (res_pos > len) {
- break;
- }
- }
- }
- }
-
- /* clean up and return */
- result[res_pos] = 0;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": rsl_strdup() %d chars: %s", res_pos - 1, result);
-#endif
- return result;
-}
-
-/*
- * magic_process - process input file r Apache API request record
- * (formerly called "process" in file command, prefix added for clarity) Opens
- * the file and reads a fixed-size buffer to begin processing the contents.
- */
-static int magic_process(char *filename)
-{
- int fd = 0;
- unsigned char buf[HOWMANY + 1]; /* one extra for terminating '\0' */
- int nbytes = 0; /* number of bytes read from a datafile */
- int result;
-
- /*
- * first try judging the file based on its filesystem status
- */
- switch ((result = fsmagic(filename))) {
- case MIME_MAGIC_DONE:
- magic_rsl_putchar('\n');
- return MIME_MAGIC_OK;
- case MIME_MAGIC_OK:
- break;
- default:
- /* fatal error, bail out */
- return result;
- }
-
- if ((fd = open(filename, O_RDONLY, 0)) < 0) {
- /* We can't open it, but we were able to stat it. */
- php_error(E_WARNING,
- MODNAME ": can't read `%s'", filename);
- /* let some other handler decide what the problem is */
- return MIME_MAGIC_DECLINED;
- }
-
- /*
- * try looking at the first HOWMANY bytes
- */
- if ((nbytes = read(fd, (char *) buf, sizeof(buf) - 1)) == -1) {
- php_error(E_WARNING,
- MODNAME ": read failed: %s", filename);
- return MIME_MAGIC_ERROR;
- }
-
- if (nbytes == 0)
- magic_rsl_puts(MIME_TEXT_UNKNOWN);
- else {
- buf[nbytes++] = '\0'; /* null-terminate it */
- tryit(buf, nbytes, 1);
- }
-
- (void) close(fd);
- (void) magic_rsl_putchar('\n');
-
- return MIME_MAGIC_OK;
-}
-
-static void tryit(unsigned char *buf, int nb, int checkzmagic)
-{
- /*
- * Try compression stuff
- */
-#if HAVE_ZLIB
- if (checkzmagic == 1) {
- if (zmagic(buf, nb) == 1)
- return;
- }
-#endif
-
- /*
- * try tests in /etc/magic (or surrogate magic file)
- */
- if (softmagic(buf, nb) == 1)
- return;
-
- /*
- * try known keywords, check for ascii-ness too.
- */
- if (ascmagic(buf, nb) == 1)
- return;
-
- /*
- * abandon hope, all ye who remain here
- */
- magic_rsl_puts(MIME_BINARY_UNKNOWN);
-}
-
-
-/*
- * return MIME_MAGIC_DONE to indicate it's been handled
- * return MIME_MAGIC_OK to indicate it's a regular file still needing handling
- * other returns indicate a failure of some sort
- */
-static int fsmagic(const char *fn)
-{
- struct stat finfo;
-
- stat(fn, &finfo);
-
- switch (finfo.st_mode & S_IFMT) {
- case S_IFDIR:
- magic_rsl_puts(DIR_MAGIC_TYPE);
- return MIME_MAGIC_DONE;
- case S_IFCHR:
- /*
- * (void) magic_rsl_printf(r,"character special (%d/%d)",
- * major(sb->st_rdev), minor(sb->st_rdev));
- */
- (void) magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
-#ifdef S_IFBLK
- case S_IFBLK:
- /*
- * (void) magic_rsl_printf(r,"block special (%d/%d)",
- * major(sb->st_rdev), minor(sb->st_rdev));
- */
- (void) magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
- /* TODO add code to handle V7 MUX and Blit MUX files */
-#endif
-#ifdef S_IFIFO
- case S_IFIFO:
- /*
- * magic_rsl_puts(r,"fifo (named pipe)");
- */
- (void) magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
-#endif
-#ifdef S_IFLNK
- case S_IFLNK:
- /* We used stat(), the only possible reason for this is that the
- * symlink is broken.
- */
- php_error(E_WARNING,
- MODNAME ": broken symlink (%s)", fn);
- return MIME_MAGIC_ERROR;
-#endif
-#ifdef S_IFSOCK
-#ifndef __COHERENT__
- case S_IFSOCK:
- magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
-#endif
-#endif
- case S_IFREG:
- break;
- default:
- php_error(E_WARNING,
- MODNAME ": invalid mode 0%o.", (unsigned int)finfo.st_mode);
- return MIME_MAGIC_ERROR;
- }
-
- /*
- * regular file, check next possibility
- */
- if (finfo.st_size == 0) {
- magic_rsl_puts(MIME_TEXT_UNKNOWN);
- return MIME_MAGIC_DONE;
- }
- return MIME_MAGIC_OK;
-}
-
-/*
- * softmagic - lookup one file in database (already read from /etc/magic by
- * apprentice.c). Passed the name and FILE * of one file to be typed.
- */
-/* ARGSUSED1 *//* nbytes passed for regularity, maybe need later */
-static int softmagic(unsigned char *buf, int nbytes)
-{
- if (match(buf, nbytes))
- return 1;
-
- return 0;
-}
-
-/*
- * Go through the whole list, stopping if you find a match. Process all the
- * continuations of that match before returning.
- *
- * We support multi-level continuations:
- *
- * At any time when processing a successful top-level match, there is a current
- * continuation level; it represents the level of the last successfully
- * matched continuation.
- *
- * Continuations above that level are skipped as, if we see one, it means that
- * the continuation that controls them - i.e, the lower-level continuation
- * preceding them - failed to match.
- *
- * Continuations below that level are processed as, if we see one, it means
- * we've finished processing or skipping higher-level continuations under the
- * control of a successful or unsuccessful lower-level continuation, and are
- * now seeing the next lower-level continuation and should process it. The
- * current continuation level reverts to the level of the one we're seeing.
- *
- * Continuations at the current level are processed as, if we see one, there's
- * no lower-level continuation that may have failed.
- *
- * If a continuation matches, we bump the current continuation level so that
- * higher-level continuations are processed.
- */
-static int match(unsigned char *s, int nbytes)
-{
-#if MIME_MAGIC_DEBUG
- int rule_counter = 0;
-#endif
- int cont_level = 0;
- int need_separator = 0;
- union VALUETYPE p;
- magic_server_config_rec *conf = &mime_global;
- struct magic *m;
-
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": match conf=%x file=%s m=%s m->next=%s last=%s",
- conf,
- conf->magicfile ? conf->magicfile : "NULL",
- conf->magic ? "set" : "NULL",
- (conf->magic && conf->magic->next) ? "set" : "NULL",
- conf->last ? "set" : "NULL");
-#endif
-
-#if MIME_MAGIC_DEBUG
- for (m = conf->magic; m; m = m->next) {
- if (isprint((((unsigned long) m) >> 24) & 255) &&
- isprint((((unsigned long) m) >> 16) & 255) &&
- isprint((((unsigned long) m) >> 8) & 255) &&
- isprint(((unsigned long) m) & 255)) {
- php_error(E_NOTICE,
- MODNAME ": match: POINTER CLOBBERED! "
- "m=\"%c%c%c%c\"",
- (((unsigned long) m) >> 24) & 255,
- (((unsigned long) m) >> 16) & 255,
- (((unsigned long) m) >> 8) & 255,
- ((unsigned long) m) & 255);
- break;
- }
- }
-#endif
-
- for (m = conf->magic; m; m = m->next) {
-#if MIME_MAGIC_DEBUG
- rule_counter++;
- php_error(E_NOTICE,
- MODNAME ": line=%d desc=%s", m->lineno, m->desc);
-#endif
-
- /* check if main entry matches */
- if (!mget(&p, s, m, nbytes) ||
- !mcheck(&p, m)) {
- struct magic *m_cont;
-
- /*
- * main entry didn't match, flush its continuations
- */
- if (!m->next || (m->next->cont_level == 0)) {
- continue;
- }
-
- m_cont = m->next;
- while (m_cont && (m_cont->cont_level != 0)) {
-#if MIME_MAGIC_DEBUG
- rule_counter++;
- php_error(E_NOTICE,
- MODNAME ": line=%d mc=%x mc->next=%x cont=%d desc=%s",
- m_cont->lineno, m_cont,
- m_cont->next, m_cont->cont_level,
- m_cont->desc);
-#endif
- /*
- * this trick allows us to keep *m in sync when the continue
- * advances the pointer
- */
- m = m_cont;
- m_cont = m_cont->next;
- }
- continue;
- }
-
- /* if we get here, the main entry rule was a match */
- /* this will be the last run through the loop */
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": rule matched, line=%d type=%d %s",
- m->lineno, m->type,
- (m->type == STRING) ? m->value.s : "");
-#endif
-
- /* print the match */
- mprint(&p, m);
-
- /*
- * If we printed something, we'll need to print a blank before we
- * print something else.
- */
- if (m->desc[0])
- need_separator = 1;
- /* and any continuations that match */
- cont_level++;
- /*
- * while (m && m->next && m->next->cont_level != 0 && ( m = m->next
- * ))
- */
- m = m->next;
- while (m && (m->cont_level != 0)) {
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": match line=%d cont=%d type=%d %s",
- m->lineno, m->cont_level, m->type,
- (m->type == STRING) ? m->value.s : "");
-#endif
- if (cont_level >= m->cont_level) {
- if (cont_level > m->cont_level) {
- /*
- * We're at the end of the level "cont_level"
- * continuations.
- */
- cont_level = m->cont_level;
- }
- if (mget(&p, s, m, nbytes) &&
- mcheck(&p, m)) {
- /*
- * This continuation matched. Print its message, with a
- * blank before it if the previous item printed and this
- * item isn't empty.
- */
- /* space if previous printed */
- if (need_separator
- && (m->nospflag == 0)
- && (m->desc[0] != '\0')
- ) {
- (void) magic_rsl_putchar(' ');
- need_separator = 0;
- }
- mprint(&p, m);
- if (m->desc[0])
- need_separator = 1;
-
- /*
- * If we see any continuations at a higher level, process
- * them.
- */
- cont_level++;
- }
- }
-
- /* move to next continuation record */
- m = m->next;
- }
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": matched after %d rules", rule_counter);
-#endif
- return 1; /* all through */
- }
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- MODNAME ": failed after %d rules", rule_counter);
-#endif
- return 0; /* no match at all */
-}
-
-/* an optimization over plain strcmp() */
-#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-static int ascmagic(unsigned char *buf, int nbytes)
-{
- int has_escapes = 0;
- unsigned char *s;
- char nbuf[HOWMANY + 1]; /* one extra for terminating '\0' */
- char *token;
- register struct names *p;
- int small_nbytes;
-
- /* these are easy, do them first */
-
- /*
- * for troff, look for . + letter + letter or .\"; this must be done to
- * disambiguate tar archives' ./file and other trash from real troff
- * input.
- */
- if (*buf == '.') {
- unsigned char *tp = buf + 1;
-
- while (isspace(*tp))
- ++tp; /* skip leading whitespace */
- if ((isalnum(*tp) || *tp == '\\') &&
- (isalnum(*(tp + 1)) || *tp == '"')) {
- magic_rsl_puts("application/x-troff");
- return 1;
- }
- }
- if ((*buf == 'c' || *buf == 'C') && isspace(*(buf + 1))) {
- /* Fortran */
- magic_rsl_puts("text/plain");
- return 1;
- }
-
- /* look for tokens from names.h - this is expensive!, so we'll limit
- * ourselves to only SMALL_HOWMANY bytes */
- small_nbytes = (nbytes > SMALL_HOWMANY) ? SMALL_HOWMANY : nbytes;
- /* make a copy of the buffer here because strtok() will destroy it */
- s = (unsigned char *) memcpy(nbuf, buf, small_nbytes);
- s[small_nbytes] = '\0';
- has_escapes = (memchr(s, '\033', small_nbytes) != NULL);
- /* XXX: not multithread safe */
- while ((token = strtok((char *) s, " \t\n\r\f")) != NULL) {
- s = NULL; /* make strtok() keep on tokin' */
- for (p = names; p < names + NNAMES; p++) {
- if (STREQ(p->name, token)) {
- magic_rsl_puts(types[p->type]);
- if (has_escapes)
- magic_rsl_puts(" (with escape sequences)");
- return 1;
- }
- }
- }
-
- switch (is_tar(buf, nbytes)) {
- case 1:
- /* V7 tar archive */
- magic_rsl_puts("application/x-tar");
- return 1;
- case 2:
- /* POSIX tar archive */
- magic_rsl_puts("application/x-tar");
- return 1;
- }
-
- /* all else fails, but it is ascii... */
- if (has_escapes) {
- /* text with escape sequences */
- /* we leave this open for further differentiation later */
- magic_rsl_puts("text/plain");
- }
- else {
- /* plain text */
- magic_rsl_puts("text/plain");
- }
- return 1;
-}
-
-/*
- * is_tar() -- figure out whether file is a tar archive.
- *
- * Stolen (by author of file utility) from the public domain tar program: Public
- * Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
- *
- * @(#)list.c 1.18 9/23/86 Public Domain - gnu $Id: mod_mime_magic.c,v 1.7
- * 1997/06/24 00:41:02 ikluft Exp ikluft $
- *
- * Comments changed and some code/comments reformatted for file command by Ian
- * Darwin.
- */
-
-#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
-
-/*
- * Return 0 if the checksum is bad (i.e., probably not a tar archive), 1 for
- * old UNIX tar file, 2 for Unix Std (POSIX) tar file.
- */
-
-static int is_tar(unsigned char *buf, int nbytes)
-{
- register union record *header = (union record *) buf;
- register int i;
- register long sum, recsum;
- register char *p;
-
- if (nbytes < sizeof(union record))
- return 0;
-
- recsum = from_oct(8, header->header.chksum);
-
- sum = 0;
- p = header->charptr;
- for (i = sizeof(union record); --i >= 0;) {
- /*
- * We can't use unsigned char here because of old compilers, e.g. V7.
- */
- sum += 0xFF & *p++;
- }
-
- /* Adjust checksum to count the "chksum" field as blanks. */
- for (i = sizeof(header->header.chksum); --i >= 0;)
- sum -= 0xFF & header->header.chksum[i];
- sum += ' ' * sizeof header->header.chksum;
-
- if (sum != recsum)
- return 0; /* Not a tar archive */
-
- if (0 == strcmp(header->header.magic, TMAGIC))
- return 2; /* Unix Standard tar archive */
-
- return 1; /* Old fashioned tar archive */
-}
-
-
-/*
- * Quick and dirty octal conversion.
- *
- * Result is -1 if the field is invalid (all blank, or nonoctal).
- */
-static long from_oct(int digs, char *where)
-{
- register long value;
-
- while (isspace(*where)) { /* Skip spaces */
- where++;
- if (--digs <= 0)
- return -1; /* All blank field */
- }
- value = 0;
- while (digs > 0 && isodigit(*where)) { /* Scan til nonoctal */
- value = (value << 3) | (*where++ - '0');
- --digs;
- }
-
- if (digs > 0 && *where && !isspace(*where))
- return -1; /* Ended on non-space/nul */
-
- return value;
-}
-
-static int mget(union VALUETYPE *p, unsigned char *s,
- struct magic *m, int nbytes)
-{
- long offset = m->offset;
-
- if (offset + sizeof(union VALUETYPE) > nbytes)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
-
- if (!mconvert(p, m))
- return 0;
-
- if (m->flag & INDIR) {
-
- switch (m->in.type) {
- case BYTE:
- offset = p->b + m->in.offset;
- break;
- case SHORT:
- offset = p->h + m->in.offset;
- break;
- case LONG:
- offset = p->l + m->in.offset;
- break;
- }
-
- if (offset + sizeof(union VALUETYPE) > nbytes)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
-
- if (!mconvert(p, m))
- return 0;
- }
- return 1;
-}
-
-static int mcheck(union VALUETYPE *p, struct magic *m)
-{
- register unsigned long l = m->value.l;
- register unsigned long v;
- int matched;
-
- if ((m->value.s[0] == 'x') && (m->value.s[1] == '\0')) {
- php_error(E_WARNING,
- MODNAME ": BOINK");
- return 1;
- }
-
- switch (m->type) {
- case BYTE:
- v = p->b;
- break;
-
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = p->h;
- break;
-
- case LONG:
- case BELONG:
- case LELONG:
- case DATE:
- case BEDATE:
- case LEDATE:
- v = p->l;
- break;
-
- case STRING:
- l = 0;
- /*
- * What we want here is: v = strncmp(m->value.s, p->s, m->vallen);
- * but ignoring any nulls. bcmp doesn't give -/+/0 and isn't
- * universally available anyway.
- */
- v = 0;
- {
- register unsigned char *a = (unsigned char *) m->value.s;
- register unsigned char *b = (unsigned char *) p->s;
- register int len = m->vallen;
-
- while (--len >= 0)
- if ((v = *b++ - *a++) != 0)
- break;
- }
- break;
- default:
- /* bogosity, pretend that it just wasn't a match */
- php_error(E_WARNING,
- MODNAME ": invalid type %d in mcheck().", m->type);
- return 0;
- }
-
- v = signextend(m, v) & m->mask;
-
- switch (m->reln) {
- case 'x':
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%lu == *any* = 1", v);
-#endif
- matched = 1;
- break;
-
- case '!':
- matched = v != l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%lu != %lu = %d", v, l, matched);
-#endif
- break;
-
- case '=':
- matched = v == l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%lu == %lu = %d", v, l, matched);
-#endif
- break;
-
- case '>':
- if (m->flag & UNSIGNED) {
- matched = v > l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%lu > %lu = %d", v, l, matched);
-#endif
- }
- else {
- matched = (long) v > (long) l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%ld > %ld = %d", v, l, matched);
-#endif
- }
- break;
-
- case '<':
- if (m->flag & UNSIGNED) {
- matched = v < l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%lu < %lu = %d", v, l, matched);
-#endif
- }
- else {
- matched = (long) v < (long) l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "%ld < %ld = %d", v, l, matched);
-#endif
- }
- break;
-
- case '&':
- matched = (v & l) == l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "((%lx & %lx) == %lx) = %d", v, l, l, matched);
-#endif
- break;
-
- case '^':
- matched = (v & l) != l;
-#if MIME_MAGIC_DEBUG
- php_error(E_NOTICE,
- "((%lx & %lx) != %lx) = %d", v, l, l, matched);
-#endif
- break;
-
- default:
- /* bogosity, pretend it didn't match */
- matched = 0;
- php_error(E_WARNING,
- MODNAME ": mcheck: can't happen: invalid relation %d.",
- m->reln);
- break;
- }
-
- return matched;
-}
-
-#if HAVE_ZLIB
-/*
- * compress routines: zmagic() - returns 0 if not recognized, uncompresses
- * and prints information if recognized uncompress(s, method, old, n, newch)
- * - uncompress old into new, using method, return sizeof new
- */
-
-static int zmagic(unsigned char *buf, int nbytes)
-{
- if (buf[0] != 0x1f) return 0;
-
- switch(buf[1]) {
- case 0x9d: /* .Z "x-compress" */
- break; /* not yet supportet */
-
- case 0x8b: /* .gz "x-gzip" */
-#if 0
- if ((newsize = magic_uncompress(i, &newbuf, nbytes)) > 0) {
- tryit(newbuf, newsize, 0);
-
- /* set encoding type in the request record */
- /* TODO r->content_encoding = compr[i].encoding; */
- }
-#endif
- break; /* not yet supported */
-
- case 0x1e: /* simply packed ? */
- break; /* not yet supported */
- }
-
- return 0;
-}
-#endif
-
-static void mprint(union VALUETYPE *p, struct magic *m)
-{
- char *pp, *rt;
- unsigned long v;
-
- switch (m->type) {
- case BYTE:
- v = p->b;
- break;
-
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = p->h;
- break;
-
- case LONG:
- case BELONG:
- case LELONG:
- v = p->l;
- break;
-
- case STRING:
- if (m->reln == '=') {
- (void) magic_rsl_printf(m->desc, m->value.s);
- }
- else {
- (void) magic_rsl_printf(m->desc, p->s);
- }
- return;
-
- case DATE:
- case BEDATE:
- case LEDATE:
- /* XXX: not multithread safe */
- pp = ctime((time_t *) & p->l);
- if ((rt = strchr(pp, '\n')) != NULL)
- *rt = '\0';
- (void) magic_rsl_printf(m->desc, pp);
- return;
- default:
- php_error(E_WARNING,
- MODNAME ": invalid m->type (%d) in mprint().",
- m->type);
- return;
- }
-
- v = signextend(m, v) & m->mask;
- (void) magic_rsl_printf(m->desc, (unsigned long) v);
-}
-
-/*
- * Convert the byte order of the data we are looking at
- */
-static int mconvert(union VALUETYPE *p, struct magic *m)
-{
- char *rt;
-
- switch (m->type) {
- case BYTE:
- case SHORT:
- case LONG:
- case DATE:
- return 1;
- case STRING:
- /* Null terminate and eat the return */
- p->s[sizeof(p->s) - 1] = '\0';
- if ((rt = strchr(p->s, '\n')) != NULL)
- *rt = '\0';
- return 1;
- case BESHORT:
- p->h = (short) ((p->hs[0] << 8) | (p->hs[1]));
- return 1;
- case BELONG:
- case BEDATE:
- p->l = (long)
- ((p->hl[0] << 24) | (p->hl[1] << 16) | (p->hl[2] << 8) | (p->hl[3]));
- return 1;
- case LESHORT:
- p->h = (short) ((p->hs[1] << 8) | (p->hs[0]));
- return 1;
- case LELONG:
- case LEDATE:
- p->l = (long)
- ((p->hl[3] << 24) | (p->hl[2] << 16) | (p->hl[1] << 8) | (p->hl[0]));
- return 1;
- default:
- php_error(E_WARNING,
- MODNAME ": invalid type %d in mconvert().", m->type);
- return 0;
- }
-}
-
-
-/* states for the state-machine algorithm in magic_rsl_to_request() */
-typedef enum {
- rsl_leading_space, rsl_type, rsl_subtype, rsl_separator, rsl_encoding
-} rsl_states;
-
-/* process the RSL and set the MIME info in the request record */
-static int magic_rsl_get(char **content_type, char **content_encoding)
-{
- int cur_frag, /* current fragment number/counter */
- cur_pos, /* current position within fragment */
- type_frag, /* content type starting point: fragment */
- type_pos, /* content type starting point: position */
- type_len, /* content type length */
- encoding_frag, /* content encoding starting point: fragment */
- encoding_pos, /* content encoding starting point: position */
- encoding_len; /* content encoding length */
-
- magic_rsl *frag; /* list-traversal pointer */
- rsl_states state;
-
- magic_req_rec *req_dat;
-
- TSRMLS_FETCH();
-
- req_dat = MIME_MAGIC_G(req_dat);
-
- /* check if we have a result */
- if (!req_dat || !req_dat->head) {
- /* empty - no match, we defer to other Apache modules */
- return MIME_MAGIC_DECLINED;
- }
-
- /* start searching for the type and encoding */
- state = rsl_leading_space;
- type_frag = type_pos = type_len = 0;
- encoding_frag = encoding_pos = encoding_len = 0;
- for (frag = req_dat->head, cur_frag = 0;
- frag && frag->next;
- frag = frag->next, cur_frag++) {
- /* loop through the characters in the fragment */
- for (cur_pos = 0; frag->str[cur_pos]; cur_pos++) {
- if (isspace(frag->str[cur_pos])) {
- /* process whitespace actions for each state */
- if (state == rsl_leading_space) {
- /* eat whitespace in this state */
- continue;
- }
- else if (state == rsl_type) {
- /* whitespace: type has no slash! */
- return MIME_MAGIC_DECLINED;
- }
- else if (state == rsl_subtype) {
- /* whitespace: end of MIME type */
- state++;
- continue;
- }
- else if (state == rsl_separator) {
- /* eat whitespace in this state */
- continue;
- }
- else if (state == rsl_encoding) {
- /* whitespace: end of MIME encoding */
- /* we're done */
- frag = req_dat->tail;
- break;
- }
- else {
- /* should not be possible */
- /* abandon malfunctioning module */
- php_error(E_WARNING,
- MODNAME ": bad state %d (ws)", state);
- return MIME_MAGIC_DECLINED;
- }
- /* NOTREACHED */
- }
- else if (state == rsl_type &&
- frag->str[cur_pos] == '/') {
- /* copy the char and go to rsl_subtype state */
- type_len++;
- state++;
- }
- else {
- /* process non-space actions for each state */
- if (state == rsl_leading_space) {
- /* non-space: begin MIME type */
- state++;
- type_frag = cur_frag;
- type_pos = cur_pos;
- type_len = 1;
- continue;
- }
- else if (state == rsl_type ||
- state == rsl_subtype) {
- /* non-space: adds to type */
- type_len++;
- continue;
- }
- else if (state == rsl_separator) {
- /* non-space: begin MIME encoding */
- state++;
- encoding_frag = cur_frag;
- encoding_pos = cur_pos;
- encoding_len = 1;
- continue;
- }
- else if (state == rsl_encoding) {
- /* non-space: adds to encoding */
- encoding_len++;
- continue;
- }
- else {
- /* should not be possible */
- /* abandon malfunctioning module */
- php_error(E_WARNING,
- MODNAME ": bad state %d (ns)", state);
- return MIME_MAGIC_DECLINED;
- }
- /* NOTREACHED */
- }
- /* NOTREACHED */
- }
- }
-
- /* if we ended prior to state rsl_subtype, we had incomplete info */
- if (state != rsl_subtype && state != rsl_separator &&
- state != rsl_encoding) {
- /* defer to other modules */
- return MIME_MAGIC_DECLINED;
- }
-
- /* save the info in the request record */
- if (state == rsl_subtype || state == rsl_encoding ||
- state == rsl_encoding) {
- char *tmp;
- tmp = rsl_strdup(type_frag, type_pos, type_len);
- /* XXX: this could be done at config time I'm sure... but I'm
- * confused by all this magic_rsl stuff. -djg */
- /* TODO ap_content_type_tolower(tmp); */
- *content_type = tmp;
- }
- if (state == rsl_encoding) {
- char *tmp;
- tmp = rsl_strdup(encoding_frag,
- encoding_pos, encoding_len);
- /* XXX: this could be done at config time I'm sure... but I'm
- * confused by all this magic_rsl stuff. -djg */
- /* TODO ap_str_tolower(tmp); */
- *content_encoding = tmp;
- }
-
- /* detect memory allocation errors */
- if (!content_type ||
- (state == rsl_encoding && !*content_encoding)) {
- return MIME_MAGIC_ERROR;
- }
-
- /* success! */
- return MIME_MAGIC_OK;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/mime_magic/php_mime_magic.h b/ext/mime_magic/php_mime_magic.h
deleted file mode 100644
index 30fc69382e..0000000000
--- a/ext/mime_magic/php_mime_magic.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef PHP_MIME_MAGIC_H
-#define PHP_MIME_MAGIC_H
-
-#define MIME_MAGIC_DEBUG 0
-
-#define MIME_BINARY_UNKNOWN "application/octet-stream"
-#define MIME_TEXT_UNKNOWN "text/plain"
-
-#define MAXMIMESTRING 256
-
-#define MIME_MAGIC_OK 0
-#define MIME_MAGIC_DECLINED -1
-#define MIME_MAGIC_DONE -2
-#define MIME_MAGIC_ERROR -3
-
-#define DIR_MAGIC_TYPE "httpd/unix-directory"
-
-/* HOWMANY must be at least 4096 to make gzip -dcq work */
-#define HOWMANY 4096
-/* SMALL_HOWMANY limits how much work we do to figure out text files */
-#define SMALL_HOWMANY 1024
-#define MAXDESC 50 /* max leng of text description */
-#define MAXstring 64 /* max leng of "string" types */
-
-struct magic {
- struct magic *next; /* link to next entry */
- int lineno; /* line number from magic file */
-
- short flag;
-#define INDIR 1 /* if '>(...)' appears, */
-#define UNSIGNED 2 /* comparison is unsigned */
- short cont_level; /* level of ">" */
- struct {
- char type; /* byte short long */
- long offset; /* offset from indirection */
- } in;
- long offset; /* offset to magic number */
- unsigned char reln; /* relation (0=eq, '>'=gt, etc) */
- char type; /* int, short, long or string. */
- char vallen; /* length of string value, if any */
-#define BYTE 1
-#define SHORT 2
-#define LONG 4
-#define STRING 5
-#define DATE 6
-#define BESHORT 7
-#define BELONG 8
-#define BEDATE 9
-#define LESHORT 10
-#define LELONG 11
-#define LEDATE 12
- union VALUETYPE {
- unsigned char b;
- unsigned short h;
- unsigned long l;
- char s[MAXstring];
- unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
- unsigned char hl[4]; /* 2 bytes of a fixed-endian "long" */
- } value; /* either number or string */
- unsigned long mask; /* mask before comparison with value */
- char nospflag; /* supress space character */
-
- /* NOTE: this string is suspected of overrunning - find it! */
- char desc[MAXDESC]; /* description */
-};
-
-/*
- * data structures for tar file recognition
- * --------------------------------------------------------------------------
- * Header file for public domain tar (tape archive) program.
- *
- * @(#)tar.h 1.20 86/10/29 Public Domain. Created 25 August 1985 by John
- * Gilmore, ihnp4!hoptoad!gnu.
- *
- * Header block on tape.
- *
- * I'm going to use traditional DP naming conventions here. A "block" is a big
- * chunk of stuff that we do I/O on. A "record" is a piece of info that we
- * care about. Typically many "record"s fit into a "block".
- */
-#define RECORDSIZE 512
-#define NAMSIZ 100
-#define TUNMLEN 32
-#define TGNMLEN 32
-
-union record {
- char charptr[RECORDSIZE];
- struct header {
- char name[NAMSIZ];
- char mode[8];
- char uid[8];
- char gid[8];
- char size[12];
- char mtime[12];
- char chksum[8];
- char linkflag;
- char linkname[NAMSIZ];
- char magic[8];
- char uname[TUNMLEN];
- char gname[TGNMLEN];
- char devmajor[8];
- char devminor[8];
- } header;
-};
-
-/* The magic field is filled with this if uname and gname are valid. */
-#define TMAGIC "ustar " /* 7 chars and a null */
-
-/*
- * file-function prototypes
- */
-/*TODO*/
-#define request_rec void
-#define server_rec void
-#define pool void
-#define cmd_parms void
-
-/*
- * includes for ASCII substring recognition formerly "names.h" in file
- * command
- *
- * Original notes: names and types used by ascmagic in file(1). These tokens are
- * here because they can appear anywhere in the first HOWMANY bytes, while
- * tokens in /etc/magic must appear at fixed offsets into the file. Don't
- * make HOWMANY too high unless you have a very fast CPU.
- */
-
-/* these types are used to index the table 'types': keep em in sync! */
-/* HTML inserted in first because this is a web server module now */
-#define L_HTML 0 /* HTML */
-#define L_C 1 /* first and foremost on UNIX */
-#define L_FORT 2 /* the oldest one */
-#define L_MAKE 3 /* Makefiles */
-#define L_PLI 4 /* PL/1 */
-#define L_MACH 5 /* some kinda assembler */
-#define L_ENG 6 /* English */
-#define L_PAS 7 /* Pascal */
-#define L_MAIL 8 /* Electronic mail */
-#define L_NEWS 9 /* Usenet Netnews */
-
-static char *types[] =
- {
- "text/html", /* HTML */
- "text/plain", /* "c program text", */
- "text/plain", /* "fortran program text", */
- "text/plain", /* "make commands text", */
- "text/plain", /* "pl/1 program text", */
- "text/plain", /* "assembler program text", */
- "text/plain", /* "English text", */
- "text/plain", /* "pascal program text", */
- "message/rfc822", /* "mail text", */
- "message/news", /* "news text", */
- "application/binary", /* "can't happen error on names.h/types", */
- 0
- };
-
-static struct names {
- char *name;
- short type;
-} names[] = {
-
- /* These must be sorted by eye for optimal hit rate */
- /* Add to this list only after substantial meditation */
- {
- "<html>", L_HTML
- },
- {
- "<HTML>", L_HTML
- },
- {
- "<head>", L_HTML
- },
- {
- "<HEAD>", L_HTML
- },
- {
- "<title>", L_HTML
- },
- {
- "<TITLE>", L_HTML
- },
- {
- "<h1>", L_HTML
- },
- {
- "<H1>", L_HTML
- },
- {
- "<!--", L_HTML
- },
- {
- "<!DOCTYPE HTML", L_HTML
- },
- {
- "/*", L_C
- }, /* must precede "The", "the", etc. */
- {
- "#include", L_C
- },
- {
- "char", L_C
- },
- {
- "The", L_ENG
- },
- {
- "the", L_ENG
- },
- {
- "double", L_C
- },
- {
- "extern", L_C
- },
- {
- "float", L_C
- },
- {
- "real", L_C
- },
- {
- "struct", L_C
- },
- {
- "union", L_C
- },
- {
- "CFLAGS", L_MAKE
- },
- {
- "LDFLAGS", L_MAKE
- },
- {
- "all:", L_MAKE
- },
- {
- ".PRECIOUS", L_MAKE
- },
- /*
- * Too many files of text have these words in them. Find another way to
- * recognize Fortrash.
- */
-#ifdef NOTDEF
- {
- "subroutine", L_FORT
- },
- {
- "function", L_FORT
- },
- {
- "block", L_FORT
- },
- {
- "common", L_FORT
- },
- {
- "dimension", L_FORT
- },
- {
- "integer", L_FORT
- },
- {
- "data", L_FORT
- },
-#endif /* NOTDEF */
- {
- ".ascii", L_MACH
- },
- {
- ".asciiz", L_MACH
- },
- {
- ".byte", L_MACH
- },
- {
- ".even", L_MACH
- },
- {
- ".globl", L_MACH
- },
- {
- "clr", L_MACH
- },
- {
- "(input,", L_PAS
- },
- {
- "dcl", L_PLI
- },
- {
- "Received:", L_MAIL
- },
- {
- ">From", L_MAIL
- },
- {
- "Return-Path:", L_MAIL
- },
- {
- "Cc:", L_MAIL
- },
- {
- "Newsgroups:", L_NEWS
- },
- {
- "Path:", L_NEWS
- },
- {
- "Organization:", L_NEWS
- },
- {
- NULL, 0
- }
-};
-
-#define NNAMES ((sizeof(names)/sizeof(struct names)) - 1)
-
-/*
- * Result String List (RSL)
- *
- * The file(1) command prints its output. Instead, we store the various
- * "printed" strings in a list (allocating memory as we go) and concatenate
- * them at the end when we finally know how much space they'll need.
- */
-
-typedef struct magic_rsl_s {
- char *str; /* string, possibly a fragment */
- struct magic_rsl_s *next; /* pointer to next fragment */
-} magic_rsl;
-
-/*
- * Apache module configuration structures
- */
-
-/* per-server info */
-typedef struct {
- char *magicfile; /* where magic be found */
- struct magic *magic; /* head of magic config list */
- struct magic *last;
-} magic_server_config_rec;
-
-/* per-request info */
-typedef struct {
- magic_rsl *head; /* result string list */
- magic_rsl *tail;
- unsigned suf_recursion; /* recursion depth in suffix check */
-} magic_req_rec;
-
-
-
-
-extern zend_module_entry mime_magic_module_entry;
-#define phpext_mime_magic_ptr &mime_magic_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MIME_MAGIC_API __declspec(dllexport)
-#else
-#define PHP_MIME_MAGIC_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(mime_magic);
-PHP_MSHUTDOWN_FUNCTION(mime_magic);
-PHP_RINIT_FUNCTION(mime_magic);
-PHP_RSHUTDOWN_FUNCTION(mime_magic);
-PHP_MINFO_FUNCTION(mime_magic);
-
-PHP_FUNCTION(mime_content_type);
-
-ZEND_BEGIN_MODULE_GLOBALS(mime_magic)
- char *magicfile;
- magic_req_rec *req_dat;
-ZEND_END_MODULE_GLOBALS(mime_magic)
-
-/* In every utility function you add that needs to use variables
- in php_mime_magic_globals, call TSRM_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMG_CC
- after the last function argument and declare your utility function
- with TSRMG_DC after the last declared argument. Always refer to
- the globals in your function as MIME_MAGIC_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define MIME_MAGIC_G(v) TSRMG(mime_magic_globals_id, zend_mime_magic_globals *, v)
-#else
-#define MIME_MAGIC_G(v) (mime_magic_globals.v)
-#endif
-
-
-
-
-#endif /* PHP_MIME_MAGIC_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ming/CREDITS b/ext/ming/CREDITS
deleted file mode 100644
index 56058457f6..0000000000
--- a/ext/ming/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MING
-Dave Hayden
diff --git a/ext/ming/EXPERIMENTAL b/ext/ming/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/ming/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/ming/config.m4 b/ext/ming/config.m4
deleted file mode 100644
index cb4d0351ff..0000000000
--- a/ext/ming/config.m4
+++ /dev/null
@@ -1,34 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ming, for MING support,
-[ --with-ming[=DIR] Include MING support])
-
-if test "$PHP_MING" != "no"; then
- AC_CHECK_LIB(m, sin)
-
- for i in $PHP_MING /usr/local /usr; do
- if test -f $i/lib/libming.$SHLIB_SUFFIX_NAME -o -f $i/lib/libming.a; then
- MING_DIR=$i
- fi
- done
-
- if test -z "$MING_DIR"; then
- AC_MSG_ERROR(Please reinstall ming distribution. libming.(a|so) not found.)
- fi
-
- PHP_CHECK_LIBRARY(ming, Ming_useSWFVersion, [
- AC_DEFINE(HAVE_MING,1,[ ])
- ],[
- AC_MSG_ERROR([Ming library 0.2a or greater required.])
- ],[
- -L$MING_DIR/lib
- ])
-
- PHP_ADD_INCLUDE($MING_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(ming, $MING_DIR/lib, MING_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(ming, ming.c, $ext_shared)
- PHP_SUBST(MING_SHARED_LIBADD)
-fi
diff --git a/ext/ming/ming.c b/ext/ming/ming.c
deleted file mode 100644
index 88b7e3f7f7..0000000000
--- a/ext/ming/ming.c
+++ /dev/null
@@ -1,2844 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_01.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: dave@opaque.net |
- +----------------------------------------------------------------------+
-*/
-
-#include <stdio.h>
-#include <math.h>
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ming.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "ext/standard/fsock.h"
-#include "php_streams.h"
-
-#if HAVE_MING
-
-static zend_function_entry ming_functions[] = {
- PHP_FALIAS(ming_setcubicthreshold, ming_setCubicThreshold, NULL)
- PHP_FALIAS(ming_setscale, ming_setScale, NULL)
- PHP_FALIAS(ming_useswfversion, ming_useSWFVersion, NULL)
- PHP_FALIAS(swfbutton_keypress, swfbutton_keypress, NULL)
- { NULL, NULL, NULL }
-};
-
-static SWFMovie getMovie(zval *id TSRMLS_DC);
-static SWFFill getFill(zval *id TSRMLS_DC);
-static SWFGradient getGradient(zval *id TSRMLS_DC);
-static SWFBitmap getBitmap(zval *id TSRMLS_DC);
-static SWFShape getShape(zval *id TSRMLS_DC);
-static SWFFont getFont(zval *id TSRMLS_DC);
-static SWFText getText(zval *id TSRMLS_DC);
-static SWFTextField getTextField(zval *id TSRMLS_DC);
-static SWFDisplayItem getDisplayItem(zval *id TSRMLS_DC);
-static SWFButton getButton(zval *id TSRMLS_DC);
-static SWFAction getAction(zval *id TSRMLS_DC);
-static SWFMorph getMorph(zval *id TSRMLS_DC);
-static SWFMovieClip getSprite(zval *id TSRMLS_DC);
-
-/* {{{ proto void ming_setcubicthreshold (int threshold)
- Set cubic threshold (?) */
-PHP_FUNCTION(ming_setCubicThreshold)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
- Ming_setCubicThreshold(Z_LVAL_PP(num));
-}
-/* }}} */
-
-/* {{{ proto void ming_setscale(int scale)
- Set scale (?) */
-PHP_FUNCTION(ming_setScale)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Ming_setScale(Z_DVAL_PP(num));
-}
-/* }}} */
-
-/* {{{ proto void ming_useswfversion(int version)
- Use SWF version (?) */
-PHP_FUNCTION(ming_useSWFVersion)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
- Ming_useSWFVersion(Z_LVAL_PP(num));
-}
-/* }}} */
-
-static int le_swfmoviep;
-static int le_swfshapep;
-static int le_swffillp;
-static int le_swfgradientp;
-static int le_swfbitmapp;
-static int le_swffontp;
-static int le_swftextp;
-static int le_swftextfieldp;
-static int le_swfdisplayitemp;
-static int le_swfbuttonp;
-static int le_swfactionp;
-static int le_swfmorphp;
-static int le_swfspritep;
-static int le_swfinputp;
-
-zend_class_entry movie_class_entry;
-zend_class_entry shape_class_entry;
-zend_class_entry fill_class_entry;
-zend_class_entry gradient_class_entry;
-zend_class_entry bitmap_class_entry;
-zend_class_entry font_class_entry;
-zend_class_entry text_class_entry;
-zend_class_entry textfield_class_entry;
-zend_class_entry displayitem_class_entry;
-zend_class_entry button_class_entry;
-zend_class_entry action_class_entry;
-zend_class_entry morph_class_entry;
-zend_class_entry sprite_class_entry;
-
-/* {{{ internal function SWFgetProperty
- */
-static void *SWFgetProperty(zval *id, char *name, int namelen, int proptype TSRMLS_DC)
-{
- zval **tmp;
- int id_to_find;
- void *property;
- int type;
-
- if (id) {
- if (zend_hash_find(Z_OBJPROP_P(id), name, namelen+1, (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find property %s", name);
- return NULL;
- }
- id_to_find = Z_LVAL_PP(tmp);
- } else {
- return NULL;
- }
-
- property = zend_list_find(id_to_find, &type);
-
- if (!property || type != proptype) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- return NULL;
- }
-
- return property;
-}
-/* }}} */
-
-/* {{{ SWFCharacter - not a real class
-*/
-
-/* {{{ internal function SWFCharacter getCharacter(zval *id)
- Returns the SWFCharacter contained in zval *id */
-static SWFCharacter getCharacter(zval *id TSRMLS_DC)
-{
- if (Z_OBJCE_P(id) == &shape_class_entry)
- return (SWFCharacter)getShape(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &font_class_entry)
- return (SWFCharacter)getFont(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &text_class_entry)
- return (SWFCharacter)getText(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &textfield_class_entry)
- return (SWFCharacter)getTextField(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &button_class_entry)
- return (SWFCharacter)getButton(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &morph_class_entry)
- return (SWFCharacter)getMorph(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &sprite_class_entry)
- return (SWFCharacter)getSprite(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == &bitmap_class_entry)
- return (SWFCharacter)getBitmap(id TSRMLS_CC);
- else
- php_error(E_ERROR, "called object is not an SWFCharacter");
- return NULL;
-}
-/* }}} */
-/* }}} */
-
-/* {{{ getInput - utility func for making an SWFInput from an fopened resource
-*/
-static void destroy_SWFInput_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFInput((SWFInput)resource->ptr);
-}
-
-static SWFInput getInput(zval **zfile TSRMLS_DC)
-{
- FILE *file;
- void *what;
- int type;
- SWFInput input;
-
- what = zend_fetch_resource(zfile TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream());
-
- if (php_stream_cast((php_stream*)what, PHP_STREAM_AS_STDIO, (void *) &file, REPORT_ERRORS) != SUCCESS) {
- return NULL;
- }
-
- input = newSWFInput_file(file);
- zend_list_addref(Z_LVAL_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- return input;
-}
-/* }}} */
-
-/* {{{ SWFAction
-*/
-static zend_function_entry swfaction_functions[] = {
- PHP_FALIAS(swfaction, swfaction_init, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto object swfaction_init(string)
- Returns a new SWFAction object, compiling the given script */
-PHP_FUNCTION(swfaction_init)
-{
- SWFAction action;
- zval **script;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &script) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(script);
- action = compileSWFActionCode(Z_STRVAL_PP(script));
-
- if (!action) {
- php_error(E_ERROR, "Couldn't compile actionscript.");
- }
-
- ret = zend_list_insert(action, le_swfactionp);
-
- object_init_ex(getThis(), &action_class_entry);
- add_property_resource(getThis(), "action", ret);
- zend_list_addref(ret);
-}
-/* no destructor for SWFAction, it's not a character */
-/* }}} */
-
-/* {{{ internal function getAction
- Returns the SWFAction object contained in zval *id */
-static SWFAction getAction(zval *id TSRMLS_DC)
-{
- void *action = SWFgetProperty(id, "action", 6, le_swfactionp TSRMLS_CC);
-
- if (!action) {
- php_error(E_ERROR, "called object is not an SWFAction!");
- }
- return (SWFAction)action;
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFBitmap
-*/
-static zend_function_entry swfbitmap_functions[] = {
- PHP_FALIAS(swfbitmap, swfbitmap_init, NULL)
- PHP_FALIAS(getwidth, swfbitmap_getWidth, NULL)
- PHP_FALIAS(getheight, swfbitmap_getHeight, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto class swfbitmap_init(file [, maskfile])
- Returns a new SWFBitmap object from jpg (with optional mask) or dbl file */
-PHP_FUNCTION(swfbitmap_init)
-{
- zval **zfile, **zmask = NULL;
- SWFBitmap bitmap;
- SWFInput input, maskinput;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &zfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &zfile, &zmask) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(zfile) != IS_RESOURCE) {
- convert_to_string_ex(zfile);
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- } else {
- input = getInput(zfile TSRMLS_CC);
- }
-
- if (zmask != NULL) {
- if (Z_TYPE_PP(zmask) != IS_RESOURCE) {
- convert_to_string_ex(zmask);
- maskinput = newSWFInput_buffer(Z_STRVAL_PP(zmask), Z_STRLEN_PP(zmask));
- zend_list_addref(zend_list_insert(maskinput, le_swfinputp));
- } else {
- maskinput = getInput(zmask TSRMLS_CC);
- }
- bitmap = newSWFJpegWithAlpha_fromInput(input, maskinput);
- } else {
- bitmap = newSWFBitmap_fromInput(input);
- }
-
- ret = zend_list_insert(bitmap, le_swfbitmapp);
- object_init_ex(getThis(), &bitmap_class_entry);
- add_property_resource(getThis(), "bitmap", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFBitmap_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFBitmap((SWFBitmap)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getBitmap
- Returns the SWFBitmap object contained in zval *id */
-static SWFBitmap getBitmap(zval *id TSRMLS_DC)
-{
- void *bitmap = SWFgetProperty(id, "bitmap", 6, le_swfbitmapp TSRMLS_CC);
-
- if (!bitmap) {
- php_error(E_ERROR, "called object is not an SWFBitmap!");
- }
- return (SWFBitmap)bitmap;
-}
-/* }}} */
-
-/* {{{ proto void swfbitmap_getWidth(void)
- Returns the width of this bitmap */
-PHP_FUNCTION(swfbitmap_getWidth)
-{
- RETURN_DOUBLE(SWFBitmap_getWidth(getBitmap(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto void swfbitmap_getHeight(void)
- Returns the height of this bitmap */
-PHP_FUNCTION(swfbitmap_getHeight)
-{
- RETURN_DOUBLE(SWFBitmap_getHeight(getBitmap(getThis() TSRMLS_CC)));
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFButton
-*/
-static zend_function_entry swfbutton_functions[] = {
- PHP_FALIAS(swfbutton, swfbutton_init, NULL)
- PHP_FALIAS(sethit, swfbutton_setHit, NULL)
- PHP_FALIAS(setover, swfbutton_setOver, NULL)
- PHP_FALIAS(setup, swfbutton_setUp, NULL)
- PHP_FALIAS(setdown, swfbutton_setDown, NULL)
- PHP_FALIAS(setaction, swfbutton_setAction, NULL)
- PHP_FALIAS(addshape, swfbutton_addShape, NULL)
- PHP_FALIAS(addaction, swfbutton_addAction, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto object swfbutton_init(void)
- Returns a new SWFButton object */
-PHP_FUNCTION(swfbutton_init)
-{
- SWFButton button = newSWFButton();
- int ret = zend_list_insert(button, le_swfbuttonp);
-
- object_init_ex(getThis(), &button_class_entry);
- add_property_resource(getThis(), "button", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFButton_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFButton((SWFButton)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getButton
- Returns the SWFButton object contained in zval *id */
-static SWFButton getButton(zval *id TSRMLS_DC)
-{
- void *button = SWFgetProperty(id, "button", 6, le_swfbuttonp TSRMLS_CC);
-
- if(!button) {
- php_error(E_ERROR, "called object is not an SWFButton!");
- }
- return (SWFButton)button;
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_setHit(SWFCharacter)
- Sets the character for this button's hit test state */
-PHP_FUNCTION(swfbutton_setHit)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_HITSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_setOver(SWFCharacter)
- Sets the character for this button's over state */
-PHP_FUNCTION(swfbutton_setOver)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_OVERSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_setUp(SWFCharacter)
- Sets the character for this button's up state */
-PHP_FUNCTION(swfbutton_setUp)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_UPSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_setDown(SWFCharacter)
- Sets the character for this button's down state */
-PHP_FUNCTION(swfbutton_setDown)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_DOWNSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_addShape(SWFCharacter character, int flags)
- Sets the character to display for the condition described in flags */
-PHP_FUNCTION(swfbutton_addShape)
-{
- zval **zchar, **flags;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zchar, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- convert_to_long_ex(flags);
- SWFButton_addShape(button, character, Z_LVAL_PP(flags));
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_setAction(SWFAction)
- Sets the action to perform when button is pressed */
-PHP_FUNCTION(swfbutton_setAction)
-{
- zval **zaction;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFAction action;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zaction) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zaction);
- action = getAction(*zaction TSRMLS_CC);
- SWFButton_addAction(button, action, SWFBUTTON_OVERDOWNTOOVERUP);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton_addAction(SWFAction action, int flags)
- Sets the action to perform when conditions described in flags is met */
-PHP_FUNCTION(swfbutton_addAction)
-{
- zval **zaction, **flags;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFAction action;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zaction, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zaction);
- action = getAction(*zaction TSRMLS_CC);
- convert_to_long_ex(flags);
- SWFButton_addAction(button, action, Z_LVAL_PP(flags));
-}
-/* }}} */
-
-/* {{{ proto int swfbutton_keypress(string str)
- Returns the action flag for keyPress(char) */
-PHP_FUNCTION(swfbutton_keypress)
-{
- zval **key;
- char c;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(key);
-
- if (Z_STRLEN_PP(key) > 1) {
- php_error(E_ERROR, "SWFBUTTON_KEYPRESS expects only one character!");
- }
-
- c = Z_STRVAL_PP(key)[0];
- RETURN_LONG((c&0x7f)<<9);
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFDisplayitem
-*/
-static zend_function_entry swfdisplayitem_functions[] = {
- PHP_FALIAS(moveto, swfdisplayitem_moveTo, NULL)
- PHP_FALIAS(move, swfdisplayitem_move, NULL)
- PHP_FALIAS(scaleto, swfdisplayitem_scaleTo, NULL)
- PHP_FALIAS(scale, swfdisplayitem_scale, NULL)
- PHP_FALIAS(rotateto, swfdisplayitem_rotateTo, NULL)
- PHP_FALIAS(rotate, swfdisplayitem_rotate, NULL)
- PHP_FALIAS(skewxto, swfdisplayitem_skewXTo, NULL)
- PHP_FALIAS(skewx, swfdisplayitem_skewX, NULL)
- PHP_FALIAS(skewyto, swfdisplayitem_skewYTo, NULL)
- PHP_FALIAS(skewy, swfdisplayitem_skewY, NULL)
- PHP_FALIAS(setmatrix, swfdisplayitem_setMatrix, NULL)
- PHP_FALIAS(setdepth, swfdisplayitem_setDepth, NULL)
- PHP_FALIAS(setratio, swfdisplayitem_setRatio, NULL)
- PHP_FALIAS(addcolor, swfdisplayitem_addColor, NULL)
- PHP_FALIAS(multcolor, swfdisplayitem_multColor, NULL)
- PHP_FALIAS(setname, swfdisplayitem_setName, NULL)
- PHP_FALIAS(addaction, swfdisplayitem_addAction, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ internal function getDisplayItem
- Returns the SWFDisplayItem contained in zval *id */
-static SWFDisplayItem getDisplayItem(zval *id TSRMLS_DC)
-{
- void *item = SWFgetProperty(id, "displayitem", 11, le_swfdisplayitemp TSRMLS_CC);
-
- if (!item) {
- php_error(E_ERROR, "called object is not an SWFDisplayItem!");
- }
-
- return (SWFDisplayItem)item;
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_moveTo(int x, int y)
- Moves this SWFDisplayItem to movie coordinates (x, y) */
-PHP_FUNCTION(swfdisplayitem_moveTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_moveTo(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_move(int dx, int dy)
- Displaces this SWFDisplayItem by (dx, dy) in movie coordinates */
-PHP_FUNCTION(swfdisplayitem_move)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_move(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_scaleTo(float xScale [, float yScale])
- Scales this SWFDisplayItem by xScale in the x direction, yScale in the y, or both to xScale if only one arg */
-PHP_FUNCTION(swfdisplayitem_scaleTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- SWFDisplayItem_scaleTo(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(x));
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_scaleTo(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_scale(float xScale, float yScale)
- Multiplies this SWFDisplayItem's current x scale by xScale, its y scale by yScale */
-PHP_FUNCTION(swfdisplayitem_scale)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_scale(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_rotateTo(float degrees)
- Rotates this SWFDisplayItem the given (clockwise) degrees from its original orientation */
-PHP_FUNCTION(swfdisplayitem_rotateTo)
-{
- zval **degrees;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &degrees) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(degrees);
- SWFDisplayItem_rotateTo(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(degrees));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_rotate(float degrees)
- Rotates this SWFDisplayItem the given (clockwise) degrees from its current orientation */
-PHP_FUNCTION(swfdisplayitem_rotate)
-{
- zval **degrees;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &degrees) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(degrees);
- SWFDisplayItem_rotate(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(degrees));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_skewXTo(float xSkew)
- Sets this SWFDisplayItem's x skew value to xSkew */
-PHP_FUNCTION(swfdisplayitem_skewXTo)
-{
- zval **x;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- SWFDisplayItem_skewXTo(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_skewX(float xSkew)
- Adds xSkew to this SWFDisplayItem's x skew value */
-PHP_FUNCTION(swfdisplayitem_skewX)
-{
- zval **x;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- SWFDisplayItem_skewX(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(x));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_skewYTo(float ySkew)
- Sets this SWFDisplayItem's y skew value to ySkew */
-PHP_FUNCTION(swfdisplayitem_skewYTo)
-{
- zval **y;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(y);
- SWFDisplayItem_skewYTo(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_skewY(float ySkew)
- Adds ySkew to this SWFDisplayItem's y skew value */
-PHP_FUNCTION(swfdisplayitem_skewY)
-{
- zval **y;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(y);
- SWFDisplayItem_skewY(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_setMatrix(float a, float b, float c, float d, float x, float y)
- Sets the item's transform matrix */
-PHP_FUNCTION(swfdisplayitem_setMatrix)
-{
- zval **a, **b, **c, **d, **x, **y;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &a, &b, &c, &d, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(a);
- convert_to_double_ex(b);
- convert_to_double_ex(c);
- convert_to_double_ex(d);
- convert_to_double_ex(x);
- convert_to_double_ex(y);
-
- SWFDisplayItem_setMatrix( getDisplayItem(getThis() TSRMLS_CC),
- Z_DVAL_PP(a), Z_DVAL_PP(b), Z_DVAL_PP(c), Z_DVAL_PP(d), Z_DVAL_PP(x), Z_DVAL_PP(y)
- );
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_setDepth(int depth)
- Sets this SWFDisplayItem's z-depth to depth. Items with higher depth values are drawn on top of those with lower values */
-PHP_FUNCTION(swfdisplayitem_setDepth)
-{
- zval **depth;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &depth) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(depth);
- SWFDisplayItem_setDepth(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(depth));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_setRatio(float ratio)
- Sets this SWFDisplayItem's ratio to ratio. Obviously only does anything if displayitem was created from an SWFMorph */
-PHP_FUNCTION(swfdisplayitem_setRatio)
-{
- zval **ratio;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &ratio) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(ratio);
- SWFDisplayItem_setRatio(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(ratio));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_addColor(int r, int g, int b [, int a])
- Sets the add color part of this SWFDisplayItem's CXform to (r, g, b [, a]), a defaults to 0 */
-PHP_FUNCTION(swfdisplayitem_addColor)
-{
- zval **r, **g, **b, **za;
- int a = 0;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(za);
- a = Z_LVAL_PP(za);
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- SWFDisplayItem_setColorAdd(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), a);
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_multColor(float r, float g, float b [, float a])
- Sets the multiply color part of this SWFDisplayItem's CXform to (r, g, b [, a]), a defaults to 1.0 */
-PHP_FUNCTION(swfdisplayitem_multColor)
-{
- zval **r, **g, **b, **za;
- float a = 1.0;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(za);
- a = Z_DVAL_PP(za);
- } else if(ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(r);
- convert_to_double_ex(g);
- convert_to_double_ex(b);
-
- SWFDisplayItem_setColorMult(getDisplayItem(getThis() TSRMLS_CC), Z_DVAL_PP(r), Z_DVAL_PP(g), Z_DVAL_PP(b), a);
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_setName(string name)
- Sets this SWFDisplayItem's name to name */
-PHP_FUNCTION(swfdisplayitem_setName)
-{
- zval **name;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(name);
- SWFDisplayItem_setName(item, Z_STRVAL_PP(name));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem_addAction(SWFAction action, int flags)
- Adds this SWFAction to the given SWFSprite instance */
-PHP_FUNCTION(swfdisplayitem_addAction)
-{
- zval **zaction, **flags;
- SWFAction action;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zaction, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zaction);
- convert_to_long_ex(flags);
- action = (SWFBlock)getAction(*zaction TSRMLS_CC);
- SWFDisplayItem_addAction(item, action, Z_LVAL_PP(flags));
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFFill
-*/
-static zend_function_entry swffill_functions[] = {
- PHP_FALIAS(swffill, swffill_init, NULL)
- PHP_FALIAS(moveto, swffill_moveTo, NULL)
- PHP_FALIAS(scaleto, swffill_scaleTo, NULL)
- PHP_FALIAS(rotateto, swffill_rotateTo, NULL)
- PHP_FALIAS(skewxto, swffill_skewXTo, NULL)
- PHP_FALIAS(skewyto, swffill_skewYTo, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto class swffill_init(void)
- Returns a new SWFFill object */
-PHP_FUNCTION(swffill_init)
-{
- php_error(E_ERROR, "Instantiating SWFFill won't do any good- use SWFShape::addFill() instead!");
-}
-
-static void destroy_SWFFill_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- /* this only destroys the shallow wrapper for SWFFillStyle,
- which SWFShape destroys. So everything's okay. I hope. */
-
- destroySWFFill((SWFFill)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getFill
- Returns the SWFFill object contained in zval *id */
-static SWFFill getFill(zval *id TSRMLS_DC)
-{
- void *fill = SWFgetProperty(id, "fill", 4, le_swffillp TSRMLS_CC);
-
- if (!fill) {
- php_error(E_ERROR, "called object is not an SWFFill!");
- }
- return (SWFFill)fill;
-}
-/* }}} */
-
-/* {{{ proto void swffill_moveTo(int x, int y)
- Moves this SWFFill to shape coordinates (x,y) */
-PHP_FUNCTION(swffill_moveTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFFill_moveTo(getFill(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swffill_scaleTo(float xScale [, float yScale])
- Scales this SWFFill by xScale in the x direction, yScale in the y, or both to xScale if only one arg */
-PHP_FUNCTION(swffill_scaleTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- SWFFill_scaleXYTo(getFill(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(x));
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFFill_scaleXYTo(getFill(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swffill_rotateTo(float degrees)
- Rotates this SWFFill the given (clockwise) degrees from its original orientation */
-PHP_FUNCTION(swffill_rotateTo)
-{
- zval **degrees;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &degrees) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(degrees);
- SWFFill_rotateTo(getFill(getThis() TSRMLS_CC), Z_DVAL_PP(degrees));
-}
-/* }}} */
-
-/* {{{ proto void swffill_skewXTo(float xSkew)
- Sets this SWFFill's x skew value to xSkew */
-PHP_FUNCTION(swffill_skewXTo)
-{
- zval **x;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- SWFFill_skewXTo(getFill(getThis() TSRMLS_CC), Z_DVAL_PP(x));
-}
-/* }}} */
-
-/* {{{ proto void swffill_skewYTo(float ySkew)
- Sets this SWFFill's y skew value to ySkew */
-PHP_FUNCTION(swffill_skewYTo)
-{
- zval **y;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(y);
- SWFFill_skewYTo(getFill(getThis() TSRMLS_CC), Z_DVAL_PP(y));
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFFont
-*/
-static zend_function_entry swffont_functions[] = {
- PHP_FALIAS(swffont, swffont_init, NULL)
- PHP_FALIAS(getwidth, swffont_getWidth, NULL)
- PHP_FALIAS(getascent, swffont_getAscent, NULL)
- PHP_FALIAS(getdescent, swffont_getDescent, NULL)
- PHP_FALIAS(getleading, swffont_getLeading, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ internal function SWFText getFont(zval *id)
- Returns the Font object in zval *id */
-static SWFFont getFont(zval *id TSRMLS_DC)
-{
- void *font = SWFgetProperty(id, "font", 4, le_swffontp TSRMLS_CC);
-
- if (!font) {
- php_error(E_ERROR, "called object is not an SWFFont!");
- }
- return (SWFFont)font;
-}
-/* }}} */
-
-/* {{{ proto class swffont_init(string filename)
- Returns a new SWFFont object from given file */
-PHP_FUNCTION(swffont_init)
-{
- zval **zfile;
- SWFFont font;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(zfile);
-
- if (strcmp(Z_STRVAL_PP(zfile)+Z_STRLEN_PP(zfile)-4, ".fdb") == 0) {
- php_stream * stream;
- FILE * file;
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(zfile), "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void*)&file, REPORT_ERRORS)) {
- php_stream_close(stream);
- RETURN_FALSE;
- }
-
- font = loadSWFFontFromFile(file);
- php_stream_close(stream);
- } else {
- font = newSWFBrowserFont(Z_STRVAL_PP(zfile));
- }
-
- ret = zend_list_insert(font, le_swffontp);
-
- object_init_ex(getThis(), &font_class_entry);
- add_property_resource(getThis(), "font", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFFont_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFBlock((SWFBlock)resource->ptr);
-}
-/* }}} */
-
-/* {{{ proto int swffont_getWidth(string)
- Calculates the width of the given string in this font at full height */
-PHP_FUNCTION(swffont_getWidth)
-{
- zval **zstring;
- float width;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(zstring);
- width = SWFFont_getStringWidth(getFont(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
- RETURN_DOUBLE(width);
-}
-/* }}} */
-
-/* {{{ proto int swffont_getAscent(void)
- Returns the ascent of the font, or 0 if not available */
-PHP_FUNCTION(swffont_getAscent)
-{
- RETURN_DOUBLE(SWFFont_getAscent(getFont(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto int swffont_getDescent(void)
- Returns the descent of the font, or 0 if not available */
-PHP_FUNCTION(swffont_getDescent)
-{
- RETURN_DOUBLE(SWFFont_getDescent(getFont(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto int swffont_getLeading(void)
- Returns the leading of the font, or 0 if not available */
-PHP_FUNCTION(swffont_getLeading)
-{
- RETURN_DOUBLE(SWFFont_getLeading(getFont(getThis() TSRMLS_CC)));
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFGradient
-*/
-static zend_function_entry swfgradient_functions[] = {
- PHP_FALIAS(swfgradient, swfgradient_init, NULL)
- PHP_FALIAS(addentry, swfgradient_addEntry, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto class swfgradient_init(void)
- Returns a new SWFGradient object */
-PHP_FUNCTION(swfgradient_init)
-{
- SWFGradient gradient = newSWFGradient();
- int ret = zend_list_insert(gradient, le_swfgradientp);
-
- object_init_ex(getThis(), &gradient_class_entry);
- add_property_resource(getThis(), "gradient", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFGradient_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFGradient((SWFGradient)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getGradient
- Returns the SWFGradient object contained in zval *id */
-static SWFGradient getGradient(zval *id TSRMLS_DC)
-{
- void *gradient = SWFgetProperty(id, "gradient", 8, le_swfgradientp TSRMLS_CC);
-
- if (!gradient) {
- php_error(E_ERROR, "called object is not an SWFGradient!");
- }
- return (SWFGradient)gradient;
-}
-/* }}} */
-
-/* {{{ proto void swfgradient_addEntry(float ratio, string r, string g, string b [, string a])
- Adds given entry to the gradient */
-PHP_FUNCTION(swfgradient_addEntry)
-{
- zval **ratio, **r, **g, **b;
- byte a = 0xff;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &ratio, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 5) {
- zval **za;
-
- if (zend_get_parameters_ex(5, &ratio, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(za);
- a = Z_LVAL_PP(za);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(ratio);
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- SWFGradient_addEntry( getGradient(getThis() TSRMLS_CC),
- Z_DVAL_PP(ratio), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), a
- );
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFMorph
-*/
-static zend_function_entry swfmorph_functions[] = {
- PHP_FALIAS(swfmorph, swfmorph_init, NULL)
- PHP_FALIAS(getshape1, swfmorph_getShape1, NULL)
- PHP_FALIAS(getshape2, swfmorph_getShape2, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto object swfmorph_init(void)
- Returns a new SWFMorph object */
-PHP_FUNCTION(swfmorph_init)
-{
- SWFMorph morph = newSWFMorphShape();
- int ret = zend_list_insert(morph, le_swfmorphp);
-
- object_init_ex(getThis(), &morph_class_entry);
- add_property_resource(getThis(), "morph", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFMorph_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFMorph((SWFMorph)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getMorph
- Returns the SWFMorph object contained in zval *id */
-static SWFMorph getMorph(zval *id TSRMLS_DC)
-{
- void *morph = SWFgetProperty(id, "morph", 5, le_swfmorphp TSRMLS_CC);
-
- if (!morph) {
- php_error(E_ERROR, "called object is not an SWFMorph!");
- }
- return (SWFMorph)morph;
-}
-/* }}} */
-
-/* {{{ proto SWFShape swfmorph_getShape1(void)
- Return's this SWFMorph's start shape */
-PHP_FUNCTION(swfmorph_getShape1)
-{
- SWFMorph morph = getMorph(getThis() TSRMLS_CC);
- SWFShape shape = SWFMorph_getShape1(morph);
- int ret = zend_list_insert(shape, le_swfshapep);
-
- object_init_ex(return_value, &shape_class_entry);
- add_property_resource(return_value, "shape", ret);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto SWFShape swfmorph_getShape2(void)
- Return's this SWFMorph's start shape */
-PHP_FUNCTION(swfmorph_getShape2)
-{
- SWFMorph morph = getMorph(getThis() TSRMLS_CC);
- SWFShape shape = SWFMorph_getShape2(morph);
- int ret = zend_list_insert(shape, le_swfshapep);
-
- object_init_ex(return_value, &shape_class_entry);
- add_property_resource(return_value, "shape", ret);
- zend_list_addref(ret);
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFMovie
-*/
-static zend_function_entry swfmovie_functions[] = {
- PHP_FALIAS(swfmovie, swfmovie_init, NULL)
- PHP_FALIAS(nextframe, swfmovie_nextFrame, NULL)
- PHP_FALIAS(labelframe, swfmovie_labelFrame, NULL)
- PHP_FALIAS(add, swfmovie_add, NULL)
- PHP_FALIAS(remove, swfmovie_remove, NULL)
- PHP_FALIAS(output, swfmovie_output, NULL)
- PHP_FALIAS(save, swfmovie_save, NULL)
- PHP_FALIAS(savetofile, swfmovie_saveToFile, NULL)
- PHP_FALIAS(setbackground, swfmovie_setBackground, NULL)
- PHP_FALIAS(setrate, swfmovie_setRate, NULL)
- PHP_FALIAS(setdimension, swfmovie_setDimension, NULL)
- PHP_FALIAS(setframes, swfmovie_setFrames, NULL)
- PHP_FALIAS(streammp3, swfmovie_streamMp3, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ swfmovie_init
-*/
-PHP_FUNCTION(swfmovie_init)
-{
- zval **version;
- SWFMovie movie;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &version) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(version);
- movie = newSWFMovie(Z_LVAL_PP(version));
- } else {
- movie = newSWFMovie(4); /* default version 4 */
- }
-
- ret = zend_list_insert(movie, le_swfmoviep);
-
- object_init_ex(getThis(), &movie_class_entry);
- add_property_resource(getThis(), "movie", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFMovie_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFMovie((SWFMovie)resource->ptr);
-}
-/* }}} */
-
-/* {{{ getMovie
-*/
-static SWFMovie getMovie(zval *id TSRMLS_DC)
-{
- void *movie = SWFgetProperty(id, "movie", 5, le_swfmoviep TSRMLS_CC);
-
- if (!movie) {
- php_error(E_ERROR, "called object is not an SWFMovie!");
- }
- return (SWFMovie)movie;
-}
-/* }}} */
-
-/* {{{ swfmovie_nextframe
-*/
-PHP_FUNCTION(swfmovie_nextFrame)
-{
- SWFMovie_nextFrame(getMovie(getThis() TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ swfmovie_labelframe
-*/
-PHP_FUNCTION(swfmovie_labelFrame)
-{
- zval **label;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &label) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(label);
- SWFMovie_labelFrame(getMovie(getThis() TSRMLS_CC), Z_STRVAL_PP(label));
-}
-/* }}} */
-
-/* {{{ swfmovie_add
-*/
-PHP_FUNCTION(swfmovie_add)
-{
- zval **zchar;
- int ret;
- SWFBlock block;
- SWFDisplayItem item;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
-
- /* XXX - SWFMovie_add deals w/ all block types. Probably will need to add that.. */
- if (Z_OBJCE_PP(zchar) == &action_class_entry) {
- block = (SWFBlock) getAction(*zchar TSRMLS_CC);
- } else {
- block = (SWFBlock) getCharacter(*zchar TSRMLS_CC);
- }
-
- item = SWFMovie_add(movie, block);
-
- if(item != NULL) {
- /* try and create a displayitem object */
- ret = zend_list_insert(item, le_swfdisplayitemp);
- object_init_ex(return_value, &displayitem_class_entry);
- add_property_resource(return_value, "displayitem", ret);
- }
-}
-/* }}} */
-
-/* {{{ swfmovie_remove
-*/
-PHP_FUNCTION(swfmovie_remove)
-{
- zval **zchar;
- SWFDisplayItem item;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(zchar);
- item = getDisplayItem(*zchar TSRMLS_CC);
- SWFMovie_remove(movie, item);
-}
-/* }}} */
-
-/* {{{ swfmovie_output
-*/
-static void phpByteOutputMethod(byte b, void *data)
-{
- TSRMLS_FETCH();
-
- php_write(&b, 1 TSRMLS_CC);
-}
-
-PHP_FUNCTION(swfmovie_output)
-{
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- RETURN_LONG(SWFMovie_output(movie, &phpByteOutputMethod, NULL));
-}
-/* }}} */
-
-/* {{{ swfmovie_saveToFile
-*/
-static void phpStreamOutputMethod(byte b, void * data)
-{
- TSRMLS_FETCH();
-
- php_stream_write((php_stream*)data, &b, 1);
-}
-
-PHP_FUNCTION(swfmovie_saveToFile)
-{
- zval **x;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
- php_stream *what;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(what, php_stream *, x, -1,"File-Handle",php_file_le_stream());
- RETURN_LONG(SWFMovie_output(movie, &phpStreamOutputMethod, what));
-}
-/* }}} */
-
-/* {{{ swfmovie_save
-*/
-PHP_FUNCTION(swfmovie_save)
-{
- zval **x;
- long retval;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(x) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE(stream, php_stream *, x, -1,"File-Handle",php_file_le_stream());
- RETURN_LONG(SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, stream));
- }
-
- convert_to_string_ex(x);
- stream = php_stream_open_wrapper(Z_STRVAL_PP(x), "wb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- retval = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, (void *)stream);
- php_stream_close(stream);
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ swfmovie_setbackground
-*/
-PHP_FUNCTION(swfmovie_setBackground)
-{
- zval **r, **g, **b;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- SWFMovie_setBackground(movie, Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b));
-}
-/* }}} */
-
-/* {{{ swfmovie_setrate
-*/
-PHP_FUNCTION(swfmovie_setRate)
-{
- zval **rate;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &rate) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(rate);
- SWFMovie_setRate(movie, Z_DVAL_PP(rate));
-}
-/* }}} */
-
-/* {{{ swfmovie_setDimension
-*/
-PHP_FUNCTION(swfmovie_setDimension)
-{
- zval **x, **y;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFMovie_setDimension(movie, Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ swfmovie_setframes
-*/
-PHP_FUNCTION(swfmovie_setFrames)
-{
- zval **frames;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &frames) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(frames);
- SWFMovie_setNumberOfFrames(movie, Z_LVAL_PP(frames));
-}
-/* }}} */
-
-/* {{{ swfmovie_streamMp3
-*/
-PHP_FUNCTION(swfmovie_streamMp3)
-{
- zval **zfile;
- SWFSound sound;
- SWFInput input;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(zfile) != IS_RESOURCE) {
- convert_to_string_ex(zfile);
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- } else {
- input = getInput(zfile TSRMLS_CC);
- }
-
- sound = newSWFSound_fromInput(input);
- SWFMovie_setSoundStream(movie, sound);
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFShape
-*/
-static zend_function_entry swfshape_functions[] = {
- PHP_FALIAS(swfshape, swfshape_init, NULL)
- PHP_FALIAS(setline, swfshape_setline, NULL)
- PHP_FALIAS(addfill, swfshape_addfill, NULL)
- PHP_FALIAS(setleftfill, swfshape_setleftfill, NULL)
- PHP_FALIAS(setrightfill, swfshape_setrightfill, NULL)
- PHP_FALIAS(movepento, swfshape_movepento, NULL)
- PHP_FALIAS(movepen, swfshape_movepen, NULL)
- PHP_FALIAS(drawlineto, swfshape_drawlineto, NULL)
- PHP_FALIAS(drawline, swfshape_drawline, NULL)
- PHP_FALIAS(drawcurveto, swfshape_drawcurveto, NULL)
- PHP_FALIAS(drawcurve, swfshape_drawcurve, NULL)
- PHP_FALIAS(drawglyph, swfshape_drawglyph, NULL)
- PHP_FALIAS(drawcircle, swfshape_drawcircle, NULL)
- PHP_FALIAS(drawarc, swfshape_drawarc, NULL)
- PHP_FALIAS(drawcubic, swfshape_drawcubic, NULL)
- PHP_FALIAS(drawcubicto, swfshape_drawcubicto, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto class swfshape_init(void)
- Returns a new SWFShape object */
-PHP_FUNCTION(swfshape_init)
-{
- SWFShape shape = newSWFShape();
- int ret = zend_list_insert(shape, le_swfshapep);
-
- object_init_ex(getThis(), &shape_class_entry);
- add_property_resource(getThis(), "shape", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFShape_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFShape((SWFShape)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getShape
- Returns the SWFShape object contained in zval *id */
-static SWFShape getShape(zval *id TSRMLS_DC)
-{
- void *shape = SWFgetProperty(id, "shape", 5, le_swfshapep TSRMLS_CC);
-
- if (!shape) {
- php_error(E_ERROR, "called object is not an SWFShape!");
- }
- return (SWFShape)shape;
-}
-/* }}} */
-
-/* {{{ proto void swfshape_setline(int width, int r, int g, int b [, int a])
- Sets the current line style for this SWFShape */
-PHP_FUNCTION(swfshape_setline)
-{
- zval **w, **r, **g, **b, **a;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &w, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 5) {
- if (zend_get_parameters_ex(5, &w, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(a);
- } else if (ZEND_NUM_ARGS() == 1) {
- SWFShape_setLine(getShape(getThis() TSRMLS_CC), 0, 0, 0, 0, 0);
- return;
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(w);
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- if (ZEND_NUM_ARGS() == 4) {
- SWFShape_setLine(getShape(getThis() TSRMLS_CC),
- Z_LVAL_PP(w), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), 0xff
- );
- } else {
- SWFShape_setLine(getShape(getThis() TSRMLS_CC),
- Z_LVAL_PP(w), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), Z_LVAL_PP(a)
- );
- }
-}
-/* }}} */
-
-/* {{{ proto int swfshape_addfill(int fill, int flags)
- Returns a fill object, for use with swfshape_setleftfill and swfshape_setrightfill */
-PHP_FUNCTION(swfshape_addfill)
-{
- SWFFill fill=NULL;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1 || ZEND_NUM_ARGS() == 2) {
- /* it's a gradient or bitmap */
- zval **arg1;
- unsigned char flags = 0;
-
- if (ZEND_NUM_ARGS() == 2) {
- zval **arg2;
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
- flags = (unsigned char)Z_LVAL_PP(arg2);
- } else {
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- }
-
- convert_to_object_ex(arg1);
-
- if (Z_OBJCE_PP(arg1) == &gradient_class_entry) {
- if (flags == 0) {
- flags = SWFFILL_LINEAR_GRADIENT;
- }
- fill = SWFShape_addGradientFill(getShape(getThis() TSRMLS_CC), getGradient(*arg1 TSRMLS_CC), flags);
- } else if (Z_OBJCE_PP(arg1) == &bitmap_class_entry) {
- if (flags == 0) {
- flags = SWFFILL_TILED_BITMAP;
- }
- fill = SWFShape_addBitmapFill(getShape(getThis() TSRMLS_CC), getBitmap(*arg1 TSRMLS_CC), flags);
- } else {
- php_error(E_ERROR, "argument to addfill not a bitmap nor a gradient");
- }
-
- } else if (ZEND_NUM_ARGS() == 3 || ZEND_NUM_ARGS() == 4) {
- /* it's a solid fill */
- zval **r, **g, **b, **za;
- int a = 0xff;
-
- if (ZEND_NUM_ARGS() == 3) {
- if(zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if(ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(za);
- a = Z_LVAL_PP(za);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), a);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (!fill) {
- php_error(E_ERROR, "Error adding fill to shape!");
- }
-
- /* return an SWFFill object */
- ret = zend_list_insert(fill, le_swffillp);
- object_init_ex(return_value, &fill_class_entry);
- add_property_resource(return_value, "fill", ret);
-}
-/* }}} */
-
-/* {{{ proto void swfshape_setleftfill(int fill)
- Sets the left side fill style to fill */
-PHP_FUNCTION(swfshape_setleftfill)
-{
- zval **zfill, **r, **g, **b, **a;
- SWFFill fill;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), 0xff
- );
-
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- convert_to_long_ex(a);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), Z_LVAL_PP(a)
- );
-
- } else if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &zfill) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_LVAL_PP(zfill) != 0) {
- convert_to_object_ex(zfill);
- fill = getFill(*zfill TSRMLS_CC);
- } else {
- fill = NULL;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- SWFShape_setLeftFill(getShape(getThis() TSRMLS_CC), fill);
-}
-/* }}} */
-
-/* {{{ proto void swfshape_setrightfill(int fill)
- Sets the right side fill style to fill */
-PHP_FUNCTION(swfshape_setrightfill)
-{
- zval **zfill, **r, **g, **b, **a;
- SWFFill fill;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), 0xff
- );
-
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- convert_to_long_ex(a);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), Z_LVAL_PP(a)
- );
- } else if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &zfill) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if (Z_LVAL_PP(zfill) != 0) {
- convert_to_object_ex(zfill);
- fill = getFill(*zfill TSRMLS_CC);
- } else {
- fill = NULL;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- SWFShape_setRightFill(getShape(getThis() TSRMLS_CC), fill);
-}
-/* }}} */
-
-/* {{{ proto void swfshape_movepento(float x, float y)
- Moves the pen to shape coordinates (x, y) */
-PHP_FUNCTION(swfshape_movepento)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_movePenTo(getShape(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape_movepen(float x, float y)
- Moves the pen from its current location by vector (x, y) */
-PHP_FUNCTION(swfshape_movepen)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_movePen(getShape(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawlineto(float x, float y)
- Draws a line from the current pen position to shape coordinates (x, y) in the current line style */
-PHP_FUNCTION(swfshape_drawlineto)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_drawLineTo(getShape(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawline(float dx, float dy)
- Draws a line from the current pen position (x, y) to the point (x+dx, y+dy) in the current line style */
-PHP_FUNCTION(swfshape_drawline)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_drawLine(getShape(getThis() TSRMLS_CC), Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawcurveto(float ax, float ay, float bx, float by [, float dx, float dy])
- Draws a curve from the current pen position (x,y) to the point (bx, by) in the current line style, using point (ax, ay) as a control point. Or draws a cubic bezier to point (dx, dy) with control points (ax, ay) and (bx, by) */
-PHP_FUNCTION(swfshape_drawcurveto)
-{
- if (ZEND_NUM_ARGS() == 4) {
- zval **cx, **cy, **ax, **ay;
-
- if (zend_get_parameters_ex(4, &cx, &cy, &ax, &ay) == FAILURE){
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(ax);
- convert_to_double_ex(ay);
-
- SWFShape_drawCurveTo(getShape(getThis() TSRMLS_CC),
- Z_DVAL_PP(cx), Z_DVAL_PP(cy), Z_DVAL_PP(ax), Z_DVAL_PP(ay)
- );
-
- } else if (ZEND_NUM_ARGS() == 6) {
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG(SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC),
- Z_DVAL_PP(bx), Z_DVAL_PP(by), Z_DVAL_PP(cx), Z_DVAL_PP(cy), Z_DVAL_PP(dx), Z_DVAL_PP(dy))
- );
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawcurve(float adx, float ady, float bdx, float bdy [, float cdx, float cdy])
- Draws a curve from the current pen position (x, y) to the point (x+bdx, y+bdy) in the current line style, using point (x+adx, y+ady) as a control point or draws a cubic bezier to point (x+cdx, x+cdy) with control points (x+adx, y+ady) and (x+bdx, y+bdy) */
-PHP_FUNCTION(swfshape_drawcurve)
-{
- if (ZEND_NUM_ARGS() == 4) {
- zval **cx, **cy, **ax, **ay;
-
- if (zend_get_parameters_ex(4, &cx, &cy, &ax, &ay) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(ax);
- convert_to_double_ex(ay);
-
- SWFShape_drawCurve(getShape(getThis() TSRMLS_CC),
- Z_DVAL_PP(cx), Z_DVAL_PP(cy), Z_DVAL_PP(ax), Z_DVAL_PP(ay)
- );
-
- } else if(ZEND_NUM_ARGS() == 6) {
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC),
- Z_DVAL_PP(bx), Z_DVAL_PP(by), Z_DVAL_PP(cx), Z_DVAL_PP(cy), Z_DVAL_PP(dx), Z_DVAL_PP(dy))
- );
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawglyph(SWFFont font, string character [, int size])
- Draws the first character in the given string into the shape using the glyph definition from the given font */
-PHP_FUNCTION(swfshape_drawglyph)
-{
- zval **font, **c, **zsize;
- int size=0;
-
- if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &font, &c) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- size = 1024/Ming_getScale();
-
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &font, &c, &zsize) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(zsize);
- size = Z_LVAL_PP(zsize);
- }
- convert_to_string_ex(c);
- SWFShape_drawSizedGlyph(getShape(getThis() TSRMLS_CC), getFont(*font TSRMLS_CC), Z_STRVAL_PP(c)[0], size);
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawcircle(int r)
- Draws a circle of radius r centered at the current location, in a counter-clockwise fashion */
-PHP_FUNCTION(swfshape_drawcircle)
-{
- zval **r;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &r) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(r);
- SWFShape_drawCircle(getShape(getThis() TSRMLS_CC), Z_DVAL_PP(r));
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawarc(int r, float startAngle, float endAngle)
- Draws an arc of radius r centered at the current location, from angle startAngle to angle endAngle measured counterclockwise from 12 o'clock */
-PHP_FUNCTION(swfshape_drawarc)
-{
- zval **r, **start, **end;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &r, &start, &end) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(r);
- convert_to_double_ex(start);
- convert_to_double_ex(end);
-
- /* convert angles to radians, since that's what php uses elsewhere */
- SWFShape_drawArc(getShape(getThis() TSRMLS_CC), Z_DVAL_PP(r), Z_DVAL_PP(start)*M_PI/180, Z_DVAL_PP(end)*M_PI/180);
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawcubic(float bx, float by, float cx, float cy, float dx, float dy)
- Draws a cubic bezier curve using the current position and the three given points as control points */
-PHP_FUNCTION(swfshape_drawcubic)
-{
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC),
- Z_DVAL_PP(bx), Z_DVAL_PP(by), Z_DVAL_PP(cx), Z_DVAL_PP(cy), Z_DVAL_PP(dx), Z_DVAL_PP(dy))
- );
-}
-/* }}} */
-
-/* {{{ proto void swfshape_drawcubic(float bx, float by, float cx, float cy, float dx, float dy)
- Draws a cubic bezier curve using the current position and the three given points as control points */
-PHP_FUNCTION(swfshape_drawcubicto)
-{
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG( SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC),
- Z_DVAL_PP(bx), Z_DVAL_PP(by), Z_DVAL_PP(cx), Z_DVAL_PP(cy), Z_DVAL_PP(dx), Z_DVAL_PP(dy))
- );
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFSprite
-*/
-static zend_function_entry swfsprite_functions[] = {
- PHP_FALIAS(swfsprite, swfsprite_init, NULL)
- PHP_FALIAS(add, swfsprite_add, NULL)
- PHP_FALIAS(remove, swfsprite_remove, NULL)
- PHP_FALIAS(nextframe, swfsprite_nextFrame, NULL)
- PHP_FALIAS(labelframe, swfsprite_labelFrame, NULL)
- PHP_FALIAS(setframes, swfsprite_setFrames, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto class swfsprite_init(void)
- Returns a new SWFSprite object */
-PHP_FUNCTION(swfsprite_init)
-{
- SWFMovieClip sprite = newSWFMovieClip();
- int ret = zend_list_insert(sprite, le_swfspritep);
-
- object_init_ex(getThis(), &sprite_class_entry);
- add_property_resource(getThis(), "sprite", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFSprite_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFMovieClip((SWFMovieClip)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function SWFSprite getSprite(zval *id)
- Returns the SWFSprite object in zval *id */
-static SWFMovieClip getSprite(zval *id TSRMLS_DC)
-{
- void *sprite = SWFgetProperty(id, "sprite", 6, le_swfspritep TSRMLS_CC);
-
- if (!sprite) {
- php_error(E_ERROR, "called object is not an SWFSprite!");
- }
- return (SWFMovieClip)sprite;
-}
-/* }}} */
-
-/* {{{ proto SWFDisplayItem swfsprite_add(SWFCharacter)
- Adds the character to the sprite, returns a displayitem */
-PHP_FUNCTION(swfsprite_add)
-{
- zval **zchar;
- int ret;
- SWFBlock block;
- SWFDisplayItem item;
- SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
-
- if (Z_OBJCE_PP(zchar) == &action_class_entry) {
- block = (SWFBlock)getAction(*zchar TSRMLS_CC);
- } else {
- block = (SWFBlock)getCharacter(*zchar TSRMLS_CC);
- }
-
- item = SWFMovieClip_add(sprite, block);
-
- if (item != NULL) {
- /* try and create a displayitem object */
- ret = zend_list_insert(item, le_swfdisplayitemp);
- object_init_ex(return_value, &displayitem_class_entry);
- add_property_resource(return_value, "displayitem", ret);
- }
-}
-/* }}} */
-
-/* {{{ proto void swfsprite_remove(SWFDisplayItem)
- Remove the named character from the sprite's display list */
-PHP_FUNCTION(swfsprite_remove)
-{
- zval **zchar;
- SWFDisplayItem item;
- SWFMovieClip movie = getSprite(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(zchar);
- item = getDisplayItem(*zchar TSRMLS_CC);
- SWFMovieClip_remove(movie, item);
-}
-/* }}} */
-
-/* {{{ proto void swfsprite_nextFrame(void)
- Moves the sprite to the next frame */
-PHP_FUNCTION(swfsprite_nextFrame)
-{
- SWFMovieClip_nextFrame(getSprite(getThis() TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ swfmovie_labelframe
-*/
-PHP_FUNCTION(swfsprite_labelFrame)
-{
- zval **label;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &label) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(label);
- SWFMovieClip_labelFrame(getSprite(getThis() TSRMLS_CC), Z_STRVAL_PP(label));
-}
-/* }}} */
-
-/* {{{ proto void swfsprite_setFrames(int frames)
- Sets the number of frames in this SWFSprite */
-PHP_FUNCTION(swfsprite_setFrames)
-{
- zval **frames;
- SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &frames) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(frames);
- SWFMovieClip_setNumberOfFrames(sprite, Z_LVAL_PP(frames));
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFText
-*/
-static zend_function_entry swftext_functions[] = {
- PHP_FALIAS(swftext, swftext_init, NULL)
- PHP_FALIAS(setfont, swftext_setFont, NULL)
- PHP_FALIAS(setheight, swftext_setHeight, NULL)
- PHP_FALIAS(setspacing, swftext_setSpacing, NULL)
- PHP_FALIAS(setcolor, swftext_setColor, NULL)
- PHP_FALIAS(moveto, swftext_moveTo, NULL)
- PHP_FALIAS(addstring, swftext_addString, NULL)
- PHP_FALIAS(getwidth, swftext_getWidth, NULL)
- PHP_FALIAS(getascent, swftext_getAscent, NULL)
- PHP_FALIAS(getdescent, swftext_getDescent, NULL)
- PHP_FALIAS(getleading, swftext_getLeading, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto class swftext_init(void)
- Returns new SWFText object */
-PHP_FUNCTION(swftext_init)
-{
- SWFText text = newSWFText2();
- int ret = zend_list_insert(text, le_swftextp);
-
- object_init_ex(getThis(), &text_class_entry);
- add_property_resource(getThis(), "text", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFText_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFText((SWFText)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function SWFText getText(zval *id)
- Returns the SWFText contained in zval *id */
-static SWFText getText(zval *id TSRMLS_DC)
-{
- void *text = SWFgetProperty(id, "text", 4, le_swftextp TSRMLS_CC);
-
- if (!text) {
- php_error(E_ERROR, "called object is not an SWFText!");
- }
- return (SWFText)text;
-}
-/* }}} */
-
-/* {{{ proto void swftext_setFont(class font)
- Sets this SWFText object's current font to given font */
-PHP_FUNCTION(swftext_setFont)
-{
- zval **zfont;
- SWFText text = getText(getThis() TSRMLS_CC);
- SWFFont font;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfont) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(zfont);
- font = getFont(*zfont TSRMLS_CC);
- SWFText_setFont(text, font);
-}
-/* }}} */
-
-/* {{{ proto void swftext_setHeight(float height)
- Sets this SWFText object's current height to given height */
-PHP_FUNCTION(swftext_setHeight)
-{
- zval **height;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(height);
- SWFText_setHeight(text, Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swftext_setSpacing(float spacing)
- Sets this SWFText object's current letterspacing to given spacing */
-PHP_FUNCTION(swftext_setSpacing)
-{
- zval **spacing;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &spacing) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(spacing);
- SWFText_setSpacing(text, Z_DVAL_PP(spacing));
-}
-/* }}} */
-
-/* {{{ proto void swftext_setColor(int r, int g, int b [, int a])
- Sets this SWFText object's current color to the given color */
-PHP_FUNCTION(swftext_setColor)
-{
- zval **r, **g, **b, **a;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(a);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- if (ZEND_NUM_ARGS() == 4) {
- SWFText_setColor(text, Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), Z_LVAL_PP(a));
- } else {
- SWFText_setColor(text, Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), 0xff);
- }
-}
-/* }}} */
-
-/* {{{ proto void swftext_moveTo(float x, float y)
- Moves this SWFText object's current pen position to (x, y) in text coordinates */
-PHP_FUNCTION(swftext_moveTo)
-{
- zval **x, **y;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFText_setXY(text, Z_DVAL_PP(x), Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swftext_addString(string text)
- Writes the given text into this SWFText object at the current pen position, using the current font, height, spacing, and color */
-PHP_FUNCTION(swftext_addString)
-{
- zval **s;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(s);
- SWFText_addString(text, Z_STRVAL_PP(s), NULL);
-}
-/* }}} */
-
-/* {{{ proto float swftext_getWidth(string str)
- Calculates the width of the given string in this text objects current font and size */
-PHP_FUNCTION(swftext_getWidth)
-{
- zval **zstring;
- int width;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(zstring);
- width = SWFText_getStringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
- RETURN_DOUBLE(width);
-}
-/* }}} */
-
-/* {{{ proto float swftext_getAscent(void)
- Returns the ascent of the current font at its current size, or 0 if not available */
-PHP_FUNCTION(swftext_getAscent)
-{
- RETURN_DOUBLE(SWFText_getAscent(getText(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swftext_getDescent(void)
- Returns the descent of the current font at its current size, or 0 if not available */
-PHP_FUNCTION(swftext_getDescent)
-{
- RETURN_DOUBLE(SWFText_getDescent(getText(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swftext_getLeading(void)
- Returns the leading of the current font at its current size, or 0 if not available */
-PHP_FUNCTION(swftext_getLeading)
-{
- RETURN_DOUBLE(SWFText_getLeading(getText(getThis() TSRMLS_CC)));
-}
-/* }}} */
-/* }}} */
-
-/* {{{ SWFTextField
-*/
-static zend_function_entry swftextfield_functions[] = {
- PHP_FALIAS(swftextfield, swftextfield_init, NULL)
- PHP_FALIAS(setfont, swftextfield_setFont, NULL)
- PHP_FALIAS(setbounds, swftextfield_setBounds, NULL)
- PHP_FALIAS(align, swftextfield_align, NULL)
- PHP_FALIAS(setheight, swftextfield_setHeight, NULL)
- PHP_FALIAS(setleftmargin, swftextfield_setLeftMargin, NULL)
- PHP_FALIAS(setrightmargin, swftextfield_setRightMargin, NULL)
- PHP_FALIAS(setmargins, swftextfield_setMargins, NULL)
- PHP_FALIAS(setindentation, swftextfield_setIndentation, NULL)
- PHP_FALIAS(setlinespacing, swftextfield_setLineSpacing, NULL)
- PHP_FALIAS(setcolor, swftextfield_setColor, NULL)
- PHP_FALIAS(setname, swftextfield_setName, NULL)
- PHP_FALIAS(addstring, swftextfield_addString, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ proto object swftextfield_init([int flags])
- Returns a new SWFTextField object */
-PHP_FUNCTION(swftextfield_init)
-{
- zval **flags;
- SWFTextField field = newSWFTextField();
- int ret = zend_list_insert(field, le_swftextfieldp);
-
- object_init_ex(getThis(), &textfield_class_entry);
- add_property_resource(getThis(), "textfield", ret);
- zend_list_addref(ret);
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(flags);
- SWFTextField_setFlags(field, Z_LVAL_PP(flags));
- }
-}
-
-static void destroy_SWFTextField_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFTextField((SWFTextField)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getTextField
- Returns the SWFTextField object contained in zval *id */
-static SWFTextField getTextField(zval *id TSRMLS_DC)
-{
- void *field = SWFgetProperty(id, "textfield", 9, le_swftextfieldp TSRMLS_CC);
-
- if (!field) {
- php_error(E_ERROR, "called object is not an SWFTextField!");
- }
- return (SWFTextField)field;
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setFont(int font)
- Sets the font for this textfield */
-PHP_FUNCTION(swftextfield_setFont)
-{
- zval **font;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &font) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(font);
- SWFTextField_setFont(field, getFont(*font TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setBounds(float width, float height)
- Sets the width and height of this textfield */
-PHP_FUNCTION(swftextfield_setBounds)
-{
- zval **width, **height;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &width, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(width);
- convert_to_double_ex(height);
- SWFTextField_setBounds(field, Z_DVAL_PP(width), Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_align(int alignment)
- Sets the alignment of this textfield */
-PHP_FUNCTION(swftextfield_align)
-{
- zval **align;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &align) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(align);
- SWFTextField_setAlignment(field, Z_LVAL_PP(align));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setHeight(float height)
- Sets the font height of this textfield */
-PHP_FUNCTION(swftextfield_setHeight)
-{
- zval **height;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(height);
- SWFTextField_setHeight(field, Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setLeftMargin(float)
- Sets the left margin of this textfield */
-PHP_FUNCTION(swftextfield_setLeftMargin)
-{
- zval **margin;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &margin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(margin);
- SWFTextField_setLeftMargin(field, Z_DVAL_PP(margin));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setRightMargin(float margin)
- Sets the right margin of this textfield */
-PHP_FUNCTION(swftextfield_setRightMargin)
-{
- zval **margin;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &margin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(margin);
- SWFTextField_setRightMargin(field, Z_DVAL_PP(margin));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setMargins(float left, float right)
- Sets both margins of this textfield */
-PHP_FUNCTION(swftextfield_setMargins)
-{
- zval **left, **right;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(left);
- convert_to_double_ex(right);
- SWFTextField_setLeftMargin(field, Z_DVAL_PP(left));
- SWFTextField_setRightMargin(field, Z_DVAL_PP(right));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setIndentation(float indentation)
- Sets the indentation of the first line of this textfield */
-PHP_FUNCTION(swftextfield_setIndentation)
-{
- zval **indent;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &indent) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(indent);
- SWFTextField_setIndentation(field, Z_DVAL_PP(indent));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setLineSpacing(float space)
- Sets the line spacing of this textfield */
-PHP_FUNCTION(swftextfield_setLineSpacing)
-{
- zval **spacing;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &spacing) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(spacing);
- SWFTextField_setLineSpacing(field, Z_DVAL_PP(spacing));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setColor(int r, int g, int b [, int a])
- Sets the color of this textfield */
-PHP_FUNCTION(swftextfield_setColor)
-{
- zval **r, **g, **b, **a;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
- int alpha = 0xff;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(a);
- alpha = Z_LVAL_PP(a);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- SWFTextField_setColor(field, Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), alpha);
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_setName(string var_name)
- Sets the variable name of this textfield */
-PHP_FUNCTION(swftextfield_setName)
-{
- zval **name;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- SWFTextField_setVariableName(field, Z_STRVAL_PP(name));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield_addString(string str)
- Adds the given string to this textfield */
-PHP_FUNCTION(swftextfield_addString)
-{
- zval **string;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(string);
- SWFTextField_addString(field, Z_STRVAL_PP(string));
-}
-/* }}} */
-/* }}} */
-
-zend_module_entry ming_module_entry = {
- STANDARD_MODULE_HEADER,
- "ming",
- ming_functions,
- PHP_MINIT(ming), /* module init function */
- NULL, /* module shutdown function */
- PHP_RINIT(ming), /* request init function */
- NULL, /* request shutdown function */
- PHP_MINFO(ming), /* module info function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_MING
-ZEND_GET_MODULE(ming)
-#endif
-
-/* {{{ todo PHP_MINFO_FUNCTION(ming)
-*/
-PHP_MINFO_FUNCTION(ming)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Ming SWF output library", "the funk in your trunk");
- php_info_print_table_row(2, "Version", MING_VERSION_TEXT);
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ todo PHP_MINIT_FUNCTION(ming)
-*/
-#define ERROR_BUFSIZE 1024
-
-/* custom error handler propagates ming errors up to php */
-static void php_ming_error(char *msg, ...)
-{
- va_list args;
- char buffer[ERROR_BUFSIZE];
-
- va_start(args, msg);
- vsnprintf(buffer, ERROR_BUFSIZE, msg, args);
- va_end(args);
-
- php_error(E_ERROR, buffer);
-}
-
-PHP_RINIT_FUNCTION(ming)
-{
- /* XXX - this didn't work so well last I tried.. */
-
- if (Ming_init() != 0) {
- php_error(E_ERROR, "Error initializing Ming module");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(ming)
-{
- Ming_setErrorFunction(php_ming_error);
-
-#define CONSTANT(s,c) REGISTER_LONG_CONSTANT((s), (c), CONST_CS | CONST_PERSISTENT)
-
- /* flags for SWFButton_addShape */
- CONSTANT("SWFBUTTON_HIT", SWFBUTTONRECORD_HITSTATE);
- CONSTANT("SWFBUTTON_DOWN", SWFBUTTONRECORD_DOWNSTATE);
- CONSTANT("SWFBUTTON_OVER", SWFBUTTONRECORD_OVERSTATE);
- CONSTANT("SWFBUTTON_UP", SWFBUTTONRECORD_UPSTATE);
-
- /* flags for SWFButton_addAction */
- CONSTANT("SWFBUTTON_MOUSEUPOUTSIDE", SWFBUTTON_MOUSEUPOUTSIDE);
- CONSTANT("SWFBUTTON_DRAGOVER", SWFBUTTON_DRAGOVER);
- CONSTANT("SWFBUTTON_DRAGOUT", SWFBUTTON_DRAGOUT);
- CONSTANT("SWFBUTTON_MOUSEUP", SWFBUTTON_MOUSEUP);
- CONSTANT("SWFBUTTON_MOUSEDOWN", SWFBUTTON_MOUSEDOWN);
- CONSTANT("SWFBUTTON_MOUSEOUT", SWFBUTTON_MOUSEOUT);
- CONSTANT("SWFBUTTON_MOUSEOVER", SWFBUTTON_MOUSEOVER);
-
- /* flags for SWFFill */
- CONSTANT("SWFFILL_RADIAL_GRADIENT", SWFFILL_RADIAL_GRADIENT);
- CONSTANT("SWFFILL_LINEAR_GRADIENT", SWFFILL_LINEAR_GRADIENT);
- CONSTANT("SWFFILL_TILED_BITMAP", SWFFILL_TILED_BITMAP);
- CONSTANT("SWFFILL_CLIPPED_BITMAP", SWFFILL_CLIPPED_BITMAP);
-
- /* flags for SWFTextField_init */
- CONSTANT("SWFTEXTFIELD_HASLENGTH", SWFTEXTFIELD_HASLENGTH);
- CONSTANT("SWFTEXTFIELD_NOEDIT", SWFTEXTFIELD_NOEDIT);
- CONSTANT("SWFTEXTFIELD_PASSWORD", SWFTEXTFIELD_PASSWORD);
- CONSTANT("SWFTEXTFIELD_MULTILINE", SWFTEXTFIELD_MULTILINE);
- CONSTANT("SWFTEXTFIELD_WORDWRAP", SWFTEXTFIELD_WORDWRAP);
- CONSTANT("SWFTEXTFIELD_DRAWBOX", SWFTEXTFIELD_DRAWBOX);
- CONSTANT("SWFTEXTFIELD_NOSELECT", SWFTEXTFIELD_NOSELECT);
- CONSTANT("SWFTEXTFIELD_HTML", SWFTEXTFIELD_HTML);
-
- /* flags for SWFTextField_align */
- CONSTANT("SWFTEXTFIELD_ALIGN_LEFT", SWFTEXTFIELD_ALIGN_LEFT);
- CONSTANT("SWFTEXTFIELD_ALIGN_RIGHT", SWFTEXTFIELD_ALIGN_RIGHT);
- CONSTANT("SWFTEXTFIELD_ALIGN_CENTER", SWFTEXTFIELD_ALIGN_CENTER);
- CONSTANT("SWFTEXTFIELD_ALIGN_JUSTIFY", SWFTEXTFIELD_ALIGN_JUSTIFY);
-
- /* flags for SWFDisplayItem_addAction */
- CONSTANT("SWFACTION_ONLOAD", SWFACTION_ONLOAD);
- CONSTANT("SWFACTION_ENTERFRAME", SWFACTION_ENTERFRAME);
- CONSTANT("SWFACTION_UNLOAD", SWFACTION_UNLOAD);
- CONSTANT("SWFACTION_MOUSEMOVE", SWFACTION_MOUSEMOVE);
- CONSTANT("SWFACTION_MOUSEDOWN", SWFACTION_MOUSEDOWN);
- CONSTANT("SWFACTION_MOUSEUP", SWFACTION_MOUSEUP);
- CONSTANT("SWFACTION_KEYDOWN", SWFACTION_KEYDOWN);
- CONSTANT("SWFACTION_KEYUP", SWFACTION_KEYUP);
- CONSTANT("SWFACTION_DATA", SWFACTION_DATA);
-
- le_swfmoviep = zend_register_list_destructors_ex(destroy_SWFMovie_resource, NULL, "SWFMovie", module_number);
- le_swfshapep = zend_register_list_destructors_ex(destroy_SWFShape_resource, NULL, "SWFShape", module_number);
- le_swffillp = zend_register_list_destructors_ex(destroy_SWFFill_resource, NULL, "SWFFill", module_number);
- le_swfgradientp = zend_register_list_destructors_ex(destroy_SWFGradient_resource, NULL, "SWFGradient", module_number);
- le_swfbitmapp = zend_register_list_destructors_ex(destroy_SWFBitmap_resource, NULL, "SWFBitmap", module_number);
- le_swftextp = zend_register_list_destructors_ex(destroy_SWFText_resource, NULL, "SWFText", module_number);
- le_swftextfieldp = zend_register_list_destructors_ex(destroy_SWFTextField_resource, NULL, "SWFTextField", module_number);
- le_swffontp = zend_register_list_destructors_ex(destroy_SWFFont_resource, NULL, "SWFFont", module_number);
- le_swfbuttonp = zend_register_list_destructors_ex(destroy_SWFButton_resource, NULL, "SWFButton", module_number);
- le_swfmorphp = zend_register_list_destructors_ex(destroy_SWFMorph_resource, NULL, "SWFMorph", module_number);
- le_swfspritep = zend_register_list_destructors_ex(destroy_SWFSprite_resource, NULL, "SWFSprite", module_number);
- le_swfdisplayitemp = zend_register_list_destructors_ex(NULL, NULL, "SWFDisplayItem", module_number);
- le_swfactionp = zend_register_list_destructors_ex(NULL, NULL, "SWFAction", module_number);
- le_swfinputp = zend_register_list_destructors_ex(destroy_SWFInput_resource, NULL, "SWFInput", module_number);
-
- INIT_CLASS_ENTRY(shape_class_entry, "swfshape", swfshape_functions);
- INIT_CLASS_ENTRY(fill_class_entry, "swffill", swffill_functions);
- INIT_CLASS_ENTRY(gradient_class_entry, "swfgradient", swfgradient_functions);
- INIT_CLASS_ENTRY(bitmap_class_entry, "swfbitmap", swfbitmap_functions);
- INIT_CLASS_ENTRY(text_class_entry, "swftext", swftext_functions);
- INIT_CLASS_ENTRY(textfield_class_entry, "swftextfield", swftextfield_functions);
- INIT_CLASS_ENTRY(font_class_entry, "swffont", swffont_functions);
- INIT_CLASS_ENTRY(displayitem_class_entry, "swfdisplayitem", swfdisplayitem_functions);
- INIT_CLASS_ENTRY(movie_class_entry, "swfmovie", swfmovie_functions);
- INIT_CLASS_ENTRY(button_class_entry, "swfbutton", swfbutton_functions);
- INIT_CLASS_ENTRY(action_class_entry, "swfaction", swfaction_functions);
- INIT_CLASS_ENTRY(morph_class_entry, "swfmorph", swfmorph_functions);
- INIT_CLASS_ENTRY(sprite_class_entry, "swfsprite", swfsprite_functions);
-
- zend_register_internal_class(&shape_class_entry TSRMLS_CC);
- zend_register_internal_class(&fill_class_entry TSRMLS_CC);
- zend_register_internal_class(&gradient_class_entry TSRMLS_CC);
- zend_register_internal_class(&bitmap_class_entry TSRMLS_CC);
- zend_register_internal_class(&text_class_entry TSRMLS_CC);
- zend_register_internal_class(&textfield_class_entry TSRMLS_CC);
- zend_register_internal_class(&font_class_entry TSRMLS_CC);
- zend_register_internal_class(&displayitem_class_entry TSRMLS_CC);
- zend_register_internal_class(&movie_class_entry TSRMLS_CC);
- zend_register_internal_class(&button_class_entry TSRMLS_CC);
- zend_register_internal_class(&action_class_entry TSRMLS_CC);
- zend_register_internal_class(&morph_class_entry TSRMLS_CC);
- zend_register_internal_class(&sprite_class_entry TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ming/ming.dsp b/ext/ming/ming.dsp
deleted file mode 100644
index 1202d9fcf2..0000000000
--- a/ext/ming/ming.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ming" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ming - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ming.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ming.mak" CFG="ming - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ming - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ming - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ming - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MING_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_MING" /D "HAVE_MING" /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib libming.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ming.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ming - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MING_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_MING" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_MING" /D ZTS=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib libming.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ming.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ming - Win32 Release_TS"
-# Name "ming - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ming.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_ming.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/ming/php_ming.h b/ext/ming/php_ming.h
deleted file mode 100644
index 0c33a88849..0000000000
--- a/ext/ming/php_ming.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_01.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: dave@opaque.net |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef _PHP_MING_H
-#define _PHP_MING_H
-
-#if HAVE_MING
-
-extern zend_module_entry ming_module_entry;
-#define ming_module_ptr &ming_module_entry
-
-#include <ming.h>
-
-PHP_RINIT_FUNCTION(ming);
-PHP_MINIT_FUNCTION(ming);
-PHP_MINFO_FUNCTION(ming);
-
-PHP_FUNCTION(swfbitmap_init);
-PHP_FUNCTION(swfbitmap_getWidth);
-PHP_FUNCTION(swfbitmap_getHeight);
-
-PHP_FUNCTION(swffill_init);
-PHP_FUNCTION(swffill_moveTo);
-PHP_FUNCTION(swffill_scaleTo);
-PHP_FUNCTION(swffill_rotateTo);
-PHP_FUNCTION(swffill_skewXTo);
-PHP_FUNCTION(swffill_skewYTo);
-
-PHP_FUNCTION(swfgradient_init);
-PHP_FUNCTION(swfgradient_addEntry);
-
-PHP_FUNCTION(swfshape_init);
-PHP_FUNCTION(swfshape_addfill);
-PHP_FUNCTION(swfshape_setrightfill);
-PHP_FUNCTION(swfshape_setleftfill);
-PHP_FUNCTION(swfshape_setline);
-PHP_FUNCTION(swfshape_movepento);
-PHP_FUNCTION(swfshape_movepen);
-PHP_FUNCTION(swfshape_drawlineto);
-PHP_FUNCTION(swfshape_drawline);
-PHP_FUNCTION(swfshape_drawcurveto);
-PHP_FUNCTION(swfshape_drawcurve);
-PHP_FUNCTION(swfshape_drawglyph);
-PHP_FUNCTION(swfshape_drawarc);
-PHP_FUNCTION(swfshape_drawcircle);
-PHP_FUNCTION(swfshape_drawcubic);
-PHP_FUNCTION(swfshape_drawcubicto);
-
-PHP_FUNCTION(swfmovie_init);
-PHP_FUNCTION(swfmovie_output);
-PHP_FUNCTION(swfmovie_saveToFile);
-PHP_FUNCTION(swfmovie_save);
-PHP_FUNCTION(swfmovie_add);
-PHP_FUNCTION(swfmovie_remove);
-PHP_FUNCTION(swfmovie_nextFrame);
-PHP_FUNCTION(swfmovie_labelFrame);
-PHP_FUNCTION(swfmovie_setBackground);
-PHP_FUNCTION(swfmovie_setRate);
-PHP_FUNCTION(swfmovie_setDimension);
-PHP_FUNCTION(swfmovie_setFrames);
-PHP_FUNCTION(swfmovie_streamMp3);
-
-PHP_FUNCTION(swfsprite_init);
-PHP_FUNCTION(swfsprite_add);
-PHP_FUNCTION(swfsprite_remove);
-PHP_FUNCTION(swfsprite_nextFrame);
-PHP_FUNCTION(swfsprite_labelFrame);
-PHP_FUNCTION(swfsprite_setFrames);
-
-PHP_FUNCTION(swffont_init);
-PHP_FUNCTION(swffont_getWidth);
-PHP_FUNCTION(swffont_getAscent);
-PHP_FUNCTION(swffont_getDescent);
-PHP_FUNCTION(swffont_getLeading);
-
-PHP_FUNCTION(swftext_init);
-PHP_FUNCTION(swftext_setFont);
-PHP_FUNCTION(swftext_setHeight);
-PHP_FUNCTION(swftext_setSpacing);
-PHP_FUNCTION(swftext_setColor);
-PHP_FUNCTION(swftext_moveTo);
-PHP_FUNCTION(swftext_addString);
-PHP_FUNCTION(swftext_getWidth);
-PHP_FUNCTION(swftext_getAscent);
-PHP_FUNCTION(swftext_getDescent);
-PHP_FUNCTION(swftext_getLeading);
-
-PHP_FUNCTION(swftextfield_init);
-PHP_FUNCTION(swftextfield_setFont);
-PHP_FUNCTION(swftextfield_setBounds);
-PHP_FUNCTION(swftextfield_align);
-PHP_FUNCTION(swftextfield_setHeight);
-PHP_FUNCTION(swftextfield_setLeftMargin);
-PHP_FUNCTION(swftextfield_setRightMargin);
-PHP_FUNCTION(swftextfield_setMargins);
-PHP_FUNCTION(swftextfield_setIndentation);
-PHP_FUNCTION(swftextfield_setLineSpacing);
-PHP_FUNCTION(swftextfield_setColor);
-PHP_FUNCTION(swftextfield_setName);
-PHP_FUNCTION(swftextfield_addString);
-
-PHP_FUNCTION(swfdisplayitem_move);
-PHP_FUNCTION(swfdisplayitem_moveTo);
-PHP_FUNCTION(swfdisplayitem_scale);
-PHP_FUNCTION(swfdisplayitem_scaleTo);
-PHP_FUNCTION(swfdisplayitem_rotate);
-PHP_FUNCTION(swfdisplayitem_rotateTo);
-PHP_FUNCTION(swfdisplayitem_skewX);
-PHP_FUNCTION(swfdisplayitem_skewXTo);
-PHP_FUNCTION(swfdisplayitem_skewY);
-PHP_FUNCTION(swfdisplayitem_skewYTo);
-PHP_FUNCTION(swfdisplayitem_setMatrix);
-PHP_FUNCTION(swfdisplayitem_setDepth);
-PHP_FUNCTION(swfdisplayitem_setRatio);
-PHP_FUNCTION(swfdisplayitem_addColor);
-PHP_FUNCTION(swfdisplayitem_multColor);
-PHP_FUNCTION(swfdisplayitem_setName);
-PHP_FUNCTION(swfdisplayitem_addAction);
-
-PHP_FUNCTION(swfbutton_init);
-PHP_FUNCTION(swfbutton_setHit);
-PHP_FUNCTION(swfbutton_setOver);
-PHP_FUNCTION(swfbutton_setUp);
-PHP_FUNCTION(swfbutton_setDown);
-PHP_FUNCTION(swfbutton_setAction);
-PHP_FUNCTION(swfbutton_addShape);
-PHP_FUNCTION(swfbutton_addAction);
-
-PHP_FUNCTION(swfbutton_keypress);
-
-PHP_FUNCTION(swfaction_init);
-
-PHP_FUNCTION(swfmorph_init);
-PHP_FUNCTION(swfmorph_getShape1);
-PHP_FUNCTION(swfmorph_getShape2);
-
-PHP_FUNCTION(ming_setCubicThreshold);
-PHP_FUNCTION(ming_setScale);
-PHP_FUNCTION(ming_useSWFVersion);
-
-#else
-#define ming_module_ptr NULL
-#endif /* HAVE_MING */
-#define phpext_ming_ptr ming_module_ptr
-#endif /* _PHP_MING_H */
diff --git a/ext/mnogosearch/CREDITS b/ext/mnogosearch/CREDITS
deleted file mode 100644
index 93dada0a4f..0000000000
--- a/ext/mnogosearch/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mnoGoSearch
-Alex Barkov, Ramil Kalimullin, Sergey Kartashoff
diff --git a/ext/mnogosearch/README b/ext/mnogosearch/README
deleted file mode 100644
index e646a725af..0000000000
--- a/ext/mnogosearch/README
+++ /dev/null
@@ -1,17 +0,0 @@
-$Source$
-$Id$
-
-mnoGoSearch extension module for PHP4.
-
-For details please refer to http://search.mnogo.ru
-
-If used with mysql you should not use bundled mysql library
-in the php distribution. You should use native mysql
-library. To do this you should compile php with specefying mysql-dir
-(for example --with-mysql=/usr, not --with-mysql).
-
- TODO
- ----
-
-Implement indexing functions of the library.
-For example retrieving, parsing, checking of the URL and so on...
diff --git a/ext/mnogosearch/config.m4 b/ext/mnogosearch/config.m4
deleted file mode 100644
index d029412440..0000000000
--- a/ext/mnogosearch/config.m4
+++ /dev/null
@@ -1,54 +0,0 @@
-dnl
-dnl $Source$
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mnogosearch,for mnoGoSearch support,
-[ --with-mnogosearch[=DIR]
- Include mnoGoSearch support. DIR is the mnoGoSearch
- base install directory, defaults to
- /usr/local/mnogosearch.])
-
- if test "$PHP_MNOGOSEARCH" != "no"; then
-
- if test "$PHP_MNOGOSEARCH" = "yes"; then
- MNOGOSEARCH_BINDIR=/usr/local/mnogosearch/bin
- MNOGOSEARCH_INCDIR=/usr/local/mnogosearch/include
- MNOGOSEARCH_LIBDIR=/usr/local/mnogosearch/lib
- else
- MNOGOSEARCH_BINDIR=$PHP_MNOGOSEARCH/bin
- MNOGOSEARCH_INCDIR=$PHP_MNOGOSEARCH/include
- MNOGOSEARCH_LIBDIR=$PHP_MNOGOSEARCH/lib
- fi
-
- AC_MSG_CHECKING(for mnoGoSearch version)
-
- if test -x "$MNOGOSEARCH_BINDIR/udm-config"; then
- MNOGOSEARCH_VERSION=`$MNOGOSEARCH_BINDIR/udm-config --version`
- MNOGOSEARCH_VERSION_ID=`$MNOGOSEARCH_BINDIR/udm-config --version-id`
-
- if test $? -ne 0; then
- AC_MSG_RESULT(<= 3.1.9)
- AC_MSG_ERROR(mnoGoSearch 3.1.10 at least required)
- fi
-
- if test "$MNOGOSEARCH_VERSION_ID" -lt 30110; then
- AC_MSG_RESULT(<= 3.1.9)
- AC_MSG_ERROR(mnoGoSearch 3.1.10 at least required)
- fi
-
- AC_MSG_RESULT($MNOGOSEARCH_VERSION)
-
- PHP_EVAL_LIBLINE(`$MNOGOSEARCH_BINDIR/udm-config --libs`, MNOGOSEARCH_SHARED_LIBADD)
- else
- AC_MSG_ERROR(udm-config script not found in $MNOGOSEARCH_BINDIR)
- fi
-
- PHP_ADD_INCLUDE($MNOGOSEARCH_INCDIR)
-
- AC_DEFINE(HAVE_MNOGOSEARCH,1,[ ])
-
- PHP_SUBST(MNOGOSEARCH_SHARED_LIBADD)
- PHP_NEW_EXTENSION(mnogosearch, php_mnogo.c, $ext_shared)
-
- fi
diff --git a/ext/mnogosearch/index.php b/ext/mnogosearch/index.php
deleted file mode 100644
index e9a4d0ff07..0000000000
--- a/ext/mnogosearch/index.php
+++ /dev/null
@@ -1,996 +0,0 @@
-<?
-
-/*
- $Source$
- $Id$
-*/
-
-/* mnoGoSearch-php-lite v.1.2
- * for mnoGoSearch ( formely known as UdmSearch ) free web search engine
- * (C) 2001 by Sergey Kartashoff <gluke@mail.ru>,
- * mnoGoSearch Developers Team <devel@mnogosearch.org>
- */
-
-if (!extension_loaded('mnogosearch')) {
- print "<b>This script requires PHP4.0.5+ with mnoGoSearch extension</b>";
- exit;
-}
-
-// maximal page number to view
-$MAX_NP=1000;
-
-// maximum results per page
-$MAX_PS=100;
-
-// (optional) Enable autowild feature for url limits
-// 'yes' - default value, can be 'yes' or 'no'
-// $auto_wild='yes';
-
-/* variables section */
-
-$dbaddr='mysql://udm:udm@/udm/';
-$dbmode='single';
-
-$localcharset='koi8-r';
-$browsercharset='utf-8';
-$phrase=$cache=$crosswords='no';
-$ispelluseprefixes=$trackquery='no';
-$spell_host=$vardir=$datadir='';
-$ispellmode='text';
-$affix_file['en']='/opt/udm/ispell/en.aff';
-// $affix_file['ru']='/opt/udm/ispell/ru.aff';
-$spell_file['en']='/opt/udm/ispell/en.dict';
-// $spell_file['ru']='/opt/udm/ispell/ru.dict';
-$stopwordtable_arr[]='stopword';
-// $stopwordfile_arr[]='stopwords.txt';
-$synonym_arr[]='/opt/udm/synonym/english.syn';
-$searchd_arr[]='localhost';
-
-$minwordlength=1;
-$maxwordlength=32;
-
-$storedocurl="/cgi-bin/storedoc.cgi";
-
-/* initialisation section */
-
-$self=$PHP_SELF;
-
-if ($ps=="") $ps=20;
-if ($np=="") $np=0;
-if ($o=="") $o=0;
-
-if (($dt!='back') && ($dt!='er') && ($dt!='range')) $dt='back';
-if ($dp=="") $dp=0;
-if (($dx!=0) && ($dx!=-1) && ($dx!=1)) $dx=0;
-if ($dy<1970) $dy=1970;
-if (($dm<0) || ($dm>11)) $dm=0;
-if (($dd<=0) || ($dd>31)) $dd="01";
-
-$db=urldecode($db);
-$de=urldecode($de);
-
-if ($db=="") $db='01/01/1970';
-if ($de=="") $de='31/12/2020';
-
-$storedaddr="localhost";
-$storedocurl='/cgi-bin/storedoc.cgi';
-
-if (isset($q)) {
- $q=urldecode($q);
- $have_query_flag=1;
-} else {
- $have_query_flag=0;
-}
-
-$ul=urldecode($ul);
-$tag=urldecode($t);
-$lang=urldecode($lang);
-
-$query_orig=$q;
-
-if (isset($CHARSET_SAVED_QUERY_STRING)) {
- $q_local=urldecode($CHARSET_SAVED_QUERY_STRING);
- if (preg_match('/q=([^&]*)\&/',$q_local,$param)) {
- $q_local=urlencode($param[1]);
- } elseif (preg_match('/q=(.*)$/',$q_local,$param)) {
- $q_local=urlencode($param[1]);
- } else {
- $q_local=urlencode($q);
- }
-} else {
- $q_local=urlencode($q);
-}
-
-$ul_local=urlencode($ul);
-$t_local=urlencode($tag);
-$db_local=urlencode($db);
-$de_local=urlencode($de);
-$lang_local=urlencode($lang);
-
-if (($MAX_NP > 0) && ($np>$MAX_NP)) $np=$MAX_NP;
-if (($MAX_PS > 0) && ($ps>$MAX_PS)) $ps=$MAX_PS;
-
-// -----------------------------------------------
-// print_bottom()
-// -----------------------------------------------
-function print_bottom(){
- print ("<HR><center><img src=\"http://mnogosearch.org/img/mnogo.gif\">\n");
- print ("<font size=\"-1\">Powered by <a href=\"http://mnogosearch.org/\">mnoGoSearch</a></font><br>\n");
- print ("<p></BODY></HTML>\n");
-}
-
-
-// -----------------------------------------------
-// print_error_local($str)
-// -----------------------------------------------
-function print_error_local($str){
- print ("<CENTER><FONT COLOR=\"#FF0000\">An error occured!</FONT>\n");
- print ("<P><B>$str</B></CENTER>\n");
- print_bottom();
- exit;
-}
-
-// -----------------------------------------------
-// exit_local()
-// -----------------------------------------------
-function exit_local($print_err = 1) {
- drop_temp_table($print_err);
- exit;
-}
-
-// -----------------------------------------------
-// format_lastmod($lastmod)
-// -----------------------------------------------
-function format_lastmod($lastmod) {
- $temp=$lastmod;
- if (!$temp) $temp = 'undefined';
- else $temp = strftime('%a, %d %b %Y %H:%M:%S %Z',$temp);
-
- return $temp;
-}
-
-// -----------------------------------------------
-// format_dp($dp)
-// -----------------------------------------------
-function format_dp($dp) {
- $result=0;
-
- while ($dp != '') {
- if (preg_match('/^([\-\+]?\d+)([sMhdmy]?)/',$dp,$param)) {
- switch ($param[2]) {
- case 's': $multiplier=1; break;
- case 'M': $multiplier=60; break;
- case 'h': $multiplier=3600; break;
- case 'd': $multiplier=3600*24; break;
- case 'm': $multiplier=3600*24*31; break;
- case 'y': $multiplier=3600*24*365; break;
- default: $multiplier=1;
- }
-
- $result += $param[1]*$multiplier;
- $dp=preg_replace("/^[\-\+]?\d+$param[2]/",'',$dp);
- } else {
- return 0;
- }
- }
-
- return $result;
-}
-
-// -----------------------------------------------
-// format_userdate($date)
-// -----------------------------------------------
-function format_userdate($date) {
- $result=0;
-
- if (preg_match('/^(\d+)\/(\d+)\/(\d+)$/',$date,$param)) {
- $day=$param[1];
- $mon=$param[2];
- $year=$param[3];
-
- $result=mktime(0,0,0,$mon,$day,$year);
- }
-
- return $result;
-}
-
-// -----------------------------------------------
-// ParseDocText($text)
-// -----------------------------------------------
-function ParseDocText($text){
- global $all_words;
- global $hlbeg, $hlend;
-
- $str=$text;
-
- if (Udm_Api_Version() < 30200) {
- for ($i=0; $i<count($all_words); $i++) {
- $word=$all_words[$i];
- $str = preg_replace("/([\s\t\r\n\~\!\@\#\$\%\^\&\*\(\)\-\_\=\+\\\|\{\}\[\]\;\:\'\"\<\>\?\/\,\.]+)($word)/i","\\1$hlbeg\\2$hlend",$str);
- $str = preg_replace("/^($word)/i","$hlbeg\\1$hlend",$str);
- }
- } else {
- $str = str_replace("\2",$hlbeg,$str);
- $str = str_replace("\3",$hlend,$str);
- }
-
- return $str;
-}
-
-// -----------------------------------------------
-// print_template($t,$echo=1)
-// -----------------------------------------------
-function print_template($t,$echo=1){
- global $templates, $udm_agent;
- global $first_doc, $last_doc, $found, $query_orig, $error, $self;
- global $nav, $wordinfo;
- global $url, $ue, $o, $cat;
- global $clones, $searchtime;
- global $title, $rating, $desc, $contype, $lastmod, $docsize, $ndoc;
- global $keyw, $text, $category;
- global $crc, $Randoms, $rec_id, $DEBUG;
- global $lang_url_translation, $phpver;
-
-
- $str=$templates["$t"][$o];
- if ($str == '') $str=$templates["$t"][0];
-
- $str=ereg_replace('\$f', "$first_doc", $str);
- $str=ereg_replace('\$l', "$last_doc", $str);
- $str=ereg_replace('\$t', "$found", $str);
- $str=ereg_replace('\$A', $self, $str);
-
- $str=ereg_replace('\$Q', HtmlSpecialChars(StripSlashes($query_orig)), $str);
- $str=ereg_replace('\$q', urlencode($query_orig), $str);
- $str=eregi_replace('\$UE', $ue, $str);
-
- $str=ereg_replace('\$E', $error, $str);
- $str=ereg_replace('\$W', $wordinfo, $str);
-
- $str=ereg_replace('\$V', $nav, $str);
-
- if ($lang_url_translation == 'yes') {
- $nolangurl = ereg_replace("\.[a-z]{2}\.[a-z]{2,4}$", "", $url);
- $str=ereg_replace('\$DU', $nolangurl, $str);
- } else {
- $str=ereg_replace('\$DU', $url, $str);
- }
-
- $str=ereg_replace('\$DT', $title, $str);
- $str=ereg_replace('\$DR', "$rating", $str);
- $str=ereg_replace('\$DX', $text, $str);
- $str=ereg_replace('\$DE', ($desc != '')?$desc:$text, $str);
- $str=ereg_replace('\$DC', $contype, $str);
- $str=ereg_replace('\$DM', $lastmod, $str);
- $str=ereg_replace('\$DS', "$docsize", $str);
- $str=ereg_replace('\$DN', "$ndoc", $str);
- $str=ereg_replace('\$DD', $desc, $str);
- $str=ereg_replace('\$DK', $keyw, $str);
- $str=ereg_replace('\$SearchTime', "$searchtime", $str);
-
- if ($phpver >= 40006) {
- if (ereg('\$CP',$str)) {
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $str=ereg_replace('\$CP', $temp_cp, $str);
- } else $str=ereg_replace('\$CP', '', $str);
- }
-
- if (ereg('\$CS',$str)) {
- if ($temp_cp_arr=Udm_Cat_List($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= "<a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a><br>";
- }
- $str=ereg_replace('\$CS', $temp_cp, $str);
- } else $str=ereg_replace('\$CS', '', $str);
- }
-
- if (ereg('\$DY',$str)) {
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$category)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $str=ereg_replace('\$DY', $temp_cp, $str);
- } else $str=ereg_replace('\$DY', '', $str);
- }
- } else {
- $str=ereg_replace('\$CP', '', $str);
- $str=ereg_replace('\$CS', '', $str);
- $str=ereg_replace('\$DY', '', $str);
- }
-
- $sub=$str;
- while($sub=strstr($sub,'$r')){
- $sub=substr($sub,2);
- $pos=0;
- $num='';
-
- while(($sub[$pos]>='0')&&($sub[$pos]<='9')){
- $num.=$sub[$pos++];
- }
-
- $str=ereg_replace('\$r'.$num, ''.$Randoms[$num], $str);
- }
-
-// if (strstr($str,'$CL')&&($t=='res')) {
-// if (strtolower($clones) == 'no') {
-// $str=ereg_replace('\$CL', '', $str);
-// } elseif ($crc<>'') {
-// }
- $str=ereg_replace('\$CL', $clon, $str);
-// }
-
- if($echo) echo $str; else return $str;
-}
-
-// -----------------------------------------------
-// make_nav($query_orig)
-// -----------------------------------------------
-function make_nav($query_orig){
- global $found,$np,$isnext,$ps,$tag,$ul,$self,$o,$m,$cat;
- global $dt, $dp, $dx, $dm, $dy, $dd, $db, $de, $lang, $wm, $wf;
- global $q_local,$ul_local,$t_local,$db_local,$de_local,$lang_local;
-
- if($np>0){
- $prevp=$np-1;
- $prev_href="$self?q=$q_local&np=$prevp&m=$m".
- ($ps==20?'':"&ps=$ps").
- ($tag==''?'':"&t=$t_local").
- ($ul==''?'':"&ul=$ul_local").
- ($wm==''?'':"&wm=$wm").
- ($wf==''?'':"&wf=$wf").
- (!$o?'':"&o=$o").
- ($dt=='back'?'':"&dt=$dt").
- (!$dp?'':"&dp=$dp").
- (!$dx?'':"&dx=$dx").
- ($dd=='01'?'':"&dd=$dd").
- (!$dm?'':"&dm=$dm").
- ($dy=='1970'?'':"&dy=$dy").
- ($db=='01/01/1970'?'':"&db=$db_local").
- ($de=='31/12/2020'?'':"&de=$de_local").
- ($cat==''?'':"&cat=$cat").
- ($lang==''?'':"&lang=$lang_local");
-
- $nav_left="<TD><A HREF=\"$prev_href\">Prev</A></TD>\n";
- } elseif ($np==0) {
- $nav_left="<TD><FONT COLOR=\"#707070\">Prev</FONT></TD>\n";
- }
-
- if($isnext==1) {
- $nextp=$np+1;
- $next_href="$self?q=$q_local&np=$nextp&m=$m".
- ($ps==20?'':"&ps=$ps").
- ($tag==''?'':"&t=$t_local").
- ($ul==''?'':"&ul=$ul_local").
- ($wm==''?'':"&wm=$wm").
- ($wf==''?'':"&wf=$wf").
- (!$o?'':"&o=$o").
- ($dt=='back'?'':"&dt=$dt").
- (!$dp?'':"&dp=$dp").
- (!$dx?'':"&dx=$dx").
- ($dd=='01'?'':"&dd=$dd").
- (!$dm?'':"&dm=$dm").
- ($dy=='1970'?'':"&dy=$dy").
- ($db=='01/01/1970'?'':"&db=$db_local").
- ($de=='31/12/2020'?'':"&de=$de_local").
- ($cat==''?'':"&cat=$cat").
- ($lang==''?'':"&lang=$lang_local");
-
- $nav_right="<TD><A HREF=\"$next_href\">Next</TD>\n";
- } else {
- $nav_right="<TD><FONT COLOR=\"#707070\">Next</FONT></TD>\n";
- }
-
- $nav_bar0='<TD>$NP</TD>';
- $nav_bar1='<TD><A HREF="$NH">$NP</A></TD>';
-
- $tp=ceil($found/$ps);
-
- $cp=$np+1;
-
- if ($cp>5) {
- $lp=$cp-5;
- } else {
- $lp=1;
- }
-
- $rp=$lp+10-1;
- if ($rp>$tp) {
- $rp=$tp;
- $lp=$rp-10+1;
- if ($lp<1) $lp=1;
- }
-
-
- if ($lp!=$rp) {
- for ($i=$lp; $i<=$rp;$i++) {
- $realp=$i-1;
-
- if ($i==$cp) {
- $nav_bar=$nav_bar.$nav_bar0;
- } else {
- $nav_bar=$nav_bar.$nav_bar1;
- }
-
- $href="$self?q=$q_local&np=$realp&m=$m".
- ($ps==20?'':"&ps=$ps").
- ($tag==''?'':"&t=$t_local").
- ($ul==''?'':"&ul=$ul_local").
- ($wm==''?'':"&wm=$wm").
- ($wf==''?'':"&wf=$wf").
- (!$o?'':"&o=$o").
- ($dt=='back'?'':"&dt=$dt").
- (!$dp?'':"&dp=$dp").
- (!$dx?'':"&dx=$dx").
- ($dd=='01'?'':"&dd=$dd").
- (!$dm?'':"&dm=$dm").
- ($dy=='1970'?'':"&dy=$dy").
- ($db=='01/01/1970'?'':"&db=$db_local").
- ($de=='31/12/2020'?'':"&de=$de_local").
- ($cat==''?'':"&cat=$cat").
- ($lang==''?'':"&lang=$lang_local");
-
- $nav_bar=ereg_replace('\$NP',"$i",$nav_bar);
- $nav_bar=ereg_replace('\$NH',"$href",$nav_bar);
- }
-
- $nav="<TABLE BORDER=0><TR>$nav_left $nav_bar $nav_right</TR></TABLE>\n";
- } elseif ($found) {
- $nav="<TABLE BORDER=0><TR>$nav_left $nav_right</TR></TABLE>\n";
- }
-
- return $nav;
-}
-
-// -----------------------------------------------
-// M A I N
-// -----------------------------------------------
-
- if (preg_match("/^(\d+)\.(\d+)\.(\d+)/",phpversion(),$param)) {
- $phpver=$param[1];
- if ($param[2] < 9) {
- $phpver .= "0$param[2]";
- } else {
- $phpver .= "$param[2]";
- }
- if ($param[3] < 9) {
- $phpver .= "0$param[3]";
- } else {
- $phpver .= "$param[3]";
- }
- } else {
- print "Cannot determine php version: <b>".phpversion()."</b>\n";
- exit;
- }
-
- $have_spell_flag=0;
-
- $udm_agent=Udm_Alloc_Agent($dbaddr,$dbmode);
-
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PAGE_SIZE,$ps);
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PAGE_NUM,$np);
-
- if ($phpver >= 40006) {
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $t_CP=$temp_cp;
- }
-
- if ($temp_cp_arr=Udm_Cat_List($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= "<a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a><br>";
- }
- $t_CS=$temp_cp;
- }
-
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$category)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $t_DY=$temp_cp;
- }
- }
-
- $trackquery=strtolower($trackquery);
- if ($trackquery == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_TRACK_MODE,UDM_TRACK_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_TRACK_MODE,UDM_TRACK_DISABLED);
- }
-
- $phrase=strtolower($phrase);
- if ($phrase == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PHRASE_MODE,UDM_PHRASE_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PHRASE_MODE,UDM_PHRASE_DISABLED);
- }
-
- $cache=strtolower($cache);
- if ($cache == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CACHE_MODE,UDM_CACHE_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CACHE_MODE,UDM_CACHE_DISABLED);
- }
-
- $ispelluseprefixes=strtolower($ispelluseprefixes);
- if ($ispelluseprefixes == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_ISPELL_PREFIXES,UDM_PREFIXES_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_ISPELL_PREFIXES,UDM_PREFIXES_DISABLED);
- }
-
- if (Udm_Api_Version() >= 30111) {
- $crosswords=strtolower($crosswords);
- if ($crosswords == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CROSS_WORDS,UDM_CROSS_WORDS_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CROSS_WORDS,UDM_CROSS_WORDS_DISABLED);
- }
- }
-
- if ($localcharset != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CHARSET,$localcharset);
- }
-
- if (Udm_Api_Version() >= 30200) {
- if ($localcharset == '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CHARSET,'utf-8');
- if ($browsercharset != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_BROWSER_CHARSET,$browsercharset);
- Header ("Content-Type: text/html; charset=$browsercharset");
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_BROWSER_CHARSET,'utf-8');
- Header ("Content-Type: text/html; charset=utf-8");
- }
- if ($hlbeg != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLBEG,$hlbeg);
- } else {
- $hlbeg='<font color="000088"><b>';
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLBEG,'<font color="000088"><b>');
- }
- if ($hlend != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLEND,$hlend);
- } else {
- $hlend='</b></font>';
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLEND,'</b></font>');
- }
- }
-
-
- for ($i=0; $i < count($stopwordtable_arr); $i++) {
- if ($stopwordtable_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_STOPTABLE,$stopwordtable_arr[$i]);
- }
- }
-
- for ($i=0; $i < count($stopwordfile_arr); $i++) {
- if ($stopwordfile_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_STOPFILE,$stopwordfile_arr[$i]);
- }
- }
-
- if (Udm_Api_Version() >= 30203) {
- for ($i=0; $i < count($synonym_arr); $i++) {
- if ($synonym_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SYNONYM,$synonym_arr[$i]);
- }
- }
-
- for ($i=0; $i < count($searchd_arr); $i++) {
- if ($searchd_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCHD,$searchd_arr[$i]);
- }
- }
-
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_QSTRING,$QUERY_STRING);
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_REMOTE_ADDR,$REMOTE_ADDR);
- }
-
- if ($m=='any') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_ANY);
- } elseif ($m=='all') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_ALL);
- } elseif ($m=='bool') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_BOOL);
- } elseif ($m=='phrase') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_PHRASE);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_ALL);
- }
-
- if ($wm=='wrd') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_WORD);
- } elseif ($wm=='beg') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_BEGIN);
- } elseif ($wm=='end') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_END);
- } elseif ($wm=='sub') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_SUBSTR);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_WORD);
- }
-
- if ($minwordlength >= 0) {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_MIN_WORD_LEN,$minwordlength);
- }
-
- if ($maxwordlength >= 0) {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_MAX_WORD_LEN,$maxwordlength);
- }
-
- if ($phpver >= 40007) {
- if ($vardir != '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_VARDIR,$vardir);
- if ($datadir != '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_VARDIR,$datadir);
- }
-
- if ($wf != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WEIGHT_FACTOR,$wf);
- }
-
- if ($ul != '') {
- $auto_wild=strtolower($auto_wild);
- if (($auto_wild == 'yes') ||
- ($auto_wild == '')) {
- if ((substr($ul,0,7) == 'http://') ||
- (substr($ul,0,8) == 'https://') ||
- (substr($ul,0,7) == 'news://') ||
- (substr($ul,0,6) == 'ftp://')) {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_URL,"$ul%");
- } else {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_URL,"%$ul%");
- }
- } else {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_URL,$ul);
- }
- }
-
- if ($tag != '') Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_TAG,$tag);
- if ($cat != '') Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_CAT,$cat);
- if ($lang != '')Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_LANG,$lang);
-
- if (($dt == 'back') && ($dp != '0')) {
- $recent_time=format_dp($dp);
- if ($recent_time != 0) {
- $dl=time()-$recent_time;
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,">$dl");
- }
- } elseif ($dt=='er') {
- $recent_time=mktime(0,0,0,($dm+1),$dd,$dy);
- if ($dx == -1) {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,"<$recent_time");
- } elseif ($dx == 1) {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,">$recent_time");
- }
- } elseif ($dt=='range') {
- $begin_time=format_userdate($db);
- if ($begin_time) Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,">$begin_time");
-
- $end_time=format_userdate($de);
- if ($end_time) Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,"<$end_time");
- }
-
-// if ($have_query_flag) $q=ParseQ($q);
-
-?>
-
-<HTML>
-<HEAD>
- <TITLE>mnoGoSearch: <? echo HtmlSpecialChars(StripSlashes($query_orig)); ?></TITLE>
-</HEAD>
-
-<body BGCOLOR="#FFFFFF" LINK="#0050A0" VLINK="#0050A0" ALINK="#0050A0">
-<center>
-
-<FORM METHOD=GET ACTION="<? echo $self; ?>">
-<table bgcolor=#eeeee0 border=0 width=100%>
-<tr><td>
-<BR>
-<INPUT TYPE="hidden" NAME="ps" VALUE="10">
-Search for: <INPUT TYPE="text" NAME="q" SIZE=50 VALUE="<? echo HtmlSpecialChars(StripSlashes($query_orig)); ?>">
-<INPUT TYPE="submit" VALUE="Search!"><BR>
-
-Results per page:
-<SELECT NAME="ps">
-<OPTION VALUE="10" <? if ($ps==10) echo 'SELECTED';?>>10
-<OPTION VALUE="20" <? if ($ps==20) echo 'SELECTED';?>>20
-<OPTION VALUE="50" <? if ($ps==50) echo 'SELECTED';?>>50
-</SELECT>
-
-Match:
-<SELECT NAME="m">
-<OPTION VALUE="all" <? if ($m=='all') echo 'SELECTED';?>>All
-<OPTION VALUE="any" <? if ($m=='any') echo 'SELECTED';?>>Any
-<OPTION VALUE="bool" <? if ($m=='bool') echo 'SELECTED';?>>Boolean
-<OPTION VALUE="phrase" <? if ($m=='phrase') echo 'SELECTED';?>>Full phrase
-</SELECT>
-
-
-Search for:
-<SELECT NAME="wm">
-<OPTION VALUE="wrd" <? if ($wm=='wrd') echo 'SELECTED';?>>Whole word
-<OPTION VALUE="beg" <? if ($wm=='beg') echo 'SELECTED';?>>Beginning
-<OPTION VALUE="end" <? if ($wm=='end') echo 'SELECTED';?>>Ending
-<OPTION VALUE="sub" <? if ($wm=='sub') echo 'SELECTED';?>>Substring
-</SELECT>
-
-<br>
-
-Search through:
-<SELECT NAME="ul">
-<OPTION VALUE="" <? if ($ul=='') echo 'SELECTED';?>>Entire site
-<OPTION VALUE="/docs/" <? if ($ul=='/docs/') echo 'SELECTED';?>>Docs
-<OPTION VALUE="/files/" <? if ($ul=='/files') echo 'SELECTED';?>>Files
-<OPTION VALUE="/servers/" <? if ($ul=='/servers/') echo 'SELECTED';?>>Servers
-</SELECT>
-
-in:
-<SELECT NAME="wf">
-<OPTION VALUE="222211" <? if ($wf=='222211') echo 'SELECTED';?>>all sections
-<OPTION VALUE="220000" <? if ($wf=='220000') echo 'SELECTED';?>>Description
-<OPTION VALUE="202000" <? if ($wf=='202000') echo 'SELECTED';?>>Keywords
-<OPTION VALUE="200200" <? if ($wf=='200200') echo 'SELECTED';?>>Title
-<OPTION VALUE="200010" <? if ($wf=='200010') echo 'SELECTED';?>>Body
-</SELECT>
-
-Language:
-<SELECT NAME="lang">
-<OPTION VALUE="" <? if ($lang=='222211') echo 'SELECTED';?>>Any
-<OPTION VALUE="en" <? if ($lang=='en') echo 'SELECTED';?>>English
-<OPTION VALUE="ru" <? if ($lang=='ru') echo 'SELECTED';?>>Russian
-</SELECT>
-
-Restrict search:
-<SELECT NAME="t">
-<OPTION VALUE="" <? if ($t=='') echo 'SELECTED';?>>All sites
-<OPTION VALUE="AA" <? if ($t=='AA') echo 'SELECTED';?>>Sport
-<OPTION VALUE="BB" <? if ($t=='BB') echo 'SELECTED';?>>Shopping
-<OPTION VALUE="CC" <? if ($t=='CC') echo 'SELECTED';?>>Internet
-</SELECT>
-
-</td></tr>
-
-<!-- 'search with time limits' options -->
-<TR><TD>
-<TABLE CELLPADDING=2 CELLSPACING=0 BORDER=0>
-<CAPTION>
-Limit results to pages published within a specified period of time.<BR>
-<FONT SIZE=-1><I>(Please select only one option)</I></FONT>
-</CAPTION>
-<TR>
-<TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="back" <? if ($dt=='back') echo 'checked';?>></TD>
-<TD><SELECT NAME="dp">
-<OPTION VALUE="0" <? if ($dp=='0') echo 'SELECTED';?>>anytime
-<OPTION VALUE="10M" <? if ($dp=='10M') echo 'SELECTED';?>>in the last ten minutes
-<OPTION VALUE="1h" <? if ($dp=='1h') echo 'SELECTED';?>>in the last hour
-<OPTION VALUE="7d" <? if ($dp=='7d') echo 'SELECTED';?>>in the last week
-<OPTION VALUE="14d" <? if ($dp=='14d') echo 'SELECTED';?>>in the last 2 weeks
-<OPTION VALUE="1m" <? if ($dp=='1m') echo 'SELECTED';?>>in the last month
-</SELECT>
-</TD>
-</TR>
-<TR>
-<TD VALIGN=center><INPUT type=radio NAME="dt" VALUE="er" <? if ($dt=='er') echo 'checked';?>>
-</TD>
-<TD><SELECT NAME="dx">
-<OPTION VALUE="1" <? if ($dx=='1') echo 'SELECTED';?>>After
-<OPTION VALUE="-1" <? if ($dx=='-1') echo 'SELECTED';?>>Before
-</SELECT>
-
-or on
-
-<SELECT NAME="dm">
-<OPTION VALUE="0" <? if ($dm=='0') echo 'SELECTED';?>>January
-<OPTION VALUE="1" <? if ($dm=='1') echo 'SELECTED';?>>February
-<OPTION VALUE="2" <? if ($dm=='2') echo 'SELECTED';?>>March
-<OPTION VALUE="3" <? if ($dm=='3') echo 'SELECTED';?>>April
-<OPTION VALUE="4" <? if ($dm=='4') echo 'SELECTED';?>>May
-<OPTION VALUE="5" <? if ($dm=='5') echo 'SELECTED';?>>June
-<OPTION VALUE="6" <? if ($dm=='6') echo 'SELECTED';?>>July
-<OPTION VALUE="7" <? if ($dm=='7') echo 'SELECTED';?>>August
-<OPTION VALUE="8" <? if ($dm=='8') echo 'SELECTED';?>>September
-<OPTION VALUE="9" <? if ($dm=='9') echo 'SELECTED';?>>October
-<OPTION VALUE="10" <? if ($dm=='10') echo 'SELECTED';?>>November
-<OPTION VALUE="11" <? if ($dm=='11') echo 'SELECTED';?>>December
-</SELECT>
-<INPUT TYPE=text NAME="dd" VALUE="<? echo $dd; ?>" SIZE=2 maxlength=2>
-,
-<SELECT NAME="dy" >
-<OPTION VALUE="1999" <? if ($dy=='1999') echo 'SELECTED';?>>1999
-<OPTION VALUE="2000" <? if ($dy=='2000') echo 'SELECTED';?>>2000
-<OPTION VALUE="2001" <? if ($dy=='2001') echo 'SELECTED';?>>2001
-</SELECT>
-</TD>
-</TR>
-<TR>
-<TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="range" <? if ($dt=='range') echo 'checked';?>>
-</TD>
-<TD>
-Between
-<INPUT TYPE=text NAME="db" VALUE="<? echo $db; ?>" SIZE=11 MAXLENGTH=11>
-and
-<INPUT TYPE=text NAME="de" VALUE="<? echo $de; ?>" SIZE=11 MAXLENGTH=11>
-</TD>
-</TR>
-</TABLE>
-
-</TD></TR>
-<!-- end of stl options -->
-
-<!-- categories stuff -->
-<tr><td><? echo $t_CP; ?></td></tr>
-<tr><td><? echo $t_CS; ?></td></tr>
-<input type=hidden name=cat value="<? echo $cat; ?>">
-<!-- categories stuff end -->
-
-</table>
-</form>
-</center>
-
-
-<?
-
- $ispellmode=strtolower($ispellmode);
- if ($ispellmode == 'db') {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_DB,'','',1)) {
- print_error_local(Udm_Error($udm_agent));
- } else $have_spell_flag=1;
- } elseif ($ispellmode == 'server') {
- if (Udm_Api_Version() >= 30112) {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_SERVER,$spell_host,'',1)) {
- print_error_local("Error loading ispell data from server $spell_host");
- } else $have_spell_flag=1;
- }
- } elseif ($ispellmode == 'text') {
- reset($affix_file);
- while (list($t_lang,$file)=each($affix_file)) {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_AFFIX,$t_lang,$file,0)) {
- print_error_local("Error loading ispell data from file");
- } else $have_spell_flag=1;
-
- $temp=$spell_file[$t_lang];
- for ($i=0; $i<count($temp); $i++) {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_SPELL,$t_lang,$temp[$i],1)) {
- print_error_local("Error loading ispell data from file");
- } else $have_spell_flag=1;
- }
- }
- }
-
-if (! $have_query_flag) {
- print_bottom();
- return;
-} elseif ($have_query_flag && ($q=='')) {
- print ("<FONT COLOR=red>You should give at least one word to search for.</FONT>\n");
- print_bottom();
- return;
-}
-
-$res=Udm_Find($udm_agent,$q);
-
-if(($errno=Udm_Errno($udm_agent))>0){
- print_error_local(Udm_Error($udm_agent));
-} else {
- $found=Udm_Get_Res_Param($res,UDM_PARAM_FOUND);
- $rows=Udm_Get_Res_Param($res,UDM_PARAM_NUM_ROWS);
- $wordinfo=Udm_Get_Res_Param($res,UDM_PARAM_WORDINFO);
- $searchtime=Udm_Get_Res_Param($res,UDM_PARAM_SEARCHTIME);
- $first_doc=Udm_Get_Res_Param($res,UDM_PARAM_FIRST_DOC);
- $last_doc=Udm_Get_Res_Param($res,UDM_PARAM_LAST_DOC);
-
- if (!$found) {
- print ("Search Time: $searchtime<br>Search results:\n");
- print ("<small>$wordinfo</small><HR><CENTER>Sorry, but search returned no results.<P>\n");
- print ("<I>Try to produce less restrictive search query.</I></CENTER>\n");
-
- print_bottom();
- return;
- }
-
- $from=IntVal($np)*IntVal($ps);
- $to=IntVal($np+1)*IntVal($ps);
-
- if($to>$found) $to=$found;
- if (($from+$ps)<$found) $isnext=1;
- $nav=make_nav($query_orig);
-
- print("Search Time: $searchtime<br>Search results: <small>$wordinfo</small><HR>\n");
- print("Displaying documents $first_doc-$last_doc of total <B>$found</B> found.\n");
-
- $stored_link=-1;
- if ((Udm_Api_Version() >= 30203) && ($storedaddr != '')) {
- $stored_link=Udm_Open_Stored($udm_agent,$storedaddr);
- }
-
- for($i=0;$i<$rows;$i++){
- $ndoc=Udm_Get_Res_Field($res,$i,UDM_FIELD_ORDER);
- $rating=Udm_Get_Res_Field($res,$i,UDM_FIELD_RATING);
- $url=Udm_Get_Res_Field($res,$i,UDM_FIELD_URL);
- $contype=Udm_Get_Res_Field($res,$i,UDM_FIELD_CONTENT);
- $docsize=Udm_Get_Res_Field($res,$i,UDM_FIELD_SIZE);
- $lastmod=format_lastmod(Udm_Get_Res_Field($res,$i,UDM_FIELD_MODIFIED));
-
- $title=Udm_Get_Res_Field($res,$i,UDM_FIELD_TITLE);
- $title=($title) ? htmlspecialChars($title):'No title';
-
- $title=ParseDocText($title);
- $text=ParseDocText(htmlspecialChars(Udm_Get_Res_Field($res,$i,UDM_FIELD_TEXT)));
- $keyw=ParseDocText(htmlspecialChars(Udm_Get_Res_Field($res,$i,UDM_FIELD_KEYWORDS)));
- $desc=ParseDocText(htmlspecialChars(Udm_Get_Res_Field($res,$i,UDM_FIELD_DESC)));
-
- $crc=Udm_Get_Res_Field($res,$i,UDM_FIELD_CRC);
- $rec_id=Udm_Get_Res_Field($res,$i,UDM_FIELD_URLID);
-
- if (Udm_Api_Version() >= 30203) {
- $doclang=Udm_Get_Res_Field($res,$i,UDM_FIELD_LANG);
- $doccharset=Udm_Get_Res_Field($res,$i,UDM_FIELD_CHARSET);
- }
-
- if ($phpver >= 40006) {
- $category=Udm_Get_Res_Field($res,$i,UDM_FIELD_CATEGORY);
- } else {
- $category='';
- }
-
- print ("<DL><DT><b>$ndoc.</b><a href=\"$url\" TARGET=\"_blank\"><b>$title</b></a>\n");
- print ("[<b>$rating</b>]<DD>\n");
- print (($desc != '')?$desc:$text."...<BR>$t_DY<UL><li>\n");
- print ("<A HREF=\"$url\" TARGET=\"_blank\">$url</A>\n");
- print ("($contype) $lastmod, $docsize bytes</UL></DL>\n");
-
- if (Udm_Api_Version() >= 30203) {
- if ((($stored_link>0) && (Udm_Check_Stored($udm_agent,$stored_link,Udm_CRC32($udm_agent,$url)))) ||
- ($stored_link==-1)) {
- $storedstr="$storedocurl?rec_id=".Udm_CRC32($udm_agent,$url).
- "&DM=".urlencode($lastmod).
- "&DS=$docsize".
- "&L=$doclang".
- "&CS=$doccharset".
- "&DU=".urlencode($url).
- "&q=".urlencode($query_orig);
- print ("<DD><a href=\"$storedstr\">Cached copy</a>\n");
- }
- }
- }
-
- if ((Udm_Api_Version() >= 30203) &&
- ($stored_link>0)) {
- Udm_Close_Stored($udm_agent, $stored_link);
- }
-
- print("<HR><CENTER> $nav </CENTER>\n");
- print_bottom();
-
- // Free result
- Udm_Free_Res($res);
-}
-
- if ($have_spell_flag) Udm_Free_Ispell_Data($udm_agent);
- Udm_Free_Agent($udm_agent);
-?>
diff --git a/ext/mnogosearch/php_mnogo.c b/ext/mnogosearch/php_mnogo.c
deleted file mode 100644
index 3b0da1055c..0000000000
--- a/ext/mnogosearch/php_mnogo.c
+++ /dev/null
@@ -1,1688 +0,0 @@
-/* $Source$ */
-/* $Id$ */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: |
- | Initial version by Alex Barkov <bar@izhcom.ru> |
- | and Ramil Kalimullin <ram@izhcom.ru> |
- | Further development by Sergey Kartashoff <gluke@mail.ru> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_mnogo.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-
-#ifdef HAVE_MNOGOSEARCH
-
-#define UDMSTRSIZ 1024*5
-
-#define UDM_FIELD_URLID 1
-#define UDM_FIELD_URL 2
-#define UDM_FIELD_CONTENT 3
-#define UDM_FIELD_TITLE 4
-#define UDM_FIELD_KEYWORDS 5
-#define UDM_FIELD_DESC 6
-#define UDM_FIELD_TEXT 7
-#define UDM_FIELD_SIZE 8
-#define UDM_FIELD_RATING 9
-#define UDM_FIELD_MODIFIED 10
-#define UDM_FIELD_ORDER 11
-#define UDM_FIELD_CRC 12
-#define UDM_FIELD_CATEGORY 13
-#define UDM_FIELD_LANG 14
-#define UDM_FIELD_CHARSET 15
-
-/* udm_set_agent_param constants */
-#define UDM_PARAM_PAGE_SIZE 1
-#define UDM_PARAM_PAGE_NUM 2
-#define UDM_PARAM_SEARCH_MODE 3
-#define UDM_PARAM_CACHE_MODE 4
-#define UDM_PARAM_TRACK_MODE 5
-#define UDM_PARAM_CHARSET 6
-#define UDM_PARAM_STOPTABLE 7
-#define UDM_PARAM_STOPFILE 8
-#define UDM_PARAM_WEIGHT_FACTOR 9
-#define UDM_PARAM_WORD_MATCH 10
-#define UDM_PARAM_PHRASE_MODE 11
-#define UDM_PARAM_MIN_WORD_LEN 12
-#define UDM_PARAM_MAX_WORD_LEN 13
-#define UDM_PARAM_ISPELL_PREFIXES 14
-#define UDM_PARAM_CROSS_WORDS 15
-#define UDM_PARAM_VARDIR 16
-#define UDM_PARAM_LOCAL_CHARSET 17
-#define UDM_PARAM_BROWSER_CHARSET 18
-#define UDM_PARAM_HLBEG 19
-#define UDM_PARAM_HLEND 20
-#define UDM_PARAM_SYNONYM 21
-#define UDM_PARAM_SEARCHD 22
-#define UDM_PARAM_QSTRING 23
-#define UDM_PARAM_REMOTE_ADDR 24
-
-/* udm_add_search_limit constants */
-#define UDM_LIMIT_URL 1
-#define UDM_LIMIT_TAG 2
-#define UDM_LIMIT_LANG 3
-#define UDM_LIMIT_CAT 4
-#define UDM_LIMIT_DATE 5
-
-/* word match type */
-#define UDM_MATCH_WORD 0
-#define UDM_MATCH_BEGIN 1
-#define UDM_MATCH_SUBSTR 2
-#define UDM_MATCH_END 3
-
-/* track modes */
-#define UDM_TRACK_ENABLED 1
-#define UDM_TRACK_DISABLED 0
-
-/* cache modes */
-#define UDM_CACHE_ENABLED 1
-#define UDM_CACHE_DISABLED 0
-
-/* phrase modes */
-#define UDM_PHRASE_ENABLED 1
-#define UDM_PHRASE_DISABLED 0
-
-/* prefix modes */
-#define UDM_PREFIXES_ENABLED 1
-#define UDM_PREFIXES_DISABLED 0
-
-/* crosswords modes */
-#define UDM_CROSS_WORDS_ENABLED 1
-#define UDM_CROSS_WORDS_DISABLED 0
-
-/* udm_get_res_param constants */
-#define UDM_PARAM_NUM_ROWS 256
-#define UDM_PARAM_FOUND 257
-#define UDM_PARAM_WORDINFO 258
-#define UDM_PARAM_SEARCHTIME 259
-#define UDM_PARAM_FIRST_DOC 260
-#define UDM_PARAM_LAST_DOC 261
-
-/* udm_load_ispell_data constants */
-#define UDM_ISPELL_TYPE_AFFIX 1
-#define UDM_ISPELL_TYPE_SPELL 2
-#define UDM_ISPELL_TYPE_DB 3
-#define UDM_ISPELL_TYPE_SERVER 4
-
-/* True globals, no need for thread safety */
-static int le_link,le_res;
-
-#include <udm_config.h>
-#include <udmsearch.h>
-
-/* {{{ mnogosearch_functions[]
- */
-function_entry mnogosearch_functions[] = {
- PHP_FE(udm_api_version, NULL)
-#if UDM_VERSION_ID >= 30200
- PHP_FE(udm_check_charset, NULL)
-#endif
-
-#if UDM_VERSION_ID >= 30203
- PHP_FE(udm_crc32, NULL)
- PHP_FE(udm_open_stored, NULL)
- PHP_FE(udm_check_stored,NULL)
- PHP_FE(udm_close_stored,NULL)
-#endif
-
- PHP_FE(udm_alloc_agent, NULL)
- PHP_FE(udm_set_agent_param, NULL)
-
- PHP_FE(udm_load_ispell_data, NULL)
- PHP_FE(udm_free_ispell_data, NULL)
-
- PHP_FE(udm_add_search_limit, NULL)
- PHP_FE(udm_clear_search_limits, NULL)
-
- PHP_FE(udm_errno, NULL)
- PHP_FE(udm_error, NULL)
-
- PHP_FE(udm_find, NULL)
- PHP_FE(udm_get_res_param, NULL)
- PHP_FE(udm_get_res_field, NULL)
-
- PHP_FE(udm_cat_list, NULL)
- PHP_FE(udm_cat_path, NULL)
-
- PHP_FE(udm_free_res, NULL)
- PHP_FE(udm_free_agent, NULL)
-
-#if UDM_VERSION_ID > 30110
- PHP_FE(udm_get_doc_count, NULL)
-#endif
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry mnogosearch_module_entry = {
- STANDARD_MODULE_HEADER,
- "mnogosearch",
- mnogosearch_functions,
- PHP_MINIT(mnogosearch),
- PHP_MSHUTDOWN(mnogosearch),
- PHP_RINIT(mnogosearch),
- NULL,
- PHP_MINFO(mnogosearch),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_MNOGOSEARCH
-ZEND_GET_MODULE(mnogosearch)
-#endif
-
-static void _free_udm_agent(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- UDM_AGENT * Agent = (UDM_AGENT *)rsrc->ptr;
- UdmFreeEnv(Agent->Conf);
- UdmFreeAgent(Agent);
-}
-
-static void _free_udm_res(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- UDM_RESULT * Res = (UDM_RESULT *)rsrc->ptr;
- UdmFreeResult(Res);
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-DLEXPORT PHP_MINIT_FUNCTION(mnogosearch)
-{
- UdmInit();
- le_link = zend_register_list_destructors_ex(_free_udm_agent,NULL,"mnogosearch agent",module_number);
- le_res = zend_register_list_destructors_ex(_free_udm_res,NULL,"mnogosearch result",module_number);
-
- REGISTER_LONG_CONSTANT("UDM_FIELD_URLID", UDM_FIELD_URLID,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_URL", UDM_FIELD_URL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CONTENT", UDM_FIELD_CONTENT,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_TITLE", UDM_FIELD_TITLE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_KEYWORDS", UDM_FIELD_KEYWORDS,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_DESC", UDM_FIELD_DESC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_DESCRIPTION", UDM_FIELD_DESC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_TEXT", UDM_FIELD_TEXT,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_SIZE", UDM_FIELD_SIZE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_RATING", UDM_FIELD_RATING,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_SCORE", UDM_FIELD_RATING,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_MODIFIED", UDM_FIELD_MODIFIED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_ORDER", UDM_FIELD_ORDER,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CRC", UDM_FIELD_CRC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CATEGORY", UDM_FIELD_CATEGORY,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_LANG", UDM_FIELD_LANG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CHARSET", UDM_FIELD_CHARSET,CONST_CS | CONST_PERSISTENT);
-
- /* udm_set_agent_param constants */
- REGISTER_LONG_CONSTANT("UDM_PARAM_PAGE_SIZE", UDM_PARAM_PAGE_SIZE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PAGE_NUM", UDM_PARAM_PAGE_NUM,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCH_MODE", UDM_PARAM_SEARCH_MODE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_CACHE_MODE", UDM_PARAM_CACHE_MODE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_TRACK_MODE", UDM_PARAM_TRACK_MODE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PHRASE_MODE", UDM_PARAM_PHRASE_MODE,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_CHARSET", UDM_PARAM_CHARSET,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_LOCAL_CHARSET",UDM_PARAM_LOCAL_CHARSET,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_BROWSER_CHARSET",UDM_PARAM_BROWSER_CHARSET,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOPTABLE", UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOP_TABLE", UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOPFILE", UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOP_FILE", UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_WEIGHT_FACTOR",UDM_PARAM_WEIGHT_FACTOR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORD_MATCH", UDM_PARAM_WORD_MATCH,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_MAX_WORD_LEN",UDM_PARAM_MAX_WORD_LEN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_MAX_WORDLEN", UDM_PARAM_MAX_WORD_LEN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_MIN_WORD_LEN",UDM_PARAM_MIN_WORD_LEN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_MIN_WORDLEN", UDM_PARAM_MIN_WORD_LEN,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_PREFIXES",UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_PREFIX",UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PREFIXES", UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PREFIX", UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_CROSS_WORDS", UDM_PARAM_CROSS_WORDS,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_CROSSWORDS", UDM_PARAM_CROSS_WORDS,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_VARDIR", UDM_PARAM_VARDIR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_DATADIR", UDM_PARAM_VARDIR,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_HLBEG", UDM_PARAM_HLBEG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_HLEND", UDM_PARAM_HLEND,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_SYNONYM", UDM_PARAM_SYNONYM,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCHD", UDM_PARAM_SEARCHD,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_QSTRING", UDM_PARAM_QSTRING,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_REMOTE_ADDR", UDM_PARAM_REMOTE_ADDR,CONST_CS | CONST_PERSISTENT);
-
- /* udm_add_search_limit constants */
- REGISTER_LONG_CONSTANT("UDM_LIMIT_CAT", UDM_LIMIT_CAT,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_URL", UDM_LIMIT_URL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_TAG", UDM_LIMIT_TAG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_LANG", UDM_LIMIT_LANG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_DATE", UDM_LIMIT_DATE,CONST_CS | CONST_PERSISTENT);
-
- /* udm_get_res_param constants */
- REGISTER_LONG_CONSTANT("UDM_PARAM_FOUND", UDM_PARAM_FOUND,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_NUM_ROWS", UDM_PARAM_NUM_ROWS,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORDINFO", UDM_PARAM_WORDINFO,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORD_INFO", UDM_PARAM_WORDINFO,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCHTIME", UDM_PARAM_SEARCHTIME,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCH_TIME", UDM_PARAM_SEARCHTIME,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_FIRST_DOC", UDM_PARAM_FIRST_DOC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_LAST_DOC", UDM_PARAM_LAST_DOC,CONST_CS | CONST_PERSISTENT);
-
- /* search modes */
- REGISTER_LONG_CONSTANT("UDM_MODE_ALL", UDM_MODE_ALL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MODE_ANY", UDM_MODE_ANY,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MODE_BOOL", UDM_MODE_BOOL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MODE_PHRASE", UDM_MODE_PHRASE,CONST_CS | CONST_PERSISTENT);
-
- /* search cache params */
- REGISTER_LONG_CONSTANT("UDM_CACHE_ENABLED", UDM_CACHE_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CACHE_DISABLED", UDM_CACHE_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* track mode params */
- REGISTER_LONG_CONSTANT("UDM_TRACK_ENABLED", UDM_TRACK_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_TRACK_DISABLED", UDM_TRACK_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* phrase mode params */
- REGISTER_LONG_CONSTANT("UDM_PHRASE_ENABLED", UDM_PHRASE_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PHRASE_DISABLED", UDM_PHRASE_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* crosswords mode params */
- REGISTER_LONG_CONSTANT("UDM_CROSS_WORDS_ENABLED",UDM_CROSS_WORDS_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CROSSWORDS_ENABLED",UDM_CROSS_WORDS_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CROSS_WORDS_DISABLED",UDM_CROSS_WORDS_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CROSSWORDS_DISABLED",UDM_CROSS_WORDS_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* prefixes mode params */
- REGISTER_LONG_CONSTANT("UDM_PREFIXES_ENABLED", UDM_PREFIXES_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PREFIX_ENABLED", UDM_PREFIXES_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIXES_ENABLED",UDM_PREFIXES_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIX_ENABLED",UDM_PREFIXES_ENABLED,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PREFIXES_DISABLED", UDM_PREFIXES_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PREFIX_DISABLED", UDM_PREFIXES_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIXES_DISABLED",UDM_PREFIXES_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIX_DISABLED",UDM_PREFIXES_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* ispell type params */
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_AFFIX", UDM_ISPELL_TYPE_AFFIX,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_SPELL", UDM_ISPELL_TYPE_SPELL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_DB", UDM_ISPELL_TYPE_DB,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_SERVER",UDM_ISPELL_TYPE_SERVER,CONST_CS | CONST_PERSISTENT);
-
-#if UDM_VERSION_ID < 30200
- /* word match mode params */
- REGISTER_LONG_CONSTANT("UDM_MATCH_WORD", UDM_MATCH_WORD,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MATCH_BEGIN", UDM_MATCH_BEGIN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MATCH_SUBSTR", UDM_MATCH_SUBSTR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MATCH_END", UDM_MATCH_END,CONST_CS | CONST_PERSISTENT);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-DLEXPORT PHP_MSHUTDOWN_FUNCTION(mnogosearch)
-{
- return SUCCESS;
-}
-
-
-DLEXPORT PHP_RINIT_FUNCTION(mnogosearch)
-{
- return SUCCESS;
-}
-
-
-DLEXPORT PHP_MINFO_FUNCTION(mnogosearch)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_row(2, "mnoGoSearch Support", "enabled" );
-
- sprintf(buf,"%d", UDM_VERSION_ID);
- php_info_print_table_row(2, "mnoGoSearch library version", buf );
- php_info_print_table_end();
-}
-
-ssize_t UdmRecvAll(int s, void *buf, size_t len, int flags) {
- size_t received = 0, r;
- char *b = buf;
- while ( (received < len) && ((r = recv(s, &b[received], len - received, flags)) >= 0 ) ) {
- received += r;
- }
- return received;
-}
-
-/* {{{ proto int udm_alloc_agent(string dbaddr [, string dbmode])
- Allocate mnoGoSearch session */
-DLEXPORT PHP_FUNCTION(udm_alloc_agent)
-{
- switch(ZEND_NUM_ARGS()){
-
- case 1: {
- pval **yydbaddr;
- char *dbaddr;
- UDM_ENV * Env;
- UDM_AGENT * Agent;
-
- if(zend_get_parameters_ex(1,&yydbaddr)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yydbaddr);
- dbaddr = Z_STRVAL_PP(yydbaddr);
-
- Env=UdmAllocEnv();
-
-#if UDM_VERSION_ID >= 30200
- Env->vars=UdmAllocVarList();
- Env->DBAddr=strdup(dbaddr);
- UdmEnvSetDBMode(Env,"single");
-#else
- UdmEnvSetDBAddr(Env,dbaddr);
-#endif
-
- Agent=UdmAllocAgent(Env,0,UDM_OPEN_MODE_READ);
-
- ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);
- }
- break;
-
- case 2: {
- pval **yydbaddr;
- pval **yydbmode;
- char *dbaddr;
- char *dbmode;
- UDM_ENV * Env;
- UDM_AGENT * Agent;
-
- if(zend_get_parameters_ex(2,&yydbaddr,&yydbmode)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yydbaddr);
- convert_to_string_ex(yydbmode);
- dbaddr = Z_STRVAL_PP(yydbaddr);
- dbmode = Z_STRVAL_PP(yydbmode);
-
- Env=UdmAllocEnv();
-#if UDM_VERSION_ID >= 30200
- Env->vars=UdmAllocVarList();
- Env->DBAddr=strdup(dbaddr);
- UdmEnvSetDBMode(Env,dbmode);
-#else
- UdmEnvSetDBAddr(Env,dbaddr);
- UdmEnvSetDBMode(Env,dbmode);
-#endif
-
- Agent=UdmAllocAgent(Env,0,UDM_OPEN_MODE_READ);
-
- ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int udm_set_agent_param(int agent, int var, string val)
- Set mnoGoSearch agent session parameters */
-DLEXPORT PHP_FUNCTION(udm_set_agent_param)
-{
- pval **yyagent, **yyvar, **yyval;
- char *val;
- int var;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 3:
- if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_string_ex(yyval);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- val = Z_STRVAL_PP(yyval);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- switch(var){
- case UDM_PARAM_PAGE_SIZE:
- Agent->page_size=atoi(val);
- if(Agent->page_size<1)Agent->page_size=20;
-
- break;
-
- case UDM_PARAM_PAGE_NUM:
- Agent->page_number=atoi(val);
- if(Agent->page_number<0)Agent->page_number=0;
-
- break;
-
- case UDM_PARAM_SEARCH_MODE:
- switch (atoi(val)){
- case UDM_MODE_ALL:
- Agent->search_mode=UDM_MODE_ALL;
- break;
-
- case UDM_MODE_ANY:
- Agent->search_mode=UDM_MODE_ANY;
- break;
-
- case UDM_MODE_BOOL:
- Agent->search_mode=UDM_MODE_BOOL;
- break;
-
- case UDM_MODE_PHRASE:
- Agent->search_mode=UDM_MODE_PHRASE;
- break;
-
- default:
- Agent->search_mode=UDM_MODE_ALL;
-
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown search mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_WORD_MATCH:
- switch (atoi(val)){
- case UDM_MATCH_WORD:
- Agent->word_match=UDM_MATCH_WORD;
- break;
-
- case UDM_MATCH_BEGIN:
- Agent->word_match=UDM_MATCH_BEGIN;
- break;
-
- case UDM_MATCH_END:
- Agent->word_match=UDM_MATCH_END;
- break;
-
- case UDM_MATCH_SUBSTR:
- Agent->word_match=UDM_MATCH_SUBSTR;
- break;
-
- default:
- Agent->word_match=UDM_MATCH_WORD;
-
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown word match mode");
- RETURN_FALSE;
- break;
- }
- break;
- case UDM_PARAM_CACHE_MODE:
- switch (atoi(val)){
- case UDM_CACHE_ENABLED:
-#if UDM_VERSION_ID < 30200
- Agent->cache_mode=UDM_CACHE_ENABLED;
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"Cache","yes",UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_CACHE_DISABLED:
-#if UDM_VERSION_ID < 30200
- Agent->cache_mode=UDM_CACHE_DISABLED;
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"Cache","no",UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- default:
-#if UDM_VERSION_ID < 30200
- Agent->cache_mode=UDM_CACHE_DISABLED;
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"Cache","no",UDM_VARSRC_GLOBAL);
-#endif
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown cache mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_TRACK_MODE:
- switch (atoi(val)){
- case UDM_TRACK_ENABLED:
-#if UDM_VERSION_ID < 30200
- Agent->track_mode|=UDM_TRACK_QUERIES;
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","yes",UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_TRACK_DISABLED:
-#if UDM_VERSION_ID < 30200
- Agent->track_mode &= ~(UDM_TRACK_QUERIES);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","no",UDM_VARSRC_GLOBAL);
-#endif
-
- break;
-
- default:
-#if UDM_VERSION_ID < 30200
- Agent->track_mode &= ~(UDM_TRACK_QUERIES);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","no",UDM_VARSRC_GLOBAL);
-#endif
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown track mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_PHRASE_MODE:
-#if UDM_VERSION_ID < 30200
- switch (atoi(val)){
- case UDM_PHRASE_ENABLED:
- Agent->Conf->use_phrases=UDM_PHRASE_ENABLED;
- break;
-
- case UDM_PHRASE_DISABLED:
- Agent->Conf->use_phrases=UDM_PHRASE_DISABLED;
- break;
-
- default:
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown phrase mode");
- RETURN_FALSE;
- break;
- }
-#endif
- break;
-
- case UDM_PARAM_ISPELL_PREFIXES:
-
- switch (atoi(val)){
- case UDM_PREFIXES_ENABLED:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode |= UDM_ISPELL_USE_PREFIXES;
-#else
- UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 1, UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_PREFIXES_DISABLED:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_USE_PREFIXES;
-#else
- UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 0, UDM_VARSRC_GLOBAL);
-#endif
- break;
-
-
- default:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode |= UDM_ISPELL_USE_PREFIXES;
-#else
- UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 1, UDM_VARSRC_GLOBAL);
-#endif
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown ispell prefixes mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_CHARSET:
- case UDM_PARAM_LOCAL_CHARSET:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->local_charset=UdmGetCharset(val);
- Agent->charset=Agent->Conf->local_charset;
-#else
- Agent->Conf->local_charset=strdup(val);
- UdmReplaceStrVar(Agent->Conf->vars,"LocalCharset",val,UDM_VARSRC_GLOBAL);
-#endif
-
- break;
-
-#if UDM_VERSION_ID >= 30200
- case UDM_PARAM_BROWSER_CHARSET:
- Agent->Conf->browser_charset=strdup(val);
- UdmReplaceStrVar(Agent->Conf->vars,"BrowserCharset",val,UDM_VARSRC_GLOBAL);
-
- break;
-
- case UDM_PARAM_HLBEG:
- UdmReplaceStrVar(Agent->Conf->vars,"HlBeg",val,UDM_VARSRC_GLOBAL);
-
- break;
-
- case UDM_PARAM_HLEND:
- UdmReplaceStrVar(Agent->Conf->vars,"HlBeg",val,UDM_VARSRC_GLOBAL);
-
- break;
-
- case UDM_PARAM_SYNONYM:
- if (UdmSynonymListLoad(Agent->Conf,val)) {
- php_error(E_WARNING,Agent->Conf->errstr);
- RETURN_FALSE;
- } else UdmSynonymListSort(&(Agent->Conf->SynList));
- break;
-
- case UDM_PARAM_SEARCHD:
- UdmSDCLientListAdd(&(Agent->Conf->sdcl),val);
- {
- size_t i;
- for(i=0;i<Agent->Conf->sdcl.nclients;i++){
- UdmSDCLientListAdd(&Agent->sdcl,Agent->Conf->sdcl.Clients[i].addr);
- }
- }
-
- break;
-
- case UDM_PARAM_QSTRING:
- UdmReplaceStrVar(Agent->Conf->vars,"QUERY_STRING",val,UDM_VARSRC_GLOBAL);
-
- break;
-
- case UDM_PARAM_REMOTE_ADDR:
- UdmReplaceStrVar(Agent->Conf->vars,"IP",val,UDM_VARSRC_GLOBAL);
-
- break;
-#endif
-
- case UDM_PARAM_STOPTABLE:
-#if UDM_VERSION_ID < 30200
- strcat(Agent->Conf->stop_tables," ");
- strcat(Agent->Conf->stop_tables,val);
-#endif
- break;
-
- case UDM_PARAM_STOPFILE:
- if (UdmFileLoadStopList(Agent->Conf,val)) {
- php_error(E_WARNING,Agent->Conf->errstr);
- RETURN_FALSE;
- }
- break;
-
- case UDM_PARAM_WEIGHT_FACTOR:
-#if UDM_VERSION_ID < 30200
- Agent->weight_factor=strdup(val);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"wf",val,UDM_VARSRC_GLOBAL);
- {
- size_t len;
-
- len=strlen(val);
- if((len>0)&&(len<256)){
- const char *sec;
- int sn;
-
- for(sn=0;sn<256;sn++){
- Agent->wf[sn]=0;
- }
-
- for(sec=val+len-1;sec>=val;sec--){
- Agent->wf[len-(sec-val)]=UdmHex2Int(*sec);
- }
- }
- }
-#endif
- break;
-
- case UDM_PARAM_MIN_WORD_LEN:
- Agent->Conf->min_word_len=atoi(val);
-
- break;
-
- case UDM_PARAM_MAX_WORD_LEN:
- Agent->Conf->max_word_len=atoi(val);
-
- break;
-
- case UDM_PARAM_CROSS_WORDS:
- switch (atoi(val)){
- case UDM_CROSS_WORDS_ENABLED:
- Agent->Conf->use_crossword=UDM_CROSS_WORDS_ENABLED;
- break;
-
- case UDM_CROSS_WORDS_DISABLED:
- Agent->Conf->use_crossword=UDM_CROSS_WORDS_DISABLED;
- break;
-
- default:
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown crosswords mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
-#if UDM_VERSION_ID > 30112
-
- case UDM_PARAM_VARDIR:
-#if UDM_VERSION_ID < 30200
- udm_snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
-#else
- snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
-#endif
-
- break;
-
-#endif
-
- default:
- php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown agent session parameter");
- RETURN_FALSE;
- break;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_load_ispell_data(int agent, int var, string val1, [string charset], string val2, int flag)
- Load ispell data */
-DLEXPORT PHP_FUNCTION(udm_load_ispell_data)
-{
- pval **yyagent, **yyvar, **yyval1, **yyval2, **yyflag, **yycharset ;
- char *val1, *val2, *charset;
- int var, flag;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 5:
- if(zend_get_parameters_ex(5,&yyagent,&yyvar,&yyval1,&yyval2,&yyflag)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_long_ex(yyflag);
- convert_to_string_ex(yyval1);
- convert_to_string_ex(yyval2);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- flag = Z_LVAL_PP(yyflag);
- val1 = Z_STRVAL_PP(yyval1);
- val2 = Z_STRVAL_PP(yyval2);
- charset = "us-ascii";
-
- break;
-
- case 6:
- if(zend_get_parameters_ex(6,&yyagent,&yyvar,&yyval1,&yycharset,&yyval2,&yyflag)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_long_ex(yyflag);
- convert_to_string_ex(yyval1);
- convert_to_string_ex(yyval2);
- convert_to_string_ex(yycharset);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- flag = Z_LVAL_PP(yyflag);
- val1 = Z_STRVAL_PP(yyval1);
- val2 = Z_STRVAL_PP(yyval2);
- charset = Z_STRVAL_PP(yycharset);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- switch(var){
-#if UDM_VERSION_ID < 30200
- case UDM_ISPELL_TYPE_DB:
- Agent->Conf->ispell_mode |= UDM_ISPELL_MODE_DB;
-
- if (UdmDBImportAffixes(Agent,Agent->charset) ||
- UdmImportDictionaryFromDB(Agent)) {
- RETURN_FALSE;
- }
-
- break;
-
-#if UDM_VERSION_ID > 30111
-
- case UDM_ISPELL_TYPE_SERVER:
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB;
- Agent->Conf->ispell_mode |= UDM_ISPELL_MODE_SERVER;
-
- Agent->Conf->spellhost = strdup(val1);
-
- break;
-
-#endif
-#endif
-
- case UDM_ISPELL_TYPE_AFFIX:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB;
-
-#if UDM_VERSION_ID > 30111
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_SERVER;
-#endif
-
- if (UdmImportAffixes(Agent->Conf,val1,val2,NULL,0)) {
- php_error(E_WARNING,"Udm_Load_Ispell_Data: Cannot load affix file %s",val2);
- RETURN_FALSE;
- }
-#else
- if (UdmImportAffixes(Agent->Conf,val1,charset,val2)) {
- php_error(E_WARNING,"Udm_Load_Ispell_Data: Cannot load affix file %s",val2);
- RETURN_FALSE;
- }
-
-#endif
- break;
-
- case UDM_ISPELL_TYPE_SPELL:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB;
-
-#if UDM_VERSION_ID > 30111
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_SERVER;
-#endif
-
- if (UdmImportDictionary(Agent->Conf,val1,val2,1,"")) {
- php_error(E_WARNING,"Udm_Load_Ispell_Data: Cannot load spell file %s",val2);
- RETURN_FALSE;
- }
-#else
- if (UdmImportDictionary(Agent->Conf,val1,charset,val2,0,"")) {
- php_error(E_WARNING,"Udm_Load_Ispell_Data: Cannot load spell file %s",val2);
- RETURN_FALSE;
- }
-#endif
- break;
-
-
- default:
- php_error(E_WARNING,"Udm_Load_Ispell_Data: Unknown ispell type parameter");
- RETURN_FALSE;
- break;
- }
-
- if (flag) {
- if(Agent->Conf->nspell) {
- UdmSortDictionary(Agent->Conf);
- UdmSortAffixes(Agent->Conf);
- }
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_free_ispell_data(int agent)
- Free memory allocated for ispell data */
-DLEXPORT PHP_FUNCTION(udm_free_ispell_data)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-
-#if UDM_VERSION_ID > 30111
- UdmFreeIspell(Agent->Conf);
-#endif
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_add_search_limit(int agent, int var, string val)
- Add mnoGoSearch search restrictions */
-DLEXPORT PHP_FUNCTION(udm_add_search_limit)
-{
- pval **yyagent, **yyvar, **yyval;
- char *val;
- int var;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 3:
- if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_string_ex(yyval);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- val = Z_STRVAL_PP(yyval);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- switch(var){
- case UDM_LIMIT_URL:
- UdmAddURLLimit(Agent->Conf,val);
-
- break;
-
- case UDM_LIMIT_TAG:
- UdmAddTagLimit(Agent->Conf,val);
-
- break;
-
- case UDM_LIMIT_LANG:
- UdmAddLangLimit(Agent->Conf,val);
-
- break;
-
- case UDM_LIMIT_CAT:
- UdmAddCatLimit(Agent->Conf,val);
-
- break;
-
- case UDM_LIMIT_DATE: {
- struct udm_stl_info_t stl_info = { 0, 0, 0 };
-
- if (val[0] == '>') {
- Z_TYPE(stl_info)=1;
- } else if (val[0] == '<') {
- Z_TYPE(stl_info)=-1;
- } else {
- php_error(E_WARNING,"Udm_Add_Search_Limit: Incorrect date limit format");
- RETURN_FALSE;
- }
-
- stl_info.t1=(time_t)(atol(val+1));
- UdmAddTimeLimit(Agent->Conf,&stl_info);
-
- break;
- }
- default:
- php_error(E_WARNING,"Udm_Add_Search_Limit: Unknown search limit parameter");
- RETURN_FALSE;
- break;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_clear_search_limits(int agent)
- Clear all mnoGoSearch search restrictions */
-DLEXPORT PHP_FUNCTION(udm_clear_search_limits)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-
- UdmClearLimits(Agent->Conf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if UDM_VERSION_ID >= 30200
-/* {{{ proto int udm_check_charset(int agent, string charset)
- Check if the given charset is known to mnogosearch */
-DLEXPORT PHP_FUNCTION(udm_check_charset)
-{
- pval ** yycharset, ** yyagent;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yycharset)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yycharset);
-
-
- if (UdmGetCharSet(Z_STRVAL_PP(yycharset))) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-#if UDM_VERSION_ID >= 30203
-/* {{{ proto int udm_crc32(int agent, string str)
- Return CRC32 checksum of gived string */
-DLEXPORT PHP_FUNCTION(udm_crc32)
-{
- pval ** yystr, ** yyagent;
- char *str;
- int crc32;
- char buf[32];
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yystr)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yystr);
- str = Z_STRVAL_PP(yystr);
-
- crc32=UdmCRC32((str),strlen(str));
- snprintf(buf,sizeof(buf)-1,"%u",crc32);
-
- RETURN_STRING(buf,1);
-}
-/* }}} */
-
-/* {{{ proto int udm_open_stored(int agent, string storedaddr)
- Open connection to stored */
-DLEXPORT PHP_FUNCTION(udm_open_stored)
-{
- pval ** yyagent, ** yyaddr;
-
- int s;
- char * addr;
- const char *hello = "F\0";
-
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent, &yyaddr)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- convert_to_string_ex(yyaddr);
- addr = Z_STRVAL_PP(yyaddr);
-
- UdmReplaceStrVar(Agent->Conf->vars,"StoredAddr",addr,UDM_VARSRC_GLOBAL);
- Agent->Conf->stored_addr = strdup(UdmFindStrVar(Agent->Conf->vars, "StoredAddr", "localhost"));
-
- s = UdmStoreOpen(Agent->Conf);
-
- if (s >= 0) {
- send(s, hello, 1, 0);
- RETURN_LONG(s);
- } else RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int udm_close_stored(int agent, int link)
- Open connection to stored */
-DLEXPORT PHP_FUNCTION(udm_close_stored)
-{
- pval ** yylink, ** yyagent;
-
- int s;
- unsigned int rec_id = 0;
-
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent, &yylink)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- convert_to_long_ex(yylink);
- s = Z_LVAL_PP(yylink);
-
-
- send(s, &rec_id, sizeof(rec_id), 0);
- closesocket(s);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_check_stored(int agent, int link, string doc_id)
- Open connection to stored */
-DLEXPORT PHP_FUNCTION(udm_check_stored)
-{
- pval ** yyid, ** yylink, ** yyagent;
-
- int s;
- unsigned int rec_id = 0;
- int store_found;
-
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 3: {
- if (zend_get_parameters_ex(3, &yyagent, &yylink, &yyid)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- convert_to_long_ex(yylink);
- s = Z_LVAL_PP(yylink);
-
- convert_to_string_ex(yyid);
-
- rec_id=strtoul(Z_STRVAL_PP(yyid),NULL,10);
-
- send(s, &rec_id, sizeof(rec_id), 0);
- if (UdmRecvAll(s, &store_found, sizeof(store_found), MSG_WAITALL) < 0) {
- RETURN_LONG(store_found);
- } else RETURN_FALSE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto int udm_find(int agent, string query)
- Perform search */
-DLEXPORT PHP_FUNCTION(udm_find)
-{
- pval ** yyquery, ** yyagent;
- UDM_RESULT * Res;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yyquery)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yyquery);
-
-#if UDM_VERSION_ID < 30200
- if ((Res=UdmFind(Agent,UdmTolower(Z_STRVAL_PP(yyquery),Agent->charset)))) {
-#else
- if ((Res=UdmFind(Agent,Z_STRVAL_PP(yyquery)))) {
-#endif
- ZEND_REGISTER_RESOURCE(return_value,Res,le_res);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string udm_get_res_field(int res, int row, int field)
- Fetch mnoGoSearch result field */
-DLEXPORT PHP_FUNCTION(udm_get_res_field)
-{
- pval **yyres, **yyrow_num, **yyfield_name;
-
- UDM_RESULT * Res;
- int row,field;
-
- switch(ZEND_NUM_ARGS()){
- case 3: {
- if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yyrow_num);
- convert_to_string_ex(yyfield_name);
- field=atoi(Z_STRVAL_PP(yyfield_name));
- row=atoi(Z_STRVAL_PP(yyrow_num));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- if(row<Res->num_rows){
- switch(field){
- case UDM_FIELD_URL:
- RETURN_STRING((Res->Doc[row].url)?(Res->Doc[row].url):"",1);
- break;
-
- case UDM_FIELD_CONTENT:
- RETURN_STRING((Res->Doc[row].content_type)?(Res->Doc[row].content_type):"",1);
- break;
-
- case UDM_FIELD_TITLE:
- RETURN_STRING((Res->Doc[row].title)?(Res->Doc[row].title):"",1);
- break;
-
- case UDM_FIELD_KEYWORDS:
- RETURN_STRING((Res->Doc[row].keywords)?(Res->Doc[row].keywords):"",1);
- break;
-
- case UDM_FIELD_DESC:
- RETURN_STRING((Res->Doc[row].description)?(Res->Doc[row].description):"",1);
- break;
-
- case UDM_FIELD_TEXT:
- RETURN_STRING((Res->Doc[row].text)?(Res->Doc[row].text):"",1);
- break;
-
- case UDM_FIELD_SIZE:
- RETURN_LONG((Res->Doc[row].size));
- break;
-
- case UDM_FIELD_URLID:
- RETURN_LONG((Res->Doc[row].url_id));
- break;
-
- case UDM_FIELD_RATING:
- RETURN_LONG((Res->Doc[row].rating));
- break;
-
- case UDM_FIELD_MODIFIED:
- RETURN_LONG((Res->Doc[row].last_mod_time));
- break;
-
- case UDM_FIELD_ORDER:
- RETURN_LONG((Res->Doc[row].order));
- break;
-
- case UDM_FIELD_CRC:
- RETURN_LONG((Res->Doc[row].crc32));
- break;
-
- case UDM_FIELD_CATEGORY:
- RETURN_STRING((Res->Doc[row].category)?(Res->Doc[row].category):"",1);
- break;
-
-#if UDM_VERSION_ID >= 30203
- case UDM_FIELD_LANG:
- RETURN_STRING((Res->Doc[row].lang)?(Res->Doc[row].lang):"",1);
- break;
-
- case UDM_FIELD_CHARSET:
- RETURN_STRING((Res->Doc[row].charset)?(Res->Doc[row].charset):"",1);
- break;
-#endif
-
- default:
- php_error(E_WARNING,"Udm_Get_Res_Field: Unknown mnoGoSearch field name");
- RETURN_FALSE;
- break;
- }
- }else{
- php_error(E_WARNING,"Udm_Get_Res_Field: row number too large");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string udm_get_res_param(int res, int param)
- Get mnoGoSearch result parameters */
-DLEXPORT PHP_FUNCTION(udm_get_res_param)
-{
- pval ** yyres, ** yyparam;
- int param;
- UDM_RESULT * Res;
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyres, &yyparam)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yyparam);
- param=(Z_LVAL_PP(yyparam));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- switch(param){
- case UDM_PARAM_NUM_ROWS:
- RETURN_LONG(Res->num_rows);
- break;
-
- case UDM_PARAM_FOUND:
- RETURN_LONG(Res->total_found);
- break;
-
- case UDM_PARAM_WORDINFO:
- RETURN_STRING((Res->wordinfo)?(Res->wordinfo):"",1);
- break;
-
- case UDM_PARAM_SEARCHTIME:
- RETURN_DOUBLE(((double)Res->work_time)/1000);
- break;
-
- case UDM_PARAM_FIRST_DOC:
- RETURN_LONG(Res->first);
- break;
-
- case UDM_PARAM_LAST_DOC:
- RETURN_LONG(Res->last);
- break;
-
- default:
- php_error(E_WARNING,"Udm_Get_Res_Param: Unknown mnoGoSearch param name");
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int udm_free_res(int res)
- mnoGoSearch free result */
-DLEXPORT PHP_FUNCTION(udm_free_res)
-{
- pval ** yyres;
- UDM_RESULT * Res;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyres)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- zend_list_delete(Z_LVAL_PP(yyres));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_free_agent(int agent)
- Free mnoGoSearch session */
-DLEXPORT PHP_FUNCTION(udm_free_agent)
-{
- pval ** yyagent;
- UDM_RESULT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_RESULT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- zend_list_delete(Z_LVAL_PP(yyagent));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_errno(int agent)
- Get mnoGoSearch error number */
-DLEXPORT PHP_FUNCTION(udm_errno)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
- RETURN_LONG(UdmDBErrorCode(Agent->db));
-}
-/* }}} */
-
-/* {{{ proto string udm_error(int agent)
- Get mnoGoSearch error message */
-DLEXPORT PHP_FUNCTION(udm_error)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
- RETURN_STRING((UdmDBErrorMsg(Agent->db))?(UdmDBErrorMsg(Agent->db)):"",1);
-}
-/* }}} */
-
-/* {{{ proto int udm_api_version()
- Get mnoGoSearch API version */
-DLEXPORT PHP_FUNCTION(udm_api_version)
-{
- RETURN_LONG(UDM_VERSION_ID);
-}
-/* }}} */
-
-/* {{{ proto array udm_cat_list(int agent, string category)
- Get mnoGoSearch categories list with the same root */
-DLEXPORT PHP_FUNCTION(udm_cat_list)
-{
- pval ** yycat, ** yyagent;
- UDM_AGENT * Agent;
- char *cat;
- UDM_CATEGORY *c=NULL;
- char *buf=NULL;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yycat)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yycat);
- cat = Z_STRVAL_PP(yycat);
-
- if((c=UdmCatList(Agent,cat))){
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- if (!(buf=calloc(1,UDMSTRSIZ+1))) {
- RETURN_FALSE;
- }
-
- while(c->rec_id){
- snprintf(buf, UDMSTRSIZ, "%s%s",c->link[0]?"@ ":"", c->name);
- add_next_index_string(return_value, c->link[0]?c->link:c->path, 1);
- add_next_index_string(return_value, buf, 1);
- c++;
- }
-
- free(buf);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array udm_cat_path(int agent, string category)
- Get mnoGoSearch categories path from the root to the given catgory */
-DLEXPORT PHP_FUNCTION(udm_cat_path)
-{
- pval ** yycat, ** yyagent;
- UDM_AGENT * Agent;
- char *cat;
- UDM_CATEGORY *c=NULL;
- char *buf=NULL;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yycat)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yycat);
- cat = Z_STRVAL_PP(yycat);
-
- if((c=UdmCatPath(Agent,cat))){
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- if (!(buf=calloc(1,UDMSTRSIZ+1))) {
- RETURN_FALSE;
- }
-
- while(c->rec_id){
- snprintf(buf, UDMSTRSIZ, "%s%s",c->link[0]?"@ ":"", c->name);
- add_next_index_string(return_value, c->link[0]?c->link:c->path, 1);
- add_next_index_string(return_value, buf, 1);
- c++;
- }
-
- free(buf);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#if UDM_VERSION_ID > 30110
-/* {{{ proto int udm_get_doc_count(int agent)
- Get total number of documents in database */
-DLEXPORT PHP_FUNCTION(udm_get_doc_count)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- RETURN_LONG(UdmGetDocCount(Agent));
-}
-/* }}} */
-#endif
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/mnogosearch/php_mnogo.h b/ext/mnogosearch/php_mnogo.h
deleted file mode 100644
index dc82573ed8..0000000000
--- a/ext/mnogosearch/php_mnogo.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* $Source$ */
-/* $Id$ */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: |
- | Initial version by Alex Barkov <bar@izhcom.ru> |
- | and Ramil Kalimullin <ram@izhcom.ru> |
- | Further development by Sergey Kartashoff <gluke@mail.ru> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef _PHP_MNOGO_H
-#define _PHP_MNOGO_H
-
-#if HAVE_MNOGOSEARCH
-
-#include <udm_config.h>
-#include <udmsearch.h>
-
-#if UDM_VERSION_ID >= 30203
-#include <udm_crc32.h>
-#include <udm_store.h>
-#endif
-
-extern zend_module_entry mnogosearch_module_entry;
-#define mnogosearch_module_ptr &mnogosearch_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MNOGO_API __declspec(dllexport)
-#else
-#define PHP_MNOGO_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-/* mnoGoSearch functions */
-DLEXPORT PHP_MINIT_FUNCTION(mnogosearch);
-DLEXPORT PHP_RINIT_FUNCTION(mnogosearch);
-DLEXPORT PHP_MSHUTDOWN_FUNCTION(mnogosearch);
-DLEXPORT PHP_MINFO_FUNCTION(mnogosearch);
-
-DLEXPORT PHP_FUNCTION(udm_api_version);
-#if UDM_VERSION_ID >= 30200
-DLEXPORT PHP_FUNCTION(udm_check_charset);
-#endif
-
-#if UDM_VERSION_ID >= 30203
-DLEXPORT PHP_FUNCTION(udm_crc32);
-DLEXPORT PHP_FUNCTION(udm_open_stored);
-DLEXPORT PHP_FUNCTION(udm_check_stored);
-DLEXPORT PHP_FUNCTION(udm_close_stored);
-#endif
-
-DLEXPORT PHP_FUNCTION(udm_alloc_agent);
-DLEXPORT PHP_FUNCTION(udm_set_agent_param);
-
-DLEXPORT PHP_FUNCTION(udm_load_ispell_data);
-DLEXPORT PHP_FUNCTION(udm_free_ispell_data);
-
-DLEXPORT PHP_FUNCTION(udm_add_search_limit);
-DLEXPORT PHP_FUNCTION(udm_clear_search_limits);
-
-DLEXPORT PHP_FUNCTION(udm_error);
-DLEXPORT PHP_FUNCTION(udm_errno);
-
-DLEXPORT PHP_FUNCTION(udm_find);
-DLEXPORT PHP_FUNCTION(udm_get_res_field);
-DLEXPORT PHP_FUNCTION(udm_get_res_param);
-
-DLEXPORT PHP_FUNCTION(udm_cat_list);
-DLEXPORT PHP_FUNCTION(udm_cat_path);
-
-DLEXPORT PHP_FUNCTION(udm_free_res);
-DLEXPORT PHP_FUNCTION(udm_free_agent);
-
-#if UDM_VERSION_ID > 30110
-DLEXPORT PHP_FUNCTION(udm_get_doc_count);
-#endif
-
-#else
-
-#define mnogosearch_module_ptr NULL
-
-#endif
-
-#define phpext_mnogosearch_ptr mnogosearch_module_ptr
-
-#endif /* _PHP_MNOGO_H */
diff --git a/ext/msession/CREDITS b/ext/msession/CREDITS
deleted file mode 100644
index 4703783a74..0000000000
--- a/ext/msession/CREDITS
+++ /dev/null
@@ -1,3 +0,0 @@
-msession
-Mark L. Woodward
-mailto:mlwmohawk@mohawksoft.com
diff --git a/ext/msession/README b/ext/msession/README
deleted file mode 100644
index 5442e3bbab..0000000000
--- a/ext/msession/README
+++ /dev/null
@@ -1,33 +0,0 @@
-This is msession, it is an interface to a stand-alone session
-management system. The msession daemon can be found at
-Mohawk Software's web site, under Project Phoenix
-
-http://www.mohawksoft.com/phoenix.html
-
-Requirements:
-Mohawk Software's Phoenix library.
-Mohawk Software's msession daemon.
-
-Building:
-In the config.m4 file you will need to specify the include
-and library directories for Phoenix. The setting in config.m4
-is probably wrong.
-
-You will need phoenix installed and built to compile this
-module.
-
-To use msession-test.php, msession must be the default session
-handler in PHP. The easiest way to do that is in the php.ini
-file as:
-
-[Session]
-session.save_handler = msession
-session.save_path = localhost
-
-The session.save.path is the host name of the server running
-msessiond.
-
-12/22/2001
-Changed msession_getdata(...) to msession_get_data(...)
-Changed msession_setdata(...) to msession_set_data(...)
-(docs to follow)
diff --git a/ext/msession/config.m4 b/ext/msession/config.m4
deleted file mode 100644
index 3cef3f94ec..0000000000
--- a/ext/msession/config.m4
+++ /dev/null
@@ -1,34 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(msession, for msession support,
-[ --with-msession[=DIR] Include msession support])
-
-if test "$PHP_MSESSION" != "no"; then
- if test -r $PHP_MSESSION/lib/libphoenix.a; then
- PHOENIX_DIR=$PHP_MSESSION
- else
- AC_MSG_CHECKING(for msession in default path)
- for i in /usr/local/phoenix /usr/local /usr; do
- if test -r $i/lib/libphoenix.a; then
- PHOENIX_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$PHOENIX_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the Phoenix / msession distribution)
- fi
-
-
- AC_DEFINE(HAVE_MSESSION, 1, [ ])
- PHP_ADD_LIBRARY_WITH_PATH(phoenix, "$PHOENIX_DIR/lib", PHOENIX_LIB)
- PHOENIX_INCLUDE="-I$PHOENIX_DIR"
- PHP_SUBST(PHOENIX_LIB)
-
- PHP_NEW_EXTENSION(msession, msession.c, $ext_shared)
-fi
-
diff --git a/ext/msession/msession-test.php b/ext/msession/msession-test.php
deleted file mode 100644
index e591fcca70..0000000000
--- a/ext/msession/msession-test.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?
-# msession-test.php
-# This is a test page for msession functions.
-# most msession functions are used in this page with
-# the exception of msession_get_data, and msession_set_data
-# which are used implicitly with the PHP session
-# extension.
-#
-#
-#
-
-# Start the session system, this will connect to msession
-# as configured in PHP.INI.
-#
-# Start sessions, this will set a cookie.
-session_start();
-
-# Now, optional, use msession_uniq() to create a guarenteed
-# uniq session name.
-#
-if(!$HTTP_COOKIE_VARS["PHPSESSID"])
-{
- # Use uniq to create the session. This is guarenteed to be
- # uniq in the server.
- $sid = msession_uniq(32);
- setcookie ("PHPSESSID", $sid);
- session_id($sid);
- $HTTP_COOKIE_VARS["PHPSESSID"] = $sid;
- # New session, set some variables
- if(0) // One at a time
- {
- echo "Set Variable: " . msession_set($sid, 'time',time()) ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name1','test1') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name2','test2') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name3','test3') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name4','test4') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name5','test5') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name6','test6') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name7','test7') ."<p>\n";
- }
- else // All at once in an array
- {
- $setarray = array();
- $setarray['time']=time();
- $setarray['name1'] = 'test1';
- $setarray['name2'] = 'test2';
- $setarray['name3'] = 'test3';
- $setarray['name4'] = 'test4';
- $setarray['name5'] = 'test5';
- $setarray['name6'] = 'test6';
- $setarray['name7'] = 'test7';
- msession_set_array($sid, $setarray);
- }
-}
-else
-{
- $sid = $HTTP_COOKIE_VARS["PHPSESSID"];
-}
-
-#This makes a link between the variable $count and the
-# session variable "count"
-session_register("count");
-
-$count ++;
-
-# Output some information.
-echo "sid: " . $sid . "<br>\n";
-echo "Session Count: " . $count . "<br>\n";
-
-# Use msession_randstr() to produce a random string.
-# A valid string of n characters of jibberish is returned.
-echo "Random String: " . msession_randstr(32) . "<br>\n";
-
-# This is a thread safe increment, unlike PHP's session, many web servers
-# can be updating this variable and collisions are managed.
-# (for this to work, older versions of msessiond must be started with "-g globals"
-# newer versions create it by default)
-echo "Global Count: " . msession_inc(globals, "counter") . "<br>\n";
-
-# This gets a count of active sessions.
-echo "Total active sessions: " . msession_count() . "<br>\n";
-
-# This gets all the variables for a user in an associative array.
-$varray = msession_get_array($sid);
-
-if(!$varray)
- echo "Get variable array: Failed<br>\n";
-
-# Display all the user's variables
-$arraykeys = array_keys($varray);
-for($i=0; $arraykeys[$i]; $i++)
- echo "Key: " . $arraykeys[ $i ] ." = " .$varray[$arraykeys[$i]] ."<br>\n";
-
-
-# Find a list of all sessions with same name/value pair
-$array = msession_find('name1', 'test1');
-
-#display the sessions
-for($i=0; $array[$i]; $i++)
- echo "Similar Sessions: " . $i . " " . $array[$i] . "<br>\n";
-
-# Find all the sessions which have the variable "time" set.
-$vararray = msession_listvar('time');
-
-$arraykeys = array_keys($vararray);
-
-for($i=0; $arraykeys[$i]; $i++)
- echo "Key: " . $arraykeys[ $i ] ." = " .$vararray[$arraykeys[$i]] ."<br>\n";
-
-# msession can support a personality plugin, this is an escape call directly
-# into the plugin's REQ_ESCAPE function.
-echo "Call the plugin: " . msession_plugin($sid, 3, "test"). "<br>\n";
-
-# msession also supprts function-only plugins. this is a call into the demo
-# plugin (funct.so) which returns the uptime of the msessiond process.
-echo "Call the function: " . msession_call('fntest', "1","2", "3", "4") ."<br>\n";
-
-#List ALL sessions on the system
-$sarray = msession_list();
-
-for($i=0; $sarray[$i]; $i++)
- echo "Sessions: " . $i . " " . $sarray[$i] . "<br>\n";
-
-?>
-
diff --git a/ext/msession/msession.c b/ext/msession/msession.c
deleted file mode 100644
index fd7043fa0b..0000000000
--- a/ext/msession/msession.c
+++ /dev/null
@@ -1,1268 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | msession 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Mark Woodward <markw@mohawksoft.com> |
- | Portions copyright the PHP group. |
- +----------------------------------------------------------------------+
- */
-#include "php.h"
-#include "php_ini.h"
-#include "php_msession.h"
-#include "reqclient.h"
-#include "ext/standard/info.h"
-#include "ext/session/php_session.h"
-
-/* Macros and such */
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef SID_LEN
-#define SID_LEN 32
-#endif
-
-/* Uncomment to get debugging messages */
-/* #define ERR_DEBUG */
-
-
-#ifdef ERR_DEBUG
-#define ELOG( str ) php_log_err( str )
-#else
-#define ELOG( str )
-#endif
-
-/* Test if system is OK fror use. */
-/* Macros may be ugly, but I can globaly add debuging when needed. */
-#define IFCONNECT_BEGIN if(s_reqb && s_conn) {
-#define IFCONNECT_ENDVAL(V) } else { php_error(E_WARNING, s_szNoInit); return V; }
-#define IFCONNECT_END } else { php_error(E_WARNING, s_szNoInit); RETURN_FALSE; }
-
-/* Test if session module contains custom sesson ID patch */
-#ifdef PHP_SESSION_API
-#if (PHP_SESSION_API >= 20020330)
-#define HAVE_PHP_SESSION_CREATESID
-#endif
-#endif
-
-/* This sets the PHP API version used in the file. */
-/* If this module does not compile on the version of PHP you are using, look for */
-/* this value in Zend/zend_modules.h, and set appropriately */
-
-#if (ZEND_MODULE_API_NO <= 20001222)
-#define PHP_4_0
-#define TSRMLS_CC
-#define TSRMLS_DC
-#define TSRMLS_FETCH()
-/* Comment out this line if you wish to have msession without php sessions */
-#define HAVE_PHP_SESSION
-#warning Backward compatible msession extension requires PHP sessions. If PHP compiles and links, you can ignore this warning.
-#elif (ZEND_MODULE_API_NO >= 20010901)
-#define PHP_4_1
-#endif
-
-/*
- * Please do not remove backward compatibility from this module.
- * this same source must also work with the 4.0.6 version of PHP.
- *
- * Module Variable naming hints:
- * All global scope variables begin with "g_" for global.
- * All static file scoped variables begin with "s_" for static.
- * Zero terminated strings generally start with "sz" for "string followed by zero."
- * integers that hold string or data lengths generally start with "cb" for "count of bytes."
- * Also, please to not reformat braces ;-)
- * -MLW
- */
-#if HAVE_MSESSION
-#ifdef HAVE_PHP_SESSION
-#ifdef HAVE_PHP_SESSION_CREATESID
-/* If the PHP Session module is compiled or available, include support */
-PS_FUNCS_SID(msession);
-ps_module ps_mod_msession = {
- PS_MOD_SID(msession)
-};
-#else
-PS_FUNCS(msession);
-ps_module ps_mod_msession = {
- PS_MOD(msession)
-};
-#endif
-#endif
-
-/* Static strings */
-static char s_szNoInit[]="Msession not initialized";
-static char s_szErrFmt[]="MSession Error :%s";
-
-/* Per-process variables need by msession */
-static char s_szdefhost[]="localhost";
-static char * s_szhost=s_szdefhost;
-static int s_port=8086;
-static void * s_conn=NULL;
-static REQB * s_reqb=NULL;
-
-function_entry msession_functions[] = {
- PHP_FE(msession_connect,NULL)
- PHP_FE(msession_disconnect,NULL)
- PHP_FE(msession_lock,NULL)
- PHP_FE(msession_unlock,NULL)
- PHP_FE(msession_count,NULL)
- PHP_FE(msession_create,NULL)
- PHP_FE(msession_destroy,NULL)
- PHP_FE(msession_set,NULL)
- PHP_FE(msession_get,NULL)
- PHP_FE(msession_find,NULL)
- PHP_FE(msession_get_array,NULL)
- PHP_FE(msession_set_array,NULL)
- PHP_FE(msession_timeout,NULL)
- PHP_FE(msession_inc,NULL)
- PHP_FE(msession_set_data,NULL)
- PHP_FE(msession_get_data,NULL)
- PHP_FE(msession_listvar,NULL)
- PHP_FE(msession_list,NULL)
- PHP_FE(msession_uniq,NULL)
- PHP_FE(msession_randstr,NULL)
- PHP_FE(msession_plugin,NULL)
- PHP_FE(msession_call,NULL)
- PHP_FE(msession_ctl,NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry msession_module_entry = {
-#ifdef PHP_4_1
- STANDARD_MODULE_HEADER,
-#endif
- "msession",
- msession_functions,
- PHP_MINIT(msession),
- PHP_MSHUTDOWN(msession),
- PHP_RINIT(msession),
- PHP_RSHUTDOWN(msession),
- PHP_MINFO(msession),
-#ifdef PHP_4_1
- NO_VERSION_YET,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_MSESSION
-ZEND_GET_MODULE(msession)
-#endif
-
-PHP_MINIT_FUNCTION(msession)
-{
- s_conn = NULL;
- s_szhost = s_szdefhost;
-
-#ifdef HAVE_PHP_SESSION
- php_session_register_module(&ps_mod_msession);
-#endif
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(msession)
-{
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(msession)
-{
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(msession)
-{
- if(s_conn)
- {
- CloseReqConn(s_conn);
- s_conn = NULL;
- }
-
- if(s_reqb)
- {
- FreeRequestBuffer(s_reqb);
- s_reqb=NULL;
- }
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(msession)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "msession support", "enabled");
- php_info_print_table_end();
-}
-
-int PHPMsessionConnect(const char *szhost, int nport)
-{
-
- TSRMLS_FETCH();
-
- if(!s_reqb)
- s_reqb = AllocateRequestBuffer(2048);
-
- if(!s_reqb) // no buffer, it won't work!
- return 0;
-
- if(s_conn)
- {
- CloseReqConn(s_conn);
- php_log_err("Call to connect with non-null s_conn" TSRMLS_CC);
- }
- if(strcmp(s_szhost, szhost))
- {
- if(s_szhost != s_szdefhost)
- free(s_szhost);
- s_szhost = strdup(szhost);
- }
- if(nport)
- s_port = nport;
-
- s_conn = OpenReqConn(s_szhost, s_port);
-
-#ifdef ERR_DEBUG
-{
- char buffer[256];
- sprintf(buffer,"Connect: %s [%d] = %d (%X)\n",
- s_szhost, s_port, (s_conn != NULL), (unsigned)s_conn);
- php_log_err(buffer);
-}
-#endif
- return (s_conn) ? 1 : 0;
-}
-
-void PHPMsessionDisconnect()
-{
- if(s_conn)
- {
- CloseReqConn(s_conn);
- s_conn = NULL;
- }
- if(s_reqb)
- {
- FreeRequestBuffer(s_reqb);
- s_reqb = NULL;
- }
-}
-
-char *PHPMsessionGetData(const char *session)
-{
- char *ret = NULL;
-
- IFCONNECT_BEGIN
-
- FormatRequest(&s_reqb, REQ_DATAGET, session,"","",0);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- ret = safe_estrdup(s_reqb->req.datum);
- IFCONNECT_ENDVAL(0)
-
- return ret;
-}
-int PHPMsessionSetData(const char *session, const char *data)
-{
-
- IFCONNECT_BEGIN
- int ret=0;
-
- FormatRequest(&s_reqb, REQ_DATASET, session,"",data,0);
- DoRequest(s_conn,&s_reqb);
- ret = (s_reqb->req.stat==REQ_OK);
- if(s_reqb->req.stat!=REQ_OK)
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
-
- return ret;
-
- IFCONNECT_ENDVAL(0)
-}
-
-int PHPMsessionDestroy(const char *session)
-{
- IFCONNECT_BEGIN
-
- int ret=0;
- FormatRequest(&s_reqb, REQ_DROP, session, "","",0);
- DoRequest(s_conn,&s_reqb);
- ret = (s_reqb->req.stat==REQ_OK);
- if(s_reqb->req.stat!=REQ_OK)
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- return ret;
-
- IFCONNECT_ENDVAL(0)
-}
-
-/* {{{ proto bool msession_connect(string host, string port)
- Connect to msession sever */
-PHP_FUNCTION(msession_connect)
-{
- char *szhost;
- int nport;
-
- zval **zhost;
- zval **zport;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zhost, &zport) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(zhost);
- convert_to_string_ex(zport);
-
- szhost = Z_STRVAL_PP(zhost);
- nport = atoi(Z_STRVAL_PP(zport));
-
- if(PHPMsessionConnect(szhost,nport))
- {
- RETURN_TRUE;
- }
- else
- {
- php_error(E_WARNING, "MSession connect failed");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void msession_disconnect(void)
- Disconnect from msession server */
-PHP_FUNCTION(msession_disconnect)
-{
- PHPMsessionDisconnect();
- RETURN_NULL();
-}
-/* }}} */
-
-/* {{{ proto int msession_count(void)
- Get session count */
-PHP_FUNCTION(msession_count)
-{
- IFCONNECT_BEGIN
-
- int count;
- FormatRequest(&s_reqb, REQ_COUNT, "", "","",0);
- DoRequest(s_conn,&s_reqb);
-
- count = (s_reqb->req.stat == REQ_OK) ? s_reqb->req.param : 0;
-
- RETURN_LONG(count);
-
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_create(string session)
- Create a session */
-PHP_FUNCTION(msession_create)
-{
- IFCONNECT_BEGIN
-/* int stat; */
- char *szsession;
- zval **session;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- FormatRequest(&s_reqb, REQ_CREATE, szsession, "","",0);
- DoRequest(s_conn,&s_reqb);
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_TRUE;
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_destroy(string name)
- Destroy a session */
-PHP_FUNCTION(msession_destroy)
-{
- char *szsession;
- zval **session;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- PHPMsessionDestroy(szsession);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int msession_lock(string name)
- Lock a session */
-PHP_FUNCTION(msession_lock)
-{
- IFCONNECT_BEGIN
- char *szsession;
- zval **session;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- FormatRequest(&s_reqb, REQ_SLOCK, szsession, "","",0);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_LONG(s_reqb->req.param);
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
- }
-
- IFCONNECT_END
-
-}
-/* }}} */
-
-/* {{{ proto int msession_stat(string name)
- Lock a session */
-PHP_FUNCTION(msession_ctl)
-{
- static char *parray[] =
- { "EXIST",
- "TTL",
- "AGE",
- "TLA",
- "CTIME",
- "TOUCH",
- "NOW",
- NULL
- };
- IFCONNECT_BEGIN
- char *szsession;
- zval **session;
- zval **which;
- int fn = REQ_STAT_EXIST;
-
-
- int n = ZEND_NUM_ARGS();
-
- if(n != 1 && n != 2)
- {
- WRONG_PARAM_COUNT;
- }
-
- if(zend_get_parameters_ex(n,&session,&which) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
-
- if(n > 1)
- {
- char *szwhich;
- int i;
- convert_to_string_ex(which);
- szwhich = Z_STRVAL_PP(which);
- for(i=0; parray[i]; i++)
- {
- if(strcasecmp(parray[i], szwhich) == 0)
- {
-
- fn = i;
- break;
- }
- }
- }
- FormatRequest(&s_reqb, REQ_CTL, szsession, "","",fn);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
-#ifdef ERR_DEBUG
- char buffer[128];
- sprintf(buffer, "ret:%d", s_reqb->req.param);
- ELOG(buffer);
-#endif
- RETURN_LONG(s_reqb->req.param);
- }
- else
- {
- ELOG("msession_ctl failed");
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-
-/* {{{ proto int msession_unlock(string session, int key)
- Unlock a session */
-PHP_FUNCTION(msession_unlock)
-{
- IFCONNECT_BEGIN
- char *szsession;
- long lkey;
- zval **session;
- zval **key;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &key) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- convert_to_long_ex(key);
- lkey = Z_LVAL_PP(key);
- FormatRequest(&s_reqb, REQ_SUNLOCK, szsession, "","",lkey);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_LONG(s_reqb->req.param);
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_set(string session, string name, string value)
- Set value in session */
-PHP_FUNCTION(msession_set)
-{
- IFCONNECT_BEGIN
-
- char *szsession;
- char *szname;
- char *szvalue;
- zval **session;
- zval **name;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&session,&name,&value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(name);
- convert_to_string_ex(value);
-
- szsession = Z_STRVAL_PP(session);
- szname = Z_STRVAL_PP(name);
- szvalue = Z_STRVAL_PP(value);
-
- FormatRequest(&s_reqb, REQ_SETVAL, szsession, szname, szvalue, 0);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_TRUE;
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_get(string session, string name, string default_value)
- Get value from session */
-PHP_FUNCTION(msession_get)
-{
- IFCONNECT_BEGIN
- char *szsession;
- char *szname;
- char *szvalue;
- zval **session;
- zval **name;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&session,&name,&value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(name);
- convert_to_string_ex(value);
- szsession = Z_STRVAL_PP(session);
- szname = Z_STRVAL_PP(name);
- szvalue = Z_STRVAL_PP(value);
-
- FormatRequest(&s_reqb, REQ_GETVAL, szsession, szname, szvalue,0);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- szvalue = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(szvalue, 0)
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_uniq(int num_chars)
- Get uniq id */
-PHP_FUNCTION(msession_uniq)
-{
- IFCONNECT_BEGIN
-
- long val;
- zval **param;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,&param) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(param);
- val = Z_LVAL_PP(param);
-
- FormatRequest(&s_reqb, REQ_UNIQ,"", "", "",val);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- char *szval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(szval, 0)
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-
-}
-/* }}} */
-
-/* {{{ proto string msession_randstr(int num_chars)
- Get random string */
-PHP_FUNCTION(msession_randstr)
-{
- IFCONNECT_BEGIN
- long val;
- zval **param;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,&param) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(param);
- val = Z_LVAL_PP(param);
-
- FormatRequest(&s_reqb, REQ_RANDSTR,"", "", "",val);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- char *szval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(szval, 0)
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_find(string name, string value)
- Find all sessions with name and value */
-PHP_FUNCTION(msession_find)
-{
- IFCONNECT_BEGIN
-
- char *szname;
- char *szvalue;
- zval **name;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- convert_to_string_ex(value);
- szname = Z_STRVAL_PP(name);
- szvalue = Z_STRVAL_PP(value);
-
- FormatRequest(&s_reqb, REQ_FIND, "", szname, szvalue,0);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
- {
- int i;
- char *str = s_reqb->req.datum;
- array_init(return_value);
-
- for(i=0; i < s_reqb->req.param; i++)
- {
- int cbstr = strlen(str);
- char *data = safe_estrdup(str);
- add_index_string(return_value, i, data, 0);
- str += (cbstr+1);
- }
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_list(void)
- List all sessions */
-PHP_FUNCTION(msession_list)
-{
- IFCONNECT_BEGIN
- FormatRequest(&s_reqb, REQ_LIST, "", "", "",0);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
- {
- int i;
- char *str = s_reqb->req.datum;
- array_init(return_value);
-
- for(i=0; i < s_reqb->req.param; i++)
- {
- int cbstr = strlen(str);
- char *data = safe_estrdup(str);
- add_index_string(return_value, i, data, 0);
- str += (cbstr+1);
- }
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- // May this should be an error?
- if(s_reqb->req.param != REQE_NOSESSION)
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_get_array(string session)
- Get array of msession variables */
-PHP_FUNCTION(msession_get_array)
-{
- IFCONNECT_BEGIN
- char *szsession;
- zval **session;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- FormatRequest(&s_reqb, REQ_GETALL, szsession, "", "",0);
- DoRequest(s_conn,&s_reqb);
-
- array_init(return_value);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- int i;
- char *str = s_reqb->req.datum;
- int num = s_reqb->req.param*2;
-
- for(i=0; i < num; i+=2)
- {
- int cbvalue;
- int cbname;
- char *szvalue;
- char *szname;
-
- cbname = strlen(str);
- szname = safe_estrndup(str,cbname);
- str += (cbname+1);
-
- cbvalue = strlen(str);
- szvalue = safe_estrndup(str,cbvalue);
- str += (cbvalue+1);
- add_assoc_string(return_value, szname, szvalue, 0);
- }
- }
- else
- {
- if(s_reqb->req.param != REQE_NOSESSION)
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_set_array(string session, array tuples)
- Set msession variables from an array*/
-PHP_FUNCTION(msession_set_array)
-{
- IFCONNECT_BEGIN
- zval **session;
- zval **tuples;
- HashPosition pos;
- zval **entry;
- char *key;
-#ifdef PHP_4_1
- uint keylen;
-#endif
-#ifdef PHP_4_0
- ulong keylen;
-#endif
- ulong numndx;
- int ndx=0;
- char **pairs;
- HashTable *htTuples;
- int i;
-
- int countpair;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &tuples) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- htTuples = Z_ARRVAL_PP(tuples);
-
- countpair = zend_hash_num_elements(htTuples);
-
- pairs = (char **)emalloc(sizeof(char *) * countpair * 2);
-
- if(!pairs)
- {
- ELOG("no pairs");
- RETURN_FALSE;
- }
-
- ELOG("have pairs");
-
- // Initializes pos
- zend_hash_internal_pointer_reset_ex(htTuples, &pos);
-
- ELOG("reset pointer");
-
- for(i=0; i < countpair; i++)
- {
- if(zend_hash_get_current_data_ex(htTuples, (void **)&entry, &pos) != SUCCESS)
- break;
-
- if(entry)
- {
- char *szentry;
- convert_to_string_ex(entry);
- szentry = Z_STRVAL_PP(entry);
-
- if(zend_hash_get_current_key_ex(htTuples,&key,&keylen,&numndx,0,&pos)== HASH_KEY_IS_STRING)
- {
-#ifdef ERR_DEBUG
-{
- char buffer [256];
- sprintf(buffer, "%s=%s\n", key, szentry);
- ELOG(buffer);
-}
-#endif
- pairs[ndx++] = key;
- pairs[ndx++] = szentry;
- }
- }
- zend_hash_move_forward_ex(htTuples, &pos);
- }
-
- ELOG("FormatMulti");
- FormatRequestMulti(&s_reqb, REQ_SETVAL, Z_STRVAL_PP(session), countpair, pairs,0);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat != REQ_OK)
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- efree((void *)pairs);
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_listvar(string name)
- return associative array of value:session for all sessions with a variable named 'name' */
-PHP_FUNCTION(msession_listvar)
-{
- IFCONNECT_BEGIN
- zval **name;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- FormatRequest(&s_reqb, REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0);
- DoRequest(s_conn,&s_reqb);
-
- array_init(return_value);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- int i;
- char *str = s_reqb->req.datum;
- int num = s_reqb->req.param*2;
-
- for(i=0; i < num; i+=2)
- {
- int cbvalue;
- int cbname;
- char *szvalue;
- char *szname;
-
- cbname= strlen(str);
- szname= safe_estrndup(str,cbname);
- str += (cbname+1);
-
- cbvalue = strlen(str);
- szvalue = safe_estrndup(str,cbvalue);
- str += (cbvalue+1);
- add_assoc_string(return_value, szname, szvalue, 0);
- }
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto int msession_timeout(string session [, int param ])
- Set/get session timeout */
-PHP_FUNCTION(msession_timeout)
-{
- IFCONNECT_BEGIN
- zval **session;
- int ac = ZEND_NUM_ARGS();
- int zstat = FAILURE;
- int timeout = 0;
- if(ac == 1)
- {
- zstat = zend_get_parameters_ex(1, &session);
- }
- else if(ac == 2)
- {
- zval **param;
- zstat = zend_get_parameters_ex(2, &session, &param);
- convert_to_long_ex(param);
- timeout = Z_LVAL_PP(param);
- }
- if(zstat == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- FormatRequest(&s_reqb, REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout);
- DoRequest(s_conn,&s_reqb);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- RETURN_LONG( s_reqb->req.param);
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_inc(string session, string name)
- Increment value in session */
-PHP_FUNCTION(msession_inc)
-{
- IFCONNECT_BEGIN
- char *val;
- zval **session;
- zval **name;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &name) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(name);
-
- FormatRequest(&s_reqb, REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- val = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(val, 0)
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_get_data(string session)
- Get data session unstructured data. (PHP sessions use this) */
-PHP_FUNCTION(msession_get_data)
-{
- IFCONNECT_BEGIN
- char *val;
- zval **session;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
-
- val = PHPMsessionGetData(Z_STRVAL_PP(session));
-
- if(val)
- {
- RETURN_STRING(val, 0)
- }
- else
- {
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_set_data(string session, string value)
- Set data session unstructured data. (PHP sessions use this) */
-PHP_FUNCTION(msession_set_data)
-{
- IFCONNECT_BEGIN
- zval **session;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(value);
-
- if(PHPMsessionSetData(Z_STRVAL_PP(session),Z_STRVAL_PP(value)))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_plugin(string session, string val [, string param ])
- Call the personality plugin escape function */
-PHP_FUNCTION(msession_plugin)
-{
- IFCONNECT_BEGIN
- int ret;
- char *retval;
- zval **session;
- zval **val;
- zval **param=NULL;
-
- if(ZEND_NUM_ARGS() == 3)
- {
- ret = zend_get_parameters_ex(3, &session, &val, &param);
- convert_to_string_ex(param);
- }
- else if(ZEND_NUM_ARGS() == 2)
- {
- ret = zend_get_parameters_ex(2, &session, &val);
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- if(ret == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(val);
-
- ret = atoi(Z_STRVAL_PP(val));
-
- FormatRequest(&s_reqb, REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val), param ? Z_STRVAL_PP(param) : "",ret);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
- {
- retval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(retval, 0)
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
-
- }
- IFCONNECT_END
-}
-/* }}} */
-#define MAX_EXT_VAL 5
-/* {{{ proto string msession_call(string fn_name, [, string param1 ], ... [,string param4])
- Call the plugin function named fn_name */
-PHP_FUNCTION(msession_call)
-{
- IFCONNECT_BEGIN
- int n;
- int i;
- int ret;
- char *retval;
- zval **val[MAX_EXT_VAL];
- char *strings[MAX_EXT_VAL+1];
-/* zval **param=NULL; */
-
- n = ZEND_NUM_ARGS();
-
- if((n < 1) || (n > MAX_EXT_VAL))
- {
- WRONG_PARAM_COUNT;
- }
-
- ret = zend_get_parameters_ex(ZEND_NUM_ARGS(), &val[0],&val[1],&val[2],&val[3],&val[4]);
-
- if(ret == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- for(i=0; i < n; i++)
- {
- convert_to_string_ex(val[i]);
- strings[i] = Z_STRVAL_PP(val[i]);
- }
-
- FormatRequestStrings(&s_reqb, REQ_CALL, NULL , n, strings);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
- {
- retval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(retval, 0)
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-#ifdef HAVE_PHP_SESSION
-
-PS_OPEN_FUNC(msession)
-{
- ELOG( "ps_open_msession");
- PS_SET_MOD_DATA((void *)1); // session.c needs a non-zero here!
- return PHPMsessionConnect(save_path, 8086) ? SUCCESS : FAILURE;
-}
-
-PS_CLOSE_FUNC(msession)
-{
- ELOG( "ps_close_msession");
- PHPMsessionDisconnect();
- return SUCCESS;
-}
-
-PS_READ_FUNC(msession)
-{
- ELOG( "ps_read_msession");
- *val = PHPMsessionGetData(key);
- if(*val)
- {
- *vallen = strlen(*val);
- }
- else
- {
- *val = emalloc(1);
- **val=0;
- *vallen = 0;
- }
- return SUCCESS;
-}
-
-PS_WRITE_FUNC(msession)
-{
- ELOG( "ps_write_msession");
- return (PHPMsessionSetData(key,val)) ? SUCCESS : FAILURE;
-}
-
-PS_DESTROY_FUNC(msession)
-{
- ELOG( "ps_destroy_msession");
- return (PHPMsessionDestroy(key)) ? SUCCESS : FAILURE;
-}
-
-PS_GC_FUNC(msession)
-{
- ELOG( "ps_gc_msession");
- return SUCCESS;
-}
-
-#ifdef HAVE_PHP_SESSION_CREATESID
-PS_CREATE_SID_FUNC(msession)
-{
- if(s_reqb && s_conn)
- {
- ELOG("Should create a new session");
- FormatRequest(&s_reqb, REQ_UNIQ,"", "", "",SID_LEN);
- DoRequest(s_conn, &s_reqb);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- if(newlen)
- *newlen = SID_LEN;
- return safe_estrdup(s_reqb->req.datum);
- }
- else
- {
- php_error(E_WARNING, s_szErrFmt, ReqbErr(s_reqb));
- }
- }
- ELOG("Yikes, could not get sid from msession");
- return php_session_create_id(mod_data, newlen TSRMLS_CC);
-}
-#endif /* HAVE_PHP_SESSION_CREATESID */
-#endif /* HAVE_PHP_SESSION */
-#endif /* HAVE_MSESSION */
-
diff --git a/ext/msession/msession.php b/ext/msession/msession.php
deleted file mode 100644
index 4eb9d9b6cd..0000000000
--- a/ext/msession/msession.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'msession';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/msession/php_msession.h b/ext/msession/php_msession.h
deleted file mode 100644
index efae5b44f3..0000000000
--- a/ext/msession/php_msession.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | msession 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Mark Woodward <markw@mohawksoft.com> |
- | Portions copyright the PHP group. |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_MSESSION_H
-#define PHP_MSESSION_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_MSESSION
-
-extern zend_module_entry msession_module_entry;
-#define phpext_msession_ptr &msession_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MSESSION_API __declspec(dllexport)
-#else
-#define PHP_MSESSION_API
-#endif
-
-PHP_MINIT_FUNCTION(msession);
-PHP_MSHUTDOWN_FUNCTION(msession);
-PHP_RINIT_FUNCTION(msession);
-PHP_RSHUTDOWN_FUNCTION(msession);
-PHP_MINFO_FUNCTION(msession);
-
-PHP_FUNCTION(msession_connect);
-PHP_FUNCTION(msession_disconnect);
-PHP_FUNCTION(msession_lock);
-PHP_FUNCTION(msession_unlock);
-PHP_FUNCTION(msession_ctl);
-PHP_FUNCTION(msession_count);
-PHP_FUNCTION(msession_create);
-PHP_FUNCTION(msession_destroy);
-PHP_FUNCTION(msession_set);
-PHP_FUNCTION(msession_get);
-PHP_FUNCTION(msession_find);
-PHP_FUNCTION(msession_get_array);
-PHP_FUNCTION(msession_set_array);
-PHP_FUNCTION(msession_timeout);
-PHP_FUNCTION(msession_inc);
-PHP_FUNCTION(msession_set_data);
-PHP_FUNCTION(msession_get_data);
-PHP_FUNCTION(msession_listvar);
-PHP_FUNCTION(msession_list);
-PHP_FUNCTION(msession_uniq);
-PHP_FUNCTION(msession_randstr);
-PHP_FUNCTION(msession_plugin);
-PHP_FUNCTION(msession_call);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(msession)
- int global_variable;
- void *conn;
- char *host;
-ZEND_END_MODULE_GLOBALS(msession)
-
-*/
-/* In every function that needs to use variables in php_msession_globals,
- do call MSESSIONLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as MSESSIONG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define MSESSIONG(v) (msession_globals->v)
-#define MSESSIONLS_FETCH() php_msession_globals *msession_globals = ts_resource(msession_globals_id)
-#else
-#define MSESSIONG(v) (msession_globals.v)
-#define MSESSIONLS_FETCH()
-#endif
-
-#else
-
-#define phpext_msession_ptr NULL
-
-#endif
-
-#endif /* PHP_MSESSION_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/msession/reqclient.h b/ext/msession/reqclient.h
deleted file mode 100644
index f8b2695d1e..0000000000
--- a/ext/msession/reqclient.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | msession 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Mark Woodward <markw@mohawksoft.com> |
- | Portions copyright the PHP group. |
- +----------------------------------------------------------------------+
- */
-
-/*
---------------------------------------------------------------------------
- These are definitions are pulled from Phoenix.
- It would probably be easier to maintain one file,
- but some phoenix header files conflict with other
- project header files common to PHP. Besides, this
- allows this header to be PHP license and Phoenix to
- be LGPL with no conflicts.
-
- MAKE NO CHANGES TO THIS FILE IT. MUST REMAIN CONSTANT
- WITH PHOENIX OR IT WILL NOT WORK.
---------------------------------------------------------------------------
-*/
-enum REQ_TYPES
-{
- REQ_ERR,
- REQ_OK,
- REQ_CTL,
- REQ_SETVAL,
- REQ_GETVAL,
- REQ_CREATE,
- REQ_DROP,
- REQ_GETALL,
- REQ_FIND,
- REQ_COUNT,
- REQ_FLUSH,
- REQ_SLOCK,
- REQ_SUNLOCK,
- REQ_TIMEOUT,
- REQ_INC,
- REQ_DATAGET,
- REQ_DATASET,
- REQ_LIST,
- REQ_LISTVAR,
- REQ_UNIQ,
- REQ_RANDSTR,
- REQ_PLUGIN,
- REQ_CALL,
- REQ_SERIALIZE,
- REQ_LAST,
- REQ_INTERNAL_BEGIN=1023,
- REQ_POPEN,
- REQ_PCLOSE,
- REQ_LOADDLL,
- REQ_INTERNALLAST,
-};
-enum REQ_ERRORS
-{
- REQE_NOERROR=0,
- REQE_NOSESSION,
- REQE_DUPSESSION,
- REQE_NOWLOCK,
- REQE_NOVALUE,
- REQE_LOCKED,
- REQE_NOSEND,
- REQE_NOCONNECT,
- REQE_BADCONN,
- REQE_BADHDR,
- REQE_BADVER,
- REQE_BADLEN,
- REQE_BUFFER,
- REQE_DENIED,
- REQE_NOFN,
- REQE_UNKNOWN
-};
-
-typedef struct _requestPacket
-{
- int version;
- int stat;
- int len;
- int session;
- int name;
- int value;
- int param;
- char datum[0];
-}REQ;
-
-typedef struct _requestBuf
-{
- unsigned int type;
- unsigned int size;
- REQ req;
-}REQB;
-
-#define MAX_REQ 16384
-
-#define REQB_STATIC 1
-#define REQB_DYNAMIC 2
-
-#define REQ_STAT_EXIST 0
-#define REQ_STAT_TTL 1
-#define REQ_STAT_AGE 2
-#define REQ_STAT_TLA 3
-#define REQ_STAT_CTIM 4
-#define REQ_STAT_TOUCH 5
-#define REQ_STAT_NOW 6
-
-
-#define STATIC_REQB( len ) \
- char buffer [ len ]; \
- REQB *preq = StaticRequestBuffer(buffer, len);
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-#define SIZEREQB(REQB,SIZE) (((REQB)->size >= (unsigned int) SIZE) ? REQB : SizeRequestBuffer(REQB,SIZE))
-REQB *AllocateRequestBuffer(unsigned size);
-void FreeRequestBuffer(REQB *req);
-REQB *SizeRequestBuffer(REQB *req, unsigned int size);
-REQB *StaticRequestBuffer(char *buffer, unsigned int cb);
-
-int FormatRequest(REQB **buffer, int stat, const char *session, const char *name, const char *value, int param);
-int FormatRequestMulti(REQB **buffer, int stat, char *session, int n, char **pairs, int param);
-int FormatRequestStrings(REQB **ppreq, int stat, char *session, int n, char **strings);
-int DoSingleRequest(char *hostname, int port, REQB **preq);
-void *OpenReqConn(char *hostname, int port);
-void CloseReqConn(void *conn);
-int DoRequest(void *conn, REQB **preq);
-char *ReqbErr(REQB *reqb);
-
-#define ASSERT_STAT(PREQ) if(PREQ->stat != REQ_OK) \
- {fprintf(stderr, "Error in Request %s %d %s\n", \
- __FILE__,__LINE__, ReqErr(PREQ->param)); exit(-1); }
-
-#if defined (__cplusplus)
- // C API but with class definitions
- int ReadRequestTimeout(REQB **ppreq, MSock *sock, int timeout);
- int ReadRequest(REQB **preq, MSock *sock);
- int WriteRequest(REQB *preq, MSock *sock);
-}
-#endif
-
diff --git a/ext/msql/CREDITS b/ext/msql/CREDITS
deleted file mode 100644
index 31ad918eaf..0000000000
--- a/ext/msql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mSQL
-Zeev Suraski
diff --git a/ext/msql/config.m4 b/ext/msql/config.m4
deleted file mode 100644
index 093dfa54e9..0000000000
--- a/ext/msql/config.m4
+++ /dev/null
@@ -1,42 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl
-dnl Test mSQL version by checking if msql.h has "IDX_TYPE" defined.
-dnl
-AC_DEFUN(PHP_MSQL_VERSION,[
- AC_MSG_CHECKING([mSQL version])
- ac_php_oldcppflags=$CPPFLAGS
- CPPFLAGS="$INCLUDES $CPPFLAGS"
- AC_TRY_COMPILE([#include <sys/types.h>
-#include "msql.h"],[int i = IDX_TYPE],[
- AC_DEFINE(MSQL1,0,[ ])
- MSQL_VERSION="2.0 or newer"
- ],[
- AC_DEFINE(MSQL1,1,[ ])
- MSQL_VERSION=1.0
- ])
- CPPFLAGS=$ac_php_oldcppflags
- AC_MSG_RESULT($MSQL_VERSION)
-])
-
-PHP_ARG_WITH(msql,for mSQL support,
-[ --with-msql[=DIR] Include mSQL support. DIR is the mSQL base
- install directory, defaults to /usr/local/Hughes.])
-
- if test "$PHP_MSQL" != "no"; then
- if test "$PHP_MSQL" = "yes"; then
- MSQL_INCDIR=/usr/local/Hughes/include
- MSQL_LIBDIR=/usr/local/Hughes/lib
- else
- MSQL_INCDIR=$PHP_MSQL/include
- MSQL_LIBDIR=$PHP_MSQL/lib
- fi
- PHP_ADD_LIBRARY_WITH_PATH(msql, $MSQL_LIBDIR, MSQL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MSQL_INCDIR)
- AC_DEFINE(HAVE_MSQL,1,[ ])
- PHP_SUBST(MSQL_SHARED_LIBADD)
- PHP_NEW_EXTENSION(msql, php_msql.c, $ext_shared)
- PHP_MSQL_VERSION
- fi
diff --git a/ext/msql/msql.dsp b/ext/msql/msql.dsp
deleted file mode 100644
index 7b77d36edd..0000000000
--- a/ext/msql/msql.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="msql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=msql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "msql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "msql.mak" CFG="msql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "msql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "msql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "msql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /D "WIN32" /D "COMPILE_DL_MSQL" /D ZTS=1 /D HAVE_MSQL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib php4ts.lib msql_dll.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_msql.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "msql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSQL=1 /D COMPILE_DL_MSQL=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib php4ts_debug.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_msql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "msql - Win32 Release_TS"
-# Name "msql - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_msql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_msql.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/msql/php_msql.c b/ext/msql/php_msql.c
deleted file mode 100644
index c253afdcaa..0000000000
--- a/ext/msql/php_msql.c
+++ /dev/null
@@ -1,1321 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_msql.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-
-#if HAVE_MSQL
-
-#define OS_UNIX 1
-
-#if defined(WIN32) && defined(MSQL1)
-#include <msql1.h>
-#else
-#include <msql.h>
-#endif
-
-static php_msql_globals msql_globals;
-
-#define MSQL_ASSOC 1<<0
-#define MSQL_NUM 1<<1
-#define MSQL_BOTH (MSQL_ASSOC|MSQL_NUM)
-
-/* {{{ msql_functions[]
- */
-function_entry msql_functions[] = {
- PHP_FE(msql_connect, NULL)
- PHP_FE(msql_pconnect, NULL)
- PHP_FE(msql_close, NULL)
- PHP_FE(msql_select_db, NULL)
- PHP_FE(msql_create_db, NULL)
- PHP_FE(msql_drop_db, NULL)
- PHP_FE(msql_query, NULL)
- PHP_FE(msql_db_query, NULL)
- PHP_FE(msql_list_dbs, NULL)
- PHP_FE(msql_list_tables, NULL)
- PHP_FE(msql_list_fields, NULL)
- PHP_FE(msql_error, NULL)
- PHP_FE(msql_result, NULL)
- PHP_FE(msql_num_rows, NULL)
- PHP_FE(msql_num_fields, NULL)
- PHP_FE(msql_fetch_row, NULL)
- PHP_FE(msql_fetch_array, NULL)
- PHP_FE(msql_fetch_object, NULL)
- PHP_FE(msql_data_seek, NULL)
- PHP_FE(msql_fetch_field, NULL)
- PHP_FE(msql_field_seek, NULL)
- PHP_FE(msql_free_result, NULL)
- PHP_FE(msql_field_name, NULL)
- PHP_FE(msql_field_table, NULL)
- PHP_FE(msql_field_len, NULL)
- PHP_FE(msql_field_type, NULL)
- PHP_FE(msql_field_flags, NULL)
-
- PHP_FALIAS(msql_fieldname, msql_field_name, NULL)
- PHP_FALIAS(msql_fieldtable, msql_field_table, NULL)
- PHP_FALIAS(msql_fieldlen, msql_field_len, NULL)
- PHP_FALIAS(msql_fieldtype, msql_field_type, NULL)
- PHP_FALIAS(msql_fieldflags, msql_field_flags, NULL)
-
- PHP_FALIAS(msql_regcase, sql_regcase, NULL)
-
- PHP_FALIAS(msql_affected_rows, msql_affected_rows, NULL)
-
- /* for downwards compatability */
- PHP_FALIAS(msql, msql_db_query, NULL)
- PHP_FALIAS(msql_selectdb, msql_select_db, NULL)
- PHP_FALIAS(msql_createdb, msql_create_db, NULL)
- PHP_FALIAS(msql_dropdb, msql_drop_db, NULL)
- PHP_FALIAS(msql_freeresult, msql_free_result, NULL)
- PHP_FALIAS(msql_numfields, msql_num_fields, NULL)
- PHP_FALIAS(msql_numrows, msql_num_rows, NULL)
- PHP_FALIAS(msql_listdbs, msql_list_dbs, NULL)
- PHP_FALIAS(msql_listtables, msql_list_tables, NULL)
- PHP_FALIAS(msql_listfields, msql_list_fields, NULL)
- PHP_FALIAS(msql_dbname, msql_result, NULL)
- PHP_FALIAS(msql_tablename, msql_result, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry msql_module_entry = {
- STANDARD_MODULE_HEADER,
- "msql", msql_functions, PHP_MINIT(msql), NULL, PHP_RINIT(msql), NULL,
- PHP_MINFO(msql), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_MSQL
-ZEND_GET_MODULE(msql)
-#endif
-
-typedef struct {
- m_result *result;
- int af_rows;
-} m_query;
-
-#define MSQL_GET_QUERY(res) \
- ZEND_FETCH_RESOURCE(msql_query, m_query *, &res, -1, "mSQL result", msql_globals.le_query); \
- msql_result = msql_query->result
-
-static void _delete_query(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- m_query *query = (m_query *)rsrc->ptr;
-
- if(query->result) msqlFreeResult(query->result);
- efree(query);
-}
-
-static m_query *php_msql_query_wrapper(m_result *res, int af_rows)
-{
- m_query *query = (m_query *) emalloc(sizeof(m_query));
-
- query->result = res;
- query->af_rows = af_rows;
-
- return query;
-}
-
-static void _close_msql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int link = (int)rsrc->ptr;
-
- msqlClose(link);
- msql_globals.num_links--;
-}
-
-
-static void _close_msql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int link = (int)rsrc->ptr;
-
- msqlClose(link);
- msql_globals.num_persistent--;
- msql_globals.num_links--;
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(msql)
-{
- if (cfg_get_long("msql.allow_persistent",&msql_globals.allow_persistent)==FAILURE) {
- msql_globals.allow_persistent=1;
- }
- if (cfg_get_long("msql.max_persistent",&msql_globals.max_persistent)==FAILURE) {
- msql_globals.max_persistent=-1;
- }
- if (cfg_get_long("msql.max_links",&msql_globals.max_links)==FAILURE) {
- msql_globals.max_links=-1;
- }
- msql_globals.num_persistent=0;
- msql_globals.le_query = zend_register_list_destructors_ex(_delete_query, NULL, "msql query", module_number);
- msql_globals.le_link = zend_register_list_destructors_ex(_close_msql_link, NULL, "msql link", module_number);
- msql_globals.le_plink = zend_register_list_destructors_ex(NULL, _close_msql_plink, "msql link persistent", module_number);
-
- Z_TYPE(msql_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("MSQL_ASSOC", MSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSQL_NUM", MSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSQL_BOTH", MSQL_BOTH, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(msql)
-{
- msql_globals.default_link=-1;
- msql_globals.num_links = msql_globals.num_persistent;
- msqlErrMsg[0]=0;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(msql)
-{
- char maxp[32],maxl[32];
-
- if (msql_globals.max_persistent==-1) {
- snprintf(maxp, 31, "%d/unlimited", msql_globals.num_persistent );
- } else {
- snprintf(maxp, 31, "%d/%ld", msql_globals.num_persistent, msql_globals.max_persistent);
- }
- maxp[31]=0;
-
- if (msql_globals.max_links==-1) {
- snprintf(maxl, 15, "%d/unlimited", msql_globals.num_links );
- } else {
- snprintf(maxl, 15, "%d/%ld", msql_globals.num_links, msql_globals.max_links);
- }
- maxl[31]=0;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "MSQL Support", "enabled" );
- php_info_print_table_row(2, "Allow Persistent Links", (msql_globals.allow_persistent?"yes":"no") );
- php_info_print_table_row(2, "Persistent Links", maxp );
- php_info_print_table_row(2, "Total Links", maxl );
- php_info_print_table_end();
-
-}
-/* }}} */
-
-/* {{{ php_msql_do_connect
- */
-static void php_msql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
-{
- char *host;
- char *hashed_details;
- int hashed_details_length;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- host=NULL;
- hashed_details=estrndup("msql_",5);
- hashed_details_length=4+1;
- break;
- case 1: {
- pval *yyhost;
-
- if (getParameters(ht, 1, &yyhost) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- host = Z_STRVAL_P(yyhost);
- hashed_details_length = Z_STRLEN_P(yyhost)+4+1;
- hashed_details = emalloc(hashed_details_length+1);
- sprintf(hashed_details,"msql_%s",Z_STRVAL_P(yyhost)); /* SAFE */
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (!msql_globals.allow_persistent) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- if (msql_globals.max_links!=-1 && msql_globals.num_links>=msql_globals.max_links) {
- php_error(E_WARNING,"mSQL: Too many open links (%d)",msql_globals.num_links);
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (msql_globals.max_persistent!=-1 && msql_globals.num_persistent>=msql_globals.max_persistent) {
- php_error(E_WARNING,"mSQL: Too many open persistent links (%d)",msql_globals.num_persistent);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- /* create the link */
- if ((msql=msqlConnect(host))==-1) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = msql_globals.le_plink;
- new_le.ptr = (void *) msql;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- msql_globals.num_persistent++;
- msql_globals.num_links++;
- } else { /* we do */
- if (Z_TYPE_P(le) != msql_globals.le_plink) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-#if 0
- /* ensure that the link did not die */
- /* still have to find a way to do this nicely with mSQL */
- if (msql_stat(le->ptr)==NULL) { /* the link died */
- if (msql_connect(le->ptr,host,user,passwd)==NULL) {
- php_error(E_WARNING,"mSQL link lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list),hashed_details,hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
-#endif
- msql = (int) le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, (void *) msql, msql_globals.le_plink);
- } else {
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual msql link sits.
- * if it doesn't, open a new msql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),hashed_details,hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==msql_globals.le_link || type==msql_globals.le_plink)) {
- Z_LVAL_P(return_value) = msql_globals.default_link = link;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (msql_globals.max_links!=-1 && msql_globals.num_links>=msql_globals.max_links) {
- php_error(E_WARNING,"mSQL: Too many open links (%d)",msql_globals.num_links);
- efree(hashed_details);
- RETURN_FALSE;
- }
- if ((msql=msqlConnect(host))==-1) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, (void *) msql, msql_globals.le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- msql_globals.num_links++;
- }
- efree(hashed_details);
- msql_globals.default_link=Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ php_msql_get_default_link
- */
-static int php_msql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (msql_globals.default_link==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_msql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return msql_globals.default_link;
-}
-/* }}} */
-
-/* {{{ proto int msql_connect([string hostname[:port]] [, string username] [, string password])
- Open a connection to an mSQL Server */
-PHP_FUNCTION(msql_connect)
-{
- php_msql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto int msql_pconnect([string hostname[:port]] [, string username] [, string password])
- Open a persistent connection to an mSQL Server */
-PHP_FUNCTION(msql_pconnect)
-{
- php_msql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto int msql_close([int link_identifier])
- Close an mSQL connection */
-PHP_FUNCTION(msql_close)
-{
- pval *msql_link;
- int id;
- int msql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = msql_globals.default_link;
- break;
- case 1:
- if (getParameters(ht, 1, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_P(msql_link));
- }
-
- if (id!=-1
- || (msql_link && Z_RESVAL_P(msql_link)==msql_globals.default_link)) {
- zend_list_delete(msql_globals.default_link);
- msql_globals.default_link = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int msql_select_db(string database_name [, int link_identifier])
- Select an mSQL database */
-PHP_FUNCTION(msql_select_db)
-{
- pval *db,*msql_link;
- int id;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
-
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto int msql_create_db(string database_name [, int link_identifier])
- Create an mSQL database */
-PHP_FUNCTION(msql_create_db)
-{
- pval *db,*msql_link;
- int id;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlCreateDB(msql,Z_STRVAL_P(db))<0) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto int msql_drop_db(string database_name [, int link_identifier])
- Drop (delete) an mSQL database */
-PHP_FUNCTION(msql_drop_db)
-{
- pval *db,*msql_link;
- int id;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlDropDB(msql,Z_STRVAL_P(db))<0) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto int msql_query(string query [, int link_identifier])
- Send an SQL query to mSQL */
-PHP_FUNCTION(msql_query)
-{
- pval *query,*msql_link;
- int id;
- int msql;
- int af_rows;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &query)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = msql_globals.default_link;
- break;
- case 2:
- if (getParameters(ht, 2, &query, &msql_link)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(query);
- if ((af_rows = msqlQuery(msql,Z_STRVAL_P(query)))==-1) {
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msqlStoreResult(), af_rows), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto int msql_db_query(string database_name, string query [, int link_identifier])
- Send an SQL query to mSQL */
-PHP_FUNCTION(msql_db_query)
-{
- pval *db,*query,*msql_link;
- int id;
- int msql;
- int af_rows;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (getParameters(ht, 2, &db, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 3:
- if (getParameters(ht, 3, &db, &query, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- }
-
- convert_to_string(query);
- if ((af_rows = msqlQuery(msql,Z_STRVAL_P(query)))==-1) {
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msqlStoreResult(), af_rows), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto int msql_list_dbs([int link_identifier])
- List databases available on an mSQL server */
-PHP_FUNCTION(msql_list_dbs)
-{
- pval *msql_link;
- int id;
- int msql;
- m_result *msql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 1:
- if (getParameters(ht, 1, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- if ((msql_result=msqlListDBs(msql))==NULL) {
- php_error(E_WARNING,"Unable to save mSQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msql_result, 0), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto int msql_list_tables(string database_name [, int link_identifier])
- List tables in an mSQL database */
-PHP_FUNCTION(msql_list_tables)
-{
- pval *db,*msql_link;
- int id;
- int msql;
- m_result *msql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- }
- if ((msql_result=msqlListTables(msql))==NULL) {
- php_error(E_WARNING,"Unable to save mSQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msql_result, 0), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto int msql_list_fields(string database_name, string table_name [, int link_identifier])
- List mSQL result fields */
-PHP_FUNCTION(msql_list_fields)
-{
- pval *db,*table,*msql_link;
- int id;
- int msql;
- m_result *msql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (getParameters(ht, 2, &db, &table)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 3:
- if (getParameters(ht, 3, &db, &table, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- }
- convert_to_string(table);
- if ((msql_result=msqlListFields(msql,Z_STRVAL_P(table)))==NULL) {
- php_error(E_WARNING,"Unable to save mSQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msql_result, 0), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto string msql_error([int link_identifier])
- Returns the text of the error message from previous mSQL operation */
-PHP_FUNCTION(msql_error)
-{
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
- RETURN_STRING(msqlErrMsg,1);
-}
-/* }}} */
-
-/* {{{ proto int msql_result(int query, int row [, mixed field])
- Get result data */
-PHP_FUNCTION(msql_result)
-{
- pval *result, *row, *field=NULL;
- m_result *msql_result;
- m_query *msql_query;
- m_row sql_row;
- int field_offset=0;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (getParameters(ht, 2, &result, &row)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (getParameters(ht, 3, &result, &row, &field)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- MSQL_GET_QUERY(result);
-
- convert_to_long(row);
- if (Z_LVAL_P(row)<0 || Z_LVAL_P(row)>=msqlNumRows(msql_result)) {
- php_error(E_WARNING,"Unable to jump to row %d on mSQL query index %d",Z_LVAL_P(row),Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlDataSeek(msql_result,Z_LVAL_P(row));
- if ((sql_row=msqlFetchRow(msql_result))==NULL) { /* shouldn't happen? */
- RETURN_FALSE;
- }
-
- if (field) {
- switch(Z_TYPE_P(field)) {
- case IS_STRING: {
- int i=0;
- m_field *tmp_field;
- char *table_name,*field_name,*tmp;
-
- if ((tmp=strchr(Z_STRVAL_P(field),'.'))) {
- *tmp = 0;
- table_name = estrdup(Z_STRVAL_P(field));
- field_name = estrdup(tmp+1);
- } else {
- table_name = NULL;
- field_name = estrndup(Z_STRVAL_P(field),Z_STRLEN_P(field));
- }
- msqlFieldSeek(msql_result,0);
- while ((tmp_field=msqlFetchField(msql_result))) {
- if ((!table_name || !strcasecmp(tmp_field->table,table_name)) && !strcasecmp(tmp_field->name,field_name)) {
- field_offset = i;
- break;
- }
- i++;
- }
- if (!tmp_field) { /* no match found */
- php_error(E_WARNING,"%s%s%s not found in mSQL query index %d",
- (table_name?table_name:""), (table_name?".":""), field_name, Z_LVAL_P(result));
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- RETURN_FALSE;
- }
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- }
- break;
- default:
- convert_to_long(field);
- field_offset = Z_LVAL_P(field);
- if (field_offset<0 || field_offset>=msqlNumFields(msql_result)) {
- php_error(E_WARNING,"Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
- }
-
- if (sql_row[field_offset]) {
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(sql_row[field_offset],0,&Z_STRLEN_P(return_value),0 TSRMLS_CC);
- } else {
- Z_STRLEN_P(return_value) = (sql_row[field_offset]?strlen(sql_row[field_offset]):0);
- Z_STRVAL_P(return_value) = (char *) safe_estrndup(sql_row[field_offset],Z_STRLEN_P(return_value));
- }
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_FALSE(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto int msql_num_rows(int query)
- Get number of rows in a result */
-PHP_FUNCTION(msql_num_rows)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- RETVAL_LONG(msql_result ? msqlNumRows(msql_result) : 0);
-}
-/* }}} */
-
-/* {{{ proto int msql_num_fields(int query)
- Get number of fields in a result */
-PHP_FUNCTION(msql_num_fields)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- RETVAL_LONG(msql_result ? msqlNumFields(msql_result) : 0);
-}
-/* }}} */
-
-/* {{{ php_msql_fetch_hash
- */
-static void php_msql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
- pval *result, *arg2;
- m_result *msql_result;
- m_row msql_row;
- m_field *msql_field;
- m_query *msql_query;
- int num_fields;
- int i;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = MSQL_BOTH;
- }
- break;
- case 2:
- if (getParameters(ht, 2, &result, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(arg2);
- result_type = Z_LVAL_P(arg2);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- MSQL_GET_QUERY(result);
- if (!msql_result || (msql_row=msqlFetchRow(msql_result))==NULL) {
- RETURN_FALSE;
- }
-
- num_fields = msqlNumFields(msql_result);
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- msqlFieldSeek(msql_result,0);
- for (msql_field=msqlFetchField(msql_result),i=0; msql_field; msql_field=msqlFetchField(msql_result),i++) {
- if (msql_row[i]) {
- char *data;
- int data_len;
- int should_copy;
-
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(msql_row[i], 0, &data_len, 0 TSRMLS_CC);
- should_copy = 0;
- } else {
- data = msql_row[i];
- data_len = strlen(data);
- should_copy = 1;
- }
-
- if (result_type & MSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy = 1;
- }
-
- if (result_type & MSQL_ASSOC) {
- add_assoc_stringl(return_value, msql_field->name, data, data_len, should_copy);
- }
- } else {
- /*
- add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr, 1);
- */
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array msql_fetch_row(int query)
- Get a result row as an enumerated array */
-PHP_FUNCTION(msql_fetch_row)
-{
- php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSQL_NUM);
-}
-/* }}} */
-
-/* {{{ proto object msql_fetch_object(int query [, int result_type])
- Fetch a result row as an object */
-PHP_FUNCTION(msql_fetch_object)
-{
- php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array msql_fetch_array(int query [, int result_type])
- Fetch a result row as an associative array */
-PHP_FUNCTION(msql_fetch_array)
-{
- php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int msql_data_seek(int query, int row_number)
- Move internal result pointer */
-PHP_FUNCTION(msql_data_seek)
-{
- pval *result,*offset;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- convert_to_long(offset);
- if (!msql_result ||
- Z_LVAL_P(offset)<0 ||
- Z_LVAL_P(offset)>=msqlNumRows(msql_result)) {
- php_error(E_WARNING,"Offset %d is invalid for mSQL query index %d",Z_LVAL_P(offset),Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlDataSeek(msql_result,Z_LVAL_P(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_msql_get_field_name
- */
-static char *php_msql_get_field_name(int field_type)
-{
- switch (field_type) {
-#if MSQL1
- case INT_TYPE:
- return "int";
- break;
- case CHAR_TYPE:
- return "char";
- break;
- case REAL_TYPE:
- return "real";
- break;
- case IDENT_TYPE:
- return "ident";
- break;
- case NULL_TYPE:
- return "null";
- break;
-#else
- case INT_TYPE:
- case UINT_TYPE:
- case CHAR_TYPE:
- case TEXT_TYPE:
- case REAL_TYPE:
- case NULL_TYPE:
- case DATE_TYPE:
- case TIME_TYPE:
- case MONEY_TYPE:
- return msqlTypeNames[field_type];
- break;
-#endif
- default:
- return "unknown";
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto object msql_fetch_field(int query [, int field_offset])
- Get column information from a result and return as an object */
-PHP_FUNCTION(msql_fetch_field)
-{
- pval *result, *field=NULL;
- m_result *msql_result;
- m_field *msql_field;
- m_query *msql_query;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (getParameters(ht, 2, &result, &field)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(field);
- default:
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
-
- if (field) {
- if (Z_LVAL_P(field)<0 || Z_LVAL_P(field)>=msqlNumRows(msql_result)) {
- php_error(E_NOTICE,"mSQL: Bad field offset specified");
- RETURN_FALSE;
- }
- msqlFieldSeek(msql_result,Z_LVAL_P(field));
- }
- if (!msql_result || (msql_field=msqlFetchField(msql_result))==NULL) {
- RETURN_FALSE;
- }
- if (object_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- add_property_string(return_value, "name",(msql_field->name?msql_field->name:empty_string), 1);
- add_property_string(return_value, "table",(msql_field->table?msql_field->table:empty_string), 1);
- add_property_long(return_value, "not_null",IS_NOT_NULL(msql_field->flags));
-#if MSQL1
- add_property_long(return_value, "primary_key",(msql_field->flags&PRI_KEY_FLAG?1:0));
-#else
- add_property_long(return_value, "unique",(msql_field->flags&UNIQUE_FLAG?1:0));
-#endif
-
- add_property_string(return_value, "type",php_msql_get_field_name(Z_TYPE_P(msql_field)), 1);
-}
-/* }}} */
-
-/* {{{ proto int msql_field_seek(int query, int field_offset)
- Set result pointer to a specific field offset */
-PHP_FUNCTION(msql_field_seek)
-{
- pval *result, *offset;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- convert_to_long(offset);
- if(!msql_result) {
- RETURN_FALSE;
- }
- if (Z_LVAL_P(offset)<0 || Z_LVAL_P(offset)>=msqlNumFields(msql_result)) {
- php_error(E_WARNING,"Field %d is invalid for mSQL query index %d",
- Z_LVAL_P(offset),Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlFieldSeek(msql_result,Z_LVAL_P(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-#define PHP_MSQL_FIELD_NAME 1
-#define PHP_MSQL_FIELD_TABLE 2
-#define PHP_MSQL_FIELD_LEN 3
-#define PHP_MSQL_FIELD_TYPE 4
-#define PHP_MSQL_FIELD_FLAGS 5
-
-/* {{{ php_msql_field_info
- */
-static void php_msql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- pval *result, *field;
- m_result *msql_result;
- m_field *msql_field;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- if(!msql_result) {
- RETURN_FALSE;
- }
- convert_to_long(field);
- if (Z_LVAL_P(field)<0 || Z_LVAL_P(field)>=msqlNumFields(msql_result)) {
- php_error(E_WARNING,"Field %d is invalid for mSQL query index %d",Z_LVAL_P(field),Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlFieldSeek(msql_result,Z_LVAL_P(field));
- if ((msql_field=msqlFetchField(msql_result))==NULL) {
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_MSQL_FIELD_NAME:
- Z_STRLEN_P(return_value) = strlen(msql_field->name);
- Z_STRVAL_P(return_value) = estrndup(msql_field->name,Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MSQL_FIELD_TABLE:
- Z_STRLEN_P(return_value) = strlen(msql_field->table);
- Z_STRVAL_P(return_value) = estrndup(msql_field->table,Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MSQL_FIELD_LEN:
- Z_LVAL_P(return_value) = msql_field->length;
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_MSQL_FIELD_TYPE:
- Z_STRVAL_P(return_value) = estrdup(php_msql_get_field_name(Z_TYPE_P(msql_field)));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MSQL_FIELD_FLAGS:
-#if MSQL1
- if ((msql_field->flags&NOT_NULL_FLAG) && (msql_field->flags&PRI_KEY_FLAG)) {
- Z_STRVAL_P(return_value) = estrndup("primary key not null",20);
- Z_STRLEN_P(return_value) = 20;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&NOT_NULL_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("not null",8);
- Z_STRLEN_P(return_value) = 8;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&PRI_KEY_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("primary key",11);
- Z_STRLEN_P(return_value) = 11;
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_FALSE(return_value);
- }
-#else
- if ((msql_field->flags&NOT_NULL_FLAG) && (msql_field->flags&UNIQUE_FLAG)) {
- Z_STRVAL_P(return_value) = estrndup("unique not null",15);
- Z_STRLEN_P(return_value) = 15;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&NOT_NULL_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("not null",8);
- Z_STRLEN_P(return_value) = 8;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&UNIQUE_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("unique",6);
- Z_STRLEN_P(return_value) = 6;
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_FALSE(return_value);
- }
-#endif
- break;
- default:
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string msql_field_name(int query, int field_index)
- Get the name of the specified field in a result */
-PHP_FUNCTION(msql_field_name)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_NAME);
-}
-/* }}} */
-
-/* {{{ proto string msql_field_table(int query, int field_offset)
- Get name of the table the specified field is in */
-PHP_FUNCTION(msql_field_table)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_TABLE);
-}
-/* }}} */
-
-/* {{{ proto int msql_field_len(int query, int field_offet)
- Returns the length of the specified field */
-PHP_FUNCTION(msql_field_len)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_LEN);
-}
-/* }}} */
-
-/* {{{ proto string msql_field_type(int query, int field_offset)
- Get the type of the specified field in a result */
-PHP_FUNCTION(msql_field_type)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_TYPE);
-}
-/* }}} */
-
-/* {{{ proto string msql_field_flags(int query, int field_offset)
- Get the flags associated with the specified field in a result */
-PHP_FUNCTION(msql_field_flags)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_FLAGS);
-}
-/* }}} */
-
-/* {{{ proto int msql_free_result(int query)
- Free result memory */
-PHP_FUNCTION(msql_free_result)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- zend_list_delete(Z_LVAL_P(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int msql_affected_rows(int query)
- Return number of affected rows */
-PHP_FUNCTION(msql_affected_rows)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if(ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- MSQL_GET_QUERY(result);
- RETVAL_LONG(msql_query->af_rows);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/msql/php_msql.h b/ext/msql/php_msql.h
deleted file mode 100644
index 5bbd55490d..0000000000
--- a/ext/msql/php_msql.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_MSQL_H
-#define PHP_MSQL_H
-
-#if HAVE_MSQL
-
-extern zend_module_entry msql_module_entry;
-#define msql_module_ptr &msql_module_entry
-
-/* mSQL functions */
-PHP_MINIT_FUNCTION(msql);
-PHP_RINIT_FUNCTION(msql);
-PHP_MSHUTDOWN_FUNCTION(msql);
-PHP_MINFO_FUNCTION(msql);
-
-PHP_FUNCTION(msql_connect);
-PHP_FUNCTION(msql_pconnect);
-PHP_FUNCTION(msql_close);
-PHP_FUNCTION(msql_select_db);
-PHP_FUNCTION(msql_create_db);
-PHP_FUNCTION(msql_drop_db);
-PHP_FUNCTION(msql_list_dbs);
-PHP_FUNCTION(msql_list_tables);
-PHP_FUNCTION(msql_list_fields);
-PHP_FUNCTION(msql_error);
-PHP_FUNCTION(msql_affected_rows);
-PHP_FUNCTION(msql_query);
-PHP_FUNCTION(msql_db_query);
-PHP_FUNCTION(msql_result);
-PHP_FUNCTION(msql_num_rows);
-PHP_FUNCTION(msql_num_fields);
-PHP_FUNCTION(msql_fetch_row);
-PHP_FUNCTION(msql_data_seek);
-PHP_FUNCTION(msql_fetch_field);
-PHP_FUNCTION(msql_field_seek);
-PHP_FUNCTION(msql_free_result);
-PHP_FUNCTION(msql_field_name);
-PHP_FUNCTION(msql_field_table);
-PHP_FUNCTION(msql_field_len);
-PHP_FUNCTION(msql_field_type);
-PHP_FUNCTION(msql_field_flags);
-PHP_FUNCTION(msql_fetch_array);
-PHP_FUNCTION(msql_fetch_object);
-
-typedef struct {
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- int le_query;
- int le_link;
- int le_plink;
-} php_msql_globals;
-
-#else
-
-#define msql_module_ptr NULL
-
-#endif
-
-#define phpext_msql_ptr msql_module_ptr
-
-#endif /* PHP_MSQL_H */
diff --git a/ext/mssql/CREDITS b/ext/mssql/CREDITS
deleted file mode 100644
index 548684afca..0000000000
--- a/ext/mssql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MS SQL
-Frank M. Kromann
diff --git a/ext/mssql/mssql.dsp b/ext/mssql/mssql.dsp
deleted file mode 100644
index ea79d3ba4e..0000000000
--- a/ext/mssql/mssql.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mssql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mssql - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mssql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mssql.mak" CFG="mssql - Win32 MSSQL 70 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mssql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mssql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mssql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mssql70.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\mssql-70\lib" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\mssql-70\lib" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mssql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mssql70.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\mssql-70\lib"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mssql.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\mssql-70\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mssql - Win32 Release_TS"
-# Name "mssql - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_mssql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mssql.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\mssql_win32_howto.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/mssql/mssql_win32_howto.txt b/ext/mssql/mssql_win32_howto.txt
deleted file mode 100644
index 901099fb64..0000000000
--- a/ext/mssql/mssql_win32_howto.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Rules for building MSSQL
-------------------------
-
-The MSSQL project contains 2 configurations.
-
-The files needed for each configurations are:
-
-Win32 Release_TS
-Win32 Debug_TS
-
- php_build\mssql-70\include\sqldb.h
- php_build\mssql-70\include\sqlfront.h
- php_build\mssql-70\lib\ntwdblib.lib
-
-php_build is a directory at the same level as php4.
-
-Start Visual Studio, load php_modules.dsw, select the MSSQL projects,
-configuration and build it.
-
-This module requires ntwdblib.dll and one or more of the following dll's
-
-dbmsadsn.dll
-dbmsrpcn.dll
-dbmsshrn.dll
-dbmssocn.dll for tcp/ip connections
-dbmsspxn.dll for ipx/spx connections
-dbmsvinn.dll
-dbnmpntw.dll for netbios connections
-
-All these files are installed while installing MS SQL Server. If the SQL Server
-is installed on another maschine you need to install the client tools on
-the web server as well.
-
-
- \ No newline at end of file
diff --git a/ext/mssql/php_mssql.c b/ext/mssql/php_mssql.c
deleted file mode 100644
index 0b0313b11d..0000000000
--- a/ext/mssql/php_mssql.c
+++ /dev/null
@@ -1,2145 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Frank M. Kromann <frank@frontbase.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef COMPILE_DL_MSSQL
-#define HAVE_MSSQL 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_mssql.h"
-#include "php_ini.h"
-
-#if HAVE_MSSQL
-#define SAFE_STRING(s) ((s)?(s):"")
-
-#define MSSQL_ASSOC 1<<0
-#define MSSQL_NUM 1<<1
-#define MSSQL_BOTH (MSSQL_ASSOC|MSSQL_NUM)
-
-static int le_result, le_link, le_plink, le_statement;
-
-static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC);
-static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC);
-
-static void _mssql_bind_hash_dtor(void *data);
-static unsigned char a3_arg_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-
-function_entry mssql_functions[] = {
- PHP_FE(mssql_connect, NULL)
- PHP_FE(mssql_pconnect, NULL)
- PHP_FE(mssql_close, NULL)
- PHP_FE(mssql_select_db, NULL)
- PHP_FE(mssql_query, NULL)
- PHP_FE(mssql_fetch_batch, NULL)
- PHP_FE(mssql_rows_affected, NULL)
- PHP_FE(mssql_free_result, NULL)
- PHP_FE(mssql_get_last_message, NULL)
- PHP_FE(mssql_num_rows, NULL)
- PHP_FE(mssql_num_fields, NULL)
- PHP_FE(mssql_fetch_field, NULL)
- PHP_FE(mssql_fetch_row, NULL)
- PHP_FE(mssql_fetch_array, NULL)
- PHP_FE(mssql_fetch_assoc, NULL)
- PHP_FE(mssql_fetch_object, NULL)
- PHP_FE(mssql_field_length, NULL)
- PHP_FE(mssql_field_name, NULL)
- PHP_FE(mssql_field_type, NULL)
- PHP_FE(mssql_data_seek, NULL)
- PHP_FE(mssql_field_seek, NULL)
- PHP_FE(mssql_result, NULL)
- PHP_FE(mssql_next_result, NULL)
- PHP_FE(mssql_min_error_severity, NULL)
- PHP_FE(mssql_min_message_severity, NULL)
- PHP_FE(mssql_init, NULL)
- PHP_FE(mssql_bind, a3_arg_force_ref)
- PHP_FE(mssql_execute, NULL)
- PHP_FE(mssql_guid_string, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry mssql_module_entry =
-{
- STANDARD_MODULE_HEADER,
- "mssql",
- mssql_functions,
- PHP_MINIT(mssql),
- PHP_MSHUTDOWN(mssql),
- PHP_RINIT(mssql),
- PHP_RSHUTDOWN(mssql),
- PHP_MINFO(mssql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(mssql)
-
-#ifdef COMPILE_DL_MSSQL
-ZEND_GET_MODULE(mssql)
-#endif
-
-#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING,"MS SQL: A link to the server could not be established"); RETURN_FALSE; } }
-
-static PHP_INI_DISP(display_text_size)
-{
- char *value;
- TSRMLS_FETCH();
-
- if (type == PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (atoi(value) == -1) {
- PUTS("Server default");
- } else {
- php_printf("%s", value);
- }
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("mssql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_persistent, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_ENTRY_EX("mssql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.min_error_severity", "10", PHP_INI_ALL, OnUpdateInt, cfg_min_error_severity, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.min_message_severity", "10", PHP_INI_ALL, OnUpdateInt, cfg_min_message_severity, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_BOOLEAN("mssql.compatability_mode", "0", PHP_INI_ALL, OnUpdateBool, compatability_mode, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_ENTRY_EX("mssql.connect_timeout", "5", PHP_INI_ALL, OnUpdateInt, connect_timeout, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.timeout", "60", PHP_INI_ALL, OnUpdateInt, timeout, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.textsize", "-1", PHP_INI_ALL, OnUpdateInt, textsize, zend_mssql_globals, mssql_globals, display_text_size)
- STD_PHP_INI_ENTRY_EX("mssql.textlimit", "-1", PHP_INI_ALL, OnUpdateInt, textlimit, zend_mssql_globals, mssql_globals, display_text_size)
- STD_PHP_INI_ENTRY_EX("mssql.batchsize", "0", PHP_INI_ALL, OnUpdateInt, batchsize, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_BOOLEAN("mssql.datetimeconvert", "1", PHP_INI_ALL, OnUpdateBool, datetimeconvert, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_BOOLEAN("mssql.secure_connection", "0", PHP_INI_SYSTEM, OnUpdateBool, secure_connection, zend_mssql_globals, mssql_globals)
-PHP_INI_END()
-
-/* error handler */
-static int php_mssql_error_handler(DBPROCESS *dbproc, int severity, int dberr, int oserr, char *dberrstr, char *oserrstr)
-{
- TSRMLS_FETCH();
-
- if (severity >= MS_SQL_G(min_error_severity)) {
- php_error(E_WARNING,"MS SQL error: %s (severity %d)", dberrstr, severity);
- }
- return INT_CANCEL;
-}
-
-/* message handler */
-static int php_mssql_message_handler(DBPROCESS *dbproc, DBINT msgno,int msgstate, int severity,char *msgtext,char *srvname, char *procname,DBUSMALLINT line)
-{
- TSRMLS_FETCH();
-
- if (severity >= MS_SQL_G(min_message_severity)) {
- php_error(E_WARNING,"MS SQL message: %s (severity %d)", msgtext, severity);
- }
- if (MS_SQL_G(server_message)) {
- STR_FREE(MS_SQL_G(server_message));
- }
- MS_SQL_G(server_message) = estrdup(msgtext);
- return 0;
-}
-
-static int _clean_invalid_results(list_entry *le TSRMLS_DC)
-{
- if (Z_TYPE_P(le) == le_result) {
- mssql_link *mssql_ptr = ((mssql_result *) le->ptr)->mssql_ptr;
-
- if (!mssql_ptr->valid) {
- return 1;
- }
- }
- return 0;
-}
-
-static void _free_result(mssql_result *result, int free_fields)
-{
- int i,j;
-
- if (result->data) {
- for (i=0; i<result->num_rows; i++) {
- if (result->data[i]) {
- for (j=0; j<result->num_fields; j++) {
- zval_dtor(&result->data[i][j]);
- }
- efree(result->data[i]);
- }
- }
- efree(result->data);
- result->data = NULL;
- result->blocks_initialized = 0;
- }
-
- if (free_fields && result->fields) {
- for (i=0; i<result->num_fields; i++) {
- STR_FREE(result->fields[i].name);
- STR_FREE(result->fields[i].column_source);
- }
- efree(result->fields);
- }
-}
-
-static void _free_mssql_statement(mssql_statement *statement)
-{
- if (statement->binds) {
- zend_hash_destroy(statement->binds);
- efree(statement->binds);
- }
-
- efree(statement);
-}
-
-static void _free_mssql_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_result *result = (mssql_result *)rsrc->ptr;
-
- _free_result(result, 1);
- efree(result);
-}
-
-static void php_mssql_set_default_link(int id TSRMLS_DC)
-{
- if (MS_SQL_G(default_link)!=-1) {
- zend_list_delete(MS_SQL_G(default_link));
- }
- MS_SQL_G(default_link) = id;
- zend_list_addref(id);
-}
-
-static void _close_mssql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_link *mssql_ptr = (mssql_link *)rsrc->ptr;
-
- mssql_ptr->valid = 0;
- zend_hash_apply(&EG(regular_list),(apply_func_t) _clean_invalid_results TSRMLS_CC);
- dbclose(mssql_ptr->link);
- dbfreelogin(mssql_ptr->login);
- efree(mssql_ptr);
- MS_SQL_G(num_links)--;
-}
-
-
-static void _close_mssql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_link *mssql_ptr = (mssql_link *)rsrc->ptr;
-
- dbclose(mssql_ptr->link);
- dbfreelogin(mssql_ptr->login);
- free(mssql_ptr);
- MS_SQL_G(num_persistent)--;
- MS_SQL_G(num_links)--;
-}
-
-static void _mssql_bind_hash_dtor(void *data)
-{
- mssql_bind *bind= (mssql_bind *) data;
-
- zval_ptr_dtor(&(bind->zval));
-}
-
-static void php_mssql_init_globals(zend_mssql_globals *mssql_globals)
-{
- long compatability_mode;
-
- mssql_globals->num_persistent = 0;
- if (cfg_get_long("mssql.compatability_mode", &compatability_mode) == SUCCESS) {
- if (compatability_mode) {
- mssql_globals->get_column_content = php_mssql_get_column_content_without_type;
- } else {
- mssql_globals->get_column_content = php_mssql_get_column_content_with_type;
- }
- }
-}
-
-PHP_MINIT_FUNCTION(mssql)
-{
- ZEND_INIT_MODULE_GLOBALS(mssql, php_mssql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_statement = register_list_destructors(_free_mssql_statement, NULL);
- le_result = zend_register_list_destructors_ex(_free_mssql_result, NULL, "mssql result", module_number);
- le_link = zend_register_list_destructors_ex(_close_mssql_link, NULL, "mssql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_mssql_plink, "mssql link persistent", module_number);
- Z_TYPE(mssql_module_entry) = type;
-
- if (dbinit()==FAIL) {
- return FAILURE;
- }
-
- /* BEGIN MSSQL data types for mssql_bind */
- REGISTER_LONG_CONSTANT("MSSQL_ASSOC", MSSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSSQL_NUM", MSSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSSQL_BOTH", MSSQL_BOTH, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SQLTEXT",SQLTEXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLVARCHAR",SQLVARCHAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLCHAR",SQLCHAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLINT1",SQLINT1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLINT2",SQLINT2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLINT4",SQLINT4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLBIT",SQLBIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLFLT8",SQLFLT8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLFLTN",SQLFLTN, CONST_CS | CONST_PERSISTENT);
- /* END MSSQL data types for mssql_sp_bind */
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(mssql)
-{
- UNREGISTER_INI_ENTRIES();
- dbexit();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(mssql)
-{
- MS_SQL_G(default_link) = -1;
- MS_SQL_G(num_links) = MS_SQL_G(num_persistent);
- MS_SQL_G(appname) = estrndup("PHP 4.0",7);
- MS_SQL_G(server_message) = empty_string;
- MS_SQL_G(min_error_severity) = MS_SQL_G(cfg_min_error_severity);
- MS_SQL_G(min_message_severity) = MS_SQL_G(cfg_min_message_severity);
- if (MS_SQL_G(connect_timeout) < 1) MS_SQL_G(connect_timeout) = 1;
- dbsetlogintime(MS_SQL_G(connect_timeout));
- if (MS_SQL_G(timeout) < 0) MS_SQL_G(timeout) = 60;
- dbsettime(MS_SQL_G(timeout));
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(mssql)
-{
- STR_FREE(MS_SQL_G(appname));
- if (MS_SQL_G(server_message)) {
- STR_FREE(MS_SQL_G(server_message));
- }
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(mssql)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "MSSQL Support", "enabled");
-
- sprintf(buf, "%ld", MS_SQL_G(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", MS_SQL_G(num_links));
- php_info_print_table_row(2, "Active Links", buf);
-
- php_info_print_table_row(2, "Library version", MSSQL_VERSION);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-
-static void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user, *passwd, *host;
- char *hashed_details;
- int hashed_details_length;
- mssql_link mssql, *mssql_ptr;
- char buffer[32];
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- host=user=passwd=NULL;
- hashed_details_length=5+3;
- hashed_details = (char *) emalloc(hashed_details_length);
- strcpy(hashed_details,"mssql___");
- break;
- case 1: {
- zval **yyhost;
-
- if (zend_get_parameters_ex(1, &yyhost)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- user=passwd=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length);
- sprintf(hashed_details,"mssql_%s__",Z_STRVAL_PP(yyhost));
- }
- break;
- case 2: {
- zval **yyhost,**yyuser;
-
- if (zend_get_parameters_ex(2, &yyhost, &yyuser)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length);
- sprintf(hashed_details,"mssql_%s_%s_",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser));
- }
- break;
- case 3: {
- zval **yyhost,**yyuser,**yypasswd;
-
- if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length);
- sprintf(hashed_details,"mssql_%s_%s_%s",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd)); /* SAFE */
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (hashed_details == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- /* set a DBLOGIN record */
- if ((mssql.login = dblogin()) == NULL) {
- php_error(E_WARNING,"MS SQL: Unable to allocate login record");
- RETURN_FALSE;
- }
-
- dbprocerrhandle(mssql.login, (DBERRHANDLE_PROC) php_mssql_error_handler);
- dbprocmsghandle(mssql.login, (DBMSGHANDLE_PROC) php_mssql_message_handler);
-
- if (MS_SQL_G(secure_connection) == 1){
- DBSETLSECURE(mssql.login);
- }
- else {
- if (user) {
- DBSETLUSER(mssql.login,user);
- }
- if (passwd) {
- DBSETLPWD(mssql.login,passwd);
- }
- }
- DBSETLAPP(mssql.login,MS_SQL_G(appname));
- mssql.valid = 1;
-
- DBSETLVERSION(mssql.login, DBVER60);
-/* DBSETLTIME(mssql.login, TIMEOUT_INFINITE); */
-
- if (!MS_SQL_G(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
- php_error(E_WARNING,"MS SQL: Too many open links (%d)",MS_SQL_G(num_links));
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- if (MS_SQL_G(max_persistent) != -1 && MS_SQL_G(num_persistent) >= MS_SQL_G(max_persistent)) {
- php_error(E_WARNING,"MS SQL: Too many open persistent links (%d)",MS_SQL_G(num_persistent));
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- /* create the link */
- if ((mssql.link = dbopen(mssql.login, host)) == FAIL) {
- php_error(E_WARNING,"MS SQL: Unable to connect to server: %s", host);
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
-
- if (dbsetopt(mssql.link, DBBUFFER, "2")==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- dbclose(mssql.link);
- RETURN_FALSE;
- }
-
- if (MS_SQL_G(textlimit) != -1) {
- sprintf(buffer, "%li", MS_SQL_G(textlimit));
- if (dbsetopt(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- }
- if (MS_SQL_G(textsize) != -1) {
- sprintf(buffer, "SET TEXTSIZE %li", MS_SQL_G(textsize));
- dbcmd(mssql.link, buffer);
- dbsqlexec(mssql.link);
- dbresults(mssql.link);
- }
-
- /* hash it up */
- mssql_ptr = (mssql_link *) malloc(sizeof(mssql_link));
- memcpy(mssql_ptr, &mssql, sizeof(mssql_link));
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = mssql_ptr;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, &new_le, sizeof(list_entry), NULL)==FAILURE) {
- free(mssql_ptr);
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- MS_SQL_G(num_persistent)++;
- MS_SQL_G(num_links)++;
- } else { /* we do */
- if (Z_TYPE_P(le) != le_plink) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Hashed persistent link is not a MS SQL link!",php_rqst->server);
-#endif
- php_error(E_WARNING,"MS SQL: Hashed persistent link is not a MS SQL link!");
- RETURN_FALSE;
- }
-
- mssql_ptr = (mssql_link *) le->ptr;
- /* test that the link hasn't died */
- if (DBDEAD(mssql_ptr->link) == TRUE) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Persistent link died, trying to reconnect...",php_rqst->server);
-#endif
- if ((mssql_ptr->link=dbopen(mssql_ptr->login,host))==FAIL) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Unable to reconnect!",php_rqst->server);
-#endif
- php_error(E_WARNING,"MS SQL: Link to server lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Reconnect successful!",php_rqst->server);
-#endif
- if (dbsetopt(mssql_ptr->link, DBBUFFER, "2")==FAIL) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Unable to set required options",php_rqst->server);
-#endif
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length + 1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual mssql link sits.
- * if it doesn't, open a new mssql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- php_mssql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
- }
- }
- if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
- php_error(E_WARNING,"MS SQL: Too many open links (%d)",MS_SQL_G(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if ((mssql.link=dbopen(mssql.login, host))==NULL) {
- php_error(E_WARNING,"MS SQL: Unable to connect to server: %s", host);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (dbsetopt(mssql.link, DBBUFFER,"2")==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- dbclose(mssql.link);
- RETURN_FALSE;
- }
-
- if (MS_SQL_G(textlimit) != -1) {
- sprintf(buffer, "%li", MS_SQL_G(textlimit));
- if (dbsetopt(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- }
- if (MS_SQL_G(textsize) != -1) {
- sprintf(buffer, "SET TEXTSIZE %li", MS_SQL_G(textsize));
- dbcmd(mssql.link, buffer);
- dbsqlexec(mssql.link);
- dbresults(mssql.link);
- }
-
- /* add it to the list */
- mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link));
- memcpy(mssql_ptr, &mssql, sizeof(mssql_link));
- ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- MS_SQL_G(num_links)++;
- }
- efree(hashed_details);
- php_mssql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-}
-
-
-static int php_mssql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (MS_SQL_G(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
- }
- return MS_SQL_G(default_link);
-}
-
-/* {{{ proto int mssql_connect([string servername [, string username [, string password]]])
- Establishes a connection to a MS-SQL server */
-PHP_FUNCTION(mssql_connect)
-{
- php_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_pconnect([string servername [, string username [, string password]]])
- Establishes a persistent connection to a MS-SQL server */
-PHP_FUNCTION(mssql_pconnect)
-{
- php_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_close([int connectionid])
- Closes a connection to a MS-SQL server */
-PHP_FUNCTION(mssql_close)
-{
- zval **mssql_link_index=NULL;
- int id;
- mssql_link *mssql_ptr;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- if (mssql_link_index)
- zend_list_delete(Z_LVAL_PP(mssql_link_index));
- else
- zend_list_delete(id);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool mssql_select_db(string database_name [, int conn_id])
- Select a MS-SQL database */
-PHP_FUNCTION(mssql_select_db)
-{
- zval **db, **mssql_link_index;
- int id;
- mssql_link *mssql_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
-
- if (dbuse(mssql_ptr->link, Z_STRVAL_PP(db))==FAIL) {
- php_error(E_WARNING,"MS SQL: Unable to select database: %s", Z_STRVAL_PP(db));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-
-static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC)
-{
- if (dbdatlen(mssql_ptr->link,offset) == 0) {
- ZVAL_NULL(result);
- return;
- }
-
- switch (column_type)
- {
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- case SQLINTN: {
- Z_LVAL_P(result) = (long) anyintcol(offset);
- Z_TYPE_P(result) = IS_LONG;
- break;
- }
- case SQLCHAR:
- case SQLVARCHAR:
- case SQLTEXT: {
- int length;
- char *data = charcol(offset);
-
- length=dbdatlen(mssql_ptr->link,offset);
- while (length>0 && data[length-1] == ' ') { /* nuke trailing whitespace */
- length--;
- }
- Z_STRVAL_P(result) = estrndup(data,length);
- Z_STRLEN_P(result) = length;
- Z_TYPE_P(result) = IS_STRING;
- break;
- }
- case SQLFLT4:
- Z_DVAL_P(result) = (double) floatcol4(offset);
- Z_TYPE_P(result) = IS_DOUBLE;
- break;
- case SQLFLT8:
- Z_DVAL_P(result) = (double) floatcol8(offset);
- Z_TYPE_P(result) = IS_DOUBLE;
- break;
- case SQLVARBINARY:
- case SQLBINARY:
- case SQLIMAGE: {
- DBBINARY *bin;
- unsigned char *res_buf;
- int res_length = dbdatlen(mssql_ptr->link, offset);
-
- res_buf = (unsigned char *) emalloc(res_length);
- bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
- memcpy(res_buf,bin,res_length);
- res_buf[res_length] = '\0';
- Z_STRLEN_P(result) = res_length;
- Z_STRVAL_P(result) = res_buf;
- Z_TYPE_P(result) = IS_STRING;
- }
- break;
- case SQLNUMERIC:
- default: {
- if (dbwillconvert(column_type,SQLCHAR)) {
- char *res_buf;
- DBDATEREC dateinfo;
- int res_length = dbdatlen(mssql_ptr->link,offset);
-
- if ((column_type != SQLDATETIME) || MS_SQL_G(datetimeconvert)) {
-
- if (column_type == SQLDATETIM4) res_length += 14;
- if (column_type == SQLDATETIME) res_length += 10;
-
- res_buf = (unsigned char *) emalloc(res_length);
- res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,res_buf,-1);
- } else {
- dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset));
-
- res_length = 19;
- res_buf = (unsigned char *) emalloc(res_length);
- sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second);
- }
-
- Z_STRVAL_P(result) = res_buf;
- Z_STRLEN_P(result) = res_length;
- Z_TYPE_P(result) = IS_STRING;
- } else {
- php_error(E_WARNING,"MS SQL: column %d has unknown data type (%d)", offset, coltype(offset));
- ZVAL_FALSE(result);
- }
- }
- }
-}
-
-static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC)
-{
- if (dbdatlen(mssql_ptr->link,offset) == 0) {
- ZVAL_NULL(result);
- return;
- }
-
- if (column_type == SQLVARBINARY ||
- column_type == SQLBINARY ||
- column_type == SQLIMAGE) {
- DBBINARY *bin;
- unsigned char *res_buf;
- int res_length = dbdatlen(mssql_ptr->link, offset);
-
- res_buf = (unsigned char *) emalloc(res_length);
- bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
- memcpy(res_buf, bin, res_length);
- res_buf[res_length] = '\0';
- Z_STRLEN_P(result) = res_length;
- Z_STRVAL_P(result) = res_buf;
- Z_TYPE_P(result) = IS_STRING;
- }
- else if (dbwillconvert(coltype(offset),SQLCHAR)) {
- unsigned char *res_buf;
- DBDATEREC dateinfo;
- int res_length = dbdatlen(mssql_ptr->link,offset);
-
- if ((column_type != SQLDATETIME) || MS_SQL_G(datetimeconvert)) {
-
- if (column_type == SQLDATETIM4) res_length += 14;
- if (column_type == SQLDATETIME) res_length += 10;
-
- res_buf = (unsigned char *) emalloc(res_length);
- res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR, res_buf, -1);
-
- } else {
- dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset));
-
- res_length = 19;
- res_buf = (unsigned char *) emalloc(res_length);
- sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second);
- }
-
- Z_STRVAL_P(result) = res_buf;
- Z_STRLEN_P(result) = res_length;
- Z_TYPE_P(result) = IS_STRING;
- } else {
- php_error(E_WARNING,"MS SQL: column %d has unknown data type (%d)", offset, coltype(offset));
- ZVAL_FALSE(result);
- }
-}
-
-static int _mssql_fetch_batch(mssql_link *mssql_ptr, mssql_result *result, int retvalue TSRMLS_DC)
-{
- int i, j = 0;
- int *column_types;
- char computed_buf[16];
-
- column_types = (int *) emalloc(sizeof(int) * result->num_fields);
- for (i=0; i<result->num_fields; i++) {
- char *fname = (char *)dbcolname(mssql_ptr->link,i+1);
-
- if (*fname) {
- result->fields[i].name = estrdup(fname);
- } else {
- if (j>0) {
- snprintf(computed_buf,16,"computed%d",j);
- } else {
- strcpy(computed_buf,"computed");
- }
- result->fields[i].name = estrdup(computed_buf);
- j++;
- }
- result->fields[i].max_length = dbcollen(mssql_ptr->link,i+1);
- result->fields[i].column_source = estrdup(dbcolsource(mssql_ptr->link,i+1));
- if (!result->fields[i].column_source) {
- result->fields[i].column_source = empty_string;
- }
-
- column_types[i] = coltype(i+1);
-
- Z_TYPE(result->fields[i]) = column_types[i];
- /* set numeric flag */
- switch (column_types[i]) {
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- case SQLINTN:
- case SQLFLT8:
- case SQLNUMERIC:
- case SQLDECIMAL:
- result->fields[i].numeric = 1;
- break;
- case SQLCHAR:
- case SQLVARCHAR:
- case SQLTEXT:
- default:
- result->fields[i].numeric = 0;
- break;
- }
- }
-
- i=0;
- if (!result->data) {
- result->data = (zval **) emalloc(sizeof(zval *)*MSSQL_ROWS_BLOCK*(++result->blocks_initialized));
- }
- while (retvalue!=FAIL && retvalue!=NO_MORE_ROWS) {
- result->num_rows++;
- if (result->num_rows > result->blocks_initialized*MSSQL_ROWS_BLOCK) {
- result->data = (zval **) erealloc(result->data,sizeof(zval *)*MSSQL_ROWS_BLOCK*(++result->blocks_initialized));
- }
- result->data[i] = (zval *) emalloc(sizeof(zval)*result->num_fields);
- for (j=0; j<result->num_fields; j++) {
- INIT_ZVAL(result->data[i][j]);
- MS_SQL_G(get_column_content(mssql_ptr, j+1, &result->data[i][j], column_types[j] TSRMLS_CC));
- }
- if (i<result->batchsize || result->batchsize==0) {
- i++;
- dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link));
- retvalue=dbnextrow(mssql_ptr->link);
- }
- else
- break;
- result->lastresult = retvalue;
- }
- efree(column_types);
- return i;
-}
-
-/* {{{ proto int mssql_fetch_batch(string result_index)
- Returns the next batch of records */
-PHP_FUNCTION(mssql_fetch_batch)
-{
- zval **mssql_result_index;
- mssql_result *result;
- mssql_link *mssql_ptr;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mssql_result_index)==IS_RESOURCE && Z_LVAL_PP(mssql_result_index)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
- mssql_ptr = result->mssql_ptr;
- _free_result(result, 0);
- result->cur_row=result->num_rows=0;
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, result->lastresult TSRMLS_CC);
- RETURN_LONG(result->num_rows);
-}
-/* }}} */
-
-/* {{{ proto int mssql_query(string query [, int conn_id [, int batch_size]])
- Perform an SQL query on a MS-SQL server database */
-PHP_FUNCTION(mssql_query)
-{
- zval **query, **mssql_link_index, **zbatchsize;
- int retvalue;
- mssql_link *mssql_ptr;
- mssql_result *result;
- int id, num_fields;
- int batchsize;
-
- batchsize = MS_SQL_G(batchsize);
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &query, &mssql_link_index, &zbatchsize)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- convert_to_long_ex(zbatchsize);
- batchsize = Z_LVAL_PP(zbatchsize);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
-
- if (dbcmd(mssql_ptr->link, Z_STRVAL_PP(query))==FAIL) {
- php_error(E_WARNING,"MS SQL: Unable to set query");
- RETURN_FALSE;
- }
- if (dbsqlexec(mssql_ptr->link)==FAIL || dbresults(mssql_ptr->link)==FAIL) {
- php_error(E_WARNING,"MS SQL: Query failed");
- RETURN_FALSE;
- }
-
- /* The following is more or less the equivalent of mysql_store_result().
- * fetch all rows from the server into the row buffer, thus:
- * 1) Being able to fire up another query without explicitly reading all rows
- * 2) Having numrows accessible
- */
- retvalue=dbnextrow(mssql_ptr->link);
-
- if (retvalue==FAIL) {
- RETURN_FALSE;
- }
-
- if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && !dbdataready(mssql_ptr->link)) {
- RETURN_TRUE;
- }
-
- result = (mssql_result *) emalloc(sizeof(mssql_result));
- result->num_fields = num_fields;
- result->blocks_initialized = 1;
-
- result->batchsize = batchsize;
- result->data = NULL;
- result->blocks_initialized = 0;
- result->mssql_ptr = mssql_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
-
- if (num_fields > 0) {
- result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*result->num_fields);
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto int mssql_rows_affected(int conn_id)
- Returns the number of records affected by the query */
-PHP_FUNCTION(mssql_rows_affected)
-{
- zval **mssql_link_index;
- mssql_link *mssql_ptr;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_link_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, -1, "MS SQL-Link", le_link, le_plink);
- RETURN_LONG(DBCOUNT(mssql_ptr->link));
-}
-/* }}} */
-
-
-/* {{{ proto int mssql_free_result(string result_index)
- Free a MS-SQL result index */
-PHP_FUNCTION(mssql_free_result)
-{
- zval **mssql_result_index;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mssql_result_index)==IS_RESOURCE && Z_LVAL_PP(mssql_result_index)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
- zend_list_delete(Z_LVAL_PP(mssql_result_index));
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_get_last_message(void)
- Gets the last message from the MS-SQL server */
-PHP_FUNCTION(mssql_get_last_message)
-{
- if (MS_SQL_G(server_message)) {
- RETURN_STRING(MS_SQL_G(server_message),1);
- }
- else {
- RETURN_STRING(empty_string,1);
- }
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_num_rows(int mssql_result_index)
- Returns the number of rows fetched in from the result id specified */
-PHP_FUNCTION(mssql_num_rows)
-{
- zval **mssql_result_index;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- Z_LVAL_P(return_value) = result->num_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_num_fields(int mssql_result_index)
- Returns the number of fields fetched in from the result id specified */
-PHP_FUNCTION(mssql_num_fields)
-{
- zval **mssql_result_index;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- Z_LVAL_P(return_value) = result->num_fields;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-static void php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
- zval **mssql_result_index, **resulttype = NULL;
- mssql_result *result;
- int i;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = MSSQL_BOTH;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &resulttype)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(resulttype);
- result_type = Z_LVAL_PP(resulttype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (MS_SQL_G(server_message)) {
- STR_FREE(MS_SQL_G(server_message));
- MS_SQL_G(server_message) = NULL;
- }
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- for (i=0; i<result->num_fields; i++) {
- if (Z_TYPE(result->data[result->cur_row][i]) != IS_NULL) {
- char *data;
- int data_len;
- int should_copy;
-
- if (Z_TYPE(result->data[result->cur_row][i]) == IS_STRING) {
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(Z_STRVAL(result->data[result->cur_row][i]), Z_STRLEN(result->data[result->cur_row][i]), &Z_STRLEN(result->data[result->cur_row][i]), 1 TSRMLS_CC);
- should_copy = 0;
- }
- else
- {
- data = Z_STRVAL(result->data[result->cur_row][i]);
- data_len = Z_STRLEN(result->data[result->cur_row][i]);
- should_copy = 1;
- }
-
- if (result_type & MSSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy = 1;
- }
-
- if (result_type & MSSQL_ASSOC) {
- add_assoc_stringl(return_value, result->fields[i].name, data, data_len, should_copy);
- }
- }
- else if (Z_TYPE(result->data[result->cur_row][i]) == IS_LONG) {
- if (result_type & MSSQL_NUM)
- add_index_long(return_value, i, Z_LVAL(result->data[result->cur_row][i]));
-
- if (result_type & MSSQL_ASSOC)
- add_assoc_long(return_value, result->fields[i].name, Z_LVAL(result->data[result->cur_row][i]));
- }
- else if (Z_TYPE(result->data[result->cur_row][i]) == IS_DOUBLE) {
- if (result_type & MSSQL_NUM)
- add_index_double(return_value, i, Z_DVAL(result->data[result->cur_row][i]));
-
- if (result_type & MSSQL_ASSOC)
- add_assoc_double(return_value, result->fields[i].name, Z_DVAL(result->data[result->cur_row][i]));
- }
- }
- else
- {
- if (result_type & MSSQL_NUM)
- add_index_null(return_value, i);
- if (result_type & MSSQL_ASSOC)
- add_assoc_null(return_value, result->fields[i].name);
- }
- }
- result->cur_row++;
-}
-
-/* {{{ proto array mssql_fetch_row(int result_id [, int result_type])
- Returns an array of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_row)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_NUM);
-}
-
-/* }}} */
-
-/* {{{ proto object mssql_fetch_object(int result_id [, int result_type])
- Returns a psuedo-object of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_object)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_ASSOC);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-
-/* }}} */
-
-/* {{{ proto array mssql_fetch_array(int result_id [, int result_type])
- Returns an associative array of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_array)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_BOTH);
-}
-
-/* }}} */
-
-/* {{{ proto array mssql_fetch_assoc(int result_id [, int result_type])
- Returns an associative array of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_assoc)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_ASSOC);
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_data_seek(int result_id, int offset)
- Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number */
-PHP_FUNCTION(mssql_data_seek)
-{
- zval **mssql_result_index, **offset;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=result->num_rows) {
- php_error(E_WARNING,"MS SQL: Bad row offset");
- RETURN_FALSE;
- }
-
- result->cur_row = Z_LVAL_PP(offset);
- RETURN_TRUE;
-}
-
-/* }}} */
-
-static char *php_mssql_get_field_name(int type)
-{
- switch (type) {
- case SQLBINARY:
- case SQLVARBINARY:
- return "blob";
- break;
- case SQLCHAR:
- case SQLVARCHAR:
- return "char";
- break;
- case SQLTEXT:
- return "text";
- break;
- case SQLDATETIME:
- case SQLDATETIM4:
- case SQLDATETIMN:
- return "datetime";
- break;
- case SQLDECIMAL:
- case SQLFLT8:
- case SQLFLTN:
- return "real";
- break;
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- case SQLINTN:
- return "int";
- break;
- case SQLNUMERIC:
- return "numeric";
- break;
- case SQLMONEY:
- case SQLMONEY4:
- case SQLMONEYN:
- return "money";
- break;
- case SQLBIT:
- return "bit";
- break;
- case SQLIMAGE:
- return "image";
- break;
- default:
- return "unknown";
- break;
- }
-}
-
-/* {{{ proto object mssql_fetch_field(int result_id [, int offset])
- Gets information about certain fields in a query result */
-PHP_FUNCTION(mssql_fetch_field)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error(E_WARNING,"MS SQL: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- if (object_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- add_property_string(return_value, "name",result->fields[field_offset].name, 1);
- add_property_long(return_value, "max_length",result->fields[field_offset].max_length);
- add_property_string(return_value, "column_source",result->fields[field_offset].column_source, 1);
- add_property_long(return_value, "numeric", result->fields[field_offset].numeric);
- add_property_string(return_value, "type", php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])), 1);
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_field_length(int result_id [, int offset])
- Get the length of a MS-SQL field */
-PHP_FUNCTION(mssql_field_length)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error(E_WARNING,"MS SQL: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = result->fields[field_offset].max_length;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_field_name(int result_id [, int offset])
- Returns the name of the field given by offset in the result set given by result_id */
-PHP_FUNCTION(mssql_field_name)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error(E_WARNING,"MS SQL: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = estrdup(result->fields[field_offset].name);
- Z_STRLEN_P(return_value) = strlen(result->fields[field_offset].name);
- Z_TYPE_P(return_value) = IS_STRING;
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_field_type(int result_id [, int offset])
- Returns the type of a field */
-PHP_FUNCTION(mssql_field_type)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error(E_WARNING,"MS SQL: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = estrdup(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])));
- Z_STRLEN_P(return_value) = strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-
-/* }}} */
-
-/* {{{ proto bool mssql_field_seek(int result_id, int offset)
- Seeks to the specified field offset */
-PHP_FUNCTION(mssql_field_seek)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- php_error(E_WARNING,"MS SQL: Bad column offset");
- RETURN_FALSE;
- }
-
- result->cur_field = field_offset;
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_result(int result_id, int row, mixed field)
- Returns the contents of one cell from a MS-SQL result set */
-PHP_FUNCTION(mssql_result)
-{
- zval **row, **field, **mssql_result_index;
- int field_offset=0;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=3 || zend_get_parameters_ex(3, &mssql_result_index, &row, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- convert_to_long_ex(row);
- if (Z_LVAL_PP(row) < 0 || Z_LVAL_PP(row) >= result->num_rows) {
- php_error(E_WARNING,"MS SQL: Bad row offset (%d)", Z_LVAL_PP(row));
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(field)) {
- case IS_STRING: {
- int i;
-
- for (i=0; i<result->num_fields; i++) {
- if (!strcasecmp(result->fields[i].name, Z_STRVAL_PP(field))) {
- field_offset = i;
- break;
- }
- }
- if (i>=result->num_fields) { /* no match found */
- php_error(E_WARNING,"MS SQL: %s field not found in result", Z_STRVAL_PP(field));
- RETURN_FALSE;
- }
- break;
- }
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- if (field_offset<0 || field_offset>=result->num_fields) {
- php_error(E_WARNING,"MS SQL: Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
-
- *return_value = result->data[Z_LVAL_PP(row)][field_offset];
- ZVAL_COPY_CTOR(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool mssql_next_result(int result_id)
- Move the internal result pointer to the next result */
-PHP_FUNCTION(mssql_next_result)
-{
- zval **mssql_result_index;
- int retvalue;
- mssql_result *result;
- mssql_link *mssql_ptr;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- mssql_ptr = result->mssql_ptr;
- retvalue = dbresults(mssql_ptr->link);
- if (retvalue == FAIL || retvalue == NO_MORE_RESULTS || retvalue == NO_MORE_RPC_RESULTS) {
- RETURN_FALSE;
- }
- else {
- _free_result(result, 1);
- result->cur_row=result->num_fields=result->num_rows=0;
- dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link));
- retvalue = dbnextrow(mssql_ptr->link);
-
- result->num_fields = dbnumcols(mssql_ptr->link);
- result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*result->num_fields);
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
- RETURN_TRUE;
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto void mssql_min_error_severity(int severity)
- Sets the lower error severity */
-PHP_FUNCTION(mssql_min_error_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- MS_SQL_G(min_error_severity) = Z_LVAL_PP(severity);
-}
-
-/* }}} */
-
-/* {{{ proto void mssql_min_message_severity(int severity)
- Sets the lower message severity */
-PHP_FUNCTION(mssql_min_message_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- MS_SQL_G(min_message_severity) = Z_LVAL_PP(severity);
-}
-/* }}} */
-
-/* {{{ proto int mssql_init(string sp_name [, int conn_id])
- Initializes a stored procedure or a remote stored procedure */
-PHP_FUNCTION(mssql_init)
-{
- zval **sp_name, **mssql_link_index;
- mssql_link *mssql_ptr;
- mssql_statement *statement;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &sp_name)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &sp_name, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- convert_to_string_ex(sp_name);
-
- if (dbrpcinit(mssql_ptr->link, Z_STRVAL_PP(sp_name),0)==FAIL) {
- php_error(E_WARNING,"MS SQL: unable to init stored procedure");
- RETURN_FALSE;
- }
-
- statement=NULL;
- statement = ecalloc(1,sizeof(mssql_statement));
-
- if (statement!=NULL) {
- statement->link = mssql_ptr;
- statement->executed=FALSE;
- }
- else {
- php_error(E_WARNING,"mssql_init: unable to allocate statement");
- RETURN_FALSE;
- }
-
- statement->id = zend_list_insert(statement,le_statement);
-
- RETURN_RESOURCE(statement->id);
-}
-/* }}} */
-
-/* {{{ proto int mssql_bind(int stmt, string param_name, mixed var, int type
- [, int is_output[, int is_null[, int maxlen]]])
- Adds a parameter to a stored procedure or a remote stored procedure */
-PHP_FUNCTION(mssql_bind)
-{
- int type, is_output, is_null, datalen, maxlen;
- zval **stmt, **param_name, **var, **yytype;
- mssql_link *mssql_ptr;
- mssql_statement *statement;
- mssql_bind bind,*bindp;
- int id, status;
- LPBYTE value;
-
- id=0;
- status=0;
-
- /* BEGIN input validation */
- switch(ZEND_NUM_ARGS()) {
- case 4:
- if (zend_get_parameters_ex(4, &stmt, &param_name, &var, &yytype)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- type=Z_LVAL_PP(yytype);
- is_null=FALSE;
- is_output=FALSE;
- maxlen=-1;
-
- break;
-
- case 5: {
- zval **yyis_output;
-
- if (zend_get_parameters_ex(5, &stmt, &param_name, &var, &yytype, &yyis_output)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- convert_to_long_ex(yyis_output);
- type=Z_LVAL_PP(yytype);
- is_null=FALSE;
- is_output=Z_LVAL_PP(yyis_output);
- maxlen=-1;
- }
- break;
-
- case 6: {
- zval **yyis_output, **yyis_null;
-
- if (zend_get_parameters_ex(6, &stmt, &param_name, &var, &yytype, &yyis_output, &yyis_null)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- convert_to_long_ex(yyis_output);
- convert_to_long_ex(yyis_null);
- type=Z_LVAL_PP(yytype);
- is_output=Z_LVAL_PP(yyis_output);
- is_null=Z_LVAL_PP(yyis_null);
- maxlen=-1;
- }
- break;
-
- case 7: {
- zval **yyis_output, **yyis_null, **yymaxlen;
-
- if (zend_get_parameters_ex(7, &stmt, &param_name, &var, &yytype, &yyis_output, &yyis_null, &yymaxlen)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- convert_to_long_ex(yyis_output);
- convert_to_long_ex(yyis_null);
- convert_to_long_ex(yymaxlen);
- type=Z_LVAL_PP(yytype);
- is_output=Z_LVAL_PP(yyis_output);
- is_null=Z_LVAL_PP(yyis_null);
- maxlen=Z_LVAL_PP(yymaxlen);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- /* END input validation */
-
- ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);
- if (statement==NULL) {
- RETURN_FALSE;
- }
- mssql_ptr=statement->link;
-
- /* modify datalen and maxlen according to dbrpcparam documentation */
- if ( (type==SQLVARCHAR) || (type==SQLCHAR) || (type==SQLTEXT) ) { /* variable-length type */
- if (is_null) {
- maxlen=0;
- datalen=0;
- }
- else {
- convert_to_string_ex(var);
- datalen=Z_STRLEN_PP(var);
- value=(LPBYTE)Z_STRVAL_PP(var);
- }
- }
- else { /* fixed-length type */
- if (is_null) {
- datalen=0;
- }
- else {
- datalen=-1;
- }
- maxlen=-1;
-
- switch (type) {
-
- case SQLFLT8:
- case SQLFLTN:
- convert_to_double_ex(var);
- value=(LPBYTE)(&Z_DVAL_PP(var));
- break;
-
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- convert_to_long_ex(var);
- value=(LPBYTE)(&Z_LVAL_PP(var));
- break;
-
- default:
- php_error(E_WARNING,"mssql_bind: unsupported type");
- RETURN_FALSE;
- break;
- }
- }
-
- convert_to_string_ex(param_name);
-
- if (is_output) {
- status=DBRPCRETURN;
- }
-
- /* hashtable of binds */
- if (! statement->binds) {
- ALLOC_HASHTABLE(statement->binds);
- zend_hash_init(statement->binds, 13, NULL, _mssql_bind_hash_dtor, 0);
- }
-
- memset((void*)&bind,0,sizeof(mssql_bind));
- zend_hash_add(statement->binds,Z_STRVAL_PP(param_name),Z_STRLEN_PP(param_name),&bind,sizeof(mssql_bind),(void **)&bindp);
- bindp->zval=*var;
- zval_add_ref(var);
-
- /* no call to dbrpcparam if RETVAL */
- if ( strcmp("RETVAL",Z_STRVAL_PP(param_name))!=0 ) {
- if (dbrpcparam(mssql_ptr->link, Z_STRVAL_PP(param_name), (BYTE)status, type, maxlen, datalen, (LPCBYTE)value)==FAIL) {
- php_error(E_WARNING,"MS SQL: Unable to set parameter");
- RETURN_FALSE;
- }
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mssql_execute(int stmt)
- Executes a stored procedure on a MS-SQL server database */
-PHP_FUNCTION(mssql_execute)
-{
- zval **stmt;
- int retvalue,retval_results;
- mssql_link *mssql_ptr;
- mssql_statement *statement;
- mssql_bind *bind;
- mssql_result *result;
- int num_fields,num_rets,type;
- int blocks_initialized=1;
- int i;
- int batchsize;
- int ac = ZEND_NUM_ARGS();
- char *parameter;
-
- batchsize = MS_SQL_G(batchsize);
- if (ac !=1 || zend_get_parameters_ex(1, &stmt)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);
-
- mssql_ptr=statement->link;
-
- if (dbrpcexec(mssql_ptr->link)==FAIL || dbsqlok(mssql_ptr->link)==FAIL) {
- php_error(E_WARNING,"MS SQL: stored procedure execution failed.");
- RETURN_FALSE;
- }
-
- retval_results=dbresults(mssql_ptr->link);
-
- if (retval_results==FAIL) {
- php_error(E_WARNING,"MS SQL: could not retrieve results");
- RETURN_FALSE;
- }
-
- /* The following is just like mssql_query, fetch all rows from the server into
- * the row buffer. We add here the RETVAL and OUTPUT parameters stuff
- */
- result=NULL;
- /* if multiple recordsets in a stored procedure were supported, we would
- use a "while (retval_results!=NO_MORE_RESULTS)" instead an "if" */
- if (retval_results==SUCCEED) {
- if ( (retvalue=(dbnextrow(mssql_ptr->link)))!=NO_MORE_ROWS ) {
- num_fields = dbnumcols(mssql_ptr->link);
- if (num_fields <= 0) {
- RETURN_TRUE;
- }
-
- result = (mssql_result *) emalloc(sizeof(mssql_result));
-
- result->batchsize = batchsize;
- result->blocks_initialized = 1;
- result->data = (zval **) emalloc(sizeof(zval *)*MSSQL_ROWS_BLOCK);
- result->mssql_ptr = mssql_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
- result->num_fields = num_fields;
-
- result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*num_fields);
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
- }
- retval_results=dbresults(mssql_ptr->link);
- }
-
- if (retval_results==SUCCEED) {
- php_error(E_WARNING,"mssql_execute: multiple recordsets from a stored procedure not supported yet! (Skipping...)");
- retval_results=dbresults(mssql_ptr->link);
-
- while (retval_results==SUCCEED) {
- retval_results=dbresults(mssql_ptr->link);
- }
- }
-
- if (retval_results==NO_MORE_RESULTS) {
- /* Now to fetch RETVAL and OUTPUT values*/
- num_rets = dbnumrets(mssql_ptr->link);
-
- if (num_rets!=0) {
- for (i = 1; i <= num_rets; i++) {
- parameter=(char*)dbretname(mssql_ptr->link, i);
- type=dbrettype(mssql_ptr->link, i);
-
- if (statement->binds!=NULL ) { /* Maybe a non-parameter sp */
- if (zend_hash_find(statement->binds, parameter, strlen(parameter), (void**)&bind)==SUCCESS) {
- switch (type) {
- case SQLBIT:
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- convert_to_long_ex(&bind->zval);
- Z_LVAL_P(bind->zval)=*((int *)(dbretdata(mssql_ptr->link,i)));
- break;
-
- case SQLFLT8:
- case SQLFLTN:
- convert_to_double_ex(&bind->zval);
- Z_DVAL_P(bind->zval)=*((double *)(dbretdata(mssql_ptr->link,i)));
- break;
-
- case SQLCHAR:
- case SQLVARCHAR:
- case SQLTEXT:
- convert_to_string_ex(&bind->zval);
- Z_STRLEN_P(bind->zval)=dbretlen(mssql_ptr->link,i);
- Z_STRVAL_P(bind->zval) = estrndup(dbretdata(mssql_ptr->link,i),Z_STRLEN_P(bind->zval));
- break;
- }
- }
- else {
- php_error(E_WARNING,"mssql_execute: an output parameter variable was not provided");
- }
- }
- }
- }
-
- if (statement->binds!=NULL ) { /* Maybe a non-parameter sp */
- if (zend_hash_find(statement->binds, "RETVAL", 6, (void**)&bind)==SUCCESS) {
- if (dbhasretstat(mssql_ptr->link)) {
- convert_to_long_ex(&bind->zval);
- Z_LVAL_P(bind->zval)=dbretstatus(mssql_ptr->link);
- }
- else {
- php_error(E_WARNING,"mssql_execute: stored procedure has no return value. Nothing was returned into RETVAL");
- }
- }
- }
- }
-
- if (result==NULL) {
- RETURN_TRUE; /* no recordset returned ...*/
- }
- else {
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
- }
-}
-/* }}} */
-
-/* {{{ proto string mssql_guid_string(string binary [,int short_format])
- Converts a 16 byte binary GUID to a string */
-PHP_FUNCTION(mssql_guid_string)
-{
- zval **binary, **short_format;
- int sf = 0;
- char buffer[32+1];
- char buffer2[36+1];
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &binary)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(binary);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &binary, &short_format)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(binary);
- convert_to_long_ex(short_format);
- sf = Z_LVAL_PP(short_format);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- dbconvert(NULL, SQLBINARY, (BYTE*)Z_STRVAL_PP(binary), 16, SQLCHAR, buffer, -1);
-
- if (sf) {
- php_strtoupper(buffer, 32);
- RETURN_STRING(buffer, 1);
- }
- else {
- int i;
- for (i=0; i<4; i++) {
- buffer2[2*i] = buffer[6-2*i];
- buffer2[2*i+1] = buffer[7-2*i];
- }
- buffer2[8] = '-';
- for (i=0; i<2; i++) {
- buffer2[9+2*i] = buffer[10-2*i];
- buffer2[10+2*i] = buffer[11-2*i];
- }
- buffer2[13] = '-';
- for (i=0; i<2; i++) {
- buffer2[14+2*i] = buffer[14-2*i];
- buffer2[15+2*i] = buffer[15-2*i];
- }
- buffer2[18] = '-';
- for (i=0; i<4; i++) {
- buffer2[19+i] = buffer[16+i];
- }
- buffer2[23] = '-';
- for (i=0; i<12; i++) {
- buffer2[24+i] = buffer[20+i];
- }
- buffer2[36] = 0;
-
- php_strtoupper(buffer2, 36);
- RETURN_STRING(buffer2, 1);
- }
-}
-/* }}} */
-
-#endif
diff --git a/ext/mssql/php_mssql.h b/ext/mssql/php_mssql.h
deleted file mode 100644
index e99bf6a9f0..0000000000
--- a/ext/mssql/php_mssql.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Frank M. Kromann <frank@frontbase.com> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef PHP_MSSQL_H
-#define PHP_MSSQL_H
-
-
-#if HAVE_MSSQL
-#ifdef PHP_WIN32
-#define PHP_MSSQL_API __declspec(dllexport)
-#else
-#define PHP_MSSQL_API
-#endif
-
-
-#define MSSQL_VERSION "7.0"
-#include "sqlfront.h"
-#include "sqldb.h"
-
-#define coltype(j) dbcoltype(mssql_ptr->link,j)
-#define intcol(i) ((int) *(DBINT *) dbdata(mssql_ptr->link,i))
-#define smallintcol(i) ((int) *(DBSMALLINT *) dbdata(mssql_ptr->link,i))
-#define tinyintcol(i) ((int) *(DBTINYINT *) dbdata(mssql_ptr->link,i))
-#define anyintcol(j) (coltype(j)==SQLINT4?intcol(j):(coltype(j)==SQLINT2?smallintcol(j):tinyintcol(j)))
-#define charcol(i) ((DBCHAR *) dbdata(mssql_ptr->link,i))
-#define floatcol4(i) ((float) *(DBFLT4 *) dbdata(mssql_ptr->link,i))
-#define floatcol8(i) ((float) *(DBFLT8 *) dbdata(mssql_ptr->link,i))
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry mssql_module_entry;
-#define mssql_module_ptr &mssql_module_entry
-
-PHP_MINIT_FUNCTION(mssql);
-PHP_MSHUTDOWN_FUNCTION(mssql);
-PHP_RINIT_FUNCTION(mssql);
-PHP_RSHUTDOWN_FUNCTION(mssql);
-PHP_MINFO_FUNCTION(mssql);
-
-PHP_FUNCTION(mssql_connect);
-PHP_FUNCTION(mssql_pconnect);
-PHP_FUNCTION(mssql_close);
-PHP_FUNCTION(mssql_select_db);
-PHP_FUNCTION(mssql_query);
-PHP_FUNCTION(mssql_fetch_batch);
-PHP_FUNCTION(mssql_rows_affected);
-PHP_FUNCTION(mssql_free_result);
-PHP_FUNCTION(mssql_get_last_message);
-PHP_FUNCTION(mssql_num_rows);
-PHP_FUNCTION(mssql_num_fields);
-PHP_FUNCTION(mssql_fetch_field);
-PHP_FUNCTION(mssql_fetch_row);
-PHP_FUNCTION(mssql_fetch_array);
-PHP_FUNCTION(mssql_fetch_assoc);
-PHP_FUNCTION(mssql_fetch_object);
-PHP_FUNCTION(mssql_field_length);
-PHP_FUNCTION(mssql_field_name);
-PHP_FUNCTION(mssql_field_type);
-PHP_FUNCTION(mssql_data_seek);
-PHP_FUNCTION(mssql_field_seek);
-PHP_FUNCTION(mssql_result);
-PHP_FUNCTION(mssql_next_result);
-PHP_FUNCTION(mssql_min_error_severity);
-PHP_FUNCTION(mssql_min_message_severity);
-PHP_FUNCTION(mssql_init);
-PHP_FUNCTION(mssql_bind);
-PHP_FUNCTION(mssql_execute);
-PHP_FUNCTION(mssql_guid_string);
-
-typedef struct mssql_link {
- LOGINREC *login;
- DBPROCESS *link;
- int valid;
-} mssql_link;
-
-typedef struct mssql_statement {
- int id;
- mssql_link *link;
- HashTable *binds;
- int executed;
-} mssql_statement;
-
-typedef struct {
-
- zval *zval;
- /* TODO: more data for special types (BLOBS, NUMERIC...) */
-} mssql_bind;
-
-ZEND_BEGIN_MODULE_GLOBALS(mssql)
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- char *appname;
- char *server_message;
- long min_error_severity, min_message_severity;
- long cfg_min_error_severity, cfg_min_message_severity;
- long compatability_mode, connect_timeout, timeout;
- void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type TSRMLS_DC);
- long textsize, textlimit, batchsize;
- long datetimeconvert;
- HashTable *resource_list, *resource_plist;
- long secure_connection;
-ZEND_END_MODULE_GLOBALS(mssql)
-
-#define MSSQL_ROWS_BLOCK 128
-
-typedef struct mssql_field {
- char *name,*column_source;
- long max_length;
- int numeric;
- int type;
-} mssql_field;
-
-typedef struct mssql_result {
- pval **data;
- mssql_field *fields;
- mssql_link *mssql_ptr;
- int batchsize;
- int lastresult;
- int blocks_initialized;
- int cur_row,cur_field;
- int num_rows,num_fields;
-} mssql_result;
-
-
-#ifdef ZTS
-# define MS_SQL_G(v) TSRMG(mssql_globals_id, zend_mssql_globals *, v)
-#else
-# define MS_SQL_G(v) (mssql_globals.v)
-#endif
-
-#else
-
-#define mssql_module_ptr NULL
-
-#endif /* HAVE_MSSQL */
-
-#define phpext_mssql_ptr mssql_module_ptr
-
-#endif /* PHP_MSSQL_H */
diff --git a/ext/mysql/CREDITS b/ext/mysql/CREDITS
deleted file mode 100644
index a9e6c3b00c..0000000000
--- a/ext/mysql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MySQL
-Zeev Suraski
diff --git a/ext/mysql/config.m4 b/ext/mysql/config.m4
deleted file mode 100644
index 882e492e67..0000000000
--- a/ext/mysql/config.m4
+++ /dev/null
@@ -1,133 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-sinclude(ext/mysql/libmysql/acinclude.m4)
-sinclude(ext/mysql/libmysql/mysql.m4)
-sinclude(libmysql/acinclude.m4)
-sinclude(libmysql/mysql.m4)
-
-AC_DEFUN(MYSQL_LIB_CHK,[
- str="$MYSQL_DIR/$1/libmysqlclient.*"
- for j in `echo $str`; do
- if test -r $j; then
- MYSQL_LIB_DIR=$MYSQL_DIR/$1
- break 2
- fi
- done
-])
-
-AC_DEFUN(PHP_MYSQL_SOCK,[
- AC_MSG_CHECKING(for MySQL UNIX socket)
- MYSQL_SOCK=/tmp/mysql.sock
- for i in \
- /var/run/mysqld/mysqld.sock \
- /var/tmp/mysql.sock \
- /var/run/mysql/mysql.sock \
- /var/lib/mysql/mysql.sock \
- /var/mysql/mysql.sock \
- /Private/tmp/mysql.sock \
- ; do
- if test -r $i; then
- MYSQL_SOCK=$i
- fi
- done
- AC_DEFINE_UNQUOTED(MYSQL_UNIX_ADDR, "$MYSQL_SOCK", [ ])
- AC_MSG_RESULT($MYSQL_SOCK)
-])
-
-PHP_ARG_WITH(mysql, for MySQL support,
-[ --with-mysql[=DIR] Include MySQL support. DIR is the MySQL base directory.
- If unspecified, the bundled MySQL library will be used.], yes)
-
-if test "$PHP_MYSQL" != "no"; then
- PHP_MYSQL_SOCK
- AC_DEFINE(HAVE_MYSQL, 1, [Whether you have MySQL])
-fi
-
-if test "$PHP_MYSQL" = "yes"; then
- MYSQL_MODULE_TYPE=builtin
- MYSQL_CHECKS
- sources="libmysql/libmysql.c libmysql/errmsg.c libmysql/net.c libmysql/violite.c libmysql/password.c \
- libmysql/my_init.c libmysql/my_lib.c libmysql/my_static.c libmysql/my_malloc.c libmysql/my_realloc.c libmysql/my_create.c \
- libmysql/my_delete.c libmysql/my_tempnam.c libmysql/my_open.c libmysql/mf_casecnv.c libmysql/my_read.c \
- libmysql/my_write.c libmysql/errors.c libmysql/my_error.c libmysql/my_getwd.c libmysql/my_div.c libmysql/mf_pack.c \
- libmysql/my_messnc.c libmysql/mf_dirname.c libmysql/mf_fn_ext.c libmysql/mf_wcomp.c libmysql/typelib.c libmysql/safemalloc.c \
- libmysql/my_alloc.c libmysql/mf_format.c libmysql/mf_path.c libmysql/mf_unixpath.c libmysql/my_fopen.c libmysql/mf_loadpath.c \
- libmysql/my_pthread.c libmysql/my_thr_init.c libmysql/thr_mutex.c libmysql/mulalloc.c libmysql/string.c libmysql/default.c \
- libmysql/my_compress.c libmysql/array.c libmysql/my_once.c libmysql/list.c libmysql/my_net.c libmysql/dbug.c \
- libmysql/strmov.c libmysql/strxmov.c libmysql/strnmov.c libmysql/strmake.c libmysql/strend.c libmysql/strfill.c \
- libmysql/is_prefix.c libmysql/int2str.c libmysql/str2int.c libmysql/strinstr.c \
- libmysql/strcont.c libmysql/strcend.c libmysql/bchange.c libmysql/bmove.c libmysql/bmove_upp.c \
- libmysql/longlong2str.c libmysql/strtoull.c libmysql/strtoll.c libmysql/charset.c libmysql/ctype.c"
-
- PHP_NEW_EXTENSION(mysql, php_mysql.c $sources, $ext_shared,,-I@ext_srcdir@/libmysql)
- PHP_ADD_BUILD_DIR($ext_builddir/libmysql)
-
-elif test "$PHP_MYSQL" != "no"; then
-
- MYSQL_TYPE_CHECKS
-
- PHP_NEW_EXTENSION(mysql, php_mysql.c, $ext_shared)
-
- for i in $PHP_MYSQL; do
- if test -r $i/include/mysql/mysql.h; then
- MYSQL_DIR=$i
- MYSQL_INC_DIR=$i/include/mysql
- elif test -r $i/include/mysql.h; then
- MYSQL_DIR=$i
- MYSQL_INC_DIR=$i/include
- fi
- done
-
- if test -z "$MYSQL_DIR"; then
- AC_MSG_ERROR(Cannot find header files under $PHP_MYSQL)
- fi
-
- MYSQL_MODULE_TYPE=external
-
- for i in lib lib/mysql; do
- MYSQL_LIB_CHK($i)
- done
-
- if test -z "$MYSQL_LIB_DIR"; then
- AC_MSG_ERROR(Cannot find mysqlclient library under $MYSQL_DIR)
- fi
-
- PHP_CHECK_LIBRARY(mysqlclient, mysql_close, [ ],
- [
- if test "$PHP_ZLIB_DIR" != "no"; then
- PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR, MYSQL_SHARED_LIBADD)
- PHP_CHECK_LIBRARY(mysqlclient, mysql_error, [], [
- AC_MSG_ERROR([mysql configure failed. Please check config.log for more information.])
- ], [
- -L$PHP_ZLIB_DIR/lib -L$MYSQL_LIB_DIR
- ])
- MYSQL_LIBS="-L$PHP_ZLIB_DIR/lib -lz"
- else
- PHP_ADD_LIBRARY(z,, MYSQL_SHARED_LIBADD)
- PHP_CHECK_LIBRARY(mysqlclient, mysql_errno, [], [
- AC_MSG_ERROR([Try adding --with-zlib-dir=<DIR>. Please check config.log for more information.])
- ], [
- -L$MYSQL_LIB_DIR
- ])
- MYSQL_LIBS="-lz"
- fi
- ], [
- -L$MYSQL_LIB_DIR
- ])
-
- PHP_ADD_LIBRARY_WITH_PATH(mysqlclient, $MYSQL_LIB_DIR, MYSQL_SHARED_LIBADD)
- MYSQL_LIBS="-L$MYSQL_LIB_DIR -lmysqlclient $MYSQL_LIBS"
-
- PHP_ADD_INCLUDE($MYSQL_INC_DIR)
- MYSQL_INCLUDE=-I$MYSQL_INC_DIR
-
-else
- MYSQL_MODULE_TYPE=none
-fi
-
-PHP_SUBST(MYSQL_SHARED_LIBADD)
-PHP_SUBST_OLD(MYSQL_MODULE_TYPE)
-PHP_SUBST_OLD(MYSQL_LIBS)
-PHP_SUBST_OLD(MYSQL_INCLUDE)
diff --git a/ext/mysql/libmysql/acinclude.m4 b/ext/mysql/libmysql/acinclude.m4
deleted file mode 100644
index 0fcc7205cd..0000000000
--- a/ext/mysql/libmysql/acinclude.m4
+++ /dev/null
@@ -1,380 +0,0 @@
-# Local macros for automake & autoconf
-
-AC_DEFUN(MYSQL_FUNCTION_CHECKS,[
-
-# Standard MySQL list
-AC_CHECK_FUNCS(alarm bmove \
- chsize ftruncate rint finite fpsetmask fpresetsticky\
- cuserid fcntl fconvert \
- getrusage getpwuid getcwd getrlimit getwd index locking longjmp \
- perror pread realpath rename \
- socket strnlen madvise \
- strtoul strtoull snprintf tempnam thr_setconcurrency \
- gethostbyaddr_r gethostbyname_r getpwnam \
- bfill bzero bcmp strstr strpbrk strerror\
- tell atod memcpy memmove \
- setupterm strcasecmp sighold \
- vidattr setupterm lrand48 localtime_r \
- sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
- pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
- pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
- pthread_condattr_create rwlock_init \
- crypt dlopen dlerror fchmod getpass getpassphrase)
-
-# This is special for libmysql
-AC_CHECK_FUNCS(strtok_r)
-
-MYSQL_CHECK_GETHOSTNAME_R
-])
-
-AC_DEFUN(MYSQL_CHECK_GETHOSTNAME_R,[
-# Check definition of gethostbyname_r (glibc2.0.100 is different from Solaris)
-ac_save_CXXFLAGS="$CXXFLAGS"
-AC_CACHE_CHECK([style of gethostname_r routines], mysql_cv_gethostname_style,
-AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-if test "$ac_cv_prog_gxx" = "yes"
-then
- CXXFLAGS="$CXXFLAGS -Werror"
-fi
-AC_TRY_COMPILE(
-[#if !defined(SCO) && !defined(__osf__)
-#define _REENTRANT
-#endif
-#include <pthread.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>],
-[int skr;
-
- skr = gethostbyname_r((const char *) 0,
- (struct hostent*) 0, (char*) 0, 0, (struct hostent **) 0, &skr);],
-mysql_cv_gethostname_style=glibc2, mysql_cv_gethostname_style=other))
-AC_LANG_RESTORE
-CXXFLAGS="$ac_save_CXXFLAGS"
-if test "$mysql_cv_gethostname_style" = "glibc2"
-then
- AC_DEFINE(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE, , [ ])
-fi
-
-# Check 3rd argument of getthostbyname_r
-ac_save_CXXFLAGS="$CXXFLAGS"
-AC_CACHE_CHECK([3 argument to gethostname_r routines], mysql_cv_gethostname_arg,
-AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-if test "$ac_cv_prog_gxx" = "yes"
-then
- CXXFLAGS="$CXXFLAGS -Werror"
-fi
-AC_TRY_COMPILE(
-[#if !defined(SCO) && !defined(__osf__)
-#define _REENTRANT
-#endif
-#include <pthread.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>],
-[int skr;
-
- skr = gethostbyname_r((const char *) 0, (struct hostent*) 0, (hostent_data*) 0);],
-mysql_cv_gethostname_arg=hostent_data, mysql_cv_gethostname_arg=char))
-AC_LANG_RESTORE
-CXXFLAGS="$ac_save_CXXFLAGS"
-if test "$mysql_cv_gethostname_arg" = "hostent_data"
-then
- AC_DEFINE(HAVE_GETHOSTBYNAME_R_RETURN_INT, , [ ])
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_SIGWAIT_STYLE,[
-# Check definition av posix sigwait()
-AC_CACHE_CHECK("style of sigwait", mysql_cv_sigwait,
-AC_TRY_LINK(
-[#ifndef SCO
-#define _REENTRANT
-#endif
-#define _POSIX_PTHREAD_SEMANTICS
-#include <pthread.h>
-#include <signal.h>],
-[#ifndef _AIX
-sigset_t set;
-int sig;
-sigwait(&set,&sig);
-#endif],
-mysql_cv_sigwait=POSIX, mysql_cv_sigwait=other))
-if test "$mysql_cv_sigwait" = "POSIX"
-then
- AC_DEFINE(HAVE_SIGWAIT,,[ ])
-fi
-
-if test "$mysql_cv_sigwait" != "POSIX"
-then
-unset mysql_cv_sigwait
-# Check definition av posix sigwait()
-AC_CACHE_CHECK("style of sigwait", mysql_cv_sigwait,
-AC_TRY_LINK(
-[#ifndef SCO
-#define _REENTRANT
-#endif
-#define _POSIX_PTHREAD_SEMANTICS
-#include <pthread.h>
-#include <signal.h>],
-[sigset_t set;
-int sig;
-sigwait(&set);],
-mysql_cv_sigwait=NONPOSIX, mysql_cv_sigwait=other))
-if test "$mysql_cv_sigwait" = "NONPOSIX"
-then
- AC_DEFINE(HAVE_NONPOSIX_SIGWAIT,,[ ])
-fi
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_READDIR_R_ARGS,[
-# Check definition of readdir_r
-AC_CACHE_CHECK("args to readdir_r", mysql_cv_readdir_r,
-AC_TRY_LINK(
-[#ifndef SCO
-#define _REENTRANT
-#endif
-#define _POSIX_PTHREAD_SEMANTICS
-#include <pthread.h>
-#include <dirent.h>],
-[ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
-readdir_r((DIR *) NULL, (struct dirent *) NULL, (struct dirent **) NULL); ],
-mysql_cv_readdir_r=POSIX, mysql_cv_readdir_r=other))
-if test "$mysql_cv_readdir_r" = "POSIX"
-then
- AC_DEFINE(HAVE_READDIR_R,,[ ])
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_PTHREAD_MUTEX_INIT,[
- # Check definition of pthread_mutex_init
- AC_CACHE_CHECK("args to pthread_mutex_init", mysql_cv_mutex_init_args,
- AC_TRY_COMPILE(
-[#ifndef SCO
-#define _REENTRANT
-#endif
-#define _POSIX_PTHREAD_SEMANTICS
-#include <pthread.h> ],
-[
- pthread_mutexattr_t attr;
- pthread_mutex_t mp;
- pthread_mutex_init(&mp,&attr); ],
-mysql_cv_mutex_init_args=POSIX, mysql_cv_mutex_init_args=other))
- if test "$mysql_cv_mutex_init_args" = "other"
- then
- AC_DEFINE(HAVE_NONPOSIX_PTHREAD_MUTEX_INIT,,[ ])
- fi
-])
-
-AC_DEFUN(MYSQL_CHECK_PTHREAD_GETSPECIFIC,[
- # Check definition of pthread_getspecific
- AC_CACHE_CHECK("args to pthread_getspecific", mysql_cv_getspecific_args,
- AC_TRY_COMPILE(
-[#ifndef SCO
-#define _REENTRANT
-#endif
-#define _POSIX_PTHREAD_SEMANTICS
-#include <pthread.h> ],
-[ void *pthread_getspecific(pthread_key_t key);
-pthread_getspecific((pthread_key_t) NULL); ],
-mysql_cv_getspecific_args=POSIX, mysql_cv_getspecific_args=other))
- if test "$mysql_cv_getspecific_args" = "other"
- then
- AC_DEFINE(HAVE_NONPOSIX_PTHREAD_GETSPECIFIC,,[ ])
- fi
-])
-
-AC_DEFUN(MYSQL_TYPE_ACCEPT,
-[ac_save_CXXFLAGS="$CXXFLAGS"
-AC_CACHE_CHECK([base type of last arg to accept], mysql_cv_btype_last_arg_accept,
-AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-if test "$ac_cv_prog_gxx" = "yes"
-then
- CXXFLAGS="$CXXFLAGS -Werror"
-fi
-mysql_cv_btype_last_arg_accept=none
-[AC_TRY_COMPILE([#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-],
-[int a = accept(1, (struct sockaddr *) 0, (socklen_t *) 0);],
-mysql_cv_btype_last_arg_accept=socklen_t)]
-if test $mysql_cv_btype_last_arg_accept = none; then
-[AC_TRY_COMPILE([#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-],
-[int a = accept(1, (struct sockaddr *) 0, (size_t *) 0);],
-mysql_cv_btype_last_arg_accept=size_t)]
-fi
-if test $mysql_cv_btype_last_arg_accept = none; then
-mysql_cv_btype_last_arg_accept=int
-fi)
-AC_LANG_RESTORE
-AC_DEFINE_UNQUOTED(SOCKET_SIZE_TYPE, $mysql_cv_btype_last_arg_accept,[ ])
-CXXFLAGS="$ac_save_CXXFLAGS"
-])
-
-dnl Find type of qsort
-AC_DEFUN(MYSQL_TYPE_QSORT,
-[AC_CACHE_CHECK([return type of qsort], mysql_cv_type_qsort,
-[AC_TRY_COMPILE([#include <stdlib.h>
-#ifdef __cplusplus extern "C"
-#endif
-void qsort(void *base, size_t nel, size_t width,
- int (*compar) (const void *, const void *));
-],
-[int i;], mysql_cv_type_qsort=void, mysql_cv_type_qsort=int)])
-AC_DEFINE_UNQUOTED(RETQSORTTYPE, $mysql_cv_type_qsort, [ ])
-if test "$mysql_cv_type_qsort" = "void"
-then
- AC_DEFINE_UNQUOTED(QSORT_TYPE_IS_VOID, 1, [ ])
-fi ])
-
-
-#---START: Used in for client configure
-AC_DEFUN(MYSQL_CHECK_ULONG,
-[AC_MSG_CHECKING(for type ulong)
-AC_CACHE_VAL(ac_cv_ulong,
-[AC_TRY_RUN([#include <stdio.h>
-#include <sys/types.h>
-main()
-{
- ulong foo;
- foo++;
- exit(0);
-}], ac_cv_ulong=yes, ac_cv_ulong=no, ac_cv_ulong=no)])
-AC_MSG_RESULT($ac_cv_ulong)
-if test "$ac_cv_ulong" = "yes"
-then
- AC_DEFINE(HAVE_ULONG,,[ ])
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_UCHAR,
-[AC_MSG_CHECKING(for type uchar)
-AC_CACHE_VAL(ac_cv_uchar,
-[AC_TRY_RUN([#include <stdio.h>
-#include <sys/types.h>
-main()
-{
- uchar foo;
- foo++;
- exit(0);
-}], ac_cv_uchar=yes, ac_cv_uchar=no, ac_cv_uchar=no)])
-AC_MSG_RESULT($ac_cv_uchar)
-if test "$ac_cv_uchar" = "yes"
-then
- AC_DEFINE(HAVE_UCHAR,,[ ])
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_UINT,
-[AC_MSG_CHECKING(for type uint)
-AC_CACHE_VAL(ac_cv_uint,
-[AC_TRY_RUN([#include <stdio.h>
-#include <sys/types.h>
-main()
-{
- uint foo;
- foo++;
- exit(0);
-}], ac_cv_uint=yes, ac_cv_uint=no, ac_cv_uint=no)])
-AC_MSG_RESULT($ac_cv_uint)
-if test "$ac_cv_uint" = "yes"
-then
- AC_DEFINE(HAVE_UINT,,[ ])
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_USHORT,
-[AC_MSG_CHECKING(for type ushort)
-AC_CACHE_VAL(ac_cv_ushort,
-[AC_TRY_RUN([#include <stdio.h>
-#include <sys/types.h>
-main()
-{
- ushort foo;
- foo++;
- exit(0);
-}], ac_cv_ushort=yes, ac_cv_ushort=no, ac_cv_ushort=no)])
-AC_MSG_RESULT($ac_cv_ushort)
-if test "$ac_cv_ushort" = "yes"
-then
- AC_DEFINE(HAVE_USHORT,,[ ])
-fi
-])
-
-AC_DEFUN(MYSQL_CHECK_INT_8_16_32,
-[AC_MSG_CHECKING([for int8])
-AC_CACHE_VAL(ac_cv_int8,
-[AC_TRY_RUN([
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-int main()
-{
- int8 i;
- return 0;
-}
-], ac_cv_int8=yes, ac_cv_int8=no, ac_cv_int8=no)])
-AC_MSG_RESULT($ac_cv_int8)
-if test "$ac_cv_int8" = "yes"
-then
- AC_DEFINE(HAVE_INT_8_16_32,,[ ])
-fi
-])
-
-
-AC_DEFUN(MYSQL_HEADER_CHECKS,[
-AC_HEADER_STDC
-AC_CHECK_HEADERS(sgtty.h sys/ioctl.h \
- fcntl.h float.h floatingpoint.h ieeefp.h limits.h \
- memory.h pwd.h select.h \
- stdlib.h stddef.h \
- strings.h string.h synch.h sys/mman.h sys/socket.h \
- sys/timeb.h sys/types.h sys/un.h sys/vadvise.h sys/wait.h term.h \
- unistd.h utime.h sys/utime.h termio.h termios.h sched.h crypt.h alloca.h)
-])
-
-AC_DEFUN(MYSQL_TYPE_CHECKS,[
-
-AC_REQUIRE([AC_C_CONST])
-AC_REQUIRE([AC_C_INLINE])
-AC_CHECK_SIZEOF(char, 1)
-
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_TYPE_UID_T
-
-MYSQL_CHECK_ULONG
-MYSQL_CHECK_UCHAR
-MYSQL_CHECK_UINT
-MYSQL_CHECK_USHORT
-MYSQL_CHECK_INT_8_16_32
-
-MYSQL_TYPE_ACCEPT
-MYSQL_TYPE_QSORT
-
-AC_REQUIRE([AC_TYPE_SIGNAL])
-])
diff --git a/ext/mysql/libmysql/array.c b/ext/mysql/libmysql/array.c
deleted file mode 100644
index dcf1cb07b4..0000000000
--- a/ext/mysql/libmysql/array.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Handling of arrays that can grow dynamicly. */
-
-#if defined(WIN32) || defined(__WIN__)
-#undef SAFEMALLOC /* Problems with threads */
-#endif
-
-#include "mysys_priv.h"
-#include "m_string.h"
-
-/*
- Initiate array and alloc space for init_alloc elements. Array is usable
- even if space allocation failed
-*/
-
-my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size,
- uint init_alloc, uint alloc_increment)
-{
- DBUG_ENTER("init_dynamic_array");
- if (!alloc_increment)
- {
- alloc_increment=max((8192-MALLOC_OVERHEAD)/element_size,16);
- if (init_alloc > 8 && alloc_increment > init_alloc * 2)
- alloc_increment=init_alloc*2;
- }
-
- if (!init_alloc)
- init_alloc=alloc_increment;
- array->elements=0;
- array->max_element=init_alloc;
- array->alloc_increment=alloc_increment;
- array->size_of_element=element_size;
- if (!(array->buffer=(char*) my_malloc(element_size*init_alloc,MYF(MY_WME))))
- {
- array->max_element=0;
- DBUG_RETURN(TRUE);
- }
- DBUG_RETURN(FALSE);
-}
-
-
-my_bool insert_dynamic(DYNAMIC_ARRAY *array, gptr element)
-{
- gptr buffer;
- if (array->elements == array->max_element)
- { /* Call only when nessesary */
- if (!(buffer=alloc_dynamic(array)))
- return TRUE;
- }
- else
- {
- buffer=array->buffer+(array->elements * array->size_of_element);
- array->elements++;
- }
- memcpy(buffer,element,(size_t) array->size_of_element);
- return FALSE;
-}
-
-
- /* Alloc room for one element */
-
-byte *alloc_dynamic(DYNAMIC_ARRAY *array)
-{
- if (array->elements == array->max_element)
- {
- char *new_ptr;
- if (!(new_ptr=(char*) my_realloc(array->buffer,(array->max_element+
- array->alloc_increment)*
- array->size_of_element,
- MYF(MY_WME | MY_ALLOW_ZERO_PTR))))
- return 0;
- array->buffer=new_ptr;
- array->max_element+=array->alloc_increment;
- }
- return array->buffer+(array->elements++ * array->size_of_element);
-}
-
-
- /* remove last element from array and return it */
-
-byte *pop_dynamic(DYNAMIC_ARRAY *array)
-{
- if (array->elements)
- return array->buffer+(--array->elements * array->size_of_element);
- return 0;
-}
-
-
-my_bool set_dynamic(DYNAMIC_ARRAY *array, gptr element, uint idx)
-{
- if (idx >= array->elements)
- {
- if (idx >= array->max_element)
- {
- uint size;
- char *new_ptr;
- size=(idx+array->alloc_increment)/array->alloc_increment;
- size*= array->alloc_increment;
- if (!(new_ptr=(char*) my_realloc(array->buffer,size*
- array->size_of_element,
- MYF(MY_WME | MY_ALLOW_ZERO_PTR))))
- return TRUE;
- array->buffer=new_ptr;
- array->max_element=size;
- }
- bzero((gptr) (array->buffer+array->elements*array->size_of_element),
- (idx - array->elements)*array->size_of_element);
- array->elements=idx+1;
- }
- memcpy(array->buffer+(idx * array->size_of_element),element,
- (size_t) array->size_of_element);
- return FALSE;
-}
-
-
-void get_dynamic(DYNAMIC_ARRAY *array, gptr element, uint idx)
-{
- if (idx >= array->elements)
- {
- DBUG_PRINT("warning",("To big array idx: %d, array size is %d",
- idx,array->elements));
- bzero(element,array->size_of_element);
- return;
- }
- memcpy(element,array->buffer+idx*array->size_of_element,
- (size_t) array->size_of_element);
-}
-
-
-void delete_dynamic(DYNAMIC_ARRAY *array)
-{
- if (array->buffer)
- {
- my_free(array->buffer,MYF(MY_WME));
- array->buffer=0;
- array->elements=array->max_element=0;
- }
-}
-
-
-void delete_dynamic_element(DYNAMIC_ARRAY *array, uint idx)
-{
- char *ptr=array->buffer+array->size_of_element*idx;
- array->elements--;
- memmove(ptr,ptr+array->size_of_element,
- (array->elements-idx)*array->size_of_element);
-}
-
-
-void freeze_size(DYNAMIC_ARRAY *array)
-{
- uint elements=max(array->elements,1);
-
- if (array->buffer && array->max_element != elements)
- {
- array->buffer=(char*) my_realloc(array->buffer,
- elements*array->size_of_element,
- MYF(MY_WME));
- array->max_element=elements;
- }
-}
diff --git a/ext/mysql/libmysql/bchange.c b/ext/mysql/libmysql/bchange.c
deleted file mode 100644
index 95d363d52d..0000000000
--- a/ext/mysql/libmysql/bchange.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : bchange.c
- Author : Michael widenius
- Updated: 1987-03-20
- Defines: bchange()
-
- bchange(dst, old_length, src, new_length, tot_length)
- replaces old_length characters at dst to new_length characters from
- src in a buffer with tot_length bytes.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-void bchange(register char *dst, uint old_length, register const char *src, uint new_length, uint tot_length)
-{
- uint rest=tot_length-old_length;
- if (old_length < new_length)
- bmove_upp(dst+rest+new_length,dst+tot_length,rest);
- else
- bmove(dst+new_length,dst+old_length,rest);
- memcpy(dst,src,new_length);
-}
diff --git a/ext/mysql/libmysql/bmove.c b/ext/mysql/libmysql/bmove.c
deleted file mode 100644
index f63ff0bd4f..0000000000
--- a/ext/mysql/libmysql/bmove.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* File : bmove.c
- Author : Richard A. O'Keefe.
- Michael Widenius; ifdef MC68000
- Updated: 23 April 1984
- Defines: bmove()
-
- bmove(dst, src, len) moves exactly "len" bytes from the source "src"
- to the destination "dst". It does not check for NUL characters as
- strncpy() and strnmov() do. Thus if your C compiler doesn't support
- structure assignment, you can simulate it with
- bmove(&to, &from, sizeof from);
- The standard 4.2bsd routine for this purpose is bcopy. But as bcopy
- has its first two arguments the other way around you may find this a
- bit easier to get right.
- No value is returned.
-
- Note: the "b" routines are there to exploit certain VAX order codes,
- but the MOVC3 instruction will only move 65535 characters. The asm
- code is presented for your interest and amusement.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#if !defined(HAVE_BMOVE) && !defined(bmove)
-
-#if VaxAsm
-
-void bmove(dst, src, len)
- char *dst, *src;
- uint len;
- {
- asm("movc3 12(ap),*8(ap),*4(ap)");
- }
-
-#else
-#if defined(MC68000) && defined(DS90)
-
-void bmove(dst, src, len)
-char *dst,*src;
-uint len; /* 0 <= len <= 65535 */
-{
-asm(" movl 12(a7),d0 ");
-asm(" subql #1,d0 ");
-asm(" blt .L5 ");
-asm(" movl 4(a7),a1 ");
-asm(" movl 8(a7),a0 ");
-asm(".L4: movb (a0)+,(a1)+ ");
-asm(" dbf d0,.L4 ");
-asm(".L5: ");
-}
-#else
-
-void bmove(dst, src, len)
-register char *dst;
-register const char *src;
-register uint len;
-{
- while (len-- != 0) *dst++ = *src++;
-}
-#endif
-#endif
-#endif
diff --git a/ext/mysql/libmysql/bmove_upp.c b/ext/mysql/libmysql/bmove_upp.c
deleted file mode 100644
index e10f6978f7..0000000000
--- a/ext/mysql/libmysql/bmove_upp.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : bmove.c
- Author : Michael widenius
- Updated: 1987-03-20
- Defines: bmove_upp()
-
- bmove_upp(dst, src, len) moves exactly "len" bytes from the source
- "src-len" to the destination "dst-len" counting downwards.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#if defined(MC68000) && defined(DS90)
-
-/* 0 <= len <= 65535 */
-void bmove_upp(byte *dst, const byte *src,uint len)
-{
-asm(" movl 12(a7),d0 ");
-asm(" subql #1,d0 ");
-asm(" blt .L5 ");
-asm(" movl 4(a7),a1 ");
-asm(" movl 8(a7),a0 ");
-asm(".L4: movb -(a0),-(a1) ");
-asm(" dbf d0,.L4 ");
-asm(".L5: ");
-}
-#else
-
-void bmove_upp(register char *dst, register const char *src, register uint len)
-{
- while (len-- != 0) *--dst = *--src;
-}
-
-#endif
diff --git a/ext/mysql/libmysql/charset.c b/ext/mysql/libmysql/charset.c
deleted file mode 100644
index a6b4db893a..0000000000
--- a/ext/mysql/libmysql/charset.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <m_ctype.h>
-#include <m_string.h>
-#include <my_dir.h>
-
-typedef struct cs_id_st {
- char *name;
- uint number;
-} CS_ID;
-
-const char *charsets_dir = NULL;
-static DYNAMIC_ARRAY cs_info_table;
-static CS_ID **available_charsets;
-static int charset_initialized=0;
-
-#define MAX_LINE 1024
-
-#define CTYPE_TABLE_SIZE 257
-#define TO_LOWER_TABLE_SIZE 256
-#define TO_UPPER_TABLE_SIZE 256
-#define SORT_ORDER_TABLE_SIZE 256
-
-struct simpleconfig_buf_st {
- FILE *f;
- char buf[MAX_LINE];
- char *p;
-};
-
-/* Defined in strings/ctype.c */
-
-CHARSET_INFO *find_compiled_charset(uint cs_number);
-uint compiled_charset_number(const char *name);
-const char *compiled_charset_name(uint charset_number);
-
-
-static uint num_from_csname(CS_ID **cs, const char *name)
-{
- CS_ID **c;
- for (c = cs; *c; ++c)
- if (!strcmp((*c)->name, name))
- return (*c)->number;
- return 0; /* this mimics find_type() */
-}
-
-static char *name_from_csnum(CS_ID **cs, uint number)
-{
- CS_ID **c;
- if(cs)
- for (c = cs; *c; ++c)
- if ((*c)->number == number)
- return (*c)->name;
- return (char*) "?"; /* this mimics find_type() */
-}
-
-static my_bool get_word(struct simpleconfig_buf_st *fb, char *buf)
-{
- char *endptr=fb->p;
-
- for (;;)
- {
- while (isspace(*endptr))
- ++endptr;
- if (*endptr && *endptr != '#') /* Not comment */
- break; /* Found something */
- if ((fgets(fb->buf, sizeof(fb->buf), fb->f)) == NULL)
- return TRUE; /* end of file */
- endptr = fb->buf;
- }
-
- while (!isspace(*endptr))
- *buf++= *endptr++;
- *buf=0;
- fb->p = endptr;
-
- return FALSE;
-}
-
-
-char *get_charsets_dir(char *buf)
-{
- const char *sharedir = SHAREDIR;
- DBUG_ENTER("get_charsets_dir");
-
- if (charsets_dir != NULL)
- strmake(buf, charsets_dir, FN_REFLEN-1);
- else
- {
- if (test_if_hard_path(sharedir) ||
- is_prefix(sharedir, DEFAULT_CHARSET_HOME))
- strxmov(buf, sharedir, "/", CHARSET_DIR, NullS);
- else
- strxmov(buf, DEFAULT_CHARSET_HOME, "/", sharedir, "/", CHARSET_DIR,
- NullS);
- }
- convert_dirname(buf);
- DBUG_PRINT("info",("charsets dir='%s'", buf));
- DBUG_RETURN(strend(buf));
-}
-
-
-static my_bool read_charset_index(CS_ID ***charsets, myf myflags)
-{
- struct simpleconfig_buf_st fb;
- char buf[MAX_LINE], num_buf[MAX_LINE];
- DYNAMIC_ARRAY cs;
- CS_ID *csid;
-
- strmov(get_charsets_dir(buf), "Index");
-
- if ((fb.f = my_fopen(buf, O_RDONLY, myflags)) == NULL)
- return TRUE;
- fb.buf[0] = '\0';
- fb.p = fb.buf;
-
- if (init_dynamic_array(&cs, sizeof(CS_ID *), 32, 32))
- return TRUE;
-
- while (!get_word(&fb, buf) && !get_word(&fb, num_buf))
- {
- uint csnum;
- uint length;
-
- if (!(csnum = atoi(num_buf)))
- {
- /* corrupt Index file */
- my_fclose(fb.f,myflags);
- return TRUE;
- }
-
- if (!(csid = (CS_ID*) my_once_alloc(sizeof(CS_ID), myflags)) ||
- !(csid->name=
- (char*) my_once_alloc(length= (uint) strlen(buf)+1, myflags)))
- {
- my_fclose(fb.f,myflags);
- return TRUE;
- }
- memcpy(csid->name,buf,length);
- csid->number = csnum;
-
- insert_dynamic(&cs, (gptr) &csid);
- }
- my_fclose(fb.f,myflags);
-
-
- if (!(*charsets =
- (CS_ID **) my_once_alloc((cs.elements + 1) * sizeof(CS_ID *), myflags)))
- return TRUE;
- /* unwarranted chumminess with dynamic_array implementation? */
- memcpy((byte *) *charsets, cs.buffer, cs.elements * sizeof(CS_ID *));
- (*charsets)[cs.elements] = NULL;
- delete_dynamic(&cs);
-
- return FALSE;
-}
-
-
-static my_bool init_available_charsets(myf myflags)
-{
- my_bool error=0;
- /*
- We have to use charset_initialized to not lock on THR_LOCK_charset
- inside get_internal_charset...
- */
- if (!charset_initialized)
- {
- /*
- To make things thread safe we are not allowing other threads to interfere
- while we may changing the cs_info_table
- */
- pthread_mutex_lock(&THR_LOCK_charset);
- if (!cs_info_table.buffer) /* If not initialized */
- {
- init_dynamic_array(&cs_info_table, sizeof(CHARSET_INFO*), 16, 8);
- error = read_charset_index(&available_charsets, myflags);
- }
- charset_initialized=1;
- pthread_mutex_unlock(&THR_LOCK_charset);
- }
- if(!available_charsets || !available_charsets[0])
- error = TRUE;
- return error;
-}
-
-
-void free_charsets(void)
-{
- delete_dynamic(&cs_info_table);
-}
-
-
-static my_bool fill_array(uchar *array, int sz, struct simpleconfig_buf_st *fb)
-{
- char buf[MAX_LINE];
- while (sz--)
- {
- if (get_word(fb, buf))
- {
- DBUG_PRINT("error",("get_word failed, expecting %d more words", sz + 1));
- return 1;
- }
- *array++ = (uchar) strtol(buf, NULL, 16);
- }
- return 0;
-}
-
-
-static void get_charset_conf_name(uint cs_number, char *buf)
-{
- strxmov(get_charsets_dir(buf),
- name_from_csnum(available_charsets, cs_number), ".conf", NullS);
-}
-
-
-static my_bool read_charset_file(uint cs_number, CHARSET_INFO *set,
- myf myflags)
-{
- struct simpleconfig_buf_st fb;
- char buf[FN_REFLEN];
- my_bool result;
- DBUG_ENTER("read_charset_file");
- DBUG_PRINT("enter",("cs_number: %d", cs_number));
-
- if (cs_number <= 0)
- DBUG_RETURN(TRUE);
-
- get_charset_conf_name(cs_number, buf);
- DBUG_PRINT("info",("file name: %s", buf));
-
- if ((fb.f = my_fopen(buf, O_RDONLY, myflags)) == NULL)
- DBUG_RETURN(TRUE);
-
- fb.buf[0] = '\0'; /* Init for get_word */
- fb.p = fb.buf;
-
- result=FALSE;
- if (fill_array(set->ctype, CTYPE_TABLE_SIZE, &fb) ||
- fill_array(set->to_lower, TO_LOWER_TABLE_SIZE, &fb) ||
- fill_array(set->to_upper, TO_UPPER_TABLE_SIZE, &fb) ||
- fill_array(set->sort_order, SORT_ORDER_TABLE_SIZE, &fb))
- result=TRUE;
-
- my_fclose(fb.f, MYF(0));
- DBUG_RETURN(result);
-}
-
-
-uint get_charset_number(const char *charset_name)
-{
- my_bool error;
- error = init_available_charsets(MYF(0)); /* If it isn't initialized */
- if (error)
- return compiled_charset_number(charset_name);
- else
- return num_from_csname(available_charsets, charset_name);
-}
-
-const char *get_charset_name(uint charset_number)
-{
- my_bool error;
- error = init_available_charsets(MYF(0)); /* If it isn't initialized */
- if (error)
- return compiled_charset_name(charset_number);
- else
- return name_from_csnum(available_charsets, charset_number);
-}
-
-
-static CHARSET_INFO *find_charset(CHARSET_INFO **table, uint cs_number,
- size_t tablesz)
-{
- uint i;
- for (i = 0; i < tablesz; ++i)
- if (table[i]->number == cs_number)
- return table[i];
- return NULL;
-}
-
-static CHARSET_INFO *find_charset_by_name(CHARSET_INFO **table, const char *name,
- size_t tablesz)
-{
- uint i;
- for (i = 0; i < tablesz; ++i)
- if (!strcmp(table[i]->name,name))
- return table[i];
- return NULL;
-}
-
-static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name,
- myf flags)
-{
- CHARSET_INFO tmp_cs,*cs;
- uchar tmp_ctype[CTYPE_TABLE_SIZE];
- uchar tmp_to_lower[TO_LOWER_TABLE_SIZE];
- uchar tmp_to_upper[TO_UPPER_TABLE_SIZE];
- uchar tmp_sort_order[SORT_ORDER_TABLE_SIZE];
-
- /* Don't allocate memory if we are not sure we can find the char set */
- cs= &tmp_cs;
- bzero((char*) cs, sizeof(*cs));
- cs->ctype=tmp_ctype;
- cs->to_lower=tmp_to_lower;
- cs->to_upper=tmp_to_upper;
- cs->sort_order=tmp_sort_order;
- if (read_charset_file(cs_number, cs, flags))
- return NULL;
-
- cs = (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),
- MYF(MY_WME));
- *cs=tmp_cs;
- cs->name = (char *) my_once_alloc((uint) strlen(cs_name)+1, MYF(MY_WME));
- cs->ctype = (uchar*) my_once_alloc(CTYPE_TABLE_SIZE, MYF(MY_WME));
- cs->to_lower = (uchar*) my_once_alloc(TO_LOWER_TABLE_SIZE, MYF(MY_WME));
- cs->to_upper = (uchar*) my_once_alloc(TO_UPPER_TABLE_SIZE, MYF(MY_WME));
- cs->sort_order=(uchar*) my_once_alloc(SORT_ORDER_TABLE_SIZE, MYF(MY_WME));
- cs->number = cs_number;
- memcpy((char*) cs->name, (char*) cs_name, strlen(cs_name) + 1);
- memcpy((char*) cs->ctype, (char*) tmp_ctype, sizeof(tmp_ctype));
- memcpy((char*) cs->to_lower, (char*) tmp_to_lower, sizeof(tmp_to_lower));
- memcpy((char*) cs->to_upper, (char*) tmp_to_upper, sizeof(tmp_to_upper));
- memcpy((char*) cs->sort_order, (char*) tmp_sort_order,
- sizeof(tmp_sort_order));
- insert_dynamic(&cs_info_table, (gptr) &cs);
- return cs;
-}
-
-static CHARSET_INFO *get_internal_charset(uint cs_number, myf flags)
-{
- CHARSET_INFO *cs;
- /*
- To make things thread safe we are not allowing other threads to interfere
- while we may changing the cs_info_table
- */
- pthread_mutex_lock(&THR_LOCK_charset);
- if (!(cs = find_charset((CHARSET_INFO**) cs_info_table.buffer, cs_number,
- cs_info_table.elements)))
- if (!(cs = find_compiled_charset(cs_number)))
- cs=add_charset(cs_number, get_charset_name(cs_number), flags);
- pthread_mutex_unlock(&THR_LOCK_charset);
- return cs;
-}
-
-
-static CHARSET_INFO *get_internal_charset_by_name(const char *name, myf flags)
-{
- CHARSET_INFO *cs;
- /*
- To make things thread safe we are not allowing other threads to interfere
- while we may changing the cs_info_table
- */
- pthread_mutex_lock(&THR_LOCK_charset);
- if (!(cs = find_charset_by_name((CHARSET_INFO**) cs_info_table.buffer, name,
- cs_info_table.elements)))
- if (!(cs = find_compiled_charset_by_name(name)))
- cs=add_charset(get_charset_number(name), name, flags);
- pthread_mutex_unlock(&THR_LOCK_charset);
- return cs;
-}
-
-
-CHARSET_INFO *get_charset(uint cs_number, myf flags)
-{
- CHARSET_INFO *cs;
- (void) init_available_charsets(MYF(0)); /* If it isn't initialized */
- cs=get_internal_charset(cs_number, flags);
-
- if (!cs && (flags & MY_WME))
- {
- char index_file[FN_REFLEN], cs_string[23];
- strmov(get_charsets_dir(index_file), "Index");
- cs_string[0]='#';
- int10_to_str(cs_number, cs_string+1, 10);
- my_error(EE_UNKNOWN_CHARSET, MYF(ME_BELL), cs_string, index_file);
- }
- return cs;
-}
-
-my_bool set_default_charset(uint cs, myf flags)
-{
- CHARSET_INFO *new;
- DBUG_ENTER("set_default_charset");
- DBUG_PRINT("enter",("character set: %d",(int) cs));
- new = get_charset(cs, flags);
- if (!new)
- {
- DBUG_PRINT("error",("Couldn't set default character set"));
- DBUG_RETURN(TRUE); /* error */
- }
- default_charset_info = new;
- DBUG_RETURN(FALSE);
-}
-
-CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags)
-{
- CHARSET_INFO *cs;
- (void) init_available_charsets(MYF(0)); /* If it isn't initialized */
- cs=get_internal_charset_by_name(cs_name, flags);
-
- if (!cs && (flags & MY_WME))
- {
- char index_file[FN_REFLEN];
- strmov(get_charsets_dir(index_file), "Index");
- my_error(EE_UNKNOWN_CHARSET, MYF(ME_BELL), cs_name, index_file);
- }
-
- return cs;
-}
-
-my_bool set_default_charset_by_name(const char *cs_name, myf flags)
-{
- CHARSET_INFO *new;
- DBUG_ENTER("set_default_charset_by_name");
- DBUG_PRINT("enter",("character set: %s", cs_name));
- new = get_charset_by_name(cs_name, flags);
- if (!new)
- {
- DBUG_PRINT("error",("Couldn't set default character set"));
- DBUG_RETURN(TRUE); /* error */
- }
-
- default_charset_info = new;
- DBUG_RETURN(FALSE);
-}
-
-/* Only append name if it doesn't exist from before */
-
-static my_bool charset_in_string(const char *name, DYNAMIC_STRING *s)
-{
- uint length= (uint) strlen(name);
- const char *pos;
- for (pos=s->str ; (pos=strstr(pos,name)) ; pos++)
- {
- if (! pos[length] || pos[length] == ' ')
- return TRUE; /* Already existed */
- }
-
- return FALSE;
-}
-
-static void charset_append(DYNAMIC_STRING *s, const char *name)
-{
- if (!charset_in_string(name, s)) {
- dynstr_append(s, name);
- dynstr_append(s, " ");
- }
-}
-
-
-/* Returns a dynamically-allocated string listing the character sets
- requested. The caller is responsible for freeing the memory. */
-
-char * list_charsets(myf want_flags)
-{
- DYNAMIC_STRING s;
- char *p;
-
- (void)init_available_charsets(MYF(0));
- init_dynamic_string(&s, NullS, 256, 1024);
-
- if (want_flags & MY_COMPILED_SETS)
- {
- CHARSET_INFO *cs;
- for (cs = compiled_charsets; cs->number > 0; cs++)
- {
- dynstr_append(&s, cs->name);
- dynstr_append(&s, " ");
- }
- }
-
- if (want_flags & MY_CONFIG_SETS)
- {
- CS_ID **c;
- char buf[FN_REFLEN];
- MY_STAT status;
-
- if((c=available_charsets))
- for (; *c; ++c)
- {
- if (charset_in_string((*c)->name, &s))
- continue;
- get_charset_conf_name((*c)->number, buf);
- if (!my_stat(buf, &status, MYF(0)))
- continue; /* conf file doesn't exist */
- dynstr_append(&s, (*c)->name);
- dynstr_append(&s, " ");
- }
- }
-
- if (want_flags & MY_INDEX_SETS)
- {
- CS_ID **c;
- for (c = available_charsets; *c; ++c)
- charset_append(&s, (*c)->name);
- }
-
- if (want_flags & MY_LOADED_SETS)
- {
- uint i;
- for (i = 0; i < cs_info_table.elements; i++)
- charset_append(&s,
- dynamic_element(&cs_info_table, i, CHARSET_INFO *)->name);
- }
- s.str[s.length - 1] = '\0'; /* chop trailing space */
- p = my_strdup(s.str, MYF(MY_WME));
- dynstr_free(&s);
-
- return p;
-}
-
-/****************************************************************************
-* Code for debugging.
-****************************************************************************/
-
-
-static void _print_array(uint8 *data, uint size)
-{
- uint i;
- for (i = 0; i < size; ++i)
- {
- if (i == 0 || i % 16 == size % 16) printf(" ");
- printf(" %02x", data[i]);
- if ((i+1) % 16 == size % 16) printf("\n");
- }
-}
-
-/* _print_csinfo is called from test_charset.c */
-void _print_csinfo(CHARSET_INFO *cs)
-{
- printf("%s #%d\n", cs->name, cs->number);
- printf("ctype:\n"); _print_array(cs->ctype, 257);
- printf("to_lower:\n"); _print_array(cs->to_lower, 256);
- printf("to_upper:\n"); _print_array(cs->to_upper, 256);
- printf("sort_order:\n"); _print_array(cs->sort_order, 256);
- printf("collate: %3s (%d, %p, %p, %p, %p, %p)\n",
- cs->strxfrm_multiply ? "yes" : "no",
- cs->strxfrm_multiply,
- cs->strcoll,
- cs->strxfrm,
- cs->strnncoll,
- cs->strnxfrm,
- cs->like_range);
- printf("multi-byte: %3s (%d, %p, %p, %p)\n",
- cs->mbmaxlen ? "yes" : "no",
- cs->mbmaxlen,
- cs->ismbchar,
- cs->ismbhead,
- cs->mbcharlen);
-}
diff --git a/ext/mysql/libmysql/config-win.h b/ext/mysql/libmysql/config-win.h
deleted file mode 100644
index 5d4d40d98b..0000000000
--- a/ext/mysql/libmysql/config-win.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Defines for Win32 to make it compatible for MySQL */
-
-#include <sys/locking.h>
-#include <windows.h>
-#include <math.h> /* Because of rint() */
-#include <fcntl.h>
-#include <io.h>
-#include <malloc.h>
-
-#if defined(__NT__)
-#define SYSTEM_TYPE "NT"
-#elif defined(__WIN2000__)
-#define SYSTEM_TYPE "WIN2000"
-#else
-#define SYSTEM_TYPE "Win95/Win98"
-#endif
-
-#ifdef _WIN64
-#define MACHINE_TYPE "ia64" /* Define to machine type name */
-#else
-#define MACHINE_TYPE "i32" /* Define to machine type name */
-#ifndef _WIN32
-#define _WIN32 /* Compatible with old source */
-#endif
-#ifndef __WIN32__
-#define __WIN32__
-#endif
-#endif /* _WIN64 */
-#ifndef __WIN__
-#define __WIN__ /* To make it easier in VC++ */
-#endif
-
-/* File and lock constants */
-#define O_SHARE 0x1000 /* Open file in sharing mode */
-#ifdef __BORLANDC__
-#define F_RDLCK LK_NBLCK /* read lock */
-#define F_WRLCK LK_NBRLCK /* write lock */
-#define F_UNLCK LK_UNLCK /* remove lock(s) */
-#else
-#define F_RDLCK _LK_NBLCK /* read lock */
-#define F_WRLCK _LK_NBRLCK /* write lock */
-#define F_UNLCK _LK_UNLCK /* remove lock(s) */
-#endif
-
-#define F_EXCLUSIVE 1 /* We have only exclusive locking */
-#define F_TO_EOF (INT_MAX32/2) /* size for lock of all file */
-#define F_OK 0 /* parameter to access() */
-
-#define S_IROTH S_IREAD /* for my_lib */
-
-#ifdef __BORLANDC__
-#define FILE_BINARY O_BINARY /* my_fopen in binary mode */
-#define O_TEMPORARY 0
-#define O_SHORT_LIVED 0
-#define SH_DENYNO _SH_DENYNO
-#else
-#define O_BINARY _O_BINARY /* compability with MSDOS */
-#define FILE_BINARY _O_BINARY /* my_fopen in binary mode */
-#define O_TEMPORARY _O_TEMPORARY
-#define O_SHORT_LIVED _O_SHORT_LIVED
-#define SH_DENYNO _SH_DENYNO
-#endif
-#define NO_OPEN_3 /* For my_create() */
-
-#define SIGQUIT SIGTERM /* No SIGQUIT */
-
-#undef _REENTRANT /* Crashes something for win32 */
-#undef SAFE_MUTEX /* Can't be used on windows */
-
-#define LONGLONG_MIN ((__int64) 0x8000000000000000)
-#define LONGLONG_MAX ((__int64) 0x7FFFFFFFFFFFFFFF)
-#define LL(A) ((__int64) A)
-
-/* Type information */
-
-typedef unsigned short ushort;
-typedef unsigned int uint;
-typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */
-typedef __int64 longlong;
-typedef int sigset_t;
-#define longlong_defined
-/* off_t should not be __int64 because of conflicts in header files;
- Use my_off_t or os_off_t instead */
-typedef long off_t;
-typedef __int64 os_off_t;
-#ifdef _WIN64
-typedef UINT_PTR rf_SetTimer;
-#else
-typedef unsigned int size_t;
-typedef uint rf_SetTimer;
-#endif
-
-#define Socket_defined
-#define my_socket SOCKET
-#define bool BOOL
-#define SIGPIPE SIGINT
-#define RETQSORTTYPE void
-#define QSORT_TYPE_IS_VOID
-#define RETSIGTYPE void
-#define SOCKET_SIZE_TYPE int
-#define my_socket_defined
-#define bool_defined
-#define byte_defined
-#define HUGE_PTR
-#define STDCALL __stdcall /* Used by libmysql.dll */
-
-#ifndef UNDEF_THREAD_HACK
-#define THREAD
-#endif
-#define VOID_SIGHANDLER
-#define SIZEOF_CHAR 1
-#define SIZEOF_LONG 4
-#define SIZEOF_LONG_LONG 8
-#define SIZEOF_OFF_T 8
-#define HAVE_BROKEN_NETINET_INCLUDES
-#ifdef __NT__
-#define HAVE_NAMED_PIPE /* We can only create pipes on NT */
-#endif
-
-/* Use all character sets in MySQL */
-#define USE_MB 1
-#define USE_MB_IDENT 1
-#define USE_STRCOLL 1
-
-/* Convert some simple functions to Posix */
-
-#define sigset(A,B) signal((A),(B))
-#define finite(A) _finite(A)
-#define sleep(A) Sleep((A)*1000)
-
-#ifndef __BORLANDC__
-#define access(A,B) _access(A,B)
-#endif
-
-#if defined(__cplusplus)
-
-inline double rint(double nr)
-{
- double f = floor(nr);
- double c = ceil(nr);
- return (((c-nr) >= (nr-f)) ? f :c);
-}
-
-#ifdef _WIN64
-#define ulonglong2double(A) ((double) (A))
-#define my_off_t2double(A) ((double) (A))
-
-#else
-inline double ulonglong2double(ulonglong value)
-{
- longlong nr=(longlong) value;
- if (nr >= 0)
- return (double) nr;
- return (18446744073709551616.0 + (double) nr);
-}
-#define my_off_t2double(A) ulonglong2double(A)
-#endif /* _WIN64 */
-#else
-#define inline __inline
-#endif /* __cplusplus */
-
-#if SIZEOF_OFF_T > 4
-#define lseek(A,B,C) _lseeki64((A),(longlong) (B),(C))
-#define tell(A) _telli64(A)
-#endif
-
-#define STACK_DIRECTION -1
-
-/* Optimized store functions for Intel x86 */
-
-#define sint2korr(A) (*((int16 *) (A)))
-#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
- (((uint32) 255L << 24) | \
- (((uint32) (uchar) (A)[2]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[0])) : \
- (((uint32) (uchar) (A)[2]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[0])))
-#define sint4korr(A) (*((long *) (A)))
-#define uint2korr(A) (*((uint16 *) (A)))
-#define uint3korr(A) (long) (*((unsigned long *) (A)) & 0xFFFFFF)
-#define uint4korr(A) (*((unsigned long *) (A)))
-#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24)) +\
- (((ulonglong) ((uchar) (A)[4])) << 32))
-#define uint8korr(A) (*((ulonglong *) (A)))
-#define sint8korr(A) (*((longlong *) (A)))
-#define int2store(T,A) *((uint16*) (T))= (uint16) (A)
-#define int3store(T,A) { *(T)= (uchar) ((A));\
- *(T+1)=(uchar) (((uint) (A) >> 8));\
- *(T+2)=(uchar) (((A) >> 16)); }
-#define int4store(T,A) *((long *) (T))= (long) (A)
-#define int5store(T,A) { *(T)= (uchar)((A));\
- *((T)+1)=(uchar) (((A) >> 8));\
- *((T)+2)=(uchar) (((A) >> 16));\
- *((T)+3)=(uchar) (((A) >> 24)); \
- *((T)+4)=(uchar) (((A) >> 32)); }
-#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A)
-
-#define doubleget(V,M) { *((long *) &V) = *((long*) M); \
- *(((long *) &V)+1) = *(((long*) M)+1); }
-#define doublestore(T,V) { *((long *) T) = *((long*) &V); \
- *(((long *) T)+1) = *(((long*) &V)+1); }
-#define float4get(V,M) { *((long *) &(V)) = *((long*) (M)); }
-#define float8get(V,M) doubleget((V),(M))
-#define float4store(V,M) memcpy((byte*) V,(byte*) (&M),sizeof(float))
-#define float8store(V,M) doublestore((V),(M))
-
-
-#define HAVE_PERROR
-#define HAVE_VFPRINT
-#define HAVE_CHSIZE /* System has chsize() function */
-#define HAVE_RENAME /* Have rename() as function */
-#define HAVE_BINARY_STREAMS /* Have "b" flag in streams */
-#define HAVE_LONG_JMP /* Have long jump function */
-#define HAVE_LOCKING /* have locking() call */
-#define HAVE_ERRNO_AS_DEFINE /* errno is a define */
-#define HAVE_STDLIB /* everything is include in this file */
-#define HAVE_MEMCPY
-#define HAVE_MEMMOVE
-#define HAVE_GETCWD
-#define HAVE_TELL
-#define HAVE_TZNAME
-#define HAVE_PUTENV
-#define HAVE_SELECT
-#define HAVE_SETLOCALE
-#define HAVE_SOCKET /* Giangi */
-#define HAVE_FLOAT_H
-#define HAVE_LIMITS_H
-#define HAVE_STDDEF_H
-#define HAVE_RINT /* defined in this file */
-#define NO_FCNTL_NONBLOCK /* No FCNTL */
-#define HAVE_ALLOCA
-#define HAVE_STRPBRK
-#define HAVE_STRSTR
-/* #define HAVE_COMPRESS -- not with PHP, please */
-
-#ifdef NOT_USED
-#define HAVE_SNPRINTF /* Gave link error */
-#define _snprintf snprintf
-#endif
-
-#ifdef _MSC_VER
-#define HAVE_LDIV /* The optimizer breaks in zortech for ldiv */
-#define HAVE_ANSI_INCLUDE
-#define HAVE_SYS_UTIME_H
-#define HAVE_STRTOUL
-#endif
-#define my_reinterpret_cast(A) reinterpret_cast <A>
-#define my_const_cast(A) const_cast<A>
-
-/* MYSQL OPTIONS */
-
-#ifdef _CUSTOMCONFIG_
-#include <custom_conf.h>
-#else
-#define DEFAULT_MYSQL_HOME "c:\\mysql"
-#define PACKAGE "mysql"
-#define DEFAULT_BASEDIR "C:\\"
-#define SHAREDIR "share"
-#define DEFAULT_CHARSET_HOME "C:/mysql/"
-#endif
-
-/* File name handling */
-
-#define FN_LIBCHAR '\\'
-#define FN_ROOTDIR "\\"
-#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */
-#define FN_NO_CASE_SENCE /* Files are not case-sensitive */
-#define FN_LOWER_CASE TRUE /* Files are represented in lower case */
-#define MY_NFILE 1024
-
-#define DO_NOT_REMOVE_THREAD_WRAPPERS
-#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V))
-/* The following is only used for statistics, so it should be good enough */
-#ifdef __NT__ /* This should also work on Win98 but .. */
-#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C))
-#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C))
-#define statistic_add(V,C,L) thread_safe_add((V),(C),(L))
-#else
-#define thread_safe_add(V,C,L) \
- pthread_mutex_lock((L)); (V)+=(C); pthread_mutex_unlock((L));
-#define thread_safe_sub(V,C,L) \
- pthread_mutex_lock((L)); (V)-=(C); pthread_mutex_unlock((L));
-#define statistic_add(V,C,L) (V)+=(C)
-#endif
-#define statistic_increment(V,L) thread_safe_increment((V),(L))
diff --git a/ext/mysql/libmysql/ctype.c b/ext/mysql/libmysql/ctype.c
deleted file mode 100644
index 151266ce0e..0000000000
--- a/ext/mysql/libmysql/ctype.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include <global.h>
-
-#include <m_ctype.h>
-
-/* generated by make, using conf_to_src */
-#include "ctype_extra_sources.c"
-
-/* generated by configure */
-#include "ctype_autoconf.c"
-
-CHARSET_INFO *default_charset_info = &compiled_charsets[0];
-
-CHARSET_INFO *find_compiled_charset(uint cs_number)
-{
- CHARSET_INFO *cs;
- for (cs = compiled_charsets; cs->number > 0; cs++)
- if (cs->number == cs_number)
- return cs;
-
- return NULL;
-}
-
-CHARSET_INFO *find_compiled_charset_by_name(const char *name)
-{
- CHARSET_INFO *cs;
- for (cs = compiled_charsets; cs->number > 0; cs++)
- if (!strcmp(cs->name, name))
- return cs;
-
- return NULL;
-}
-
-uint8 compiled_charset_number(const char *name)
-{
- CHARSET_INFO *cs;
- for (cs = compiled_charsets; cs->number > 0; cs++)
- if (!strcmp(cs->name, name))
- return cs->number;
-
- return 0; /* this mimics find_type() */
-}
-
-const char *compiled_charset_name(uint8 charset_number)
-{
- CHARSET_INFO *cs;
- for (cs = compiled_charsets; cs->number > 0; cs++)
- if (cs->number == charset_number)
- return cs->name;
-
- return "?"; /* this mimics get_type() */
-}
diff --git a/ext/mysql/libmysql/ctype_autoconf.c b/ext/mysql/libmysql/ctype_autoconf.c
deleted file mode 100644
index 22da693433..0000000000
--- a/ext/mysql/libmysql/ctype_autoconf.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* This file is generated automatically by configure. */
-
-CHARSET_INFO compiled_charsets[] = {
-
- /* this information is filled in by configure */
- {
- 8, /* number */
- "latin1", /* name */
- ctype_latin1,
- to_lower_latin1,
- to_upper_latin1,
- sort_order_latin1,
- 0, /* strxfrm_multiply */
- NULL, /* strcoll */
- NULL, /* strxfrm */
- NULL, /* strnncoll */
- NULL, /* strnxfrm */
- NULL, /* like_range */
- 0, /* mbmaxlen */
- NULL, /* ismbchar */
- NULL, /* ismbhead */
- NULL /* mbcharlen */
- },
-
- /* this information is filled in by configure */
- {
- 0, /* end-of-list marker */
- NullS,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- NULL,
- NULL,
- NULL
- }
-};
diff --git a/ext/mysql/libmysql/ctype_extra_sources.c b/ext/mysql/libmysql/ctype_extra_sources.c
deleted file mode 100644
index 97f0d38646..0000000000
--- a/ext/mysql/libmysql/ctype_extra_sources.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* The latin1 character set. Generated automatically by configure and
- * the ./conf_to_src program
- */
-
-uchar ctype_latin1[] = {
- 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
- 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16,
- 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2
-};
-
-uchar to_lower_latin1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
- 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223,
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
-};
-
-uchar to_upper_latin1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255
-};
-
-uchar sort_order_latin1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
- 68, 78, 79, 79, 79, 79, 93,215,216, 85, 85, 85, 89, 89,222,223,
- 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73,
- 68, 78, 79, 79, 79, 79, 93,247,216, 85, 85, 85, 89, 89,222,255
-};
-
-
diff --git a/ext/mysql/libmysql/dbug.c b/ext/mysql/libmysql/dbug.c
deleted file mode 100644
index f600b28100..0000000000
--- a/ext/mysql/libmysql/dbug.c
+++ /dev/null
@@ -1,2076 +0,0 @@
-/******************************************************************************
- * *
- * N O T I C E *
- * *
- * Copyright Abandoned, 1987, Fred Fish *
- * *
- * *
- * This previously copyrighted work has been placed into the public *
- * domain by the author and may be freely used for any purpose, *
- * private or commercial. *
- * *
- * Because of the number of inquiries I was receiving about the use *
- * of this product in commercially developed works I have decided to *
- * simply make it public domain to further its unrestricted use. I *
- * specifically would be most happy to see this material become a *
- * part of the standard Unix distributions by AT&T and the Berkeley *
- * Computer Science Research Group, and a standard part of the GNU *
- * system from the Free Software Foundation. *
- * *
- * I would appreciate it, as a courtesy, if this notice is left in *
- * all copies and derivative works. Thank you. *
- * *
- * The author makes no warranty of any kind with respect to this *
- * product and explicitly disclaims any implied warranties of mer- *
- * chantability or fitness for any particular purpose. *
- * *
- ******************************************************************************
- */
-
-
-/*
- * FILE
- *
- * dbug.c runtime support routines for dbug package
- *
- * SCCS
- *
- * @(#)dbug.c 1.25 7/25/89
- *
- * DESCRIPTION
- *
- * These are the runtime support routines for the dbug package.
- * The dbug package has two main components; the user include
- * file containing various macro definitions, and the runtime
- * support routines which are called from the macro expansions.
- *
- * Externally visible functions in the runtime support module
- * use the naming convention pattern "_db_xx...xx_", thus
- * they are unlikely to collide with user defined function names.
- *
- * AUTHOR(S)
- *
- * Fred Fish (base code)
- * Enhanced Software Technologies, Tempe, AZ
- * asuvax!mcdphx!estinc!fnf
- *
- * Binayak Banerjee (profiling enhancements)
- * seismo!bpa!sjuvax!bbanerje
- *
- * Michael Widenius:
- * DBUG_DUMP - To dump a pice of memory.
- * PUSH_FLAG "O" - To be used insted of "o" if we don't
- * want flushing (for slow systems)
- * PUSH_FLAG "A" - as 'O', but we will append to the out file instead
- * of creating a new one.
- * Check of malloc on entry/exit (option "S")
- */
-
-#ifdef DBUG_OFF
-#undef DBUG_OFF
-#endif
-#include <global.h>
-#include <m_string.h>
-#include <errno.h>
-#if defined(MSDOS) || defined(__WIN__)
-#include <process.h>
-#endif
-
-#ifdef _DBUG_CONDITION_
-#define _DBUG_START_CONDITION_ "d:t"
-#else
-#define _DBUG_START_CONDITION_ ""
-#endif
-
-/*
- * Manifest constants that should not require any changes.
- */
-
-#define EOS '\000' /* End Of String marker */
-
-/*
- * Manifest constants which may be "tuned" if desired.
- */
-
-#define PRINTBUF 1024 /* Print buffer size */
-#define INDENT 2 /* Indentation per trace level */
-#define MAXDEPTH 200 /* Maximum trace depth default */
-
-/*
- * The following flags are used to determine which
- * capabilities the user has enabled with the state
- * push macro.
- */
-
-#define TRACE_ON 000001 /* Trace enabled */
-#define DEBUG_ON 000002 /* Debug enabled */
-#define FILE_ON 000004 /* File name print enabled */
-#define LINE_ON 000010 /* Line number print enabled */
-#define DEPTH_ON 000020 /* Function nest level print enabled */
-#define PROCESS_ON 000040 /* Process name print enabled */
-#define NUMBER_ON 000100 /* Number each line of output */
-#define PROFILE_ON 000200 /* Print out profiling code */
-#define PID_ON 000400 /* Identify each line with process id */
-#define SANITY_CHECK_ON 001000 /* Check safemalloc on DBUG_ENTER */
-#define FLUSH_ON_WRITE 002000 /* Flush on every write */
-
-#define TRACING (stack -> flags & TRACE_ON)
-#define DEBUGGING (stack -> flags & DEBUG_ON)
-#define PROFILING (stack -> flags & PROFILE_ON)
-#define STREQ(a,b) (strcmp(a,b) == 0)
-
-/*
- * Typedefs to make things more obvious.
- */
-
-#ifndef __WIN__
-typedef int BOOLEAN;
-#else
-#define BOOLEAN BOOL
-#endif
-
-/*
- * Make it easy to change storage classes if necessary.
- */
-
-#define IMPORT extern /* Names defined externally */
-#define EXPORT /* Allocated here, available globally */
-#define AUTO auto /* Names to be allocated on stack */
-#define REGISTER register /* Names to be placed in registers */
-
-/*
- * The default file for profiling. Could also add another flag
- * (G?) which allowed the user to specify this.
- *
- * If the automatic variables get allocated on the stack in
- * reverse order from their declarations, then define AUTOS_REVERSE.
- * This is used by the code that keeps track of stack usage. For
- * forward allocation, the difference in the dbug frame pointers
- * represents stack used by the callee function. For reverse allocation,
- * the difference represents stack used by the caller function.
- *
- */
-
-#define PROF_FILE "dbugmon.out"
-#define PROF_EFMT "E\t%ld\t%s\n"
-#define PROF_SFMT "S\t%lx\t%lx\t%s\n"
-#define PROF_XFMT "X\t%ld\t%s\n"
-
-#ifdef M_I386 /* predefined by xenix 386 compiler */
-#define AUTOS_REVERSE 1
-#endif
-
-/*
- * Variables which are available externally but should only
- * be accessed via the macro package facilities.
- */
-
-EXPORT FILE *_db_fp_ = (FILE *) 0; /* Output stream, default stderr */
-EXPORT char *_db_process_ = (char*) "dbug"; /* Pointer to process name; argv[0] */
-EXPORT FILE *_db_pfp_ = (FILE *)0; /* Profile stream, 'dbugmon.out' */
-EXPORT BOOLEAN _db_on_ = FALSE; /* TRUE if debugging currently on */
-EXPORT BOOLEAN _db_pon_ = FALSE; /* TRUE if profile currently on */
-EXPORT BOOLEAN _no_db_ = FALSE; /* TRUE if no debugging at all */
-
-/*
- * Externally supplied functions.
- */
-
-#ifndef HAVE_PERROR
-static void perror (); /* Fake system/library error print routine */
-#endif
-
-IMPORT int _sanity(const char *file,uint line);
-
-/*
- * The user may specify a list of functions to trace or
- * debug. These lists are kept in a linear linked list,
- * a very simple implementation.
- */
-
-struct link {
- char *str; /* Pointer to link's contents */
- struct link *next_link; /* Pointer to the next link */
-};
-
-/*
- * Debugging states can be pushed or popped off of a
- * stack which is implemented as a linked list. Note
- * that the head of the list is the current state and the
- * stack is pushed by adding a new state to the head of the
- * list or popped by removing the first link.
- */
-
-struct state {
- int flags; /* Current state flags */
- int maxdepth; /* Current maximum trace depth */
- uint delay; /* Delay after each output line */
- int sub_level; /* Sub this from code_state->level */
- FILE *out_file; /* Current output stream */
- FILE *prof_file; /* Current profiling stream */
- char name[FN_REFLEN]; /* Name of output file */
- struct link *functions; /* List of functions */
- struct link *p_functions; /* List of profiled functions */
- struct link *keywords; /* List of debug keywords */
- struct link *processes; /* List of process names */
- struct state *next_state; /* Next state in the list */
-};
-
-
-/*
- * Local variables not seen by user.
- */
-
-
-static my_bool init_done = FALSE; /* Set to TRUE when initialization done */
-static struct state *stack=0;
-
-typedef struct st_code_state {
- int lineno; /* Current debugger output line number */
- int level; /* Current function nesting level */
- const char *func; /* Name of current user function */
- const char *file; /* Name of current user file */
- char **framep; /* Pointer to current frame */
- int jmplevel; /* Remember nesting level at setjmp () */
- const char *jmpfunc; /* Remember current function for setjmp */
- const char *jmpfile; /* Remember current file for setjmp */
-
-/*
- * The following variables are used to hold the state information
- * between the call to _db_pargs_() and _db_doprnt_(), during
- * expansion of the DBUG_PRINT macro. This is the only macro
- * that currently uses these variables.
- *
- * These variables are currently used only by _db_pargs_() and
- * _db_doprnt_().
- */
-
- uint u_line; /* User source code line number */
- const char *u_keyword; /* Keyword for current macro */
- int locked; /* If locked with _db_lock_file */
-} CODE_STATE;
-
- /* Parse a debug command string */
-static struct link *ListParse(char *ctlp);
- /* Make a fresh copy of a string */
-static char *StrDup(const char *str);
- /* Open debug output stream */
-static void DBUGOpenFile(const char *name, int append);
-#ifndef THREAD
- /* Open profile output stream */
-static FILE *OpenProfile(const char *name);
- /* Profile if asked for it */
-static BOOLEAN DoProfile(void);
-#endif
- /* Return current user time (ms) */
-#ifndef THREAD
-static unsigned long Clock (void);
-#endif
- /* Close debug output stream */
-static void CloseFile(FILE *fp);
- /* Push current debug state */
-static void PushState(void);
- /* Test for tracing enabled */
-static BOOLEAN DoTrace(CODE_STATE *state);
- /* Test to see if file is writable */
-#if !(!defined(HAVE_ACCESS) || defined(MSDOS))
-static BOOLEAN Writable(char *pathname);
- /* Change file owner and group */
-static void ChangeOwner(char *pathname);
- /* Allocate memory for runtime support */
-#endif
-static char *DbugMalloc(int size);
- /* Remove leading pathname components */
-static char *BaseName(const char *pathname);
-static void DoPrefix(uint line);
-static void FreeList(struct link *linkp);
-static void Indent(int indent);
-static BOOLEAN InList(struct link *linkp,const char *cp);
-static void dbug_flush(CODE_STATE *);
-static void DbugExit(const char *why);
-static int DelayArg(int value);
- /* Supplied in Sys V runtime environ */
- /* Break string into tokens */
-static char *static_strtok(char *s1,pchar chr);
-
-/*
- * Miscellaneous printf format strings.
- */
-
-#define ERR_MISSING_RETURN "%s: missing DBUG_RETURN or DBUG_VOID_RETURN macro in function \"%s\"\n"
-#define ERR_OPEN "%s: can't open debug output stream \"%s\": "
-#define ERR_CLOSE "%s: can't close debug file: "
-#define ERR_ABORT "%s: debugger aborting because %s\n"
-#define ERR_CHOWN "%s: can't change owner/group of \"%s\": "
-
-/*
- * Macros and defines for testing file accessibility under UNIX and MSDOS.
- */
-
-#if !defined(HAVE_ACCESS) || defined(MSDOS)
-#define EXISTS(pathname) (FALSE) /* Assume no existance */
-#define Writable(name) (TRUE)
-#else
-#define EXISTS(pathname) (access (pathname, F_OK) == 0)
-#define WRITABLE(pathname) (access (pathname, W_OK) == 0)
-#endif
-#ifndef MSDOS
-#define ChangeOwner(name)
-#endif
-
-/*
- * Translate some calls among different systems.
- */
-
-#if defined(unix) || defined(xenix) || defined(VMS) || defined(__NetBSD__)
-# define Delay(A) sleep((uint) A)
-#elif defined(AMIGA)
-IMPORT int Delay (); /* Pause for given number of ticks */
-#else
-static int Delay(int ticks);
-#endif
-
-
-/*
-** Macros to allow dbugging with threads
-*/
-
-#ifdef THREAD
-#include <my_pthread.h>
-pthread_mutex_t THR_LOCK_dbug;
-
-static void init_dbug_state(void)
-{
- pthread_mutex_init(&THR_LOCK_dbug,MY_MUTEX_INIT_FAST);
-}
-
-static CODE_STATE *code_state(void)
-{
- CODE_STATE *state=0;
- struct st_my_thread_var *tmp=my_thread_var;
- if (tmp)
- {
- if (!(state=(CODE_STATE *) tmp->dbug))
- {
- state=(CODE_STATE*) DbugMalloc(sizeof(*state));
- bzero((char*) state,sizeof(*state));
- state->func="?func";
- state->file="?file";
- tmp->dbug=(gptr) state;
- }
- }
- return state;
-}
-
-#else /* !THREAD */
-
-#define init_dbug_state()
-#define code_state() (&static_code_state)
-#define pthread_mutex_lock(A) {}
-#define pthread_mutex_unlock(A) {}
-static CODE_STATE static_code_state = { 0,0,"?func","?file",NULL,0,NULL,
- NULL,0,"?",0};
-#endif
-
-
-/*
- * FUNCTION
- *
- * _db_push_ push current debugger state and set up new one
- *
- * SYNOPSIS
- *
- * VOID _db_push_ (control)
- * char *control;
- *
- * DESCRIPTION
- *
- * Given pointer to a debug control string in "control", pushes
- * the current debug state, parses the control string, and sets
- * up a new debug state.
- *
- * The only attribute of the new state inherited from the previous
- * state is the current function nesting level. This can be
- * overridden by using the "r" flag in the control string.
- *
- * The debug control string is a sequence of colon separated fields
- * as follows:
- *
- * <field_1>:<field_2>:...:<field_N>
- *
- * Each field consists of a mandatory flag character followed by
- * an optional "," and comma separated list of modifiers:
- *
- * flag[,modifier,modifier,...,modifier]
- *
- * The currently recognized flag characters are:
- *
- * d Enable output from DBUG_<N> macros for
- * for the current state. May be followed
- * by a list of keywords which selects output
- * only for the DBUG macros with that keyword.
- * A null list of keywords implies output for
- * all macros.
- *
- * D Delay after each debugger output line.
- * The argument is the number of tenths of seconds
- * to delay, subject to machine capabilities.
- * I.E. -#D,20 is delay two seconds.
- *
- * f Limit debugging and/or tracing, and profiling to the
- * list of named functions. Note that a null list will
- * disable all functions. The appropriate "d" or "t"
- * flags must still be given, this flag only limits their
- * actions if they are enabled.
- *
- * F Identify the source file name for each
- * line of debug or trace output.
- *
- * i Identify the process with the pid for each line of
- * debug or trace output.
- *
- * g Enable profiling. Create a file called 'dbugmon.out'
- * containing information that can be used to profile
- * the program. May be followed by a list of keywords
- * that select profiling only for the functions in that
- * list. A null list implies that all functions are
- * considered.
- *
- * L Identify the source file line number for
- * each line of debug or trace output.
- *
- * n Print the current function nesting depth for
- * each line of debug or trace output.
- *
- * N Number each line of dbug output.
- *
- * o Redirect the debugger output stream to the
- * specified file. The default output is stderr.
- *
- * O As O but the file is really flushed between each
- * write. When neaded the file is closed and reopened
- * between each write.
- *
- * p Limit debugger actions to specified processes.
- * A process must be identified with the
- * DBUG_PROCESS macro and match one in the list
- * for debugger actions to occur.
- *
- * P Print the current process name for each
- * line of debug or trace output.
- *
- * r When pushing a new state, do not inherit
- * the previous state's function nesting level.
- * Useful when the output is to start at the
- * left margin.
- *
- * S Do function _sanity(_file_,_line_) at each
- * debugged function until _sanity() returns
- * something that differs from 0.
- * (Moustly used with safemalloc)
- *
- * t Enable function call/exit trace lines.
- * May be followed by a list (containing only
- * one modifier) giving a numeric maximum
- * trace level, beyond which no output will
- * occur for either debugging or tracing
- * macros. The default is a compile time
- * option.
- *
- * Some examples of debug control strings which might appear
- * on a shell command line (the "-#" is typically used to
- * introduce a control string to an application program) are:
- *
- * -#d:t
- * -#d:f,main,subr1:F:L:t,20
- * -#d,input,output,files:n
- *
- * For convenience, any leading "-#" is stripped off.
- *
- */
-
-void _db_push_ (control)
-const char *control;
-{
- reg1 char *scan;
- reg2 struct link *temp;
- CODE_STATE *state;
- char *new_str;
-
- if (! _db_fp_)
- _db_fp_= stderr; /* Output stream, default stderr */
-
- if (control && *control == '-')
- {
- if (*++control == '#')
- control++;
- }
- if (*control)
- _no_db_=0; /* We are using dbug after all */
-
- new_str = StrDup (control);
- PushState ();
- state=code_state();
-
- scan = static_strtok (new_str, ':');
- for (; scan != NULL; scan = static_strtok ((char *)NULL, ':')) {
- switch (*scan++) {
- case 'd':
- _db_on_ = TRUE;
- stack -> flags |= DEBUG_ON;
- if (*scan++ == ',') {
- stack -> keywords = ListParse (scan);
- }
- break;
- case 'D':
- stack -> delay = 0;
- if (*scan++ == ',') {
- temp = ListParse (scan);
- stack -> delay = DelayArg (atoi (temp -> str));
- FreeList (temp);
- }
- break;
- case 'f':
- if (*scan++ == ',') {
- stack -> functions = ListParse (scan);
- }
- break;
- case 'F':
- stack -> flags |= FILE_ON;
- break;
- case 'i':
- stack -> flags |= PID_ON;
- break;
-#ifndef THREAD
- case 'g':
- _db_pon_ = TRUE;
- if (OpenProfile(PROF_FILE))
- {
- stack -> flags |= PROFILE_ON;
- if (*scan++ == ',')
- stack -> p_functions = ListParse (scan);
- }
- break;
-#endif
- case 'L':
- stack -> flags |= LINE_ON;
- break;
- case 'n':
- stack -> flags |= DEPTH_ON;
- break;
- case 'N':
- stack -> flags |= NUMBER_ON;
- break;
- case 'A':
- case 'O':
- stack -> flags |= FLUSH_ON_WRITE;
- case 'a':
- case 'o':
- if (*scan++ == ',') {
- temp = ListParse (scan);
- DBUGOpenFile(temp -> str, (int) (scan[-2] == 'A' || scan[-2] == 'a'));
- FreeList (temp);
- } else {
- DBUGOpenFile ("-",0);
- }
- break;
- case 'p':
- if (*scan++ == ',') {
- stack -> processes = ListParse (scan);
- }
- break;
- case 'P':
- stack -> flags |= PROCESS_ON;
- break;
- case 'r':
- stack->sub_level= state->level;
- break;
- case 't':
- stack -> flags |= TRACE_ON;
- if (*scan++ == ',') {
- temp = ListParse (scan);
- stack -> maxdepth = atoi (temp -> str);
- FreeList (temp);
- }
- break;
- case 'S':
- stack -> flags |= SANITY_CHECK_ON;
- break;
- }
- }
- free (new_str);
-}
-
-
-/*
- * FUNCTION
- *
- * _db_pop_ pop the debug stack
- *
- * DESCRIPTION
- *
- * Pops the debug stack, returning the debug state to its
- * condition prior to the most recent _db_push_ invocation.
- * Note that the pop will fail if it would remove the last
- * valid state from the stack. This prevents user errors
- * in the push/pop sequence from screwing up the debugger.
- * Maybe there should be some kind of warning printed if the
- * user tries to pop too many states.
- *
- */
-
-void _db_pop_ ()
-{
- reg1 struct state *discard;
- discard = stack;
- if (discard != NULL && discard -> next_state != NULL) {
- stack = discard -> next_state;
- _db_fp_ = stack -> out_file;
- _db_pfp_ = stack -> prof_file;
- if (discard -> keywords != NULL) {
- FreeList (discard -> keywords);
- }
- if (discard -> functions != NULL) {
- FreeList (discard -> functions);
- }
- if (discard -> processes != NULL) {
- FreeList (discard -> processes);
- }
- if (discard -> p_functions != NULL) {
- FreeList (discard -> p_functions);
- }
- CloseFile (discard -> out_file);
- if (discard -> prof_file)
- CloseFile (discard -> prof_file);
- free ((char *) discard);
- if (!(stack->flags & DEBUG_ON))
- _db_on_=0;
- }
- else
- {
- _db_on_=0;
- }
-}
-
-
-/*
- * FUNCTION
- *
- * _db_enter_ process entry point to user function
- *
- * SYNOPSIS
- *
- * VOID _db_enter_ (_func_, _file_, _line_,
- * _sfunc_, _sfile_, _slevel_, _sframep_)
- * char *_func_; points to current function name
- * char *_file_; points to current file name
- * int _line_; called from source line number
- * char **_sfunc_; save previous _func_
- * char **_sfile_; save previous _file_
- * int *_slevel_; save previous nesting level
- * char ***_sframep_; save previous frame pointer
- *
- * DESCRIPTION
- *
- * Called at the beginning of each user function to tell
- * the debugger that a new function has been entered.
- * Note that the pointers to the previous user function
- * name and previous user file name are stored on the
- * caller's stack (this is why the ENTER macro must be
- * the first "executable" code in a function, since it
- * allocates these storage locations). The previous nesting
- * level is also stored on the callers stack for internal
- * self consistency checks.
- *
- * Also prints a trace line if tracing is enabled and
- * increments the current function nesting depth.
- *
- * Note that this mechanism allows the debugger to know
- * what the current user function is at all times, without
- * maintaining an internal stack for the function names.
- *
- */
-
-void _db_enter_ (_func_, _file_, _line_, _sfunc_, _sfile_, _slevel_,
- _sframep_)
-const char *_func_;
-const char *_file_;
-uint _line_;
-const char **_sfunc_;
-const char **_sfile_;
-uint *_slevel_;
-char ***_sframep_ __attribute__((unused));
-{
- reg1 CODE_STATE *state;
-
- if (!_no_db_)
- {
- int save_errno=errno;
- if (!init_done)
- _db_push_ (_DBUG_START_CONDITION_);
- state=code_state();
-
- *_sfunc_ = state->func;
- *_sfile_ = state->file;
- state->func =(char*) _func_;
- state->file = (char*) _file_; /* BaseName takes time !! */
- *_slevel_ = ++state->level;
-#ifndef THREAD
- *_sframep_ = state->framep;
- state->framep = (char **) _sframep_;
- if (DoProfile ())
- {
- long stackused;
- if (*state->framep == NULL) {
- stackused = 0;
- } else {
- stackused = ((long)(*state->framep)) - ((long)(state->framep));
- stackused = stackused > 0 ? stackused : -stackused;
- }
- (void) fprintf (_db_pfp_, PROF_EFMT , Clock (), state->func);
-#ifdef AUTOS_REVERSE
- (void) fprintf (_db_pfp_, PROF_SFMT, state->framep, stackused, *_sfunc_);
-#else
- (void) fprintf (_db_pfp_, PROF_SFMT, (ulong) state->framep, stackused,
- state->func);
-#endif
- (void) fflush (_db_pfp_);
- }
-#endif
- if (DoTrace (state))
- {
- if (!state->locked)
- pthread_mutex_lock(&THR_LOCK_dbug);
- DoPrefix (_line_);
- Indent (state -> level);
- (void) fprintf (_db_fp_, ">%s\n", state->func);
- dbug_flush (state); /* This does a unlock */
- }
-#ifdef SAFEMALLOC
- if (stack -> flags & SANITY_CHECK_ON)
- if (_sanity(_file_,_line_)) /* Check of safemalloc */
- stack -> flags &= ~SANITY_CHECK_ON;
-#endif
- errno=save_errno;
- }
-}
-
-/*
- * FUNCTION
- *
- * _db_return_ process exit from user function
- *
- * SYNOPSIS
- *
- * VOID _db_return_ (_line_, _sfunc_, _sfile_, _slevel_)
- * int _line_; current source line number
- * char **_sfunc_; where previous _func_ is to be retrieved
- * char **_sfile_; where previous _file_ is to be retrieved
- * int *_slevel_; where previous level was stashed
- *
- * DESCRIPTION
- *
- * Called just before user function executes an explicit or implicit
- * return. Prints a trace line if trace is enabled, decrements
- * the current nesting level, and restores the current function and
- * file names from the defunct function's stack.
- *
- */
-
-void _db_return_ (_line_, _sfunc_, _sfile_, _slevel_)
-uint _line_;
-const char **_sfunc_;
-const char **_sfile_;
-uint *_slevel_;
-{
- CODE_STATE *state;
-
- if (!_no_db_)
- {
- int save_errno=errno;
- if (!init_done)
- _db_push_ ("");
- if (!(state=code_state()))
- return; /* Only happens at end of program */
- if (stack->flags & (TRACE_ON | DEBUG_ON | PROFILE_ON))
- {
- if (!state->locked)
- pthread_mutex_lock(&THR_LOCK_dbug);
- if (state->level != (int) *_slevel_)
- (void) fprintf (_db_fp_, ERR_MISSING_RETURN, _db_process_,
- state->func);
- else
- {
-#ifdef SAFEMALLOC
- if (stack -> flags & SANITY_CHECK_ON)
- if (_sanity(*_sfile_,_line_))
- stack->flags &= ~SANITY_CHECK_ON;
-#endif
-#ifndef THREAD
- if (DoProfile ())
- (void) fprintf (_db_pfp_, PROF_XFMT, Clock(), state->func);
-#endif
- if (DoTrace (state))
- {
- DoPrefix (_line_);
- Indent (state->level);
- (void) fprintf (_db_fp_, "<%s\n", state->func);
- }
- }
- dbug_flush(state);
- }
- state->level = *_slevel_-1;
- state->func = *_sfunc_;
- state->file = *_sfile_;
-#ifndef THREAD
- if (state->framep != NULL)
- state->framep = (char **) *state->framep;
-#endif
- errno=save_errno;
- }
-}
-
-
-/*
- * FUNCTION
- *
- * _db_pargs_ log arguments for subsequent use by _db_doprnt_()
- *
- * SYNOPSIS
- *
- * VOID _db_pargs_ (_line_, keyword)
- * int _line_;
- * char *keyword;
- *
- * DESCRIPTION
- *
- * The new universal printing macro DBUG_PRINT, which replaces
- * all forms of the DBUG_N macros, needs two calls to runtime
- * support routines. The first, this function, remembers arguments
- * that are used by the subsequent call to _db_doprnt_().
- *
- */
-
-void _db_pargs_ (_line_, keyword)
-uint _line_;
-const char *keyword;
-{
- CODE_STATE *state=code_state();
- state->u_line = _line_;
- state->u_keyword = (char*) keyword;
-}
-
-
-/*
- * FUNCTION
- *
- * _db_doprnt_ handle print of debug lines
- *
- * SYNOPSIS
- *
- * VOID _db_doprnt_ (format, va_alist)
- * char *format;
- * va_dcl;
- *
- * DESCRIPTION
- *
- * When invoked via one of the DBUG macros, tests the current keyword
- * set by calling _db_pargs_() to see if that macro has been selected
- * for processing via the debugger control string, and if so, handles
- * printing of the arguments via the format string. The line number
- * of the DBUG macro in the source is found in u_line.
- *
- * Note that the format string SHOULD NOT include a terminating
- * newline, this is supplied automatically.
- *
- */
-
-#include <stdarg.h>
-
-void _db_doprnt_ (const char *format,...)
-{
- va_list args;
- CODE_STATE *state;
- state=code_state();
-
- va_start(args,format);
-
- if (_db_keyword_ (state->u_keyword)) {
- int save_errno=errno;
- if (!state->locked)
- pthread_mutex_lock(&THR_LOCK_dbug);
- DoPrefix (state->u_line);
- if (TRACING) {
- Indent (state->level + 1);
- } else {
- (void) fprintf (_db_fp_, "%s: ", state->func);
- }
- (void) fprintf (_db_fp_, "%s: ", state->u_keyword);
- (void) vfprintf (_db_fp_, format, args);
- va_end(args);
- (void) fputc('\n',_db_fp_);
- dbug_flush(state);
- errno=save_errno;
- }
- va_end(args);
-}
-
-
-/*
- * FUNCTION
- *
- * _db_dump_ dump a string until '\0' is found
- *
- * SYNOPSIS
- *
- * void _db_dump_ (_line_,keyword,memory,length)
- * int _line_; current source line number
- * char *keyword;
- * char *memory; Memory to print
- * int length; Bytes to print
- *
- * DESCRIPTION
- * Dump N characters in a binary array.
- * Is used to examine corrputed memory or arrays.
- */
-
-void _db_dump_(_line_,keyword,memory,length)
-uint _line_,length;
-const char *keyword;
-const char *memory;
-{
- int pos;
- char dbuff[90];
- CODE_STATE *state;
- state=code_state();
-
- if (_db_keyword_ ((char*) keyword))
- {
- if (!state->locked)
- pthread_mutex_lock(&THR_LOCK_dbug);
- DoPrefix (_line_);
- if (TRACING)
- {
- Indent (state->level + 1);
- pos= min(max(state->level-stack->sub_level,0)*INDENT,80);
- }
- else
- {
- fprintf(_db_fp_, "%s: ", state->func);
- }
- sprintf(dbuff,"%s: Memory: %lx Bytes: (%d)\n",
- keyword,(ulong) memory, length);
- (void) fputs(dbuff,_db_fp_);
-
- pos=0;
- while (length-- > 0)
- {
- uint tmp= *((unsigned char*) memory++);
- if ((pos+=3) >= 80)
- {
- fputc('\n',_db_fp_);
- pos=3;
- }
- fputc(_dig_vec[((tmp >> 4) & 15)], _db_fp_);
- fputc(_dig_vec[tmp & 15], _db_fp_);
- fputc(' ',_db_fp_);
- }
- (void) fputc('\n',_db_fp_);
- dbug_flush(state);
- }
-}
-
-/*
- * FUNCTION
- *
- * ListParse parse list of modifiers in debug control string
- *
- * SYNOPSIS
- *
- * static struct link *ListParse (ctlp)
- * char *ctlp;
- *
- * DESCRIPTION
- *
- * Given pointer to a comma separated list of strings in "cltp",
- * parses the list, building a list and returning a pointer to it.
- * The original comma separated list is destroyed in the process of
- * building the linked list, thus it had better be a duplicate
- * if it is important.
- *
- * Note that since each link is added at the head of the list,
- * the final list will be in "reverse order", which is not
- * significant for our usage here.
- *
- */
-
-static struct link *ListParse (ctlp)
-char *ctlp;
-{
- REGISTER char *start;
- REGISTER struct link *new;
- REGISTER struct link *head;
-
- head = NULL;
- while (*ctlp != EOS) {
- start = ctlp;
- while (*ctlp != EOS && *ctlp != ',') {
- ctlp++;
- }
- if (*ctlp == ',') {
- *ctlp++ = EOS;
- }
- new = (struct link *) DbugMalloc (sizeof (struct link));
- new -> str = StrDup (start);
- new -> next_link = head;
- head = new;
- }
- return (head);
-}
-
-/*
- * FUNCTION
- *
- * InList test a given string for member of a given list
- *
- * SYNOPSIS
- *
- * static BOOLEAN InList (linkp, cp)
- * struct link *linkp;
- * char *cp;
- *
- * DESCRIPTION
- *
- * Tests the string pointed to by "cp" to determine if it is in
- * the list pointed to by "linkp". Linkp points to the first
- * link in the list. If linkp is NULL then the string is treated
- * as if it is in the list (I.E all strings are in the null list).
- * This may seem rather strange at first but leads to the desired
- * operation if no list is given. The net effect is that all
- * strings will be accepted when there is no list, and when there
- * is a list, only those strings in the list will be accepted.
- *
- */
-
-static BOOLEAN InList (linkp, cp)
-struct link *linkp;
-const char *cp;
-{
- REGISTER struct link *scan;
- REGISTER BOOLEAN result;
-
- if (linkp == NULL) {
- result = TRUE;
- } else {
- result = FALSE;
- for (scan = linkp; scan != NULL; scan = scan -> next_link) {
- if (STREQ (scan -> str, cp)) {
- result = TRUE;
- break;
- }
- }
- }
- return (result);
-}
-
-
-/*
- * FUNCTION
- *
- * PushState push current state onto stack and set up new one
- *
- * SYNOPSIS
- *
- * static VOID PushState ()
- *
- * DESCRIPTION
- *
- * Pushes the current state on the state stack, and initializes
- * a new state. The only parameter inherited from the previous
- * state is the function nesting level. This action can be
- * inhibited if desired, via the "r" flag.
- *
- * The state stack is a linked list of states, with the new
- * state added at the head. This allows the stack to grow
- * to the limits of memory if necessary.
- *
- */
-
-static void PushState ()
-{
- REGISTER struct state *new;
-
- if (!init_done)
- {
- init_dbug_state();
- init_done=TRUE;
- }
- (void) code_state(); /* Alloc memory */
- new = (struct state *) DbugMalloc (sizeof (struct state));
- new -> flags = 0;
- new -> delay = 0;
- new -> maxdepth = MAXDEPTH;
- new -> sub_level=0;
- new -> out_file = stderr;
- new -> prof_file = (FILE*) 0;
- new -> functions = NULL;
- new -> p_functions = NULL;
- new -> keywords = NULL;
- new -> processes = NULL;
- new -> next_state = stack;
- stack=new;
-}
-
-
-/*
- * FUNCTION
- *
- * DoTrace check to see if tracing is current enabled
- *
- * SYNOPSIS
- *
- * static BOOLEAN DoTrace (stack)
- *
- * DESCRIPTION
- *
- * Checks to see if tracing is enabled based on whether the
- * user has specified tracing, the maximum trace depth has
- * not yet been reached, the current function is selected,
- * and the current process is selected. Returns TRUE if
- * tracing is enabled, FALSE otherwise.
- *
- */
-
-static BOOLEAN DoTrace (CODE_STATE *state)
-{
- reg2 BOOLEAN trace=FALSE;
-
- if (TRACING &&
- state->level <= stack -> maxdepth &&
- InList (stack -> functions, state->func) &&
- InList (stack -> processes, _db_process_))
- trace = TRUE;
- return (trace);
-}
-
-
-/*
- * FUNCTION
- *
- * DoProfile check to see if profiling is current enabled
- *
- * SYNOPSIS
- *
- * static BOOLEAN DoProfile ()
- *
- * DESCRIPTION
- *
- * Checks to see if profiling is enabled based on whether the
- * user has specified profiling, the maximum trace depth has
- * not yet been reached, the current function is selected,
- * and the current process is selected. Returns TRUE if
- * profiling is enabled, FALSE otherwise.
- *
- */
-
-#ifndef THREAD
-static BOOLEAN DoProfile ()
-{
- REGISTER BOOLEAN profile;
- CODE_STATE *state;
- state=code_state();
-
- profile = FALSE;
- if (PROFILING &&
- state->level <= stack -> maxdepth &&
- InList (stack -> p_functions, state->func) &&
- InList (stack -> processes, _db_process_))
- profile = TRUE;
- return (profile);
-}
-#endif
-
-
-/*
- * FUNCTION
- *
- * _db_keyword_ test keyword for member of keyword list
- *
- * SYNOPSIS
- *
- * BOOLEAN _db_keyword_ (keyword)
- * char *keyword;
- *
- * DESCRIPTION
- *
- * Test a keyword to determine if it is in the currently active
- * keyword list. As with the function list, a keyword is accepted
- * if the list is null, otherwise it must match one of the list
- * members. When debugging is not on, no keywords are accepted.
- * After the maximum trace level is exceeded, no keywords are
- * accepted (this behavior subject to change). Additionally,
- * the current function and process must be accepted based on
- * their respective lists.
- *
- * Returns TRUE if keyword accepted, FALSE otherwise.
- *
- */
-
-BOOLEAN _db_keyword_ (keyword)
-const char *keyword;
-{
- REGISTER BOOLEAN result;
- CODE_STATE *state;
-
- if (!init_done)
- _db_push_ ("");
- state=code_state();
- result = FALSE;
- if (DEBUGGING &&
- state->level <= stack -> maxdepth &&
- InList (stack -> functions, state->func) &&
- InList (stack -> keywords, keyword) &&
- InList (stack -> processes, _db_process_))
- result = TRUE;
- return (result);
-}
-
-/*
- * FUNCTION
- *
- * Indent indent a line to the given indentation level
- *
- * SYNOPSIS
- *
- * static VOID Indent (indent)
- * int indent;
- *
- * DESCRIPTION
- *
- * Indent a line to the given level. Note that this is
- * a simple minded but portable implementation.
- * There are better ways.
- *
- * Also, the indent must be scaled by the compile time option
- * of character positions per nesting level.
- *
- */
-
-static void Indent (indent)
-int indent;
-{
- REGISTER int count;
-
- indent= max(indent-1-stack->sub_level,0)*INDENT;
- for (count = 0; count < indent ; count++)
- {
- if ((count % INDENT) == 0)
- fputc('|',_db_fp_);
- else
- fputc(' ',_db_fp_);
- }
-}
-
-
-/*
- * FUNCTION
- *
- * FreeList free all memory associated with a linked list
- *
- * SYNOPSIS
- *
- * static VOID FreeList (linkp)
- * struct link *linkp;
- *
- * DESCRIPTION
- *
- * Given pointer to the head of a linked list, frees all
- * memory held by the list and the members of the list.
- *
- */
-
-static void FreeList (linkp)
-struct link *linkp;
-{
- REGISTER struct link *old;
-
- while (linkp != NULL) {
- old = linkp;
- linkp = linkp -> next_link;
- if (old -> str != NULL) {
- free (old -> str);
- }
- free ((char *) old);
- }
-}
-
-
-/*
- * FUNCTION
- *
- * StrDup make a duplicate of a string in new memory
- *
- * SYNOPSIS
- *
- * static char *StrDup (my_string)
- * char *string;
- *
- * DESCRIPTION
- *
- * Given pointer to a string, allocates sufficient memory to make
- * a duplicate copy, and copies the string to the newly allocated
- * memory. Failure to allocated sufficient memory is immediately
- * fatal.
- *
- */
-
-
-static char *StrDup (str)
-const char *str;
-{
- reg1 char *new;
- new = DbugMalloc ((int) strlen (str) + 1);
- (void) strcpy (new, str);
- return (new);
-}
-
-
-/*
- * FUNCTION
- *
- * DoPrefix print debugger line prefix prior to indentation
- *
- * SYNOPSIS
- *
- * static VOID DoPrefix (_line_)
- * int _line_;
- *
- * DESCRIPTION
- *
- * Print prefix common to all debugger output lines, prior to
- * doing indentation if necessary. Print such information as
- * current process name, current source file name and line number,
- * and current function nesting depth.
- *
- */
-
-static void DoPrefix (_line_)
-uint _line_;
-{
- CODE_STATE *state;
- state=code_state();
-
- state->lineno++;
- if (stack -> flags & PID_ON) {
-#ifdef THREAD
- (void) fprintf (_db_fp_, "%-7s: ", my_thread_name());
-#else
- (void) fprintf (_db_fp_, "%5d: ", getpid ());
-#endif
- }
- if (stack -> flags & NUMBER_ON) {
- (void) fprintf (_db_fp_, "%5d: ", state->lineno);
- }
- if (stack -> flags & PROCESS_ON) {
- (void) fprintf (_db_fp_, "%s: ", _db_process_);
- }
- if (stack -> flags & FILE_ON) {
- (void) fprintf (_db_fp_, "%14s: ", BaseName(state->file));
- }
- if (stack -> flags & LINE_ON) {
- (void) fprintf (_db_fp_, "%5d: ", _line_);
- }
- if (stack -> flags & DEPTH_ON) {
- (void) fprintf (_db_fp_, "%4d: ", state->level);
- }
-}
-
-
-/*
- * FUNCTION
- *
- * DBUGOpenFile open new output stream for debugger output
- *
- * SYNOPSIS
- *
- * static VOID DBUGOpenFile (name)
- * char *name;
- *
- * DESCRIPTION
- *
- * Given name of a new file (or "-" for stdout) opens the file
- * and sets the output stream to the new file.
- *
- */
-
-static void DBUGOpenFile (const char *name,int append)
-{
- REGISTER FILE *fp;
- REGISTER BOOLEAN newfile;
-
- if (name != NULL)
- {
- strmov(stack->name,name);
- if (strcmp (name, "-") == 0)
- {
- _db_fp_ = stdout;
- stack -> out_file = _db_fp_;
- stack -> flags |= FLUSH_ON_WRITE;
- }
- else
- {
- if (!Writable(name))
- {
- (void) fprintf (stderr, ERR_OPEN, _db_process_, name);
- perror ("");
- fflush(stderr);
- }
- else
- {
- newfile= !EXISTS (name);
- if (!(fp = fopen(name, append ? "a+" : "w")))
- {
- (void) fprintf (stderr, ERR_OPEN, _db_process_, name);
- perror ("");
- fflush(stderr);
- }
- else
- {
- _db_fp_ = fp;
- stack -> out_file = fp;
- if (newfile) {
- ChangeOwner (name);
- }
- }
- }
- }
- }
-}
-
-
-/*
- * FUNCTION
- *
- * OpenProfile open new output stream for profiler output
- *
- * SYNOPSIS
- *
- * static FILE *OpenProfile (name)
- * char *name;
- *
- * DESCRIPTION
- *
- * Given name of a new file, opens the file
- * and sets the profiler output stream to the new file.
- *
- * It is currently unclear whether the prefered behavior is
- * to truncate any existing file, or simply append to it.
- * The latter behavior would be desirable for collecting
- * accumulated runtime history over a number of separate
- * runs. It might take some changes to the analyzer program
- * though, and the notes that Binayak sent with the profiling
- * diffs indicated that append was the normal mode, but this
- * does not appear to agree with the actual code. I haven't
- * investigated at this time [fnf; 24-Jul-87].
- */
-
-#ifndef THREAD
-static FILE *OpenProfile (const char *name)
-{
- REGISTER FILE *fp;
- REGISTER BOOLEAN newfile;
-
- fp=0;
- if (!Writable (name))
- {
- (void) fprintf (_db_fp_, ERR_OPEN, _db_process_, name);
- perror ("");
- dbug_flush(0);
- (void) Delay (stack -> delay);
- }
- else
- {
- newfile= !EXISTS (name);
- if (!(fp = fopen (name, "w")))
- {
- (void) fprintf (_db_fp_, ERR_OPEN, _db_process_, name);
- perror ("");
- dbug_flush(0);
- }
- else
- {
- _db_pfp_ = fp;
- stack -> prof_file = fp;
- if (newfile)
- {
- ChangeOwner (name);
- }
- }
- }
- return fp;
-}
-#endif
-
-/*
- * FUNCTION
- *
- * CloseFile close the debug output stream
- *
- * SYNOPSIS
- *
- * static VOID CloseFile (fp)
- * FILE *fp;
- *
- * DESCRIPTION
- *
- * Closes the debug output stream unless it is standard output
- * or standard error.
- *
- */
-
-static void CloseFile (fp)
-FILE *fp;
-{
- if (fp != stderr && fp != stdout) {
- if (fclose (fp) == EOF) {
- pthread_mutex_lock(&THR_LOCK_dbug);
- (void) fprintf (_db_fp_, ERR_CLOSE, _db_process_);
- perror ("");
- dbug_flush(0);
- }
- }
-}
-
-
-/*
- * FUNCTION
- *
- * DbugExit print error message and exit
- *
- * SYNOPSIS
- *
- * static VOID DbugExit (why)
- * char *why;
- *
- * DESCRIPTION
- *
- * Prints error message using current process name, the reason for
- * aborting (typically out of memory), and exits with status 1.
- * This should probably be changed to use a status code
- * defined in the user's debugger include file.
- *
- */
-
-static void DbugExit (const char *why)
-{
- (void) fprintf (stderr, ERR_ABORT, _db_process_, why);
- (void) fflush (stderr);
- exit (1);
-}
-
-
-/*
- * FUNCTION
- *
- * DbugMalloc allocate memory for debugger runtime support
- *
- * SYNOPSIS
- *
- * static long *DbugMalloc (size)
- * int size;
- *
- * DESCRIPTION
- *
- * Allocate more memory for debugger runtime support functions.
- * Failure to to allocate the requested number of bytes is
- * immediately fatal to the current process. This may be
- * rather unfriendly behavior. It might be better to simply
- * print a warning message, freeze the current debugger state,
- * and continue execution.
- *
- */
-
-static char *DbugMalloc (size)
-int size;
-{
- register char *new;
-
- if (!(new = malloc ((unsigned int) size)))
- DbugExit ("out of memory");
- return (new);
-}
-
-
-/*
- * As strtok but two separators in a row are changed to one
- * separator (to allow directory-paths in dos).
- */
-
-static char *static_strtok (s1, separator)
-char *s1;
-pchar separator;
-{
- static char *end = NULL;
- reg1 char *rtnval,*cpy;
-
- rtnval = NULL;
- if (s1 != NULL)
- end = s1;
- if (end != NULL && *end != EOS)
- {
- rtnval=cpy=end;
- do
- {
- if ((*cpy++ = *end++) == separator)
- {
- if (*end != separator)
- {
- cpy--; /* Point at separator */
- break;
- }
- end++; /* Two separators in a row, skipp one */
- }
- } while (*end != EOS);
- *cpy=EOS; /* Replace last separator */
- }
- return (rtnval);
-}
-
-
-/*
- * FUNCTION
- *
- * BaseName strip leading pathname components from name
- *
- * SYNOPSIS
- *
- * static char *BaseName (pathname)
- * char *pathname;
- *
- * DESCRIPTION
- *
- * Given pointer to a complete pathname, locates the base file
- * name at the end of the pathname and returns a pointer to
- * it.
- *
- */
-
-static char *BaseName (const char *pathname)
-{
- register const char *base;
-
- base = strrchr (pathname, FN_LIBCHAR);
- if (base++ == NullS)
- base = pathname;
- return ((char*) base);
-}
-
-
-/*
- * FUNCTION
- *
- * Writable test to see if a pathname is writable/creatable
- *
- * SYNOPSIS
- *
- * static BOOLEAN Writable (pathname)
- * char *pathname;
- *
- * DESCRIPTION
- *
- * Because the debugger might be linked in with a program that
- * runs with the set-uid-bit (suid) set, we have to be careful
- * about opening a user named file for debug output. This consists
- * of checking the file for write access with the real user id,
- * or checking the directory where the file will be created.
- *
- * Returns TRUE if the user would normally be allowed write or
- * create access to the named file. Returns FALSE otherwise.
- *
- */
-
-
-#ifndef Writable
-
-static BOOLEAN Writable (pathname)
-char *pathname;
-{
- REGISTER BOOLEAN granted;
- REGISTER char *lastslash;
-
- granted = FALSE;
- if (EXISTS (pathname)) {
- if (WRITABLE (pathname)) {
- granted = TRUE;
- }
- } else {
- lastslash = strrchr (pathname, '/');
- if (lastslash != NULL) {
- *lastslash = EOS;
- } else {
- pathname = ".";
- }
- if (WRITABLE (pathname)) {
- granted = TRUE;
- }
- if (lastslash != NULL) {
- *lastslash = '/';
- }
- }
- return (granted);
-}
-#endif
-
-
-/*
- * FUNCTION
- *
- * ChangeOwner change owner to real user for suid programs
- *
- * SYNOPSIS
- *
- * static VOID ChangeOwner (pathname)
- *
- * DESCRIPTION
- *
- * For unix systems, change the owner of the newly created debug
- * file to the real owner. This is strictly for the benefit of
- * programs that are running with the set-user-id bit set.
- *
- * Note that at this point, the fact that pathname represents
- * a newly created file has already been established. If the
- * program that the debugger is linked to is not running with
- * the suid bit set, then this operation is redundant (but
- * harmless).
- *
- */
-
-#ifndef ChangeOwner
-static void ChangeOwner (pathname)
-char *pathname;
-{
- if (chown (pathname, getuid (), getgid ()) == -1)
- {
- (void) fprintf (stderr, ERR_CHOWN, _db_process_, pathname);
- perror ("");
- (void) fflush (stderr);
- }
-}
-#endif
-
-
-/*
- * FUNCTION
- *
- * _db_setjmp_ save debugger environment
- *
- * SYNOPSIS
- *
- * VOID _db_setjmp_ ()
- *
- * DESCRIPTION
- *
- * Invoked as part of the user's DBUG_SETJMP macro to save
- * the debugger environment in parallel with saving the user's
- * environment.
- *
- */
-
-#ifdef HAVE_LONGJMP
-
-EXPORT void _db_setjmp_ ()
-{
- CODE_STATE *state;
- state=code_state();
-
- state->jmplevel = state->level;
- state->jmpfunc = state->func;
- state->jmpfile = state->file;
-}
-
-/*
- * FUNCTION
- *
- * _db_longjmp_ restore previously saved debugger environment
- *
- * SYNOPSIS
- *
- * VOID _db_longjmp_ ()
- *
- * DESCRIPTION
- *
- * Invoked as part of the user's DBUG_LONGJMP macro to restore
- * the debugger environment in parallel with restoring the user's
- * previously saved environment.
- *
- */
-
-EXPORT void _db_longjmp_ ()
-{
- CODE_STATE *state;
- state=code_state();
-
- state->level = state->jmplevel;
- if (state->jmpfunc) {
- state->func = state->jmpfunc;
- }
- if (state->jmpfile) {
- state->file = state->jmpfile;
- }
-}
-#endif
-
-/*
- * FUNCTION
- *
- * DelayArg convert D flag argument to appropriate value
- *
- * SYNOPSIS
- *
- * static int DelayArg (value)
- * int value;
- *
- * DESCRIPTION
- *
- * Converts delay argument, given in tenths of a second, to the
- * appropriate numerical argument used by the system to delay
- * that that many tenths of a second. For example, on the
- * amiga, there is a system call "Delay()" which takes an
- * argument in ticks (50 per second). On unix, the sleep
- * command takes seconds. Thus a value of "10", for one
- * second of delay, gets converted to 50 on the amiga, and 1
- * on unix. Other systems will need to use a timing loop.
- *
- */
-
-#ifdef AMIGA
-#define HZ (50) /* Probably in some header somewhere */
-#endif
-
-static int DelayArg (value)
-int value;
-{
- uint delayarg = 0;
-
-#if (unix || xenix)
- delayarg = value / 10; /* Delay is in seconds for sleep () */
-#endif
-#ifdef AMIGA
- delayarg = (HZ * value) / 10; /* Delay in ticks for Delay () */
-#endif
- return (delayarg);
-}
-
-
-/*
- * A dummy delay stub for systems that do not support delays.
- * With a little work, this can be turned into a timing loop.
- */
-
-#if ! defined(Delay) && ! defined(AMIGA)
-static int Delay (ticks)
-int ticks;
-{
- return ticks;
-}
-#endif
-
-
-/*
- * FUNCTION
- *
- * perror perror simulation for systems that don't have it
- *
- * SYNOPSIS
- *
- * static VOID perror (s)
- * char *s;
- *
- * DESCRIPTION
- *
- * Perror produces a message on the standard error stream which
- * provides more information about the library or system error
- * just encountered. The argument string s is printed, followed
- * by a ':', a blank, and then a message and a newline.
- *
- * An undocumented feature of the unix perror is that if the string
- * 's' is a null string (NOT a NULL pointer!), then the ':' and
- * blank are not printed.
- *
- * This version just complains about an "unknown system error".
- *
- */
-
-#ifndef HAVE_PERROR
-static void perror (s)
-char *s;
-{
- if (s && *s != EOS) {
- (void) fprintf (stderr, "%s: ", s);
- }
- (void) fprintf (stderr, "<unknown system error>\n");
-}
-#endif /* HAVE_PERROR */
-
-
- /* flush dbug-stream, free mutex lock & wait delay */
- /* This is because some systems (MSDOS!!) dosn't flush fileheader */
- /* and dbug-file isn't readable after a system crash !! */
-
-static void dbug_flush(CODE_STATE *state)
-{
-#ifndef THREAD
- if (stack->flags & FLUSH_ON_WRITE)
-#endif
- {
-#if defined(MSDOS) || defined(__WIN__)
- if (_db_fp_ != stdout && _db_fp_ != stderr)
- {
- if (!(freopen(stack->name,"a",_db_fp_)))
- {
- (void) fprintf(stderr, ERR_OPEN, _db_process_);
- fflush(stderr);
- _db_fp_ = stdout;
- stack -> out_file = _db_fp_;
- stack -> flags|=FLUSH_ON_WRITE;
- }
- }
- else
-#endif
- {
- (void) fflush (_db_fp_);
- if (stack->delay)
- (void) Delay (stack->delay);
- }
- }
- if (!state || !state->locked)
- pthread_mutex_unlock(&THR_LOCK_dbug);
-} /* dbug_flush */
-
-
-void _db_lock_file()
-{
- CODE_STATE *state;
- state=code_state();
- pthread_mutex_lock(&THR_LOCK_dbug);
- state->locked=1;
-}
-
-void _db_unlock_file()
-{
- CODE_STATE *state;
- state=code_state();
- state->locked=0;
- pthread_mutex_unlock(&THR_LOCK_dbug);
-}
-
-/*
- * Here we need the definitions of the clock routine. Add your
- * own for whatever system that you have.
- */
-
-#ifdef HAVE_GETRUSAGE
-
-#include <sys/param.h>
-#include <sys/resource.h>
-
-/* extern int getrusage(int, struct rusage *); */
-
-/*
- * Returns the user time in milliseconds used by this process so
- * far.
- */
-
-static unsigned long Clock ()
-{
- struct rusage ru;
-
- (void) getrusage (RUSAGE_SELF, &ru);
- return ((ru.ru_utime.tv_sec * 1000) + (ru.ru_utime.tv_usec / 1000));
-}
-
-#else
-#if defined(MSDOS) || defined(__WIN__)
-
-static ulong Clock()
-{
- return clock()*(1000/CLOCKS_PER_SEC);
-}
-#else
-#ifdef amiga
-
-struct DateStamp { /* Yes, this is a hack, but doing it right */
- long ds_Days; /* is incredibly ugly without splitting this */
- long ds_Minute; /* off into a separate file */
- long ds_Tick;
-};
-
-static int first_clock = TRUE;
-static struct DateStamp begin;
-static struct DateStamp elapsed;
-
-static unsigned long Clock ()
-{
- register struct DateStamp *now;
- register unsigned long millisec = 0;
- extern VOID *AllocMem ();
-
- now = (struct DateStamp *) AllocMem ((long) sizeof (struct DateStamp), 0L);
- if (now != NULL) {
- if (first_clock == TRUE) {
- first_clock = FALSE;
- (void) DateStamp (now);
- begin = *now;
- }
- (void) DateStamp (now);
- millisec = 24 * 3600 * (1000 / HZ) * (now -> ds_Days - begin.ds_Days);
- millisec += 60 * (1000 / HZ) * (now -> ds_Minute - begin.ds_Minute);
- millisec += (1000 / HZ) * (now -> ds_Tick - begin.ds_Tick);
- (void) FreeMem (now, (long) sizeof (struct DateStamp));
- }
- return (millisec);
-}
-
-#else
-
-#ifndef THREAD
-static unsigned long Clock ()
-{
- return (0);
-}
-#endif
-#endif /* amiga */
-#endif /* MSDOS || __WIN__ */
-#endif /* RUSAGE */
-
-
-#ifdef NO_VARARGS
-
-/*
- * Fake vfprintf for systems that don't support it. If this
- * doesn't work, you are probably SOL...
- */
-
-static int vfprintf (stream, format, ap)
-FILE *stream;
-char *format;
-va_list ap;
-{
- int rtnval;
- ARGS_DCL;
-
- ARG0 = va_arg (ap, ARGS_TYPE);
- ARG1 = va_arg (ap, ARGS_TYPE);
- ARG2 = va_arg (ap, ARGS_TYPE);
- ARG3 = va_arg (ap, ARGS_TYPE);
- ARG4 = va_arg (ap, ARGS_TYPE);
- ARG5 = va_arg (ap, ARGS_TYPE);
- ARG6 = va_arg (ap, ARGS_TYPE);
- ARG7 = va_arg (ap, ARGS_TYPE);
- ARG8 = va_arg (ap, ARGS_TYPE);
- ARG9 = va_arg (ap, ARGS_TYPE);
- rtnval = fprintf (stream, format, ARGS_LIST);
- return (rtnval);
-}
-
-#endif /* NO_VARARGS */
diff --git a/ext/mysql/libmysql/dbug.h b/ext/mysql/libmysql/dbug.h
deleted file mode 100644
index d811b584a5..0000000000
--- a/ext/mysql/libmysql/dbug.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifndef _dbug_h
-#define _dbug_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if !defined(DBUG_OFF) && !defined(_lint)
-extern int _db_on_,_no_db_;
-extern FILE *_db_fp_;
-extern char *_db_process_;
-extern int _db_keyword_(const char *keyword);
-extern void _db_setjmp_(void);
-extern void _db_longjmp_(void);
-extern void _db_push_(const char *control);
-extern void _db_pop_(void);
-extern void _db_enter_(const char *_func_,const char *_file_,uint _line_,
- const char **_sfunc_,const char **_sfile_,
- uint *_slevel_, char ***);
-extern void _db_return_(uint _line_,const char **_sfunc_,const char **_sfile_,
- uint *_slevel_);
-extern void _db_pargs_(uint _line_,const char *keyword);
-extern void _db_doprnt_ _VARARGS((const char *format,...));
-extern void _db_dump_(uint _line_,const char *keyword,const char *memory,
- uint length);
-extern void _db_lock_file();
-extern void _db_unlock_file();
-
-#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
- char **_db_framep_; \
- _db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
- &_db_framep_)
-#define DBUG_LEAVE \
- (_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_))
-#define DBUG_RETURN(a1) {DBUG_LEAVE; return(a1);}
-#define DBUG_VOID_RETURN {DBUG_LEAVE; return;}
-#define DBUG_EXECUTE(keyword,a1) \
- {if (_db_on_) {if (_db_keyword_ (keyword)) { a1 }}}
-#define DBUG_PRINT(keyword,arglist) \
- {if (_db_on_) {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;}}
-#define DBUG_PUSH(a1) _db_push_ (a1)
-#define DBUG_POP() _db_pop_ ()
-#define DBUG_PROCESS(a1) (_db_process_ = a1)
-#define DBUG_FILE (_db_fp_)
-#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
-#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
-#define DBUG_DUMP(keyword,a1,a2)\
- {if (_db_on_) {_db_dump_(__LINE__,keyword,a1,a2);}}
-#define DBUG_IN_USE (_db_fp_ && _db_fp_ != stderr)
-#define DEBUGGER_OFF _no_db_=1;_db_on_=0;
-#define DEBUGGER_ON _no_db_=0
-#define DBUG_LOCK_FILE { _db_lock_file(); }
-#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
-#define DBUG_ASSERT(A) A
-#else /* No debugger */
-
-#define DBUG_ENTER(a1)
-#define DBUG_RETURN(a1) return(a1)
-#define DBUG_VOID_RETURN return
-#define DBUG_EXECUTE(keyword,a1) {}
-#define DBUG_PRINT(keyword,arglist) {}
-#define DBUG_PUSH(a1) {}
-#define DBUG_POP() {}
-#define DBUG_PROCESS(a1) {}
-#define DBUG_FILE (stderr)
-#define DBUG_SETJMP setjmp
-#define DBUG_LONGJMP longjmp
-#define DBUG_DUMP(keyword,a1,a2) {}
-#define DBUG_IN_USE 0
-#define DEBUGGER_OFF
-#define DEBUGGER_ON
-#define DBUG_LOCK_FILE
-#define DBUG_UNLOCK_FILE
-#define DBUG_ASSERT(A) {}
-#endif
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/ext/mysql/libmysql/default.c b/ext/mysql/libmysql/default.c
deleted file mode 100644
index d9dbfcf1c6..0000000000
--- a/ext/mysql/libmysql/default.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/****************************************************************************
-** Add all options from files named "group".cnf from the default_directories
-** before the command line arguments.
-** On Windows defaults will also search in the Windows directory for a file
-** called 'group'.ini
-** As long as the program uses the last argument for conflicting
-** options one only have to add a call to "load_defaults" to enable
-** use of default values.
-** pre- and end 'blank space' are removed from options and values. The
-** following escape sequences are recognized in values: \b \t \n \r \\
-**
-** The following arguments are handled automaticly; If used, they must be
-** first argument on the command line!
-** --no-defaults ; no options are read.
-** --defaults-file=full-path-to-default-file ; Only this file will be read.
-** --defaults-extra-file=full-path-to-default-file ; Read this file before ~/
-** --print-defaults ; Print the modified command line and exit
-****************************************************************************/
-
-#undef SAFEMALLOC /* safe_malloc is not yet initailized */
-
-#include "mysys_priv.h"
-#include "m_string.h"
-#include "m_ctype.h"
-
-char *defaults_extra_file=0;
-
-/* Which directories are searched for options (and in which order) */
-
-const char *default_directories[]= {
-#ifdef __WIN__
-"C:/",
-#else
-"/etc/",
-#endif
-#ifdef DATADIR
-DATADIR,
-#endif
-"", /* Place for defaults_extra_dir */
-#ifndef __WIN__
-"~/",
-#endif
-NullS,
-};
-
-#define default_ext ".cnf" /* extension for config file */
-#ifdef __WIN__
-#include <winbase.h>
-#define windows_ext ".ini"
-#endif
-
-static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
- const char *dir, const char *config_file,
- const char *ext, TYPELIB *group);
-
-
-void load_defaults(const char *conf_file, const char **groups,
- int *argc, char ***argv)
-{
- DYNAMIC_ARRAY args;
- const char **dirs, *forced_default_file;
- TYPELIB group;
- my_bool found_print_defaults=0;
- uint args_used=0;
- MEM_ROOT alloc;
- char *ptr,**res;
- DBUG_ENTER("load_defaults");
-
- init_alloc_root(&alloc,128,0);
- if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
- {
- /* remove the --no-defaults argument and return only the other arguments */
- uint i;
- if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
- (*argc + 1)*sizeof(char*))))
- goto err;
- res= (char**) (ptr+sizeof(alloc));
- res[0]= **argv; /* Copy program name */
- for (i=2 ; i < (uint) *argc ; i++)
- res[i-1]=argv[0][i];
- (*argc)--;
- *argv=res;
- *(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
- DBUG_VOID_RETURN;
- }
-
- /* Check if we want to force the use a specific default file */
- forced_default_file=0;
- if (*argc >= 2)
- {
- if (is_prefix(argv[0][1],"--defaults-file="))
- {
- forced_default_file=strchr(argv[0][1],'=')+1;
- args_used++;
- }
- else if (is_prefix(argv[0][1],"--defaults-extra-file="))
- {
- defaults_extra_file=strchr(argv[0][1],'=')+1;
- args_used++;
- }
- }
-
- group.count=0;
- group.name= "defaults";
- group.type_names= groups;
- for (; *groups ; groups++)
- group.count++;
-
- if (init_dynamic_array(&args, sizeof(char*),*argc, 32))
- goto err;
- if (forced_default_file)
- {
- if (search_default_file(&args, &alloc, "", forced_default_file, "",
- &group))
- goto err;
- }
- else if (dirname_length(conf_file))
- {
- if (search_default_file(&args, &alloc, NullS, conf_file, default_ext,
- &group))
- goto err;
- }
- else
- {
-#ifdef __WIN__
- char system_dir[FN_REFLEN];
- GetWindowsDirectory(system_dir,sizeof(system_dir));
- if (search_default_file(&args, &alloc, system_dir, conf_file, windows_ext,
- &group))
- goto err;
-#endif
-#ifdef __EMX__
- if (getenv("ETC") &&
- search_default_file(&args, &alloc, getenv("ETC"), conf_file,
- default_ext, &group))
- goto err;
-#endif
- for (dirs=default_directories ; *dirs; dirs++)
- {
- int error=0;
- if (**dirs)
- error=search_default_file(&args, &alloc, *dirs, conf_file,
- default_ext, &group);
- else if (defaults_extra_file)
- error=search_default_file(&args, &alloc, NullS, defaults_extra_file,
- default_ext, &group);
- if (error)
- goto err;
- }
- }
- if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
- (args.elements + *argc +1) *sizeof(char*))))
- goto err;
- res= (char**) (ptr+sizeof(alloc));
-
- /* copy name + found arguments + command line arguments to new array */
- res[0]=argv[0][0];
- memcpy((gptr) (res+1), args.buffer, args.elements*sizeof(char*));
- /* Skipp --defaults-file and --defaults-extra-file */
- (*argc)-= args_used;
- (*argv)+= args_used;
-
- /* Check if we wan't to see the new argument list */
- if (*argc >= 2 && !strcmp(argv[0][1],"--print-defaults"))
- {
- found_print_defaults=1;
- --*argc; ++*argv; /* skipp argument */
- }
-
- memcpy((gptr) (res+1+args.elements), (char*) ((*argv)+1),
- (*argc-1)*sizeof(char*));
- res[args.elements+ *argc]=0; /* last null */
-
- (*argc)+=args.elements;
- *argv= (char**) res;
- *(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
- delete_dynamic(&args);
- if (found_print_defaults)
- {
- int i;
- printf("%s would have been started with the following arguments:\n",
- **argv);
- for (i=1 ; i < *argc ; i++)
- printf("%s ", (*argv)[i]);
- puts("");
- exit(1);
- }
- DBUG_VOID_RETURN;
-
- err:
- fprintf(stderr,"Program aborted\n");
- exit(1);
-}
-
-
-void free_defaults(char **argv)
-{
- MEM_ROOT ptr;
- memcpy_fixed((char*) &ptr,(char *) argv - sizeof(ptr), sizeof(ptr));
- free_root(&ptr,MYF(0));
-}
-
-
-static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
- const char *dir, const char *config_file,
- const char *ext, TYPELIB *group)
-{
- char name[FN_REFLEN+10],buff[FN_REFLEN+1],*ptr,*end,*value,*tmp;
- FILE *fp;
- uint line=0;
- my_bool read_values=0,found_group=0;
-
- if ((dir ? strlen(dir) : 0 )+strlen(config_file) >= FN_REFLEN-3)
- return 0; /* Ignore wrong paths */
- if (dir)
- {
- strmov(name,dir);
- convert_dirname(name);
- if (dir[0] == FN_HOMELIB) /* Add . to filenames in home */
- strcat(name,".");
- strxmov(strend(name),config_file,ext,NullS);
- }
- else
- {
- strmov(name,config_file);
- }
- if (!(fp = my_fopen(fn_format(name,name,"","",4),O_RDONLY,MYF(0))))
- return 0; /* Ignore wrong files */
-
- while (fgets(buff,sizeof(buff)-1,fp))
- {
- line++;
- /* Ignore comment and empty lines */
- for (ptr=buff ; isspace(*ptr) ; ptr++ ) ;
- if (*ptr == '#' || *ptr == ';' || !*ptr)
- continue;
- if (*ptr == '[') /* Group name */
- {
- found_group=1;
- if (!(end=(char *) strchr(++ptr,']')))
- {
- fprintf(stderr,
- "error: Wrong group definition in config file: %s at line %d\n",
- name,line);
- goto err;
- }
- for ( ; isspace(end[-1]) ; end--) ; /* Remove end space */
- end[0]=0;
- read_values=find_type(ptr,group,3) > 0;
- continue;
- }
- if (!found_group)
- {
- fprintf(stderr,
- "error: Found option without preceding group in config file: %s at line: %d\n",
- name,line);
- goto err;
- }
- if (!read_values)
- continue;
- if (!(end=value=strchr(ptr,'=')))
- end=strend(ptr); /* Option without argument */
- for ( ; isspace(end[-1]) ; end--) ;
- if (!value)
- {
- if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3)))
- goto err;
- strmake(strmov(tmp,"--"),ptr,(uint) (end-ptr));
- if (insert_dynamic(args,(gptr) &tmp))
- goto err;
- }
- else
- {
- /* Remove pre- and end space */
- char *value_end;
- for (value++ ; isspace(*value); value++) ;
- value_end=strend(value);
- for ( ; isspace(value_end[-1]) ; value_end--) ;
- if (value_end < value) /* Empty string */
- value_end=value;
- if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3 +
- (uint) (value_end-value)+1)))
- goto err;
- if (insert_dynamic(args,(gptr) &tmp))
- goto err;
- ptr=strnmov(strmov(tmp,"--"),ptr,(uint) (end-ptr));
- *ptr++= '=';
- for ( ; value != value_end; value++)
- {
- if (*value == '\\' && value != value_end-1)
- {
- switch(*++value) {
- case 'n':
- *ptr++='\n';
- break;
- case 't':
- *ptr++= '\t';
- break;
- case 'r':
- *ptr++ = '\r';
- break;
- case 'b':
- *ptr++ = '\b';
- break;
- case 's':
- *ptr++= ' '; /* space */
- break;
- case '\\':
- *ptr++= '\\';
- break;
- default: /* Unknown; Keep '\' */
- *ptr++= '\\';
- *ptr++= *value;
- break;
- }
- }
- else
- *ptr++= *value;
- }
- *ptr=0;
- }
- }
- my_fclose(fp,MYF(0));
- return(0);
-
- err:
- my_fclose(fp,MYF(0));
- return 1;
-}
-
-
-void print_defaults(const char *conf_file, const char **groups)
-{
-#ifdef __WIN__
- bool have_ext=fn_ext(conf_file)[0] != 0;
-#endif
- char name[FN_REFLEN];
- const char **dirs;
- puts("\nDefault options are read from the following files in the given order:");
-
- if (dirname_length(conf_file))
- fputs(conf_file,stdout);
- else
- {
-#ifdef __WIN__
- GetWindowsDirectory(name,sizeof(name));
- printf("%s\\%s%s ",name,conf_file,have_ext ? "" : windows_ext);
-#endif
-#ifdef __EMX__
- if (getenv("ETC"))
- printf("%s\\%s%s ", getenv("ETC"), conf_file, default_ext);
-#endif
- for (dirs=default_directories ; *dirs; dirs++)
- {
- if (**dirs)
- strmov(name,*dirs);
- else if (defaults_extra_file)
- strmov(name,defaults_extra_file);
- else
- continue;
- convert_dirname(name);
- if (name[0] == FN_HOMELIB) /* Add . to filenames in home */
- strcat(name,".");
- strxmov(strend(name),conf_file,default_ext," ",NullS);
- fputs(name,stdout);
- }
- puts("");
- }
- fputs("The following groups are read:",stdout);
- for ( ; *groups ; groups++)
- {
- fputc(' ',stdout);
- fputs(*groups,stdout);
- }
- puts("\nThe following options may be given as the first argument:\n\
---print-defaults Print the program argument list and exit\n\
---no-defaults Don't read default options from any options file\n\
---defaults-file=# Only read default options from the given file #\n\
---defaults-extra-file=# Read this file after the global files are read");
-}
-
diff --git a/ext/mysql/libmysql/dll.c b/ext/mysql/libmysql/dll.c
deleted file mode 100644
index fb666c0f3b..0000000000
--- a/ext/mysql/libmysql/dll.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
-** Handling initialization of the dll library
-*/
-
-#include <global.h>
-#include <my_sys.h>
-#include <my_pthread.h>
-
-static bool libmysql_inited=0;
-
-void libmysql_init(void)
-{
- if (libmysql_inited)
- return;
- libmysql_inited=1;
- my_init();
- {
- DBUG_ENTER("libmysql_init");
-#ifdef LOG_ALL
- DBUG_PUSH("d:t:S:O,c::\\tmp\\libmysql.log");
-#else
- if (getenv("LIBMYSQL_LOG") != NULL)
- DBUG_PUSH(getenv("LIBMYSQL_LOG"));
-#endif
- DBUG_VOID_RETURN;
- }
-}
-
-#ifdef __WIN__
-
-static int inited=0,threads=0;
-HINSTANCE NEAR s_hModule; /* Saved module handle */
-DWORD main_thread;
-
-BOOL APIENTRY LibMain(HANDLE hInst,DWORD ul_reason_being_called,
- LPVOID lpReserved)
-{
- switch (ul_reason_being_called) {
- case DLL_PROCESS_ATTACH: /* case of libentry call in win 3.x */
- if (!inited++)
- {
- s_hModule=hInst;
- libmysql_init();
- main_thread=GetCurrentThreadId();
- }
- break;
- case DLL_THREAD_ATTACH:
- threads++;
- my_thread_init();
- break;
- case DLL_PROCESS_DETACH: /* case of wep call in win 3.x */
- if (!--inited) /* Safety */
- {
- /* my_thread_init() */ /* This may give extra safety */
- my_end(0);
- }
- break;
- case DLL_THREAD_DETACH:
- /* Main thread will free by my_end() */
- threads--;
- if (main_thread != GetCurrentThreadId())
- my_thread_end();
- break;
- default:
- break;
- } /* switch */
-
- return TRUE;
-
- UNREFERENCED_PARAMETER(lpReserved);
-} /* LibMain */
-
-int __stdcall DllMain(HANDLE hInst,DWORD ul_reason_being_called,LPVOID lpReserved)
-{
- return LibMain(hInst,ul_reason_being_called,lpReserved);
-}
-
-#elif defined(WINDOWS)
-
-/****************************************************************************
-** This routine is called by LIBSTART.ASM at module load time. All it
-** does in this sample is remember the DLL module handle. The module
-** handle is needed if you want to do things like load stuff from the
-** resource file (for instance string resources).
-****************************************************************************/
-
-int _export FAR PASCAL libmain(HANDLE hModule,short cbHeapSize,
- UCHAR FAR *lszCmdLine)
-{
- s_hModule = hModule;
- libmysql_init();
- return TRUE;
-}
-
-#endif
diff --git a/ext/mysql/libmysql/errmsg.c b/ext/mysql/libmysql/errmsg.c
deleted file mode 100644
index 216693042d..0000000000
--- a/ext/mysql/libmysql/errmsg.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Error messages for MySQL clients */
-/* error messages for the demon is in share/language/errmsg.sys */
-
-#include <global.h>
-#include <my_sys.h>
-#include "errmsg.h"
-
-#ifdef GERMAN
-const char *client_errors[]=
-{
- "Unbekannter MySQL Fehler",
- "Kann UNIX-Socket nicht anlegen (%d)",
- "Keine Verbindung zu lokalem MySQL Server, socket: '%-.64s' (%d)",
- "Keine Verbindung zu MySQL Server auf %-.64s (%d)",
- "Kann TCP/IP-Socket nicht anlegen (%d)",
- "Unbekannter MySQL Server Host (%-.64s) (%d)",
- "MySQL Server nicht vorhanden",
- "Protokolle ungleich. Server Version = % d Client Version = %d",
- "MySQL client got out of memory",
- "Wrong host info",
- "Localhost via UNIX socket",
- "%-.64s via TCP/IP",
- "Error in server handshake",
- "Lost connection to MySQL server during query",
- "Commands out of sync; You can't run this command now",
- "Verbindung ueber Named Pipe; Host: %-.64s",
- "Kann nicht auf Named Pipe warten. Host: %-.64s pipe: %-.32s (%lu)",
- "Kann Named Pipe nicht oeffnen. Host: %-.64s pipe: %-.32s (%lu)",
- "Kann den Status der Named Pipe nicht setzen. Host: %-.64s pipe: %-.32s (%lu)",
- "Can't initialize character set %-.64s (path: %-.64s)",
- "Got packet bigger than 'max_allowed_packet'"
-};
-
-#else /* ENGLISH */
-const char *client_errors[]=
-{
- "Unknown MySQL error",
- "Can't create UNIX socket (%d)",
- "Can't connect to local MySQL server through socket '%-.64s' (%d)",
- "Can't connect to MySQL server on '%-.64s' (%d)",
- "Can't create TCP/IP socket (%d)",
- "Unknown MySQL Server Host '%-.64s' (%d)",
- "MySQL server has gone away",
- "Protocol mismatch. Server Version = %d Client Version = %d",
- "MySQL client run out of memory",
- "Wrong host info",
- "Localhost via UNIX socket",
- "%-.64s via TCP/IP",
- "Error in server handshake",
- "Lost connection to MySQL server during query",
- "Commands out of sync; You can't run this command now",
- "%-.64s via named pipe",
- "Can't wait for named pipe to host: %-.64s pipe: %-.32s (%lu)",
- "Can't open named pipe to host: %-.64s pipe: %-.32s (%lu)",
- "Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)",
- "Can't initialize character set %-.64s (path: %-.64s)",
- "Got packet bigger than 'max_allowed_packet'"
-};
-#endif
-
-
-void init_client_errs(void)
-{
- my_errmsg[CLIENT_ERRMAP] = &client_errors[0];
-}
diff --git a/ext/mysql/libmysql/errmsg.h b/ext/mysql/libmysql/errmsg.h
deleted file mode 100644
index f81bf962db..0000000000
--- a/ext/mysql/libmysql/errmsg.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Error messages for mysql clients */
-/* error messages for the demon is in share/language/errmsg.sys */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-void init_client_errs(void);
-extern const char *client_errors[]; /* Error messages */
-#ifdef __cplusplus
-}
-#endif
-
-#define CR_MIN_ERROR 2000 /* For easier client code */
-#define CR_MAX_ERROR 2999
-#define ER(X) client_errors[(X)-CR_MIN_ERROR]
-#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */
-
-#define CR_UNKNOWN_ERROR 2000
-#define CR_SOCKET_CREATE_ERROR 2001
-#define CR_CONNECTION_ERROR 2002
-#define CR_CONN_HOST_ERROR 2003
-#define CR_IPSOCK_ERROR 2004
-#define CR_UNKNOWN_HOST 2005
-#define CR_SERVER_GONE_ERROR 2006
-#define CR_VERSION_ERROR 2007
-#define CR_OUT_OF_MEMORY 2008
-#define CR_WRONG_HOST_INFO 2009
-#define CR_LOCALHOST_CONNECTION 2010
-#define CR_TCP_CONNECTION 2011
-#define CR_SERVER_HANDSHAKE_ERR 2012
-#define CR_SERVER_LOST 2013
-#define CR_COMMANDS_OUT_OF_SYNC 2014
-#define CR_NAMEDPIPE_CONNECTION 2015
-#define CR_NAMEDPIPEWAIT_ERROR 2016
-#define CR_NAMEDPIPEOPEN_ERROR 2017
-#define CR_NAMEDPIPESETSTATE_ERROR 2018
-#define CR_CANT_READ_CHARSET 2019
-#define CR_NET_PACKET_TOO_LARGE 2020
diff --git a/ext/mysql/libmysql/errors.c b/ext/mysql/libmysql/errors.c
deleted file mode 100644
index 9b11bfb47a..0000000000
--- a/ext/mysql/libmysql/errors.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-
-#ifndef SHARED_LIBRARY
-
-const char * NEAR globerrs[GLOBERRS]=
-{
- "File '%s' not found (Errcode: %d)",
- "Can't create/write to file '%s' (Errcode: %d)",
- "Error reading file '%s' (Errcode: %d)",
- "Error writing file '%s' (Errcode: %d)",
- "Error on close of '%s' (Errcode: %d)",
- "Out of memory (Needed %u bytes)",
- "Error on delete of '%s' (Errcode: %d)",
- "Error on rename of '%s' to '%s' (Errcode: %d)",
- "",
- "Unexpected eof found when reading file '%s' (Errcode: %d)",
- "Can't lock file (Errcode: %d)",
- "Can't unlock file (Errcode: %d)",
- "Can't read dir of '%s' (Errcode: %d)",
- "Can't get stat of '%s' (Errcode: %d)",
- "Can't change size of file (Errcode: %d)",
- "Can't open stream from handle (Errcode: %d)",
- "Can't get working dirctory (Errcode: %d)",
- "Can't change dir to '%s' (Errcode: %d)",
- "Warning: '%s' had %d links",
- "%d files and %d streams is left open\n",
- "Disk is full writing '%s'. Waiting for someone to free space...",
- "Can't create directory '%s' (Errcode: %d)",
- "Character set '%s' is not a compiled character set and is not specified in the '%s' file",
- "Out of resources when opening file '%s' (Errcode: %d)",
- "Can't read value for symlink '%s' (Error %d)",
- "Can't create symlink '%s' pointing at '%s' (Error %d)",
- "Error on realpath() on '%s' (Error %d)",
-};
-
-void init_glob_errs(void)
-{
- my_errmsg[GLOB] = & globerrs[0];
-} /* init_glob_errs */
-
-#else
-
-void init_glob_errs()
-{
- my_errmsg[GLOB] = & globerrs[0];
-
- EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)";
- EE(EE_CANTCREATEFILE) = "Can't create/write to file '%s' (Errcode: %d)";
- EE(EE_READ) = "Error reading file '%s' (Errcode: %d)";
- EE(EE_WRITE) = "Error writing file '%s' (Errcode: %d)";
- EE(EE_BADCLOSE) = "Error on close of '%'s (Errcode: %d)";
- EE(EE_OUTOFMEMORY) = "Out of memory (Needed %u bytes)";
- EE(EE_DELETE) = "Error on delete of '%s' (Errcode: %d)";
- EE(EE_LINK) = "Error on rename of '%s' to '%s' (Errcode: %d)";
- EE(EE_EOFERR) = "Unexpected eof found when reading file '%s' (Errcode: %d)";
- EE(EE_CANTLOCK) = "Can't lock file (Errcode: %d)";
- EE(EE_CANTUNLOCK) = "Can't unlock file (Errcode: %d)";
- EE(EE_DIR) = "Can't read dir of '%s' (Errcode: %d)";
- EE(EE_STAT) = "Can't get stat of '%s' (Errcode: %d)";
- EE(EE_CANT_CHSIZE) = "Can't change size of file (Errcode: %d)";
- EE(EE_CANT_OPEN_STREAM)= "Can't open stream from handle (Errcode: %d)";
- EE(EE_GETWD) = "Can't get working dirctory (Errcode: %d)";
- EE(EE_SETWD) = "Can't change dir to '%s' (Errcode: %d)";
- EE(EE_LINK_WARNING) = "Warning: '%s' had %d links";
- EE(EE_OPEN_WARNING) = "%d files and %d streams is left open\n";
- EE(EE_DISK_FULL) = "Disk is full writing '%s'. Waiting for someone to free space...";
- EE(EE_CANT_MKDIR) ="Can't create directory '%s' (Errcode: %d)";
- EE(EE_UNKNOWN_CHARSET)= "Character set is not a compiled character set and is not specified in the %s file";
- EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)";
- EE(EE_CANT_READLINK)="Can't read value for symlink '%s' (Error %d)";
- EE(EE_CANT_SYMLINK)="Can't create symlink '%s' pointing at '%s' (Error %d)";
- EE(EE_REALPATH)="Error on realpath() on '%s' (Error %d)";
-}
-#endif
diff --git a/ext/mysql/libmysql/fix_copyright b/ext/mysql/libmysql/fix_copyright
deleted file mode 100755
index a4d479ecc0..0000000000
--- a/ext/mysql/libmysql/fix_copyright
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /bin/sh
-#
-# This script removes the Copyright messages and inserts
-# Copyright Abandoned messages.
-#
-
-
-if test -z "$1"; then
- echo "Usage: $0 files"
- echo
- echo 'Usual parameters: *.c *.h'
- exit 1
-fi
-
-
-for i in $@; do
- sed \
- -e '/Copyright Abandoned.*MySQL.*/,/NO WARRANTY of any kind/c\
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB \
-This file is public domain and comes with NO WARRANTY of any kind */' \
- -e '/Copyright.*MySQL.*/,/MA 02111/c\
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB \
-This file is public domain and comes with NO WARRANTY of any kind */' \
- -e '/Copyright (C) .*MySQL.*TCX/,/For a more info/c\
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB \
-This file is public domain and comes with NO WARRANTY of any kind */' \
- -e '/Copyright (C) .*TCX.*Monty/,/For a more info/c\
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB \
-This file is public domain and comes with NO WARRANTY of any kind */' \
- -e '/Copyright (C) .... Monty.*/,/be preserved on all copies/c\
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB \
-This file is public domain and comes with NO WARRANTY of any kind */' \
- < $i > tmp
- cp tmp $i
-done
diff --git a/ext/mysql/libmysql/get_password.c b/ext/mysql/libmysql/get_password.c
deleted file mode 100644
index c0c6f90406..0000000000
--- a/ext/mysql/libmysql/get_password.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
-** Ask for a password from tty
-** This is an own file to avoid conflicts with curses
-*/
-#include <global.h>
-#include <my_sys.h>
-#include "mysql.h"
-#include <m_string.h>
-#include <m_ctype.h>
-#include <dbug.h>
-
-#if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE)
-#undef HAVE_GETPASS
-#endif
-
-#ifdef HAVE_GETPASS
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif /* HAVE_PWD_H */
-#else /* ! HAVE_GETPASS */
-#ifndef __WIN__
-#include <sys/ioctl.h>
-#ifdef HAVE_TERMIOS_H /* For tty-password */
-#include <termios.h>
-#define TERMIO struct termios
-#else
-#ifdef HAVE_TERMIO_H /* For tty-password */
-#include <termio.h>
-#define TERMIO struct termio
-#else
-#include <sgtty.h>
-#define TERMIO struct sgttyb
-#endif
-#endif
-#ifdef alpha_linux_port
-#include <asm/ioctls.h> /* QQ; Fix this in configure */
-#include <asm/termiobits.h>
-#endif
-#else
-#include <conio.h>
-#endif /* __WIN__ */
-#endif /* HAVE_GETPASS */
-
-#ifdef HAVE_GETPASSPHRASE /* For Solaris */
-#define getpass(A) getpassphrase(A)
-#endif
-
-#ifdef __WIN__
-/* were just going to fake it here and get input from
- the keyboard */
-
-char *get_tty_password(char *opt_message)
-{
- char to[80];
- char *pos=to,*end=to+sizeof(to)-1;
- int i=0;
- DBUG_ENTER("get_tty_password");
- fprintf(stdout,opt_message ? opt_message : "Enter password: ");
- for (;;)
- {
- char tmp;
- tmp=_getch();
- if (tmp == '\b' || (int) tmp == 127)
- {
- if (pos != to)
- {
- _cputs("\b \b");
- pos--;
- continue;
- }
- }
- if (tmp == '\n' || tmp == '\r' || tmp == 3)
- break;
- if (iscntrl(tmp) || pos == end)
- continue;
- _cputs("*");
- *(pos++) = tmp;
- }
- while (pos != to && isspace(pos[-1]) == ' ')
- pos--; /* Allow dummy space at end */
- *pos=0;
- _cputs("\n");
- DBUG_RETURN(my_strdup(to,MYF(MY_FAE)));
-}
-
-#else
-
-
-#ifndef HAVE_GETPASS
-/*
-** Can't use fgets, because readline will get confused
-** length is max number of chars in to, not counting \0
-* to will not include the eol characters.
-*/
-
-static void get_password(char *to,uint length,int fd,bool echo)
-{
- char *pos=to,*end=to+length;
-
- for (;;)
- {
- char tmp;
- if (my_read(fd,&tmp,1,MYF(0)) != 1)
- break;
- if (tmp == '\b' || (int) tmp == 127)
- {
- if (pos != to)
- {
- if (echo)
- {
- fputs("\b \b",stdout);
- fflush(stdout);
- }
- pos--;
- continue;
- }
- }
- if (tmp == '\n' || tmp == '\r' || tmp == 3)
- break;
- if (iscntrl(tmp) || pos == end)
- continue;
- if (echo)
- {
- fputc('*',stdout);
- fflush(stdout);
- }
- *(pos++) = tmp;
- }
- while (pos != to && isspace(pos[-1]) == ' ')
- pos--; /* Allow dummy space at end */
- *pos=0;
- return;
-}
-#endif /* ! HAVE_GETPASS */
-
-
-char *get_tty_password(char *opt_message)
-{
-#ifdef HAVE_GETPASS
- char *passbuff;
-#else /* ! HAVE_GETPASS */
- TERMIO org,tmp;
-#endif /* HAVE_GETPASS */
- char buff[80];
-
- DBUG_ENTER("get_tty_password");
-
-#ifdef HAVE_GETPASS
- passbuff = getpass(opt_message ? opt_message : "Enter password: ");
-
- /* copy the password to buff and clear original (static) buffer */
- strnmov(buff, passbuff, sizeof(buff) - 1);
-#ifdef _PASSWORD_LEN
- memset(passbuff, 0, _PASSWORD_LEN);
-#endif
-#else
- if (isatty(fileno(stdout)))
- {
- fputs(opt_message ? opt_message : "Enter password: ",stdout);
- fflush(stdout);
- }
-#if defined(HAVE_TERMIOS_H)
- tcgetattr(fileno(stdin), &org);
- tmp = org;
- tmp.c_lflag &= ~(ECHO | ISIG | ICANON);
- tmp.c_cc[VMIN] = 1;
- tmp.c_cc[VTIME] = 0;
- tcsetattr(fileno(stdin), TCSADRAIN, &tmp);
- get_password(buff, sizeof(buff)-1, fileno(stdin), isatty(fileno(stdout)));
- tcsetattr(fileno(stdin), TCSADRAIN, &org);
-#elif defined(HAVE_TERMIO_H)
- ioctl(fileno(stdin), (int) TCGETA, &org);
- tmp=org;
- tmp.c_lflag &= ~(ECHO | ISIG | ICANON);
- tmp.c_cc[VMIN] = 1;
- tmp.c_cc[VTIME]= 0;
- ioctl(fileno(stdin),(int) TCSETA, &tmp);
- get_password(buff,sizeof(buff)-1,fileno(stdin),isatty(fileno(stdout)));
- ioctl(fileno(stdin),(int) TCSETA, &org);
-#else
- gtty(fileno(stdin), &org);
- tmp=org;
- tmp.sg_flags &= ~ECHO;
- tmp.sg_flags |= RAW;
- stty(fileno(stdin), &tmp);
- get_password(buff,sizeof(buff)-1,fileno(stdin),isatty(fileno(stdout)));
- stty(fileno(stdin), &org);
-#endif
- if (isatty(fileno(stdout)))
- fputc('\n',stdout);
-#endif /* HAVE_GETPASS */
-
- DBUG_RETURN(my_strdup(buff,MYF(MY_FAE)));
-}
-#endif /*__WIN__*/
diff --git a/ext/mysql/libmysql/global.h b/ext/mysql/libmysql/global.h
deleted file mode 100644
index 2257c49969..0000000000
--- a/ext/mysql/libmysql/global.h
+++ /dev/null
@@ -1,917 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* This is the main include file that should included 'first' in every
- C file. */
-
-#ifndef _global_h
-#define _global_h
-
-#if defined( __EMX__) && !defined( MYSQL_SERVER)
-/* moved here to use below VOID macro redefinition */
-#define INCL_BASE
-#define INCL_NOPMAPI
-#include <os2.h>
-#endif /* __EMX__ */
-
-#ifdef __CYGWIN__
-/* We use a Unix API, so pretend it's not Windows */
-#undef WIN
-#undef WIN32
-#undef _WIN
-#undef _WIN32
-#undef _WIN64
-#undef __WIN__
-#undef __WIN32__
-#define HAVE_ERRNO_AS_DEFINE
-#endif /* __CYGWIN__ */
-
-
-#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
-#include <config-win.h>
-#else
-#include <my_config.h>
-#endif
-#if defined(__cplusplus)
-#if defined(inline)
-#undef inline /* fix configure problem */
-#endif
-#endif /* _cplusplus */
-
-/* Fix problem with S_ISLNK() on Linux */
-#if defined(HAVE_LINUXTHREADS)
-#undef _GNU_SOURCE
-#define _GNU_SOURCE 1
-#endif
-
-/* The client defines this to avoid all thread code */
-#if defined(UNDEF_THREADS_HACK)
-#undef THREAD
-#undef HAVE_mit_thread
-#undef HAVE_LINUXTHREADS
-#undef HAVE_UNIXWARE7_THREADS
-#endif
-
-#ifdef HAVE_THREADS_WITHOUT_SOCKETS
-/* MIT pthreads does not work with unix sockets */
-#undef HAVE_SYS_UN_H
-#endif
-
-#define __EXTENSIONS__ 1 /* We want some extension */
-#ifndef __STDC_EXT__
-#define __STDC_EXT__ 1 /* To get large file support on hpux */
-#endif
-
-#if defined(THREAD) && !defined(__WIN__)
-#ifndef _POSIX_PTHREAD_SEMANTICS
-#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */
-#endif
-/* was #if defined(HAVE_LINUXTHREADS) || defined(HAVE_DEC_THREADS) || defined(HPUX) */
-#if !defined(SCO)
-#define _REENTRANT 1 /* Some thread libraries require this */
-#endif
-#if !defined(_THREAD_SAFE) && !defined(_AIX)
-#define _THREAD_SAFE /* Required for OSF1 */
-#endif
-#ifndef HAVE_mit_thread
-#ifdef HAVE_UNIXWARE7_THREADS
-#include <thread.h>
-#else
-#include <pthread.h> /* AIX must have this included first */
-#endif /* HAVE_UNIXWARE7_THREADS */
-#endif /* HAVE_mit_thread */
-#if !defined(SCO) && !defined(_REENTRANT)
-#define _REENTRANT 1 /* Threads requires reentrant code */
-#endif
-#endif /* THREAD */
-
-/* Go around some bugs in different OS and compilers */
-#ifdef _AIX /* By soren@t.dk */
-#define _H_STRINGS
-#define _SYS_STREAM_H
-#define _AIX32_CURSES
-#endif
-
-#ifdef HAVE_BROKEN_SNPRINTF /* HPUX 10.20 don't have this defined */
-#undef HAVE_SNPRINTF
-#endif
-#ifdef HAVE_BROKEN_PREAD /* These doesn't work on HPUX 11.x */
-#undef HAVE_PREAD
-#undef HAVE_PWRITE
-#endif
-
-#ifdef UNDEF_HAVE_GETHOSTBYNAME_R /* For OSF4.x */
-#undef HAVE_GETHOSTBYNAME_R
-#endif
-#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */
-#undef HAVE_INITGROUPS
-#endif
-
-/* Fix a bug in gcc 2.8.0 on IRIX 6.2 */
-#if SIZEOF_LONG == 4 && defined(__LONG_MAX__)
-#undef __LONG_MAX__ /* Is a longlong value in gcc 2.8.0 ??? */
-#define __LONG_MAX__ 2147483647
-#endif
-
-/* egcs 1.1.2 has a problem with memcpy on Alpha */
-#if defined(__GNUC__) && defined(__alpha__) && ! (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
-#define BAD_MEMCPY
-#endif
-
-/* In Linux-alpha we have atomic.h if we are using gcc */
-#if defined(HAVE_LINUXTHREADS) && defined(__GNUC__) && defined(__alpha__) && (__GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 95)) && !defined(HAVE_ATOMIC_ADD)
-#define HAVE_ATOMIC_ADD
-#define HAVE_ATOMIC_SUB
-#endif
-
-/* In Linux-ia64 including atomic.h will give us an error */
-#if (defined(HAVE_LINUXTHREADS) && defined(__GNUC__) && defined(__ia64__)) || !defined(THREAD)
-#undef HAVE_ATOMIC_ADD
-#undef HAVE_ATOMIC_SUB
-#endif
-
-#if defined(_lint) && !defined(lint)
-#define lint
-#endif
-#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG)
-#define _LONG_LONG 1 /* For AIX string library */
-#endif
-
-#ifndef stdin
-#include <stdio.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include <math.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_FLOAT_H
-#include <float.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_SYS_TIMEB_H
-#include <sys/timeb.h> /* Avoid warnings on SCO */
-#endif
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif /* TIME_WITH_SYS_TIME */
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if defined(__cplusplus) && defined(NO_CPLUSPLUS_ALLOCA)
-#undef HAVE_ALLOCA
-#undef HAVE_ALLOCA_H
-#endif
-#ifdef HAVE_ALLOCA_H
-#include <alloca.h>
-#endif
-#ifdef HAVE_ATOMIC_ADD
-#define __SMP__
-#include <asm/atomic.h>
-#endif
-
-/* Go around some bugs in different OS and compilers */
-#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H)
-#include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */
-#define HAVE_ULONG
-#endif
-#ifdef DONT_USE_FINITE /* HPUX 11.x has is_finite() */
-#undef HAVE_FINITE
-#endif
-
-/* We can not live without these */
-
-#define USE_MYFUNC 1 /* Must use syscall indirection */
-#define MASTER 1 /* Compile without unireg */
-#define ENGLISH 1 /* Messages in English */
-#define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */
-#define USE_REGEX 1 /* We want the use the regex library */
-/* Do not define for ultra sparcs */
-#define USE_BMOVE512 1 /* Use this unless the system bmove is faster */
-
-/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */
-#ifdef I_AM_PARANOID
-#define DONT_ALLOW_USER_CHANGE 1
-#define DONT_USE_MYSQL_PWD 1
-#endif
-
-/* #define USE_some_charset 1 was deprecated by changes to configure */
-/* my_ctype my_to_upper, my_to_lower, my_sort_order gain theit right value */
-/* automagically during configuration */
-
-/* Does the system remember a signal handler after a signal ? */
-#ifndef HAVE_BSD_SIGNALS
-#define DONT_REMEMBER_SIGNAL
-#endif
-
-/* Define void to stop lint from generating "null effekt" comments */
-#ifndef DONT_DEFINE_VOID
-#ifdef _lint
-int __void__;
-#define VOID(X) (__void__ = (int) (X))
-#else
-#undef VOID
-#define VOID(X) (X)
-#endif
-#endif /* DONT_DEFINE_VOID */
-
-#if defined(_lint) || defined(FORCE_INIT_OF_VARS)
-#define LINT_INIT(var) var=0 /* No uninitialize-warning */
-#else
-#define LINT_INIT(var)
-#endif
-
-/* Define som useful general macros */
-#if defined(__cplusplus) && defined(__GNUC__)
-#define max(a, b) ((a) >? (b))
-#define min(a, b) ((a) <? (b))
-#elif !defined(max)
-#define max(a, b) ((a) > (b) ? (a) : (b))
-#define min(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-#if defined(__EMX__) || !defined(HAVE_UINT)
-#undef uint
-#undef ushort
-#undef ulong
-typedef unsigned int uint;
-typedef unsigned short ushort;
-typedef unsigned long ulong;
-#endif
-
-#define sgn(a) (((a) < 0) ? -1 : ((a) > 0) ? 1 : 0)
-#define swap(t,a,b) { register t dummy; dummy = a; a = b; b = dummy; }
-#define test(a) ((a) ? 1 : 0)
-#define set_if_bigger(a,b) { if ((a) < (b)) (a)=(b); }
-#define set_if_smaller(a,b) { if ((a) > (b)) (a)=(b); }
-#define test_all_bits(a,b) (((a) & (b)) == (b))
-#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0])))
-#ifndef HAVE_RINT
-#define rint(A) floor((A)+0.5)
-#endif
-
-/* Define som general constants */
-#ifndef TRUE
-#define TRUE (1) /* Logical true */
-#define FALSE (0) /* Logical false */
-#endif
-
-#if defined(__GNUC__)
-#define function_volatile volatile
-#define my_reinterpret_cast(A) reinterpret_cast<A>
-#define my_const_cast(A) const_cast<A>
-#elif !defined(my_reinterpret_cast)
-#define my_reinterpret_cast(A) (A)
-#define my_const_cast(A) (A)
-#endif
-#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
-#define __attribute__(A)
-#endif
-
-/* From old s-system.h */
-
-/* Support macros for non ansi & other old compilers. Since such
- things are no longer supported we do nothing. We keep then since
- some of our code may still be needed to upgrade old customers. */
-#define _VARARGS(X) X
-#define _STATIC_VARARGS(X) X
-#define _PC(X) X
-
-#if defined(DBUG_ON) && defined(DBUG_OFF)
-#undef DBUG_OFF
-#endif
-
-#if defined(_lint) && !defined(DBUG_OFF)
-#define DBUG_OFF
-#endif
-
-#include <dbug.h>
-#ifndef DBUG_OFF
-#define dbug_assert(A) assert(A)
-#else
-#define dbug_assert(A)
-#endif
-
-#define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/
-#define ASCII_BITS_USED 8 /* Bit char used */
-#define NEAR_F /* No near function handling */
-
-/* Some types that is different between systems */
-
-typedef int File; /* File descriptor */
-#ifndef Socket_defined
-typedef int my_socket; /* File descriptor for sockets */
-#define INVALID_SOCKET -1
-#endif
-/* Type for fuctions that handles signals */
-#define sig_handler RETSIGTYPE
-typedef void (*sig_return)();/* Returns type from signal */
-#if defined(__GNUC__) && !defined(_lint)
-typedef char pchar; /* Mixed prototypes can take char */
-typedef char puchar; /* Mixed prototypes can take char */
-typedef char pbool; /* Mixed prototypes can take char */
-typedef short pshort; /* Mixed prototypes can take short int */
-typedef float pfloat; /* Mixed prototypes can take float */
-#else
-typedef int pchar; /* Mixed prototypes can't take char */
-typedef uint puchar; /* Mixed prototypes can't take char */
-typedef int pbool; /* Mixed prototypes can't take char */
-typedef int pshort; /* Mixed prototypes can't take short int */
-typedef double pfloat; /* Mixed prototypes can't take float */
-#endif
-typedef int (*qsort_cmp)(const void *,const void *);
-#ifdef HAVE_mit_thread
-#define qsort_t void
-#undef QSORT_TYPE_IS_VOID
-#define QSORT_TYPE_IS_VOID
-#else
-#define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */
-#endif
-#ifdef HAVE_mit_thread
-#define size_socket socklen_t /* Type of last arg to accept */
-#else
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-typedef SOCKET_SIZE_TYPE size_socket;
-#endif
-
-#ifndef SOCKOPT_OPTLEN_TYPE
-#define SOCKOPT_OPTLEN_TYPE size_socket
-#endif
-
-/* file create flags */
-
-#ifndef O_SHARE
-#define O_SHARE 0 /* Flag to my_open for shared files */
-#ifndef O_BINARY
-#define O_BINARY 0 /* Flag to my_open for binary files */
-#endif
-#define FILE_BINARY 0 /* Flag to my_fopen for binary streams */
-#ifdef HAVE_FCNTL
-#define HAVE_FCNTL_LOCK
-#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */
-#endif
-#endif /* O_SHARE */
-#ifndef O_TEMPORARY
-#define O_TEMPORARY 0
-#endif
-#ifndef O_SHORT_LIVED
-#define O_SHORT_LIVED 0
-#endif
-
-/* #define USE_RECORD_LOCK */
-
- /* Unsigned types supported by the compiler */
-#define UNSINT8 /* unsigned int8 (char) */
-#define UNSINT16 /* unsigned int16 */
-#define UNSINT32 /* unsigned int32 */
-
- /* General constants */
-#define SC_MAXWIDTH 256 /* Max width of screen (for error messages) */
-#define FN_LEN 256 /* Max file name len */
-#define FN_HEADLEN 253 /* Max length of filepart of file name */
-#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */
-#define FN_REFLEN 512 /* Max length of full path-name */
-#define FN_EXTCHAR '.'
-#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */
-#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */
-#define FN_PARENTDIR ".." /* Parentdirectory; Must be a string */
-#define FN_DEVCHAR ':'
-
-#ifndef FN_LIBCHAR
-#ifdef __EMX__
-#define FN_LIBCHAR '\\'
-#define FN_ROOTDIR "\\"
-#else
-#define FN_LIBCHAR '/'
-#define FN_ROOTDIR "/"
-#endif
-#define MY_NFILE 1024 /* This is only used to save filenames */
-#endif
-
-/* #define EXT_IN_LIBNAME */
-/* #define FN_NO_CASE_SENCE */
-/* #define FN_UPPER_CASE TRUE */
-
-/* Io buffer size; Must be a power of 2 and a multiple of 512. May be
- smaller what the disk page size. This influences the speed of the
- isam btree library. eg to big to slow. */
-#define IO_SIZE 4096
-/* How much overhead does malloc have. The code often allocates
- something like 1024-MALLOC_OVERHEAD bytes */
-#ifdef SAFEMALLOC
-#define MALLOC_OVERHEAD (8+24+4)
-#else
-#define MALLOC_OVERHEAD 8
-#endif
- /* get memory in huncs */
-#define ONCE_ALLOC_INIT (uint) (4096-MALLOC_OVERHEAD)
- /* Typical record cash */
-#define RECORD_CACHE_SIZE (uint) (64*1024-MALLOC_OVERHEAD)
- /* Typical key cash */
-#define KEY_CACHE_SIZE (uint) (8*1024*1024-MALLOC_OVERHEAD)
-
- /* Some things that this system doesn't have */
-
-#define ONLY_OWN_DATABASES /* We are using only databases by monty */
-#define NO_PISAM /* Not needed anymore */
-#define NO_MISAM /* Not needed anymore */
-#define NO_HASH /* Not needed anymore */
-#ifdef __WIN__
-#define NO_DIR_LIBRARY /* Not standar dir-library */
-#define USE_MY_STAT_STRUCT /* For my_lib */
-#endif
-
-/* Some things that this system does have */
-
-#ifndef HAVE_ITOA
-#define USE_MY_ITOA /* There is no itoa */
-#endif
-
-/* Some defines of functions for portability */
-
-#ifndef HAVE_ATOD
-#define atod atof
-#endif
-#ifdef USE_MY_ATOF
-#define atof my_atof
-extern void init_my_atof(void);
-extern double my_atof(const char*);
-#endif
-#undef remove /* Crashes MySQL on SCO 5.0.0 */
-#ifndef __WIN__
-#define closesocket(A) close(A)
-#ifndef ulonglong2double
-#define ulonglong2double(A) ((double) (A))
-#define my_off_t2double(A) ((double) (A))
-#endif
-#endif
-
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-#define ulong_to_double(X) ((double) (ulong) (X))
-#define SET_STACK_SIZE(X) /* Not needed on real machines */
-
-#if !defined(HAVE_mit_thread) && !defined(HAVE_STRTOK_R)
-#define strtok_r(A,B,C) strtok((A),(B))
-#endif
-
-#ifdef HAVE_LINUXTHREADS
-/* #define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) */
-/* #define sigset(A,B) signal((A),(B)) */
-#endif
-
-/* Remove some things that mit_thread break or doesn't support */
-#if defined(HAVE_mit_thread) && defined(THREAD)
-#undef HAVE_PREAD
-#undef HAVE_REALPATH
-#undef HAVE_MLOCK
-#undef HAVE_TEMPNAM /* Use ours */
-#undef HAVE_PTHREAD_SETPRIO
-#undef HAVE_FTRUNCATE
-#undef HAVE_READLINK
-#endif
-
-/* This is from the old m-machine.h file */
-
-#if SIZEOF_LONG_LONG > 4
-#define HAVE_LONG_LONG 1
-#endif
-
-#if defined(HAVE_LONG_LONG) && !defined(LONGLONG_MIN)
-#define LONGLONG_MIN ((long long) 0x8000000000000000LL)
-#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL)
-#endif
-
-#if SIZEOF_LONG == 4
-#define INT_MIN32 (long) 0x80000000L
-#define INT_MAX32 (long) 0x7FFFFFFFL
-#define INT_MIN24 ((long) 0xff800000L)
-#define INT_MAX24 0x007fffffL
-#define INT_MIN16 ((short int) 0x8000)
-#define INT_MAX16 0x7FFF
-#define INT_MIN8 ((char) 0x80)
-#define INT_MAX8 ((char) 0x7F)
-#else /* Probably Alpha */
-#define INT_MIN32 ((long) (int) 0x80000000)
-#define INT_MAX32 ((long) (int) 0x7FFFFFFF)
-#define INT_MIN24 ((long) (int) 0xff800000)
-#define INT_MAX24 ((long) (int) 0x007fffff)
-#define INT_MIN16 ((short int) 0xffff8000)
-#define INT_MAX16 ((short int) 0x00007FFF)
-#endif
-
-/* From limits.h instead */
-#ifndef DBL_MIN
-#define DBL_MIN 4.94065645841246544e-324
-#define FLT_MIN ((float)1.40129846432481707e-45)
-#endif
-#ifndef DBL_MAX
-#define DBL_MAX 1.79769313486231470e+308
-#define FLT_MAX ((float)3.40282346638528860e+38)
-#endif
-
-/* Max size that must be added to a so that we know Size to make
- adressable obj. */
-typedef long my_ptrdiff_t;
-#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1))
-#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double))
-/* Size to make adressable obj. */
-#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A),sizeof(t)))
- /* Offset of filed f in structure t */
-#define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f)
-#define ADD_TO_PTR(ptr,size,type) (type) ((byte*) (ptr)+size)
-#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((byte*) (A) - (byte*) (B))
-
-#define NullS (char *) 0
-/* Nowdays we do not support MessyDos */
-#ifndef NEAR
-#define NEAR /* Who needs segments ? */
-#define FAR /* On a good machine */
-#define HUGE_PTR
-#endif
-#ifndef STDCALL
-#define STDCALL
-#endif
-
-/* Typdefs for easyier portability */
-
-#if defined(VOIDTYPE)
-typedef void *gptr; /* Generic pointer */
-#else
-typedef char *gptr; /* Generic pointer */
-#endif
-#ifndef HAVE_INT_8_16_32
-typedef char int8; /* Signed integer >= 8 bits */
-typedef short int16; /* Signed integer >= 16 bits */
-#endif
-#ifndef HAVE_UCHAR
-typedef unsigned char uchar; /* Short for unsigned char */
-#endif
-typedef unsigned char uint8; /* Short for unsigned integer >= 8 bits */
-typedef unsigned short uint16; /* Short for unsigned integer >= 16 bits */
-
-#if SIZEOF_INT == 4
-#ifndef HAVE_INT_8_16_32
-typedef int int32;
-#endif
-typedef unsigned int uint32; /* Short for unsigned integer >= 32 bits */
-#elif SIZEOF_LONG == 4
-#ifndef HAVE_INT_8_16_32
-typedef long int32;
-#endif
-typedef unsigned long uint32; /* Short for unsigned integer >= 32 bits */
-#else
-error "Neither int or long is of 4 bytes width"
-#endif
-
-#if !defined(HAVE_ULONG) && !defined(HAVE_LINUXTHREADS) && !defined(__USE_MISC)
-typedef unsigned long ulong; /* Short for unsigned long */
-#endif
-#ifndef longlong_defined
-#if defined(HAVE_LONG_LONG) && SIZEOF_LONG != 8
-typedef unsigned long long ulonglong; /* ulong or unsigned long long */
-typedef long long longlong;
-#else
-typedef unsigned long ulonglong; /* ulong or unsigned long long */
-typedef long longlong;
-#endif
-#endif
-
-#ifdef USE_RAID
-/* The following is done with a if to not get problems with pre-processors
- with late define evaluation */
-#if SIZEOF_OFF_T == 4
-#define SYSTEM_SIZEOF_OFF_T 4
-#else
-#define SYSTEM_SIZEOF_OFF_T 8
-#endif
-#undef SIZEOF_OFF_T
-#define SIZEOF_OFF_T 8
-#else
-#define SYSTEM_SIZEOF_OFF_T SIZEOF_OFF_T
-#endif /* USE_RAID */
-
-#if SIZEOF_OFF_T > 4
-typedef ulonglong my_off_t;
-#else
-typedef unsigned long my_off_t;
-#endif
-#define MY_FILEPOS_ERROR (~(my_off_t) 0)
-#ifndef __WIN__
-typedef off_t os_off_t;
-#endif
-
-typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */
-typedef short int15; /* Most effective integer 0 <= x <= 32767 */
-typedef char *my_string; /* String of characters */
-typedef unsigned long size_s; /* Size of strings (In string-funcs) */
-typedef int myf; /* Type of MyFlags in my_funcs */
-#ifndef byte_defined
-typedef char byte; /* Smallest addressable unit */
-#endif
-typedef char my_bool; /* Small bool */
-#if !defined(bool) && !defined(bool_defined) && (!defined(HAVE_BOOL) || !defined(__cplusplus))
-typedef char bool; /* Ordinary boolean values 0 1 */
-#endif
- /* Macros for converting *constants* to the right type */
-#define INT8(v) (int8) (v)
-#define INT16(v) (int16) (v)
-#define INT32(v) (int32) (v)
-#define MYF(v) (myf) (v)
-
-/* Defines to make it possible to prioritize register assignments. No
- longer needed with moder compilers */
-#ifndef USING_X
-#define reg1 register
-#define reg2 register
-#define reg3 register
-#define reg4 register
-#define reg5 register
-#define reg6 register
-#define reg7 register
-#define reg8 register
-#define reg9 register
-#define reg10 register
-#define reg11 register
-#define reg12 register
-#define reg13 register
-#define reg14 register
-#define reg15 register
-#define reg16 register
-#endif
-
-/* Defines for time function */
-#define SCALE_SEC 100
-#define SCALE_USEC 10000
-#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */
-#define MY_HOW_OFTEN_TO_WRITE 1000 /* How often we want info on screen */
-
-/*
-** Define-funktions for reading and storing in machine independent format
-** (low byte first)
-*/
-
-/* Optimized store functions for Intel x86 */
-#ifdef __i386__
-#define sint2korr(A) (*((int16 *) (A)))
-#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
- (((uint32) 255L << 24) | \
- (((uint32) (uchar) (A)[2]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[0])) : \
- (((uint32) (uchar) (A)[2]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[0])))
-#define sint4korr(A) (*((long *) (A)))
-#define uint2korr(A) (*((uint16 *) (A)))
-#define uint3korr(A) (long) (*((unsigned long *) (A)) & 0xFFFFFF)
-#define uint4korr(A) (*((unsigned long *) (A)))
-#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24)) +\
- (((ulonglong) ((uchar) (A)[4])) << 32))
-#define uint8korr(A) (*((ulonglong *) (A)))
-#define sint8korr(A) (*((longlong *) (A)))
-#define int2store(T,A) *((uint16*) (T))= (uint16) (A)
-#define int3store(T,A) { *(T)= (uchar) ((A));\
- *(T+1)=(uchar) (((uint) (A) >> 8));\
- *(T+2)=(uchar) (((A) >> 16)); }
-#define int4store(T,A) *((long *) (T))= (long) (A)
-#define int5store(T,A) { *(T)= (uchar)((A));\
- *((T)+1)=(uchar) (((A) >> 8));\
- *((T)+2)=(uchar) (((A) >> 16));\
- *((T)+3)=(uchar) (((A) >> 24)); \
- *((T)+4)=(uchar) (((A) >> 32)); }
-#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A)
-
-typedef union {
- double v;
- long m[2];
-} doubleget_union;
-#define doubleget(V,M) { ((doubleget_union *)&V)->m[0] = *((long*) M); \
- ((doubleget_union *)&V)->m[1] = *(((long*) M)+1); }
-#define doublestore(T,V) { *((long *) T) = ((doubleget_union *)&V)->m[0]; \
- *(((long *) T)+1) = ((doubleget_union *)&V)->m[1]; }
-#define float4get(V,M) { *((long *) &(V)) = *((long*) (M)); }
-#define float8get(V,M) doubleget((V),(M))
-#define float4store(V,M) memcpy((byte*) V,(byte*) (&M),sizeof(float))
-#define float8store(V,M) doublestore((V),(M))
-#endif /* __i386__ */
-
-#ifndef sint2korr
-#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\
- ((int16) ((int16) (A)[1]) << 8))
-#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
- (((uint32) 255L << 24) | \
- (((uint32) (uchar) (A)[2]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[0])) : \
- (((uint32) (uchar) (A)[2]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[0])))
-#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\
- (((int32) ((uchar) (A)[1]) << 8)) +\
- (((int32) ((uchar) (A)[2]) << 16)) +\
- (((int32) ((int16) (A)[3]) << 24)))
-#define sint8korr(A) (longlong) uint8korr(A)
-#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\
- ((uint16) ((uchar) (A)[1]) << 8))
-#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16))
-#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24))
-#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24)) +\
- (((ulonglong) ((uchar) (A)[4])) << 32))
-#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24)) +\
- (((ulonglong) (((uint32) ((uchar) (A)[4])) +\
- (((uint32) ((uchar) (A)[5])) << 8) +\
- (((uint32) ((uchar) (A)[6])) << 16) +\
- (((uint32) ((uchar) (A)[7])) << 24))) <<\
- 32))
-#define int2store(T,A) { uint def_temp= (uint) (A) ;\
- *((uchar*) (T))= (uchar)(def_temp); \
- *((uchar*) (T+1))=(uchar)((def_temp >> 8)); }
-#define int3store(T,A) { /*lint -save -e734 */\
- *((T))=(char) ((A));\
- *((T)+1)=(char) (((A) >> 8));\
- *((T)+2)=(char) (((A) >> 16)); \
- /*lint -restore */}
-#define int4store(T,A) { *(T)=(char) ((A));\
- *((T)+1)=(char) (((A) >> 8));\
- *((T)+2)=(char) (((A) >> 16));\
- *((T)+3)=(char) (((A) >> 24)); }
-#define int5store(T,A) { *(T)=((A));\
- *((T)+1)=(((A) >> 8));\
- *((T)+2)=(((A) >> 16));\
- *((T)+3)=(((A) >> 24)); \
- *((T)+4)=(((A) >> 32)); }
-#define int8store(T,A) { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \
- int4store((T),def_temp); \
- int4store((T+4),def_temp2); \
- }
-#ifdef WORDS_BIGENDIAN
-#define float4store(T,A) { *(T)= ((byte *) &A)[3];\
- *((T)+1)=(char) ((byte *) &A)[2];\
- *((T)+2)=(char) ((byte *) &A)[1];\
- *((T)+3)=(char) ((byte *) &A)[0]; }
-
-#define float4get(V,M) { float def_temp;\
- ((byte*) &def_temp)[0]=(M)[3];\
- ((byte*) &def_temp)[1]=(M)[2];\
- ((byte*) &def_temp)[2]=(M)[1];\
- ((byte*) &def_temp)[3]=(M)[0];\
- (V)=def_temp; }
-#define float8store(T,V) { *(T)= ((byte *) &V)[7];\
- *((T)+1)=(char) ((byte *) &V)[6];\
- *((T)+2)=(char) ((byte *) &V)[5];\
- *((T)+3)=(char) ((byte *) &V)[4];\
- *((T)+4)=(char) ((byte *) &V)[3];\
- *((T)+5)=(char) ((byte *) &V)[2];\
- *((T)+6)=(char) ((byte *) &V)[1];\
- *((T)+7)=(char) ((byte *) &V)[0]; }
-
-#define float8get(V,M) { double def_temp;\
- ((byte*) &def_temp)[0]=(M)[7];\
- ((byte*) &def_temp)[1]=(M)[6];\
- ((byte*) &def_temp)[2]=(M)[5];\
- ((byte*) &def_temp)[3]=(M)[4];\
- ((byte*) &def_temp)[4]=(M)[3];\
- ((byte*) &def_temp)[5]=(M)[2];\
- ((byte*) &def_temp)[6]=(M)[1];\
- ((byte*) &def_temp)[7]=(M)[0];\
- (V) = def_temp; }
-#else
-#define float4get(V,M) memcpy_fixed((byte*) &V,(byte*) (M),sizeof(float))
-#define float4store(V,M) memcpy_fixed((byte*) V,(byte*) (&M),sizeof(float))
-
-#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
-#define doublestore(T,V) { *(T)= ((byte *) &V)[4];\
- *((T)+1)=(char) ((byte *) &V)[5];\
- *((T)+2)=(char) ((byte *) &V)[6];\
- *((T)+3)=(char) ((byte *) &V)[7];\
- *((T)+4)=(char) ((byte *) &V)[0];\
- *((T)+5)=(char) ((byte *) &V)[1];\
- *((T)+6)=(char) ((byte *) &V)[2];\
- *((T)+7)=(char) ((byte *) &V)[3]; }
-#define doubleget(V,M) { double def_temp;\
- ((byte*) &def_temp)[0]=(M)[4];\
- ((byte*) &def_temp)[1]=(M)[5];\
- ((byte*) &def_temp)[2]=(M)[6];\
- ((byte*) &def_temp)[3]=(M)[7];\
- ((byte*) &def_temp)[4]=(M)[0];\
- ((byte*) &def_temp)[5]=(M)[1];\
- ((byte*) &def_temp)[6]=(M)[2];\
- ((byte*) &def_temp)[7]=(M)[3];\
- (V) = def_temp; }
-#endif /* __FLOAT_WORD_ORDER */
-
-#define float8get(V,M) doubleget((V),(M))
-#define float8store(V,M) doublestore((V),(M))
-#endif /* WORDS_BIGENDIAN */
-
-#endif /* sint2korr */
-
-/* Define-funktions for reading and storing in machine format from/to
- short/long to/from some place in memory V should be a (not
- register) variable, M is a pointer to byte */
-
-#ifdef WORDS_BIGENDIAN
-
-#define ushortget(V,M) { V = (uint16) (((uint16) ((uchar) (M)[1]))+\
- ((uint16) ((uint16) (M)[0]) << 8)); }
-#define shortget(V,M) { V = (short) (((short) ((uchar) (M)[1]))+\
- ((short) ((short) (M)[0]) << 8)); }
-#define longget(V,M) { int32 def_temp;\
- ((byte*) &def_temp)[0]=(M)[0];\
- ((byte*) &def_temp)[1]=(M)[1];\
- ((byte*) &def_temp)[2]=(M)[2];\
- ((byte*) &def_temp)[3]=(M)[3];\
- (V)=def_temp; }
-#define ulongget(V,M) { uint32 def_temp;\
- ((byte*) &def_temp)[0]=(M)[0];\
- ((byte*) &def_temp)[1]=(M)[1];\
- ((byte*) &def_temp)[2]=(M)[2];\
- ((byte*) &def_temp)[3]=(M)[3];\
- (V)=def_temp; }
-#define shortstore(T,A) { uint def_temp=(uint) (A) ;\
- *(T+1)=(char)(def_temp); \
- *(T+0)=(char)(def_temp >> 8); }
-#define longstore(T,A) { *((T)+3)=((A));\
- *((T)+2)=(((A) >> 8));\
- *((T)+1)=(((A) >> 16));\
- *((T)+0)=(((A) >> 24)); }
-
-#define doubleget(V,M) memcpy((byte*) &V,(byte*) (M),sizeof(double))
-#define doublestore(T,V) memcpy((byte*) (T),(byte*) &V,sizeof(double))
-#define longlongget(V,M) memcpy((byte*) &V,(byte*) (M),sizeof(ulonglong))
-#define longlongstore(T,V) memcpy((byte*) (T),(byte*) &V,sizeof(ulonglong))
-
-#else
-
-#define ushortget(V,M) { V = uint2korr(M); }
-#define shortget(V,M) { V = sint2korr(M); }
-#define longget(V,M) { V = sint4korr(M); }
-#define ulongget(V,M) { V = uint4korr(M); }
-#define shortstore(T,V) int2store(T,V)
-#define longstore(T,V) int4store(T,V)
-#ifndef doubleget
-#define doubleget(V,M) memcpy_fixed((byte*) &V,(byte*) (M),sizeof(double))
-#define doublestore(T,V) memcpy_fixed((byte*) (T),(byte*) &V,sizeof(double))
-#endif /* doubleget */
-#define longlongget(V,M) memcpy_fixed((byte*) &V,(byte*) (M),sizeof(ulonglong))
-#define longlongstore(T,V) memcpy_fixed((byte*) (T),(byte*) &V,sizeof(ulonglong))
-
-#endif /* WORDS_BIGENDIAN */
-
-/* sprintf does not always return the number of bytes :- */
-#ifdef SPRINTF_RETURNS_INT
-#define my_sprintf(buff,args) sprintf args
-#else
-#ifdef SPRINTF_RETURNS_PTR
-#define my_sprintf(buff,args) ((int)(sprintf args - buff))
-#else
-#define my_sprintf(buff,args) sprintf args,strlen(buff)
-#endif
-#endif
-
-#ifndef THREAD
-#define thread_safe_increment(V,L) (V)++
-#define thread_safe_add(V,C,L) (V)+=(C)
-#define thread_safe_sub(V,C,L) (V)-=(C)
-#define statistic_increment(V,L) (V)++
-#define statistic_add(V,C,L) (V)+=(C)
-#endif
-
-#endif /* _global_h */
diff --git a/ext/mysql/libmysql/int2str.c b/ext/mysql/libmysql/int2str.c
deleted file mode 100644
index bb12b00cdc..0000000000
--- a/ext/mysql/libmysql/int2str.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Defines: int2str(), itoa(), ltoa()
-
- int2str(dst, radix, val)
- converts the (long) integer "val" to character form and moves it to
- the destination string "dst" followed by a terminating NUL. The
- result is normally a pointer to this NUL character, but if the radix
- is dud the result will be NullS and nothing will be changed.
-
- If radix is -2..-36, val is taken to be SIGNED.
- If radix is 2.. 36, val is taken to be UNSIGNED.
- That is, val is signed if and only if radix is. You will normally
- use radix -10 only through itoa and ltoa, for radix 2, 8, or 16
- unsigned is what you generally want.
-
- _dig_vec is public just in case someone has a use for it.
- The definitions of itoa and ltoa are actually macros in m_string.h,
- but this is where the code is.
-
- Note: The standard itoa() returns a pointer to the argument, when int2str
- returns the pointer to the end-null.
- itoa assumes that 10 -base numbers are allways signed and other arn't.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-char NEAR _dig_vec[] =
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-
-char *int2str(register long int val, register char *dst, register int radix)
-{
- char buffer[65];
- register char *p;
- long int new_val;
-
- if (radix < 0) {
- if (radix < -36 || radix > -2) return NullS;
- if (val < 0) {
- *dst++ = '-';
- val = -val;
- }
- radix = -radix;
- } else {
- if (radix > 36 || radix < 2) return NullS;
- }
- /* The slightly contorted code which follows is due to the
- fact that few machines directly support unsigned long / and %.
- Certainly the VAX C compiler generates a subroutine call. In
- the interests of efficiency (hollow laugh) I let this happen
- for the first digit only; after that "val" will be in range so
- that signed integer division will do. Sorry 'bout that.
- CHECK THE CODE PRODUCED BY YOUR C COMPILER. The first % and /
- should be unsigned, the second % and / signed, but C compilers
- tend to be extraordinarily sensitive to minor details of style.
- This works on a VAX, that's all I claim for it.
- */
- p = &buffer[sizeof(buffer)-1];
- *p = '\0';
- new_val=(ulong) val / (ulong) radix;
- *--p = _dig_vec[(uchar) ((ulong) val- (ulong) new_val*(ulong) radix)];
- val = new_val;
-#ifdef HAVE_LDIV
- while (val != 0)
- {
- ldiv_t res;
- res=ldiv(val,radix);
- *--p = _dig_vec[res.rem];
- val= res.quot;
- }
-#else
- while (val != 0)
- {
- new_val=val/radix;
- *--p = _dig_vec[(uchar) (val-new_val*radix)];
- val= new_val;
- }
-#endif
- while ((*dst++ = *p++) != 0) ;
- return dst-1;
-}
-
-
-/*
- This is a faster version of the above optimized for the normal case of
- radix 10 / -10
-*/
-
-char *int10_to_str(long int val,char *dst,int radix)
-{
- char buffer[65];
- register char *p;
- long int new_val;
-
- if (radix < 0) /* -10 */
- {
- if (val < 0)
- {
- *dst++ = '-';
- val = -val;
- }
- }
-
- p = &buffer[sizeof(buffer)-1];
- *p = '\0';
- new_val= (long) ((unsigned long int) val / 10);
- *--p = '0'+ (char) ((unsigned long int) val - (unsigned long) new_val * 10);
- val = new_val;
-
- while (val != 0)
- {
- new_val=val/10;
- *--p = '0' + (char) (val-new_val*10);
- val= new_val;
- }
- while ((*dst++ = *p++) != 0) ;
- return dst-1;
-}
-
-
-#ifdef USE_MY_ITOA
-
- /* Change to less general itoa interface */
-
-char *my_itoa(int val, char *dst, int radix)
-{
- VOID(int2str((long) val,dst,(radix == 10 ? -10 : radix)));
- return dst;
-}
-
-char *my_ltoa(long int val, char *dst, int radix)
-{
- VOID(int2str((long) val,dst,(radix == 10 ? -10 : radix)));
- return dst;
-}
-
-#endif
diff --git a/ext/mysql/libmysql/is_prefix.c b/ext/mysql/libmysql/is_prefix.c
deleted file mode 100644
index c0ed472103..0000000000
--- a/ext/mysql/libmysql/is_prefix.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : is_prefix.c
- Author : Michael Widenius
- Defines: is_prefix()
-
- is_prefix(s, t) returns 1 if s starts with t.
- A empty t is allways a prefix.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-int is_prefix(register const char *s, register const char *t)
-{
- while (*t)
- if (*s++ != *t++) return 0;
- return 1; /* WRONG */
-}
diff --git a/ext/mysql/libmysql/libmysql.c b/ext/mysql/libmysql/libmysql.c
deleted file mode 100644
index 0ffaabc852..0000000000
--- a/ext/mysql/libmysql/libmysql.c
+++ /dev/null
@@ -1,2566 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#define DONT_USE_RAID
-#include <global.h>
-#if defined(__WIN__) || defined(_WIN32) || defined(_WIN64)
-#include <winsock.h>
-#include <odbcinst.h>
-#endif
-#include <my_sys.h>
-#include <mysys_err.h>
-#include <m_string.h>
-#include <m_ctype.h>
-#include "mysql.h"
-#include "mysql_version.h"
-#include "mysqld_error.h"
-#include "errmsg.h"
-#include <violite.h>
-#include <sys/stat.h>
-#include <signal.h>
-#include <time.h>
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#if !defined(MSDOS) && !defined(__WIN__)
-#include <sys/socket.h>
-#include <netinet/in.h>
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <netdb.h>
-#ifdef HAVE_SELECT_H
-# include <select.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#endif
-#ifdef HAVE_SYS_UN_H
-# include <sys/un.h>
-#endif
-#if defined(THREAD) && !defined(__WIN__)
-#include <my_pthread.h> /* because of signal() */
-#endif
-#ifndef INADDR_NONE
-#define INADDR_NONE -1
-#endif
-
-static my_bool mysql_client_init=0;
-uint mysql_port=0;
-my_string mysql_unix_port=0;
-
-#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES | CLIENT_TRANSACTIONS)
-
-#ifdef __WIN__
-#define CONNECT_TIMEOUT 20
-#else
-#define CONNECT_TIMEOUT 0
-#endif
-
-#if defined(MSDOS) || defined(__WIN__)
-#define ERRNO WSAGetLastError()
-#define perror(A)
-#else
-#include <errno.h>
-#define ERRNO errno
-#define SOCKET_ERROR -1
-#define closesocket(A) close(A)
-#endif
-
-static void mysql_once_init(void);
-static MYSQL_DATA *read_rows (MYSQL *mysql,MYSQL_FIELD *fields,
- uint field_count);
-static int read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row,
- ulong *lengths);
-static void end_server(MYSQL *mysql);
-static void read_user_name(char *name);
-static void append_wild(char *to,char *end,const char *wild);
-static my_bool mysql_reconnect(MYSQL *mysql);
-static int send_file_to_server(MYSQL *mysql,const char *filename);
-static sig_handler pipe_sig_handler(int sig);
-static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to,
- const char *from, ulong length);
-
-/*
- Let the user specify that we don't want SIGPIPE; This doesn't however work
- with threaded applications as we can have multiple read in progress.
-*/
-
-#if !defined(__WIN__) && defined(SIGPIPE) && !defined(THREAD)
-#define init_sigpipe_variables sig_return old_signal_handler=(sig_return) 0;
-#define set_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) old_signal_handler=signal(SIGPIPE,pipe_sig_handler)
-#define reset_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) signal(SIGPIPE,old_signal_handler);
-#else
-#define init_sigpipe_variables
-#define set_sigpipe(mysql)
-#define reset_sigpipe(mysql)
-#endif
-
-/****************************************************************************
-* A modified version of connect(). connect2() allows you to specify
-* a timeout value, in seconds, that we should wait until we
-* derermine we can't connect to a particular host. If timeout is 0,
-* connect2() will behave exactly like connect().
-*
-* Base version coded by Steve Bernacki, Jr. <steve@navinet.net>
-*****************************************************************************/
-
-static int connect2(my_socket s, const struct sockaddr *name, uint namelen,
- uint timeout)
-{
-#if defined(__WIN__)
- return connect(s, (struct sockaddr*) name, namelen);
-#else
- int flags, res, s_err;
- SOCKOPT_OPTLEN_TYPE s_err_size = sizeof(uint);
- fd_set sfds;
- struct timeval tv;
- time_t start_time, now_time;
-
- /* If they passed us a timeout of zero, we should behave
- * exactly like the normal connect() call does.
- */
-
- if (timeout == 0)
- return connect(s, (struct sockaddr*) name, namelen);
-
- flags = fcntl(s, F_GETFL, 0); /* Set socket to not block */
-#ifdef O_NONBLOCK
- fcntl(s, F_SETFL, flags | O_NONBLOCK); /* and save the flags.. */
-#endif
-
- res = connect(s, (struct sockaddr*) name, namelen);
- s_err = errno; /* Save the error... */
- fcntl(s, F_SETFL, flags);
- if ((res != 0) && (s_err != EINPROGRESS))
- {
- errno = s_err; /* Restore it */
- return(-1);
- }
- if (res == 0) /* Connected quickly! */
- return(0);
-
- /* Otherwise, our connection is "in progress." We can use
- * the select() call to wait up to a specified period of time
- * for the connection to suceed. If select() returns 0
- * (after waiting howevermany seconds), our socket never became
- * writable (host is probably unreachable.) Otherwise, if
- * select() returns 1, then one of two conditions exist:
- *
- * 1. An error occured. We use getsockopt() to check for this.
- * 2. The connection was set up sucessfully: getsockopt() will
- * return 0 as an error.
- *
- * Thanks goes to Andrew Gierth <andrew@erlenstar.demon.co.uk>
- * who posted this method of timing out a connect() in
- * comp.unix.programmer on August 15th, 1997.
- */
-
- FD_ZERO(&sfds);
- FD_SET(s, &sfds);
- /*
- * select could be interrupted by a signal, and if it is,
- * the timeout should be adjusted and the select restarted
- * to work around OSes that don't restart select and
- * implementations of select that don't adjust tv upon
- * failure to reflect the time remaining
- */
- start_time = time(NULL);
- for (;;)
- {
- tv.tv_sec = (long) timeout;
- tv.tv_usec = 0;
- if ((res = select(s+1, NULL, &sfds, NULL, &tv)) >= 0)
- break;
- now_time=time(NULL);
- timeout-= (uint) (now_time - start_time);
- if (errno != EINTR || (int) timeout <= 0)
- return -1;
- }
-
- /* select() returned something more interesting than zero, let's
- * see if we have any errors. If the next two statements pass,
- * we've got an open socket!
- */
-
- s_err=0;
- if (getsockopt(s, SOL_SOCKET, SO_ERROR, (char*) &s_err, &s_err_size) != 0)
- return(-1);
-
- if (s_err)
- { /* getsockopt could succeed */
- errno = s_err;
- return(-1); /* but return an error... */
- }
- return(0); /* It's all good! */
-#endif
-}
-
-/*
-** Create a named pipe connection
-*/
-
-#ifdef __WIN__
-
-HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
- char **arg_unix_socket)
-{
- HANDLE hPipe=INVALID_HANDLE_VALUE;
- char szPipeName [ 257 ];
- DWORD dwMode;
- int i;
- my_bool testing_named_pipes=0;
- char *host= *arg_host, *unix_socket= *arg_unix_socket;
-
- if ( ! unix_socket || (unix_socket)[0] == 0x00)
- unix_socket = mysql_unix_port;
- if (!host || !strcmp(host,LOCAL_HOST))
- host=LOCAL_HOST_NAMEDPIPE;
-
- sprintf( szPipeName, "\\\\%s\\pipe\\%s", host, unix_socket);
- DBUG_PRINT("info",("Server name: '%s'. Named Pipe: %s",
- host, unix_socket));
-
- for (i=0 ; i < 100 ; i++) /* Don't retry forever */
- {
- if ((hPipe = CreateFile(szPipeName,
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL )) != INVALID_HANDLE_VALUE)
- break;
- if (GetLastError() != ERROR_PIPE_BUSY)
- {
- net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
- sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
- (ulong) GetLastError());
- return INVALID_HANDLE_VALUE;
- }
- /* wait for for an other instance */
- if (! WaitNamedPipe(szPipeName, connect_timeout*1000) )
- {
- net->last_errno=CR_NAMEDPIPEWAIT_ERROR;
- sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
- (ulong) GetLastError());
- return INVALID_HANDLE_VALUE;
- }
- }
- if (hPipe == INVALID_HANDLE_VALUE)
- {
- net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
- sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
- (ulong) GetLastError());
- return INVALID_HANDLE_VALUE;
- }
- dwMode = PIPE_READMODE_BYTE | PIPE_WAIT;
- if ( !SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL) )
- {
- CloseHandle( hPipe );
- net->last_errno=CR_NAMEDPIPESETSTATE_ERROR;
- sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
- (ulong) GetLastError());
- return INVALID_HANDLE_VALUE;
- }
- *arg_host=host ; *arg_unix_socket=unix_socket; /* connect arg */
- return (hPipe);
-}
-#endif
-
-
-/*****************************************************************************
-** read a packet from server. Give error message if socket was down
-** or packet is an error message
-*****************************************************************************/
-
-static uint
-net_safe_read(MYSQL *mysql)
-{
- NET *net= &mysql->net;
- uint len=0;
- init_sigpipe_variables
-
- /* Don't give sigpipe errors if the client doesn't want them */
- set_sigpipe(mysql);
- if (net->vio != 0)
- len=my_net_read(net);
- reset_sigpipe(mysql);
-
- if (len == packet_error || len == 0)
- {
- DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
- vio_description(net->vio),len));
- end_server(mysql);
- net->last_errno=(net->last_errno == ER_NET_PACKET_TOO_LARGE ?
- CR_NET_PACKET_TOO_LARGE:
- CR_SERVER_LOST);
- strmov(net->last_error,ER(net->last_errno));
- return(packet_error);
- }
- if (net->read_pos[0] == 255)
- {
- if (len > 3)
- {
- char *pos=(char*) net->read_pos+1;
- if (mysql->protocol_version > 9)
- { /* New client protocol */
- net->last_errno=uint2korr(pos);
- pos+=2;
- len-=2;
- }
- else
- {
- net->last_errno=CR_UNKNOWN_ERROR;
- len--;
- }
- (void) strmake(net->last_error,(char*) pos,
- min(len,sizeof(net->last_error)-1));
- }
- else
- {
- net->last_errno=CR_UNKNOWN_ERROR;
- (void) strmov(net->last_error,ER(net->last_errno));
- }
- DBUG_PRINT("error",("Got error: %d (%s)", net->last_errno,
- net->last_error));
- return(packet_error);
- }
- return len;
-}
-
-
-/* Get the length of next field. Change parameter to point at fieldstart */
-static ulong
-net_field_length(uchar **packet)
-{
- reg1 uchar *pos= *packet;
- if (*pos < 251)
- {
- (*packet)++;
- return (ulong) *pos;
- }
- if (*pos == 251)
- {
- (*packet)++;
- return NULL_LENGTH;
- }
- if (*pos == 252)
- {
- (*packet)+=3;
- return (ulong) uint2korr(pos+1);
- }
- if (*pos == 253)
- {
- (*packet)+=4;
- return (ulong) uint3korr(pos+1);
- }
- (*packet)+=9; /* Must be 254 when here */
- return (ulong) uint4korr(pos+1);
-}
-
-/* Same as above, but returns ulonglong values */
-
-static my_ulonglong
-net_field_length_ll(uchar **packet)
-{
- reg1 uchar *pos= *packet;
- if (*pos < 251)
- {
- (*packet)++;
- return (my_ulonglong) *pos;
- }
- if (*pos == 251)
- {
- (*packet)++;
- return (my_ulonglong) NULL_LENGTH;
- }
- if (*pos == 252)
- {
- (*packet)+=3;
- return (my_ulonglong) uint2korr(pos+1);
- }
- if (*pos == 253)
- {
- (*packet)+=4;
- return (my_ulonglong) uint3korr(pos+1);
- }
- (*packet)+=9; /* Must be 254 when here */
-#ifdef NO_CLIENT_LONGLONG
- return (my_ulonglong) uint4korr(pos+1);
-#else
- return (my_ulonglong) uint8korr(pos+1);
-#endif
-}
-
-
-static void free_rows(MYSQL_DATA *cur)
-{
- if (cur)
- {
- free_root(&cur->alloc,MYF(0));
- my_free((gptr) cur,MYF(0));
- }
-}
-
-
-static int
-simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg,
- uint length, my_bool skipp_check)
-{
- NET *net= &mysql->net;
- int result= -1;
- init_sigpipe_variables
-
- /* Don't give sigpipe errors if the client doesn't want them */
- set_sigpipe(mysql);
- if (mysql->net.vio == 0)
- { /* Do reconnect if possible */
- if (mysql_reconnect(mysql))
- {
- net->last_errno=CR_SERVER_GONE_ERROR;
- strmov(net->last_error,ER(net->last_errno));
- goto end;
- }
- }
- if (mysql->status != MYSQL_STATUS_READY)
- {
- strmov(net->last_error,ER(mysql->net.last_errno=CR_COMMANDS_OUT_OF_SYNC));
- goto end;
- }
-
- mysql->net.last_error[0]=0;
- mysql->net.last_errno=0;
- mysql->info=0;
- mysql->affected_rows= ~(my_ulonglong) 0;
- net_clear(net); /* Clear receive buffer */
- if (!arg)
- arg="";
-
- if (net_write_command(net,(uchar) command,arg,
- length ? length : (ulong) strlen(arg)))
- {
- DBUG_PRINT("error",("Can't send command to server. Error: %d",errno));
- end_server(mysql);
- if (mysql_reconnect(mysql) ||
- net_write_command(net,(uchar) command,arg,
- length ? length : (ulong) strlen(arg)))
- {
- net->last_errno=CR_SERVER_GONE_ERROR;
- strmov(net->last_error,ER(net->last_errno));
- goto end;
- }
- }
- result=0;
- if (!skipp_check)
- result= ((mysql->packet_length=net_safe_read(mysql)) == packet_error ?
- -1 : 0);
- end:
- reset_sigpipe(mysql);
- return result;
-}
-
-
-static void free_old_query(MYSQL *mysql)
-{
- DBUG_ENTER("free_old_query");
- if (mysql->fields)
- free_root(&mysql->field_alloc,MYF(0));
- init_alloc_root(&mysql->field_alloc,8192,0); /* Assume rowlength < 8192 */
- mysql->fields=0;
- mysql->field_count=0; /* For API */
- DBUG_VOID_RETURN;
-}
-
-#if defined(HAVE_GETPWUID) && defined(NO_GETPWUID_DECL)
-struct passwd *getpwuid(uid_t);
-char* getlogin(void);
-#endif
-
-#if !defined(MSDOS) && ! defined(VMS) && !defined(__WIN__)
-static void read_user_name(char *name)
-{
- DBUG_ENTER("read_user_name");
- if (geteuid() == 0)
- (void) strmov(name,"root"); /* allow use of surun */
- else
- {
-#ifdef HAVE_GETPWUID
- struct passwd *skr;
- const char *str;
- if ((str=getlogin()) == NULL)
- {
- if ((skr=getpwuid(geteuid())) != NULL)
- str=skr->pw_name;
- else if (!(str=getenv("USER")) && !(str=getenv("LOGNAME")) &&
- !(str=getenv("LOGIN")))
- str="UNKNOWN_USER";
- }
- (void) strmake(name,str,USERNAME_LENGTH);
-#elif HAVE_CUSERID
- (void) cuserid(name);
-#else
- strmov(name,"UNKNOWN_USER");
-#endif
- }
- DBUG_VOID_RETURN;
-}
-
-#else /* If MSDOS || VMS */
-
-static void read_user_name(char *name)
-{
- char *str=getenv("USER"); /* ODBC will send user variable */
- strmake(name,str ? str : "ODBC", USERNAME_LENGTH);
-}
-
-#endif
-
-#ifdef __WIN__
-static my_bool is_NT(void)
-{
- char *os=getenv("OS");
- return (os && !strcmp(os, "Windows_NT")) ? 1 : 0;
-}
-#endif
-
-/*
-** Expand wildcard to a sql string
-*/
-
-static void
-append_wild(char *to, char *end, const char *wild)
-{
- end-=5; /* Some extra */
- if (wild && wild[0])
- {
- to=strmov(to," like '");
- while (*wild && to < end)
- {
- if (*wild == '\\' || *wild == '\'')
- *to++='\\';
- *to++= *wild++;
- }
- if (*wild) /* Too small buffer */
- *to++='%'; /* Nicer this way */
- to[0]='\'';
- to[1]=0;
- }
-}
-
-
-
-/**************************************************************************
-** Init debugging if MYSQL_DEBUG environment variable is found
-**************************************************************************/
-
-void STDCALL
-mysql_debug(const char *debug __attribute__((unused)))
-{
-#ifndef DBUG_OFF
- char *env;
- if (_db_on_)
- return; /* Already using debugging */
- if (debug)
- {
- DEBUGGER_ON;
- DBUG_PUSH(debug);
- }
- else if ((env = getenv("MYSQL_DEBUG")))
- {
- DEBUGGER_ON;
- DBUG_PUSH(env);
-#if !defined(_WINVER) && !defined(WINVER)
- puts("\n-------------------------------------------------------");
- puts("MYSQL_DEBUG found. libmysql started with the following:");
- puts(env);
- puts("-------------------------------------------------------\n");
-#else
- {
- char buff[80];
- strmov(strmov(buff,"libmysql: "),env);
- MessageBox((HWND) 0,"Debugging variable MYSQL_DEBUG used",buff,MB_OK);
- }
-#endif
- }
-#endif
-}
-
-
-/**************************************************************************
-** Close the server connection if we get a SIGPIPE
- ARGSUSED
-**************************************************************************/
-
-static sig_handler
-pipe_sig_handler(int sig __attribute__((unused)))
-{
- DBUG_PRINT("info",("Hit by signal %d",sig));
-#ifdef DONT_REMEMBER_SIGNAL
- (void) signal(SIGPIPE,pipe_sig_handler);
-#endif
-}
-
-
-/**************************************************************************
-** Shut down connection
-**************************************************************************/
-
-static void
-end_server(MYSQL *mysql)
-{
- DBUG_ENTER("end_server");
- if (mysql->net.vio != 0)
- {
- init_sigpipe_variables
- DBUG_PRINT("info",("Net: %s", vio_description(mysql->net.vio)));
- set_sigpipe(mysql);
- vio_delete(mysql->net.vio);
- reset_sigpipe(mysql);
- mysql->net.vio= 0; /* Marker */
- }
- net_end(&mysql->net);
- free_old_query(mysql);
- DBUG_VOID_RETURN;
-}
-
-
-void STDCALL
-mysql_free_result(MYSQL_RES *result)
-{
- DBUG_ENTER("mysql_free_result");
- DBUG_PRINT("enter",("mysql_res: %lx",result));
- if (result)
- {
- if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT)
- {
- DBUG_PRINT("warning",("Not all rows in set were read; Ignoring rows"));
- for (;;)
- {
- uint pkt_len;
- if ((pkt_len=(uint) net_safe_read(result->handle)) == packet_error)
- break;
- if (pkt_len == 1 && result->handle->net.read_pos[0] == 254)
- break; /* End of data */
- }
- result->handle->status=MYSQL_STATUS_READY;
- }
- free_rows(result->data);
- if (result->fields)
- free_root(&result->field_alloc,MYF(0));
- if (result->row)
- my_free((gptr) result->row,MYF(0));
- my_free((gptr) result,MYF(0));
- }
- DBUG_VOID_RETURN;
-}
-
-
-/****************************************************************************
-** Get options from my.cnf
-****************************************************************************/
-
-static const char *default_options[]=
-{"port","socket","compress","password","pipe", "timeout", "user",
- "init-command", "host", "database", "debug", "return-found-rows",
- "ssl-key" ,"ssl-cert" ,"ssl-ca" ,"ssl-capath",
- "character-set-dir", "default-character-set", "interactive-timeout",
- "connect_timeout",
- NullS
-};
-
-static TYPELIB option_types={array_elements(default_options)-1,
- "options",default_options};
-
-static void mysql_read_default_options(struct st_mysql_options *options,
- const char *filename,const char *group)
-{
- int argc;
- char *argv_buff[1],**argv;
- const char *groups[3];
- DBUG_ENTER("mysql_read_default_options");
- DBUG_PRINT("enter",("file: %s group: %s",filename,group ? group :"NULL"));
-
- argc=1; argv=argv_buff; argv_buff[0]= (char*) "client";
- groups[0]= (char*) "client"; groups[1]= (char*) group; groups[2]=0;
-
- load_defaults(filename, groups, &argc, &argv);
- if (argc != 1) /* If some default option */
- {
- char **option=argv;
- while (*++option)
- {
- /* DBUG_PRINT("info",("option: %s",option[0])); */
- if (option[0][0] == '-' && option[0][1] == '-')
- {
- char *end=strcend(*option,'=');
- char *opt_arg=0;
- if (*end)
- {
- opt_arg=end+1;
- *end=0; /* Remove '=' */
- }
- switch (find_type(*option+2,&option_types,2)) {
- case 1: /* port */
- if (opt_arg)
- options->port=atoi(opt_arg);
- break;
- case 2: /* socket */
- if (opt_arg)
- {
- my_free(options->unix_socket,MYF(MY_ALLOW_ZERO_PTR));
- options->unix_socket=my_strdup(opt_arg,MYF(MY_WME));
- }
- break;
- case 3: /* compress */
- options->compress=1;
- break;
- case 4: /* password */
- if (opt_arg)
- {
- my_free(options->password,MYF(MY_ALLOW_ZERO_PTR));
- options->password=my_strdup(opt_arg,MYF(MY_WME));
- }
- break;
- case 5: /* pipe */
- options->named_pipe=1; /* Force named pipe */
- break;
- case 20: /* connect_timeout */
- case 6: /* timeout */
- if (opt_arg)
- options->connect_timeout=atoi(opt_arg);
- break;
- case 7: /* user */
- if (opt_arg)
- {
- my_free(options->user,MYF(MY_ALLOW_ZERO_PTR));
- options->user=my_strdup(opt_arg,MYF(MY_WME));
- }
- break;
- case 8: /* init-command */
- if (opt_arg)
- {
- my_free(options->init_command,MYF(MY_ALLOW_ZERO_PTR));
- options->init_command=my_strdup(opt_arg,MYF(MY_WME));
- }
- break;
- case 9: /* host */
- if (opt_arg)
- {
- my_free(options->host,MYF(MY_ALLOW_ZERO_PTR));
- options->host=my_strdup(opt_arg,MYF(MY_WME));
- }
- break;
- case 10: /* database */
- if (opt_arg)
- {
- my_free(options->db,MYF(MY_ALLOW_ZERO_PTR));
- options->db=my_strdup(opt_arg,MYF(MY_WME));
- }
- break;
- case 11: /* debug */
- mysql_debug(opt_arg ? opt_arg : "d:t:o,/tmp/client.trace");
- break;
- case 12: /* return-found-rows */
- options->client_flag|=CLIENT_FOUND_ROWS;
- break;
-#ifdef HAVE_OPENSSL
- case 13: /* ssl_key */
- my_free(options->ssl_key, MYF(MY_ALLOW_ZERO_PTR));
- options->ssl_key = my_strdup(opt_arg, MYF(MY_WME));
- break;
- case 14: /* ssl_cert */
- my_free(options->ssl_cert, MYF(MY_ALLOW_ZERO_PTR));
- options->ssl_cert = my_strdup(opt_arg, MYF(MY_WME));
- break;
- case 15: /* ssl_ca */
- my_free(options->ssl_ca, MYF(MY_ALLOW_ZERO_PTR));
- options->ssl_ca = my_strdup(opt_arg, MYF(MY_WME));
- break;
- case 16: /* ssl_capath */
- my_free(options->ssl_capath, MYF(MY_ALLOW_ZERO_PTR));
- options->ssl_capath = my_strdup(opt_arg, MYF(MY_WME));
- break;
-#else
- case 13: /* Ignore SSL options */
- case 14:
- case 15:
- case 16:
- break;
-#endif /* HAVE_OPENSSL */
- case 17: /* charset-lib */
- my_free(options->charset_dir,MYF(MY_ALLOW_ZERO_PTR));
- options->charset_dir = my_strdup(opt_arg, MYF(MY_WME));
- break;
- case 18:
- my_free(options->charset_name,MYF(MY_ALLOW_ZERO_PTR));
- options->charset_name = my_strdup(opt_arg, MYF(MY_WME));
- break;
- case 19: /* Interactive-timeout */
- options->client_flag|=CLIENT_INTERACTIVE;
- break;
- default:
- DBUG_PRINT("warning",("unknown option: %s",option[0]));
- }
- }
- }
- }
- free_defaults(argv);
- DBUG_VOID_RETURN;
-}
-
-
-/***************************************************************************
-** Change field rows to field structs
-***************************************************************************/
-
-static MYSQL_FIELD *
-unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
- my_bool default_value, my_bool long_flag_protocol)
-{
- MYSQL_ROWS *row;
- MYSQL_FIELD *field,*result;
- DBUG_ENTER("unpack_fields");
-
- field=result=(MYSQL_FIELD*) alloc_root(alloc,sizeof(MYSQL_FIELD)*fields);
- if (!result)
- DBUG_RETURN(0);
-
- for (row=data->data; row ; row = row->next,field++)
- {
- field->table= strdup_root(alloc,(char*) row->data[0]);
- field->name= strdup_root(alloc,(char*) row->data[1]);
- field->length= (uint) uint3korr(row->data[2]);
- field->type= (enum enum_field_types) (uchar) row->data[3][0];
- if (long_flag_protocol)
- {
- field->flags= uint2korr(row->data[4]);
- field->decimals=(uint) (uchar) row->data[4][2];
- }
- else
- {
- field->flags= (uint) (uchar) row->data[4][0];
- field->decimals=(uint) (uchar) row->data[4][1];
- }
- if (INTERNAL_NUM_FIELD(field))
- field->flags|= NUM_FLAG;
- if (default_value && row->data[5])
- field->def=strdup_root(alloc,(char*) row->data[5]);
- else
- field->def=0;
- field->max_length= 0;
- }
- free_rows(data); /* Free old data */
- DBUG_RETURN(result);
-}
-
-
-/* Read all rows (fields or data) from server */
-
-static MYSQL_DATA *read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
- uint fields)
-{
- uint field,pkt_len;
- ulong len;
- uchar *cp;
- char *to;
- MYSQL_DATA *result;
- MYSQL_ROWS **prev_ptr,*cur;
- NET *net = &mysql->net;
- DBUG_ENTER("read_rows");
-
- if ((pkt_len=(uint) net_safe_read(mysql)) == packet_error)
- DBUG_RETURN(0);
- if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
- MYF(MY_WME | MY_ZEROFILL))))
- {
- net->last_errno=CR_OUT_OF_MEMORY;
- strmov(net->last_error,ER(net->last_errno));
- DBUG_RETURN(0);
- }
- init_alloc_root(&result->alloc,8192,0); /* Assume rowlength < 8192 */
- result->alloc.min_malloc=sizeof(MYSQL_ROWS);
- prev_ptr= &result->data;
- result->rows=0;
- result->fields=fields;
-
- while (*(cp=net->read_pos) != 254 || pkt_len != 1)
- {
- result->rows++;
- if (!(cur= (MYSQL_ROWS*) alloc_root(&result->alloc,
- sizeof(MYSQL_ROWS))) ||
- !(cur->data= ((MYSQL_ROW)
- alloc_root(&result->alloc,
- (fields+1)*sizeof(char *)+pkt_len))))
- {
- free_rows(result);
- net->last_errno=CR_OUT_OF_MEMORY;
- strmov(net->last_error,ER(net->last_errno));
- DBUG_RETURN(0);
- }
- *prev_ptr=cur;
- prev_ptr= &cur->next;
- to= (char*) (cur->data+fields+1);
- for (field=0 ; field < fields ; field++)
- {
- if ((len=(ulong) net_field_length(&cp)) == NULL_LENGTH)
- { /* null field */
- cur->data[field] = 0;
- }
- else
- {
- cur->data[field] = to;
- memcpy(to,(char*) cp,len); to[len]=0;
- to+=len+1;
- cp+=len;
- if (mysql_fields)
- {
- if (mysql_fields[field].max_length < len)
- mysql_fields[field].max_length=len;
- }
- }
- }
- cur->data[field]=to; /* End of last field */
- if ((pkt_len=net_safe_read(mysql)) == packet_error)
- {
- free_rows(result);
- DBUG_RETURN(0);
- }
- }
- *prev_ptr=0; /* last pointer is null */
- DBUG_PRINT("exit",("Got %d rows",result->rows));
- DBUG_RETURN(result);
-}
-
-
-/*
-** Read one row. Uses packet buffer as storage for fields.
-** When next packet is read, the previous field values are destroyed
-*/
-
-
-static int
-read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths)
-{
- uint field;
- ulong pkt_len,len;
- uchar *pos,*prev_pos;
-
- if ((pkt_len=(uint) net_safe_read(mysql)) == packet_error)
- return -1;
- if (pkt_len == 1 && mysql->net.read_pos[0] == 254)
- return 1; /* End of data */
- prev_pos= 0; /* allowed to write at packet[-1] */
- pos=mysql->net.read_pos;
- for (field=0 ; field < fields ; field++)
- {
- if ((len=(ulong) net_field_length(&pos)) == NULL_LENGTH)
- { /* null field */
- row[field] = 0;
- *lengths++=0;
- }
- else
- {
- row[field] = (char*) pos;
- pos+=len;
- *lengths++=len;
- }
- if (prev_pos)
- *prev_pos=0; /* Terminate prev field */
- prev_pos=pos;
- }
- row[field]=(char*) prev_pos+1; /* End of last field */
- *prev_pos=0; /* Terminate last field */
- return 0;
-}
-
-/****************************************************************************
-** Init MySQL structure or allocate one
-****************************************************************************/
-
-MYSQL * STDCALL
-mysql_init(MYSQL *mysql)
-{
- mysql_once_init();
- if (!mysql)
- {
- if (!(mysql=(MYSQL*) my_malloc(sizeof(*mysql),MYF(MY_WME | MY_ZEROFILL))))
- return 0;
- mysql->free_me=1;
- mysql->net.vio = 0;
- }
- else
- bzero((char*) (mysql),sizeof(*(mysql)));
- mysql->options.connect_timeout=CONNECT_TIMEOUT;
-#if defined(SIGPIPE) && defined(THREAD)
- if (!((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE))
- (void) signal(SIGPIPE,pipe_sig_handler);
-#endif
- return mysql;
-}
-
-
-static void mysql_once_init()
-{
- if (!mysql_client_init)
- {
- mysql_client_init=1;
- my_init(); /* Will init threads */
- init_client_errs();
- if (!mysql_port)
- {
- mysql_port = MYSQL_PORT;
-#ifndef MSDOS
- {
- struct servent *serv_ptr;
- char *env;
- if ((serv_ptr = getservbyname("mysql", "tcp")))
- mysql_port = (uint) ntohs((ushort) serv_ptr->s_port);
- if ((env = getenv("MYSQL_TCP_PORT")))
- mysql_port =(uint) atoi(env);
- }
-#endif
- }
- if (!mysql_unix_port)
- {
- char *env;
-#ifdef __WIN__
- mysql_unix_port = (char*) MYSQL_NAMEDPIPE;
-#else
- mysql_unix_port = (char*) MYSQL_UNIX_ADDR;
-#endif
- if ((env = getenv("MYSQL_UNIX_PORT")))
- mysql_unix_port = env;
- }
- mysql_debug(NullS);
-#if defined(SIGPIPE) && !defined(THREAD)
- (void) signal(SIGPIPE,SIG_IGN);
-#endif
- }
-#ifdef THREAD
- else
- my_thread_init(); /* Init if new thread */
-#endif
-}
-
-#ifdef HAVE_OPENSSL
-/**************************************************************************
-** Fill in SSL part of MYSQL structure and set 'use_ssl' flag.
-** NB! Errors are not reported until you do mysql_real_connect.
-**************************************************************************/
-
-int STDCALL
-mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert,
- const char *ca, const char *capath)
-{
- mysql->options.ssl_key = key==0 ? 0 : my_strdup(key,MYF(0));
- mysql->options.ssl_cert = cert==0 ? 0 : my_strdup(cert,MYF(0));
- mysql->options.ssl_ca = ca==0 ? 0 : my_strdup(ca,MYF(0));
- mysql->options.ssl_capath = capath==0 ? 0 : my_strdup(capath,MYF(0));
- mysql->options.use_ssl = true;
- mysql->connector_fd = new_VioSSLConnectorFd(key, cert, ca, capath);
- return 0;
-}
-
-/**************************************************************************
-**************************************************************************/
-
-char * STDCALL
-mysql_ssl_cipher(MYSQL *mysql)
-{
- return (char *)mysql->net.vio->cipher_description();
-}
-
-
-/**************************************************************************
-** Free strings in the SSL structure and clear 'use_ssl' flag.
-** NB! Errors are not reported until you do mysql_real_connect.
-**************************************************************************/
-
-int STDCALL
-mysql_ssl_clear(MYSQL *mysql)
-{
- my_free(mysql->options.ssl_key, MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.ssl_cert, MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.ssl_ca, MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.ssl_capath, MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.ssl_key = 0;
- mysql->options.ssl_cert = 0;
- mysql->options.ssl_ca = 0;
- mysql->options.ssl_capath = 0;
- mysql->options.use_ssl = false;
- mysql->connector_fd->delete();
- mysql->connector_fd = 0;
- return 0;
-}
-#endif /* HAVE_OPENSSL */
-
-/**************************************************************************
-** Connect to sql server
-** If host == 0 then use localhost
-**************************************************************************/
-
-MYSQL * STDCALL
-mysql_connect(MYSQL *mysql,const char *host,
- const char *user, const char *passwd)
-{
- MYSQL *res;
- mysql=mysql_init(mysql); /* Make it thread safe */
- {
- DBUG_ENTER("mysql_connect");
- if (!(res=mysql_real_connect(mysql,host,user,passwd,NullS,0,NullS,0)))
- {
- if (mysql->free_me)
- my_free((gptr) mysql,MYF(0));
- }
- DBUG_RETURN(res);
- }
-}
-
-
-/*
-** Note that the mysql argument must be initialized with mysql_init()
-** before calling mysql_real_connect !
-*/
-
-MYSQL * STDCALL
-mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
- const char *passwd, const char *db,
- uint port, const char *unix_socket,uint client_flag)
-{
- char buff[NAME_LEN+USERNAME_LENGTH+100],charset_name_buff[16];
- char *end,*host_info,*charset_name;
- my_socket sock;
- uint32 ip_addr;
- struct sockaddr_in sock_addr;
- uint pkt_length;
- NET *net= &mysql->net;
-#ifdef __WIN__
- HANDLE hPipe=INVALID_HANDLE_VALUE;
-#endif
-#ifdef HAVE_SYS_UN_H
- struct sockaddr_un UNIXaddr;
-#endif
- init_sigpipe_variables
- DBUG_ENTER("mysql_real_connect");
-
- DBUG_PRINT("enter",("host: %s db: %s user: %s",
- host ? host : "(Null)",
- db ? db : "(Null)",
- user ? user : "(Null)"));
-
- /* Don't give sigpipe errors if the client doesn't want them */
- set_sigpipe(mysql);
- net->vio = 0; /* If something goes wrong */
- /* use default options */
- if (mysql->options.my_cnf_file || mysql->options.my_cnf_group)
- {
- mysql_read_default_options(&mysql->options,
- (mysql->options.my_cnf_file ?
- mysql->options.my_cnf_file : "my"),
- mysql->options.my_cnf_group);
- my_free(mysql->options.my_cnf_file,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.my_cnf_group,MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.my_cnf_file=mysql->options.my_cnf_group=0;
- }
-
- /* Some empty-string-tests are done because of ODBC */
- if (!host || !host[0])
- host=mysql->options.host;
- if (!user || !user[0])
- user=mysql->options.user;
- if (!passwd)
- {
- passwd=mysql->options.password;
-#ifndef DONT_USE_MYSQL_PWD
- if (!passwd)
- passwd=getenv("MYSQL_PWD"); /* get it from environment (haneke) */
-#endif
- }
- if (!db || !db[0])
- db=mysql->options.db;
- if (!port)
- port=mysql->options.port;
- if (!unix_socket)
- unix_socket=mysql->options.unix_socket;
-
- mysql->reconnect=1; /* Reconnect as default */
- mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
-
- /*
- ** Grab a socket and connect it to the server
- */
-
-#if defined(HAVE_SYS_UN_H)
- if ((!host || !strcmp(host,LOCAL_HOST)) && (unix_socket || mysql_unix_port))
- {
- host=LOCAL_HOST;
- if (!unix_socket)
- unix_socket=mysql_unix_port;
- host_info=(char*) ER(CR_LOCALHOST_CONNECTION);
- DBUG_PRINT("info",("Using UNIX sock '%s'",unix_socket));
- if ((sock = socket(AF_UNIX,SOCK_STREAM,0)) == SOCKET_ERROR)
- {
- net->last_errno=CR_SOCKET_CREATE_ERROR;
- sprintf(net->last_error,ER(net->last_errno),ERRNO);
- goto error;
- }
- net->vio = vio_new(sock, VIO_TYPE_SOCKET, TRUE);
- bzero((char*) &UNIXaddr,sizeof(UNIXaddr));
- UNIXaddr.sun_family = AF_UNIX;
- strmov(UNIXaddr.sun_path, unix_socket);
- if (connect2(sock,(struct sockaddr *) &UNIXaddr, sizeof(UNIXaddr),
- mysql->options.connect_timeout) <0)
- {
- DBUG_PRINT("error",("Got error %d on connect to local server",ERRNO));
- net->last_errno=CR_CONNECTION_ERROR;
- sprintf(net->last_error,ER(net->last_errno),unix_socket,ERRNO);
- goto error;
- }
- }
- else
-#elif defined(__WIN__)
- {
- if ((unix_socket ||
- !host && is_NT() ||
- host && !strcmp(host,LOCAL_HOST_NAMEDPIPE) ||
- mysql->options.named_pipe || !have_tcpip))
- {
- sock=0;
- if ((hPipe=create_named_pipe(net, mysql->options.connect_timeout,
- (char**) &host, (char**) &unix_socket)) ==
- INVALID_HANDLE_VALUE)
- {
- DBUG_PRINT("error",
- ("host: '%s' socket: '%s' named_pipe: %d have_tcpip: %d",
- host ? host : "<null>",
- unix_socket ? unix_socket : "<null>",
- (int) mysql->options.named_pipe,
- (int) have_tcpip));
- if (mysql->options.named_pipe ||
- (host && !strcmp(host,LOCAL_HOST_NAMEDPIPE)) ||
- (unix_socket && !strcmp(unix_socket,MYSQL_NAMEDPIPE)))
- goto error; /* User only requested named pipes */
- /* Try also with TCP/IP */
- }
- else
- {
- net->vio=vio_new_win32pipe(hPipe);
- sprintf(host_info=buff, ER(CR_NAMEDPIPE_CONNECTION), host,
- unix_socket);
- }
- }
- }
- if (hPipe == INVALID_HANDLE_VALUE)
-#endif
- {
- unix_socket=0; /* This is not used */
- if (!port)
- port=mysql_port;
- if (!host)
- host=LOCAL_HOST;
- sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
- DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host,port));
- /* _WIN64 ; Assume that the (int) range is enough for socket() */
- if ((sock = (my_socket) socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR)
- {
- net->last_errno=CR_IPSOCK_ERROR;
- sprintf(net->last_error,ER(net->last_errno),ERRNO);
- goto error;
- }
- net->vio = vio_new(sock,VIO_TYPE_TCPIP,FALSE);
- bzero((char*) &sock_addr,sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
-
- /*
- ** The server name may be a host name or IP address
- */
-
- if ((int) (ip_addr = inet_addr(host)) != (int) INADDR_NONE)
- {
- memcpy_fixed(&sock_addr.sin_addr,&ip_addr,sizeof(ip_addr));
- }
- else
-#if defined(HAVE_GETHOSTBYNAME_R) && defined(_REENTRANT) && defined(THREAD)
- {
- int tmp_errno;
- struct hostent tmp_hostent,*hp;
- char buff2[GETHOSTBYNAME_BUFF_SIZE];
- hp = my_gethostbyname_r(host,&tmp_hostent,buff2,sizeof(buff2),
- &tmp_errno);
- if (!hp)
- {
- net->last_errno=CR_UNKNOWN_HOST;
- sprintf(net->last_error, ER(CR_UNKNOWN_HOST), host, tmp_errno);
- goto error;
- }
- memcpy(&sock_addr.sin_addr,hp->h_addr, (size_t) hp->h_length);
- }
-#else
- {
- struct hostent *hp;
- if (!(hp=gethostbyname(host)))
- {
- net->last_errno=CR_UNKNOWN_HOST;
- sprintf(net->last_error, ER(CR_UNKNOWN_HOST), host, errno);
- goto error;
- }
- memcpy(&sock_addr.sin_addr,hp->h_addr, (size_t) hp->h_length);
- }
-#endif
- sock_addr.sin_port = (ushort) htons((ushort) port);
- if (connect2(sock,(struct sockaddr *) &sock_addr, sizeof(sock_addr),
- mysql->options.connect_timeout) <0)
- {
- DBUG_PRINT("error",("Got error %d on connect to '%s'",ERRNO,host));
- net->last_errno= CR_CONN_HOST_ERROR;
- sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, ERRNO);
- goto error;
- }
- }
-
- if (!net->vio || my_net_init(net, net->vio))
- {
- vio_delete(net->vio);
- net->vio = 0;
- net->last_errno=CR_OUT_OF_MEMORY;
- strmov(net->last_error,ER(net->last_errno));
- goto error;
- }
- vio_keepalive(net->vio,TRUE);
-
- /* Get version info */
- mysql->protocol_version= PROTOCOL_VERSION; /* Assume this */
- if (mysql->options.connect_timeout &&
- vio_poll_read(net->vio, mysql->options.connect_timeout))
- {
- net->last_errno= CR_SERVER_LOST;
- strmov(net->last_error,ER(net->last_errno));
- goto error;
- }
- if ((pkt_length=net_safe_read(mysql)) == packet_error)
- goto error;
-
- /* Check if version of protocoll matches current one */
-
- mysql->protocol_version= net->read_pos[0];
- DBUG_DUMP("packet",(char*) net->read_pos,10);
- DBUG_PRINT("info",("mysql protocol version %d, server=%d",
- PROTOCOL_VERSION, mysql->protocol_version));
- if (mysql->protocol_version != PROTOCOL_VERSION &&
- mysql->protocol_version != PROTOCOL_VERSION-1)
- {
- net->last_errno= CR_VERSION_ERROR;
- sprintf(net->last_error, ER(CR_VERSION_ERROR), mysql->protocol_version,
- PROTOCOL_VERSION);
- goto error;
- }
- end=strend((char*) net->read_pos+1);
- mysql->thread_id=uint4korr(end+1);
- end+=5;
- strmake(mysql->scramble_buff,end,8);
- end+=9;
- if (pkt_length >= (uint) (end+1 - (char*) net->read_pos))
- mysql->server_capabilities=uint2korr(end);
- if (pkt_length >= (uint) (end+18 - (char*) net->read_pos))
- {
- /* New protocol with 16 bytes to describe server characteristics */
- mysql->server_language=end[2];
- mysql->server_status=uint2korr(end+3);
- }
-
- /* Set character set */
- if ((charset_name=mysql->options.charset_name))
- {
- const char *save=charsets_dir;
- if (mysql->options.charset_dir)
- charsets_dir=mysql->options.charset_dir;
- mysql->charset=get_charset_by_name(mysql->options.charset_name,
- MYF(MY_WME));
- charsets_dir=save;
- }
- else if (mysql->server_language)
- {
- charset_name=charset_name_buff;
- sprintf(charset_name,"%d",mysql->server_language); /* In case of errors */
- if (!(mysql->charset =
- get_charset((uint8) mysql->server_language, MYF(0))))
- mysql->charset = default_charset_info; /* shouldn't be fatal */
-
- }
- else
- mysql->charset=default_charset_info;
-
- if (!mysql->charset)
- {
- net->last_errno=CR_CANT_READ_CHARSET;
- if (mysql->options.charset_dir)
- sprintf(net->last_error,ER(net->last_errno),
- charset_name ? charset_name : "unknown",
- mysql->options.charset_dir);
- else
- {
- char cs_dir_name[FN_REFLEN];
- get_charsets_dir(cs_dir_name);
- sprintf(net->last_error,ER(net->last_errno),
- charset_name ? charset_name : "unknown",
- cs_dir_name);
- }
- goto error;
- }
-
- /* Save connection information */
- if (!user) user="";
- if (!passwd) passwd="";
- if (!my_multi_malloc(MYF(0),
- &mysql->host_info, (uint) strlen(host_info)+1,
- &mysql->host, (uint) strlen(host)+1,
- &mysql->unix_socket,unix_socket ?
- (uint) strlen(unix_socket)+1 : (uint) 1,
- &mysql->server_version,
- (uint) (end - (char*) net->read_pos),
- NullS) ||
- !(mysql->user=my_strdup(user,MYF(0))) ||
- !(mysql->passwd=my_strdup(passwd,MYF(0))))
- {
- strmov(net->last_error, ER(net->last_errno=CR_OUT_OF_MEMORY));
- goto error;
- }
- strmov(mysql->host_info,host_info);
- strmov(mysql->host,host);
- if (unix_socket)
- strmov(mysql->unix_socket,unix_socket);
- else
- mysql->unix_socket=0;
- strmov(mysql->server_version,(char*) net->read_pos+1);
- mysql->port=port;
- client_flag|=mysql->options.client_flag;
-
- /* Send client information for access check */
- client_flag|=CLIENT_CAPABILITIES;
-
-#ifdef HAVE_OPENSSL
- if (mysql->options.use_ssl)
- client_flag|=CLIENT_SSL;
-#endif /* HAVE_OPENSSL */
-
- if (db)
- client_flag|=CLIENT_CONNECT_WITH_DB;
-#ifdef HAVE_COMPRESS
- if ((mysql->server_capabilities & CLIENT_COMPRESS) &&
- (mysql->options.compress || (client_flag & CLIENT_COMPRESS)))
- client_flag|=CLIENT_COMPRESS; /* We will use compression */
- else
-#endif
- client_flag&= ~CLIENT_COMPRESS;
-
-#ifdef HAVE_OPENSSL
- if ((mysql->server_capabilities & CLIENT_SSL) &&
- (mysql->options.use_ssl || (client_flag & CLIENT_SSL)))
- {
- DBUG_PRINT("info", ("Changing IO layer to SSL"));
- client_flag |= CLIENT_SSL;
- }
- else
- {
- if (client_flag & CLIENT_SSL)
- {
- DBUG_PRINT("info", ("Leaving IO layer intact because server doesn't support SSL"));
- }
- client_flag &= ~CLIENT_SSL;
- }
-#endif /* HAVE_OPENSSL */
-
- int2store(buff,client_flag);
- mysql->client_flag=client_flag;
-
-#ifdef HAVE_OPENSSL
- /* Oops.. are we careful enough to not send ANY information */
- /* without encryption? */
- if (client_flag & CLIENT_SSL)
- {
- if (my_net_write(net,buff,(uint) (2)) || net_flush(net))
- goto error;
- /* Do the SSL layering. */
- DBUG_PRINT("info", ("IO layer change in progress..."));
- VioSSLConnectorFd* connector_fd = (VioSSLConnectorFd*)
- (mysql->connector_fd);
- VioSocket* vio_socket = (VioSocket*)(mysql->net.vio);
- VioSSL* vio_ssl = connector_fd->connect(vio_socket);
- mysql->net.vio = (NetVio*)(vio_ssl);
- }
-#endif /* HAVE_OPENSSL */
-
- DBUG_PRINT("info",("Server version = '%s' capabilites: %ld status: %d client_flag: %d",
- mysql->server_version,mysql->server_capabilities,
- mysql->server_status, client_flag));
-
- int3store(buff+2,max_allowed_packet);
- if (user && user[0])
- strmake(buff+5,user,32); /* Max user name */
- else
- read_user_name((char*) buff+5);
-#ifdef _CUSTOMCONFIG_
-#include "_cust_libmysql.h";
-#endif
- DBUG_PRINT("info",("user: %s",buff+5));
- end=scramble(strend(buff+5)+1, mysql->scramble_buff, passwd,
- (my_bool) (mysql->protocol_version == 9));
- if (db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB))
- {
- end=strmake(end+1,db,NAME_LEN);
- mysql->db=my_strdup(db,MYF(MY_WME));
- db=0;
- }
- if (my_net_write(net,buff,(uint) (end-buff)) || net_flush(net) ||
- net_safe_read(mysql) == packet_error)
- goto error;
- if (client_flag & CLIENT_COMPRESS) /* We will use compression */
- net->compress=1;
- if (db && mysql_select_db(mysql,db))
- goto error;
- if (mysql->options.init_command)
- {
- my_bool reconnect=mysql->reconnect;
- mysql->reconnect=0;
- if (mysql_query(mysql,mysql->options.init_command))
- goto error;
- mysql_free_result(mysql_use_result(mysql));
- mysql->reconnect=reconnect;
- }
-
- DBUG_PRINT("exit",("Mysql handler: %lx",mysql));
- reset_sigpipe(mysql);
- DBUG_RETURN(mysql);
-
-error:
- reset_sigpipe(mysql);
- DBUG_PRINT("error",("message: %u (%s)",net->last_errno,net->last_error));
- {
- /* Free alloced memory */
- my_bool free_me=mysql->free_me;
- end_server(mysql);
- mysql->free_me=0;
- mysql_close(mysql);
- mysql->free_me=free_me;
- }
- DBUG_RETURN(0);
-}
-
-
-static my_bool mysql_reconnect(MYSQL *mysql)
-{
- MYSQL tmp_mysql;
- DBUG_ENTER("mysql_reconnect");
-
- if (!mysql->reconnect ||
- (mysql->server_status & SERVER_STATUS_IN_TRANS) || !mysql->host_info)
- {
- /* Allov reconnect next time */
- mysql->server_status&= ~SERVER_STATUS_IN_TRANS;
- DBUG_RETURN(1);
- }
- mysql_init(&tmp_mysql);
- tmp_mysql.options=mysql->options;
- if (!mysql_real_connect(&tmp_mysql,mysql->host,mysql->user,mysql->passwd,
- mysql->db, mysql->port, mysql->unix_socket,
- mysql->client_flag))
- DBUG_RETURN(1);
- tmp_mysql.free_me=mysql->free_me;
- mysql->free_me=0;
- bzero((char*) &mysql->options,sizeof(mysql->options));
- mysql_close(mysql);
- *mysql=tmp_mysql;
- net_clear(&mysql->net);
- mysql->affected_rows= ~(my_ulonglong) 0;
- DBUG_RETURN(0);
-}
-
-
-/**************************************************************************
-** Change user and database
-**************************************************************************/
-
-my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
- const char *passwd, const char *db)
-{
- char buff[512],*pos=buff;
- DBUG_ENTER("mysql_change_user");
-
- if (!user)
- user="";
- if (!passwd)
- passwd="";
-
- pos=strmov(pos,user)+1;
- pos=scramble(pos, mysql->scramble_buff, passwd,
- (my_bool) (mysql->protocol_version == 9));
- pos=strmov(pos+1,db ? db : "");
- if (simple_command(mysql,COM_CHANGE_USER, buff,(uint) (pos-buff),0))
- DBUG_RETURN(1);
-
- my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->passwd,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->db,MYF(MY_ALLOW_ZERO_PTR));
-
- mysql->user= my_strdup(user,MYF(MY_WME));
- mysql->passwd=my_strdup(passwd,MYF(MY_WME));
- mysql->db= db ? my_strdup(db,MYF(MY_WME)) : 0;
- DBUG_RETURN(0);
-}
-
-
-/**************************************************************************
-** Set current database
-**************************************************************************/
-
-int STDCALL
-mysql_select_db(MYSQL *mysql, const char *db)
-{
- int error;
- DBUG_ENTER("mysql_select_db");
- DBUG_PRINT("enter",("db: '%s'",db));
-
- if ((error=simple_command(mysql,COM_INIT_DB,db,(uint) strlen(db),0)))
- DBUG_RETURN(error);
- my_free(mysql->db,MYF(MY_ALLOW_ZERO_PTR));
- mysql->db=my_strdup(db,MYF(MY_WME));
- DBUG_RETURN(0);
-}
-
-
-/*************************************************************************
-** Send a QUIT to the server and close the connection
-** If handle is alloced by mysql connect free it.
-*************************************************************************/
-
-void STDCALL
-mysql_close(MYSQL *mysql)
-{
- DBUG_ENTER("mysql_close");
- if (mysql) /* Some simple safety */
- {
- if (mysql->net.vio != 0)
- {
- free_old_query(mysql);
- mysql->status=MYSQL_STATUS_READY; /* Force command */
- mysql->reconnect=0;
- simple_command(mysql,COM_QUIT,NullS,0,1);
- end_server(mysql);
- }
- my_free((gptr) mysql->host_info,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->passwd,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->db,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.init_command,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.user,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.host,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.password,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.unix_socket,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.db,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.my_cnf_file,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.my_cnf_group,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.charset_dir,MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.charset_name,MYF(MY_ALLOW_ZERO_PTR));
- /* Clear pointers for better safety */
- mysql->host_info=mysql->user=mysql->passwd=mysql->db=0;
- bzero((char*) &mysql->options,sizeof(mysql->options));
- mysql->net.vio = 0;
-#ifdef HAVE_OPENSSL
- ((VioConnectorFd*)(mysql->connector_fd))->delete();
- mysql->connector_fd = 0;
-#endif /* HAVE_OPENSSL */
- if (mysql->free_me)
- my_free((gptr) mysql,MYF(0));
- }
- DBUG_VOID_RETURN;
-}
-
-
-/**************************************************************************
-** Do a query. If query returned rows, free old rows.
-** Read data by mysql_store_result or by repeat call of mysql_fetch_row
-**************************************************************************/
-
-int STDCALL
-mysql_query(MYSQL *mysql, const char *query)
-{
- return mysql_real_query(mysql,query, (uint) strlen(query));
-}
-
-/*
- Send the query and return so we can do something else.
- Needs to be followed by mysql_read_query_result() when we want to
- finish processing it.
-*/
-
-int STDCALL
-mysql_send_query(MYSQL* mysql, const char* query, uint length)
-{
- return simple_command(mysql, COM_QUERY, query, length, 1);
-}
-
-int STDCALL mysql_read_query_result(MYSQL *mysql)
-{
- uchar *pos;
- ulong field_count;
- MYSQL_DATA *fields;
- uint length;
- DBUG_ENTER("mysql_read_query_result");
-
- if ((length = net_safe_read(mysql)) == packet_error)
- DBUG_RETURN(-1);
- free_old_query(mysql); /* Free old result */
-get_info:
- pos=(uchar*) mysql->net.read_pos;
- if ((field_count= net_field_length(&pos)) == 0)
- {
- mysql->affected_rows= net_field_length_ll(&pos);
- mysql->insert_id= net_field_length_ll(&pos);
- if (mysql->server_capabilities & CLIENT_TRANSACTIONS)
- {
- mysql->server_status=uint2korr(pos); pos+=2;
- }
- if (pos < mysql->net.read_pos+length && net_field_length(&pos))
- mysql->info=(char*) pos;
- DBUG_RETURN(0);
- }
- if (field_count == NULL_LENGTH) /* LOAD DATA LOCAL INFILE */
- {
- int error=send_file_to_server(mysql,(char*) pos);
- if ((length=net_safe_read(mysql)) == packet_error || error)
- DBUG_RETURN(-1);
- goto get_info; /* Get info packet */
- }
- if (!(mysql->server_status & SERVER_STATUS_AUTOCOMMIT))
- mysql->server_status|= SERVER_STATUS_IN_TRANS;
-
- mysql->extra_info= net_field_length_ll(&pos); /* Maybe number of rec */
- if (!(fields=read_rows(mysql,(MYSQL_FIELD*) 0,5)))
- DBUG_RETURN(-1);
- if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,
- (uint) field_count,0,
- (my_bool) test(mysql->server_capabilities &
- CLIENT_LONG_FLAG))))
- DBUG_RETURN(-1);
- mysql->status=MYSQL_STATUS_GET_RESULT;
- mysql->field_count=field_count;
- DBUG_RETURN(0);
-}
-
-int STDCALL
-mysql_real_query(MYSQL *mysql, const char *query, uint length)
-{
- DBUG_ENTER("mysql_real_query");
- DBUG_PRINT("enter",("handle: %lx",mysql));
- DBUG_PRINT("query",("Query = \"%s\"",query));
- if (simple_command(mysql,COM_QUERY,query,length,1))
- DBUG_RETURN(-1);
- DBUG_RETURN(mysql_read_query_result(mysql));
-}
-
-static int
-send_file_to_server(MYSQL *mysql, const char *filename)
-{
- int fd, readcount;
- char buf[IO_SIZE*15],*tmp_name;
- DBUG_ENTER("send_file_to_server");
-
- fn_format(buf,filename,"","",4); /* Convert to client format */
- if (!(tmp_name=my_strdup(buf,MYF(0))))
- {
- strmov(mysql->net.last_error, ER(mysql->net.last_errno=CR_OUT_OF_MEMORY));
- DBUG_RETURN(-1);
- }
- if ((fd = my_open(tmp_name,O_RDONLY, MYF(0))) < 0)
- {
- mysql->net.last_errno=EE_FILENOTFOUND;
- sprintf(buf,EE(mysql->net.last_errno),tmp_name,errno);
- strmake(mysql->net.last_error,buf,sizeof(mysql->net.last_error)-1);
- my_net_write(&mysql->net,"",0); net_flush(&mysql->net);
- my_free(tmp_name,MYF(0));
- DBUG_RETURN(-1);
- }
-
- while ((readcount = (int) my_read(fd,buf,sizeof(buf),MYF(0))) > 0)
- {
- if (my_net_write(&mysql->net,buf,readcount))
- {
- mysql->net.last_errno=CR_SERVER_LOST;
- strmov(mysql->net.last_error,ER(mysql->net.last_errno));
- DBUG_PRINT("error",("Lost connection to MySQL server during LOAD DATA of local file"));
- (void) my_close(fd,MYF(0));
- my_free(tmp_name,MYF(0));
- DBUG_RETURN(-1);
- }
- }
- (void) my_close(fd,MYF(0));
- /* Send empty packet to mark end of file */
- if (my_net_write(&mysql->net,"",0) || net_flush(&mysql->net))
- {
- mysql->net.last_errno=CR_SERVER_LOST;
- sprintf(mysql->net.last_error,ER(mysql->net.last_errno),errno);
- my_free(tmp_name,MYF(0));
- DBUG_RETURN(-1);
- }
- if (readcount < 0)
- {
- mysql->net.last_errno=EE_READ; /* the errmsg for not entire file read */
- sprintf(buf,EE(mysql->net.last_errno),tmp_name,errno);
- strmake(mysql->net.last_error,buf,sizeof(mysql->net.last_error)-1);
- my_free(tmp_name,MYF(0));
- DBUG_RETURN(-1);
- }
- DBUG_RETURN(0);
-}
-
-
-/**************************************************************************
-** Alloc result struct for buffered results. All rows are read to buffer.
-** mysql_data_seek may be used.
-**************************************************************************/
-
-MYSQL_RES * STDCALL
-mysql_store_result(MYSQL *mysql)
-{
- MYSQL_RES *result;
- DBUG_ENTER("mysql_store_result");
-
- if (!mysql->fields)
- DBUG_RETURN(0);
- if (mysql->status != MYSQL_STATUS_GET_RESULT)
- {
- strmov(mysql->net.last_error,
- ER(mysql->net.last_errno=CR_COMMANDS_OUT_OF_SYNC));
- DBUG_RETURN(0);
- }
- mysql->status=MYSQL_STATUS_READY; /* server is ready */
- if (!(result=(MYSQL_RES*) my_malloc(sizeof(MYSQL_RES)+
- sizeof(ulong)*mysql->field_count,
- MYF(MY_WME | MY_ZEROFILL))))
- {
- mysql->net.last_errno=CR_OUT_OF_MEMORY;
- strmov(mysql->net.last_error, ER(mysql->net.last_errno));
- DBUG_RETURN(0);
- }
- result->eof=1; /* Marker for buffered */
- result->lengths=(ulong*) (result+1);
- if (!(result->data=read_rows(mysql,mysql->fields,mysql->field_count)))
- {
- my_free((gptr) result,MYF(0));
- DBUG_RETURN(0);
- }
- mysql->affected_rows= result->row_count= result->data->rows;
- result->data_cursor= result->data->data;
- result->fields= mysql->fields;
- result->field_alloc= mysql->field_alloc;
- result->field_count= mysql->field_count;
- result->current_field=0;
- result->current_row=0; /* Must do a fetch first */
- mysql->fields=0; /* fields is now in result */
- DBUG_RETURN(result); /* Data fetched */
-}
-
-
-/**************************************************************************
-** Alloc struct for use with unbuffered reads. Data is fetched by domand
-** when calling to mysql_fetch_row.
-** mysql_data_seek is a noop.
-**
-** No other queries may be specified with the same MYSQL handle.
-** There shouldn't be much processing per row because mysql server shouldn't
-** have to wait for the client (and will not wait more than 30 sec/packet).
-**************************************************************************/
-
-MYSQL_RES * STDCALL
-mysql_use_result(MYSQL *mysql)
-{
- MYSQL_RES *result;
- DBUG_ENTER("mysql_use_result");
-
- if (!mysql->fields)
- DBUG_RETURN(0);
- if (mysql->status != MYSQL_STATUS_GET_RESULT)
- {
- strmov(mysql->net.last_error,
- ER(mysql->net.last_errno=CR_COMMANDS_OUT_OF_SYNC));
- DBUG_RETURN(0);
- }
- if (!(result=(MYSQL_RES*) my_malloc(sizeof(*result)+
- sizeof(ulong)*mysql->field_count,
- MYF(MY_WME | MY_ZEROFILL))))
- DBUG_RETURN(0);
- result->lengths=(ulong*) (result+1);
- if (!(result->row=(MYSQL_ROW)
- my_malloc(sizeof(result->row[0])*(mysql->field_count+1), MYF(MY_WME))))
- { /* Ptrs: to one row */
- my_free((gptr) result,MYF(0));
- DBUG_RETURN(0);
- }
- result->fields= mysql->fields;
- result->field_alloc= mysql->field_alloc;
- result->field_count= mysql->field_count;
- result->current_field=0;
- result->handle= mysql;
- result->current_row= 0;
- mysql->fields=0; /* fields is now in result */
- mysql->status=MYSQL_STATUS_USE_RESULT;
- DBUG_RETURN(result); /* Data is read to be fetched */
-}
-
-
-
-/**************************************************************************
-** Return next field of the query results
-**************************************************************************/
-
-MYSQL_FIELD * STDCALL
-mysql_fetch_field(MYSQL_RES *result)
-{
- if (result->current_field >= result->field_count)
- return(NULL);
- return &result->fields[result->current_field++];
-}
-
-
-/**************************************************************************
-** Return next row of the query results
-**************************************************************************/
-
-MYSQL_ROW STDCALL
-mysql_fetch_row(MYSQL_RES *res)
-{
- DBUG_ENTER("mysql_fetch_row");
- if (!res->data)
- { /* Unbufferred fetch */
- if (!res->eof)
- {
- if (!(read_one_row(res->handle,res->field_count,res->row, res->lengths)))
- {
- res->row_count++;
- DBUG_RETURN(res->current_row=res->row);
- }
- else
- {
- DBUG_PRINT("info",("end of data"));
- res->eof=1;
- res->handle->status=MYSQL_STATUS_READY;
- }
- }
- DBUG_RETURN((MYSQL_ROW) NULL);
- }
- {
- MYSQL_ROW tmp;
- if (!res->data_cursor)
- {
- DBUG_PRINT("info",("end of data"));
- DBUG_RETURN(res->current_row=(MYSQL_ROW) NULL);
- }
- tmp = res->data_cursor->data;
- res->data_cursor = res->data_cursor->next;
- DBUG_RETURN(res->current_row=tmp);
- }
-}
-
-/**************************************************************************
-** Get column lengths of the current row
-** If one uses mysql_use_result, res->lengths contains the length information,
-** else the lengths are calculated from the offset between pointers.
-**************************************************************************/
-
-ulong * STDCALL
-mysql_fetch_lengths(MYSQL_RES *res)
-{
- ulong *lengths,*prev_length;
- byte *start;
- MYSQL_ROW column,end;
-
- if (!(column=res->current_row))
- return 0; /* Something is wrong */
- if (res->data)
- {
- start=0;
- prev_length=0; /* Keep gcc happy */
- lengths=res->lengths;
- for (end=column+res->field_count+1 ; column != end ; column++,lengths++)
- {
- if (!*column)
- {
- *lengths=0; /* Null */
- continue;
- }
- if (start) /* Found end of prev string */
- *prev_length= (uint) (*column-start-1);
- start= *column;
- prev_length=lengths;
- }
- }
- return res->lengths;
-}
-
-/**************************************************************************
-** Move to a specific row and column
-**************************************************************************/
-
-void STDCALL
-mysql_data_seek(MYSQL_RES *result, my_ulonglong row)
-{
- MYSQL_ROWS *tmp=0;
- DBUG_PRINT("info",("mysql_data_seek(%ld)",(long) row));
- if (result->data)
- for (tmp=result->data->data; row-- && tmp ; tmp = tmp->next) ;
- result->current_row=0;
- result->data_cursor = tmp;
-}
-
-/*************************************************************************
-** put the row or field cursor one a position one got from mysql_row_tell()
-** This doesn't restore any data. The next mysql_fetch_row or
-** mysql_fetch_field will return the next row or field after the last used
-*************************************************************************/
-
-MYSQL_ROW_OFFSET STDCALL
-mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row)
-{
- MYSQL_ROW_OFFSET return_value=result->data_cursor;
- result->current_row= 0;
- result->data_cursor= row;
- return return_value;
-}
-
-
-MYSQL_FIELD_OFFSET STDCALL
-mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset)
-{
- MYSQL_FIELD_OFFSET return_value=result->current_field;
- result->current_field=field_offset;
- return return_value;
-}
-
-/*****************************************************************************
-** List all databases
-*****************************************************************************/
-
-MYSQL_RES * STDCALL
-mysql_list_dbs(MYSQL *mysql, const char *wild)
-{
- char buff[255];
- DBUG_ENTER("mysql_list_dbs");
-
- append_wild(strmov(buff,"show databases"),buff+sizeof(buff),wild);
- if (mysql_query(mysql,buff))
- DBUG_RETURN(0);
- DBUG_RETURN (mysql_store_result(mysql));
-}
-
-
-/*****************************************************************************
-** List all tables in a database
-** If wild is given then only the tables matching wild is returned
-*****************************************************************************/
-
-MYSQL_RES * STDCALL
-mysql_list_tables(MYSQL *mysql, const char *wild)
-{
- char buff[255];
- DBUG_ENTER("mysql_list_tables");
-
- append_wild(strmov(buff,"show tables"),buff+sizeof(buff),wild);
- if (mysql_query(mysql,buff))
- DBUG_RETURN(0);
- DBUG_RETURN (mysql_store_result(mysql));
-}
-
-
-/**************************************************************************
-** List all fields in a table
-** If wild is given then only the fields matching wild is returned
-** Instead of this use query:
-** show fields in 'table' like "wild"
-**************************************************************************/
-
-MYSQL_RES * STDCALL
-mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
-{
- MYSQL_RES *result;
- MYSQL_DATA *query;
- char buff[257],*end;
- DBUG_ENTER("mysql_list_fields");
- DBUG_PRINT("enter",("table: '%s' wild: '%s'",table,wild ? wild : ""));
-
- LINT_INIT(query);
-
- end=strmake(strmake(buff, table,128)+1,wild ? wild : "",128);
- if (simple_command(mysql,COM_FIELD_LIST,buff,(uint) (end-buff),1) ||
- !(query = read_rows(mysql,(MYSQL_FIELD*) 0,6)))
- DBUG_RETURN(NULL);
-
- free_old_query(mysql);
- if (!(result = (MYSQL_RES *) my_malloc(sizeof(MYSQL_RES),
- MYF(MY_WME | MY_ZEROFILL))))
- {
- free_rows(query);
- DBUG_RETURN(NULL);
- }
- result->field_alloc=mysql->field_alloc;
- mysql->fields=0;
- result->field_count = (uint) query->rows;
- result->fields= unpack_fields(query,&result->field_alloc,
- result->field_count,1,
- (my_bool) test(mysql->server_capabilities &
- CLIENT_LONG_FLAG));
- result->eof=1;
- DBUG_RETURN(result);
-}
-
-/* List all running processes (threads) in server */
-
-MYSQL_RES * STDCALL
-mysql_list_processes(MYSQL *mysql)
-{
- MYSQL_DATA *fields;
- uint field_count;
- uchar *pos;
- DBUG_ENTER("mysql_list_processes");
-
- LINT_INIT(fields);
- if (simple_command(mysql,COM_PROCESS_INFO,0,0,0))
- DBUG_RETURN(0);
- free_old_query(mysql);
- pos=(uchar*) mysql->net.read_pos;
- field_count=(uint) net_field_length(&pos);
- if (!(fields = read_rows(mysql,(MYSQL_FIELD*) 0,5)))
- DBUG_RETURN(NULL);
- if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,field_count,0,
- (my_bool) test(mysql->server_capabilities &
- CLIENT_LONG_FLAG))))
- DBUG_RETURN(0);
- mysql->status=MYSQL_STATUS_GET_RESULT;
- mysql->field_count=field_count;
- DBUG_RETURN(mysql_store_result(mysql));
-}
-
-
-int STDCALL
-mysql_create_db(MYSQL *mysql, const char *db)
-{
- DBUG_ENTER("mysql_createdb");
- DBUG_PRINT("enter",("db: %s",db));
- DBUG_RETURN(simple_command(mysql,COM_CREATE_DB,db, (uint) strlen(db),0));
-}
-
-
-int STDCALL
-mysql_drop_db(MYSQL *mysql, const char *db)
-{
- DBUG_ENTER("mysql_drop_db");
- DBUG_PRINT("enter",("db: %s",db));
- DBUG_RETURN(simple_command(mysql,COM_DROP_DB,db,(uint) strlen(db),0));
-}
-
-
-int STDCALL
-mysql_shutdown(MYSQL *mysql)
-{
- DBUG_ENTER("mysql_shutdown");
- DBUG_RETURN(simple_command(mysql,COM_SHUTDOWN,0,0,0));
-}
-
-
-int STDCALL
-mysql_refresh(MYSQL *mysql,uint options)
-{
- uchar bits[1];
- DBUG_ENTER("mysql_refresh");
- bits[0]= (uchar) options;
- DBUG_RETURN(simple_command(mysql,COM_REFRESH,(char*) bits,1,0));
-}
-
-int STDCALL
-mysql_kill(MYSQL *mysql,ulong pid)
-{
- char buff[12];
- DBUG_ENTER("mysql_kill");
- int4store(buff,pid);
- DBUG_RETURN(simple_command(mysql,COM_PROCESS_KILL,buff,4,0));
-}
-
-
-int STDCALL
-mysql_dump_debug_info(MYSQL *mysql)
-{
- DBUG_ENTER("mysql_dump_debug_info");
- DBUG_RETURN(simple_command(mysql,COM_DEBUG,0,0,0));
-}
-
-char * STDCALL
-mysql_stat(MYSQL *mysql)
-{
- DBUG_ENTER("mysql_stat");
- if (simple_command(mysql,COM_STATISTICS,0,0,0))
- return mysql->net.last_error;
- mysql->net.read_pos[mysql->packet_length]=0; /* End of stat string */
- if (!mysql->net.read_pos[0])
- {
- mysql->net.last_errno=CR_WRONG_HOST_INFO;
- strmov(mysql->net.last_error, ER(mysql->net.last_errno));
- return mysql->net.last_error;
- }
- DBUG_RETURN((char*) mysql->net.read_pos);
-}
-
-
-int STDCALL
-mysql_ping(MYSQL *mysql)
-{
- DBUG_ENTER("mysql_ping");
- DBUG_RETURN(simple_command(mysql,COM_PING,0,0,0));
-}
-
-
-char * STDCALL
-mysql_get_server_info(MYSQL *mysql)
-{
- return((char*) mysql->server_version);
-}
-
-
-char * STDCALL
-mysql_get_host_info(MYSQL *mysql)
-{
- return(mysql->host_info);
-}
-
-
-uint STDCALL
-mysql_get_proto_info(MYSQL *mysql)
-{
- return (mysql->protocol_version);
-}
-
-char * STDCALL
-mysql_get_client_info(void)
-{
- return (char*) MYSQL_SERVER_VERSION;
-}
-
-
-int STDCALL
-mysql_options(MYSQL *mysql,enum mysql_option option, const char *arg)
-{
- DBUG_ENTER("mysql_option");
- DBUG_PRINT("enter",("option: %d",(int) option));
- switch (option) {
- case MYSQL_OPT_CONNECT_TIMEOUT:
- mysql->options.connect_timeout= *(uint*) arg;
- break;
- case MYSQL_OPT_COMPRESS:
- mysql->options.compress=1; /* Remember for connect */
- break;
- case MYSQL_OPT_NAMED_PIPE:
- mysql->options.named_pipe=1; /* Force named pipe */
- break;
- case MYSQL_INIT_COMMAND:
- my_free(mysql->options.init_command,MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.init_command=my_strdup(arg,MYF(MY_WME));
- break;
- case MYSQL_READ_DEFAULT_FILE:
- my_free(mysql->options.my_cnf_file,MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.my_cnf_file=my_strdup(arg,MYF(MY_WME));
- break;
- case MYSQL_READ_DEFAULT_GROUP:
- my_free(mysql->options.my_cnf_group,MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.my_cnf_group=my_strdup(arg,MYF(MY_WME));
- break;
- case MYSQL_SET_CHARSET_DIR:
- my_free(mysql->options.charset_dir,MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.charset_dir=my_strdup(arg,MYF(MY_WME));
- break;
- case MYSQL_SET_CHARSET_NAME:
- my_free(mysql->options.charset_name,MYF(MY_ALLOW_ZERO_PTR));
- mysql->options.charset_name=my_strdup(arg,MYF(MY_WME));
- break;
- default:
- DBUG_RETURN(-1);
- }
- DBUG_RETURN(0);
-}
-
-/****************************************************************************
-** Functions to get information from the MySQL structure
-** These are functions to make shared libraries more usable.
-****************************************************************************/
-
-/* MYSQL_RES */
-my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res)
-{
- return res->row_count;
-}
-
-unsigned int STDCALL mysql_num_fields(MYSQL_RES *res)
-{
- return res->field_count;
-}
-
-my_bool STDCALL mysql_eof(MYSQL_RES *res)
-{
- return res->eof;
-}
-
-MYSQL_FIELD * STDCALL mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr)
-{
- return &(res)->fields[fieldnr];
-}
-
-MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res)
-{
- return (res)->fields;
-}
-
-MYSQL_ROWS * STDCALL mysql_row_tell(MYSQL_RES *res)
-{
- return res->data_cursor;
-}
-
-uint STDCALL mysql_field_tell(MYSQL_RES *res)
-{
- return (res)->current_field;
-}
-
-/* MYSQL */
-
-unsigned int STDCALL mysql_field_count(MYSQL *mysql)
-{
- return mysql->field_count;
-}
-
-my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql)
-{
- return (mysql)->affected_rows;
-}
-
-my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql)
-{
- return (mysql)->insert_id;
-}
-
-uint STDCALL mysql_errno(MYSQL *mysql)
-{
- return (mysql)->net.last_errno;
-}
-
-char * STDCALL mysql_error(MYSQL *mysql)
-{
- return (mysql)->net.last_error;
-}
-
-char *STDCALL mysql_info(MYSQL *mysql)
-{
- return (mysql)->info;
-}
-
-ulong STDCALL mysql_thread_id(MYSQL *mysql)
-{
- return (mysql)->thread_id;
-}
-
-const char * STDCALL mysql_character_set_name(MYSQL *mysql)
-{
- return mysql->charset->name;
-}
-
-
-uint STDCALL mysql_thread_safe(void)
-{
-#ifdef THREAD
- return 1;
-#else
- return 0;
-#endif
-}
-
-/****************************************************************************
-** Some support functions
-****************************************************************************/
-
-/*
-** Add escape characters to a string (blob?) to make it suitable for a insert
-** to should at least have place for length*2+1 chars
-** Returns the length of the to string
-*/
-
-ulong STDCALL
-mysql_escape_string(char *to,const char *from,ulong length)
-{
- return mysql_sub_escape_string(default_charset_info,to,from,length);
-}
-
-ulong STDCALL
-mysql_real_escape_string(MYSQL *mysql, char *to,const char *from,
- ulong length)
-{
- return mysql_sub_escape_string(mysql->charset,to,from,length);
-}
-
-
-static ulong
-mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to,
- const char *from, ulong length)
-{
- const char *to_start=to;
- const char *end;
-#ifdef USE_MB
- my_bool use_mb_flag=use_mb(charset_info);
-#endif
- for (end=from+length; from != end ; from++)
- {
-#ifdef USE_MB
- int l;
- if (use_mb_flag && (l = my_ismbchar(charset_info, from, end)))
- {
- while (l--)
- *to++ = *from++;
- from--;
- continue;
- }
-#endif
- switch (*from) {
- case 0: /* Must be escaped for 'mysql' */
- *to++= '\\';
- *to++= '0';
- break;
- case '\n': /* Must be escaped for logs */
- *to++= '\\';
- *to++= 'n';
- break;
- case '\r':
- *to++= '\\';
- *to++= 'r';
- break;
- case '\\':
- *to++= '\\';
- *to++= '\\';
- break;
- case '\'':
- *to++= '\\';
- *to++= '\'';
- break;
- case '"': /* Better safe than sorry */
- *to++= '\\';
- *to++= '"';
- break;
- case '\032': /* This gives problems on Win32 */
- *to++= '\\';
- *to++= 'Z';
- break;
- default:
- *to++= *from;
- }
- }
- *to=0;
- return (ulong) (to-to_start);
-}
-
-
-char * STDCALL
-mysql_odbc_escape_string(MYSQL *mysql,
- char *to, ulong to_length,
- const char *from, ulong from_length,
- void *param,
- char * (*extend_buffer)
- (void *, char *, ulong *))
-{
- char *to_end=to+to_length-5;
- const char *end;
-#ifdef USE_MB
- my_bool use_mb_flag=use_mb(mysql->charset);
-#endif
-
- for (end=from+from_length; from != end ; from++)
- {
- if (to >= to_end)
- {
- to_length = (ulong) (end-from)+512; /* We want this much more */
- if (!(to=(*extend_buffer)(param, to, &to_length)))
- return to;
- to_end=to+to_length-5;
- }
-#ifdef USE_MB
- {
- int l;
- if (use_mb_flag && (l = my_ismbchar(mysql->charset, from, end)))
- {
- while (l--)
- *to++ = *from++;
- from--;
- continue;
- }
- }
-#endif
- switch (*from) {
- case 0: /* Must be escaped for 'mysql' */
- *to++= '\\';
- *to++= '0';
- break;
- case '\n': /* Must be escaped for logs */
- *to++= '\\';
- *to++= 'n';
- break;
- case '\r':
- *to++= '\\';
- *to++= 'r';
- break;
- case '\\':
- *to++= '\\';
- *to++= '\\';
- break;
- case '\'':
- *to++= '\\';
- *to++= '\'';
- break;
- case '"': /* Better safe than sorry */
- *to++= '\\';
- *to++= '"';
- break;
- case '\032': /* This gives problems on Win32 */
- *to++= '\\';
- *to++= 'Z';
- break;
- default:
- *to++= *from;
- }
- }
- return to;
-}
-
-void STDCALL
-myodbc_remove_escape(MYSQL *mysql,char *name)
-{
- char *to;
-#ifdef USE_MB
- my_bool use_mb_flag=use_mb(mysql->charset);
- char *end;
- LINT_INIT(end);
- if (use_mb_flag)
- for (end=name; *end ; end++) ;
-#endif
-
- for (to=name ; *name ; name++)
- {
-#ifdef USE_MB
- int l;
- if (use_mb_flag && (l = my_ismbchar( mysql->charset, name , end ) ) )
- {
- while (l--)
- *to++ = *name++;
- name--;
- continue;
- }
-#endif
- if (*name == '\\' && name[1])
- name++;
- *to++= *name;
- }
- *to=0;
-}
diff --git a/ext/mysql/libmysql/libmysql.dsp b/ext/mysql/libmysql/libmysql.dsp
deleted file mode 100644
index 4525a51ab8..0000000000
--- a/ext/mysql/libmysql/libmysql.dsp
+++ /dev/null
@@ -1,585 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libmysql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=libmysql - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "libmysql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "libmysql.mak" CFG="libmysql - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "libmysql - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmysql - Win32 Release_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmysql - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmysql - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmysql - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmysql - Win32 Release_inline" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmysql - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "libmysql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "__WIN32__" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libmysql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "__WIN32__" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libmysql - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_inline"
-# PROP BASE Intermediate_Dir "Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "__WIN32__" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libmysql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "libmysql___Win32_Debug"
-# PROP BASE Intermediate_Dir "libmysql___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libmysql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "libmysql___Win32_Release"
-# PROP BASE Intermediate_Dir "libmysql___Win32_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libmysql - Win32 Release_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "libmysql___Win32_Release_inline"
-# PROP BASE Intermediate_Dir "libmysql___Win32_Release_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_inline"
-# PROP Intermediate_Dir "Release_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libmysql - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "libmysql___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "libmysql___Win32_Release_TSDbg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "libmysql - Win32 Debug_TS"
-# Name "libmysql - Win32 Release_TS"
-# Name "libmysql - Win32 Release_TS_inline"
-# Name "libmysql - Win32 Debug"
-# Name "libmysql - Win32 Release"
-# Name "libmysql - Win32 Release_inline"
-# Name "libmysql - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\array.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\bchange.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\bmove.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\bmove_upp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\charset.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ctype.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbug.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\default.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dll.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\errmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\errors.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\get_password.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\int2str.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\is_prefix.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmysql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\list.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\longlong2str.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_casecnv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_dirname.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_fn_ext.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_format.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_loadpath.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_pack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_path.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_unixpath.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mf_wcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mulalloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_alloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_compress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_create.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_delete.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_div.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_error.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_fopen.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_getwd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_init.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_lib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_messnc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_net.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_once.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_open.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_pthread.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_read.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_realloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_static.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_tempnam.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_thr_init.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_wincond.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_winthread.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_write.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\net.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\password.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\safemalloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\str2int.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strcend.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strcont.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strend.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strfill.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\string.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strinstr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strmake.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strmov.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strnmov.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strtoll.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strtoull.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\strxmov.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\thr_mutex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\typelib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\violite.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\acconfig.h
-# End Source File
-# Begin Source File
-
-SOURCE=".\config-win.h"
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbug.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\errmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\global.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\m_ctype.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\m_string.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_alarm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_dir.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_list.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_net.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_pthread.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_static.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\my_sys.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysql_com.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysql_version.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqld_error.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysys_err.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysys_priv.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\thr_alarm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\violite.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mysql/libmysql/list.c b/ext/mysql/libmysql/list.c
deleted file mode 100644
index 79bc7da4c5..0000000000
--- a/ext/mysql/libmysql/list.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Code for handling dubble-linked lists in C
-*/
-
-#include "mysys_priv.h"
-#include <my_list.h>
-
-
-
- /* Add a element to start of list */
-
-LIST *list_add(LIST *root, LIST *element)
-{
- DBUG_ENTER("list_add");
- DBUG_PRINT("enter",("root: %lx element: %lx", root, element));
- if (root)
- {
- if (root->prev) /* If add in mid of list */
- root->prev->next= element;
- element->prev=root->prev;
- root->prev=element;
- }
- else
- element->prev=0;
- element->next=root;
- DBUG_RETURN(element); /* New root */
-}
-
-
-LIST *list_delete(LIST *root, LIST *element)
-{
- if (element->prev)
- element->prev->next=element->next;
- else
- root=element->next;
- if (element->next)
- element->next->prev=element->prev;
- return root;
-}
-
-
-void list_free(LIST *root, pbool free_data)
-{
- LIST *next;
- while (root)
- {
- next=root->next;
- if (free_data)
- my_free((gptr) root->data,MYF(0));
- my_free((gptr) root,MYF(0));
- root=next;
- }
-}
-
-
-LIST *list_cons(void *data, LIST *list)
-{
- LIST *new=(LIST*) my_malloc(sizeof(LIST),MYF(MY_FAE));
- if (!new)
- return 0;
- new->data=data;
- return list_add(list,new);
-}
-
-
-LIST *list_reverse(LIST *root)
-{
- LIST *last;
-
- last=root;
- while (root)
- {
- last=root;
- root=root->next;
- last->next=last->prev;
- last->prev=root;
- }
- return last;
-}
-
-uint list_length(LIST *list)
-{
- uint count;
- for (count=0 ; list ; list=list->next, count++) ;
- return count;
-}
-
-
-int list_walk(LIST *list, list_walk_action action, gptr argument)
-{
- int error=0;
- while (list)
- {
- if ((error = (*action)(list->data,argument)))
- return error;
- list=rest(list);
- }
- return 0;
-}
diff --git a/ext/mysql/libmysql/longlong2str.c b/ext/mysql/libmysql/longlong2str.c
deleted file mode 100644
index 1899386862..0000000000
--- a/ext/mysql/libmysql/longlong2str.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Defines: longlong2str();
-
- longlong2str(dst, radix, val)
- converts the (longlong) integer "val" to character form and moves it to
- the destination string "dst" followed by a terminating NUL. The
- result is normally a pointer to this NUL character, but if the radix
- is dud the result will be NullS and nothing will be changed.
-
- If radix is -2..-36, val is taken to be SIGNED.
- If radix is 2.. 36, val is taken to be UNSIGNED.
- That is, val is signed if and only if radix is. You will normally
- use radix -10 only through itoa and ltoa, for radix 2, 8, or 16
- unsigned is what you generally want.
-
- _dig_vec is public just in case someone has a use for it.
- The definitions of itoa and ltoa are actually macros in m_string.h,
- but this is where the code is.
-
- Note: The standard itoa() returns a pointer to the argument, when int2str
- returns the pointer to the end-null.
- itoa assumes that 10 -base numbers are allways signed and other arn't.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#if defined(HAVE_LONG_LONG) && !defined(longlong2str) && !defined(HAVE_LONGLONG2STR)
-
-extern char NEAR _dig_vec[];
-
-/*
- This assumes that longlong multiplication is faster than longlong division.
-*/
-
-char *longlong2str(longlong val,char *dst,int radix)
-{
- char buffer[65];
- register char *p;
- long long_val;
-
- if (radix < 0)
- {
- if (radix < -36 || radix > -2) return (char*) 0;
- if (val < 0) {
- *dst++ = '-';
- val = -val;
- }
- radix = -radix;
- }
- else
- {
- if (radix > 36 || radix < 2) return (char*) 0;
- }
- if (val == 0)
- {
- *dst++='0';
- *dst='\0';
- return dst;
- }
- p = &buffer[sizeof(buffer)-1];
- *p = '\0';
-
- while ((ulonglong) val > (ulonglong) LONG_MAX)
- {
- ulonglong quo=(ulonglong) val/(uint) radix;
- uint rem= (uint) (val- quo* (uint) radix);
- *--p = _dig_vec[rem];
- val= quo;
- }
- long_val= (long) val;
- while (long_val != 0)
- {
- long quo= long_val/radix;
- *--p = _dig_vec[(uchar) (long_val - quo*radix)];
- long_val= quo;
- }
- while ((*dst++ = *p++) != 0) ;
- return dst-1;
-}
-
-#endif
-
-#ifndef longlong10_to_str
-char *longlong10_to_str(longlong val,char *dst,int radix)
-{
- char buffer[65];
- register char *p;
- long long_val;
-
- if (radix < 0)
- {
- if (val < 0)
- {
- *dst++ = '-';
- val = -val;
- }
- }
-
- if (val == 0)
- {
- *dst++='0';
- *dst='\0';
- return dst;
- }
- p = &buffer[sizeof(buffer)-1];
- *p = '\0';
-
- while ((ulonglong) val > (ulonglong) LONG_MAX)
- {
- ulonglong quo=(ulonglong) val/(uint) 10;
- uint rem= (uint) (val- quo* (uint) 10);
- *--p = _dig_vec[rem];
- val= quo;
- }
- long_val= (long) val;
- while (long_val != 0)
- {
- long quo= long_val/10;
- *--p = _dig_vec[(uchar) (long_val - quo*10)];
- long_val= quo;
- }
- while ((*dst++ = *p++) != 0) ;
- return dst-1;
-}
-#endif
diff --git a/ext/mysql/libmysql/m_ctype.h b/ext/mysql/libmysql/m_ctype.h
deleted file mode 100644
index e322ac8f1a..0000000000
--- a/ext/mysql/libmysql/m_ctype.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- A better inplementation of the UNIX ctype(3) library.
- Notes: global.h should be included before ctype.h
-*/
-
-#ifndef _m_ctype_h
-#define _m_ctype_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define CHARSET_DIR "charsets/"
-
-typedef struct charset_info_st
-{
- uint number;
- const char *name;
- uchar *ctype;
- uchar *to_lower;
- uchar *to_upper;
- uchar *sort_order;
-
- uint strxfrm_multiply;
- int (*strcoll)(const uchar *, const uchar *);
- int (*strxfrm)(uchar *, const uchar *, int);
- int (*strnncoll)(const uchar *, int, const uchar *, int);
- int (*strnxfrm)(uchar *, const uchar *, int, int);
- my_bool (*like_range)(const char *, uint, pchar, uint,
- char *, char *, uint *, uint *);
-
- uint mbmaxlen;
- int (*ismbchar)(const char *, const char *);
- my_bool (*ismbhead)(uint);
- int (*mbcharlen)(uint);
-} CHARSET_INFO;
-
-/* strings/ctype.c */
-extern CHARSET_INFO *default_charset_info;
-extern CHARSET_INFO *find_compiled_charset(uint cs_number);
-extern CHARSET_INFO *find_compiled_charset_by_name(const char *name);
-extern CHARSET_INFO compiled_charsets[];
-
-#define MY_CHARSET_UNDEFINED 0
-#define MY_CHARSET_CURRENT (default_charset_info->number)
-
-#ifdef __WIN__
-#include <ctype.h>
-#endif
-/* Don't include std ctype.h when this is included */
-#define _CTYPE_H
-#define _CTYPE_H_
-#define _CTYPE_INCLUDED
-#define __CTYPE_INCLUDED
-#define _CTYPE_USING /* Don't put names in global namespace. */
-
-#define _U 01 /* Upper case */
-#define _L 02 /* Lower case */
-#define _N 04 /* Numeral (digit) */
-#define _S 010 /* Spacing character */
-#define _P 020 /* Punctuation */
-#define _C 040 /* Control character */
-#define _B 0100 /* Blank */
-#define _X 0200 /* heXadecimal digit */
-
-#define my_ctype (default_charset_info->ctype)
-#define my_to_upper (default_charset_info->to_upper)
-#define my_to_lower (default_charset_info->to_lower)
-#define my_sort_order (default_charset_info->sort_order)
-
-#ifndef __WIN__
-#define _toupper(c) (char) my_to_upper[(uchar) (c)]
-#define _tolower(c) (char) my_to_lower[(uchar) (c)]
-#define toupper(c) (char) my_to_upper[(uchar) (c)]
-#define tolower(c) (char) my_to_lower[(uchar) (c)]
-
-#define isalpha(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L))
-#define isupper(c) ((my_ctype+1)[(uchar) (c)] & _U)
-#define islower(c) ((my_ctype+1)[(uchar) (c)] & _L)
-#define isdigit(c) ((my_ctype+1)[(uchar) (c)] & _N)
-#define isxdigit(c) ((my_ctype+1)[(uchar) (c)] & _X)
-#define isalnum(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L | _N))
-#define isspace(c) ((my_ctype+1)[(uchar) (c)] & _S)
-#define ispunct(c) ((my_ctype+1)[(uchar) (c)] & _P)
-#define isprint(c) ((my_ctype+1)[(uchar) (c)] & (_P | _U | _L | _N | _B))
-#define isgraph(c) ((my_ctype+1)[(uchar) (c)] & (_P | _U | _L | _N))
-#define iscntrl(c) ((my_ctype+1)[(uchar) (c)] & _C)
-#define isascii(c) (!((c) & ~0177))
-#define toascii(c) ((c) & 0177)
-
-#ifdef ctype
-#undef ctype
-#endif /* ctype */
-
-#endif /* __WIN__ */
-
-#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_U | _L))
-#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _U)
-#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _L)
-#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _N)
-#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _X)
-#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_U | _L | _N))
-#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _S)
-#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _P)
-#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_P | _U | _L | _N | _B))
-#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_P | _U | _L | _N))
-#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _C)
-
-#define use_strcoll(s) ((s)->strcoll != NULL)
-#define MY_STRXFRM_MULTIPLY (default_charset_info->strxfrm_multiply)
-#define my_strnxfrm(s, a, b, c, d) ((s)->strnxfrm((a), (b), (c), (d)))
-#define my_strnncoll(s, a, b, c, d) ((s)->strnncoll((a), (b), (c), (d)))
-#define my_strxfrm(s, a, b, c, d) ((s)->strnxfrm((a), (b), (c)))
-#define my_strcoll(s, a, b) ((s)->strcoll((a), (b)))
-#define my_like_range(s, a, b, c, d, e, f, g, h) \
- ((s)->like_range((a), (b), (c), (d), (e), (f), (g), (h)))
-
-#define use_mb(s) ((s)->ismbchar != NULL)
-#define MBMAXLEN (default_charset_info->mbmaxlen)
-#define my_ismbchar(s, a, b) ((s)->ismbchar((a), (b)))
-#define my_ismbhead(s, a) ((s)->ismbhead((a)))
-#define my_mbcharlen(s, a) ((s)->mbcharlen((a)))
-
-/* Some macros that should be cleaned up a little */
-#define isvar(c) (isalnum(c) || (c) == '_')
-#define isvar_start(c) (isalpha(c) || (c) == '_')
-#define tocntrl(c) ((c) & 31)
-#define toprint(c) ((c) | 64)
-
-/* XXX: still need to take care of this one */
-#ifdef MY_CHARSET_TIS620
-#error The TIS620 charset is broken at the moment. Tell tim to fix it.
-#define USE_TIS620
-#include "t_ctype.h"
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _m_ctype_h */
diff --git a/ext/mysql/libmysql/m_string.h b/ext/mysql/libmysql/m_string.h
deleted file mode 100644
index 1bc3144fdb..0000000000
--- a/ext/mysql/libmysql/m_string.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* There may be prolems include all of theese. Try to test in
- configure with ones are needed? */
-
-/* This is needed for the definitions of strchr... on solaris */
-
-#ifndef _m_string_h
-#define _m_string_h
-#ifndef __USE_GNU
-#define __USE_GNU /* We want to use stpcpy */
-#endif
-#if defined(HAVE_STRINGS_H)
-#include <strings.h>
-#endif
-#if defined(HAVE_STRING_H)
-#include <string.h>
-#endif
-
-/* Correct some things for UNIXWARE7 */
-#ifdef HAVE_UNIXWARE7_THREADS
-#undef HAVE_STRINGS_H
-#undef HAVE_MEMORY_H
-#define HAVE_MEMCPY
-#ifndef HAVE_MEMMOVE
-#define HAVE_MEMMOVE
-#endif
-#undef HAVE_BCMP
-#undef bcopy
-#undef bcmp
-#undef bzero
-#endif /* HAVE_UNIXWARE7_THREADS */
-#ifdef _AIX
-#undef HAVE_BCMP
-#endif
-
-/* This is needed for the definitions of bzero... on solaris */
-#if defined(HAVE_STRINGS_H) && !defined(HAVE_mit_thread)
-#include <strings.h>
-#endif
-
-/* This is needed for the definitions of memcpy... on solaris */
-#if defined(HAVE_MEMORY_H) && !defined(__cplusplus)
-#include <memory.h>
-#endif
-
-#if !defined(HAVE_MEMCPY) && !defined(HAVE_MEMMOVE)
-# define memcpy(d, s, n) bcopy ((s), (d), (n))
-# define memset(A,C,B) bfill((A),(B),(C))
-# define memmove(d, s, n) bmove ((d), (s), (n))
-#elif defined(HAVE_MEMMOVE)
-# define bmove(d, s, n) memmove((d), (s), (n))
-#else
-# define memmove(d, s, n) bmove((d), (s), (n)) /* our bmove */
-#endif
-
-#if defined(HAVE_STPCPY) && !defined(HAVE_mit_thread)
-#define strmov(A,B) stpcpy((A),(B))
-#endif
-
-/* Unixware 7 */
-#if !defined(HAVE_BFILL)
-# define bfill(A,B,C) memset((A),(C),(B))
-# define bmove_allign(A,B,C) memcpy((A),(B),(C))
-#endif
-
-#if !defined(HAVE_BCMP)
-# define bcopy(s, d, n) memcpy((d), (s), (n))
-# define bcmp(A,B,C) memcmp((A),(B),(C))
-# define bzero(A,B) memset((A),0,(B))
-# define bmove_allign(A,B,C) memcpy((A),(B),(C))
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern char NEAR _dig_vec[]; /* Declared in int2str() */
-
-#ifdef BAD_STRING_COMPILER
-#define strmov(A,B) (memccpy(A,B,0,INT_MAX)-1)
-#else
-#define strmov_overlapp(A,B) strmov(A,B)
-#define strmake_overlapp(A,B,C) strmake(A,B,C)
-#endif
-
-#ifdef BAD_MEMCPY /* Problem with gcc on Alpha */
-#define memcpy_fixed(A,B,C) bmove((A),(B),(C))
-#else
-#define memcpy_fixed(A,B,C) memcpy((A),(B),(C))
-#endif
-
-#ifdef MSDOS
-#undef bmove_allign
-#define bmove512(A,B,C) bmove_allign(A,B,C)
-#define my_itoa(A,B,C) itoa(A,B,C)
-#define my_ltoa(A,B,C) ltoa(A,B,C)
-extern void bmove_allign(gptr dst,const gptr src,uint len);
-#endif
-
-#if (!defined(USE_BMOVE512) || defined(HAVE_purify)) && !defined(bmove512)
-#define bmove512(A,B,C) memcpy(A,B,C)
-#endif
-
- /* Prototypes for string functions */
-
-#if !defined(bfill) && !defined(HAVE_BFILL)
-extern void bfill(gptr dst,uint len,pchar fill);
-#endif
-
-#if !defined(bzero) && !defined(HAVE_BZERO)
-extern void bzero(gptr dst,uint len);
-#endif
-
-#if !defined(bcmp) && !defined(HAVE_BCMP)
-extern int bcmp(const char *s1,const char *s2,uint len);
-#ifdef HAVE_purify
-extern int my_bcmp(const char *s1,const char *s2,uint len);
-#define bcmp(A,B,C) my_bcmp((A),(B),(C))
-#endif
-#endif
-
-#ifndef bmove512
-extern void bmove512(gptr dst,const gptr src,uint len);
-#endif
-
-#if !defined(HAVE_BMOVE) && !defined(bmove)
-extern void bmove(char *dst, const char *src,uint len);
-#endif
-
-extern void bmove_upp(char *dst,const char *src,uint len);
-extern void bchange(char *dst,uint old_len,const char *src,
- uint new_len,uint tot_len);
-extern void strappend(char *s,uint len,pchar fill);
-extern char *strend(const char *s);
-extern char *strcend(const char *, pchar);
-extern char *strfield(char *src,int fields,int chars,int blanks,
- int tabch);
-extern char *strfill(my_string s,uint len,pchar fill);
-extern uint strinstr(const char *str,const char *search);
-extern uint r_strinstr(reg1 my_string str,int from, reg4 my_string search);
-extern char *strkey(char *dst,char *head,char *tail,char *flags);
-extern char *strmake(char *dst,const char *src,uint length);
-#ifndef strmake_overlapp
-extern char *strmake_overlapp(char *dst,const char *src, uint length);
-#endif
-
-#ifndef strmov
-extern char *strmov(char *dst,const char *src);
-#endif
-extern char *strnmov(char *dst,const char *src,uint n);
-extern char *strsuff(const char *src,const char *suffix);
-extern char *strcont(const char *src,const char *set);
-extern char *strxcat _VARARGS((char *dst,const char *src, ...));
-extern char *strxmov _VARARGS((char *dst,const char *src, ...));
-extern char *strxcpy _VARARGS((char *dst,const char *src, ...));
-extern char *strxncat _VARARGS((char *dst,uint len, const char *src, ...));
-extern char *strxnmov _VARARGS((char *dst,uint len, const char *src, ...));
-extern char *strxncpy _VARARGS((char *dst,uint len, const char *src, ...));
-
-/* Prototypes of normal stringfunctions (with may ours) */
-
-#ifdef WANT_STRING_PROTOTYPES
-extern char *strcat(char *, const char *);
-extern char *strchr(const char *, pchar);
-extern char *strrchr(const char *, pchar);
-extern char *strcpy(char *, const char *);
-extern int strcmp(const char *, const char *);
-#ifndef __GNUC__
-extern size_t strlen(const char *);
-#endif
-#endif
-#ifndef HAVE_STRNLEN
-extern uint strnlen(const char *s, uint n);
-#endif
-
-#if !defined(__cplusplus)
-#ifndef HAVE_STRPBRK
-extern char *strpbrk(const char *, const char *);
-#endif
-#ifndef HAVE_STRSTR
-extern char *strstr(const char *, const char *);
-#endif
-#endif
-extern int is_prefix(const char *, const char *);
-
-/* Conversion rutins */
-
-#ifdef USE_MY_ITOA
-extern char *my_itoa(int val,char *dst,int radix);
-extern char *my_ltoa(long val,char *dst,int radix);
-#endif
-
-extern char *llstr(longlong value,char *buff);
-#ifndef HAVE_STRTOUL
-extern long strtol(const char *str, char **ptr, int base);
-extern ulong strtoul(const char *str, char **ptr, int base);
-#endif
-
-extern char *int2str(long val,char *dst,int radix);
-extern char *int10_to_str(long val,char *dst,int radix);
-extern char *str2int(const char *src,int radix,long lower,long upper,
- long *val);
-#if SIZEOF_LONG == SIZEOF_LONG_LONG
-#define longlong2str(A,B,C) int2str((A),(B),(C))
-#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C))
-#define strtoll(A,B,C) strtol((A),(B),(C))
-#define strtoull(A,B,C) strtoul((A),(B),(C))
-#ifndef HAVE_STRTOULL
-#define HAVE_STRTOULL
-#endif
-#else
-#ifdef HAVE_LONG_LONG
-extern char *longlong2str(longlong val,char *dst,int radix);
-extern char *longlong10_to_str(longlong val,char *dst,int radix);
-#if (!defined(HAVE_STRTOULL) || defined(HAVE_mit_thread)) || defined(NO_STRTOLL_PROTO)
-extern longlong strtoll(const char *str, char **ptr, int base);
-extern ulonglong strtoull(const char *str, char **ptr, int base);
-#endif
-#endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/ext/mysql/libmysql/mf_casecnv.c b/ext/mysql/libmysql/mf_casecnv.c
deleted file mode 100644
index 3b8e6c6a75..0000000000
--- a/ext/mysql/libmysql/mf_casecnv.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Functions to convert to lover_case and to upper_case in scandinavia.
-
- case_sort converts a character string to a representaion that can
- be compared by strcmp to find with is alfabetical bigger.
- (lower- and uppercase letters is compared as the same)
-*/
-
-#include "mysys_priv.h"
-#include <m_ctype.h>
-
- /* string to uppercase */
-
-void caseup_str(my_string str)
-{
-#ifdef USE_MB
- register uint32 l;
- register char *end=str+(uint) strlen(str);
- if (use_mb(default_charset_info))
- while (*str)
- {
- if ((l=my_ismbchar(default_charset_info, str,end))) str+=l;
- else *str=toupper(*str),++str;
- }
- else
-#endif
- while ((*str = toupper(*str)) != 0)
- str++;
-} /* caseup_str */
-
- /* string to lowercase */
-
-void casedn_str(my_string str)
-{
-#ifdef USE_MB
- register uint32 l;
- register char *end=str+(uint) strlen(str);
- if (use_mb(default_charset_info))
- while (*str)
- {
- if ((l=my_ismbchar(default_charset_info, str,end))) str+=l;
- else *str=tolower(*str),++str;
- }
- else
-#endif
- while ((*str= tolower(*str)) != 0)
- str++;
-} /* casedn_str */
-
-
- /* to uppercase */
-
-void caseup(my_string str, uint length)
-{
-#ifdef USE_MB
- register uint32 l;
- register char *end=str+length;
- if (use_mb(default_charset_info))
- while (str<end)
- {
- if ((l=my_ismbchar(default_charset_info, str,end))) str+=l;
- else *str=toupper(*str),++str;
- }
- else
-#endif
- for ( ; length>0 ; length--, str++)
- *str= toupper(*str);
-} /* caseup */
-
- /* to lowercase */
-
-void casedn(my_string str, uint length)
-{
-#ifdef USE_MB
- register uint32 l;
- register char *end=str+length;
- if (use_mb(default_charset_info))
- while (str<end)
- {
- if ((l=my_ismbchar(default_charset_info, str,end))) str+=l;
- else *str=tolower(*str),++str;
- }
- else
-#endif
- for ( ; length>0 ; length--, str++)
- *str= tolower(*str);
-} /* casedn */
-
- /* to sort-string that can be compared to get text in order */
-
-void case_sort(my_string str, uint length)
-{
- for ( ; length>0 ; length--, str++)
- *str= (char) my_sort_order[(uchar) *str];
-} /* case_sort */
-
- /* find string in another with no case_sensivity */
-
-/* ToDo: This function should be modified to support multibyte charset.
- However it is not used untill 3.23.5.
- Wei He (hewei@mail.ied.ac.cn)
-*/
-
-my_string my_strcasestr(const char *str, const char *search)
-{
- uchar *i,*j,*pos;
-
- pos=(uchar*) str;
-skipp:
- while (*pos != '\0')
- {
- if (toupper((uchar) *pos++) == toupper((uchar) *search))
- {
- i=(uchar*) pos; j=(uchar*) search+1;
- while (*j)
- if (toupper(*i++) != toupper(*j++)) goto skipp;
- return ((char*) pos-1);
- }
- }
- return ((my_string) 0);
-} /* strcstr */
-
-
- /* compare strings without regarding to case */
-
-int my_strcasecmp(const char *s, const char *t)
-{
-#ifdef USE_MB
- register uint32 l;
- register const char *end=s+(uint) strlen(s);
- if (use_mb(default_charset_info))
- {
- while (s<end)
- {
- if ((l=my_ismbchar(default_charset_info, s,end)))
- {
- while (l--)
- if (*s++ != *t++) return 1;
- }
- else if (my_ismbhead(default_charset_info, *t)) return 1;
- else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1;
- }
- return *t;
- }
- else
-#endif
- {
- while (toupper((uchar) *s) == toupper((uchar) *t++))
- if (!*s++) return 0;
- return ((int) toupper((uchar) s[0]) - (int) toupper((uchar) t[-1]));
- }
-}
-
-
-int my_casecmp(const char *s, const char *t, uint len)
-{
-#ifdef USE_MB
- register uint32 l;
- register const char *end=s+len;
- if (use_mb(default_charset_info))
- {
- while (s<end)
- {
- if ((l=my_ismbchar(default_charset_info, s,end)))
- {
- while (l--)
- if (*s++ != *t++) return 1;
- }
- else if (my_ismbhead(default_charset_info, *t)) return 1;
- else if (toupper((uchar) *s++) != toupper((uchar) *t++)) return 1;
- }
- return 0;
- }
- else
-#endif
- {
- while (len-- != 0 && toupper(*s++) == toupper(*t++)) ;
- return (int) len+1;
- }
-}
-
-
-int my_strsortcmp(const char *s, const char *t)
-{
-#ifdef USE_STRCOLL
- if (use_strcoll(default_charset_info))
- return my_strcoll(default_charset_info, (uchar *)s, (uchar *)t);
- else
-#endif
- {
- while (my_sort_order[(uchar) *s] == my_sort_order[(uchar) *t++])
- if (!*s++) return 0;
- return ((int) my_sort_order[(uchar) s[0]] -
- (int) my_sort_order[(uchar) t[-1]]);
- }
-}
-
-int my_sortcmp(const char *s, const char *t, uint len)
-{
-#ifdef USE_STRCOLL
- if (use_strcoll(default_charset_info))
- return my_strnncoll(default_charset_info,
- (uchar *)s, len, (uchar *)t, len);
- else
-#endif
- {
- while (len--)
- {
- if (my_sort_order[(uchar) *s++] != my_sort_order[(uchar) *t++])
- return ((int) my_sort_order[(uchar) s[-1]] -
- (int) my_sort_order[(uchar) t[-1]]);
- }
- return 0;
- }
-}
-
-int my_sortncmp(const char *s, uint s_len, const char *t, uint t_len)
-{
-#ifdef USE_STRCOLL
- if (use_strcoll(default_charset_info))
- return my_strnncoll(default_charset_info,
- (uchar *)s, s_len, (uchar *)t, t_len);
- else
-#endif
- {
- uint len= min(s_len,t_len);
- while (len--)
- {
- if (my_sort_order[(uchar) *s++] != my_sort_order[(uchar) *t++])
- return ((int) my_sort_order[(uchar) s[-1]] -
- (int) my_sort_order[(uchar) t[-1]]);
- }
- return (int) (s_len - t_len);
- }
-}
diff --git a/ext/mysql/libmysql/mf_dirname.c b/ext/mysql/libmysql/mf_dirname.c
deleted file mode 100644
index f4a330ad1b..0000000000
--- a/ext/mysql/libmysql/mf_dirname.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
- /* Functions definied in this file */
-
-uint dirname_length(const char *name)
-{
- register my_string pos,gpos;
-#ifdef FN_DEVCHAR
- if ((pos=strrchr(name,FN_DEVCHAR)) == 0)
-#endif
- pos=(char*) name-1;
-
- gpos= pos++;
- for ( ; *pos ; pos++) /* Find last FN_LIBCHAR */
- if (*pos == FN_LIBCHAR || *pos == '/'
-#ifdef FN_C_AFTER_DIR
- || *pos == FN_C_AFTER_DIR || *pos == FN_C_AFTER_DIR_2
-#endif
- )
- gpos=pos;
- return ((uint) (uint) (gpos+1-(char*) name));
-}
-
-
- /* Gives directory part of filename. Directory ends with '/' */
- /* Returns length of directory part */
-
-uint dirname_part(my_string to, const char *name)
-{
- uint length;
- DBUG_ENTER("dirname_part");
- DBUG_PRINT("enter",("'%s'",name));
-
- length=dirname_length(name);
- (void) strmake(to,(char*) name,min(length,FN_REFLEN-2));
- convert_dirname(to); /* Convert chars */
- DBUG_RETURN(length);
-} /* dirname */
-
-
- /* convert dirname to use under this system */
- /* If MSDOS converts '/' to '\' */
- /* If VMS converts '<' to '[' and '>' to ']' */
- /* Adds a '/' to end if there isn't one and the last isn't a dev_char */
- /* ARGSUSED */
-
-#ifndef FN_DEVCHAR
-#define FN_DEVCHAR '\0' /* For easier code */
-#endif
-
-char *convert_dirname(my_string to)
-{
- reg1 char *pos;
-#ifdef FN_UPPER_CASE
- caseup_str(to);
-#endif
-#ifdef FN_LOWER_CASE
- casedn_str(to);
-#endif
-#if FN_LIBCHAR != '/'
- {
- pos=to-1; /* Change from '/' */
- while ((pos=strchr(pos+1,'/')) != 0)
- *pos=FN_LIBCHAR;
- }
-#endif
-#ifdef FN_C_BEFORE_DIR_2
- {
- for (pos=to ; *pos ; pos++)
- {
- if (*pos == FN_C_BEFORE_DIR_2)
- *pos=FN_C_BEFORE_DIR;
- if (*pos == FN_C_AFTER_DIR_2)
- *pos=FN_C_AFTER_DIR;
- }
- }
-#else
- { /* Append FN_LIBCHAR if not there */
- pos=strend(to);
- if (pos != to && (pos[-1] != FN_LIBCHAR && pos[-1] != FN_DEVCHAR))
- {
- *pos++=FN_LIBCHAR;
- *pos=0;
- }
- }
-#endif
- return pos; /* Pointer to end of dir */
-} /* convert_dirname */
diff --git a/ext/mysql/libmysql/mf_fn_ext.c b/ext/mysql/libmysql/mf_fn_ext.c
deleted file mode 100644
index 71a10108b7..0000000000
--- a/ext/mysql/libmysql/mf_fn_ext.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Returnerar en pekare till filnamnets extension. */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
- /* Return a pointerto the extension of the filename
- The pointer points at the extension character (normally '.'))
- If there isn't any extension, the pointer points at the end
- NULL of the filename
- */
-
-my_string fn_ext(const char *name)
-{
- register my_string pos,gpos;
- DBUG_ENTER("fn_ext");
- DBUG_PRINT("mfunkt",("name: '%s'",name));
-
-#if defined(FN_DEVCHAR) || defined(FN_C_AFTER_DIR)
- {
- char buff[FN_REFLEN];
- gpos=(my_string) name+dirname_part(buff,(char*) name);
- }
-#else
- if (!(gpos=strrchr(name,FNLIBCHAR)))
- gpos=name;
-#endif
- pos=strrchr(gpos,FN_EXTCHAR);
- DBUG_RETURN (pos ? pos : strend(gpos));
-} /* fn_ext */
diff --git a/ext/mysql/libmysql/mf_format.c b/ext/mysql/libmysql/mf_format.c
deleted file mode 100644
index 21ba545797..0000000000
--- a/ext/mysql/libmysql/mf_format.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#ifdef HAVE_REALPATH
-#include <sys/param.h>
-#include <sys/stat.h>
-#endif
-
- /* format a filename with replace of library and extension */
- /* params to and name may be identicall */
- /* function doesn't change name if name != to */
- /* Flag may be: 1 replace filenames library with 'dsk' */
- /* 2 replace extension with 'form' */
- /* 4 Unpack filename (replace ~ with home) */
- /* 8 Pack filename as short as possibly */
- /* 16 Resolve symbolic links for filename */
- /* 32 Resolve filename to full path */
- /* 64 Return NULL if too long path */
-
-#ifdef SCO
-#define BUFF_LEN 4097
-#else
-#ifdef MAXPATHLEN
-#define BUFF_LEN MAXPATHLEN
-#else
-#define BUFF_LEN FN_LEN
-#endif
-#endif
-
-my_string fn_format(my_string to, const char *name, const char *dsk,
- const char *form, int flag)
-{
- reg1 uint length;
- char dev[FN_REFLEN], buff[BUFF_LEN], *pos, *startpos;
- const char *ext;
- DBUG_ENTER("fn_format");
- DBUG_PRINT("enter",("name: %s dsk: %s form: %s flag: %d",
- name,dsk,form,flag));
-
- /* Kopiera & skippa enheten */
- name+=(length=dirname_part(dev,(startpos=(my_string) name)));
- if (length == 0 || flag & 1)
- {
- (void) strmake(dev,dsk, sizeof(dev) - 2);
- /* Use given directory */
- convert_dirname(dev); /* Fix to this OS */
- }
- if (flag & 8)
- pack_dirname(dev,dev); /* Put in ./.. and ~/.. */
- if (flag & 4)
- (void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */
- if ((pos=strchr(name,FN_EXTCHAR)) != NullS)
- {
- if ((flag & 2) == 0) /* Skall vi byta extension ? */
- {
- length=strlength(name); /* Old extension */
- ext = "";
- }
- else
- {
- length=(uint) (pos-(char*) name); /* Change extension */
- ext= form;
- }
- }
- else
- {
- length=strlength(name); /* Har ingen ext- tag nya */
- ext=form;
- }
-
- if (strlen(dev)+length+strlen(ext) >= FN_REFLEN || length >= FN_LEN )
- { /* To long path, return original */
- uint tmp_length;
- if (flag & 64)
- return 0;
- tmp_length=strlength(startpos);
- DBUG_PRINT("error",("dev: '%s' ext: '%s' length: %d",dev,ext,length));
- (void) strmake(to,startpos,min(tmp_length,FN_REFLEN-1));
- }
- else
- {
- if (to == startpos)
- {
- bmove(buff,(char*) name,length); /* Save name for last copy */
- name=buff;
- }
- pos=strmake(strmov(to,dev),name,length);
-#ifdef FN_UPPER_CASE
- caseup_str(to);
-#endif
-#ifdef FN_LOWER_CASE
- casedn_str(to);
-#endif
- (void) strmov(pos,ext); /* Don't convert extension */
- }
- /* Purify gives a lot of UMR errors when using realpath */
-#if defined(HAVE_REALPATH) && !defined(HAVE_purify) && !defined(HAVE_BROKEN_REALPATH)
- if (flag & 16)
- {
- struct stat stat_buff;
- if (flag & 32 || (!lstat(to,&stat_buff) && S_ISLNK(stat_buff.st_mode)))
- {
- if (realpath(to,buff))
- strmake(to,buff,FN_REFLEN-1);
- }
- }
-#endif
- DBUG_RETURN (to);
-} /* fn_format */
-
-
- /*
- strlength(const string str)
- Return length of string with end-space:s not counted.
- */
-
-size_s strlength(const char *str)
-{
- reg1 my_string pos;
- reg2 my_string found;
- DBUG_ENTER("strlength");
-
- pos=found=(char*) str;
-
- while (*pos)
- {
- if (*pos != ' ')
- {
- while (*++pos && *pos != ' ') {};
- if (!*pos)
- {
- found=pos; /* String ends here */
- break;
- }
- }
- found=pos;
- while (*++pos == ' ') {};
- }
- DBUG_RETURN((size_s) (found-(char*) str));
-} /* strlength */
diff --git a/ext/mysql/libmysql/mf_loadpath.c b/ext/mysql/libmysql/mf_loadpath.c
deleted file mode 100644
index 4a1c250b3d..0000000000
--- a/ext/mysql/libmysql/mf_loadpath.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
- /* Returns full load-path for a file. to may be = path */
- /* if path is a hard-path return path */
- /* if path starts with home-dir return path */
- /* if path starts with current dir or parent-dir unpack path */
- /* if there is no path, prepend with own_path_prefix if given */
- /* else unpack path according to current dir */
-
-my_string my_load_path(my_string to, const char *path,
- const char *own_path_prefix)
-{
- char buff[FN_REFLEN];
- DBUG_ENTER("my_load_path");
- DBUG_PRINT("enter",("path: %s prefix: %s",path,
- own_path_prefix ? own_path_prefix : ""));
-
- if ((path[0] == FN_HOMELIB && path[1] == FN_LIBCHAR) ||
- test_if_hard_path(path))
- VOID(strmov(buff,path));
- else if ((path[0] == FN_CURLIB && path[1] == FN_LIBCHAR) ||
- (is_prefix((gptr) path,FN_PARENTDIR) &&
- path[strlen(FN_PARENTDIR)] == FN_LIBCHAR) ||
- ! own_path_prefix)
- {
- if (! my_getwd(buff,(uint) (FN_REFLEN-strlen(path)),MYF(0)))
- VOID(strcat(buff,path));
- else
- VOID(strmov(buff,path));
- }
- else
- VOID(strxmov(buff,own_path_prefix,path,NullS));
- strmov(to,buff);
- DBUG_PRINT("exit",("to: %s",to));
- DBUG_RETURN(to);
-} /* my_load_path */
diff --git a/ext/mysql/libmysql/mf_pack.c b/ext/mysql/libmysql/mf_pack.c
deleted file mode 100644
index b6b079bdac..0000000000
--- a/ext/mysql/libmysql/mf_pack.c
+++ /dev/null
@@ -1,518 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef VMS
-#include <rms.h>
-#include <iodef.h>
-#include <descrip.h>
-#endif /* VMS */
-
-static my_string NEAR_F expand_tilde(my_string *path);
-
- /* Pack a dirname ; Changes HOME to ~/ and current dev to ./ */
- /* from is a dirname (from dirname() ?) ending with FN_LIBCHAR */
- /* to may be == from */
-
-void pack_dirname(my_string to, const char *from)
-{
- int cwd_err;
- uint d_length,length,buff_length;
- my_string start;
- char buff[FN_REFLEN];
- DBUG_ENTER("pack_dirname");
-
- (void) intern_filename(to,from); /* Change to intern name */
-
-#ifdef FN_DEVCHAR
- if ((start=strrchr(to,FN_DEVCHAR)) != 0) /* Skipp device part */
- start++;
- else
-#endif
- start=to;
-
- LINT_INIT(buff_length);
- if (!(cwd_err= my_getwd(buff,FN_REFLEN,MYF(0))))
- {
- buff_length= (uint) strlen(buff);
- d_length=(uint) (start-to);
- if ((start == to ||
- (buff_length == d_length && !bcmp(buff,start,d_length))) &&
- *start != FN_LIBCHAR && *start)
- { /* Put current dir before */
- bchange(to,d_length,buff,buff_length,(uint) strlen(to)+1);
- }
- }
-
- if ((d_length= cleanup_dirname(to,to)) != 0)
- {
- length=0;
- if (home_dir)
- {
- length= (uint) strlen(home_dir);
- if (home_dir[length-1] == FN_LIBCHAR)
- length--; /* Don't test last '/' */
- }
- if (length > 1 && length < d_length)
- { /* test if /xx/yy -> ~/yy */
- if (bcmp(to,home_dir,length) == 0 && to[length] == FN_LIBCHAR)
- {
- to[0]=FN_HOMELIB; /* Filename begins with ~ */
- (void) strmov_overlapp(to+1,to+length);
- }
- }
- if (! cwd_err)
- { /* Test if cwd is ~/... */
- if (length > 1 && length < buff_length)
- {
- if (bcmp(buff,home_dir,length) == 0 && buff[length] == FN_LIBCHAR)
- {
- buff[0]=FN_HOMELIB;
- (void) strmov_overlapp(buff+1,buff+length);
- }
- }
- if (is_prefix(to,buff))
- {
- length= (uint) strlen(buff);
- if (to[length])
- (void) strmov_overlapp(to,to+length); /* Remove everything before */
- else
- {
- to[0]= FN_CURLIB; /* Put ./ instead of cwd */
- to[1]= FN_LIBCHAR;
- to[2]= '\0';
- }
- }
- }
- }
- DBUG_PRINT("exit",("to: '%s'",to));
- DBUG_VOID_RETURN;
-} /* pack_dirname */
-
-
- /* remove unwanted chars from dirname */
- /* if "/../" removes prev dir; "/~/" removes all before ~ */
- /* "//" is same as "/", except on Win32 at start of a file */
- /* "/./" is removed */
- /* Unpacks home_dir if "~/.." used */
- /* Unpacks current dir if if "./.." used */
-
-uint cleanup_dirname(register my_string to, const char *from)
- /* to may be == from */
-
-{
- reg5 uint length;
- reg2 my_string pos;
- reg3 my_string from_ptr;
- reg4 my_string start;
- char parent[5], /* for "FN_PARENTDIR" */
- buff[FN_REFLEN+1],*end_parentdir;
- DBUG_ENTER("cleanup_dirname");
- DBUG_PRINT("enter",("from: '%s'",from));
-
- start=buff;
- from_ptr=(my_string) from;
-#ifdef FN_DEVCHAR
- if ((pos=strrchr(from_ptr,FN_DEVCHAR)) != 0)
- { /* Skipp device part */
- length=(uint) (pos-from_ptr)+1;
- start=strnmov(buff,from_ptr,length); from_ptr+=length;
- }
-#endif
-
- parent[0]=FN_LIBCHAR;
- length=(uint) (strmov(parent+1,FN_PARENTDIR)-parent);
- for (pos=start ; (*pos= *from_ptr++) != 0 ; pos++)
- {
- if (*pos == '/')
- *pos = FN_LIBCHAR;
- if (*pos == FN_LIBCHAR)
- {
- if ((uint) (pos-start) > length && bcmp(pos-length,parent,length) == 0)
- { /* If .../../; skipp prev */
- pos-=length;
- if (pos != start)
- { /* not /../ */
- pos--;
- if (*pos == FN_HOMELIB && (pos == start || pos[-1] == FN_LIBCHAR))
- {
- if (!home_dir)
- {
- pos+=length+1; /* Don't unpack ~/.. */
- continue;
- }
- pos=strmov(buff,home_dir)-1; /* Unpacks ~/.. */
- if (*pos == FN_LIBCHAR)
- pos--; /* home ended with '/' */
- }
- if (*pos == FN_CURLIB && (pos == start || pos[-1] == FN_LIBCHAR))
- {
- if (my_getwd(curr_dir,FN_REFLEN,MYF(0)))
- {
- pos+=length+1; /* Don't unpack ./.. */
- continue;
- }
- pos=strmov(buff,curr_dir)-1; /* Unpacks ./.. */
- if (*pos == FN_LIBCHAR)
- pos--; /* home ended with '/' */
- }
- end_parentdir=pos;
- while (pos >= start && *pos != FN_LIBCHAR) /* remove prev dir */
- pos--;
- if (pos[1] == FN_HOMELIB || bcmp(pos,parent,length) == 0)
- { /* Don't remove ~user/ */
- pos=strmov(end_parentdir+1,parent);
- *pos=FN_LIBCHAR;
- continue;
- }
- }
- }
- else if ((uint) (pos-start) == length-1 &&
- !bcmp(start,parent+1,length-1))
- start=pos; /* Starts with "../" */
- else if (pos-start > 0 && pos[-1] == FN_LIBCHAR)
- {
-#ifdef FN_NETWORK_DRIVES
- if (pos-start != 1)
-#endif
- pos--; /* Remove dupplicate '/' */
- }
- else if (pos-start > 1 && pos[-1] == FN_CURLIB && pos[-2] == FN_LIBCHAR)
- pos-=2; /* Skipp /./ */
- else if (pos > buff+1 && pos[-1] == FN_HOMELIB && pos[-2] == FN_LIBCHAR)
- { /* Found ..../~/ */
- buff[0]=FN_HOMELIB;
- buff[1]=FN_LIBCHAR;
- start=buff; pos=buff+1;
- }
- }
- }
- (void) strmov(to,buff);
- DBUG_PRINT("exit",("to: '%s'",to));
- DBUG_RETURN((uint) (pos-buff));
-} /* cleanup_dirname */
-
-
- /*
- On system where you don't have symbolic links, the following
- code will allow you to create a file:
- directory-name.lnk that should contain the real path
- to the directory. This will be used if the directory name
- doesn't exists
- */
-
-
-my_bool my_use_symdir=0; /* Set this if you want to use symdirs */
-
-#ifdef USE_SYMDIR
-void symdirget(char *dir)
-{
- char buff[FN_REFLEN];
- char *pos=strend(dir);
- if (dir[0] && pos[-1] != FN_DEVCHAR && access(dir, F_OK))
- {
- FILE *fp;
- char temp= *(--pos); /* May be "/" or "\" */
- strmov(pos,".sym");
- fp = my_fopen(dir, O_RDONLY,MYF(0));
- *pos++=temp; *pos=0; /* Restore old filename */
- if (fp)
- {
- if (fgets(buff, sizeof(buff)-1, fp))
- {
- for (pos=strend(buff);
- pos > buff && (iscntrl(pos[-1]) || isspace(pos[-1])) ;
- pos --);
-
- /* Ensure that the symlink ends with the directory symbol */
- if (pos == buff || pos[-1] != FN_LIBCHAR)
- *pos++=FN_LIBCHAR;
-
- strmake(dir,buff, (uint) (pos-buff));
- }
- my_fclose(fp,MYF(0));
- }
- }
-}
-#endif /* USE_SYMDIR */
-
- /* Unpacks dirname to name that can be used by open... */
- /* Make that last char of to is '/' if from not empty and
- from doesn't end in FN_DEVCHAR */
- /* Uses cleanup_dirname and changes ~/.. to home_dir/.. */
- /* Returns length of new directory */
-
-uint unpack_dirname(my_string to, const char *from)
-
- /* to may be == from */
-{
- uint length,h_length;
- char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion;
- DBUG_ENTER("unpack_dirname");
-
- (void) intern_filename(buff,from); /* Change to intern name */
- length= (uint) strlen(buff); /* Fix that '/' is last */
- if (length &&
-#ifdef FN_DEVCHAR
- buff[length-1] != FN_DEVCHAR &&
-#endif
- buff[length-1] != FN_LIBCHAR && buff[length-1] != '/')
- {
- buff[length]=FN_LIBCHAR;
- buff[length+1]= '\0';
- }
-
- length=cleanup_dirname(buff,buff);
- if (buff[0] == FN_HOMELIB)
- {
- suffix=buff+1; tilde_expansion=expand_tilde(&suffix);
- if (tilde_expansion)
- {
- length-=(uint) (suffix-buff)-1;
- if (length+(h_length= (uint) strlen(tilde_expansion)) <= FN_REFLEN)
- {
- if (tilde_expansion[h_length-1] == FN_LIBCHAR)
- h_length--;
- if (buff+h_length < suffix)
- bmove(buff+h_length,suffix,length);
- else
- bmove_upp(buff+h_length+length,suffix+length,length);
- bmove(buff,tilde_expansion,h_length);
- }
- }
- }
-#ifdef USE_SYMDIR
- if (my_use_symdir)
- symdirget(buff);
-#endif
- DBUG_RETURN(system_filename(to,buff)); /* Fix for open */
-} /* unpack_dirname */
-
-
- /* Expand tilde to home or user-directory */
- /* Path is reset to point at FN_LIBCHAR after ~xxx */
-
-static my_string NEAR_F expand_tilde(my_string *path)
-{
- if (path[0][0] == FN_LIBCHAR)
- return home_dir; /* ~/ expanded to home */
-#ifdef HAVE_GETPWNAM
- {
- char *str,save;
- struct passwd *user_entry;
-
- if (!(str=strchr(*path,FN_LIBCHAR)))
- str=strend(*path);
- save= *str; *str= '\0';
- user_entry=getpwnam(*path);
- *str=save;
- endpwent();
- if (user_entry)
- {
- *path=str;
- return user_entry->pw_dir;
- }
- }
-#endif
- return (my_string) 0;
-}
-
- /* fix filename so it can be used by open, create .. */
- /* to may be == from */
- /* Returns to */
-
-my_string unpack_filename(my_string to, const char *from)
-{
- uint length,n_length;
- char buff[FN_REFLEN];
- DBUG_ENTER("unpack_filename");
-
- length=dirname_part(buff,from); /* copy & convert dirname */
- n_length=unpack_dirname(buff,buff);
- if (n_length+strlen(from+length) < FN_REFLEN)
- {
- (void) strmov(buff+n_length,from+length);
- (void) system_filename(to,buff); /* Fix to usably filename */
- }
- else
- (void) system_filename(to,from); /* Fix to usably filename */
- DBUG_RETURN(to);
-} /* unpack_filename */
-
-
- /* Convert filename (unix standard) to system standard */
- /* Used before system command's like open(), create() .. */
- /* Returns to */
-
-uint system_filename(my_string to, const char *from)
-{
-#ifndef FN_C_BEFORE_DIR
- return (uint) (strmake(to,from,FN_REFLEN-1)-to);
-#else /* VMS */
-
- /* change 'dev:lib/xxx' to 'dev:[lib]xxx' */
- /* change 'dev:xxx' to 'dev:xxx' */
- /* change './xxx' to 'xxx' */
- /* change './lib/' or lib/ to '[.lib]' */
- /* change '/x/y/z to '[x.y]x' */
- /* change 'dev:/x' to 'dev:[000000]x' */
-
- int libchar_found,length;
- my_string to_pos,from_pos,pos;
- char buff[FN_REFLEN];
- DBUG_ENTER("system_filename");
-
- libchar_found=0;
- (void) strmov(buff,from); /* If to == from */
- from_pos= buff;
- if ((pos=strrchr(from_pos,FN_DEVCHAR))) /* Skipp device part */
- {
- pos++;
- to_pos=strnmov(to,from_pos,(size_s) (pos-from_pos));
- from_pos=pos;
- }
- else
- to_pos=to;
-
- if (from_pos[0] == FN_CURLIB && from_pos[1] == FN_LIBCHAR)
- from_pos+=2; /* Skipp './' */
- if (strchr(from_pos,FN_LIBCHAR))
- {
- *(to_pos++) = FN_C_BEFORE_DIR;
- if (strinstr(from_pos,FN_ROOTDIR) == 1)
- {
- from_pos+=strlen(FN_ROOTDIR); /* Actually +1 but... */
- if (! strchr(from_pos,FN_LIBCHAR))
- { /* No dir, use [000000] */
- to_pos=strmov(to_pos,FN_C_ROOT_DIR);
- libchar_found++;
- }
- }
- else
- *(to_pos++)=FN_C_DIR_SEP; /* '.' gives current dir */
-
- while ((pos=strchr(from_pos,FN_LIBCHAR)))
- {
- if (libchar_found++)
- *(to_pos++)=FN_C_DIR_SEP; /* Add '.' between dirs */
- if (strinstr(from_pos,FN_PARENTDIR) == 1 &&
- from_pos+strlen(FN_PARENTDIR) == pos)
- to_pos=strmov(to_pos,FN_C_PARENT_DIR); /* Found '../' */
- else
- to_pos=strnmov(to_pos,from_pos,(size_s) (pos-from_pos));
- from_pos=pos+1;
- }
- *(to_pos++)=FN_C_AFTER_DIR;
- }
- length=(int) (strmov(to_pos,from_pos)-to);
- DBUG_PRINT("exit",("name: '%s'",to));
- DBUG_RETURN((uint) length);
-#endif
-} /* system_filename */
-
-
- /* Fix a filename to intern (UNIX format) */
-
-my_string intern_filename(my_string to, const char *from)
-{
-#ifndef VMS
- {
- uint length;
- char buff[FN_REFLEN];
- if (from == to)
- { /* Dirname may destroy from */
- strmov(buff,from);
- from=buff;
- }
- length=dirname_part(to,from); /* Copy dirname & fix chars */
- (void) strcat(to,from+length);
- return (to);
- }
-#else /* VMS */
-
- /* change 'dev:[lib]xxx' to 'dev:lib/xxx' */
- /* change 'dev:xxx' to 'dev:xxx' */
- /* change 'dev:x/y/[.lib]' to 'dev:x/y/lib/ */
- /* change '[.lib]' to './lib/' */
- /* change '[x.y]' or '[x.][y]' or '[x][.y]' to '/x/y/' */
- /* change '[000000.x] or [x.000000]' to '/x/' */
-
- int par_length,root_length;
- my_string pos,from_pos,to_pos,end_pos;
- char buff[FN_REFLEN];
-
- (void) strmov(buff,from);
- convert_dirname(buff); /* change '<>' to '[]' */
- from_pos=buff;
- if ((pos=strrchr(from_pos,FN_DEVCHAR))) /* Skipp device part */
- {
- pos++;
- to_pos=strnmov(to,from_pos,(size_s) (pos-from_pos));
- from_pos=pos;
- }
- else
- to_pos=to;
-
- root_length=strlen(FN_C_ROOT_DIR);
- if ((pos = strchr(from_pos,FN_C_BEFORE_DIR)) &&
- (end_pos = strrchr(pos+1,FN_C_AFTER_DIR)))
- {
- to_pos=strnmov(to_pos,from_pos,(size_s) (pos-from_pos));
- /* Copy all between ':' and '[' */
- from_pos=pos+1;
- if (strinstr(from_pos,FN_C_ROOT_DIR) == 1 &&
- (from_pos[root_length] == FN_C_DIR_SEP ||
- from_pos[root_length] == FN_C_AFTER_DIR))
- {
- from_pos+=root_length+1;
- }
- else if (*from_pos == FN_C_DIR_SEP)
- *(to_pos++) = FN_CURLIB; /* Set ./ first */
- *(to_pos++) = FN_LIBCHAR;
-
- par_length=strlen(FN_C_PARENT_DIR);
- pos=to_pos;
- for (; from_pos <= end_pos ; from_pos++)
- {
- switch (*from_pos) {
- case FN_C_DIR_SEP:
- case FN_C_AFTER_DIR:
- if (pos != to_pos)
- {
- if ((int) (to_pos-pos) == root_length &&
- is_suffix(pos,FN_C_ROOT_DIR))
- to_pos=pos; /* remove root-pos */
- else
- {
- *(to_pos++)=FN_LIBCHAR; /* Find lib */
- pos=to_pos;
- }
- }
- break;
- case FN_C_BEFORE_DIR:
- break;
- case '-': /* *(FN_C_PARENT_DIR): */
- if (to_pos[-1] == FN_LIBCHAR &&
- strncmp(from_pos,FN_C_PARENT_DIR,par_length) == 0)
- { /* Change '-' to '..' */
- to_pos=strmov(to_pos,FN_PARENTDIR);
- *(to_pos++)=FN_LIBCHAR;
- pos=to_pos;
- from_pos+=par_length-1;
- break;
- }
- /* Fall through */
- default:
- *(to_pos++)= *from_pos;
- break;
- }
- }
- }
- (void) strmov(to_pos,from_pos);
- return (to);
-#endif /* VMS */
-} /* intern_filename */
diff --git a/ext/mysql/libmysql/mf_path.c b/ext/mysql/libmysql/mf_path.c
deleted file mode 100644
index c81bfaee04..0000000000
--- a/ext/mysql/libmysql/mf_path.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
-static char *find_file_in_path(char *to,const char *name);
-
- /* Finds where program can find it's files.
- pre_pathname is found by first locking at progname (argv[0]).
- if progname contains path the path is returned.
- else if progname is found in path, return it
- else if progname is given and POSIX environment variable "_" is set
- then path is taken from "_".
- If filename doesn't contain a path append MY_BASEDIR_VERSION or
- MY_BASEDIR if defined, else append "/my/running".
- own_path_name_part is concatinated to result.
- my_path puts result in to and returns to */
-
-my_string my_path(my_string to, const char *progname,
- const char *own_pathname_part)
-{
- my_string start,end,prog;
- DBUG_ENTER("my_path");
-
- start=to; /* Return this */
- if (progname && (dirname_part(to, progname) ||
- find_file_in_path(to,progname) ||
- ((prog=getenv("_")) != 0 && dirname_part(to,prog))))
- {
- VOID(intern_filename(to,to));
- if (!test_if_hard_path(to))
- {
- if (!my_getwd(curr_dir,FN_REFLEN,MYF(0)))
- bchange(to,0,curr_dir, (uint) strlen(curr_dir), (uint) strlen(to)+1);
- }
- }
- else
- {
- if ((end = getenv("MY_BASEDIR_VERSION")) == 0 &&
- (end = getenv("MY_BASEDIR")) == 0)
- {
-#ifdef DEFAULT_BASEDIR
- end= (char*) DEFAULT_BASEDIR;
-#else
- end= (char*) "/my/";
-#endif
- }
- VOID(intern_filename(to,end));
- to=strend(to);
- if (to != start && to[-1] != FN_LIBCHAR)
- *to++ = FN_LIBCHAR;
- VOID(strmov(to,own_pathname_part));
- }
- DBUG_PRINT("exit",("to: '%s'",start));
- DBUG_RETURN(start);
-} /* my_path */
-
-
- /* test if file without filename is found in path */
- /* Returns to if found and to has dirpart if found, else NullS */
-
-#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__)
-#define F_OK 0
-#define PATH_SEP ';'
-#define PROGRAM_EXTENSION ".exe"
-#else
-#define PATH_SEP ':'
-#endif
-
-static char *find_file_in_path(char *to, const char *name)
-{
- char *path,*pos,dir[2];
- const char *ext="";
-
- if (!(path=getenv("PATH")))
- return NullS;
- dir[0]=FN_LIBCHAR; dir[1]=0;
-#ifdef PROGRAM_EXTENSION
- if (!fn_ext(name)[0])
- ext=PROGRAM_EXTENSION;
-#endif
-
- for (pos=path ; (pos=strchr(pos,PATH_SEP)) ; path= ++pos)
- {
- if (path != pos)
- {
- strxmov(strnmov(to,path,(uint) (pos-path)),dir,name,ext,NullS);
- if (!access(to,F_OK))
- {
- to[(uint) (pos-path)+1]=0; /* Return path only */
- return to;
- }
- }
- }
-#ifdef __WIN__
- to[0]=FN_CURLIB;
- strxmov(to+1,dir,name,ext,NullS);
- if (!access(to,F_OK)) /* Test in current dir */
- {
- to[2]=0; /* Leave ".\" */
- return to;
- }
-#endif
- return NullS; /* File not found */
-}
diff --git a/ext/mysql/libmysql/mf_unixpath.c b/ext/mysql/libmysql/mf_unixpath.c
deleted file mode 100644
index 79a99b4323..0000000000
--- a/ext/mysql/libmysql/mf_unixpath.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
- /* convert filename to unix style filename */
- /* If MSDOS converts '\' to '/' */
-
-void to_unix_path(my_string to __attribute__((unused)))
-{
-#if FN_LIBCHAR != '/'
- {
- to--;
- while ((to=strchr(to+1,FN_LIBCHAR)) != 0)
- *to='/';
- }
-#endif
-}
diff --git a/ext/mysql/libmysql/mf_wcomp.c b/ext/mysql/libmysql/mf_wcomp.c
deleted file mode 100644
index 73e847f1c4..0000000000
--- a/ext/mysql/libmysql/mf_wcomp.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Funktions for comparing with wild-cards */
-
-#include "mysys_priv.h"
-
- /* Test if a string is "comparable" to a wild-card string */
- /* returns 0 if the strings are "comparable" */
-
-char wild_many='*';
-char wild_one='?';
-char wild_prefix=0;
-
-int wild_compare(register const char *str, register const char *wildstr)
-{
- reg3 int flag;
- DBUG_ENTER("wild_compare");
-
- while (*wildstr)
- {
- while (*wildstr && *wildstr != wild_many && *wildstr != wild_one)
- {
- if (*wildstr == wild_prefix && wildstr[1])
- wildstr++;
- if (*wildstr++ != *str++) DBUG_RETURN(1);
- }
- if (! *wildstr ) DBUG_RETURN (*str != 0);
- if (*wildstr++ == wild_one)
- {
- if (! *str++) DBUG_RETURN (1); /* One char; skipp */
- }
- else
- { /* Found '*' */
- if (!*wildstr) DBUG_RETURN(0); /* '*' as last char: OK */
- flag=(*wildstr != wild_many && *wildstr != wild_one);
- do
- {
- if (flag)
- {
- char cmp;
- if ((cmp= *wildstr) == wild_prefix && wildstr[1])
- cmp=wildstr[1];
- while (*str && *str != cmp)
- str++;
- if (!*str) DBUG_RETURN (1);
- }
- if (wild_compare(str,wildstr) == 0) DBUG_RETURN (0);
- } while (*str++ && wildstr[0] != wild_many);
- DBUG_RETURN(1);
- }
- }
- DBUG_RETURN (*str != '\0');
-} /* wild_compare */
diff --git a/ext/mysql/libmysql/mulalloc.c b/ext/mysql/libmysql/mulalloc.c
deleted file mode 100644
index 793858afd4..0000000000
--- a/ext/mysql/libmysql/mulalloc.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
- /* Malloc many pointers at the same time */
- /* format myFlags,ptr,length,ptr,length ... until null ptr */
-
-#include "mysys_priv.h"
-#include <stdarg.h>
-
-gptr my_multi_malloc(myf myFlags, ...)
-{
- va_list args;
- char **ptr,*start,*res;
- uint tot_length,length;
- DBUG_ENTER("my_multi_malloc");
-
- va_start(args,myFlags);
- tot_length=0;
- while ((ptr=va_arg(args, char **)))
- {
- length=va_arg(args,uint);
- tot_length+=ALIGN_SIZE(length);
- }
- va_end(args);
-
- if (!(start=(char *) my_malloc(tot_length,myFlags)))
- DBUG_RETURN(0); /* purecov: inspected */
-
- va_start(args,myFlags);
- res=start;
- while ((ptr=va_arg(args, char **)))
- {
- *ptr=res;
- length=va_arg(args,uint);
- res+=ALIGN_SIZE(length);
- }
- va_end(args);
- DBUG_RETURN((gptr) start);
-}
diff --git a/ext/mysql/libmysql/my_alarm.h b/ext/mysql/libmysql/my_alarm.h
deleted file mode 100644
index b0fc91d74f..0000000000
--- a/ext/mysql/libmysql/my_alarm.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- File to include when we want to use alarm or a loop_counter to display
- some information when a program is running
-*/
-#ifndef _my_alarm_h
-#define _my_alarm_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int volatile my_have_got_alarm;
-extern ulong my_time_to_wait_for_lock;
-
-#if defined(HAVE_ALARM) && !defined(NO_ALARM_LOOP)
-#include <signal.h>
-#define ALARM_VARIABLES uint alarm_old=0; \
- sig_return alarm_signal=0
-#define ALARM_INIT my_have_got_alarm=0 ; \
- alarm_old=(uint) alarm(MY_HOW_OFTEN_TO_ALARM); \
- alarm_signal=signal(SIGALRM,my_set_alarm_variable);
-#define ALARM_END VOID(signal(SIGALRM,alarm_signal)); \
- VOID(alarm(alarm_old));
-#define ALARM_TEST my_have_got_alarm
-#ifdef DONT_REMEMBER_SIGNAL
-#define ALARM_REINIT VOID(alarm(MY_HOW_OFTEN_TO_ALARM)); \
- VOID(signal(SIGALRM,my_set_alarm_variable));\
- my_have_got_alarm=0;
-#else
-#define ALARM_REINIT VOID(alarm((uint) MY_HOW_OFTEN_TO_ALARM)); \
- my_have_got_alarm=0;
-#endif /* DONT_REMEMBER_SIGNAL */
-#else
-#define ALARM_VARIABLES long alarm_pos=0,alarm_end_pos=MY_HOW_OFTEN_TO_WRITE-1
-#define ALARM_INIT
-#define ALARM_END
-#define ALARM_TEST (alarm_pos++ >= alarm_end_pos)
-#define ALARM_REINIT alarm_end_pos+=MY_HOW_OFTEN_TO_WRITE
-#endif /* HAVE_ALARM */
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/ext/mysql/libmysql/my_alloc.c b/ext/mysql/libmysql/my_alloc.c
deleted file mode 100644
index a33f86fa00..0000000000
--- a/ext/mysql/libmysql/my_alloc.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Routines to handle mallocing of results which will be freed the same time */
-
-#include <global.h>
-#include <my_sys.h>
-#include <m_string.h>
-
-void init_alloc_root(MEM_ROOT *mem_root, uint block_size, uint pre_alloc_size)
-{
- mem_root->free=mem_root->used=0;
- mem_root->min_malloc=32;
- mem_root->block_size=block_size-MALLOC_OVERHEAD-sizeof(USED_MEM)-8;
- mem_root->error_handler=0;
-#if !(defined(HAVE_purify) && defined(EXTRA_DEBUG))
- if (pre_alloc_size)
- {
- if ((mem_root->free = mem_root->pre_alloc=
- (USED_MEM*) my_malloc(pre_alloc_size+ ALIGN_SIZE(sizeof(USED_MEM)),
- MYF(0))))
- {
- mem_root->free->size=pre_alloc_size+ALIGN_SIZE(sizeof(USED_MEM));
- mem_root->free->left=pre_alloc_size;
- mem_root->free->next=0;
- }
- }
-#endif
-}
-
-gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size)
-{
-#if defined(HAVE_purify) && defined(EXTRA_DEBUG)
- reg1 USED_MEM *next;
- Size+=ALIGN_SIZE(sizeof(USED_MEM));
-
- if (!(next = (USED_MEM*) my_malloc(Size,MYF(MY_WME))))
- {
- if (mem_root->error_handler)
- (*mem_root->error_handler)();
- return((gptr) 0); /* purecov: inspected */
- }
- next->next=mem_root->used;
- mem_root->used=next;
- return (gptr) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM)));
-#else
- uint get_size,max_left;
- gptr point;
- reg1 USED_MEM *next;
- reg2 USED_MEM **prev;
-
- Size= ALIGN_SIZE(Size);
- prev= &mem_root->free;
- max_left=0;
- for (next= *prev ; next && next->left < Size ; next= next->next)
- {
- if (next->left > max_left)
- max_left=next->left;
- prev= &next->next;
- }
- if (! next)
- { /* Time to alloc new block */
- get_size= Size+ALIGN_SIZE(sizeof(USED_MEM));
- if (max_left*4 < mem_root->block_size && get_size < mem_root->block_size)
- get_size=mem_root->block_size; /* Normal alloc */
-
- if (!(next = (USED_MEM*) my_malloc(get_size,MYF(MY_WME))))
- {
- if (mem_root->error_handler)
- (*mem_root->error_handler)();
- return((gptr) 0); /* purecov: inspected */
- }
- next->next= *prev;
- next->size= get_size;
- next->left= get_size-ALIGN_SIZE(sizeof(USED_MEM));
- *prev=next;
- }
- point= (gptr) ((char*) next+ (next->size-next->left));
- if ((next->left-= Size) < mem_root->min_malloc)
- { /* Full block */
- *prev=next->next; /* Remove block from list */
- next->next=mem_root->used;
- mem_root->used=next;
- }
- return(point);
-#endif
-}
-
- /* deallocate everything used by alloc_root */
-
-void free_root(MEM_ROOT *root, myf MyFlags)
-{
- reg1 USED_MEM *next,*old;
- DBUG_ENTER("free_root");
-
- if (!root)
- DBUG_VOID_RETURN; /* purecov: inspected */
- if (!(MyFlags & MY_KEEP_PREALLOC))
- root->pre_alloc=0;
-
- for ( next=root->used; next ;)
- {
- old=next; next= next->next ;
- if (old != root->pre_alloc)
- my_free((gptr) old,MYF(0));
- }
- for (next= root->free ; next ; )
- {
- old=next; next= next->next ;
- if (old != root->pre_alloc)
- my_free((gptr) old,MYF(0));
- }
- root->used=root->free=0;
- if (root->pre_alloc)
- {
- root->free=root->pre_alloc;
- root->free->left=root->pre_alloc->size-ALIGN_SIZE(sizeof(USED_MEM));
- root->free->next=0;
- }
- DBUG_VOID_RETURN;
-}
-
-
-char *strdup_root(MEM_ROOT *root,const char *str)
-{
- uint len= (uint) strlen(str)+1;
- char *pos;
- if ((pos=alloc_root(root,len)))
- memcpy(pos,str,len);
- return pos;
-}
-
-
-char *memdup_root(MEM_ROOT *root,const char *str,uint len)
-{
- char *pos;
- if ((pos=alloc_root(root,len)))
- memcpy(pos,str,len);
- return pos;
-}
diff --git a/ext/mysql/libmysql/my_compress.c b/ext/mysql/libmysql/my_compress.c
deleted file mode 100644
index 3aa7ba9491..0000000000
--- a/ext/mysql/libmysql/my_compress.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Written by Sinisa Milivojevic <sinisa@coresinc.com> */
-
-#include <global.h>
-#ifdef HAVE_COMPRESS
-#include <my_sys.h>
-#include <zlib.h>
-
-/*
-** This replaces the packet with a compressed packet
-** Returns 1 on error
-** *complen is 0 if the packet wasn't compressed
-*/
-
-my_bool my_compress(byte *packet, ulong *len, ulong *complen)
-{
- if (*len < MIN_COMPRESS_LENGTH)
- *complen=0;
- else
- {
- byte *compbuf=my_compress_alloc(packet,len,complen);
- if (!compbuf)
- return *complen ? 0 : 1;
- memcpy(packet,compbuf,*len);
- my_free(compbuf,MYF(MY_WME)); }
- return 0;
-}
-
-
-byte *my_compress_alloc(const byte *packet, ulong *len, ulong *complen)
-{
- byte *compbuf;
- *complen = *len * 120 / 100 + 12;
- if (!(compbuf = (byte *) my_malloc(*complen,MYF(MY_WME))))
- return 0; /* Not enough memory */
- if (compress((Bytef*) compbuf,(ulong *) complen, (Bytef*) packet,
- (uLong) *len ) != Z_OK)
- {
- my_free(compbuf,MYF(MY_WME));
- return 0;
- }
- if (*complen >= *len)
- {
- *complen=0;
- my_free(compbuf,MYF(MY_WME));
- return 0;
- }
- swap(ulong,*len,*complen); /* *len is now packet length */
- return compbuf;
-}
-
-
-my_bool my_uncompress (byte *packet, ulong *len, ulong *complen)
-{
- if (*complen) /* If compressed */
- {
- byte *compbuf = (byte *) my_malloc (*complen,MYF(MY_WME));
- if (!compbuf)
- return 1; /* Not enough memory */
- if (uncompress((Bytef*) compbuf, complen, (Bytef*) packet, *len) != Z_OK)
- { /* Probably wrong packet */
- my_free (compbuf,MYF(MY_WME));
- return 1;
- }
- *len = *complen;
- memcpy(packet,compbuf,*len);
- my_free(compbuf,MYF(MY_WME));
- }
- return 0;
-}
-#endif /* HAVE_COMPRESS */
diff --git a/ext/mysql/libmysql/my_config.h b/ext/mysql/libmysql/my_config.h
deleted file mode 100644
index 73a3f6d66e..0000000000
--- a/ext/mysql/libmysql/my_config.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <php_config.h>
-
-/* PHP might define ulong, but we want to use our own typedef */
-#ifdef ulong
-#undef ulong
-#endif
-
-/* The client doesn't use multiple charsets, so only the compiled-in
- default is really needed */
-#define SHAREDIR "NONEXISTENT"
-#define DEFAULT_CHARSET_HOME SHAREDIR
diff --git a/ext/mysql/libmysql/my_create.c b/ext/mysql/libmysql/my_create.c
deleted file mode 100644
index a0a24f6ad9..0000000000
--- a/ext/mysql/libmysql/my_create.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#define USES_TYPES
-#include "mysys_priv.h"
-#include <my_dir.h>
-#include "mysys_err.h"
-#include <errno.h>
-#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__)
-#include <share.h>
-#endif
-
- /*
- ** Create a new file
- ** Arguments:
- ** Path-name of file
- ** Read | write on file (umask value)
- ** Read & Write on open file
- ** Special flags
- */
-
-
-File my_create(const char *FileName, int CreateFlags, int access_flags,
- myf MyFlags)
-{
- int fd;
- DBUG_ENTER("my_create");
- DBUG_PRINT("my",("Name: '%s' CreateFlags: %d AccessFlags: %d MyFlags: %d",
- FileName, CreateFlags, access_flags, MyFlags));
-
-#if !defined(NO_OPEN_3) && !defined(__EMX__)
- fd = open((my_string) FileName, access_flags | O_CREAT,
- CreateFlags ? CreateFlags : my_umask);
-#elif defined(VMS)
- fd = open((my_string) FileName, access_flags | O_CREAT, 0,
- "ctx=stm","ctx=bin");
-#elif defined(MSDOS) || defined(__WIN__) || defined(__EMX__)
- if (access_flags & O_SHARE)
- fd = sopen((my_string) FileName, access_flags | O_CREAT | O_BINARY,
- SH_DENYNO, MY_S_IREAD | MY_S_IWRITE);
- else
- fd = open((my_string) FileName, access_flags | O_CREAT | O_BINARY,
- MY_S_IREAD | MY_S_IWRITE);
-#else
- fd = open(FileName, access_flags);
-#endif
-
- DBUG_RETURN(my_register_filename(fd, FileName, FILE_BY_CREATE,
- EE_CANTCREATEFILE, MyFlags));
-} /* my_create */
diff --git a/ext/mysql/libmysql/my_delete.c b/ext/mysql/libmysql/my_delete.c
deleted file mode 100644
index f1ffada90f..0000000000
--- a/ext/mysql/libmysql/my_delete.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-
-#include "mysys_err.h"
-
-int my_delete(const char *name, myf MyFlags)
-{
- int err;
- DBUG_ENTER("my_delete");
- DBUG_PRINT("my",("name %s MyFlags %d", name, MyFlags));
-
- if ((err = unlink(name)) == -1)
- {
- my_errno=errno;
- if (MyFlags & (MY_FAE+MY_WME))
- my_error(EE_DELETE,MYF(ME_BELL+ME_WAITTANG+(MyFlags & ME_NOINPUT)),
- name,errno);
- }
- DBUG_RETURN(err);
-} /* my_delete */
diff --git a/ext/mysql/libmysql/my_dir.h b/ext/mysql/libmysql/my_dir.h
deleted file mode 100644
index e0c79dadfe..0000000000
--- a/ext/mysql/libmysql/my_dir.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifndef _my_dir_h
-#define _my_dir_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef MY_DIR_H
-#define MY_DIR_H
-
-#include <sys/stat.h>
-
- /* Defines for my_dir and my_stat */
-
-#define MY_S_IFMT S_IFMT /* type of file */
-#define MY_S_IFDIR S_IFDIR /* directory */
-#define MY_S_IFCHR S_IFCHR /* character special */
-#define MY_S_IFBLK S_IFBLK /* block special */
-#define MY_S_IFREG S_IFREG /* regular */
-#define MY_S_IFIFO S_IFIFO /* fifo */
-#define MY_S_ISUID S_ISUID /* set user id on execution */
-#define MY_S_ISGID S_ISGID /* set group id on execution */
-#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */
-#define MY_S_IREAD S_IREAD /* read permission, owner */
-#define MY_S_IWRITE S_IWRITE /* write permission, owner */
-#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */
-
-#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR)
-#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR)
-#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK)
-#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG)
-#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO)
-
-#define MY_DONT_SORT 512 /* my_lib; Don't sort files */
-#define MY_WANT_STAT 1024 /* my_lib; stat files */
-
- /* typedefs for my_dir & my_stat */
-
-#ifdef USE_MY_STAT_STRUCT
-
-typedef struct my_stat
-{
- dev_t st_dev; /* major & minor device numbers */
- ino_t st_ino; /* inode number */
- ushort st_mode; /* file permissons (& suid sgid .. bits) */
- short st_nlink; /* number of links to file */
- ushort st_uid; /* user id */
- ushort st_gid; /* group id */
- dev_t st_rdev; /* more major & minor device numbers (???) */
- off_t st_size; /* size of file */
- time_t st_atime; /* time for last read */
- time_t st_mtime; /* time for last contens modify */
- time_t st_ctime; /* time for last inode or contents modify */
-} MY_STAT;
-
-#else
-
-#define MY_STAT struct stat /* Orginal struct have what we need */
-
-#endif /* USE_MY_STAT_STRUCT */
-
-typedef struct fileinfo /* Struct returned from my_dir & my_stat */
-{
- char *name;
- MY_STAT mystat;
-} FILEINFO;
-
-typedef struct st_my_dir /* Struct returned from my_dir */
-{
- struct fileinfo *dir_entry;
- uint number_off_files;
-} MY_DIR;
-
-extern MY_DIR *my_dir(const char *path,myf MyFlags);
-extern void my_dirend(MY_DIR *buffer);
-extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags);
-extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags);
-
-#endif /* MY_DIR_H */
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/ext/mysql/libmysql/my_div.c b/ext/mysql/libmysql/my_div.c
deleted file mode 100644
index fc3ad59b4a..0000000000
--- a/ext/mysql/libmysql/my_div.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-
-my_string my_filename(File fd)
-{
- DBUG_ENTER("my_filename");
- if (fd >= MY_NFILE)
- DBUG_RETURN((char*) "UNKNOWN");
- if (fd >= 0 && my_file_info[fd].type != UNOPEN)
- {
- DBUG_RETURN(my_file_info[fd].name);
- }
- else
- DBUG_RETURN((char*) "UNOPENED"); /* Debug message */
-}
diff --git a/ext/mysql/libmysql/my_error.c b/ext/mysql/libmysql/my_error.c
deleted file mode 100644
index 21dc3ec268..0000000000
--- a/ext/mysql/libmysql/my_error.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <m_string.h>
-#include <stdarg.h>
-#include <m_ctype.h>
-
-/* Define some external variables for error handling */
-
-const char ** NEAR my_errmsg[MAXMAPS]={0,0,0,0};
-char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
-
-/* Error message to user */
-/*VARARGS2*/
-
-int my_error(int nr,myf MyFlags, ...)
-{
- va_list ap;
- uint olen, plen;
- reg1 const char *tpos;
- reg2 char *endpos;
- char * par;
- char ebuff[ERRMSGSIZE+20];
- DBUG_ENTER("my_error");
-
- va_start(ap,MyFlags);
- DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno));
-
- if (nr / ERRMOD == GLOB && my_errmsg[GLOB] == 0)
- init_glob_errs();
-
- olen=(uint) strlen(tpos=my_errmsg[nr / ERRMOD][nr % ERRMOD]);
- endpos=ebuff;
-
- while (*tpos)
- {
- if (tpos[0] != '%')
- {
- *endpos++= *tpos++; /* Copy ordinary char */
- olen++;
- continue;
- }
- if (*++tpos == '%') /* test if %% */
- {
- olen--;
- }
- else
- {
- /* Skipp if max size is used (to be compatible with printf) */
- while (isdigit(*tpos) || *tpos == '.' || *tpos == '-')
- tpos++;
- if (*tpos == 'l') /* Skipp 'l' argument */
- tpos++;
- if (*tpos == 's') /* String parameter */
- {
- par = va_arg(ap, char *);
- plen = (uint) strlen(par);
- if (olen + plen < ERRMSGSIZE+2) /* Replace if possible */
- {
- endpos=strmov(endpos,par);
- tpos++;
- olen+=plen-2;
- continue;
- }
- }
- else if (*tpos == 'd' || *tpos == 'u') /* Integer parameter */
- {
- register int iarg;
- iarg = va_arg(ap, int);
- if (*tpos == 'd')
- plen= (uint) (int2str((long) iarg,endpos, -10) - endpos);
- else
- plen= (uint) (int2str((long) (uint) iarg,endpos,10)- endpos);
- if (olen + plen < ERRMSGSIZE+2) /* Replace parameter if possible */
- {
- endpos+=plen;
- tpos++;
- olen+=plen-2;
- continue;
- }
- }
- }
- *endpos++='%'; /* % used as % or unknown code */
- }
- *endpos='\0'; /* End of errmessage */
- va_end(ap);
- DBUG_RETURN((*error_handler_hook)(nr, ebuff, MyFlags));
-}
-
- /* Error as printf */
-
-int my_printf_error (uint error, const char *format, myf MyFlags, ...)
-{
- va_list args;
- char ebuff[ERRMSGSIZE+20];
-
- va_start(args,MyFlags);
- (void) vsprintf (ebuff,format,args);
- va_end(args);
- return (*error_handler_hook)(error, ebuff, MyFlags);
-}
-
- /* Give message using error_handler_hook */
-
-int my_message(uint error, const char *str, register myf MyFlags)
-{
- return (*error_handler_hook)(error, str, MyFlags);
-}
diff --git a/ext/mysql/libmysql/my_fopen.c b/ext/mysql/libmysql/my_fopen.c
deleted file mode 100644
index 5e6cd6682a..0000000000
--- a/ext/mysql/libmysql/my_fopen.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "my_static.h"
-#include <errno.h>
-#include "mysys_err.h"
-
-static void make_ftype(my_string to,int flag);
-
- /* Open a file as stream */
-
-FILE *my_fopen(const char *FileName, int Flags, myf MyFlags)
- /* Path-name of file */
- /* Read | write .. */
- /* Special flags */
-{
- FILE *fd;
- char type[5];
- DBUG_ENTER("my_fopen");
- DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d",
- FileName, Flags, MyFlags));
-
- make_ftype(type,Flags);
- if ((fd = fopen(FileName, type)) != 0)
- {
- /*
- The test works if MY_NFILE < 128. The problem is that fileno() is char
- on some OS (SUNOS). Actually the filename save isn't that important
- so we can ignore if this doesn't work.
- */
- if ((uint) fileno(fd) >= MY_NFILE)
- {
- thread_safe_increment(my_stream_opened,&THR_LOCK_open);
- DBUG_RETURN(fd); /* safeguard */
- }
- pthread_mutex_lock(&THR_LOCK_open);
- if ((my_file_info[fileno(fd)].name = (char*)
- my_strdup(FileName,MyFlags)))
- {
- my_stream_opened++;
- my_file_info[fileno(fd)].type = STREAM_BY_FOPEN;
- pthread_mutex_unlock(&THR_LOCK_open);
- DBUG_PRINT("exit",("stream: %lx",fd));
- DBUG_RETURN(fd);
- }
- pthread_mutex_unlock(&THR_LOCK_open);
- (void) my_fclose(fd,MyFlags);
- my_errno=ENOMEM;
- }
- else
- my_errno=errno;
- DBUG_PRINT("error",("Got error %d on open",my_errno));
- if (MyFlags & (MY_FFNF | MY_FAE | MY_WME))
- my_error((Flags & O_RDONLY) || (Flags == O_RDONLY ) ? EE_FILENOTFOUND :
- EE_CANTCREATEFILE,
- MYF(ME_BELL+ME_WAITTANG), FileName,my_errno);
- DBUG_RETURN((FILE*) 0);
-} /* my_fopen */
-
-
- /* Close a stream */
-
-int my_fclose(FILE *fd, myf MyFlags)
-{
- int err,file;
- DBUG_ENTER("my_fclose");
- DBUG_PRINT("my",("stream: %lx MyFlags: %d",fd, MyFlags));
-
- pthread_mutex_lock(&THR_LOCK_open);
- file=fileno(fd);
- if ((err = fclose(fd)) < 0)
- {
- my_errno=errno;
- if (MyFlags & (MY_FAE | MY_WME))
- my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG),
- my_filename(file),errno);
- }
- else
- my_stream_opened--;
- if ((uint) file < MY_NFILE && my_file_info[file].type != UNOPEN)
- {
- my_file_info[file].type = UNOPEN;
- my_free(my_file_info[file].name, MYF(MY_ALLOW_ZERO_PTR));
- }
- pthread_mutex_unlock(&THR_LOCK_open);
- DBUG_RETURN(err);
-} /* my_fclose */
-
-
- /* Make a stream out of a file handle */
- /* Name may be 0 */
-
-FILE *my_fdopen(File Filedes, const char *name, int Flags, myf MyFlags)
-{
- FILE *fd;
- char type[5];
- DBUG_ENTER("my_fdopen");
- DBUG_PRINT("my",("Fd: %d Flags: %d MyFlags: %d",
- Filedes, Flags, MyFlags));
-
- make_ftype(type,Flags);
- if ((fd = fdopen(Filedes, type)) == 0)
- {
- my_errno=errno;
- if (MyFlags & (MY_FAE | MY_WME))
- my_error(EE_CANT_OPEN_STREAM, MYF(ME_BELL+ME_WAITTANG),errno);
- }
- else
- {
- pthread_mutex_lock(&THR_LOCK_open);
- my_stream_opened++;
- if (Filedes < MY_NFILE)
- {
- if (my_file_info[Filedes].type != UNOPEN)
- {
- my_file_opened--; /* File is opened with my_open ! */
- }
- else
- {
- my_file_info[Filedes].name= my_strdup(name,MyFlags);
- }
- my_file_info[Filedes].type = STREAM_BY_FDOPEN;
- }
- pthread_mutex_unlock(&THR_LOCK_open);
- }
-
- DBUG_PRINT("exit",("stream: %lx",fd));
- DBUG_RETURN(fd);
-} /* my_fdopen */
-
-
- /* Make a filehandler-open-typestring from ordinary inputflags */
-
-static void make_ftype(register my_string to, register int flag)
-{
-#if FILE_BINARY /* If we have binary-files */
- reg3 int org_flag=flag;
-#endif
- flag&= ~FILE_BINARY; /* remove binary bit */
- if (flag == O_RDONLY)
- *to++= 'r';
- else if (flag == O_WRONLY)
- *to++= 'w';
- else
- { /* Add '+' after theese */
- if (flag == O_RDWR)
- *to++= 'r';
- else if (flag & O_APPEND)
- *to++= 'a';
- else
- *to++= 'w'; /* Create file */
- *to++= '+';
- }
-#if FILE_BINARY /* If we have binary-files */
- if (org_flag & FILE_BINARY)
- *to++='b';
-#endif
- *to='\0';
-} /* make_ftype */
diff --git a/ext/mysql/libmysql/my_getwd.c b/ext/mysql/libmysql/my_getwd.c
deleted file mode 100644
index 9e87c4d201..0000000000
--- a/ext/mysql/libmysql/my_getwd.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* my_setwd() and my_getwd() works with intern_filenames !! */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#include "mysys_err.h"
-#ifdef HAVE_GETWD
-#include <sys/param.h>
-#endif
-#if defined(MSDOS) || defined(__WIN__)
-#include <m_ctype.h>
-#include <dos.h>
-#include <direct.h>
-#endif
-
-#ifdef __EMX__
-// chdir2 support also drive change
-#define chdir _chdir2
-#endif
-
- /* Gets current working directory in buff. Directory is allways ended
- with FN_LIBCHAR */
- /* One must pass a buffer to my_getwd. One can allways use
- curr_dir[] */
-
-int my_getwd(my_string buf, uint size, myf MyFlags)
-{
- my_string pos;
- DBUG_ENTER("my_getwd");
- DBUG_PRINT("my",("buf: %lx size: %d MyFlags %d", buf,size,MyFlags));
-
-#if ! defined(MSDOS)
- if (curr_dir[0]) /* Current pos is saved here */
- VOID(strmake(buf,&curr_dir[0],size-1));
- else
-#endif
- {
-#if defined(HAVE_GETCWD)
- if (!getcwd(buf,size-2) && MyFlags & MY_WME)
- {
- my_errno=errno;
- my_error(EE_GETWD,MYF(ME_BELL+ME_WAITTANG),errno);
- return(-1);
- }
-#elif defined(HAVE_GETWD)
- {
- char pathname[MAXPATHLEN];
- getwd(pathname);
- strmake(buf,pathname,size-1);
- }
-#elif defined(VMS)
- if (!getcwd(buf,size-2,1) && MyFlags & MY_WME)
- {
- my_errno=errno;
- my_error(EE_GETWD,MYF(ME_BELL+ME_WAITTANG),errno);
- return(-1);
- }
- intern_filename(buf,buf);
-#else
-#error "No way to get current directory"
-#endif
- if (*((pos=strend(buf))-1) != FN_LIBCHAR) /* End with FN_LIBCHAR */
- {
- pos[0]= FN_LIBCHAR;
- pos[1]=0;
- }
- (void) strmake(&curr_dir[0],buf,(size_s) (FN_REFLEN-1));
- }
- DBUG_RETURN(0);
-} /* my_getwd */
-
-
- /* Set new working directory */
-
-int my_setwd(const char *dir, myf MyFlags)
-{
- int res;
- size_s length;
- my_string start,pos;
-#if defined(VMS) || defined(MSDOS)
- char buff[FN_REFLEN];
-#endif
- DBUG_ENTER("my_setwd");
- DBUG_PRINT("my",("dir: '%s' MyFlags %d", dir, MyFlags));
-
- start=(my_string) dir;
-#if defined(MSDOS) /* MSDOS chdir can't change drive */
-#if !defined(_DDL) && !defined(WIN32)
- if ((pos=strchr(dir,FN_DEVCHAR)) != 0)
- {
- uint drive,drives;
-
- pos++; /* Skipp FN_DEVCHAR */
- drive=(uint) (toupper(dir[0])-'A'+1); drives= (uint) -1;
- if ((pos-(byte*) dir) == 2 && drive > 0 && drive < 32)
- {
- _dos_setdrive(drive,&drives);
- _dos_getdrive(&drives);
- }
- if (drive != drives)
- {
- *pos='\0'; /* Dir is now only drive */
- my_errno=errno;
- my_error(EE_SETWD,MYF(ME_BELL+ME_WAITTANG),dir,ENOENT);
- DBUG_RETURN(-1);
- }
- dir=pos; /* drive changed, change now path */
- }
-#endif
- if (*((pos=strend(dir)-1)) == FN_LIBCHAR && pos != dir)
- {
- strmov(buff,dir)[-1]=0; /* Remove last '/' */
- dir=buff;
- }
-#endif /* MSDOS*/
- if (! dir[0] || (dir[0] == FN_LIBCHAR && dir[1] == 0))
- dir=FN_ROOTDIR;
-#ifdef VMS
- {
- pos=strmov(buff,dir);
- if (pos[-1] != FN_LIBCHAR)
- {
- pos[0]=FN_LIBCHAR; /* Mark as directory */
- pos[1]=0;
- }
- system_filename(buff,buff); /* Change to VMS format */
- dir=buff;
- }
-#endif /* VMS */
- if ((res=chdir((char*) dir)) != 0)
- {
- my_errno=errno;
- if (MyFlags & MY_WME)
- my_error(EE_SETWD,MYF(ME_BELL+ME_WAITTANG),start,errno);
- }
- else
- {
- if (test_if_hard_path(start))
- { /* Hard pathname */
- pos=strmake(&curr_dir[0],start,(size_s) FN_REFLEN-1);
- if (pos[-1] != FN_LIBCHAR)
- {
- length=(uint) (pos-(char*) curr_dir);
- curr_dir[length]=FN_LIBCHAR; /* must end with '/' */
- curr_dir[length+1]='\0';
- }
- }
- else
- curr_dir[0]='\0'; /* Don't save name */
- }
- DBUG_RETURN(res);
-} /* my_setwd */
-
-
-
- /* Test if hard pathname */
- /* Returns 1 if dirname is a hard path */
-
-int test_if_hard_path(register const char *dir_name)
-{
- if (dir_name[0] == FN_HOMELIB && dir_name[1] == FN_LIBCHAR)
- return (home_dir != NullS && test_if_hard_path(home_dir));
- if (dir_name[0] == FN_LIBCHAR)
- return (TRUE);
-#ifdef FN_DEVCHAR
- return (strchr(dir_name,FN_DEVCHAR) != 0);
-#else
- return FALSE;
-#endif
-} /* test_if_hard_path */
diff --git a/ext/mysql/libmysql/my_init.c b/ext/mysql/libmysql/my_init.c
deleted file mode 100644
index 9bccb2c652..0000000000
--- a/ext/mysql/libmysql/my_init.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "my_static.h"
-#include "mysys_err.h"
-#include "m_ctype.h"
-#include <m_string.h>
-#include <m_ctype.h>
-#ifdef THREAD
-#include <my_pthread.h>
-#endif
-#ifdef HAVE_GETRUSAGE
-#include <sys/resource.h>
-/* extern int getrusage(int, struct rusage *); */
-#endif
-#include <signal.h>
-#ifdef VMS
-#include <my_static.c>
-#include <m_ctype.h>
-#endif
-#ifdef __WIN__
-#ifdef _MSC_VER
-#include <locale.h>
-#include <crtdbg.h>
-#endif
-my_bool have_tcpip=0;
-static void my_win_init(void);
-static my_bool win32_have_tcpip(void);
-static my_bool win32_init_tcp_ip();
-#else
-#define my_win_init()
-#endif
-static my_bool my_init_done=0;
-
-
-
-static ulong atoi_octal(const char *str)
-{
- long int tmp;
- while (*str && isspace(*str))
- str++;
- str2int(str,
- (*str == '0' ? 8 : 10), /* Octalt or decimalt */
- 0, INT_MAX, &tmp);
- return (ulong) tmp;
-}
-
-
- /* Init my_sys functions and my_sys variabels */
-
-void my_init(void)
-{
- my_string str;
- if (my_init_done)
- return;
- my_init_done=1;
-#ifdef THREAD
-#if defined(HAVE_PTHREAD_INIT)
- pthread_init(); /* Must be called before DBUG_ENTER */
-#endif
- my_thread_global_init();
-#ifndef __WIN__
- sigfillset(&my_signals); /* signals blocked by mf_brkhant */
-#endif
-#endif /* THREAD */
-#ifdef UNIXWARE_7
- (void) isatty(0); /* Go around connect() bug in UW7 */
-#endif
- {
- DBUG_ENTER("my_init");
- DBUG_PROCESS(my_progname ? my_progname : (char*) "unknown");
- if (!home_dir)
- { /* Don't initialize twice */
- my_win_init();
- if ((home_dir=getenv("HOME")) != 0)
- home_dir=intern_filename(home_dir_buff,home_dir);
-#ifndef VMS
- /* Default creation of new files */
- if ((str=getenv("UMASK")) != 0)
- my_umask=(int) (atoi_octal(str) | 0600);
- /* Default creation of new dir's */
- if ((str=getenv("UMASK_DIR")) != 0)
- my_umask_dir=(int) (atoi_octal(str) | 0700);
-#endif
-#ifdef VMS
- init_ctype(); /* Stupid linker don't link _ctype.c */
-#endif
- DBUG_PRINT("exit",("home: '%s'",home_dir));
- }
-#ifdef __WIN__
- win32_init_tcp_ip();
-#endif
- DBUG_VOID_RETURN;
- }
-} /* my_init */
-
-
- /* End my_sys */
-
-void my_end(int infoflag)
-{
- FILE *info_file;
- if (!(info_file=DBUG_FILE))
- info_file=stderr;
- if (infoflag & MY_CHECK_ERROR || info_file != stderr)
- { /* Test if some file is left open */
- if (my_file_opened | my_stream_opened)
- {
- sprintf(errbuff[0],EE(EE_OPEN_WARNING),my_file_opened,my_stream_opened);
- (void) my_message_no_curses(EE_OPEN_WARNING,errbuff[0],ME_BELL);
- DBUG_PRINT("error",("%s",errbuff[0]));
- }
- }
- if (infoflag & MY_GIVE_INFO || info_file != stderr)
- {
-#ifdef HAVE_GETRUSAGE
- struct rusage rus;
- if (!getrusage(RUSAGE_SELF, &rus))
- fprintf(info_file,"\n\
-User time %.2f, System time %.2f\n\
-Maximum resident set size %ld, Integral resident set size %ld\n\
-Non-physical pagefaults %ld, Physical pagefaults %ld, Swaps %ld\n\
-Blocks in %ld out %ld, Messages in %ld out %ld, Signals %ld\n\
-Voluntary context switches %ld, Involuntary context switches %ld\n",
- (rus.ru_utime.tv_sec * SCALE_SEC +
- rus.ru_utime.tv_usec / SCALE_USEC) / 100.0,
- (rus.ru_stime.tv_sec * SCALE_SEC +
- rus.ru_stime.tv_usec / SCALE_USEC) / 100.0,
- rus.ru_maxrss, rus.ru_idrss,
- rus.ru_minflt, rus.ru_majflt,
- rus.ru_nswap, rus.ru_inblock, rus.ru_oublock,
- rus.ru_msgsnd, rus.ru_msgrcv, rus.ru_nsignals,
- rus.ru_nvcsw, rus.ru_nivcsw);
-#endif
-#if defined(MSDOS) && !defined(__WIN__)
- fprintf(info_file,"\nRun time: %.1f\n",(double) clock()/CLOCKS_PER_SEC);
-#endif
- free_charsets();
-#if defined(SAFEMALLOC)
- TERMINATE(stderr); /* Give statistic on screen */
-#elif defined(__WIN__) && defined(_MSC_VER)
- _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
- _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR );
- _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
- _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDERR );
- _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
- _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );
- _CrtCheckMemory();
- _CrtDumpMemoryLeaks();
-#endif
- }
-#ifdef THREAD
- pthread_mutex_destroy(&THR_LOCK_keycache);
- pthread_mutex_destroy(&THR_LOCK_malloc);
- pthread_mutex_destroy(&THR_LOCK_open);
- DBUG_POP(); /* Must be done before my_thread_end */
- my_thread_end();
- my_thread_global_end();
-#endif
-#ifdef __WIN__
- if (have_tcpip);
- WSACleanup( );
-#endif /* __WIN__ */
- my_init_done=0;
-} /* my_end */
-
-#ifdef __WIN__
-
-/*
- This code is specially for running MySQL, but it should work in
- other cases too.
-
- Inizializzazione delle variabili d'ambiente per Win a 32 bit.
-
- Vengono inserite nelle variabili d'ambiente (utilizzando cosi'
- le funzioni getenv e putenv) i valori presenti nelle chiavi
- del file di registro:
-
- HKEY_LOCAL_MACHINE\software\MySQL
-
- Se la kiave non esiste nonn inserisce nessun valore
-*/
-
-/* Crea la stringa d'ambiente */
-
-void setEnvString(char *ret, const char *name, const char *value)
-{
- DBUG_ENTER("setEnvString");
- strxmov(ret, name,"=",value,NullS);
- DBUG_VOID_RETURN ;
-}
-
-static void my_win_init(void)
-{
- HKEY hSoftMysql ;
- DWORD dimName = 256 ;
- DWORD dimData = 1024 ;
- DWORD dimNameValueBuffer = 256 ;
- DWORD dimDataValueBuffer = 1024 ;
- DWORD indexValue = 0 ;
- long retCodeEnumValue ;
- char NameValueBuffer[256] ;
- char DataValueBuffer[1024] ;
- char EnvString[1271] ;
- const char *targetKey = "Software\\MySQL" ;
- DBUG_ENTER("my_win_init");
-
- setlocale(LC_CTYPE, ""); /* To get right sortorder */
-
- /* apre la chiave HKEY_LOCAL_MACHINES\software\MySQL */
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)targetKey,0,
- KEY_READ,&hSoftMysql) != ERROR_SUCCESS)
- DBUG_VOID_RETURN;
-
- /*
- ** Ne legge i valori e li inserisce nell'ambiente
- ** suppone che tutti i valori letti siano di tipo stringa + '\0'
- ** Legge il valore con indice 0 e lo scarta
- */
- retCodeEnumValue = RegEnumValue(hSoftMysql, indexValue++,
- (LPTSTR)NameValueBuffer, &dimNameValueBuffer,
- NULL, NULL, (LPBYTE)DataValueBuffer,
- &dimDataValueBuffer) ;
-
- while (retCodeEnumValue != ERROR_NO_MORE_ITEMS)
- {
- char *my_env;
- /* Crea la stringa d'ambiente */
- setEnvString(EnvString, NameValueBuffer, DataValueBuffer) ;
-
- /* Inserisce i dati come variabili d'ambiente */
- my_env=strdup(EnvString); /* variable for putenv must be allocated ! */
- putenv(EnvString) ;
-
- dimNameValueBuffer = dimName ;
- dimDataValueBuffer = dimData ;
-
- retCodeEnumValue = RegEnumValue(hSoftMysql, indexValue++,
- NameValueBuffer, &dimNameValueBuffer,
- NULL, NULL, (LPBYTE)DataValueBuffer,
- &dimDataValueBuffer) ;
- }
-
- /* chiude la chiave */
- RegCloseKey(hSoftMysql) ;
- DBUG_VOID_RETURN ;
-}
-
-
-/*------------------------------------------------------------------
-** Name: CheckForTcpip| Desc: checks if tcpip has been installed on system
-** According to Microsoft Developers documentation the first registry
-** entry should be enough to check if TCP/IP is installed, but as expected
-** this doesn't work on all Win32 machines :(
-------------------------------------------------------------------*/
-
-#define TCPIPKEY "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"
-#define WINSOCK2KEY "SYSTEM\\CurrentControlSet\\Services\\Winsock2\\Parameters"
-#define WINSOCKKEY "SYSTEM\\CurrentControlSet\\Services\\Winsock\\Parameters"
-
-static my_bool win32_have_tcpip(void)
-{
- HKEY hTcpipRegKey;
- if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, TCPIPKEY, 0, KEY_READ,
- &hTcpipRegKey) != ERROR_SUCCESS)
- {
- if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, WINSOCK2KEY, 0, KEY_READ,
- &hTcpipRegKey) != ERROR_SUCCESS)
- {
- if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, WINSOCKKEY, 0, KEY_READ,
- &hTcpipRegKey) != ERROR_SUCCESS)
- if (!getenv("HAVE_TCPIP") || have_tcpip) /* Provide a workaround */
- return (FALSE);
- }
- }
- RegCloseKey ( hTcpipRegKey);
- return (TRUE);
-}
-
-static my_bool win32_init_tcp_ip()
-{
- if (win32_have_tcpip())
- {
- WORD wVersionRequested = MAKEWORD( 2, 0 );
- WSADATA wsaData;
- /* Be a good citizen: maybe another lib has already initialised
- sockets, so dont clobber them unless necessary */
- if (WSAStartup( wVersionRequested, &wsaData ))
- {
- /* Load failed, maybe because of previously loaded
- incompatible version; try again */
- WSACleanup( );
- if (!WSAStartup( wVersionRequested, &wsaData ))
- have_tcpip=1;
- }
- else
- {
- if (wsaData.wVersion != wVersionRequested)
- {
- /* Version is no good, try again */
- WSACleanup( );
- if (!WSAStartup( wVersionRequested, &wsaData ))
- have_tcpip=1;
- }
- else
- have_tcpip=1;
- }
- }
- return(0);
-}
-#endif
diff --git a/ext/mysql/libmysql/my_lib.c b/ext/mysql/libmysql/my_lib.c
deleted file mode 100644
index 764309d120..0000000000
--- a/ext/mysql/libmysql/my_lib.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* TODO: check for overun of memory for names. */
-/* Convert MSDOS-TIME to standar time_t */
-
-#define USES_TYPES /* sys/types is included */
-#include "mysys_priv.h"
-#include <m_string.h>
-#include <my_dir.h> /* Structs used by my_dir,includes sys/types */
-#include "mysys_err.h"
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-# define NAMLEN(dirent) strlen((dirent)->d_name)
-#else
-# define dirent direct
-# define NAMLEN(dirent) (dirent)->d_namlen
-# if defined(HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# endif
-# if defined(HAVE_SYS_DIR_H)
-# include <sys/dir.h>
-# endif
-# if defined(HAVE_NDIR_H)
-# include <ndir.h>
-# endif
-# if defined(MSDOS) || defined(__WIN__)
-# include <dos.h>
-# ifdef __BORLANDC__
-# include <dir.h>
-# endif
-# endif
-#endif
-#ifdef VMS
-#include <rms.h>
-#include <iodef.h>
-#include <descrip.h>
-#endif
-#if defined(THREAD) && defined(HAVE_READDIR_R)
-#define READDIR(A,B,C) ((errno=readdir_r(A,B,&C)) != 0 || !C)
-#else
-#define READDIR(A,B,C) (!(C=readdir(A)))
-#endif
-
-
-#define STARTSIZE ONCE_ALLOC_INIT*8 /* some mallocmargin */
-
-static int comp_names(struct fileinfo *a,struct fileinfo *b);
-
-
- /* We need this because program don't know with malloc we used */
-
-void my_dirend(MY_DIR *buffer)
-{
- DBUG_ENTER("my_dirend");
- if (buffer)
- my_free((gptr) buffer,MYF(0));
- DBUG_VOID_RETURN;
-} /* my_dirend */
-
-
- /* Compare in sort of filenames */
-
-static int comp_names(struct fileinfo *a, struct fileinfo *b)
-{
- return (strcmp(a->name,b->name));
-} /* comp_names */
-
-
-#if !defined(MSDOS) && !defined(__WIN__)
-
-MY_DIR *my_dir(const char *path, myf MyFlags)
-{
- DIR *dirp;
- struct dirent *dp;
- struct fileinfo *fnames;
- char *buffer, *obuffer, *tempptr;
- uint fcnt,i,size,firstfcnt, maxfcnt,length;
- char tmp_path[FN_REFLEN+1],*tmp_file;
- my_ptrdiff_t diff;
- bool eof;
-#ifdef THREAD
- char dirent_tmp[sizeof(struct dirent)+_POSIX_PATH_MAX+1];
-#endif
- DBUG_ENTER("my_dir");
- DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags));
-
-#if defined(THREAD) && !defined(HAVE_READDIR_R)
- pthread_mutex_lock(&THR_LOCK_open);
-#endif
-
- dirp = opendir(directory_file_name(tmp_path,(my_string) path));
- size = STARTSIZE;
- if (dirp == NULL || ! (buffer = (char *) my_malloc(size, MyFlags)))
- goto error;
-
- fcnt = 0;
- tmp_file=strend(tmp_path);
- firstfcnt = maxfcnt = (size - sizeof(MY_DIR)) /
- (sizeof(struct fileinfo) + FN_LEN);
- fnames= (struct fileinfo *) (buffer + sizeof(MY_DIR));
- tempptr = (char *) (fnames + maxfcnt);
-
-#ifdef THREAD
- dp= (struct dirent*) dirent_tmp;
-#else
- dp=0;
-#endif
- eof=0;
- for (;;)
- {
- while (fcnt < maxfcnt &&
- !(eof= READDIR(dirp,(struct dirent*) dirent_tmp,dp)))
- {
- bzero((gptr) (fnames+fcnt),sizeof(fnames[0])); /* for purify */
- fnames[fcnt].name = tempptr;
- tempptr = strmov(tempptr,dp->d_name) + 1;
- if (MyFlags & MY_WANT_STAT)
- {
- VOID(strmov(tmp_file,dp->d_name));
- VOID(my_stat(tmp_path, &fnames[fcnt].mystat, MyFlags));
- }
- ++fcnt;
- }
- if (eof)
- break;
- size += STARTSIZE; obuffer = buffer;
- if (!(buffer = (char *) my_realloc((gptr) buffer, size,
- MyFlags | MY_FREE_ON_ERROR)))
- goto error; /* No memory */
- length= (uint) (sizeof(struct fileinfo ) * firstfcnt);
- diff= PTR_BYTE_DIFF(buffer , obuffer) + (int) length;
- fnames= (struct fileinfo *) (buffer + sizeof(MY_DIR));
- tempptr= ADD_TO_PTR(tempptr,diff,char*);
- for (i = 0; i < maxfcnt; i++)
- fnames[i].name = ADD_TO_PTR(fnames[i].name,diff,char*);
-
- /* move filenames upp a bit */
- maxfcnt += firstfcnt;
- bmove_upp(tempptr,tempptr-length,
- (uint) (tempptr- (char*) (fnames+maxfcnt)));
- }
-
- (void) closedir(dirp);
- {
- MY_DIR * s = (MY_DIR *) buffer;
- s->number_off_files = (uint) fcnt;
- s->dir_entry = fnames;
- }
- if (!(MyFlags & MY_DONT_SORT))
- qsort((void *) fnames, (size_s) fcnt, sizeof(struct fileinfo),
- (qsort_cmp) comp_names);
-#if defined(THREAD) && !defined(HAVE_READDIR_R)
- pthread_mutex_unlock(&THR_LOCK_open);
-#endif
- DBUG_RETURN((MY_DIR *) buffer);
-
- error:
-#if defined(THREAD) && !defined(HAVE_READDIR_R)
- pthread_mutex_unlock(&THR_LOCK_open);
-#endif
- my_errno=errno;
- if (dirp)
- (void) closedir(dirp);
- if (MyFlags & (MY_FAE+MY_WME))
- my_error(EE_DIR,MYF(ME_BELL+ME_WAITTANG),path,my_errno);
- DBUG_RETURN((MY_DIR *) NULL);
-} /* my_dir */
-
-
-/*
- * Convert from directory name to filename.
- * On VMS:
- * xyzzy:[mukesh.emacs] => xyzzy:[mukesh]emacs.dir.1
- * xyzzy:[mukesh] => xyzzy:[000000]mukesh.dir.1
- * On UNIX, it's simple: just make sure there is a terminating /
-
- * Returns pointer to dst;
- */
-
-my_string directory_file_name (my_string dst, const char *src)
-{
-#ifndef VMS
-
- /* Process as Unix format: just remove test the final slash. */
-
- my_string end;
-
- if (src[0] == 0)
- src= (char*) "."; /* Use empty as current */
- end=strmov(dst, src);
- if (end[-1] != FN_LIBCHAR)
- {
- end[0]=FN_LIBCHAR; /* Add last '/' */
- end[1]='\0';
- }
- return dst;
-
-#else /* VMS */
-
- long slen;
- long rlen;
- my_string ptr, rptr;
- char bracket;
- struct FAB fab = cc$rms_fab;
- struct NAM nam = cc$rms_nam;
- char esa[NAM$C_MAXRSS];
-
- if (! src[0])
- src="[.]"; /* Empty is == current dir */
-
- slen = strlen (src) - 1;
- if (src[slen] == FN_C_AFTER_DIR || src[slen] == FN_C_AFTER_DIR_2 ||
- src[slen] == FN_DEVCHAR)
- {
- /* VMS style - convert [x.y.z] to [x.y]z, [x] to [000000]x */
- fab.fab$l_fna = src;
- fab.fab$b_fns = slen + 1;
- fab.fab$l_nam = &nam;
- fab.fab$l_fop = FAB$M_NAM;
-
- nam.nam$l_esa = esa;
- nam.nam$b_ess = sizeof esa;
- nam.nam$b_nop |= NAM$M_SYNCHK;
-
- /* We call SYS$PARSE to handle such things as [--] for us. */
- if (SYS$PARSE(&fab, 0, 0) == RMS$_NORMAL)
- {
- slen = nam.nam$b_esl - 1;
- if (esa[slen] == ';' && esa[slen - 1] == '.')
- slen -= 2;
- esa[slen + 1] = '\0';
- src = esa;
- }
- if (src[slen] != FN_C_AFTER_DIR && src[slen] != FN_C_AFTER_DIR_2)
- {
- /* what about when we have logical_name:???? */
- if (src[slen] == FN_DEVCHAR)
- { /* Xlate logical name and see what we get */
- VOID(strmov(dst,src));
- dst[slen] = 0; /* remove colon */
- if (!(src = getenv (dst)))
- return dst; /* Can't translate */
-
- /* should we jump to the beginning of this procedure?
- Good points: allows us to use logical names that xlate
- to Unix names,
- Bad points: can be a problem if we just translated to a device
- name...
- For now, I'll punt and always expect VMS names, and hope for
- the best! */
-
- slen = strlen (src) - 1;
- if (src[slen] != FN_C_AFTER_DIR && src[slen] != FN_C_AFTER_DIR_2)
- { /* no recursion here! */
- VOID(strmov(dst, src));
- return(dst);
- }
- }
- else
- { /* not a directory spec */
- VOID(strmov(dst, src));
- return(dst);
- }
- }
-
- bracket = src[slen]; /* End char */
- if (!(ptr = strchr (src, bracket - 2)))
- { /* no opening bracket */
- VOID(strmov (dst, src));
- return dst;
- }
- if (!(rptr = strrchr (src, '.')))
- rptr = ptr;
- slen = rptr - src;
- VOID(strmake (dst, src, slen));
-
- if (*rptr == '.')
- { /* Put bracket and add */
- dst[slen++] = bracket; /* (rptr+1) after this */
- }
- else
- {
- /* If we have the top-level of a rooted directory (i.e. xx:[000000]),
- then translate the device and recurse. */
-
- if (dst[slen - 1] == ':'
- && dst[slen - 2] != ':' /* skip decnet nodes */
- && strcmp(src + slen, "[000000]") == 0)
- {
- dst[slen - 1] = '\0';
- if ((ptr = getenv (dst))
- && (rlen = strlen (ptr) - 1) > 0
- && (ptr[rlen] == FN_C_AFTER_DIR || ptr[rlen] == FN_C_AFTER_DIR_2)
- && ptr[rlen - 1] == '.')
- {
- VOID(strmov(esa,ptr));
- esa[rlen - 1] = FN_C_AFTER_DIR;
- esa[rlen] = '\0';
- return (directory_file_name (dst, esa));
- }
- else
- dst[slen - 1] = ':';
- }
- VOID(strmov(dst+slen,"[000000]"));
- slen += 8;
- }
- VOID(strmov(strmov(dst+slen,rptr+1)-1,".DIR.1"));
- return dst;
- }
- VOID(strmov(dst, src));
- if (dst[slen] == '/' && slen > 1)
- dst[slen] = 0;
- return dst;
-#endif /* VMS */
-} /* directory_file_name */
-
-#elif defined(WIN32)
-
-/*
-*****************************************************************************
-** Read long filename using windows rutines
-*****************************************************************************
-*/
-
-MY_DIR *my_dir(path, MyFlags)
-const char *path;
-myf MyFlags;
-{
- struct fileinfo *fnames;
- char *buffer, *obuffer, *tempptr;
- int eof,i,fcnt,firstfcnt,length,maxfcnt;
- uint size;
-#ifdef __BORLANDC__
- struct ffblk find;
-#else
- struct _finddata_t find;
-#endif
- ushort mode;
- char tmp_path[FN_REFLEN],*tmp_file,attrib;
- my_ptrdiff_t diff;
-#ifdef _WIN64
- __int64 handle;
-#else
- long handle;
-#endif
- DBUG_ENTER("my_dir");
- DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags));
-
- /* Put LIB-CHAR as last path-character if not there */
-
- tmp_file=tmp_path;
- if (!*path)
- *tmp_file++ ='.'; /* From current dir */
- tmp_file= strmov(tmp_file,path);
- if (tmp_file[-1] == FN_DEVCHAR)
- *tmp_file++= '.'; /* From current dev-dir */
- if (tmp_file[-1] != FN_LIBCHAR)
- *tmp_file++ =FN_LIBCHAR;
- tmp_file[0]='*'; /* MSDOS needs this !??? */
- tmp_file[1]='.';
- tmp_file[2]='*';
- tmp_file[3]='\0';
-
-#ifdef __BORLANDC__
- if ((handle= findfirst(tmp_path,&find,0)) == -1L)
- goto error;
-#else
- if ((handle=_findfirst(tmp_path,&find)) == -1L)
- goto error;
-#endif
-
- size = STARTSIZE;
- firstfcnt = maxfcnt = (size - sizeof(MY_DIR)) /
- (sizeof(struct fileinfo) + FN_LEN);
- if ((buffer = (char *) my_malloc(size, MyFlags)) == 0)
- goto error;
- fnames= (struct fileinfo *) (buffer + sizeof(MY_DIR));
- tempptr = (char *) (fnames + maxfcnt);
-
- fcnt = 0;
- for (;;)
- {
- do
- {
- fnames[fcnt].name = tempptr;
-#ifdef __BORLANDC__
- tempptr = strmov(tempptr,find.ff_name) + 1;
- fnames[fcnt].mystat.st_size=find.ff_fsize;
- fnames[fcnt].mystat.st_uid=fnames[fcnt].mystat.st_gid=0;
- mode=MY_S_IREAD; attrib=find.ff_attrib;
-#else
- tempptr = strmov(tempptr,find.name) + 1;
- fnames[fcnt].mystat.st_size=find.size;
- fnames[fcnt].mystat.st_uid=fnames[fcnt].mystat.st_gid=0;
- mode=MY_S_IREAD; attrib=find.attrib;
-#endif
- if (!(attrib & _A_RDONLY))
- mode|=MY_S_IWRITE;
- if (attrib & _A_SUBDIR)
- mode|=MY_S_IFDIR;
- fnames[fcnt].mystat.st_mode=mode;
-#ifdef __BORLANDC__
- fnames[fcnt].mystat.st_mtime=((uint32) find.ff_ftime);
-#else
- fnames[fcnt].mystat.st_mtime=((uint32) find.time_write);
-#endif
- ++fcnt;
-#ifdef __BORLANDC__
- } while ((eof= findnext(&find)) == 0 && fcnt < maxfcnt);
-#else
- } while ((eof= _findnext(handle,&find)) == 0 && fcnt < maxfcnt);
-#endif
-
- DBUG_PRINT("test",("eof: %d errno: %d",eof,errno));
- if (eof)
- break;
- size += STARTSIZE; obuffer = buffer;
- if (!(buffer = (char *) my_realloc((gptr) buffer, size,
- MyFlags | MY_FREE_ON_ERROR)))
- goto error;
- length= sizeof(struct fileinfo ) * firstfcnt;
- diff= PTR_BYTE_DIFF(buffer , obuffer) +length;
- fnames= (struct fileinfo *) (buffer + sizeof(MY_DIR));
- tempptr= ADD_TO_PTR(tempptr,diff,char*);
- for (i = 0; i < maxfcnt; i++)
- fnames[i].name = ADD_TO_PTR(fnames[i].name,diff,char*);
-
- /* move filenames upp a bit */
- maxfcnt += firstfcnt;
- bmove_upp(tempptr,ADD_TO_PTR(tempptr,-length,char*),
- (int) PTR_BYTE_DIFF(tempptr,fnames+maxfcnt));
- }
- {
- MY_DIR * s = (MY_DIR *) buffer;
- s->number_off_files = (uint) fcnt;
- s->dir_entry = fnames;
- }
- if (!(MyFlags & MY_DONT_SORT))
- qsort(fnames,fcnt,sizeof(struct fileinfo),(qsort_cmp) comp_names);
-#ifndef __BORLANDC__
- _findclose(handle);
-#endif
- DBUG_RETURN((MY_DIR *) buffer);
-
-error:
- my_errno=errno;
-#ifndef __BORLANDC__
- if (handle != -1)
- _findclose(handle);
-#endif
- if (MyFlags & MY_FAE+MY_WME)
- my_error(EE_DIR,MYF(ME_BELL+ME_WAITTANG),path,errno);
- DBUG_RETURN((MY_DIR *) NULL);
-} /* my_dir */
-
-#else /* MSDOS and not WIN32 */
-
-
-/******************************************************************************
-** At MSDOS you always get stat of files, but time is in packed MSDOS-format
-******************************************************************************/
-
-MY_DIR *my_dir(path, MyFlags)
-const char *path;
-myf MyFlags;
-{
- struct fileinfo *fnames;
- char *buffer, *obuffer, *tempptr;
- int eof,i,fcnt,firstfcnt,length,maxfcnt;
- uint size;
- struct find_t find;
- ushort mode;
- char tmp_path[FN_REFLEN],*tmp_file,attrib;
- my_ptrdiff_t diff;
- DBUG_ENTER("my_dir");
- DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags));
-
- /* Put LIB-CHAR as last path-character if not there */
-
- tmp_file=tmp_path;
- if (!*path)
- *tmp_file++ ='.'; /* From current dir */
- tmp_file= strmov(tmp_file,path);
- if (tmp_file[-1] == FN_DEVCHAR)
- *tmp_file++= '.'; /* From current dev-dir */
- if (tmp_file[-1] != FN_LIBCHAR)
- *tmp_file++ =FN_LIBCHAR;
- tmp_file[0]='*'; /* MSDOS needs this !??? */
- tmp_file[1]='.';
- tmp_file[2]='*';
- tmp_file[3]='\0';
-
- if (_dos_findfirst(tmp_path,_A_NORMAL | _A_SUBDIR, &find))
- goto error;
-
- size = STARTSIZE;
- firstfcnt = maxfcnt = (size - sizeof(MY_DIR)) /
- (sizeof(struct fileinfo) + FN_LEN);
- if ((buffer = (char *) my_malloc(size, MyFlags)) == 0)
- goto error;
- fnames= (struct fileinfo *) (buffer + sizeof(MY_DIR));
- tempptr = (char *) (fnames + maxfcnt);
-
- fcnt = 0;
- for (;;)
- {
- do
- {
- fnames[fcnt].name = tempptr;
- tempptr = strmov(tempptr,find.name) + 1;
- fnames[fcnt].mystat.st_size=find.size;
- fnames[fcnt].mystat.st_uid=fnames[fcnt].mystat.st_gid=0;
- mode=MY_S_IREAD; attrib=find.attrib;
- if (!(attrib & _A_RDONLY))
- mode|=MY_S_IWRITE;
- if (attrib & _A_SUBDIR)
- mode|=MY_S_IFDIR;
- fnames[fcnt].mystat.st_mode=mode;
- fnames[fcnt].mystat.st_mtime=((uint32) find.wr_date << 16) +
- find.wr_time;
- ++fcnt;
- } while ((eof= _dos_findnext(&find)) == 0 && fcnt < maxfcnt);
-
- DBUG_PRINT("test",("eof: %d errno: %d",eof,errno));
- if (eof)
- break;
- size += STARTSIZE; obuffer = buffer;
- if (!(buffer = (char *) my_realloc((gptr) buffer, size,
- MyFlags | MY_FREE_ON_ERROR)))
- goto error;
- length= sizeof(struct fileinfo ) * firstfcnt;
- diff= PTR_BYTE_DIFF(buffer , obuffer) +length;
- fnames= (struct fileinfo *) (buffer + sizeof(MY_DIR));
- tempptr= ADD_TO_PTR(tempptr,diff,char*);
- for (i = 0; i < maxfcnt; i++)
- fnames[i].name = ADD_TO_PTR(fnames[i].name,diff,char*);
-
- /* move filenames upp a bit */
- maxfcnt += firstfcnt;
- bmove_upp(tempptr,ADD_TO_PTR(tempptr,-length,char*),
- (int) PTR_BYTE_DIFF(tempptr,fnames+maxfcnt));
- }
- {
- MY_DIR * s = (MY_DIR *) buffer;
- s->number_off_files = (uint) fcnt;
- s->dir_entry = fnames;
- }
- if (!(MyFlags & MY_DONT_SORT))
- qsort(fnames,fcnt,sizeof(struct fileinfo),(qsort_cmp) comp_names);
- DBUG_RETURN((MY_DIR *) buffer);
-
-error:
- if (MyFlags & MY_FAE+MY_WME)
- my_error(EE_DIR,MYF(ME_BELL+ME_WAITTANG),path,errno);
- DBUG_RETURN((MY_DIR *) NULL);
-} /* my_dir */
-
-#endif /* WIN32 && MSDOS */
-
-/****************************************************************************
-** File status
-** Note that MY_STAT is assumed to be same as struct stat
-****************************************************************************/
-
-int my_fstat(int Filedes, MY_STAT *stat_area, myf MyFlags )
-{
- DBUG_ENTER("my_fstat");
- DBUG_PRINT("my",("fd: %d MyFlags: %d",Filedes,MyFlags));
- DBUG_RETURN(fstat(Filedes, (struct stat *) stat_area));
-}
-
-MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags)
-{
- int m_used;
- DBUG_ENTER("my_stat");
- DBUG_PRINT("my", ("path: '%s', stat_area: %lx, MyFlags: %d", path,
- (byte *) stat_area, my_flags));
-
- if ((m_used= (stat_area == NULL)))
- if (!(stat_area = (MY_STAT *) my_malloc(sizeof(MY_STAT), my_flags)))
- goto error;
- if ( ! stat((my_string) path, (struct stat *) stat_area) )
- DBUG_RETURN(stat_area);
- my_errno=errno;
- if (m_used) /* Free if new area */
- my_free((gptr) stat_area,MYF(0));
-
-error:
- if (my_flags & (MY_FAE+MY_WME))
- {
- my_error(EE_STAT, MYF(ME_BELL+ME_WAITTANG),path,my_errno);
- DBUG_RETURN((MY_STAT *) NULL);
- }
- DBUG_RETURN((MY_STAT *) NULL);
-} /* my_stat */
-
diff --git a/ext/mysql/libmysql/my_list.h b/ext/mysql/libmysql/my_list.h
deleted file mode 100644
index 46a6a8f65f..0000000000
--- a/ext/mysql/libmysql/my_list.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifndef _list_h_
-#define _list_h_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct st_list {
- struct st_list *prev,*next;
- void *data;
-} LIST;
-
-typedef int (*list_walk_action)(void *,void *);
-
-extern LIST *list_add(LIST *root,LIST *element);
-extern LIST *list_delete(LIST *root,LIST *element);
-extern LIST *list_cons(void *data,LIST *root);
-extern LIST *list_reverse(LIST *root);
-extern void list_free(LIST *root,pbool free_data);
-extern uint list_length(LIST *list);
-extern int list_walk(LIST *list,list_walk_action action,gptr argument);
-
-#define rest(a) ((a)->next)
-#define list_push(a,b) (a)=list_cons((b),(a))
-#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old) ; my_free((gptr) old,MYF(MY_FAE)); }
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/ext/mysql/libmysql/my_malloc.c b/ext/mysql/libmysql/my_malloc.c
deleted file mode 100644
index 46c874aa66..0000000000
--- a/ext/mysql/libmysql/my_malloc.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifdef SAFEMALLOC /* We don't need SAFEMALLOC here */
-#undef SAFEMALLOC
-#endif
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <m_string.h>
-
- /* My memory allocator */
-
-gptr my_malloc(unsigned int Size, myf MyFlags)
-{
- gptr point;
- DBUG_ENTER("my_malloc");
- DBUG_PRINT("my",("Size: %u MyFlags: %d",Size, MyFlags));
-
- if (!Size)
- Size=1; /* Safety */
- if ((point = malloc(Size)) == NULL)
- {
- my_errno=errno;
- if (MyFlags & MY_FAE)
- error_handler_hook=fatal_error_handler_hook;
- if (MyFlags & (MY_FAE+MY_WME))
- my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),Size);
- if (MyFlags & MY_FAE)
- exit(1);
- }
- else if (MyFlags & MY_ZEROFILL)
- bzero(point,Size);
- DBUG_PRINT("exit",("ptr: %lx",point));
- DBUG_RETURN(point);
-} /* my_malloc */
-
-
- /* Free memory allocated with my_malloc */
- /*ARGSUSED*/
-
-void my_no_flags_free(gptr ptr)
-{
- DBUG_ENTER("my_free");
- DBUG_PRINT("my",("ptr: %lx",ptr));
- if (ptr)
- free(ptr);
- DBUG_VOID_RETURN;
-} /* my_free */
-
-
- /* malloc and copy */
-
-gptr my_memdup(const byte *from, uint length, myf MyFlags)
-{
- gptr ptr;
- if ((ptr=my_malloc(length,MyFlags)) != 0)
- memcpy((byte*) ptr, (byte*) from,(size_t) length);
- return(ptr);
-}
-
-
-my_string my_strdup(const char *from, myf MyFlags)
-{
- gptr ptr;
- uint length=(uint) strlen(from)+1;
- if ((ptr=my_malloc(length,MyFlags)) != 0)
- memcpy((byte*) ptr, (byte*) from,(size_t) length);
- return((my_string) ptr);
-}
diff --git a/ext/mysql/libmysql/my_messnc.c b/ext/mysql/libmysql/my_messnc.c
deleted file mode 100644
index 48ed852f39..0000000000
--- a/ext/mysql/libmysql/my_messnc.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-
-int my_message_no_curses(uint error __attribute__((unused)),
- const char *str, myf MyFlags)
-{
- DBUG_ENTER("my_message_no_curses");
- DBUG_PRINT("enter",("message: %s",str));
- (void) fflush(stdout);
- if (MyFlags & ME_BELL)
- (void) fputc('\007',stderr); /* Bell */
- if (my_progname)
- {
- (void)fputs(my_progname,stderr); (void)fputs(": ",stderr);
- }
- (void)fputs(str,stderr);
- (void)fputc('\n',stderr);
- (void)fflush(stderr);
- DBUG_RETURN(0);
-}
diff --git a/ext/mysql/libmysql/my_net.c b/ext/mysql/libmysql/my_net.c
deleted file mode 100644
index 6fad295a22..0000000000
--- a/ext/mysql/libmysql/my_net.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* thread safe version of some common functions */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
-/* for thread safe my_inet_ntoa */
-#if !defined(MSDOS) && !defined(__WIN__)
-#include <netdb.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif /* !defined(MSDOS) && !defined(__WIN__) */
-
-#ifndef THREAD
-#define pthread_mutex_lock(A)
-#define pthread_mutex_unlock(A)
-#endif
-
-void my_inet_ntoa(struct in_addr in, char *buf)
-{
- char *ptr;
- pthread_mutex_lock(&THR_LOCK_net);
- ptr=inet_ntoa(in);
- strmov(buf,ptr);
- pthread_mutex_unlock(&THR_LOCK_net);
-}
diff --git a/ext/mysql/libmysql/my_net.h b/ext/mysql/libmysql/my_net.h
deleted file mode 100644
index 4633f3dfbd..0000000000
--- a/ext/mysql/libmysql/my_net.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* thread safe version of some common functions */
-
-/* for thread safe my_inet_ntoa */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#if !defined(MSDOS) && !defined(__WIN__) && !defined(__BEOS__)
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif /* !defined(MSDOS) && !defined(__WIN__) */
-
-void my_inet_ntoa(struct in_addr in, char *buf);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/ext/mysql/libmysql/my_once.c b/ext/mysql/libmysql/my_once.c
deleted file mode 100644
index 99aad4d4e7..0000000000
--- a/ext/mysql/libmysql/my_once.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Not MT-SAFE */
-
-#ifdef SAFEMALLOC /* We don't need SAFEMALLOC here */
-#undef SAFEMALLOC
-#endif
-
-#include "mysys_priv.h"
-#include "my_static.h"
-#include "mysys_err.h"
-
- /* alloc for things we don't nead to free */
- /* No DBUG_ENTER... here to get smaller dbug-startup */
-
-gptr my_once_alloc(unsigned int Size, myf MyFlags)
-{
- uint get_size,max_left;
- gptr point;
- reg1 USED_MEM *next;
- reg2 USED_MEM **prev;
-
- Size= ALIGN_SIZE(Size);
- prev= &my_once_root_block;
- max_left=0;
- for (next=my_once_root_block ; next && next->left < Size ; next= next->next)
- {
- if (next->left > max_left)
- max_left=next->left;
- prev= &next->next;
- }
- if (! next)
- { /* Time to alloc new block */
- get_size= Size+ALIGN_SIZE(sizeof(USED_MEM));
- if (max_left*4 < my_once_extra && get_size < my_once_extra)
- get_size=my_once_extra; /* Normal alloc */
-
- if ((next = (USED_MEM*) malloc(get_size)) == 0)
- {
- my_errno=errno;
- if (MyFlags & (MY_FAE+MY_WME))
- my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),get_size);
- return((gptr) 0);
- }
- DBUG_PRINT("test",("my_once_malloc %u byte malloced",get_size));
- next->next= 0;
- next->size= get_size;
- next->left= get_size-ALIGN_SIZE(sizeof(USED_MEM));
- *prev=next;
- }
- point= (gptr) ((char*) next+ (next->size-next->left));
- next->left-= Size;
-
- return(point);
-} /* my_once_alloc */
-
-
- /* deallocate everything used by my_once_alloc */
-
-void my_once_free(void)
-{
- reg1 USED_MEM *next,*old;
- DBUG_ENTER("my_once_free");
-
- for (next=my_once_root_block ; next ; )
- {
- old=next; next= next->next ;
- free((gptr) old);
- }
- my_once_root_block=0;
-
- DBUG_VOID_RETURN;
-} /* my_once_free */
diff --git a/ext/mysql/libmysql/my_open.c b/ext/mysql/libmysql/my_open.c
deleted file mode 100644
index 49d7735818..0000000000
--- a/ext/mysql/libmysql/my_open.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#define USES_TYPES
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <my_dir.h>
-#include <errno.h>
-#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__)
-#include <share.h>
-#endif
-
- /* Open a file */
-
-File my_open(const char *FileName, int Flags, myf MyFlags)
- /* Path-name of file */
- /* Read | write .. */
- /* Special flags */
-{
- File fd;
- DBUG_ENTER("my_open");
- DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d",
- FileName, Flags, MyFlags));
-#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__)
- if (Flags & O_SHARE)
- fd = sopen((my_string) FileName, (Flags & ~O_SHARE) | O_BINARY, SH_DENYNO,
- MY_S_IREAD | MY_S_IWRITE);
- else
- fd = open((my_string) FileName, Flags | O_BINARY,
- MY_S_IREAD | MY_S_IWRITE);
-#elif !defined(NO_OPEN_3)
- fd = open(FileName, Flags, my_umask); /* Normal unix */
-#else
- fd = open((my_string) FileName, Flags);
-#endif
- DBUG_RETURN(my_register_filename(fd, FileName, FILE_BY_OPEN,
- EE_FILENOTFOUND, MyFlags));
-} /* my_open */
-
-
- /* Close a file */
-
-int my_close(File fd, myf MyFlags)
-{
- int err;
- DBUG_ENTER("my_close");
- DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags));
-
- pthread_mutex_lock(&THR_LOCK_open);
- if ((err = close(fd)))
- {
- DBUG_PRINT("error",("Got error %d on close",err));
- my_errno=errno;
- if (MyFlags & (MY_FAE | MY_WME))
- my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG),my_filename(fd),errno);
- }
- if ((uint) fd < MY_NFILE && my_file_info[fd].type != UNOPEN)
- {
- my_free(my_file_info[fd].name, MYF(0));
-#if defined(THREAD) && !defined(HAVE_PREAD)
- pthread_mutex_destroy(&my_file_info[fd].mutex);
-#endif
- my_file_info[fd].type = UNOPEN;
- my_file_opened--;
- }
- pthread_mutex_unlock(&THR_LOCK_open);
- DBUG_RETURN(err);
-} /* my_close */
-
-
-File my_register_filename(File fd, const char *FileName, enum file_type
- type_of_file, uint error_message_number, myf MyFlags)
-{
- if ((int) fd >= 0)
- {
- if ((int) fd >= MY_NFILE)
- {
-#if defined(THREAD) && !defined(HAVE_PREAD)
- (void) my_close(fd,MyFlags);
- my_errno=EMFILE;
- if (MyFlags & (MY_FFNF | MY_FAE | MY_WME))
- my_error(EE_OUT_OF_FILERESOURCES, MYF(ME_BELL+ME_WAITTANG),
- FileName, my_errno);
- return(-1);
-#else
- thread_safe_increment(my_file_opened,&THR_LOCK_open);
-#endif
- return(fd); /* safeguard */
- }
- pthread_mutex_lock(&THR_LOCK_open);
- if ((my_file_info[fd].name = (char*) my_strdup(FileName,MyFlags)))
- {
- my_file_opened++;
- my_file_info[fd].type = type_of_file;
-#if defined(THREAD) && !defined(HAVE_PREAD)
- pthread_mutex_init(&my_file_info[fd].mutex,MY_MUTEX_INIT_FAST);
-#endif
- pthread_mutex_unlock(&THR_LOCK_open);
- DBUG_PRINT("exit",("fd: %d",fd));
- return(fd);
- }
- pthread_mutex_unlock(&THR_LOCK_open);
- (void) my_close(fd, MyFlags);
- my_errno=ENOMEM;
- }
- else
- my_errno=errno;
- DBUG_PRINT("error",("Got error %d on open",my_errno));
- if (MyFlags & (MY_FFNF | MY_FAE | MY_WME))
- my_error(error_message_number, MYF(ME_BELL+ME_WAITTANG),
- FileName, my_errno);
- return(fd);
-}
diff --git a/ext/mysql/libmysql/my_pthread.c b/ext/mysql/libmysql/my_pthread.c
deleted file mode 100644
index 367542ee8d..0000000000
--- a/ext/mysql/libmysql/my_pthread.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Functions to get threads more portable */
-
-#include "mysys_priv.h"
-#ifdef THREAD
-#include <signal.h>
-#include <m_string.h>
-#include <thr_alarm.h>
-#include <assert.h>
-#if !defined(MSDOS) && !defined(__WIN__)
-#include <netdb.h>
-#endif
-
-#if (defined(__BSD__) || defined(_BSDI_VERSION)) && !defined(HAVE_mit_thread)
-#define SCHED_POLICY SCHED_RR
-#else
-#define SCHED_POLICY SCHED_OTHER
-#endif
-
-#ifndef my_pthread_setprio
-void my_pthread_setprio(pthread_t thread_id,int prior)
-{
-#ifdef HAVE_PTHREAD_SETSCHEDPARAM
- struct sched_param tmp_sched_param;
- bzero((char*) &tmp_sched_param,sizeof(tmp_sched_param));
- tmp_sched_param.sched_priority=prior;
- VOID(pthread_setschedparam(thread_id,SCHED_POLICY,&tmp_sched_param));
-#endif
-}
-#endif
-
-#ifndef my_pthread_getprio
-int my_pthread_getprio(pthread_t thread_id)
-{
-#ifdef HAVE_PTHREAD_SETSCHEDPARAM
- struct sched_param tmp_sched_param;
- int policy;
- if (!pthread_getschedparam(thread_id,&policy,&tmp_sched_param))
- {
- DBUG_PRINT("thread",("policy: %d priority: %d",
- policy,tmp_sched_param.sched_priority));
- return tmp_sched_param.sched_priority;
- }
-#endif
- return -1;
-}
-#endif
-
-#ifndef my_pthread_attr_setprio
-void my_pthread_attr_setprio(pthread_attr_t *attr, int priority)
-{
-#ifdef HAVE_PTHREAD_SETSCHEDPARAM
- struct sched_param tmp_sched_param;
- bzero((char*) &tmp_sched_param,sizeof(tmp_sched_param));
- tmp_sched_param.sched_priority=priority;
- VOID(pthread_attr_setschedparam(attr,&tmp_sched_param));
-#endif
-}
-#endif
-
-
-/* To allow use of pthread_getspecific with two arguments */
-
-#ifdef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC
-#undef pthread_getspecific
-#ifdef HAVE_UNIXWARE7_THREADS
-#define pthread_getspecific thr_getspecific
-#endif
-
-void *my_pthread_getspecific_imp(pthread_key_t key)
-{
- void *value;
- if (pthread_getspecific(key,(void *) &value))
- return 0;
- return value;
-}
-#endif
-
-
-/* Some functions for RTS threads, AIX, Siemens Unix and UnixWare 7
- (and DEC OSF/1 3.2 too) */
-
-int my_pthread_create_detached=1;
-
-#if defined(HAVE_NONPOSIX_SIGWAIT) || defined(HAVE_DEC_3_2_THREADS)
-
-int my_sigwait(const sigset_t *set,int *sig)
-{
- int signal=sigwait((sigset_t*) set);
- if (signal < 0)
- return errno;
- *sig=signal;
- return 0;
-}
-#endif
-
-/* localtime_r for SCO 3.2V4.2 */
-
-#ifndef HAVE_LOCALTIME_R
-
-extern pthread_mutex_t LOCK_localtime_r;
-
-struct tm *localtime_r(const time_t *clock, struct tm *res)
-{
- struct tm *tmp;
- pthread_mutex_lock(&LOCK_localtime_r);
- tmp=localtime(clock);
- *res= *tmp;
- pthread_mutex_unlock(&LOCK_localtime_r);
- return res;
-}
-#endif
-
-
-/****************************************************************************
-** Replacement of sigwait if the system doesn't have one (like BSDI 3.0)
-**
-** Note:
-** This version of sigwait() is assumed to called in a loop so the signalmask
-** is permanently modified to reflect the signal set. This is done to get
-** a much faster implementation.
-**
-** This implementation isn't thread safe: It assumes that only one
-** thread is using sigwait.
-**
-** If one later supplies a different signal mask, all old signals that
-** was used before are unblocked and set to SIGDFL.
-**
-** Author: Gary Wisniewski <garyw@spidereye.com.au>, much modified by Monty
-****************************************************************************/
-
-#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(sigwait) && !defined(__WIN__) && !defined(HAVE_rts_threads) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS)
-
-#if !defined(DONT_USE_SIGSUSPEND)
-
-static sigset_t sigwait_set,rev_sigwait_set,px_recd;
-
-void px_handle_sig(int sig)
-{
- sigaddset(&px_recd, sig);
-}
-
-
-void sigwait_setup(sigset_t *set)
-{
- int i;
- struct sigaction sact,sact1;
- sigset_t unblock_mask;
-
- sact.sa_flags = 0;
- sact.sa_handler = px_handle_sig;
- memcpy_fixed(&sact.sa_mask,set,sizeof(*set)); /* handler isn't thread_safe */
- sigemptyset(&unblock_mask);
- pthread_sigmask(SIG_UNBLOCK,(sigset_t*) 0,&rev_sigwait_set);
-
- for (i = 1; i <= sizeof(sigwait_set)*8; i++)
- {
- if (sigismember(set,i))
- {
- sigdelset(&rev_sigwait_set,i);
- if (!sigismember(&sigwait_set,i))
- sigaction(i, &sact, (struct sigaction*) 0);
- }
- else
- {
- sigdelset(&px_recd,i); /* Don't handle this */
- if (sigismember(&sigwait_set,i))
- { /* Remove the old handler */
- sigaddset(&unblock_mask,i);
- sigdelset(&rev_sigwait_set,i);
- sact1.sa_flags = 0;
- sact1.sa_handler = SIG_DFL;
- sigemptyset(&sact1.sa_mask);
- sigaction(i, &sact1, 0);
- }
- }
- }
- memcpy_fixed(&sigwait_set,set,sizeof(*set));
- pthread_sigmask(SIG_BLOCK,(sigset_t*) set,(sigset_t*) 0);
- pthread_sigmask(SIG_UNBLOCK,&unblock_mask,(sigset_t*) 0);
-}
-
-
-int sigwait(sigset_t *setp, int *sigp)
-{
- if (memcmp(setp,&sigwait_set,sizeof(sigwait_set)))
- sigwait_setup(setp); /* Init or change of set */
-
- for (;;)
- {
- /*
- This is a fast, not 100% portable implementation to find the signal.
- Because the handler is blocked there should be at most 1 bit set, but
- the specification on this is somewhat shady so we use a set instead a
- single variable.
- */
-
- ulong *ptr= (ulong*) &px_recd;
- ulong *end=ptr+sizeof(px_recd)/sizeof(ulong);
-
- for ( ; ptr != end ; ptr++)
- {
- if (*ptr)
- {
- ulong set= *ptr;
- int found= (int) ((char*) ptr - (char*) &px_recd)*8+1;
- while (!(set & 1))
- {
- found++;
- set>>=1;
- }
- *sigp=found;
- sigdelset(&px_recd,found);
- return 0;
- }
- }
- sigsuspend(&rev_sigwait_set);
- }
- return 0;
-}
-#else /* !DONT_USE_SIGSUSPEND */
-
-/****************************************************************************
-** Replacement of sigwait if the system doesn't have one (like BSDI 3.0)
-**
-** Note:
-** This version of sigwait() is assumed to called in a loop so the signalmask
-** is permanently modified to reflect the signal set. This is done to get
-** a much faster implementation.
-**
-** This implementation uses a extra thread to handle the signals and one
-** must always call sigwait() with the same signal mask!
-**
-** BSDI 3.0 NOTE:
-**
-** pthread_kill() doesn't work on a thread in a select() or sleep() loop?
-** After adding the sleep to sigwait_thread, all signals are checked and
-** delivered every second. This isn't that terrible performance vice, but
-** someone should report this to BSDI and ask for a fix!
-** Another problem is that when the sleep() ends, every select() in other
-** threads are interrupted!
-****************************************************************************/
-
-static sigset_t pending_set;
-static bool inited=0;
-static pthread_cond_t COND_sigwait;
-static pthread_mutex_t LOCK_sigwait;
-
-
-void sigwait_handle_sig(int sig)
-{
- pthread_mutex_lock(&LOCK_sigwait);
- sigaddset(&pending_set, sig);
- VOID(pthread_cond_signal(&COND_sigwait)); /* inform sigwait() about signal */
- pthread_mutex_unlock(&LOCK_sigwait);
-}
-
-extern pthread_t alarm_thread;
-
-void *sigwait_thread(void *set_arg)
-{
- sigset_t *set=(sigset_t*) set_arg;
-
- int i;
- struct sigaction sact;
- sact.sa_flags = 0;
- sact.sa_handler = sigwait_handle_sig;
- memcpy_fixed(&sact.sa_mask,set,sizeof(*set)); /* handler isn't thread_safe */
- sigemptyset(&pending_set);
-
- for (i = 1; i <= sizeof(pending_set)*8; i++)
- {
- if (sigismember(set,i))
- {
- sigaction(i, &sact, (struct sigaction*) 0);
- }
- }
- sigaddset(set,THR_CLIENT_ALARM);
- pthread_sigmask(SIG_UNBLOCK,(sigset_t*) set,(sigset_t*) 0);
- alarm_thread=pthread_self(); /* For thr_alarm */
-
- for (;;)
- { /* Wait for signals */
-#ifdef HAVE_NOT_BROKEN_SELECT
- fd_set fd;
- FD_ZERO(&fd);
- select(0,&fd,0,0,0);
-#else
- sleep(1); /* Because of broken BSDI */
-#endif
- }
-}
-
-
-int sigwait(sigset_t *setp, int *sigp)
-{
- if (!inited)
- {
- pthread_attr_t thr_attr;
- pthread_t sigwait_thread_id;
- inited=1;
- sigemptyset(&pending_set);
- pthread_mutex_init(&LOCK_sigwait,MY_MUTEX_INIT_FAST);
- pthread_cond_init(&COND_sigwait,NULL);
-
- pthread_attr_init(&thr_attr);
- pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS);
- pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED);
- pthread_attr_setstacksize(&thr_attr,8196);
- my_pthread_attr_setprio(&thr_attr,100); /* Very high priority */
- VOID(pthread_create(&sigwait_thread_id,&thr_attr,sigwait_thread,setp));
- VOID(pthread_attr_destroy(&thr_attr));
- }
-
- pthread_mutex_lock(&LOCK_sigwait);
- for (;;)
- {
- ulong *ptr= (ulong*) &pending_set;
- ulong *end=ptr+sizeof(pending_set)/sizeof(ulong);
-
- for ( ; ptr != end ; ptr++)
- {
- if (*ptr)
- {
- ulong set= *ptr;
- int found= (int) ((char*) ptr - (char*) &pending_set)*8+1;
- while (!(set & 1))
- {
- found++;
- set>>=1;
- }
- *sigp=found;
- sigdelset(&pending_set,found);
- pthread_mutex_unlock(&LOCK_sigwait);
- return 0;
- }
- }
- VOID(pthread_cond_wait(&COND_sigwait,&LOCK_sigwait));
- }
- return 0;
-}
-
-#endif /* DONT_USE_SIGSUSPEND */
-#endif /* HAVE_SIGWAIT */
-
-/*****************************************************************************
-** Implement pthread_signal for systems that can't use signal() with threads
-** Currently this is only used with BSDI 3.0
-*****************************************************************************/
-
-#ifdef USE_PTHREAD_SIGNAL
-
-int pthread_signal(int sig, void (*func)())
-{
- struct sigaction sact;
- sact.sa_flags= 0;
- sact.sa_handler= func;
- sigemptyset(&sact.sa_mask);
- sigaction(sig, &sact, (struct sigaction*) 0);
- return 0;
-}
-
-#endif
-
-/*****************************************************************************
-** Patches for AIX and DEC OSF/1 3.2
-*****************************************************************************/
-
-#if (defined(HAVE_NONPOSIX_PTHREAD_MUTEX_INIT) && !defined(HAVE_UNIXWARE7_THREADS)) || defined(HAVE_DEC_3_2_THREADS)
-#undef pthread_mutex_init
-#undef pthread_cond_init
-
-#include <netdb.h>
-
-int my_pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *attr)
-{
- int error;
- if (!attr)
- error=pthread_mutex_init(mp,pthread_mutexattr_default);
- else
- error=pthread_mutex_init(mp,*attr);
- return error;
-}
-
-int my_pthread_cond_init(pthread_cond_t *mp, const pthread_condattr_t *attr)
-{
- int error;
- if (!attr)
- error=pthread_cond_init(mp,pthread_condattr_default);
- else
- error=pthread_cond_init(mp,*attr);
- return error;
-}
-
-#endif
-
-/*
-** Emulate SOLARIS style calls, not because it's better, but just to make the
-** usage of getbostbyname_r simpler.
-*/
-
-#if !defined(my_gethostbyname_r) && defined(HAVE_GETHOSTBYNAME_R)
-
-#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
-
-struct hostent *my_gethostbyname_r(const char *name,
- struct hostent *result, char *buffer,
- int buflen, int *h_errnop)
-{
- struct hostent *hp;
- dbug_assert((size_t) buflen >= sizeof(*result));
- if (gethostbyname_r(name,result, buffer, (size_t) buflen, &hp, h_errnop))
- return 0;
- return hp;
-}
-
-#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)
-
-struct hostent *my_gethostbyname_r(const char *name,
- struct hostent *result, char *buffer,
- int buflen, int *h_errnop)
-{
- dbug_assert(buflen >= sizeof(struct hostent_data));
- if (gethostbyname_r(name,result,(struct hostent_data *) buffer) == -1)
- {
- *h_errnop= errno;
- return 0;
- }
- return result;
-}
-
-#else
-
-struct hostent *my_gethostbyname_r(const char *name,
- struct hostent *result, char *buffer,
- int buflen, int *h_errnop)
-{
- struct hostent *hp;
- dbug_assert(buflen >= sizeof(struct hostent_data));
- hp= gethostbyname_r(name,result,(struct hostent_data *) buffer);
- *h_errnop= errno;
- return hp;
-}
-
-#endif /* GLIBC2_STYLE_GETHOSTBYNAME_R */
-#endif
-
-
-/* Some help functions */
-
-int pthread_no_free(void *not_used __attribute__((unused)))
-{
- return 0;
-}
-
-int pthread_dummy(int ret)
-{
- return ret;
-}
-#endif /* THREAD */
diff --git a/ext/mysql/libmysql/my_pthread.h b/ext/mysql/libmysql/my_pthread.h
deleted file mode 100644
index 3b451dca51..0000000000
--- a/ext/mysql/libmysql/my_pthread.h
+++ /dev/null
@@ -1,565 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Defines to make different thread packages compatible */
-
-#ifndef _my_pthread_h
-#define _my_pthread_h
-
-#include <errno.h>
-#ifndef ETIME
-#define ETIME ETIMEDOUT /* For FreeBSD */
-#endif
-
-#if defined(__WIN__)
-
-typedef CRITICAL_SECTION pthread_mutex_t;
-typedef HANDLE pthread_t;
-typedef struct thread_attr {
- DWORD dwStackSize ;
- DWORD dwCreatingFlag ;
- int priority ;
-} pthread_attr_t ;
-
-typedef struct { int dummy; } pthread_condattr_t;
-
-/* Implementation of posix conditions */
-
-typedef struct st_pthread_link {
- DWORD thread_id;
- struct st_pthread_link *next;
-} pthread_link;
-
-typedef struct {
- uint32 waiting;
- HANDLE semaphore;
-} pthread_cond_t;
-
-
-struct timespec { /* For pthread_cond_timedwait() */
- time_t tv_sec;
- long tv_nsec;
-};
-
-typedef int pthread_mutexattr_t;
-#define win_pthread_self my_thread_var->pthread_self
-#define pthread_handler_decl(A,B) void * __cdecl A(void *B)
-typedef void * (__cdecl *pthread_handler)(void *);
-
-void win_pthread_init(void);
-int win_pthread_setspecific(void *A,void *B,uint length);
-int pthread_create(pthread_t *,pthread_attr_t *,pthread_handler,void *);
-int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
-int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
-int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
- struct timespec *abstime);
-int pthread_cond_signal(pthread_cond_t *cond);
-int pthread_cond_broadcast(pthread_cond_t *cond);
-int pthread_cond_destroy(pthread_cond_t *cond);
-int pthread_attr_init(pthread_attr_t *connect_att);
-int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack);
-int pthread_attr_setprio(pthread_attr_t *connect_att,int priority);
-int pthread_attr_destroy(pthread_attr_t *connect_att);
-struct tm *localtime_r(const time_t *timep,struct tm *tmp);
-
-void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/
-
-#define ETIMEDOUT 145 /* Win32 doesn't have this */
-#define getpid() GetCurrentThreadId()
-#define pthread_self() win_pthread_self
-#define HAVE_LOCALTIME_R
-#define _REENTRANT
-#define HAVE_PTHREAD_ATTR_SETSTACKSIZE
-
-#ifdef USE_TLS /* For LIBMYSQL.DLL */
-#undef SAFE_MUTEX /* This will cause conflicts */
-#define pthread_key(T,V) DWORD V
-#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF)
-#define pthread_getspecific(A) (TlsGetValue(A))
-#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A))
-#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V))
-#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V)))
-#define pthread_setspecific(A,B) (!TlsSetValue((A),(B)))
-#else
-#define pthread_key(T,V) __declspec(thread) T V
-#define pthread_key_create(A,B) pthread_dummy(0)
-#define pthread_getspecific(A) (&(A))
-#define my_pthread_getspecific(T,A) (&(A))
-#define my_pthread_getspecific_ptr(T,V) (V)
-#define my_pthread_setspecific_ptr(T,V) ((T)=(V),0)
-#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A))
-#endif /* USE_TLS */
-
-#define pthread_equal(A,B) ((A) == (B))
-#define pthread_mutex_init(A,B) InitializeCriticalSection(A)
-#define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
-#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
-#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
-#define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B))
-/* Dummy defines for easier code */
-#define pthread_kill(A,B) pthread_dummy(0)
-#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
-#define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B)
-#define pthread_attr_setscope(A,B)
-#define pthread_detach_this_thread()
-#define pthread_condattr_init(A)
-#define pthread_condattr_destroy(A)
-
-/*Irena: compiler does not like this: */
-/*#define my_pthread_getprio(pthread_t thread_id) pthread_dummy(0) */
-#define my_pthread_getprio(thread_id) pthread_dummy(0)
-
-#elif defined(HAVE_UNIXWARE7_THREADS)
-
-#include <thread.h>
-#include <synch.h>
-
-#ifndef _REENTRANT
-#define _REENTRANT
-#endif
-
-#define HAVE_NONPOSIX_SIGWAIT
-#define pthread_t thread_t
-#define pthread_cond_t cond_t
-#define pthread_mutex_t mutex_t
-#define pthread_key_t thread_key_t
-typedef int pthread_attr_t; /* Needed by Unixware 7.0.0 */
-
-#define pthread_key_create(A,B) thr_keycreate((A),(B))
-
-#define pthread_handler_decl(A,B) void *A(void *B)
-#define pthread_key(T,V) pthread_key_t V
-
-void * my_pthread_getspecific_imp(pthread_key_t key);
-#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B))
-#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,V)
-
-#define pthread_setspecific(A,B) thr_setspecific(A,B)
-#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,V)
-
-#define pthread_create(A,B,C,D) thr_create(NULL,65536L,(C),(D),THR_DETACHED,(A))
-#define pthread_cond_init(a,b) cond_init((a),USYNC_THREAD,NULL)
-#define pthread_cond_destroy(a) cond_destroy(a)
-#define pthread_cond_signal(a) cond_signal(a)
-#define pthread_cond_wait(a,b) cond_wait((a),(b))
-#define pthread_cond_timedwait(a,b,c) cond_timedwait((a),(b),(c))
-#define pthread_cond_broadcast(a) cond_broadcast(a)
-
-#define pthread_mutex_init(a,b) mutex_init((a),USYNC_THREAD,NULL)
-#define pthread_mutex_lock(a) mutex_lock(a)
-#define pthread_mutex_unlock(a) mutex_unlock(a)
-#define pthread_mutex_destroy(a) mutex_destroy(a)
-
-#define pthread_self() thr_self()
-#define pthread_exit(A) thr_exit(A)
-#define pthread_equal(A,B) (((A) == (B)) ? 1 : 0)
-#define pthread_kill(A,B) thr_kill((A),(B))
-#define HAVE_PTHREAD_KILL
-
-#define pthread_sigmask(A,B,C) thr_sigsetmask((A),(B),(C))
-
-extern int my_sigwait(const sigset_t *set,int *sig);
-
-#define pthread_detach_this_thread() pthread_dummy(0)
-
-#define pthread_attr_init(A) pthread_dummy(0)
-#define pthread_attr_destroy(A) pthread_dummy(0)
-#define pthread_attr_setscope(A,B) pthread_dummy(0)
-#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
-#define my_pthread_setprio(A,B) pthread_dummy (0)
-#define my_pthread_getprio(A) pthread_dummy (0)
-#define my_pthread_attr_setprio(A,B) pthread_dummy(0)
-
-#else /* Normal threads */
-
-#ifdef HAVE_rts_threads
-#define sigwait org_sigwait
-#include <signal.h>
-#undef sigwait
-#endif
-#undef _REENTRANT /* Fix if _REENTRANT is in pthread.h */
-#include <pthread.h>
-#ifndef _REENTRANT
-#define _REENTRANT
-#endif
-#ifdef HAVE_THR_SETCONCURRENCY
-#include <thread.h> /* Probably solaris */
-#endif
-#ifdef HAVE_SCHED_H
-#include <sched.h>
-#endif
-#ifdef HAVE_SYNCH_H
-#include <synch.h>
-#endif
-#if defined(__EMX__) && (!defined(EMX_PTHREAD_REV) || (EMX_PTHREAD_REV < 2))
-#error Requires at least rev 2 of EMX pthreads library.
-#endif
-
-extern int my_pthread_getprio(pthread_t thread_id);
-
-#define pthread_key(T,V) pthread_key_t V
-#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V))
-#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V))
-#define pthread_detach_this_thread()
-#define pthread_handler_decl(A,B) void *A(void *B)
-typedef void *(* pthread_handler)(void *);
-
-/* Test first for RTS or FSU threads */
-
-#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM)
-#define HAVE_rts_threads
-extern int my_pthread_create_detached;
-#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
-#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached
-#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL
-#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL
-#define USE_ALARM_THREAD
-#elif defined(HAVE_mit_thread)
-#define USE_ALARM_THREAD
-#undef HAVE_LOCALTIME_R
-#define HAVE_LOCALTIME_R
-#undef HAVE_PTHREAD_ATTR_SETSCOPE
-#define HAVE_PTHREAD_ATTR_SETSCOPE
-#undef HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE /* If we are running linux */
-#undef HAVE_RWLOCK_T
-#undef HAVE_RWLOCK_INIT
-#undef HAVE_PTHREAD_RWLOCK_RDLOCK
-#undef HAVE_SNPRINTF
-
-#define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
-#define signal(A,B) pthread_signal((A),(void (*)(int)) (B))
-#define my_pthread_attr_setprio(A,B)
-#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */
-
-#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910
-int sigwait(sigset_t *set, int *sig);
-#endif
-
-#if defined(HAVE_UNIXWARE7_POSIX)
-#undef HAVE_NONPOSIX_SIGWAIT
-#define HAVE_NONPOSIX_SIGWAIT /* sigwait takes only 1 argument */
-#endif
-
-#ifndef HAVE_NONPOSIX_SIGWAIT
-#define my_sigwait(A,B) sigwait((A),(B))
-#else
-int my_sigwait(const sigset_t *set,int *sig);
-#endif
-
-#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT
-#ifndef SAFE_MUTEX
-#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b))
-extern int my_pthread_mutex_init(pthread_mutex_t *mp,
- const pthread_mutexattr_t *attr);
-#endif /* SAFE_MUTEX */
-#define pthread_cond_init(a,b) my_pthread_cond_init((a),(b))
-extern int my_pthread_cond_init(pthread_cond_t *mp,
- const pthread_condattr_t *attr);
-#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */
-
-#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK)
-#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C))
-#endif
-
-#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)
-int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
-#endif
-#if !defined(HAVE_SIGSET) && !defined(HAVE_mit_thread) && !defined(sigset)
-#define sigset(A,B) do { struct sigaction s; sigset_t set; \
- sigemptyset(&set); \
- s.sa_handler = (B); \
- s.sa_mask = set; \
- s.sa_flags = 0; \
- sigaction((A), &s, (struct sigaction *) NULL); \
- } while (0)
-#endif
-
-#ifndef my_pthread_setprio
-#if defined(HAVE_PTHREAD_SETPRIO_NP) /* FSU threads */
-#define my_pthread_setprio(A,B) pthread_setprio_np((A),(B))
-#elif defined(HAVE_PTHREAD_SETPRIO)
-#define my_pthread_setprio(A,B) pthread_setprio((A),(B))
-#else
-extern void my_pthread_setprio(pthread_t thread_id,int prior);
-#endif
-#endif
-
-#ifndef my_pthread_attr_setprio
-#ifdef HAVE_PTHREAD_ATTR_SETPRIO
-#define my_pthread_attr_setprio(A,B) pthread_attr_setprio((A),(B))
-#else
-extern void my_pthread_attr_setprio(pthread_attr_t *attr, int priority);
-#endif
-#endif
-
-#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) || defined(HAVE_DEC_3_2_THREADS)
-#define pthread_attr_setscope(A,B)
-#undef HAVE_GETHOSTBYADDR_R /* No definition */
-#endif
-
-#ifndef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC
-#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B))
-#else
-#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B))
-void *my_pthread_getspecific_imp(pthread_key_t key);
-#endif
-
-#ifndef HAVE_LOCALTIME_R
-struct tm *localtime_r(const time_t *clock, struct tm *res);
-#endif
-
-#ifdef HAVE_PTHREAD_CONDATTR_CREATE
-/* DCE threads on HPUX 10.20 */
-#define pthread_condattr_init pthread_condattr_create
-#define pthread_condattr_destroy pthread_condattr_delete
-#endif
-
-#ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */
-#define pthread_cond_destroy(A) pthread_dummy(0)
-#define pthread_mutex_destroy(A) pthread_dummy(0)
-#define pthread_attr_delete(A) pthread_dummy(0)
-#define pthread_condattr_delete(A) pthread_dummy(0)
-#define pthread_attr_setstacksize(A,B) pthread_dummy(0)
-#define pthread_equal(A,B) ((A) == (B))
-#define pthread_cond_timedwait(a,b,c) pthread_cond_wait((a),(b))
-#define pthread_attr_init(A) pthread_attr_create(A)
-#define pthread_attr_destroy(A) pthread_attr_delete(A)
-#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
-#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D))
-#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
-#define pthread_kill(A,B) pthread_dummy(0)
-#undef pthread_detach_this_thread
-#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
-#endif
-
-#ifdef HAVE_DARWIN_THREADS
-#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
-#define pthread_kill(A,B) pthread_dummy(0)
-#define pthread_condattr_init(A) pthread_dummy(0)
-#define pthread_condattr_destroy(A) pthread_dummy(0)
-#define pthread_signal(A,B) pthread_dummy(0)
-#undef pthread_detach_this_thread
-#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
-#undef sigset
-#define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
-#endif
-
-#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
-/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */
-#define pthread_key_create(A,B) \
- pthread_keycreate(A,(B) ?\
- (pthread_destructor_t) (B) :\
- (pthread_destructor_t) pthread_dummy)
-#define pthread_attr_init(A) pthread_attr_create(A)
-#define pthread_attr_destroy(A) pthread_attr_delete(A)
-#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
-#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D))
-#ifndef pthread_sigmask
-#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
-#endif
-#define pthread_kill(A,B) pthread_dummy(0)
-#undef pthread_detach_this_thread
-#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
-#else /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */
-#define HAVE_PTHREAD_KILL
-#endif
-
-#if defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
-#if !defined(HPUX)
-struct hostent;
-#endif /* HPUX */
-struct hostent *my_gethostbyname_r(const char *name,
- struct hostent *result, char *buffer,
- int buflen, int *h_errnop);
-#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
-#define GETHOSTBYNAME_BUFF_SIZE 2048
-#else
-#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data)
-#endif /* defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */
-
-#else
-#ifdef HAVE_GETHOSTBYNAME_R_RETURN_INT
-#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data)
-struct hostent *my_gethostbyname_r(const char *name,
- struct hostent *result, char *buffer,
- int buflen, int *h_errnop);
-#else
-#define GETHOSTBYNAME_BUFF_SIZE 2048
-#define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E))
-#endif /* HAVE_GETHOSTBYNAME_R_RETURN_INT */
-#endif /* defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */
-
-#endif /* defined(__WIN__) */
-
- /* safe_mutex adds checking to mutex for easier debugging */
-
-typedef struct st_safe_mutex_t
-{
- pthread_mutex_t global,mutex;
- char *file;
- uint line,count;
- pthread_t thread;
-} safe_mutex_t;
-
-int safe_mutex_init(safe_mutex_t *mp, const pthread_mutexattr_t *attr);
-int safe_mutex_lock(safe_mutex_t *mp,const char *file, uint line);
-int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line);
-int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line);
-int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file,
- uint line);
-int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
- struct timespec *abstime, const char *file, uint line);
-
- /* Wrappers if safe mutex is actually used */
-#ifdef SAFE_MUTEX
-#undef pthread_mutex_init
-#undef pthread_mutex_lock
-#undef pthread_mutex_unlock
-#undef pthread_mutex_destroy
-#undef pthread_mutex_wait
-#undef pthread_mutex_timedwait
-#undef pthread_mutex_t
-#undef pthread_cond_wait
-#undef pthread_cond_timedwait
-#define pthread_mutex_init(A,B) safe_mutex_init((A),(B))
-#define pthread_mutex_lock(A) safe_mutex_lock((A),__FILE__,__LINE__)
-#define pthread_mutex_unlock(A) safe_mutex_unlock((A),__FILE__,__LINE__)
-#define pthread_mutex_destroy(A) safe_mutex_destroy((A),__FILE__,__LINE__)
-#define pthread_cond_wait(A,B) safe_cond_wait((A),(B),__FILE__,__LINE__)
-#define pthread_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__)
-#define pthread_mutex_trylock(A) pthread_mutex_lock(A)
-#define pthread_mutex_t safe_mutex_t
-#endif /* SAFE_MUTEX */
-
- /* READ-WRITE thread locking */
-
-#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS)
-/* use these defs for simple mutex locking */
-#define rw_lock_t pthread_mutex_t
-#define my_rwlock_init(A,B) pthread_mutex_init((A),(B))
-#define rw_rdlock(A) pthread_mutex_lock((A))
-#define rw_wrlock(A) pthread_mutex_lock((A))
-#define rw_unlock(A) pthread_mutex_unlock((A))
-#define rwlock_destroy(A) pthread_mutex_destroy((A))
-#elif defined(HAVE_PTHREAD_RWLOCK_RDLOCK)
-#define rw_lock_t pthread_rwlock_t
-#define my_rwlock_init(A,B) pthread_rwlock_init((A),(B))
-#define rw_rdlock(A) pthread_rwlock_rdlock(A)
-#define rw_wrlock(A) pthread_rwlock_wrlock(A)
-#define rw_unlock(A) pthread_rwlock_unlock(A)
-#define rwlock_destroy(A) pthread_rwlock_destroy(A)
-#elif defined(HAVE_RWLOCK_INIT)
-#ifdef HAVE_RWLOCK_T /* For example Solaris 2.6-> */
-#define rw_lock_t rwlock_t
-#endif
-#define my_rwlock_init(A,B) rwlock_init((A),USYNC_THREAD,0)
-#else
-/* Use our own version of read/write locks */
-typedef struct _my_rw_lock_t {
- pthread_mutex_t lock; /* lock for structure */
- pthread_cond_t readers; /* waiting readers */
- pthread_cond_t writers; /* waiting writers */
- int state; /* -1:writer,0:free,>0:readers */
- int waiters; /* number of waiting writers */
-} my_rw_lock_t;
-
-#define rw_lock_t my_rw_lock_t
-#define rw_rdlock(A) my_rw_rdlock((A))
-#define rw_wrlock(A) my_rw_wrlock((A))
-#define rw_unlock(A) my_rw_unlock((A))
-#define rwlock_destroy(A) my_rwlock_destroy((A))
-
-extern int my_rwlock_init( my_rw_lock_t *, void * );
-extern int my_rwlock_destroy( my_rw_lock_t * );
-extern int my_rw_rdlock( my_rw_lock_t * );
-extern int my_rw_wrlock( my_rw_lock_t * );
-extern int my_rw_unlock( my_rw_lock_t * );
-#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */
-
-#define GETHOSTBYADDR_BUFF_SIZE 2048
-
-#ifndef HAVE_THR_SETCONCURRENCY
-#define thr_setconcurrency(A) pthread_dummy(0)
-#endif
-#if !defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && ! defined(pthread_attr_setstacksize)
-#define pthread_attr_setstacksize(A,B) pthread_dummy(0)
-#endif
-
-/* Define mutex types */
-#define MY_MUTEX_INIT_SLOW NULL
-#define MY_MUTEX_INIT_FAST NULL
-#define MY_MUTEX_INIT_ERRCHK NULL
-#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
-extern pthread_mutexattr_t my_fast_mutexattr;
-#undef MY_MUTEX_INIT_FAST
-#define MY_MUTEX_INIT_FAST &my_fast_mutexattr
-#endif
-#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
-extern pthread_mutexattr_t my_errchk_mutexattr;
-#undef MY_INIT_MUTEX_ERRCHK
-#define MY_INIT_MUTEX_ERRCHK &my_errchk_mutexattr
-#endif
-
-extern my_bool my_thread_global_init(void);
-extern void my_thread_global_end(void);
-extern my_bool my_thread_init(void);
-extern void my_thread_end(void);
-extern const char *my_thread_name(void);
-extern long my_thread_id(void);
-extern int pthread_no_free(void *);
-extern int pthread_dummy(int);
-
-/* All thread specific variables are in the following struct */
-
-#define THREAD_NAME_SIZE 10
-#if defined(__ia64__)
-#define DEFAULT_THREAD_STACK (128*1024)
-#else
-#define DEFAULT_THREAD_STACK (64*1024)
-#endif
-
-struct st_my_thread_var
-{
- int thr_errno;
- pthread_cond_t suspend, *current_cond;
- pthread_mutex_t mutex, *current_mutex;
- pthread_t pthread_self;
- long id;
- int cmp_length;
- volatile int abort;
-#ifndef DBUG_OFF
- gptr dbug;
- char name[THREAD_NAME_SIZE+1];
-#endif
-};
-
-extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const));
-#define my_thread_var (_my_thread_var())
-#define my_errno my_thread_var->thr_errno
-
- /* statistics_xxx functions are for not essential statistic */
-
-#ifndef thread_safe_increment
-#ifdef HAVE_ATOMIC_ADD
-#define thread_safe_increment(V,L) atomic_add(1,(atomic_t*) &V);
-#define thread_safe_add(V,C,L) atomic_add((C),(atomic_t*) &V);
-#define thread_safe_sub(V,C,L) atomic_sub((C),(atomic_t*) &V);
-#define statistic_increment(V,L) thread_safe_increment((V),(L))
-#define statistic_add(V,C,L) thread_safe_add((V),(C),(L))
-#else
-#define thread_safe_increment(V,L) \
- pthread_mutex_lock((L)); (V)++; pthread_mutex_unlock((L));
-#define thread_safe_add(V,C,L) \
- pthread_mutex_lock((L)); (V)+=(C); pthread_mutex_unlock((L));
-#define thread_safe_sub(V,C,L) \
- pthread_mutex_lock((L)); (V)-=(C); pthread_mutex_unlock((L));
-#ifdef SAFE_STATISTICS
-#define statistic_increment(V,L) thread_safe_increment((V),(L))
-#define statistic_add(V,C,L) thread_safe_add((V),(C),(L))
-#else
-#define statistic_increment(V,L) (V)++
-#define statistic_add(V,C,L) (V)+=(C)
-#endif /* SAFE_STATISTICS */
-#endif /* HAVE_ATOMIC_ADD */
-#endif /* thread_safe_increment */
-#endif /* _my_ptread_h */
diff --git a/ext/mysql/libmysql/my_read.c b/ext/mysql/libmysql/my_read.c
deleted file mode 100644
index 3ca5bfb95a..0000000000
--- a/ext/mysql/libmysql/my_read.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <errno.h>
-
-
- /* Read a chunk of bytes from a file */
-
-uint my_read(File Filedes, byte *Buffer, uint Count, myf MyFlags)
- /* File descriptor */
- /* Buffer must be at least count bytes */
- /* Max number of bytes returnd */
- /* Flags on what to do on error */
-{
- uint readbytes;
- DBUG_ENTER("my_read");
- DBUG_PRINT("my",("Fd: %d Buffer: %lx Count: %u MyFlags: %d",
- Filedes, Buffer, Count, MyFlags));
-
- for (;;)
- {
- errno=0; /* Linux doesn't reset this */
- if ((readbytes = (uint) read(Filedes, Buffer, Count)) != Count)
- {
- my_errno=errno ? errno : -1;
- DBUG_PRINT("warning",("Read only %ld bytes off %ld from %d, errno: %d",
- readbytes,Count,Filedes,my_errno));
-#ifdef THREAD
- if (readbytes == 0 && errno == EINTR)
- continue; /* Interrupted */
-#endif
- if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
- {
- if ((int) readbytes == -1)
- my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG),
- my_filename(Filedes),my_errno);
- else if (MyFlags & (MY_NABP | MY_FNABP))
- my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG),
- my_filename(Filedes),my_errno);
- }
- if ((int) readbytes == -1 || (MyFlags & (MY_FNABP | MY_NABP)))
- DBUG_RETURN(MY_FILE_ERROR); /* Return with error */
- }
-
- if (MyFlags & (MY_NABP | MY_FNABP))
- readbytes=0; /* Ok on read */
- break;
- }
- DBUG_RETURN(readbytes);
-} /* my_read */
diff --git a/ext/mysql/libmysql/my_realloc.c b/ext/mysql/libmysql/my_realloc.c
deleted file mode 100644
index 48df8d3651..0000000000
--- a/ext/mysql/libmysql/my_realloc.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifdef SAFEMALLOC /* We don't need SAFEMALLOC here */
-#undef SAFEMALLOC
-#endif
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-
- /* My memory re allocator */
-
-gptr my_realloc(gptr oldpoint, uint Size, myf MyFlags)
-{
- gptr point;
- DBUG_ENTER("my_realloc");
- DBUG_PRINT("my",("ptr: %lx Size: %u MyFlags: %d",oldpoint, Size, MyFlags));
-
- if (!oldpoint && (MyFlags & MY_ALLOW_ZERO_PTR))
- DBUG_RETURN(my_malloc(Size,MyFlags));
-#ifdef USE_HALLOC
- if (!(point = malloc(Size)))
- {
- if (MyFlags & MY_FREE_ON_ERROR)
- my_free(oldpoint,MyFlags);
- if (MyFlags & MY_HOLD_ON_ERROR)
- DBUG_RETURN(oldpoint);
- my_errno=errno;
- if (MyFlags & MY_FAE+MY_WME)
- my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),Size);
- }
- else
- {
- memcpy(point,oldpoint,Size);
- free(oldpoint);
- }
-#else
- if ((point = realloc(oldpoint,Size)) == NULL)
- {
- if (MyFlags & MY_FREE_ON_ERROR)
- my_free(oldpoint,MyFLAGS);
- if (MyFlags & MY_HOLD_ON_ERROR)
- DBUG_RETURN(oldpoint);
- my_errno=errno;
- if (MyFlags & (MY_FAE+MY_WME))
- my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG), Size);
- }
-#endif
- DBUG_PRINT("exit",("ptr: %lx",point));
- DBUG_RETURN(point);
-} /* my_realloc */
diff --git a/ext/mysql/libmysql/my_static.c b/ext/mysql/libmysql/my_static.c
deleted file mode 100644
index 418345fa77..0000000000
--- a/ext/mysql/libmysql/my_static.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Static variables for mysys library. All definied here for easy making of
- a shared library
-*/
-
-#ifndef stdin
-#include "mysys_priv.h"
-#include "my_static.h"
-#include "my_alarm.h"
-#endif
-
- /* from my_init */
-my_string home_dir=0,my_progname=0;
-char NEAR curr_dir[FN_REFLEN]= {0},
- NEAR home_dir_buff[FN_REFLEN]= {0};
-ulong my_stream_opened=0,my_file_opened=0, my_tmp_file_created=0;
-int NEAR my_umask=0664, NEAR my_umask_dir=0777;
-#ifndef THREAD
-int NEAR my_errno=0;
-#endif
-struct my_file_info my_file_info[MY_NFILE]= {{0,UNOPEN}};
-
- /* From mf_brkhant */
-int NEAR my_dont_interrupt=0;
-volatile int _my_signals=0;
-struct st_remember _my_sig_remember[MAX_SIGNALS]={{0,0}};
-#ifdef THREAD
-sigset_t my_signals; /* signals blocked by mf_brkhant */
-#endif
-
- /* from mf_keycache.c */
-my_bool key_cache_inited=0;
-
- /* from mf_reccache.c */
-ulong my_default_record_cache_size=RECORD_CACHE_SIZE;
-
- /* from soundex.c */
- /* ABCDEFGHIJKLMNOPQRSTUVWXYZ */
- /* :::::::::::::::::::::::::: */
-const char *soundex_map= "01230120022455012623010202";
-
- /* from my_malloc */
-USED_MEM* my_once_root_block=0; /* pointer to first block */
-uint my_once_extra=ONCE_ALLOC_INIT; /* Memory to alloc / block */
-
- /* from my_tempnam */
-#ifndef HAVE_TEMPNAM
-int _my_tempnam_used=0;
-#endif
-
- /* from safe_malloc */
-uint sf_malloc_prehunc=0, /* If you have problem with core- */
- sf_malloc_endhunc=0, /* dump when malloc-message.... */
- /* set theese to 64 or 128 */
- sf_malloc_quick=0; /* set if no calls to sanity */
-long lCurMemory = 0L; /* Current memory usage */
-long lMaxMemory = 0L; /* Maximum memory usage */
-uint cNewCount = 0; /* Number of times NEW() was called */
-byte *sf_min_adress= (byte*) ~(unsigned long) 0L,
- *sf_max_adress= (byte*) 0L;
-
-/* Root of the linked list of remembers */
-struct remember *pRememberRoot = NULL;
-
- /* from my_alarm */
-int volatile my_have_got_alarm=0; /* declare variable to reset */
-ulong my_time_to_wait_for_lock=2; /* In seconds */
-
- /* from errors.c */
-#ifdef SHARED_LIBRARY
-char * NEAR globerrs[GLOBERRS]; /* my_error_messages is here */
-#endif
-void (*my_abort_hook)(int) = (void(*)(int)) exit;
-int (*error_handler_hook)(uint error,const char *str,myf MyFlags)=
- my_message_no_curses;
-int (*fatal_error_handler_hook)(uint error,const char *str,myf MyFlags)=
- my_message_no_curses;
-
- /* How to disable options */
-my_bool NEAR my_disable_locking=0;
-my_bool NEAR my_disable_async_io=0;
-my_bool NEAR my_disable_flush_key_blocks=0;
-my_bool NEAR mysys_uses_curses=0;
diff --git a/ext/mysql/libmysql/my_static.h b/ext/mysql/libmysql/my_static.h
deleted file mode 100644
index 29a9b74026..0000000000
--- a/ext/mysql/libmysql/my_static.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Static variables for mysys library. All definied here for easy making of
- a shared library
-*/
-
-#include "mysys_priv.h"
-#include <signal.h>
-
-#define MAX_SIGNALS 10 /* Max signals under a dont-allow */
-#define MIN_KEYBLOCK (min(IO_SIZE,1024))
-#define MAX_KEYBLOCK 8192 /* Max keyblocklength == 8*IO_SIZE */
-#define MAX_BLOCK_TYPES MAX_KEYBLOCK/MIN_KEYBLOCK
-
-struct st_remember {
- int number;
- sig_handler (*func)(int number);
-};
-
-struct irem {
- struct remember *_pNext; /* Linked list of structures */
- struct remember *_pPrev; /* Other link */
- my_string _sFileName; /* File in which memory was new'ed */
- uint _uLineNum; /* Line number in above file */
- uint _uDataSize; /* Size requested */
- long _lSpecialValue; /* Underrun marker value */
-};
-
-struct remember {
- struct irem tInt;
- char aData[1];
-};
-
-extern char NEAR curr_dir[FN_REFLEN],NEAR home_dir_buff[FN_REFLEN];
-
-extern volatile int _my_signals;
-extern struct st_remember _my_sig_remember[MAX_SIGNALS];
-
-extern const char *soundex_map;
-
-extern USED_MEM* my_once_root_block;
-extern uint my_once_extra;
-
-#ifndef HAVE_TEMPNAM
-extern int _my_tempnam_used;
-#endif
-
-extern byte *sf_min_adress,*sf_max_adress;
-extern uint cNewCount;
-extern struct remember *pRememberRoot;
-
-#if defined(THREAD) && !defined(__WIN__)
-extern sigset_t my_signals; /* signals blocked by mf_brkhant */
-#endif
diff --git a/ext/mysql/libmysql/my_sys.h b/ext/mysql/libmysql/my_sys.h
deleted file mode 100644
index 5a2689da2a..0000000000
--- a/ext/mysql/libmysql/my_sys.h
+++ /dev/null
@@ -1,589 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifndef _my_sys_h
-#define _my_sys_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef HAVE_AIOWAIT
-#include <sys/asynch.h> /* Used by record-cache */
-typedef struct my_aio_result {
- aio_result_t result;
- int pending;
-} my_aio_result;
-#endif
-
-#ifndef THREAD
-extern int NEAR my_errno; /* Last error in mysys */
-#else
-#include <my_pthread.h>
-#endif
-
-#ifndef _m_ctype_h
-#include <m_ctype.h> /* for CHARSET_INFO */
-#endif
-
-#include <stdarg.h>
-
-#define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; }
-#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;}
-#define MY_INIT(name); { my_progname= name; my_init(); }
-
-#define MAXMAPS (4) /* Number of error message maps */
-#define ERRMOD (1000) /* Max number of errors in a map */
-#define ERRMSGSIZE (SC_MAXWIDTH) /* Max length of a error message */
-#define NRERRBUFFS (2) /* Buffers for parameters */
-#define MY_FILE_ERROR ((uint) ~0)
-
- /* General bitmaps for my_func's */
-#define MY_FFNF 1 /* Fatal if file not found */
-#define MY_FNABP 2 /* Fatal if not all bytes read/writen */
-#define MY_NABP 4 /* Error if not all bytes read/writen */
-#define MY_FAE 8 /* Fatal if any error */
-#define MY_WME 16 /* Write message on error */
-#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */
-#define MY_RAID 64 /* Support for RAID (not the "Johnson&Johnson"-s one ;) */
-#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */
-#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */
-#define MY_COPYTIME 64 /* my_redel() copys time */
-#define MY_DELETE_OLD 256 /* my_create_with_symlink() */
-#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */
-#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */
-#define MY_REDEL_MAKE_BACKUP 256
-#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */
-#define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */
-#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */
-#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */
-#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */
-#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */
-#define MY_THREADSAFE 128 /* pread/pwrite: Don't allow interrupts */
-
-#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
-#define MY_GIVE_INFO 2 /* Give time info about process*/
-
-#define ME_HIGHBYTE 8 /* Shift for colours */
-#define ME_NOCUR 1 /* Don't use curses message */
-#define ME_OLDWIN 2 /* Use old window */
-#define ME_BELL 4 /* Ring bell then printing message */
-#define ME_HOLDTANG 8 /* Don't delete last keys */
-#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */
-#define ME_WAITTANG 32 /* Wait for a user action */
-#define ME_NOREFRESH 64 /* Dont refresh screen */
-#define ME_NOINPUT 128 /* Dont use the input libary */
-#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */
-#define ME_COLOUR2 ((2 << ME_HIGHBYTE))
-#define ME_COLOUR3 ((3 << ME_HIGHBYTE))
-
- /* My seek flags */
-#define MY_SEEK_SET 0
-#define MY_SEEK_CUR 1
-#define MY_SEEK_END 2
-
- /* My charsets_list flags */
-#define MY_NO_SETS 0
-#define MY_COMPILED_SETS 1 /* show compiled-in sets */
-#define MY_CONFIG_SETS 2 /* sets that have a *.conf file */
-#define MY_INDEX_SETS 4 /* all sets listed in the Index file */
-#define MY_LOADED_SETS 8 /* the sets that are currently loaded */
-
- /* Some constants */
-#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */
-#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */
-#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */
-#define KEYCACHE_BLOCK_SIZE 1024
-
- /* root_alloc flags */
-#define MY_KEEP_PREALLOC 1
-
- /* defines when allocating data */
-
-#ifdef SAFEMALLOC
-#define my_malloc(SZ,FLAG) _mymalloc( SZ, __FILE__, __LINE__, FLAG )
-#define my_realloc(PTR,SZ,FLAG) _myrealloc( PTR, SZ, __FILE__, __LINE__, FLAG )
-#define my_checkmalloc() _sanity( __FILE__, __LINE__ )
-#define my_free(PTR,FLAG) _myfree( PTR, __FILE__, __LINE__,FLAG)
-#define my_memdup(A,B,C) _my_memdup(A,B,__FILE__,__LINE__,C)
-#define my_strdup(A,C) _my_strdup(A,__FILE__,__LINE__,C)
-#define QUICK_SAFEMALLOC sf_malloc_quick=1
-#define NORMAL_SAFEMALLOC sf_malloc_quick=0
-extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick;
-extern ulonglong safemalloc_mem_limit;
-#else
-#define my_checkmalloc() (0)
-#define TERMINATE(A) {}
-#define QUICK_SAFEMALLOC
-#define NORMAL_SAFEMALLOC
-extern gptr my_malloc(uint Size,myf MyFlags);
-extern gptr my_realloc(gptr oldpoint,uint Size,myf MyFlags);
-extern void my_no_flags_free(gptr ptr);
-extern gptr my_memdup(const byte *from,uint length,myf MyFlags);
-extern my_string my_strdup(const char *from,myf MyFlags);
-#define my_free(PTR,FG) my_no_flags_free(PTR)
-#endif
-#ifdef HAVE_ALLOCA
-#define my_alloca(SZ) alloca((size_t) (SZ))
-#define my_afree(PTR) {}
-#else
-#define my_alloca(SZ) my_malloc(SZ,MYF(0))
-#define my_afree(PTR) my_free(PTR,MYF(MY_WME))
-#endif /* HAVE_ALLOCA */
-#ifdef MSDOS
-#ifdef __ZTC__
-void * __CDECL halloc(long count,size_t length);
-void __CDECL hfree(void *ptr);
-#endif
-#if defined(USE_HALLOC)
-#if defined(_VCM_) || defined(M_IC80386)
-#undef USE_HALLOC
-#endif
-#endif
-#ifdef USE_HALLOC
-#define malloc(a) halloc((long) (a),1)
-#define free(a) hfree(a)
-#endif
-#endif /* MSDOS */
-
-#ifdef HAVE_ERRNO_AS_DEFINE
-#include <errno.h> /* errno is a define */
-#else
-extern int errno; /* declare errno */
-#endif
-extern const char ** NEAR my_errmsg[];
-extern char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
-extern char *home_dir; /* Home directory for user */
-extern char *my_progname; /* program-name (printed in errors) */
-extern char NEAR curr_dir[]; /* Current directory for user */
-extern int (*error_handler_hook)(uint my_err, const char *str,myf MyFlags);
-extern int (*fatal_error_handler_hook)(uint my_err, const char *str,
- myf MyFlags);
-
-/* charsets */
-extern uint get_charset_number(const char *cs_name);
-extern const char *get_charset_name(uint cs_number);
-extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
-extern my_bool set_default_charset(uint cs, myf flags);
-extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
-extern my_bool set_default_charset_by_name(const char *cs_name, myf flags);
-extern void free_charsets(void);
-extern char *list_charsets(myf want_flags); /* my_free() this string... */
-extern char *get_charsets_dir(char *buf);
-
-
-/* statistics */
-extern ulong _my_cache_w_requests,_my_cache_write,_my_cache_r_requests,
- _my_cache_read;
-extern ulong _my_blocks_used,_my_blocks_changed;
-extern ulong my_file_opened,my_stream_opened, my_tmp_file_created;
-extern my_bool key_cache_inited;
-
- /* Point to current my_message() */
-extern void (*my_sigtstp_cleanup)(void),
- /* Executed before jump to shell */
- (*my_sigtstp_restart)(void),
- (*my_abort_hook)(int);
- /* Executed when comming from shell */
-extern int NEAR my_umask, /* Default creation mask */
- NEAR my_umask_dir,
- NEAR my_recived_signals, /* Signals we have got */
- NEAR my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */
- NEAR my_dont_interrupt; /* call remember_intr when set */
-extern my_bool NEAR mysys_uses_curses, my_use_symdir;
-extern long lCurMemory,lMaxMemory; /* from safemalloc */
-
-extern ulong my_default_record_cache_size;
-extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io,
- NEAR my_disable_flush_key_blocks;
-extern char wild_many,wild_one,wild_prefix;
-extern const char *charsets_dir;
-extern char *defaults_extra_file;
-
-typedef struct wild_file_pack /* Struct to hold info when selecting files */
-{
- uint wilds; /* How many wildcards */
- uint not_pos; /* Start of not-theese-files */
- my_string *wild; /* Pointer to wildcards */
-} WF_PACK;
-
-typedef struct st_typelib { /* Different types saved here */
- uint count; /* How many types */
- const char *name; /* Name of typelib */
- const char **type_names;
-} TYPELIB;
-
-enum cache_type {READ_CACHE,WRITE_CACHE,READ_FIFO,READ_NET,WRITE_NET};
-enum flush_type { FLUSH_KEEP, FLUSH_RELEASE, FLUSH_IGNORE_CHANGED,
- FLUSH_FORCE_WRITE};
-
-typedef struct st_record_cache /* Used when cacheing records */
-{
- File file;
- int rc_seek,error,inited;
- uint rc_length,read_length,reclength;
- my_off_t rc_record_pos,end_of_file;
- byte *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos;
-#ifdef HAVE_AIOWAIT
- int use_async_io;
- my_aio_result aio_result;
-#endif
- enum cache_type type;
-} RECORD_CACHE;
-
-enum file_type { UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE,
- STREAM_BY_FOPEN, STREAM_BY_FDOPEN, FILE_BY_MKSTEMP };
-
-extern struct my_file_info
-{
- my_string name;
- enum file_type type;
-#if defined(THREAD) && !defined(HAVE_PREAD)
- pthread_mutex_t mutex;
-#endif
-} my_file_info[MY_NFILE];
-
-
-typedef struct st_dynamic_array {
- char *buffer;
- uint elements,max_element;
- uint alloc_increment;
- uint size_of_element;
-} DYNAMIC_ARRAY;
-
-typedef struct st_dynamic_string {
- char *str;
- uint length,max_length,alloc_increment;
-} DYNAMIC_STRING;
-
-
-typedef struct st_io_cache /* Used when cacheing files */
-{
- my_off_t pos_in_file,end_of_file;
- byte *rc_pos,*rc_end,*buffer,*rc_request_pos;
- int (*read_function)(struct st_io_cache *,byte *,uint);
- char *file_name; /* if used with 'open_cached_file' */
- char *dir,*prefix;
- File file;
- int seek_not_done,error;
- uint buffer_length,read_length;
- myf myflags; /* Flags used to my_read/my_write */
- enum cache_type type;
-#ifdef HAVE_AIOWAIT
- uint inited;
- my_off_t aio_read_pos;
- my_aio_result aio_result;
-#endif
-} IO_CACHE;
-
-typedef int (*qsort2_cmp)(const void *, const void *, const void *);
-
- /* defines for mf_iocache */
-
- /* Test if buffer is inited */
-#define my_b_clear(info) (info)->buffer=0
-#define my_b_inited(info) (info)->buffer
-#define my_b_EOF INT_MIN
-
-#define my_b_read(info,Buffer,Count) \
- ((info)->rc_pos + (Count) <= (info)->rc_end ?\
- (memcpy(Buffer,(info)->rc_pos,(size_t) (Count)), \
- ((info)->rc_pos+=(Count)),0) :\
- (*(info)->read_function)((info),Buffer,Count))
-
-#define my_b_get(info) \
- ((info)->rc_pos != (info)->rc_end ?\
- ((info)->rc_pos++, (int) (uchar) (info)->rc_pos[-1]) :\
- _my_b_get(info))
-
-#define my_b_write(info,Buffer,Count) \
- ((info)->rc_pos + (Count) <= (info)->rc_end ?\
- (memcpy((info)->rc_pos,Buffer,(size_t) (Count)), \
- ((info)->rc_pos+=(Count)),0) :\
- _my_b_write(info,Buffer,Count))
-
- /* my_b_write_byte dosn't have any err-check */
-#define my_b_write_byte(info,chr) \
- (((info)->rc_pos < (info)->rc_end) ?\
- ((*(info)->rc_pos++)=(chr)) :\
- (_my_b_write(info,0,0) , ((*(info)->rc_pos++)=(chr))))
-
-#define my_b_fill_cache(info) \
- (((info)->rc_end=(info)->rc_pos),(*(info)->read_function)(info,0,0))
-
-#define my_b_tell(info) ((info)->pos_in_file + \
- ((info)->rc_pos - (info)->rc_request_pos))
-
-#define my_b_bytes_in_cache(info) ((uint) ((info)->rc_end - (info)->rc_pos))
-
-typedef struct st_changeable_var {
- const char *name; /* Name of variable */
- long *varptr; /* Pointer to variable */
- long def_value, /* Default value */
- min_value, /* Min allowed value */
- max_value, /* Max allowed value */
- sub_size, /* Subtract this from given value */
- block_size; /* Value should be a mult. of this */
-} CHANGEABLE_VAR;
-
-
-/* structs for alloc_root */
-
-#ifndef ST_USED_MEM_DEFINED
-#define ST_USED_MEM_DEFINED
-typedef struct st_used_mem { /* struct for once_alloc */
- struct st_used_mem *next; /* Next block in use */
- unsigned int left; /* memory left in block */
- unsigned int size; /* Size of block */
-} USED_MEM;
-
-typedef struct st_mem_root {
- USED_MEM *free;
- USED_MEM *used;
- USED_MEM *pre_alloc;
- unsigned int min_malloc;
- unsigned int block_size;
-
- void (*error_handler)(void);
-} MEM_ROOT;
-#endif
-
- /* Prototypes for mysys and my_func functions */
-
-extern int my_copy(const char *from,const char *to,myf MyFlags);
-extern int my_append(const char *from,const char *to,myf MyFlags);
-extern int my_delete(const char *name,myf MyFlags);
-extern int my_getwd(my_string buf,uint size,myf MyFlags);
-extern int my_setwd(const char *dir,myf MyFlags);
-extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags);
-extern gptr my_once_alloc(uint Size,myf MyFlags);
-extern void my_once_free(void);
-extern my_string my_tempnam(const char *dir,const char *pfx,myf MyFlags);
-extern File my_open(const char *FileName,int Flags,myf MyFlags);
-extern File my_register_filename(File fd, const char *FileName,
- enum file_type type_of_file,
- uint error_message_number, myf MyFlags);
-extern File my_create(const char *FileName,int CreateFlags,
- int AccsesFlags, myf MyFlags);
-extern int my_close(File Filedes,myf MyFlags);
-extern int my_mkdir(const char *dir, int Flags, myf MyFlags);
-extern int my_readlink(char *to, const char *filename, myf MyFlags);
-extern int my_realpath(char *to, const char *filename, myf MyFlags);
-extern File my_create_with_symlink(const char *linkname, const char *filename,
- int createflags, int access_flags,
- myf MyFlags);
-extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
-extern uint my_read(File Filedes,byte *Buffer,uint Count,myf MyFlags);
-extern uint my_pread(File Filedes,byte *Buffer,uint Count,my_off_t offset,
- myf MyFlags);
-extern int my_rename(const char *from,const char *to,myf MyFlags);
-extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags);
-extern my_off_t my_tell(File fd,myf MyFlags);
-extern uint my_write(File Filedes,const byte *Buffer,uint Count,
- myf MyFlags);
-extern uint my_pwrite(File Filedes,const byte *Buffer,uint Count,
- my_off_t offset,myf MyFlags);
-extern uint my_fread(FILE *stream,byte *Buffer,uint Count,myf MyFlags);
-extern uint my_fwrite(FILE *stream,const byte *Buffer,uint Count,
- myf MyFlags);
-extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags);
-extern my_off_t my_ftell(FILE *stream,myf MyFlags);
-extern gptr _mymalloc(uint uSize,const char *sFile,
- uint uLine, myf MyFlag);
-extern gptr _myrealloc(gptr pPtr,uint uSize,const char *sFile,
- uint uLine, myf MyFlag);
-extern gptr my_multi_malloc _VARARGS((myf MyFlags, ...));
-extern void _myfree(gptr pPtr,const char *sFile,uint uLine, myf MyFlag);
-extern int _sanity(const char *sFile,unsigned int uLine);
-extern gptr _my_memdup(const byte *from,uint length,
- const char *sFile, uint uLine,myf MyFlag);
-extern my_string _my_strdup(const char *from, const char *sFile, uint uLine,
- myf MyFlag);
-#ifndef TERMINATE
-extern void TERMINATE(FILE *file);
-#endif
-extern void init_glob_errs(void);
-extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
-extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
-extern int my_fclose(FILE *fd,myf MyFlags);
-extern int my_chsize(File fd,my_off_t newlength,myf MyFlags);
-extern int my_error _VARARGS((int nr,myf MyFlags, ...));
-extern int my_printf_error _VARARGS((uint my_err, const char *format,
- myf MyFlags, ...)
- __attribute__ ((format (printf, 2, 4))));
-extern int my_vsnprintf( char *str, size_t n,
- const char *format, va_list ap );
-extern int my_snprintf(char* to, size_t n, const char* fmt, ...);
-extern int my_message(uint my_err, const char *str,myf MyFlags);
-extern int my_message_no_curses(uint my_err, const char *str,myf MyFlags);
-extern int my_message_curses(uint my_err, const char *str,myf MyFlags);
-extern void my_init(void);
-extern void my_end(int infoflag);
-extern int my_redel(const char *from, const char *to, int MyFlags);
-extern int my_copystat(const char *from, const char *to, int MyFlags);
-extern my_string my_filename(File fd);
-
-#ifndef THREAD
-extern void dont_break(void);
-extern void allow_break(void);
-#else
-#define dont_break()
-#define allow_break()
-#endif
-
-extern void my_remember_signal(int signal_number,sig_handler (*func)(int));
-extern void caseup(my_string str,uint length);
-extern void casedn(my_string str,uint length);
-extern void caseup_str(my_string str);
-extern void casedn_str(my_string str);
-extern void case_sort(my_string str,uint length);
-extern uint dirname_part(my_string to,const char *name);
-extern uint dirname_length(const char *name);
-#define base_name(A) (A+dirname_length(A))
-extern int test_if_hard_path(const char *dir_name);
-extern char *convert_dirname(my_string name);
-extern void to_unix_path(my_string name);
-extern my_string fn_ext(const char *name);
-extern my_string fn_same(my_string toname,const char *name,int flag);
-extern my_string fn_format(my_string to,const char *name,const char *dsk,
- const char *form,int flag);
-extern size_s strlength(const char *str);
-extern void pack_dirname(my_string to,const char *from);
-extern uint unpack_dirname(my_string to,const char *from);
-extern uint cleanup_dirname(my_string to,const char *from);
-extern uint system_filename(my_string to,const char *from);
-extern my_string unpack_filename(my_string to,const char *from);
-extern my_string intern_filename(my_string to,const char *from);
-extern my_string directory_file_name(my_string dst, const char *src);
-extern int pack_filename(my_string to, const char *name, size_s max_length);
-extern my_string my_path(my_string to,const char *progname,
- const char *own_pathname_part);
-extern my_string my_load_path(my_string to, const char *path,
- const char *own_path_prefix);
-extern int wild_compare(const char *str,const char *wildstr);
-extern my_string my_strcasestr(const char *src,const char *suffix);
-extern int my_strcasecmp(const char *s,const char *t);
-extern int my_strsortcmp(const char *s,const char *t);
-extern int my_casecmp(const char *s,const char *t,uint length);
-extern int my_sortcmp(const char *s,const char *t,uint length);
-extern int my_sortncmp(const char *s,uint s_len, const char *t,uint t_len);
-extern WF_PACK *wf_comp(my_string str);
-extern int wf_test(struct wild_file_pack *wf_pack,const char *name);
-extern void wf_end(struct wild_file_pack *buffer);
-extern size_s stripp_sp(my_string str);
-extern void get_date(my_string to,int timeflag,time_t use_time);
-extern void soundex(my_string out_pntr, my_string in_pntr,pbool remove_garbage);
-extern int init_record_cache(RECORD_CACHE *info,uint cachesize,File file,
- uint reclength,enum cache_type type,
- pbool use_async_io);
-extern int read_cache_record(RECORD_CACHE *info,byte *to);
-extern int end_record_cache(RECORD_CACHE *info);
-extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos,
- const byte *record,uint length);
-extern int flush_write_cache(RECORD_CACHE *info);
-extern long my_clock(void);
-extern sig_handler sigtstp_handler(int signal_number);
-extern void handle_recived_signals(void);
-extern int init_key_cache(ulong use_mem,ulong leave_this_much_mem);
-extern byte *key_cache_read(File file,my_off_t filepos,byte* buff,uint length,
- uint block_length,int return_buffer);
-extern int key_cache_write(File file,my_off_t filepos,byte* buff,uint length,
- uint block_length,int force_write);
-extern int flush_key_blocks(int file, enum flush_type type);
-extern void end_key_cache(void);
-extern sig_handler my_set_alarm_variable(int signo);
-extern void my_string_ptr_sort(void *base,uint items,size_s size);
-extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
- size_s size_of_element,uchar *buffer[]);
-extern qsort_t qsort2(void *base_ptr, size_t total_elems, size_t size,
- qsort2_cmp cmp, void *cmp_argument);
-extern qsort2_cmp get_ptr_compare(uint);
-extern int init_io_cache(IO_CACHE *info,File file,uint cachesize,
- enum cache_type type,my_off_t seek_offset,
- pbool use_async_io, myf cache_myflags);
-extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type,
- my_off_t seek_offset,pbool use_async_io,
- pbool clear_cache);
-extern int _my_b_read(IO_CACHE *info,byte *Buffer,uint Count);
-extern int _my_b_net_read(IO_CACHE *info,byte *Buffer,uint Count);
-extern int _my_b_get(IO_CACHE *info);
-extern int _my_b_async_read(IO_CACHE *info,byte *Buffer,uint Count);
-extern int _my_b_write(IO_CACHE *info,const byte *Buffer,uint Count);
-extern int my_block_write(IO_CACHE *info, const byte *Buffer,
- uint Count, my_off_t pos);
-extern int flush_io_cache(IO_CACHE *info);
-extern int end_io_cache(IO_CACHE *info);
-extern uint my_b_fill(IO_CACHE *info);
-extern void my_b_seek(IO_CACHE *info,my_off_t pos);
-extern uint my_b_gets(IO_CACHE *info, char *to, uint max_length);
-extern uint my_b_printf(IO_CACHE *info, const char* fmt, ...);
-extern uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap);
-extern my_bool open_cached_file(IO_CACHE *cache,const char *dir,
- const char *prefix, uint cache_size,
- myf cache_myflags);
-extern my_bool real_open_cached_file(IO_CACHE *cache);
-extern void close_cached_file(IO_CACHE *cache);
-File create_temp_file(char *to, const char *dir, const char *pfx,
- int mode, myf MyFlags);
-extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size,
- uint init_alloc,uint alloc_increment);
-extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,gptr element);
-extern byte *alloc_dynamic(DYNAMIC_ARRAY *array);
-extern byte *pop_dynamic(DYNAMIC_ARRAY*);
-extern my_bool set_dynamic(DYNAMIC_ARRAY *array,gptr element,uint array_index);
-extern void get_dynamic(DYNAMIC_ARRAY *array,gptr element,uint array_index);
-extern void delete_dynamic(DYNAMIC_ARRAY *array);
-extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index);
-extern void freeze_size(DYNAMIC_ARRAY *array);
-#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element)
-#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index))
-#define push_dynamic(A,B) insert_dynamic(A,B)
-
-extern int find_type(my_string x,TYPELIB *typelib,uint full_name);
-extern void make_type(my_string to,uint nr,TYPELIB *typelib);
-extern const char *get_type(TYPELIB *typelib,uint nr);
-extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str,
- uint init_alloc,uint alloc_increment);
-extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append);
-my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
- uint length);
-extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str);
-extern my_bool dynstr_realloc(DYNAMIC_STRING *str, ulong additional_size);
-extern void dynstr_free(DYNAMIC_STRING *str);
-void set_all_changeable_vars(CHANGEABLE_VAR *vars);
-my_bool set_changeable_var(my_string str,CHANGEABLE_VAR *vars);
-my_bool set_changeable_varval(const char *var, ulong val,
- CHANGEABLE_VAR *vars);
-#ifdef HAVE_MLOCK
-extern byte *my_malloc_lock(uint length,myf flags);
-extern void my_free_lock(byte *ptr,myf flags);
-#else
-#define my_malloc_lock(A,B) my_malloc((A),(B))
-#define my_free_lock(A,B) my_free((A),(B))
-#endif
-#define alloc_root_inited(A) ((A)->min_malloc != 0)
-void init_alloc_root(MEM_ROOT *mem_root, uint block_size, uint pre_alloc_size);
-gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size);
-void free_root(MEM_ROOT *root, myf MyFLAGS);
-char *strdup_root(MEM_ROOT *root,const char *str);
-char *memdup_root(MEM_ROOT *root,const char *str,uint len);
-void load_defaults(const char *conf_file, const char **groups,
- int *argc, char ***argv);
-void free_defaults(char **argv);
-void print_defaults(const char *conf_file, const char **groups);
-my_bool my_compress(byte *, ulong *, ulong *);
-my_bool my_uncompress(byte *, ulong *, ulong *);
-byte *my_compress_alloc(const byte *packet, ulong *len, ulong *complen);
-ulong checksum(const byte *mem, uint count);
-
-#if defined(_MSC_VER) && !defined(__WIN__)
-extern void sleep(int sec);
-#endif
-#ifdef __WIN__
-extern my_bool have_tcpip; /* Is set if tcpip is used */
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#include "raid.h"
-#endif /* _my_sys_h */
diff --git a/ext/mysql/libmysql/my_tempnam.c b/ext/mysql/libmysql/my_tempnam.c
deleted file mode 100644
index f6296398ee..0000000000
--- a/ext/mysql/libmysql/my_tempnam.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#include "my_static.h"
-#include "mysys_err.h"
-
-#define TMP_EXT ".tmp" /* Extension of tempfile */
-#if ! defined(P_tmpdir)
-#define P_tmpdir ""
-#endif
-
-#ifdef HAVE_TEMPNAM
-#ifndef MSDOS
-extern char **environ;
-#endif
-#endif
-
-/* Make a uniq temp file name by using dir and adding something after
- pfx to make name uniq. Name is made by adding a uniq 8 length-string and
- TMP_EXT after pfx.
- Returns pointer to malloced area for filename. Should be freed by
- free().
- The name should be uniq, but it isn't checked if it file allready exists.
- Uses tempnam() if function exist on system.
- This function fixes that if dir is given it's used. For example
- MSDOS tempnam() uses always TMP environment-variable if it exists.
-*/
- /* ARGSUSED */
-
-my_string my_tempnam(const char *dir, const char *pfx,
- myf MyFlags __attribute__((unused)))
-{
-#ifdef _MSC_VER
- char temp[FN_REFLEN],*end,*res,**old_env,*temp_env[1];
- old_env=environ;
- if (dir)
- {
- end=strend(dir)-1;
- if (!dir[0])
- { /* Change empty string to current dir */
- temp[0]= FN_CURLIB;
- temp[1]= 0;
- dir=temp;
- }
- else if (*end == FN_DEVCHAR)
- { /* Get current dir for drive */
- _fullpath(temp,dir,FN_REFLEN);
- dir=temp;
- }
- else if (*end == FN_LIBCHAR && dir < end && end[-1] != FN_DEVCHAR)
- {
- strmake(temp,dir,(uint) (end-dir)); /* Copy and remove last '\' */
- dir=temp;
- }
- environ=temp_env; /* Force use of dir (dir not checked) */
- temp_env[0]=0;
- }
- res=tempnam((char*) dir,(my_string) pfx);
- environ=old_env;
- return res;
-#else
-#ifdef __ZTC__
- if (!dir)
- { /* If empty test first if TMP can be used */
- dir=getenv("TMP");
- }
- return tempnam((char*) dir,(my_string) pfx); /* Use stand. dir with prefix */
-#else
-#ifdef HAVE_TEMPNAM
- char temp[2],*res,**old_env,*temp_env[1];
-
- if (dir && !dir[0])
- { /* Change empty string to current dir */
- temp[0]= FN_CURLIB;
- temp[1]= 0;
- dir=temp;
- }
- old_env=environ;
- if (dir)
- { /* Don't use TMPDIR if dir is given */
- environ=temp_env;
- temp_env[0]=0;
- }
- res=tempnam((char*) dir,(my_string) pfx); /* Use stand. dir with prefix */
- environ=old_env;
- if (!res)
- DBUG_PRINT("error",("Got error: %d from tempnam",errno));
- return res;
-#else
- register long uniq;
- register int length;
- my_string pos,end_pos;
- DBUG_ENTER("my_tempnam");
- /* Make a uniq nummber */
- pthread_mutex_lock(&THR_LOCK_open);
- uniq= ((long) getpid() << 20) + (long) _my_tempnam_used++ ;
- pthread_mutex_unlock(&THR_LOCK_open);
- if (!dir && !(dir=getenv("TMPDIR"))) /* Use this if possibly */
- dir=P_tmpdir; /* Use system default */
- length=strlen(dir)+strlen(pfx)+1;
-
- DBUG_PRINT("test",("mallocing %d byte",length+8+sizeof(TMP_EXT)+1));
- if (!(pos=(char*) malloc(length+8+sizeof(TMP_EXT)+1)))
- {
- if (MyFlags & MY_FAE+MY_WME)
- my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),
- length+8+sizeof(TMP_EXT)+1);
- DBUG_RETURN(NullS);
- }
- end_pos=strmov(pos,dir);
- if (end_pos != pos && end_pos[-1] != FN_LIBCHAR)
- *end_pos++=FN_LIBCHAR;
- end_pos=strmov(end_pos,pfx);
-
- for (length=0 ; length < 8 && uniq ; length++)
- {
- *end_pos++= _dig_vec[(int) (uniq & 31)];
- uniq >>= 5;
- }
- VOID(strmov(end_pos,TMP_EXT));
- DBUG_PRINT("exit",("tempnam: '%s'",pos));
- DBUG_RETURN(pos);
-#endif /* HAVE_TEMPNAM */
-#endif /* __ZTC__ */
-#endif /* _MSC_VER */
-} /* my_tempnam */
diff --git a/ext/mysql/libmysql/my_thr_init.c b/ext/mysql/libmysql/my_thr_init.c
deleted file mode 100644
index 0d0e755bcd..0000000000
--- a/ext/mysql/libmysql/my_thr_init.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
-** Functions to handle initializating and allocationg of all mysys & debug
-** thread variables.
-*/
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
-#ifdef THREAD
-#ifdef USE_TLS
-pthread_key(struct st_my_thread_var*, THR_KEY_mysys);
-#else
-pthread_key(struct st_my_thread_var, THR_KEY_mysys);
-#endif /* USE_TLS */
-pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
- THR_LOCK_lock,THR_LOCK_isam,THR_LOCK_myisam,THR_LOCK_heap,
- THR_LOCK_net, THR_LOCK_charset;
-#ifndef HAVE_LOCALTIME_R
-pthread_mutex_t LOCK_localtime_r;
-#endif
-#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
-pthread_mutexattr_t my_fast_mutexattr;
-#endif
-#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
-pthread_mutexattr_t my_errchk_mutexattr;
-#endif
-
-/* FIXME Note. TlsAlloc does not set an auto destructor, so
- the function my_thread_global_free must be called from
- somewhere before final exit of the library */
-
-my_bool my_thread_global_init(void)
-{
- if (pthread_key_create(&THR_KEY_mysys,free))
- {
- fprintf(stderr,"Can't initialize threads: error %d\n",errno);
- exit(1);
- }
-#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
- pthread_mutexattr_init(&my_fast_mutexattr);
- pthread_mutexattr_setkind_np(&my_fast_mutexattr,PTHREAD_MUTEX_ADAPTIVE_NP);
-#endif
-#ifdef PPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
- pthread_mutexattr_init(&my_errchk_mutexattr);
- pthread_mutexattr_setkind_np(&my_errchk_mutexattr,
- PTHREAD_MUTEX_ERRORCHECK_NP);
-#endif
-
- pthread_mutex_init(&THR_LOCK_malloc,MY_MUTEX_INIT_FAST);
- pthread_mutex_init(&THR_LOCK_open,MY_MUTEX_INIT_FAST);
- pthread_mutex_init(&THR_LOCK_keycache,MY_MUTEX_INIT_FAST);
- pthread_mutex_init(&THR_LOCK_lock,MY_MUTEX_INIT_FAST);
- pthread_mutex_init(&THR_LOCK_isam,MY_MUTEX_INIT_SLOW);
- pthread_mutex_init(&THR_LOCK_myisam,MY_MUTEX_INIT_SLOW);
- pthread_mutex_init(&THR_LOCK_heap,MY_MUTEX_INIT_FAST);
- pthread_mutex_init(&THR_LOCK_net,MY_MUTEX_INIT_FAST);
- pthread_mutex_init(&THR_LOCK_charset,MY_MUTEX_INIT_FAST);
-#ifdef __WIN__
- win_pthread_init();
-#endif
-#ifndef HAVE_LOCALTIME_R
- pthread_mutex_init(&LOCK_localtime_r,MY_MUTEX_INIT_SLOW);
-#endif
- return my_thread_init();
-}
-
-void my_thread_global_end(void)
-{
-#if defined(USE_TLS)
- (void) TlsFree(THR_KEY_mysys);
-#endif
-#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
- pthread_mutexattr_destroy(&my_fast_mutexattr);
-#endif
-#ifdef PPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
- pthread_mutexattr_destroy(&my_errchk_mutexattr);
-#endif
-}
-
-static long thread_id=0;
-
-/*
- We can't use mutex_locks here if we are using windows as
- we may have compiled the program with SAFE_MUTEX, in which
- case the checking of mutex_locks will not work until
- the pthread_self thread specific variable is initialized.
-*/
-
-my_bool my_thread_init(void)
-{
- struct st_my_thread_var *tmp;
-#if !defined(__WIN__) || defined(USE_TLS) || ! defined(SAFE_MUTEX)
- pthread_mutex_lock(&THR_LOCK_lock);
-#endif
-#if !defined(__WIN__) || defined(USE_TLS)
- if (my_pthread_getspecific(struct st_my_thread_var *,THR_KEY_mysys))
- {
- pthread_mutex_unlock(&THR_LOCK_lock);
- return 0; /* Safequard */
- }
- /* We must have many calloc() here because these are freed on
- pthread_exit */
- if (!(tmp=(struct st_my_thread_var *)
- calloc(1,sizeof(struct st_my_thread_var))))
- {
- pthread_mutex_unlock(&THR_LOCK_lock);
- return 1;
- }
- pthread_setspecific(THR_KEY_mysys,tmp);
-
-#else
- if (THR_KEY_mysys.id) /* Already initialized */
- {
-#if !defined(__WIN__) || defined(USE_TLS) || ! defined(SAFE_MUTEX)
- pthread_mutex_unlock(&THR_LOCK_lock);
-#endif
- return 0;
- }
- tmp= &THR_KEY_mysys;
-#endif
- tmp->id= ++thread_id;
- pthread_mutex_init(&tmp->mutex,MY_MUTEX_INIT_FAST);
- pthread_cond_init(&tmp->suspend, NULL);
-#if !defined(__WIN__) || defined(USE_TLS) || ! defined(SAFE_MUTEX)
- pthread_mutex_unlock(&THR_LOCK_lock);
-#endif
- return 0;
-}
-
-void my_thread_end(void)
-{
- struct st_my_thread_var *tmp=my_thread_var;
- if (tmp)
- {
-#if !defined(DBUG_OFF)
- if (tmp->dbug)
- {
- free(tmp->dbug);
- tmp->dbug=0;
- }
-#endif
-#if !defined(__bsdi__) || defined(HAVE_mit_thread) /* bsdi dumps core here */
- pthread_cond_destroy(&tmp->suspend);
-#endif
- pthread_mutex_destroy(&tmp->mutex);
-#if !defined(__WIN__) || defined(USE_TLS)
- free(tmp);
-#endif
- }
-#if !defined(__WIN__) || defined(USE_TLS)
- pthread_setspecific(THR_KEY_mysys,0);
-#endif
-}
-
-struct st_my_thread_var *_my_thread_var(void)
-{
- struct st_my_thread_var *tmp=
- my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys);
-#if defined(USE_TLS)
- /* This can only happen in a .DLL */
- if (!tmp)
- {
- my_thread_init();
- tmp=my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys);
- }
-#endif
- return tmp;
-}
-
-/****************************************************************************
-** Get name of current thread.
-****************************************************************************/
-
-#define UNKNOWN_THREAD -1
-
-long my_thread_id()
-{
-#if defined(HAVE_PTHREAD_GETSEQUENCE_NP)
- return pthread_getsequence_np(pthread_self());
-#elif (defined(__sun) || defined(__sgi) || defined(__linux__)) && !defined(HAVE_mit_thread)
- return pthread_self();
-#else
- return my_thread_var->id;
-#endif
-}
-
-#ifdef DBUG_OFF
-const char *my_thread_name(void)
-{
- return "no_name";
-}
-
-#else
-
-const char *my_thread_name(void)
-{
- char name_buff[100];
- struct st_my_thread_var *tmp=my_thread_var;
- if (!tmp->name[0])
- {
- long id=my_thread_id();
- sprintf(name_buff,"T@%ld", id);
- strmake(tmp->name,name_buff,THREAD_NAME_SIZE);
- }
- return tmp->name;
-}
-#endif /* DBUG_OFF */
-
-#endif /* THREAD */
diff --git a/ext/mysql/libmysql/my_wincond.c b/ext/mysql/libmysql/my_wincond.c
deleted file mode 100644
index 555ab3bcf7..0000000000
--- a/ext/mysql/libmysql/my_wincond.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*****************************************************************************
-** The following is a simple implementation of posix conditions
-*****************************************************************************/
-
-#undef SAFE_MUTEX /* Avoid safe_mutex redefinitions */
-#include "mysys_priv.h"
-#if defined(THREAD) && defined(__WIN__)
-#include <m_string.h>
-#undef getpid
-#include <process.h>
-#include <sys/timeb.h>
-
-int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
-{
- cond->waiting=0;
- cond->semaphore=CreateSemaphore(NULL,0,0x7FFFFFFF,NullS);
- if (!cond->semaphore)
- return ENOMEM;
- return 0;
-}
-
-int pthread_cond_destroy(pthread_cond_t *cond)
-{
- return CloseHandle(cond->semaphore) ? 0 : EINVAL;
-}
-
-
-int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
-{
- InterlockedIncrement(&cond->waiting);
- LeaveCriticalSection(mutex);
- WaitForSingleObject(cond->semaphore,INFINITE);
- InterlockedDecrement(&cond->waiting);
- EnterCriticalSection(mutex);
- return 0 ;
-}
-
-int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
- struct timespec *abstime)
-{
- struct _timeb curtime;
- int result;
- long timeout;
- _ftime(&curtime);
- timeout= ((long) (abstime->tv_sec - curtime.time)*1000L +
- (long)((abstime->tv_nsec/1000) - curtime.millitm)/1000L);
- if (timeout < 0) /* Some safety */
- timeout = 0L;
- InterlockedIncrement(&cond->waiting);
- LeaveCriticalSection(mutex);
- result=WaitForSingleObject(cond->semaphore,timeout);
- InterlockedDecrement(&cond->waiting);
- EnterCriticalSection(mutex);
-
- return result == WAIT_TIMEOUT ? ETIMEDOUT : 0;
-}
-
-
-int pthread_cond_signal(pthread_cond_t *cond)
-{
- long prev_count;
- if (cond->waiting)
- ReleaseSemaphore(cond->semaphore,1,&prev_count);
- return 0;
-}
-
-
-int pthread_cond_broadcast(pthread_cond_t *cond)
-{
- long prev_count;
- if (cond->waiting)
- ReleaseSemaphore(cond->semaphore,cond->waiting,&prev_count);
- return 0 ;
-}
-
-
-int pthread_attr_init(pthread_attr_t *connect_att)
-{
- connect_att->dwStackSize = 0;
- connect_att->dwCreatingFlag = 0;
- connect_att->priority = 0;
- return 0;
-}
-
-int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack)
-{
- connect_att->dwStackSize=stack;
- return 0;
-}
-
-int pthread_attr_setprio(pthread_attr_t *connect_att,int priority)
-{
- connect_att->priority=priority;
- return 0;
-}
-
-int pthread_attr_destroy(pthread_attr_t *connect_att)
-{
- bzero((gptr) connect_att,sizeof(*connect_att));
- return 0;
-}
-
-/****************************************************************************
-** Fix localtime_r() to be a bit safer
-****************************************************************************/
-
-struct tm *localtime_r(const time_t *timep,struct tm *tmp)
-{
- if (*timep == (time_t) -1) /* This will crash win32 */
- {
- bzero(tmp,sizeof(*tmp));
- }
- else
- {
- struct tm *res=localtime(timep);
- if (!res) /* Wrong date */
- {
- bzero(tmp,sizeof(*tmp)); /* Keep things safe */
- return 0;
- }
- *tmp= *res;
- }
- return tmp;
-}
-#endif /* __WIN__ */
diff --git a/ext/mysql/libmysql/my_winthread.c b/ext/mysql/libmysql/my_winthread.c
deleted file mode 100644
index 5d06b698ee..0000000000
--- a/ext/mysql/libmysql/my_winthread.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*****************************************************************************
-** Simulation of posix threads calls for WIN95 and NT
-*****************************************************************************/
-
-/* SAFE_MUTEX will not work until the thread structure is up to date */
-#undef SAFE_MUTEX
-
-#include "mysys_priv.h"
-#if defined(THREAD) && defined(__WIN__)
-#include <m_string.h>
-#undef getpid
-#include <process.h>
-
-static pthread_mutex_t THR_LOCK_thread;
-
-struct pthread_map
-{
- HANDLE pthreadself;
- pthread_handler func;
- void *param;
-};
-
-void win_pthread_init(void)
-{
- pthread_mutex_init(&THR_LOCK_thread,MY_MUTEX_INIT_FAST);
-}
-
-/*
-** We have tried to use '_beginthreadex' instead of '_beginthread' here
-** but in this case the program leaks about 512 characters for each
-** created thread !
-** As we want to save the created thread handler for other threads to
-** use and to be returned by pthread_self() (instead of the Win32 pseudo
-** handler), we have to go trough pthread_start() to catch the returned handler
-** in the new thread.
-*/
-
-static pthread_handler_decl(pthread_start,param)
-{
- pthread_handler func=((struct pthread_map *) param)->func;
- void *func_param=((struct pthread_map *) param)->param;
- my_thread_init(); /* Will always succeed in windows */
- pthread_mutex_lock(&THR_LOCK_thread); /* Wait for beginthread to return */
- win_pthread_self=((struct pthread_map *) param)->pthreadself;
- pthread_mutex_unlock(&THR_LOCK_thread);
- free((char*) param); /* Free param from create */
- pthread_exit((void*) (*func)(func_param));
- return 0; /* Safety */
-}
-
-
-int pthread_create(pthread_t *thread_id, pthread_attr_t *attr,
- pthread_handler func, void *param)
-{
- HANDLE hThread;
- struct pthread_map *map;
- DBUG_ENTER("pthread_create");
-
- if (!(map=malloc(sizeof(*map))))
- DBUG_RETURN(-1);
- map->func=func;
- map->param=param;
- pthread_mutex_lock(&THR_LOCK_thread);
-#ifdef __BORLANDC__
- hThread=(HANDLE)_beginthread((void(_USERENTRY *)(void *)) pthread_start,
- attr->dwStackSize ? attr->dwStackSize :
- 65535, (void*) map);
-#else
- hThread=(HANDLE)_beginthread((void( __cdecl *)(void *)) pthread_start,
- attr->dwStackSize ? attr->dwStackSize :
- 65535, (void*) map);
-#endif
- DBUG_PRINT("info", ("hThread=%lu",(long) hThread));
- *thread_id=map->pthreadself=hThread;
- pthread_mutex_unlock(&THR_LOCK_thread);
-
- if (hThread == (HANDLE) -1)
- {
- int error=errno;
- DBUG_PRINT("error",
- ("Can't create thread to handle request (error %d)",error));
- DBUG_RETURN(error ? error : -1);
- }
- VOID(SetThreadPriority(hThread, attr->priority)) ;
- DBUG_RETURN(0);
-}
-
-
-void pthread_exit(void *a)
-{
- _endthread();
-}
-
-/* This is neaded to get the macro pthread_setspecific to work */
-
-int win_pthread_setspecific(void *a,void *b,uint length)
-{
- memcpy(a,b,length);
- return 0;
-}
-
-#endif
diff --git a/ext/mysql/libmysql/my_write.c b/ext/mysql/libmysql/my_write.c
deleted file mode 100644
index d66e1da031..0000000000
--- a/ext/mysql/libmysql/my_write.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <errno.h>
-
- /* Write a chunk of bytes to a file */
-
-uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags)
-{
- uint writenbytes,errors;
- ulong written;
- DBUG_ENTER("my_write");
- DBUG_PRINT("my",("Fd: %d Buffer: %lx Count: %d MyFlags: %d",
- Filedes, Buffer, Count, MyFlags));
- errors=0; written=0L;
-
- for (;;)
- {
- if ((writenbytes = (uint) write(Filedes, Buffer, Count)) == Count)
- break;
- if ((int) writenbytes != -1)
- { /* Safeguard */
- written+=writenbytes;
- Buffer+=writenbytes;
- Count-=writenbytes;
- }
- my_errno=errno;
- DBUG_PRINT("error",("Write only %d bytes, error: %d",
- writenbytes,my_errno));
-#ifndef NO_BACKGROUND
-#ifdef THREAD
- if (my_thread_var->abort)
- MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
-#endif
- if (my_errno == ENOSPC && (MyFlags & MY_WAIT_IF_FULL) &&
- (uint) writenbytes != (uint) -1)
- {
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- my_filename(Filedes));
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
- continue;
- }
- if (!writenbytes)
- {
- /* We may come here on an interrupt or if the file quote is exeeded */
- if (my_errno == EINTR)
- continue;
- if (!errors++) /* Retry once */
- {
- errno=EFBIG; /* Assume this is the error */
- continue;
- }
- }
- else if ((uint) writenbytes != (uint) -1)
- continue; /* Retry */
-#endif
- if (MyFlags & (MY_NABP | MY_FNABP))
- {
- if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
- {
- my_error(EE_WRITE, MYF(ME_BELL+ME_WAITTANG),
- my_filename(Filedes),my_errno);
- }
- DBUG_RETURN(MY_FILE_ERROR); /* Error on read */
- }
- else
- break; /* Return bytes written */
- }
- if (MyFlags & (MY_NABP | MY_FNABP))
- DBUG_RETURN(0); /* Want only errors */
- DBUG_RETURN(writenbytes+written);
-} /* my_write */
diff --git a/ext/mysql/libmysql/mysql.h b/ext/mysql/libmysql/mysql.h
deleted file mode 100644
index f44252c9c7..0000000000
--- a/ext/mysql/libmysql/mysql.h
+++ /dev/null
@@ -1,294 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* defines for the libmysql library */
-
-#ifndef _mysql_h
-#define _mysql_h
-
-#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */
-#undef WIN
-#undef _WIN
-#undef _WIN32
-#undef _WIN64
-#undef __WIN__
-#endif
-
-#ifndef MYSQL_SERVER
-#ifdef __cplusplus
-extern "C" {
-#endif
-#endif
-
-#ifndef _global_h /* If not standard header */
-#include <sys/types.h>
-typedef char my_bool;
-#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__)
-#define __WIN__
-#endif
-#if !defined(__WIN__)
-#define STDCALL
-#else
-#define STDCALL __stdcall
-#endif
-typedef char * gptr;
-
-#ifndef ST_USED_MEM_DEFINED
-#define ST_USED_MEM_DEFINED
-typedef struct st_used_mem { /* struct for once_alloc */
- struct st_used_mem *next; /* Next block in use */
- unsigned int left; /* memory left in block */
- unsigned int size; /* size of block */
-} USED_MEM;
-typedef struct st_mem_root {
- USED_MEM *free;
- USED_MEM *used;
- USED_MEM *pre_alloc;
- unsigned int min_malloc;
- unsigned int block_size;
-
- void (*error_handler)(void);
-} MEM_ROOT;
-#endif
-
-#ifndef my_socket_defined
-#ifdef __WIN__
-#define my_socket SOCKET
-#else
-typedef int my_socket;
-#endif
-#endif
-#endif
-#include "mysql_com.h"
-#include "mysql_version.h"
-
-extern unsigned int mysql_port;
-extern char *mysql_unix_port;
-
-#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG)
-#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG)
-#define IS_BLOB(n) ((n) & BLOB_FLAG)
-#define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR)
-#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG)
-#define INTERNAL_NUM_FIELD(f) (((f)->type <= FIELD_TYPE_INT24 && ((f)->type != FIELD_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == FIELD_TYPE_YEAR)
-
-typedef struct st_mysql_field {
- char *name; /* Name of column */
- char *table; /* Table of column if column was a field */
- char *def; /* Default value (set by mysql_list_fields) */
- enum enum_field_types type; /* Type of field. Se mysql_com.h for types */
- unsigned int length; /* Width of column */
- unsigned int max_length; /* Max width of selected set */
- unsigned int flags; /* Div flags */
- unsigned int decimals; /* Number of decimals in field */
-} MYSQL_FIELD;
-
-typedef char **MYSQL_ROW; /* return data as array of strings */
-typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */
-
-#if defined(NO_CLIENT_LONG_LONG)
-typedef unsigned long my_ulonglong;
-#elif defined (__WIN__)
-typedef unsigned __int64 my_ulonglong;
-#else
-typedef unsigned long long my_ulonglong;
-#endif
-
-#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0)
-
-typedef struct st_mysql_rows {
- struct st_mysql_rows *next; /* list of rows */
- MYSQL_ROW data;
-} MYSQL_ROWS;
-
-typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
-
-typedef struct st_mysql_data {
- my_ulonglong rows;
- unsigned int fields;
- MYSQL_ROWS *data;
- MEM_ROOT alloc;
-} MYSQL_DATA;
-
-struct st_mysql_options {
- unsigned int connect_timeout,client_flag;
- my_bool compress,named_pipe;
- unsigned int port;
- char *host,*init_command,*user,*password,*unix_socket,*db;
- char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
- my_bool use_ssl; /* if to use SSL or not */
- char *ssl_key; /* PEM key file */
- char *ssl_cert; /* PEM cert file */
- char *ssl_ca; /* PEM CA file */
- char *ssl_capath; /* PEM directory of CA-s? */
-};
-
-enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS,
- MYSQL_OPT_NAMED_PIPE, MYSQL_INIT_COMMAND,
- MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
- MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME};
-
-enum mysql_status { MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,
- MYSQL_STATUS_USE_RESULT};
-
-typedef struct st_mysql {
- NET net; /* Communication parameters */
- gptr connector_fd; /* ConnectorFd for SSL */
- char *host,*user,*passwd,*unix_socket,*server_version,*host_info,
- *info,*db;
- unsigned int port,client_flag,server_capabilities;
- unsigned int protocol_version;
- unsigned int field_count;
- unsigned int server_status;
- unsigned long thread_id; /* Id for connection in server */
- my_ulonglong affected_rows;
- my_ulonglong insert_id; /* id if insert on table with NEXTNR */
- my_ulonglong extra_info; /* Used by mysqlshow */
- unsigned long packet_length;
- enum mysql_status status;
- MYSQL_FIELD *fields;
- MEM_ROOT field_alloc;
- my_bool free_me; /* If free in mysql_close */
- my_bool reconnect; /* set to 1 if automatic reconnect */
- struct st_mysql_options options;
- char scramble_buff[9];
- struct charset_info_st *charset;
- unsigned int server_language;
-} MYSQL;
-
-
-typedef struct st_mysql_res {
- my_ulonglong row_count;
- unsigned int field_count, current_field;
- MYSQL_FIELD *fields;
- MYSQL_DATA *data;
- MYSQL_ROWS *data_cursor;
- MEM_ROOT field_alloc;
- MYSQL_ROW row; /* If unbuffered read */
- MYSQL_ROW current_row; /* buffer to current row */
- unsigned long *lengths; /* column lengths of current row */
- MYSQL *handle; /* for unbuffered reads */
- my_bool eof; /* Used my mysql_fetch_row */
-} MYSQL_RES;
-
-/* Functions to get information from the MYSQL and MYSQL_RES structures */
-/* Should definitely be used if one uses shared libraries */
-
-my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
-unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
-my_bool STDCALL mysql_eof(MYSQL_RES *res);
-MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res,
- unsigned int fieldnr);
-MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
-MYSQL_ROWS * STDCALL mysql_row_tell(MYSQL_RES *res);
-unsigned int STDCALL mysql_field_tell(MYSQL_RES *res);
-
-unsigned int STDCALL mysql_field_count(MYSQL *mysql);
-my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
-my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);
-unsigned int STDCALL mysql_errno(MYSQL *mysql);
-char * STDCALL mysql_error(MYSQL *mysql);
-char * STDCALL mysql_info(MYSQL *mysql);
-unsigned long STDCALL mysql_thread_id(MYSQL *mysql);
-const char * STDCALL mysql_character_set_name(MYSQL *mysql);
-
-MYSQL * STDCALL mysql_init(MYSQL *mysql);
-#ifdef HAVE_OPENSSL
-int STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
- const char *cert, const char *ca,
- const char *capath);
-char * STDCALL mysql_ssl_cipher(MYSQL *mysql);
-int STDCALL mysql_ssl_clear(MYSQL *mysql);
-#endif /* HAVE_OPENSSL */
-MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
- const char *user, const char *passwd);
-my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
- const char *passwd, const char *db);
-#if MYSQL_VERSION_ID >= 32200
-MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
- const char *user,
- const char *passwd,
- const char *db,
- unsigned int port,
- const char *unix_socket,
- unsigned int clientflag);
-#else
-MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
- const char *user,
- const char *passwd,
- unsigned int port,
- const char *unix_socket,
- unsigned int clientflag);
-#endif
-void STDCALL mysql_close(MYSQL *sock);
-int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
-int STDCALL mysql_query(MYSQL *mysql, const char *q);
-int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
- unsigned int length);
-int STDCALL mysql_read_query_result(MYSQL *mysql);
-int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
- unsigned int length);
-int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
-int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
-int STDCALL mysql_shutdown(MYSQL *mysql);
-int STDCALL mysql_dump_debug_info(MYSQL *mysql);
-int STDCALL mysql_refresh(MYSQL *mysql,
- unsigned int refresh_options);
-int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid);
-int STDCALL mysql_ping(MYSQL *mysql);
-char * STDCALL mysql_stat(MYSQL *mysql);
-char * STDCALL mysql_get_server_info(MYSQL *mysql);
-char * STDCALL mysql_get_client_info(void);
-char * STDCALL mysql_get_host_info(MYSQL *mysql);
-unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql);
-MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild);
-MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild);
-MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
- const char *wild);
-MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql);
-MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
-MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
-int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
- const char *arg);
-void STDCALL mysql_free_result(MYSQL_RES *result);
-void STDCALL mysql_data_seek(MYSQL_RES *result,
- my_ulonglong offset);
-MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET);
-MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
- MYSQL_FIELD_OFFSET offset);
-MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
-unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
-MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
-unsigned long STDCALL mysql_escape_string(char *to,const char *from,
- unsigned long from_length);
-unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
- char *to,const char *from,
- unsigned long length);
-void STDCALL mysql_debug(const char *debug);
-char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
- char *to,
- unsigned long to_length,
- const char *from,
- unsigned long from_length,
- void *param,
- char *
- (*extend_buffer)
- (void *, char *to,
- unsigned long *length));
-void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
-unsigned int STDCALL mysql_thread_safe(void);
-
-
-#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
-
-/* new api functions */
-
-#define HAVE_MYSQL_REAL_CONNECT
-
-#ifndef MYSQL_SERVER
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#endif
diff --git a/ext/mysql/libmysql/mysql.m4 b/ext/mysql/libmysql/mysql.m4
deleted file mode 100644
index 23143e36a8..0000000000
--- a/ext/mysql/libmysql/mysql.m4
+++ /dev/null
@@ -1,16 +0,0 @@
-AC_DEFUN(MYSQL_CHECKS,[
-
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AC_PROG_LN_S])
-AC_REQUIRE([AC_PROG_RANLIB])
-
-AC_DEFINE(UNDEF_THREADS_HACK,,[ ])
-
-MYSQL_HEADER_CHECKS
-MYSQL_TYPE_CHECKS
-MYSQL_FUNCTION_CHECKS
-MYSQL_CHECK_PTHREAD_GETSPECIFIC
-MYSQL_CHECK_PTHREAD_MUTEX_INIT
-MYSQL_CHECK_READDIR_R_ARGS
-MYSQL_CHECK_SIGWAIT_STYLE
-])
diff --git a/ext/mysql/libmysql/mysql_com.h b/ext/mysql/libmysql/mysql_com.h
deleted file mode 100644
index 0f6b5928db..0000000000
--- a/ext/mysql/libmysql/mysql_com.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
-** Common definition between mysql server & client
-*/
-
-#ifndef _mysql_com_h
-#define _mysql_com_h
-
-
-#define NAME_LEN 64 /* Field/table name length */
-#define HOSTNAME_LENGTH 60
-#define USERNAME_LENGTH 16
-#define SERVER_VERSION_LENGTH 60
-
-#define LOCAL_HOST "localhost"
-#define LOCAL_HOST_NAMEDPIPE "."
-
-#if defined(__WIN__) && !defined( _CUSTOMCONFIG_)
-#define MYSQL_NAMEDPIPE "MySQL"
-#define MYSQL_SERVICENAME "MySql"
-#endif /* __WIN__ */
-
-enum enum_server_command {COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
- COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,COM_REFRESH,
- COM_SHUTDOWN,COM_STATISTICS,
- COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL,
- COM_DEBUG,COM_PING,COM_TIME,COM_DELAYED_INSERT,
- COM_CHANGE_USER, COM_BINLOG_DUMP,
- COM_TABLE_DUMP, COM_CONNECT_OUT};
-
-#define NOT_NULL_FLAG 1 /* Field can't be NULL */
-#define PRI_KEY_FLAG 2 /* Field is part of a primary key */
-#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
-#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
-#define BLOB_FLAG 16 /* Field is a blob */
-#define UNSIGNED_FLAG 32 /* Field is unsigned */
-#define ZEROFILL_FLAG 64 /* Field is zerofill */
-#define BINARY_FLAG 128
-/* The following are only sent to new clients */
-#define ENUM_FLAG 256 /* field is an enum */
-#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
-#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
-#define SET_FLAG 2048 /* field is a set */
-#define NUM_FLAG 32768 /* Field is num (for clients) */
-#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
-#define GROUP_FLAG 32768 /* Intern: Group field */
-#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */
-
-#define REFRESH_GRANT 1 /* Refresh grant tables */
-#define REFRESH_LOG 2 /* Start on new log file */
-#define REFRESH_TABLES 4 /* close all tables */
-#define REFRESH_HOSTS 8 /* Flush host cache */
-#define REFRESH_STATUS 16 /* Flush status variables */
-#define REFRESH_THREADS 32 /* Flush status variables */
-#define REFRESH_SLAVE 64 /* Reset master info and restart slave
- thread */
-#define REFRESH_MASTER 128 /* Remove all bin logs in the index
- and truncate the index */
-
-/* The following can't be set with mysql_refresh() */
-#define REFRESH_READ_LOCK 16384 /* Lock tables for read */
-#define REFRESH_FAST 32768 /* Intern flag */
-
-#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
-#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
-#define CLIENT_LONG_FLAG 4 /* Get all column flags */
-#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
-#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
-#define CLIENT_COMPRESS 32 /* Can use compression protocol */
-#define CLIENT_ODBC 64 /* Odbc client */
-#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
-#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
-#define CLIENT_CHANGE_USER 512 /* Support the mysql_change_user() */
-#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
-#define CLIENT_SSL 2048 /* Switch to SSL after handshake */
-#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
-#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
-
-#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
-#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
-
-#define MYSQL_ERRMSG_SIZE 200
-#define NET_READ_TIMEOUT 30 /* Timeout on read */
-#define NET_WRITE_TIMEOUT 60 /* Timeout on write */
-#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */
-
-#ifndef Vio_defined
-#define Vio_defined
-#ifdef HAVE_VIO
-class Vio; /* Fill Vio class in C++ */
-#else
-struct st_vio; /* Only C */
-typedef struct st_vio Vio;
-#endif
-#endif
-
-typedef struct st_net {
- Vio* vio;
- my_socket fd; /* For Perl DBI/dbd */
- int fcntl;
- unsigned char *buff,*buff_end,*write_pos,*read_pos;
- char last_error[MYSQL_ERRMSG_SIZE];
- unsigned int last_errno,max_packet,timeout,pkt_nr;
- unsigned char error;
- my_bool return_errno,compress;
- my_bool no_send_ok; /* needed if we are doing several
- queries in one command ( as in LOAD TABLE ... FROM MASTER ),
- and do not want to confuse the client with OK at the wrong time
- */
- unsigned long remain_in_buf,length, buf_length, where_b;
- unsigned int *return_status;
- unsigned char reading_or_writing;
- char save_char;
-} NET;
-
-#define packet_error ((unsigned int) -1)
-
-enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
- FIELD_TYPE_SHORT, FIELD_TYPE_LONG,
- FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE,
- FIELD_TYPE_NULL, FIELD_TYPE_TIMESTAMP,
- FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,
- FIELD_TYPE_DATE, FIELD_TYPE_TIME,
- FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR,
- FIELD_TYPE_NEWDATE,
- FIELD_TYPE_ENUM=247,
- FIELD_TYPE_SET=248,
- FIELD_TYPE_TINY_BLOB=249,
- FIELD_TYPE_MEDIUM_BLOB=250,
- FIELD_TYPE_LONG_BLOB=251,
- FIELD_TYPE_BLOB=252,
- FIELD_TYPE_VAR_STRING=253,
- FIELD_TYPE_STRING=254
-};
-
-#define FIELD_TYPE_CHAR FIELD_TYPE_TINY /* For compability */
-#define FIELD_TYPE_INTERVAL FIELD_TYPE_ENUM /* For compability */
-
-extern unsigned long max_allowed_packet;
-extern unsigned long net_buffer_length;
-
-#define net_new_transaction(net) ((net)->pkt_nr=0)
-
-int my_net_init(NET *net, Vio* vio);
-void net_end(NET *net);
-void net_clear(NET *net);
-int net_flush(NET *net);
-int my_net_write(NET *net,const char *packet,unsigned long len);
-int net_write_command(NET *net,unsigned char command,const char *packet,
- unsigned long len);
-int net_real_write(NET *net,const char *packet,unsigned long len);
-unsigned int my_net_read(NET *net);
-
-struct rand_struct {
- unsigned long seed1,seed2,max_value;
- double max_value_dbl;
-};
-
- /* The following is for user defined functions */
-
-enum Item_result {STRING_RESULT,REAL_RESULT,INT_RESULT};
-
-typedef struct st_udf_args
-{
- unsigned int arg_count; /* Number of arguments */
- enum Item_result *arg_type; /* Pointer to item_results */
- char **args; /* Pointer to argument */
- unsigned long *lengths; /* Length of string arguments */
- char *maybe_null; /* Set to 1 for all maybe_null args */
-} UDF_ARGS;
-
- /* This holds information about the result */
-
-typedef struct st_udf_init
-{
- my_bool maybe_null; /* 1 if function can return NULL */
- unsigned int decimals; /* for real functions */
- unsigned int max_length; /* For string functions */
- char *ptr; /* free pointer for function data */
- my_bool const_item; /* 0 if result is independent of arguments */
-} UDF_INIT;
-
- /* Constants when using compression */
-#define NET_HEADER_SIZE 4 /* standard header size */
-#define COMP_HEADER_SIZE 3 /* compression header extra size */
-
- /* Prototypes to password functions */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void randominit(struct rand_struct *,unsigned long seed1,
- unsigned long seed2);
-double rnd(struct rand_struct *);
-void make_scrambled_password(char *to,const char *password);
-void get_salt_from_password(unsigned long *res,const char *password);
-void make_password_from_salt(char *to, unsigned long *hash_res);
-char *scramble(char *to,const char *message,const char *password,
- my_bool old_ver);
-my_bool check_scramble(const char *, const char *message,
- unsigned long *salt,my_bool old_ver);
-char *get_tty_password(char *opt_message);
-void hash_password(unsigned long *result, const char *password);
-#ifdef __cplusplus
-}
-#endif
-
-/* Some other useful functions */
-
-void my_init(void);
-void load_defaults(const char *conf_file, const char **groups,
- int *argc, char ***argv);
-
-#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
-
-#ifdef __WIN__
-#define socket_errno WSAGetLastError()
-#else
-#define socket_errno errno
-#endif
-
-#endif
diff --git a/ext/mysql/libmysql/mysql_version.h b/ext/mysql/libmysql/mysql_version.h
deleted file mode 100644
index 1587579818..0000000000
--- a/ext/mysql/libmysql/mysql_version.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Version numbers for protocol & mysqld */
-
-#ifdef _CUSTOMCONFIG_
-#include <custom_conf.h>
-#else
-#define PROTOCOL_VERSION 10
-#define MYSQL_SERVER_VERSION "3.23.39"
-#define MYSQL_SERVER_SUFFIX ""
-#define FRM_VER 6
-#define MYSQL_VERSION_ID 32339
-
-#ifndef MYSQL_PORT
-#define MYSQL_PORT 3306
-#endif
-
-#ifndef MYSQL_UNIX_ADDR
-#define MYSQL_UNIX_ADDR "/tmp/mysql.sock"
-#endif
-
-/* mysqld compile time options */
-#ifndef MYSQL_CHARSET
-#define MYSQL_CHARSET "latin1"
-#endif
-#endif
diff --git a/ext/mysql/libmysql/mysqld_error.h b/ext/mysql/libmysql/mysqld_error.h
deleted file mode 100644
index e412f95a8e..0000000000
--- a/ext/mysql/libmysql/mysqld_error.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/* Definefile for errormessagenumbers */
-
-#define ER_HASHCHK 1000
-#define ER_NISAMCHK 1001
-#define ER_NO 1002
-#define ER_YES 1003
-#define ER_CANT_CREATE_FILE 1004
-#define ER_CANT_CREATE_TABLE 1005
-#define ER_CANT_CREATE_DB 1006
-#define ER_DB_CREATE_EXISTS 1007
-#define ER_DB_DROP_EXISTS 1008
-#define ER_DB_DROP_DELETE 1009
-#define ER_DB_DROP_RMDIR 1010
-#define ER_CANT_DELETE_FILE 1011
-#define ER_CANT_FIND_SYSTEM_REC 1012
-#define ER_CANT_GET_STAT 1013
-#define ER_CANT_GET_WD 1014
-#define ER_CANT_LOCK 1015
-#define ER_CANT_OPEN_FILE 1016
-#define ER_FILE_NOT_FOUND 1017
-#define ER_CANT_READ_DIR 1018
-#define ER_CANT_SET_WD 1019
-#define ER_CHECKREAD 1020
-#define ER_DISK_FULL 1021
-#define ER_DUP_KEY 1022
-#define ER_ERROR_ON_CLOSE 1023
-#define ER_ERROR_ON_READ 1024
-#define ER_ERROR_ON_RENAME 1025
-#define ER_ERROR_ON_WRITE 1026
-#define ER_FILE_USED 1027
-#define ER_FILSORT_ABORT 1028
-#define ER_FORM_NOT_FOUND 1029
-#define ER_GET_ERRNO 1030
-#define ER_ILLEGAL_HA 1031
-#define ER_KEY_NOT_FOUND 1032
-#define ER_NOT_FORM_FILE 1033
-#define ER_NOT_KEYFILE 1034
-#define ER_OLD_KEYFILE 1035
-#define ER_OPEN_AS_READONLY 1036
-#define ER_OUTOFMEMORY 1037
-#define ER_OUT_OF_SORTMEMORY 1038
-#define ER_UNEXPECTED_EOF 1039
-#define ER_CON_COUNT_ERROR 1040
-#define ER_OUT_OF_RESOURCES 1041
-#define ER_BAD_HOST_ERROR 1042
-#define ER_HANDSHAKE_ERROR 1043
-#define ER_DBACCESS_DENIED_ERROR 1044
-#define ER_ACCESS_DENIED_ERROR 1045
-#define ER_NO_DB_ERROR 1046
-#define ER_UNKNOWN_COM_ERROR 1047
-#define ER_BAD_NULL_ERROR 1048
-#define ER_BAD_DB_ERROR 1049
-#define ER_TABLE_EXISTS_ERROR 1050
-#define ER_BAD_TABLE_ERROR 1051
-#define ER_NON_UNIQ_ERROR 1052
-#define ER_SERVER_SHUTDOWN 1053
-#define ER_BAD_FIELD_ERROR 1054
-#define ER_WRONG_FIELD_WITH_GROUP 1055
-#define ER_WRONG_GROUP_FIELD 1056
-#define ER_WRONG_SUM_SELECT 1057
-#define ER_WRONG_VALUE_COUNT 1058
-#define ER_TOO_LONG_IDENT 1059
-#define ER_DUP_FIELDNAME 1060
-#define ER_DUP_KEYNAME 1061
-#define ER_DUP_ENTRY 1062
-#define ER_WRONG_FIELD_SPEC 1063
-#define ER_PARSE_ERROR 1064
-#define ER_EMPTY_QUERY 1065
-#define ER_NONUNIQ_TABLE 1066
-#define ER_INVALID_DEFAULT 1067
-#define ER_MULTIPLE_PRI_KEY 1068
-#define ER_TOO_MANY_KEYS 1069
-#define ER_TOO_MANY_KEY_PARTS 1070
-#define ER_TOO_LONG_KEY 1071
-#define ER_KEY_COLUMN_DOES_NOT_EXITS 1072
-#define ER_BLOB_USED_AS_KEY 1073
-#define ER_TOO_BIG_FIELDLENGTH 1074
-#define ER_WRONG_AUTO_KEY 1075
-#define ER_READY 1076
-#define ER_NORMAL_SHUTDOWN 1077
-#define ER_GOT_SIGNAL 1078
-#define ER_SHUTDOWN_COMPLETE 1079
-#define ER_FORCING_CLOSE 1080
-#define ER_IPSOCK_ERROR 1081
-#define ER_NO_SUCH_INDEX 1082
-#define ER_WRONG_FIELD_TERMINATORS 1083
-#define ER_BLOBS_AND_NO_TERMINATED 1084
-#define ER_TEXTFILE_NOT_READABLE 1085
-#define ER_FILE_EXISTS_ERROR 1086
-#define ER_LOAD_INFO 1087
-#define ER_ALTER_INFO 1088
-#define ER_WRONG_SUB_KEY 1089
-#define ER_CANT_REMOVE_ALL_FIELDS 1090
-#define ER_CANT_DROP_FIELD_OR_KEY 1091
-#define ER_INSERT_INFO 1092
-#define ER_INSERT_TABLE_USED 1093
-#define ER_NO_SUCH_THREAD 1094
-#define ER_KILL_DENIED_ERROR 1095
-#define ER_NO_TABLES_USED 1096
-#define ER_TOO_BIG_SET 1097
-#define ER_NO_UNIQUE_LOGFILE 1098
-#define ER_TABLE_NOT_LOCKED_FOR_WRITE 1099
-#define ER_TABLE_NOT_LOCKED 1100
-#define ER_BLOB_CANT_HAVE_DEFAULT 1101
-#define ER_WRONG_DB_NAME 1102
-#define ER_WRONG_TABLE_NAME 1103
-#define ER_TOO_BIG_SELECT 1104
-#define ER_UNKNOWN_ERROR 1105
-#define ER_UNKNOWN_PROCEDURE 1106
-#define ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107
-#define ER_WRONG_PARAMETERS_TO_PROCEDURE 1108
-#define ER_UNKNOWN_TABLE 1109
-#define ER_FIELD_SPECIFIED_TWICE 1110
-#define ER_INVALID_GROUP_FUNC_USE 1111
-#define ER_UNSUPPORTED_EXTENSION 1112
-#define ER_TABLE_MUST_HAVE_COLUMNS 1113
-#define ER_RECORD_FILE_FULL 1114
-#define ER_UNKNOWN_CHARACTER_SET 1115
-#define ER_TOO_MANY_TABLES 1116
-#define ER_TOO_MANY_FIELDS 1117
-#define ER_TOO_BIG_ROWSIZE 1118
-#define ER_STACK_OVERRUN 1119
-#define ER_WRONG_OUTER_JOIN 1120
-#define ER_NULL_COLUMN_IN_INDEX 1121
-#define ER_CANT_FIND_UDF 1122
-#define ER_CANT_INITIALIZE_UDF 1123
-#define ER_UDF_NO_PATHS 1124
-#define ER_UDF_EXISTS 1125
-#define ER_CANT_OPEN_LIBRARY 1126
-#define ER_CANT_FIND_DL_ENTRY 1127
-#define ER_FUNCTION_NOT_DEFINED 1128
-#define ER_HOST_IS_BLOCKED 1129
-#define ER_HOST_NOT_PRIVILEGED 1130
-#define ER_PASSWORD_ANONYMOUS_USER 1131
-#define ER_PASSWORD_NOT_ALLOWED 1132
-#define ER_PASSWORD_NO_MATCH 1133
-#define ER_UPDATE_INFO 1134
-#define ER_CANT_CREATE_THREAD 1135
-#define ER_WRONG_VALUE_COUNT_ON_ROW 1136
-#define ER_CANT_REOPEN_TABLE 1137
-#define ER_INVALID_USE_OF_NULL 1138
-#define ER_REGEXP_ERROR 1139
-#define ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140
-#define ER_NONEXISTING_GRANT 1141
-#define ER_TABLEACCESS_DENIED_ERROR 1142
-#define ER_COLUMNACCESS_DENIED_ERROR 1143
-#define ER_ILLEGAL_GRANT_FOR_TABLE 1144
-#define ER_GRANT_WRONG_HOST_OR_USER 1145
-#define ER_NO_SUCH_TABLE 1146
-#define ER_NONEXISTING_TABLE_GRANT 1147
-#define ER_NOT_ALLOWED_COMMAND 1148
-#define ER_SYNTAX_ERROR 1149
-#define ER_DELAYED_CANT_CHANGE_LOCK 1150
-#define ER_TOO_MANY_DELAYED_THREADS 1151
-#define ER_ABORTING_CONNECTION 1152
-#define ER_NET_PACKET_TOO_LARGE 1153
-#define ER_NET_READ_ERROR_FROM_PIPE 1154
-#define ER_NET_FCNTL_ERROR 1155
-#define ER_NET_PACKETS_OUT_OF_ORDER 1156
-#define ER_NET_UNCOMPRESS_ERROR 1157
-#define ER_NET_READ_ERROR 1158
-#define ER_NET_READ_INTERRUPTED 1159
-#define ER_NET_ERROR_ON_WRITE 1160
-#define ER_NET_WRITE_INTERRUPTED 1161
-#define ER_TOO_LONG_STRING 1162
-#define ER_TABLE_CANT_HANDLE_BLOB 1163
-#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164
-#define ER_DELAYED_INSERT_TABLE_LOCKED 1165
-#define ER_WRONG_COLUMN_NAME 1166
-#define ER_WRONG_KEY_COLUMN 1167
-#define ER_WRONG_MRG_TABLE 1168
-#define ER_DUP_UNIQUE 1169
-#define ER_BLOB_KEY_WITHOUT_LENGTH 1170
-#define ER_PRIMARY_CANT_HAVE_NULL 1171
-#define ER_TOO_MANY_ROWS 1172
-#define ER_REQUIRES_PRIMARY_KEY 1173
-#define ER_NO_RAID_COMPILED 1174
-#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175
-#define ER_KEY_DOES_NOT_EXITS 1176
-#define ER_CHECK_NO_SUCH_TABLE 1177
-#define ER_CHECK_NOT_IMPLEMENTED 1178
-#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179
-#define ER_ERROR_DURING_COMMIT 1180
-#define ER_ERROR_DURING_ROLLBACK 1181
-#define ER_ERROR_DURING_FLUSH_LOGS 1182
-#define ER_ERROR_DURING_CHECKPOINT 1183
-#define ER_NEW_ABORTING_CONNECTION 1184
-#define ER_DUMP_NOT_IMPLEMENTED 1185
-#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186
-#define ER_INDEX_REBUILD 1187
-#define ER_MASTER 1188
-#define ER_MASTER_NET_READ 1189
-#define ER_MASTER_NET_WRITE 1190
-#define ER_FT_MATCHING_KEY_NOT_FOUND 1191
-#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192
-#define ER_UNKNOWN_SYSTEM_VARIABLE 1193
-#define ER_CRASHED_ON_USAGE 1194
-#define ER_CRASHED_ON_REPAIR 1195
-#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196
-#define ER_TRANS_CACHE_FULL 1197
-#define ER_SLAVE_MUST_STOP 1198
-#define ER_SLAVE_NOT_RUNNING 1199
-#define ER_BAD_SLAVE 1200
-#define ER_MASTER_INFO 1201
-#define ER_SLAVE_THREAD 1202
-#define ER_TOO_MANY_USER_CONNECTIONS 1203
-#define ER_SET_CONSTANTS_ONLY 1204
-#define ER_LOCK_WAIT_TIMEOUT 1205
-#define ER_LOCK_TABLE_FULL 1206
-#define ER_READ_ONLY_TRANSACTION 1207
-#define ER_ERROR_MESSAGES 208
diff --git a/ext/mysql/libmysql/mysys_err.h b/ext/mysql/libmysql/mysys_err.h
deleted file mode 100644
index 469d5a680e..0000000000
--- a/ext/mysql/libmysql/mysys_err.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#ifndef _mysys_err_h
-#define _mysys_err_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GLOB 0 /* Error maps */
-#define GLOBERRS 27 /* Max number of error messages in map's */
-#define EE(X) globerrs[ X ] /* Defines to add error to right map */
-
-extern const char * NEAR globerrs[]; /* my_error_messages is here */
-
-/* Error message numbers in global map */
-#define EE_FILENOTFOUND 0
-#define EE_CANTCREATEFILE 1
-#define EE_READ 2
-#define EE_WRITE 3
-#define EE_BADCLOSE 4
-#define EE_OUTOFMEMORY 5
-#define EE_DELETE 6
-#define EE_LINK 7
-#define EE_EOFERR 9
-#define EE_CANTLOCK 10
-#define EE_CANTUNLOCK 11
-#define EE_DIR 12
-#define EE_STAT 13
-#define EE_CANT_CHSIZE 14
-#define EE_CANT_OPEN_STREAM 15
-#define EE_GETWD 16
-#define EE_SETWD 17
-#define EE_LINK_WARNING 18
-#define EE_OPEN_WARNING 19
-#define EE_DISK_FULL 20
-#define EE_CANT_MKDIR 21
-#define EE_UNKNOWN_CHARSET 22
-#define EE_OUT_OF_FILERESOURCES 23
-#define EE_CANT_READLINK 24
-#define EE_CANT_SYMLINK 25
-#define EE_REALPATH 26
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/ext/mysql/libmysql/mysys_priv.h b/ext/mysql/libmysql/mysys_priv.h
deleted file mode 100644
index a0131ea77e..0000000000
--- a/ext/mysql/libmysql/mysys_priv.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-#include <global.h>
-#include <my_sys.h>
-
-#ifdef USE_SYSTEM_WRAPPERS
-#include "system_wrappers.h"
-#endif
-
-#ifdef THREAD
-extern pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
- THR_LOCK_lock,THR_LOCK_isam,THR_LOCK_net,THR_LOCK_charset;
-extern pthread_mutex_t LOCK_bitmap;
-#else /* THREAD */
-#define pthread_mutex_lock(A)
-#define pthread_mutex_unlock(A)
-#endif
diff --git a/ext/mysql/libmysql/net.c b/ext/mysql/libmysql/net.c
deleted file mode 100644
index 0dc0c06ffa..0000000000
--- a/ext/mysql/libmysql/net.c
+++ /dev/null
@@ -1,664 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Write and read of logical packets to/from socket
-** Writes are cached into net_buffer_length big packets.
-** Read packets are reallocated dynamicly when reading big packets.
-** Each logical packet has the following pre-info:
-** 3 byte length & 1 byte package-number.
-*/
-
-#ifdef __WIN__
-#include <winsock.h>
-#endif
-#include <global.h>
-#include <violite.h>
-#include <my_sys.h>
-#include <m_string.h>
-#include "mysql.h"
-#include "mysqld_error.h"
-#include <signal.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#ifdef MYSQL_SERVER
-ulong max_allowed_packet=65536;
-extern ulong net_read_timeout,net_write_timeout;
-extern uint test_flags;
-#else
-ulong max_allowed_packet=16*1024*1024L;
-ulong net_read_timeout= NET_READ_TIMEOUT;
-ulong net_write_timeout= NET_WRITE_TIMEOUT;
-#endif
-ulong net_buffer_length=8192; /* Default length. Enlarged if necessary */
-
-#if !defined(__WIN__) && !defined(MSDOS)
-#include <sys/socket.h>
-#else
-#undef MYSQL_SERVER /* Win32 can't handle interrupts */
-#endif
-#if !defined(MSDOS) && !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) && !defined(__BEOS__)
-#include <netinet/in_systm.h>
-#include <netinet/in.h>
-#include <netinet/ip.h>
-#if !defined(alpha_linux_port)
-#include <netinet/tcp.h>
-#endif
-#endif
-#include "mysqld_error.h"
-#ifdef MYSQL_SERVER
-#include "my_pthread.h"
-#include "thr_alarm.h"
-void sql_print_error(const char *format,...);
-#define RETRY_COUNT mysqld_net_retry_count
-extern ulong mysqld_net_retry_count;
-#else
-typedef my_bool thr_alarm_t;
-typedef my_bool ALARM;
-#define thr_alarm_init(A) (*A)=0
-#define thr_alarm_in_use(A) (*(A))
-#define thr_end_alarm(A)
-#define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C))
-static inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused)))
-{
- *A=1;
- return 0;
-}
-#define thr_got_alarm(A) 0
-#define RETRY_COUNT 1
-#endif
-
-#ifdef MYSQL_SERVER
-extern ulong bytes_sent, bytes_received;
-extern pthread_mutex_t LOCK_bytes_sent , LOCK_bytes_received;
-#else
-#undef statistic_add
-#define statistic_add(A,B,C)
-#endif
-
-/*
-** Give error if a too big packet is found
-** The server can change this with the -O switch, but because the client
-** can't normally do this the client should have a bigger max-buffer.
-*/
-
-#define TEST_BLOCKING 8
-static int net_write_buff(NET *net,const char *packet,uint len);
-
-
- /* Init with packet info */
-
-int my_net_init(NET *net, Vio* vio)
-{
- if (!(net->buff=(uchar*) my_malloc(net_buffer_length,MYF(MY_WME))))
- return 1;
- if (net_buffer_length > max_allowed_packet)
- max_allowed_packet=net_buffer_length;
- net->buff_end=net->buff+(net->max_packet=net_buffer_length);
- net->vio = vio;
- net->no_send_ok = 0;
- net->error=0; net->return_errno=0; net->return_status=0;
- net->timeout=(uint) net_read_timeout; /* Timeout for read */
- net->pkt_nr=0;
- net->write_pos=net->read_pos = net->buff;
- net->last_error[0]=0;
- net->compress=0; net->reading_or_writing=0;
- net->where_b = net->remain_in_buf=0;
- net->last_errno=0;
-
- if (vio != 0) /* If real connection */
- {
- net->fd = vio_fd(vio); /* For perl DBI/DBD */
-#if defined(MYSQL_SERVER) && !defined(___WIN__) && !defined(__EMX__)
- if (!(test_flags & TEST_BLOCKING))
- vio_blocking(vio, FALSE);
-#endif
- vio_fastsend(vio);
- }
- return 0;
-}
-
-void net_end(NET *net)
-{
- my_free((gptr) net->buff,MYF(MY_ALLOW_ZERO_PTR));
- net->buff=0;
-}
-
-/* Realloc the packet buffer */
-
-static my_bool net_realloc(NET *net, ulong length)
-{
- uchar *buff;
- ulong pkt_length;
- if (length >= max_allowed_packet)
- {
- DBUG_PRINT("error",("Packet too large (%lu)", length));
- net->error=1;
- net->last_errno=ER_NET_PACKET_TOO_LARGE;
- return 1;
- }
- pkt_length = (length+IO_SIZE-1) & ~(IO_SIZE-1);
- if (!(buff=(uchar*) my_realloc((char*) net->buff, pkt_length, MYF(MY_WME))))
- {
- net->error=1;
-#ifdef MYSQL_SERVER
- net->last_errno=ER_OUT_OF_RESOURCES;
-#endif
- return 1;
- }
- net->buff=net->write_pos=buff;
- net->buff_end=buff+(net->max_packet=pkt_length);
- return 0;
-}
-
- /* Remove unwanted characters from connection */
-
-void net_clear(NET *net)
-{
-#ifndef EXTRA_DEBUG
- int count;
- bool is_blocking=vio_is_blocking(net->vio);
- if (is_blocking)
- vio_blocking(net->vio, FALSE);
- if (!vio_is_blocking(net->vio)) /* Safety if SSL */
- {
- while ( (count = vio_read(net->vio, (char*) (net->buff),
- net->max_packet)) > 0)
- DBUG_PRINT("info",("skipped %d bytes from file: %s",
- count,vio_description(net->vio)));
- if (is_blocking)
- vio_blocking(net->vio, TRUE);
- }
-#endif /* EXTRA_DEBUG */
- net->pkt_nr=0; /* Ready for new command */
- net->write_pos=net->buff;
-}
-
- /* Flush write_buffer if not empty. */
-
-int net_flush(NET *net)
-{
- int error=0;
- DBUG_ENTER("net_flush");
- if (net->buff != net->write_pos)
- {
- error=net_real_write(net,(char*) net->buff,
- (uint) (net->write_pos - net->buff));
- net->write_pos=net->buff;
- }
- DBUG_RETURN(error);
-}
-
-
-/*****************************************************************************
-** Write something to server/client buffer
-*****************************************************************************/
-
-
-/*
-** Write a logical packet with packet header
-** Format: Packet length (3 bytes), packet number(1 byte)
-** When compression is used a 3 byte compression length is added
-** NOTE: If compression is used the original package is destroyed!
-*/
-
-int
-my_net_write(NET *net,const char *packet,ulong len)
-{
- uchar buff[NET_HEADER_SIZE];
- int3store(buff,len);
- buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++);
- if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE))
- return 1;
- return net_write_buff(net,packet,len);
-}
-
-int
-net_write_command(NET *net,uchar command,const char *packet,ulong len)
-{
- uchar buff[NET_HEADER_SIZE+1];
- uint length=len+1; /* 1 extra byte for command */
-
- int3store(buff,length);
- buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++);
- buff[4]=command;
- if (net_write_buff(net,(char*) buff,5))
- return 1;
- return test(net_write_buff(net,packet,len) || net_flush(net));
-}
-
-
-static int
-net_write_buff(NET *net,const char *packet,uint len)
-{
- uint left_length=(uint) (net->buff_end - net->write_pos);
-
- while (len > left_length)
- {
- memcpy((char*) net->write_pos,packet,left_length);
- if (net_real_write(net,(char*) net->buff,net->max_packet))
- return 1;
- net->write_pos=net->buff;
- packet+=left_length;
- len-=left_length;
- left_length=net->max_packet;
- }
- memcpy((char*) net->write_pos,packet,len);
- net->write_pos+=len;
- return 0;
-}
-
-/* Read and write using timeouts */
-
-int
-net_real_write(NET *net,const char *packet,ulong len)
-{
- int length;
- char *pos,*end;
- thr_alarm_t alarmed;
-#if !defined(__WIN__) && !defined(__EMX__)
- ALARM alarm_buff;
-#endif
- uint retry_count=0;
- my_bool net_blocking = vio_is_blocking(net->vio);
- DBUG_ENTER("net_real_write");
-
- if (net->error == 2)
- DBUG_RETURN(-1); /* socket can't be used */
-
- net->reading_or_writing=2;
-#ifdef HAVE_COMPRESS
- if (net->compress)
- {
- ulong complen;
- uchar *b;
- uint header_length=NET_HEADER_SIZE+COMP_HEADER_SIZE;
- if (!(b=(uchar*) my_malloc(len + NET_HEADER_SIZE + COMP_HEADER_SIZE,
- MYF(MY_WME))))
- {
-#ifdef MYSQL_SERVER
- net->last_errno=ER_OUT_OF_RESOURCES;
- net->error=2;
-#endif
- net->reading_or_writing=0;
- DBUG_RETURN(1);
- }
- memcpy(b+header_length,packet,len);
-
- if (my_compress((byte*) b+header_length,&len,&complen))
- {
- DBUG_PRINT("warning",
- ("Compression error; Continuing without compression"));
- complen=0;
- }
- int3store(&b[NET_HEADER_SIZE],complen);
- int3store(b,len);
- b[3]=(uchar) (net->pkt_nr++);
- len+= header_length;
- packet= (char*) b;
- }
-#endif /* HAVE_COMPRESS */
-
- /* DBUG_DUMP("net",packet,len); */
-#ifdef MYSQL_SERVER
- thr_alarm_init(&alarmed);
- if (net_blocking)
- thr_alarm(&alarmed,(uint) net_write_timeout,&alarm_buff);
-#else
- alarmed=0;
-#endif /* MYSQL_SERVER */
-
- pos=(char*) packet; end=pos+len;
- while (pos != end)
- {
- if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0)
- {
- my_bool interrupted = vio_should_retry(net->vio);
-#if (!defined(__WIN__) && !defined(__EMX__))
- if ((interrupted || length==0) && !thr_alarm_in_use(&alarmed))
- {
- if (!thr_alarm(&alarmed,(uint) net_write_timeout,&alarm_buff))
- { /* Always true for client */
- if (!vio_is_blocking(net->vio))
- {
- while (vio_blocking(net->vio, TRUE) < 0)
- {
- if (vio_should_retry(net->vio) && retry_count++ < RETRY_COUNT)
- continue;
-#ifdef EXTRA_DEBUG
- fprintf(stderr,
- "%s: my_net_write: fcntl returned error %d, aborting thread\n",
- my_progname,vio_errno(net->vio));
-#endif /* EXTRA_DEBUG */
- net->error=2; /* Close socket */
- goto end;
- }
- }
- retry_count=0;
- continue;
- }
- }
- else
-#endif /* (!defined(__WIN__) && !defined(__EMX__)) */
- if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) &&
- interrupted)
- {
- if (retry_count++ < RETRY_COUNT)
- continue;
-#ifdef EXTRA_DEBUG
- fprintf(stderr, "%s: write looped, aborting thread\n",
- my_progname);
-#endif /* EXTRA_DEBUG */
- }
-#if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER)
- if (vio_errno(net->vio) == EINTR)
- {
- DBUG_PRINT("warning",("Interrupted write. Retrying..."));
- continue;
- }
-#endif /* defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) */
- net->error=2; /* Close socket */
-#ifdef MYSQL_SERVER
- net->last_errno= (interrupted ? ER_NET_WRITE_INTERRUPTED :
- ER_NET_ERROR_ON_WRITE);
-#endif /* MYSQL_SERVER */
- break;
- }
- pos+=length;
- statistic_add(bytes_sent,length,&LOCK_bytes_sent);
- }
-#ifndef __WIN__
- end:
-#endif
-#ifdef HAVE_COMPRESS
- if (net->compress)
- my_free((char*) packet,MYF(0));
-#endif
- if (thr_alarm_in_use(&alarmed))
- {
- thr_end_alarm(&alarmed);
- vio_blocking(net->vio, net_blocking);
- }
- net->reading_or_writing=0;
- DBUG_RETURN(((int) (pos != end)));
-}
-
-
-/*****************************************************************************
-** Read something from server/clinet
-*****************************************************************************/
-
-#ifdef MYSQL_SERVER
-
-/*
- Help function to clear the commuication buffer when we get a too
- big packet
-*/
-
-static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed)
-{
- ALARM alarm_buff;
- uint retry_count=0;
- if (!thr_alarm_in_use(&alarmed))
- {
- if (!thr_alarm(alarmed,net->timeout,&alarm_buff) ||
- (!vio_is_blocking(net->vio) && vio_blocking(net->vio,TRUE) < 0))
- return; /* Can't setup, abort */
- }
- while (remain > 0)
- {
- ulong length;
- if ((int) (length=vio_read(net->vio,(char*) net->buff,remain)) <= 0L)
- {
- my_bool interrupted = vio_should_retry(net->vio);
- if (!thr_got_alarm(&alarmed) && interrupted)
- { /* Probably in MIT threads */
- if (retry_count++ < RETRY_COUNT)
- continue;
- }
- return;
- }
- remain -=(ulong) length;
- statistic_add(bytes_received,(ulong) length,&LOCK_bytes_received);
- }
-}
-#endif /* MYSQL_SERVER */
-
-
-static uint
-my_real_read(NET *net, ulong *complen)
-{
- uchar *pos;
- long length;
- uint i,retry_count=0;
- ulong len=packet_error;
- thr_alarm_t alarmed;
-#if (!defined(__WIN__) && !defined(__EMX__)) || defined(MYSQL_SERVER)
- ALARM alarm_buff;
-#endif
- my_bool net_blocking=vio_is_blocking(net->vio);
- ulong remain= (net->compress ? NET_HEADER_SIZE+COMP_HEADER_SIZE :
- NET_HEADER_SIZE);
- *complen = 0;
-
- net->reading_or_writing=1;
- thr_alarm_init(&alarmed);
-#ifdef MYSQL_SERVER
- if (net_blocking)
- thr_alarm(&alarmed,net->timeout,&alarm_buff);
-#endif /* MYSQL_SERVER */
-
- pos = net->buff + net->where_b; /* net->packet -4 */
- for (i=0 ; i < 2 ; i++)
- {
- while (remain > 0)
- {
- /* First read is done with non blocking mode */
- if ((int) (length=vio_read(net->vio,(char*) pos,remain)) <= 0L)
- {
- my_bool interrupted = vio_should_retry(net->vio);
-
- DBUG_PRINT("info",("vio_read returned %d, errno: %d",
- length, vio_errno(net->vio)));
-#if (!defined(__WIN__) && !defined(__EMX__)) || defined(MYSQL_SERVER)
- /*
- We got an error that there was no data on the socket. We now set up
- an alarm to not 'read forever', change the socket to non blocking
- mode and try again
- */
- if ((interrupted || length == 0) && !thr_alarm_in_use(&alarmed))
- {
- if (!thr_alarm(&alarmed,net->timeout,&alarm_buff)) /* Don't wait too long */
- {
- if (!vio_is_blocking(net->vio))
- {
- while (vio_blocking(net->vio,TRUE) < 0)
- {
- if (vio_should_retry(net->vio) &&
- retry_count++ < RETRY_COUNT)
- continue;
- DBUG_PRINT("error",
- ("fcntl returned error %d, aborting thread",
- vio_errno(net->vio)));
-#ifdef EXTRA_DEBUG
- fprintf(stderr,
- "%s: read: fcntl returned error %d, aborting thread\n",
- my_progname,vio_errno(net->vio));
-#endif /* EXTRA_DEBUG */
- len= packet_error;
- net->error=2; /* Close socket */
-#ifdef MYSQL_SERVER
- net->last_errno=ER_NET_FCNTL_ERROR;
-#endif
- goto end;
- }
- }
- retry_count=0;
- continue;
- }
- }
-#endif /* (!defined(__WIN__) && !defined(__EMX__)) || defined(MYSQL_SERVER) */
- if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) &&
- interrupted)
- { /* Probably in MIT threads */
- if (retry_count++ < RETRY_COUNT)
- continue;
-#ifdef EXTRA_DEBUG
- fprintf(stderr, "%s: read looped with error %d, aborting thread\n",
- my_progname,vio_errno(net->vio));
-#endif /* EXTRA_DEBUG */
- }
-#if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER)
- if (vio_should_retry(net->vio))
- {
- DBUG_PRINT("warning",("Interrupted read. Retrying..."));
- continue;
- }
-#endif
- DBUG_PRINT("error",("Couldn't read packet: remain: %d errno: %d length: %d alarmed: %d", remain,vio_errno(net->vio),length,alarmed));
- len= packet_error;
- net->error=2; /* Close socket */
-#ifdef MYSQL_SERVER
- net->last_errno= (interrupted ? ER_NET_READ_INTERRUPTED :
- ER_NET_READ_ERROR);
-#endif
- goto end;
- }
- remain -= (ulong) length;
- pos+= (ulong) length;
- statistic_add(bytes_received,(ulong) length,&LOCK_bytes_received);
- }
- if (i == 0)
- { /* First parts is packet length */
- ulong helping;
- if (net->buff[net->where_b + 3] != (uchar) net->pkt_nr)
- {
- if (net->buff[net->where_b] != (uchar) 255)
- {
- DBUG_PRINT("error",
- ("Packets out of order (Found: %d, expected %d)",
- (int) net->buff[net->where_b + 3],
- (uint) (uchar) net->pkt_nr));
-#ifdef EXTRA_DEBUG
- fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n",
- (int) net->buff[net->where_b + 3],
- (uint) (uchar) net->pkt_nr);
-#endif
- }
- len= packet_error;
-#ifdef MYSQL_SERVER
- net->last_errno=ER_NET_PACKETS_OUT_OF_ORDER;
-#endif
- goto end;
- }
- net->pkt_nr++;
-#ifdef HAVE_COMPRESS
- if (net->compress)
- {
- /* complen is > 0 if package is really compressed */
- *complen=uint3korr(&(net->buff[net->where_b + NET_HEADER_SIZE]));
- }
-#endif
-
- len=uint3korr(net->buff+net->where_b);
- helping = max(len,*complen) + net->where_b;
- /* The necessary size of net->buff */
- if (helping >= net->max_packet)
- {
- /* We must allocate one extra byte for the end null */
- if (net_realloc(net,helping+1))
- {
-#ifdef MYSQL_SERVER
- if (i == 1)
- my_net_skip_rest(net, len, &alarmed);
-#endif
- len= packet_error; /* Return error */
- goto end;
- }
- }
- pos=net->buff + net->where_b;
- remain = len;
- }
- }
-
-end:
- if (thr_alarm_in_use(&alarmed))
- {
- thr_end_alarm(&alarmed);
- vio_blocking(net->vio, net_blocking);
- }
- net->reading_or_writing=0;
- return(len);
-}
-
-uint
-my_net_read(NET *net)
-{
- ulong len,complen;
-
-#ifdef HAVE_COMPRESS
- if (!net->compress)
- {
-#endif
- len = my_real_read (net,&complen);
- net->read_pos = net->buff + net->where_b;
- if (len != packet_error)
- net->read_pos[len]=0; /* Safeguard for mysql_use_result */
- return len;
-#ifdef HAVE_COMPRESS
- }
- if (net->remain_in_buf)
- net->buff[net->buf_length - net->remain_in_buf]=net->save_char;
- for (;;)
- {
- if (net->remain_in_buf)
- {
- uchar *pos = net->buff + net->buf_length - net->remain_in_buf;
- if (net->remain_in_buf >= 4)
- {
- net->length = uint3korr(pos);
- if (net->length <= net->remain_in_buf - 4)
- {
- /* We have a full packet */
- len=net->length;
- net->remain_in_buf -= net->length + 4;
- net->read_pos=pos + 4;
- break; /* We have a full packet */
- }
- }
- /* Move data down to read next data packet after current one */
- if (net->buf_length != net->remain_in_buf)
- {
- memmove(net->buff,pos,net->remain_in_buf);
- net->buf_length=net->remain_in_buf;
- }
- net->where_b=net->buf_length;
- }
- else
- {
- net->where_b=0;
- net->buf_length=0;
- }
-
- if ((len = my_real_read(net,&complen)) == packet_error)
- break;
- if (my_uncompress((byte*) net->buff + net->where_b, &len, &complen))
- {
- len= packet_error;
- net->error=2; /* caller will close socket */
-#ifdef MYSQL_SERVER
- net->last_errno=ER_NET_UNCOMPRESS_ERROR;
-#endif
- break;
- }
- net->buf_length+=len;
- net->remain_in_buf+=len;
- }
- if (len != packet_error)
- {
- net->save_char= net->read_pos[len]; /* Must be saved */
- net->read_pos[len]=0; /* Safeguard for mysql_use_result */
- }
- return len;
-#endif
-}
diff --git a/ext/mysql/libmysql/password.c b/ext/mysql/libmysql/password.c
deleted file mode 100644
index eb40825401..0000000000
--- a/ext/mysql/libmysql/password.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* password checking routines */
-/*****************************************************************************
- The main idea is that no password are sent between client & server on
- connection and that no password are saved in mysql in a decodable form.
-
- On connection a random string is generated and sent to the client.
- The client generates a new string with a random generator inited with
- the hash values from the password and the sent string.
- This 'check' string is sent to the server where it is compared with
- a string generated from the stored hash_value of the password and the
- random string.
-
- The password is saved (in user.password) by using the PASSWORD() function in
- mysql.
-
- Example:
- update user set password=PASSWORD("hello") where user="test"
- This saves a hashed number as a string in the password field.
-*****************************************************************************/
-
-#include <global.h>
-#include <my_sys.h>
-#include <m_string.h>
-#include "mysql.h"
-
-
-void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2)
-{ /* For mysql 3.21.# */
-#ifdef HAVE_purify
- bzero((char*) rand_st,sizeof(*rand_st)); /* Avoid UMC varnings */
-#endif
- rand_st->max_value= 0x3FFFFFFFL;
- rand_st->max_value_dbl=(double) rand_st->max_value;
- rand_st->seed1=seed1%rand_st->max_value ;
- rand_st->seed2=seed2%rand_st->max_value;
-}
-
-static void old_randominit(struct rand_struct *rand_st,ulong seed1)
-{ /* For mysql 3.20.# */
- rand_st->max_value= 0x01FFFFFFL;
- rand_st->max_value_dbl=(double) rand_st->max_value;
- seed1%=rand_st->max_value;
- rand_st->seed1=seed1 ; rand_st->seed2=seed1/2;
-}
-
-double rnd(struct rand_struct *rand_st)
-{
- rand_st->seed1=(rand_st->seed1*3+rand_st->seed2) % rand_st->max_value;
- rand_st->seed2=(rand_st->seed1+rand_st->seed2+33) % rand_st->max_value;
- return (((double) rand_st->seed1)/rand_st->max_value_dbl);
-}
-
-void hash_password(ulong *result, const char *password)
-{
- register ulong nr=1345345333L, add=7, nr2=0x12345671L;
- ulong tmp;
- for (; *password ; password++)
- {
- if (*password == ' ' || *password == '\t')
- continue; /* skipp space in password */
- tmp= (ulong) (uchar) *password;
- nr^= (((nr & 63)+add)*tmp)+ (nr << 8);
- nr2+=(nr2 << 8) ^ nr;
- add+=tmp;
- }
- result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */;
- result[1]=nr2 & (((ulong) 1L << 31) -1L);
- return;
-}
-
-void make_scrambled_password(char *to,const char *password)
-{
- ulong hash_res[2];
- hash_password(hash_res,password);
- sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]);
-}
-
-static inline uint char_val(char X)
-{
- return (uint) (X >= '0' && X <= '9' ? X-'0' :
- X >= 'A' && X <= 'Z' ? X-'A'+10 :
- X-'a'+10);
-}
-
-/*
-** This code assumes that len(password) is divideable with 8 and that
-** res is big enough (2 in mysql)
-*/
-
-void get_salt_from_password(ulong *res,const char *password)
-{
- res[0]=res[1]=0;
- if (password)
- {
- while (*password)
- {
- ulong val=0;
- uint i;
- for (i=0 ; i < 8 ; i++)
- val=(val << 4)+char_val(*password++);
- *res++=val;
- }
- }
- return;
-}
-
-void make_password_from_salt(char *to, ulong *hash_res)
-{
- sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]);
-}
-
-
-/*
- * Genererate a new message based on message and password
- * The same thing is done in client and server and the results are checked.
- */
-
-char *scramble(char *to,const char *message,const char *password,
- my_bool old_ver)
-{
- struct rand_struct rand_st;
- ulong hash_pass[2],hash_message[2];
- if (password && password[0])
- {
- char *to_start=to;
- hash_password(hash_pass,password);
- hash_password(hash_message,message);
- if (old_ver)
- old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]);
- else
- randominit(&rand_st,hash_pass[0] ^ hash_message[0],
- hash_pass[1] ^ hash_message[1]);
- while (*message++)
- *to++= (char) (floor(rnd(&rand_st)*31)+64);
- if (!old_ver)
- { /* Make it harder to break */
- char extra=(char) (floor(rnd(&rand_st)*31));
- while (to_start != to)
- *(to_start++)^=extra;
- }
- }
- *to=0;
- return to;
-}
-
-
-my_bool check_scramble(const char *scrambled, const char *message,
- ulong *hash_pass, my_bool old_ver)
-{
- struct rand_struct rand_st;
- ulong hash_message[2];
- char buff[16],*to,extra; /* Big enough for check */
- const char *pos;
-
- hash_password(hash_message,message);
- if (old_ver)
- old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]);
- else
- randominit(&rand_st,hash_pass[0] ^ hash_message[0],
- hash_pass[1] ^ hash_message[1]);
- to=buff;
- for (pos=scrambled ; *pos ; pos++)
- *to++=(char) (floor(rnd(&rand_st)*31)+64);
- if (old_ver)
- extra=0;
- else
- extra=(char) (floor(rnd(&rand_st)*31));
- to=buff;
- while (*scrambled)
- {
- if (*scrambled++ != (char) (*to++ ^ extra))
- return 1; /* Wrong password */
- }
- return 0;
-}
diff --git a/ext/mysql/libmysql/raid.h b/ext/mysql/libmysql/raid.h
deleted file mode 100644
index f6f5306392..0000000000
--- a/ext/mysql/libmysql/raid.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Parser needs these defines always, even if USE_RAID is not defined */
-#define RAID_TYPE_0 1 /* Striping */
-#define RAID_TYPE_x 2 /* Some new modes */
-#define RAID_TYPE_y 3
-
-#define RAID_DEFAULT_CHUNKS 4
-#define RAID_DEFAULT_CHUNKSIZE 256*1024 /* 256kB */
-
-extern const char *raid_type_string[];
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-const char *my_raid_type(int raid_type);
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef USE_RAID
-
-#ifdef __GNUC__
-#pragma interface /* gcc class implementation */
-#endif
-#include "my_dir.h"
-
-/* Trap all occurences of my_...() in source and use our wrapper around this function */
-
-#ifdef MAP_TO_USE_RAID
-#define my_read(A,B,C,D) my_raid_read(A,B,C,D)
-#define my_write(A,B,C,D) my_raid_write(A,B,C,D)
-#define my_pwrite(A,B,C,D,E) my_raid_pwrite(A,B,C,D,E)
-#define my_pread(A,B,C,D,E) my_raid_pread(A,B,C,D,E)
-#define my_chsize(A,B,C) my_raid_chsize(A,B,C)
-#define my_close(A,B) my_raid_close(A,B)
-#define my_tell(A,B) my_raid_tell(A,B)
-#define my_seek(A,B,C,D) my_raid_seek(A,B,C,D)
-#define my_lock(A,B,C,D,E) my_raid_lock(A,B,C,D,E)
-#define my_fstat(A,B,C) my_raid_fstat(A,B,C)
-#endif /* MAP_TO_USE_RAID */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- void init_raid(void);
- void end_raid(void);
-
- bool is_raid(File fd);
- File my_raid_create(const char *FileName, int CreateFlags, int access_flags,
- uint raid_type, uint raid_chunks, ulong raid_chunksize,
- myf MyFlags);
- File my_raid_open(const char *FileName, int Flags,
- uint raid_type, uint raid_chunks, ulong raid_chunksize,
- myf MyFlags);
- int my_raid_rename(const char *from, const char *to, uint raid_chunks,
- myf MyFlags);
- int my_raid_delete(const char *from, uint raid_chunks, myf MyFlags);
- int my_raid_redel(const char *old_name, const char *new_name,
- uint raid_chunks, myf MyFlags);
-
- my_off_t my_raid_seek(File fd, my_off_t pos, int whence, myf MyFlags);
- my_off_t my_raid_tell(File fd, myf MyFlags);
-
- uint my_raid_write(File,const byte *Buffer, uint Count, myf MyFlags);
- uint my_raid_read(File Filedes, byte *Buffer, uint Count, myf MyFlags);
-
- uint my_raid_pread(File Filedes, byte *Buffer, uint Count, my_off_t offset,
- myf MyFlags);
- uint my_raid_pwrite(int Filedes, const byte *Buffer, uint Count,
- my_off_t offset, myf MyFlags);
-
- int my_raid_lock(File,int locktype, my_off_t start, my_off_t length,
- myf MyFlags);
- int my_raid_chsize(File fd, my_off_t newlength, myf MyFlags);
- int my_raid_close(File, myf MyFlags);
- int my_raid_fstat(int Filedes, struct stat *buf, myf MyFlags);
-
-#ifdef __cplusplus
-}
-
-class RaidName {
- public:
- RaidName(const char *FileName);
- ~RaidName();
- bool IsRaid();
- int Rename(const char * from, const char * to, myf MyFlags);
- private:
- uint _raid_type; /* RAID_TYPE_0 or RAID_TYPE_1 or RAID_TYPE_5 */
- uint _raid_chunks; /* 1..n */
- ulong _raid_chunksize; /* 1..n in bytes */
-};
-
-class RaidFd {
- public:
- RaidFd(uint raid_type, uint raid_chunks , ulong raid_chunksize);
- ~RaidFd();
- File Create(const char *FileName, int CreateFlags, int access_flags,
- myf MyFlags);
- File Open(const char *FileName, int Flags, myf MyFlags);
- my_off_t Seek(my_off_t pos,int whence,myf MyFlags);
- my_off_t Tell(myf MyFlags);
- int Write(const byte *Buffer, uint Count, myf MyFlags);
- int Read(const byte *Buffer, uint Count, myf MyFlags);
- int Lock(int locktype, my_off_t start, my_off_t length, myf MyFlags);
- int Chsize(File fd, my_off_t newlength, myf MyFlags);
- int Fstat(int fd, MY_STAT *stat_area, myf MyFlags );
- int Close(myf MyFlags);
- static bool IsRaid(File fd);
- static DYNAMIC_ARRAY _raid_map; /* Map of RaidFD* */
- private:
-
- uint _raid_type; /* RAID_TYPE_0 or RAID_TYPE_1 or RAID_TYPE_5 */
- uint _raid_chunks; /* 1..n */
- ulong _raid_chunksize; /* 1..n in bytes */
-
- ulong _total_block; /* We are operating with block no x (can be 0..many). */
- uint _this_block; /* can be 0.._raid_chunks */
- uint _remaining_bytes; /* Maximum bytes that can be written in this block */
-
- my_off_t _position;
- my_off_t _size; /* Cached file size for faster seek(SEEK_END) */
- File _fd;
- File *_fd_vector; /* Array of File */
- off_t *_seek_vector; /* Array of cached seek positions */
-
- inline void Calculate()
- {
- DBUG_ENTER("RaidFd::_Calculate");
- DBUG_PRINT("info",("_position: %lu _raid_chunksize: %d, _size: %lu",
- (ulong) _position, _raid_chunksize, (ulong) _size));
-
- _total_block = (ulong) (_position / _raid_chunksize);
- _this_block = _total_block % _raid_chunks; /* can be 0.._raid_chunks */
- _remaining_bytes = (uint) (_raid_chunksize -
- (_position - _total_block * _raid_chunksize));
- DBUG_PRINT("info",
- ("_total_block: %d this_block: %d _remaining_bytes:%d",
- _total_block, _this_block, _remaining_bytes));
- DBUG_VOID_RETURN;
- }
-};
-
-#endif /* __cplusplus */
-#endif /* USE_RAID */
diff --git a/ext/mysql/libmysql/safemalloc.c b/ext/mysql/libmysql/safemalloc.c
deleted file mode 100644
index 1918034c19..0000000000
--- a/ext/mysql/libmysql/safemalloc.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- * [This posting refers to an article entitled "oops, corrupted memory
- * again!" in net.lang.c. I am posting it here because it is source.]
- *
- * My tool for approaching this problem is to build another level of data
- * abstraction on top of malloc() and free() that implements some checking.
- * This does a number of things for you:
- * - Checks for overruns and underruns on allocated data
- * - Keeps track of where in the program the memory was malloc'ed
- * - Reports on pieces of memory that were not free'ed
- * - Records some statistics such as maximum memory used
- * - Marks newly malloc'ed and newly free'ed memory with special values
- * You can use this scheme to:
- * - Find bugs such as overrun, underrun, etc because you know where
- * a piece of data was malloc'ed and where it was free'ed
- * - Find bugs where memory was not free'ed
- * - Find bugs where newly malloc'ed memory is used without initializing
- * - Find bugs where newly free'ed memory is still used
- * - Determine how much memory your program really uses
- * - and other things
- */
-
-/*
- * To implement my scheme you must have a C compiler that has __LINE__ and
- * __FILE__ macros. If your compiler doesn't have these then (a) buy another:
- * compilers that do are available on UNIX 4.2bsd based systems and the PC,
- * and probably on other machines; or (b) change my scheme somehow. I have
- * recomendations on both these points if you would like them (e-mail please).
- *
- * There are 4 functions in my package:
- * char *NEW( uSize ) Allocate memory of uSize bytes
- * (equivalent to malloc())
- * char *REA( pPtr, uSize) Allocate memory of uSize bytes, move data and
- * free pPtr.
- * (equivalent to realloc())
- * FREE( pPtr ) Free memory allocated by NEW
- * (equivalent to free())
- * TERMINATE(file) End system, report errors and stats on file
- * I personally use two more functions, but have not included them here:
- * char *STRSAVE( sPtr ) Save a copy of the string in dynamic memory
- * char *RENEW( pPtr, uSize )
- * (equivalent to realloc())
- */
-
-/*
- * Memory sub-system, written by Bjorn Benson
- Fixed to use my_sys scheme by Michael Widenius
- */
-
-#ifndef SAFEMALLOC
-#define SAFEMALLOC /* Get protos from my_sys */
-#endif
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#include "my_static.h"
-#include "mysys_err.h"
-
-ulonglong safemalloc_mem_limit = ~(ulonglong)0;
-
-#define pNext tInt._pNext
-#define pPrev tInt._pPrev
-#define sFileName tInt._sFileName
-#define uLineNum tInt._uLineNum
-#define uDataSize tInt._uDataSize
-#define lSpecialValue tInt._lSpecialValue
-
- /* Static functions prototypes */
-
-static int check_ptr(const char *where, byte *ptr, const char *sFile,
- uint uLine);
-static int _checkchunk(struct remember *pRec, const char *sFile, uint uLine);
-
-/*
- * Note: both these refer to the NEW'ed
- * data only. They do not include
- * malloc() roundoff or the extra
- * space required by the remember
- * structures.
- */
-
-#define ALLOC_VAL (uchar) 0xA5 /* NEW'ed memory is filled with this */
- /* value so that references to it will */
- /* end up being very strange. */
-#define FREE_VAL (uchar) 0x8F /* FREE'ed memory is filled with this */
- /* value so that references to it will */
- /* also end up being strange. */
-
-#define MAGICKEY 0x14235296 /* A magic value for underrun key */
-#define MAGICEND0 0x68 /* Magic values for overrun keys */
-#define MAGICEND1 0x34 /* " */
-#define MAGICEND2 0x7A /* " */
-#define MAGICEND3 0x15 /* " */
-
- /* Warning: do not change the MAGICEND? values to */
- /* something with the high bit set. Various C */
- /* compilers (like the 4.2bsd one) do not do the */
- /* sign extension right later on in this code and */
- /* you will get erroneous errors. */
-
-
-/*
- * gptr _mymalloc( uint uSize, my_string sFile, uint uLine, MyFlags )
- * Allocate some memory.
- */
-
-gptr _mymalloc (uint uSize, const char *sFile, uint uLine, myf MyFlags)
-{
- struct remember *pTmp;
- DBUG_ENTER("_mymalloc");
- DBUG_PRINT("enter",("Size: %u",uSize));
-
-
- if (!sf_malloc_quick)
- (void) _sanity (sFile, uLine);
-
- if(uSize + lCurMemory > safemalloc_mem_limit)
- pTmp = 0;
- else
- /* Allocate the physical memory */
- pTmp = (struct remember *) malloc (
- sizeof (struct irem) /* remember data */
- + sf_malloc_prehunc
- + uSize /* size requested */
- + 4 /* overrun mark */
- + sf_malloc_endhunc
- );
-
- /* Check if there isn't anymore memory avaiable */
- if (pTmp == NULL)
- {
- if (MyFlags & MY_FAE)
- error_handler_hook=fatal_error_handler_hook;
- if (MyFlags & (MY_FAE+MY_WME))
- {
- char buff[SC_MAXWIDTH];
- my_errno=errno;
- sprintf(buff,"Out of memory at line %d, '%s'", uLine, sFile);
- my_message(EE_OUTOFMEMORY,buff,MYF(ME_BELL+ME_WAITTANG));
- sprintf(buff,"needed %d byte (%ldk), memory in use: %ld bytes (%ldk)",
- uSize, (uSize + 1023L) / 1024L,
- lMaxMemory, (lMaxMemory + 1023L) / 1024L);
- my_message(EE_OUTOFMEMORY,buff,MYF(ME_BELL+ME_WAITTANG));
- }
- DBUG_PRINT("error",("Out of memory, in use: %ld at line %d, '%s'",
- lMaxMemory,uLine, sFile));
- if (MyFlags & MY_FAE)
- exit(1);
- DBUG_RETURN ((gptr) NULL);
- }
-
- /* Fill up the structure */
- *((long*) ((char*) &pTmp -> lSpecialValue+sf_malloc_prehunc)) = MAGICKEY;
- pTmp -> aData[uSize + sf_malloc_prehunc+0] = MAGICEND0;
- pTmp -> aData[uSize + sf_malloc_prehunc+1] = MAGICEND1;
- pTmp -> aData[uSize + sf_malloc_prehunc+2] = MAGICEND2;
- pTmp -> aData[uSize + sf_malloc_prehunc+3] = MAGICEND3;
- pTmp -> sFileName = (my_string) sFile;
- pTmp -> uLineNum = uLine;
- pTmp -> uDataSize = uSize;
- pTmp -> pPrev = NULL;
-
- /* Add this remember structure to the linked list */
- pthread_mutex_lock(&THR_LOCK_malloc);
- if ((pTmp->pNext=pRememberRoot))
- {
- pRememberRoot -> pPrev = pTmp;
- }
- pRememberRoot = pTmp;
-
- /* Keep the statistics */
- lCurMemory += uSize;
- if (lCurMemory > lMaxMemory) {
- lMaxMemory = lCurMemory;
- }
- cNewCount++;
- pthread_mutex_unlock(&THR_LOCK_malloc);
-
- /* Set the memory to the aribtrary wierd value */
-#ifdef HAVE_purify
- if (MyFlags & MY_ZEROFILL)
-#endif
- bfill(&pTmp -> aData[sf_malloc_prehunc],uSize,
- (char) (MyFlags & MY_ZEROFILL ? 0 : ALLOC_VAL));
- /* Return a pointer to the real data */
- DBUG_PRINT("exit",("ptr: %lx",&(pTmp -> aData[sf_malloc_prehunc])));
- if (sf_min_adress > &(pTmp -> aData[sf_malloc_prehunc]))
- sf_min_adress = &(pTmp -> aData[sf_malloc_prehunc]);
- if (sf_max_adress < &(pTmp -> aData[sf_malloc_prehunc]))
- sf_max_adress = &(pTmp -> aData[sf_malloc_prehunc]);
- DBUG_RETURN ((gptr) &(pTmp -> aData[sf_malloc_prehunc]));
-}
-
-/*
- * Allocate some new memory and move old memoryblock there.
- * Free then old memoryblock
- */
-
-gptr _myrealloc (register gptr pPtr, register uint uSize,
- const char *sFile, uint uLine, myf MyFlags)
-{
- struct remember *pRec;
- gptr ptr;
- DBUG_ENTER("_myrealloc");
-
- if (!pPtr && (MyFlags & MY_ALLOW_ZERO_PTR))
- DBUG_RETURN(_mymalloc(uSize,sFile,uLine,MyFlags));
-
- if (!sf_malloc_quick)
- (void) _sanity (sFile, uLine);
-
- if (check_ptr("Reallocating",(byte*) pPtr,sFile,uLine))
- DBUG_RETURN((gptr) NULL);
-
- pRec = (struct remember *) ((char*) pPtr - sizeof (struct irem)-
- sf_malloc_prehunc);
- if (*((long*) ((char*) &pRec -> lSpecialValue+sf_malloc_prehunc))
- != MAGICKEY)
- {
- fprintf (stderr, "Reallocating unallocated data at line %d, '%s'\n",
- uLine, sFile);
- DBUG_PRINT("safe",("Reallocating unallocated data at line %d, '%s'",
- uLine, sFile));
- (void) fflush(stderr);
- DBUG_RETURN((gptr) NULL);
- }
-
- if ((ptr=_mymalloc(uSize,sFile,uLine,MyFlags))) /* Allocate new area */
- {
- uSize=min(uSize,pRec-> uDataSize); /* Move as much as possibly */
- memcpy((byte*) ptr,pPtr,(size_t) uSize); /* Copy old data */
- _myfree(pPtr,sFile,uLine,0); /* Free not needed area */
- }
- else
- {
- if (MyFlags & MY_HOLD_ON_ERROR)
- DBUG_RETURN(pPtr);
- if (MyFlags & MY_FREE_ON_ERROR)
- _myfree(pPtr,sFile,uLine,0);
- }
- DBUG_RETURN(ptr);
-} /* _myrealloc */
-
-
-/*
- * void _myfree( my_string pPtr, my_string sFile, uint uLine, myf myflags)
- * Deallocate some memory.
- */
-
-void _myfree (gptr pPtr, const char *sFile, uint uLine, myf myflags)
-{
- struct remember *pRec;
- DBUG_ENTER("_myfree");
- DBUG_PRINT("enter",("ptr: %lx",pPtr));
-
- if (!sf_malloc_quick)
- (void) _sanity (sFile, uLine);
-
- if ((!pPtr && (myflags & MY_ALLOW_ZERO_PTR)) ||
- check_ptr("Freeing",(byte*) pPtr,sFile,uLine))
- DBUG_VOID_RETURN;
-
- /* Calculate the address of the remember structure */
- pRec = (struct remember *) ((byte*) pPtr-sizeof(struct irem)-
- sf_malloc_prehunc);
-
- /* Check to make sure that we have a real remember structure */
- /* Note: this test could fail for four reasons: */
- /* (1) The memory was already free'ed */
- /* (2) The memory was never new'ed */
- /* (3) There was an underrun */
- /* (4) A stray pointer hit this location */
-
- if (*((long*) ((char*) &pRec -> lSpecialValue+sf_malloc_prehunc))
- != MAGICKEY)
- {
- fprintf (stderr, "Freeing unallocated data at line %d, '%s'\n",
- uLine, sFile);
- DBUG_PRINT("safe",("Unallocated data at line %d, '%s'",uLine,sFile));
- (void) fflush(stderr);
- DBUG_VOID_RETURN;
- }
-
- /* Remove this structure from the linked list */
- pthread_mutex_lock(&THR_LOCK_malloc);
- if (pRec -> pPrev) {
- pRec -> pPrev -> pNext = pRec -> pNext;
- } else {
- pRememberRoot = pRec -> pNext;
- }
- if (pRec -> pNext) {
- pRec -> pNext -> pPrev = pRec -> pPrev;
- }
- /* Handle the statistics */
- lCurMemory -= pRec -> uDataSize;
- cNewCount--;
- pthread_mutex_unlock(&THR_LOCK_malloc);
-
-#ifndef HAVE_purify
- /* Mark this data as free'ed */
- bfill(&pRec->aData[sf_malloc_prehunc],pRec->uDataSize,(pchar) FREE_VAL);
-#endif
- *((long*) ((char*) &pRec -> lSpecialValue+sf_malloc_prehunc)) = ~MAGICKEY;
-
- /* Actually free the memory */
- free ((my_string ) pRec);
- DBUG_VOID_RETURN;
-}
-
- /* Check if we have a wrong pointer */
-
-static int check_ptr(const char *where, byte *ptr, const char *sFile,
- uint uLine)
-{
- if (!ptr)
- {
- fprintf (stderr, "%s NULL pointer at line %d, '%s'\n",
- where,uLine, sFile);
- DBUG_PRINT("safe",("Null pointer at line %d '%s'", uLine, sFile));
- (void) fflush(stderr);
- return 1;
- }
-#ifndef _MSC_VER
- if ((long) ptr & (MY_ALIGN(1,sizeof(char *))-1))
- {
- fprintf (stderr, "%s wrong aligned pointer at line %d, '%s'\n",
- where,uLine, sFile);
- DBUG_PRINT("safe",("Wrong aligned pointer at line %d, '%s'",
- uLine,sFile));
- (void) fflush(stderr);
- return 1;
- }
-#endif
- if (ptr < sf_min_adress || ptr > sf_max_adress)
- {
- fprintf (stderr, "%s pointer out of range at line %d, '%s'\n",
- where,uLine, sFile);
- DBUG_PRINT("safe",("Pointer out of range at line %d '%s'",
- uLine,sFile));
- (void) fflush(stderr);
- return 1;
- }
- return 0;
-}
-
-
-/*
- * TERMINATE(FILE *file)
- * Report on all the memory pieces that have not been
- * free'ed as well as the statistics.
- */
-
-void TERMINATE (FILE *file)
-{
- struct remember *pPtr;
- DBUG_ENTER("TERMINATE");
- pthread_mutex_lock(&THR_LOCK_malloc);
-
- /* Report the difference between number of calls to */
- /* NEW and the number of calls to FREE. >0 means more */
- /* NEWs than FREEs. <0, etc. */
-
- if (cNewCount)
- {
- if (file)
- {
- fprintf (file, "cNewCount: %d\n", cNewCount);
- (void) fflush(file);
- }
- DBUG_PRINT("safe",("cNewCount: %d",cNewCount));
- }
-
- /* Report on all the memory that was allocated with NEW */
- /* but not free'ed with FREE. */
-
- if ((pPtr=pRememberRoot))
- {
- if (file)
- {
- fprintf(file, "Memory that was not free'ed (%ld bytes):\n",lCurMemory);
- (void) fflush(file);
- }
- DBUG_PRINT("safe",("Memory that was not free'ed (%ld bytes):",lCurMemory));
- while (pPtr)
- {
- if (file)
- {
- fprintf (file,
- "\t%6u bytes at 0x%09lx, allocated at line %4u in '%s'\n",
- pPtr -> uDataSize,
- (ulong) &(pPtr -> aData[sf_malloc_prehunc]),
- pPtr -> uLineNum, pPtr -> sFileName);
- (void) fflush(file);
- }
- DBUG_PRINT("safe",
- ("%6u bytes at 0x%09lx, allocated at line %4d in '%s'",
- pPtr -> uDataSize, &(pPtr -> aData[sf_malloc_prehunc]),
- pPtr -> uLineNum, pPtr -> sFileName));
- pPtr = pPtr -> pNext;
- }
- }
- /* Report the memory usage statistics */
- if (file)
- {
- fprintf (file, "Maximum memory usage: %ld bytes (%ldk)\n",
- lMaxMemory, (lMaxMemory + 1023L) / 1024L);
- (void) fflush(file);
- }
- DBUG_PRINT("safe",("Maximum memory usage: %ld bytes (%ldk)",
- lMaxMemory, (lMaxMemory + 1023L) / 1024L));
- pthread_mutex_unlock(&THR_LOCK_malloc);
- DBUG_VOID_RETURN;
-}
-
-
- /* Returns 0 if chunk is ok */
-
-static int _checkchunk (register struct remember *pRec, const char *sFile,
- uint uLine)
-{
- reg1 uint uSize;
- reg2 my_string magicp;
- reg3 int flag=0;
-
- /* Check for a possible underrun */
- if (*((long*) ((char*) &pRec -> lSpecialValue+sf_malloc_prehunc))
- != MAGICKEY)
- {
- fprintf (stderr, "Memory allocated at %s:%d was underrun,",
- pRec -> sFileName, pRec -> uLineNum);
- fprintf (stderr, " discovered at %s:%d\n", sFile, uLine);
- (void) fflush(stderr);
- DBUG_PRINT("safe",("Underrun at %lx, allocated at %s:%d",
- &(pRec -> aData[sf_malloc_prehunc]),
- pRec -> sFileName,
- pRec -> uLineNum));
- flag=1;
- }
-
- /* Check for a possible overrun */
- uSize = pRec -> uDataSize;
- magicp = &(pRec -> aData[uSize+sf_malloc_prehunc]);
- if (*magicp++ != MAGICEND0 ||
- *magicp++ != MAGICEND1 ||
- *magicp++ != MAGICEND2 ||
- *magicp++ != MAGICEND3)
- {
- fprintf (stderr, "Memory allocated at %s:%d was overrun,",
- pRec -> sFileName, pRec -> uLineNum);
- fprintf (stderr, " discovered at '%s:%d'\n", sFile, uLine);
- (void) fflush(stderr);
- DBUG_PRINT("safe",("Overrun at %lx, allocated at %s:%d",
- &(pRec -> aData[sf_malloc_prehunc]),
- pRec -> sFileName,
- pRec -> uLineNum));
- flag=1;
- }
- return(flag);
-}
-
-
- /* Returns how many wrong chunks */
-
-int _sanity (const char *sFile, uint uLine)
-{
- reg1 struct remember *pTmp;
- reg2 int flag=0;
- uint count=0;
-
- pthread_mutex_lock(&THR_LOCK_malloc);
- count=cNewCount;
- for (pTmp = pRememberRoot; pTmp != NULL && count-- ; pTmp = pTmp -> pNext)
- flag+=_checkchunk (pTmp, sFile, uLine);
- pthread_mutex_unlock(&THR_LOCK_malloc);
- if (count || pTmp)
- {
- const char *format="Safemalloc link list destroyed, discovered at '%s:%d'";
- fprintf (stderr, format, sFile, uLine); fputc('\n',stderr);
- (void) fflush(stderr);
- DBUG_PRINT("safe",(format, sFile, uLine));
- flag=1;
- }
- return flag;
-} /* _sanity */
-
-
- /* malloc and copy */
-
-gptr _my_memdup(const byte *from, uint length, const char *sFile, uint uLine,
- myf MyFlags)
-{
- gptr ptr;
- if ((ptr=_mymalloc(length,sFile,uLine,MyFlags)) != 0)
- memcpy((byte*) ptr, (byte*) from,(size_t) length);
- return(ptr);
-} /*_my_memdup */
-
-
-my_string _my_strdup(const char *from, const char *sFile, uint uLine,
- myf MyFlags)
-{
- gptr ptr;
- uint length=(uint) strlen(from)+1;
- if ((ptr=_mymalloc(length,sFile,uLine,MyFlags)) != 0)
- memcpy((byte*) ptr, (byte*) from,(size_t) length);
- return((my_string) ptr);
-} /* _my_strdup */
diff --git a/ext/mysql/libmysql/stamp-h.in b/ext/mysql/libmysql/stamp-h.in
deleted file mode 100644
index 9788f70238..0000000000
--- a/ext/mysql/libmysql/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/ext/mysql/libmysql/str2int.c b/ext/mysql/libmysql/str2int.c
deleted file mode 100644
index a9cb9911fc..0000000000
--- a/ext/mysql/libmysql/str2int.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- str2int(src, radix, lower, upper, &val)
- converts the string pointed to by src to an integer and stores it in
- val. It skips leading spaces and tabs (but not newlines, formfeeds,
- backspaces), then it accepts an optional sign and a sequence of digits
- in the specified radix. The result should satisfy lower <= *val <= upper.
- The result is a pointer to the first character after the number;
- trailing spaces will NOT be skipped.
-
- If an error is detected, the result will be NullS, the value put
- in val will be 0, and errno will be set to
- EDOM if there are no digits
- ERANGE if the result would overflow or otherwise fail to lie
- within the specified bounds.
- Check that the bounds are right for your machine.
- This looks amazingly complicated for what you probably thought was an
- easy task. Coping with integer overflow and the asymmetric range of
- twos complement machines is anything but easy.
-
- So that users of atoi and atol can check whether an error occured,
- I have taken a wholly unprecedented step: errno is CLEARED if this
- call has no problems.
-*/
-
-#include <global.h>
-#include "m_string.h"
-#include "m_ctype.h"
-#include "my_sys.h" /* defines errno */
-#include <errno.h>
-
-#define char_val(X) (X >= '0' && X <= '9' ? X-'0' :\
- X >= 'A' && X <= 'Z' ? X-'A'+10 :\
- X >= 'a' && X <= 'z' ? X-'a'+10 :\
- '\177')
-
-char *str2int(register const char *src, register int radix, long int lower, long int upper, long int *val)
-{
- int sign; /* is number negative (+1) or positive (-1) */
- int n; /* number of digits yet to be converted */
- long limit; /* "largest" possible valid input */
- long scale; /* the amount to multiply next digit by */
- long sofar; /* the running value */
- register int d; /* (negative of) next digit */
- char *start;
- int digits[32]; /* Room for numbers */
-
- /* Make sure *val is sensible in case of error */
-
- *val = 0;
-
- /* Check that the radix is in the range 2..36 */
-
-#ifndef DBUG_OFF
- if (radix < 2 || radix > 36) {
- errno=EDOM;
- return NullS;
- }
-#endif
-
- /* The basic problem is: how do we handle the conversion of
- a number without resorting to machine-specific code to
- check for overflow? Obviously, we have to ensure that
- no calculation can overflow. We are guaranteed that the
- "lower" and "upper" arguments are valid machine integers.
- On sign-and-magnitude, twos-complement, and ones-complement
- machines all, if +|n| is representable, so is -|n|, but on
- twos complement machines the converse is not true. So the
- "maximum" representable number has a negative representative.
- Limit is set to min(-|lower|,-|upper|); this is the "largest"
- number we are concerned with. */
-
- /* Calculate Limit using Scale as a scratch variable */
-
- if ((limit = lower) > 0) limit = -limit;
- if ((scale = upper) > 0) scale = -scale;
- if (scale < limit) limit = scale;
-
- /* Skip leading spaces and check for a sign.
- Note: because on a 2s complement machine MinLong is a valid
- integer but |MinLong| is not, we have to keep the current
- converted value (and the scale!) as *negative* numbers,
- so the sign is the opposite of what you might expect.
- */
- while (isspace(*src)) src++;
- sign = -1;
- if (*src == '+') src++; else
- if (*src == '-') src++, sign = 1;
-
- /* Skip leading zeros so that we never compute a power of radix
- in scale that we won't have a need for. Otherwise sticking
- enough 0s in front of a number could cause the multiplication
- to overflow when it neededn't.
- */
- start=(char*) src;
- while (*src == '0') src++;
-
- /* Move over the remaining digits. We have to convert from left
- to left in order to avoid overflow. Answer is after last digit.
- */
-
- for (n = 0; (digits[n]=char_val(*src)) < radix && n < 20; n++,src++) ;
-
- /* Check that there is at least one digit */
-
- if (start == src) {
- errno=EDOM;
- return NullS;
- }
-
- /* The invariant we want to maintain is that src is just
- to the right of n digits, we've converted k digits to
- sofar, scale = -radix**k, and scale < sofar < 0. Now
- if the final number is to be within the original
- Limit, we must have (to the left)*scale+sofar >= Limit,
- or (to the left)*scale >= Limit-sofar, i.e. the digits
- to the left of src must form an integer <= (Limit-sofar)/(scale).
- In particular, this is true of the next digit. In our
- incremental calculation of Limit,
-
- IT IS VITAL that (-|N|)/(-|D|) = |N|/|D|
- */
-
- for (sofar = 0, scale = -1; --n >= 1;)
- {
- if ((long) -(d=digits[n]) < limit) {
- errno=ERANGE;
- return NullS;
- }
- limit = (limit+d)/radix, sofar += d*scale; scale *= radix;
- }
- if (n == 0)
- {
- if ((long) -(d=digits[n]) < limit) /* get last digit */
- {
- errno=ERANGE;
- return NullS;
- }
- sofar+=d*scale;
- }
-
- /* Now it might still happen that sofar = -32768 or its equivalent,
- so we can't just multiply by the sign and check that the result
- is in the range lower..upper. All of this caution is a right
- pain in the neck. If only there were a standard routine which
- says generate thus and such a signal on integer overflow...
- But not enough machines can do it *SIGH*.
- */
- if (sign < 0)
- {
- if (sofar < -LONG_MAX || (sofar= -sofar) > upper)
- {
- errno=ERANGE;
- return NullS;
- }
- }
- else if (sofar < lower)
- {
- errno=ERANGE;
- return NullS;
- }
- *val = sofar;
- errno=0; /* indicate that all went well */
- return (char*) src;
-}
-
- /* Theese are so slow compared with ordinary, optimized atoi */
-
-#ifdef WANT_OUR_ATOI
-
-int atoi(const char *src)
-{
- long val;
- str2int(src, 10, (long) INT_MIN, (long) INT_MAX, &val);
- return (int) val;
-}
-
-
-long atol(const char *src)
-{
- long val;
- str2int(src, 10, LONG_MIN, LONG_MAX, &val);
- return val;
-}
-
-#endif /* WANT_OUR_ATOI */
diff --git a/ext/mysql/libmysql/strcend.c b/ext/mysql/libmysql/strcend.c
deleted file mode 100644
index ef4fb95d5c..0000000000
--- a/ext/mysql/libmysql/strcend.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : strcend.c
- Author : Michael Widenius: ifdef MC68000
- Updated: 20 April 1984
- Defines: strcend()
-
- strcend(s, c) returns a pointer to the first place in s where c
- occurs, or a pointer to the end-null of s if c does not occur in s.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#if defined(MC68000) && defined(DS90)
-
-char *strcend(const char *s, pchar c)
-{
-asm(" movl 4(a7),a0 ");
-asm(" movl 8(a7),d1 ");
-asm(".L2: movb (a0)+,d0 ");
-asm(" cmpb d0,d1 ");
-asm(" beq .L1 ");
-asm(" tstb d0 ");
-asm(" bne .L2 ");
-asm(".L1: movl a0,d0 ");
-asm(" subql #1,d0 ");
-}
-
-#else
-
-char *strcend(register const char *s, register pchar c)
-{
- for (;;)
- {
- if (*s == (char) c) return (char*) s;
- if (!*s++) return (char*) s-1;
- }
-}
-
-#endif
diff --git a/ext/mysql/libmysql/strcont.c b/ext/mysql/libmysql/strcont.c
deleted file mode 100644
index cc75ec450e..0000000000
--- a/ext/mysql/libmysql/strcont.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : strcont.c
- Author : Monty
- Updated: 1988.07.27
- Defines: strcont()
-
- strcont(str, set) if str contanies any character in the string set.
- The result is the position of the first found character in str, or NullS
- if there isn't anything found.
-
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-my_string strcont(reg1 const char *str,reg2 const char *set)
-{
- reg3 my_string start = (my_string) set;
-
- while (*str)
- {
- while (*set)
- {
- if (*set++ == *str)
- return ((char*) str);
- }
- set=start; str++;
- }
- return (NullS);
-} /* strcont */
diff --git a/ext/mysql/libmysql/strend.c b/ext/mysql/libmysql/strend.c
deleted file mode 100644
index 18b9d1fbd0..0000000000
--- a/ext/mysql/libmysql/strend.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* File : strend.c
- Author : Richard A. O'Keefe.
- Updated: 23 April 1984
- Defines: strend()
-
- strend(s) returns a character pointer to the NUL which ends s. That
- is, strend(s)-s == strlen(s). This is useful for adding things at
- the end of strings. It is redundant, because strchr(s,'\0') could
- be used instead, but this is clearer and faster.
- Beware: the asm version works only if strlen(s) < 65535.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#if VaxAsm
-
-char *strend(s)
-const char *s;
-{
- asm("locc $0,$65535,*4(ap)");
- asm("movl r1,r0");
-}
-
-#else /* ~VaxAsm */
-
-char *strend(register const char *s)
-{
- while (*s++);
- return (char*) (s-1);
-}
-
-#endif /* VaxAsm */
diff --git a/ext/mysql/libmysql/strfill.c b/ext/mysql/libmysql/strfill.c
deleted file mode 100644
index 2a8496b8b1..0000000000
--- a/ext/mysql/libmysql/strfill.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : strfill.c
- Author : Monty
- Updated: 1987.04.16
- Defines: strfill()
-
- strfill(dest, len, fill) makes a string of fill-characters. The result
- string is of length == len. The des+len character is allways set to NULL.
- strfill() returns pointer to dest+len;
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-my_string strfill(my_string s,uint len,pchar fill)
-{
- while (len--) *s++ = fill;
- *(s) = '\0';
- return(s);
-} /* strfill */
diff --git a/ext/mysql/libmysql/string.c b/ext/mysql/libmysql/string.c
deleted file mode 100644
index cbf9f2ddc3..0000000000
--- a/ext/mysql/libmysql/string.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Code for handling strings with can grow dynamicly.
- Copyright Monty Program KB.
- By monty.
-*/
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
-my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str,
- uint init_alloc, uint alloc_increment)
-{
- uint length;
- DBUG_ENTER("init_dynamic_string");
-
- if (!alloc_increment)
- alloc_increment=128;
- length=1;
- if (init_str && (length= (uint) strlen(init_str)+1) < init_alloc)
- init_alloc=((length+alloc_increment-1)/alloc_increment)*alloc_increment;
- if (!init_alloc)
- init_alloc=alloc_increment;
-
- if (!(str->str=(char*) my_malloc(init_alloc,MYF(MY_WME))))
- DBUG_RETURN(TRUE);
- str->length=length-1;
- if (init_str)
- memcpy(str->str,init_str,length);
- str->max_length=init_alloc;
- str->alloc_increment=alloc_increment;
- DBUG_RETURN(FALSE);
-}
-
-
-my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str)
-{
- uint length;
- DBUG_ENTER("dynstr_set");
-
- if (init_str && (length= (uint) strlen(init_str)+1) > str->max_length)
- {
- str->max_length=((length+str->alloc_increment-1)/str->alloc_increment)*
- str->alloc_increment;
- if (!str->max_length)
- str->max_length=str->alloc_increment;
- if (!(str->str=(char*) my_realloc(str->str,str->max_length,MYF(MY_WME))))
- DBUG_RETURN(TRUE);
- }
- if (init_str)
- {
- str->length=length-1;
- memcpy(str->str,init_str,length);
- }
- else
- str->length=0;
- DBUG_RETURN(FALSE);
-}
-
-
-my_bool dynstr_realloc(DYNAMIC_STRING *str, ulong additional_size)
-{
- DBUG_ENTER("dynstr_realloc");
-
- if (!additional_size) DBUG_RETURN(FALSE);
- if (str->length + additional_size > str->max_length)
- {
- str->max_length=((str->length + additional_size+str->alloc_increment-1)/
- str->alloc_increment)*str->alloc_increment;
- if (!(str->str=(char*) my_realloc(str->str,str->max_length,MYF(MY_WME))))
- DBUG_RETURN(TRUE);
- }
- DBUG_RETURN(FALSE);
-}
-
-
-my_bool dynstr_append(DYNAMIC_STRING *str, const char *append)
-{
- return dynstr_append_mem(str,append,strlen(append));
-}
-
-
-my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
- uint length)
-{
- char *new_ptr;
- if (str->length+length >= str->max_length)
- {
- uint new_length=(str->length+length+str->alloc_increment)/
- str->alloc_increment;
- new_length*=str->alloc_increment;
- if (!(new_ptr=(char*) my_realloc(str->str,new_length,MYF(MY_WME))))
- return TRUE;
- str->str=new_ptr;
- str->max_length=new_length;
- }
- memcpy(str->str + str->length,append,length);
- str->length+=length;
- str->str[str->length]=0; /* Safety for C programs */
- return FALSE;
-}
-
-
-void dynstr_free(DYNAMIC_STRING *str)
-{
- if (str->str)
- {
- my_free(str->str,MYF(MY_WME));
- str->str=0;
- }
-}
diff --git a/ext/mysql/libmysql/strinstr.c b/ext/mysql/libmysql/strinstr.c
deleted file mode 100644
index ed165b9ce9..0000000000
--- a/ext/mysql/libmysql/strinstr.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : strinstr.c
- Author : Monty & David
- Updated: 1986.12.08
- Defines: strinstr()
-
- strinstr(src, pat) looks for an instance of pat in src. pat is not a
- regex(3) pattern, it is a literal string which must be matched exactly.
- The result 0 if the pattern was not found else it is the start char of
- the pattern counted from the beginning of the string, where the first
- char is 1.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-uint strinstr(reg1 const char *str,reg4 const char *search)
-{
- reg2 my_string i,j;
- my_string start = (my_string) str;
-
- skipp:
- while (*str != '\0')
- {
- if (*str++ == *search)
- {
- i=(my_string) str; j= (my_string) search+1;
- while (*j)
- if (*i++ != *j++) goto skipp;
- return ((uint) (str - start));
- }
- }
- return (0);
-}
diff --git a/ext/mysql/libmysql/strmake.c b/ext/mysql/libmysql/strmake.c
deleted file mode 100644
index 789b9c6be9..0000000000
--- a/ext/mysql/libmysql/strmake.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* File : strmake.c
- Author : Michael Widenius
- Updated: 20 Jul 1984
- Defines: strmake()
-
- strmake(dst,src,length) moves length characters, or until end, of src to
- dst and appends a closing NUL to dst.
- strmake() returns pointer to closing null;
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#ifdef BAD_STRING_COMPILER
-
-char *strmake(char *dst,const char *src,uint length)
-{
- reg1 char *res;
-
- if ((res=memccpy(dst,src,0,length)))
- return res-1;
- dst[length]=0;
- return dst+length;
-}
-
-#define strmake strmake_overlapp /* Use orginal for overlapping str */
-#endif
-
-char *strmake(register char *dst, register const char *src, uint length)
-{
- while (length--)
- if (! (*dst++ = *src++))
- return dst-1;
- *dst=0;
- return dst;
-}
diff --git a/ext/mysql/libmysql/strmov.c b/ext/mysql/libmysql/strmov.c
deleted file mode 100644
index 66e90a8d6c..0000000000
--- a/ext/mysql/libmysql/strmov.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- strmov(dst, src) moves all the characters of src (including the
- closing NUL) to dst, and returns a pointer to the new closing NUL in
- dst. The similar UNIX routine strcpy returns the old value of dst,
- which I have never found useful. strmov(strmov(dst,a),b) moves a//b
- into dst, which seems useful.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-#ifdef BAD_STRING_COMPILER
-#undef strmov
-#define strmov strmov_overlapp
-#endif
-
-#ifndef strmov
-
-#if !defined(MC68000) && !defined(DS90)
-
-char *strmov(register char *dst, register const char *src)
-{
- while ((*dst++ = *src++)) ;
- return dst-1;
-}
-
-#else
-
-char *strmov(dst, src)
- char *dst, *src;
-{
- asm(" movl 4(a7),a1 ");
- asm(" movl 8(a7),a0 ");
- asm(".L4: movb (a0)+,(a1)+ ");
- asm(" jne .L4 ");
- asm(" movl a1,d0 ");
- asm(" subql #1,d0 ");
-}
-
-#endif
-
-#endif /* strmov */
diff --git a/ext/mysql/libmysql/strnmov.c b/ext/mysql/libmysql/strnmov.c
deleted file mode 100644
index fd521fedea..0000000000
--- a/ext/mysql/libmysql/strnmov.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- strnmov(dst,src,length) moves length characters, or until end, of src to
- dst and appends a closing NUL to dst if src is shorter than length.
- The result is a pointer to the first NUL in dst, or is dst+n if dst was
- truncated.
-*/
-
-#include <global.h>
-#include "m_string.h"
-
-char *strnmov(register char *dst, register const char *src, uint n)
-{
- while (n-- != 0) {
- if (!(*dst++ = *src++)) {
- return (char*) dst-1;
- }
- }
- return dst;
-}
diff --git a/ext/mysql/libmysql/strto.c b/ext/mysql/libmysql/strto.c
deleted file mode 100644
index 0e1af5d2e7..0000000000
--- a/ext/mysql/libmysql/strto.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- strtol,strtoul,strtoll,strtoull
- convert string to long, unsigned long, long long or unsigned long long.
- strtoxx(char *src,char **ptr,int base)
- converts the string pointed to by src to an long of appropriate long and
- returnes it. It skips leading spaces and tabs (but not newlines, formfeeds,
- backspaces), then it accepts an optional sign and a sequence of digits
- in the specified radix.
- If the value of ptr is not (char **)NULL, a pointer to the character
- terminating the scan is returned in the location pointed to by ptr.
- Trailing spaces will NOT be skipped.
-
- If an error is detected, the result will be LONG_MIN, 0 or LONG_MAX,
- (or LONGLONG..) and errno will be set to
- EDOM if there are no digits
- ERANGE if the result would overflow.
- the ptr will be set to src.
- This file is based on the strtol from the the GNU C Library.
- it can be compiled with the UNSIGNED and/or LONGLONG flag set
-*/
-
-#include <global.h>
-#include "m_string.h"
-#include "m_ctype.h"
-#include "my_sys.h" /* defines errno */
-#include <errno.h>
-
-#ifdef MYSQL_LONGLONG
-#define UTYPE_MAX (~(ulonglong) 0)
-#define TYPE_MIN LONGLONG_MIN
-#define TYPE_MAX LONGLONG_MAX
-#define longtype longlong
-#define ulongtype ulonglong
-#ifdef UNSIGNED
-#define function ulongtype strtoull
-#else
-#define function longtype strtoll
-#endif
-#else
-#define UTYPE_MAX (ulong) ~0L
-#define TYPE_MIN LONG_MIN
-#define TYPE_MAX LONG_MAX
-#define longtype long
-#define ulongtype unsigned long
-#ifdef UNSIGNED
-#define function ulongtype strtoul
-#else
-#define function longtype strtol
-#endif
-#endif
-
-
-/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
- If BASE is 0 the base is determined by the presence of a leading
- zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
- If BASE is < 2 or > 36, it is reset to 10.
- If ENDPTR is not NULL, a pointer to the character after the last
- one converted is stored in *ENDPTR. */
-
-
-function (const char *nptr,char **endptr,int base)
-{
- int negative;
- register ulongtype cutoff;
- register unsigned int cutlim;
- register ulongtype i;
- register const char *s;
- register unsigned char c;
- const char *save;
- int overflow;
-
- if (base < 0 || base == 1 || base > 36)
- base = 10;
-
- s = nptr;
-
- /* Skip white space. */
- while (isspace (*s))
- ++s;
- if (*s == '\0')
- {
- goto noconv;
- }
-
- /* Check for a sign. */
- if (*s == '-')
- {
- negative = 1;
- ++s;
- }
- else if (*s == '+')
- {
- negative = 0;
- ++s;
- }
- else
- negative = 0;
-
- if (base == 16 && s[0] == '0' && toupper (s[1]) == 'X')
- s += 2;
-
- /* If BASE is zero, figure it out ourselves. */
- if (base == 0)
- {
- if (*s == '0')
- {
- if (toupper (s[1]) == 'X')
- {
- s += 2;
- base = 16;
- }
- else
- base = 8;
- }
- else
- base = 10;
- }
-
- /* Save the pointer so we can check later if anything happened. */
- save = s;
-
- cutoff = UTYPE_MAX / (unsigned long int) base;
- cutlim = (uint) (UTYPE_MAX % (unsigned long int) base);
-
- overflow = 0;
- i = 0;
- for (c = *s; c != '\0'; c = *++s)
- {
- if (isdigit (c))
- c -= '0';
- else if (isalpha (c))
- c = toupper (c) - 'A' + 10;
- else
- break;
- if (c >= base)
- break;
- /* Check for overflow. */
- if (i > cutoff || (i == cutoff && c > cutlim))
- overflow = 1;
- else
- {
- i *= (ulongtype) base;
- i += c;
- }
- }
-
- /* Check if anything actually happened. */
- if (s == save)
- goto noconv;
-
- /* Store in ENDPTR the address of one character
- past the last character we converted. */
- if (endptr != NULL)
- *endptr = (char *) s;
-
-#ifndef UNSIGNED
- /* Check for a value that is within the range of
- `unsigned long int', but outside the range of `long int'. */
- if (negative)
- {
- if (i > (ulongtype) TYPE_MIN)
- overflow = 1;
- }
- else if (i > (ulongtype) TYPE_MAX)
- overflow = 1;
-#endif
-
- if (overflow)
- {
- my_errno=ERANGE;
-#ifdef UNSIGNED
- return UTYPE_MAX;
-#else
- return negative ? TYPE_MIN : TYPE_MAX;
-#endif
- }
-
- /* Return the result of the appropriate sign. */
- return (negative ? -((longtype) i) : i);
-
-noconv:
- /* There was no number to convert. */
- my_errno=EDOM;
- if (endptr != NULL)
- *endptr = (char *) nptr;
- return 0L;
-}
diff --git a/ext/mysql/libmysql/strtoll.c b/ext/mysql/libmysql/strtoll.c
deleted file mode 100644
index 6acb8ff84d..0000000000
--- a/ext/mysql/libmysql/strtoll.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* This is defines strtoll() if neaded */
-
-#include <global.h>
-#include <m_string.h>
-#if !defined(HAVE_STRTOULL) && defined(HAVE_LONG_LONG)
-#define MYSQL_LONGLONG
-#include "strto.c"
-#endif
diff --git a/ext/mysql/libmysql/strtoull.c b/ext/mysql/libmysql/strtoull.c
deleted file mode 100644
index 8ab99fb0c2..0000000000
--- a/ext/mysql/libmysql/strtoull.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* This is defines strtoull() */
-
-#include <global.h>
-#include <m_string.h>
-#if !defined(HAVE_STRTOULL) && defined(HAVE_LONG_LONG)
-#define UNSIGNED
-#define MYSQL_LONGLONG
-#include "strto.c"
-#endif
diff --git a/ext/mysql/libmysql/strxmov.c b/ext/mysql/libmysql/strxmov.c
deleted file mode 100644
index 7ee1d303ee..0000000000
--- a/ext/mysql/libmysql/strxmov.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* File : strxmov.c
- Author : Richard A. O'Keefe.
- Updated: 25 may 1984
- Defines: strxmov()
-
- strxmov(dst, src1, ..., srcn, NullS)
- moves the concatenation of src1,...,srcn to dst, terminates it
- with a NUL character, and returns a pointer to the terminating NUL.
- It is just like strmov except that it concatenates multiple sources.
- Beware: the last argument should be the null character pointer.
- Take VERY great care not to omit it! Also be careful to use NullS
- and NOT to use 0, as on some machines 0 is not the same size as a
- character pointer, or not the same bit pattern as NullS.
-*/
-
-#include <global.h>
-#include "m_string.h"
-#include <stdarg.h>
-
-char *strxmov(char *dst,const char *src, ...)
-{
- va_list pvar;
-
- va_start(pvar,src);
- while (src != NullS) {
- while ((*dst++ = *src++)) ;
- dst--;
- src = va_arg(pvar, char *);
- }
- va_end(pvar);
- *dst = 0; /* there might have been no sources! */
- return dst;
-}
diff --git a/ext/mysql/libmysql/thr_alarm.h b/ext/mysql/libmysql/thr_alarm.h
deleted file mode 100644
index b1f0b3e43b..0000000000
--- a/ext/mysql/libmysql/thr_alarm.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Prototypes when using thr_alarm library functions */
-
-#ifndef _thr_alarm_h
-#define _thr_alarm_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef USE_ALARM_THREAD
-#define USE_ONE_SIGNAL_HAND /* One must call process_alarm */
-#endif
-#ifdef HAVE_LINUXTHREADS
-#define THR_CLIENT_ALARM SIGALRM
-#else
-#define THR_CLIENT_ALARM SIGUSR1
-#endif
-#ifdef HAVE_rts_threads
-#undef USE_ONE_SIGNAL_HAND
-#define USE_ALARM_THREAD
-#define THR_SERVER_ALARM SIGUSR1
-#else
-#define THR_SERVER_ALARM SIGALRM
-#endif
-
-#if defined(DONT_USE_THR_ALARM)
-
-#define USE_ALARM_THREAD
-#undef USE_ONE_SIGNAL_HAND
-
-typedef struct st_thr_alarm_entry
-{
- uint crono;
-} thr_alarm_entry;
-
-#define thr_alarm_init(A) (A)->crono=0
-#define thr_alarm_in_use(A) (A)->crono
-#define init_thr_alarm(A)
-#define thr_alarm_kill(A)
-#define end_thr_alarm()
-#define thr_alarm(A,B) (((A)->crono=1)-1)
-#define thr_got_alarm(A) (A)->crono
-#define thr_end_alarm(A)
-
-#else
-#if defined(__WIN__)
-typedef struct st_thr_alarm_entry
-{
- rf_SetTimer crono;
-} thr_alarm_entry;
-
-#elif defined(__EMX__)
-
-typedef struct st_thr_alarm_entry
-{
- uint crono;
- uint event;
-} thr_alarm_entry;
-
-#else /* System with posix threads */
-
-typedef int thr_alarm_entry;
-
-#define thr_got_alarm(thr_alarm) (**(thr_alarm))
-
-#endif /* __WIN__ */
-
-typedef thr_alarm_entry* thr_alarm_t;
-
-typedef struct st_alarm {
- ulong expire_time;
- thr_alarm_entry alarmed; /* set when alarm is due */
- pthread_t thread;
- my_bool malloced;
-} ALARM;
-
-#define thr_alarm_init(A) (*(A))=0
-#define thr_alarm_in_use(A) (*(A)!= 0)
-void init_thr_alarm(uint max_alarm);
-bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff);
-void thr_alarm_kill(pthread_t thread_id);
-void thr_end_alarm(thr_alarm_t *alarmed);
-void end_thr_alarm(void);
-sig_handler process_alarm(int);
-#ifndef thr_got_alarm
-bool thr_got_alarm(thr_alarm_t *alrm);
-#endif
-
-
-#endif /* DONT_USE_THR_ALARM */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _thr_alarm_h */
-
diff --git a/ext/mysql/libmysql/thr_mutex.c b/ext/mysql/libmysql/thr_mutex.c
deleted file mode 100644
index 7ec8bfb59a..0000000000
--- a/ext/mysql/libmysql/thr_mutex.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* This makes a wrapper for mutex handling to make it easier to debug mutex */
-
-#include <global.h>
-#if defined(HAVE_LINUXTHREADS) && !defined (__USE_UNIX98)
-#define __USE_UNIX98 /* To get rw locks under Linux */
-#endif
-#include <m_string.h>
-#if defined(THREAD) && defined(SAFE_MUTEX)
-#undef SAFE_MUTEX /* Avoid safe_mutex redefinitions */
-#include <my_pthread.h>
-
-#ifndef DO_NOT_REMOVE_THREAD_WRAPPERS
-/* Remove wrappers */
-#undef pthread_mutex_init
-#undef pthread_mutex_lock
-#undef pthread_mutex_unlock
-#undef pthread_mutex_destroy
-#undef pthread_cond_wait
-#undef pthread_cond_timedwait
-#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT
-#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b))
-#endif
-#endif /* DO_NOT_REMOVE_THREAD_WRAPPERS */
-
-int safe_mutex_init(safe_mutex_t *mp,
- const pthread_mutexattr_t *attr __attribute__((unused)))
-{
- bzero((char*) mp,sizeof(*mp));
- pthread_mutex_init(&mp->global,MY_MUTEX_INIT_ERRCHK);
- pthread_mutex_init(&mp->mutex,attr);
- return 0;
-}
-
-int safe_mutex_lock(safe_mutex_t *mp,const char *file, uint line)
-{
- int error;
- pthread_mutex_lock(&mp->global);
- if (mp->count > 0 && pthread_equal(pthread_self(),mp->thread))
- {
- fprintf(stderr,"safe_mutex: Trying to lock mutex at %s, line %d, when the mutex was already locked at %s, line %d\n",
- file,line,mp->file,mp->line);
- fflush(stderr);
- abort();
- }
- pthread_mutex_unlock(&mp->global);
- error=pthread_mutex_lock(&mp->mutex);
- if (error || (error=pthread_mutex_lock(&mp->global)))
- {
- fprintf(stderr,"Got error %d when trying to lock mutex at %s, line %d\n",
- error, file, line);
- fflush(stderr);
- abort();
- }
- if (mp->count++)
- {
- fprintf(stderr,"safe_mutex: Error in thread libray: Got mutex at %s, line %d more than 1 time\n", file,line);
- fflush(stderr);
- abort();
- }
- mp->thread=pthread_self();
- mp->file= (char*) file;
- mp->line=line;
- pthread_mutex_unlock(&mp->global);
- return error;
-}
-
-
-int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line)
-{
- int error;
- pthread_mutex_lock(&mp->global);
- if (mp->count == 0)
- {
- fprintf(stderr,"safe_mutex: Trying to unlock mutex that wasn't locked at %s, line %d\n Last used at %s, line: %d\n",
- file,line,mp->file ? mp->file : "",mp->line);
- fflush(stderr);
- abort();
- }
- if (!pthread_equal(pthread_self(),mp->thread))
- {
- fprintf(stderr,"safe_mutex: Trying to unlock mutex at %s, line %d that was locked by another thread at: %s, line: %d\n",
- file,line,mp->file,mp->line);
- fflush(stderr);
- abort();
- }
- mp->count--;
-#ifdef __WIN__
- pthread_mutex_unlock(&mp->mutex);
- error=0;
-#else
- error=pthread_mutex_unlock(&mp->mutex);
- if (error)
- {
- fprintf(stderr,"safe_mutex: Got error: %d when trying to unlock mutex at %s, line %d\n", error, file, line);
- fflush(stderr);
- abort();
- }
-#endif /* __WIN__ */
- pthread_mutex_unlock(&mp->global);
- return error;
-}
-
-
-int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp, const char *file,
- uint line)
-{
- int error;
- pthread_mutex_lock(&mp->global);
- if (mp->count == 0)
- {
- fprintf(stderr,"safe_mutex: Trying to cond_wait on a unlocked mutex at %s, line %d\n",file,line);
- fflush(stderr);
- abort();
- }
- if (!pthread_equal(pthread_self(),mp->thread))
- {
- fprintf(stderr,"safe_mutex: Trying to cond_wait on a mutex at %s, line %d that was locked by another thread at: %s, line: %d\n",
- file,line,mp->file,mp->line);
- fflush(stderr);
- abort();
- }
-
- if (mp->count-- != 1)
- {
- fprintf(stderr,"safe_mutex: Count was %d on locked mutex at %s, line %d\n",
- mp->count+1, file, line);
- fflush(stderr);
- abort();
- }
- pthread_mutex_unlock(&mp->global);
- error=pthread_cond_wait(cond,&mp->mutex);
- pthread_mutex_lock(&mp->global);
- if (error)
- {
- fprintf(stderr,"safe_mutex: Got error: %d when doing a safe_mutex_wait at %s, line %d\n", error, file, line);
- fflush(stderr);
- abort();
- }
- if (mp->count++)
- {
- fprintf(stderr,
- "safe_mutex: Count was %d in thread %lx when locking mutex at %s, line %d\n",
- mp->count-1, my_thread_id(), file, line);
- fflush(stderr);
- abort();
- }
- mp->thread=pthread_self();
- mp->file= (char*) file;
- mp->line=line;
- pthread_mutex_unlock(&mp->global);
- return error;
-}
-
-
-int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
- struct timespec *abstime,
- const char *file, uint line)
-{
- int error;
- pthread_mutex_lock(&mp->global);
- if (mp->count != 1 || !pthread_equal(pthread_self(),mp->thread))
- {
- fprintf(stderr,"safe_mutex: Trying to cond_wait at %s, line %d on a not hold mutex\n",file,line);
- fflush(stderr);
- abort();
- }
- mp->count--; /* Mutex will be released */
- pthread_mutex_unlock(&mp->global);
- error=pthread_cond_timedwait(cond,&mp->mutex,abstime);
-#ifdef EXTRA_DEBUG
- if (error && (error != EINTR && error != ETIMEDOUT))
- {
- fprintf(stderr,"safe_mutex: Got error: %d when doing a safe_mutex_timedwait at %s, line %d\n", error, file, line);
- }
-#endif
- pthread_mutex_lock(&mp->global);
- if (mp->count++)
- {
- fprintf(stderr,
- "safe_mutex: Count was %d in thread %lx when locking mutex at %s, line %d (error: %d)\n",
- mp->count-1, my_thread_id(), file, line, error);
- fflush(stderr);
- abort();
- }
- mp->thread=pthread_self();
- mp->file= (char*) file;
- mp->line=line;
- pthread_mutex_unlock(&mp->global);
- return error;
-}
-
-int safe_mutex_destroy(safe_mutex_t *mp, const char *file, uint line)
-{
- int error=0;
- if (mp->count != 0)
- {
- fprintf(stderr,"safe_mutex: Trying to destroy a mutex that was locked at %s, line %d at %s, line %d\n",
- mp->file,mp->line, file, line);
- fflush(stderr);
- abort();
- }
-#ifdef __WIN__
- pthread_mutex_destroy(&mp->global);
- pthread_mutex_destroy(&mp->mutex);
-#else
- if (pthread_mutex_destroy(&mp->global))
- error=1;
- if (pthread_mutex_destroy(&mp->mutex))
- error=1;
-#endif
- return error;
-}
-
-#endif /* THREAD && SAFE_MUTEX */
diff --git a/ext/mysql/libmysql/typelib.c b/ext/mysql/libmysql/typelib.c
deleted file mode 100644
index 0fd4415b2c..0000000000
--- a/ext/mysql/libmysql/typelib.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/* Functions to handle typelib */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#include <m_ctype.h>
-
-/***************************************************************************
-** Search after a fieldtype. Endspace in x is not compared.
-** If part, uniq field is found and full_name == 0 then x is expanded
-** to full field.
-** full_name has the following bit values:
-** If & 1 accept only whole names
-** If & 2 don't expand if half field
-** If & 4 allow #number# as type
-****************************************************************************/
-
-int find_type(my_string x, TYPELIB *typelib, uint full_name)
-{
- int find,pos,findpos;
- reg1 my_string i;
- reg2 const char *j;
- DBUG_ENTER("find_type");
- DBUG_PRINT("enter",("x: '%s' lib: %lx",x,typelib));
-
- if (!typelib->count)
- {
- DBUG_PRINT("exit",("no count"));
- DBUG_RETURN(0);
- }
- LINT_INIT(findpos);
- find=0;
- for (pos=0 ; (j=typelib->type_names[pos]) ; pos++)
- {
- for (i=x ; *i && toupper(*i) == toupper(*j) ; i++, j++) ;
- if (! *j)
- {
- while (*i == ' ')
- i++; /* skipp_end_space */
- if (! *i)
- DBUG_RETURN(pos+1);
- }
- if (! *i && (!*j || !(full_name & 1)))
- {
- find++;
- findpos=pos;
- }
- }
- if (find == 0 && (full_name & 4) && x[0] == '#' && strend(x)[-1] == '#' &&
- (findpos=atoi(x+1)-1) >= 0 && (uint) findpos < typelib->count)
- find=1;
- else if (find == 0 || ! x[0])
- {
- DBUG_PRINT("exit",("Couldn't find type"));
- DBUG_RETURN(0);
- }
- else if (find != 1 || (full_name & 1))
- {
- DBUG_PRINT("exit",("Too many possybilities"));
- DBUG_RETURN(-1);
- }
- if (!(full_name & 2))
- (void) strmov(x,typelib->type_names[findpos]);
- DBUG_RETURN(findpos+1);
-} /* find_type */
-
-
- /* Get name of type nr 'nr' */
- /* Warning first type is 1, 0 = empty field */
-
-void make_type(register my_string to, register uint nr, register TYPELIB *typelib)
-{
- DBUG_ENTER("make_type");
- if (!nr)
- to[0]=0;
- else
- (void) strmov(to,get_type(typelib,nr-1));
- DBUG_VOID_RETURN;
-} /* make_type */
-
-
- /* Get type */
- /* Warning first type is 0 */
-
-const char *get_type(TYPELIB *typelib, uint nr)
-{
- if (nr < (uint) typelib->count && typelib->type_names)
- return(typelib->type_names[nr]);
- return "?";
-}
diff --git a/ext/mysql/libmysql/update_sources b/ext/mysql/libmysql/update_sources
deleted file mode 100755
index 87547e483e..0000000000
--- a/ext/mysql/libmysql/update_sources
+++ /dev/null
@@ -1,103 +0,0 @@
-#! /usr/bin/perl -w
-
-# Maybe I should have used PHP instead? ;)
-
-use strict;
-$| = 1;
-
--f "libmysql.c" or die "$0 must be run from the libmysql directory\n";
-
-my $command = shift || usage();
-$command =~ /^--(?:update|huh|restore)$/ or usage();
-
-my $from = shift || '/my/mysql';
-my @source_dirs = qw/dbug strings mysys libmysql include/;
-my $source_re = qr/\.(?:cc?|h)$/;
-my %skip = (
- 'ctype_autoconf.c' => 1, # PHP uses a pre-made one
- 'ctype_extra_sources.c' => 1, # same here
- 'my_config.h' => 1, # we use php_config.h
-);
-
-opendir D, "."
- or die "can't opendir .: $!\n";
-my @files = grep { /$source_re/ and !$skip{$_} } readdir D;
-closedir D;
-
-if ($command eq '--restore')
-{
- foreach (@files)
- {
- -f "$_.orig" and
- system("mv -f $_.orig $_") and die "can't restore $_: $!\n";
- }
- exit 0;
-}
-
-if ($command eq '--huh')
-{
- diff_files();
- exit 0;
-}
-
-my %sources;
-foreach my $d (@source_dirs)
-{
- opendir D, "$from/$d" or die "opendir $from/$d: $!\n";
- foreach (grep { /$source_re/ } readdir D)
- {
- $sources{$_} ||= "$d/$_";
- }
- closedir D;
-}
-
-foreach my $f (@files)
-{
- my $s = $sources{$f} or die "can't find source file for $f\n";
- unlink "$f.orig";
- system("mv $f $f.orig") and die "can't move $f: $!\n";
- #print ">> ", scalar(`ls -l $from/$s`), "\n";
- print ">> $s\n";
- system("cp $from/$s $f") and die "can't copy $from/$s: $!\n";
- #print "]] ", scalar(`ls -l $f`), "\n";
-}
-
-system("chmod u+w @files") and die "can't set perms on files: $!\n";
-system("./fix_copyright @files") and die "can't fix copyright: $!\n";
-diff_files();
-
-exit 0;
-
-
-sub usage
-{
- die <<"EOF";
-usage: $0 --update [mysql-source-dir]
- $0 --huh
- $0 --restore
-
- Typical use is:
- \$ $0 --update 2>&1 > /tmp/php-update.diff
- \$ @{[$ENV{EDITOR}||'vi']} /tmp/php-update.diff #does it look okay?
- \$ Monkey around a bit
- \$ cvs diff -u | less # does this look okay?
- \$ rm *.orig
-EOF
-}
-
-sub diff_files {
- foreach my $f (@files)
- {
- if (!-f "$f.orig" or !system("diff -u $f.orig $f"))
- {
- print STDERR "SAME: $f\n";
- unlink "$f.orig";
- }
- else
- {
- print STDERR "DIFF: $f\n";
- $f eq 'config-win.h' and
- print STDERR "/n/nDon't forget to undefine HAVE_COMPRESS in $f/n/n/n";
- }
- }
-}
diff --git a/ext/mysql/libmysql/violite.c b/ext/mysql/libmysql/violite.c
deleted file mode 100644
index e73efb7e8d..0000000000
--- a/ext/mysql/libmysql/violite.c
+++ /dev/null
@@ -1,411 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- Note that we can't have assertion on file descriptors; The reason for
- this is that during mysql shutdown, another thread can close a file
- we are working on. In this case we should just return read errors from
- the file descriptior.
-*/
-
-#include <global.h>
-
-#ifndef HAVE_VIO /* is Vio suppored by the Vio lib ? */
-
-#include <errno.h>
-#include <assert.h>
-#include <violite.h>
-#include <my_sys.h>
-#include <my_net.h>
-#include <m_string.h>
-#ifdef HAVE_POLL
-#include <sys/poll.h>
-#endif
-
-#if defined(__EMX__)
-#include <sys/ioctl.h>
-#define ioctlsocket ioctl
-#endif /* defined(__EMX__) */
-
-#if defined(MSDOS) || defined(__WIN__)
-#ifdef __WIN__
-#undef errno
-#undef EINTR
-#undef EAGAIN
-#define errno WSAGetLastError()
-#define EINTR WSAEINTR
-#define EAGAIN WSAEINPROGRESS
-#endif /* __WIN__ */
-#define O_NONBLOCK 1 /* For emulation of fcntl() */
-#endif
-#ifndef EWOULDBLOCK
-#define EWOULDBLOCK EAGAIN
-#endif
-
-#ifndef __WIN__
-#define HANDLE void *
-#endif
-
-struct st_vio
-{
- my_socket sd; /* my_socket - real or imaginary */
- HANDLE hPipe;
- my_bool localhost; /* Are we from localhost? */
- int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */
- struct sockaddr_in local; /* Local internet address */
- struct sockaddr_in remote; /* Remote internet address */
- enum enum_vio_type type; /* Type of connection */
- char desc[30]; /* String description */
-};
-
-typedef void *vio_ptr;
-typedef char *vio_cstring;
-
-/*
- * Helper to fill most of the Vio* with defaults.
- */
-
-static void vio_reset(Vio* vio, enum enum_vio_type type,
- my_socket sd, HANDLE hPipe,
- my_bool localhost)
-{
- bzero((char*) vio, sizeof(*vio));
- vio->type = type;
- vio->sd = sd;
- vio->hPipe = hPipe;
- vio->localhost= localhost;
-}
-
-/* Open the socket or TCP/IP connection and read the fnctl() status */
-
-Vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost)
-{
- Vio *vio;
- DBUG_ENTER("vio_new");
- DBUG_PRINT("enter", ("sd=%d", sd));
- if ((vio = (Vio*) my_malloc(sizeof(*vio),MYF(MY_WME))))
- {
- vio_reset(vio, type, sd, 0, localhost);
- sprintf(vio->desc,
- (vio->type == VIO_TYPE_SOCKET ? "socket (%d)" : "TCP/IP (%d)"),
- vio->sd);
-#if !defined(___WIN__) && !defined(__EMX__)
-#if !defined(NO_FCNTL_NONBLOCK)
- vio->fcntl_mode = fcntl(sd, F_GETFL);
-#endif
-#else /* !defined(__WIN__) && !defined(__EMX__) */
- {
- /* set to blocking mode by default */
- ulong arg=0, r;
- r = ioctlsocket(vio->sd,FIONBIO,(void*) &arg, sizeof(arg));
- }
-#endif
- }
- DBUG_RETURN(vio);
-}
-
-
-#ifdef __WIN__
-
-Vio *vio_new_win32pipe(HANDLE hPipe)
-{
- Vio *vio;
- DBUG_ENTER("vio_new_handle");
- if ((vio = (Vio*) my_malloc(sizeof(Vio),MYF(MY_WME))))
- {
- vio_reset(vio, VIO_TYPE_NAMEDPIPE, 0, hPipe, TRUE);
- strmov(vio->desc, "named pipe");
- }
- DBUG_RETURN(vio);
-}
-
-#endif
-
-void vio_delete(Vio * vio)
-{
- /* It must be safe to delete null pointers. */
- /* This matches the semantics of C++'s delete operator. */
- if (vio)
- {
- if (vio->type != VIO_CLOSED)
- vio_close(vio);
- my_free((gptr) vio,MYF(0));
- }
-}
-
-int vio_errno(Vio *vio __attribute__((unused)))
-{
- return errno; /* On Win32 this mapped to WSAGetLastError() */
-}
-
-
-int vio_read(Vio * vio, gptr buf, int size)
-{
- int r;
- DBUG_ENTER("vio_read");
- DBUG_PRINT("enter", ("sd=%d, buf=%p, size=%d", vio->sd, buf, size));
-#ifdef __WIN__
- if (vio->type == VIO_TYPE_NAMEDPIPE)
- {
- DWORD length;
- if (!ReadFile(vio->hPipe, buf, size, &length, NULL))
- DBUG_RETURN(-1);
- DBUG_RETURN(length);
- }
- r = recv(vio->sd, buf, size,0);
-#else
- errno=0; /* For linux */
- r = read(vio->sd, buf, size);
-#endif /* __WIN__ */
-#ifndef DBUG_OFF
- if (r < 0)
- {
- DBUG_PRINT("error", ("Got error %d during read",errno));
- }
-#endif /* DBUG_OFF */
- DBUG_PRINT("exit", ("%d", r));
- DBUG_RETURN(r);
-}
-
-
-int vio_write(Vio * vio, const gptr buf, int size)
-{
- int r;
- DBUG_ENTER("vio_write");
- DBUG_PRINT("enter", ("sd=%d, buf=%p, size=%d", vio->sd, buf, size));
-#ifdef __WIN__
- if ( vio->type == VIO_TYPE_NAMEDPIPE)
- {
- DWORD length;
- if (!WriteFile(vio->hPipe, (char*) buf, size, &length, NULL))
- DBUG_RETURN(-1);
- DBUG_RETURN(length);
- }
- r = send(vio->sd, buf, size,0);
-#else
- r = write(vio->sd, buf, size);
-#endif /* __WIN__ */
-#ifndef DBUG_OFF
- if (r < 0)
- {
- DBUG_PRINT("error", ("Got error on write: %d",errno));
- }
-#endif /* DBUG_OFF */
- DBUG_PRINT("exit", ("%d", r));
- DBUG_RETURN(r);
-}
-
-
-int vio_blocking(Vio * vio, my_bool set_blocking_mode)
-{
- int r=0;
- DBUG_ENTER("vio_blocking");
- DBUG_PRINT("enter", ("set_blocking_mode: %d", (int) set_blocking_mode));
-
-#if !defined(___WIN__) && !defined(__EMX__)
-#if !defined(NO_FCNTL_NONBLOCK)
-
- if (vio->sd >= 0)
- {
- int old_fcntl=vio->fcntl_mode;
- if (set_blocking_mode)
- vio->fcntl_mode &= ~O_NONBLOCK; /* clear bit */
- else
- vio->fcntl_mode |= O_NONBLOCK; /* set bit */
- if (old_fcntl != vio->fcntl_mode)
- r = fcntl(vio->sd, F_SETFL, vio->fcntl_mode);
- }
-#endif /* !defined(NO_FCNTL_NONBLOCK) */
-#else /* !defined(__WIN__) && !defined(__EMX__) */
-#ifndef __EMX__
- if (vio->type != VIO_TYPE_NAMEDPIPE)
-#endif
- {
- ulong arg;
- int old_fcntl=vio->fcntl_mode;
- if (set_blocking_mode)
- {
- arg = 0;
- vio->fcntl_mode &= ~O_NONBLOCK; /* clear bit */
- }
- else
- {
- arg = 1;
- vio->fcntl_mode |= O_NONBLOCK; /* set bit */
- }
- if (old_fcntl != vio->fcntl_mode)
- r = ioctlsocket(vio->sd,FIONBIO,(void*) &arg, sizeof(arg));
- }
-#endif /* !defined(__WIN__) && !defined(__EMX__) */
- DBUG_RETURN(r);
-}
-
-my_bool
-vio_is_blocking(Vio * vio)
-{
- my_bool r;
- DBUG_ENTER("vio_is_blocking");
- r = !(vio->fcntl_mode & O_NONBLOCK);
- DBUG_PRINT("exit", ("%d", (int) r));
- DBUG_RETURN(r);
-}
-
-
-int vio_fastsend(Vio * vio __attribute__((unused)))
-{
- int r=0;
- DBUG_ENTER("vio_fastsend");
-
-#ifdef IPTOS_THROUGHPUT
- {
-#ifndef __EMX__
- int tos = IPTOS_THROUGHPUT;
- if (!setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos)))
-#endif /* !__EMX__ */
- {
- int nodelay = 1;
- if (setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (void *) &nodelay,
- sizeof(nodelay))) {
- DBUG_PRINT("warning",
- ("Couldn't set socket option for fast send"));
- r= -1;
- }
- }
- }
-#endif /* IPTOS_THROUGHPUT */
- DBUG_PRINT("exit", ("%d", r));
- DBUG_RETURN(r);
-}
-
-int vio_keepalive(Vio* vio, my_bool set_keep_alive)
-{
- int r=0;
- uint opt = 0;
- DBUG_ENTER("vio_keepalive");
- DBUG_PRINT("enter", ("sd=%d, set_keep_alive=%d", vio->sd, (int)
- set_keep_alive));
- if (vio->type != VIO_TYPE_NAMEDPIPE)
- {
- if (set_keep_alive)
- opt = 1;
- r = setsockopt(vio->sd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt,
- sizeof(opt));
- }
- DBUG_RETURN(r);
-}
-
-
-my_bool
-vio_should_retry(Vio * vio __attribute__((unused)))
-{
- int en = errno;
- return en == EAGAIN || en == EINTR || en == EWOULDBLOCK;
-}
-
-
-int vio_close(Vio * vio)
-{
- int r;
- DBUG_ENTER("vio_close");
-#ifdef __WIN__
- if (vio->type == VIO_TYPE_NAMEDPIPE)
- {
-#if defined(__NT__) && defined(MYSQL_SERVER)
- CancelIo(vio->hPipe);
- DisconnectNamedPipe(vio->hPipe);
-#endif
- r=CloseHandle(vio->hPipe);
- }
- else if (vio->type != VIO_CLOSED)
-#endif /* __WIN__ */
- {
- r=0;
- if (shutdown(vio->sd,2))
- r= -1;
- if (closesocket(vio->sd))
- r= -1;
- }
- if (r)
- {
- DBUG_PRINT("error", ("close() failed, error: %d",errno));
- /* FIXME: error handling (not critical for MySQL) */
- }
- vio->type= VIO_CLOSED;
- vio->sd= -1;
- DBUG_RETURN(r);
-}
-
-
-const char *vio_description(Vio * vio)
-{
- return vio->desc;
-}
-
-enum enum_vio_type vio_type(Vio* vio)
-{
- return vio->type;
-}
-
-my_socket vio_fd(Vio* vio)
-{
- return vio->sd;
-}
-
-
-my_bool vio_peer_addr(Vio * vio, char *buf)
-{
- DBUG_ENTER("vio_peer_addr");
- DBUG_PRINT("enter", ("sd=%d", vio->sd));
- if (vio->localhost)
- {
- strmov(buf,"127.0.0.1");
- }
- else
- {
- size_socket addrLen = sizeof(struct sockaddr);
- if (getpeername(vio->sd, (struct sockaddr *) (& (vio->remote)),
- &addrLen) != 0)
- {
- DBUG_PRINT("exit", ("getpeername, error: %d", errno));
- DBUG_RETURN(1);
- }
- my_inet_ntoa(vio->remote.sin_addr,buf);
- }
- DBUG_PRINT("exit", ("addr=%s", buf));
- DBUG_RETURN(0);
-}
-
-
-void vio_in_addr(Vio *vio, struct in_addr *in)
-{
- DBUG_ENTER("vio_in_addr");
- if (vio->localhost)
- bzero((char*) in, sizeof(*in)); /* This should never be executed */
- else
- *in=vio->remote.sin_addr;
- DBUG_VOID_RETURN;
-}
-
-
-/* Return 0 if there is data to be read */
-
-my_bool vio_poll_read(Vio *vio,uint timeout)
-{
-#ifndef HAVE_POLL
- return 0;
-#else
- struct pollfd fds;
- int res;
- DBUG_ENTER("vio_poll");
- fds.fd=vio->sd;
- fds.events=POLLIN;
- fds.revents=0;
- if ((res=poll(&fds,1,(int) timeout*1000)) <= 0)
- {
- DBUG_RETURN(res < 0 ? 0 : 1); /* Don't return 1 on errors */
- }
- DBUG_RETURN(fds.revents & POLLIN ? 0 : 1);
-#endif
-}
-
-#endif /* HAVE_VIO */
diff --git a/ext/mysql/libmysql/violite.h b/ext/mysql/libmysql/violite.h
deleted file mode 100644
index e764ca02bd..0000000000
--- a/ext/mysql/libmysql/violite.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/*
- * Vio Lite.
- * Purpose: include file for Vio that will work with C and C++
- */
-
-#ifndef vio_violite_h_
-#define vio_violite_h_
-
-#include "my_net.h" /* needed because of struct in_addr */
-
-#ifdef HAVE_VIO
-#include <Vio.h> /* Full VIO interface */
-#else
-
-/* Simple vio interface in C; The functions are implemented in violite.c */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#ifndef Vio_defined
-#define Vio_defined
-struct st_vio; /* Only C */
-typedef struct st_vio Vio;
-#endif
-
-enum enum_vio_type { VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET,
- VIO_TYPE_NAMEDPIPE, VIO_TYPE_SSL};
-
-Vio* vio_new(my_socket sd,
- enum enum_vio_type type,
- my_bool localhost);
-#ifdef __WIN__
-Vio* vio_new_win32pipe(HANDLE hPipe);
-#endif
-void vio_delete(Vio* vio);
-
-/*
- * vio_read and vio_write should have the same semantics
- * as read(2) and write(2).
- */
-int vio_read( Vio* vio,
- gptr buf, int size);
-int vio_write( Vio* vio,
- const gptr buf,
- int size);
-/*
- * Whenever the socket is set to blocking mode or not.
- */
-int vio_blocking( Vio* vio,
- my_bool onoff);
-my_bool vio_is_blocking( Vio* vio);
-/*
- * setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible.
- */
- int vio_fastsend( Vio* vio);
-/*
- * setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible.
- */
-int vio_keepalive( Vio* vio,
- my_bool onoff);
-/*
- * Whenever we should retry the last read/write operation.
- */
-my_bool vio_should_retry( Vio* vio);
-/*
- * When the workday is over...
- */
-int vio_close( Vio* vio);
-/*
- * Short text description of the socket for those, who are curious..
- */
-const char* vio_description( Vio* vio);
-
-/* Return the type of the connection */
- enum enum_vio_type vio_type(Vio* vio);
-
-/* Return last error number */
-int vio_errno(Vio *vio);
-
-/* Get socket number */
-my_socket vio_fd(Vio *vio);
-
-/*
- * Remote peer's address and name in text form.
- */
-my_bool vio_peer_addr(Vio * vio, char *buf);
-
-/* Remotes in_addr */
-
-void vio_in_addr(Vio *vio, struct in_addr *in);
-
- /* Return 1 if there is data to be read */
-my_bool vio_poll_read(Vio *vio,uint timeout);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* HAVE_VIO */
-#endif /* vio_violite_h_ */
diff --git a/ext/mysql/mysql.dsp b/ext/mysql/mysql.dsp
deleted file mode 100644
index 896de36309..0000000000
--- a/ext/mysql/mysql.dsp
+++ /dev/null
@@ -1,171 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mysql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mysql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mysql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mysql.mak" CFG="mysql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mysql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mysql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4nts.lib /nologo /dll /machine:I386 /out:"Release/php_mysql.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "mysql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4nts_debug.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_mysql.dll" /pdbtype:sept /libpath:"..\..\..\MySQL\lib\Debug" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "mysql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll /debug /machine:I386 /out:"Debug_TS/php_mysql.dll" /pdbtype:sept /libpath:"..\..\..\MySQL\lib\Debug" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "mysql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll /machine:I386 /out:"Release_TS/php_mysql.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mysql - Win32 Release"
-# Name "mysql - Win32 Debug"
-# Name "mysql - Win32 Debug_TS"
-# Name "mysql - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_mysql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mysql.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\Readme_w32.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
deleted file mode 100644
index da12b4091a..0000000000
--- a/ext/mysql/php_mysql.c
+++ /dev/null
@@ -1,2288 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-/* TODO:
- *
- * ? Safe mode implementation
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_mysql.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-
-#if HAVE_MYSQL
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#define signal(a, b) NULL
-#else
-#include "build-defs.h"
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <netdb.h>
-#include <netinet/in.h>
-#endif
-
-#ifndef HAVE_USHORT
-#undef ushort
-typedef unsigned short ushort;
-#endif
-
-/* True globals, no need for thread safety */
-static int le_result, le_link, le_plink;
-
-#include "php_ini.h"
-
-# include <mysql.h>
-
-#ifdef HAVE_MYSQL_REAL_CONNECT
-# ifdef HAVE_ERRMSG_H
-# include <errmsg.h>
-# endif
-#endif
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-#if MYSQL_VERSION_ID > 32199
-#define mysql_row_length_type unsigned long
-#define HAVE_MYSQL_ERRNO
-#else
-#define mysql_row_length_type unsigned int
-# ifdef mysql_errno
-# define HAVE_MYSQL_ERRNO
-# endif
-#endif
-
-#if MYSQL_VERSION_ID >= 32032
-#define HAVE_GETINFO_FUNCS
-#endif
-
-#if MYSQL_VERSION_ID > 32133 || defined(FIELD_TYPE_TINY)
-#define MYSQL_HAS_TINY
-#endif
-
-#if MYSQL_VERSION_ID >= 32200
-#define MYSQL_HAS_YEAR
-#endif
-
-#define MYSQL_ASSOC 1<<0
-#define MYSQL_NUM 1<<1
-#define MYSQL_BOTH (MYSQL_ASSOC|MYSQL_NUM)
-
-#define MYSQL_USE_RESULT 0
-#define MYSQL_STORE_RESULT 1
-
-#if MYSQL_VERSION_ID < 32223
-#define PHP_MYSQL_VALID_RESULT(mysql) \
- (mysql_num_fields(mysql)>0)
-#else
-#define PHP_MYSQL_VALID_RESULT(mysql) \
- (mysql_field_count(mysql)>0)
-#endif
-
-typedef struct _php_mysql_conn {
- MYSQL conn;
- int active_result_id;
-} php_mysql_conn;
-
-
-/* {{{ mysql_functions[]
- */
-function_entry mysql_functions[] = {
- PHP_FE(mysql_connect, NULL)
- PHP_FE(mysql_pconnect, NULL)
- PHP_FE(mysql_close, NULL)
- PHP_FE(mysql_select_db, NULL)
-#if MYSQL_VERSION_ID < 40000
- PHP_FE(mysql_create_db, NULL)
- PHP_FE(mysql_drop_db, NULL)
-#endif
- PHP_FE(mysql_query, NULL)
- PHP_FE(mysql_unbuffered_query, NULL)
- PHP_FE(mysql_db_query, NULL)
- PHP_FE(mysql_list_dbs, NULL)
- PHP_FE(mysql_list_tables, NULL)
- PHP_FE(mysql_list_fields, NULL)
- PHP_FE(mysql_list_processes, NULL)
- PHP_FE(mysql_error, NULL)
-#ifdef HAVE_MYSQL_ERRNO
- PHP_FE(mysql_errno, NULL)
-#endif
- PHP_FE(mysql_affected_rows, NULL)
- PHP_FE(mysql_insert_id, NULL)
- PHP_FE(mysql_result, NULL)
- PHP_FE(mysql_num_rows, NULL)
- PHP_FE(mysql_num_fields, NULL)
- PHP_FE(mysql_fetch_row, NULL)
- PHP_FE(mysql_fetch_array, NULL)
- PHP_FE(mysql_fetch_assoc, NULL)
- PHP_FE(mysql_fetch_object, NULL)
- PHP_FE(mysql_data_seek, NULL)
- PHP_FE(mysql_fetch_lengths, NULL)
- PHP_FE(mysql_fetch_field, NULL)
- PHP_FE(mysql_field_seek, NULL)
- PHP_FE(mysql_free_result, NULL)
- PHP_FE(mysql_field_name, NULL)
- PHP_FE(mysql_field_table, NULL)
- PHP_FE(mysql_field_len, NULL)
- PHP_FE(mysql_field_type, NULL)
- PHP_FE(mysql_field_flags, NULL)
- PHP_FE(mysql_escape_string, NULL)
- PHP_FE(mysql_real_escape_string, NULL)
- PHP_FE(mysql_stat, NULL)
- PHP_FE(mysql_thread_id, NULL)
- PHP_FE(mysql_character_set_name, NULL)
- PHP_FE(mysql_ping, NULL)
-#ifdef HAVE_GETINFO_FUNCS
- PHP_FE(mysql_get_client_info, NULL)
- PHP_FE(mysql_get_host_info, NULL)
- PHP_FE(mysql_get_proto_info, NULL)
- PHP_FE(mysql_get_server_info, NULL)
-#endif
-
- PHP_FE(mysql_info, NULL)
-
- /* for downwards compatability */
- PHP_FALIAS(mysql, mysql_db_query, NULL)
- PHP_FALIAS(mysql_fieldname, mysql_field_name, NULL)
- PHP_FALIAS(mysql_fieldtable, mysql_field_table, NULL)
- PHP_FALIAS(mysql_fieldlen, mysql_field_len, NULL)
- PHP_FALIAS(mysql_fieldtype, mysql_field_type, NULL)
- PHP_FALIAS(mysql_fieldflags, mysql_field_flags, NULL)
- PHP_FALIAS(mysql_selectdb, mysql_select_db, NULL)
-#if MYSQL_VERSION_ID < 40000
- PHP_FALIAS(mysql_createdb, mysql_create_db, NULL)
- PHP_FALIAS(mysql_dropdb, mysql_drop_db, NULL)
-#endif
- PHP_FALIAS(mysql_freeresult, mysql_free_result, NULL)
- PHP_FALIAS(mysql_numfields, mysql_num_fields, NULL)
- PHP_FALIAS(mysql_numrows, mysql_num_rows, NULL)
- PHP_FALIAS(mysql_listdbs, mysql_list_dbs, NULL)
- PHP_FALIAS(mysql_listtables, mysql_list_tables, NULL)
- PHP_FALIAS(mysql_listfields, mysql_list_fields, NULL)
- PHP_FALIAS(mysql_db_name, mysql_result, NULL)
- PHP_FALIAS(mysql_dbname, mysql_result, NULL)
- PHP_FALIAS(mysql_tablename, mysql_result, NULL)
- PHP_FALIAS(mysql_table_name, mysql_result, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ mysql_module_entry
- */
-zend_module_entry mysql_module_entry = {
- STANDARD_MODULE_HEADER,
- "mysql",
- mysql_functions,
- ZEND_MODULE_STARTUP_N(mysql),
- PHP_MSHUTDOWN(mysql),
- PHP_RINIT(mysql),
- PHP_RSHUTDOWN(mysql),
- PHP_MINFO(mysql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(mysql)
-
-#ifdef COMPILE_DL_MYSQL
-ZEND_GET_MODULE(mysql)
-#endif
-
-void timeout(int sig);
-
-#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING, "MySQL: A link to the server could not be established"); RETURN_FALSE; } }
-
-/* {{{ _free_mysql_result
- * This wrapper is required since mysql_free_result() returns an integer, and
- * thus, cannot be used directly
- */
-static void _free_mysql_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- MYSQL_RES *mysql_result = (MYSQL_RES *)rsrc->ptr;
-
- mysql_free_result(mysql_result);
-}
-/* }}} */
-
-/* {{{ php_mysql_set_default_link
- */
-static void php_mysql_set_default_link(int id TSRMLS_DC)
-{
- if (MySG(default_link)!=-1) {
- zend_list_delete(MySG(default_link));
- }
- MySG(default_link) = id;
- zend_list_addref(id);
-}
-/* }}} */
-
-/* {{{ _close_mysql_link
- */
-static void _close_mysql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_mysql_conn *link = (php_mysql_conn *)rsrc->ptr;
- void (*handler) (int);
-
- handler = signal(SIGPIPE, SIG_IGN);
- mysql_close(&link->conn);
- signal(SIGPIPE, handler);
- efree(link);
- MySG(num_links)--;
-}
-/* }}} */
-
-/* {{{ _close_mysql_plink
- */
-static void _close_mysql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_mysql_conn *link = (php_mysql_conn *)rsrc->ptr;
- void (*handler) (int);
-
- handler = signal(SIGPIPE, SIG_IGN);
- mysql_close(&link->conn);
- signal(SIGPIPE, handler);
-
- free(link);
- MySG(num_persistent)--;
- MySG(num_links)--;
-}
-/* }}} */
-
-/* {{{ PHP_INI_MH
- */
-static PHP_INI_MH(OnMySQLPort)
-{
- if (new_value==NULL) { /* default port */
-#ifndef PHP_WIN32
- struct servent *serv_ptr;
- char *env;
-
- MySG(default_port) = MYSQL_PORT;
- if ((serv_ptr = getservbyname("mysql", "tcp"))) {
- MySG(default_port) = (uint) ntohs((ushort) serv_ptr->s_port);
- }
- if ((env = getenv("MYSQL_TCP_PORT"))) {
- MySG(default_port) = (uint) atoi(env);
- }
-#else
- MySG(default_port) = MYSQL_PORT;
-#endif
- } else {
- MySG(default_port) = atoi(new_value);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_INI */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("mysql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY_EX("mysql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_mysql_globals, mysql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mysql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_mysql_globals, mysql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("mysql.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, zend_mysql_globals, mysql_globals)
- PHP_INI_ENTRY("mysql.default_port", NULL, PHP_INI_ALL, OnMySQLPort)
- STD_PHP_INI_ENTRY("mysql.default_socket", NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_socket, zend_mysql_globals, mysql_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_mysql_init_globals
- */
-static void php_mysql_init_globals(zend_mysql_globals *mysql_globals)
-{
- mysql_globals->num_persistent = 0;
- mysql_globals->default_socket = NULL;
- mysql_globals->default_host = NULL;
- mysql_globals->default_user = NULL;
- mysql_globals->default_password = NULL;
- mysql_globals->connect_errno = 0;
- mysql_globals->connect_error = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-ZEND_MODULE_STARTUP_D(mysql)
-{
- ZEND_INIT_MODULE_GLOBALS(mysql, php_mysql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
- le_result = zend_register_list_destructors_ex(_free_mysql_result, NULL, "mysql result", module_number);
- le_link = zend_register_list_destructors_ex(_close_mysql_link, NULL, "mysql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_mysql_plink, "mysql link persistent", module_number);
- Z_TYPE(mysql_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("MYSQL_ASSOC", MYSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_NUM", MYSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_BOTH", MYSQL_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_USE_RESULT", MYSQL_USE_RESULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_STORE_RESULT", MYSQL_STORE_RESULT, CONST_CS | CONST_PERSISTENT);
-
-#ifdef ZTS
-# if MYSQL_VERSION_ID >= 40000
- mysql_thread_init();
-# endif
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(mysql)
-{
-#ifdef ZTS
-# if MYSQL_VERSION_ID >= 40000
- mysql_thread_end();
-# endif
-#endif
-
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(mysql)
-{
- MySG(default_link)=-1;
- MySG(num_links) = MySG(num_persistent);
- /* Reset connect error/errno on every request */
- MySG(connect_error) = NULL;
- MySG(connect_errno)=0;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(mysql)
-{
- if (MySG(connect_error)!=NULL) {
- efree(MySG(connect_error));
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mysql)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "MySQL Support", "enabled");
- sprintf(buf, "%ld", MySG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", MySG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_row(2, "Client API version", mysql_get_client_info());
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "MYSQL_MODULE_TYPE", PHP_MYSQL_TYPE);
- php_info_print_table_row(2, "MYSQL_SOCKET", MYSQL_UNIX_ADDR);
- php_info_print_table_row(2, "MYSQL_INCLUDE", PHP_MYSQL_INCLUDE);
- php_info_print_table_row(2, "MYSQL_LIBS", PHP_MYSQL_LIBS);
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-/* }}} */
-
-/* {{{ php_mysql_do_connect
- */
-#define MYSQL_DO_CONNECT_CLEANUP() \
- if (free_host) { \
- efree(host); \
- }
-
-#define MYSQL_DO_CONNECT_RETURN_FALSE() \
- MYSQL_DO_CONNECT_CLEANUP(); \
- RETURN_FALSE;
-
-static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user=NULL, *passwd=NULL, *host_and_port=NULL, *socket=NULL, *tmp=NULL, *host=NULL;
- char *hashed_details=NULL;
- int hashed_details_length, port = MYSQL_PORT;
- php_mysql_conn *mysql=NULL;
- void (*handler) (int);
- zval **z_host=NULL, **z_user=NULL, **z_passwd=NULL, **z_new_link=NULL;
- zend_bool free_host=0, new_link=0;
-
- socket = MySG(default_socket);
-
- if (PG(sql_safe_mode)) {
- if (ZEND_NUM_ARGS()>0) {
- php_error(E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
- }
- host_and_port=passwd=NULL;
- user=php_get_current_user();
- hashed_details_length = strlen(user)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "mysql__%s_", user);
- } else {
- host_and_port = MySG(default_host);
- user = MySG(default_user);
- passwd = MySG(default_password);
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- break;
- case 1: {
- if (zend_get_parameters_ex(1, &z_host)==FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- }
- break;
- case 2: {
- if (zend_get_parameters_ex(2, &z_host, &z_user)==FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- user = Z_STRVAL_PP(z_user);
- }
- break;
- case 3: {
- if (zend_get_parameters_ex(3, &z_host, &z_user, &z_passwd) == FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- convert_to_string_ex(z_passwd);
- user = Z_STRVAL_PP(z_user);
- passwd = Z_STRVAL_PP(z_passwd);
- }
- break;
- case 4: {
- if (zend_get_parameters_ex(4, &z_host, &z_user, &z_passwd, &z_new_link) == FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- convert_to_string_ex(z_passwd);
- user = Z_STRVAL_PP(z_user);
- passwd = Z_STRVAL_PP(z_passwd);
- new_link = Z_BVAL_PP(z_new_link);
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (z_host) {
- SEPARATE_ZVAL(z_host); /* We may modify z_host if it contains a port, separate */
- convert_to_string_ex(z_host);
- host_and_port = Z_STRVAL_PP(z_host);
- if (z_user) {
- convert_to_string_ex(z_user);
- user = Z_STRVAL_PP(z_user);
- if (z_passwd) {
- convert_to_string_ex(z_passwd);
- passwd = Z_STRVAL_PP(z_passwd);
- }
- }
- }
-
- hashed_details_length = sizeof("mysql___")-1 + strlen(SAFE_STRING(host_and_port))+strlen(SAFE_STRING(user))+strlen(SAFE_STRING(passwd));
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "mysql_%s_%s_%s", SAFE_STRING(host_and_port), SAFE_STRING(user), SAFE_STRING(passwd));
- }
-
- /* We cannot use mysql_port anymore in windows, need to use
- * mysql_real_connect() to set the port.
- */
- if (host_and_port && (tmp=strchr(host_and_port, ':'))) {
- host = estrndup(host_and_port, tmp-host_and_port);
- free_host = 1;
- tmp++;
- if (tmp[0] != '/') {
- port = atoi(tmp);
- if ((tmp=strchr(tmp, ':'))) {
- tmp++;
- socket=tmp;
- }
- } else {
- socket = tmp;
- }
- } else {
- host = host_and_port;
- port = MySG(default_port);
- }
-
-#if MYSQL_VERSION_ID < 32200
- mysql_port = port;
-#endif
-
- if (!MySG(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (MySG(max_links)!=-1 && MySG(num_links)>=MySG(max_links)) {
- php_error(E_WARNING, "MySQL: Too many open links (%d)", MySG(num_links));
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- if (MySG(max_persistent)!=-1 && MySG(num_persistent)>=MySG(max_persistent)) {
- php_error(E_WARNING, "MySQL: Too many open persistent links (%d)", MySG(num_persistent));
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- /* create the link */
- mysql = (php_mysql_conn *) malloc(sizeof(php_mysql_conn));
- mysql->active_result_id = 0;
-#if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */
- mysql_init(&mysql->conn);
- if (mysql_real_connect(&mysql->conn, host, user, passwd, NULL, port, socket, 0)==NULL) {
-#else
- if (mysql_connect(&mysql->conn, host, user, passwd)==NULL) {
-#endif
- /* Populate connect error globals so that the error functions can read them */
- if (MySG(connect_error)!=NULL) efree(MySG(connect_error));
- MySG(connect_error)=estrdup(mysql_error(&mysql->conn));
- php_error(E_WARNING, "%s", MySG(connect_error));
-#if defined(HAVE_MYSQL_ERRNO)
- MySG(connect_errno)=mysql_errno(&mysql->conn);
-#endif
- free(mysql);
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = mysql;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- free(mysql);
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- MySG(num_persistent)++;
- MySG(num_links)++;
- } else { /* we do */
- if (Z_TYPE_P(le) != le_plink) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- /* ensure that the link did not die */
- handler=signal(SIGPIPE, SIG_IGN);
-#if defined(HAVE_MYSQL_ERRNO) && defined(CR_SERVER_GONE_ERROR)
- mysql_stat(le->ptr);
- if (mysql_errno(&((php_mysql_conn *) le->ptr)->conn) == CR_SERVER_GONE_ERROR) {
-#else
- if (!strcasecmp(mysql_stat(le->ptr), "mysql server has gone away")) { /* the link died */
-#endif
- signal(SIGPIPE, handler);
-#if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */
- if (mysql_real_connect(le->ptr, host, user, passwd, NULL, port, socket, 0)==NULL) {
-#else
- if (mysql_connect(le->ptr, host, user, passwd)==NULL) {
-#endif
- php_error(E_WARNING, "MySQL: Link to server lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- }
- signal(SIGPIPE, handler);
- mysql = (php_mysql_conn *) le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual mysql link sits.
- * if it doesn't, open a new mysql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (!new_link && zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type, link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- php_mysql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- MYSQL_DO_CONNECT_CLEANUP();
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- }
- }
- if (MySG(max_links)!=-1 && MySG(num_links)>=MySG(max_links)) {
- php_error(E_WARNING, "MySQL: Too many open links (%d)", MySG(num_links));
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
-
- mysql = (php_mysql_conn *) emalloc(sizeof(php_mysql_conn));
- mysql->active_result_id = 0;
-#if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */
- mysql_init(&mysql->conn);
- if (mysql_real_connect(&mysql->conn, host, user, passwd, NULL, port, socket, 0)==NULL) {
-#else
- if (mysql_connect(&mysql->conn, host, user, passwd)==NULL) {
-#endif
- /* Populate connect error globals so that the error functions can read them */
- if (MySG(connect_error)!=NULL) efree(MySG(connect_error));
- MySG(connect_error)=estrdup(mysql_error(&mysql->conn));
- php_error(E_WARNING, "%s", MySG(connect_error));
-#if defined(HAVE_MYSQL_ERRNO)
- MySG(connect_errno)=mysql_errno(&mysql->conn);
-#endif
- php_error(E_WARNING, "MySQL Connection Failed: %s\n", mysql_error(&mysql->conn));
- efree(hashed_details);
- efree(mysql);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, mysql, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- MySG(num_links)++;
- }
-
- efree(hashed_details);
- php_mysql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
- MYSQL_DO_CONNECT_CLEANUP();
-}
-/* }}} */
-
-/* {{{ php_mysql_get_default_link
- */
-static int php_mysql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (MySG(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return MySG(default_link);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_connect([string hostname[:port][:/path/to/socket]] [, string username] [, string password] [, bool new])
- Opens a connection to a MySQL Server */
-PHP_FUNCTION(mysql_connect)
-{
- php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_pconnect([string hostname[:port][:/path/to/socket]] [, string username] [, string password])
- Opens a persistent connection to a MySQL Server */
-PHP_FUNCTION(mysql_pconnect)
-{
- php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool mysql_close([int link_identifier])
- Close a MySQL connection */
-PHP_FUNCTION(mysql_close)
-{
- zval **mysql_link=NULL;
- int id;
- php_mysql_conn *mysql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(mysql_link));
- }
-
- if (id!=-1
- || (mysql_link && Z_RESVAL_PP(mysql_link)==MySG(default_link))) {
- zend_list_delete(MySG(default_link));
- MySG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysql_select_db(string database_name [, int link_identifier [, bool return_prev_dbname]])
- Selects a MySQL database */
-PHP_FUNCTION(mysql_select_db)
-{
- zval **db, **mysql_link, **ret_prevdb;
- int id, ret_dbname=0;
- php_mysql_conn *mysql;
- char *prev_db=NULL;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &db, &mysql_link, &ret_prevdb)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- convert_to_long_ex(ret_prevdb);
- ret_dbname = Z_LVAL_PP(ret_prevdb);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
-
- /* Get the previous database name */
- if (ret_dbname && mysql->conn.db) {
- prev_db=estrdup(mysql->conn.db);
- }
-
- if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) {
- RETVAL_FALSE;
- } else if (prev_db) {
- RETVAL_STRING(prev_db, 1);
- } else {
- RETVAL_TRUE;
- }
-
- if (prev_db) {
- efree(prev_db);
- }
-}
-/* }}} */
-
-#ifdef HAVE_GETINFO_FUNCS
-
-/* {{{ proto string mysql_get_client_info(void)
- Returns a string that represents the client library version */
-PHP_FUNCTION(mysql_get_client_info)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING(mysql_get_client_info(),1);
-}
-/* }}} */
-
-/* {{{ proto string mysql_get_host_info([int link_identifier])
- Returns a string describing the type of connection in use, including the server host name */
-PHP_FUNCTION(mysql_get_host_info)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING(mysql_get_host_info(&mysql->conn),1);
-}
-/* }}} */
-
-/* {{{ proto int mysql_get_proto_info([int link_identifier])
- Returns the protocol version used by current connection */
-PHP_FUNCTION(mysql_get_proto_info)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_LONG(mysql_get_proto_info(&mysql->conn));
-}
-/* }}} */
-
-/* {{{ proto string mysql_get_server_info([int link_identifier])
- Returns a string that represents the server version number */
-PHP_FUNCTION(mysql_get_server_info)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING(mysql_get_server_info(&mysql->conn),1);
-}
-/* }}} */
-
-/* {{{ proto string mysql_info([int link_identifier])
- Returns a string containing information about the most recent query */
-PHP_FUNCTION(mysql_info)
-{
- zval **mysql_link;
- int id;
- char *str;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- if ((str = mysql_info(&mysql->conn))) {
- RETURN_STRING(str,1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mysql_thread_id([int link_identifier])
- Returns the thread id of current connection */
-PHP_FUNCTION(mysql_thread_id)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_LONG(mysql_thread_id(&mysql->conn));
-}
-/* }}} */
-
-/* {{{ proto string mysql_stat([int link_identifier])
- Returns a string containing status information */
-PHP_FUNCTION(mysql_stat)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING(mysql_stat(&mysql->conn), 1);
-}
-/* }}} */
-
-/* {{{ proto string mysql_character_set_name([int link_identifier])
- Returns the default character set for the current connection */
-PHP_FUNCTION(mysql_character_set_name)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING((char *)mysql_character_set_name(&mysql->conn), 1);
-}
-/* }}} */
-
-
-#endif
-
-#if MYSQL_VERSION_ID < 40000
-/* {{{ proto bool mysql_create_db(string database_name [, int link_identifier])
- Create a MySQL database */
-PHP_FUNCTION(mysql_create_db)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- if (mysql_create_db(&mysql->conn, Z_STRVAL_PP(db))==0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool mysql_drop_db(string database_name [, int link_identifier])
- Drops (delete) a MySQL database */
-PHP_FUNCTION(mysql_drop_db)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- if (mysql_drop_db(&mysql->conn, Z_STRVAL_PP(db))==0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ php_mysql_do_query_general
- */
-static void php_mysql_do_query_general(zval **query, zval **mysql_link, int link_id, zval **db, int use_store, zval *return_value TSRMLS_DC)
-{
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, link_id, "MySQL-Link", le_link, le_plink);
-
- if (db) {
- convert_to_string_ex(db);
- if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) {
- RETURN_FALSE;
- }
- }
-
-
- if (mysql->active_result_id) do {
- int type;
- MYSQL_RES *mysql_result;
-
- mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);
- if (mysql_result && type==le_result) {
- if (!mysql_eof(mysql_result)) {
- php_error(E_NOTICE, "Called %s() without first fetching all rows from a previous unbuffered query",
- get_active_function_name(TSRMLS_C));
- while (mysql_fetch_row(mysql_result));
- }
- zend_list_delete(mysql->active_result_id);
- mysql->active_result_id = 0;
- }
- } while(0);
-
- convert_to_string_ex(query);
- /* mysql_query is binary unsafe, use mysql_real_query */
-#if MYSQL_VERSION_ID > 32199
- if (mysql_real_query(&mysql->conn, Z_STRVAL_PP(query), Z_STRLEN_PP(query))!=0) {
- RETURN_FALSE;
- }
-#else
- if (mysql_query(&mysql->conn, Z_STRVAL_PP(query))!=0) {
- RETURN_FALSE;
- }
-#endif
- if(use_store == MYSQL_USE_RESULT) {
- mysql_result=mysql_use_result(&mysql->conn);
- } else {
- mysql_result=mysql_store_result(&mysql->conn);
- }
- if (!mysql_result) {
- if (PHP_MYSQL_VALID_RESULT(&mysql->conn)) { /* query should have returned rows */
- php_error(E_WARNING, "MySQL: Unable to save result set");
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
- if (use_store == MYSQL_USE_RESULT) {
- mysql->active_result_id = Z_LVAL_P(return_value);
- }
-}
-/* }}} */
-
-/* {{{ php_mysql_do_query
- */
-static void php_mysql_do_query(INTERNAL_FUNCTION_PARAMETERS, int use_store)
-{
- zval **query, **mysql_link;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- php_mysql_do_query_general(query, mysql_link, id, NULL, use_store, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_query(string query [, int link_identifier] [, int result_mode])
- Sends an SQL query to MySQL */
-PHP_FUNCTION(mysql_query)
-{
- php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_unbuffered_query(string query [, int link_identifier] [, int result_mode])
- Sends an SQL query to MySQL, without fetching and buffering the result rows */
-PHP_FUNCTION(mysql_unbuffered_query)
-{
- php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_USE_RESULT);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_db_query(string database_name, string query [, int link_identifier])
- Sends an SQL query to MySQL */
-PHP_FUNCTION(mysql_db_query)
-{
- zval **db, **query, **mysql_link;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &db, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &db, &query, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- zend_error(E_NOTICE, "%s is deprecated; use mysql_select_db() and mysql_query() instead", get_active_function_name(TSRMLS_C));
-
- php_mysql_do_query_general(query, mysql_link, id, db, MYSQL_STORE_RESULT, return_value TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_list_dbs([int link_identifier])
- List databases available on a MySQL server */
-PHP_FUNCTION(mysql_list_dbs)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- if ((mysql_result=mysql_list_dbs(&mysql->conn, NULL))==NULL) {
- php_error(E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_list_tables(string database_name [, int link_identifier])
- List tables in a MySQL database */
-PHP_FUNCTION(mysql_list_tables)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) {
- RETURN_FALSE;
- }
- if ((mysql_result=mysql_list_tables(&mysql->conn, NULL))==NULL) {
- php_error(E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_list_fields(string database_name, string table_name [, int link_identifier])
- List MySQL result fields */
-PHP_FUNCTION(mysql_list_fields)
-{
- zval **db, **table, **mysql_link;
- int id;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &db, &table)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &db, &table, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) {
- RETURN_FALSE;
- }
- convert_to_string_ex(table);
- if ((mysql_result=mysql_list_fields(&mysql->conn, Z_STRVAL_PP(table), NULL))==NULL) {
- php_error(E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_list_processes([int link_identifier])
- Returns a result set describing the current server threads */
-PHP_FUNCTION(mysql_list_processes)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- mysql_result = mysql_list_processes(&mysql->conn);
- if (mysql_result == NULL) {
- php_error(E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_error([int link_identifier])
- Returns the text of the error message from previous MySQL operation */
-PHP_FUNCTION(mysql_error)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- if (id==-1) {
- if (MySG(connect_error)!=NULL){
- RETURN_STRING(MySG(connect_error),1);
- } else {
- RETURN_FALSE;
- }
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING(mysql_error(&mysql->conn), 1);
-}
-/* }}} */
-
-
-/* {{{ proto int mysql_errno([int link_identifier])
- Returns the number of the error message from previous MySQL operation */
-#ifdef HAVE_MYSQL_ERRNO
-PHP_FUNCTION(mysql_errno)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- if (id==-1) {
- if (MySG(connect_errno)!=0){
- RETURN_LONG(MySG(connect_errno));
- } else {
- RETURN_FALSE;
- }
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_LONG(mysql_errno(&mysql->conn));
-}
-#endif
-/* }}} */
-
-
-/* {{{ proto int mysql_affected_rows([int link_identifier])
- Gets number of affected rows in previous MySQL operation */
-PHP_FUNCTION(mysql_affected_rows)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- /* conversion from int64 to long happing here */
- Z_LVAL_P(return_value) = (long) mysql_affected_rows(&mysql->conn);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_escape_string(string to_be_escaped)
- Escape string for mysql query */
-PHP_FUNCTION(mysql_escape_string)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(str);
- /* assume worst case situation, which is 2x of the original string.
- * we don't realloc() down to the real size since it'd most probably not
- * be worth it
- */
- Z_STRVAL_P(return_value) = (char *) emalloc(Z_STRLEN_PP(str)*2+1);
- Z_STRLEN_P(return_value) = mysql_escape_string(Z_STRVAL_P(return_value), Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto string mysql_real_escape_string(string to_be_escaped [, int link_identifier])
- Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection */
-PHP_FUNCTION(mysql_real_escape_string)
-{
- zval *mysql_link = NULL;
- char *str;
- char *new_str;
- int id = -1, str_len, new_str_len;
- php_mysql_conn *mysql;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &str, &str_len, &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 1) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- new_str = emalloc(str_len * 2 + 1);
- new_str_len = mysql_real_escape_string(&mysql->conn, new_str, str, str_len);
- new_str = erealloc(new_str, new_str_len);
-
- RETURN_STRINGL(new_str, new_str_len, 0);
-}
-/* }}} */
-
-/* {{{ proto int mysql_insert_id([int link_identifier])
- Gets the ID generated from the previous INSERT operation */
-PHP_FUNCTION(mysql_insert_id)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- /* conversion from int64 to long happing here */
- Z_LVAL_P(return_value) = (long) mysql_insert_id(&mysql->conn);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-/* {{{ proto mixed mysql_result(int result, int row [, mixed field])
- Gets result data */
-PHP_FUNCTION(mysql_result)
-{
- zval **result, **row, **field=NULL;
- MYSQL_RES *mysql_result;
- MYSQL_ROW sql_row;
- mysql_row_length_type *sql_row_lengths;
- int field_offset=0;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &result, &row)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(row);
- if (Z_LVAL_PP(row)<0 || Z_LVAL_PP(row)>=(int)mysql_num_rows(mysql_result)) {
- php_error(E_WARNING, "Unable to jump to row %d on MySQL result index %d", Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_data_seek(mysql_result, Z_LVAL_PP(row));
- if ((sql_row=mysql_fetch_row(mysql_result))==NULL
- || (sql_row_lengths=mysql_fetch_lengths(mysql_result))==NULL) { /* shouldn't happen? */
- RETURN_FALSE;
- }
-
- if (field) {
- switch(Z_TYPE_PP(field)) {
- case IS_STRING: {
- int i=0;
- MYSQL_FIELD *tmp_field;
- char *table_name, *field_name, *tmp;
-
- if ((tmp=strchr(Z_STRVAL_PP(field), '.'))) {
- table_name = estrndup(Z_STRVAL_PP(field), tmp-Z_STRVAL_PP(field));
- field_name = estrdup(tmp+1);
- } else {
- table_name = NULL;
- field_name = estrndup(Z_STRVAL_PP(field),Z_STRLEN_PP(field));
- }
- mysql_field_seek(mysql_result, 0);
- while ((tmp_field=mysql_fetch_field(mysql_result))) {
- if ((!table_name || !strcasecmp(tmp_field->table, table_name)) && !strcasecmp(tmp_field->name, field_name)) {
- field_offset = i;
- break;
- }
- i++;
- }
- if (!tmp_field) { /* no match found */
- php_error(E_WARNING, "%s%s%s not found in MySQL result index %d",
- (table_name?table_name:""), (table_name?".":""), field_name, Z_LVAL_PP(result));
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- RETURN_FALSE;
- }
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- }
- break;
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- if (field_offset<0 || field_offset>=(int)mysql_num_fields(mysql_result)) {
- php_error(E_WARNING, "Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
- }
-
- if (sql_row[field_offset]) {
- Z_TYPE_P(return_value) = IS_STRING;
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(sql_row[field_offset], sql_row_lengths[field_offset],&Z_STRLEN_P(return_value), 0 TSRMLS_CC);
- } else {
- Z_STRLEN_P(return_value) = sql_row_lengths[field_offset];
- Z_STRVAL_P(return_value) = (char *) safe_estrndup(sql_row[field_offset], Z_STRLEN_P(return_value));
- }
- } else {
- Z_TYPE_P(return_value) = IS_NULL;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mysql_num_rows(int result)
- Gets number of rows in a result */
-PHP_FUNCTION(mysql_num_rows)
-{
- zval **result;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- /* conversion from int64 to long happing here */
- Z_LVAL_P(return_value) = (long) mysql_num_rows(mysql_result);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int mysql_num_fields(int result)
- Gets number of fields in a result */
-PHP_FUNCTION(mysql_num_fields)
-{
- zval **result;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- Z_LVAL_P(return_value) = mysql_num_fields(mysql_result);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ php_mysql_fetch_hash
- */
-static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args)
-{
- zval **result, **arg2;
- MYSQL_RES *mysql_result;
- MYSQL_ROW mysql_row;
- MYSQL_FIELD *mysql_field;
- mysql_row_length_type *mysql_row_lengths;
- int num_fields;
- int i;
-
- if (ZEND_NUM_ARGS() > expected_args) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = MYSQL_BOTH;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg2);
- result_type = Z_LVAL_PP(arg2);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- if ((mysql_row=mysql_fetch_row(mysql_result))==NULL
- || (mysql_row_lengths=mysql_fetch_lengths(mysql_result))==NULL) {
- RETURN_FALSE;
- }
-
- num_fields = mysql_num_fields(mysql_result);
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- mysql_field_seek(mysql_result, 0);
- for (mysql_field=mysql_fetch_field(mysql_result), i=0; mysql_field; mysql_field=mysql_fetch_field(mysql_result), i++) {
- if (mysql_row[i]) {
- char *data;
- int data_len;
- int should_copy;
-
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(mysql_row[i], mysql_row_lengths[i],&data_len, 0 TSRMLS_CC);
- should_copy = 0;
- } else {
- data = mysql_row[i];
- data_len = mysql_row_lengths[i];
- should_copy = 1;
- }
-
- if (result_type & MYSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy = 1;
- }
-
- if (result_type & MYSQL_ASSOC) {
- add_assoc_stringl(return_value, mysql_field->name, data, data_len, should_copy);
- }
- } else {
- /* NULL value. */
- if (result_type & MYSQL_NUM) {
- add_index_null(return_value, i);
- }
-
- if (result_type & MYSQL_ASSOC) {
- add_assoc_null(return_value, mysql_field->name);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array mysql_fetch_row(int result)
- Gets a result row as an enumerated array */
-PHP_FUNCTION(mysql_fetch_row)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_NUM, 1);
-}
-/* }}} */
-
-
-/* {{{ proto object mysql_fetch_object(int result [, int result_type])
- Fetch a result row as an object */
-PHP_FUNCTION(mysql_fetch_object)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 2);
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-
-/* {{{ proto array mysql_fetch_array(int result [, int result_type])
- Fetch a result row as an array (associative, numeric or both) */
-PHP_FUNCTION(mysql_fetch_array)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 2);
-}
-/* }}} */
-
-
-/* {{{ proto array mysql_fetch_assoc(int result)
- Fetch a result row as an associative array */
-PHP_FUNCTION(mysql_fetch_assoc)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 1);
-}
-/* }}} */
-
-/* {{{ proto bool mysql_data_seek(int result, int row_number)
- Move internal result pointer */
-PHP_FUNCTION(mysql_data_seek)
-{
- zval **result, **offset;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=(int)mysql_num_rows(mysql_result)) {
- php_error(E_WARNING, "Offset %d is invalid for MySQL result index %d (or the query data is unbuffered)", Z_LVAL_PP(offset), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_data_seek(mysql_result, Z_LVAL_PP(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto array mysql_fetch_lengths(int result)
- Gets max data size of each column in a result */
-PHP_FUNCTION(mysql_fetch_lengths)
-{
- zval **result;
- MYSQL_RES *mysql_result;
- mysql_row_length_type *lengths;
- int num_fields;
- int i;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- if ((lengths=mysql_fetch_lengths(mysql_result))==NULL) {
- RETURN_FALSE;
- }
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- num_fields = mysql_num_fields(mysql_result);
-
- for (i=0; i<num_fields; i++) {
- add_index_long(return_value, i, lengths[i]);
- }
-}
-/* }}} */
-
-/* {{{ php_mysql_get_field_name
- */
-static char *php_mysql_get_field_name(int field_type)
-{
- switch(field_type) {
- case FIELD_TYPE_STRING:
- case FIELD_TYPE_VAR_STRING:
- return "string";
- break;
-#ifdef MYSQL_HAS_TINY
- case FIELD_TYPE_TINY:
-#endif
- case FIELD_TYPE_SHORT:
- case FIELD_TYPE_LONG:
- case FIELD_TYPE_LONGLONG:
- case FIELD_TYPE_INT24:
- return "int";
- break;
- case FIELD_TYPE_FLOAT:
- case FIELD_TYPE_DOUBLE:
- case FIELD_TYPE_DECIMAL:
- return "real";
- break;
- case FIELD_TYPE_TIMESTAMP:
- return "timestamp";
- break;
-#ifdef MYSQL_HAS_YEAR
- case FIELD_TYPE_YEAR:
- return "year";
- break;
-#endif
- case FIELD_TYPE_DATE:
- return "date";
- break;
- case FIELD_TYPE_TIME:
- return "time";
- break;
- case FIELD_TYPE_DATETIME:
- return "datetime";
- break;
- case FIELD_TYPE_TINY_BLOB:
- case FIELD_TYPE_MEDIUM_BLOB:
- case FIELD_TYPE_LONG_BLOB:
- case FIELD_TYPE_BLOB:
- return "blob";
- break;
- case FIELD_TYPE_NULL:
- return "null";
- break;
- default:
- return "unknown";
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto object mysql_fetch_field(int result [, int field_offset])
- Gets column information from a result and return as an object */
-PHP_FUNCTION(mysql_fetch_field)
-{
- zval **result, **field=NULL;
- MYSQL_RES *mysql_result;
- MYSQL_FIELD *mysql_field;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(field);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- if (field) {
- if (Z_LVAL_PP(field)<0 || Z_LVAL_PP(field)>=(int)mysql_num_fields(mysql_result)) {
- php_error(E_WARNING, "MySQL: Bad field offset");
- RETURN_FALSE;
- }
- mysql_field_seek(mysql_result, Z_LVAL_PP(field));
- }
- if ((mysql_field=mysql_fetch_field(mysql_result))==NULL) {
- RETURN_FALSE;
- }
- if (object_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- add_property_string(return_value, "name",(mysql_field->name?mysql_field->name:empty_string), 1);
- add_property_string(return_value, "table",(mysql_field->table?mysql_field->table:empty_string), 1);
- add_property_string(return_value, "def",(mysql_field->def?mysql_field->def:empty_string), 1);
- add_property_long(return_value, "max_length", mysql_field->max_length);
- add_property_long(return_value, "not_null", IS_NOT_NULL(mysql_field->flags)?1:0);
- add_property_long(return_value, "primary_key", IS_PRI_KEY(mysql_field->flags)?1:0);
- add_property_long(return_value, "multiple_key",(mysql_field->flags&MULTIPLE_KEY_FLAG?1:0));
- add_property_long(return_value, "unique_key",(mysql_field->flags&UNIQUE_KEY_FLAG?1:0));
- add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(mysql_field))?1:0);
- add_property_long(return_value, "blob", IS_BLOB(mysql_field->flags)?1:0);
- add_property_string(return_value, "type", php_mysql_get_field_name(Z_TYPE_P(mysql_field)), 1);
- add_property_long(return_value, "unsigned",(mysql_field->flags&UNSIGNED_FLAG?1:0));
- add_property_long(return_value, "zerofill",(mysql_field->flags&ZEROFILL_FLAG?1:0));
-}
-/* }}} */
-
-
-/* {{{ proto bool mysql_field_seek(int result, int field_offset)
- Sets result pointer to a specific field offset */
-PHP_FUNCTION(mysql_field_seek)
-{
- zval **result, **offset;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=(int)mysql_num_fields(mysql_result)) {
- php_error(E_WARNING, "Field %d is invalid for MySQL result index %d", Z_LVAL_PP(offset), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_field_seek(mysql_result, Z_LVAL_PP(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#define PHP_MYSQL_FIELD_NAME 1
-#define PHP_MYSQL_FIELD_TABLE 2
-#define PHP_MYSQL_FIELD_LEN 3
-#define PHP_MYSQL_FIELD_TYPE 4
-#define PHP_MYSQL_FIELD_FLAGS 5
-
-/* {{{ php_mysql_field_info
- */
-static void php_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result, **field;
- MYSQL_RES *mysql_result;
- MYSQL_FIELD *mysql_field;
- char buf[512];
- int len;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(field);
- if (Z_LVAL_PP(field)<0 || Z_LVAL_PP(field)>=(int)mysql_num_fields(mysql_result)) {
- php_error(E_WARNING, "Field %d is invalid for MySQL result index %d", Z_LVAL_PP(field), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_field_seek(mysql_result, Z_LVAL_PP(field));
- if ((mysql_field=mysql_fetch_field(mysql_result))==NULL) {
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_MYSQL_FIELD_NAME:
- Z_STRLEN_P(return_value) = strlen(mysql_field->name);
- Z_STRVAL_P(return_value) = estrndup(mysql_field->name, Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MYSQL_FIELD_TABLE:
- Z_STRLEN_P(return_value) = strlen(mysql_field->table);
- Z_STRVAL_P(return_value) = estrndup(mysql_field->table, Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MYSQL_FIELD_LEN:
- Z_LVAL_P(return_value) = mysql_field->length;
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_MYSQL_FIELD_TYPE:
- Z_STRVAL_P(return_value) = php_mysql_get_field_name(Z_TYPE_P(mysql_field));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MYSQL_FIELD_FLAGS:
- strcpy(buf, "");
-#ifdef IS_NOT_NULL
- if (IS_NOT_NULL(mysql_field->flags)) {
- strcat(buf, "not_null ");
- }
-#endif
-#ifdef IS_PRI_KEY
- if (IS_PRI_KEY(mysql_field->flags)) {
- strcat(buf, "primary_key ");
- }
-#endif
-#ifdef UNIQUE_KEY_FLAG
- if (mysql_field->flags&UNIQUE_KEY_FLAG) {
- strcat(buf, "unique_key ");
- }
-#endif
-#ifdef MULTIPLE_KEY_FLAG
- if (mysql_field->flags&MULTIPLE_KEY_FLAG) {
- strcat(buf, "multiple_key ");
- }
-#endif
-#ifdef IS_BLOB
- if (IS_BLOB(mysql_field->flags)) {
- strcat(buf, "blob ");
- }
-#endif
-#ifdef UNSIGNED_FLAG
- if (mysql_field->flags&UNSIGNED_FLAG) {
- strcat(buf, "unsigned ");
- }
-#endif
-#ifdef ZEROFILL_FLAG
- if (mysql_field->flags&ZEROFILL_FLAG) {
- strcat(buf, "zerofill ");
- }
-#endif
-#ifdef BINARY_FLAG
- if (mysql_field->flags&BINARY_FLAG) {
- strcat(buf, "binary ");
- }
-#endif
-#ifdef ENUM_FLAG
- if (mysql_field->flags&ENUM_FLAG) {
- strcat(buf, "enum ");
- }
-#endif
-#ifdef SET_FLAG
- if (mysql_field->flags&SET_FLAG) {
- strcat(buf, "set ");
- }
-#endif
-#ifdef AUTO_INCREMENT_FLAG
- if (mysql_field->flags&AUTO_INCREMENT_FLAG) {
- strcat(buf, "auto_increment ");
- }
-#endif
-#ifdef TIMESTAMP_FLAG
- if (mysql_field->flags&TIMESTAMP_FLAG) {
- strcat(buf, "timestamp ");
- }
-#endif
- len = strlen(buf);
- /* remove trailing space, if present */
- if (len && buf[len-1] == ' ') {
- buf[len-1] = 0;
- len--;
- }
-
- Z_STRLEN_P(return_value) = len;
- Z_STRVAL_P(return_value) = estrndup(buf, len);
- Z_TYPE_P(return_value) = IS_STRING;
- break;
-
- default:
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mysql_field_name(int result, int field_index)
- Gets the name of the specified field in a result */
-PHP_FUNCTION(mysql_field_name)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_NAME);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_field_table(int result, int field_offset)
- Gets name of the table the specified field is in */
-PHP_FUNCTION(mysql_field_table)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_TABLE);
-}
-/* }}} */
-
-
-/* {{{ proto int mysql_field_len(int result, int field_offset)
- Returns the length of the specified field */
-PHP_FUNCTION(mysql_field_len)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_LEN);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_field_type(int result, int field_offset)
- Gets the type of the specified field in a result */
-PHP_FUNCTION(mysql_field_type)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_TYPE);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_field_flags(int result, int field_offset)
- Gets the flags associated with the specified field in a result */
-PHP_FUNCTION(mysql_field_flags)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_FLAGS);
-}
-/* }}} */
-
-
-/* {{{ proto bool mysql_free_result(int result)
- Free result memory */
-PHP_FUNCTION(mysql_free_result)
-{
- zval **result;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(result)==IS_RESOURCE && Z_LVAL_PP(result)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- zend_list_delete(Z_LVAL_PP(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysql_ping([int link_identifier])
- Ping a server connection. If no connection then reconnect. */
-PHP_FUNCTION(mysql_ping)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (0 == ZEND_NUM_ARGS()) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link)==FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
- RETURN_BOOL(! mysql_ping(&mysql->conn));
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/mysql/php_mysql.h b/ext/mysql/php_mysql.h
deleted file mode 100644
index d62b277bed..0000000000
--- a/ext/mysql/php_mysql.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#ifndef PHP_MYSQL_H
-#define PHP_MYSQL_H
-
-#ifdef PHP_WIN32
-#define PHP_MYSQL_API __declspec(dllexport)
-#else
-#define PHP_MYSQL_API
-#endif
-
-#if HAVE_MYSQL
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry mysql_module_entry;
-
-#define mysql_module_ptr &mysql_module_entry
-
-PHP_MINIT_FUNCTION(mysql);
-PHP_RINIT_FUNCTION(mysql);
-PHP_MSHUTDOWN_FUNCTION(mysql);
-PHP_RSHUTDOWN_FUNCTION(mysql);
-PHP_MINFO_FUNCTION(mysql);
-
-PHP_FUNCTION(mysql_connect);
-PHP_FUNCTION(mysql_pconnect);
-PHP_FUNCTION(mysql_close);
-PHP_FUNCTION(mysql_select_db);
-#if MYSQL_VERSION_ID < 40000
-PHP_FUNCTION(mysql_create_db);
-PHP_FUNCTION(mysql_drop_db);
-#endif
-PHP_FUNCTION(mysql_query);
-PHP_FUNCTION(mysql_unbuffered_query);
-PHP_FUNCTION(mysql_db_query);
-PHP_FUNCTION(mysql_list_dbs);
-PHP_FUNCTION(mysql_list_tables);
-PHP_FUNCTION(mysql_list_fields);
-PHP_FUNCTION(mysql_list_processes);
-PHP_FUNCTION(mysql_error);
-PHP_FUNCTION(mysql_errno);
-PHP_FUNCTION(mysql_affected_rows);
-PHP_FUNCTION(mysql_insert_id);
-PHP_FUNCTION(mysql_result);
-PHP_FUNCTION(mysql_num_rows);
-PHP_FUNCTION(mysql_num_fields);
-PHP_FUNCTION(mysql_fetch_row);
-PHP_FUNCTION(mysql_fetch_array);
-PHP_FUNCTION(mysql_fetch_assoc);
-PHP_FUNCTION(mysql_fetch_object);
-PHP_FUNCTION(mysql_data_seek);
-PHP_FUNCTION(mysql_fetch_lengths);
-PHP_FUNCTION(mysql_fetch_field);
-PHP_FUNCTION(mysql_field_seek);
-PHP_FUNCTION(mysql_free_result);
-PHP_FUNCTION(mysql_field_name);
-PHP_FUNCTION(mysql_field_table);
-PHP_FUNCTION(mysql_field_len);
-PHP_FUNCTION(mysql_field_type);
-PHP_FUNCTION(mysql_field_flags);
-PHP_FUNCTION(mysql_escape_string);
-PHP_FUNCTION(mysql_real_escape_string);
-PHP_FUNCTION(mysql_get_client_info);
-PHP_FUNCTION(mysql_get_host_info);
-PHP_FUNCTION(mysql_get_proto_info);
-PHP_FUNCTION(mysql_get_server_info);
-PHP_FUNCTION(mysql_info);
-PHP_FUNCTION(mysql_stat);
-PHP_FUNCTION(mysql_thread_id);
-PHP_FUNCTION(mysql_character_set_name);
-PHP_FUNCTION(mysql_ping);
-
-ZEND_BEGIN_MODULE_GLOBALS(mysql)
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- long default_port;
- char *default_host, *default_user, *default_password;
- char *default_socket;
- char *connect_error;
- long connect_errno;
-ZEND_END_MODULE_GLOBALS(mysql)
-
-#ifdef ZTS
-# define MySG(v) TSRMG(mysql_globals_id, zend_mysql_globals *, v)
-#else
-# define MySG(v) (mysql_globals.v)
-#endif
-
-
-#else
-
-#define mysql_module_ptr NULL
-
-#endif
-
-#define phpext_mysql_ptr mysql_module_ptr
-
-#endif /* PHP_MYSQL_H */
diff --git a/ext/ncurses/CREDITS b/ext/ncurses/CREDITS
deleted file mode 100644
index 05679b8c8a..0000000000
--- a/ext/ncurses/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ncurses
-Hartmut Holzgraefe
diff --git a/ext/ncurses/EXPERIMENTAL b/ext/ncurses/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/ncurses/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/ncurses/c-prototypes b/ext/ncurses/c-prototypes
deleted file mode 100644
index c98bd29730..0000000000
--- a/ext/ncurses/c-prototypes
+++ /dev/null
@@ -1,263 +0,0 @@
-+ int addch(int);
-+ int addchnstr(int *,int);
-+ int addchstr(int *);
-+ int addnstr(string,int);
-+ int addstr(string);
-+ int assume_default_colors (int,int);
-- int attr_get(int *,int *,void *);
-- int attr_off(int,void *);
-- int attr_on(int,void *);
-- int attr_set(int,int,void *);
-+ int attroff(int);
-+ int attron(int);
-+ int attrset(int);
-+ int baudrate(void);
-+ int beep(void);
-+ int bkgd(int);
-+ void bkgdset(int);
-+ int border(int,int,int,int,int,int,int,int);
-- int box(resource,int,int);
-+ bool can_change_color(void);
-+ int cbreak(void);
-- int chgat(int,int,int,void *);
-+ int clear(void);
-- int clearok(resource,bool);
-+ int clrtobot(void);
-+ int clrtoeol(void);
-- int color_content(int,int*,int*,int*);
-+ int color_set(int,void*);
-- int copywin(resource,resource,int,int,int,int,int,int,int);
-+ int curs_set(int);
-+ int def_prog_mode(void);
-+ int def_shell_mode(void);
-+ int define_key (string,int);
-+ int delay_output(int);
-+ int delch(void);
-+ int deleteln(void);
-- void delscreen(SCREEN *);
-+ int delwin(resource);
-+ int doupdate(void);
-+ int echo(void);
-+ int echochar(int);
-+ int endwin(void);
-+ int erase(void);
-+ char erasechar(void);
-+ void filter(void);
-+ int flash(void);
-+ int flushinp(void);
-- int getbkgd(resource);
-+ int getch(void);
-- int getmouse(MEVENT *);
-- int getnstr(string,int);
-- int getstr(string);
-+ int halfdelay(int);
-+ bool has_colors(void);
-+ bool has_ic(void);
-+ bool has_il(void);
-+ int has_key(int); /* do we have given key? */
-+ int hline(int,int);
-- void idcok(resource,bool);
-- int idlok(resource,bool);
-- void immedok(resource,bool);
-+ int inch(void);
--ma int inchnstr(int *,int);
-- int inchstr(int *);
-+ int init_color(int,int,int,int);
-+ int init_pair(int,int,int);
-- int innstr(string,int);
-+ int insch(int);
-+ int insdelln(int);
-+ int insertln(void);
-- int insnstr(string,int);
-+ int insstr(string);
-+ int instr(string);
-- int intrflush(resource,bool);
-- bool is_linetouched(resource,int);
-- bool is_wintouched(resource);
-+ bool isendwin(void);
-- int keyok (int,bool);
-- int keypad(resource,bool);
-+ char killchar(void);
-- int leaveok(resource,bool);
-- int mcprint(string,int); /* direct data to printer */
-- int meta(resource,bool);
-+ int mouseinterval(int);
-- mmask_t mousemask(mmask_t,mmask_t *);
-+ int move(int,int);
-+ int mvaddch(int,int,int);
-+ int mvaddchnstr(int,int,int *,int);
-+ int mvaddchstr(int,int,int *);
-+ int mvaddnstr(int,int,string,int);
-+ int mvaddstr(int,int,string);
-- int mvchgat(int,int,int,int,int,void *);
-+ int mvcur(int,int,int,int);
-+ int mvdelch(int,int);
-- int mvderwin(resource,int,int);
-+ int mvgetch(int,int);
-- int mvgetnstr(int,int,string,int);
-- int mvgetstr(int,int,string);
-+ int mvhline(int,int,int,int);
-+ int mvinch(int,int);
-- int mvinchnstr(int,int,int *,int);
-- int mvinchstr(int,int,int *);
-- int mvinnstr(int,int,string,int);
-- int mvinsch(int,int,int);
-- int mvinsnstr(int,int,string,int);
-- int mvinsstr(int,int,string);
-- int mvinstr(int,int,string);
-- int mvprintw(int,int, string,...);
-- int mvscanw(int,int, string,...);
-- int mvwaddch(resource,int,int,int);
-- int mvwaddchnstr(resource,int,int,int *,int);
-- int mvwaddchstr(resource,int,int,int *);
-- int mvwaddnstr(resource,int,int,string,int);
-- int mvwaddstr(resource,int,int,string);
-- int mvwchgat(resource,int,int,int,int,int,void *);
-- int mvwdelch(resource,int,int);
-- int mvwgetch(resource,int,int);
-- int mvwgetnstr(resource,int,int,string,int);
-- int mvwgetstr(resource,int,int,string);
-- int mvwhline(resource,int,int,int,int);
-- int mvwin(resource,int,int);
-- int mvwinch(resource,int,int);
-- int mvwinchstr(resource,int,int,int *);
-- int mvwinnstr(resource,int,int,string,int);
-- int mvwinsch(resource,int,int,int);
-- int mvwinsnstr(resource,int,int,string,int);
-- int mvwinsstr(resource,int,int,string);
-- int mvwinstr(resource,int,int,string);
-- int mvwinchnstr(resource,int,int,int *,int);
-- int mvwprintw(resource,int,int, string,...);
-- int mvwscanw(resource,int,int, string,...);
-- int mvwvline(resource,int,int,int,int);
-+ int napms(int);
-+ int nl(void);
-+ int nocbreak(void);
-- int nodelay(resource,bool);
-+ int noecho(void);
-+ int nonl(void);
-+ void noqiflush(void);
-+ int noraw(void);
-- int notimeout(resource,bool);
-- int overlay(resource,resource);
-- int overwrite(resource,resource);
-- int pair_content(int,int*,int*);
-- int pechochar(resource,int);
-- int pnoutrefresh(resource,int,int,int,int,int,int);
-- int prefresh(resource,int,int,int,int,int,int);
-- int printw( string,...);
-+ int putp(string);
-- int putwin(resource,FILE *);
-+ void qiflush(void);
-+ int raw(void);
-- int redrawwin(resource);
-+ int refresh(void);
-- int reset_prog_mode(void);
-- int reset_shell_mode(void);
-+ int resetty(void);
-- int resizeterm (int,int);
-- int ripoffline(int,int (*init)(resource,int));
-+ int savetty(void);
-- int scanw( string,...);
-+ int scr_dump(string);
-+ int scr_init(string);
-+ int scr_restore(string);
-+ int scr_set(string);
-+ int scrl(int);
-- int scroll(resource);
-- int scrollok(resource,bool);
-- int setscrreg(int,int);
-+ int slk_attroff(int);
-- int slk_attr_off(int,void *); /* generated:WIDEC */
-+ int slk_attron(int);
-- int slk_attr_on(int,void*); /* generated:WIDEC */
-+ int slk_attrset(int);
-+ int slk_attr(void);
-- int slk_attr_set(int,int,void*);
-+ int slk_clear(void);
-+ int slk_color(int);
-+ int slk_init(int);
-+ int slk_noutrefresh(void);
-- int slk_refresh(void);
-- int slk_restore(void);
-- int slk_set(int,string,int);
-- int slk_touch(void);
-+ int standend(void);
-+ int standout(void);
-+ int start_color(void);
-- int syncok(resource,bool);
-+ int termattrs(void);
-- int tigetflag( string);
-- int tigetnum( string);
-+ void timeout(int);
-+ int typeahead(int);
-+ int ungetch(int);
-- int ungetmouse(MEVENT *);
-- int untouchwin(resource);
-+ int use_default_colors (void);
-+ void use_env(bool);
-+ int use_extended_names (bool);
-+ int vidattr(int);
-- int vidputs(int,int (*)(int));
-- int vline(int,int);
-- int vw_printw(resource, string,va_list);
-- int vw_scanw(resource, string,va_list);
-- int vwprintw(resource, string,va_list);
-- int vwscanw(resource, string,va_list);
-- int waddch(resource,int);
-- int waddchnstr(resource,int *const,int);
-- int waddchstr(resource,int *);
-- int waddnstr(resource,stringconst,int);
-- int waddstr(resource,string);
-- int wattr_get(resource,int *,int *,void *);
-- int wattr_off(resource, int,void *);
-- int wattr_on(resource, int,void *);
-- int wattr_set(resource,int,int,void *);
-- int wattroff(resource,int);
-- int wattron(resource,int);
-- int wattrset(resource,int);
-- int wbkgd(resource,int);
-- void wbkgdset(resource,int);
-- int wborder(resource,int,int,int,int,int,int,int,int);
-- int wchgat(resource,int,int,int,void *);
-- int wclear(resource);
-- int wclrtobot(resource);
-- int wclrtoeol(resource);
-- int wcolor_set(resource,int,void*);
-- void wcursyncup(resource);
-- int wdelch(resource);
-- int wdeleteln(resource);
-- int wechochar(resource,int);
-- bool wenclose(resource,int,int);
-- int werase(resource);
-- int wgetch(resource);
-- int wgetnstr(resource,string,int);
-- int wgetstr(resource,string);
-- int whline(resource,int,int);
-- int winch(resource);
-- int winchnstr(resource,int *,int);
-- int winchstr(resource,int *);
-- int winnstr(resource,string,int);
-- int winsch(resource,int);
-- int winsdelln(resource,int);
-- int winsertln(resource);
-- int winsnstr(resource,string,int);
-- int winsstr(resource,string);
-- int winstr(resource,string);
-- bool wmouse_trafo(resource win,int* y,int* x,bool to_screen);
-- int wmove(resource,int,int);
-- int wnoutrefresh(resource);
-- int wprintw(resource, string,...);
-- int wredrawln(resource,int,int);
-- int wrefresh(resource);
-- int wresize (resource,int,int);
-- int wscanw(resource,string,...);
-- int wscrl(resource,int);
-- int wsetscrreg(resource,int,int);
-- int wstandend(resource);
-- int wstandout(resource);
-- void wsyncdown(resource);
-- void wsyncup(resource);
-- void wtimeout(resource,int);
-- int wtouchln(resource,int,int,int);
-- int wvline(resource,int,int);
diff --git a/ext/ncurses/config.m4 b/ext/ncurses/config.m4
deleted file mode 100644
index 14cb896981..0000000000
--- a/ext/ncurses/config.m4
+++ /dev/null
@@ -1,55 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ncurses, for ncurses support,
-[ --with-ncurses[=DIR] Include ncurses support (CLI/CGI only).])
-
-if test "$PHP_NCURSES" != "no"; then
-
- # --with-ncurses -> check with-path
- SEARCH_PATH="/usr/local /usr"
- SEARCH_FOR="/include/curses.h"
-
- if test -r $PHP_NCURSES/; then # path given as parameter
- NCURSES_DIR=$PHP_NCURSES
- else # search default path list
- AC_MSG_CHECKING(for ncurses files in default path)
- for i in $SEARCH_PATH ; do
- if test -r $i/$SEARCH_FOR; then
- NCURSES_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$NCURSES_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the ncurses distribution)
- fi
-
- # --with-ncurses -> add include path
- PHP_ADD_INCLUDE($NCURSES_DIR/include)
-
- # --with-ncurses -> chech for lib and symbol presence
- LIBNAME=ncurses
- LIBSYMBOL=initscr
-
- PHP_CHECK_LIBRARY($LIBNAME, $LIBSYMBOL, [
- AC_DEFINE(HAVE_NCURSESLIB,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $NCURSES_DIR/lib, NCURSES_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(Wrong ncurses lib version or lib not found)
- ], [
- -L$NCURSES_DIR/lib -lm
- ])
-
- AC_CHECK_LIB(ncurses, color_set, [AC_DEFINE(HAVE_NCURSES_COLOR_SET, 1, [ ])])
- AC_CHECK_LIB(ncurses, slk_color, [AC_DEFINE(HAVE_NCURSES_SLK_COLOR, 1, [ ])])
- AC_CHECK_LIB(ncurses, asume_default_colors, [AC_DEFINE(HAVE_NCURSES_ASSUME_DEFAULT_COLORS, 1, [ ])])
- AC_CHECK_LIB(ncurses, use_extended_names, [AC_DEFINE(HAVE_NCURSES_USE_EXTENDED_NAMES, 1, [ ])])
-
- PHP_NEW_EXTENSION(ncurses, ncurses.c ncurses_fe.c ncurses_functions.c, $ext_shared, cli)
- PHP_SUBST(NCURSES_SHARED_LIBADD)
-
-fi
diff --git a/ext/ncurses/example1.php b/ext/ncurses/example1.php
deleted file mode 100644
index 0dc689be39..0000000000
--- a/ext/ncurses/example1.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-$n=0;
-ncurses_init();
-if(ncurses_has_colors()){
-ncurses_start_color();
- ncurses_init_pair(1,NCURSES_COLOR_RED,NCURSES_COLOR_BLACK);
- ncurses_init_pair(2,NCURSES_COLOR_GREEN,NCURSES_COLOR_BLACK);
- ncurses_init_pair(3,NCURSES_COLOR_YELLOW,NCURSES_COLOR_BLACK);
- ncurses_init_pair(4,NCURSES_COLOR_BLUE,NCURSES_COLOR_BLACK);
- ncurses_init_pair(5,NCURSES_COLOR_MAGENTA,NCURSES_COLOR_BLACK);
- ncurses_init_pair(6,NCURSES_COLOR_CYAN,NCURSES_COLOR_BLACK);
- ncurses_init_pair(7,NCURSES_COLOR_WHITE,NCURSES_COLOR_BLACK);
-}
-while(1){
-for ($x=0; $x<80; $x++) {
-for ($y=0; $y<24; $y++) {
- $n++;
- ncurses_move($y,$x);
- ncurses_addch($n+64);
- ncurses_color_set($n%8);
- ncurses_refresh();
- if($n>26)$n=0;
-}
-}
-}
-ncurses_getch();
-?>
-
diff --git a/ext/ncurses/ncurses.c b/ext/ncurses/ncurses.c
deleted file mode 100644
index 92a98e8940..0000000000
--- a/ext/ncurses/ncurses.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ncurses.h"
-#include "ext/standard/info.h"
-
-/* If you declare any globals in php_ncurses.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(ncurses)
-*/
-
-/* True global resources - no need for thread safety here */
-int le_ncurses;
-
-
-static void ncurses_destruct(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- WINDOW **pwin = (WINDOW **)rsrc->ptr;
-
- delwin(*pwin);
- efree(pwin);
-}
-
-
-/* {{{ ncurses_module_entry
- */
-zend_module_entry ncurses_module_entry = {
- STANDARD_MODULE_HEADER,
- "ncurses",
- ncurses_functions,
- PHP_MINIT(ncurses),
- PHP_MSHUTDOWN(ncurses),
- PHP_RINIT(ncurses), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(ncurses), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(ncurses),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_NCURSES
-ZEND_GET_MODULE(ncurses)
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("ncurses.value", "42", PHP_INI_ALL, OnUpdateInt, global_value, zend_ncurses_globals, ncurses_globals)
- STD_PHP_INI_ENTRY("ncurses.string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_ncurses_globals, ncurses_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-#define PHP_NCURSES_CONST(x) REGISTER_LONG_CONSTANT("NCURSES_"#x, x, CONST_CS | CONST_PERSISTENT)
-#define PHP_NCURSES_FKEY_CONST(x) REGISTER_LONG_CONSTANT("NCURSES_KEY_F"#x, KEY_F0 + x, CONST_CS | CONST_PERSISTENT)
-
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(ncurses)
-{
- /* color constants */
- PHP_NCURSES_CONST(COLOR_BLACK);
- PHP_NCURSES_CONST(COLOR_RED);
- PHP_NCURSES_CONST(COLOR_GREEN);
- PHP_NCURSES_CONST(COLOR_YELLOW);
- PHP_NCURSES_CONST(COLOR_BLUE);
- PHP_NCURSES_CONST(COLOR_MAGENTA);
- PHP_NCURSES_CONST(COLOR_CYAN);
- PHP_NCURSES_CONST(COLOR_WHITE);
-
- /* keyboard constants */
- PHP_NCURSES_CONST(KEY_DOWN);
- PHP_NCURSES_CONST(KEY_UP);
- PHP_NCURSES_CONST(KEY_LEFT);
- PHP_NCURSES_CONST(KEY_RIGHT);
- PHP_NCURSES_CONST(KEY_BACKSPACE);
- PHP_NCURSES_CONST(KEY_MOUSE);
- PHP_NCURSES_CONST(KEY_F0);
-
-
- /* TODO:this macro sux, we have 65 function key,
- so we need a little loop */
- PHP_NCURSES_FKEY_CONST(1);
- PHP_NCURSES_FKEY_CONST(2);
- PHP_NCURSES_FKEY_CONST(3);
- PHP_NCURSES_FKEY_CONST(4);
- PHP_NCURSES_FKEY_CONST(5);
- PHP_NCURSES_FKEY_CONST(6);
- PHP_NCURSES_FKEY_CONST(7);
- PHP_NCURSES_FKEY_CONST(8);
- PHP_NCURSES_FKEY_CONST(9);
- PHP_NCURSES_FKEY_CONST(10);
- PHP_NCURSES_FKEY_CONST(11);
- PHP_NCURSES_FKEY_CONST(12);
-
- PHP_NCURSES_CONST(KEY_DL);
- PHP_NCURSES_CONST(KEY_IL);
- PHP_NCURSES_CONST(KEY_DC);
- PHP_NCURSES_CONST(KEY_IC);
- PHP_NCURSES_CONST(KEY_EIC);
- PHP_NCURSES_CONST(KEY_CLEAR);
- PHP_NCURSES_CONST(KEY_EOS);
- PHP_NCURSES_CONST(KEY_EOL);
- PHP_NCURSES_CONST(KEY_SF);
- PHP_NCURSES_CONST(KEY_SR);
- PHP_NCURSES_CONST(KEY_NPAGE);
- PHP_NCURSES_CONST(KEY_PPAGE);
- PHP_NCURSES_CONST(KEY_STAB);
- PHP_NCURSES_CONST(KEY_CTAB);
- PHP_NCURSES_CONST(KEY_CATAB);
- PHP_NCURSES_CONST(KEY_ENTER);
- PHP_NCURSES_CONST(KEY_SRESET);
- PHP_NCURSES_CONST(KEY_RESET);
- PHP_NCURSES_CONST(KEY_PRINT);
- PHP_NCURSES_CONST(KEY_LL);
- PHP_NCURSES_CONST(KEY_A1);
- PHP_NCURSES_CONST(KEY_A3);
- PHP_NCURSES_CONST(KEY_B2);
- PHP_NCURSES_CONST(KEY_C1);
- PHP_NCURSES_CONST(KEY_C3);
- PHP_NCURSES_CONST(KEY_BTAB);
- PHP_NCURSES_CONST(KEY_BEG);
- PHP_NCURSES_CONST(KEY_CANCEL);
- PHP_NCURSES_CONST(KEY_CLOSE);
- PHP_NCURSES_CONST(KEY_COMMAND);
- PHP_NCURSES_CONST(KEY_COPY);
- PHP_NCURSES_CONST(KEY_CREATE);
- PHP_NCURSES_CONST(KEY_END);
- PHP_NCURSES_CONST(KEY_EXIT);
- PHP_NCURSES_CONST(KEY_FIND);
- PHP_NCURSES_CONST(KEY_HELP);
- PHP_NCURSES_CONST(KEY_MARK);
- PHP_NCURSES_CONST(KEY_MESSAGE);
- PHP_NCURSES_CONST(KEY_MOVE);
- PHP_NCURSES_CONST(KEY_NEXT);
- PHP_NCURSES_CONST(KEY_OPEN);
- PHP_NCURSES_CONST(KEY_OPTIONS);
- PHP_NCURSES_CONST(KEY_PREVIOUS);
- PHP_NCURSES_CONST(KEY_REDO);
- PHP_NCURSES_CONST(KEY_REFERENCE);
- PHP_NCURSES_CONST(KEY_REFRESH);
- PHP_NCURSES_CONST(KEY_REPLACE);
- PHP_NCURSES_CONST(KEY_RESTART);
- PHP_NCURSES_CONST(KEY_RESUME);
- PHP_NCURSES_CONST(KEY_SAVE);
- PHP_NCURSES_CONST(KEY_SBEG);
- PHP_NCURSES_CONST(KEY_SCANCEL);
- PHP_NCURSES_CONST(KEY_SCOMMAND);
- PHP_NCURSES_CONST(KEY_SCOPY);
- PHP_NCURSES_CONST(KEY_SCREATE);
- PHP_NCURSES_CONST(KEY_SDC);
- PHP_NCURSES_CONST(KEY_SDL);
- PHP_NCURSES_CONST(KEY_SELECT);
- PHP_NCURSES_CONST(KEY_SEND);
- PHP_NCURSES_CONST(KEY_SEOL);
- PHP_NCURSES_CONST(KEY_SEXIT);
- PHP_NCURSES_CONST(KEY_SFIND);
- PHP_NCURSES_CONST(KEY_SHELP);
- PHP_NCURSES_CONST(KEY_SHOME);
- PHP_NCURSES_CONST(KEY_SIC);
- PHP_NCURSES_CONST(KEY_SLEFT);
- PHP_NCURSES_CONST(KEY_SMESSAGE);
- PHP_NCURSES_CONST(KEY_SMOVE);
- PHP_NCURSES_CONST(KEY_SNEXT);
- PHP_NCURSES_CONST(KEY_SOPTIONS);
- PHP_NCURSES_CONST(KEY_SPREVIOUS);
- PHP_NCURSES_CONST(KEY_SPRINT);
- PHP_NCURSES_CONST(KEY_SREDO);
- PHP_NCURSES_CONST(KEY_SREPLACE);
- PHP_NCURSES_CONST(KEY_SRIGHT);
- PHP_NCURSES_CONST(KEY_SRSUME);
- PHP_NCURSES_CONST(KEY_SSAVE);
- PHP_NCURSES_CONST(KEY_SSUSPEND);
- PHP_NCURSES_CONST(KEY_SUNDO);
- PHP_NCURSES_CONST(KEY_SUSPEND);
- PHP_NCURSES_CONST(KEY_UNDO);
- PHP_NCURSES_CONST(KEY_RESIZE);
-
- /* screen attribute constants */
- PHP_NCURSES_CONST(A_NORMAL);
- PHP_NCURSES_CONST(A_STANDOUT);
- PHP_NCURSES_CONST(A_UNDERLINE);
- PHP_NCURSES_CONST(A_REVERSE);
- PHP_NCURSES_CONST(A_BLINK);
- PHP_NCURSES_CONST(A_DIM);
- PHP_NCURSES_CONST(A_BOLD);
- PHP_NCURSES_CONST(A_PROTECT);
- PHP_NCURSES_CONST(A_INVIS);
- PHP_NCURSES_CONST(A_ALTCHARSET);
- PHP_NCURSES_CONST(A_CHARTEXT);
-
- /* mouse constants */
- PHP_NCURSES_CONST(BUTTON1_PRESSED);
- PHP_NCURSES_CONST(BUTTON1_RELEASED);
- PHP_NCURSES_CONST(BUTTON1_CLICKED);
- PHP_NCURSES_CONST(BUTTON1_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON1_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON2_PRESSED);
- PHP_NCURSES_CONST(BUTTON2_RELEASED);
- PHP_NCURSES_CONST(BUTTON2_CLICKED);
- PHP_NCURSES_CONST(BUTTON2_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON2_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON3_PRESSED);
- PHP_NCURSES_CONST(BUTTON3_RELEASED);
- PHP_NCURSES_CONST(BUTTON3_CLICKED);
- PHP_NCURSES_CONST(BUTTON3_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON3_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON4_PRESSED);
- PHP_NCURSES_CONST(BUTTON4_RELEASED);
- PHP_NCURSES_CONST(BUTTON4_CLICKED);
- PHP_NCURSES_CONST(BUTTON4_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON4_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON_SHIFT);
- PHP_NCURSES_CONST(BUTTON_CTRL);
- PHP_NCURSES_CONST(BUTTON_ALT);
- PHP_NCURSES_CONST(ALL_MOUSE_EVENTS);
- PHP_NCURSES_CONST(REPORT_MOUSE_POSITION);
-
- le_ncurses = zend_register_list_destructors_ex(ncurses_destruct, NULL, "ncurses_handle", module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(ncurses)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(ncurses)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(ncurses)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(ncurses)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "ncurses support", "enabled");
- php_info_print_table_row(2, "ncurses library version", NCURSES_VERSION);
-#ifdef HAVE_NCURSES_COLOR_SET
- php_info_print_table_row(2, "color support", "yes");
-#else
- php_info_print_table_row(2, "color support", "no");
-#endif
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-/* Remove the following function when you have succesfully modified config.m4
- so that your module can be compiled into PHP, it exists only for testing
- purposes. */
-
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ncurses/ncurses.php b/ext/ncurses/ncurses.php
deleted file mode 100644
index 416b1087e7..0000000000
--- a/ext/ncurses/ncurses.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'ncurses';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/ncurses/ncurses_fe.c b/ext/ncurses/ncurses_fe.c
deleted file mode 100644
index 4c8fadf00b..0000000000
--- a/ext/ncurses/ncurses_fe.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Hartmut Holzgraefe <hartmut@six.de> |
- | Georg Richter <georg.richter@php-ev.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ncurses.h"
-
-static unsigned char first_args_force_ref[] = {1, BYREF_FORCE};
-static unsigned char firstandsecond_args_force_ref[] = {2, BYREF_FORCE, BYREF_FORCE};
-static unsigned char second_args_force_ref[] = {2, BYREF_NONE, BYREF_FORCE};
-static unsigned char secondandthird_args_force_ref[] = {3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE};
-
-/* ncurses_functions[]
- *
- * Every user visible function must have an entry in ncurses_functions[].
- */
-function_entry ncurses_functions[] = {
- PHP_FE(ncurses_addch, NULL)
- PHP_FE(ncurses_color_set, NULL)
- PHP_FE(ncurses_delwin, NULL)
- PHP_FE(ncurses_end, NULL)
- PHP_FE(ncurses_getch, NULL)
- PHP_FE(ncurses_has_colors, NULL)
- PHP_FE(ncurses_init, NULL)
- PHP_FE(ncurses_init_pair, NULL)
- PHP_FE(ncurses_move, NULL)
- PHP_FE(ncurses_newwin, NULL)
- PHP_FE(ncurses_refresh, NULL)
- PHP_FE(ncurses_start_color, NULL)
- PHP_FE(ncurses_standout, NULL)
- PHP_FE(ncurses_standend, NULL)
- PHP_FE(ncurses_baudrate, NULL)
- PHP_FE(ncurses_beep, NULL)
- PHP_FE(ncurses_can_change_color, NULL)
- PHP_FE(ncurses_cbreak, NULL)
- PHP_FE(ncurses_clear, NULL)
- PHP_FE(ncurses_clrtobot, NULL)
- PHP_FE(ncurses_clrtoeol, NULL)
- PHP_FE(ncurses_def_prog_mode, NULL)
- PHP_FE(ncurses_def_shell_mode, NULL)
- PHP_FE(ncurses_delch, NULL)
- PHP_FE(ncurses_deleteln, NULL)
- PHP_FE(ncurses_doupdate, NULL)
- PHP_FE(ncurses_echo, NULL)
- PHP_FE(ncurses_erase, NULL)
- PHP_FE(ncurses_erasechar, NULL)
- PHP_FE(ncurses_flash, NULL)
- PHP_FE(ncurses_flushinp, NULL)
- PHP_FE(ncurses_has_ic, NULL)
- PHP_FE(ncurses_has_il, NULL)
- PHP_FE(ncurses_inch, NULL)
- PHP_FE(ncurses_insertln, NULL)
- PHP_FE(ncurses_isendwin, NULL)
- PHP_FE(ncurses_killchar, NULL)
- PHP_FE(ncurses_nl, NULL)
- PHP_FE(ncurses_nocbreak, NULL)
- PHP_FE(ncurses_noecho, NULL)
- PHP_FE(ncurses_nonl, NULL)
- PHP_FE(ncurses_noraw, NULL)
- PHP_FE(ncurses_raw, NULL)
- PHP_FE(ncurses_resetty, NULL)
- PHP_FE(ncurses_savetty, NULL)
- PHP_FE(ncurses_termattrs, NULL)
- PHP_FE(ncurses_use_default_colors, NULL)
- PHP_FE(ncurses_slk_attr, NULL)
- PHP_FE(ncurses_slk_clear, NULL)
- PHP_FE(ncurses_slk_noutrefresh, NULL)
- PHP_FE(ncurses_slk_refresh, NULL)
- PHP_FE(ncurses_slk_restore, NULL)
- PHP_FE(ncurses_slk_touch, NULL)
- PHP_FE(ncurses_attroff, NULL)
- PHP_FE(ncurses_attron, NULL)
- PHP_FE(ncurses_attrset, NULL)
- PHP_FE(ncurses_bkgd, NULL)
- PHP_FE(ncurses_curs_set, NULL)
- PHP_FE(ncurses_delay_output, NULL)
- PHP_FE(ncurses_echochar, NULL)
- PHP_FE(ncurses_halfdelay, NULL)
- PHP_FE(ncurses_has_key, NULL)
- PHP_FE(ncurses_insch, NULL)
- PHP_FE(ncurses_insdelln, NULL)
- PHP_FE(ncurses_mouseinterval, NULL)
- PHP_FE(ncurses_napms, NULL)
- PHP_FE(ncurses_scrl, NULL)
- PHP_FE(ncurses_slk_attroff, NULL)
- PHP_FE(ncurses_slk_attron, NULL)
- PHP_FE(ncurses_slk_attrset, NULL)
- PHP_FE(ncurses_slk_color, NULL)
- PHP_FE(ncurses_slk_init, NULL)
- PHP_FE(ncurses_slk_set, NULL)
- PHP_FE(ncurses_typeahead, NULL)
- PHP_FE(ncurses_ungetch, NULL)
- PHP_FE(ncurses_vidattr, NULL)
- PHP_FE(ncurses_wrefresh, NULL)
- PHP_FE(ncurses_use_extended_names, NULL)
- PHP_FE(ncurses_bkgdset, NULL)
- PHP_FE(ncurses_filter, NULL)
- PHP_FE(ncurses_noqiflush, NULL)
- PHP_FE(ncurses_qiflush, NULL)
- PHP_FE(ncurses_timeout, NULL)
- PHP_FE(ncurses_use_env, NULL)
- PHP_FE(ncurses_addstr, NULL)
- PHP_FE(ncurses_putp, NULL)
- PHP_FE(ncurses_scr_dump, NULL)
- PHP_FE(ncurses_scr_init, NULL)
- PHP_FE(ncurses_scr_restore, NULL)
- PHP_FE(ncurses_scr_set, NULL)
- PHP_FE(ncurses_mvaddch, NULL)
- PHP_FE(ncurses_mvaddchnstr, NULL)
- PHP_FE(ncurses_addchnstr, NULL)
- PHP_FE(ncurses_mvaddchstr, NULL)
- PHP_FE(ncurses_addchstr, NULL)
- PHP_FE(ncurses_mvaddnstr, NULL)
- PHP_FE(ncurses_addnstr, NULL)
- PHP_FE(ncurses_mvaddstr, NULL)
- PHP_FE(ncurses_mvdelch, NULL)
- PHP_FE(ncurses_mvgetch, NULL)
- PHP_FE(ncurses_mvinch, NULL)
- PHP_FE(ncurses_mvwaddstr, NULL)
- PHP_FE(ncurses_insstr, NULL)
- PHP_FE(ncurses_instr, first_args_force_ref)
- PHP_FE(ncurses_mvhline, NULL)
- PHP_FE(ncurses_mvcur, NULL)
- PHP_FE(ncurses_init_color, NULL)
- PHP_FE(ncurses_border, NULL)
- PHP_FE(ncurses_assume_default_colors, NULL)
- PHP_FE(ncurses_define_key, NULL)
- PHP_FE(ncurses_hline, NULL)
- PHP_FE(ncurses_vline, NULL)
- PHP_FE(ncurses_keyok, NULL)
- PHP_FE(ncurses_termname, NULL)
- PHP_FE(ncurses_longname, NULL)
- PHP_FE(ncurses_mousemask, second_args_force_ref)
- PHP_FE(ncurses_getmouse, first_args_force_ref)
- PHP_FE(ncurses_ungetmouse, NULL)
- PHP_FE(ncurses_mouse_trafo, firstandsecond_args_force_ref)
- PHP_FE(ncurses_wmouse_trafo, secondandthird_args_force_ref)
- PHP_FE(ncurses_waddstr, NULL)
- PHP_FE(ncurses_wnoutrefresh, NULL)
- PHP_FE(ncurses_wclear, NULL)
- PHP_FE(ncurses_wcolor_set, NULL)
- PHP_FE(ncurses_wgetch, NULL)
- PHP_FE(ncurses_keypad, NULL)
- PHP_FE(ncurses_wmove, NULL)
- {NULL, NULL, NULL} /* Must be the last line in ncurses_functions[] */
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ncurses/ncurses_functions.c b/ext/ncurses/ncurses_functions.c
deleted file mode 100644
index b35e6257dc..0000000000
--- a/ext/ncurses/ncurses_functions.c
+++ /dev/null
@@ -1,1746 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Hartmut Holzgraefe <hartmut@six.de> |
- | Georg Richter <georg.richter@php-ev.de> |
- +----------------------------------------------------------------------+
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ncurses.h"
-
-#define FETCH_WINRES(r, z) ZEND_FETCH_RESOURCE(r, WINDOW *, z, -1, "ncurses_handle", le_ncurses); \
- if(!r) RETURN_FALSE;
-
-
-/* {{{ proto int ncurses_addch(int ch)
- Adds character at current position and advance cursor */
-PHP_FUNCTION(ncurses_addch)
-{
- long ch;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&ch)==FAILURE) {
- return;
- }
-
- RETURN_LONG(addch(ch));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_color_set(int pair)
- Sets fore- and background color */
-PHP_FUNCTION(ncurses_color_set)
-{
-#ifdef HAVE_NCURSES_COLOR_SET
- long pair;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&pair)==FAILURE) {
- return;
- }
- RETURN_LONG(color_set(pair,NULL));
-#else
- php_error(E_WARNING,"%s not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int ncurses_delwin(resource window)
- Deletes a ncurses window */
-PHP_FUNCTION(ncurses_delwin)
-{
- zval **handle;
- WINDOW *w;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &handle) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_WINRES(w,handle);
-
- zend_list_delete(Z_LVAL_PP(handle));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_end(void)
- Stops using ncurses, clean up the screen */
-PHP_FUNCTION(ncurses_end)
-{
- RETURN_LONG(endwin()); /* endialize the curses library */
-}
-/* }}} */
-
-/* {{{ proto int ncurses_getch(void)
- Reads a character from keyboard */
-PHP_FUNCTION(ncurses_getch)
-{
- RETURN_LONG(getch());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_has_colors(void)
- Checks if terminal has colors */
-PHP_FUNCTION(ncurses_has_colors)
-{
- RETURN_BOOL(has_colors());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_init(void)
- Initializes ncurses */
-PHP_FUNCTION(ncurses_init)
-{
- initscr(); /* initialize the curses library */
- keypad(stdscr, TRUE); /* enable keyboard mapping */
- (void) nonl(); /* tell curses not to do NL->CR/NL on output */
- (void) cbreak(); /* take input chars one at a time, no wait for \n */}
-/* }}} */
-
-/* {{{ proto int ncurses_init_pair(int pair, int fg, int bg)
- Allocates a color pair */
-PHP_FUNCTION(ncurses_init_pair)
-{
- long pair, fg, bg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",&pair,&fg,&bg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(init_pair(pair,fg,bg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_move(int y, int x)
- Moves output position */
-PHP_FUNCTION(ncurses_move)
-{
- long x, y;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",&y,&x)==FAILURE) {
- return;
- }
- RETURN_LONG(move(y,x));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_newwin(int rows, int cols, int y, int x)
- Creates a new window */
-PHP_FUNCTION(ncurses_newwin)
-{
- long rows,cols,y,x;
- WINDOW **pwin = (WINDOW **)emalloc(sizeof(WINDOW *));
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",&rows,&cols,&y,&x)==FAILURE) {
- return;
- }
-
- *pwin=newwin(rows,cols,y,x);
-
- if(!*pwin) {
- efree(pwin);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, pwin, le_ncurses);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_refresh(int ch)
- Refresh screen */
-PHP_FUNCTION(ncurses_refresh)
-{
- RETURN_LONG(refresh());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_start_color(void)
- Starts using colors */
-PHP_FUNCTION(ncurses_start_color)
-{
- RETURN_LONG(start_color());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_standout(void)
- Starts using 'standout' attribute */
-PHP_FUNCTION(ncurses_standout)
-{
- RETURN_LONG(standout());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_standend(void)
- Stops using 'standout' attribute */
-PHP_FUNCTION(ncurses_standend)
-{
- RETURN_LONG(standend());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_baudrate(void)
- Returns baudrate of terminal */
-PHP_FUNCTION(ncurses_baudrate)
-{
- RETURN_LONG(baudrate());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_beep(void)
- Let the terminal beep */
-PHP_FUNCTION(ncurses_beep)
-{
- RETURN_LONG(beep());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_can_change_color(void)
- Checks if we can change terminals colors */
-PHP_FUNCTION(ncurses_can_change_color)
-{
- RETURN_LONG(can_change_color());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_cbreak(void)
- Switches of input buffering */
-PHP_FUNCTION(ncurses_cbreak)
-{
- RETURN_LONG(cbreak());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_clear(void)
- Clears screen */
-PHP_FUNCTION(ncurses_clear)
-{
- RETURN_LONG(clear());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_clrtobot(void)
- Clears screen from current position to bottom */
-PHP_FUNCTION(ncurses_clrtobot)
-{
- RETURN_LONG(clrtobot());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_clrtoeol(void)
- Clears screen from current position to end of line */
-PHP_FUNCTION(ncurses_clrtoeol)
-{
- RETURN_LONG(clrtoeol());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_def_prog_mode(void)
- Saves terminals (program) mode */
-PHP_FUNCTION(ncurses_def_prog_mode)
-{
- RETURN_LONG(def_prog_mode());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_def_shell_mode(void)
- Saves terminal (shell) mode*/
-PHP_FUNCTION(ncurses_def_shell_mode)
-{
- RETURN_LONG(def_shell_mode());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_delch(void)
- Deletes character at current position, move rest of line left */
-PHP_FUNCTION(ncurses_delch)
-{
- RETURN_LONG(delch());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_deleteln(void)
- Deletes line at current position, move rest of screen up */
-PHP_FUNCTION(ncurses_deleteln)
-{
- RETURN_LONG(deleteln());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_doupdate(void)
- Writes all prepared refreshes to terminal */
-PHP_FUNCTION(ncurses_doupdate)
-{
- RETURN_LONG(doupdate());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_echo(void)
- Activates keyboard input echo */
-PHP_FUNCTION(ncurses_echo)
-{
- RETURN_LONG(echo());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_erase(void)
- Erases terminal screen */
-PHP_FUNCTION(ncurses_erase)
-{
- RETURN_LONG(erase());
-}
-/* }}} */
-
-/* {{{ proto string ncurses_erasechar(void)
- Returns current erase character */
-PHP_FUNCTION(ncurses_erasechar)
-{
- char temp[2];
-
- temp[0] = erasechar();
- temp[1] = '\0';
-
- RETURN_STRINGL (temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_flash(void)
- Flashes terminal screen (visual bell) */
-PHP_FUNCTION(ncurses_flash)
-{
- RETURN_LONG(flash());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_flushinp(void)
- Flushes keyboard input buffer */
-PHP_FUNCTION(ncurses_flushinp)
-{
- RETURN_LONG(flushinp());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_has_ic(void)
- Checks for insert- and delete-capabilities */
-PHP_FUNCTION(ncurses_has_ic)
-{
- RETURN_LONG(has_ic());
-}
-/* }}} */
-
-
-/* {{{ proto bool ncurses_has_il(void)
- Checks for line insert- and delete-capabilities */
-PHP_FUNCTION(ncurses_has_il)
-{
- RETURN_LONG(has_il());
-}
-/* }}} */
-
-/* {{{ proto string ncurses_inch(void)
- Gets character and attribute at current position */
-PHP_FUNCTION(ncurses_inch)
-{
- char temp[2];
-
- temp[0] = inch();
- temp[1] = '\0';
-
- RETURN_STRINGL (temp, 1, 1);
-}
-
-/* {{{ proto bool ncurses_insertln(void)
- Inserts a line, move rest of screen down */
-PHP_FUNCTION(ncurses_insertln)
-{
- RETURN_LONG(insertln());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_isendwin(void)
- Ncurses is in endwin mode, normal screen output may be performed */
-PHP_FUNCTION(ncurses_isendwin)
-{
- RETURN_LONG(isendwin());
-}
-/* }}} */
-
-/* {{{ proto string ncurses_killchar(void)
- Returns current line kill character */
-PHP_FUNCTION(ncurses_killchar)
-{
- char temp[2];
-
- temp[0] = killchar();
- temp[1] = '\0';
-
- RETURN_STRINGL (temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_nl(void)
- Translates newline and carriage return / line feed */
-PHP_FUNCTION(ncurses_nl)
-{
- RETURN_LONG(nl());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_nocbreak(void)
- Switches terminal to cooked mode */
-PHP_FUNCTION(ncurses_nocbreak)
-{
- RETURN_LONG(nocbreak());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_noecho(void)
- Switches off keyboard input echo */
-PHP_FUNCTION(ncurses_noecho)
-{
- RETURN_LONG(noecho());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_nonl(void)
- Do not ranslate newline and carriage return / line feed */
-PHP_FUNCTION(ncurses_nonl)
-{
- RETURN_LONG(nonl());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_noraw(void)
- Switches terminal out of raw mode */
-PHP_FUNCTION(ncurses_noraw)
-{
- RETURN_LONG(noraw());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_raw(void)
- Switches terminal into raw mode */
-PHP_FUNCTION(ncurses_raw)
-{
- RETURN_LONG(raw());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_resetty(void)
- Restores saved terminal state */
-PHP_FUNCTION(ncurses_resetty)
-{
- RETURN_LONG(resetty());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_savetty(void)
- Saves terminal state */
-PHP_FUNCTION(ncurses_savetty)
-{
- RETURN_LONG(savetty());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_termattrs(void)
- Returns a logical OR of all attribute flags supported by terminal */
-PHP_FUNCTION(ncurses_termattrs)
-{
- RETURN_LONG(termattrs());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_use_default_colors(void)
- Assigns terminal default colors to color id -1 */
-PHP_FUNCTION(ncurses_use_default_colors)
-{
- RETURN_LONG(use_default_colors());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_clear(void)
- */
-
-/* {{{ proto bool ncurses_slk_attr(void)
- Returns current soft label keys attribute */
-PHP_FUNCTION(ncurses_slk_attr)
-{
- RETURN_LONG(slk_attr());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_clear(void)
- Clears soft label keys from screen */
-PHP_FUNCTION(ncurses_slk_clear)
-{
- RETURN_LONG(slk_clear());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_noutrefresh(void)
- Copies soft label keys to virtual screen */
-PHP_FUNCTION(ncurses_slk_noutrefresh)
-{
- RETURN_LONG(slk_noutrefresh());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_refresh(void)
- Copies soft label keys to screen */
-PHP_FUNCTION(ncurses_slk_refresh)
-{
- RETURN_LONG(slk_refresh());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_restore(void)
- Restores soft label keys */
-PHP_FUNCTION(ncurses_slk_restore)
-{
- RETURN_LONG(slk_restore());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_touch(void)
- Forces output when ncurses_slk_noutrefresh is performed */
-PHP_FUNCTION(ncurses_slk_touch)
-{
- RETURN_LONG(slk_touch());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_set(int labelnr, string label, int format)
- Sets function key labels */
-PHP_FUNCTION(ncurses_slk_set)
-{
- char *str;
- int len;
- long labelnr;
- long format;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsl",&labelnr, &str, &len, &format)==FAILURE) {
- return;
- }
- RETURN_BOOL(slk_set(labelnr, str, format));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_attroff(int attributes)
- Turns off the given attributes */
-PHP_FUNCTION(ncurses_attroff)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(attroff(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_attron(int attributes)
- Turns on the given attributes */
-PHP_FUNCTION(ncurses_attron)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(attron(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_attrset(int attributes)
- Sets given attributes */
-PHP_FUNCTION(ncurses_attrset)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(attrset(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_bkgd(int attrchar)
- Sets background property for terminal screen */
-PHP_FUNCTION(ncurses_bkgd)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(bkgd(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_curs_set(int visibility)
- Sets cursor state */
-PHP_FUNCTION(ncurses_curs_set)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(curs_set(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_delay_output(int milliseconds)
- Delays output on terminal using padding characters */
-PHP_FUNCTION(ncurses_delay_output)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(delay_output(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_echochar(int character)
- Single character output including refresh */
-PHP_FUNCTION(ncurses_echochar)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(echochar(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_halfdelay(int tenth)
- Puts terminal into halfdelay mode */
-PHP_FUNCTION(ncurses_halfdelay)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(halfdelay(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_has_key(int keycode)
- Checks for presence of a function key on terminal keyboard */
-PHP_FUNCTION(ncurses_has_key)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(has_key(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insch(int character)
- Inserts character moving rest of line including character at current position */
-PHP_FUNCTION(ncurses_insch)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(insch(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insdelln(int count)
- Inserts lines before current line scrolling down (negative numbers delete and scroll up) */
-PHP_FUNCTION(ncurses_insdelln)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(insdelln(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mouseinterval(int milliseconds)
- Sets timeout for mouse button clicks */
-PHP_FUNCTION(ncurses_mouseinterval)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mouseinterval(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_napms(int milliseconds)
- Sleep */
-PHP_FUNCTION(ncurses_napms)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(napms(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scrl(int count)
- Scrolls window content up or down without changing current position */
-PHP_FUNCTION(ncurses_scrl)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(scrl(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attroff(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_slk_attroff)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(slk_attroff(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attron(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_slk_attron)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(slk_attron(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attrset(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_slk_attrset)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(slk_attrset(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_color(int intarg)
- Sets color for soft label keys*/
-PHP_FUNCTION(ncurses_slk_color)
-{
-#ifdef HAVE_NCURSES_SLK_COLOR
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(slk_color(intarg));
-#else
- php_error(E_WARNING,"%s not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_init(int intarg)
- Inits soft label keys */
-PHP_FUNCTION(ncurses_slk_init)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(slk_init(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_typeahead(int fd)
- Specifys different filedescriptor for typeahead checking */
-PHP_FUNCTION(ncurses_typeahead)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(typeahead(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_ungetch(int keycode)
- Puts a character back into the input stream */
-PHP_FUNCTION(ncurses_ungetch)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(ungetch(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_vidattr(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_vidattr)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(vidattr(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_use_extended_names(bool flag)
- Controls use of extended names in terminfo descriptions */
-PHP_FUNCTION(ncurses_use_extended_names)
-{
-#ifdef HAVE_NCURSES_USE_EXTENDED_NAMES
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- RETURN_LONG(use_extended_names(intarg));
-#else
- php_error(E_WARNING,"%s not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto void ncurses_bkgdset(int attrchar)
- Controls screen background */
-PHP_FUNCTION(ncurses_bkgdset)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- bkgdset(intarg);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_filter(void)
- */
-PHP_FUNCTION(ncurses_filter)
-{
- filter();
-}
-/* }}} */
-
-/* {{{ proto int ncurses_noqiflush(void)
- Do not flush on signal characters*/
-PHP_FUNCTION(ncurses_noqiflush)
-{
- noqiflush();
-}
-/* }}} */
-
-/* {{{ proto int ncurses_qiflush(void)
- Flushes on signal characters */
-PHP_FUNCTION(ncurses_qiflush)
-{
- qiflush();
-}
-/* }}} */
-
-/* {{{ proto void ncurses_timeout(int millisec)
- Sets timeout for special key sequences */
-PHP_FUNCTION(ncurses_timeout)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- timeout(intarg);
-}
-/* }}} */
-
-/* {{{ proto void ncurses_use_env(bool flag)
- Controls use of environment information about terminal size */
-PHP_FUNCTION(ncurses_use_env)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",&intarg)==FAILURE) {
- return;
- }
-
- use_env(intarg);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addstr(string text)
- Outputs text at current position */
-PHP_FUNCTION(ncurses_addstr)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(addstr(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_putp(string text)
- ??? */
-PHP_FUNCTION(ncurses_putp)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(putp(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_dump(string filename)
- Dumps screen content to file */
-PHP_FUNCTION(ncurses_scr_dump)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(scr_dump(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_init(string filename)
- Initializes screen from file dump */
-PHP_FUNCTION(ncurses_scr_init)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(scr_init(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_restore(string filename)
- Restores screen from file dump */
-PHP_FUNCTION(ncurses_scr_restore)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(scr_restore(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_set(string filename)
- Inherits screen from file dump */
-PHP_FUNCTION(ncurses_scr_set)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(scr_set(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddch(int y, int x, int c)
- Moves current position and add character */
-PHP_FUNCTION(ncurses_mvaddch)
-{
- long y,x,c;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",&y,&x,&c)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvaddch(y,x,c));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddchnstr(int y, int x, string s, int n)
- Moves position and add attrributed string with specified length */
-PHP_FUNCTION(ncurses_mvaddchnstr)
-{
- long y,x,n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llsl",&y,&x,&str,&str_len,&n)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvaddchnstr(y,x,(chtype *)str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addchnstr(string s, int n)
- Adds attributed string with specified length at current position */
-PHP_FUNCTION(ncurses_addchnstr)
-{
- long n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl",&str,&str_len,&n)==FAILURE) {
- return;
- }
-
- RETURN_LONG(addchnstr((chtype *)str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddchstr(int y, int x, string s)
- Moves position and add attributed string */
-PHP_FUNCTION(ncurses_mvaddchstr)
-{
- long y,x;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls",&y,&x,&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvaddchstr(y,x,(chtype *)str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addchstr(string s)
- Adds attributed string at current position */
-PHP_FUNCTION(ncurses_addchstr)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(addchstr((chtype *)str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddnstr(int y, int x, string s, int n)
- Moves position and add string with specified length */
-PHP_FUNCTION(ncurses_mvaddnstr)
-{
- long y,x,n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llsl",&y,&x,&str,&str_len,&n)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvaddnstr(y,x,str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addnstr(string s, int n)
- Adds string with specified length at current position */
-PHP_FUNCTION(ncurses_addnstr)
-{
- long n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl",&str,&str_len,&n)==FAILURE) {
- return;
- }
-
- RETURN_LONG(addnstr(str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddstr(int y, int x, string s)
- Moves position and add string */
-PHP_FUNCTION(ncurses_mvaddstr)
-{
- long y,x;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls",&y,&x,&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvaddstr(y,x,str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvdelch(int y, int x)
- Moves position and delete character, shift rest of line left */
-PHP_FUNCTION(ncurses_mvdelch)
-{
- long y,x;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls",&y,&x)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvdelch(y,x));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_mvgetch(int y, int x)
- Moves position and get character at new position */
-PHP_FUNCTION(ncurses_mvgetch)
-{
- long y,x;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls",&y,&x)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvgetch(y,x));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvinch(int y, int x)
- Moves position and get attributed character at new position */
-PHP_FUNCTION(ncurses_mvinch)
-{
- long y,x;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls",&y,&x)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvinch(y,x));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insstr(string text)
- Inserts string at current position, moving rest of line right */
-PHP_FUNCTION(ncurses_insstr)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&str,&str_len)==FAILURE) {
- return;
- }
-
- RETURN_LONG(insstr(str));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_instr(string buffer)
- Reads string from terminal screen */
-PHP_FUNCTION(ncurses_instr)
-{
- ulong retval;
- zval **param;
- char *str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &param) == FAILURE ){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(param);
-
- str = (char *)emalloc(COLS + 1);
- retval = instr(str);
-
- ZVAL_STRING(*param, str, strlen(str));
- efree(str);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_mvhline(int y, int x, int attrchar, int n)
- Sets new position and draw a horizontal line using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_mvhline)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",&i1,&i2,&i3,&i4)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvhline(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvvline(int y, int x, int attrchar, int n)
- Sets new position and draw a vertical line using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_mvvline)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",&i1,&i2,&i3,&i4)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvvline(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvcur(int old_y,int old_x, int new_y, int new_x)
- Moves cursor immediately */
-PHP_FUNCTION(ncurses_mvcur)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",&i1,&i2,&i3,&i4)==FAILURE) {
- return;
- }
-
- RETURN_LONG(mvcur(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_init_color(int color, int r, int g, int b)
- Sets new RGB value for color */
-PHP_FUNCTION(ncurses_init_color)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",&i1,&i2,&i3,&i4)==FAILURE) {
- return;
- }
-
- RETURN_LONG(init_color(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_border(int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)
- Draws a border around the screen using attributed characters */
-PHP_FUNCTION(ncurses_border)
-{
- long i1,i2,i3,i4,i5,i6,i7,i8;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llllllll",&i1,&i2,&i3,&i4,&i5,&i6,&i7,&i8)==FAILURE) {
- return;
- }
-
- RETURN_LONG(border(i1,i2,i3,i4,i5,i6,i7,i8));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_assume_default_colors(int fg, int bg)
- Defines default colors for color 0 */
-PHP_FUNCTION(ncurses_assume_default_colors)
-{
-#ifdef HAVE_NCURSES_ASSUME_DEFAULT_COLORS
- long i1,i2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",&i1,&i2)==FAILURE) {
- return;
- }
-
- RETURN_LONG(assume_default_colors(i1,i2));
-#else
- php_error(E_WARNING,"%s not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int ncurses_define_key(string definition, int keycode)
- Defines a keycode */
-PHP_FUNCTION(ncurses_define_key)
-{
- long n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl",&str,&str_len,&n)==FAILURE) {
- return;
- }
-
- RETURN_LONG(define_key(str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_hline(int charattr, int n)
- Draws a horizontal line at current position using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_hline)
-{
- long i1,i2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",&i1,&i2)==FAILURE) {
- return;
- }
-
- RETURN_LONG(hline(i1,i2));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_vline(int charattr, int n)
- Draws a vertical line at current position using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_vline)
-{
- long i1,i2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",&i1,&i2)==FAILURE) {
- return;
- }
-
- RETURN_LONG(vline(i1,i2));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_keyok(int keycode, bool enable)
- Enables or disable a keycode */
-PHP_FUNCTION(ncurses_keyok)
-{
- long i,b;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",&i,&b)==FAILURE) {
- return;
- }
-
- RETURN_LONG(hline(i,b));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvwaddstr(resource window, int y, int x, string text)
- Adds string at new position in window */
-PHP_FUNCTION(ncurses_mvwaddstr)
-{
- zval **handle, **x, **y, **text;
- WINDOW **w;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &handle, &y, &x, &text) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_WINRES(w,handle);
-
- convert_to_long_ex(y);
- convert_to_long_ex(x);
- convert_to_string_ex(text);
-
-
- RETURN_LONG(mvwaddstr(*w,Z_LVAL_PP(y),Z_LVAL_PP(x),Z_STRVAL_PP(text)));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wrefresh(resource window)
- Refreshes window on terminal screen */
-PHP_FUNCTION(ncurses_wrefresh)
-{
- zval **handle;
- WINDOW **w;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &handle) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_WINRES(w,handle);
-
- RETURN_LONG(wrefresh(*w));
-}
-/* }}} */
-
-/* {{{ proto string ncurses_termname(void)
- Returns terminal name */
-PHP_FUNCTION(ncurses_termname)
-{
- char temp[15];
-
- strcpy (temp, termname());
- RETURN_STRINGL (temp, strlen(temp), 1);
-}
-/* }}} */
-
-/* {{{ proto string ncurses_longname(void)
- Returns terminal description */
-PHP_FUNCTION(ncurses_longname)
-{
- char temp[128];
-
- strcpy (temp, longname());
- RETURN_STRINGL (temp, strlen(temp), 1);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mousemask(int newmask, int oldmask)
- Returns and sets mouse options */
-PHP_FUNCTION(ncurses_mousemask)
-{
- ulong oldmask;
- ulong retval;
- zval **param, **newmask;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &newmask, &param) == FAILURE ){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(newmask);
-
- retval = mousemask(Z_LVAL_PP(newmask), &oldmask);
-
- Z_TYPE_PP(param) = IS_LONG;
- Z_LVAL_PP(param) = oldmask;
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_getmouse(array mevent)
- Reads mouse event from queue */
-PHP_FUNCTION(ncurses_getmouse)
-{
- zval **arg;
- MEVENT mevent;
- ulong retval;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- pval_destructor(*arg);
- array_init(*arg);
-
- retval = getmouse(&mevent);
-
- add_assoc_long(*arg, "id", mevent.id);
- add_assoc_long(*arg, "x", mevent.x);
- add_assoc_long(*arg, "y", mevent.y);
- add_assoc_long(*arg, "z", mevent.z);
- add_assoc_long(*arg, "mmask", mevent.bstate);
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_ungetmouse(array mevent)
- Pushes mouse event to queue */
-PHP_FUNCTION(ncurses_ungetmouse)
-{
- zval **arg, **pvalue;
- MEVENT mevent;
- ulong retval;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg) != IS_ARRAY){
- php_error(E_WARNING, "ncurses_ungetmouse: expected mevent as array");
- RETURN_FALSE;
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arg), "id", sizeof("id"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.id = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arg), "x", sizeof("x"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.x = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arg), "y", sizeof("y"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.y = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arg), "z", sizeof("z"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.z = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arg), "mmask", sizeof("mmask"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.bstate = Z_LVAL_PP(pvalue);
- }
-
- retval = ungetmouse(&mevent);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_mouse_trafo(int y, int x, bool toscreen)
- Transforms coordinates */
-PHP_FUNCTION(ncurses_mouse_trafo)
-{
- zval **x, **y, **toscreen;
- ulong nx, ny, retval;
-
- WINDOW **win;
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &y, &x, &toscreen) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_boolean_ex(toscreen);
-
- ny = Z_LVAL_PP(y);
- nx = Z_LVAL_PP(x);
-
- retval = mouse_trafo (&ny, &nx, Z_LVAL_PP(toscreen));
-
- Z_LVAL_PP(y) = ny;
- Z_LVAL_PP(x) = nx;
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_wmouse_trafo(resource window, int y, int x, bool toscreen)
- Transforms window/stdscr coordinates */
-PHP_FUNCTION(ncurses_wmouse_trafo)
-{
- zval **handle, **x, **y, **toscreen;
- ulong nx, ny, retval;
- WINDOW **win;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &y, &x, &toscreen) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_WINRES(win, handle);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_boolean_ex(toscreen);
-
- ny = Z_LVAL_PP(y);
- nx = Z_LVAL_PP(x);
-
- retval = wmouse_trafo (*win, &ny, &nx, Z_LVAL_PP(toscreen));
-
- Z_LVAL_PP(y) = ny;
- Z_LVAL_PP(x) = nx;
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_wmove(resource window, int y, int x)
- Moves windows output position */
-PHP_FUNCTION(ncurses_wmove)
-{
- zval **handle, **x, **y;
- WINDOW **win;
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &handle, &y, &x) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_WINRES(win, handle);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
-
- RETURN_LONG(wmove(*win, Z_LVAL_PP(y), Z_LVAL_PP(x)));
-}
-
-/* {{{ proto int ncurses_keypad(resource window, bool bf)
- Turns keypad on or off */
-PHP_FUNCTION(ncurses_keypad)
-{
- zval **handle, **bf;
- WINDOW **win;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &handle, &bf) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_WINRES(win, handle);
-
- convert_to_long_ex(bf);
-
- RETURN_LONG(keypad(*win, Z_LVAL_PP(bf)));
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wcolor_set(resource window, int color_pair)
- Sets windows color pairings */
-PHP_FUNCTION(ncurses_wcolor_set)
-{
- zval **handle, **color_pair, **opts;
- WINDOW **win;
-
-#ifdef HAVE_NCURSES_COLOR_SET
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2,&handle, &color_pair) == FAILURE)
- WRONG_PARAM_COUNT;
-
- FETCH_WINRES(win, handle);
- convert_to_long_ex(color_pair);
-
- RETURN_LONG(wcolor_set(*win, Z_LVAL_PP(color_pair), 0));
-#else
- php_error(E_WARNING,"%s not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wclear(resource window)
- Clears window */
-
-PHP_FUNCTION(ncurses_wclear)
-{
- zval **handle;
- WINDOW **win;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &handle) == FAILURE)
- WRONG_PARAM_COUNT;
-
- FETCH_WINRES(win, handle);
-
- RETURN_LONG(wclear(*win));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wnoutrefresh(resource window)
- Copies window to virtual screen */
-PHP_FUNCTION(ncurses_wnoutrefresh)
-{
- zval **handle;
- WINDOW **win;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &handle) == FAILURE)
- WRONG_PARAM_COUNT;
-
- FETCH_WINRES(win, handle);
-
- RETURN_LONG(wnoutrefresh(*win));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_waddstr(resource window, string str [, int n])
- Outputs text at current postion in window */
-PHP_FUNCTION(ncurses_waddstr)
-{
- zval **handle, **str, **n;
- WINDOW **win;
-
- if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &handle, &str) == FAILURE)
- WRONG_PARAM_COUNT;
-
- FETCH_WINRES(win, handle);
-
- RETURN_LONG(waddstr(*win, Z_STRVAL_PP(str)));
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &handle, &str, &n) == FAILURE)
- WRONG_PARAM_COUNT;
-
- FETCH_WINRES(win, handle);
- RETURN_LONG(waddnstr(*win, Z_STRVAL_PP(str), Z_LVAL_PP(n)));
- } else
- WRONG_PARAM_COUNT;
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wgetch(resource window)
- Reads a character from keyboard (window) */
-PHP_FUNCTION(ncurses_wgetch)
-{
- zval **handle;
- WINDOW **win;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &handle) == FAILURE)
- WRONG_PARAM_COUNT;
-
- FETCH_WINRES(win, handle);
-
- RETURN_LONG(wgetch(*win));
-}
-/* }}} */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ncurses/php_ncurses.h b/ext/ncurses/php_ncurses.h
deleted file mode 100644
index 0d4d9dc010..0000000000
--- a/ext/ncurses/php_ncurses.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_NCURSES_H
-#define PHP_NCURSES_H
-
-#include <curses.h>
-
-extern int le_ncurses;
-
-extern zend_module_entry ncurses_module_entry;
-#define phpext_ncurses_ptr &ncurses_module_entry
-
-extern function_entry ncurses_functions[];
-#include "php_ncurses_fe.h"
-
-#ifdef PHP_WIN32
-#define PHP_NCURSES_API __declspec(dllexport)
-#else
-#define PHP_NCURSES_API
-#endif
-
-PHP_MINIT_FUNCTION(ncurses);
-PHP_MSHUTDOWN_FUNCTION(ncurses);
-PHP_RINIT_FUNCTION(ncurses);
-PHP_RSHUTDOWN_FUNCTION(ncurses);
-PHP_MINFO_FUNCTION(ncurses);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(ncurses)
- int global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(ncurses)
-*/
-
-/* In every function that needs to use variables in php_ncurses_globals,
- do call NCURSES_LS_FETCH(); after declaring other variables used by
- that function, and always refer to them as NCURSES_G(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define NCURSES_G(v) (ncurses_globals->v)
-#define NCURSES_LS_FETCH() zend_ncurses_globals *ncurses_globals = ts_resource(ncurses_globals_id)
-#else
-#define NCURSES_G(v) (ncurses_globals.v)
-#define NCURSES_LS_FETCH()
-#endif
-
-#endif /* PHP_NCURSES_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ncurses/php_ncurses_fe.h b/ext/ncurses/php_ncurses_fe.h
deleted file mode 100644
index 158e32fced..0000000000
--- a/ext/ncurses/php_ncurses_fe.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Hartmut Holzgraefe <hartmut@six.de> |
- | Georg Richter <georg.richter@php-ev.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_NCURSES_FE_H
-#define PHP_NCURSES_FE_H
-
-PHP_FUNCTION(ncurses_addch);
-PHP_FUNCTION(ncurses_color_set);
-PHP_FUNCTION(ncurses_delwin);
-PHP_FUNCTION(ncurses_end);
-PHP_FUNCTION(ncurses_getch);
-PHP_FUNCTION(ncurses_has_colors);
-PHP_FUNCTION(ncurses_init);
-PHP_FUNCTION(ncurses_init_pair);
-PHP_FUNCTION(ncurses_move);
-PHP_FUNCTION(ncurses_newwin);
-PHP_FUNCTION(ncurses_refresh);
-PHP_FUNCTION(ncurses_start_color);
-PHP_FUNCTION(ncurses_standout);
-PHP_FUNCTION(ncurses_standend);
-PHP_FUNCTION(ncurses_baudrate);
-PHP_FUNCTION(ncurses_beep);
-PHP_FUNCTION(ncurses_can_change_color);
-PHP_FUNCTION(ncurses_cbreak);
-PHP_FUNCTION(ncurses_clear);
-PHP_FUNCTION(ncurses_clrtobot);
-PHP_FUNCTION(ncurses_clrtoeol);
-PHP_FUNCTION(ncurses_def_prog_mode);
-PHP_FUNCTION(ncurses_def_shell_mode);
-PHP_FUNCTION(ncurses_delch);
-PHP_FUNCTION(ncurses_deleteln);
-PHP_FUNCTION(ncurses_doupdate);
-PHP_FUNCTION(ncurses_echo);
-PHP_FUNCTION(ncurses_erase);
-PHP_FUNCTION(ncurses_erasechar);
-PHP_FUNCTION(ncurses_flash);
-PHP_FUNCTION(ncurses_flushinp);
-PHP_FUNCTION(ncurses_has_ic);
-PHP_FUNCTION(ncurses_has_il);
-PHP_FUNCTION(ncurses_inch);
-PHP_FUNCTION(ncurses_insertln);
-PHP_FUNCTION(ncurses_isendwin);
-PHP_FUNCTION(ncurses_killchar);
-PHP_FUNCTION(ncurses_nl);
-PHP_FUNCTION(ncurses_nocbreak);
-PHP_FUNCTION(ncurses_noecho);
-PHP_FUNCTION(ncurses_nonl);
-PHP_FUNCTION(ncurses_noraw);
-PHP_FUNCTION(ncurses_raw);
-PHP_FUNCTION(ncurses_resetty);
-PHP_FUNCTION(ncurses_savetty);
-PHP_FUNCTION(ncurses_termattrs);
-PHP_FUNCTION(ncurses_use_default_colors);
-PHP_FUNCTION(ncurses_slk_attr);
-PHP_FUNCTION(ncurses_slk_clear);
-PHP_FUNCTION(ncurses_slk_noutrefresh);
-PHP_FUNCTION(ncurses_slk_refresh);
-PHP_FUNCTION(ncurses_slk_restore);
-PHP_FUNCTION(ncurses_slk_touch);
-PHP_FUNCTION(ncurses_attroff);
-PHP_FUNCTION(ncurses_attron);
-PHP_FUNCTION(ncurses_attrset);
-PHP_FUNCTION(ncurses_bkgd);
-PHP_FUNCTION(ncurses_curs_set);
-PHP_FUNCTION(ncurses_delay_output);
-PHP_FUNCTION(ncurses_echochar);
-PHP_FUNCTION(ncurses_halfdelay);
-PHP_FUNCTION(ncurses_has_key);
-PHP_FUNCTION(ncurses_insch);
-PHP_FUNCTION(ncurses_insdelln);
-PHP_FUNCTION(ncurses_mouseinterval);
-PHP_FUNCTION(ncurses_napms);
-PHP_FUNCTION(ncurses_scrl);
-PHP_FUNCTION(ncurses_slk_attroff);
-PHP_FUNCTION(ncurses_slk_attron);
-PHP_FUNCTION(ncurses_slk_attrset);
-PHP_FUNCTION(ncurses_slk_color);
-PHP_FUNCTION(ncurses_slk_init);
-PHP_FUNCTION(ncurses_slk_set);
-PHP_FUNCTION(ncurses_typeahead);
-PHP_FUNCTION(ncurses_ungetch);
-PHP_FUNCTION(ncurses_vidattr);
-PHP_FUNCTION(ncurses_wrefresh);
-PHP_FUNCTION(ncurses_use_extended_names);
-PHP_FUNCTION(ncurses_bkgdset);
-PHP_FUNCTION(ncurses_filter);
-PHP_FUNCTION(ncurses_noqiflush);
-PHP_FUNCTION(ncurses_qiflush);
-PHP_FUNCTION(ncurses_timeout);
-PHP_FUNCTION(ncurses_use_env);
-PHP_FUNCTION(ncurses_addstr);
-PHP_FUNCTION(ncurses_putp);
-PHP_FUNCTION(ncurses_scr_dump);
-PHP_FUNCTION(ncurses_scr_init);
-PHP_FUNCTION(ncurses_scr_restore);
-PHP_FUNCTION(ncurses_scr_set);
-PHP_FUNCTION(ncurses_mvaddch);
-PHP_FUNCTION(ncurses_mvaddchnstr);
-PHP_FUNCTION(ncurses_addchnstr);
-PHP_FUNCTION(ncurses_mvaddchstr);
-PHP_FUNCTION(ncurses_addchstr);
-PHP_FUNCTION(ncurses_mvaddnstr);
-PHP_FUNCTION(ncurses_addnstr);
-PHP_FUNCTION(ncurses_mvaddstr);
-PHP_FUNCTION(ncurses_mvdelch);
-PHP_FUNCTION(ncurses_mvgetch);
-PHP_FUNCTION(ncurses_mvinch);
-PHP_FUNCTION(ncurses_mvwaddstr);
-PHP_FUNCTION(ncurses_insstr);
-PHP_FUNCTION(ncurses_instr);
-PHP_FUNCTION(ncurses_mvhline);
-PHP_FUNCTION(ncurses_mvcur);
-PHP_FUNCTION(ncurses_init_color);
-PHP_FUNCTION(ncurses_border);
-PHP_FUNCTION(ncurses_assume_default_colors);
-PHP_FUNCTION(ncurses_define_key);
-PHP_FUNCTION(ncurses_hline);
-PHP_FUNCTION(ncurses_vline);
-PHP_FUNCTION(ncurses_keyok);
-PHP_FUNCTION(ncurses_termname);
-PHP_FUNCTION(ncurses_longname);
-PHP_FUNCTION(ncurses_mousemask);
-PHP_FUNCTION(ncurses_getmouse);
-PHP_FUNCTION(ncurses_ungetmouse);
-PHP_FUNCTION(ncurses_mouse_trafo);
-PHP_FUNCTION(ncurses_wmouse_trafo);
-PHP_FUNCTION(ncurses_waddstr);
-PHP_FUNCTION(ncurses_wnoutrefresh);
-PHP_FUNCTION(ncurses_wclear);
-PHP_FUNCTION(ncurses_wcolor_set);
-PHP_FUNCTION(ncurses_wgetch);
-PHP_FUNCTION(ncurses_keypad);
-PHP_FUNCTION(ncurses_wmove);
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ncurses/tests/001.phpt b/ext/ncurses/tests/001.phpt
deleted file mode 100644
index 90d9c1452f..0000000000
--- a/ext/ncurses/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for ncurses presence
---SKIPIF--
-<?php if (!extension_loaded("ncurses")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "ncurses extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-ncurses extension is available \ No newline at end of file
diff --git a/ext/notes/notes.dsp b/ext/notes/notes.dsp
deleted file mode 100644
index 20a51d81ca..0000000000
--- a/ext/notes/notes.dsp
+++ /dev/null
@@ -1,202 +0,0 @@
-# Microsoft Developer Studio Project File - Name="notes" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=notes - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "notes.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "notes.mak" CFG="notes - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "notes - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "notes - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "notes - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "notes - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "notes - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "notes - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D "MYSQL_EXPORTS" /D "COMPILE_DL_NOTES" /D HAVE_NOTES=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4nts.lib /nologo /dll /machine:I386 /out:"Release/php_notes.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "notes - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "MYSQL_EXPORTS" /D "COMPILE_DL_NOTES" /D HAVE_NOTES=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4nts.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_notes.dll" /pdbtype:sept /libpath:"..\..\..\MySQL\lib\Debug" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "notes - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_NOTES=1 /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_NOTES" /D HAVE_NOTES=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll /debug /machine:I386 /out:"Debug_TS/php_notes.dll" /pdbtype:sept /libpath:"..\..\..\MySQL\lib\Debug" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "notes - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_NOTES" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_NOTES=1 /D "NT" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib notes.lib /nologo /dll /machine:I386 /out:"Release_TS/php_notes.dll" /libpath:"..\..\Release_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "notes - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "notes___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "notes___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_NOTES" /D HAVE_NOTES=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_NOTES" /D HAVE_NOTES=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll /machine:I386 /out:"Release_TS/php_notes.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll /machine:I386 /out:"Release_TS_inline/php_notes.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "notes - Win32 Release"
-# Name "notes - Win32 Debug"
-# Name "notes - Win32 Debug_TS"
-# Name "notes - Win32 Release_TS"
-# Name "notes - Win32 Release_TS_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_notes.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_notes.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\Readme_w32.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/notes/notes.dsw b/ext/notes/notes.dsw
deleted file mode 100644
index 372850224a..0000000000
--- a/ext/notes/notes.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "notes"=".\notes.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/ext/notes/php_notes.c b/ext/notes/php_notes.c
deleted file mode 100644
index 39238f37f0..0000000000
--- a/ext/notes/php_notes.c
+++ /dev/null
@@ -1,2712 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_01.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Brad Atkins <brad@youreshop.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef COMPILE_DL_NOTES
-#define HAVE_NOTES 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_notes.h"
-#include "ext/standard/info.h"
-
-#include <notes_global.h>
-#include <nsfdb.h>
-#include <nsfdata.h>
-#include <osmisc.h>
-#include <miscerr.h>
-#include <nif.h>
-#include <nsfnote.h>
-#include <editods.h>
-#include <osmem.h>
-#include <stdnames.h>
-#include <nsfsearc.h>
-#include <colorid.h>
-#include <names.h>
-#include <stdnames.h>
-#include <nsferr.h>
-
-/* notes_unread */
-
-#include <idtable.h>
-#include <kfm.h>
-
-/* notes_header_info, notes_body */
-
-#include <malloc.h>
-#include <io.h>
-#include <direct.h>
-#include <fcntl.h>
-
-#include <globerr.h>
-#include <notes_mail.h>
-#include <mailserv.h>
-#include <nsf.h>
-#include <osfile.h> /* OSPathNetConstruct */
-#include <osenv.h> /* OSGetEnvironmentString */
-
-/* notes_nav_create */
-#include <vmods.h>
-
-/* notes_search */
-
-#include <ft.h>
-#include <textlist.h>
-
-/* notes_list */
-
-#define STRING_LENGTH 256
-
-function_entry notes_functions[] = {
- PHP_FE(notes_create_db, NULL)
- PHP_FE(notes_drop_db, NULL)
- PHP_FE(notes_version, NULL)
- PHP_FE(notes_create_note, NULL)
- PHP_FE(notes_unread, NULL)
- PHP_FE(notes_mark_read, NULL)
- PHP_FE(notes_mark_unread, NULL)
- PHP_FE(notes_header_info, NULL)
- PHP_FE(notes_body, NULL)
- PHP_FE(notes_find_note, NULL)
- PHP_FE(notes_nav_create, NULL)
- PHP_FE(notes_search, NULL)
- PHP_FE(notes_copy_db, NULL)
- PHP_FE(notes_list_msgs, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry notes_module_entry = {
- STANDARD_MODULE_HEADER,
- "notes",
- notes_functions,
- PHP_MINIT(notes),
- PHP_MSHUTDOWN(notes),
- PHP_RINIT(notes),
- PHP_RSHUTDOWN(notes),
- PHP_MINFO(notes),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_NOTES
-ZEND_GET_MODULE(notes)
-#endif
-
-
-PHP_MINIT_FUNCTION(notes)
-{
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(notes)
-{
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(notes)
-{
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(notes)
-{
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(notes)
-{
-
- php_info_print_table_start();
- php_info_print_table_row(2, "Lotus Notes Database Support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto bool notes_create_db(string database_name)
- Creates a Lotus Notes database */
-PHP_FUNCTION(notes_create_db)
-{
-
- int argc;
- pval *argv[1];
- STATUS error;
- pval **db;
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if (error) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbCreate (Z_STRVAL_PP(db), (USHORT) DBCLASS_NOTEFILE, FALSE)) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to create database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-
- NotesTerm();
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool notes_drop_db(string database_name)
- Drops a Lotus Notes database */
-PHP_FUNCTION(notes_drop_db)
-{
-
- int argc;
- pval *argv[1];
- STATUS error;
- pval **db;
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if (error) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbDelete (Z_STRVAL_PP(db))) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to delete database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-
- NotesTerm();
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string notes_version(string database_name)
- Gets the Lotus Notes version */
-PHP_FUNCTION(notes_version)
-{
-
- int argc;
- pval *argv[1];
- STATUS error;
- DBHANDLE db_handle;
- WORD wbuild;
- char error_string[200];
- pval **db;
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
-
- error = NotesInitExtended(argc, (char **) argv);
-
- if (error) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen(Z_STRVAL_PP(db), &db_handle)) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = NSFDbGetBuildVersion(db_handle, &wbuild)) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to get Lotus Notes version: %s", error_string);
- NSFDbClose(db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- NSFDbClose(db_handle);
- NotesTerm();
-
- if(wbuild > 0 && wbuild < 82) {
- RETURN_DOUBLE(1.0);
- } else if (wbuild > 81 && wbuild < 94) {
- RETURN_DOUBLE(2.0);
- } else if (wbuild > 93 && wbuild < 119) {
- RETURN_DOUBLE(3.0);
- } else if (wbuild > 118 && wbuild < 137) {
- RETURN_DOUBLE(4.0);
- } else if (wbuild == 138) {
- RETURN_DOUBLE(4.1);
- } else if (wbuild > 139 && wbuild < 146) {
- RETURN_DOUBLE(4.5);
- } else if (wbuild == 147) {
- RETURN_DOUBLE(4.6);
- } else {
- RETURN_DOUBLE(5.0);
- }
-}
-/* }}} */
-
-/* {{{ proto string notes_create_note(string database_name, string form_name)
- Creates a note using form form_name */
-PHP_FUNCTION(notes_create_note)
-{
-
- int argc;
- pval *argv[2];
- STATUS error;
- DBHANDLE db_handle;
- NOTEHANDLE note_handle;
- char error_string[200];
- pval **db;
- pval **form_name;
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(2, &db, &form_name)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(form_name);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if (error) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen(Z_STRVAL_PP(db), &db_handle)) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = NSFNoteCreate (db_handle, &note_handle)) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to create note: error_string");
- NSFDbClose( db_handle );
- RETURN_FALSE;
- }
-
- /* Append the form name item to the new note */
- if (error = NSFItemSetText(note_handle, FIELD_FORM, Z_STRVAL_PP(form_name), MAXWORD)) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to use the form: %s", error_string);
- NSFNoteClose (note_handle);
- NSFDbClose( db_handle );
- RETURN_FALSE;
- }
-
- if (error = NSFNoteUpdate (note_handle, 0)) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to save the note: %s", error_string);
- NSFNoteClose (note_handle);
- NSFDbClose(db_handle);
- RETURN_FALSE;
- }
-
- error = NSFNoteClose (note_handle);
-
- NSFDbClose(db_handle);
- NotesTerm();
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* Declarations for notes_mark_read and notes_mark_unread */
-
-#define ACTION_COUNT_MAX (16)
-
-
-/* Entries in the action table */
-
-typedef struct {
- BOOL AddFlag; /* TRUE: Add, FALSE: Remove */
- NOTEID NoteID;
-} ACTION_ENTRY;
-
- /* Table of actions to be performed */
-ACTION_ENTRY ActionTable [ACTION_COUNT_MAX] = {FALSE, 0L};
-
-/*
- * Forward references
- */
-
- /* Function to display unread note table */
-STATUS DisplayUnread (
- DBHANDLE db_handle,
- char NOTESPTR pName,
- WORD nameLen
-);
-
- /* Function to apply actions to unread note table */
-STATUS UpdateUnread (
- DBHANDLE db_handle,
- char NOTESPTR pName,
- WORD nameLen,
- ACTION_ENTRY *pActions,
- int actionCount,
- NOTEID *pUndoID
-);
-
- /* Function that updates a note without changing its unread status */
-STATUS UndoUnreadStatus (
- DBHANDLE db_handle,
- char NOTESPTR pName,
- WORD nameLen,
- ACTION_ENTRY *pActions,
- int actionCount,
- NOTEID UndoID);
-
-
-/* {{{ proto string notes_mark_read(string database_name, string user_name, string note_id)
- Marks a note_id as read for the User user_name. Note: user_name must be fully distinguished user name */
-PHP_FUNCTION(notes_mark_read)
-{
-
- int argc;
- int ActionCount;
- pval *argv[3];
- STATUS error;
- DBHANDLE db_handle;
- pval **db;
- pval **note_id;
- pval **user_name;
-
-
-/* Local data declarations */
-
- WORD UserNameLen = 0;
- char *pEnd;
- int curAction;
- int curArg;
- NOTEID UndoID = 0L;
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(3, &db, &user_name, &note_id)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(note_id);
- convert_to_string_ex(user_name);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if (error) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- curArg = 2;
-
- UserNameLen = Z_STRLEN_PP(user_name);
-
- curAction = 0;
- ActionCount = 1;
-
- ActionTable[curAction].AddFlag = FALSE;
-
- ActionTable[curAction].NoteID = strtoul (Z_STRVAL_PP(note_id), &pEnd, 16);
-
- if (error = NSFDbOpen(Z_STRVAL_PP(db), &db_handle)) {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- error = UpdateUnread (db_handle, Z_STRVAL_PP(user_name), UserNameLen,
- ActionTable, ActionCount, &UndoID);
-
- if ((error == NOERROR) && UndoID) {
- error = UndoUnreadStatus (db_handle, Z_STRVAL_PP(user_name), UserNameLen, ActionTable,
- ActionCount, UndoID);
- }
-
- /* Close the database */
- error = NSFDbClose (db_handle);
-
- if (NOERROR == error) {
- RETURN_TRUE;
- } else {
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to close database: %s", error_string);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string notes_mark_unread(string database_name, string user_name, string note_id)
- Marks a note_id as unread for the User user_name. Note: user_name must be fully distinguished user name */
-PHP_FUNCTION(notes_mark_unread)
-{
-
- int argc;
- int ActionCount;
- pval *argv[3];
- STATUS error;
- DBHANDLE db_handle;
- pval **db;
- pval **note_id;
- pval **user_name;
-
-
-/* Local data declarations */
-
- WORD UserNameLen = 0;
- char *pEnd;
- int curAction;
- int curArg;
- NOTEID UndoID = 0L;
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(3, &db, &user_name, &note_id)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(note_id);
- convert_to_string_ex(user_name);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- curArg = 2;
-
- UserNameLen = strlen (Z_STRVAL_PP(user_name));
-
- curAction = 0;
- ActionCount = 1;
-
- ActionTable[curAction].AddFlag = TRUE;
-
- ActionTable[curAction].NoteID =
- strtoul (Z_STRVAL_PP(note_id), &pEnd, 16);
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db), &db_handle)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- error = UpdateUnread (db_handle, Z_STRVAL_PP(user_name), UserNameLen,
- ActionTable, ActionCount, &UndoID);
-
- if ( (error == NOERROR) && UndoID ){
-
- error = UndoUnreadStatus (db_handle, Z_STRVAL_PP(user_name), UserNameLen, ActionTable,
- ActionCount, UndoID);
- }
-
- /* Close the database */
- error = NSFDbClose (db_handle);
-
- if (NOERROR == error){
-
- RETURN_TRUE;
- }
- else{
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to close the database: %s", error_string);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * UpdateUnread - Update the Unread Note list
- */
-
-STATUS UpdateUnread (
- DBHANDLE db_handle,
- char *pName,
- WORD nameLen,
- ACTION_ENTRY *pActions,
- int actionCount,
- NOTEID *pUndoID)
-{
- STATUS error;
- HANDLE table_handle;
- HANDLE hOriginalTable;
- NOTEHANDLE note_handle;
- BOOL gotUndoID = FALSE;
-
- /* Get the unread list */
- error = NSFDbGetUnreadNoteTable (
- db_handle,
- pName,
- nameLen,
- TRUE, /* Create the list if it's not already there */
- &table_handle);
-
- if (NOERROR != error){
-
- return (error);
- }
-
- /* Notes requires the original unread table to merge changes */
- error = IDTableCopy (table_handle, &hOriginalTable);
-
- if (NOERROR != error){
-
- IDDestroyTable (table_handle);
- return (error);
- }
-
- /* Bring table up to date */
- error = NSFDbUpdateUnread (db_handle, table_handle);
- if (NOERROR == error){
-
- if (pActions[0].AddFlag){
-
- /* Adding a Note ID */
- /* (Marks note as Unread) */
- if (IDIsPresent (table_handle, pActions[0].NoteID)){
-
- php_error(E_WARNING,"Note %lX is already marked unread", pActions[0].NoteID);
- }
- else{
- /* make sure we check to see if this note really exists
- at all */
- error = NSFNoteOpen(db_handle, pActions[0].NoteID, OPEN_SUMMARY, &note_handle);
-
- /* if it does we'll add it to the unread list */
- if (error == NOERROR){
-
- NSFNoteClose(note_handle);
- error = IDInsert (table_handle, pActions[0].NoteID,
- (NOTESBOOL NOTESPTR) NULL);
-
- }
- }
- }
- else{
-
- /* Removing a Note ID */
- /* (Marks note as Read) */
-
- if (IDIsPresent (table_handle, pActions[0].NoteID)){
-
- error = IDDelete (table_handle, pActions[0].NoteID,
- (NOTESBOOL NOTESPTR) NULL);
-
- if (NOERROR == error){
-
- if (!gotUndoID){
- *pUndoID = pActions[0].NoteID;
- gotUndoID = TRUE;
- }
- }
- }
- else{
-
- php_error(E_WARNING,"Note %lX is already marked read", pActions[0].NoteID);
- }
- }
-
- if (NOERROR == error){
-
- error = NSFDbSetUnreadNoteTable (db_handle, pName, nameLen,
- FALSE, /* Don't force the
- write to disk */
- hOriginalTable,
- table_handle);
- }
- }
-
- error = IDDestroyTable (hOriginalTable);
- if (NOERROR == error){
-
- error = error;
- }
-
- error = IDDestroyTable (table_handle);
-
- if (NOERROR == error){
-
- error = error;
- }
-
- return (error);
-}
-
-
-/*
- * UndoUnreadStatus - Update a note in the database without
- changing its read/unread mark
- */
-
-STATUS UndoUnreadStatus (
- DBHANDLE db_handle,
- char *pName,
- WORD nameLen,
- ACTION_ENTRY *pActions,
- int actionCount,
- NOTEID UndoID)
-{
- STATUS error;
- HANDLE table_handle;
- HANDLE hOriginalTable;
- DWORD noteID = 0L;
- NOTEHANDLE note_handle;
- BOOL bWasRead = TRUE;
-
-
- /* Get the unread list */
- error = NSFDbGetUnreadNoteTable (db_handle, pName, nameLen,
- TRUE, /* Create the list if it's
- not already there */
- &table_handle);
- if (NOERROR != error){
-
- return (error);
- }
-
- /* Notes requires the original unread table to merge changes */
-
- error = IDTableCopy (table_handle, &hOriginalTable);
-
- if (NOERROR != error){
-
- IDDestroyTable (table_handle);
- return (error);
- }
-
- /* See if note to be modified is marked as read */
- bWasRead = !(IDIsPresent (table_handle, UndoID));
-
- /* Make a change to this note and update it. */
- error = NSFNoteOpen (db_handle, UndoID, 0, &note_handle);
-
- if (error){
-
- IDDestroyTable (table_handle);
- IDDestroyTable (hOriginalTable);
- return (error);
- }
-
- error = NSFItemSetText (note_handle, "plain_text", "Unread undone",
- (WORD) strlen("Unread undone"));
- if (error){
-
- NSFNoteClose (note_handle);
- IDDestroyTable (table_handle);
- IDDestroyTable (hOriginalTable);
- return (error);
- }
-
- error = NSFNoteUpdate (note_handle, 0L);
-
- if (error){
-
- NSFNoteClose (note_handle);
- IDDestroyTable (table_handle);
- IDDestroyTable (hOriginalTable);
- return (error);
- }
-
- error = NSFNoteClose (note_handle);
-
- if (error){
-
- IDDestroyTable (table_handle);
- IDDestroyTable (hOriginalTable);
- return (error);
- }
-
- /* The note just modified is now marked as unread.
- Bring table up to date */
-
- error = NSFDbUpdateUnread (db_handle, table_handle);
-
- if ( (NOERROR == error) && bWasRead ){
-
- /* Remove the Note ID that we just modified to mark it as read*/
-
- error = IDDelete (table_handle, UndoID,
- (NOTESBOOL NOTESPTR) NULL);
-
- if( error != NOERROR ){
-
- php_error(E_NOTICE,"Note %lX is already marked read.", UndoID);
- }
- }
-
- /* Save unread table to disk */
- if (NOERROR == error){
-
- error = NSFDbSetUnreadNoteTable (db_handle, pName, nameLen,
- FALSE, /* Don't force the write
- to disk */
- hOriginalTable, table_handle);
- }
-
- /* Clean up */
- IDDestroyTable (hOriginalTable);
- IDDestroyTable (table_handle);
-
- return (error);
-}
-
-/* {{{ proto string notes_unread(string database_name, string user_name)
- Returns the unread note id's for the current User user_name. Note: user_name must be fully distinguished user name */
-PHP_FUNCTION(notes_unread)
-{
-
- int argc;
- pval *argv[2];
-
- STATUS error;
- DBHANDLE db_handle;
- WORD UserNameLen;
- HANDLE table_handle;
- DWORD noteID;
- BOOL FirstNote;
- char error_string[200];
-
- pval **db;
- pval **user_name;
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(2, &db, &user_name)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(user_name);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db), &db_handle)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- UserNameLen = strlen(Z_STRVAL_PP(user_name));
-
- /* Get the unread list */
- if( error = NSFDbGetUnreadNoteTable (
- db_handle,
- Z_STRVAL_PP(user_name),
- UserNameLen,
- TRUE, /* Create the list if it's not already there */
- &table_handle) ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to get unread list: %s", error_string );
- NotesTerm();
- RETURN_FALSE;
- }
-
-
- error = NSFDbUpdateUnread (db_handle, table_handle);
- if (NOERROR != error)
- {
- IDDestroyTable (table_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to get unread list: %s", error_string );
- NotesTerm();
- RETURN_FALSE;
- }
-
-
- FirstNote = TRUE;
-
- array_init(return_value);
-
- /* Print the entries in the unread list */
- while (IDScan (table_handle, FirstNote, &noteID)){
-
- FirstNote = FALSE;
-
- add_next_index_long(return_value, (long) noteID );
- }
-
- error = IDDestroyTable (table_handle);
-
- /* Close the database */
- error = NSFDbClose (db_handle);
-
- if( error != NOERROR ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to close database: %s", error_string);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#define ERR_READMAIL_NOUNIQUE (PKG_ADDIN + 0)
-#define READMAIL_BODY_LINELEN 40
-
-STATUS near pascal GetUniqueFileName(char *Drive, char *Ext, char *FileName);
-
-/* {{{ proto object notes_header_info(string server, string mailbox, int msg_number)
- Opens the message msg_number in the specified mailbox on the specified server (leave server blank for local) */
-/*
- Elements:
-
- originator (Contains orignal message sender. Relevant only when forwarded messages)
- to
- cc
- bcc
- from
- date
- status (blank if delivered, otherwise contains failure reason)
- priority H: High N: Normal L: Low
- receipt 1: Yes 0: No
- subject
-*/
-PHP_FUNCTION(notes_header_info)
-{
-
- int argc;
- pval *argv[3];
-
- pval **server;
- pval **mail_box;
- pval **msg_number;
-
- STATUS error = NOERROR;
- char szMailFilePath[MAXPATH+1];
- HANDLE hMessageFile;
- HANDLE hMessageList = NULLHANDLE, hMessage;
- DARRAY *MessageList;
- WORD MessageCount;
- char Originator[MAXRECIPIENTNAME+1];
- WORD OriginatorLength;
- char String[MAXSPRINTF+1];
- WORD StringLength;
- TIMEDATE Time;
- BOOL NonDeliveryReport;
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(3, &server, &mail_box, &msg_number)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(server);
- convert_to_string_ex(mail_box);
- convert_to_long_ex(msg_number);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- OSPathNetConstruct( NULL, /* port name */
- Z_STRVAL_PP(server),
- Z_STRVAL_PP(mail_box),
- szMailFilePath);
-
- /* Open the message file. */
-
- if (error = MailOpenMessageFile(szMailFilePath, &hMessageFile)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error: unable to open '%s': %s", szMailFilePath, error_string);
- RETURN_FALSE;
- }
-
- /* Create message list of messages in the file - just 64K */
-
- if (error = MailCreateMessageList(hMessageFile,
- &hMessageList, &MessageList, &MessageCount)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to create message list: %s", error_string);
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- RETURN_FALSE;
- }
-
-
- /* Print out each of the outbound messages. */
-
- object_init(return_value);
-
- if (error = MailOpenMessage (MessageList, (WORD)Z_LVAL_PP(msg_number), &hMessage)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open message number %d: %s", (WORD)Z_LVAL_PP(msg_number), error_string);
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- RETURN_FALSE;
- }
-
- /* Get the originator's name/address. */
-
- if (error = MailGetMessageOriginator(MessageList, (WORD)Z_LVAL_PP(msg_number),
- Originator, sizeof(Originator), &OriginatorLength)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to get message originator: %s", error_string);
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- RETURN_FALSE;
- }
-
- add_property_string(return_value,"originator",Originator, 1);
-
- /* SendTo */
- MailGetMessageItem (hMessage, MAIL_SENDTO_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"to",String, 1);
-
- /* PostedDate */
- MailGetMessageItemTimeDate(hMessage, MAIL_POSTEDDATE_ITEM_NUM, &Time);
- ConvertTIMEDATEToText(NULL, NULL, &Time, String,
- sizeof(String), &StringLength);
-
- add_property_string(return_value,"date",String, 1);
-
- /* BCC */
- MailGetMessageItem (hMessage, MAIL_BLINDCOPYTO_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"bcc", String, 1);
-
- /* CopyTo */
- MailGetMessageItem (hMessage, MAIL_COPYTO_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"cc", String, 1);
-
- /* From */
- MailGetMessageItem (hMessage, MAIL_FROM_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"from",String, 1);
-
- /* Subject */
-
- MailGetMessageItem (hMessage, MAIL_SUBJECT_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"subject",String, 1);
-
- /* Priority H: High N: Normal L: Low*/
-
- MailGetMessageItem (hMessage, MAIL_DELIVERYPRIORITY_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"priority",String, 1);
-
- /* Return Receipt 1: Yes 0: No*/
-
- MailGetMessageItem (hMessage, MAIL_RETURNRECEIPT_ITEM_NUM, String,
- MAXSPRINTF, &StringLength);
-
- add_property_string(return_value,"receipt",String, 1);
-
- NonDeliveryReport = MailIsNonDeliveryReport(hMessage);
-
- if (NonDeliveryReport)
- {
- MailGetMessageItem(hMessage, MAIL_FAILUREREASON_ITEM_NUM,
- String, sizeof(String), &StringLength);
-
- add_property_string(return_value,"status",String, 1);
- }
- else{
-
- add_property_string(return_value,"status","", 1);
- }
-
- MailCloseMessage (hMessage);
-
- /* Free the message list and close the message file */
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
-}
-/* }}} */
-
-STATUS near pascal GetUniqueFileName(char *Drive, char *Ext,
- char *FileName)
-
-{
- int file;
- WORD Num;
- char Name[17];
- char cwd[MAXPATH];
- char *Dir;
-
- /* Increment through numbered file names until a non-existent one found. */
- getcwd(cwd, MAXPATH);
- Dir = (char *)&cwd;
-
- for (Num = 0; Num <= 32767; Num++)
- {
- _itoa(Num, Name, 10);
- _makepath(FileName, Drive, Dir, Name, Ext);
- if ((file = open(FileName, O_BINARY | O_RDONLY)) == -1)
- return(NOERROR);
- close(file);
- }
- FileName[0] = '\0';
- return(ERR_READMAIL_NOUNIQUE);
-}
-
-/* {{{ proto array notes_body(string server, string mailbox, int msg_number)
- Opens the message msg_number in the specified mailbox on the specified server (leave server blank for local) and returns an array of body text lines */
-PHP_FUNCTION(notes_body)
-{
-
- int argc;
- pval *argv[3];
-
- pval **server;
- pval **mail_box;
- pval **msg_number;
-
- STATUS error = NOERROR;
- char szMailFilePath[MAXPATH+1];
- HANDLE hMessageFile;
- HANDLE hMessageList = NULLHANDLE, hMessage;
- DARRAY *MessageList;
- WORD MessageCount;
- char String[MAXSPRINTF+1];
- DWORD BodyFileSize;
- char BodyFileName[MAXPATH_OLE];
- FILE *BodyFile;
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(3, &server, &mail_box, &msg_number)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(server);
- convert_to_string_ex(mail_box);
- convert_to_long_ex(msg_number);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- OSPathNetConstruct( NULL, /* port name */
- Z_STRVAL_PP(server),
- Z_STRVAL_PP(mail_box),
- szMailFilePath);
-
- /* Open the message file. */
-
- if (error = MailOpenMessageFile(szMailFilePath, &hMessageFile)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error: unable to open '%s': %s.", szMailFilePath, error_string);
- RETURN_FALSE;
- }
-
- /* Create message list of messages in the file - just 64K */
-
- if (error = MailCreateMessageList(hMessageFile,
- &hMessageList, &MessageList, &MessageCount)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to create message list: %s", error_string);
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- RETURN_FALSE;
- }
-
- if (error = MailOpenMessage (MessageList, (WORD)Z_LVAL_PP(msg_number), &hMessage)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open message number %d: %s", (WORD)Z_LVAL_PP(msg_number), error_string);
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- RETURN_FALSE;
- }
-
- /* Body */
- if (error = GetUniqueFileName("", "TMP", BodyFileName)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Enable to create temporary file name: %s", error_string);
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- MailCloseMessage (hMessage);
- RETURN_FALSE;
-
- }
-
- /* Using MailGetBodyComposite instead of MailGetBody because it's not limited to 64k */
-
- if (error = MailGetMessageBodyText(hMessage,
- NULL, /* Use standard Body item */
- "\r\n", /* Newline-terminate */
- 80, /* 80 chars per line */
- TRUE, /* Convert TABs */
- BodyFileName,
- &BodyFileSize)){
-
- unlink(BodyFileName);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to get Message body into temporary file: %s", error_string);
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- MailCloseMessage (hMessage);
- RETURN_FALSE;
- }
-
- /* Print each line of body text to the screen. */
-
- if (!(BodyFile = fopen(BodyFileName, "r"))){
-
- unlink(BodyFileName);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open temporary file: %s", error_string);
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
- MailCloseMessage (hMessage);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- /* this should probably return the body in one string, but I don't know how */
-
- while (fgets(String, READMAIL_BODY_LINELEN, BodyFile)){
-
- add_next_index_string( return_value, String, 1);
- }
- fclose(BodyFile);
- unlink(BodyFileName);
-
- MailCloseMessage (hMessage);
-
- /* Free the message list and close the message file */
-
- if (hMessageList != NULLHANDLE){
-
- OSUnlockObject(hMessageList);
- OSMemFree(hMessageList);
- }
-
- if (hMessageFile != NULLHANDLE){
-
- MailCloseMessageFile(hMessageFile);
- }
-}
-/* }}} */
-
-/* {{{ proto bool notes_find_note(string database_name, string name [, string type])
- Returns a note id found in database_name */
-/*
-Specify the name of the note. Leaving type blank
-will default to all, otherwise specify:
-
- FORM
- VIEW
- FILTER
- FIELD
-*/
-PHP_FUNCTION(notes_find_note)
-{
-
- int argc;
- pval *argv[3];
-
- pval **db;
- pval **name;
- pval **type;
-
- STATUS error = NOERROR;
- DBHANDLE db_handle;
- NOTEID note_id;
-
- char error_string[200];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(3, &db, &name, &type)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(name);
- convert_to_string_ex(type);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db), &db_handle)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if( strcmp( Z_STRVAL_PP(type), "FORM" ) == 0 ){
-
- if ((error = NIFFindDesignNote(db_handle, Z_STRVAL_PP(name), NOTE_CLASS_FORM, &note_id)) != ERR_NOT_FOUND) {
-
- RETVAL_LONG( (long) note_id );
- }
- } else if( strcmp( Z_STRVAL_PP(type), "VIEW" ) == 0 ){
-
- if ((error = NIFFindDesignNote(db_handle, Z_STRVAL_PP(name), NOTE_CLASS_VIEW, &note_id)) != ERR_NOT_FOUND) {
-
- RETVAL_LONG( (long) note_id );
- }
- } else if( strcmp( Z_STRVAL_PP(type), "FILTER" ) == 0 ){
-
- if ((error = NIFFindDesignNote(db_handle, Z_STRVAL_PP(name), NOTE_CLASS_FILTER, &note_id)) != ERR_NOT_FOUND) {
-
- RETVAL_LONG( (long) note_id );
- }
-
- } else if( strcmp( Z_STRVAL_PP(type), "FIELD" ) == 0 ){
-
- if ((error = NIFFindDesignNote(db_handle, Z_STRVAL_PP(name), NOTE_CLASS_FIELD, &note_id)) != ERR_NOT_FOUND) {
-
- RETVAL_LONG( (long) note_id );
- }
- }
- else{
-
- if ((error = NIFFindDesignNote(db_handle, Z_STRVAL_PP(name), NOTE_CLASS_ALL, &note_id)) != ERR_NOT_FOUND) {
-
- RETVAL_LONG( (long) note_id );
- }
- }
-
- NSFDbClose(db_handle);
- NotesTerm();
-}
-/* }}} */
-
-/* {{{ proto bool notes_nav_create(string database_name, string name)
- Creates a navigator name, in database_name */
-PHP_FUNCTION(notes_nav_create)
-{
-
- int argc;
- pval *argv[2];
-
- pval **db;
- pval **name;
- char error_string[200];
-
- STATUS error = NOERROR;
- DBHANDLE db_handle;
-
- WORD ClassView = NOTE_CLASS_VIEW;
-
- NOTEHANDLE view_handle; /* sample navigator view handle */
-
- char szMainView[] = "MainView"; /* title of view to be used */
-
- VIEWMAP_HEADER_RECORD NavHeader;
-
- WORD wLayoutCount;
- WORD wNavLayoutBufLen;
- HANDLE hNavLayoutBuffer;
- char *pNavLayoutBuffer;
- char *pNLBuf;
-
- char szDFlags[3];
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(2, &db, &name)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(name);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db), &db_handle)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- error = NSFNoteCreate( db_handle, &view_handle );
- if ( error ) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to create note in database: %s", error_string);
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_FALSE;
- }
-
-
- NSFNoteSetInfo( view_handle, _NOTE_CLASS, &ClassView );
-
-/*
- * Set the view name.
- */
- error = NSFItemSetText( view_handle, VIEW_TITLE_ITEM,
- Z_STRVAL_PP(name), MAXWORD );
- if ( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to set text item '%s' in view note: %s", VIEW_TITLE_ITEM, error_string);
- NSFNoteClose( view_handle );
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_FALSE;
- }
-
-/*
- * Append Design flags for the Navigator view.
- */
- szDFlags[0] = DESIGN_FLAG_VIEWMAP;
- szDFlags[1] = DESIGN_FLAG_HIDE_FROM_V3;
- szDFlags[2] = '\0';
- error = NSFItemAppend( view_handle,
- ITEM_SUMMARY,
- DESIGN_FLAGS,
- (WORD)strlen(DESIGN_FLAGS),
- TYPE_TEXT,
- szDFlags,
- (DWORD)strlen(szDFlags ));
- if ( error ) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to append item '%s' to view note: %s", DESIGN_FLAGS, error_string);
-
- NSFNoteClose( view_handle );
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_FALSE;
- }
-
- wLayoutCount = 0;
- wNavLayoutBufLen = ODSLength( _VIEWMAP_HEADER_RECORD );
-
-/*
- * Allocate and initialize the CD buffer for the entire $ViewMapLayout item.
- */
- if ( error = OSMemAlloc( 0, wNavLayoutBufLen, &hNavLayoutBuffer )){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to allocate %d bytes memory: %s", wNavLayoutBufLen, error_string);
-
- NSFNoteClose( view_handle );
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_FALSE;
- }
-
- pNavLayoutBuffer = (char*) OSLockObject( hNavLayoutBuffer );
- memset( pNavLayoutBuffer, 0, (size_t) wNavLayoutBufLen );
-
- /*
- * Initialize pNLBuf. pNavLayoutBuffer will remain pointing to the top
- * of the buffer. pNLBuf will move to point to the next available byte.
- */
- pNLBuf = pNavLayoutBuffer;
-
-
- NavHeader.Header.Signature = SIG_CD_VMHEADER;
- NavHeader.Header.Length = (BYTE) ODSLength(_VIEWMAP_HEADER_RECORD );
- NavHeader.Version = VIEWMAP_VERSION;
- NavHeader.NameLen = 0;
-
- ODSWriteMemory( &pNLBuf, _VIEWMAP_HEADER_RECORD, &NavHeader, 1 );
-
- error = NSFItemAppend( view_handle,
- ITEM_SUMMARY,
- VIEWMAP_LAYOUT_ITEM,
- (WORD)strlen(VIEWMAP_LAYOUT_ITEM),
- TYPE_VIEWMAP_LAYOUT,
- pNavLayoutBuffer,
- (DWORD)wNavLayoutBufLen );
-
- OSUnlockObject( hNavLayoutBuffer );
- OSMemFree( hNavLayoutBuffer );
-
- if ( error ) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to append item '%s' to view note: %s", VIEWMAP_LAYOUT_ITEM, error_string);
-
- NSFNoteClose( view_handle );
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_FALSE;
- }
-
-/*
- * Done constructing the view note. Now store the view note
- * in the database.
- */
- error = NSFNoteUpdate( view_handle, 0 );
-
- if ( error) {
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to update note: %s", error_string);
-
- NSFNoteClose( view_handle );
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_FALSE;
- }
-
- NSFNoteClose( view_handle );
- NSFDbClose( db_handle );
- NotesTerm();
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string notes_search(string database_name, string keywords)
- Finds notes that match keywords in database_name. The note(s) that are returned must be converted to base 16. Example base_convert($note_id, "10", "16") */
-
-STATUS LNPUBLIC file_action (void *, SEARCH_MATCH *, ITEM_TABLE *);
-STATUS LNPUBLIC print_file_summary (ITEM_TABLE *);
-
-
-PHP_FUNCTION(notes_search)
-{
-
- int argc;
- pval *argv[2];
- STATUS error;
- DBHANDLE db_handle;
- HANDLE search_handle; /* handle to a search */
- pval **db;
- pval **keywords;
- char error_string[200];
- FT_INDEX_STATS Stats; /* statistics from FTIndex */
- DWORD RetDocs; /* number of documents returned by the search */
- HANDLE SearchResults_handle; /* handle to the results of the search */
- FT_SEARCH_RESULTS *pSearchResults; /* pointer to the results of the search */
- HANDLE IDTable_handle; /* handle to id table built with found NOTEIDs */
- NOTEID *pNoteID; /* pointer to the NOTEIDs found */
- BYTE *pScores; /* pointer to the scores */
- DWORD i;
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(2, &db, &keywords)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
- convert_to_string_ex(keywords);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db), &db_handle)){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- error = FTIndex(db_handle, FT_INDEX_AUTOOPTIONS, NULL, &Stats);
- if (error){
-
- NSFDbClose (db_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to search database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = FTOpenSearch(&search_handle)){
-
- NSFDbClose (db_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open search: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* do the search on the query */
- error = FTSearch (db_handle, /* database handle */
- &search_handle, /* pointer to previously
- allocated search handle */
- (HCOLLECTION) NULLHANDLE, /* no collection specified -
- query all docs */
- Z_STRVAL_PP(keywords), /* query string */
- FT_SEARCH_SCORES | /* find relevancy scores */
- FT_SEARCH_STEM_WORDS, /* find word variants */
- 0, /* maximum number of docs to
- return; 0 = unlimited */
- NULLHANDLE, /* no refining IDTABLE */
- &RetDocs, /* returned number of docs */
- NULL, /* reserved */
- &SearchResults_handle); /* returned info */
- if (error){
-
- FTCloseSearch (search_handle);
- NSFDbClose (db_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error during searchkkk: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* return if no document in the result */
- if (RetDocs == 0 )
- {
- php_printf("\n0 documents returned \n");
- FTCloseSearch (search_handle);
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- pSearchResults = OSLock (FT_SEARCH_RESULTS, SearchResults_handle);
-
- /* Create an IDTABLE to further refine our search */
-
- if (error = IDCreateTable(sizeof(NOTEID), &IDTable_handle))
- {
- FTCloseSearch (search_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error creating ID table: %s", error_string);
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* set up a pointer to the array of note id's that occur after
- the FT_SEARCH_RESULTS structure */
-
- pNoteID = (NOTEID *) (((char *) pSearchResults)
- + sizeof(FT_SEARCH_RESULTS));
-
- pScores = (BYTE *) (pNoteID + pSearchResults->NumHits);
- for (i = 0; i < pSearchResults->NumHits; i++, pNoteID++, pScores++)
- {
- /* save the note ids in the IDTABLE */
-
- if (error = IDInsert (IDTable_handle, *pNoteID, NULL))
- {
-
- OSUnlockObject(SearchResults_handle);
- OSMemFree (SearchResults_handle);
- FTCloseSearch (search_handle);
- IDDestroyTable (IDTable_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error saving note to ID table: %s", error_string);
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
- }
-
- OSUnlockObject(SearchResults_handle);
- OSMemFree (SearchResults_handle);
-
- if (error = FTCloseSearch(search_handle))
- {
- IDDestroyTable (IDTable_handle);
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = FTOpenSearch(&search_handle))
- {
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* do the refined search on the query with no word variants */
-
- error = FTSearch (db_handle, /* database handle */
- &search_handle, /* pointer to previously
- allocated search handle */
- (HCOLLECTION) NULLHANDLE, /* no collection specified -
- query all docs */
- Z_STRVAL_PP(keywords), /* query string */
- FT_SEARCH_SCORES | /* find relevancy scores */
- FT_SEARCH_REFINE, /* refine the search - use the
- * given id table */
- 0, /* maximum number of docs to
- return; 0 = unlimited */
- IDTable_handle, /* refining IDTABLE */
- &RetDocs, /* returned number of docs */
- NULL, /* reserved */
- &SearchResults_handle); /* returned info */
- if (error)
- {
- FTCloseSearch (search_handle);
- IDDestroyTable (IDTable_handle);
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* return if no document in the result */
- if (RetDocs == 0 )
- {
- php_printf("\n0 documents returned \n");
- FTCloseSearch (search_handle);
- IDDestroyTable (IDTable_handle);
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* obtain a pointer to the search results */
- pSearchResults = OSLock (FT_SEARCH_RESULTS, SearchResults_handle);
-
- /* set up a pointer to the array of note id's that occur after
- the FT_SEARCH_RESULTS structure */
-
- pNoteID = (NOTEID *) (((char *) pSearchResults)
- + sizeof(FT_SEARCH_RESULTS));
-
- //pSearchResults->NumHits
- array_init(return_value);
-
- pScores = (BYTE *) (pNoteID + pSearchResults->NumHits);
- for (i = 0; i < pSearchResults->NumHits; i++, pNoteID++, pScores++){
-
- add_next_index_long(return_value, (long) *pNoteID );
- //RETVAL_LONG( (long) *pNoteID );
- }
-
- OSUnlockObject (SearchResults_handle);
- OSMemFree (SearchResults_handle);
- IDDestroyTable (IDTable_handle);
-
- if (error = FTCloseSearch(search_handle))
- {
- NSFDbClose (db_handle);
- NotesTerm();
- RETURN_FALSE;
- }
-
- NSFDbClose (db_handle);
- NotesTerm();
-}
-/* }}} */
-
-/* {{{ proto string notes_copy_db(string from_database_name, string to_database_name [, string title])
- Creates a note using form form_name */
-PHP_FUNCTION(notes_copy_db)
-{
-
- int argc;
- pval *argv[3];
- STATUS error;
- DBHANDLE input_handle;
- DBHANDLE output_handle;
- char error_string[200];
- pval **db_input;
- pval **db_output;
- pval **title;
- DBREPLICAINFO replica_info; /* replication info for the databases */
- char output_db_info[NSF_INFO_SIZE]; /* database info buffer */
- TIMEDATE start_time; /* time and date used to control what
- notes we copy */
- TIMEDATE last_time; /* returned from
- NSFDbGetModifiedNoteTable */
- DBID input_dbid; /* dbid of input database */
- DBID output_dbid; /* dbid of output database */
- HANDLE idtable_p; /* handle to id table */
- DWORD num_scanned, num_entries;
- NOTEID note_id;
- NOTEHANDLE hIconNote; /* handle to the icon note */
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(3, &db_input, &db_output, &title)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db_input);
- convert_to_string_ex(db_output);
- convert_to_string_ex(title);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
-/* Open the input database. */
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db_input), &input_handle)){
-
- NSFDbClose (input_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open input database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-/* Create and open the output database. */
-
- if (error = NSFDbCreate (Z_STRVAL_PP(db_output), DBCLASS_NOTEFILE, FALSE))
- {
- NSFDbClose (input_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to create database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db_output), &output_handle))
- {
- NSFDbClose (input_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error opening output database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-
-/* Copy the replication settings (not the replication history) from
-the input database to the output database. The replication settings
-include the database replica ID. This makes the destination database
-a replica copy of the source database. */
-
- if (error = NSFDbReplicaInfoGet (input_handle, &replica_info))
- {
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error copying replication information: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-/* Copy the ACL from the input database to the output database. */
-
- if (error = NSFDbCopyACL (input_handle, output_handle))
- {
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error copying ACL: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-/* Set a time/date structure that will determine the date of the earliest
-note copied in the next call. Use TimeConstant with TIMEDATE_WILDCARD
-specified to indicate that we do not want any cutoff date. */
-
- TimeConstant (TIMEDATE_WILDCARD, &start_time);
-
-/* Do not use NSFDbCopy to copy all notes in the input database to the
- output database. Such copies are not guaranteed to be replicas of
- the original notes. Instead get an IDTABLE of all notes in the
- database, use IDScan to obtain each NOTEID, and then call
- NSFDbCopyNote to copy each note from one database to the other.
-*/
-
- NSFDbIDGet (input_handle, &input_dbid);
- NSFDbIDGet (output_handle, &output_dbid);
-
-
-/* Get the NoteID table for all notes in the input database */
- if (error = NSFDbGetModifiedNoteTable (input_handle,
- NOTE_CLASS_ALL,
- start_time, &last_time,
- &idtable_p) )
- if (error == ERR_NO_MODIFIED_NOTES){
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_NOTICE,"There are no documents in the Database: %s", error_string);
- NotesTerm();
- RETURN_TRUE;
- }
- else
- {
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error copying replication information: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
- num_scanned = 0L;
- num_entries = IDEntries (idtable_p);
- if (num_entries)
- while (IDScan (idtable_p, (FLAG)(num_scanned++ == 0), &note_id) )
- if (error = NSFDbCopyNote (input_handle, &input_dbid,
- &replica_info.ID, note_id,
- output_handle, &output_dbid,
- &replica_info.ID, NULL,
- NULL) )
- {
- IDDestroyTable (idtable_p);
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error copying notes: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
- IDDestroyTable (idtable_p);
-
-/* Now we can change the title of the output database
- by following these steps:
-
- - Get the info buffer of the database (NSFDbInfoGet);
- - Modify the title information in the buffer (NSFDbInfoModify);
- - Write the modified info buffer into the database (NSFDbInfoSet);
- - If necessary, update the ICON note with the updated database
- information buffer. This is required for databases created from
- a template.
-*/
-
-/* Clear out the database information buffer */
- output_db_info[0] = '\0';
-
-/* Get the output database information buffer. */
-
- if (error = NSFDbInfoGet (output_handle, output_db_info))
- {
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error getting output database information buffer: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-/* Add the database title to the database information buffer */
-
- NSFDbInfoModify (output_db_info, INFOPARSE_TITLE, Z_STRVAL_PP(title));
- if (error = NSFDbInfoSet (output_handle, output_db_info))
- {
- NSFDbClose (input_handle);
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error adding the database title to the buffer: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
-/* If creating a new database from a template, in order to change
- the database title or any other component of the database information
- buffer, you also need to update this information in the ICON
- note after updating it in the database information buffer. */
-
- if (!NSFNoteOpen(output_handle, NOTE_ID_SPECIAL+NOTE_CLASS_ICON,
- 0, &hIconNote))
- {
-
- /* Update the FIELD_TITLE ("$TITLE") field if present */
- if (NSFItemIsPresent (hIconNote, FIELD_TITLE, (WORD) strlen (FIELD_TITLE)) )
- {
- NSFItemSetText(hIconNote, FIELD_TITLE, output_db_info, MAXWORD);
- NSFNoteUpdate(hIconNote, 0);
- }
- NSFNoteClose(hIconNote);
- }
-
-
-/* Close the databases. */
-
- if (error = NSFDbClose (input_handle))
- {
- NSFDbClose (output_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error closing the input database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = NSFDbClose (output_handle)){
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Error closing the output database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- NotesTerm();
- RETURN_TRUE;
-}
-/* }}} */
-
-
-
-
-
-
-
-
-
-
-
-STATUS LNPUBLIC ReadSummaryData ( /* called for every document */
- VOID far *,
- SEARCH_MATCH far *,
- ITEM_TABLE far *);
-STATUS PrintSummary (char *);
-STATUS ExtractTextList (char *, char *);
-
-/* Constants */
-/* Notes imposes a 32K max summary buffer total size. Therefore,
- 34K will safely store the printable text rendering of any single
- item.
-*/
-#define MAX_ITEM_LEN 34816
-
-/* The maximum number of items in the summary buffer of a single note
- is limited to the number of ITEM structures that will fit in 32K.
-*/
-#define MAX_ITEMS 32768/sizeof(ITEM)
-
-#define MAX_ITEM_NAME_LEN DESIGN_NAME_MAX
-
-/* Global variables */
-ITEM Items[MAX_ITEMS]; /* Stores the array of ITEMs */
-char ItemText[MAX_ITEM_LEN]; /* Text rendering of item value */
-char ItemName[MAX_ITEM_NAME_LEN];/* Zero terminated item name */
-
-
-/* {{{ proto bool notes_list_msgs(string db)
- ??? */
-PHP_FUNCTION(notes_list_msgs)
-{
-
- int argc;
- pval *argv[1];
-
- STATUS error;
- DBHANDLE db_handle;
- char error_string[200];
-
- pval **db;
-
- argc = ARG_COUNT(ht);
-
- if (getParametersArray(ht, argc, argv) == FAILURE){
-
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
-
- error = NotesInitExtended( argc, (char **) argv );
-
- if( error ){
-
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to initialize Lotus Notes: %s", error_string);
- RETURN_FALSE;
- }
-
- if (error = NSFDbOpen (Z_STRVAL_PP(db), &db_handle)){
-
- NSFDbClose (db_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to open database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- /* Call NSFSearch to find all data notes in the database.
- Specify search flag SEARCH_SUMMARY so that the action
- routine gets passed the summary buffer as input.
- */
-
- if (error = NSFSearch (
- db_handle, /* database handle */
- NULLHANDLE, /* selection formula */
- NULL, /* title of view in selection formula */
- SEARCH_SUMMARY, /* search flags: get summary data! */
- NOTE_CLASS_DATA, /* note class to find */
- NULL, /* starting date (unused) */
- ReadSummaryData, /* action routine for notes found */
- NULL, /* argument to action routine */
- NULL)) /* returned ending date (unused) */
-
- {
- NSFDbClose (db_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to search database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- if (error = NSFDbClose (db_handle))
- {
- NSFDbClose (db_handle);
- OSLoadString(NULLHANDLE, ERR(error), error_string, sizeof(error_string));
- php_error(E_WARNING,"Unable to close database: %s", error_string);
- NotesTerm();
- RETURN_FALSE;
- }
-
- RETURN_TRUE
-}
-
-STATUS LNPUBLIC ReadSummaryData
- (VOID far *optional_param,
- SEARCH_MATCH far *search_info,
- ITEM_TABLE far *summary_info)
-{
- SEARCH_MATCH SearchMatch;
- STATUS error;
-
- memcpy ((char*)(&SearchMatch), (char *)search_info, sizeof(SEARCH_MATCH));
-
- if (!(SearchMatch.SERetFlags & SE_FMATCH))
- return (NOERROR);
-
- /* Print the note ID. */
-
- php_printf ("\nNote ID is: %lX.\n<br />", SearchMatch.ID.NoteID);
-
- /* Print the summary data. */
-
- if (error = PrintSummary( (char*)summary_info ))
- return (error);
-
- return (NOERROR);
-}
-
-
-/************************************************************************
-
- FUNCTION: PrintSummary
-
- PURPOSE: Print all the items in a summary buffer.
-
- INPUTS:
- pSummary - a pointer to the summary buffer for one note.
-
- DESCRIPTION:
- The information in a summary buffer consists of an ITEM_TABLE
- structure, followed by an array of ITEM structures, followed by
- a packed sequence of field names and item values.
-
- ITEM_TABLE
- ITEM 1
- ITEM 2
- ...
- ITEM N
- name of item 1
- value of item 1
- name of item 2
- value of item 2
- ...
- name of item N
- value if item N
-
- Item names are not zero terminated. Each item value starts with
- a data type word. The lengths of the item names and item values
- will vary. The NameLength member of the ITEM structure specifies
- the length of the corresponding name, and the ValueLength member
- of the ITEM structure specifies the length of the item value.
- The ValueLength includes the length of the data type word.
-
- Note that this summary buffer differs in format from the buffer
- parsed by sample program VIEWSUMM. VIEWSUMM calls NIFReadEntries
- specifying READ_MASK_SUMMARYVALUES, which yields a buffer with
- format specified by ITEM_VALUE_TABLE rather than ITEM_TABLE.
-
- This function can parse the summary buffer of any data note
- because it does not assume the note contains items with any
- particular names. If you know the item name in advance, use
- either NSFGetSummaryValue() or NSFLocateSummaryValue().
-
-*************************************************************************/
-
-
-STATUS PrintSummary (char *pSummary)
-{
- char *pSummaryPos; /* current position in pSummary */
- ITEM_TABLE ItemTable; /* header at start of pSummary */
- USHORT ItemCount; /* number of items in pSummary */
- USHORT NameLength; /* length of item name w/out terminator*/
- USHORT ValueLength; /* length of item value, incl. type */
- WORD DataType; /* item data type word */
- char *szDataType; /* printable data type name */
- USHORT TextLen; /* length of printable item text */
- NUMBER NumericItem; /* an item of type TYPE_NUMBER */
- NUMBER_PAIR NumberPair; /* part of item of TYPE_NUMBER_RANGE */
- RANGE Range; /* part of item of TYPE_NUMBER_RANGE */
- TIMEDATE TimeItem; /* a time/date item */
- TIMEDATE_PAIR TimePairItem; /* part of time/date list or range */
- WORD TimeStringLen; /* length of ASCII time/date */
- STATUS error; /* return code from API calls */
- USHORT i; /* counter for loop over items */
- USHORT j; /* " " " " multi-valued items */
-
- /* Initialize pSummaryPos to the position of the beginning of
- the summary buffer. Keep pSummary unmodified. Modify pSummaryPos.
- */
-
- pSummaryPos = pSummary;
-
- /* Copy the ITEM_TABLE header at the beginning of the summary buffer
- to a local variable. Advance pSummaryPos to point to the next
- byte in the summary buffer after the ITEM_TABLE.
- */
- memcpy ((char*)(&ItemTable), pSummaryPos, sizeof(ITEM_TABLE));
- pSummaryPos += sizeof(ItemTable);
-
- /* pSummaryPos now points to the first ITEM in an array of ITEM
- structures. Copy this array of ITEM structures into the global
- Items[] array.
- */
-
- ItemCount = ItemTable.Items;
-
- for (i=0; i < ItemCount; i++)
- {
- memcpy((char*)(&Items[i]), pSummaryPos, sizeof(ITEM));
- pSummaryPos += sizeof(ITEM);
- }
-
- /* pSummaryPos now points to the first item name. Loop over each
- item, copying the item name into the ItemName variable and
- converting the item value to printable text in ItemText.
- */
-
- for (i=0; i < ItemCount; i++)
- {
- /* zero out two global arrays that we re-use for each item */
- memset (ItemText, 0, MAX_ITEM_LEN);
- memset (ItemName, 0, MAX_ITEM_NAME_LEN);
-
- NameLength = Items[i].NameLength;
- memcpy (ItemName, pSummaryPos, NameLength);
- ItemName[NameLength] = '\0';
- pSummaryPos += NameLength;
-
- /* Handle the case of a zero length item */
-
- if (Items[i].ValueLength == 0)
- {
- strcpy(ItemName, " * ");
- ItemText[0] = '\0';
- goto PrintItem;
- }
-
- /* pSummaryPos now points to the item value. First get the
- data type. Then step over the data type word to the data
- value and convert the value to printable text. Store the
- text in ItemText.
- */
-
- memcpy ((char*)(&DataType), pSummaryPos, sizeof(WORD));
- pSummaryPos += sizeof(WORD);
-
- ValueLength = Items[i].ValueLength - sizeof(WORD);
-
- /* The way to extract an item depends on the data type. */
-
- switch (DataType)
- {
- case TYPE_TEXT:
- szDataType = "TYPE_TEXT";
- memcpy (ItemText, pSummaryPos, ValueLength);
- ItemText[ValueLength] = '\0';
- pSummaryPos += ValueLength;
- break;
-
- case TYPE_TEXT_LIST:
- szDataType = "TYPE_TEXT_LIST";
- if (error = ExtractTextList (pSummaryPos, ItemText))
- {
- printf ("Error: unable to extract text list.\n");
- ItemText[0] = '\0';
- }
- pSummaryPos += ValueLength;
- break;
-
- case TYPE_NUMBER:
- szDataType = "TYPE_NUMBER";
- memcpy ((char *)(&NumericItem), pSummaryPos, sizeof(NUMBER));
- sprintf (ItemText, "%f", NumericItem);
- pSummaryPos += sizeof(NUMBER);
- break;
-
- case TYPE_NUMBER_RANGE:
- szDataType = "TYPE_NUMBER_RANGE";
- TextLen = 0;
- memcpy ((char*)(&Range), pSummaryPos, sizeof(RANGE));
- pSummaryPos += sizeof(RANGE);
- for (j=0; j < Range.ListEntries; j++)
- {
- memcpy ((char*)(&NumericItem), pSummaryPos,
- sizeof(NUMBER));
- sprintf (ItemText+TextLen, "%f ", NumericItem);
- pSummaryPos += sizeof(NUMBER);
- TextLen = strlen(ItemText);
- }
- if ((Range.ListEntries != 0) && (Range.RangeEntries != 0))
- {
- memcpy (ItemText+TextLen, "; ", 2);
- TextLen += 2;
- }
- for (j=0; j < Range.RangeEntries; j++)
- {
- memcpy ((char*)(&NumberPair), pSummaryPos,
- sizeof(NUMBER_PAIR));
- sprintf (ItemText+TextLen, "%f - %f ", NumberPair.Lower,
- NumberPair.Upper);
- pSummaryPos += sizeof(NUMBER_PAIR);
- TextLen = strlen(ItemText);
- }
- break;
-
-#ifndef APITESTMODE
-
- case TYPE_TIME:
- szDataType = "TYPE_TIME";
- memcpy ((char*)(&TimeItem), pSummaryPos, sizeof(TIMEDATE));
- pSummaryPos += sizeof(TIMEDATE);
- if (error = ConvertTIMEDATEToText (
- NULL, NULL, &TimeItem,
- ItemText, MAXALPHATIMEDATE,
- &TimeStringLen))
- {
- printf ("Error: unable to convert TIMEDATE to text.\n");
- TimeStringLen = 0;
- }
- ItemText[TimeStringLen] = '\0';
- break;
-
- case TYPE_TIME_RANGE:
- szDataType = "TYPE_TIME_RANGE";
- TextLen = 0;
- memcpy ((char*)(&Range), pSummaryPos, sizeof(RANGE));
- pSummaryPos += sizeof(RANGE);
- for (j=0; j < Range.ListEntries; j++)
- {
- if (j != 0)
- {
- memcpy (ItemText+TextLen, ",", 1);
- TextLen++;
- }
- memcpy ((char*)(&TimeItem), pSummaryPos,
- sizeof(TIMEDATE));
- pSummaryPos += sizeof(TIMEDATE);
- if (error = ConvertTIMEDATEToText (
- NULL, NULL,
- &TimeItem,
- ItemText+TextLen,
- MAXALPHATIMEDATE, &TimeStringLen))
- {
- printf("Error: unable to convert TIMEDATE to text.\n");
- TimeStringLen = 0;
- }
- TextLen += TimeStringLen;
- }
-
- if (Range.RangeEntries == 0)
- {
- ItemText[TextLen] = '\0';
- break;
- }
-
- /* Append a space, semicolon, space to separate time/dates
- from time/date ranges.
- */
-
- memcpy (ItemText+TextLen, " ; ", 3);
- TextLen += 3;
-
- for (j=0; j < Range.RangeEntries; j++)
-
- {
- if (j != 0)
- {
- memcpy (ItemText+TextLen, ",", 1);
- TextLen++;
- }
- memcpy ((char*)&TimePairItem, pSummaryPos,
- sizeof(TIMEDATE_PAIR));
- pSummaryPos += sizeof(TIMEDATE_PAIR);
- if (error = ConvertTIMEDATEToText (
- NULL, NULL,
- &TimePairItem.Lower, ItemText+TextLen,
- MAXALPHATIMEDATE, &TimeStringLen))
- {
- printf("Error: unable to convert TIMEDATE to text.\n");
- TimeStringLen = 0;
- }
- TextLen += TimeStringLen;
- memcpy (ItemText+TextLen, "-", 1);
- TextLen++;
- if (error = ConvertTIMEDATEToText (
- NULL, NULL,
- &TimePairItem.Upper, ItemText+TextLen,
- MAXALPHATIMEDATE, &TimeStringLen))
- {
- printf("Error: unable to convert TIMEDATE to text.\n");
- TimeStringLen = 0;
- }
- TextLen += TimeStringLen;
- }
- ItemText[TextLen] = '\0'; /* zero terminate the text */
- break;
-
-#endif
- /* Item is not one of the data types this program handles. */
-
- default:
- szDataType = "Unrecognized";
- ItemText[0] = '\0';
- pSummaryPos += ValueLength;
- break;
- } /* end of switch on data type */
-
-PrintItem:
- /* Print the item name, data type, and value. */
- printf ("\tItem Name = %s\n", ItemName);
- printf ("\tData Type = %s\n", szDataType);
-
-#ifndef APITESTMODE
- printf ("\tItem Value = \"%s\"\n\n", ItemText);
-#else
- if (strcmp(ItemName,"$UpdatedBy")==0)
- printf ("\tItem Value =\n\n", ItemText);
- else
- printf ("\tItem Value = \"%s\"\n\n", ItemText);
-#endif
-
- }/* End of loop over items in the summary. */
-
- /* Print final line feed to end display for this note. */
-
- printf ("\n");
-
- return (NOERROR);
-}
-
-/************************************************************************
-
- FUNCTION: ExtractTextList
-
- PURPOSE: This function extracts an item of TYPE_TEXT_LIST from a
- pSummary buffer.
-
- INPUTS: char *pBuffer
-
- OUTPUTS: char *TextList
-
-*************************************************************************/
-
-STATUS ExtractTextList (char *pBuffer, char *TextList)
-{
- LIST List;
- char *ListEntry; /* pointer to list entry */
- WORD TextLen; /* total length of string output to TextList */
- WORD EntryLen; /* length of one entry */
- STATUS error; /* return code from API calls */
- USHORT i; /* a counter */
-
- /* Initialize the total length of the list. */
-
- TextLen = 0;
-
- /* Clear the string that we'll fill up. */
-
- TextList[0] = '\0';
-
- /* Get the list header structure with the number of entries. */
-
- memcpy ((char*)(&List), pBuffer, sizeof(LIST));
-
- /* Loop over each entry of the list. */
-
- for (i=0; i<List.ListEntries; i++)
- {
- /* Get one entry from the list. */
-
- if (error = ListGetText (
- pBuffer,
- FALSE, /* DataType not prepended to list */
- i,
- &ListEntry,
- &EntryLen))
- {
- return (ERR(error));
- }
-
- /* Copy this entry to the string we are building and move the
- pointer that keeps track of how much we have in the string.
- */
-
- memcpy (TextList+TextLen, ListEntry, EntryLen);
- TextLen += EntryLen;
-
- /* Put a comma after the entry and advance the text length. */
-
- memcpy (TextList+TextLen, ",", 1);
- TextLen++;
-
- } /* End of loop over list entries. */
-
- /* Put a null in place of the last comma */
-
- TextLen--;
- memcpy (TextList+TextLen, "\0", 1);
-
- return (NOERROR);
-}
-
-/* }}} */
-
-
-
-
diff --git a/ext/notes/php_notes.h b/ext/notes/php_notes.h
deleted file mode 100644
index ba3b8b3a79..0000000000
--- a/ext/notes/php_notes.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_01.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Brad Atkins <brad@youreshop.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-extern zend_module_entry notes_module_entry;
-
-#define notes_module_ptr &notes_module_entry
-
-PHP_MINIT_FUNCTION(notes);
-PHP_MSHUTDOWN_FUNCTION(notes);
-PHP_RINIT_FUNCTION(notes);
-PHP_RSHUTDOWN_FUNCTION(notes);
-PHP_MINFO_FUNCTION(notes);
-
-PHP_FUNCTION(notes_create_db);
-PHP_FUNCTION(notes_drop_db);
-PHP_FUNCTION(notes_version);
-PHP_FUNCTION(notes_create_note);
-PHP_FUNCTION(notes_unread);
-PHP_FUNCTION(notes_mark_read);
-PHP_FUNCTION(notes_mark_unread);
-PHP_FUNCTION(notes_header_info);
-PHP_FUNCTION(notes_body);
-PHP_FUNCTION(notes_find_note);
-PHP_FUNCTION(notes_nav_create);
-PHP_FUNCTION(notes_search);
-PHP_FUNCTION(notes_copy_db);
-PHP_FUNCTION(notes_list_msgs);
-
-#define phpext_notes_ptr notes_module_ptr
diff --git a/ext/oci8/CREDITS b/ext/oci8/CREDITS
deleted file mode 100644
index 30c88be459..0000000000
--- a/ext/oci8/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-OCI8
-Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson
diff --git a/ext/oci8/config.m4 b/ext/oci8/config.m4
deleted file mode 100644
index 1b3e6d9ddf..0000000000
--- a/ext/oci8/config.m4
+++ /dev/null
@@ -1,86 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(AC_OCI8_VERSION,[
- AC_MSG_CHECKING([Oracle version])
- if test -s "$OCI8_DIR/orainst/unix.rgs"; then
- OCI8_VERSION=`grep '"ocommon"' $OCI8_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
- test -z "$OCI8_VERSION" && OCI8_VERSION=7.3
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
- OCI8_VERSION=9.0
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then
- OCI8_VERSION=8.1
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then
- OCI8_VERSION=8.0
- elif test -f $OCI8_DIR/lib/libclntsh.a; then
- if test -f $OCI8_DIR/lib/libcore4.a; then
- OCI8_VERSION=8.0
- else
- OCI8_VERSION=8.1
- fi
- else
- AC_MSG_ERROR(Oracle-OCI8 needed libraries not found)
- fi
- AC_MSG_RESULT($OCI8_VERSION)
-])
-
-PHP_ARG_WITH(oci8, for Oracle-OCI8 support,
-[ --with-oci8[=DIR] Include Oracle-oci8 support. Default DIR is
- ORACLE_HOME.])
-
-if test "$PHP_OCI8" != "no"; then
- AC_MSG_CHECKING([Oracle Install-Dir])
- if test "$PHP_OCI8" = "yes"; then
- OCI8_DIR=$ORACLE_HOME
- else
- OCI8_DIR=$PHP_OCI8
- fi
- AC_MSG_RESULT($OCI8_DIR)
-
- if test -d "$OCI8_DIR/rdbms/public"; then
- PHP_ADD_INCLUDE($OCI8_DIR/rdbms/public)
- fi
- if test -d "$OCI8_DIR/rdbms/demo"; then
- PHP_ADD_INCLUDE($OCI8_DIR/rdbms/demo)
- fi
- if test -d "$OCI8_DIR/network/public"; then
- PHP_ADD_INCLUDE($OCI8_DIR/network/public)
- fi
- if test -d "$OCI8_DIR/plsql/public"; then
- PHP_ADD_INCLUDE($OCI8_DIR/plsql/public)
- fi
-
- if test -f "$OCI8_DIR/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $OCI8_DIR/lib/sysliblist`, OCI8_SYSLIB)
- elif test -f "$OCI8_DIR/rdbms/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $OCI8_DIR/rdbms/lib/sysliblist`, OCI8_SYSLIB)
- fi
-
- AC_OCI8_VERSION($OCI8_DIR)
- case $OCI8_VERSION in
- 8.0)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, "", OCI8_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core4, "", OCI8_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(psa, "", OCI8_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $OCI8_DIR/lib, OCI8_SHARED_LIBADD)
- ;;
-
- 8.1|9.0)
- PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
- PHP_ADD_LIBPATH($OCI8_DIR/lib, OCI8_SHARED_LIBADD)
- AC_DEFINE(HAVE_OCI8_TEMP_LOB,1,[ ])
- ;;
-
- *)
- AC_MSG_ERROR(Unsupported Oracle version!)
- ;;
- esac
-
- PHP_NEW_EXTENSION(oci8, oci8.c, $ext_shared)
- AC_DEFINE(HAVE_OCI8,1,[ ])
-
- PHP_SUBST_OLD(OCI8_SHARED_LIBADD)
- PHP_SUBST_OLD(OCI8_DIR)
- PHP_SUBST_OLD(OCI8_VERSION)
-fi
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
deleted file mode 100644
index d9b1ff75be..0000000000
--- a/ext/oci8/oci8.c
+++ /dev/null
@@ -1,5356 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Thies C. Arntzen <thies@thieso.net> |
- | |
- | Collection support by Andy Sautins <asautins@veripost.net> |
- | Temporary LOB support by David Benson <dbenson@mancala.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* TODO list:
- *
- * - php.ini flags
- * especialliy important for things like oci_ping
- * - Change return-value for OCIFetch*() (1-row read, 0-Normal end, false-error)
- * - Error mode (print or shut up?)
- * - OCIPasswordChange()
- * - binding of arrays
- * - Character sets for NCLOBS
- * - split the module into an upper (php-callable) and lower (c-callable) layer!
- * - remove all XXXs
- * - clean up and documentation
- * - make OCIInternalDebug accept a mask of flags....
- * - add some flags to OCIFetchStatement (maxrows etc...)
- * - have one ocifree() call.
- * - make it possible to have persistent statements?
- * - implement connection pooling in ZTS mode.
- * - failover
- * - change all the lob stuff to work without classes (optional)!
- * - make sure that the callbacks terminate the strings with \0
- * - cleanup the ociexecute semantics for refcursors
- * - make $lob->savefile use O_BINARY
- * - line 2728: ub4 length = -1; needs fixing
- * - delay OCIInitialize() as far as we can.
- * - add PHP Array <-> OCICollection conversion
- * - add Collection iterator object for INDEX BY tables
- * - make auto-rollabck only happen if we have an outstanding transaction
- * - implement ocidisconnect
- */
-
-/* {{{ includes & stuff */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-
-/* #define HAVE_OCI8_TEMP_LOB 1 */
-#define WITH_COLLECTIONS 1
-
-#if HAVE_OCI8
-
-#include "php_oci8.h"
-
-/* True globals, no need for thread safety */
-static int le_conn;
-static int le_stmt;
-static int le_desc;
-#ifdef WITH_COLLECTIONS
-static int le_coll;
-#endif
-static int le_server;
-static int le_session;
-static zend_class_entry *oci_lob_class_entry_ptr;
-#ifdef WITH_COLLECTIONS
-static zend_class_entry *oci_coll_class_entry_ptr;
-#endif
-
-#ifndef SQLT_BFILEE
-#define SQLT_BFILEE 114
-#endif
-#ifndef SQLT_CFILEE
-#define SQLT_CFILEE 115
-#endif
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-
-/* dirty marcos to make sure we _never_ call oracle-functions recursivly
- *
- * i'm well aware that we should _never_ call exit directly - this core is for
- * pure testing and commented out - as you can see;-)
- * thies@thieso.net 20010723
- */
-
-#define CALL_OCI(call) \
-{ \
- if (OCI(in_call)) { \
- php_error(E_WARNING, "OCI8 Recursive call!\n"); \
- exit(-1); \
- } else { \
- OCI(in_call)=1; \
- call; \
- OCI(in_call)=0; \
- } \
-}
-
-#define CALL_OCI_RETURN(retcode,call) \
-{ \
- if (OCI(in_call)) { \
- retcode=-1; \
- php_error(E_WARNING, "OCI8 Recursive call!\n"); \
- exit(-1); \
- } else { \
- OCI(in_call)=1; \
- retcode=call; \
- OCI(in_call)=0; \
- } \
-}
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-#include <fcntl.h>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-/* }}} */
-/* {{{ thread safety stuff */
-
-#ifdef ZTS
-int oci_globals_id;
-#else
-PHP_OCI_API php_oci_globals oci_globals;
-#endif
-
-/* }}} */
-/* {{{ dynamically loadable module stuff */
-
-#ifdef COMPILE_DL_OCI8
-ZEND_GET_MODULE(oci8)
-#endif /* COMPILE_DL */
-
-/* }}} */
-/* {{{ startup/shutdown/info/internal function prototypes */
-
-PHP_MINIT_FUNCTION(oci);
-PHP_RINIT_FUNCTION(oci);
-PHP_MSHUTDOWN_FUNCTION(oci);
-PHP_RSHUTDOWN_FUNCTION(oci);
-PHP_MINFO_FUNCTION(oci);
-
-static ub4 oci_handle_error(oci_connection *connection, ub4 errcode);
-static ub4 oci_error(OCIError *err_p, char *what, sword status);
-static int oci_ping(oci_server *server);
-static void oci_debug(const char *format, ...);
-
-static void _oci_conn_list_dtor(oci_connection *connection TSRMLS_DC);
-static void _oci_stmt_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void _oci_descriptor_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#ifdef WITH_COLLECTIONS
-static void _oci_coll_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#endif
-static void _oci_server_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void _oci_session_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_oci_free_conn_list(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-static void _oci_column_hash_dtor(void *data);
-static void _oci_define_hash_dtor(void *data);
-static void _oci_bind_hash_dtor(void *data);
-
-static oci_connection *oci_get_conn(zval ** TSRMLS_DC);
-static oci_statement *oci_get_stmt(zval ** TSRMLS_DC);
-static oci_descriptor *oci_get_desc(int TSRMLS_DC);
-#ifdef WITH_COLLECTIONS
-/* Questionable name. Very close to oci_get_col */
-static oci_collection *oci_get_coll(int TSRMLS_DC);
-#endif
-static oci_out_column *oci_get_col(oci_statement *, int, zval **);
-
-static int _oci_make_zval(zval *, oci_statement *, oci_out_column *, char *, int mode TSRMLS_DC);
-static oci_statement *oci_parse(oci_connection *, char *, int);
-static int oci_execute(oci_statement *, char *, ub4 mode);
-static int oci_fetch(oci_statement *, ub4, char * TSRMLS_DC);
-static int oci_loadlob(oci_connection *, oci_descriptor *, char **, ub4 *length);
-static int oci_setprefetch(oci_statement *statement, int size);
-
-static void oci_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent,int exclusive);
-
-static oci_server *_oci_open_server(char *dbname,int persistent);
-static void _oci_close_server(oci_server *server);
-
-static oci_session *_oci_open_session(oci_server* server,char *username,char *password,int persistent,int exclusive);
-static void _oci_close_session(oci_session *session);
-
-static sb4 oci_bind_in_callback(dvoid *, OCIBind *, ub4, ub4, dvoid **, ub4 *, ub1 *, dvoid **);
-static sb4 oci_bind_out_callback(dvoid *, OCIBind *, ub4, ub4, dvoid **, ub4 **, ub1 *, dvoid **, ub2 **);
-
-#if 0
-static sb4 oci_failover_callback(dvoid *svchp,dvoid* envhp,dvoid *fo_ctx,ub4 fo_type, ub4 fo_event);
-#endif
-
-/* }}} */
-/* {{{ extension function prototypes */
-
-PHP_FUNCTION(ocibindbyname);
-PHP_FUNCTION(ocidefinebyname);
-PHP_FUNCTION(ocicolumnisnull);
-PHP_FUNCTION(ocicolumnname);
-PHP_FUNCTION(ocicolumnsize);
-PHP_FUNCTION(ocicolumnscale);
-PHP_FUNCTION(ocicolumnprecision);
-PHP_FUNCTION(ocicolumntype);
-PHP_FUNCTION(ocicolumntyperaw);
-PHP_FUNCTION(ociexecute);
-PHP_FUNCTION(ocifetch);
-PHP_FUNCTION(ocicancel);
-PHP_FUNCTION(ocifetchinto);
-PHP_FUNCTION(ocifetchstatement);
-PHP_FUNCTION(ocifreestatement);
-PHP_FUNCTION(ociinternaldebug);
-PHP_FUNCTION(ocilogoff);
-PHP_FUNCTION(ocilogon);
-PHP_FUNCTION(ocinlogon);
-PHP_FUNCTION(ociplogon);
-PHP_FUNCTION(ocierror);
-PHP_FUNCTION(ocifreedesc);
-PHP_FUNCTION(ocisavelob);
-PHP_FUNCTION(ocisavelobfile);
-PHP_FUNCTION(ociloadlob);
-PHP_FUNCTION(ociwritelobtofile);
-PHP_FUNCTION(ocicommit);
-PHP_FUNCTION(ocirollback);
-PHP_FUNCTION(ocinewdescriptor);
-PHP_FUNCTION(ocinumcols);
-PHP_FUNCTION(ociparse);
-PHP_FUNCTION(ocinewcursor);
-PHP_FUNCTION(ociresult);
-PHP_FUNCTION(ociserverversion);
-PHP_FUNCTION(ocistatementtype);
-PHP_FUNCTION(ocirowcount);
-PHP_FUNCTION(ocisetprefetch);
-#ifdef HAVE_OCI8_TEMP_LOB
-PHP_FUNCTION(ociwritetemporarylob);
-PHP_FUNCTION(ocicloselob);
-#endif
-#ifdef WITH_COLLECTIONS
-PHP_FUNCTION(ocinewcollection);
-PHP_FUNCTION(ocifreecollection);
-PHP_FUNCTION(ocicollappend);
-PHP_FUNCTION(ocicollgetelem);
-PHP_FUNCTION(ocicollassignelem);
-PHP_FUNCTION(ocicollassign);
-PHP_FUNCTION(ocicollsize);
-PHP_FUNCTION(ocicollmax);
-PHP_FUNCTION(ocicolltrim);
-#endif
-
-#define OCI_GET_STMT(statement,value) \
- statement = oci_get_stmt(value TSRMLS_CC); \
- if (statement == NULL) { \
- RETURN_FALSE; \
- }
-
-#define OCI_GET_CONN(connection,value) \
- connection = oci_get_conn(value TSRMLS_CC); \
- if (connection == NULL) { \
- RETURN_FALSE; \
- }
-
-#define OCI_GET_DESC(descriptor,index) \
- descriptor = oci_get_desc(index TSRMLS_CC); \
- if (descriptor == NULL) { \
- RETURN_FALSE; \
- }
-
-#ifdef WITH_COLLECTIONS
-#define OCI_GET_COLL(collection,index) \
- collection = oci_get_coll(index TSRMLS_CC); \
- if (collection == NULL) { \
- RETURN_FALSE; \
- }
-#endif
-
-/* }}} */
-/* {{{ extension definition structures */
-
-#define OCI_ASSOC 1<<0
-#define OCI_NUM 1<<1
-#define OCI_BOTH (OCI_ASSOC|OCI_NUM)
-
-#define OCI_RETURN_NULLS 1<<2
-#define OCI_RETURN_LOBS 1<<3
-
-#define OCI_FETCHSTATEMENT_BY_COLUMN 1<<4
-#define OCI_FETCHSTATEMENT_BY_ROW 1<<5
-#define OCI_FETCHSTATEMENT_BY (OCI_FETCHSTATEMENT_BY_COLUMN | OCI_FETCHSTATEMENT_BY_ROW)
-
-static unsigned char a3_arg_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-static unsigned char a2_arg_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
-
-static zend_function_entry php_oci_functions[] = {
- PHP_FE(ocidefinebyname, a3_arg_force_ref)
- PHP_FE(ocibindbyname, a3_arg_force_ref)
- PHP_FE(ocicolumnisnull, NULL)
- PHP_FE(ocicolumnname, NULL)
- PHP_FE(ocicolumnsize, NULL)
- PHP_FE(ocicolumnscale, NULL)
- PHP_FE(ocicolumnprecision, NULL)
- PHP_FE(ocicolumntype, NULL)
- PHP_FE(ocicolumntyperaw, NULL)
- PHP_FE(ociexecute, NULL)
- PHP_FE(ocicancel, NULL)
- PHP_FE(ocifetch, NULL)
- PHP_FE(ocifetchinto, a2_arg_force_ref)
- PHP_FE(ocifetchstatement,a2_arg_force_ref)
- PHP_FE(ocifreestatement, NULL)
- PHP_FE(ociinternaldebug, NULL)
- PHP_FE(ocinumcols, NULL)
- PHP_FE(ociparse, NULL)
- PHP_FE(ocinewcursor, NULL)
- PHP_FE(ociresult, NULL)
- PHP_FE(ociserverversion, NULL)
- PHP_FE(ocistatementtype, NULL)
- PHP_FE(ocirowcount, NULL)
- PHP_FE(ocilogoff, NULL)
- PHP_FE(ocilogon, NULL)
- PHP_FE(ocinlogon, NULL)
- PHP_FE(ociplogon, NULL)
- PHP_FE(ocierror, NULL)
- PHP_FE(ocifreedesc, NULL)
- PHP_FE(ocisavelob, NULL)
- PHP_FE(ocisavelobfile, NULL)
- PHP_FE(ociloadlob, NULL)
- PHP_FE(ociwritelobtofile,NULL)
- PHP_FE(ocicommit, NULL)
- PHP_FE(ocirollback, NULL)
- PHP_FE(ocinewdescriptor, NULL)
- PHP_FE(ocisetprefetch, NULL)
-#ifdef WITH_COLLECTIONS
- PHP_FE(ocifreecollection,NULL)
- PHP_FE(ocicollappend, NULL)
- PHP_FE(ocicollgetelem, NULL)
- PHP_FE(ocicollassignelem,NULL)
- PHP_FE(ocicollassign, NULL)
- PHP_FE(ocicollsize, NULL)
- PHP_FE(ocicollmax, NULL)
- PHP_FE(ocicolltrim, NULL)
- PHP_FE(ocinewcollection, NULL)
-#endif
-
- PHP_FALIAS(ocifreecursor,ocifreestatement,NULL)
-
- {NULL,NULL,NULL}
-};
-
-static zend_function_entry php_oci_lob_class_functions[] = {
- PHP_FALIAS(load, ociloadlob, NULL)
- PHP_FALIAS(writetofile, ociwritelobtofile,NULL)
-#ifdef HAVE_OCI8_TEMP_LOB
- PHP_FALIAS(writetemporary, ociwritetemporarylob,NULL)
- PHP_FALIAS(close, ocicloselob, NULL)
-#endif
- PHP_FALIAS(save, ocisavelob, NULL)
- PHP_FALIAS(savefile, ocisavelobfile, NULL)
- PHP_FALIAS(free, ocifreedesc, NULL)
- {NULL,NULL,NULL}
-};
-
-#ifdef WITH_COLLECTIONS
-static zend_function_entry php_oci_coll_class_functions[] = {
- PHP_FALIAS(append, ocicollappend, NULL)
- PHP_FALIAS(getelem, ocicollgetelem, NULL)
- PHP_FALIAS(assignelem, ocicollassignelem, NULL)
- PHP_FALIAS(assign, ocicollassign, NULL)
- PHP_FALIAS(size, ocicollsize, NULL)
- PHP_FALIAS(max, ocicollmax, NULL)
- PHP_FALIAS(trim, ocicolltrim, NULL)
- PHP_FALIAS(free, ocifreecollection, NULL)
- {NULL,NULL,NULL}
-};
-#endif
-
-zend_module_entry oci8_module_entry = {
- STANDARD_MODULE_HEADER,
- "oci8", /* extension name */
- php_oci_functions, /* extension function list */
- PHP_MINIT(oci), /* extension-wide startup function */
- PHP_MSHUTDOWN(oci), /* extension-wide shutdown function */
- PHP_RINIT(oci), /* per-request startup function */
- PHP_RSHUTDOWN(oci), /* per-request shutdown function */
- PHP_MINFO(oci), /* information function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-/* }}} */
-/* {{{ debug malloc/realloc/free */
-
-#define OCI_USE_EMALLOC 0 /* set this to 1 if you want to use the php memory manager! */
-
-#if OCI_USE_EMALLOC
-CONST dvoid *ocimalloc(dvoid *ctx, size_t size)
-{
- dvoid *ret;
- ret = (dvoid *)malloc(size);
- oci_debug("ocimalloc(%d) = %08x", size,ret);
- return ret;
-}
-
-CONST dvoid *ocirealloc(dvoid *ctx, dvoid *ptr, size_t size)
-{
- dvoid *ret;
- oci_debug("ocirealloc(%08x, %d)", ptr, size);
- ret = (dvoid *)realloc(ptr, size);
- return ptr;
-}
-
-CONST void ocifree(dvoid *ctx, dvoid *ptr)
-{
- oci_debug("ocifree(%08x)", ptr);
- free(ptr);
-}
-#endif
-
-/* }}} */
-/* {{{ startup, shutdown and info functions */
-
-static void php_oci_init_globals(php_oci_globals *oci_globals_p TSRMLS_DC)
-{
- OCI(shutdown) = 0;
- OCI(in_call) = 0;
-
- OCI(user) = malloc(sizeof(HashTable));
- zend_hash_init(OCI(user), 13, NULL, NULL, 1);
-
- OCI(server) = malloc(sizeof(HashTable));
- zend_hash_init(OCI(server), 13, NULL, NULL, 1);
-
- CALL_OCI(OCIEnvInit(
- &OCI(pEnv),
- OCI_DEFAULT,
- 0,
- NULL));
-
- CALL_OCI(OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&OCI(pError),
- OCI_HTYPE_ERROR,
- 0,
- NULL));
-}
-
-PHP_MINIT_FUNCTION(oci)
-{
- zend_class_entry oci_lob_class_entry;
-#ifdef WITH_COLLECTIONS
- zend_class_entry oci_coll_class_entry;
-#endif
-
-#ifdef WITH_COLLECTIONS
-#define PHP_OCI_INIT_MODE OCI_DEFAULT | OCI_OBJECT
-#else
-#define PHP_OCI_INIT_MODE OCI_DEFAULT
-#endif
-
-#if OCI_USE_EMALLOC
- OCIInitialize(PHP_OCI_INIT_MODE, NULL, ocimalloc, ocirealloc, ocifree);
-#else
- OCIInitialize(PHP_OCI_INIT_MODE, NULL, NULL, NULL, NULL);
-#endif
-
-#ifdef ZTS
- ts_allocate_id(&oci_globals_id, sizeof(php_oci_globals), (ts_allocate_ctor) php_oci_init_globals, NULL);
-#else
- php_oci_init_globals(&oci_globals TSRMLS_CC);
-#endif
-
- le_stmt = zend_register_list_destructors_ex(_oci_stmt_list_dtor, NULL, "oci8 statement", module_number);
- le_conn = zend_register_list_destructors_ex(php_oci_free_conn_list, NULL, "oci8 connection", module_number);
- le_desc = zend_register_list_destructors_ex(_oci_descriptor_list_dtor, NULL, "oci8 descriptor", module_number);
-#ifdef WITH_COLLECTIONS
- le_coll = zend_register_list_destructors_ex(_oci_coll_list_dtor, NULL, "oci8 collection", module_number);
-#endif
- le_server = zend_register_list_destructors_ex(_oci_server_list_dtor, NULL, "oci8 server", module_number);
- le_session = zend_register_list_destructors_ex(_oci_session_list_dtor, NULL, "oci8 session", module_number);
-
- INIT_CLASS_ENTRY(oci_lob_class_entry, "OCI-Lob", php_oci_lob_class_functions);
-#ifdef WITH_COLLECTIONS
- INIT_CLASS_ENTRY(oci_coll_class_entry, "OCI-Collection", php_oci_coll_class_functions);
-#endif
-
- oci_lob_class_entry_ptr = zend_register_internal_class(&oci_lob_class_entry TSRMLS_CC);
-#ifdef WITH_COLLECTIONS
- oci_coll_class_entry_ptr = zend_register_internal_class(&oci_coll_class_entry TSRMLS_CC);
-#endif
-
-/* thies@thieso.net 990203 i do not think that we will need all of them - just in here for completeness for now! */
- REGISTER_LONG_CONSTANT("OCI_DEFAULT",OCI_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_DESCRIBE_ONLY",OCI_DESCRIBE_ONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_COMMIT_ON_SUCCESS",OCI_COMMIT_ON_SUCCESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_EXACT_FETCH",OCI_EXACT_FETCH, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIBindByName (real "oci" names + short "php" names*/
- REGISTER_LONG_CONSTANT("SQLT_BFILEE",SQLT_BFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_CFILEE",SQLT_CFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_CLOB",SQLT_CLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_BLOB",SQLT_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_RDD",SQLT_RDD, CONST_CS | CONST_PERSISTENT);
-
-#ifdef WITH_COLLECTIONS
- REGISTER_LONG_CONSTANT("OCI_B_SQLT_NTY",SQLT_NTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_STRING_CONSTANT("OCI_SYSDATE","SYSDATE",CONST_PERSISTENT);
-#endif
-
- REGISTER_LONG_CONSTANT("OCI_B_BFILE",SQLT_BFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_CFILEE",SQLT_CFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_CLOB",SQLT_CLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_BLOB",SQLT_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_ROWID",SQLT_RDD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_CURSOR",SQLT_RSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_BIN",SQLT_BIN, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIFetchStatement */
- REGISTER_LONG_CONSTANT("OCI_FETCHSTATEMENT_BY_COLUMN", OCI_FETCHSTATEMENT_BY_COLUMN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_FETCHSTATEMENT_BY_ROW", OCI_FETCHSTATEMENT_BY_ROW, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIFetchInto & OCIResult */
- REGISTER_LONG_CONSTANT("OCI_ASSOC",OCI_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_NUM",OCI_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_BOTH",OCI_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_RETURN_NULLS",OCI_RETURN_NULLS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_RETURN_LOBS",OCI_RETURN_LOBS, CONST_CS | CONST_PERSISTENT);
-
-/* for OCINewDescriptor (real "oci" names + short "php" names*/
- REGISTER_LONG_CONSTANT("OCI_DTYPE_FILE",OCI_DTYPE_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_DTYPE_LOB",OCI_DTYPE_LOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_DTYPE_ROWID",OCI_DTYPE_ROWID, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("OCI_D_FILE",OCI_DTYPE_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_D_LOB",OCI_DTYPE_LOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_D_ROWID",OCI_DTYPE_ROWID, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-/* ----------------------------------------------------------------- */
-
-
-PHP_RINIT_FUNCTION(oci)
-{
- /* XXX NYI
- OCI(num_links) =
- OCI(num_persistent);
- */
-
- OCI(debug_mode) = 0; /* start "fresh" */
-/* OCI(in_call) = 0; i don't think we want this! */
-
- oci_debug("php_rinit_oci");
-
- return SUCCESS;
-}
-
-static int _session_pcleanup(oci_session *session TSRMLS_DC)
-{
- _oci_close_session(session);
-
- return 1;
-}
-
-static int _server_pcleanup(oci_server *server TSRMLS_DC)
-{
- _oci_close_server(server);
-
- return 1;
-}
-
-PHP_MSHUTDOWN_FUNCTION(oci)
-{
- OCI(shutdown) = 1;
-
- oci_debug("START php_mshutdown_oci");
-
- zend_hash_apply(OCI(user), (apply_func_t)_session_pcleanup TSRMLS_CC);
- zend_hash_apply(OCI(server), (apply_func_t)_server_pcleanup TSRMLS_CC);
-
- zend_hash_destroy(OCI(user));
- zend_hash_destroy(OCI(server));
-
- free(OCI(user));
- free(OCI(server));
-
- CALL_OCI(OCIHandleFree(
- (dvoid *)OCI(pEnv),
- OCI_HTYPE_ENV));
-
- oci_debug("END php_mshutdown_oci");
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(oci)
-{
- oci_debug("START php_rshutdown_oci");
-
-#if 0
- /* XXX free all statements, rollback all outstanding transactions */
-
- zend_hash_apply(OCI(user), (apply_func_t) _session_cleanup TSRMLS_CC);
- zend_hash_apply(OCI(server), (apply_func_t) _server_cleanup TSRMLS_CC);
-#endif
-
- oci_debug("END php_rshutdown_oci");
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(oci)
-{
-
- php_info_print_table_start();
- php_info_print_table_row(2, "OCI8 Support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision$");
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "Oracle Version", PHP_OCI8_VERSION );
- php_info_print_table_row(2, "Compile-time ORACLE_HOME", PHP_OCI8_DIR );
- php_info_print_table_row(2, "Libraries Used", PHP_OCI8_SHARED_LIBADD );
-#endif
- php_info_print_table_end();
-
-}
-
-/* }}} */
-/* {{{ _oci_define_hash_dtor() */
-
-static void
-_oci_define_hash_dtor(void *data)
-{
- oci_define *define = (oci_define *) data;
-
- oci_debug("_oci_define_hash_dtor: %s",define->name);
-
- zval_ptr_dtor(&define->zval);
-
- if (define->name) {
- efree(define->name);
- define->name = 0;
- }
-}
-
-/* }}} */
-/* {{{ _oci_bind_hash_dtor() */
-
-static void
-_oci_bind_hash_dtor(void *data)
-{
- oci_bind *bind = (oci_bind *) data;
-
- oci_debug("_oci_bind_hash_dtor:");
-
- zval_ptr_dtor(&(bind->zval));
-}
-
-/* }}} */
-/* {{{ _oci_bind_pre_exec() */
-
-static int
-_oci_bind_pre_exec(void *data TSRMLS_DC)
-{
- oci_bind *bind = (oci_bind *) data;
-
- /* reset all bind stuff to a normal state..-. */
-
- bind->indicator = 0;
-
- return 0;
-}
-
-/* }}} */
-/* {{{ _oci_bind_post_exec() */
-
-static int
-_oci_bind_post_exec(void *data TSRMLS_DC)
-{
- oci_bind *bind = (oci_bind *) data;
-
- if (bind->indicator == -1) { /* NULL */
- zval *val = bind->zval;
- if (Z_TYPE_P(val) == IS_STRING && (Z_STRVAL_P(val) != empty_string)) {
- *Z_STRVAL_P(val) = '\0'; /* XXX avoid warning in debug mode */
- }
- zval_dtor(val);
- ZVAL_NULL(val);
- } else if (Z_TYPE_P(bind->zval) == IS_STRING && (Z_STRVAL_P(bind->zval) != empty_string)) {
- Z_STRVAL_P(bind->zval) = erealloc(Z_STRVAL_P(bind->zval), Z_STRLEN_P(bind->zval)+1);
- Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] = '\0';
- }
-
-
- return 0;
-}
-
-/* }}} */
-/* {{{ _oci_column_hash_dtor() */
-
-static void
-_oci_column_hash_dtor(void *data)
-{
- oci_out_column *column = (oci_out_column *) data;
- TSRMLS_FETCH();
-
- oci_debug("START _oci_column_hash_dtor: %s",column->name);
-
- if (column->stmtid) {
- zend_list_delete(column->stmtid);
- }
-
- if (column->is_descr) {
- zend_list_delete(column->descid);
- } else {
- if (column->data) {
- efree(column->data);
- }
- }
-
- oci_debug("END _oci_column_hash_dtor: %s",column->name);
-
- if (column->name) {
- efree(column->name);
- }
-}
-
-/* }}} */
-/* {{{ _oci_stmt_list_dtor() */
-
-static void
-_oci_stmt_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_statement *statement = (oci_statement *)rsrc->ptr;
- oci_debug("START _oci_stmt_list_dtor: id=%d last_query=\"%s\"",statement->id,SAFE_STRING(statement->last_query));
-
- if (statement->pStmt) {
- CALL_OCI(OCIHandleFree(
- statement->pStmt,
- OCI_HTYPE_STMT));
-
- statement->pStmt = 0;
- }
-
- if (statement->pError) {
- CALL_OCI(OCIHandleFree(
- statement->pError,
- OCI_HTYPE_ERROR));
-
- statement->pError = 0;
- }
-
- if (statement->last_query) {
- efree(statement->last_query);
- }
-
- if (statement->columns) {
- zend_hash_destroy(statement->columns);
- efree(statement->columns);
- }
-
- if (statement->binds) {
- zend_hash_destroy(statement->binds);
- efree(statement->binds);
- }
-
- if (statement->defines) {
- zend_hash_destroy(statement->defines);
- efree(statement->defines);
- }
-
- zend_list_delete(statement->conn->id);
-
- oci_debug("END _oci_stmt_list_dtor: id=%d",statement->id);
-
- efree(statement);
-}
-
-/* }}} */
-/* {{{ _oci_conn_list_dtor() */
-
-static void
-_oci_conn_list_dtor(oci_connection *connection TSRMLS_DC)
-{
- /*
- as the connection is "only" a in memory service context we do not disconnect from oracle.
- */
-
- oci_debug("START _oci_conn_list_dtor: id=%d",connection->id);
-
- if (connection->pServiceContext) {
-
- if (connection->needs_commit) {
- oci_debug("OCITransRollback");
- CALL_OCI_RETURN(connection->error,OCITransRollback(
- connection->pServiceContext,
- connection->pError,
- (ub4)0));
-
- if (connection->error) {
- oci_error(connection->pError, "failed to rollback outstanding transactions!", connection->error);
- }
- connection->needs_commit = 0;
- } else {
- oci_debug("nothing to do..");
- }
-
- CALL_OCI(OCIHandleFree(
- (dvoid *) connection->pServiceContext,
- (ub4) OCI_HTYPE_SVCCTX));
- }
-
- if (connection->session && connection->session->exclusive) {
- /* exclusive connection created via OCINLogon() close their
- associated session when destructed */
- zend_list_delete(connection->session->num);
- }
-
- if (connection->pError) {
- CALL_OCI(OCIHandleFree(
- (dvoid *) connection->pError,
- (ub4) OCI_HTYPE_ERROR));
- }
-
- oci_debug("END _oci_conn_list_dtor: id=%d",connection->id);
-
- efree(connection);
-}
-
-/* }}} */
-
-/* {{{ php_oci_free_conn_list
- */
-static void php_oci_free_conn_list(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_connection *conn = (oci_connection *)rsrc->ptr;
- _oci_conn_list_dtor(conn TSRMLS_CC);
-}
-/* }}} */
-
-#ifdef WITH_COLLECTIONS
-
-/* {{{ _oci_coll_list_dtor()
- */
-
-static void
-_oci_coll_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_collection *coll = (oci_collection *)rsrc->ptr;
- oci_debug("START _oci_coll_list_dtor: %d",coll->id);
-
- zend_list_delete(coll->conn->id);
- /* Note sure if we need to free the object. Have an
- oracle TAR out on this one.
- OCIDescriptorFree(descr->ocidescr, Z_TYPE_P(descr)); */
-
- oci_debug("END _oci_coll_list_dtor: %d",coll->id);
-
- efree(coll);
-}
-/* }}} */
-#endif
-
-/* {{{ _oci_descriptor_list_dtor()
- */
-
-static void
-_oci_descriptor_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_descriptor *descr = (oci_descriptor *)rsrc->ptr;
- oci_debug("START _oci_descriptor_list_dtor: %d",descr->id);
-
- zend_list_delete(descr->conn->id);
-
- CALL_OCI(OCIDescriptorFree(
- descr->ocidescr,
- Z_TYPE_P(descr)));
-
- oci_debug("END _oci_descriptor_list_dtor: %d",descr->id);
-
- efree(descr);
-}
-
-/* }}} */
-/* {{{ _oci_server_list_dtor()
- */
-
-static void
-_oci_server_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_server *server = (oci_server *)rsrc->ptr;
- if (server->persistent)
- return;
-
- _oci_close_server(server);
-}
-
-/* }}} */
-/* {{{ _oci_session_list_dtor()
- */
-
-static void
-_oci_session_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_session *session = (oci_session *)rsrc->ptr;
- if (session->persistent)
- return;
-
- _oci_close_session(session);
-}
-
-/* }}} */
-
-/* {{{ oci_handle_error
- */
-static ub4
-oci_handle_error(oci_connection *connection, ub4 errcode)
-{
- switch (errcode) {
- case 1013: /* user requested cancel of current operation */
- zend_bailout();
- break;
-
- case 22: /* ORA-00022 Invalid session id */
- case 1012: /* ORA-01012: */
- case 3113: /* ORA-03113: end-of-file on communication channel */
- case 604:
- case 1041:
- connection->is_open = 0;
- connection->session->is_open = 0;
- connection->session->server->is_open = 0;
- return 1; /* fatal error */
- }
-
- return 0; /* no fatal error */
-}
-/* }}} */
-
-/* {{{ oci_error() */
-
-static ub4
-oci_error(OCIError *err_p, char *what, sword status)
-{
- text errbuf[512];
- sb4 errcode = 0;
-
- switch (status) {
- case OCI_SUCCESS:
- break;
- case OCI_SUCCESS_WITH_INFO:
- php_error(E_WARNING, "%s: OCI_SUCCESS_WITH_INFO", what);
- break;
- case OCI_NEED_DATA:
- php_error(E_WARNING, "%s: OCI_NEED_DATA", what);
- break;
- case OCI_NO_DATA:
- php_error(E_WARNING, "%s: OCI_NO_DATA", what);
- break;
- case OCI_ERROR: {
- TSRMLS_FETCH();
- CALL_OCI(OCIErrorGet(
- err_p,
- (ub4)1,
- NULL,
- &errcode,
- errbuf,
- (ub4)sizeof(errbuf),
- (ub4)OCI_HTYPE_ERROR));
-
- php_error(E_WARNING, "%s: %s", what, errbuf);
- break;
- }
- case OCI_INVALID_HANDLE:
- php_error(E_WARNING, "%s: OCI_INVALID_HANDLE", what);
- break;
- case OCI_STILL_EXECUTING:
- php_error(E_WARNING, "%s: OCI_STILL_EXECUTING", what);
- break;
- case OCI_CONTINUE:
- php_error(E_WARNING, "%s: OCI_CONTINUE", what);
- break;
- default:
- break;
- }
- return errcode;
-}
-
-/* }}} */
-/* {{{ oci_ping() */
-
-static int oci_ping(oci_server *server)
-{
- char version[256];
- TSRMLS_FETCH();
-
- CALL_OCI_RETURN(OCI(error), OCIServerVersion(
- server->pServer,
- OCI(pError),
- (text*)version,
- sizeof(version),
- OCI_HTYPE_SERVER));
-
- if (OCI(error) == OCI_SUCCESS) {
- return 1;
- }
-
- oci_error(OCI(pError), "oci_ping", OCI(error));
-
- return 0;
-}
-
-/* }}} */
-
-/************************* INTERNAL FUNCTIONS *************************/
-
-/* {{{ oci_debug() */
-
-static void oci_debug(const char *format, ...)
-{
- TSRMLS_FETCH();
-
- if (OCI(debug_mode)) {
- char buffer[1024];
- va_list args;
-
- va_start(args, format);
- vsnprintf(buffer, sizeof(buffer)-1, format, args);
- va_end(args);
- buffer[sizeof(buffer)-1] = '\0';
- php_printf("OCIDebug: %s<br />\n", buffer);
- }
-}
-
-/* }}} */
-/* {{{ oci_get_conn() */
-
-static oci_connection *oci_get_conn(zval **conn TSRMLS_DC)
-{
- oci_connection *connection;
-
- connection = (oci_connection *) zend_fetch_resource(conn TSRMLS_CC, -1, "OCI8-Connection", NULL, 1, le_conn);
-
- if (connection && connection->is_open) {
- return connection;
- } else {
- return (oci_connection *) NULL;
- }
-}
-
-/* }}} */
-/* {{{ oci_get_stmt() */
-
-static oci_statement *oci_get_stmt(zval **stmt TSRMLS_DC)
-{
- oci_statement *statement;
-
- statement = (oci_statement *) zend_fetch_resource(stmt TSRMLS_CC, -1, "OCI8-Statement", NULL, 1, le_stmt);
-
- if (statement && statement->conn->is_open) {
- return statement;
- } else {
- return (oci_statement *) NULL;
- }
-}
-
-/* }}} */
-/* {{{ oci_get_desc() */
-
-static oci_descriptor *oci_get_desc(int ind TSRMLS_DC)
-{
- oci_descriptor *descriptor;
- int actual_resource_type;
-
- descriptor = (oci_descriptor *) zend_list_find(ind, &actual_resource_type);
-
- if (descriptor && (actual_resource_type == le_desc)) {
- return descriptor;
- } else {
- return (oci_descriptor *) NULL;
- }
-}
-
-/* }}} */
-/* {{{ oci_get_col() */
-
-static oci_out_column *
-oci_get_col(oci_statement *statement, int col, zval **value)
-{
- oci_out_column *outcol = NULL;
- int i;
-
- if (statement->columns == 0) { /* we release the columns at the end of a fetch */
- return NULL;
- }
-
- if (value) {
- if (Z_TYPE_PP(value) == IS_STRING) {
- for (i = 0; i < statement->ncolumns; i++) {
- outcol = oci_get_col(statement, i + 1, 0);
- if (outcol == NULL) {
- continue;
- } else if (((int) outcol->name_len == Z_STRLEN_PP(value))
- && (! strncmp(outcol->name,Z_STRVAL_PP(value),Z_STRLEN_PP(value)))) {
- return outcol;
- }
- }
- } else {
- convert_to_long_ex(value);
- return oci_get_col(statement,Z_LVAL_PP(value),0);
- }
- } else if (col != -1) {
- if (zend_hash_index_find(statement->columns, col, (void **)&outcol) == FAILURE) {
- php_error(E_WARNING, "Invalid column %d", col);
- return NULL;
- }
- return outcol;
- }
-
- return NULL;
-}
-
-/* }}} */
-/* {{{ oci_new_desc() */
-
-static oci_descriptor*
-oci_new_desc(int type,oci_connection *connection)
-{
- oci_descriptor *descr;
- TSRMLS_FETCH();
-
- descr = emalloc(sizeof(oci_descriptor));
-
- Z_TYPE_P(descr) = type;
-
- switch (Z_TYPE_P(descr)) {
- case OCI_DTYPE_FILE:
- case OCI_DTYPE_LOB:
- case OCI_DTYPE_ROWID:
- break;
-
- default:
- php_error(E_WARNING, "Unknown descriptor type %d.",Z_TYPE_P(descr));
- return 0;
- }
-
- CALL_OCI_RETURN(OCI(error), OCIDescriptorAlloc(
- OCI(pEnv),
- (dvoid*)&(descr->ocidescr),
- Z_TYPE_P(descr),
- (size_t) 0,
- (dvoid **) 0));
-
- if (OCI(error)) {
- ub4 error;
- error = oci_error(OCI(pError),"OCIDescriptorAlloc %d",OCI(error));
- oci_handle_error(connection, error);
- return 0;
- }
-
- descr->id = zend_list_insert(descr,le_desc);
- descr->conn = connection;
- zend_list_addref(connection->id);
-
- oci_debug("oci_new_desc %d",descr->id);
-
- return descr;
-}
-
-#ifdef WITH_COLLECTIONS
-
-/* {{{ _oci_get_ocicoll() */
-
-static int
-_oci_get_ocicoll(zval *id,oci_collection **collection TSRMLS_DC)
-{
- zval **coll;
-
- if (zend_hash_find(Z_OBJPROP_P(id), "collection", sizeof("collection"), (void **)&coll) == FAILURE) {
- php_error(E_WARNING, "cannot find collection");
- return 0;
- }
- if ((*collection = oci_get_coll(Z_LVAL_PP(coll) TSRMLS_CC)) == NULL) {
- php_error(E_WARNING, "collection not found");
- return 0;
- }
-
- return Z_LVAL_PP(coll);
-}
-
-/* }}} */
-
-#endif
-
-/* }}} */
-/* {{{ _oci_get_ocidesc() */
-
-static int
-_oci_get_ocidesc(zval *id,oci_descriptor **descriptor TSRMLS_DC)
-{
- zval **desc;
-
- if (zend_hash_find(Z_OBJPROP_P(id), "descriptor", sizeof("descriptor"), (void **)&desc) == FAILURE) {
- php_error(E_WARNING, "cannot find descriptor");
- return 0;
- }
-
- if ((*descriptor = oci_get_desc(Z_LVAL_PP(desc) TSRMLS_CC)) == NULL) {
- php_error(E_WARNING, "descriptor not found");
- return 0;
- }
-
- return Z_LVAL_PP(desc);
-}
-
-/* }}} */
-/* {{{ _oci_make_zval() */
-
-static int
-_oci_make_zval(zval *value,oci_statement *statement,oci_out_column *column, char *func, int mode TSRMLS_DC)
-{
- oci_descriptor *descr;
- ub4 loblen;
- int size;
- char *buffer;
-
- if (column->indicator || column->retcode)
- if ((column->indicator != -1) && (column->retcode != 1405))
- oci_debug("_oci_make_zval: %16s,retlen = %4d,retlen4 = %d,storage_size4 = %4d,indicator %4d, retcode = %4d",
- column->name,column->retlen,column->retlen4,column->storage_size4,column->indicator,column->retcode);
-
- if (column->indicator == -1) { /* column is NULL */
- ZVAL_NULL(value);
- return 0;
- }
-
- if (column->is_cursor) { /* REFCURSOR -> simply return the statement id */
- ZVAL_RESOURCE(value,column->stmtid);
- zend_list_addref(column->stmtid);
- } else if (column->is_descr) {
- if ((column->data_type != SQLT_RDD) && (mode & OCI_RETURN_LOBS)) {
- /* OCI_RETURN_LOBS means that we want the content of the LOB back instead of the locator */
-
- descr = oci_get_desc(column->descid TSRMLS_CC);
- if (! descr) {
- php_error(E_WARNING, "unable to find my descriptor %d",column->data);
- return -1;
- }
-
- if (oci_loadlob(statement->conn,descr,&buffer,&loblen)) {
- ZVAL_FALSE(value);
- } else {
- ZVAL_STRINGL(value,buffer,loblen,0);
- }
- } else {
- /* return the locator */
- object_init_ex(value, oci_lob_class_entry_ptr);
- add_property_resource(value, "descriptor", column->descid);
- zend_list_addref(column->descid);
- }
- } else {
- switch (column->retcode) {
- case 0:
- /* intact value */
- if (column->piecewise) {
- size = column->retlen4;
- } else {
- size = column->retlen;
- }
- break;
-
- default:
- /* XXX we SHOULD maybe have a different behaviour for unknown results! */
- ZVAL_FALSE(value);
- return 0;
- }
-
- ZVAL_STRINGL(value,column->data,size,1);
- }
-
- return 0;
-}
-
-/* }}} */
-/* {{{ oci_setprefetch() */
-
-static int
-oci_setprefetch(oci_statement *statement,int size)
-{
- ub4 prefetch;
- sword error;
- TSRMLS_FETCH();
-
- prefetch = size * 1024;
-
- CALL_OCI_RETURN(error, OCIAttrSet(
- statement->pStmt,
- OCI_HTYPE_STMT,
- &prefetch,
- 0,
- OCI_ATTR_PREFETCH_MEMORY,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY", error);
-
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- }
-
- prefetch = size;
- CALL_OCI_RETURN(error, OCIAttrSet(
- statement->pStmt,
- OCI_HTYPE_STMT,
- &prefetch,
- 0,
- OCI_ATTR_PREFETCH_ROWS,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- }
-
- return 1;
-}
-
-/* }}} */
-/* {{{ oci_parse() */
-
-static oci_statement *oci_parse(oci_connection *connection, char *query, int len)
-{
- oci_statement *statement;
- sword error;
- TSRMLS_FETCH();
-
- statement = ecalloc(1,sizeof(oci_statement));
-
- CALL_OCI(OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&statement->pStmt,
- OCI_HTYPE_STMT,
- 0,
- NULL));
-
- CALL_OCI(OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&statement->pError,
- OCI_HTYPE_ERROR,
- 0,
- NULL));
-
- if (len > 0) {
- CALL_OCI_RETURN(error, OCIStmtPrepare(
- statement->pStmt,
- connection->pError,
- (text*)query,
- len,
- OCI_NTV_SYNTAX,
- OCI_DEFAULT));
-
- connection->error = oci_error(connection->pError, "OCIParse", error);
- if (connection->error) {
- CALL_OCI(OCIHandleFree(
- statement->pStmt,
- OCI_HTYPE_STMT));
-
- CALL_OCI(OCIHandleFree(
- statement->pError,
- OCI_HTYPE_ERROR));
-
- efree(statement);
- oci_handle_error(connection, connection->error);
- return 0;
- }
- }
-
- if (query) {
- statement->last_query = estrdup(query);
- }
- statement->conn = connection;
-
- statement->id = zend_list_insert(statement,le_stmt);
-
- oci_debug("oci_parse \"%s\" id=%d conn=%d",
- SAFE_STRING(query),
- statement->id,
- statement->conn->id);
-
- zend_list_addref(statement->conn->id);
-
- return statement;
-}
-
-/* }}} */
-/* {{{ oci_execute() */
-
-static int
-oci_execute(oci_statement *statement, char *func,ub4 mode)
-{
- oci_out_column *outcol;
- oci_out_column column;
- OCIParam *param = 0;
- text *colname;
- ub4 counter;
- ub2 define_type;
- ub4 iters;
- ub4 colcount;
- ub2 dynamic;
- int dtype;
- dvoid *buf;
- oci_descriptor *descr;
- sword error;
- TSRMLS_FETCH();
-
- if (! statement->stmttype) {
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&statement->stmttype,
- (ub4 *)0,
- OCI_ATTR_STMT_TYPE,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_STMT_TYPE", error);
-
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0;
- }
- }
-
- if (statement->stmttype == OCI_STMT_SELECT) {
- iters = 0;
- } else {
- iters = 1;
- }
-
- if (statement->last_query) {
- /* if we execute refcursors we don't have a query and
- we don't want to execute!!! */
-
- if (statement->binds) {
- zend_hash_apply(statement->binds, (apply_func_t) _oci_bind_pre_exec TSRMLS_CC);
- }
-
- CALL_OCI_RETURN(error, OCIStmtExecute(
- statement->conn->pServiceContext,
- statement->pStmt,
- statement->pError,
- iters,
- 0,
- NULL,
- NULL,
- mode));
-
- statement->error = oci_error(statement->pError, "OCIStmtExecute", error);
-
- if (statement->binds) {
- zend_hash_apply(statement->binds, (apply_func_t) _oci_bind_post_exec TSRMLS_CC);
- }
-
- oci_handle_error(statement->conn, statement->error);
-
- if (statement->error) {
- return 0;
- }
-
- if (mode & OCI_COMMIT_ON_SUCCESS) {
- statement->conn->needs_commit = 0;
- } else {
- statement->conn->needs_commit = 1;
- }
- }
-
- if ((statement->stmttype == OCI_STMT_SELECT) && (statement->executed == 0)) {
- /* we only need to do the define step is this very statement is executed the first time! */
- statement->executed = 1;
-
- ALLOC_HASHTABLE(statement->columns);
- zend_hash_init(statement->columns, 13, NULL, _oci_column_hash_dtor, 0);
-
- counter = 1;
-
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (dvoid *)&colcount,
- (ub4 *)0,
- OCI_ATTR_PARAM_COUNT,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_PARAM_COUNT", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- statement->ncolumns = colcount;
-
- for (counter = 1; counter <= colcount; counter++) {
- memset(&column,0,sizeof(oci_out_column));
-
- if (zend_hash_index_update(statement->columns, counter, &column,
- sizeof(oci_out_column), (void**) &outcol) == FAILURE) {
- efree(statement->columns);
- /* out of memory */
- return 0;
- }
-
- outcol->statement = statement;
-
- CALL_OCI_RETURN(error, OCIParamGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- statement->pError,
- (dvoid**)&param,
- counter));
-
- statement->error = oci_error(statement->pError, "OCIParamGet OCI_HTYPE_STMT", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->data_type,
- (ub4 *)0,
- OCI_ATTR_DATA_TYPE,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_TYPE", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->data_size,
- (dvoid *)0,
- OCI_ATTR_DATA_SIZE,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_SIZE", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- outcol->storage_size4 = outcol->data_size;
- outcol->retlen = outcol->data_size;
-
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->scale,
- (dvoid *)0,
- OCI_ATTR_SCALE,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_SCALE", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we lose memory!!! */
- }
-
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->precision,
- (dvoid *)0,
- OCI_ATTR_PRECISION,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_PRECISION", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we lose memory!!! */
- }
-
- CALL_OCI_RETURN(error, OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid **)&colname, /* XXX this string is NOT zero terminated!!!! */
- (ub4 *)&outcol->name_len,
- (ub4)OCI_ATTR_NAME,
- statement->pError));
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_NAME", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- outcol->name = estrndup((char*) colname,outcol->name_len);
-
- /* find a user-setted define */
- if (statement->defines) {
- zend_hash_find(statement->defines,outcol->name,outcol->name_len,(void **) &outcol->define);
- }
-
- buf = 0;
- switch (outcol->data_type) {
- case SQLT_RSET:
- outcol->pstmt = oci_parse(statement->conn,0,0);
- outcol->stmtid = outcol->pstmt->id;
-
- define_type = SQLT_RSET;
- outcol->is_cursor = 1;
- outcol->storage_size4 = -1;
- outcol->retlen = -1;
- dynamic = OCI_DEFAULT;
- buf = &(outcol->pstmt->pStmt);
- break;
-
- case SQLT_RDD: /* ROWID */
- case SQLT_BLOB: /* binary LOB */
- case SQLT_CLOB: /* character LOB */
- case SQLT_BFILE: /* binary file LOB */
- define_type = outcol->data_type;
- outcol->is_descr = 1;
- outcol->storage_size4 = -1;
- dynamic = OCI_DEFAULT;
-
- if (outcol->data_type == SQLT_BFILE) {
- dtype = OCI_DTYPE_FILE;
- } else if (outcol->data_type == SQLT_RDD ) {
- dtype = OCI_DTYPE_ROWID;
- } else {
- dtype = OCI_DTYPE_LOB;
- }
-
- descr = oci_new_desc(dtype,statement->conn);
- outcol->descid = descr->id;
- buf = &(descr->ocidescr);
- break;
-
- case SQLT_LNG:
- case SQLT_LBI:
- if (outcol->data_type == SQLT_LBI) {
- define_type = SQLT_BIN;
- } else {
- define_type = SQLT_CHR;
- }
- outcol->storage_size4 = OCI_MAX_DATA_SIZE;
- outcol->piecewise = 1;
- dynamic = OCI_DYNAMIC_FETCH;
- break;
-
- case SQLT_BIN:
- default:
- define_type = SQLT_CHR;
- if ((outcol->data_type == SQLT_DAT) || (outcol->data_type == SQLT_NUM)) {
- outcol->storage_size4 = 512; /* XXX this should fit "most" NLS date-formats and Numbers */
- } else {
- outcol->storage_size4++; /* add one for string terminator */
- }
- if (outcol->data_type == SQLT_BIN) {
- outcol->storage_size4 *= 3;
- }
- dynamic = OCI_DEFAULT;
- buf = outcol->data = (text *) emalloc(outcol->storage_size4);
- break;
- }
-
- if (dynamic == OCI_DYNAMIC_FETCH) {
- CALL_OCI_RETURN(error, OCIDefineByPos(
- statement->pStmt, /* IN/OUT handle to the requested SQL query */
- (OCIDefine **)&outcol->pDefine, /* IN/OUT pointer to a pointer to a define handle */
- statement->pError, /* IN/OUT An error handle */
- counter, /* IN position in the select list */
- (dvoid *)NULL, /* IN/OUT pointer to a buffer */
- outcol->storage_size4, /* IN The size of each valuep buffer in bytes */
- define_type, /* IN The data type */
- (dvoid *)&outcol->indicator, /* IN pointer to an indicator variable or arr */
- (ub2 *)NULL, /* IN/OUT Pointer to array of length of data fetched */
- (ub2 *)NULL, /* OUT Pointer to array of column-level return codes */
- OCI_DYNAMIC_FETCH)); /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
-
- statement->error = oci_error(statement->pError, "OCIDefineByPos", error);
- } else {
- CALL_OCI_RETURN(error, OCIDefineByPos(
- statement->pStmt, /* IN/OUT handle to the requested SQL query */
- (OCIDefine **)&outcol->pDefine, /* IN/OUT pointer to a pointer to a define handle */
- statement->pError, /* IN/OUT An error handle */
- counter, /* IN position in the select list */
- (dvoid *)buf, /* IN/OUT pointer to a buffer */
- outcol->storage_size4, /* IN The size of each valuep buffer in bytes */
- define_type, /* IN The data type */
- (dvoid *)&outcol->indicator, /* IN pointer to an indicator variable or arr */
- (ub2 *)&outcol->retlen, /* IN/OUT Pointer to array of length of data fetched */
- (ub2 *)&outcol->retcode, /* OUT Pointer to array of column-level return codes */
- OCI_DEFAULT)); /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
-
- statement->error = oci_error(statement->pError, "OCIDefineByPos", error);
- }
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
- }
- }
-
- return 1;
-}
-
-/* }}} */
-/* {{{ oci_fetch() */
-
-static int
-_oci_column_pre_fetch(void *data TSRMLS_DC)
-{
- oci_out_column *col = (oci_out_column *) data;
-
- if (col->piecewise) {
- col->retlen4 = 0;
- }
-
- return 0;
-}
-
-
-static int
-oci_fetch(oci_statement *statement, ub4 nrows, char *func TSRMLS_DC)
-{
- int i;
- oci_out_column *column;
-
- if (statement->columns) {
- zend_hash_apply(statement->columns, (apply_func_t) _oci_column_pre_fetch TSRMLS_CC);
- }
-
-
- CALL_OCI_RETURN(statement->error, OCIStmtFetch(
- statement->pStmt,
- statement->pError,
- nrows,
- OCI_FETCH_NEXT,
- OCI_DEFAULT));
-
- if ((statement->error == OCI_NO_DATA) || (nrows == 0)) {
- if (statement->last_query == 0) {
- /* reset define-list for refcursosrs */
- if (statement->columns) {
- zend_hash_destroy(statement->columns);
- efree(statement->columns);
- statement->columns = 0;
- statement->ncolumns = 0;
- }
- statement->executed = 0;
- }
-
- statement->error = 0; /* OCI_NO_DATA is NO error for us!!! */
-
- return 0;
- }
-
- while (statement->error == OCI_NEED_DATA) {
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column->piecewise) {
- if (! column->data) {
- column->data = (text *) emalloc(OCI_PIECE_SIZE);
- } else {
- column->data = erealloc(column->data,column->retlen4 + OCI_PIECE_SIZE);
- }
-
- column->cb_retlen = OCI_PIECE_SIZE;
-
- CALL_OCI(OCIStmtSetPieceInfo(
- (void *) column->pDefine,
- OCI_HTYPE_DEFINE,
- statement->pError,
- ((char*)column->data) + column->retlen4,
- &(column->cb_retlen),
- OCI_NEXT_PIECE,
- &column->indicator,
- &column->retcode));
- }
- }
-
- CALL_OCI_RETURN(statement->error, OCIStmtFetch(
- statement->pStmt,
- statement->pError,
- nrows,
- OCI_FETCH_NEXT,
- OCI_DEFAULT));
-
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column->piecewise) {
- column->retlen4 += column->cb_retlen;
- }
- }
- }
-
- if (statement->error == OCI_SUCCESS_WITH_INFO || statement->error == OCI_SUCCESS) {
- /* do the stuff needed for OCIDefineByName */
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column == NULL) {
- continue;
- }
-
- if (! column->define) {
- continue;
- }
-
- zval_dtor(column->define->zval);
- _oci_make_zval(column->define->zval,statement,column,"OCIFetch",0 TSRMLS_CC);
- }
-
- return 1;
- }
-
- oci_error(statement->pError, func, statement->error);
- oci_handle_error(statement->conn, statement->error);
-
- return 0;
-}
-
-/* }}} */
-/* {{{ oci_loadlob() */
-
-#define LOBREADSIZE 1048576l /* 1MB */
-
-static int
-oci_loadlob(oci_connection *connection, oci_descriptor *mydescr, char **buffer,ub4 *loblen)
-{
- ub4 siz = 0;
- ub4 readlen = 0;
- char *buf;
- TSRMLS_FETCH();
-
- *loblen = 0;
-
- if (Z_TYPE_P(mydescr) == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error, OCILobFileOpen(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- OCI_FILE_READONLY));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileOpen",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
- }
-
- CALL_OCI_RETURN(connection->error, OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- &readlen));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobGetLength",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
-
- buf = emalloc(readlen + 1);
-
- while (readlen > 0) { /* thies loop should not be entered on readlen == 0 */
- CALL_OCI_RETURN(connection->error, OCILobRead(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- &readlen, /* IN/OUT bytes toread/read */
- siz + 1, /* offset (starts with 1) */
- (dvoid *) ((char *) buf + siz),
- readlen, /* size of buffer */
- (dvoid *)0,
- (OCICallbackLobRead) 0, /* callback... */
- (ub2) 0, /* The character set ID of the buffer data. */
- (ub1) SQLCS_IMPLICIT)); /* The character set form of the buffer data. */
-
- siz += readlen;
- readlen = LOBREADSIZE;
-
- if (connection->error == OCI_NEED_DATA) {
- buf = erealloc(buf,siz + LOBREADSIZE + 1);
- continue;
- } else {
- break;
- }
- }
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobRead", connection->error);
- oci_handle_error(connection, connection->error);
- efree(buf);
- return -1;
- }
-
- if (Z_TYPE_P(mydescr) == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error, OCILobFileClose(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileClose", connection->error);
- oci_handle_error(connection, connection->error);
- efree(buf);
- return -1;
- }
- }
-
- buf = erealloc(buf,siz+1);
- buf[ siz ] = 0;
-
- *buffer = buf;
- *loblen = siz;
-
- oci_debug("OCIloadlob: size=%d",siz);
-
- return 0;
-}
-/* }}} */
-/* {{{ oci_failover_callback() */
-#if 0 /* not needed yet ! */
-static sb4
-oci_failover_callback(dvoid *svchp,
- dvoid* envhp,
- dvoid *fo_ctx,
- ub4 fo_type,
- ub4 fo_event)
-{
- /*
- this stuff is from an oci sample - it will get cleaned up as soon as i understand it!!! (thies@thieso.net 990420)
- right now i cant get oracle to even call it;-(((((((((((
- */
-
- switch (fo_event)
- {
- case OCI_FO_BEGIN:
- {
- printf(" Failing Over ... Please stand by \n");
- printf(" Failover type was found to be %s \n",
- ((fo_type==OCI_FO_NONE) ? "NONE"
- :(fo_type==OCI_FO_SESSION) ? "SESSION"
- :(fo_type==OCI_FO_SELECT) ? "SELECT"
- : "UNKNOWN!"));
- printf(" Failover Context is :%s\n",
- (fo_ctx?(char *)fo_ctx:"NULL POINTER!"));
- break;
- }
-
- case OCI_FO_ABORT:
- {
- printf(" Failover aborted. Failover will not take place.\n");
- break;
- }
-
- case OCI_FO_END:
- {
- printf(" Failover ended ...resuming services\n");
- break;
- }
-
- case OCI_FO_REAUTH:
- {
- printf(" Failed over user. Resuming services\n");
-
- /* Application can check the OCI_ATTR_SESSION attribute of
- the service handle to find out the user being
- re-authenticated.
-
- After this, the application can replay any ALTER SESSION
- commands associated with this session. These must have
- been saved by the application in the fo_ctx
- */
- break;
- }
-
-
- case OCI_FO_ERROR:
- {
- printf(" Failover error gotten. Sleeping...\n");
- php_sleep(3);
- /* cannot find this blody define !!! return OCI_FO_RETRY; */
- break;
- }
-
- default:
- {
- printf("Bad Failover Event: %ld.\n", fo_event);
- break;
- }
- }
-
- return 0;
-}
-#endif
-/* }}} */
-/* {{{ oci_bind_in_callback() */
-
-static sb4
-oci_bind_in_callback(dvoid *ictxp, /* context pointer */
- OCIBind *bindp, /* bind handle */
- ub4 iter, /* 0-based execute iteration value */
- ub4 index, /* index of current array for PL/SQL or row index for SQL */
- dvoid **bufpp, /* pointer to data */
- ub4 *alenp, /* size after value/piece has been read */
- ub1 *piecep, /* which piece */
- dvoid **indpp) /* indicator value */
-{
- oci_bind *phpbind;
- zval *val;
-
- if (!(phpbind=(oci_bind *)ictxp) || !(val = phpbind->zval)) {
- php_error(E_WARNING, "!phpbind || !phpbind->val");
- return OCI_ERROR;
- }
-
- if (ZVAL_IS_NULL(val)) {
- /* we're going to insert a NULL column */
- phpbind->indicator = -1;
- *bufpp = 0;
- *alenp = -1;
- *indpp = (dvoid *)&phpbind->indicator;
- } else if ((phpbind->descr == 0) && (phpbind->pStmt == 0)) {
- /* "normal string bind */
- convert_to_string(val);
-
- *bufpp = Z_STRVAL_P(val);
- *alenp = Z_STRLEN_P(val);
- *indpp = (dvoid *)&phpbind->indicator;
- } else if (phpbind->pStmt != 0) {
- /* RSET */
- *bufpp = phpbind->pStmt;
- *alenp = -1; /* seems to be allright */
- *indpp = (dvoid *)&phpbind->indicator;
- } else {
- /* descriptor bind */
- *bufpp = phpbind->descr;
- *alenp = -1; /* seems to be allright */
- *indpp = (dvoid *)&phpbind->indicator;
- }
-
- *piecep = OCI_ONE_PIECE; /* pass all data in one go */
-
- return OCI_CONTINUE;
-}
-
-/* }}} */
-/* {{{ oci_bind_out_callback() */
-
-static sb4
-oci_bind_out_callback(dvoid *octxp, /* context pointer */
- OCIBind *bindp, /* bind handle */
- ub4 iter, /* 0-based execute iteration value */
- ub4 index, /* index of current array for PL/SQL or row index for SQL */
- dvoid **bufpp, /* pointer to data */
- ub4 **alenpp, /* size after value/piece has been read */
- ub1 *piecep, /* which piece */
- dvoid **indpp, /* indicator value */
- ub2 **rcodepp) /* return code */
-{
- oci_bind *phpbind;
- zval *val;
- sb4 retval = OCI_ERROR;
-
- if (!(phpbind=(oci_bind *)octxp) || !(val = phpbind->zval)) {
- php_error(E_WARNING, "!phpbind || !phpbind->val");
- return retval;
- }
-
- if ((Z_TYPE_P(val) == IS_OBJECT) || (Z_TYPE_P(val) == IS_RESOURCE)) {
- retval = OCI_CONTINUE;
- } else {
- convert_to_string(val);
- zval_dtor(val);
-
- Z_STRLEN_P(val) = OCI_PIECE_SIZE; /* 64K-1 is max XXX */
- Z_STRVAL_P(val) = emalloc(Z_STRLEN_P(phpbind->zval));
-
- /* XXX we assume that zend-zval len has 4 bytes */
- *alenpp = (ub4*) &Z_STRLEN_P(phpbind->zval);
- *bufpp = Z_STRVAL_P(phpbind->zval);
- *piecep = OCI_ONE_PIECE;
- *rcodepp = &phpbind->retcode;
- *indpp = &phpbind->indicator;
- retval = OCI_CONTINUE;
- }
-
- return retval;
-}
-
-/* }}} */
-/* {{{ _oci_open_session()
-
- */
-
-static oci_session *_oci_open_session(oci_server* server,char *username,char *password,int persistent,int exclusive)
-{
- oci_session *session = 0, *psession = 0;
- OCISvcCtx *svchp = 0;
- char *hashed_details;
- TSRMLS_FETCH();
-
- /*
- check if we already have this user authenticated
-
- we will reuse authenticated users within a request no matter if the user requested a persistent
- connections or not!
-
- but only as pesistent requested connections will be kept between requests!
- */
-
- hashed_details = (char *) malloc(strlen(SAFE_STRING(username))+
- strlen(SAFE_STRING(password))+
- strlen(SAFE_STRING(server->dbname))+1);
-
- sprintf(hashed_details,"%s%s%s",
- SAFE_STRING(username),
- SAFE_STRING(password),
- SAFE_STRING(server->dbname));
-
- if (! exclusive) {
- zend_hash_find(OCI(user), hashed_details, strlen(hashed_details)+1, (void **) &session);
-
- if (session) {
- if (session->is_open) {
- if (persistent) {
- session->persistent = 1;
- }
- free(hashed_details);
- return session;
- } else {
- _oci_close_session(session);
- /* breakthru to open */
- }
- }
- }
-
- session = calloc(1,sizeof(oci_session));
-
- if (! session) {
- goto CLEANUP;
- }
-
- session->persistent = persistent;
- session->hashed_details = hashed_details;
- session->server = server;
- session->exclusive = exclusive;
-
- /* allocate temporary Service Context */
- CALL_OCI_RETURN(OCI(error), OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&svchp,
- OCI_HTYPE_SVCCTX,
- 0,
- NULL));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_open_session: OCIHandleAlloc OCI_HTYPE_SVCCTX", OCI(error));
- goto CLEANUP;
- }
-
- /* allocate private session-handle */
- CALL_OCI_RETURN(OCI(error), OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&session->pSession,
- OCI_HTYPE_SESSION,
- 0,
- NULL));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_open_session: OCIHandleAlloc OCI_HTYPE_SESSION", OCI(error));
- goto CLEANUP;
- }
-
- /* Set the server handle in service handle */
- CALL_OCI_RETURN(OCI(error), OCIAttrSet(
- svchp,
- OCI_HTYPE_SVCCTX,
- server->pServer,
- 0,
- OCI_ATTR_SERVER,
- OCI(pError)));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_open_session: OCIAttrSet OCI_ATTR_SERVER", OCI(error));
- goto CLEANUP;
- }
-
- /* set the username in user handle */
- CALL_OCI_RETURN(OCI(error), OCIAttrSet(
- (dvoid *) session->pSession,
- (ub4) OCI_HTYPE_SESSION,
- (dvoid *) username,
- (ub4) strlen(username),
- (ub4) OCI_ATTR_USERNAME,
- OCI(pError)));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "OCIAttrSet OCI_ATTR_USERNAME", OCI(error));
- goto CLEANUP;
- }
-
- /* set the password in user handle */
- CALL_OCI_RETURN(OCI(error), OCIAttrSet(
- (dvoid *) session->pSession,
- (ub4) OCI_HTYPE_SESSION,
- (dvoid *) password,
- (ub4) strlen(password),
- (ub4) OCI_ATTR_PASSWORD,
- OCI(pError)));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "OCIAttrSet OCI_ATTR_PASSWORD", OCI(error));
- goto CLEANUP;
- }
-
- CALL_OCI_RETURN(OCI(error), OCISessionBegin(
- svchp,
- OCI(pError),
- session->pSession,
- (ub4) OCI_CRED_RDBMS,
- (ub4) OCI_DEFAULT));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "OCISessionBegin", OCI(error));
- goto CLEANUP;
- }
-
- /* Free Temporary Service Context */
- CALL_OCI(OCIHandleFree(
- (dvoid *) svchp,
- (ub4) OCI_HTYPE_SVCCTX));
-
- if (exclusive) {
- psession = session;
- } else {
- zend_hash_update(OCI(user),
- session->hashed_details,
- strlen(session->hashed_details)+1,
- (void *)session,
- sizeof(oci_session),
- (void**)&psession);
- }
-
- psession->num = zend_list_insert(psession,le_session);
- psession->is_open = 1;
-
- oci_debug("_oci_open_session new sess=%d user=%s",psession->num,username);
-
- if (! exclusive) free(session);
-
- return psession;
-
- CLEANUP:
- oci_debug("_oci_open_session: FAILURE -> CLEANUP called");
-
- _oci_close_session(session);
-
- return 0;
-}
-
-/* }}} */
-/* {{{ _oci_close_session()
- */
-
-static void
-_oci_close_session(oci_session *session)
-{
- OCISvcCtx *svchp;
- char *hashed_details;
- TSRMLS_FETCH();
-
- if (! session) {
- return;
- }
-
- oci_debug("START _oci_close_session: logging-off sess=%d",session->num);
-
- if (session->is_open) {
- /* Temporary Service Context */
- CALL_OCI_RETURN(OCI(error), OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **) &svchp,
- (ub4) OCI_HTYPE_SVCCTX,
- (size_t) 0,
- (dvoid **) 0));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session OCIHandleAlloc OCI_HTYPE_SVCCTX", OCI(error));
- }
-
- /* Set the server handle in service handle */
- CALL_OCI_RETURN(OCI(error), OCIAttrSet(
- svchp,
- OCI_HTYPE_SVCCTX,
- session->server->pServer,
- 0,
- OCI_ATTR_SERVER,
- OCI(pError)));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session: OCIAttrSet OCI_ATTR_SERVER", OCI(error));
- }
-
- /* Set the Authentication handle in the service handle */
- CALL_OCI_RETURN(OCI(error), OCIAttrSet(
- svchp,
- OCI_HTYPE_SVCCTX,
- session->pSession,
- 0,
- OCI_ATTR_SESSION,
- OCI(pError)));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session: OCIAttrSet OCI_ATTR_SESSION", OCI(error));
- }
-
- CALL_OCI_RETURN(OCI(error), OCISessionEnd(
- svchp,
- OCI(pError),
- session->pSession,
- (ub4) 0));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session: OCISessionEnd", OCI(error));
- }
-
- CALL_OCI(OCIHandleFree(
- (dvoid *) svchp,
- (ub4) OCI_HTYPE_SVCCTX));
-
- } else {
- oci_debug("_oci_close_session: logging-off DEAD session");
- }
-
- if (session->pSession) {
- CALL_OCI(OCIHandleFree(
- (dvoid *) session->pSession,
- (ub4) OCI_HTYPE_SESSION));
- }
-
- hashed_details = session->hashed_details;
-
- if (! OCI(shutdown)) {
- zend_hash_del(OCI(user), hashed_details, strlen(hashed_details)+1);
- }
-
- free(hashed_details);
-}
-
-/* }}} */
-/* {{{ _oci_open_server()
- */
-
-static oci_server *_oci_open_server(char *dbname,int persistent)
-{
- oci_server *server, *pserver = 0;
- TSRMLS_FETCH();
-
- /*
- check if we already have this server open
-
- we will reuse servers within a request no matter if the user requested persistent
- connections or not!
-
- but only as pesistent requested connections will be kept between requests!
- */
-
- zend_hash_find(OCI(server), dbname, strlen(dbname)+1, (void **) &pserver);
-
- if (pserver) {
- /* XXX ini-flag */
- /*
- if (! oci_ping(pserver)) {
- pserver->is_open = 0;
- }
- */
- if (pserver->is_open) {
- /* if our new users uses this connection persistent, we're keeping it! */
- if (persistent) {
- pserver->persistent = persistent;
- }
-
- return pserver;
- } else { /* server "died" in the meantime - try to reconnect! */
- _oci_close_server(pserver);
- /* breakthru to open */
- }
- }
-
- server = calloc(1,sizeof(oci_server));
-
- server->persistent = persistent;
- server->dbname = strdup(SAFE_STRING(dbname));
-
- CALL_OCI(OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&server->pServer,
- OCI_HTYPE_SERVER,
- 0,
- NULL));
-
- CALL_OCI_RETURN(OCI(error), OCIServerAttach(
- server->pServer,
- OCI(pError),
- (text*)server->dbname,
- strlen(server->dbname),
- (ub4) OCI_DEFAULT));
-
- if (OCI(error)) {
- oci_error(OCI(pError), "_oci_open_server", OCI(error));
- goto CLEANUP;
- }
-
- zend_hash_update(OCI(server),
- server->dbname,
- strlen(server->dbname)+1,
- (void *)server,
- sizeof(oci_server),
- (void**)&pserver);
-
- pserver->num = zend_list_insert(pserver,le_server);
- pserver->is_open = 1;
-
- oci_debug("_oci_open_server new conn=%d dname=%s",server->num,server->dbname);
-
- free(server);
-
- return pserver;
-
- CLEANUP:
- oci_debug("_oci_open_server: FAILURE -> CLEANUP called");
-
- _oci_close_server(server);
-
- return 0;
-}
-
-#if 0
- server->failover.fo_ctx = (dvoid *) server;
- server->failover.callback_function = oci_failover_callback;
-
- error = OCIAttrSet((dvoid *)server->pServer,
- (ub4) OCI_HTYPE_SERVER,
- (dvoid *) &server->failover,
- (ub4) 0,
- (ub4) OCI_ATTR_FOCBK,
- OCI(pError));
-
- if (error) {
- oci_error(OCI(pError), "_oci_open_server OCIAttrSet OCI_ATTR_FOCBK", error);
- goto CLEANUP;
- }
-#endif
-
-
-/* }}} */
-/* {{{ _oci_close_server()
- */
-
-static int _oci_session_cleanup(void *data TSRMLS_DC)
-{
- list_entry *le = (list_entry *) data;
- if (Z_TYPE_P(le) == le_session) {
- oci_server *server = ((oci_session*) le->ptr)->server;
- if (server->is_open == 2)
- return 1;
- }
- return 0;
-}
-
-
-static void
-_oci_close_server(oci_server *server)
-{
- char *dbname;
- int oldopen;
- TSRMLS_FETCH();
-
- oldopen = server->is_open;
- server->is_open = 2;
- if (! OCI(shutdown)) {
- zend_hash_apply(&EG(regular_list), (apply_func_t) _oci_session_cleanup TSRMLS_CC);
- }
- server->is_open = oldopen;
-
- oci_debug("START _oci_close_server: detaching conn=%d dbname=%s",server->num,server->dbname);
-
- /* XXX close server here */
-
- if (server->is_open) {
- if (server->pServer && OCI(pError)) {
- CALL_OCI_RETURN(
- OCI(error),
- OCIServerDetach(server->pServer,
- OCI(pError),
- OCI_DEFAULT));
-
- if (OCI(error)) {
- oci_error(OCI(pError), "oci_close_server OCIServerDetach", OCI(error));
- }
- }
- } else {
- oci_debug("_oci_close_server: closing DEAD server");
- }
-
- if (server->pServer) {
- CALL_OCI(OCIHandleFree(
- (dvoid *) server->pServer,
- (ub4) OCI_HTYPE_SERVER));
- }
-
- dbname = server->dbname;
-
- if (! OCI(shutdown)) {
- zend_hash_del(OCI(server),dbname,strlen(dbname)+1);
- }
-
- free(dbname);
-}
-
-/* }}} */
-/* {{{ oci_do_connect()
- Connect to an Oracle database and log on. returns a new session.
- */
-static void oci_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent,int exclusive)
-{
- char *username, *password, *dbname;
- zval **userParam, **passParam, **dbParam;
- oci_server *server = 0;
- oci_session *session = 0;
- oci_connection *connection = 0;
-
- if (zend_get_parameters_ex(3, &userParam, &passParam, &dbParam) == SUCCESS) {
- convert_to_string_ex(userParam);
- convert_to_string_ex(passParam);
- convert_to_string_ex(dbParam);
-
- username = Z_STRVAL_PP(userParam);
- password = Z_STRVAL_PP(passParam);
- dbname = Z_STRVAL_PP(dbParam);
- } else if (zend_get_parameters_ex(2, &userParam, &passParam) == SUCCESS) {
- convert_to_string_ex(userParam);
- convert_to_string_ex(passParam);
-
- username = Z_STRVAL_PP(userParam);
- password = Z_STRVAL_PP(passParam);
- dbname = "";
- } else {
- WRONG_PARAM_COUNT;
- }
-
- connection = (oci_connection *) ecalloc(1,sizeof(oci_connection));
-
- if (! connection) {
- goto CLEANUP;
- }
-
- server = _oci_open_server(dbname,persistent);
-
- if (! server) {
- goto CLEANUP;
- }
-
- if (exclusive) {
- /* exlusive session can never be persistent!*/
- persistent = 0;
- } else {
- /* if our server-context is not persistent we can't */
- persistent = server->persistent;
- }
-
- session = _oci_open_session(server,username,password,persistent,exclusive);
-
- if (! session) {
- goto CLEANUP;
- }
-
- /* set our session */
- connection->session = session;
-
- /* allocate our private error-handle */
- CALL_OCI_RETURN(OCI(error), OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&connection->pError,
- OCI_HTYPE_ERROR,
- 0,
- NULL));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "oci_do_connect: OCIHandleAlloc OCI_HTYPE_ERROR",OCI(error));
- goto CLEANUP;
- }
-
- /* allocate our service-context */
- CALL_OCI_RETURN(OCI(error), OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&connection->pServiceContext,
- OCI_HTYPE_SVCCTX,
- 0,
- NULL));
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "oci_do_connect: OCIHandleAlloc OCI_HTYPE_SVCCTX",OCI(error));
- goto CLEANUP;
- }
-
- /* Set the server handle in service handle */
- CALL_OCI_RETURN(connection->error, OCIAttrSet(
- connection->pServiceContext,
- OCI_HTYPE_SVCCTX,
- server->pServer,
- 0,
- OCI_ATTR_SERVER,
- connection->pError));
-
- if (connection->error != OCI_SUCCESS) {
- oci_error(connection->pError, "oci_do_connect: OCIAttrSet OCI_ATTR_SERVER", connection->error);
- goto CLEANUP;
- }
-
- /* Set the Authentication handle in the service handle */
- CALL_OCI_RETURN(connection->error, OCIAttrSet(
- connection->pServiceContext,
- OCI_HTYPE_SVCCTX,
- session->pSession,
- 0,
- OCI_ATTR_SESSION,
- connection->pError));
-
- if (connection->error != OCI_SUCCESS) {
- oci_error(connection->pError, "oci_do_connect: OCIAttrSet OCI_ATTR_SESSION", connection->error);
- goto CLEANUP;
- }
-
- /*
- OCIAttrSet((dvoid *)session->server->pServer,
- OCI_HTYPE_SERVER,
- (dvoid *) "demo",
- 0,
- OCI_ATTR_EXTERNAL_NAME,
- connection->pError);
-
- OCIAttrSet((dvoid *)session->server->pServer,
- OCI_HTYPE_SERVER,
- (dvoid *) "txn demo2",
- 0,
- OCI_ATTR_INTERNAL_NAME,
- connection->pError);
- */
-
- connection->id = zend_list_insert(connection, le_conn);
-
- connection->is_open = 1;
-
- oci_debug("oci_do_connect: id=%d",connection->id);
-
- RETURN_RESOURCE(connection->id);
-
- CLEANUP:
- oci_debug("oci_do_connect: FAILURE -> CLEANUP called");
-
- if (connection->id) {
- zend_list_delete(connection->id);
- } else {
- _oci_conn_list_dtor(connection TSRMLS_CC);
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/************************* EXTENSION FUNCTIONS *************************/
-
-/* {{{ proto int ocidefinebyname(int stmt, string name, mixed &var [, int type])
- Define a PHP variable to an Oracle column by name */
-/* if you want to define a LOB/CLOB etc make sure you allocate it via OCINewDescriptor BEFORE defining!!!
- */
-
-PHP_FUNCTION(ocidefinebyname)
-{
- zval **stmt, **name, **var, **type;
- oci_statement *statement;
- oci_define *define, *tmp_define;
- ub2 ocitype = SQLT_CHR; /* zero terminated string */
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 3 || ac > 4 || zend_get_parameters_ex(ac, &stmt, &name, &var, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 4:
- convert_to_long_ex(type);
- ocitype = (ub2) Z_LVAL_PP(type);
- /* possible breakthru */
- }
-
- OCI_GET_STMT(statement,stmt);
-
- convert_to_string_ex(name);
-
- if (statement->defines == NULL) {
- ALLOC_HASHTABLE(statement->defines);
- zend_hash_init(statement->defines, 13, NULL, _oci_define_hash_dtor, 0);
- }
-
- define = ecalloc(1,sizeof(oci_define));
-
- if (zend_hash_add(statement->defines,
- Z_STRVAL_PP(name),
- Z_STRLEN_PP(name),
- define,
- sizeof(oci_define),
- (void **)&tmp_define) == SUCCESS) {
- efree(define);
- define = tmp_define;
- } else {
- efree(define);
- RETURN_FALSE;
- }
-
- define->name = (text*) estrndup(Z_STRVAL_PP(name),Z_STRLEN_PP(name));
- define->name_len = Z_STRLEN_PP(name);
- Z_TYPE_P(define) = ocitype;
- define->zval = *var;
- zval_add_ref(var);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ocibindbyname(int stmt, string name, mixed &var, int maxlength [, int type])
- Bind a PHP variable to an Oracle placeholder by name */
-/* if you want to bind a LOB/CLOB etc make sure you allocate it via OCINewDescriptor BEFORE binding!!!
- */
-
-PHP_FUNCTION(ocibindbyname)
-{
- zval **stmt, **name, **var, **maxlen, **type;
- oci_statement *statement;
- oci_statement *bindstmt;
- oci_bind bind, *bindp;
- oci_descriptor *descr;
-#ifdef WITH_COLLECTIONS
- oci_collection *coll;
- dvoid *mycoll = 0;
-#endif
- int mode = OCI_DATA_AT_EXEC;
- ub2 ocitype = SQLT_CHR; /* unterminated string */
- OCIStmt *mystmt = 0;
- dvoid *mydescr = 0;
- sb4 value_sz = -1;
- int ac = ZEND_NUM_ARGS(), inx;
-
- if (ac < 3 || ac > 5 || zend_get_parameters_ex(ac, &stmt, &name, &var, &maxlen, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 5:
- convert_to_long_ex(type);
- ocitype = (ub2) Z_LVAL_PP(type);
- /* possible breakthru */
- case 4:
- convert_to_long_ex(maxlen);
- value_sz = Z_LVAL_PP(maxlen);
- /* possible breakthru */
- }
-
- OCI_GET_STMT(statement,stmt);
-
- switch (ocitype) {
-#ifdef WITH_COLLECTIONS
- case SQLT_NTY:
- if(Z_TYPE_PP(var) != IS_OBJECT) {
- php_error(E_WARNING,"Variable must be allocated using OCINewCollection()");
- RETURN_FALSE;
- }
- if ((inx = _oci_get_ocicoll(*var,&coll TSRMLS_CC)) == 0) {
- php_error(E_WARNING,"Variable must be allocated using OCINewCollection()");
- RETURN_FALSE;
- }
- if (! (mycoll = (dvoid *) coll->coll)) {
- php_error(E_WARNING,"Collection empty");
- RETURN_FALSE;
- }
- value_sz = sizeof(void*);
- mode = OCI_DEFAULT;
- break;
-#endif
- case SQLT_BFILEE:
- case SQLT_CFILEE:
- case SQLT_CLOB:
- case SQLT_BLOB:
- case SQLT_RDD:
- if (Z_TYPE_PP(var) != IS_OBJECT) {
- php_error(E_WARNING,"Variable must be allocated using OCINewDescriptor()");
- RETURN_FALSE;
- }
-
- if ((inx = _oci_get_ocidesc(*var,&descr TSRMLS_CC)) == 0) {
- php_error(E_WARNING,"Variable must be allocated using OCINewDescriptor()");
- RETURN_FALSE;
- }
-
- if (! (mydescr = (dvoid *) descr->ocidescr)) {
- php_error(E_WARNING,"Descriptor empty");
- RETURN_FALSE;
- }
- value_sz = sizeof(void*);
- break;
-
- case SQLT_RSET:
- OCI_GET_STMT(bindstmt,var);
-
- if (! (mystmt = bindstmt->pStmt)) {
- RETURN_FALSE;
- }
- value_sz = sizeof(void*);
- break;
- }
-
- if ((ocitype == SQLT_CHR) && (value_sz == -1)) {
- convert_to_string_ex(var);
- value_sz = Z_STRLEN_PP(var);
- }
-
- if (value_sz == 0) {
- value_sz = 1;
- }
-
- convert_to_string_ex(name);
-
- if (! statement->binds) {
- ALLOC_HASHTABLE(statement->binds);
- zend_hash_init(statement->binds, 13, NULL, _oci_bind_hash_dtor, 0);
- }
-
- memset((void*)&bind,0,sizeof(oci_bind));
- zend_hash_next_index_insert(statement->binds,&bind,sizeof(oci_bind),(void **)&bindp);
-
- bindp->descr = mydescr;
- bindp->pStmt = mystmt;
- bindp->zval = *var;
- zval_add_ref(var);
-
- CALL_OCI_RETURN(statement->error, OCIBindByName(
- statement->pStmt, /* statement handle */
- (OCIBind **)&bindp->pBind, /* bind hdl (will alloc) */
- statement->pError, /* error handle */
- (text*) Z_STRVAL_PP(name), /* placeholder name */
- Z_STRLEN_PP(name), /* placeholder length */
- (dvoid *)0, /* in/out data */
- value_sz, /* OCI_MAX_DATA_SIZE, */ /* max size of input/output data */
- (ub2)ocitype, /* in/out data type */
- (dvoid *)&bindp->indicator, /* indicator (ignored) */
- (ub2 *)0, /* size array (ignored) */
- (ub2 *)&bindp->retcode, /* return code (ignored) */
- (ub4)0, /* maxarr_len (PL/SQL only?) */
- (ub4 *)0, /* actual array size (PL/SQL only?) */
- mode /* mode */
- ));
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIBindByName", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
-
- if (mode == OCI_DATA_AT_EXEC) {
- CALL_OCI_RETURN(statement->error, OCIBindDynamic(
- bindp->pBind,
- statement->pError,
- (dvoid *)bindp,
- oci_bind_in_callback,
- (dvoid *)bindp,
- oci_bind_out_callback));
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIBindDynamic", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
- }
-
-#ifdef WITH_COLLECTIONS
- if (ocitype == SQLT_NTY) {
- /* Bind object */
- CALL_OCI_RETURN(statement->error, OCIBindObject(
- bindp->pBind,
- statement->pError,
- coll->tdo,
- (dvoid **) &(coll->coll),
- (ub4 *) 0,
- (dvoid **) 0,
- (ub4 *) 0));
-
- if (statement->error) {
- oci_error(statement->pError, "OCIBindObject", statement->error);
- RETURN_FALSE;
- }
- }
-#endif
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ocifreedesc(object lob)
- Deletes large object description */
-
-PHP_FUNCTION(ocifreedesc)
-{
- zval *id;
- int inx;
- oci_descriptor *descriptor;
-
- if ((id = getThis()) != 0) {
- inx = _oci_get_ocidesc(id,&descriptor TSRMLS_CC);
- if (inx) {
- oci_debug("OCIfreedesc: descr=%d",inx);
- zend_list_delete(inx);
- RETURN_TRUE;
- }
- }
-
- php_error(E_NOTICE, "OCIFreeDesc() should not be called like this. Use $somelob->free() to free a LOB");
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocisavelob(object lob)
- Saves a large object */
-
-PHP_FUNCTION(ocisavelob)
-{
- zval *id, **arg,**oarg;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int offparam,inx;
- ub4 loblen;
- ub4 curloblen;
- ub4 offset;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (! mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- offset = 0;
- if (zend_get_parameters_ex(2, &arg, &oarg) == SUCCESS) {
- convert_to_long_ex(oarg);
- offparam = Z_LVAL_PP(oarg);
-
- CALL_OCI_RETURN(connection->error, OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &curloblen));
-
- oci_debug("OCIsavedesc: curloblen=%d",curloblen);
-
- if (offparam == -1) {
- offset = curloblen;
- } else if ((ub4) offparam >= curloblen) {
- php_error(E_WARNING, "Offset smaller than current LOB-Size - appending");
- offset = curloblen;
- } else {
- offset = offparam;
- }
- } else if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- offset++;
- convert_to_string_ex(arg);
- loblen = Z_STRLEN_PP(arg);
-
- if (loblen < 1) {
- php_error(E_WARNING, "Cannot save a lob which size is less than 1 byte");
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &loblen,
- (ub4) offset,
- (dvoid *) Z_STRVAL_PP(arg),
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (OCICallbackLobWrite) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT));
-
- oci_debug("OCIsavedesc: size=%d offset=%d",loblen,offset);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/* {{{ proto string ocisavelobfile(object lob)
- Saves a large object file */
-
-PHP_FUNCTION(ocisavelobfile)
-{
- zval *id, **arg;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- char *filename;
- int fp,inx;
- char buf[8192];
- ub4 offset = 1;
- ub4 loblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (! mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- filename = Z_STRVAL_PP(arg);
-
- if ((fp = VCWD_OPEN(filename, O_RDONLY|O_BINARY)) == -1) {
- php_error(E_WARNING, "Can't open file %s", filename);
- RETURN_FALSE;
- }
-
- while ((loblen = read(fp, &buf, sizeof(buf))) > 0) {
- CALL_OCI_RETURN(connection->error, OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &loblen,
- (ub4) offset,
- (dvoid *) &buf,
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (OCICallbackLobWrite) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT));
-
- oci_debug("OCIsavelob: size=%d",loblen);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- close(fp);
- RETURN_FALSE;
- }
-
- offset += loblen;
- }
- close(fp);
-
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/* {{{ proto string ociloadlob(object lob)
- Loads a large object */
-
-PHP_FUNCTION(ociloadlob)
-{
- zval *id;
- oci_descriptor *descr;
- char *buffer;
- int inx;
- ub4 loblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (!oci_loadlob(descr->conn,descr,&buffer,&loblen)) {
- RETURN_STRINGL(buffer,loblen,0);
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto void ociwritelobtofile(object lob [, string filename] [, int start] [, int length])
- Writes a large object into a file */
-
-PHP_FUNCTION(ociwritelobtofile)
-{
- zval *id, **zfilename, **zstart, **zlength;
- char *filename = NULL;
- int start = -1;
- ub4 length = -1;
- oci_connection *connection;
- oci_descriptor *descr;
- char *buffer=0;
- ub4 loblen;
- int ac = ZEND_NUM_ARGS();
- int fp = -1,inx;
- OCILobLocator *mylob;
- int coffs;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (! mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (ac < 0 || ac > 3 || zend_get_parameters_ex(ac, &zfilename, &zstart, &zlength) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 3:
- convert_to_long_ex(zlength);
- length = Z_LVAL_PP(zlength);
- case 2:
- convert_to_long_ex(zstart);
- start = Z_LVAL_PP(zstart);
- case 1:
- convert_to_string_ex(zfilename);
- filename = Z_STRVAL_PP(zfilename);
- }
-
- if (filename && *filename) {
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- goto bail;
- }
-
- if ((fp = VCWD_OPEN_MODE(filename,O_CREAT | O_RDWR | O_BINARY | O_TRUNC, 0600)) == -1) {
- php_error(E_WARNING, "Can't create file %s", filename);
- goto bail;
- }
- }
-
- CALL_OCI_RETURN(connection->error, OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr,
- &loblen));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobGetLength", connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
-
- if (Z_TYPE_P(descr) == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error, OCILobFileOpen(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr,
- OCI_FILE_READONLY));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileOpen",connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
- }
-
- if (start == -1) {
- start = 0;
- }
-
- if (length == -1) {
- length = loblen - start;
- }
-
- if ((start + length) > loblen) {
- length = loblen - start;
- }
-
-#define OCI_LOB_READ_BUFFER 128*1024
-
- buffer = emalloc(OCI_LOB_READ_BUFFER);
-
- coffs = start;
-
- oci_debug("ociwritelobtofile(start = %d, length = %d, loblen = %d",start,length,loblen);
-
- while (length > 0) {
- ub4 toread;
-
- if (length > OCI_LOB_READ_BUFFER) {
- toread = OCI_LOB_READ_BUFFER;
- } else {
- toread = length;
- }
-
- oci_debug("OCILobRead(coffs = %d, toread = %d",coffs,toread);
-
- CALL_OCI_RETURN(connection->error, OCILobRead(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr,
- &toread, /* IN/OUT bytes toread/read */
- coffs+1, /* offset (starts with 1) */
- (dvoid *) buffer,
- toread, /* size of buffer */
- (dvoid *)0,
- (OCICallbackLobRead) 0, /* callback... */
- (ub2) 0, /* The character set ID of the buffer data. */
- (ub1) SQLCS_IMPLICIT)); /* The character set form of the buffer data. */
-
- oci_debug("OCILobRead(read - %d",toread);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobRead", connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
-
- if (fp != -1) {
- if ((ub4) write(fp,buffer,toread) != toread) {
- php_error(E_WARNING, "cannot write file!");
- goto bail;
- }
- } else {
- PHPWRITE(buffer,toread);
- }
-
- length -= toread;
- coffs += toread;
- }
-
- efree(buffer);
- buffer = 0;
-
- if (fp != -1) {
- close(fp);
- fp = 0;
- }
-
- if (Z_TYPE_P(descr) == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,OCILobFileClose(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileClose", connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
- }
- RETURN_TRUE;
- }
-
- bail:
- if (fp != -1) {
- close(fp);
- }
-
- if (buffer) {
- efree(buffer);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_OCI8_TEMP_LOB
-/* {{{ proto int ociwritetemporarylob(int stmt, int loc, string var)
- Return the row count of an OCI statement */
-
-PHP_FUNCTION(ociwritetemporarylob)
-{
- zval *id, **var;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- ub4 offset = 1;
- ub4 loblen;
-
- oci_debug ("oci_write_temporary_lob");
-
- if ((id = getThis()) == 0) {
- RETURN_FALSE;
- }
-
- if (_oci_get_ocidesc(id,&descr TSRMLS_CC) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (! mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (zend_get_parameters_ex(1, &var) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(var);
-
- CALL_OCI_RETURN(connection->error, OCILobCreateTemporary(
- connection->pServiceContext,
- connection->pError,
- mylob,
- OCI_DEFAULT,
- OCI_DEFAULT,
- OCI_TEMP_CLOB,
- OCI_ATTR_NOCACHE,
- OCI_DURATION_STATEMENT));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobCreateTemporary", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCILobOpen(
- connection->pServiceContext,
- connection->pError,
- mylob,
- OCI_LOB_READWRITE));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobOpen", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- convert_to_string_ex(var);
- loblen = Z_STRLEN_PP(var);
-
- if (loblen < 1) {
- php_error(E_WARNING, "Cannot save a lob that is less than 1 byte");
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- (ub4 *) &loblen,
- (ub4) offset,
- (dvoid *) Z_STRVAL_PP(var),
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (sb4 (*)(dvoid *, dvoid *, ub4 *, ub1 *)) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ocicloselob(object lob)
- Closes lob descriptor */
-
-PHP_FUNCTION(ocicloselob)
-{
- zval *id;
- int inx;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descriptor;
- int is_temporary;
-
- if ((id = getThis()) != 0) {
- inx = _oci_get_ocidesc(id,&descriptor TSRMLS_CC);
- if (inx) {
-
- mylob = (OCILobLocator *) descriptor->ocidescr;
-
- if (! mylob) {
- RETURN_FALSE;
- }
-
- connection = descriptor->conn;
-
- CALL_OCI_RETURN(connection->error, OCILobClose(
- connection->pServiceContext,
- connection->pError,
- mylob));
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobClose", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- connection->error =
- OCILobIsTemporary(OCI(pEnv),
- connection->pError,
- mylob,
- &is_temporary);
- if (is_temporary) {
- connection->error =
- OCILobFreeTemporary(connection->pServiceContext,
- connection->pError,
- mylob);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFreeTemporary",
- connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
- oci_debug("oci_lob_free_temporary: descr=%d",inx);
- }
-
- oci_debug("oci_close_lob: descr=%d",inx);
- RETURN_TRUE;
- }
- }
-
- php_error(E_NOTICE, "OCICloselob() should not be called like this. Use $somelob->close() to close a LOB");
-
- RETURN_FALSE;
-}
-
-/* }}} */
-#endif
-
-/* {{{ proto string ocinewdescriptor(int connection [, int type])
- Initialize a new empty descriptor LOB/FILE (LOB is default) */
-
-PHP_FUNCTION(ocinewdescriptor)
-{
- zval **conn, **type;
- oci_connection *connection;
- oci_descriptor *descr;
- int dtype;
-
- dtype = OCI_DTYPE_LOB;
-
- if (zend_get_parameters_ex(2, &conn, &type) == SUCCESS) {
- convert_to_long_ex(type);
- dtype = Z_LVAL_PP(type);
- } else if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- descr = oci_new_desc(dtype,connection);
-
- object_init_ex(return_value, oci_lob_class_entry_ptr);
- add_property_resource(return_value, "descriptor", descr->id);
-}
-
-/* }}} */
-
-/* {{{ proto string ocirollback(int conn)
- Rollback the current context */
-
-PHP_FUNCTION(ocirollback)
-{
- zval **conn;
- oci_connection *connection;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- oci_debug("<OCITransRollback");
-
- CALL_OCI_RETURN(connection->error, OCITransRollback(
- connection->pServiceContext,
- connection->pError,
- (ub4) 0));
-
- connection->needs_commit = 0;
-
- oci_debug(">OCITransRollback");
-
- if (connection->error) {
- oci_error(connection->pError, "OCIRollback", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ocicommit(int conn)
- Commit the current context */
-
-PHP_FUNCTION(ocicommit)
-{
- zval **conn;
- oci_connection *connection;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- oci_debug("<OCITransCommit");
-
- CALL_OCI_RETURN(connection->error, OCITransCommit(
- connection->pServiceContext,
- connection->pError,
- (ub4) 0));
-
- connection->needs_commit = 0;
-
- oci_debug(">OCITransCommit");
-
- if (connection->error) {
- oci_error(connection->pError, "OCICommit", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ocicolumnname(int stmt, int col)
- Tell the name of a column */
-
-PHP_FUNCTION(ocicolumnname)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(outcol->name, outcol->name_len, 1);
-}
-
-/* }}} */
-
-/* {{{ proto int ocicolumnsize(int stmt, int col)
- Tell the maximum data size of a column */
-
-PHP_FUNCTION(ocicolumnsize)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
-
- oci_debug("ocicolumnsize: %16s, retlen = %4d, retlen4 = %d, data_size = %4d, storage_size4 = %4d, indicator %4d, retcode = %4d",
- outcol->name,outcol->retlen,outcol->retlen4,outcol->data_size,outcol->storage_size4,outcol->indicator,outcol->retcode);
-
- /* Handle data type of LONG */
- if (outcol->data_type == SQLT_LNG){
- RETURN_LONG(outcol->storage_size4);
- } else {
- RETURN_LONG(outcol->data_size);
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ocicolumnscale(int stmt, int col)
- Tell the scale of a column */
-
-PHP_FUNCTION(ocicolumnscale)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- RETURN_LONG(outcol->scale);
-}
-
-/* }}} */
-
-/* {{{ proto int ocicolumnprecision(int stmt, int col)
- Tell the precision of a column */
-
-PHP_FUNCTION(ocicolumnprecision)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- RETURN_LONG(outcol->precision);
-}
-
-/* }}} */
-
-/* {{{ proto mixed ocicolumntype(int stmt, int col)
- Tell the data type of a column */
-
-PHP_FUNCTION(ocicolumntype)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- switch (outcol->data_type) {
- case SQLT_DAT:
- RETVAL_STRING("DATE",1);
- break;
- case SQLT_NUM:
- RETVAL_STRING("NUMBER",1);
- break;
- case SQLT_LNG:
- RETVAL_STRING("LONG",1);
- break;
- case SQLT_BIN:
- RETVAL_STRING("RAW",1);
- break;
- case SQLT_LBI:
- RETVAL_STRING("LONG RAW",1);
- break;
- case SQLT_CHR:
- RETVAL_STRING("VARCHAR",1);
- break;
- case SQLT_RSET:
- RETVAL_STRING("REFCURSOR",1);
- break;
- case SQLT_AFC:
- RETVAL_STRING("CHAR",1);
- break;
- case SQLT_BLOB:
- RETVAL_STRING("BLOB",1);
- break;
- case SQLT_CLOB:
- RETVAL_STRING("CLOB",1);
- break;
- case SQLT_BFILE:
- RETVAL_STRING("BFILE",1);
- break;
- case SQLT_RDD:
- RETVAL_STRING("ROWID",1);
- break;
- default:
- RETVAL_LONG(outcol->data_type);
- }
-}
-
-/* }}} */
-
-/* {{{ proto mixed ocicolumntyperaw(int stmt, int col)
- Tell the raw oracle data type of a column */
-
-PHP_FUNCTION(ocicolumntyperaw)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- RETVAL_LONG(outcol->data_type);
-}
-
-/* }}} */
-
-/* {{{ proto int ocicolumnisnull(int stmt, int col)
- Tell whether a column is NULL */
-
-PHP_FUNCTION(ocicolumnisnull)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- if (outcol->indicator == -1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto void ociinternaldebug(int onoff)
- Toggle internal debugging output for the OCI extension */
-/* Disables or enables the internal debug output.
- * By default it is disabled.
- */
-PHP_FUNCTION(ociinternaldebug)
-{
- zval **arg;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg);
- OCI(debug_mode) = Z_LVAL_PP(arg);
-}
-
-
-/* }}} */
-
-/* {{{ proto int ociexecute(int stmt [, int mode])
- Execute a parsed statement */
-
-PHP_FUNCTION(ociexecute)
-{
- zval **stmt,**mode;
- oci_statement *statement;
- ub4 execmode;
-
- if (zend_get_parameters_ex(2, &stmt, &mode) == SUCCESS) {
- convert_to_long_ex(mode);
- execmode = Z_LVAL_PP(mode);
- } else if (zend_get_parameters_ex(1, &stmt) == SUCCESS) {
- execmode = OCI_COMMIT_ON_SUCCESS;
- } else {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (oci_execute(statement, "OCIExecute",execmode)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ocicancel(int stmt)
- Prepare a new row of data for reading */
-
-PHP_FUNCTION(ocicancel)
-{
- zval **stmt;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (oci_fetch(statement, 0, "OCICancel" TSRMLS_CC)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ocifetch(int stmt)
- Prepare a new row of data for reading */
-
-PHP_FUNCTION(ocifetch)
-{
- zval **stmt;
- oci_statement *statement;
- ub4 nrows = 1; /* only one row at a time is supported for now */
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (oci_fetch(statement, nrows, "OCIFetch" TSRMLS_CC)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ocifetchinto(int stmt, array &output [, int mode])
- Fetch a row of result data into an array */
-
-PHP_FUNCTION(ocifetchinto)
-{
- zval **stmt, **array, *element, **fmode;
- oci_statement *statement;
- oci_out_column *column;
- ub4 nrows = 1;
- int i, used;
- int mode = OCI_NUM;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &stmt, &array, &fmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 3:
- convert_to_long_ex(fmode);
- mode = Z_LVAL_PP(fmode);
- /* possible breakthru */
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (!oci_fetch(statement, nrows, "OCIFetchInto" TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- zval_dtor(*array);
- if (array_init(*array) == FAILURE) {
- php_error(E_WARNING, "OCIFetchInto: unable to convert arg 2 to array");
- RETURN_FALSE;
- }
-
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column == NULL) {
- continue;
- }
-
- if ((column->indicator == -1) && ((mode & OCI_RETURN_NULLS) == 0)) {
- continue;
- }
-
- used = 0;
- MAKE_STD_ZVAL(element);
- _oci_make_zval(element,statement,column,"OCIFetchInto",mode TSRMLS_CC);
-
- if ((mode & OCI_NUM) || (! (mode & OCI_ASSOC))) {
- zend_hash_index_update(Z_ARRVAL_PP(array),i,(void *)&element,sizeof(zval*),NULL);
- used=1;
- }
-
- if (mode & OCI_ASSOC) {
- if (used) {
- element->refcount++;
- }
- zend_hash_update(Z_ARRVAL_PP(array),column->name,column->name_len+1,(void *)&element,sizeof(zval*),NULL);
- }
- }
-
- RETURN_LONG(statement->ncolumns);
-}
-
-/* }}} */
-
-/* {{{ proto int ocifetchstatement(int stmt, array &output[, int skip][, int maxrows][, int flags])
- Fetch all rows of result data into an array */
-
-PHP_FUNCTION(ocifetchstatement)
-{
- zval **stmt, **array, *element, **zskip, **zmaxrows, **zflags, *tmp;
- oci_statement *statement;
- oci_out_column **columns;
- zval ***outarrs;
- ub4 nrows = 1;
- int i;
- int skip = 0, maxrows = -1;
- int flags = 0;
- int rows = 0;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 5 || zend_get_parameters_ex(ac, &stmt, &array, &zskip, &zmaxrows, &zflags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 5:
- convert_to_long_ex(zflags);
- flags = Z_LVAL_PP(zflags);
- case 4:
- convert_to_long_ex(zmaxrows);
- maxrows = Z_LVAL_PP(zmaxrows);
- case 3:
- convert_to_long_ex(zskip);
- skip = Z_LVAL_PP(zskip);
- }
-
- OCI_GET_STMT(statement,stmt);
-
- zval_dtor(*array);
- array_init(*array);
-
- while (skip--) {
- if (! oci_fetch(statement, nrows, "OCIFetchStatement" TSRMLS_CC))
- RETURN_LONG(0);
- }
-
- if (flags & OCI_FETCHSTATEMENT_BY_ROW) {
- columns = emalloc(statement->ncolumns * sizeof(oci_out_column *));
-
- for (i = 0; i < statement->ncolumns; i++) {
- columns[ i ] = oci_get_col(statement, i + 1, 0);
- }
-
- while (oci_fetch(statement, nrows, "OCIFetchStatement" TSRMLS_CC)) {
- zval *row;
-
- MAKE_STD_ZVAL(row);
- array_init(row);
-
- for (i = 0; i < statement->ncolumns; i++) {
- MAKE_STD_ZVAL(element);
-
- _oci_make_zval(element,statement,columns[ i ], "OCIFetchStatement",OCI_RETURN_LOBS TSRMLS_CC);
-
- if (flags & OCI_NUM) {
- zend_hash_next_index_insert(Z_ARRVAL_P(row), &element, sizeof(zval*), NULL);
- } else { /* default to ASSOC */
- zend_hash_update(Z_ARRVAL_P(row),
- columns[ i ]->name, columns[ i ]->name_len+1,
- &element, sizeof(zval*), NULL);
- }
- }
-
- zend_hash_next_index_insert(Z_ARRVAL_PP(array), &row, sizeof(zval*), NULL),
-
- rows++;
-
- if ((maxrows != -1) && (rows == maxrows)) {
- oci_fetch(statement, 0, "OCIFetchStatement" TSRMLS_CC);
- break;
- }
- }
-
- efree(columns);
- } else { /* default to BY_COLUMN */
- columns = emalloc(statement->ncolumns * sizeof(oci_out_column *));
- outarrs = emalloc(statement->ncolumns * sizeof(zval*));
-
- if (flags & OCI_NUM) {
- for (i = 0; i < statement->ncolumns; i++) {
- columns[ i ] = oci_get_col(statement, i + 1, 0);
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- zend_hash_next_index_insert(Z_ARRVAL_PP(array),
- &tmp, sizeof(zval*), (void **) &(outarrs[ i ]));
- }
- } else { /* default to ASSOC */
- for (i = 0; i < statement->ncolumns; i++) {
- columns[ i ] = oci_get_col(statement, i + 1, 0);
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- zend_hash_update(Z_ARRVAL_PP(array),
- columns[ i ]->name, columns[ i ]->name_len+1,
- (void *) &tmp, sizeof(zval*), (void **) &(outarrs[ i ]));
- }
- }
-
- while (oci_fetch(statement, nrows, "OCIFetchStatement" TSRMLS_CC)) {
- for (i = 0; i < statement->ncolumns; i++) {
- MAKE_STD_ZVAL(element);
-
- _oci_make_zval(element,statement,columns[ i ], "OCIFetchStatement",OCI_RETURN_LOBS TSRMLS_CC);
-
- zend_hash_index_update((*(outarrs[ i ]))->value.ht, rows, (void *)&element, sizeof(zval*), NULL);
- }
-
- rows++;
-
- if ((maxrows != -1) && (rows == maxrows)) {
- oci_fetch(statement, 0, "OCIFetchStatement" TSRMLS_CC);
- break;
- }
- }
-
- efree(columns);
- efree(outarrs);
- }
-
- RETURN_LONG(rows);
-}
-
-/* }}} */
-
-/* {{{ proto int ocifreestatement(int stmt)
- Free all resources associated with a statement */
-
-PHP_FUNCTION(ocifreestatement)
-{
- zval **stmt;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- zend_list_delete(statement->id);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ocilogoff(int conn)
- Disconnect from database */
-
-PHP_FUNCTION(ocilogoff)
-{
-#if 0
- this function does nothing any more. server-connections get automagiclly closed on
- request-end. connection handles will "dissappear" as soon as they are no longer
- referenced. as this module makes heavy use of zends reference-counting mechanism
- this is the desired behavior. it has always been a bad idea to close a connection that
- has outstanding transactions. this way we have a nice-clean approach.
- (thies@thieso.net 20000110)
-
- oci_connection *connection;
- zval **conn;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- connection->is_open = 0;
-
- zend_hash_apply(list, (apply_func_t) _stmt_cleanup TSRMLS_CC);
-
- if (zend_list_delete(connection->id) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-#endif
-}
-
-/* }}} */
-
-/* {{{ proto int ocinlogon(string user, string pass [, string db])
- Connect to an Oracle database and log on. returns a new session */
-
-/* Connects to an Oracle 8 database and logs on. If the
- * optional third parameter is not specified, PHP uses the environment
- * variable ORACLE_SID to determine which database to connect to.
- */
-PHP_FUNCTION(ocinlogon)
-{
- oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0,1);
-}
-
-/* }}} */
-
-/* {{{ proto int ocilogon(string user, string pass [, string db])
- Connect to an Oracle database and log on. Returns a new session.
- */
-
-/* Connects to an Oracle 8 database and logs on. If the
- * optional third parameter is not specified, PHP uses the environment
- * variable ORACLE_SID to determine which database to connect to.
- */
-PHP_FUNCTION(ocilogon)
-{
- oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0,0);
-}
-
-/* }}} */
-
-/* {{{ proto int ociplogon(string user, string pass [, string db])
- Connect to an Oracle database using a persistent connection and log on. Returns a new session. */
-
-/* Connects to an Oracle 8 database and logs on. If the
- * optional third parameter is not specified, PHP uses the environment
- * variable ORACLE_SID to determine which database to connect to.
- */
-PHP_FUNCTION(ociplogon)
-{
- oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1,0);
-}
-
-/* }}} */
-
-/* {{{ proto array ocierror([int stmt|conn|global])
- Return the last error of stmt|conn|global. If no error happened returns false. */
-
-PHP_FUNCTION(ocierror)
-{
- zval **arg;
- oci_statement *statement;
- oci_connection *connection;
- text errbuf[512];
- sb4 errcode = 0;
- sword error = 0;
- dvoid *errh = NULL;
- ub2 errorofs = 0;
- text *sqltext = NULL;
-
- if (zend_get_parameters_ex(1, &arg) == SUCCESS) {
- statement = (oci_statement *) zend_fetch_resource(arg TSRMLS_CC, -1, NULL, NULL, 1, le_stmt);
- if (statement) {
- errh = statement->pError;
- error = statement->error;
-
- CALL_OCI_RETURN(statement->error, OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (text *) &sqltext,
- (ub4 *)0,
- OCI_ATTR_STATEMENT,
- statement->pError));
-
- CALL_OCI_RETURN(statement->error, OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&errorofs,
- (ub4 *)0,
- OCI_ATTR_PARSE_ERROR_OFFSET,
- statement->pError));
-
- } else {
- connection = (oci_connection *) zend_fetch_resource(arg TSRMLS_CC, -1, NULL, NULL, 1, le_conn);
- if (connection) {
- errh = connection->pError;
- error = connection->error;
- }
- }
- } else {
- errh = OCI(pError);
- error = OCI(error);
- }
-
- if (! error) { /* no error set in the handle */
- RETURN_FALSE;
- }
-
- if (! errh) {
- php_error(E_WARNING, "OCIError: unable to find Error handle");
- RETURN_FALSE;
- }
-
- CALL_OCI(OCIErrorGet(
- errh,
- 1,
- NULL,
- &errcode,
- errbuf,
- (ub4) sizeof(errbuf),
- (ub4) OCI_HTYPE_ERROR));
-
- if (errcode) {
- array_init(return_value);
- add_assoc_long(return_value, "code", errcode);
- add_assoc_string(return_value, "message", (char*) errbuf, 1);
- add_assoc_long(return_value, "offset", errorofs);
- add_assoc_string(return_value, "sqltext", sqltext ? (char *) sqltext : "", 1);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ocinumcols(int stmt)
- Return the number of result columns in a statement */
-
-PHP_FUNCTION(ocinumcols)
-{
- zval **stmt;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- RETURN_LONG(statement->ncolumns);
-}
-
-/* }}} */
-
-/* {{{ proto int ociparse(int conn, string query)
- Parse a query and return a statement */
-
-PHP_FUNCTION(ociparse)
-{
- zval **conn, **query;
- oci_connection *connection;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(2, &conn, &query) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- convert_to_string_ex(query);
-
- statement = oci_parse(connection,Z_STRVAL_PP(query),Z_STRLEN_PP(query));
-
- if (statement) {
- RETURN_RESOURCE(statement->id);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ocisetprefetch(int stmt, int prefetch_rows)
- sets the number of rows to be prefetched on execute to prefetch_rows for stmt */
-
-PHP_FUNCTION(ocisetprefetch)
-{
- zval **stmt, **size;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(2, &stmt, &size) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(size);
-
- OCI_GET_STMT(statement,stmt);
-
- oci_setprefetch(statement,Z_LVAL_PP(size));
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ocinewcursor(int conn)
- Return a new cursor (Statement-Handle) - use this to bind ref-cursors! */
-
-PHP_FUNCTION(ocinewcursor)
-{
- zval **conn;
- oci_connection *connection;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- statement = oci_parse(connection,0,0);
-
- RETURN_RESOURCE(statement->id);
-}
-
-/* }}} */
-
-/* {{{ proto string ociresult(int stmt, mixed column)
- Return a single column of result data */
-
-PHP_FUNCTION(ociresult)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol = NULL;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
-
- if (outcol == NULL) {
- RETURN_FALSE;
- }
-
- _oci_make_zval(return_value,statement,outcol, "OCIResult",0 TSRMLS_CC);
-}
-
-/* }}} */
-
-/* {{{ proto string ociserverversion(int conn)
- Return a string containing server version information */
-
-PHP_FUNCTION(ociserverversion)
-{
- oci_connection *connection;
- zval **conn;
- char version[256];
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- CALL_OCI_RETURN(connection->error, OCIServerVersion(
- connection->pServiceContext,
- connection->pError,
- (text*)version,
- sizeof(version),
- OCI_HTYPE_SVCCTX));
-
- if (connection->error != OCI_SUCCESS) {
- oci_error(connection->pError, "OCIServerVersion", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_STRING(version,1);
-}
-
-/* }}} */
-
-/* {{{ proto int ocistatementtype(int stmt)
- Return the query type of an OCI statement */
-
-/* XXX it would be better with a general interface to OCIAttrGet() */
-
-PHP_FUNCTION(ocistatementtype)
-{
- zval **stmt;
- oci_statement *statement;
- ub2 stmttype;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- CALL_OCI_RETURN(statement->error, OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&stmttype,
- (ub4 *)0,
- OCI_ATTR_STMT_TYPE,
- statement->pError));
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIStatementType", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
-
- switch (stmttype) {
- case OCI_STMT_SELECT:
- RETVAL_STRING("SELECT",1);
- break;
- case OCI_STMT_UPDATE:
- RETVAL_STRING("UPDATE",1);
- break;
- case OCI_STMT_DELETE:
- RETVAL_STRING("DELETE",1);
- break;
- case OCI_STMT_INSERT:
- RETVAL_STRING("INSERT",1);
- break;
- case OCI_STMT_CREATE:
- RETVAL_STRING("CREATE",1);
- break;
- case OCI_STMT_DROP:
- RETVAL_STRING("DROP",1);
- break;
- case OCI_STMT_ALTER:
- RETVAL_STRING("ALTER",1);
- break;
- case OCI_STMT_BEGIN:
- RETVAL_STRING("BEGIN",1);
- break;
- case OCI_STMT_DECLARE:
- RETVAL_STRING("DECLARE",1);
- break;
- default:
- RETVAL_STRING("UNKNOWN",1);
- }
-}
-/* }}} */
-
-/* {{{ proto int ocirowcount(int stmt)
- Return the row count of an OCI statement */
-
-PHP_FUNCTION(ocirowcount)
-{
- zval **stmt;
- oci_statement *statement;
- ub4 rowcount;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- CALL_OCI_RETURN(statement->error, OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&rowcount,
- (ub4 *)0,
- OCI_ATTR_ROW_COUNT,
- statement->pError));
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIRowCount", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
-
- RETURN_LONG(rowcount);
-}
-
-/* }}} */
-
-#ifdef WITH_COLLECTIONS
-/* {{{ oci_get_coll() */
-
-static oci_collection *oci_get_coll(int ind TSRMLS_DC)
-{
- oci_collection *collection;
- int actual_resource_type;
-
- collection = (oci_collection *) zend_list_find(ind, &actual_resource_type);
-
- if (collection && (actual_resource_type == le_coll)) {
- return collection;
- } else {
- return (oci_collection *) NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto string ocifreecollection(object lob)
- Deletes collection object*/
-
-PHP_FUNCTION(ocifreecollection)
-{
- zval *id;
- int inx;
- oci_collection *coll;
- oci_connection *connection;
-
- if ((id = getThis()) != 0) {
- inx = _oci_get_ocicoll(id,&coll TSRMLS_CC);
- if (inx) {
- /*
- * Do we need to free the object?
- *
- */
- connection = coll->conn;
- oci_debug("OCIfreecollection: coll=%d",inx);
-
- CALL_OCI_RETURN(connection->error, OCIObjectFree(
- OCI(pEnv),
- connection->pError,
- (dvoid *)coll->coll,
- (ub2)(OCI_OBJECTFREE_FORCE)));
-
- if (connection->error) {
- oci_error(connection->pError, "OCIObjectFree", connection->error);
- RETURN_FALSE;
- }
-
- zend_list_delete(inx);
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicollappend(object collection,value)
- Append an object to the collection */
-
-PHP_FUNCTION(ocicollappend)
-{
- zval *id, **arg;
- oci_connection *connection;
- oci_collection *coll;
- OCINumber num;
- OCIString *ocistr = (OCIString *)0;
- OCIInd new_ind = OCI_IND_NOTNULL;
- OCIInd null_ind = OCI_IND_NULL;
- OCIDate dt;
- int inx;
- double ndx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- connection = coll->conn;
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /*
- * Handle NULLS. For consistency with the rest of the OCI8 library, when
- * a value passed in is a 0 length string, consider it a null
- */
- convert_to_string_ex(arg);
- if(Z_STRLEN_PP(arg) == 0) {
- CALL_OCI_RETURN(connection->error, OCICollAppend(
- OCI(pEnv),
- connection->pError,
- (dword *)0,
- &null_ind,
- coll->coll));
- if (connection->error) {
- oci_error(connection->pError, "OCICollAppend - NULL", connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- switch(coll->element_typecode) {
- case OCI_TYPECODE_DATE:
- convert_to_string_ex(arg);
-
- CALL_OCI_RETURN(connection->error, OCIDateFromText(
- connection->pError,
- Z_STRVAL_PP(arg),
- Z_STRLEN_PP(arg),
- 0,
- 0,
- 0,
- 0,
- &dt));
-
- if (connection->error) {
- oci_error(connection->pError, "OCIDateFromText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCICollAppend(
- OCI(pEnv),
- connection->pError,
- (dvoid *) &dt,
- (dvoid *) &new_ind,
- (OCIColl *) coll->coll));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAppend", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- case OCI_TYPECODE_VARCHAR2 :
- convert_to_string_ex(arg);
-
- CALL_OCI_RETURN(connection->error, OCIStringAssignText(
- OCI(pEnv),
- connection->pError,
- Z_STRVAL_PP(arg),
- Z_STRLEN_PP(arg),
- &ocistr));
-
- if (connection->error) {
- oci_error(connection->pError, "OCIStringAssignText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCICollAppend(
- OCI(pEnv),
- connection->pError,
- (dvoid *) ocistr,
- (dvoid *) &new_ind,
- (OCIColl *) coll->coll));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAppend", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- case OCI_TYPECODE_UNSIGNED16 : /* UNSIGNED SHORT */
- case OCI_TYPECODE_UNSIGNED32 : /* UNSIGNED LONG */
- case OCI_TYPECODE_REAL : /* REAL */
- case OCI_TYPECODE_DOUBLE : /* DOUBLE */
- case OCI_TYPECODE_INTEGER : /* INT */
- case OCI_TYPECODE_SIGNED16 : /* SHORT */
- case OCI_TYPECODE_SIGNED32 : /* LONG */
- case OCI_TYPECODE_DECIMAL : /* DECIMAL */
- case OCI_TYPECODE_FLOAT : /* FLOAT */
- case OCI_TYPECODE_NUMBER : /* NUMBER */
- case OCI_TYPECODE_SMALLINT : /* SMALLINT */
- convert_to_double_ex(arg);
- ndx = (double)Z_DVAL_PP(arg);
-
- CALL_OCI_RETURN(connection->error, OCINumberFromReal(
- connection->pError,
- &ndx,
- sizeof(double),&num));
-
- if (connection->error) {
- oci_error(connection->pError, "OCINumberFromReal", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCICollAppend(
- OCI(pEnv),
- connection->pError,
- (dvoid *) &num,
- (dvoid *) &new_ind,
- (OCIColl *) coll->coll));
-
- RETURN_TRUE;
- break;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicollgetelem(object collection,ndx)
- Retrieve the value at collection index ndx */
-
-PHP_FUNCTION(ocicollgetelem)
-{
- zval *id,**arg;
- oci_connection *connection;
- oci_collection *coll;
- ub4 ndx;
- int inx;
- dvoid *elem;
- OCIInd *elemind;
- boolean exists;
- OCIString *ocistr = (OCIString *)0;
- text *str;
- char buff[1024];
- int len;
- double dnum;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
- ndx = Z_LVAL_PP(arg);
-
- connection = coll->conn;
-
- CALL_OCI_RETURN(connection->error, OCICollGetElem(
- OCI(pEnv),
- connection->pError,
- coll->coll,
- ndx,
- &exists,
- &elem,
- (dvoid **)&elemind));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollGetElem", connection->error);
- RETURN_NULL();
- }
-
- /* Return false if value does not exist at that location */
- if(exists == 0) {
- php_error(E_WARNING, "OCICollGetElem - Invalid index %d", ndx);
- RETURN_FALSE;
- }
-
- /* Return null if the value is null */
- if(*elemind == OCI_IND_NULL) {
- RETURN_FALSE;
- }
-
- switch (coll->element_typecode) {
- case OCI_TYPECODE_DATE:
- len = 1024;
- CALL_OCI(OCIDateToText(
- connection->pError,
- elem,
- 0, /* fmt */
- 0, /* fmt_length */
- 0, /* lang_name */
- 0, /* lang_length */
- &len,
- buff));
-
- RETURN_STRINGL(buff,len,1);
- case OCI_TYPECODE_VARCHAR2 :
- ocistr = *(OCIString **)elem;
- str = OCIStringPtr(OCI(pEnv),ocistr); /* XXX not protected against recursion! */
- RETURN_STRINGL(str,strlen(str),1);
- break;
- case OCI_TYPECODE_UNSIGNED16 : /* UNSIGNED SHORT */
- case OCI_TYPECODE_UNSIGNED32 : /* UNSIGNED LONG */
- case OCI_TYPECODE_REAL : /* REAL */
- case OCI_TYPECODE_DOUBLE : /* DOUBLE */
- case OCI_TYPECODE_INTEGER : /* INT */
- case OCI_TYPECODE_SIGNED16 : /* SHORT */
- case OCI_TYPECODE_SIGNED32 : /* LONG */
- case OCI_TYPECODE_DECIMAL : /* DECIMAL */
- case OCI_TYPECODE_FLOAT : /* FLOAT */
- case OCI_TYPECODE_NUMBER : /* NUMBER */
- case OCI_TYPECODE_SMALLINT : /* SMALLINT */
- CALL_OCI_RETURN(connection->error, OCINumberToReal(
- connection->pError,
- (CONST OCINumber *) elem,
- (uword) sizeof(dnum),
- (dvoid *) &dnum));
-
- if (connection->error) {
- oci_error(connection->pError, "OCINumberToReal", connection->error);
- RETURN_FALSE;
- }
- RETURN_DOUBLE(dnum);
- break;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicollassign(object collection,object)
- Assign a collection from another existing collection */
-
-PHP_FUNCTION(ocicollassign)
-{
- zval *id,**from;
- oci_connection *connection;
- oci_collection *coll,*from_coll;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(1, &from) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((inx = _oci_get_ocicoll(*from,&from_coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- connection = coll->conn;
-
- CALL_OCI_RETURN(connection->error, OCICollAssign(
- OCI(pEnv),
- connection->pError,
- from_coll->coll,
- coll->coll));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicollassignelem(object collection,ndx,val)
- Assign element val to collection at index ndx */
-
-PHP_FUNCTION(ocicollassignelem)
-{
- zval *id,**index,**val;
- oci_connection *connection;
- oci_collection *coll;
- OCINumber num;
- OCIInd new_ind = OCI_IND_NOTNULL;
- OCIInd null_ind = OCI_IND_NULL;
- ub4 ndx;
- int inx;
- OCIString *ocistr = (OCIString *)0;
- OCIDate dt;
- double dnum;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(2, &index,&val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(index);
- ndx = Z_LVAL_PP(index);
-
- connection = coll->conn;
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
-
- /*
- * Handle NULLS. For consistency with the rest of the OCI8 library, when
- * a value passed in is a 0 length string, consider it a null
- */
- convert_to_string_ex(val);
-
- if(Z_STRLEN_PP(val) == 0) {
- CALL_OCI_RETURN(connection->error, OCICollAssignElem(
- OCI(pEnv),
- connection->pError,
- ndx,
- (dword *)0,
- &null_ind,
- coll->coll));
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem - NULL", connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- switch(coll->element_typecode) {
- case OCI_TYPECODE_DATE:
- convert_to_string_ex(val);
- CALL_OCI_RETURN(connection->error, OCIDateFromText(
- connection->pError,
- Z_STRVAL_PP(val),
- Z_STRLEN_PP(val),
- 0,
- 0,
- 0,
- 0,
- &dt));
-
- if (connection->error) {
- oci_error(connection->pError, "OCIDateFromText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCICollAssignElem(
- OCI(pEnv),
- connection->pError,
- ndx,
- (dword *)&dt,
- &new_ind,
- coll->coll));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- break;
- case OCI_TYPECODE_VARCHAR2 :
- convert_to_string_ex(val);
-
- CALL_OCI_RETURN(connection->error, OCIStringAssignText(
- OCI(pEnv),
- connection->pError,
- Z_STRVAL_PP(val),
- Z_STRLEN_PP(val),
- &ocistr));
-
- if (connection->error) {
- oci_error(connection->pError, "OCIStringAssignText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCICollAssignElem(
- OCI(pEnv),
- connection->pError,
- ndx,
- (dword *)ocistr,
- &new_ind,
- coll->coll));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- case OCI_TYPECODE_UNSIGNED16 : /* UNSIGNED SHORT */
- case OCI_TYPECODE_UNSIGNED32 : /* UNSIGNED LONG */
- case OCI_TYPECODE_REAL : /* REAL */
- case OCI_TYPECODE_DOUBLE : /* DOUBLE */
- case OCI_TYPECODE_INTEGER : /* INT */
- case OCI_TYPECODE_SIGNED16 : /* SHORT */
- case OCI_TYPECODE_SIGNED32 : /* LONG */
- case OCI_TYPECODE_DECIMAL : /* DECIMAL */
- case OCI_TYPECODE_FLOAT : /* FLOAT */
- case OCI_TYPECODE_NUMBER : /* NUMBER */
- case OCI_TYPECODE_SMALLINT : /* SMALLINT */
- convert_to_double_ex(val);
- dnum = (double)Z_DVAL_PP(val);
-
- CALL_OCI_RETURN(connection->error, OCINumberFromReal(
- connection->pError,
- &dnum,
- sizeof(double),
- &num));
-
- if (connection->error) {
- oci_error(connection->pError, "OCINumberFromReal", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCICollAssignElem(
- OCI(pEnv),
- connection->pError,
- ndx,
- (dword *)&num,
- &new_ind,
- coll->coll));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- }
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicollsize(object collection)
- Return the size of a collection */
-
-PHP_FUNCTION(ocicollsize)
-{
- zval *id;
- oci_connection *connection;
- oci_collection *coll;
- sb4 sz;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- connection = coll->conn;
-
- CALL_OCI_RETURN(connection->error, OCICollSize(
- OCI(pEnv),
- coll->conn->pError,
- coll->coll,
- &sz));
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollSize", connection->error);
- RETURN_FALSE;
- }
- RETURN_LONG(sz);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicollmax(object collection)
- Return the max value of a collection. For a
- varray this is the maximum length of the array */
-
-PHP_FUNCTION(ocicollmax)
-{
- zval *id;
- oci_collection *coll;
- sb4 sz;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- sz = OCICollMax(OCI(pEnv),coll->coll); /* XXX not protected against recursion */
-
- RETURN_LONG(sz);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocicolltrim(object collection,num)
- Trim num elements from the end of a collection */
-
-PHP_FUNCTION(ocicolltrim)
-{
- zval *id,**arg;
- oci_collection *coll;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg);
-
- CALL_OCI_RETURN(coll->conn->error, OCICollTrim(
- OCI(pEnv),
- coll->conn->pError,
- Z_LVAL_PP(arg),
- coll->coll));
-
- if (coll->conn->error) {
- oci_error(coll->conn->pError, "OCICollTrim", coll->conn->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ocinewcollection(int connection, string tdo,[string schema])
- Initialize a new collection */
-
-PHP_FUNCTION(ocinewcollection)
-{
- dvoid *dschp1;
- dvoid *parmp1;
- dvoid *parmp2;
- zval **conn, **tdo, **schema;
- oci_connection *connection;
- oci_collection *coll;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &conn, &tdo, &schema) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(tdo);
-
- if(ac == 3) {
- convert_to_string_ex(schema);
- }
-
- coll = emalloc(sizeof(oci_collection));
-
- OCI_GET_CONN(connection,conn);
-
- coll->conn = connection;
- coll->id = zend_list_insert(coll,le_coll);
- zend_list_addref(connection->id);
-
- CALL_OCI_RETURN(connection->error, OCITypeByName(
- OCI(pEnv),
- connection->pError,
- connection->pServiceContext,
- ac==3?(text *)Z_STRVAL_PP(schema):(text *)0,
- ac==3?(ub4)Z_STRLEN_PP(schema): (ub4)0,
- (text *) Z_STRVAL_PP(tdo),
- (ub4) Z_STRLEN_PP(tdo),
- (CONST text *) 0,
- (ub4) 0,
- OCI_DURATION_SESSION,
- OCI_TYPEGET_ALL,
- &(coll->tdo)));
-
- if (connection->error) {
- oci_error(connection->pError, "OCITypeByName", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **) &dschp1,
- (ub4) OCI_HTYPE_DESCRIBE,
- (size_t) 0,
- (dvoid **) 0));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_HTYPE_DESCRIBE", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCIDescribeAny(
- connection->pServiceContext,
- connection->pError,
- (dvoid *) coll->tdo,
- (ub4) 0,
- OCI_OTYPE_PTR,
- (ub1)1,
- (ub1) OCI_PTYPE_TYPE,
- dschp1));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_OTYPE_PTR", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCIAttrGet(
- (dvoid *) dschp1,
- (ub4) OCI_HTYPE_DESCRIBE,
- (dvoid *)&parmp1,
- (ub4 *)0,
- (ub4)OCI_ATTR_PARAM,
- connection->pError));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_PARAM", connection->error);
- RETURN_FALSE;
- }
-
- /* get the collection type code of the attribute */
-
- CALL_OCI_RETURN(connection->error, OCIAttrGet(
- (dvoid*) parmp1,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &(coll->coll_typecode),
- (ub4 *) 0,
- (ub4) OCI_ATTR_COLLECTION_TYPECODE,
- connection->pError));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_COLLECTION_TYPECODE", connection->error);
- RETURN_FALSE;
- }
-
- switch(coll->coll_typecode) {
- case OCI_TYPECODE_TABLE:
- case OCI_TYPECODE_VARRAY:
- CALL_OCI_RETURN(connection->error, OCIAttrGet(
- (dvoid*) parmp1,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &parmp2,
- (ub4 *) 0,
- (ub4) OCI_ATTR_COLLECTION_ELEMENT,
- connection->pError));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_COLLECTION_ELEMENT", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCIAttrGet(
- (dvoid*) parmp2,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &(coll->elem_ref),
- (ub4 *) 0,
- (ub4) OCI_ATTR_REF_TDO,
- connection->pError));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_REF_TDO", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCITypeByRef(
- OCI(pEnv),
- connection->pError,
- coll->elem_ref,
- OCI_DURATION_SESSION,
- OCI_TYPEGET_HEADER,
- &(coll->element_type)));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_TYPEGET_HEADER", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error, OCIAttrGet(
- (dvoid*) parmp2,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &(coll->element_typecode),
- (ub4 *) 0,
- (ub4) OCI_ATTR_TYPECODE,
- connection->pError));
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_TYPECODE", connection->error);
- RETURN_FALSE;
- }
- break;
- default:
- php_error(E_WARNING, "OCINewCollection - Unknown Type %d", coll->coll_typecode);
- break;
- }
-
- /* Create object to hold return table */
- CALL_OCI_RETURN(connection->error, OCIObjectNew(
- OCI(pEnv),
- connection->pError,
- connection->pServiceContext,
- OCI_TYPECODE_TABLE,
- coll->tdo,
- (dvoid *)0,
- OCI_DURATION_DEFAULT,
- TRUE,
- (dvoid **) &(coll->coll)));
-
- if (connection->error) {
- oci_error(connection->pError, "OCIObjectNew", connection->error);
- RETURN_FALSE;
- }
-
- object_init_ex(return_value, oci_coll_class_entry_ptr);
- add_property_resource(return_value, "collection",coll->id);
-}
-
-/* }}} */
-
-#endif
-
-#endif /* HAVE_OCI8 */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/oci8/oci8.dsp b/ext/oci8/oci8.dsp
deleted file mode 100644
index 46d071c405..0000000000
--- a/ext/oci8/oci8.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="oci8" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=oci8 - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "oci8.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "oci8.mak" CFG="oci8 - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "oci8 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "oci8 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "oci8 - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\oci805\include" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OCI8=1 /D HAVE_OCI8_TEMP_LOB=1 /D COMPILE_DL_OCI8=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib oci.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_oci8.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\oci805\lib" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "oci8 - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\include\oci805" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTP_EXPORTS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OCI8=1 /D HAVE_OCI8_TEMP_LOB=1 /D COMPILE_DL_OCI8=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib oci.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_oci8.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\lib\oci805"
-
-!ENDIF
-
-# Begin Target
-
-# Name "oci8 - Win32 Release_TS"
-# Name "oci8 - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\oci8.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_oci8.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/oci8/oci8.dsw b/ext/oci8/oci8.dsw
deleted file mode 100644
index fc18fae34a..0000000000
--- a/ext/oci8/oci8.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "oci8"=.\oci8.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h
deleted file mode 100644
index 07fdc8e9dc..0000000000
--- a/ext/oci8/php_oci8.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#if HAVE_OCI8
-# ifndef PHP_OCI8_H
-# define PHP_OCI8_H
-# endif
-
-# if (defined(__osf__) && defined(__alpha))
-# ifndef A_OSF
-# define A_OSF
-# endif
-# ifndef OSF1
-# define OSF1
-# endif
-# ifndef _INTRINSICS
-# define _INTRINSICS
-# endif
-# endif /* osf alpha */
-
-#ifdef PHP_WIN32
-#define PHP_OCI_API __declspec(dllexport)
-#else
-#define PHP_OCI_API
-#endif
-
-#if defined(min)
-#undef min
-#endif
-#if defined(max)
-#undef max
-#endif
-
-#include <oci.h>
-
-typedef struct {
- int num;
- int persistent;
- int is_open;
- char *dbname;
- OCIServer *pServer;
-#if 0
- OCIFocbkStruct failover;
-#endif
-} oci_server;
-
-typedef struct {
- int num;
- int persistent;
- int is_open;
- int exclusive;
- char *hashed_details;
- oci_server *server;
- OCISession *pSession;
-} oci_session;
-
-typedef struct {
- int id;
- int is_open;
- oci_session *session;
- OCISvcCtx *pServiceContext;
- sword error;
- OCIError *pError;
- int needs_commit;
-} oci_connection;
-
-typedef struct {
- int id;
- oci_connection *conn;
- dvoid *ocidescr;
- ub4 type;
-} oci_descriptor;
-
-typedef struct {
- int id;
- oci_connection *conn;
- OCIType *tdo;
- OCITypeCode coll_typecode;
- OCIRef *elem_ref;
- OCIType *element_type;
- OCITypeCode element_typecode;
- OCIColl *coll;
-} oci_collection;
-
-typedef struct {
- zval *zval;
- text *name;
- ub4 name_len;
- ub4 type;
-} oci_define;
-
-typedef struct {
- int id;
- oci_connection *conn;
- sword error;
- OCIError *pError;
- OCIStmt *pStmt;
- char *last_query;
- HashTable *columns;
- HashTable *binds;
- HashTable *defines;
- int ncolumns;
- int executed;
- ub2 stmttype;
-} oci_statement;
-
-typedef struct {
- OCIBind *pBind;
- zval *zval;
- dvoid *descr; /* used for binding of LOBS etc */
- OCIStmt *pStmt; /* used for binding REFCURSORs */
- sb2 indicator;
- ub2 retcode;
-} oci_bind;
-
-typedef struct {
- oci_statement *statement;
- OCIDefine *pDefine;
- char *name;
- ub4 name_len;
- ub2 data_type;
- ub2 data_size;
- ub4 storage_size4;
- sb2 indicator;
- ub2 retcode;
- ub2 retlen;
- ub4 retlen4;
- ub2 is_descr;
- ub2 is_cursor;
- int descr;
- oci_statement *pstmt;
- int stmtid;
- int descid;
- void *data;
- oci_define *define;
- int piecewise;
- ub4 cb_retlen;
- ub2 scale;
- ub2 precision;
-} oci_out_column;
-
-typedef struct {
- sword error;
- OCIError *pError;
-
- /*
- char *default_username;
- char *default_password;
- char *default_dbname;
- */
-
- long debug_mode;
-
- int shutdown;
-
- /* XXX NYI
- long allow_persistent;
- long max_persistent;
- long max_links;
- long num_persistent;
- long num_links;
- */
-
- HashTable *server;
- HashTable *user;
-
- OCIEnv *pEnv;
-
- int in_call;
-} php_oci_globals;
-
-extern zend_module_entry oci8_module_entry;
-#define phpext_oci8_ptr &oci8_module_entry
-
-#define OCI_MAX_NAME_LEN 64
-#define OCI_MAX_DATA_SIZE INT_MAX
-#define OCI_PIECE_SIZE (64*1024)-1
-
-#ifdef ZTS
-#define OCI(v) TSRMG(oci_globals_id, php_oci_globals *, v)
-#else
-#define OCI(v) (oci_globals.v)
-#endif
-
-#else /* !HAVE_OCI8 */
-
-# define oci8_module_ptr NULL
-
-#endif /* HAVE_OCI8 */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/odbc/CREDITS b/ext/odbc/CREDITS
deleted file mode 100644
index 238bfb40a1..0000000000
--- a/ext/odbc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ODBC
-Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky
diff --git a/ext/odbc/birdstep.c b/ext/odbc/birdstep.c
deleted file mode 100644
index c5f4cea46b..0000000000
--- a/ext/odbc/birdstep.c
+++ /dev/null
@@ -1,715 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Nikolay P. Romanyuk <mag@redcom.ru> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * TODO:
- * birdstep_fetch_into(),
- * Check all on real life apps.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if WIN32
-# include "config.w32.h"
-# include "win95nt.h"
-# ifdef PHP_EXPORTS
-# define PHPAPI __declspec(dllexport)
-# else
-# define PHPAPI __declspec(dllimport)
-# endif
-#else
-# include "php_config.h"
-# define PHPAPI
-# define THREAD_LS
-#endif
-
-#ifdef HAVE_BIRDSTEP
-#include "php_birdstep.h"
-#include "ext/standard/info.h"
-
-function_entry birdstep_functions[] = {
- PHP_FE(birdstep_connect, NULL)
- PHP_FE(birdstep_close, NULL)
- PHP_FE(birdstep_exec, NULL)
- PHP_FE(birdstep_fetch, NULL)
- PHP_FE(birdstep_result, NULL)
- PHP_FE(birdstep_freeresult, NULL)
- PHP_FE(birdstep_autocommit, NULL)
- PHP_FE(birdstep_off_autocommit, NULL)
- PHP_FE(birdstep_commit, NULL)
- PHP_FE(birdstep_rollback, NULL)
- PHP_FE(birdstep_fieldnum, NULL)
- PHP_FE(birdstep_fieldname, NULL)
-/*
- * Temporary Function aliases until the next major upgrade to PHP.
- * These should allow users to continue to use their current scripts,
- * but should in reality warn the user that this functionality is
- * deprecated.
- */
- PHP_FALIAS(velocis_connect, birdstep_connect, NULL)
- PHP_FALIAS(velocis_close, birdstep_close, NULL)
- PHP_FALIAS(velocis_exec, birdstep_exec, NULL)
- PHP_FALIAS(velocis_fetch, birdstep_fetch, NULL)
- PHP_FALIAS(velocis_result, birdstep_result, NULL)
- PHP_FALIAS(velocis_freeresult, birdstep_freeresult, NULL)
- PHP_FALIAS(velocis_autocommit, birdstep_autocommit, NULL)
- PHP_FALIAS(velocis_off_autocommit, birdstep_off_autocommit, NULL)
- PHP_FALIAS(velocis_commit, birdstep_commit, NULL)
- PHP_FALIAS(velocis_rollback, birdstep_rollback, NULL)
- PHP_FALIAS(velocis_fieldnum, birdstep_fieldnum, NULL)
- PHP_FALIAS(velocis_fieldname, birdstep_fieldname, NULL)
-/* End temporary aliases */
- {NULL, NULL, NULL}
-};
-
-zend_module_entry birdstep_module_entry = {
- STANDARD_MODULE_HEADER,
- "birdstep",
- birdstep_functions,
- PHP_MINIT(birdstep),
- PHP_MSHUTDOWN(birdstep),
- PHP_RINIT(birdstep),
- NULL,
- PHP_MINFO(birdstep),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_ODBC
-ZEND_GET_MODULE(birdstep)
-#endif
-
-THREAD_LS birdstep_module php_birdstep_module;
-THREAD_LS static HENV henv;
-
-static void _close_birdstep_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- VConn *conn = (VConn *)rsrc->ptr;
-
- if ( conn ) {
- efree(conn);
- }
-}
-
-static void _free_birdstep_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- Vresult *res = (Vresult *)rsrc->ptr;
-
- if ( res && res->values ) {
- register int i;
- for ( i=0; i < res->numcols; i++ ) {
- if ( res->values[i].value )
- efree(res->values[i].value);
- }
- efree(res->values);
- }
- if ( res ) {
- efree(res);
- }
-}
-
-PHP_MINIT_FUNCTION(birdstep)
-{
- SQLAllocEnv(&henv);
-
- if ( cfg_get_long("birdstep.max_links",&php_birdstep_module.max_links) == FAILURE ) {
- php_birdstep_module.max_links = -1;
- }
- php_birdstep_module.num_links = 0;
- php_birdstep_module.le_link = zend_register_list_destructors_ex(_close_birdstep_link, NULL, "birdstep link", module_number);
- php_birdstep_module.le_result = zend_register_list_destructors_ex(_free_birdstep_result, NULL, "birdstep result", module_number);
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(birdstep)
-{
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(birdstep)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "RAIMA Birdstep Support", "enabled" );
- php_info_print_table_end();
-}
-
-PHP_MSHUTDOWN_FUNCTION(birdstep)
-{
- SQLFreeEnv(henv);
- return SUCCESS;
-}
-
-/* Some internal functions. Connections and result manupulate */
-
-static int birdstep_add_conn(HashTable *list,VConn *conn,HDBC hdbc)
-{
- int ind;
-
- ind = zend_list_insert(conn,php_birdstep_module.le_link);
- conn->hdbc = hdbc;
- conn->index = ind;
-
- return(ind);
-}
-
-static VConn * birdstep_find_conn(HashTable *list,int ind)
-{
- VConn *conn;
- int type;
-
- conn = zend_list_find(ind,&type);
- if ( !conn || type != php_birdstep_module.le_link ) {
- return(NULL);
- }
- return(conn);
-}
-
-static void birdstep_del_conn(HashTable *list,int ind)
-{
- zend_list_delete(ind);
-}
-
-static int birdstep_add_result(HashTable *list,Vresult *res,VConn *conn)
-{
- int ind;
-
- ind = zend_list_insert(res,php_birdstep_module.le_result);
- res->conn = conn;
- res->index = ind;
-
- return(ind);
-}
-
-static Vresult * birdstep_find_result(HashTable *list,int ind)
-{
- Vresult *res;
- int type;
-
- res = zend_list_find(ind,&type);
- if ( !res || type != php_birdstep_module.le_result ) {
- return(NULL);
- }
- return(res);
-}
-
-static void birdstep_del_result(HashTable *list,int ind)
-{
- zend_list_delete(ind);
-}
-
-/* Users functions */
-
-/* {{{ proto int birdstep_connect(string server, string user, sting pass)
- */
-PHP_FUNCTION(birdstep_connect)
-{
- pval *serv,*user,*pass;
- char *Serv = NULL;
- char *User = NULL;
- char *Pass = NULL;
- RETCODE stat;
- HDBC hdbc;
- VConn *new;
- long ind;
-
- if ( php_birdstep_module.max_links != -1 && php_birdstep_module.num_links == php_birdstep_module.max_links ) {
- php_error(E_WARNING,"Birdstep: Too many open connections (%d)",php_birdstep_module.num_links);
- RETURN_FALSE;
- }
- if (ZEND_NUM_ARGS() != 3 || getParameters(ht,3,&serv,&user,&pass) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(serv);
- convert_to_string(user);
- convert_to_string(pass);
- Serv = Z_STRVAL_P(serv);
- User = Z_STRVAL_P(user);
- Pass = Z_STRVAL_P(pass);
- stat = SQLAllocConnect(henv,&hdbc);
- if ( stat != SQL_SUCCESS ) {
- php_error(E_WARNING,"Birdstep: Could not allocate connection handle");
- RETURN_FALSE;
- }
- stat = SQLConnect(hdbc,Serv,SQL_NTS,User,SQL_NTS,Pass,SQL_NTS);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: Could not connect to server \"%s\" for %s",Serv,User);
- SQLFreeConnect(hdbc);
- RETURN_FALSE;
- }
- new = (VConn *)emalloc(sizeof(VConn));
- if ( new == NULL ) {
- php_error(E_WARNING,"Birdstep: Out of memory for store connection");
- SQLFreeConnect(hdbc);
- RETURN_FALSE;
- }
- ind = birdstep_add_conn(list,new,hdbc);
- php_birdstep_module.num_links++;
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_close(int id)
- */
-PHP_FUNCTION(birdstep_close)
-{
- pval *id;
- VConn *conn;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(id);
- conn = birdstep_find_conn(list,Z_LVAL_P(id));
- if ( !conn ) {
- php_error(E_WARNING,"Birdstep: Not connection index (%d)",Z_LVAL_P(id));
- RETURN_FALSE;
- }
- SQLDisconnect(conn->hdbc);
- SQLFreeConnect(conn->hdbc);
- birdstep_del_conn(list,Z_LVAL_P(id));
- php_birdstep_module.num_links--;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int birdstep_exec(int index, string exec_str)
- */
-PHP_FUNCTION(birdstep_exec)
-{
- pval *ind,*exec_str;
- char *query = NULL;
- int indx;
- VConn *conn;
- Vresult *res;
- RETCODE stat;
- SWORD cols,i,colnamelen;
- SDWORD rows,coldesc;
-
- if (ZEND_NUM_ARGS() != 2 || getParameters(ht,2,&ind,&exec_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(ind);
- conn = birdstep_find_conn(list,Z_LVAL_P(ind));
- if ( !conn ) {
- php_error(E_WARNING,"Birdstep: Not connection index (%d)",Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- convert_to_string(exec_str);
- query = Z_STRVAL_P(exec_str);
-
- res = (Vresult *)emalloc(sizeof(Vresult));
- if ( res == NULL ) {
- php_error(E_WARNING,"Birdstep: Out of memory for result");
- RETURN_FALSE;
- }
- stat = SQLAllocStmt(conn->hdbc,&res->hstmt);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: SQLAllocStmt return %d",stat);
- efree(res);
- RETURN_FALSE;
- }
- stat = SQLExecDirect(res->hstmt,query,SQL_NTS);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: Can not execute \"%s\" query",query);
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- /* Success query */
- stat = SQLNumResultCols(res->hstmt,&cols);
- if ( stat != SQL_SUCCESS ) {
- php_error(E_WARNING,"Birdstep: SQLNumResultCols return %d",stat);
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- if ( !cols ) { /* Was INSERT, UPDATE, DELETE, etc. query */
- stat = SQLRowCount(res->hstmt,&rows);
- if ( stat != SQL_SUCCESS ) {
- php_error(E_WARNING,"Birdstep: SQLNumResultCols return %d",stat);
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_LONG(rows);
- } else { /* Was SELECT query */
- res->values = (VResVal *)emalloc(sizeof(VResVal)*cols);
- if ( res->values == NULL ) {
- php_error(E_WARNING,"Birdstep: Out of memory for result columns");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- res->numcols = cols;
- for ( i = 0; i < cols; i++ ) {
- SQLColAttributes(res->hstmt,i+1,SQL_COLUMN_NAME,
- res->values[i].name,sizeof(res->values[i].name),
- &colnamelen,NULL);
- SQLColAttributes(res->hstmt,i+1,SQL_COLUMN_TYPE,
- NULL,0,NULL,&res->values[i].valtype);
- switch ( res->values[i].valtype ) {
- case SQL_LONGVARBINARY:
- case SQL_LONGVARCHAR:
- res->values[i].value = NULL;
- continue;
- default:
- break;
- }
- SQLColAttributes(res->hstmt,i+1,SQL_COLUMN_DISPLAY_SIZE,
- NULL,0,NULL,&coldesc);
- res->values[i].value = (char *)emalloc(coldesc+1);
- if ( res->values[i].value != NULL ) {
- SQLBindCol(res->hstmt,i+1,SQL_C_CHAR,
- res->values[i].value,coldesc+1,
- &res->values[i].vallen);
- }
- }
- }
- res->fetched = 0;
- indx = birdstep_add_result(list,res,conn);
- RETURN_LONG(indx);
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_fetch(int index)
- */
-PHP_FUNCTION(birdstep_fetch)
-{
- pval *ind;
- Vresult *res;
- RETCODE stat;
- UDWORD row;
- UWORD RowStat[1];
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&ind) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(ind);
- res = birdstep_find_result(list,Z_LVAL_P(ind));
- if ( !res ) {
- php_error(E_WARNING,"Birdstep: Not result index (%d)",Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- stat = SQLExtendedFetch(res->hstmt,SQL_FETCH_NEXT,1,&row,RowStat);
- if ( stat == SQL_NO_DATA_FOUND ) {
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: SQLFetch return error");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- res->fetched = 1;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed birdstep_result(int index, int col)
- */
-PHP_FUNCTION(birdstep_result)
-{
- pval *ind,*col;
- Vresult *res;
- RETCODE stat;
- int i,sql_c_type;
- UDWORD row;
- UWORD RowStat[1];
- SWORD indx = -1;
- char *field = NULL;
-
- if ( ZEND_NUM_ARGS() != 2 || getParameters(ht,2,&ind,&col) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(ind);
- res = birdstep_find_result(list,Z_LVAL_P(ind));
- if ( !res ) {
- php_error(E_WARNING,"Birdstep: Not result index (%d),Z_LVAL_P(ind)");
- RETURN_FALSE;
- }
- if ( Z_TYPE_P(col) == IS_STRING ) {
- field = Z_STRVAL_P(col);
- } else {
- convert_to_long(col);
- indx = Z_LVAL_P(col);
- }
- if ( field ) {
- for ( i = 0; i < res->numcols; i++ ) {
- if ( !strcasecmp(res->values[i].name,field)) {
- indx = i;
- break;
- }
- }
- if ( indx < 0 ) {
- php_error(E_WARNING, "Field %s not found",field);
- RETURN_FALSE;
- }
- } else {
- if ( indx < 0 || indx >= res->numcols ) {
- php_error(E_WARNING,"Birdstep: Field index not in range");
- RETURN_FALSE;
- }
- }
- if ( !res->fetched ) {
- stat = SQLExtendedFetch(res->hstmt,SQL_FETCH_NEXT,1,&row,RowStat);
- if ( stat == SQL_NO_DATA_FOUND ) {
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: SQLFetch return error");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- res->fetched = 1;
- }
- switch ( res->values[indx].valtype ) {
- case SQL_LONGVARBINARY:
- sql_c_type = SQL_C_BINARY;
- goto l1;
- case SQL_LONGVARCHAR:
- sql_c_type = SQL_C_CHAR;
-l1:
- if ( !res->values[indx].value ) {
- res->values[indx].value = emalloc(4096);
- if ( !res->values[indx].value ) {
- php_error(E_WARNING,"Out of memory");
- RETURN_FALSE;
- }
- }
- stat = SQLGetData(res->hstmt,indx+1,sql_c_type,
- res->values[indx].value,4095,&res->values[indx].vallen);
- if ( stat == SQL_NO_DATA_FOUND ) {
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: SQLGetData return error");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- if ( res->values[indx].valtype == SQL_LONGVARCHAR ) {
- RETURN_STRING(res->values[indx].value,TRUE);
- } else {
- RETURN_LONG((long)res->values[indx].value);
- }
- default:
- if ( res->values[indx].value != NULL ) {
- RETURN_STRING(res->values[indx].value,TRUE);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_freeresult(int index)
- */
-PHP_FUNCTION(birdstep_freeresult)
-{
- pval *ind;
- Vresult *res;
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&ind) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(ind);
- res = birdstep_find_result(list,Z_LVAL_P(ind));
- if ( !res ) {
- php_error(E_WARNING,"Birdstep: Not result index (%d)",Z_LVAL_P(ind));
- RETURN_FALSE;
- }
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_P(ind));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_autocommit(int index)
- */
-PHP_FUNCTION(birdstep_autocommit)
-{
- pval *id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(id);
- conn = birdstep_find_conn(list,Z_LVAL_P(id));
- if ( !conn ) {
- php_error(E_WARNING,"Birdstep: Not connection index (%d)",Z_LVAL_P(id));
- RETURN_FALSE;
- }
- stat = SQLSetConnectOption(conn->hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_ON);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: Set autocommit_on option failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_off_autocommit(int index)
- */
-PHP_FUNCTION(birdstep_off_autocommit)
-{
- pval *id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(id);
- conn = birdstep_find_conn(list,Z_LVAL_P(id));
- if ( !conn ) {
- php_error(E_WARNING,"Birdstep: Not connection index (%d)",Z_LVAL_P(id));
- RETURN_FALSE;
- }
- stat = SQLSetConnectOption(conn->hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error(E_WARNING,"Birdstep: Set autocommit_off option failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_commit(int index)
- */
-PHP_FUNCTION(birdstep_commit)
-{
- pval *id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(id);
- conn = birdstep_find_conn(list,Z_LVAL_P(id));
- if ( !conn ) {
- php_error(E_WARNING,"Birdstep: Not connection index (%d)",Z_LVAL_P(id));
- RETURN_FALSE;
- }
- stat = SQLTransact(NULL,conn->hdbc,SQL_COMMIT);
- if ( stat != SQL_SUCCESS ) {
- php_error(E_WARNING,"Birdstep: Commit failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_rollback(int index)
- */
-PHP_FUNCTION(birdstep_rollback)
-{
- pval *id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(id);
- conn = birdstep_find_conn(list,Z_LVAL_P(id));
- if ( !conn ) {
- php_error(E_WARNING,"Birdstep: Not connection index (%d)",Z_LVAL_P(id));
- RETURN_FALSE;
- }
- stat = SQLTransact(NULL,conn->hdbc,SQL_ROLLBACK);
- if ( stat != SQL_SUCCESS ) {
- php_error(E_WARNING,"Birdstep: Rollback failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string birdstep_fieldname(int index, int col)
- */
-PHP_FUNCTION(birdstep_fieldname)
-{
- pval *ind,*col;
- Vresult *res;
- SWORD indx;
-
- if ( ZEND_NUM_ARGS() != 2 || getParameters(ht,2,&ind,&col) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(ind);
- res = birdstep_find_result(list,Z_LVAL_P(ind));
- if ( !res ) {
- php_error(E_WARNING,"Birdstep: Not result index (%d),Z_LVAL_P(ind)");
- RETURN_FALSE;
- }
- convert_to_long(col);
- indx = Z_LVAL_P(col);
- if ( indx < 0 || indx >= res->numcols ) {
- php_error(E_WARNING,"Birdstep: Field index not in range");
- RETURN_FALSE;
- }
- RETURN_STRING(res->values[indx].name,TRUE);
-}
-/* }}} */
-
-/* {{{ proto int birdstep_fieldnum(int index)
- */
-PHP_FUNCTION(birdstep_fieldnum)
-{
- pval *ind;
- Vresult *res;
-
- if ( ZEND_NUM_ARGS() != 1 || getParameters(ht,1,&ind) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(ind);
- res = birdstep_find_result(list,Z_LVAL_P(ind));
- if ( !res ) {
- php_error(E_WARNING,"Birdstep: Not result index (%d),Z_LVAL_P(ind)");
- RETURN_FALSE;
- }
- RETURN_LONG(res->numcols);
-}
-/* }}} */
-
-#endif /* HAVE_BIRDSTEP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/odbc/config.m4 b/ext/odbc/config.m4
deleted file mode 100644
index 05e27a020b..0000000000
--- a/ext/odbc/config.m4
+++ /dev/null
@@ -1,552 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl
-dnl Figure out which library file to link with for the Solid support.
-dnl
-AC_DEFUN(AC_FIND_SOLID_LIBS,[
- AC_MSG_CHECKING([Solid library file])
- ac_solid_uname_r=`uname -r 2>/dev/null`
- ac_solid_uname_s=`uname -s 2>/dev/null`
- case $ac_solid_uname_s in
- AIX) ac_solid_os=a3x;; # a4x for AIX4/ Solid 2.3/3.0 only
- HP-UX) ac_solid_os=h9x;; # h1x for hpux11, h0x for hpux10
- IRIX) ac_solid_os=irx;; # Solid 2.3(?)/ 3.0 only
- Linux) if ldd -v /bin/sh | grep GLIBC > /dev/null; then
- AC_DEFINE(SS_LINUX,1,[Needed in sqlunix.h ])
- ac_solid_os=l2x
- else
- AC_DEFINE(SS_LINUX,1,[Needed in sqlunix.h ])
- ac_solid_os=lux
- fi;;
- SunOS) ac_solid_os=ssx;; # should we deal with SunOS 4?
- FreeBSD) if test `expr $ac_solid_uname_r : '\(.\)'` -gt "2"; then
- AC_DEFINE(SS_FBX,1,[Needed in sqlunix.h for wchar defs ])
- ac_solid_os=fex
- else
- AC_DEFINE(SS_FBX,1,[Needed in sqlunix.h for wchar defs ])
- ac_solid_os=fbx
- fi
- esac
-
- if test -f $1/soc${ac_solid_os}35.a; then
- ac_solid_version=35
- ac_solid_prefix=soc
- elif test -f $1/scl${ac_solid_os}30.a; then
- ac_solid_version=30
- ac_solid_prefix=scl
- elif test -f $1/scl${ac_solid_os}23.a; then
- ac_solid_version=23
- ac_solid_prefix=scl
- fi
-
-#
-# Check for the library files, and setup the ODBC_LIBS path...
-#
-if test ! -f $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -a \
- ! -f $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a; then
- #
- # we have an error and should bail out, as we can't find the libs!
- #
- echo ""
- echo "*********************************************************************"
- echo "* Unable to locate $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so or $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a"
- echo "* Please correct this by creating the following links and reconfiguring:"
- echo "* $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a -> $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a"
- echo "* $1/${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -> $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so"
- echo "*********************************************************************"
-else
- ODBC_LFLAGS=-L$1
- ODBC_LIBS=-l${ac_solid_prefix}${ac_solid_os}${ac_solid_version}
-fi
-
-
- AC_MSG_RESULT(`echo $ODBC_LIBS | sed -e 's!.*/!!'`)
-])
-
-
-
-
-dnl
-dnl Figure out which library file to link with for the Empress support.
-dnl
-AC_DEFUN(AC_FIND_EMPRESS_LIBS,[
- AC_MSG_CHECKING([Empress library file])
- ODBC_LIBS=`echo $1/libempodbccl.so | cut -d' ' -f1`
- if test ! -f $ODBC_LIBS; then
- ODBC_LIBS=`echo $1/libempodbccl.so | cut -d' ' -f1`
- fi
- AC_MSG_RESULT(`echo $ODBC_LIBS | sed -e 's!.*/!!'`)
-])
-
-AC_DEFUN(AC_FIND_EMPRESS_BCS_LIBS,[
- AC_MSG_CHECKING([Empress local access library file])
- ODBCBCS_LIBS=`echo $1/libempodbcbcs.a | cut -d' ' -f1`
- if test ! -f $ODBCBCS_LIBS; then
- ODBCBCS_LIBS=`echo $1/libempodbcbcs.a | cut -d' ' -f1`
- fi
- AC_MSG_RESULT(`echo $ODBCBCS_LIBS | sed -e 's!.*/!!'`)
-])
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Adabas support)
-AC_ARG_WITH(adabas,
-[ --with-adabas[=DIR] Include Adabas D support. DIR is the Adabas base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_INCLUDE($withval/incl)
- PHP_ADD_LIBPATH($withval/lib)
- ODBC_OBJS="$withval/lib/odbclib.a"
- ODBC_LIB="$abs_builddir/ext/odbc/libodbc_adabas.a"
- $srcdir/build/shtool mkdir -f -p ext/odbc
- rm -f "$ODBC_LIB"
- cp "$ODBC_OBJS" "$ODBC_LIB"
- PHP_ADD_LIBRARY(sqlptc)
- PHP_ADD_LIBRARY(sqlrte)
- PHP_ADD_LIBRARY_WITH_PATH(odbc_adabas, $abs_builddir/ext/odbc)
- ODBC_TYPE=adabas
- AC_DEFINE(HAVE_ADABAS,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for SAP DB support)
-AC_ARG_WITH(sapdb,
-[ --with-sapdb[=DIR] Include SAP DB support. DIR is SAP DB base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_INCLUDE($withval/incl)
- PHP_ADD_LIBPATH($withval/lib)
- PHP_ADD_LIBRARY(sqlod)
- ODBC_TYPE=sapdb
- AC_DEFINE(HAVE_SAPDB,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Solid support)
-AC_ARG_WITH(solid,
-[ --with-solid[=DIR] Include Solid support. DIR is the Solid base
- install directory, defaults to /usr/local/solid],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local/solid
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_TYPE=solid
- if test -f $ODBC_LIBDIR/soc*35.a; then
- AC_DEFINE(HAVE_SOLID_35,1,[ ])
- elif test -f $ODBC_LIBDIR/scl*30.a; then
- AC_DEFINE(HAVE_SOLID_30,1,[ ])
- elif test -f $ODBC_LIBDIR/scl*23.a; then
- AC_DEFINE(HAVE_SOLID,1,[ ])
- fi
- AC_MSG_RESULT(yes)
- AC_FIND_SOLID_LIBS($ODBC_LIBDIR)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for IBM DB2 support)
-AC_ARG_WITH(ibm-db2,
-[ --with-ibm-db2[=DIR] Include IBM DB2 support. DIR is the DB2 base
- install directory, defaults to /home/db2inst1/sqllib],
-[
- PHP_WITH_SHARED
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=/home/db2inst1/sqllib/include
- ODBC_LIBDIR=/home/db2inst1/sqllib/lib
- else
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- fi
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_TYPE=db2
- ODBC_LIBS="-ldb2"
- AC_DEFINE(HAVE_IBMDB2,1,[ ])
-
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Empress support)
-AC_ARG_WITH(empress,
-[ --with-empress[=DIR] Include Empress support. DIR is the Empress base
- install directory, defaults to \$EMPRESSPATH.
- From PHP4, this option only supports Empress Version
- 8.60 and above],
-[
- PHP_WITH_SHARED
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=$EMPRESSPATH/include/odbc
- ODBC_LIBDIR=$EMPRESSPATH/shlib
- else
- ODBC_INCDIR=$withval/include/odbc
- ODBC_LIBDIR=$withval/shlib
- fi
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_TYPE=empress
- AC_DEFINE(HAVE_EMPRESS,1,[ ])
- AC_MSG_RESULT(yes)
- AC_FIND_EMPRESS_LIBS($ODBC_LIBDIR)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Empress local access support)
-AC_ARG_WITH(empress-bcs,
-[ --with-empress-bcs[=DIR]
- Include Empress Local Access support. DIR is the
- Empress base install directory, defaults to
- \$EMPRESSPATH. From PHP4, this option only supports
- Empress Version 8.60 and above.],
-[
- PHP_WITH_SHARED
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=$EMPRESSPATH/include/odbc
- ODBC_LIBDIR=$EMPRESSPATH/shlib
- else
- ODBC_INCDIR=$withval/include/odbc
- ODBC_LIBDIR=$withval/shlib
- fi
- CC="empocc -bcs";export CC;
- LD="empocc -bcs";export LD;
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- LIST=`empocc -listlines -bcs -o a a.c`
-
- NEWLIST=
- for I in $LIST
- do
- case $I in
- $EMPRESSPATH/odbccl/lib/* | \
- $EMPRESSPATH/rdbms/lib/* | \
- $EMPRESSPATH/common/lib/*)
- NEWLIST="$NEWLIST $I"
- ;;
- esac
- done
- ODBC_LIBS="-lempphpbcs -lms -lmscfg -lbasic -lbasic_os -lnlscstab -lnlsmsgtab -lm -ldl -lcrypt"
- ODBC_TYPE=empress
- AC_DEFINE(HAVE_EMPRESS,1,[ ])
- AC_MSG_RESULT(yes)
- AC_FIND_EMPRESS_BCS_LIBS($ODBC_LIBDIR)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Birdstep support)
-AC_ARG_WITH(birdstep,
-[ --with-birdstep[=DIR] Include Birdstep support. DIR is the Birdstep base
- install directory, defaults to /usr/local/birdstep.],
-[
- PHP_WITH_SHARED
-
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=/usr/local/birdstep/include
- ODBC_LIBDIR=/usr/local/birdstep/lib
- else
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- fi
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_TYPE=birdstep
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_LIBS="-lCadm -lCdict -lCenc -lCrdm -lCrpc -lCrdbc -lCrm -lCuapi -lutil"
- AC_DEFINE(HAVE_BIRDSTEP,1,[ ])
-
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for a custom ODBC support)
-AC_ARG_WITH(custom-odbc,
-[ --with-custom-odbc[=DIR]
- Include a user defined ODBC support.
- The DIR is ODBC install base directory,
- which defaults to /usr/local.
- Make sure to define CUSTOM_ODBC_LIBS and
- have some odbc.h in your include dirs.
- E.g., you should define following for
- Sybase SQL Anywhere 5.5.00 on QNX, prior to
- run configure script:
- CPPFLAGS=\"-DODBC_QNX -DSQLANY_BUG\"
- LDFLAGS=-lunix
- CUSTOM_ODBC_LIBS=\"-ldblib -lodbc\".],
-[
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS=$CUSTOM_ODBC_LIBS
- ODBC_TYPE=custom
- AC_DEFINE(HAVE_CODBC,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for iODBC support)
-AC_ARG_WITH(iodbc,
-[ --with-iodbc[=DIR] Include iODBC support. DIR is the iODBC base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_LIBRARY_WITH_PATH(iodbc, $withval/lib)
- PHP_ADD_INCLUDE($withval/include, 1)
- ODBC_TYPE=iodbc
- ODBC_INCLUDE=-I$withval/include
- ODBC_LFLAGS=-L$withval/lib
- ODBC_LIBS=-liodbc
- AC_DEFINE(HAVE_IODBC,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Easysoft ODBC-ODBC Bridge support)
-AC_ARG_WITH(esoob,
-[ --with-esoob[=DIR] Include Easysoft OOB support. DIR is the OOB base
- install directory,
- defaults to /usr/local/easysoft/oob/client.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local/easysoft/oob/client
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS=-lesoobclient
- ODBC_TYPE=ESOOB
- AC_DEFINE(HAVE_ESOOB,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for unixODBC support)
-AC_ARG_WITH(unixODBC,
-[ --with-unixODBC[=DIR] Include unixODBC support. DIR is the unixODBC base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS=-lodbc
- ODBC_TYPE=unixODBC
- AC_DEFINE(HAVE_UNIXODBC,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for OpenLink ODBC support)
-AC_ARG_WITH(openlink,
-[ --with-openlink[=DIR] Include OpenLink ODBC support. DIR is the
- OpenLink base install directory, defaults to
- /usr/local. This is the same as iODBC.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_LIBRARY_WITH_PATH(iodbc, $withval/lib)
- PHP_ADD_INCLUDE($withval/include, 1)
- ODBC_TYPE=iodbc
- ODBC_INCLUDE=-I$withval/include
- ODBC_LFLAGS=-L$withval/lib
- ODBC_LIBS=-liodbc
- AC_DEFINE(HAVE_IODBC,1,[ ])
- AC_MSG_RESULT(yes)
- echo "****************************************************************"
- echo " --with-openlink will not be valid in future releases. Please "
- echo " update your configure script to use --with-iodbc instead. "
- echo "****************************************************************"
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for DBMaker support)
-AC_ARG_WITH(dbmaker,
-[ --with-dbmaker[=DIR] Include DBMaker support. DIR is the DBMaker base
- install directory, defaults to where the latest
- version of DBMaker is installed (such as
- /home/dbmaker/3.6).],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- # find dbmaker's home directory
- DBMAKER_HOME=`grep "^dbmaker:" /etc/passwd | awk -F: '{print $6}'`
-
- # check DBMaker version (from 5.0 to 2.0)
- DBMAKER_VERSION=5.0
-
- while test test ! -d $DBMAKER_HOME/$DBMAKER_VERSION -a \
- "$DBMAKER_VERSION" != "2.9"; do
- DM_VER=`echo $DBMAKER_VERSION | sed -e 's/\.//' | awk '{ print $1-1;}'`
- MAJOR_V=`echo $DM_VER | awk '{ print $1/10; }' \
- | awk -F. '{ print $1; }'`
- MINOR_V=`echo $DM_VER | awk '{ print $1%10; }'`
- DBMAKER_VERSION=$MAJOR_V.$MINOR_V
- done
-
- if test "$DBMAKER_VERSION" = "2.9"; then
- withval=$DBMAKER_HOME
- else
- DBMAKER_PATH=$DBMAKER_HOME/$DBMAKER_VERSION
- fi
-
- withval=$DBMAKER_PATH
- fi
-
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS="-ldmapic -lc"
- ODBC_TYPE=dbmaker
-
- AC_DEFINE(HAVE_DBMAKER,1,[Whether you want DBMaker])
-
- if test "$shared" = "yes"; then
- AC_MSG_RESULT(yes (shared))
- ODBC_LIBS="-ldmapic -lc -lm"
- ODBC_SHARED="odbc.la"
- else
- AC_MSG_RESULT(yes (static))
- PHP_ADD_LIBRARY_WITH_PATH(dmapic, $ODBC_LIBDIR)
- PHP_ADD_INCLUDE($ODBC_INCDIR)
- ODBC_STATIC="libphpext_odbc.la"
- fi
-
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -n "$ODBC_TYPE"; then
- INCLUDES="$INCLUDES $ODBC_INCLUDE"
- if test "$ODBC_TYPE" != "dbmaker"; then
- if test "$shared" != "yes"; then
- EXTRA_LIBS="$EXTRA_LIBS $ODBC_LFLAGS $ODBC_LIBS"
- fi
- fi
- AC_DEFINE(HAVE_UODBC,1,[ ])
- PHP_SUBST(ODBC_INCDIR)
- PHP_SUBST(ODBC_LIBDIR)
- PHP_SUBST_OLD(ODBC_INCLUDE)
- PHP_SUBST_OLD(ODBC_LIBS)
- PHP_SUBST_OLD(ODBC_LFLAGS)
- PHP_SUBST_OLD(ODBC_TYPE)
- PHP_NEW_EXTENSION(odbc, php_odbc.c, $shared)
-fi
diff --git a/ext/odbc/php_birdstep.h b/ext/odbc/php_birdstep.h
deleted file mode 100644
index d41ffb3501..0000000000
--- a/ext/odbc/php_birdstep.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Nikolay P. Romanyuk <mag@redcom.ru> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BIRDSTEP_H
-#define PHP_BIRDSTEP_H
-
-#if defined(HAVE_BIRDSTEP) && !HAVE_UODBC
-#define UNIX
-#include <sql.h>
-#include <sqlext.h>
-
-typedef struct VConn {
- HDBC hdbc;
- long index;
-} VConn;
-
-typedef struct {
- char name[32];
- char *value;
- long vallen;
- SDWORD valtype;
-} VResVal;
-
-typedef struct Vresult {
- HSTMT hstmt;
- VConn *conn;
- long index;
- VResVal *values;
- long numcols;
- int fetched;
-} Vresult;
-
-typedef struct {
- long num_links;
- long max_links;
- int le_link,le_result;
-} birdstep_module;
-
-extern zend_module_entry birdstep_module_entry;
-#define birdstep_module_ptr &birdstep_module_entry
-
-/* birdstep.c functions */
-PHP_MINIT_FUNCTION(birdstep);
-PHP_RINIT_FUNCTION(birdstep);
-PHP_MINFO_FUNCTION(birdstep);
-PHP_MSHUTDOWN_FUNCTION(birdstep);
-
-PHP_FUNCTION(birdstep_connect);
-PHP_FUNCTION(birdstep_close);
-PHP_FUNCTION(birdstep_exec);
-PHP_FUNCTION(birdstep_fetch);
-PHP_FUNCTION(birdstep_result);
-PHP_FUNCTION(birdstep_freeresult);
-PHP_FUNCTION(birdstep_autocommit);
-PHP_FUNCTION(birdstep_off_autocommit);
-PHP_FUNCTION(birdstep_commit);
-PHP_FUNCTION(birdstep_rollback);
-PHP_FUNCTION(birdstep_fieldnum);
-PHP_FUNCTION(birdstep_fieldname);
-
-extern birdstep_module php_birdstep_module;
-
-#else
-
-#define birdstep_module_ptr NULL
-
-#endif /* HAVE_BIRDSTEP */
-#endif /* PHP_BIRDSTEP_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
deleted file mode 100644
index 5942c97683..0000000000
--- a/ext/odbc/php_odbc.c
+++ /dev/null
@@ -1,3552 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Frank M. Kromann <frank@frontbase.com> Support for DB/2 CLI |
- | Kevin N. Shallow <kshallow@tampabay.rr.com> Birdstep Support|
- | Daniel R. Kalowsky <kalowsky@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#include "ext/standard/info.h"
-
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_standard.h"
-
-#include "php_odbc.h"
-#include "php_globals.h"
-
-
-#if HAVE_UODBC
-
-#include <fcntl.h>
-#include "ext/standard/head.h"
-#include "php_ini.h"
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-
-#define ODBC_TYPE "Win32"
-#define PHP_ODBC_TYPE ODBC_TYPE
-
-#else
-#include "build-defs.h"
-#endif
-
-/*
- * not defined elsewhere
- */
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-
-static int le_result, le_conn, le_pconn;
-
-#define SAFE_SQL_NTS(n) ((SWORD) ((n)?(SQL_NTS):0))
-
-static unsigned char a3_arg3_and_3_force_ref[] = { 3, BYREF_NONE, BYREF_FORCE, BYREF_ALLOW};
-
-/* {{{ odbc_functions[]
- */
-function_entry odbc_functions[] = {
- PHP_FE(odbc_error, NULL)
- PHP_FE(odbc_errormsg, NULL)
- PHP_FE(odbc_setoption, NULL)
- PHP_FE(odbc_autocommit, NULL)
- PHP_FE(odbc_close, NULL)
- PHP_FE(odbc_close_all, NULL)
- PHP_FE(odbc_commit, NULL)
- PHP_FE(odbc_connect, NULL)
- PHP_FE(odbc_pconnect, NULL)
- PHP_FE(odbc_cursor, NULL)
-#ifdef HAVE_DBMAKER
- PHP_FE(odbc_fetch_array, NULL)
- PHP_FE(odbc_fetch_object, NULL)
-#endif
- PHP_FE(odbc_exec, NULL)
- PHP_FE(odbc_prepare, NULL)
- PHP_FE(odbc_execute, NULL)
- PHP_FE(odbc_fetch_row, NULL)
- PHP_FE(odbc_fetch_into, a3_arg3_and_3_force_ref)
- PHP_FE(odbc_field_len, NULL)
- PHP_FE(odbc_field_scale, NULL)
- PHP_FE(odbc_field_name, NULL)
- PHP_FE(odbc_field_type, NULL)
- PHP_FE(odbc_field_num, NULL)
- PHP_FE(odbc_free_result, NULL)
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
- PHP_FE(odbc_next_result, NULL)
-#endif
- PHP_FE(odbc_num_fields, NULL)
- PHP_FE(odbc_num_rows, NULL)
- PHP_FE(odbc_result, NULL)
- PHP_FE(odbc_result_all, NULL)
- PHP_FE(odbc_rollback, NULL)
- PHP_FE(odbc_binmode, NULL)
- PHP_FE(odbc_longreadlen, NULL)
- PHP_FE(odbc_tables, NULL)
- PHP_FE(odbc_columns, NULL)
- PHP_FE(odbc_gettypeinfo, NULL)
- PHP_FE(odbc_primarykeys, NULL)
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP) /* not supported now */
- PHP_FE(odbc_columnprivileges, NULL)
- PHP_FE(odbc_tableprivileges, NULL)
-#endif
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) /* not supported */
- PHP_FE(odbc_foreignkeys, NULL)
- PHP_FE(odbc_procedures, NULL)
-#if !defined(HAVE_BIRDSTEP)
- PHP_FE(odbc_procedurecolumns, NULL)
-#endif
-#endif
- PHP_FE(odbc_specialcolumns, NULL)
- PHP_FE(odbc_statistics, NULL)
- PHP_FALIAS(odbc_do, odbc_exec, NULL)
- PHP_FALIAS(odbc_field_precision, odbc_field_len, NULL)
- { NULL, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ odbc_module_entry
- */
-zend_module_entry odbc_module_entry = {
- STANDARD_MODULE_HEADER,
- "odbc",
- odbc_functions,
- PHP_MINIT(odbc),
- PHP_MSHUTDOWN(odbc),
- PHP_RINIT(odbc),
- PHP_RSHUTDOWN(odbc),
- PHP_MINFO(odbc),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef ZTS
-int odbc_globals_id;
-#else
-ZEND_API php_odbc_globals odbc_globals;
-#endif
-
-#ifdef COMPILE_DL_ODBC
-ZEND_GET_MODULE(odbc)
-#endif
-
-/* {{{ _free_odbc_result
- */
-static void _free_odbc_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- odbc_result *res = (odbc_result *)rsrc->ptr;
- int i;
-
- if (res) {
- if (res->values) {
- for(i = 0; i < res->numcols; i++) {
- if (res->values[i].value)
- efree(res->values[i].value);
- }
- efree(res->values);
- res->values = NULL;
- }
- if (res->stmt) {
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35)
- SQLTransact(res->conn_ptr->henv, res->conn_ptr->hdbc,
- (UWORD)SQL_COMMIT);
-#endif
- SQLFreeStmt(res->stmt,SQL_DROP);
- /* We don't want the connection to be closed after the last statment has been closed
- * Connections will be closed on shutdown
- * zend_list_delete(res->conn_ptr->id);
- */
- }
- efree(res);
- }
-}
-/* }}} */
-
-/* {{{ safe_odbc_disconnect
- * disconnect, and if it fails, then issue a rollback for any pending transaction (lurcher)
- */
-static void safe_odbc_disconnect( void *handle )
-{
- int ret;
-
- ret = SQLDisconnect( handle );
- if ( ret == SQL_ERROR )
- {
- SQLTransact( NULL, handle, SQL_ROLLBACK );
- SQLDisconnect( handle );
- }
-}
-/* }}} */
-
-/* {{{ _close_odbc_conn
- */
-static void _close_odbc_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- odbc_connection *conn = (odbc_connection *)rsrc->ptr;
-
- safe_odbc_disconnect(conn->hdbc);
- SQLFreeConnect(conn->hdbc);
- SQLFreeEnv(conn->henv);
- efree(conn);
- ODBCG(num_links)--;
-}
-/* }}} */
-
-static void _close_odbc_pconn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- odbc_connection *conn = (odbc_connection *)rsrc->ptr;
-
- safe_odbc_disconnect(conn->hdbc);
- SQLFreeConnect(conn->hdbc);
- SQLFreeEnv(conn->henv);
- free(conn);
-
- ODBCG(num_links)--;
- ODBCG(num_persistent)--;
-}
-
-static PHP_INI_DISP(display_link_nums)
-{
- char *value;
- TSRMLS_FETCH();
-
- if (type == PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (value) {
- if (atoi(value) == -1) {
- PUTS("Unlimited");
- } else {
- php_printf("%s", value);
- }
- }
-}
-
-static PHP_INI_DISP(display_defPW)
-{
- char *value;
- TSRMLS_FETCH();
-
- if (type == PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (value) {
-#if PHP_DEBUG
- php_printf("%s", value);
-#else
- PUTS("********");
-#endif
- } else {
- PUTS("<i>no value</i>");
- }
-}
-
-static PHP_INI_DISP(display_binmode)
-{
- char *value;
- TSRMLS_FETCH();
-
- if (type == PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (value) {
- switch(atoi(value)) {
- case 0:
- PUTS("passthru");
- break;
- case 1:
- PUTS("return as is");
- break;
- case 2:
- PUTS("return as char");
- break;
- }
- }
-}
-
-static PHP_INI_DISP(display_lrl)
-{
- char *value;
- TSRMLS_FETCH();
-
- if (type == PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (value) {
- if (atoi(value) <= 0) {
- PUTS("Passthru");
- } else {
- php_printf("return up to %s bytes", value);
- }
- }
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("odbc.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt,
- allow_persistent, php_odbc_globals, odbc_globals)
- STD_PHP_INI_ENTRY_EX("odbc.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt,
- max_persistent, php_odbc_globals, odbc_globals, display_link_nums)
- STD_PHP_INI_ENTRY_EX("odbc.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt,
- max_links, php_odbc_globals, odbc_globals, display_link_nums)
- STD_PHP_INI_ENTRY("odbc.default_db", NULL, PHP_INI_ALL, OnUpdateString,
- defDB, php_odbc_globals, odbc_globals)
- STD_PHP_INI_ENTRY("odbc.default_user", NULL, PHP_INI_ALL, OnUpdateString,
- defUser, php_odbc_globals, odbc_globals)
- STD_PHP_INI_ENTRY_EX("odbc.default_pw", NULL, PHP_INI_ALL, OnUpdateString,
- defPW, php_odbc_globals, odbc_globals, display_defPW)
- STD_PHP_INI_ENTRY_EX("odbc.defaultlrl", "4096", PHP_INI_ALL, OnUpdateInt,
- defaultlrl, php_odbc_globals, odbc_globals, display_lrl)
- STD_PHP_INI_ENTRY_EX("odbc.defaultbinmode", "1", PHP_INI_ALL, OnUpdateInt,
- defaultbinmode, php_odbc_globals, odbc_globals, display_binmode)
- STD_PHP_INI_BOOLEAN("odbc.check_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt,
- check_persistent, php_odbc_globals, odbc_globals)
-PHP_INI_END()
-
-#ifdef ZTS
-static void php_odbc_init_globals(php_odbc_globals *odbc_globals_p TSRMLS_DC)
-{
- ODBCG(num_persistent) = 0;
-}
-#endif
-
-PHP_MINIT_FUNCTION(odbc)
-{
-#ifdef SQLANY_BUG
- ODBC_SQL_CONN_T foobar;
- RETCODE rc;
-#endif
-
-#ifdef ZTS
- ts_allocate_id(&odbc_globals_id, sizeof(php_odbc_globals), php_odbc_init_globals, NULL);
-#else
- ODBCG(num_persistent) = 0;
-#endif
-
- REGISTER_INI_ENTRIES();
- le_result = zend_register_list_destructors_ex(_free_odbc_result, NULL, "odbc result", module_number);
- le_conn = zend_register_list_destructors_ex(_close_odbc_conn, NULL, "odbc link", module_number);
- le_pconn = zend_register_list_destructors_ex(NULL, _close_odbc_pconn, "odbc link persistent", module_number);
- Z_TYPE(odbc_module_entry) = type;
-
- REGISTER_STRING_CONSTANT("ODBC_TYPE", PHP_ODBC_TYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ODBC_BINMODE_PASSTHRU", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ODBC_BINMODE_RETURN", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ODBC_BINMODE_CONVERT", 2, CONST_CS | CONST_PERSISTENT);
- /* Define Constants for options
- these Constants are defined in <sqlext.h>
- */
- REGISTER_LONG_CONSTANT("SQL_ODBC_CURSORS", SQL_ODBC_CURSORS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CUR_USE_DRIVER", SQL_CUR_USE_DRIVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CUR_USE_IF_NEEDED", SQL_CUR_USE_IF_NEEDED, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CUR_USE_ODBC", SQL_CUR_USE_ODBC, CONST_PERSISTENT | CONST_CS);
-
-
- REGISTER_LONG_CONSTANT("SQL_CONCURRENCY", SQL_CONCURRENCY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_READ_ONLY", SQL_CONCUR_READ_ONLY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_LOCK", SQL_CONCUR_LOCK, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_ROWVER", SQL_CONCUR_ROWVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_VALUES", SQL_CONCUR_VALUES, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("SQL_CURSOR_TYPE", SQL_CURSOR_TYPE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_FORWARD_ONLY", SQL_CURSOR_FORWARD_ONLY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_KEYSET_DRIVEN", SQL_CURSOR_KEYSET_DRIVEN, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_DYNAMIC", SQL_CURSOR_DYNAMIC, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_STATIC", SQL_CURSOR_STATIC, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("SQL_KEYSET_SIZE", SQL_KEYSET_SIZE, CONST_PERSISTENT | CONST_CS);
-
- /*
- * register the standard data types
- */
- REGISTER_LONG_CONSTANT("SQL_CHAR", SQL_CHAR, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_VARCHAR", SQL_VARCHAR, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_LONGVARCHAR", SQL_LONGVARCHAR, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_DECIMAL", SQL_DECIMAL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_NUMERIC", SQL_NUMERIC, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_BIT", SQL_BIT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TINYINT", SQL_TINYINT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SMALLINT", SQL_SMALLINT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_INTEGER", SQL_INTEGER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_BIGINT", SQL_BIGINT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_REAL", SQL_REAL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_FLOAT", SQL_FLOAT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_DOUBLE", SQL_DOUBLE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_BINARY", SQL_BINARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_VARBINARY", SQL_VARBINARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_LONGVARBINARY", SQL_LONGVARBINARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_DATE", SQL_DATE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TIME", SQL_TIME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TIMESTAMP", SQL_TIMESTAMP, CONST_PERSISTENT | CONST_CS);
-#if defined(ODBCVER) && (ODBCVER >= 0x0300)
- REGISTER_LONG_CONSTANT("SQL_TYPE_DATE", SQL_TYPE_DATE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TYPE_TIME", SQL_TYPE_TIME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TYPE_TIMESTAMP", SQL_TYPE_TIMESTAMP, CONST_PERSISTENT | CONST_CS);
-
- /*
- * SQLSpecialColumns values
- */
- REGISTER_LONG_CONSTANT("SQL_BEST_ROWID", SQL_BEST_ROWID, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_ROWVER", SQL_ROWVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SCOPE_CURROW", SQL_SCOPE_CURROW, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SCOPE_TRANSACTION", SQL_SCOPE_TRANSACTION, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SCOPE_SESSION", SQL_SCOPE_SESSION, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_NO_NULLS", SQL_NO_NULLS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_NULLABLE", SQL_NULLABLE, CONST_PERSISTENT | CONST_CS);
-
- /*
- * SQLStatistics values
- */
- REGISTER_LONG_CONSTANT("SQL_INDEX_UNIQUE", SQL_INDEX_UNIQUE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_INDEX_ALL", SQL_INDEX_ALL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_ENSURE", SQL_ENSURE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_QUICK", SQL_QUICK, CONST_PERSISTENT | CONST_CS);
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(odbc)
-{
- ODBCG(defConn) = -1;
- ODBCG(num_links) = ODBCG(num_persistent);
- memset(ODBCG(laststate), '\0', 6);
- memset(ODBCG(lasterrormsg), '\0', SQL_MAX_MESSAGE_LENGTH);
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(odbc)
-{
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(odbc)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(odbc)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "ODBC Support", "enabled");
- sprintf(buf, "%ld", ODBCG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", ODBCG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_row(2, "ODBC library", PHP_ODBC_TYPE);
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "ODBC_INCLUDE", PHP_ODBC_INCLUDE);
- php_info_print_table_row(2, "ODBC_LFLAGS", PHP_ODBC_LFLAGS);
- php_info_print_table_row(2, "ODBC_LIBS", PHP_ODBC_LIBS);
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-
-void odbc_sql_error(ODBC_SQL_ERROR_PARAMS)
-{
- char state[6];
- SDWORD error; /* Not used */
- char errormsg[SQL_MAX_MESSAGE_LENGTH];
- SWORD errormsgsize; /* Not used */
- RETCODE rc;
- ODBC_SQL_ENV_T henv;
- ODBC_SQL_CONN_T conn;
- TSRMLS_FETCH();
-
- if (conn_resource) {
- henv = conn_resource->henv;
- conn = conn_resource->hdbc;
- } else {
- henv = SQL_NULL_HENV;
- conn = SQL_NULL_HDBC;
- }
-
- /* This leads to an endless loop in many drivers!
- *
- while(henv != SQL_NULL_HENV){
- do {
- */
- rc = SQLError(henv, conn, stmt, state, &error, errormsg, sizeof(errormsg)-1, &errormsgsize);
- if (conn_resource) {
- memcpy(conn_resource->laststate, state, sizeof(state));
- memcpy(conn_resource->lasterrormsg, errormsg, sizeof(errormsg));
- }
- memcpy(ODBCG(laststate), state, sizeof(state));
- memcpy(ODBCG(lasterrormsg), errormsg, sizeof(errormsg));
- if (func) {
- php_error(E_WARNING, "SQL error: %s, SQL state %s in %s", errormsg, state, func);
- } else {
- php_error(E_WARNING, "SQL error: %s, SQL state %s", errormsg, state);
- }
- /*
- } while (SQL_SUCCEEDED(rc));
- }
- */
-}
-
-void php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- odbc_result *result;
- pval **pv_res, **pv_flag;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_flag) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(pv_flag);
-
- if (Z_LVAL_PP(pv_res)) {
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- if (mode)
- result->longreadlen = Z_LVAL_PP(pv_flag);
- else
- result->binmode = Z_LVAL_PP(pv_flag);
- } else {
- if (mode)
- ODBCG(defaultlrl) = Z_LVAL_PP(pv_flag);
- else
- ODBCG(defaultbinmode) = Z_LVAL_PP(pv_flag);
- }
- RETURN_TRUE;
-}
-
-
-int odbc_bindcols(odbc_result *result TSRMLS_DC)
-{
- RETCODE rc;
- int i;
- SWORD colnamelen; /* Not used */
- SDWORD displaysize;
-
- result->values = (odbc_result_value *) emalloc(sizeof(odbc_result_value)*result->numcols);
-
- if (result->values == NULL) {
- php_error(E_WARNING, "Out of memory");
- SQLFreeStmt(result->stmt, SQL_DROP);
- return 0;
- }
-
- result->longreadlen = ODBCG(defaultlrl);
- result->binmode = ODBCG(defaultbinmode);
-
- for(i = 0; i < result->numcols; i++) {
- rc = SQLColAttributes(result->stmt, (UWORD)(i+1), SQL_COLUMN_NAME,
- result->values[i].name, sizeof(result->values[i].name), &colnamelen, 0);
- rc = SQLColAttributes(result->stmt, (UWORD)(i+1), SQL_COLUMN_TYPE,
- NULL, 0, NULL, &result->values[i].coltype);
-
- /* Don't bind LONG / BINARY columns, so that fetch behaviour can
- * be controlled by odbc_binmode() / odbc_longreadlen()
- */
-
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- case SQL_LONGVARCHAR:
- result->values[i].value = NULL;
- break;
-
-#ifdef HAVE_ADABAS
- case SQL_TIMESTAMP:
- result->values[i].value = (char *)emalloc(27);
- SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value,
- 27, &result->values[i].vallen);
- break;
-#endif /* HAVE_ADABAS */
- default:
- rc = SQLColAttributes(result->stmt, (UWORD)(i+1), SQL_COLUMN_DISPLAY_SIZE,
- NULL, 0, NULL, &displaysize);
- displaysize = displaysize <= result->longreadlen ? displaysize :
- result->longreadlen;
- result->values[i].value = (char *)emalloc(displaysize + 1);
- rc = SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value,
- displaysize + 1, &result->values[i].vallen);
- break;
- }
- }
- return 1;
-}
-
-void odbc_transact(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- odbc_connection *conn;
- RETCODE rc;
- pval **pv_conn;
-
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- rc = SQLTransact(conn->henv, conn->hdbc, (UWORD)((type)?SQL_COMMIT:SQL_ROLLBACK));
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTransact");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-static int _close_pconn_with_id(list_entry *le, int *id TSRMLS_DC)
-{
- if(Z_TYPE_P(le) == le_pconn && (((odbc_connection *)(le->ptr))->id == *id)){
- return 1;
- }else{
- return 0;
- }
-}
-
-void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- odbc_result *result;
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_OPENLINK)
- /* this seems to be necessary for Solid2.3 ( tested by
- * tammy@synchronis.com) and Solid 3.0 (tested by eric@terra.telemediair.nl)
- * Solid does not seem to declare a SQLINTEGER, but it does declare a
- * SQL_INTEGER which does not work (despite being the same type as a SDWORD.
- * Solid 3.5 does not have this issue.
- */
- SDWORD len;
-#else
- SQLINTEGER len;
-#endif
- pval **pv_res, **pv_num;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_num);
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) > result->numcols) {
- php_error(E_WARNING, "Field index larger than number of fields");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) < 1) {
- php_error(E_WARNING, "Field numbering starts at 1");
- RETURN_FALSE;
- }
-
- SQLColAttributes(result->stmt, (UWORD)Z_LVAL_PP(pv_num),
- (SQLUSMALLINT) (type?SQL_COLUMN_SCALE:SQL_COLUMN_PRECISION),
- NULL, 0, NULL, &len);
-
- RETURN_LONG(len);
-}
-
-/* Main User Functions */
-
-/* {{{ proto void odbc_close_all(void)
- Close all ODBC connections */
-PHP_FUNCTION(odbc_close_all)
-{
- void *ptr;
- int type;
- int i;
- int nument;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- nument = zend_hash_next_free_element(&EG(regular_list));
-
- /* Loop through list and close all statements */
- for(i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr && (type == le_result)){
- zend_list_delete(i);
- }
- }
-
- /* Second loop through list, now close all connections */
- nument = zend_hash_next_free_element(&EG(regular_list));
-
- for(i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr){
- if(type == le_conn){
- zend_list_delete(i);
- }else if(type == le_pconn){
- zend_list_delete(i);
- /* Delete the persistent connection */
- zend_hash_apply_with_argument(&EG(persistent_list),
- (apply_func_arg_t) _close_pconn_with_id, (void *) &i TSRMLS_CC);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto int odbc_binmode(int result_id, int mode)
- Handle binary column data */
-PHP_FUNCTION(odbc_binmode)
-{
- php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int odbc_longreadlen(int result_id, int length)
- Handle LONG columns */
-PHP_FUNCTION(odbc_longreadlen)
-{
- php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto int odbc_prepare(int connection_id, string query)
- Prepares a statement for execution */
-PHP_FUNCTION(odbc_prepare)
-{
- pval **pv_conn, **pv_query;
- char *query;
- odbc_result *result = NULL;
- odbc_connection *conn;
- RETCODE rc;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD scrollopts;
-#endif
-
- if (zend_get_parameters_ex(2, &pv_conn, &pv_query) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- convert_to_string_ex(pv_query);
- query = Z_STRVAL_PP(pv_query);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- result->numparams = 0;
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_prepare");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- /* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
- whether Driver supports ExtendedFetch */
- rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
- if (rc == SQL_SUCCESS) {
- if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
- /* Try to set CURSOR_TYPE to dynamic. Driver will replace this with other
- type if not possible.
- */
- if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, SQL_CURSOR_DYNAMIC)
- == SQL_ERROR) {
- odbc_sql_error(conn, result->stmt, " SQLSetStmtOption");
- SQLFreeStmt(result->stmt, SQL_DROP);
- efree(result);
- RETURN_FALSE;
- }
- }
- } else {
- result->fetch_abs = 0;
- }
-#endif
-
- rc = SQLPrepare(result->stmt, query, SQL_NTS);
- switch (rc) {
- case SQL_SUCCESS:
- break;
- case SQL_SUCCESS_WITH_INFO:
- odbc_sql_error(conn, result->stmt, "SQLPrepare");
- break;
- default:
- odbc_sql_error(conn, result->stmt, "SQLPrepare");
- RETURN_FALSE;
- }
-
- SQLNumParams(result->stmt, &(result->numparams));
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->id = zend_list_insert(result, le_result);
- zend_list_addref(conn->id);
- result->conn_ptr = conn;
- result->fetched = 0;
- RETURN_RESOURCE(result->id);
-}
-/* }}} */
-
-/*
- * Execute prepared SQL statement. Supports only input parameters.
- */
-/* {{{ proto int odbc_execute(int result_id [, array parameters_array])
- Execute a prepared statement */
-PHP_FUNCTION(odbc_execute)
-{
- pval **pv_res, **pv_param_arr, **tmp;
- typedef struct params_t {
- SDWORD vallen;
- int fp;
- } params_t;
- params_t *params = NULL;
- char *filename;
- unsigned char otype;
- SWORD sqltype, ctype, scale;
- SWORD nullable;
- UDWORD precision;
- odbc_result *result;
- int numArgs, i, ne;
- RETCODE rc;
-
- numArgs = ZEND_NUM_ARGS();
- switch(numArgs) {
- case 1:
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_param_arr) == FAILURE)
- WRONG_PARAM_COUNT;
- if (Z_TYPE_PP(pv_param_arr) != IS_ARRAY) {
- php_error(E_WARNING, "No array passed to odbc_execute()");
- return;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- /* XXX check for already bound parameters*/
- if (result->numparams > 0 && numArgs == 1) {
- php_error(E_WARNING, "No parameters to SQL statement given");
- RETURN_FALSE;
- }
-
- if (result->numparams > 0) {
- if ((ne = zend_hash_num_elements(Z_ARRVAL_PP(pv_param_arr))) < result->numparams) {
- php_error(E_WARNING,"Not enough parameters (%d should be %d) given", ne, result->numparams);
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(pv_param_arr));
- params = (params_t *)emalloc(sizeof(params_t) * result->numparams);
-
- for(i = 1; i <= result->numparams; i++) {
- if (zend_hash_get_current_data(Z_ARRVAL_PP(pv_param_arr), (void **) &tmp) == FAILURE) {
- php_error(E_WARNING,"Error getting parameter");
- SQLFreeStmt(result->stmt,SQL_RESET_PARAMS);
- efree(params);
- RETURN_FALSE;
- }
-
- otype = (*tmp)->type;
- convert_to_string(*tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error(E_WARNING,"Error converting parameter");
- SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
- efree(params);
- RETURN_FALSE;
- }
-
- SQLDescribeParam(result->stmt, (UWORD)i, &sqltype, &precision,
- &scale, &nullable);
- params[i-1].vallen = Z_STRLEN_PP(tmp);
- params[i-1].fp = -1;
-
- if (IS_SQL_BINARY(sqltype))
- ctype = SQL_C_BINARY;
- else
- ctype = SQL_C_CHAR;
-
- if (Z_STRLEN_PP(tmp) > 2 &&
- Z_STRVAL_PP(tmp)[0] == '\'' &&
- Z_STRVAL_PP(tmp)[Z_STRLEN_PP(tmp) - 1] == '\'') {
- filename = estrndup(&Z_STRVAL_PP(tmp)[1], Z_STRLEN_PP(tmp) - 2);
- filename[strlen(filename)] = '\0';
-
- /* Check for safe mode. */
- if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((params[i-1].fp = open(filename,O_RDONLY)) == -1) {
- php_error(E_WARNING,"Can't open file %s", filename);
- SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
- for(i = 0; i < result->numparams; i++) {
- if (params[i].fp != -1) {
- close(params[i].fp);
- }
- }
- efree(params);
- efree(filename);
- RETURN_FALSE;
- }
-
- efree(filename);
-
- params[i-1].vallen = SQL_LEN_DATA_AT_EXEC(0);
-
- rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT,
- ctype, sqltype, precision, scale,
- (void *)params[i-1].fp, 0,
- &params[i-1].vallen);
- } else {
-#ifdef HAVE_DBMAKER
- precision = params[i-1].vallen;
-#endif
- if (otype == IS_NULL) {
- params[i-1].vallen = SQL_NULL_DATA;
- }
-
- rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT,
- ctype, sqltype, precision, scale,
- Z_STRVAL_PP(tmp), 0,
- &params[i-1].vallen);
- }
- zend_hash_move_forward(Z_ARRVAL_PP(pv_param_arr));
- }
- }
- /* Close cursor, needed for doing multiple selects */
- rc = SQLFreeStmt(result->stmt, SQL_CLOSE);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLFreeStmt");
- }
-
- rc = SQLExecute(result->stmt);
-
- result->fetched = 0;
- if (rc == SQL_NEED_DATA) {
- char buf[4096];
- int fp, nbytes;
- while(rc == SQL_NEED_DATA) {
- rc = SQLParamData(result->stmt, (void*)&fp);
- if (rc == SQL_NEED_DATA) {
- while((nbytes = read(fp, &buf, 4096)) > 0)
- SQLPutData(result->stmt, (void*)&buf, nbytes);
- }
- }
- } else {
- switch (rc) {
- case SQL_SUCCESS:
- break;
- case SQL_NO_DATA_FOUND:
- case SQL_SUCCESS_WITH_INFO:
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute");
- break;
- default:
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute");
- RETVAL_FALSE;
- }
- }
-
- if (result->numparams > 0) {
- SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
- for(i = 0; i < result->numparams; i++) {
- if (params[i].fp != -1)
- close(params[i].fp);
- }
- efree(params);
- }
-
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO || rc == SQL_NO_DATA_FOUND) {
- RETVAL_TRUE;
- }
-
- if (result->numcols == 0) {
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETVAL_FALSE;
- }
- } else {
- result->values = NULL;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string odbc_cursor(int result_id)
- Get cursor name */
-PHP_FUNCTION(odbc_cursor)
-{
- pval **pv_res;
- SWORD len, max_len;
- char *cursorname;
- odbc_result *result;
- RETCODE rc;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- rc = SQLGetInfo(result->conn_ptr->hdbc,SQL_MAX_CURSOR_NAME_LEN,
- (void *)&max_len,sizeof(max_len),&len);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- if (max_len > 0) {
- cursorname = emalloc(max_len + 1);
- if (cursorname == NULL) {
- php_error(E_WARNING,"Out of memory");
- RETURN_FALSE;
- }
- rc = SQLGetCursorName(result->stmt,cursorname,(SWORD)max_len,&len);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- char state[6]; /* Not used */
- SDWORD error; /* Not used */
- char errormsg[255];
- SWORD errormsgsize; /* Not used */
-
- SQLError( result->conn_ptr->henv, result->conn_ptr->hdbc,
- result->stmt, state, &error, errormsg,
- sizeof(errormsg)-1, &errormsgsize);
- if (!strncmp(state,"S1015",5)) {
- sprintf(cursorname,"php_curs_%d", (int)result->stmt);
- if (SQLSetCursorName(result->stmt,cursorname,SQL_NTS) != SQL_SUCCESS) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLSetCursorName");
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(cursorname,1);
- }
- } else {
- php_error(E_WARNING, "SQL error: %s, SQL state %s", errormsg, state);
- RETVAL_FALSE;
- }
- } else {
- RETVAL_STRING(cursorname,1);
- }
- efree(cursorname);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int odbc_exec(int connection_id, string query [, int flags])
- Prepare and execute an SQL statement */
-/* XXX Use flags */
-PHP_FUNCTION(odbc_exec)
-{
- pval **pv_conn, **pv_query, **pv_flags;
- int numArgs;
- char *query;
- odbc_result *result = NULL;
- odbc_connection *conn;
- RETCODE rc;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD scrollopts;
-#endif
-
- numArgs = ZEND_NUM_ARGS();
- if (numArgs > 2) {
- if (zend_get_parameters_ex(3, &pv_conn, &pv_query, &pv_flags) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(pv_flags);
- } else {
- if (zend_get_parameters_ex(2, &pv_conn, &pv_query) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- convert_to_string_ex(pv_query);
- query = Z_STRVAL_PP(pv_query);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- efree(result);
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- /* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
- whether Driver supports ExtendedFetch */
- rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
- if (rc == SQL_SUCCESS) {
- if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
- /* Try to set CURSOR_TYPE to dynamic. Driver will replace this with other
- type if not possible.
- */
- if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, SQL_CURSOR_DYNAMIC)
- == SQL_ERROR) {
- odbc_sql_error(conn, result->stmt, " SQLSetStmtOption");
- SQLFreeStmt(result->stmt, SQL_DROP);
- efree(result);
- RETURN_FALSE;
- }
- }
- } else {
- result->fetch_abs = 0;
- }
-#endif
-
- rc = SQLExecDirect(result->stmt, query, SQL_NTS);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && rc != SQL_NO_DATA_FOUND) {
- /* XXX FIXME we should really check out SQLSTATE with SQLError
- * in case rc is SQL_SUCCESS_WITH_INFO here.
- */
- odbc_sql_error(conn, result->stmt, "SQLExecDirect");
- SQLFreeStmt(result->stmt, SQL_DROP);
- efree(result);
- RETURN_FALSE;
- }
-
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- /* For insert, update etc. cols == 0 */
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->id = zend_list_insert(result, le_result);
- zend_list_addref(conn->id);
- result->conn_ptr = conn;
- result->fetched = 0;
-
- RETURN_RESOURCE(result->id);
-}
-/* }}} */
-
-#ifdef HAVE_DBMAKER
-#define ODBC_NUM 1
-#define ODBC_OBJECT 2
-
-static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
- int i;
- odbc_result *result;
- RETCODE rc;
- SWORD sql_c_type;
- char *buf = NULL;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
- SDWORD rownum = -1;
- pval **pv_res, **pv_row, *tmp;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_row) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_row);
- rownum = Z_LVAL_PP(pv_row);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
-#else
- pval **pv_res, *tmp;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-#endif
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs) {
- if (rownum > 0)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus);
- else
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- } else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (rownum > 0 && result->fetch_abs)
- result->fetched = rownum;
- else
-#endif
- result->fetched++;
-
- for(i = 0; i < result->numcols; i++) {
- ALLOC_ZVAL(tmp);
- tmp->refcount = 1;
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
- sql_c_type = SQL_C_CHAR;
-
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 0) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- }
- if (result->binmode == 1) sql_c_type = SQL_C_BINARY;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[i].coltype) && result->longreadlen <= 0) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- }
- if (buf == NULL) buf = emalloc(result->longreadlen + 1);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1), sql_c_type,
- buf, result->longreadlen + 1, &result->values[i].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(buf);
- RETURN_FALSE;
- }
-
- if (rc == SQL_SUCCESS_WITH_INFO) {
- Z_STRLEN_P(tmp) = result->longreadlen;
- } else if (result->values[i].vallen == SQL_NULL_DATA) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- } else {
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- }
- Z_STRVAL_P(tmp) = estrndup(buf, Z_STRLEN_P(tmp));
- break;
-
- default:
- if (result->values[i].vallen == SQL_NULL_DATA) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- }
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- Z_STRVAL_P(tmp) = estrndup(result->values[i].value,Z_STRLEN_P(tmp));
- break;
- }
-
- if (result_type & ODBC_NUM) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, &tmp, sizeof(pval *), NULL);
- } else {
- zend_hash_update(Z_ARRVAL_P(return_value), result->values[i].name,
- strlen(result->values[i].name)+1, &tmp, sizeof(pval *), NULL);
- }
- }
- if (buf) efree(buf);
-}
-
-
-/* {{{ proto object odbc_fetch_object(int result [, int rownumber])
- Fetch a result row as an object */
-PHP_FUNCTION(odbc_fetch_object)
-{
- php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, ODBC_OBJECT);
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array odbc_fetch_array(int result [, int rownumber])
- Fetch a result row as an associative array */
-PHP_FUNCTION(odbc_fetch_array)
-{
- php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, ODBC_OBJECT);
-}
-/* }}} */
-#endif
-
-/* {{{ proto int odbc_fetch_into(int result_id, array result_array, [, int rownumber])
- Fetch one result row into an array */
-PHP_FUNCTION(odbc_fetch_into)
-{
- int numArgs, i;
- odbc_result *result;
- RETCODE rc;
- SWORD sql_c_type;
- char *buf = NULL;
- pval **pv_res, **pv_res_arr, *tmp;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- pval **pv_row;
- UDWORD crow;
- UWORD RowStatus[1];
- SDWORD rownum = -1;
-#endif /* HAVE_SQL_EXTENDED_FETCH */
-
- numArgs = ZEND_NUM_ARGS();
-
- switch(numArgs) {
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_res_arr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- case 3:
- if (zend_get_parameters_ex(3, &pv_res, &pv_res_arr, &pv_row) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- SEPARATE_ZVAL(pv_row);
- convert_to_long_ex(pv_row);
- rownum = Z_LVAL_PP(pv_row);
- break;
-#endif /* HAVE_SQL_EXTENDED_FETCH */
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(pv_res_arr) != IS_ARRAY) {
- if (array_init(*pv_res_arr) == FAILURE) {
- php_error(E_WARNING, "Can't convert to type Array");
- RETURN_FALSE;
- }
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs) {
- if (rownum > 0)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus);
- else
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- } else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
- RETURN_FALSE;
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (rownum > 0 && result->fetch_abs)
- result->fetched = rownum;
- else
-#endif
- result->fetched++;
-
- for(i = 0; i < result->numcols; i++) {
- ALLOC_ZVAL(tmp);
- tmp->refcount = 1;
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
- sql_c_type = SQL_C_CHAR;
-
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 0) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- }
- if (result->binmode == 1) sql_c_type = SQL_C_BINARY;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[i].coltype) && result->longreadlen <= 0) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- }
-
- if (buf == NULL) buf = emalloc(result->longreadlen + 1);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type,
- buf, result->longreadlen + 1, &result->values[i].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(buf);
- RETURN_FALSE;
- }
- if (rc == SQL_SUCCESS_WITH_INFO) {
- Z_STRLEN_P(tmp) = result->longreadlen;
- } else if (result->values[i].vallen == SQL_NULL_DATA) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- } else {
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- }
- Z_STRVAL_P(tmp) = estrndup(buf, Z_STRLEN_P(tmp));
- break;
-
- default:
- if (result->values[i].vallen == SQL_NULL_DATA) {
- Z_STRVAL_P(tmp) = empty_string;
- break;
- }
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- Z_STRVAL_P(tmp) = estrndup(result->values[i].value,Z_STRLEN_P(tmp));
- break;
- }
- zend_hash_index_update(Z_ARRVAL_PP(pv_res_arr), i, &tmp, sizeof(pval *), NULL);
- }
- if (buf) efree(buf);
- RETURN_LONG(result->numcols);
-}
-/* }}} */
-
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35)
-PHP_FUNCTION(solid_fetch_prev)
-{
- odbc_result *result;
- RETCODE rc;
- pval **pv_res;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
- rc = SQLFetchPrev(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- if (result->fetched > 1) result->fetched--;
-
- RETURN_TRUE;
-}
-#endif
-
-/* {{{ proto int odbc_fetch_row(int result_id [, int row_number])
- Fetch a row */
-PHP_FUNCTION(odbc_fetch_row)
-{
- int numArgs;
- SDWORD rownum = 1;
- odbc_result *result;
- RETCODE rc;
- pval **pv_res, **pv_row;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
-#endif
-
- numArgs = ZEND_NUM_ARGS();
- switch (numArgs) {
- case 1:
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_row) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(pv_row);
- rownum = Z_LVAL_PP(pv_row);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs) {
- if (numArgs > 1)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus);
- else
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- } else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- if (numArgs > 1) {
- result->fetched = rownum;
- } else {
- result->fetched++;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string odbc_result(int result_id, mixed field)
- Get result data */
-PHP_FUNCTION(odbc_result)
-{
- char *field;
- int field_ind;
- SWORD sql_c_type = SQL_C_CHAR;
- odbc_result *result;
- int i = 0;
- RETCODE rc;
- SDWORD fieldsize;
- pval **pv_res, **pv_field;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
-#endif
-
- field_ind = -1;
- field = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2 , &pv_res, &pv_field) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(pv_field) == IS_STRING) {
- field = Z_STRVAL_PP(pv_field);
- } else {
- convert_to_long_ex(pv_field);
- field_ind = Z_LVAL_PP(pv_field) - 1;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if ((result->numcols == 0)) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- /* get field index if the field parameter was a string */
- if (field != NULL) {
- for(i = 0; i < result->numcols; i++) {
- if (!strcasecmp(result->values[i].name, field)) {
- field_ind = i;
- break;
- }
- }
-
- if (field_ind < 0) {
- php_error(E_WARNING, "Field %s not found", field);
- RETURN_FALSE;
- }
- } else {
- /* check for limits of field_ind if the field parameter was an int */
- if (field_ind >= result->numcols || field_ind < 0) {
- php_error(E_WARNING, "Field index is larger than the number of fields");
- RETURN_FALSE;
- }
- }
-
- if (result->fetched == 0) {
- /* User forgot to call odbc_fetch_row(), or wants to reload the results, do it now */
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs)
- rc = SQLExtendedFetch(result->stmt, SQL_FETCH_NEXT, 1, &crow,RowStatus);
- else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
- RETURN_FALSE;
-
- result->fetched++;
- }
-
- switch(result->values[field_ind].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 1) sql_c_type = SQL_C_BINARY;
- if (result->binmode <= 0) break;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[field_ind].coltype)) {
- if (result->longreadlen <= 0)
- break;
- else
- fieldsize = result->longreadlen;
- } else {
- SQLColAttributes(result->stmt, (UWORD)(field_ind + 1),
- (UWORD)((sql_c_type == SQL_C_BINARY) ? SQL_COLUMN_LENGTH :
- SQL_COLUMN_DISPLAY_SIZE),
- NULL, 0, NULL, &fieldsize);
- }
- /* For char data, the length of the returned string will be longreadlen - 1 */
- fieldsize = (result->longreadlen <= 0) ? 4096 : result->longreadlen;
- field = emalloc(fieldsize);
- if (!field) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- /* SQLGetData will truncate CHAR data to fieldsize - 1 bytes and append \0.
- * For binary data it is truncated to fieldsize bytes.
- */
- rc = SQLGetData(result->stmt, (UWORD)(field_ind + 1), sql_c_type,
- field, fieldsize, &result->values[field_ind].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(field);
- RETURN_FALSE;
- }
-
- if (result->values[field_ind].vallen == SQL_NULL_DATA || rc == SQL_NO_DATA_FOUND) {
- efree(field);
- RETURN_FALSE;
- }
- /* Reduce fieldlen by 1 if we have char data. One day we might
- have binary strings... */
- if (result->values[field_ind].coltype == SQL_LONGVARCHAR) fieldsize -= 1;
- /* Don't duplicate result, saves one emalloc.
- For SQL_SUCCESS, the length is in vallen.
- */
- RETURN_STRINGL(field, (rc == SQL_SUCCESS_WITH_INFO) ? fieldsize :
- result->values[field_ind].vallen, 0);
- break;
-
- default:
- if (result->values[field_ind].vallen == SQL_NULL_DATA) {
- RETURN_FALSE;
- } else {
- RETURN_STRINGL(result->values[field_ind].value, result->values[field_ind].vallen, 1);
- }
- break;
- }
-
-/* If we come here, output unbound LONG and/or BINARY column data to the client */
-
- /* We emalloc 1 byte more for SQL_C_CHAR (trailing \0) */
- fieldsize = (sql_c_type == SQL_C_CHAR) ? 4096 : 4095;
- if ((field = emalloc(fieldsize)) == NULL) {
- php_error(E_WARNING,"Out of memory");
- RETURN_FALSE;
- }
-
- /* Call SQLGetData() until SQL_SUCCESS is returned */
- while(1) {
- rc = SQLGetData(result->stmt, (UWORD)(field_ind + 1),sql_c_type,
- field, fieldsize, &result->values[field_ind].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(field);
- RETURN_FALSE;
- }
-
- if (result->values[field_ind].vallen == SQL_NULL_DATA) {
- efree(field);
- RETURN_FALSE;
- }
- /* chop the trailing \0 by outputing only 4095 bytes */
- PHPWRITE(field,(rc == SQL_SUCCESS_WITH_INFO) ? 4095 :
- result->values[field_ind].vallen);
-
- if (rc == SQL_SUCCESS) { /* no more data avail */
- efree(field);
- RETURN_TRUE;
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int odbc_result_all(int result_id [, string format])
- Print result as HTML table */
-PHP_FUNCTION(odbc_result_all)
-{
- char *buf = NULL;
- int i, numArgs;
- odbc_result *result;
- RETCODE rc;
- pval **pv_res, **pv_format;
- SWORD sql_c_type;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
-#endif
-
- numArgs = ZEND_NUM_ARGS();
- if (numArgs == 1) {
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- if (zend_get_parameters_ex(2, &pv_res, &pv_format) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- php_printf("<h2>No rows found</h2>\n");
- RETURN_LONG(0);
- }
-
- /* Start table tag */
- if (numArgs == 1) {
- php_printf("<table><tr>");
- } else {
- convert_to_string_ex(pv_format);
- php_printf("<table %s ><tr>",Z_STRVAL_PP(pv_format));
- }
-
- for(i = 0; i < result->numcols; i++)
- php_printf("<th>%s</th>", result->values[i].name);
-
- php_printf("</tr>\n");
-
- while(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- result->fetched++;
- php_printf("<tr>");
- for(i = 0; i < result->numcols; i++) {
- sql_c_type = SQL_C_CHAR;
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 0) {
- php_printf("<td>Not printable</td>");
- break;
- }
- if (result->binmode <= 1) sql_c_type = SQL_C_BINARY;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[i].coltype) &&
- result->longreadlen <= 0) {
- php_printf("<td>Not printable</td>");
- break;
- }
-
- if (buf == NULL) buf = emalloc(result->longreadlen);
-
- rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type,
- buf, result->longreadlen, &result->values[i].vallen);
-
- php_printf("<td>");
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- php_printf("</td></tr></table>");
- efree(buf);
- RETURN_FALSE;
- }
- if (rc == SQL_SUCCESS_WITH_INFO)
- php_printf(buf,result->longreadlen);
- else if (result->values[i].vallen == SQL_NULL_DATA) {
- php_printf("&nbsp;</td>");
- break;
- } else {
- php_printf(buf, result->values[i].vallen);
- }
- php_printf("</td>");
- break;
- default:
- if (result->values[i].vallen == SQL_NULL_DATA) {
- php_printf("<td>&nbsp;</td>");
- } else {
- php_printf("<td>%s</td>", result->values[i].value);
- }
- break;
- }
- }
- php_printf("</tr>\n");
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- else
-#endif
- rc = SQLFetch(result->stmt);
- }
- php_printf("</table>\n");
- if (buf) efree(buf);
- RETURN_LONG(result->fetched);
-}
-/* }}} */
-
-/* {{{ proto int odbc_free_result(int result_id)
- Free resources associated with a result */
-PHP_FUNCTION(odbc_free_result)
-{
- pval **pv_res;
- odbc_result *result;
- int i;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- if (result->values) {
- for (i = 0; i < result->numcols; i++) {
- if (result->values[i].value) {
- efree(result->values[i].value);
- }
- }
- efree(result->values);
- result->values = NULL;
- }
-
- zend_list_delete(result->id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int odbc_connect(string DSN, string user, string password [, int cursor_option])
- Connect to a datasource */
-PHP_FUNCTION(odbc_connect)
-{
- odbc_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int odbc_pconnect(string DSN, string user, string password [, int cursor_option])
- Establish a persistent connection to a datasource */
-PHP_FUNCTION(odbc_pconnect)
-{
- odbc_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int cur_opt, int persistent TSRMLS_DC)
-{
- RETCODE rc;
-
- *conn = (odbc_connection *)pemalloc(sizeof(odbc_connection), persistent);
- (*conn)->persistent = persistent;
- SQLAllocEnv(&((*conn)->henv));
- SQLAllocConnect((*conn)->henv, &((*conn)->hdbc));
-
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30)
- SQLSetConnectOption((*conn)->hdbc, SQL_TRANSLATE_OPTION,
- SQL_SOLID_XLATOPT_NOCNV);
-#endif
-#ifdef HAVE_OPENLINK
- {
- char dsnbuf[300];
- short dsnbuflen;
-
- rc = SQLDriverConnect((*conn)->hdbc, NULL, db, SQL_NTS,
- dsnbuf, sizeof(dsnbuf) - 1, &dsnbuflen,
- SQL_DRIVER_NOPROMPT);
- }
-#else
- if (cur_opt != SQL_CUR_DEFAULT) {
- rc = SQLSetConnectOption((*conn)->hdbc, SQL_ODBC_CURSORS, cur_opt);
- if (rc != SQL_SUCCESS) { /* && rc != SQL_SUCCESS_WITH_INFO ? */
- odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLSetConnectOption");
- SQLFreeConnect((*conn)->hdbc);
- pefree(*conn, persistent);
- return FALSE;
- }
- }
-/* Possible fix for bug #10250
- * Needs testing on UnixODBC < 2.0.5 though. */
-#if defined(HAVE_EMPRESS) || defined(HAVE_UNIXODBC)
-/* * Uncomment the line above, and comment line below to fully test
- * #ifdef HAVE_EMPRESS */
- {
- int direct = 0;
- char dsnbuf[300];
- short dsnbuflen;
- char *ldb = 0;
- int ldb_len = 0;
-
- if (strstr((char*)db, ";")) {
- direct = 1;
- if (uid && !strstr ((char*)db, "uid") && !strstr((char*)db, "UID")) {
- ldb = (char*) emalloc(strlen(db) + strlen(uid) + strlen(pwd) + 12);
- sprintf(ldb, "%s;UID=%s;PWD=%s", db, uid, pwd);
- } else {
- ldb_len = strlen(db)+1;
- ldb = (char*) emalloc(ldb_len);
- memcpy(ldb, db, ldb_len);
- }
- }
-
- if (direct)
- rc = SQLDriverConnect((*conn)->hdbc, NULL, ldb, strlen(ldb), dsnbuf, 300,
- &dsnbuflen, SQL_DRIVER_NOPROMPT);
- else
- rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);
- if (ldb)
- efree(ldb);
- }
-#else
- rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);
-#endif
-#endif
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLConnect");
- SQLFreeConnect((*conn)->hdbc);
- pefree((*conn), persistent);
- return FALSE;
- }
-/* (*conn)->open = 1;*/
- return TRUE;
-}
-/* Persistent connections: two list-types le_pconn, le_conn and a plist
- * where hashed connection info is stored together with index pointer to
- * the actual link of type le_pconn in the list. Only persistent
- * connections get hashed up. Normal connections use existing pconnections.
- * Maybe this has to change with regard to transactions on pconnections?
- * Possibly set autocommit to on on request shutdown.
- *
- * We do have to hash non-persistent connections, and reuse connections.
- * In the case where two connects were being made, without closing the first
- * connect, access violations were occuring. This is because some of the
- * "globals" in this module should actualy be per-connection variables. I
- * simply fixed things to get them working for now. Shane
- */
-void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *db = NULL;
- char *uid = NULL;
- char *pwd = NULL;
- pval **pv_db, **pv_uid, **pv_pwd, **pv_opt;
- odbc_connection *db_conn;
- char *hashed_details;
- int hashed_len, len, cur_opt;
-
- /* Now an optional 4th parameter specifying the cursor type
- * defaulting to the cursors default
- */
- switch(ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &pv_db, &pv_uid, &pv_pwd) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* Use Default: Probably a better way to do this */
- cur_opt = SQL_CUR_DEFAULT;
- break;
- case 4:
- if (zend_get_parameters_ex(4, &pv_db, &pv_uid, &pv_pwd, &pv_opt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_opt);
- cur_opt = Z_LVAL_PP(pv_opt);
-
- /* Confirm the cur_opt range */
- if (! (cur_opt == SQL_CUR_USE_IF_NEEDED ||
- cur_opt == SQL_CUR_USE_ODBC ||
- cur_opt == SQL_CUR_USE_DRIVER ||
- cur_opt == SQL_CUR_DEFAULT) ) {
- php_error(E_WARNING, "odbc: Invalid Cursor type (%d)", cur_opt);
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(pv_db);
- convert_to_string_ex(pv_uid);
- convert_to_string_ex(pv_pwd);
-
- db = Z_STRVAL_PP(pv_db);
- uid = Z_STRVAL_PP(pv_uid);
- pwd = Z_STRVAL_PP(pv_pwd);
-
- if (ODBCG(allow_persistent) <= 0) {
- persistent = 0;
- }
-
- len = strlen(db) + strlen(uid) + strlen(pwd) + sizeof(ODBC_TYPE) + 5;
- hashed_details = emalloc(len);
-
- if (hashed_details == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- hashed_len = sprintf(hashed_details, "%s_%s_%s_%s_%d", ODBC_TYPE, db, uid, pwd, cur_opt);
-
- /* FIXME the idea of checking to see if our connection is already persistent
- is good, but it adds a lot of overhead to non-persistent connections. We
- should look and see if we can fix that somehow */
- /* try to find if we already have this link in our persistent list,
- * no matter if it is to be persistent or not
- */
-
-try_and_get_another_connection:
-
- if (persistent) {
- list_entry *le;
-
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_len + 1, (void **) &le)
- == FAILURE) { /* the link is not in the persistent list */
- list_entry new_le;
-
- if (ODBCG(max_links) != -1 && ODBCG(num_links) >= ODBCG(max_links)) {
- php_error(E_WARNING, "odbc: Too many open links (%d)", ODBCG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (ODBCG(max_persistent) != -1 && ODBCG(num_persistent) >= ODBCG(max_persistent)) {
- php_error(E_WARNING,"odbc: Too many open persistent links (%d)", ODBCG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (!odbc_sqlconnect(&db_conn, db, uid, pwd, cur_opt, 1 TSRMLS_CC)) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- Z_TYPE(new_le) = le_pconn;
- new_le.ptr = db_conn;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_len + 1, &new_le,
- sizeof(list_entry), NULL) == FAILURE) {
- free(db_conn);
- efree(hashed_details);
- RETURN_FALSE;
- }
- ODBCG(num_persistent)++;
- ODBCG(num_links)++;
- db_conn->id = ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
- } else { /* found connection */
- if (Z_TYPE_P(le) != le_pconn) {
- RETURN_FALSE;
- }
- /*
- * check to see if the connection is still valid
- */
- db_conn = (odbc_connection *)le->ptr;
-
- /*
- * check to see if the connection is still in place (lurcher)
- */
- if(ODBCG(check_persistent)){
- RETCODE ret;
- UCHAR d_name[32];
- SWORD len;
-
- ret = SQLGetInfo(db_conn->hdbc,
- SQL_DATA_SOURCE_READ_ONLY,
- d_name, sizeof(d_name), &len);
-
- if(ret != SQL_SUCCESS || len == 0) {
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_len + 1);
- /* Commented out to fix a possible double closure error
- * when working with persistent connections as submitted by
- * bug #15758
- *
- * safe_odbc_disconnect(db_conn->hdbc);
- * SQLFreeConnect(db_conn->hdbc);
- */
- goto try_and_get_another_connection;
- }
- }
- }
- db_conn->id = ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_len + 1,
- (void **) &index_ptr) == SUCCESS) {
- int type, conn_id;
- void *ptr;
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- conn_id = (int)index_ptr->ptr;
- ptr = zend_list_find(conn_id, &type); /* check if the connection is still there */
- if (ptr && (type == le_conn || type == le_pconn)) {
- zend_list_addref(conn_id);
- Z_LVAL_P(return_value) = conn_id;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_len + 1);
- }
- }
- if (ODBCG(max_links) != -1 && ODBCG(num_links) >= ODBCG(max_links)) {
- php_error(E_WARNING,"ODBC: Too many open connections (%d)",ODBCG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (!odbc_sqlconnect(&db_conn, db, uid, pwd, cur_opt, 0 TSRMLS_CC)) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- db_conn->id = ZEND_REGISTER_RESOURCE(return_value, db_conn, le_conn);
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_len + 1, (void *) &new_index_ptr,
- sizeof(list_entry), NULL) == FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- /* XXX Free Connection */
- }
- ODBCG(num_links)++;
- }
- efree(hashed_details);
-}
-
-/* {{{ proto void odbc_close(int connection_id)
- Close an ODBC connection */
-PHP_FUNCTION(odbc_close)
-{
- pval **pv_conn;
- void *ptr;
- odbc_connection *conn;
- odbc_result *res;
- int nument;
- int i;
- int type;
- int is_pconn = 0;
- int found_resource_type = le_conn;
-
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- conn = (odbc_connection *) zend_fetch_resource(pv_conn TSRMLS_CC, -1, "ODBC-Link", &found_resource_type, 2, le_conn, le_pconn);
- if (found_resource_type==le_pconn) {
- is_pconn = 1;
- }
-
- nument = zend_hash_next_free_element(&EG(regular_list));
-
- for(i = 1; i < nument; i++){
- ptr = zend_list_find(i, &type);
- if(ptr && (type == le_result)){
- res = (odbc_result *)ptr;
- if(res->conn_ptr == conn){
- zend_list_delete(i);
- }
- }
- }
-
- zend_list_delete(Z_LVAL_PP(pv_conn));
-
- if(is_pconn){
- zend_hash_apply_with_argument(&EG(persistent_list),
- (apply_func_arg_t) _close_pconn_with_id, (void *) &(Z_LVAL_PP(pv_conn)) TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto int odbc_num_rows(int result_id)
- Get number of rows in a result */
-PHP_FUNCTION(odbc_num_rows)
-{
- odbc_result *result;
- SDWORD rows;
- pval **pv_res;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- SQLRowCount(result->stmt, &rows);
- RETURN_LONG(rows);
-}
-/* }}} */
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
-/* {{{ proto bool odbc_next_result(int result_id)
- Checks if multiple results are avaiable */
-PHP_FUNCTION(odbc_next_result)
-{
- odbc_result *result;
- pval **pv_res;
- int rc, i;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->values) {
- for(i = 0; i < result->numcols; i++) {
- if (result->values[i].value)
- efree(result->values[i].value);
- }
- efree(result->values);
- result->values = NULL;
- }
-
- result->fetched = 0;
- rc = SQLMoreResults(result->stmt);
- if (rc == SQL_SUCCESS) {
- RETURN_TRUE;
- }
- else if (rc == SQL_SUCCESS_WITH_INFO) {
- rc = SQLFreeStmt(result->stmt, SQL_UNBIND);
- SQLNumParams(result->stmt, &(result->numparams));
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETVAL_FALSE;
- }
- } else {
- result->values = NULL;
- }
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto int odbc_num_fields(int result_id)
- Get number of columns in a result */
-PHP_FUNCTION(odbc_num_fields)
-{
- odbc_result *result;
- pval **pv_res;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- RETURN_LONG(result->numcols);
-}
-/* }}} */
-
-/* {{{ proto string odbc_field_name(int result_id, int field_number)
- Get a column name */
-PHP_FUNCTION(odbc_field_name)
-{
- odbc_result *result;
- pval **pv_res, **pv_num;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_num);
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) > result->numcols) {
- php_error(E_WARNING, "Field index larger than number of fields");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) < 1) {
- php_error(E_WARNING, "Field numbering starts at 1");
- RETURN_FALSE;
- }
-
- RETURN_STRING(result->values[Z_LVAL_PP(pv_num) - 1].name, 1)
-}
-/* }}} */
-
-/* {{{ proto string odbc_field_type(int result_id, int field_number)
- Get the datatype of a column */
-PHP_FUNCTION(odbc_field_type)
-{
- odbc_result *result;
- char tmp[32];
- SWORD tmplen;
- pval **pv_res, **pv_num;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_num);
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) > result->numcols) {
- php_error(E_WARNING, "Field index larger than number of fields");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) < 1) {
- php_error(E_WARNING, "Field numbering starts at 1");
- RETURN_FALSE;
- }
-
- SQLColAttributes(result->stmt, (UWORD)Z_LVAL_PP(pv_num),
- SQL_COLUMN_TYPE_NAME, tmp, 31, &tmplen, NULL);
- RETURN_STRING(tmp,1)
-}
-/* }}} */
-
-/* {{{ proto int odbc_field_len(int result_id, int field_number)
- Get the length (precision) of a column */
-PHP_FUNCTION(odbc_field_len)
-{
- odbc_column_lengths(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int odbc_field_scale(int result_id, int field_number)
- Get the scale of a column */
-PHP_FUNCTION(odbc_field_scale)
-{
- odbc_column_lengths(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int odbc_field_num(int result_id, string field_name)
- Return column number */
-PHP_FUNCTION(odbc_field_num)
-{
- int field_ind;
- char *fname;
- odbc_result *result;
- int i;
- pval **pv_res, **pv_name;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error(E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(pv_name);
- fname = Z_STRVAL_PP(pv_name);
-
- field_ind = -1;
- for(i = 0; i < result->numcols; i++) {
- if (strcasecmp(result->values[i].name, fname) == 0)
- field_ind = i + 1;
- }
-
- if (field_ind == -1)
- RETURN_FALSE;
- RETURN_LONG(field_ind);
-}
-/* }}} */
-
-/* {{{ proto int odbc_autocommit(int connection_id [, int OnOff])
- Toggle autocommit mode or get status */
-/* There can be problems with pconnections!*/
-PHP_FUNCTION(odbc_autocommit)
-{
- odbc_connection *conn;
- RETCODE rc;
- pval **pv_conn, **pv_onoff = NULL;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 2) {
- if (zend_get_parameters_ex(2, &pv_conn, &pv_onoff) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- if (pv_onoff && (*pv_onoff)) {
- convert_to_long_ex(pv_onoff);
- rc = SQLSetConnectOption(conn->hdbc, SQL_AUTOCOMMIT,
- (Z_LVAL_PP(pv_onoff)) ?
- SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "Set autocommit");
- RETURN_FALSE;
- }
- RETVAL_TRUE;
- } else {
- SDWORD status;
-
- rc = SQLGetConnectOption(conn->hdbc, SQL_AUTOCOMMIT, (PTR)&status);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "Get commit status");
- RETURN_FALSE;
- }
- RETVAL_LONG((long)status);
- }
-}
-/* }}} */
-
-/* {{{ proto int odbc_commit(int connection_id)
- Commit an ODBC transaction */
-PHP_FUNCTION(odbc_commit)
-{
- odbc_transact(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int odbc_rollback(int connection_id)
- Rollback a transaction */
-PHP_FUNCTION(odbc_rollback)
-{
- odbc_transact(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-static void php_odbc_lasterror(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- odbc_connection *conn;
- pval **pv_handle;
- char *ptr;
- int argc, len;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc > 1 || zend_get_parameters_ex(argc, &pv_handle)) {
- WRONG_PARAM_COUNT;
- }
-
- if (mode == 0) { /* last state */
- len = 6;
- } else { /* last error message */
- len = SQL_MAX_MESSAGE_LENGTH;
- }
- ptr = ecalloc(len + 1, 1);
- if (argc == 1) {
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_handle, -1, "ODBC-Link", le_conn, le_pconn);
- if (mode == 0) {
- strlcpy(ptr, conn->laststate, len+1);
- } else {
- strlcpy(ptr, conn->lasterrormsg, len+1);
- }
- } else {
- if (mode == 0) {
- strlcpy(ptr, ODBCG(laststate), len+1);
- } else {
- strlcpy(ptr, ODBCG(lasterrormsg), len+1);
- }
- }
- RETVAL_STRING(ptr, 0);
-}
-
-/* {{{ proto string odbc_error([int connection_id])
- Get the last error code */
-PHP_FUNCTION(odbc_error)
-{
- php_odbc_lasterror(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string odbc_errormsg([int connection_id])
- Get the last error message */
-PHP_FUNCTION(odbc_errormsg)
-{
- php_odbc_lasterror(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int odbc_setoption(int conn_id|result_id, int which, int option, int value)
- Sets connection or statement options */
-/* This one has to be used carefully. We can't allow to set connection options for
- persistent connections. I think that SetStmtOption is of little use, since most
- of those can only be specified before preparing/executing statements.
- On the other hand, they can be made connection wide default through SetConnectOption
- - but will be overidden by calls to SetStmtOption() in odbc_prepare/odbc_do
-*/
-PHP_FUNCTION(odbc_setoption)
-{
- odbc_connection *conn;
- odbc_result *result;
- RETCODE rc;
- pval **pv_handle, **pv_which, **pv_opt, **pv_val;
-
- if (zend_get_parameters_ex(4, &pv_handle, &pv_which, &pv_opt, &pv_val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_which);
- convert_to_long_ex(pv_opt);
- convert_to_long_ex(pv_val);
-
- switch (Z_LVAL_PP(pv_which)) {
- case 1: /* SQLSetConnectOption */
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_handle, -1, "ODBC-Link", le_conn, le_pconn);
- if (conn->persistent) {
- php_error(E_WARNING, "Can't set option for persistent connection");
- RETURN_FALSE;
- }
- rc = SQLSetConnectOption(conn->hdbc, (unsigned short)(Z_LVAL_PP(pv_opt)), Z_LVAL_PP(pv_val));
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SetConnectOption");
- RETURN_FALSE;
- }
- break;
- case 2: /* SQLSetStmtOption */
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_handle, -1, "ODBC result", le_result);
-
- rc = SQLSetStmtOption(result->stmt, (unsigned short)(Z_LVAL_PP(pv_opt)), (Z_LVAL_PP(pv_val)));
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SetStmtOption");
- RETURN_FALSE;
- }
- break;
- default:
- php_error(E_WARNING, "Unknown option type");
- RETURN_FALSE;
- break;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- * metadata functions
- */
-
-/* {{{ proto int odbc_tables(int connection_id [, string qualifier, string owner, string name, string table_types])
- Call the SQLTables function */
-PHP_FUNCTION(odbc_tables)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_type;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL, *type = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 5 || zend_get_parameters_ex(argc, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (argc) {
- case 5:
- convert_to_string_ex(pv_type);
- type = Z_STRVAL_PP(pv_type);
- case 4:
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- case 3:
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- case 2:
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_tables");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- /* This hack is needed to access table information in Access databases (fmk) */
- if (table && strlen(table) && schema && !strlen(schema)) schema = NULL;
-
- rc = SQLTables(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table),
- type, SAFE_SQL_NTS(type));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTables");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto int odbc_columns(int connection_id, string qualifier, string owner, string table_name, string column_name)
- Returns a result identifier that can be used to fetch a list of column names in specified tables */
-PHP_FUNCTION(odbc_columns)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_column;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL, *column = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 5 || zend_get_parameters_ex(argc, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_column) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (argc) {
- case 5:
- convert_to_string_ex(pv_column);
- column = Z_STRVAL_PP(pv_column);
- case 4:
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- case 3:
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- case 2:
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_columns");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLColumns(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table),
- column, SAFE_SQL_NTS(column));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumns");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)
-/* {{{ proto int odbc_columnprivileges(int connection_id, string catalog, string schema, string table, string column)
- Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table */
-PHP_FUNCTION(odbc_columnprivileges)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_column;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL, *column = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 5) {
- if (zend_get_parameters_ex(5, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_column) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- convert_to_string_ex(pv_column);
- column = Z_STRVAL_PP(pv_column);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_columnprivileges");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLColumnPrivileges(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table),
- column, SAFE_SQL_NTS(column));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumnPrivileges");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_DBMAKER || HAVE_SOLID*/
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
-/* {{{ proto int odbc_foreignkeys(int connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)
- Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table */
-PHP_FUNCTION(odbc_foreignkeys)
-{
- pval **pv_conn, **pv_pcat, **pv_pschema, **pv_ptable;
- pval **pv_fcat, **pv_fschema, **pv_ftable;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *pcat = NULL, *pschema = NULL, *ptable = NULL;
- char *fcat = NULL, *fschema = NULL, *ftable = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 7) {
- if (zend_get_parameters_ex(7, &pv_conn, &pv_pcat, &pv_pschema, &pv_ptable,
- &pv_fcat, &pv_fschema, &pv_ftable) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_pcat);
- pcat = Z_STRVAL_PP(pv_pcat);
- convert_to_string_ex(pv_pschema);
- pschema = Z_STRVAL_PP(pv_pschema);
- convert_to_string_ex(pv_ptable);
- ptable = Z_STRVAL_PP(pv_ptable);
- convert_to_string_ex(pv_fcat);
- fcat = Z_STRVAL_PP(pv_fcat);
- convert_to_string_ex(pv_fschema);
- fschema = Z_STRVAL_PP(pv_fschema);
- convert_to_string_ex(pv_ftable);
- ftable = Z_STRVAL_PP(pv_ftable);
-#ifdef HAVE_DBMAKER
-#define EMPTY_TO_NULL(xstr) \
- if ((int)strlen((xstr)) == 0) (xstr) = NULL
-
- EMPTY_TO_NULL(pcat);
- EMPTY_TO_NULL(pschema);
- EMPTY_TO_NULL(ptable);
- EMPTY_TO_NULL(fcat);
- EMPTY_TO_NULL(fschema);
- EMPTY_TO_NULL(ftable);
-#endif
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_foreignkeys");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLForeignKeys(result->stmt,
- pcat, SAFE_SQL_NTS(pcat),
- pschema, SAFE_SQL_NTS(pschema),
- ptable, SAFE_SQL_NTS(ptable),
- fcat, SAFE_SQL_NTS(fcat),
- fschema, SAFE_SQL_NTS(fschema),
- ftable, SAFE_SQL_NTS(ftable) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLForeignKeys");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_SOLID */
-
-/* {{{ proto int odbc_gettypeinfo(int connection_id [, int data_type])
- Returns a result identifier containing information about data types supported by the data source */
-PHP_FUNCTION(odbc_gettypeinfo)
-{
- pval **pv_conn, **pv_data_type;
- odbc_result *result = NULL;
- odbc_connection *conn;
- RETCODE rc;
- int argc;
- SWORD data_type = SQL_ALL_TYPES;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 2) {
- if (zend_get_parameters_ex(2, &pv_conn, &pv_data_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_data_type);
- data_type = (SWORD) Z_LVAL_PP(pv_data_type);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_gettypeinfo");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLGetTypeInfo(result->stmt, data_type );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLGetTypeInfo");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto int odbc_primarykeys(int connection_id, string qualifier, string owner, string table)
- Returns a result identifier listing the column names that comprise the primary key for a table */
-PHP_FUNCTION(odbc_primarykeys)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 4) {
- if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_table) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_primarykeys");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLPrimaryKeys(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLPrimaryKeys");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)
-/* {{{ proto int odbc_procedurecolumns(int connection_id [, string qualifier, string owner, string proc, string column])
- Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures */
-PHP_FUNCTION(odbc_procedurecolumns)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_proc, **pv_col;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *proc = NULL, *col = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 5) {
- if (zend_get_parameters_ex(5, &pv_conn, &pv_cat, &pv_schema, &pv_proc, &pv_col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_proc);
- proc = Z_STRVAL_PP(pv_proc);
- convert_to_string_ex(pv_col);
- col = Z_STRVAL_PP(pv_col);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_procedurecolumns");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLProcedureColumns(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- proc, SAFE_SQL_NTS(proc),
- col, SAFE_SQL_NTS(col) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedureColumns");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_SOLID */
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
-/* {{{ proto int odbc_procedures(int connection_id [, string qualifier, string owner, string name])
- Returns a result identifier containg the list of procedure names in a datasource */
-PHP_FUNCTION(odbc_procedures)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_proc;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *proc = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 4) {
- if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_proc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_proc);
- proc = Z_STRVAL_PP(pv_proc);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_procedures");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLProcedures(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- proc, SAFE_SQL_NTS(proc) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedures");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_SOLID */
-
-/* {{{ proto int odbc_specialcolumns(int connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)
- Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction */
-PHP_FUNCTION(odbc_specialcolumns)
-{
- pval **pv_conn, **pv_type, **pv_cat, **pv_schema, **pv_name;
- pval **pv_scope, **pv_nullable;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *name = NULL;
- UWORD type;
- UWORD scope, nullable;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 7) {
- if (zend_get_parameters_ex(7, &pv_conn, &pv_type, &pv_cat, &pv_schema,
- &pv_name, &pv_scope, &pv_nullable) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_type);
- type = (UWORD) Z_LVAL_PP(pv_type);
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_name);
- name = Z_STRVAL_PP(pv_name);
- convert_to_long_ex(pv_scope);
- scope = (UWORD) Z_LVAL_PP(pv_scope);
- convert_to_long_ex(pv_nullable);
- nullable = (UWORD) Z_LVAL_PP(pv_nullable);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_specialcolumns");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLSpecialColumns(result->stmt,
- type,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- name, SAFE_SQL_NTS(name),
- scope,
- nullable);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLSpecialColumns");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto int odbc_statistics(int connection_id, string qualifier, string owner, string name, int unique, int accuracy)
- Returns a result identifier that contains statistics about a single table and the indexes associated with the table */
-PHP_FUNCTION(odbc_statistics)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_name;
- pval **pv_unique, **pv_reserved;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *name = NULL;
- UWORD unique, reserved;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 6) {
- if (zend_get_parameters_ex(6, &pv_conn, &pv_cat, &pv_schema,
- &pv_name, &pv_unique, &pv_reserved) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_name);
- name = Z_STRVAL_PP(pv_name);
- convert_to_long_ex(pv_unique);
- unique = (UWORD) Z_LVAL_PP(pv_unique);
- convert_to_long_ex(pv_reserved);
- reserved = (UWORD) Z_LVAL_PP(pv_reserved);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_statistics");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLStatistics(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- name, SAFE_SQL_NTS(name),
- unique,
- reserved);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLStatistics");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)
-/* {{{ proto int odbc_tableprivileges(int connection_id, string qualifier, string owner, string name)
- Returns a result identifier containing a list of tables and the privileges associated with each table */
-PHP_FUNCTION(odbc_tableprivileges)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 4) {
- if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_table) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)emalloc(sizeof(odbc_result));
- if (result == NULL) {
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error(E_WARNING, "SQLAllocStmt error 'Invalid Handle' in odbc_tableprivileges");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLTablePrivileges(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTablePrivileges");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_DBMAKER */
-
-#endif /* HAVE_UODBC */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/odbc/php_odbc.h b/ext/odbc/php_odbc.h
deleted file mode 100644
index ee1c135c12..0000000000
--- a/ext/odbc/php_odbc.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Kevin N. Shallow <kshallow@tampabay.rr.com> Birdstep Support |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ODBC_H
-#define PHP_ODBC_H
-
-#if HAVE_UODBC
-#define ODBCVER 0x0250
-/*#ifndef MSVC5
-#define FAR
-#endif
-*/
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-/* checking in the same order as in configure.in */
-
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35) /* Solid Server */
-
-#define ODBC_TYPE "Solid"
-#if defined(HAVE_SOLID)
-# include <cli0core.h>
-# include <cli0ext1.h>
-# include <cli0env.h>
-#elif defined(HAVE_SOLID_30)
-# include <cli0cli.h>
-# include <cli0defs.h>
-# include <cli0env.h>
-#elif defined(HAVE_SOLID_35)
-# if !defined(PHP_WIN32)
-# include <sqlunix.h>
-# endif /* end: #if !defined(PHP_WIN32) */
-# include <sqltypes.h>
-# include <sqlucode.h>
-# include <sqlext.h>
-# include <sql.h>
-#endif /* end: #if defined(HAVE_SOLID) */
-#undef HAVE_SQL_EXTENDED_FETCH
-PHP_FUNCTION(solid_fetch_prev);
-#define SQLSMALLINT SWORD
-#define SQLUSMALLINT UWORD
-#ifndef SQL_SUCCEEDED
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-#endif
-
-#elif defined(HAVE_EMPRESS) /* Empress */
-
-#define ODBC_TYPE "Empress"
-#include <sql.h>
-#include <sqlext.h>
-#undef HAVE_SQL_EXTENDED_FETCH
-
-#elif defined(HAVE_ADABAS) /* Adabas D */
-
-#define ODBC_TYPE "Adabas D"
-#include <WINDOWS.H>
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-#define SQLINTEGER ULONG
-#define SQLUSMALLINT USHORT
-
-#elif defined(HAVE_SAPDB) /* SAP DB */
-
-#define ODBC_TYPE "SAP DB"
-#include <WINDOWS.H>
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-
-#elif defined(HAVE_IODBC) /* iODBC library */
-
-#define ODBC_TYPE "iODBC"
-#include <isql.h>
-#include <isqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQL_FD_FETCH_ABSOLUTE 0x00000010L
-#define SQL_CURSOR_DYNAMIC 2UL
-#define SQL_NO_TOTAL (-4)
-#define SQL_SO_DYNAMIC 0x00000004L
-#define SQL_LEN_DATA_AT_EXEC_OFFSET (-100)
-#define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET)
-#ifndef SQL_SUCCEEDED
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-#endif
-
-#elif defined(HAVE_UNIXODBC) /* unixODBC library */
-
-#ifdef CHAR
-#undef CHAR
-#endif
-
-#ifdef SQLCHAR
-#undef SQLCHAR
-#endif
-
-#define ODBC_TYPE "unixODBC"
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-
-#elif defined(HAVE_ESOOB) /* Easysoft ODBC-ODBC Bridge library */
-
-#define ODBC_TYPE "ESOOB"
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-
-#elif defined(HAVE_OPENLINK) /* OpenLink ODBC drivers */
-
-#define ODBC_TYPE "Openlink"
-#include <iodbc.h>
-#include <isql.h>
-#include <isqlext.h>
-#include <udbcext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQLSMALLINT SWORD
-#define SQLUSMALLINT UWORD
-
-#elif defined(HAVE_BIRDSTEP) /* Raima Birdstep */
-
-#define ODBC_TYPE "Birdstep"
-#define UNIX
-/*
- * Extended Fetch in the Birdstep ODBC API is incapable of returning long varchar (memo) fields.
- * So the following line has been commented-out to accomadate. - KNS
- *
- * #define HAVE_SQL_EXTENDED_FETCH 1
- */
-#include <sql.h>
-#include <sqlext.h>
-#define SQLINTEGER SDWORD
-#define SQLSMALLINT SWORD
-#define SQLUSMALLINT UWORD
-
-
-#elif defined(HAVE_DBMAKER) /* DBMaker */
-
-#define ODBC_TYPE "DBMaker"
-#undef ODBCVER
-#define ODBCVER 0x0300
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <odbc.h>
-
-
-#elif defined(HAVE_CODBC) /* Custom ODBC */
-
-#define ODBC_TYPE "Custom ODBC"
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <odbc.h>
-
-#elif defined(HAVE_IBMDB2) /* DB2 CLI */
-
-#define ODBC_TYPE "IBM DB2 CLI"
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <sqlcli1.h>
-#ifdef DB268K
-/* Need to include ASLM for 68K applications */
-#include <LibraryManager.h>
-#endif
-
-#else /* MS ODBC */
-
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <WINDOWS.H>
-#include <sql.h>
-#include <sqlext.h>
-#endif
-
-extern zend_module_entry odbc_module_entry;
-#define odbc_module_ptr &odbc_module_entry
-
-
-/* user functions */
-PHP_MINIT_FUNCTION(odbc);
-PHP_MSHUTDOWN_FUNCTION(odbc);
-PHP_RINIT_FUNCTION(odbc);
-PHP_RSHUTDOWN_FUNCTION(odbc);
-PHP_MINFO_FUNCTION(odbc);
-
-PHP_FUNCTION(odbc_error);
-PHP_FUNCTION(odbc_errormsg);
-PHP_FUNCTION(odbc_setoption);
-PHP_FUNCTION(odbc_autocommit);
-PHP_FUNCTION(odbc_close);
-PHP_FUNCTION(odbc_close_all);
-PHP_FUNCTION(odbc_commit);
-PHP_FUNCTION(odbc_connect);
-PHP_FUNCTION(odbc_pconnect);
-PHP_FUNCTION(odbc_cursor);
-PHP_FUNCTION(odbc_exec);
-PHP_FUNCTION(odbc_do);
-PHP_FUNCTION(odbc_execute);
-#ifdef HAVE_DBMAKER
-PHP_FUNCTION(odbc_fetch_array);
-PHP_FUNCTION(odbc_fetch_object);
-#endif
-PHP_FUNCTION(odbc_fetch_into);
-PHP_FUNCTION(odbc_fetch_row);
-PHP_FUNCTION(odbc_field_len);
-PHP_FUNCTION(odbc_field_scale);
-PHP_FUNCTION(odbc_field_name);
-PHP_FUNCTION(odbc_field_type);
-PHP_FUNCTION(odbc_field_num);
-PHP_FUNCTION(odbc_free_result);
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
-PHP_FUNCTION(odbc_next_result);
-#endif
-PHP_FUNCTION(odbc_num_fields);
-PHP_FUNCTION(odbc_num_rows);
-PHP_FUNCTION(odbc_prepare);
-PHP_FUNCTION(odbc_result);
-PHP_FUNCTION(odbc_result_all);
-PHP_FUNCTION(odbc_rollback);
-PHP_FUNCTION(odbc_binmode);
-PHP_FUNCTION(odbc_longreadlen);
-PHP_FUNCTION(odbc_tables);
-PHP_FUNCTION(odbc_columns);
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_35) /* not supported now */
-PHP_FUNCTION(odbc_columnprivileges);
-PHP_FUNCTION(odbc_tableprivileges);
-#endif
-#if !defined(HAVE_SOLID) || !defined(HAVE_SOLID_35) /* not supported */
-PHP_FUNCTION(odbc_foreignkeys);
-PHP_FUNCTION(odbc_procedures);
-PHP_FUNCTION(odbc_procedurecolumns);
-#endif
-PHP_FUNCTION(odbc_gettypeinfo);
-PHP_FUNCTION(odbc_primarykeys);
-PHP_FUNCTION(odbc_specialcolumns);
-PHP_FUNCTION(odbc_statistics);
-
-#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC )
-#define ODBC_SQL_ENV_T SQLHANDLE
-#define ODBC_SQL_CONN_T SQLHANDLE
-#define ODBC_SQL_STMT_T SQLHANDLE
-#elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB ) || defined ( HAVE_EMPRESS )
-#define ODBC_SQL_ENV_T SQLHENV
-#define ODBC_SQL_CONN_T SQLHDBC
-#define ODBC_SQL_STMT_T SQLHSTMT
-#else
-#define ODBC_SQL_ENV_T HENV
-#define ODBC_SQL_CONN_T HDBC
-#define ODBC_SQL_STMT_T HSTMT
-#endif
-
-typedef struct odbc_connection {
- ODBC_SQL_ENV_T henv;
- ODBC_SQL_CONN_T hdbc;
- char laststate[6];
- char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
- int id;
- int persistent;
-} odbc_connection;
-
-typedef struct odbc_result_value {
- char name[32];
- char *value;
- long int vallen;
- SDWORD coltype;
-} odbc_result_value;
-
-typedef struct odbc_result {
- ODBC_SQL_STMT_T stmt;
- int id;
- odbc_result_value *values;
- SWORD numcols;
- SWORD numparams;
-# if HAVE_SQL_EXTENDED_FETCH
- int fetch_abs;
-# endif
- long longreadlen;
- int binmode;
- int fetched;
- odbc_connection *conn_ptr;
-} odbc_result;
-
-typedef struct {
- char *defDB;
- char *defUser;
- char *defPW;
- long allow_persistent;
- long check_persistent;
- long max_persistent;
- long max_links;
- long num_persistent;
- long num_links;
- int defConn;
- long defaultlrl;
- long defaultbinmode;
- char laststate[6];
- char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
- HashTable *resource_list;
- HashTable *resource_plist;
-} php_odbc_globals;
-
-int odbc_add_result(HashTable *list, odbc_result *result);
-odbc_result *odbc_get_result(HashTable *list, int count);
-void odbc_del_result(HashTable *list, int count);
-int odbc_add_conn(HashTable *list, HDBC conn);
-odbc_connection *odbc_get_conn(HashTable *list, int count);
-void odbc_del_conn(HashTable *list, int ind);
-int odbc_bindcols(odbc_result *result TSRMLS_DC);
-
-#define ODBC_SQL_ERROR_PARAMS odbc_connection *conn_resource, ODBC_SQL_STMT_T stmt, char *func
-
-void odbc_sql_error(ODBC_SQL_ERROR_PARAMS);
-
-#define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR)
-#define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY)
-
-#ifdef ZTS
-# define ODBCG(v) TSRMG(odbc_globals_id, php_odbc_globals *, v)
-#else
-# define ODBCG(v) (odbc_globals.v)
-extern ZEND_API php_odbc_globals odbc_globals;
-#endif
-
-#else
-
-# define odbc_module_ptr NULL
-
-#endif /* HAVE_UODBC */
-
-#define phpext_odbc_ptr odbc_module_ptr
-
-#endif /* PHP_ODBC_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/openssl/CREDITS b/ext/openssl/CREDITS
deleted file mode 100644
index c2f50d6308..0000000000
--- a/ext/openssl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-OpenSSL
-Stig Venaas, Wez Furlong, Sascha Kettler
diff --git a/ext/openssl/EXPERIMENTAL b/ext/openssl/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/openssl/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/openssl/README b/ext/openssl/README
deleted file mode 100644
index 66d79267fd..0000000000
--- a/ext/openssl/README
+++ /dev/null
@@ -1,321 +0,0 @@
-OpenSSL extension for PHP4
-$Id$
-
-The functions implemented so far make it possible to seal and open data, and
-also create and verify signatures.
-
-NEW: support for S/MIME encrypt/decrypt/sign/verify, as well as more
-flexibility for specifying certificates/keys.
-
-To enable the extension, configure PHP with --with-openssl.
-
-Specifying keys/certificates
-----------------------------
-
-Most of the functions require a key or a certificate as a parameter; to make
-things easy for you to use openssl, this extension allows you
-to specify certificates in the following way:
-
-1. As an X.509 resource returned from openssl_x509_read
-2. As a string in the format file://filename, where filename is the path to the
- certificate file (it will be opened and read automatically)
-3. As a string containing the data from the certificate file
-
-Similarly, you can use the following methods of specifying a public key:
-
-1. As a key resource returned from openssl_get_publickey
-2. An X509 resource - public key only
-3. As a string in the format file://filename
-4. As a string containing the data from the key file
-
-Additionally, for a private key, when the openssl extension function does not
-allow you to enter the passphrase as a parameter you may use the syntax
-array($key, "passphrase") where $key can be a key specified using one of the
-methods listed above.
-
-Certificate Verification
-------------------------
-When calling a function that will verify a signature/certificate, the cainfo
-parameter is an array containing file and directory names that specifiy the
-locations of trusted CA files. If a directory is specified, then it must be a
-correctly hashed directory.
-
-Misc:
------
-
-mixed openssl_error_string()
-
-returns the message from the last error that the OpenSSL library encountered
-and moves it's internal error pointer to the next message. If there are no
-more error messages, returns false.
-
-General Key/Cert Functions:
----------------------------
-
-resource openssl_get_privatekey(mixed key [, string passphrase])
-
-Parses the key data and returns a key resource identifier. If the key is
-encrypted a passphrase is needed. This can be supplied as second argument.
-
-
-resource openssl_get_publickey(mixed cert)
-
-Extracts the public key from the given certificate and returns a key
-resource identifier.
-
-
-void openssl_free_key(resource key)
-
-Frees the resource given by the key resource identifier.
-Note that this function does not accept the extended key specification
-syntax mentioned above, as it doesn't make sense in this case!
-
-array openssl_x509_parse(mixed x509[, bool shortnames=true])
-
-Parses the certificate data and returns an array containing information
-about the certificate, it's intended purposes, subject, issuer, validity
-etc. etc. If shortnames is true (the default) then the fields will be
-keyed by the shortname forms eg: CN as opposed to commonName (shortnames
-= false).
-
-
-bool openssl_x509_checkpurpose(mixed x509cert, int purpose,
- array cainfo[, string untrustedfile])
-
-Verifies if the certificate can be used for a specific purpose.
-Purpose can be one of the following values:
- X509_PURPOSE_SSL_CLIENT
- X509_PURPOSE_SSL_SERVER
- X509_PURPOSE_NS_SSL_SERVER
- X509_PURPOSE_SMIME_SIGN
- X509_PURPOSE_SMIME_ENCRYPT
- X509_PURPOSE_CRL_SIGN
- X509_PURPOSE_ANY
-
-cainfo is an array of CA information (as mentioned above).
-untrusted file specifies a file containing a bunch of certs that
-are not trusted but may be useful in validating the certificate.
-
-
-resource openssl_read_x509(mixed cert)
-
-Parses the cert and returns a resource that can be used with the
-other openssl functions
-
-
-void openssl_free_x509(resource x509)
-
-Frees the resource given by the x509 resource identifier.
-Note that this function does not accept the extended cert specification
-syntax mentioned above, as it doesn't make sense in this case!
-
-
-PKCS7 (S/MIME) Sign/Verify/Encrypt/Decrypt Functions:
------------------------------------------------------
-
-These functions allow you to manipulate S/MIME messages!
-
-They are based on apps/smime.c from the openssl dist, so for information,
-see the documentation for openssl.
-
-You may pass in some flags that affect how these functions work using
-and array containing the following values:
-"detached", "nodetached", "text", "nointern", "noverify", "nochain",
-"nocerts", "noattr", "binary", "nosigs".
-The options correspond to the options of the same name for the
-"openssl smime" command (smime(1)).
-
-
-bool openssl_pkcs7_verify(string filename, array flags[, string signerscerts][,
- array cainfo])
-
-Verifies that the signature on the MIME message contained in the file
-named by filename is valid. If signerscerts is passed in, it holds the
-name of a file into which the certificates of those that signed the
-message will be stored.
-cainfo and flags are CA information and flag information as described
-above.
-
-
-bool openssl_pkcs7_encrypt(string infile, string outfile, array recipcerts,
- array headers[, array flags])
-
-Encrypts the MIME message contained in the file named by infile using
-the certificates held in recipcerts. The result is place in the file
-named outfile.
-recipcerts is an array of certificate identifiers representing the certs
-of the intended recipients of the message.
-headers is an array of headers to prepend to the message: they will
-not be included in the encoded section.
-flags is flag information as described above.
-Hint: you will want to put "To", "From", and "Subject" headers in headers.
-Headers can be either an assoc array keyed by header named, or can be
-and indexed array containing a single header line per value.
-The message will be encoded using a RC2-40 bit cipher.
-TODO: allow user to specify cipher.
-
-bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed
- signkey, array headers[, array flags][, string extracertsfilename])
-
-Signs the MIME message contained in the file named by infile using the
-certificate and key pair identified by signcert/signkey.
-Signkey must be the private key corresponding to signcert.
-The result is placed in the file named by outfile.
-Headers and flags have the same effects as mentioned above.
-extracertsfilename names a file containing a bunch of additional certificates
-to include in the signature, in order to aid the recipient in verifying the
-message.
-
-
-bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed
- recipcert, mixed recipkey)
-
-Decrypts the MIME message contained in the file named by infilename
-using the certificate and private key pair recipcert/recipkey.
-The descrypted result is placed in outfilename.
-TODO: add flags parameter, if needed?
-
-
-EVP Sign/Verify/Encrypt/Decrypt Functions:
-------------------------------------------
-
-bool openssl_sign(string data, &string signature, mixed key)
-
-Uses key to create signature for data, returns true on success and false
-on failure. signature is passed by reference and contains the newly created
-signature on success.
-
-
-int openssl_verify(string data, string signature, mixed key)
-
-Uses key to verify that the signature is correct for the given data.
-Returns 1 if correct, 0 if incorrect, and -1 on error.
-
-
-int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)
-
-Encrypts data using pubkeys, so that only owners of the respective private
-keys and ekeys can decrypt and read the data. Returns the length of the
-sealed data on success, else false. On success, sealdata and ekeys hold
-the sealed data and envelope keys.
-
-
-bool openssl_open(string data, &string opendata, string ekey, int privkey)
-
-Opens (decrypts) sealed data using a private key and the corresponding
-envelope key. Returns true on success and false on failure. On success,
-opendata will hold the descypted data.
-
-
-See below for more details on usage. Also feel free to mail me at
-venaas@php.net if you have questions. The OpenSSL documentation,
-especially the EVP documentation at
-http://www.openssl.org/docs/crypto/evp.html, might also be of help.
-
-
-HOWTO:
-
-To do anything you need a private key and a certificate containing the
-corresponding public key. This is similar to what you have using say an
-Apache webserver with OpenSSL. For testing you could try keys that come
-with OpenSSL, that's what the sample scripts below do. You can also get
-keys from some CA, or you can create them yourself.
-
-
-Creating private key
-
-To generate an unprotected 1024 bit RSA private key you can do
-
- openssl genrsa -out /tmp/test.key 1024
-
-Private keys should be protected by a passphrase though.
-
-
-Creating a self signed certificate
-
-To generate a self signed certificate from the key that is valid for
-365 days, do
-
- openssl req -new -key /tmp/test.key -out /tmp/test.crt -days 365 -x509
-
-
-Example usage
-
-These examples use keys that come with OpenSSL, you should perhaps test with
-those first.
-
-
-Seal and open
-
- <?php
- $data = "Follow the white rabbit";
-
- // Get certificate into a string
- // this file comes with OpenSSL 0.9.6
- $fp = fopen("/src/openssl-0.9.6/demos/maurice/cert.pem", "r");
- $cert = fread($fp, 8192);
- fclose($fp);
- // get public key from certificate
- $pk1 = openssl_get_publickey($cert);
- // $pk1 is an encryption key resource id if success, else false
- // Repeat if want public keys for multiple parties
-
- $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
- $cert = fread($fp, 8192);
- fclose($fp);
- $pk2 = openssl_get_publickey($cert);
-
- // seal data, only owners of $pk1 and $pk2 can decrypt $sealed with keys
- // $ekeys[0] and $ekeys[1] respectively.
- openssl_seal($data, $sealed, $ekeys, array($pk1,$pk2));
- openssl_free_key($pk1);
- openssl_free_key($pk2);
-
- // now we try to decrypt data for one of the recipients
- $fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r");
- // Get PEM coded key into $pkey
- $pkey = fread($fp, 8192);
- fclose($fp);
- // $key will be resource id for unpacked $pkey
- $key = openssl_get_privatekey($pkey);
-
- openssl_open($sealed, $open, $ekeys[1], $key);
- openssl_free_key($key);
- echo "$open\n";
- ?>
-
-
-Sign and verify
-
- <?php
- $data = "Follow the white rabbit";
-
- // First we need to have a string containing the private key in PEM format
- // this file comes with OpenSSL 0.9.6
- $fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r");
- $pkey = fread($fp, 8192);
- fclose($fp);
-
- // get private key from the PEM format
- // $key is an encr key resource id if success, else false
- $key = openssl_get_privatekey($pkey);
-
- // calculate signature
- openssl_sign($data, $signature, $key);
- openssl_free_key($key);
-
- // recipient verifies signature
- // read certificate
- $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
- $cert = fread($fp, 8192);
- fclose($fp);
-
- // Get public key from the certificate
- $pubkey = openssl_get_publickey($cert);
-
- // state whether signature is okay or not
- echo openssl_verify($data, $signature, $pubkey) == 1 ? "ok\n" : "bad\n";
-
- // free key
- openssl_free_key($pubkey);
- ?>
diff --git a/ext/openssl/config.m4 b/ext/openssl/config.m4
deleted file mode 100644
index 93c5d052fd..0000000000
--- a/ext/openssl/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-if test "$PHP_OPENSSL" != "no"; then
- PHP_NEW_EXTENSION(openssl, openssl.c, $ext_openssl_shared)
- OPENSSL_SHARED_LIBADD="-lcrypto -lssl"
- PHP_SUBST(OPENSSL_SHARED_LIBADD)
- AC_DEFINE(HAVE_OPENSSL_EXT,1,[ ])
-fi
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
deleted file mode 100644
index f12329975a..0000000000
--- a/ext/openssl/openssl.c
+++ /dev/null
@@ -1,2843 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Venaas <venaas@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- | Sascha Kettler <kettler@gmx.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_openssl.h"
-
-/* PHP Includes */
-#include "ext/standard/file.h"
-#include "ext/standard/info.h"
-
-/* OpenSSL includes */
-#include <openssl/evp.h>
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/crypto.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/conf.h>
-#include <openssl/e_os.h>
-#include <openssl/rand.h>
-
-#define DEFAULT_KEY_LENGTH 512
-#define MIN_KEY_LENGTH 384
-
-
-#define DEBUG_SMIME 0
-
-static unsigned char arg2_force_ref[] =
- { 2, BYREF_NONE, BYREF_FORCE };
-static unsigned char arg2and3_force_ref[] =
- { 3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
-
-enum php_openssl_key_type {
- OPENSSL_KEYTYPE_RSA,
- OPENSSL_KEYTYPE_DSA,
- OPENSSL_KEYTYPE_DH,
- OPENSSL_KEYTYPE_DEFAULT = OPENSSL_KEYTYPE_RSA
-};
-
-/* {{{ openssl_functions[]
- */
-function_entry openssl_functions[] = {
-/* public/private key functions */
- PHP_FE(openssl_pkey_free, NULL)
- PHP_FE(openssl_pkey_new, NULL)
- PHP_FE(openssl_pkey_export, arg2_force_ref)
- PHP_FE(openssl_pkey_export_to_file, NULL)
- PHP_FE(openssl_pkey_get_private, NULL)
- PHP_FE(openssl_pkey_get_public, NULL)
-
- PHP_FALIAS(openssl_free_key, openssl_pkey_free, NULL)
- PHP_FALIAS(openssl_get_privatekey, openssl_pkey_get_private, NULL)
- PHP_FALIAS(openssl_get_publickey, openssl_pkey_get_public, NULL)
-
-/* x.509 cert funcs */
- PHP_FE(openssl_x509_read, NULL)
- PHP_FE(openssl_x509_free, NULL)
- PHP_FE(openssl_x509_parse, NULL)
- PHP_FE(openssl_x509_checkpurpose, NULL)
- PHP_FE(openssl_x509_check_private_key, NULL)
- PHP_FE(openssl_x509_export, arg2_force_ref)
- PHP_FE(openssl_x509_export_to_file, NULL)
-
-/* CSR funcs */
- PHP_FE(openssl_csr_new, arg2_force_ref)
- PHP_FE(openssl_csr_export, arg2_force_ref)
- PHP_FE(openssl_csr_export_to_file, NULL)
- PHP_FE(openssl_csr_sign, NULL)
-
-
- PHP_FE(openssl_sign, arg2_force_ref)
- PHP_FE(openssl_verify, NULL)
- PHP_FE(openssl_seal, arg2and3_force_ref)
- PHP_FE(openssl_open, arg2_force_ref)
-
-/* for S/MIME handling */
- PHP_FE(openssl_pkcs7_verify, NULL)
- PHP_FE(openssl_pkcs7_decrypt, NULL)
- PHP_FE(openssl_pkcs7_sign, NULL)
- PHP_FE(openssl_pkcs7_encrypt, NULL)
-
- PHP_FE(openssl_private_encrypt, arg2_force_ref)
- PHP_FE(openssl_private_decrypt, arg2_force_ref)
- PHP_FE(openssl_public_encrypt, arg2_force_ref)
- PHP_FE(openssl_public_decrypt, arg2_force_ref)
-
- PHP_FE(openssl_error_string, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ openssl_module_entry
- */
-zend_module_entry openssl_module_entry = {
- STANDARD_MODULE_HEADER,
- "openssl",
- openssl_functions,
- PHP_MINIT(openssl),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(openssl),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_OPENSSL
-ZEND_GET_MODULE(openssl)
-#endif
-
-static int le_key;
-static int le_x509;
-static int le_csr;
-
-/* {{{ resource destructors */
-static void php_pkey_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- EVP_PKEY *pkey = (EVP_PKEY *)rsrc->ptr;
-
- assert(pkey != NULL);
-
- EVP_PKEY_free(pkey);
-}
-
-static void php_x509_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- X509 *x509 = (X509 *)rsrc->ptr;
- X509_free(x509);
-}
-
-static void php_csr_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- X509_REQ * csr = (X509_REQ*)rsrc->ptr;
- X509_REQ_free(csr);
-}
-/* }}} */
-
-/* {{{ openssl -> PHP "bridging" */
-/* true global; readonly after module startup */
-static char default_ssl_conf_filename[MAXPATHLEN];
-
-struct php_x509_request {
- LHASH * global_config; /* Global SSL config */
- LHASH * req_config; /* SSL config for this request */
- const EVP_MD * md_alg;
- const EVP_MD * digest;
- char * section_name,
- * config_filename,
- * digest_name,
- * extensions_section,
- * request_extensions_section;
- int priv_key_bits;
- int priv_key_type;
-
- int priv_key_encrypt;
-
- EVP_PKEY * priv_key;
-};
-
-
-static X509 * php_openssl_x509_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC);
-static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char * passphrase, int makeresource, long * resourceval TSRMLS_DC);
-static X509_STORE * setup_verify(zval * calist TSRMLS_DC);
-static STACK_OF(X509) * load_all_certs_from_file(char *certfile);
-static X509_REQ * php_openssl_csr_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC);
-static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req TSRMLS_DC);
-
-
-static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int shortname TSRMLS_DC)
-{
- zval * subitem;
- int i;
- char * sn, * ln;
- int nid;
- X509_NAME_ENTRY * ne;
- ASN1_STRING * str;
- ASN1_OBJECT * obj;
-
- MAKE_STD_ZVAL(subitem);
- array_init(subitem);
-
- for (i = 0; i < X509_NAME_entry_count(name); i++) {
- ne = X509_NAME_get_entry(name, i);
- obj = X509_NAME_ENTRY_get_object(ne);
- str = X509_NAME_ENTRY_get_data(ne);
- nid = OBJ_obj2nid(obj);
- if (shortname) {
- sn = (char*)OBJ_nid2sn(nid);
- add_assoc_stringl(subitem, sn, str->data, str->length, 1);
- }
- else {
- ln = (char*)OBJ_nid2ln(nid);
- add_assoc_stringl(subitem, ln, str->data, str->length, 1);
- }
- }
- zend_hash_update(HASH_OF(val), key, strlen(key) + 1, (void *)&subitem, sizeof(subitem), NULL);
-}
-
-static void add_assoc_asn1_string(zval * val, char * key, ASN1_STRING * str)
-{
- add_assoc_stringl(val, key, str->data, str->length, 1);
-}
-
-static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC)
-{
-/*
- This is how the time string is formatted:
-
- sprintf(p,"%02d%02d%02d%02d%02d%02dZ",ts->tm_year%100,
- ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);
-*/
-
- time_t ret;
- struct tm thetime;
- char * strbuf;
- char * thestr;
- long gmadjust = 0;
-
- if (timestr->length < 13) {
- zend_error(E_WARNING, "%s(): extension author too lazy to parse %s correctly", get_active_function_name(TSRMLS_C), timestr->data);
- return (time_t)-1;
- }
-
- strbuf = estrdup(timestr->data);
-
-
- memset(&thetime, 0, sizeof(thetime));
-
- /* we work backwards so that we can use atoi more easily */
-
- thestr = strbuf + timestr->length - 3;
-
- thetime.tm_sec = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_min = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_hour = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_mday = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_mon = atoi(thestr)-1;
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_year = atoi(thestr);
-
- if (thetime.tm_year < 68)
- thetime.tm_year += 100;
-
- thetime.tm_isdst = -1;
- ret = mktime(&thetime);
-
-#if HAVE_TM_GMTOFF
- gmadjust = thetime.tm_gmtoff;
-#else
- /*
- ** If correcting for daylight savings time, we set the adjustment to
- ** the value of timezone - 3600 seconds. Otherwise, we need to overcorrect and
- ** set the adjustment to the main timezone + 3600 seconds.
- */
- gmadjust = -(thetime.tm_isdst ? timezone - 3600 : timezone + 3600);
-#endif
- ret += gmadjust;
-
- efree(strbuf);
-
- return ret;
-}
-
-static inline int php_openssl_config_check_syntax(
- const char * section_label,
- const char * config_filename,
- const char * section,
- LHASH * config TSRMLS_DC)
-{
- X509V3_CTX ctx;
-
- X509V3_set_ctx_test(&ctx);
- X509V3_set_conf_lhash(&ctx, config);
- if (!X509V3_EXT_add_conf(config, &ctx, (char *)section, NULL)) {
- zend_error(E_WARNING, "%s(): Error loading %s section %s of %s",
- get_active_function_name(TSRMLS_C),
- section_label,
- section,
- config_filename);
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static int add_oid_section(struct php_x509_request * req TSRMLS_DC)
-{
- char * str;
- STACK_OF(CONF_VALUE) * sktmp;
- CONF_VALUE * cnf;
- int i;
-
- str = CONF_get_string(req->req_config, NULL, "oid_section");
- if (str == NULL)
- return SUCCESS;
-
- sktmp = CONF_get_section(req->req_config, str);
- if (sktmp == NULL) {
- zend_error(E_WARNING, "%s(): problem loading oid section %s",
- get_active_function_name(TSRMLS_C), str);
- return FAILURE;
- }
- for (i = 0; i < sk_CONF_VALUE_num(sktmp); i++) {
- cnf = sk_CONF_VALUE_value(sktmp, i);
- if (OBJ_create(cnf->value, cnf->name, cnf->name) == NID_undef) {
- zend_error(E_WARNING, "%s(): problem creating object %s=%s",
- get_active_function_name(TSRMLS_C),
- cnf->name, cnf->value);
- return FAILURE;
- }
- }
- return SUCCESS;
-}
-
-#define PHP_SSL_REQ_INIT(req) memset(req, 0, sizeof(*req))
-#define PHP_SSL_REQ_DISPOSE(req) php_openssl_dispose_config(req TSRMLS_CC)
-#define PHP_SSL_REQ_PARSE(req, zval) php_openssl_parse_config(req, zval TSRMLS_CC)
-
-#define PHP_SSL_CONFIG_SYNTAX_CHECK(var) if (req->var && php_openssl_config_check_syntax(#var, \
- req->config_filename, req->var, req->req_config TSRMLS_CC) == FAILURE) return FAILURE
-
-#define SET_OPTIONAL_STRING_ARG(key, varname, defval) \
- if (optional_args && zend_hash_find(Z_ARRVAL_P(optional_args), key, sizeof(key), (void**)&item) == SUCCESS) \
- varname = Z_STRVAL_PP(item); \
- else \
- varname = defval
-
-#define SET_OPTIONAL_LONG_ARG(key, varname, defval) \
- if (optional_args && zend_hash_find(Z_ARRVAL_P(optional_args), key, sizeof(key), (void**)&item) == SUCCESS) \
- varname = Z_LVAL_PP(item); \
- else \
- varname = defval
-
-
-
-static int php_openssl_parse_config(
- struct php_x509_request * req,
- zval * optional_args
- TSRMLS_DC
- )
-{
- char * str;
- zval ** item;
-
- SET_OPTIONAL_STRING_ARG("config", req->config_filename, default_ssl_conf_filename);
- SET_OPTIONAL_STRING_ARG("config_section_name", req->section_name, "req");
- req->global_config = CONF_load(NULL, default_ssl_conf_filename, NULL);
- req->req_config = CONF_load(NULL, req->config_filename, NULL);
-
- if (req->req_config == NULL)
- return FAILURE;
-
-
- /* read in the oids */
- str = CONF_get_string(req->req_config, NULL, "oid_file");
- if (str) {
- BIO * oid_bio = BIO_new_file(str, "r");
- if (oid_bio) {
- OBJ_create_objects(oid_bio);
- BIO_free(oid_bio);
- }
- }
- if (add_oid_section(req TSRMLS_CC) == FAILURE)
- return FAILURE;
-
- SET_OPTIONAL_STRING_ARG("digest_alg", req->digest_name,
- CONF_get_string(req->req_config, req->section_name, "default_md"));
- SET_OPTIONAL_STRING_ARG("x509_extensions", req->extensions_section,
- CONF_get_string(req->req_config, req->section_name, "x509_extensions"));
- SET_OPTIONAL_STRING_ARG("req_extensions", req->extensions_section,
- CONF_get_string(req->req_config, req->request_extensions_section, "req_extensions"));
- SET_OPTIONAL_LONG_ARG("private_key_bits", req->priv_key_bits,
- CONF_get_number(req->req_config, req->section_name, "default_bits"));
-
- SET_OPTIONAL_LONG_ARG("private_key_type", req->priv_key_type, OPENSSL_KEYTYPE_DEFAULT);
-
- if (optional_args && zend_hash_find(Z_ARRVAL_P(optional_args), "encrypt_key", sizeof("encrypt_key"), (void**)&item) == SUCCESS) {
- req->priv_key_encrypt = Z_BVAL_PP(item);
- }
- else {
- str = CONF_get_string(req->req_config, req->section_name, "encrypt_rsa_key");
- if (str == NULL)
- str = CONF_get_string(req->req_config, req->section_name, "encrypt_key");
- if (str && strcmp(str, "no") == 0)
- req->priv_key_encrypt = 0;
- else
- req->priv_key_encrypt = 1;
- }
-
-
- /* digest alg */
- if (req->digest_name == NULL)
- req->digest_name = CONF_get_string(req->req_config, req->section_name, "default_md");
- if (req->digest_name)
- req->digest = req->md_alg = EVP_get_digestbyname(req->digest_name);
- if (req->md_alg == NULL)
- req->md_alg = req->digest = EVP_md5();
-
- PHP_SSL_CONFIG_SYNTAX_CHECK(extensions_section);
-
- /* set the string mask */
- str = CONF_get_string(req->req_config, req->section_name, "string_mask");
- if (str && !ASN1_STRING_set_default_mask_asc(str)) {
- zend_error(E_WARNING, "%s(): Invalid global string mask setting %s",
- get_active_function_name(TSRMLS_C), str);
- return FAILURE;
- }
-
- if (req->request_extensions_section == NULL)
- req->request_extensions_section = CONF_get_string(req->req_config, req->section_name, "req_extensions");
-
- PHP_SSL_CONFIG_SYNTAX_CHECK(request_extensions_section);
-
- return SUCCESS;
-}
-
-static void php_openssl_dispose_config(struct php_x509_request * req TSRMLS_DC)
-{
- if (req->priv_key) {
- EVP_PKEY_free(req->priv_key);
- req->priv_key = NULL;
- }
- if (req->global_config) {
- CONF_free(req->global_config);
- req->global_config = NULL;
- }
- if (req->req_config) {
- CONF_free(req->req_config);
- req->req_config = NULL;
- }
-}
-
-static int php_openssl_load_rand_file(const char * file, int *egdsocket, int *seeded)
-{
- char buffer[MAXPATHLEN];
-
- *egdsocket = 0;
- *seeded = 0;
-
-#ifdef WINDOWS
- RAND_screen();
-#endif
- if (file == NULL)
- file = RAND_file_name(buffer, sizeof(buffer));
- else if (RAND_egd(file) > 0) {
- /* if the given filename is an EGD socket, don't
- * write anything back to it */
- *egdsocket = 1;
- return SUCCESS;
- }
- if (file == NULL || !RAND_load_file(file, -1)) {
- if (RAND_status() == 0) {
- zend_error(E_WARNING, "unable to load random state; not enough random data!");
- return FAILURE;
- }
- return FAILURE;
- }
- *seeded = 1;
- return SUCCESS;
-}
-
-static int php_openssl_write_rand_file(const char * file, int egdsocket, int seeded)
-{
- char buffer[MAXPATHLEN];
- if (egdsocket || !seeded) {
- /* if we did not manage to read the seed file, we should not write
- * a low-entropy seed file back */
- return FAILURE;
- }
- if (file == NULL)
- file = RAND_file_name(buffer, sizeof(buffer));
- if (file == NULL || !RAND_write_file(file)) {
- zend_error(E_WARNING, "unable to write random state");
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(openssl)
-{
- char * config_filename;
-
- le_key = zend_register_list_destructors_ex(php_pkey_free, NULL, "OpenSSL key", module_number);
- le_x509 = zend_register_list_destructors_ex(php_x509_free, NULL, "OpenSSL X.509", module_number);
- le_csr = zend_register_list_destructors_ex(php_csr_free, NULL, "OpenSSL X.509 CSR", module_number);
-
- OpenSSL_add_all_ciphers();
- OpenSSL_add_all_digests();
- OpenSSL_add_all_algorithms();
-
- ERR_load_ERR_strings();
- ERR_load_crypto_strings();
- ERR_load_EVP_strings();
-
- /* purposes for cert purpose checking */
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SSL_CLIENT", X509_PURPOSE_SSL_CLIENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SSL_SERVER", X509_PURPOSE_SSL_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_NS_SSL_SERVER", X509_PURPOSE_NS_SSL_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SMIME_SIGN", X509_PURPOSE_SMIME_SIGN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SMIME_ENCRYPT", X509_PURPOSE_SMIME_ENCRYPT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_CRL_SIGN", X509_PURPOSE_CRL_SIGN, CONST_CS|CONST_PERSISTENT);
-#ifdef X509_PURPOSE_ANY
- REGISTER_LONG_CONSTANT("X509_PURPOSE_ANY", X509_PURPOSE_ANY, CONST_CS|CONST_PERSISTENT);
-#endif
-
- /* flags for S/MIME */
- REGISTER_LONG_CONSTANT("PKCS7_DETACHED", PKCS7_DETACHED, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_TEXT", PKCS7_TEXT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOINTERN", PKCS7_NOINTERN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOVERIFY", PKCS7_NOVERIFY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOCHAIN", PKCS7_NOCHAIN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOCERTS", PKCS7_NOCERTS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOATTR", PKCS7_NOATTR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_BINARY", PKCS7_BINARY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOSIGS", PKCS7_NOSIGS, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_PADDING",
- RSA_PKCS1_PADDING,
- CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_SSLV23_PADDING",
- RSA_SSLV23_PADDING,
- CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_NO_PADDING",
- RSA_NO_PADDING,
- CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_OAEP_PADDING",
- RSA_PKCS1_OAEP_PADDING,
- CONST_CS|CONST_PERSISTENT);
-
- /* Values for key types */
- REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_RSA",
- OPENSSL_KEYTYPE_RSA, CONST_CS | CONST_PERSISTENT);
-#ifndef NO_DSA
- REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_DSA",
- OPENSSL_KEYTYPE_DSA, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_DH",
- OPENSSL_KEYTYPE_DH, CONST_CS | CONST_PERSISTENT);
-
- /* Determine default SSL configuration file */
- config_filename = getenv("OPENSSL_CONF");
- if (config_filename == NULL)
- config_filename = getenv("SSLEAY_CONF");
- if (config_filename == NULL) {
- snprintf(default_ssl_conf_filename, sizeof(default_ssl_conf_filename), "%s/%s",
- X509_get_default_cert_area(),
- OPENSSL_CONF);
- }
- else
- strncpy(default_ssl_conf_filename, config_filename, sizeof(default_ssl_conf_filename));
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(openssl)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "OpenSSL support", "enabled");
- php_info_print_table_row(2, "OpenSSL Version", OPENSSL_VERSION_TEXT);
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(openssl)
-{
- EVP_cleanup();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ x509 cert functions */
-
-/* {{{ php_openssl_x509_from_zval
- Given a zval, coerce it into an X509 object.
- The zval can be:
- . X509 resource created using openssl_read_x509()
- . if it starts with file:// then it will be interpreted as the path to that cert
- . it will be interpreted as the cert data
- If you supply makeresource, the result will be registered as an x509 resource and
- it's value returned in makeresource.
-*/
-static X509 * php_openssl_x509_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC)
-{
- X509 *cert = NULL;
-
- if (resourceval)
- *resourceval = -1;
-
- if (Z_TYPE_PP(val) == IS_RESOURCE) {
- /* is it an x509 resource ? */
- void * what;
- int type;
-
- what = zend_fetch_resource(val TSRMLS_CC, -1, "OpenSSL X.509", &type, 1, le_x509);
- if (!what)
- return NULL;
-
- /* this is so callers can decide if they should free the X509 */
- if (resourceval)
- *resourceval = Z_LVAL_PP(val);
-
- if (type == le_x509)
- return (X509*)what;
-
- /* other types could be used here - eg: file pointers and read in the data from them */
-
- return NULL;
- }
- /* force it to be a string and check if it refers to a file */
- convert_to_string_ex(val);
-
- if (Z_STRLEN_PP(val) > 7 && memcmp(Z_STRVAL_PP(val), "file://", 7) == 0) {
- /* read cert from the named file */
- BIO *in;
-
- in = BIO_new_file(Z_STRVAL_PP(val) + 7, "r");
- if (in == NULL)
- return NULL;
- cert = PEM_read_bio_X509(in, NULL, NULL, NULL);
- BIO_free(in);
-
- }
- else {
- BIO *in;
-
- in = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- if (in == NULL)
- return NULL;
-
- cert = (X509 *) PEM_ASN1_read_bio((char *(*)())d2i_X509,
- PEM_STRING_X509, in,
- NULL, NULL, NULL);
- BIO_free(in);
- }
-
- if (cert && makeresource && resourceval) {
- *resourceval = zend_list_insert(cert, le_x509);
- }
- return cert;
-}
-
-/* }}} */
-
-/* {{{ proto bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])
- Exports a CERT to file or a var */
-PHP_FUNCTION(openssl_x509_export_to_file)
-{
- X509 * cert;
- zval * zcert = NULL;
- zend_bool notext = 1;
- BIO * bio_out;
- long certresource;
- char * filename;
- long filename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|b", &zcert, &filename, &filename_len, &notext) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- zend_error(E_WARNING, "cannot get cert from parameter 1");
- return;
- }
-
- bio_out = BIO_new_file(filename, "w");
- if (bio_out) {
- if (!notext)
- X509_print(bio_out, cert);
- PEM_write_bio_X509(bio_out, cert);
-
- RETVAL_TRUE;
- }
- else
- zend_error(E_WARNING, "error opening file %s", filename);
-
- if (certresource == -1 && cert)
- X509_free(cert);
-
- BIO_free(bio_out);
-
-}
-/* }}} */
-
-/* {{{ proto bool openssl_x509_export(mixed x509, string &out [, bool notext = true])
- Exports a CERT to file or a var */
-PHP_FUNCTION(openssl_x509_export)
-{
- X509 * cert;
- zval * zcert = NULL, *zout=NULL;
- zend_bool notext = 1;
- BIO * bio_out;
- long certresource;
- char * bio_mem_ptr;
- long bio_mem_len;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|b", &zcert, &zout, &notext) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- zend_error(E_WARNING, "cannot get cert from parameter 1");
- return;
- }
-
- bio_out = BIO_new(BIO_s_mem());
- if (!notext)
- X509_print(bio_out, cert);
- PEM_write_bio_X509(bio_out, cert);
-
- bio_mem_len = BIO_get_mem_data(bio_out, &bio_mem_ptr);
- ZVAL_STRINGL(zout, bio_mem_ptr, bio_mem_len, 1);
-
- RETVAL_TRUE;
-
- if (certresource == -1 && cert)
- X509_free(cert);
-
- BIO_free(bio_out);
-
-}
-/* }}} */
-
-/* {{{ proto bool openssl_x509_check_private_key(mixed cert, mixed key)
- Checks if a private key corresponds to a CERT */
-PHP_FUNCTION(openssl_x509_check_private_key)
-{
- zval * zcert, *zkey;
- X509 * cert = NULL;
- EVP_PKEY * key = NULL;
- long certresource = -1, keyresource = -1;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &zcert, &zkey) == FAILURE)
- return;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL)
- RETURN_FALSE;
-
- key = php_openssl_evp_from_zval(&zkey, 0, "", 1, &keyresource TSRMLS_CC);
- if (key) {
- RETVAL_BOOL(X509_check_private_key(cert, key));
- }
-
- if (keyresource == -1 && key)
- EVP_PKEY_free(key);
- if (certresource == -1 && cert)
- X509_free(cert);
-}
-/* }}} */
-
-/* {{{ proto array openssl_x509_parse(mixed x509 [, bool shortnames=true])
- Returns an array of the fields/values of the CERT */
-PHP_FUNCTION(openssl_x509_parse)
-{
- zval * zcert;
- X509 * cert = NULL;
- long certresource = -1;
- int i;
- zend_bool useshortnames = 1;
- char * tmpstr;
- zval * subitem;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &zcert, &useshortnames) == FAILURE)
- return;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL)
- RETURN_FALSE;
-
- array_init(return_value);
-
- if (cert->name)
- add_assoc_string(return_value, "name", cert->name, 1);
-/* add_assoc_bool(return_value, "valid", cert->valid); */
-
- add_assoc_name_entry(return_value, "subject", X509_get_subject_name(cert), useshortnames TSRMLS_CC);
- /* hash as used in CA directories to lookup cert by subject name */
- {
- char buf[32];
- snprintf(buf, sizeof(buf), "%08lx", X509_subject_name_hash(cert));
- add_assoc_string(return_value, "hash", buf, 1);
- }
-
- add_assoc_name_entry(return_value, "issuer", X509_get_issuer_name(cert), useshortnames TSRMLS_CC);
- add_assoc_long(return_value, "version", X509_get_version(cert));
- add_assoc_long(return_value, "serialNumber", ASN1_INTEGER_get(X509_get_serialNumber(cert)));
-
- add_assoc_asn1_string(return_value, "validFrom", X509_get_notBefore(cert));
- add_assoc_asn1_string(return_value, "validTo", X509_get_notAfter(cert));
-
- add_assoc_long(return_value, "validFrom_time_t", asn1_time_to_time_t(X509_get_notBefore(cert) TSRMLS_CC));
- add_assoc_long(return_value, "validTo_time_t", asn1_time_to_time_t(X509_get_notAfter(cert) TSRMLS_CC));
-
- tmpstr = X509_alias_get0(cert, NULL);
- if (tmpstr)
- add_assoc_string(return_value, "alias", tmpstr, 1);
-
-/*
- add_assoc_long(return_value, "signaturetypeLONG", X509_get_signature_type(cert));
- add_assoc_string(return_value, "signaturetype", OBJ_nid2sn(X509_get_signature_type(cert)), 1);
- add_assoc_string(return_value, "signaturetypeLN", OBJ_nid2ln(X509_get_signature_type(cert)), 1);
-*/
- MAKE_STD_ZVAL(subitem);
- array_init(subitem);
-
- /* NOTE: the purposes are added as integer keys - the keys match up to the X509_PURPOSE_SSL_XXX defines
- in x509v3.h */
- for (i = 0; i < X509_PURPOSE_get_count(); i++) {
- int id, purpset;
- char * pname;
- X509_PURPOSE * purp;
- zval * subsub;
-
- MAKE_STD_ZVAL(subsub);
- array_init(subsub);
-
- purp = X509_PURPOSE_get0(i);
- id = X509_PURPOSE_get_id(purp);
-
- purpset = X509_check_purpose(cert, id, 0);
- add_index_bool(subsub, 0, purpset);
-
- purpset = X509_check_purpose(cert, id, 1);
- add_index_bool(subsub, 1, purpset);
-
- pname = useshortnames ? X509_PURPOSE_get0_sname(purp) : X509_PURPOSE_get0_name(purp);
- add_index_string(subsub, 2, pname, 1);
-
- /* NOTE: if purpset > 1 then it's a warning - we should mention it ? */
-
- add_index_zval(subitem, id, subsub);
- }
- add_assoc_zval(return_value, "purposes", subitem);
-
- if (certresource == -1 && cert)
- X509_free(cert);
-
-}
-/* }}} */
-
-/* {{{ load_all_certs_from_file */
-static STACK_OF(X509) * load_all_certs_from_file(char *certfile)
-{
- STACK_OF(X509_INFO) *sk=NULL;
- STACK_OF(X509) *stack=NULL, *ret=NULL;
- BIO *in=NULL;
- X509_INFO *xi;
- TSRMLS_FETCH();
-
- if(!(stack = sk_X509_new_null())) {
- zend_error(E_ERROR, "%s(): memory allocation failure", get_active_function_name(TSRMLS_C));
- goto end;
- }
-
- if(!(in=BIO_new_file(certfile, "r"))) {
- zend_error(E_WARNING, "%s(): error opening the file, %s", get_active_function_name(TSRMLS_C), certfile);
- goto end;
- }
-
- /* This loads from a file, a stack of x509/crl/pkey sets */
- if(!(sk=PEM_X509_INFO_read_bio(in, NULL, NULL, NULL))) {
- zend_error(E_WARNING, "%s(): error reading the file, %s", get_active_function_name(TSRMLS_C), certfile);
- goto end;
- }
-
- /* scan over it and pull out the certs */
- while (sk_X509_INFO_num(sk))
- {
- xi=sk_X509_INFO_shift(sk);
- if (xi->x509 != NULL)
- {
- sk_X509_push(stack,xi->x509);
- xi->x509=NULL;
- }
- X509_INFO_free(xi);
- }
- if(!sk_X509_num(stack)) {
- zend_error(E_WARNING, "%s(): no certificates in file, %s", get_active_function_name(TSRMLS_C), certfile);
- sk_X509_free(stack);
- goto end;
- }
- ret=stack;
-end:
- BIO_free(in);
- sk_X509_INFO_free(sk);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ check_cert */
-static int check_cert(X509_STORE *ctx, X509 *x, STACK_OF(X509) *untrustedchain, int purpose)
-{
- int ret=0;
- X509_STORE_CTX *csc;
- TSRMLS_FETCH();
-
- csc = X509_STORE_CTX_new();
- if (csc == NULL)
- {
- zend_error(E_ERROR, "%s(): memory allocation failure", get_active_function_name(TSRMLS_C));
- return 0;
- }
- X509_STORE_CTX_init(csc, ctx, x, untrustedchain);
-
- if(purpose >= 0)
- X509_STORE_CTX_set_purpose(csc, purpose);
-
- ret = X509_verify_cert(csc);
- X509_STORE_CTX_free(csc);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ proto int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])
- Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs */
-PHP_FUNCTION(openssl_x509_checkpurpose)
-{
- zval * zcert, * zcainfo = NULL;
- X509_STORE * cainfo = NULL;
- X509 * cert = NULL;
- long certresource = -1;
- STACK_OF(X509) * untrustedchain = NULL;
- long purpose;
- char * untrusted = NULL;
- long untrusted_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl|a!s", &zcert, &purpose, &zcainfo, &untrusted, &untrusted_len)
- == FAILURE)
- return;
-
- RETVAL_LONG(-1);
-
- if (untrusted) {
- untrustedchain = load_all_certs_from_file(untrusted);
- if (untrustedchain == NULL)
- goto clean_exit;
- }
-
- cainfo = setup_verify(zcainfo TSRMLS_CC);
- if (cainfo == NULL)
- goto clean_exit;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL)
- goto clean_exit;
-
- RETVAL_LONG(check_cert(cainfo, cert, untrustedchain, purpose));
-
-clean_exit:
- if (certresource == 1 && cert)
- X509_free(cert);
- if (cainfo)
- X509_STORE_free(cainfo);
- if (untrustedchain)
- sk_X509_pop_free(untrustedchain, X509_free);
-}
-/* }}} */
-
-/* {{{ setup_verify
- * calist is an array containing file and directory names. create a
- * certificate store and add those certs to it for use in verification.
-*/
-static X509_STORE * setup_verify(zval * calist TSRMLS_DC)
-{
- X509_STORE *store;
- X509_LOOKUP * dir_lookup, * file_lookup;
- HashPosition pos;
- int ndirs = 0, nfiles = 0;
-
- store = X509_STORE_new();
-
- if (store == NULL)
- return NULL;
-
- if (calist && (Z_TYPE_P(calist) == IS_ARRAY)) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(calist), &pos);
- for (;; zend_hash_move_forward_ex(HASH_OF(calist), &pos)) {
- zval ** item;
- struct stat sb;
-
- if (zend_hash_get_current_data_ex(HASH_OF(calist), (void**)&item, &pos) == FAILURE)
- break;
-
- convert_to_string_ex(item);
-
- if (VCWD_STAT(Z_STRVAL_PP(item), &sb) == -1) {
- zend_error(E_WARNING, "%s() unable to stat %s", get_active_function_name(TSRMLS_C), Z_STRVAL_PP(item));
- continue;
- }
-
- if ((sb.st_mode & S_IFREG) == S_IFREG) {
- file_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
- if (file_lookup == NULL || !X509_LOOKUP_load_file(file_lookup, Z_STRVAL_PP(item), X509_FILETYPE_PEM))
- zend_error(E_WARNING, "%s() error loading file %s", get_active_function_name(TSRMLS_C), Z_STRVAL_PP(item));
- else
- nfiles++;
- file_lookup = NULL;
- }
- else {
- dir_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
- if (dir_lookup == NULL || !X509_LOOKUP_add_dir(dir_lookup, Z_STRVAL_PP(item), X509_FILETYPE_PEM))
- zend_error(E_WARNING, "%s() error loading directory %s", get_active_function_name(TSRMLS_C), Z_STRVAL_PP(item));
- else
- ndirs++;
- dir_lookup = NULL;
- }
- }
- }
- if (nfiles == 0) {
- file_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
- if (file_lookup)
- X509_LOOKUP_load_file(file_lookup, NULL, X509_FILETYPE_DEFAULT);
- }
- if (ndirs == 0) {
- dir_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
- if (dir_lookup)
- X509_LOOKUP_add_dir(dir_lookup, NULL, X509_FILETYPE_DEFAULT);
- }
- return store;
-}
-/* }}} */
-
-/* {{{ proto resource openssl_x509_read(mixed cert)
- Reads X.509 certificates */
-PHP_FUNCTION(openssl_x509_read)
-{
- zval *cert;
- X509 *x509;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &cert) == FAILURE)
- return;
-
- Z_TYPE_P(return_value) = IS_RESOURCE;
- x509 = php_openssl_x509_from_zval(&cert, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
-
- if (x509 == NULL) {
- zend_error(E_WARNING, "%s() supplied parameter cannot be coerced into an X509 certificate!", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void openssl_x509_free(resource x509)
- Frees X.509 certificates */
-PHP_FUNCTION(openssl_x509_free)
-{
- zval *x509;
- X509 *cert;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &x509) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(cert, X509 *, &x509, -1, "OpenSSL X.509", le_x509);
- zend_list_delete(Z_LVAL_P(x509));
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ x509 CSR functions */
-
-/* {{{ php_openssl_make_REQ */
-static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, zval * dn, zval * attribs TSRMLS_DC)
-{
- STACK_OF(CONF_VALUE) * dn_sk, *attr_sk = NULL;
- char * str, *dn_sect, *attr_sect;
-
- dn_sect = CONF_get_string(req->req_config, req->section_name, "distinguished_name");
- if (dn_sect == NULL)
- return FAILURE;
- dn_sk = CONF_get_section(req->req_config, dn_sect);
- if (dn_sk == NULL)
- return FAILURE;
- attr_sect = CONF_get_string(req->req_config, req->section_name, "attributes");
- if (attr_sect == NULL)
- attr_sk = NULL;
- else {
- attr_sk = CONF_get_section(req->req_config, attr_sect);
- if (attr_sk == NULL)
- return FAILURE;
- }
- /* setup the version number: version 1 */
- if (X509_REQ_set_version(csr, 0L)) {
- int i, nid;
- char * type;
- CONF_VALUE * v;
- X509_NAME * subj;
- HashPosition hpos;
- zval ** item;
-
- subj = X509_REQ_get_subject_name(csr);
- /* apply values from the dn hash */
- zend_hash_internal_pointer_reset_ex(HASH_OF(dn), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(dn), (void**)&item, &hpos) == SUCCESS) {
- char * strindex; int strindexlen;
- long intindex;
-
- zend_hash_get_current_key_ex(HASH_OF(dn), &strindex, &strindexlen, &intindex, 0, &hpos);
-
- convert_to_string_ex(item);
-
- if (strindex) {
- int nid;
-
- nid = OBJ_txt2nid(strindex);
- if (nid != NID_undef) {
- if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_ASC,
- (unsigned char*)Z_STRVAL_PP(item), -1, -1, 0))
- {
- zend_error(E_WARNING, "dn: add_entry_by_NID %d -> %s (failed)", nid, Z_STRVAL_PP(item));
- return FAILURE;
- }
- }
- else zend_error(E_WARNING, "dn: %s is not a recognized name", strindex);
- }
- zend_hash_move_forward_ex(HASH_OF(dn), &hpos);
- }
-
- /* Finally apply defaults from config file */
- for(i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) {
- int len;
- char buffer[200];
-
- v = sk_CONF_VALUE_value(dn_sk, i);
- type = v->name;
-
- len = strlen(type);
- if (len < sizeof("_default"))
- continue;
- len -= sizeof("_default") - 1;
- if (strcmp("_default", type + len) != 0) {
- continue;
- }
-
- memcpy(buffer, type, len);
- buffer[len] = '\0';
- type = buffer;
-
- /* Skip past any leading X. X: X, etc to allow for multiple
- * instances */
- for (str = type; *str; str++) {
- if (*str == ':' || *str == ',' || *str == '.') {
- str++;
- if (*str)
- type = str;
- break;
- }
- }
- /* if it is already set, skip this */
- nid = OBJ_txt2nid(type);
- if (X509_NAME_get_index_by_NID(subj, nid, -1) >= 0)
- continue;
- zend_printf("%s not already set; using default of %s\n", type, v->value);
- if (!X509_NAME_add_entry_by_txt(subj, type, MBSTRING_ASC, (unsigned char*)v->value, -1, -1, 0))
- {
- zend_error(E_WARNING, "add_entry_by_txt %s -> %s (failed)", type, v->value);
- return FAILURE;
- }
- if (!X509_NAME_entry_count(subj)) {
- zend_error(E_WARNING, "no objects specified in config file");
- return FAILURE;
- }
- }
- if (attribs) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(attribs), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(attribs), (void**)&item, &hpos) == SUCCESS) {
- char * strindex; int strindexlen;
- long intindex;
-
- zend_hash_get_current_key_ex(HASH_OF(attribs), &strindex, &strindexlen, &intindex, 0, &hpos);
- convert_to_string_ex(item);
-
- if (strindex) {
- int nid;
-
- nid = OBJ_txt2nid(strindex);
- if (nid != NID_undef) {
- if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_ASC,
- (unsigned char*)Z_STRVAL_PP(item), -1, -1, 0))
- {
- zend_error(E_WARNING, "attribs: add_entry_by_NID %d -> %s (failed)", nid, Z_STRVAL_PP(item));
- return FAILURE;
- }
- }
- else zend_error(E_WARNING, "dn: %s is not a recognized name", strindex);
- }
- zend_hash_move_forward_ex(HASH_OF(attribs), &hpos);
- }
- for (i = 0; i < sk_CONF_VALUE_num(attr_sk); i++) {
- v = sk_CONF_VALUE_value(attr_sk, i);
- /* if it is already set, skip this */
- nid = OBJ_txt2nid(v->name);
- if (X509_REQ_get_attr_by_NID(csr, nid, -1) >= 0)
- continue;
-
- if (!X509_REQ_add1_attr_by_txt(csr, v->name, MBSTRING_ASC,
- (unsigned char*)v->value, -1))
- {
- zend_error(E_WARNING, "add1_attr_by_txt %s -> %s (failed)", v->name, v->value);
- return FAILURE;
- }
- }
-
- }
- }
-
- X509_REQ_set_pubkey(csr, req->priv_key);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_openssl_csr_from_zval */
-static X509_REQ * php_openssl_csr_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC)
-{
- X509_REQ * csr = NULL;
- char * filename = NULL;
- BIO * in;
-
- if (resourceval)
- *resourceval = -1;
-
- if (Z_TYPE_PP(val) == IS_RESOURCE) {
- void * what;
- int type;
-
- what = zend_fetch_resource(val TSRMLS_CC, -1, "OpenSSL X.509 CSR", &type, 1, le_csr);
- if (what) {
- if (resourceval)
- *resourceval = Z_LVAL_PP(val);
- return (X509_REQ*)what;
- }
- return NULL;
- }
- convert_to_string_ex(val);
-
- if (Z_STRLEN_PP(val) > 7 && memcmp(Z_STRVAL_PP(val), "file://", 7) == 0)
- filename = Z_STRVAL_PP(val) + 7;
-
- if (filename)
- in = BIO_new_file(filename, "r");
- else
- in = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
-
- csr = PEM_read_bio_X509_REQ(in, NULL,NULL,NULL);
- BIO_free(in);
-
- return csr;
-}
-/* }}} */
-
-/* {{{ proto bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])
- Exports a CSR to file or a var */
-PHP_FUNCTION(openssl_csr_export_to_file)
-{
- X509_REQ * csr;
- zval * zcsr = NULL;
- zend_bool notext = 1;
- char * filename = NULL; long filename_len;
- BIO * bio_out;
- long csr_resource;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|b", &zcsr, &filename, &filename_len, &notext) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- csr = php_openssl_csr_from_zval(&zcsr, 0, &csr_resource TSRMLS_CC);
- if (csr == NULL) {
- zend_error(E_WARNING, "cannot get CSR from parameter 1");
- return;
- }
-
- bio_out = BIO_new_file(filename, "w");
- if (bio_out) {
- if (!notext)
- X509_REQ_print(bio_out, csr);
- PEM_write_bio_X509_REQ(bio_out, csr);
- RETVAL_TRUE;
- }
- else
- zend_error(E_WARNING, "error opening file %s", filename);
-
- if (csr_resource == -1 && csr)
- X509_REQ_free(csr);
-
- BIO_free(bio_out);
-}
-/* }}} */
-
-
-
-/* {{{ proto bool openssl_csr_export(resource csr, string &out [, bool notext=true])
- Exports a CSR to file or a var */
-PHP_FUNCTION(openssl_csr_export)
-{
- X509_REQ * csr;
- zval * zcsr = NULL, *zout=NULL;
- zend_bool notext = 1;
- BIO * bio_out;
- long csr_resource;
- char * bio_mem_ptr;
- long bio_mem_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|b", &zcsr, &zout, &notext) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- csr = php_openssl_csr_from_zval(&zcsr, 0, &csr_resource TSRMLS_CC);
- if (csr == NULL) {
- zend_error(E_WARNING, "cannot get CSR from parameter 1");
- return;
- }
-
- /* export to a var */
-
- bio_out = BIO_new(BIO_s_mem());
- if (!notext)
- X509_REQ_print(bio_out, csr);
- PEM_write_bio_X509_REQ(bio_out, csr);
-
- bio_mem_len = BIO_get_mem_data(bio_out, &bio_mem_ptr);
- ZVAL_STRINGL(zout, bio_mem_ptr, bio_mem_len, 1);
-
- RETVAL_TRUE;
-
- if (csr_resource == -1 && csr)
- X509_REQ_free(csr);
-
- BIO_free(bio_out);
-}
-/* }}} */
-
-/* {{{ proto resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days)
- Signs a cert with another CERT */
-PHP_FUNCTION(openssl_csr_sign)
-{
- zval * zcert = NULL, *zcsr, *zpkey, *args = NULL;
- long num_days;
- X509 * cert = NULL, *new_cert = NULL;
- X509_REQ * csr;
- EVP_PKEY * key = NULL, *priv_key;
- long csr_resource, certresource, keyresource;
- int i;
- struct php_x509_request req;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz!zl|a!", &zcsr, &zcert, &zpkey, &num_days, &args) == FAILURE)
- return;
-
- RETVAL_FALSE;
- PHP_SSL_REQ_INIT(&req);
-
- csr = php_openssl_csr_from_zval(&zcsr, 0, &csr_resource TSRMLS_CC);
- if (csr == NULL) {
- zend_error(E_WARNING, "cannot get CSR from parameter 1");
- return;
- }
- if (zcert) {
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- zend_error(E_WARNING, "cannot get cert from parameter 2");
- goto cleanup;
- }
- }
- priv_key = php_openssl_evp_from_zval(&zpkey, 0, "", 1, &keyresource TSRMLS_CC);
- if (priv_key == NULL) {
- zend_error(E_WARNING, "cannot get private key from parameter 3");
- goto cleanup;
- }
- if (cert && !X509_check_private_key(cert, key)) {
- zend_error(E_WARNING, "private key does not correspond to signing cert");
- goto cleanup;
- }
-
- if (PHP_SSL_REQ_PARSE(&req, args) == FAILURE)
- goto cleanup;
-
- /* Check that the request matches the signature */
- key = X509_REQ_get_pubkey(csr);
- if (key == NULL) {
- zend_error(E_WARNING, "error unpacking public key");
- goto cleanup;
- }
- i = X509_REQ_verify(csr, key);
-
- if (i < 0) {
- zend_error(E_WARNING, "Signature verification problems");
- goto cleanup;
- }
- else if (i==0) {
- zend_error(E_WARNING, "Signature did not match the certificate request");
- goto cleanup;
- }
-
- /* Now we can get on with it */
-
- new_cert = X509_new();
- if (new_cert == NULL) {
- zend_error(E_WARNING, "No memory");
- goto cleanup;
- }
- /* Version 3 cert */
- if (!X509_set_version(new_cert, 3))
- goto cleanup;
-
- /* TODO: Allow specifying */
- ASN1_INTEGER_set(X509_get_serialNumber(new_cert), 0L);
-
- X509_set_subject_name(new_cert, X509_REQ_get_subject_name(csr));
-
- if (cert == NULL)
- cert = new_cert;
-
- if (!X509_set_issuer_name(new_cert, X509_get_subject_name(cert)))
- goto cleanup;
-
- X509_gmtime_adj(X509_get_notBefore(new_cert), 0);
- X509_gmtime_adj(X509_get_notAfter(new_cert), (long)60*60*24*num_days);
- i = X509_set_pubkey(new_cert, key);
- if (!i)
- goto cleanup;
-
- if (req.request_extensions_section) {
- X509V3_CTX ctx;
-
- X509V3_set_ctx(&ctx, cert, new_cert, csr, NULL, 0);
- X509V3_set_conf_lhash(&ctx, req.req_config);
- if (!X509V3_EXT_add_conf(req.req_config, &ctx, req.request_extensions_section, new_cert))
- goto cleanup;
- }
-
- /* Now sign it */
- if (!X509_sign(new_cert, priv_key, req.digest)) {
- zend_error(E_WARNING, "failed to sign it");
- goto cleanup;
- }
-
- /* Succeeded; lets return the cert */
- RETVAL_RESOURCE(zend_list_insert(new_cert, le_x509));
- new_cert = NULL;
-
-cleanup:
-
- if (cert == new_cert)
- cert = NULL;
-
- PHP_SSL_REQ_DISPOSE(&req);
-
- if (keyresource == -1 && priv_key)
- EVP_PKEY_free(priv_key);
- if (key)
- EVP_PKEY_free(key);
- if (csr_resource == -1 && csr)
- X509_REQ_free(csr);
- if (certresource == -1 && cert)
- X509_free(cert);
- if (new_cert)
- X509_free(new_cert);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_csr_new(array dn, resource &privkey [, array extraattribs, array configargs])
- Generates a privkey and CSR */
-PHP_FUNCTION(openssl_csr_new)
-{
- struct php_x509_request req;
- zval * args = NULL, * dn, *attribs = NULL;
- zval * out_pkey;
- X509_REQ * csr = NULL;
- int we_made_the_key = 1;
- long key_resource;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az|a!a!", &dn, &out_pkey, &args, &attribs) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS)
- {
- /* Generate or use a private key */
- if (Z_TYPE_P(out_pkey) != IS_NULL) {
- req.priv_key = php_openssl_evp_from_zval(&out_pkey, 0, NULL, 0, &key_resource TSRMLS_CC);
- if (req.priv_key != NULL)
- we_made_the_key = 0;
- }
- if (req.priv_key == NULL)
- php_openssl_generate_private_key(&req TSRMLS_CC);
- if (req.priv_key == NULL)
- zend_error(E_WARNING, "Unable to generate a private key");
- else {
- csr = X509_REQ_new();
- if (csr) {
- if (php_openssl_make_REQ(&req, csr, dn, attribs TSRMLS_CC) == SUCCESS) {
- X509V3_CTX ext_ctx;
-
- X509V3_set_ctx(&ext_ctx, NULL, NULL, csr, NULL, 0);
- X509V3_set_conf_lhash(&ext_ctx, req.req_config);
-
- /* Add extensions */
- if (req.request_extensions_section && !X509V3_EXT_REQ_add_conf(req.req_config,
- &ext_ctx, req.request_extensions_section, csr))
- {
- zend_error(E_WARNING, "Error loading extension section %s", req.request_extensions_section);
- }
- else {
- RETVAL_TRUE;
-
- if (X509_REQ_sign(csr, req.priv_key, req.digest)) {
-
- RETVAL_RESOURCE(zend_list_insert(csr, le_csr));
- csr = NULL;
- }
- else
- zend_error(E_WARNING, "Error signing request");
-
- if (we_made_the_key) {
- /* and a resource for the private key */
- ZVAL_RESOURCE(out_pkey, zend_list_insert(req.priv_key, le_key));
- }
- else if (key_resource != -1)
- req.priv_key = NULL; /* make sure the cleanup code doesn't zap it! */
- }
- }
- }
- }
- }
- if (csr)
- X509_REQ_free(csr);
- PHP_SSL_REQ_DISPOSE(&req);
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ EVP Public/Private key functions */
-
-/* {{{ php_openssl_evp_from_zval
- Given a zval, coerce it into a EVP_PKEY object.
- It can be:
- 1. private key resource from openssl_get_privatekey()
- 2. X509 resource -> public key will be extracted from it
- 3. if it starts with file:// interpreted as path to key file
- 4. interpreted as the data from the cert/key file and interpreted in same way as openssl_get_privatekey()
- 5. an array(0 => [items 2..4], 1 => passphrase)
- NOTE: If you are requesting a private key but have not specified a passphrase, you should use an
- empty string rather than NULL for the passphrase - NULL causes a passphrase prompt to be emitted in
- the Apache error log!
-*/
-static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char * passphrase, int makeresource, long * resourceval TSRMLS_DC)
-{
- EVP_PKEY * key = NULL;
- X509 * cert = NULL;
- int free_cert = 0;
- long cert_res = -1;
- char * filename = NULL;
-
- if (resourceval)
- *resourceval = -1;
-
- if (Z_TYPE_PP(val) == IS_ARRAY) {
- zval ** zphrase;
-
- /* get passphrase */
-
- if (zend_hash_index_find(HASH_OF(*val), 1, (void **)&zphrase) == FAILURE) {
- zend_error(E_WARNING, "%s(): key array must be of the form array(0 => key, 1 => phrase)", get_active_function_name(TSRMLS_C));
- return NULL;
- }
- convert_to_string_ex(zphrase);
- passphrase = Z_STRVAL_PP(zphrase);
-
- /* now set val to be the key param and continue */
- if (zend_hash_index_find(HASH_OF(*val), 0, (void **)&val) == FAILURE) {
- zend_error(E_WARNING, "%s(): key array must be of the form array(0 => key, 1 => phrase)", get_active_function_name(TSRMLS_C));
- return NULL;
- }
- }
-
- if (Z_TYPE_PP(val) == IS_RESOURCE) {
- void * what;
- int type;
-
- what = zend_fetch_resource(val TSRMLS_CC, -1, "OpenSSL X.509/key", &type, 2, le_x509, le_key);
- if (!what)
- return NULL;
-
- if (resourceval)
- *resourceval = Z_LVAL_PP(val);
-
- if (type == le_x509) {
- /* extract key from cert, depending on public_key param */
- cert = (X509*)what;
- free_cert = 0;
- }
- else if (type == le_key) {
- /* got the key - return it */
- return (EVP_PKEY*)what;
- }
-
- /* other types could be used here - eg: file pointers and read in the data from them */
-
- return NULL;
- }
- else {
- /* force it to be a string and check if it refers to a file */
- convert_to_string_ex(val);
-
- if (Z_STRLEN_PP(val) > 7 && memcmp(Z_STRVAL_PP(val), "file://", 7) == 0)
- filename = Z_STRVAL_PP(val) + 7;
-
- /* it's an X509 file/cert of some kind, and we need to extract the data from that */
- if (public_key) {
- cert = php_openssl_x509_from_zval(val, 0, &cert_res TSRMLS_CC);
- free_cert = (cert_res == -1);
- /* actual extraction done later */
- }
- else {
- /* we want the private key */
- if (filename) {
- BIO *in = BIO_new_file(filename, "r");
- if (in == NULL)
- return NULL;
- key = PEM_read_bio_PrivateKey(in, NULL,NULL, passphrase);
- BIO_free(in);
- }
- else {
- BIO * b = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- if (b == NULL)
- return NULL;
-
- key = (EVP_PKEY *) PEM_ASN1_read_bio((char *(*)())d2i_PrivateKey,
- PEM_STRING_EVP_PKEY, b,
- NULL, NULL, passphrase);
- BIO_free(b);
- }
- }
- }
-
- if (public_key && cert && key == NULL) {
- /* extract public key from X509 cert */
- key = (EVP_PKEY *) X509_get_pubkey(cert);
- }
-
- if (free_cert && cert)
- X509_free(cert);
-
- if (key && makeresource && resourceval) {
- *resourceval = ZEND_REGISTER_RESOURCE(NULL, key, le_key);
- }
- return key;
-}
-/* }}} */
-
-/* {{{ php_openssl_generate_private_key */
-static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req TSRMLS_DC)
-{
- char * randfile = NULL;
- int egdsocket, seeded;
- EVP_PKEY * return_val = NULL;
-
- if (req->priv_key_bits < MIN_KEY_LENGTH) {
- zend_error(E_WARNING, "private key length is too short; it needs to be at least %d bits, not %d",
- MIN_KEY_LENGTH, req->priv_key_bits);
- return NULL;
- }
-
- randfile = CONF_get_string(req->req_config, req->section_name, "RANDFILE");
- php_openssl_load_rand_file(randfile, &egdsocket, &seeded);
-
- if ((req->priv_key = EVP_PKEY_new()) != NULL) {
- switch(req->priv_key_type) {
- case OPENSSL_KEYTYPE_RSA:
- if (EVP_PKEY_assign_RSA(req->priv_key, RSA_generate_key(req->priv_key_bits, 0x10001, NULL, NULL)))
- return_val = req->priv_key;
- break;
- default:
- zend_error(E_WARNING, "Unsupported private key type");
- }
- }
-
- php_openssl_write_rand_file(randfile, egdsocket, seeded);
-
- if (return_val == NULL) {
- EVP_PKEY_free(req->priv_key);
- req->priv_key = NULL;
- return NULL;
- }
-
- return return_val;
-}
-/* }}} */
-
-/* {{{ proto resource openssl_pkey_new([array configargs])
- Generates a new private key */
-PHP_FUNCTION(openssl_pkey_new)
-{
- struct php_x509_request req;
- zval * args = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &args) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS)
- {
- if (php_openssl_generate_private_key(&req TSRMLS_CC)) {
- /* pass back a key resource */
- RETVAL_RESOURCE(zend_list_insert(req.priv_key, le_key));
- /* make sure the cleanup code doesn't zap it! */
- req.priv_key = NULL;
- }
- }
- PHP_SSL_REQ_DISPOSE(&req);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)
- Gets an exportable representation of a key into a file */
-PHP_FUNCTION(openssl_pkey_export_to_file)
-{
- struct php_x509_request req;
- zval * zpkey, * args = NULL;
- char * passphrase = NULL; long passphrase_len = 0;
- char * filename = NULL; long filename_len = 0;
- long key_resource = -1;
- EVP_PKEY * key;
- BIO * bio_out = NULL;
- EVP_CIPHER * cipher;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|s!a!", &zpkey, &filename, &filename_len, &passphrase, &passphrase_len, &args) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- key = php_openssl_evp_from_zval(&zpkey, 0, passphrase, 0, &key_resource TSRMLS_CC);
-
- if (key == NULL) {
- zend_error(E_WARNING, "cannot get key from parameter 1");
- RETURN_FALSE;
- }
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS)
- {
- bio_out = BIO_new_file(filename, "w");
-
- if (passphrase && req.priv_key_encrypt)
- cipher = EVP_des_ede3_cbc();
- else
- cipher = NULL;
-
- if (PEM_write_bio_PrivateKey(bio_out, key, cipher, passphrase, passphrase_len, NULL, NULL)) {
- /* Success!
- * If returning the output as a string, do so now */
- RETVAL_TRUE;
- }
- }
- PHP_SSL_REQ_DISPOSE(&req);
-
- if (key_resource == -1 && key) {
- EVP_PKEY_free(key);
- }
- if (bio_out)
- BIO_free(bio_out);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])
- Gets an exportable representation of a key into a string or file */
-PHP_FUNCTION(openssl_pkey_export)
-{
- struct php_x509_request req;
- zval * zpkey, * args = NULL, *out;
- char * passphrase = NULL; long passphrase_len = 0;
- long key_resource = -1;
- EVP_PKEY * key;
- BIO * bio_out = NULL;
- EVP_CIPHER * cipher;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|s!a!", &zpkey, &out, &passphrase, &passphrase_len, &args) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- key = php_openssl_evp_from_zval(&zpkey, 0, passphrase, 0, &key_resource TSRMLS_CC);
-
- if (key == NULL) {
- zend_error(E_WARNING, "cannot get key from parameter 1");
- RETURN_FALSE;
- }
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS)
- {
- bio_out = BIO_new(BIO_s_mem());
-
- if (passphrase && req.priv_key_encrypt)
- cipher = EVP_des_ede3_cbc();
- else
- cipher = NULL;
-
- if (PEM_write_bio_PrivateKey(bio_out, key, cipher, passphrase, passphrase_len, NULL, NULL)) {
- /* Success!
- * If returning the output as a string, do so now */
-
- char * bio_mem_ptr;
- long bio_mem_len;
- RETVAL_TRUE;
-
- bio_mem_len = BIO_get_mem_data(bio_out, &bio_mem_ptr);
- ZVAL_STRINGL(out, bio_mem_ptr, bio_mem_len, 1);
- }
- }
- PHP_SSL_REQ_DISPOSE(&req);
-
- if (key_resource == -1 && key) {
- EVP_PKEY_free(key);
- }
- if (bio_out)
- BIO_free(bio_out);
-}
-/* }}} */
-
-/* {{{ proto int openssl_pkey_get_public(mixed cert)
- Gets public key from X.509 certificate */
-PHP_FUNCTION(openssl_pkey_get_public)
-{
- zval *cert;
- EVP_PKEY *pkey;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &cert) == FAILURE)
- return;
-
- Z_TYPE_P(return_value) = IS_RESOURCE;
- pkey = php_openssl_evp_from_zval(&cert, 1, NULL, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
-
- if (pkey == NULL) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void openssl_pkey_free(int key)
- Frees a key */
-PHP_FUNCTION(openssl_pkey_free)
-{
- zval *key;
- EVP_PKEY *pkey;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &key) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(pkey, EVP_PKEY *, &key, -1, "OpenSSL key", le_key);
- zend_list_delete(Z_LVAL_P(key));
-}
-/* }}} */
-
-/* {{{ proto int openssl_pkey_get_private(string key [, string passphrase])
- Gets private keys */
-PHP_FUNCTION(openssl_pkey_get_private)
-{
- zval *cert;
- EVP_PKEY *pkey;
- char * passphrase = "";
- long passphrase_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &cert, &passphrase, &passphrase_len) == FAILURE)
- return;
-
- Z_TYPE_P(return_value) = IS_RESOURCE;
- pkey = php_openssl_evp_from_zval(&cert, 0, passphrase, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
-
- if (pkey == NULL) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* }}} */
-
-/* {{{ PKCS7 S/MIME functions */
-
-/* {{{ proto bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts]]])
- Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers */
-PHP_FUNCTION(openssl_pkcs7_verify)
-{
- X509_STORE * store = NULL;
- zval * cainfo = NULL;
- STACK_OF(X509) *signers= NULL;
- STACK_OF(X509) *others = NULL;
- PKCS7 * p7 = NULL;
- BIO * in = NULL, * datain = NULL;
- long flags = 0;
- char * filename; long filename_len;
- char * extracerts = NULL; long extracerts_len;
- char * signersfilename = NULL; long signersfilename_len;
-
- RETVAL_LONG(-1);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|sas", &filename, &filename_len,
- &flags, &signersfilename, &signersfilename_len, &cainfo,
- &extracerts, &extracerts_len) == FAILURE)
- return;
-
- if (extracerts) {
- others = load_all_certs_from_file(extracerts);
- if (others == NULL)
- goto clean_exit;
- }
-
- flags = flags & ~PKCS7_DETACHED;
-
- store = setup_verify(cainfo TSRMLS_CC);
-
- if (!store)
- goto clean_exit;
-
- in = BIO_new_file(filename, (flags & PKCS7_BINARY) ? "rb" : "r");
- if (in == NULL)
- goto clean_exit;
- p7 = SMIME_read_PKCS7(in, &datain);
- if (p7 == NULL) {
-#if DEBUG_SMIME
- zend_printf("SMIME_read_PKCS7 failed\n");
-#endif
- goto clean_exit;
- }
-#if DEBUG_SMIME
- zend_printf("Calling PKCS7 verify\n");
-#endif
-
- if (PKCS7_verify(p7, others, store, datain, NULL, flags)) {
-
- RETVAL_TRUE;
-
- if (signersfilename) {
- BIO * certout = BIO_new_file(signersfilename, "w");
- if (certout) {
- int i;
- signers = PKCS7_get0_signers(p7, NULL, flags);
-
- for(i = 0; i < sk_X509_num(signers); i++)
- PEM_write_bio_X509(certout, sk_X509_value(signers, i));
-
- BIO_free(certout);
- sk_X509_free(signers);
- }
- else {
- zend_error(E_WARNING, "%s(): signature OK, but cannot open %s for writing",
- get_active_function_name(TSRMLS_C), signersfilename);
- RETVAL_LONG(-1);
- }
- }
- goto clean_exit;
- }
- else
- RETVAL_FALSE;
-clean_exit:
- X509_STORE_free(store);
- BIO_free(datain);
- BIO_free(in);
- PKCS7_free(p7);
- sk_X509_free(others);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags])
- Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile */
-PHP_FUNCTION(openssl_pkcs7_encrypt)
-{
- zval * zrecipcerts, * zheaders = NULL;
- STACK_OF(X509) * recipcerts = NULL;
- BIO * infile = NULL, * outfile = NULL;
- long flags = 0;
- PKCS7 * p7 = NULL;
- HashPosition hpos;
- zval ** zcertval;
- X509 * cert;
- EVP_CIPHER *cipher = NULL;
- uint strindexlen;
- ulong intindex;
- char * strindex;
- char * infilename = NULL; long infilename_len;
- char * outfilename = NULL; long outfilename_len;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssza!|l", &infilename, &infilename_len,
- &outfilename, &outfilename_len, &zrecipcerts, &zheaders, &flags) == FAILURE)
- return;
-
- infile = BIO_new_file(infilename, "r");
- if (infile == NULL)
- goto clean_exit;
-
- outfile = BIO_new_file(outfilename, "w");
- if (outfile == NULL)
- goto clean_exit;
-
- recipcerts = sk_X509_new_null();
-
- /* get certs */
- if (Z_TYPE_P(zrecipcerts) == IS_ARRAY) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(zrecipcerts), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(zrecipcerts), (void**)&zcertval, &hpos) == SUCCESS) {
- long certresource;
-
- cert = php_openssl_x509_from_zval(zcertval, 0, &certresource TSRMLS_CC);
- if (cert == NULL)
- goto clean_exit;
-
- if (certresource != -1) {
- /* we shouldn't free this particular cert, as it is a resource.
- make a copy and push that on the stack instead */
- cert = X509_dup(cert);
- if (cert == NULL)
- goto clean_exit;
- }
- sk_X509_push(recipcerts, cert);
-
- zend_hash_move_forward_ex(HASH_OF(zrecipcerts), &hpos);
- }
- }
- else {
- /* a single certificate */
- long certresource;
-
- cert = php_openssl_x509_from_zval(&zrecipcerts, 0, &certresource TSRMLS_CC);
- if (cert == NULL)
- goto clean_exit;
-
- if (certresource != -1) {
- /* we shouldn't free this particular cert, as it is a resource.
- make a copy and push that on the stack instead */
- cert = X509_dup(cert);
- if (cert == NULL)
- goto clean_exit;
- }
- sk_X509_push(recipcerts, cert);
- }
-
- /* TODO: allow user to choose a different cipher */
- cipher = EVP_rc2_40_cbc();
- if (cipher == NULL)
- goto clean_exit;
-
- p7 = PKCS7_encrypt(recipcerts, infile, cipher, flags);
-
- if (p7 == NULL)
- goto clean_exit;
-
- /* tack on extra headers */
- if (zheaders) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(zheaders), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(zheaders), (void**)&zcertval, &hpos) == SUCCESS) {
- zend_hash_get_current_key_ex(HASH_OF(zheaders), &strindex, &strindexlen, &intindex, 0, &hpos);
-
- convert_to_string_ex(zcertval);
-
- if (strindex)
- BIO_printf(outfile, "%s: %s\n", strindex, Z_STRVAL_PP(zcertval));
- else
- BIO_printf(outfile, "%s\n", Z_STRVAL_PP(zcertval));
-
- zend_hash_move_forward_ex(HASH_OF(zheaders), &hpos);
- }
- }
-
- BIO_reset(infile);
-
- /* write the encrypted data */
- SMIME_write_PKCS7(outfile, p7, infile, flags);
-
- RETVAL_TRUE;
-
-
-clean_exit:
- PKCS7_free(p7);
- BIO_free(infile);
- BIO_free(outfile);
- if (recipcerts)
- sk_X509_pop_free(recipcerts, X509_free);
-
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])
- Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum */
-
-PHP_FUNCTION(openssl_pkcs7_sign)
-{
- zval * zcert, * zprivkey, * zheaders;
- zval ** hval;
- X509 * cert = NULL;
- EVP_PKEY * privkey = NULL;
- long flags = PKCS7_DETACHED;
- PKCS7 * p7 = NULL;
- BIO * infile = NULL, * outfile = NULL;
- STACK_OF(X509) *others = NULL;
- long certresource = -1, keyresource = -1;
- ulong intindex;
- uint strindexlen;
- HashPosition hpos;
- char * strindex;
- char * infilename; long infilename_len;
- char * outfilename; long outfilename_len;
- char * extracertsfilename = NULL; long extracertsfilename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sszza!|ls",
- &infilename, &infilename_len, &outfilename, &outfilename_len,
- &zcert, &zprivkey, &zheaders, &flags, &extracertsfilename,
- &extracertsfilename_len) == FAILURE)
- return;
-
-
- RETVAL_FALSE;
-
- if (extracertsfilename) {
- others = load_all_certs_from_file(extracertsfilename);
- if (others == NULL)
- goto clean_exit;
- }
-
- privkey = php_openssl_evp_from_zval(&zprivkey, 0, "", 0, &keyresource TSRMLS_CC);
- if (privkey == NULL) {
- zend_error(E_WARNING, "%s(): error getting private key", get_active_function_name(TSRMLS_C));
- goto clean_exit;
- }
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- zend_error(E_WARNING, "%s(): error getting cert", get_active_function_name(TSRMLS_C));
- goto clean_exit;
- }
-
- infile = BIO_new_file(infilename, "r");
- if (infile == NULL) {
- zend_error(E_WARNING, "%s(): error opening input file %s!", get_active_function_name(TSRMLS_C), infilename);
- goto clean_exit;
- }
-
- outfile = BIO_new_file(outfilename, "w");
- if (outfile == NULL) {
- zend_error(E_WARNING, "%s(): error opening output file %s!", get_active_function_name(TSRMLS_C), outfilename);
- goto clean_exit;
- }
-
- p7 = PKCS7_sign(cert, privkey, others, infile, flags);
- if (p7 == NULL) {
- zend_error(E_WARNING, "%s(): error creating PKCS7 structure!", get_active_function_name(TSRMLS_C));
- goto clean_exit;
- }
-
- BIO_reset(infile);
-
- /* tack on extra headers */
- if (zheaders) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(zheaders), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(zheaders), (void**)&hval, &hpos) == SUCCESS) {
- zend_hash_get_current_key_ex(HASH_OF(zheaders), &strindex, &strindexlen, &intindex, 0, &hpos);
-
- convert_to_string_ex(hval);
-
- if (strindex)
- BIO_printf(outfile, "%s: %s\n", strindex, Z_STRVAL_PP(hval));
- else
- BIO_printf(outfile, "%s\n", Z_STRVAL_PP(hval));
-
- zend_hash_move_forward_ex(HASH_OF(zheaders), &hpos);
- }
- }
- /* write the signed data */
- SMIME_write_PKCS7(outfile, p7, infile, flags);
-
- RETVAL_TRUE;
-
-clean_exit:
- PKCS7_free(p7);
- BIO_free(infile);
- BIO_free(outfile);
- if (others)
- sk_X509_pop_free(others, X509_free);
- if (privkey && keyresource == -1)
- EVP_PKEY_free(privkey);
- if (cert && certresource == -1)
- X509_free(cert);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])
- Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename. recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key */
-
-PHP_FUNCTION(openssl_pkcs7_decrypt)
-{
- zval * recipcert, * recipkey = NULL;
- X509 * cert = NULL;
- EVP_PKEY * key = NULL;
- long certresval, keyresval;
- BIO * in = NULL, * out = NULL, * datain = NULL;
- PKCS7 * p7 = NULL;
- char * infilename; long infilename_len;
- char * outfilename; long outfilename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz|z", &infilename, &infilename_len,
- &outfilename, &outfilename_len, &recipcert, &recipkey) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- cert = php_openssl_x509_from_zval(&recipcert, 0, &certresval TSRMLS_CC);
- if (cert == NULL) {
- zend_error(E_WARNING, "%s(): unable to coerce parameter 3 to x509 cert", get_active_function_name(TSRMLS_C));
- goto clean_exit;
- }
-
- key = php_openssl_evp_from_zval(recipkey ? &recipkey : &recipcert, 0, "", 0, &keyresval TSRMLS_CC);
- if (key == NULL) {
- zend_error(E_WARNING, "%s(): unable to get private key", get_active_function_name(TSRMLS_C));
- goto clean_exit;
- }
-
- in = BIO_new_file(infilename, "r");
- if (in == NULL) {
- goto clean_exit;
- }
- out = BIO_new_file(outfilename, "w");
- if (out == NULL) {
- goto clean_exit;
- }
-
- p7 = SMIME_read_PKCS7(in, &datain);
-
- if (p7 == NULL)
- goto clean_exit;
-
- if (PKCS7_decrypt(p7, key, cert, out, PKCS7_DETACHED))
- RETVAL_TRUE;
-
-clean_exit:
- PKCS7_free(p7);
- BIO_free(datain);
- BIO_free(in);
- BIO_free(out);
- if (cert && certresval == -1)
- X509_free(cert);
- if (key && keyresval == -1)
- EVP_PKEY_free(key);
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ proto bool openssl_private_encrypt(string data, string crypted, mixed key [, int padding])
- Encrypts data with private key */
-PHP_FUNCTION(openssl_private_encrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf = NULL;
- int successful = 0;
- long keyresource = -1;
- char * data;
- long data_len, padding = RSA_PKCS1_PADDING;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC);
-
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): key param is not a valid private key",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- successful = (RSA_private_encrypt(data_len,
- data,
- cryptedbuf,
- pkey->pkey.rsa,
- padding) == cryptedlen);
- break;
- default:
- zend_error(E_WARNING, "%s(): key type not supported in this PHP build!");
- }
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
- if (cryptedbuf)
- efree(cryptedbuf);
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_private_decrypt(string data, string decrypted, mixed key [, int padding])
- Decrypts data with private key */
-PHP_FUNCTION(openssl_private_decrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf = NULL;
- unsigned char *crypttemp;
- int successful = 0;
- long padding = RSA_PKCS1_PADDING;
- long keyresource = -1;
- char * data;
- long data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): key parameter is not a valid private key", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- crypttemp = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- cryptedlen = RSA_private_decrypt(data_len,
- data,
- crypttemp,
- pkey->pkey.rsa,
- padding);
- if (cryptedlen != -1) {
- cryptedbuf = emalloc(cryptedlen + 1);
- memcpy(cryptedbuf, crypttemp, cryptedlen);
- successful = 1;
- }
- break;
- default:
- zend_error(E_WARNING, "%s(): key type not supported in this PHP build!",
- get_active_function_name(TSRMLS_C));
- }
-
- efree(crypttemp);
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
-
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
- if (cryptedbuf)
- efree(cryptedbuf);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_public_encrypt(string data, string crypted, mixed key [, int padding])
- Encrypts data with public key */
-PHP_FUNCTION(openssl_public_encrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf;
- int successful = 0;
- long keyresource = -1;
- long padding = RSA_PKCS1_PADDING;
- char * data;
- long data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 1, NULL, 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): key parameter is not a valid public key", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- successful = (RSA_public_encrypt(data_len,
- data,
- cryptedbuf,
- pkey->pkey.rsa,
- padding) == cryptedlen);
- break;
- default:
- zend_error(E_WARNING, "%s(): key type not supported in this PHP build!",
- get_active_function_name(TSRMLS_C));
-
- }
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
- if (cryptedbuf)
- efree(cryptedbuf);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_public_decrypt(string data, string crypted, resource key [, int padding])
- Decrypts data with public key */
-PHP_FUNCTION(openssl_public_decrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf = NULL;
- unsigned char *crypttemp;
- int successful = 0;
- long keyresource = -1;
- long padding = RSA_PKCS1_PADDING;
- char * data;
- long data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 1, NULL, 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): key parameter is not a valid public key", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- crypttemp = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- cryptedlen = RSA_public_decrypt(data_len,
- data,
- crypttemp,
- pkey->pkey.rsa,
- padding);
- if (cryptedlen != -1) {
- cryptedbuf = emalloc(cryptedlen + 1);
- memcpy(cryptedbuf, crypttemp, cryptedlen);
- successful = 1;
- }
- break;
-
- default:
- zend_error(E_WARNING, "%s(): key type not supported in this PHP build!",
- get_active_function_name(TSRMLS_C));
-
- }
-
- efree(crypttemp);
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
-
- if (cryptedbuf)
- efree(cryptedbuf);
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
-}
-/* }}} */
-
-/* {{{ proto mixed openssl_error_string(void)
- Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages */
-PHP_FUNCTION(openssl_error_string)
-{
- char buf[512];
- unsigned long val;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- val = ERR_get_error();
- if (val)
- {
- RETURN_STRING(ERR_error_string(val, buf), 1);
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_sign(string data, &string signature, mixed key)
- Signs data */
-PHP_FUNCTION(openssl_sign)
-{
- zval *key, *signature;
- EVP_PKEY *pkey;
- int siglen;
- unsigned char *sigbuf;
- long keyresource = -1;
- char * data; long data_len;
- EVP_MD_CTX md_ctx;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz", &data, &data_len, &signature, &key) == FAILURE)
- return;
-
- pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): supplied key param cannot be coerced into a private key", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- siglen = EVP_PKEY_size(pkey);
- sigbuf = emalloc(siglen + 1);
-
- EVP_SignInit(&md_ctx, EVP_sha1());
- EVP_SignUpdate(&md_ctx, data, data_len);
- if (EVP_SignFinal (&md_ctx, sigbuf, &siglen, pkey)) {
- zval_dtor(signature);
- sigbuf[siglen] = '\0';
- ZVAL_STRINGL(signature, sigbuf, siglen, 0);
- RETVAL_TRUE;
- } else {
- efree(sigbuf);
- RETVAL_FALSE;
- }
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
-}
-/* }}} */
-
-/* {{{ proto int openssl_verify(string data, string signature, mixed key)
- Verifys data */
-PHP_FUNCTION(openssl_verify)
-{
- zval *key;
- EVP_PKEY *pkey;
- int err;
- EVP_MD_CTX md_ctx;
- long keyresource = -1;
- char * data; long data_len;
- char * signature; long signature_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz", &data, &data_len,
- &signature, &signature_len, &key) == FAILURE)
- return;
-
- pkey = php_openssl_evp_from_zval(&key, 1, NULL, 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): supplied key param cannot be coerced into a public key", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- EVP_VerifyInit (&md_ctx, EVP_sha1());
- EVP_VerifyUpdate (&md_ctx, data, data_len);
- err = EVP_VerifyFinal (&md_ctx, signature, signature_len, pkey);
-
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
-
- RETURN_LONG(err);
-}
-/* }}} */
-
-/* {{{ proto int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)
- Seals data */
-PHP_FUNCTION(openssl_seal)
-{
- zval *pubkeys, **pubkey, *sealdata, *ekeys;
- HashTable *pubkeysht;
- HashPosition pos;
- EVP_PKEY **pkeys;
- long * key_resources; /* so we know what to cleanup */
- int i, len1, len2, *eksl, nkeys;
- unsigned char *buf = NULL, **eks;
- char * data; long data_len;
- EVP_CIPHER_CTX ctx;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szza/",
- &data, &data_len, &sealdata, &ekeys, &pubkeys) == FAILURE)
- return;
-
- pubkeysht = HASH_OF(pubkeys);
- nkeys = pubkeysht ? zend_hash_num_elements(pubkeysht) : 0;
- if (!nkeys) {
- zend_error(E_WARNING,
- "Fourth argument to openssl_seal() must be a non-empty array");
- RETURN_FALSE;
- }
-
- pkeys = emalloc(nkeys * sizeof(*pkeys));
- eksl = emalloc(nkeys * sizeof(*eksl));
- eks = emalloc(nkeys * sizeof(*eks));
- key_resources = emalloc(nkeys * sizeof(long));
-
- /* get the public keys we are using to seal this data */
- zend_hash_internal_pointer_reset_ex(pubkeysht, &pos);
- i = 0;
- while (zend_hash_get_current_data_ex(pubkeysht, (void **) &pubkey,
- &pos) == SUCCESS) {
- pkeys[i] = php_openssl_evp_from_zval(pubkey, 1, NULL, 0, &key_resources[i] TSRMLS_CC);
- if (pkeys[i] == NULL) {
- zend_error(E_WARNING, "%s(): not a public key (%dth member of pubkeys)", get_active_function_name(TSRMLS_C), i);
- RETVAL_FALSE;
- goto clean_exit;
- }
- eks[i] = emalloc(EVP_PKEY_size(pkeys[i]) + 1);
- zend_hash_move_forward_ex(pubkeysht, &pos);
- i++;
- }
-
-#if OPENSSL_VERSION_NUMBER >= 0x0090600fL
- if (!EVP_EncryptInit(&ctx,EVP_rc4(),NULL,NULL)) {
- RETVAL_FALSE;
- goto clean_exit;
- }
-#else
- EVP_EncryptInit(&ctx,EVP_rc4(),NULL,NULL);
-#endif
-
-#if 0
- /* Need this if allow ciphers that require initialization vector */
- ivlen = EVP_CIPHER_CTX_iv_length(&ctx);
- iv = ivlen ? emalloc(ivlen + 1) : NULL;
-#endif
- /* allocate one byte extra to make room for \0 */
- buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(&ctx));
-
- if (!EVP_SealInit(&ctx, EVP_rc4(), eks, eksl, NULL, pkeys, nkeys)
-#if OPENSSL_VERSION_NUMBER >= 0x0090600fL
- || !EVP_SealUpdate(&ctx, buf, &len1, data, data_len)
-#endif
- )
- {
- RETVAL_FALSE;
- efree(buf);
- goto clean_exit;
-
- }
-
-#if OPENSSL_VERSION_NUMBER < 0x0090600fL
- EVP_SealUpdate(&ctx, buf, &len1, data, data_len);
-#endif
- EVP_SealFinal(&ctx, buf + len1, &len2);
-
- if (len1 + len2 > 0) {
- zval_dtor(sealdata);
- buf[len1 + len2] = '\0';
- buf = erealloc(buf, len1 + len2 + 1);
- ZVAL_STRINGL(sealdata, buf, len1 + len2, 0);
-
- zval_dtor(ekeys);
- if (array_init(ekeys) == FAILURE) {
- zend_error(E_ERROR, "Cannot initialize return value");
- RETVAL_FALSE;
- efree(buf);
- goto clean_exit;
- }
- for (i=0; i<nkeys; i++) {
- eks[i][eksl[i]] = '\0';
- add_next_index_stringl(ekeys, erealloc(eks[i], eksl[i] + 1), eksl[i], 0);
- eks[i] = NULL;
- }
-#if 0
- /* If allow ciphers that need IV, we need this */
- zval_dtor(*ivec);
- if (ivlen) {
- iv[ivlen] = '\0';
- ZVAL_STRINGL(*ivec, erealloc(iv, ivlen + 1), ivlen, 0);
- } else {
- ZVAL_EMPTY_STRING(*ivec);
- }
-#endif
- }
- else
- efree(buf);
-
- RETVAL_LONG(len1 + len2);
-
-clean_exit:
- for (i=0; i<nkeys; i++) {
- if (key_resources[i] == -1)
- EVP_PKEY_free(pkeys[i]);
- if (eks[i])
- efree(eks[i]);
- }
- efree(eks);
- efree(eksl);
- efree(pkeys);
- efree(key_resources);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_open(string data, &string opendata, string ekey, mixed privkey)
- Opens data */
-PHP_FUNCTION(openssl_open)
-{
- zval *privkey, *opendata;
- EVP_PKEY *pkey;
- int len1, len2;
- unsigned char *buf;
- long keyresource = -1;
- EVP_CIPHER_CTX ctx;
- char * data; long data_len;
- char * ekey; long ekey_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szsz", &data, &data_len,
- &opendata, &ekey, &ekey_len, &privkey) == FAILURE)
- return;
-
- pkey = php_openssl_evp_from_zval(&privkey, 0, "", 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- zend_error(E_WARNING, "%s(): unable to coerce parameter 4 into a private key",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- buf = emalloc(data_len + 1);
-
- if (EVP_OpenInit(&ctx, EVP_rc4(), ekey, ekey_len, NULL, pkey)
-#if OPENSSL_VERSION_NUMBER >= 0x0090600fL
- && EVP_OpenUpdate(&ctx, buf, &len1, data, data_len)
-#endif
- ) {
-#if OPENSSL_VERSION_NUMBER < 0x0090600fL
- EVP_OpenUpdate(&ctx, buf, &len1, data, data_len);
-#endif
- if (!EVP_OpenFinal(&ctx, buf + len1, &len2) ||
- (len1 + len2 == 0)) {
- efree(buf);
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
- RETURN_FALSE;
- }
- } else {
- efree(buf);
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
-
- RETURN_FALSE;
- }
- if (keyresource == -1)
- EVP_PKEY_free(pkey);
-
- zval_dtor(opendata);
- buf[len1 + len2] = '\0';
- ZVAL_STRINGL(opendata, erealloc(buf, len1 + len2 + 1), len1 + len2, 0);
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 8
- * c-basic-offset: 8
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/openssl/openssl.dsp b/ext/openssl/openssl.dsp
deleted file mode 100644
index 5212a27a70..0000000000
--- a/ext/openssl/openssl.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="openssl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=openssl - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "openssl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "openssl.mak" CFG="openssl - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "openssl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "openssl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "openssl - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPENSSL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_OPENSSL" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OPENSSL_EXT=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_openssl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "openssl - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPENSSL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_OPENSSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OPENSSL_EXT=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_openssl.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "openssl - Win32 Release_TS"
-# Name "openssl - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\openssl.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_openssl.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h
deleted file mode 100644
index 379aecf80c..0000000000
--- a/ext/openssl/php_openssl.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Venaas <venaas@php.net> |
- | Wez Furlong <wez@thebrainroom.com |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_OPENSSL_H
-#define PHP_OPENSSL_H
-/* HAVE_OPENSSL would include SSL MySQL stuff */
-#if HAVE_OPENSSL_EXT
-extern zend_module_entry openssl_module_entry;
-#define phpext_openssl_ptr &openssl_module_entry
-
-PHP_MINIT_FUNCTION(openssl);
-PHP_MSHUTDOWN_FUNCTION(openssl);
-PHP_MINFO_FUNCTION(openssl);
-
-PHP_FUNCTION(openssl_pkey_get_private);
-PHP_FUNCTION(openssl_pkey_get_public);
-PHP_FUNCTION(openssl_pkey_free);
-PHP_FUNCTION(openssl_pkey_new);
-PHP_FUNCTION(openssl_pkey_export);
-PHP_FUNCTION(openssl_pkey_export_to_file);
-
-PHP_FUNCTION(openssl_sign);
-PHP_FUNCTION(openssl_verify);
-PHP_FUNCTION(openssl_seal);
-PHP_FUNCTION(openssl_open);
-PHP_FUNCTION(openssl_private_encrypt);
-PHP_FUNCTION(openssl_private_decrypt);
-PHP_FUNCTION(openssl_public_encrypt);
-PHP_FUNCTION(openssl_public_decrypt);
-
-PHP_FUNCTION(openssl_pkcs7_verify);
-PHP_FUNCTION(openssl_pkcs7_decrypt);
-PHP_FUNCTION(openssl_pkcs7_sign);
-PHP_FUNCTION(openssl_pkcs7_encrypt);
-
-PHP_FUNCTION(openssl_error_string);
-
-PHP_FUNCTION(openssl_x509_read);
-PHP_FUNCTION(openssl_x509_free);
-PHP_FUNCTION(openssl_x509_parse);
-PHP_FUNCTION(openssl_x509_checkpurpose);
-PHP_FUNCTION(openssl_x509_export);
-PHP_FUNCTION(openssl_x509_export_to_file);
-PHP_FUNCTION(openssl_x509_check_private_key);
-PHP_FUNCTION(openssl_csr_new);
-PHP_FUNCTION(openssl_csr_export);
-PHP_FUNCTION(openssl_csr_export_to_file);
-PHP_FUNCTION(openssl_csr_sign);
-
-#else
-
-#define phpext_openssl_ptr NULL
-
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/openssl/tests/001.phpt b/ext/openssl/tests/001.phpt
deleted file mode 100644
index 2c2f9008b1..0000000000
--- a/ext/openssl/tests/001.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-OpenSSL private key functions
---SKIPIF--
-<?php include('skipif.inc'); ?>
---POST--
---GET--
---FILE--
-<?php
-echo "Creating private key\n";
-
-$privkey = openssl_pkey_new();
-
-if ($privkey === false)
- die("failed to create private key");
-
-$passphrase = "banana";
-$key_file_name = tempnam("/tmp", "ssl");
-if ($key_file_name === false)
- die("failed to get a temporary filename!");
-
-echo "Export key to file\n";
-
-openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name");
-
-echo "Load key from file - array syntax\n";
-
-$loaded_key = openssl_pkey_get_private(array("file://$key_file_name", $passphrase));
-
-if ($loaded_key === false)
- die("failed to load key using array syntax");
-
-openssl_pkey_free($loaded_key);
-
-echo "Load key using direct syntax\n";
-
-$loaded_key = openssl_pkey_get_private("file://$key_file_name", $passphrase);
-
-if ($loaded_key === false)
- die("failed to load key using direct syntax");
-
-openssl_pkey_free($loaded_key);
-
-echo "Load key manually and use string syntax\n";
-
-$key_content = file_get_contents($key_file_name);
-$loaded_key = openssl_pkey_get_private($key_content, $passphrase);
-
-if ($loaded_key === false)
- die("failed to load key using string syntax");
-
-openssl_pkey_free($loaded_key);
-
-echo "OK!\n";
-
-@unlink($key_file_name);
-
-?>
---EXPECT--
-Creating private key
-Export key to file
-Load key from file - array syntax
-Load key using direct syntax
-Load key manually and use string syntax
-OK!
diff --git a/ext/openssl/tests/skipif.inc b/ext/openssl/tests/skipif.inc
deleted file mode 100644
index 21e947d0b2..0000000000
--- a/ext/openssl/tests/skipif.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-
-if (!extension_loaded("openssl") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("openssl$dlext");
-}
-if (!extension_loaded("openssl")) {
- die("skip\n");
-}
-?>
diff --git a/ext/oracle/CREDITS b/ext/oracle/CREDITS
deleted file mode 100644
index f06045fdcb..0000000000
--- a/ext/oracle/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Oracle
-Stig Bakken, Mitch Golden, Rasmus Lerdorf, Andreas Karajannis, Thies C. Arntzen
diff --git a/ext/oracle/config.m4 b/ext/oracle/config.m4
deleted file mode 100644
index d3283e18d3..0000000000
--- a/ext/oracle/config.m4
+++ /dev/null
@@ -1,160 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(AC_ORACLE_VERSION,[
- AC_MSG_CHECKING([Oracle version])
- if test -s "$ORACLE_DIR/orainst/unix.rgs"; then
- ORACLE_VERSION=`grep '"ocommon"' $ORACLE_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
- test -z "$ORACLE_VERSION" && ORACLE_VERSION=7.3
- elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
- ORACLE_VERSION=9.0
- elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then
- ORACLE_VERSION=8.1
- elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then
- ORACLE_VERSION=8.0
- elif test -f $ORACLE_DIR/lib/libclntsh.a; then
- if test -f $ORACLE_DIR/lib/libcore4.a; then
- ORACLE_VERSION=8.0
- else
- ORACLE_VERSION=8.1
- fi
- else
- AC_MSG_ERROR(Oracle needed libraries not found)
- fi
- AC_MSG_RESULT($ORACLE_VERSION)
-])
-
-PHP_ARG_WITH(oracle, for Oracle-ORACLE support,
-[ --with-oracle[=DIR] Include Oracle-oci7 support. Default DIR is
- ORACLE_HOME.])
-
-if test "$PHP_ORACLE" != "no"; then
- AC_MSG_CHECKING([Oracle Install-Dir])
- if test "$PHP_ORACLE" = "yes"; then
- ORACLE_DIR=$ORACLE_HOME
- else
- ORACLE_DIR=$PHP_ORACLE
- fi
- AC_MSG_RESULT($ORACLE_DIR)
-
- if test -d "$ORACLE_DIR/rdbms/public"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/rdbms/public)
- fi
- if test -d "$ORACLE_DIR/rdbms/demo"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/rdbms/demo)
- fi
- if test -d "$ORACLE_DIR/network/public"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/network/public)
- fi
- if test -d "$ORACLE_DIR/plsql/public"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/plsql/public)
- fi
-
- if test -f "$ORACLE_DIR/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $ORACLE_DIR/lib/sysliblist`, ORACLE_SHARED_LIBADD)
- elif test -f "$ORACLE_DIR/rdbms/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $ORACLE_DIR/rdbms/lib/sysliblist`, ORACLE_SHARED_LIBADD)
- fi
-
- AC_ORACLE_VERSION($ORACLE_DIR)
- case $ORACLE_VERSION in
- 7.0|7.1)
- if test -f $ORACLE_DIR/lib/liboracle.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(oracle, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH(core, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(cv6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(cv6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ora, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- if test "$ext_shared" = "yes"; then
- ORACLE_SHARED_LIBADD="$ORACLE_DIR/lib/osntab.o $ORACLE_SHARED_LIBADD";
- else
- LIBS="$ORACLE_DIR/lib/osntab.o $LIBS";
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ocic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- if test "`uname -s 2>/dev/null`" = "AIX"; then
- if test "$ext_shared" = "yes"; then
- ORACLE_SHARED_LIBADD="$ORACLE_SHARED_LIBADD -bI:$ORACLE_DIR/lib/mili.exp"
- else
- LIBS="$LIBS -bI:$ORACLE_DIR/lib/mili.exp"
- fi
- fi
- fi
- ;;
-
- 7.2)
- if test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH(core3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(c3v6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ora, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ora, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- if test "$ext_shared" = "yes"; then
- ORACLE_SHARED_LIBADD="$ORACLE_DIR/lib/osntab.o $ORACLE_SHARED_LIBADD";
- else
- LIBS="$ORACLE_DIR/lib/osntab.o $LIBS";
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ocic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- fi
- ;;
-
- 7.3)
- if test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH(core3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(c3v6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(epc, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(generic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(common, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(client, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ncr, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(generic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(common, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(client, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ncr, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(client, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- fi
- ;;
-
- 8.0)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, "", ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core4, "", ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(psa, "", ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- ;;
-
- 8.1|9.0)
- PHP_ADD_LIBRARY(clntsh, 1, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBPATH($ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- ;;
- *)
- AC_MSG_ERROR(Unsupported Oracle version!)
- ;;
- esac
-
- PHP_NEW_EXTENSION(oracle, oracle.c, $ext_shared)
- AC_DEFINE(HAVE_ORACLE,1,[ ])
-
- PHP_SUBST_OLD(ORACLE_SHARED_LIBADD)
- PHP_SUBST_OLD(ORACLE_DIR)
- PHP_SUBST_OLD(ORACLE_VERSION)
-fi
diff --git a/ext/oracle/oracle.c b/ext/oracle/oracle.c
deleted file mode 100644
index a49f10d78c..0000000000
--- a/ext/oracle/oracle.c
+++ /dev/null
@@ -1,1791 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Mitch Golden <mgolden@interport.net> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* comment out the next line if you're on Oracle 7.x and don't have the olog
- call. */
-
-#define HAS_OLOG 1
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include "zend_globals.h"
-
-#if HAVE_ORACLE
-
-#include "php_oracle.h"
-#define HASH_DTOR (void (*)(void *))
-
-#include "ext/standard/info.h"
-
-
-#ifndef min
-#define min(a, b) ((a) > (b) ? (b) : (a))
-#endif
-
-#ifdef PHP_WIN32
-#define PHP_ORA_API __declspec(dllexport)
-#else
-#define PHP_ORA_API
-#endif
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-#ifdef ZTS
-int ora_globals_id;
-#else
-PHP_ORA_API php_ora_globals ora_globals;
-#endif
-
-#define DB_SIZE 65536
-
-#define ORA_FETCHINTO_ASSOC (1<<0)
-#define ORA_FETCHINTO_NULLS (1<<1)
-
-static oraCursor *ora_get_cursor(HashTable *, pval ** TSRMLS_DC);
-static char *ora_error(Cda_Def *);
-static int ora_describe_define(oraCursor *);
-static void _close_oraconn(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static int _close_oracur(oraCursor *cur TSRMLS_DC);
-static int _ora_ping(oraConnection *conn);
-int ora_set_param_values(oraCursor *cursor, int isout TSRMLS_DC);
-
-void ora_do_logon(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-
-static int le_conn, le_pconn, le_cursor;
-
-/* {{{ prototypes
- */
-PHP_FUNCTION(ora_bind);
-PHP_FUNCTION(ora_close);
-PHP_FUNCTION(ora_commit);
-PHP_FUNCTION(ora_commitoff);
-PHP_FUNCTION(ora_commiton);
-PHP_FUNCTION(ora_do);
-PHP_FUNCTION(ora_error);
-PHP_FUNCTION(ora_errorcode);
-PHP_FUNCTION(ora_exec);
-PHP_FUNCTION(ora_fetch);
-PHP_FUNCTION(ora_fetch_into);
-PHP_FUNCTION(ora_columntype);
-PHP_FUNCTION(ora_columnname);
-PHP_FUNCTION(ora_columnsize);
-PHP_FUNCTION(ora_getcolumn);
-PHP_FUNCTION(ora_numcols);
-PHP_FUNCTION(ora_numrows);
-PHP_FUNCTION(ora_logoff);
-PHP_FUNCTION(ora_logon);
-PHP_FUNCTION(ora_plogon);
-PHP_FUNCTION(ora_open);
-PHP_FUNCTION(ora_parse);
-PHP_FUNCTION(ora_rollback);
-
-PHP_MINIT_FUNCTION(oracle);
-PHP_RINIT_FUNCTION(oracle);
-PHP_MSHUTDOWN_FUNCTION(oracle);
-PHP_RSHUTDOWN_FUNCTION(oracle);
-PHP_MINFO_FUNCTION(oracle);
-/* }}} */
-
-static unsigned char second_args_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
-
-/* {{{ oracle_functions[]
- */
-function_entry oracle_functions[] = {
- PHP_FE(ora_bind, NULL)
- PHP_FE(ora_close, NULL)
- PHP_FE(ora_commit, NULL)
- PHP_FE(ora_commitoff, NULL)
- PHP_FE(ora_commiton, NULL)
- PHP_FE(ora_do, NULL)
- PHP_FE(ora_error, NULL)
- PHP_FE(ora_errorcode, NULL)
- PHP_FE(ora_exec, NULL)
- PHP_FE(ora_fetch, NULL)
- PHP_FE(ora_fetch_into, second_args_force_ref)
- PHP_FE(ora_columntype, NULL)
- PHP_FE(ora_columnname, NULL)
- PHP_FE(ora_columnsize, NULL)
- PHP_FE(ora_getcolumn, NULL)
- PHP_FE(ora_numcols, NULL)
- PHP_FE(ora_numrows, NULL)
- PHP_FE(ora_logoff, NULL)
- PHP_FE(ora_logon, NULL)
- PHP_FE(ora_plogon, NULL)
- PHP_FE(ora_open, NULL)
- PHP_FE(ora_parse, NULL)
- PHP_FE(ora_rollback, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ oracle_module_entry
- */
-zend_module_entry oracle_module_entry = {
- STANDARD_MODULE_HEADER,
- "oracle",
- oracle_functions,
- PHP_MINIT(oracle), /* extension-wide startup function */
- PHP_MSHUTDOWN(oracle), /* extension-wide shutdown function */
- PHP_RINIT(oracle), /* per-request startup function */
- PHP_RSHUTDOWN(oracle), /* per-request shutdown function */
- PHP_MINFO(oracle),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ ora_func_tab[]
- */
-static const text *ora_func_tab[] =
-{(text *) "unused",
-/* 1, 2 */ (text *) "unused", (text *) "OSQL",
-/* 3, 4 */ (text *) "unused", (text *) "OEXEC/OEXN",
-/* 5, 6 */ (text *) "unused", (text *) "OBIND",
-/* 7, 8 */ (text *) "unused", (text *) "ODEFIN",
-/* 9, 10 */ (text *) "unused", (text *) "ODSRBN",
-/* 11, 12 */ (text *) "unused", (text *) "OFETCH/OFEN",
-/* 13, 14 */ (text *) "unused", (text *) "OOPEN",
-/* 15, 16 */ (text *) "unused", (text *) "OCLOSE",
-/* 17, 18 */ (text *) "unused", (text *) "unused",
-/* 19, 20 */ (text *) "unused", (text *) "unused",
-/* 21, 22 */ (text *) "unused", (text *) "ODSC",
-/* 23, 24 */ (text *) "unused", (text *) "ONAME",
-/* 25, 26 */ (text *) "unused", (text *) "OSQL3",
-/* 27, 28 */ (text *) "unused", (text *) "OBNDRV",
-/* 29, 30 */ (text *) "unused", (text *) "OBNDRN",
-/* 31, 32 */ (text *) "unused", (text *) "unused",
-/* 33, 34 */ (text *) "unused", (text *) "OOPT",
-/* 35, 36 */ (text *) "unused", (text *) "unused",
-/* 37, 38 */ (text *) "unused", (text *) "unused",
-/* 39, 40 */ (text *) "unused", (text *) "unused",
-/* 41, 42 */ (text *) "unused", (text *) "unused",
-/* 43, 44 */ (text *) "unused", (text *) "unused",
-/* 45, 46 */ (text *) "unused", (text *) "unused",
-/* 47, 48 */ (text *) "unused", (text *) "unused",
-/* 49, 50 */ (text *) "unused", (text *) "unused",
-/* 51, 52 */ (text *) "unused", (text *) "OCAN",
-/* 53, 54 */ (text *) "unused", (text *) "OPARSE",
-/* 55, 56 */ (text *) "unused", (text *) "OEXFET",
-/* 57, 58 */ (text *) "unused", (text *) "OFLNG",
-/* 59, 60 */ (text *) "unused", (text *) "ODESCR",
-/* 61, 62 */ (text *) "unused", (text *) "OBNDRA"
-};
-/* }}} */
-
-#ifdef COMPILE_DL_ORACLE
-ZEND_GET_MODULE(oracle)
-#endif
-
-/* {{{ _close_oraconn
- */
-static void _close_oraconn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oraConnection *conn = (oraConnection *)rsrc->ptr;
-
- conn->open = 0;
-
- ologof(&conn->lda);
- ORA(num_links)--;
-
- zend_hash_del(ORA(conns),(void*)&conn,sizeof(void*));
-
- if (conn->persistent) {
- ORA(num_persistent)--;
- free(conn);
- } else {
- efree(conn);
- }
-}
-/* }}} */
-
-/* {{{ pval_ora_param_destructor
- */
-static void
-pval_ora_param_destructor(oraParam *param)
-{
- if (param->progv) {
- efree(param->progv);
- }
-}
-/* }}} */
-
-/* {{{ _close_oracur
- */
-static int _close_oracur(oraCursor *cur TSRMLS_DC)
-{
- int i;
-
- if (cur){
- if (cur->query){
- efree(cur->query);
- }
- if (cur->params){
- zend_hash_destroy(cur->params);
- efree(cur->params);
- cur->params = NULL;
- }
- if (cur->columns){
- for(i = 0; i < cur->ncols; i++){
- if (cur->columns[i].buf)
- efree(cur->columns[i].buf);
- }
- efree(cur->columns);
- cur->columns = NULL;
- }
-
- if (cur->open){
- oraConnection *db_conn;
-
- if (zend_hash_find(ORA(conns),(void*)&(cur->conn_ptr),sizeof(void*),(void **)&db_conn) == SUCCESS) {
- oclose(&cur->cda);
- }
- }
-
- efree(cur);
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ php_close_ora_cursor
- */
-static void php_close_ora_cursor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oraCursor *cur = (oraCursor *)rsrc->ptr;
-
- _close_oracur(cur TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_ora_init_globals
- */
-static void php_ora_init_globals(php_ora_globals *ora_globals_p TSRMLS_DC)
-{
- if (cfg_get_long("oracle.allow_persistent",
- &ORA(allow_persistent))
- == FAILURE) {
- ORA(allow_persistent) = -1;
- }
- if (cfg_get_long("oracle.max_persistent",
- &ORA(max_persistent))
- == FAILURE) {
- ORA(max_persistent) = -1;
- }
- if (cfg_get_long("oracle.max_links",
- &ORA(max_links))
- == FAILURE) {
- ORA(max_links) = -1;
- }
-
- ORA(num_persistent) = 0;
-
- ORA(conns) = malloc(sizeof(HashTable));
- zend_hash_init(ORA(conns), 13, NULL, NULL, 1);
-
- memset((void*) &ORA(db_err_conn),0,sizeof(ORA(db_err_conn)));
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(oracle)
-{
-#ifdef ZTS
- ts_allocate_id(&ora_globals_id, sizeof(php_ora_globals), (ts_allocate_ctor) php_ora_init_globals, NULL);
-#else
- php_ora_init_globals(&ora_globals TSRMLS_CC);
-#endif
-
- le_cursor = zend_register_list_destructors_ex(php_close_ora_cursor, NULL, "oracle cursor", module_number);
- le_conn = zend_register_list_destructors_ex(_close_oraconn, NULL, "oracle link", module_number);
- le_pconn = zend_register_list_destructors_ex(NULL, _close_oraconn, "oracle link persistent", module_number);
-
- REGISTER_LONG_CONSTANT("ORA_BIND_INOUT", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ORA_BIND_IN", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ORA_BIND_OUT", 2, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("ORA_FETCHINTO_ASSOC",ORA_FETCHINTO_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ORA_FETCHINTO_NULLS",ORA_FETCHINTO_NULLS, CONST_CS | CONST_PERSISTENT);
-
-#ifdef ZTS
- opinit(OCI_EV_TSF);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(oracle)
-{
- ORA(num_links) =
- ORA(num_persistent);
- /*
- ORA(defaultlrl) = 0;
- ORA(defaultbinmode) = 0;
- ORA(defaultconn) = 0;
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(oracle)
-{
- zend_hash_destroy(ORA(conns));
- free(ORA(conns));
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(oracle)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _ora_ping
- */
-static int _ora_ping(oraConnection *conn)
-{
- Cda_Def cda;
-
- if (oopen(&cda, &conn->lda, (text *) 0, -1, -1, (text *) 0, -1)) {
- return 0;
- }
-
- if (oparse(&cda, "select sysdate from dual", (sb4) - 1, 0, VERSION_7)) {
- oclose(&cda);
- return 0;
- }
-
- oclose(&cda);
- return 1;
-
-}
-/* }}} */
-
-/*
- ** PHP functions
-*/
-
-/* {{{ proto int ora_logon(string user, string password)
- Open an Oracle connection */
-PHP_FUNCTION(ora_logon)
-{
- ora_do_logon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int ora_plogon(string user, string password)
- Open a persistent Oracle connection */
-PHP_FUNCTION(ora_plogon)
-{
- ora_do_logon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ ora_do_logon
- */
-void ora_do_logon(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user,*passwd;
- pval **arg1, **arg2;
- char *hashed_details;
- int hashed_details_length;
- oraConnection *db_conn;
-
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- user = Z_STRVAL_PP(arg1);
- passwd = Z_STRVAL_PP(arg2);
-
- hashed_details_length = sizeof("oracle__")-1+strlen(user)+strlen(passwd);
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"oracle_%s_%s",user,passwd);
-
- if (!ORA(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (ORA(max_links)!=-1 && ORA(num_links)>=ORA(max_links)) {
- php_error(E_WARNING,"Oracle: Too many open links (%d)",ORA(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (ORA(max_persistent)!=-1 && ORA(num_persistent)>=ORA(max_persistent)) {
- php_error(E_WARNING,"Oracle: Too many open persistent links (%d)",ORA(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
- /* create the link */
- db_conn = (oraConnection *)malloc(sizeof(oraConnection));
- memset((void *) db_conn,0,sizeof(oraConnection));
- db_conn->persistent = 1;
-
- if (
-#if HAS_OLOG
- olog(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0, -1, OCI_LM_DEF)
-#else
- orlon(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0)
-#endif
- ) {
- ORA(db_err_conn) = *db_conn;
- php_error(E_WARNING, "Unable to connect to ORACLE (%s)",ora_error(&db_conn->lda));
-
- if (persistent) {
- free(db_conn);
- } else {
- efree(db_conn);
- }
-
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_pconn;
- new_le.ptr = db_conn;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- free(db_conn);
- efree(hashed_details);
- RETURN_FALSE;
- }
- ORA(num_persistent)++;
- ORA(num_links)++;
- zend_hash_add(ORA(conns),(void*)&db_conn,sizeof(void*),(void*)&db_conn,sizeof(void*),NULL);
- } else { /* we do */
- if (Z_TYPE_P(le) != le_pconn) {
- RETURN_FALSE;
- }
-
- db_conn = (oraConnection *) le->ptr;
-
- /* ensure that the link did not die */
-
- if (!_ora_ping(db_conn)) {
- if (
-#if HAS_OLOG
- olog(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0, -1, OCI_LM_DEF)
-#else
- orlon(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0)
-#endif
- ) {
- ORA(db_err_conn) = *db_conn;
- php_error(E_WARNING, "Oracle: Link to server lost, unable to reconnect",ora_error(&db_conn->lda));
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
- } else { /* non persistent */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual Oracle link sits.
- * if it doesn't, open a new Oracle link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),hashed_details,hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_conn || type==le_pconn)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (ORA(max_links)!=-1 && ORA(num_links)>=ORA(max_links)) {
- php_error(E_WARNING,"Oracle: Too many open links (%d)",ORA(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- db_conn = (oraConnection *) emalloc(sizeof(oraConnection));
- memset((void *) db_conn,0,sizeof(oraConnection));
- db_conn->persistent = 0;
-
- if (
-#if HAS_OLOG
- olog(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0, -1, OCI_LM_DEF)
-#else
- orlon(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0)
-#endif
- ) {
- ORA(db_err_conn) = *db_conn;
- php_error(E_WARNING,"Oracle: Connection Failed: %s\n",ora_error(&db_conn->lda));
- efree(hashed_details);
- efree(db_conn);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, db_conn, le_conn);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- zend_hash_add(ORA(conns),(void*)&db_conn,sizeof(void*),(void*)&db_conn,sizeof(void*),NULL);
- ORA(num_links)++;
- }
-
- efree(hashed_details);
-}
-/* }}} */
-
-/* {{{ proto int ora_logoff(int connection)
- Close an Oracle connection */
-PHP_FUNCTION(ora_logoff)
-{ /* conn_index */
- oraConnection *conn;
- pval **arg;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- zend_list_delete(Z_LVAL_PP(arg));
-}
-/* }}} */
-
-/* {{{ proto int ora_open(int connection)
- Open an Oracle cursor */
-PHP_FUNCTION(ora_open)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn = NULL;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if ((cursor = (oraCursor *)emalloc(sizeof(oraCursor))) == NULL){
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- memset(cursor, 0, sizeof(oraCursor));
- if (oopen(&cursor->cda, &conn->lda, (text *) 0, -1, -1, (text *) 0, -1)) {
- php_error(E_WARNING, "Unable to open new cursor (%s)",
- ora_error(&cursor->cda));
- efree(cursor);
- RETURN_FALSE;
- }
- cursor->open = 1;
- cursor->conn_ptr = conn;
- ZEND_REGISTER_RESOURCE(return_value, cursor, le_cursor);
- cursor->conn_id = Z_LVAL_P(return_value);
-}
-
-/* }}} */
-
-/* {{{ proto int ora_close(int cursor)
- Close an Oracle cursor */
-PHP_FUNCTION(ora_close)
-{ /* conn_index */
- pval **arg;
- oraCursor *cursor;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(cursor, oraCursor *, arg, -1, "Oracle-Cursor", le_cursor);
-
- zend_list_delete(Z_LVAL_PP(arg));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_commitoff(int connection)
- Disable automatic commit */
-PHP_FUNCTION(ora_commitoff)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (ocof(&conn->lda)) {
- php_error(E_WARNING, "Unable to turn off auto-commit (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_commiton(int connection)
- Enable automatic commit */
-PHP_FUNCTION(ora_commiton)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (ocon(&conn->lda)) {
- php_error(E_WARNING, "Unable to turn on auto-commit (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_commit(int connection)
- Commit an Oracle transaction */
-PHP_FUNCTION(ora_commit)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (ocom(&conn->lda)) {
- php_error(E_WARNING, "Unable to commit transaction (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_rollback(int connection)
- Roll back an Oracle transaction */
-PHP_FUNCTION(ora_rollback)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (orol(&conn->lda)) {
- php_error(E_WARNING, "Unable to roll back transaction (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_parse(int cursor, string sql_statement [, int defer])
- Parse an Oracle SQL statement */
-PHP_FUNCTION(ora_parse)
-{
- pval **curs, **sql, **def;
- oraCursor *cursor;
- sword defer = 0;
- text *query;
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- zend_get_parameters_ex(3,&curs,&sql,&def);
- convert_to_long_ex(def);
- if (Z_LVAL_PP(def)) {
- defer = DEFER_PARSE;
- }
- break;
- case 2:
- zend_get_parameters_ex(2,&curs,&sql);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(sql);
- query = (text *) estrndup(Z_STRVAL_PP(sql),Z_STRLEN_PP(sql));
-
- if (query == NULL) {
- php_error(E_WARNING, "Invalid query");
- RETURN_FALSE;
- }
-
- if (!(cursor = ora_get_cursor(&EG(regular_list),curs TSRMLS_CC))){
- efree(query);
- RETURN_FALSE;
- }
-
- if (cursor->query) {
- efree(cursor->query);
- }
-
- cursor->query = query;
- cursor->fetched = 0;
-
- if (cursor->params && cursor->nparams > 0){
- zend_hash_destroy(cursor->params);
- efree(cursor->params);
- cursor->params = NULL;
- cursor->nparams = 0;
- }
-
- if (oparse(&cursor->cda, query, (sb4) - 1, defer, VERSION_7)) {
- php_error(E_WARNING, "Ora_Parse failed (%s)",ora_error(&cursor->cda));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_bind(int cursor, string php_variable_name, string sql_parameter_name, int length [, int type])
- Bind a PHP variable to an Oracle parameter */
-PHP_FUNCTION(ora_bind)
-{
- pval **curs, **pvar, **svar, **plen, **ptyp;
- int inout = 0;
- oraParam *newparam, *paramptr;
- oraCursor *cursor;
- char *paramname;
-
- switch (ZEND_NUM_ARGS()) {
- case 5:
- zend_get_parameters_ex(5,&curs,&pvar,&svar,&plen,&ptyp);
- convert_to_long_ex(ptyp);
- inout = Z_LVAL_PP(ptyp);
- break;
- case 4:
- zend_get_parameters_ex(4,&curs,&pvar,&svar,&plen);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC);
- if (cursor == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(pvar);
- convert_to_string_ex(svar);
- convert_to_long_ex(plen);
-
- if (cursor->params == NULL) {
- ALLOC_HASHTABLE(cursor->params);
- if (!cursor->params ||
- zend_hash_init(cursor->params, 19, NULL,
- HASH_DTOR pval_ora_param_destructor, 0) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize parameter list");
- RETURN_FALSE;
- }
- }
- if ((newparam = (oraParam *)emalloc(sizeof(oraParam))) == NULL) {
- php_error(E_WARNING, "Out of memory for parameter");
- RETURN_FALSE;
- }
-
- if ((paramname = estrndup(Z_STRVAL_PP(pvar), Z_STRLEN_PP(pvar))) == NULL) {
- php_error(E_WARNING, "Out of memory for parametername");
- efree(newparam);
- RETURN_FALSE;
- }
-
- if (zend_hash_add(cursor->params, paramname, Z_STRLEN_PP(pvar) + 1,
- newparam, sizeof(oraParam), (void **)&paramptr) == FAILURE) {
- /* XXX zend_hash_destroy */
- efree(paramname);
- efree(newparam);
- php_error(E_ERROR, "Could not make parameter placeholder");
- RETURN_FALSE;
- }
-
- efree(newparam);
- efree(paramname);
-
- paramptr->progvl = Z_LVAL_PP(plen) + 1;
- paramptr->inout = inout;
-
- if ((paramptr->progv = (text *)emalloc(paramptr->progvl)) == NULL) {
- php_error(E_WARNING, "Out of memory for parameter value");
- RETURN_FALSE;
- }
-
-/* XXX Maximum for progvl */
- paramptr->alen = paramptr->progvl;
-
- if (obndra(&cursor->cda,
- Z_STRVAL_PP(svar),
- -1,
- (ub1 *)paramptr->progv,
- paramptr->progvl,
- SQLT_STR, /* ftype */
- -1, /* scale */
- 0/*&paramptr->ind*/, /* ind */
- &paramptr->alen, /* alen */
- 0 /*&paramptr->arcode*/,
- 0, /* maxsize */
- 0,
- 0,
- -1,
- -1)) {
- php_error(E_WARNING, "Ora_Bind failed (%s)",
- ora_error(&cursor->cda));
- RETURN_FALSE;
- }
-
- cursor->nparams++;
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- XXX Make return values compatible with old module ?
- */
-/* {{{ proto int ora_exec(int cursor)
- Execute a parsed statement */
-PHP_FUNCTION(ora_exec)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor = NULL;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if ((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->cda.ft == FT_SELECT) {
- if (ora_describe_define(cursor) < 0) {
- /* error message is given by ora_describe_define() */
- RETURN_FALSE;
- }
- }
-
- if(cursor->nparams > 0){
- if(!ora_set_param_values(cursor, 0 TSRMLS_CC)){
- RETURN_FALSE;
- }
- }
-
- if (oexec(&cursor->cda)) {
- php_error(E_WARNING, "Ora_Exec failed (%s)",
- ora_error(&cursor->cda));
- RETURN_FALSE;
- }
-
- if(cursor->nparams > 0){
- if(!ora_set_param_values(cursor, 1 TSRMLS_CC)){
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_numcols(int cursor)
- Returns the numbers of columns in a result */
-PHP_FUNCTION(ora_numcols)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor = NULL;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if ((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(cursor->ncols);
-}
-/* }}} */
-
-/* {{{ proto int ora_numrows(int cursor)
- Returns the number of rows in a result */
-PHP_FUNCTION(ora_numrows)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor = NULL;
-
- if(zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(cursor->cda.rpc);
-}
-/* }}} */
-
-/* prepares/executes/fetches 1st row if avail*/
-/* {{{ proto int ora_do(int connection, int cursor)
- Parse and execute a statement and fetch first result row */
-PHP_FUNCTION(ora_do)
-{
- pval **con,**sql;
- oraConnection *conn = NULL;
- oraCursor *cursor = NULL;
- text *query;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &con,&sql) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, con, -1, "Oracle-Connection", le_conn, le_pconn);
-
- convert_to_string_ex(sql);
-
- if ((cursor = (oraCursor *)emalloc(sizeof(oraCursor))) == NULL){
- php_error(E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- memset(cursor, 0, sizeof(oraCursor));
-
- query = (text *) estrndup(Z_STRVAL_PP(sql),Z_STRLEN_PP(sql));
-
- if (query == NULL) {
- php_error(E_WARNING, "Invalid query in Ora_Do");
- RETURN_FALSE;
- }
-
- cursor->query = query;
-
- if (oopen(&cursor->cda, &conn->lda, (text *) 0, -1, -1, (text *) 0, -1)) {
- php_error(E_WARNING, "Unable to open new cursor (%s)",
- ora_error(&cursor->cda));
- efree(cursor);
- RETURN_FALSE;
- }
- cursor->open = 1;
- cursor->conn_ptr = conn;
- cursor->conn_id = Z_LVAL_PP(con);
-
- /* Prepare stmt */
-
- if (oparse(&cursor->cda, query, (sb4) - 1, 1, VERSION_7)){
- php_error(E_WARNING, "Ora_Do failed (%s)",
- ora_error(&cursor->cda));
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
-
- /* Execute stmt (and fetch 1st row for selects) */
- if (cursor->cda.ft == FT_SELECT) {
- if (ora_describe_define(cursor) < 0){
- /* error message is given by ora_describe_define() */
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
- if (oexfet(&cursor->cda, 1, 0, 0)) {
- php_error(E_WARNING, "Ora_Do failed (%s)",
- ora_error(&cursor->cda));
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
- cursor->fetched = 1;
- } else {
- if (oexec(&cursor->cda)) {
- php_error(E_WARNING, "Ora_Do failed (%s)",
- ora_error(&cursor->cda));
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, cursor, le_cursor);
-}
-/* }}} */
-
-/* {{{ proto int ora_fetch(int cursor)
- Fetch a row of result data from a cursor */
-PHP_FUNCTION(ora_fetch)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->ncols == 0){
- php_error(E_WARNING, "No tuples available on this cursor");
- RETURN_FALSE;
- }
-
- /* Get data from Oracle */
- if (ofetch(&cursor->cda)) {
- if (cursor->cda.rc != NO_DATA_FOUND) {
- php_error(E_WARNING, "Ora_Fetch failed (%s)",
- ora_error(&cursor->cda));
- }
- RETURN_FALSE;
- }
- cursor->fetched++;
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_fetch_into(int cursor, array result [, int flags])
- Fetch a row into the specified result array */
-PHP_FUNCTION(ora_fetch_into)
-{
- pval **curs, **arr, **flg, *tmp;
- oraCursor *cursor;
- int i;
- int flags = 0;
-
- switch(ZEND_NUM_ARGS()){
- case 2:
- zend_get_parameters_ex(2, &curs, &arr);
- break;
-
- case 3:
- zend_get_parameters_ex(3, &curs, &arr, &flg);
- convert_to_long_ex(flg);
- flags = Z_LVAL_PP(flg);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* Find the cursor */
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->ncols == 0){
- php_error(E_WARNING, "No tuples available on this cursor");
- RETURN_FALSE;
- }
-
- if (ofetch(&cursor->cda)) {
- if (cursor->cda.rc != NO_DATA_FOUND) {
- php_error(E_WARNING, "Ora_Fetch_Into failed (%s)",ora_error(&cursor->cda));
- }
- RETURN_FALSE;
- }
- cursor->fetched++;
-
- if (Z_TYPE_PP(arr) != IS_ARRAY){
- pval_destructor(*arr);
- if (array_init(*arr) == FAILURE){
- php_error(E_WARNING, "Can't convert to type Array");
- RETURN_FALSE;
- }
- }
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(arr));
-
- for (i = 0; i < cursor->ncols; i++) {
- if (cursor->columns[i].col_retcode == 1405) {
- if (!(flags&ORA_FETCHINTO_NULLS)){
- continue; /* don't add anything for NULL columns, unless the calles wants it */
- } else {
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
- }
- } else if (cursor->columns[i].col_retcode != 0 &&
- cursor->columns[i].col_retcode != 1406) {
- /* So error fetching column. The most common is 1405, a NULL */
- /* was retreived. 1406 is ASCII or string buffer data was */
- /* truncated. The converted data from the database did not fit */
- /* into the buffer. Since we allocated the buffer to be large */
- /* enough, this should not occur. Anyway, we probably want to */
- /* return what we did get, in that case */
- RETURN_FALSE;
- } else {
- MAKE_STD_ZVAL(tmp);
-
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
-
- switch(cursor->columns[i].dbtype) {
- case SQLT_LNG:
- case SQLT_LBI:
- {
- ub4 ret_len;
- int offset = cursor->columns[i].col_retlen;
- sb2 result;
-
- if (cursor->columns[i].col_retcode == 1406) { /* truncation -> get the rest! */
- while (1) {
- cursor->columns[i].buf = erealloc(cursor->columns[i].buf,offset + DB_SIZE + 1);
-
- if (! cursor->columns[i].buf) {
- offset = 0;
- break;
- }
-
- result = oflng(&cursor->cda,
- (sword)(i + 1),
- cursor->columns[i].buf + offset,
- DB_SIZE,
- 1,
- &ret_len,
- offset);
- if (result) {
- break;
- }
-
- if (ret_len <= 0) {
- break;
- }
-
- offset += ret_len;
- }
- }
- if (cursor->columns[i].buf && offset) {
- Z_STRLEN_P(tmp) = offset;
- } else {
- Z_STRLEN_P(tmp) = 0;
- }
- }
- break;
- default:
- Z_STRLEN_P(tmp) = min(cursor->columns[i].col_retlen,
- cursor->columns[i].dsize);
- break;
- }
- Z_STRVAL_P(tmp) = estrndup(cursor->columns[i].buf,Z_STRLEN_P(tmp));
- }
-
- if (flags&ORA_FETCHINTO_ASSOC){
- zend_hash_update(Z_ARRVAL_PP(arr), cursor->columns[i].cbuf, cursor->columns[i].cbufl+1, (void *) &tmp, sizeof(pval*), NULL);
- } else {
- zend_hash_index_update(Z_ARRVAL_PP(arr), i, (void *) &tmp, sizeof(pval*), NULL);
- }
-
- }
-
- RETURN_LONG(cursor->ncols);
-}
-/* }}} */
-
-/* {{{ proto string ora_columnname(int cursor, int column)
- Get the name of an Oracle result column */
-PHP_FUNCTION(ora_columnname)
-{ /* cursor_index, column_index */
- pval **curs, **col;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
-
- if (cursor->ncols == 0){
- php_error(E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) >= cursor->ncols){
- php_error(E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) < 0){
- php_error(E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(cursor->columns[Z_LVAL_PP(col)].cbuf,
- cursor->columns[Z_LVAL_PP(col)].cbufl,1);
-}
-/* }}} */
-
-/* {{{ proto string ora_columntype(int cursor, int column)
- Get the type of an Oracle result column */
-PHP_FUNCTION(ora_columntype)
-{ /* cursor_index, column_index */
- pval **curs, **col;
- int colno;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
- colno = Z_LVAL_PP(col);
-
- if (cursor->ncols == 0){
- php_error(E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- if (colno >= cursor->ncols){
- php_error(E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (colno < 0){
- php_error(E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- switch (cursor->columns[colno].dbtype) {
- case SQLT_CHR:
- RETURN_STRINGL("VARCHAR2", 8, 1);
- case SQLT_VCS:
- case SQLT_AVC:
- RETURN_STRINGL("VARCHAR", 7, 1);
- case SQLT_STR:
- case SQLT_AFC:
- RETURN_STRINGL("CHAR", 4, 1);
- case SQLT_NUM: case SQLT_INT:
- case SQLT_FLT: case SQLT_UIN:
- RETURN_STRINGL("NUMBER", 6, 1);
- case SQLT_LNG:
- RETURN_STRINGL("LONG", 4, 1);
- case SQLT_LBI:
- RETURN_STRINGL("LONG RAW", 8, 1);
- case SQLT_RID:
- RETURN_STRINGL("ROWID", 5, 1);
- case SQLT_DAT:
- RETURN_STRINGL("DATE", 4, 1);
-#ifdef SQLT_CUR
- case SQLT_CUR:
- RETURN_STRINGL("CURSOR", 6, 1);
-#endif
- default:
- {
- char numbuf[21];
- snprintf(numbuf, 20, "UNKNOWN(%d)", cursor->columns[colno].dbtype);
- numbuf[20] = '\0';
- RETVAL_STRING(numbuf,1);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto int ora_columnsize(int cursor, int column)
- Return the size of the column */
-PHP_FUNCTION(ora_columnsize)
-{ /* cursor_index, column_index */
- pval **curs, **col;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* Find the cursor */
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
-
- if (cursor->ncols == 0){
- php_error(E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) >= cursor->ncols){
- php_error(E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) < 0){
- php_error(E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- RETURN_LONG(cursor->columns[Z_LVAL_PP(col)].dbsize);
-}
-/* }}} */
-
-/* {{{ proto mixed ora_getcolumn(int cursor, int column)
- Get data from a fetched row */
-PHP_FUNCTION(ora_getcolumn)
-{ /* cursor_index, column_index */
- pval **curs,**col;
- int colno;
- oraCursor *cursor = NULL;
- oraColumn *column = NULL;
- int len;
- sb2 type;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->ncols == 0){
- php_error(E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
- colno = Z_LVAL_PP(col);
-
- if (colno >= cursor->ncols){
- php_error(E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (colno < 0){
- php_error(E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- if (cursor->fetched == 0){
- if (ofetch(&cursor->cda)) {
- if (cursor->cda.rc != NO_DATA_FOUND) {
- php_error(E_WARNING, "Ora_Fetch failed (%s)",
- ora_error(&cursor->cda));
- }
- RETURN_FALSE;
- }
- cursor->fetched++;
- }
-
- column = &cursor->columns[colno];
-
- type = column->dbtype;
-
- if (column->col_retcode == 1405) {
- RETURN_NULL();
- }
-
- if (column->col_retcode != 0 && column->col_retcode != 1406) {
- /* So error fetching column. The most common is 1405, a NULL
- * was retreived. 1406 is ASCII or string buffer data was
- * truncated. The converted data from the database did not fit
- * into the buffer. Since we allocated the buffer to be large
- * enough, this should not occur. Anyway, we probably want to
- * return what we did get, in that case
- */
- RETURN_FALSE;
- } else {
- switch(type) {
- case SQLT_CHR:
- case SQLT_NUM:
- case SQLT_INT:
- case SQLT_FLT:
- case SQLT_STR:
- case SQLT_UIN:
- case SQLT_AFC:
- case SQLT_AVC:
- case SQLT_DAT:
- len = min(column->col_retlen, column->dsize);
- RETURN_STRINGL(column->buf,len,1);
-
- case SQLT_LNG:
- case SQLT_LBI:
- {
- ub4 ret_len;
- int offset = column->col_retlen;
- sb2 result;
-
- if (column->col_retcode == 1406) { /* truncation -> get the rest! */
- while (1) {
- column->buf = erealloc(column->buf,offset + DB_SIZE + 1);
-
- if (! column->buf) {
- offset = 0;
- break;
- }
-
- result = oflng(&cursor->cda,
- (sword)(colno + 1),
- column->buf + offset,
- DB_SIZE,
- 1,
- &ret_len,
- offset);
- if (result) {
- break;
- }
-
- if (ret_len <= 0) {
- break;
- }
-
- offset += ret_len;
- }
- }
- if (column->buf && offset) {
- RETURN_STRINGL(column->buf, offset, 1);
- } else {
- RETURN_FALSE;
- }
- }
- default:
- php_error(E_WARNING,"Ora_GetColumn found invalid type (%d)", type);
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string ora_error(int cursor_or_connection)
- Get an Oracle error message */
-PHP_FUNCTION(ora_error)
-{
- pval **arg;
- oraCursor *cursor;
- oraConnection *conn;
- void *res;
- int what;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc >> 1 || zend_get_parameters_ex(argc, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 1) {
- res = zend_fetch_resource(arg TSRMLS_CC, -1,"Oracle-Connection/Cursor",&what,3,le_conn, le_pconn, le_cursor);
- ZEND_VERIFY_RESOURCE(res);
-
- if (what == le_cursor) {
- cursor = (oraCursor *) res;
- RETURN_STRING(ora_error(&cursor->cda),1);
- } else {
- conn = (oraConnection *) res;
- RETURN_STRING(ora_error(&conn->lda),1);
- }
- } else {
- RETURN_STRING(ora_error(&ORA(db_err_conn).lda),1);
- }
-}
-/* }}} */
-
-/* {{{ proto int ora_errorcode(int cursor_or_connection)
- Get an Oracle error code */
-PHP_FUNCTION(ora_errorcode)
-{
- pval **arg;
- oraCursor *cursor;
- oraConnection *conn;
- void *res;
- int what;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc >> 1 || zend_get_parameters_ex(argc, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 1) {
- res = zend_fetch_resource(arg TSRMLS_CC, -1,"Oracle-Connection/Cursor",&what,3,le_conn, le_pconn, le_cursor);
- ZEND_VERIFY_RESOURCE(res);
-
- if (what == le_cursor) {
- cursor = (oraCursor *) res;
- RETURN_LONG(cursor->cda.rc);
- } else {
- conn = (oraConnection *) res;
- RETURN_LONG(conn->lda.rc);
- }
- } else {
- RETURN_LONG(ORA(db_err_conn).lda.rc);
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(oracle)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Oracle Support", "enabled");
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "Oracle Version", PHP_ORACLE_VERSION );
- php_info_print_table_row(2, "Compile-time ORACLE_HOME", PHP_ORACLE_DIR );
- php_info_print_table_row(2, "Libraries Used", PHP_ORACLE_SHARED_LIBADD );
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
-** Functions internal to this module.
-*/
-
-/* {{{ ora_get_cursor
- */
-static oraCursor *
-ora_get_cursor(HashTable *list, pval **ind TSRMLS_DC)
-{
- oraCursor *cursor;
- oraConnection *db_conn;
-
- cursor = (oraCursor *) zend_fetch_resource(ind TSRMLS_CC, -1, "Oracle-Cursor", NULL, 1, le_cursor);
- if (! cursor) {
- return NULL;
- }
-
- if (zend_hash_find(ORA(conns),(void*)&(cursor->conn_ptr),sizeof(void*),(void **)&db_conn) == FAILURE) {
- php_error(E_WARNING, "Connection already closed for cursor index %d", ind);
- return NULL;
- }
-
- return cursor;
-}
-/* }}} */
-
-/* {{{ ora_error
- */
-static char *
-ora_error(Cda_Def * cda)
-{
- sword n, l;
- static text errmsg[ 512 ];
-
- n = oerhms(cda, cda->rc, errmsg, 400);
-
- /* remove the last newline */
- l = strlen(errmsg);
- if (l < 400 && errmsg[l - 1] == '\n') {
- errmsg[l - 1] = '\0';
- l--;
- }
- if (cda->fc > 0) {
- strcat(errmsg, " -- while processing OCI function ");
- strncat(errmsg, ora_func_tab[cda->fc], 75); /* 512 - 400 - 36 */
- }
- return (char *) errmsg;
-}
-/* }}} */
-
-/* {{{ ora_describe_define
- */
-static sword
-ora_describe_define(oraCursor * cursor)
-{
- long col = 0;
- int i;
- sb2 type;
- sb4 dbsize;
-
- if (cursor == NULL) {
- return -1;
- }
-
- if (cursor->columns) {
- for(i = 0; i < cursor->ncols; i++){
- if (cursor->columns[i].buf)
- efree(cursor->columns[i].buf);
- }
- efree(cursor->columns);
- }
-
- cursor->ncols = 0;
-
- while(1){
- if (odescr(&cursor->cda, (sword) cursor->ncols + 1, &dbsize, (sb2 *)0, (sb1 *)0,
- (sb4 *)0, (sb4 *)0, (sb2 *)0, (sb2 *)0, (sb2 *)0)){
- if (cursor->cda.rc == VAR_NOT_IN_LIST) {
- break;
- } else {
- php_error(E_WARNING, "%s", ora_error(&cursor->cda));
- cursor->ncols = 0;
- return -1;
- }
- }
- cursor->ncols++;
- }
-
- if (cursor->ncols > 0){
- cursor->columns = (oraColumn *) emalloc(sizeof(oraColumn) * cursor->ncols);
- if (cursor->columns == NULL){
- php_error(E_WARNING, "Out of memory");
- return -1;
- }
- memset(cursor->columns,0,sizeof(oraColumn) * cursor->ncols);
- }
-
- for(col = 0; col < cursor->ncols; col++){
- cursor->columns[col].cbufl = ORANAMELEN;
-
- if (odescr(&cursor->cda, (sword)col + 1, &cursor->columns[col].dbsize,
- &cursor->columns[col].dbtype, &cursor->columns[col].cbuf[0],
- &cursor->columns[col].cbufl, &cursor->columns[col].dsize,
- &cursor->columns[col].prec, &cursor->columns[col].scale,
- &cursor->columns[col].nullok)) {
- if (cursor->cda.rc == VAR_NOT_IN_LIST) {
- break;
- } else {
- php_error(E_WARNING, "%s", ora_error(&cursor->cda));
- return -1;
- }
- }
-
- cursor->columns[col].cbuf[cursor->columns[col].cbufl] = '\0';
-
- switch (cursor->columns[col].dbtype) {
- case SQLT_LBI:
- cursor->columns[col].dsize = DB_SIZE;
- type = SQLT_LBI;
- break;
- case SQLT_LNG:
- cursor->columns[col].dsize = DB_SIZE;
- default:
- type = SQLT_STR;
- break;
- }
-
- if ((cursor->columns[col].buf = (ub1 *) emalloc(cursor->columns[col].dsize + 1)) == NULL){
- php_error(E_WARNING, "Out of memory");
- return -1;
- }
- /* Define an output variable for the column */
- if (odefin(&cursor->cda, (sword)col + 1, cursor->columns[col].buf,
- cursor->columns[col].dsize + 1, type, -1, &cursor->columns[col].indp,
- (text *) 0, -1, -1, &cursor->columns[col].col_retlen,
- &cursor->columns[col].col_retcode)) {
- php_error(E_WARNING, "%s", ora_error(&cursor->cda));
- return -1;
- }
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ora_set_param_values
- */
-int ora_set_param_values(oraCursor *cursor, int isout TSRMLS_DC)
-{
- char *paramname;
- oraParam *param;
- pval **pdata;
- int i, len, plen;
-
- zend_hash_internal_pointer_reset(cursor->params);
-
- if(zend_hash_num_elements(cursor->params) != cursor->nparams){
- php_error(E_WARNING, "Mismatch in number of parameters");
- return 0;
- }
-
- for(i = 0; i < cursor->nparams; i++, zend_hash_move_forward(cursor->params)){
- if(zend_hash_get_current_key(cursor->params, &paramname, NULL, 0) != HASH_KEY_IS_STRING){
- php_error(E_WARNING, "Can't get parameter name");
- return 0;
- }
-
- if(zend_hash_get_current_data(cursor->params, (void **)&param) == FAILURE){
- php_error(E_WARNING, "Can't get parameter data");
- return 0;
- }
-
- if(isout){
- SET_VAR_STRINGL(paramname, estrdup(param->progv), strlen(param->progv));
- continue;
- }
-
- /* doing the in-loop */
-
- if (zend_hash_find(&EG(symbol_table), paramname, strlen(paramname) + 1, (void **)&pdata) == FAILURE){
- php_error(E_WARNING, "Can't find variable for parameter");
- return 0;
- }
-
- convert_to_string(*pdata);
- plen = Z_STRLEN_PP(pdata);
-
- if (param->progvl <= plen){
- php_error(E_NOTICE, "Input value will be truncated");
- }
-
- len = min(param->progvl - 1, plen);
-
- strncpy(param->progv, Z_STRVAL_PP(pdata), len);
- param->progv[len] = '\0';
- }
-
- return 1;
-}
-/* }}} */
-
-#endif /* HAVE_ORACLE */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/oracle/oracle.dsp b/ext/oracle/oracle.dsp
deleted file mode 100644
index 1791bf877c..0000000000
--- a/ext/oracle/oracle.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="oracle" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=oracle - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "oracle.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "oracle.mak" CFG="oracle - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "oracle - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "oracle - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "oracle - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ORACLE" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\oci73\include" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ORACLE=1 /D COMPILE_DL_ORACLE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib ociw32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_oracle.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\oci73\lib" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "oracle - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\oci73\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ORACLE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ORACLE=1 /D COMPILE_DL_ORACLE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts-debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib ociw32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_oracle.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\oci73\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "oracle - Win32 Release_TS"
-# Name "oracle - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\oracle.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_oracle.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/oracle/php_oracle.h b/ext/oracle/php_oracle.h
deleted file mode 100644
index a761dff53b..0000000000
--- a/ext/oracle/php_oracle.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $Id$ */
-
-/* synced with oracle.h,v 1.40 1999/06/01 08:11:04 thies Exp $ */
-
-#ifndef PHP_ORACLE_H
-#define PHP_ORACLE_H
-
-#if HAVE_ORACLE
-
-#if (defined(__osf__) && defined(__alpha))
-# ifndef A_OSF
-# define A_OSF
-# endif
-# ifndef OSF1
-# define OSF1
-# endif
-# ifndef _INTRINSICS
-# define _INTRINSICS
-# endif
-#endif /* osf alpha */
-
-#include "oratypes.h"
-#include "ocidfn.h"
-#include "ociapr.h"
-
-extern zend_module_entry oracle_module_entry;
-#define phpext_oracle_ptr &oracle_module_entry
-
-#ifdef ZTS
-#define ORA(v) TSRMG(ora_globals_id, php_ora_globals *, v)
-#else
-#define ORA(v) (ora_globals.v)
-#endif
-
-/* oparse flags */
-#define DEFER_PARSE 1
-#define NATIVE 1
-#define VERSION_7 2
-
-#define ORANUMWIDTH 38
-
-#if (defined(__osf__) && defined(__alpha)) || defined(CRAY) || defined(KSR)
-#define HDA_SIZE 512
-#else
-#define HDA_SIZE 256
-#endif
-
-#define ORAUIDLEN 32
-#define ORAPWLEN 32
-#define ORANAMELEN 32
-#define ORABUFLEN 2000
-
-/* Some Oracle error codes */
-#define VAR_NOT_IN_LIST 1007
-#define NO_DATA_FOUND 1403
-#define NULL_VALUE_RETURNED 1405
-
-/* Some SQL and ORA function codes */
-#define FT_INSERT 3
-#define FT_SELECT 4
-#define FT_UPDATE 5
-#define FT_DELETE 9
-
-#define FC_OOPEN 14
-
-typedef struct {
- int open;
- int persistent;
- Lda_Def lda;
- ub1 hda[HDA_SIZE];
-} oraConnection;
-
-typedef struct oraColumn {
- sb4 dbsize;
- sb2 dbtype;
- text cbuf[ORANAMELEN+1];
- sb4 cbufl;
- sb4 dsize;
- sb2 prec;
- sb2 scale;
- sb2 nullok;
- ub1 *buf;
- sb2 indp;
- ub2 col_retlen, col_retcode;
-} oraColumn;
-
-typedef struct oraParam {
- text *progv;
- sword progvl;
- sb2 inout;
- ub2 alen;
-} oraParam;
-
-typedef struct oraCursor {
- int open;
- Cda_Def cda;
- text *query;
- HashTable *params;
- int nparams;
- oraColumn *columns;
- int ncols;
- int fetched;
- oraConnection *conn_ptr;
- int conn_id;
-} oraCursor;
-
-typedef struct {
- char *defDB;
- char *defUser;
- char *defPW;
- long allow_persistent;
- long max_persistent;
- long max_links;
- long num_persistent;
- long num_links;
- HashTable *conns;
- oraConnection db_err_conn;
-} php_ora_globals;
-
-#else
-
-#define phpext_oracle_ptr NULL
-
-#endif /* HAVE_ORACLE */
-
-#endif /* PHP_ORACLE_H */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
-
-
-
diff --git a/ext/overload/CREDITS b/ext/overload/CREDITS
deleted file mode 100644
index 31845154a6..0000000000
--- a/ext/overload/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-User-space object overloading
-Andrei Zmievski
diff --git a/ext/overload/README b/ext/overload/README
deleted file mode 100644
index 1ae3dcc557..0000000000
--- a/ext/overload/README
+++ /dev/null
@@ -1,94 +0,0 @@
-The purpose of this extension is to allow user-space overloading of object
-property access and method calls. It has only one function, overload() which
-takes the name of the class that should have this functionality enabled. But
-the class has to define appropriate methods if it wants to have this
-functionality: __get(), __set(), and __call(). So, overloading can be
-selective.
-
-Inside each handler the overloading is disabled so you can access object
-properties normally.
-
-
-Usage
------
-<?php
-
-class OO {
- var $a = 111;
- var $elem = array('b' => 9, 'c' => 42);
-
- function OO($aval = null)
- {
- $this->a = $aval;
- }
-
- function __get($prop_name, &$prop_value)
- {
- if (isset($this->elem[$prop_name])) {
- $prop_value = $this->elem[$prop_name];
- return true;
- } else
- return false;
- }
-
- function __set($prop_name, $prop_value)
- {
- $this->elem[$prop_name] = $prop_value;
- return true;
- }
-
- function __call($method, $args, &$return_value)
- {
- print '-- OO::' . $method . "() was called.--\n";
- $return_value = call_user_func_array(array(&$this, 'my_' . $method), $args);
- return true;
- }
-
- function my_whatever($f1, $f2, $f3)
- {
- var_dump($f1, $f2, $f3);
- return $f1 + $f2;
- }
-
- function __get_foo(&$prop_value)
- {
- $prop_value = 'Bam bam bam!';
- return true;
- }
-
- function __set_count($prop_value)
- {
- if ($prop_value >= 1 && $prop_value <= 100) {
- $this->elem['COUNT'] = $prop_value;
- return true;
- } else
- return false;
- }
-}
-
-overload('OO');
-
-$o = new OO;
-print "\$o->a: $o->a\n";
-print "\$o->b: $o->b\n";
-print "\$o->c: $o->c\n";
-print "\$o->d: $o->d\n";
-
-$val = new stdclass;
-$val->prop = 555;
-
-$o->a = array($val);
-var_dump($o->a[0]->prop);
-
-var_dump($o->whatever(1, 2, 'a'));
-
-var_dump($o->foo);
-$o->count = 100;
-var_dump($o->COUNT);
-
-?>
-
-What doesn't work
------------------
-Invoking original overloading handlers, if the class had any.
-__set() only works to one level of property access, no chains yet.
diff --git a/ext/overload/config.m4 b/ext/overload/config.m4
deleted file mode 100644
index be0576ca28..0000000000
--- a/ext/overload/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(overload,whether to enable user-space object overloading support,
-[ --disable-overload Disable user-space object overloading support.], yes)
-
-if test "$PHP_OVERLOAD" != "no"; then
- AC_DEFINE(HAVE_OVERLOAD, 1, [ ])
- PHP_NEW_EXTENSION(overload, overload.c, $ext_shared)
-fi
diff --git a/ext/overload/overload.c b/ext/overload/overload.c
deleted file mode 100644
index 6b234437fb..0000000000
--- a/ext/overload/overload.c
+++ /dev/null
@@ -1,706 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * TODO:
- * + provide a way for user to enable/disabling overloading of get/set/call
- * individually
- * - call original overloaded handlers if necessary
- * + use local copy of CE with NULL'ed out handler when calling object's
- * overloaded function
- * - handle both OE_IS_OBJECT and OE_IS_ARRAY in the whole chain
- * + see how to fix the issue of object trying to set its own property inside
- * the handler
- * + check if function exists in function table, then call it, otherwise
- * call handler (aka AUTOLOAD in Perl)
- * + should it check for existing properties first before calling __get/__set:
- * yes
- * + turn off all overloading handlers on a call to a handler
- * - pass array overloading info on to handlers?
- * - add unoverload() function
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_overload.h"
-
-#if HAVE_OVERLOAD
-
-#define GET_HANDLER "__get"
-#define SET_HANDLER "__set"
-#define CALL_HANDLER "__call"
-
-#define DISABLE_HANDLERS(ce) \
- (ce).handle_property_get = NULL; \
- (ce).handle_property_set = NULL; \
- (ce).handle_function_call = NULL;
-
-typedef struct _oo_class_data {
- void (*handle_function_call)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
- zval (*handle_property_get)(zend_property_reference *property_reference);
- int (*handle_property_set)(zend_property_reference *property_reference, zval *value);
- HashTable getters;
- HashTable setters;
-} oo_class_data;
-
-ZEND_DECLARE_MODULE_GLOBALS(overload)
-
-function_entry overload_functions[] = {
- PHP_FE(overload, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry overload_module_entry = {
- STANDARD_MODULE_HEADER,
- "overload",
- overload_functions,
- PHP_MINIT(overload),
- PHP_MSHUTDOWN(overload),
- NULL,
- PHP_RSHUTDOWN(overload),
- PHP_MINFO(overload),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_OVERLOAD
-ZEND_GET_MODULE(overload)
-#endif
-
-static void overloaded_class_dtor(oo_class_data *oo_data)
-{
- zend_hash_destroy(&oo_data->getters);
- zend_hash_destroy(&oo_data->setters);
-}
-
-/* {{{ php_overload_init_globals */
-static void php_overload_init_globals(zend_overload_globals *overload_globals TSRMLS_DC)
-{
- zend_hash_init(&overload_globals->overloaded_classes, 10, NULL,
- (dtor_func_t)overloaded_class_dtor, 1);
-}
-/* }}} */
-
-/* {{{ php_overload_destroy_globals */
-static void php_overload_destroy_globals(zend_overload_globals *overload_globals TSRMLS_DC)
-{
- zend_hash_destroy(&overload_globals->overloaded_classes);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(overload) */
-PHP_MINIT_FUNCTION(overload)
-{
- ZEND_INIT_MODULE_GLOBALS(overload, php_overload_init_globals, php_overload_destroy_globals);
-
- /* If you have INI entries, uncomment these lines
- REGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(overload) */
-PHP_MSHUTDOWN_FUNCTION(overload)
-{
-#ifdef ZTS
- ts_free_id(overload_globals_id);
-#else
- php_overload_destroy_globals(&overload_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION(overload) */
-PHP_RSHUTDOWN_FUNCTION(overload)
-{
- zend_hash_clean(&OOG(overloaded_classes));
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION */
-PHP_MINFO_FUNCTION(overload)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "User-Space Object Overloading Support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-/*
- * In all three handlers, we save the original CE of the object, and replace it
- * with a temporary one that has all handlers turned off. This is to avoid
- * recursive calls to our handlers. We can't simply set a handler to NULL on the
- * original CE, as that would disable overloading on other objects of the same
- * class. After invoking the callback we restore the object's CE.
- */
-
-/* {{{ static int call_get_handler() */
-static int call_get_handler(zval *object, zval *prop_name, zval **prop_value TSRMLS_DC)
-{
- int call_result;
- zend_class_entry temp_ce, *orig_ce;
- zval result, *result_ptr = &result;
- zval get_handler;
- zval **args[2];
- zval *retval = NULL;
- char *lcase_prop_name;
- zval **accessor_name;
- oo_class_data *oo_data;
-
- if (zend_hash_index_find(&OOG(overloaded_classes), (long)Z_OBJCE_P(object), (void**)&oo_data) == FAILURE) {
- php_error(E_WARNING, "internal problem trying to get property");
- return 0;
- }
-
- temp_ce = *Z_OBJCE_P(object);
- DISABLE_HANDLERS(temp_ce);
- orig_ce = Z_OBJCE_P(object);
- Z_OBJ_P(object)->ce = &temp_ce;
-
- result_ptr->is_ref = 1;
- result_ptr->refcount = 1;
- ZVAL_NULL(result_ptr);
-
- lcase_prop_name = estrndup(Z_STRVAL_P(prop_name), Z_STRLEN_P(prop_name));
- zend_str_tolower(lcase_prop_name, Z_STRLEN_P(prop_name));
- if (zend_hash_find(&oo_data->getters, lcase_prop_name,
- Z_STRLEN_P(prop_name)+1, (void **)&accessor_name) == SUCCESS) {
- efree(lcase_prop_name);
- args[0] = &result_ptr;
-
- call_result = call_user_function_ex(NULL,
- &object,
- *accessor_name,
- &retval,
- 1, args,
- 0, NULL TSRMLS_CC);
- Z_OBJ_P(object)->ce = orig_ce;
-
- if (call_result == FAILURE || !retval) {
- php_error(E_WARNING, "unable to call %s::" GET_HANDLER "_%s() handler", Z_OBJCE_P(object)->name, Z_STRVAL_P(prop_name));
- return 0;
- }
- } else {
- efree(lcase_prop_name);
- ZVAL_STRINGL(&get_handler, GET_HANDLER, sizeof(GET_HANDLER)-1, 0);
- args[0] = &prop_name;
- args[1] = &result_ptr;
-
- call_result = call_user_function_ex(NULL,
- &object,
- &get_handler,
- &retval,
- 2, args,
- 0, NULL TSRMLS_CC);
- Z_OBJ_P(object)->ce = orig_ce;
-
- if (call_result == FAILURE || !retval) {
- php_error(E_WARNING, "unable to call %s::" GET_HANDLER "() handler", Z_OBJCE_P(object)->name);
- return 0;
- }
- }
-
- if (zval_is_true(retval)) {
- REPLACE_ZVAL_VALUE(prop_value, result_ptr, 0);
- zval_ptr_dtor(&retval);
- return 1;
- }
-
- zval_ptr_dtor(&retval);
- zval_dtor(result_ptr);
-
- if (!oo_data->handle_property_get) {
- return 0;
- }
-
- /* TODO: call original OO handler */
-
- return 0;
-}
-/* }}} */
-
-/* {{{ static int call_set_handler() */
-int call_set_handler(zval *object, zval *prop_name, zval *value TSRMLS_DC)
-{
- int call_result;
- zend_class_entry temp_ce, *orig_ce;
- zval set_handler;
- zval *value_copy;
- zval **args[2];
- zval *retval = NULL;
- char *lcase_prop_name;
- zval **accessor_name;
- oo_class_data *oo_data;
-
- if (zend_hash_index_find(&OOG(overloaded_classes), (long)Z_OBJCE_P(object), (void**)&oo_data) == FAILURE) {
- php_error(E_WARNING, "internal problem trying to set property");
- return 0;
- }
-
- temp_ce = *Z_OBJCE_P(object);
- DISABLE_HANDLERS(temp_ce);
- orig_ce = Z_OBJCE_P(object);
- Z_OBJ_P(object)->ce = &temp_ce;
-
- if (value->refcount == 0) {
- MAKE_STD_ZVAL(value_copy);
- *value_copy = *value;
- zval_copy_ctor(value_copy);
- value = value_copy;
- }
-
- lcase_prop_name = estrndup(Z_STRVAL_P(prop_name), Z_STRLEN_P(prop_name));
- zend_str_tolower(lcase_prop_name, Z_STRLEN_P(prop_name));
- if (zend_hash_find(&oo_data->setters, lcase_prop_name,
- Z_STRLEN_P(prop_name)+1, (void **)&accessor_name) == SUCCESS) {
- efree(lcase_prop_name);
- args[0] = &value;
-
- call_result = call_user_function_ex(NULL,
- &object,
- *accessor_name,
- &retval,
- 1, args,
- 0, NULL TSRMLS_CC);
- Z_OBJ_P(object)->ce = orig_ce;
-
- if (call_result == FAILURE || !retval) {
- php_error(E_WARNING, "unable to call %s::" SET_HANDLER "_%s() handler", Z_OBJCE_P(object)->name, Z_STRVAL_P(prop_name));
- return 0;
- }
- } else {
- efree(lcase_prop_name);
- ZVAL_STRINGL(&set_handler, SET_HANDLER, sizeof(SET_HANDLER)-1, 0);
- args[0] = &prop_name;
- args[1] = &value;
-
- call_result = call_user_function_ex(NULL,
- &object,
- &set_handler,
- &retval,
- 2, args,
- 0, NULL TSRMLS_CC);
- Z_OBJ_P(object)->ce = orig_ce;
-
- if (call_result == FAILURE || !retval) {
- php_error(E_WARNING, "unable to call %s::" SET_HANDLER "() handler", orig_ce->name);
- return 0;
- }
- }
-
- if (zval_is_true(retval)) {
- zval_ptr_dtor(&retval);
- return 1;
- }
-
- zval_ptr_dtor(&retval);
-
- if (!oo_data->handle_property_set) {
- return 0;
- }
-
- /* TODO: call original OO handler */
-
- return 0;
-
-}
-/* }}} */
-
-#define CLEANUP_OO_CHAIN() { \
- for (; element; element=element->next) { \
- zval_dtor(&((zend_overloaded_element *)element->data)->element); \
- } \
-} \
-
-/* {{{ zval overload_get_property() */
-static zval overload_get_property(zend_property_reference *property_reference)
-{
- zval result;
- zval *result_ptr = &result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- zval object = *property_reference->object;
- zval **real_prop;
- int got_prop = 0;
- TSRMLS_FETCH();
-
- INIT_PZVAL(result_ptr);
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- ZVAL_NULL(result_ptr);
-
- if (Z_TYPE_P(overloaded_property) == OE_IS_OBJECT) {
- /* Trying to access a property on a non-object. */
- if (Z_TYPE(object) != IS_OBJECT) {
- CLEANUP_OO_CHAIN();
- if (got_prop)
- zval_dtor(&object);
- return result;
- }
-
- if (zend_hash_find(Z_OBJPROP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&real_prop) == SUCCESS) {
- result = **real_prop;
- /* printf("is_ref: %d, refcount: %d\n", (*real_prop)->is_ref, (*real_prop)->refcount); */
- /* REPLACE_ZVAL_VALUE(&result_ptr, *real_prop, 1); */
- } else if (Z_OBJCE(object)->handle_property_get == overload_get_property &&
- call_get_handler(&object,
- &overloaded_property->element,
- &result_ptr TSRMLS_CC)) {
- got_prop = 1;
- } else {
- php_error(E_NOTICE, "Undefined property: %s", Z_STRVAL(overloaded_property->element));
- CLEANUP_OO_CHAIN();
- if (got_prop)
- zval_dtor(&object);
- return result;
- }
- } else if (Z_TYPE_P(overloaded_property) == OE_IS_ARRAY) {
- /* Trying to access index on a non-array. */
- if (Z_TYPE(object) != IS_ARRAY) {
- CLEANUP_OO_CHAIN();
- if (got_prop)
- zval_dtor(&object);
- return result;
- }
-
- if (Z_TYPE(overloaded_property->element) == IS_STRING) {
- if (zend_hash_find(Z_ARRVAL(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&real_prop) == FAILURE) {
- CLEANUP_OO_CHAIN();
- if (got_prop)
- zval_dtor(&object);
- return result;
- }
- } else if (Z_TYPE(overloaded_property->element) == IS_LONG) {
- if (zend_hash_index_find(Z_ARRVAL(object),
- Z_LVAL(overloaded_property->element),
- (void **)&real_prop) == FAILURE) {
- CLEANUP_OO_CHAIN();
- if (got_prop)
- zval_dtor(&object);
- return result;
- }
- }
-
- result = **real_prop;
- }
-
- zval_dtor(&overloaded_property->element);
- /* printf("got_prop: %d\n", got_prop); */
- if (element != property_reference->elements_list->head && got_prop) {
- zval_dtor(&object);
- got_prop = 0;
- }
-
- object = result;
- }
-
- if (!got_prop)
- zval_copy_ctor(&result);
-
- return result;
-}
-/* }}} */
-
-/* {{{ int overload_set_property() */
-static int overload_set_property(zend_property_reference *property_reference, zval *value)
-{
- zval result;
- zval *result_ptr = &result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- zval **object = &property_reference->object;
- TSRMLS_FETCH();
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- ZVAL_NULL(result_ptr);
-
- if (Z_TYPE_P(overloaded_property) == OE_IS_OBJECT) {
- /* Trying to access a property on a non-object. */
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- CLEANUP_OO_CHAIN();
- return FAILURE;
- }
-
- if (zend_hash_find(Z_OBJPROP_PP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&object) == FAILURE) {
-
- if (element == property_reference->elements_list->tail) {
- if (Z_OBJCE_PP(object)->handle_property_set == overload_set_property &&
- call_set_handler(*object,
- &overloaded_property->element,
- value TSRMLS_CC)) {
- CLEANUP_OO_CHAIN();
- return SUCCESS;
- } else {
- php_error(E_WARNING, "Unable to set property: %s", Z_STRVAL(overloaded_property->element));
- CLEANUP_OO_CHAIN();
- return FAILURE;
- }
- }
-
- if (Z_OBJCE_PP(object)->handle_property_get == overload_get_property &&
- call_get_handler(*object,
- &overloaded_property->element,
- &result_ptr TSRMLS_CC)) {
- object = &result_ptr;
- } else {
- php_error(E_NOTICE, "Undefined property: %s", Z_STRVAL(overloaded_property->element));
- CLEANUP_OO_CHAIN();
- return FAILURE;
- }
- }
- } else if (Z_TYPE_P(overloaded_property) == OE_IS_ARRAY) {
- }
-
- zval_dtor(&overloaded_property->element);
- }
-
- /* printf("value is_ref: %d, refcount: %d\n", value->is_ref, value->refcount); */
- REPLACE_ZVAL_VALUE(object, value, 1);
- /* printf("object is_ref: %d, refcount: %d\n", (*object)->is_ref, (*object)->refcount); */
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ void overload_call_method() */
-static void overload_call_method(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- zval ***args;
- zval *retval = NULL;
- int call_result;
- zend_bool use_call_handler = 1;
- zval *object = property_reference->object;
- zval call_handler, method_name, *method_name_ptr = &method_name;
- zend_overloaded_element *method = (zend_overloaded_element *)property_reference->elements_list->tail->data;
-
- /*
- * We don't use the call handler if the invoked method exists in object's
- * method table.
- */
- if (zend_hash_exists(&Z_OBJCE_P(object)->function_table,
- Z_STRVAL(method->element),
- Z_STRLEN(method->element) + 1)) {
- use_call_handler = 0;
- }
-
- args = (zval ***)emalloc(ZEND_NUM_ARGS() * sizeof(zval **));
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- php_error(E_WARNING, "unable to obtain arguments");
- return;
- }
-
- if (use_call_handler) {
- zval **handler_args[3];
- zval *arg_array;
- zval result, *result_ptr = &result;
- zend_class_entry temp_ce, *orig_ce;
- int i;
-
- temp_ce = *Z_OBJCE_P(object);
- DISABLE_HANDLERS(temp_ce);
- orig_ce = Z_OBJCE_P(object);
- Z_OBJ_P(object)->ce = &temp_ce;
-
- ZVAL_STRINGL(&call_handler, CALL_HANDLER, sizeof(CALL_HANDLER)-1, 0);
- ZVAL_STRINGL(&method_name, Z_STRVAL(method->element), Z_STRLEN(method->element), 0);
- INIT_PZVAL(&call_handler);
- INIT_PZVAL(method_name_ptr);
-
- MAKE_STD_ZVAL(arg_array);
- array_init(arg_array);
- for (i = 0; i < ZEND_NUM_ARGS(); i++) {
- zval_add_ref(args[i]);
- add_next_index_zval(arg_array, *args[i]);
- }
-
- result_ptr->is_ref = 1;
- result_ptr->refcount = 1;
- ZVAL_NULL(result_ptr);
-
- handler_args[0] = &method_name_ptr;
- handler_args[1] = &arg_array;
- handler_args[2] = &result_ptr;
- call_result = call_user_function_ex(NULL,
- &object,
- &call_handler,
- &retval,
- 3, handler_args,
- 0, NULL TSRMLS_CC);
- Z_OBJ_P(object)->ce = orig_ce;
- zval_ptr_dtor(&arg_array);
-
- if (call_result == FAILURE || !retval) {
- efree(args);
- zval_dtor(result_ptr);
- php_error(E_WARNING, "unable to call %s::" CALL_HANDLER "() handler", Z_OBJCE_P(object)->name);
- return;
- }
-
- if (zval_is_true(retval)) {
- *return_value = *result_ptr;
- INIT_PZVAL(return_value);
- } else {
- zval_dtor(result_ptr);
- php_error(E_WARNING, "Call to undefined method %s::%s()", Z_OBJCE_P(object)->name, Z_STRVAL(method_name));
- }
- zval_ptr_dtor(&retval);
- } else {
- ZVAL_STRINGL(&call_handler, Z_STRVAL(method->element), Z_STRLEN(method->element), 0);
- call_result = call_user_function_ex(NULL,
- &object,
- &call_handler,
- &retval,
- ZEND_NUM_ARGS(), args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == FAILURE || !retval) {
- efree(args);
- php_error(E_WARNING, "unable to call %s::%s() method", Z_OBJCE_P(object)->name, Z_STRVAL(method->element));
- return;
- }
-
- *return_value = *retval;
- INIT_PZVAL(return_value);
- FREE_ZVAL(retval);
- }
-
- efree(args);
- zval_dtor(&method->element);
-}
-/* }}} */
-
-/* {{{ static int locate_accessors() */
-static int locate_accessors(zend_function *method, oo_class_data *oo_data TSRMLS_DC)
-{
- zval *accessor_name;
- char *function_name = method->common.function_name;
- int function_name_len = strlen(method->common.function_name);
-
- if (!strncmp(function_name, GET_HANDLER "_", sizeof(GET_HANDLER "_")-1)) {
- MAKE_STD_ZVAL(accessor_name);
- ZVAL_STRINGL(accessor_name, function_name, function_name_len, 1);
- zend_hash_update(&oo_data->getters,
- function_name + sizeof(GET_HANDLER "_") - 1,
- function_name_len - sizeof(GET_HANDLER "_") + 2,
- (void *)&accessor_name, sizeof(zval *), NULL);
-
- } else if (!strncmp(function_name, SET_HANDLER "_", sizeof(SET_HANDLER "_")-1)) {
- MAKE_STD_ZVAL(accessor_name);
- ZVAL_STRINGL(accessor_name, function_name, function_name_len, 1);
- zend_hash_update(&oo_data->setters,
- function_name + sizeof(SET_HANDLER "_") - 1,
- function_name_len - sizeof(SET_HANDLER "_") + 2,
- (void *)&accessor_name, sizeof(zval *), NULL);
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ proto void overload(string class_entry)
- Enables property and method call overloading for a class. */
-PHP_FUNCTION(overload)
-{
- char *class_entry = NULL;
- int argc = ZEND_NUM_ARGS();
- int class_entry_len;
- zend_class_entry *ce = NULL;
- oo_class_data oo_data;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "s/", &class_entry, &class_entry_len) == FAILURE)
- return;
-
- zend_str_tolower(class_entry, class_entry_len);
- if (zend_hash_find(EG(class_table), class_entry, class_entry_len+1, (void**)&ce) == FAILURE) {
- php_error(E_WARNING, "%s() was unable to locate class '%s'", get_active_function_name(TSRMLS_C), class_entry);
- RETURN_FALSE;
- }
-
- /* Check if the handlers have already been installed for this class. */
- if (zend_hash_index_exists(&OOG(overloaded_classes), (long)ce)) {
- RETURN_TRUE;
- }
-
- zend_hash_init(&oo_data.getters, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_init(&oo_data.setters, 10, NULL, ZVAL_PTR_DTOR, 0);
-
- zend_hash_apply_with_argument(&ce->function_table, (apply_func_arg_t)locate_accessors, (void *)&oo_data TSRMLS_CC);
-
- if (zend_hash_exists(&ce->function_table, GET_HANDLER, sizeof(GET_HANDLER)) ||
- zend_hash_num_elements(&oo_data.getters)) {
- oo_data.handle_property_get = ce->handle_property_get;
- ce->handle_property_get = overload_get_property;
- } else
- oo_data.handle_property_get = NULL;
-
- if (zend_hash_exists(&ce->function_table, SET_HANDLER, sizeof(SET_HANDLER)) ||
- zend_hash_num_elements(&oo_data.setters)) {
- oo_data.handle_property_set = ce->handle_property_set;
- ce->handle_property_set = overload_set_property;
- } else
- oo_data.handle_property_set = NULL;
-
- if (zend_hash_exists(&ce->function_table, CALL_HANDLER, sizeof(CALL_HANDLER))) {
- oo_data.handle_function_call = ce->handle_function_call;
- ce->handle_function_call = overload_call_method;
- } else
- oo_data.handle_function_call = NULL;
-
- zend_hash_index_update(&OOG(overloaded_classes), (long)ce, &oo_data, sizeof(oo_data), NULL);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif /* HAVE_OVERLOAD */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/overload/overload.dsp b/ext/overload/overload.dsp
deleted file mode 100644
index 70b26fb353..0000000000
--- a/ext/overload/overload.dsp
+++ /dev/null
@@ -1,108 +0,0 @@
-# Microsoft Developer Studio Project File - Name="overload" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=overload - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "overload.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "overload.mak" CFG="overload - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "overload - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "overload - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "overload - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "overload_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_OVERLOAD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OVERLOAD=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_overload.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "overload - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "overload_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_OVERLOAD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OVERLOAD=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_overload.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "overload - Win32 Release_TS"
-# Name "overload - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\overload.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_overload.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/overload/php_overload.h b/ext/overload/php_overload.h
deleted file mode 100644
index aa17e87ce6..0000000000
--- a/ext/overload/php_overload.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_OVERLOAD_H
-#define PHP_OVERLOAD_H
-
-#if HAVE_OVERLOAD
-
-extern zend_module_entry overload_module_entry;
-#define phpext_overload_ptr &overload_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_OVERLOAD_API __declspec(dllexport)
-#else
-#define PHP_OVERLOAD_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(overload);
-PHP_MSHUTDOWN_FUNCTION(overload);
-PHP_RSHUTDOWN_FUNCTION(overload);
-PHP_MINFO_FUNCTION(overload);
-
-PHP_FUNCTION(overload);
-
-ZEND_BEGIN_MODULE_GLOBALS(overload)
- HashTable overloaded_classes;
-ZEND_END_MODULE_GLOBALS(overload)
-
-#ifdef ZTS
-#define OOG(v) TSRMG(overload_globals_id, zend_overload_globals *, v)
-#else
-#define OOG(v) (overload_globals.v)
-#endif
-
-#endif /* HAVE_OVERLOAD */
-
-#endif /* PHP_OVERLOAD_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ovrimos/CREDITS b/ext/ovrimos/CREDITS
deleted file mode 100644
index b8c4b75630..0000000000
--- a/ext/ovrimos/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Ovrimos
-Nikos Mavroyanopoulos
diff --git a/ext/ovrimos/config.m4 b/ext/ovrimos/config.m4
deleted file mode 100644
index b424664fb2..0000000000
--- a/ext/ovrimos/config.m4
+++ /dev/null
@@ -1,28 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ovrimos, for Ovrimos SQL Server support,
-[ --with-ovrimos[=DIR] Include Ovrimos SQL Server support. DIR is the
- Ovrimos libsqlcli install directory.])
-
-if test "$PHP_OVRIMOS" != "no"; then
- for i in /usr/local /usr $PHP_OVRIMOS; do
- if test -f $i/include/sqlcli.h; then
- OVRIMOS_DIR=$i
- fi
- done
-
- if test -z "$OVRIMOS_DIR"; then
- AC_MSG_ERROR(Please reinstall Ovrimos' libsqlcli - I cannot find sqlcli.h)
- fi
-
- PHP_ADD_INCLUDE($OVRIMOS_DIR/include)
- PHP_SUBST(OVRIMOS_SHARED_LIBADD)
- LDFLAGS="$LDFLAGS $ld_runpath_switch$OVRIMOS_DIR/lib -L$OVRIMOS_DIR/lib"
- AC_CHECK_LIB(sqlcli, main)
- PHP_ADD_LIBRARY_WITH_PATH(sqlcli, $OVRIMOS_DIR/lib, OVRIMOS_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBSQLCLI,1,[ ])
-
- PHP_NEW_EXTENSION(ovrimos, ovrimos.c, $ext_shared)
-fi
diff --git a/ext/ovrimos/ovrimos.c b/ext/ovrimos/ovrimos.c
deleted file mode 100644
index f074b99a0f..0000000000
--- a/ext/ovrimos/ovrimos.c
+++ /dev/null
@@ -1,1326 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Dimitris Souflis, Nikos Mavroyanopoulos |
- | for Ovrimos S.A. |
- | |
- | Contact support@ovrimos.com for questions regarding this module |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <php.h>
-#include <php_globals.h>
-#include <zend_API.h>
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include <sqlcli.h> /* ovrimos header
- */
-
-#ifndef WIN32 /* stricmp is defined in sqlcli */
-# define stricmp strcasecmp
-#endif
-
-
-PHP_MINFO_FUNCTION(ovrimos)
-{
- php_printf("&quot;Ovrimos&quot; module<br />\n");
-}
-
-/* Main User Functions
- */
-
-/* ovrimos_connect() currently does not support secure (SSL/TLS) connections.
- * As an alternative you can use the unixODBC driver available at
- * http://www.ovrimos.com/download which supports SSL.
- * Contact support@ovrimos.com for more information.
- */
-
-/* 2001-07-27: ovrimos_close_all() function was removed in order
- * for this module to be reentrant.
- */
-
-
-/* structures introduced in order to support the old ovrimos-php-api with
- * the new multi-threaded library (old works with the old library).
- * This version is reentrant.
- *
- * The only limitation is that a connection ( as returned by ovrimos_connect())
- * may only be accessed by one thread (but this is the case in php now).
- */
-
-typedef struct {
- SQLS statement;
- int longreadlen;
- struct _CON_STATE* con_state;
-} STATEMENT;
-
-typedef struct _CON_STATE {
- SQLH connection;
- STATEMENT * statements;
- int nstatements;
-} CON_STATE;
-
-typedef STATEMENT* PSTATEMENT;
-typedef CON_STATE* PCON_STATE;
-
-static void column_to_string(SQLS stmt, int i, char *buffer, int *len, PSTATEMENT pstmt);
-
-/* {{{ proto int ovrimos_connect(string host, string db, string user, string password)
- Connect to an Ovrimos database */
-PHP_FUNCTION(ovrimos_connect)
-{
- pval *arg1, *arg2, *arg3, *arg4;
- PCON_STATE state;
- SQLH conn = 0;
-
- if (ARG_COUNT(ht) != 4
- || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg1);
- convert_to_string(arg2);
- convert_to_string(arg3);
- convert_to_string(arg4);
-
- if (!sqlConnect
- (Z_STRVAL_P(arg1), Z_STRVAL_P(arg2), Z_STRVAL_P(arg3),
- Z_STRVAL_P(arg4), &conn, 0)) {
- RETURN_LONG(0);
- }
-
- state = ecalloc( 1, sizeof(CON_STATE));
- if (state==NULL) RETURN_FALSE;
-
- state->connection = conn;
- state->statements = NULL;
- state->nstatements = 0;
-
- RETURN_LONG( (long)state);
-}
-
-/* }}} */
-
-/* {{{ proto void ovrimos_close(int connection)
- Close a connection */
-PHP_FUNCTION(ovrimos_close)
-{
- pval *arg1;
- int i;
- PCON_STATE state;
-
- if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE
- || Z_TYPE_P(arg1) != IS_LONG) {
- WRONG_PARAM_COUNT;
- }
-
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- /* free all the statements associated with
- * the connection. (called results in php)
- */
-
- for (i=0;i < state->nstatements;i++) {
- if ( state->statements[i].statement!=NULL) {
- sqlFreeStmt( state->statements[i].statement);
- }
- }
- if (state->statements!=NULL)
- efree( state->statements);
-
- /* close the SQL_Handle
- */
- sqlDisconnect( state->connection);
-
- efree( state);
-
- return;
-}
-
-/* }}} */
-
-
-/* {{{ proto int ovrimos_longreadlen(int result_id, int length)
- Handle LONG columns */
-PHP_FUNCTION(ovrimos_longreadlen)
-{
- pval *arg1, *arg2;
- PSTATEMENT stmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
-
- stmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt->longreadlen = Z_LVAL_P(arg2);
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#define DEFAULT_LONGREADLEN 0
-
-/* These two functions are quite expensive. Some optimization may be
- * done in a later version.
- */
-static int local_sqlAllocStmt( PCON_STATE state, SQLH conn, SQLS *stmt, PSTATEMENT* pstmt) {
-int index, ret;
-
- ret = sqlAllocStmt( conn, stmt);
- if (!ret) return ret;
-
- state->nstatements++;
- state->statements = erealloc( state->statements,
- state->nstatements*sizeof( STATEMENT));
-
- if (state->statements==NULL) return 0;
-
- index = state->nstatements - 1;
- state->statements[ index].statement = (*stmt);
- state->statements[ index].longreadlen = DEFAULT_LONGREADLEN;
- state->statements[ index].con_state = state;
-
- *pstmt = &state->statements[ index];
-
- return 1;
-}
-
-static int local_sqlFreeStmt( PSTATEMENT statement, SQLS stmt) {
-int j, i;
-PSTATEMENT new_statements;
-PCON_STATE state = statement->con_state;
-
- sqlFreeStmt( stmt);
-
- if (state->nstatements-1 == 0) {
- efree( state->statements);
- state->statements = NULL;
- state->nstatements--;
-
- return 1;
- }
-
- new_statements = emalloc( (state->nstatements-1) * sizeof(STATEMENT));
- if (new_statements==NULL) return 0;
-
- for (i=j=0;i<state->nstatements;i++) {
- if (state->statements->statement != stmt) {
- new_statements[j].statement = state->statements[i].statement;
- new_statements[j].longreadlen = state->statements[i].longreadlen;
- new_statements[j++].con_state = state->statements[i].con_state;
- }
- }
-
- efree( state->statements);
- state->statements = new_statements;
- state->nstatements--;
-
- return 1; /* true */
-}
-
-/* {{{ proto int ovrimos_prepare(int connection_id, string query)
- Prepares a statement for execution */
-PHP_FUNCTION(ovrimos_prepare)
-{
- pval *arg1, *arg2;
- SQLH conn;
- char *query;
- SQLS stmt;
- PCON_STATE state;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_string(arg2);
-
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- conn = (SQLH) state->connection;
- query = Z_STRVAL_P(arg2);
-
- if (!local_sqlAllocStmt( state, conn, &stmt, &pstmt)) {
- RETURN_FALSE;
- }
- if (!sqlPrepare(stmt, query)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetOutputColDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetParamDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
-
- /* returns a result id which is actually a
- * pointer to a STATEMENT structure;
- */
- RETURN_LONG( (long)pstmt);
-}
-
-/* }}} */
-
-/*
- * Execute prepared SQL statement. Supports only input parameters.
- */
-/* {{{ proto int ovrimos_execute(int result_id [, array parameters_array])
- Execute a prepared statement */
-PHP_FUNCTION(ovrimos_execute)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int numArgs;
- int icol, colnb;
- PSTATEMENT pstmt;
-
- numArgs = ARG_COUNT(ht);
-
- if (getParameters(ht, numArgs, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = pstmt->statement;
- colnb = sqlGetParamNb(stmt);
-
- if (colnb != 0) {
- pval **tmp;
- int arr_elem;
-
- if (Z_TYPE_P(arg2) != IS_ARRAY) {
- php_error(E_WARNING,
- "Not an array in call to ovrimos_execute()");
- RETURN_FALSE;
- }
- arr_elem = zend_hash_num_elements(Z_ARRVAL_P(arg2));
- if (arr_elem < colnb) {
- php_error(E_WARNING,
- "Not enough parameters in call to ovrimos_execute(): %d instead of %d",
- arr_elem, colnb);
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(arg2));
-
- for (icol = 0; icol < colnb; icol++) {
- int len;
- cvt_error err;
- bool ret;
- char *msg;
- char buffer[10240];
- sql_type to_type = sqlGetParamSQLType(stmt, icol);
- sql_type from_type;
-
- if (zend_hash_get_current_data
- (Z_ARRVAL_P(arg2), (void **) &tmp) == FAILURE) {
- php_error(E_WARNING,
- "Error getting parameter %d in call to ovrimos_execute()",
- icol);
- RETURN_FALSE;
- }
- convert_to_string(*tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error(E_WARNING,
- "Error converting parameter %d to string in call to ovrimos_execute()",
- icol);
- RETURN_FALSE;
- }
-
- /* PHP data to param type */
- Z_TYPE(from_type) = T_VARCHAR;
- from_type.u.length = Z_STRLEN_PP(tmp);
-
- *buffer = 0;
- memcpy(buffer + 1, Z_STRVAL_PP(tmp),
- from_type.u.length);
- buffer[from_type.u.length + 1] = 0;
-
- ret =
- type_convert(buffer, &from_type, &to_type, 0,
- &err);
- switch (err) {
- case cvt_trunc:
- msg = "Data truncated";
- break;
- case cvt_range:
- msg = "Numeric value out of range";
- break;
- case cvt_prec:
- msg = "Precision lost";
- break;
- case cvt_incomp:
- msg =
- "Restricted data type attribute violation";
- break;
- case cvt_no:
- msg = "Conversion failed";
- break;
- default:
- msg = "Unknown error";
- break;
- }
- if (!ret) {
- php_error(E_WARNING,
- "Error converting parameter %d: %s in call to ovrimos_execute()",
- icol, msg);
- RETURN_FALSE;
- }
-
- len = sql_type_size(to_type) - 1;
- if (!sqlPutParam(stmt, icol, buffer + 1, len)) {
- php_error(E_WARNING,
- "Could send parameter %d (%d bytes) in call to ovrimos_execute()",
- icol, len);
- RETURN_FALSE;
- }
- }
- }
-
- if (!sqlExec(stmt)) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_cursor(int result_id)
- Get cursor name */
-PHP_FUNCTION(ovrimos_cursor)
-{
- char cname[126];
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
-
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = pstmt->statement;
-
- if (!sqlGetCursorName(stmt, cname)) {
- RETURN_FALSE;
- }
- RETURN_STRING(cname, 1);
-}
-
-/* }}} */
-
-/* This function returns a result id. The result ID is
- * a pointer to a STATEMENT structure.
- * Every result is mapped to a statement.
- */
-
-/* {{{ proto int ovrimos_exec(int connection_id, string query)
- Prepare and execute an SQL statement */
-PHP_FUNCTION(ovrimos_exec)
-{
- pval *arg1, *arg2;
- SQLH conn;
- SQLS stmt;
- int numArgs;
- char *query;
- PSTATEMENT pstmt;
- PCON_STATE state;
-
- numArgs = ARG_COUNT(ht);
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
-
- state = (PCON_STATE) Z_LVAL_P(arg1);
- conn = state->connection;
- query = Z_STRVAL_P(arg2);
-
- if (!local_sqlAllocStmt( state, conn, &stmt, &pstmt)) {
- RETURN_FALSE;
- }
-
- if (!sqlExecDirect(stmt, query)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetOutputColDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetParamDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
-
- RETURN_LONG( (long)pstmt);
-}
-
-/* }}} */
-
-/* {{{ column_to_string
- */
-static void column_to_string(SQLS stmt, int i, char *buffer, int *len, PSTATEMENT pstmt)
-{
- const char *bf = sqlColValue(stmt, i, 0);
- int longreadlen;
-
- longreadlen = pstmt->longreadlen;
-
- switch (sqlGetOutputColType(stmt, i)) {
- case T_BIGINT:
- case T_UBIGINT:{
- switch (sqlGetOutputColType(stmt, i)) {
- case T_BIGINT:
- printsint64(Read(sint64, bf), buffer);
- break;
- case T_UBIGINT:
- printuint64(Read(uint64, bf), buffer);
- break;
- }
- *len = strlen(buffer);
- }
- break;
- case T_INTEGER:
- sprintf(buffer, "%11d", Read(sint32, bf));
- *len = strlen(buffer);
- break;
- case T_UINTEGER:
- sprintf(buffer, "%10u", Read(uint32, bf));
- *len = strlen(buffer);
- break;
- case T_SMALLINT:
- sprintf(buffer, "%6hd", Read(sint16, bf));
- *len = strlen(buffer);
- break;
- case T_USMALLINT:
- sprintf(buffer, "%5hu", Read(uint16, bf));
- *len = strlen(buffer);
- break;
- case T_TINYINT:
- sprintf(buffer, "%4hd", (sint16) Read(sint8, bf));
- *len = strlen(buffer);
- break;
- case T_UTINYINT:
- sprintf(buffer, "%3hu", (uint16) Read(uint8, bf));
- *len = strlen(buffer);
- break;
- case T_BIT:
- sprintf(buffer, "%s",
- (Read(uint8, bf) == 0) ? "off" : "on");
- *len = strlen(buffer);
- break;
- case T_REAL:
- sprintf(buffer, "%9.7g", (double) Read(float, bf));
- *len = strlen(buffer);
- break;
-
- case T_FLOAT:
- case T_DOUBLE:
- sprintf(buffer, "%19.17g", Read(double, bf));
- *len = strlen(buffer);
- break;
- case T_DECIMAL:
- case T_NUMERIC:{
- int prec = sqlGetOutputColPrecision(stmt, i);
- int scale = sqlGetOutputColScale(stmt, i);
- sprintf(buffer, "%*.*f", prec + 2, scale,
- Read(double, bf));
- *len = strlen(buffer);
- } break;
- case T_CHAR:
- case T_VARCHAR:
- strcpy(buffer, bf);
- *len = strlen(buffer);
- break;
- case T_UNI_CHAR:
- case T_UNI_VARCHAR:
- uni_strcpy((uni_char *) buffer, (uni_char *) bf);
- *len = uni_strlen((uni_char *) buffer);
- break;
- case T_BINARY:{
- int sz = sqlGetOutputColLength(stmt, i);
- memcpy(buffer, bf, sz);
- *len = sz;
- } break;
-
- case T_VARBINARY:{
- int sz = Read(uint16, bf);
- memcpy(buffer, bf + 2, sz);
- *len = sz;
- } break;
-
- case T_DATE:{
- if (!sql_date_to_str((uint32 *) bf, buffer)) {
- strcpy(buffer, "Error!");
- }
- }
- break;
-
- case T_TIME:{
- int prec = sqlGetOutputColPrecision(stmt, i);
- if (!sql_time_to_str
- ((uint32 *) bf, prec, 0, buffer)) {
- strcpy(buffer, "Error!");
- }
- }
- break;
-
- case T_TIMESTAMP:{
- int prec = sqlGetOutputColPrecision(stmt, i);
- if (!sql_timestamp_to_str
- ((uint32 *) bf, prec, 0, buffer)) {
- strcpy(buffer, "Error!");
- }
-
- }
- break;
-
- case T_LONGVARCHAR:
- case T_LONGVARBINARY:{
- if (longreadlen == 0) {
- *buffer = 0;
- *len = 0;
- } else
- if (!sqlColValueLong
- (stmt, i, 0, 0, longreadlen, buffer, len)) {
- strcpy(buffer, "Error!");
- }
- }
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int ovrimos_fetch_into(int result_id, array result_array [, string how, [int rownumber]])
- Fetch one result row into an array
- how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'
- */
-PHP_FUNCTION(ovrimos_fetch_into)
-{
- int numArgs;
- char *s_how;
- typedef enum { h_next = 0, h_prev, h_first, h_last, h_absolute
- } h_type;
- h_type how = h_next; /* default */
- sint32 rownum = 0;
- pval *arg_id, *arg_how = 0, *arg_row = 0, *arr, *tmp;
- SQLS stmt;
- PSTATEMENT pstmt;
- int icol, colnb;
- bool ret=0;
- numArgs = ARG_COUNT(ht);
-
- switch (numArgs) {
- case 2:
- if (getParameters(ht, 2, &arg_id, &arr) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 3:
- if (getParameters(ht, 3, &arg_id, &arr, &arg_how) ==
- FAILURE) WRONG_PARAM_COUNT;
- break;
- case 4:
- if (getParameters(ht, 4, &arg_id, &arr, &arg_how, &arg_row)
- == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg_id);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg_id);
-
- stmt = pstmt->statement;
-
- if (arg_how != 0) {
- if (Z_TYPE_P(arg_how) != IS_STRING) {
- php_error(E_WARNING,
- "Third argument not string in ovrimos_fetch_into()");
- RETURN_FALSE;
- }
- s_how = Z_STRVAL_P(arg_how);
- if (stricmp(s_how, "next") == 0) {
- how = h_next;
- } else if (stricmp(s_how, "prev") == 0) {
- how = h_prev;
- } else if (stricmp(s_how, "first") == 0) {
- how = h_first;
- } else if (stricmp(s_how, "last") == 0) {
- how = h_last;
- } else if (stricmp(s_how, "absolute") == 0) {
- how = h_absolute;
- } else {
- php_error(E_WARNING,
- "Third argument not valid in ovrimos_fetch_into()");
- RETURN_FALSE;
- }
- if (arg_row == 0 && how == h_absolute) {
- php_error(E_WARNING,
- "Fourth argument is required for ABSOLUTE in ovrimos_fetch_into()");
- RETURN_FALSE;
- }
- if (arg_row != 0) {
- convert_to_long(arg_row);
- rownum = Z_LVAL_P(arg_row);
- switch (how) {
- case h_next:
- case h_prev:
- rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */
- break;
- default:
- break;
- }
- }
- }
-
- if (Z_TYPE_P(arr) != IS_ARRAY) {
- if (array_init(arr) == FAILURE) {
- php_error(E_WARNING,
- "Can't convert to type Array");
- RETURN_FALSE;
- }
- }
- switch (how) {
- case h_absolute:
- case h_first:
- ret = sqlCursorFirst(stmt, rownum);
- break;
- case h_last:
- ret = sqlCursorLast(stmt, rownum);
- break;
- case h_next:
- ret = sqlCursorNext(stmt, rownum);
- break;
- case h_prev:
- ret = sqlCursorPrev(stmt, rownum);
- break;
- }
- if (!ret) {
- RETURN_FALSE;
- }
-
- colnb = sqlGetOutputColNb(stmt);
- for (icol = 0; icol < colnb; icol++) {
- int len;
- char buffer[10240];
- tmp = (pval *) emalloc(sizeof(pval));
- tmp->refcount = 1;
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
-
- /* Produce column value in 'tmp' ... */
-
- column_to_string(stmt, icol, buffer, &len, pstmt);
- Z_STRLEN_P(tmp) = len;
- Z_STRVAL_P(tmp) = estrndup(buffer, len);
-
- zend_hash_index_update(Z_ARRVAL_P(arr), icol, &tmp,
- sizeof(pval *), NULL);
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_fetch_row(int result_id [, int how, [int row_number]])
- how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'
- Fetch a row */
-PHP_FUNCTION(ovrimos_fetch_row)
-{
- int numArgs;
- char *s_how;
- typedef enum { h_next = 0, h_prev, h_first, h_last, h_absolute
- } h_type;
- h_type how = h_next; /* default */
- sint32 rownum = 0;
- pval *arg_id, *arg_how = 0, *arg_row = 0;
- SQLS stmt;
- PSTATEMENT pstmt;
- bool ret = 0;
- numArgs = ARG_COUNT(ht);
-
- switch (numArgs) {
- case 1:
- if (getParameters(ht, 1, &arg_id) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
- if (getParameters(ht, 2, &arg_id, &arg_how) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 3:
- if (getParameters(ht, 3, &arg_id, &arg_how, &arg_row) ==
- FAILURE) WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg_id);
-
- pstmt = (PSTATEMENT) Z_LVAL_P(arg_id);
- stmt = (SQLS) pstmt->statement;
-
- if (arg_how != 0) {
- if (Z_TYPE_P(arg_how) != IS_STRING) {
- php_error(E_WARNING,
- "Second argument not string in ovrimos_fetch_row()");
- RETURN_FALSE;
- }
- s_how = Z_STRVAL_P(arg_how);
- if (stricmp(s_how, "next") == 0) {
- how = h_next;
- } else if (stricmp(s_how, "prev") == 0) {
- how = h_prev;
- } else if (stricmp(s_how, "first") == 0) {
- how = h_first;
- } else if (stricmp(s_how, "last") == 0) {
- how = h_last;
- } else if (stricmp(s_how, "absolute") == 0) {
- how = h_absolute;
- } else {
- php_error(E_WARNING,
- "Second argument not valid in ovrimos_fetch_row()");
- RETURN_FALSE;
- }
- if (arg_row == 0 && how == 4) {
- php_error(E_WARNING,
- "Third argument is required for ABSOLUTE in ovrimos_fetch_row()");
- RETURN_FALSE;
- }
- if (arg_row != 0) {
- convert_to_long(arg_row);
- rownum = Z_LVAL_P(arg_row);
- switch (how) {
- case h_next:
- case h_prev:
- rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */
- break;
- default:
- break;
- }
- }
- }
-
- switch (how) {
- case h_absolute:
- case h_first:
- ret = sqlCursorFirst(stmt, rownum);
- break;
- case h_last:
- ret = sqlCursorLast(stmt, rownum);
- break;
- case h_next:
- ret = sqlCursorNext(stmt, rownum);
- break;
- case h_prev:
- ret = sqlCursorPrev(stmt, rownum);
- break;
- }
- if (!ret) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_result(int result_id, mixed field)
- Get result data */
-PHP_FUNCTION(ovrimos_result)
-{
- int numArgs = ARG_COUNT(ht);
- pval *arg_id, *arg_field;
- int icol=0, colnb;
- SQLS stmt;
- int len;
- PSTATEMENT pstmt;
- char buffer[1024];
-
- if (numArgs != 2
- || getParameters(ht, 2, &arg_id,
- &arg_field) == FAILURE) WRONG_PARAM_COUNT;
-
- convert_to_long(arg_id);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg_id);
- stmt = (SQLS) pstmt->statement;
-
- colnb = sqlGetOutputColNb(stmt);
-
- if (Z_TYPE_P(arg_field) == IS_STRING) {
- int i;
- for (i = 0; i < colnb; i++) {
- if (!stricmp
- (Z_STRVAL_P(arg_field),
- sqlGetOutputColName(stmt, i))) {
- icol = i;
- break;
- }
- }
- } else if (Z_TYPE_P(arg_field) == IS_LONG) {
- icol = Z_LVAL_P(arg_field) - 1;
- } else {
- php_error(E_WARNING,
- "Second argument neither number nor string in ovrimos_result()");
- RETURN_FALSE;
- }
- if (icol < 0 || icol > colnb) {
- php_error(E_WARNING, "Unknown column in ovrimos_result()");
- RETURN_FALSE;
- }
- column_to_string(stmt, icol, buffer, &len, pstmt);
-
- RETURN_STRINGL(buffer, len, 1);
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_result_all(int result_id [, string format])
- Print result as HTML table */
-PHP_FUNCTION(ovrimos_result_all)
-{
- long fetched = 0;
- pval *arg1, *arg2;
- int numArgs;
- SQLS stmt;
- int icol, colnb;
- PSTATEMENT pstmt;
- char buffer[1024];
- int len;
-
- numArgs = ARG_COUNT(ht);
- if (numArgs == 1) {
- if (getParameters(ht, 1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
- colnb = sqlGetOutputColNb(stmt);
-
- /* Start table tag */
- if (numArgs == 1) {
- php_printf("<table><tr>");
- } else {
- convert_to_string(arg2);
- php_printf("<table %s ><tr>", Z_STRVAL_P(arg2));
- }
-
- for (icol = 0; icol < colnb; icol++) {
- php_printf("<th>%s</th>", sqlGetOutputColName(stmt, icol));
- }
-
- php_printf("</tr>\n");
-
- if (sqlCursorFirst(stmt, 0)) {
- do {
- fetched++;
- php_printf("<tr>");
- for (icol = 0; icol < colnb; icol++) {
- column_to_string(stmt, icol, buffer, &len, pstmt);
- php_printf("<td>%s</td>", buffer);
- }
- php_printf("</tr>\n");
- } while (sqlCursorNext(stmt, 0));
- }
- php_printf("</table>\n");
-
- RETURN_LONG(fetched);
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_free_result(int result_id)
- Free resources associated with a result */
-PHP_FUNCTION(ovrimos_free_result)
-{
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
- sqlCloseCursor( stmt);
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_num_rows(int result_id)
- Get number of rows in a result */
-PHP_FUNCTION(ovrimos_num_rows)
-{
- uint32 rows;
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
-
- sqlGetRowCount(stmt, &rows);
- RETURN_LONG(rows);
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_num_fields(int result_id)
- Get number of columns in a result */
-PHP_FUNCTION(ovrimos_num_fields)
-{
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = (SQLS) pstmt->statement;
-
- RETURN_LONG(sqlGetOutputColNb(stmt));
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_field_name(int result_id, int field_number)
- Get a column name */
-PHP_FUNCTION(ovrimos_field_name)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int field;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = (SQLS) pstmt->statement;
-
-
- if (Z_LVAL_P(arg2) < 1) {
- php_error(E_WARNING,
- "Field numbering starts at 1! in call to ovrimos_field_name()");
- RETURN_FALSE;
- }
-
- field = Z_LVAL_P(arg2) - 1;
-
- if (field >= sqlGetOutputColNb(stmt)) {
- php_error(E_WARNING,
- "No field at this index (%d) in call to ovrimos_field_name()",
- field);
- RETURN_FALSE;
- }
-
- RETURN_STRING((char *) sqlGetOutputColName(stmt, field), 1);
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_field_type(int result_id, int field_number)
- Get the datatype of a column */
-PHP_FUNCTION(ovrimos_field_type)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int field;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = (SQLS) pstmt->statement;
-
- if (Z_LVAL_P(arg2) < 1) {
- php_error(E_WARNING,
- "Field numbering starts at 1! in call to ovrimos_field_type()");
- RETURN_FALSE;
- }
-
- field = Z_LVAL_P(arg2) - 1;
-
- if (field >= sqlGetOutputColNb(stmt)) {
- php_error(E_WARNING,
- "No field at this index (%d) in call to ovrimos_field_type()",
- field);
- RETURN_FALSE;
- }
-
- RETURN_LONG(sqlGetOutputColType(stmt, field));
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_field_len(int result_id, int field_number)
- Get the length of a column */
-PHP_FUNCTION(ovrimos_field_len)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int field;
- PSTATEMENT pstmt;
- int longreadlen;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- longreadlen = pstmt->longreadlen;
-
- stmt = (SQLS) pstmt->statement;
-
- if (Z_LVAL_P(arg2) < 1) {
- php_error(E_WARNING,
- "Field numbering starts at 1! in call to ovrimos_field_len()");
- RETURN_FALSE;
- }
-
- field = Z_LVAL_P(arg2) - 1;
-
- if (field >= sqlGetOutputColNb(stmt)) {
- php_error(E_WARNING,
- "No field at this index (%d) in call to ovrimos_field_len()",
- field);
- RETURN_FALSE;
- }
-
- switch (sqlGetOutputColType(stmt, field)) {
- case T_LONGVARCHAR:
- case T_LONGVARBINARY:
- RETURN_LONG(longreadlen);
- default:
- RETURN_LONG(sqlGetOutputColLength(stmt, field));
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_field_num(int result_id, string field_name)
- Return column number */
-PHP_FUNCTION(ovrimos_field_num)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int i, n;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE
- || Z_TYPE_P(arg2) != IS_STRING) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
- n = sqlGetOutputColNb(stmt);
- for (i = 0; i < n; i++) {
- if (!strcmp
- (Z_STRVAL_P(arg2), sqlGetOutputColName(stmt, i))) {
- RETURN_LONG(i + 1);
- }
- }
- RETURN_FALSE;
-}
-
-/* }}} */
-
-#if 0
-/* {{{ proto int ovrimos_autocommit(int connection_id, int OnOff)
- Toggle autocommit mode
- There can be problems with pconnections!*/
-PHP_FUNCTION(ovrimos_autocommit)
-{
-}
-
-/* }}} */
-#endif
-
-/* {{{ proto int ovrimos_commit(int connection_id)
- Commit an ovrimos transaction */
-PHP_FUNCTION(ovrimos_commit)
-{
- pval *arg1;
- SQLS stmt;
- int i;
- PCON_STATE state;
-
- if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE
- || Z_TYPE_P(arg1) != IS_LONG) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long( arg1);
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- for (i=0;i<state->nstatements;i++) {
- stmt = state->statements[ i].statement;
- if (stmt==NULL) {
- continue;
- }
- if (!sqlCommit(stmt)) {
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_rollback(int connection_id)
- Rollback a transaction */
-PHP_FUNCTION(ovrimos_rollback)
-{
- pval *arg1;
- SQLS stmt;
- int i;
- PCON_STATE state;
-
- if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE
- || Z_TYPE_P(arg1) != IS_LONG) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long( arg1);
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- for (i=0;i<state->nstatements;i++) {
- stmt = (SQLS) state->statements[ i].statement;
- if (stmt==NULL) continue;
-
- if (!sqlRollback(stmt)) {
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#if 0
-/* {{{ proto int ovrimos_setoption(int conn_id|result_id, int which, int option, int value)
- Sets connection or statement options */
-PHP_FUNCTION(ovrimos_setoption)
-{
-}
-
-/* }}} */
-#endif
-
-/* {{{ ovrimos_functions[]
- */
-function_entry ovrimos_functions[] = {
-/* PHP_FE(ovrimos_setoption, NULL)*/
-/* PHP_FE(ovrimos_autocommit, NULL)*/
- PHP_FE(ovrimos_close, NULL)
- PHP_FE(ovrimos_commit, NULL)
- PHP_FE(ovrimos_connect, NULL)
- PHP_FE(ovrimos_cursor, NULL)
- PHP_FE(ovrimos_exec, NULL)
- PHP_FE(ovrimos_prepare, NULL)
- PHP_FE(ovrimos_execute, NULL)
- PHP_FE(ovrimos_fetch_row, NULL)
- PHP_FE(ovrimos_fetch_into, second_arg_force_ref)
- PHP_FE(ovrimos_field_len, NULL)
- PHP_FE(ovrimos_field_name, NULL)
- PHP_FE(ovrimos_field_type, NULL)
- PHP_FE(ovrimos_field_num, NULL)
- PHP_FE(ovrimos_free_result, NULL)
- PHP_FE(ovrimos_num_fields, NULL)
- PHP_FE(ovrimos_num_rows, NULL)
- PHP_FE(ovrimos_result, NULL)
- PHP_FE(ovrimos_result_all, NULL)
- PHP_FE(ovrimos_rollback, NULL)
-/* PHP_FE(ovrimos_binmode, NULL)*/
- PHP_FE(ovrimos_longreadlen, NULL)
- PHP_FALIAS(ovrimos_do, ovrimos_exec, NULL) {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry ovrimos_module_entry = {
- STANDARD_MODULE_HEADER,
- "ovrimos",
- ovrimos_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(ovrimos),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-DLEXPORT zend_module_entry *get_module()
-{
- return &ovrimos_module_entry;
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/ovrimos/php_ovrimos.h b/ext/ovrimos/php_ovrimos.h
deleted file mode 100644
index b3e1336046..0000000000
--- a/ext/ovrimos/php_ovrimos.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef PHP_OVRIMOS_H
-#define PHP_OVRIMOS_H
-
-#if HAVE_LIBSQLCLI
-
-#if PHP_API_VERSION < 19990421
-#define zend_module_entry zend_module_entry
-#include "zend_modules.h"
-#include "internal_functions.h"
-#endif
-
-extern zend_module_entry ovrimos_module_entry;
-#define ovrimos_module_ptr &ovrimos_module_entry
-
-PHP_FUNCTION(ovrimos_connect);
-PHP_FUNCTION(ovrimos_close);
-PHP_FUNCTION(ovrimos_longreadlen);
-PHP_FUNCTION(ovrimos_prepare);
-PHP_FUNCTION(ovrimos_execute);
-PHP_FUNCTION(ovrimos_cursor);
-PHP_FUNCTION(ovrimos_exec);
-PHP_FUNCTION(ovrimos_fetch_into);
-PHP_FUNCTION(ovrimos_fetch_row);
-PHP_FUNCTION(ovrimos_result);
-PHP_FUNCTION(ovrimos_result_all);
-PHP_FUNCTION(ovrimos_free_result);
-PHP_FUNCTION(ovrimos_num_rows);
-PHP_FUNCTION(ovrimos_num_fields);
-PHP_FUNCTION(ovrimos_field_name);
-PHP_FUNCTION(ovrimos_field_type);
-PHP_FUNCTION(ovrimos_field_len);
-PHP_FUNCTION(ovrimos_field_num);
-/*PHP_FUNCTION(ovrimos_autocommit);*/
-PHP_FUNCTION(ovrimos_commit);
-PHP_FUNCTION(ovrimos_rollback);
-/*PHP_FUNCTION(ovrimos_setoption);*/
-
-#else
-#define ovrimos_module_ptr NULL
-#endif
-
-#define phpext_ovrimos_ptr ovrimos_module_ptr
-
-#endif
diff --git a/ext/pcntl/CREDITS b/ext/pcntl/CREDITS
deleted file mode 100644
index 1d629d7adf..0000000000
--- a/ext/pcntl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-pcntl
-Jason Greene
diff --git a/ext/pcntl/EXPERIMENTAL b/ext/pcntl/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/pcntl/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/pcntl/README b/ext/pcntl/README
deleted file mode 100644
index cadd11121c..0000000000
--- a/ext/pcntl/README
+++ /dev/null
@@ -1,16 +0,0 @@
-Process Control Module for PHP (pcntl)
-
-This module will attempt to implement all features related to process spawning and
-control (fork(), waitpid(), signal(), WIF's, etc). This is extremly experimental,
-with hope to become stable on most UNIX's. I greatly apreciate any feedback, fixes,
-and or suggestions on how to improve/better implement
-this functionality.
-
-Thanks,
-
-Jason Greeme < jason@inetgurus.net / jason@php.net >
-
-
-
-
-
diff --git a/ext/pcntl/config.m4 b/ext/pcntl/config.m4
deleted file mode 100644
index f24f038cb9..0000000000
--- a/ext/pcntl/config.m4
+++ /dev/null
@@ -1,18 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl Process Control (pcntl) extentsion --EXPERIMENTAL--
-dnl TODO - Add platform checks
-
-PHP_ARG_ENABLE(pcntl, whether to enable pcntl support,
-[ --enable-pcntl Enable experimental pcntl support (CLI/CGI only)])
-
-if test "$PHP_PCNTL" != "no"; then
-
- AC_CHECK_FUNCS(fork, [ AC_DEFINE(HAVE_FORK,1,[ ]) ], [ AC_MSG_ERROR(pcntl: fork() not supported by this platform) ])
- AC_CHECK_FUNCS(waitpid, [ AC_DEFINE(HAVE_WAITPID,1,[ ]) ], [ AC_MSG_ERROR(pcntl: fork() not supported by this platform) ])
- AC_CHECK_FUNCS(sigaction, [ AC_DEFINE(HAVE_SIGACTION,1,[ ]) ], [ AC_MSG_ERROR(pcntl: sigaction() not supported by this platform) ])
-
- PHP_NEW_EXTENSION(pcntl, pcntl.c php_signal.c, $ext_shared, cli)
-fi
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
deleted file mode 100755
index 8f48cbb578..0000000000
--- a/ext/pcntl/pcntl.c
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define PCNTL_DEBUG 0
-
-#if PCNTL_DEBUG
-#define DEBUG_OUT printf("DEBUG: ");printf
-#else
-#define DEBUG_OUT
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_pcntl.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(pcntl)
-
-static int le_pcntl;
-static int pcntl_zend_extension_active;
-
-function_entry pcntl_functions[] = {
- PHP_FE(pcntl_fork, NULL)
- PHP_FE(pcntl_waitpid, second_arg_force_ref)
- PHP_FE(pcntl_signal, NULL)
- PHP_FE(pcntl_wifexited, NULL)
- PHP_FE(pcntl_wifstopped, NULL)
- PHP_FE(pcntl_wifsignaled, NULL)
- PHP_FE(pcntl_wexitstatus, NULL)
- PHP_FE(pcntl_wtermsig, NULL)
- PHP_FE(pcntl_wstopsig, NULL)
- PHP_FE(pcntl_exec, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry pcntl_module_entry = {
- STANDARD_MODULE_HEADER,
- "pcntl",
- pcntl_functions,
- PHP_MINIT(pcntl),
- PHP_MSHUTDOWN(pcntl),
- NULL,
- NULL,
- PHP_MINFO(pcntl),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PCNTL
-ZEND_GET_MODULE(pcntl)
-#define PCNTL_ZEND_EXT ZEND_DLEXPORT
-#else
-#define PCNTL_ZEND_EXT
-#endif
-
-PCNTL_ZEND_EXT zend_extension pcntl_extension_entry = {
- "pcntl",
- "1.0",
- "Jason Greene",
- "http://www.php.net",
- "2001",
- pcntl_zend_extension_startup,
- pcntl_zend_extension_shutdown,
- pcntl_zend_extension_activate,
- pcntl_zend_extension_deactivate,
- NULL,
- NULL,
- pcntl_zend_extension_statement_handler,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-
-void php_register_signal_constants(INIT_FUNC_ARGS)
-{
-
- /* Wait Constants */
-#ifdef WNOHANG
- REGISTER_LONG_CONSTANT("WNOHANG", (long) WNOHANG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef WUNTRACED
- REGISTER_LONG_CONSTANT("WUNTRACED", (long) WUNTRACED, CONST_CS | CONST_PERSISTENT);
-#endif
-
- /* Signal Constants */
- REGISTER_LONG_CONSTANT("SIG_IGN", (long) SIG_IGN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIG_DFL", (long) SIG_DFL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIG_ERR", (long) SIG_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGHUP", (long) SIGHUP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGINT", (long) SIGINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGQUIT", (long) SIGQUIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGILL", (long) SIGILL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTRAP", (long) SIGTRAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGABRT", (long) SIGABRT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGIOT", (long) SIGIOT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGBUS", (long) SIGBUS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGFPE", (long) SIGFPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGKILL", (long) SIGKILL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGUSR1", (long) SIGUSR1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGSEGV", (long) SIGSEGV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGUSR2", (long) SIGUSR2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGPIPE", (long) SIGPIPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGALRM", (long) SIGALRM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTERM", (long) SIGTERM, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGSTKFLT
- REGISTER_LONG_CONSTANT("SIGSTKFLT",(long) SIGSTKFLT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef SIGCLD
- REGISTER_LONG_CONSTANT("SIGCLD", (long) SIGCLD, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef SIGCHLD
- REGISTER_LONG_CONSTANT("SIGCHLD", (long) SIGCHLD, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGCONT", (long) SIGCONT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGSTOP", (long) SIGSTOP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTSTP", (long) SIGTSTP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTTIN", (long) SIGTTIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTTOU", (long) SIGTTOU, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGURG", (long) SIGURG , CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGXCPU", (long) SIGXCPU, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGXFSZ", (long) SIGXFSZ, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGVTALRM",(long) SIGVTALRM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGPROF", (long) SIGPROF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGWINCH", (long) SIGWINCH, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGPOLL
- REGISTER_LONG_CONSTANT("SIGPOLL", (long) SIGPOLL, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGIO", (long) SIGIO, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGPWR
- REGISTER_LONG_CONSTANT("SIGPWR", (long) SIGPWR, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGSYS", (long) SIGSYS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGBABY", (long) SIGSYS, CONST_CS | CONST_PERSISTENT);
-}
-
-static void php_pcntl_init_globals(zend_pcntl_globals *pcntl_globals)
-{
- zend_hash_init(&pcntl_globals->php_signal_table, 16, NULL, NULL, 1);
-
- /* Just in case ... */
- memset(&pcntl_globals->php_signal_queue,0,sizeof(pcntl_globals->php_signal_queue));
-
- zend_llist_init(&pcntl_globals->php_signal_queue, sizeof (long), NULL, 1);
- pcntl_globals->signal_queue_ready = 0;
- pcntl_globals->processing_signal_queue = 0;
-}
-
-static void php_pcntl_shutdown_globals(zend_pcntl_globals *pcntl_globals)
-{
- zend_hash_destroy(&pcntl_globals->php_signal_table);
- zend_llist_destroy(&pcntl_globals->php_signal_queue);
-}
-
-PHP_MINIT_FUNCTION(pcntl)
-{
- php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
- ZEND_INIT_MODULE_GLOBALS(pcntl, php_pcntl_init_globals, php_pcntl_shutdown_globals);
- if (zend_register_extension(&pcntl_extension_entry, 0)==FAILURE)
- return FAILURE;
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(pcntl)
-{
- zend_hash_destroy(&PCNTL_G(php_signal_table));
- zend_llist_destroy(&PCNTL_G(php_signal_queue));
- return SUCCESS;
-}
-
-
-
-
-PHP_MINFO_FUNCTION(pcntl)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "pcntl support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto int pcntl_fork(void)
- Forks the currently running process following the same behavior as the UNIX fork() system call*/
-PHP_FUNCTION(pcntl_fork)
-{
- pid_t id;
-
- id = fork();
- if (id == -1) {
- php_error(E_ERROR, "Error %d in %s", errno, get_active_function_name(TSRMLS_C));
- }
-
- RETURN_LONG((long) id);
-}
-/* }}} */
-
-/* {{{ proto int pcntl_waitpid(long pid, long status, long options)
- Waits on or returns the status of a forked child as defined by the waitpid() system call */
-PHP_FUNCTION(pcntl_waitpid)
-{
- long pid, options = 0;
- zval *z_status = NULL;
- int status;
- pid_t child_id;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz|l", &pid, &z_status, &options) == FAILURE)
- return;
-
- convert_to_long_ex(&z_status);
-
- status = Z_LVAL_P(z_status);
-
- child_id = waitpid((pid_t) pid, &status, options);
-
- Z_LVAL_P(z_status) = status;
-
- RETURN_LONG((long) child_id);
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_wifexited(long status)
- Returns true if the child status code represents a successful exit */
-PHP_FUNCTION(pcntl_wifexited)
-{
-#ifdef WIFEXITED
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- if (WIFEXITED(status_word)) RETURN_TRUE;
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_wifstopped(long status)
- Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid) */
-PHP_FUNCTION(pcntl_wifstopped)
-{
-#ifdef WIFSTOPPED
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- if (WIFSTOPPED(status_word)) RETURN_TRUE;
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_wifsignaled(long status)
- Returns true if the child status code represents a process that was terminated due to a signal */
-PHP_FUNCTION(pcntl_wifsignaled)
-{
-#ifdef WIFSIGNALED
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- if (WIFSIGNALED(status_word)) RETURN_TRUE;
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wexitstatus(long status)
- Returns the status code of a child's exit */
-PHP_FUNCTION(pcntl_wexitstatus)
-{
-#ifdef WEXITSTATUS
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- /* WEXITSTATUS only returns 8 bits so we *MUST* cast this to signed char
- if you want to have valid negative exit codes */
- RETURN_LONG((signed char) WEXITSTATUS(status_word));
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wtermsig(long status)
- Returns the number of the signal that terminated the process who's status code is passed */
-PHP_FUNCTION(pcntl_wtermsig)
-{
-#ifdef WTERMSIG
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- RETURN_LONG(WTERMSIG(status_word));
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wstopsig(long status)
- Returns the number of the signal that caused the process to stop who's status code is passed */
-PHP_FUNCTION(pcntl_wstopsig)
-{
-#ifdef WSTOPSIG
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- RETURN_LONG(WSTOPSIG(status_word));
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_exec(string path [, array args [, array envs]])
- Executes specified program in current process space as defined by exec(2) */
-PHP_FUNCTION(pcntl_exec)
-{
- zval *args, *envs;
- zval **element;
- HashTable *args_hash, *envs_hash;
- int argc = 0, argi = 0;
- int envc = 0, envi = 0;
- int return_val = 0;
- char **argv = NULL, **envp = NULL;
- char **current_arg, **pair;
- int pair_length;
- char *key;
- int key_length;
- char *path;
- int path_len;
- long key_num;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|aa", &path, &path_len, &args, &envs) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- /* Build argumnent list */
- args_hash = HASH_OF(args);
- argc = zend_hash_num_elements(args_hash);
-
- argv = alloca((argc+2) * sizeof(char *));
- *argv = path;
- for ( zend_hash_internal_pointer_reset(args_hash), current_arg = argv+1;
- (argi < argc && (zend_hash_get_current_data(args_hash, (void **) &element) == SUCCESS));
- (argi++, current_arg++, zend_hash_move_forward(args_hash)) ) {
-
- convert_to_string_ex(element);
- *current_arg = Z_STRVAL_PP(element);
- }
- *(current_arg) = NULL;
- } else {
- argv = alloca(2 * sizeof(char *));
- *argv = path;
- *(argv+1) = NULL;
- }
-
- if ( ZEND_NUM_ARGS() == 3 ) {
- /* Build environment pair list */
- envs_hash = HASH_OF(envs);
- envc = zend_hash_num_elements(envs_hash);
-
- envp = alloca((envc+1) * sizeof(char *));
- for ( zend_hash_internal_pointer_reset(envs_hash), pair = envp;
- (envi < envc && (zend_hash_get_current_data(envs_hash, (void **) &element) == SUCCESS));
- (envi++, pair++, zend_hash_move_forward(envs_hash)) ) {
- switch (return_val = zend_hash_get_current_key_ex(envs_hash, &key, &key_length, &key_num, 0, NULL)) {
- case HASH_KEY_IS_LONG:
- key = alloca(101);
- snprintf(key, 100, "%ld", key_num);
- key_length = strlen(key);
- break;
- case HASH_KEY_NON_EXISTANT:
- pair--;
- continue;
- }
-
- convert_to_string_ex(element);
-
- /* Length of element + equal sign + length of key + null */
- pair_length = Z_STRLEN_PP(element) + key_length + 2;
- *pair = emalloc(pair_length);
- strlcpy(*pair, key, key_length);
- strlcat(*pair, "=", pair_length);
- strlcat(*pair, Z_STRVAL_PP(element), pair_length);
-
- /* Cleanup */
- if (return_val == HASH_KEY_IS_LONG) free_alloca(key);
- }
- *(pair) = NULL;
- }
-
- if (execve(path, argv, envp) == -1) {
- php_error(E_WARNING, "Error has occured in %s: (errno %d) %s",
- get_active_function_name(TSRMLS_C), errno, strerror(errno));
- }
-
- /* Cleanup */
- if (envp != NULL) {
- for (pair = envp; *pair != NULL; pair++) efree(*pair);
- free_alloca(envp);
- }
-
- free_alloca(argv);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_signal(long signo, mixed handle)
- Assigns a system signal handler to a PHP function */
-PHP_FUNCTION(pcntl_signal)
-{
- zval **signo, **handle;
- char *func_name;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &signo, &handle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(signo);
-
- /* Special long value case for SIG_DFL and SIG_IGN */
- if (Z_TYPE_PP(handle)==IS_LONG) {
- if (Z_LVAL_PP(handle)!= (long) SIG_DFL && Z_LVAL_PP(handle) != (long) SIG_IGN) {
- php_error(E_WARNING, "Invalid value for handle argument specifEied in %s", get_active_function_name(TSRMLS_C));
- }
- if (php_signal(Z_LVAL_PP(signo), (Sigfunc *) Z_LVAL_PP(handle))==SIG_ERR) {
- php_error(E_WARNING, "Error assigning singal in %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- RETURN_TRUE;
- }
-
- if (Z_TYPE_PP(handle) != IS_STRING) {
- php_error(E_WARNING, "Invalid type specified for handle argument in %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- convert_to_string_ex(handle); /* Just in case */
- if (!zend_is_callable(*handle, 0, &func_name)) {
- php_error(E_WARNING, "%s: %s is not a callable function name error", get_active_function_name(TSRMLS_C), func_name);
- efree(func_name);
- RETURN_FALSE;
- }
- efree(func_name);
-
- /* Add the function name to our signal table */
- zend_hash_index_update(&PCNTL_G(php_signal_table), Z_LVAL_PP(signo), Z_STRVAL_PP(handle), (Z_STRLEN_PP(handle) + 1) * sizeof(char), NULL);
-
- if (php_signal(Z_LVAL_PP(signo), pcntl_signal_handler)==SIG_ERR) {
- php_error(E_WARNING, "Error assigning singal in %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* Note Old */
-static void old_pcntl_signal_handler(int signo)
-{
- char *func_name;
- zval *param, *call_name, *retval;
- TSRMLS_FETCH();
-
- DEBUG_OUT("Caught signal: %d\n", signo);
- if (zend_hash_index_find(&PCNTL_G(php_signal_table), (long) signo, (void *) &func_name)==FAILURE) {
- DEBUG_OUT("Signl handler not fount");
- return;
- }
- /* DEBUG_OUT("Signal handler found, Calling %s\n", func_name); */
- MAKE_STD_ZVAL(param);
- MAKE_STD_ZVAL(call_name);
- MAKE_STD_ZVAL(retval);
- ZVAL_LONG(param, signo);
- ZVAL_STRING(call_name, func_name, 1);
-
- /* Call php singal handler - Note that we do not report errors, and we ignore the return value */
- call_user_function(EG(function_table), NULL, call_name, retval, 1, &param TSRMLS_CC);
-
- zval_dtor(call_name);
- efree(call_name);
- efree(param);
- efree(retval);
-
- return;
-}
-
-/* Our custom signal handler that calls the appropriate php_function */
-static void pcntl_signal_handler(int signo)
-{
- long signal_num = signo;
- TSRMLS_FETCH();
-
- DEBUG_OUT("Caught signo %d\n", signo);
- if (! PCNTL_G(processing_signal_queue) && pcntl_zend_extension_active ) {
- zend_llist_add_element(&PCNTL_G(php_signal_queue), &signal_num);
- PCNTL_G(signal_queue_ready) = 1;
- DEBUG_OUT("Added queue entry\n");
- }
- return;
-}
-
-/* Pcntl Zend Extension Hooks */
-
-int pcntl_zend_extension_startup(zend_extension *extension)
-{
- TSRMLS_FETCH();
-
- DEBUG_OUT("Statup Called\n");
- pcntl_zend_extension_active = 1;
- CG(extended_info) = 1;
- return SUCCESS;
-}
-
-void pcntl_zend_extension_shutdown(zend_extension *extension)
-{
- DEBUG_OUT("Shutdown Called\n");
- return;
-}
-
-void pcntl_zend_extension_activate(void)
-{
- TSRMLS_FETCH();
-
- DEBUG_OUT("Activate Called\n");
- pcntl_zend_extension_active = 1;
- CG(extended_info) = 1;
- return;
-}
-
-void pcntl_zend_extension_deactivate(void)
-{
- DEBUG_OUT("Deactivate Called\n");
- pcntl_zend_extension_active = 0;
- return;
-}
-
-/* Custom hook to ensure signals only get called at a safe poing in Zend's execute process */
-void pcntl_zend_extension_statement_handler(zend_op_array *op_array)
-{
- zend_llist_element *element;
- zval *param, *call_name, *retval;
- char *func_name;
- TSRMLS_FETCH();
-
- /* Bail if the queue is empty or if we are already playing the queue*/
- if (! PCNTL_G(signal_queue_ready) || PCNTL_G(processing_signal_queue))
- return;
-
- /* Mark our queue empty */
- PCNTL_G(signal_queue_ready) = 0;
-
- /* If for some reason our signal queue is empty then return */
- if (zend_llist_count(&PCNTL_G(php_signal_queue)) <= 0) {
- return;
- }
-
- /* Disable queue so this function is not infinate */
- PCNTL_G(processing_signal_queue) = 1;
-
- /* Allocate */
- MAKE_STD_ZVAL(param);
- MAKE_STD_ZVAL(call_name);
- MAKE_STD_ZVAL(retval);
-
- /* Traverse through our signal queue and call the appropriate php functions */
- for (element = (&PCNTL_G(php_signal_queue))->head; element; element = element->next) {
- long *signal_num = (long *)&element->data;
- if (zend_hash_index_find(&PCNTL_G(php_signal_table), *signal_num, (void *) &func_name)==FAILURE) {
- continue;
- }
-
- ZVAL_LONG(param, *signal_num);
- ZVAL_STRING(call_name, func_name, 0);
-
- /* Call php singal handler - Note that we do not report errors, and we ignore the return value */
- call_user_function(EG(function_table), NULL, call_name, retval, 1, &param TSRMLS_CC);
- }
- /* Clear */
- zend_llist_clean(&PCNTL_G(php_signal_queue));
-
- /* Re-enable queue */
- PCNTL_G(processing_signal_queue) = 0;
-
- /* Clean up */
- efree(param);
- efree(call_name);
- efree(retval);
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/pcntl/php_pcntl.h b/ext/pcntl/php_pcntl.h
deleted file mode 100644
index c555cb5441..0000000000
--- a/ext/pcntl/php_pcntl.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_PCNTL_H
-#define PHP_PCNTL_H
-
-#include <sys/wait.h>
-#include "php_signal.h"
-#include "zend_extensions.h"
-extern zend_module_entry pcntl_module_entry;
-#define phpext_pcntl_ptr &pcntl_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PCNTL_API __declspec(dllexport)
-#else
-#define PHP_PCNTL_API
-#endif
-
-PHP_MINIT_FUNCTION(pcntl);
-PHP_MSHUTDOWN_FUNCTION(pcntl);
-PHP_RINIT_FUNCTION(pcntl);
-PHP_RSHUTDOWN_FUNCTION(pcntl);
-PHP_MINFO_FUNCTION(pcntl);
-
-PHP_FUNCTION(pcntl_fork);
-PHP_FUNCTION(pcntl_waitpid);
-PHP_FUNCTION(pcntl_wifexited);
-PHP_FUNCTION(pcntl_wifstopped);
-PHP_FUNCTION(pcntl_wifsignaled);
-PHP_FUNCTION(pcntl_wexitstatus);
-PHP_FUNCTION(pcntl_wtermsig);
-PHP_FUNCTION(pcntl_wstopsig);
-PHP_FUNCTION(pcntl_signal);
-PHP_FUNCTION(pcntl_exec);
-
-static void pcntl_signal_handler(int);
-
-/* Zend extension prototypes */
-int pcntl_zend_extension_startup(zend_extension *extension);
-void pcntl_zend_extension_shutdown(zend_extension *extension);
-void pcntl_zend_extension_activate(void);
-void pcntl_zend_extension_deactivate(void);
-void pcntl_zend_extension_statement_handler(zend_op_array *op_array);
-
-
-ZEND_BEGIN_MODULE_GLOBALS(pcntl)
- HashTable php_signal_table;
- zend_llist php_signal_queue;
- int signal_queue_ready;
- int processing_signal_queue;
-ZEND_END_MODULE_GLOBALS(pcntl)
-#ifdef ZTS
-#define PCNTL_G(v) TSRMG(pcntl_globals_id, zend_pcntl_globals *, v)
-#else
-#define PCNTL_G(v) (pcntl_globals.v)
-#endif
-
-#endif /* PHP_PCNTL_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c
deleted file mode 100644
index 41172a988b..0000000000
--- a/ext/pcntl/php_signal.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php_signal.h"
-
-/* php_signal using sigaction is taken verbatim from Advanced Programing
- * in the Unix Environment by W. Richard Stevens p 298. */
-Sigfunc *php_signal(int signo, Sigfunc *func)
-{
-
- struct sigaction act,oact;
- act.sa_handler = func;
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- if (signo == SIGALRM) {
-#ifdef SA_INTERRUPT
- act.sa_flags |= SA_INTERRUPT; /* SunOS */
-#endif
- } else {
-#ifdef SA_RESTART
- act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
-#endif
- }
- if (sigaction(signo, &act, &oact) < 0)
- return SIG_ERR;
-
- return oact.sa_handler;
-}
-
diff --git a/ext/pcntl/php_signal.h b/ext/pcntl/php_signal.h
deleted file mode 100644
index 63baa4c3a3..0000000000
--- a/ext/pcntl/php_signal.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <signal.h>
-#ifndef PHP_SIGNAL_H
-#define PHP_SIGNAL_H
-
-typedef void Sigfunc(int);
-Sigfunc *php_signal(int signo, Sigfunc *func);
-
-#endif
diff --git a/ext/pcntl/test-pcntl.php b/ext/pcntl/test-pcntl.php
deleted file mode 100755
index 41334ba814..0000000000
--- a/ext/pcntl/test-pcntl.php
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/opt/devel/php4/php -q
-<?
-function alarm_handle($signal){
- if ($signal==SIGALRM) print "Caught SIGALRM!!!\n";
-}
-function usr1_handle($signal){
- if ($signal==SIGUSR1) print "Caught SIGUSR1!!!\n";
-}
-
-print "This test will demonstrate a fork followed by ipc via signals.\n";
-
-$pid=pcntl_fork();
-if ($pid==0) {
- pcntl_signal(SIGUSR1, "usr1_handle");
- pcntl_signal(SIGALRM, "alarm_handle");
- print "Child: Waiting for alarm.....\n";
- sleep(100);
- print "Child: Waiting for usr1......\n";
- sleep(100);
- print "Child: Resetting Alarm handler to Ignore....\n";
- pcntl_signal(SIGALRM, SIG_IGN);
- sleep(10);
- print "Done\n";
-} else {
- print "Parent: Waiting 10 seconds....\n";
- sleep(10);
- print "Parent: Sending SIGALRM to Child\n";
- posix_kill($pid,SIGALRM);
- sleep(1);
- print "Parent: Senging SIGUSR1 to Child\n";
- posix_kill($pid,SIGUSR1);
- sleep(1);
- print "Parent: Sending SIGALRM to Child\n";
- pcntl_waitpid($pid, &$status, $options);
-}
diff --git a/ext/pcntl/tests/001.phpt b/ext/pcntl/tests/001.phpt
deleted file mode 100644
index 85ca4ab6e0..0000000000
--- a/ext/pcntl/tests/001.phpt
+++ /dev/null
@@ -1,81 +0,0 @@
---TEST--
-Test pcntl wait functionality
---SKIPIF--
-<?php if (!extension_loaded("pcntl")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-function test_exit_waits(){
- print "\n\nTesting pcntl_wifexited and wexitstatus....";
-
- $pid=pcntl_fork();
- if ($pid==0) {
- sleep(1);
- exit(-1);
- } else {
- $options=0;
- pcntl_waitpid($pid, $status, $options);
- if ( pcntl_wifexited($status) ) print "\nExited With: ". pcntl_wexitstatus($status);
- }
-}
-
-function test_exit_signal(){
- print "\n\nTesting pcntl_wifsignaled....";
-
- $pid=pcntl_fork();
-
- if ($pid==0) {
- sleep(10);
- exit;
- } else {
- $options=0;
- posix_kill($pid, SIGTERM);
- pcntl_waitpid($pid, $status, $options);
- if ( pcntl_wifsignaled($status) ) {
- $signal_print=pcntl_wtermsig($status);
- if ($signal_print==SIGTERM) $signal_print="SIGTERM";
- print "\nProcess was terminated by signal : ". $signal_print;
- }
-
- }
-}
-
-
-function test_stop_signal(){
- print "\n\nTesting pcntl_wifstopped and pcntl_wstopsig....";
-
- $pid=pcntl_fork();
-
- if ($pid==0) {
- sleep(1);
- exit;
- } else {
- $options=WUNTRACED;
- posix_kill($pid, SIGSTOP);
- pcntl_waitpid($pid, $status, $options);
- if ( pcntl_wifstopped($status) ) {
- $signal_print=pcntl_wstopsig($status);
- if ($signal_print==SIGSTOP) $signal_print="SIGSTOP";
- print "\nProcess was stoped by signal : ". $signal_print;
- }
- posix_kill($pid, SIGCONT);
- }
-}
-
-print "Staring wait.h tests....";
-test_exit_waits();
-test_exit_signal();
-test_stop_signal();
-?>
---EXPECT--
-Staring wait.h tests....
-
-Testing pcntl_wifexited and wexitstatus....
-Exited With: -1
-
-Testing pcntl_wifsignaled....
-Process was terminated by signal : SIGTERM
-
-Testing pcntl_wifstopped and pcntl_wstopsig....
-Process was stoped by signal : SIGSTOP
diff --git a/ext/pcre/CREDITS b/ext/pcre/CREDITS
deleted file mode 100644
index ae0fba35d4..0000000000
--- a/ext/pcre/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Perl Compatible Regexps
-Andrei Zmievski
diff --git a/ext/pcre/config.m4 b/ext/pcre/config.m4
deleted file mode 100644
index 7f03ddd3df..0000000000
--- a/ext/pcre/config.m4
+++ /dev/null
@@ -1,55 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl By default we'll compile and link against the bundled PCRE library
-dnl if DIR is supplied, we'll use that for linking
-
-PHP_ARG_WITH(pcre-regex,for PCRE support,
-[ --without-pcre-regex Do not include Perl Compatible Regular Expressions
- support. Use --with-pcre-regex=DIR to specify DIR
- where PCRE's include and library files are located,
- if not using bundled library.],yes)
-
-if test "$PHP_PCRE_REGEX" != "no"; then
- if test "$PHP_PCRE_REGEX" = "yes"; then
- PHP_NEW_EXTENSION(pcre, pcrelib/maketables.c pcrelib/get.c pcrelib/study.c pcrelib/pcre.c php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -I@ext_srcdir@/pcrelib)
- PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
- AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
- else
- test -f $PHP_PCRE_REGEX/pcre.h && PCRE_INCDIR=$PHP_PCRE_REGEX
- test -f $PHP_PCRE_REGEX/include/pcre.h && PCRE_INCDIR=$PHP_PCRE_REGEX/include
-
- if test -z "$PCRE_INCDIR"; then
- AC_MSG_RESULT(Could not find pcre.h in $PHP_PCRE_REGEX)
- fi
-
- changequote({,})
- pcre_major=`grep PCRE_MAJOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- pcre_minor=`grep PCRE_MINOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- changequote([,])
- pcre_minor_length=`echo "$pcre_minor" | wc -c | sed -e 's/[^0-9]//g'`
- if test "$pcre_minor_length" -eq 2 ; then
- pcre_minor="$pcre_minor"0
- fi
- pcre_version=$pcre_major$pcre_minor
- if test "$pcre_version" -lt 208; then
- AC_MSG_ERROR(The PCRE extension requires PCRE library version >= 2.08)
- fi
-
- test -f $PHP_PCRE_REGEX/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX
- test -f $PHP_PCRE_REGEX/lib/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX/lib
-
- if test -z "$PCRE_LIBDIR" ; then
- AC_MSG_ERROR(Could not find libpcre.a in $PHP_PCRE_REGEX)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(pcre, $PCRE_LIBDIR, PCRE_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_PCRE, 1, [ ])
- PHP_NEW_EXTENSION(pcre, php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -I$PCRE_INCDIR)
- fi
-fi
-PHP_SUBST(PCRE_SHARED_LIBADD)
-
-AC_CHECK_FUNC(memmove, [], [AC_DEFINE(USE_BCOPY, 1, [ ])])
diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4
deleted file mode 100644
index 7f03ddd3df..0000000000
--- a/ext/pcre/config0.m4
+++ /dev/null
@@ -1,55 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl By default we'll compile and link against the bundled PCRE library
-dnl if DIR is supplied, we'll use that for linking
-
-PHP_ARG_WITH(pcre-regex,for PCRE support,
-[ --without-pcre-regex Do not include Perl Compatible Regular Expressions
- support. Use --with-pcre-regex=DIR to specify DIR
- where PCRE's include and library files are located,
- if not using bundled library.],yes)
-
-if test "$PHP_PCRE_REGEX" != "no"; then
- if test "$PHP_PCRE_REGEX" = "yes"; then
- PHP_NEW_EXTENSION(pcre, pcrelib/maketables.c pcrelib/get.c pcrelib/study.c pcrelib/pcre.c php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -I@ext_srcdir@/pcrelib)
- PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
- AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
- else
- test -f $PHP_PCRE_REGEX/pcre.h && PCRE_INCDIR=$PHP_PCRE_REGEX
- test -f $PHP_PCRE_REGEX/include/pcre.h && PCRE_INCDIR=$PHP_PCRE_REGEX/include
-
- if test -z "$PCRE_INCDIR"; then
- AC_MSG_RESULT(Could not find pcre.h in $PHP_PCRE_REGEX)
- fi
-
- changequote({,})
- pcre_major=`grep PCRE_MAJOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- pcre_minor=`grep PCRE_MINOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- changequote([,])
- pcre_minor_length=`echo "$pcre_minor" | wc -c | sed -e 's/[^0-9]//g'`
- if test "$pcre_minor_length" -eq 2 ; then
- pcre_minor="$pcre_minor"0
- fi
- pcre_version=$pcre_major$pcre_minor
- if test "$pcre_version" -lt 208; then
- AC_MSG_ERROR(The PCRE extension requires PCRE library version >= 2.08)
- fi
-
- test -f $PHP_PCRE_REGEX/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX
- test -f $PHP_PCRE_REGEX/lib/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX/lib
-
- if test -z "$PCRE_LIBDIR" ; then
- AC_MSG_ERROR(Could not find libpcre.a in $PHP_PCRE_REGEX)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(pcre, $PCRE_LIBDIR, PCRE_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_PCRE, 1, [ ])
- PHP_NEW_EXTENSION(pcre, php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -I$PCRE_INCDIR)
- fi
-fi
-PHP_SUBST(PCRE_SHARED_LIBADD)
-
-AC_CHECK_FUNC(memmove, [], [AC_DEFINE(USE_BCOPY, 1, [ ])])
diff --git a/ext/pcre/pcrelib/AUTHORS b/ext/pcre/pcrelib/AUTHORS
deleted file mode 100644
index bfe1b5d8a4..0000000000
--- a/ext/pcre/pcrelib/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2000 University of Cambridge
diff --git a/ext/pcre/pcrelib/COPYING b/ext/pcre/pcrelib/COPYING
deleted file mode 100644
index 34d20db928..0000000000
--- a/ext/pcre/pcrelib/COPYING
+++ /dev/null
@@ -1,46 +0,0 @@
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2000 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software which you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
-
-End
diff --git a/ext/pcre/pcrelib/ChangeLog b/ext/pcre/pcrelib/ChangeLog
deleted file mode 100644
index 2133dd7612..0000000000
--- a/ext/pcre/pcrelib/ChangeLog
+++ /dev/null
@@ -1,655 +0,0 @@
-ChangeLog for PCRE
-------------------
-
-
-Version 3.4 22-Aug-00
----------------------
-
-1. Fixed typo in pcre.h: unsigned const char * changed to const unsigned char *.
-
-2. Diagnose condition (?(0) as an error instead of crashing on matching.
-
-
-Version 3.3 01-Aug-00
----------------------
-
-1. If an octal character was given, but the value was greater than \377, it
-was not getting masked to the least significant bits, as documented. This could
-lead to crashes in some systems.
-
-2. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats
-the hyphen as a literal. PCRE used to give an error; it now behaves like Perl.
-
-3. Added the functions pcre_free_substring() and pcre_free_substring_list().
-These just pass their arguments on to (pcre_free)(), but they are provided
-because some uses of PCRE bind it to non-C systems that can call its functions,
-but cannot call free() or pcre_free() directly.
-
-4. Add "make test" as a synonym for "make check". Corrected some comments in
-the Makefile.
-
-5. Add $(DESTDIR)/ in front of all the paths in the "install" target in the
-Makefile.
-
-6. Changed the name of pgrep to pcregrep, because Solaris has introduced a
-command called pgrep for grepping around the active processes.
-
-7. Added the beginnings of support for UTF-8 character strings.
-
-8. Arranged for the Makefile to pass over the settings of CC, CFLAGS, and
-RANLIB to ./ltconfig so that they are used by libtool. I think these are all
-the relevant ones. (AR is not passed because ./ltconfig does its own figuring
-out for the ar command.)
-
-
-Version 3.2 12-May-00
----------------------
-
-This is purely a bug fixing release.
-
-1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
-of ZA. This was just one example of several cases that could provoke this bug,
-which was introduced by change 9 of version 2.00. The code for breaking
-infinite loops after an iteration that matches an empty string was't working
-correctly.
-
-2. The pcretest program was not imitating Perl correctly for the pattern /a*/g
-when matched against abbab (for example). After matching an empty string, it
-wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this
-caused it to match further down the string than it should.
-
-3. The code contained an inclusion of sys/types.h. It isn't clear why this
-was there because it doesn't seem to be needed, and it causes trouble on some
-systems, as it is not a Standard C header. It has been removed.
-
-4. Made 4 silly changes to the source to avoid stupid compiler warnings that
-were reported on the Macintosh. The changes were from
-
- while ((c = *(++ptr)) != 0 && c != '\n');
-to
- while ((c = *(++ptr)) != 0 && c != '\n') ;
-
-Totally extraordinary, but if that's what it takes...
-
-5. PCRE is being used in one environment where neither memmove() nor bcopy() is
-available. Added HAVE_BCOPY and an autoconf test for it; if neither
-HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which
-assumes the way PCRE uses memmove() (always moving upwards).
-
-6. PCRE is being used in one environment where strchr() is not available. There
-was only one use in pcre.c, and writing it out to avoid strchr() probably gives
-faster code anyway.
-
-
-Version 3.1 09-Feb-00
----------------------
-
-The only change in this release is the fixing of some bugs in Makefile.in for
-the "install" target:
-
-(1) It was failing to install pcreposix.h.
-
-(2) It was overwriting the pcre.3 man page with the pcreposix.3 man page.
-
-
-Version 3.0 01-Feb-00
----------------------
-
-1. Add support for the /+ modifier to perltest (to output $` like it does in
-pcretest).
-
-2. Add support for the /g modifier to perltest.
-
-3. Fix pcretest so that it behaves even more like Perl for /g when the pattern
-matches null strings.
-
-4. Fix perltest so that it doesn't do unwanted things when fed an empty
-pattern. Perl treats empty patterns specially - it reuses the most recent
-pattern, which is not what we want. Replace // by /(?#)/ in order to avoid this
-effect.
-
-5. The POSIX interface was broken in that it was just handing over the POSIX
-captured string vector to pcre_exec(), but (since release 2.00) PCRE has
-required a bigger vector, with some working space on the end. This means that
-the POSIX wrapper now has to get and free some memory, and copy the results.
-
-6. Added some simple autoconf support, placing the test data and the
-documentation in separate directories, re-organizing some of the
-information files, and making it build pcre-config (a GNU standard). Also added
-libtool support for building PCRE as a shared library, which is now the
-default.
-
-7. Got rid of the leading zero in the definition of PCRE_MINOR because 08 and
-09 are not valid octal constants. Single digits will be used for minor values
-less than 10.
-
-8. Defined REG_EXTENDED and REG_NOSUB as zero in the POSIX header, so that
-existing programs that set these in the POSIX interface can use PCRE without
-modification.
-
-9. Added a new function, pcre_fullinfo() with an extensible interface. It can
-return all that pcre_info() returns, plus additional data. The pcre_info()
-function is retained for compatibility, but is considered to be obsolete.
-
-10. Added experimental recursion feature (?R) to handle one common case that
-Perl 5.6 will be able to do with (?p{...}).
-
-11. Added support for POSIX character classes like [:alpha:], which Perl is
-adopting.
-
-
-Version 2.08 31-Aug-99
-----------------------
-
-1. When startoffset was not zero and the pattern began with ".*", PCRE was not
-trying to match at the startoffset position, but instead was moving forward to
-the next newline as if a previous match had failed.
-
-2. pcretest was not making use of PCRE_NOTEMPTY when repeating for /g and /G,
-and could get into a loop if a null string was matched other than at the start
-of the subject.
-
-3. Added definitions of PCRE_MAJOR and PCRE_MINOR to pcre.h so the version can
-be distinguished at compile time, and for completeness also added PCRE_DATE.
-
-5. Added Paul Sokolovsky's minor changes to make it easy to compile a Win32 DLL
-in GnuWin32 environments.
-
-
-Version 2.07 29-Jul-99
-----------------------
-
-1. The documentation is now supplied in plain text form and HTML as well as in
-the form of man page sources.
-
-2. C++ compilers don't like assigning (void *) values to other pointer types.
-In particular this affects malloc(). Although there is no problem in Standard
-C, I've put in casts to keep C++ compilers happy.
-
-3. Typo on pcretest.c; a cast of (unsigned char *) in the POSIX regexec() call
-should be (const char *).
-
-4. If NOPOSIX is defined, pcretest.c compiles without POSIX support. This may
-be useful for non-Unix systems who don't want to bother with the POSIX stuff.
-However, I haven't made this a standard facility. The documentation doesn't
-mention it, and the Makefile doesn't support it.
-
-5. The Makefile now contains an "install" target, with editable destinations at
-the top of the file. The pcretest program is not installed.
-
-6. pgrep -V now gives the PCRE version number and date.
-
-7. Fixed bug: a zero repetition after a literal string (e.g. /abcde{0}/) was
-causing the entire string to be ignored, instead of just the last character.
-
-8. If a pattern like /"([^\\"]+|\\.)*"/ is applied in the normal way to a
-non-matching string, it can take a very, very long time, even for strings of
-quite modest length, because of the nested recursion. PCRE now does better in
-some of these cases. It does this by remembering the last required literal
-character in the pattern, and pre-searching the subject to ensure it is present
-before running the real match. In other words, it applies a heuristic to detect
-some types of certain failure quickly, and in the above example, if presented
-with a string that has no trailing " it gives "no match" very quickly.
-
-9. A new runtime option PCRE_NOTEMPTY causes null string matches to be ignored;
-other alternatives are tried instead.
-
-
-Version 2.06 09-Jun-99
-----------------------
-
-1. Change pcretest's output for amount of store used to show just the code
-space, because the remainder (the data block) varies in size between 32-bit and
-64-bit systems.
-
-2. Added an extra argument to pcre_exec() to supply an offset in the subject to
-start matching at. This allows lookbehinds to work when searching for multiple
-occurrences in a string.
-
-3. Added additional options to pcretest for testing multiple occurrences:
-
- /+ outputs the rest of the string that follows a match
- /g loops for multiple occurrences, using the new startoffset argument
- /G loops for multiple occurrences by passing an incremented pointer
-
-4. PCRE wasn't doing the "first character" optimization for patterns starting
-with \b or \B, though it was doing it for other lookbehind assertions. That is,
-it wasn't noticing that a match for a pattern such as /\bxyz/ has to start with
-the letter 'x'. On long subject strings, this gives a significant speed-up.
-
-
-Version 2.05 21-Apr-99
-----------------------
-
-1. Changed the type of magic_number from int to long int so that it works
-properly on 16-bit systems.
-
-2. Fixed a bug which caused patterns starting with .* not to work correctly
-when the subject string contained newline characters. PCRE was assuming
-anchoring for such patterns in all cases, which is not correct because .* will
-not pass a newline unless PCRE_DOTALL is set. It now assumes anchoring only if
-DOTALL is set at top level; otherwise it knows that patterns starting with .*
-must be retried after every newline in the subject.
-
-
-Version 2.04 18-Feb-99
-----------------------
-
-1. For parenthesized subpatterns with repeats whose minimum was zero, the
-computation of the store needed to hold the pattern was incorrect (too large).
-If such patterns were nested a few deep, this could multiply and become a real
-problem.
-
-2. Added /M option to pcretest to show the memory requirement of a specific
-pattern. Made -m a synonym of -s (which does this globally) for compatibility.
-
-3. Subpatterns of the form (regex){n,m} (i.e. limited maximum) were being
-compiled in such a way that the backtracking after subsequent failure was
-pessimal. Something like (a){0,3} was compiled as (a)?(a)?(a)? instead of
-((a)((a)(a)?)?)? with disastrous performance if the maximum was of any size.
-
-
-Version 2.03 02-Feb-99
-----------------------
-
-1. Fixed typo and small mistake in man page.
-
-2. Added 4th condition (GPL supersedes if conflict) and created separate
-LICENCE file containing the conditions.
-
-3. Updated pcretest so that patterns such as /abc\/def/ work like they do in
-Perl, that is the internal \ allows the delimiter to be included in the
-pattern. Locked out the use of \ as a delimiter. If \ immediately follows
-the final delimiter, add \ to the end of the pattern (to test the error).
-
-4. Added the convenience functions for extracting substrings after a successful
-match. Updated pcretest to make it able to test these functions.
-
-
-Version 2.02 14-Jan-99
-----------------------
-
-1. Initialized the working variables associated with each extraction so that
-their saving and restoring doesn't refer to uninitialized store.
-
-2. Put dummy code into study.c in order to trick the optimizer of the IBM C
-compiler for OS/2 into generating correct code. Apparently IBM isn't going to
-fix the problem.
-
-3. Pcretest: the timing code wasn't using LOOPREPEAT for timing execution
-calls, and wasn't printing the correct value for compiling calls. Increased the
-default value of LOOPREPEAT, and the number of significant figures in the
-times.
-
-4. Changed "/bin/rm" in the Makefile to "-rm" so it works on Windows NT.
-
-5. Renamed "deftables" as "dftables" to get it down to 8 characters, to avoid
-a building problem on Windows NT with a FAT file system.
-
-
-Version 2.01 21-Oct-98
-----------------------
-
-1. Changed the API for pcre_compile() to allow for the provision of a pointer
-to character tables built by pcre_maketables() in the current locale. If NULL
-is passed, the default tables are used.
-
-
-Version 2.00 24-Sep-98
-----------------------
-
-1. Since the (>?) facility is in Perl 5.005, don't require PCRE_EXTRA to enable
-it any more.
-
-2. Allow quantification of (?>) groups, and make it work correctly.
-
-3. The first character computation wasn't working for (?>) groups.
-
-4. Correct the implementation of \Z (it is permitted to match on the \n at the
-end of the subject) and add 5.005's \z, which really does match only at the
-very end of the subject.
-
-5. Remove the \X "cut" facility; Perl doesn't have it, and (?> is neater.
-
-6. Remove the ability to specify CASELESS, MULTILINE, DOTALL, and
-DOLLAR_END_ONLY at runtime, to make it possible to implement the Perl 5.005
-localized options. All options to pcre_study() were also removed.
-
-7. Add other new features from 5.005:
-
- $(?<= positive lookbehind
- $(?<! negative lookbehind
- (?imsx-imsx) added the unsetting capability
- such a setting is global if at outer level; local otherwise
- (?imsx-imsx:) non-capturing groups with option setting
- (?(cond)re|re) conditional pattern matching
-
- A backreference to itself in a repeated group matches the previous
- captured string.
-
-8. General tidying up of studying (both automatic and via "study")
-consequential on the addition of new assertions.
-
-9. As in 5.005, unlimited repeated groups that could match an empty substring
-are no longer faulted at compile time. Instead, the loop is forcibly broken at
-runtime if any iteration does actually match an empty substring.
-
-10. Include the RunTest script in the distribution.
-
-11. Added tests from the Perl 5.005_02 distribution. This showed up a few
-discrepancies, some of which were old and were also with respect to 5.004. They
-have now been fixed.
-
-
-Version 1.09 28-Apr-98
-----------------------
-
-1. A negated single character class followed by a quantifier with a minimum
-value of one (e.g. [^x]{1,6} ) was not compiled correctly. This could lead to
-program crashes, or just wrong answers. This did not apply to negated classes
-containing more than one character, or to minima other than one.
-
-
-Version 1.08 27-Mar-98
-----------------------
-
-1. Add PCRE_UNGREEDY to invert the greediness of quantifiers.
-
-2. Add (?U) and (?X) to set PCRE_UNGREEDY and PCRE_EXTRA respectively. The
-latter must appear before anything that relies on it in the pattern.
-
-
-Version 1.07 16-Feb-98
-----------------------
-
-1. A pattern such as /((a)*)*/ was not being diagnosed as in error (unlimited
-repeat of a potentially empty string).
-
-
-Version 1.06 23-Jan-98
-----------------------
-
-1. Added Markus Oberhumer's little patches for C++.
-
-2. Literal strings longer than 255 characters were broken.
-
-
-Version 1.05 23-Dec-97
-----------------------
-
-1. Negated character classes containing more than one character were failing if
-PCRE_CASELESS was set at run time.
-
-
-Version 1.04 19-Dec-97
-----------------------
-
-1. Corrected the man page, where some "const" qualifiers had been omitted.
-
-2. Made debugging output print "{0,xxx}" instead of just "{,xxx}" to agree with
-input syntax.
-
-3. Fixed memory leak which occurred when a regex with back references was
-matched with an offsets vector that wasn't big enough. The temporary memory
-that is used in this case wasn't being freed if the match failed.
-
-4. Tidied pcretest to ensure it frees memory that it gets.
-
-5. Temporary memory was being obtained in the case where the passed offsets
-vector was exactly big enough.
-
-6. Corrected definition of offsetof() from change 5 below.
-
-7. I had screwed up change 6 below and broken the rules for the use of
-setjmp(). Now fixed.
-
-
-Version 1.03 18-Dec-97
-----------------------
-
-1. A erroneous regex with a missing opening parenthesis was correctly
-diagnosed, but PCRE attempted to access brastack[-1], which could cause crashes
-on some systems.
-
-2. Replaced offsetof(real_pcre, code) by offsetof(real_pcre, code[0]) because
-it was reported that one broken compiler failed on the former because "code" is
-also an independent variable.
-
-3. The erroneous regex a[]b caused an array overrun reference.
-
-4. A regex ending with a one-character negative class (e.g. /[^k]$/) did not
-fail on data ending with that character. (It was going on too far, and checking
-the next character, typically a binary zero.) This was specific to the
-optimized code for single-character negative classes.
-
-5. Added a contributed patch from the TIN world which does the following:
-
- + Add an undef for memmove, in case the the system defines a macro for it.
-
- + Add a definition of offsetof(), in case there isn't one. (I don't know
- the reason behind this - offsetof() is part of the ANSI standard - but
- it does no harm).
-
- + Reduce the ifdef's in pcre.c using macro DPRINTF, thereby eliminating
- most of the places where whitespace preceded '#'. I have given up and
- allowed the remaining 2 cases to be at the margin.
-
- + Rename some variables in pcre to eliminate shadowing. This seems very
- pedantic, but does no harm, of course.
-
-6. Moved the call to setjmp() into its own function, to get rid of warnings
-from gcc -Wall, and avoided calling it at all unless PCRE_EXTRA is used.
-
-7. Constructs such as \d{8,} were compiling into the equivalent of
-\d{8}\d{0,65527} instead of \d{8}\d* which didn't make much difference to the
-outcome, but in this particular case used more store than had been allocated,
-which caused the bug to be discovered because it threw up an internal error.
-
-8. The debugging code in both pcre and pcretest for outputting the compiled
-form of a regex was going wrong in the case of back references followed by
-curly-bracketed repeats.
-
-
-Version 1.02 12-Dec-97
-----------------------
-
-1. Typos in pcre.3 and comments in the source fixed.
-
-2. Applied a contributed patch to get rid of places where it used to remove
-'const' from variables, and fixed some signed/unsigned and uninitialized
-variable warnings.
-
-3. Added the "runtest" target to Makefile.
-
-4. Set default compiler flag to -O2 rather than just -O.
-
-
-Version 1.01 19-Nov-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeat of empty string for patterns
-like /([ab]*)*/, that is, for classes with more than one character in them.
-
-2. Likewise, it wasn't diagnosing patterns with "once-only" subpatterns, such
-as /((?>a*))*/ (a PCRE_EXTRA facility).
-
-
-Version 1.00 18-Nov-97
-----------------------
-
-1. Added compile-time macros to support systems such as SunOS4 which don't have
-memmove() or strerror() but have other things that can be used instead.
-
-2. Arranged that "make clean" removes the executables.
-
-
-Version 0.99 27-Oct-97
-----------------------
-
-1. Fixed bug in code for optimizing classes with only one character. It was
-initializing a 32-byte map regardless, which could cause it to run off the end
-of the memory it had got.
-
-2. Added, conditional on PCRE_EXTRA, the proposed (?>REGEX) construction.
-
-
-Version 0.98 22-Oct-97
-----------------------
-
-1. Fixed bug in code for handling temporary memory usage when there are more
-back references than supplied space in the ovector. This could cause segfaults.
-
-
-Version 0.97 21-Oct-97
-----------------------
-
-1. Added the \X "cut" facility, conditional on PCRE_EXTRA.
-
-2. Optimized negated single characters not to use a bit map.
-
-3. Brought error texts together as macro definitions; clarified some of them;
-fixed one that was wrong - it said "range out of order" when it meant "invalid
-escape sequence".
-
-4. Changed some char * arguments to const char *.
-
-5. Added PCRE_NOTBOL and PCRE_NOTEOL (from POSIX).
-
-6. Added the POSIX-style API wrapper in pcreposix.a and testing facilities in
-pcretest.
-
-
-Version 0.96 16-Oct-97
-----------------------
-
-1. Added a simple "pgrep" utility to the distribution.
-
-2. Fixed an incompatibility with Perl: "{" is now treated as a normal character
-unless it appears in one of the precise forms "{ddd}", "{ddd,}", or "{ddd,ddd}"
-where "ddd" means "one or more decimal digits".
-
-3. Fixed serious bug. If a pattern had a back reference, but the call to
-pcre_exec() didn't supply a large enough ovector to record the related
-identifying subpattern, the match always failed. PCRE now remembers the number
-of the largest back reference, and gets some temporary memory in which to save
-the offsets during matching if necessary, in order to ensure that
-backreferences always work.
-
-4. Increased the compatibility with Perl in a number of ways:
-
- (a) . no longer matches \n by default; an option PCRE_DOTALL is provided
- to request this handling. The option can be set at compile or exec time.
-
- (b) $ matches before a terminating newline by default; an option
- PCRE_DOLLAR_ENDONLY is provided to override this (but not in multiline
- mode). The option can be set at compile or exec time.
-
- (c) The handling of \ followed by a digit other than 0 is now supposed to be
- the same as Perl's. If the decimal number it represents is less than 10
- or there aren't that many previous left capturing parentheses, an octal
- escape is read. Inside a character class, it's always an octal escape,
- even if it is a single digit.
-
- (d) An escaped but undefined alphabetic character is taken as a literal,
- unless PCRE_EXTRA is set. Currently this just reserves the remaining
- escapes.
-
- (e) {0} is now permitted. (The previous item is removed from the compiled
- pattern).
-
-5. Changed all the names of code files so that the basic parts are no longer
-than 10 characters, and abolished the teeny "globals.c" file.
-
-6. Changed the handling of character classes; they are now done with a 32-byte
-bit map always.
-
-7. Added the -d and /D options to pcretest to make it possible to look at the
-internals of compilation without having to recompile pcre.
-
-
-Version 0.95 23-Sep-97
-----------------------
-
-1. Fixed bug in pre-pass concerning escaped "normal" characters such as \x5c or
-\x20 at the start of a run of normal characters. These were being treated as
-real characters, instead of the source characters being re-checked.
-
-
-Version 0.94 18-Sep-97
-----------------------
-
-1. The functions are now thread-safe, with the caveat that the global variables
-containing pointers to malloc() and free() or alternative functions are the
-same for all threads.
-
-2. Get pcre_study() to generate a bitmap of initial characters for non-
-anchored patterns when this is possible, and use it if passed to pcre_exec().
-
-
-Version 0.93 15-Sep-97
-----------------------
-
-1. /(b)|(:+)/ was computing an incorrect first character.
-
-2. Add pcre_study() to the API and the passing of pcre_extra to pcre_exec(),
-but not actually doing anything yet.
-
-3. Treat "-" characters in classes that cannot be part of ranges as literals,
-as Perl does (e.g. [-az] or [az-]).
-
-4. Set the anchored flag if a branch starts with .* or .*? because that tests
-all possible positions.
-
-5. Split up into different modules to avoid including unneeded functions in a
-compiled binary. However, compile and exec are still in one module. The "study"
-function is split off.
-
-6. The character tables are now in a separate module whose source is generated
-by an auxiliary program - but can then be edited by hand if required. There are
-now no calls to isalnum(), isspace(), isdigit(), isxdigit(), tolower() or
-toupper() in the code.
-
-7. Turn the malloc/free funtions variables into pcre_malloc and pcre_free and
-make them global. Abolish the function for setting them, as the caller can now
-set them directly.
-
-
-Version 0.92 11-Sep-97
-----------------------
-
-1. A repeat with a fixed maximum and a minimum of 1 for an ordinary character
-(e.g. /a{1,3}/) was broken (I mis-optimized it).
-
-2. Caseless matching was not working in character classes if the characters in
-the pattern were in upper case.
-
-3. Make ranges like [W-c] work in the same way as Perl for caseless matching.
-
-4. Make PCRE_ANCHORED public and accept as a compile option.
-
-5. Add an options word to pcre_exec() and accept PCRE_ANCHORED and
-PCRE_CASELESS at run time. Add escapes \A and \I to pcretest to cause it to
-pass them.
-
-6. Give an error if bad option bits passed at compile or run time.
-
-7. Add PCRE_MULTILINE at compile and exec time, and (?m) as well. Add \M to
-pcretest to cause it to pass that flag.
-
-8. Add pcre_info(), to get the number of identifying subpatterns, the stored
-options, and the first character, if set.
-
-9. Recognize C+ or C{n,m} where n >= 1 as providing a fixed starting character.
-
-
-Version 0.91 10-Sep-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeats of subpatterns that could
-match the empty string as in /(a*)*/. It was looping and ultimately crashing.
-
-2. PCRE was looping on encountering an indefinitely repeated back reference to
-a subpattern that had matched an empty string, e.g. /(a|)\1*/. It now does what
-Perl does - treats the match as successful.
-
-****
diff --git a/ext/pcre/pcrelib/INSTALL b/ext/pcre/pcrelib/INSTALL
deleted file mode 100644
index 08802812de..0000000000
--- a/ext/pcre/pcrelib/INSTALL
+++ /dev/null
@@ -1,185 +0,0 @@
-Basic Installation
-==================
-
- These are generic installation instructions that apply to systems that
-can run the `configure' shell script - Unix systems and any that imitate
-it. They are not specific to PCRE. There are PCRE-specific instructions
-for non-Unix systems in the file NON-UNIX-USE.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. You can give `configure'
-initial values for variables by setting them in the environment. Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory. After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
- CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
- If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
- Use and save the results of the tests in FILE instead of
- `./config.cache'. Set FILE to `/dev/null' to disable caching, for
- debugging `configure'.
-
-`--help'
- Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`--version'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
diff --git a/ext/pcre/pcrelib/LICENCE b/ext/pcre/pcrelib/LICENCE
deleted file mode 100644
index 34d20db928..0000000000
--- a/ext/pcre/pcrelib/LICENCE
+++ /dev/null
@@ -1,46 +0,0 @@
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2000 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software which you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
-
-End
diff --git a/ext/pcre/pcrelib/NEWS b/ext/pcre/pcrelib/NEWS
deleted file mode 100644
index 56fccdfad3..0000000000
--- a/ext/pcre/pcrelib/NEWS
+++ /dev/null
@@ -1,54 +0,0 @@
-News about PCRE releases
-------------------------
-
-Release 3.3 01-Aug-00
----------------------
-
-There is some support for UTF-8 character strings. This is incomplete and
-experimental. The documentation describes what is and what is not implemented.
-Otherwise, this is just a bug-fixing release.
-
-
-Release 3.0 01-Feb-00
----------------------
-
-1. A "configure" script is now used to configure PCRE for Unix systems. It
-builds a Makefile, a config.h file, and the pcre-config script.
-
-2. PCRE is built as a shared library by default.
-
-3. There is support for POSIX classes such as [:alpha:].
-
-5. There is an experimental recursion feature.
-
-----------------------------------------------------------------------------
- IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00
-
-Please note that there has been a change in the API such that a larger
-ovector is required at matching time, to provide some additional workspace.
-The new man page has details. This change was necessary in order to support
-some of the new functionality in Perl 5.005.
-
- IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00
-
-Another (I hope this is the last!) change has been made to the API for the
-pcre_compile() function. An additional argument has been added to make it
-possible to pass over a pointer to character tables built in the current
-locale by pcre_maketables(). To use the default tables, this new arguement
-should be passed as NULL.
-
- IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05
-
-Yet another (and again I hope this really is the last) change has been made
-to the API for the pcre_exec() function. An additional argument has been
-added to make it possible to start the match other than at the start of the
-subject string. This is important if there are lookbehinds. The new man
-page has the details, but you just want to convert existing programs, all
-you need to do is to stick in a new fifth argument to pcre_exec(), with a
-value of zero. For example, change
-
- pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize)
-to
- pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize)
-
-****
diff --git a/ext/pcre/pcrelib/NON-UNIX-USE b/ext/pcre/pcrelib/NON-UNIX-USE
deleted file mode 100644
index 09a743245b..0000000000
--- a/ext/pcre/pcrelib/NON-UNIX-USE
+++ /dev/null
@@ -1,50 +0,0 @@
-Compiling PCRE on non-Unix systems
-----------------------------------
-
-If you want to compile PCRE for a non-Unix system, note that it consists
-entirely of code written in Standard C, and so should compile successfully
-on any machine with a Standard C compiler and library, using normal compiling
-commands to do the following:
-
-(1) Copy or rename the file config.in as config.h, and change the macros that
-define HAVE_STRERROR and HAVE_MEMMOVE to define them as 1 rather than 0.
-Unfortunately, because of the way Unix autoconf works, the default setting has
-to be 0.
-
-(2) Copy or rename the file pcre.in as pcre.h, and change the macro definitions
-for PCRE_MAJOR, PCRE_MINOR, and PCRE_DATE near its start to the values set in
-configure.in.
-
-(3) Compile dftables.c as a stand-alone program, and then run it with
-the standard output sent to chartables.c. This generates a set of standard
-character tables.
-
-(4) Compile maketables.c, get.c, study.c and pcre.c and link them all
-together into an object library in whichever form your system keeps such
-libraries. This is the pcre library (chartables.c gets included by means of an
-#include directive).
-
-(5) Similarly, compile pcreposix.c and link it as the pcreposix library.
-
-(6) Compile the test program pcretest.c. This needs the functions in the
-pcre and pcreposix libraries when linking.
-
-(7) Run pcretest on the testinput files in the testdata directory, and check
-that the output matches the corresponding testoutput files. You must use the
--i option when checking testinput2.
-
-If you have a system without "configure" but where you can use a Makefile, edit
-Makefile.in to create Makefile, substituting suitable values for the variables
-at the head of the file.
-
-Some help in building a Win32 DLL of PCRE in GnuWin32 environments was
-contributed by Paul.Sokolovsky@technologist.com. These environments are
-Mingw32 (http://www.xraylith.wisc.edu/~khan/software/gnu-win32/) and
-CygWin (http://sourceware.cygnus.com/cygwin/). Paul comments:
-
- For CygWin, set CFLAGS=-mno-cygwin, and do 'make dll'. You'll get
- pcre.dll (containing pcreposix also), libpcre.dll.a, and dynamically
- linked pgrep and pcretest. If you have /bin/sh, run RunTest (three
- main test go ok, locale not supported).
-
-****
diff --git a/ext/pcre/pcrelib/README b/ext/pcre/pcrelib/README
deleted file mode 100644
index d124ee014c..0000000000
--- a/ext/pcre/pcrelib/README
+++ /dev/null
@@ -1,270 +0,0 @@
-README file for PCRE (Perl-compatible regular expression library)
------------------------------------------------------------------
-
-The latest release of PCRE is always available from
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
-
-Please read the NEWS file if you are upgrading from a previous release.
-
-PCRE has its own native API, but a set of "wrapper" functions that are based on
-the POSIX API are also supplied in the library libpcreposix. Note that this
-just provides a POSIX calling interface to PCRE: the regular expressions
-themselves still follow Perl syntax and semantics. The header file
-for the POSIX-style functions is called pcreposix.h. The official POSIX name is
-regex.h, but I didn't want to risk possible problems with existing files of
-that name by distributing it that way. To use it with an existing program that
-uses the POSIX API, it will have to be renamed or pointed at by a link.
-
-
-Building PCRE on a Unix system
-------------------------------
-
-To build PCRE on a Unix system, run the "configure" command in the PCRE
-distribution directory. This is a standard GNU "autoconf" configuration script,
-for which generic instructions are supplied in INSTALL. On many systems just
-running "./configure" is sufficient, but the usual methods of changing standard
-defaults are available. For example,
-
-CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
-
-specifies that the C compiler should be run with the flags '-O2 -Wall' instead
-of the default, and that "make install" should install PCRE under /opt/local
-instead of the default /usr/local.
-
-If you want to make use of the experimential, incomplete support for UTF-8
-character strings in PCRE, you must add --enable-utf8 to the "configure"
-command. Without it, the code for handling UTF-8 is not included in the
-library. (Even when included, it still has to be enabled by an option at run
-time.)
-
-The "configure" script builds four files:
-
-. Makefile is built by copying Makefile.in and making substitutions.
-. config.h is built by copying config.in and making substitutions.
-. pcre-config is built by copying pcre-config.in and making substitutions.
-. RunTest is a script for running tests
-
-Once "configure" has run, you can run "make". It builds two libraries called
-libpcre and libpcreposix, a test program called pcretest, and the pcregrep
-command. You can use "make install" to copy these, and the public header file
-pcre.h, to appropriate live directories on your system, in the normal way.
-
-Running "make install" also installs the command pcre-config, which can be used
-to recall information about the PCRE configuration and installation. For
-example,
-
- pcre-config --version
-
-prints the version number, and
-
- pcre-config --libs
-
-outputs information about where the library is installed. This command can be
-included in makefiles for programs that use PCRE, saving the programmer from
-having to remember too many details.
-
-
-Shared libraries on Unix systems
---------------------------------
-
-The default distribution builds PCRE as two shared libraries. This support is
-new and experimental and may not work on all systems. It relies on the
-"libtool" scripts - these are distributed with PCRE. It should build a
-"libtool" script and use this to compile and link shared libraries, which are
-placed in a subdirectory called .libs. The programs pcretest and pcregrep are
-built to use these uninstalled libraries by means of wrapper scripts. When you
-use "make install" to install shared libraries, pcregrep and pcretest are
-automatically re-built to use the newly installed libraries. However, only
-pcregrep is installed, as pcretest is really just a test program.
-
-To build PCRE using static libraries you must use --disable-shared when
-configuring it. For example
-
-./configure --prefix=/usr/gnu --disable-shared
-
-Then run "make" in the usual way.
-
-
-Building on non-Unix systems
-----------------------------
-
-For a non-Unix system, read the comments in the file NON-UNIX-USE. PCRE has
-been compiled on Windows systems and on Macintoshes, but I don't know the
-details because I don't use those systems. It should be straightforward to
-build PCRE on any system that has a Standard C compiler, because it uses only
-Standard C functions.
-
-
-Testing PCRE
-------------
-
-To test PCRE on a Unix system, run the RunTest script in the pcre directory.
-(This can also be run by "make runtest", "make check", or "make test".) For
-other systems, see the instruction in NON-UNIX-USE.
-
-The script runs the pcretest test program (which is documented in
-doc/pcretest.txt) on each of the testinput files (in the testdata directory) in
-turn, and compares the output with the contents of the corresponding testoutput
-file. A file called testtry is used to hold the output from pcretest. To run
-pcretest on just one of the test files, give its number as an argument to
-RunTest, for example:
-
- RunTest 3
-
-The first and third test files can also be fed directly into the perltest
-script to check that Perl gives the same results. The third file requires the
-additional features of release 5.005, which is why it is kept separate from the
-main test input, which needs only Perl 5.004. In the long run, when 5.005 (or
-higher) is widespread, these two test files may get amalgamated.
-
-The second set of tests check pcre_fullinfo(), pcre_info(), pcre_study(),
-pcre_copy_substring(), pcre_get_substring(), pcre_get_substring_list(), error
-detection, and run-time flags that are specific to PCRE, as well as the POSIX
-wrapper API. It also uses the debugging flag to check some of the internals of
-pcre_compile().
-
-If you build PCRE with a locale setting that is not the standard C locale, the
-character tables may be different (see next paragraph). In some cases, this may
-cause failures in the second set of tests. For example, in a locale where the
-isprint() function yields TRUE for characters in the range 128-255, the use of
-[:isascii:] inside a character class defines a different set of characters, and
-this shows up in this test as a difference in the compiled code, which is being
-listed for checking. Where the comparison test output contains [\x00-\x7f] the
-test will contain [\x00-\xff], and similarly in some other cases. This is not a
-bug in PCRE.
-
-The fourth set of tests checks pcre_maketables(), the facility for building a
-set of character tables for a specific locale and using them instead of the
-default tables. The tests make use of the "fr" (French) locale. Before running
-the test, the script checks for the presence of this locale by running the
-"locale" command. If that command fails, or if it doesn't include "fr" in the
-list of available locales, the fourth test cannot be run, and a comment is
-output to say why. If running this test produces instances of the error
-
- ** Failed to set locale "fr"
-
-in the comparison output, it means that locale is not available on your system,
-despite being listed by "locale". This does not mean that PCRE is broken.
-
-The fifth test checks the experimental, incomplete UTF-8 support. It is not run
-automatically unless PCRE is built with UTF-8 support. This file can be fed
-directly to the perltest8 script, which requires Perl 5.6 or higher. The sixth
-file tests internal UTF-8 features of PCRE that are not relevant to Perl.
-
-
-Character tables
-----------------
-
-PCRE uses four tables for manipulating and identifying characters. The final
-argument of the pcre_compile() function is a pointer to a block of memory
-containing the concatenated tables. A call to pcre_maketables() can be used to
-generate a set of tables in the current locale. If the final argument for
-pcre_compile() is passed as NULL, a set of default tables that is built into
-the binary is used.
-
-The source file called chartables.c contains the default set of tables. This is
-not supplied in the distribution, but is built by the program dftables
-(compiled from dftables.c), which uses the ANSI C character handling functions
-such as isalnum(), isalpha(), isupper(), islower(), etc. to build the table
-sources. This means that the default C locale which is set for your system will
-control the contents of these default tables. You can change the default tables
-by editing chartables.c and then re-building PCRE. If you do this, you should
-probably also edit Makefile to ensure that the file doesn't ever get
-re-generated.
-
-The first two 256-byte tables provide lower casing and case flipping functions,
-respectively. The next table consists of three 32-byte bit maps which identify
-digits, "word" characters, and white space, respectively. These are used when
-building 32-byte bit maps that represent character classes.
-
-The final 256-byte table has bits indicating various character types, as
-follows:
-
- 1 white space character
- 2 letter
- 4 decimal digit
- 8 hexadecimal digit
- 16 alphanumeric or '_'
- 128 regular expression metacharacter or binary zero
-
-You should not alter the set of characters that contain the 128 bit, as that
-will cause PCRE to malfunction.
-
-
-Manifest
---------
-
-The distribution should contain the following files:
-
-(A) The actual source files of the PCRE library functions and their
- headers:
-
- dftables.c auxiliary program for building chartables.c
- get.c )
- maketables.c )
- study.c ) source of
- pcre.c ) the functions
- pcreposix.c )
- pcre.in "source" for the header for the external API; pcre.h
- is built from this by "configure"
- pcreposix.h header for the external POSIX wrapper API
- internal.h header for internal use
- config.in template for config.h, which is built by configure
-
-(B) Auxiliary files:
-
- AUTHORS information about the author of PCRE
- ChangeLog log of changes to the code
- INSTALL generic installation instructions
- LICENCE conditions for the use of PCRE
- COPYING the same, using GNU's standard name
- Makefile.in template for Unix Makefile, which is built by configure
- NEWS important changes in this release
- NON-UNIX-USE notes on building PCRE on non-Unix systems
- README this file
- RunTest.in template for a Unix shell script for running tests
- config.guess ) files used by libtool,
- config.sub ) used only when building a shared library
- configure a configuring shell script (built by autoconf)
- configure.in the autoconf input used to build configure
- doc/Tech.Notes notes on the encoding
- doc/pcre.3 man page source for the PCRE functions
- doc/pcre.html HTML version
- doc/pcre.txt plain text version
- doc/pcreposix.3 man page source for the POSIX wrapper API
- doc/pcreposix.html HTML version
- doc/pcreposix.txt plain text version
- doc/pcretest.txt documentation of test program
- doc/perltest.txt documentation of Perl test program
- doc/pcregrep.1 man page source for the pcregrep utility
- doc/pcregrep.html HTML version
- doc/pcregrep.txt plain text version
- install-sh a shell script for installing files
- ltconfig ) files used to build "libtool",
- ltmain.sh ) used only when building a shared library
- pcretest.c test program
- perltest Perl test program
- perltest8 Perl test program for UTF-8 tests
- pcregrep.c source of a grep utility that uses PCRE
- pcre-config.in source of script which retains PCRE information
- testdata/testinput1 test data, compatible with Perl 5.004 and 5.005
- testdata/testinput2 test data for error messages and non-Perl things
- testdata/testinput3 test data, compatible with Perl 5.005
- testdata/testinput4 test data for locale-specific tests
- testdata/testinput5 test data for UTF-8 tests compatible with Perl 5.6
- testdata/testinput6 test data for other UTF-8 tests
- testdata/testoutput1 test results corresponding to testinput1
- testdata/testoutput2 test results corresponding to testinput2
- testdata/testoutput3 test results corresponding to testinput3
- testdata/testoutput4 test results corresponding to testinput4
- testdata/testoutput5 test results corresponding to testinput5
- testdata/testoutput6 test results corresponding to testinput6
-
-(C) Auxiliary files for Win32 DLL
-
- dll.mk
- pcre.def
-
-Philip Hazel <ph10@cam.ac.uk>
-August 2000
diff --git a/ext/pcre/pcrelib/RunTest b/ext/pcre/pcrelib/RunTest
deleted file mode 100755
index d82097d4ae..0000000000
--- a/ext/pcre/pcrelib/RunTest
+++ /dev/null
@@ -1,148 +0,0 @@
-#! /bin/sh
-
-# This file is generated by configure from RunTest.in. Make any changes
-# to that file.
-
-# Run PCRE tests
-
-cf=diff
-
-# Select which tests to run; if no selection, run all
-
-do1=no
-do2=no
-do3=no
-do4=no
-do5=no
-do6=no
-
-while [ $# -gt 0 ] ; do
- case $1 in
- 1) do1=yes;;
- 2) do2=yes;;
- 3) do3=yes;;
- 4) do4=yes;;
- 5) do5=yes;;
- 6) do6=yes;;
- *) echo "Unknown test number $1"; exit 1;;
- esac
- shift
-done
-
-if [ "" = "" ] ; then
- if [ $do5 = yes ] ; then
- echo "Can't run test 5 because UFT8 support is not configured"
- exit 1
- fi
- if [ $do6 = yes ] ; then
- echo "Can't run test 6 because UFT8 support is not configured"
- exit 1
- fi
-fi
-
-if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a\
- $do5 = no -a $do6 = no ] ; then
- do1=yes
- do2=yes
- do3=yes
- do4=yes
- if [ "" != "" ] ; then do5=yes; fi
- if [ "" != "" ] ; then do6=yes; fi
-fi
-
-# Primary test, Perl-compatible
-
-if [ $do1 = yes ] ; then
- echo "Testing main functionality (Perl compatible)"
- ./pcretest testdata/testinput1 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput1
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-# PCRE tests that are not Perl-compatible - API & error tests, mostly
-
-if [ $do2 = yes ] ; then
- echo "Testing API and error handling (not Perl compatible)"
- ./pcretest -i testdata/testinput2 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput2
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-# Additional Perl-compatible tests for Perl 5.005's new features
-
-if [ $do3 = yes ] ; then
- echo "Testing Perl 5.005 features (Perl 5.005 compatible)"
- ./pcretest testdata/testinput3 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput3
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-if [ $do1 = yes -a $do2 = yes -a $do3 = yes ] ; then
- echo " "
- echo "The three main tests all ran OK"
- echo " "
-fi
-
-# Locale-specific tests, provided the "fr" locale is available
-
-if [ $do4 = yes ] ; then
- locale -a | grep '^fr$' >/dev/null
- if [ $? -eq 0 ] ; then
- echo "Testing locale-specific features (using 'fr' locale)"
- ./pcretest testdata/testinput4 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput4
- if [ $? != 0 ] ; then
- echo " "
- echo "Locale test did not run entirely successfully."
- echo "This usually means that there is a problem with the locale"
- echo "settings rather than a bug in PCRE."
- else
- echo "Locale test ran OK"
- fi
- echo " "
- else exit 1
- fi
- else
- echo "Cannot test locale-specific features - 'fr' locale not found,"
- echo "or the \"locale\" command is not available to check for it."
- echo " "
- fi
-fi
-
-# Additional tests for UTF8 support
-
-if [ $do5 = yes ] ; then
- echo "Testing experimental, incomplete UTF8 support (Perl compatible)"
- ./pcretest testdata/testinput5 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput5
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
- echo "UTF8 test ran OK"
- echo " "
-fi
-
-if [ $do6 = yes ] ; then
- echo "Testing API and internals for UTF8 support (not Perl compatible)"
- ./pcretest testdata/testinput6 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput6
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
- echo "UTF8 internals test ran OK"
- echo " "
-fi
-
-# End
diff --git a/ext/pcre/pcrelib/chartables.c b/ext/pcre/pcrelib/chartables.c
deleted file mode 100644
index 9055da2d2d..0000000000
--- a/ext/pcre/pcrelib/chartables.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* This file is automatically written by the dftables auxiliary
-program. If you edit it by hand, you might like to edit the Makefile to
-prevent its ever being regenerated.
-
-This file is #included in the compilation of pcre.c to build the default
-character tables which are used when no tables are passed to the compile
-function. */
-
-static unsigned char pcre_default_tables[] = {
-
-/* This table is a lower casing table. */
-
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,
- 120,121,122, 91, 92, 93, 94, 95,
- 96, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,
- 120,121,122,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,
- 136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,
- 152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,
- 168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,
- 184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,
- 200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,
- 216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,
- 232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,
- 248,249,250,251,252,253,254,255,
-
-/* This table is a case flipping table. */
-
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,
- 120,121,122, 91, 92, 93, 94, 95,
- 96, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,
- 136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,
- 152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,
- 168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,
- 184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,
- 200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,
- 216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,
- 232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,
- 248,249,250,251,252,253,254,255,
-
-/* This table contains bit maps for various character classes.
-Each map is 32 bytes long and the bits run from the least
-significant end of each byte. The classes that have their own
-maps are: space, xdigit, digit, upper, lower, word, graph
-print, punct, and cntrl. Other classes are built from combinations. */
-
- 0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
- 0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
- 0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,
- 0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
-/* This table identifies various classes of character by individual bits:
- 0x01 white space character
- 0x02 letter
- 0x04 decimal digit
- 0x08 hexadecimal digit
- 0x10 alphanumeric or '_'
- 0x80 regular expression metacharacter or binary zero
-*/
-
- 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 */
- 0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, /* 8- 15 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */
- 0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /* - ' */
- 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /* ( - / */
- 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /* 0 - 7 */
- 0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /* 8 - ? */
- 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* @ - G */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* H - O */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* P - W */
- 0x12,0x12,0x12,0x80,0x00,0x00,0x80,0x10, /* X - _ */
- 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* ` - g */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* h - o */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* p - w */
- 0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /* x -127 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
-
-/* End of chartables.c */
diff --git a/ext/pcre/pcrelib/dftables.c b/ext/pcre/pcrelib/dftables.c
deleted file mode 100644
index d572dfd3e6..0000000000
--- a/ext/pcre/pcrelib/dftables.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This is a support program to generate the file chartables.c, containing
-character tables of various kinds. They are built according to the default C
-locale and used as the default tables by PCRE. Now that pcre_maketables is
-a function visible to the outside world, we make use of its code from here in
-order to be consistent. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "internal.h"
-
-#define DFTABLES /* maketables.c notices this */
-#include "maketables.c"
-
-
-int main(void)
-{
-int i;
-unsigned const char *tables = pcre_maketables();
-
-printf(
- "/*************************************************\n"
- "* Perl-Compatible Regular Expressions *\n"
- "*************************************************/\n\n"
- "/* This file is automatically written by the dftables auxiliary \n"
- "program. If you edit it by hand, you might like to edit the Makefile to \n"
- "prevent its ever being regenerated.\n\n"
- "This file is #included in the compilation of pcre.c to build the default\n"
- "character tables which are used when no tables are passed to the compile\n"
- "function. */\n\n"
- "static unsigned char pcre_default_tables[] = {\n\n"
- "/* This table is a lower casing table. */\n\n");
-
-printf(" ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0) printf("\n ");
- printf("%3d", *tables++);
- if (i != 255) printf(",");
- }
-printf(",\n\n");
-
-printf("/* This table is a case flipping table. */\n\n");
-
-printf(" ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0) printf("\n ");
- printf("%3d", *tables++);
- if (i != 255) printf(",");
- }
-printf(",\n\n");
-
-printf(
- "/* This table contains bit maps for various character classes.\n"
- "Each map is 32 bytes long and the bits run from the least\n"
- "significant end of each byte. The classes that have their own\n"
- "maps are: space, xdigit, digit, upper, lower, word, graph\n"
- "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
-
-printf(" ");
-for (i = 0; i < cbit_length; i++)
- {
- if ((i & 7) == 0 && i != 0)
- {
- if ((i & 31) == 0) printf("\n");
- printf("\n ");
- }
- printf("0x%02x", *tables++);
- if (i != cbit_length - 1) printf(",");
- }
-printf(",\n\n");
-
-printf(
- "/* This table identifies various classes of character by individual bits:\n"
- " 0x%02x white space character\n"
- " 0x%02x letter\n"
- " 0x%02x decimal digit\n"
- " 0x%02x hexadecimal digit\n"
- " 0x%02x alphanumeric or '_'\n"
- " 0x%02x regular expression metacharacter or binary zero\n*/\n\n",
- ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
- ctype_meta);
-
-printf(" ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0)
- {
- printf(" /* ");
- if (isprint(i-8)) printf(" %c -", i-8);
- else printf("%3d-", i-8);
- if (isprint(i-1)) printf(" %c ", i-1);
- else printf("%3d", i-1);
- printf(" */\n ");
- }
- printf("0x%02x", *tables++);
- if (i != 255) printf(",");
- }
-
-printf("};/* ");
-if (isprint(i-8)) printf(" %c -", i-8);
- else printf("%3d-", i-8);
-if (isprint(i-1)) printf(" %c ", i-1);
- else printf("%3d", i-1);
-printf(" */\n\n/* End of chartables.c */\n");
-
-return 0;
-}
-
-/* End of dftables.c */
diff --git a/ext/pcre/pcrelib/dll.mk b/ext/pcre/pcrelib/dll.mk
deleted file mode 100644
index d8b728e57e..0000000000
--- a/ext/pcre/pcrelib/dll.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-# dll.mk - auxilary Makefile to easy build dll's for mingw32 target
-# ver. 0.6 of 1999-03-25
-#
-# Homepage of this makefile - http://www.is.lg.ua/~paul/devel/
-# Homepage of original mingw32 project -
-# http://www.fu.is.saga-u.ac.jp/~colin/gcc.html
-#
-# How to use:
-# This makefile can:
-# 1. Create automatical .def file from list of objects
-# 2. Create .dll from objects and .def file, either automatical, or your
-# hand-written (maybe) file, which must have same basename as dll
-# WARNING! There MUST be object, which name match dll's name. Make sux.
-# 3. Create import library from .def (as for .dll, only its name required,
-# not dll itself)
-# By convention implibs for dll have .dll.a suffix, e.g. libstuff.dll.a
-# Why not just libstuff.a? 'Cos that's name for static lib, ok?
-# Process divided into 3 phases because:
-# 1. Pre-existent .def possible
-# 2. Generating implib is enough time-consuming
-#
-# Variables:
-# DLL_LDLIBS - libs for linking dll
-# DLL_LDFLAGS - flags for linking dll
-#
-# By using $(DLL_SUFFIX) instead of 'dll', e.g. stuff.$(DLL_SUFFIX)
-# you may help porting makefiles to other platforms
-#
-# Put this file in your make's include path (e.g. main include dir, for
-# more information see include section in make doc). Put in the beginning
-# of your own Makefile line "include dll.mk". Specify dependences, e.g.:
-#
-# Do all stuff in one step
-# libstuff.dll.a: $(OBJECTS) stuff.def
-# stuff.def: $(OBJECTS)
-#
-# Steps separated, pre-provided .def, link with user32
-#
-# DLL_LDLIBS=-luser32
-# stuff.dll: $(OBJECTS)
-# libstuff.dll.a: $(OBJECTS)
-
-
-DLLWRAP=dllwrap
-DLLTOOL=dlltool
-
-DLL_SUFFIX=dll
-
-.SUFFIXES: .o .$(DLL_SUFFIX)
-
-_%.def: %.o
- $(DLLTOOL) --export-all --output-def $@ $^
-
-%.$(DLL_SUFFIX): %.o
- $(DLLWRAP) --dllname $(notdir $@) --driver-name $(CC) --def $*.def -o $@ $(filter %.o,$^) $(DLL_LDFLAGS) $(DLL_LDLIBS)
-
-lib%.$(DLL_SUFFIX).a:%.def
- $(DLLTOOL) --dllname $(notdir $*.dll) --def $< --output-lib $@
-
-# End
diff --git a/ext/pcre/pcrelib/doc/Tech.Notes b/ext/pcre/pcrelib/doc/Tech.Notes
deleted file mode 100644
index 7b96e5b60e..0000000000
--- a/ext/pcre/pcrelib/doc/Tech.Notes
+++ /dev/null
@@ -1,243 +0,0 @@
-Technical Notes about PCRE
---------------------------
-
-Many years ago I implemented some regular expression functions to an algorithm
-suggested by Martin Richards. These were not Unix-like in form, and were quite
-restricted in what they could do by comparison with Perl. The interesting part
-about the algorithm was that the amount of space required to hold the compiled
-form of an expression was known in advance. The code to apply an expression did
-not operate by backtracking, as the Henry Spencer and Perl code does, but
-instead checked all possibilities simultaneously by keeping a list of current
-states and checking all of them as it advanced through the subject string. (In
-the terminology of Jeffrey Friedl's book, it was a "DFA algorithm".) When the
-pattern was all used up, all remaining states were possible matches, and the
-one matching the longest subset of the subject string was chosen. This did not
-necessarily maximize the individual wild portions of the pattern, as is
-expected in Unix and Perl-style regular expressions.
-
-By contrast, the code originally written by Henry Spencer and subsequently
-heavily modified for Perl actually compiles the expression twice: once in a
-dummy mode in order to find out how much store will be needed, and then for
-real. The execution function operates by backtracking and maximizing (or,
-optionally, minimizing in Perl) the amount of the subject that matches
-individual wild portions of the pattern. This is an "NFA algorithm" in Friedl's
-terminology.
-
-For the set of functions that forms PCRE (which are unrelated to those
-mentioned above), I tried at first to invent an algorithm that used an amount
-of store bounded by a multiple of the number of characters in the pattern, to
-save on compiling time. However, because of the greater complexity in Perl
-regular expressions, I couldn't do this. In any case, a first pass through the
-pattern is needed, in order to find internal flag settings like (?i) at top
-level. So PCRE works by running a very degenerate first pass to calculate a
-maximum store size, and then a second pass to do the real compile - which may
-use a bit less than the predicted amount of store. The idea is that this is
-going to turn out faster because the first pass is degenerate and the second
-pass can just store stuff straight into the vector. It does make the compiling
-functions bigger, of course, but they have got quite big anyway to handle all
-the Perl stuff.
-
-The compiled form of a pattern is a vector of bytes, containing items of
-variable length. The first byte in an item is an opcode, and the length of the
-item is either implicit in the opcode or contained in the data bytes which
-follow it. A list of all the opcodes follows:
-
-Opcodes with no following data
-------------------------------
-
-These items are all just one byte long
-
- OP_END end of pattern
- OP_ANY match any character
- OP_SOD match start of data: \A
- OP_CIRC ^ (start of data, or after \n in multiline)
- OP_NOT_WORD_BOUNDARY \W
- OP_WORD_BOUNDARY \w
- OP_NOT_DIGIT \D
- OP_DIGIT \d
- OP_NOT_WHITESPACE \S
- OP_WHITESPACE \s
- OP_NOT_WORDCHAR \W
- OP_WORDCHAR \w
- OP_EODN match end of data or \n at end: \Z
- OP_EOD match end of data: \z
- OP_DOLL $ (end of data, or before \n in multiline)
- OP_RECURSE match the pattern recursively
-
-
-Repeating single characters
----------------------------
-
-The common repeats (*, +, ?) when applied to a single character appear as
-two-byte items using the following opcodes:
-
- OP_STAR
- OP_MINSTAR
- OP_PLUS
- OP_MINPLUS
- OP_QUERY
- OP_MINQUERY
-
-Those with "MIN" in their name are the minimizing versions. Each is followed by
-the character that is to be repeated. Other repeats make use of
-
- OP_UPTO
- OP_MINUPTO
- OP_EXACT
-
-which are followed by a two-byte count (most significant first) and the
-repeated character. OP_UPTO matches from 0 to the given number. A repeat with a
-non-zero minimum and a fixed maximum is coded as an OP_EXACT followed by an
-OP_UPTO (or OP_MINUPTO).
-
-
-Repeating character types
--------------------------
-
-Repeats of things like \d are done exactly as for single characters, except
-that instead of a character, the opcode for the type is stored in the data
-byte. The opcodes are:
-
- OP_TYPESTAR
- OP_TYPEMINSTAR
- OP_TYPEPLUS
- OP_TYPEMINPLUS
- OP_TYPEQUERY
- OP_TYPEMINQUERY
- OP_TYPEUPTO
- OP_TYPEMINUPTO
- OP_TYPEEXACT
-
-
-Matching a character string
----------------------------
-
-The OP_CHARS opcode is followed by a one-byte count and then that number of
-characters. If there are more than 255 characters in sequence, successive
-instances of OP_CHARS are used.
-
-
-Character classes
------------------
-
-OP_CLASS is used for a character class, provided there are at least two
-characters in the class. If there is only one character, OP_CHARS is used for a
-positive class, and OP_NOT for a negative one (that is, for something like
-[^a]). Another set of repeating opcodes (OP_NOTSTAR etc.) are used for a
-repeated, negated, single-character class. The normal ones (OP_STAR etc.) are
-used for a repeated positive single-character class.
-
-OP_CLASS is followed by a 32-byte bit map containing a 1 bit for every
-character that is acceptable. The bits are counted from the least significant
-end of each byte.
-
-
-Back references
----------------
-
-OP_REF is followed by a single byte containing the reference number.
-
-
-Repeating character classes and back references
------------------------------------------------
-
-Single-character classes are handled specially (see above). This applies to
-OP_CLASS and OP_REF. In both cases, the repeat information follows the base
-item. The matching code looks at the following opcode to see if it is one of
-
- OP_CRSTAR
- OP_CRMINSTAR
- OP_CRPLUS
- OP_CRMINPLUS
- OP_CRQUERY
- OP_CRMINQUERY
- OP_CRRANGE
- OP_CRMINRANGE
-
-All but the last two are just single-byte items. The others are followed by
-four bytes of data, comprising the minimum and maximum repeat counts.
-
-
-Brackets and alternation
-------------------------
-
-A pair of non-capturing (round) brackets is wrapped round each expression at
-compile time, so alternation always happens in the context of brackets.
-Non-capturing brackets use the opcode OP_BRA, while capturing brackets use
-OP_BRA+1, OP_BRA+2, etc. [Note for North Americans: "bracket" to some English
-speakers, including myself, can be round, square, curly, or pointy. Hence this
-usage.]
-
-A bracket opcode is followed by two bytes which give the offset to the next
-alternative OP_ALT or, if there aren't any branches, to the matching KET
-opcode. Each OP_ALT is followed by two bytes giving the offset to the next one,
-or to the KET opcode.
-
-OP_KET is used for subpatterns that do not repeat indefinitely, while
-OP_KETRMIN and OP_KETRMAX are used for indefinite repetitions, minimally or
-maximally respectively. All three are followed by two bytes giving (as a
-positive number) the offset back to the matching BRA opcode.
-
-If a subpattern is quantified such that it is permitted to match zero times, it
-is preceded by one of OP_BRAZERO or OP_BRAMINZERO. These are single-byte
-opcodes which tell the matcher that skipping this subpattern entirely is a
-valid branch.
-
-A subpattern with an indefinite maximum repetition is replicated in the
-compiled data its minimum number of times (or once with a BRAZERO if the
-minimum is zero), with the final copy terminating with a KETRMIN or KETRMAX as
-appropriate.
-
-A subpattern with a bounded maximum repetition is replicated in a nested
-fashion up to the maximum number of times, with BRAZERO or BRAMINZERO before
-each replication after the minimum, so that, for example, (abc){2,5} is
-compiled as (abc)(abc)((abc)((abc)(abc)?)?)?. The 200-bracket limit does not
-apply to these internally generated brackets.
-
-
-Assertions
-----------
-
-Forward assertions are just like other subpatterns, but starting with one of
-the opcodes OP_ASSERT or OP_ASSERT_NOT. Backward assertions use the opcodes
-OP_ASSERTBACK and OP_ASSERTBACK_NOT, and the first opcode inside the assertion
-is OP_REVERSE, followed by a two byte count of the number of characters to move
-back the pointer in the subject string. When operating in UTF-8 mode, the count
-is a character count rather than a byte count. A separate count is present in
-each alternative of a lookbehind assertion, allowing them to have different
-fixed lengths.
-
-
-Once-only subpatterns
----------------------
-
-These are also just like other subpatterns, but they start with the opcode
-OP_ONCE.
-
-
-Conditional subpatterns
------------------------
-
-These are like other subpatterns, but they start with the opcode OP_COND. If
-the condition is a back reference, this is stored at the start of the
-subpattern using the opcode OP_CREF followed by one byte containing the
-reference number. Otherwise, a conditional subpattern will always start with
-one of the assertions.
-
-
-Changing options
-----------------
-
-If any of the /i, /m, or /s options are changed within a parenthesized group,
-an OP_OPT opcode is compiled, followed by one byte containing the new settings
-of these flags. If there are several alternatives in a group, there is an
-occurrence of OP_OPT at the start of all those following the first options
-change, to set appropriate options for the start of the alternative.
-Immediately after the end of the group there is another such item to reset the
-flags to their previous values. Other changes of flag within the pattern can be
-handled entirely at compile time, and so do not cause anything to be put into
-the compiled data.
-
-
-Philip Hazel
-August 2000
diff --git a/ext/pcre/pcrelib/doc/pcre.3 b/ext/pcre/pcrelib/doc/pcre.3
deleted file mode 100644
index fc204453c7..0000000000
--- a/ext/pcre/pcrelib/doc/pcre.3
+++ /dev/null
@@ -1,1810 +0,0 @@
-.TH PCRE 3
-.SH NAME
-pcre - Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B #include <pcre.h>
-.PP
-.SM
-.br
-.B pcre *pcre_compile(const char *\fIpattern\fR, int \fIoptions\fR,
-.ti +5n
-.B const char **\fIerrptr\fR, int *\fIerroffset\fR,
-.ti +5n
-.B const unsigned char *\fItableptr\fR);
-.PP
-.br
-.B pcre_extra *pcre_study(const pcre *\fIcode\fR, int \fIoptions\fR,
-.ti +5n
-.B const char **\fIerrptr\fR);
-.PP
-.br
-.B int pcre_exec(const pcre *\fIcode\fR, "const pcre_extra *\fIextra\fR,"
-.ti +5n
-.B "const char *\fIsubject\fR," int \fIlength\fR, int \fIstartoffset\fR,
-.ti +5n
-.B int \fIoptions\fR, int *\fIovector\fR, int \fIovecsize\fR);
-.PP
-.br
-.B int pcre_copy_substring(const char *\fIsubject\fR, int *\fIovector\fR,
-.ti +5n
-.B int \fIstringcount\fR, int \fIstringnumber\fR, char *\fIbuffer\fR,
-.ti +5n
-.B int \fIbuffersize\fR);
-.PP
-.br
-.B int pcre_get_substring(const char *\fIsubject\fR, int *\fIovector\fR,
-.ti +5n
-.B int \fIstringcount\fR, int \fIstringnumber\fR,
-.ti +5n
-.B const char **\fIstringptr\fR);
-.PP
-.br
-.B int pcre_get_substring_list(const char *\fIsubject\fR,
-.ti +5n
-.B int *\fIovector\fR, int \fIstringcount\fR, "const char ***\fIlistptr\fR);"
-.PP
-.br
-.B void pcre_free_substring(const char *\fIstringptr\fR);
-.PP
-.br
-.B void pcre_free_substring_list(const char **\fIstringptr\fR);
-.PP
-.br
-.B const unsigned char *pcre_maketables(void);
-.PP
-.br
-.B int pcre_fullinfo(const pcre *\fIcode\fR, "const pcre_extra *\fIextra\fR,"
-.ti +5n
-.B int \fIwhat\fR, void *\fIwhere\fR);
-.PP
-.br
-.B int pcre_info(const pcre *\fIcode\fR, int *\fIoptptr\fR, int
-.B *\fIfirstcharptr\fR);
-.PP
-.br
-.B char *pcre_version(void);
-.PP
-.br
-.B void *(*pcre_malloc)(size_t);
-.PP
-.br
-.B void (*pcre_free)(void *);
-
-
-
-.SH DESCRIPTION
-The PCRE library is a set of functions that implement regular expression
-pattern matching using the same syntax and semantics as Perl 5, with just a few
-differences (see below). The current implementation corresponds to Perl 5.005,
-with some additional features from later versions. This includes some
-experimental, incomplete support for UTF-8 encoded strings. Details of exactly
-what is and what is not supported are given below.
-
-PCRE has its own native API, which is described in this document. There is also
-a set of wrapper functions that correspond to the POSIX regular expression API.
-These are described in the \fBpcreposix\fR documentation.
-
-The native API function prototypes are defined in the header file \fBpcre.h\fR,
-and on Unix systems the library itself is called \fBlibpcre.a\fR, so can be
-accessed by adding \fB-lpcre\fR to the command for linking an application which
-calls it. The header file defines the macros PCRE_MAJOR and PCRE_MINOR to
-contain the major and minor release numbers for the library. Applications can
-use these to include support for different releases.
-
-The functions \fBpcre_compile()\fR, \fBpcre_study()\fR, and \fBpcre_exec()\fR
-are used for compiling and matching regular expressions.
-
-The functions \fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
-\fBpcre_get_substring_list()\fR are convenience functions for extracting
-captured substrings from a matched subject string; \fBpcre_free_substring()\fR
-and \fBpcre_free_substring_list()\fR are also provided, to free the memory used
-for extracted strings.
-
-The function \fBpcre_maketables()\fR is used (optionally) to build a set of
-character tables in the current locale for passing to \fBpcre_compile()\fR.
-
-The function \fBpcre_fullinfo()\fR is used to find out information about a
-compiled pattern; \fBpcre_info()\fR is an obsolete version which returns only
-some of the available information, but is retained for backwards compatibility.
-The function \fBpcre_version()\fR returns a pointer to a string containing the
-version of PCRE and its date of release.
-
-The global variables \fBpcre_malloc\fR and \fBpcre_free\fR initially contain
-the entry points of the standard \fBmalloc()\fR and \fBfree()\fR functions
-respectively. PCRE calls the memory management functions via these variables,
-so a calling program can replace them if it wishes to intercept the calls. This
-should be done before calling any PCRE functions.
-
-
-.SH MULTI-THREADING
-The PCRE functions can be used in multi-threading applications, with the
-proviso that the memory management functions pointed to by \fBpcre_malloc\fR
-and \fBpcre_free\fR are shared by all threads.
-
-The compiled form of a regular expression is not altered during matching, so
-the same compiled pattern can safely be used by several threads at once.
-
-
-.SH COMPILING A PATTERN
-The function \fBpcre_compile()\fR is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument \fIpattern\fR. A pointer to a single block of memory
-that is obtained via \fBpcre_malloc\fR is returned. This contains the
-compiled code and related data. The \fBpcre\fR type is defined for this for
-convenience, but in fact \fBpcre\fR is just a typedef for \fBvoid\fR, since the
-contents of the block are not externally defined. It is up to the caller to
-free the memory when it is no longer required.
-.PP
-The size of a compiled pattern is roughly proportional to the length of the
-pattern string, except that each character class (other than those containing
-just a single character, negated or not) requires 33 bytes, and repeat
-quantifiers with a minimum greater than one or a bounded maximum cause the
-relevant portions of the compiled pattern to be replicated.
-.PP
-The \fIoptions\fR argument contains independent bits that affect the
-compilation. It should be zero if no options are required. Some of the options,
-in particular, those that are compatible with Perl, can also be set and unset
-from within the pattern (see the detailed description of regular expressions
-below). For these options, the contents of the \fIoptions\fR argument specifies
-their initial settings at the start of compilation and execution. The
-PCRE_ANCHORED option can be set at the time of matching as well as at compile
-time.
-.PP
-If \fIerrptr\fR is NULL, \fBpcre_compile()\fR returns NULL immediately.
-Otherwise, if compilation of a pattern fails, \fBpcre_compile()\fR returns
-NULL, and sets the variable pointed to by \fIerrptr\fR to point to a textual
-error message. The offset from the start of the pattern to the character where
-the error was discovered is placed in the variable pointed to by
-\fIerroffset\fR, which must not be NULL. If it is, an immediate error is given.
-.PP
-If the final argument, \fItableptr\fR, is NULL, PCRE uses a default set of
-character tables which are built when it is compiled, using the default C
-locale. Otherwise, \fItableptr\fR must be the result of a call to
-\fBpcre_maketables()\fR. See the section on locale support below.
-.PP
-The following option bits are defined in the header file:
-
- PCRE_ANCHORED
-
-If this bit is set, the pattern is forced to be "anchored", that is, it is
-constrained to match only at the start of the string which is being searched
-(the "subject string"). This effect can also be achieved by appropriate
-constructs in the pattern itself, which is the only way to do it in Perl.
-
- PCRE_CASELESS
-
-If this bit is set, letters in the pattern match both upper and lower case
-letters. It is equivalent to Perl's /i option.
-
- PCRE_DOLLAR_ENDONLY
-
-If this bit is set, a dollar metacharacter in the pattern matches only at the
-end of the subject string. Without this option, a dollar also matches
-immediately before the final character if it is a newline (but not before any
-other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
-set. There is no equivalent to this option in Perl.
-
- PCRE_DOTALL
-
-If this bit is set, a dot metacharater in the pattern matches all characters,
-including newlines. Without it, newlines are excluded. This option is
-equivalent to Perl's /s option. A negative class such as [^a] always matches a
-newline character, independent of the setting of this option.
-
- PCRE_EXTENDED
-
-If this bit is set, whitespace data characters in the pattern are totally
-ignored except when escaped or inside a character class, and characters between
-an unescaped # outside a character class and the next newline character,
-inclusive, are also ignored. This is equivalent to Perl's /x option, and makes
-it possible to include comments inside complicated patterns. Note, however,
-that this applies only to data characters. Whitespace characters may never
-appear within special character sequences in a pattern, for example within the
-sequence (?( which introduces a conditional subpattern.
-
- PCRE_EXTRA
-
-This option was invented in order to turn on additional functionality of PCRE
-that is incompatible with Perl, but it is currently of very little use. When
-set, any backslash in a pattern that is followed by a letter that has no
-special meaning causes an error, thus reserving these combinations for future
-expansion. By default, as in Perl, a backslash followed by a letter with no
-special meaning is treated as a literal. There are at present no other features
-controlled by this option. It can also be set by a (?X) option setting within a
-pattern.
-
- PCRE_MULTILINE
-
-By default, PCRE treats the subject string as consisting of a single "line" of
-characters (even if it actually contains several newlines). The "start of line"
-metacharacter (^) matches only at the start of the string, while the "end of
-line" metacharacter ($) matches only at the end of the string, or before a
-terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as
-Perl.
-
-When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs
-match immediately following or immediately before any newline in the subject
-string, respectively, as well as at the very start and end. This is equivalent
-to Perl's /m option. If there are no "\\n" characters in a subject string, or
-no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no
-effect.
-
- PCRE_UNGREEDY
-
-This option inverts the "greediness" of the quantifiers so that they are not
-greedy by default, but become greedy if followed by "?". It is not compatible
-with Perl. It can also be set by a (?U) option setting within the pattern.
-
- PCRE_UTF8
-
-This option causes PCRE to regard both the pattern and the subject as strings
-of UTF-8 characters instead of just byte strings. However, it is available only
-if PCRE has been built to include UTF-8 support. If not, the use of this option
-provokes an error. Support for UTF-8 is new, experimental, and incomplete.
-Details of exactly what it entails are given below.
-
-
-.SH STUDYING A PATTERN
-When a pattern is going to be used several times, it is worth spending more
-time analyzing it in order to speed up the time taken for matching. The
-function \fBpcre_study()\fR takes a pointer to a compiled pattern as its first
-argument, and returns a pointer to a \fBpcre_extra\fR block (another \fBvoid\fR
-typedef) containing additional information about the pattern; this can be
-passed to \fBpcre_exec()\fR. If no additional information is available, NULL
-is returned.
-
-The second argument contains option bits. At present, no options are defined
-for \fBpcre_study()\fR, and this argument should always be zero.
-
-The third argument for \fBpcre_study()\fR is a pointer to an error message. If
-studying succeeds (even if no data is returned), the variable it points to is
-set to NULL. Otherwise it points to a textual error message.
-
-At present, studying a pattern is useful only for non-anchored patterns that do
-not have a single fixed starting character. A bitmap of possible starting
-characters is created.
-
-
-.SH LOCALE SUPPORT
-PCRE handles caseless matching, and determines whether characters are letters,
-digits, or whatever, by reference to a set of tables. The library contains a
-default set of tables which is created in the default C locale when PCRE is
-compiled. This is used when the final argument of \fBpcre_compile()\fR is NULL,
-and is sufficient for many applications.
-
-An alternative set of tables can, however, be supplied. Such tables are built
-by calling the \fBpcre_maketables()\fR function, which has no arguments, in the
-relevant locale. The result can then be passed to \fBpcre_compile()\fR as often
-as necessary. For example, to build and use tables that are appropriate for the
-French locale (where accented characters with codes greater than 128 are
-treated as letters), the following code could be used:
-
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-
-The tables are built in memory that is obtained via \fBpcre_malloc\fR. The
-pointer that is passed to \fBpcre_compile\fR is saved with the compiled
-pattern, and the same tables are used via this pointer by \fBpcre_study()\fR
-and \fBpcre_exec()\fR. Thus for any single pattern, compilation, studying and
-matching all happen in the same locale, but different patterns can be compiled
-in different locales. It is the caller's responsibility to ensure that the
-memory containing the tables remains available for as long as it is needed.
-
-
-.SH INFORMATION ABOUT A PATTERN
-The \fBpcre_fullinfo()\fR function returns information about a compiled
-pattern. It replaces the obsolete \fBpcre_info()\fR function, which is
-nevertheless retained for backwards compability (and is documented below).
-
-The first argument for \fBpcre_fullinfo()\fR is a pointer to the compiled
-pattern. The second argument is the result of \fBpcre_study()\fR, or NULL if
-the pattern was not studied. The third argument specifies which piece of
-information is required, while the fourth argument is a pointer to a variable
-to receive the data. The yield of the function is zero for success, or one of
-the following negative numbers:
-
- PCRE_ERROR_NULL the argument \fIcode\fR was NULL
- the argument \fIwhere\fR was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of \fIwhat\fR was invalid
-
-The possible values for the third argument are defined in \fBpcre.h\fR, and are
-as follows:
-
- PCRE_INFO_OPTIONS
-
-Return a copy of the options with which the pattern was compiled. The fourth
-argument should point to au \fBunsigned long int\fR variable. These option bits
-are those specified in the call to \fBpcre_compile()\fR, modified by any
-top-level option settings within the pattern itself, and with the PCRE_ANCHORED
-bit forcibly set if the form of the pattern implies that it can match only at
-the start of a subject string.
-
- PCRE_INFO_SIZE
-
-Return the size of the compiled pattern, that is, the value that was passed as
-the argument to \fBpcre_malloc()\fR when PCRE was getting memory in which to
-place the compiled data. The fourth argument should point to a \fBsize_t\fR
-variable.
-
- PCRE_INFO_CAPTURECOUNT
-
-Return the number of capturing subpatterns in the pattern. The fourth argument
-should point to an \fbint\fR variable.
-
- PCRE_INFO_BACKREFMAX
-
-Return the number of the highest back reference in the pattern. The fourth
-argument should point to an \fBint\fR variable. Zero is returned if there are
-no back references.
-
- PCRE_INFO_FIRSTCHAR
-
-Return information about the first character of any matched string, for a
-non-anchored pattern. If there is a fixed first character, e.g. from a pattern
-such as (cat|cow|coyote), it is returned in the integer pointed to by
-\fIwhere\fR. Otherwise, if either
-
-(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
-starts with "^", or
-
-(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not set
-(if it were set, the pattern would be anchored),
-
--1 is returned, indicating that the pattern matches only at the start of a
-subject string or after any "\\n" within the string. Otherwise -2 is returned.
-For anchored patterns, -2 is returned.
-
- PCRE_INFO_FIRSTTABLE
-
-If the pattern was studied, and this resulted in the construction of a 256-bit
-table indicating a fixed set of characters for the first character in any
-matching string, a pointer to the table is returned. Otherwise NULL is
-returned. The fourth argument should point to an \fBunsigned char *\fR
-variable.
-
- PCRE_INFO_LASTLITERAL
-
-For a non-anchored pattern, return the value of the rightmost literal character
-which must exist in any matched string, other than at its start. The fourth
-argument should point to an \fBint\fR variable. If there is no such character,
-or if the pattern is anchored, -1 is returned. For example, for the pattern
-/a\\d+z\\d+/ the returned value is 'z'.
-
-The \fBpcre_info()\fR function is now obsolete because its interface is too
-restrictive to return all the available data about a compiled pattern. New
-programs should use \fBpcre_fullinfo()\fR instead. The yield of
-\fBpcre_info()\fR is the number of capturing subpatterns, or one of the
-following negative numbers:
-
- PCRE_ERROR_NULL the argument \fIcode\fR was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
-
-If the \fIoptptr\fR argument is not NULL, a copy of the options with which the
-pattern was compiled is placed in the integer it points to (see
-PCRE_INFO_OPTIONS above).
-
-If the pattern is not anchored and the \fIfirstcharptr\fR argument is not NULL,
-it is used to pass back information about the first character of any matched
-string (see PCRE_INFO_FIRSTCHAR above).
-
-
-.SH MATCHING A PATTERN
-The function \fBpcre_exec()\fR is called to match a subject string against a
-pre-compiled pattern, which is passed in the \fIcode\fR argument. If the
-pattern has been studied, the result of the study should be passed in the
-\fIextra\fR argument. Otherwise this must be NULL.
-
-The PCRE_ANCHORED option can be passed in the \fIoptions\fR argument, whose
-unused bits must be zero. However, if a pattern was compiled with
-PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
-cannot be made unachored at matching time.
-
-There are also three further options that can be set only at matching time:
-
- PCRE_NOTBOL
-
-The first character of the string is not the beginning of a line, so the
-circumflex metacharacter should not match before it. Setting this without
-PCRE_MULTILINE (at compile time) causes circumflex never to match.
-
- PCRE_NOTEOL
-
-The end of the string is not the end of a line, so the dollar metacharacter
-should not match it nor (except in multiline mode) a newline immediately before
-it. Setting this without PCRE_MULTILINE (at compile time) causes dollar never
-to match.
-
- PCRE_NOTEMPTY
-
-An empty string is not considered to be a valid match if this option is set. If
-there are alternatives in the pattern, they are tried. If all the alternatives
-match the empty string, the entire match fails. For example, if the pattern
-
- a?b?
-
-is applied to a string not beginning with "a" or "b", it matches the empty
-string at the start of the subject. With PCRE_NOTEMPTY set, this match is not
-valid, so PCRE searches further into the string for occurrences of "a" or "b".
-
-Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a special case
-of a pattern match of the empty string within its \fBsplit()\fR function, and
-when using the /g modifier. It is possible to emulate Perl's behaviour after
-matching a null string by first trying the match again at the same offset with
-PCRE_NOTEMPTY set, and then if that fails by advancing the starting offset (see
-below) and trying an ordinary match again.
-
-The subject string is passed as a pointer in \fIsubject\fR, a length in
-\fIlength\fR, and a starting offset in \fIstartoffset\fR. Unlike the pattern
-string, it may contain binary zero characters. When the starting offset is
-zero, the search for a match starts at the beginning of the subject, and this
-is by far the most common case.
-
-A non-zero starting offset is useful when searching for another match in the
-same subject by calling \fBpcre_exec()\fR again after a previous success.
-Setting \fIstartoffset\fR differs from just passing over a shortened string and
-setting PCRE_NOTBOL in the case of a pattern that begins with any kind of
-lookbehind. For example, consider the pattern
-
- \\Biss\\B
-
-which finds occurrences of "iss" in the middle of words. (\\B matches only if
-the current position in the subject is not a word boundary.) When applied to
-the string "Mississipi" the first call to \fBpcre_exec()\fR finds the first
-occurrence. If \fBpcre_exec()\fR is called again with just the remainder of the
-subject, namely "issipi", it does not match, because \\B is always false at the
-start of the subject, which is deemed to be a word boundary. However, if
-\fBpcre_exec()\fR is passed the entire string again, but with \fIstartoffset\fR
-set to 4, it finds the second occurrence of "iss" because it is able to look
-behind the starting point to discover that it is preceded by a letter.
-
-If a non-zero starting offset is passed when the pattern is anchored, one
-attempt to match at the given offset is tried. This can only succeed if the
-pattern does not require the match to be at the start of the subject.
-
-In general, a pattern matches a certain portion of the subject, and in
-addition, further substrings from the subject may be picked out by parts of the
-pattern. Following the usage in Jeffrey Friedl's book, this is called
-"capturing" in what follows, and the phrase "capturing subpattern" is used for
-a fragment of a pattern that picks out a substring. PCRE supports several other
-kinds of parenthesized subpattern that do not cause substrings to be captured.
-
-Captured substrings are returned to the caller via a vector of integer offsets
-whose address is passed in \fIovector\fR. The number of elements in the vector
-is passed in \fIovecsize\fR. The first two-thirds of the vector is used to pass
-back captured substrings, each substring using a pair of integers. The
-remaining third of the vector is used as workspace by \fBpcre_exec()\fR while
-matching capturing subpatterns, and is not available for passing back
-information. The length passed in \fIovecsize\fR should always be a multiple of
-three. If it is not, it is rounded down.
-
-When a match has been successful, information about captured substrings is
-returned in pairs of integers, starting at the beginning of \fIovector\fR, and
-continuing up to two-thirds of its length at the most. The first element of a
-pair is set to the offset of the first character in a substring, and the second
-is set to the offset of the first character after the end of a substring. The
-first pair, \fIovector[0]\fR and \fIovector[1]\fR, identify the portion of the
-subject string matched by the entire pattern. The next pair is used for the
-first capturing subpattern, and so on. The value returned by \fBpcre_exec()\fR
-is the number of pairs that have been set. If there are no capturing
-subpatterns, the return value from a successful match is 1, indicating that
-just the first pair of offsets has been set.
-
-Some convenience functions are provided for extracting the captured substrings
-as separate strings. These are described in the following section.
-
-It is possible for an capturing subpattern number \fIn+1\fR to match some
-part of the subject when subpattern \fIn\fR has not been used at all. For
-example, if the string "abc" is matched against the pattern (a|(z))(bc)
-subpatterns 1 and 3 are matched, but 2 is not. When this happens, both offset
-values corresponding to the unused subpattern are set to -1.
-
-If a capturing subpattern is matched repeatedly, it is the last portion of the
-string that it matched that gets returned.
-
-If the vector is too small to hold all the captured substrings, it is used as
-far as possible (up to two-thirds of its length), and the function returns a
-value of zero. In particular, if the substring offsets are not of interest,
-\fBpcre_exec()\fR may be called with \fIovector\fR passed as NULL and
-\fIovecsize\fR as zero. However, if the pattern contains back references and
-the \fIovector\fR isn't big enough to remember the related substrings, PCRE has
-to get additional memory for use during matching. Thus it is usually advisable
-to supply an \fIovector\fR.
-
-Note that \fBpcre_info()\fR can be used to find out how many capturing
-subpatterns there are in a compiled pattern. The smallest size for
-\fIovector\fR that will allow for \fIn\fR captured substrings in addition to
-the offsets of the substring matched by the whole pattern is (\fIn\fR+1)*3.
-
-If \fBpcre_exec()\fR fails, it returns a negative number. The following are
-defined in the header file:
-
- PCRE_ERROR_NOMATCH (-1)
-
-The subject string did not match the pattern.
-
- PCRE_ERROR_NULL (-2)
-
-Either \fIcode\fR or \fIsubject\fR was passed as NULL, or \fIovector\fR was
-NULL and \fIovecsize\fR was not zero.
-
- PCRE_ERROR_BADOPTION (-3)
-
-An unrecognized bit was set in the \fIoptions\fR argument.
-
- PCRE_ERROR_BADMAGIC (-4)
-
-PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch
-the case when it is passed a junk pointer. This is the error it gives when the
-magic number isn't present.
-
- PCRE_ERROR_UNKNOWN_NODE (-5)
-
-While running the pattern match, an unknown item was encountered in the
-compiled pattern. This error could be caused by a bug in PCRE or by overwriting
-of the compiled pattern.
-
- PCRE_ERROR_NOMEMORY (-6)
-
-If a pattern contains back references, but the \fIovector\fR that is passed to
-\fBpcre_exec()\fR is not big enough to remember the referenced substrings, PCRE
-gets a block of memory at the start of matching to use for this purpose. If the
-call via \fBpcre_malloc()\fR fails, this error is given. The memory is freed at
-the end of matching.
-
-
-.SH EXTRACTING CAPTURED SUBSTRINGS
-Captured substrings can be accessed directly by using the offsets returned by
-\fBpcre_exec()\fR in \fIovector\fR. For convenience, the functions
-\fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
-\fBpcre_get_substring_list()\fR are provided for extracting captured substrings
-as new, separate, zero-terminated strings. A substring that contains a binary
-zero is correctly extracted and has a further zero added on the end, but the
-result does not, of course, function as a C string.
-
-The first three arguments are the same for all three functions: \fIsubject\fR
-is the subject string which has just been successfully matched, \fIovector\fR
-is a pointer to the vector of integer offsets that was passed to
-\fBpcre_exec()\fR, and \fIstringcount\fR is the number of substrings that
-were captured by the match, including the substring that matched the entire
-regular expression. This is the value returned by \fBpcre_exec\fR if it
-is greater than zero. If \fBpcre_exec()\fR returned zero, indicating that it
-ran out of space in \fIovector\fR, the value passed as \fIstringcount\fR should
-be the size of the vector divided by three.
-
-The functions \fBpcre_copy_substring()\fR and \fBpcre_get_substring()\fR
-extract a single substring, whose number is given as \fIstringnumber\fR. A
-value of zero extracts the substring that matched the entire pattern, while
-higher values extract the captured substrings. For \fBpcre_copy_substring()\fR,
-the string is placed in \fIbuffer\fR, whose length is given by
-\fIbuffersize\fR, while for \fBpcre_get_substring()\fR a new block of memory is
-obtained via \fBpcre_malloc\fR, and its address is returned via
-\fIstringptr\fR. The yield of the function is the length of the string, not
-including the terminating zero, or one of
-
- PCRE_ERROR_NOMEMORY (-6)
-
-The buffer was too small for \fBpcre_copy_substring()\fR, or the attempt to get
-memory failed for \fBpcre_get_substring()\fR.
-
- PCRE_ERROR_NOSUBSTRING (-7)
-
-There is no substring whose number is \fIstringnumber\fR.
-
-The \fBpcre_get_substring_list()\fR function extracts all available substrings
-and builds a list of pointers to them. All this is done in a single block of
-memory which is obtained via \fBpcre_malloc\fR. The address of the memory block
-is returned via \fIlistptr\fR, which is also the start of the list of string
-pointers. The end of the list is marked by a NULL pointer. The yield of the
-function is zero if all went well, or
-
- PCRE_ERROR_NOMEMORY (-6)
-
-if the attempt to get the memory block failed.
-
-When any of these functions encounter a substring that is unset, which can
-happen when capturing subpattern number \fIn+1\fR matches some part of the
-subject, but subpattern \fIn\fR has not been used at all, they return an empty
-string. This can be distinguished from a genuine zero-length substring by
-inspecting the appropriate offset in \fIovector\fR, which is negative for unset
-substrings.
-
-The two convenience functions \fBpcre_free_substring()\fR and
-\fBpcre_free_substring_list()\fR can be used to free the memory returned by
-a previous call of \fBpcre_get_substring()\fR or
-\fBpcre_get_substring_list()\fR, respectively. They do nothing more than call
-the function pointed to by \fBpcre_free\fR, which of course could be called
-directly from a C program. However, PCRE is used in some situations where it is
-linked via a special interface to another programming language which cannot use
-\fBpcre_free\fR directly; it is for these cases that the functions are
-provided.
-
-
-.SH LIMITATIONS
-There are some size limitations in PCRE but it is hoped that they will never in
-practice be relevant.
-The maximum length of a compiled pattern is 65539 (sic) bytes.
-All values in repeating quantifiers must be less than 65536.
-The maximum number of capturing subpatterns is 99.
-The maximum number of all parenthesized subpatterns, including capturing
-subpatterns, assertions, and other types of subpattern, is 200.
-
-The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
-
-
-.SH DIFFERENCES FROM PERL
-The differences described here are with respect to Perl 5.005.
-
-1. By default, a whitespace character is any character that the C library
-function \fBisspace()\fR recognizes, though it is possible to compile PCRE with
-alternative character type tables. Normally \fBisspace()\fR matches space,
-formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5
-no longer includes vertical tab in its set of whitespace characters. The \\v
-escape that was in the Perl documentation for a long time was never in fact
-recognized. However, the character itself was treated as whitespace at least
-up to 5.002. In 5.004 and 5.005 it does not match \\s.
-
-2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits
-them, but they do not mean what you might think. For example, (?!a){3} does
-not assert that the next three characters are not "a". It just asserts that the
-next character is not "a" three times.
-
-3. Capturing subpatterns that occur inside negative lookahead assertions are
-counted, but their entries in the offsets vector are never set. Perl sets its
-numerical variables from any such patterns that are matched before the
-assertion fails to match something (thereby succeeding), but only if the
-negative lookahead assertion contains just one branch.
-
-4. Though binary zero characters are supported in the subject string, they are
-not allowed in a pattern string because it is passed as a normal C string,
-terminated by zero. The escape sequence "\\0" can be used in the pattern to
-represent a binary zero.
-
-5. The following Perl escape sequences are not supported: \\l, \\u, \\L, \\U,
-\\E, \\Q. In fact these are implemented by Perl's general string-handling and
-are not part of its pattern matching engine.
-
-6. The Perl \\G assertion is not supported as it is not relevant to single
-pattern matches.
-
-7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-constructions. However, there is some experimental support for recursive
-patterns using the non-Perl item (?R).
-
-8. There are at the time of writing some oddities in Perl 5.005_02 concerned
-with the settings of captured strings when part of a pattern is repeated. For
-example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
-"b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if
-the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-
-In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the
-future Perl changes to a consistent state that is different, PCRE may change to
-follow.
-
-9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern
-/^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not.
-However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-
-10. PCRE provides some extensions to the Perl regular expression facilities:
-
-(a) Although lookbehind assertions must match fixed length strings, each
-alternative branch of a lookbehind assertion can match a different length of
-string. Perl 5.005 requires them all to have the same length.
-
-(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-
-character matches only at the very end of the string.
-
-(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
-meaning is faulted.
-
-(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
-inverted, that is, by default they are not greedy, but if followed by a
-question mark they are.
-
-(e) PCRE_ANCHORED can be used to force a pattern to be tried only at the start
-of the subject.
-
-(f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options for
-\fBpcre_exec()\fR have no Perl equivalents.
-
-(g) The (?R) construct allows for recursive pattern matching (Perl 5.6 can do
-this using the (?p{code}) construct, which PCRE cannot of course support.)
-
-
-.SH REGULAR EXPRESSION DETAILS
-The syntax and semantics of the regular expressions supported by PCRE are
-described below. Regular expressions are also described in the Perl
-documentation and in a number of other books, some of which have copious
-examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
-O'Reilly (ISBN 1-56592-257), covers them in great detail.
-
-The description here is intended as reference documentation. The basic
-operation of PCRE is on strings of bytes. However, there is the beginnings of
-some support for UTF-8 character strings. To use this support you must
-configure PCRE to include it, and then call \fBpcre_compile()\fR with the
-PCRE_UTF8 option. How this affects the pattern matching is described in the
-final section of this document.
-
-A regular expression is a pattern that is matched against a subject string from
-left to right. Most characters stand for themselves in a pattern, and match the
-corresponding characters in the subject. As a trivial example, the pattern
-
- The quick brown fox
-
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
-\fImeta-characters\fR, which do not stand for themselves but instead are
-interpreted in some special way.
-
-There are two different sets of meta-characters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized in square brackets. Outside square brackets, the meta-characters are
-as follows:
-
- \\ general escape character with several uses
- ^ assert start of subject (or line, in multiline mode)
- $ assert end of subject (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- { start min/max quantifier
-
-Part of a pattern that is in square brackets is called a "character class". In
-a character class the only meta-characters are:
-
- \\ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- ] terminates the character class
-
-The following sections describe the use of each of the meta-characters.
-
-
-.SH BACKSLASH
-The backslash character has several uses. Firstly, if it is followed by a
-non-alphameric character, it takes away any special meaning that character may
-have. This use of backslash as an escape character applies both inside and
-outside character classes.
-
-For example, if you want to match a "*" character, you write "\\*" in the
-pattern. This applies whether or not the following character would otherwise be
-interpreted as a meta-character, so it is always safe to precede a
-non-alphameric with "\\" to specify that it stands for itself. In particular,
-if you want to match a backslash, you write "\\\\".
-
-If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the
-pattern (other than in a character class) and characters between a "#" outside
-a character class and the next newline character are ignored. An escaping
-backslash can be used to include a whitespace or "#" character as part of the
-pattern.
-
-A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:
-
- \\a alarm, that is, the BEL character (hex 07)
- \\cx "control-x", where x is any character
- \\e escape (hex 1B)
- \\f formfeed (hex 0C)
- \\n newline (hex 0A)
- \\r carriage return (hex 0D)
- \\t tab (hex 09)
- \\xhh character with hex code hh
- \\ddd character with octal code ddd, or backreference
-
-The precise effect of "\\cx" is as follows: if "x" is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus "\\cz" becomes hex 1A, but "\\c{" becomes hex 3B, while "\\c;" becomes hex
-7B.
-
-After "\\x", up to two hexadecimal digits are read (letters can be in upper or
-lower case).
-
-After "\\0" up to two further octal digits are read. In both cases, if there
-are fewer than two digits, just those that are present are used. Thus the
-sequence "\\0\\x\\07" specifies two binary zeros followed by a BEL character.
-Make sure you supply two digits after the initial zero if the character that
-follows is itself an octal digit.
-
-The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a \fIback reference\fR. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.
-
-Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and generates a single byte from the least
-significant 8 bits of the value. Any subsequent digits stand for themselves.
-For example:
-
- \\040 is another way of writing a space
- \\40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \\7 is always a back reference
- \\11 might be a back reference, or another way of
- writing a tab
- \\011 is always a tab
- \\0113 is a tab followed by the character "3"
- \\113 is the character with octal code 113 (since there
- can be no more than 99 back references)
- \\377 is a byte consisting entirely of 1 bits
- \\81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-
-Note that octal values of 100 or greater must not be introduced by a leading
-zero, because no more than three octal digits are ever read.
-
-All the sequences that define a single byte value can be used both inside and
-outside character classes. In addition, inside a character class, the sequence
-"\\b" is interpreted as the backspace character (hex 08). Outside a character
-class it has a different meaning (see below).
-
-The third use of backslash is for specifying generic character types:
-
- \\d any decimal digit
- \\D any character that is not a decimal digit
- \\s any whitespace character
- \\S any character that is not a whitespace character
- \\w any "word" character
- \\W any "non-word" character
-
-Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.
-
-A "word" character is any letter or digit or the underscore character, that is,
-any character which can be part of a Perl "word". The definition of letters and
-digits is controlled by PCRE's character tables, and may vary if locale-
-specific matching is taking place (see "Locale support" above). For example, in
-the "fr" (French) locale, some character codes greater than 128 are used for
-accented letters, and these are matched by \\w.
-
-These character type sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
-there is no character to match.
-
-The fourth use of backslash is for certain simple assertions. An assertion
-specifies a condition that has to be met at a particular point in a match,
-without consuming any characters from the subject string. The use of
-subpatterns for more complicated assertions is described below. The backslashed
-assertions are
-
- \\b word boundary
- \\B not a word boundary
- \\A start of subject (independent of multiline mode)
- \\Z end of subject or newline at end (independent of multiline mode)
- \\z end of subject (independent of multiline mode)
-
-These assertions may not appear in character classes (but note that "\\b" has a
-different meaning, namely the backspace character, inside a character class).
-
-A word boundary is a position in the subject string where the current character
-and the previous character do not both match \\w or \\W (i.e. one matches
-\\w and the other matches \\W), or the start or end of the string if the
-first or last character matches \\w, respectively.
-
-The \\A, \\Z, and \\z assertions differ from the traditional circumflex and
-dollar (described below) in that they only ever match at the very start and end
-of the subject string, whatever options are set. They are not affected by the
-PCRE_NOTBOL or PCRE_NOTEOL options. If the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero, \\A can never match. The difference between \\Z
-and \\z is that \\Z matches before a newline that is the last character of the
-string as well as at the end of the string, whereas \\z matches only at the
-end.
-
-
-.SH CIRCUMFLEX AND DOLLAR
-Outside a character class, in the default matching mode, the circumflex
-character is an assertion which is true only if the current matching point is
-at the start of the subject string. If the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero, circumflex can never match. Inside a character
-class, circumflex has an entirely different meaning (see below).
-
-Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)
-
-A dollar character is an assertion which is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-character that is the last character in the string (by default). Dollar need
-not be the last character of the pattern if a number of alternatives are
-involved, but it should be the last item in any branch in which it appears.
-Dollar has no special meaning in a character class.
-
-The meaning of dollar can be changed so that it matches only at the very end of
-the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching
-time. This does not affect the \\Z assertion.
-
-The meanings of the circumflex and dollar characters are changed if the
-PCRE_MULTILINE option is set. When this is the case, they match immediately
-after and immediately before an internal "\\n" character, respectively, in
-addition to matching at the start and end of the subject string. For example,
-the pattern /^abc$/ matches the subject string "def\\nabc" in multiline mode,
-but not otherwise. Consequently, patterns that are anchored in single line mode
-because all branches start with "^" are not anchored in multiline mode, and a
-match for circumflex is possible when the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
-PCRE_MULTILINE is set.
-
-Note that the sequences \\A, \\Z, and \\z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\\A is it always anchored, whether PCRE_MULTILINE is set or not.
-
-
-.SH FULL STOP (PERIOD, DOT)
-Outside a character class, a dot in the pattern matches any one character in
-the subject, including a non-printing character, but not (by default) newline.
-If the PCRE_DOTALL option is set, dots match newlines as well. The handling of
-dot is entirely independent of the handling of circumflex and dollar, the only
-relationship being that they both involve newline characters. Dot has no
-special meaning in a character class.
-
-
-.SH SQUARE BRACKETS
-An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special. If a
-closing square bracket is required as a member of the class, it should be the
-first data character in the class (after an initial circumflex, if present) or
-escaped with a backslash.
-
-A character class matches a single character in the subject; the character must
-be in the set of characters defined by the class, unless the first character in
-the class is a circumflex, in which case the subject character must not be in
-the set defined by the class. If a circumflex is actually required as a member
-of the class, ensure it is not the first character, or escape it with a
-backslash.
-
-For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters which
-are in the class by enumerating those that are not. It is not an assertion: it
-still consumes a character from the subject string, and fails if the current
-pointer is at the end of the string.
-
-When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-
-The newline character is never treated in any special way in character classes,
-whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
-such as [^a] will always match a newline.
-
-The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.
-
-It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\\]46] is interpreted as a single class containing a
-range followed by two separate characters. The octal or hexadecimal
-representation of "]" can also be used to end a range.
-
-Ranges operate in ASCII collating sequence. They can also be used for
-characters specified numerically, for example [\\000-\\037]. If a range that
-includes letters is used when caseless matching is set, it matches the letters
-in either case. For example, [W-c] is equivalent to [][\\^_`wxyzabc], matched
-caselessly, and if character tables for the "fr" locale are in use,
-[\\xc8-\\xcb] matches accented E characters in both cases.
-
-The character types \\d, \\D, \\s, \\S, \\w, and \\W may also appear in a
-character class, and add the characters that they match to the class. For
-example, [\\dABCDEF] matches any hexadecimal digit. A circumflex can
-conveniently be used with the upper case character types to specify a more
-restricted set of characters than the matching lower case type. For example,
-the class [^\\W_] matches any letter or digit, but not underscore.
-
-All non-alphameric characters other than \\, -, ^ (at the start) and the
-terminating ] are non-special in character classes, but it does no harm if they
-are escaped.
-
-
-.SH POSIX CHARACTER CLASSES
-Perl 5.6 (not yet released at the time of writing) is going to support the
-POSIX notation for character classes, which uses names enclosed by [: and :]
-within the enclosing square brackets. PCRE supports this notation. For example,
-
- [01[:alpha:]%]
-
-matches "0", "1", any alphabetic character, or "%". The supported class names
-are
-
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- cntrl control characters
- digit decimal digits (same as \\d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (same as \\s)
- upper upper case letters
- word "word" characters (same as \\w)
- xdigit hexadecimal digits
-
-The names "ascii" and "word" are Perl extensions. Another Perl extension is
-negation, which is indicated by a ^ character after the colon. For example,
-
- [12[:^digit:]]
-
-matches "1", "2", or any non-digit. PCRE (and Perl) also recogize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.
-
-
-.SH VERTICAL BAR
-Vertical bar characters are used to separate alternative patterns. For example,
-the pattern
-
- gilbert|sullivan
-
-matches either "gilbert" or "sullivan". Any number of alternatives may appear,
-and an empty alternative is permitted (matching the empty string).
-The matching process tries each alternative in turn, from left to right,
-and the first one that succeeds is used. If the alternatives are within a
-subpattern (defined below), "succeeds" means matching the rest of the main
-pattern as well as the alternative in the subpattern.
-
-
-.SH INTERNAL OPTION SETTING
-The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED
-can be changed from within the pattern by a sequence of Perl option letters
-enclosed between "(?" and ")". The option letters are
-
- i for PCRE_CASELESS
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-
-For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets PCRE_CASELESS and
-PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.
-
-The scope of these option changes depends on where in the pattern the setting
-occurs. For settings that are outside any subpattern (defined below), the
-effect is the same as if the options were set or unset at the start of
-matching. The following patterns all behave in exactly the same way:
-
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-
-which in turn is the same as compiling the pattern abc with PCRE_CASELESS set.
-In other words, such "top level" settings apply to the whole pattern (unless
-there are other changes inside subpatterns). If there is more than one setting
-of the same option at top level, the rightmost setting is used.
-
-If an option change occurs inside a subpattern, the effect is different. This
-is a change of behaviour in Perl 5.005. An option change inside a subpattern
-affects only that part of the subpattern that follows it, so
-
- (a(?i)b)c
-
-matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used).
-By this means, options can be made to have different settings in different
-parts of the pattern. Any changes made in one alternative do carry on
-into subsequent branches within the same subpattern. For example,
-
- (a(?i)b|c)
-
-matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.
-
-The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the
-same way as the Perl-compatible options by using the characters U and X
-respectively. The (?X) flag setting is special in that it must always occur
-earlier in the pattern than any of the additional features it turns on, even
-when it is at top level. It is best put at the start.
-
-
-.SH SUBPATTERNS
-Subpatterns are delimited by parentheses (round brackets), which can be nested.
-Marking part of a pattern as a subpattern does two things:
-
-1. It localizes a set of alternatives. For example, the pattern
-
- cat(aract|erpillar|)
-
-matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or the empty string.
-
-2. It sets up the subpattern as a capturing subpattern (as defined above).
-When the whole pattern matches, that portion of the subject string that matched
-the subpattern is passed back to the caller via the \fIovector\fR argument of
-\fBpcre_exec()\fR. Opening parentheses are counted from left to right (starting
-from 1) to obtain the numbers of the capturing subpatterns.
-
-For example, if the string "the red king" is matched against the pattern
-
- the ((red|white) (king|queen))
-
-the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3.
-
-The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by "?:", the
-subpattern does not do any capturing, and is not counted when computing the
-number of any subsequent capturing subpatterns. For example, if the string "the
-white queen" is matched against the pattern
-
- the ((?:red|white) (king|queen))
-
-the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of captured substrings is 99, and the maximum number of
-all subpatterns, both capturing and non-capturing, is 200.
-
-As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns
-
- (?i:saturday|sunday)
- (?:(?i)saturday|sunday)
-
-match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".
-
-
-.SH REPETITION
-Repetition is specified by quantifiers, which can follow any of the following
-items:
-
- a single character, possibly escaped
- the . metacharacter
- a character class
- a back reference (see next section)
- a parenthesized subpattern (unless it is an assertion - see below)
-
-The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:
-
- z{2,4}
-
-matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus
-
- [aeiou]{3,}
-
-matches at least 3 successive vowels, but may match many more, while
-
- \\d{8}
-
-matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.
-
-The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.
-
-For convenience (and historical compatibility) the three most common
-quantifiers have single-character abbreviations:
-
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-
-It is possible to construct infinite loops by following a subpattern that can
-match no characters with a quantifier that has no upper limit, for example:
-
- (a?)*
-
-Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.
-
-By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between the
-sequences /* and */ and within the sequence, individual * and / characters may
-appear. An attempt to match C comments by applying the pattern
-
- /\\*.*\\*/
-
-to the string
-
- /* first command */ not comment /* second comment */
-
-fails, because it matches the entire string owing to the greediness of the .*
-item.
-
-However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern
-
- /\\*.*?\\*/
-
-does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in
-
- \\d??\\d
-
-which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.
-
-If the PCRE_UNGREEDY option is set (an option which is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.
-
-When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more store is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.
-
-If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent
-to Perl's /s) is set, thus allowing the . to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE treats such a pattern as
-though it were preceded by \\A. In cases where it is known that the subject
-string contains no newlines, it is worth setting PCRE_DOTALL when the pattern
-begins with .* in order to obtain this optimization, or alternatively using ^
-to indicate anchoring explicitly.
-
-When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after
-
- (tweedle[dume]{3}\\s*)+
-
-has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after
-
- /(a|(b))+/
-
-matches "aba" the value of the second captured substring is "b".
-
-
-.SH BACK REFERENCES
-Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(i.e. to its left) in the pattern, provided there have been that many previous
-capturing left parentheses.
-
-However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. See the section entitled "Backslash" above for further
-details of the handling of digits following a backslash.
-
-A back reference matches whatever actually matched the capturing subpattern in
-the current subject string, rather than anything matching the subpattern
-itself. So the pattern
-
- (sens|respons)e and \\1ibility
-
-matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,
-
- ((?i)rah)\\s+\\1
-
-matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.
-
-There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern
-
- (a|(bc))\\2
-
-always fails if it starts to match "a" rather than "bc". Because there may be
-up to 99 back references, all digits following the backslash are taken
-as part of a potential back reference number. If the pattern continues with a
-digit character, some delimiter must be used to terminate the back reference.
-If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty
-comment can be used.
-
-A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern
-
- (a|b\\1)+
-
-matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.
-
-
-.SH ASSERTIONS
-An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \\b, \\B, \\A, \\Z, \\z, ^ and $ are described above. More
-complicated assertions are coded as subpatterns. There are two kinds: those
-that look ahead of the current position in the subject string, and those that
-look behind it.
-
-An assertion subpattern is matched in the normal way, except that it does not
-cause the current matching position to be changed. Lookahead assertions start
-with (?= for positive assertions and (?! for negative assertions. For example,
-
- \\w+(?=;)
-
-matches a word followed by a semicolon, but does not include the semicolon in
-the match, and
-
- foo(?!bar)
-
-matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern
-
- (?!foo)bar
-
-does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve this effect.
-
-Lookbehind assertions start with (?<= for positive assertions and (?<! for
-negative assertions. For example,
-
- (?<!foo)bar
-
-does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several alternatives, they do not
-all have to have the same fixed length. Thus
-
- (?<=bullock|donkey)
-
-is permitted, but
-
- (?<!dogs?|cats?)
-
-causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl 5.005, which requires all branches to match the
-same length of string. An assertion such as
-
- (?<=ab(c|de))
-
-is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:
-
- (?<=abc|abde)
-
-The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed width and then try to
-match. If there are insufficient characters before the current position, the
-match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns
-can be particularly useful for matching at the ends of strings; an example is
-given at the end of the section on once-only subpatterns.
-
-Several assertions (of any sort) may occur in succession. For example,
-
- (?<=\\d{3})(?<!999)foo
-
-matches "foo" preceded by three digits that are not "999". Notice that each of
-the assertions is applied independently at the same point in the subject
-string. First there is a check that the previous three characters are all
-digits, and then there is a check that the same three characters are not "999".
-This pattern does \fInot\fR match "foo" preceded by six characters, the first
-of which are digits and the last three of which are not "999". For example, it
-doesn't match "123abcfoo". A pattern to do that is
-
- (?<=\\d{3}...)(?<!999)foo
-
-This time the first assertion looks at the preceding six characters, checking
-that the first three are digits, and then the second assertion checks that the
-preceding three characters are not "999".
-
-Assertions can be nested in any combination. For example,
-
- (?<=(?<!foo)bar)baz
-
-matches an occurrence of "baz" that is preceded by "bar" which in turn is not
-preceded by "foo", while
-
- (?<=\\d{3}(?!999)...)foo
-
-is another pattern which matches "foo" preceded by three digits and any three
-characters that are not "999".
-
-Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.
-
-Assertions count towards the maximum of 200 parenthesized subpatterns.
-
-
-.SH ONCE-ONLY SUBPATTERNS
-With both maximizing and minimizing repetition, failure of what follows
-normally causes the repeated item to be re-evaluated to see if a different
-number of repeats allows the rest of the pattern to match. Sometimes it is
-useful to prevent this, either to change the nature of the match, or to cause
-it fail earlier than it otherwise might, when the author of the pattern knows
-there is no point in carrying on.
-
-Consider, for example, the pattern \\d+foo when applied to the subject line
-
- 123456bar
-
-After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \\d+
-item, and then with 4, and so on, before ultimately failing. Once-only
-subpatterns provide the means for specifying that once a portion of the pattern
-has matched, it is not to be re-evaluated in this way, so the matcher would
-give up immediately on failing to match "foo" the first time. The notation is
-another kind of special parenthesis, starting with (?> as in this example:
-
- (?>\\d+)bar
-
-This kind of parenthesis "locks up" the part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.
-
-An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.
-
-Once-only subpatterns are not capturing subpatterns. Simple cases such as the
-above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \\d+ and \\d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?>\\d+) can only match an entire sequence of digits.
-
-This construction can of course contain arbitrarily complicated subpatterns,
-and it can be nested.
-
-Once-only subpatterns can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as
-
- abcd$
-
-when applied to a long string which does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as
-
- ^.*abcd$
-
-the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as
-
- ^(?>.*)(?<=abcd)
-
-there can be no backtracking for the .* item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.
-
-When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of a once-only subpattern is
-the only way to avoid some failing matches taking a very long time indeed.
-The pattern
-
- (\\D+|<\\d+>)*[!?]
-
-matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in <>, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to
-
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-it takes a long time before reporting failure. This is because the string can
-be divided between the two repeats in a large number of ways, and all have to
-be tried. (The example used [!?] rather than a single character at the end,
-because both PCRE and Perl have an optimization that allows for fast failure
-when a single character is used. They remember the last single character that
-is required for a match, and fail early if it is not present in the string.)
-If the pattern is changed to
-
- ((?>\\D+)|<\\d+>)*[!?]
-
-sequences of non-digits cannot be broken, and failure happens quickly.
-
-
-.SH CONDITIONAL SUBPATTERNS
-It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are
-
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-
-If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.
-
-There are two kinds of condition. If the text between the parentheses consists
-of a sequence of digits, the condition is satisfied if the capturing subpattern
-of that number has previously matched. The number must be greater than zero.
-Consider the following pattern, which contains non-significant white space to
-make it more readable (assume the PCRE_EXTENDED option) and to divide it into
-three parts for ease of discussion:
-
- ( \\( )? [^()]+ (?(1) \\) )
-
-The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.
-
-If the condition is not a sequence of digits, it must be an assertion. This may
-be a positive or negative lookahead or lookbehind assertion. Consider this
-pattern, again containing non-significant white space, and with the two
-alternatives on the second line:
-
- (?(?=[^a-z]*[a-z])
- \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} )
-
-The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
-
-
-.SH COMMENTS
-The sequence (?# marks the start of a comment which continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.
-
-If the PCRE_EXTENDED option is set, an unescaped # character outside a
-character class introduces a comment that continues up to the next newline
-character in the pattern.
-
-
-.SH RECURSIVE PATTERNS
-Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth. Perl 5.6 has provided an
-experimental facility that allows regular expressions to recurse (amongst other
-things). It does this by interpolating Perl code in the expression at run time,
-and the code can refer to the expression itself. A Perl pattern to solve the
-parentheses problem can be created like this:
-
- $re = qr{\\( (?: (?>[^()]+) | (?p{$re}) )* \\)}x;
-
-The (?p{...}) item interpolates Perl code at run time, and in this case refers
-recursively to the pattern in which it appears. Obviously, PCRE cannot support
-the interpolation of Perl code. Instead, the special item (?R) is provided for
-the specific case of recursion. This PCRE pattern solves the parentheses
-problem (assume the PCRE_EXTENDED option is set so that white space is
-ignored):
-
- \\( ( (?>[^()]+) | (?R) )* \\)
-
-First it matches an opening parenthesis. Then it matches any number of
-substrings which can either be a sequence of non-parentheses, or a recursive
-match of the pattern itself (i.e. a correctly parenthesized substring). Finally
-there is a closing parenthesis.
-
-This particular example pattern contains nested unlimited repeats, and so the
-use of a once-only subpattern for matching strings of non-parentheses is
-important when applying the pattern to strings that do not match. For example,
-when it is applied to
-
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
-it yields "no match" quickly. However, if a once-only subpattern is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.
-
-The values set for any capturing subpatterns are those from the outermost level
-of the recursion at which the subpattern value is set. If the pattern above is
-matched against
-
- (ab(cd)ef)
-
-the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving
-
- \\( ( ( (?>[^()]+) | (?R) )* ) \\)
- ^ ^
- ^ ^
-the string they capture is "ab(cd)ef", the contents of the top level
-parentheses. If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using \fBpcre_malloc\fR, freeing it via \fBpcre_free\fR afterwards. If no
-memory can be obtained, it saves data for the first 15 capturing parentheses
-only, as there is no way to give an out-of-memory error from within a
-recursion.
-
-
-.SH PERFORMANCE
-Certain items that may appear in patterns are more efficient than others. It is
-more efficient to use a character class like [aeiou] than a set of alternatives
-such as (a|e|i|o|u). In general, the simplest construction that provides the
-required behaviour is usually the most efficient. Jeffrey Friedl's book
-contains a lot of discussion about optimizing regular expressions for efficient
-performance.
-
-When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is
-implicitly anchored by PCRE, since it can match only at the start of a subject
-string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization,
-because the . metacharacter does not then match a newline, and if the subject
-string contains newlines, the pattern may match from the character immediately
-following one of them instead of from the very start. For example, the pattern
-
- (.*) second
-
-matches the subject "first\\nand second" (where \\n stands for a newline
-character) with the first captured substring being "and". In order to do this,
-PCRE has to retry the match starting after every newline in the subject.
-
-If you are using such a pattern with subject strings that do not contain
-newlines, the best performance is obtained by setting PCRE_DOTALL, or starting
-the pattern with ^.* to indicate explicit anchoring. That saves PCRE from
-having to scan along the subject looking for a newline to restart at.
-
-Beware of patterns that contain nested indefinite repeats. These can take a
-long time to run when applied to a string that does not match. Consider the
-pattern fragment
-
- (a+)*
-
-This can match "aaaa" in 33 different ways, and this number increases very
-rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
-times, and for each of those cases other than 0, the + repeats can match
-different numbers of times.) When the remainder of the pattern is such that the
-entire match is going to fail, PCRE has in principle to try every possible
-variation, and this can take an extremely long time.
-
-An optimization catches some of the more simple cases such as
-
- (a+)*b
-
-where a literal character follows. Before embarking on the standard matching
-procedure, PCRE checks that there is a "b" later in the subject string, and if
-there is not, it fails the match immediately. However, when there is no
-following literal this optimization cannot be used. You can see the difference
-by comparing the behaviour of
-
- (a+)*\\d
-
-with the pattern above. The former gives a failure almost instantly when
-applied to a whole line of "a" characters, whereas the latter takes an
-appreciable time with strings longer than about 20 characters.
-
-
-.SH UTF-8 SUPPORT
-Starting at release 3.3, PCRE has some support for character strings encoded
-in the UTF-8 format. This is incomplete, and is regarded as experimental. In
-order to use it, you must configure PCRE to include UTF-8 support in the code,
-and, in addition, you must call \fBpcre_compile()\fR with the PCRE_UTF8 option
-flag. When you do this, both the pattern and any subject strings that are
-matched against it are treated as UTF-8 strings instead of just strings of
-bytes, but only in the cases that are mentioned below.
-
-If you compile PCRE with UTF-8 support, but do not use it at run time, the
-library will be a bit bigger, but the additional run time overhead is limited
-to testing the PCRE_UTF8 flag in several places, so should not be very large.
-
-PCRE assumes that the strings it is given contain valid UTF-8 codes. It does
-not diagnose invalid UTF-8 strings. If you pass invalid UTF-8 strings to PCRE,
-the results are undefined.
-
-Running with PCRE_UTF8 set causes these changes in the way PCRE works:
-
-1. In a pattern, the escape sequence \\x{...}, where the contents of the braces
-is a string of hexadecimal digits, is interpreted as a UTF-8 character whose
-code number is the given hexadecimal number, for example: \\x{1234}. This
-inserts from one to six literal bytes into the pattern, using the UTF-8
-encoding. If a non-hexadecimal digit appears between the braces, the item is
-not recognized.
-
-2. The original hexadecimal escape sequence, \\xhh, generates a two-byte UTF-8
-character if its value is greater than 127.
-
-3. Repeat quantifiers are NOT correctly handled if they follow a multibyte
-character. For example, \\x{100}* and \\xc3+ do not work. If you want to
-repeat such characters, you must enclose them in non-capturing parentheses,
-for example (?:\\x{100}), at present.
-
-4. The dot metacharacter matches one UTF-8 character instead of a single byte.
-
-5. Unlike literal UTF-8 characters, the dot metacharacter followed by a
-repeat quantifier does operate correctly on UTF-8 characters instead of
-single bytes.
-
-4. Although the \\x{...} escape is permitted in a character class, characters
-whose values are greater than 255 cannot be included in a class.
-
-5. A class is matched against a UTF-8 character instead of just a single byte,
-but it can match only characters whose values are less than 256. Characters
-with greater values always fail to match a class.
-
-6. Repeated classes work correctly on multiple characters.
-
-7. Classes containing just a single character whose value is greater than 127
-(but less than 256), for example, [\\x80] or [^\\x{93}], do not work because
-these are optimized into single byte matches. In the first case, of course,
-the class brackets are just redundant.
-
-8. Lookbehind assertions move backwards in the subject by a fixed number of
-characters instead of a fixed number of bytes. Simple cases have been tested
-to work correctly, but there may be hidden gotchas herein.
-
-9. The character types such as \\d and \\w do not work correctly with UTF-8
-characters. They continue to test a single byte.
-
-10. Anything not explicitly mentioned here continues to work in bytes rather
-than in characters.
-
-The following UTF-8 features of Perl 5.6 are not implemented:
-
-1. The escape sequence \\C to match a single byte.
-
-2. The use of Unicode tables and properties and escapes \\p, \\P, and \\X.
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Last updated: 28 August 2000,
-.br
- the 250th anniversary of the death of J.S. Bach.
-.br
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcre.html b/ext/pcre/pcrelib/doc/pcre.html
deleted file mode 100644
index 01770975e2..0000000000
--- a/ext/pcre/pcrelib/doc/pcre.html
+++ /dev/null
@@ -1,2397 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcre specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcre specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">MULTI-THREADING</A>
-<LI><A NAME="TOC5" HREF="#SEC5">COMPILING A PATTERN</A>
-<LI><A NAME="TOC6" HREF="#SEC6">STUDYING A PATTERN</A>
-<LI><A NAME="TOC7" HREF="#SEC7">LOCALE SUPPORT</A>
-<LI><A NAME="TOC8" HREF="#SEC8">INFORMATION ABOUT A PATTERN</A>
-<LI><A NAME="TOC9" HREF="#SEC9">MATCHING A PATTERN</A>
-<LI><A NAME="TOC10" HREF="#SEC10">EXTRACTING CAPTURED SUBSTRINGS</A>
-<LI><A NAME="TOC11" HREF="#SEC11">LIMITATIONS</A>
-<LI><A NAME="TOC12" HREF="#SEC12">DIFFERENCES FROM PERL</A>
-<LI><A NAME="TOC13" HREF="#SEC13">REGULAR EXPRESSION DETAILS</A>
-<LI><A NAME="TOC14" HREF="#SEC14">BACKSLASH</A>
-<LI><A NAME="TOC15" HREF="#SEC15">CIRCUMFLEX AND DOLLAR</A>
-<LI><A NAME="TOC16" HREF="#SEC16">FULL STOP (PERIOD, DOT)</A>
-<LI><A NAME="TOC17" HREF="#SEC17">SQUARE BRACKETS</A>
-<LI><A NAME="TOC18" HREF="#SEC18">POSIX CHARACTER CLASSES</A>
-<LI><A NAME="TOC19" HREF="#SEC19">VERTICAL BAR</A>
-<LI><A NAME="TOC20" HREF="#SEC20">INTERNAL OPTION SETTING</A>
-<LI><A NAME="TOC21" HREF="#SEC21">SUBPATTERNS</A>
-<LI><A NAME="TOC22" HREF="#SEC22">REPETITION</A>
-<LI><A NAME="TOC23" HREF="#SEC23">BACK REFERENCES</A>
-<LI><A NAME="TOC24" HREF="#SEC24">ASSERTIONS</A>
-<LI><A NAME="TOC25" HREF="#SEC25">ONCE-ONLY SUBPATTERNS</A>
-<LI><A NAME="TOC26" HREF="#SEC26">CONDITIONAL SUBPATTERNS</A>
-<LI><A NAME="TOC27" HREF="#SEC27">COMMENTS</A>
-<LI><A NAME="TOC28" HREF="#SEC28">RECURSIVE PATTERNS</A>
-<LI><A NAME="TOC29" HREF="#SEC29">PERFORMANCE</A>
-<LI><A NAME="TOC30" HREF="#SEC30">UTF-8 SUPPORT</A>
-<LI><A NAME="TOC31" HREF="#SEC31">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcre - Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>#include &#60;pcre.h&#62;</B>
-</P>
-<P>
-<B>pcre *pcre_compile(const char *<I>pattern</I>, int <I>options</I>,</B>
-<B>const char **<I>errptr</I>, int *<I>erroffset</I>,</B>
-<B>const unsigned char *<I>tableptr</I>);</B>
-</P>
-<P>
-<B>pcre_extra *pcre_study(const pcre *<I>code</I>, int <I>options</I>,</B>
-<B>const char **<I>errptr</I>);</B>
-</P>
-<P>
-<B>int pcre_exec(const pcre *<I>code</I>, const pcre_extra *<I>extra</I>,</B>
-<B>const char *<I>subject</I>, int <I>length</I>, int <I>startoffset</I>,</B>
-<B>int <I>options</I>, int *<I>ovector</I>, int <I>ovecsize</I>);</B>
-</P>
-<P>
-<B>int pcre_copy_substring(const char *<I>subject</I>, int *<I>ovector</I>,</B>
-<B>int <I>stringcount</I>, int <I>stringnumber</I>, char *<I>buffer</I>,</B>
-<B>int <I>buffersize</I>);</B>
-</P>
-<P>
-<B>int pcre_get_substring(const char *<I>subject</I>, int *<I>ovector</I>,</B>
-<B>int <I>stringcount</I>, int <I>stringnumber</I>,</B>
-<B>const char **<I>stringptr</I>);</B>
-</P>
-<P>
-<B>int pcre_get_substring_list(const char *<I>subject</I>,</B>
-<B>int *<I>ovector</I>, int <I>stringcount</I>, const char ***<I>listptr</I>);</B>
-</P>
-<P>
-<B>void pcre_free_substring(const char *<I>stringptr</I>);</B>
-</P>
-<P>
-<B>void pcre_free_substring_list(const char **<I>stringptr</I>);</B>
-</P>
-<P>
-<B>const unsigned char *pcre_maketables(void);</B>
-</P>
-<P>
-<B>int pcre_fullinfo(const pcre *<I>code</I>, const pcre_extra *<I>extra</I>,</B>
-<B>int <I>what</I>, void *<I>where</I>);</B>
-</P>
-<P>
-<B>int pcre_info(const pcre *<I>code</I>, int *<I>optptr</I>, int</B>
-<B>*<I>firstcharptr</I>);</B>
-</P>
-<P>
-<B>char *pcre_version(void);</B>
-</P>
-<P>
-<B>void *(*pcre_malloc)(size_t);</B>
-</P>
-<P>
-<B>void (*pcre_free)(void *);</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-The PCRE library is a set of functions that implement regular expression
-pattern matching using the same syntax and semantics as Perl 5, with just a few
-differences (see below). The current implementation corresponds to Perl 5.005,
-with some additional features from later versions. This includes some
-experimental, incomplete support for UTF-8 encoded strings. Details of exactly
-what is and what is not supported are given below.
-</P>
-<P>
-PCRE has its own native API, which is described in this document. There is also
-a set of wrapper functions that correspond to the POSIX regular expression API.
-These are described in the <B>pcreposix</B> documentation.
-</P>
-<P>
-The native API function prototypes are defined in the header file <B>pcre.h</B>,
-and on Unix systems the library itself is called <B>libpcre.a</B>, so can be
-accessed by adding <B>-lpcre</B> to the command for linking an application which
-calls it. The header file defines the macros PCRE_MAJOR and PCRE_MINOR to
-contain the major and minor release numbers for the library. Applications can
-use these to include support for different releases.
-</P>
-<P>
-The functions <B>pcre_compile()</B>, <B>pcre_study()</B>, and <B>pcre_exec()</B>
-are used for compiling and matching regular expressions.
-</P>
-<P>
-The functions <B>pcre_copy_substring()</B>, <B>pcre_get_substring()</B>, and
-<B>pcre_get_substring_list()</B> are convenience functions for extracting
-captured substrings from a matched subject string; <B>pcre_free_substring()</B>
-and <B>pcre_free_substring_list()</B> are also provided, to free the memory used
-for extracted strings.
-</P>
-<P>
-The function <B>pcre_maketables()</B> is used (optionally) to build a set of
-character tables in the current locale for passing to <B>pcre_compile()</B>.
-</P>
-<P>
-The function <B>pcre_fullinfo()</B> is used to find out information about a
-compiled pattern; <B>pcre_info()</B> is an obsolete version which returns only
-some of the available information, but is retained for backwards compatibility.
-The function <B>pcre_version()</B> returns a pointer to a string containing the
-version of PCRE and its date of release.
-</P>
-<P>
-The global variables <B>pcre_malloc</B> and <B>pcre_free</B> initially contain
-the entry points of the standard <B>malloc()</B> and <B>free()</B> functions
-respectively. PCRE calls the memory management functions via these variables,
-so a calling program can replace them if it wishes to intercept the calls. This
-should be done before calling any PCRE functions.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">MULTI-THREADING</A>
-<P>
-The PCRE functions can be used in multi-threading applications, with the
-proviso that the memory management functions pointed to by <B>pcre_malloc</B>
-and <B>pcre_free</B> are shared by all threads.
-</P>
-<P>
-The compiled form of a regular expression is not altered during matching, so
-the same compiled pattern can safely be used by several threads at once.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">COMPILING A PATTERN</A>
-<P>
-The function <B>pcre_compile()</B> is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument <I>pattern</I>. A pointer to a single block of memory
-that is obtained via <B>pcre_malloc</B> is returned. This contains the
-compiled code and related data. The <B>pcre</B> type is defined for this for
-convenience, but in fact <B>pcre</B> is just a typedef for <B>void</B>, since the
-contents of the block are not externally defined. It is up to the caller to
-free the memory when it is no longer required.
-</P>
-<P>
-The size of a compiled pattern is roughly proportional to the length of the
-pattern string, except that each character class (other than those containing
-just a single character, negated or not) requires 33 bytes, and repeat
-quantifiers with a minimum greater than one or a bounded maximum cause the
-relevant portions of the compiled pattern to be replicated.
-</P>
-<P>
-The <I>options</I> argument contains independent bits that affect the
-compilation. It should be zero if no options are required. Some of the options,
-in particular, those that are compatible with Perl, can also be set and unset
-from within the pattern (see the detailed description of regular expressions
-below). For these options, the contents of the <I>options</I> argument specifies
-their initial settings at the start of compilation and execution. The
-PCRE_ANCHORED option can be set at the time of matching as well as at compile
-time.
-</P>
-<P>
-If <I>errptr</I> is NULL, <B>pcre_compile()</B> returns NULL immediately.
-Otherwise, if compilation of a pattern fails, <B>pcre_compile()</B> returns
-NULL, and sets the variable pointed to by <I>errptr</I> to point to a textual
-error message. The offset from the start of the pattern to the character where
-the error was discovered is placed in the variable pointed to by
-<I>erroffset</I>, which must not be NULL. If it is, an immediate error is given.
-</P>
-<P>
-If the final argument, <I>tableptr</I>, is NULL, PCRE uses a default set of
-character tables which are built when it is compiled, using the default C
-locale. Otherwise, <I>tableptr</I> must be the result of a call to
-<B>pcre_maketables()</B>. See the section on locale support below.
-</P>
-<P>
-The following option bits are defined in the header file:
-</P>
-<P>
-<PRE>
- PCRE_ANCHORED
-</PRE>
-</P>
-<P>
-If this bit is set, the pattern is forced to be "anchored", that is, it is
-constrained to match only at the start of the string which is being searched
-(the "subject string"). This effect can also be achieved by appropriate
-constructs in the pattern itself, which is the only way to do it in Perl.
-</P>
-<P>
-<PRE>
- PCRE_CASELESS
-</PRE>
-</P>
-<P>
-If this bit is set, letters in the pattern match both upper and lower case
-letters. It is equivalent to Perl's /i option.
-</P>
-<P>
-<PRE>
- PCRE_DOLLAR_ENDONLY
-</PRE>
-</P>
-<P>
-If this bit is set, a dollar metacharacter in the pattern matches only at the
-end of the subject string. Without this option, a dollar also matches
-immediately before the final character if it is a newline (but not before any
-other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
-set. There is no equivalent to this option in Perl.
-</P>
-<P>
-<PRE>
- PCRE_DOTALL
-</PRE>
-</P>
-<P>
-If this bit is set, a dot metacharater in the pattern matches all characters,
-including newlines. Without it, newlines are excluded. This option is
-equivalent to Perl's /s option. A negative class such as [^a] always matches a
-newline character, independent of the setting of this option.
-</P>
-<P>
-<PRE>
- PCRE_EXTENDED
-</PRE>
-</P>
-<P>
-If this bit is set, whitespace data characters in the pattern are totally
-ignored except when escaped or inside a character class, and characters between
-an unescaped # outside a character class and the next newline character,
-inclusive, are also ignored. This is equivalent to Perl's /x option, and makes
-it possible to include comments inside complicated patterns. Note, however,
-that this applies only to data characters. Whitespace characters may never
-appear within special character sequences in a pattern, for example within the
-sequence (?( which introduces a conditional subpattern.
-</P>
-<P>
-<PRE>
- PCRE_EXTRA
-</PRE>
-</P>
-<P>
-This option was invented in order to turn on additional functionality of PCRE
-that is incompatible with Perl, but it is currently of very little use. When
-set, any backslash in a pattern that is followed by a letter that has no
-special meaning causes an error, thus reserving these combinations for future
-expansion. By default, as in Perl, a backslash followed by a letter with no
-special meaning is treated as a literal. There are at present no other features
-controlled by this option. It can also be set by a (?X) option setting within a
-pattern.
-</P>
-<P>
-<PRE>
- PCRE_MULTILINE
-</PRE>
-</P>
-<P>
-By default, PCRE treats the subject string as consisting of a single "line" of
-characters (even if it actually contains several newlines). The "start of line"
-metacharacter (^) matches only at the start of the string, while the "end of
-line" metacharacter ($) matches only at the end of the string, or before a
-terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as
-Perl.
-</P>
-<P>
-When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs
-match immediately following or immediately before any newline in the subject
-string, respectively, as well as at the very start and end. This is equivalent
-to Perl's /m option. If there are no "\n" characters in a subject string, or
-no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no
-effect.
-</P>
-<P>
-<PRE>
- PCRE_UNGREEDY
-</PRE>
-</P>
-<P>
-This option inverts the "greediness" of the quantifiers so that they are not
-greedy by default, but become greedy if followed by "?". It is not compatible
-with Perl. It can also be set by a (?U) option setting within the pattern.
-</P>
-<P>
-<PRE>
- PCRE_UTF8
-</PRE>
-</P>
-<P>
-This option causes PCRE to regard both the pattern and the subject as strings
-of UTF-8 characters instead of just byte strings. However, it is available only
-if PCRE has been built to include UTF-8 support. If not, the use of this option
-provokes an error. Support for UTF-8 is new, experimental, and incomplete.
-Details of exactly what it entails are given below.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">STUDYING A PATTERN</A>
-<P>
-When a pattern is going to be used several times, it is worth spending more
-time analyzing it in order to speed up the time taken for matching. The
-function <B>pcre_study()</B> takes a pointer to a compiled pattern as its first
-argument, and returns a pointer to a <B>pcre_extra</B> block (another <B>void</B>
-typedef) containing additional information about the pattern; this can be
-passed to <B>pcre_exec()</B>. If no additional information is available, NULL
-is returned.
-</P>
-<P>
-The second argument contains option bits. At present, no options are defined
-for <B>pcre_study()</B>, and this argument should always be zero.
-</P>
-<P>
-The third argument for <B>pcre_study()</B> is a pointer to an error message. If
-studying succeeds (even if no data is returned), the variable it points to is
-set to NULL. Otherwise it points to a textual error message.
-</P>
-<P>
-At present, studying a pattern is useful only for non-anchored patterns that do
-not have a single fixed starting character. A bitmap of possible starting
-characters is created.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">LOCALE SUPPORT</A>
-<P>
-PCRE handles caseless matching, and determines whether characters are letters,
-digits, or whatever, by reference to a set of tables. The library contains a
-default set of tables which is created in the default C locale when PCRE is
-compiled. This is used when the final argument of <B>pcre_compile()</B> is NULL,
-and is sufficient for many applications.
-</P>
-<P>
-An alternative set of tables can, however, be supplied. Such tables are built
-by calling the <B>pcre_maketables()</B> function, which has no arguments, in the
-relevant locale. The result can then be passed to <B>pcre_compile()</B> as often
-as necessary. For example, to build and use tables that are appropriate for the
-French locale (where accented characters with codes greater than 128 are
-treated as letters), the following code could be used:
-</P>
-<P>
-<PRE>
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-</PRE>
-</P>
-<P>
-The tables are built in memory that is obtained via <B>pcre_malloc</B>. The
-pointer that is passed to <B>pcre_compile</B> is saved with the compiled
-pattern, and the same tables are used via this pointer by <B>pcre_study()</B>
-and <B>pcre_exec()</B>. Thus for any single pattern, compilation, studying and
-matching all happen in the same locale, but different patterns can be compiled
-in different locales. It is the caller's responsibility to ensure that the
-memory containing the tables remains available for as long as it is needed.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">INFORMATION ABOUT A PATTERN</A>
-<P>
-The <B>pcre_fullinfo()</B> function returns information about a compiled
-pattern. It replaces the obsolete <B>pcre_info()</B> function, which is
-nevertheless retained for backwards compability (and is documented below).
-</P>
-<P>
-The first argument for <B>pcre_fullinfo()</B> is a pointer to the compiled
-pattern. The second argument is the result of <B>pcre_study()</B>, or NULL if
-the pattern was not studied. The third argument specifies which piece of
-information is required, while the fourth argument is a pointer to a variable
-to receive the data. The yield of the function is zero for success, or one of
-the following negative numbers:
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NULL the argument <I>code</I> was NULL
- the argument <I>where</I> was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of <I>what</I> was invalid
-</PRE>
-</P>
-<P>
-The possible values for the third argument are defined in <B>pcre.h</B>, and are
-as follows:
-</P>
-<P>
-<PRE>
- PCRE_INFO_OPTIONS
-</PRE>
-</P>
-<P>
-Return a copy of the options with which the pattern was compiled. The fourth
-argument should point to au <B>unsigned long int</B> variable. These option bits
-are those specified in the call to <B>pcre_compile()</B>, modified by any
-top-level option settings within the pattern itself, and with the PCRE_ANCHORED
-bit forcibly set if the form of the pattern implies that it can match only at
-the start of a subject string.
-</P>
-<P>
-<PRE>
- PCRE_INFO_SIZE
-</PRE>
-</P>
-<P>
-Return the size of the compiled pattern, that is, the value that was passed as
-the argument to <B>pcre_malloc()</B> when PCRE was getting memory in which to
-place the compiled data. The fourth argument should point to a <B>size_t</B>
-variable.
-</P>
-<P>
-<PRE>
- PCRE_INFO_CAPTURECOUNT
-</PRE>
-</P>
-<P>
-Return the number of capturing subpatterns in the pattern. The fourth argument
-should point to an \fbint\fR variable.
-</P>
-<P>
-<PRE>
- PCRE_INFO_BACKREFMAX
-</PRE>
-</P>
-<P>
-Return the number of the highest back reference in the pattern. The fourth
-argument should point to an <B>int</B> variable. Zero is returned if there are
-no back references.
-</P>
-<P>
-<PRE>
- PCRE_INFO_FIRSTCHAR
-</PRE>
-</P>
-<P>
-Return information about the first character of any matched string, for a
-non-anchored pattern. If there is a fixed first character, e.g. from a pattern
-such as (cat|cow|coyote), it is returned in the integer pointed to by
-<I>where</I>. Otherwise, if either
-</P>
-<P>
-(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
-starts with "^", or
-</P>
-<P>
-(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not set
-(if it were set, the pattern would be anchored),
-</P>
-<P>
--1 is returned, indicating that the pattern matches only at the start of a
-subject string or after any "\n" within the string. Otherwise -2 is returned.
-For anchored patterns, -2 is returned.
-</P>
-<P>
-<PRE>
- PCRE_INFO_FIRSTTABLE
-</PRE>
-</P>
-<P>
-If the pattern was studied, and this resulted in the construction of a 256-bit
-table indicating a fixed set of characters for the first character in any
-matching string, a pointer to the table is returned. Otherwise NULL is
-returned. The fourth argument should point to an <B>unsigned char *</B>
-variable.
-</P>
-<P>
-<PRE>
- PCRE_INFO_LASTLITERAL
-</PRE>
-</P>
-<P>
-For a non-anchored pattern, return the value of the rightmost literal character
-which must exist in any matched string, other than at its start. The fourth
-argument should point to an <B>int</B> variable. If there is no such character,
-or if the pattern is anchored, -1 is returned. For example, for the pattern
-/a\d+z\d+/ the returned value is 'z'.
-</P>
-<P>
-The <B>pcre_info()</B> function is now obsolete because its interface is too
-restrictive to return all the available data about a compiled pattern. New
-programs should use <B>pcre_fullinfo()</B> instead. The yield of
-<B>pcre_info()</B> is the number of capturing subpatterns, or one of the
-following negative numbers:
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NULL the argument <I>code</I> was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
-</PRE>
-</P>
-<P>
-If the <I>optptr</I> argument is not NULL, a copy of the options with which the
-pattern was compiled is placed in the integer it points to (see
-PCRE_INFO_OPTIONS above).
-</P>
-<P>
-If the pattern is not anchored and the <I>firstcharptr</I> argument is not NULL,
-it is used to pass back information about the first character of any matched
-string (see PCRE_INFO_FIRSTCHAR above).
-</P>
-<LI><A NAME="SEC9" HREF="#TOC1">MATCHING A PATTERN</A>
-<P>
-The function <B>pcre_exec()</B> is called to match a subject string against a
-pre-compiled pattern, which is passed in the <I>code</I> argument. If the
-pattern has been studied, the result of the study should be passed in the
-<I>extra</I> argument. Otherwise this must be NULL.
-</P>
-<P>
-The PCRE_ANCHORED option can be passed in the <I>options</I> argument, whose
-unused bits must be zero. However, if a pattern was compiled with
-PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
-cannot be made unachored at matching time.
-</P>
-<P>
-There are also three further options that can be set only at matching time:
-</P>
-<P>
-<PRE>
- PCRE_NOTBOL
-</PRE>
-</P>
-<P>
-The first character of the string is not the beginning of a line, so the
-circumflex metacharacter should not match before it. Setting this without
-PCRE_MULTILINE (at compile time) causes circumflex never to match.
-</P>
-<P>
-<PRE>
- PCRE_NOTEOL
-</PRE>
-</P>
-<P>
-The end of the string is not the end of a line, so the dollar metacharacter
-should not match it nor (except in multiline mode) a newline immediately before
-it. Setting this without PCRE_MULTILINE (at compile time) causes dollar never
-to match.
-</P>
-<P>
-<PRE>
- PCRE_NOTEMPTY
-</PRE>
-</P>
-<P>
-An empty string is not considered to be a valid match if this option is set. If
-there are alternatives in the pattern, they are tried. If all the alternatives
-match the empty string, the entire match fails. For example, if the pattern
-</P>
-<P>
-<PRE>
- a?b?
-</PRE>
-</P>
-<P>
-is applied to a string not beginning with "a" or "b", it matches the empty
-string at the start of the subject. With PCRE_NOTEMPTY set, this match is not
-valid, so PCRE searches further into the string for occurrences of "a" or "b".
-</P>
-<P>
-Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a special case
-of a pattern match of the empty string within its <B>split()</B> function, and
-when using the /g modifier. It is possible to emulate Perl's behaviour after
-matching a null string by first trying the match again at the same offset with
-PCRE_NOTEMPTY set, and then if that fails by advancing the starting offset (see
-below) and trying an ordinary match again.
-</P>
-<P>
-The subject string is passed as a pointer in <I>subject</I>, a length in
-<I>length</I>, and a starting offset in <I>startoffset</I>. Unlike the pattern
-string, it may contain binary zero characters. When the starting offset is
-zero, the search for a match starts at the beginning of the subject, and this
-is by far the most common case.
-</P>
-<P>
-A non-zero starting offset is useful when searching for another match in the
-same subject by calling <B>pcre_exec()</B> again after a previous success.
-Setting <I>startoffset</I> differs from just passing over a shortened string and
-setting PCRE_NOTBOL in the case of a pattern that begins with any kind of
-lookbehind. For example, consider the pattern
-</P>
-<P>
-<PRE>
- \Biss\B
-</PRE>
-</P>
-<P>
-which finds occurrences of "iss" in the middle of words. (\B matches only if
-the current position in the subject is not a word boundary.) When applied to
-the string "Mississipi" the first call to <B>pcre_exec()</B> finds the first
-occurrence. If <B>pcre_exec()</B> is called again with just the remainder of the
-subject, namely "issipi", it does not match, because \B is always false at the
-start of the subject, which is deemed to be a word boundary. However, if
-<B>pcre_exec()</B> is passed the entire string again, but with <I>startoffset</I>
-set to 4, it finds the second occurrence of "iss" because it is able to look
-behind the starting point to discover that it is preceded by a letter.
-</P>
-<P>
-If a non-zero starting offset is passed when the pattern is anchored, one
-attempt to match at the given offset is tried. This can only succeed if the
-pattern does not require the match to be at the start of the subject.
-</P>
-<P>
-In general, a pattern matches a certain portion of the subject, and in
-addition, further substrings from the subject may be picked out by parts of the
-pattern. Following the usage in Jeffrey Friedl's book, this is called
-"capturing" in what follows, and the phrase "capturing subpattern" is used for
-a fragment of a pattern that picks out a substring. PCRE supports several other
-kinds of parenthesized subpattern that do not cause substrings to be captured.
-</P>
-<P>
-Captured substrings are returned to the caller via a vector of integer offsets
-whose address is passed in <I>ovector</I>. The number of elements in the vector
-is passed in <I>ovecsize</I>. The first two-thirds of the vector is used to pass
-back captured substrings, each substring using a pair of integers. The
-remaining third of the vector is used as workspace by <B>pcre_exec()</B> while
-matching capturing subpatterns, and is not available for passing back
-information. The length passed in <I>ovecsize</I> should always be a multiple of
-three. If it is not, it is rounded down.
-</P>
-<P>
-When a match has been successful, information about captured substrings is
-returned in pairs of integers, starting at the beginning of <I>ovector</I>, and
-continuing up to two-thirds of its length at the most. The first element of a
-pair is set to the offset of the first character in a substring, and the second
-is set to the offset of the first character after the end of a substring. The
-first pair, <I>ovector[0]</I> and <I>ovector[1]</I>, identify the portion of the
-subject string matched by the entire pattern. The next pair is used for the
-first capturing subpattern, and so on. The value returned by <B>pcre_exec()</B>
-is the number of pairs that have been set. If there are no capturing
-subpatterns, the return value from a successful match is 1, indicating that
-just the first pair of offsets has been set.
-</P>
-<P>
-Some convenience functions are provided for extracting the captured substrings
-as separate strings. These are described in the following section.
-</P>
-<P>
-It is possible for an capturing subpattern number <I>n+1</I> to match some
-part of the subject when subpattern <I>n</I> has not been used at all. For
-example, if the string "abc" is matched against the pattern (a|(z))(bc)
-subpatterns 1 and 3 are matched, but 2 is not. When this happens, both offset
-values corresponding to the unused subpattern are set to -1.
-</P>
-<P>
-If a capturing subpattern is matched repeatedly, it is the last portion of the
-string that it matched that gets returned.
-</P>
-<P>
-If the vector is too small to hold all the captured substrings, it is used as
-far as possible (up to two-thirds of its length), and the function returns a
-value of zero. In particular, if the substring offsets are not of interest,
-<B>pcre_exec()</B> may be called with <I>ovector</I> passed as NULL and
-<I>ovecsize</I> as zero. However, if the pattern contains back references and
-the <I>ovector</I> isn't big enough to remember the related substrings, PCRE has
-to get additional memory for use during matching. Thus it is usually advisable
-to supply an <I>ovector</I>.
-</P>
-<P>
-Note that <B>pcre_info()</B> can be used to find out how many capturing
-subpatterns there are in a compiled pattern. The smallest size for
-<I>ovector</I> that will allow for <I>n</I> captured substrings in addition to
-the offsets of the substring matched by the whole pattern is (<I>n</I>+1)*3.
-</P>
-<P>
-If <B>pcre_exec()</B> fails, it returns a negative number. The following are
-defined in the header file:
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMATCH (-1)
-</PRE>
-</P>
-<P>
-The subject string did not match the pattern.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NULL (-2)
-</PRE>
-</P>
-<P>
-Either <I>code</I> or <I>subject</I> was passed as NULL, or <I>ovector</I> was
-NULL and <I>ovecsize</I> was not zero.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_BADOPTION (-3)
-</PRE>
-</P>
-<P>
-An unrecognized bit was set in the <I>options</I> argument.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_BADMAGIC (-4)
-</PRE>
-</P>
-<P>
-PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch
-the case when it is passed a junk pointer. This is the error it gives when the
-magic number isn't present.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_UNKNOWN_NODE (-5)
-</PRE>
-</P>
-<P>
-While running the pattern match, an unknown item was encountered in the
-compiled pattern. This error could be caused by a bug in PCRE or by overwriting
-of the compiled pattern.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMEMORY (-6)
-</PRE>
-</P>
-<P>
-If a pattern contains back references, but the <I>ovector</I> that is passed to
-<B>pcre_exec()</B> is not big enough to remember the referenced substrings, PCRE
-gets a block of memory at the start of matching to use for this purpose. If the
-call via <B>pcre_malloc()</B> fails, this error is given. The memory is freed at
-the end of matching.
-</P>
-<LI><A NAME="SEC10" HREF="#TOC1">EXTRACTING CAPTURED SUBSTRINGS</A>
-<P>
-Captured substrings can be accessed directly by using the offsets returned by
-<B>pcre_exec()</B> in <I>ovector</I>. For convenience, the functions
-<B>pcre_copy_substring()</B>, <B>pcre_get_substring()</B>, and
-<B>pcre_get_substring_list()</B> are provided for extracting captured substrings
-as new, separate, zero-terminated strings. A substring that contains a binary
-zero is correctly extracted and has a further zero added on the end, but the
-result does not, of course, function as a C string.
-</P>
-<P>
-The first three arguments are the same for all three functions: <I>subject</I>
-is the subject string which has just been successfully matched, <I>ovector</I>
-is a pointer to the vector of integer offsets that was passed to
-<B>pcre_exec()</B>, and <I>stringcount</I> is the number of substrings that
-were captured by the match, including the substring that matched the entire
-regular expression. This is the value returned by <B>pcre_exec</B> if it
-is greater than zero. If <B>pcre_exec()</B> returned zero, indicating that it
-ran out of space in <I>ovector</I>, the value passed as <I>stringcount</I> should
-be the size of the vector divided by three.
-</P>
-<P>
-The functions <B>pcre_copy_substring()</B> and <B>pcre_get_substring()</B>
-extract a single substring, whose number is given as <I>stringnumber</I>. A
-value of zero extracts the substring that matched the entire pattern, while
-higher values extract the captured substrings. For <B>pcre_copy_substring()</B>,
-the string is placed in <I>buffer</I>, whose length is given by
-<I>buffersize</I>, while for <B>pcre_get_substring()</B> a new block of memory is
-obtained via <B>pcre_malloc</B>, and its address is returned via
-<I>stringptr</I>. The yield of the function is the length of the string, not
-including the terminating zero, or one of
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMEMORY (-6)
-</PRE>
-</P>
-<P>
-The buffer was too small for <B>pcre_copy_substring()</B>, or the attempt to get
-memory failed for <B>pcre_get_substring()</B>.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOSUBSTRING (-7)
-</PRE>
-</P>
-<P>
-There is no substring whose number is <I>stringnumber</I>.
-</P>
-<P>
-The <B>pcre_get_substring_list()</B> function extracts all available substrings
-and builds a list of pointers to them. All this is done in a single block of
-memory which is obtained via <B>pcre_malloc</B>. The address of the memory block
-is returned via <I>listptr</I>, which is also the start of the list of string
-pointers. The end of the list is marked by a NULL pointer. The yield of the
-function is zero if all went well, or
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMEMORY (-6)
-</PRE>
-</P>
-<P>
-if the attempt to get the memory block failed.
-</P>
-<P>
-When any of these functions encounter a substring that is unset, which can
-happen when capturing subpattern number <I>n+1</I> matches some part of the
-subject, but subpattern <I>n</I> has not been used at all, they return an empty
-string. This can be distinguished from a genuine zero-length substring by
-inspecting the appropriate offset in <I>ovector</I>, which is negative for unset
-substrings.
-</P>
-<P>
-The two convenience functions <B>pcre_free_substring()</B> and
-<B>pcre_free_substring_list()</B> can be used to free the memory returned by
-a previous call of <B>pcre_get_substring()</B> or
-<B>pcre_get_substring_list()</B>, respectively. They do nothing more than call
-the function pointed to by <B>pcre_free</B>, which of course could be called
-directly from a C program. However, PCRE is used in some situations where it is
-linked via a special interface to another programming language which cannot use
-<B>pcre_free</B> directly; it is for these cases that the functions are
-provided.
-</P>
-<LI><A NAME="SEC11" HREF="#TOC1">LIMITATIONS</A>
-<P>
-There are some size limitations in PCRE but it is hoped that they will never in
-practice be relevant.
-The maximum length of a compiled pattern is 65539 (sic) bytes.
-All values in repeating quantifiers must be less than 65536.
-The maximum number of capturing subpatterns is 99.
-The maximum number of all parenthesized subpatterns, including capturing
-subpatterns, assertions, and other types of subpattern, is 200.
-</P>
-<P>
-The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
-</P>
-<LI><A NAME="SEC12" HREF="#TOC1">DIFFERENCES FROM PERL</A>
-<P>
-The differences described here are with respect to Perl 5.005.
-</P>
-<P>
-1. By default, a whitespace character is any character that the C library
-function <B>isspace()</B> recognizes, though it is possible to compile PCRE with
-alternative character type tables. Normally <B>isspace()</B> matches space,
-formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5
-no longer includes vertical tab in its set of whitespace characters. The \v
-escape that was in the Perl documentation for a long time was never in fact
-recognized. However, the character itself was treated as whitespace at least
-up to 5.002. In 5.004 and 5.005 it does not match \s.
-</P>
-<P>
-2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits
-them, but they do not mean what you might think. For example, (?!a){3} does
-not assert that the next three characters are not "a". It just asserts that the
-next character is not "a" three times.
-</P>
-<P>
-3. Capturing subpatterns that occur inside negative lookahead assertions are
-counted, but their entries in the offsets vector are never set. Perl sets its
-numerical variables from any such patterns that are matched before the
-assertion fails to match something (thereby succeeding), but only if the
-negative lookahead assertion contains just one branch.
-</P>
-<P>
-4. Though binary zero characters are supported in the subject string, they are
-not allowed in a pattern string because it is passed as a normal C string,
-terminated by zero. The escape sequence "\0" can be used in the pattern to
-represent a binary zero.
-</P>
-<P>
-5. The following Perl escape sequences are not supported: \l, \u, \L, \U,
-\E, \Q. In fact these are implemented by Perl's general string-handling and
-are not part of its pattern matching engine.
-</P>
-<P>
-6. The Perl \G assertion is not supported as it is not relevant to single
-pattern matches.
-</P>
-<P>
-7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-constructions. However, there is some experimental support for recursive
-patterns using the non-Perl item (?R).
-</P>
-<P>
-8. There are at the time of writing some oddities in Perl 5.005_02 concerned
-with the settings of captured strings when part of a pattern is repeated. For
-example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
-"b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if
-the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-</P>
-<P>
-In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the
-future Perl changes to a consistent state that is different, PCRE may change to
-follow.
-</P>
-<P>
-9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern
-/^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not.
-However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-</P>
-<P>
-10. PCRE provides some extensions to the Perl regular expression facilities:
-</P>
-<P>
-(a) Although lookbehind assertions must match fixed length strings, each
-alternative branch of a lookbehind assertion can match a different length of
-string. Perl 5.005 requires them all to have the same length.
-</P>
-<P>
-(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-
-character matches only at the very end of the string.
-</P>
-<P>
-(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
-meaning is faulted.
-</P>
-<P>
-(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
-inverted, that is, by default they are not greedy, but if followed by a
-question mark they are.
-</P>
-<P>
-(e) PCRE_ANCHORED can be used to force a pattern to be tried only at the start
-of the subject.
-</P>
-<P>
-(f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options for
-<B>pcre_exec()</B> have no Perl equivalents.
-</P>
-<P>
-(g) The (?R) construct allows for recursive pattern matching (Perl 5.6 can do
-this using the (?p{code}) construct, which PCRE cannot of course support.)
-</P>
-<LI><A NAME="SEC13" HREF="#TOC1">REGULAR EXPRESSION DETAILS</A>
-<P>
-The syntax and semantics of the regular expressions supported by PCRE are
-described below. Regular expressions are also described in the Perl
-documentation and in a number of other books, some of which have copious
-examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
-O'Reilly (ISBN 1-56592-257), covers them in great detail.
-</P>
-<P>
-The description here is intended as reference documentation. The basic
-operation of PCRE is on strings of bytes. However, there is the beginnings of
-some support for UTF-8 character strings. To use this support you must
-configure PCRE to include it, and then call <B>pcre_compile()</B> with the
-PCRE_UTF8 option. How this affects the pattern matching is described in the
-final section of this document.
-</P>
-<P>
-A regular expression is a pattern that is matched against a subject string from
-left to right. Most characters stand for themselves in a pattern, and match the
-corresponding characters in the subject. As a trivial example, the pattern
-</P>
-<P>
-<PRE>
- The quick brown fox
-</PRE>
-</P>
-<P>
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
-<I>meta-characters</I>, which do not stand for themselves but instead are
-interpreted in some special way.
-</P>
-<P>
-There are two different sets of meta-characters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized in square brackets. Outside square brackets, the meta-characters are
-as follows:
-</P>
-<P>
-<PRE>
- \ general escape character with several uses
- ^ assert start of subject (or line, in multiline mode)
- $ assert end of subject (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- { start min/max quantifier
-</PRE>
-</P>
-<P>
-Part of a pattern that is in square brackets is called a "character class". In
-a character class the only meta-characters are:
-</P>
-<P>
-<PRE>
- \ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- ] terminates the character class
-</PRE>
-</P>
-<P>
-The following sections describe the use of each of the meta-characters.
-</P>
-<LI><A NAME="SEC14" HREF="#TOC1">BACKSLASH</A>
-<P>
-The backslash character has several uses. Firstly, if it is followed by a
-non-alphameric character, it takes away any special meaning that character may
-have. This use of backslash as an escape character applies both inside and
-outside character classes.
-</P>
-<P>
-For example, if you want to match a "*" character, you write "\*" in the
-pattern. This applies whether or not the following character would otherwise be
-interpreted as a meta-character, so it is always safe to precede a
-non-alphameric with "\" to specify that it stands for itself. In particular,
-if you want to match a backslash, you write "\\".
-</P>
-<P>
-If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the
-pattern (other than in a character class) and characters between a "#" outside
-a character class and the next newline character are ignored. An escaping
-backslash can be used to include a whitespace or "#" character as part of the
-pattern.
-</P>
-<P>
-A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:
-</P>
-<P>
-<PRE>
- \a alarm, that is, the BEL character (hex 07)
- \cx "control-x", where x is any character
- \e escape (hex 1B)
- \f formfeed (hex 0C)
- \n newline (hex 0A)
- \r carriage return (hex 0D)
- \t tab (hex 09)
- \xhh character with hex code hh
- \ddd character with octal code ddd, or backreference
-</PRE>
-</P>
-<P>
-The precise effect of "\cx" is as follows: if "x" is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus "\cz" becomes hex 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex
-7B.
-</P>
-<P>
-After "\x", up to two hexadecimal digits are read (letters can be in upper or
-lower case).
-</P>
-<P>
-After "\0" up to two further octal digits are read. In both cases, if there
-are fewer than two digits, just those that are present are used. Thus the
-sequence "\0\x\07" specifies two binary zeros followed by a BEL character.
-Make sure you supply two digits after the initial zero if the character that
-follows is itself an octal digit.
-</P>
-<P>
-The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a <I>back reference</I>. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.
-</P>
-<P>
-Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and generates a single byte from the least
-significant 8 bits of the value. Any subsequent digits stand for themselves.
-For example:
-</P>
-<P>
-<PRE>
- \040 is another way of writing a space
- \40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \7 is always a back reference
- \11 might be a back reference, or another way of
- writing a tab
- \011 is always a tab
- \0113 is a tab followed by the character "3"
- \113 is the character with octal code 113 (since there
- can be no more than 99 back references)
- \377 is a byte consisting entirely of 1 bits
- \81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-</PRE>
-</P>
-<P>
-Note that octal values of 100 or greater must not be introduced by a leading
-zero, because no more than three octal digits are ever read.
-</P>
-<P>
-All the sequences that define a single byte value can be used both inside and
-outside character classes. In addition, inside a character class, the sequence
-"\b" is interpreted as the backspace character (hex 08). Outside a character
-class it has a different meaning (see below).
-</P>
-<P>
-The third use of backslash is for specifying generic character types:
-</P>
-<P>
-<PRE>
- \d any decimal digit
- \D any character that is not a decimal digit
- \s any whitespace character
- \S any character that is not a whitespace character
- \w any "word" character
- \W any "non-word" character
-</PRE>
-</P>
-<P>
-Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.
-</P>
-<P>
-A "word" character is any letter or digit or the underscore character, that is,
-any character which can be part of a Perl "word". The definition of letters and
-digits is controlled by PCRE's character tables, and may vary if locale-
-specific matching is taking place (see "Locale support" above). For example, in
-the "fr" (French) locale, some character codes greater than 128 are used for
-accented letters, and these are matched by \w.
-</P>
-<P>
-These character type sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
-there is no character to match.
-</P>
-<P>
-The fourth use of backslash is for certain simple assertions. An assertion
-specifies a condition that has to be met at a particular point in a match,
-without consuming any characters from the subject string. The use of
-subpatterns for more complicated assertions is described below. The backslashed
-assertions are
-</P>
-<P>
-<PRE>
- \b word boundary
- \B not a word boundary
- \A start of subject (independent of multiline mode)
- \Z end of subject or newline at end (independent of multiline mode)
- \z end of subject (independent of multiline mode)
-</PRE>
-</P>
-<P>
-These assertions may not appear in character classes (but note that "\b" has a
-different meaning, namely the backspace character, inside a character class).
-</P>
-<P>
-A word boundary is a position in the subject string where the current character
-and the previous character do not both match \w or \W (i.e. one matches
-\w and the other matches \W), or the start or end of the string if the
-first or last character matches \w, respectively.
-</P>
-<P>
-The \A, \Z, and \z assertions differ from the traditional circumflex and
-dollar (described below) in that they only ever match at the very start and end
-of the subject string, whatever options are set. They are not affected by the
-PCRE_NOTBOL or PCRE_NOTEOL options. If the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero, \A can never match. The difference between \Z
-and \z is that \Z matches before a newline that is the last character of the
-string as well as at the end of the string, whereas \z matches only at the
-end.
-</P>
-<LI><A NAME="SEC15" HREF="#TOC1">CIRCUMFLEX AND DOLLAR</A>
-<P>
-Outside a character class, in the default matching mode, the circumflex
-character is an assertion which is true only if the current matching point is
-at the start of the subject string. If the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero, circumflex can never match. Inside a character
-class, circumflex has an entirely different meaning (see below).
-</P>
-<P>
-Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)
-</P>
-<P>
-A dollar character is an assertion which is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-character that is the last character in the string (by default). Dollar need
-not be the last character of the pattern if a number of alternatives are
-involved, but it should be the last item in any branch in which it appears.
-Dollar has no special meaning in a character class.
-</P>
-<P>
-The meaning of dollar can be changed so that it matches only at the very end of
-the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching
-time. This does not affect the \Z assertion.
-</P>
-<P>
-The meanings of the circumflex and dollar characters are changed if the
-PCRE_MULTILINE option is set. When this is the case, they match immediately
-after and immediately before an internal "\n" character, respectively, in
-addition to matching at the start and end of the subject string. For example,
-the pattern /^abc$/ matches the subject string "def\nabc" in multiline mode,
-but not otherwise. Consequently, patterns that are anchored in single line mode
-because all branches start with "^" are not anchored in multiline mode, and a
-match for circumflex is possible when the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
-PCRE_MULTILINE is set.
-</P>
-<P>
-Note that the sequences \A, \Z, and \z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\A is it always anchored, whether PCRE_MULTILINE is set or not.
-</P>
-<LI><A NAME="SEC16" HREF="#TOC1">FULL STOP (PERIOD, DOT)</A>
-<P>
-Outside a character class, a dot in the pattern matches any one character in
-the subject, including a non-printing character, but not (by default) newline.
-If the PCRE_DOTALL option is set, dots match newlines as well. The handling of
-dot is entirely independent of the handling of circumflex and dollar, the only
-relationship being that they both involve newline characters. Dot has no
-special meaning in a character class.
-</P>
-<LI><A NAME="SEC17" HREF="#TOC1">SQUARE BRACKETS</A>
-<P>
-An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special. If a
-closing square bracket is required as a member of the class, it should be the
-first data character in the class (after an initial circumflex, if present) or
-escaped with a backslash.
-</P>
-<P>
-A character class matches a single character in the subject; the character must
-be in the set of characters defined by the class, unless the first character in
-the class is a circumflex, in which case the subject character must not be in
-the set defined by the class. If a circumflex is actually required as a member
-of the class, ensure it is not the first character, or escape it with a
-backslash.
-</P>
-<P>
-For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters which
-are in the class by enumerating those that are not. It is not an assertion: it
-still consumes a character from the subject string, and fails if the current
-pointer is at the end of the string.
-</P>
-<P>
-When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-</P>
-<P>
-The newline character is never treated in any special way in character classes,
-whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
-such as [^a] will always match a newline.
-</P>
-<P>
-The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.
-</P>
-<P>
-It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\]46] is interpreted as a single class containing a
-range followed by two separate characters. The octal or hexadecimal
-representation of "]" can also be used to end a range.
-</P>
-<P>
-Ranges operate in ASCII collating sequence. They can also be used for
-characters specified numerically, for example [\000-\037]. If a range that
-includes letters is used when caseless matching is set, it matches the letters
-in either case. For example, [W-c] is equivalent to [][\^_`wxyzabc], matched
-caselessly, and if character tables for the "fr" locale are in use,
-[\xc8-\xcb] matches accented E characters in both cases.
-</P>
-<P>
-The character types \d, \D, \s, \S, \w, and \W may also appear in a
-character class, and add the characters that they match to the class. For
-example, [\dABCDEF] matches any hexadecimal digit. A circumflex can
-conveniently be used with the upper case character types to specify a more
-restricted set of characters than the matching lower case type. For example,
-the class [^\W_] matches any letter or digit, but not underscore.
-</P>
-<P>
-All non-alphameric characters other than \, -, ^ (at the start) and the
-terminating ] are non-special in character classes, but it does no harm if they
-are escaped.
-</P>
-<LI><A NAME="SEC18" HREF="#TOC1">POSIX CHARACTER CLASSES</A>
-<P>
-Perl 5.6 (not yet released at the time of writing) is going to support the
-POSIX notation for character classes, which uses names enclosed by [: and :]
-within the enclosing square brackets. PCRE supports this notation. For example,
-</P>
-<P>
-<PRE>
- [01[:alpha:]%]
-</PRE>
-</P>
-<P>
-matches "0", "1", any alphabetic character, or "%". The supported class names
-are
-</P>
-<P>
-<PRE>
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- cntrl control characters
- digit decimal digits (same as \d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (same as \s)
- upper upper case letters
- word "word" characters (same as \w)
- xdigit hexadecimal digits
-</PRE>
-</P>
-<P>
-The names "ascii" and "word" are Perl extensions. Another Perl extension is
-negation, which is indicated by a ^ character after the colon. For example,
-</P>
-<P>
-<PRE>
- [12[:^digit:]]
-</PRE>
-</P>
-<P>
-matches "1", "2", or any non-digit. PCRE (and Perl) also recogize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.
-</P>
-<LI><A NAME="SEC19" HREF="#TOC1">VERTICAL BAR</A>
-<P>
-Vertical bar characters are used to separate alternative patterns. For example,
-the pattern
-</P>
-<P>
-<PRE>
- gilbert|sullivan
-</PRE>
-</P>
-<P>
-matches either "gilbert" or "sullivan". Any number of alternatives may appear,
-and an empty alternative is permitted (matching the empty string).
-The matching process tries each alternative in turn, from left to right,
-and the first one that succeeds is used. If the alternatives are within a
-subpattern (defined below), "succeeds" means matching the rest of the main
-pattern as well as the alternative in the subpattern.
-</P>
-<LI><A NAME="SEC20" HREF="#TOC1">INTERNAL OPTION SETTING</A>
-<P>
-The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED
-can be changed from within the pattern by a sequence of Perl option letters
-enclosed between "(?" and ")". The option letters are
-</P>
-<P>
-<PRE>
- i for PCRE_CASELESS
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-</PRE>
-</P>
-<P>
-For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets PCRE_CASELESS and
-PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.
-</P>
-<P>
-The scope of these option changes depends on where in the pattern the setting
-occurs. For settings that are outside any subpattern (defined below), the
-effect is the same as if the options were set or unset at the start of
-matching. The following patterns all behave in exactly the same way:
-</P>
-<P>
-<PRE>
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-</PRE>
-</P>
-<P>
-which in turn is the same as compiling the pattern abc with PCRE_CASELESS set.
-In other words, such "top level" settings apply to the whole pattern (unless
-there are other changes inside subpatterns). If there is more than one setting
-of the same option at top level, the rightmost setting is used.
-</P>
-<P>
-If an option change occurs inside a subpattern, the effect is different. This
-is a change of behaviour in Perl 5.005. An option change inside a subpattern
-affects only that part of the subpattern that follows it, so
-</P>
-<P>
-<PRE>
- (a(?i)b)c
-</PRE>
-</P>
-<P>
-matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used).
-By this means, options can be made to have different settings in different
-parts of the pattern. Any changes made in one alternative do carry on
-into subsequent branches within the same subpattern. For example,
-</P>
-<P>
-<PRE>
- (a(?i)b|c)
-</PRE>
-</P>
-<P>
-matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.
-</P>
-<P>
-The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the
-same way as the Perl-compatible options by using the characters U and X
-respectively. The (?X) flag setting is special in that it must always occur
-earlier in the pattern than any of the additional features it turns on, even
-when it is at top level. It is best put at the start.
-</P>
-<LI><A NAME="SEC21" HREF="#TOC1">SUBPATTERNS</A>
-<P>
-Subpatterns are delimited by parentheses (round brackets), which can be nested.
-Marking part of a pattern as a subpattern does two things:
-</P>
-<P>
-1. It localizes a set of alternatives. For example, the pattern
-</P>
-<P>
-<PRE>
- cat(aract|erpillar|)
-</PRE>
-</P>
-<P>
-matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or the empty string.
-</P>
-<P>
-2. It sets up the subpattern as a capturing subpattern (as defined above).
-When the whole pattern matches, that portion of the subject string that matched
-the subpattern is passed back to the caller via the <I>ovector</I> argument of
-<B>pcre_exec()</B>. Opening parentheses are counted from left to right (starting
-from 1) to obtain the numbers of the capturing subpatterns.
-</P>
-<P>
-For example, if the string "the red king" is matched against the pattern
-</P>
-<P>
-<PRE>
- the ((red|white) (king|queen))
-</PRE>
-</P>
-<P>
-the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3.
-</P>
-<P>
-The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by "?:", the
-subpattern does not do any capturing, and is not counted when computing the
-number of any subsequent capturing subpatterns. For example, if the string "the
-white queen" is matched against the pattern
-</P>
-<P>
-<PRE>
- the ((?:red|white) (king|queen))
-</PRE>
-</P>
-<P>
-the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of captured substrings is 99, and the maximum number of
-all subpatterns, both capturing and non-capturing, is 200.
-</P>
-<P>
-As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns
-</P>
-<P>
-<PRE>
- (?i:saturday|sunday)
- (?:(?i)saturday|sunday)
-</PRE>
-</P>
-<P>
-match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".
-</P>
-<LI><A NAME="SEC22" HREF="#TOC1">REPETITION</A>
-<P>
-Repetition is specified by quantifiers, which can follow any of the following
-items:
-</P>
-<P>
-<PRE>
- a single character, possibly escaped
- the . metacharacter
- a character class
- a back reference (see next section)
- a parenthesized subpattern (unless it is an assertion - see below)
-</PRE>
-</P>
-<P>
-The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:
-</P>
-<P>
-<PRE>
- z{2,4}
-</PRE>
-</P>
-<P>
-matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus
-</P>
-<P>
-<PRE>
- [aeiou]{3,}
-</PRE>
-</P>
-<P>
-matches at least 3 successive vowels, but may match many more, while
-</P>
-<P>
-<PRE>
- \d{8}
-</PRE>
-</P>
-<P>
-matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.
-</P>
-<P>
-The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.
-</P>
-<P>
-For convenience (and historical compatibility) the three most common
-quantifiers have single-character abbreviations:
-</P>
-<P>
-<PRE>
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-</PRE>
-</P>
-<P>
-It is possible to construct infinite loops by following a subpattern that can
-match no characters with a quantifier that has no upper limit, for example:
-</P>
-<P>
-<PRE>
- (a?)*
-</PRE>
-</P>
-<P>
-Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.
-</P>
-<P>
-By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between the
-sequences /* and */ and within the sequence, individual * and / characters may
-appear. An attempt to match C comments by applying the pattern
-</P>
-<P>
-<PRE>
- /\*.*\*/
-</PRE>
-</P>
-<P>
-to the string
-</P>
-<P>
-<PRE>
- /* first command */ not comment /* second comment */
-</PRE>
-</P>
-<P>
-fails, because it matches the entire string owing to the greediness of the .*
-item.
-</P>
-<P>
-However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern
-</P>
-<P>
-<PRE>
- /\*.*?\*/
-</PRE>
-</P>
-<P>
-does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in
-</P>
-<P>
-<PRE>
- \d??\d
-</PRE>
-</P>
-<P>
-which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.
-</P>
-<P>
-If the PCRE_UNGREEDY option is set (an option which is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.
-</P>
-<P>
-When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more store is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.
-</P>
-<P>
-If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent
-to Perl's /s) is set, thus allowing the . to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE treats such a pattern as
-though it were preceded by \A. In cases where it is known that the subject
-string contains no newlines, it is worth setting PCRE_DOTALL when the pattern
-begins with .* in order to obtain this optimization, or alternatively using ^
-to indicate anchoring explicitly.
-</P>
-<P>
-When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after
-</P>
-<P>
-<PRE>
- (tweedle[dume]{3}\s*)+
-</PRE>
-</P>
-<P>
-has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after
-</P>
-<P>
-<PRE>
- /(a|(b))+/
-</PRE>
-</P>
-<P>
-matches "aba" the value of the second captured substring is "b".
-</P>
-<LI><A NAME="SEC23" HREF="#TOC1">BACK REFERENCES</A>
-<P>
-Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(i.e. to its left) in the pattern, provided there have been that many previous
-capturing left parentheses.
-</P>
-<P>
-However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. See the section entitled "Backslash" above for further
-details of the handling of digits following a backslash.
-</P>
-<P>
-A back reference matches whatever actually matched the capturing subpattern in
-the current subject string, rather than anything matching the subpattern
-itself. So the pattern
-</P>
-<P>
-<PRE>
- (sens|respons)e and \1ibility
-</PRE>
-</P>
-<P>
-matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,
-</P>
-<P>
-<PRE>
- ((?i)rah)\s+\1
-</PRE>
-</P>
-<P>
-matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.
-</P>
-<P>
-There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern
-</P>
-<P>
-<PRE>
- (a|(bc))\2
-</PRE>
-</P>
-<P>
-always fails if it starts to match "a" rather than "bc". Because there may be
-up to 99 back references, all digits following the backslash are taken
-as part of a potential back reference number. If the pattern continues with a
-digit character, some delimiter must be used to terminate the back reference.
-If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty
-comment can be used.
-</P>
-<P>
-A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern
-</P>
-<P>
-<PRE>
- (a|b\1)+
-</PRE>
-</P>
-<P>
-matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.
-</P>
-<LI><A NAME="SEC24" HREF="#TOC1">ASSERTIONS</A>
-<P>
-An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \b, \B, \A, \Z, \z, ^ and $ are described above. More
-complicated assertions are coded as subpatterns. There are two kinds: those
-that look ahead of the current position in the subject string, and those that
-look behind it.
-</P>
-<P>
-An assertion subpattern is matched in the normal way, except that it does not
-cause the current matching position to be changed. Lookahead assertions start
-with (?= for positive assertions and (?! for negative assertions. For example,
-</P>
-<P>
-<PRE>
- \w+(?=;)
-</PRE>
-</P>
-<P>
-matches a word followed by a semicolon, but does not include the semicolon in
-the match, and
-</P>
-<P>
-<PRE>
- foo(?!bar)
-</PRE>
-</P>
-<P>
-matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern
-</P>
-<P>
-<PRE>
- (?!foo)bar
-</PRE>
-</P>
-<P>
-does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve this effect.
-</P>
-<P>
-Lookbehind assertions start with (?&#60;= for positive assertions and (?&#60;! for
-negative assertions. For example,
-</P>
-<P>
-<PRE>
- (?&#60;!foo)bar
-</PRE>
-</P>
-<P>
-does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several alternatives, they do not
-all have to have the same fixed length. Thus
-</P>
-<P>
-<PRE>
- (?&#60;=bullock|donkey)
-</PRE>
-</P>
-<P>
-is permitted, but
-</P>
-<P>
-<PRE>
- (?&#60;!dogs?|cats?)
-</PRE>
-</P>
-<P>
-causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl 5.005, which requires all branches to match the
-same length of string. An assertion such as
-</P>
-<P>
-<PRE>
- (?&#60;=ab(c|de))
-</PRE>
-</P>
-<P>
-is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:
-</P>
-<P>
-<PRE>
- (?&#60;=abc|abde)
-</PRE>
-</P>
-<P>
-The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed width and then try to
-match. If there are insufficient characters before the current position, the
-match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns
-can be particularly useful for matching at the ends of strings; an example is
-given at the end of the section on once-only subpatterns.
-</P>
-<P>
-Several assertions (of any sort) may occur in succession. For example,
-</P>
-<P>
-<PRE>
- (?&#60;=\d{3})(?&#60;!999)foo
-</PRE>
-</P>
-<P>
-matches "foo" preceded by three digits that are not "999". Notice that each of
-the assertions is applied independently at the same point in the subject
-string. First there is a check that the previous three characters are all
-digits, and then there is a check that the same three characters are not "999".
-This pattern does <I>not</I> match "foo" preceded by six characters, the first
-of which are digits and the last three of which are not "999". For example, it
-doesn't match "123abcfoo". A pattern to do that is
-</P>
-<P>
-<PRE>
- (?&#60;=\d{3}...)(?&#60;!999)foo
-</PRE>
-</P>
-<P>
-This time the first assertion looks at the preceding six characters, checking
-that the first three are digits, and then the second assertion checks that the
-preceding three characters are not "999".
-</P>
-<P>
-Assertions can be nested in any combination. For example,
-</P>
-<P>
-<PRE>
- (?&#60;=(?&#60;!foo)bar)baz
-</PRE>
-</P>
-<P>
-matches an occurrence of "baz" that is preceded by "bar" which in turn is not
-preceded by "foo", while
-</P>
-<P>
-<PRE>
- (?&#60;=\d{3}(?!999)...)foo
-</PRE>
-</P>
-<P>
-is another pattern which matches "foo" preceded by three digits and any three
-characters that are not "999".
-</P>
-<P>
-Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.
-</P>
-<P>
-Assertions count towards the maximum of 200 parenthesized subpatterns.
-</P>
-<LI><A NAME="SEC25" HREF="#TOC1">ONCE-ONLY SUBPATTERNS</A>
-<P>
-With both maximizing and minimizing repetition, failure of what follows
-normally causes the repeated item to be re-evaluated to see if a different
-number of repeats allows the rest of the pattern to match. Sometimes it is
-useful to prevent this, either to change the nature of the match, or to cause
-it fail earlier than it otherwise might, when the author of the pattern knows
-there is no point in carrying on.
-</P>
-<P>
-Consider, for example, the pattern \d+foo when applied to the subject line
-</P>
-<P>
-<PRE>
- 123456bar
-</PRE>
-</P>
-<P>
-After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \d+
-item, and then with 4, and so on, before ultimately failing. Once-only
-subpatterns provide the means for specifying that once a portion of the pattern
-has matched, it is not to be re-evaluated in this way, so the matcher would
-give up immediately on failing to match "foo" the first time. The notation is
-another kind of special parenthesis, starting with (?&#62; as in this example:
-</P>
-<P>
-<PRE>
- (?&#62;\d+)bar
-</PRE>
-</P>
-<P>
-This kind of parenthesis "locks up" the part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.
-</P>
-<P>
-An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.
-</P>
-<P>
-Once-only subpatterns are not capturing subpatterns. Simple cases such as the
-above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \d+ and \d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?&#62;\d+) can only match an entire sequence of digits.
-</P>
-<P>
-This construction can of course contain arbitrarily complicated subpatterns,
-and it can be nested.
-</P>
-<P>
-Once-only subpatterns can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as
-</P>
-<P>
-<PRE>
- abcd$
-</PRE>
-</P>
-<P>
-when applied to a long string which does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as
-</P>
-<P>
-<PRE>
- ^.*abcd$
-</PRE>
-</P>
-<P>
-the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as
-</P>
-<P>
-<PRE>
- ^(?&#62;.*)(?&#60;=abcd)
-</PRE>
-</P>
-<P>
-there can be no backtracking for the .* item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.
-</P>
-<P>
-When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of a once-only subpattern is
-the only way to avoid some failing matches taking a very long time indeed.
-The pattern
-</P>
-<P>
-<PRE>
- (\D+|&#60;\d+&#62;)*[!?]
-</PRE>
-</P>
-<P>
-matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in &#60;&#62;, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to
-</P>
-<P>
-<PRE>
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-</PRE>
-</P>
-<P>
-it takes a long time before reporting failure. This is because the string can
-be divided between the two repeats in a large number of ways, and all have to
-be tried. (The example used [!?] rather than a single character at the end,
-because both PCRE and Perl have an optimization that allows for fast failure
-when a single character is used. They remember the last single character that
-is required for a match, and fail early if it is not present in the string.)
-If the pattern is changed to
-</P>
-<P>
-<PRE>
- ((?&#62;\D+)|&#60;\d+&#62;)*[!?]
-</PRE>
-</P>
-<P>
-sequences of non-digits cannot be broken, and failure happens quickly.
-</P>
-<LI><A NAME="SEC26" HREF="#TOC1">CONDITIONAL SUBPATTERNS</A>
-<P>
-It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are
-</P>
-<P>
-<PRE>
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-</PRE>
-</P>
-<P>
-If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.
-</P>
-<P>
-There are two kinds of condition. If the text between the parentheses consists
-of a sequence of digits, the condition is satisfied if the capturing subpattern
-of that number has previously matched. The number must be greater than zero.
-Consider the following pattern, which contains non-significant white space to
-make it more readable (assume the PCRE_EXTENDED option) and to divide it into
-three parts for ease of discussion:
-</P>
-<P>
-<PRE>
- ( \( )? [^()]+ (?(1) \) )
-</PRE>
-</P>
-<P>
-The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.
-</P>
-<P>
-If the condition is not a sequence of digits, it must be an assertion. This may
-be a positive or negative lookahead or lookbehind assertion. Consider this
-pattern, again containing non-significant white space, and with the two
-alternatives on the second line:
-</P>
-<P>
-<PRE>
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
-</PRE>
-</P>
-<P>
-The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
-</P>
-<LI><A NAME="SEC27" HREF="#TOC1">COMMENTS</A>
-<P>
-The sequence (?# marks the start of a comment which continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.
-</P>
-<P>
-If the PCRE_EXTENDED option is set, an unescaped # character outside a
-character class introduces a comment that continues up to the next newline
-character in the pattern.
-</P>
-<LI><A NAME="SEC28" HREF="#TOC1">RECURSIVE PATTERNS</A>
-<P>
-Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth. Perl 5.6 has provided an
-experimental facility that allows regular expressions to recurse (amongst other
-things). It does this by interpolating Perl code in the expression at run time,
-and the code can refer to the expression itself. A Perl pattern to solve the
-parentheses problem can be created like this:
-</P>
-<P>
-<PRE>
- $re = qr{\( (?: (?&#62;[^()]+) | (?p{$re}) )* \)}x;
-</PRE>
-</P>
-<P>
-The (?p{...}) item interpolates Perl code at run time, and in this case refers
-recursively to the pattern in which it appears. Obviously, PCRE cannot support
-the interpolation of Perl code. Instead, the special item (?R) is provided for
-the specific case of recursion. This PCRE pattern solves the parentheses
-problem (assume the PCRE_EXTENDED option is set so that white space is
-ignored):
-</P>
-<P>
-<PRE>
- \( ( (?&#62;[^()]+) | (?R) )* \)
-</PRE>
-</P>
-<P>
-First it matches an opening parenthesis. Then it matches any number of
-substrings which can either be a sequence of non-parentheses, or a recursive
-match of the pattern itself (i.e. a correctly parenthesized substring). Finally
-there is a closing parenthesis.
-</P>
-<P>
-This particular example pattern contains nested unlimited repeats, and so the
-use of a once-only subpattern for matching strings of non-parentheses is
-important when applying the pattern to strings that do not match. For example,
-when it is applied to
-</P>
-<P>
-<PRE>
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-</PRE>
-</P>
-<P>
-it yields "no match" quickly. However, if a once-only subpattern is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.
-</P>
-<P>
-The values set for any capturing subpatterns are those from the outermost level
-of the recursion at which the subpattern value is set. If the pattern above is
-matched against
-</P>
-<P>
-<PRE>
- (ab(cd)ef)
-</PRE>
-</P>
-<P>
-the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving
-</P>
-<P>
-<PRE>
- \( ( ( (?&#62;[^()]+) | (?R) )* ) \)
- ^ ^
- ^ ^
-</PRE>
-the string they capture is "ab(cd)ef", the contents of the top level
-parentheses. If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using <B>pcre_malloc</B>, freeing it via <B>pcre_free</B> afterwards. If no
-memory can be obtained, it saves data for the first 15 capturing parentheses
-only, as there is no way to give an out-of-memory error from within a
-recursion.
-</P>
-<LI><A NAME="SEC29" HREF="#TOC1">PERFORMANCE</A>
-<P>
-Certain items that may appear in patterns are more efficient than others. It is
-more efficient to use a character class like [aeiou] than a set of alternatives
-such as (a|e|i|o|u). In general, the simplest construction that provides the
-required behaviour is usually the most efficient. Jeffrey Friedl's book
-contains a lot of discussion about optimizing regular expressions for efficient
-performance.
-</P>
-<P>
-When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is
-implicitly anchored by PCRE, since it can match only at the start of a subject
-string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization,
-because the . metacharacter does not then match a newline, and if the subject
-string contains newlines, the pattern may match from the character immediately
-following one of them instead of from the very start. For example, the pattern
-</P>
-<P>
-<PRE>
- (.*) second
-</PRE>
-</P>
-<P>
-matches the subject "first\nand second" (where \n stands for a newline
-character) with the first captured substring being "and". In order to do this,
-PCRE has to retry the match starting after every newline in the subject.
-</P>
-<P>
-If you are using such a pattern with subject strings that do not contain
-newlines, the best performance is obtained by setting PCRE_DOTALL, or starting
-the pattern with ^.* to indicate explicit anchoring. That saves PCRE from
-having to scan along the subject looking for a newline to restart at.
-</P>
-<P>
-Beware of patterns that contain nested indefinite repeats. These can take a
-long time to run when applied to a string that does not match. Consider the
-pattern fragment
-</P>
-<P>
-<PRE>
- (a+)*
-</PRE>
-</P>
-<P>
-This can match "aaaa" in 33 different ways, and this number increases very
-rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
-times, and for each of those cases other than 0, the + repeats can match
-different numbers of times.) When the remainder of the pattern is such that the
-entire match is going to fail, PCRE has in principle to try every possible
-variation, and this can take an extremely long time.
-</P>
-<P>
-An optimization catches some of the more simple cases such as
-</P>
-<P>
-<PRE>
- (a+)*b
-</PRE>
-</P>
-<P>
-where a literal character follows. Before embarking on the standard matching
-procedure, PCRE checks that there is a "b" later in the subject string, and if
-there is not, it fails the match immediately. However, when there is no
-following literal this optimization cannot be used. You can see the difference
-by comparing the behaviour of
-</P>
-<P>
-<PRE>
- (a+)*\d
-</PRE>
-</P>
-<P>
-with the pattern above. The former gives a failure almost instantly when
-applied to a whole line of "a" characters, whereas the latter takes an
-appreciable time with strings longer than about 20 characters.
-</P>
-<LI><A NAME="SEC30" HREF="#TOC1">UTF-8 SUPPORT</A>
-<P>
-Starting at release 3.3, PCRE has some support for character strings encoded
-in the UTF-8 format. This is incomplete, and is regarded as experimental. In
-order to use it, you must configure PCRE to include UTF-8 support in the code,
-and, in addition, you must call <B>pcre_compile()</B> with the PCRE_UTF8 option
-flag. When you do this, both the pattern and any subject strings that are
-matched against it are treated as UTF-8 strings instead of just strings of
-bytes, but only in the cases that are mentioned below.
-</P>
-<P>
-If you compile PCRE with UTF-8 support, but do not use it at run time, the
-library will be a bit bigger, but the additional run time overhead is limited
-to testing the PCRE_UTF8 flag in several places, so should not be very large.
-</P>
-<P>
-PCRE assumes that the strings it is given contain valid UTF-8 codes. It does
-not diagnose invalid UTF-8 strings. If you pass invalid UTF-8 strings to PCRE,
-the results are undefined.
-</P>
-<P>
-Running with PCRE_UTF8 set causes these changes in the way PCRE works:
-</P>
-<P>
-1. In a pattern, the escape sequence \x{...}, where the contents of the braces
-is a string of hexadecimal digits, is interpreted as a UTF-8 character whose
-code number is the given hexadecimal number, for example: \x{1234}. This
-inserts from one to six literal bytes into the pattern, using the UTF-8
-encoding. If a non-hexadecimal digit appears between the braces, the item is
-not recognized.
-</P>
-<P>
-2. The original hexadecimal escape sequence, \xhh, generates a two-byte UTF-8
-character if its value is greater than 127.
-</P>
-<P>
-3. Repeat quantifiers are NOT correctly handled if they follow a multibyte
-character. For example, \x{100}* and \xc3+ do not work. If you want to
-repeat such characters, you must enclose them in non-capturing parentheses,
-for example (?:\x{100}), at present.
-</P>
-<P>
-4. The dot metacharacter matches one UTF-8 character instead of a single byte.
-</P>
-<P>
-5. Unlike literal UTF-8 characters, the dot metacharacter followed by a
-repeat quantifier does operate correctly on UTF-8 characters instead of
-single bytes.
-</P>
-<P>
-4. Although the \x{...} escape is permitted in a character class, characters
-whose values are greater than 255 cannot be included in a class.
-</P>
-<P>
-5. A class is matched against a UTF-8 character instead of just a single byte,
-but it can match only characters whose values are less than 256. Characters
-with greater values always fail to match a class.
-</P>
-<P>
-6. Repeated classes work correctly on multiple characters.
-</P>
-<P>
-7. Classes containing just a single character whose value is greater than 127
-(but less than 256), for example, [\x80] or [^\x{93}], do not work because
-these are optimized into single byte matches. In the first case, of course,
-the class brackets are just redundant.
-</P>
-<P>
-8. Lookbehind assertions move backwards in the subject by a fixed number of
-characters instead of a fixed number of bytes. Simple cases have been tested
-to work correctly, but there may be hidden gotchas herein.
-</P>
-<P>
-9. The character types such as \d and \w do not work correctly with UTF-8
-characters. They continue to test a single byte.
-</P>
-<P>
-10. Anything not explicitly mentioned here continues to work in bytes rather
-than in characters.
-</P>
-<P>
-The following UTF-8 features of Perl 5.6 are not implemented:
-</P>
-<P>
-1. The escape sequence \C to match a single byte.
-</P>
-<P>
-2. The use of Unicode tables and properties and escapes \p, \P, and \X.
-</P>
-<LI><A NAME="SEC31" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Last updated: 28 August 2000,
-<BR>
-<PRE>
- the 250th anniversary of the death of J.S. Bach.
-<BR>
-</PRE>
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcre.txt b/ext/pcre/pcrelib/doc/pcre.txt
deleted file mode 100644
index 1db4b537b7..0000000000
--- a/ext/pcre/pcrelib/doc/pcre.txt
+++ /dev/null
@@ -1,2125 +0,0 @@
-NAME
- pcre - Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
- #include <pcre.h>
-
- pcre *pcre_compile(const char *pattern, int options,
- const char **errptr, int *erroffset,
- const unsigned char *tableptr);
-
- pcre_extra *pcre_study(const pcre *code, int options,
- const char **errptr);
-
- int pcre_exec(const pcre *code, const pcre_extra *extra,
- const char *subject, int length, int startoffset,
- int options, int *ovector, int ovecsize);
-
- int pcre_copy_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber, char *buffer,
- int buffersize);
-
- int pcre_get_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber,
- const char **stringptr);
-
- int pcre_get_substring_list(const char *subject,
- int *ovector, int stringcount, const char ***listptr);
-
- void pcre_free_substring(const char *stringptr);
-
- void pcre_free_substring_list(const char **stringptr);
-
- const unsigned char *pcre_maketables(void);
-
- int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
- int what, void *where);
-
- int pcre_info(const pcre *code, int *optptr, *firstcharptr);
-
- char *pcre_version(void);
-
- void *(*pcre_malloc)(size_t);
-
- void (*pcre_free)(void *);
-
-
-
-
-DESCRIPTION
- The PCRE library is a set of functions that implement regu-
- lar expression pattern matching using the same syntax and
- semantics as Perl 5, with just a few differences (see
-
- below). The current implementation corresponds to Perl
- 5.005, with some additional features from later versions.
- This includes some experimental, incomplete support for
- UTF-8 encoded strings. Details of exactly what is and what
- is not supported are given below.
-
- PCRE has its own native API, which is described in this
- document. There is also a set of wrapper functions that
- correspond to the POSIX regular expression API. These are
- described in the pcreposix documentation.
-
- The native API function prototypes are defined in the header
- file pcre.h, and on Unix systems the library itself is
- called libpcre.a, so can be accessed by adding -lpcre to the
- command for linking an application which calls it. The
- header file defines the macros PCRE_MAJOR and PCRE_MINOR to
- contain the major and minor release numbers for the library.
- Applications can use these to include support for different
- releases.
-
- The functions pcre_compile(), pcre_study(), and pcre_exec()
- are used for compiling and matching regular expressions.
-
- The functions pcre_copy_substring(), pcre_get_substring(),
- and pcre_get_substring_list() are convenience functions for
- extracting captured substrings from a matched subject
- string; pcre_free_substring() and pcre_free_substring_list()
- are also provided, to free the memory used for extracted
- strings.
-
- The function pcre_maketables() is used (optionally) to build
- a set of character tables in the current locale for passing
- to pcre_compile().
-
- The function pcre_fullinfo() is used to find out information
- about a compiled pattern; pcre_info() is an obsolete version
- which returns only some of the available information, but is
- retained for backwards compatibility. The function
- pcre_version() returns a pointer to a string containing the
- version of PCRE and its date of release.
-
- The global variables pcre_malloc and pcre_free initially
- contain the entry points of the standard malloc() and free()
- functions respectively. PCRE calls the memory management
- functions via these variables, so a calling program can
- replace them if it wishes to intercept the calls. This
- should be done before calling any PCRE functions.
-
-
-
-MULTI-THREADING
- The PCRE functions can be used in multi-threading
-
-
-
-
-
-SunOS 5.8 Last change: 2
-
-
-
- applications, with the proviso that the memory management
- functions pointed to by pcre_malloc and pcre_free are shared
- by all threads.
-
- The compiled form of a regular expression is not altered
- during matching, so the same compiled pattern can safely be
- used by several threads at once.
-
-
-
-COMPILING A PATTERN
- The function pcre_compile() is called to compile a pattern
- into an internal form. The pattern is a C string terminated
- by a binary zero, and is passed in the argument pattern. A
- pointer to a single block of memory that is obtained via
- pcre_malloc is returned. This contains the compiled code and
- related data. The pcre type is defined for this for conveni-
- ence, but in fact pcre is just a typedef for void, since the
- contents of the block are not externally defined. It is up
- to the caller to free the memory when it is no longer
- required.
-
- The size of a compiled pattern is roughly proportional to
- the length of the pattern string, except that each character
- class (other than those containing just a single character,
- negated or not) requires 33 bytes, and repeat quantifiers
- with a minimum greater than one or a bounded maximum cause
- the relevant portions of the compiled pattern to be repli-
- cated.
-
- The options argument contains independent bits that affect
- the compilation. It should be zero if no options are
- required. Some of the options, in particular, those that are
- compatible with Perl, can also be set and unset from within
- the pattern (see the detailed description of regular expres-
- sions below). For these options, the contents of the options
- argument specifies their initial settings at the start of
- compilation and execution. The PCRE_ANCHORED option can be
- set at the time of matching as well as at compile time.
-
- If errptr is NULL, pcre_compile() returns NULL immediately.
- Otherwise, if compilation of a pattern fails, pcre_compile()
- returns NULL, and sets the variable pointed to by errptr to
- point to a textual error message. The offset from the start
- of the pattern to the character where the error was
- discovered is placed in the variable pointed to by
- erroffset, which must not be NULL. If it is, an immediate
- error is given.
-
- If the final argument, tableptr, is NULL, PCRE uses a
- default set of character tables which are built when it is
- compiled, using the default C locale. Otherwise, tableptr
- must be the result of a call to pcre_maketables(). See the
- section on locale support below.
-
- The following option bits are defined in the header file:
-
- PCRE_ANCHORED
-
- If this bit is set, the pattern is forced to be "anchored",
- that is, it is constrained to match only at the start of the
- string which is being searched (the "subject string"). This
- effect can also be achieved by appropriate constructs in the
- pattern itself, which is the only way to do it in Perl.
-
- PCRE_CASELESS
-
- If this bit is set, letters in the pattern match both upper
- and lower case letters. It is equivalent to Perl's /i
- option.
-
- PCRE_DOLLAR_ENDONLY
-
- If this bit is set, a dollar metacharacter in the pattern
- matches only at the end of the subject string. Without this
- option, a dollar also matches immediately before the final
- character if it is a newline (but not before any other new-
- lines). The PCRE_DOLLAR_ENDONLY option is ignored if
- PCRE_MULTILINE is set. There is no equivalent to this option
- in Perl.
-
- PCRE_DOTALL
-
- If this bit is set, a dot metacharater in the pattern
- matches all characters, including newlines. Without it, new-
- lines are excluded. This option is equivalent to Perl's /s
- option. A negative class such as [^a] always matches a new-
- line character, independent of the setting of this option.
-
- PCRE_EXTENDED
-
- If this bit is set, whitespace data characters in the pat-
- tern are totally ignored except when escaped or inside a
- character class, and characters between an unescaped # out-
- side a character class and the next newline character,
- inclusive, are also ignored. This is equivalent to Perl's /x
- option, and makes it possible to include comments inside
- complicated patterns. Note, however, that this applies only
- to data characters. Whitespace characters may never appear
- within special character sequences in a pattern, for example
- within the sequence (?( which introduces a conditional sub-
- pattern.
-
- PCRE_EXTRA
-
- This option was invented in order to turn on additional
- functionality of PCRE that is incompatible with Perl, but it
- is currently of very little use. When set, any backslash in
- a pattern that is followed by a letter that has no special
- meaning causes an error, thus reserving these combinations
- for future expansion. By default, as in Perl, a backslash
- followed by a letter with no special meaning is treated as a
- literal. There are at present no other features controlled
- by this option. It can also be set by a (?X) option setting
- within a pattern.
-
- PCRE_MULTILINE
-
- By default, PCRE treats the subject string as consisting of
- a single "line" of characters (even if it actually contains
- several newlines). The "start of line" metacharacter (^)
- matches only at the start of the string, while the "end of
- line" metacharacter ($) matches only at the end of the
- string, or before a terminating newline (unless
- PCRE_DOLLAR_ENDONLY is set). This is the same as Perl.
-
- When PCRE_MULTILINE it is set, the "start of line" and "end
- of line" constructs match immediately following or immedi-
- ately before any newline in the subject string, respec-
- tively, as well as at the very start and end. This is
- equivalent to Perl's /m option. If there are no "\n" charac-
- ters in a subject string, or no occurrences of ^ or $ in a
- pattern, setting PCRE_MULTILINE has no effect.
-
- PCRE_UNGREEDY
-
- This option inverts the "greediness" of the quantifiers so
- that they are not greedy by default, but become greedy if
- followed by "?". It is not compatible with Perl. It can also
- be set by a (?U) option setting within the pattern.
-
- PCRE_UTF8
-
- This option causes PCRE to regard both the pattern and the
- subject as strings of UTF-8 characters instead of just byte
- strings. However, it is available only if PCRE has been
- built to include UTF-8 support. If not, the use of this
- option provokes an error. Support for UTF-8 is new, experi-
- mental, and incomplete. Details of exactly what it entails
- are given below.
-
-
-
-STUDYING A PATTERN
- When a pattern is going to be used several times, it is
- worth spending more time analyzing it in order to speed up
- the time taken for matching. The function pcre_study() takes
-
- a pointer to a compiled pattern as its first argument, and
- returns a pointer to a pcre_extra block (another void
- typedef) containing additional information about the pat-
- tern; this can be passed to pcre_exec(). If no additional
- information is available, NULL is returned.
-
- The second argument contains option bits. At present, no
- options are defined for pcre_study(), and this argument
- should always be zero.
-
- The third argument for pcre_study() is a pointer to an error
- message. If studying succeeds (even if no data is returned),
- the variable it points to is set to NULL. Otherwise it
- points to a textual error message.
-
- At present, studying a pattern is useful only for non-
- anchored patterns that do not have a single fixed starting
- character. A bitmap of possible starting characters is
- created.
-
-
-
-LOCALE SUPPORT
- PCRE handles caseless matching, and determines whether char-
- acters are letters, digits, or whatever, by reference to a
- set of tables. The library contains a default set of tables
- which is created in the default C locale when PCRE is com-
- piled. This is used when the final argument of
- pcre_compile() is NULL, and is sufficient for many applica-
- tions.
-
- An alternative set of tables can, however, be supplied. Such
- tables are built by calling the pcre_maketables() function,
- which has no arguments, in the relevant locale. The result
- can then be passed to pcre_compile() as often as necessary.
- For example, to build and use tables that are appropriate
- for the French locale (where accented characters with codes
- greater than 128 are treated as letters), the following code
- could be used:
-
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-
- The tables are built in memory that is obtained via
- pcre_malloc. The pointer that is passed to pcre_compile is
- saved with the compiled pattern, and the same tables are
- used via this pointer by pcre_study() and pcre_exec(). Thus
- for any single pattern, compilation, studying and matching
- all happen in the same locale, but different patterns can be
- compiled in different locales. It is the caller's responsi-
- bility to ensure that the memory containing the tables
- remains available for as long as it is needed.
-
-
-
-INFORMATION ABOUT A PATTERN
- The pcre_fullinfo() function returns information about a
- compiled pattern. It replaces the obsolete pcre_info() func-
- tion, which is nevertheless retained for backwards compabil-
- ity (and is documented below).
-
- The first argument for pcre_fullinfo() is a pointer to the
- compiled pattern. The second argument is the result of
- pcre_study(), or NULL if the pattern was not studied. The
- third argument specifies which piece of information is
- required, while the fourth argument is a pointer to a vari-
- able to receive the data. The yield of the function is zero
- for success, or one of the following negative numbers:
-
- PCRE_ERROR_NULL the argument code was NULL
- the argument where was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of what was invalid
-
- The possible values for the third argument are defined in
- pcre.h, and are as follows:
-
- PCRE_INFO_OPTIONS
-
- Return a copy of the options with which the pattern was com-
- piled. The fourth argument should point to au unsigned long
- int variable. These option bits are those specified in the
- call to pcre_compile(), modified by any top-level option
- settings within the pattern itself, and with the
- PCRE_ANCHORED bit forcibly set if the form of the pattern
- implies that it can match only at the start of a subject
- string.
-
- PCRE_INFO_SIZE
-
- Return the size of the compiled pattern, that is, the value
- that was passed as the argument to pcre_malloc() when PCRE
- was getting memory in which to place the compiled data. The
- fourth argument should point to a size_t variable.
-
- PCRE_INFO_CAPTURECOUNT
-
- Return the number of capturing subpatterns in the pattern.
- The fourth argument should point to an int variable.
-
- PCRE_INFO_BACKREFMAX
-
- Return the number of the highest back reference in the
- pattern. The fourth argument should point to an int vari-
- able. Zero is returned if there are no back references.
-
- PCRE_INFO_FIRSTCHAR
-
- Return information about the first character of any matched
- string, for a non-anchored pattern. If there is a fixed
- first character, e.g. from a pattern such as
- (cat|cow|coyote), it is returned in the integer pointed to
- by where. Otherwise, if either
-
- (a) the pattern was compiled with the PCRE_MULTILINE option,
- and every branch starts with "^", or
-
- (b) every branch of the pattern starts with ".*" and
- PCRE_DOTALL is not set (if it were set, the pattern would be
- anchored),
-
- -1 is returned, indicating that the pattern matches only at
- the start of a subject string or after any "\n" within the
- string. Otherwise -2 is returned. For anchored patterns, -2
- is returned.
-
- PCRE_INFO_FIRSTTABLE
-
- If the pattern was studied, and this resulted in the con-
- struction of a 256-bit table indicating a fixed set of char-
- acters for the first character in any matching string, a
- pointer to the table is returned. Otherwise NULL is
- returned. The fourth argument should point to an unsigned
- char * variable.
-
- PCRE_INFO_LASTLITERAL
-
- For a non-anchored pattern, return the value of the right-
- most literal character which must exist in any matched
- string, other than at its start. The fourth argument should
- point to an int variable. If there is no such character, or
- if the pattern is anchored, -1 is returned. For example, for
- the pattern /a\d+z\d+/ the returned value is 'z'.
-
- The pcre_info() function is now obsolete because its inter-
- face is too restrictive to return all the available data
- about a compiled pattern. New programs should use
- pcre_fullinfo() instead. The yield of pcre_info() is the
- number of capturing subpatterns, or one of the following
- negative numbers:
-
- PCRE_ERROR_NULL the argument code was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
-
- If the optptr argument is not NULL, a copy of the options
- with which the pattern was compiled is placed in the integer
- it points to (see PCRE_INFO_OPTIONS above).
-
- If the pattern is not anchored and the firstcharptr argument
- is not NULL, it is used to pass back information about the
- first character of any matched string (see
- PCRE_INFO_FIRSTCHAR above).
-
-
-
-MATCHING A PATTERN
- The function pcre_exec() is called to match a subject string
- against a pre-compiled pattern, which is passed in the code
- argument. If the pattern has been studied, the result of the
- study should be passed in the extra argument. Otherwise this
- must be NULL.
-
- The PCRE_ANCHORED option can be passed in the options argu-
- ment, whose unused bits must be zero. However, if a pattern
- was compiled with PCRE_ANCHORED, or turned out to be
- anchored by virtue of its contents, it cannot be made
- unachored at matching time.
-
- There are also three further options that can be set only at
- matching time:
-
- PCRE_NOTBOL
-
- The first character of the string is not the beginning of a
- line, so the circumflex metacharacter should not match
- before it. Setting this without PCRE_MULTILINE (at compile
- time) causes circumflex never to match.
-
- PCRE_NOTEOL
-
- The end of the string is not the end of a line, so the dol-
- lar metacharacter should not match it nor (except in multi-
- line mode) a newline immediately before it. Setting this
- without PCRE_MULTILINE (at compile time) causes dollar never
- to match.
-
- PCRE_NOTEMPTY
-
- An empty string is not considered to be a valid match if
- this option is set. If there are alternatives in the pat-
- tern, they are tried. If all the alternatives match the
- empty string, the entire match fails. For example, if the
- pattern
-
- a?b?
-
- is applied to a string not beginning with "a" or "b", it
- matches the empty string at the start of the subject. With
- PCRE_NOTEMPTY set, this match is not valid, so PCRE searches
- further into the string for occurrences of "a" or "b".
-
- Perl has no direct equivalent of PCRE_NOTEMPTY, but it does
- make a special case of a pattern match of the empty string
- within its split() function, and when using the /g modifier.
- It is possible to emulate Perl's behaviour after matching a
- null string by first trying the match again at the same
- offset with PCRE_NOTEMPTY set, and then if that fails by
- advancing the starting offset (see below) and trying an
- ordinary match again.
-
- The subject string is passed as a pointer in subject, a
- length in length, and a starting offset in startoffset.
- Unlike the pattern string, it may contain binary zero char-
- acters. When the starting offset is zero, the search for a
- match starts at the beginning of the subject, and this is by
- far the most common case.
-
- A non-zero starting offset is useful when searching for
- another match in the same subject by calling pcre_exec()
- again after a previous success. Setting startoffset differs
- from just passing over a shortened string and setting
- PCRE_NOTBOL in the case of a pattern that begins with any
- kind of lookbehind. For example, consider the pattern
-
- \Biss\B
-
- which finds occurrences of "iss" in the middle of words. (\B
- matches only if the current position in the subject is not a
- word boundary.) When applied to the string "Mississipi" the
- first call to pcre_exec() finds the first occurrence. If
- pcre_exec() is called again with just the remainder of the
- subject, namely "issipi", it does not match, because \B is
- always false at the start of the subject, which is deemed to
- be a word boundary. However, if pcre_exec() is passed the
- entire string again, but with startoffset set to 4, it finds
- the second occurrence of "iss" because it is able to look
- behind the starting point to discover that it is preceded by
- a letter.
-
- If a non-zero starting offset is passed when the pattern is
- anchored, one attempt to match at the given offset is tried.
- This can only succeed if the pattern does not require the
- match to be at the start of the subject.
-
- In general, a pattern matches a certain portion of the sub-
- ject, and in addition, further substrings from the subject
- may be picked out by parts of the pattern. Following the
- usage in Jeffrey Friedl's book, this is called "capturing"
- in what follows, and the phrase "capturing subpattern" is
- used for a fragment of a pattern that picks out a substring.
- PCRE supports several other kinds of parenthesized subpat-
- tern that do not cause substrings to be captured.
-
- Captured substrings are returned to the caller via a vector
- of integer offsets whose address is passed in ovector. The
- number of elements in the vector is passed in ovecsize. The
- first two-thirds of the vector is used to pass back captured
- substrings, each substring using a pair of integers. The
- remaining third of the vector is used as workspace by
- pcre_exec() while matching capturing subpatterns, and is not
- available for passing back information. The length passed in
- ovecsize should always be a multiple of three. If it is not,
- it is rounded down.
-
- When a match has been successful, information about captured
- substrings is returned in pairs of integers, starting at the
- beginning of ovector, and continuing up to two-thirds of its
- length at the most. The first element of a pair is set to
- the offset of the first character in a substring, and the
- second is set to the offset of the first character after the
- end of a substring. The first pair, ovector[0] and ovec-
- tor[1], identify the portion of the subject string matched
- by the entire pattern. The next pair is used for the first
- capturing subpattern, and so on. The value returned by
- pcre_exec() is the number of pairs that have been set. If
- there are no capturing subpatterns, the return value from a
- successful match is 1, indicating that just the first pair
- of offsets has been set.
-
- Some convenience functions are provided for extracting the
- captured substrings as separate strings. These are described
- in the following section.
-
- It is possible for an capturing subpattern number n+1 to
- match some part of the subject when subpattern n has not
- been used at all. For example, if the string "abc" is
- matched against the pattern (a|(z))(bc) subpatterns 1 and 3
- are matched, but 2 is not. When this happens, both offset
- values corresponding to the unused subpattern are set to -1.
-
- If a capturing subpattern is matched repeatedly, it is the
- last portion of the string that it matched that gets
- returned.
-
- If the vector is too small to hold all the captured sub-
- strings, it is used as far as possible (up to two-thirds of
- its length), and the function returns a value of zero. In
- particular, if the substring offsets are not of interest,
- pcre_exec() may be called with ovector passed as NULL and
- ovecsize as zero. However, if the pattern contains back
- references and the ovector isn't big enough to remember the
- related substrings, PCRE has to get additional memory for
- use during matching. Thus it is usually advisable to supply
- an ovector.
-
- Note that pcre_info() can be used to find out how many cap-
- turing subpatterns there are in a compiled pattern. The
- smallest size for ovector that will allow for n captured
- substrings in addition to the offsets of the substring
- matched by the whole pattern is (n+1)*3.
-
- If pcre_exec() fails, it returns a negative number. The fol-
- lowing are defined in the header file:
-
- PCRE_ERROR_NOMATCH (-1)
-
- The subject string did not match the pattern.
-
- PCRE_ERROR_NULL (-2)
-
- Either code or subject was passed as NULL, or ovector was
- NULL and ovecsize was not zero.
-
- PCRE_ERROR_BADOPTION (-3)
-
- An unrecognized bit was set in the options argument.
-
- PCRE_ERROR_BADMAGIC (-4)
-
- PCRE stores a 4-byte "magic number" at the start of the com-
- piled code, to catch the case when it is passed a junk
- pointer. This is the error it gives when the magic number
- isn't present.
-
- PCRE_ERROR_UNKNOWN_NODE (-5)
-
- While running the pattern match, an unknown item was encoun-
- tered in the compiled pattern. This error could be caused by
- a bug in PCRE or by overwriting of the compiled pattern.
-
- PCRE_ERROR_NOMEMORY (-6)
-
- If a pattern contains back references, but the ovector that
- is passed to pcre_exec() is not big enough to remember the
- referenced substrings, PCRE gets a block of memory at the
- start of matching to use for this purpose. If the call via
- pcre_malloc() fails, this error is given. The memory is
- freed at the end of matching.
-
-
-
-EXTRACTING CAPTURED SUBSTRINGS
- Captured substrings can be accessed directly by using the
-
-
-
-
-
-SunOS 5.8 Last change: 12
-
-
-
- offsets returned by pcre_exec() in ovector. For convenience,
- the functions pcre_copy_substring(), pcre_get_substring(),
- and pcre_get_substring_list() are provided for extracting
- captured substrings as new, separate, zero-terminated
- strings. A substring that contains a binary zero is
- correctly extracted and has a further zero added on the end,
- but the result does not, of course, function as a C string.
-
- The first three arguments are the same for all three func-
- tions: subject is the subject string which has just been
- successfully matched, ovector is a pointer to the vector of
- integer offsets that was passed to pcre_exec(), and
- stringcount is the number of substrings that were captured
- by the match, including the substring that matched the
- entire regular expression. This is the value returned by
- pcre_exec if it is greater than zero. If pcre_exec()
- returned zero, indicating that it ran out of space in ovec-
- tor, the value passed as stringcount should be the size of
- the vector divided by three.
-
- The functions pcre_copy_substring() and pcre_get_substring()
- extract a single substring, whose number is given as string-
- number. A value of zero extracts the substring that matched
- the entire pattern, while higher values extract the captured
- substrings. For pcre_copy_substring(), the string is placed
- in buffer, whose length is given by buffersize, while for
- pcre_get_substring() a new block of memory is obtained via
- pcre_malloc, and its address is returned via stringptr. The
- yield of the function is the length of the string, not
- including the terminating zero, or one of
-
- PCRE_ERROR_NOMEMORY (-6)
-
- The buffer was too small for pcre_copy_substring(), or the
- attempt to get memory failed for pcre_get_substring().
-
- PCRE_ERROR_NOSUBSTRING (-7)
-
- There is no substring whose number is stringnumber.
-
- The pcre_get_substring_list() function extracts all avail-
- able substrings and builds a list of pointers to them. All
- this is done in a single block of memory which is obtained
- via pcre_malloc. The address of the memory block is returned
- via listptr, which is also the start of the list of string
- pointers. The end of the list is marked by a NULL pointer.
- The yield of the function is zero if all went well, or
-
- PCRE_ERROR_NOMEMORY (-6)
-
- if the attempt to get the memory block failed.
-
- When any of these functions encounter a substring that is
- unset, which can happen when capturing subpattern number n+1
- matches some part of the subject, but subpattern n has not
- been used at all, they return an empty string. This can be
- distinguished from a genuine zero-length substring by
- inspecting the appropriate offset in ovector, which is nega-
- tive for unset substrings.
-
- The two convenience functions pcre_free_substring() and
- pcre_free_substring_list() can be used to free the memory
- returned by a previous call of pcre_get_substring() or
- pcre_get_substring_list(), respectively. They do nothing
- more than call the function pointed to by pcre_free, which
- of course could be called directly from a C program. How-
- ever, PCRE is used in some situations where it is linked via
- a special interface to another programming language which
- cannot use pcre_free directly; it is for these cases that
- the functions are provided.
-
-
-
-LIMITATIONS
- There are some size limitations in PCRE but it is hoped that
- they will never in practice be relevant. The maximum length
- of a compiled pattern is 65539 (sic) bytes. All values in
- repeating quantifiers must be less than 65536. The maximum
- number of capturing subpatterns is 99. The maximum number
- of all parenthesized subpatterns, including capturing sub-
- patterns, assertions, and other types of subpattern, is 200.
-
- The maximum length of a subject string is the largest posi-
- tive number that an integer variable can hold. However, PCRE
- uses recursion to handle subpatterns and indefinite repeti-
- tion. This means that the available stack space may limit
- the size of a subject string that can be processed by cer-
- tain patterns.
-
-
-
-DIFFERENCES FROM PERL
- The differences described here are with respect to Perl
- 5.005.
-
- 1. By default, a whitespace character is any character that
- the C library function isspace() recognizes, though it is
- possible to compile PCRE with alternative character type
- tables. Normally isspace() matches space, formfeed, newline,
- carriage return, horizontal tab, and vertical tab. Perl 5 no
- longer includes vertical tab in its set of whitespace char-
- acters. The \v escape that was in the Perl documentation for
- a long time was never in fact recognized. However, the char-
- acter itself was treated as whitespace at least up to 5.002.
- In 5.004 and 5.005 it does not match \s.
-
- 2. PCRE does not allow repeat quantifiers on lookahead
- assertions. Perl permits them, but they do not mean what you
- might think. For example, (?!a){3} does not assert that the
- next three characters are not "a". It just asserts that the
- next character is not "a" three times.
-
- 3. Capturing subpatterns that occur inside negative looka-
- head assertions are counted, but their entries in the
- offsets vector are never set. Perl sets its numerical vari-
- ables from any such patterns that are matched before the
- assertion fails to match something (thereby succeeding), but
- only if the negative lookahead assertion contains just one
- branch.
-
- 4. Though binary zero characters are supported in the sub-
- ject string, they are not allowed in a pattern string
- because it is passed as a normal C string, terminated by
- zero. The escape sequence "\0" can be used in the pattern to
- represent a binary zero.
-
- 5. The following Perl escape sequences are not supported:
- \l, \u, \L, \U, \E, \Q. In fact these are implemented by
- Perl's general string-handling and are not part of its pat-
- tern matching engine.
-
- 6. The Perl \G assertion is not supported as it is not
- relevant to single pattern matches.
-
- 7. Fairly obviously, PCRE does not support the (?{code}) and
- (?p{code}) constructions. However, there is some experimen-
- tal support for recursive patterns using the non-Perl item
- (?R).
-
- 8. There are at the time of writing some oddities in Perl
- 5.005_02 concerned with the settings of captured strings
- when part of a pattern is repeated. For example, matching
- "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
- "b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2
- unset. However, if the pattern is changed to
- /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-
- In Perl 5.004 $2 is set in both cases, and that is also true
- of PCRE. If in the future Perl changes to a consistent state
- that is different, PCRE may change to follow.
-
- 9. Another as yet unresolved discrepancy is that in Perl
- 5.005_02 the pattern /^(a)?(?(1)a|b)+$/ matches the string
- "a", whereas in PCRE it does not. However, in both Perl and
- PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-
- 10. PCRE provides some extensions to the Perl regular
- expression facilities:
-
- (a) Although lookbehind assertions must match fixed length
- strings, each alternative branch of a lookbehind assertion
- can match a different length of string. Perl 5.005 requires
- them all to have the same length.
-
- (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not
- set, the $ meta- character matches only at the very end of
- the string.
-
- (c) If PCRE_EXTRA is set, a backslash followed by a letter
- with no special meaning is faulted.
-
- (d) If PCRE_UNGREEDY is set, the greediness of the repeti-
- tion quantifiers is inverted, that is, by default they are
- not greedy, but if followed by a question mark they are.
-
- (e) PCRE_ANCHORED can be used to force a pattern to be tried
- only at the start of the subject.
-
- (f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options
- for pcre_exec() have no Perl equivalents.
-
- (g) The (?R) construct allows for recursive pattern matching
- (Perl 5.6 can do this using the (?p{code}) construct, which
- PCRE cannot of course support.)
-
-
-
-REGULAR EXPRESSION DETAILS
- The syntax and semantics of the regular expressions sup-
- ported by PCRE are described below. Regular expressions are
- also described in the Perl documentation and in a number of
- other books, some of which have copious examples. Jeffrey
- Friedl's "Mastering Regular Expressions", published by
- O'Reilly (ISBN 1-56592-257), covers them in great detail.
-
- The description here is intended as reference documentation.
- The basic operation of PCRE is on strings of bytes. However,
- there is the beginnings of some support for UTF-8 character
- strings. To use this support you must configure PCRE to
- include it, and then call pcre_compile() with the PCRE_UTF8
- option. How this affects the pattern matching is described
- in the final section of this document.
-
- A regular expression is a pattern that is matched against a
- subject string from left to right. Most characters stand for
- themselves in a pattern, and match the corresponding charac-
- ters in the subject. As a trivial example, the pattern
-
- The quick brown fox
-
- matches a portion of a subject string that is identical to
- itself. The power of regular expressions comes from the
- ability to include alternatives and repetitions in the pat-
- tern. These are encoded in the pattern by the use of meta-
- characters, which do not stand for themselves but instead
- are interpreted in some special way.
-
- There are two different sets of meta-characters: those that
- are recognized anywhere in the pattern except within square
- brackets, and those that are recognized in square brackets.
- Outside square brackets, the meta-characters are as follows:
-
- \ general escape character with several uses
- ^ assert start of subject (or line, in multiline
- mode)
- $ assert end of subject (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- { start min/max quantifier
-
- Part of a pattern that is in square brackets is called a
- "character class". In a character class the only meta-
- characters are:
-
- \ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- ] terminates the character class
-
- The following sections describe the use of each of the
- meta-characters.
-
-
-
-BACKSLASH
- The backslash character has several uses. Firstly, if it is
- followed by a non-alphameric character, it takes away any
- special meaning that character may have. This use of
- backslash as an escape character applies both inside and
- outside character classes.
-
- For example, if you want to match a "*" character, you write
- "\*" in the pattern. This applies whether or not the follow-
- ing character would otherwise be interpreted as a meta-
- character, so it is always safe to precede a non-alphameric
- with "\" to specify that it stands for itself. In particu-
- lar, if you want to match a backslash, you write "\\".
-
- If a pattern is compiled with the PCRE_EXTENDED option, whi-
- tespace in the pattern (other than in a character class) and
- characters between a "#" outside a character class and the
- next newline character are ignored. An escaping backslash
- can be used to include a whitespace or "#" character as part
- of the pattern.
-
- A second use of backslash provides a way of encoding non-
- printing characters in patterns in a visible manner. There
- is no restriction on the appearance of non-printing charac-
- ters, apart from the binary zero that terminates a pattern,
- but when a pattern is being prepared by text editing, it is
- usually easier to use one of the following escape sequences
- than the binary character it represents:
-
- \a alarm, that is, the BEL character (hex 07)
- \cx "control-x", where x is any character
- \e escape (hex 1B)
- \f formfeed (hex 0C)
- \n newline (hex 0A)
- \r carriage return (hex 0D)
- \t tab (hex 09)
- \xhh character with hex code hh
- \ddd character with octal code ddd, or backreference
-
- The precise effect of "\cx" is as follows: if "x" is a lower
- case letter, it is converted to upper case. Then bit 6 of
- the character (hex 40) is inverted. Thus "\cz" becomes hex
- 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex 7B.
-
- After "\x", up to two hexadecimal digits are read (letters
- can be in upper or lower case).
-
- After "\0" up to two further octal digits are read. In both
- cases, if there are fewer than two digits, just those that
- are present are used. Thus the sequence "\0\x\07" specifies
- two binary zeros followed by a BEL character. Make sure you
- supply two digits after the initial zero if the character
- that follows is itself an octal digit.
-
- The handling of a backslash followed by a digit other than 0
- is complicated. Outside a character class, PCRE reads it
- and any following digits as a decimal number. If the number
- is less than 10, or if there have been at least that many
- previous capturing left parentheses in the expression, the
- entire sequence is taken as a back reference. A description
- of how this works is given later, following the discussion
- of parenthesized subpatterns.
-
- Inside a character class, or if the decimal number is
- greater than 9 and there have not been that many capturing
- subpatterns, PCRE re-reads up to three octal digits follow-
- ing the backslash, and generates a single byte from the
- least significant 8 bits of the value. Any subsequent digits
- stand for themselves. For example:
-
- \040 is another way of writing a space
- \40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \7 is always a back reference
- \11 might be a back reference, or another way of
- writing a tab
- \011 is always a tab
- \0113 is a tab followed by the character "3"
- \113 is the character with octal code 113 (since there
- can be no more than 99 back references)
- \377 is a byte consisting entirely of 1 bits
- \81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-
- Note that octal values of 100 or greater must not be intro-
- duced by a leading zero, because no more than three octal
- digits are ever read.
-
- All the sequences that define a single byte value can be
- used both inside and outside character classes. In addition,
- inside a character class, the sequence "\b" is interpreted
- as the backspace character (hex 08). Outside a character
- class it has a different meaning (see below).
-
- The third use of backslash is for specifying generic charac-
- ter types:
-
- \d any decimal digit
- \D any character that is not a decimal digit
- \s any whitespace character
- \S any character that is not a whitespace character
- \w any "word" character
- \W any "non-word" character
-
- Each pair of escape sequences partitions the complete set of
- characters into two disjoint sets. Any given character
- matches one, and only one, of each pair.
-
- A "word" character is any letter or digit or the underscore
- character, that is, any character which can be part of a
- Perl "word". The definition of letters and digits is con-
- trolled by PCRE's character tables, and may vary if locale-
- specific matching is taking place (see "Locale support"
- above). For example, in the "fr" (French) locale, some char-
- acter codes greater than 128 are used for accented letters,
- and these are matched by \w.
-
- These character type sequences can appear both inside and
- outside character classes. They each match one character of
- the appropriate type. If the current matching point is at
- the end of the subject string, all of them fail, since there
- is no character to match.
-
- The fourth use of backslash is for certain simple asser-
- tions. An assertion specifies a condition that has to be met
- at a particular point in a match, without consuming any
- characters from the subject string. The use of subpatterns
- for more complicated assertions is described below. The
- backslashed assertions are
-
- \b word boundary
- \B not a word boundary
- \A start of subject (independent of multiline mode)
- \Z end of subject or newline at end (independent of
- multiline mode)
- \z end of subject (independent of multiline mode)
-
- These assertions may not appear in character classes (but
- note that "\b" has a different meaning, namely the backspace
- character, inside a character class).
-
- A word boundary is a position in the subject string where
- the current character and the previous character do not both
- match \w or \W (i.e. one matches \w and the other matches
- \W), or the start or end of the string if the first or last
- character matches \w, respectively.
-
- The \A, \Z, and \z assertions differ from the traditional
- circumflex and dollar (described below) in that they only
- ever match at the very start and end of the subject string,
- whatever options are set. They are not affected by the
- PCRE_NOTBOL or PCRE_NOTEOL options. If the startoffset argu-
- ment of pcre_exec() is non-zero, \A can never match. The
- difference between \Z and \z is that \Z matches before a
- newline that is the last character of the string as well as
- at the end of the string, whereas \z matches only at the
- end.
-
-
-
-CIRCUMFLEX AND DOLLAR
- Outside a character class, in the default matching mode, the
- circumflex character is an assertion which is true only if
- the current matching point is at the start of the subject
-
- string. If the startoffset argument of pcre_exec() is non-
- zero, circumflex can never match. Inside a character class,
- circumflex has an entirely different meaning (see below).
-
- Circumflex need not be the first character of the pattern if
- a number of alternatives are involved, but it should be the
- first thing in each alternative in which it appears if the
- pattern is ever to match that branch. If all possible alter-
- natives start with a circumflex, that is, if the pattern is
- constrained to match only at the start of the subject, it is
- said to be an "anchored" pattern. (There are also other con-
- structs that can cause a pattern to be anchored.)
-
- A dollar character is an assertion which is true only if the
- current matching point is at the end of the subject string,
- or immediately before a newline character that is the last
- character in the string (by default). Dollar need not be the
- last character of the pattern if a number of alternatives
- are involved, but it should be the last item in any branch
- in which it appears. Dollar has no special meaning in a
- character class.
-
- The meaning of dollar can be changed so that it matches only
- at the very end of the string, by setting the
- PCRE_DOLLAR_ENDONLY option at compile or matching time. This
- does not affect the \Z assertion.
-
- The meanings of the circumflex and dollar characters are
- changed if the PCRE_MULTILINE option is set. When this is
- the case, they match immediately after and immediately
- before an internal "\n" character, respectively, in addition
- to matching at the start and end of the subject string. For
- example, the pattern /^abc$/ matches the subject string
- "def\nabc" in multiline mode, but not otherwise. Conse-
- quently, patterns that are anchored in single line mode
- because all branches start with "^" are not anchored in mul-
- tiline mode, and a match for circumflex is possible when the
- startoffset argument of pcre_exec() is non-zero. The
- PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
- set.
-
- Note that the sequences \A, \Z, and \z can be used to match
- the start and end of the subject in both modes, and if all
- branches of a pattern start with \A is it always anchored,
- whether PCRE_MULTILINE is set or not.
-
-
-
-FULL STOP (PERIOD, DOT)
- Outside a character class, a dot in the pattern matches any
- one character in the subject, including a non-printing char-
- acter, but not (by default) newline. If the PCRE_DOTALL
-
- option is set, dots match newlines as well. The handling of
- dot is entirely independent of the handling of circumflex
- and dollar, the only relationship being that they both
- involve newline characters. Dot has no special meaning in a
- character class.
-
-
-
-SQUARE BRACKETS
- An opening square bracket introduces a character class, ter-
- minated by a closing square bracket. A closing square
- bracket on its own is not special. If a closing square
- bracket is required as a member of the class, it should be
- the first data character in the class (after an initial cir-
- cumflex, if present) or escaped with a backslash.
-
- A character class matches a single character in the subject;
- the character must be in the set of characters defined by
- the class, unless the first character in the class is a cir-
- cumflex, in which case the subject character must not be in
- the set defined by the class. If a circumflex is actually
- required as a member of the class, ensure it is not the
- first character, or escape it with a backslash.
-
- For example, the character class [aeiou] matches any lower
- case vowel, while [^aeiou] matches any character that is not
- a lower case vowel. Note that a circumflex is just a con-
- venient notation for specifying the characters which are in
- the class by enumerating those that are not. It is not an
- assertion: it still consumes a character from the subject
- string, and fails if the current pointer is at the end of
- the string.
-
- When caseless matching is set, any letters in a class
- represent both their upper case and lower case versions, so
- for example, a caseless [aeiou] matches "A" as well as "a",
- and a caseless [^aeiou] does not match "A", whereas a case-
- ful version would.
-
- The newline character is never treated in any special way in
- character classes, whatever the setting of the PCRE_DOTALL
- or PCRE_MULTILINE options is. A class such as [^a] will
- always match a newline.
-
- The minus (hyphen) character can be used to specify a range
- of characters in a character class. For example, [d-m]
- matches any letter between d and m, inclusive. If a minus
- character is required in a class, it must be escaped with a
- backslash or appear in a position where it cannot be inter-
- preted as indicating a range, typically as the first or last
- character in the class.
-
- It is not possible to have the literal character "]" as the
- end character of a range. A pattern such as [W-]46] is
- interpreted as a class of two characters ("W" and "-") fol-
- lowed by a literal string "46]", so it would match "W46]" or
- "-46]". However, if the "]" is escaped with a backslash it
- is interpreted as the end of range, so [W-\]46] is inter-
- preted as a single class containing a range followed by two
- separate characters. The octal or hexadecimal representation
- of "]" can also be used to end a range.
-
- Ranges operate in ASCII collating sequence. They can also be
- used for characters specified numerically, for example
- [\000-\037]. If a range that includes letters is used when
- caseless matching is set, it matches the letters in either
- case. For example, [W-c] is equivalent to [][\^_`wxyzabc],
- matched caselessly, and if character tables for the "fr"
- locale are in use, [\xc8-\xcb] matches accented E characters
- in both cases.
-
- The character types \d, \D, \s, \S, \w, and \W may also
- appear in a character class, and add the characters that
- they match to the class. For example, [\dABCDEF] matches any
- hexadecimal digit. A circumflex can conveniently be used
- with the upper case character types to specify a more res-
- tricted set of characters than the matching lower case type.
- For example, the class [^\W_] matches any letter or digit,
- but not underscore.
-
- All non-alphameric characters other than \, -, ^ (at the
- start) and the terminating ] are non-special in character
- classes, but it does no harm if they are escaped.
-
-
-
-POSIX CHARACTER CLASSES
- Perl 5.6 (not yet released at the time of writing) is going
- to support the POSIX notation for character classes, which
- uses names enclosed by [: and :] within the enclosing
- square brackets. PCRE supports this notation. For example,
-
- [01[:alpha:]%]
-
- matches "0", "1", any alphabetic character, or "%". The sup-
- ported class names are
-
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- cntrl control characters
- digit decimal digits (same as \d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (same as \s)
- upper upper case letters
- word "word" characters (same as \w)
- xdigit hexadecimal digits
-
- The names "ascii" and "word" are Perl extensions. Another
- Perl extension is negation, which is indicated by a ^ char-
- acter after the colon. For example,
-
- [12[:^digit:]]
-
- matches "1", "2", or any non-digit. PCRE (and Perl) also
- recogize the POSIX syntax [.ch.] and [=ch=] where "ch" is a
- "collating element", but these are not supported, and an
- error is given if they are encountered.
-
-
-
-VERTICAL BAR
- Vertical bar characters are used to separate alternative
- patterns. For example, the pattern
-
- gilbert|sullivan
-
- matches either "gilbert" or "sullivan". Any number of alter-
- natives may appear, and an empty alternative is permitted
- (matching the empty string). The matching process tries
- each alternative in turn, from left to right, and the first
- one that succeeds is used. If the alternatives are within a
- subpattern (defined below), "succeeds" means matching the
- rest of the main pattern as well as the alternative in the
- subpattern.
-
-
-
-INTERNAL OPTION SETTING
- The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL,
- and PCRE_EXTENDED can be changed from within the pattern by
- a sequence of Perl option letters enclosed between "(?" and
- ")". The option letters are
-
- i for PCRE_CASELESS
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-
- For example, (?im) sets caseless, multiline matching. It is
- also possible to unset these options by preceding the letter
- with a hyphen, and a combined setting and unsetting such as
- (?im-sx), which sets PCRE_CASELESS and PCRE_MULTILINE while
- unsetting PCRE_DOTALL and PCRE_EXTENDED, is also permitted.
- If a letter appears both before and after the hyphen, the
- option is unset.
-
- The scope of these option changes depends on where in the
- pattern the setting occurs. For settings that are outside
- any subpattern (defined below), the effect is the same as if
- the options were set or unset at the start of matching. The
- following patterns all behave in exactly the same way:
-
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-
- which in turn is the same as compiling the pattern abc with
- PCRE_CASELESS set. In other words, such "top level" set-
- tings apply to the whole pattern (unless there are other
- changes inside subpatterns). If there is more than one set-
- ting of the same option at top level, the rightmost setting
- is used.
-
- If an option change occurs inside a subpattern, the effect
- is different. This is a change of behaviour in Perl 5.005.
- An option change inside a subpattern affects only that part
- of the subpattern that follows it, so
-
- (a(?i)b)c
-
- matches abc and aBc and no other strings (assuming
- PCRE_CASELESS is not used). By this means, options can be
- made to have different settings in different parts of the
- pattern. Any changes made in one alternative do carry on
- into subsequent branches within the same subpattern. For
- example,
-
- (a(?i)b|c)
-
- matches "ab", "aB", "c", and "C", even though when matching
- "C" the first branch is abandoned before the option setting.
- This is because the effects of option settings happen at
- compile time. There would be some very weird behaviour oth-
- erwise.
-
- The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can
- be changed in the same way as the Perl-compatible options by
- using the characters U and X respectively. The (?X) flag
- setting is special in that it must always occur earlier in
- the pattern than any of the additional features it turns on,
- even when it is at top level. It is best put at the start.
-
-
-
-SUBPATTERNS
- Subpatterns are delimited by parentheses (round brackets),
- which can be nested. Marking part of a pattern as a subpat-
- tern does two things:
-
- 1. It localizes a set of alternatives. For example, the pat-
- tern
-
- cat(aract|erpillar|)
-
- matches one of the words "cat", "cataract", or "caterpil-
- lar". Without the parentheses, it would match "cataract",
- "erpillar" or the empty string.
-
- 2. It sets up the subpattern as a capturing subpattern (as
- defined above). When the whole pattern matches, that por-
- tion of the subject string that matched the subpattern is
- passed back to the caller via the ovector argument of
- pcre_exec(). Opening parentheses are counted from left to
- right (starting from 1) to obtain the numbers of the captur-
- ing subpatterns.
-
- For example, if the string "the red king" is matched against
- the pattern
-
- the ((red|white) (king|queen))
-
- the captured substrings are "red king", "red", and "king",
- and are numbered 1, 2, and 3.
-
- The fact that plain parentheses fulfil two functions is not
- always helpful. There are often times when a grouping sub-
- pattern is required without a capturing requirement. If an
- opening parenthesis is followed by "?:", the subpattern does
- not do any capturing, and is not counted when computing the
- number of any subsequent capturing subpatterns. For example,
- if the string "the white queen" is matched against the pat-
- tern
-
- the ((?:red|white) (king|queen))
-
- the captured substrings are "white queen" and "queen", and
- are numbered 1 and 2. The maximum number of captured sub-
- strings is 99, and the maximum number of all subpatterns,
- both capturing and non-capturing, is 200.
-
- As a convenient shorthand, if any option settings are
- required at the start of a non-capturing subpattern, the
- option letters may appear between the "?" and the ":". Thus
- the two patterns
-
- (?i:saturday|sunday)
- (?:(?i)saturday|sunday)
-
- match exactly the same set of strings. Because alternative
- branches are tried from left to right, and options are not
- reset until the end of the subpattern is reached, an option
- setting in one branch does affect subsequent branches, so
- the above patterns match "SUNDAY" as well as "Saturday".
-
-
-
-REPETITION
- Repetition is specified by quantifiers, which can follow any
- of the following items:
-
- a single character, possibly escaped
- the . metacharacter
- a character class
- a back reference (see next section)
- a parenthesized subpattern (unless it is an assertion -
- see below)
-
- The general repetition quantifier specifies a minimum and
- maximum number of permitted matches, by giving the two
- numbers in curly brackets (braces), separated by a comma.
- The numbers must be less than 65536, and the first must be
- less than or equal to the second. For example:
-
- z{2,4}
-
- matches "zz", "zzz", or "zzzz". A closing brace on its own
- is not a special character. If the second number is omitted,
- but the comma is present, there is no upper limit; if the
- second number and the comma are both omitted, the quantifier
- specifies an exact number of required matches. Thus
-
- [aeiou]{3,}
-
- matches at least 3 successive vowels, but may match many
- more, while
-
- \d{8}
-
- matches exactly 8 digits. An opening curly bracket that
- appears in a position where a quantifier is not allowed, or
- one that does not match the syntax of a quantifier, is taken
- as a literal character. For example, {,6} is not a quantif-
- ier, but a literal string of four characters.
-
- The quantifier {0} is permitted, causing the expression to
- behave as if the previous item and the quantifier were not
- present.
-
- For convenience (and historical compatibility) the three
- most common quantifiers have single-character abbreviations:
-
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-
- It is possible to construct infinite loops by following a
- subpattern that can match no characters with a quantifier
- that has no upper limit, for example:
-
- (a?)*
-
- Earlier versions of Perl and PCRE used to give an error at
- compile time for such patterns. However, because there are
- cases where this can be useful, such patterns are now
- accepted, but if any repetition of the subpattern does in
- fact match no characters, the loop is forcibly broken.
-
- By default, the quantifiers are "greedy", that is, they
- match as much as possible (up to the maximum number of per-
- mitted times), without causing the rest of the pattern to
- fail. The classic example of where this gives problems is in
- trying to match comments in C programs. These appear between
- the sequences /* and */ and within the sequence, individual
- * and / characters may appear. An attempt to match C com-
- ments by applying the pattern
-
- /\*.*\*/
-
- to the string
-
- /* first command */ not comment /* second comment */
-
- fails, because it matches the entire string owing to the
- greediness of the .* item.
-
- However, if a quantifier is followed by a question mark, it
- ceases to be greedy, and instead matches the minimum number
- of times possible, so the pattern
-
- /\*.*?\*/
-
- does the right thing with the C comments. The meaning of the
- various quantifiers is not otherwise changed, just the pre-
- ferred number of matches. Do not confuse this use of ques-
- tion mark with its use as a quantifier in its own right.
- Because it has two uses, it can sometimes appear doubled, as
- in
-
- \d??\d
-
- which matches one digit by preference, but can match two if
- that is the only way the rest of the pattern matches.
-
- If the PCRE_UNGREEDY option is set (an option which is not
- available in Perl), the quantifiers are not greedy by
- default, but individual ones can be made greedy by following
- them with a question mark. In other words, it inverts the
- default behaviour.
-
- When a parenthesized subpattern is quantified with a minimum
- repeat count that is greater than 1 or with a limited max-
- imum, more store is required for the compiled pattern, in
- proportion to the size of the minimum or maximum.
-
- If a pattern starts with .* or .{0,} and the PCRE_DOTALL
- option (equivalent to Perl's /s) is set, thus allowing the .
- to match newlines, the pattern is implicitly anchored,
- because whatever follows will be tried against every charac-
- ter position in the subject string, so there is no point in
- retrying the overall match at any position after the first.
- PCRE treats such a pattern as though it were preceded by \A.
- In cases where it is known that the subject string contains
- no newlines, it is worth setting PCRE_DOTALL when the pat-
- tern begins with .* in order to obtain this optimization, or
- alternatively using ^ to indicate anchoring explicitly.
-
- When a capturing subpattern is repeated, the value captured
- is the substring that matched the final iteration. For exam-
- ple, after
-
- (tweedle[dume]{3}\s*)+
-
- has matched "tweedledum tweedledee" the value of the cap-
- tured substring is "tweedledee". However, if there are
- nested capturing subpatterns, the corresponding captured
- values may have been set in previous iterations. For exam-
- ple, after
-
- /(a|(b))+/
-
- matches "aba" the value of the second captured substring is
- "b".
-
-
-
-BACK REFERENCES
- Outside a character class, a backslash followed by a digit
- greater than 0 (and possibly further digits) is a back
- reference to a capturing subpattern earlier (i.e. to its
- left) in the pattern, provided there have been that many
- previous capturing left parentheses.
-
- However, if the decimal number following the backslash is
- less than 10, it is always taken as a back reference, and
- causes an error only if there are not that many capturing
- left parentheses in the entire pattern. In other words, the
- parentheses that are referenced need not be to the left of
- the reference for numbers less than 10. See the section
- entitled "Backslash" above for further details of the han-
- dling of digits following a backslash.
-
- A back reference matches whatever actually matched the cap-
- turing subpattern in the current subject string, rather than
- anything matching the subpattern itself. So the pattern
-
- (sens|respons)e and \1ibility
-
- matches "sense and sensibility" and "response and responsi-
- bility", but not "sense and responsibility". If caseful
- matching is in force at the time of the back reference, the
- case of letters is relevant. For example,
-
- ((?i)rah)\s+\1
-
- matches "rah rah" and "RAH RAH", but not "RAH rah", even
- though the original capturing subpattern is matched case-
- lessly.
-
- There may be more than one back reference to the same sub-
- pattern. If a subpattern has not actually been used in a
- particular match, any back references to it always fail. For
- example, the pattern
-
- (a|(bc))\2
-
- always fails if it starts to match "a" rather than "bc".
- Because there may be up to 99 back references, all digits
- following the backslash are taken as part of a potential
- back reference number. If the pattern continues with a digit
- character, some delimiter must be used to terminate the back
- reference. If the PCRE_EXTENDED option is set, this can be
- whitespace. Otherwise an empty comment can be used.
-
- A back reference that occurs inside the parentheses to which
- it refers fails when the subpattern is first used, so, for
- example, (a\1) never matches. However, such references can
- be useful inside repeated subpatterns. For example, the pat-
- tern
-
- (a|b\1)+
-
- matches any number of "a"s and also "aba", "ababbaa" etc. At
- each iteration of the subpattern, the back reference matches
- the character string corresponding to the previous
- iteration. In order for this to work, the pattern must be
- such that the first iteration does not need to match the
- back reference. This can be done using alternation, as in
- the example above, or by a quantifier with a minimum of
- zero.
-
-
-
-ASSERTIONS
- An assertion is a test on the characters following or
- preceding the current matching point that does not actually
- consume any characters. The simple assertions coded as \b,
- \B, \A, \Z, \z, ^ and $ are described above. More compli-
- cated assertions are coded as subpatterns. There are two
- kinds: those that look ahead of the current position in the
- subject string, and those that look behind it.
-
- An assertion subpattern is matched in the normal way, except
- that it does not cause the current matching position to be
- changed. Lookahead assertions start with (?= for positive
- assertions and (?! for negative assertions. For example,
-
- \w+(?=;)
-
- matches a word followed by a semicolon, but does not include
- the semicolon in the match, and
-
- foo(?!bar)
-
- matches any occurrence of "foo" that is not followed by
- "bar". Note that the apparently similar pattern
-
- (?!foo)bar
-
- does not find an occurrence of "bar" that is preceded by
- something other than "foo"; it finds any occurrence of "bar"
- whatsoever, because the assertion (?!foo) is always true
- when the next three characters are "bar". A lookbehind
- assertion is needed to achieve this effect.
-
- Lookbehind assertions start with (?<= for positive asser-
- tions and (?<! for negative assertions. For example,
-
- (?<!foo)bar
-
- does find an occurrence of "bar" that is not preceded by
- "foo". The contents of a lookbehind assertion are restricted
- such that all the strings it matches must have a fixed
- length. However, if there are several alternatives, they do
- not all have to have the same fixed length. Thus
-
- (?<=bullock|donkey)
-
- is permitted, but
-
- (?<!dogs?|cats?)
-
- causes an error at compile time. Branches that match dif-
- ferent length strings are permitted only at the top level of
- a lookbehind assertion. This is an extension compared with
- Perl 5.005, which requires all branches to match the same
- length of string. An assertion such as
-
- (?<=ab(c|de))
-
- is not permitted, because its single top-level branch can
- match two different lengths, but it is acceptable if rewrit-
- ten to use two top-level branches:
-
- (?<=abc|abde)
-
- The implementation of lookbehind assertions is, for each
- alternative, to temporarily move the current position back
- by the fixed width and then try to match. If there are
- insufficient characters before the current position, the
- match is deemed to fail. Lookbehinds in conjunction with
- once-only subpatterns can be particularly useful for match-
- ing at the ends of strings; an example is given at the end
- of the section on once-only subpatterns.
-
- Several assertions (of any sort) may occur in succession.
- For example,
-
- (?<=\d{3})(?<!999)foo
-
- matches "foo" preceded by three digits that are not "999".
- Notice that each of the assertions is applied independently
- at the same point in the subject string. First there is a
- check that the previous three characters are all digits, and
- then there is a check that the same three characters are not
- "999". This pattern does not match "foo" preceded by six
- characters, the first of which are digits and the last three
- of which are not "999". For example, it doesn't match
- "123abcfoo". A pattern to do that is
-
- (?<=\d{3}...)(?<!999)foo
-
- This time the first assertion looks at the preceding six
- characters, checking that the first three are digits, and
- then the second assertion checks that the preceding three
- characters are not "999".
-
- Assertions can be nested in any combination. For example,
-
- (?<=(?<!foo)bar)baz
-
- matches an occurrence of "baz" that is preceded by "bar"
- which in turn is not preceded by "foo", while
-
- (?<=\d{3}(?!999)...)foo
-
- is another pattern which matches "foo" preceded by three
- digits and any three characters that are not "999".
-
- Assertion subpatterns are not capturing subpatterns, and may
- not be repeated, because it makes no sense to assert the
- same thing several times. If any kind of assertion contains
- capturing subpatterns within it, these are counted for the
- purposes of numbering the capturing subpatterns in the whole
- pattern. However, substring capturing is carried out only
- for positive assertions, because it does not make sense for
- negative assertions.
-
- Assertions count towards the maximum of 200 parenthesized
- subpatterns.
-
-
-
-ONCE-ONLY SUBPATTERNS
- With both maximizing and minimizing repetition, failure of
- what follows normally causes the repeated item to be re-
- evaluated to see if a different number of repeats allows the
- rest of the pattern to match. Sometimes it is useful to
- prevent this, either to change the nature of the match, or
- to cause it fail earlier than it otherwise might, when the
- author of the pattern knows there is no point in carrying
- on.
-
- Consider, for example, the pattern \d+foo when applied to
- the subject line
-
- 123456bar
-
- After matching all 6 digits and then failing to match "foo",
- the normal action of the matcher is to try again with only 5
- digits matching the \d+ item, and then with 4, and so on,
- before ultimately failing. Once-only subpatterns provide the
- means for specifying that once a portion of the pattern has
- matched, it is not to be re-evaluated in this way, so the
- matcher would give up immediately on failing to match "foo"
- the first time. The notation is another kind of special
- parenthesis, starting with (?> as in this example:
-
- (?>\d+)bar
-
- This kind of parenthesis "locks up" the part of the pattern
- it contains once it has matched, and a failure further into
- the pattern is prevented from backtracking into it.
- Backtracking past it to previous items, however, works as
- normal.
-
- An alternative description is that a subpattern of this type
- matches the string of characters that an identical stan-
- dalone pattern would match, if anchored at the current point
- in the subject string.
-
- Once-only subpatterns are not capturing subpatterns. Simple
- cases such as the above example can be thought of as a max-
- imizing repeat that must swallow everything it can. So,
- while both \d+ and \d+? are prepared to adjust the number of
- digits they match in order to make the rest of the pattern
- match, (?>\d+) can only match an entire sequence of digits.
-
- This construction can of course contain arbitrarily compli-
- cated subpatterns, and it can be nested.
-
- Once-only subpatterns can be used in conjunction with look-
- behind assertions to specify efficient matching at the end
- of the subject string. Consider a simple pattern such as
-
- abcd$
-
- when applied to a long string which does not match. Because
- matching proceeds from left to right, PCRE will look for
- each "a" in the subject and then see if what follows matches
- the rest of the pattern. If the pattern is specified as
-
- ^.*abcd$
-
- the initial .* matches the entire string at first, but when
- this fails (because there is no following "a"), it back-
- tracks to match all but the last character, then all but the
- last two characters, and so on. Once again the search for
- "a" covers the entire string, from right to left, so we are
- no better off. However, if the pattern is written as
-
- ^(?>.*)(?<=abcd)
-
- there can be no backtracking for the .* item; it can match
- only the entire string. The subsequent lookbehind assertion
- does a single test on the last four characters. If it fails,
- the match fails immediately. For long strings, this approach
- makes a significant difference to the processing time.
-
- When a pattern contains an unlimited repeat inside a subpat-
- tern that can itself be repeated an unlimited number of
- times, the use of a once-only subpattern is the only way to
- avoid some failing matches taking a very long time indeed.
- The pattern
-
- (\D+|<\d+>)*[!?]
-
- matches an unlimited number of substrings that either con-
- sist of non-digits, or digits enclosed in <>, followed by
- either ! or ?. When it matches, it runs quickly. However, if
- it is applied to
-
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
- it takes a long time before reporting failure. This is
- because the string can be divided between the two repeats in
- a large number of ways, and all have to be tried. (The exam-
- ple used [!?] rather than a single character at the end,
- because both PCRE and Perl have an optimization that allows
- for fast failure when a single character is used. They
- remember the last single character that is required for a
- match, and fail early if it is not present in the string.)
- If the pattern is changed to
-
- ((?>\D+)|<\d+>)*[!?]
-
- sequences of non-digits cannot be broken, and failure hap-
- pens quickly.
-
-
-
-CONDITIONAL SUBPATTERNS
- It is possible to cause the matching process to obey a sub-
- pattern conditionally or to choose between two alternative
- subpatterns, depending on the result of an assertion, or
- whether a previous capturing subpattern matched or not. The
- two possible forms of conditional subpattern are
-
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-
- If the condition is satisfied, the yes-pattern is used; oth-
- erwise the no-pattern (if present) is used. If there are
- more than two alternatives in the subpattern, a compile-time
- error occurs.
-
- There are two kinds of condition. If the text between the
- parentheses consists of a sequence of digits, the condition
- is satisfied if the capturing subpattern of that number has
- previously matched. The number must be greater than zero.
- Consider the following pattern, which contains non-
- significant white space to make it more readable (assume the
- PCRE_EXTENDED option) and to divide it into three parts for
- ease of discussion:
-
- ( \( )? [^()]+ (?(1) \) )
-
- The first part matches an optional opening parenthesis, and
- if that character is present, sets it as the first captured
- substring. The second part matches one or more characters
- that are not parentheses. The third part is a conditional
- subpattern that tests whether the first set of parentheses
- matched or not. If they did, that is, if subject started
- with an opening parenthesis, the condition is true, and so
- the yes-pattern is executed and a closing parenthesis is
- required. Otherwise, since no-pattern is not present, the
- subpattern matches nothing. In other words, this pattern
- matches a sequence of non-parentheses, optionally enclosed
- in parentheses.
-
- If the condition is not a sequence of digits, it must be an
- assertion. This may be a positive or negative lookahead or
- lookbehind assertion. Consider this pattern, again contain-
- ing non-significant white space, and with the two alterna-
- tives on the second line:
-
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
-
- The condition is a positive lookahead assertion that matches
- an optional sequence of non-letters followed by a letter. In
- other words, it tests for the presence of at least one
- letter in the subject. If a letter is found, the subject is
- matched against the first alternative; otherwise it is
- matched against the second. This pattern matches strings in
- one of the two forms dd-aaa-dd or dd-dd-dd, where aaa are
- letters and dd are digits.
-
-
-
-COMMENTS
- The sequence (?# marks the start of a comment which contin-
- ues up to the next closing parenthesis. Nested parentheses
- are not permitted. The characters that make up a comment
- play no part in the pattern matching at all.
-
- If the PCRE_EXTENDED option is set, an unescaped # character
- outside a character class introduces a comment that contin-
- ues up to the next newline character in the pattern.
-
-
-
-RECURSIVE PATTERNS
- Consider the problem of matching a string in parentheses,
- allowing for unlimited nested parentheses. Without the use
- of recursion, the best that can be done is to use a pattern
- that matches up to some fixed depth of nesting. It is not
- possible to handle an arbitrary nesting depth. Perl 5.6 has
- provided an experimental facility that allows regular
- expressions to recurse (amongst other things). It does this
- by interpolating Perl code in the expression at run time,
- and the code can refer to the expression itself. A Perl pat-
- tern to solve the parentheses problem can be created like
- this:
-
- $re = qr{\( (?: (?>[^()]+) | (?p{$re}) )* \)}x;
-
- The (?p{...}) item interpolates Perl code at run time, and
- in this case refers recursively to the pattern in which it
- appears. Obviously, PCRE cannot support the interpolation of
- Perl code. Instead, the special item (?R) is provided for
- the specific case of recursion. This PCRE pattern solves the
- parentheses problem (assume the PCRE_EXTENDED option is set
- so that white space is ignored):
-
- \( ( (?>[^()]+) | (?R) )* \)
-
- First it matches an opening parenthesis. Then it matches any
- number of substrings which can either be a sequence of non-
- parentheses, or a recursive match of the pattern itself
- (i.e. a correctly parenthesized substring). Finally there is
- a closing parenthesis.
-
- This particular example pattern contains nested unlimited
- repeats, and so the use of a once-only subpattern for match-
- ing strings of non-parentheses is important when applying
- the pattern to strings that do not match. For example, when
- it is applied to
-
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
- it yields "no match" quickly. However, if a once-only sub-
- pattern is not used, the match runs for a very long time
- indeed because there are so many different ways the + and *
- repeats can carve up the subject, and all have to be tested
- before failure can be reported.
-
- The values set for any capturing subpatterns are those from
- the outermost level of the recursion at which the subpattern
- value is set. If the pattern above is matched against
-
- (ab(cd)ef)
-
- the value for the capturing parentheses is "ef", which is
- the last value taken on at the top level. If additional
- parentheses are added, giving
-
- \( ( ( (?>[^()]+) | (?R) )* ) \)
- ^ ^
- ^ ^ the string they capture is
- "ab(cd)ef", the contents of the top level parentheses. If
- there are more than 15 capturing parentheses in a pattern,
- PCRE has to obtain extra memory to store data during a
- recursion, which it does by using pcre_malloc, freeing it
- via pcre_free afterwards. If no memory can be obtained, it
- saves data for the first 15 capturing parentheses only, as
- there is no way to give an out-of-memory error from within a
- recursion.
-
-
-
-PERFORMANCE
- Certain items that may appear in patterns are more efficient
- than others. It is more efficient to use a character class
- like [aeiou] than a set of alternatives such as (a|e|i|o|u).
- In general, the simplest construction that provides the
- required behaviour is usually the most efficient. Jeffrey
- Friedl's book contains a lot of discussion about optimizing
- regular expressions for efficient performance.
-
- When a pattern begins with .* and the PCRE_DOTALL option is
- set, the pattern is implicitly anchored by PCRE, since it
- can match only at the start of a subject string. However, if
- PCRE_DOTALL is not set, PCRE cannot make this optimization,
- because the . metacharacter does not then match a newline,
- and if the subject string contains newlines, the pattern may
- match from the character immediately following one of them
- instead of from the very start. For example, the pattern
-
- (.*) second
-
- matches the subject "first\nand second" (where \n stands for
- a newline character) with the first captured substring being
- "and". In order to do this, PCRE has to retry the match
- starting after every newline in the subject.
-
- If you are using such a pattern with subject strings that do
- not contain newlines, the best performance is obtained by
- setting PCRE_DOTALL, or starting the pattern with ^.* to
- indicate explicit anchoring. That saves PCRE from having to
- scan along the subject looking for a newline to restart at.
-
- Beware of patterns that contain nested indefinite repeats.
- These can take a long time to run when applied to a string
- that does not match. Consider the pattern fragment
-
- (a+)*
-
- This can match "aaaa" in 33 different ways, and this number
- increases very rapidly as the string gets longer. (The *
- repeat can match 0, 1, 2, 3, or 4 times, and for each of
- those cases other than 0, the + repeats can match different
- numbers of times.) When the remainder of the pattern is such
- that the entire match is going to fail, PCRE has in princi-
- ple to try every possible variation, and this can take an
- extremely long time.
-
- An optimization catches some of the more simple cases such
- as
-
- (a+)*b
-
- where a literal character follows. Before embarking on the
- standard matching procedure, PCRE checks that there is a "b"
- later in the subject string, and if there is not, it fails
- the match immediately. However, when there is no following
- literal this optimization cannot be used. You can see the
- difference by comparing the behaviour of
-
- (a+)*\d
-
- with the pattern above. The former gives a failure almost
- instantly when applied to a whole line of "a" characters,
- whereas the latter takes an appreciable time with strings
- longer than about 20 characters.
-
-
-
-UTF-8 SUPPORT
- Starting at release 3.3, PCRE has some support for character
- strings encoded in the UTF-8 format. This is incomplete, and
- is regarded as experimental. In order to use it, you must
- configure PCRE to include UTF-8 support in the code, and, in
- addition, you must call pcre_compile() with the PCRE_UTF8
- option flag. When you do this, both the pattern and any sub-
- ject strings that are matched against it are treated as
- UTF-8 strings instead of just strings of bytes, but only in
- the cases that are mentioned below.
-
- If you compile PCRE with UTF-8 support, but do not use it at
- run time, the library will be a bit bigger, but the addi-
- tional run time overhead is limited to testing the PCRE_UTF8
- flag in several places, so should not be very large.
-
- PCRE assumes that the strings it is given contain valid
- UTF-8 codes. It does not diagnose invalid UTF-8 strings. If
- you pass invalid UTF-8 strings to PCRE, the results are
- undefined.
-
- Running with PCRE_UTF8 set causes these changes in the way
- PCRE works:
-
- 1. In a pattern, the escape sequence \x{...}, where the con-
- tents of the braces is a string of hexadecimal digits, is
- interpreted as a UTF-8 character whose code number is the
- given hexadecimal number, for example: \x{1234}. This
- inserts from one to six literal bytes into the pattern,
- using the UTF-8 encoding. If a non-hexadecimal digit appears
- between the braces, the item is not recognized.
-
- 2. The original hexadecimal escape sequence, \xhh, generates
- a two-byte UTF-8 character if its value is greater than 127.
-
- 3. Repeat quantifiers are NOT correctly handled if they fol-
- low a multibyte character. For example, \x{100}* and \xc3+
- do not work. If you want to repeat such characters, you must
- enclose them in non-capturing parentheses, for example
- (?:\x{100}), at present.
-
- 4. The dot metacharacter matches one UTF-8 character instead
- of a single byte.
-
- 5. Unlike literal UTF-8 characters, the dot metacharacter
- followed by a repeat quantifier does operate correctly on
- UTF-8 characters instead of single bytes.
-
- 4. Although the \x{...} escape is permitted in a character
- class, characters whose values are greater than 255 cannot
- be included in a class.
-
- 5. A class is matched against a UTF-8 character instead of
- just a single byte, but it can match only characters whose
- values are less than 256. Characters with greater values
- always fail to match a class.
-
- 6. Repeated classes work correctly on multiple characters.
-
- 7. Classes containing just a single character whose value is
- greater than 127 (but less than 256), for example, [\x80] or
- [^\x{93}], do not work because these are optimized into sin-
- gle byte matches. In the first case, of course, the class
- brackets are just redundant.
-
- 8. Lookbehind assertions move backwards in the subject by a
- fixed number of characters instead of a fixed number of
- bytes. Simple cases have been tested to work correctly, but
- there may be hidden gotchas herein.
-
- 9. The character types such as \d and \w do not work
- correctly with UTF-8 characters. They continue to test a
- single byte.
-
- 10. Anything not explicitly mentioned here continues to work
- in bytes rather than in characters.
-
- The following UTF-8 features of Perl 5.6 are not imple-
- mented:
- 1. The escape sequence \C to match a single byte.
-
- 2. The use of Unicode tables and properties and escapes \p,
- \P, and \X.
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- New Museums Site,
- Cambridge CB2 3QG, England.
- Phone: +44 1223 334714
-
- Last updated: 28 August 2000,
- the 250th anniversary of the death of J.S. Bach.
- Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcregrep.1 b/ext/pcre/pcrelib/doc/pcregrep.1
deleted file mode 100644
index 41b9051037..0000000000
--- a/ext/pcre/pcrelib/doc/pcregrep.1
+++ /dev/null
@@ -1,76 +0,0 @@
-.TH PCREGREP 1
-.SH NAME
-pcregrep - a grep with Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B pcregrep [-Vchilnsvx] pattern [file] ...
-
-
-.SH DESCRIPTION
-\fBpcregrep\fR searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-\fBpcre(3)\fR for a full description of syntax and semantics.
-
-If no files are specified, \fBpcregrep\fR reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how \fBpcregrep\fR behaves.
-
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in \fB<stdio.h>\fR.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-
-
-.SH OPTIONS
-.TP 10
-\fB-V\fR
-Write the version number of the PCRE library being used to the standard error
-stream.
-.TP
-\fB-c\fR
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-.TP
-\fB-h\fR
-Suppress printing of filenames when searching multiple files.
-.TP
-\fB-i\fR
-Ignore upper/lower case distinctions during comparisons.
-.TP
-\fB-l\fR
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-.TP
-\fB-n\fR
-Precede each line by its line number in the file.
-.TP
-\fB-s\fR
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-.TP
-\fB-v\fR
-Invert the sense of the match, so that lines which do \fInot\fR match the
-pattern are now the ones that are found.
-.TP
-\fB-x\fR
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-
-
-.SH SEE ALSO
-\fBpcre(3)\fR, Perl 5 documentation
-
-
-.SH DIAGNOSTICS
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcregrep.html b/ext/pcre/pcrelib/doc/pcregrep.html
deleted file mode 100644
index 77da7c426c..0000000000
--- a/ext/pcre/pcrelib/doc/pcregrep.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcregrep specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcregrep specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">OPTIONS</A>
-<LI><A NAME="TOC5" HREF="#SEC5">SEE ALSO</A>
-<LI><A NAME="TOC6" HREF="#SEC6">DIAGNOSTICS</A>
-<LI><A NAME="TOC7" HREF="#SEC7">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcregrep - a grep with Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>pcregrep [-Vchilnsvx] pattern [file] ...</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-<B>pcregrep</B> searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-<B>pcre(3)</B> for a full description of syntax and semantics.
-</P>
-<P>
-If no files are specified, <B>pcregrep</B> reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how <B>pcregrep</B> behaves.
-</P>
-<P>
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in <B>&#60;stdio.h&#62;</B>.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">OPTIONS</A>
-<P>
-<B>-V</B>
-Write the version number of the PCRE library being used to the standard error
-stream.
-</P>
-<P>
-<B>-c</B>
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-</P>
-<P>
-<B>-h</B>
-Suppress printing of filenames when searching multiple files.
-</P>
-<P>
-<B>-i</B>
-Ignore upper/lower case distinctions during comparisons.
-</P>
-<P>
-<B>-l</B>
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-</P>
-<P>
-<B>-n</B>
-Precede each line by its line number in the file.
-</P>
-<P>
-<B>-s</B>
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-</P>
-<P>
-<B>-v</B>
-Invert the sense of the match, so that lines which do <I>not</I> match the
-pattern are now the ones that are found.
-</P>
-<P>
-<B>-x</B>
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">SEE ALSO</A>
-<P>
-<B>pcre(3)</B>, Perl 5 documentation
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">DIAGNOSTICS</A>
-<P>
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcregrep.txt b/ext/pcre/pcrelib/doc/pcregrep.txt
deleted file mode 100644
index 3483f9e158..0000000000
--- a/ext/pcre/pcrelib/doc/pcregrep.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-NAME
- pcregrep - a grep with Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
- pcregrep [-Vchilnsvx] pattern [file] ...
-
-
-
-DESCRIPTION
- pcregrep searches files for character patterns, in the same
- way as other grep commands do, but it uses the PCRE regular
- expression library to support patterns that are compatible
- with the regular expressions of Perl 5. See pcre(3) for a
- full description of syntax and semantics.
-
- If no files are specified, pcregrep reads the standard
- input. By default, each line that matches the pattern is
- copied to the standard output, and if there is more than one
- file, the file name is printed before each line of output.
- However, there are options that can change how pcregrep
- behaves.
-
- Lines are limited to BUFSIZ characters. BUFSIZ is defined in
- <stdio.h>. The newline character is removed from the end of
- each line before it is matched against the pattern.
-
-
-
-OPTIONS
- -V Write the version number of the PCRE library being
- used to the standard error stream.
-
- -c Do not print individual lines; instead just print
- a count of the number of lines that would other-
- wise have been printed. If several files are
- given, a count is printed for each of them.
-
- -h Suppress printing of filenames when searching mul-
- tiple files.
-
- -i Ignore upper/lower case distinctions during com-
- parisons.
-
- -l Instead of printing lines from the files, just
- print the names of the files containing lines that
- would have been printed. Each file name is printed
- once, on a separate line.
-
- -n Precede each line by its line number in the file.
-
- -s Work silently, that is, display nothing except
- error messages. The exit status indicates whether
- any matches were found.
-
- -v Invert the sense of the match, so that lines which
- do not match the pattern are now the ones that are
- found.
-
- -x Force the pattern to be anchored (it must start
- matching at the beginning of the line) and in
- addition, require it to match the entire line.
- This is equivalent to having ^ and $ characters at
- the start and end of each alternative branch in
- the regular expression.
-
-
-
-SEE ALSO
- pcre(3), Perl 5 documentation
-
-
-
-
-
-DIAGNOSTICS
- Exit status is 0 if any matches were found, 1 if no matches
- were found, and 2 for syntax errors or inacessible files
- (even if matches were found).
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- Copyright (c) 1997-2000 University of Cambridge.
-
diff --git a/ext/pcre/pcrelib/doc/pcreposix.3 b/ext/pcre/pcrelib/doc/pcreposix.3
deleted file mode 100644
index 41716ead91..0000000000
--- a/ext/pcre/pcrelib/doc/pcreposix.3
+++ /dev/null
@@ -1,149 +0,0 @@
-.TH PCRE 3
-.SH NAME
-pcreposix - POSIX API for Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B #include <pcreposix.h>
-.PP
-.SM
-.br
-.B int regcomp(regex_t *\fIpreg\fR, const char *\fIpattern\fR,
-.ti +5n
-.B int \fIcflags\fR);
-.PP
-.br
-.B int regexec(regex_t *\fIpreg\fR, const char *\fIstring\fR,
-.ti +5n
-.B size_t \fInmatch\fR, regmatch_t \fIpmatch\fR[], int \fIeflags\fR);
-.PP
-.br
-.B size_t regerror(int \fIerrcode\fR, const regex_t *\fIpreg\fR,
-.ti +5n
-.B char *\fIerrbuf\fR, size_t \fIerrbuf_size\fR);
-.PP
-.br
-.B void regfree(regex_t *\fIpreg\fR);
-
-
-.SH DESCRIPTION
-This set of functions provides a POSIX-style API to the PCRE regular expression
-package. See the \fBpcre\fR documentation for a description of the native API,
-which contains additional functionality.
-
-The functions described here are just wrapper functions that ultimately call
-the native API. Their prototypes are defined in the \fBpcreposix.h\fR header
-file, and on Unix systems the library itself is called \fBpcreposix.a\fR, so
-can be accessed by adding \fB-lpcreposix\fR to the command for linking an
-application which uses them. Because the POSIX functions call the native ones,
-it is also necessary to add \fR-lpcre\fR.
-
-I have implemented only those option bits that can be reasonably mapped to PCRE
-native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
-with the value zero. They have no effect, but since programs that are written
-to the POSIX interface often use them, this makes it easier to slot in PCRE as
-a replacement library. Other POSIX options are not even defined.
-
-When PCRE is called via these functions, it is only the API that is POSIX-like
-in style. The syntax and semantics of the regular expressions themselves are
-still those of Perl, subject to the setting of various PCRE options, as
-described below.
-
-The header for these functions is supplied as \fBpcreposix.h\fR to avoid any
-potential clash with other POSIX libraries. It can, of course, be renamed or
-aliased as \fBregex.h\fR, which is the "correct" name. It provides two
-structure types, \fIregex_t\fR for compiled internal forms, and
-\fIregmatch_t\fR for returning captured substrings. It also defines some
-constants whose names start with "REG_"; these are used for setting options and
-identifying error codes.
-
-
-.SH COMPILING A PATTERN
-
-The function \fBregcomp()\fR is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument \fIpattern\fR. The \fIpreg\fR argument is a pointer
-to a regex_t structure which is used as a base for storing information about
-the compiled expression.
-
-The argument \fIcflags\fR is either zero, or contains one or more of the bits
-defined by the following macros:
-
- REG_ICASE
-
-The PCRE_CASELESS option is set when the expression is passed for compilation
-to the native function.
-
- REG_NEWLINE
-
-The PCRE_MULTILINE option is set when the expression is passed for compilation
-to the native function.
-
-In the absence of these flags, no options are passed to the native function.
-This means the the regex is compiled with PCRE default semantics. In
-particular, the way it handles newline characters in the subject string is the
-Perl way, not the POSIX way. Note that setting PCRE_MULTILINE has only
-\fIsome\fR of the effects specified for REG_NEWLINE. It does not affect the way
-newlines are matched by . (they aren't) or a negative class such as [^a] (they
-are).
-
-The yield of \fBregcomp()\fR is zero on success, and non-zero otherwise. The
-\fIpreg\fR structure is filled in on success, and one member of the structure
-is publicized: \fIre_nsub\fR contains the number of capturing subpatterns in
-the regular expression. Various error codes are defined in the header file.
-
-
-.SH MATCHING A PATTERN
-The function \fBregexec()\fR is called to match a pre-compiled pattern
-\fIpreg\fR against a given \fIstring\fR, which is terminated by a zero byte,
-subject to the options in \fIeflags\fR. These can be:
-
- REG_NOTBOL
-
-The PCRE_NOTBOL option is set when calling the underlying PCRE matching
-function.
-
- REG_NOTEOL
-
-The PCRE_NOTEOL option is set when calling the underlying PCRE matching
-function.
-
-The portion of the string that was matched, and also any captured substrings,
-are returned via the \fIpmatch\fR argument, which points to an array of
-\fInmatch\fR structures of type \fIregmatch_t\fR, containing the members
-\fIrm_so\fR and \fIrm_eo\fR. These contain the offset to the first character of
-each substring and the offset to the first character after the end of each
-substring, respectively. The 0th element of the vector relates to the entire
-portion of \fIstring\fR that was matched; subsequent elements relate to the
-capturing subpatterns of the regular expression. Unused entries in the array
-have both structure members set to -1.
-
-A successful match yields a zero return; various error codes are defined in the
-header file, of which REG_NOMATCH is the "expected" failure code.
-
-
-.SH ERROR MESSAGES
-The \fBregerror()\fR function maps a non-zero errorcode from either
-\fBregcomp\fR or \fBregexec\fR to a printable message. If \fIpreg\fR is not
-NULL, the error should have arisen from the use of that structure. A message
-terminated by a binary zero is placed in \fIerrbuf\fR. The length of the
-message, including the zero, is limited to \fIerrbuf_size\fR. The yield of the
-function is the size of buffer needed to hold the whole message.
-
-
-.SH STORAGE
-Compiling a regular expression causes memory to be allocated and associated
-with the \fIpreg\fR structure. The function \fBregfree()\fR frees all such
-memory, after which \fIpreg\fR may no longer be used as a compiled expression.
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcreposix.html b/ext/pcre/pcrelib/doc/pcreposix.html
deleted file mode 100644
index 9c89478420..0000000000
--- a/ext/pcre/pcrelib/doc/pcreposix.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcreposix specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcreposix specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">COMPILING A PATTERN</A>
-<LI><A NAME="TOC5" HREF="#SEC5">MATCHING A PATTERN</A>
-<LI><A NAME="TOC6" HREF="#SEC6">ERROR MESSAGES</A>
-<LI><A NAME="TOC7" HREF="#SEC7">STORAGE</A>
-<LI><A NAME="TOC8" HREF="#SEC8">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcreposix - POSIX API for Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>#include &#60;pcreposix.h&#62;</B>
-</P>
-<P>
-<B>int regcomp(regex_t *<I>preg</I>, const char *<I>pattern</I>,</B>
-<B>int <I>cflags</I>);</B>
-</P>
-<P>
-<B>int regexec(regex_t *<I>preg</I>, const char *<I>string</I>,</B>
-<B>size_t <I>nmatch</I>, regmatch_t <I>pmatch</I>[], int <I>eflags</I>);</B>
-</P>
-<P>
-<B>size_t regerror(int <I>errcode</I>, const regex_t *<I>preg</I>,</B>
-<B>char *<I>errbuf</I>, size_t <I>errbuf_size</I>);</B>
-</P>
-<P>
-<B>void regfree(regex_t *<I>preg</I>);</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-This set of functions provides a POSIX-style API to the PCRE regular expression
-package. See the <B>pcre</B> documentation for a description of the native API,
-which contains additional functionality.
-</P>
-<P>
-The functions described here are just wrapper functions that ultimately call
-the native API. Their prototypes are defined in the <B>pcreposix.h</B> header
-file, and on Unix systems the library itself is called <B>pcreposix.a</B>, so
-can be accessed by adding <B>-lpcreposix</B> to the command for linking an
-application which uses them. Because the POSIX functions call the native ones,
-it is also necessary to add \fR-lpcre\fR.
-</P>
-<P>
-I have implemented only those option bits that can be reasonably mapped to PCRE
-native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
-with the value zero. They have no effect, but since programs that are written
-to the POSIX interface often use them, this makes it easier to slot in PCRE as
-a replacement library. Other POSIX options are not even defined.
-</P>
-<P>
-When PCRE is called via these functions, it is only the API that is POSIX-like
-in style. The syntax and semantics of the regular expressions themselves are
-still those of Perl, subject to the setting of various PCRE options, as
-described below.
-</P>
-<P>
-The header for these functions is supplied as <B>pcreposix.h</B> to avoid any
-potential clash with other POSIX libraries. It can, of course, be renamed or
-aliased as <B>regex.h</B>, which is the "correct" name. It provides two
-structure types, <I>regex_t</I> for compiled internal forms, and
-<I>regmatch_t</I> for returning captured substrings. It also defines some
-constants whose names start with "REG_"; these are used for setting options and
-identifying error codes.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">COMPILING A PATTERN</A>
-<P>
-The function <B>regcomp()</B> is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument <I>pattern</I>. The <I>preg</I> argument is a pointer
-to a regex_t structure which is used as a base for storing information about
-the compiled expression.
-</P>
-<P>
-The argument <I>cflags</I> is either zero, or contains one or more of the bits
-defined by the following macros:
-</P>
-<P>
-<PRE>
- REG_ICASE
-</PRE>
-</P>
-<P>
-The PCRE_CASELESS option is set when the expression is passed for compilation
-to the native function.
-</P>
-<P>
-<PRE>
- REG_NEWLINE
-</PRE>
-</P>
-<P>
-The PCRE_MULTILINE option is set when the expression is passed for compilation
-to the native function.
-</P>
-<P>
-In the absence of these flags, no options are passed to the native function.
-This means the the regex is compiled with PCRE default semantics. In
-particular, the way it handles newline characters in the subject string is the
-Perl way, not the POSIX way. Note that setting PCRE_MULTILINE has only
-<I>some</I> of the effects specified for REG_NEWLINE. It does not affect the way
-newlines are matched by . (they aren't) or a negative class such as [^a] (they
-are).
-</P>
-<P>
-The yield of <B>regcomp()</B> is zero on success, and non-zero otherwise. The
-<I>preg</I> structure is filled in on success, and one member of the structure
-is publicized: <I>re_nsub</I> contains the number of capturing subpatterns in
-the regular expression. Various error codes are defined in the header file.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">MATCHING A PATTERN</A>
-<P>
-The function <B>regexec()</B> is called to match a pre-compiled pattern
-<I>preg</I> against a given <I>string</I>, which is terminated by a zero byte,
-subject to the options in <I>eflags</I>. These can be:
-</P>
-<P>
-<PRE>
- REG_NOTBOL
-</PRE>
-</P>
-<P>
-The PCRE_NOTBOL option is set when calling the underlying PCRE matching
-function.
-</P>
-<P>
-<PRE>
- REG_NOTEOL
-</PRE>
-</P>
-<P>
-The PCRE_NOTEOL option is set when calling the underlying PCRE matching
-function.
-</P>
-<P>
-The portion of the string that was matched, and also any captured substrings,
-are returned via the <I>pmatch</I> argument, which points to an array of
-<I>nmatch</I> structures of type <I>regmatch_t</I>, containing the members
-<I>rm_so</I> and <I>rm_eo</I>. These contain the offset to the first character of
-each substring and the offset to the first character after the end of each
-substring, respectively. The 0th element of the vector relates to the entire
-portion of <I>string</I> that was matched; subsequent elements relate to the
-capturing subpatterns of the regular expression. Unused entries in the array
-have both structure members set to -1.
-</P>
-<P>
-A successful match yields a zero return; various error codes are defined in the
-header file, of which REG_NOMATCH is the "expected" failure code.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">ERROR MESSAGES</A>
-<P>
-The <B>regerror()</B> function maps a non-zero errorcode from either
-<B>regcomp</B> or <B>regexec</B> to a printable message. If <I>preg</I> is not
-NULL, the error should have arisen from the use of that structure. A message
-terminated by a binary zero is placed in <I>errbuf</I>. The length of the
-message, including the zero, is limited to <I>errbuf_size</I>. The yield of the
-function is the size of buffer needed to hold the whole message.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">STORAGE</A>
-<P>
-Compiling a regular expression causes memory to be allocated and associated
-with the <I>preg</I> structure. The function <B>regfree()</B> frees all such
-memory, after which <I>preg</I> may no longer be used as a compiled expression.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcreposix.txt b/ext/pcre/pcrelib/doc/pcreposix.txt
deleted file mode 100644
index 2d76f7cdcc..0000000000
--- a/ext/pcre/pcrelib/doc/pcreposix.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-NAME
- pcreposix - POSIX API for Perl-compatible regular expres-
- sions.
-
-
-
-SYNOPSIS
- #include <pcreposix.h>
-
- int regcomp(regex_t *preg, const char *pattern,
- int cflags);
-
- int regexec(regex_t *preg, const char *string,
- size_t nmatch, regmatch_t pmatch[], int eflags);
-
- size_t regerror(int errcode, const regex_t *preg,
- char *errbuf, size_t errbuf_size);
-
- void regfree(regex_t *preg);
-
-
-
-DESCRIPTION
- This set of functions provides a POSIX-style API to the PCRE
- regular expression package. See the pcre documentation for a
- description of the native API, which contains additional
- functionality.
-
- The functions described here are just wrapper functions that
- ultimately call the native API. Their prototypes are defined
- in the pcreposix.h header file, and on Unix systems the
- library itself is called pcreposix.a, so can be accessed by
- adding -lpcreposix to the command for linking an application
- which uses them. Because the POSIX functions call the native
- ones, it is also necessary to add -lpcre.
-
- I have implemented only those option bits that can be rea-
- sonably mapped to PCRE native options. In addition, the
- options REG_EXTENDED and REG_NOSUB are defined with the
- value zero. They have no effect, but since programs that are
- written to the POSIX interface often use them, this makes it
- easier to slot in PCRE as a replacement library. Other POSIX
- options are not even defined.
-
- When PCRE is called via these functions, it is only the API
- that is POSIX-like in style. The syntax and semantics of the
- regular expressions themselves are still those of Perl, sub-
- ject to the setting of various PCRE options, as described
- below.
-
- The header for these functions is supplied as pcreposix.h to
- avoid any potential clash with other POSIX libraries. It
- can, of course, be renamed or aliased as regex.h, which is
- the "correct" name. It provides two structure types, regex_t
- for compiled internal forms, and regmatch_t for returning
- captured substrings. It also defines some constants whose
- names start with "REG_"; these are used for setting options
- and identifying error codes.
-
-
-
-COMPILING A PATTERN
- The function regcomp() is called to compile a pattern into
- an internal form. The pattern is a C string terminated by a
- binary zero, and is passed in the argument pattern. The preg
- argument is a pointer to a regex_t structure which is used
- as a base for storing information about the compiled expres-
- sion.
-
- The argument cflags is either zero, or contains one or more
- of the bits defined by the following macros:
-
- REG_ICASE
-
- The PCRE_CASELESS option is set when the expression is
- passed for compilation to the native function.
-
- REG_NEWLINE
-
- The PCRE_MULTILINE option is set when the expression is
- passed for compilation to the native function.
-
- In the absence of these flags, no options are passed to the
- native function. This means the the regex is compiled with
- PCRE default semantics. In particular, the way it handles
- newline characters in the subject string is the Perl way,
- not the POSIX way. Note that setting PCRE_MULTILINE has only
- some of the effects specified for REG_NEWLINE. It does not
- affect the way newlines are matched by . (they aren't) or a
- negative class such as [^a] (they are).
-
- The yield of regcomp() is zero on success, and non-zero oth-
- erwise. The preg structure is filled in on success, and one
- member of the structure is publicized: re_nsub contains the
- number of capturing subpatterns in the regular expression.
- Various error codes are defined in the header file.
-
-
-
-MATCHING A PATTERN
- The function regexec() is called to match a pre-compiled
- pattern preg against a given string, which is terminated by
- a zero byte, subject to the options in eflags. These can be:
-
- REG_NOTBOL
-
- The PCRE_NOTBOL option is set when calling the underlying
- PCRE matching function.
-
- REG_NOTEOL
-
- The PCRE_NOTEOL option is set when calling the underlying
- PCRE matching function.
-
- The portion of the string that was matched, and also any
- captured substrings, are returned via the pmatch argument,
- which points to an array of nmatch structures of type
- regmatch_t, containing the members rm_so and rm_eo. These
- contain the offset to the first character of each substring
- and the offset to the first character after the end of each
- substring, respectively. The 0th element of the vector
- relates to the entire portion of string that was matched;
- subsequent elements relate to the capturing subpatterns of
- the regular expression. Unused entries in the array have
- both structure members set to -1.
-
- A successful match yields a zero return; various error codes
- are defined in the header file, of which REG_NOMATCH is the
- "expected" failure code.
-
-
-
-ERROR MESSAGES
- The regerror() function maps a non-zero errorcode from
- either regcomp or regexec to a printable message. If preg is
- not NULL, the error should have arisen from the use of that
- structure. A message terminated by a binary zero is placed
- in errbuf. The length of the message, including the zero, is
- limited to errbuf_size. The yield of the function is the
- size of buffer needed to hold the whole message.
-
-
-
-STORAGE
- Compiling a regular expression causes memory to be allocated
- and associated with the preg structure. The function reg-
- free() frees all such memory, after which preg may no longer
- be used as a compiled expression.
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- New Museums Site,
- Cambridge CB2 3QG, England.
- Phone: +44 1223 334714
-
- Copyright (c) 1997-2000 University of Cambridge.
diff --git a/ext/pcre/pcrelib/doc/pcretest.txt b/ext/pcre/pcrelib/doc/pcretest.txt
deleted file mode 100644
index add2979f14..0000000000
--- a/ext/pcre/pcrelib/doc/pcretest.txt
+++ /dev/null
@@ -1,246 +0,0 @@
-The pcretest program
---------------------
-
-This program is intended for testing PCRE, but it can also be used for
-experimenting with regular expressions.
-
-If it is given two filename arguments, it reads from the first and writes to
-the second. If it is given only one filename argument, it reads from that file
-and writes to stdout. Otherwise, it reads from stdin and writes to stdout, and
-prompts for each line of input, using "re>" to prompt for regular expressions,
-and "data>" to prompt for data lines.
-
-The program handles any number of sets of input on a single input file. Each
-set starts with a regular expression, and continues with any number of data
-lines to be matched against the pattern. An empty line signals the end of the
-data lines, at which point a new regular expression is read. The regular
-expressions are given enclosed in any non-alphameric delimiters other than
-backslash, for example
-
- /(a|bc)x+yz/
-
-White space before the initial delimiter is ignored. A regular expression may
-be continued over several input lines, in which case the newline characters are
-included within it. See the test input files in the testdata directory for many
-examples. It is possible to include the delimiter within the pattern by
-escaping it, for example
-
- /abc\/def/
-
-If you do so, the escape and the delimiter form part of the pattern, but since
-delimiters are always non-alphameric, this does not affect its interpretation.
-If the terminating delimiter is immediately followed by a backslash, for
-example,
-
- /abc/\
-
-then a backslash is added to the end of the pattern. This is done to provide a
-way of testing the error condition that arises if a pattern finishes with a
-backslash, because
-
- /abc\/
-
-is interpreted as the first line of a pattern that starts with "abc/", causing
-pcretest to read the next line as a continuation of the regular expression.
-
-
-PATTERN MODIFIERS
------------------
-
-The pattern may be followed by i, m, s, or x to set the PCRE_CASELESS,
-PCRE_MULTILINE, PCRE_DOTALL, or PCRE_EXTENDED options, respectively. For
-example:
-
- /caseless/i
-
-These modifier letters have the same effect as they do in Perl. There are
-others which set PCRE options that do not correspond to anything in Perl: /A,
-/E, and /X set PCRE_ANCHORED, PCRE_DOLLAR_ENDONLY, and PCRE_EXTRA respectively.
-
-Searching for all possible matches within each subject string can be requested
-by the /g or /G modifier. After finding a match, PCRE is called again to search
-the remainder of the subject string. The difference between /g and /G is that
-the former uses the startoffset argument to pcre_exec() to start searching at
-a new point within the entire string (which is in effect what Perl does),
-whereas the latter passes over a shortened substring. This makes a difference
-to the matching process if the pattern begins with a lookbehind assertion
-(including \b or \B).
-
-If any call to pcre_exec() in a /g or /G sequence matches an empty string, the
-next call is done with the PCRE_NOTEMPTY and PCRE_ANCHORED flags set in order
-to search for another, non-empty, match at the same point. If this second match
-fails, the start offset is advanced by one, and the normal match is retried.
-This imitates the way Perl handles such cases when using the /g modifier or the
-split() function.
-
-There are a number of other modifiers for controlling the way pcretest
-operates.
-
-The /+ modifier requests that as well as outputting the substring that matched
-the entire pattern, pcretest should in addition output the remainder of the
-subject string. This is useful for tests where the subject contains multiple
-copies of the same substring.
-
-The /L modifier must be followed directly by the name of a locale, for example,
-
- /pattern/Lfr
-
-For this reason, it must be the last modifier letter. The given locale is set,
-pcre_maketables() is called to build a set of character tables for the locale,
-and this is then passed to pcre_compile() when compiling the regular
-expression. Without an /L modifier, NULL is passed as the tables pointer; that
-is, /L applies only to the expression on which it appears.
-
-The /I modifier requests that pcretest output information about the compiled
-expression (whether it is anchored, has a fixed first character, and so on). It
-does this by calling pcre_fullinfo() after compiling an expression, and
-outputting the information it gets back. If the pattern is studied, the results
-of that are also output.
-
-The /D modifier is a PCRE debugging feature, which also assumes /I. It causes
-the internal form of compiled regular expressions to be output after
-compilation.
-
-The /S modifier causes pcre_study() to be called after the expression has been
-compiled, and the results used when the expression is matched.
-
-The /M modifier causes the size of memory block used to hold the compiled
-pattern to be output.
-
-The /P modifier causes pcretest to call PCRE via the POSIX wrapper API rather
-than its native API. When this is done, all other modifiers except /i, /m, and
-/+ are ignored. REG_ICASE is set if /i is present, and REG_NEWLINE is set if /m
-is present. The wrapper functions force PCRE_DOLLAR_ENDONLY always, and
-PCRE_DOTALL unless REG_NEWLINE is set.
-
-The /8 modifier causes pcretest to call PCRE with the PCRE_UTF8 option set.
-This turns on the (currently incomplete) support for UTF-8 character handling
-in PCRE, provided that it was compiled with this support enabled. This modifier
-also causes any non-printing characters in output strings to be printed using
-the \x{hh...} notation if they are valid UTF-8 sequences.
-
-
-DATA LINES
-----------
-
-Before each data line is passed to pcre_exec(), leading and trailing whitespace
-is removed, and it is then scanned for \ escapes. The following are recognized:
-
- \a alarm (= BEL)
- \b backspace
- \e escape
- \f formfeed
- \n newline
- \r carriage return
- \t tab
- \v vertical tab
- \nnn octal character (up to 3 octal digits)
- \xhh hexadecimal character (up to 2 hex digits)
- \x{hh...} hexadecimal UTF-8 character
-
- \A pass the PCRE_ANCHORED option to pcre_exec()
- \B pass the PCRE_NOTBOL option to pcre_exec()
- \Cdd call pcre_copy_substring() for substring dd after a successful
- match (any decimal number less than 32)
- \Gdd call pcre_get_substring() for substring dd after a successful
- match (any decimal number less than 32)
- \L call pcre_get_substringlist() after a successful match
- \N pass the PCRE_NOTEMPTY option to pcre_exec()
- \Odd set the size of the output vector passed to pcre_exec() to dd
- (any number of decimal digits)
- \Z pass the PCRE_NOTEOL option to pcre_exec()
-
-A backslash followed by anything else just escapes the anything else. If the
-very last character is a backslash, it is ignored. This gives a way of passing
-an empty line as data, since a real empty line terminates the data input.
-
-If /P was present on the regex, causing the POSIX wrapper API to be used, only
-\B, and \Z have any effect, causing REG_NOTBOL and REG_NOTEOL to be passed to
-regexec() respectively.
-
-The use of \x{hh...} to represent UTF-8 characters is not dependent on the use
-of the /8 modifier on the pattern. It is recognized always. There may be any
-number of hexadecimal digits inside the braces. The result is from one to six
-bytes, encoded according to the UTF-8 rules.
-
-
-OUTPUT FROM PCRETEST
---------------------
-
-When a match succeeds, pcretest outputs the list of captured substrings that
-pcre_exec() returns, starting with number 0 for the string that matched the
-whole pattern. Here is an example of an interactive pcretest run.
-
- $ pcretest
- PCRE version 2.06 08-Jun-1999
-
- re> /^abc(\d+)/
- data> abc123
- 0: abc123
- 1: 123
- data> xyz
- No match
-
-If the strings contain any non-printing characters, they are output as \0x
-escapes, or as \x{...} escapes if the /8 modifier was present on the pattern.
-If the pattern has the /+ modifier, then the output for substring 0 is followed
-by the the rest of the subject string, identified by "0+" like this:
-
- re> /cat/+
- data> cataract
- 0: cat
- 0+ aract
-
-If the pattern has the /g or /G modifier, the results of successive matching
-attempts are output in sequence, like this:
-
- re> /\Bi(\w\w)/g
- data> Mississippi
- 0: iss
- 1: ss
- 0: iss
- 1: ss
- 0: ipp
- 1: pp
-
-"No match" is output only if the first match attempt fails.
-
-If any of \C, \G, or \L are present in a data line that is successfully
-matched, the substrings extracted by the convenience functions are output with
-C, G, or L after the string number instead of a colon. This is in addition to
-the normal full list. The string length (that is, the return from the
-extraction function) is given in parentheses after each string for \C and \G.
-
-Note that while patterns can be continued over several lines (a plain ">"
-prompt is used for continuations), data lines may not. However newlines can be
-included in data by means of the \n escape.
-
-
-COMMAND LINE OPTIONS
---------------------
-
-If the -p option is given to pcretest, it is equivalent to adding /P to each
-regular expression: the POSIX wrapper API is used to call PCRE. None of the
-following flags has any effect in this case.
-
-If the option -d is given to pcretest, it is equivalent to adding /D to each
-regular expression: the internal form is output after compilation.
-
-If the option -i is given to pcretest, it is equivalent to adding /I to each
-regular expression: information about the compiled pattern is given after
-compilation.
-
-If the option -m is given to pcretest, it outputs the size of each compiled
-pattern after it has been compiled. It is equivalent to adding /M to each
-regular expression. For compatibility with earlier versions of pcretest, -s is
-a synonym for -m.
-
-If the -t option is given, each compile, study, and match is run 20000 times
-while being timed, and the resulting time per compile or match is output in
-milliseconds. Do not set -t with -m, because you will then get the size output
-20000 times and the timing will be distorted. If you want to change the number
-of repetitions used for timing, edit the definition of LOOPREPEAT at the top of
-pcretest.c
-
-Philip Hazel <ph10@cam.ac.uk>
-August 2000
diff --git a/ext/pcre/pcrelib/doc/perltest.txt b/ext/pcre/pcrelib/doc/perltest.txt
deleted file mode 100644
index 5a404016b5..0000000000
--- a/ext/pcre/pcrelib/doc/perltest.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-The perltest program
---------------------
-
-The perltest program tests Perl's regular expressions; it has the same
-specification as pcretest, and so can be given identical input, except that
-input patterns can be followed only by Perl's lower case modifiers and /+ (as
-used by pcretest), which is recognized and handled by the program.
-
-The data lines are processed as Perl double-quoted strings, so if they contain
-" \ $ or @ characters, these have to be escaped. For this reason, all such
-characters in testinput1 and testinput3 are escaped so that they can be used
-for perltest as well as for pcretest, and the special upper case modifiers such
-as /A that pcretest recognizes are not used in these files. The output should
-be identical, apart from the initial identifying banner.
-
-For testing UTF-8 features, an alternative form of perltest, called perltest8,
-is supplied. This requires Perl 5.6 or higher. It recognizes the special
-modifier /8 that pcretest uses to invoke UTF-8 functionality. The testinput5
-file can be fed to perltest8.
-
-The testinput2 and testinput4 files are not suitable for feeding to perltest,
-since they do make use of the special upper case modifiers and escapes that
-pcretest uses to test some features of PCRE. The first of these files also
-contains malformed regular expressions, in order to check that PCRE diagnoses
-them correctly. Similarly, testinput6 tests UTF-8 features that do not relate
-to Perl.
-
-Philip Hazel <ph10@cam.ac.uk>
-August 2000
diff --git a/ext/pcre/pcrelib/get.c b/ext/pcre/pcrelib/get.c
deleted file mode 100644
index 42e9bd4933..0000000000
--- a/ext/pcre/pcrelib/get.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This module contains some convenience functions for extracting substrings
-from the subject string after a regex match has succeeded. The original idea
-for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-* Copy captured string to given buffer *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer.
-Note that we use memcpy() rather than strncpy() in case there are binary zeros
-in the string.
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringnumber the number of the required substring
- buffer where to put the substring
- size the size of the buffer
-
-Returns: if successful:
- the length of the copied string, not including the zero
- that is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) buffer too small
- PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_substring(const char *subject, int *ovector, int stringcount,
- int stringnumber, char *buffer, int size)
-{
-int yield;
-if (stringnumber < 0 || stringnumber >= stringcount)
- return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
-memcpy(buffer, subject + ovector[stringnumber], yield);
-buffer[yield] = 0;
-return yield;
-}
-
-
-
-/*************************************************
-* Copy all captured strings to new store *
-*************************************************/
-
-/* This function gets one chunk of store and builds a list of pointers and all
-of the captured substrings in it. A NULL pointer is put on the end of the list.
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- listptr set to point to the list of pointers
-
-Returns: if successful: 0
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) failed to get store
-*/
-
-int
-pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
- const char ***listptr)
-{
-int i;
-int size = sizeof(char *);
-int double_count = stringcount * 2;
-char **stringlist;
-char *p;
-
-for (i = 0; i < double_count; i += 2)
- size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
-
-stringlist = (char **)(pcre_malloc)(size);
-if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
-
-*listptr = (const char **)stringlist;
-p = (char *)(stringlist + stringcount + 1);
-
-for (i = 0; i < double_count; i += 2)
- {
- int len = ovector[i+1] - ovector[i];
- memcpy(p, subject + ovector[i], len);
- *stringlist++ = p;
- p += len;
- *p++ = 0;
- }
-
-*stringlist = NULL;
-return 0;
-}
-
-
-
-/*************************************************
-* Free store obtained by get_substring_list *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument: the result of a previous pcre_get_substring_list()
-Returns: nothing
-*/
-
-void
-pcre_free_substring_list(const char **pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-
-
-/*************************************************
-* Copy captured string to new store *
-*************************************************/
-
-/* This function copies a single captured substring into a piece of new
-store
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringnumber the number of the required substring
- stringptr where to put a pointer to the substring
-
-Returns: if successful:
- the length of the string, not including the zero that
- is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) failed to get store
- PCRE_ERROR_NOSUBSTRING (-7) substring not present
-*/
-
-int
-pcre_get_substring(const char *subject, int *ovector, int stringcount,
- int stringnumber, const char **stringptr)
-{
-int yield;
-char *substring;
-if (stringnumber < 0 || stringnumber >= stringcount)
- return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-substring = (char *)(pcre_malloc)(yield + 1);
-if (substring == NULL) return PCRE_ERROR_NOMEMORY;
-memcpy(substring, subject + ovector[stringnumber], yield);
-substring[yield] = 0;
-*stringptr = substring;
-return yield;
-}
-
-
-
-/*************************************************
-* Free store obtained by get_substring *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument: the result of a previous pcre_get_substring()
-Returns: nothing
-*/
-
-void
-pcre_free_substring(const char *pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-/* End of get.c */
diff --git a/ext/pcre/pcrelib/internal.h b/ext/pcre/pcrelib/internal.h
deleted file mode 100644
index bd992f0dd2..0000000000
--- a/ext/pcre/pcrelib/internal.h
+++ /dev/null
@@ -1,385 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-
-/* This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This header contains definitions that are shared between the different
-modules, but which are not relevant to the outside. */
-
-/* Get the definitions provided by running "configure" */
-
-#ifdef PHP_WIN32
-#include "config.w32.h"
-#else
-#include "php_config.h"
-#endif
-
-/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
-define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
-is set. Otherwise, include an emulating function for those systems that have
-neither (there some non-Unix environments where this is the case). This assumes
-that all calls to memmove are moving strings upwards in store, which is the
-case in PCRE. */
-
-#if ! HAVE_MEMMOVE
-#undef memmove /* some systems may have a macro */
-#if HAVE_BCOPY
-#define memmove(a, b, c) bcopy(b, a, c)
-#else
-void *
-pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)
-{
-int i;
-dest += n;
-src += n;
-for (i = 0; i < n; ++i) *(--dest) = *(--src);
-}
-#define memmove(a, b, c) pcre_memmove(a, b, c)
-#endif
-#endif
-
-/* Standard C headers plus the external interface definition */
-
-#include <ctype.h>
-#include <limits.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "pcre.h"
-
-/* In case there is no definition of offsetof() provided - though any proper
-Standard C system should have one. */
-
-#ifndef offsetof
-#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
-#endif
-
-/* These are the public options that can change during matching. */
-
-#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
-
-/* Private options flags start at the most significant end of the four bytes,
-but skip the top bit so we can use ints for convenience without getting tangled
-with negative values. The public options defined in pcre.h start at the least
-significant end. Make sure they don't overlap, though now that we have expanded
-to four bytes there is plenty of space. */
-
-#define PCRE_FIRSTSET 0x40000000 /* first_char is set */
-#define PCRE_REQCHSET 0x20000000 /* req_char is set */
-#define PCRE_STARTLINE 0x10000000 /* start after \n for multiline */
-#define PCRE_INGROUP 0x08000000 /* compiling inside a group */
-#define PCRE_ICHANGED 0x04000000 /* i option changes within regex */
-
-/* Options for the "extra" block produced by pcre_study(). */
-
-#define PCRE_STUDY_MAPPED 0x01 /* a map of starting chars exists */
-
-/* Masks for identifying the public options which are permitted at compile
-time, run time or study time, respectively. */
-
-#define PUBLIC_OPTIONS \
- (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
- PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
-
-#define PUBLIC_EXEC_OPTIONS \
- (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
-
-#define PUBLIC_STUDY_OPTIONS 0 /* None defined */
-
-/* Magic number to provide a small check against being handed junk. */
-
-#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */
-
-/* Miscellaneous definitions */
-
-typedef int BOOL;
-
-#define FALSE 0
-#define TRUE 1
-
-/* These are escaped items that aren't just an encoding of a particular data
-value such as \n. They must have non-zero values, as check_escape() returns
-their negation. Also, they must appear in the same order as in the opcode
-definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
-values are used for \1, \2, \3, etc. There is a test in the code for an escape
-greater than ESC_b and less than ESC_X to detect the types that may be
-repeated. If any new escapes are put in-between that don't consume a character,
-that code will have to change. */
-
-enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
- ESC_Z, ESC_z, ESC_REF };
-
-/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
-that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
-OP_EOD must correspond in order to the list of escapes immediately above. */
-
-enum {
- OP_END, /* End of pattern */
-
- /* Values corresponding to backslashed metacharacters */
-
- OP_SOD, /* Start of data: \A */
- OP_NOT_WORD_BOUNDARY, /* \B */
- OP_WORD_BOUNDARY, /* \b */
- OP_NOT_DIGIT, /* \D */
- OP_DIGIT, /* \d */
- OP_NOT_WHITESPACE, /* \S */
- OP_WHITESPACE, /* \s */
- OP_NOT_WORDCHAR, /* \W */
- OP_WORDCHAR, /* \w */
- OP_EODN, /* End of data or \n at end of data: \Z. */
- OP_EOD, /* End of data: \z */
-
- OP_OPT, /* Set runtime options */
- OP_CIRC, /* Start of line - varies with multiline switch */
- OP_DOLL, /* End of line - varies with multiline switch */
- OP_ANY, /* Match any character */
- OP_CHARS, /* Match string of characters */
- OP_NOT, /* Match anything but the following char */
-
- OP_STAR, /* The maximizing and minimizing versions of */
- OP_MINSTAR, /* all these opcodes must come in pairs, with */
- OP_PLUS, /* the minimizing one second. */
- OP_MINPLUS, /* This first set applies to single characters */
- OP_QUERY,
- OP_MINQUERY,
- OP_UPTO, /* From 0 to n matches */
- OP_MINUPTO,
- OP_EXACT, /* Exactly n matches */
-
- OP_NOTSTAR, /* The maximizing and minimizing versions of */
- OP_NOTMINSTAR, /* all these opcodes must come in pairs, with */
- OP_NOTPLUS, /* the minimizing one second. */
- OP_NOTMINPLUS, /* This first set applies to "not" single characters */
- OP_NOTQUERY,
- OP_NOTMINQUERY,
- OP_NOTUPTO, /* From 0 to n matches */
- OP_NOTMINUPTO,
- OP_NOTEXACT, /* Exactly n matches */
-
- OP_TYPESTAR, /* The maximizing and minimizing versions of */
- OP_TYPEMINSTAR, /* all these opcodes must come in pairs, with */
- OP_TYPEPLUS, /* the minimizing one second. These codes must */
- OP_TYPEMINPLUS, /* be in exactly the same order as those above. */
- OP_TYPEQUERY, /* This set applies to character types such as \d */
- OP_TYPEMINQUERY,
- OP_TYPEUPTO, /* From 0 to n matches */
- OP_TYPEMINUPTO,
- OP_TYPEEXACT, /* Exactly n matches */
-
- OP_CRSTAR, /* The maximizing and minimizing versions of */
- OP_CRMINSTAR, /* all these opcodes must come in pairs, with */
- OP_CRPLUS, /* the minimizing one second. These codes must */
- OP_CRMINPLUS, /* be in exactly the same order as those above. */
- OP_CRQUERY, /* These are for character classes and back refs */
- OP_CRMINQUERY,
- OP_CRRANGE, /* These are different to the three seta above. */
- OP_CRMINRANGE,
-
- OP_CLASS, /* Match a character class */
- OP_REF, /* Match a back reference */
- OP_RECURSE, /* Match this pattern recursively */
-
- OP_ALT, /* Start of alternation */
- OP_KET, /* End of group that doesn't have an unbounded repeat */
- OP_KETRMAX, /* These two must remain together and in this */
- OP_KETRMIN, /* order. They are for groups the repeat for ever. */
-
- /* The assertions must come before ONCE and COND */
-
- OP_ASSERT, /* Positive lookahead */
- OP_ASSERT_NOT, /* Negative lookahead */
- OP_ASSERTBACK, /* Positive lookbehind */
- OP_ASSERTBACK_NOT, /* Negative lookbehind */
- OP_REVERSE, /* Move pointer back - used in lookbehind assertions */
-
- /* ONCE and COND must come after the assertions, with ONCE first, as there's
- a test for >= ONCE for a subpattern that isn't an assertion. */
-
- OP_ONCE, /* Once matched, don't back up into the subpattern */
- OP_COND, /* Conditional group */
- OP_CREF, /* Used to hold an extraction string number */
-
- OP_BRAZERO, /* These two must remain together and in this */
- OP_BRAMINZERO, /* order. */
-
- OP_BRA /* This and greater values are used for brackets that
- extract substrings. */
-};
-
-/* The highest extraction number. This is limited by the number of opcodes
-left after OP_BRA, i.e. 255 - OP_BRA. We actually set it somewhat lower. */
-
-#define EXTRACT_MAX 99
-
-/* The texts of compile-time error messages are defined as macros here so that
-they can be accessed by the POSIX wrapper and converted into error codes. Yes,
-I could have used error codes in the first place, but didn't feel like changing
-just to accommodate the POSIX wrapper. */
-
-#define ERR1 "\\ at end of pattern"
-#define ERR2 "\\c at end of pattern"
-#define ERR3 "unrecognized character follows \\"
-#define ERR4 "numbers out of order in {} quantifier"
-#define ERR5 "number too big in {} quantifier"
-#define ERR6 "missing terminating ] for character class"
-#define ERR7 "invalid escape sequence in character class"
-#define ERR8 "range out of order in character class"
-#define ERR9 "nothing to repeat"
-#define ERR10 "operand of unlimited repeat could match the empty string"
-#define ERR11 "internal error: unexpected repeat"
-#define ERR12 "unrecognized character after (?"
-#define ERR13 "too many capturing parenthesized sub-patterns"
-#define ERR14 "missing )"
-#define ERR15 "back reference to non-existent subpattern"
-#define ERR16 "erroffset passed as NULL"
-#define ERR17 "unknown option bit(s) set"
-#define ERR18 "missing ) after comment"
-#define ERR19 "too many sets of parentheses"
-#define ERR20 "regular expression too large"
-#define ERR21 "failed to get memory"
-#define ERR22 "unmatched parentheses"
-#define ERR23 "internal error: code overflow"
-#define ERR24 "unrecognized character after (?<"
-#define ERR25 "lookbehind assertion is not fixed length"
-#define ERR26 "malformed number after (?("
-#define ERR27 "conditional group contains more than two branches"
-#define ERR28 "assertion expected after (?("
-#define ERR29 "(?p must be followed by )"
-#define ERR30 "unknown POSIX class name"
-#define ERR31 "POSIX collating elements are not supported"
-#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
-#define ERR33 "characters with values > 255 are not yet supported in classes"
-#define ERR34 "character value in \\x{...} sequence is too large"
-#define ERR35 "invalid condition (?(0)"
-
-/* All character handling must be done as unsigned characters. Otherwise there
-are problems with top-bit-set characters and functions such as isspace().
-However, we leave the interface to the outside world as char *, because that
-should make things easier for callers. We define a short type for unsigned char
-to save lots of typing. I tried "uchar", but it causes problems on Digital
-Unix, where it is defined in sys/types, so use "uschar" instead. */
-
-typedef unsigned char uschar;
-
-/* The real format of the start of the pcre block; the actual code vector
-runs on as long as necessary after the end. */
-
-typedef struct real_pcre {
- unsigned long int magic_number;
- size_t size;
- const unsigned char *tables;
- unsigned long int options;
- uschar top_bracket;
- uschar top_backref;
- uschar first_char;
- uschar req_char;
- uschar code[1];
-} real_pcre;
-
-/* The real format of the extra block returned by pcre_study(). */
-
-typedef struct real_pcre_extra {
- uschar options;
- uschar start_bits[32];
-} real_pcre_extra;
-
-
-/* Structure for passing "static" information around between the functions
-doing the compiling, so that they are thread-safe. */
-
-typedef struct compile_data {
- const uschar *lcc; /* Points to lower casing table */
- const uschar *fcc; /* Points to case-flipping table */
- const uschar *cbits; /* Points to character type table */
- const uschar *ctypes; /* Points to table of type maps */
-} compile_data;
-
-/* Structure for passing "static" information around between the functions
-doing the matching, so that they are thread-safe. */
-
-typedef struct match_data {
- int errorcode; /* As it says */
- int *offset_vector; /* Offset vector */
- int offset_end; /* One past the end */
- int offset_max; /* The maximum usable for return data */
- const uschar *lcc; /* Points to lower casing table */
- const uschar *ctypes; /* Points to table of type maps */
- BOOL offset_overflow; /* Set if too many extractions */
- BOOL notbol; /* NOTBOL flag */
- BOOL noteol; /* NOTEOL flag */
- BOOL utf8; /* UTF8 flag */
- BOOL endonly; /* Dollar not before final \n */
- BOOL notempty; /* Empty string match not wanted */
- const uschar *start_pattern; /* For use when recursing */
- const uschar *start_subject; /* Start of the subject string */
- const uschar *end_subject; /* End of the subject string */
- const uschar *start_match; /* Start of this match attempt */
- const uschar *end_match_ptr; /* Subject position at end match */
- int end_offset_top; /* Highwater mark at end of match */
-} match_data;
-
-/* Bit definitions for entries in the pcre_ctypes table. */
-
-#define ctype_space 0x01
-#define ctype_letter 0x02
-#define ctype_digit 0x04
-#define ctype_xdigit 0x08
-#define ctype_word 0x10 /* alphameric or '_' */
-#define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */
-
-/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
-of bits for a class map. Some classes are built by combining these tables. */
-
-#define cbit_space 0 /* [:space:] or \s */
-#define cbit_xdigit 32 /* [:xdigit:] */
-#define cbit_digit 64 /* [:digit:] or \d */
-#define cbit_upper 96 /* [:upper:] */
-#define cbit_lower 128 /* [:lower:] */
-#define cbit_word 160 /* [:word:] or \w */
-#define cbit_graph 192 /* [:graph:] */
-#define cbit_print 224 /* [:print:] */
-#define cbit_punct 256 /* [:punct:] */
-#define cbit_cntrl 288 /* [:cntrl:] */
-#define cbit_length 320 /* Length of the cbits table */
-
-/* Offsets of the various tables from the base tables pointer, and
-total length. */
-
-#define lcc_offset 0
-#define fcc_offset 256
-#define cbits_offset 512
-#define ctypes_offset (cbits_offset + cbit_length)
-#define tables_length (ctypes_offset + 256)
-
-/* End of internal.h */
diff --git a/ext/pcre/pcrelib/maketables.c b/ext/pcre/pcrelib/maketables.c
deleted file mode 100644
index c0f06c0375..0000000000
--- a/ext/pcre/pcrelib/maketables.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This file is compiled on its own as part of the PCRE library. However,
-it is also included in the compilation of dftables.c, in which case the macro
-DFTABLES is defined. */
-
-#ifndef DFTABLES
-#include "internal.h"
-#endif
-
-
-
-/*************************************************
-* Create PCRE character tables *
-*************************************************/
-
-/* This function builds a set of character tables for use by PCRE and returns
-a pointer to them. They are build using the ctype functions, and consequently
-their contents will depend upon the current locale setting. When compiled as
-part of the library, the store is obtained via pcre_malloc(), but when compiled
-inside dftables, use malloc().
-
-Arguments: none
-Returns: pointer to the contiguous block of data
-*/
-
-unsigned const char *
-pcre_maketables(void)
-{
-unsigned char *yield, *p;
-int i;
-
-#ifndef DFTABLES
-yield = (unsigned char*)(pcre_malloc)(tables_length);
-#else
-yield = (unsigned char*)malloc(tables_length);
-#endif
-
-if (yield == NULL) return NULL;
-p = yield;
-
-/* First comes the lower casing table */
-
-for (i = 0; i < 256; i++) *p++ = tolower(i);
-
-/* Next the case-flipping table */
-
-for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
-
-/* Then the character class tables. Don't try to be clever and save effort
-on exclusive ones - in some locales things may be different. */
-
-memset(p, 0, cbit_length);
-for (i = 0; i < 256; i++)
- {
- if (isdigit(i))
- {
- p[cbit_digit + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (isupper(i))
- {
- p[cbit_upper + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (islower(i))
- {
- p[cbit_lower + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (i == '_') p[cbit_word + i/8] |= 1 << (i&7);
- if (isspace(i)) p[cbit_space + i/8] |= 1 << (i&7);
- if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
- if (isgraph(i)) p[cbit_graph + i/8] |= 1 << (i&7);
- if (isprint(i)) p[cbit_print + i/8] |= 1 << (i&7);
- if (ispunct(i)) p[cbit_punct + i/8] |= 1 << (i&7);
- if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1 << (i&7);
- }
-p += cbit_length;
-
-/* Finally, the character type table */
-
-for (i = 0; i < 256; i++)
- {
- int x = 0;
- if (isspace(i)) x += ctype_space;
- if (isalpha(i)) x += ctype_letter;
- if (isdigit(i)) x += ctype_digit;
- if (isxdigit(i)) x += ctype_xdigit;
- if (isalnum(i) || i == '_') x += ctype_word;
- if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
- *p++ = x;
- }
-
-return yield;
-}
-
-/* End of maketables.c */
diff --git a/ext/pcre/pcrelib/pcre-config.in b/ext/pcre/pcrelib/pcre-config.in
deleted file mode 100644
index 8daded9fe1..0000000000
--- a/ext/pcre/pcrelib/pcre-config.in
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
-
-usage="\
-Usage: pcre-config [--prefix] [--exec-prefix] [--version] [--libs] [--libs-posix] [--cflags] [--cflags-posix]"
-
-if test $# -eq 0; then
- echo "${usage}" 1>&2
- exit 1
-fi
-
-while test $# -gt 0; do
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- case $1 in
- --prefix=*)
- prefix=$optarg
- if test $exec_prefix_set = no ; then
- exec_prefix=$optarg
- fi
- ;;
- --prefix)
- echo $prefix
- ;;
- --exec-prefix=*)
- exec_prefix=$optarg
- exec_prefix_set=yes
- ;;
- --exec-prefix)
- echo $exec_prefix
- ;;
- --version)
- echo @PCRE_VERSION@
- ;;
- --cflags | --cflags-posix)
- if test @includedir@ != /usr/include ; then
- includes=-I@includedir@
- fi
- echo $includes
- ;;
- --libs-posix)
- echo -L@libdir@ -lpcreposix -lpcre
- ;;
- --libs)
- echo -L@libdir@ -lpcre
- ;;
- *)
- echo "${usage}" 1>&2
- exit 1
- ;;
- esac
- shift
-done
diff --git a/ext/pcre/pcrelib/pcre.c b/ext/pcre/pcrelib/pcre.c
deleted file mode 100644
index 5149f8dad7..0000000000
--- a/ext/pcre/pcrelib/pcre.c
+++ /dev/null
@@ -1,5151 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Define DEBUG to get debugging output on stdout. */
-
-/* #define DEBUG */
-
-/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
-inline, and there are *still* stupid compilers about that don't like indented
-pre-processor statements. I suppose it's only been 10 years... */
-
-#ifdef DEBUG
-#define DPRINTF(p) printf p
-#else
-#define DPRINTF(p) /*nothing*/
-#endif
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-/* Allow compilation as C++ source code, should anybody want to do that. */
-
-#ifdef __cplusplus
-#define class pcre_class
-#endif
-
-
-/* Number of items on the nested bracket stacks at compile time. This should
-not be set greater than 200. */
-
-#define BRASTACK_SIZE 200
-
-
-/* The number of bytes in a literal character string above which we can't add
-any more is different when UTF-8 characters may be encountered. */
-
-#ifdef SUPPORT_UTF8
-#define MAXLIT 250
-#else
-#define MAXLIT 255
-#endif
-
-
-/* Min and max values for the common repeats; for the maxima, 0 => infinity */
-
-static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
-static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
-
-/* Text forms of OP_ values and things, for debugging (not all used) */
-
-#ifdef DEBUG
-static const char *OP_names[] = {
- "End", "\\A", "\\B", "\\b", "\\D", "\\d",
- "\\S", "\\s", "\\W", "\\w", "\\Z", "\\z",
- "Opt", "^", "$", "Any", "chars", "not",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{",
- "class", "Ref", "Recurse",
- "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
- "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
- "Brazero", "Braminzero", "Bra"
-};
-#endif
-
-/* Table for handling escaped characters in the range '0'-'z'. Positive returns
-are simple data values; negative values are for special things like \d and so
-on. Zero means further processing is needed (for things like \x), or the escape
-is invalid. */
-
-static const short int escapes[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */
- 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */
- '@', -ESC_A, -ESC_B, 0, -ESC_D, 0, 0, 0, /* @ - G */
- 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */
- 0, 0, 0, -ESC_S, 0, 0, 0, -ESC_W, /* P - W */
- 0, 0, -ESC_Z, '[', '\\', ']', '^', '_', /* X - _ */
- '`', 7, -ESC_b, 0, -ESC_d, 27, '\f', 0, /* ` - g */
- 0, 0, 0, 0, 0, 0, '\n', 0, /* h - o */
- 0, 0, '\r', -ESC_s, '\t', 0, 0, -ESC_w, /* p - w */
- 0, 0, -ESC_z /* x - z */
-};
-
-/* Tables of names of POSIX character classes and their lengths. The list is
-terminated by a zero length entry. The first three must be alpha, upper, lower,
-as this is assumed for handling case independence. */
-
-static const char *posix_names[] = {
- "alpha", "lower", "upper",
- "alnum", "ascii", "cntrl", "digit", "graph",
- "print", "punct", "space", "word", "xdigit" };
-
-static const uschar posix_name_lengths[] = {
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
-
-/* Table of class bit maps for each POSIX class; up to three may be combined
-to form the class. */
-
-static const int posix_class_maps[] = {
- cbit_lower, cbit_upper, -1, /* alpha */
- cbit_lower, -1, -1, /* lower */
- cbit_upper, -1, -1, /* upper */
- cbit_digit, cbit_lower, cbit_upper, /* alnum */
- cbit_print, cbit_cntrl, -1, /* ascii */
- cbit_cntrl, -1, -1, /* cntrl */
- cbit_digit, -1, -1, /* digit */
- cbit_graph, -1, -1, /* graph */
- cbit_print, -1, -1, /* print */
- cbit_punct, -1, -1, /* punct */
- cbit_space, -1, -1, /* space */
- cbit_word, -1, -1, /* word */
- cbit_xdigit,-1, -1 /* xdigit */
-};
-
-
-/* Definition to allow mutual recursion */
-
-static BOOL
- compile_regex(int, int, int *, uschar **, const uschar **, const char **,
- BOOL, int, int *, int *, compile_data *);
-
-/* Structure for building a chain of data that actually lives on the
-stack, for holding the values of the subject pointer at the start of each
-subpattern, so as to detect when an empty string has been matched by a
-subpattern - to break infinite loops. */
-
-typedef struct eptrblock {
- struct eptrblock *prev;
- const uschar *saved_eptr;
-} eptrblock;
-
-/* Flag bits for the match() function */
-
-#define match_condassert 0x01 /* Called to check a condition assertion */
-#define match_isgroup 0x02 /* Set if start of bracketed group */
-
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-/* PCRE is thread-clean and doesn't use any global variables in the normal
-sense. However, it calls memory allocation and free functions via the two
-indirections below, which are can be changed by the caller, but are shared
-between all threads. */
-
-void *(*pcre_malloc)(size_t) = malloc;
-void (*pcre_free)(void *) = free;
-
-
-
-/*************************************************
-* Macros and tables for character handling *
-*************************************************/
-
-/* When UTF-8 encoding is being used, a character is no longer just a single
-byte. The macros for character handling generate simple sequences when used in
-byte-mode, and more complicated ones for UTF-8 characters. */
-
-#ifndef SUPPORT_UTF8
-#define GETCHARINC(c, eptr) c = *eptr++;
-#define GETCHARLEN(c, eptr, len) c = *eptr;
-#define BACKCHAR(eptr)
-
-#else /* SUPPORT_UTF8 */
-
-/* Get the next UTF-8 character, advancing the pointer */
-
-#define GETCHARINC(c, eptr) \
- c = *eptr++; \
- if (md->utf8 && (c & 0xc0) == 0xc0) \
- { \
- int a = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int s = 6 - a; /* Amount to shift next byte */ \
- c &= utf8_table3[a]; /* Low order bits from first byte */ \
- while (a-- > 0) \
- { \
- c |= (*eptr++ & 0x3f) << s; \
- s += 6; \
- } \
- }
-
-/* Get the next UTF-8 character, not advancing the pointer, setting length */
-
-#define GETCHARLEN(c, eptr, len) \
- c = *eptr; \
- len = 1; \
- if (md->utf8 && (c & 0xc0) == 0xc0) \
- { \
- int i; \
- int a = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int s = 6 - a; /* Amount to shift next byte */ \
- c &= utf8_table3[a]; /* Low order bits from first byte */ \
- for (i = 1; i <= a; i++) \
- { \
- c |= (eptr[i] & 0x3f) << s; \
- s += 6; \
- } \
- len += a; \
- }
-
-/* If the pointer is not at the start of a character, move it back until
-it is. */
-
-#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
-
-#endif
-
-
-
-/*************************************************
-* Default character tables *
-*************************************************/
-
-/* A default set of character tables is included in the PCRE binary. Its source
-is built by the maketables auxiliary program, which uses the default C ctypes
-functions, and put in the file chartables.c. These tables are used by PCRE
-whenever the caller of pcre_compile() does not provide an alternate set of
-tables. */
-
-#include "chartables.c"
-
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-* Tables for UTF-8 support *
-*************************************************/
-
-/* These are the breakpoints for different numbers of bytes in a UTF-8
-character. */
-
-static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
-
-/* These are the indicator bits and the mask for the data bits to set in the
-first byte of a character, indexed by the number of additional bytes. */
-
-static int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-/* Table of the number of extra characters, indexed by the first character
-masked with 0x3f. The highest number for a valid UTF-8 character is in fact
-0x3d. */
-
-static uschar utf8_table4[] = {
- 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,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
-
-
-/*************************************************
-* Convert character value to UTF-8 *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
-Returns: number of characters placed in the buffer
-*/
-
-static int
-ord2utf8(int cvalue, uschar *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (cvalue <= utf8_table1[i]) break;
-*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
-cvalue >>= 6 - i;
-for (j = 0; j < i; j++)
- {
- *buffer++ = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-return i + 1;
-}
-#endif
-
-
-
-/*************************************************
-* Return version string *
-*************************************************/
-
-#define STRING(a) # a
-#define XSTRING(s) STRING(s)
-
-const char *
-pcre_version(void)
-{
-return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
-}
-
-
-
-
-/*************************************************
-* (Obsolete) Return info about compiled pattern *
-*************************************************/
-
-/* This is the original "info" function. It picks potentially useful data out
-of the private structure, but its interface was too rigid. It remains for
-backwards compatibility. The public options are passed back in an int - though
-the re->options field has been expanded to a long int, all the public options
-at the low end of it, and so even on 16-bit systems this will still be OK.
-Therefore, I haven't changed the API for pcre_info().
-
-Arguments:
- external_re points to compiled code
- optptr where to pass back the options
- first_char where to pass back the first character,
- or -1 if multiline and all branches start ^,
- or -2 otherwise
-
-Returns: number of capturing subpatterns
- or negative values on error
-*/
-
-int
-pcre_info(const pcre *external_re, int *optptr, int *first_char)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-if (re == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
-if (first_char != NULL)
- *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
- ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-return re->top_bracket;
-}
-
-
-
-/*************************************************
-* Return info about compiled pattern *
-*************************************************/
-
-/* This is a newer "info" function which has an extensible interface so
-that additional items can be added compatibly.
-
-Arguments:
- external_re points to compiled code
- external_study points to study data, or NULL
- what what information is required
- where where to put the information
-
-Returns: 0 if data returned, negative on error
-*/
-
-int
-pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
- void *where)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-const real_pcre_extra *study = (const real_pcre_extra *)study_data;
-
-if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-switch (what)
- {
- case PCRE_INFO_OPTIONS:
- *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
- break;
-
- case PCRE_INFO_SIZE:
- *((size_t *)where) = re->size;
- break;
-
- case PCRE_INFO_CAPTURECOUNT:
- *((int *)where) = re->top_bracket;
- break;
-
- case PCRE_INFO_BACKREFMAX:
- *((int *)where) = re->top_backref;
- break;
-
- case PCRE_INFO_FIRSTCHAR:
- *((int *)where) =
- ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
- ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
- break;
-
- case PCRE_INFO_FIRSTTABLE:
- *((const uschar **)where) =
- (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
- study->start_bits : NULL;
- break;
-
- case PCRE_INFO_LASTLITERAL:
- *((int *)where) =
- ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
- break;
-
- default: return PCRE_ERROR_BADOPTION;
- }
-
-return 0;
-}
-
-
-
-#ifdef DEBUG
-/*************************************************
-* Debugging function to print chars *
-*************************************************/
-
-/* Print a sequence of chars in printable format, stopping at the end of the
-subject if the requested.
-
-Arguments:
- p points to characters
- length number to print
- is_subject TRUE if printing from within md->start_subject
- md pointer to matching data block, if is_subject is TRUE
-
-Returns: nothing
-*/
-
-static void
-pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
-{
-int c;
-if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
-while (length-- > 0)
- if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
-}
-#endif
-
-
-
-
-/*************************************************
-* Handle escapes *
-*************************************************/
-
-/* This function is called when a \ has been encountered. It either returns a
-positive value for a simple escape such as \n, or a negative value which
-encodes one of the more complicated things such as \d. When UTF-8 is enabled,
-a positive value greater than 255 may be returned. On entry, ptr is pointing at
-the \. On exit, it is on the final character of the escape sequence.
-
-Arguments:
- ptrptr points to the pattern position pointer
- errorptr points to the pointer to the error message
- bracount number of previous extracting brackets
- options the options bits
- isclass TRUE if inside a character class
- cd pointer to char tables block
-
-Returns: zero or positive => a data character
- negative => a special escape sequence
- on error, errorptr is set
-*/
-
-static int
-check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
- int options, BOOL isclass, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-int c, i;
-
-/* If backslash is at the end of the pattern, it's an error. */
-
-c = *(++ptr);
-if (c == 0) *errorptr = ERR1;
-
-/* Digits or letters may have special meaning; all others are literals. */
-
-else if (c < '0' || c > 'z') {}
-
-/* Do an initial lookup in a table. A non-zero result is something that can be
-returned immediately. Otherwise further processing may be required. */
-
-else if ((i = escapes[c - '0']) != 0) c = i;
-
-/* Escapes that need further processing, or are illegal. */
-
-else
- {
- const uschar *oldptr;
- switch (c)
- {
- /* The handling of escape sequences consisting of a string of digits
- starting with one that is not zero is not straightforward. By experiment,
- the way Perl works seems to be as follows:
-
- Outside a character class, the digits are read as a decimal number. If the
- number is less than 10, or if there are that many previous extracting
- left brackets, then it is a back reference. Otherwise, up to three octal
- digits are read to form an escaped byte. Thus \123 is likely to be octal
- 123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
- value is greater than 377, the least significant 8 bits are taken. Inside a
- character class, \ followed by a digit is always an octal number. */
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
-
- if (!isclass)
- {
- oldptr = ptr;
- c -= '0';
- while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
- c = c * 10 + *(++ptr) - '0';
- if (c < 10 || c <= bracount)
- {
- c = -(ESC_REF + c);
- break;
- }
- ptr = oldptr; /* Put the pointer back and fall through */
- }
-
- /* Handle an octal number following \. If the first digit is 8 or 9, Perl
- generates a binary zero byte and treats the digit as a following literal.
- Thus we have to pull back the pointer by one. */
-
- if ((c = *ptr) >= '8')
- {
- ptr--;
- c = 0;
- break;
- }
-
- /* \0 always starts an octal number, but we may drop through to here with a
- larger first octal digit. */
-
- case '0':
- c -= '0';
- while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
- ptr[1] != '8' && ptr[1] != '9')
- c = c * 8 + *(++ptr) - '0';
- c &= 255; /* Take least significant 8 bits */
- break;
-
- /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
- which can be greater than 0xff, but only if the ddd are hex digits. */
-
- case 'x':
-#ifdef SUPPORT_UTF8
- if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
- {
- const uschar *pt = ptr + 2;
- register int count = 0;
- c = 0;
- while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
- {
- count++;
- c = c * 16 + cd->lcc[*pt] -
- (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
- pt++;
- }
- if (*pt == '}')
- {
- if (c < 0 || count > 8) *errorptr = ERR34;
- ptr = pt;
- break;
- }
- /* If the sequence of hex digits does not end with '}', then we don't
- recognize this construct; fall through to the normal \x handling. */
- }
-#endif
-
- /* Read just a single hex char */
-
- c = 0;
- while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
- {
- ptr++;
- c = c * 16 + cd->lcc[*ptr] -
- (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
- }
- break;
-
- /* Other special escapes not starting with a digit are straightforward */
-
- case 'c':
- c = *(++ptr);
- if (c == 0)
- {
- *errorptr = ERR2;
- return 0;
- }
-
- /* A letter is upper-cased; then the 0x40 bit is flipped */
-
- if (c >= 'a' && c <= 'z') c = cd->fcc[c];
- c ^= 0x40;
- break;
-
- /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
- other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
- for Perl compatibility, it is a literal. This code looks a bit odd, but
- there used to be some cases other than the default, and there may be again
- in future, so I haven't "optimized" it. */
-
- default:
- if ((options & PCRE_EXTRA) != 0) switch(c)
- {
- default:
- *errorptr = ERR3;
- break;
- }
- break;
- }
- }
-
-*ptrptr = ptr;
-return c;
-}
-
-
-
-/*************************************************
-* Check for counted repeat *
-*************************************************/
-
-/* This function is called when a '{' is encountered in a place where it might
-start a quantifier. It looks ahead to see if it really is a quantifier or not.
-It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
-where the ddds are digits.
-
-Arguments:
- p pointer to the first char after '{'
- cd pointer to char tables block
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_counted_repeat(const uschar *p, compile_data *cd)
-{
-if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
-while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
-if (*p == '}') return TRUE;
-
-if (*p++ != ',') return FALSE;
-if (*p == '}') return TRUE;
-
-if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
-while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
-return (*p == '}');
-}
-
-
-
-/*************************************************
-* Read repeat counts *
-*************************************************/
-
-/* Read an item of the form {n,m} and return the values. This is called only
-after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
-so the syntax is guaranteed to be correct, but we need to check the values.
-
-Arguments:
- p pointer to first char after '{'
- minp pointer to int for min
- maxp pointer to int for max
- returned as -1 if no max
- errorptr points to pointer to error message
- cd pointer to character tables clock
-
-Returns: pointer to '}' on success;
- current ptr on error, with errorptr set
-*/
-
-static const uschar *
-read_repeat_counts(const uschar *p, int *minp, int *maxp,
- const char **errorptr, compile_data *cd)
-{
-int min = 0;
-int max = -1;
-
-while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
-
-if (*p == '}') max = min; else
- {
- if (*(++p) != '}')
- {
- max = 0;
- while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
- if (max < min)
- {
- *errorptr = ERR4;
- return p;
- }
- }
- }
-
-/* Do paranoid checks, then fill in the required variables, and pass back the
-pointer to the terminating '}'. */
-
-if (min > 65535 || max > 65535)
- *errorptr = ERR5;
-else
- {
- *minp = min;
- *maxp = max;
- }
-return p;
-}
-
-
-
-/*************************************************
-* Find the fixed length of a pattern *
-*************************************************/
-
-/* Scan a pattern and compute the fixed length of subject that will match it,
-if the length is fixed. This is needed for dealing with backward assertions.
-
-Arguments:
- code points to the start of the pattern (the bracket)
- options the compiling options
-
-Returns: the fixed length, or -1 if there is no fixed length
-*/
-
-static int
-find_fixedlength(uschar *code, int options)
-{
-int length = -1;
-
-register int branchlength = 0;
-register uschar *cc = code + 3;
-
-/* Scan along the opcodes for this branch. If we get to the end of the
-branch, check the length against that of the other branches. */
-
-for (;;)
- {
- int d;
- register int op = *cc;
- if (op >= OP_BRA) op = OP_BRA;
-
- switch (op)
- {
- case OP_BRA:
- case OP_ONCE:
- case OP_COND:
- d = find_fixedlength(cc, options);
- if (d < 0) return -1;
- branchlength += d;
- do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
- cc += 3;
- break;
-
- /* Reached end of a branch; if it's a ket it is the end of a nested
- call. If it's ALT it is an alternation in a nested call. If it is
- END it's the end of the outer call. All can be handled by the same code. */
-
- case OP_ALT:
- case OP_KET:
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_END:
- if (length < 0) length = branchlength;
- else if (length != branchlength) return -1;
- if (*cc != OP_ALT) return length;
- cc += 3;
- branchlength = 0;
- break;
-
- /* Skip over assertive subpatterns */
-
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
- cc += 3;
- break;
-
- /* Skip over things that don't match chars */
-
- case OP_REVERSE:
- cc++;
- /* Fall through */
-
- case OP_CREF:
- case OP_OPT:
- cc++;
- /* Fall through */
-
- case OP_SOD:
- case OP_EOD:
- case OP_EODN:
- case OP_CIRC:
- case OP_DOLL:
- case OP_NOT_WORD_BOUNDARY:
- case OP_WORD_BOUNDARY:
- cc++;
- break;
-
- /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
- This requires a scan of the string, unfortunately. We assume valid UTF-8
- strings, so all we do is reduce the length by one for byte whose bits are
- 10xxxxxx. */
-
- case OP_CHARS:
- branchlength += *(++cc);
-#ifdef SUPPORT_UTF8
- for (d = 1; d <= *cc; d++)
- if ((cc[d] & 0xc0) == 0x80) branchlength--;
-#endif
- cc += *cc + 1;
- break;
-
- /* Handle exact repetitions */
-
- case OP_EXACT:
- case OP_TYPEEXACT:
- branchlength += (cc[1] << 8) + cc[2];
- cc += 4;
- break;
-
- /* Handle single-char matchers */
-
- case OP_NOT_DIGIT:
- case OP_DIGIT:
- case OP_NOT_WHITESPACE:
- case OP_WHITESPACE:
- case OP_NOT_WORDCHAR:
- case OP_WORDCHAR:
- case OP_ANY:
- branchlength++;
- cc++;
- break;
-
-
- /* Check a class for variable quantification */
-
- case OP_CLASS:
- cc += (*cc == OP_REF)? 2 : 33;
-
- switch (*cc)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- return -1;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
- branchlength += (cc[1] << 8) + cc[2];
- cc += 5;
- break;
-
- default:
- branchlength++;
- }
- break;
-
- /* Anything else is variable length */
-
- default:
- return -1;
- }
- }
-/* Control never gets here */
-}
-
-
-
-
-/*************************************************
-* Check for POSIX class syntax *
-*************************************************/
-
-/* This function is called when the sequence "[:" or "[." or "[=" is
-encountered in a character class. It checks whether this is followed by an
-optional ^ and then a sequence of letters, terminated by a matching ":]" or
-".]" or "=]".
-
-Argument:
- ptr pointer to the initial [
- endptr where to return the end pointer
- cd pointer to compile data
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
-{
-int terminator; /* Don't combine these lines; the Solaris cc */
-terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */
-if (*(++ptr) == '^') ptr++;
-while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
-if (*ptr == terminator && ptr[1] == ']')
- {
- *endptr = ptr;
- return TRUE;
- }
-return FALSE;
-}
-
-
-
-
-/*************************************************
-* Check POSIX class name *
-*************************************************/
-
-/* This function is called to check the name given in a POSIX-style class entry
-such as [:alnum:].
-
-Arguments:
- ptr points to the first letter
- len the length of the name
-
-Returns: a value representing the name, or -1 if unknown
-*/
-
-static int
-check_posix_name(const uschar *ptr, int len)
-{
-register int yield = 0;
-while (posix_name_lengths[yield] != 0)
- {
- if (len == posix_name_lengths[yield] &&
- strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
- yield++;
- }
-return -1;
-}
-
-
-
-
-/*************************************************
-* Compile one branch *
-*************************************************/
-
-/* Scan the pattern, compiling it into the code vector.
-
-Arguments:
- options the option bits
- brackets points to number of brackets used
- code points to the pointer to the current code point
- ptrptr points to the current pattern pointer
- errorptr points to pointer to error message
- optchanged set to the value of the last OP_OPT item compiled
- reqchar set to the last literal character required, else -1
- countlits set to count of mandatory literal characters
- cd contains pointers to tables
-
-Returns: TRUE on success
- FALSE, with *errorptr set on error
-*/
-
-static BOOL
-compile_branch(int options, int *brackets, uschar **codeptr,
- const uschar **ptrptr, const char **errorptr, int *optchanged,
- int *reqchar, int *countlits, compile_data *cd)
-{
-int repeat_type, op_type;
-int repeat_min, repeat_max;
-int bravalue, length;
-int greedy_default, greedy_non_default;
-int prevreqchar;
-int condcount = 0;
-int subcountlits = 0;
-register int c;
-register uschar *code = *codeptr;
-uschar *tempcode;
-const uschar *ptr = *ptrptr;
-const uschar *tempptr;
-uschar *previous = NULL;
-uschar class[32];
-
-/* Set up the default and non-default settings for greediness */
-
-greedy_default = ((options & PCRE_UNGREEDY) != 0);
-greedy_non_default = greedy_default ^ 1;
-
-/* Initialize no required char, and count of literals */
-
-*reqchar = prevreqchar = -1;
-*countlits = 0;
-
-/* Switch on next character until the end of the branch */
-
-for (;; ptr++)
- {
- BOOL negate_class;
- int class_charcount;
- int class_lastchar;
- int newoptions;
- int condref;
- int subreqchar;
-
- c = *ptr;
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((cd->ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != '\n') ;
- continue;
- }
- }
-
- switch(c)
- {
- /* The branch terminates at end of string, |, or ). */
-
- case 0:
- case '|':
- case ')':
- *codeptr = code;
- *ptrptr = ptr;
- return TRUE;
-
- /* Handle single-character metacharacters */
-
- case '^':
- previous = NULL;
- *code++ = OP_CIRC;
- break;
-
- case '$':
- previous = NULL;
- *code++ = OP_DOLL;
- break;
-
- case '.':
- previous = code;
- *code++ = OP_ANY;
- break;
-
- /* Character classes. These always build a 32-byte bitmap of the permitted
- characters, except in the special case where there is only one character.
- For negated classes, we build the map as usual, then invert it at the end.
- */
-
- case '[':
- previous = code;
- *code++ = OP_CLASS;
-
- /* If the first character is '^', set the negation flag and skip it. */
-
- if ((c = *(++ptr)) == '^')
- {
- negate_class = TRUE;
- c = *(++ptr);
- }
- else negate_class = FALSE;
-
- /* Keep a count of chars so that we can optimize the case of just a single
- character. */
-
- class_charcount = 0;
- class_lastchar = -1;
-
- /* Initialize the 32-char bit map to all zeros. We have to build the
- map in a temporary bit of store, in case the class contains only 1
- character, because in that case the compiled code doesn't use the
- bit map. */
-
- memset(class, 0, 32 * sizeof(uschar));
-
- /* Process characters until ] is reached. By writing this as a "do" it
- means that an initial ] is taken as a data character. */
-
- do
- {
- if (c == 0)
- {
- *errorptr = ERR6;
- goto FAILED;
- }
-
- /* Handle POSIX class names. Perl allows a negation extension of the
- form [:^name]. A square bracket that doesn't match the syntax is
- treated as a literal. We also recognize the POSIX constructions
- [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
- 5.6 does. */
-
- if (c == '[' &&
- (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
- check_posix_syntax(ptr, &tempptr, cd))
- {
- BOOL local_negate = FALSE;
- int posix_class, i;
- register const uschar *cbits = cd->cbits;
-
- if (ptr[1] != ':')
- {
- *errorptr = ERR31;
- goto FAILED;
- }
-
- ptr += 2;
- if (*ptr == '^')
- {
- local_negate = TRUE;
- ptr++;
- }
-
- posix_class = check_posix_name(ptr, tempptr - ptr);
- if (posix_class < 0)
- {
- *errorptr = ERR30;
- goto FAILED;
- }
-
- /* If matching is caseless, upper and lower are converted to
- alpha. This relies on the fact that the class table starts with
- alpha, lower, upper as the first 3 entries. */
-
- if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
- posix_class = 0;
-
- /* Or into the map we are building up to 3 of the static class
- tables, or their negations. */
-
- posix_class *= 3;
- for (i = 0; i < 3; i++)
- {
- int taboffset = posix_class_maps[posix_class + i];
- if (taboffset < 0) break;
- if (local_negate)
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
- else
- for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
- }
-
- ptr = tempptr + 1;
- class_charcount = 10; /* Set > 1; assumes more than 1 per class */
- continue;
- }
-
- /* Backslash may introduce a single character, or it may introduce one
- of the specials, which just set a flag. Escaped items are checked for
- validity in the pre-compiling pass. The sequence \b is a special case.
- Inside a class (and only there) it is treated as backspace. Elsewhere
- it marks a word boundary. Other escapes have preset maps ready to
- or into the one we are building. We assume they have more than one
- character in them, so set class_count bigger than one. */
-
- if (c == '\\')
- {
- c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
- if (-c == ESC_b) c = '\b';
- else if (c < 0)
- {
- register const uschar *cbits = cd->cbits;
- class_charcount = 10;
- switch (-c)
- {
- case ESC_d:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
- continue;
-
- case ESC_D:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
- continue;
-
- case ESC_w:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
- continue;
-
- case ESC_W:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
- continue;
-
- case ESC_s:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
- continue;
-
- case ESC_S:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
- continue;
-
- default:
- *errorptr = ERR7;
- goto FAILED;
- }
- }
-
- /* Fall through if single character, but don't at present allow
- chars > 255 in UTF-8 mode. */
-
-#ifdef SUPPORT_UTF8
- if (c > 255)
- {
- *errorptr = ERR33;
- goto FAILED;
- }
-#endif
- }
-
- /* A single character may be followed by '-' to form a range. However,
- Perl does not permit ']' to be the end of the range. A '-' character
- here is treated as a literal. */
-
- if (ptr[1] == '-' && ptr[2] != ']')
- {
- int d;
- ptr += 2;
- d = *ptr;
-
- if (d == 0)
- {
- *errorptr = ERR6;
- goto FAILED;
- }
-
- /* The second part of a range can be a single-character escape, but
- not any of the other escapes. Perl 5.6 treats a hyphen as a literal
- in such circumstances. */
-
- if (d == '\\')
- {
- const uschar *oldptr = ptr;
- d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
-
-#ifdef SUPPORT_UTF8
- if (d > 255)
- {
- *errorptr = ERR33;
- goto FAILED;
- }
-#endif
- /* \b is backslash; any other special means the '-' was literal */
-
- if (d < 0)
- {
- if (d == -ESC_b) d = '\b'; else
- {
- ptr = oldptr - 2;
- goto SINGLE_CHARACTER; /* A few lines below */
- }
- }
- }
-
- if (d < c)
- {
- *errorptr = ERR8;
- goto FAILED;
- }
-
- for (; c <= d; c++)
- {
- class[c/8] |= (1 << (c&7));
- if ((options & PCRE_CASELESS) != 0)
- {
- int uc = cd->fcc[c]; /* flip case */
- class[uc/8] |= (1 << (uc&7));
- }
- class_charcount++; /* in case a one-char range */
- class_lastchar = c;
- }
- continue; /* Go get the next char in the class */
- }
-
- /* Handle a lone single character - we can get here for a normal
- non-escape char, or after \ that introduces a single character. */
-
- SINGLE_CHARACTER:
-
- class [c/8] |= (1 << (c&7));
- if ((options & PCRE_CASELESS) != 0)
- {
- c = cd->fcc[c]; /* flip case */
- class[c/8] |= (1 << (c&7));
- }
- class_charcount++;
- class_lastchar = c;
- }
-
- /* Loop until ']' reached; the check for end of string happens inside the
- loop. This "while" is the end of the "do" above. */
-
- while ((c = *(++ptr)) != ']');
-
- /* If class_charcount is 1 and class_lastchar is not negative, we saw
- precisely one character. This doesn't need the whole 32-byte bit map.
- We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
- it's negative. */
-
- if (class_charcount == 1 && class_lastchar >= 0)
- {
- if (negate_class)
- {
- code[-1] = OP_NOT;
- }
- else
- {
- code[-1] = OP_CHARS;
- *code++ = 1;
- }
- *code++ = class_lastchar;
- }
-
- /* Otherwise, negate the 32-byte map if necessary, and copy it into
- the code vector. */
-
- else
- {
- if (negate_class)
- for (c = 0; c < 32; c++) code[c] = ~class[c];
- else
- memcpy(code, class, 32);
- code += 32;
- }
- break;
-
- /* Various kinds of repeat */
-
- case '{':
- if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
- ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
- if (*errorptr != NULL) goto FAILED;
- goto REPEAT;
-
- case '*':
- repeat_min = 0;
- repeat_max = -1;
- goto REPEAT;
-
- case '+':
- repeat_min = 1;
- repeat_max = -1;
- goto REPEAT;
-
- case '?':
- repeat_min = 0;
- repeat_max = 1;
-
- REPEAT:
- if (previous == NULL)
- {
- *errorptr = ERR9;
- goto FAILED;
- }
-
- /* If the next character is '?' this is a minimizing repeat, by default,
- but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
- next character. */
-
- if (ptr[1] == '?')
- { repeat_type = greedy_non_default; ptr++; }
- else repeat_type = greedy_default;
-
- /* If previous was a string of characters, chop off the last one and use it
- as the subject of the repeat. If there was only one character, we can
- abolish the previous item altogether. A repeat with a zero minimum wipes
- out any reqchar setting, backing up to the previous value. We must also
- adjust the countlits value. */
-
- if (*previous == OP_CHARS)
- {
- int len = previous[1];
-
- if (repeat_min == 0) *reqchar = prevreqchar;
- *countlits += repeat_min - 1;
-
- if (len == 1)
- {
- c = previous[2];
- code = previous;
- }
- else
- {
- c = previous[len+1];
- previous[1]--;
- code--;
- }
- op_type = 0; /* Use single-char op codes */
- goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */
- }
-
- /* If previous was a single negated character ([^a] or similar), we use
- one of the special opcodes, replacing it. The code is shared with single-
- character repeats by adding a suitable offset into repeat_type. */
-
- else if ((int)*previous == OP_NOT)
- {
- op_type = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */
- c = previous[1];
- code = previous;
- goto OUTPUT_SINGLE_REPEAT;
- }
-
- /* If previous was a character type match (\d or similar), abolish it and
- create a suitable repeat item. The code is shared with single-character
- repeats by adding a suitable offset into repeat_type. */
-
- else if ((int)*previous < OP_EODN || *previous == OP_ANY)
- {
- op_type = OP_TYPESTAR - OP_STAR; /* Use type opcodes */
- c = *previous;
- code = previous;
-
- OUTPUT_SINGLE_REPEAT:
-
- /* If the maximum is zero then the minimum must also be zero; Perl allows
- this case, so we do too - by simply omitting the item altogether. */
-
- if (repeat_max == 0) goto END_REPEAT;
-
- /* Combine the op_type with the repeat_type */
-
- repeat_type += op_type;
-
- /* A minimum of zero is handled either as the special case * or ?, or as
- an UPTO, with the maximum given. */
-
- if (repeat_min == 0)
- {
- if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
- else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
- else
- {
- *code++ = OP_UPTO + repeat_type;
- *code++ = repeat_max >> 8;
- *code++ = (repeat_max & 255);
- }
- }
-
- /* The case {1,} is handled as the special case + */
-
- else if (repeat_min == 1 && repeat_max == -1)
- *code++ = OP_PLUS + repeat_type;
-
- /* The case {n,n} is just an EXACT, while the general case {n,m} is
- handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
-
- else
- {
- if (repeat_min != 1)
- {
- *code++ = OP_EXACT + op_type; /* NB EXACT doesn't have repeat_type */
- *code++ = repeat_min >> 8;
- *code++ = (repeat_min & 255);
- }
-
- /* If the mininum is 1 and the previous item was a character string,
- we either have to put back the item that got cancelled if the string
- length was 1, or add the character back onto the end of a longer
- string. For a character type nothing need be done; it will just get
- put back naturally. Note that the final character is always going to
- get added below. */
-
- else if (*previous == OP_CHARS)
- {
- if (code == previous) code += 2; else previous[1]++;
- }
-
- /* For a single negated character we also have to put back the
- item that got cancelled. */
-
- else if (*previous == OP_NOT) code++;
-
- /* If the maximum is unlimited, insert an OP_STAR. */
-
- if (repeat_max < 0)
- {
- *code++ = c;
- *code++ = OP_STAR + repeat_type;
- }
-
- /* Else insert an UPTO if the max is greater than the min. */
-
- else if (repeat_max != repeat_min)
- {
- *code++ = c;
- repeat_max -= repeat_min;
- *code++ = OP_UPTO + repeat_type;
- *code++ = repeat_max >> 8;
- *code++ = (repeat_max & 255);
- }
- }
-
- /* The character or character type itself comes last in all cases. */
-
- *code++ = c;
- }
-
- /* If previous was a character class or a back reference, we put the repeat
- stuff after it, but just skip the item if the repeat was {0,0}. */
-
- else if (*previous == OP_CLASS || *previous == OP_REF)
- {
- if (repeat_max == 0)
- {
- code = previous;
- goto END_REPEAT;
- }
- if (repeat_min == 0 && repeat_max == -1)
- *code++ = OP_CRSTAR + repeat_type;
- else if (repeat_min == 1 && repeat_max == -1)
- *code++ = OP_CRPLUS + repeat_type;
- else if (repeat_min == 0 && repeat_max == 1)
- *code++ = OP_CRQUERY + repeat_type;
- else
- {
- *code++ = OP_CRRANGE + repeat_type;
- *code++ = repeat_min >> 8;
- *code++ = repeat_min & 255;
- if (repeat_max == -1) repeat_max = 0; /* 2-byte encoding for max */
- *code++ = repeat_max >> 8;
- *code++ = repeat_max & 255;
- }
- }
-
- /* If previous was a bracket group, we may have to replicate it in certain
- cases. */
-
- else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
- (int)*previous == OP_COND)
- {
- register int i;
- int ketoffset = 0;
- int len = code - previous;
- uschar *bralink = NULL;
-
- /* If the maximum repeat count is unlimited, find the end of the bracket
- by scanning through from the start, and compute the offset back to it
- from the current code pointer. There may be an OP_OPT setting following
- the final KET, so we can't find the end just by going back from the code
- pointer. */
-
- if (repeat_max == -1)
- {
- register uschar *ket = previous;
- do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
- ketoffset = code - ket;
- }
-
- /* The case of a zero minimum is special because of the need to stick
- OP_BRAZERO in front of it, and because the group appears once in the
- data, whereas in other cases it appears the minimum number of times. For
- this reason, it is simplest to treat this case separately, as otherwise
- the code gets far too mess. There are several special subcases when the
- minimum is zero. */
-
- if (repeat_min == 0)
- {
- /* If we set up a required char from the bracket, we must back off
- to the previous value and reset the countlits value too. */
-
- if (subcountlits > 0)
- {
- *reqchar = prevreqchar;
- *countlits -= subcountlits;
- }
-
- /* If the maximum is also zero, we just omit the group from the output
- altogether. */
-
- if (repeat_max == 0)
- {
- code = previous;
- goto END_REPEAT;
- }
-
- /* If the maximum is 1 or unlimited, we just have to stick in the
- BRAZERO and do no more at this point. */
-
- if (repeat_max <= 1)
- {
- memmove(previous+1, previous, len);
- code++;
- *previous++ = OP_BRAZERO + repeat_type;
- }
-
- /* If the maximum is greater than 1 and limited, we have to replicate
- in a nested fashion, sticking OP_BRAZERO before each set of brackets.
- The first one has to be handled carefully because it's the original
- copy, which has to be moved up. The remainder can be handled by code
- that is common with the non-zero minimum case below. We just have to
- adjust the value or repeat_max, since one less copy is required. */
-
- else
- {
- int offset;
- memmove(previous+4, previous, len);
- code += 4;
- *previous++ = OP_BRAZERO + repeat_type;
- *previous++ = OP_BRA;
-
- /* We chain together the bracket offset fields that have to be
- filled in later when the ends of the brackets are reached. */
-
- offset = (bralink == NULL)? 0 : previous - bralink;
- bralink = previous;
- *previous++ = offset >> 8;
- *previous++ = offset & 255;
- }
-
- repeat_max--;
- }
-
- /* If the minimum is greater than zero, replicate the group as many
- times as necessary, and adjust the maximum to the number of subsequent
- copies that we need. */
-
- else
- {
- for (i = 1; i < repeat_min; i++)
- {
- memcpy(code, previous, len);
- code += len;
- }
- if (repeat_max > 0) repeat_max -= repeat_min;
- }
-
- /* This code is common to both the zero and non-zero minimum cases. If
- the maximum is limited, it replicates the group in a nested fashion,
- remembering the bracket starts on a stack. In the case of a zero minimum,
- the first one was set up above. In all cases the repeat_max now specifies
- the number of additional copies needed. */
-
- if (repeat_max >= 0)
- {
- for (i = repeat_max - 1; i >= 0; i--)
- {
- *code++ = OP_BRAZERO + repeat_type;
-
- /* All but the final copy start a new nesting, maintaining the
- chain of brackets outstanding. */
-
- if (i != 0)
- {
- int offset;
- *code++ = OP_BRA;
- offset = (bralink == NULL)? 0 : code - bralink;
- bralink = code;
- *code++ = offset >> 8;
- *code++ = offset & 255;
- }
-
- memcpy(code, previous, len);
- code += len;
- }
-
- /* Now chain through the pending brackets, and fill in their length
- fields (which are holding the chain links pro tem). */
-
- while (bralink != NULL)
- {
- int oldlinkoffset;
- int offset = code - bralink + 1;
- uschar *bra = code - offset;
- oldlinkoffset = (bra[1] << 8) + bra[2];
- bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
- *code++ = OP_KET;
- *code++ = bra[1] = offset >> 8;
- *code++ = bra[2] = (offset & 255);
- }
- }
-
- /* If the maximum is unlimited, set a repeater in the final copy. We
- can't just offset backwards from the current code point, because we
- don't know if there's been an options resetting after the ket. The
- correct offset was computed above. */
-
- else code[-ketoffset] = OP_KETRMAX + repeat_type;
- }
-
- /* Else there's some kind of shambles */
-
- else
- {
- *errorptr = ERR11;
- goto FAILED;
- }
-
- /* In all case we no longer have a previous item. */
-
- END_REPEAT:
- previous = NULL;
- break;
-
-
- /* Start of nested bracket sub-expression, or comment or lookahead or
- lookbehind or option setting or condition. First deal with special things
- that can come after a bracket; all are introduced by ?, and the appearance
- of any of them means that this is not a referencing group. They were
- checked for validity in the first pass over the string, so we don't have to
- check for syntax errors here. */
-
- case '(':
- newoptions = options;
- condref = -1;
-
- if (*(++ptr) == '?')
- {
- int set, unset;
- int *optset;
-
- switch (*(++ptr))
- {
- case '#': /* Comment; skip to ket */
- ptr++;
- while (*ptr != ')') ptr++;
- continue;
-
- case ':': /* Non-extracting bracket */
- bravalue = OP_BRA;
- ptr++;
- break;
-
- case '(':
- bravalue = OP_COND; /* Conditional group */
- if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
- {
- condref = *ptr - '0';
- while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
- if (condref == 0)
- {
- *errorptr = ERR35;
- goto FAILED;
- }
- ptr++;
- }
- else ptr--;
- break;
-
- case '=': /* Positive lookahead */
- bravalue = OP_ASSERT;
- ptr++;
- break;
-
- case '!': /* Negative lookahead */
- bravalue = OP_ASSERT_NOT;
- ptr++;
- break;
-
- case '<': /* Lookbehinds */
- switch (*(++ptr))
- {
- case '=': /* Positive lookbehind */
- bravalue = OP_ASSERTBACK;
- ptr++;
- break;
-
- case '!': /* Negative lookbehind */
- bravalue = OP_ASSERTBACK_NOT;
- ptr++;
- break;
-
- default: /* Syntax error */
- *errorptr = ERR24;
- goto FAILED;
- }
- break;
-
- case '>': /* One-time brackets */
- bravalue = OP_ONCE;
- ptr++;
- break;
-
- case 'R': /* Pattern recursion */
- *code++ = OP_RECURSE;
- ptr++;
- continue;
-
- default: /* Option setting */
- set = unset = 0;
- optset = &set;
-
- while (*ptr != ')' && *ptr != ':')
- {
- switch (*ptr++)
- {
- case '-': optset = &unset; break;
-
- case 'i': *optset |= PCRE_CASELESS; break;
- case 'm': *optset |= PCRE_MULTILINE; break;
- case 's': *optset |= PCRE_DOTALL; break;
- case 'x': *optset |= PCRE_EXTENDED; break;
- case 'U': *optset |= PCRE_UNGREEDY; break;
- case 'X': *optset |= PCRE_EXTRA; break;
-
- default:
- *errorptr = ERR12;
- goto FAILED;
- }
- }
-
- /* Set up the changed option bits, but don't change anything yet. */
-
- newoptions = (options | set) & (~unset);
-
- /* If the options ended with ')' this is not the start of a nested
- group with option changes, so the options change at this level. At top
- level there is nothing else to be done (the options will in fact have
- been set from the start of compiling as a result of the first pass) but
- at an inner level we must compile code to change the ims options if
- necessary, and pass the new setting back so that it can be put at the
- start of any following branches, and when this group ends, a resetting
- item can be compiled. */
-
- if (*ptr == ')')
- {
- if ((options & PCRE_INGROUP) != 0 &&
- (options & PCRE_IMS) != (newoptions & PCRE_IMS))
- {
- *code++ = OP_OPT;
- *code++ = *optchanged = newoptions & PCRE_IMS;
- }
- options = newoptions; /* Change options at this level */
- previous = NULL; /* This item can't be repeated */
- continue; /* It is complete */
- }
-
- /* If the options ended with ':' we are heading into a nested group
- with possible change of options. Such groups are non-capturing and are
- not assertions of any kind. All we need to do is skip over the ':';
- the newoptions value is handled below. */
-
- bravalue = OP_BRA;
- ptr++;
- }
- }
-
- /* Else we have a referencing group; adjust the opcode. */
-
- else
- {
- if (++(*brackets) > EXTRACT_MAX)
- {
- *errorptr = ERR13;
- goto FAILED;
- }
- bravalue = OP_BRA + *brackets;
- }
-
- /* Process nested bracketed re. Assertions may not be repeated, but other
- kinds can be. We copy code into a non-register variable in order to be able
- to pass its address because some compilers complain otherwise. Pass in a
- new setting for the ims options if they have changed. */
-
- previous = (bravalue >= OP_ONCE)? code : NULL;
- *code = bravalue;
- tempcode = code;
-
- if (!compile_regex(
- options | PCRE_INGROUP, /* Set for all nested groups */
- ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
- newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
- brackets, /* Bracket level */
- &tempcode, /* Where to put code (updated) */
- &ptr, /* Input pointer (updated) */
- errorptr, /* Where to put an error message */
- (bravalue == OP_ASSERTBACK ||
- bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
- condref, /* Condition reference number */
- &subreqchar, /* For possible last char */
- &subcountlits, /* For literal count */
- cd)) /* Tables block */
- goto FAILED;
-
- /* At the end of compiling, code is still pointing to the start of the
- group, while tempcode has been updated to point past the end of the group
- and any option resetting that may follow it. The pattern pointer (ptr)
- is on the bracket. */
-
- /* If this is a conditional bracket, check that there are no more than
- two branches in the group. */
-
- if (bravalue == OP_COND)
- {
- uschar *tc = code;
- condcount = 0;
-
- do {
- condcount++;
- tc += (tc[1] << 8) | tc[2];
- }
- while (*tc != OP_KET);
-
- if (condcount > 2)
- {
- *errorptr = ERR27;
- goto FAILED;
- }
- }
-
- /* Handle updating of the required character. If the subpattern didn't
- set one, leave it as it was. Otherwise, update it for normal brackets of
- all kinds, forward assertions, and conditions with two branches. Don't
- update the literal count for forward assertions, however. If the bracket
- is followed by a quantifier with zero repeat, we have to back off. Hence
- the definition of prevreqchar and subcountlits outside the main loop so
- that they can be accessed for the back off. */
-
- if (subreqchar > 0 &&
- (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
- (bravalue == OP_COND && condcount == 2)))
- {
- prevreqchar = *reqchar;
- *reqchar = subreqchar;
- if (bravalue != OP_ASSERT) *countlits += subcountlits;
- }
-
- /* Now update the main code pointer to the end of the group. */
-
- code = tempcode;
-
- /* Error if hit end of pattern */
-
- if (*ptr != ')')
- {
- *errorptr = ERR14;
- goto FAILED;
- }
- break;
-
- /* Check \ for being a real metacharacter; if not, fall through and handle
- it as a data character at the start of a string. Escape items are checked
- for validity in the pre-compiling pass. */
-
- case '\\':
- tempptr = ptr;
- c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
-
- /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
- are arranged to be the negation of the corresponding OP_values. For the
- back references, the values are ESC_REF plus the reference number. Only
- back references and those types that consume a character may be repeated.
- We can test for values between ESC_b and ESC_Z for the latter; this may
- have to change if any new ones are ever created. */
-
- if (c < 0)
- {
- if (-c >= ESC_REF)
- {
- previous = code;
- *code++ = OP_REF;
- *code++ = -c - ESC_REF;
- }
- else
- {
- previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
- *code++ = -c;
- }
- continue;
- }
-
- /* Data character: reset and fall through */
-
- ptr = tempptr;
- c = '\\';
-
- /* Handle a run of data characters until a metacharacter is encountered.
- The first character is guaranteed not to be whitespace or # when the
- extended flag is set. */
-
- NORMAL_CHAR:
- default:
- previous = code;
- *code = OP_CHARS;
- code += 2;
- length = 0;
-
- do
- {
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((cd->ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != '\n') ;
- if (c == 0) break;
- continue;
- }
- }
-
- /* Backslash may introduce a data char or a metacharacter. Escaped items
- are checked for validity in the pre-compiling pass. Stop the string
- before a metaitem. */
-
- if (c == '\\')
- {
- tempptr = ptr;
- c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
- if (c < 0) { ptr = tempptr; break; }
-
- /* If a character is > 127 in UTF-8 mode, we have to turn it into
- two or more characters in the UTF-8 encoding. */
-
-#ifdef SUPPORT_UTF8
- if (c > 127 && (options & PCRE_UTF8) != 0)
- {
- uschar buffer[8];
- int len = ord2utf8(c, buffer);
- for (c = 0; c < len; c++) *code++ = buffer[c];
- length += len;
- continue;
- }
-#endif
- }
-
- /* Ordinary character or single-char escape */
-
- *code++ = c;
- length++;
- }
-
- /* This "while" is the end of the "do" above. */
-
- while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
- /* Update the last character and the count of literals */
-
- prevreqchar = (length > 1)? code[-2] : *reqchar;
- *reqchar = code[-1];
- *countlits += length;
-
- /* Compute the length and set it in the data vector, and advance to
- the next state. */
-
- previous[1] = length;
- if (length < MAXLIT) ptr--;
- break;
- }
- } /* end of big loop */
-
-/* Control never reaches here by falling through, only by a goto for all the
-error states. Pass back the position in the pattern so that it can be displayed
-to the user for diagnosing the error. */
-
-FAILED:
-*ptrptr = ptr;
-return FALSE;
-}
-
-
-
-
-/*************************************************
-* Compile sequence of alternatives *
-*************************************************/
-
-/* On entry, ptr is pointing past the bracket character, but on return
-it points to the closing bracket, or vertical bar, or end of string.
-The code variable is pointing at the byte into which the BRA operator has been
-stored. If the ims options are changed at the start (for a (?ims: group) or
-during any branch, we need to insert an OP_OPT item at the start of every
-following branch to ensure they get set correctly at run time, and also pass
-the new options into every subsequent branch compile.
-
-Argument:
- options the option bits
- optchanged new ims options to set as if (?ims) were at the start, or -1
- for no change
- brackets -> int containing the number of extracting brackets used
- codeptr -> the address of the current code pointer
- ptrptr -> the address of the current pattern pointer
- errorptr -> pointer to error message
- lookbehind TRUE if this is a lookbehind assertion
- condref >= 0 for OPT_CREF setting at start of conditional group
- reqchar -> place to put the last required character, or a negative number
- countlits -> place to put the shortest literal count of any branch
- cd points to the data block with tables pointers
-
-Returns: TRUE on success
-*/
-
-static BOOL
-compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
- const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int condref,
- int *reqchar, int *countlits, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-uschar *code = *codeptr;
-uschar *last_branch = code;
-uschar *start_bracket = code;
-uschar *reverse_count = NULL;
-int oldoptions = options & PCRE_IMS;
-int branchreqchar, branchcountlits;
-
-*reqchar = -1;
-*countlits = INT_MAX;
-code += 3;
-
-/* At the start of a reference-based conditional group, insert the reference
-number as an OP_CREF item. */
-
-if (condref >= 0)
- {
- *code++ = OP_CREF;
- *code++ = condref;
- }
-
-/* Loop for each alternative branch */
-
-for (;;)
- {
- int length;
-
- /* Handle change of options */
-
- if (optchanged >= 0)
- {
- *code++ = OP_OPT;
- *code++ = optchanged;
- options = (options & ~PCRE_IMS) | optchanged;
- }
-
- /* Set up dummy OP_REVERSE if lookbehind assertion */
-
- if (lookbehind)
- {
- *code++ = OP_REVERSE;
- reverse_count = code;
- *code++ = 0;
- *code++ = 0;
- }
-
- /* Now compile the branch */
-
- if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
- &branchreqchar, &branchcountlits, cd))
- {
- *ptrptr = ptr;
- return FALSE;
- }
-
- /* Fill in the length of the last branch */
-
- length = code - last_branch;
- last_branch[1] = length >> 8;
- last_branch[2] = length & 255;
-
- /* Save the last required character if all branches have the same; a current
- value of -1 means unset, while -2 means "previous branch had no last required
- char". */
-
- if (*reqchar != -2)
- {
- if (branchreqchar >= 0)
- {
- if (*reqchar == -1) *reqchar = branchreqchar;
- else if (*reqchar != branchreqchar) *reqchar = -2;
- }
- else *reqchar = -2;
- }
-
- /* Keep the shortest literal count */
-
- if (branchcountlits < *countlits) *countlits = branchcountlits;
- DPRINTF(("literal count = %d min=%d\n", branchcountlits, *countlits));
-
- /* If lookbehind, check that this branch matches a fixed-length string,
- and put the length into the OP_REVERSE item. Temporarily mark the end of
- the branch with OP_END. */
-
- if (lookbehind)
- {
- *code = OP_END;
- length = find_fixedlength(last_branch, options);
- DPRINTF(("fixed length = %d\n", length));
- if (length < 0)
- {
- *errorptr = ERR25;
- *ptrptr = ptr;
- return FALSE;
- }
- reverse_count[0] = (length >> 8);
- reverse_count[1] = length & 255;
- }
-
- /* Reached end of expression, either ')' or end of pattern. Insert a
- terminating ket and the length of the whole bracketed item, and return,
- leaving the pointer at the terminating char. If any of the ims options
- were changed inside the group, compile a resetting op-code following. */
-
- if (*ptr != '|')
- {
- length = code - start_bracket;
- *code++ = OP_KET;
- *code++ = length >> 8;
- *code++ = length & 255;
- if (optchanged >= 0)
- {
- *code++ = OP_OPT;
- *code++ = oldoptions;
- }
- *codeptr = code;
- *ptrptr = ptr;
- return TRUE;
- }
-
- /* Another branch follows; insert an "or" node and advance the pointer. */
-
- *code = OP_ALT;
- last_branch = code;
- code += 3;
- ptr++;
- }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Find first significant op code *
-*************************************************/
-
-/* This is called by several functions that scan a compiled expression looking
-for a fixed first character, or an anchoring op code etc. It skips over things
-that do not influence this. For one application, a change of caseless option is
-important.
-
-Arguments:
- code pointer to the start of the group
- options pointer to external options
- optbit the option bit whose changing is significant, or
- zero if none are
- optstop TRUE to return on option change, otherwise change the options
- value and continue
-
-Returns: pointer to the first significant opcode
-*/
-
-static const uschar*
-first_significant_code(const uschar *code, int *options, int optbit,
- BOOL optstop)
-{
-for (;;)
- {
- switch ((int)*code)
- {
- case OP_OPT:
- if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
- {
- if (optstop) return code;
- *options = (int)code[1];
- }
- code += 2;
- break;
-
- case OP_CREF:
- code += 2;
- break;
-
- case OP_WORD_BOUNDARY:
- case OP_NOT_WORD_BOUNDARY:
- code++;
- break;
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
- code += 3;
- break;
-
- default:
- return code;
- }
- }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Check for anchored expression *
-*************************************************/
-
-/* Try to find out if this is an anchored regular expression. Consider each
-alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
-all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
-it's anchored. However, if this is a multiline pattern, then only OP_SOD
-counts, since OP_CIRC can match in the middle.
-
-A branch is also implicitly anchored if it starts with .* and DOTALL is set,
-because that will try the rest of the pattern at all possible matching points,
-so there is no point trying them again.
-
-Arguments:
- code points to start of expression (the bracket)
- options points to the options setting
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_anchored(register const uschar *code, int *options)
-{
-do {
- const uschar *scode = first_significant_code(code + 3, options,
- PCRE_MULTILINE, FALSE);
- register int op = *scode;
- if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
- { if (!is_anchored(scode, options)) return FALSE; }
- else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
- (*options & PCRE_DOTALL) != 0)
- { if (scode[1] != OP_ANY) return FALSE; }
- else if (op != OP_SOD &&
- ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
- return FALSE;
- code += (code[1] << 8) + code[2];
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for starting with ^ or .* *
-*************************************************/
-
-/* This is called to find out if every branch starts with ^ or .* so that
-"first char" processing can be done to speed things up in multiline
-matching and for non-DOTALL patterns that start with .* (which must start at
-the beginning or after \n).
-
-Argument: points to start of expression (the bracket)
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_startline(const uschar *code)
-{
-do {
- const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
- register int op = *scode;
- if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
- { if (!is_startline(scode)) return FALSE; }
- else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
- { if (scode[1] != OP_ANY) return FALSE; }
- else if (op != OP_CIRC) return FALSE;
- code += (code[1] << 8) + code[2];
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for fixed first char *
-*************************************************/
-
-/* Try to find out if there is a fixed first character. This is called for
-unanchored expressions, as it speeds up their processing quite considerably.
-Consider each alternative branch. If they all start with the same char, or with
-a bracket all of whose alternatives start with the same char (recurse ad lib),
-then we return that char, otherwise -1.
-
-Arguments:
- code points to start of expression (the bracket)
- options pointer to the options (used to check casing changes)
-
-Returns: -1 or the fixed first char
-*/
-
-static int
-find_firstchar(const uschar *code, int *options)
-{
-register int c = -1;
-do {
- int d;
- const uschar *scode = first_significant_code(code + 3, options,
- PCRE_CASELESS, TRUE);
- register int op = *scode;
-
- if (op >= OP_BRA) op = OP_BRA;
-
- switch(op)
- {
- default:
- return -1;
-
- case OP_BRA:
- case OP_ASSERT:
- case OP_ONCE:
- case OP_COND:
- if ((d = find_firstchar(scode, options)) < 0) return -1;
- if (c < 0) c = d; else if (c != d) return -1;
- break;
-
- case OP_EXACT: /* Fall through */
- scode++;
-
- case OP_CHARS: /* Fall through */
- scode++;
-
- case OP_PLUS:
- case OP_MINPLUS:
- if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
- break;
- }
-
- code += (code[1] << 8) + code[2];
- }
-while (*code == OP_ALT);
-return c;
-}
-
-
-
-
-
-/*************************************************
-* Compile a Regular Expression *
-*************************************************/
-
-/* This function takes a string and returns a pointer to a block of store
-holding a compiled version of the expression.
-
-Arguments:
- pattern the regular expression
- options various option bits
- errorptr pointer to pointer to error text
- erroroffset ptr offset in pattern where error was detected
- tables pointer to character tables or NULL
-
-Returns: pointer to compiled data block, or NULL on error,
- with errorptr and erroroffset set
-*/
-
-pcre *
-pcre_compile(const char *pattern, int options, const char **errorptr,
- int *erroroffset, const unsigned char *tables)
-{
-real_pcre *re;
-int length = 3; /* For initial BRA plus length */
-int runlength;
-int c, reqchar, countlits;
-int bracount = 0;
-int top_backref = 0;
-int branch_extra = 0;
-int branch_newextra;
-unsigned int brastackptr = 0;
-size_t size;
-uschar *code;
-const uschar *ptr;
-compile_data compile_block;
-int brastack[BRASTACK_SIZE];
-uschar bralenstack[BRASTACK_SIZE];
-
-#ifdef DEBUG
-uschar *code_base, *code_end;
-#endif
-
-/* Can't support UTF8 unless PCRE has been compiled to include the code. */
-
-#ifndef SUPPORT_UTF8
-if ((options & PCRE_UTF8) != 0)
- {
- *errorptr = ERR32;
- return NULL;
- }
-#endif
-
-/* We can't pass back an error message if errorptr is NULL; I guess the best we
-can do is just return NULL. */
-
-if (errorptr == NULL) return NULL;
-*errorptr = NULL;
-
-/* However, we can give a message for this error */
-
-if (erroroffset == NULL)
- {
- *errorptr = ERR16;
- return NULL;
- }
-*erroroffset = 0;
-
-if ((options & ~PUBLIC_OPTIONS) != 0)
- {
- *errorptr = ERR17;
- return NULL;
- }
-
-/* Set up pointers to the individual character tables */
-
-if (tables == NULL) tables = pcre_default_tables;
-compile_block.lcc = tables + lcc_offset;
-compile_block.fcc = tables + fcc_offset;
-compile_block.cbits = tables + cbits_offset;
-compile_block.ctypes = tables + ctypes_offset;
-
-/* Reflect pattern for debugging output */
-
-DPRINTF(("------------------------------------------------------------------\n"));
-DPRINTF(("%s\n", pattern));
-
-/* The first thing to do is to make a pass over the pattern to compute the
-amount of store required to hold the compiled code. This does not have to be
-perfect as long as errors are overestimates. At the same time we can detect any
-internal flag settings. Make an attempt to correct for any counted white space
-if an "extended" flag setting appears late in the pattern. We can't be so
-clever for #-comments. */
-
-ptr = (const uschar *)(pattern - 1);
-while ((c = *(++ptr)) != 0)
- {
- int min, max;
- int class_charcount;
-
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != '\n') ;
- continue;
- }
- }
-
- switch(c)
- {
- /* A backslashed item may be an escaped "normal" character or a
- character type. For a "normal" character, put the pointers and
- character back so that tests for whitespace etc. in the input
- are done correctly. */
-
- case '\\':
- {
- const uschar *save_ptr = ptr;
- c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (c >= 0)
- {
- ptr = save_ptr;
- c = '\\';
- goto NORMAL_CHAR;
- }
- }
- length++;
-
- /* A back reference needs an additional char, plus either one or 5
- bytes for a repeat. We also need to keep the value of the highest
- back reference. */
-
- if (c <= -ESC_REF)
- {
- int refnum = -c - ESC_REF;
- if (refnum > top_backref) top_backref = refnum;
- length++; /* For single back reference */
- if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else length += 5;
- if (ptr[1] == '?') ptr++;
- }
- }
- continue;
-
- case '^':
- case '.':
- case '$':
- case '*': /* These repeats won't be after brackets; */
- case '+': /* those are handled separately */
- case '?':
- length++;
- continue;
-
- /* This covers the cases of repeats after a single char, metachar, class,
- or back reference. */
-
- case '{':
- if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
- ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else
- {
- length--; /* Uncount the original char or metachar */
- if (min == 1) length++; else if (min > 0) length += 4;
- if (max > 0) length += 4; else length += 2;
- }
- if (ptr[1] == '?') ptr++;
- continue;
-
- /* An alternation contains an offset to the next branch or ket. If any ims
- options changed in the previous branch(es), and/or if we are in a
- lookbehind assertion, extra space will be needed at the start of the
- branch. This is handled by branch_extra. */
-
- case '|':
- length += 3 + branch_extra;
- continue;
-
- /* A character class uses 33 characters. Don't worry about character types
- that aren't allowed in classes - they'll get picked up during the compile.
- A character class that contains only one character uses 2 or 3 bytes,
- depending on whether it is negated or not. Notice this where we can. */
-
- case '[':
- class_charcount = 0;
- if (*(++ptr) == '^') ptr++;
- do
- {
- if (*ptr == '\\')
- {
- int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
- &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
- }
- else class_charcount++;
- ptr++;
- }
- while (*ptr != 0 && *ptr != ']');
-
- /* Repeats for negated single chars are handled by the general code */
-
- if (class_charcount == 1) length += 3; else
- {
- length += 33;
-
- /* A repeat needs either 1 or 5 bytes. */
-
- if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else length += 5;
- if (ptr[1] == '?') ptr++;
- }
- }
- continue;
-
- /* Brackets may be genuine groups or special things */
-
- case '(':
- branch_newextra = 0;
-
- /* Handle special forms of bracket, which all start (? */
-
- if (ptr[1] == '?')
- {
- int set, unset;
- int *optset;
-
- switch (c = ptr[2])
- {
- /* Skip over comments entirely */
- case '#':
- ptr += 3;
- while (*ptr != 0 && *ptr != ')') ptr++;
- if (*ptr == 0)
- {
- *errorptr = ERR18;
- goto PCRE_ERROR_RETURN;
- }
- continue;
-
- /* Non-referencing groups and lookaheads just move the pointer on, and
- then behave like a non-special bracket, except that they don't increment
- the count of extracting brackets. Ditto for the "once only" bracket,
- which is in Perl from version 5.005. */
-
- case ':':
- case '=':
- case '!':
- case '>':
- ptr += 2;
- break;
-
- /* A recursive call to the regex is an extension, to provide the
- facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
-
- case 'R':
- if (ptr[3] != ')')
- {
- *errorptr = ERR29;
- goto PCRE_ERROR_RETURN;
- }
- ptr += 3;
- length += 1;
- break;
-
- /* Lookbehinds are in Perl from version 5.005 */
-
- case '<':
- if (ptr[3] == '=' || ptr[3] == '!')
- {
- ptr += 3;
- branch_newextra = 3;
- length += 3; /* For the first branch */
- break;
- }
- *errorptr = ERR24;
- goto PCRE_ERROR_RETURN;
-
- /* Conditionals are in Perl from version 5.005. The bracket must either
- be followed by a number (for bracket reference) or by an assertion
- group. */
-
- case '(':
- if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
- {
- ptr += 4;
- length += 2;
- while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
- if (*ptr != ')')
- {
- *errorptr = ERR26;
- goto PCRE_ERROR_RETURN;
- }
- }
- else /* An assertion must follow */
- {
- ptr++; /* Can treat like ':' as far as spacing is concerned */
- if (ptr[2] != '?' ||
- (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
- {
- ptr += 2; /* To get right offset in message */
- *errorptr = ERR28;
- goto PCRE_ERROR_RETURN;
- }
- }
- break;
-
- /* Else loop checking valid options until ) is met. Anything else is an
- error. If we are without any brackets, i.e. at top level, the settings
- act as if specified in the options, so massage the options immediately.
- This is for backward compatibility with Perl 5.004. */
-
- default:
- set = unset = 0;
- optset = &set;
- ptr += 2;
-
- for (;; ptr++)
- {
- c = *ptr;
- switch (c)
- {
- case 'i':
- *optset |= PCRE_CASELESS;
- continue;
-
- case 'm':
- *optset |= PCRE_MULTILINE;
- continue;
-
- case 's':
- *optset |= PCRE_DOTALL;
- continue;
-
- case 'x':
- *optset |= PCRE_EXTENDED;
- continue;
-
- case 'X':
- *optset |= PCRE_EXTRA;
- continue;
-
- case 'U':
- *optset |= PCRE_UNGREEDY;
- continue;
-
- case '-':
- optset = &unset;
- continue;
-
- /* A termination by ')' indicates an options-setting-only item;
- this is global at top level; otherwise nothing is done here and
- it is handled during the compiling process on a per-bracket-group
- basis. */
-
- case ')':
- if (brastackptr == 0)
- {
- options = (options | set) & (~unset);
- set = unset = 0; /* To save length */
- }
- /* Fall through */
-
- /* A termination by ':' indicates the start of a nested group with
- the given options set. This is again handled at compile time, but
- we must allow for compiled space if any of the ims options are
- set. We also have to allow for resetting space at the end of
- the group, which is why 4 is added to the length and not just 2.
- If there are several changes of options within the same group, this
- will lead to an over-estimate on the length, but this shouldn't
- matter very much. We also have to allow for resetting options at
- the start of any alternations, which we do by setting
- branch_newextra to 2. Finally, we record whether the case-dependent
- flag ever changes within the regex. This is used by the "required
- character" code. */
-
- case ':':
- if (((set|unset) & PCRE_IMS) != 0)
- {
- length += 4;
- branch_newextra = 2;
- if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
- }
- goto END_OPTIONS;
-
- /* Unrecognized option character */
-
- default:
- *errorptr = ERR12;
- goto PCRE_ERROR_RETURN;
- }
- }
-
- /* If we hit a closing bracket, that's it - this is a freestanding
- option-setting. We need to ensure that branch_extra is updated if
- necessary. The only values branch_newextra can have here are 0 or 2.
- If the value is 2, then branch_extra must either be 2 or 5, depending
- on whether this is a lookbehind group or not. */
-
- END_OPTIONS:
- if (c == ')')
- {
- if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
- branch_extra += branch_newextra;
- continue;
- }
-
- /* If options were terminated by ':' control comes here. Fall through
- to handle the group below. */
- }
- }
-
- /* Extracting brackets must be counted so we can process escapes in a
- Perlish way. */
-
- else bracount++;
-
- /* Non-special forms of bracket. Save length for computing whole length
- at end if there's a repeat that requires duplication of the group. Also
- save the current value of branch_extra, and start the new group with
- the new value. If non-zero, this will either be 2 for a (?imsx: group, or 3
- for a lookbehind assertion. */
-
- if (brastackptr >= sizeof(brastack)/sizeof(int))
- {
- *errorptr = ERR19;
- goto PCRE_ERROR_RETURN;
- }
-
- bralenstack[brastackptr] = branch_extra;
- branch_extra = branch_newextra;
-
- brastack[brastackptr++] = length;
- length += 3;
- continue;
-
- /* Handle ket. Look for subsequent max/min; for certain sets of values we
- have to replicate this bracket up to that many times. If brastackptr is
- 0 this is an unmatched bracket which will generate an error, but take care
- not to try to access brastack[-1] when computing the length and restoring
- the branch_extra value. */
-
- case ')':
- length += 3;
- {
- int minval = 1;
- int maxval = 1;
- int duplength;
-
- if (brastackptr > 0)
- {
- duplength = length - brastack[--brastackptr];
- branch_extra = bralenstack[brastackptr];
- }
- else duplength = 0;
-
- /* Leave ptr at the final char; for read_repeat_counts this happens
- automatically; for the others we need an increment. */
-
- if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
- {
- ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
- &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- }
- else if (c == '*') { minval = 0; maxval = -1; ptr++; }
- else if (c == '+') { maxval = -1; ptr++; }
- else if (c == '?') { minval = 0; ptr++; }
-
- /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
- group, and if the maximum is greater than zero, we have to replicate
- maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
- bracket set - hence the 7. */
-
- if (minval == 0)
- {
- length++;
- if (maxval > 0) length += (maxval - 1) * (duplength + 7);
- }
-
- /* When the minimum is greater than zero, 1 we have to replicate up to
- minval-1 times, with no additions required in the copies. Then, if
- there is a limited maximum we have to replicate up to maxval-1 times
- allowing for a BRAZERO item before each optional copy and nesting
- brackets for all but one of the optional copies. */
-
- else
- {
- length += (minval - 1) * duplength;
- if (maxval > minval) /* Need this test as maxval=-1 means no limit */
- length += (maxval - minval) * (duplength + 7) - 6;
- }
- }
- continue;
-
- /* Non-special character. For a run of such characters the length required
- is the number of characters + 2, except that the maximum run length is 255.
- We won't get a skipped space or a non-data escape or the start of a #
- comment as the first character, so the length can't be zero. */
-
- NORMAL_CHAR:
- default:
- length += 2;
- runlength = 0;
- do
- {
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != '\n') ;
- continue;
- }
- }
-
- /* Backslash may introduce a data char or a metacharacter; stop the
- string before the latter. */
-
- if (c == '\\')
- {
- const uschar *saveptr = ptr;
- c = check_escape(&ptr, errorptr, bracount, options, FALSE,
- &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (c < 0) { ptr = saveptr; break; }
-
-#ifdef SUPPORT_UTF8
- if (c > 127 && (options & PCRE_UTF8) != 0)
- {
- int i;
- for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (c <= utf8_table1[i]) break;
- runlength += i;
- }
-#endif
- }
-
- /* Ordinary character or single-char escape */
-
- runlength++;
- }
-
- /* This "while" is the end of the "do" above. */
-
- while (runlength < MAXLIT &&
- (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
- ptr--;
- length += runlength;
- continue;
- }
- }
-
-length += 4; /* For final KET and END */
-
-if (length > 65539)
- {
- *errorptr = ERR20;
- return NULL;
- }
-
-/* Compute the size of data block needed and get it, either from malloc or
-externally provided function. We specify "code[0]" in the offsetof() expression
-rather than just "code", because it has been reported that one broken compiler
-fails on "code" because it is also an independent variable. It should make no
-difference to the value of the offsetof(). */
-
-size = length + offsetof(real_pcre, code[0]);
-re = (real_pcre *)(pcre_malloc)(size);
-
-if (re == NULL)
- {
- *errorptr = ERR21;
- return NULL;
- }
-
-/* Put in the magic number, and save the size, options, and table pointer */
-
-re->magic_number = MAGIC_NUMBER;
-re->size = size;
-re->options = options;
-re->tables = tables;
-
-/* Set up a starting, non-extracting bracket, then compile the expression. On
-error, *errorptr will be set non-NULL, so we don't need to look at the result
-of the function here. */
-
-ptr = (const uschar *)pattern;
-code = re->code;
-*code = OP_BRA;
-bracount = 0;
-(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, -1,
- &reqchar, &countlits, &compile_block);
-re->top_bracket = bracount;
-re->top_backref = top_backref;
-
-/* If not reached end of pattern on success, there's an excess bracket. */
-
-if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
-
-/* Fill in the terminating state and check for disastrous overflow, but
-if debugging, leave the test till after things are printed out. */
-
-*code++ = OP_END;
-
-#ifndef DEBUG
-if (code - re->code > length) *errorptr = ERR23;
-#endif
-
-/* Give an error if there's back reference to a non-existent capturing
-subpattern. */
-
-if (top_backref > re->top_bracket) *errorptr = ERR15;
-
-/* Failed to compile */
-
-if (*errorptr != NULL)
- {
- (pcre_free)(re);
- PCRE_ERROR_RETURN:
- *erroroffset = ptr - (const uschar *)pattern;
- return NULL;
- }
-
-/* If the anchored option was not passed, set flag if we can determine that the
-pattern is anchored by virtue of ^ characters or \A or anything else (such as
-starting with .* when DOTALL is set).
-
-Otherwise, see if we can determine what the first character has to be, because
-that speeds up unanchored matches no end. If not, see if we can set the
-PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
-start with ^. and also when all branches start with .* for non-DOTALL matches.
-*/
-
-if ((options & PCRE_ANCHORED) == 0)
- {
- int temp_options = options;
- if (is_anchored(re->code, &temp_options))
- re->options |= PCRE_ANCHORED;
- else
- {
- int ch = find_firstchar(re->code, &temp_options);
- if (ch >= 0)
- {
- re->first_char = ch;
- re->options |= PCRE_FIRSTSET;
- }
- else if (is_startline(re->code))
- re->options |= PCRE_STARTLINE;
- }
- }
-
-/* Save the last required character if there are at least two literal
-characters on all paths, or if there is no first character setting. */
-
-if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
- {
- re->req_char = reqchar;
- re->options |= PCRE_REQCHSET;
- }
-
-/* Print out the compiled data for debugging */
-
-#ifdef DEBUG
-
-printf("Length = %d top_bracket = %d top_backref = %d\n",
- length, re->top_bracket, re->top_backref);
-
-if (re->options != 0)
- {
- printf("%s%s%s%s%s%s%s%s%s\n",
- ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
- ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
- ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
- ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
- ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
- ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
- ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
- ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
- ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
- }
-
-if ((re->options & PCRE_FIRSTSET) != 0)
- {
- if (isprint(re->first_char)) printf("First char = %c\n", re->first_char);
- else printf("First char = \\x%02x\n", re->first_char);
- }
-
-if ((re->options & PCRE_REQCHSET) != 0)
- {
- if (isprint(re->req_char)) printf("Req char = %c\n", re->req_char);
- else printf("Req char = \\x%02x\n", re->req_char);
- }
-
-code_end = code;
-code_base = code = re->code;
-
-while (code < code_end)
- {
- int charlength;
-
- printf("%3d ", code - code_base);
-
- if (*code >= OP_BRA)
- {
- printf("%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
- code += 2;
- }
-
- else switch(*code)
- {
- case OP_OPT:
- printf(" %.2x %s", code[1], OP_names[*code]);
- code++;
- break;
-
- case OP_COND:
- printf("%3d Cond", (code[1] << 8) + code[2]);
- code += 2;
- break;
-
- case OP_CREF:
- printf(" %.2d %s", code[1], OP_names[*code]);
- code++;
- break;
-
- case OP_CHARS:
- charlength = *(++code);
- printf("%3d ", charlength);
- while (charlength-- > 0)
- if (isprint(c = *(++code))) printf("%c", c); else printf("\\x%02x", c);
- break;
-
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_ALT:
- case OP_KET:
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- case OP_ONCE:
- printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
- code += 2;
- break;
-
- case OP_REVERSE:
- printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
- code += 2;
- break;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- if (*code >= OP_TYPESTAR)
- printf(" %s", OP_names[code[1]]);
- else if (isprint(c = code[1])) printf(" %c", c);
- else printf(" \\x%02x", c);
- printf("%s", OP_names[*code++]);
- break;
-
- case OP_EXACT:
- case OP_UPTO:
- case OP_MINUPTO:
- if (isprint(c = code[3])) printf(" %c{", c);
- else printf(" \\x%02x{", c);
- if (*code != OP_EXACT) printf("0,");
- printf("%d}", (code[1] << 8) + code[2]);
- if (*code == OP_MINUPTO) printf("?");
- code += 3;
- break;
-
- case OP_TYPEEXACT:
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- printf(" %s{", OP_names[code[3]]);
- if (*code != OP_TYPEEXACT) printf(",");
- printf("%d}", (code[1] << 8) + code[2]);
- if (*code == OP_TYPEMINUPTO) printf("?");
- code += 3;
- break;
-
- case OP_NOT:
- if (isprint(c = *(++code))) printf(" [^%c]", c);
- else printf(" [^\\x%02x]", c);
- break;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- if (isprint(c = code[1])) printf(" [^%c]", c);
- else printf(" [^\\x%02x]", c);
- printf("%s", OP_names[*code++]);
- break;
-
- case OP_NOTEXACT:
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- if (isprint(c = code[3])) printf(" [^%c]{", c);
- else printf(" [^\\x%02x]{", c);
- if (*code != OP_NOTEXACT) printf(",");
- printf("%d}", (code[1] << 8) + code[2]);
- if (*code == OP_NOTMINUPTO) printf("?");
- code += 3;
- break;
-
- case OP_REF:
- printf(" \\%d", *(++code));
- code ++;
- goto CLASS_REF_REPEAT;
-
- case OP_CLASS:
- {
- int i, min, max;
- code++;
- printf(" [");
-
- for (i = 0; i < 256; i++)
- {
- if ((code[i/8] & (1 << (i&7))) != 0)
- {
- int j;
- for (j = i+1; j < 256; j++)
- if ((code[j/8] & (1 << (j&7))) == 0) break;
- if (i == '-' || i == ']') printf("\\");
- if (isprint(i)) printf("%c", i); else printf("\\x%02x", i);
- if (--j > i)
- {
- printf("-");
- if (j == '-' || j == ']') printf("\\");
- if (isprint(j)) printf("%c", j); else printf("\\x%02x", j);
- }
- i = j;
- }
- }
- printf("]");
- code += 32;
-
- CLASS_REF_REPEAT:
-
- switch(*code)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- printf("%s", OP_names[*code]);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- min = (code[1] << 8) + code[2];
- max = (code[3] << 8) + code[4];
- if (max == 0) printf("{%d,}", min);
- else printf("{%d,%d}", min, max);
- if (*code == OP_CRMINRANGE) printf("?");
- code += 4;
- break;
-
- default:
- code--;
- }
- }
- break;
-
- /* Anything else is just a one-node item */
-
- default:
- printf(" %s", OP_names[*code]);
- break;
- }
-
- code++;
- printf("\n");
- }
-printf("------------------------------------------------------------------\n");
-
-/* This check is done here in the debugging case so that the code that
-was compiled can be seen. */
-
-if (code - re->code > length)
- {
- *errorptr = ERR23;
- (pcre_free)(re);
- *erroroffset = ptr - (uschar *)pattern;
- return NULL;
- }
-#endif
-
-return (pcre *)re;
-}
-
-
-
-/*************************************************
-* Match a back-reference *
-*************************************************/
-
-/* If a back reference hasn't been set, the length that is passed is greater
-than the number of characters left in the string, so the match fails.
-
-Arguments:
- offset index into the offset vector
- eptr points into the subject
- length length to be matched
- md points to match data block
- ims the ims flags
-
-Returns: TRUE if matched
-*/
-
-static BOOL
-match_ref(int offset, register const uschar *eptr, int length, match_data *md,
- unsigned long int ims)
-{
-const uschar *p = md->start_subject + md->offset_vector[offset];
-
-#ifdef DEBUG
-if (eptr >= md->end_subject)
- printf("matching subject <null>");
-else
- {
- printf("matching subject ");
- pchars(eptr, length, TRUE, md);
- }
-printf(" against backref ");
-pchars(p, length, FALSE, md);
-printf("\n");
-#endif
-
-/* Always fail if not enough characters left */
-
-if (length > md->end_subject - eptr) return FALSE;
-
-/* Separate the caselesss case for speed */
-
-if ((ims & PCRE_CASELESS) != 0)
- {
- while (length-- > 0)
- if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
- }
-else
- { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
-
-return TRUE;
-}
-
-
-
-/*************************************************
-* Match from current position *
-*************************************************/
-
-/* On entry ecode points to the first opcode, and eptr to the first character
-in the subject string, while eptrb holds the value of eptr at the start of the
-last bracketed group - used for breaking infinite loops matching zero-length
-strings.
-
-Arguments:
- eptr pointer in subject
- ecode position in code
- offset_top current top pointer
- md pointer to "static" info for the match
- ims current /i, /m, and /s options
- eptrb pointer to chain of blocks containing eptr at start of
- brackets - for testing for empty matches
- flags can contain
- match_condassert - this is an assertion condition
- match_isgroup - this is the start of a bracketed group
-
-Returns: TRUE if matched
-*/
-
-static BOOL
-match(register const uschar *eptr, register const uschar *ecode,
- int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
- int flags)
-{
-unsigned long int original_ims = ims; /* Save for resetting on ')' */
-eptrblock newptrb;
-
-/* At the start of a bracketed group, add the current subject pointer to the
-stack of such pointers, to be re-instated at the end of the group when we hit
-the closing ket. When match() is called in other circumstances, we don't add to
-the stack. */
-
-if ((flags & match_isgroup) != 0)
- {
- newptrb.prev = eptrb;
- newptrb.saved_eptr = eptr;
- eptrb = &newptrb;
- }
-
-/* Now start processing the operations. */
-
-for (;;)
- {
- int op = (int)*ecode;
- int min, max, ctype;
- register int i;
- register int c;
- BOOL minimize = FALSE;
-
- /* Opening capturing bracket. If there is space in the offset vector, save
- the current subject position in the working slot at the top of the vector. We
- mustn't change the current values of the data slot, because they may be set
- from a previous iteration of this group, and be referred to by a reference
- inside the group.
-
- If the bracket fails to match, we need to restore this value and also the
- values of the final offsets, in case they were set by a previous iteration of
- the same bracket.
-
- If there isn't enough space in the offset vector, treat this as if it were a
- non-capturing bracket. Don't worry about setting the flag for the error case
- here; that is handled in the code for KET. */
-
- if (op > OP_BRA)
- {
- int number = op - OP_BRA;
- int offset = number << 1;
-
-#ifdef DEBUG
- printf("start bracket %d subject=", number);
- pchars(eptr, 16, TRUE, md);
- printf("\n");
-#endif
-
- if (offset < md->offset_max)
- {
- int save_offset1 = md->offset_vector[offset];
- int save_offset2 = md->offset_vector[offset+1];
- int save_offset3 = md->offset_vector[md->offset_end - number];
-
- DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
- md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
-
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
-
- DPRINTF(("bracket %d failed\n", number));
-
- md->offset_vector[offset] = save_offset1;
- md->offset_vector[offset+1] = save_offset2;
- md->offset_vector[md->offset_end - number] = save_offset3;
- return FALSE;
- }
-
- /* Insufficient room for saving captured contents */
-
- else op = OP_BRA;
- }
-
- /* Other types of node can be handled by a switch */
-
- switch(op)
- {
- case OP_BRA: /* Non-capturing bracket: optimized */
- DPRINTF(("start bracket 0\n"));
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
- DPRINTF(("bracket 0 failed\n"));
- return FALSE;
-
- /* Conditional group: compilation checked that there are no more than
- two branches. If the condition is false, skipping the first branch takes us
- past the end if there is only one branch, but that's OK because that is
- exactly what going to the ket would do. */
-
- case OP_COND:
- if (ecode[3] == OP_CREF) /* Condition is extraction test */
- {
- int offset = ecode[4] << 1; /* Doubled reference number */
- return match(eptr,
- ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
- 5 : 3 + (ecode[1] << 8) + ecode[2]),
- offset_top, md, ims, eptrb, match_isgroup);
- }
-
- /* The condition is an assertion. Call match() to evaluate it - setting
- the final argument TRUE causes it to stop at the end of an assertion. */
-
- else
- {
- if (match(eptr, ecode+3, offset_top, md, ims, NULL,
- match_condassert | match_isgroup))
- {
- ecode += 3 + (ecode[4] << 8) + ecode[5];
- while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
- }
- else ecode += (ecode[1] << 8) + ecode[2];
- return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
- }
- /* Control never reaches here */
-
- /* Skip over conditional reference data if encountered (should not be) */
-
- case OP_CREF:
- ecode += 2;
- break;
-
- /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched
- an empty string - recursion will then try other alternatives, if any. */
-
- case OP_END:
- if (md->notempty && eptr == md->start_match) return FALSE;
- md->end_match_ptr = eptr; /* Record where we ended */
- md->end_offset_top = offset_top; /* and how many extracts were taken */
- return TRUE;
-
- /* Change option settings */
-
- case OP_OPT:
- ims = ecode[1];
- ecode += 2;
- DPRINTF(("ims set to %02lx\n", ims));
- break;
-
- /* Assertion brackets. Check the alternative branches in turn - the
- matching won't pass the KET for an assertion. If any one branch matches,
- the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
- start of each branch to move the current point backwards, so the code at
- this level is identical to the lookahead case. */
-
- case OP_ASSERT:
- case OP_ASSERTBACK:
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
- if (*ecode == OP_KET) return FALSE;
-
- /* If checking an assertion for a condition, return TRUE. */
-
- if ((flags & match_condassert) != 0) return TRUE;
-
- /* Continue from after the assertion, updating the offsets high water
- mark, since extracts may have been taken during the assertion. */
-
- do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
- ecode += 3;
- offset_top = md->end_offset_top;
- continue;
-
- /* Negative assertion: all branches must fail to match */
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK_NOT:
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
- return FALSE;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
-
- if ((flags & match_condassert) != 0) return TRUE;
-
- ecode += 3;
- continue;
-
- /* Move the subject pointer back. This occurs only at the start of
- each branch of a lookbehind assertion. If we are too close to the start to
- move back, this match function fails. When working with UTF-8 we move
- back a number of characters, not bytes. */
-
- case OP_REVERSE:
-#ifdef SUPPORT_UTF8
- c = (ecode[1] << 8) + ecode[2];
- for (i = 0; i < c; i++)
- {
- eptr--;
- BACKCHAR(eptr)
- }
-#else
- eptr -= (ecode[1] << 8) + ecode[2];
-#endif
-
- if (eptr < md->start_subject) return FALSE;
- ecode += 3;
- break;
-
- /* Recursion matches the current regex, nested. If there are any capturing
- brackets started but not finished, we have to save their starting points
- and reinstate them after the recursion. However, we don't know how many
- such there are (offset_top records the completed total) so we just have
- to save all the potential data. There may be up to 99 such values, which
- is a bit large to put on the stack, but using malloc for small numbers
- seems expensive. As a compromise, the stack is used when there are fewer
- than 16 values to store; otherwise malloc is used. A problem is what to do
- if the malloc fails ... there is no way of returning to the top level with
- an error. Save the top 15 values on the stack, and accept that the rest
- may be wrong. */
-
- case OP_RECURSE:
- {
- BOOL rc;
- int *save;
- int stacksave[15];
-
- c = md->offset_max;
-
- if (c < 16) save = stacksave; else
- {
- save = (int *)(pcre_malloc)((c+1) * sizeof(int));
- if (save == NULL)
- {
- save = stacksave;
- c = 15;
- }
- }
-
- for (i = 1; i <= c; i++)
- save[i] = md->offset_vector[md->offset_end - i];
- rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
- match_isgroup);
- for (i = 1; i <= c; i++)
- md->offset_vector[md->offset_end - i] = save[i];
- if (save != stacksave) (pcre_free)(save);
- if (!rc) return FALSE;
-
- /* In case the recursion has set more capturing values, save the final
- number, then move along the subject till after the recursive match,
- and advance one byte in the pattern code. */
-
- offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
- ecode++;
- }
- break;
-
- /* "Once" brackets are like assertion brackets except that after a match,
- the point in the subject string is not moved back. Thus there can never be
- a move back into the brackets. Check the alternative branches in turn - the
- matching won't pass the KET for this kind of subpattern. If any one branch
- matches, we carry on as at the end of a normal bracket, leaving the subject
- pointer. */
-
- case OP_ONCE:
- {
- const uschar *prev = ecode;
- const uschar *saved_eptr = eptr;
-
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
- break;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
-
- /* If hit the end of the group (which could be repeated), fail */
-
- if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
-
- /* Continue as from after the assertion, updating the offsets high water
- mark, since extracts may have been taken. */
-
- do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
-
- offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*ecode == OP_KET || eptr == saved_eptr)
- {
- ecode += 3;
- break;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. We need to reset any options
- that changed within the bracket before re-running it, so check the next
- opcode. */
-
- if (ecode[3] == OP_OPT)
- {
- ims = (ims & ~PCRE_IMS) | ecode[4];
- DPRINTF(("ims set to %02lx at group repeat\n", ims));
- }
-
- if (*ecode == OP_KETRMIN)
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
- match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- }
- else /* OP_KETRMAX */
- {
- if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
- match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
- }
- }
- return FALSE;
-
- /* An alternation is the end of a branch; scan along to find the end of the
- bracketed group and go to there. */
-
- case OP_ALT:
- do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
- break;
-
- /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
- that it may occur zero times. It may repeat infinitely, or not at all -
- i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
- repeat limits are compiled as a number of copies, with the optional ones
- preceded by BRAZERO or BRAMINZERO. */
-
- case OP_BRAZERO:
- {
- const uschar *next = ecode+1;
- if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
- ecode = next + 3;
- }
- break;
-
- case OP_BRAMINZERO:
- {
- const uschar *next = ecode+1;
- do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
- if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- ecode++;
- }
- break;
-
- /* End of a group, repeated or non-repeating. If we are at the end of
- an assertion "group", stop matching and return TRUE, but record the
- current high water mark for use by positive assertions. Do this also
- for the "once" (not-backup up) groups. */
-
- case OP_KET:
- case OP_KETRMIN:
- case OP_KETRMAX:
- {
- const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
- const uschar *saved_eptr = eptrb->saved_eptr;
-
- eptrb = eptrb->prev; /* Back up the stack of bracket start pointers */
-
- if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
- *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
- *prev == OP_ONCE)
- {
- md->end_match_ptr = eptr; /* For ONCE */
- md->end_offset_top = offset_top;
- return TRUE;
- }
-
- /* In all other cases except a conditional group we have to check the
- group number back at the start and if necessary complete handling an
- extraction by setting the offsets and bumping the high water mark. */
-
- if (*prev != OP_COND)
- {
- int number = *prev - OP_BRA;
- int offset = number << 1;
-
-#ifdef DEBUG
- printf("end bracket %d", number);
- printf("\n");
-#endif
-
- if (number > 0)
- {
- if (offset >= md->offset_max) md->offset_overflow = TRUE; else
- {
- md->offset_vector[offset] =
- md->offset_vector[md->offset_end - number];
- md->offset_vector[offset+1] = eptr - md->start_subject;
- if (offset_top <= offset) offset_top = offset + 2;
- }
- }
- }
-
- /* Reset the value of the ims flags, in case they got changed during
- the group. */
-
- ims = original_ims;
- DPRINTF(("ims reset to %02lx\n", ims));
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*ecode == OP_KET || eptr == saved_eptr)
- {
- ecode += 3;
- break;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. */
-
- if (*ecode == OP_KETRMIN)
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
- match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- }
- else /* OP_KETRMAX */
- {
- if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
- match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
- }
- }
- return FALSE;
-
- /* Start of subject unless notbol, or after internal newline if multiline */
-
- case OP_CIRC:
- if (md->notbol && eptr == md->start_subject) return FALSE;
- if ((ims & PCRE_MULTILINE) != 0)
- {
- if (eptr != md->start_subject && eptr[-1] != '\n') return FALSE;
- ecode++;
- break;
- }
- /* ... else fall through */
-
- /* Start of subject assertion */
-
- case OP_SOD:
- if (eptr != md->start_subject) return FALSE;
- ecode++;
- break;
-
- /* Assert before internal newline if multiline, or before a terminating
- newline unless endonly is set, else end of subject unless noteol is set. */
-
- case OP_DOLL:
- if ((ims & PCRE_MULTILINE) != 0)
- {
- if (eptr < md->end_subject) { if (*eptr != '\n') return FALSE; }
- else { if (md->noteol) return FALSE; }
- ecode++;
- break;
- }
- else
- {
- if (md->noteol) return FALSE;
- if (!md->endonly)
- {
- if (eptr < md->end_subject - 1 ||
- (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
-
- ecode++;
- break;
- }
- }
- /* ... else fall through */
-
- /* End of subject assertion (\z) */
-
- case OP_EOD:
- if (eptr < md->end_subject) return FALSE;
- ecode++;
- break;
-
- /* End of subject or ending \n assertion (\Z) */
-
- case OP_EODN:
- if (eptr < md->end_subject - 1 ||
- (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
- ecode++;
- break;
-
- /* Word boundary assertions */
-
- case OP_NOT_WORD_BOUNDARY:
- case OP_WORD_BOUNDARY:
- {
- BOOL prev_is_word = (eptr != md->start_subject) &&
- ((md->ctypes[eptr[-1]] & ctype_word) != 0);
- BOOL cur_is_word = (eptr < md->end_subject) &&
- ((md->ctypes[*eptr] & ctype_word) != 0);
- if ((*ecode++ == OP_WORD_BOUNDARY)?
- cur_is_word == prev_is_word : cur_is_word != prev_is_word)
- return FALSE;
- }
- break;
-
- /* Match a single character type; inline for speed */
-
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
- return FALSE;
- if (eptr++ >= md->end_subject) return FALSE;
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-#endif
- ecode++;
- break;
-
- case OP_NOT_DIGIT:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_digit) != 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_DIGIT:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_digit) == 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_NOT_WHITESPACE:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_space) != 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_WHITESPACE:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_space) == 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_NOT_WORDCHAR:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_word) != 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_WORDCHAR:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_word) == 0)
- return FALSE;
- ecode++;
- break;
-
- /* Match a back reference, possibly repeatedly. Look past the end of the
- item to see if there is repeat information following. The code is similar
- to that for character classes, but repeated for efficiency. Then obey
- similar code to character type repeats - written out again for speed.
- However, if the referenced string is the empty string, always treat
- it as matched, any number of times (otherwise there could be infinite
- loops). */
-
- case OP_REF:
- {
- int length;
- int offset = ecode[1] << 1; /* Doubled reference number */
- ecode += 2; /* Advance past the item */
-
- /* If the reference is unset, set the length to be longer than the amount
- of subject left; this ensures that every attempt at a match fails. We
- can't just fail here, because of the possibility of quantifiers with zero
- minima. */
-
- length = (offset >= offset_top || md->offset_vector[offset] < 0)?
- md->end_subject - eptr + 1 :
- md->offset_vector[offset+1] - md->offset_vector[offset];
-
- /* Set up for repetition, or handle the non-repeated case */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = (ecode[1] << 8) + ecode[2];
- max = (ecode[3] << 8) + ecode[4];
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
- eptr += length;
- continue; /* With the main loop */
- }
-
- /* If the length of the reference is zero, just continue with the
- main loop. */
-
- if (length == 0) continue;
-
- /* First, ensure the minimum number of matches are present. We get back
- the length of the reference string explicitly rather than passing the
- address of eptr, so that eptr can be a register variable. */
-
- for (i = 1; i <= min; i++)
- {
- if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
- eptr += length;
- }
-
- /* If min = max, continue at the same level without recursion.
- They are not both allowed to be zero. */
-
- if (min == max) continue;
-
- /* If minimizing, keep trying and advancing the pointer */
-
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || !match_ref(offset, eptr, length, md, ims))
- return FALSE;
- eptr += length;
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest string and work backwards */
-
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (!match_ref(offset, eptr, length, md, ims)) break;
- eptr += length;
- }
- while (eptr >= pp)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- eptr -= length;
- }
- return FALSE;
- }
- }
- /* Control never gets here */
-
-
-
- /* Match a character class, possibly repeatedly. Look past the end of the
- item to see if there is repeat information following. Then obey similar
- code to character type repeats - written out again for speed. */
-
- case OP_CLASS:
- {
- const uschar *data = ecode + 1; /* Save for matching */
- ecode += 33; /* Advance past the item */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = (ecode[1] << 8) + ecode[2];
- max = (ecode[3] << 8) + ecode[4];
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- min = max = 1;
- break;
- }
-
- /* First, ensure the minimum number of matches are present. */
-
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject) return FALSE;
- GETCHARINC(c, eptr) /* Get character; increment eptr */
-
-#ifdef SUPPORT_UTF8
- /* We do not yet support class members > 255 */
- if (c > 255) return FALSE;
-#endif
-
- if ((data[c/8] & (1 << (c&7))) != 0) continue;
- return FALSE;
- }
-
- /* If max == min we can continue with the main loop without the
- need to recurse. */
-
- if (min == max) continue;
-
- /* If minimizing, keep testing the rest of the expression and advancing
- the pointer while it matches the class. */
-
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject) return FALSE;
- GETCHARINC(c, eptr) /* Get character; increment eptr */
-
-#ifdef SUPPORT_UTF8
- /* We do not yet support class members > 255 */
- if (c > 255) return FALSE;
-#endif
- if ((data[c/8] & (1 << (c&7))) != 0) continue;
- return FALSE;
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest possible run, then work backwards. */
-
- else
- {
- const uschar *pp = eptr;
- int len = 1;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len) /* Get character, set length if UTF-8 */
-
-#ifdef SUPPORT_UTF8
- /* We do not yet support class members > 255 */
- if (c > 255) break;
-#endif
- if ((data[c/8] & (1 << (c&7))) == 0) break;
- eptr += len;
- }
-
- while (eptr >= pp)
- {
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
-
-#ifdef SUPPORT_UTF8
- BACKCHAR(eptr)
-#endif
- }
- return FALSE;
- }
- }
- /* Control never gets here */
-
- /* Match a run of characters */
-
- case OP_CHARS:
- {
- register int length = ecode[1];
- ecode += 2;
-
-#ifdef DEBUG /* Sigh. Some compilers never learn. */
- if (eptr >= md->end_subject)
- printf("matching subject <null> against pattern ");
- else
- {
- printf("matching subject ");
- pchars(eptr, length, TRUE, md);
- printf(" against pattern ");
- }
- pchars(ecode, length, FALSE, md);
- printf("\n");
-#endif
-
- if (length > md->end_subject - eptr) return FALSE;
- if ((ims & PCRE_CASELESS) != 0)
- {
- while (length-- > 0)
- if (md->lcc[*ecode++] != md->lcc[*eptr++])
- return FALSE;
- }
- else
- {
- while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
- }
- }
- break;
-
- /* Match a single character repeatedly; different opcodes share code. */
-
- case OP_EXACT:
- min = max = (ecode[1] << 8) + ecode[2];
- ecode += 3;
- goto REPEATCHAR;
-
- case OP_UPTO:
- case OP_MINUPTO:
- min = 0;
- max = (ecode[1] << 8) + ecode[2];
- minimize = *ecode == OP_MINUPTO;
- ecode += 3;
- goto REPEATCHAR;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- c = *ecode++ - OP_STAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single-character matches. We can give
- up quickly if there are fewer than the minimum number of characters left in
- the subject. */
-
- REPEATCHAR:
- if (min > md->end_subject - eptr) return FALSE;
- c = *ecode++;
-
- /* The code is duplicated for the caseless and caseful cases, for speed,
- since matching characters is likely to be quite common. First, ensure the
- minimum number of matches are present. If min = max, continue at the same
- level without recursing. Otherwise, if minimizing, keep trying the rest of
- the expression and advancing one matching character if failing, up to the
- maximum. Alternatively, if maximizing, find the maximum number of
- characters and work backwards. */
-
- DPRINTF(("matching %c{%d,%d} against subject %.*s\n", c, min, max,
- max, eptr));
-
- if ((ims & PCRE_CASELESS) != 0)
- {
- c = md->lcc[c];
- for (i = 1; i <= min; i++)
- if (c != md->lcc[*eptr++]) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject ||
- c != md->lcc[*eptr++])
- return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- /* Control never gets here */
- }
-
- /* Caseful comparisons */
-
- else
- {
- for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c != *eptr) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- }
- /* Control never gets here */
-
- /* Match a negated single character */
-
- case OP_NOT:
- if (eptr >= md->end_subject) return FALSE;
- ecode++;
- if ((ims & PCRE_CASELESS) != 0)
- {
- if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
- }
- else
- {
- if (*ecode++ == *eptr++) return FALSE;
- }
- break;
-
- /* Match a negated single character repeatedly. This is almost a repeat of
- the code for a repeated single character, but I haven't found a nice way of
- commoning these up that doesn't require a test of the positive/negative
- option for each character match. Maybe that wouldn't add very much to the
- time taken, but character matching *is* what this is all about... */
-
- case OP_NOTEXACT:
- min = max = (ecode[1] << 8) + ecode[2];
- ecode += 3;
- goto REPEATNOTCHAR;
-
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- min = 0;
- max = (ecode[1] << 8) + ecode[2];
- minimize = *ecode == OP_NOTMINUPTO;
- ecode += 3;
- goto REPEATNOTCHAR;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- c = *ecode++ - OP_NOTSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single-character matches. We can give
- up quickly if there are fewer than the minimum number of characters left in
- the subject. */
-
- REPEATNOTCHAR:
- if (min > md->end_subject - eptr) return FALSE;
- c = *ecode++;
-
- /* The code is duplicated for the caseless and caseful cases, for speed,
- since matching characters is likely to be quite common. First, ensure the
- minimum number of matches are present. If min = max, continue at the same
- level without recursing. Otherwise, if minimizing, keep trying the rest of
- the expression and advancing one matching character if failing, up to the
- maximum. Alternatively, if maximizing, find the maximum number of
- characters and work backwards. */
-
- DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", c, min, max,
- max, eptr));
-
- if ((ims & PCRE_CASELESS) != 0)
- {
- c = md->lcc[c];
- for (i = 1; i <= min; i++)
- if (c == md->lcc[*eptr++]) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject ||
- c == md->lcc[*eptr++])
- return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- /* Control never gets here */
- }
-
- /* Caseful comparisons */
-
- else
- {
- for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c == *eptr) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- }
- /* Control never gets here */
-
- /* Match a single character type repeatedly; several different opcodes
- share code. This is very similar to the code for single characters, but we
- repeat it in the interests of efficiency. */
-
- case OP_TYPEEXACT:
- min = max = (ecode[1] << 8) + ecode[2];
- minimize = TRUE;
- ecode += 3;
- goto REPEATTYPE;
-
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- min = 0;
- max = (ecode[1] << 8) + ecode[2];
- minimize = *ecode == OP_TYPEMINUPTO;
- ecode += 3;
- goto REPEATTYPE;
-
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- c = *ecode++ - OP_TYPESTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single character type matches */
-
- REPEATTYPE:
- ctype = *ecode++; /* Code for the character type */
-
- /* First, ensure the minimum number of matches are present. Use inline
- code for maximizing the speed, and do the type test once at the start
- (i.e. keep it out of the loop). Also we can test that there are at least
- the minimum number of bytes before we start, except when doing '.' in
- UTF8 mode. Leave the test in in all cases; in the special case we have
- to test after each character. */
-
- if (min > md->end_subject - eptr) return FALSE;
- if (min > 0) switch(ctype)
- {
- case OP_ANY:
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- {
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
- return FALSE;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- break;
- }
-#endif
- /* Non-UTF8 can be faster */
- if ((ims & PCRE_DOTALL) == 0)
- { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
- else eptr += min;
- break;
-
- case OP_NOT_DIGIT:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
- break;
-
- case OP_DIGIT:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
- break;
-
- case OP_WHITESPACE:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_word) != 0)
- return FALSE;
- break;
-
- case OP_WORDCHAR:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_word) == 0)
- return FALSE;
- break;
- }
-
- /* If min = max, continue at the same level without recursing */
-
- if (min == max) continue;
-
- /* If minimizing, we have to test the rest of the pattern before each
- subsequent match. */
-
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
- if (i >= max || eptr >= md->end_subject) return FALSE;
-
- c = *eptr++;
- switch(ctype)
- {
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-#endif
- break;
-
- case OP_NOT_DIGIT:
- if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
- break;
-
- case OP_DIGIT:
- if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
- break;
-
- case OP_NOT_WHITESPACE:
- if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
- break;
-
- case OP_WHITESPACE:
- if ((md->ctypes[c] & ctype_space) == 0) return FALSE;
- break;
-
- case OP_NOT_WORDCHAR:
- if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
- break;
-
- case OP_WORDCHAR:
- if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
- break;
- }
- }
- /* Control never gets here */
- }
-
- /* If maximizing it is worth using inline code for speed, doing the type
- test once at the start (i.e. keep it out of the loop). */
-
- else
- {
- const uschar *pp = eptr;
- switch(ctype)
- {
- case OP_ANY:
-
- /* Special code is required for UTF8, but when the maximum is unlimited
- we don't need it. */
-
-#ifdef SUPPORT_UTF8
- if (md->utf8 && max < INT_MAX)
- {
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr++ == '\n') break;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- else
- {
- for (i = min; i < max; i++)
- {
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- break;
- }
-#endif
- /* Non-UTF8 can be faster */
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr == '\n') break;
- eptr++;
- }
- }
- else
- {
- c = max - min;
- if (c > md->end_subject - eptr) c = md->end_subject - eptr;
- eptr += c;
- }
- break;
-
- case OP_NOT_DIGIT:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_DIGIT:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
- break;
- eptr++;
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_WHITESPACE:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
- break;
- eptr++;
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_WORDCHAR:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
- break;
- eptr++;
- }
- break;
- }
-
- while (eptr >= pp)
- {
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
-#endif
- }
- return FALSE;
- }
- /* Control never gets here */
-
- /* There's been some horrible disaster. */
-
- default:
- DPRINTF(("Unknown opcode %d\n", *ecode));
- md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
- return FALSE;
- }
-
- /* Do not stick any code in here without much thought; it is assumed
- that "continue" in the code above comes out to here to repeat the main
- loop. */
-
- } /* End of main loop */
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Execute a Regular Expression *
-*************************************************/
-
-/* This function applies a compiled re to a subject string and picks out
-portions of the string if it matches. Two elements in the vector are set for
-each substring: the offsets to the start and end of the substring.
-
-Arguments:
- external_re points to the compiled expression
- external_extra points to "hints" from pcre_study() or is NULL
- subject points to the subject string
- length length of subject string (may contain binary zeros)
- start_offset where to start in the subject string
- options option bits
- offsets points to a vector of ints to be filled in with offsets
- offsetcount the number of elements in the vector
-
-Returns: > 0 => success; value is the number of elements filled in
- = 0 => success, but offsets is not big enough
- -1 => failed to match
- < -1 => some kind of unexpected problem
-*/
-
-int
-pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
- const char *subject, int length, int start_offset, int options, int *offsets,
- int offsetcount)
-{
-int resetcount, ocount;
-int first_char = -1;
-int req_char = -1;
-int req_char2 = -1;
-unsigned long int ims = 0;
-match_data match_block;
-const uschar *start_bits = NULL;
-const uschar *start_match = (const uschar *)subject + start_offset;
-const uschar *end_subject;
-const uschar *req_char_ptr = start_match - 1;
-const real_pcre *re = (const real_pcre *)external_re;
-const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
-BOOL using_temporary_offsets = FALSE;
-BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
-BOOL startline = (re->options & PCRE_STARTLINE) != 0;
-
-if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
-
-if (re == NULL || subject == NULL ||
- (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-match_block.start_pattern = re->code;
-match_block.start_subject = (const uschar *)subject;
-match_block.end_subject = match_block.start_subject + length;
-end_subject = match_block.end_subject;
-
-match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
-match_block.utf8 = (re->options & PCRE_UTF8) != 0;
-
-match_block.notbol = (options & PCRE_NOTBOL) != 0;
-match_block.noteol = (options & PCRE_NOTEOL) != 0;
-match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
-
-match_block.errorcode = PCRE_ERROR_NOMATCH; /* Default error */
-
-match_block.lcc = re->tables + lcc_offset;
-match_block.ctypes = re->tables + ctypes_offset;
-
-/* The ims options can vary during the matching as a result of the presence
-of (?ims) items in the pattern. They are kept in a local variable so that
-restoring at the exit of a group is easy. */
-
-ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
-
-/* If the expression has got more back references than the offsets supplied can
-hold, we get a temporary bit of working store to use during the matching.
-Otherwise, we can use the vector supplied, rounding down its size to a multiple
-of 3. */
-
-ocount = offsetcount - (offsetcount % 3);
-
-if (re->top_backref > 0 && re->top_backref >= ocount/3)
- {
- ocount = re->top_backref * 3 + 3;
- match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
- if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
- using_temporary_offsets = TRUE;
- DPRINTF(("Got memory to hold back references\n"));
- }
-else match_block.offset_vector = offsets;
-
-match_block.offset_end = ocount;
-match_block.offset_max = (2*ocount)/3;
-match_block.offset_overflow = FALSE;
-
-/* Compute the minimum number of offsets that we need to reset each time. Doing
-this makes a huge difference to execution time when there aren't many brackets
-in the pattern. */
-
-resetcount = 2 + re->top_bracket * 2;
-if (resetcount > offsetcount) resetcount = ocount;
-
-/* Reset the working variable associated with each extraction. These should
-never be used unless previously set, but they get saved and restored, and so we
-initialize them to avoid reading uninitialized locations. */
-
-if (match_block.offset_vector != NULL)
- {
- register int *iptr = match_block.offset_vector + ocount;
- register int *iend = iptr - resetcount/2 + 1;
- while (--iptr >= iend) *iptr = -1;
- }
-
-/* Set up the first character to match, if available. The first_char value is
-never set for an anchored regular expression, but the anchoring may be forced
-at run time, so we have to test for anchoring. The first char may be unset for
-an unanchored pattern, of course. If there's no first char and the pattern was
-studied, there may be a bitmap of possible first characters. */
-
-if (!anchored)
- {
- if ((re->options & PCRE_FIRSTSET) != 0)
- {
- first_char = re->first_char;
- if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
- }
- else
- if (!startline && extra != NULL &&
- (extra->options & PCRE_STUDY_MAPPED) != 0)
- start_bits = extra->start_bits;
- }
-
-/* For anchored or unanchored matches, there may be a "last known required
-character" set. If the PCRE_CASELESS is set, implying that the match starts
-caselessly, or if there are any changes of this flag within the regex, set up
-both cases of the character. Otherwise set the two values the same, which will
-avoid duplicate testing (which takes significant time). This covers the vast
-majority of cases. It will be suboptimal when the case flag changes in a regex
-and the required character in fact is caseful. */
-
-if ((re->options & PCRE_REQCHSET) != 0)
- {
- req_char = re->req_char;
- req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
- (re->tables + fcc_offset)[req_char] : req_char;
- }
-
-/* Loop for handling unanchored repeated matching attempts; for anchored regexs
-the loop runs just once. */
-
-do
- {
- int rc;
- register int *iptr = match_block.offset_vector;
- register int *iend = iptr + resetcount;
-
- /* Reset the maximum number of extractions we might see. */
-
- while (iptr < iend) *iptr++ = -1;
-
- /* Advance to a unique first char if possible */
-
- if (first_char >= 0)
- {
- if ((ims & PCRE_CASELESS) != 0)
- while (start_match < end_subject &&
- match_block.lcc[*start_match] != first_char)
- start_match++;
- else
- while (start_match < end_subject && *start_match != first_char)
- start_match++;
- }
-
- /* Or to just after \n for a multiline match if possible */
-
- else if (startline)
- {
- if (start_match > match_block.start_subject + start_offset)
- {
- while (start_match < end_subject && start_match[-1] != '\n')
- start_match++;
- }
- }
-
- /* Or to a non-unique first char after study */
-
- else if (start_bits != NULL)
- {
- while (start_match < end_subject)
- {
- register int c = *start_match;
- if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
- }
- }
-
-#ifdef DEBUG /* Sigh. Some compilers never learn. */
- printf(">>>> Match against: ");
- pchars(start_match, end_subject - start_match, TRUE, &match_block);
- printf("\n");
-#endif
-
- /* If req_char is set, we know that that character must appear in the subject
- for the match to succeed. If the first character is set, req_char must be
- later in the subject; otherwise the test starts at the match point. This
- optimization can save a huge amount of backtracking in patterns with nested
- unlimited repeats that aren't going to match. We don't know what the state of
- case matching may be when this character is hit, so test for it in both its
- cases if necessary. However, the different cased versions will not be set up
- unless PCRE_CASELESS was given or the casing state changes within the regex.
- Writing separate code makes it go faster, as does using an autoincrement and
- backing off on a match. */
-
- if (req_char >= 0)
- {
- register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
-
- /* We don't need to repeat the search if we haven't yet reached the
- place we found it at last time. */
-
- if (p > req_char_ptr)
- {
- /* Do a single test if no case difference is set up */
-
- if (req_char == req_char2)
- {
- while (p < end_subject)
- {
- if (*p++ == req_char) { p--; break; }
- }
- }
-
- /* Otherwise test for either case */
-
- else
- {
- while (p < end_subject)
- {
- register int pp = *p++;
- if (pp == req_char || pp == req_char2) { p--; break; }
- }
- }
-
- /* If we can't find the required character, break the matching loop */
-
- if (p >= end_subject) break;
-
- /* If we have found the required character, save the point where we
- found it, so that we don't search again next time round the loop if
- the start hasn't passed this character yet. */
-
- req_char_ptr = p;
- }
- }
-
- /* When a match occurs, substrings will be set for all internal extractions;
- we just need to set up the whole thing as substring 0 before returning. If
- there were too many extractions, set the return code to zero. In the case
- where we had to get some local store to hold offsets for backreferences, copy
- those back references that we can. In this case there need not be overflow
- if certain parts of the pattern were not used. */
-
- match_block.start_match = start_match;
- if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
- continue;
-
- /* Copy the offset information from temporary store if necessary */
-
- if (using_temporary_offsets)
- {
- if (offsetcount >= 4)
- {
- memcpy(offsets + 2, match_block.offset_vector + 2,
- (offsetcount - 2) * sizeof(int));
- DPRINTF(("Copied offsets from temporary memory\n"));
- }
- if (match_block.end_offset_top > offsetcount)
- match_block.offset_overflow = TRUE;
-
- DPRINTF(("Freeing temporary memory\n"));
- (pcre_free)(match_block.offset_vector);
- }
-
- rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
-
- if (match_block.offset_end < 2) rc = 0; else
- {
- offsets[0] = start_match - match_block.start_subject;
- offsets[1] = match_block.end_match_ptr - match_block.start_subject;
- }
-
- DPRINTF((">>>> returning %d\n", rc));
- return rc;
- }
-
-/* This "while" is the end of the "do" above */
-
-while (!anchored &&
- match_block.errorcode == PCRE_ERROR_NOMATCH &&
- start_match++ < end_subject);
-
-if (using_temporary_offsets)
- {
- DPRINTF(("Freeing temporary memory\n"));
- (pcre_free)(match_block.offset_vector);
- }
-
-DPRINTF((">>>> returning %d\n", match_block.errorcode));
-
-return match_block.errorcode;
-}
-
-/* End of pcre.c */
diff --git a/ext/pcre/pcrelib/pcre.def b/ext/pcre/pcrelib/pcre.def
deleted file mode 100644
index 0e8cf3f442..0000000000
--- a/ext/pcre/pcrelib/pcre.def
+++ /dev/null
@@ -1,19 +0,0 @@
-EXPORTS
-
-pcre_malloc DATA
-pcre_free DATA
-
-pcre_compile
-pcre_copy_substring
-pcre_exec
-pcre_get_substring
-pcre_get_substring_list
-pcre_info
-pcre_maketables
-pcre_study
-pcre_version
-
-regcomp
-regexec
-regerror
-regfree
diff --git a/ext/pcre/pcrelib/pcre.h b/ext/pcre/pcrelib/pcre.h
deleted file mode 100644
index 0d0599e948..0000000000
--- a/ext/pcre/pcrelib/pcre.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-#ifndef _PCRE_H
-#define _PCRE_H
-
-/* The file pcre.h is build by "configure". Do not edit it; instead
-make changes to pcre.in. */
-
-#include "php_compat.h"
-#define PCRE_MAJOR 3
-#define PCRE_MINOR 4
-#define PCRE_DATE 22-Aug-2000
-
-/* Win32 uses DLL by default */
-
-#ifdef _WIN32
-# ifdef STATIC
-# define PCRE_DL_IMPORT
-# else
-# define PCRE_DL_IMPORT __declspec(dllimport)
-# endif
-#else
-# define PCRE_DL_IMPORT
-#endif
-
-/* Have to include stdlib.h in order to ensure that size_t is defined;
-it is needed here for malloc. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options */
-
-#define PCRE_CASELESS 0x0001
-#define PCRE_MULTILINE 0x0002
-#define PCRE_DOTALL 0x0004
-#define PCRE_EXTENDED 0x0008
-#define PCRE_ANCHORED 0x0010
-#define PCRE_DOLLAR_ENDONLY 0x0020
-#define PCRE_EXTRA 0x0040
-#define PCRE_NOTBOL 0x0080
-#define PCRE_NOTEOL 0x0100
-#define PCRE_UNGREEDY 0x0200
-#define PCRE_NOTEMPTY 0x0400
-#define PCRE_UTF8 0x0800
-
-/* Exec-time and get-time error codes */
-
-#define PCRE_ERROR_NOMATCH (-1)
-#define PCRE_ERROR_NULL (-2)
-#define PCRE_ERROR_BADOPTION (-3)
-#define PCRE_ERROR_BADMAGIC (-4)
-#define PCRE_ERROR_UNKNOWN_NODE (-5)
-#define PCRE_ERROR_NOMEMORY (-6)
-#define PCRE_ERROR_NOSUBSTRING (-7)
-
-/* Request types for pcre_fullinfo() */
-
-#define PCRE_INFO_OPTIONS 0
-#define PCRE_INFO_SIZE 1
-#define PCRE_INFO_CAPTURECOUNT 2
-#define PCRE_INFO_BACKREFMAX 3
-#define PCRE_INFO_FIRSTCHAR 4
-#define PCRE_INFO_FIRSTTABLE 5
-#define PCRE_INFO_LASTLITERAL 6
-
-/* Types */
-
-typedef void pcre;
-typedef void pcre_extra;
-
-/* Store get and free functions. These can be set to alternative malloc/free
-functions if required. Some magic is required for Win32 DLL; it is null on
-other OS. */
-
-PCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);
-PCRE_DL_IMPORT extern void (*pcre_free)(void *);
-
-#undef PCRE_DL_IMPORT
-
-/* Functions */
-
-extern pcre *pcre_compile(const char *, int, const char **, int *,
- const unsigned char *);
-extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
-extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
- int, int, int, int *, int);
-extern void pcre_free_substring(const char *);
-extern void pcre_free_substring_list(const char **);
-extern int pcre_get_substring(const char *, int *, int, int, const char **);
-extern int pcre_get_substring_list(const char *, int *, int, const char ***);
-extern int pcre_info(const pcre *, int *, int *);
-extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
-extern unsigned const char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcre.h */
diff --git a/ext/pcre/pcrelib/pcregrep.c b/ext/pcre/pcrelib/pcregrep.c
deleted file mode 100644
index e8c934ef59..0000000000
--- a/ext/pcre/pcrelib/pcregrep.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*************************************************
-* pcregrep program *
-*************************************************/
-
-/* This is a grep program that uses the PCRE regular expression library to do
-its pattern matching. */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "config.h"
-#include "pcre.h"
-
-#define FALSE 0
-#define TRUE 1
-
-typedef int BOOL;
-
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-static pcre *pattern;
-static pcre_extra *hints;
-
-static BOOL count_only = FALSE;
-static BOOL filenames_only = FALSE;
-static BOOL invert = FALSE;
-static BOOL number = FALSE;
-static BOOL silent = FALSE;
-static BOOL whole_lines = FALSE;
-
-
-
-#if ! HAVE_STRERROR
-/*************************************************
-* Provide strerror() for non-ANSI libraries *
-*************************************************/
-
-/* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
-in their libraries, but can provide the same facility by this simple
-alternative function. */
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-char *
-strerror(int n)
-{
-if (n < 0 || n >= sys_nerr) return "unknown error number";
-return sys_errlist[n];
-}
-#endif /* HAVE_STRERROR */
-
-
-
-/*************************************************
-* Grep an individual file *
-*************************************************/
-
-static int
-pcregrep(FILE *in, char *name)
-{
-int rc = 1;
-int linenumber = 0;
-int count = 0;
-int offsets[99];
-char buffer[BUFSIZ];
-
-while (fgets(buffer, sizeof(buffer), in) != NULL)
- {
- BOOL match;
- int length = (int)strlen(buffer);
- if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
- linenumber++;
-
- match = pcre_exec(pattern, hints, buffer, length, 0, 0, offsets, 99) >= 0;
- if (match && whole_lines && offsets[1] != length) match = FALSE;
-
- if (match != invert)
- {
- if (count_only) count++;
-
- else if (filenames_only)
- {
- fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
- return 0;
- }
-
- else if (silent) return 0;
-
- else
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- if (number) fprintf(stdout, "%d:", linenumber);
- fprintf(stdout, "%s\n", buffer);
- }
-
- rc = 0;
- }
- }
-
-if (count_only)
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- fprintf(stdout, "%d\n", count);
- }
-
-return rc;
-}
-
-
-
-
-/*************************************************
-* Usage function *
-*************************************************/
-
-static int
-usage(int rc)
-{
-fprintf(stderr, "Usage: pcregrep [-Vchilnsvx] pattern [file] ...\n");
-return rc;
-}
-
-
-
-
-/*************************************************
-* Main program *
-*************************************************/
-
-int
-main(int argc, char **argv)
-{
-int i;
-int rc = 1;
-int options = 0;
-int errptr;
-const char *error;
-BOOL filenames = TRUE;
-
-/* Process the options */
-
-for (i = 1; i < argc; i++)
- {
- char *s;
- if (argv[i][0] != '-') break;
- s = argv[i] + 1;
- while (*s != 0)
- {
- switch (*s++)
- {
- case 'c': count_only = TRUE; break;
- case 'h': filenames = FALSE; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'l': filenames_only = TRUE;
- case 'n': number = TRUE; break;
- case 's': silent = TRUE; break;
- case 'v': invert = TRUE; break;
- case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
-
- case 'V':
- fprintf(stderr, "PCRE version %s\n", pcre_version());
- break;
-
- default:
- fprintf(stderr, "pcregrep: unknown option %c\n", s[-1]);
- return usage(2);
- }
- }
- }
-
-/* There must be at least a regexp argument */
-
-if (i >= argc) return usage(0);
-
-/* Compile the regular expression. */
-
-pattern = pcre_compile(argv[i++], options, &error, &errptr, NULL);
-if (pattern == NULL)
- {
- fprintf(stderr, "pcregrep: error in regex at offset %d: %s\n", errptr, error);
- return 2;
- }
-
-/* Study the regular expression, as we will be running it may times */
-
-hints = pcre_study(pattern, 0, &error);
-if (error != NULL)
- {
- fprintf(stderr, "pcregrep: error while studing regex: %s\n", error);
- return 2;
- }
-
-/* If there are no further arguments, do the business on stdin and exit */
-
-if (i >= argc) return pcregrep(stdin, NULL);
-
-/* Otherwise, work through the remaining arguments as files. If there is only
-one, don't give its name on the output. */
-
-if (i == argc - 1) filenames = FALSE;
-if (filenames_only) filenames = TRUE;
-
-for (; i < argc; i++)
- {
- FILE *in = fopen(argv[i], "r");
- if (in == NULL)
- {
- fprintf(stderr, "%s: failed to open: %s\n", argv[i], strerror(errno));
- rc = 2;
- }
- else
- {
- int frc = pcregrep(in, filenames? argv[i] : NULL);
- if (frc == 0 && rc == 1) rc = 0;
- fclose(in);
- }
- }
-
-return rc;
-}
-
-/* End */
diff --git a/ext/pcre/pcrelib/pcreposix.c b/ext/pcre/pcrelib/pcreposix.c
deleted file mode 100644
index 6aeb88282d..0000000000
--- a/ext/pcre/pcrelib/pcreposix.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-This module is a wrapper that provides a POSIX API to the underlying PCRE
-functions.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-#include "internal.h"
-#include "pcreposix.h"
-#include "stdlib.h"
-
-
-
-/* Corresponding tables of PCRE error messages and POSIX error codes. */
-
-static const char *estring[] = {
- ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10,
- ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
- ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
- ERR31 };
-
-static int eint[] = {
- REG_EESCAPE, /* "\\ at end of pattern" */
- REG_EESCAPE, /* "\\c at end of pattern" */
- REG_EESCAPE, /* "unrecognized character follows \\" */
- REG_BADBR, /* "numbers out of order in {} quantifier" */
- REG_BADBR, /* "number too big in {} quantifier" */
- REG_EBRACK, /* "missing terminating ] for character class" */
- REG_ECTYPE, /* "invalid escape sequence in character class" */
- REG_ERANGE, /* "range out of order in character class" */
- REG_BADRPT, /* "nothing to repeat" */
- REG_BADRPT, /* "operand of unlimited repeat could match the empty string" */
- REG_ASSERT, /* "internal error: unexpected repeat" */
- REG_BADPAT, /* "unrecognized character after (?" */
- REG_ESIZE, /* "too many capturing parenthesized sub-patterns" */
- REG_EPAREN, /* "missing )" */
- REG_ESUBREG, /* "back reference to non-existent subpattern" */
- REG_INVARG, /* "erroffset passed as NULL" */
- REG_INVARG, /* "unknown option bit(s) set" */
- REG_EPAREN, /* "missing ) after comment" */
- REG_ESIZE, /* "too many sets of parentheses" */
- REG_ESIZE, /* "regular expression too large" */
- REG_ESPACE, /* "failed to get memory" */
- REG_EPAREN, /* "unmatched brackets" */
- REG_ASSERT, /* "internal error: code overflow" */
- REG_BADPAT, /* "unrecognized character after (?<" */
- REG_BADPAT, /* "lookbehind assertion is not fixed length" */
- REG_BADPAT, /* "malformed number after (?(" */
- REG_BADPAT, /* "conditional group containe more than two branches" */
- REG_BADPAT, /* "assertion expected after (?(" */
- REG_BADPAT, /* "(?p must be followed by )" */
- REG_ECTYPE, /* "unknown POSIX class name" */
- REG_BADPAT, /* "POSIX collating elements are not supported" */
- REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 support" */
- REG_BADPAT, /* "characters with values > 255 are not yet supported in classes" */
- REG_BADPAT, /* "character value in \x{...} sequence is too large" */
- REG_BADPAT /* "invalid condition (?(0)" */
-};
-
-/* Table of texts corresponding to POSIX error codes */
-
-static const char *pstring[] = {
- "", /* Dummy for value 0 */
- "internal error", /* REG_ASSERT */
- "invalid repeat counts in {}", /* BADBR */
- "pattern error", /* BADPAT */
- "? * + invalid", /* BADRPT */
- "unbalanced {}", /* EBRACE */
- "unbalanced []", /* EBRACK */
- "collation error - not relevant", /* ECOLLATE */
- "bad class", /* ECTYPE */
- "bad escape sequence", /* EESCAPE */
- "empty expression", /* EMPTY */
- "unbalanced ()", /* EPAREN */
- "bad range inside []", /* ERANGE */
- "expression too big", /* ESIZE */
- "failed to get memory", /* ESPACE */
- "bad back reference", /* ESUBREG */
- "bad argument", /* INVARG */
- "match failed" /* NOMATCH */
-};
-
-
-
-
-/*************************************************
-* Translate PCRE text code to int *
-*************************************************/
-
-/* PCRE compile-time errors are given as strings defined as macros. We can just
-look them up in a table to turn them into POSIX-style error codes. */
-
-static int
-pcre_posix_error_code(const char *s)
-{
-size_t i;
-for (i = 0; i < sizeof(estring)/sizeof(char *); i++)
- if (strcmp(s, estring[i]) == 0) return eint[i];
-return REG_ASSERT;
-}
-
-
-
-/*************************************************
-* Translate error code to string *
-*************************************************/
-
-size_t
-regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
-{
-const char *message, *addmessage;
-size_t length, addlength;
-
-message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))?
- "unknown error code" : pstring[errcode];
-length = strlen(message) + 1;
-
-addmessage = " at offset ";
-addlength = (preg != NULL && (int)preg->re_erroffset != -1)?
- strlen(addmessage) + 6 : 0;
-
-if (errbuf_size > 0)
- {
- if (addlength > 0 && errbuf_size >= length + addlength)
- sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset);
- else
- {
- strncpy(errbuf, message, errbuf_size - 1);
- errbuf[errbuf_size-1] = 0;
- }
- }
-
-return length + addlength;
-}
-
-
-
-
-/*************************************************
-* Free store held by a regex *
-*************************************************/
-
-void
-regfree(regex_t *preg)
-{
-(pcre_free)(preg->re_pcre);
-}
-
-
-
-
-/*************************************************
-* Compile a regular expression *
-*************************************************/
-
-/*
-Arguments:
- preg points to a structure for recording the compiled expression
- pattern the pattern to compile
- cflags compilation flags
-
-Returns: 0 on success
- various non-zero codes on failure
-*/
-
-int
-regcomp(regex_t *preg, const char *pattern, int cflags)
-{
-const char *errorptr;
-int erroffset;
-int options = 0;
-
-if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;
-if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;
-
-preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);
-preg->re_erroffset = erroffset;
-
-if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);
-
-preg->re_nsub = pcre_info(preg->re_pcre, NULL, NULL);
-return 0;
-}
-
-
-
-
-/*************************************************
-* Match a regular expression *
-*************************************************/
-
-/* Unfortunately, PCRE requires 3 ints of working space for each captured
-substring, so we have to get and release working store instead of just using
-the POSIX structures as was done in earlier releases when PCRE needed only 2
-ints. */
-
-int
-regexec(regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags)
-{
-int rc;
-int options = 0;
-int *ovector = NULL;
-
-if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;
-if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;
-
-preg->re_erroffset = (size_t)(-1); /* Only has meaning after compile */
-
-if (nmatch > 0)
- {
- ovector = (int *)malloc(sizeof(int) * nmatch * 3);
- if (ovector == NULL) return REG_ESPACE;
- }
-
-rc = pcre_exec(preg->re_pcre, NULL, string, (int)strlen(string), 0, options,
- ovector, nmatch * 3);
-
-if (rc == 0) rc = nmatch; /* All captured slots were filled in */
-
-if (rc >= 0)
- {
- size_t i;
- for (i = 0; i < rc; i++)
- {
- pmatch[i].rm_so = ovector[i*2];
- pmatch[i].rm_eo = ovector[i*2+1];
- }
- if (ovector != NULL) free(ovector);
- for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;
- return 0;
- }
-
-else
- {
- if (ovector != NULL) free(ovector);
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: return REG_NOMATCH;
- case PCRE_ERROR_NULL: return REG_INVARG;
- case PCRE_ERROR_BADOPTION: return REG_INVARG;
- case PCRE_ERROR_BADMAGIC: return REG_INVARG;
- case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT;
- case PCRE_ERROR_NOMEMORY: return REG_ESPACE;
- default: return REG_ASSERT;
- }
- }
-}
-
-/* End of pcreposix.c */
diff --git a/ext/pcre/pcrelib/pcreposix.h b/ext/pcre/pcrelib/pcreposix.h
deleted file mode 100644
index 7660acbd55..0000000000
--- a/ext/pcre/pcrelib/pcreposix.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-#ifndef _PCREPOSIX_H
-#define _PCREPOSIX_H
-
-/* This is the header for the POSIX wrapper interface to the PCRE Perl-
-Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
-
-/* Have to include stdlib.h in order to ensure that size_t is defined. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options defined by POSIX. */
-
-#define REG_ICASE 0x01
-#define REG_NEWLINE 0x02
-#define REG_NOTBOL 0x04
-#define REG_NOTEOL 0x08
-
-/* These are not used by PCRE, but by defining them we make it easier
-to slot PCRE into existing programs that make POSIX calls. */
-
-#define REG_EXTENDED 0
-#define REG_NOSUB 0
-
-/* Error values. Not all these are relevant or used by the wrapper. */
-
-enum {
- REG_ASSERT = 1, /* internal error ? */
- REG_BADBR, /* invalid repeat counts in {} */
- REG_BADPAT, /* pattern error */
- REG_BADRPT, /* ? * + invalid */
- REG_EBRACE, /* unbalanced {} */
- REG_EBRACK, /* unbalanced [] */
- REG_ECOLLATE, /* collation error - not relevant */
- REG_ECTYPE, /* bad class */
- REG_EESCAPE, /* bad escape sequence */
- REG_EMPTY, /* empty expression */
- REG_EPAREN, /* unbalanced () */
- REG_ERANGE, /* bad range inside [] */
- REG_ESIZE, /* expression too big */
- REG_ESPACE, /* failed to get memory */
- REG_ESUBREG, /* bad back reference */
- REG_INVARG, /* bad argument */
- REG_NOMATCH /* match failed */
-};
-
-
-/* The structure representing a compiled regular expression. */
-
-typedef struct {
- void *re_pcre;
- size_t re_nsub;
- size_t re_erroffset;
-} regex_t;
-
-/* The structure in which a captured offset is returned. */
-
-typedef int regoff_t;
-
-typedef struct {
- regoff_t rm_so;
- regoff_t rm_eo;
-} regmatch_t;
-
-/* The functions */
-
-extern int regcomp(regex_t *, const char *, int);
-extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
-extern size_t regerror(int, const regex_t *, char *, size_t);
-extern void regfree(regex_t *);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcreposix.h */
diff --git a/ext/pcre/pcrelib/pcretest.c b/ext/pcre/pcrelib/pcretest.c
deleted file mode 100644
index ee5df5f0c7..0000000000
--- a/ext/pcre/pcrelib/pcretest.c
+++ /dev/null
@@ -1,1225 +0,0 @@
-/*************************************************
-* PCRE testing program *
-*************************************************/
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <locale.h>
-
-/* Use the internal info for displaying the results of pcre_study(). */
-
-#include "internal.h"
-
-/* It is possible to compile this test program without including support for
-testing the POSIX interface, though this is not available via the standard
-Makefile. */
-
-#if !defined NOPOSIX
-#include "pcreposix.h"
-#endif
-
-#ifndef CLOCKS_PER_SEC
-#ifdef CLK_TCK
-#define CLOCKS_PER_SEC CLK_TCK
-#else
-#define CLOCKS_PER_SEC 100
-#endif
-#endif
-
-#define LOOPREPEAT 20000
-
-
-static FILE *outfile;
-static int log_store = 0;
-static size_t gotten_store;
-
-
-
-static int utf8_table1[] = {
- 0x0000007f, 0x000007ff, 0x0000ffff, 0x001fffff, 0x03ffffff, 0x7fffffff};
-
-static int utf8_table2[] = {
- 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-
-static int utf8_table3[] = {
- 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-
-/*************************************************
-* Convert character value to UTF-8 *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
-Returns: number of characters placed in the buffer
- -1 if input character is negative
- 0 if input character is positive but too big (only when
- int is longer than 32 bits)
-*/
-
-static int
-ord2utf8(int cvalue, unsigned char *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (cvalue <= utf8_table1[i]) break;
-if (i >= sizeof(utf8_table1)/sizeof(int)) return 0;
-if (cvalue < 0) return -1;
-*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
-cvalue >>= 6 - i;
-for (j = 0; j < i; j++)
- {
- *buffer++ = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-return i + 1;
-}
-
-
-/*************************************************
-* Convert UTF-8 string to value *
-*************************************************/
-
-/* This function takes one or more bytes that represents a UTF-8 character,
-and returns the value of the character.
-
-Argument:
- buffer a pointer to the byte vector
- vptr a pointer to an int to receive the value
-
-Returns: > 0 => the number of bytes consumed
- -6 to 0 => malformed UTF-8 character at offset = (-return)
-*/
-
-int
-utf82ord(unsigned char *buffer, int *vptr)
-{
-int c = *buffer++;
-int d = c;
-int i, j, s;
-
-for (i = -1; i < 6; i++) /* i is number of additional bytes */
- {
- if ((d & 0x80) == 0) break;
- d <<= 1;
- }
-
-if (i == -1) { *vptr = c; return 1; } /* ascii character */
-if (i == 0 || i == 6) return 0; /* invalid UTF-8 */
-
-/* i now has a value in the range 1-5 */
-
-d = c & utf8_table3[i];
-s = 6 - i;
-
-for (j = 0; j < i; j++)
- {
- c = *buffer++;
- if ((c & 0xc0) != 0x80) return -(j+1);
- d |= (c & 0x3f) << s;
- s += 6;
- }
-
-/* Check that encoding was the correct unique one */
-
-for (j = 0; j < sizeof(utf8_table1)/sizeof(int); j++)
- if (d <= utf8_table1[j]) break;
-if (j != i) return -(i+1);
-
-/* Valid value */
-
-*vptr = d;
-return i+1;
-}
-
-
-
-
-
-
-/* Debugging function to print the internal form of the regex. This is the same
-code as contained in pcre.c under the DEBUG macro. */
-
-static const char *OP_names[] = {
- "End", "\\A", "\\B", "\\b", "\\D", "\\d",
- "\\S", "\\s", "\\W", "\\w", "\\Z", "\\z",
- "Opt", "^", "$", "Any", "chars", "not",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{",
- "class", "Ref", "Recurse",
- "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
- "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
- "Brazero", "Braminzero", "Bra"
-};
-
-
-static void print_internals(pcre *re)
-{
-unsigned char *code = ((real_pcre *)re)->code;
-
-fprintf(outfile, "------------------------------------------------------------------\n");
-
-for(;;)
- {
- int c;
- int charlength;
-
- fprintf(outfile, "%3d ", (int)(code - ((real_pcre *)re)->code));
-
- if (*code >= OP_BRA)
- {
- fprintf(outfile, "%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
- code += 2;
- }
-
- else switch(*code)
- {
- case OP_END:
- fprintf(outfile, " %s\n", OP_names[*code]);
- fprintf(outfile, "------------------------------------------------------------------\n");
- return;
-
- case OP_OPT:
- fprintf(outfile, " %.2x %s", code[1], OP_names[*code]);
- code++;
- break;
-
- case OP_COND:
- fprintf(outfile, "%3d Cond", (code[1] << 8) + code[2]);
- code += 2;
- break;
-
- case OP_CREF:
- fprintf(outfile, " %.2d %s", code[1], OP_names[*code]);
- code++;
- break;
-
- case OP_CHARS:
- charlength = *(++code);
- fprintf(outfile, "%3d ", charlength);
- while (charlength-- > 0)
- if (isprint(c = *(++code))) fprintf(outfile, "%c", c);
- else fprintf(outfile, "\\x%02x", c);
- break;
-
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_ALT:
- case OP_KET:
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- case OP_ONCE:
- fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
- code += 2;
- break;
-
- case OP_REVERSE:
- fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
- code += 2;
- break;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- if (*code >= OP_TYPESTAR)
- fprintf(outfile, " %s", OP_names[code[1]]);
- else if (isprint(c = code[1])) fprintf(outfile, " %c", c);
- else fprintf(outfile, " \\x%02x", c);
- fprintf(outfile, "%s", OP_names[*code++]);
- break;
-
- case OP_EXACT:
- case OP_UPTO:
- case OP_MINUPTO:
- if (isprint(c = code[3])) fprintf(outfile, " %c{", c);
- else fprintf(outfile, " \\x%02x{", c);
- if (*code != OP_EXACT) fprintf(outfile, ",");
- fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
- if (*code == OP_MINUPTO) fprintf(outfile, "?");
- code += 3;
- break;
-
- case OP_TYPEEXACT:
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- fprintf(outfile, " %s{", OP_names[code[3]]);
- if (*code != OP_TYPEEXACT) fprintf(outfile, "0,");
- fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
- if (*code == OP_TYPEMINUPTO) fprintf(outfile, "?");
- code += 3;
- break;
-
- case OP_NOT:
- if (isprint(c = *(++code))) fprintf(outfile, " [^%c]", c);
- else fprintf(outfile, " [^\\x%02x]", c);
- break;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- if (isprint(c = code[1])) fprintf(outfile, " [^%c]", c);
- else fprintf(outfile, " [^\\x%02x]", c);
- fprintf(outfile, "%s", OP_names[*code++]);
- break;
-
- case OP_NOTEXACT:
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- if (isprint(c = code[3])) fprintf(outfile, " [^%c]{", c);
- else fprintf(outfile, " [^\\x%02x]{", c);
- if (*code != OP_NOTEXACT) fprintf(outfile, ",");
- fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
- if (*code == OP_NOTMINUPTO) fprintf(outfile, "?");
- code += 3;
- break;
-
- case OP_REF:
- fprintf(outfile, " \\%d", *(++code));
- code++;
- goto CLASS_REF_REPEAT;
-
- case OP_CLASS:
- {
- int i, min, max;
- code++;
- fprintf(outfile, " [");
-
- for (i = 0; i < 256; i++)
- {
- if ((code[i/8] & (1 << (i&7))) != 0)
- {
- int j;
- for (j = i+1; j < 256; j++)
- if ((code[j/8] & (1 << (j&7))) == 0) break;
- if (i == '-' || i == ']') fprintf(outfile, "\\");
- if (isprint(i)) fprintf(outfile, "%c", i); else fprintf(outfile, "\\x%02x", i);
- if (--j > i)
- {
- fprintf(outfile, "-");
- if (j == '-' || j == ']') fprintf(outfile, "\\");
- if (isprint(j)) fprintf(outfile, "%c", j); else fprintf(outfile, "\\x%02x", j);
- }
- i = j;
- }
- }
- fprintf(outfile, "]");
- code += 32;
-
- CLASS_REF_REPEAT:
-
- switch(*code)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- fprintf(outfile, "%s", OP_names[*code]);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- min = (code[1] << 8) + code[2];
- max = (code[3] << 8) + code[4];
- if (max == 0) fprintf(outfile, "{%d,}", min);
- else fprintf(outfile, "{%d,%d}", min, max);
- if (*code == OP_CRMINRANGE) fprintf(outfile, "?");
- code += 4;
- break;
-
- default:
- code--;
- }
- }
- break;
-
- /* Anything else is just a one-node item */
-
- default:
- fprintf(outfile, " %s", OP_names[*code]);
- break;
- }
-
- code++;
- fprintf(outfile, "\n");
- }
-}
-
-
-
-/* Character string printing function. A "normal" and a UTF-8 version. */
-
-static void pchars(unsigned char *p, int length, int utf8)
-{
-int c;
-while (length-- > 0)
- {
- if (utf8)
- {
- int rc = utf82ord(p, &c);
- if (rc > 0)
- {
- length -= rc - 1;
- p += rc;
- if (c < 256 && isprint(c)) fprintf(outfile, "%c", c);
- else fprintf(outfile, "\\x{%02x}", c);
- continue;
- }
- }
-
- /* Not UTF-8, or malformed UTF-8 */
-
- if (isprint(c = *(p++))) fprintf(outfile, "%c", c);
- else fprintf(outfile, "\\x%02x", c);
- }
-}
-
-
-
-/* Alternative malloc function, to test functionality and show the size of the
-compiled re. */
-
-static void *new_malloc(size_t size)
-{
-gotten_store = size;
-if (log_store)
- fprintf(outfile, "Memory allocation (code space): %d\n",
- (int)((int)size - offsetof(real_pcre, code[0])));
-return malloc(size);
-}
-
-
-
-
-/* Get one piece of information from the pcre_fullinfo() function */
-
-static void new_info(pcre *re, pcre_extra *study, int option, void *ptr)
-{
-int rc;
-if ((rc = pcre_fullinfo(re, study, option, ptr)) < 0)
- fprintf(outfile, "Error %d from pcre_fullinfo(%d)\n", rc, option);
-}
-
-
-
-
-/* Read lines from named file or stdin and write to named file or stdout; lines
-consist of a regular expression, in delimiters and optionally followed by
-options, followed by a set of test data, terminated by an empty line. */
-
-int main(int argc, char **argv)
-{
-FILE *infile = stdin;
-int options = 0;
-int study_options = 0;
-int op = 1;
-int timeit = 0;
-int showinfo = 0;
-int showstore = 0;
-int posix = 0;
-int debug = 0;
-int done = 0;
-unsigned char buffer[30000];
-unsigned char dbuffer[1024];
-
-/* Static so that new_malloc can use it. */
-
-outfile = stdout;
-
-/* Scan options */
-
-while (argc > 1 && argv[op][0] == '-')
- {
- if (strcmp(argv[op], "-s") == 0 || strcmp(argv[op], "-m") == 0)
- showstore = 1;
- else if (strcmp(argv[op], "-t") == 0) timeit = 1;
- else if (strcmp(argv[op], "-i") == 0) showinfo = 1;
- else if (strcmp(argv[op], "-d") == 0) showinfo = debug = 1;
- else if (strcmp(argv[op], "-p") == 0) posix = 1;
- else
- {
- printf("*** Unknown option %s\n", argv[op]);
- printf("Usage: pcretest [-d] [-i] [-p] [-s] [-t] [<input> [<output>]]\n");
- printf(" -d debug: show compiled code; implies -i\n"
- " -i show information about compiled pattern\n"
- " -p use POSIX interface\n"
- " -s output store information\n"
- " -t time compilation and execution\n");
- return 1;
- }
- op++;
- argc--;
- }
-
-/* Sort out the input and output files */
-
-if (argc > 1)
- {
- infile = fopen(argv[op], "r");
- if (infile == NULL)
- {
- printf("** Failed to open %s\n", argv[op]);
- return 1;
- }
- }
-
-if (argc > 2)
- {
- outfile = fopen(argv[op+1], "w");
- if (outfile == NULL)
- {
- printf("** Failed to open %s\n", argv[op+1]);
- return 1;
- }
- }
-
-/* Set alternative malloc function */
-
-pcre_malloc = new_malloc;
-
-/* Heading line, then prompt for first regex if stdin */
-
-fprintf(outfile, "PCRE version %s\n\n", pcre_version());
-
-/* Main loop */
-
-while (!done)
- {
- pcre *re = NULL;
- pcre_extra *extra = NULL;
-
-#if !defined NOPOSIX /* There are still compilers that require no indent */
- regex_t preg;
- int do_posix = 0;
-#endif
-
- const char *error;
- unsigned char *p, *pp, *ppp;
- unsigned const char *tables = NULL;
- int do_study = 0;
- int do_debug = debug;
- int do_G = 0;
- int do_g = 0;
- int do_showinfo = showinfo;
- int do_showrest = 0;
- int utf8 = 0;
- int erroroffset, len, delimiter;
-
- if (infile == stdin) printf(" re> ");
- if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) break;
- if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
- p = buffer;
- while (isspace(*p)) p++;
- if (*p == 0) continue;
-
- /* Get the delimiter and seek the end of the pattern; if is isn't
- complete, read more. */
-
- delimiter = *p++;
-
- if (isalnum(delimiter) || delimiter == '\\')
- {
- fprintf(outfile, "** Delimiter must not be alphameric or \\\n");
- goto SKIP_DATA;
- }
-
- pp = p;
-
- for(;;)
- {
- while (*pp != 0)
- {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == delimiter) break;
- pp++;
- }
- if (*pp != 0) break;
-
- len = sizeof(buffer) - (pp - buffer);
- if (len < 256)
- {
- fprintf(outfile, "** Expression too long - missing delimiter?\n");
- goto SKIP_DATA;
- }
-
- if (infile == stdin) printf(" > ");
- if (fgets((char *)pp, len, infile) == NULL)
- {
- fprintf(outfile, "** Unexpected EOF\n");
- done = 1;
- goto CONTINUE;
- }
- if (infile != stdin) fprintf(outfile, "%s", (char *)pp);
- }
-
- /* If the first character after the delimiter is backslash, make
- the pattern end with backslash. This is purely to provide a way
- of testing for the error message when a pattern ends with backslash. */
-
- if (pp[1] == '\\') *pp++ = '\\';
-
- /* Terminate the pattern at the delimiter */
-
- *pp++ = 0;
-
- /* Look for options after final delimiter */
-
- options = 0;
- study_options = 0;
- log_store = showstore; /* default from command line */
-
- while (*pp != 0)
- {
- switch (*pp++)
- {
- case 'g': do_g = 1; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'm': options |= PCRE_MULTILINE; break;
- case 's': options |= PCRE_DOTALL; break;
- case 'x': options |= PCRE_EXTENDED; break;
-
- case '+': do_showrest = 1; break;
- case 'A': options |= PCRE_ANCHORED; break;
- case 'D': do_debug = do_showinfo = 1; break;
- case 'E': options |= PCRE_DOLLAR_ENDONLY; break;
- case 'G': do_G = 1; break;
- case 'I': do_showinfo = 1; break;
- case 'M': log_store = 1; break;
-
-#if !defined NOPOSIX
- case 'P': do_posix = 1; break;
-#endif
-
- case 'S': do_study = 1; break;
- case 'U': options |= PCRE_UNGREEDY; break;
- case 'X': options |= PCRE_EXTRA; break;
- case '8': options |= PCRE_UTF8; utf8 = 1; break;
-
- case 'L':
- ppp = pp;
- while (*ppp != '\n' && *ppp != ' ') ppp++;
- *ppp = 0;
- if (setlocale(LC_CTYPE, (const char *)pp) == NULL)
- {
- fprintf(outfile, "** Failed to set locale \"%s\"\n", pp);
- goto SKIP_DATA;
- }
- tables = pcre_maketables();
- pp = ppp;
- break;
-
- case '\n': case ' ': break;
- default:
- fprintf(outfile, "** Unknown option '%c'\n", pp[-1]);
- goto SKIP_DATA;
- }
- }
-
- /* Handle compiling via the POSIX interface, which doesn't support the
- timing, showing, or debugging options, nor the ability to pass over
- local character tables. */
-
-#if !defined NOPOSIX
- if (posix || do_posix)
- {
- int rc;
- int cflags = 0;
- if ((options & PCRE_CASELESS) != 0) cflags |= REG_ICASE;
- if ((options & PCRE_MULTILINE) != 0) cflags |= REG_NEWLINE;
- rc = regcomp(&preg, (char *)p, cflags);
-
- /* Compilation failed; go back for another re, skipping to blank line
- if non-interactive. */
-
- if (rc != 0)
- {
- (void)regerror(rc, &preg, (char *)buffer, sizeof(buffer));
- fprintf(outfile, "Failed: POSIX code %d: %s\n", rc, buffer);
- goto SKIP_DATA;
- }
- }
-
- /* Handle compiling via the native interface */
-
- else
-#endif /* !defined NOPOSIX */
-
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- {
- re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
- if (re != NULL) free(re);
- }
- time_taken = clock() - start_time;
- fprintf(outfile, "Compile time %.3f milliseconds\n",
- ((double)time_taken * 1000.0) /
- ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
- }
-
- re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
-
- /* Compilation failed; go back for another re, skipping to blank line
- if non-interactive. */
-
- if (re == NULL)
- {
- fprintf(outfile, "Failed: %s at offset %d\n", error, erroroffset);
- SKIP_DATA:
- if (infile != stdin)
- {
- for (;;)
- {
- if (fgets((char *)buffer, sizeof(buffer), infile) == NULL)
- {
- done = 1;
- goto CONTINUE;
- }
- len = (int)strlen((char *)buffer);
- while (len > 0 && isspace(buffer[len-1])) len--;
- if (len == 0) break;
- }
- fprintf(outfile, "\n");
- }
- goto CONTINUE;
- }
-
- /* Compilation succeeded; print data if required. There are now two
- info-returning functions. The old one has a limited interface and
- returns only limited data. Check that it agrees with the newer one. */
-
- if (do_showinfo)
- {
- int old_first_char, old_options, old_count;
- int count, backrefmax, first_char, need_char;
- size_t size;
-
- if (do_debug) print_internals(re);
-
- new_info(re, NULL, PCRE_INFO_OPTIONS, &options);
- new_info(re, NULL, PCRE_INFO_SIZE, &size);
- new_info(re, NULL, PCRE_INFO_CAPTURECOUNT, &count);
- new_info(re, NULL, PCRE_INFO_BACKREFMAX, &backrefmax);
- new_info(re, NULL, PCRE_INFO_FIRSTCHAR, &first_char);
- new_info(re, NULL, PCRE_INFO_LASTLITERAL, &need_char);
-
- old_count = pcre_info(re, &old_options, &old_first_char);
- if (count < 0) fprintf(outfile,
- "Error %d from pcre_info()\n", count);
- else
- {
- if (old_count != count) fprintf(outfile,
- "Count disagreement: pcre_fullinfo=%d pcre_info=%d\n", count,
- old_count);
-
- if (old_first_char != first_char) fprintf(outfile,
- "First char disagreement: pcre_fullinfo=%d pcre_info=%d\n",
- first_char, old_first_char);
-
- if (old_options != options) fprintf(outfile,
- "Options disagreement: pcre_fullinfo=%d pcre_info=%d\n", options,
- old_options);
- }
-
- if (size != gotten_store) fprintf(outfile,
- "Size disagreement: pcre_fullinfo=%d call to malloc for %d\n",
- size, gotten_store);
-
- fprintf(outfile, "Capturing subpattern count = %d\n", count);
- if (backrefmax > 0)
- fprintf(outfile, "Max back reference = %d\n", backrefmax);
- if (options == 0) fprintf(outfile, "No options\n");
- else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s\n",
- ((options & PCRE_ANCHORED) != 0)? " anchored" : "",
- ((options & PCRE_CASELESS) != 0)? " caseless" : "",
- ((options & PCRE_EXTENDED) != 0)? " extended" : "",
- ((options & PCRE_MULTILINE) != 0)? " multiline" : "",
- ((options & PCRE_DOTALL) != 0)? " dotall" : "",
- ((options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
- ((options & PCRE_EXTRA) != 0)? " extra" : "",
- ((options & PCRE_UNGREEDY) != 0)? " ungreedy" : "",
- ((options & PCRE_UTF8) != 0)? " utf8" : "");
-
- if (((((real_pcre *)re)->options) & PCRE_ICHANGED) != 0)
- fprintf(outfile, "Case state changes\n");
-
- if (first_char == -1)
- {
- fprintf(outfile, "First char at start or follows \\n\n");
- }
- else if (first_char < 0)
- {
- fprintf(outfile, "No first char\n");
- }
- else
- {
- if (isprint(first_char))
- fprintf(outfile, "First char = \'%c\'\n", first_char);
- else
- fprintf(outfile, "First char = %d\n", first_char);
- }
-
- if (need_char < 0)
- {
- fprintf(outfile, "No need char\n");
- }
- else
- {
- if (isprint(need_char))
- fprintf(outfile, "Need char = \'%c\'\n", need_char);
- else
- fprintf(outfile, "Need char = %d\n", need_char);
- }
- }
-
- /* If /S was present, study the regexp to generate additional info to
- help with the matching. */
-
- if (do_study)
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- extra = pcre_study(re, study_options, &error);
- time_taken = clock() - start_time;
- if (extra != NULL) free(extra);
- fprintf(outfile, " Study time %.3f milliseconds\n",
- ((double)time_taken * 1000.0)/
- ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
- }
-
- extra = pcre_study(re, study_options, &error);
- if (error != NULL)
- fprintf(outfile, "Failed to study: %s\n", error);
- else if (extra == NULL)
- fprintf(outfile, "Study returned NULL\n");
-
- else if (do_showinfo)
- {
- uschar *start_bits = NULL;
- new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
- if (start_bits == NULL)
- fprintf(outfile, "No starting character set\n");
- else
- {
- int i;
- int c = 24;
- fprintf(outfile, "Starting character set: ");
- for (i = 0; i < 256; i++)
- {
- if ((start_bits[i/8] & (1<<(i%8))) != 0)
- {
- if (c > 75)
- {
- fprintf(outfile, "\n ");
- c = 2;
- }
- if (isprint(i) && i != ' ')
- {
- fprintf(outfile, "%c ", i);
- c += 2;
- }
- else
- {
- fprintf(outfile, "\\x%02x ", i);
- c += 5;
- }
- }
- }
- fprintf(outfile, "\n");
- }
- }
- }
- }
-
- /* Read data lines and test them */
-
- for (;;)
- {
- unsigned char *q;
- unsigned char *bptr = dbuffer;
- int count, c;
- int copystrings = 0;
- int getstrings = 0;
- int getlist = 0;
- int gmatched = 0;
- int start_offset = 0;
- int g_notempty = 0;
- int offsets[45];
- int size_offsets = sizeof(offsets)/sizeof(int);
-
- options = 0;
-
- if (infile == stdin) printf("data> ");
- if (fgets((char *)buffer, sizeof(buffer), infile) == NULL)
- {
- done = 1;
- goto CONTINUE;
- }
- if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
- len = (int)strlen((char *)buffer);
- while (len > 0 && isspace(buffer[len-1])) len--;
- buffer[len] = 0;
- if (len == 0) break;
-
- p = buffer;
- while (isspace(*p)) p++;
-
- q = dbuffer;
- while ((c = *p++) != 0)
- {
- int i = 0;
- int n = 0;
- if (c == '\\') switch ((c = *p++))
- {
- case 'a': c = 7; break;
- case 'b': c = '\b'; break;
- case 'e': c = 27; break;
- case 'f': c = '\f'; break;
- case 'n': c = '\n'; break;
- case 'r': c = '\r'; break;
- case 't': c = '\t'; break;
- case 'v': c = '\v'; break;
-
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- c -= '0';
- while (i++ < 2 && isdigit(*p) && *p != '8' && *p != '9')
- c = c * 8 + *p++ - '0';
- break;
-
- case 'x':
-
- /* Handle \x{..} specially - new Perl thing for utf8 */
-
- if (*p == '{')
- {
- unsigned char *pt = p;
- c = 0;
- while (isxdigit(*(++pt)))
- c = c * 16 + tolower(*pt) - ((isdigit(*pt))? '0' : 'W');
- if (*pt == '}')
- {
- unsigned char buffer[8];
- int ii, utn;
- utn = ord2utf8(c, buffer);
- for (ii = 0; ii < utn - 1; ii++) *q++ = buffer[ii];
- c = buffer[ii]; /* Last byte */
- p = pt + 1;
- break;
- }
- /* Not correct form; fall through */
- }
-
- /* Ordinary \x */
-
- c = 0;
- while (i++ < 2 && isxdigit(*p))
- {
- c = c * 16 + tolower(*p) - ((isdigit(*p))? '0' : 'W');
- p++;
- }
- break;
-
- case 0: /* Allows for an empty line */
- p--;
- continue;
-
- case 'A': /* Option setting */
- options |= PCRE_ANCHORED;
- continue;
-
- case 'B':
- options |= PCRE_NOTBOL;
- continue;
-
- case 'C':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- copystrings |= 1 << n;
- continue;
-
- case 'G':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- getstrings |= 1 << n;
- continue;
-
- case 'L':
- getlist = 1;
- continue;
-
- case 'N':
- options |= PCRE_NOTEMPTY;
- continue;
-
- case 'O':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- if (n <= (int)(sizeof(offsets)/sizeof(int))) size_offsets = n;
- continue;
-
- case 'Z':
- options |= PCRE_NOTEOL;
- continue;
- }
- *q++ = c;
- }
- *q = 0;
- len = q - dbuffer;
-
- /* Handle matching via the POSIX interface, which does not
- support timing. */
-
-#if !defined NOPOSIX
- if (posix || do_posix)
- {
- int rc;
- int eflags = 0;
- regmatch_t pmatch[sizeof(offsets)/sizeof(int)];
- if ((options & PCRE_NOTBOL) != 0) eflags |= REG_NOTBOL;
- if ((options & PCRE_NOTEOL) != 0) eflags |= REG_NOTEOL;
-
- rc = regexec(&preg, (const char *)bptr, size_offsets, pmatch, eflags);
-
- if (rc != 0)
- {
- (void)regerror(rc, &preg, (char *)buffer, sizeof(buffer));
- fprintf(outfile, "No match: POSIX code %d: %s\n", rc, buffer);
- }
- else
- {
- size_t i;
- for (i = 0; i < size_offsets; i++)
- {
- if (pmatch[i].rm_so >= 0)
- {
- fprintf(outfile, "%2d: ", (int)i);
- pchars(dbuffer + pmatch[i].rm_so,
- pmatch[i].rm_eo - pmatch[i].rm_so, utf8);
- fprintf(outfile, "\n");
- if (i == 0 && do_showrest)
- {
- fprintf(outfile, " 0+ ");
- pchars(dbuffer + pmatch[i].rm_eo, len - pmatch[i].rm_eo, utf8);
- fprintf(outfile, "\n");
- }
- }
- }
- }
- }
-
- /* Handle matching via the native interface - repeats for /g and /G */
-
- else
-#endif /* !defined NOPOSIX */
-
- for (;; gmatched++) /* Loop for /g or /G */
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- count = pcre_exec(re, extra, (char *)bptr, len,
- start_offset, options | g_notempty, offsets, size_offsets);
- time_taken = clock() - start_time;
- fprintf(outfile, "Execute time %.3f milliseconds\n",
- ((double)time_taken * 1000.0)/
- ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
- }
-
- count = pcre_exec(re, extra, (char *)bptr, len,
- start_offset, options | g_notempty, offsets, size_offsets);
-
- if (count == 0)
- {
- fprintf(outfile, "Matched, but too many substrings\n");
- count = size_offsets/3;
- }
-
- /* Matched */
-
- if (count >= 0)
- {
- int i;
- for (i = 0; i < count * 2; i += 2)
- {
- if (offsets[i] < 0)
- fprintf(outfile, "%2d: <unset>\n", i/2);
- else
- {
- fprintf(outfile, "%2d: ", i/2);
- pchars(bptr + offsets[i], offsets[i+1] - offsets[i], utf8);
- fprintf(outfile, "\n");
- if (i == 0)
- {
- if (do_showrest)
- {
- fprintf(outfile, " 0+ ");
- pchars(bptr + offsets[i+1], len - offsets[i+1], utf8);
- fprintf(outfile, "\n");
- }
- }
- }
- }
-
- for (i = 0; i < 32; i++)
- {
- if ((copystrings & (1 << i)) != 0)
- {
- char copybuffer[16];
- int rc = pcre_copy_substring((char *)bptr, offsets, count,
- i, copybuffer, sizeof(copybuffer));
- if (rc < 0)
- fprintf(outfile, "copy substring %d failed %d\n", i, rc);
- else
- fprintf(outfile, "%2dC %s (%d)\n", i, copybuffer, rc);
- }
- }
-
- for (i = 0; i < 32; i++)
- {
- if ((getstrings & (1 << i)) != 0)
- {
- const char *substring;
- int rc = pcre_get_substring((char *)bptr, offsets, count,
- i, &substring);
- if (rc < 0)
- fprintf(outfile, "get substring %d failed %d\n", i, rc);
- else
- {
- fprintf(outfile, "%2dG %s (%d)\n", i, substring, rc);
- /* free((void *)substring); */
- pcre_free_substring(substring);
- }
- }
- }
-
- if (getlist)
- {
- const char **stringlist;
- int rc = pcre_get_substring_list((char *)bptr, offsets, count,
- &stringlist);
- if (rc < 0)
- fprintf(outfile, "get substring list failed %d\n", rc);
- else
- {
- for (i = 0; i < count; i++)
- fprintf(outfile, "%2dL %s\n", i, stringlist[i]);
- if (stringlist[i] != NULL)
- fprintf(outfile, "string list not terminated by NULL\n");
- /* free((void *)stringlist); */
- pcre_free_substring_list(stringlist);
- }
- }
- }
-
- /* Failed to match. If this is a /g or /G loop and we previously set
- g_notempty after a null match, this is not necessarily the end.
- We want to advance the start offset, and continue. Fudge the offset
- values to achieve this. We won't be at the end of the string - that
- was checked before setting g_notempty. */
-
- else
- {
- if (g_notempty != 0)
- {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- }
- else
- {
- if (gmatched == 0) /* Error if no previous matches */
- {
- if (count == -1) fprintf(outfile, "No match\n");
- else fprintf(outfile, "Error %d\n", count);
- }
- break; /* Out of the /g loop */
- }
- }
-
- /* If not /g or /G we are done */
-
- if (!do_g && !do_G) break;
-
- /* If we have matched an empty string, first check to see if we are at
- the end of the subject. If so, the /g loop is over. Otherwise, mimic
- what Perl's /g options does. This turns out to be rather cunning. First
- we set PCRE_NOTEMPTY and PCRE_ANCHORED and try the match again at the
- same point. If this fails (picked up above) we advance to the next
- character. */
-
- g_notempty = 0;
- if (offsets[0] == offsets[1])
- {
- if (offsets[0] == len) break;
- g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED;
- }
-
- /* For /g, update the start offset, leaving the rest alone */
-
- if (do_g) start_offset = offsets[1];
-
- /* For /G, update the pointer and length */
-
- else
- {
- bptr += offsets[1];
- len -= offsets[1];
- }
- } /* End of loop for /g and /G */
- } /* End of loop for data lines */
-
- CONTINUE:
-
-#if !defined NOPOSIX
- if (posix || do_posix) regfree(&preg);
-#endif
-
- if (re != NULL) free(re);
- if (extra != NULL) free(extra);
- if (tables != NULL)
- {
- free((void *)tables);
- setlocale(LC_CTYPE, "C");
- }
- }
-
-fprintf(outfile, "\n");
-return 0;
-}
-
-/* End */
diff --git a/ext/pcre/pcrelib/perltest b/ext/pcre/pcrelib/perltest
deleted file mode 100755
index e6f797498c..0000000000
--- a/ext/pcre/pcrelib/perltest
+++ /dev/null
@@ -1,169 +0,0 @@
-#! /usr/bin/perl
-
-# Program for testing regular expressions with perl to check that PCRE handles
-# them the same.
-
-
-# Function for turning a string into a string of printing chars
-
-sub pchars {
-my($t) = "";
-
-foreach $c (split(//, $_[0]))
- {
- if (ord $c >= 32 && ord $c < 127) { $t .= $c; }
- else { $t .= sprintf("\\x%02x", ord $c); }
- }
-$t;
-}
-
-
-
-# Read lines from named file or stdin and write to named file or stdout; lines
-# consist of a regular expression, in delimiters and optionally followed by
-# options, followed by a set of test data, terminated by an empty line.
-
-# Sort out the input and output files
-
-if (@ARGV > 0)
- {
- open(INFILE, "<$ARGV[0]") || die "Failed to open $ARGV[0]\n";
- $infile = "INFILE";
- }
-else { $infile = "STDIN"; }
-
-if (@ARGV > 1)
- {
- open(OUTFILE, ">$ARGV[1]") || die "Failed to open $ARGV[1]\n";
- $outfile = "OUTFILE";
- }
-else { $outfile = "STDOUT"; }
-
-printf($outfile "Perl $] Regular Expressions\n\n");
-
-# Main loop
-
-NEXT_RE:
-for (;;)
- {
- printf " re> " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- next if ($_ eq "");
-
- $pattern = $_;
-
- while ($pattern !~ /^\s*(.).*\1/s)
- {
- printf " > " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- $pattern .= $_;
- }
-
- chomp($pattern);
- $pattern =~ s/\s+$//;
-
- # The private /+ modifier means "print $' afterwards". We use it
- # only on the end of patterns to make it easy to chop off here.
-
- $showrest = ($pattern =~ s/\+(?=[a-z]*$)//);
-
- # Check that the pattern is valid
-
- eval "\$_ =~ ${pattern}";
- if ($@)
- {
- printf $outfile "Error: $@";
- next NEXT_RE;
- }
-
- # If the /g modifier is present, we want to put a loop round the matching;
- # otherwise just a single "if".
-
- $cmd = ($pattern =~ /g[a-z]*$/)? "while" : "if";
-
- # If the pattern is actually the null string, Perl uses the most recently
- # executed (and successfully compiled) regex is used instead. This is a
- # nasty trap for the unwary! The PCRE test suite does contain null strings
- # in places - if they are allowed through here all sorts of weird and
- # unexpected effects happen. To avoid this, we replace such patterns with
- # a non-null pattern that has the same effect.
-
- $pattern = "/(?#)/$2" if ($pattern =~ /^(.)\1(.*)$/);
-
- # Read data lines and test them
-
- for (;;)
- {
- printf "data> " if $infile eq "STDIN";
- last NEXT_RE if ! ($_ = <$infile>);
- chomp;
- printf $outfile "$_\n" if $infile ne "STDIN";
-
- s/\s+$//;
- s/^\s+//;
-
- last if ($_ eq "");
-
- $x = eval "\"$_\""; # To get escapes processed
-
- # Empty array for holding results, then do the matching.
-
- @subs = ();
-
- eval "${cmd} (\$x =~ ${pattern}) {" .
- "push \@subs,\$&;" .
- "push \@subs,\$1;" .
- "push \@subs,\$2;" .
- "push \@subs,\$3;" .
- "push \@subs,\$4;" .
- "push \@subs,\$5;" .
- "push \@subs,\$6;" .
- "push \@subs,\$7;" .
- "push \@subs,\$8;" .
- "push \@subs,\$9;" .
- "push \@subs,\$10;" .
- "push \@subs,\$11;" .
- "push \@subs,\$12;" .
- "push \@subs,\$13;" .
- "push \@subs,\$14;" .
- "push \@subs,\$15;" .
- "push \@subs,\$16;" .
- "push \@subs,\$'; }";
-
- if ($@)
- {
- printf $outfile "Error: $@\n";
- next NEXT_RE;
- }
- elsif (scalar(@subs) == 0)
- {
- printf $outfile "No match\n";
- }
- else
- {
- while (scalar(@subs) != 0)
- {
- printf $outfile (" 0: %s\n", &pchars($subs[0]));
- printf $outfile (" 0+ %s\n", &pchars($subs[17])) if $showrest;
- $last_printed = 0;
- for ($i = 1; $i <= 16; $i++)
- {
- if (defined $subs[$i])
- {
- while ($last_printed++ < $i-1)
- { printf $outfile ("%2d: <unset>\n", $last_printed); }
- printf $outfile ("%2d: %s\n", $i, &pchars($subs[$i]));
- $last_printed = $i;
- }
- }
- splice(@subs, 0, 18);
- }
- }
- }
- }
-
-printf $outfile "\n";
-
-# End
diff --git a/ext/pcre/pcrelib/perltest8 b/ext/pcre/pcrelib/perltest8
deleted file mode 100755
index 2fe522d60d..0000000000
--- a/ext/pcre/pcrelib/perltest8
+++ /dev/null
@@ -1,208 +0,0 @@
-#! /usr/bin/perl
-
-# Program for testing regular expressions with perl to check that PCRE handles
-# them the same. This is the version that supports /8 for UTF-8 testing. It
-# requires at least Perl 5.6.
-
-
-# Function for turning a string into a string of printing chars. There are
-# currently problems with UTF-8 strings; this fudges round them.
-
-sub pchars {
-my($t) = "";
-
-if ($utf8)
- {
- use utf8;
- @p = unpack('U*', $_[0]);
- foreach $c (@p)
- {
- if ($c >= 32 && $c < 127) { $t .= chr $c; }
- else { $t .= sprintf("\\x{%02x}", $c); }
- }
- }
-
-else
- {
- foreach $c (split(//, $_[0]))
- {
- if (ord $c >= 32 && ord $c < 127) { $t .= $c; }
- else { $t .= sprintf("\\x%02x", ord $c); }
- }
- }
-
-$t;
-}
-
-
-
-# Read lines from named file or stdin and write to named file or stdout; lines
-# consist of a regular expression, in delimiters and optionally followed by
-# options, followed by a set of test data, terminated by an empty line.
-
-# Sort out the input and output files
-
-if (@ARGV > 0)
- {
- open(INFILE, "<$ARGV[0]") || die "Failed to open $ARGV[0]\n";
- $infile = "INFILE";
- }
-else { $infile = "STDIN"; }
-
-if (@ARGV > 1)
- {
- open(OUTFILE, ">$ARGV[1]") || die "Failed to open $ARGV[1]\n";
- $outfile = "OUTFILE";
- }
-else { $outfile = "STDOUT"; }
-
-printf($outfile "Perl $] Regular Expressions\n\n");
-
-# Main loop
-
-NEXT_RE:
-for (;;)
- {
- printf " re> " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- next if ($_ eq "");
-
- $pattern = $_;
-
- while ($pattern !~ /^\s*(.).*\1/s)
- {
- printf " > " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- $pattern .= $_;
- }
-
- chomp($pattern);
- $pattern =~ s/\s+$//;
-
- # The private /+ modifier means "print $' afterwards".
-
- $showrest = ($pattern =~ s/\+(?=[a-z]*$)//);
-
- # The private /8 modifier means "operate in UTF-8". Currently, Perl
- # has bugs that we try to work around using this flag.
-
- $utf8 = ($pattern =~ s/8(?=[a-z]*$)//);
-
- # Check that the pattern is valid
-
- if ($utf8)
- {
- use utf8;
- eval "\$_ =~ ${pattern}";
- }
- else
- {
- eval "\$_ =~ ${pattern}";
- }
-
- if ($@)
- {
- printf $outfile "Error: $@";
- next NEXT_RE;
- }
-
- # If the /g modifier is present, we want to put a loop round the matching;
- # otherwise just a single "if".
-
- $cmd = ($pattern =~ /g[a-z]*$/)? "while" : "if";
-
- # If the pattern is actually the null string, Perl uses the most recently
- # executed (and successfully compiled) regex is used instead. This is a
- # nasty trap for the unwary! The PCRE test suite does contain null strings
- # in places - if they are allowed through here all sorts of weird and
- # unexpected effects happen. To avoid this, we replace such patterns with
- # a non-null pattern that has the same effect.
-
- $pattern = "/(?#)/$2" if ($pattern =~ /^(.)\1(.*)$/);
-
- # Read data lines and test them
-
- for (;;)
- {
- printf "data> " if $infile eq "STDIN";
- last NEXT_RE if ! ($_ = <$infile>);
- chomp;
- printf $outfile "$_\n" if $infile ne "STDIN";
-
- s/\s+$//;
- s/^\s+//;
-
- last if ($_ eq "");
-
- $x = eval "\"$_\""; # To get escapes processed
-
- # Empty array for holding results, then do the matching.
-
- @subs = ();
-
- $pushes = "push \@subs,\$&;" .
- "push \@subs,\$1;" .
- "push \@subs,\$2;" .
- "push \@subs,\$3;" .
- "push \@subs,\$4;" .
- "push \@subs,\$5;" .
- "push \@subs,\$6;" .
- "push \@subs,\$7;" .
- "push \@subs,\$8;" .
- "push \@subs,\$9;" .
- "push \@subs,\$10;" .
- "push \@subs,\$11;" .
- "push \@subs,\$12;" .
- "push \@subs,\$13;" .
- "push \@subs,\$14;" .
- "push \@subs,\$15;" .
- "push \@subs,\$16;" .
- "push \@subs,\$'; }";
-
- if ($utf8)
- {
- use utf8;
- eval "${cmd} (\$x =~ ${pattern}) {" . $pushes;
- }
- else
- {
- eval "${cmd} (\$x =~ ${pattern}) {" . $pushes;
- }
-
- if ($@)
- {
- printf $outfile "Error: $@\n";
- next NEXT_RE;
- }
- elsif (scalar(@subs) == 0)
- {
- printf $outfile "No match\n";
- }
- else
- {
- while (scalar(@subs) != 0)
- {
- printf $outfile (" 0: %s\n", &pchars($subs[0]));
- printf $outfile (" 0+ %s\n", &pchars($subs[17])) if $showrest;
- $last_printed = 0;
- for ($i = 1; $i <= 16; $i++)
- {
- if (defined $subs[$i])
- {
- while ($last_printed++ < $i-1)
- { printf $outfile ("%2d: <unset>\n", $last_printed); }
- printf $outfile ("%2d: %s\n", $i, &pchars($subs[$i]));
- $last_printed = $i;
- }
- }
- splice(@subs, 0, 18);
- }
- }
- }
- }
-
-printf $outfile "\n";
-
-# End
diff --git a/ext/pcre/pcrelib/study.c b/ext/pcre/pcrelib/study.c
deleted file mode 100644
index 676db94665..0000000000
--- a/ext/pcre/pcrelib/study.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-* Set a bit and maybe its alternate case *
-*************************************************/
-
-/* Given a character, set its bit in the table, and also the bit for the other
-version of a letter if we are caseless.
-
-Arguments:
- start_bits points to the bit map
- c is the character
- caseless the caseless flag
- cd the block with char table pointers
-
-Returns: nothing
-*/
-
-static void
-set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
-{
-start_bits[c/8] |= (1 << (c&7));
-if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
- start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
-}
-
-
-
-/*************************************************
-* Create bitmap of starting chars *
-*************************************************/
-
-/* This function scans a compiled unanchored expression and attempts to build a
-bitmap of the set of initial characters. If it can't, it returns FALSE. As time
-goes by, we may be able to get more clever at doing this.
-
-Arguments:
- code points to an expression
- start_bits points to a 32-byte table, initialized to 0
- caseless the current state of the caseless flag
- cd the block with char table pointers
-
-Returns: TRUE if table built, FALSE otherwise
-*/
-
-static BOOL
-set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
- compile_data *cd)
-{
-register int c;
-
-/* This next statement and the later reference to dummy are here in order to
-trick the optimizer of the IBM C compiler for OS/2 into generating correct
-code. Apparently IBM isn't going to fix the problem, and we would rather not
-disable optimization (in this module it actually makes a big difference, and
-the pcre module can use all the optimization it can get). */
-
-volatile int dummy;
-
-do
- {
- const uschar *tcode = code + 3;
- BOOL try_next = TRUE;
-
- while (try_next)
- {
- try_next = FALSE;
-
- /* If a branch starts with a bracket or a positive lookahead assertion,
- recurse to set bits from within them. That's all for this branch. */
-
- if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
- {
- if (!set_start_bits(tcode, start_bits, caseless, cd))
- return FALSE;
- }
-
- else switch(*tcode)
- {
- default:
- return FALSE;
-
- /* Skip over lookbehind and negative lookahead assertions */
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- try_next = TRUE;
- do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
- tcode += 3;
- break;
-
- /* Skip over an option setting, changing the caseless flag */
-
- case OP_OPT:
- caseless = (tcode[1] & PCRE_CASELESS) != 0;
- tcode += 2;
- try_next = TRUE;
- break;
-
- /* BRAZERO does the bracket, but carries on. */
-
- case OP_BRAZERO:
- case OP_BRAMINZERO:
- if (!set_start_bits(++tcode, start_bits, caseless, cd))
- return FALSE;
- dummy = 1;
- do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
- tcode += 3;
- try_next = TRUE;
- break;
-
- /* Single-char * or ? sets the bit and tries the next item */
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_QUERY:
- case OP_MINQUERY:
- set_bit(start_bits, tcode[1], caseless, cd);
- tcode += 2;
- try_next = TRUE;
- break;
-
- /* Single-char upto sets the bit and tries the next */
-
- case OP_UPTO:
- case OP_MINUPTO:
- set_bit(start_bits, tcode[3], caseless, cd);
- tcode += 4;
- try_next = TRUE;
- break;
-
- /* At least one single char sets the bit and stops */
-
- case OP_EXACT: /* Fall through */
- tcode++;
-
- case OP_CHARS: /* Fall through */
- tcode++;
-
- case OP_PLUS:
- case OP_MINPLUS:
- set_bit(start_bits, tcode[1], caseless, cd);
- break;
-
- /* Single character type sets the bits and stops */
-
- case OP_NOT_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_digit];
- break;
-
- case OP_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_digit];
- break;
-
- case OP_NOT_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_space];
- break;
-
- case OP_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_space];
- break;
-
- case OP_NOT_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_word];
- break;
-
- case OP_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_word];
- break;
-
- /* One or more character type fudges the pointer and restarts, knowing
- it will hit a single character type and stop there. */
-
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- tcode++;
- try_next = TRUE;
- break;
-
- case OP_TYPEEXACT:
- tcode += 3;
- try_next = TRUE;
- break;
-
- /* Zero or more repeats of character types set the bits and then
- try again. */
-
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- tcode += 2; /* Fall through */
-
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- switch(tcode[1])
- {
- case OP_NOT_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_digit];
- break;
-
- case OP_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_digit];
- break;
-
- case OP_NOT_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_space];
- break;
-
- case OP_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_space];
- break;
-
- case OP_NOT_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_word];
- break;
-
- case OP_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_word];
- break;
- }
-
- tcode += 2;
- try_next = TRUE;
- break;
-
- /* Character class: set the bits and either carry on or not,
- according to the repeat count. */
-
- case OP_CLASS:
- {
- tcode++;
- for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
- tcode += 32;
- switch (*tcode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- tcode++;
- try_next = TRUE;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if (((tcode[1] << 8) + tcode[2]) == 0)
- {
- tcode += 5;
- try_next = TRUE;
- }
- break;
- }
- }
- break; /* End of class handling */
-
- } /* End of switch */
- } /* End of try_next loop */
-
- code += (code[1] << 8) + code[2]; /* Advance to next branch */
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Study a compiled expression *
-*************************************************/
-
-/* This function is handed a compiled expression that it must study to produce
-information that will speed up the matching. It returns a pcre_extra block
-which then gets handed back to pcre_exec().
-
-Arguments:
- re points to the compiled expression
- options contains option bits
- errorptr points to where to place error messages;
- set NULL unless error
-
-Returns: pointer to a pcre_extra block,
- NULL on error or if no optimization possible
-*/
-
-pcre_extra *
-pcre_study(const pcre *external_re, int options, const char **errorptr)
-{
-uschar start_bits[32];
-real_pcre_extra *extra;
-const real_pcre *re = (const real_pcre *)external_re;
-compile_data compile_block;
-
-*errorptr = NULL;
-
-if (re == NULL || re->magic_number != MAGIC_NUMBER)
- {
- *errorptr = "argument is not a compiled regular expression";
- return NULL;
- }
-
-if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
- {
- *errorptr = "unknown or incorrect option bit(s) set";
- return NULL;
- }
-
-/* For an anchored pattern, or an unchored pattern that has a first char, or a
-multiline pattern that matches only at "line starts", no further processing at
-present. */
-
-if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
- return NULL;
-
-/* Set the character tables in the block which is passed around */
-
-compile_block.lcc = re->tables + lcc_offset;
-compile_block.fcc = re->tables + fcc_offset;
-compile_block.cbits = re->tables + cbits_offset;
-compile_block.ctypes = re->tables + ctypes_offset;
-
-/* See if we can find a fixed set of initial characters for the pattern. */
-
-memset(start_bits, 0, 32 * sizeof(uschar));
-if (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
- &compile_block)) return NULL;
-
-/* Get an "extra" block and put the information therein. */
-
-extra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));
-
-if (extra == NULL)
- {
- *errorptr = "failed to get memory";
- return NULL;
- }
-
-extra->options = PCRE_STUDY_MAPPED;
-memcpy(extra->start_bits, start_bits, sizeof(start_bits));
-
-return (pcre_extra *)extra;
-}
-
-/* End of study.c */
diff --git a/ext/pcre/pcrelib/testdata/testinput1 b/ext/pcre/pcrelib/testdata/testinput1
deleted file mode 100644
index 3a5c2cebaf..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput1
+++ /dev/null
@@ -1,1922 +0,0 @@
-/the quick brown fox/
- the quick brown fox
- The quick brown FOX
- What do you know about the quick brown fox?
- What do you know about THE QUICK BROWN FOX?
-
-/The quick brown fox/i
- the quick brown fox
- The quick brown FOX
- What do you know about the quick brown fox?
- What do you know about THE QUICK BROWN FOX?
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- *** Failers
- abxyzpqrrabbxyyyypqAzz
- abxyzpqrrrrabbxyyyypqAzz
- abxyzpqrrrabxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-
-/^(abc){1,2}zz/
- abczz
- abcabczz
- *** Failers
- zz
- abcabcabczz
- >>abczz
-
-/^(b+?|a){1,2}?c/
- bc
- bbc
- bbbc
- bac
- bbac
- aac
- abbbbbbbbbbbc
- bbbbbbbbbbbac
- *** Failers
- aaac
- abbbbbbbbbbbac
-
-/^(b+|a){1,2}c/
- bc
- bbc
- bbbc
- bac
- bbac
- aac
- abbbbbbbbbbbc
- bbbbbbbbbbbac
- *** Failers
- aaac
- abbbbbbbbbbbac
-
-/^(b+|a){1,2}?bc/
- bbc
-
-/^(b*|ba){1,2}?bc/
- babc
- bbabc
- bababc
- *** Failers
- bababbc
- babababc
-
-/^(ba|b*){1,2}?bc/
- babc
- bbabc
- bababc
- *** Failers
- bababbc
- babababc
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
-
-/^[ab\]cde]/
- athing
- bthing
- ]thing
- cthing
- dthing
- ething
- *** Failers
- fthing
- [thing
- \\thing
-
-/^[]cde]/
- ]thing
- cthing
- dthing
- ething
- *** Failers
- athing
- fthing
-
-/^[^ab\]cde]/
- fthing
- [thing
- \\thing
- *** Failers
- athing
- bthing
- ]thing
- cthing
- dthing
- ething
-
-/^[^]cde]/
- athing
- fthing
- *** Failers
- ]thing
- cthing
- dthing
- ething
-
-/^\/
-
-
-/^ÿ/
- ÿ
-
-/^[0-9]+$/
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 100
- *** Failers
- abc
-
-/^.*nter/
- enter
- inter
- uponter
-
-/^xxx[0-9]+$/
- xxx0
- xxx1234
- *** Failers
- xxx
-
-/^.+[0-9][0-9][0-9]$/
- x123
- xx123
- 123456
- *** Failers
- 123
- x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- xx123
- 123456
- *** Failers
- 123
- x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
- !pqr=apquxz.ixr.zzz.ac.uk
- abc!=apquxz.ixr.zzz.ac.uk
- abc!pqr=apquxz:ixr.zzz.ac.uk
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-
-/:/
- Well, we need a colon: somewhere
- *** Fail if we don't
-
-/([\da-f:]+)$/i
- 0abc
- abc
- fed
- E
- ::
- 5f03:12C0::932e
- fed def
- Any old stuff
- *** Failers
- 0zzz
- gzzz
- fed\x20
- Any old rubbish
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- A.12.123.0
- *** Failers
- .1.2.3333
- 1.2.3
- 1234.2.3
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 1 IN SOA non-sp1 non-sp2 (
- *** Failers
- 1IN SOA non-sp1 non-sp2(
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- Z.
- 2.
- ab-c.pq-r.
- sxk.zzz.ac.uk.
- x-.y-.
- *** Failers
- -abc.peq.
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- *.b0-a
- *.c3-b.c
- *.c-a.b-c
- *** Failers
- *.0
- *.a-
- *.a-b.c-
- *.c-a.0-c
-
-/^(?=ab(de))(abd)(e)/
- abde
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
-
-/^(?=(ab(cd)))(ab)/
- abcd
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- A.B.C.D
- a.b.c.1.2.3.C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- \"abcd\" ;
- \"\" ; rhubarb
- *** Failers
- \"1234\" : things
-
-/^$/
- \
- *** Failers
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- *** Failers
- abc
- ab cde
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- *** Failers
- abc
- ab cde
-
-/^ a\ b[c ]d $/x
- a bcd
- a b d
- *** Failers
- abcd
- ab d
-
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
-
-/^a*\w/
- z
- az
- aaaz
- a
- aa
- aaaa
- a+
- aa+
-
-/^a*?\w/
- z
- az
- aaaz
- a
- aa
- aaaa
- a+
- aa+
-
-/^a+\w/
- az
- aaaz
- aa
- aaaa
- aa+
-
-/^a+?\w/
- az
- aaaz
- aa
- aaaa
- aa+
-
-/^\d{8}\w{2,}/
- 1234567890
- 12345678ab
- 12345678__
- *** Failers
- 1234567
-
-/^[aeiou\d]{4,5}$/
- uoie
- 1234
- 12345
- aaaaa
- *** Failers
- 123456
-
-/^[aeiou\d]{4,5}?/
- uoie
- 1234
- 12345
- aaaaa
- 123456
-
-/\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- def=defdefdef
- *** Failers
- abc=defdef
-
-/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- abcdefghijkkkkcda2
-
-/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- catatonic catatonic23
- caterpillar caterpillar23
-
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- From abcd Mon Sep 1 12:33:02 1997
- *** Failers
- From abcd Sep 01 12:33:02 1997
-
-/^12.34/s
- 12\n34
- 12\r34
-
-/\w+(?=\t)/
- the quick brown\t fox
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- barrel
- 2barrel
- A barrel
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- *** Failers
- abc123
-
-/^1234(?# test newlines
- inside)/
- 1234
-
-/^1234 #comment in extended re
- /x
- 1234
-
-/#rhubarb
- abcd/x
- abcd
-
-/^abcd#rhubarb/x
- abcd
-
-/^(a)\1{2,3}(.)/
- aaab
- aaaab
- aaaaab
- aaaaaab
-
-/(?!^)abc/
- the abc
- *** Failers
- abc
-
-/(?=^)abc/
- abc
- *** Failers
- the abc
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- <user\@dom.ain>
- user\@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- A missing angle <user\@some.where
- *** Failers
- The quick brown fox
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- <user\@dom.ain>
- user\@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- A missing angle <user\@some.where
- *** Failers
- The quick brown fox
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
-
-/^[\000-\037]/
- \0A
- \01B
- \037C
-
-/\0*/
- \0\0\0\0
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- An A\0\x0\0Z
- *** Failers
- A\0Z
- A\0\x0\0\x0Z
-
-/^(cow|)\1(bell)/
- cowcowbell
- bell
- *** Failers
- cowbell
-
-/^\s/
- \040abc
- \x0cabc
- \nabc
- \rabc
- \tabc
- *** Failers
- abc
-
-/^a b
-
- c/x
- abc
-
-/^(a|)\1*b/
- ab
- aaaab
- b
- *** Failers
- acb
-
-/^(a|)\1+b/
- aab
- aaaab
- b
- *** Failers
- ab
-
-/^(a|)\1?b/
- ab
- aab
- b
- *** Failers
- acb
-
-/^(a|)\1{2}b/
- aaab
- b
- *** Failers
- ab
- aab
- aaaab
-
-/^(a|)\1{2,3}b/
- aaab
- aaaab
- b
- *** Failers
- ab
- aab
- aaaaab
-
-/ab{1,3}bc/
- abbbbc
- abbbc
- abbc
- *** Failers
- abc
- abbbbbc
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
-
-/^[W-c]+$/
- WXY_^abc
- ***Failers
- wxy
-
-/^[W-c]+$/i
- WXY_^abc
- wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- wxy_^ABC
-
-/^abc$/m
- abc
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/^abc$/
- abc
- *** Failers
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/\Aabc\Z/m
- abc
- abc\n
- *** Failers
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/\A(.)*\Z/s
- abc\ndef
-
-/\A(.)*\Z/m
- *** Failers
- abc\ndef
-
-/(?:b)|(?::+)/
- b::c
- c::b
-
-/[-az]+/
- az-
- *** Failers
- b
-
-/[az-]+/
- za-
- *** Failers
- b
-
-/[a\-z]+/
- a-z
- *** Failers
- b
-
-/[a-z]+/
- abcdxyz
-
-/[\d-]+/
- 12-34
- *** Failers
- aaa
-
-/[\d-z]+/
- 12-34z
- *** Failers
- aaa
-
-/\x5c/
- \\
-
-/\x20Z/
- the Zoo
- *** Failers
- Zulu
-
-/(abc)\1/i
- abcabc
- ABCabc
- abcABC
-
-/(main(O)?)+/
- mainmain
- mainOmain
-
-/ab{3cd/
- ab{3cd
-
-/ab{3,cd/
- ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
-
-/^a.b/
- a\rb
- *** Failers
- a\nb
-
-/abc$/
- abc
- abc\n
- *** Failers
- abc\ndef
-
-/(abc)\123/
- abc\x53
-
-/(abc)\223/
- abc\x93
-
-/(abc)\323/
- abc\xd3
-
-/(abc)\500/
- abc\x40
- abc\100
-
-/(abc)\5000/
- abc\x400
- abc\x40\x30
- abc\1000
- abc\100\x30
- abc\100\060
- abc\100\60
-
-/abc\81/
- abc\081
- abc\0\x38\x31
-
-/abc\91/
- abc\091
- abc\0\x39\x31
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
-
-/ab\gdef/
- abgdef
-
-/a{0}bc/
- bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
-
-/abc[\10]de/
- abc\010de
-
-/abc[\1]de/
- abc\1de
-
-/(abc)[\1]de/
- abc\1de
-
-/a.b(?s)/
- a\nb
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- baNOTcccd
- baNOTccd
- bacccd
- *** Failers
- anything
- b\bc
- baccd
-
-/[^a]/
- Abc
-
-/[^a]/i
- Abc
-
-/[^a]+/
- AAAaAbc
-
-/[^a]+/i
- AAAaAbc
-
-/[^a]+/
- bbb\nccc
-
-/[^k]$/
- abc
- *** Failers
- abk
-
-/[^k]{2,3}$/
- abc
- kbc
- kabc
- *** Failers
- abk
- akb
- akk
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 123456789\@x.y.z
- *** Failers
- 12345678\@x.y.uk
- 1234567\@a.b.c.d
-
-/(a)\1{8,}/
- aaaaaaaaa
- aaaaaaaaaa
- *** Failers
- aaaaaaa
-
-/[^a]/
- aaaabcd
- aaAabcd
-
-/[^a]/i
- aaaabcd
- aaAabcd
-
-/[^az]/
- aaaabcd
- aaAabcd
-
-/[^az]/i
- aaaabcd
- aaAabcd
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 1.875000282
- 1.235
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 1.875000282
- *** Failers
- 1.235
-
-/a(?)b/
- ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
-
-/foo(.*)bar/
- The food is under the bar in the barn.
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
-
-/^\D*(?!123)/
- ABC123
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- *** Failers
- ABC123
-
-/^[W-]46]/
- W46]789
- -46]789
- *** Failers
- Wall
- Zebra
- 42
- [abcd]
- ]abcd[
-
-/^[W-\]46]/
- W46]789
- Wall
- Zebra
- Xylophone
- 42
- [abcd]
- ]abcd[
- \\backslash
- *** Failers
- -46]789
- well
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/^(a){0,0}/
- bcd
- abc
- aab
-
-/^(a){0,1}/
- bcd
- abc
- aab
-
-/^(a){0,2}/
- bcd
- abc
- aab
-
-/^(a){0,3}/
- bcd
- abc
- aab
- aaa
-
-/^(a){0,}/
- bcd
- abc
- aab
- aaa
- aaaaaaaa
-
-/^(a){1,1}/
- bcd
- abc
- aab
-
-/^(a){1,2}/
- bcd
- abc
- aab
-
-/^(a){1,3}/
- bcd
- abc
- aab
- aaa
-
-/^(a){1,}/
- bcd
- abc
- aab
- aaa
- aaaaaaaa
-
-/.*\.gif/
- borfle\nbib.gif\nno
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
-
-/.*\.gif/m
- borfle\nbib.gif\nno
-
-/.*\.gif/s
- borfle\nbib.gif\nno
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
-
-/.*$/
- borfle\nbib.gif\nno
-
-/.*$/m
- borfle\nbib.gif\nno
-
-/.*$/s
- borfle\nbib.gif\nno
-
-/.*$/ms
- borfle\nbib.gif\nno
-
-/.*$/
- borfle\nbib.gif\nno\n
-
-/.*$/m
- borfle\nbib.gif\nno\n
-
-/.*$/s
- borfle\nbib.gif\nno\n
-
-/.*$/ms
- borfle\nbib.gif\nno\n
-
-/(.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- BarFoo
- abcde\nBar
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- BarFoo
- abcde\nBar
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/^.*B/
- **** Failers
- abc\nB
-
-/(?s)^.*B/
- abc\nB
-
-/(?m)^.*B/
- abc\nB
-
-/(?ms)^.*B/
- abc\nB
-
-/(?ms)^B/
- abc\nB
-
-/(?s)B$/
- B\n
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- *** Failers
- z
-
-/abcde{0,0}/
- abcd
- *** Failers
- abce
-
-/ab[cd]{0,0}e/
- abe
- *** Failers
- abcde
-
-/ab(c){0,0}d/
- abd
- *** Failers
- abcd
-
-/a(b*)/
- a
- ab
- abbbb
- *** Failers
- bbbbb
-
-/ab\d{0}e/
- abe
- *** Failers
- ab1e
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- \"the \\\"quick\\\" brown fox\"
-
-/.*?/g+
- abc
-
-/\b/g+
- abc
-
-/\b/+g
- abc
-
-//g
- abc
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
-
-/a[^a]b/
- acb
- a\nb
-
-/a.b/
- acb
- *** Failers
- a\nb
-
-/a[^a]b/s
- acb
- a\nb
-
-/a.b/s
- acb
- a\nb
-
-/ End of testinput1 /
diff --git a/ext/pcre/pcrelib/testdata/testinput2 b/ext/pcre/pcrelib/testdata/testinput2
deleted file mode 100644
index ad116ef75a..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput2
+++ /dev/null
@@ -1,712 +0,0 @@
-/(a)b|/
-
-/abc/
- abc
- defabc
- \Aabc
- *** Failers
- \Adefabc
- ABC
-
-/^abc/
- abc
- \Aabc
- *** Failers
- defabc
- \Adefabc
-
-/a+bc/
-
-/a*bc/
-
-/a{3}bc/
-
-/(abc|a+z)/
-
-/^abc$/
- abc
- *** Failers
- def\nabc
-
-/ab\gdef/X
-
-/(?X)ab\gdef/X
-
-/x{5,4}/
-
-/z{65536}/
-
-/[abcd/
-
-/[\B]/
-
-/[z-a]/
-
-/^*/
-
-/(abc/
-
-/(?# abc/
-
-/(?z)abc/
-
-/.*b/
-
-/.*?b/
-
-/cat|dog|elephant/
- this sentence eventually mentions a cat
- this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/S
- this sentence eventually mentions a cat
- this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/iS
- this sentence eventually mentions a CAT cat
- this sentences rambles on and on for a while to elephant ElePhant
-
-/a|[bcd]/S
-
-/(a|[^\dZ])/S
-
-/(a|b)*[\s]/S
-
-/(ab\2)/
-
-/{4,5}abc/
-
-/(a)(b)(c)\2/
- abcb
- \O0abcb
- \O3abcb
- \O6abcb
- \O9abcb
- \O12abcb
-
-/(a)bc|(a)(b)\2/
- abc
- \O0abc
- \O3abc
- \O6abc
- aba
- \O0aba
- \O3aba
- \O6aba
- \O9aba
- \O12aba
-
-/abc$/E
- abc
- *** Failers
- abc\n
- abc\ndef
-
-/(a)(b)(c)(d)(e)\6/
-
-/the quick brown fox/
- the quick brown fox
- this is a line with the quick brown fox
-
-/the quick brown fox/A
- the quick brown fox
- *** Failers
- this is a line with the quick brown fox
-
-/ab(?z)cd/
-
-/^abc|def/
- abcdef
- abcdef\B
-
-/.*((abc)$|(def))/
- defabc
- \Zdefabc
-
-/abc/P
- abc
- *** Failers
-
-/^abc|def/P
- abcdef
- abcdef\B
-
-/.*((abc)$|(def))/P
- defabc
- \Zdefabc
-
-/the quick brown fox/P
- the quick brown fox
- *** Failers
- The Quick Brown Fox
-
-/the quick brown fox/Pi
- the quick brown fox
- The Quick Brown Fox
-
-/abc.def/P
- *** Failers
- abc\ndef
-
-/abc$/P
- abc
- abc\n
-
-/(abc)\2/P
-
-/(abc\1)/P
- abc
-
-/)/
-
-/a[]b/
-
-/[^aeiou ]{3,}/
- co-processors, and for
-
-/<.*>/
- abc<def>ghi<klm>nop
-
-/<.*?>/
- abc<def>ghi<klm>nop
-
-/<.*>/U
- abc<def>ghi<klm>nop
-
-/<.*>(?U)/
- abc<def>ghi<klm>nop
-
-/<.*?>/U
- abc<def>ghi<klm>nop
-
-/={3,}/U
- abc========def
-
-/(?U)={3,}?/
- abc========def
-
-/(?<!bar|cattle)foo/
- foo
- catfoo
- *** Failers
- the barfoo
- and cattlefoo
-
-/(?<=a+)b/
-
-/(?<=aaa|b{0,3})b/
-
-/(?<!(foo)a\1)bar/
-
-/(?i)abc/
-
-/(a|(?m)a)/
-
-/(?i)^1234/
-
-/(^b|(?i)^d)/
-
-/(?s).*/
-
-/[abcd]/S
-
-/(?i)[abcd]/S
-
-/(?m)[xy]|(b|c)/S
-
-/(^a|^b)/m
-
-/(?i)(^a|^b)/m
-
-/(a)(?(1)a|b|c)/
-
-/(?(?=a)a|b|c)/
-
-/(?(1a)/
-
-/(?(?i))/
-
-/(?(abc))/
-
-/(?(?<ab))/
-
-/((?s)blah)\s+\1/
-
-/((?i)blah)\s+\1/
-
-/((?i)b)/DS
-
-/(a*b|(?i:c*(?-i)d))/S
-
-/a$/
- a
- a\n
- *** Failers
- \Za
- \Za\n
-
-/a$/m
- a
- a\n
- \Za\n
- *** Failers
- \Za
-
-/\Aabc/m
-
-/^abc/m
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
- aaaaabbbbbcccccdef
-
-/(?<=foo)[ab]/S
-
-/(?<!foo)(alpha|omega)/S
-
-/(?!alphabet)[ab]/S
-
-/(?<=foo\n)^bar/m
-
-/(?>^abc)/m
- abc
- def\nabc
- *** Failers
- defabc
-
-/(?<=ab(c+)d)ef/
-
-/(?<=ab(?<=c+)d)ef/
-
-/(?<=ab(c|de)f)g/
-
-/The next three are in testinput2 because they have variable length branches/
-
-/(?<=bullock|donkey)-cart/
- the bullock-cart
- a donkey-cart race
- *** Failers
- cart
- horse-and-cart
-
-/(?<=ab(?i)x|y|z)/
-
-/(?>.*)(?<=(abcd)|(xyz))/
- alphabetabcd
- endingxyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
- abxyZZ
- abXyZZ
- ZZZ
- zZZ
- bZZ
- BZZ
- *** Failers
- ZZ
- abXYZZ
- zzz
- bzz
-
-/(?<!(foo)a)bar/
- bar
- foobbar
- *** Failers
- fooabar
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-
-/^(a)?(?(1)a|b)+$/
- *** Failers
- a
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-
-/^(a\1?){4}$/
- aaaaaa
-
-/These are syntax tests from Perl 5.005/
-
-/a[b-a]/
-
-/a[]b/
-
-/a[/
-
-/*a/
-
-/(*)b/
-
-/abc)/
-
-/(abc/
-
-/a**/
-
-/)(/
-
-/\1/
-
-/\2/
-
-/(a)|\2/
-
-/a[b-a]/i
-
-/a[]b/i
-
-/a[/i
-
-/*a/i
-
-/(*)b/i
-
-/abc)/i
-
-/(abc/i
-
-/a**/i
-
-/)(/i
-
-/:(?:/
-
-/(?<%)b/
-
-/a(?{)b/
-
-/a(?{{})b/
-
-/a(?{}})b/
-
-/a(?{"{"})b/
-
-/a(?{"{"}})b/
-
-/(?(1?)a|b)/
-
-/(?(1)a|b|c)/
-
-/[a[:xyz:/
-
-/(?<=x+)y/
-
-/a{37,17}/
-
-/abc/\
-
-/abc/\P
-
-/abc/\i
-
-/(a)bc(d)/
- abcd
- abcd\C2
- abcd\C5
-
-/(.{20})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1
- abcdefghijklmnopqrstuvwxyz\G1
-
-/(.{15})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1\G1
-
-/(.{16})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1\G1\L
-
-/^(a|(bc))de(f)/
- adef\G1\G2\G3\G4\L
- bcdef\G1\G2\G3\G4\L
- adefghijk\C0
-
-/^abc\00def/
- abc\00def\L\C0
-
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)?)?)?)?)?)?)?)?)?otherword/M
-
-/.*X/D
-
-/.*X/Ds
-
-/(.*X|^B)/D
-
-/(.*X|^B)/Ds
-
-/(?s)(.*X|^B)/D
-
-/(?s:.*X|^B)/D
-
-/\Biss\B/+
- Mississippi
-
-/\Biss\B/+P
- Mississippi
-
-/iss/G+
- Mississippi
-
-/\Biss\B/G+
- Mississippi
-
-/\Biss\B/g+
- Mississippi
- *** Failers
- Mississippi\A
-
-/(?<=[Ms])iss/g+
- Mississippi
-
-/(?<=[Ms])iss/G+
- Mississippi
-
-/^iss/g+
- ississippi
-
-/.*iss/g+
- abciss\nxyzisspqr
-
-/.i./+g
- Mississippi
- Mississippi\A
- Missouri river
- Missouri river\A
-
-/^.is/+g
- Mississippi
-
-/^ab\n/g+
- ab\nab\ncd
-
-/^ab\n/mg+
- ab\nab\ncd
-
-/abc/
-
-/abc|bac/
-
-/(abc|bac)/
-
-/(abc|(c|dc))/
-
-/(abc|(d|de)c)/
-
-/a*/
-
-/a+/
-
-/(baa|a+)/
-
-/a{0,3}/
-
-/baa{3,}/
-
-/"([^\\"]+|\\.)*"/
-
-/(abc|ab[cd])/
-
-/(a|.)/
-
-/a|ba|\w/
-
-/abc(?=pqr)/
-
-/...(?<=abc)/
-
-/abc(?!pqr)/
-
-/ab./
-
-/ab[xyz]/
-
-/abc*/
-
-/ab.c*/
-
-/a.c*/
-
-/.c*/
-
-/ac*/
-
-/(a.c*|b.c*)/
-
-/a.c*|aba/
-
-/.+a/
-
-/(?=abcda)a.*/
-
-/(?=a)a.*/
-
-/a(b)*/
-
-/a\d*/
-
-/ab\d*/
-
-/a(\d)*/
-
-/abcde{0,0}/
-
-/ab\d+/
-
-/a(?(1)b)/
-
-/a(?(1)bag|big)/
-
-/a(?(1)bag|big)*/
-
-/a(?(1)bag|big)+/
-
-/a(?(1)b..|b..)/
-
-/ab\d{0}e/
-
-/a?b?/
- a
- b
- ab
- \
- *** Failers
- \N
-
-/|-/
- abcd
- -abc
- \Nab-c
- *** Failers
- \Nabc
-
-/a*(b+)(z)(z)/P
- aaaabbbbzzzz
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- aaaabbbbzzzz\O2
- aaaabbbbzzzz\O3
- aaaabbbbzzzz\O4
- aaaabbbbzzzz\O5
-
-/^.?abcd/S
-
-/\( # ( at start
- (?: # Non-capturing bracket
- (?>[^()]+) # Either a sequence of non-brackets (no backtracking)
- | # Or
- (?R) # Recurse - i.e. nested bracketed string
- )* # Zero or more contents
- \) # Closing )
- /x
- (abcd)
- (abcd)xyz
- xyz(abcd)
- (ab(xy)cd)pqr
- (ab(xycd)pqr
- () abc ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- *** Failers
- abcd
- abcd)
- (abcd
-
-/\( ( (?>[^()]+) | (?R) )* \) /xg
- (ab(xy)cd)pqr
- 1(abcd)(x(y)z)pqr
-
-/\( (?: (?>[^()]+) | (?R) ) \) /x
- (abcd)
- (ab(xy)cd)
- (a(b(c)d)e)
- ((ab))
- *** Failers
- ()
-
-/\( (?: (?>[^()]+) | (?R) )? \) /x
- ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
-
-/\( ( (?>[^()]+) | (?R) )* \) /x
- (ab(xy)cd)
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
- (123ab(xy)cd)
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
- (123ab(xy)cd)
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
- (ab(xy)cd)
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
- (abcd(xyz<p>qrs)123)
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
- (ab(cd)ef)
- (ab(cd(ef)gh)ij)
-
-/^[[:alnum:]]/D
-
-/^[[:alpha:]]/D
-
-/^[[:ascii:]]/D
-
-/^[[:cntrl:]]/D
-
-/^[[:digit:]]/D
-
-/^[[:graph:]]/D
-
-/^[[:lower:]]/D
-
-/^[[:print:]]/D
-
-/^[[:punct:]]/D
-
-/^[[:space:]]/D
-
-/^[[:upper:]]/D
-
-/^[[:xdigit:]]/D
-
-/^[[:word:]]/D
-
-/^[[:^cntrl:]]/D
-
-/^[12[:^digit:]]/D
-
-/[01[:alpha:]%]/D
-
-/[[.ch.]]/
-
-/[[=ch=]]/
-
-/[[:rhubarb:]]/
-
-/[[:upper:]]/i
- A
- a
-
-/[[:lower:]]/i
- A
- a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
- ab
- aB
- *** Failers
- Ab
- AB
-
-/[\200-\410]/
-
-/^(?(0)f|b)oo/
-
-/ End of testinput2 /
diff --git a/ext/pcre/pcrelib/testdata/testinput3 b/ext/pcre/pcrelib/testdata/testinput3
deleted file mode 100644
index d3bd74fdd3..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput3
+++ /dev/null
@@ -1,1724 +0,0 @@
-/(?<!bar)foo/
- foo
- catfood
- arfootle
- rfoosh
- *** Failers
- barfoo
- towbarfoo
-
-/\w{3}(?<!bar)foo/
- catfood
- *** Failers
- foo
- barfoo
- towbarfoo
-
-/(?<=(foo)a)bar/
- fooabar
- *** Failers
- bar
- foobbar
-
-/\Aabc\z/m
- abc
- *** Failers
- abc\n
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 1.875000282
- *** Failers
- 1.235
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- *** Failers
- this is not a line with only words and spaces!
-
-/(\d+)(\w)/
- 12345a
- 12345+
-
-/((?>\d+))(\w)/
- 12345a
- *** Failers
- 12345+
-
-/(?>a+)b/
- aaab
-
-/((?>a+)b)/
- aaab
-
-/(?>(a+))b/
- aaab
-
-/(?>b)+/
- aaabbbccc
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- (abc(def)xyz)
- *** Failers
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/a(?-i)b/i
- ab
- *** Failers
- Ab
- aB
- AB
-
-/(a (?x)b c)d e/
- a bcd e
- *** Failers
- a b cd e
- abcd e
- a bcde
-
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- *** Failers
- abcdef
-
-/(a(?i)b)c/
- abc
- aBc
- *** Failers
- abC
- aBC
- Abc
- ABc
- ABC
- AbC
-
-/a(?i:b)c/
- abc
- aBc
- *** Failers
- ABC
- abC
- aBC
-
-/a(?i:b)*c/
- aBc
- aBBc
- *** Failers
- aBC
- aBBC
-
-/a(?=b(?i)c)\w\wd/
- abcd
- abCd
- *** Failers
- aBCd
- abcD
-
-/(?s-i:more.*than).*million/i
- more than million
- more than MILLION
- more \n than Million
- *** Failers
- MORE THAN MILLION
- more \n than \n million
-
-/(?:(?s-i)more.*than).*million/i
- more than million
- more than MILLION
- more \n than Million
- *** Failers
- MORE THAN MILLION
- more \n than \n million
-
-/(?>a(?i)b+)+c/
- abc
- aBbc
- aBBc
- *** Failers
- Abc
- abAb
- abbC
-
-/(?=a(?i)b)\w\wc/
- abc
- aBc
- *** Failers
- Ab
- abC
- aBC
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- aBxxc
- *** Failers
- Abxxc
- ABxxc
- abxxC
-
-/(?:(a)|b)(?(1)A|B)/
- aA
- bB
- *** Failers
- aB
- bA
-
-/^(a)?(?(1)a|b)+$/
- aa
- b
- bb
- *** Failers
- ab
-
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 12
- *** Failers
- 123
- xyz
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 12
- *** Failers
- 123
- xyz
-
-/(?(?<=foo)bar|cat)/
- foobar
- cat
- fcat
- focat
- *** Failers
- foocat
-
-/(?(?<!foo)cat|bar)/
- foobar
- cat
- fcat
- focat
- *** Failers
- foocat
-
-/( \( )? [^()]+ (?(1) \) |) /x
- abcd
- (abcd)
- the quick (abcd) fox
- (abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
- abcd
- (abcd)
- the quick (abcd) fox
- (abcd
-
-/^(?(2)a|(1)(2))+$/
- 12
- 12a
- 12aa
- *** Failers
- 1234
-
-/((?i)blah)\s+\1/
- blah blah
- BLAH BLAH
- Blah Blah
- blaH blaH
- *** Failers
- blah BLAH
- Blah blah
- blaH blah
-
-/((?i)blah)\s+(?i:\1)/
- blah blah
- BLAH BLAH
- Blah Blah
- blaH blaH
- blah BLAH
- Blah blah
- blaH blah
-
-/(?>a*)*/
- a
- aa
- aaaa
-
-/(abc|)+/
- abc
- abcabc
- abcabcabc
- xyz
-
-/([a]*)*/
- a
- aaaaa
-
-/([ab]*)*/
- a
- b
- ababab
- aaaabcde
- bbbb
-
-/([^a]*)*/
- b
- bbbb
- aaa
-
-/([^ab]*)*/
- cccc
- abab
-
-/([a]*?)*/
- a
- aaaa
-
-/([ab]*?)*/
- a
- b
- abab
- baba
-
-/([^a]*?)*/
- b
- bbbb
- aaa
-
-/([^ab]*?)*/
- c
- cccc
- baba
-
-/(?>a*)*/
- a
- aaabcde
-
-/((?>a*))*/
- aaaaa
- aabbaa
-
-/((?>a*?))*/
- aaaaa
- aabbaa
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 12-09-98
- *** Failers
- sep-12-98
-
-/(?<=(foo))bar\1/
- foobarfoo
- foobarfootling
- *** Failers
- foobar
- barfoo
-
-/(?i:saturday|sunday)/
- saturday
- sunday
- Saturday
- Sunday
- SATURDAY
- SUNDAY
- SunDay
-
-/(a(?i)bc|BB)x/
- abcx
- aBCx
- bbx
- BBx
- *** Failers
- abcX
- aBCX
- bbX
- BBX
-
-/^([ab](?i)[cd]|[ef])/
- ac
- aC
- bD
- elephant
- Europe
- frog
- France
- *** Failers
- Africa
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- aBd
- xy
- xY
- zebra
- Zambesi
- *** Failers
- aCD
- XY
-
-/(?<=foo\n)^bar/m
- foo\nbar
- *** Failers
- bar
- baz\nbar
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- barbarbaz
- koobarbaz
- *** Failers
- baz
- foobarbaz
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-/where it does set $1 to aa when matching aaaaaa./
-
-/^(a\1?){4}$/
- a
- aa
- aaa
- aaaa
- aaaaa
- aaaaaaa
- aaaaaaaa
- aaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaaa
- aaaaaaaaaaaa
- aaaaaaaaaaaaa
- aaaaaaaaaaaaaa
- aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
- aa
- aaa
- aaaa
- aaaaa
- aaaaaa
- aaaaaaa
- aaaaaaaa
- aaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaaa
- aaaaaaaaaaaa
- aaaaaaaaaaaaa
- aaaaaaaaaaaaaa
- aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-
-/abc/
- abc
- xabcy
- ababc
- *** Failers
- xbc
- axc
- abx
-
-/ab*c/
- abc
-
-/ab*bc/
- abc
- abbc
- abbbbc
-
-/.{1}/
- abbbbc
-
-/.{3,4}/
- abbbbc
-
-/ab{0,}bc/
- abbbbc
-
-/ab+bc/
- abbc
- *** Failers
- abc
- abq
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
-
-/ab{1,}bc/
- abbbbc
-
-/ab{1,3}bc/
- abbbbc
-
-/ab{3,4}bc/
- abbbbc
-
-/ab{4,5}bc/
- *** Failers
- abq
- abbbbc
-
-/ab?bc/
- abbc
- abc
-
-/ab{0,1}bc/
- abc
-
-/ab?bc/
-
-/ab?c/
- abc
-
-/ab{0,1}c/
- abc
-
-/^abc$/
- abc
- *** Failers
- abbbbc
- abcc
-
-/^abc/
- abcc
-
-/^abc$/
-
-/abc$/
- aabc
- *** Failers
- aabc
- aabcd
-
-/^/
- abc
-
-/$/
- abc
-
-/a.c/
- abc
- axc
-
-/a.*c/
- axyzc
-
-/a[bc]d/
- abd
- *** Failers
- axyzd
- abc
-
-/a[b-d]e/
- ace
-
-/a[b-d]/
- aac
-
-/a[-b]/
- a-
-
-/a[b-]/
- a-
-
-/a]/
- a]
-
-/a[]]b/
- a]b
-
-/a[^bc]d/
- aed
- *** Failers
- abd
- abd
-
-/a[^-b]c/
- adc
-
-/a[^]b]c/
- adc
- *** Failers
- a-c
- a]c
-
-/\ba\b/
- a-
- -a
- -a-
-
-/\by\b/
- *** Failers
- xy
- yz
- xyz
-
-/\Ba\B/
- *** Failers
- a-
- -a
- -a-
-
-/\By\b/
- xy
-
-/\by\B/
- yz
-
-/\By\B/
- xyz
-
-/\w/
- a
-
-/\W/
- -
- *** Failers
- -
- a
-
-/a\sb/
- a b
-
-/a\Sb/
- a-b
- *** Failers
- a-b
- a b
-
-/\d/
- 1
-
-/\D/
- -
- *** Failers
- -
- 1
-
-/[\w]/
- a
-
-/[\W]/
- -
- *** Failers
- -
- a
-
-/a[\s]b/
- a b
-
-/a[\S]b/
- a-b
- *** Failers
- a-b
- a b
-
-/[\d]/
- 1
-
-/[\D]/
- -
- *** Failers
- -
- 1
-
-/ab|cd/
- abc
- abcd
-
-/()ef/
- def
-
-/$b/
-
-/a\(b/
- a(b
-
-/a\(*b/
- ab
- a((b
-
-/a\\b/
- a\b
-
-/((a))/
- abc
-
-/(a)b(c)/
- abc
-
-/a+b+c/
- aabbabc
-
-/a{1,}b{1,}c/
- aabbabc
-
-/a.+?c/
- abcabc
-
-/(a+|b)*/
- ab
-
-/(a+|b){0,}/
- ab
-
-/(a+|b)+/
- ab
-
-/(a+|b){1,}/
- ab
-
-/(a+|b)?/
- ab
-
-/(a+|b){0,1}/
- ab
-
-/[^ab]*/
- cde
-
-/abc/
- *** Failers
- b
-
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
-
-/([abc])*bcd/
- abcd
-
-/a|b|c|d|e/
- e
-
-/(a|b|c|d|e)f/
- ef
-
-/abcd*efg/
- abcdefg
-
-/ab*/
- xabyabbbz
- xayabbbz
-
-/(ab|cd)e/
- abcde
-
-/[abhgefdc]ij/
- hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
-
-/(a|b)c*d/
- abcd
-
-/(ab|ab*)bc/
- abc
-
-/a([bc]*)c*/
- abc
-
-/a([bc]*)(c*d)/
- abcd
-
-/a([bc]+)(c*d)/
- abcd
-
-/a([bc]*)(c+d)/
- abcd
-
-/a[bcd]*dcdcde/
- adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
- abcde
- adcdcde
-
-/(ab|a)b*c/
- abc
-
-/((a)(b)c)(d)/
- abcd
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
-
-/^a(bc+|b[eh])g|.h$/
- abh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- ij
- reffgz
- *** Failers
- effg
- bcdd
-
-/((((((((((a))))))))))/
- a
-
-/((((((((((a))))))))))\10/
- aa
-
-/(((((((((a)))))))))/
- a
-
-/multiple words of text/
- *** Failers
- aa
- uh-uh
-
-/multiple words/
- multiple words, yeah
-
-/(.*)c(.*)/
- abcde
-
-/\((.*), (.*)\)/
- (a, b)
-
-/[k]/
-
-/abcd/
- abcd
-
-/a(bc)d/
- abcd
-
-/a[-]?c/
- ac
-
-/(abc)\1/
- abcabc
-
-/([a-c]*)\1/
- abcabc
-
-/(a)|\1/
- a
- *** Failers
- ab
- x
-
-/(([a-c])b*?\2)*/
- ababbbcbc
-
-/(([a-c])b*?\2){3}/
- ababbbcbc
-
-/((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
-
-/((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
-
-/abc/i
- ABC
- XABCY
- ABABC
- *** Failers
- aaxabxbaxbbx
- XBC
- AXC
- ABX
-
-/ab*c/i
- ABC
-
-/ab*bc/i
- ABC
- ABBC
-
-/ab*?bc/i
- ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
-
-/ab+?bc/i
- ABBC
-
-/ab+bc/i
- *** Failers
- ABC
- ABQ
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
- ABQ
- ABBBBC
-
-/ab??bc/i
- ABBC
- ABC
-
-/ab{0,1}?bc/i
- ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
-
-/ab{0,1}?c/i
- ABC
-
-/^abc$/i
- ABC
- *** Failers
- ABBBBC
- ABCC
-
-/^abc/i
- ABCC
-
-/^abc$/i
-
-/abc$/i
- AABC
-
-/^/i
- ABC
-
-/$/i
- ABC
-
-/a.c/i
- ABC
- AXC
-
-/a.*?c/i
- AXYZC
-
-/a.*c/i
- *** Failers
- AABC
- AXYZD
-
-/a[bc]d/i
- ABD
-
-/a[b-d]e/i
- ACE
- *** Failers
- ABC
- ABD
-
-/a[b-d]/i
- AAC
-
-/a[-b]/i
- A-
-
-/a[b-]/i
- A-
-
-/a]/i
- A]
-
-/a[]]b/i
- A]B
-
-/a[^bc]d/i
- AED
-
-/a[^-b]c/i
- ADC
- *** Failers
- ABD
- A-C
-
-/a[^]b]c/i
- ADC
-
-/ab|cd/i
- ABC
- ABCD
-
-/()ef/i
- DEF
-
-/$b/i
- *** Failers
- A]C
- B
-
-/a\(b/i
- A(B
-
-/a\(*b/i
- AB
- A((B
-
-/a\\b/i
- A\B
-
-/((a))/i
- ABC
-
-/(a)b(c)/i
- ABC
-
-/a+b+c/i
- AABBABC
-
-/a{1,}b{1,}c/i
- AABBABC
-
-/a.+?c/i
- ABCABC
-
-/a.*?c/i
- ABCABC
-
-/a.{0,5}?c/i
- ABCABC
-
-/(a+|b)*/i
- AB
-
-/(a+|b){0,}/i
- AB
-
-/(a+|b)+/i
- AB
-
-/(a+|b){1,}/i
- AB
-
-/(a+|b)?/i
- AB
-
-/(a+|b){0,1}/i
- AB
-
-/(a+|b){0,1}?/i
- AB
-
-/[^ab]*/i
- CDE
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
-
-/([abc])*bcd/i
- ABCD
-
-/a|b|c|d|e/i
- E
-
-/(a|b|c|d|e)f/i
- EF
-
-/abcd*efg/i
- ABCDEFG
-
-/ab*/i
- XABYABBBZ
- XAYABBBZ
-
-/(ab|cd)e/i
- ABCDE
-
-/[abhgefdc]ij/i
- HIJ
-
-/^(ab|cd)e/i
- ABCDE
-
-/(abc|)ef/i
- ABCDEF
-
-/(a|b)c*d/i
- ABCD
-
-/(ab|ab*)bc/i
- ABC
-
-/a([bc]*)c*/i
- ABC
-
-/a([bc]*)(c*d)/i
- ABCD
-
-/a([bc]+)(c*d)/i
- ABCD
-
-/a([bc]*)(c+d)/i
- ABCD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
-
-/((a)(b)c)(d)/i
- ABCD
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- IJ
- REFFGZ
- *** Failers
- ADCDCDE
- EFFG
- BCDD
-
-/((((((((((a))))))))))/i
- A
-
-/((((((((((a))))))))))\10/i
- AA
-
-/(((((((((a)))))))))/i
- A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
-
-/multiple words of text/i
- *** Failers
- AA
- UH-UH
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
-
-/(.*)c(.*)/i
- ABCDE
-
-/\((.*), (.*)\)/i
- (A, B)
-
-/[k]/i
-
-/abcd/i
- ABCD
-
-/a(bc)d/i
- ABCD
-
-/a[-]?c/i
- AC
-
-/(abc)\1/i
- ABCABC
-
-/([a-c]*)\1/i
- ABCABC
-
-/a(?!b)./
- abad
-
-/a(?=d)./
- abad
-
-/a(?=c|d)./
- abad
-
-/a(?:b|c|d)(.)/
- ace
-
-/a(?:b|c|d)*(.)/
- ace
-
-/a(?:b|c|d)+?(.)/
- ace
- acdbcdbe
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
-
-/((foo)|(bar))*/
- foobar
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
-
-/^(.+)?B/
- AB
-
-/^([^a-z])|(\^)$/
- .
-
-/^[<>]&/
- <&OUT
-
-/^(a\1?){4}$/
- aaaaaaaaaa
- *** Failers
- AB
- aaaaaaaaa
- aaaaaaaaaaa
-
-/^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- *** Failers
- aaaaaaaaa
- aaaaaaaaaaa
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
-
-/(?<=a)b/
- ab
- *** Failers
- cb
- b
-
-/(?<!c)b/
- ab
- b
- b
-
-/(?:..)*a/
- aba
-
-/(?:..)*?a/
- aba
-
-/^(?:b|a(?=(.)))*\1/
- abc
-
-/^(){3,5}/
- abc
-
-/^(a+)*ax/
- aax
-
-/^((a|b)+)*ax/
- aax
-
-/^((a|bc)+)*ax/
- aax
-
-/(a|x)*ab/
- cab
-
-/(a)*ab/
- cab
-
-/(?:(?i)a)b/
- ab
-
-/((?i)a)b/
- ab
-
-/(?:(?i)a)b/
- Ab
-
-/((?i)a)b/
- Ab
-
-/(?:(?i)a)b/
- *** Failers
- cb
- aB
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
-
-/((?i:a))b/
- ab
-
-/(?i:a)b/
- Ab
-
-/((?i:a))b/
- Ab
-
-/(?i:a)b/
- *** Failers
- aB
- aB
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
-
-/((?-i)a)b/i
- ab
-
-/(?:(?-i)a)b/i
- aB
-
-/((?-i)a)b/i
- aB
-
-/(?:(?-i)a)b/i
- *** Failers
- aB
- Ab
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
-
-/((?-i)a)b/i
- aB
-
-/(?:(?-i)a)b/i
- *** Failers
- Ab
- AB
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
-
-/((?-i:a))b/i
- ab
-
-/(?-i:a)b/i
- aB
-
-/((?-i:a))b/i
- aB
-
-/(?-i:a)b/i
- *** Failers
- AB
- Ab
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
-
-/((?-i:a))b/i
- aB
-
-/(?-i:a)b/i
- *** Failers
- Ab
- AB
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
- AB
- a\nB
-
-/((?s-i:a.))b/i
- a\nB
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
- Ab4ab
- ab4Ab
-
-/foo\w*\d{4}baz/
- foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
-
-/^a(?#xxx){3}c/
- aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
-
-/(?<![cd])b/
- *** Failers
- B\nB
- dbcb
-
-/(?<![cd])[ab]/
- dbaacb
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
-
-/(?<!cd)[ab]/
- cdaccb
-
-/^(?:a?b?)*$/
- *** Failers
- dbcb
- a--
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
-
-/((?m)^b$)/
- a\nb\nc\n
-
-/(?m)^b/
- a\nb\n
-
-/(?m)^(b)/
- a\nb\n
-
-/((?m)^b)/
- a\nb\n
-
-/\n((?m)^b)/
- a\nb\n
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- a\nb\nc\n
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- a\nb\nc\n
-
-/^b/
-
-/()^b/
- *** Failers
- a\nb\nc\n
- a\nb\nc\n
-
-/((?m)^b)/
- a\nb\nc\n
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
- a
-
-/(x)?(?(1)a|b)/
- *** Failers
- a
- a
-
-/(x)?(?(1)b|a)/
- a
-
-/()?(?(1)b|a)/
- a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
- a
-
-/^(\()?blah(?(1)(\)))$/
- (blah)
- blah
- *** Failers
- a
- blah)
- (blah
-
-/^(\(+)?blah(?(1)(\)))$/
- (blah)
- blah
- *** Failers
- blah)
- (blah
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
-
-/(?(?=a)b|a)/
- *** Failers
- a
- a
-
-/(?(?=a)a|b)/
- a
-
-/(?=(a+?))(\1ab)/
- aaab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
- one:
-
-/$(?<=^(a))/
- a
-
-/(?=(a+?))(\1ab)/
- aaab
-
-/^(?=(a+?))\1ab/
- *** Failers
- aaab
- aaab
-
-/([\w:]+::)?(\w+)$/
- abcd
- xy:z:::abcd
-
-/^[^bcd]*(c+)/
- aexycd
-
-/(a*)b+/
- caab
-
-/([\w:]+::)?(\w+)$/
- abcd
- xy:z:::abcd
- *** Failers
- abcd:
- abcd:
-
-/^[^bcd]*(c+)/
- aexycd
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
-
-/([[:]+)/
- a:[b]:
-
-/([[=]+)/
- a=[b]=
-
-/([[.]+)/
- a.[b].
-
-/((?>a+)b)/
- aaab
-
-/(?>(a+))b/
- aaab
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/a\Z/
- *** Failers
- aaab
- a\nb\n
-
-/b\Z/
- a\nb\n
-
-/b\z/
-
-/b\Z/
- a\nb
-
-/b\z/
- a\nb
- *** Failers
-
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- abc
- a-b
- 0-9
- a.b
- 5.6.7
- the.quick.brown.fox
- a100.b200.300c
- 12-ab.1245
- ***Failers
- \
- .a
- -a
- a-
- a.
- a_b
- a.-
- a..
- ab..bc
- the.quick.brown.fox-
- the.quick.brown.fox.
- the.quick.brown.fox_
- the.quick.brown.fox+
-
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- endingwxyz
- *** Failers
- a rather long string that doesn't end with one of them
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 123999foo
- *** Failers
- 123abcfoo
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 123999foo
- *** Failers
- 123abcfoo
-
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 123456foo
- *** Failers
- 123999foo
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 123456foo
- *** Failers
- 123999foo
-
-/<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href=\'abcd xyz pqr\' cats
-
-/<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href = \'abcd xyz pqr\' cats
-
-/<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href = \'abcd xyz pqr\' cats
-
-/((Z)+|A)*/
- ZABCDEFG
-
-/(Z()|A)*/
- ZABCDEFG
-
-/(Z(())|A)*/
- ZABCDEFG
-
-/((?>Z)+|A)*/
- ZABCDEFG
-
-/((?>)+|A)*/
- ZABCDEFG
-
-/a*/g
- abbab
-
-/^[a-\d]/
- abcde
- -things
- 0digit
- *** Failers
- bcdef
-
-/^[\d-a]/
- abcde
- -things
- 0digit
- *** Failers
- bcdef
-
-/ End of testinput3 /
diff --git a/ext/pcre/pcrelib/testdata/testinput4 b/ext/pcre/pcrelib/testdata/testinput4
deleted file mode 100644
index f2878965f6..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput4
+++ /dev/null
@@ -1,65 +0,0 @@
-/^[\w]+/
- *** Failers
- École
-
-/^[\w]+/Lfr
- École
-
-/^[\w]+/
- *** Failers
- École
-
-/^[\W]+/
- École
-
-/^[\W]+/Lfr
- *** Failers
- École
-
-/[\b]/
- \b
- *** Failers
- a
-
-/[\b]/Lfr
- \b
- *** Failers
- a
-
-/^\w+/
- *** Failers
- École
-
-/^\w+/Lfr
- École
-
-/(.+)\b(.+)/
- École
-
-/(.+)\b(.+)/Lfr
- *** Failers
- École
-
-/École/i
- École
- *** Failers
- école
-
-/École/iLfr
- École
- école
-
-/\w/IS
-
-/\w/ISLfr
-
-/^[\xc8-\xc9]/iLfr
- École
- école
-
-/^[\xc8-\xc9]/Lfr
- École
- *** Failers
- école
-
-/ End of testinput4 /
diff --git a/ext/pcre/pcrelib/testdata/testinput5 b/ext/pcre/pcrelib/testdata/testinput5
deleted file mode 100644
index d66cfbddf3..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput5
+++ /dev/null
@@ -1,118 +0,0 @@
-/-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
-/-- strings automatically, do not use the \x{} construct except with --/
-/-- patterns that have the /8 option set, and don't use them without! --/
-
-/a.b/8
- acb
- a\x7fb
- a\x{100}b
- *** Failers
- a\nb
-
-/a(.{3})b/8
- a\x{4000}xyb
- a\x{4000}\x7fyb
- a\x{4000}\x{100}yb
- *** Failers
- a\x{4000}b
- ac\ncb
-
-/a(.*?)(.)/
- a\xc0\x88b
-
-/a(.*?)(.)/8
- a\x{100}b
-
-/a(.*)(.)/
- a\xc0\x88b
-
-/a(.*)(.)/8
- a\x{100}b
-
-/a(.)(.)/
- a\xc0\x92bcd
-
-/a(.)(.)/8
- a\x{240}bcd
-
-/a(.?)(.)/
- a\xc0\x92bcd
-
-/a(.?)(.)/8
- a\x{240}bcd
-
-/a(.??)(.)/
- a\xc0\x92bcd
-
-/a(.??)(.)/8
- a\x{240}bcd
-
-/a(.{3})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- *** Failers
- a\x{1234}b
- ac\ncb
-
-/a(.{3,})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
- a\x{1234}b
-
-/a(.{3,}?)b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
- a\x{1234}b
-
-/a(.{3,5})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- axxxxxbcdefghijb
- *** Failers
- a\x{1234}b
- axxxxxxbcdefghijb
-
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- axxxxxbcdefghijb
- *** Failers
- a\x{1234}b
- axxxxxxbcdefghijb
-
-/^[a\x{c0}]/8
- *** Failers
- \x{100}
-
-/(?<=aXb)cd/8
- aXbcd
-
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
-
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
-
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- *** Failers
- \x{100}\x{100}b
-
-/ End of testinput5 /
diff --git a/ext/pcre/pcrelib/testdata/testinput6 b/ext/pcre/pcrelib/testdata/testinput6
deleted file mode 100644
index 1ccaa0dbc1..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput6
+++ /dev/null
@@ -1,52 +0,0 @@
-/\x{100}/8DM
-
-/\x{1000}/8DM
-
-/\x{10000}/8DM
-
-/\x{100000}/8DM
-
-/\x{1000000}/8DM
-
-/\x{4000000}/8DM
-
-/\x{7fffFFFF}/8DM
-
-/[\x{ff}]/8DM
-
-/[\x{100}]/8DM
-
-/\x{ffffffff}/8
-
-/\x{100000000}/8
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
-
-/\x80/8D
-
-/\xff/8D
-
-/-- These tests are here rather than in testinput5 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-
-/^[a\x{c0}]b/8
- \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/ End of testinput6 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput1 b/ext/pcre/pcrelib/testdata/testoutput1
deleted file mode 100644
index a6930bc9f1..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput1
+++ /dev/null
@@ -1,2966 +0,0 @@
-PCRE version 3.4 22-Aug-2000
-
-/the quick brown fox/
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
-No match
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
-No match
-
-/The quick brown fox/i
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
- 0: The quick brown FOX
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
- 0: THE QUICK BROWN FOX
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
- 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- 0: aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- 0: aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- 0: aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- 0: aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- 0: abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- 0: aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- 0: abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- 0: aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- 0: aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- 0: aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- *** Failers
-No match
- abxyzpqrrabbxyyyypqAzz
-No match
- abxyzpqrrrrabbxyyyypqAzz
-No match
- abxyzpqrrrabxyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
-No match
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-No match
-
-/^(abc){1,2}zz/
- abczz
- 0: abczz
- 1: abc
- abcabczz
- 0: abcabczz
- 1: abc
- *** Failers
-No match
- zz
-No match
- abcabcabczz
-No match
- >>abczz
-No match
-
-/^(b+?|a){1,2}?c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: b
- bbbc
- 0: bbbc
- 1: bb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: bb
- bbbc
- 0: bbbc
- 1: bbb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}?bc/
- bbc
- 0: bbc
- 1: b
-
-/^(b*|ba){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^(ba|b*){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
- 0: \x01\x01\x1b;z
-
-/^[ab\]cde]/
- athing
- 0: a
- bthing
- 0: b
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- fthing
-No match
- [thing
-No match
- \\thing
-No match
-
-/^[]cde]/
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- athing
-No match
- fthing
-No match
-
-/^[^ab\]cde]/
- fthing
- 0: f
- [thing
- 0: [
- \\thing
- 0: \
- *** Failers
- 0: *
- athing
-No match
- bthing
-No match
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
-No match
-
-/^[^]cde]/
- athing
- 0: a
- fthing
- 0: f
- *** Failers
- 0: *
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
-No match
-
-/^\/
-
- 0: \x81
-
-/^ÿ/
- ÿ
- 0: \xff
-
-/^[0-9]+$/
- 0
- 0: 0
- 1
- 0: 1
- 2
- 0: 2
- 3
- 0: 3
- 4
- 0: 4
- 5
- 0: 5
- 6
- 0: 6
- 7
- 0: 7
- 8
- 0: 8
- 9
- 0: 9
- 10
- 0: 10
- 100
- 0: 100
- *** Failers
-No match
- abc
-No match
-
-/^.*nter/
- enter
- 0: enter
- inter
- 0: inter
- uponter
- 0: uponter
-
-/^xxx[0-9]+$/
- xxx0
- 0: xxx0
- xxx1234
- 0: xxx1234
- *** Failers
-No match
- xxx
-No match
-
-/^.+[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- 0: abc!pqr=apquxz.ixr.zzz.ac.uk
- 1: abc
- 2: pqr
- *** Failers
-No match
- !pqr=apquxz.ixr.zzz.ac.uk
-No match
- abc!=apquxz.ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz:ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-No match
-
-/:/
- Well, we need a colon: somewhere
- 0: :
- *** Fail if we don't
-No match
-
-/([\da-f:]+)$/i
- 0abc
- 0: 0abc
- 1: 0abc
- abc
- 0: abc
- 1: abc
- fed
- 0: fed
- 1: fed
- E
- 0: E
- 1: E
- ::
- 0: ::
- 1: ::
- 5f03:12C0::932e
- 0: 5f03:12C0::932e
- 1: 5f03:12C0::932e
- fed def
- 0: def
- 1: def
- Any old stuff
- 0: ff
- 1: ff
- *** Failers
-No match
- 0zzz
-No match
- gzzz
-No match
- fed\x20
-No match
- Any old rubbish
-No match
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- 0: .1.2.3
- 1: 1
- 2: 2
- 3: 3
- A.12.123.0
- 0: A.12.123.0
- 1: 12
- 2: 123
- 3: 0
- *** Failers
-No match
- .1.2.3333
-No match
- 1.2.3
-No match
- 1234.2.3
-No match
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 0: 1 IN SOA non-sp1 non-sp2(
- 1: 1
- 2: non-sp1
- 3: non-sp2
- 1 IN SOA non-sp1 non-sp2 (
- 0: 1 IN SOA non-sp1 non-sp2 (
- 1: 1
- 2: non-sp1
- 3: non-sp2
- *** Failers
-No match
- 1IN SOA non-sp1 non-sp2(
-No match
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- 0: a.
- Z.
- 0: Z.
- 2.
- 0: 2.
- ab-c.pq-r.
- 0: ab-c.pq-r.
- 1: .pq-r
- sxk.zzz.ac.uk.
- 0: sxk.zzz.ac.uk.
- 1: .uk
- x-.y-.
- 0: x-.y-.
- 1: .y-
- *** Failers
-No match
- -abc.peq.
-No match
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- 0: *.a
- *.b0-a
- 0: *.b0-a
- 1: 0-a
- *.c3-b.c
- 0: *.c3-b.c
- 1: 3-b
- 2: .c
- *.c-a.b-c
- 0: *.c-a.b-c
- 1: -a
- 2: .b-c
- 3: -c
- *** Failers
-No match
- *.0
-No match
- *.a-
-No match
- *.a-b.c-
-No match
- *.c-a.0-c
-No match
-
-/^(?=ab(de))(abd)(e)/
- abde
- 0: abde
- 1: de
- 2: abd
- 3: e
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
- 0: abdf
- 1: <unset>
- 2: abd
- 3: f
-
-/^(?=(ab(cd)))(ab)/
- abcd
- 0: ab
- 1: abcd
- 2: cd
- 3: ab
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- 0: a.b.c.d
- 1: .d
- A.B.C.D
- 0: A.B.C.D
- 1: .D
- a.b.c.1.2.3.C
- 0: a.b.c.1.2.3.C
- 1: .C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- 0: "1234"
- \"abcd\" ;
- 0: "abcd" ;
- 1: ;
- \"\" ; rhubarb
- 0: "" ; rhubarb
- 1: ; rhubarb
- *** Failers
-No match
- \"1234\" : things
-No match
-
-/^$/
- \
- 0:
- *** Failers
-No match
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/^ a\ b[c ]d $/x
- a bcd
- 0: a bcd
- a b d
- 0: a b d
- *** Failers
-No match
- abcd
-No match
- ab d
-No match
-
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: abc
- 2: bc
- 3: c
- 4: def
- 5: ef
- 6: f
- 7: hij
- 8: ij
- 9: j
-10: klm
-11: lm
-12: m
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: bc
- 2: c
- 3: ef
- 4: f
- 5: ij
- 6: j
- 7: lm
- 8: m
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
- 0: a+ Z0+\x08\x0a\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
- 0: .^$(*+)|{?,?}
-
-/^a*\w/
- z
- 0: z
- az
- 0: az
- aaaz
- 0: aaaz
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
- a+
- 0: a
- aa+
- 0: aa
-
-/^a*?\w/
- z
- 0: z
- az
- 0: a
- aaaz
- 0: a
- a
- 0: a
- aa
- 0: a
- aaaa
- 0: a
- a+
- 0: a
- aa+
- 0: a
-
-/^a+\w/
- az
- 0: az
- aaaz
- 0: aaaz
- aa
- 0: aa
- aaaa
- 0: aaaa
- aa+
- 0: aa
-
-/^a+?\w/
- az
- 0: az
- aaaz
- 0: aa
- aa
- 0: aa
- aaaa
- 0: aa
- aa+
- 0: aa
-
-/^\d{8}\w{2,}/
- 1234567890
- 0: 1234567890
- 12345678ab
- 0: 12345678ab
- 12345678__
- 0: 12345678__
- *** Failers
-No match
- 1234567
-No match
-
-/^[aeiou\d]{4,5}$/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- aaaaa
- 0: aaaaa
- *** Failers
-No match
- 123456
-No match
-
-/^[aeiou\d]{4,5}?/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 1234
- aaaaa
- 0: aaaa
- 123456
- 0: 1234
-
-/\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- 0: abc=abcabc
- 1: abc
- 2: abc
- def=defdefdef
- 0: def=defdefdef
- 1: def
- 2: def
- *** Failers
-No match
- abc=defdef
-No match
-
-/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- 0: abcdefghijkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: cd
- abcdefghijkkkkcda2
- 0: abcdefghijkkkkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: cd
-
-/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- 0: cataract cataract23
- 1: cataract
- 2: aract
- 3: ract
- 4:
- 5: 3
- catatonic catatonic23
- 0: catatonic catatonic23
- 1: catatonic
- 2: atonic
- 3: tonic
- 4:
- 5: 3
- caterpillar caterpillar23
- 0: caterpillar caterpillar23
- 1: caterpillar
- 2: erpillar
- 3: <unset>
- 4:
- 5: 3
-
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: abcd
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: Sep
- From abcd Mon Sep 1 12:33:02 1997
- 0: From abcd Mon Sep 1 12:33
- 1: Sep
- *** Failers
-No match
- From abcd Sep 01 12:33:02 1997
-No match
-
-/^12.34/s
- 12\n34
- 0: 12\x0a34
- 12\r34
- 0: 12\x0d34
-
-/\w+(?=\t)/
- the quick brown\t fox
- 0: brown
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
- 0: foolish see?
- 1: lish see?
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- 0: rowbar etc
- 1: etc
- barrel
- 0: barrel
- 1: rel
- 2barrel
- 0: 2barrel
- 1: rel
- A barrel
- 0: A barrel
- 1: rel
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- 0: abc
- 1: abc
- *** Failers
-No match
- abc123
-No match
-
-/^1234(?# test newlines
- inside)/
- 1234
- 0: 1234
-
-/^1234 #comment in extended re
- /x
- 1234
- 0: 1234
-
-/#rhubarb
- abcd/x
- abcd
- 0: abcd
-
-/^abcd#rhubarb/x
- abcd
- 0: abcd
-
-/^(a)\1{2,3}(.)/
- aaab
- 0: aaab
- 1: a
- 2: b
- aaaab
- 0: aaaab
- 1: a
- 2: b
- aaaaab
- 0: aaaaa
- 1: a
- 2: a
- aaaaaab
- 0: aaaaa
- 1: a
- 2: a
-
-/(?!^)abc/
- the abc
- 0: abc
- *** Failers
-No match
- abc
-No match
-
-/(?=^)abc/
- abc
- 0: abc
- *** Failers
-No match
- the abc
-No match
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
- 0: aabb
- 1: b
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
- 0: aabbbbb
- 1: abbbbb
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
- 0: aa
- 1: a
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
- 0: aabb
- 1: b
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <user@dom.ain>
- <user\@dom.ain>
- 0: user@dom.ain
- user\@dom.ain
- 0: user@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <user.1234@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <user.1234@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: user@some.where
- *** Failers
-No match
- The quick brown fox
-No match
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <user@dom.ain>
- <user\@dom.ain>
- 0: user@dom.ain
- user\@dom.ain
- 0: user@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <user.1234@dom.ain>
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <user.1234@dom.ain>
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: user@some.where
- *** Failers
-No match
- The quick brown fox
-No match
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- 0: abc\x00def\x00pqr\x00xyz\x000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
- 0: abc\x00def\x00pqr\x00xyz\x000AB
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
-
-/^[\000-\037]/
- \0A
- 0: \x00
- \01B
- 0: \x01
- \037C
- 0: \x1f
-
-/\0*/
- \0\0\0\0
- 0: \x00\x00\x00\x00
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- 0: A\x00\x00Z
- An A\0\x0\0Z
- 0: A\x00\x00\x00Z
- *** Failers
-No match
- A\0Z
-No match
- A\0\x0\0\x0Z
-No match
-
-/^(cow|)\1(bell)/
- cowcowbell
- 0: cowcowbell
- 1: cow
- 2: bell
- bell
- 0: bell
- 1:
- 2: bell
- *** Failers
-No match
- cowbell
-No match
-
-/^\s/
- \040abc
- 0:
- \x0cabc
- 0: \x0c
- \nabc
- 0: \x0a
- \rabc
- 0: \x0d
- \tabc
- 0: \x09
- *** Failers
-No match
- abc
-No match
-
-/^a b
-
- c/x
- abc
- 0: abc
-
-/^(a|)\1*b/
- ab
- 0: ab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- acb
-No match
-
-/^(a|)\1+b/
- aab
- 0: aab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
-
-/^(a|)\1?b/
- ab
- 0: ab
- 1: a
- aab
- 0: aab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- acb
-No match
-
-/^(a|)\1{2}b/
- aaab
- 0: aaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
- aab
-No match
- aaaab
-No match
-
-/^(a|)\1{2,3}b/
- aaab
- 0: aaab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
- aab
-No match
- aaaaab
-No match
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
- abbbc
- 0: abbbc
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abbbbbc
-No match
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/^[W-c]+$/
- WXY_^abc
- 0: WXY_^abc
- ***Failers
-No match
- wxy
-No match
-
-/^[W-c]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^abc$/m
- abc
- 0: abc
- qqq\nabc
- 0: abc
- abc\nzzz
- 0: abc
- qqq\nabc\nzzz
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\Aabc\Z/m
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\A(.)*\Z/s
- abc\ndef
- 0: abc\x0adef
- 1: f
-
-/\A(.)*\Z/m
- *** Failers
- 0: *** Failers
- 1: s
- abc\ndef
-No match
-
-/(?:b)|(?::+)/
- b::c
- 0: b
- c::b
- 0: ::
-
-/[-az]+/
- az-
- 0: az-
- *** Failers
- 0: a
- b
-No match
-
-/[az-]+/
- za-
- 0: za-
- *** Failers
- 0: a
- b
-No match
-
-/[a\-z]+/
- a-z
- 0: a-z
- *** Failers
- 0: a
- b
-No match
-
-/[a-z]+/
- abcdxyz
- 0: abcdxyz
-
-/[\d-]+/
- 12-34
- 0: 12-34
- *** Failers
-No match
- aaa
-No match
-
-/[\d-z]+/
- 12-34z
- 0: 12-34z
- *** Failers
-No match
- aaa
-No match
-
-/\x5c/
- \\
- 0: \
-
-/\x20Z/
- the Zoo
- 0: Z
- *** Failers
-No match
- Zulu
-No match
-
-/(abc)\1/i
- abcabc
- 0: abcabc
- 1: abc
- ABCabc
- 0: ABCabc
- 1: ABC
- abcABC
- 0: abcABC
- 1: abc
-
-/(main(O)?)+/
- mainmain
- 0: mainmain
- 1: main
- mainOmain
- 0: mainOmain
- 1: main
- 2: O
-
-/ab{3cd/
- ab{3cd
- 0: ab{3cd
-
-/ab{3,cd/
- ab{3,cd
- 0: ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
- 0: ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
- 0: {4,5a}bc
-
-/^a.b/
- a\rb
- 0: a\x0db
- *** Failers
-No match
- a\nb
-No match
-
-/abc$/
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- abc\ndef
-No match
-
-/(abc)\123/
- abc\x53
- 0: abcS
- 1: abc
-
-/(abc)\223/
- abc\x93
- 0: abc\x93
- 1: abc
-
-/(abc)\323/
- abc\xd3
- 0: abc\xd3
- 1: abc
-
-/(abc)\500/
- abc\x40
- 0: abc@
- 1: abc
- abc\100
- 0: abc@
- 1: abc
-
-/(abc)\5000/
- abc\x400
- 0: abc@0
- 1: abc
- abc\x40\x30
- 0: abc@0
- 1: abc
- abc\1000
- 0: abc@0
- 1: abc
- abc\100\x30
- 0: abc@0
- 1: abc
- abc\100\060
- 0: abc@0
- 1: abc
- abc\100\60
- 0: abc@0
- 1: abc
-
-/abc\81/
- abc\081
- 0: abc\x0081
- abc\0\x38\x31
- 0: abc\x0081
-
-/abc\91/
- abc\091
- 0: abc\x0091
- abc\0\x39\x31
- 0: abc\x0091
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
- 0: abcdefghijkllS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: l
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
- 0: abcdefghijk\x0aS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-
-/ab\gdef/
- abgdef
- 0: abgdef
-
-/a{0}bc/
- bc
- 0: bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
- 0: xyz
-
-/abc[\10]de/
- abc\010de
- 0: abc\x08de
-
-/abc[\1]de/
- abc\1de
- 0: abc\x01de
-
-/(abc)[\1]de/
- abc\1de
- 0: abc\x01de
- 1: abc
-
-/a.b(?s)/
- a\nb
- 0: a\x0ab
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- 0: baNOTcccc
- 1: b
- 2: a
- 3: NOT
- 4: cccc
- baNOTcccd
- 0: baNOTccc
- 1: b
- 2: a
- 3: NOT
- 4: ccc
- baNOTccd
- 0: baNOTcc
- 1: b
- 2: a
- 3: NO
- 4: Tcc
- bacccd
- 0: baccc
- 1: b
- 2: a
- 3:
- 4: ccc
- *** Failers
- 0: *** Failers
- 1: *
- 2: *
- 3: * Fail
- 4: ers
- anything
-No match
- b\bc
-No match
- baccd
-No match
-
-/[^a]/
- Abc
- 0: A
-
-/[^a]/i
- Abc
- 0: b
-
-/[^a]+/
- AAAaAbc
- 0: AAA
-
-/[^a]+/i
- AAAaAbc
- 0: bc
-
-/[^a]+/
- bbb\nccc
- 0: bbb\x0accc
-
-/[^k]$/
- abc
- 0: c
- *** Failers
- 0: s
- abk
-No match
-
-/[^k]{2,3}$/
- abc
- 0: abc
- kbc
- 0: bc
- kabc
- 0: abc
- *** Failers
- 0: ers
- abk
-No match
- akb
-No match
- akk
-No match
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 0: 12345678@a.b.c.d
- 123456789\@x.y.z
- 0: 123456789@x.y.z
- *** Failers
-No match
- 12345678\@x.y.uk
-No match
- 1234567\@a.b.c.d
-No match
-
-/(a)\1{8,}/
- aaaaaaaaa
- 0: aaaaaaaaa
- 1: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- *** Failers
-No match
- aaaaaaa
-No match
-
-/[^a]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
-
-/[^a]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/[^az]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
-
-/[^az]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
- 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- 1.235
- 0: .235
- 1: .23
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 0: .23
- 1: .23
- 2:
- 1.875000282
- 0: .875
- 1: .875
- 2: 5
- *** Failers
-No match
- 1.235
-No match
-
-/a(?)b/
- ab
- 0: ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
- 0: foo table
- 1: foo
- 2: table
-
-/foo(.*)bar/
- The food is under the bar in the barn.
- 0: food is under the bar in the bar
- 1: d is under the bar in the
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
- 0: food is under the bar
- 1: d is under the
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 53147
- 2:
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
- 0:
- 1:
- 2:
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2
- 1: I have
- 2: 2
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/^\D*(?!123)/
- ABC123
- 0: AB
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- 0: ABC
- 1: ABC
- *** Failers
-No match
- ABC123
-No match
-
-/^[W-]46]/
- W46]789
- 0: W46]
- -46]789
- 0: -46]
- *** Failers
-No match
- Wall
-No match
- Zebra
-No match
- 42
-No match
- [abcd]
-No match
- ]abcd[
-No match
-
-/^[W-\]46]/
- W46]789
- 0: W
- Wall
- 0: W
- Zebra
- 0: Z
- Xylophone
- 0: X
- 42
- 0: 4
- [abcd]
- 0: [
- ]abcd[
- 0: ]
- \\backslash
- 0: \
- *** Failers
-No match
- -46]789
-No match
- well
-No match
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
- 0: 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/^(a){0,0}/
- bcd
- 0:
- abc
- 0:
- aab
- 0:
-
-/^(a){0,1}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
-
-/^(a){0,2}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
-
-/^(a){0,3}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
-
-/^(a){0,}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
-
-/^(a){1,1}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
-
-/^(a){1,2}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
-
-/^(a){1,3}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
-
-/^(a){1,}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
-
-/.*\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/m
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*$/
- borfle\nbib.gif\nno
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/
- borfle\nbib.gif\nno\n
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno\n
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
-/.*$/ms
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
-/(.*X|^B)/
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/^.*B/
- **** Failers
-No match
- abc\nB
-No match
-
-/(?s)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?m)^.*B/
- abc\nB
- 0: B
-
-/(?ms)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?ms)^B/
- abc\nB
- 0: B
-
-/(?s)B$/
- B\n
- 0: B
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
- 0: 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
- 0: 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
- 0: 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
- 0: abcabcabcabc
- 1: c
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- 0: n
- *** Failers
-No match
- z
-No match
-
-/abcde{0,0}/
- abcd
- 0: abcd
- *** Failers
-No match
- abce
-No match
-
-/ab[cd]{0,0}e/
- abe
- 0: abe
- *** Failers
-No match
- abcde
-No match
-
-/ab(c){0,0}d/
- abd
- 0: abd
- *** Failers
-No match
- abcd
-No match
-
-/a(b*)/
- a
- 0: a
- 1:
- ab
- 0: ab
- 1: b
- abbbb
- 0: abbbb
- 1: bbbb
- *** Failers
- 0: a
- 1:
- bbbbb
-No match
-
-/ab\d{0}e/
- abe
- 0: abe
- *** Failers
-No match
- ab1e
-No match
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- 0: "quick"
- 1: quick
- \"the \\\"quick\\\" brown fox\"
- 0: "the \"quick\" brown fox"
- 1: brown fox
-
-/.*?/g+
- abc
- 0:
- 0+ abc
- 0: a
- 0+ bc
- 0:
- 0+ bc
- 0: b
- 0+ c
- 0:
- 0+ c
- 0: c
- 0+
- 0:
- 0+
-
-/\b/g+
- abc
- 0:
- 0+ abc
- 0:
- 0+
-
-/\b/+g
- abc
- 0:
- 0+ abc
- 0:
- 0+
-
-//g
- abc
- 0:
- 0:
- 0:
- 0:
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 1: BGCOLOR='#DBE9E9'
- 2: align=left valign=top
- 3: 43.
- 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
- 5:
- 6:
- 7: <unset>
- 8: align=left valign=top
- 9: Lega lstaff.com
-10: align=left valign=top
-11: CA - Statewide
-
-/a[^a]b/
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/
- acb
- 0: acb
- *** Failers
-No match
- a\nb
-No match
-
-/a[^a]b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/ End of testinput1 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput2 b/ext/pcre/pcrelib/testdata/testoutput2
deleted file mode 100644
index 5de4a6ebb8..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput2
+++ /dev/null
@@ -1,2075 +0,0 @@
-PCRE version 3.4 22-Aug-2000
-
-/(a)b|/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
- abc
- 0: abc
- defabc
- 0: abc
- \Aabc
- 0: abc
- *** Failers
-No match
- \Adefabc
-No match
- ABC
-No match
-
-/^abc/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
- abc
- 0: abc
- \Aabc
- 0: abc
- *** Failers
-No match
- defabc
-No match
- \Adefabc
-No match
-
-/a+bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/a*bc/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/a{3}bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/(abc|a+z)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/^abc$/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
- abc
- 0: abc
- *** Failers
-No match
- def\nabc
-No match
-
-/ab\gdef/X
-Failed: unrecognized character follows \ at offset 3
-
-/(?X)ab\gdef/X
-Failed: unrecognized character follows \ at offset 7
-
-/x{5,4}/
-Failed: numbers out of order in {} quantifier at offset 5
-
-/z{65536}/
-Failed: number too big in {} quantifier at offset 7
-
-/[abcd/
-Failed: missing terminating ] for character class at offset 5
-
-/[\B]/
-Failed: invalid escape sequence in character class at offset 2
-
-/[z-a]/
-Failed: range out of order in character class at offset 3
-
-/^*/
-Failed: nothing to repeat at offset 1
-
-/(abc/
-Failed: missing ) at offset 4
-
-/(?# abc/
-Failed: missing ) after comment at offset 7
-
-/(?z)abc/
-Failed: unrecognized character after (? at offset 2
-
-/.*b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/.*?b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/cat|dog|elephant/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- this sentence eventually mentions a cat
- 0: cat
- this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: c d e
- this sentence eventually mentions a cat
- 0: cat
- this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/iS
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: C D E c d e
- this sentence eventually mentions a CAT cat
- 0: CAT
- this sentences rambles on and on for a while to elephant ElePhant
- 0: elephant
-
-/a|[bcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d
-
-/(a|[^\dZ])/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a
- \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19
- \x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / : ; < = >
- ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d
- e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83
- \x84 \x85 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92
- \x93 \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa0 \xa1
- \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0
- \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf
- \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce
- \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd
- \xde \xdf \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec
- \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb
- \xfc \xfd \xfe \xff
-
-/(a|b)*[\s]/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x09 \x0a \x0b \x0c \x0d \x20 a b
-
-/(ab\2)/
-Failed: back reference to non-existent subpattern at offset 6
-
-/{4,5}abc/
-Failed: nothing to repeat at offset 4
-
-/(a)(b)(c)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-Need char = 'c'
- abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
- \O0abcb
-Matched, but too many substrings
- \O3abcb
-Matched, but too many substrings
- 0: abcb
- \O6abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- \O9abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- 2: b
- \O12abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
-
-/(a)bc|(a)(b)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-No need char
- abc
- 0: abc
- 1: a
- \O0abc
-Matched, but too many substrings
- \O3abc
-Matched, but too many substrings
- 0: abc
- \O6abc
- 0: abc
- 1: a
- aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
- \O0aba
-Matched, but too many substrings
- \O3aba
-Matched, but too many substrings
- 0: aba
- \O6aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- \O9aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- 2: a
- \O12aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
-
-/abc$/E
-Capturing subpattern count = 0
-Options: dollar_endonly
-First char = 'a'
-Need char = 'c'
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- abc\ndef
-No match
-
-/(a)(b)(c)(d)(e)\6/
-Failed: back reference to non-existent subpattern at offset 17
-
-/the quick brown fox/
-Capturing subpattern count = 0
-No options
-First char = 't'
-Need char = 'x'
- the quick brown fox
- 0: the quick brown fox
- this is a line with the quick brown fox
- 0: the quick brown fox
-
-/the quick brown fox/A
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'x'
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match
- this is a line with the quick brown fox
-No match
-
-/ab(?z)cd/
-Failed: unrecognized character after (? at offset 4
-
-/^abc|def/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/
-Capturing subpattern count = 3
-No options
-First char at start or follows \n
-No need char
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 2: <unset>
- 3: def
-
-/abc/P
- abc
- 0: abc
- *** Failers
-No match: POSIX code 17: match failed
-
-/^abc|def/P
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/P
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 3: def
-
-/the quick brown fox/P
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match: POSIX code 17: match failed
- The Quick Brown Fox
-No match: POSIX code 17: match failed
-
-/the quick brown fox/Pi
- the quick brown fox
- 0: the quick brown fox
- The Quick Brown Fox
- 0: The Quick Brown Fox
-
-/abc.def/P
- *** Failers
-No match: POSIX code 17: match failed
- abc\ndef
-No match: POSIX code 17: match failed
-
-/abc$/P
- abc
- 0: abc
- abc\n
- 0: abc
-
-/(abc)\2/P
-Failed: POSIX code 15: bad back reference at offset 7
-
-/(abc\1)/P
- abc
-No match: POSIX code 17: match failed
-
-/)/
-Failed: unmatched parentheses at offset 0
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/[^aeiou ]{3,}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- co-processors, and for
- 0: -pr
-
-/<.*>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/<.*?>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*>(?U)/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*?>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/={3,}/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
- abc========def
- 0: ===
-
-/(?U)={3,}?/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
- abc========def
- 0: ========
-
-/(?<!bar|cattle)foo/
-Capturing subpattern count = 0
-No options
-First char = 'f'
-Need char = 'o'
- foo
- 0: foo
- catfoo
- 0: foo
- *** Failers
-No match
- the barfoo
-No match
- and cattlefoo
-No match
-
-/(?<=a+)b/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/(?<=aaa|b{0,3})b/
-Failed: lookbehind assertion is not fixed length at offset 14
-
-/(?<!(foo)a\1)bar/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?i)abc/
-Capturing subpattern count = 0
-Options: caseless
-First char = 'a'
-Need char = 'c'
-
-/(a|(?m)a)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(?i)^1234/
-Capturing subpattern count = 0
-Options: anchored caseless
-No first char
-Need char = '4'
-
-/(^b|(?i)^d)/
-Capturing subpattern count = 1
-Options: anchored
-Case state changes
-No first char
-No need char
-
-/(?s).*/
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-No need char
-
-/[abcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d
-
-/(?i)[abcd]/S
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: A B C D a b c d
-
-/(?m)[xy]|(b|c)/S
-Capturing subpattern count = 1
-Options: multiline
-No first char
-No need char
-Starting character set: b c x y
-
-/(^a|^b)/m
-Capturing subpattern count = 1
-Options: multiline
-First char at start or follows \n
-No need char
-
-/(?i)(^a|^b)/m
-Capturing subpattern count = 1
-Options: caseless multiline
-First char at start or follows \n
-No need char
-
-/(a)(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 13
-
-/(?(?=a)a|b|c)/
-Failed: conditional group contains more than two branches at offset 12
-
-/(?(1a)/
-Failed: malformed number after (?( at offset 4
-
-/(?(?i))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(abc))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(?<ab))/
-Failed: unrecognized character after (?< at offset 2
-
-/((?s)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-First char = 'b'
-Need char = 'h'
-
-/((?i)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-Case state changes
-No first char
-Need char = 'h'
-
-/((?i)b)/DS
-------------------------------------------------------------------
- 0 16 Bra 0
- 3 8 Bra 1
- 6 01 Opt
- 8 1 b
- 11 8 Ket
- 14 00 Opt
- 16 16 Ket
- 19 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-Need char = 'b'
-Starting character set: B b
-
-/(a*b|(?i:c*(?-i)d))/S
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-No need char
-Starting character set: C a b c d
-
-/a$/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
- a
- 0: a
- a\n
- 0: a
- *** Failers
-No match
- \Za
-No match
- \Za\n
-No match
-
-/a$/m
-Capturing subpattern count = 0
-Options: multiline
-First char = 'a'
-No need char
- a
- 0: a
- a\n
- 0: a
- \Za\n
- 0: a
- *** Failers
-No match
- \Za
-No match
-
-/\Aabc/m
-Capturing subpattern count = 0
-Options: anchored multiline
-No first char
-Need char = 'c'
-
-/^abc/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
-Capturing subpattern count = 5
-Options: anchored
-No first char
-Need char = 'a'
- aaaaabbbbbcccccdef
- 0: aaaaabbbbbcccccdef
- 1: aaaaabbbbbcccccdef
- 2: aaaaa
- 3: b
- 4: bbbbccccc
- 5: def
-
-/(?<=foo)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?<!foo)(alpha|omega)/S
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-Starting character set: a o
-
-/(?!alphabet)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?<=foo\n)^bar/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'r'
-
-/(?>^abc)/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
- abc
- 0: abc
- def\nabc
- 0: abc
- *** Failers
-No match
- defabc
-No match
-
-/(?<=ab(c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 11
-
-/(?<=ab(?<=c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?<=ab(c|de)f)g/
-Failed: lookbehind assertion is not fixed length at offset 13
-
-/The next three are in testinput2 because they have variable length branches/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 's'
-
-/(?<=bullock|donkey)-cart/
-Capturing subpattern count = 0
-No options
-First char = '-'
-Need char = 't'
- the bullock-cart
- 0: -cart
- a donkey-cart race
- 0: -cart
- *** Failers
-No match
- cart
-No match
- horse-and-cart
-No match
-
-/(?<=ab(?i)x|y|z)/
-Capturing subpattern count = 0
-No options
-Case state changes
-No first char
-No need char
-
-/(?>.*)(?<=(abcd)|(xyz))/
-Capturing subpattern count = 2
-No options
-First char at start or follows \n
-No need char
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingxyz
- 0: endingxyz
- 1: <unset>
- 2: xyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
-Capturing subpattern count = 0
-No options
-Case state changes
-First char = 'Z'
-Need char = 'Z'
- abxyZZ
- 0: ZZ
- abXyZZ
- 0: ZZ
- ZZZ
- 0: ZZ
- zZZ
- 0: ZZ
- bZZ
- 0: ZZ
- BZZ
- 0: ZZ
- *** Failers
-No match
- ZZ
-No match
- abXYZZ
-No match
- zzz
-No match
- bzz
-No match
-
-/(?<!(foo)a)bar/
-Capturing subpattern count = 1
-No options
-First char = 'b'
-Need char = 'r'
- bar
- 0: bar
- foobbar
- 0: bar
- *** Failers
-No match
- fooabar
-No match
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/^(a)?(?(1)a|b)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
- *** Failers
-No match
- a
-No match
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 'g'
-
-/^(a\1?){4}$/
-Capturing subpattern count = 1
-Max back reference = 1
-Options: anchored
-No first char
-Need char = 'a'
- aaaaaa
- 0: aaaaaa
- 1: aa
-
-/These are syntax tests from Perl 5.005/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = '5'
-
-/a[b-a]/
-Failed: range out of order in character class at offset 4
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/a[/
-Failed: missing terminating ] for character class at offset 2
-
-/*a/
-Failed: nothing to repeat at offset 0
-
-/(*)b/
-Failed: nothing to repeat at offset 1
-
-/abc)/
-Failed: unmatched parentheses at offset 3
-
-/(abc/
-Failed: missing ) at offset 4
-
-/a**/
-Failed: nothing to repeat at offset 2
-
-/)(/
-Failed: unmatched parentheses at offset 0
-
-/\1/
-Failed: back reference to non-existent subpattern at offset 2
-
-/\2/
-Failed: back reference to non-existent subpattern at offset 2
-
-/(a)|\2/
-Failed: back reference to non-existent subpattern at offset 6
-
-/a[b-a]/i
-Failed: range out of order in character class at offset 4
-
-/a[]b/i
-Failed: missing terminating ] for character class at offset 4
-
-/a[/i
-Failed: missing terminating ] for character class at offset 2
-
-/*a/i
-Failed: nothing to repeat at offset 0
-
-/(*)b/i
-Failed: nothing to repeat at offset 1
-
-/abc)/i
-Failed: unmatched parentheses at offset 3
-
-/(abc/i
-Failed: missing ) at offset 4
-
-/a**/i
-Failed: nothing to repeat at offset 2
-
-/)(/i
-Failed: unmatched parentheses at offset 0
-
-/:(?:/
-Failed: missing ) at offset 4
-
-/(?<%)b/
-Failed: unrecognized character after (?< at offset 0
-
-/a(?{)b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{{})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{}})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"}})b/
-Failed: unrecognized character after (? at offset 3
-
-/(?(1?)a|b)/
-Failed: malformed number after (?( at offset 4
-
-/(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 10
-
-/[a[:xyz:/
-Failed: missing terminating ] for character class at offset 8
-
-/(?<=x+)y/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/a{37,17}/
-Failed: numbers out of order in {} quantifier at offset 7
-
-/abc/\
-Failed: \ at end of pattern at offset 4
-
-/abc/\P
-Failed: POSIX code 9: bad escape sequence at offset 4
-
-/abc/\i
-Failed: \ at end of pattern at offset 4
-
-/(a)bc(d)/
-Capturing subpattern count = 2
-No options
-First char = 'a'
-Need char = 'd'
- abcd
- 0: abcd
- 1: a
- 2: d
- abcd\C2
- 0: abcd
- 1: a
- 2: d
- 2C d (1)
- abcd\C5
- 0: abcd
- 1: a
- 2: d
-copy substring 5 failed -7
-
-/(.{20})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- abcdefghijklmnopqrstuvwxyz\C1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
-copy substring 1 failed -6
- abcdefghijklmnopqrstuvwxyz\G1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- 1G abcdefghijklmnopqrst (20)
-
-/(.{15})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- abcdefghijklmnopqrstuvwxyz\C1\G1
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- 1C abcdefghijklmno (15)
- 1G abcdefghijklmno (15)
-
-/(.{16})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
- abcdefghijklmnopqrstuvwxyz\C1\G1\L
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
-copy substring 1 failed -6
- 1G abcdefghijklmnop (16)
- 0L abcdefghijklmnop
- 1L abcdefghijklmnop
-
-/^(a|(bc))de(f)/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'f'
- adef\G1\G2\G3\G4\L
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 1G a (1)
- 2G (0)
- 3G f (1)
-get substring 4 failed -7
- 0L adef
- 1L a
- 2L
- 3L f
- bcdef\G1\G2\G3\G4\L
- 0: bcdef
- 1: bc
- 2: bc
- 3: f
- 1G bc (2)
- 2G bc (2)
- 3G f (1)
-get substring 4 failed -7
- 0L bcdef
- 1L bc
- 2L bc
- 3L f
- adefghijk\C0
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 0C adef (4)
-
-/^abc\00def/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'f'
- abc\00def\L\C0
- 0: abc\x00def
- 0C abc (7)
- 0L abc
-
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)?)?)?)?)?)?)?)?)?otherword/M
-Memory allocation (code space): 428
-Capturing subpattern count = 8
-No options
-First char = 'w'
-Need char = 'd'
-
-/.*X/D
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 Any*
- 5 1 X
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'X'
-
-/.*X/Ds
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 Any*
- 5 1 X
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-Need char = 'X'
-
-/(.*X|^B)/D
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char at start or follows \n
-No need char
-
-/(.*X|^B)/Ds
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s)(.*X|^B)/D
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s:.*X|^B)/D
-------------------------------------------------------------------
- 0 27 Bra 0
- 3 10 Bra 0
- 6 04 Opt
- 8 Any*
- 10 1 X
- 13 9 Alt
- 16 04 Opt
- 18 ^
- 19 1 B
- 22 19 Ket
- 25 00 Opt
- 27 27 Ket
- 30 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-No need char
-
-/\Biss\B/+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/+P
- Mississippi
- 0: iss
- 0+ issippi
-
-/iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/\Biss\B/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
- *** Failers
-No match
- Mississippi\A
-No match
-
-/(?<=[Ms])iss/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/(?<=[Ms])iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/^iss/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
- ississippi
- 0: iss
- 0+ issippi
-
-/.*iss/g+
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 's'
- abciss\nxyzisspqr
- 0: abciss
- 0+ \x0axyzisspqr
- 0: xyziss
- 0+ pqr
-
-/.i./+g
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'i'
- Mississippi
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
- Mississippi\A
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
- Missouri river
- 0: Mis
- 0+ souri river
- 0: ri
- 0+ river
- 0: riv
- 0+ er
- Missouri river\A
- 0: Mis
- 0+ souri river
-
-/^.is/+g
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
- Mississippi
- 0: Mis
- 0+ sissippi
-
-/^ab\n/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 10
- ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
-
-/^ab\n/mg+
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 10
- ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
- 0: ab\x0a
- 0+ cd
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/abc|bac/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/(abc|bac)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'c'
-
-/(abc|(c|dc))/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/(abc|(d|de)c)/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/a*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/a+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(baa|a+)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-
-/a{0,3}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/baa{3,}/
-Capturing subpattern count = 0
-No options
-First char = 'b'
-Need char = 'a'
-
-/"([^\\"]+|\\.)*"/
-Capturing subpattern count = 1
-No options
-First char = '"'
-Need char = '"'
-
-/(abc|ab[cd])/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(a|.)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a|ba|\w/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?=pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'r'
-
-/...(?<=abc)/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?!pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/ab./
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab[xyz]/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/abc*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.c*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/ac*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(a.c*|b.c*)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a.c*|aba/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.+a/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'a'
-
-/(?=abcda)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(?=a)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(b)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/a\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/ab\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(\d)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/abcde{0,0}/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'd'
-
-/ab\d+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(?(1)b)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)bag|big)*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)b..|b..)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab\d{0}e/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'e'
-
-/a?b?/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- a
- 0: a
- b
- 0: b
- ab
- 0: ab
- \
- 0:
- *** Failers
- 0:
- \N
-No match
-
-/|-/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- abcd
- 0:
- -abc
- 0:
- \Nab-c
- 0: -
- *** Failers
- 0:
- \Nabc
-No match
-
-/a*(b+)(z)(z)/P
- aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- 0: aaaabbbbzz
- aaaabbbbzzzz\O2
- 0: aaaabbbbzz
- 1: bbbb
- aaaabbbbzzzz\O3
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- aaaabbbbzzzz\O4
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O5
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-
-/^.?abcd/S
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'd'
-Study returned NULL
-
-/\( # ( at start
- (?: # Non-capturing bracket
- (?>[^()]+) # Either a sequence of non-brackets (no backtracking)
- | # Or
- (?R) # Recurse - i.e. nested bracketed string
- )* # Zero or more contents
- \) # Closing )
- /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- (abcd)
- 0: (abcd)
- (abcd)xyz
- 0: (abcd)
- xyz(abcd)
- 0: (abcd)
- (ab(xy)cd)pqr
- 0: (ab(xy)cd)
- (ab(xycd)pqr
- 0: (xycd)
- () abc ()
- 0: ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (abcde(fsh)xyz(foo(bar))lmno)
- *** Failers
-No match
- abcd
-No match
- abcd)
-No match
- (abcd
-No match
-
-/\( ( (?>[^()]+) | (?R) )* \) /xg
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)pqr
- 0: (ab(xy)cd)
- 1: cd
- 1(abcd)(x(y)z)pqr
- 0: (abcd)
- 1: abcd
- 0: (x(y)z)
- 1: z
-
-/\( (?: (?>[^()]+) | (?R) ) \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- (abcd)
- 0: (abcd)
- (ab(xy)cd)
- 0: (xy)
- (a(b(c)d)e)
- 0: (c)
- ((ab))
- 0: ((ab))
- *** Failers
-No match
- ()
-No match
-
-/\( (?: (?>[^()]+) | (?R) )? \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- ()
- 0: ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (fsh)
-
-/\( ( (?>[^()]+) | (?R) )* \) /x
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: cd
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 2
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: cd
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: <unset>
- 2: ab(xy)cd
- 3: cd
- (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123
- 2: ab(xy)cd
- 3: cd
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: <unset>
- 3: cd
- (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123ab(xy)cd
- 2: 123
- 3: cd
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
-Capturing subpattern count = 11
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: ab(xy)cd
- 3: ab(xy)cd
- 4: ab(xy)cd
- 5: ab(xy)cd
- 6: ab(xy)cd
- 7: ab(xy)cd
- 8: ab(xy)cd
- 9: ab(xy)cd
-10: ab(xy)cd
-11: cd
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (abcd(xyz<p>qrs)123)
- 0: (abcd(xyz<p>qrs)123)
- 1: abcd(xyz<p>qrs)123
- 2: 123
- 3: <p>qrs
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(cd)ef)
- 0: (ab(cd)ef)
- 1: ab(cd)ef
- 2: ef
- 3: (cd)
- (ab(cd(ef)gh)ij)
- 0: (ab(cd(ef)gh)ij)
- 1: ab(cd(ef)gh)ij
- 2: ij
- 3: (cd(ef)gh)
-
-/^[[:alnum:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Za-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:alpha:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [A-Za-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:ascii:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x7f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:cntrl:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x1f\x7f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:digit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:graph:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [!-~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:lower:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [a-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:print:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [ -~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:punct:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [!-/:-@[-`{-~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:space:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x09-\x0d ]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:upper:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [A-Z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:xdigit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Fa-f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:word:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Z_a-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:^cntrl:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [ -~\x80-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[12[:^digit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-/1-2:-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/[01[:alpha:]%]/D
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [%0-1A-Za-z]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[[.ch.]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[=ch=]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[:rhubarb:]]/
-Failed: unknown POSIX class name at offset 3
-
-/[[:upper:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
- A
- 0: A
- a
- 0: a
-
-/[[:lower:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
- A
- 0: A
- a
- 0: a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
-Capturing subpattern count = 1
-Options: caseless
-Case state changes
-No first char
-No need char
- ab
- 0: ab
- 1: a
- aB
- 0: aB
- 1: a
- *** Failers
- 0: ai
- 1: a
- Ab
-No match
- AB
-No match
-
-/[\200-\410]/
-Failed: range out of order in character class at offset 9
-
-/^(?(0)f|b)oo/
-Failed: invalid condition (?(0) at offset 5
-
-/ End of testinput2 /
-Capturing subpattern count = 0
-No options
-First char = ' '
-Need char = ' '
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput3 b/ext/pcre/pcrelib/testdata/testoutput3
deleted file mode 100644
index 1568e4dfb1..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput3
+++ /dev/null
@@ -1,2991 +0,0 @@
-PCRE version 3.4 22-Aug-2000
-
-/(?<!bar)foo/
- foo
- 0: foo
- catfood
- 0: foo
- arfootle
- 0: foo
- rfoosh
- 0: foo
- *** Failers
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/\w{3}(?<!bar)foo/
- catfood
- 0: catfoo
- *** Failers
-No match
- foo
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/(?<=(foo)a)bar/
- fooabar
- 0: bar
- 1: foo
- *** Failers
-No match
- bar
-No match
- foobbar
-No match
-
-/\Aabc\z/m
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-No match
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- *** Failers
-No match
- 1.235
-No match
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
- *** Failers
-No match
- this is not a line with only words and spaces!
-No match
-
-/(\d+)(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- 12345+
- 0: 12345
- 1: 1234
- 2: 5
-
-/((?>\d+))(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- *** Failers
-No match
- 12345+
-No match
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
-/(?>b)+/
- aaabbbccc
- 0: bbb
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbc
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- *** Failers
-No match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
-
-/a(?-i)b/i
- ab
- 0: ab
- *** Failers
-No match
- Ab
-No match
- aB
-No match
- AB
-No match
-
-/(a (?x)b c)d e/
- a bcd e
- 0: a bcd e
- 1: a bc
- *** Failers
-No match
- a b cd e
-No match
- abcd e
-No match
- a bcde
-No match
-
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- 0: a bcde f
- 1: a bcde f
- *** Failers
-No match
- abcdef
-No match
-
-/(a(?i)b)c/
- abc
- 0: abc
- 1: ab
- aBc
- 0: aBc
- 1: aB
- *** Failers
-No match
- abC
-No match
- aBC
-No match
- Abc
-No match
- ABc
-No match
- ABC
-No match
- AbC
-No match
-
-/a(?i:b)c/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- ABC
-No match
- abC
-No match
- aBC
-No match
-
-/a(?i:b)*c/
- aBc
- 0: aBc
- aBBc
- 0: aBBc
- *** Failers
-No match
- aBC
-No match
- aBBC
-No match
-
-/a(?=b(?i)c)\w\wd/
- abcd
- 0: abcd
- abCd
- 0: abCd
- *** Failers
-No match
- aBCd
-No match
- abcD
-No match
-
-/(?s-i:more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?:(?s-i)more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?>a(?i)b+)+c/
- abc
- 0: abc
- aBbc
- 0: aBbc
- aBBc
- 0: aBBc
- *** Failers
-No match
- Abc
-No match
- abAb
-No match
- abbC
-No match
-
-/(?=a(?i)b)\w\wc/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- Ab
-No match
- abC
-No match
- aBC
-No match
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- 0: xxc
- 1: xx
- aBxxc
- 0: xxc
- 1: xx
- *** Failers
-No match
- Abxxc
-No match
- ABxxc
-No match
- abxxC
-No match
-
-/(?:(a)|b)(?(1)A|B)/
- aA
- 0: aA
- 1: a
- bB
- 0: bB
- *** Failers
-No match
- aB
-No match
- bA
-No match
-
-/^(a)?(?(1)a|b)+$/
- aa
- 0: aa
- 1: a
- b
- 0: b
- bb
- 0: bb
- *** Failers
-No match
- ab
-No match
-
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/(?(?<=foo)bar|cat)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/(?(?<!foo)cat|bar)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/( \( )? [^()]+ (?(1) \) |) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
-
-/^(?(2)a|(1)(2))+$/
- 12
- 0: 12
- 1: 1
- 2: 2
- 12a
- 0: 12a
- 1: 1
- 2: 2
- 12aa
- 0: 12aa
- 1: 1
- 2: 2
- *** Failers
-No match
- 1234
-No match
-
-/((?i)blah)\s+\1/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- *** Failers
-No match
- blah BLAH
-No match
- Blah blah
-No match
- blaH blah
-No match
-
-/((?i)blah)\s+(?i:\1)/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- blah BLAH
- 0: blah BLAH
- 1: blah
- Blah blah
- 0: Blah blah
- 1: Blah
- blaH blah
- 0: blaH blah
- 1: blaH
-
-/(?>a*)*/
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
-
-/(abc|)+/
- abc
- 0: abc
- 1:
- abcabc
- 0: abcabc
- 1:
- abcabcabc
- 0: abcabcabc
- 1:
- xyz
- 0:
- 1:
-
-/([a]*)*/
- a
- 0: a
- 1:
- aaaaa
- 0: aaaaa
- 1:
-
-/([ab]*)*/
- a
- 0: a
- 1:
- b
- 0: b
- 1:
- ababab
- 0: ababab
- 1:
- aaaabcde
- 0: aaaab
- 1:
- bbbb
- 0: bbbb
- 1:
-
-/([^a]*)*/
- b
- 0: b
- 1:
- bbbb
- 0: bbbb
- 1:
- aaa
- 0:
- 1:
-
-/([^ab]*)*/
- cccc
- 0: cccc
- 1:
- abab
- 0:
- 1:
-
-/([a]*?)*/
- a
- 0:
- 1:
- aaaa
- 0:
- 1:
-
-/([ab]*?)*/
- a
- 0:
- 1:
- b
- 0:
- 1:
- abab
- 0:
- 1:
- baba
- 0:
- 1:
-
-/([^a]*?)*/
- b
- 0:
- 1:
- bbbb
- 0:
- 1:
- aaa
- 0:
- 1:
-
-/([^ab]*?)*/
- c
- 0:
- 1:
- cccc
- 0:
- 1:
- baba
- 0:
- 1:
-
-/(?>a*)*/
- a
- 0: a
- aaabcde
- 0: aaa
-
-/((?>a*))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
-/((?>a*?))*/
- aaaaa
- 0:
- 1:
- aabbaa
- 0:
- 1:
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 0: 12-sep-98
- 12-09-98
- 0: 12-09-98
- *** Failers
-No match
- sep-12-98
-No match
-
-/(?<=(foo))bar\1/
- foobarfoo
- 0: barfoo
- 1: foo
- foobarfootling
- 0: barfoo
- 1: foo
- *** Failers
-No match
- foobar
-No match
- barfoo
-No match
-
-/(?i:saturday|sunday)/
- saturday
- 0: saturday
- sunday
- 0: sunday
- Saturday
- 0: Saturday
- Sunday
- 0: Sunday
- SATURDAY
- 0: SATURDAY
- SUNDAY
- 0: SUNDAY
- SunDay
- 0: SunDay
-
-/(a(?i)bc|BB)x/
- abcx
- 0: abcx
- 1: abc
- aBCx
- 0: aBCx
- 1: aBC
- bbx
- 0: bbx
- 1: bb
- BBx
- 0: BBx
- 1: BB
- *** Failers
-No match
- abcX
-No match
- aBCX
-No match
- bbX
-No match
- BBX
-No match
-
-/^([ab](?i)[cd]|[ef])/
- ac
- 0: ac
- 1: ac
- aC
- 0: aC
- 1: aC
- bD
- 0: bD
- 1: bD
- elephant
- 0: e
- 1: e
- Europe
- 0: E
- 1: E
- frog
- 0: f
- 1: f
- France
- 0: F
- 1: F
- *** Failers
-No match
- Africa
-No match
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- 0: ab
- 1: ab
- aBd
- 0: aBd
- 1: aBd
- xy
- 0: xy
- 1: xy
- xY
- 0: xY
- 1: xY
- zebra
- 0: z
- 1: z
- Zambesi
- 0: Z
- 1: Z
- *** Failers
-No match
- aCD
-No match
- XY
-No match
-
-/(?<=foo\n)^bar/m
- foo\nbar
- 0: bar
- *** Failers
-No match
- bar
-No match
- baz\nbar
-No match
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- 0: baz
- barbarbaz
- 0: baz
- koobarbaz
- 0: baz
- *** Failers
-No match
- baz
-No match
- foobarbaz
-No match
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-No match
-/where it does set $1 to aa when matching aaaaaa./
-No match
-
-/^(a\1?){4}$/
- a
-No match
- aa
-No match
- aaa
-No match
- aaaa
- 0: aaaa
- 1: a
- aaaaa
- 0: aaaaa
- 1: a
- aaaaaaa
- 0: aaaaaaa
- 1: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- aaaaaaaaaaa
-No match
- aaaaaaaaaaaa
-No match
- aaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaa
-No match
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
-No match
- aa
-No match
- aaa
-No match
- aaaa
- 0: aaaa
- 1: a
- 2: a
- 3: a
- 4: a
- aaaaa
- 0: aaaaa
- 1: a
- 2: aa
- 3: a
- 4: a
- aaaaaa
- 0: aaaaaa
- 1: a
- 2: aa
- 3: a
- 4: aa
- aaaaaaa
- 0: aaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: aaaa
- aaaaaaaaaaa
-No match
- aaaaaaaaaaaa
-No match
- aaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaa
-No match
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-No match
-
-/abc/
- abc
- 0: abc
- xabcy
- 0: abc
- ababc
- 0: abc
- *** Failers
-No match
- xbc
-No match
- axc
-No match
- abx
-No match
-
-/ab*c/
- abc
- 0: abc
-
-/ab*bc/
- abc
- 0: abc
- abbc
- 0: abbc
- abbbbc
- 0: abbbbc
-
-/.{1}/
- abbbbc
- 0: a
-
-/.{3,4}/
- abbbbc
- 0: abbb
-
-/ab{0,}bc/
- abbbbc
- 0: abbbbc
-
-/ab+bc/
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abq
-No match
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,}bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
-
-/ab{3,4}bc/
- abbbbc
- 0: abbbbc
-
-/ab{4,5}bc/
- *** Failers
-No match
- abq
-No match
- abbbbc
-No match
-
-/ab?bc/
- abbc
- 0: abbc
- abc
- 0: abc
-
-/ab{0,1}bc/
- abc
- 0: abc
-
-/ab?bc/
-
-/ab?c/
- abc
- 0: abc
-
-/ab{0,1}c/
- abc
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- abbbbc
-No match
- abcc
-No match
-
-/^abc/
- abcc
- 0: abc
-
-/^abc$/
-
-/abc$/
- aabc
- 0: abc
- *** Failers
-No match
- aabc
- 0: abc
- aabcd
-No match
-
-/^/
- abc
- 0:
-
-/$/
- abc
- 0:
-
-/a.c/
- abc
- 0: abc
- axc
- 0: axc
-
-/a.*c/
- axyzc
- 0: axyzc
-
-/a[bc]d/
- abd
- 0: abd
- *** Failers
-No match
- axyzd
-No match
- abc
-No match
-
-/a[b-d]e/
- ace
- 0: ace
-
-/a[b-d]/
- aac
- 0: ac
-
-/a[-b]/
- a-
- 0: a-
-
-/a[b-]/
- a-
- 0: a-
-
-/a]/
- a]
- 0: a]
-
-/a[]]b/
- a]b
- 0: a]b
-
-/a[^bc]d/
- aed
- 0: aed
- *** Failers
-No match
- abd
-No match
- abd
-No match
-
-/a[^-b]c/
- adc
- 0: adc
-
-/a[^]b]c/
- adc
- 0: adc
- *** Failers
-No match
- a-c
- 0: a-c
- a]c
-No match
-
-/\ba\b/
- a-
- 0: a
- -a
- 0: a
- -a-
- 0: a
-
-/\by\b/
- *** Failers
-No match
- xy
-No match
- yz
-No match
- xyz
-No match
-
-/\Ba\B/
- *** Failers
- 0: a
- a-
-No match
- -a
-No match
- -a-
-No match
-
-/\By\b/
- xy
- 0: y
-
-/\by\B/
- yz
- 0: y
-
-/\By\B/
- xyz
- 0: y
-
-/\w/
- a
- 0: a
-
-/\W/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a\sb/
- a b
- 0: a b
-
-/a\Sb/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/\d/
- 1
- 0: 1
-
-/\D/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/[\w]/
- a
- 0: a
-
-/[\W]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a[\s]b/
- a b
- 0: a b
-
-/a[\S]b/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/[\d]/
- 1
- 0: 1
-
-/[\D]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/ab|cd/
- abc
- 0: ab
- abcd
- 0: ab
-
-/()ef/
- def
- 0: ef
- 1:
-
-/$b/
-
-/a\(b/
- a(b
- 0: a(b
-
-/a\(*b/
- ab
- 0: ab
- a((b
- 0: a((b
-
-/a\\b/
- a\b
-No match
-
-/((a))/
- abc
- 0: a
- 1: a
- 2: a
-
-/(a)b(c)/
- abc
- 0: abc
- 1: a
- 2: c
-
-/a+b+c/
- aabbabc
- 0: abc
-
-/a{1,}b{1,}c/
- aabbabc
- 0: abc
-
-/a.+?c/
- abcabc
- 0: abc
-
-/(a+|b)*/
- ab
- 0: ab
- 1: b
-
-/(a+|b){0,}/
- ab
- 0: ab
- 1: b
-
-/(a+|b)+/
- ab
- 0: ab
- 1: b
-
-/(a+|b){1,}/
- ab
- 0: ab
- 1: b
-
-/(a+|b)?/
- ab
- 0: a
- 1: a
-
-/(a+|b){0,1}/
- ab
- 0: a
- 1: a
-
-/[^ab]*/
- cde
- 0: cde
-
-/abc/
- *** Failers
-No match
- b
-No match
-
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
- 0: abbbcd
- 1: c
-
-/([abc])*bcd/
- abcd
- 0: abcd
- 1: a
-
-/a|b|c|d|e/
- e
- 0: e
-
-/(a|b|c|d|e)f/
- ef
- 0: ef
- 1: e
-
-/abcd*efg/
- abcdefg
- 0: abcdefg
-
-/ab*/
- xabyabbbz
- 0: ab
- xayabbbz
- 0: a
-
-/(ab|cd)e/
- abcde
- 0: cde
- 1: cd
-
-/[abhgefdc]ij/
- hij
- 0: hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
- 0: ef
- 1:
-
-/(a|b)c*d/
- abcd
- 0: bcd
- 1: b
-
-/(ab|ab*)bc/
- abc
- 0: abc
- 1: a
-
-/a([bc]*)c*/
- abc
- 0: abc
- 1: bc
-
-/a([bc]*)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]+)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]*)(c+d)/
- abcd
- 0: abcd
- 1: b
- 2: cd
-
-/a[bcd]*dcdcde/
- adcdcde
- 0: adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
-No match
- abcde
-No match
- adcdcde
-No match
-
-/(ab|a)b*c/
- abc
- 0: abc
- 1: ab
-
-/((a)(b)c)(d)/
- abcd
- 0: abcd
- 1: abc
- 2: a
- 3: b
- 4: d
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
- 0: alpha
-
-/^a(bc+|b[eh])g|.h$/
- abh
- 0: bh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- 0: effgz
- 1: effgz
- ij
- 0: ij
- 1: ij
- 2: j
- reffgz
- 0: effgz
- 1: effgz
- *** Failers
-No match
- effg
-No match
- bcdd
-No match
-
-/((((((((((a))))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/((((((((((a))))))))))\10/
- aa
- 0: aa
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/(((((((((a)))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-
-/multiple words of text/
- *** Failers
-No match
- aa
-No match
- uh-uh
-No match
-
-/multiple words/
- multiple words, yeah
- 0: multiple words
-
-/(.*)c(.*)/
- abcde
- 0: abcde
- 1: ab
- 2: de
-
-/\((.*), (.*)\)/
- (a, b)
- 0: (a, b)
- 1: a
- 2: b
-
-/[k]/
-
-/abcd/
- abcd
- 0: abcd
-
-/a(bc)d/
- abcd
- 0: abcd
- 1: bc
-
-/a[-]?c/
- ac
- 0: ac
-
-/(abc)\1/
- abcabc
- 0: abcabc
- 1: abc
-
-/([a-c]*)\1/
- abcabc
- 0: abcabc
- 1: abc
-
-/(a)|\1/
- a
- 0: a
- 1: a
- *** Failers
- 0: a
- 1: a
- ab
- 0: a
- 1: a
- x
-No match
-
-/(([a-c])b*?\2)*/
- ababbbcbc
- 0: ababb
- 1: bb
- 2: b
-
-/(([a-c])b*?\2){3}/
- ababbbcbc
- 0: ababbbcbc
- 1: cbc
- 2: c
-
-/((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
- 0: bbax
- 1: bbax
- 2: b
- 3: a
-
-/((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
- 0: bbaaaabba
- 1: bba
- 2: b
- 3: a
-
-/abc/i
- ABC
- 0: ABC
- XABCY
- 0: ABC
- ABABC
- 0: ABC
- *** Failers
-No match
- aaxabxbaxbbx
-No match
- XBC
-No match
- AXC
-No match
- ABX
-No match
-
-/ab*c/i
- ABC
- 0: ABC
-
-/ab*bc/i
- ABC
- 0: ABC
- ABBC
- 0: ABBC
-
-/ab*?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab+?bc/i
- ABBC
- 0: ABBC
-
-/ab+bc/i
- *** Failers
-No match
- ABC
-No match
- ABQ
-No match
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
-No match
- ABQ
-No match
- ABBBBC
-No match
-
-/ab??bc/i
- ABBC
- 0: ABBC
- ABC
- 0: ABC
-
-/ab{0,1}?bc/i
- ABC
- 0: ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
- 0: ABC
-
-/ab{0,1}?c/i
- ABC
- 0: ABC
-
-/^abc$/i
- ABC
- 0: ABC
- *** Failers
-No match
- ABBBBC
-No match
- ABCC
-No match
-
-/^abc/i
- ABCC
- 0: ABC
-
-/^abc$/i
-
-/abc$/i
- AABC
- 0: ABC
-
-/^/i
- ABC
- 0:
-
-/$/i
- ABC
- 0:
-
-/a.c/i
- ABC
- 0: ABC
- AXC
- 0: AXC
-
-/a.*?c/i
- AXYZC
- 0: AXYZC
-
-/a.*c/i
- *** Failers
-No match
- AABC
- 0: AABC
- AXYZD
-No match
-
-/a[bc]d/i
- ABD
- 0: ABD
-
-/a[b-d]e/i
- ACE
- 0: ACE
- *** Failers
-No match
- ABC
-No match
- ABD
-No match
-
-/a[b-d]/i
- AAC
- 0: AC
-
-/a[-b]/i
- A-
- 0: A-
-
-/a[b-]/i
- A-
- 0: A-
-
-/a]/i
- A]
- 0: A]
-
-/a[]]b/i
- A]B
- 0: A]B
-
-/a[^bc]d/i
- AED
- 0: AED
-
-/a[^-b]c/i
- ADC
- 0: ADC
- *** Failers
-No match
- ABD
-No match
- A-C
-No match
-
-/a[^]b]c/i
- ADC
- 0: ADC
-
-/ab|cd/i
- ABC
- 0: AB
- ABCD
- 0: AB
-
-/()ef/i
- DEF
- 0: EF
- 1:
-
-/$b/i
- *** Failers
-No match
- A]C
-No match
- B
-No match
-
-/a\(b/i
- A(B
- 0: A(B
-
-/a\(*b/i
- AB
- 0: AB
- A((B
- 0: A((B
-
-/a\\b/i
- A\B
-No match
-
-/((a))/i
- ABC
- 0: A
- 1: A
- 2: A
-
-/(a)b(c)/i
- ABC
- 0: ABC
- 1: A
- 2: C
-
-/a+b+c/i
- AABBABC
- 0: ABC
-
-/a{1,}b{1,}c/i
- AABBABC
- 0: ABC
-
-/a.+?c/i
- ABCABC
- 0: ABC
-
-/a.*?c/i
- ABCABC
- 0: ABC
-
-/a.{0,5}?c/i
- ABCABC
- 0: ABC
-
-/(a+|b)*/i
- AB
- 0: AB
- 1: B
-
-/(a+|b){0,}/i
- AB
- 0: AB
- 1: B
-
-/(a+|b)+/i
- AB
- 0: AB
- 1: B
-
-/(a+|b){1,}/i
- AB
- 0: AB
- 1: B
-
-/(a+|b)?/i
- AB
- 0: A
- 1: A
-
-/(a+|b){0,1}/i
- AB
- 0: A
- 1: A
-
-/(a+|b){0,1}?/i
- AB
- 0:
-
-/[^ab]*/i
- CDE
- 0: CDE
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
- 0: ABBBCD
- 1: C
-
-/([abc])*bcd/i
- ABCD
- 0: ABCD
- 1: A
-
-/a|b|c|d|e/i
- E
- 0: E
-
-/(a|b|c|d|e)f/i
- EF
- 0: EF
- 1: E
-
-/abcd*efg/i
- ABCDEFG
- 0: ABCDEFG
-
-/ab*/i
- XABYABBBZ
- 0: AB
- XAYABBBZ
- 0: A
-
-/(ab|cd)e/i
- ABCDE
- 0: CDE
- 1: CD
-
-/[abhgefdc]ij/i
- HIJ
- 0: HIJ
-
-/^(ab|cd)e/i
- ABCDE
-No match
-
-/(abc|)ef/i
- ABCDEF
- 0: EF
- 1:
-
-/(a|b)c*d/i
- ABCD
- 0: BCD
- 1: B
-
-/(ab|ab*)bc/i
- ABC
- 0: ABC
- 1: A
-
-/a([bc]*)c*/i
- ABC
- 0: ABC
- 1: BC
-
-/a([bc]*)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]+)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]*)(c+d)/i
- ABCD
- 0: ABCD
- 1: B
- 2: CD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
- 0: ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
- 0: ABC
- 1: AB
-
-/((a)(b)c)(d)/i
- ABCD
- 0: ABCD
- 1: ABC
- 2: A
- 3: B
- 4: D
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
- 0: ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
- 0: BH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- 0: EFFGZ
- 1: EFFGZ
- IJ
- 0: IJ
- 1: IJ
- 2: J
- REFFGZ
- 0: EFFGZ
- 1: EFFGZ
- *** Failers
-No match
- ADCDCDE
-No match
- EFFG
-No match
- BCDD
-No match
-
-/((((((((((a))))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/((((((((((a))))))))))\10/i
- AA
- 0: AA
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/(((((((((a)))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
- 0: A
- 1: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
- 0: C
- 1: C
-
-/multiple words of text/i
- *** Failers
-No match
- AA
-No match
- UH-UH
-No match
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
- 0: MULTIPLE WORDS
-
-/(.*)c(.*)/i
- ABCDE
- 0: ABCDE
- 1: AB
- 2: DE
-
-/\((.*), (.*)\)/i
- (A, B)
- 0: (A, B)
- 1: A
- 2: B
-
-/[k]/i
-
-/abcd/i
- ABCD
- 0: ABCD
-
-/a(bc)d/i
- ABCD
- 0: ABCD
- 1: BC
-
-/a[-]?c/i
- AC
- 0: AC
-
-/(abc)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/([a-c]*)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/a(?!b)./
- abad
- 0: ad
-
-/a(?=d)./
- abad
- 0: ad
-
-/a(?=c|d)./
- abad
- 0: ad
-
-/a(?:b|c|d)(.)/
- ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)*(.)/
- ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)+?(.)/
- ace
- 0: ace
- 1: e
- acdbcdbe
- 0: acd
- 1: d
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
- 0: acdb
- 1: b
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
- 0: acdbcd
- 1: d
-
-/((foo)|(bar))*/
- foobar
- 0: foobar
- 1: bar
- 2: foo
- 3: bar
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
- 0: ace
- 1: c
- 2: e
-
-/^(.+)?B/
- AB
- 0: AB
- 1: A
-
-/^([^a-z])|(\^)$/
- .
- 0: .
- 1: .
-
-/^[<>]&/
- <&OUT
- 0: <&
-
-/^(a\1?){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- *** Failers
-No match
- AB
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaaa
-No match
-
-/^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- *** Failers
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaaa
-No match
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
- 0: foobar
- 1: f
- 2: o
- 3: o
- 4: b
- 5: a
- 6: r
-
-/(?<=a)b/
- ab
- 0: b
- *** Failers
-No match
- cb
-No match
- b
-No match
-
-/(?<!c)b/
- ab
- 0: b
- b
- 0: b
- b
- 0: b
-
-/(?:..)*a/
- aba
- 0: aba
-
-/(?:..)*?a/
- aba
- 0: a
-
-/^(?:b|a(?=(.)))*\1/
- abc
- 0: ab
- 1: b
-
-/^(){3,5}/
- abc
- 0:
- 1:
-
-/^(a+)*ax/
- aax
- 0: aax
- 1: a
-
-/^((a|b)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
-
-/^((a|bc)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
-
-/(a|x)*ab/
- cab
- 0: ab
-
-/(a)*ab/
- cab
- 0: ab
-
-/(?:(?i)a)b/
- ab
- 0: ab
-
-/((?i)a)b/
- ab
- 0: ab
- 1: a
-
-/(?:(?i)a)b/
- Ab
- 0: Ab
-
-/((?i)a)b/
- Ab
- 0: Ab
- 1: A
-
-/(?:(?i)a)b/
- *** Failers
-No match
- cb
-No match
- aB
-No match
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
- 0: ab
-
-/((?i:a))b/
- ab
- 0: ab
- 1: a
-
-/(?i:a)b/
- Ab
- 0: Ab
-
-/((?i:a))b/
- Ab
- 0: Ab
- 1: A
-
-/(?i:a)b/
- *** Failers
-No match
- aB
-No match
- aB
-No match
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
- 0: ab
-
-/((?-i)a)b/i
- ab
- 0: ab
- 1: a
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- aB
- 0: aB
- Ab
-No match
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
- 0: ab
-
-/((?-i:a))b/i
- ab
- 0: ab
- 1: a
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
- *** Failers
-No match
- AB
-No match
- Ab
-No match
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
-No match
- AB
-No match
- a\nB
-No match
-
-/((?s-i:a.))b/i
- a\nB
- 0: a\x0aB
- 1: a\x0a
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
- 0: cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
- Ab4ab
- 0: Ab4ab
- 1: Ab
- ab4Ab
- 0: ab4Ab
- 1: ab
-
-/foo\w*\d{4}baz/
- foobar1234baz
- 0: foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
- 0: x~~
- 1: ~~
-
-/^a(?#xxx){3}c/
- aaac
- 0: aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
- 0: aaac
-
-/(?<![cd])b/
- *** Failers
-No match
- B\nB
-No match
- dbcb
-No match
-
-/(?<![cd])[ab]/
- dbaacb
- 0: a
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
- 0: a
-
-/(?<!cd)[ab]/
- cdaccb
- 0: b
-
-/^(?:a?b?)*$/
- *** Failers
-No match
- dbcb
-No match
- a--
-No match
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
- 0: a\x0ab
- 1: a\x0a
- 2: \x0a
- 3: b
-
-/((?m)^b$)/
- a\nb\nc\n
- 0: b
- 1: b
-
-/(?m)^b/
- a\nb\n
- 0: b
-
-/(?m)^(b)/
- a\nb\n
- 0: b
- 1: b
-
-/((?m)^b)/
- a\nb\n
- 0: b
- 1: b
-
-/\n((?m)^b)/
- a\nb\n
- 0: \x0ab
- 1: b
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
-
-/^b/
-
-/()^b/
- *** Failers
-No match
- a\nb\nc\n
-No match
- a\nb\nc\n
-No match
-
-/((?m)^b)/
- a\nb\nc\n
- 0: b
- 1: b
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
- a
- 0: a
-
-/(x)?(?(1)a|b)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(x)?(?(1)b|a)/
- a
- 0: a
-
-/()?(?(1)b|a)/
- a
- 0: a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
- a
- 0: a
- 1:
-
-/^(\()?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- *** Failers
-No match
- a
-No match
- blah)
-No match
- (blah
-No match
-
-/^(\(+)?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- *** Failers
-No match
- blah)
-No match
- (blah
-No match
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
- 0: a
-
-/(?(?=a)b|a)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(?(?=a)a|b)/
- a
- 0: a
-
-/(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
- one:
- 0: one:
- 1: one:
-
-/$(?<=^(a))/
- a
- 0:
- 1: a
-
-/(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
- *** Failers
-No match
- aaab
-No match
- aaab
-No match
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
-/(a*)b+/
- caab
- 0: aab
- 1: aa
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
- *** Failers
- 0: Failers
- 1: <unset>
- 2: Failers
- abcd:
-No match
- abcd:
-No match
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/([[:]+)/
- a:[b]:
- 0: :[
- 1: :[
-
-/([[=]+)/
- a=[b]=
- 0: =[
- 1: =[
-
-/([[.]+)/
- a.[b].
- 0: .[
- 1: .[
-
-/((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/a\Z/
- *** Failers
-No match
- aaab
-No match
- a\nb\n
-No match
-
-/b\Z/
- a\nb\n
- 0: b
-
-/b\z/
-
-/b\Z/
- a\nb
- 0: b
-
-/b\z/
- a\nb
- 0: b
- *** Failers
-No match
-
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- 0: a
- 1:
- abc
- 0: abc
- 1:
- a-b
- 0: a-b
- 1:
- 0-9
- 0: 0-9
- 1:
- a.b
- 0: a.b
- 1:
- 5.6.7
- 0: 5.6.7
- 1:
- the.quick.brown.fox
- 0: the.quick.brown.fox
- 1:
- a100.b200.300c
- 0: a100.b200.300c
- 1:
- 12-ab.1245
- 0: 12-ab.1245
- 1:
- ***Failers
-No match
- \
-No match
- .a
-No match
- -a
-No match
- a-
-No match
- a.
-No match
- a_b
-No match
- a.-
-No match
- a..
-No match
- ab..bc
-No match
- the.quick.brown.fox-
-No match
- the.quick.brown.fox.
-No match
- the.quick.brown.fox_
-No match
- the.quick.brown.fox+
-No match
-
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: wxyz
- *** Failers
-No match
- a rather long string that doesn't end with one of them
-No match
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
-No match
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
-No match
-
-/<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href=\'abcd xyz pqr\' cats
- 0: <a href='abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/((Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2: Z
-
-/(Z()|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
-
-/(Z(())|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
- 3:
-
-/((?>Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
-
-/((?>)+|A)*/
- ZABCDEFG
- 0:
- 1:
-
-/a*/g
- abbab
- 0: a
- 0:
- 0:
- 0: a
- 0:
- 0:
-
-/^[a-\d]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/^[\d-a]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/ End of testinput3 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput4 b/ext/pcre/pcrelib/testdata/testoutput4
deleted file mode 100644
index f1fbb564b5..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput4
+++ /dev/null
@@ -1,116 +0,0 @@
-PCRE version 3.4 22-Aug-2000
-
-/^[\w]+/
- *** Failers
-No match
- École
-No match
-
-/^[\w]+/Lfr
- École
- 0: École
-
-/^[\w]+/
- *** Failers
-No match
- École
-No match
-
-/^[\W]+/
- École
- 0: \xc9
-
-/^[\W]+/Lfr
- *** Failers
- 0: ***
- École
-No match
-
-/[\b]/
- \b
- 0: \x08
- *** Failers
-No match
- a
-No match
-
-/[\b]/Lfr
- \b
- 0: \x08
- *** Failers
-No match
- a
-No match
-
-/^\w+/
- *** Failers
-No match
- École
-No match
-
-/^\w+/Lfr
- École
- 0: École
-
-/(.+)\b(.+)/
- École
- 0: \xc9cole
- 1: \xc9
- 2: cole
-
-/(.+)\b(.+)/Lfr
- *** Failers
- 0: *** Failers
- 1: ***
- 2: Failers
- École
-No match
-
-/École/i
- École
- 0: \xc9cole
- *** Failers
-No match
- école
-No match
-
-/École/iLfr
- École
- 0: École
- école
- 0: école
-
-/\w/IS
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
- Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
-
-/\w/ISLfr
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
- Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
- À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å
- æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ
-
-/^[\xc8-\xc9]/iLfr
- École
- 0: É
- école
- 0: é
-
-/^[\xc8-\xc9]/Lfr
- École
- 0: É
- *** Failers
-No match
- école
-No match
-
-/ End of testinput4 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput5 b/ext/pcre/pcrelib/testdata/testoutput5
deleted file mode 100644
index 4b81ae39f4..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput5
+++ /dev/null
@@ -1,242 +0,0 @@
-PCRE version 3.4 22-Aug-2000
-
-/-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
-/-- strings automatically, do not use the \x{} construct except with --/
-No match
-/-- patterns that have the /8 option set, and don't use them without! --/
-No match
-
-/a.b/8
- acb
- 0: acb
- a\x7fb
- 0: a\x{7f}b
- a\x{100}b
- 0: a\x{100}b
- *** Failers
-No match
- a\nb
-No match
-
-/a(.{3})b/8
- a\x{4000}xyb
- 0: a\x{4000}xyb
- 1: \x{4000}xy
- a\x{4000}\x7fyb
- 0: a\x{4000}\x{7f}yb
- 1: \x{4000}\x{7f}y
- a\x{4000}\x{100}yb
- 0: a\x{4000}\x{100}yb
- 1: \x{4000}\x{100}y
- *** Failers
-No match
- a\x{4000}b
-No match
- ac\ncb
-No match
-
-/a(.*?)(.)/
- a\xc0\x88b
- 0: a\xc0
- 1:
- 2: \xc0
-
-/a(.*?)(.)/8
- a\x{100}b
- 0: a\x{100}
- 1:
- 2: \x{100}
-
-/a(.*)(.)/
- a\xc0\x88b
- 0: a\xc0\x88b
- 1: \xc0\x88
- 2: b
-
-/a(.*)(.)/8
- a\x{100}b
- 0: a\x{100}b
- 1: \x{100}
- 2: b
-
-/a(.)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: \xc0
- 2: \x92
-
-/a(.)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: \x{240}
- 2: b
-
-/a(.?)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: \xc0
- 2: \x92
-
-/a(.?)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: \x{240}
- 2: b
-
-/a(.??)(.)/
- a\xc0\x92bcd
- 0: a\xc0
- 1:
- 2: \xc0
-
-/a(.??)(.)/8
- a\x{240}bcd
- 0: a\x{240}
- 1:
- 2: \x{240}
-
-/a(.{3})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- *** Failers
-No match
- a\x{1234}b
-No match
- ac\ncb
-No match
-
-/a(.{3,})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxbcdefghijb
- 1: xxxxbcdefghij
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
- a\x{1234}b
-No match
-
-/a(.{3,}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
- a\x{1234}b
-No match
-
-/a(.{3,5})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- axbxxbcdefghijb
- 0: axbxxb
- 1: xbxx
- axxxxxbcdefghijb
- 0: axxxxxb
- 1: xxxxx
- *** Failers
-No match
- a\x{1234}b
-No match
- axxxxxxbcdefghijb
-No match
-
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- axbxxbcdefghijb
- 0: axbxxb
- 1: xbxx
- axxxxxbcdefghijb
- 0: axxxxxb
- 1: xxxxx
- *** Failers
-No match
- a\x{1234}b
-No match
- axxxxxxbcdefghijb
-No match
-
-/^[a\x{c0}]/8
- *** Failers
-No match
- \x{100}
-No match
-
-/(?<=aXb)cd/8
- aXbcd
- 0: cd
-
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
- 0: cd
-
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
- 0: cd
-
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- 0: \x{100}\x{100}\x{100}b
- *** Failers
-No match
- \x{100}\x{100}b
-No match
-
-/ End of testinput5 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput6 b/ext/pcre/pcrelib/testdata/testoutput6
deleted file mode 100644
index a805609a35..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput6
+++ /dev/null
@@ -1,185 +0,0 @@
-PCRE version 3.4 22-Aug-2000
-
-/\x{100}/8DM
-Memory allocation (code space): 11
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc0\x88
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 192
-Need char = 136
-
-/\x{1000}/8DM
-Memory allocation (code space): 12
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe0\x80\x84
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 224
-Need char = 132
-
-/\x{10000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\x80\x80\x82
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 130
-
-/\x{100000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\x80\x80\xa0
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 160
-
-/\x{1000000}/8DM
-Memory allocation (code space): 14
-------------------------------------------------------------------
- 0 10 Bra 0
- 3 5 \xf8\x80\x80\x80\x90
- 10 10 Ket
- 13 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 248
-Need char = 144
-
-/\x{4000000}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfc\x80\x80\x80\x80\x82
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 252
-Need char = 130
-
-/\x{7fffFFFF}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfd\xbf\xbf\xbf\xbf\xbf
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 253
-Need char = 191
-
-/[\x{ff}]/8DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 \xff
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 255
-No need char
-
-/[\x{100}]/8DM
-Memory allocation (code space): 40
-Failed: characters with values > 255 are not yet supported in classes at offset 7
-
-/\x{ffffffff}/8
-Failed: character value in \x{...} sequence is too large at offset 11
-
-/\x{100000000}/8
-Failed: character value in \x{...} sequence is too large at offset 12
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
- 0: \x{100}a\x{1234}
-
-/\x80/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc0\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 192
-Need char = 132
-
-/\xff/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xdf\x87
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 223
-Need char = 135
-
-/-- These tests are here rather than in testinput5 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-No match
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-No match
-
-/^[a\x{c0}]b/8
- \x{c0}b
- 0: \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aa
- 1: a\x{c0}a\x{c0}
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aaaa
- 1: a\x{c0}aa
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aaa
- 1: a\x{c0}a\x{c0}a
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- 0: a\x{c0}
- 1:
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}
- 1: a\x{c0}
-
-/ End of testinput6 /
-
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
deleted file mode 100644
index fd7b7ef1d3..0000000000
--- a/ext/pcre/php_pcre.c
+++ /dev/null
@@ -1,1465 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_pcre.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_smart_str.h"
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-
-#include "ext/standard/php_string.h"
-
-#define PREG_PATTERN_ORDER 0
-#define PREG_SET_ORDER 1
-
-#define PREG_SPLIT_NO_EMPTY (1<<0)
-#define PREG_SPLIT_DELIM_CAPTURE (1<<1)
-#define PREG_SPLIT_OFFSET_CAPTURE (1<<2)
-
-#define PREG_REPLACE_EVAL (1<<0)
-
-#define PREG_GREP_INVERT (1<<0)
-
-
-ZEND_DECLARE_MODULE_GLOBALS(pcre)
-
-
-static void *php_pcre_malloc(size_t size)
-{
- return pemalloc(size, 1);
-}
-
-
-static void php_pcre_free(void *ptr)
-{
- pefree(ptr, 1);
-}
-
-
-static void php_free_pcre_cache(void *data)
-{
- pcre_cache_entry *pce = (pcre_cache_entry *) data;
- pefree(pce->re, 1);
-#if HAVE_SETLOCALE
- if ((void*)pce->tables) pefree((void*)pce->tables, 1);
-#endif
-}
-
-
-static void php_pcre_init_globals(zend_pcre_globals *pcre_globals TSRMLS_DC)
-{
- zend_hash_init(&pcre_globals->pcre_cache, 0, NULL, php_free_pcre_cache, 1);
-}
-
-#ifdef ZTS
-static void php_pcre_shutdown_globals(zend_pcre_globals *pcre_globals TSRMLS_DC)
-{
- zend_hash_destroy(&pcre_globals->pcre_cache);
-}
-#endif
-
-
-static /* {{{ PHP_MINFO_FUNCTION(pcre) */
-PHP_MINFO_FUNCTION(pcre)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "PCRE (Perl Compatible Regular Expressions) Support", "enabled" );
- php_info_print_table_row(2, "PCRE Library Version", pcre_version() );
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(pcre) */
-static PHP_MINIT_FUNCTION(pcre)
-{
- ZEND_INIT_MODULE_GLOBALS(pcre, php_pcre_init_globals, php_pcre_shutdown_globals);
-
- REGISTER_LONG_CONSTANT("PREG_PATTERN_ORDER", PREG_PATTERN_ORDER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SET_ORDER", PREG_SET_ORDER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SPLIT_NO_EMPTY", PREG_SPLIT_NO_EMPTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SPLIT_DELIM_CAPTURE", PREG_SPLIT_DELIM_CAPTURE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SPLIT_OFFSET_CAPTURE", PREG_SPLIT_OFFSET_CAPTURE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_GREP_INVERT", PREG_GREP_INVERT, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(pcre) */
-static PHP_MSHUTDOWN_FUNCTION(pcre)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION(pcre) */
-static PHP_RINIT_FUNCTION(pcre)
-{
- pcre_malloc = php_pcre_malloc;
- pcre_free = php_pcre_free;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ pcre_get_compiled_regex
- */
-PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *preg_options) {
- pcre *re = NULL;
- int coptions = 0;
- int soptions = 0;
- const char *error;
- int erroffset;
- char delimiter;
- char start_delimiter;
- char end_delimiter;
- char *p, *pp;
- char *pattern;
- int regex_len;
- int do_study = 0;
- int poptions = 0;
- unsigned const char *tables = NULL;
-#if HAVE_SETLOCALE
- char *locale = setlocale(LC_CTYPE, NULL);
-#endif
- pcre_cache_entry *pce;
- pcre_cache_entry new_entry;
- TSRMLS_FETCH();
-
- /* Try to lookup the cached regex entry, and if successful, just pass
- back the compiled pattern, otherwise go on and compile it. */
- regex_len = strlen(regex);
- if (zend_hash_find(&PCRE_G(pcre_cache), regex, regex_len+1, (void **)&pce) == SUCCESS) {
-#if HAVE_SETLOCALE
- if (!strcmp(pce->locale, locale)) {
-#endif
- *extra = pce->extra;
- *preg_options = pce->preg_options;
- return pce->re;
-#if HAVE_SETLOCALE
- }
-#endif
- }
-
- p = regex;
-
- /* Parse through the leading whitespace, and display a warning if we
- get to the end without encountering a delimiter. */
- while (isspace((int)*p)) p++;
- if (*p == 0) {
- zend_error(E_WARNING, "Empty regular expression");
- return NULL;
- }
-
- /* Get the delimiter and display a warning if it is alphanumeric
- or a backslash. */
- delimiter = *p++;
- if (isalnum((int)delimiter) || delimiter == '\\') {
- zend_error(E_WARNING, "Delimiter must not be alphanumeric or backslash");
- return NULL;
- }
-
- start_delimiter = delimiter;
- if ((pp = strchr("([{< )]}> )]}>", delimiter)))
- delimiter = pp[5];
- end_delimiter = delimiter;
-
- if (start_delimiter == end_delimiter) {
- /* We need to iterate through the pattern, searching for the ending delimiter,
- but skipping the backslashed delimiters. If the ending delimiter is not
- found, display a warning. */
- pp = p;
- while (*pp != 0) {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == delimiter)
- break;
- pp++;
- }
- if (*pp == 0) {
- zend_error(E_WARNING, "No ending delimiter '%c' found", delimiter);
- return NULL;
- }
- } else {
- /* We iterate through the pattern, searching for the matching ending
- * delimiter. For each matching starting delimiter, we increment nesting
- * level, and decrement it for each matching ending delimiter. If we
- * reach the end of the pattern without matching, display a warning.
- */
- int brackets = 1; /* brackets nesting level */
- pp = p;
- while (*pp != 0) {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == end_delimiter && --brackets <= 0)
- break;
- else if (*pp == start_delimiter)
- brackets++;
- pp++;
- }
- if (*pp == 0) {
- zend_error(E_WARNING, "No ending matching delimiter '%c' found", end_delimiter);
- return NULL;
- }
- }
-
- /* Make a copy of the actual pattern. */
- pattern = estrndup(p, pp-p);
-
- /* Move on to the options */
- pp++;
-
- /* Clear out preg options */
- *preg_options = 0;
-
- /* Parse through the options, setting appropriate flags. Display
- a warning if we encounter an unknown modifier. */
- while (*pp != 0) {
- switch (*pp++) {
- /* Perl compatible options */
- case 'i': coptions |= PCRE_CASELESS; break;
- case 'm': coptions |= PCRE_MULTILINE; break;
- case 's': coptions |= PCRE_DOTALL; break;
- case 'x': coptions |= PCRE_EXTENDED; break;
-
- /* PCRE specific options */
- case 'A': coptions |= PCRE_ANCHORED; break;
- case 'D': coptions |= PCRE_DOLLAR_ENDONLY;break;
- case 'S': do_study = 1; break;
- case 'U': coptions |= PCRE_UNGREEDY; break;
- case 'X': coptions |= PCRE_EXTRA; break;
- case 'u': coptions |= PCRE_UTF8; break;
-
- /* Custom preg options */
- case 'e': poptions |= PREG_REPLACE_EVAL; break;
-
- case ' ':
- case '\n':
- break;
-
- default:
- zend_error(E_WARNING, "Unknown modifier '%c'", pp[-1]);
- efree(pattern);
- return NULL;
- }
- }
-
-#if HAVE_SETLOCALE
- if (strcmp(locale, "C"))
- tables = pcre_maketables();
-#endif
-
- /* Compile pattern and display a warning if compilation failed. */
- re = pcre_compile(pattern,
- coptions,
- &error,
- &erroffset,
- tables);
-
- if (re == NULL) {
- zend_error(E_WARNING, "Compilation failed: %s at offset %d\n", error, erroffset);
- efree(pattern);
- return NULL;
- }
-
- /* If study option was specified, study the pattern and
- store the result in extra for passing to pcre_exec. */
- if (do_study) {
- *extra = pcre_study(re, soptions, &error);
- if (error != NULL) {
- zend_error(E_WARNING, "Error while studying pattern");
- }
- }
-
- *preg_options = poptions;
-
- efree(pattern);
-
- /* Store the compiled pattern and extra info in the cache. */
- new_entry.re = re;
- new_entry.extra = *extra;
- new_entry.preg_options = poptions;
-#if HAVE_SETLOCALE
- new_entry.locale = locale;
- new_entry.tables = tables;
-#endif
- zend_hash_update(&PCRE_G(pcre_cache), regex, regex_len+1, (void *)&new_entry,
- sizeof(pcre_cache_entry), NULL);
-
- return re;
-}
-/* }}} */
-
-/* {{{ php_pcre_match
- */
-static void php_pcre_match(INTERNAL_FUNCTION_PARAMETERS, int global)
-{
- zval **regex, /* Regular expression */
- **subject, /* String to match against */
- **subpats = NULL, /* Array for subpatterns */
- **subpats_order, /* Order of the results in the subpatterns
- array for global match */
- *result_set, /* Holds a set of subpatterns after
- a global match */
- **match_sets = NULL; /* An array of sets of matches for each
- subpattern after a global match */
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int exoptions = 0; /* Execution options */
- int preg_options = 0; /* Custom preg options */
- int count = 0; /* Count of matched subpatterns */
- int *offsets; /* Array of subpattern offsets */
- int num_subpats; /* Number of captured subpatterns */
- int size_offsets; /* Size of the offsets array */
- int start_offset; /* Where the new search starts */
- int matched; /* Has anything matched */
- int i;
- int subpats_order_val = 0; /* Integer value of subpats_order */
- int g_notempty = 0; /* If the match should not be empty */
- const char **stringlist; /* Used to hold list of subpatterns */
- char *match; /* The current match */
-
-
- /* Get function parameters and do error-checking. */
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (global || zend_get_parameters_ex(2, &regex, &subject) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &regex, &subject, &subpats) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (global)
- subpats_order_val = PREG_PATTERN_ORDER;
- break;
-
- case 4:
- if (zend_get_parameters_ex(4, &regex, &subject, &subpats, &subpats_order) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure subpats_order is a number */
- convert_to_long_ex(subpats_order);
- subpats_order_val = Z_LVAL_PP(subpats_order);
- if (subpats_order_val < PREG_PATTERN_ORDER ||
- subpats_order_val > PREG_SET_ORDER) {
- zend_error(E_WARNING, "Wrong value for parameter 4 in call to preg_match_all()");
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(regex);
- convert_to_string_ex(subject);
-
- /* Make sure to clean up the passed array and initialize it. */
- if (subpats != NULL) {
- zval_dtor(*subpats);
- array_init(*subpats);
- }
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(Z_STRVAL_PP(regex), &extra, &preg_options)) == NULL) {
- RETURN_FALSE;
- }
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- pcre_fullinfo(re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);
- num_subpats++;
- size_offsets = num_subpats * 3;
- offsets = (int *)emalloc(size_offsets * sizeof(int));
-
- /* Allocate match sets array and initialize the values */
- if (global && subpats_order_val == PREG_PATTERN_ORDER) {
- match_sets = (zval **)emalloc(num_subpats * sizeof(zval *));
- for (i=0; i<num_subpats; i++) {
- ALLOC_ZVAL(match_sets[i]);
- array_init(match_sets[i]);
- INIT_PZVAL(match_sets[i]);
- }
- }
-
- /* Start from the beginning of the string */
- start_offset = 0;
- match = NULL;
- matched = 0;
-
- do {
- /* Execute the regular expression. */
- count = pcre_exec(re, extra, Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject), start_offset,
- exoptions|g_notempty, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- zend_error(E_NOTICE, "Matched, but too many substrings\n");
- count = size_offsets/3;
- }
-
- /* If something has matched */
- if (count >= 0) {
- matched++;
- match = Z_STRVAL_PP(subject) + offsets[0];
-
- /* If subpatterns array has been passed, fill it in with values. */
- if (subpats != NULL) {
- /* Try to get the list of substrings and display a warning if failed. */
- if (pcre_get_substring_list(Z_STRVAL_PP(subject),
- offsets, count, &stringlist) < 0) {
- efree(offsets);
- efree(re);
- zend_error(E_WARNING, "Get subpatterns list failed");
- return;
- }
-
- if (global) { /* global pattern matching */
- if (subpats_order_val == PREG_PATTERN_ORDER) {
- /* For each subpattern, insert it into the appropriate array. */
- for (i = 0; i < count; i++) {
- add_next_index_stringl(match_sets[i], (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- /*
- * If the number of captured subpatterns on this run is
- * less than the total possible number, pad the result
- * arrays with empty strings.
- */
- if (count < num_subpats) {
- for (; i < num_subpats; i++) {
- add_next_index_string(match_sets[i], empty_string, 1);
- }
- }
- } else {
- /* Allocate the result set array */
- ALLOC_ZVAL(result_set);
- array_init(result_set);
- INIT_PZVAL(result_set);
-
- /* Add all the subpatterns to it */
- for (i = 0; i < count; i++) {
- add_next_index_stringl(result_set, (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- /* And add it to the output array */
- zend_hash_next_index_insert(Z_ARRVAL_PP(subpats), &result_set,
- sizeof(zval *), NULL);
- }
- }
- else { /* single pattern matching */
- /* For each subpattern, insert it into the subpatterns array. */
- for (i = 0; i < count; i++) {
- add_next_index_stringl((*subpats), (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- }
-
- php_pcre_free((void *) stringlist);
- }
- }
- else { /* Failed to match */
- /* If we previously set PCRE_NOTEMPTY after a null match,
- this is not necessarily the end. We need to advance
- the start offset, and continue. Fudge the offset values
- to achieve this, unless we're already at the end of the string. */
- if (g_notempty != 0 && start_offset < Z_STRLEN_PP(subject)) {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- } else
- break;
- }
-
- /* If we have matched an empty string, mimic what Perl's /g options does.
- This turns out to be rather cunning. First we set PCRE_NOTEMPTY and try
- the match again at the same point. If this fails (picked up above) we
- advance to the next character. */
- g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY | PCRE_ANCHORED : 0;
-
- /* Advance to the position right after the last full match */
- start_offset = offsets[1];
- } while (global);
-
- /* Add the match sets to the output array and clean up */
- if (global && subpats_order_val == PREG_PATTERN_ORDER) {
- for (i=0; i<num_subpats; i++) {
- zend_hash_next_index_insert(Z_ARRVAL_PP(subpats), &match_sets[i], sizeof(zval *), NULL);
- }
- efree(match_sets);
- }
-
- efree(offsets);
-
- RETVAL_LONG(matched);
-}
-/* }}} */
-
-/* {{{ proto int preg_match(string pattern, string subject [, array subpatterns])
- Perform a Perl-style regular expression match */
-PHP_FUNCTION(preg_match)
-{
- php_pcre_match(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int preg_match_all(string pattern, string subject, array subpatterns [, int order])
- Perform a Perl-style global regular expression match */
-PHP_FUNCTION(preg_match_all)
-{
- php_pcre_match(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ preg_get_backref
- */
-static inline int preg_get_backref(const char *walk, int *backref)
-{
- if (*walk && *walk >= '0' && *walk <= '9')
- *backref = *walk - '0';
- else
- return 0;
-
- if (walk[1] && walk[1] >= '0' && walk[1] <= '9')
- *backref = *backref * 10 + walk[1] - '0';
-
- return 1;
-}
-/* }}} */
-
-/* {{{ preg_do_repl_func
- */
-static int preg_do_repl_func(zval *function, char *subject, int *offsets, int count, char **result)
-{
- zval *retval_ptr; /* Function return value */
- zval **args[1]; /* Argument to pass to function */
- zval *subpats; /* Captured subpatterns */
- int result_len; /* Return value length */
- int i;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(subpats);
- array_init(subpats);
- for (i = 0; i < count; i++)
- add_next_index_stringl(subpats, &subject[offsets[i<<1]], offsets[(i<<1)+1] - offsets[i<<1], 1);
- args[0] = &subpats;
-
- if (call_user_function_ex(EG(function_table), NULL, function, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- convert_to_string_ex(&retval_ptr);
- *result = estrndup(Z_STRVAL_P(retval_ptr), Z_STRLEN_P(retval_ptr));
- result_len = Z_STRLEN_P(retval_ptr);
- zval_ptr_dtor(&retval_ptr);
- } else {
- php_error(E_WARNING, "Unable to call custom replacement function");
- result_len = offsets[1] - offsets[0];
- *result = estrndup(&subject[offsets[0]], result_len);
- }
- zval_dtor(subpats);
- FREE_ZVAL(subpats);
-
- return result_len;
-}
-/* }}} */
-
-/* {{{ preg_do_eval
- */
-static int preg_do_eval(char *eval_str, int eval_str_len, char *subject,
- int *offsets, int count, char **result TSRMLS_DC)
-{
- zval retval; /* Return value from evaluation */
- char *eval_str_end, /* End of eval string */
- *match, /* Current match for a backref */
- *esc_match, /* Quote-escaped match */
- *walk, /* Used to walk the code string */
- *segment, /* Start of segment to append while walking */
- walk_last; /* Last walked character */
- int match_len; /* Length of the match */
- int esc_match_len; /* Length of the quote-escaped match */
- int result_len; /* Length of the result of the evaluation */
- int backref; /* Current backref */
- char *compiled_string_description;
- smart_str code = {0};
-
- eval_str_end = eval_str + eval_str_len;
- walk = segment = eval_str;
- walk_last = 0;
-
- while (walk < eval_str_end) {
- /* If found a backreference.. */
- if ('\\' == *walk || '$' == *walk) {
- smart_str_appendl(&code, segment, walk - segment);
- if (walk_last == '\\') {
- code.c[code.len-1] = *walk++;
- segment = walk;
- walk_last = 0;
- continue;
- }
- segment = walk;
- if (preg_get_backref(walk+1, &backref)) {
- if (backref < count) {
- /* Find the corresponding string match and substitute it
- in instead of the backref */
- match = subject + offsets[backref<<1];
- match_len = offsets[(backref<<1)+1] - offsets[backref<<1];
- if (match_len)
- esc_match = php_addslashes(match, match_len, &esc_match_len, 0 TSRMLS_CC);
- else {
- esc_match = match;
- esc_match_len = 0;
- }
- } else {
- esc_match = empty_string;
- esc_match_len = 0;
- match_len = 0;
- }
- smart_str_appendl(&code, esc_match, esc_match_len);
-
- /* Adjust the walk pointer */
- walk += (backref > 9 ? 3 : 2);
- segment = walk;
-
- /* Clean up and reassign */
- if (esc_match_len)
- efree(esc_match);
- continue;
- }
- }
- walk++;
- walk_last = walk[-1];
- }
- smart_str_appendl(&code, segment, walk - segment);
- smart_str_0(&code);
-
- compiled_string_description = zend_make_compiled_string_description("regexp code" TSRMLS_CC);
- /* Run the code */
- if (zend_eval_string(code.c, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
- efree(compiled_string_description);
- zend_error(E_ERROR, "Failed evaluating code:\n%s\n", code);
- /* zend_error() does not return in this case */
- }
- efree(compiled_string_description);
- convert_to_string(&retval);
-
- /* Save the return value and its length */
- *result = estrndup(Z_STRVAL(retval), Z_STRLEN(retval));
- result_len = Z_STRLEN(retval);
-
- /* Clean up */
- zval_dtor(&retval);
- smart_str_free(&code);
-
- return result_len;
-}
-/* }}} */
-
-/* {{{ php_pcre_replace
- */
-PHPAPI char *php_pcre_replace(char *regex, int regex_len,
- char *subject, int subject_len,
- zval *replace_val, int is_callable_replace,
- int *result_len, int limit TSRMLS_DC)
-{
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int exoptions = 0; /* Execution options */
- int preg_options = 0; /* Custom preg options */
- int count = 0; /* Count of matched subpatterns */
- int *offsets; /* Array of subpattern offsets */
- int size_offsets; /* Size of the offsets array */
- int new_len; /* Length of needed storage */
- int alloc_len; /* Actual allocated length */
- int eval_result_len=0; /* Length of the eval'ed or
- function-returned string */
- int match_len; /* Length of the current match */
- int backref; /* Backreference number */
- int eval; /* If the replacement string should be eval'ed */
- int start_offset; /* Where the new search starts */
- int g_notempty = 0; /* If the match should not be empty */
- int replace_len; /* Length of replacement string */
- char *result, /* Result of replacement */
- *replace, /* Replacement string */
- *new_buf, /* Temporary buffer for re-allocation */
- *walkbuf, /* Location of current replacement in the result */
- *walk, /* Used to walk the replacement string */
- *match, /* The current match */
- *piece, /* The current piece of subject */
- *replace_end, /* End of replacement string */
- *eval_result, /* Result of eval or custom function */
- walk_last; /* Last walked character */
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(regex, &extra, &preg_options)) == NULL) {
- return NULL;
- }
-
- eval = preg_options & PREG_REPLACE_EVAL;
- if (is_callable_replace) {
- if (eval) {
- php_error(E_WARNING, "/e modifier cannot be used with replacement callback");
- return NULL;
- }
- } else {
- replace = Z_STRVAL_P(replace_val);
- replace_len = Z_STRLEN_P(replace_val);
- replace_end = replace + replace_len;
- }
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- size_offsets = (pcre_info(re, NULL, NULL) + 1) * 3;
- offsets = (int *)emalloc(size_offsets * sizeof(int));
-
- alloc_len = 2 * subject_len + 1;
- result = emalloc(alloc_len * sizeof(char));
-
- /* Initialize */
- match = NULL;
- *result_len = 0;
- start_offset = 0;
-
- while (1) {
- /* Execute the regular expression. */
- count = pcre_exec(re, extra, subject, subject_len, start_offset,
- exoptions|g_notempty, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- zend_error(E_NOTICE, "Matched, but too many substrings\n");
- count = size_offsets/3;
- }
-
- piece = subject + start_offset;
-
- if (count > 0 && (limit == -1 || limit > 0)) {
- /* Set the match location in subject */
- match = subject + offsets[0];
-
- new_len = *result_len + offsets[0] - start_offset; /* part before the match */
-
- /* If evaluating, do it and add the return string's length */
- if (eval) {
- eval_result_len = preg_do_eval(replace, replace_len, subject,
- offsets, count, &eval_result TSRMLS_CC);
- new_len += eval_result_len;
- } else if (is_callable_replace) {
- /* Use custom function to get replacement string and its length. */
- eval_result_len = preg_do_repl_func(replace_val, subject, offsets,
- count, &eval_result);
- new_len += eval_result_len;
- } else { /* do regular substitution */
- walk = replace;
- walk_last = 0;
- while (walk < replace_end) {
- if ('\\' == *walk || '$' == *walk) {
- if (walk_last == '\\') {
- walk++;
- walk_last = 0;
- continue;
- }
- if (preg_get_backref(walk+1, &backref)) {
- if (backref < count)
- new_len += offsets[(backref<<1)+1] - offsets[backref<<1];
- walk += (backref > 9) ? 3 : 2;
- continue;
- }
- }
- new_len++;
- walk++;
- walk_last = walk[-1];
- }
- }
-
- if (new_len + 1 > alloc_len) {
- alloc_len = 1 + alloc_len + 2 * new_len;
- new_buf = emalloc(alloc_len);
- memcpy(new_buf, result, *result_len);
- efree(result);
- result = new_buf;
- }
- /* copy the part of the string before the match */
- memcpy(&result[*result_len], piece, match-piece);
- *result_len += match-piece;
-
- /* copy replacement and backrefs */
- walkbuf = result + *result_len;
-
- /* If evaluating or using custom function, copy result to the buffer
- * and clean up. */
- if (eval || is_callable_replace) {
- memcpy(walkbuf, eval_result, eval_result_len);
- *result_len += eval_result_len;
- STR_FREE(eval_result);
- } else { /* do regular backreference copying */
- walk = replace;
- walk_last = 0;
- while (walk < replace_end) {
- if ('\\' == *walk || '$' == *walk) {
- if (walk_last == '\\') {
- *(walkbuf-1) = *walk++;
- walk_last = 0;
- continue;
- }
- if (preg_get_backref(walk+1, &backref)) {
- if (backref < count) {
- match_len = offsets[(backref<<1)+1] - offsets[backref<<1];
- memcpy(walkbuf, subject + offsets[backref<<1], match_len);
- walkbuf += match_len;
- }
- walk += (backref > 9) ? 3 : 2;
- continue;
- }
- }
- *walkbuf++ = *walk++;
- walk_last = walk[-1];
- }
- *walkbuf = '\0';
- /* increment the result length by how much we've added to the string */
- *result_len += walkbuf - (result + *result_len);
- }
-
- if (limit != -1)
- limit--;
-
- } else { /* Failed to match */
- /* If we previously set PCRE_NOTEMPTY after a null match,
- this is not necessarily the end. We need to advance
- the start offset, and continue. Fudge the offset values
- to achieve this, unless we're already at the end of the string. */
- if (g_notempty != 0 && start_offset < subject_len) {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- memcpy(&result[*result_len], piece, 1);
- (*result_len)++;
- } else {
- new_len = *result_len + subject_len - start_offset;
- if (new_len + 1 > alloc_len) {
- alloc_len = new_len + 1; /* now we know exactly how long it is */
- new_buf = emalloc(alloc_len * sizeof(char));
- memcpy(new_buf, result, *result_len);
- efree(result);
- result = new_buf;
- }
- /* stick that last bit of string on our output */
- memcpy(&result[*result_len], piece, subject_len - start_offset);
- *result_len += subject_len - start_offset;
- result[*result_len] = '\0';
- break;
- }
- }
-
- /* If we have matched an empty string, mimic what Perl's /g options does.
- This turns out to be rather cunning. First we set PCRE_NOTEMPTY and try
- the match again at the same point. If this fails (picked up above) we
- advance to the next character. */
- g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY | PCRE_ANCHORED : 0;
-
- /* Advance to the next piece. */
- start_offset = offsets[1];
- }
-
- efree(offsets);
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_replace_in_subject
- */
-static char *php_replace_in_subject(zval *regex, zval *replace, zval **subject, int *result_len, int limit, zend_bool is_callable_replace TSRMLS_DC)
-{
- zval **regex_entry,
- **replace_entry = NULL,
- *replace_value,
- empty_replace;
- char *subject_value,
- *result;
- int subject_len;
-
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(subject);
- ZVAL_STRINGL(&empty_replace, empty_string, 0, 0);
-
- /* If regex is an array */
- if (Z_TYPE_P(regex) == IS_ARRAY) {
- /* Duplicate subject string for repeated replacement */
- subject_value = estrndup(Z_STRVAL_PP(subject), Z_STRLEN_PP(subject));
- subject_len = Z_STRLEN_PP(subject);
- *result_len = subject_len;
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(regex));
-
- replace_value = replace;
- if (Z_TYPE_P(replace) == IS_ARRAY && !is_callable_replace)
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(replace));
-
- /* For each entry in the regex array, get the entry */
- while (zend_hash_get_current_data(Z_ARRVAL_P(regex), (void **)&regex_entry) == SUCCESS) {
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(regex_entry);
-
- /* If replace is an array and not a callable construct */
- if (Z_TYPE_P(replace) == IS_ARRAY && !is_callable_replace) {
- /* Get current entry */
- if (zend_hash_get_current_data(Z_ARRVAL_P(replace), (void **)&replace_entry) == SUCCESS) {
- if (!is_callable_replace) {
- convert_to_string_ex(replace_entry);
- }
- replace_value = *replace_entry;
- zend_hash_move_forward(Z_ARRVAL_P(replace));
- } else {
- /* We've run out of replacement strings, so use an empty one */
- replace_value = &empty_replace;
- }
- }
-
- /* Do the actual replacement and put the result back into subject_value
- for further replacements. */
- if ((result = php_pcre_replace(Z_STRVAL_PP(regex_entry),
- Z_STRLEN_PP(regex_entry),
- subject_value,
- subject_len,
- replace_value,
- is_callable_replace,
- result_len,
- limit TSRMLS_CC)) != NULL) {
- efree(subject_value);
- subject_value = result;
- subject_len = *result_len;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(regex));
- }
-
- return subject_value;
- } else {
- result = php_pcre_replace(Z_STRVAL_P(regex),
- Z_STRLEN_P(regex),
- Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject),
- replace,
- is_callable_replace,
- result_len,
- limit TSRMLS_CC);
- return result;
- }
-}
-/* }}} */
-
-/* {{{ preg_replace_impl
- */
-static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callable_replace)
-{
- zval **regex,
- **replace,
- **subject,
- **limit,
- **subject_entry;
- char *result;
- int result_len;
- int limit_val = -1;
- char *string_key;
- ulong num_key;
- char *callback_name = NULL;
-
- /* Get function parameters and do error-checking. */
- if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &regex, &replace, &subject, &limit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- SEPARATE_ZVAL(replace);
- if (Z_TYPE_PP(replace) != IS_ARRAY)
- convert_to_string_ex(replace);
- if (is_callable_replace) {
- if (!zend_is_callable(*replace, 0, &callback_name)) {
- php_error(E_WARNING, "%s() requires argument 2, '%s', to be a valid callback",
- get_active_function_name(TSRMLS_C), callback_name);
- efree(callback_name);
- *return_value = **subject;
- zval_copy_ctor(return_value);
- return;
- }
- efree(callback_name);
- }
-
- SEPARATE_ZVAL(regex);
- SEPARATE_ZVAL(subject);
-
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(limit);
- limit_val = Z_LVAL_PP(limit);
- }
-
- if (Z_TYPE_PP(regex) != IS_ARRAY)
- convert_to_string_ex(regex);
-
- /* if subject is an array */
- if (Z_TYPE_PP(subject) == IS_ARRAY) {
- array_init(return_value);
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(subject));
-
- /* For each subject entry, convert it to string, then perform replacement
- and add the result to the return_value array. */
- while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) == SUCCESS) {
- if ((result = php_replace_in_subject(*regex, *replace, subject_entry, &result_len, limit_val, is_callable_replace TSRMLS_CC)) != NULL) {
- /* Add to return array */
- switch(zend_hash_get_current_key(Z_ARRVAL_PP(subject), &string_key, &num_key, 0))
- {
- case HASH_KEY_IS_STRING:
- add_assoc_stringl(return_value, string_key, result, result_len, 0);
- break;
-
- case HASH_KEY_IS_LONG:
- add_index_stringl(return_value, num_key, result, result_len, 0);
- break;
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(subject));
- }
- }
- else { /* if subject is not an array */
- if ((result = php_replace_in_subject(*regex, *replace, subject, &result_len, limit_val, is_callable_replace TSRMLS_CC)) != NULL) {
- RETVAL_STRINGL(result, result_len, 0);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit])
- Perform Perl-style regular expression replacement. */
-PHP_FUNCTION(preg_replace)
-{
- preg_replace_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit])
- Perform Perl-style regular expression replacement using replacement callback. */
-PHP_FUNCTION(preg_replace_callback)
-{
- preg_replace_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-static inline void add_offset_pair(zval *result, char *str, int len, int offset)
-{
- zval *match_pair;
-
- ALLOC_ZVAL(match_pair);
- array_init(match_pair);
- INIT_PZVAL(match_pair);
-
- /* Add (match, offset) to the return value */
- add_next_index_stringl(match_pair, str, len, 1);
- add_next_index_long(match_pair, offset);
-
- zend_hash_next_index_insert(Z_ARRVAL_P(result), &match_pair, sizeof(zval *), NULL);
-}
-
-/* {{{ proto array preg_split(string pattern, string subject [, int limit [, int flags]])
- Split string into an array using a perl-style regular expression as a delimiter */
-PHP_FUNCTION(preg_split)
-{
- zval **regex, /* Regular expression to split by */
- **subject, /* Subject string to split */
- **limit, /* Number of pieces to return */
- **flags;
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int *offsets; /* Array of subpattern offsets */
- int size_offsets; /* Size of the offsets array */
- int exoptions = 0; /* Execution options */
- int preg_options = 0; /* Custom preg options */
- int argc; /* Argument count */
- int limit_val = -1; /* Integer value of limit */
- int no_empty = 0; /* If NO_EMPTY flag is set */
- int delim_capture = 0; /* If delimiters should be captured */
- int offset_capture = 0;/* If offsets should be captured */
- int count = 0; /* Count of matched subpatterns */
- int start_offset; /* Where the new search starts */
- int next_offset; /* End of the last delimiter match + 1 */
- int g_notempty = 0; /* If the match should not be empty */
- char *match, /* The current match */
- *last_match; /* Location of last match */
-
- /* Get function parameters and do error checking */
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 4 || zend_get_parameters_ex(argc, &regex, &subject, &limit, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 2) {
- convert_to_long_ex(limit);
- limit_val = Z_LVAL_PP(limit);
- if (limit_val == 0)
- limit_val = -1;
-
- if (argc > 3) {
- convert_to_long_ex(flags);
- no_empty = Z_LVAL_PP(flags) & PREG_SPLIT_NO_EMPTY;
- delim_capture = Z_LVAL_PP(flags) & PREG_SPLIT_DELIM_CAPTURE;
- offset_capture = Z_LVAL_PP(flags) & PREG_SPLIT_OFFSET_CAPTURE;
- }
- }
-
- /* Make sure we're dealing with strings */
- convert_to_string_ex(regex);
- convert_to_string_ex(subject);
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(Z_STRVAL_PP(regex), &extra, &preg_options)) == NULL) {
- RETURN_FALSE;
- }
-
- /* Initialize return value */
- array_init(return_value);
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- size_offsets = (pcre_info(re, NULL, NULL) + 1) * 3;
- offsets = (int *)emalloc(size_offsets * sizeof(int));
-
- /* Start at the beginning of the string */
- start_offset = 0;
- next_offset = 0;
- last_match = Z_STRVAL_PP(subject);
- match = NULL;
-
- /* Get next piece if no limit or limit not yet reached and something matched*/
- while ((limit_val == -1 || limit_val > 1)) {
- count = pcre_exec(re, extra, Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject), start_offset,
- exoptions|g_notempty, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- zend_error(E_NOTICE, "Matched, but too many substrings\n");
- count = size_offsets/3;
- }
-
- /* If something matched */
- if (count > 0) {
- match = Z_STRVAL_PP(subject) + offsets[0];
-
- if (!no_empty || &Z_STRVAL_PP(subject)[offsets[0]] != last_match) {
-
- if (offset_capture) {
- /* Add (match, offset) pair to the return value */
- add_offset_pair(return_value, last_match, &Z_STRVAL_PP(subject)[offsets[0]]-last_match, next_offset);
- } else {
- /* Add the piece to the return value */
- add_next_index_stringl(return_value, last_match,
- &Z_STRVAL_PP(subject)[offsets[0]]-last_match, 1);
- }
-
- /* One less left to do */
- if (limit_val != -1)
- limit_val--;
- }
-
- last_match = &Z_STRVAL_PP(subject)[offsets[1]];
- next_offset = offsets[1];
-
- if (delim_capture) {
- int i, match_len;
- for (i = 1; i < count; i++) {
- match_len = offsets[(i<<1)+1] - offsets[i<<1];
- /* If we have matched a delimiter */
- if (!no_empty || match_len > 0) {
- if (offset_capture) {
- add_offset_pair(return_value, &Z_STRVAL_PP(subject)[offsets[i<<1]], match_len, offsets[i<<1]);
- } else {
- add_next_index_stringl(return_value,
- &Z_STRVAL_PP(subject)[offsets[i<<1]],
- match_len, 1);
- }
- }
- }
- }
- } else { /* Failed to match */
- /* If we previously set PCRE_NOTEMPTY after a null match,
- this is not necessarily the end. We need to advance
- the start offset, and continue. Fudge the offset values
- to achieve this, unless we're already at the end of the string. */
- if (g_notempty != 0 && start_offset < Z_STRLEN_PP(subject)) {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- } else
- break;
- }
-
- /* If we have matched an empty string, mimic what Perl's /g options does.
- This turns out to be rather cunning. First we set PCRE_NOTEMPTY and try
- the match again at the same point. If this fails (picked up above) we
- advance to the next character. */
- g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY | PCRE_ANCHORED : 0;
-
- /* Advance to the position right after the last full match */
- start_offset = offsets[1];
- }
-
-
- if (!no_empty || start_offset != Z_STRLEN_PP(subject))
- {
- if (offset_capture) {
- /* Add the last (match, offset) pair to the return value */
- add_offset_pair(return_value, &Z_STRVAL_PP(subject)[start_offset], Z_STRLEN_PP(subject) - start_offset, start_offset);
- } else {
- /* Add the last piece to the return value */
- add_next_index_string(return_value,
- &Z_STRVAL_PP(subject)[start_offset], 1);
- }
- }
-
-
- /* Clean up */
- efree(offsets);
-}
-/* }}} */
-
-/* {{{ proto string preg_quote(string str, string delim_char)
- Quote regular expression characters plus an optional character */
-PHP_FUNCTION(preg_quote)
-{
- zval **in_str_arg; /* Input string argument */
- zval **delim; /* Additional delimiter argument */
- char *in_str, /* Input string */
- *in_str_end, /* End of the input string */
- *out_str, /* Output string with quoted characters */
- *p, /* Iterator for input string */
- *q, /* Iterator for output string */
- delim_char=0, /* Delimiter character to be quoted */
- c; /* Current character */
- zend_bool quote_delim = 0; /* Whether to quote additional delim char */
-
- /* Get the arguments and check for errors */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &in_str_arg, &delim) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure we're working with strings */
- convert_to_string_ex(in_str_arg);
- in_str = Z_STRVAL_PP(in_str_arg);
- in_str_end = Z_STRVAL_PP(in_str_arg) + Z_STRLEN_PP(in_str_arg);
-
- /* Nothing to do if we got an empty string */
- if (in_str == in_str_end) {
- RETVAL_STRINGL(empty_string, 0, 0);
- }
-
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_string_ex(delim);
- if (Z_STRLEN_PP(delim) > 0) {
- delim_char = Z_STRVAL_PP(delim)[0];
- quote_delim = 1;
- }
- }
-
- /* Allocate enough memory so that even if each character
- is quoted, we won't run out of room */
- out_str = emalloc(2 * Z_STRLEN_PP(in_str_arg) + 1);
-
- /* Go through the string and quote necessary characters */
- for(p = in_str, q = out_str; p != in_str_end; p++) {
- c = *p;
- switch(c) {
- case '.':
- case '\\':
- case '+':
- case '*':
- case '?':
- case '[':
- case '^':
- case ']':
- case '$':
- case '(':
- case ')':
- case '{':
- case '}':
- case '=':
- case '!':
- case '>':
- case '<':
- case '|':
- case ':':
- *q++ = '\\';
- *q++ = c;
- break;
-
- default:
- if (quote_delim && c == delim_char)
- *q++ = '\\';
- *q++ = c;
- break;
- }
- }
- *q = '\0';
-
- /* Reallocate string and return it */
- RETVAL_STRINGL(erealloc(out_str, q - out_str + 1), q - out_str, 0);
-}
-/* }}} */
-
-/* {{{ proto array preg_grep(string regex, array input)
- Searches array and returns entries which match regex */
-PHP_FUNCTION(preg_grep)
-{
- zval **regex, /* Regular expression */
- **input, /* Input array */
- **flags,
- **entry; /* An entry in the input array */
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int preg_options = 0; /* Custom preg options */
- int *offsets; /* Array of subpattern offsets */
- int size_offsets; /* Size of the offsets array */
- int count = 0; /* Count of matched subpatterns */
- char *string_key;
- ulong num_key;
- zend_bool invert = 0; /* Whether to return non-matching
- entries */
-
- /* Get arguments and do error checking */
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &regex, &input, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- zend_error(E_WARNING, "Secong argument to preg_grep() should be an array");
- return;
- }
-
- SEPARATE_ZVAL(input);
-
- /* Make sure regex is a string */
- convert_to_string_ex(regex);
-
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_long_ex(flags);
- invert = (Z_LVAL_PP(flags) & PREG_GREP_INVERT) ? 1 : 0;
- }
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(Z_STRVAL_PP(regex), &extra, &preg_options)) == NULL) {
- RETURN_FALSE;
- }
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- size_offsets = (pcre_info(re, NULL, NULL) + 1) * 3;
- offsets = (int *)emalloc(size_offsets * sizeof(int));
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Go through the input array */
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(input));
- while(zend_hash_get_current_data(Z_ARRVAL_PP(input), (void **)&entry) == SUCCESS) {
-
- convert_to_string_ex(entry);
-
- /* Perform the match */
- count = pcre_exec(re, extra, Z_STRVAL_PP(entry),
- Z_STRLEN_PP(entry), 0,
- 0, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- zend_error(E_NOTICE, "Matched, but too many substrings\n");
- count = size_offsets/3;
- }
-
- /* If the entry fits our requirements */
- if ((count > 0 && !invert) ||
- (count < 0 && invert)) {
- (*entry)->refcount++;
-
- /* Add to return array */
- switch(zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key, 0))
- {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key,
- strlen(string_key)+1, entry, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry,
- sizeof(zval *), NULL);
- break;
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(input));
- }
-
- /* Clean up */
- efree(offsets);
-}
-/* }}} */
-
-/* {{{ module definition structures */
-
-function_entry pcre_functions[] = {
- PHP_FE(preg_match, third_arg_force_ref)
- PHP_FE(preg_match_all, third_arg_force_ref)
- PHP_FE(preg_replace, NULL)
- PHP_FE(preg_replace_callback, NULL)
- PHP_FE(preg_split, NULL)
- PHP_FE(preg_quote, NULL)
- PHP_FE(preg_grep, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry pcre_module_entry = {
- STANDARD_MODULE_HEADER,
- "pcre",
- pcre_functions,
- PHP_MINIT(pcre),
- PHP_MSHUTDOWN(pcre),
- PHP_RINIT(pcre),
- NULL,
- PHP_MINFO(pcre),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PCRE
-ZEND_GET_MODULE(pcre)
-#endif
-
-/* }}} */
-
-#endif /* HAVE_PCRE || HAVE_BUNDLED_PCRE */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/pcre/php_pcre.h b/ext/pcre/php_pcre.h
deleted file mode 100644
index 3512c78ba8..0000000000
--- a/ext/pcre/php_pcre.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_PCRE_H
-#define PHP_PCRE_H
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-
-#if HAVE_BUNDLED_PCRE
-#include "pcrelib/pcre.h"
-#else
-#include "pcre.h"
-#endif
-
-#if HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-PHP_FUNCTION(preg_match);
-PHP_FUNCTION(preg_match_all);
-PHP_FUNCTION(preg_replace);
-PHP_FUNCTION(preg_replace_callback);
-PHP_FUNCTION(preg_split);
-PHP_FUNCTION(preg_quote);
-PHP_FUNCTION(preg_grep);
-
-PHPAPI char *php_pcre_replace(char *regex, int regex_len, char *subject, int subject_len, zval *replace_val, int is_callable_replace, int *result_len, int limit TSRMLS_DC);
-PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *options);
-
-extern zend_module_entry pcre_module_entry;
-#define pcre_module_ptr &pcre_module_entry
-
-typedef struct {
- pcre *re;
- pcre_extra *extra;
- int preg_options;
-#if HAVE_SETLOCALE
- char *locale;
- unsigned const char *tables;
-#endif
-} pcre_cache_entry;
-
-ZEND_BEGIN_MODULE_GLOBALS(pcre)
- HashTable pcre_cache;
-ZEND_END_MODULE_GLOBALS(pcre)
-
-#ifdef ZTS
-# define PCRE_G(v) TSRMG(pcre_globals_id, zend_pcre_globals *, v)
-#else
-# define PCRE_G(v) (pcre_globals.v)
-#endif
-
-#else
-
-#define pcre_module_ptr NULL
-
-#endif /* HAVE_PCRE || HAVE_BUNDLED_PCRE */
-
-#define phpext_pcre_ptr pcre_module_ptr
-
-#endif /* PHP_PCRE_H */
diff --git a/ext/pdf/CREDITS b/ext/pdf/CREDITS
deleted file mode 100644
index 8bf39a0695..0000000000
--- a/ext/pdf/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-PDF
-Uwe Steinmann, Rainer Schaaf
diff --git a/ext/pdf/config.m4 b/ext/pdf/config.m4
deleted file mode 100644
index a41bffb235..0000000000
--- a/ext/pdf/config.m4
+++ /dev/null
@@ -1,124 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(pdflib,for PDFlib support,
-[ --with-pdflib[=DIR] Include PDFlib support.])
-
-if test "$PHP_PDFLIB" != "no"; then
-
- PHP_NEW_EXTENSION(pdf, pdf.c, $ext_shared)
- PHP_SUBST(PDFLIB_SHARED_LIBADD)
-
- dnl #
- dnl # Optional libraries for PDFlib
- dnl #
-
- dnl # libjpeg
-
- PHP_ARG_WITH(jpeg-dir, for the location of libjpeg,
- [ --with-jpeg-dir[=DIR] PDFLIB: define libjpeg install directory.
- (OPTIONAL for PDFlib v4)])
-
- if test "$PHP_JPEG_DIR" != "no"; then
- PHP_CHECK_LIBRARY(jpeg,jpeg_read_header,
- [
- PHP_ADD_LIBRARY_WITH_PATH(jpeg, $PHP_JPEG_DIR/lib, PDFLIB_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([libjpeg not found!])
- ],[
- -L$PHP_JPEG_DIR/lib
- ])
- else
- AC_MSG_WARN([If configure fails, try --with-jpeg-dir=<DIR>])
- fi
-
- dnl # libpng
-
- PHP_ARG_WITH(png-dir, for the location of libpng,
- [ --with-png-dir[=DIR] PDFLIB: define libpng install directory.
- (OPTIONAL for PDFlib v4)])
-
- if test "$PHP_PNG_DIR" != "no"; then
- PHP_CHECK_LIBRARY(png,png_create_info_struct,
- [
- PHP_ADD_LIBRARY_WITH_PATH(png, $PHP_PNG_DIR/lib, PDFLIB_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([libpng not found!])
- ],[
- -L$PHP_PNG_DIR/lib
- ])
- else
- AC_MSG_WARN([If configure fails, try --with-png-dir=<DIR>])
- fi
-
- dnl # libtiff
-
- PHP_ARG_WITH(tiff-dir, for the location of libtiff,
- [ --with-tiff-dir[=DIR] PDFLIB: define libtiff install directory.
- (OPTIONAL for PDFlib v4)])
-
- if test "$PHP_TIFF_DIR" != "no"; then
- PHP_CHECK_LIBRARY(tiff,TIFFOpen,
- [
- PHP_ADD_LIBRARY_WITH_PATH(tiff, $PHP_TIFF_DIR/lib, PDFLIB_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([libtiff not found!])
- ],[
- -L$PHP_TIFF_DIR/lib
- ])
- else
- AC_MSG_WARN([If configure fails, try --with-tiff-dir=<DIR>])
- fi
-
- dnl # zlib
-
- AC_MSG_CHECKING([for the location of zlib])
- if test "$PHP_ZLIB_DIR" = "no"; then
- AC_MSG_RESULT([no. If configure fails, try --with-zlib-dir=<DIR>])
- else
- AC_MSG_RESULT([$PHP_ZLIB_DIR])
- PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR/lib, PDFLIB_SHARED_LIBADD)
- fi
-
-
- dnl #
- dnl # The main PDFlib configure
- dnl #
-
- case $PHP_PDFLIB in
- yes)
- AC_CHECK_LIB(pdf, PDF_show_boxed, [
- AC_DEFINE(HAVE_PDFLIB,1,[ ])
- PHP_ADD_LIBRARY(pdf,, PDFLIB_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([
-PDFlib extension requires at least pdflib 3.x. You may also need libtiff, libjpeg, libpng and libz.
-Use the options --with-tiff-dir=<DIR>, --with-jpeg-dir=<DIR>, --with-png-dir=<DIR> and --with-zlib-dir=<DIR>
-See config.log for more information.
-])
- ])
- ;;
- *)
- if test -f "$PHP_PDFLIB/include/pdflib.h" ; then
-
- PHP_CHECK_LIBRARY(pdf, PDF_show_boxed,
- [
- AC_DEFINE(HAVE_PDFLIB,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(pdf, $PHP_PDFLIB/lib, PDFLIB_SHARED_LIBADD)
- PHP_ADD_INCLUDE($PHP_PDFLIB/include)
- ],[
- AC_MSG_ERROR([
-PDFlib extension requires at least pdflib 3.x. You may also need libtiff, libjpeg, libpng and libz.
-Use the options --with-tiff-dir=<DIR>, --with-jpeg-dir=<DIR>, --with-png-dir=<DIR> and --with-zlib-dir=<DIR>
-See config.log for more information.
-])
- ],[
- -L$PHP_PDFLIB/lib
- ])
- else
- AC_MSG_ERROR([pdflib.h not found! Check the path passed to --with-pdflib=<PATH>. PATH should be the install prefix directory.])
- fi
- ;;
- esac
-fi
diff --git a/ext/pdf/pdf.c b/ext/pdf/pdf.c
deleted file mode 100644
index c019b2f7b1..0000000000
--- a/ext/pdf/pdf.c
+++ /dev/null
@@ -1,3219 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- | Rainer Schaaf <rjs@pdflib.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* pdflib 2.02 ... 3.0x is subject to the ALADDIN FREE PUBLIC LICENSE.
- Copyright (C) 1997-1999 Thomas Merz. 2000-2001 PDFlib GmbH */
-/* Note that there is no code from the pdflib package in this file */
-
-/* {{{ includes
- */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "zend_list.h"
-#include "ext/standard/head.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "php_streams.h"
-
-#if HAVE_LIBGD13
-#include "ext/gd/php_gd.h"
-#include "gd.h"
-static int le_gd;
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef PHP_WIN32
-# include <io.h>
-# include <fcntl.h>
-#endif
-/* }}} */
-
-#if HAVE_PDFLIB
-
-#include "php_pdf.h"
-
-static int le_pdf;
-
-/* {{{ constants
- * to adopt the php way of error handling to PDFlib
- * The image related functions in PDFlib return -1 on error
- * but they may return 0 (FALSE) in normal cases
- * so this offset will repair this
- */
-#define PDFLIB_IMAGE_OFFSET 1
-#define PDFLIB_FONT_OFFSET 1
-#define PDFLIB_PDI_OFFSET 1
-#define PDFLIB_PATTERN_OFFSET 1
-#define PDFLIB_SPOT_OFFSET 1
-/* }}} */
-
-/* {{{ pdf_functions[]
- */
-function_entry pdf_functions[] = {
- PHP_FE(pdf_new, NULL) /* new function */
- PHP_FE(pdf_delete, NULL) /* new function */
- PHP_FE(pdf_open_file, NULL) /* new function */
- PHP_FE(pdf_get_buffer, NULL) /* new function */
- PHP_FE(pdf_close, NULL)
- PHP_FE(pdf_begin_page, NULL)
- PHP_FE(pdf_end_page, NULL)
- PHP_FE(pdf_get_majorversion, NULL)
- PHP_FE(pdf_get_minorversion, NULL)
- PHP_FE(pdf_get_value, NULL)
- PHP_FE(pdf_set_value, NULL)
- PHP_FE(pdf_get_parameter, NULL)
- PHP_FE(pdf_set_parameter, NULL)
- PHP_FE(pdf_findfont, NULL) /* new function */
- PHP_FE(pdf_setfont, NULL) /* new function */
- PHP_FE(pdf_show, NULL)
- PHP_FE(pdf_show_xy, NULL)
- PHP_FE(pdf_continue_text, NULL)
- PHP_FE(pdf_show_boxed, NULL)
- PHP_FE(pdf_stringwidth, NULL) /* new parameters: [int font, float size] */
- PHP_FE(pdf_set_text_pos, NULL)
- PHP_FE(pdf_setdash, NULL)
- PHP_FE(pdf_setpolydash, NULL) /* new function: not yet finished */
- PHP_FE(pdf_setflat, NULL)
- PHP_FE(pdf_setlinejoin, NULL)
- PHP_FE(pdf_setlinecap, NULL)
- PHP_FE(pdf_setmiterlimit, NULL)
- PHP_FE(pdf_setlinewidth, NULL)
- PHP_FE(pdf_save, NULL)
- PHP_FE(pdf_restore, NULL)
- PHP_FE(pdf_translate, NULL)
- PHP_FE(pdf_scale, NULL)
- PHP_FE(pdf_rotate, NULL)
- PHP_FE(pdf_skew, NULL)
- PHP_FE(pdf_concat, NULL) /* new function */
- PHP_FE(pdf_moveto, NULL)
- PHP_FE(pdf_lineto, NULL)
- PHP_FE(pdf_curveto, NULL)
- PHP_FE(pdf_circle, NULL)
- PHP_FE(pdf_arc, NULL)
- PHP_FE(pdf_rect, NULL)
- PHP_FE(pdf_closepath, NULL)
- PHP_FE(pdf_stroke, NULL)
- PHP_FE(pdf_closepath_stroke, NULL)
- PHP_FE(pdf_fill, NULL)
- PHP_FE(pdf_fill_stroke, NULL)
- PHP_FE(pdf_closepath_fill_stroke, NULL)
- PHP_FE(pdf_clip, NULL)
- PHP_FE(pdf_endpath, NULL)
- PHP_FE(pdf_open_image_file, NULL) /* new parameters: [char *stringpram, int intparam] */
- PHP_FE(pdf_open_ccitt, NULL) /* new function */
- PHP_FE(pdf_open_image, NULL) /* new function */
- PHP_FE(pdf_close_image, NULL)
- PHP_FE(pdf_place_image, NULL)
- PHP_FE(pdf_add_bookmark, NULL)
- PHP_FE(pdf_set_info, NULL)
- PHP_FE(pdf_attach_file, NULL) /* new function */
- PHP_FE(pdf_add_note, NULL) /* new function */
- PHP_FE(pdf_add_pdflink, NULL)
- PHP_FE(pdf_add_locallink, NULL) /* new function */
- PHP_FE(pdf_add_launchlink, NULL)/* new function */
- PHP_FE(pdf_add_weblink, NULL)
- PHP_FE(pdf_set_border_style, NULL)
- PHP_FE(pdf_set_border_color, NULL)
- PHP_FE(pdf_set_border_dash, NULL)
-
- /* End of the official PDFLIB V3.x API */
-
- /* aliases for compatibility reasons */
- PHP_FALIAS(pdf_add_outline, pdf_add_bookmark, NULL)
-
- /* old font handling */
- PHP_FE(pdf_set_font, NULL) /* deprecated */
- PHP_FE(pdf_get_font, NULL) /* deprecated */
- PHP_FE(pdf_get_fontname, NULL) /* deprecated */
- PHP_FE(pdf_get_fontsize, NULL) /* deprecated */
-
- /* old way of starting a PDF document */
- PHP_FE(pdf_open, NULL) /* deprecated */
-
- /* old stuff for setting infos */
- PHP_FE(pdf_set_info_creator, NULL) /* deprecated */
- PHP_FE(pdf_set_info_title, NULL) /* deprecated */
- PHP_FE(pdf_set_info_subject, NULL) /* deprecated */
- PHP_FE(pdf_set_info_author, NULL) /* deprecated */
- PHP_FE(pdf_set_info_keywords, NULL) /* deprecated */
- PHP_FE(pdf_set_leading, NULL) /* deprecated */
- PHP_FE(pdf_set_text_rendering, NULL) /* deprecated */
- PHP_FE(pdf_set_horiz_scaling, NULL) /* deprecated */
- PHP_FE(pdf_set_text_rise, NULL) /* deprecated */
- PHP_FE(pdf_set_char_spacing, NULL) /* deprecated */
- PHP_FE(pdf_set_word_spacing, NULL) /* deprecated */
- PHP_FE(pdf_set_transition, NULL) /* deprecated */
- PHP_FE(pdf_set_duration, NULL) /* deprecated */
- PHP_FE(pdf_get_image_height, NULL) /* deprecated */
- PHP_FE(pdf_get_image_width, NULL) /* deprecated */
-
- /* old stuff for opening images */
- PHP_FE(pdf_open_jpeg, NULL) /* deprecated */
- PHP_FE(pdf_open_tiff, NULL) /* deprecated */
- PHP_FE(pdf_open_png, NULL) /* deprecated */
- PHP_FE(pdf_open_gif, NULL) /* deprecated */
-
- /* some more stuff for compatibility */
- PHP_FE(pdf_add_annotation, NULL)
-#if HAVE_LIBGD13
- PHP_FE(pdf_open_memory_image, NULL)
-#endif
- /* depreciatet after V4.0 of PDFlib */
- PHP_FE(pdf_setgray_fill, NULL)
- PHP_FE(pdf_setgray_stroke, NULL)
- PHP_FE(pdf_setgray, NULL)
- PHP_FE(pdf_setrgbcolor_fill, NULL)
- PHP_FE(pdf_setrgbcolor_stroke, NULL)
- PHP_FE(pdf_setrgbcolor, NULL)
-
-#if (PDFLIB_MAJORVERSION >= 4)
-/* support for new functions in PDFlib V4.0 */
- PHP_FE(pdf_open_pdi, NULL)
- PHP_FE(pdf_close_pdi, NULL)
- PHP_FE(pdf_open_pdi_page, NULL)
- PHP_FE(pdf_place_pdi_page, NULL)
- PHP_FE(pdf_close_pdi_page, NULL)
- PHP_FE(pdf_get_pdi_parameter, NULL)
- PHP_FE(pdf_get_pdi_value, NULL)
- PHP_FE(pdf_begin_pattern, NULL)
- PHP_FE(pdf_end_pattern, NULL)
- PHP_FE(pdf_begin_template, NULL)
- PHP_FE(pdf_end_template, NULL)
- PHP_FE(pdf_setcolor, NULL)
- PHP_FE(pdf_makespotcolor, NULL)
- PHP_FE(pdf_arcn, NULL)
- PHP_FE(pdf_add_thumbnail, NULL)
- PHP_FE(pdf_initgraphics, NULL)
- PHP_FE(pdf_setmatrix, NULL)
-#endif /* PDFlib >= V4 */
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pdf_module_entry
- */
-zend_module_entry pdf_module_entry = {
- STANDARD_MODULE_HEADER,
- "pdf",
- pdf_functions,
- PHP_MINIT(pdf),
- PHP_MSHUTDOWN(pdf),
- NULL,
- NULL,
- PHP_MINFO(pdf),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDF
-ZEND_GET_MODULE(pdf)
-#endif
-
-/* {{{ _free_pdf_doc
- */
-static void _free_pdf_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PDF *pdf = (PDF *)rsrc->ptr;
- PDF_delete(pdf);
-}
-/* }}} */
-
-/* {{{ custom_errorhandler
- */
-static void custom_errorhandler(PDF *p, int type, const char *shortmsg)
-{
- switch (type){
- case PDF_NonfatalError:
- /*
- * PDFlib warnings should be visible to the user.
- * If he decides to live with PDFlib warnings
- * he may use the PDFlib function
- * pdf_set_parameter($p, "warning" 0) to switch off
- * the warnings inside PDFlib.
- */
- php_error(E_WARNING,"Internal PDFlib warning: %s", shortmsg);
- return;
- case PDF_MemoryError: /* give up in all other cases */
- case PDF_IOError:
- case PDF_RuntimeError:
- case PDF_IndexError:
- case PDF_TypeError:
- case PDF_DivisionByZero:
- case PDF_OverflowError:
- case PDF_SyntaxError:
- case PDF_ValueError:
- case PDF_SystemError:
- case PDF_UnknownError:
- default:
- if (p !=NULL) PDF_delete(p); /* clean up PDFlib */
- php_error(E_ERROR,"PDFlib error: %s", shortmsg);
- }
-}
-/* }}} */
-
-/* {{{ pdf_emalloc
- */
-static void *pdf_emalloc(PDF *p, size_t size, const char *caller)
-{
- return(emalloc(size));
-}
-/* }}} */
-
-/* {{{ pdf_realloc
- */
-static void *pdf_realloc(PDF *p, void *mem, size_t size, const char *caller)
-{
- return(erealloc(mem, size));
-}
-/* }}} */
-
-/* {{{ pdf_efree
- */
-static void pdf_efree(PDF *p, void *mem)
-{
- efree(mem);
-}
-/* }}} */
-
-/* {{{ pdf_flushwrite
- */
-static size_t pdf_flushwrite(PDF *p, void *data, size_t size)
-{
- TSRMLS_FETCH();
-
- return(php_write(data, size TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pdf)
-{
- char tmp[32];
-
- snprintf(tmp, 31, "%d.%02d", PDF_get_majorversion(), PDF_get_minorversion() );
- tmp[31]=0;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "PDF Support", "enabled" );
-#if (PDFLIB_MAJORVERSION >= 4)
- php_info_print_table_row(2, "PDFlib GmbH Version", PDFLIB_VERSIONSTRING );
-#else
- php_info_print_table_row(2, "PDFlib GmbH Version", tmp );
-#endif
- php_info_print_table_row(2, "Revision", "$Revision$" );
- php_info_print_table_end();
-
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pdf)
-{
- if ((PDF_get_majorversion() != PDFLIB_MAJORVERSION) ||
- (PDF_get_minorversion() != PDFLIB_MINORVERSION)) {
- php_error(E_ERROR,"PDFlib error: Version mismatch in wrapper code");
- }
- le_pdf = zend_register_list_destructors_ex(_free_pdf_doc, NULL, "pdf object", module_number);
-
- /* this does something like setlocale("C", ...) in PDFlib 3.x */
- PDF_boot();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pdf)
-{
- PDF_shutdown();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _php_pdf_set_info
- */
-static void _php_pdf_set_info(INTERNAL_FUNCTION_PARAMETERS, char *field)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- PDF_set_info(pdf, field, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pdf_set_info(int pdfdoc, string fieldname, string value)
- Fills an info field of the document */
-PHP_FUNCTION(pdf_set_info)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- PDF_set_info(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pdf_set_info_creator(int pdfdoc, string creator)
- Fills the creator field of the document */
-PHP_FUNCTION(pdf_set_info_creator)
-{
- _php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Creator");
-}
-/* }}} */
-
-/* {{{ proto bool pdf_set_info_title(int pdfdoc, string title)
- Fills the title field of the document */
-PHP_FUNCTION(pdf_set_info_title)
-{
- _php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Title");
-}
-/* }}} */
-
-/* {{{ proto bool pdf_set_info_subject(int pdfdoc, string subject)
- Fills the subject field of the document */
-PHP_FUNCTION(pdf_set_info_subject)
-{
- _php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Subject");
-}
-/* }}} */
-
-/* {{{ proto bool pdf_set_info_author(int pdfdoc, string author)
- Fills the author field of the document */
-PHP_FUNCTION(pdf_set_info_author)
-{
- _php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Author");
-}
-/* }}} */
-
-/* {{{ proto bool pdf_set_info_keywords(int pdfdoc, string keywords)
- Fills the keywords field of the document */
-PHP_FUNCTION(pdf_set_info_keywords)
-{
- _php_pdf_set_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, "Keywords");
-}
-/* }}} */
-
-/* {{{ proto int pdf_open([int filedesc])
- Opens a new pdf document. If filedesc is NULL, document is created in memory. This is the old interface, only for compatibility use pdf_new + pdf_open_file instead */
-PHP_FUNCTION(pdf_open)
-{
- zval **file;
- void *what;
- int type;
- FILE *fp = NULL;
- PDF *pdf;
- int argc = ZEND_NUM_ARGS();
-
- if(argc > 1)
- WRONG_PARAM_COUNT;
- if (argc != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- fp = NULL;
- } else {
- what = zend_fetch_resource(file TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream());
- ZEND_VERIFY_RESOURCE(what);
-
- if (php_stream_cast((php_stream*)what, PHP_STREAM_AS_STDIO, (void*)&fp, 1) == FAILURE) {
- RETURN_FALSE;
- }
- /* XXX should do a zend_list_addref for <fp> here! */
- }
-
- pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL);
-
- if(fp) {
- if (PDF_open_fp(pdf, fp) < 0) RETURN_FALSE;
- } else {
- PDF_open_mem(pdf, pdf_flushwrite);
- }
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_set_parameter(pdf, "imagewarning", "true");
-#endif
- PDF_set_parameter(pdf, "binding", "PHP");
-
- ZEND_REGISTER_RESOURCE(return_value, pdf, le_pdf);
-}
-
-/* }}} */
-
-/* {{{ proto void pdf_close(int pdfdoc)
- Closes the pdf document */
-PHP_FUNCTION(pdf_close)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_close(pdf);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto void pdf_begin_page(int pdfdoc, float width, float height)
- Starts page */
-PHP_FUNCTION(pdf_begin_page)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_begin_page(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_end_page(int pdfdoc)
- Ends page */
-PHP_FUNCTION(pdf_end_page)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_end_page(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_show(int pdfdoc, string text)
- Output text at current position */
-PHP_FUNCTION(pdf_show)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- PDF_show2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_show_xy(int pdfdoc, string text, float x_koor, float y_koor)
- Output text at position */
-PHP_FUNCTION(pdf_show_xy)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- PDF_show_xy2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_show_boxed(int pdfdoc, string text, float x_koor, float y_koor, float width, float height, string mode [, string feature])
- Output text formated in a boxed */
-PHP_FUNCTION(pdf_show_boxed)
-{
- zval **argv[8];
- int argc = ZEND_NUM_ARGS();
- int nr;
- char *feature;
- PDF *pdf;
-
- if (((argc < 7) || (argc > 8)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
-
- convert_to_string_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_double_ex(argv[5]);
- convert_to_string_ex(argv[6]);
-
- if(argc == 8) {
- convert_to_string_ex(argv[7]);
- feature = Z_STRVAL_PP(argv[7]);
- } else {
- feature = NULL;
- }
-
- nr = PDF_show_boxed(pdf, Z_STRVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- (float) Z_DVAL_PP(argv[5]),
- Z_STRVAL_PP(argv[6]),
- feature);
-
- RETURN_LONG(nr);
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_font(int pdfdoc, string font, float size, string encoding [, int embed])
- Select the current font face, size and encoding */
-PHP_FUNCTION(pdf_set_font)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
- int font, embed;
- PDF *pdf;
-
- switch (ZEND_NUM_ARGS()) {
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- embed = 0;
- break;
- case 5:
- if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg5);
- embed = Z_LVAL_PP(arg5);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_string_ex(arg4);
-
- font = PDF_findfont(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg4), embed);
- if (font == -1) {
- php_error(E_WARNING,"Font %s not found", Z_STRVAL_PP(arg2));
- RETURN_FALSE;
- }
-
- PDF_setfont(pdf, font, (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ _php_pdf_set_value
- */
-static void _php_pdf_set_value(INTERNAL_FUNCTION_PARAMETERS, char *field)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- PDF_set_value(pdf, field, (float)Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_value(int pdfdoc, string key, float value)
- Sets arbitrary value */
-PHP_FUNCTION(pdf_set_value)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_set_value(pdf, Z_STRVAL_PP(arg2), (float)Z_DVAL_PP(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto float pdf_get_value(int pdfdoc, string key, float modifier)
- Gets arbitrary value */
-PHP_FUNCTION(pdf_get_value)
-{
- zval **argv[3];
- int argc = ZEND_NUM_ARGS();
- PDF *pdf;
- double value;
-
- if(((argc < 2) || (argc > 3)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
-
- convert_to_string_ex(argv[1]);
- if(argc == 3)
- convert_to_double_ex(argv[2]);
-
- if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "imagewidth"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "imageheight"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "resx"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "resy"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "capheight"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_FONT_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "ascender"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_FONT_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "descender"))) {
- if(argc < 3) WRONG_PARAM_COUNT;
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2])-PDFLIB_FONT_OFFSET);
- } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "font"))) {
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 0.0)+PDFLIB_FONT_OFFSET;
- } else {
- if(argc < 3) {
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 0.0);
- } else {
- value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), (float)Z_DVAL_PP(argv[2]));
- }
- }
-
- RETURN_DOUBLE(value);
-}
-/* }}} */
-
-/* {{{ proto int pdf_get_font(int pdfdoc)
- Gets the current font */
-PHP_FUNCTION(pdf_get_font)
-{
- zval **arg1;
- int font;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- font = (int) PDF_get_value(pdf, "font", 0);
- RETURN_LONG(font+PDFLIB_FONT_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto string pdf_get_fontname(int pdfdoc)
- Gets the current font name */
-PHP_FUNCTION(pdf_get_fontname)
-{
- zval **arg1;
- char *fontname;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- fontname = (char *) PDF_get_parameter(pdf, "fontname", 0);
- RETURN_STRING(fontname, 1);
-}
-/* }}} */
-
-/* {{{ proto float pdf_get_fontsize(int pdfdoc)
- Gets the current font size */
-PHP_FUNCTION(pdf_get_fontsize)
-{
- zval **arg1;
- float fontsize;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- fontsize = PDF_get_value(pdf, "fontsize", 0);
- RETURN_DOUBLE(fontsize);
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_leading(int pdfdoc, float distance)
- Sets distance between text lines */
-PHP_FUNCTION(pdf_set_leading)
-{
- _php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "leading");
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_text_rendering(int pdfdoc, int mode)
- Determines how text is rendered */
-PHP_FUNCTION(pdf_set_text_rendering)
-{
- _php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "textrendering");
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_horiz_scaling(int pdfdoc, float scale)
- Sets horizontal scaling of text */
-PHP_FUNCTION(pdf_set_horiz_scaling)
-{
- _php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "horizscaling");
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_text_rise(int pdfdoc, float value)
- Sets the text rise */
-PHP_FUNCTION(pdf_set_text_rise)
-{
- _php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "textrise");
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_char_spacing(int pdfdoc, float space)
- Sets character spacing */
-PHP_FUNCTION(pdf_set_char_spacing)
-{
- _php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "charspacing");
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_word_spacing(int pdfdoc, float space)
- Sets spacing between words */
-PHP_FUNCTION(pdf_set_word_spacing)
-{
- _php_pdf_set_value(INTERNAL_FUNCTION_PARAM_PASSTHRU, "wordspacing");
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_text_pos(int pdfdoc, float x, float y)
- Sets the position of text for the next pdf_show call */
-PHP_FUNCTION(pdf_set_text_pos)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_set_text_pos(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_continue_text(int pdfdoc, string text)
- Output text in next line */
-PHP_FUNCTION(pdf_continue_text)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- PDF_continue_text2(pdf, Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto float pdf_stringwidth(int pdfdoc, string text [, int font, float size])
- Returns width of text in current font */
-PHP_FUNCTION(pdf_stringwidth)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int font;
- double width, size;
- PDF *pdf;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(arg3);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- if (ZEND_NUM_ARGS() == 2) {
- font = (int)PDF_get_value(pdf, "font", 0)+PDFLIB_FONT_OFFSET;
- size = PDF_get_value(pdf, "fontsize", 0);
- } else {
- convert_to_long_ex(arg3);
- font = Z_LVAL_PP(arg3);
- convert_to_double_ex(arg4);
- size = Z_DVAL_PP(arg4);
- }
- width = (double) PDF_stringwidth2(pdf,
- Z_STRVAL_PP(arg2),
- Z_STRLEN_PP(arg2),
- font-PDFLIB_FONT_OFFSET,
- (float)size);
-
- RETURN_DOUBLE((double) width);
-}
-/* }}} */
-
-/* {{{ proto void pdf_save(int pdfdoc)
- Saves current enviroment */
-PHP_FUNCTION(pdf_save)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_save(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_restore(int pdfdoc)
- Restores formerly saved enviroment */
-PHP_FUNCTION(pdf_restore)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_restore(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_translate(int pdfdoc, float x, float y)
- Sets origin of coordinate system */
-PHP_FUNCTION(pdf_translate)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_translate(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_scale(int pdfdoc, float x_scale, float y_scale)
- Sets scaling */
-PHP_FUNCTION(pdf_scale)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_scale(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_rotate(int pdfdoc, float angle)
- Sets rotation */
-PHP_FUNCTION(pdf_rotate)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- PDF_rotate(pdf, (float) Z_DVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_skew(int pdfdoc, float xangle, float yangle)
- Skew the coordinate system */
-PHP_FUNCTION(pdf_skew)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_skew(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setflat(int pdfdoc, float value)
- Sets flatness */
-PHP_FUNCTION(pdf_setflat)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- /* pdflib will do this for you, will throw some exception
- if((Z_LVAL_PP(arg2) > 100) && (Z_LVAL_PP(arg2) < 0)) {
- php_error(E_WARNING,"Parameter of pdf_setflat() has to between 0 and 100");
- RETURN_FALSE;
- }
- */
-
- PDF_setflat(pdf, (float) Z_DVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setlinejoin(int pdfdoc, int value)
- Sets linejoin parameter */
-PHP_FUNCTION(pdf_setlinejoin)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- /* pdflib will do this for you, will throw some exception
- if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
- php_error(E_WARNING,"Parameter of pdf_setlinejoin() must be between 0 and 2");
- RETURN_FALSE;
- }
- */
-
- PDF_setlinejoin(pdf, Z_LVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setlinecap(int pdfdoc, int value)
- Sets linecap parameter */
-PHP_FUNCTION(pdf_setlinecap)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- /* pdflib will do this for you, will throw some exception
- if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
- php_error(E_WARNING,"Parameter of pdf_setlinecap() must be > 0 and <= 2");
- RETURN_FALSE;
- }
- */
-
- PDF_setlinecap(pdf, Z_LVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setmiterlimit(int pdfdoc, float value)
- Sets miter limit */
-PHP_FUNCTION(pdf_setmiterlimit)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- /* pdflib will do this for you, will throw some exception
- if(Z_DVAL_PP(arg2) < 1) {
- php_error(E_WARNING,"Parameter of pdf_setmiterlimit() must be >= 1");
- RETURN_FALSE;
- }
- */
-
- PDF_setmiterlimit(pdf, (float) Z_DVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setlinewidth(int pdfdoc, float width)
- Sets line width */
-PHP_FUNCTION(pdf_setlinewidth)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- PDF_setlinewidth(pdf, (float) Z_DVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setdash(int pdfdoc, float black, float white)
- Sets dash pattern */
-PHP_FUNCTION(pdf_setdash)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_setdash(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_moveto(int pdfdoc, float x, float y)
- Sets current point */
-PHP_FUNCTION(pdf_moveto)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_moveto(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3)
- Draws a curve */
-PHP_FUNCTION(pdf_curveto)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_double_ex(arg6);
- convert_to_double_ex(arg7);
-
- PDF_curveto(pdf, (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- (float) Z_DVAL_PP(arg6),
- (float) Z_DVAL_PP(arg7));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_lineto(int pdfdoc, float x, float y)
- Draws a line */
-PHP_FUNCTION(pdf_lineto)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_lineto(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_circle(int pdfdoc, float x, float y, float radius)
- Draws a circle */
-PHP_FUNCTION(pdf_circle)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- PDF_circle(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_arc(int pdfdoc, float x, float y, float radius, float start, float end)
- Draws an arc */
-PHP_FUNCTION(pdf_arc)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_double_ex(arg6);
-
- PDF_arc(pdf, (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- (float) Z_DVAL_PP(arg6));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_rect(int pdfdoc, float x, float y, float width, float height)
- Draws a rectangle */
-PHP_FUNCTION(pdf_rect)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
-
- PDF_rect(pdf, (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_closepath(int pdfdoc)
- Close path */
-PHP_FUNCTION(pdf_closepath)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_closepath(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_closepath_stroke(int pdfdoc)
- Close path and draw line along path */
-PHP_FUNCTION(pdf_closepath_stroke)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_closepath_stroke(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_stroke(int pdfdoc)
- Draw line along path path */
-PHP_FUNCTION(pdf_stroke)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_stroke(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_fill(int pdfdoc)
- Fill current path */
-PHP_FUNCTION(pdf_fill)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_fill(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_fill_stroke(int pdfdoc)
- Fill and stroke current path */
-PHP_FUNCTION(pdf_fill_stroke)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_fill_stroke(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_closepath_fill_stroke(int pdfdoc)
- Close, fill and stroke current path */
-PHP_FUNCTION(pdf_closepath_fill_stroke)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_closepath_fill_stroke(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_endpath(int pdfdoc)
- Ends current path */
-PHP_FUNCTION(pdf_endpath)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_endpath(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_clip(int pdfdoc)
- Clips to current path */
-PHP_FUNCTION(pdf_clip)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_clip(pdf);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_parameter(int pdfdoc, string key, string value)
- Sets arbitrary parameters */
-PHP_FUNCTION(pdf_set_parameter)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- PDF_set_parameter(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string pdf_get_parameter(int pdfdoc, string key, mixed modifier)
- Gets arbitrary parameters */
-PHP_FUNCTION(pdf_get_parameter)
-{
- zval **argv[3];
- int argc = ZEND_NUM_ARGS();
- PDF *pdf;
- char *value;
-
- if(((argc < 2) || (argc > 3)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
-
- convert_to_string_ex(argv[1]);
- if(argc == 3) {
- convert_to_double_ex(argv[2]);
- value = (char *) PDF_get_parameter(pdf, Z_STRVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
- } else {
- value = (char *) PDF_get_parameter(pdf, Z_STRVAL_PP(argv[1]), 0.0);
- }
-
- RETURN_STRING(value, 1);
-}
-/* }}} */
-
-/* {{{ proto void pdf_setgray_fill(int pdfdoc, float value)
- Sets filling color to gray value */
-PHP_FUNCTION(pdf_setgray_fill)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_setcolor(pdf, "fill", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0);
-#else
- PDF_setgray_fill(pdf, (float) Z_DVAL_PP(arg2));
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setgray_stroke(int pdfdoc, float value)
- Sets drawing color to gray value */
-PHP_FUNCTION(pdf_setgray_stroke)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_setcolor(pdf, "stroke", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0);
-#else
- PDF_setgray_stroke(pdf, (float) Z_DVAL_PP(arg2));
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setgray(int pdfdoc, float value)
- Sets drawing and filling color to gray value */
-PHP_FUNCTION(pdf_setgray)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_setcolor(pdf, "both", "gray", (float) Z_DVAL_PP(arg2), 0, 0, 0);
-#else
- PDF_setgray(pdf, (float) Z_DVAL_PP(arg2));
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue)
- Sets filling color to RGB color value */
-PHP_FUNCTION(pdf_setrgbcolor_fill)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_setcolor(pdf, "fill", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0);
-#else
- PDF_setrgbcolor_fill(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue)
- Sets drawing color to RGB color value */
-PHP_FUNCTION(pdf_setrgbcolor_stroke)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_setcolor(pdf, "stroke", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0);
-#else
- PDF_setrgbcolor_stroke(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setrgbcolor(int pdfdoc, float red, float green, float blue)
- Sets drawing and filling color to RGB color value */
-PHP_FUNCTION(pdf_setrgbcolor)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_setcolor(pdf, "both", "rgb", (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), 0);
-#else
- PDF_setrgbcolor(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_add_bookmark(int pdfdoc, string text [, int parent, int open])
- Adds bookmark for current page */
-PHP_FUNCTION(pdf_add_bookmark)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int parentid, open, id;
- PDF *pdf;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
-
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_long_ex(arg3);
- parentid = Z_LVAL_PP(arg3);
-
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(arg4);
- open = Z_LVAL_PP(arg4);
- } else {
- open = 0;
- }
- } else {
- parentid = 0;
- open = 0;
- }
-
- /* will never return 0 */
- id = PDF_add_bookmark(pdf, Z_STRVAL_PP(arg2), parentid, open);
-
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_transition(int pdfdoc, int transition)
- Sets transition between pages */
-PHP_FUNCTION(pdf_set_transition)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
-
- switch(Z_LVAL_PP(arg2)) {
- case 0:
- PDF_set_parameter(pdf, "transition", "none");
- break;
- case 1:
- PDF_set_parameter(pdf, "transition", "split");
- break;
- case 2:
- PDF_set_parameter(pdf, "transition", "blinds");
- break;
- case 3:
- PDF_set_parameter(pdf, "transition", "box");
- break;
- case 4:
- PDF_set_parameter(pdf, "transition", "wipe");
- break;
- case 5:
- PDF_set_parameter(pdf, "transition", "dissolve");
- break;
- case 6:
- PDF_set_parameter(pdf, "transition", "glitter");
- break;
- case 7:
- PDF_set_parameter(pdf, "transition", "replace");
- break;
- default:
- PDF_set_parameter(pdf, "transition", "none");
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_duration(int pdfdoc, float duration)
- Sets duration between pages */
-PHP_FUNCTION(pdf_set_duration)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- PDF_set_value(pdf, "duration", (float) Z_DVAL_PP(arg2));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ _php_pdf_open_image
- */
-static void _php_pdf_open_image(INTERNAL_FUNCTION_PARAMETERS, char *type)
-{
- zval **arg1, **arg2;
- PDF *pdf;
- int pdf_image;
- char *image;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
-
-#ifdef VIRTUAL_DIR
- virtual_filepath(Z_STRVAL_PP(arg2), &image TSRMLS_CC);
-#else
- image = Z_STRVAL_PP(arg2);
-#endif
-
- pdf_image = PDF_open_image_file(pdf, type, image, "", 0);
-
- RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_gif(int pdf, string giffile)
- Opens a GIF file and returns an image for placement in a pdf object */
-PHP_FUNCTION(pdf_open_gif)
-{
- _php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"gif");
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_jpeg(int pdf, string jpegfile)
- Opens a JPEG file and returns an image for placement in a PDF document */
-PHP_FUNCTION(pdf_open_jpeg)
-{
- _php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"jpeg");
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_png(int pdf, string pngfile)
- Opens a PNG file and returns an image for placement in a PDF document */
-PHP_FUNCTION(pdf_open_png)
-{
- _php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"png");
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_tiff(int pdf, string tifffile)
- Opens a TIFF file and returns an image for placement in a PDF document */
-PHP_FUNCTION(pdf_open_tiff)
-{
- _php_pdf_open_image(INTERNAL_FUNCTION_PARAM_PASSTHRU,"tiff");
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_image_file(int pdf, string type, string file, string stringparam, int intparam)
- Opens an image file of the given type and returns an image for placement in a PDF document */
-PHP_FUNCTION(pdf_open_image_file)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
- PDF *pdf;
- int pdf_image, argc;
- char *image;
- char *stringparam;
- int intparam;
-
- switch ((argc = ZEND_NUM_ARGS())) {
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 5:
- if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
-#ifdef VIRTUAL_DIR
- virtual_filepath(Z_STRVAL_PP(arg3), &image TSRMLS_CC);
-#else
- image = Z_STRVAL_PP(arg3);
-#endif
-
- if (argc == 3) {
- pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, "", 0);
- } else {
- convert_to_string_ex(arg4);
- convert_to_long_ex(arg5);
-
- stringparam = Z_STRVAL_PP(arg4);
- intparam = Z_LVAL_PP(arg5);
-
- /* adjust the image handle */
- if (!strcmp(stringparam, "masked"))
- intparam -= PDFLIB_IMAGE_OFFSET;
-
- pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, stringparam, intparam);
- }
-
- if (pdf_image == -1) {
- /* pdflib will do this for you, will throw some exception
- php_error(E_WARNING, "Could not open image: %s", image);
- */
- RETURN_FALSE;
- }
- RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
-
-}
-/* }}} */
-
-#if HAVE_LIBGD13
-/* {{{ proto int pdf_open_memory_image(int pdf, int image)
- Takes an GD image and returns an image for placement in a PDF document */
-PHP_FUNCTION(pdf_open_memory_image)
-{
- zval **arg1, **arg2;
- int i, j, color, count;
- int pdf_image;
- gdImagePtr im;
- unsigned char *buffer, *ptr;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
- ZEND_GET_RESOURCE_TYPE_ID(le_gd,"gd");
- if(!le_gd)
- {
- php_error(E_ERROR, "Unable to find handle for GD image stream. Please check the GD extension is loaded.");
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, arg2, -1, "Image", le_gd);
-
- count = 3 * im->sx * im->sy;
- if(NULL == (buffer = (unsigned char *) emalloc(count))) {
- RETURN_FALSE;
- }
-
- ptr = buffer;
- for(i=0; i<im->sy; i++) {
- for(j=0; j<im->sx; j++) {
- color = im->pixels[i][j];
- *ptr++ = im->red[color];
- *ptr++ = im->green[color];
- *ptr++ = im->blue[color];
- }
- }
-
- pdf_image = PDF_open_image(pdf, "raw", "memory", buffer, im->sx*im->sy*3, im->sx, im->sy, 3, 8, NULL);
- efree(buffer);
-
- if(pdf_image == -1) {
- /* pdflib will do this for you, will throw some exception
- php_error(E_WARNING, "Could not open image");
- */
- efree(buffer);
- RETURN_FALSE;
- }
-
- RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-#endif /* HAVE_LIBGD13 */
-
-/* {{{ proto void pdf_close_image(int pdf, int pdfimage)
- Closes the PDF image */
-PHP_FUNCTION(pdf_close_image)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
- convert_to_long_ex(arg2);
-
- PDF_close_image(pdf, Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_place_image(int pdf, int pdfimage, float x, float y, float scale)
- Places image in the PDF document */
-PHP_FUNCTION(pdf_place_image)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
-
- PDF_place_image(pdf, Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET, (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), (float) Z_DVAL_PP(arg5));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_get_image_width(int pdf, int pdfimage)
- Returns the width of an image */
-PHP_FUNCTION(pdf_get_image_width)
-{
- zval **arg1, **arg2;
- PDF *pdf;
- int width;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
- convert_to_long_ex(arg2);
-
- width = (int) PDF_get_value(pdf, "imagewidth", (float)Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
- RETURN_LONG(width);
-}
-/* }}} */
-
-/* {{{ proto int pdf_get_image_height(int pdf, int pdfimage)
- Returns the height of an image */
-PHP_FUNCTION(pdf_get_image_height)
-{
- zval **arg1, **arg2;
- PDF *pdf;
- int height;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
- convert_to_long_ex(arg2);
-
- height = (int) PDF_get_value(pdf, "imageheight", (float)Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
- RETURN_LONG(height);
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_weblink(int pdfdoc, float llx, float lly, float urx, float ury, string url)
- Adds link to web resource */
-PHP_FUNCTION(pdf_add_weblink)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_string_ex(arg6);
- PDF_add_weblink(pdf, (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_STRVAL_PP(arg6));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_pdflink(int pdfdoc, float llx, float lly, float urx, float ury, string filename, int page, string dest)
- Adds link to PDF document */
-PHP_FUNCTION(pdf_add_pdflink)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_long_ex(arg7);
- convert_to_string_ex(arg8);
- PDF_add_pdflink(pdf, (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_STRVAL_PP(arg6),
- Z_LVAL_PP(arg7),
- Z_STRVAL_PP(arg8));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_border_style(int pdfdoc, string style, float width)
- Sets style of box surounding all kinds of annotations and link */
-PHP_FUNCTION(pdf_set_border_style)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_set_border_style(pdf, Z_STRVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_border_color(int pdfdoc, float red, float green, float blue)
- Sets color of box surounded all kinds of annotations and links */
-PHP_FUNCTION(pdf_set_border_color)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- PDF_set_border_color(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_set_border_dash(int pdfdoc, float black, float white)
- Sets the border dash style of all kinds of annotations and links */
-PHP_FUNCTION(pdf_set_border_dash)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- PDF_set_border_dash(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_annotation(int pdfdoc, float xll, float yll, float xur, float xur, string title, string text)
- Sets annotation (depreciated use pdf_add_note instead) */
-PHP_FUNCTION(pdf_add_annotation)
-{
- zval **argv[7];
- PDF *pdf;
-
- if(ZEND_NUM_ARGS() != 7 || zend_get_parameters_array_ex(7, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf object", le_pdf);
-
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_string_ex(argv[5]);
- convert_to_string_ex(argv[6]);
-
- PDF_add_note(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- Z_STRVAL_PP(argv[6]),
- Z_STRVAL_PP(argv[5]),
- "note", 1);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* RJS: START OF NEW CODE */
-
-/* {{{ proto int pdf_new()
- Creates a new PDF object */
-PHP_FUNCTION(pdf_new)
-{
- PDF *pdf;
-
- pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL);
-#if (PDFLIB_MAJORVERSION >= 4)
- PDF_set_parameter(pdf, "imagewarning", "true");
-#endif
- PDF_set_parameter(pdf, "binding", "PHP");
-
- ZEND_REGISTER_RESOURCE(return_value, pdf, le_pdf);
-}
-
-/* }}} */
-
-/* {{{ proto int pdf_get_majorversion()
- Returns the major version number of the PDFlib */
-PHP_FUNCTION(pdf_get_majorversion)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(PDF_get_majorversion());
-}
-
-/* {{{ proto int pdf_get_minorversion()
- Returns the minor version number of the PDFlib */
-PHP_FUNCTION(pdf_get_minorversion)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(PDF_get_minorversion());
-}
-
-/* }}} */
-/* {{{ proto bool pdf_delete(int pdfdoc)
- Deletes the PDF object */
-PHP_FUNCTION(pdf_delete)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
- zend_list_delete(Z_RESVAL_PP(arg1));
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int pdf_open_file(int pdfdoc [, char filename])
- Opens a new PDF document. If filename is NULL, document is created in memory. This is not yet fully supported */
-
-PHP_FUNCTION(pdf_open_file)
-{
- zval **arg1, **arg2;
- int pdf_file;
- char *filename;
- int argc;
- PDF *pdf;
-
- if((argc = ZEND_NUM_ARGS()) > 2)
- WRONG_PARAM_COUNT;
-
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- if (argc == 2) {
- convert_to_string_ex(arg2);
- filename = Z_STRVAL_PP(arg2);
- pdf_file = PDF_open_file(pdf, filename);
- } else {
- /* open in memory */
- pdf_file = PDF_open_file(pdf, "");
- }
-
- if (pdf_file == -1)
- RETURN_FALSE;
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int pdf_get_buffer(int pdfdoc)
- Fetches the full buffer containig the generated PDF data */
-PHP_FUNCTION(pdf_get_buffer)
-{
- zval **arg1;
- long size;
- PDF *pdf;
- const char *buffer;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- buffer = PDF_get_buffer(pdf, &size);
-
- RETURN_STRINGL((char *)buffer, size, 1);
-}
-
-/* }}} */
-
-/* {{{ proto int pdf_findfont(int pdfdoc, string fontname, string encoding [, int embed])
- Prepares the font fontname for later use with pdf_setfont() */
-PHP_FUNCTION(pdf_findfont)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int embed, font;
- const char *fontname, *encoding;
- PDF *pdf;
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- embed = 0;
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg4);
- embed = Z_LVAL_PP(arg4);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- fontname = Z_STRVAL_PP(arg2);
-
- convert_to_string_ex(arg3);
- encoding = Z_STRVAL_PP(arg3);
-
- font = PDF_findfont(pdf, fontname, encoding, embed);
- if (font == -1) {
- /* pdflib will do this for you, will throw some exception
- php_error(E_WARNING,"Font %s not found", fontname);
- */
- RETURN_FALSE;
- }
-
- RETURN_LONG(font+PDFLIB_FONT_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_setfont(int pdfdoc, int font, float fontsize)
- Sets the current font in the fiven fontsize */
-PHP_FUNCTION(pdf_setfont)
-{
- zval **arg1, **arg2, **arg3;
- int font;
- float fontsize;
- PDF *pdf;
-
- if(ZEND_NUM_ARGS() != 3)
- WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- font = Z_LVAL_PP(arg2);
-
- convert_to_double_ex(arg3);
- fontsize = (float)Z_DVAL_PP(arg3);
-
- PDF_setfont(pdf, font-PDFLIB_FONT_OFFSET, fontsize);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setpolydash(int pdfdoc, float darray)
- Sets more complicated dash pattern */
-
-PHP_FUNCTION(pdf_setpolydash)
-{
- zval **arg1, **arg2;
- HashTable *array;
- int len, i;
- float *darray;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_array_ex(arg2);
- array = Z_ARRVAL_PP(arg2);
- len = zend_hash_num_elements(array);
-
- if (NULL == (darray = emalloc(len * sizeof(double)))) {
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(array);
- for (i=0; i<len; i++) {
- zval *keydata, **keydataptr;
-
- zend_hash_get_current_data(array, (void **) &keydataptr);
- keydata = *keydataptr;
- if (Z_TYPE_P(keydata) == IS_DOUBLE) {
- darray[i] = (float) Z_DVAL_P(keydata);
- } else if (Z_TYPE_P(keydata) == IS_LONG) {
- darray[i] = (float) Z_LVAL_P(keydata);
- } else {
- php_error(E_WARNING,"PDFlib set_polydash: illegal darray value");
- }
- zend_hash_move_forward(array);
- }
-
- PDF_setpolydash(pdf, darray, len);
-
- efree(darray);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_concat(int pdf, float a, float b, float c, float d, float e, float f)
- Concatenates a matrix to the current transformation matrix for text and graphics */
-PHP_FUNCTION(pdf_concat)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_double_ex(arg6);
- convert_to_double_ex(arg7);
-
- PDF_concat(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- (float) Z_DVAL_PP(arg6),
- (float) Z_DVAL_PP(arg7));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_ccitt(int pdf, string filename, int width, int height, int bitreverse, int k, int blackls1)
- Opens an image file with raw CCITT G3 or G4 compresed bitmap data */
-PHP_FUNCTION(pdf_open_ccitt)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
- PDF *pdf;
- int pdf_image;
- char *image;
-
- if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
-#ifdef VIRTUAL_DIR
- virtual_filepath(Z_STRVAL_PP(arg2), &image TSRMLS_CC);
-#else
- image = Z_STRVAL_PP(arg2);
-#endif
-
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_long_ex(arg5);
- convert_to_long_ex(arg6);
- convert_to_long_ex(arg7);
-
- pdf_image = PDF_open_CCITT(pdf,
- image,
- Z_LVAL_PP(arg3),
- Z_LVAL_PP(arg4),
- Z_LVAL_PP(arg5),
- Z_LVAL_PP(arg6),
- Z_LVAL_PP(arg7));
-
- RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_image(int pdf, string type, string source, string data, long length, int width, int height, int components, int bpc, string params)
- Opens an image of the given type and returns an image for placement in a PDF document */
-PHP_FUNCTION(pdf_open_image)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10;
- PDF *pdf;
- int pdf_image;
- char *image;
-
- if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_long_ex(arg5);
- convert_to_long_ex(arg6);
- convert_to_long_ex(arg7);
- convert_to_long_ex(arg8);
- convert_to_long_ex(arg9);
- convert_to_string_ex(arg10);
-
-#ifdef VIRTUAL_DIR
- virtual_filepath(Z_STRVAL_PP(arg4), &image TSRMLS_CC);
-#else
- image = Z_STRVAL_PP(arg4);
-#endif
-
- pdf_image = PDF_open_image(pdf,
- Z_STRVAL_PP(arg2),
- Z_STRVAL_PP(arg3),
- image,
- Z_LVAL_PP(arg5),
- Z_LVAL_PP(arg6),
- Z_LVAL_PP(arg7),
- Z_LVAL_PP(arg8),
- Z_LVAL_PP(arg9),
- Z_STRVAL_PP(arg10));
-
- RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_attach_file(int pdf, float lly, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon)
- Adds a file attachment annotation at the rectangle specified by his lower left and upper right corners */
-PHP_FUNCTION(pdf_attach_file)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_long_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
-
- PDF_attach_file(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_STRVAL_PP(arg6),
- Z_STRVAL_PP(arg7),
- Z_STRVAL_PP(arg8),
- Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_note(int pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open)
- Sets annotation */
-PHP_FUNCTION(pdf_add_note)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_long_ex(arg9);
-
- PDF_add_note(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_STRVAL_PP(arg6),
- Z_STRVAL_PP(arg7),
- Z_STRVAL_PP(arg8),
- Z_LVAL_PP(arg9));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_locallink(int pdfdoc, float llx, float lly, float urx, float ury, int page, string dest)
- Adds link to web resource */
-PHP_FUNCTION(pdf_add_locallink)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_long_ex(arg6);
- convert_to_string_ex(arg7);
-
- PDF_add_locallink(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_LVAL_PP(arg6),
- Z_STRVAL_PP(arg7));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_launchlink(int pdfdoc, float llx, float lly, float urx, float ury, string filename)
- Adds link to web resource */
-PHP_FUNCTION(pdf_add_launchlink)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_string_ex(arg6);
-
- PDF_add_launchlink(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_STRVAL_PP(arg6));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if (PDFLIB_MAJORVERSION >= 4)
-
-/* {{{ proto int pdf_open_pdi(int pdf, string filename, string stringparam, int intparam);
- * Open an existing PDF document and prepare it for later use. */
-PHP_FUNCTION(pdf_open_pdi)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
- int pdi_handle;
- char *file;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
-
-#ifdef VIRTUAL_DIR
- virtual_filepath(Z_STRVAL_PP(arg2), &file TSRMLS_CC);
-#else
- file = Z_STRVAL_PP(arg2);
-#endif
-
- pdi_handle = PDF_open_pdi(pdf,
- file,
- Z_STRVAL_PP(arg3),
- Z_LVAL_PP(arg4));
-
- RETURN_LONG(pdi_handle+PDFLIB_PDI_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_close_pdi(int pdf, int doc);
- * Close all open page handles, and close the input PDF document. */
-PHP_FUNCTION(pdf_close_pdi)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
-
- PDF_close_pdi(pdf,
- Z_LVAL_PP(arg2)-PDFLIB_PDI_OFFSET);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_open_pdi_page(int pdf, int doc, int page, string label);
- * Prepare a page for later use with PDF_place_image(). */
-PHP_FUNCTION(pdf_open_pdi_page)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- PDF *pdf;
- int pdi_image;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_string_ex(arg4);
-
- pdi_image = PDF_open_pdi_page(pdf,
- Z_LVAL_PP(arg2)-PDFLIB_PDI_OFFSET,
- Z_LVAL_PP(arg3),
- Z_STRVAL_PP(arg4));
-
- RETURN_LONG(pdi_image+PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_place_pdi_page(int pdf, int page, float x, float y, float sx, float sy)
- * Place a PDF page with the lower left corner at (x, y), and scale it. */
-PHP_FUNCTION(pdf_place_pdi_page)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_double_ex(arg6);
-
- PDF_place_pdi_page(pdf,
- Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET,
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- (float) Z_DVAL_PP(arg6));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_close_pdi_page(int pdf, int page);
- * Close the page handle, and free all page-related resources. */
-PHP_FUNCTION(pdf_close_pdi_page)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
-
- PDF_close_pdi_page(pdf,
- Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string pdf_get_pdi_parameter(int pdf, string key, int doc, int page, int index);
- * Get the contents of some PDI document parameter with string type. */
-PHP_FUNCTION(pdf_get_pdi_parameter)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
- PDF *pdf;
- const char *buffer;
- int size;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_long_ex(arg5);
-
- buffer = PDF_get_pdi_parameter(pdf,
- Z_STRVAL_PP(arg2),
- Z_LVAL_PP(arg3)-PDFLIB_PDI_OFFSET,
- Z_LVAL_PP(arg4)-PDFLIB_IMAGE_OFFSET,
- Z_LVAL_PP(arg5),
- &size);
-
- RETURN_STRINGL((char *)buffer, size, 1);
-}
-/* }}} */
-
-/* {{{ proto float pdf_get_pdi_value(int pdf, string key, int doc, int page, int index);
- * Get the contents of some PDI document parameter with numerical type. */
-PHP_FUNCTION(pdf_get_pdi_value)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
- PDF *pdf;
- double value;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_long_ex(arg5);
-
- value = (double)PDF_get_pdi_value(pdf,
- Z_STRVAL_PP(arg2),
- Z_LVAL_PP(arg3)-PDFLIB_PDI_OFFSET,
- Z_LVAL_PP(arg4)-PDFLIB_IMAGE_OFFSET,
- Z_LVAL_PP(arg5));
-
- RETURN_DOUBLE(value);
-}
-/* }}} */
-
-/* {{{ proto int pdf_begin_pattern(int pdf, float width, float height, float xstep, float ystep, int painttype);
- * Start a new pattern definition. */
-PHP_FUNCTION(pdf_begin_pattern)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- PDF *pdf;
- int pattern_image;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_long_ex(arg6);
-
- pattern_image = PDF_begin_pattern(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- Z_LVAL_PP(arg6));
-
- RETURN_LONG(pattern_image+PDFLIB_PATTERN_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_end_pattern(int pdf);
- * Finish the pattern definition. */
-PHP_FUNCTION(pdf_end_pattern)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_end_pattern(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_begin_template(int pdf, float width, float height);
- * Start a new template definition. */
-PHP_FUNCTION(pdf_begin_template)
-{
- zval **arg1, **arg2, **arg3;
- PDF *pdf;
- int tmpl_image;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
-
- tmpl_image = PDF_begin_template(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3));
-
- RETURN_LONG(tmpl_image+PDFLIB_IMAGE_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_end_template(int pdf);
- * Finish the template definition. */
-PHP_FUNCTION(pdf_end_template)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
-
- PDF_end_template(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setcolor(int pdf, string type, string colorspace, float c1 [, float c2 [, float c3 [, float c4]]]);
- * Set the current color space and color. */
-PHP_FUNCTION(pdf_setcolor)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
- PDF *pdf;
- double c1;
- int argc = ZEND_NUM_ARGS();
-
- if(argc < 4 || argc > 7) {
- WRONG_PARAM_COUNT;
- }
- switch(argc) {
- case 4:
- if(zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 5:
- if(zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 6:
- if(zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 7:
- if(zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_double_ex(arg4);
- if(argc > 4) convert_to_double_ex(arg5);
- if(argc > 5) convert_to_double_ex(arg6);
- if(argc > 6) convert_to_double_ex(arg7);
-
- if (0 == (strcmp(Z_STRVAL_PP(arg3), "spot"))) {
- c1 = Z_DVAL_PP(arg4)-PDFLIB_SPOT_OFFSET;
- } else if(0 == (strcmp(Z_STRVAL_PP(arg3), "pattern"))) {
- c1 = Z_DVAL_PP(arg4)-PDFLIB_PATTERN_OFFSET;
- } else {
- c1 = Z_DVAL_PP(arg4);
- }
-
- PDF_setcolor(pdf,
- Z_STRVAL_PP(arg2),
- Z_STRVAL_PP(arg3),
- (float) c1,
- (float) ((argc>4) ? Z_DVAL_PP(arg5):0),
- (float) ((argc>5) ? Z_DVAL_PP(arg6):0),
- (float) ((argc>6) ? Z_DVAL_PP(arg7):0));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pdf_makespotcolor(int pdf, string spotname);
- * Make a named spot color from the current color. */
-PHP_FUNCTION(pdf_makespotcolor)
-{
- zval **arg1, **arg2;
- PDF *pdf;
- int spotcolor;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_string_ex(arg2);
-
- spotcolor = PDF_makespotcolor(pdf,
- Z_STRVAL_PP(arg2),
- Z_STRLEN_PP(arg2));
-
- RETURN_LONG(spotcolor+PDFLIB_SPOT_OFFSET);
-}
-/* }}} */
-
-/* {{{ proto void pdf_arcn(int pdf, float x, float y, float r, float alpha, float beta);
- * Draw a clockwise circular arc from alpha to beta degrees. */
-PHP_FUNCTION(pdf_arcn)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_double_ex(arg6);
-
- PDF_arcn(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- (float) Z_DVAL_PP(arg6));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_initgraphics(int pdf);
- * Reset all implicit color and graphics state parameters to their defaults. */
-PHP_FUNCTION(pdf_initgraphics)
-{
- zval **arg1;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- PDF_initgraphics(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_add_thumbnail(int pdf, int image);
- * Add an existing image as thumbnail for the current page. */
-PHP_FUNCTION(pdf_add_thumbnail)
-{
- zval **arg1, **arg2;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_long_ex(arg2);
-
- PDF_add_thumbnail(pdf,
- Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pdf_setmatrix(int pdf, float a, float b, float c, float d, float e, float f)
- Explicitly set the current transformation matrix. */
-PHP_FUNCTION(pdf_setmatrix)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
- PDF *pdf;
-
- if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf object", le_pdf);
-
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_double_ex(arg5);
- convert_to_double_ex(arg6);
- convert_to_double_ex(arg7);
-
- PDF_setmatrix(pdf,
- (float) Z_DVAL_PP(arg2),
- (float) Z_DVAL_PP(arg3),
- (float) Z_DVAL_PP(arg4),
- (float) Z_DVAL_PP(arg5),
- (float) Z_DVAL_PP(arg6),
- (float) Z_DVAL_PP(arg7));
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif /* PDFlib >= V4 */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/pdf/pdf.dsp b/ext/pdf/pdf.dsp
deleted file mode 100644
index 654fe55421..0000000000
--- a/ext/pdf/pdf.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pdf" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=pdf - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "pdf.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "pdf.mak" CFG="pdf - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "pdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "pdf - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_PDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PDF_EXPORTS" /D "COMPILE_DL_PDF" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_PDFLIB=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib pdflib.lib zlib.lib libpng.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_pdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "pdf - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_PDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PDF_EXPORTS" /D "COMPILE_DL_PDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_PDFLIB=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib pdflib.lib zlib.lib libpng.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_pdf.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "pdf - Win32 Release_TS"
-# Name "pdf - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\pdf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_pdf.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/pdf/php_pdf.h b/ext/pdf/php_pdf.h
deleted file mode 100644
index 15ca68e906..0000000000
--- a/ext/pdf/php_pdf.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDF_H
-#define PHP_PDF_H
-
-#if HAVE_PDFLIB
-
-#include <pdflib.h>
-
-extern zend_module_entry pdf_module_entry;
-#define pdf_module_ptr &pdf_module_entry
-
-PHP_MINFO_FUNCTION(pdf);
-PHP_MINIT_FUNCTION(pdf);
-PHP_MSHUTDOWN_FUNCTION(pdf);
-PHP_FUNCTION(pdf_new); /* new function */
-PHP_FUNCTION(pdf_delete); /* new function */
-PHP_FUNCTION(pdf_open_file);
-PHP_FUNCTION(pdf_get_buffer); /* new function */
-PHP_FUNCTION(pdf_close);
-PHP_FUNCTION(pdf_begin_page);
-PHP_FUNCTION(pdf_end_page);
-PHP_FUNCTION(pdf_get_majorversion);
-PHP_FUNCTION(pdf_get_minorversion);
-PHP_FUNCTION(pdf_get_value);
-PHP_FUNCTION(pdf_set_value);
-PHP_FUNCTION(pdf_get_parameter);
-PHP_FUNCTION(pdf_set_parameter);
-PHP_FUNCTION(pdf_findfont); /* new function */
-PHP_FUNCTION(pdf_setfont); /* new function */
-PHP_FUNCTION(pdf_show);
-PHP_FUNCTION(pdf_show_xy);
-PHP_FUNCTION(pdf_continue_text);
-PHP_FUNCTION(pdf_show_boxed);
-PHP_FUNCTION(pdf_stringwidth); /* new parameters: [int font, float size] */
-PHP_FUNCTION(pdf_set_text_pos);
-PHP_FUNCTION(pdf_setdash);
-PHP_FUNCTION(pdf_setpolydash); /* new function: not yet finished */
-PHP_FUNCTION(pdf_setflat);
-PHP_FUNCTION(pdf_setlinejoin);
-PHP_FUNCTION(pdf_setlinecap);
-PHP_FUNCTION(pdf_setmiterlimit);
-PHP_FUNCTION(pdf_setlinewidth);
-PHP_FUNCTION(pdf_save);
-PHP_FUNCTION(pdf_restore);
-PHP_FUNCTION(pdf_translate);
-PHP_FUNCTION(pdf_scale);
-PHP_FUNCTION(pdf_rotate);
-PHP_FUNCTION(pdf_skew);
-PHP_FUNCTION(pdf_concat); /* new function */
-PHP_FUNCTION(pdf_moveto);
-PHP_FUNCTION(pdf_lineto);
-PHP_FUNCTION(pdf_curveto);
-PHP_FUNCTION(pdf_circle);
-PHP_FUNCTION(pdf_arc);
-PHP_FUNCTION(pdf_rect);
-PHP_FUNCTION(pdf_closepath);
-PHP_FUNCTION(pdf_stroke);
-PHP_FUNCTION(pdf_closepath_stroke);
-PHP_FUNCTION(pdf_fill);
-PHP_FUNCTION(pdf_fill_stroke);
-PHP_FUNCTION(pdf_closepath_fill_stroke);
-PHP_FUNCTION(pdf_clip);
-PHP_FUNCTION(pdf_endpath);
-PHP_FUNCTION(pdf_setgray_fill);
-PHP_FUNCTION(pdf_setgray_stroke);
-PHP_FUNCTION(pdf_setgray);
-PHP_FUNCTION(pdf_setrgbcolor_fill);
-PHP_FUNCTION(pdf_setrgbcolor_stroke);
-PHP_FUNCTION(pdf_setrgbcolor);
-PHP_FUNCTION(pdf_open_image_file); /* new parameters: [char *stringpram, int intparam] */
-PHP_FUNCTION(pdf_open_ccitt); /* new function */
-PHP_FUNCTION(pdf_open_image); /* new function: checkit not yet completeted :( */
-PHP_FUNCTION(pdf_close_image);
-PHP_FUNCTION(pdf_place_image);
-PHP_FUNCTION(pdf_add_bookmark);
-PHP_FUNCTION(pdf_set_info);
-PHP_FUNCTION(pdf_attach_file); /* new function */
-PHP_FUNCTION(pdf_add_note); /* new function */
-PHP_FUNCTION(pdf_add_pdflink);
-PHP_FUNCTION(pdf_add_locallink); /* new function */
-PHP_FUNCTION(pdf_add_launchlink); /* new function */
-PHP_FUNCTION(pdf_add_weblink);
-PHP_FUNCTION(pdf_set_border_style);
-PHP_FUNCTION(pdf_set_border_color);
-PHP_FUNCTION(pdf_set_border_dash);
-
-/* RJS:
- End of the official PDFLIB V3.x API */
-
-/* old font handling */
-PHP_FUNCTION(pdf_set_font); /* deprecated */
-PHP_FUNCTION(pdf_get_font); /* deprecated */
-PHP_FUNCTION(pdf_get_fontname); /* deprecated */
-PHP_FUNCTION(pdf_get_fontsize); /* deprecated */
-
-/* old way of starting a PDF document */
-PHP_FUNCTION(pdf_open); /* deprecated */
-
-/* old stuff for setting infos */
-PHP_FUNCTION(pdf_set_info_creator); /* deprecated */
-PHP_FUNCTION(pdf_set_info_title); /* deprecated */
-PHP_FUNCTION(pdf_set_info_subject); /* deprecated */
-PHP_FUNCTION(pdf_set_info_author); /* deprecated */
-PHP_FUNCTION(pdf_set_info_keywords); /* deprecated */
-PHP_FUNCTION(pdf_set_leading); /* deprecated */
-PHP_FUNCTION(pdf_set_text_rendering); /* deprecated */
-PHP_FUNCTION(pdf_set_horiz_scaling); /* deprecated */
-PHP_FUNCTION(pdf_set_text_rise); /* deprecated */
-PHP_FUNCTION(pdf_set_char_spacing); /* deprecated */
-PHP_FUNCTION(pdf_set_word_spacing); /* deprecated */
-PHP_FUNCTION(pdf_set_transition); /* deprecated */
-PHP_FUNCTION(pdf_set_duration); /* deprecated */
-PHP_FUNCTION(pdf_get_image_height); /* deprecated */
-PHP_FUNCTION(pdf_get_image_width); /* deprecated */
-
-/* old stuff for opening images */
-PHP_FUNCTION(pdf_open_jpeg); /* deprecated */
-PHP_FUNCTION(pdf_open_tiff); /* deprecated */
-PHP_FUNCTION(pdf_open_png); /* deprecated */
-PHP_FUNCTION(pdf_open_gif); /* deprecated */
-
-/* some more stuff for compatibility */
-PHP_FUNCTION(pdf_add_annotation);
-#if HAVE_LIBGD13
-PHP_FUNCTION(pdf_open_memory_image);
-#endif
-
-#if (PDFLIB_MAJORVERSION >= 4)
-/* support for new functions in PDFlib V4.0 */
-PHP_FUNCTION(pdf_open_pdi);
-PHP_FUNCTION(pdf_close_pdi);
-PHP_FUNCTION(pdf_open_pdi_page);
-PHP_FUNCTION(pdf_place_pdi_page);
-PHP_FUNCTION(pdf_close_pdi_page);
-PHP_FUNCTION(pdf_get_pdi_parameter);
-PHP_FUNCTION(pdf_get_pdi_value);
-PHP_FUNCTION(pdf_begin_pattern);
-PHP_FUNCTION(pdf_end_pattern);
-PHP_FUNCTION(pdf_setcolor);
-PHP_FUNCTION(pdf_makespotcolor);
-PHP_FUNCTION(pdf_begin_template);
-PHP_FUNCTION(pdf_end_template);
-PHP_FUNCTION(pdf_arcn);
-PHP_FUNCTION(pdf_add_thumbnail);
-PHP_FUNCTION(pdf_initgraphics);
-PHP_FUNCTION(pdf_setmatrix);
-#endif /* PDFlib >= V4 */
-
-#ifdef ZTS
-#define PDFG(v) TSRMG(pdf_globals_id, php_pdf_globals *, v)
-#else
-#define PDFG(v) (pdf_globals.v)
-#endif
-
-
-#else
-#define pdf_module_ptr NULL
-#endif
-#define phpext_pdf_ptr pdf_module_ptr
-#endif /* PHP_PDF_H */
diff --git a/ext/pfpro/CREDITS b/ext/pfpro/CREDITS
deleted file mode 100644
index 1b57a7f25b..0000000000
--- a/ext/pfpro/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Verisign Payflow Pro
-John Donagher, David Croft
diff --git a/ext/pfpro/TODO b/ext/pfpro/TODO
deleted file mode 100644
index a10a191e80..0000000000
--- a/ext/pfpro/TODO
+++ /dev/null
@@ -1,12 +0,0 @@
-John Donagher <jdonagher@php.net> - 20010501
-############################################
-- XMLPay support??
-- Add test cases
-
-pfpro_process[_raw]:
-- Expose API-level context control optionally to user
-- Figure out what Verisign's pfproCompleteTransaction() purpose is and why it
- corrupts the response data
-
-pfpro_process:
-- Fix response parsing to ignore delimiters [&=] in response data values
diff --git a/ext/pfpro/config.m4 b/ext/pfpro/config.m4
deleted file mode 100644
index 310bb1ff04..0000000000
--- a/ext/pfpro/config.m4
+++ /dev/null
@@ -1,64 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(pfpro, for Verisign Payflow Pro support,
-[ --with-pfpro[=DIR] Include Verisign Payflow Pro support.])
-
-if test "$PHP_PFPRO" != "no"; then
- PFPRO_LIB=libpfpro.so
- PFPRO_HDR=pfpro.h
-
- for i in /usr/local /usr $PHP_PFPRO; do
- if test -r $i/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i
- elif test -r $i/include/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i/include
- elif test -r $i/lib/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i/lib
- elif test -r $i/bin/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i/bin
- fi
-
- if test -r $i/$PFPRO_LIB; then
- PFPRO_LIB_DIR=$i
- elif test -r $i/lib/$PFPRO_LIB; then
- PFPRO_LIB_DIR=$i/lib
- fi
- done
-
- if test -z "$PFPRO_INC_DIR"; then
- AC_MSG_ERROR(Could not find pfpro.h. Please make sure you have the
- Verisign Payflow Pro SDK installed. Use
- ./configure --with-pfpro=<pfpro-dir> if necessary)
- fi
-
- if test -z "$PFPRO_LIB_DIR"; then
- AC_MSG_ERROR(Could not find libpfpro.so. Please make sure you have the
- Verisign Payflow Pro SDK installed. Use
- ./configure --with-pfpro=<pfpro-dir> if necessary)
- fi
-
- PFPRO_VERSION3=`nm $PFPRO_LIB_DIR/$PFPRO_LIB | awk '{print $3}' | grep '^pfpro' > /dev/null && echo 1 || echo 0`
- PFPRO_VERSION2=`nm $PFPRO_LIB_DIR/$PFPRO_LIB | awk '{print $3}' | grep '^PN' > /dev/null && echo 1 || echo 0`
-
- if test "$PFPRO_VERSION3" -eq 1 ; then
- PFPRO_VERSION=3
- elif test "$PFPRO_VERSION2" -eq 1 ; then
- PFPRO_VERSION=2
- else
- AC_MSG_ERROR(The pfpro extension requires version 2 or 3 of the SDK)
- fi
-
- AC_DEFINE_UNQUOTED(PFPRO_VERSION, $PFPRO_VERSION, [Version of SDK])
- dnl AC_MSG_RESULT(found in $PFPRO_LIB_DIR)
-
- PHP_ADD_INCLUDE($PFPRO_INC_DIR)
-
- PHP_SUBST(PFPRO_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(pfpro, $PFPRO_LIB_DIR, PFPRO_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_PFPRO, 1, [ ])
-
- PHP_NEW_EXTENSION(pfpro, pfpro.c, $ext_shared)
-fi
diff --git a/ext/pfpro/pfpro.c b/ext/pfpro/pfpro.c
deleted file mode 100644
index 90ecc5b290..0000000000
--- a/ext/pfpro/pfpro.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: David Croft <david@infotrek.co.uk>, |
- | John Donagher <john@webmeta.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* {{{ includes */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_pfpro.h"
-
-#include "pfpro.h"
-
-#if HAVE_PFPRO
-
-#include "ext/standard/php_string.h"
-/* }}} */
-
-/* {{{ zts */
-#ifdef ZTS
-int pfpro_globals_id;
-#else
-php_pfpro_globals pfpro_globals;
-#endif
-/* }}} */
-
-/* {{{ Function table */
-function_entry pfpro_functions[] = {
- PHP_FE(pfpro_version, NULL)
- PHP_FE(pfpro_init, NULL)
- PHP_FE(pfpro_cleanup, NULL)
- PHP_FE(pfpro_process_raw, NULL)
- PHP_FE(pfpro_process, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ Zend module entry */
-zend_module_entry pfpro_module_entry = {
- STANDARD_MODULE_HEADER,
- "pfpro",
- pfpro_functions,
- PHP_MINIT(pfpro),
- PHP_MSHUTDOWN(pfpro),
- PHP_RINIT(pfpro), /* request start */
- PHP_RSHUTDOWN(pfpro), /* request end */
- PHP_MINFO(pfpro),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ dl() stuff */
-#ifdef COMPILE_DL_PFPRO
-ZEND_GET_MODULE(pfpro)
-#endif
-/* }}} */
-
-/* {{{ initialization defaults */
-PHP_INI_BEGIN()
-#if PFPRO_VERSION < 3
- STD_PHP_INI_ENTRY("pfpro.defaulthost", "test.signio.com",
- PHP_INI_ALL, OnUpdateString, defaulthost, php_pfpro_globals, pfpro_globals)
-#else
- STD_PHP_INI_ENTRY("pfpro.defaulthost", "test-payflow.verisign.com",
- PHP_INI_ALL, OnUpdateString, defaulthost, php_pfpro_globals, pfpro_globals)
-#endif
- STD_PHP_INI_ENTRY("pfpro.defaultport", "443", PHP_INI_ALL, OnUpdateInt, defaultport, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.defaulttimeout", "30", PHP_INI_ALL, OnUpdateInt, defaulttimeout, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxyaddress", "", PHP_INI_ALL, OnUpdateString, proxyaddress, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxyport", "", PHP_INI_ALL, OnUpdateInt, proxyport, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxylogon", "", PHP_INI_ALL, OnUpdateString, proxylogon, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxypassword", "", PHP_INI_ALL, OnUpdateString, proxypassword, php_pfpro_globals, pfpro_globals)
-PHP_INI_END()
-
-
-PHP_MINIT_FUNCTION(pfpro)
-{
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(pfpro)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(pfpro)
-{
- PFPROG(initialized) = 0;
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(pfpro)
-{
- if (PFPROG(initialized) == 1) {
- pfproCleanup();
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ minfo registration */
-PHP_MINFO_FUNCTION(pfpro)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "Verisign Payflow Pro support", "enabled");
- php_info_print_table_row(2, "libpfpro version", pfproVersion());
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ proto string pfpro_version()
- Returns the version of the Payflow Pro library */
-PHP_FUNCTION(pfpro_version)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING((char *)pfproVersion(), 1);
-}
-/* }}} */
-
-/* {{{ proto void pfpro_init()
- Initializes the Payflow Pro library */
-PHP_FUNCTION(pfpro_init)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- pfproInit();
-
- PFPROG(initialized) = 1;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void pfpro_cleanup()
- Shuts down the Payflow Pro library */
-PHP_FUNCTION(pfpro_cleanup)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- pfproCleanup();
-
- PFPROG(initialized) = 0;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string pfpro_process_raw(string parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])
- Raw Payflow Pro transaction processing */
-PHP_FUNCTION(pfpro_process_raw)
-{
- zval ***args;
-
- char *parmlist = NULL;
- char *address = NULL;
- int port = PFPROG(defaultport);
- int timeout = PFPROG(defaulttimeout);
- char *proxyAddress = PFPROG(proxyaddress);
- int proxyPort = PFPROG(proxyport);
- char *proxyLogon = PFPROG(proxylogon);
- char *proxyPassword = PFPROG(proxypassword);
-
- int freeaddress = 0;
-
-#if PFPRO_VERSION < 3
- char response[512] = "";
-#else
- int context;
- char *response;
-#endif
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 8) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***) emalloc(sizeof(zval **) * ZEND_NUM_ARGS());
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- php_error(E_WARNING, "Unable to read parameters in pfpro_process_raw()");
- efree(args);
- RETURN_FALSE;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 8:
- convert_to_string_ex(args[7]);
- proxyPassword = Z_STRVAL_PP(args[7]);
- /* fall through */
-
- case 7:
- convert_to_string_ex(args[6]);
- proxyLogon = Z_STRVAL_PP(args[6]);
- /* fall through */
-
- case 6:
- convert_to_long_ex(args[5]);
- proxyPort = Z_LVAL_PP(args[5]);
- /* fall through */
-
- case 5:
- convert_to_string_ex(args[4]);
- proxyAddress = Z_STRVAL_PP(args[4]);
- /* fall through */
-
- case 4:
- convert_to_long_ex(args[3]);
- timeout = Z_LVAL_PP(args[3]);
- /* fall through */
-
- case 3:
- convert_to_long_ex(args[2]);
- port = Z_LVAL_PP(args[2]);
- /* fall through */
-
- case 2:
- convert_to_string_ex(args[1]);
- address = Z_STRVAL_PP(args[1]);
- }
-
- convert_to_string_ex(args[0]);
- parmlist = Z_STRVAL_PP(args[0]);
-
- efree(args);
-
- /* Default to signio's test server */
-
- if (address == NULL) {
- address = estrdup(PFPROG(defaulthost));
- freeaddress = 1;
- }
-
-#if PFPRO_VERSION < 3
- /* Blank the response buffer */
- memset(response, 0, sizeof(response));
-#endif
-
- /* Initialize the library if needed */
-
- if (PFPROG(initialized) == 0) {
- pfproInit();
- PFPROG(initialized) = 1;
- }
-
- /* Perform the transaction */
-
-#if PFPRO_VERSION < 3
- ProcessPNTransaction(address, port, proxyAddress, proxyPort, proxyLogon, proxyPassword, parmlist, strlen(parmlist), timeout, response);
-#else
- pfproCreateContext(&context, address, port, timeout, proxyAddress, proxyPort, proxyLogon, proxyPassword);
- pfproSubmitTransaction(context, parmlist, strlen(parmlist), &response);
- pfproDestroyContext(context);
-#endif
-
- if (freeaddress) {
- efree(address);
- }
-
- RETURN_STRING(response, 1);
-}
-/* }}} */
-
-/* {{{ proto array pfpro_process(array parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])
- Payflow Pro transaction processing using arrays */
-PHP_FUNCTION(pfpro_process)
-{
- zval ***args;
-
- HashTable *target_hash;
- ulong num_key;
- char *string_key;
- zval **entry;
- int pass;
-
- char *parmlist = NULL;
- char *address = NULL;
- int port = PFPROG(defaultport);
- int timeout = PFPROG(defaulttimeout);
- char *proxyAddress = PFPROG(proxyaddress);
- int proxyPort = PFPROG(proxyport);
- char *proxyLogon = PFPROG(proxylogon);
- char *proxyPassword = PFPROG(proxypassword);
-
- int parmlength = 0;
- int freeaddress = 0;
-
-#if PFPRO_VERSION < 3
- char response[512] = "";
-#else
- int context;
- char *response;
-#endif
-
- char tmpbuf[128];
-
- char buf[128], sbuf[128];
- char *p1, *p2, *p_end, /* Pointers for string manipulation */
- *sp1, *sp2,
- *pdelim1="&", *pdelim2="=";
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 8) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***) emalloc(sizeof(zval **) * ZEND_NUM_ARGS());
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- php_error(E_ERROR, "Unable to read parameters in pfpro_process()");
- efree(args);
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(args[0]) != IS_ARRAY) {
- php_error(E_ERROR, "First parameter to pfpro_process() must be an array");
- efree(args);
- RETURN_FALSE;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 8:
- convert_to_string_ex(args[7]);
- proxyPassword = Z_STRVAL_PP(args[7]);
- /* fall through */
-
- case 7:
- convert_to_string_ex(args[6]);
- proxyLogon = Z_STRVAL_PP(args[6]);
- /* fall through */
-
- case 6:
- convert_to_long_ex(args[5]);
- proxyPort = Z_LVAL_PP(args[5]);
- /* fall through */
-
- case 5:
- convert_to_string_ex(args[4]);
- proxyAddress = Z_STRVAL_PP(args[4]);
- /* fall through */
-
- case 4:
- convert_to_long_ex(args[3]);
- timeout = Z_LVAL_PP(args[3]);
- /* fall through */
-
- case 3:
- convert_to_long_ex(args[2]);
- port = Z_LVAL_PP(args[2]);
- /* fall through */
-
- case 2:
- convert_to_string_ex(args[1]);
- address = Z_STRVAL_PP(args[1]);
- }
-
- /* Concatenate the passed array as specified by Verisign.
- Basically it's all key=value&key=value, the only exception
- being if the value contains = or &, in which case we also
- encode the length, e.g. key[5]=bl&ah */
-
- target_hash = HASH_OF(*args[0]);
-
- for (pass = 0; pass <= 1; pass ++) {
-
- parmlength = 0;
- /* we go around the array twice. the first time to calculate
- the string length, the second time to actually store it */
-
- zend_hash_internal_pointer_reset(target_hash);
-
- while (zend_hash_get_current_data(target_hash, (void **)&entry) == SUCCESS) {
-
- if (parmlength > 0) {
- if (pass == 1)
- strcpy(parmlist + parmlength, "&");
- parmlength += 1;
- }
-
- switch (zend_hash_get_current_key(target_hash, &string_key, &num_key, 0)) {
-
- case HASH_KEY_IS_STRING:
-
- if (pass == 1)
- strcpy(parmlist + parmlength, string_key);
- parmlength += strlen(string_key);
-
- break;
-
- case HASH_KEY_IS_LONG:
-
- sprintf(tmpbuf, "%d", num_key);
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
-
- break;
-
- default:
- php_error(E_ERROR, "pfpro_process() array keys must be strings or integers");
- efree(args);
- RETURN_FALSE;
- }
-
-
- switch (Z_TYPE_PP(entry)) {
- case IS_STRING:
- if (strchr(Z_STRVAL_PP(entry), '&')
- || strchr(Z_STRVAL_PP(entry), '=')) {
- sprintf(tmpbuf, "[%d]=", Z_STRLEN_PP(entry));
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
- }
- else {
- if (pass == 1)
- strcpy(parmlist + parmlength, "=");
- parmlength += 1;
- }
-
- if (pass == 1)
- strcpy(parmlist + parmlength, Z_STRVAL_PP(entry));
- parmlength += Z_STRLEN_PP(entry);
-
- break;
-
- case IS_LONG:
- sprintf(tmpbuf, "=%d", Z_LVAL_PP(entry));
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
-
- break;
-
- case IS_DOUBLE:
- sprintf(tmpbuf, "=%.2f", Z_DVAL_PP(entry));
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
-
- break;
-
- default:
- php_error(E_ERROR, "pfpro_process() array values must be strings, ints or floats");
- efree(args);
- RETURN_FALSE;
- }
- zend_hash_move_forward(target_hash);
- }
-
- if (pass == 0) {
- parmlist = emalloc(parmlength + 1);
- }
- }
-
- efree(args);
-
- /* Default to signio's test server */
-
- if (address == NULL) {
- /* is it safe to just do address = "test.signio.com"; here? */
- address = estrdup(PFPROG(defaulthost));
- freeaddress = 1;
- }
-
- /* Allocate the array for the response now - so we catch any errors
- from this BEFORE we knock it off to the bank */
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "pfpro_process() unable to create array");
- RETURN_FALSE;
- }
-
-#if PFPRO_VERSION < 3
- /* Blank the response buffer */
- memset(response, 0, sizeof(response));
-#endif
-
- /* Initialize the library if needed */
-
- if (PFPROG(initialized) == 0) {
- pfproInit();
- PFPROG(initialized) = 1;
- }
-
- /* Perform the transaction */
-
-#if PFPRO_VERSION < 3
- ProcessPNTransaction(address, port, proxyAddress, proxyPort, proxyLogon, proxyPassword, parmlist, strlen(parmlist), timeout, response);
-#else
- pfproCreateContext(&context, address, port, timeout, proxyAddress, proxyPort, proxyLogon, proxyPassword);
- pfproSubmitTransaction(context, parmlist, strlen(parmlist), &response);
- pfproDestroyContext(context);
-#endif
-
- if (freeaddress) {
- efree(address);
- }
-
-
- /* This final chunk of code is to walk the string returned by Signio
- and build a string array to return to the user */
-
- /* John, I suspect this code will fall over if there are less than
- 3 items in the response string -- david */
-
- /* Clean our str[n]cpy buffers */
- memset(buf, 0, sizeof(buf));
- memset(sbuf, 0, sizeof(sbuf));
-
- p_end = response + strlen(response);
- p1 = response;
- p2 = (char*)php_memnstr(response, pdelim1, 1, p_end);
-
- sp1 = (char*)php_memnstr(response, pdelim2, 1, p2);
- strncpy(buf, p1, sp1-p1);
-
- sp1++;
- strncpy(sbuf, sp1, p2-sp1);
-
- add_assoc_string(return_value, &buf[0], &sbuf[0], 1);
-
- do {
- memset(buf, 0, sizeof(buf));
- memset(sbuf, 0, sizeof(sbuf));
-
- p1 = p2+1;
-
- if ((sp2 = (char*)php_memnstr(p1, pdelim1, 1, p_end)) != NULL) {
- sp1 = (char*)php_memnstr(p1, pdelim2, 1, sp2);
- strncpy(buf, p1, sp1-p1);
-
- sp1++;
-
- strncpy(sbuf, sp1, sp2-sp1);
-
- add_assoc_string(return_value, &buf[0], &sbuf[0], 1);
- }
-
-
- } while ((p2 = (char*)php_memnstr(p1, pdelim1, 1, p_end)) != NULL);
-
- if (p1 <= p_end) {
- memset(buf, 0, sizeof(buf));
- memset(sbuf, 0, sizeof(sbuf));
-
- sp1 = (char*)php_memnstr(p1, pdelim2, 1, p_end);
- strncpy(buf, p1, sp1-p1);
-
- sp1++;
- strncpy(sbuf, sp1, p_end-sp1);
-
- add_assoc_string(return_value, &buf[0], &sbuf[0], 1);
- }
-
-
-}
-/* }}} */
-
-#endif /* HAVE_PFPRO */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/pfpro/php_pfpro.h b/ext/pfpro/php_pfpro.h
deleted file mode 100644
index 7b93f1f843..0000000000
--- a/ext/pfpro/php_pfpro.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: David Croft <david@infotrek.co.uk> |
- | John Donagher <john@webmeta.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PFPRO_H
-#define PHP_PFPRO_H
-
-#if HAVE_PFPRO
-
-extern zend_module_entry pfpro_module_entry;
-#define phpext_pfpro_ptr &pfpro_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PFPRO_API __declspec(dllexport)
-#else
-#define PHP_PFPRO_API
-#endif
-
-#if PFPRO_VERSION < 3
-#define pfproVersion() PNVersion()
-#define pfproInit() PNInit()
-#define pfproCleanup() PNCleanup()
-#endif
-
-PHP_MINIT_FUNCTION(pfpro);
-PHP_MSHUTDOWN_FUNCTION(pfpro);
-PHP_RINIT_FUNCTION(pfpro);
-PHP_RSHUTDOWN_FUNCTION(pfpro);
-PHP_MINFO_FUNCTION(pfpro);
-
-PHP_FUNCTION(pfpro_version); /* Return library version */
-PHP_FUNCTION(pfpro_init); /* Initialise pfpro gateway */
-PHP_FUNCTION(pfpro_cleanup); /* Shut down cleanly */
-PHP_FUNCTION(pfpro_process_raw); /* Raw transaction processing */
-PHP_FUNCTION(pfpro_process); /* Transaction processing */
-
-typedef struct {
- int le_pfpro;
- int initialized;
- char *defaulthost;
- int defaultport;
- int defaulttimeout;
- char *proxyaddress;
- int proxyport;
- char *proxylogon;
- char *proxypassword;
-} php_pfpro_globals;
-
-#ifdef ZTS
-#define PFPROG(v) TSRMG(pfpro_globals_id, php_pfpro_globals *, v)
-#else
-#define PFPROG(v) (pfpro_globals.v)
-#endif
-
-#else
-
-#define phpext_pfpro_ptr NULL
-
-#endif
-
-#endif /* PHP_PFPRO_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/pgsql/CREDITS b/ext/pgsql/CREDITS
deleted file mode 100644
index 846d37c2f5..0000000000
--- a/ext/pgsql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-PostgreSQL
-Jouni Ahto, Zeev Suraski, Yasuo Ohgaki
diff --git a/ext/pgsql/README b/ext/pgsql/README
deleted file mode 100644
index 2a1b0f4212..0000000000
--- a/ext/pgsql/README
+++ /dev/null
@@ -1,223 +0,0 @@
-==== About This Module ===
-PostgreSQL module provides access to PostgreSQL server from
-PHP script. This module uses PostgreSQL C client lib called libpq.
-It is important that you use libpq that is later than backend
-(PostgreSQL Server) version. Otherwise, you may experience
-strange problems.
-
-Please send e-mail to yohgaki@php.net if you have comments for
-pgsql module. I appreciate your feedback.
-
-==== API Change ===
-Older PHP than 4.2.0, pg_loimport()/pg_loexport() connection
-parameter as last parameter, not like other functions. From 4.2.0,
-connection parameter became 1st parameter. Old syntax is preserved,
-but it will raise NOTICE error message.
-
-pg_connect()/pg_pconnect() has obsolete multi parameter syntax.
-This syntax will be deleted in 4.3.0 or later.
-
-Omitting connectin parameter is NOT recommended. Connection
-parameter may be required for future PHP version. Specify connection
-always if you don't want to rewrite code when it is changed.
-
-==== Function Name Change ====
-Function names are going to be changed to confirm coding
-standard. MySQL module has been done this already. Function names will
-be changed as follows.
-
-pg_errormessage -> pg_error_message
-pg_cmdtuples -> pg_affected_rows
-pg_fieldnum -> pg_field_num
-and so on. Except pg_cmdtuples, under scores '_' will be added to
-names.
-
-Older names will become aliases of new functions for backward
-compatibility.
-
-Manual will be updated when this change is commited to CVS source.
-
-==== Configure Option Notes ====
-You cannot specify PostgreSQL source directly to build PostgreSQL
-module with specific version. You need to install PostgreSQL
-somewhere in your system to build PHP with PostgreSQL support.
-
-==== Note For PostgreSQL 7.2 ====
-I've tested upto 7.2.1.
-
-==== TODO List ===
-Make pg_convert() smater.
- - Better regex
- - User defiend type support
-Support async connection.
-Support async notification.
-
-==== Experimental Functions =====
-
-WARNING: API/behavior may be changed without notice.
-
-Async query can improve application performance
-*significantly*. Please test and report any failure to
-yohgaki@php.net
-
-There are some cases that async functions blocks process. Even if
-process was blocked, functions work as expected. (except it blocks
-process) These are cases that process is blocked. Refer to libpq
-manual for details. Followings are common cases that async functions
-are blocked.
-
- - If libpq is compile with USE_SSL, some async functions are
- blocked.
- - If libpq under Win32 is *NOT* compiled with
- WIN32_NON_BLOCKING_CONNECTIONS, non-blocking connection will block.
-
-Async function may also block if you have not retrive result and
-send or execute query. If there is result left on connection,
-pg_send_query() will block until last query is completed.
-
-Garbages are cleaned when resource is cleaned up. There is no need to
-clean up query result if it is not needed.
-
-Please refer to libpq manual or source for details.
-These functions are *NOT* supposed to be documented, yet.
-API may be changed.
-
-NOTE: These functions are added in PHP 4.2.0 unless they are mentioned.
-
--------------------------------------------------------------------
-bool pg_send_query(resource connection, string query)
-
-Sends async query to backend. Result may be retrieved with
-pg_get_result(). It does not accept multiple query, but it accepts
-multiple queries at once. Each result may be retrieved separately by
-pg_get_result().
-
---------------------------------------------------------------------
-bool pg_cancel_query(resource connection)
-
-Cancels currently executing async query already sent to PostgreSQL
-server. This function is useful when user request time consuming query
-to server. It cannot cancel query executed by pg_exec(), since
-pg_exec() is a blocking function.
-
---------------------------------------------------------------------
-resource pg_get_result(resource conn)
-
-Gets pgsql query result resource. Returned value can be fed to
-pg_result()/pg_fetch_*(). pg_get_result() may block if result is not
-ready to be retrived. Use pg_is_busy() to check result is ready to be
-retrieved or not. If multiple query is sent to backend, it may be
-retrieved one by one using pg_get_result(). If there is no result left
-in connection, it returns false.
-
---------------------------------------------------------------------
-bool pg_connection_busy(resource connection)
-
-Returns connections is executing query or not.
-
---------------------------------------------------------------------
-int pg_connection_status(resource connection)
-
-Gets connection status. It returns PGSQL_CONNECTION_OK or
-PGSQL_CONNECTION_BAD.
-
---------------------------------------------------------------------
-bool pg_connection_reset(resource connection)
-
-Resets communication port to Postgresql server using the same
-connection parameter. It's useful for error recovery.
-
---------------------------------------------------------------------
-string pg_result_error(resource result)
-
-Get error message associated with result
-
---------------------------------------------------------------------
-int pg_result_status(resource result)
-
-Get status of query result
-
---------------------------------------------------------------------
-
-
-Copy functions
-
---------------------------------------------------------------------
-mixed pg_copy_to(int connection_id, string table_name,
- [, string delim [, string null_as]])
-
-nt pg_copy_from(int connection_id, string table_name, array rows
- [, string delim [, string null_as]])
-
---------------------------------------------------------------------
-
-Utility functions
-
---------------------------------------------------------------------
-string pg_escape_string(string data)
-Escape string or binary for SQL statemen (7.2 or later)
-
-
-string pg_escape_bytea(string data)
-Escape string or binary for SQL statement (7.2 or later)
-
---------------------------------------------------------------------
-
-Large Object Functions
-
---------------------------------------------------------------------
-int pg_lo_tell(resource large_object)
-Returns current position of large object
-
---------------------------------------------------------------------
-bool pg_lo_lseek(resource large_object, int offset[, int whence])
-Seeks position of large object
-
---------------------------------------------------------------------
-
-Notice message function
-
---------------------------------------------------------------------
-
-string pg_last_notice(resource connection)
-Returns the last notice set by the backend
-
-This function is fully implemed in only in current CVS version.
-PHP 4.3.0 supposed to included fully implemented version.
-
-NOTE: Added in PHP 4.0.6, but there is bug in notice message handling
-in PHP 4.0.6. Do no use 4.0.6 with pgsql module!!
-
---------------------------------------------------------------------
-
-Utility functions (for PHP 4.3.0)
-
---------------------------------------------------------------------
-array pg_metadata(resource db, string table)
- Get metadata
-
---------------------------------------------------------------------
-array pg_convert(resource db, string table, array values)
- Check and convert values for PostgreSQL SQL statement
-
---------------------------------------------------------------------
-bool pg_insert(resource db, string table, array values[, bool convert[, bool async]])
- Insert values (filed=>value) to table
-
---------------------------------------------------------------------
-bool pg_update(resource db, string table, array fields, array ids[, bool convert[, bool async]])
- Update table using values (field=>value) and ids (id=>value)
-
---------------------------------------------------------------------
-bool pg_delete(resource db, string table, array ids[, bool convert[, bool async]])
- Delete records has ids (id=>value)
-
---------------------------------------------------------------------
-array pg_select(resource db, string table, array ids[, bool convert])
- Select records that has ids (id=>value)
-
---------------------------------------------------------------------
-
-Again, experimental functions are subject to be changed without
-notice.
-
diff --git a/ext/pgsql/config.m4 b/ext/pgsql/config.m4
deleted file mode 100644
index ffc416aaf4..0000000000
--- a/ext/pgsql/config.m4
+++ /dev/null
@@ -1,72 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_PGSQL_CHECK_FUNCTIONS,[
-])
-
-PHP_ARG_WITH(pgsql,for PostgreSQL support,
-[ --with-pgsql[=DIR] Include PostgreSQL support. DIR is the PostgreSQL
- base install directory, defaults to /usr/local/pgsql.])
-
-if test "$PHP_PGSQL" != "no"; then
- PHP_EXPAND_PATH($PGSQL_INCLUDE, PGSQL_INCLUDE)
-
- if test "$PHP_PGSQL" = "yes"; then
- PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/pgsql"
- else
- PGSQL_SEARCH_PATHS=$PHP_PGSQL
- fi
-
- for i in $PGSQL_SEARCH_PATHS; do
- for j in include include/pgsql include/postgres include/postgresql ""; do
- if test -r "$i/$j/libpq-fe.h"; then
- PGSQL_INC_BASE=$i
- PGSQL_INCLUDE=$i/$j
- if test -r "$i/$j/pg_config.h"; then
- AC_DEFINE(HAVE_PG_CONFIG_H,1,[Whether to have pg_config.h])
- fi
- fi
- done
-
- for j in lib lib/pgsql lib/postgres lib/postgresql ""; do
- if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then
- PGSQL_LIBDIR=$i/$j
- fi
- done
- done
-
- if test -z "$PGSQL_INCLUDE"; then
- AC_MSG_ERROR(Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path)
- fi
-
- if test -z "$PGSQL_LIBDIR"; then
- AC_MSG_ERROR(Cannot find libpq.so. Please specify correct PostgreSQL installation path)
- fi
-
- if test -z "$PGSQL_INCLUDE" -a -z "$PGSQL_LIBDIR" ; then
- AC_MSG_ERROR([Unable to find libpq anywhere under $withval])
- fi
-
- AC_DEFINE(HAVE_PGSQL,1,[Whether to build PostgreSQL support or not])
- old_LIBS=$LIBS
- old_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR"
- AC_CHECK_LIB(pq, PQescapeString,AC_DEFINE(HAVE_PQESCAPE,1,[PostgreSQL 7.2.0 or later]))
- AC_CHECK_LIB(pq, PQsetnonblocking,AC_DEFINE(HAVE_PQSETNONBLOCKING,1,[PostgreSQL 7.0.x or laler]))
- AC_CHECK_LIB(pq, PQcmdTuples,AC_DEFINE(HAVE_PQCMDTUPLES,1,[Broken libpq under windows]))
- AC_CHECK_LIB(pq, PQoidValue,AC_DEFINE(HAVE_PQOIDVALUE,1,[Older PostgreSQL]))
- AC_CHECK_LIB(pq, PQclientEncoding,AC_DEFINE(HAVE_PQCLIENTENCODING,1,[PostgreSQL 7.0.x or later]))
- AC_CHECK_LIB(pq, pg_encoding_to_char,AC_DEFINE(HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT,1,[Whether libpq is compiled with --enable-multibye]))
- LIBS=$old_LIBS
- LDFLAGS=$old_LDFLAGS
-
- PHP_ADD_LIBRARY_WITH_PATH(pq, $PGSQL_LIBDIR, PGSQL_SHARED_LIBADD)
- PHP_SUBST(PGSQL_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($PGSQL_INCLUDE)
-
- PHP_NEW_EXTENSION(pgsql, pgsql.c, $ext_shared)
-fi
-
-
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
deleted file mode 100644
index f4e41dd738..0000000000
--- a/ext/pgsql/pgsql.c
+++ /dev/null
@@ -1,4286 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Jouni Ahto <jouni.ahto@exdec.fi> |
- | Yasuo Ohgaki <yohgaki@php.net> |
- | Youichi Iwakiri <yiwakiri@st.rim.or.jp> (pg_copy_*) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-
-#define PHP_PGSQL_PRIVATE 1
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define SMART_STR_PREALLOC 512
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/php_smart_str.h"
-#include "php_pgsql.h"
-#include "php_globals.h"
-
-#if HAVE_PGSQL
-
-#ifndef InvalidOid
-#define InvalidOid ((Oid) 0)
-#endif
-
-#define PGSQL_ASSOC 1<<0
-#define PGSQL_NUM 1<<1
-#define PGSQL_BOTH (PGSQL_ASSOC|PGSQL_NUM)
-
-#define PGSQL_STATUS_LONG 1
-#define PGSQL_STATUS_STRING 2
-
-#define PGSQL_MAX_LENGTH_OF_LONG 30
-#define PGSQL_MAX_LENGTH_OF_DOUBLE 60
-
-#define PGSQL_RETURN_OID(oid) do { \
- if (oid > LONG_MAX) { \
- smart_str s = {0}; \
- smart_str_append_unsigned(&s, oid); \
- smart_str_0(&s); \
- RETURN_STRINGL(s.c, s.len, 0); \
- } \
- RETURN_LONG((long)oid); \
-} while(0)
-
-
-#if HAVE_PQSETNONBLOCKING
-#define PQ_SETNONBLOCKING(pg_link, flag) PQsetnonblocking(pg_link, flag)
-#else
-#define PQ_SETNONBLOCKING(pg_link, flag) 0
-#endif
-
-#define CHECK_DEFAULT_LINK(x) if (x == -1) { php_error(E_WARNING, "%s() no PostgreSQL link opened yet", get_active_function_name(TSRMLS_C)); }
-
-/* {{{ pgsql_functions[]
- */
-function_entry pgsql_functions[] = {
- /* connection functions */
- PHP_FE(pg_connect, NULL)
- PHP_FE(pg_pconnect, NULL)
- PHP_FE(pg_close, NULL)
- PHP_FE(pg_connection_status, NULL)
- PHP_FE(pg_connection_busy, NULL)
- PHP_FE(pg_connection_reset, NULL)
- PHP_FE(pg_host, NULL)
- PHP_FE(pg_dbname, NULL)
- PHP_FE(pg_port, NULL)
- PHP_FE(pg_tty, NULL)
- PHP_FE(pg_options, NULL)
- /* query functions */
- PHP_FE(pg_query, NULL)
- PHP_FE(pg_send_query, NULL)
- PHP_FE(pg_cancel_query, NULL)
- /* result functions */
- PHP_FE(pg_fetch_result, NULL)
- PHP_FE(pg_fetch_row, NULL)
- PHP_FE(pg_fetch_array, NULL)
- PHP_FE(pg_fetch_object, NULL)
- PHP_FE(pg_affected_rows,NULL)
- PHP_FE(pg_get_result, NULL)
- PHP_FE(pg_result_status,NULL)
- PHP_FE(pg_free_result, NULL)
- PHP_FE(pg_last_oid, NULL)
- PHP_FE(pg_num_rows, NULL)
- PHP_FE(pg_num_fields, NULL)
- PHP_FE(pg_field_name, NULL)
- PHP_FE(pg_field_num, NULL)
- PHP_FE(pg_field_size, NULL)
- PHP_FE(pg_field_type, NULL)
- PHP_FE(pg_field_prtlen, NULL)
- PHP_FE(pg_field_is_null,NULL)
- /* error message functions */
- PHP_FE(pg_result_error, NULL)
- PHP_FE(pg_last_error, NULL)
- PHP_FE(pg_last_notice, NULL)
- /* copy functions */
- PHP_FE(pg_put_line, NULL)
- PHP_FE(pg_end_copy, NULL)
- PHP_FE(pg_copy_to, NULL)
- PHP_FE(pg_copy_from, NULL)
- /* debug functions */
- PHP_FE(pg_trace, NULL)
- PHP_FE(pg_untrace, NULL)
- /* large object functions */
- PHP_FE(pg_lo_create, NULL)
- PHP_FE(pg_lo_unlink, NULL)
- PHP_FE(pg_lo_open, NULL)
- PHP_FE(pg_lo_close, NULL)
- PHP_FE(pg_lo_read, NULL)
- PHP_FE(pg_lo_write, NULL)
- PHP_FE(pg_lo_read_all, NULL)
- PHP_FE(pg_lo_import, NULL)
- PHP_FE(pg_lo_export, NULL)
- PHP_FE(pg_lo_seek, NULL)
- PHP_FE(pg_lo_tell, NULL)
- /* utility functions */
-#if HAVE_PQESCAPE
- PHP_FE(pg_escape_string,NULL)
- PHP_FE(pg_escape_bytea, NULL)
-#endif
-#if HAVE_PQCLIENTENCODING
- PHP_FE(pg_client_encoding, NULL)
- PHP_FE(pg_set_client_encoding, NULL)
-#endif
- /* misc function */
- PHP_FE(pg_metadata, NULL)
- PHP_FE(pg_convert, NULL)
- PHP_FE(pg_insert, NULL)
- PHP_FE(pg_update, NULL)
- PHP_FE(pg_delete, NULL)
- PHP_FE(pg_select, NULL)
- /* aliases for downwards compatibility */
- PHP_FALIAS(pg_exec, pg_query, NULL)
- PHP_FALIAS(pg_getlastoid, pg_last_oid, NULL)
- PHP_FALIAS(pg_cmdtuples, pg_affected_rows, NULL)
- PHP_FALIAS(pg_errormessage, pg_last_error, NULL)
- PHP_FALIAS(pg_numrows, pg_num_rows, NULL)
- PHP_FALIAS(pg_numfields, pg_num_fields, NULL)
- PHP_FALIAS(pg_fieldname, pg_field_name, NULL)
- PHP_FALIAS(pg_fieldsize, pg_field_size, NULL)
- PHP_FALIAS(pg_fieldtype, pg_field_type, NULL)
- PHP_FALIAS(pg_fieldnum, pg_field_num, NULL)
- PHP_FALIAS(pg_fieldprtlen, pg_field_prtlen, NULL)
- PHP_FALIAS(pg_fieldisnull, pg_field_is_null, NULL)
- PHP_FALIAS(pg_freeresult, pg_free_result, NULL)
- PHP_FALIAS(pg_result, pg_fetch_result, NULL)
- PHP_FALIAS(pg_loreadall, pg_lo_read_all, NULL)
- PHP_FALIAS(pg_locreate, pg_lo_create, NULL)
- PHP_FALIAS(pg_lounlink, pg_lo_unlink, NULL)
- PHP_FALIAS(pg_loopen, pg_lo_open, NULL)
- PHP_FALIAS(pg_loclose, pg_lo_close, NULL)
- PHP_FALIAS(pg_loread, pg_lo_read, NULL)
- PHP_FALIAS(pg_lowrite, pg_lo_write, NULL)
- PHP_FALIAS(pg_loimport, pg_lo_import, NULL)
- PHP_FALIAS(pg_loexport, pg_lo_export, NULL)
-#if HAVE_PQCLIENTENCODING
- PHP_FALIAS(pg_clientencoding, pg_client_encoding, NULL)
- PHP_FALIAS(pg_setclientencoding, pg_set_client_encoding, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pgsql_module_entry
- */
-zend_module_entry pgsql_module_entry = {
- STANDARD_MODULE_HEADER,
- "pgsql",
- pgsql_functions,
- PHP_MINIT(pgsql),
- PHP_MSHUTDOWN(pgsql),
- PHP_RINIT(pgsql),
- PHP_RSHUTDOWN(pgsql),
- PHP_MINFO(pgsql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PGSQL
-ZEND_GET_MODULE(pgsql)
-#endif
-
-static int le_link, le_plink, le_result, le_lofp, le_string;
-
-#ifdef ZTS
-int pgsql_globals_id;
-#else
-php_pgsql_globals pgsql_globals;
-#endif
-
-/* {{{ php_pgsql_set_default_link
- */
-static void php_pgsql_set_default_link(int id TSRMLS_DC)
-{
- zend_list_addref(id);
-
- if (PGG(default_link) != -1) {
- zend_list_delete(PGG(default_link));
- }
-
- PGG(default_link) = id;
-}
-/* }}} */
-
-/* {{{ _close_pgsql_link
- */
-static void _close_pgsql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PGconn *link = (PGconn *)rsrc->ptr;
- PGresult *res;
-
- while ((res = PQgetResult(link))) {
- PQclear(res);
- }
- PQfinish(link);
- PGG(num_links)--;
-}
-/* }}} */
-
-/* {{{ _close_pgsql_plink
- */
-static void _close_pgsql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PGconn *link = (PGconn *)rsrc->ptr;
- PGresult *res;
-
- while ((res = PQgetResult(link))) {
- PQclear(res);
- }
- PQfinish(link);
- PGG(num_persistent)--;
- PGG(num_links)--;
-}
-/* }}} */
-
-/* {{{ _php_pgsql_notice_handler
- */
-static void _php_pgsql_notice_handler(void *resource_id, const char *message)
-{
- php_pgsql_notice *notice;
-
- TSRMLS_FETCH();
- if (! PGG(ignore_notices)) {
- if (PGG(log_notices)) {
- php_log_err((char *) message TSRMLS_CC);
- }
- notice = (php_pgsql_notice *)emalloc(sizeof(php_pgsql_notice));
- notice->len = strlen(message);
- notice->message = estrndup(message, notice->len);
- zend_hash_index_update(&PGG(notices), *(int *)resource_id, (void **)&notice, sizeof(php_pgsql_notice *), NULL);
- }
-}
-/* }}} */
-
-#define PHP_PGSQL_NOTICE_PTR_DTOR (void (*)(void *))_php_pgsql_notice_ptr_dtor
-
-/* {{{ _php_pgsql_notice_dtor
- */
-static void _php_pgsql_notice_ptr_dtor(void **ptr)
-{
- php_pgsql_notice *notice = (php_pgsql_notice *)*ptr;
- efree(notice->message);
- efree(notice);
-}
-/* }}} */
-
-/* {{{ _rollback_transactions
- */
-static int _rollback_transactions(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PGconn *link;
- PGresult *res;
- int orig;
-
- if (Z_TYPE_P(rsrc) != le_plink)
- return 0;
-
- link = (PGconn *) rsrc->ptr;
-
- if (PQ_SETNONBLOCKING(link, 0)) {
- php_error(E_NOTICE,"PostgreSQL cannot set connection to blocking mode");
- return -1;
- }
-
- while ((res = PQgetResult(link))) {
- PQclear(res);
- }
- orig = PGG(ignore_notices);
- PGG(ignore_notices) = 1;
- res = PQexec(link,"BEGIN;ROLLBACK;");
- PQclear(res);
- PGG(ignore_notices) = orig;
-
- return 0;
-}
-/* }}} */
-
-/* {{{ _free_ptr
- */
-static void _free_ptr(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pgLofp *lofp = (pgLofp *)rsrc->ptr;
- efree(lofp);
-}
-/* }}} */
-
-/* {{{ _free_result
- */
-static void _free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pgsql_result_handle *pg_result = (pgsql_result_handle *)rsrc->ptr;
-
- PQclear(pg_result->result);
- efree(pg_result);
-}
-/* }}} */
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-STD_PHP_INI_BOOLEAN("pgsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_persistent, php_pgsql_globals, pgsql_globals)
-STD_PHP_INI_ENTRY_EX("pgsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, php_pgsql_globals, pgsql_globals, display_link_numbers)
-STD_PHP_INI_ENTRY_EX("pgsql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, php_pgsql_globals, pgsql_globals, display_link_numbers)
-STD_PHP_INI_BOOLEAN("pgsql.auto_reset_persistent", "0", PHP_INI_SYSTEM, OnUpdateBool, auto_reset_persistent, php_pgsql_globals, pgsql_globals)
-STD_PHP_INI_BOOLEAN("pgsql.ignore_notice", "0", PHP_INI_ALL, OnUpdateBool, ignore_notices, php_pgsql_globals, pgsql_globals)
-STD_PHP_INI_BOOLEAN("pgsql.log_notice", "0", PHP_INI_ALL, OnUpdateBool, log_notices, php_pgsql_globals, pgsql_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_pgsql_init_globals
- */
-static void php_pgsql_init_globals(php_pgsql_globals *pgsql_globals_p TSRMLS_DC)
-{
- PGG(num_persistent) = 0;
- /* Initilize notice message hash at MINIT only */
- zend_hash_init_ex(&PGG(notices), 0, NULL, PHP_PGSQL_NOTICE_PTR_DTOR, 1, 0);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pgsql)
-{
-#ifdef ZTS
- ts_allocate_id(&pgsql_globals_id, sizeof(php_pgsql_globals), (ts_allocate_ctor) php_pgsql_init_globals, NULL);
-#else
- php_pgsql_init_globals(&pgsql_globals TSRMLS_CC);
-#endif
-
- REGISTER_INI_ENTRIES();
-
- le_link = zend_register_list_destructors_ex(_close_pgsql_link, NULL, "pgsql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_pgsql_plink, "pgsql link persistent", module_number);
- le_result = zend_register_list_destructors_ex(_free_result, NULL, "pgsql result", module_number);
- le_lofp = zend_register_list_destructors_ex(_free_ptr, NULL, "pgsql large object", module_number);
- le_string = zend_register_list_destructors_ex(_free_ptr, NULL, "pgsql string", module_number);
- /* For pg_fetch_array() */
- REGISTER_LONG_CONSTANT("PGSQL_ASSOC", PGSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_NUM", PGSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_BOTH", PGSQL_BOTH, CONST_CS | CONST_PERSISTENT);
- /* For pg_connection_status() */
- REGISTER_LONG_CONSTANT("PGSQL_CONNECTION_BAD", CONNECTION_BAD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_CONNECTION_OK", CONNECTION_OK, CONST_CS | CONST_PERSISTENT);
- /* For lo_seek() */
- REGISTER_LONG_CONSTANT("PGSQL_SEEK_SET", SEEK_SET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_SEEK_CUR", SEEK_CUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_SEEK_END", SEEK_END, CONST_CS | CONST_PERSISTENT);
- /* For pg_result_status() return value type */
- REGISTER_LONG_CONSTANT("PGSQL_STATUS_LONG", PGSQL_STATUS_LONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_STATUS_STRING", PGSQL_STATUS_STRING, CONST_CS | CONST_PERSISTENT);
- /* For pg_result_status() return value */
- REGISTER_LONG_CONSTANT("PGSQL_EMPTY_QUERY", PGRES_EMPTY_QUERY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_COMMAND_OK", PGRES_COMMAND_OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_TUPLES_OK", PGRES_TUPLES_OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_COPY_OUT", PGRES_COPY_OUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_COPY_IN", PGRES_COPY_IN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_BAD_RESPONSE", PGRES_BAD_RESPONSE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_NONFATAL_ERROR", PGRES_NONFATAL_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_FATAL_ERROR", PGRES_FATAL_ERROR, CONST_CS | CONST_PERSISTENT);
- /* pg_convert options */
- REGISTER_LONG_CONSTANT("PGSQL_CONV_IGNORE_DEFAULT", PGSQL_CONV_IGNORE_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_CONV_FORCE_NULL", PGSQL_CONV_FORCE_NULL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_CONV_IGNORE_NOT_NULL", PGSQL_CONV_IGNORE_NOT_NULL, CONST_CS | CONST_PERSISTENT);
- /* pg_insert/update/delete/select options */
- REGISTER_LONG_CONSTANT("PGSQL_DML_NO_CONV", PGSQL_DML_NO_CONV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_DML_EXEC", PGSQL_DML_EXEC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_DML_ASYNC", PGSQL_DML_ASYNC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_DML_STRING", PGSQL_DML_STRING, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pgsql)
-{
- UNREGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(pgsql)
-{
- PGG(default_link)=-1;
- PGG(num_links) = PGG(num_persistent);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(pgsql)
-{
- /* clean up notice messages */
- zend_hash_clean(&PGG(notices));
- /* clean up persistent connection */
- zend_hash_apply(&EG(persistent_list), (apply_func_t) _rollback_transactions TSRMLS_CC);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pgsql)
-{
- char buf[256];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "PostgreSQL Support", "enabled");
-#if HAVE_PG_CONFIG_H
- php_info_print_table_row(2, "PostgreSQL(libpq) Version", PG_VERSION);
-#ifdef MULTIBYTE
- php_info_print_table_row(2, "Multibyte charater support", "enabled");
-#else
- php_info_print_table_row(2, "Multibyte charater support", "disabled");
-#endif
-#ifdef USE_SSL
- php_info_print_table_row(2, "SSL support", "enabled");
-#else
- php_info_print_table_row(2, "SSL support", "disabled");
-#endif
-#endif /* HAVE_PG_CONFIG_H */
- sprintf(buf, "%ld", PGG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", PGG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-
-/* {{{ php_pgsql_do_connect
- */
-static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *host=NULL,*port=NULL,*options=NULL,*tty=NULL,*dbname=NULL,*connstring=NULL;
- PGconn *pgsql;
- smart_str str = {0};
- zval **args[5];
- int i;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() == 2 || ZEND_NUM_ARGS() > 5
- || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- smart_str_appends(&str, "pgsql");
-
- for (i = 0; i < ZEND_NUM_ARGS(); i++) {
- convert_to_string_ex(args[i]);
- smart_str_appendc(&str, '_');
- smart_str_appendl(&str, Z_STRVAL_PP(args[i]), Z_STRLEN_PP(args[i]));
- }
-
- smart_str_0(&str);
-
- if (ZEND_NUM_ARGS() == 1) { /* new style, using connection string */
- connstring = Z_STRVAL_PP(args[0]);
- } else {
- host = Z_STRVAL_PP(args[0]);
- port = Z_STRVAL_PP(args[1]);
- dbname = Z_STRVAL_PP(args[ZEND_NUM_ARGS()-1]);
-
- switch (ZEND_NUM_ARGS()) {
- case 5:
- tty = Z_STRVAL_PP(args[3]);
- /* fall through */
- case 4:
- options = Z_STRVAL_PP(args[2]);
- break;
- }
- }
-
- if (persistent && PGG(allow_persistent)) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), str.c, str.len+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (PGG(max_links)!=-1 && PGG(num_links)>=PGG(max_links)) {
- php_error(E_WARNING,"%s() cannot create new link. Too many open links (%d)",
- get_active_function_name(TSRMLS_C), PGG(num_links));
- goto err;
- }
- if (PGG(max_persistent)!=-1 && PGG(num_persistent)>=PGG(max_persistent)) {
- php_error(E_WARNING,"%s() cannot create new link. Too many open persistent links (%d)",
- get_active_function_name(TSRMLS_C), PGG(num_persistent));
- goto err;
- }
-
- /* create the link */
- if (connstring) {
- pgsql=PQconnectdb(connstring);
- } else {
- pgsql=PQsetdb(host,port,options,tty,dbname);
- }
- if (pgsql==NULL || PQstatus(pgsql)==CONNECTION_BAD) {
- php_error(E_WARNING,"%s() unable to connect to PostgreSQL server: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- if (pgsql) {
- PQfinish(pgsql);
- }
- goto err;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = pgsql;
- if (zend_hash_update(&EG(persistent_list), str.c, str.len+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- goto err;
- }
- PGG(num_links)++;
- PGG(num_persistent)++;
- } else { /* we do */
- if (Z_TYPE_P(le) != le_plink) {
- RETURN_FALSE;
- }
- /* ensure that the link did not die */
- if (PGG(auto_reset_persistent)) {
- /* need to send & get something from backend to
- make sure we catch CONNECTION_BAD everytime */
- PGresult *pg_result;
- pg_result = PQexec(le->ptr, "select 1");
- PQclear(pg_result);
- }
- if (PQstatus(le->ptr)==CONNECTION_BAD) { /* the link died */
- if (le->ptr == NULL) {
- if (connstring) {
- le->ptr=PQconnectdb(connstring);
- } else {
- le->ptr=PQsetdb(host,port,options,tty,dbname);
- }
- }
- else {
- PQreset(le->ptr);
- }
- if (le->ptr==NULL || PQstatus(le->ptr)==CONNECTION_BAD) {
- php_error(E_WARNING,"%s() PostgreSQL link lost, unable to reconnect",
- get_active_function_name(TSRMLS_C));
- zend_hash_del(&EG(persistent_list),str.c,str.len+1);
- goto err;
- }
- }
- pgsql = (PGconn *) le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, pgsql, le_plink);
- } else {
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual pgsql link sits.
- * if it doesn't, open a new pgsql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),str.c,str.len+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) (long) index_ptr->ptr; /* XXX: bogus? cast */
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- Z_LVAL_P(return_value) = link;
- zend_list_addref(link);
- php_pgsql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- goto cleanup;
- } else {
- zend_hash_del(&EG(regular_list),str.c,str.len+1);
- }
- }
- if (PGG(max_links)!=-1 && PGG(num_links)>=PGG(max_links)) {
- php_error(E_WARNING,"%s() cannot create new link. Too many open links (%d)",
- get_active_function_name(TSRMLS_C), PGG(num_links));
- goto err;
- }
- if (connstring) {
- pgsql = PQconnectdb(connstring);
- } else {
- pgsql = PQsetdb(host,port,options,tty,dbname);
- }
- if (pgsql==NULL || PQstatus(pgsql)==CONNECTION_BAD) {
- php_error(E_WARNING,"%s() unable to connect to PostgreSQL server: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- goto err;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, pgsql, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),str.c,str.len+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- goto err;
- }
- PGG(num_links)++;
- }
- /* set notice processer */
- if (! PGG(ignore_notices) && Z_TYPE_P(return_value) == IS_RESOURCE) {
- PQsetNoticeProcessor(pgsql, _php_pgsql_notice_handler, (void *)&Z_RESVAL_P(return_value));
- }
- php_pgsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-
-cleanup:
- smart_str_free(&str);
- return;
-
-err:
- smart_str_free(&str);
- RETURN_FALSE;
-}
-/* }}} */
-
-#if 0
-/* {{{ php_pgsql_get_default_link
- */
-static int php_pgsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (PGG(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_pgsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
- }
- return PGG(default_link);
-}
-/* }}} */
-#endif
-
-/* {{{ proto resource pg_connect([string connection_string] | [string host, string port [, string options [, string tty,]] string database)
- Open a PostgreSQL connection */
-PHP_FUNCTION(pg_connect)
-{
- php_pgsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto resource pg_pconnect([string connection_string] | [string host, string port [, string options [, string tty,]] string database)
- Open a persistent PostgreSQL connection */
-PHP_FUNCTION(pg_pconnect)
-{
- php_pgsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto bool pg_close([resource connection])
- Close a PostgreSQL connection */
-PHP_FUNCTION(pg_close)
-{
- zval **pgsql_link = NULL;
- int id;
- PGconn *pgsql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(pgsql_link));
- }
-
- if (id!=-1
- || (pgsql_link && Z_RESVAL_PP(pgsql_link)==PGG(default_link))) {
- zend_list_delete(PGG(default_link));
- PGG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#define PHP_PG_DBNAME 1
-#define PHP_PG_ERROR_MESSAGE 2
-#define PHP_PG_OPTIONS 3
-#define PHP_PG_PORT 4
-#define PHP_PG_TTY 5
-#define PHP_PG_HOST 6
-
-/* {{{ php_pgsql_get_link_info
- */
-static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- switch(entry_type) {
- case PHP_PG_DBNAME:
- Z_STRVAL_P(return_value) = PQdb(pgsql);
- break;
- case PHP_PG_ERROR_MESSAGE:
- Z_STRVAL_P(return_value) = PQerrorMessage(pgsql);
- break;
- case PHP_PG_OPTIONS:
- Z_STRVAL_P(return_value) = PQoptions(pgsql);
- break;
- case PHP_PG_PORT:
- Z_STRVAL_P(return_value) = PQport(pgsql);
- break;
- case PHP_PG_TTY:
- Z_STRVAL_P(return_value) = PQtty(pgsql);
- break;
- case PHP_PG_HOST:
- Z_STRVAL_P(return_value) = PQhost(pgsql);
- break;
- default:
- RETURN_FALSE;
- }
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = (char *) estrdup(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto string pg_dbname([resource connection])
- Get the database name */
-PHP_FUNCTION(pg_dbname)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_DBNAME);
-}
-/* }}} */
-
-/* {{{ proto string pg_last_error([resource connection])
- Get the error message string */
-PHP_FUNCTION(pg_last_error)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_ERROR_MESSAGE);
-}
-/* }}} */
-
-/* {{{ proto string pg_options([resource connection])
- Get the options associated with the connection */
-PHP_FUNCTION(pg_options)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_OPTIONS);
-}
-/* }}} */
-
-/* {{{ proto int pg_port([resource connection])
- Return the port number associated with the connection */
-PHP_FUNCTION(pg_port)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_PORT);
-}
-/* }}} */
-
-/* {{{ proto string pg_tty([resource connection])
- Return the tty name associated with the connection */
-PHP_FUNCTION(pg_tty)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_TTY);
-}
-/* }}} */
-
-/* {{{ proto string pg_host([resource connection])
- Returns the host name associated with the connection */
-PHP_FUNCTION(pg_host)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_HOST);
-}
-/* }}} */
-
-/* {{{ proto resource pg_query([resource connection,] string query)
- Execute a query */
-PHP_FUNCTION(pg_query)
-{
- zval **query, **pgsql_link = NULL;
- int id = -1;
- int leftover = 0;
- PGconn *pgsql;
- PGresult *pgsql_result;
- ExecStatusType status;
- pgsql_result_handle *pg_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pgsql_link, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- convert_to_string_ex(query);
- if (PQ_SETNONBLOCKING(pgsql, 0)) {
- php_error(E_NOTICE,"%s() cannot set connection to blocking mode",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- leftover = 1;
- }
- if (leftover) {
- php_error(E_NOTICE,"%s() found results on this connection. Use pg_get_result() to get results",
- get_active_function_name(TSRMLS_C));
- }
- pgsql_result = PQexec(pgsql, Z_STRVAL_PP(query));
-
- if (pgsql_result) {
- status = PQresultStatus(pgsql_result);
- } else {
- status = (ExecStatusType) PQstatus(pgsql);
- }
-
- switch (status) {
- case PGRES_EMPTY_QUERY:
- case PGRES_BAD_RESPONSE:
- case PGRES_NONFATAL_ERROR:
- case PGRES_FATAL_ERROR:
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- break;
- case PGRES_COMMAND_OK: /* successful command that did not return rows */
- default:
- if (pgsql_result) {
- pg_result = (pgsql_result_handle *) emalloc(sizeof(pgsql_result_handle));
- pg_result->conn = pgsql;
- pg_result->result = pgsql_result;
- pg_result->row = -1;
- ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result);
- } else {
- RETURN_FALSE;
- }
- break;
- }
-}
-/* }}} */
-
-#define PHP_PG_NUM_ROWS 1
-#define PHP_PG_NUM_FIELDS 2
-#define PHP_PG_CMD_TUPLES 3
-
-/* {{{ php_pgsql_get_result_info
- */
-static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
-
- switch (entry_type) {
- case PHP_PG_NUM_ROWS:
- Z_LVAL_P(return_value) = PQntuples(pgsql_result);
- break;
- case PHP_PG_NUM_FIELDS:
- Z_LVAL_P(return_value) = PQnfields(pgsql_result);
- break;
- case PHP_PG_CMD_TUPLES:
-#if HAVE_PQCMDTUPLES
- Z_LVAL_P(return_value) = atoi(PQcmdTuples(pgsql_result));
-#else
- php_error(E_WARNING,"This compilation does not support %s()",
- get_active_function_name(TSRMLS_C));
- Z_LVAL_P(return_value) = 0;
-#endif
- break;
- default:
- RETURN_FALSE;
- }
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int pg_num_rows(resource result)
- Return the number of rows in the result */
-PHP_FUNCTION(pg_num_rows)
-{
- php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_NUM_ROWS);
-}
-/* }}} */
-
-/* {{{ proto int pg_num_fields(resource result)
- Return the number of fields in the result */
-PHP_FUNCTION(pg_num_fields)
-{
- php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_NUM_FIELDS);
-}
-/* }}} */
-
-/* {{{ proto int pg_affected_rows(resource result)
- Returns the number of affected tuples */
-PHP_FUNCTION(pg_affected_rows)
-{
- php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_CMD_TUPLES);
-}
-/* }}} */
-
-/* {{{ proto string pg_last_notice(resource connection)
- Returns the last notice set by the backend */
-PHP_FUNCTION(pg_last_notice)
-{
- zval *pgsql_link;
- PGconn *pg_link;
- int id = -1;
- php_pgsql_notice **notice;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- return;
- }
- /* Just to check if user passed valid resoruce */
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (zend_hash_index_find(&PGG(notices), Z_RESVAL_P(pgsql_link), (void **)&notice) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_STRINGL((*notice)->message, (*notice)->len, 1);
-}
-/* }}} */
-
-/* {{{ get_field_name
- */
-static char *get_field_name(PGconn *pgsql, Oid oid, HashTable *list TSRMLS_DC)
-{
- PGresult *result;
- smart_str str = {0};
- list_entry *field_type;
- char *ret=NULL;
-
- /* try to lookup the type in the resource list */
- smart_str_appends(&str, "pgsql_oid_");
- smart_str_append_unsigned(&str, oid);
- smart_str_0(&str);
-
- if (zend_hash_find(list,str.c,str.len+1,(void **) &field_type)==SUCCESS) {
- ret = estrdup((char *)field_type->ptr);
- } else { /* hash all oid's */
- int i,num_rows;
- int oid_offset,name_offset;
- char *tmp_oid, *end_ptr, *tmp_name;
- list_entry new_oid_entry;
-
- if ((result = PQexec(pgsql,"select oid,typname from pg_type")) == NULL) {
- smart_str_free(&str);
- return empty_string;
- }
- num_rows = PQntuples(result);
- oid_offset = PQfnumber(result,"oid");
- name_offset = PQfnumber(result,"typname");
-
- for (i=0; i<num_rows; i++) {
- if ((tmp_oid = PQgetvalue(result,i,oid_offset))==NULL) {
- continue;
- }
-
- str.len = 0;
- smart_str_appends(&str, "pgsql_oid_");
- smart_str_appends(&str, tmp_oid);
- smart_str_0(&str);
-
- if ((tmp_name = PQgetvalue(result,i,name_offset))==NULL) {
- continue;
- }
- Z_TYPE(new_oid_entry) = le_string;
- new_oid_entry.ptr = estrdup(tmp_name);
- zend_hash_update(list,str.c,str.len+1,(void *) &new_oid_entry, sizeof(list_entry), NULL);
- if (!ret && strtoul(tmp_oid, &end_ptr, 10)==oid) {
- ret = estrdup(tmp_name);
- }
- }
- }
-
- smart_str_free(&str);
- return ret;
-}
-/* }}} */
-
-#define PHP_PG_FIELD_NAME 1
-#define PHP_PG_FIELD_SIZE 2
-#define PHP_PG_FIELD_TYPE 3
-
-/* {{{ php_pgsql_get_field_info
- */
-static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result, **field;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- convert_to_long_ex(field);
-
- if (Z_LVAL_PP(field) < 0 || Z_LVAL_PP(field) >= PQnfields(pgsql_result)) {
- php_error(E_WARNING,"%s() bad field offset specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_PG_FIELD_NAME:
- Z_STRVAL_P(return_value) = PQfname(pgsql_result, Z_LVAL_PP(field));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value),Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_PG_FIELD_SIZE:
- Z_LVAL_P(return_value) = PQfsize(pgsql_result, Z_LVAL_PP(field));
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_PG_FIELD_TYPE:
- Z_STRVAL_P(return_value) = get_field_name(pg_result->conn, PQftype(pgsql_result, Z_LVAL_PP(field)), &EG(regular_list) TSRMLS_CC);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- default:
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string pg_field_name(resource result, int field_number)
- Returns the name of the field */
-PHP_FUNCTION(pg_field_name)
-{
- php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_FIELD_NAME);
-}
-/* }}} */
-
-/* {{{ proto int pg_field_size(resource result, int field_number)
- Returns the internal size of the field */
-PHP_FUNCTION(pg_field_size)
-{
- php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_FIELD_SIZE);
-}
-/* }}} */
-
-/* {{{ proto string pg_field_type(resource result, int field_number)
- Returns the type name for the given field */
-PHP_FUNCTION(pg_field_type)
-{
- php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_FIELD_TYPE);
-}
-/* }}} */
-
-/* {{{ proto int pg_field_num(resource result, string field_name)
- Returns the field number of the named field */
-PHP_FUNCTION(pg_field_num)
-{
- zval **result, **field;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
-
- convert_to_string_ex(field);
- Z_LVAL_P(return_value) = PQfnumber(pgsql_result, Z_STRVAL_PP(field));
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)
- Returns values from a result identifier */
-PHP_FUNCTION(pg_fetch_result)
-{
- zval **result, **row, **field=NULL;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- int field_offset, pgsql_row;
-
- if ((ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) &&
- (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (ZEND_NUM_ARGS() == 2) {
- if (pg_result->row < 0)
- pg_result->row = 0;
- pgsql_row = pg_result->row;
- if (pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- } else {
- convert_to_long_ex(row);
- pgsql_row = Z_LVAL_PP(row);
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- php_error(E_WARNING,"%s() unable to jump to row %d on PostgreSQL result index %d",
- get_active_function_name(TSRMLS_C), Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- }
- switch(Z_TYPE_PP(field)) {
- case IS_STRING:
- field_offset = PQfnumber(pgsql_result, Z_STRVAL_PP(field));
- break;
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- break;
- }
- if (field_offset<0 || field_offset>=PQnfields(pgsql_result)) {
- php_error(E_WARNING,"%s() bad column offset specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (PQgetisnull(pgsql_result, pgsql_row, field_offset)) {
- Z_TYPE_P(return_value) = IS_NULL;
- } else {
- Z_STRVAL_P(return_value) = PQgetvalue(pgsql_result, pgsql_row, field_offset);
- Z_STRLEN_P(return_value) = (Z_STRVAL_P(return_value) ? strlen(Z_STRVAL_P(return_value)) : 0);
- Z_STRVAL_P(return_value) = safe_estrndup(Z_STRVAL_P(return_value),Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- }
-}
-/* }}} */
-
-/* {{{ void php_pgsql_fetch_hash */
-static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
- zval **result, **row, **arg3;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- int i, num_fields, pgsql_row;
- char *element, *field_name;
- uint element_len;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result) == FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = PGSQL_BOTH;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &row) == FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = PGSQL_BOTH;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &result, &row, &arg3) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg3);
- result_type = Z_LVAL_PP(arg3);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
-
- if (ZEND_NUM_ARGS() == 1) {
- pg_result->row++;
- pgsql_row = pg_result->row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- } else {
- if (Z_TYPE_PP(row) != IS_NULL) {
- convert_to_long_ex(row);
- pgsql_row = Z_LVAL_PP(row);
- pg_result->row = pgsql_row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- php_error(E_WARNING, "%s() unable to jump to row %d on PostgreSQL result index %d",
- get_active_function_name(TSRMLS_C), Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- } else {
- /* If 2nd param is NULL, ignore it and use the normal way of accessing the next row */
- pg_result->row++;
- pgsql_row = pg_result->row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- }
- }
- array_init(return_value);
- for (i = 0, num_fields = PQnfields(pgsql_result); i < num_fields; i++) {
- if (PQgetisnull(pgsql_result, pgsql_row, i)) {
- if (result_type & PGSQL_NUM) {
- add_index_null(return_value, i);
- }
- if (result_type & PGSQL_ASSOC) {
- field_name = PQfname(pgsql_result, i);
- add_assoc_null(return_value, field_name);
- }
- } else {
- element = PQgetvalue(pgsql_result, pgsql_row, i);
- element_len = (element ? strlen(element) : 0);
- if (element) {
- char *data;
- int data_len;
- int should_copy=0;
-
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(element, element_len, &data_len, 0 TSRMLS_CC);
- } else {
- data = safe_estrndup(element, element_len);
- data_len = element_len;
- }
-
- if (result_type & PGSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy=1;
- }
-
- if (result_type & PGSQL_ASSOC) {
- field_name = PQfname(pgsql_result, i);
- add_assoc_stringl(return_value, field_name, data, data_len, should_copy);
- }
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array pg_fetch_row(resource result [, int row])
- Get a row as an enumerated array */
-PHP_FUNCTION(pg_fetch_row)
-{
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, PGSQL_NUM);
-}
-/* }}} */
-
-/* {{{ proto array pg_fetch_array(resource result [, int row [, int result_type]])
- Fetch a row as an array */
-PHP_FUNCTION(pg_fetch_array)
-{
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto object pg_fetch_object(resource result [, int row[, int result_type]])
- Fetch a row as an object */
-PHP_FUNCTION(pg_fetch_object)
-{
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, PGSQL_ASSOC);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-#define PHP_PG_DATA_LENGTH 1
-#define PHP_PG_DATA_ISNULL 2
-
-/* {{{ php_pgsql_data_info
- */
-static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result, **row, **field;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- int field_offset, pgsql_row;
-
- if ((ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) &&
- (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (ZEND_NUM_ARGS() == 2) {
- if (pg_result->row < 0)
- pg_result->row = 0;
- pgsql_row = pg_result->row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- } else {
- convert_to_long_ex(row);
- pgsql_row = Z_LVAL_PP(row);
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- php_error(E_WARNING,"%s() unable to jump to row %d on PostgreSQL result index %d",
- get_active_function_name(TSRMLS_C), Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- }
-
- switch(Z_TYPE_PP(field)) {
- case IS_STRING:
- convert_to_string_ex(field);
- field_offset = PQfnumber(pgsql_result, Z_STRVAL_PP(field));
- break;
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- break;
- }
- if (field_offset < 0 || field_offset >= PQnfields(pgsql_result)) {
- php_error(E_WARNING, "%s() bad column offset specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_PG_DATA_LENGTH:
- Z_LVAL_P(return_value) = PQgetlength(pgsql_result, pgsql_row, field_offset);
- break;
- case PHP_PG_DATA_ISNULL:
- Z_LVAL_P(return_value) = PQgetisnull(pgsql_result, pgsql_row, field_offset);
- break;
- }
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)
- Returns the printed length */
-PHP_FUNCTION(pg_field_prtlen)
-{
- php_pgsql_data_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_DATA_LENGTH);
-}
-/* }}} */
-
-/* {{{ proto int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)
- Test if a field is NULL */
-PHP_FUNCTION(pg_field_is_null)
-{
- php_pgsql_data_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_DATA_ISNULL);
-}
-/* }}} */
-
-/* {{{ proto bool pg_free_result(resource result)
- Free result memory */
-PHP_FUNCTION(pg_free_result)
-{
- zval **result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
- if (Z_LVAL_PP(result) == 0) {
- RETURN_FALSE;
- }
- zend_list_delete(Z_LVAL_PP(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pg_last_oid(resource result)
- Returns the last object identifier */
-PHP_FUNCTION(pg_last_oid)
-{
- zval **result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- Oid oid;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
- pgsql_result = pg_result->result;
-#ifdef HAVE_PQOIDVALUE
- oid = PQoidValue(pgsql_result);
- if (oid == InvalidOid) {
- RETURN_FALSE;
- }
- PGSQL_RETURN_OID(oid);
-#else
- Z_STRVAL_P(return_value) = (char *) PQoidStatus(pgsql_result);
- if (Z_STRVAL_P(return_value)) {
- RETURN_STRING(Z_STRVAL_P(return_value), 1);
- }
- RETURN_STRING(empty_string, 0);
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool pg_trace(string filename [, string mode [, resource connection]])
- Enable tracing a PostgreSQL connection */
-PHP_FUNCTION(pg_trace)
-{
- zval **z_filename, **z_mode, **z_pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- char *mode = "w";
- FILE *fp = NULL;
- php_stream *stream;
- id = PGG(default_link);
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &z_filename)==FAILURE) {
- RETURN_FALSE;
- }
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &z_filename, &z_mode)==FAILURE) {
- RETURN_FALSE;
- }
- CHECK_DEFAULT_LINK(id);
- convert_to_string_ex(z_mode);
- mode = Z_STRVAL_PP(z_mode);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &z_filename, &z_mode, &z_pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(z_mode);
- mode = Z_STRVAL_PP(z_mode);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, z_pgsql_link, id, "PostgreSQL link", le_link, le_plink);
- convert_to_string_ex(z_filename);
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(z_filename), mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-
- if (!stream) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)fp, REPORT_ERRORS)) {
- php_stream_close(stream);
- RETURN_FALSE;
- }
- php_stream_auto_cleanup(stream);
- PQtrace(pgsql, fp);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pg_untrace([resource connection])
- Disable tracing of a PostgreSQL connection */
-PHP_FUNCTION(pg_untrace)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
- PQuntrace(pgsql);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_create(resource connection)
- Create a large object */
-PHP_FUNCTION(pg_lo_create)
-{
- zval **pgsql_link = NULL;
- PGconn *pgsql;
- Oid pgsql_oid;
- int id = -1;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* XXX: Archive modes not supported until I get some more data. Don't think anybody's
- using it anyway. I believe it's also somehow related to the 'time travel' feature of
- PostgreSQL, that's on the list of features to be removed... Create modes not supported.
- What's the use of an object that can be only written to, but not read from, and vice
- versa? Beats me... And the access type (r/w) must be specified again when opening
- the object, probably (?) overrides this. (Jouni)
- */
-
- if ((pgsql_oid = lo_creat(pgsql, INV_READ|INV_WRITE)) == InvalidOid) {
- php_error(E_WARNING, "%s() unable to create PostgreSQL large object",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- PGSQL_RETURN_OID(pgsql_oid);
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_unlink([resource connection,] int large_object_oid)
- Delete a large object */
-PHP_FUNCTION(pg_lo_unlink)
-{
- zval *pgsql_link = NULL;
- long oid_long;
- char *oid_string, *end_ptr;
- size_t oid_strlen;
- PGconn *pgsql;
- Oid oid;
- int id = -1;
- int argc = ZEND_NUM_ARGS();
-
- /* accept string type since Oid type is unsigned int */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rs", &pgsql_link, &oid_string, &oid_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rl", &pgsql_link, &oid_long) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "s", &oid_string, &oid_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "l", &oid_long) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else {
- php_error(E_WARNING, "%s() exptects 1 or 2 arguments",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (lo_unlink(pgsql, oid) == -1) {
- php_error(E_WARNING, "%s() unable to delete PostgreSQL large object %u",
- get_active_function_name(TSRMLS_C), oid);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource pg_lo_open([resource connection,] int large_object_oid, string mode)
- Open a large object and return fd */
-PHP_FUNCTION(pg_lo_open)
-{
- zval *pgsql_link = NULL;
- long oid_long;
- char *oid_string, *end_ptr, *mode_string;
- size_t oid_strlen, mode_strlen;
- PGconn *pgsql;
- Oid oid;
- int id = -1, pgsql_mode=0, pgsql_lofd;
- int create=0;
- pgLofp *pgsql_lofp;
- int argc = ZEND_NUM_ARGS();
-
- /* accept string type since Oid is unsigned int */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rss", &pgsql_link, &oid_string, &oid_strlen, &mode_string, &mode_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rls", &pgsql_link, &oid_long, &mode_string, &mode_strlen) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ss", &oid_string, &oid_strlen, &mode_string, &mode_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ls", &oid_long, &mode_string, &mode_strlen) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else {
- php_error(E_WARNING, "%s() exptects 1 or 2 arguments",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* r/w/+ is little bit more PHP-like than INV_READ/INV_WRITE and a lot of
- faster to type. Unfortunately, doesn't behave the same way as fopen()...
- (Jouni)
- */
-
- if (strchr(mode_string, 'r') == mode_string) {
- pgsql_mode |= INV_READ;
- if (strchr(mode_string, '+') == mode_string+1) {
- pgsql_mode |= INV_WRITE;
- }
- }
- if (strchr(mode_string, 'w') == mode_string) {
- pgsql_mode |= INV_WRITE;
- create = 1;
- if (strchr(mode_string, '+') == mode_string+1) {
- pgsql_mode |= INV_READ;
- }
- }
-
- pgsql_lofp = (pgLofp *) emalloc(sizeof(pgLofp));
-
- if ((pgsql_lofd = lo_open(pgsql, oid, pgsql_mode)) == -1) {
- if (create) {
- if ((oid = lo_creat(pgsql, INV_READ|INV_WRITE)) == 0) {
- efree(pgsql_lofp);
- php_error(E_WARNING, "%s() unable to create PostgreSQL large object",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- } else {
- if ((pgsql_lofd = lo_open(pgsql, oid, pgsql_mode)) == -1) {
- if (lo_unlink(pgsql, oid) == -1) {
- efree(pgsql_lofp);
- php_error(E_WARNING, "%s() Something's really messed up!!! Your database is badly corrupted in a way NOT related to PHP",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- efree(pgsql_lofp);
- php_error(E_WARNING, "%s() unable to open PostgreSQL large object",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- } else {
- pgsql_lofp->conn = pgsql;
- pgsql_lofp->lofd = pgsql_lofd;
- Z_LVAL_P(return_value) = zend_list_insert(pgsql_lofp, le_lofp);
- Z_TYPE_P(return_value) = IS_LONG;
- }
- }
- } else {
- efree(pgsql_lofp);
- php_error(E_WARNING,"%s() unable to open PostgreSQL large object",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- } else {
- pgsql_lofp->conn = pgsql;
- pgsql_lofp->lofd = pgsql_lofd;
- ZEND_REGISTER_RESOURCE(return_value, pgsql_lofp, le_lofp);
- }
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_close(resource large_object)
- Close a large object */
-PHP_FUNCTION(pg_lo_close)
-{
- zval **pgsql_lofp;
- pgLofp *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_lofp)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_lofp, -1, "PostgreSQL large object", le_lofp);
-
- if (lo_close((PGconn *)pgsql->conn, pgsql->lofd) < 0) {
- php_error(E_WARNING, "%s() unable to close PostgreSQL large object descriptor %d",
- get_active_function_name(TSRMLS_C), pgsql->lofd);
- RETVAL_FALSE;
- } else {
- RETVAL_TRUE;
- }
-
- zend_list_delete(Z_RESVAL_PP(pgsql_lofp));
- return;
-}
-/* }}} */
-
-#define PGSQL_LO_READ_BUF_SIZE 8192
-
-/* {{{ proto string pg_lo_read(resource large_object [, int len])
- Read a large object */
-PHP_FUNCTION(pg_lo_read)
-{
- zval **pgsql_id, **len;
- int buf_len = PGSQL_LO_READ_BUF_SIZE, nbytes;
- char *buf;
- pgLofp *pgsql;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &pgsql_id, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_long_ex(len);
- buf_len = Z_LVAL_PP(len);
- }
-
- buf = (char *) emalloc(sizeof(char)*(buf_len+1));
- if ((nbytes = lo_read((PGconn *)pgsql->conn, pgsql->lofd, buf, buf_len))<0) {
- efree(buf);
- RETURN_FALSE;
- }
-
- buf[nbytes] = '\0';
- RETURN_STRINGL(buf, nbytes, 0);
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_write(resource large_object, string buf [, int len])
- Write a large object */
-PHP_FUNCTION(pg_lo_write)
-{
- zval **pgsql_id, **str, **z_len;
- int nbytes;
- int len;
- pgLofp *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &pgsql_id, &str, &z_len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(str);
-
- if (argc > 2) {
- convert_to_long_ex(z_len);
- if (Z_LVAL_PP(z_len) > Z_STRLEN_PP(str)) {
- php_error(E_WARNING, "%s() cannot write more than buffer size %d. Tried to wtite %d",
- get_active_function_name(TSRMLS_C), Z_LVAL_PP(str), Z_LVAL_PP(z_len));
- RETURN_FALSE;
- }
- if (Z_LVAL_PP(z_len) < 0) {
- php_error(E_WARNING, "%s() buffer size must be larger than 0. %d specified for buffer size.",
- get_active_function_name(TSRMLS_C), Z_LVAL_PP(str), Z_LVAL_PP(z_len));
- RETURN_FALSE;
- }
- len = Z_LVAL_PP(z_len);
- }
- else {
- len = Z_STRLEN_PP(str);
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- if ((nbytes = lo_write((PGconn *)pgsql->conn, pgsql->lofd, Z_STRVAL_PP(str), len)) == -1) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(nbytes);
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_read_all(resource large_object)
- Read a large object and send straight to browser */
-PHP_FUNCTION(pg_lo_read_all)
-{
- zval **pgsql_id;
- int tbytes;
- volatile int nbytes;
- char buf[PGSQL_LO_READ_BUF_SIZE];
- pgLofp *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_id)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- tbytes = 0;
- while ((nbytes = lo_read((PGconn *)pgsql->conn, pgsql->lofd, buf, PGSQL_LO_READ_BUF_SIZE))>0) {
- php_body_write(buf, nbytes TSRMLS_CC);
- tbytes += nbytes;
- }
- RETURN_LONG(tbytes);
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_import([resource connection, ] string filename)
- Import large object direct from filesystem */
-PHP_FUNCTION(pg_lo_import)
-{
- zval *pgsql_link = NULL;
- char *file_in;
- int id = -1, name_len;
- int argc = ZEND_NUM_ARGS();
- PGconn *pgsql;
- Oid oid;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rs", &pgsql_link, &file_in, &name_len) == SUCCESS) {
- ;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "s", &file_in, &name_len) == SUCCESS) {
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "sr", &file_in, &name_len, &pgsql_link ) == SUCCESS) {
- php_error(E_NOTICE, "Old API for %s() is used.", get_active_function_name(TSRMLS_C));
- }
- else {
- WRONG_PARAM_COUNT;
- }
-
- if (PG(safe_mode) &&(!php_checkuid(file_in, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- oid = lo_import(pgsql, file_in);
-
- if (oid == InvalidOid) {
- RETURN_FALSE;
- }
- PGSQL_RETURN_OID(oid);
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_export([resource connection, ] int objoid, string filename)
- Export large object direct to filesystem */
-PHP_FUNCTION(pg_lo_export)
-{
- zval *pgsql_link = NULL;
- char *file_out, *oid_string, *end_ptr;
- size_t oid_strlen;
- int id = -1, name_len;
- long oid_long;
- Oid oid;
- PGconn *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- /* allow string to handle large OID value correctly */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rls", &pgsql_link, &oid_long, &file_out, &name_len) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rss", &pgsql_link, &oid_string, &oid_strlen, &file_out, &name_len) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ls", &oid_long, &file_out, &name_len) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ss", &pgsql_link, &oid_string, &oid_strlen, &file_out, &name_len) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ssr", &oid_string, &oid_strlen, &file_out, &name_len, &pgsql_link) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error(E_NOTICE, "%s() wrong OID value passed",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "lsr", &oid_long, &file_out, &name_len, &pgsql_link) == SUCCESS) {
- php_error(E_NOTICE, "Old API for %s() is used.", get_active_function_name(TSRMLS_C));
- if (oid_long <= InvalidOid) {
- php_error(E_NOTICE, "%s() invalid OID is specified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else {
- php_error(E_WARNING, "%s() expects 2 or 3 arguments",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (lo_export(pgsql, oid, file_out)) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_seek(resource large_object, int offset [, int whence])
- Seeks position of large object */
-PHP_FUNCTION(pg_lo_seek)
-{
- zval *pgsql_id = NULL;
- int offset = 0, whence = SEEK_CUR;
- pgLofp *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rl|l", &pgsql_id, &offset, &whence) == FAILURE) {
- return;
- }
- if (whence != SEEK_SET && whence != SEEK_CUR && whence != SEEK_END) {
- php_error(E_WARNING, "Invalid whence parameter for %s()",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, &pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- if (lo_lseek((PGconn *)pgsql->conn, pgsql->lofd, offset, whence )) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_tell(resource large_object)
- Returns current position of large object */
-PHP_FUNCTION(pg_lo_tell)
-{
- zval *pgsql_id = NULL;
- int offset = 0;
- pgLofp *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "r", &pgsql_id) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, &pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- offset = lo_tell((PGconn *)pgsql->conn, pgsql->lofd);
- RETURN_LONG(offset);
-}
-/* }}} */
-
-#ifdef HAVE_PQCLIENTENCODING
-/* {{{ proto int pg_set_client_encoding([resource connection,] string encoding)
- Set client encoding */
-PHP_FUNCTION(pg_set_client_encoding)
-{
- zval **encoding, **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &encoding)==FAILURE) {
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pgsql_link, &encoding)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- convert_to_string_ex(encoding);
- Z_LVAL_P(return_value) = PQsetClientEncoding(pgsql, Z_STRVAL_PP(encoding));
- Z_TYPE_P(return_value) = IS_LONG;
-
-}
-/* }}} */
-
-/* {{{ proto string pg_client_encoding([resource connection])
- Get the current client encoding */
-PHP_FUNCTION(pg_client_encoding)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* Just do the same as found in PostgreSQL sources... */
-
-#ifndef HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
-#define pg_encoding_to_char(x) "SQL_ASCII"
-#endif
-
- Z_STRVAL_P(return_value)
- = (char *) pg_encoding_to_char(PQclientEncoding(pgsql));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = (char *) estrdup(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-#endif
-
-
-#define COPYBUFSIZ 8192
-
-/* {{{ proto bool pg_end_copy([resource connection])
- Sync with backend. Completes the Copy command */
-PHP_FUNCTION(pg_end_copy)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- int result = 0;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- result = PQendcopy(pgsql);
-
- if (result!=0) {
- php_error(E_WARNING, "%s() PostgreSQL query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool pg_put_line([resource connection,] string query)
- Send null-terminated string to backend server*/
-PHP_FUNCTION(pg_put_line)
-{
- zval **query, **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- int result = 0;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pgsql_link, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- convert_to_string_ex(query);
- result = PQputline(pgsql, Z_STRVAL_PP(query));
-
- if (result==EOF) {
- php_error(E_WARNING, "%s() PostgreSQL query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array pg_copy_to(int connection, string table_name [, string delimiter [, string null_as]])
- Copy table to array */
-PHP_FUNCTION(pg_copy_to)
-{
- zval *pgsql_link;
- char *table_name, *pg_delim = NULL, *pg_null_as = NULL;
- int table_name_len, pg_delim_len, pg_null_as_len;
- char *query;
- char *query_template = "COPY \"\" TO STDOUT DELIMITERS ':' WITH NULL AS ''";
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
- ExecStatusType status;
- int copydone = 0;
- char copybuf[COPYBUFSIZ];
- char *csv = (char *)NULL;
- int ret;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs|ss",
- &pgsql_link, &table_name, &table_name_len,
- &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) {
- return;
- }
- if (!pg_delim) {
- pg_delim = "\t";
- }
- if (!pg_null_as) {
- pg_null_as = safe_estrdup("\\\\N");
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- query = (char *)emalloc(strlen(query_template) + strlen(table_name) + strlen(pg_null_as) + 1);
- sprintf(query, "COPY \"%s\" TO STDOUT DELIMITERS '%s' WITH NULL AS '%s'",
- table_name, pg_delim, pg_null_as);
-
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- pgsql_result = PQexec(pgsql, query);
-
- efree(pg_null_as);
- efree(query);
-
- if (pgsql_result) {
- status = PQresultStatus(pgsql_result);
- } else {
- status = (ExecStatusType) PQstatus(pgsql);
- }
-
- switch (status) {
- case PGRES_COPY_OUT:
- if (pgsql_result) {
- PQclear(pgsql_result);
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
- while (!copydone)
- {
- if ((ret = PQgetline(pgsql, copybuf, COPYBUFSIZ))) {
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
-
- if (copybuf[0] == '\\' &&
- copybuf[1] == '.' &&
- copybuf[2] == '\0')
- {
- copydone = 1;
- }
- else
- {
- if (csv == (char *)NULL) {
- csv = estrdup(copybuf);
- } else {
- csv = (char *)erealloc(csv, strlen(csv) + sizeof(char)*(COPYBUFSIZ+1));
- strcat(csv, copybuf);
- }
-
- switch (ret)
- {
- case EOF:
- copydone = 1;
- case 0:
- add_next_index_string(return_value, csv, 1);
- efree(csv);
- csv = (char *)NULL;
- break;
- case 1:
- break;
- }
- }
- }
- if (PQendcopy(pgsql)) {
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- } else {
- PQclear(pgsql_result);
- RETURN_FALSE;
- }
- break;
- default:
- PQclear(pgsql_result);
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pg_copy_from(int connection, string table_name , array rows [, string delimiter [, string null_as]])
- Copy table from array */
-PHP_FUNCTION(pg_copy_from)
-{
- zval *pgsql_link = NULL, *pg_rows;
- zval **tmp;
- char *table_name, *pg_delim = NULL, *pg_null_as = NULL;
- int table_name_len, pg_delim_len, pg_null_as_len;
- char *query;
- char *query_template = "COPY \"\" FROM STDIN DELIMITERS ':' WITH NULL AS ''";
- HashPosition pos;
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
- ExecStatusType status;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs/a|ss",
- &pgsql_link, &table_name, &table_name_len, &pg_rows,
- &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) {
- return;
- }
- if (!pg_delim) {
- pg_delim = "\t";
- }
- if (!pg_null_as) {
- pg_null_as = safe_estrdup("\\\\N");
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- query = (char *)emalloc(strlen(query_template) + strlen(table_name) + strlen(pg_null_as) + 1);
- sprintf(query, "COPY \"%s\" FROM STDIN DELIMITERS '%s' WITH NULL AS '%s'",
- table_name, pg_delim, pg_null_as);
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- pgsql_result = PQexec(pgsql, query);
-
- efree(pg_null_as);
- efree(query);
-
- if (pgsql_result) {
- status = PQresultStatus(pgsql_result);
- } else {
- status = (ExecStatusType) PQstatus(pgsql);
- }
-
- switch (status) {
- case PGRES_COPY_IN:
- if (pgsql_result) {
- PQclear(pgsql_result);
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pg_rows), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
- query = (char *)emalloc(Z_STRLEN_PP(tmp) +2);
- strcpy(query, Z_STRVAL_PP(tmp));
- if(*(query+Z_STRLEN_PP(tmp)-1) != '\n') strcat(query, "\n");
- if (PQputline(pgsql, query)) {
- efree(query);
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name, PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
- efree(query);
- zend_hash_move_forward_ex(Z_ARRVAL_P(pg_rows), &pos);
- }
- if (PQputline(pgsql, "\\.\n")) {
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
- if (PQendcopy(pgsql)) {
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- }
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- } else {
- PQclear(pgsql_result);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- default:
- PQclear(pgsql_result);
- php_error(E_WARNING, "%s() query failed: %s",
- get_active_function_name(TSRMLS_C), PQerrorMessage(pgsql));
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-#ifdef HAVE_PQESCAPE
-/* {{{ proto string pg_escape_string(string data)
- Escape string for text/char type */
-PHP_FUNCTION(pg_escape_string)
-{
- char *from = NULL, *to = NULL;
- size_t from_len, to_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
- return;
- }
-
- to = (char *)emalloc(from_len*2+1);
- to_len = (int)PQescapeString(to, from, from_len);
- RETURN_STRINGL(to, to_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string pg_escape_bytea(string data)
- Escape binary for bytea type */
-PHP_FUNCTION(pg_escape_bytea)
-{
- char *from = NULL, *to = NULL;
- size_t from_len, to_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
- return;
- }
-
- to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
- RETVAL_STRINGL(to, to_len-1, 1); /* to_len includes addtional '\0' */
- free(to);
-}
-/* }}} */
-#endif
-
-/* {{{ proto string pg_result_error(resource result)
- Get error message associated with result */
-PHP_FUNCTION(pg_result_error)
-{
- zval *result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- char *err = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &result) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (!pgsql_result) {
- RETURN_FALSE;
- }
- err = (char *)PQresultErrorMessage(pgsql_result);
- RETURN_STRING(err,1);
-}
-/* }}} */
-
-/* {{{ proto int pg_connection_status(resource connnection)
- Get connection status */
-PHP_FUNCTION(pg_connection_status)
-{
- zval *pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- RETURN_LONG(PQstatus(pgsql));
-}
-
-/* }}} */
-
-/* {{{ proto bool pg_connection_reset(resource connection)
- Reset connection (reconnect) */
-PHP_FUNCTION(pg_connection_reset)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- PQreset(pgsql);
- if (PQstatus(pgsql) == CONNECTION_BAD) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#define PHP_PG_ASYNC_IS_BUSY 1
-#define PHP_PG_ASYNC_REQUEST_CANCEL 2
-
-/* {{{ php_pgsql_flush_query
- */
-static int php_pgsql_flush_query(PGconn *pgsql TSRMLS_DC)
-{
- PGresult *res;
- int leftover = 0;
-
- if (PQsetnonblocking(pgsql, 1)) {
- php_error(E_NOTICE,"%s() cannot set connection to nonblocking mode",
- get_active_function_name(TSRMLS_C));
- return -1;
- }
- while ((res = PQgetResult(pgsql))) {
- PQclear(res);
- leftover++;
- }
- PQsetnonblocking(pgsql, 0);
- return leftover;
-}
-/* }}} */
-
-/* {{{ php_pgsql_do_async
- */
-static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (PQ_SETNONBLOCKING(pgsql, 1)) {
- php_error(E_NOTICE,"%s() cannot set connection to nonblocking mode",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- switch(entry_type) {
- case PHP_PG_ASYNC_IS_BUSY:
- PQconsumeInput(pgsql);
- Z_LVAL_P(return_value) = PQisBusy(pgsql);
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_PG_ASYNC_REQUEST_CANCEL:
- Z_LVAL_P(return_value) = PQrequestCancel(pgsql);
- Z_TYPE_P(return_value) = IS_LONG;
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- break;
- default:
- php_error(E_ERROR,"%s() PostgreSQL module error. Report this error",
- get_active_function_name(TSRMLS_C));
- break;
- }
- if (PQ_SETNONBLOCKING(pgsql, 0)) {
- php_error(E_NOTICE,"%s() cannot set connection to blocking mode",
- get_active_function_name(TSRMLS_C));
- }
- convert_to_boolean_ex(&return_value);
-}
-/* }}} */
-
-/* {{{ proto bool pg_cancel_query(resource connection)
- Cancel request */
-PHP_FUNCTION(pg_cancel_query)
-{
- php_pgsql_do_async(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_ASYNC_REQUEST_CANCEL);
-}
-/* }}} */
-
-/* {{{ proto bool pg_connection_busy(resource connection)
- Get connection is busy or not */
-PHP_FUNCTION(pg_connection_busy)
-{
- php_pgsql_do_async(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_ASYNC_IS_BUSY);
-}
-/* }}} */
-
-/* {{{ proto bool pg_send_query(resource connection, string qeury)
- Send asynchronous query */
-PHP_FUNCTION(pg_send_query)
-{
- zval *pgsql_link;
- char *query;
- int len;
- int id = -1;
- PGconn *pgsql;
- PGresult *res;
- int leftover = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs",
- &pgsql_link, &query, &len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (PQ_SETNONBLOCKING(pgsql, 1)) {
- php_error(E_NOTICE,"%s() cannot set connection to nonblocking mode",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- while ((res = PQgetResult(pgsql))) {
- PQclear(res);
- leftover = 1;
- }
- if (leftover) {
- php_error(E_NOTICE,"%s() - There are results on this connection. Call pg_get_result() until it returns FALSE",
- get_active_function_name(TSRMLS_C));
- }
- if (!PQsendQuery(pgsql, query)) {
- RETURN_FALSE;
- }
- if (PQ_SETNONBLOCKING(pgsql, 0)) {
- php_error(E_NOTICE,"%s() cannot set connection to blocking mode",
- get_active_function_name(TSRMLS_C));
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto resource pg_get_result([resource connection])
- Get asynchronous query result */
-PHP_FUNCTION(pg_get_result)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- pgsql_result = PQgetResult(pgsql);
- if (!pgsql_result) {
- /* no result */
- RETURN_FALSE;
- }
- pg_result = (pgsql_result_handle *) emalloc(sizeof(pgsql_result_handle));
- pg_result->conn = pgsql;
- pg_result->result = pgsql_result;
- pg_result->row = -1;
- ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result);
-}
-/* }}} */
-
-/* {{{ proto int pg_result_status(resource result[, long result_type])
- Get status of query result */
-PHP_FUNCTION(pg_result_status)
-{
- zval *result;
- long result_type = PGSQL_STATUS_LONG;
- ExecStatusType status;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l",
- &result, &result_type) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (result_type == PGSQL_STATUS_LONG) {
- status = PQresultStatus(pgsql_result);
- RETURN_LONG((int)status);
- }
- else if (result_type == PGSQL_STATUS_STRING) {
- RETURN_STRING(PQcmdStatus(pgsql_result), 1);
- }
- else {
- php_error(E_WARNING, "%s() expects optional 2nd parameter to be PGSQL_STATUS_LONG or PGSQL_STATUS_STRING",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#define QUERY_BUF_SIZE (1023)
-
-/* {{{ php_pgsql_metadata
-
- */
-PHPAPI int php_pgsql_metadata(PGconn *pg_link, const char *table_name, zval *meta TSRMLS_DC)
-{
- PGresult *pg_result;
- char *tmp_name;
- smart_str querystr = {0};
- size_t new_len;
- int i, num_rows;
- zval *elem;
-
- smart_str_appends(&querystr,
- "SELECT a.attname, a.attnum, t.typname, a.attlen, a.attnotNULL, a.atthasdef "
- "FROM pg_class as c, pg_attribute a, pg_type t "
- "WHERE a.attnum > 0 AND a.attrelid = c.oid AND c.relname = '");
-
- tmp_name = php_addslashes((char *)table_name, strlen(table_name), &new_len, 0 TSRMLS_CC);
- smart_str_appendl(&querystr, tmp_name, new_len);
- efree(tmp_name);
-
- smart_str_appends(&querystr, "' AND a.atttypid = t.oid ORDER BY a.attnum;");
- smart_str_0(&querystr);
-
- pg_result = PQexec(pg_link, querystr.c);
- if (PQresultStatus(pg_result) != PGRES_TUPLES_OK || (num_rows = PQntuples(pg_result)) == 0) {
- php_error(E_NOTICE, "%s() failed to query metadata for '%s' table %s",
- get_active_function_name(TSRMLS_C), table_name, querystr.c);
- smart_str_free(&querystr);
- PQclear(pg_result);
- return FAILURE;
- }
- smart_str_free(&querystr);
-
- for (i = 0; i < num_rows; i++) {
- char *name;
- MAKE_STD_ZVAL(elem);
- array_init(elem);
- add_assoc_long(elem, "num", atoi(PQgetvalue(pg_result,i,1)));
- add_assoc_string(elem, "type", PQgetvalue(pg_result,i,2), 1);
- add_assoc_long(elem, "len", atoi(PQgetvalue(pg_result,i,3)));
- if (!strcmp(PQgetvalue(pg_result,i,4), "t")) {
- add_assoc_bool(elem, "not null", 1);
- }
- else {
- add_assoc_bool(elem, "not null", 0);
- }
- if (!strcmp(PQgetvalue(pg_result,i,5), "t")) {
- add_assoc_bool(elem, "has default", 1);
- }
- else {
- add_assoc_bool(elem, "has default", 0);
- }
- name = PQgetvalue(pg_result,i,0);
- add_assoc_zval(meta, name, elem);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-/* {{{ proto array pg_metadata(resource db, string table)
- Get metadata */
-PHP_FUNCTION(pg_metadata)
-{
- zval *pgsql_link;
- char *table_name;
- uint table_name_len;
- PGconn *pgsql;
- int id = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs",
- &pgsql_link, &table_name, &table_name_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- array_init(return_value);
- if (php_pgsql_metadata(pgsql, table_name, return_value TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value); /* destroy array */
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_pgsql_get_data_type
- */
-static php_pgsql_data_type php_pgsql_get_data_type(const char *type_name, size_t len)
-{
- /* This is stupid way to do. I'll fix it when I decied how to support
- user defined types. (Yasuo) */
-
- /* boolean */
- if (!strcmp(type_name, "boolean"))
- return PG_BOOL;
- /* object id */
- if (!strcmp(type_name, "oid"))
- return PG_OID;
- /* integer */
- if (!strcmp(type_name, "int2") || !strcmp(type_name, "smallint"))
- return PG_INT2;
- if (!strcmp(type_name, "int4") || !strcmp(type_name, "integer"))
- return PG_INT4;
- if (!strcmp(type_name, "int8") || !strcmp(type_name, "bigint"))
- return PG_INT8;
- /* real and other */
- if (!strcmp(type_name, "float4") || !strcmp(type_name, "real"))
- return PG_FLOAT4;
- if (!strcmp(type_name, "float8") || !strcmp(type_name, "double precision"))
- return PG_FLOAT8;
- if (!strcmp(type_name, "numeric"))
- return PG_NUMERIC;
- if (!strcmp(type_name, "money"))
- return PG_MONEY;
- /* character */
- if (!strcmp(type_name, "text"))
- return PG_TEXT;
- if (!strcmp(type_name, "bpchar") || !strcmp(type_name, "character"))
- return PG_CHAR;
- if (!strcmp(type_name, "varchar") || !strcmp(type_name, "character varying"))
- return PG_VARCHAR;
- /* time and interval */
- if (!strcmp(type_name, "abstime"))
- return PG_UNIX_TIME;
- if (!strcmp(type_name, "reltime"))
- return PG_UNIX_TIME_INTERVAL;
- if (!strcmp(type_name, "tinterval"))
- return PG_UNIX_TIME_INTERVAL;
- if (!strcmp(type_name, "date"))
- return PG_DATE;
- if (!strcmp(type_name, "time"))
- return PG_TIME;
- if (!strcmp(type_name, "timestamp") || !strcmp(type_name, "time with time zone"))
- return PG_TIME_WITH_TIMEZONE;
- if (!strcmp(type_name, "timestamp with time zone"))
- return PG_TIMESTAMP_WITH_TIMEZONE;
- if (!strcmp(type_name, "interval"))
- return PG_INTERVAL;
- /* binary */
- if (!strcmp(type_name, "bytea"))
- return PG_BYTEA;
- /* network */
- if (!strcmp(type_name, "cidr"))
- return PG_CIDR;
- if (!strcmp(type_name, "inet"))
- return PG_INET;
- if (!strcmp(type_name, "macaddr"))
- return PG_MACADDR;
- /* bit */
- if (!strcmp(type_name, "bit"))
- return PG_BIT;
- if (!strcmp(type_name, "bit varying"))
- return PG_VARBIT;
- /* geometric */
- if (!strcmp(type_name, "line"))
- return PG_LINE;
- if (!strcmp(type_name, "lseg"))
- return PG_LSEG;
- if (!strcmp(type_name, "box"))
- return PG_BOX;
- if (!strcmp(type_name, "path"))
- return PG_PATH;
- if (!strcmp(type_name, "point"))
- return PG_POINT;
- if (!strcmp(type_name, "polygon"))
- return PG_POLYGON;
- if (!strcmp(type_name, "circle"))
- return PG_CIRCLE;
-
- return PG_UNKNOWN;
-}
-/* }}} */
-
-/* {{{ php_pgsql_convert_match
- * test field value with regular expression specified.
- */
-static int php_pgsql_convert_match(const char *str, const char *regex , int icase TSRMLS_DC)
-{
- regex_t re;
- regmatch_t *subs;
- int regopt = REG_EXTENDED;
- int regerr, ret = SUCCESS;
-
- if (icase) {
- regopt |= REG_ICASE;
- }
-
- regerr = regcomp(&re, regex, regopt);
- if (regerr) {
- php_error(E_WARNING, "%s() cannot compile regex",
- get_active_function_name(TSRMLS_C));
- regfree(&re);
- return FAILURE;
- }
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t), re.re_nsub+1);
- if (!subs) {
- php_error(E_WARNING, "%s() cannot allocate memory",
- get_active_function_name(TSRMLS_C));
- regfree(&re);
- return FAILURE;
- }
- regerr = regexec(&re, str, re.re_nsub+1, subs, 0);
- if (regerr == REG_NOMATCH) {
-#ifdef PHP_DEBUG
- php_error(E_NOTICE, "%s(): '%s' does not match with '%s'",
- get_active_function_name(TSRMLS_C), str, regex);
-#endif
- ret = FAILURE;
- }
- else if (regerr) {
- php_error(E_WARNING, "%s() cannot exec regex",
- get_active_function_name(TSRMLS_C));
- ret = FAILURE;
- }
- regfree(&re);
- efree(subs);
- return ret;
-}
-
-/* }}} */
-
-/* {{{ php_pgsql_add_quote
- * add quotes around string.
- */
-static int php_pgsql_add_quotes(zval *src, zend_bool should_free TSRMLS_DC)
-{
- smart_str str = {0};
-
- assert(Z_TYPE_P(src) == IS_STRING);
- assert(should_free == 1 || should_free == 0);
-
- smart_str_appendc(&str, '\'');
- smart_str_appendl(&str, Z_STRVAL_P(src), Z_STRLEN_P(src));
- smart_str_appendc(&str, '\'');
- smart_str_0(&str);
-
- if (should_free) {
- efree(Z_STRVAL_P(src));
- }
- Z_STRVAL_P(src) = str.c;
- Z_STRLEN_P(src) = str.len;
-
- return SUCCESS;
-}
-/* }}} */
-
-#define PGSQL_CONV_CHECK_IGNORE() \
- if (!err && !strcmp(Z_STRVAL_P(new_val), "NULL")) { \
- /* if value is NULL and has default, remove entry to use default value*/ \
- if (!(opt & PGSQL_CONV_IGNORE_DEFAULT) && Z_BVAL_PP(has_default)) { \
- zval_dtor(new_val); \
- FREE_ZVAL(new_val); \
- skip_field = 1; \
- } \
- /* raise error if it's not null */ \
- else if (Z_BVAL_PP(not_null)) { \
- php_error(E_NOTICE, "%s() detected NULL for 'NOT NULL' field '%s'", \
- get_active_function_name(TSRMLS_C), field ); \
- err = 1; \
- } \
- }
-
-/* {{{ php_pgsql_convert
- * check and convert array values (fieldname=>vlaue pair) for sql
- */
-PHPAPI int php_pgsql_convert(PGconn *pg_link, const char *table_name, const zval *values, zval *result, ulong opt TSRMLS_DC)
-{
- HashPosition pos;
- char *field = NULL;
- uint field_len = -1;
- ulong num_idx = -1;
- zval *meta, **def, **type, **not_null, **has_default, **val, *new_val;
- int new_len, key_type, err = 0, skip_field;
-
- assert(pg_link != NULL);
- assert(Z_TYPE_P(values) == IS_ARRAY);
- assert(Z_TYPE_P(result) == IS_ARRAY);
- assert(!(opt & ~PGSQL_CONV_OPTS));
-
- if (!table_name) {
- return FAILURE;
- }
- MAKE_STD_ZVAL(meta);
- if (array_init(meta) == FAILURE) {
- zval_dtor(meta);
- FREE_ZVAL(meta);
- return FAILURE;
- }
- if (php_pgsql_metadata(pg_link, table_name, meta TSRMLS_CC) == FAILURE) {
- zval_dtor(meta);
- FREE_ZVAL(meta);
- return FAILURE;
- }
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&val, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos)) {
- skip_field = 0;
- if ((key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(values), &field, &field_len, &num_idx, 0, &pos)) == HASH_KEY_NON_EXISTANT) {
- php_error(E_WARNING, "%s() failed to get array key type",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (!err && key_type == HASH_KEY_IS_LONG) {
- php_error(E_WARNING, "%s() accepts only string key for values",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (!err && key_type == HASH_KEY_NON_EXISTANT) {
- php_error(E_WARNING, "%s() accepts only string key for values",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_P(meta), field, field_len, (void **)&def) == FAILURE) {
- php_error(E_NOTICE, "%s() Invalid field name (%s) in values",
- get_active_function_name(TSRMLS_C), field);
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_PP(def), "type", sizeof("type"), (void **)&type) == FAILURE) {
- php_error(E_NOTICE, "%s() detected broken meta data. Missing 'type'",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_PP(def), "not null", sizeof("not null"), (void **)&not_null) == FAILURE) {
- php_error(E_NOTICE, "%s() detected broken meta data. Missing 'not null'",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_PP(def), "has default", sizeof("has default"), (void **)&has_default) == FAILURE) {
- php_error(E_NOTICE, "%s() detected broken meta data. Missing 'has default'",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (!err && (Z_TYPE_PP(val) == IS_ARRAY ||
- Z_TYPE_PP(val) == IS_OBJECT ||
- Z_TYPE_PP(val) == IS_CONSTANT_ARRAY)) {
- php_error(E_NOTICE, "%s() expects scaler values as field values",
- get_active_function_name(TSRMLS_C));
- err = 1;
- }
- if (err) {
- break;
- }
-
- MAKE_STD_ZVAL(new_val);
- switch(php_pgsql_get_data_type(Z_STRVAL_PP(type), Z_STRLEN_PP(type)))
- {
- case PG_BOOL:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- if (!strcmp(Z_STRVAL_PP(val), "t") || !strcmp(Z_STRVAL_PP(val), "T") ||
- !strcmp(Z_STRVAL_PP(val), "y") || !strcmp(Z_STRVAL_PP(val), "Y") ||
- !strcmp(Z_STRVAL_PP(val), "true") || !strcmp(Z_STRVAL_PP(val), "True") ||
- !strcmp(Z_STRVAL_PP(val), "yes") || !strcmp(Z_STRVAL_PP(val), "Yes") ||
- !strcmp(Z_STRVAL_PP(val), "1")) {
- Z_STRVAL_P(new_val) = estrdup("'t'");
- Z_STRLEN_P(new_val) = 1;
- }
- else if (!strcmp(Z_STRVAL_PP(val), "f") || !strcmp(Z_STRVAL_PP(val), "F") ||
- !strcmp(Z_STRVAL_PP(val), "n") || !strcmp(Z_STRVAL_PP(val), "N") ||
- !strcmp(Z_STRVAL_PP(val), "false") || !strcmp(Z_STRVAL_PP(val), "False") ||
- !strcmp(Z_STRVAL_PP(val), "no") || !strcmp(Z_STRVAL_PP(val), "No") ||
- !strcmp(Z_STRVAL_PP(val), "0")) {
- Z_STRVAL_P(new_val) = estrdup("'f'");
- Z_STRLEN_P(new_val) = 1;
- }
- else {
- php_error(E_NOTICE, "%s() detected invalid value (%s) for pgsql %s field (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(val), Z_STRVAL_PP(type), field);
- err = 1;
- }
- }
- break;
-
- case IS_LONG:
- case IS_BOOL:
- if (Z_LVAL_PP(val)) {
- Z_STRVAL_P(new_val) = estrdup("'t'");
- }
- else {
- Z_STRVAL_P(new_val) = estrdup("'f'");
- }
- Z_STRLEN_P(new_val) = 1;
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string, null, long or boolelan value for pgsql '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_OID:
- case PG_INT2:
- case PG_INT4:
- case PG_INT8:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([+-]{0,1}[0-9]+)$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- }
- }
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_long_ex(&new_val);
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string, null, long or double value for pgsql '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_NUMERIC:
- case PG_MONEY:
- case PG_FLOAT4:
- case PG_FLOAT8:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([+-]{0,1}[0-9]+)|([+-]{0,1}[0-9]*[\\.][0-9]+)|([+-]{0,1}[0-9]+[\\.][0-9]*)$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- }
- }
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string, null, long or double value for pgsql '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_TEXT:
- case PG_CHAR:
- case PG_VARCHAR:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, empty_string, 0);
- }
- else {
- Z_TYPE_P(new_val) = IS_STRING;
-#if HAVE_PQESCAPE
- {
- char *tmp;
- tmp = (char *)emalloc(Z_STRLEN_PP(val)*2+1);
- Z_STRLEN_P(new_val) = (int)PQescapeString(tmp, Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- Z_STRVAL_P(new_val) = tmp;
- }
-#else
- Z_STRVAL_P(new_val) = php_addslashes(Z_STRVAL_PP(val), Z_STRLEN_PP(val), &Z_STRLEN_P(new_val), 0 TSRMLS_CC);
-#endif
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
-
- }
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string, null, long or double value for pgsql '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_UNIX_TIME:
- case PG_UNIX_TIME_INTERVAL:
- /* these are the actallay a integer */
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: Better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^[0-9]+$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- convert_to_long_ex(&new_val);
- }
- }
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_long_ex(&new_val);
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string, null, long or double value for '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_CIDR:
- case PG_INET:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: Better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/[0-9]{1,2}){0,1}$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string or null for '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_TIME_WITH_TIMEZONE:
- case PG_TIMESTAMP_WITH_TIMEZONE:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9]{4}[/-][0-9]{1,2}[/-][0-9]{1,2})([ \\t]+(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1})){0,1}$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string or null for pgsql %s field (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_DATE:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9]{4}[/-][0-9]{1,2}[/-][0-9]{1,2})$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string or null for pgsql %s field (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_TIME:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1})){0,1}$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string or null for pgsql %s field (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_INTERVAL:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^[+-]{0,1}[ \\t]+((second|seconds|minute|minute|hour|hour|day|days|week|weeks|month|monthes|year|years|decade|decades|century|centuries|millennium|millenniums){1,1}[ \\t]+)+([ \\t]+ago){0,1}$", 1 TSRMLS_CC) == FAILURE &&
- php_pgsql_convert_match(Z_STRVAL_PP(val), "^@[ \\t]+[+-]{0,1}[ \\t]+(second|seconds|minute|minute|hour|hour|day|days|week|weeks|month|monthes|year|years|decade|decades|century|centuries|millennium|millenniums){1,1}[ \\t]+)+([ \\t]+ago$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string or null for pgsql %s field (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-#ifdef HAVE_PQESCAPE
- case PG_BYTEA:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- unsigned char *tmp;
- size_t to_len;
- tmp = PQescapeBytea(Z_STRVAL_PP(val), Z_STRLEN_PP(val), &to_len);
- Z_TYPE_P(new_val) = IS_STRING;
- Z_STRLEN_P(new_val) = to_len-1; /* PQescapeBytea's to_len includes additional '\0' */
- Z_STRVAL_P(new_val) = emalloc(to_len);
- memcpy(Z_STRVAL_P(new_val), tmp, to_len);
- free(tmp);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
-
- }
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string, null, long or double value for pgsql '%s' (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
-#endif
- case PG_MACADDR:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9a-f]{2,2}:){5,5}[0-9a-f]{2,2}$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error(E_NOTICE, "%s() expects string or null for pgsql %s field (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- }
- break;
-
- /* bit */
- case PG_BIT:
- case PG_VARBIT:
- /* geometric */
- case PG_LINE:
- case PG_LSEG:
- case PG_POINT:
- case PG_BOX:
- case PG_PATH:
- case PG_POLYGON:
- case PG_CIRCLE:
- php_error(E_NOTICE, "%s() does not support pgsql '%s' type (%s)",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- err = 1;
- break;
-
- case PG_UNKNOWN:
- default:
- php_error(E_NOTICE, "%s() unknown or system data type '%s' for '%s'",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(type), field);
- err = 1;
- break;
- } /* switch */
-
- if (err) {
- zval_dtor(new_val);
- FREE_ZVAL(new_val);
- break;
- }
- if (!skip_field) {
- /* If field is NULL and HAS DEFAULT, should be skipped */
- field = php_addslashes(field, strlen(field), &new_len, 0 TSRMLS_CC);
- add_assoc_zval(result, field, new_val);
- efree(field);
- }
- } /* for */
- zval_dtor(meta);
- FREE_ZVAL(meta);
-
- if (err) {
- /* shouldn't destroy & free zval here */
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto array pg_convert(resource db, string table, array values[, int options])
- Check and convert values for PostgreSQL SQL statement */
-PHP_FUNCTION(pg_convert)
-{
- zval *pgsql_link, *values;
- char *table_name;
- size_t table_name_len;
- ulong option = 0;
- PGconn *pg_link;
- int id = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "rsa|l", &pgsql_link, &table_name, &table_name_len, &values, &option) == FAILURE) {
- return;
- }
- if (option & ~PGSQL_CONV_OPTS) {
- php_error(E_WARNING, "%s() invalid option is spedified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- if (!table_name_len) {
- php_error(E_NOTICE, "%s() table name is invalid",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error(E_NOTICE, "%s detected unhandled result(s) in connection",
- get_active_function_name(TSRMLS_C));
- }
- array_init(return_value);
- if (php_pgsql_convert(pg_link, table_name, values, return_value, option TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-static int do_exec(smart_str *querystr, int expect, PGconn *pg_link, ulong opt TSRMLS_DC)
-{
- if (opt & PGSQL_DML_ASYNC) {
- if (PQsendQuery(pg_link, querystr->c)) {
- return 0;
- }
- }
- else {
- PGresult *pg_result;
-
- pg_result = PQexec(pg_link, querystr->c);
- if (PQresultStatus(pg_result) == expect) {
- return 0;
- } else {
- php_error(E_NOTICE, "%s() failed to execute '%s'",
- get_active_function_name(TSRMLS_C), querystr->c);
- PQclear(pg_result);
- }
- }
-
- return -1;
-}
-
-/* {{{ php_pgsql_insert
- */
-PHPAPI int php_pgsql_insert(PGconn *pg_link, const char *table, zval *var_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval **val, *converted = NULL;
- char buf[256];
- char *fld;
- smart_str querystr = {0};
- int key_type, fld_len, ret = FAILURE;
- ulong num_idx;
- HashPosition pos;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(var_array) == IS_ARRAY);
-
- if (zend_hash_num_elements(Z_ARRVAL_P(var_array)) == 0) {
- return FAILURE;
- }
-
- /* convert input array if needed */
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(converted);
- array_init(converted);
- if (php_pgsql_convert(pg_link, table, var_array, converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- var_array = converted;
- }
-
- smart_str_appends(&querystr, "INSERT INTO ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " (");
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(var_array), &pos);
- while ((key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(var_array), &fld,
- &fld_len, &num_idx, 0, &pos)) != HASH_KEY_NON_EXISTANT) {
- if (key_type == HASH_KEY_IS_LONG) {
- php_error(E_NOTICE,"%s() expects associative array for values to be inserted",
- get_active_function_name(TSRMLS_C));
- goto cleanup;
- }
- smart_str_appendl(&querystr, fld, fld_len - 1);
- smart_str_appendc(&querystr, ',');
- zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos);
- }
- querystr.len--;
- smart_str_appends(&querystr, ") VALUES (");
-
- /* make values string */
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(var_array), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(var_array), (void **)&val, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos)) {
-
- /* we can avoid the key_type check here, because we tested it in the other loop */
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- smart_str_appendl(&querystr, Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- break;
- case IS_LONG:
- smart_str_append_long(&querystr, Z_LVAL_PP(val));
- break;
- case IS_DOUBLE:
- smart_str_appendl(&querystr, buf, sprintf(buf, "%f", Z_DVAL_PP(val)));
- break;
- default:
- /* should not happen */
- php_error(E_WARNING, "%s(): Report this error to php-dev@lists.php.net",
- get_active_function_name(TSRMLS_C));
- goto cleanup;
- break;
- }
- smart_str_appendc(&querystr, ',');
- }
- /* Remove the trailing "," */
- querystr.len--;
- smart_str_appends(&querystr, ");");
- smart_str_0(&querystr);
-
- if ((opt & (PGSQL_DML_EXEC|PGSQL_DML_ASYNC)) &&
- do_exec(&querystr, PGRES_COMMAND_OK, pg_link, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == 0) {
- ret = SUCCESS;
- }
- else if (opt & PGSQL_DML_STRING) {
- ret = SUCCESS;
- }
-
-cleanup:
- if (!(opt & PGSQL_DML_NO_CONV)) {
- zval_dtor(converted);
- FREE_ZVAL(converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = querystr.c;
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto bool pg_insert(resource db, string table, array values[, int options])
- Insert values (filed=>value) to table */
-PHP_FUNCTION(pg_insert)
-{
- zval *pgsql_link, *values;
- char *table, *sql = NULL;
- ulong table_len;
- ulong option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsa|l",
- &pgsql_link, &table, &table_len, &values, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_ASYNC|PGSQL_DML_STRING)) {
- php_error(E_WARNING, "%s() invalid option is spedified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error(E_NOTICE, "%s detected unhandled result(s) in connection",
- get_active_function_name(TSRMLS_C));
- }
- if (php_pgsql_insert(pg_link, table, values, option, &sql TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- RETURN_STRING(sql, 0);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-static inline int build_assignment_string(smart_str *querystr, HashTable *ht, const char *pad, int pad_len TSRMLS_DC)
-{
- HashPosition pos;
- size_t fld_len;
- int key_type;
- ulong num_idx;
- char *fld;
- char buf[256];
- zval **val;
-
- for (zend_hash_internal_pointer_reset_ex(ht, &pos);
- zend_hash_get_current_data_ex(ht, (void **)&val, &pos) == SUCCESS;
- zend_hash_move_forward_ex(ht, &pos)) {
- key_type = zend_hash_get_current_key_ex(ht, &fld, &fld_len, &num_idx, 0, &pos);
- if (key_type == HASH_KEY_IS_LONG) {
- php_error(E_NOTICE,"%s() expects associative array for values to be inserted",
- get_active_function_name(TSRMLS_C));
- return -1;
- }
- smart_str_appendl(querystr, fld, fld_len - 1);
- smart_str_appendc(querystr, '=');
-
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- smart_str_appendl(querystr, Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- break;
- case IS_LONG:
- smart_str_append_long(querystr, Z_LVAL_PP(val));
- break;
- case IS_DOUBLE:
- smart_str_appendl(querystr, buf, sprintf(buf, "%f", Z_DVAL_PP(val)));
- break;
- default:
- /* should not happen */
- php_error(E_NOTICE, "%s() expect scaler values other than null. Need to convert?",
- get_active_function_name(TSRMLS_C));
- return -1;
- }
- smart_str_appendl(querystr, pad, pad_len);
- }
- querystr->len -= pad_len;
-
- return 0;
-}
-
-/* {{{ php_pgsql_update
- */
-PHPAPI int php_pgsql_update(PGconn *pg_link, const char *table, zval *var_array, zval *ids_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval *var_converted = NULL, *ids_converted = NULL;
- smart_str querystr = {0};
- int ret = FAILURE;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(var_array) == IS_ARRAY);
- assert(Z_TYPE_P(ids_array) == IS_ARRAY);
- assert(!(opt & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_STRING)));
-
- if (zend_hash_num_elements(Z_ARRVAL_P(var_array)) == 0
- || zend_hash_num_elements(Z_ARRVAL_P(ids_array)) == 0) {
- return FAILURE;
- }
-
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(var_converted);
- array_init(var_converted);
- if (php_pgsql_convert(pg_link, table, var_array, var_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- var_array = var_converted;
- MAKE_STD_ZVAL(ids_converted);
- array_init(ids_converted);
- if (php_pgsql_convert(pg_link, table, ids_array, ids_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- ids_array = ids_converted;
- }
-
- smart_str_appends(&querystr, "UPDATE ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " SET ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(var_array), ",", 1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appends(&querystr, " WHERE ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_array), " AND ", sizeof(" AND ")-1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appendc(&querystr, ';');
- smart_str_0(&querystr);
-
- if (do_exec(&querystr, PGRES_COMMAND_OK, pg_link, opt TSRMLS_CC) == 0)
- ret = SUCCESS;
-
-cleanup:
- if (var_converted) {
- zval_dtor(var_converted);
- FREE_ZVAL(var_converted);
- }
- if (ids_converted) {
- zval_dtor(ids_converted);
- FREE_ZVAL(ids_converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = querystr.c;
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto bool pg_update(resource db, string table, array fields, array ids[, int options])
- Update table using values (field=>value) and ids (id=>value) */
-PHP_FUNCTION(pg_update)
-{
- zval *pgsql_link, *values, *ids;
- char *table, *sql = NULL;
- ulong table_len;
- ulong option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsaa|l",
- &pgsql_link, &table, &table_len, &values, &ids, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_STRING)) {
- php_error(E_WARNING, "%s() invalid option is spedified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error(E_NOTICE, "%s detected unhandled result(s) in connection",
- get_active_function_name(TSRMLS_C));
- }
- if (php_pgsql_update(pg_link, table, values, ids, option, &sql TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- RETURN_STRING(sql, 0);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_pgsql_delete
- */
-PHPAPI int php_pgsql_delete(PGconn *pg_link, const char *table, zval *ids_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval *ids_converted = NULL;
- smart_str querystr = {0};
- int ret = FAILURE;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(ids_array) == IS_ARRAY);
- assert(!(opt & ~(PGSQL_CONV_FORCE_NULL|PGSQL_DML_EXEC|PGSQL_DML_STRING)));
-
- if (zend_hash_num_elements(Z_ARRVAL_P(ids_array)) == 0) {
- return FAILURE;
- }
-
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(ids_converted);
- array_init(ids_converted);
- if (php_pgsql_convert(pg_link, table, ids_array, ids_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- ids_array = ids_converted;
- }
-
- smart_str_appends(&querystr, "DELETE FROM ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " WHERE ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_array), " AND ", sizeof(" AND ")-1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appendc(&querystr, ';');
- smart_str_0(&querystr);
-
- if (do_exec(&querystr, PGRES_COMMAND_OK, pg_link, opt TSRMLS_CC) == 0)
- ret = SUCCESS;
-
-cleanup:
- if (!(opt & PGSQL_DML_NO_CONV)) {
- zval_dtor(ids_converted);
- FREE_ZVAL(ids_converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = estrdup(querystr.c);
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto bool pg_delete(resource db, string table, array ids[, int options])
- Delete records has ids (id=>value) */
-PHP_FUNCTION(pg_delete)
-{
- zval *pgsql_link, *ids;
- char *table, *sql = NULL;
- ulong table_len, option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsa|l",
- &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_FORCE_NULL|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_STRING)) {
- php_error(E_WARNING, "%s() invalid option is spedified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error(E_NOTICE, "%s detected unhandled result(s) in connection",
- get_active_function_name(TSRMLS_C));
- }
- if (php_pgsql_delete(pg_link, table, ids, option, &sql TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- RETURN_STRING(sql, 0);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_pgsql_result2array
- */
-PHPAPI int php_pgsql_result2array(PGresult *pg_result, zval *ret_array TSRMLS_DC)
-{
- zval *row;
- char *field_name, *element, *data;
- size_t num_fields, element_len, data_len;
- int pg_numrows, pg_row;
- uint i;
- assert(Z_TYPE_P(ret_array) == IS_ARRAY);
-
- if ((pg_numrows = PQntuples(pg_result)) <= 0) {
- return FAILURE;
- }
- for (pg_row = 0; pg_row < pg_numrows; pg_row++) {
- MAKE_STD_ZVAL(row);
- array_init(row);
- add_index_zval(ret_array, pg_row, row);
- for (i = 0, num_fields = PQnfields(pg_result); i < num_fields; i++) {
- if (PQgetisnull(pg_result, pg_row, i)) {
- field_name = PQfname(pg_result, i);
- add_assoc_null(row, field_name);
- } else {
- element = PQgetvalue(pg_result, pg_row, i);
- element_len = (element ? strlen(element) : 0);
- if (element) {
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(element, element_len, &data_len, 0 TSRMLS_CC);
- } else {
- data = safe_estrndup(element, element_len);
- data_len = element_len;
- }
- field_name = PQfname(pg_result, i);
- add_assoc_stringl(row, field_name, data, data_len, 0);
- }
- }
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_pgsql_select
- */
-PHPAPI int php_pgsql_select(PGconn *pg_link, const char *table, zval *ids_array, zval *ret_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval *ids_converted = NULL;
- smart_str querystr = {0};
- int ret = FAILURE;
- PGresult *pg_result;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(ids_array) == IS_ARRAY);
- assert(Z_TYPE_P(ret_array) == IS_ARRAY);
- assert(!(opt & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_ASYNC|PGSQL_DML_STRING)));
-
- if (zend_hash_num_elements(Z_ARRVAL_P(ids_array)) == 0) {
- return FAILURE;
- }
-
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(ids_converted);
- array_init(ids_converted);
- if (php_pgsql_convert(pg_link, table, ids_array, ids_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- ids_array = ids_converted;
- }
-
- smart_str_appends(&querystr, "SELECT * FROM ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " WHERE ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_array), " AND ", sizeof(" AND ")-1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appendc(&querystr, ';');
- smart_str_0(&querystr);
-
- pg_result = PQexec(pg_link, querystr.c);
- if (PQresultStatus(pg_result) == PGRES_TUPLES_OK) {
- ret = php_pgsql_result2array(pg_result, ret_array TSRMLS_CC);
- } else {
- php_error(E_NOTICE, "%s() failed to execute '%s'",
- get_active_function_name(TSRMLS_C), querystr.c);
- PQclear(pg_result);
- }
-
-cleanup:
- if (!(opt & PGSQL_DML_NO_CONV)) {
- zval_dtor(ids_converted);
- FREE_ZVAL(ids_converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = querystr.c;
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto array pg_select(resource db, string table, array ids[, int options])
- Select records that has ids (id=>value) */
-PHP_FUNCTION(pg_select)
-{
- zval *pgsql_link, *ids;
- char *table, *sql = NULL;
- ulong table_len, option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsa|l",
- &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_FORCE_NULL|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_ASYNC|PGSQL_DML_STRING)) {
- php_error(E_WARNING, "%s() invalid option is spedified",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error(E_NOTICE, "%s detected unhandled result(s) in connection",
- get_active_function_name(TSRMLS_C));
- }
- array_init(return_value);
- if (php_pgsql_select(pg_link, table, ids, return_value, option, &sql TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- zval_dtor(return_value);
- RETURN_STRING(sql, 0);
- }
- return;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/pgsql/pgsql.dsp b/ext/pgsql/pgsql.dsp
deleted file mode 100644
index 93a64b4765..0000000000
--- a/ext/pgsql/pgsql.dsp
+++ /dev/null
@@ -1,167 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pgsql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=pgsql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "pgsql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "pgsql.mak" CFG="pgsql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "pgsql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pgsql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pgsql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pgsql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "pgsql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PGSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "D:\Projects\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\php_build\PostgreSQL\src\include" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib libpqdll.lib php4ts.lib /nologo /dll /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"../../Release/pgsql.dll" /libpath:"..\..\..\PostgreSQL\lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "pgsql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PGSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\Projects\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\php_build\PostgreSQL\src\include" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"../../Debug/pgsql.dll" /pdbtype:sept
-
-!ELSEIF "$(CFG)" == "pgsql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\PostgreSQL\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "ZTS" /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D ZTS=1 /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\php_build\PostgreSQL\src\include" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D "ZTS" /D ZEND_DEBUG=0 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib libpqdll.lib php4ts.lib /nologo /dll /machine:I386 /libpath:"..\..\..\PostgreSQL\lib" /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib libpq.lib php4ts.lib /nologo /dll /machine:I386 /out:"../../Release_TS/php_pgsql.dll" /libpath:"..\..\..\php_build\postgresql\src\interfaces\libpq\Release" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "pgsql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D ZTS=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\Projects\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\php_build\PostgreSQL\src\include" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\php_build\postgresql\src\interfaces\libpq" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D "ZTS" /D ZEND_DEBUG=1 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpq.lib /nologo /dll /debug /machine:I386 /out:"../../Debug_TS/pgsql.dll" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "pgsql - Win32 Release"
-# Name "pgsql - Win32 Debug"
-# Name "pgsql - Win32 Release_TS"
-# Name "pgsql - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\pgsql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_pgsql.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h
deleted file mode 100644
index 4d0bfd749b..0000000000
--- a/ext/pgsql/php_pgsql.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Jouni Ahto <jouni.ahto@exdec.fi> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_PGSQL_H
-#define PHP_PGSQL_H
-
-#if HAVE_PGSQL
-
-#define PHP_PGSQL_API 20020419
-
-extern zend_module_entry pgsql_module_entry;
-#define pgsql_module_ptr &pgsql_module_entry
-
-#ifdef PHP_PGSQL_PRIVATE
-#undef SOCKET_SIZE_TYPE
-#include <libpq-fe.h>
-
-#ifdef PHP_WIN32
-#define INV_WRITE 0x00020000
-#define INV_READ 0x00040000
-#undef PHPAPI
-#ifdef PGSQL_EXPORTS
-#define PHPAPI __declspec(dllexport)
-#else
-#define PHPAPI __declspec(dllimport)
-#endif
-#else
-#include <libpq/libpq-fs.h>
-#endif
-
-#ifdef HAVE_PG_CONFIG_H
-#include <pg_config.h>
-#endif
-
-#ifdef HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
-const char * pg_encoding_to_char(int encoding);
-#endif
-
-PHP_MINIT_FUNCTION(pgsql);
-PHP_MSHUTDOWN_FUNCTION(pgsql);
-PHP_RINIT_FUNCTION(pgsql);
-PHP_RSHUTDOWN_FUNCTION(pgsql);
-PHP_MINFO_FUNCTION(pgsql);
-/* connection functions */
-PHP_FUNCTION(pg_connect);
-PHP_FUNCTION(pg_pconnect);
-PHP_FUNCTION(pg_close);
-PHP_FUNCTION(pg_connection_reset);
-PHP_FUNCTION(pg_connection_status);
-PHP_FUNCTION(pg_connection_busy);
-PHP_FUNCTION(pg_host);
-PHP_FUNCTION(pg_dbname);
-PHP_FUNCTION(pg_port);
-PHP_FUNCTION(pg_tty);
-PHP_FUNCTION(pg_options);
-/* query functions */
-PHP_FUNCTION(pg_query);
-PHP_FUNCTION(pg_send_query);
-PHP_FUNCTION(pg_cancel_query);
-/* result functions */
-PHP_FUNCTION(pg_fetch_array);
-PHP_FUNCTION(pg_fetch_object);
-PHP_FUNCTION(pg_fetch_result);
-PHP_FUNCTION(pg_fetch_row);
-PHP_FUNCTION(pg_affected_rows);
-PHP_FUNCTION(pg_get_result);
-PHP_FUNCTION(pg_result_status);
-PHP_FUNCTION(pg_free_result);
-PHP_FUNCTION(pg_last_oid);
-PHP_FUNCTION(pg_num_rows);
-PHP_FUNCTION(pg_num_fields);
-PHP_FUNCTION(pg_field_name);
-PHP_FUNCTION(pg_field_num);
-PHP_FUNCTION(pg_field_size);
-PHP_FUNCTION(pg_field_type);
-PHP_FUNCTION(pg_field_prtlen);
-PHP_FUNCTION(pg_field_is_null);
-/* error message functions */
-PHP_FUNCTION(pg_result_error);
-PHP_FUNCTION(pg_last_error);
-PHP_FUNCTION(pg_last_notice);
-/* copy functions */
-PHP_FUNCTION(pg_put_line);
-PHP_FUNCTION(pg_end_copy);
-PHP_FUNCTION(pg_copy_to);
-PHP_FUNCTION(pg_copy_from);
-/* large object functions */
-PHP_FUNCTION(pg_lo_create);
-PHP_FUNCTION(pg_lo_unlink);
-PHP_FUNCTION(pg_lo_open);
-PHP_FUNCTION(pg_lo_close);
-PHP_FUNCTION(pg_lo_read);
-PHP_FUNCTION(pg_lo_write);
-PHP_FUNCTION(pg_lo_read_all);
-PHP_FUNCTION(pg_lo_import);
-PHP_FUNCTION(pg_lo_export);
-PHP_FUNCTION(pg_lo_seek);
-PHP_FUNCTION(pg_lo_tell);
-
-/* debugging functions */
-PHP_FUNCTION(pg_trace);
-PHP_FUNCTION(pg_untrace);
-
-/* utility functions */
-PHP_FUNCTION(pg_client_encoding);
-PHP_FUNCTION(pg_set_client_encoding);
-#if HAVE_PQESCAPE
-PHP_FUNCTION(pg_escape_string);
-PHP_FUNCTION(pg_escape_bytea);
-#endif
-
-/* misc functions */
-PHP_FUNCTION(pg_metadata);
-PHP_FUNCTION(pg_convert);
-PHP_FUNCTION(pg_insert);
-PHP_FUNCTION(pg_update);
-PHP_FUNCTION(pg_delete);
-PHP_FUNCTION(pg_select);
-
-/* php_pgsql_convert options */
-#define PGSQL_CONV_IGNORE_DEFAULT (1<<1) /* Do not use DEAFULT value by removing field from returned array */
-#define PGSQL_CONV_FORCE_NULL (1<<2) /* Convert to NULL if string is null string */
-#define PGSQL_CONV_IGNORE_NOT_NULL (1<<3) /* Ignore NOT NULL constraints */
-#define PGSQL_CONV_OPTS (PGSQL_CONV_IGNORE_DEFAULT|PGSQL_CONV_FORCE_NULL|PGSQL_CONV_IGNORE_NOT_NULL)
-/* php_pgsql_insert/update/select/delete options */
-#define PGSQL_DML_NO_CONV (1<<8) /* Call php_pgsql_convert() */
-#define PGSQL_DML_EXEC (1<<9) /* Execute query */
-#define PGSQL_DML_ASYNC (1<<10) /* Do async query */
-#define PGSQL_DML_STRING (1<<11) /* Return query string */
-
-/* exported functions */
-PHPAPI int php_pgsql_metadata(PGconn *pg_link, const char *table_name, zval *meta TSRMLS_DC);
-PHPAPI int php_pgsql_convert(PGconn *pg_link, const char *table_name, const zval *values, zval *result, ulong opt TSRMLS_DC);
-PHPAPI int php_pgsql_insert(PGconn *pg_link, const char *table, zval *values, ulong opt, char **sql TSRMLS_DC);
-PHPAPI int php_pgsql_update(PGconn *pg_link, const char *table, zval *values, zval *ids, ulong opt , char **sql TSRMLS_DC);
-PHPAPI int php_pgsql_delete(PGconn *pg_link, const char *table, zval *ids, ulong opt, char **sql TSRMLS_DC);
-PHPAPI int php_pgsql_select(PGconn *pg_link, const char *table, zval *ids, zval *ret_array, ulong opt, char **sql TSRMLS_DC);
-
-/* internal functions */
-static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent);
-static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static char *get_field_name(PGconn *pgsql, Oid oid, HashTable *list TSRMLS_DC);
-static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS,int entry_type);
-
-typedef enum _php_pgsql_data_type {
- /* boolean */
- PG_BOOL,
- /* number */
- PG_OID,
- PG_INT2,
- PG_INT4,
- PG_INT8,
- PG_FLOAT4,
- PG_FLOAT8,
- PG_NUMERIC,
- PG_MONEY,
- /* character */
- PG_TEXT,
- PG_CHAR,
- PG_VARCHAR,
- /* time and interval */
- PG_UNIX_TIME,
- PG_UNIX_TIME_INTERVAL,
- PG_DATE,
- PG_TIME,
- PG_TIME_WITH_TIMEZONE,
- PG_TIMESTAMP_WITH_TIMEZONE,
- PG_INTERVAL,
- /* binary */
- PG_BYTEA,
- /* network */
- PG_CIDR,
- PG_INET,
- PG_MACADDR,
- /* bit */
- PG_BIT,
- PG_VARBIT,
- /* geometoric */
- PG_LINE,
- PG_LSEG,
- PG_POINT,
- PG_BOX,
- PG_PATH,
- PG_POLYGON,
- PG_CIRCLE,
- /* unkown and system */
- PG_UNKNOWN
-} php_pgsql_data_type;
-
-typedef struct pgLofp {
- PGconn *conn;
- int lofd;
-} pgLofp;
-
-typedef struct _php_pgsql_result_handle {
- PGconn *conn;
- PGresult *result;
- int row;
-} pgsql_result_handle;
-
-typedef struct _php_pgsql_notice {
- char *message;
- size_t len;
-} php_pgsql_notice;
-
-typedef struct {
- long default_link; /* default link when connection is omitted */
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- long auto_reset_persistent;
- int le_lofp,le_string;
- int ignore_notices,log_notices;
- HashTable notices; /* notice message for each connection */
-} php_pgsql_globals;
-
-
-#ifdef ZTS
-# define PGG(v) TSRMG(pgsql_globals_id, php_pgsql_globals *, v)
-extern int pgsql_globals_id;
-#else
-# define PGG(v) (pgsql_globals.v)
-extern php_pgsql_globals pgsql_globals;
-#endif
-
-#endif
-
-#else
-
-#define pgsql_module_ptr NULL
-
-#endif
-
-#define phpext_pgsql_ptr pgsql_module_ptr
-
-#endif /* PHP_PGSQL_H */
diff --git a/ext/pgsql/tests/01createdb.phpt b/ext/pgsql/tests/01createdb.phpt
deleted file mode 100644
index 3b34ed537e..0000000000
--- a/ext/pgsql/tests/01createdb.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL create db
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("createdb.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/02connection.phpt b/ext/pgsql/tests/02connection.phpt
deleted file mode 100644
index fd1333dfe6..0000000000
--- a/ext/pgsql/tests/02connection.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL connection
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("connection.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/03sync_query.phpt b/ext/pgsql/tests/03sync_query.phpt
deleted file mode 100644
index 0f2e048959..0000000000
--- a/ext/pgsql/tests/03sync_query.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL sync query
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("sync_query.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/04async_query.phpt b/ext/pgsql/tests/04async_query.phpt
deleted file mode 100644
index a3d17699b9..0000000000
--- a/ext/pgsql/tests/04async_query.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL async query
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("async_query.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/05large_object.phpt b/ext/pgsql/tests/05large_object.phpt
deleted file mode 100644
index ef0bc15db9..0000000000
--- a/ext/pgsql/tests/05large_object.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-PostgreSQL large object
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("large_object.inc");
-?>
---EXPECT--
-large object data
-OK
diff --git a/ext/pgsql/tests/06copy.phpt b/ext/pgsql/tests/06copy.phpt
deleted file mode 100644
index dbbe1ff4d6..0000000000
--- a/ext/pgsql/tests/06copy.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL copy functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("copy.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/07optional.phpt b/ext/pgsql/tests/07optional.phpt
deleted file mode 100644
index f8b8cbeec7..0000000000
--- a/ext/pgsql/tests/07optional.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL optional functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("optional.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/08escape.phpt b/ext/pgsql/tests/08escape.phpt
deleted file mode 100644
index e6a8cf8731..0000000000
--- a/ext/pgsql/tests/08escape.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-PostgreSQL escape functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("escape.inc");
-?>
---EXPECT--
-pg_escape_string() is NOT Ok
-string(9) "ABC\ABC\'"
-string(12) "ABC\\ABC\\''"
-string(10) "ABC\\ABC\'"
-pg_escape_bytea() is Ok
diff --git a/ext/pgsql/tests/09notice.phpt b/ext/pgsql/tests/09notice.phpt
deleted file mode 100644
index f50bc70702..0000000000
--- a/ext/pgsql/tests/09notice.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-PostgreSQL notice function
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("notice.inc");
-?>
---EXPECT--
-NOTICE: BEGIN: already a transaction in progress
-
-NOTICE: BEGIN: already a transaction in progress
-pg_last_notice() is Ok
diff --git a/ext/pgsql/tests/10pg_convert.phpt b/ext/pgsql/tests/10pg_convert.phpt
deleted file mode 100644
index 016c7e74d5..0000000000
--- a/ext/pgsql/tests/10pg_convert.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-PostgreSQL pg_convert()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_convert.inc");
-?>
---EXPECT--
-array(3) {
- ["num"]=>
- string(4) "1234"
- ["str"]=>
- string(5) "'AAA'"
- ["bin"]=>
- string(5) "'BBB'"
-}
diff --git a/ext/pgsql/tests/11pg_metadata.phpt b/ext/pgsql/tests/11pg_metadata.phpt
deleted file mode 100644
index 6e08e2c609..0000000000
--- a/ext/pgsql/tests/11pg_metadata.phpt
+++ /dev/null
@@ -1,50 +0,0 @@
---TEST--
-PostgreSQL pg_metadata()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_metadata.inc");
-?>
---EXPECT--
-array(3) {
- ["num"]=>
- array(5) {
- ["num"]=>
- int(1)
- ["type"]=>
- string(4) "int4"
- ["len"]=>
- int(4)
- ["not null"]=>
- bool(false)
- ["has default"]=>
- bool(false)
- }
- ["str"]=>
- array(5) {
- ["num"]=>
- int(2)
- ["type"]=>
- string(4) "text"
- ["len"]=>
- int(-1)
- ["not null"]=>
- bool(false)
- ["has default"]=>
- bool(false)
- }
- ["bin"]=>
- array(5) {
- ["num"]=>
- int(3)
- ["type"]=>
- string(5) "bytea"
- ["len"]=>
- int(-1)
- ["not null"]=>
- bool(false)
- ["has default"]=>
- bool(false)
- }
-}
diff --git a/ext/pgsql/tests/12pg_insert.phpt b/ext/pgsql/tests/12pg_insert.phpt
deleted file mode 100644
index 104b6fe662..0000000000
--- a/ext/pgsql/tests/12pg_insert.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-PostgreSQL pg_insert()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_insert.inc");
-?>
---EXPECT--
-INSERT INTO php_pgsql_test (num,str,bin) VALUES (1234,'AAA','BBB');
-Ok
diff --git a/ext/pgsql/tests/13pg_select.phpt b/ext/pgsql/tests/13pg_select.phpt
deleted file mode 100644
index 43c94c037f..0000000000
--- a/ext/pgsql/tests/13pg_select.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-PostgreSQL pg_select()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_select.inc");
-?>
---EXPECT--
-array(1) {
- [0]=>
- array(3) {
- ["num"]=>
- string(4) "1234"
- ["str"]=>
- string(3) "AAA"
- ["bin"]=>
- string(3) "BBB"
- }
-}
-SELECT * FROM php_pgsql_test WHERE num=1234;
-Ok
diff --git a/ext/pgsql/tests/14pg_update.phpt b/ext/pgsql/tests/14pg_update.phpt
deleted file mode 100644
index 7dd4dd2d95..0000000000
--- a/ext/pgsql/tests/14pg_update.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-PostgreSQL pg_update()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_update.inc");
-?>
---EXPECT--
-UPDATE php_pgsql_test SET num=1234,str='ABC',bin='XYZ' WHERE num=1234;
-Ok
diff --git a/ext/pgsql/tests/15pg_delete.phpt b/ext/pgsql/tests/15pg_delete.phpt
deleted file mode 100644
index 331e898383..0000000000
--- a/ext/pgsql/tests/15pg_delete.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL pg_delete()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_delete.inc");
-?>
---EXPECT--
-Ok
diff --git a/ext/pgsql/tests/16pg_result_status.phpt b/ext/pgsql/tests/16pg_result_status.phpt
deleted file mode 100644
index 6faf849e7f..0000000000
--- a/ext/pgsql/tests/16pg_result_status.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-PostgreSQL pg_result_status()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("pg_result_status.inc");
-?>
---EXPECT--
-1
-COMMIT
diff --git a/ext/pgsql/tests/17result.phpt b/ext/pgsql/tests/17result.phpt
deleted file mode 100644
index 33acb3a682..0000000000
--- a/ext/pgsql/tests/17result.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-PostgreSQL pg_fetch_*() functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("result.inc");
-?>
---EXPECT--
-object(stdClass)(3) {
- ["num"]=>
- string(1) "1"
- ["str"]=>
- string(3) "ABC"
- ["bin"]=>
- NULL
-}
-array(6) {
- [0]=>
- string(1) "1"
- ["num"]=>
- string(1) "1"
- [1]=>
- string(3) "ABC"
- ["str"]=>
- string(3) "ABC"
- [2]=>
- NULL
- ["bin"]=>
- NULL
-}
-array(3) {
- [0]=>
- string(1) "1"
- [1]=>
- string(3) "ABC"
- [2]=>
- NULL
-}
-Ok
diff --git a/ext/pgsql/tests/98old_api.phpt b/ext/pgsql/tests/98old_api.phpt
deleted file mode 100644
index c6f8070c23..0000000000
--- a/ext/pgsql/tests/98old_api.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL old api
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("old_api.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/9999dropdb.phpt b/ext/pgsql/tests/9999dropdb.phpt
deleted file mode 100644
index d60e2dce99..0000000000
--- a/ext/pgsql/tests/9999dropdb.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-PostgreSQL drop db
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include("dropdb.inc");
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/async_query.inc b/ext/pgsql/tests/async_query.inc
deleted file mode 100644
index ac70809095..0000000000
--- a/ext/pgsql/tests/async_query.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-
-if (!pg_send_query($db, "SELECT * FROM ".$table_name.";")) {
- echo "pg_send_query() error\n";
-}
-while(pg_connection_busy($db)); // busy wait: intended
-if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) {
- echo "pg_connection_status() error\n";
-}
-if (!($result = pg_get_result($db)))
-{
- echo "pg_get_result() error\n";
-}
-
-if (!($rows = pg_num_rows($result))) {
- echo "pg_num_rows() error\n";
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_array($result, $i, PGSQL_NUM);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_object($result, $i, PGSQL_ASSOC);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_row($result, $i);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_result($result, $i, 0);
-}
-
-pg_num_rows(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_num_fields(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_field_name($result, 0);
-pg_field_num($result, $field_name);
-pg_field_size($result, 0);
-pg_field_type($result, 0);
-pg_field_prtlen($result, 0);
-pg_field_is_null($result, 0);
-
-if (!pg_send_query($db, "INSERT INTO ".$table_name." VALUES (8888, 'GGG');"))
-{
- echo "pg_send_query() error\n";
-}
-
-pg_last_oid($result);
-pg_free_result($result);
-
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/config.inc b/ext/pgsql/tests/config.inc
deleted file mode 100644
index 2b5f05a71d..0000000000
--- a/ext/pgsql/tests/config.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-// These vars are used to connect db and create test table.
-// values can be set to meet your environment
-
-$conn_str = "host=localhost dbname=test"; // connection string
-$table_name = "php_pgsql_test"; // test table that should be exist
-$num_test_record = 1000; // Number of records to create
-
-$table_def = "CREATE TABLE php_pgsql_test (num int, str text, bin bytea);"; // Test table
-$field_name = "num"; // For pg_field_num()
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/connection.inc b/ext/pgsql/tests/connection.inc
deleted file mode 100644
index e6e9c143af..0000000000
--- a/ext/pgsql/tests/connection.inc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// connection function tests
-
-include('config.inc');
-
-$db = pg_pconnect($conn_str);
-if (pg_connection_status($db) != PGSQL_CONNECTION_OK)
-{
- echo "pg_connection_status() error\n";
-}
-if (!pg_connection_reset($db))
-{
- echo "pg_connection_reset() error\n";
-}
-if (pg_connection_busy($db))
-{
- echo "pg_connection_busy() error\n";
-}
-if (!pg_host($db))
-{
- echo "pg_host() error\n";
-}
-if (!pg_dbname($db))
-{
- echo "pg_dbname() error\n";
-}
-if (!pg_port($db))
-{
- echo "pg_port() error\n";
-}
-if (pg_tty($db))
-{
- echo "pg_tty() error\n";
-}
-if (pg_options($db))
-{
- echo "pg_options() error\n";
-}
-
-pg_close($db);
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/copy.inc b/ext/pgsql/tests/copy.inc
deleted file mode 100644
index 52b6e1d748..0000000000
--- a/ext/pgsql/tests/copy.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-include('config.inc');
-
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/createdb.inc b/ext/pgsql/tests/createdb.inc
deleted file mode 100644
index 28a04b702d..0000000000
--- a/ext/pgsql/tests/createdb.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-// create test table
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-if (!@pg_num_rows(@pg_query($db, "SELECT * FROM ".$table_name)))
-{
- @pg_query($db,$table_def);
- for ($i=0; $i < $num_test_record; $i++) {
- pg_query($db,"INSERT INTO ".$table_name." VALUES ($i, 'ABC');");
- }
-}
-else {
- echo pg_last_error()."\n";
-}
-
-pg_close($db);
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/dropdb.inc b/ext/pgsql/tests/dropdb.inc
deleted file mode 100644
index eaf33ae742..0000000000
--- a/ext/pgsql/tests/dropdb.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-// drop test table
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-pg_query($db, "DROP TABLE ".$table_name);
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/escape.inc b/ext/pgsql/tests/escape.inc
deleted file mode 100644
index a39e1c1621..0000000000
--- a/ext/pgsql/tests/escape.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-include 'config.inc';
-define('FILE_NAME', './php.gif');
-
-// pg_escape_string() test
-$before = "ABC\\ABC\'";
-$expect = "ABC\\\\ABC\\'";
-$after = pg_escape_string($before);
-if ($expect === $after) {
- echo "pg_escape_string() is Ok\n";
-}
-else {
- echo "pg_escape_string() is NOT Ok\n";
- var_dump($before);
- var_dump($after);
- var_dump($expect);
-}
-
-// pg_escape_bytea() test
-$before = "ABC\\ABC";
-$expect = "ABC\\\\\\\\ABC";
-$after = pg_escape_bytea($before);
-if ($expect === $after) {
- echo "pg_escape_bytea() is Ok\n";
-}
-else {
- echo "pg_escape_byte() is NOT Ok\n";
- var_dump($before);
- var_dump($after);
- var_dump($expect);
-}
-
-// Test using database
-$fp = fopen(FILE_NAME,'r');
-$data = fread($fp, filesize(FILE_NAME));
-$db = pg_connect($conn_str);
-
-// Insert binary to DB
-$escaped_data = pg_escape_bytea($data);
-pg_query("DELETE FROM ".$table_name." WHERE num = -9999;");
-$sql = "INSERT INTO ".$table_name." (num, bin) VALUES (-9999, CAST ('".$escaped_data."' AS BYTEA));";
-pg_query($db, $sql);
-
-// Retrieve binary from DB
-$sql = "SELECT bin::bytea FROM ".$table_name." WHERE num = -9999";
-$result = pg_query($db, $sql);
-$row = pg_fetch_array($result, 0, PGSQL_ASSOC);
-
-// Compare
-// Need to wait PostgreSQL 7.3.x for PQunescapeBytea()
-// if ($data === pg_unescape_bytea($row['bin'])) {
-// echo "pg_escape_bytea() actually works with databse\n";
-// }
-// else {
-// echo "pg_escape_bytea() is broken\n";
-// }
-
-?>
diff --git a/ext/pgsql/tests/informational.inc b/ext/pgsql/tests/informational.inc
deleted file mode 100644
index 120c61335b..0000000000
--- a/ext/pgsql/tests/informational.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-// connection function tests
-
-include('config.inc');
-
-$db = pg_pconnect($conn_str);
-if (pg_connection_status($db) != PGSQL_CONNECTION_OK)
-{
- echo "pg_connection_status() error\n";
-}
-if (!pg_connection_reset($db))
-{
- echo "pg_connection_reset() error\n";
-}
-if (pg_connection_busy($db))
-{
- echo "pg_connection_busy() error\n";
-}
-if (!pg_host($db))
-{
- echo "pg_host() error\n";
-}
-if (!pg_dbname($db))
-{
- echo "pg_dbname() error\n";
-}
-if (!pg_port($db))
-{
- echo "pg_port() error\n";
-}
-if (pg_tty($db))
-{
- echo "pg_tty() error\n";
-}
-if (pg_options($db))
-{
- echo "pg_options() error\n";
-}
-
-echo pg_host($db);
-
-
-pg_close($db);
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/large_object.inc b/ext/pgsql/tests/large_object.inc
deleted file mode 100644
index 5b8d1f8b72..0000000000
--- a/ext/pgsql/tests/large_object.inc
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-pg_exec ($db, "begin");
-$oid = pg_lo_create ($db);
-if (!$oid) echo ("pg_lo_create() error\n");
-$handle = pg_lo_open ($db, $oid, "w");
-if (!$handle) echo ("pg_lo_open() error\n");
-pg_lo_write ($handle, "large object data\n");
-pg_lo_close ($handle);
-pg_exec ($db, "commit");
-
-pg_exec ($db, "begin");
-$handle = pg_lo_open ($db, $oid, "w");
-pg_lo_read($handle, 100);
-pg_lo_tell($handle);
-pg_lo_seek($handle, 2);
-pg_lo_close($handle);
-pg_exec ($db, "commit");
-
-pg_exec ($db, "begin");
-$handle = pg_lo_open ($db, $oid, "w");
-pg_lo_read_all($handle);
-if (pg_last_error()) echo "pg_lo_read_all() error\n".pg_last_error();
-pg_lo_close($handle);
-pg_exec ($db, "commit");
-
-pg_exec ($db, "begin");
-pg_lo_unlink($db, $oid) or print("pg_lo_unlink() error\n");
-pg_exec ($db, "commit");
-
-// more pg_lo_unlink() tests
-// Test without connection
-pg_exec ($db, "begin");
-$oid = pg_lo_create ($db) or print("pg_lo_create() error\n");
-pg_lo_unlink($oid) or print("pg_lo_unlink() error\n");
-pg_exec ($db, "commit");
-
-// Test with string oid value
-pg_exec ($db, "begin");
-$oid = pg_lo_create ($db) or print("pg_lo_create() error\n");
-pg_lo_unlink($db, (string)$oid) or print("pg_lo_unlink() error\n");
-pg_exec ($db, "commit");
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/notice.inc b/ext/pgsql/tests/notice.inc
deleted file mode 100644
index 4c2b1de49e..0000000000
--- a/ext/pgsql/tests/notice.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-include 'config.inc';
-
-ini_set('pgsql.log_notice',1);
-
-$db = pg_connect($conn_str);
-pg_query($db, "BEGIN;");
-pg_query($db, "BEGIN;");
-
-$msg = pg_last_notice($db);
-if ($msg === FALSE) {
- echo "Cannot find notice message in hash\n";
- var_dump($msg);
-}
-echo $msg;
-echo "pg_last_notice() is Ok\n";
-
-?>
diff --git a/ext/pgsql/tests/old_api.inc b/ext/pgsql/tests/old_api.inc
deleted file mode 100644
index 4995961831..0000000000
--- a/ext/pgsql/tests/old_api.inc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-$result = pg_exec("SELECT * FROM ".$table_name);
-pg_numrows($result);
-pg_numfields($result);
-pg_fieldname($result, 0);
-pg_fieldsize($result, $field_name);
-pg_fieldtype($result, 0);
-pg_fieldprtlen($result, 0);
-pg_fieldisnull($result, 0);
-
-pg_result($result,0,0);
-$result = pg_exec("INSERT INTO ".$table_name." VALUES (7777, 'KKK')");
-$oid = pg_getlastoid($result);
-pg_freeresult($result);
-pg_errormessage();
-$result = pg_exec("UPDATE ".$table_name." SET str = 'QQQ' WHERE str like 'RGD';");
-pg_cmdtuples($result);
-
-
-
-echo "OK";
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/optional.inc b/ext/pgsql/tests/optional.inc
deleted file mode 100644
index 87dbfd39d3..0000000000
--- a/ext/pgsql/tests/optional.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-// optional functions
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-$enc = pg_client_encoding($db);
-
-pg_set_client_encoding($db, $enc);
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/pg_convert.inc b/ext/pgsql/tests/pg_convert.inc
deleted file mode 100644
index ab6e95ff65..0000000000
--- a/ext/pgsql/tests/pg_convert.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB');
-$converted = pg_convert($db, $table_name, $fields);
-
-var_dump($converted);
-
-
-?>
diff --git a/ext/pgsql/tests/pg_delete.inc b/ext/pgsql/tests/pg_delete.inc
deleted file mode 100644
index 33ba80e727..0000000000
--- a/ext/pgsql/tests/pg_delete.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$fields = array('num'=>'1234', 'str'=>'XXX', 'bin'=>'YYY');
-$ids = array('num'=>'1234');
-if (!pg_delete($db, $table_name, $ids)) {
- echo "Error\n";
-}
-else {
- echo "Ok\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/pg_insert.inc b/ext/pgsql/tests/pg_insert.inc
deleted file mode 100644
index e0777a215e..0000000000
--- a/ext/pgsql/tests/pg_insert.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB');
-
-pg_insert($db, $table_name, $fields) or print "Error in test 1\n";
-echo pg_insert($db, $table_name, $fields, PGSQL_DML_STRING)."\n";
-
-echo "Ok\n";
-?>
diff --git a/ext/pgsql/tests/pg_metadata.inc b/ext/pgsql/tests/pg_metadata.inc
deleted file mode 100644
index 16a2577e36..0000000000
--- a/ext/pgsql/tests/pg_metadata.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$meta = pg_metadata($db, $table_name);
-
-var_dump($meta);
-
-
-?>
diff --git a/ext/pgsql/tests/pg_result_status.inc b/ext/pgsql/tests/pg_result_status.inc
deleted file mode 100644
index 2c03e8966a..0000000000
--- a/ext/pgsql/tests/pg_result_status.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$sql = "SELECT * FROM ".$table_name." WHERE num = -2";
-$result = pg_query($db, "BEGIN;END");
-
-echo pg_result_status($result)."\n";
-echo pg_result_status($result, PGSQL_STATUS_STRING)."\n";
-
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/pg_select.inc b/ext/pgsql/tests/pg_select.inc
deleted file mode 100644
index 4d251bc992..0000000000
--- a/ext/pgsql/tests/pg_select.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ');
-$ids = array('num'=>'1234');
-
-$res = pg_select($db, $table_name, $ids) or print "Error\n";
-var_dump($res);
-echo pg_select($db, $table_name, $ids, PGSQL_DML_STRING)."\n";
-echo "Ok\n";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/pg_update.inc b/ext/pgsql/tests/pg_update.inc
deleted file mode 100644
index 8fc8bb168b..0000000000
--- a/ext/pgsql/tests/pg_update.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ');
-$ids = array('num'=>'1234');
-
-pg_update($db, $table_name, $fields, $ids) or print "Error in test 1\n";
-echo pg_update($db, $table_name, $fields, $ids, PGSQL_DML_STRING)."\n";
-
-echo "Ok\n";
-
-?>
diff --git a/ext/pgsql/tests/php.gif b/ext/pgsql/tests/php.gif
deleted file mode 100644
index 7beda43fd4..0000000000
--- a/ext/pgsql/tests/php.gif
+++ /dev/null
Binary files differ
diff --git a/ext/pgsql/tests/result.inc b/ext/pgsql/tests/result.inc
deleted file mode 100644
index 6982a84493..0000000000
--- a/ext/pgsql/tests/result.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$sql = "SELECT * FROM $table_name";
-$result = pg_query($db, $sql) or die('Cannot qeury db');
-$rows = pg_num_rows($result);
-
-$rec = pg_fetch_object($result, 1);
-var_dump($rec);
-$rec = pg_fetch_array($result, 1);
-var_dump($rec);
-$rec = pg_fetch_row($result, 1);
-var_dump($rec);
-
-echo "Ok\n";
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/skipif.inc b/ext/pgsql/tests/skipif.inc
deleted file mode 100644
index 34e93b2aaa..0000000000
--- a/ext/pgsql/tests/skipif.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-// This script prints "skip" unless:
-// * the pgsql extension is built-in or loadable, AND
-// * there is a database called "test" accessible
-// with no username/password, AND
-// * we have create/drop privileges on the entire "test"
-// database
-
-include("config.inc");
-
-if (!extension_loaded("pgsql") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("pgsql$dlext");
-}
-if (!extension_loaded("pgsql")) {
- die("skip\n");
-}
-$conn = @pg_connect($conn_str);
-if (!is_resource($conn)) {
- die("skip\n");
-}
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/sync_query.inc b/ext/pgsql/tests/sync_query.inc
deleted file mode 100644
index 5a75b2c88c..0000000000
--- a/ext/pgsql/tests/sync_query.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-
-$result = pg_query($db, "SELECT * FROM ".$table_name.";");
-if (!($rows = pg_num_rows($result)))
-{
- echo "pg_num_row() error\n";
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_array($result, $i, PGSQL_NUM);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_object($result, $i, PGSQL_ASSOC);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_row($result, $i);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_result($result, $i, 0);
-}
-
-pg_result_error($result);
-pg_num_rows(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_num_fields(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_field_name($result, 0);
-pg_field_num($result, $field_name);
-pg_field_size($result, 0);
-pg_field_type($result, 0);
-pg_field_prtlen($result, 0);
-pg_field_is_null($result, 0);
-
-$result = pg_query($db, "INSERT INTO ".$table_name." VALUES (9999, 'ABC');");
-pg_last_oid($result);
-
-pg_free_result($result);
-pg_close($db);
-
-echo "OK";
-
-?> \ No newline at end of file
diff --git a/ext/posix/CREDITS b/ext/posix/CREDITS
deleted file mode 100644
index c769635d91..0000000000
--- a/ext/posix/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Posix
-Kristian Köhntopp
diff --git a/ext/posix/config.m4 b/ext/posix/config.m4
deleted file mode 100644
index fc3767e98b..0000000000
--- a/ext/posix/config.m4
+++ /dev/null
@@ -1,13 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(posix,whether to enable POSIX-like functions,
-[ --disable-posix Disable POSIX-like functions], yes)
-
-if test "$PHP_POSIX" = "yes"; then
- AC_DEFINE(HAVE_POSIX, 1, [whether to include POSIX-like functions])
- PHP_NEW_EXTENSION(posix, posix.c, $ext_shared)
-
- AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo getrlimit)
-fi
diff --git a/ext/posix/php_posix.h b/ext/posix/php_posix.h
deleted file mode 100644
index 2ebdc06db2..0000000000
--- a/ext/posix/php_posix.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef PHP_POSIX_H
-#define PHP_POSIX_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if HAVE_POSIX
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-extern zend_module_entry posix_module_entry;
-#define posix_module_ptr &posix_module_entry
-
-/* POSIX.1, 3.3 */
-PHP_FUNCTION(posix_kill);
-
-/* POSIX.1, 4.1 */
-PHP_FUNCTION(posix_getpid);
-PHP_FUNCTION(posix_getppid);
-
-/* POSIX.1, 4.2 */
-PHP_FUNCTION(posix_getuid);
-PHP_FUNCTION(posix_getgid);
-PHP_FUNCTION(posix_geteuid);
-PHP_FUNCTION(posix_getegid);
-PHP_FUNCTION(posix_setuid);
-PHP_FUNCTION(posix_setgid);
-#ifdef HAVE_SETEUID
-PHP_FUNCTION(posix_seteuid);
-#endif
-#ifdef HAVE_SETEGID
-PHP_FUNCTION(posix_setegid);
-#endif
-PHP_FUNCTION(posix_getgroups);
-PHP_FUNCTION(posix_getlogin);
-
-/* POSIX.1, 4.3 */
-PHP_FUNCTION(posix_getpgrp);
-#ifdef HAVE_SETSID
-PHP_FUNCTION(posix_setsid);
-#endif
-PHP_FUNCTION(posix_setpgid);
-/* Non-Posix functions which are common */
-#ifdef HAVE_GETPGID
-PHP_FUNCTION(posix_getpgid);
-#endif
-#ifdef HAVE_GETSID
-PHP_FUNCTION(posix_getsid);
-#endif
-
-/* POSIX.1, 4.4 */
-PHP_FUNCTION(posix_uname);
-PHP_FUNCTION(posix_times);
-
-/* POSIX.1, 4.5 */
-#ifdef HAVE_CTERMID
-PHP_FUNCTION(posix_ctermid);
-#endif
-PHP_FUNCTION(posix_ttyname);
-PHP_FUNCTION(posix_isatty);
-
-/* POSIX.1, 5.2 */
-PHP_FUNCTION(posix_getcwd);
-
-/* POSIX.1, 5.4 */
-#ifdef HAVE_MKFIFO
-PHP_FUNCTION(posix_mkfifo);
-#endif
-
-/* POSIX.1, 9.2 */
-PHP_FUNCTION(posix_getgrnam);
-PHP_FUNCTION(posix_getgrgid);
-PHP_FUNCTION(posix_getpwnam);
-PHP_FUNCTION(posix_getpwuid);
-
-#ifdef HAVE_GETRLIMIT
-PHP_FUNCTION(posix_getrlimit);
-#endif
-
-PHP_FUNCTION(posix_get_last_error);
-PHP_FUNCTION(posix_strerror);
-
-ZEND_BEGIN_MODULE_GLOBALS(posix)
- int last_error;
-ZEND_END_MODULE_GLOBALS(posix)
-
-#ifdef ZTS
-# define POSIX_G(v) TSRMG(posix_globals_id, zend_posix_globals *, v)
-#else
-# define POSIX_G(v) (posix_globals.v)
-#endif
-
-#else
-
-#define posix_module_ptr NULL
-
-#endif
-
-#define phpext_posix_ptr posix_module_ptr
-
-#endif /* PHP_POSIX_H */
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
deleted file mode 100644
index d3046b2090..0000000000
--- a/ext/posix/posix.c
+++ /dev/null
@@ -1,1011 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_posix.h"
-
-#if HAVE_POSIX
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#include <unistd.h>
-#include <sys/resource.h>
-#include <sys/utsname.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <signal.h>
-#include <sys/times.h>
-#include <errno.h>
-#include <grp.h>
-#include <pwd.h>
-
-ZEND_DECLARE_MODULE_GLOBALS(posix)
-
-/* {{{ posix_functions[]
- */
-function_entry posix_functions[] = {
- /* POSIX.1, 3.3 */
- PHP_FE(posix_kill, NULL)
-
- /* POSIX.1, 4.1 */
- PHP_FE(posix_getpid, NULL)
- PHP_FE(posix_getppid, NULL)
-
- /* POSIX.1, 4.2 */
- PHP_FE(posix_getuid, NULL)
- PHP_FE(posix_setuid, NULL)
- PHP_FE(posix_geteuid, NULL)
-#ifdef HAVE_SETEUID
- PHP_FE(posix_seteuid, NULL)
-#endif
- PHP_FE(posix_getgid, NULL)
- PHP_FE(posix_setgid, NULL)
- PHP_FE(posix_getegid, NULL)
-#ifdef HAVE_SETEGID
- PHP_FE(posix_setegid, NULL)
-#endif
- PHP_FE(posix_getgroups, NULL)
- PHP_FE(posix_getlogin, NULL)
-
- /* POSIX.1, 4.3 */
- PHP_FE(posix_getpgrp, NULL)
-#ifdef HAVE_SETSID
- PHP_FE(posix_setsid, NULL)
-#endif
- PHP_FE(posix_setpgid, NULL)
- /* Non-Posix functions which are common */
-#ifdef HAVE_GETPGID
- PHP_FE(posix_getpgid, NULL)
-#endif /* HAVE_GETPGID */
-#ifdef HAVE_GETSID
- PHP_FE(posix_getsid, NULL)
-#endif /* HAVE_GETSID */
-
- /* POSIX.1, 4.4 */
- PHP_FE(posix_uname, NULL)
-
- /* POSIX.1, 4.5 */
- PHP_FE(posix_times, NULL)
-
- /* POSIX.1, 4.7 */
-#ifdef HAVE_CTERMID
- PHP_FE(posix_ctermid, NULL)
-#endif
- PHP_FE(posix_ttyname, NULL)
- PHP_FE(posix_isatty, NULL)
-
- /* POSIX.1, 5.2 */
- PHP_FE(posix_getcwd, NULL)
-
- /* POSIX.1, 5.4 */
-#ifdef HAVE_MKFIFO
- PHP_FE(posix_mkfifo, NULL)
-#endif
-
- /* POSIX.1, 9.2 */
- PHP_FE(posix_getgrnam, NULL)
- PHP_FE(posix_getgrgid, NULL)
- PHP_FE(posix_getpwnam, NULL)
- PHP_FE(posix_getpwuid, NULL)
-
-#ifdef HAVE_GETRLIMIT
- PHP_FE(posix_getrlimit, NULL)
-#endif
-
- PHP_FE(posix_get_last_error, NULL)
- PHP_FALIAS(posix_errno, posix_get_last_error, NULL)
- PHP_FE(posix_strerror, NULL)
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-static PHP_MINFO_FUNCTION(posix)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Revision", "$Revision$");
- php_info_print_table_end();
-}
-/* }}} */
-
-static void php_posix_init_globals(zend_posix_globals *posix_globals TSRMLS_DC)
-{
- posix_globals->last_error = 0;
-}
-
-/* {{{ PHP_MINIT_FUNCTION(posix)
- */
-static PHP_MINIT_FUNCTION(posix)
-{
- ZEND_INIT_MODULE_GLOBALS(posix, php_posix_init_globals, NULL);
- return SUCCESS;
-}
-/* }}} */
-
-static PHP_MINFO_FUNCTION(posix);
-
-/* {{{ posix_module_entry
- */
-zend_module_entry posix_module_entry = {
- STANDARD_MODULE_HEADER,
- "posix",
- posix_functions,
- PHP_MINIT(posix),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(posix),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_POSIX
-ZEND_GET_MODULE(posix)
-#endif
-
-/* {{{ proto bool posix_kill(int pid, int sig)
- Send a signal to a process (POSIX.1, 3.3.2) */
-
-PHP_FUNCTION(posix_kill)
-{
- long pid, sig;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &pid, &sig) == FAILURE)
- return;
-
- if (kill(pid, sig) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int posix_getpid(void)
- Get the current process id (POSIX.1, 4.1.1) */
-PHP_FUNCTION(posix_getpid)
-{
- pid_t pid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- pid = getpid();
- RETURN_LONG(pid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getppid(void)
- Get the parent process id (POSIX.1, 4.1.1) */
-PHP_FUNCTION(posix_getppid)
-{
- pid_t ppid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- ppid = getppid();
- RETURN_LONG(ppid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getuid(void)
- Get the current user id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_getuid)
-{
- uid_t uid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- uid = getuid();
- RETURN_LONG(uid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getgid(void)
- Get the current group id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_getgid)
-{
- gid_t gid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- gid = getgid();
- RETURN_LONG(gid);
-}
-/* }}} */
-
-/* {{{ proto int posix_geteuid(void)
- Get the current effective user id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_geteuid)
-{
- uid_t uid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- uid = geteuid();
- RETURN_LONG(uid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getegid(void)
- Get the current effective group id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_getegid)
-{
- gid_t gid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- gid = getegid();
- RETURN_LONG(gid);
- }
-/* }}} */
-
-/* {{{ proto bool posix_setuid(long uid)
- Set user id (POSIX.1, 4.2.2) */
-PHP_FUNCTION(posix_setuid)
-{
- long uid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &uid) == FAILURE)
- return;
-
- if (setuid(uid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool posix_setgid(int uid)
- Set group id (POSIX.1, 4.2.2) */
-PHP_FUNCTION(posix_setgid)
-{
- long gid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gid) == FAILURE)
- return;
-
- if (setgid(gid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool posix_seteuid(long uid)
- Set effective user id */
-#ifdef HAVE_SETEUID
-PHP_FUNCTION(posix_seteuid)
-{
- long euid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &euid) == FAILURE)
- return;
-
- if (seteuid(euid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-#endif
-/* }}} */
-
-/* {{{ proto bool posix_setegid(long uid)
- Set effective group id */
-#ifdef HAVE_SETEGID
-PHP_FUNCTION(posix_setegid)
-{
- long egid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &egid) == FAILURE)
- return;
-
- if (setegid(egid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-#endif
-/* }}} */
-
-/* {{{ proto array posix_getgroups(void)
- Get supplementary group id's (POSIX.1, 4.2.3) */
-PHP_FUNCTION(posix_getgroups)
-{
- gid_t gidlist[NGROUPS_MAX];
- int result;
- int i;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- if ((result = getgroups(NGROUPS_MAX, gidlist)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- /* TODO: Should we issue a warning here so we don't have ambiguity
- * with the above return value ?
- */
- RETURN_FALSE;
- }
-
- for (i=0; i<result; i++) {
- add_next_index_long(return_value, gidlist[i]);
- }
-}
-/* }}} */
-
-/* {{{ proto string posix_getlogin(void)
- Get user name (POSIX.1, 4.2.4) */
-PHP_FUNCTION(posix_getlogin)
-{
- char *p;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- if (NULL == (p = getlogin())) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(p, 1);
-}
-/* }}} */
-
-/* {{{ proto int posix_getpgrp(void)
- Get current process group id (POSIX.1, 4.3.1) */
-PHP_FUNCTION(posix_getpgrp)
-{
- pid_t pgrp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- pgrp = getpgrp();
- RETURN_LONG(pgrp);
-}
-/* }}} */
-
-/* {{{ proto int posix_setsid(void)
- Create session and set process group id (POSIX.1, 4.3.2) */
-#ifdef HAVE_SETSID
-PHP_FUNCTION(posix_setsid)
-{
- pid_t sid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- sid = setsid();
- RETURN_LONG(sid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto bool posix_setpgid(int pid, int pgid)
- Set process group id for job control (POSIX.1, 4.3.3) */
-PHP_FUNCTION(posix_setpgid)
-{
- long pid, pgid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &pid, &pgid) == FAILURE)
- return;
-
- if (setpgid(pid, pgid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int posix_getpgid(void)
- Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally) */
-#ifdef HAVE_GETPGID
-PHP_FUNCTION(posix_getpgid)
-{
- long pid;
- pid_t pgid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid) == FAILURE)
- return;
-
- if ((pgid = getpgid(pid)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_LONG(pgid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto int posix_getsid(void)
- Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally) */
-#ifdef HAVE_GETSID
-PHP_FUNCTION(posix_getsid)
-{
- long pid;
- pid_t sid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid) == FAILURE)
- return;
-
- if ((sid = getsid(pid)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_LONG(sid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto array posix_uname(void)
- Get system name (POSIX.1, 4.4.1) */
-PHP_FUNCTION(posix_uname)
-{
- struct utsname u;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- if (uname(&u) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- /* TODO: Should we issue a warning here so we don't have ambiguity
- * with the above return value ?
- */
- RETURN_FALSE;
- }
-
- add_assoc_string(return_value, "sysname", u.sysname, 1);
- add_assoc_string(return_value, "nodename", u.nodename, 1);
- add_assoc_string(return_value, "release", u.release, 1);
- add_assoc_string(return_value, "version", u.version, 1);
- add_assoc_string(return_value, "machine", u.machine, 1);
-#ifdef _GNU_SOURCE
- add_assoc_string(return_value, "domainname", u.domainname, 1);
-#endif
-}
-/* }}} */
-
-/* POSIX.1, 4.5.1 time() - Get System Time
- already covered by PHP
- */
-
-/* {{{ proto array posix_times(void)
- Get process times (POSIX.1, 4.5.2) */
-PHP_FUNCTION(posix_times)
-{
- struct tms t;
- clock_t ticks;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- if((ticks = times(&t)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- /* TODO: Should we issue a warning here so we don't have ambiguity
- * with the above return value ?
- */
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "ticks", ticks); /* clock ticks */
- add_assoc_long(return_value, "utime", t.tms_utime); /* user time */
- add_assoc_long(return_value, "stime", t.tms_stime); /* system time */
- add_assoc_long(return_value, "cutime", t.tms_cutime); /* user time of children */
- add_assoc_long(return_value, "cstime", t.tms_cstime); /* system time of children */
-}
-/* }}} */
-
-/* POSIX.1, 4.6.1 getenv() - Environment Access
- already covered by PHP
-*/
-
-/* {{{ proto string posix_ctermid(void)
- Generate terminal path name (POSIX.1, 4.7.1) */
-#ifdef HAVE_CTERMID
-PHP_FUNCTION(posix_ctermid)
-{
- char buffer[L_ctermid];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- if (NULL == ctermid(buffer)) {
- /* Found no documentation how the defined behaviour is when this
- * function fails
- */
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(buffer, 1);
-}
-#endif
-/* }}} */
-
-/* {{{ proto string posix_ttyname(int fd)
- Determine terminal device name (POSIX.1, 4.7.2) */
-PHP_FUNCTION(posix_ttyname)
-{
- zval *z_fd;
- char *p;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &z_fd) == FAILURE)
- return;
-
- convert_to_long(z_fd);
-
- if (NULL == (p = ttyname(Z_LVAL_P(z_fd)))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(p, 1);
-}
-/* }}} */
-
-/* {{{ proto bool posix_isatty(int fd)
- Determine if filedesc is a tty (POSIX.1, 4.7.1) */
-PHP_FUNCTION(posix_isatty)
-{
- zval *z_fd;
- int result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &z_fd) == FAILURE)
- return;
-
- convert_to_long(z_fd);
-
- result = isatty(Z_LVAL_P(z_fd));
- if (!result)
- RETURN_FALSE;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- POSIX.1, 4.8.1 sysconf() - TODO
- POSIX.1, 5.7.1 pathconf(), fpathconf() - TODO
-
- POSIX.1, 5.1.2 opendir(), readdir(), rewinddir(), closedir()
- POSIX.1, 5.2.1 chdir()
- already supported by PHP
- */
-
-/* {{{ proto string posix_getcwd(void)
- Get working directory pathname (POSIX.1, 5.2.2) */
-PHP_FUNCTION(posix_getcwd)
-{
- char buffer[MAXPATHLEN];
- char *p;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- p = VCWD_GETCWD(buffer, MAXPATHLEN);
- if (!p) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(buffer, 1);
-}
-/* }}} */
-
-/*
- POSIX.1, 5.3.x open(), creat(), umask()
- POSIX.1, 5.4.1 link()
- already supported by PHP.
- */
-
-/* {{{ proto bool posix_mkfifo(string pathname, int mode)
- Make a FIFO special file (POSIX.1, 5.4.2) */
-#ifdef HAVE_MKFIFO
-PHP_FUNCTION(posix_mkfifo)
-{
- char *path;
- long path_len, mode;
- int result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &path, &path_len, &mode) == FAILURE)
- return;
-
- if (PG(safe_mode) && (!php_checkuid(path, NULL, CHECKUID_ALLOW_ONLY_DIR))) {
- RETURN_FALSE;
- }
-
- result = mkfifo(path, mode);
- if (result < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-#endif
-/* }}} */
-
-/* Takes a pointer to posix group and a pointer to an already initialized ZVAL
- * array container and fills the array with the posix group member data. */
-int php_posix_group_to_array(struct group *g, zval *array_group) {
- zval *array_members;
- int count;
-
- if (NULL == g)
- return 0;
-
- if (array_group == NULL || Z_TYPE_P(array_group) != IS_ARRAY)
- return 0;
-
- MAKE_STD_ZVAL(array_members);
- if (array_init(array_members) == FAILURE)
- return 0;
-
- add_assoc_string(array_group, "name", g->gr_name, 1);
- add_assoc_string(array_group, "passwd", g->gr_passwd, 1);
- for (count=0; g->gr_mem[count] != NULL; count++) {
- add_next_index_string(array_members, g->gr_mem[count], 1);
- }
- zend_hash_update(Z_ARRVAL_P(array_group), "members", sizeof("members"), (void*)&array_members, sizeof(zval*), NULL);
- add_assoc_long(array_group, "gid", g->gr_gid);
- return 1;
-}
-
-/*
- POSIX.1, 5.5.1 unlink()
- POSIX.1, 5.5.2 rmdir()
- POSIX.1, 5.5.3 rename()
- POSIX.1, 5.6.x stat(), access(), chmod(), utime()
- already supported by PHP (access() not supported, because it is
- braindead and dangerous and gives outdated results).
-
- POSIX.1, 6.x most I/O functions already supported by PHP.
- POSIX.1, 7.x tty functions, TODO
- POSIX.1, 8.x interactions with other C language functions
- POSIX.1, 9.x system database access
- */
-
-/* {{{ proto array posix_getgrnam(string groupname)
- Group database access (POSIX.1, 9.2.1) */
-PHP_FUNCTION(posix_getgrnam)
-{
- char *name;
- struct group *g;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE)
- return;
-
- if (NULL == (g = getgrnam(name))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- /* TODO: Should we issue a warning here so we don't have ambiguity
- * with the above return value ?
- */
- RETURN_FALSE;
- }
-
- if (!php_posix_group_to_array(g, return_value)) {
- php_error(E_WARNING, "%s() unable to convert posix group to array",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array posix_getgrgid(long gid)
- Group database access (POSIX.1, 9.2.1) */
-PHP_FUNCTION(posix_getgrgid)
-{
- long gid;
- struct group *g;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gid) == FAILURE)
- return;
-
- if (NULL == (g = getgrgid(gid))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- /* TODO: Should we issue a warning here so we don't have ambiguity
- * with the above return value ?
- */
- RETURN_FALSE;
- }
-
- if (!php_posix_group_to_array(g, return_value)) {
- php_error(E_WARNING, "%s() unable to convert posix group struct to array",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-int php_posix_passwd_to_array(struct passwd *pw, zval *return_value) {
- if (NULL == pw)
- return 0;
- if (NULL == return_value || Z_TYPE_P(return_value) != IS_ARRAY)
- return 0;
-
- add_assoc_string(return_value, "name", pw->pw_name, 1);
- add_assoc_string(return_value, "passwd", pw->pw_passwd, 1);
- add_assoc_long (return_value, "uid", pw->pw_uid);
- add_assoc_long (return_value, "gid", pw->pw_gid);
- add_assoc_string(return_value, "gecos", pw->pw_gecos, 1);
- add_assoc_string(return_value, "dir", pw->pw_dir, 1);
- add_assoc_string(return_value, "shell", pw->pw_shell, 1);
- return 1;
-}
-
-/* {{{ proto array posix_getpwnam(string groupname)
- User database access (POSIX.1, 9.2.2) */
-PHP_FUNCTION(posix_getpwnam)
-{
- struct passwd *pw;
- char *name;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE)
- return;
-
- if (NULL == (pw = getpwnam(name))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (!php_posix_passwd_to_array(pw, return_value)) {
- php_error(E_WARNING, "%s() unable to convert posix passwd struct to array",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto array posix_getpwuid(long uid)
- User database access (POSIX.1, 9.2.2) */
-PHP_FUNCTION(posix_getpwuid)
-{
- long uid;
- struct passwd *pw;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &uid) == FAILURE)
- return;
-
- if (NULL == (pw = getpwuid(uid))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (!php_posix_passwd_to_array(pw, return_value)) {
- php_error(E_WARNING, "%s() unable to convert posix passwd struct to array",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-#ifdef HAVE_GETRLIMIT
-
-#define UNLIMITED_STRING "unlimited"
-
-/* {{{ posix_addlimit
- */
-static int posix_addlimit(int limit, char *name, zval *return_value TSRMLS_DC) {
- int result;
- struct rlimit rl;
- char hard[80];
- char soft[80];
-
- snprintf(hard, 80, "hard %s", name);
- snprintf(soft, 80, "soft %s", name);
-
- result = getrlimit(limit, &rl);
- if (result < 0) {
- POSIX_G(last_error) = errno;
- return FAILURE;
- }
-
- if (rl.rlim_cur == RLIM_INFINITY) {
- add_assoc_stringl(return_value, soft, UNLIMITED_STRING, sizeof(UNLIMITED_STRING)-1, 1);
- } else {
- add_assoc_long(return_value, soft, rl.rlim_cur);
- }
-
- if (rl.rlim_max == RLIM_INFINITY) {
- add_assoc_stringl(return_value, hard, UNLIMITED_STRING, sizeof(UNLIMITED_STRING)-1, 1);
- } else {
- add_assoc_long(return_value, hard, rl.rlim_max);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ limits[]
- */
-struct limitlist {
- int limit;
- char *name;
-} limits[] = {
-#ifdef RLIMIT_CORE
- { RLIMIT_CORE, "core" },
-#endif
-
-#ifdef RLIMIT_DATA
- { RLIMIT_DATA, "data" },
-#endif
-
-#ifdef RLIMIT_STACK
- { RLIMIT_STACK, "stack" },
-#endif
-
-#ifdef RLIMIT_VMEM
- { RLIMIT_VMEM, "virtualmem" },
-#endif
-
-#ifdef RLIMIT_AS
- { RLIMIT_AS, "totalmem" },
-#endif
-
-#ifdef RLIMIT_RSS
- { RLIMIT_RSS, "rss" },
-#endif
-
-#ifdef RLIMIT_NPROC
- { RLIMIT_NPROC, "maxproc" },
-#endif
-
-#ifdef RLIMIT_MEMLOCK
- { RLIMIT_MEMLOCK, "memlock" },
-#endif
-
-#ifdef RLIMIT_CPU
- { RLIMIT_CPU, "cpu" },
-#endif
-
-#ifdef RLIMIT_FSIZE
- { RLIMIT_FSIZE, "filesize" },
-#endif
-
-#ifdef RLIMIT_NOFILE
- { RLIMIT_NOFILE, "openfiles" },
-#endif
-
-#ifdef RLIMIT_OFILE
- { RLIMIT_OFILE, "openfiles" },
-#endif
-
- { 0, NULL }
-};
-/* }}} */
-
-
-/* {{{ proto int posix_getrlimit(void)
- Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally) */
-PHP_FUNCTION(posix_getrlimit)
-{
- struct limitlist *l = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- for (l=limits; l->name; l++) {
- if (posix_addlimit(l->limit, l->name, return_value TSRMLS_CC) == FAILURE)
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#endif /* HAVE_GETRLIMIT */
-
-/* {{{ proto int posix_get_last_error(void)
- Retrieve the error number set by the last posix function which failed. */
-PHP_FUNCTION(posix_get_last_error)
-{
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- RETURN_LONG(POSIX_G(last_error));
-}
-/* }}} */
-
-/* {{{ proto string posix_strerror(int errno)
- Retrieve the system error message associated with the given errno. */
-PHP_FUNCTION(posix_strerror)
-{
- long error;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &error) == FAILURE)
- return;
-
- RETURN_STRING(strerror(error), 1);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/pspell/CREDITS b/ext/pspell/CREDITS
deleted file mode 100644
index a7919d4b7c..0000000000
--- a/ext/pspell/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Pspell
-Vlad Krupin
diff --git a/ext/pspell/README b/ext/pspell/README
deleted file mode 100644
index b7d3adf198..0000000000
--- a/ext/pspell/README
+++ /dev/null
@@ -1,51 +0,0 @@
-README file for pspell (spellchecker) module for PHP4
------------------------------------------------------
-
-The latest release of pspell is always available from
-
- http://pspell.sourceforge.net/
-
-This module was developed and tested with aspell-.31.1 and pspell-.11.0.2,
-although slightly earlier (and hopefully later) versions of those libraries
-should work as well.
-
-General notes
--------------
-
-Please, note that somewhere around version .27.x (I believe) aspell stopped
-working with the aspell module for php. This is due to the fact that the
-author changed things around a bit, and suggested that people link to pspell
-in the future rather than to aspell. That's exactly what this module is for.
-It has the same basic functionality as aspell (and more features are being
-added). I did not want to modify existing aspell module, because it would
-break things for those who are using older aspell, or result in very ugly code.
-Rather, I wrote a new module - pspell.
-
-
-Building pspell on a Unix system
---------------------------------
-
-In order to use pspell, you need to have *both* aspell and pspell libraries
-installed, and they have to be compatible with each other. Get the latest
-release of both at the URL given above.
-
-I expect the libraries to be in /usr/local (that's the default when you
-cofigure pspell and aspell with their 'configure' scripts woth no parameters).
-If that location is different, please specify it in --with-pspell=PATH, where
-PATH is the path you specified for pspell libraries.
-
-Notes on personalized dictionaries
-----------------------------------
-
-It is now possible to have personalized dictionaries with pspell. This is
-achieved by opening a dictionary with pspell_new_personal() rather than
-pspell_new() and specifying the custom dictionary as the first parameter.
-The parameter probably should begin with '/' because otherwise it will
-be relative to $HOME, which is probably set to "/root". This is probably not
-what you want because you need write access for nobody to be able to write
-to a dictionary. Once the dictionary is open, you can use
-pspell_add_to_personal() to add words to the wordlist and finally
-pspell_save_wordlist() to save it.
-
-Note that at this moment pspell_save_wordlist() will return TRUE, even if
-there was an error. This will be changed once pspell library is fixed. \ No newline at end of file
diff --git a/ext/pspell/config.m4 b/ext/pspell/config.m4
deleted file mode 100644
index 9a2e95e9f6..0000000000
--- a/ext/pspell/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(pspell,for PSPELL support,
-[ --with-pspell[=DIR] Include PSPELL support.])
-
-if test "$PHP_PSPELL" != "no"; then
- PHP_NEW_EXTENSION(pspell, pspell.c, $ext_shared)
- if test "$PHP_PSPELL" != "yes"; then
- PSPELL_SEARCH_DIRS=$PHP_PSPELL
- else
- PSPELL_SEARCH_DIRS="/usr/local /usr"
- fi
- for i in $PSPELL_SEARCH_DIRS; do
- if test -f $i/include/pspell/pspell.h; then
- PSPELL_DIR=$i
- PSPELL_INCDIR=$i/include/pspell
- elif test -f $i/include/pspell.h; then
- PSPELL_DIR=$i
- PSPELL_INCDIR=$i/include
- fi
- done
-
- if test -z "$PSPELL_DIR"; then
- AC_MSG_ERROR(Cannot find pspell)
- fi
-
- PSPELL_LIBDIR=$PSPELL_DIR/lib
-
- AC_DEFINE(HAVE_PSPELL,1,[ ])
- PHP_SUBST(PSPELL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(pspell, $PSPELL_LIBDIR, PSPELL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($PSPELL_INCDIR)
-fi
diff --git a/ext/pspell/php_pspell.h b/ext/pspell/php_pspell.h
deleted file mode 100644
index 05c7edc76f..0000000000
--- a/ext/pspell/php_pspell.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Vlad Krupin <phpdevel@echospace.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef _PSPELL_H
-#define _PSPELL_H
-#if HAVE_PSPELL
-extern zend_module_entry pspell_module_entry;
-#define pspell_module_ptr &pspell_module_entry
-
-PHP_MINIT_FUNCTION(pspell);
-PHP_MINFO_FUNCTION(pspell);
-PHP_FUNCTION(pspell_new);
-PHP_FUNCTION(pspell_new_personal);
-PHP_FUNCTION(pspell_new_config);
-PHP_FUNCTION(pspell_check);
-PHP_FUNCTION(pspell_suggest);
-PHP_FUNCTION(pspell_store_replacement);
-PHP_FUNCTION(pspell_add_to_personal);
-PHP_FUNCTION(pspell_add_to_session);
-PHP_FUNCTION(pspell_clear_session);
-PHP_FUNCTION(pspell_save_wordlist);
-PHP_FUNCTION(pspell_config_create);
-PHP_FUNCTION(pspell_config_runtogether);
-PHP_FUNCTION(pspell_config_mode);
-PHP_FUNCTION(pspell_config_ignore);
-PHP_FUNCTION(pspell_config_personal);
-PHP_FUNCTION(pspell_config_repl);
-PHP_FUNCTION(pspell_config_save_repl);
-#else
-#define pspell_module_ptr NULL
-#endif
-
-#define phpext_pspell_ptr pspell_module_ptr
-
-#endif /* _PSPELL_H */
diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c
deleted file mode 100644
index b60d92bca0..0000000000
--- a/ext/pspell/pspell.c
+++ /dev/null
@@ -1,821 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Vlad Krupin <phpdevel@echospace.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-
-#if HAVE_PSPELL
-
-/* this will enforce compatibility in .12 version (broken after .11.2) */
-#define USE_ORIGINAL_MANAGER_FUNCS
-
-#include "php_pspell.h"
-#include <pspell.h>
-#include "ext/standard/info.h"
-
-#define PSPELL_FAST 1L
-#define PSPELL_NORMAL 2L
-#define PSPELL_BAD_SPELLERS 3L
-#define PSPELL_SPEED_MASK_INTERNAL 3L
-#define PSPELL_RUN_TOGETHER 8L
-
-/* {{{ pspell_functions[]
- */
-function_entry pspell_functions[] = {
- PHP_FE(pspell_new, NULL)
- PHP_FE(pspell_new_personal, NULL)
- PHP_FE(pspell_new_config, NULL)
- PHP_FE(pspell_check, NULL)
- PHP_FE(pspell_suggest, NULL)
- PHP_FE(pspell_store_replacement, NULL)
- PHP_FE(pspell_add_to_personal, NULL)
- PHP_FE(pspell_add_to_session, NULL)
- PHP_FE(pspell_clear_session, NULL)
- PHP_FE(pspell_save_wordlist, NULL)
- PHP_FE(pspell_config_create, NULL)
- PHP_FE(pspell_config_runtogether, NULL)
- PHP_FE(pspell_config_mode, NULL)
- PHP_FE(pspell_config_ignore, NULL)
- PHP_FE(pspell_config_personal, NULL)
- PHP_FE(pspell_config_repl, NULL)
- PHP_FE(pspell_config_save_repl, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-static int le_pspell, le_pspell_config;
-
-zend_module_entry pspell_module_entry = {
- STANDARD_MODULE_HEADER,
- "pspell", pspell_functions, PHP_MINIT(pspell), NULL, NULL, NULL, PHP_MINFO(pspell), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PSPELL
-ZEND_GET_MODULE(pspell)
-#endif
-
-static void php_pspell_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PspellManager *manager = (PspellManager *)rsrc->ptr;
-
- delete_pspell_manager(manager);
-}
-
-static void php_pspell_close_config(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PspellConfig *config = (PspellConfig *)rsrc->ptr;
-
- delete_pspell_config(config);
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pspell)
-{
- REGISTER_LONG_CONSTANT("PSPELL_FAST", PSPELL_FAST, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("PSPELL_NORMAL", PSPELL_NORMAL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("PSPELL_BAD_SPELLERS", PSPELL_BAD_SPELLERS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("PSPELL_RUN_TOGETHER", PSPELL_RUN_TOGETHER, CONST_PERSISTENT | CONST_CS);
- le_pspell = zend_register_list_destructors_ex(php_pspell_close, NULL, "pspell", module_number);
- le_pspell_config = zend_register_list_destructors_ex(php_pspell_close_config, NULL, "pspell config", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])
- Load a dictionary */
-PHP_FUNCTION(pspell_new)
-{
- zval **language,**spelling,**jargon,**encoding,**pmode;
- long mode = 0L, speed = 0L;
- int argc;
- int ind;
-
- PspellCanHaveError *ret;
- PspellManager *manager;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 5 || zend_get_parameters_ex(argc,&language,&spelling,&jargon,&encoding,&pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- config = new_pspell_config();
- convert_to_string_ex(language);
- pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language));
-
- if(argc > 1){
- convert_to_string_ex(spelling);
- if(Z_STRLEN_PP(spelling) > 0){
- pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling));
- }
- }
-
- if(argc > 2){
- convert_to_string_ex(jargon);
- if(Z_STRLEN_PP(jargon) > 0){
- pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon));
- }
- }
-
- if(argc > 3){
- convert_to_string_ex(encoding);
- if(Z_STRLEN_PP(encoding) > 0){
- pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding));
- }
- }
-
- if(argc > 4){
- convert_to_long_ex(pmode);
- mode = Z_LVAL_PP(pmode);
- speed = mode & PSPELL_SPEED_MASK_INTERNAL;
-
- /* First check what mode we want (how many suggestions) */
- if(speed == PSPELL_FAST){
- pspell_config_replace(config, "sug-mode", "fast");
- }else if(speed == PSPELL_NORMAL){
- pspell_config_replace(config, "sug-mode", "normal");
- }else if(speed == PSPELL_BAD_SPELLERS){
- pspell_config_replace(config, "sug-mode", "bad-spellers");
- }
-
- /* Then we see if run-together words should be treated as valid components */
- if(mode & PSPELL_RUN_TOGETHER){
- pspell_config_replace(config, "run-together", "true");
- }
- }
-
- ret = new_pspell_manager(config);
- delete_pspell_config(config);
-
- if(pspell_error_number(ret) != 0){
- php_error(E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ", pspell_error_message(ret));
- RETURN_FALSE;
- }
-
- manager = to_pspell_manager(ret);
- ind = zend_list_insert(manager, le_pspell);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])
- Load a dictionary with a personal wordlist*/
-PHP_FUNCTION(pspell_new_personal)
-{
- zval **personal, **language,**spelling,**jargon,**encoding,**pmode;
- long mode = 0L, speed = 0L;
- int argc;
- int ind;
-
- PspellCanHaveError *ret;
- PspellManager *manager;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 6 || zend_get_parameters_ex(argc,&personal,&language,&spelling,&jargon,&encoding,&pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- config = new_pspell_config();
-
- convert_to_string_ex(personal);
- pspell_config_replace(config, "personal", Z_STRVAL_PP(personal));
- pspell_config_replace(config, "save-repl", "false");
-
- convert_to_string_ex(language);
- pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language));
-
- if(argc > 2){
- convert_to_string_ex(spelling);
- if(Z_STRLEN_PP(spelling) > 0){
- pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling));
- }
- }
-
- if(argc > 3){
- convert_to_string_ex(jargon);
- if(Z_STRLEN_PP(jargon) > 0){
- pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon));
- }
- }
-
- if(argc > 4){
- convert_to_string_ex(encoding);
- if(Z_STRLEN_PP(encoding) > 0){
- pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding));
- }
- }
-
- if(argc > 5){
- convert_to_long_ex(pmode);
- mode = Z_LVAL_PP(pmode);
- speed = mode & PSPELL_SPEED_MASK_INTERNAL;
-
- /* First check what mode we want (how many suggestions) */
- if(speed == PSPELL_FAST){
- pspell_config_replace(config, "sug-mode", "fast");
- }else if(speed == PSPELL_NORMAL){
- pspell_config_replace(config, "sug-mode", "normal");
- }else if(speed == PSPELL_BAD_SPELLERS){
- pspell_config_replace(config, "sug-mode", "bad-spellers");
- }
-
- /* Then we see if run-together words should be treated as valid components */
- if(mode & PSPELL_RUN_TOGETHER){
- pspell_config_replace(config, "run-together", "true");
- }
- }
-
- ret = new_pspell_manager(config);
- delete_pspell_config(config);
-
- if(pspell_error_number(ret) != 0){
- php_error(E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ", pspell_error_message(ret));
- RETURN_FALSE;
- }
-
- manager = to_pspell_manager(ret);
- ind = zend_list_insert(manager, le_pspell);
-
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto int pspell_new_config(int config)
- Load a dictionary based on the given config */
-PHP_FUNCTION(pspell_new_config)
-{
- int type;
- zval **conf;
- int argc;
- int ind;
-
- PspellCanHaveError *ret;
- PspellManager *manager;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 1 || zend_get_parameters_ex(argc,&conf) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(conf);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(conf), &type);
- ret = new_pspell_manager(config);
-
- if(pspell_error_number(ret) != 0){
- php_error(E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ", pspell_error_message(ret));
- RETURN_FALSE;
- }
-
- manager = to_pspell_manager(ret);
- ind = zend_list_insert(manager, le_pspell);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto int pspell_check(int pspell, string word)
- Returns true if word is valid */
-PHP_FUNCTION(pspell_check)
-{
- int type;
- zval **scin,**word;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- if(pspell_manager_check(manager, Z_STRVAL_PP(word))){
- RETURN_TRUE;
- }else{
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array pspell_suggest(int pspell, string word)
- Returns array of suggestions */
-PHP_FUNCTION(pspell_suggest)
-{
- zval **scin, **word;
- int argc;
- PspellManager *manager;
- int type;
- const PspellWordList *wl;
- const char *sug;
-
- argc = ZEND_NUM_ARGS();
- if(argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE){
- RETURN_FALSE;
- }
-
- wl = pspell_manager_suggest(manager, Z_STRVAL_PP(word));
- if(wl){
- PspellStringEmulation *els = pspell_word_list_elements(wl);
- while((sug = pspell_string_emulation_next(els)) != 0){
- add_next_index_string(return_value,(char *)sug,1);
- }
- delete_pspell_string_emulation(els);
- }else{
- php_error(E_WARNING, "PSPELL had a problem. details: %s ", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pspell_store_replacement(int pspell, string misspell, string correct)
- Notify the dictionary of a user-selected replacement */
-PHP_FUNCTION(pspell_store_replacement)
-{
- int type;
- zval **scin,**miss,**corr;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 3 || zend_get_parameters_ex(argc, &scin,&miss,&corr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(miss);
- convert_to_string_ex(corr);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- pspell_manager_store_replacement(manager, Z_STRVAL_PP(miss), Z_STRVAL_PP(corr));
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error(E_WARNING, "pspell_store_replacement() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pspell_add_to_personal(int pspell, string word)
- Adds a word to a personal list */
-PHP_FUNCTION(pspell_add_to_personal)
-{
- int type;
- zval **scin,**word;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/
- if(Z_STRLEN_PP(word) == 0){
- RETURN_FALSE;
- }
-
- pspell_manager_add_to_personal(manager, Z_STRVAL_PP(word));
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error(E_WARNING, "pspell_add_to_personal() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pspell_add_to_session(int pspell, string word)
- Adds a word to the current session */
-PHP_FUNCTION(pspell_add_to_session)
-{
- int type;
- zval **scin,**word;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/
- if(Z_STRLEN_PP(word) == 0){
- RETURN_FALSE;
- }
-
- pspell_manager_add_to_session(manager, Z_STRVAL_PP(word));
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error(E_WARNING, "pspell_add_to_session() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pspell_clear_session(int pspell)
- Clears the current session */
-PHP_FUNCTION(pspell_clear_session)
-{
- int type;
- zval **scin;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 1 || zend_get_parameters_ex(argc, &scin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- pspell_manager_clear_session(manager);
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error(E_WARNING, "pspell_clear_session() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pspell_save_wordlist(int pspell)
- Saves the current (personal) wordlist */
-PHP_FUNCTION(pspell_save_wordlist)
-{
- int type;
- zval **scin;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 1 || zend_get_parameters_ex(argc, &scin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error(E_WARNING, "%d is not an PSPELL result index",Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- pspell_manager_save_all_word_lists(manager);
-
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error(E_WARNING, "pspell_save_wordlist() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])
- Create a new config to be used later to create a manager */
-PHP_FUNCTION(pspell_config_create)
-{
- zval **language,**spelling,**jargon,**encoding;
- int argc;
- int ind;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 4 || zend_get_parameters_ex(argc,&language,&spelling,&jargon,&encoding) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- config = new_pspell_config();
- convert_to_string_ex(language);
- pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language));
-
- if(argc > 1){
- convert_to_string_ex(spelling);
- if(Z_STRLEN_PP(spelling) > 0){
- pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling));
- }
- }
-
- if(argc > 2){
- convert_to_string_ex(jargon);
- if(Z_STRLEN_PP(jargon) > 0){
- pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon));
- }
- }
-
- if(argc > 3){
- convert_to_string_ex(encoding);
- if(Z_STRLEN_PP(encoding) > 0){
- pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding));
- }
- }
-
- /* By default I do not want to write anything anywhere because it'll try to write to $HOME
- which is not what we want */
- pspell_config_replace(config, "save-repl", "false");
-
- ind = zend_list_insert(config, le_pspell_config);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_runtogether(int conf, bool runtogether)
- Consider run-together words as valid components */
-PHP_FUNCTION(pspell_config_runtogether)
-{
- int type;
- zval **sccin, **runtogether;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&runtogether) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error(E_WARNING, "%d is not an PSPELL config index",Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_boolean_ex(runtogether);
- pspell_config_replace(config, "run-together", Z_LVAL_PP(runtogether) ? "true" : "false");
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_mode(int conf, long mode)
- Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS) */
-PHP_FUNCTION(pspell_config_mode)
-{
- int type;
- zval **sccin, **mode;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error(E_WARNING, "%d is not an PSPELL config index",Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_long_ex(mode);
-
- /* First check what mode we want (how many suggestions) */
- if(Z_LVAL_PP(mode) == PSPELL_FAST){
- pspell_config_replace(config, "sug-mode", "fast");
- }else if(Z_LVAL_PP(mode) == PSPELL_NORMAL){
- pspell_config_replace(config, "sug-mode", "normal");
- }else if(Z_LVAL_PP(mode) == PSPELL_BAD_SPELLERS){
- pspell_config_replace(config, "sug-mode", "bad-spellers");
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_ignore(int conf, int ignore)
- Ignore words <= n chars */
-PHP_FUNCTION(pspell_config_ignore)
-{
- int type;
- zval **sccin, **pignore;
- int argc;
-
- /* Hack. But I cannot imagine any word being more than 999 characters long */
- int loc = 3;
- char ignore_str[loc + 1];
- long ignore = 0L;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&pignore) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error(E_WARNING, "%d is not an PSPELL config index",Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_long_ex(pignore);
- ignore = Z_LVAL_PP(pignore);
-
- /* The following is a very hackish way to convert a long to a string
- (actually only the numbers 0-999 will get converted properly, but that should
- be sufficient). If anyone knows of a better way to convert an integer to a string,
- please, fix it.*/
- ignore_str[loc] = '\0';
- while(ignore > 0){
- if(loc == 0){
- break;
- }
- ignore_str[--loc] = '0' + (ignore % 10);
- ignore /= 10;
- }
- if(ignore_str[loc] == '\0'){
- ignore_str[--loc] = '0';
- }
-
- pspell_config_replace(config, "ignore", &ignore_str[loc]);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_personal(int conf, string personal)
- Use a personal dictionary for this config */
-PHP_FUNCTION(pspell_config_personal)
-{
- int type;
- zval **sccin, **personal;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&personal) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error(E_WARNING, "%d is not an PSPELL config index",Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_string_ex(personal);
- pspell_config_replace(config, "personal", Z_STRVAL_PP(personal));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_repl(int conf, string repl)
- Use a personal dictionary with replacement pairs for this config */
-PHP_FUNCTION(pspell_config_repl)
-{
- int type;
- zval **sccin, **repl;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&repl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error(E_WARNING, "%d is not an PSPELL config index",Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- pspell_config_replace(config, "save-repl", "true");
-
- convert_to_string_ex(repl);
- pspell_config_replace(config, "repl", Z_STRVAL_PP(repl));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_save_repl(int conf, bool save)
- Save replacement pairs when personal list is saved for this config */
-PHP_FUNCTION(pspell_config_save_repl)
-{
- int type;
- zval **sccin, **save;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&save) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error(E_WARNING, "%d is not an PSPELL config index",Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_boolean_ex(save);
- pspell_config_replace(config, "save-repl", Z_LVAL_PP(save) ? "true" : "false");
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pspell)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "PSpell Support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/pspell/tests/01pspell_basic.phpt b/ext/pspell/tests/01pspell_basic.phpt
deleted file mode 100644
index 751c91a211..0000000000
--- a/ext/pspell/tests/01pspell_basic.phpt
+++ /dev/null
@@ -1,138 +0,0 @@
---TEST--
-pspell basic tests
---SKIPIF--
-<?php if (!extension_loaded("pspell")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php // $Id$
-
-error_reporting(E_ALL);
-$string = "";
-$string .= "I will not buy this record, it is scratched. ";
-$string .= "Sorry ";
-$string .= "I will not buy this record, it is scratched. ";
-$string .= "Uh, no, no, no. This is a tobacconist's ";
-$string .= "Ah! I will not buy this tobacconist's, it is scratched. ";
-$string .= "No, no, no, no. Tobacco... um... cigarettes (holds up a pack). ";
-$string .= "Ya! See-gar-ets! Ya! Uh... My hovercraft is full of eels. ";
-$string .= "Sorry? ";
-$string .= "My hovercraft (pantomimes puffing a cigarette)... is full of eels (pretends to strike a match). ";
-$string .= "Ahh, matches!";
-
-$pspell = pspell_new ("en", "", "", "", (PSPELL_FAST|PSPELL_RUN_TOGETHER));
-$array = explode(' ',preg_replace('/[^a-zA-Z0-9 ]/','',$string));
-for($i=0,$u=count($array);$i<$u;++$i) {
- echo $array[$i].' : ';
- if (!pspell_check($pspell, $array[$i])) {
- echo "..false\n";
- $suggestions = pspell_suggest ($pspell, $array[$i]);
-
- foreach ($suggestions as $suggestion) {
- echo "Possible spelling: $suggestion\n";
- }
- } else {
- echo "true\n";
- }
-}
-
---EXPECT--
-I : true
-will : true
-not : true
-buy : true
-this : true
-record : true
-it : true
-is : true
-scratched : true
-Sorry : true
-I : true
-will : true
-not : true
-buy : true
-this : true
-record : true
-it : true
-is : true
-scratched : true
-Uh : true
-no : true
-no : true
-no : true
-This : true
-is : true
-a : true
-tobacconists : true
-Ah : true
-I : true
-will : true
-not : true
-buy : true
-this : true
-tobacconists : true
-it : true
-is : true
-scratched : true
-No : true
-no : true
-no : true
-no : true
-Tobacco : true
-um : true
-cigarettes : true
-holds : true
-up : true
-a : true
-pack : true
-Ya : true
-Seegarets : ..false
-Possible spelling: Secrets
-Possible spelling: Regrets
-Possible spelling: Secretes
-Possible spelling: Egrets
-Possible spelling: Serrates
-Possible spelling: Segre's
-Possible spelling: Seagate's
-Possible spelling: Regreets
-Possible spelling: Segregates
-Possible spelling: Sergeants
-Possible spelling: Sugariest
-Possible spelling: Garrets
-Possible spelling: Socrates
-Possible spelling: Egret's
-Possible spelling: Separates
-Possible spelling: Cigarettes
-Possible spelling: Sugared
-Possible spelling: Scarlets
-Ya : true
-Uh : true
-My : true
-hovercraft : true
-is : true
-full : true
-of : true
-eels : true
-Sorry : true
-My : true
-hovercraft : true
-pantomimes : true
-puffing : true
-a : true
-cigarette : true
-is : true
-full : true
-of : true
-eels : true
-pretends : true
-to : true
-strike : true
-a : true
-match : true
-Ahh : ..false
-Possible spelling: Shh
-Possible spelling: Ah
-Possible spelling: Aha
-Possible spelling: Ash
-Possible spelling: Ha
-matches : true
diff --git a/ext/qtdom/CREDITS b/ext/qtdom/CREDITS
deleted file mode 100644
index efeff5dbf9..0000000000
--- a/ext/qtdom/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-qtdom
-Jan Borsodi
diff --git a/ext/qtdom/EXPERIMENTAL b/ext/qtdom/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/qtdom/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/qtdom/config.m4 b/ext/qtdom/config.m4
deleted file mode 100644
index 059d7ca14c..0000000000
--- a/ext/qtdom/config.m4
+++ /dev/null
@@ -1,34 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(whether to include QDOM support)
-AC_ARG_WITH(qtdom,
-[ --with-qtdom Include QtDOM support (requires Qt >= 2.2.0).],
-[
-case $withval in
- no)
- AC_MSG_RESULT(no) ;;
- yes)
- if test -f $QTDIR/include/qdom.h; then
- AC_MSG_RESULT(yes)
- PHP_ADD_LIBRARY_WITH_PATH(qt, $QTDIR/lib)
- PHP_ADD_INCLUDE($QTDIR/include)
- AC_DEFINE(HAVE_QTDOM, 1, [Wheter you have qtdom])
- PHP_NEW_EXTENSION(qtdom, qtdom_qt.cpp, $ext_shared)
- PHP_REQUIRE_CXX
- elif test -f /usr/lib/qt2/include/qdom.h; then
- AC_MSG_RESULT(yes)
- PHP_ADD_LIBRARY(qt)
- PHP_ADD_INCLUDE(/usr/lib/qt2/include)
- AC_DEFINE(HAVE_QTDOM, 1, [Wheter you have qtdom])
- PHP_NEW_EXTENSION(qtdom, qtdom_qt.cpp, $ext_shared)
- PHP_REQUIRE_CXX
- else
- AC_MSG_RESULT(no)
- fi
- ;;
- esac
-],[
- AC_MSG_RESULT(no)
-])
diff --git a/ext/qtdom/qtdom.c b/ext/qtdom/qtdom.c
deleted file mode 100644
index 612621950c..0000000000
--- a/ext/qtdom/qtdom.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jan Borsodi |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "qtdom.h"
-#include "qtdom_qt.h"
-
-#if HAVE_QTDOM
-
-static zend_function_entry qdomdoc_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry qdomnode_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* If you declare any globals in php_qtdom.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(qtdom)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_qtdom;
-
-/* Every user visible function must have an entry in qtdom_functions[].
-*/
-function_entry qtdom_functions[] = {
- PHP_FE(qdom_tree, NULL)
- PHP_FE(qdom_error, NULL)
- {NULL, NULL, NULL} /* Must be the last line in qtdom_functions[] */
-};
-
-zend_module_entry qtdom_module_entry = {
- STANDARD_MODULE_HEADER,
- "qtdom",
- qtdom_functions,
- PHP_MINIT(qtdom),
- PHP_MSHUTDOWN(qtdom),
- NULL,
- NULL,
- PHP_MINFO(qtdom),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_QTDOM
-ZEND_GET_MODULE(qtdom)
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(qtdom)
-{
- zend_class_entry qdomdoc_class_entry;
- zend_class_entry qdomnode_class_entry;
-
- INIT_CLASS_ENTRY(qdomdoc_class_entry, "QDomDocument", qdomdoc_class_functions);
- INIT_CLASS_ENTRY(qdomnode_class_entry, "QDomNode", qdomnode_class_functions);
-
- qdomdoc_class_entry_ptr = zend_register_internal_class(&qdomdoc_class_entry TSRMLS_CC);
- qdomnode_class_entry_ptr = zend_register_internal_class(&qdomnode_class_entry TSRMLS_CC);
-
- qdom_init();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(qtdom)
-{
- qdom_shutdown();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(qtdom)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "qtdom support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ qdom_find_attributes
- * Helper function for creating the attributes, returns the number
- * of attributes found or -1 if an error occured */
-static int qdom_find_attributes( zval **children, struct qdom_attribute *attr TSRMLS_DC)
-{
- zval *child;
- struct qdom_node *node;
- int count;
- int i;
- count = 0;
-
- MAKE_STD_ZVAL(*children);
- if (array_init(*children) == FAILURE)
- return -1;
- for ( i = 0; i < attr->Count; ++i )
- {
- node = qdom_do_attribute_at( attr, i );
-
- MAKE_STD_ZVAL(child);
- object_init_ex(child, qdomnode_class_entry_ptr);
- zend_hash_next_index_insert(Z_ARRVAL_PP(children), &child, sizeof(zval *), NULL);
- add_property_stringl(child, "name", (char *) node->Name, strlen(node->Name), 1);
- add_property_long(child, "type", node->Type);
- add_property_stringl(child, "content", (char *) node->Content, strlen(node->Content), 1);
-
- qdom_do_node_free( node );
- ++count;
- }
-
- return count;
-}
-/* }}} */
-
-/* {{{ qdom_find_children
- Helper function for recursively going trough the QDomNode tree and creating
- the same in PHP objects. Returns the number of children or -1 if an error
- occured. */
-static int qdom_find_children( zval **children, struct qdom_node *orig_node TSRMLS_DC)
-{
- zval *child;
- struct qdom_node *node, *tmp_node, *child_node;
- int count;
-
- zval *n_children, *a_children;
- count = 0;
-
- node = qdom_do_copy_node( orig_node );
- tmp_node = node;
-/* node = orig_node; */
-
- MAKE_STD_ZVAL(*children);
- if (array_init(*children) == FAILURE)
- return -1;
- while( node )
- {
- int num_childs, num_attrs;
-
- MAKE_STD_ZVAL(child);
- object_init_ex(child, qdomnode_class_entry_ptr);
- zend_hash_next_index_insert(Z_ARRVAL_PP(children), &child, sizeof(zval *), NULL);
- add_property_stringl(child, "name", (char *) node->Name, strlen(node->Name), 1);
- add_property_long(child, "type", node->Type);
- if ( node->Type == 2 || node->Type == 3 || node->Type == 4 )
- add_property_stringl(child, "content", (char *) node->Content, strlen(node->Content), 1);
-
- num_attrs = qdom_do_node_attribute_count( node );
- if ( num_attrs > 0 )
- {
- struct qdom_attribute *attr = qdom_do_node_attributes( node );
- if ( qdom_find_attributes( &a_children, attr TSRMLS_CC) > 0 )
- {
- zend_hash_update(Z_OBJPROP_P(child), "attributes", sizeof("attributes"),
- (void *) &a_children, sizeof(zval *), NULL);
- }
- qdom_do_attributes_free( attr );
-/* add_property_long(child, "attributes", num_attrs ); */
- }
-
- num_childs = qdom_do_node_children_count( node );
- if ( num_childs > 0 )
- {
- child_node = qdom_do_copy_node( node );
- child_node = qdom_do_first_child( child_node );
- if ( qdom_find_children( &n_children, child_node TSRMLS_CC) > 0 )
- {
- zend_hash_update(Z_OBJPROP_P(child), "children", sizeof("children"), (void *) &n_children, sizeof(zval *), NULL);
- }
- qdom_do_node_free( child_node );
- }
-
- node = qdom_do_next_node( node );
- ++count;
- }
- qdom_do_node_free( tmp_node );
- return count;
-}
-/* }}} */
-
-/* {{{ proto object qdom_tree( string )
- creates a tree of an xml string */
-PHP_FUNCTION(qdom_tree)
-{
- zval *arg;
- char qt_ver1[200];
- char *qt_ver = qt_ver1;
- char *qdom_type_name;
- struct qdom_doc *doc;
- struct qdom_node *node;
- zval *children;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg);
-
- qdom_do_install_message_handler();
-
- qdom_do_version( &qt_ver );
-
- object_init_ex(return_value, qdomdoc_class_entry_ptr);
- add_property_stringl(return_value, "version", (char *) qt_ver, strlen(qt_ver), 1);
-
- doc = qdom_do_init( Z_STRVAL_P(arg) );
-
- qdom_do_doc_type( doc, &qdom_type_name );
-
- if ( qdom_type_name )
- add_property_stringl(return_value, "doctype", (char *) qdom_type_name, strlen(qdom_type_name), 1);
-
- node = doc->Children;
- if ( qdom_find_children( &children, node TSRMLS_CC) > 0 )
- {
- add_property_long(return_value, "type", node->Type);
- zend_hash_update(Z_OBJPROP_P(return_value), "children", sizeof("children"), (void *) &children, sizeof(zval *), NULL);
- }
-
- qdom_do_free( doc );
- qdom_do_free_message_handler();
-}
-/* }}} */
-
-/* {{{ proto string qdom_error()
- Returns the error string from the last QDOM operation or FALSE if no errors occured.*/
-PHP_FUNCTION(qdom_error)
-{
- char *error = qdom_error_log();
- if ( error == 0 )
- RETURN_FALSE;
- RETURN_STRING( error, 1 );
-}
-/* }}} */
-
-#endif /* HAVE_QTDOM */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/qtdom/qtdom.h b/ext/qtdom/qtdom.h
deleted file mode 100644
index efddaa6b40..0000000000
--- a/ext/qtdom/qtdom.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jan Borsodi |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_QTDOM_H
-#define PHP_QTDOM_H
-
-#if HAVE_QTDOM
-
-extern zend_module_entry qtdom_module_entry;
-#define phpext_qtdom_ptr &qtdom_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_QTDOM_API __declspec(dllexport)
-#else
-#define PHP_QTDOM_API
-#endif
-
-static zend_class_entry *qdomdoc_class_entry_ptr;
-static zend_class_entry *qdomnode_class_entry_ptr;
-
-PHP_MINIT_FUNCTION(qtdom);
-PHP_MSHUTDOWN_FUNCTION(qtdom);
-PHP_RINIT_FUNCTION(qtdom);
-PHP_RSHUTDOWN_FUNCTION(qtdom);
-PHP_MINFO_FUNCTION(qtdom);
-
-PHP_FUNCTION(qdom_tree);
-PHP_FUNCTION(qdom_error);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(qtdom)
- int global_variable;
-ZEND_END_MODULE_GLOBALS(qtdom)
-*/
-
-#ifdef ZTS
-# define QTDOMG(v) TSRMG(qtdom_globals_id, zend_qtdom_globals *, v)
-#else
-# define QTDOMG(v) (qtdom_globals.v)
-#endif
-
-#else
-
-#define phpext_qtdom_ptr NULL
-
-#endif
-
-#endif /* PHP_QTDOM_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/qtdom/qtdom.php b/ext/qtdom/qtdom.php
deleted file mode 100644
index 8db4e649b3..0000000000
--- a/ext/qtdom/qtdom.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'qtdom';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/qtdom/qtdom_qt.cpp b/ext/qtdom/qtdom_qt.cpp
deleted file mode 100644
index 6cc5050e49..0000000000
--- a/ext/qtdom/qtdom_qt.cpp
+++ /dev/null
@@ -1,371 +0,0 @@
-//
-// $Id$
-//
-// Jan Borsodi <jb@ez.no>
-// Created on: <09-Nov-2000 11:18:46 root>
-//
-
-
-extern "C"
-{
-//#include "php.h"
-//#include "php_ini.h"
-//#include "php_qtdom.h"
-#include "qtdom_qt.h"
-}
-
-
-//#if HAVE_QTDOM
-
-#include <qdom.h>
-#include <qstring.h>
-#include <qglobal.h>
-
-struct qdom_node *qdom_to_node( QDomNode *node );
-
-/*!
- Initialises certain global variables, they are:
- g_qdom_message_log : A global variable for handling error logs and message handler function.
-*/
-
-extern "C" void qdom_init()
-{
- g_qdom_message_log = new qdom_message;
- g_qdom_message_log->Log = 0;
- g_qdom_message_log->OldHandler = 0;
-}
-
-/*!
- Frees global variables initialised in the init function.
-*/
-
-extern "C" void qdom_shutdown()
-{
- if ( g_qdom_message_log->Log )
- delete []g_qdom_message_log->Log;
- delete g_qdom_message_log;
- g_qdom_message_log = 0;
-}
-
-/*!
- Copies the version number for Qt into the \c ver variable,
- the variable must be allocated by user and must have enough characters (20 should suffice).
-*/
-
-extern "C" void qdom_do_version( char **ver )
-{
- strcpy( *ver, QT_VERSION_STR );
-}
-
-/*!
- Moves the DOM node to the next sibling if any and returns the node.
-*/
-
-extern "C" struct qdom_node *qdom_do_next_node( struct qdom_node *node )
-{
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- if ( !q_node )
- return 0;
-
- if ( q_node->isNull() )
- return 0;
- *q_node = q_node->nextSibling();
- if ( q_node->isNull() )
- return 0;
-
- node->Type = q_node->nodeType();
- const char *name = q_node->nodeName().latin1();
- node->Name = new char[q_node->nodeName().length()+1];
- strcpy( node->Name, name );
- const char *content = q_node->nodeValue().latin1();
- node->Content = new char[q_node->nodeValue().length()+1];
- strcpy( node->Content, content );
-
- return node;
-}
-
-/*!
- Finds the first child of the current node and returns it if any.
-*/
-
-extern "C" struct qdom_node *qdom_do_first_child( struct qdom_node *node )
-{
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- if ( !q_node )
- return 0;
-
- if ( q_node->isNull() )
- return 0;
- *q_node = q_node->firstChild();
- if ( q_node->isNull() )
- return 0;
-
- node->Type = q_node->nodeType();
- const char *name = q_node->nodeName().latin1();
- node->Name = new char[q_node->nodeName().length()+1];
- strcpy( node->Name, name );
- const char *content = q_node->nodeValue().latin1();
- node->Content = new char[q_node->nodeValue().length()+1];
- strcpy( node->Content, content );
-
- return node;
-}
-
-/*!
- Returns the number of the children for the current node.
-*/
-
-extern "C" int qdom_do_node_children_count( struct qdom_node *node )
-{
- if ( !node )
- return 0;
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- if ( !q_node )
- return 0;
- return q_node->childNodes().count();
-}
-
-/*!
- Returns the number of attributes for the current node.
-*/
-
-extern "C" int qdom_do_node_attribute_count( struct qdom_node *node )
-{
- if ( !node )
- return 0;
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- if ( !q_node )
- return 0;
- return q_node->attributes().length();
-}
-
-/*!
- Returns the attribute map for the current node.
-*/
-
-extern "C" struct qdom_attribute *qdom_do_node_attributes( struct qdom_node *node )
-{
- struct qdom_attribute *attr = new struct qdom_attribute;
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- QDomNamedNodeMap *map = new QDomNamedNodeMap( q_node->attributes() );
- attr->Q_Node = map;
- attr->Count = map->length();
- return attr;
-}
-
-/*!
- Returns the node at a given index taken from the attribute list if any.
-*/
-
-extern "C" struct qdom_node *qdom_do_attribute_at( struct qdom_attribute *attr, int index )
-{
- if ( !attr )
- return 0;
- QDomNamedNodeMap *map = (QDomNamedNodeMap *)attr->Q_Node;
- if ( index < 0 || index >= map->length() )
- return 0;
- QDomNode node = map->item( index );
- return qdom_to_node( &node );
-}
-
-/*!
- Frees an attribute map.
-*/
-
-extern "C" void qdom_do_attributes_free( struct qdom_attribute *attr )
-{
- if ( !attr )
- return;
- QDomNamedNodeMap *map = (QDomNamedNodeMap *)attr->Q_Node;
- delete map;
- delete attr;
-}
-
-/*!
- Makes a copy of a node.
-*/
-
-extern "C" struct qdom_node *qdom_do_copy_node( struct qdom_node *node )
-{
- if ( !node )
- return 0;
- struct qdom_node *tmp = new struct qdom_node;
- if ( node->Name )
- {
- tmp->Name = new char[strlen(node->Name)+1];
- strcpy( tmp->Name, node->Name );
- }
- else
- tmp->Name = 0;
- if ( node->Content )
- {
- tmp->Content = new char[strlen(node->Content)+1];
- strcpy( tmp->Content, node->Content );
- }
- else
- tmp->Content = 0;
- if ( node->Q_Node )
- {
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- tmp->Q_Node = new QDomNode( *q_node );
- }
- else
- tmp->Q_Node = 0;
- tmp->Type = node->Type;
- return tmp;
-}
-
-/*!
- Frees a node.
-*/
-
-extern "C" void qdom_do_node_free( struct qdom_node *node )
-{
- if ( !node )
- return;
- delete []node->Name;
- delete []node->Content;
- QDomNode *q_node = (QDomNode *)node->Q_Node;
- delete q_node;
- delete node;
-}
-
-/*!
- Wraps a qdom_node struct around a QDomNode object which can be used by the C code.
-*/
-
-struct qdom_node *qdom_to_node( QDomNode *node )
-{
- if ( !node )
- return 0;
- qdom_node *q_node = new struct qdom_node;
- q_node->Type = node->nodeType();
- const char *name = node->nodeName().latin1();
- q_node->Name = new char[node->nodeName().length()+1];
- strcpy( q_node->Name, name );
- const char *content = node->nodeValue().latin1();
- q_node->Content = new char[node->nodeValue().length()+1];
- strcpy( q_node->Content, content );
- q_node->Q_Node = new QDomNode( *node );
- return q_node;
-}
-
-/*!
- Copies the doctype name taken from the the qdom_doc object to the
- \c name variable, the variable is initialised by the function.
-*/
-
-extern "C" void qdom_do_doc_type( struct qdom_doc *doc, char **name )
-{
- if ( !doc )
- {
- *name = 0;
- return;
- }
- QDomDocument *document = (QDomDocument *)doc->Document;
- QString str = document->doctype().name();
- const char *q_name = str.latin1();
- if ( q_name )
- {
- *name = new char[strlen(q_name)+1];
- strcpy( *name, q_name );
- }
- else
- {
- *name = 0;
- }
-}
-
-/*!
- Initialises a qdom_doc struct with the string taken from \c arg.
-*/
-
-extern "C" struct qdom_doc *qdom_do_init( const char *arg )
-{
- struct qdom_doc *doc = new struct qdom_doc;
- QDomDocument *document = new QDomDocument();
- document->setContent( QString( arg ) );
- QDomNode *node = new QDomNode;
- *node = document->documentElement();
- doc->Document = document;
- doc->CurrentNode = node;
- doc->Children = qdom_to_node( node );
- return doc;
-}
-
-/*!
- Frees a qdom_doc struct.
-*/
-
-extern "C" void qdom_do_free( struct qdom_doc *doc )
-{
- QDomNode *node = (QDomNode *)doc->CurrentNode;
- QDomDocument *document = (QDomDocument *)doc->Document;
- delete document;
- delete node;
- delete doc->Children;
- delete doc;
-}
-
-/*!
- The custom message output used for catching Qt error messages when parsing with QDOM.
-*/
-
-void qdom_messageOutput( QtMsgType , const char *msg )
-{
- if ( !g_qdom_message_log )
- return;
- int msg_len = strlen( msg );
- int log_len = 0;
- if ( g_qdom_message_log->Log )
- log_len = strlen( g_qdom_message_log->Log );
- int total_len = log_len+msg_len+2;
- char *log = new char[total_len];
- if ( g_qdom_message_log->Log )
- strncpy( log, g_qdom_message_log->Log, log_len );
- strncpy( log+log_len, msg, msg_len );
- log[log_len+msg_len] = '\n';
- log[total_len - 1] = '\0';
- if ( g_qdom_message_log->Log )
- delete []g_qdom_message_log->Log;
- g_qdom_message_log->Log = log;
-}
-
-/*!
- Installs the custom message handler and clears the log entries.
-*/
-
-extern "C" void qdom_do_install_message_handler()
-{
- if ( !g_qdom_message_log )
- g_qdom_message_log = new qdom_message;
- msg_handler *old_handler = new msg_handler;
- g_qdom_message_log->OldHandler = (void *)old_handler;
- if ( g_qdom_message_log->Log )
- delete []g_qdom_message_log->Log;
- g_qdom_message_log->Log = 0;
- *old_handler = qInstallMsgHandler( qdom_messageOutput );
-}
-
-/*!
- Frees the custom message handler.
-*/
-
-extern "C" void qdom_do_free_message_handler()
-{
- msg_handler *old_handler = (msg_handler *)g_qdom_message_log->OldHandler;
- qInstallMsgHandler( *old_handler );
-}
-
-/*!
- Returns the string containg the error log, or 0 if no log is available.
-*/
-
-extern "C" char *qdom_error_log()
-{
- if ( !g_qdom_message_log )
- return 0;
- return g_qdom_message_log->Log;
-}
-
-//#endif // HAVE_QTDOM
diff --git a/ext/qtdom/qtdom_qt.h b/ext/qtdom/qtdom_qt.h
deleted file mode 100644
index 97d83acea1..0000000000
--- a/ext/qtdom/qtdom_qt.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// -*- Mode: C++ -*-
-//
-// $Id$
-//
-// Created on: <09-Nov-2000 12:00:24 root>
-//
-
-#ifndef QDOM_QT_H
-#define QDOM_QT_H
-
-struct qdom_node
-{
- int Type;
- char *Name;
- char *Content;
- void *Q_Node;
-};
-
-struct qdom_attribute
-{
- int Count;
- void *Q_Node;
-};
-
-struct qdom_doc
-{
- void *Document;
- void *CurrentNode;
- struct qdom_node *Children;
-};
-
-struct qdom_message
-{
- char *Log;
- void *OldHandler;
-};
-
-void qdom_init();
-void qdom_shutdown();
-
-void qdom_do_install_message_handler();
-void qdom_do_free_message_handler();
-
-char *qdom_error_log();
-
-void qdom_do_version( char **ver );
-
-struct qdom_node *qdom_do_next_node( struct qdom_node *node );
-struct qdom_node *qdom_do_first_child( struct qdom_node *node );
-
-struct qdom_attribute *qdom_do_node_attributes( struct qdom_node *node );
-struct qdom_node *qdom_do_attribute_at( struct qdom_attribute *attr, int index );
-void qdom_do_attributes_free( struct qdom_attribute *node );
-
-int qdom_do_node_children_count( struct qdom_node *node );
-int qdom_do_node_attribute_count( struct qdom_node *node );
-
-struct qdom_node *qdom_do_copy_node( struct qdom_node *node );
-void qdom_do_node_free( struct qdom_node *node );
-
-void qdom_do_doc_type( struct qdom_doc *doc, char **name );
-struct qdom_doc *qdom_do_init( const char *arg );
-void qdom_do_free( struct qdom_doc *doc );
-
-struct qdom_message *g_qdom_message_log;
-
-#endif // QDOM_QT_H
diff --git a/ext/readline/CREDITS b/ext/readline/CREDITS
deleted file mode 100644
index 02e44a44d4..0000000000
--- a/ext/readline/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Readline
-Thies C. Arntzen
diff --git a/ext/readline/README.libedit b/ext/readline/README.libedit
deleted file mode 100644
index a19371056e..0000000000
--- a/ext/readline/README.libedit
+++ /dev/null
@@ -1,4 +0,0 @@
-This library can be built with libedit - non-GPL drop-in readline replacement.
-Libedit can be obtained from http://sourceforge.net/projects/libedit/
-It is taken from NetBSD (http://www.netbsd.org/) CVS repository and modified
-to work as stand-alone library.
diff --git a/ext/readline/config.m4 b/ext/readline/config.m4
deleted file mode 100644
index 463304bcaa..0000000000
--- a/ext/readline/config.m4
+++ /dev/null
@@ -1,92 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(libedit,for libedit readline replacement,
-[ --with-libedit[=DIR] Include libedit readline replacement (CLI/CGI only).])
-
-PHP_ARG_WITH(readline,for readline support,
-[ --with-readline[=DIR] Include readline support (CLI/CGI only).])
-
-if test "$PHP_READLINE" != "no"; then
- for i in /usr/local /usr $PHP_READLINE; do
- if test -f $i/include/readline/readline.h; then
- READLINE_DIR=$i
- fi
- done
-
- if test -z "$READLINE_DIR"; then
- AC_MSG_ERROR(Please reinstall readline - I cannot find readline.h)
- fi
- PHP_ADD_INCLUDE($READLINE_DIR/include)
-
- AC_CHECK_LIB(ncurses, tgetent,
- [
- PHP_ADD_LIBRARY_WITH_PATH(ncurses,,READLINE_SHARED_LIBADD)
- ],[
- AC_CHECK_LIB(termcap, tgetent,
- [
- PHP_ADD_LIBRARY_WITH_PATH(termcap,,READLINE_SHARED_LIBADD)
- ])
- ])
-
- PHP_CHECK_LIBRARY(readline, readline,
- [
- PHP_ADD_LIBRARY_WITH_PATH(readline, $READLINE_DIR/lib, READLINE_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(readline library not found)
- ], [
- -L$READLINE_DIR/lib
- ])
-
- PHP_CHECK_LIBRARY(history, add_history,
- [
- PHP_ADD_LIBRARY_WITH_PATH(history, $READLINE_DIR/lib, READLINE_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(history library required by readline not found)
- ], [
- -L$READLINE_DIR/lib
- ])
-
- PHP_SUBST(READLINE_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_LIBREADLINE, 1, [ ])
- PHP_NEW_EXTENSION(readline, readline.c, $ext_shared, cli)
-fi
-
-if test "$PHP_LIBEDIT" != "no"; then
- for i in /usr/local /usr $PHP_LIBEDIT; do
- if test -f $i/include/readline/readline.h; then
- LIBEDIT_DIR=$i
- fi
- done
-
- if test -z "$LIBEDIT_DIR"; then
- AC_MSG_ERROR(Please reinstall libedit - I cannot find readline.h)
- fi
- PHP_ADD_INCLUDE($LIBEDIT_DIR/include)
-
- AC_CHECK_LIB(ncurses, tgetent,
- [
- PHP_ADD_LIBRARY_WITH_PATH(ncurses,,READLINE__SHARED_LIBADD)
- ],[
- AC_CHECK_LIB(termcap, tgetent,
- [
- PHP_ADD_LIBRARY_WITH_PATH(termcap,,READLINE_SHARED_LIBADD)
- ])
- ])
-
- PHP_CHECK_LIBRARY(edit, readline,
- [
- PHP_ADD_LIBRARY_WITH_PATH(edit, $LIBEDIT_DIR/lib, READLINE_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(edit library required by readline not found)
- ], [
- -L$READLINE_DIR/lib
- ])
-
- PHP_SUBST(READLINE_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_LIBEDIT, 1, [ ])
- PHP_NEW_EXTENSION(readline, readline.c, $ext_shared, cli)
-fi
diff --git a/ext/readline/php_readline.h b/ext/readline/php_readline.h
deleted file mode 100644
index 6a2d48b0ec..0000000000
--- a/ext/readline/php_readline.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_READLINE_H
-#define PHP_READLINE_H
-
-#if HAVE_LIBREADLINE || HAVE_LIBEDIT
-#ifdef ZTS
-#warning Readline module will *NEVER* be thread-safe
-#endif
-
-extern zend_module_entry readline_module_entry;
-#define phpext_readline_ptr &readline_module_entry
-
-#else
-
-#define phpext_readline_ptr NULL
-
-#endif /* HAVE_LIBREADLINE */
-
-#endif /* PHP_READLINE_H */
-
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
deleted file mode 100644
index b4cf2ca429..0000000000
--- a/ext/readline/readline.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* {{{ includes & prototypes */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_readline.h"
-
-#if HAVE_LIBREADLINE || HAVE_LIBEDIT
-
-#include <readline/readline.h>
-#ifndef HAVE_LIBEDIT
-#include <readline/history.h>
-#endif
-
-PHP_FUNCTION(readline);
-PHP_FUNCTION(readline_add_history);
-PHP_FUNCTION(readline_info);
-PHP_FUNCTION(readline_clear_history);
-PHP_FUNCTION(readline_list_history);
-PHP_FUNCTION(readline_read_history);
-PHP_FUNCTION(readline_write_history);
-PHP_FUNCTION(readline_completion_function);
-
-static char *_readline_completion = NULL;
-static zval _readline_array;
-
-PHP_MINIT_FUNCTION(readline);
-PHP_RSHUTDOWN_FUNCTION(readline);
-
-/* }}} */
-/* {{{ module stuff */
-
-static zend_function_entry php_readline_functions[] = {
- PHP_FE(readline, NULL)
- PHP_FE(readline_info, NULL)
- PHP_FE(readline_add_history, NULL)
- PHP_FE(readline_clear_history, NULL)
-#ifdef HAVE_LIBREADLINE
- PHP_FE(readline_list_history, NULL)
-#endif
- PHP_FE(readline_read_history, NULL)
- PHP_FE(readline_write_history, NULL)
- PHP_FE(readline_completion_function,NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry readline_module_entry = {
- STANDARD_MODULE_HEADER,
- "readline",
- php_readline_functions,
- PHP_MINIT(readline),
- NULL,
- NULL,
- PHP_RSHUTDOWN(readline),
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_READLINE
-ZEND_GET_MODULE(readline)
-#endif
-
-PHP_MINIT_FUNCTION(readline)
-{
- using_history();
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(readline)
-{
- if (_readline_completion)
- efree(_readline_completion);
-
- return SUCCESS;
-}
-
-/* }}} */
-/* {{{ proto string readline([string prompt])
- Reads a line */
-PHP_FUNCTION(readline)
-{
- char *result;
- pval **arg;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 1) {
- convert_to_string_ex(arg);
- }
-
- result = readline(ac?Z_STRVAL_PP(arg):NULL);
-
- if (! result) {
- RETURN_FALSE;
- } else {
- RETVAL_STRING(result,1);
- free(result);
- }
-}
-
-/* }}} */
-/* {{{ proto mixed readline_info([string varname] [, string newvalue])
- Gets/sets various internal readline variables. */
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-PHP_FUNCTION(readline_info)
-{
- zval **what;
- zval **value;
- int oldval;
- char *oldstr;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 2 || zend_get_parameters_ex(ac, &what, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 0) {
- array_init(return_value);
- add_assoc_string(return_value,"line_buffer",SAFE_STRING(rl_line_buffer),1);
- add_assoc_long(return_value,"point",rl_point);
- add_assoc_long(return_value,"end",rl_end);
-#ifdef HAVE_LIBREADLINE
- add_assoc_long(return_value,"mark",rl_mark);
- add_assoc_long(return_value,"done",rl_done);
- add_assoc_long(return_value,"pending_input",rl_pending_input);
- add_assoc_string(return_value,"prompt",SAFE_STRING(rl_prompt),1);
- add_assoc_string(return_value,"terminal_name",SAFE_STRING(rl_terminal_name),1);
-#endif
-#if HAVE_ERASE_EMPTY_LINE
- add_assoc_long(return_value,"erase_empty_line",rl_erase_empty_line);
-#endif
- add_assoc_string(return_value,"library_version",SAFE_STRING(rl_library_version),1);
- add_assoc_string(return_value,"readline_name",SAFE_STRING(rl_readline_name),1);
- } else {
- convert_to_string_ex(what);
-
- if (! strcasecmp(Z_STRVAL_PP(what),"line_buffer")) {
- oldstr = rl_line_buffer;
- if (ac == 2) {
- /* XXX if (rl_line_buffer) free(rl_line_buffer); */
- convert_to_string_ex(value);
- rl_line_buffer = strdup(Z_STRVAL_PP(value));
- }
- RETVAL_STRING(SAFE_STRING(oldstr),1);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"point")) {
- RETVAL_LONG(rl_point);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"end")) {
- RETVAL_LONG(rl_end);
-#ifdef HAVE_LIBREADLINE
- } else if (! strcasecmp(Z_STRVAL_PP(what),"mark")) {
- RETVAL_LONG(rl_mark);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"done")) {
- oldval = rl_done;
- if (ac == 2) {
- convert_to_long_ex(value);
- rl_done = Z_LVAL_PP(value);
- }
- RETVAL_LONG(oldval);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"pending_input")) {
- oldval = rl_pending_input;
- if (ac == 2) {
- convert_to_string_ex(value);
- rl_pending_input = Z_STRVAL_PP(value)[0];
- }
- RETVAL_LONG(oldval);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"prompt")) {
- RETVAL_STRING(SAFE_STRING(rl_prompt),1);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"terminal_name")) {
- RETVAL_STRING(SAFE_STRING(rl_terminal_name),1);
-#endif
-#if HAVE_ERASE_EMPTY_LINE
- } else if (! strcasecmp(Z_STRVAL_PP(what),"erase_empty_line")) {
- oldval = rl_erase_empty_line;
- if (ac == 2) {
- convert_to_long_ex(value);
- rl_erase_empty_line = Z_LVAL_PP(value);
- }
- RETVAL_LONG(oldval);
-#endif
- } else if (! strcasecmp(Z_STRVAL_PP(what),"library_version")) {
- RETVAL_STRING(SAFE_STRING(rl_library_version),1);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"readline_name")) {
- oldstr = rl_readline_name;
- if (ac == 2) {
- /* XXX if (rl_readline_name) free(rl_readline_name); */
- convert_to_string_ex(value);
- rl_readline_name = strdup(Z_STRVAL_PP(value));;
- }
- RETVAL_STRING(SAFE_STRING(oldstr),1);
- }
- }
-}
-
-/* }}} */
-/* {{{ proto void readline_add_history([string prompt])
- Adds a line to the history */
-PHP_FUNCTION(readline_add_history)
-{
- pval **arg;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 1 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- add_history(Z_STRVAL_PP(arg));
-
- RETURN_TRUE;
-}
-
-/* }}} */
-/* {{{ proto void readline_clear_history(void)
- Clears the history */
-PHP_FUNCTION(readline_clear_history)
-{
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 0) {
- WRONG_PARAM_COUNT;
- }
-
- clear_history();
-
- RETURN_TRUE;
-}
-
-/* }}} */
-/* {{{ proto array readline_list_history(void)
- Lists the history */
-#ifdef HAVE_LIBREADLINE
-PHP_FUNCTION(readline_list_history)
-{
- HIST_ENTRY **history;
- int ac = ZEND_NUM_ARGS();
-
- if (ac) {
- WRONG_PARAM_COUNT;
- }
-
- history = history_list();
-
- array_init(return_value);
-
- if (history) {
- int i;
- for (i = 0; history[i]; i++) {
- add_next_index_string(return_value,history[i]->line,1);
- }
- }
-}
-#endif
-/* }}} */
-/* {{{ proto int readline_read_history([string filename] [, int from] [,int to])
- Reads the history */
-PHP_FUNCTION(readline_read_history)
-{
- pval **arg;
- char *filename = NULL;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* XXX from & to NYI */
-
- if (ac == 1) {
- convert_to_string_ex(arg);
- filename = Z_STRVAL_PP(arg);
- }
-
- if (read_history(filename)) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-/* {{{ proto int readline_write_history([string filename])
- Writes the history */
-PHP_FUNCTION(readline_write_history)
-{
- pval **arg;
- char *filename = NULL;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 1) {
- convert_to_string_ex(arg);
- filename = Z_STRVAL_PP(arg);
- }
-
- if (write_history(filename)) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-/* {{{ proto void readline_completion_function(string funcname)
- Readline completion function? */
-
-static char *_readline_command_generator(char *text,int state)
-{
- HashTable *myht = Z_ARRVAL(_readline_array);
- zval **entry;
-
- if (! state) {
- zend_hash_internal_pointer_reset(myht);
- }
-
- while (zend_hash_get_current_data(myht, (void **)&entry) == SUCCESS) {
- zend_hash_move_forward(myht);
-
- convert_to_string_ex(entry);
- if (strncmp (Z_STRVAL_PP(entry), text, strlen(text)) == 0) {
- return (strdup(Z_STRVAL_PP(entry)));
- }
- }
-
- return NULL;
-}
-
-static zval *_readline_string_zval(const char *str)
-{
- zval *ret;
- int len = strlen(str);
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_STRING;
- Z_STRLEN_P(ret) = len;
- Z_STRVAL_P(ret) = estrndup(str, len);
- return ret;
-}
-
-static zval *_readline_long_zval(long l)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_LONG;
- Z_LVAL_P(ret) = l;
- return ret;
-}
-
-static char **_readline_completion_cb(char *text, int start, int end)
-{
- zval *params[4];
- int i;
- char **matches = NULL;
- TSRMLS_FETCH();
-
- params[0]=_readline_string_zval(_readline_completion);
- params[1]=_readline_string_zval(text);
- params[2]=_readline_long_zval(start);
- params[3]=_readline_long_zval(end);
-
- if (call_user_function(CG(function_table), NULL, params[0], &_readline_array, 3, params+1 TSRMLS_CC) == SUCCESS) {
- if (Z_TYPE(_readline_array) == IS_ARRAY) {
- matches = completion_matches(text,_readline_command_generator);
- }
- }
-
- for (i = 0; i < 4; i++) {
- zval_ptr_dtor(&params[i]);
- }
- zval_dtor(&_readline_array);
-
- return matches;
-}
-
-PHP_FUNCTION(readline_completion_function)
-{
- pval **arg;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 1) {
- convert_to_string_ex(arg);
-
- if (_readline_completion)
- efree(_readline_completion);
-
- _readline_completion = estrdup(Z_STRVAL_PP(arg));
- rl_attempted_completion_function = _readline_completion_cb;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#endif /* HAVE_LIBREADLINE */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/recode/CREDITS b/ext/recode/CREDITS
deleted file mode 100644
index 2b07813086..0000000000
--- a/ext/recode/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Recode
-Kristian Köhntopp
diff --git a/ext/recode/config.m4 b/ext/recode/config.m4
deleted file mode 100644
index aae118a76b..0000000000
--- a/ext/recode/config.m4
+++ /dev/null
@@ -1,63 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(recode,for recode support,
-[ --with-recode[=DIR] Include recode support.])
-
-if test "$PHP_RECODE" != "no"; then
- RECODE_LIST="$PHP_RECODE /usr /usr/local /opt"
-
- for i in $RECODE_LIST; do
- if test -f $i/include/recode.h; then
- RECODE_DIR=$i
- RECODE_INC=include
- RECODE_LIB=lib
- fi
- if test -f $i/include/recode/recode.h; then
- RECODE_DIR=$i
- RECODE_INC=include/recode
- RECODE_LIB=lib/recode
- fi
- if test -f $i/recode/include/recode.h; then
- RECODE_DIR=$i/recode
- RECODE_INC=include
- RECODE_LIB=lib
- fi
- done
-
- if test -z "$RECODE_DIR"; then
- AC_MSG_ERROR([Can not find recode.h anywhere under $RECODE_LIST.])
- fi
-
- PHP_CHECK_LIBRARY(recode, recode_format_table,
- [
- PHP_ADD_LIBRARY_WITH_PATH(recode, $RECODE_DIR/$RECODE_LIB, RECODE_SHARED_LIBADD)
- ], [
- old_LDFLAGS=$LDFLAGS
- old_LIBS=$LIBS
- LDFLAGS="$LDFLAGS -L$RECODE_DIR/$RECODE_LIB"
- LIBS="$LIBS -lrecode"
- AC_TRY_LINK(
- [
-char *program_name;
- ],[
-recode_format_table();
- ],[
- PHP_ADD_LIBRARY_DEFER_WITH_PATH(recode, $RECODE_DIR/$RECODE_LIB, RECODE_SHARED_LIBADD)
- AC_DEFINE(HAVE_BROKEN_RECODE, 1, [Whether we have librecode 3.5])
- ],[
- AC_MSG_ERROR(I cannot link librecode (-L$RECODE_DIR/$RECODE_LIB -lrecode). Is it installed?)
- ])
- LIBS=$old_LIBS
- LDFLAGS=$old_LDFLAGS
- ], [
- -L$RECODE_DIR/$RECODE_LIB
- ])
-
- AC_DEFINE(HAVE_LIBRECODE, 1, [Whether we have librecode 3.5 or higher])
- PHP_ADD_INCLUDE($RECODE_DIR/$RECODE_INC)
- PHP_SUBST(RECODE_SHARED_LIBADD)
- AC_CHECK_HEADERS(stdbool.h)
- PHP_NEW_EXTENSION(recode, recode.c, $ext_shared)
-fi
diff --git a/ext/recode/php_recode.h b/ext/recode/php_recode.h
deleted file mode 100644
index 0fc86256e1..0000000000
--- a/ext/recode/php_recode.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_RECODE_H
-#define PHP_RECODE_H
-
-#if HAVE_LIBRECODE
-
-extern zend_module_entry recode_module_entry;
-#define phpext_recode_ptr &recode_module_entry
-
-PHP_MINIT_FUNCTION(recode);
-PHP_MSHUTDOWN_FUNCTION(recode);
-PHP_MINFO_FUNCTION(recode);
-PHP_FUNCTION(recode_string);
-PHP_FUNCTION(recode_file);
-
-#else
-#define phpext_recode_ptr NULL
-#endif
-
-#endif /* PHP_RECODE_H */
diff --git a/ext/recode/recode.c b/ext/recode/recode.c
deleted file mode 100644
index 9c1c837440..0000000000
--- a/ext/recode/recode.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes & prototypes */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_streams.h"
-
-#if HAVE_LIBRECODE
-
-/* For recode 3.5 */
-#if HAVE_BROKEN_RECODE
-extern char *program_name;
-char *program_name = "php";
-#endif
-
-#ifdef HAVE_STDBOOL_H
-# include <stdbool.h>
-#else
- typedef enum {false = 0, true = 1} bool;
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <recode.h>
-
-#include "php_recode.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "ext/standard/php_string.h"
-
-/* }}} */
-
-ZEND_BEGIN_MODULE_GLOBALS(recode)
- RECODE_OUTER outer;
-ZEND_END_MODULE_GLOBALS(recode)
-
-#ifdef ZTS
-# define ReSG(v) TSRMG(recode_globals_id, zend_recode_globals *, v)
-#else
-# define ReSG(v) (recode_globals.v)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(recode);
-
-/* {{{ module stuff */
-static zend_function_entry php_recode_functions[] = {
- PHP_FE(recode_string, NULL)
- PHP_FE(recode_file, NULL)
- PHP_FALIAS(recode, recode_string, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry recode_module_entry = {
- STANDARD_MODULE_HEADER,
- "recode",
- php_recode_functions,
- PHP_MINIT(recode),
- PHP_MSHUTDOWN(recode),
- NULL,
- NULL,
- PHP_MINFO(recode),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_RECODE
-ZEND_GET_MODULE(recode)
-#endif
-
-static void php_recode_init_globals (zend_recode_globals *rg)
-{
- rg->outer = NULL;
-}
-
-PHP_MINIT_FUNCTION(recode)
-{
- ZEND_INIT_MODULE_GLOBALS(recode, php_recode_init_globals, NULL);
-
- ReSG(outer) = recode_new_outer(false);
- if (ReSG(outer) == NULL) {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(recode)
-{
- if (ReSG(outer)) {
- recode_delete_outer(ReSG(outer));
- }
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(recode)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Recode Support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision$");
- php_info_print_table_end();
-}
-
-/* {{{ proto string recode_string(string request, string str)
- Recode string str according to request string */
-PHP_FUNCTION(recode_string)
-{
- RECODE_REQUEST request = NULL;
- char *r = NULL;
- zval **str;
- zval **req;
- bool success;
- int r_len=0, r_alen =0;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &req, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_string_ex(req);
-
- request = recode_new_request(ReSG(outer));
-
- if (request == NULL) {
- php_error(E_WARNING, "Cannot allocate request structure");
- RETURN_FALSE;
- }
-
- success = recode_scan_request(request, Z_STRVAL_PP(req));
- if (!success) {
- php_error(E_WARNING, "Illegal recode request '%s'", Z_STRVAL_PP(req));
- goto error_exit;
- }
-
- recode_buffer_to_buffer(request, Z_STRVAL_PP(str), Z_STRLEN_PP(str), &r, &r_len, &r_alen);
- if (!r) {
- php_error(E_WARNING, "Recoding failed.");
- goto error_exit;
- }
-
- RETVAL_STRINGL(r, r_len, 1);
- free(r);
- /* FALLTHROUGH */
-
-error_exit:
- if (request)
- recode_delete_request(request);
-
- if (!r)
- RETURN_FALSE;
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool recode_file(string request, resource input, resource output)
- Recode file input into file output according to request */
-PHP_FUNCTION(recode_file)
-{
- RECODE_REQUEST request = NULL;
- int success;
- zval **req;
- zval **input, **output;
- php_stream *instream, *outstream;
- FILE *in_fp, *out_fp;
- int in_type, out_type;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &req, &input, &output) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- instream = zend_fetch_resource(input TSRMLS_CC,-1, "File-Handle", &in_type, 1, php_file_le_stream());
-
- if (!instream) {
- php_error(E_WARNING,"Unable to find input file identifier");
- RETURN_FALSE;
- }
-
- if (FAILURE == php_stream_cast(instream, PHP_STREAM_AS_STDIO, (void**)&in_fp, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- outstream = zend_fetch_resource(output TSRMLS_CC,-1, "File-Handle", &out_type, 1, php_file_le_stream());
- if (!outstream) {
- php_error(E_WARNING,"Unable to find output file identifier");
- RETURN_FALSE;
- }
- if (FAILURE == php_stream_cast(outstream, PHP_STREAM_AS_STDIO, (void**)&out_fp, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(req);
-
- request = recode_new_request(ReSG(outer));
- if (request == NULL) {
- php_error(E_WARNING, "Cannot allocate request structure");
- RETURN_FALSE;
- }
-
- success = recode_scan_request(request, Z_STRVAL_PP(req));
- if (!success) {
- php_error(E_WARNING, "Illegal recode request '%s'", Z_STRVAL_PP(req));
- goto error_exit;
- }
-
- success = recode_file_to_file(request, in_fp, out_fp);
- if (!success) {
- php_error(E_WARNING, "Recoding failed.");
- goto error_exit;
- }
-
- if (request)
- recode_delete_request(request);
- RETURN_TRUE;
-
-error_exit:
- if (request)
- recode_delete_request(request);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/rpc/CREDITS b/ext/rpc/CREDITS
deleted file mode 100644
index f49489bcf8..0000000000
--- a/ext/rpc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Java
-Sam Ruby
diff --git a/ext/rpc/EXPERIMENTAL b/ext/rpc/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/rpc/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/rpc/RPC_HOWTO b/ext/rpc/RPC_HOWTO
deleted file mode 100644
index 9b6e92b7c6..0000000000
--- a/ext/rpc/RPC_HOWTO
+++ /dev/null
@@ -1,97 +0,0 @@
-what's this ?
-=============
-
-This is an abstraction layer that eases the task of writing rpc
-extensions (e.g. java, com, corba, soap, srm, .net, xml-rpc, ..).
-it maps the quite complex ZendEngine2 oo api to a few simpler to
-handle callback functions declared in the 'rpc_object_handlers'
-struct.
-
-so what happens behind my back ?
-================================
-
-- the abstraction layer takes care of your underlaying data structure
-and passes it to you each time you have to handle an operation.
-- it does reference counting and tells you when you have to destruct
-your underlaying data structure.
-- it registers a class and four functions (xxx_load, xxx_call, xxx_get,
-xxx_set) for your rpc layer and checks if the parameters are valid (beside
-the ones that are optional for your rpc layer).
-- it silently creates proxies for references to members of your rpc
-objects.
-- it optionally does object pooling for objects that support it (has to
-be defined in the constructor)
-- it optionally requests hash values for method and property names and
-caches them. call / get and set requests will then receive the hash value
-instead of the original function- / propertyname.
-
-how can i make use of it ?
-==========================
-
-take ext/rpc/com/com.c as a starting point. you'll have to set up the following struct:
-
-typedef struct _rpc_object_handlers {
- int (*rpc_hash)(char *name, zend_uint name_len, char **hash, zend_uint *hash_len, int type);
- int hash_type;
- int (*rpc_ctor)(char *class_name, zend_uint class_name_len, void **data, INTERNAL_FUNCTION_PARAMETERS);
- int (*rpc_dtor)(void **data);
- int (*rpc_call)(char *method_name, zend_uint method_name_len, void **data, INTERNAL_FUNCTION_PARAMETERS);
- int (*rpc_get)(char *property_name, zend_uint property_name_len, zval *return_value, void **data);
- int (*rpc_set)(char *property_name, zend_uint property_name_len, zval *value, zval *return_value, void **data);
- int (*rpc_compare)(void **data1, void **data2);
- int (*rpc_get_classname)(char **class_name, zend_uint *class_name_length, void **data);
- int (*rpc_has_property)(char *property_name, zend_uint property_name_length, void **data);
- int (*rpc_unset_property)(char *property_name, zend_uint property_name_length, void **data);
- int (*rpc_get_properties)(HashTable **properties, void **data);
-} rpc_object_handlers;
-
-
-rpc_hash:
-the hashing function for method and property names. returns a hash value
-for the string passed in 'name'. 'type' is either METHOD or PROPERTY.
-if you set 'hash_type' to HASH_AS_INT you can set '*hash' to NULL and pass
-the hash value as 'hash_len'.
-rpc_hash can be set to NULL if hashing of method and property names is not
-appreciated.
-
-hash_type:
-either HASH_AS_INT, HASH_AS_STRING or DONT_HASH
-
-rpc_ctor:
-the constructor
-
-rpc_dtor:
-the destructor
-
-rpc_call:
-the call handler
-
-rpc_get:
-the get handler
-
-rpc_set:
-the set handler
-
-rpc_compare:
-the compare handler.
-rpc_compare can be set to NULL then objects will be treated the same if they
-belong to the same rpc layer.
-
-rpc_get_classname:
-returns the classname.
-rpc_get_classname can be set to NULL then the name of the rpc layer will be
-used as classname.
-
-rpc_has_property:
-check if a property exists.
-rpc_has_property can be set to NULL then true will be returned for every request.
-
-rpc_unset_property:
-unset a property.
-rpc_unset_property can be set to NULL, a 'not supported' warning will then be
-issued.
-
-rpc_get_properties:
-returns a HashTable with all the properties.
-rpc_get_properties can be set to NULL, then a list of the explicit declared
-properties will be returned.
diff --git a/ext/rpc/com/CREDITS b/ext/rpc/com/CREDITS
deleted file mode 100644
index 27bb7a0b21..0000000000
--- a/ext/rpc/com/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Win32 COM
-Zeev Suraski, Harald Radi, Alan Brown \ No newline at end of file
diff --git a/ext/rpc/com/TODO b/ext/rpc/com/TODO
deleted file mode 100644
index 05ac41167a..0000000000
--- a/ext/rpc/com/TODO
+++ /dev/null
@@ -1,28 +0,0 @@
-1) Multi-dimenstional array support
-4) Documentation (internal and user) and howtos
-5) IEnumVariant::All() which would be like IEnumVariant::Next(IDispatch::Count)
-7) Test component (goes with the docs)
-8) Test suite (Needs test component)
-10) lets try if we are able to call non IDispatch - only Typelib components
-
--- delayed till PHP5: 3) WithEvents
--- delayed till PHP5: 9) reduce the need for VARIANT()
-
-ad 6.) check vbsample.php (new VARIANT(*, *|VT_BYREF)) GPs
-
--- done 2) IErrorInfo
--- done 6) Look for memory leaks and AdRef/Release problems - I KNOW there are some...
--- done 11) IEnumVariant::Next() without parameter should only return an object, not an array with one element
--- done 12) VARIANT->value as lvalue
--- done 13) export VARIANT through the COM module
--- done 14) trap exceptions and errors
-
--- donne ad 4.) faq (i've collected a few questions from various lists)
- variant attributes !!
-
-to be discussed:
-
-- mts support (getcontext)
-- adsi support (ads* functions)
-
--- delayed till PHP 5: try serialisation support (if component implements IPersist)
diff --git a/ext/rpc/com/com.c b/ext/rpc/com/com.c
deleted file mode 100644
index 11f4d4930b..0000000000
--- a/ext/rpc/com/com.c
+++ /dev/null
@@ -1,115 +0,0 @@
-#include "com.h"
-
-/* protos */
-static int com_hash(char *, zend_uint, char **, zend_uint *, int, char *, int);
-static int com_ctor(char *, zend_uint, void **, int , zval ***);
-static int com_dtor(void **);
-static int com_call(char *, zend_uint, void **, zval **, int, zval ***);
-static int com_get(char *, zend_uint, zval *, void **);
-static int com_set(char *, zend_uint, zval *, void **);
-static int com_compare(void **, void **);
-static int com_get_classname(char **, zend_uint *, void **);
-static int com_has_property(char *, zend_uint, void **);
-static int com_unset_property(char *, zend_uint, void **);
-static int com_get_properties(HashTable **, void **);
-
-
-/* register rpc callback function */
-RPC_REGISTER_HANDLERS_START(com)
-POOL,
-HASH_AS_INT_WITH_SIGNATURE,
-com_hash,
-com_ctor,
-com_dtor,
-com_call,
-com_get,
-com_set,
-com_compare,
-com_get_classname,
-com_has_property,
-com_unset_property,
-com_get_properties
-RPC_REGISTER_HANDLERS_END()
-
-/* register userspace functions */
-RPC_FUNCTION_ENTRY_START(com)
- ZEND_FALIAS(com_invoke, rpc_call, NULL)
- ZEND_FE(com_addref, NULL)
-RPC_FUNCTION_ENTRY_END()
-
-/* register class methods */
-RPC_METHOD_ENTRY_START(com)
- ZEND_FALIAS(addref, com_addref, NULL)
-RPC_METHOD_ENTRY_END()
-
-/* init function that is called before the class is registered
- * so you can do any tricky stuff in here
- */
-RPC_INIT_FUNCTION(com)
-{
-}
-
-/* rpc handler functions */
-
-static int com_hash(char *name, zend_uint name_len, char **hash, zend_uint *hash_len, int num_args, char *arg_types, int type)
-{
- *hash = strdup(name);
- *hash_len = name_len;
-
- return SUCCESS;
-}
-
-static int com_ctor(char *class_name, zend_uint class_name_len, void **data, int num_args, zval **args[])
-{
- return SUCCESS;
-}
-
-static int com_dtor(void **data)
-{
- return SUCCESS;
-}
-
-static int com_call(char *method_name, zend_uint method_name_len, void **data, zval **return_value, int num_args, zval **args[])
-{
- return SUCCESS;
-}
-
-static int com_get(char *property_name, zend_uint property_name_len, zval *return_value, void **data)
-{
- return SUCCESS;
-}
-
-static int com_set(char *property_name, zend_uint property_name_len, zval *value, void **data)
-{
- return SUCCESS;
-}
-
-static int com_compare(void **data1, void **data2)
-{
- return SUCCESS;
-}
-
-static int com_get_classname(char **class_name, zend_uint *class_name_length, void **data)
-{
- return SUCCESS;
-}
-
-static int com_has_property(char *property_name, zend_uint property_name_length, void **data)
-{
- return SUCCESS;
-}
-
-static int com_unset_property(char *property_name, zend_uint property_name_length, void **data)
-{
- return SUCCESS;
-}
-
-static int com_get_properties(HashTable **properties, void **data)
-{
- return SUCCESS;
-}
-
-/* custom functions */
-ZEND_FUNCTION(com_addref)
-{
-} \ No newline at end of file
diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c
deleted file mode 100644
index 288a03ac32..0000000000
--- a/ext/rpc/com/com_wrapper.c
+++ /dev/null
@@ -1,2341 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- | Harald Radi <h.radi@nme.at> |
- | Alan Brown <abrown@pobox.com> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-/*
- * This module implements support for COM components that support the IDispatch
- * interface. Both local (COM) and remote (DCOM) components can be accessed.
- *
- * Type libraries can be loaded (in order for PHP to recognize automation constants)
- * by specifying a typelib_file in the PHP .ini file. That file should contain
- * paths to type libraries, one in every line. By default, constants are registered
- * as case-sensitive. If you want them to be defined as case-insensitive, add
- * #case_insensitive or #cis at the end of the type library path.
- *
- * This is also the first module to demonstrate Zend's OO syntax overloading
- * capabilities. CORBA coders are invited to write a CORBA module as well!
- *
- * Zeev
- */
-
-/*
- * 28.12.2000
- * unicode conversion fixed by Harald Radi <h.radi@nme.at>
- *
- * now all these strange '?'s should be disapeared
- */
-
-/*
- * 28.1.2001
- * VARIANT datatype and pass_by_reference support
- */
-
-/*
- * 03.6.2001
- * Enhanced Typelib support to include a search by name
- */
-
-#ifdef PHP_WIN32
-
-#define _WIN32_DCOM
-
-#include <iostream.h>
-#include <math.h>
-#include <ocidl.h>
-
-#include "php.h"
-#include "php_ini.h"
-
-#include "php_COM.h"
-#include "php_VARIANT.h"
-
-static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC);
-static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC);
-static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC);
-static void php_register_COM_class(TSRMLS_D);
-static void php_COM_init(int module_number TSRMLS_DC);
-static char *php_string_from_clsid(const CLSID *clsid TSRMLS_DC);
-static int com_enable_events(comval *obj, int enable);
-
-static int le_comval;
-static int codepage;
-
-#ifdef _DEBUG
-int resourcecounter = 1;
-#endif
-
-static unsigned char arg1and2_force_ref[] =
- { 2, BYREF_FORCE, BYREF_FORCE };
-
-function_entry COM_functions[] = {
- PHP_FE(com_load, NULL)
- PHP_FE(com_invoke, NULL)
- PHP_FE(com_addref, NULL)
- PHP_FE(com_release, NULL)
- PHP_FE(com_propget, NULL)
- PHP_FE(com_propput, NULL)
- PHP_FE(com_load_typelib, NULL)
- PHP_FE(com_isenum, NULL)
- PHP_FE(com_event_sink, arg1and2_force_ref)
- PHP_FE(com_message_pump, NULL)
- PHP_FE(com_print_typeinfo, NULL)
-
- PHP_FALIAS(com_get, com_propget, NULL)
- PHP_FALIAS(com_propset, com_propput, NULL)
- PHP_FALIAS(com_set, com_propput, NULL)
-
- { NULL, NULL, NULL }
-};
-
-
-static PHP_MINFO_FUNCTION(COM)
-{
- DISPLAY_INI_ENTRIES();
-}
-
-
-PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, char **ErrString TSRMLS_DC)
-{
- HRESULT hr;
- int failed = FALSE;
- unsigned int ArgErr;
- EXCEPINFO ExceptInfo;
-
- *ErrString = NULL;
- /* @todo use DispInvoke here ? */
- if (C_ISREFD(obj)) {
- if (C_HASTLIB(obj)) {
- hr = C_TYPEINFO_VT(obj)->Invoke(C_TYPEINFO(obj), C_DISPATCH(obj), dispIdMember, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr);
- if (FAILED(hr)) {
- hr = C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr);
- if (SUCCEEDED(hr)) {
- /*
- * ITypLib doesn't work
- * Release ITypeLib and fall back to IDispatch
- */
-
- C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj));
- C_HASTLIB(obj) = FALSE;
- }
- }
- } else {
- hr = C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr);
- }
-
- if (FAILED(hr)) {
- switch (hr) {
- case DISP_E_EXCEPTION: {
-
- char *src=estrdup("Unavailable");
- int srclen=strlen(src);
- char *desc=estrdup("Unavailable");
- int desclen=strlen(desc);
-
- if (ExceptInfo.bstrSource)
- {
- efree(src);
- src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
- SysFreeString(ExceptInfo.bstrSource);
- }
- if (ExceptInfo.bstrDescription)
- {
- efree(desc);
- desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
- SysFreeString(ExceptInfo.bstrDescription);
- }
-
- *ErrString = pemalloc(srclen+desclen+50, 1);
- sprintf(*ErrString, "<b>Source</b>: %s <b>Description</b>: %s", src, desc);
- efree(src);
- efree(desc);
-
- if (ExceptInfo.bstrHelpFile)
- {
- SysFreeString(ExceptInfo.bstrHelpFile);
- }
- }
- break;
- case DISP_E_PARAMNOTFOUND:
- case DISP_E_TYPEMISMATCH:
- *ErrString = pemalloc(25, 1);
- sprintf(*ErrString, "<b>Argument</b>: %d", pDispParams->cArgs-ArgErr+1);
- break;
- }
- }
-
- if (pVarResult && (V_VT(pVarResult) == VT_EMPTY)) {
- V_VT(pVarResult) = VT_I4;
- V_I4(pVarResult) = hr;
- }
-
- return hr;
- } else {
- return DISP_E_UNKNOWNINTERFACE;
- }
-}
-
-
-PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId TSRMLS_DC)
-{
- HRESULT hr;
-
- if (C_ISREFD(obj)) {
- if (C_HASTLIB(obj)) {
- hr = C_TYPEINFO_VT(obj)->GetIDsOfNames(C_TYPEINFO(obj), rgszNames, 1, rgDispId);
-
- if (FAILED(hr)) {
- hr = C_DISPATCH_VT(obj)->GetIDsOfNames(C_DISPATCH(obj), &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
-
- if (SUCCEEDED(hr)) {
- /*
- * ITypLib doesn't work
- * Release ITypeLib and fall back to IDispatch
- */
-
- C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj));
- C_HASTLIB(obj) = FALSE;
- }
- }
- } else {
- hr = C_DISPATCH_VT(obj)->GetIDsOfNames(C_DISPATCH(obj), &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
- }
-
- return hr;
- } else {
- return DISP_E_UNKNOWNINTERFACE;
- }
-}
-
-
-PHPAPI HRESULT php_COM_release(comval *obj TSRMLS_DC)
-{
- HRESULT hr;
-
- if (obj->refcount > 1) {
- C_RELEASE(obj);
- } else if (obj->refcount == 1) {
- if (C_HASTLIB(obj)) {
- C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj));
- }
- if (C_HASENUM(obj)) {
- hr = C_ENUMVARIANT_VT(obj)->Release(C_ENUMVARIANT(obj));
- }
- hr = C_DISPATCH_VT(obj)->Release(C_DISPATCH(obj));
- C_RELEASE(obj);
- }
-
- return obj->refcount;
-}
-
-
-PHPAPI HRESULT php_COM_addref(comval *obj TSRMLS_DC)
-{
- if (C_ISREFD(obj)) {
- C_ADDREF(obj);
- }
-
- return obj->refcount;
-}
-
-
-PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup TSRMLS_DC)
-{
- HRESULT hr = 1;
- DISPPARAMS dispparams;
- VARIANT *var_result;
- IDispatch FAR* pDisp;
-
- pDisp = *ppDisp;
- if (cleanup) {
- *ppDisp = NULL;
- }
-
- C_REFCOUNT(obj) = 1;
- C_DISPATCH(obj) = pDisp;
- C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj)));
-
- dispparams.rgvarg = NULL;
- dispparams.rgdispidNamedArgs = NULL;
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
-
- ALLOC_VARIANT(var_result);
-
- if (C_HASENUM(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), DISPID_NEWENUM, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
- DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dispparams, var_result, NULL, NULL))) {
- if (V_VT(var_result) == VT_UNKNOWN) {
- C_HASENUM(obj) = SUCCEEDED(V_UNKNOWN(var_result)->lpVtbl->QueryInterface(V_UNKNOWN(var_result), &IID_IEnumVARIANT,
- (void**)&C_ENUMVARIANT(obj)));
- } else if (V_VT(var_result) == VT_DISPATCH) {
- C_HASENUM(obj) = SUCCEEDED(V_DISPATCH(var_result)->lpVtbl->QueryInterface(V_DISPATCH(var_result), &IID_IEnumVARIANT,
- (void**)&C_ENUMVARIANT(obj)));
- }
- }
-
- FREE_VARIANT(var_result);
-
- if (!cleanup) {
- hr = C_DISPATCH_VT(obj)->AddRef(C_DISPATCH(obj));
- }
-
-#ifdef _DEBUG
- obj->resourceindex = resourcecounter++;
-#endif
-
- return hr;
-}
-
-
-PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup TSRMLS_DC)
-{
- HRESULT hr;
-
- C_HASTLIB(obj) = C_HASTLIB(clone);
- C_HASENUM(obj) = C_HASENUM(obj);
- C_DISPATCH(obj) = C_DISPATCH(clone);
- C_TYPEINFO(obj) = C_TYPEINFO(clone);
-
- if (cleanup || !C_ISREFD(obj)) {
- obj->refcount = clone->refcount;
- clone->refcount = 0;
- } else {
- if (C_HASTLIB(obj)) {
- C_TYPEINFO_VT(obj)->AddRef(C_TYPEINFO(obj));
- }
- if (C_HASENUM(obj)) {
- C_ENUMVARIANT_VT(obj)->AddRef(C_ENUMVARIANT(obj));
- }
- hr = C_DISPATCH_VT(obj)->AddRef(C_DISPATCH(obj));
- obj->refcount = 1;
- }
-
-#ifdef _DEBUG
- obj->resourceindex = resourcecounter++;
-#endif
-
- return hr;
-}
-
-
-PHPAPI char *php_COM_error_message(HRESULT hr TSRMLS_DC)
-{
- void *pMsgBuf;
-
- if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
- hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &pMsgBuf, 0, NULL)) {
- char error_string[] = "No description available";
-
- pMsgBuf = LocalAlloc(LMEM_FIXED, sizeof(error_string));
- memcpy(pMsgBuf, error_string, sizeof(error_string));
- }
-
- return pMsgBuf;
-}
-
-
-static char *php_string_from_clsid(const CLSID *clsid TSRMLS_DC)
-{
- LPOLESTR ole_clsid;
- char *clsid_str;
-
- StringFromCLSID(clsid, &ole_clsid);
- clsid_str = php_OLECHAR_to_char(ole_clsid, NULL, codepage TSRMLS_CC);
- LocalFree(ole_clsid);
-
- return clsid_str;
-}
-
-
-PHPAPI HRESULT php_COM_destruct(comval *obj TSRMLS_DC)
-{
- HRESULT hr = S_OK;
-
- com_enable_events(obj, FALSE);
- if (obj->sinkdispatch)
- obj->sinkdispatch->lpVtbl->Release(obj->sinkdispatch);
-
- if (C_ISREFD(obj)) {
- C_REFCOUNT(obj) = 1;
- hr = php_COM_release(obj TSRMLS_CC);
- }
- efree(obj);
-
- return hr;
-}
-
-
-static void php_comval_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_COM_destruct(rsrc->ptr TSRMLS_CC);
-}
-
-
-static PHP_INI_MH(OnTypelibFileChange)
-{
- FILE *typelib_file;
- char *typelib_name_buffer;
- char *strtok_buf = NULL;
- int interactive;
- interactive = CG(interactive);
-
- if (!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) {
- return FAILURE;
- }
-
- if (interactive) {
- printf("Loading type libraries...");
- fflush(stdout);
- }
-
- typelib_name_buffer = (char *) emalloc(sizeof(char)*1024);
-
- while (fgets(typelib_name_buffer, 1024, typelib_file)) {
- ITypeLib *pTL;
- char *typelib_name;
- char *modifier, *ptr;
- int mode = CONST_CS | CONST_PERSISTENT; /* CONST_PERSISTENT is ok here */
-
- if (typelib_name_buffer[0]==';') {
- continue;
- }
- typelib_name = php_strtok_r(typelib_name_buffer, "\r\n", &strtok_buf); /* get rid of newlines */
- if (typelib_name == NULL) {
- continue;
- }
- typelib_name = php_strtok_r(typelib_name, "#", &strtok_buf);
- modifier = php_strtok_r(NULL, "#", &strtok_buf);
- if (modifier != NULL) {
- if (!strcmp(modifier, "cis") || !strcmp(modifier, "case_insensitive")) {
- mode &= ~CONST_CS;
- }
- }
-
- /* Remove leading/training white spaces on search_string */
- while (isspace(*typelib_name)) {/* Ends on '\0' in worst case */
- typelib_name ++;
- }
- ptr = typelib_name + strlen(typelib_name) - 1;
- while ((ptr != typelib_name) && isspace(*ptr)) {
- *ptr = '\0';
- ptr--;
- }
-
- if (interactive) {
- printf("\rLoading %-60s\r", typelib_name);
- }
-
- if ((pTL = php_COM_find_typelib(typelib_name, mode TSRMLS_CC)) != NULL) {
- php_COM_load_typelib(pTL, mode TSRMLS_CC);
- pTL->lpVtbl->Release(pTL);
- }
- }
-
- efree(typelib_name_buffer);
- fclose(typelib_file);
-
- if (interactive) {
- printf("\r%70s\r", "");
- }
-
- return SUCCESS;
-}
-
-
-PHP_INI_BEGIN()
-PHP_INI_ENTRY_EX("com.allow_dcom", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY_EX("com.autoregister_typelib", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY_EX("com.autoregister_verbose", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY_EX("com.autoregister_casesensitive", "1", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb)
-PHP_INI_ENTRY("com.typelib_file", "", PHP_INI_SYSTEM, OnTypelibFileChange)
-PHP_INI_END()
-
-
-/* {{{ proto int com_load(string module_name [, string remote_host [, int codepage [, string typelib]]])
- Loads a COM module */
-PHP_FUNCTION(com_load)
-{
- pval *module_name, *code_page, *typelib = NULL, *server_name = NULL, *user_name=NULL, *password=NULL, *domain=NULL;
- CLSID clsid;
- HRESULT hr;
- OLECHAR *ProgID;
- comval *obj;
- char *error_message;
- char *clsid_str;
- int mode = 0;
- ITypeLib *pTL;
- CLSCTX flags = CLSCTX_SERVER;
-
- codepage = CP_ACP;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- zend_get_parameters(ht, 1, &module_name);
- break;
-
- case 2:
- zend_get_parameters(ht, 2, &module_name, &server_name);
- break;
-
- case 3:
- zend_get_parameters(ht, 3, &module_name, &server_name, &code_page);
-
- convert_to_long_ex(&code_page);
- codepage = Z_LVAL_P(code_page);
- break;
-
- case 4:
- zend_get_parameters(ht, 4, &module_name, &server_name, &code_page, &typelib);
-
- convert_to_string_ex(&typelib);
- convert_to_long_ex(&code_page);
- codepage = Z_LVAL_P(code_page);
-
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (server_name != NULL) {
- /* What is server name? A String or an array? */
-
- if (Z_TYPE_P(server_name) == IS_NULL) {
- server_name = NULL;
- } else if (Z_TYPE_P(server_name) == IS_ARRAY) {
- pval **tmp;
- /* DAB: 22 Sept 2001
- * Aha - we have a number of possible arguments.
- * They are in the hash By name: Server, Domain, Username, Password
- * Flags.
- * This has been crafted to maintian maximum backward compatability.
- * If the server name is specified as a string, then the function
- * should behave as before by defaulting username and password and
- * using the (I believe) incorrect CLSCTX_SERVER instantiation
- * paramter. However if server is specified in this array then we
- * use either CLSCTX_REMOTE_SERVER or whatever flags are specified
- * in the array */
- HashTable *ht = Z_ARRVAL(*server_name);
- if (FAILURE == zend_hash_find(ht, "Server", 7, (void **) &tmp)) {
- server_name = NULL;
- } else {
- server_name = *tmp;
- convert_to_string_ex(&server_name);
- /* CLSCTX_SERVER includes INPROC and LOCAL SERVER. This means
- * that any local server will be instantiated BEFORE even
- * looking on a remote server. Thus if we have a server name,
- * probably we want to access a remote machine or we would not
- * have bothered specifying it. So it would be wrong to to
- * connect locally. Futher, unless the name passed is a GUID,
- * there has to be something to map the Prog.Id to GUID and
- * unless that has been modified to remove the information
- * about local instantiation CLSCTX_SERVER would force a local
- * instantiation This setting can be overridden below if the
- * user specifies a flags element */
- flags = CLSCTX_REMOTE_SERVER;
- }
- if (FAILURE == zend_hash_find(ht, "Username", 9, (void **) &tmp)) {
- user_name = NULL;
- } else {
- user_name = *tmp;
- convert_to_string_ex(&user_name);
- }
- if (FAILURE == zend_hash_find(ht, "Domain", 7, (void **) &tmp)) {
- domain = NULL;
- } else {
- domain = *tmp;
- convert_to_string_ex(&domain);
- }
- if (FAILURE == zend_hash_find(ht, "Password", 9, (void **) &tmp)) {
- password=NULL;
- } else {
- password = *tmp;
- convert_to_string_ex(&password);
- }
- if (SUCCESS == zend_hash_find(ht, "Flags", 6, (void **) &tmp)) {
- convert_to_long_ex(tmp);
- flags = (CLSCTX) Z_LVAL_PP(tmp);
- }
- } else {
- if (!INI_INT("com.allow_dcom")) {
- php_error(E_WARNING, "DCOM is disabled");
- RETURN_NULL();
- } else {
- flags = CLSCTX_REMOTE_SERVER;
- convert_to_string_ex(&server_name);
- }
- }
- }
-
- ALLOC_COM(obj);
- convert_to_string_ex(&module_name);
- ProgID = php_char_to_OLECHAR(Z_STRVAL_P(module_name), Z_STRLEN_P(module_name), codepage TSRMLS_CC);
-
- /* obtain CLSID */
- if (FAILED(CLSIDFromString(ProgID, &clsid))) {
- /* Perhaps this is a Moniker? */
- IBindCtx *pBindCtx;
- IMoniker *pMoniker;
- ULONG ulEaten;
-
- /* @todo if (server_name) */
-
- if (!server_name) {
- /* @todo shouldn't the bind context be fetched on module startup and kept as a global shared instance ?
- * all calls to BindToObject would deliver the same instance then (as desired)
- * IBindCtx::RegisterObjectBound() should be called then after mkparsedisplayname()
- *
- * @todo use mkparsedisplaynameex() ?
- */
- if (SUCCEEDED(hr = CreateBindCtx(0, &pBindCtx))) {
- if (SUCCEEDED(hr = MkParseDisplayName(pBindCtx, ProgID, &ulEaten, &pMoniker))) {
- hr = pMoniker->lpVtbl->BindToObject(pMoniker, pBindCtx, NULL, &IID_IDispatch, (LPVOID *) &C_DISPATCH(obj));
- pMoniker->lpVtbl->Release(pMoniker);
- }
- pBindCtx->lpVtbl->Release(pBindCtx);
- }
- } else {
- hr = MK_E_SYNTAX;
- }
-
- efree(ProgID);
-
- if (FAILED(hr)) {
- php_COM_destruct(obj TSRMLS_CC);
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Invalid ProgID, GUID string, or Moniker: %s", error_message);
- LocalFree(error_message);
- RETURN_NULL();
- }
- } else {
- efree(ProgID);
- /* obtain IDispatch */
- if (!server_name) {
- hr = CoCreateInstance(&clsid, NULL, flags, &IID_IDispatch, (LPVOID *) &C_DISPATCH(obj));
- } else {
- COSERVERINFO server_info;
- MULTI_QI pResults;
- COAUTHIDENTITY authid;
- COAUTHINFO authinfo = {RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, &authid, EOAC_NONE};
-
- server_info.dwReserved1=0;
- server_info.dwReserved2=0;
- server_info.pwszName = php_char_to_OLECHAR(Z_STRVAL_P(server_name), Z_STRLEN_P(server_name), codepage TSRMLS_CC);
- if (user_name) {
- /* Z_STRVAL_P(user_name); */
- /* Parse Username into domain\username */
- authid.User = (WCHAR *) Z_STRVAL_P(user_name);
- authid.UserLength = Z_STRLEN_P(user_name);
- if (password) {
- authid.Password = (USHORT *) Z_STRVAL_P(password);
- authid.PasswordLength = Z_STRLEN_P(password);
- } else {
- authid.Password = (USHORT *) "";
- authid.PasswordLength = 0;
- }
- if (domain) {
- authid.Domain = (USHORT *) Z_STRVAL_P(domain);
- authid.DomainLength = Z_STRLEN_P(domain);
- } else {
- authid.Domain = (USHORT *) "";
- authid.DomainLength = 0;
- }
- authid.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
-
- server_info.pAuthInfo=&authinfo;
- } else {
- server_info.pAuthInfo=NULL;
- }
-
- pResults.pIID = &IID_IDispatch;
- pResults.pItf = NULL;
- pResults.hr = S_OK;
- hr=CoCreateInstanceEx(&clsid, NULL, flags, &server_info, 1, &pResults);
- if (SUCCEEDED(hr)) {
- hr = pResults.hr;
- C_DISPATCH(obj) = (IDispatch *) pResults.pItf;
- }
- efree(server_info.pwszName);
- }
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- clsid_str = php_string_from_clsid(&clsid TSRMLS_CC);
- php_error(E_WARNING,"Unable to obtain IDispatch interface for CLSID %s: %s",clsid_str,error_message);
- LocalFree(error_message);
- efree(clsid_str);
- php_COM_destruct(obj TSRMLS_CC);
- RETURN_NULL();
- }
- }
-
- php_COM_set(obj, &C_DISPATCH(obj), TRUE TSRMLS_CC);
-
- if (INI_INT("com.autoregister_casesensitive")) {
- mode |= CONST_CS;
- }
-
- if (C_HASTLIB(obj)) {
- if (INI_INT("com.autoregister_typelib")) {
- unsigned int idx;
-
- /* @todo check if typlib isn't already loaded */
- if (C_TYPEINFO_VT(obj)->GetContainingTypeLib(C_TYPEINFO(obj), &pTL, &idx) == S_OK) {
- php_COM_load_typelib(pTL, mode TSRMLS_CC);
- pTL->lpVtbl->Release(pTL);
- }
- }
- } else {
- if (typelib != NULL) {
- ITypeLib *pTL;
-
- if ((pTL = php_COM_find_typelib(Z_STRVAL_P(typelib), mode TSRMLS_CC)) != NULL) {
- C_HASTLIB(obj) = SUCCEEDED(pTL->lpVtbl->GetTypeInfo(pTL, 0, &C_TYPEINFO(obj)));
- /* idx 0 should deliver the ITypeInfo for the IDispatch Interface */
- if (INI_INT("com.autoregister_typelib")) {
- php_COM_load_typelib(pTL, mode TSRMLS_CC);
- }
- pTL->lpVtbl->Release(pTL);
- }
- }
- }
-
- RETURN_RESOURCE(zend_list_insert(obj, IS_COM));
-}
-/* }}} */
-
-
-int do_COM_invoke(comval *obj, pval *function_name, VARIANT *var_result, pval **arguments, int arg_count TSRMLS_DC)
-{
- DISPID dispid;
- DISPPARAMS dispparams;
- HRESULT hr;
- OLECHAR *funcname;
- SAFEARRAY *pSA;
- SAFEARRAYBOUND rgsabound[1];
- VARIANT *variant_args;
- char *error_message;
- int current_arg, current_variant;
- unsigned long count;
-
- if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "next")) {
- /* Grab one argument off the stack, allocate enough
- * VARIANTs
- * Get the IEnumVariant interface and call ->Next();
- */
-
- switch (arg_count) {
- case 0:
- count = 1;
- break;
-
- case 1:
- convert_to_long_ex(&arguments[0]);
- count = Z_LVAL_P(arguments[0]);
- break;
-
- default:
- php_error(E_WARNING,"Wrong argument count to IEnumVariant::Next()");
-
- return FAILURE;
- }
-
- rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = count;
-
- if ((pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound)) == NULL) {
- VariantInit(var_result);
- return FAILURE;
- } else {
- V_ARRAY(var_result) = pSA;
- V_VT(var_result) = VT_VARIANT|VT_ARRAY;
- }
-
- if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Next(C_ENUMVARIANT(obj), count, pSA->pvData, &count))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- VariantClear(var_result);
- return FAILURE;
- }
-
- if (count != rgsabound[0].cElements) {
- rgsabound[0].cElements = count;
- if (FAILED(SafeArrayRedim(pSA, rgsabound))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- VariantClear(var_result);
- return FAILURE;
- }
- }
-
- /* return a single element if next() was called without count */
- if ((arg_count == 0) && (count == 1)) {
- long index[] = {0};
-
- SafeArrayGetElement(pSA, index, var_result);
- SafeArrayDestroy(pSA);
- }
-
- return SUCCESS;
- } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "all")) {
-#define FETCH_BLOCKSIZE 10 /* fetch blocks of 10 elements */
-
- count = FETCH_BLOCKSIZE;
-
- rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = count;
-
- if ((pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound)) == NULL) {
- VariantInit(var_result);
- return FAILURE;
- } else {
- V_ARRAY(var_result) = pSA;
- V_VT(var_result) = VT_VARIANT|VT_ARRAY;
- }
-
- /* blah*/
-
-
- } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "reset")) {
- if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Reset(C_ENUMVARIANT(obj)))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- return FAILURE;
- }
- return SUCCESS;
- } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "skip")) {
- unsigned long count;
-
- switch (arg_count) {
- case 0:
- count = 1;
- break;
-
- case 1:
- convert_to_long_ex(&arguments[0]);
- count = Z_LVAL_P(arguments[0]);
- break;
-
- default:
- php_error(E_WARNING,"Wrong argument count to IEnumVariant::Skip()");
- return FAILURE;
- }
- if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Skip(C_ENUMVARIANT(obj), count))) {
- char *error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message);
- efree(error_message);
- return FAILURE;
- }
- return SUCCESS;
-
- } else {
- char *ErrString;
-
- funcname = php_char_to_OLECHAR(Z_STRVAL_P(function_name), Z_STRLEN_P(function_name), codepage TSRMLS_CC);
-
- hr = php_COM_get_ids_of_names(obj, &funcname, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(function_name), error_message);
- LocalFree(error_message);
- efree(funcname);
- return FAILURE;
- }
-
- variant_args = (VARIANT *) emalloc(sizeof(VARIANT) * arg_count);
-
- for (current_arg=0; current_arg<arg_count; current_arg++) {
- current_variant = arg_count - current_arg - 1;
- php_pval_to_variant(arguments[current_arg], &variant_args[current_variant], codepage TSRMLS_CC);
- }
-
- dispparams.rgvarg = variant_args;
- dispparams.rgdispidNamedArgs = NULL;
- dispparams.cArgs = arg_count;
- dispparams.cNamedArgs = 0;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC);
-
- efree(funcname);
- for (current_arg=0;current_arg<arg_count;current_arg++) {
- /* don't release IDispatch pointers as they are used afterwards */
- if (V_VT(&variant_args[current_arg]) != VT_DISPATCH) {
- /* @todo review this: what happens to an array of IDispatchs or a VARIANT->IDispatch */
- VariantClear(&variant_args[current_arg]);
- }
- }
- efree(variant_args);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- if (ErrString) {
- php_error(E_WARNING,"Invoke() failed: %s %s", error_message, ErrString);
- pefree(ErrString, 1);
- } else {
- php_error(E_WARNING,"Invoke() failed: %s", error_message);
- }
- LocalFree(error_message);
- return FAILURE;
- }
- }
- return SUCCESS;
-}
-
-
-/* {{{ proto mixed com_invoke(int module, string handler_name [, mixed arg [, mixed ...]])
- Invokes a COM module */
-PHP_FUNCTION(com_invoke)
-{
- pval **arguments;
- pval *object, *function_name;
- comval *obj;
- int type;
- int arg_count = ZEND_NUM_ARGS();
- VARIANT *var_result;
-
- if (arg_count<2) {
- ZEND_WRONG_PARAM_COUNT();
- }
- arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
- if (zend_get_parameters_array(ht, arg_count, arguments) == FAILURE) {
- RETURN_NULL();
- }
-
- object = arguments[0];
- function_name = arguments[1];
-
- /* obtain IDispatch interface */
- convert_to_long(object);
- obj = (comval *)zend_list_find(Z_LVAL_P(object), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler", Z_STRVAL_P(function_name));
- RETURN_NULL();
- }
-
- /* obtain property/method handler */
- convert_to_string_ex(&function_name);
-
- ALLOC_VARIANT(var_result);
-
- if (do_COM_invoke(obj, function_name, var_result, arguments+2, arg_count-2 TSRMLS_CC)==FAILURE) {
- FREE_VARIANT(var_result);
- efree(arguments);
-
- RETURN_NULL();
- }
-
- RETVAL_VARIANT(var_result);
-
- efree(arguments);
-}
-/* }}} */
-
-
-/* {{{ proto mixed com_release(int module)
- Releases a COM object */
-PHP_FUNCTION(com_release)
-{
- pval *object;
- comval *obj;
- int type;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count != 1) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (zend_get_parameters(ht, 1, &object)==FAILURE) {
- RETURN_FALSE;
- }
-
- /* obtain IDispatch interface */
- convert_to_long_ex(&object);
- obj = (comval *)zend_list_find(Z_LVAL_P(object), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler");
- RETURN_FALSE;
- }
-
- RETURN_LONG(php_COM_release(obj TSRMLS_CC))
-}
-/* }}} */
-
-
-/* {{{ proto mixed com_addref(int module)
- Increases the reference counter on a COM object */
-PHP_FUNCTION(com_addref)
-{
- pval *object;
- comval *obj;
- int type;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count != 1) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (zend_get_parameters(ht, 1, &object)==FAILURE) {
- RETURN_FALSE;
- }
-
- /* obtain IDispatch interface */
- convert_to_long_ex(&object);
- obj = (comval *)zend_list_find(Z_LVAL_P(object), &type);
- if (!obj || (type != IS_COM))
- {
- php_error(E_WARNING,"%d is not a COM object handler");
- RETURN_FALSE;
- }
-
- RETURN_LONG(php_COM_addref(obj TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto bool com_message_pump([int timeoutms])
- Process COM messages, sleeping for up to timeoutms milliseconds */
-PHP_FUNCTION(com_message_pump)
-{
- long timeoutms = 0;
- MSG msg;
- DWORD result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &timeoutms) == FAILURE)
- RETURN_FALSE;
-
- result = MsgWaitForMultipleObjects(0, NULL, FALSE, timeoutms, QS_ALLINPUT);
-
- if (result == WAIT_OBJECT_0) {
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- /* we processed messages */
- RETVAL_TRUE;
- } else {
- /* we did not process messages (timed out) */
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-static int com_enable_events(comval *obj, int enable)
-{
- if (obj->sinkdispatch) {
- IConnectionPointContainer *cont;
- IConnectionPoint *point;
-
- if (SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IConnectionPointContainer, (void**)&cont))) {
-
- if (SUCCEEDED(cont->lpVtbl->FindConnectionPoint(cont, &obj->sinkid, &point))) {
-
- if (enable) {
- point->lpVtbl->Advise(point, (IUnknown*)obj->sinkdispatch, &obj->sinkcookie);
- } else {
- point->lpVtbl->Unadvise(point, obj->sinkcookie);
- }
- point->lpVtbl->Release(point);
- }
- cont->lpVtbl->Release(cont);
- }
- }
- return 0;
-}
-
-static const struct {
- VARTYPE vt;
- const char *name;
-} vt_names[] = {
- { VT_NULL, "VT_NULL" },
- { VT_EMPTY, "VT_EMPTY" },
- { VT_UI1, "VT_UI1" },
- { VT_I2, "VT_I2" },
- { VT_I4, "VT_I4" },
- { VT_R4, "VT_R4" },
- { VT_R8, "VT_R8" },
- { VT_BOOL, "VT_BOOL" },
- { VT_ERROR, "VT_ERROR" },
- { VT_CY, "VT_CY" },
- { VT_DATE, "VT_DATE" },
- { VT_BSTR, "VT_BSTR" },
- { VT_DECIMAL, "VT_DECIMAL" },
- { VT_UNKNOWN, "VT_UNKNOWN" },
- { VT_DISPATCH, "VT_DISPATCH" },
- { VT_VARIANT, "VT_VARIANT" },
- { VT_I1, "VT_I1" },
- { VT_UI2, "VT_UI2" },
- { VT_UI4, "VT_UI4" },
- { VT_INT, "VT_INT" },
- { VT_UINT, "VT_UINT" },
- { VT_ARRAY, "VT_ARRAY" },
- { VT_BYREF, "VT_BYREF" },
- { VT_VOID, "VT_VOID" },
- { VT_PTR, "VT_PTR" },
- { VT_HRESULT, "VT_HRESULT" },
- { 0, NULL }
-};
-
-static inline const char *vt_to_string(VARTYPE vt)
-{
- int i;
- for (i = 0; vt_names[i].name != NULL; i++) {
- if (vt_names[i].vt == vt)
- return vt_names[i].name;
- }
- return "?";
-}
-
-static int process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid TSRMLS_DC)
-{
- TYPEATTR *attr;
- FUNCDESC *func;
- int i;
- OLECHAR *olename;
- char *ansiname = NULL;
- unsigned int ansinamelen;
- int ret = 0;
-
- if (FAILED(typeinfo->lpVtbl->GetTypeAttr(typeinfo, &attr)))
- return 0;
-
- /* verify that it is suitable */
- if (id_to_name == NULL || attr->typekind == TKIND_DISPATCH) {
-
- if (guid)
- memcpy(guid, &attr->guid, sizeof(GUID));
-
- if (printdef) {
- char *guidstring;
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, MEMBERID_NIL, &olename, NULL, NULL, NULL);
- ansiname = php_OLECHAR_to_char(olename, &ansinamelen, codepage TSRMLS_CC);
- SysFreeString(olename);
-
- guidstring = php_string_from_clsid(&attr->guid TSRMLS_CC);
- php_printf("class %s { /* GUID=%s */\n", ansiname, guidstring);
- efree(guidstring);
-
- efree(ansiname);
- }
-
- if (id_to_name)
- zend_hash_init(id_to_name, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- /* So we've got the dispatch interface; lets list the event methods */
- for (i = 0; i < attr->cFuncs; i++) {
- zval *tmp;
- DISPID lastid = 0; /* for props */
- int isprop;
-
- if (FAILED(typeinfo->lpVtbl->GetFuncDesc(typeinfo, i, &func)))
- break;
-
- isprop = (func->invkind & DISPATCH_PROPERTYGET || func->invkind & DISPATCH_PROPERTYPUT);
-
- if (!isprop || lastid != func->memid) {
-
- lastid = func->memid;
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, &olename, NULL, NULL, NULL);
- ansiname = php_OLECHAR_to_char(olename, &ansinamelen, codepage TSRMLS_CC);
- SysFreeString(olename);
-
- if (printdef) {
- int j;
- char *funcdesc;
- unsigned int funcdesclen, cnames = 0;
- BSTR *names;
-
- names = (BSTR*)emalloc((func->cParams + 1) * sizeof(BSTR));
-
- typeinfo->lpVtbl->GetNames(typeinfo, func->memid, names, func->cParams + 1, &cnames);
- /* first element is the function name */
- SysFreeString(names[0]);
-
- php_printf("\t/* DISPID=%d */\n", func->memid);
-
- if (func->elemdescFunc.tdesc.vt != VT_VOID) {
- php_printf("\t/* %s [%d] */\n",
- vt_to_string(func->elemdescFunc.tdesc.vt),
- func->elemdescFunc.tdesc.vt
- );
- }
-
- if (isprop) {
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL);
- if (olename) {
- funcdesc = php_OLECHAR_to_char(olename, &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(olename);
- php_printf("\t/* %s */\n", funcdesc);
- efree(funcdesc);
- }
-
- php_printf("\tvar $%s;\n\n", ansiname);
-
- } else {
- /* a function */
-
- php_printf("\tfunction %s(\n", ansiname);
-
- for (j = 0; j < func->cParams; j++) {
- ELEMDESC *elem = &func->lprgelemdescParam[j];
-
- php_printf("\t\t/* %s [%d] ", vt_to_string(elem->tdesc.vt), elem->tdesc.vt);
-
- if (elem->paramdesc.wParamFlags & PARAMFLAG_FIN)
- php_printf("[in]");
- if (elem->paramdesc.wParamFlags & PARAMFLAG_FOUT)
- php_printf("[out]");
-
- if (elem->tdesc.vt == VT_PTR) {
- /* what does it point to ? */
- php_printf(" --> %s [%d] ",
- vt_to_string(elem->tdesc.lptdesc->vt),
- elem->tdesc.lptdesc->vt
- );
- }
-
- /* when we handle prop put and get, this will look nicer */
- if (j+1 < (int)cnames) {
- funcdesc = php_OLECHAR_to_char(names[j+1], &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(names[j+1]);
- } else {
- funcdesc = "???";
- }
-
- php_printf(" */ %s%s%c\n",
- elem->tdesc.vt == VT_PTR ? "&$" : "$",
- funcdesc,
- j == func->cParams - 1 ? ' ' : ','
- );
-
- if (j+1 < (int)cnames)
- efree(funcdesc);
- }
-
- php_printf("\t\t)\n\t{\n");
-
- typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL);
- if (olename) {
- funcdesc = php_OLECHAR_to_char(olename, &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(olename);
- php_printf("\t\t/* %s */\n", funcdesc);
- efree(funcdesc);
- }
-
- php_printf("\t}\n");
- }
-
- efree(names);
- }
-
- if (id_to_name) {
- zend_str_tolower(ansiname, ansinamelen);
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, ansiname, ansinamelen, 0);
- zend_hash_index_update(id_to_name, func->memid, (void*)&tmp, sizeof(zval *), NULL);
- }
- }
- typeinfo->lpVtbl->ReleaseFuncDesc(typeinfo, func);
-
- }
-
- if (printdef)
- php_printf("}\n");
-
- ret = 1;
- } else {
- zend_error(E_WARNING, "Thats not a dispatchable interface!! type kind = %08x\n", attr->typekind);
- }
-
- typeinfo->lpVtbl->ReleaseTypeAttr(typeinfo, attr);
-
- return ret;
-}
-
-static ITypeInfo *locate_typeinfo(char *typelibname, comval *obj, char *dispname, int sink TSRMLS_DC)
-{
- ITypeInfo *typeinfo = NULL;
- ITypeLib *typelib = NULL;
- int gotguid = 0;
- GUID iid;
-
- if (obj) {
- if (dispname == NULL && sink) {
- IProvideClassInfo2 *pci2;
- IProvideClassInfo *pci;
-
- if (SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IProvideClassInfo2, (void**)&pci2))) {
- gotguid = SUCCEEDED(pci2->lpVtbl->GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid));
- pci2->lpVtbl->Release(pci2);
- }
- if (!gotguid && SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IProvideClassInfo, (void**)&pci))) {
- /* examine the available interfaces */
- /* TODO: write some code here */
- pci->lpVtbl->Release(pci);
- }
- } else if (dispname && C_HASTLIB(obj)) {
- unsigned int idx;
- /* get the library from the object; the rest will be dealt with later */
- C_TYPEINFO_VT(obj)->GetContainingTypeLib(C_TYPEINFO(obj), &typelib, &idx);
- } else if (typelibname == NULL) {
- C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &typeinfo);
- }
- } else if (typelibname) {
- /* Fetch the typelibrary and use that to look things up */
- typelib = php_COM_find_typelib(typelibname, CONST_CS TSRMLS_CC);
- }
-
- if (!gotguid && dispname && typelib) {
- unsigned short cfound;
- MEMBERID memid;
- OLECHAR *olename = php_char_to_OLECHAR(dispname, strlen(dispname), CP_ACP TSRMLS_CC);
-
- cfound = 1;
- if (FAILED(typelib->lpVtbl->FindName(typelib, olename, 0, &typeinfo, &memid, &cfound)) || cfound == 0) {
- CLSID coclass;
- ITypeInfo *coinfo;
-
- /* assume that it might be a progid instead */
- if (SUCCEEDED(CLSIDFromProgID(olename, &coclass)) &&
- SUCCEEDED(typelib->lpVtbl->GetTypeInfoOfGuid(typelib, &coclass, &coinfo))) {
-
- /* enumerate implemented interfaces and pick the one as indicated by sink */
- TYPEATTR *attr;
- int i;
-
- coinfo->lpVtbl->GetTypeAttr(coinfo, &attr);
-
- for (i = 0; i < attr->cImplTypes; i++) {
- HREFTYPE rt;
- int tf;
-
- if (FAILED(coinfo->lpVtbl->GetImplTypeFlags(coinfo, i, &tf)))
- continue;
-
- if ((sink && tf == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) ||
- (!sink && (tf & IMPLTYPEFLAG_FSOURCE) == 0)) {
-
- /* flags match what we are looking for */
-
- if (SUCCEEDED(coinfo->lpVtbl->GetRefTypeOfImplType(coinfo, i, &rt)))
- if (SUCCEEDED(coinfo->lpVtbl->GetRefTypeInfo(coinfo, rt, &typeinfo)))
- break;
-
- }
- }
-
- coinfo->lpVtbl->ReleaseTypeAttr(coinfo, attr);
- coinfo->lpVtbl->Release(coinfo);
- }
- }
-
-
- efree(olename);
- } else if (gotguid) {
- typelib->lpVtbl->GetTypeInfoOfGuid(typelib, &iid, &typeinfo);
- }
-
- if (typelib)
- typelib->lpVtbl->Release(typelib);
-
- return typeinfo;
-}
-
-/* {{{ proto bool com_print_typeinfo(mixed comobject | string typelib, string dispinterface, bool wantsink)
- Print out a PHP class definition for a dispatchable interface */
-PHP_FUNCTION(com_print_typeinfo)
-{
- zval *arg1;
- char *ifacename = NULL;
- char *typelibname = NULL;
- int ifacelen;
- zend_bool wantsink = 0;
- comval *obj = NULL;
- ITypeInfo *typeinfo;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/s!b", &arg1, &ifacename,
- &ifacelen, &wantsink)) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(arg1) == IS_OBJECT && (Z_OBJCE_P(arg1) == &COM_class_entry || !strcmp(Z_OBJCE_P(arg1)->name, "COM"))) {
- zval **tmp;
- zend_hash_index_find(Z_OBJPROP_P(arg1), 0, (void**)&tmp);
- ZEND_FETCH_RESOURCE(obj, comval*, tmp, -1, "comval", IS_COM);
- } else if (Z_TYPE_P(arg1) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE(obj, comval*, &arg1, -1, "comval", IS_COM);
- } else {
- convert_to_string(arg1);
- typelibname = Z_STRVAL_P(arg1);
- }
-
- typeinfo = locate_typeinfo(typelibname, obj, ifacename, wantsink TSRMLS_CC);
- if (typeinfo) {
- process_typeinfo(typeinfo, NULL, 1, NULL TSRMLS_CC);
- typeinfo->lpVtbl->Release(typeinfo);
- RETURN_TRUE;
- } else {
- zend_error(E_WARNING, "Unable to find typeinfo using the parameters supplied");
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool com_event_sink(mixed comobject, object sinkobject [, mixed sinkinterface])
- Connect events from a COM object to a PHP object */
-PHP_FUNCTION(com_event_sink)
-{
- zval *object, *sinkobject, *sink=NULL;
- char *dispname = NULL, *typelibname = NULL;
- zend_bool gotguid = 0;
- comval *obj;
- ITypeInfo *typeinfo = NULL;
-
- RETVAL_FALSE;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|z/", &object, &sinkobject, &sink)) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(object) == IS_OBJECT && (Z_OBJCE_P(object) == &COM_class_entry || !strcmp(Z_OBJCE_P(object)->name, "COM"))) {
- zval **tmp;
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void**)&tmp);
- ZEND_FETCH_RESOURCE(obj, comval*, tmp, -1, "comval", IS_COM);
- } else {
- ZEND_FETCH_RESOURCE(obj, comval*, &object, -1, "comval", IS_COM);
- }
-
- if (sink && Z_TYPE_P(sink) == IS_ARRAY) {
- /* 0 => typelibname, 1 => dispname */
- zval **tmp;
-
- if (zend_hash_index_find(Z_ARRVAL_P(sink), 0, (void**)&tmp) == SUCCESS)
- typelibname = Z_STRVAL_PP(tmp);
- if (zend_hash_index_find(Z_ARRVAL_P(sink), 1, (void**)&tmp) == SUCCESS)
- dispname = Z_STRVAL_PP(tmp);
- } else if (sink != NULL) {
- convert_to_string(sink);
- dispname = Z_STRVAL_P(sink);
- }
-
- typeinfo = locate_typeinfo(typelibname, obj, dispname, 1 TSRMLS_CC);
-
- if (typeinfo) {
- HashTable *id_to_name;
-
- ALLOC_HASHTABLE(id_to_name);
-
- if (process_typeinfo(typeinfo, id_to_name, 0, &obj->sinkid TSRMLS_CC)) {
-
- /* Create the COM wrapper for this sink */
- obj->sinkdispatch = php_COM_export_as_sink(sinkobject, &obj->sinkid, id_to_name TSRMLS_CC);
-
- /* Now hook it up to the source */
- com_enable_events(obj, TRUE);
- RETVAL_TRUE;
-
- } else {
- FREE_HASHTABLE(id_to_name);
- }
- }
-
- if (typeinfo)
- typeinfo->lpVtbl->Release(typeinfo);
-
-}
-/* }}} */
-
-static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC)
-{
- pval function_name;
- int retval;
-
- ZVAL_STRINGL(&function_name, "Item", 4, 0);
- retval = do_COM_invoke(array, &function_name, result, &property, 1 TSRMLS_CC);
- if (cleanup) {
- php_COM_destruct(array TSRMLS_CC);
- }
-
- return retval;
-}
-
-
-static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC)
-{
- DISPID dispid;
- HRESULT hr;
- OLECHAR *propname;
- char *error_message;
- DISPPARAMS dispparams;
- char *ErrString;
-
- /* obtain property handler */
- propname = php_char_to_OLECHAR(Z_STRVAL_P(arg_property), Z_STRLEN_P(arg_property), codepage TSRMLS_CC);
-
- hr = php_COM_get_ids_of_names(obj, &propname, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(arg_property), error_message);
- LocalFree(error_message);
- efree(propname);
- if (cleanup) {
- php_COM_destruct(obj TSRMLS_CC);
- }
- return FAILURE;
- }
-
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- if (ErrString) {
- php_error(E_WARNING,"PropGet() failed: %s %s", error_message, ErrString);
- pefree(ErrString, 1);
- } else {
- php_error(E_WARNING,"PropGet() failed: %s", error_message);
- }
- LocalFree(error_message);
- efree(propname);
- if (cleanup) {
- php_COM_destruct(obj TSRMLS_CC);
- }
- return FAILURE;
- }
-
- efree(propname);
- if (cleanup) {
- php_COM_destruct(obj TSRMLS_CC);
- }
- return SUCCESS;
-}
-
-
-static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property, pval *value TSRMLS_DC)
-{
- DISPID dispid;
- HRESULT hr;
- OLECHAR *propname;
- char *error_message;
- VARIANT *var_result, *new_value;
- DISPPARAMS dispparams;
- DISPID mydispid = DISPID_PROPERTYPUT;
- char *ErrString;
-
- ALLOC_VARIANT(var_result);
- ALLOC_VARIANT(new_value);
-
- /* obtain property handler */
- propname = php_char_to_OLECHAR(Z_STRVAL_P(arg_property), Z_STRLEN_P(arg_property), codepage TSRMLS_CC);
-
- hr = php_COM_get_ids_of_names(obj, &propname, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(arg_property), error_message);
- LocalFree(error_message);
- efree(propname);
-
- FREE_VARIANT(var_result);
- FREE_VARIANT(new_value);
-
- RETURN_NULL();
- }
-
- php_pval_to_variant(value, new_value, codepage TSRMLS_CC);
- dispparams.rgvarg = new_value;
- dispparams.rgdispidNamedArgs = &mydispid;
- dispparams.cArgs = 1;
- dispparams.cNamedArgs = 1;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYPUT, &dispparams, NULL, &ErrString TSRMLS_CC);
-
- if (FAILED(hr)) {
- error_message = php_COM_error_message(hr TSRMLS_CC);
- if (ErrString) {
- php_error(E_WARNING,"PropPut() failed: %s %s", error_message, ErrString);
- pefree(ErrString, 1);
- } else {
- php_error(E_WARNING,"PropPut() failed: %s", error_message);
- }
- LocalFree(error_message);
- efree(propname);
-
- FREE_VARIANT(var_result);
- FREE_VARIANT(new_value);
-
- RETURN_NULL();
- }
-
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
-
- hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC);
-
- if (SUCCEEDED(hr)) {
- php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
- } else {
- *return_value = *value;
- zval_copy_ctor(return_value);
- }
-
- if (ErrString) {
- pefree(ErrString, 1);
- }
-
- FREE_VARIANT(var_result);
- FREE_VARIANT(new_value);
-
- efree(propname);
-}
-
-
-/* {{{ proto mixed com_propget(int module, string property_name)
- Gets properties from a COM module */
-PHP_FUNCTION(com_propget)
-{
- pval *arg_comval, *arg_property;
- int type;
- comval *obj;
- VARIANT *var_result;
-
- if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters(ht, 2, &arg_comval, &arg_property) == FAILURE)) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* obtain IDispatch interface */
- convert_to_long(arg_comval);
- obj = (comval *)zend_list_find(Z_LVAL_P(arg_comval), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler", Z_LVAL_P(arg_comval));
- RETURN_NULL();
- }
- convert_to_string_ex(&arg_property);
-
- ALLOC_VARIANT(var_result);
-
- if (do_COM_propget(var_result, obj, arg_property, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- RETURN_NULL();
- }
-
- RETVAL_VARIANT(var_result);
-}
-/* }}} */
-
-
-/* {{{ proto bool com_propput(int module, string property_name, mixed value)
- Puts the properties for a module */
-PHP_FUNCTION(com_propput)
-{
- pval *arg_comval, *arg_property, *arg_value;
- int type;
- comval *obj;
-
- if (ZEND_NUM_ARGS()!=3 || zend_get_parameters(ht, 3, &arg_comval, &arg_property, &arg_value)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* obtain comval interface */
- convert_to_long(arg_comval);
- /* obtain comval interface */
- obj = (comval *)zend_list_find(Z_LVAL_P(arg_comval), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%d is not a COM object handler", Z_LVAL_P(arg_comval));
- RETURN_NULL();
- }
- convert_to_string_ex(&arg_property);
-
- do_COM_propput(return_value, obj, arg_property, arg_value TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto bool com_load_typelib(string typelib_name [, int case_insensitive])
- Loads a Typelib */
-PHP_FUNCTION(com_load_typelib)
-{
- pval *arg_typelib, *arg_cis;
- ITypeLib *pTL;
- int mode = CONST_CS;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- zend_get_parameters(ht, 1, &arg_typelib);
- break;
-
- case 2:
- zend_get_parameters(ht, 2, &arg_typelib, &arg_cis);
- convert_to_boolean_ex(&arg_cis);
- if (Z_LVAL_P(arg_cis)) {
- mode &= ~CONST_CS;
- }
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(&arg_typelib);
- pTL = php_COM_find_typelib(Z_STRVAL_P(arg_typelib), mode TSRMLS_CC);
- if (php_COM_load_typelib(pTL, mode TSRMLS_CC) == SUCCESS) {
- pTL->lpVtbl->Release(pTL);
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_reference)
-{
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- pval return_value;
- pval **comval_handle;
- pval *object = property_reference->object;
- int type;
- comval *obj, *obj_prop;
- VARIANT *var_result;
- TSRMLS_FETCH();
-
- INIT_ZVAL(return_value);
- ZVAL_NULL(&return_value);
-
- /* fetch the IDispatch interface */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
- obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type);
- if (!obj || (type != IS_COM)) {
- return return_value;
- }
-
- ALLOC_COM(obj_prop);
- ALLOC_VARIANT(var_result);
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return return_value;
- }
- break;
-
- case OE_IS_OBJECT:
- if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return return_value;
- }
- break;
-
- case OE_IS_METHOD: {
- FREE_VARIANT(var_result);
- if (obj != obj_prop) {
- FREE_COM(obj_prop);
-
- return_value = *object;
- ZVAL_ADDREF(&return_value);
- } else {
- RETVAL_COM(obj);
- }
- return return_value;
- }
- break;
- }
-
- if (V_VT(var_result) == VT_DISPATCH) {
- if (V_DISPATCH(var_result) == NULL) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return return_value;
- }
-
- obj = obj_prop;
- php_COM_set(obj, &V_DISPATCH(var_result), TRUE TSRMLS_CC);
- } else {
- php_variant_to_pval(var_result, &return_value, codepage TSRMLS_CC);
-
- FREE_COM(obj_prop);
- obj_prop = NULL;
- }
-
- VariantInit(var_result); // to protect C_DISPATCH(obj) from being freed when var_result is destructed
- pval_destructor(&overloaded_property->element);
- }
-
- if (obj_prop != NULL) {
- RETVAL_COM(obj);
- }
-
-
- FREE_VARIANT(var_result);
-
- return return_value;
-}
-
-
-PHPAPI int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value)
-{
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- pval **comval_handle;
- pval *object = property_reference->object;
- comval *obj, *obj_prop;
- int type;
- VARIANT *var_result;
- TSRMLS_FETCH();
-
- /* fetch the IDispatch interface */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
- obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
- if (!obj || (type != IS_COM)) {
- return FAILURE;
- }
-
- ALLOC_COM(obj_prop);
- ALLOC_VARIANT(var_result);
-
- for (element=property_reference->elements_list->head; element != property_reference->elements_list->tail; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return FAILURE;
- }
- break;
-
- case OE_IS_OBJECT:
- if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return FAILURE;
- }
- break;
-
- case OE_IS_METHOD:
- /* this shouldn't happen */
- return FAILURE;
- break;
- }
-
- if (V_VT(var_result) == VT_DISPATCH) {
- if (V_DISPATCH(var_result) == NULL) {
- FREE_VARIANT(var_result);
- FREE_COM(obj_prop);
-
- return FAILURE;
- }
-
- obj = obj_prop;
- php_COM_set(obj, &V_DISPATCH(var_result), TRUE TSRMLS_CC);
- } else {
- FREE_COM(obj_prop);
- FREE_VARIANT(var_result);
-
- return FAILURE;
- }
-
- VariantInit(var_result); // to protect C_DISPATCH(obj) from being freed when var_result is destructed
- pval_destructor(&overloaded_property->element);
- }
- FREE_VARIANT(var_result);
-
- overloaded_property = (zend_overloaded_element *) element->data;
- do_COM_propput(&result, obj, &overloaded_property->element, value TSRMLS_CC);
- FREE_COM(obj_prop);
-
- pval_destructor(&overloaded_property->element);
-
- return SUCCESS;
-}
-
-/* create an overloaded COM object from a dispatch pointer */
-PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC)
-{
- comval *obj;
- zval *zobj;
-
- ALLOC_COM(obj);
- MAKE_STD_ZVAL(zobj);
- php_COM_set(obj, &disp, FALSE TSRMLS_CC);
- ZVAL_COM_EX(zobj, obj, val);
-
- return zobj;
-}
-
-
-PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval property, **handle;
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
- comval *obj;
- int type;
-
- if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL(function_name->element), "com")) {
- /* constructor */
- pval *object_handle;
-
- PHP_FN(com_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (zend_is_true(return_value)) {
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
- } else {
- ZVAL_NULL(object);
- }
-
- return;
- }
-
- RETVAL_NULL();
- property = php_COM_get_property_handler(property_reference);
-
- if (Z_TYPE(property) != IS_OBJECT) {
- pval_destructor(&property);
- pval_destructor(&function_name->element);
-
- /* error message - function call on a non-object */
- return;
- }
-
- zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle);
- obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type);
-
- if (!obj || (type != IS_COM)) {
- pval_destructor(&property);
- pval_destructor(&function_name->element);
-
- return;
- }
-
- if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL_P(&function_name->element), "release")) {
- RETVAL_LONG(php_COM_release(obj TSRMLS_CC));
- } else if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL_P(&function_name->element), "addref")) {
- RETVAL_LONG(php_COM_addref(obj TSRMLS_CC));
- } else {
- pval **arguments;
- VARIANT *var_result;
- int arg_count = ZEND_NUM_ARGS();
-
- ALLOC_VARIANT(var_result);
-
- arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
- zend_get_parameters_array(ht, arg_count, arguments);
-
- if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count TSRMLS_CC) == SUCCESS) {
- php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
- }
-
- FREE_VARIANT(var_result);
- efree(arguments);
- }
-
- if (zend_llist_count(property_reference->elements_list) > 1) {
- /* destruct temporary object */
- zend_list_delete(Z_LVAL_PP(handle));
- pval_destructor(&property);
- }
-
- pval_destructor(&function_name->element);
-}
-
-
-static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC)
-{
- ITypeLib *TypeLib = NULL;
- char *strtok_buf, *major, *minor;
- CLSID clsid;
- OLECHAR *p;
-
- /* Type Libraries:
- * The string we have is either:
- * a) a file name
- * b) a CLSID, major, minor e.g. "{00000200-0000-0010-8000-00AA006D2EA4},2,0"
- * c) a Type Library name e.g. "Microsoft OLE DB ActiveX Data Objects 1.0 Library"
- * Searching for the name will be more expensive that the
- * other two, so we will do that when both other attempts
- * fail.
- */
-
- search_string = php_strtok_r(search_string, ",", &strtok_buf);
-
- if (search_string == NULL)
- return NULL;
-
- major = php_strtok_r(NULL, ",", &strtok_buf);
- minor = php_strtok_r(NULL, ",", &strtok_buf);
-
- p = php_char_to_OLECHAR(search_string, strlen(search_string), codepage TSRMLS_CC);
- /* Is the string a GUID ? */
-
- if (!FAILED(CLSIDFromString(p, &clsid))) {
- HRESULT hr;
- WORD major_i = 1;
- WORD minor_i = 0;
-
- /* We have a valid GUID, check to see if a major/minor */
- /* version was specified otherwise assume 1,0 */
- if ((major != NULL) && (minor != NULL)) {
- major_i = (WORD) atoi(major);
- minor_i = (WORD) atoi(minor);
- }
-
- /* The GUID will either be a typelibrary or a CLSID */
- hr = LoadRegTypeLib((REFGUID) &clsid, major_i, minor_i, LANG_NEUTRAL, &TypeLib);
-
- /* If the LoadRegTypeLib fails, let's try to instantiate */
- /* the class itself and then QI for the TypeInfo and */
- /* retrieve the type info from that interface */
- if (FAILED(hr) && (!major || !minor)) {
- IDispatch *Dispatch;
- ITypeInfo *TypeInfo;
- int idx;
-
- if (FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &Dispatch))) {
- efree(p);
- return NULL;
- }
- if (FAILED(Dispatch->lpVtbl->GetTypeInfo(Dispatch, 0, LANG_NEUTRAL, &TypeInfo))) {
- Dispatch->lpVtbl->Release(Dispatch);
- efree(p);
- return NULL;
- }
- Dispatch->lpVtbl->Release(Dispatch);
- if (FAILED(TypeInfo->lpVtbl->GetContainingTypeLib(TypeInfo, &TypeLib, &idx))) {
- TypeInfo->lpVtbl->Release(TypeInfo);
- efree(p);
- return NULL;
- }
- TypeInfo->lpVtbl->Release(TypeInfo);
- }
- } else {
- if (FAILED(LoadTypeLib(p, &TypeLib))) {
- /* Walk HKCR/TypeLib looking for the string */
- /* If that succeeds, call ourself recursively */
- /* using the CLSID found, else give up and bail */
- HKEY hkey, hsubkey;
- DWORD SubKeys, MaxSubKeyLength;
- char *keyname;
- register unsigned int ii, jj;
- DWORD VersionCount;
- char version[20]; /* All the version keys are 1.0, 4.6, ... */
- char *libname;
- DWORD libnamelen;
-
- /* No Need for Unicode version any more */
- efree(p);
-
- /* Starting at HKEY_CLASSES_ROOT/TypeLib */
- /* Walk all subkeys (Typelib GUIDs) looking */
- /* at each version for a string match to the */
- /* supplied argument */
-
- if (ERROR_SUCCESS != RegOpenKey(HKEY_CLASSES_ROOT, "TypeLib",&hkey)) {
- /* This is pretty bad - better bail */
- return NULL;
- }
- if (ERROR_SUCCESS != RegQueryInfoKey(hkey, NULL, NULL, NULL, &SubKeys, &MaxSubKeyLength, NULL, NULL, NULL, NULL, NULL, NULL)) {
- RegCloseKey(hkey);
- return NULL;
- }
- MaxSubKeyLength++; /* \0 is not counted */
- keyname = emalloc(MaxSubKeyLength);
- libname = emalloc(strlen(search_string)+1);
- for (ii=0;ii<SubKeys;ii++) {
- if (ERROR_SUCCESS != RegEnumKey(hkey, ii, keyname, MaxSubKeyLength)) {
- /* Failed - who cares */
- continue;
- }
- if (ERROR_SUCCESS != RegOpenKey(hkey, keyname, &hsubkey)) {
- /* Failed - who cares */
- continue;
- }
- if (ERROR_SUCCESS != RegQueryInfoKey(hsubkey, NULL, NULL, NULL, &VersionCount, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) {
- /* Failed - who cares */
- RegCloseKey(hsubkey);
- continue;
- }
- for (jj=0;jj<VersionCount;jj++) {
- if (ERROR_SUCCESS != RegEnumKey(hsubkey, jj, version, sizeof(version))) {
- /* Failed - who cares */
- continue;
- }
- /* OK we just need to retrieve the default */
- /* value for this key and see if it matches */
- libnamelen = strlen(search_string)+1;
- if (ERROR_SUCCESS == RegQueryValue(hsubkey, version, libname, &libnamelen)) {
- if ((mode & CONST_CS) ? (strcmp(libname, search_string) == 0) : (stricmp(libname, search_string) == 0)) {
- char *str;
- int major, minor;
-
- /* Found it */
- RegCloseKey(hkey);
- RegCloseKey(hsubkey);
-
- efree(libname);
- /* We can either open up the "win32" key and find the DLL name */
- /* Or just parse the version string and pass that in */
- /* The version string seems like a more portable solution */
- /* Given that there is a COM on Unix */
- if (2 != sscanf(version, "%d.%d", &major, &minor)) {
- major = 1;
- minor = 0;
- }
- str = emalloc(strlen(keyname)+strlen(version)+20); /* 18 == safety, 2 == extra comma and \0 */
- sprintf(str, "%s,%d,%d", keyname, major, minor);
- efree(keyname);
- TypeLib = php_COM_find_typelib(str, mode TSRMLS_CC);
- efree(str);
- /* This is probbaly much harder to read and follow */
- /* But it is MUCH more effiecient than trying to */
- /* test for errors and leave through a single "return" */
- return TypeLib;
- }
- } else {
- /* Failed - perhaps too small abuffer */
- /* But if too small, then the name does not match */
- }
- }
- RegCloseKey(hsubkey);
- }
- efree(keyname);
- efree(libname);
- return NULL;
- }
- }
- efree(p);
- return TypeLib;
-}
-
-
-PHPAPI int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC)
-{
- ITypeComp *TypeComp;
- int i;
- int interfaces;
-
- if (NULL == TypeLib) {
- return FAILURE;
- }
-
- interfaces = TypeLib->lpVtbl->GetTypeInfoCount(TypeLib);
-
- TypeLib->lpVtbl->GetTypeComp(TypeLib, &TypeComp);
- for (i=0; i<interfaces; i++) {
- TYPEKIND pTKind;
-
- TypeLib->lpVtbl->GetTypeInfoType(TypeLib, i, &pTKind);
- if (pTKind==TKIND_ENUM) {
- ITypeInfo *TypeInfo;
- VARDESC *pVarDesc;
- UINT NameCount;
- int j;
-#if 0
- BSTR bstr_EnumId;
- char *EnumId;
-
- TypeLib->lpVtbl->GetDocumentation(TypeLib, i, &bstr_EnumId, NULL, NULL, NULL);
- EnumId = php_OLECHAR_to_char(bstr_EnumId, NULL, codepage);
- printf("Enumeration %d - %s:\n", i, EnumId);
- efree(EnumId);
-#endif
-
- TypeLib->lpVtbl->GetTypeInfo(TypeLib, i, &TypeInfo);
-
- j=0;
- while (SUCCEEDED(TypeInfo->lpVtbl->GetVarDesc(TypeInfo, j, &pVarDesc))) {
- BSTR bstr_ids;
- zend_constant c;
- zval exists, results;
- char *const_name;
-
- TypeInfo->lpVtbl->GetNames(TypeInfo, pVarDesc->memid, &bstr_ids, 1, &NameCount);
- if (NameCount!=1) {
- j++;
- continue;
- }
- const_name = php_OLECHAR_to_char(bstr_ids, &c.name_len, codepage TSRMLS_CC);
- c.name = zend_strndup(const_name, c.name_len);
- efree(const_name);
- c.name_len++; /* length should include the NULL */
- SysFreeString(bstr_ids);
-
- /* Before registering the contsnt, let's see if we can find it */
- if (zend_get_constant(c.name, c.name_len-1, &exists TSRMLS_CC)) {
- /* Oops, it already exists. No problem if it is defined as the same value */
- /* Check to see if they are the same */
- if (!compare_function(&results, &c.value, &exists TSRMLS_CC) && INI_INT("com.autoregister_verbose")) {
- php_error(E_WARNING,"Type library value %s is already defined and has a different value", c.name);
- }
- free(c.name);
- j++;
- continue;
- }
-
- php_variant_to_pval(pVarDesc->lpvarValue, &c.value, codepage TSRMLS_CC);
- if (mode & CONST_PERSISTENT) {
- zval_persist(&c.value TSRMLS_CC);
- mode |= CONST_EFREE_PERSISTENT;
- }
- c.flags = mode;
-
- zend_register_constant(&c TSRMLS_CC);
-
- j++;
- }
- TypeInfo->lpVtbl->Release(TypeInfo);
- }
- }
-
- return SUCCESS;
-}
-
-/* {{{ proto bool com_isenum(object com_module)
- Grabs an IEnumVariant */
-PHP_FUNCTION(com_isenum)
-{
- pval *object;
- pval **comval_handle;
- comval *obj;
- int type;
-
- if (ZEND_NUM_ARGS() != 1) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- zend_get_parameters(ht, 1, &object);
-
- /* obtain IDispatch interface */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle);
- obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type);
- if (!obj || (type != IS_COM)) {
- php_error(E_WARNING,"%s is not a COM object handler", "");
- RETURN_FALSE;
- }
-
- RETURN_BOOL(C_HASENUM(obj));
-}
-/* }}} */
-
-
-static void php_register_COM_class(TSRMLS_D)
-{
- INIT_OVERLOADED_CLASS_ENTRY(COM_class_entry, "COM", NULL,
- php_COM_call_function_handler,
- php_COM_get_property_handler,
- php_COM_set_property_handler);
-
- zend_register_internal_class(&COM_class_entry TSRMLS_CC);
-}
-
-
-static void php_COM_init(int module_number TSRMLS_DC)
-{
- le_comval = zend_register_list_destructors_ex(php_comval_destructor, NULL, "COM", module_number);
- php_register_COM_class(TSRMLS_C);
-}
-
-PHPAPI ZEND_DECLARE_MODULE_GLOBALS(com)
-
-static void php_com_init_globals(zend_com_globals *com_globals)
-{
-}
-
-PHP_MINIT_FUNCTION(COM)
-{
- ZEND_INIT_MODULE_GLOBALS(com, php_com_init_globals, NULL);
- php_COM_init(module_number TSRMLS_CC);
- php_VARIANT_init(module_number TSRMLS_CC);
- php_COM_dispatch_init(module_number TSRMLS_CC);
-
- REGISTER_LONG_CONSTANT("CLSCTX_INPROC_SERVER", CLSCTX_INPROC_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_INPROC_HANDLER", CLSCTX_INPROC_HANDLER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_LOCAL_SERVER", CLSCTX_LOCAL_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_REMOTE_SERVER", CLSCTX_REMOTE_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_SERVER", CLSCTX_SERVER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CLSCTX_ALL", CLSCTX_ALL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(COM)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-/* exports for external object creation */
-
-zend_module_entry COM_module_entry = {
- STANDARD_MODULE_HEADER,
- "com",
- COM_functions,
- PHP_MINIT(COM),
- PHP_MSHUTDOWN(COM),
- NULL,
- NULL,
- PHP_MINFO(COM),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-PHPAPI int php_COM_get_le_comval()
-{
- return le_comval;
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/rpc/com/com_wrapper.h b/ext/rpc/com/com_wrapper.h
deleted file mode 100644
index 5ec791dd43..0000000000
--- a/ext/rpc/com/com_wrapper.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef COM_H
-#define COM_H
-
-#if PHP_WIN32
-
-BEGIN_EXTERN_C()
-
-#include <oleauto.h>
-
-typedef struct comval_ {
-#ifdef _DEBUG
- int resourceindex;
-#endif
- BOOL typelib;
- BOOL enumeration;
- int refcount;
- struct {
- IDispatch *dispatch;
- ITypeInfo *typeinfo;
- IEnumVARIANT *enumvariant;
- } i;
- IDispatch *sinkdispatch;
- GUID sinkid;
- DWORD sinkcookie;
-} comval;
-
-END_EXTERN_C()
-
-#define ZVAL_COM(z,o) { \
- zval *handle = NULL; \
- ZVAL_COM_EX(z,o,handle) \
- }
-
-#define ZVAL_COM_EX(z,o,handle) { \
- HashTable *properties; \
- \
- ALLOC_HASHTABLE(properties); \
- zend_hash_init(properties, 0, NULL, ZVAL_PTR_DTOR, 0); \
- \
- if (handle == NULL) { \
- MAKE_STD_ZVAL(handle); \
- } \
- ZVAL_RESOURCE(handle, zend_list_insert((o), IS_COM)); \
- \
- zval_copy_ctor(handle); \
- zend_hash_index_update(properties, 0, &handle, sizeof(zval *), NULL); \
- object_and_properties_init(z, &COM_class_entry, properties); \
- }
-
-#define RETVAL_COM(o) ZVAL_COM(&return_value, o);
-#define RETURN_COM(o) RETVAL_COM(o) \
- return;
-
-#define ALLOC_COM(z) (z) = (comval *) ecalloc(1, sizeof(comval)); \
- C_REFCOUNT(z) = 0;
-
-#define FREE_COM(z) php_COM_destruct(z TSRMLS_CC);
-
-#define IS_COM php_COM_get_le_comval()
-
-#define C_HASTLIB(x) ((x)->typelib)
-#define C_HASENUM(x) ((x)->enumeration)
-#define C_REFCOUNT(x) ((x)->refcount)
-#define C_ISREFD(x) C_REFCOUNT(x)
-
-#define C_ADDREF(x) (++((x)->refcount))
-#define C_RELEASE(x) (--((x)->refcount))
-
-#define C_DISPATCH(x) ((x)->i.dispatch)
-#define C_TYPEINFO(x) ((x)->i.typeinfo)
-#define C_ENUMVARIANT(x) ((x)->i.enumvariant)
-
-#define C_DISPATCH_VT(x) (C_DISPATCH(x)->lpVtbl)
-#define C_TYPEINFO_VT(x) (C_TYPEINFO(x)->lpVtbl)
-#define C_ENUMVARIANT_VT(x) (C_ENUMVARIANT(x)->lpVtbl)
-
-#endif /* PHP_WIN32 */
-
-#endif /* COM_H */
diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c
deleted file mode 100644
index c9e4f89414..0000000000
--- a/ext/rpc/com/conversion.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Harald Radi <h.radi@nme.at> |
- | Alan Brown <abrown@pobox.com> |
- | Paul Shortis <pshortis@dataworx.com.au> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * 03.6.2001
- * Added SafeArray ==> Hash support
- */
-
-/*
- * Paul Shortis June 7, 2001 <pshortis@dataworx.com.au> - Added code to support SafeArray passing
- * to COM objects. Support includes passing arrays of variants as well
- * as typed arrays.
- */
-
-#ifdef PHP_WIN32
-
-#include "php.h"
-#include "php_COM.h"
-#include "php_VARIANT.h"
-
-/* prototypes */
-
-static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC);
-
-/* implementations */
-PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC)
-{
- int type = VT_EMPTY; /* default variant type */
-
- switch (Z_TYPE_P(pval_arg)) {
- case IS_NULL:
- type = VT_NULL;
- break;
-
- case IS_BOOL:
- type = VT_BOOL;
- break;
-
- case IS_OBJECT:
- if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) {
- type = VT_VARIANT|VT_BYREF;
- } else {
- type = VT_DISPATCH;
- }
- break;
-
- case IS_ARRAY:
- type = VT_ARRAY;
- break;
-
- case IS_RESOURCE:
- case IS_CONSTANT:
- case IS_CONSTANT_ARRAY:
- /* ?? */
- break;
-
- case IS_LONG:
- type = VT_I4; /* assuming 32-bit platform */
- break;
-
- case IS_DOUBLE:
- type = VT_R8; /* assuming 64-bit double precision */
- break;
-
- case IS_STRING:
- type = VT_BSTR;
- break;
- }
-
- php_pval_to_variant_ex2(pval_arg, var_arg, type, codepage TSRMLS_CC);
-}
-
-
-PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC)
-{
- php_pval_to_variant_ex2(pval_arg, var_arg, Z_LVAL_P(pval_type), codepage TSRMLS_CC);
-}
-
-
-PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC)
-{
- OLECHAR *unicode_str;
-
- VariantInit(var_arg);
- V_VT(var_arg) = type;
-
- if (V_VT(var_arg) & VT_ARRAY) {
- /* For now we'll just handle single dimension arrays, we'll use the data type of the first element for the
- output data type */
- HashTable *ht = Z_ARRVAL(*pval_arg);
- int numberOfElements = zend_hash_num_elements(ht);
- SAFEARRAY *safeArray;
- SAFEARRAYBOUND bounds[1];
- VARIANT *v;
- zval **entry; /* An entry in the input array */
-
- type &= ~VT_ARRAY;
-
- if (V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) { /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */
- type &= ~VT_BYREF;
- ALLOC_VARIANT(V_VARIANTREF(var_arg));
- var_arg = V_VARIANTREF(var_arg); /* put the array in that VARIANT */
- }
-
- bounds[0].lLbound = 0;
- bounds[0].cElements = numberOfElements;
- safeArray = SafeArrayCreate(VT_VARIANT, 1, bounds);
-
- if (NULL == safeArray) {
- php_error( E_WARNING,"Unable to convert php array to VARIANT array - %s", numberOfElements ? "" : "(Empty input array)");
- ZVAL_FALSE(pval_arg);
- } else {
- V_ARRAY(var_arg) = safeArray;
- V_VT(var_arg) = VT_ARRAY|VT_VARIANT; /* Now have a valid safe array allocated */
- if (SUCCEEDED(SafeArrayLock(safeArray))) {
- ulong i;
-
- zend_hash_internal_pointer_reset(ht);
- for (i = 0; i < (ulong)numberOfElements; ++i) {
- if ((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) { /* Get a pointer to the php array element */
- /* Add another value to the safe array */
- if (SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) { /* Pointer to output element entry retrieved successfully */
- if (type) { /* explicit type */
- php_pval_to_variant_ex2(*entry, v, type, codepage TSRMLS_CC); /* Do the required conversion */
- } else {
- php_pval_to_variant(*entry, v, codepage TSRMLS_CC); /* Do the required conversion */
- }
- } else {
- php_error( E_WARNING,"phpArrayToSafeArray() - Unable to retrieve pointer to output element number (%d)", i);
- }
- }
- zend_hash_move_forward(ht);
- }
- SafeArrayUnlock( safeArray);
- } else {
- php_error( E_WARNING,"phpArrayToSafeArray() - Unable to lock safeArray");
- }
- }
- } else {
- switch (V_VT(var_arg)) {
-
- case VT_NULL:
- case VT_VOID:
- ZVAL_NULL(pval_arg);
- break;
-
- case VT_UI1:
- convert_to_long_ex(&pval_arg);
- V_UI1(var_arg) = (unsigned char) Z_LVAL_P(pval_arg);
- break;
-
- case VT_I2:
- convert_to_long_ex(&pval_arg);
- V_I2(var_arg) = (short) Z_LVAL_P(pval_arg);
- break;
-
- case VT_I4:
- convert_to_long_ex(&pval_arg);
- V_I4(var_arg) = Z_LVAL_P(pval_arg);
- break;
-
- case VT_R4:
- convert_to_double_ex(&pval_arg);
- V_R4(var_arg) = (float) Z_DVAL_P(pval_arg);
- break;
-
- case VT_R8:
- convert_to_double_ex(&pval_arg);
- V_R8(var_arg) = Z_DVAL_P(pval_arg);
- break;
-
- case VT_BOOL:
- convert_to_boolean_ex(&pval_arg);
- if (Z_LVAL_P(pval_arg)) {
- V_BOOL(var_arg) = VT_TRUE;
- } else {
- V_BOOL(var_arg) = VT_FALSE;
- }
- break;
-
- case VT_ERROR:
- convert_to_long_ex(&pval_arg);
- V_ERROR(var_arg) = Z_LVAL_P(pval_arg);
- break;
-
- case VT_CY:
- convert_to_double_ex(&pval_arg);
- VarCyFromR8(Z_DVAL_P(pval_arg), &V_CY(var_arg));
- break;
-
- case VT_DATE: {
- SYSTEMTIME wintime;
- struct tm *phptime;
-
- switch (Z_TYPE_P(pval_arg)) {
- case IS_DOUBLE:
- /* already a VariantTime value */
- V_DATE(var_arg) = Z_DVAL_P(pval_arg);
- break;
-
- /** @todo
- case IS_STRING:
- */
- /* string representation of a time value */
-
- default:
- /* a PHP time value ? */
- convert_to_long_ex(&pval_arg);
- phptime = gmtime(&(Z_LVAL_P(pval_arg)));
- memset(&wintime, 0, sizeof(wintime));
-
- wintime.wYear = phptime->tm_year + 1900;
- wintime.wMonth = phptime->tm_mon + 1;
- wintime.wDay = phptime->tm_mday;
- wintime.wHour = phptime->tm_hour;
- wintime.wMinute = phptime->tm_min;
- wintime.wSecond = phptime->tm_sec;
-
- SystemTimeToVariantTime(&wintime, &V_DATE(var_arg));
- break;
- }
- }
- break;
-
- case VT_BSTR:
- convert_to_string_ex(&pval_arg);
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- V_BSTR(var_arg) = SysAllocStringByteLen((char *) unicode_str, Z_STRLEN_P(pval_arg) * sizeof(OLECHAR));
- efree(unicode_str);
- break;
-
- case VT_DECIMAL:
- convert_to_string_ex(&pval_arg);
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- VarDecFromStr(unicode_str, LOCALE_SYSTEM_DEFAULT, 0, &V_DECIMAL(var_arg));
- break;
-
- case VT_DECIMAL|VT_BYREF:
- convert_to_string_ex(&pval_arg);
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- VarDecFromStr(unicode_str, LOCALE_SYSTEM_DEFAULT, 0, V_DECIMALREF(var_arg));
- break;
-
- case VT_UNKNOWN:
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_UNKNOWN;
- V_UNKNOWN(var_arg) = (IUnknown *) V_DISPATCH(var_arg);
- }
- break;
-
- case VT_DISPATCH:
- if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) {
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- } else {
- V_DISPATCH(var_arg) = php_COM_export_object(pval_arg TSRMLS_CC);
- if (V_DISPATCH(var_arg)) {
- V_VT(var_arg) = VT_DISPATCH;
- }
- }
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- }
- break;
-
- case VT_UI1|VT_BYREF:
- convert_to_long(pval_arg);
- V_UI1REF(var_arg) = (unsigned char FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_I2|VT_BYREF:
- convert_to_long(pval_arg);
- V_I2REF(var_arg) = (short FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_I4|VT_BYREF:
- convert_to_long(pval_arg);
- V_I4REF(var_arg) = (long FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_R4|VT_BYREF:
- convert_to_double(pval_arg);
- V_R4REF(var_arg) = (float FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_R8|VT_BYREF:
- convert_to_double(pval_arg);
- V_R8REF(var_arg) = (double FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_BOOL|VT_BYREF:
- convert_to_boolean(pval_arg);
- /* emalloc or malloc ? */
- V_BOOLREF(var_arg) = (short FAR*) pemalloc(sizeof(short), 1);
- if (Z_LVAL_P(pval_arg)) {
- *V_BOOLREF(var_arg) = VT_TRUE;
- } else {
- *V_BOOLREF(var_arg) = VT_TRUE;
- }
- break;
-
- case VT_ERROR|VT_BYREF:
- convert_to_long(pval_arg);
- V_ERRORREF(var_arg) = (long FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_CY|VT_BYREF:
- convert_to_double_ex(&pval_arg);
- VarCyFromR8(Z_DVAL_P(pval_arg), var_arg->pcyVal);
- break;
-
- case VT_DATE|VT_BYREF: {
- SYSTEMTIME wintime;
- struct tm *phptime;
-
- phptime = gmtime(&(Z_LVAL_P(pval_arg)));
- memset(&wintime, 0, sizeof(wintime));
-
- wintime.wYear = phptime->tm_year + 1900;
- wintime.wMonth = phptime->tm_mon + 1;
- wintime.wDay = phptime->tm_mday;
- wintime.wHour = phptime->tm_hour;
- wintime.wMinute = phptime->tm_min;
- wintime.wSecond = phptime->tm_sec;
-
- SystemTimeToVariantTime(&wintime, var_arg->pdate);
- }
- break;
-
- case VT_BSTR|VT_BYREF:
- convert_to_string(pval_arg);
- V_BSTRREF(var_arg) = (BSTR FAR*) emalloc(sizeof(BSTR FAR*));
- unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- *V_BSTRREF(var_arg) = SysAllocString(unicode_str);
- efree(unicode_str);
- break;
-
- case VT_UNKNOWN|VT_BYREF:
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_UNKNOWN|VT_BYREF;
- V_UNKNOWNREF(var_arg) = (IUnknown **) &V_DISPATCH(var_arg);
- }
- break;
-
- case VT_DISPATCH|VT_BYREF:
- comval_to_variant(pval_arg, var_arg TSRMLS_CC);
- if (V_VT(var_arg) != VT_DISPATCH) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_DISPATCH|VT_BYREF;
- V_DISPATCHREF(var_arg) = &V_DISPATCH(var_arg);
- }
- break;
-
- case VT_VARIANT:
- php_error(E_WARNING,"VT_VARIANT is invalid. Use VT_VARIANT|VT_BYREF instead.");
- /* break missing intentionally */
- case VT_VARIANT|VT_BYREF: {
- int tp;
- pval **var_handle;
-
- /* fetch the VARIANT structure */
- zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle);
-
- V_VT(var_arg) = VT_VARIANT|VT_BYREF;
- V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp);
-
- if (!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) {
- VariantInit(var_arg);
- }
- }
- /*
- should be, but isn't :)
-
- if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) {
- VariantInit(var_arg);
- }
- */
- break;
-
- case VT_I1:
- convert_to_long_ex(&pval_arg);
- V_I1(var_arg) = (char)Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI2:
- convert_to_long_ex(&pval_arg);
- V_UI2(var_arg) = (unsigned short)Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI4:
- convert_to_long_ex(&pval_arg);
- V_UI4(var_arg) = (unsigned long)Z_LVAL_P(pval_arg);
- break;
-
- case VT_INT:
- convert_to_long_ex(&pval_arg);
- V_INT(var_arg) = (int)Z_LVAL_P(pval_arg);
- break;
-
- case VT_UINT:
- convert_to_long_ex(&pval_arg);
- V_UINT(var_arg) = (unsigned int)Z_LVAL_P(pval_arg);
- break;
-
- case VT_I1|VT_BYREF:
- convert_to_long(pval_arg);
- V_I1REF(var_arg) = (char FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI2|VT_BYREF:
- convert_to_long(pval_arg);
- V_UI2REF(var_arg) = (unsigned short FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_UI4|VT_BYREF:
- convert_to_long(pval_arg);
- V_UI4REF(var_arg) = (unsigned long FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_INT|VT_BYREF:
- convert_to_long(pval_arg);
- V_INTREF(var_arg) = (int FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- case VT_UINT|VT_BYREF:
- convert_to_long(pval_arg);
- V_UINTREF(var_arg) = (unsigned int FAR*) &Z_LVAL_P(pval_arg);
- break;
-
- default:
- php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg));
- }
- }
-}
-
-
-PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC)
-{
- /* Changed the function to return a value for recursive error testing */
- /* Existing calls will be unaffected by the change - so it */
- /* seemed like the smallest impact on unfamiliar code */
- int ret = SUCCESS;
-
- INIT_PZVAL(pval_arg);
-
- /* Add SafeArray support */
- if (V_ISARRAY(var_arg)) {
- SAFEARRAY *array = V_ARRAY(var_arg);
- LONG indices[1];
- LONG lbound=0, ubound;
- VARTYPE vartype;
- register int ii;
- UINT Dims;
- VARIANT vv;
- pval *element;
- HRESULT hr;
-
- /* TODO: Add support for multi-dimensional SafeArrays */
- /* For now just validate that the SafeArray has one dimension */
- if (1 != (Dims = SafeArrayGetDim(array))) {
- php_error(E_WARNING,"Unsupported: multi-dimensional (%d) SafeArrays", Dims);
- ZVAL_NULL(pval_arg);
- return FAILURE;
- }
- SafeArrayLock(array);
-
- /* This call has failed for everything I have tried */
- /* But best leave it to be on the safe side */
- if (FAILED(SafeArrayGetVartype(array, &vartype)) || (vartype == VT_EMPTY)) {
- /* Fall back to what we do know */
- /* Mask off the array bit and assume */
- /* what is left is the type of the array */
- /* elements */
- vartype = V_VT(var_arg) & ~VT_ARRAY;
- }
- SafeArrayGetUBound(array, 1, &ubound);
- SafeArrayGetLBound(array, 1, &lbound);
-
- /* Since COM returned an array we set up the php */
- /* return value to be an array */
- array_init(pval_arg);
-
- /* Walk the safe array */
- for (ii=lbound;ii<=ubound;ii++) {
- indices[0] = ii;
- VariantInit(&vv); /* Docs say this just set the vt field, but you never know */
- /* Set up a variant to pass to a recursive call */
- /* So that we do not need to have two copies */
- /* of the code */
- if (VT_VARIANT == vartype) {
- hr = SafeArrayGetElement(array, indices, (VOID *) &(vv));
- } else {
- V_VT(&vv) = vartype;
- hr = SafeArrayGetElement(array, indices, (VOID *) &(vv.lVal));
- }
- if (FAILED(hr)) {
- /* Failure to retieve an element probably means the array is sparse */
- /* So leave the php array sparse too */
- continue;
- }
- /* Create an element to be added to the array */
- ALLOC_ZVAL(element);
- /* Call ourself again to handle the base type conversion */
- /* If SafeArrayGetElement proclaims to allocate */
- /* memory for a BSTR, so the recursive call frees */
- /* the string correctly */
- if (FAILURE == php_variant_to_pval(&vv, element, codepage TSRMLS_CC)) {
- /* Error occurred setting up array element */
- /* Error was displayed by the recursive call */
- FREE_ZVAL(element);
- /* TODO: Do we stop here, or go on and */
- /* try to make sense of the rest of the array */
- /* Going on leads to multiple errors displayed */
- /* for the same conversion. For large arrays that */
- /* could be very annoying */
- /* And if we don't go on - what to do about */
- /* the parts of the array that are OK? */
- /* break; */
- } else {
- /* Just insert the element into our return array */
- add_index_zval(pval_arg, ii, element);
- }
- }
- SafeArrayUnlock(array);
- } else switch (var_arg->vt & ~VT_BYREF) {
- case VT_EMPTY:
- ZVAL_NULL(pval_arg);
- break;
-
- case VT_UI1:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UI1REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UI1(var_arg));
- }
- break;
-
- case VT_I2:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long )*V_I2REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_I2(var_arg));
- }
- break;
-
- case VT_I4:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, *V_I4REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, V_I4(var_arg));
- }
- break;
-
- case VT_R4:
- if (V_ISBYREF(var_arg)) {
- ZVAL_DOUBLE(pval_arg, (double)*V_R4REF(var_arg));
- } else {
- ZVAL_DOUBLE(pval_arg, (double)V_R4(var_arg));
- }
- break;
-
- case VT_R8:
- if (V_ISBYREF(var_arg)) {
- ZVAL_DOUBLE(pval_arg, *V_R8REF(var_arg));
- } else {
- ZVAL_DOUBLE(pval_arg, V_R8(var_arg));
- }
- break;
-
- /* 96bit uint */
- case VT_DECIMAL: {
- OLECHAR *unicode_str;
- switch (VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) {
- case S_OK:
- Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- Z_TYPE_P(pval_arg) = IS_STRING;
- break;
-
- default:
- ZVAL_NULL(pval_arg);
- ret = FAILURE;
- php_error(E_WARNING, "Error converting DECIMAL value to PHP string");
- break;
- }
- }
- break;
-
- /* Currency */
- case VT_CY:
- if (V_ISBYREF(var_arg)) {
- VarR8FromCy(*V_CYREF(var_arg), &Z_DVAL_P(pval_arg));
- } else {
- VarR8FromCy(V_CY(var_arg), &Z_DVAL_P(pval_arg));
- }
- Z_TYPE_P(pval_arg) = IS_DOUBLE;
- break;
-
- case VT_BOOL:
- if (V_ISBYREF(var_arg)) {
- if (*V_BOOLREF(var_arg)) {
- ZVAL_BOOL(pval_arg, Z_TRUE);
- } else {
- ZVAL_BOOL(pval_arg, Z_FALSE);
- }
- } else {
- if (V_BOOL(var_arg)) {
- ZVAL_BOOL(pval_arg, Z_TRUE);
- } else {
- ZVAL_BOOL(pval_arg, Z_FALSE);
- }
- }
- break;
-
- case VT_NULL:
- case VT_VOID:
- ZVAL_NULL(pval_arg);
- break;
-
- case VT_VARIANT:
- php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, codepage TSRMLS_CC);
- break;
-
- case VT_BSTR:
- Z_TYPE_P(pval_arg) = IS_STRING;
-
- if (V_ISBYREF(var_arg)) {
- if (*V_BSTR(var_arg)) {
- Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- } else {
- ZVAL_NULL(pval_arg);
- }
- efree(V_BSTRREF(var_arg));
- } else {
- if (V_BSTR(var_arg)) {
- Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
- } else {
- ZVAL_NULL(pval_arg);
- }
- }
-
- break;
-
- case VT_DATE: {
- BOOL success;
- SYSTEMTIME wintime;
- struct tm phptime;
-
- if (V_ISBYREF(var_arg)) {
- success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
- } else {
- success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
- }
-
- if (success) {
- memset(&phptime, 0, sizeof(phptime));
-
- phptime.tm_year = wintime.wYear - 1900;
- phptime.tm_mon = wintime.wMonth - 1;
- phptime.tm_mday = wintime.wDay;
- phptime.tm_hour = wintime.wHour;
- phptime.tm_min = wintime.wMinute;
- phptime.tm_sec = wintime.wSecond;
- phptime.tm_isdst = -1;
-
- tzset();
- ZVAL_LONG(pval_arg, mktime(&phptime));
- } else {
- ret = FAILURE;
- }
- }
- break;
-
- case VT_UNKNOWN:
- if (V_UNKNOWN(var_arg) == NULL) {
- V_DISPATCH(var_arg) = NULL;
- } else {
- HRESULT hr;
-
- hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg));
-
- if (FAILED(hr)) {
- char *error_message;
-
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING,"Unable to obtain IDispatch interface: %s", error_message);
- LocalFree(error_message);
-
- V_DISPATCH(var_arg) = NULL;
- }
- }
- /* break missing intentionaly */
- case VT_DISPATCH: {
- comval *obj;
-
- if (V_DISPATCH(var_arg) == NULL) {
- ret = FAILURE;
- ZVAL_NULL(pval_arg);
- } else {
- ALLOC_COM(obj);
- php_COM_set(obj, &V_DISPATCH(var_arg), TRUE TSRMLS_CC);
-
- ZVAL_COM(pval_arg, obj);
- }
- }
- break;
-
- case VT_I1:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_I1REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_I1(var_arg));
- }
- break;
-
- case VT_UI2:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UI2REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UI2(var_arg));
- }
- break;
-
- case VT_UI4:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UI4(var_arg));
- }
- break;
-
- case VT_INT:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_INTREF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_INT(var_arg));
- }
- break;
-
- case VT_UINT:
- if (V_ISBYREF(var_arg)) {
- ZVAL_LONG(pval_arg, (long)*V_UINTREF(var_arg));
- } else {
- ZVAL_LONG(pval_arg, (long)V_UINT(var_arg));
- }
- break;
-
- default:
- php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg));
- ZVAL_NULL(pval_arg);
- ret = FAILURE;
- break;
- }
- return ret;
-}
-
-
-PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC)
-{
- BOOL error = FALSE;
- OLECHAR *unicode_str;
-
- if (strlen == -1) {
- /* request needed buffersize */
- strlen = MultiByteToWideChar(codepage, (codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS), C_str, -1, NULL, 0);
- } else {
- /* \0 terminator */
- strlen++;
- }
-
- if (strlen >= 0) {
- unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR) * strlen);
-
- /* convert string */
- error = !MultiByteToWideChar(codepage, (codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS), C_str, strlen, unicode_str, strlen);
- } else {
- /* return a zero-length string */
- unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR));
- *unicode_str = 0;
-
- error = TRUE;
- }
-
- if (error) {
- switch (GetLastError()) {
- case ERROR_NO_UNICODE_TRANSLATION:
- php_error(E_WARNING, "No unicode translation available for the specified string");
- break;
- case ERROR_INSUFFICIENT_BUFFER:
- php_error(E_WARNING, "Internal Error: Insufficient Buffer");
- break;
- default:
- php_error(E_WARNING, "Unknown error in php_char_to_OLECHAR()");
- }
- }
-
- return unicode_str;
-}
-
-
-PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC)
-{
- char *C_str;
- uint length = 0;
-
- /* request needed buffersize */
- uint reqSize = WideCharToMultiByte(codepage, codepage == CP_UTF8 ? 0 : WC_COMPOSITECHECK, unicode_str, -1, NULL, 0, NULL, NULL);
-
- if (reqSize) {
- C_str = (char *) emalloc(sizeof(char) * reqSize);
-
- /* convert string */
- length = WideCharToMultiByte(codepage, codepage == CP_UTF8 ? 0 : WC_COMPOSITECHECK, unicode_str, -1, C_str, reqSize, NULL, NULL) - 1;
- } else {
- C_str = (char *) emalloc(sizeof(char));
- *C_str = 0;
-
- php_error(E_WARNING,"Error in php_OLECHAR_to_char()");
- }
-
- if (out_length) {
- *out_length = length;
- }
-
- return C_str;
-}
-
-
-static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC)
-{
- pval **comval_handle;
- comval *obj;
- int type;
-
- /* fetch the comval structure */
- zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle);
- obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type);
- if (!obj || (type != IS_COM) || !C_ISREFD(obj)) {
- VariantInit(var_arg);
- } else {
- V_VT(var_arg) = VT_DISPATCH;
- V_DISPATCH(var_arg) = C_DISPATCH(obj);
- }
-}
-
-#endif /* PHP_WIN32 */
diff --git a/ext/rpc/com/conversion.h b/ext/rpc/com/conversion.h
deleted file mode 100644
index b8c534fa22..0000000000
--- a/ext/rpc/com/conversion.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef CONVERSION_H
-#define CONVERSION_H
-
-/* isn't this defined somewhere else ? */
-
-#define Z_TRUE 1
-#define Z_FALSE 0
-
-#define VT_TRUE -1
-#define VT_FALSE 0
-
-BEGIN_EXTERN_C()
-
-PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC);
-PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC);
-PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC);
-PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC);
-PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC);
-PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC);
-
-END_EXTERN_C()
-
-#endif \ No newline at end of file
diff --git a/ext/rpc/com/dispatch.c b/ext/rpc/com/dispatch.c
deleted file mode 100644
index 8d775a8662..0000000000
--- a/ext/rpc/com/dispatch.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * This module is used to export PHP objects to COM and DOTNET by exposing
- * them as objects implementing IDispatch.
- * */
-
-#include "php.h"
-#include "php_COM.h"
-#include "php_VARIANT.h"
-#include "conversion.h"
-#include "variant.h"
-
-#define COBJMACROS
-#include <unknwn.h> /* IDispatch */
-#include <dispex.h> /* IDispatchEx */
-
-
-typedef struct {
- /* This first part MUST match the declaration
- * of interface IDispatchEx */
- CONST_VTBL struct IDispatchExVtbl *lpVtbl;
-
- /* now the PHP stuff */
-
- THREAD_T engine_thread; /* for sanity checking */
- zval *object; /* the object exported */
- LONG refcount; /* COM reference count */
-
- HashTable *dispid_to_name; /* keep track of dispid -> name mappings */
- HashTable *name_to_dispid; /* keep track of name -> dispid mappings */
-
- GUID sinkid; /* iid that we "implement" for event sinking */
-
- int id;
-} php_dispatchex;
-
-static void disp_destructor(php_dispatchex *disp);
-
-static void dispatch_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_dispatchex *disp = (php_dispatchex *)rsrc->ptr;
- disp_destructor(disp);
-}
-
-static int le_dispatch;
-int php_COM_dispatch_init(int module_number TSRMLS_DC)
-{
- le_dispatch = zend_register_list_destructors_ex(dispatch_dtor, NULL, "COM:Dispatch", module_number);
- return le_dispatch;
-}
-
-
-/* {{{ trace */
-static inline void trace(char *fmt, ...)
-{
- va_list ap;
- char buf[4096];
-
- sprintf(buf, "T=%08x ", tsrm_thread_id());
- OutputDebugString(buf);
-
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
-
- OutputDebugString(buf);
-
- va_end(ap);
-}
-/* }}} */
-
-#define FETCH_DISP(methname) \
- php_dispatchex *disp = (php_dispatchex*)This; \
- trace(" PHP:%s %s\n", Z_OBJCE_P(disp->object)->name, methname); \
- if (tsrm_thread_id() != disp->engine_thread) \
- return E_UNEXPECTED;
-
-
-static HRESULT STDMETHODCALLTYPE disp_queryinterface(
- IDispatchEx *This,
- /* [in] */ REFIID riid,
- /* [iid_is][out] */ void **ppvObject)
-{
- FETCH_DISP("QueryInterface");
-
- if (IsEqualGUID(&IID_IUnknown, riid) ||
- IsEqualGUID(&IID_IDispatch, riid) ||
- IsEqualGUID(&IID_IDispatchEx, riid) ||
- IsEqualGUID(&disp->sinkid, riid)) {
- *ppvObject = This;
- InterlockedIncrement(&disp->refcount);
- return S_OK;
- }
-
- *ppvObject = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This)
-{
- FETCH_DISP("AddRef");
-
- return InterlockedIncrement(&disp->refcount);
-}
-
-static ULONG STDMETHODCALLTYPE disp_release(IDispatchEx *This)
-{
- ULONG ret;
- TSRMLS_FETCH();
- FETCH_DISP("Release");
-
- ret = InterlockedDecrement(&disp->refcount);
- trace("-- refcount now %d\n", ret);
- if (ret == 0) {
- /* destroy it */
- if (disp->id)
- zend_list_delete(disp->id);
- }
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_gettypeinfocount(
- IDispatchEx *This,
- /* [out] */ UINT *pctinfo)
-{
- FETCH_DISP("GetTypeInfoCount");
-
- *pctinfo = 0;
- return S_OK;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_gettypeinfo(
- IDispatchEx *This,
- /* [in] */ UINT iTInfo,
- /* [in] */ LCID lcid,
- /* [out] */ ITypeInfo **ppTInfo)
-{
- FETCH_DISP("GetTypeInfo");
-
- *ppTInfo = NULL;
- return DISP_E_BADINDEX;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getidsofnames(
- IDispatchEx *This,
- /* [in] */ REFIID riid,
- /* [size_is][in] */ LPOLESTR *rgszNames,
- /* [in] */ UINT cNames,
- /* [in] */ LCID lcid,
- /* [size_is][out] */ DISPID *rgDispId)
-{
- UINT i;
- HRESULT ret = S_OK;
- TSRMLS_FETCH();
- FETCH_DISP("GetIDsOfNames");
-
- for (i = 0; i < cNames; i++) {
- char *name;
- unsigned int namelen;
- zval **tmp;
-
- name = php_OLECHAR_to_char(rgszNames[i], &namelen, CP_ACP TSRMLS_CC);
-
- /* Lookup the name in the hash */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == FAILURE) {
- ret = DISP_E_UNKNOWNNAME;
- rgDispId[i] = 0;
- } else {
- rgDispId[i] = Z_LVAL_PP(tmp);
- }
-
- efree(name);
-
- }
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_invoke(
- IDispatchEx *This,
- /* [in] */ DISPID dispIdMember,
- /* [in] */ REFIID riid,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [out][in] */ DISPPARAMS *pDispParams,
- /* [out] */ VARIANT *pVarResult,
- /* [out] */ EXCEPINFO *pExcepInfo,
- /* [out] */ UINT *puArgErr)
-{
- return This->lpVtbl->InvokeEx(This, dispIdMember,
- lcid, wFlags, pDispParams,
- pVarResult, pExcepInfo, NULL);
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getdispid(
- IDispatchEx *This,
- /* [in] */ BSTR bstrName,
- /* [in] */ DWORD grfdex,
- /* [out] */ DISPID *pid)
-{
- HRESULT ret = DISP_E_UNKNOWNNAME;
- char *name;
- unsigned int namelen;
- zval **tmp;
- TSRMLS_FETCH();
- FETCH_DISP("GetDispID");
-
- name = php_OLECHAR_to_char(bstrName, &namelen, CP_ACP TSRMLS_CC);
-
- /* Lookup the name in the hash */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) {
- *pid = Z_LVAL_PP(tmp);
- ret = S_OK;
- }
-
- efree(name);
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_invokeex(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [in] */ DISPPARAMS *pdp,
- /* [out] */ VARIANT *pvarRes,
- /* [out] */ EXCEPINFO *pei,
- /* [unique][in] */ IServiceProvider *pspCaller)
-{
- zval **name;
- UINT i;
- int codepage = CP_ACP;
- zval *retval = NULL;
- zval ***params = NULL;
- HRESULT ret = DISP_E_MEMBERNOTFOUND;
- TSRMLS_FETCH();
- FETCH_DISP("InvokeEx");
-
- if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) {
- /* TODO: add support for overloaded objects */
-
- trace("-- Invoke: %d %20s flags=%08x args=%d\n", id, Z_STRVAL_PP(name), wFlags, pdp->cArgs);
-
- /* convert args into zvals.
- * Args are in reverse order */
- params = (zval ***)emalloc(sizeof(zval **) * pdp->cArgs);
- for (i = 0; i < pdp->cArgs; i++) {
- VARIANT *arg;
- zval *zarg;
-
- arg = &pdp->rgvarg[ pdp->cArgs - 1 - i];
-
- trace("alloc zval for arg %d VT=%08x\n", i, V_VT(arg));
-
- ALLOC_INIT_ZVAL(zarg);
-
- if (V_VT(arg) == VT_DISPATCH) {
- trace("arg %d is dispatchable\n", i);
- if (NULL == php_COM_object_from_dispatch(V_DISPATCH(arg), zarg TSRMLS_CC)) {
- trace("failed to convert arg %d to zval\n", i);
- ZVAL_NULL(zarg);
- }
- } else {
- if (FAILURE == php_variant_to_pval(arg, zarg, codepage TSRMLS_CC)) {
- trace("failed to convert arg %d to zval\n", i);
- ZVAL_NULL(zarg);
- }
- }
-
- params[i] = &zarg;
- }
-
- trace("arguments processed, prepare to do some work\n");
-
- if (wFlags & DISPATCH_PROPERTYGET) {
- trace("trying to get a property\n");
- zend_hash_find(Z_OBJPROP_P(disp->object), Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, (void**)&retval);
- } else if (wFlags & DISPATCH_PROPERTYPUT) {
- trace("trying to set a property\n");
- add_property_zval(disp->object, Z_STRVAL_PP(name), *params[0]);
- } else if (wFlags & DISPATCH_METHOD) {
- trace("Trying to call user function\n");
- if (SUCCESS == call_user_function_ex(EG(function_table), &disp->object, *name,
- &retval, pdp->cArgs, params, 1, NULL TSRMLS_CC)) {
- ret = S_OK;
- } else {
- ret = DISP_E_EXCEPTION;
- }
- } else {
- trace("Don't know how to handle this invocation %08x\n", wFlags);
- }
-
- /* release arguments */
- for (i = 0; i < pdp->cArgs; i++)
- zval_ptr_dtor(params[i]);
- efree(params);
-
- /* return value */
- if (retval) {
- if (pvarRes) {
- if (Z_TYPE_P(retval) == IS_OBJECT) {
- /* export the object using a dispatch like ourselves */
- VariantInit(pvarRes);
- V_VT(pvarRes) = VT_DISPATCH;
- V_DISPATCH(pvarRes) = php_COM_export_object(retval TSRMLS_CC);
- } else {
- php_pval_to_variant(retval, pvarRes, codepage TSRMLS_CC);
- }
- }
- zval_ptr_dtor(&retval);
- } else if (pvarRes) {
- VariantInit(pvarRes);
- }
-
- } else {
- trace("InvokeEx: I don't support DISPID=%d\n", id);
- }
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_deletememberbyname(
- IDispatchEx *This,
- /* [in] */ BSTR bstrName,
- /* [in] */ DWORD grfdex)
-{
- FETCH_DISP("DeleteMemberByName");
-
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_deletememberbydispid(
- IDispatchEx *This,
- /* [in] */ DISPID id)
-{
- FETCH_DISP("DeleteMemberByDispID");
-
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getmemberproperties(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [in] */ DWORD grfdexFetch,
- /* [out] */ DWORD *pgrfdex)
-{
- FETCH_DISP("GetMemberProperties");
-
- return DISP_E_UNKNOWNNAME;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getmembername(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [out] */ BSTR *pbstrName)
-{
- zval *name;
- TSRMLS_FETCH();
- FETCH_DISP("GetMemberName");
-
- if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) {
- OLECHAR *olestr = php_char_to_OLECHAR(Z_STRVAL_P(name), Z_STRLEN_P(name), CP_ACP TSRMLS_CC);
- *pbstrName = SysAllocString(olestr);
- efree(olestr);
- return S_OK;
- } else {
- return DISP_E_UNKNOWNNAME;
- }
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getnextdispid(
- IDispatchEx *This,
- /* [in] */ DWORD grfdex,
- /* [in] */ DISPID id,
- /* [out] */ DISPID *pid)
-{
- ulong next = id+1;
- FETCH_DISP("GetNextDispID");
-
- while(!zend_hash_index_exists(disp->dispid_to_name, next))
- next++;
-
- if (zend_hash_index_exists(disp->dispid_to_name, next)) {
- *pid = next;
- return S_OK;
- }
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getnamespaceparent(
- IDispatchEx *This,
- /* [out] */ IUnknown **ppunk)
-{
- FETCH_DISP("GetNameSpaceParent");
-
- *ppunk = NULL;
- return E_NOTIMPL;
-}
-
-static struct IDispatchExVtbl php_dispatch_vtbl = {
- disp_queryinterface,
- disp_addref,
- disp_release,
- disp_gettypeinfocount,
- disp_gettypeinfo,
- disp_getidsofnames,
- disp_invoke,
- disp_getdispid,
- disp_invokeex,
- disp_deletememberbyname,
- disp_deletememberbydispid,
- disp_getmemberproperties,
- disp_getmembername,
- disp_getnextdispid,
- disp_getnamespaceparent
-};
-
-
-/* enumerate functions and properties of the object and assign
- * dispatch ids */
-static void generate_dispids(php_dispatchex *disp TSRMLS_DC)
-{
- HashPosition pos;
- char *name = NULL;
- zval *tmp;
- int namelen;
- int keytype;
- ulong pid;
-
- if (disp->dispid_to_name == NULL) {
- ALLOC_HASHTABLE(disp->dispid_to_name);
- ALLOC_HASHTABLE(disp->name_to_dispid);
- zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_init(disp->dispid_to_name, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
-
- /* properties */
- zend_hash_internal_pointer_reset_ex(Z_OBJPROP_PP(&disp->object), &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(Z_OBJPROP_PP(&disp->object), &name, &namelen, &pid, 0, &pos))) {
- char namebuf[32];
- if (keytype == HASH_KEY_IS_LONG) {
- sprintf(namebuf, "%d", pid);
- name = namebuf;
- namelen = strlen(namebuf);
- }
-
- zend_hash_move_forward_ex(Z_OBJPROP_PP(&disp->object), &pos);
-
- /* Find the existing id */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS)
- continue;
-
- /* add the mappings */
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, name, namelen, 1);
- zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, name, namelen+1, (void*)&tmp, sizeof(zval *), NULL);
-
- }
-
- /* functions */
- zend_hash_internal_pointer_reset_ex(&Z_OBJCE_PP(&disp->object)->function_table, &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(&Z_OBJCE_PP(&disp->object)->function_table, &name, &namelen, &pid, 0, &pos))) {
-
- char namebuf[32];
- if (keytype == HASH_KEY_IS_LONG) {
- sprintf(namebuf, "%d", pid);
- name = namebuf;
- namelen = strlen(namebuf);
- }
-
- zend_hash_move_forward_ex(Z_OBJPROP_PP(&disp->object), &pos);
-
- /* Find the existing id */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS)
- continue;
-
- /* add the mappings */
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, name, namelen, 1);
- zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, name, namelen+1, (void*)&tmp, sizeof(zval *), NULL);
- }
-}
-
-static php_dispatchex *disp_constructor(zval *object TSRMLS_DC)
-{
- php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex));
-
- trace("constructing a COM proxy\n");
-
- if (disp == NULL)
- return NULL;
-
- memset(disp, 0, sizeof(php_dispatchex));
-
- disp->engine_thread = tsrm_thread_id();
- disp->lpVtbl = &php_dispatch_vtbl;
- disp->refcount = 1;
-
-
- if (object)
- ZVAL_ADDREF(object);
- disp->object = object;
-
- disp->id = zend_list_insert(disp, le_dispatch);
-
- return disp;
-}
-
-static void disp_destructor(php_dispatchex *disp)
-{
- TSRMLS_FETCH();
-
- trace("destroying COM wrapper for PHP object %s\n", Z_OBJCE_P(disp->object)->name);
-
- disp->id = 0;
-
- if (disp->refcount > 0)
- CoDisconnectObject((IUnknown*)disp, 0);
-
- zend_hash_destroy(disp->dispid_to_name);
- zend_hash_destroy(disp->name_to_dispid);
- FREE_HASHTABLE(disp->dispid_to_name);
- FREE_HASHTABLE(disp->name_to_dispid);
-
- if (disp->object)
- zval_ptr_dtor(&disp->object);
-
-
- CoTaskMemFree(disp);
-}
-
-PHPAPI IDispatch *php_COM_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC)
-{
- php_dispatchex *disp = disp_constructor(val TSRMLS_CC);
- HashPosition pos;
- char *name = NULL;
- zval *tmp, **ntmp;
- int namelen;
- int keytype;
- ulong pid;
-
- disp->dispid_to_name = id_to_name;
-
- memcpy(&disp->sinkid, sinkid, sizeof(disp->sinkid));
-
- /* build up the reverse mapping */
- ALLOC_HASHTABLE(disp->name_to_dispid);
- zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- zend_hash_internal_pointer_reset_ex(id_to_name, &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(id_to_name, &name, &namelen, &pid, 0, &pos))) {
-
- if (keytype == HASH_KEY_IS_LONG) {
-
- zend_hash_get_current_data_ex(id_to_name, (void**)&ntmp, &pos);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, Z_STRVAL_PP(ntmp), Z_STRLEN_PP(ntmp)+1, (void*)&tmp, sizeof(zval *), NULL);
- }
-
- zend_hash_move_forward_ex(id_to_name, &pos);
- }
-
- return (IDispatch*)disp;
-}
-
-PHPAPI IDispatch *php_COM_export_object(zval *val TSRMLS_DC)
-{
- php_dispatchex *disp = NULL;
-
- if (Z_TYPE_P(val) != IS_OBJECT)
- return NULL;
-
- if (Z_OBJCE_P(val) == &COM_class_entry || !strcmp(Z_OBJCE_P(val)->name, "COM")) {
- /* pass back it's IDispatch directly */
- zval **tmp;
- comval *obj;
- int type;
-
- zend_hash_index_find(Z_OBJPROP_P(val), 0, (void**)&tmp);
- obj = (comval *)zend_list_find(Z_LVAL_PP(tmp), &type);
- if (type != IS_COM)
- return NULL;
-
- C_DISPATCH(obj)->lpVtbl->AddRef(C_DISPATCH(obj));
- return C_DISPATCH(obj);
- }
-
- disp = disp_constructor(val TSRMLS_CC);
- generate_dispids(disp TSRMLS_CC);
-
- return (IDispatch*)disp;
-}
-
-
diff --git a/ext/rpc/com/php_com.h b/ext/rpc/com/php_com.h
deleted file mode 100644
index d26441f6a3..0000000000
--- a/ext/rpc/com/php_com.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef PHP_COM_H
-#define PHP_COM_H
-
-#if PHP_WIN32
-
-#include "com.h"
-
-BEGIN_EXTERN_C()
-
-PHP_MINIT_FUNCTION(COM);
-PHP_MSHUTDOWN_FUNCTION(COM);
-
-PHP_FUNCTION(com_load);
-PHP_FUNCTION(com_invoke);
-PHP_FUNCTION(com_addref);
-PHP_FUNCTION(com_release);
-PHP_FUNCTION(com_propget);
-PHP_FUNCTION(com_propput);
-PHP_FUNCTION(com_load_typelib);
-PHP_FUNCTION(com_isenum);
-PHP_FUNCTION(com_event_sink);
-PHP_FUNCTION(com_message_pump);
-PHP_FUNCTION(com_print_typeinfo);
-
-PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, char **ErrString TSRMLS_DC);
-PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId TSRMLS_DC);
-PHPAPI HRESULT php_COM_release(comval *obj TSRMLS_DC);
-PHPAPI HRESULT php_COM_addref(comval *obj TSRMLS_DC);
-PHPAPI HRESULT php_COM_destruct(comval *obj TSRMLS_DC);
-PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup TSRMLS_DC);
-PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup TSRMLS_DC);
-PHPAPI char *php_COM_error_message(HRESULT hr TSRMLS_DC);
-PHPAPI int php_COM_get_le_comval();
-PHPAPI int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value);
-PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_reference);
-PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
-PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC);
-PHPAPI int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC);
-
-/* dispatch.c */
-PHPAPI IDispatch *php_COM_export_object(zval *val TSRMLS_DC);
-PHPAPI IDispatch *php_COM_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC);
-int php_COM_dispatch_init(int module_number TSRMLS_DC);
-
-zend_module_entry COM_module_entry;
-zend_class_entry COM_class_entry;
-
-#ifdef DEBUG
- extern int resourcecounter;
-#endif
-
-END_EXTERN_C()
-
-#define phpext_com_ptr &COM_module_entry
-
-ZEND_BEGIN_MODULE_GLOBALS(com)
- int nothing;
-ZEND_END_MODULE_GLOBALS(com)
-
-PHPAPI ZEND_EXTERN_MODULE_GLOBALS(com);
-
-#ifdef ZTS
-#define COMG(v) TSRMG(com_globals_id, zend_com_globals *, v)
-#else
-#define COMG(v) (com_globals.v)
-#endif
-
-#else
-
-#define phpext_com_ptr NULL
-
-#endif /* PHP_WIN32 */
-
-#endif /* PHP_COM_H */
diff --git a/ext/rpc/com/php_variant.h b/ext/rpc/com/php_variant.h
deleted file mode 100644
index 54347461c8..0000000000
--- a/ext/rpc/com/php_variant.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef PHP_TYPEDEF_VARIANT_H
-#define PHP_TYPEDEF_VARIANT_H
-
-#if PHP_WIN32
-
-BEGIN_EXTERN_C()
-
-#include "conversion.h"
-#include "variant.h"
-
-void php_VARIANT_init(int module_number TSRMLS_DC);
-
-PHPAPI int php_VARIANT_get_le_variant();
-
-END_EXTERN_C()
-
-#endif /* PHP_WIN32 */
-
-#endif /* PHP_TYPEDEF_VARIANT_H */
diff --git a/ext/rpc/com/variant.c b/ext/rpc/com/variant.c
deleted file mode 100644
index 2303481cee..0000000000
--- a/ext/rpc/com/variant.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Harald Radi <h.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-
-/*
- * This module maps the VARIANT datastructure into PHP so that it can be used to
- * pass values to COM and DOTNET Objects by reference and not only by value.
- *
- * harald
- */
-
-#ifdef PHP_WIN32
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_VARIANT.h"
-
-#include <unknwn.h>
-
-static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC);
-static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value);
-static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference);
-static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
-static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_register_VARIANT_class(TSRMLS_D);
-
-static int le_variant;
-static int codepage;
-static zend_class_entry VARIANT_class_entry;
-
-
-void php_VARIANT_init(int module_number TSRMLS_DC)
-{
- le_variant = zend_register_list_destructors_ex(php_VARIANT_destructor, NULL, "VARIANT", module_number);
-
- /* variant datatypes */
- REGISTER_LONG_CONSTANT("VT_NULL", VT_NULL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_EMPTY", VT_EMPTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UI1", VT_UI1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_I2", VT_I2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_I4", VT_I4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_R4", VT_R4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_R8", VT_R8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_BOOL", VT_BOOL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_ERROR", VT_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_CY", VT_CY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_DATE", VT_DATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_BSTR", VT_BSTR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_DECIMAL", VT_DECIMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UNKNOWN", VT_UNKNOWN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_DISPATCH", VT_DISPATCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_VARIANT", VT_VARIANT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_I1", VT_I1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UI2", VT_UI2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UI4", VT_UI4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_INT", VT_INT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_UINT", VT_UINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_ARRAY", VT_ARRAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("VT_BYREF", VT_BYREF, CONST_CS | CONST_PERSISTENT);
-
- /* codepages */
- REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT);
-
-#ifdef CP_SYMBOL
- REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
-#else
-# error "CP_SYMBOL undefined"
-#endif
-#ifdef CP_THREAD_ACP
- REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
-#else
-# error "CP_THREAD_ACP undefined"
-#endif
-
- php_register_VARIANT_class(TSRMLS_C);
-}
-
-
-PHPAPI int php_VARIANT_get_le_variant()
-{
- return le_variant;
-}
-
-
-static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
- VARIANT *pVar;
-
- if ((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) {
- /* constructor */
- pval *object_handle, *data, *type, *code_page;
-
- ALLOC_VARIANT(pVar);
- VariantInit(pVar);
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- /* nothing to do */
- break;
- case 1:
- zend_get_parameters(ht, 1, &data);
- php_pval_to_variant(data, pVar, codepage TSRMLS_CC);
- codepage = CP_ACP;
- break;
- case 2:
- zend_get_parameters(ht, 2, &data, &type);
- php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC);
- codepage = CP_ACP;
- break;
- case 3:
- zend_get_parameters(ht, 3, &data, &type, &code_page);
- php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC);
- convert_to_long(code_page);
- codepage = Z_LVAL_P(code_page);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- RETVAL_LONG(zend_list_insert(pVar, IS_VARIANT));
-
- if (!zend_is_true(return_value)) {
- ZVAL_FALSE(object);
- return;
- }
-
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- zval_dtor(&function_name->element);
- }
-}
-
-
-static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference)
-{
- zend_overloaded_element *overloaded_property;
- int type;
- pval result, **var_handle, *object = property_reference->object;
- VARIANT *var_arg;
- TSRMLS_FETCH();
-
-
- /* fetch the VARIANT structure */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
- var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
-
- if (!var_arg || (type != IS_VARIANT)) {
- ZVAL_FALSE(&result);
- } else {
- overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- ZVAL_FALSE(&result);
- break;
-
- case OE_IS_OBJECT:
- if (!strcmp(Z_STRVAL(overloaded_property->element), "value")) {
- php_variant_to_pval(var_arg, &result, codepage TSRMLS_CC);
- } else if (!strcmp(Z_STRVAL(overloaded_property->element), "type")) {
- ZVAL_LONG(&result, V_VT(var_arg))
- } else {
- ZVAL_FALSE(&result);
- php_error(E_WARNING, "Unknown member.");
- }
- break;
- case OE_IS_METHOD:
- ZVAL_FALSE(&result);
- php_error(E_WARNING, "Unknown method.");
- break;
-
- zval_dtor(&overloaded_property->element);
- }
- }
-
- return result;
-}
-
-
-static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value)
-{
- zend_overloaded_element *overloaded_property;
- int type;
- pval **var_handle, *object = property_reference->object;
- VARIANT *var_arg;
- TSRMLS_FETCH();
-
-
- /* fetch the VARIANT structure */
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
- var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
-
- if (!var_arg || (type != IS_VARIANT)) {
- return FAILURE;
- }
-
- overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
- do_VARIANT_propset(var_arg, &overloaded_property->element, value TSRMLS_CC);
- zval_dtor(&overloaded_property->element);
- return SUCCESS;
-}
-
-
-static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC)
-{
- int type;
-
- if (!strcmp(Z_STRVAL_P(arg_property), "value")) {
- php_pval_to_variant(value, var_arg, codepage TSRMLS_CC);
-
- return SUCCESS;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "bVal")) {
- type = VT_UI1;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "iVal")) {
- type = VT_I2;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "lVal")) {
- type = VT_I4;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "fltVal")) {
- type = VT_R4;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "dblVal")) {
- type = VT_R8;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "boolVal")) {
- type = VT_BOOL;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "scode")) {
- type = VT_ERROR;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "cyVal")) {
- type = VT_CY;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "date")) {
- type = VT_DATE;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) {
- type = VT_BSTR;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) {
- type = VT_DECIMAL|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "punkVal")) {
- type = VT_UNKNOWN;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) {
- type = VT_DISPATCH;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "parray")) {
- type = VT_ARRAY;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pbVal")) {
- type = VT_UI1|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "piVal")) {
- type = VT_I2|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "plVal")) {
- type = VT_I4|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) {
- type = VT_R4|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) {
- type = VT_R8|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) {
- type = VT_BOOL|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pscode")) {
- type = VT_ERROR|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) {
- type = VT_CY|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pdate")) {
- type = VT_DATE|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) {
- type = VT_BSTR|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) {
- type = VT_UNKNOWN|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) {
- type = VT_DISPATCH|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pparray")) {
- type = VT_ARRAY|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) {
- type = VT_VARIANT|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "byref")) {
- type = VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "cVal")) {
- type = VT_I1;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "uiVal")) {
- type = VT_UI2;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "ulVal")) {
- type = VT_UI4;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "intVal")) {
- type = VT_INT;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "uintVal")) {
- type = VT_UINT|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pcVal")) {
- type = VT_I1|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "puiVal")) {
- type = VT_UI2|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pulVal")) {
- type = VT_UI4|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "pintVal")) {
- type = VT_INT|VT_BYREF;
- } else if (!strcmp(Z_STRVAL_P(arg_property), "puintVal")) {
- type = VT_UINT|VT_BYREF;
- } else {
- php_error(E_WARNING, "Unknown member.");
- return FAILURE;
- }
-
- php_pval_to_variant_ex2(value, var_arg, type, codepage TSRMLS_CC);
-
- return SUCCESS;
-}
-
-
-static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- FREE_VARIANT(rsrc->ptr);
-}
-
-static void php_register_VARIANT_class(TSRMLS_D)
-{
- INIT_OVERLOADED_CLASS_ENTRY(VARIANT_class_entry, "VARIANT", NULL,
- php_VARIANT_call_function_handler,
- php_VARIANT_get_property_handler,
- php_VARIANT_set_property_handler);
-
- zend_register_internal_class(&VARIANT_class_entry TSRMLS_CC);
-}
-
-#endif /* PHP_WIN32 */
diff --git a/ext/rpc/com/variant.h b/ext/rpc/com/variant.h
deleted file mode 100644
index 31ea342d66..0000000000
--- a/ext/rpc/com/variant.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef VARIANT_H
-#define VARIANT_H
-
-#if PHP_WIN32
-
-#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \
- VariantInit(v);
-
-#define FREE_VARIANT(v) VariantClear(v); \
- efree(v);
-
-
-#define IS_VARIANT php_VARIANT_get_le_variant()
-
-#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \
- comval *obj; \
- ALLOC_COM(obj); \
- php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \
- ZVAL_RESOURCE((z), zend_list_insert(obj, IS_COM)); \
- } else { \
- php_variant_to_pval((v), (z), codepage TSRMLS_CC); \
- FREE_VARIANT(v); \
- }
-
-#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v));
-#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \
- return;
-
-
-#endif /* PHP_WIN32 */
-
-#endif /* VARIANT_H */
diff --git a/ext/rpc/dotnet/CREDITS b/ext/rpc/dotnet/CREDITS
deleted file mode 100644
index 154522c6f8..0000000000
--- a/ext/rpc/dotnet/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-dotnet
-Sam Ruby
diff --git a/ext/rpc/dotnet/EXPERIMENTAL b/ext/rpc/dotnet/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/rpc/dotnet/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/rpc/dotnet/README b/ext/rpc/dotnet/README
deleted file mode 100644
index 8cad7bab8f..0000000000
--- a/ext/rpc/dotnet/README
+++ /dev/null
@@ -1,32 +0,0 @@
-Warning
-=======
-
-This support is EXPERIMENTAL. In fact, it integrates code that
-Microsoft labels as pre-beta. Use at your own risk.
-
-Build instructions
-==================
-
-Download and install the .NET Framework SDK Technology Preview from
-http://msdn.microsoft.com/net/#sdk. Once installed, copy Mscoree.h
-(typically found in C:\Program Files\NGWSSDK\Include to ext\dotnet).
-Do not simply add the NGWSSDK\Include directory to the include path
-as this will cause compilation failures.
-
-Download and unzip the source to the dm.net COM Moniker from
-http://staff.develop.com/jasonw/clr/readme.htm. Copy mscorlib.h
-to ext\dotnet. There is no need to register the clrmonsrv.dll as
-it is not used.
-
-At this point, the dotnet project can be built like any other
-project, from either VisualStudio 6's GUI or from the command line.
-Example command line invocation:
-
- msdev dotnet.dsp /MAKE "dotnet - Win32 Debug_TS"
-
-Execution instructions:
-=======================
-
-Add "extension=php_dotnet.dll" into php.ini.
-
-Sample program can be found at dotnet.php
diff --git a/ext/rpc/dotnet/dotnet.cpp b/ext/rpc/dotnet/dotnet.cpp
deleted file mode 100644
index f507f3d2f3..0000000000
--- a/ext/rpc/dotnet/dotnet.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sam Ruby <rubys@us.ibm.com> |
- | Harald Radi <h.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * This module implements support for Microsoft .Net components.
- */
-
-/*
- * 28.1.2001
- * use external unicode conversion functions
- *
- * harald radi <h.radi@nme.at>
- */
-
-#ifdef PHP_WIN32
-
-#include <iostream>
-#include <math.h>
-#include <comdef.h>
-
-extern "C"
-{
-#include "php.h"
-#include "ext/standard/info.h"
-}
-
-#include "ext/com/conversion.h"
-#include "ext/com/php_COM.h"
-
-#include "Mscoree.h"
-#include "mscorlib.h"
-
-using namespace mscorlib;
-
-static ICorRuntimeHost *pHost;
-static mscorlib::_AppDomain *pDomain;
-
-static zend_class_entry dotnet_class_entry;
-static int codepage;
-
-HRESULT dotnet_init() {
- HRESULT hr;
-
- hr = CoCreateInstance(CLSID_CorRuntimeHost, NULL, CLSCTX_ALL,
- IID_ICorRuntimeHost, (void **)&pHost);
- if (FAILED(hr)) return hr;
-
- hr = pHost->Start();
- if (FAILED(hr)) return hr;
-
- IUnknown *uDomain;
- hr = pHost->GetDefaultDomain(&uDomain);
- if (FAILED(hr)) return hr;
-
- hr = uDomain->QueryInterface(__uuidof(_AppDomain), (void**) &pDomain);
- if (FAILED(hr)) return -1;
-
- uDomain->Release();
-
- return ERROR_SUCCESS;
-}
-
-HRESULT dotnet_create(OLECHAR *assembly, OLECHAR *datatype, comval *obj TSRMLS_DC) {
- HRESULT hr;
-
- _ObjectHandle *pHandle;
- hr = pDomain->CreateInstance(_bstr_t(assembly), _bstr_t(datatype), &pHandle);
- if (FAILED(hr)) return hr;
- if (!pHandle) return hr;
-
- _variant_t unwrapped;
- hr = pHandle->Unwrap(&unwrapped);
- pHandle->Release();
- if (FAILED(hr)) return hr;
-
- php_COM_set(obj, &unwrapped.pdispVal, TRUE TSRMLS_CC);
- return ERROR_SUCCESS;
-}
-
-void dotnet_term() {
- if (pHost) pHost->Stop();
- if (pHost) pHost->Release();
- if (pDomain) pDomain->Release();
-
- pHost = 0;
- pDomain = 0;
-}
-
-/* {{{ proto int dotnet_load(string assembly_name [, string datatype_name, int codepage])
- Loads a DOTNET module */
-PHP_FUNCTION(dotnet_load)
-{
- HRESULT hr;
- pval *assembly_name, *datatype_name, *code_page;
- OLECHAR *assembly, *datatype;
- comval *obj;
-
- switch(ZEND_NUM_ARGS())
- {
- case 2:
- getParameters(ht, 2, &assembly_name, &datatype_name);
- codepage = CP_ACP;
- break;
- case 3:
- getParameters(ht, 3, &assembly_name, &datatype_name, &code_page);
-
- convert_to_long(code_page);
- codepage = Z_LVAL_P(code_page);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string(assembly_name);
- assembly = php_char_to_OLECHAR(Z_STRVAL_P(assembly_name), Z_STRLEN_P(assembly_name), codepage TSRMLS_CC);
-
- convert_to_string(datatype_name);
- datatype = php_char_to_OLECHAR(Z_STRVAL_P(datatype_name), Z_STRLEN_P(datatype_name), codepage TSRMLS_CC);
-
- ALLOC_COM(obj);
-
- /* obtain IDispatch */
- hr = dotnet_create(assembly, datatype, obj TSRMLS_CC);
- efree(assembly);
- efree(datatype);
- if (FAILED(hr)) {
- char *error_message;
- error_message = php_COM_error_message(hr TSRMLS_CC);
- php_error(E_WARNING, "Error obtaining .Net class for %s in assembly %s: %s", datatype_name->value.str.val, assembly_name->value.str.val, error_message);
- LocalFree(error_message);
- efree(obj);
- RETURN_FALSE;
- }
- if (C_DISPATCH(obj) == NULL) {
- php_error(E_WARNING, "Unable to locate %s in assembly %s", datatype_name->value.str.val, assembly_name->value.str.val);
- efree(obj);
- RETURN_FALSE;
- }
-
- RETURN_LONG(zend_list_insert(obj, IS_COM));
-}
-/* }}} */
-
-
-void php_DOTNET_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
-
- if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL(function_name->element), "dotnet")) { /* constructor */
- pval *object_handle;
-
- PHP_FN(dotnet_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (!Z_LVAL_P(return_value)) {
- ZVAL_FALSE(object);
- return;
- }
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
- } else {
- php_COM_call_function_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, property_reference);
- }
-}
-
-void php_register_DOTNET_class(TSRMLS_D)
-{
- INIT_OVERLOADED_CLASS_ENTRY(dotnet_class_entry, "DOTNET", NULL,
- php_DOTNET_call_function_handler,
- php_COM_get_property_handler,
- php_COM_set_property_handler);
-
- zend_register_internal_class(&dotnet_class_entry TSRMLS_CC);
-}
-
-function_entry DOTNET_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static PHP_MINFO_FUNCTION(DOTNET)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, ".NET support", "enabled");
- php_info_print_table_end();
-}
-
-PHP_MINIT_FUNCTION(DOTNET)
-{
- HRESULT hr;
-
- if (FAILED(hr = dotnet_init())) {
- return hr;
- }
-
- php_register_DOTNET_class(TSRMLS_C);
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(DOTNET)
-{
- dotnet_term();
- return SUCCESS;
-}
-
-
-zend_module_entry dotnet_module_entry = {
- STANDARD_MODULE_HEADER,
- "dotnet", DOTNET_functions, PHP_MINIT(DOTNET), PHP_MSHUTDOWN(DOTNET), NULL, NULL, PHP_MINFO(DOTNET), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-BEGIN_EXTERN_C()
-ZEND_GET_MODULE(dotnet)
-END_EXTERN_C()
-
-#endif
diff --git a/ext/rpc/dotnet/dotnet.dsp b/ext/rpc/dotnet/dotnet.dsp
deleted file mode 100644
index 1a7d790802..0000000000
--- a/ext/rpc/dotnet/dotnet.dsp
+++ /dev/null
@@ -1,167 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dotnet" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dotnet - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dotnet.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dotnet.mak" CFG="dotnet - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dotnet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dotnet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dotnet - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dotnet - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dotnet - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "dotnet - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "dotnet - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /D /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dotnet.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "dotnet - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dotnet.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dotnet - Win32 Release"
-# Name "dotnet - Win32 Debug"
-# Name "dotnet - Win32 Debug_TS"
-# Name "dotnet - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dotnet.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_dotnet.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\README
-# End Source File
-# End Target
-# End Project
diff --git a/ext/rpc/dotnet/dotnet.php b/ext/rpc/dotnet/dotnet.php
deleted file mode 100644
index 3b0b67c02f..0000000000
--- a/ext/rpc/dotnet/dotnet.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?
- $stack = new DOTNET("mscorlib","System.Collections.Stack");
-
- $stack->Push(".Net");
- $stack->Push("Hello ");
-
- echo $stack->Pop() . $stack->Pop();
-?>
diff --git a/ext/rpc/dotnet/php_dotnet.h b/ext/rpc/dotnet/php_dotnet.h
deleted file mode 100644
index b56af145e2..0000000000
--- a/ext/rpc/dotnet/php_dotnet.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef PHP_DOTNET_H
-#define PHP_DOTNET_H
-
-#if WIN32|WINNT
-
-PHP_MINIT_FUNCTION(DOTNET);
-PHP_MSHUTDOWN_FUNCTION(DOTNET);
-PHP_FUNCTION(DOTNET_load);
-
-extern zend_module_entry DOTNET_module_entry;
-#define DOTNET_module_ptr &DOTNET_module_entry
-
-#else
-
-#define DOTNET_module_ptr NULL
-
-#endif /* Win32|WINNT */
-
-#define phpext_DOTNET_ptr DOTNET_module_ptr
-
-#endif /* PHP_DOTNET_H */
diff --git a/ext/rpc/handler.h b/ext/rpc/handler.h
deleted file mode 100644
index 04ec2c2f09..0000000000
--- a/ext/rpc/handler.h
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef HANDLER_H
-#define HANDLER_H
-
-#include "php.h"
-
-#define RPC_HANDLER(layer) {#layer, layer##_handler_init, &layer##_object_handlers, \
- &layer##_class_entry, layer##_function_entry, \
- layer##_method_entry}
-
-#define RPC_DECLARE_HANDLER(layer) void layer##_handler_init(); \
- rpc_object_handlers layer##_object_handlers; \
- zend_class_entry layer##_class_entry; \
- function_entry layer##_function_entry[]; \
- function_entry layer##_method_entry[];
-
-#define RPC_INIT_FUNCTION(layer) void layer##_handler_init()
-
-#define RPC_REGISTER_HANDLERS_START(layer) zend_class_entry layer##_class_entry; \
- rpc_object_handlers layer##_object_handlers = {
-
-#define RPC_REGISTER_HANDLERS_END() };
-
-
-#define RPC_FUNCTION_ENTRY_START(layer) function_entry layer##_function_entry[] = { \
- ZEND_FALIAS(layer##_load, rpc_load, NULL) \
- ZEND_FALIAS(layer##_call, rpc_call, NULL) \
- ZEND_FALIAS(layer##_get, rpc_get, NULL) \
- ZEND_FALIAS(layer##_set, rpc_set, NULL)
-
-#define RPC_FUNCTION_ENTRY_END() {NULL, NULL, NULL} \
- };
-
-#define RPC_METHOD_ENTRY_START(layer) function_entry layer##_method_entry[] = {
-
-#define RPC_METHOD_ENTRY_END() {NULL, NULL, NULL} \
- };
-
-#define POOL TRUE
-#define DONT_POOL FALSE
-
-#define DONT_HASH 0
-#define HASH_AS_INT 1
-#define HASH_AS_STRING 2
-#define HASH_WITH_SIGNATURE 4
-#define HASH_AS_INT_WITH_SIGNATURE (HASH_AS_INT + HASH_WITH_SIGNATURE)
-#define HASH_AS_STRING_WITH_SIGNATURE (HASH_AS_STRING + HASH_WITH_SIGNATURE)
-
-#define CLASS 0
-#define METHOD 1
-#define PROPERTY 2
-
-
-/* rpc handler that have to be implemented by a
- * specific rpc layer
- */
-typedef struct _rpc_object_handlers {
- const zend_bool pool_instances;
- const zend_uint hash_type;
- int (*rpc_hash)(char *name, zend_uint name_len, char **hash, zend_uint *hash_len, int num_args, char *arg_types, int type);
- int (*rpc_ctor)(char *class_name, zend_uint class_name_len, void **data, int num_args, zval **args[]);
- int (*rpc_dtor)(void **data);
- int (*rpc_call)(char *method_name, zend_uint method_name_len, void **data, zval **return_value, int num_args, zval **args[]);
- int (*rpc_get)(char *property_name, zend_uint property_name_len, zval *return_value, void **data);
- int (*rpc_set)(char *property_name, zend_uint property_name_len, zval *value, void **data);
- int (*rpc_compare)(void **data1, void **data2);
- int (*rpc_get_classname)(char **class_name, zend_uint *class_name_length, void **data);
- int (*rpc_has_property)(char *property_name, zend_uint property_name_length, void **data);
- int (*rpc_unset_property)(char *property_name, zend_uint property_name_length, void **data);
- int (*rpc_get_properties)(HashTable **properties, void **data);
-} rpc_object_handlers;
-
-/* handler entry */
-typedef struct _rpc_handler_entry {
- char *name;
- void (*rpc_handler_init)();
- rpc_object_handlers *handlers;
- zend_class_entry *ce;
- function_entry *functions;
- function_entry *methods;
-} rpc_handler_entry;
-
-/* string */
-typedef struct _rpc_string {
- char *str;
- zend_uint len;
-} rpc_string;
-
-/* class/method/function hash */
-typedef struct _rpc_class_hash {
- rpc_string name; /* must be first entry */
- TsHashTable methods;
- TsHashTable properties;
-} rpc_class_hash;
-
-/* internal data */
-typedef struct _rpc_internal {
- char *class_name;
- zend_uint class_name_len;
- zend_class_entry *ce;
- rpc_object_handlers **handlers;
- void *data;
- zend_uint refcount;
- zend_uint clonecount;
- zend_bool pool_instances;
- rpc_class_hash *hash;
- TsHashTable function_table;
- MUTEX_T mx_handler;
-} rpc_internal;
-
-/* proxy data */
-typedef struct _rpc_proxy {
- zend_uint refcount;
- zend_uint clonecount;
-} rpc_proxy;
-
-
-#endif /* HANDLER_H */ \ No newline at end of file
diff --git a/ext/rpc/java/CREDITS b/ext/rpc/java/CREDITS
deleted file mode 100644
index f49489bcf8..0000000000
--- a/ext/rpc/java/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Java
-Sam Ruby
diff --git a/ext/rpc/java/EXPERIMENTAL b/ext/rpc/java/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/rpc/java/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/rpc/java/Makefile.frag b/ext/rpc/java/Makefile.frag
deleted file mode 100644
index ff2a79a27f..0000000000
--- a/ext/rpc/java/Makefile.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-
-$(srcdir)/java.c : $(srcdir)/php_java.jar
-
-$(srcdir)/php_java.jar : $(srcdir)/reflect.java
- $(mkinstalldirs) $(srcdir)/net/php
- @cp $(srcdir)/reflect.java $(srcdir)/net/php
- @echo library=php_java > $(srcdir)/net/php/reflect.properties
- $(JAVA_C) $(srcdir)/net/php/reflect.java
- @test ! -f reflect.class || mv reflect.class $(srcdir)/net/php # bug in KJC javac
- $(JAVA_JAR) $(srcdir)/php_java.jar $(srcdir)/net/php/*.class $(srcdir)/net/php/*.properties
- @rm $(srcdir)/net/php/reflect.*
- @rmdir $(srcdir)/net/php
- @rmdir $(srcdir)/net
diff --git a/ext/rpc/java/README b/ext/rpc/java/README
deleted file mode 100644
index 7a84db5be8..0000000000
--- a/ext/rpc/java/README
+++ /dev/null
@@ -1,243 +0,0 @@
-What is PHP4 ext/java?
-
- PHP4 ext/java provides a simple and effective means for creating and
- invoking methods on Java objects from PHP. The JVM is created using JNI,
- and everything runs in-process.
-
- Two examples are provided, jver and jawt, to illustrate usage of this
- extension. A few things to note:
-
- 1) new Java() will create an instance of a class if a suitable constructor
- is available. If no parameters are passed and the default constructor
- is useful as it provides access to classes like "java.lang.System"
- which expose most of their functionallity through static methods.
-
- 2) Accessing a member of an instance will first look for bean properties
- then public fields. In other words, "print $date.time" will first
- attempt to be resolved as "$date.getTime()", then as "$date.time";
-
- 3) Both static and instance members can be accessed on an object with
- the same syntax. Furthermore, if the java object is of type
- "java.lang.Class", then static members of the class (fields and
- methods) can be accessed.
-
- 4) Exceptions raised result in PHP warnings, and null results. The
- warnings may be eliminated by prefixing the method call with an
- "@" sign. The following APIs may be used to retrieve and reset
- the last error:
-
- java_last_exception_get()
- java_last_exception_clear()
-
- 5) Overload resolution is in general a hard problem given the
- differences in types between the two languages. The PHP Java
- extension employs a simple, but fairly effective, metric for
- determining which overload is the best match.
-
- Additionally, method names in PHP are not case sensitive, potentially
- increasing the number of overloads to select from.
-
- Once a method is selected, the parameters are cooerced if necessary,
- possibly with a loss of data (example: double precision floating point
- numbers will be converted to boolean).
-
- 6) In the tradition of PHP, arrays and hashtables may pretty much
- be used interchangably. Note that hashtables in PHP may only be
- indexed by integers or strings; and that arrays of primitive types
- in Java can not be sparse. Also note that these constructs are
- passed by value, so may be expensive in terms of memory and time.
-
-Build and execution instructions:
-
- Given the number of platforms and providers of JVMs, no single set of
- instructions will be able to cover all cases. So in place of hard and
- fast instructions, below are a working examples for a number of free and
- commercial implementations and platforms. Please adjust the paths to
- suit your installation. Also, if you happen to get this to work on
- another JVM/platform combination, please let me know, particularly if
- a unique build or execution setup was required.
-
- Note for Windows users: semi-colons (";") mark the beginning of
- comments in php.ini files, so if you wish to add to the classpath,
- make sure that the entire string is in quotes. See the JDK 1.1.8
- instructions below for an example.
-
- This function has been tested in both CGI and Apache (apxs) modes. As
- the current design requires shared libraries, this support can not be
- linked statically into Apache.
-
- With ext/java, no Java Virtual Machines are created until the first
- Java call is made. This not only eliminates unnecessary overhead if
- the extension is never used, it also provides error messages directly
- back to the user instead of being burried in a log some place.
-
- For people interested in robustness, performance, and more complete
- integration with Java, consider using the sapi/servlet interface which
- is built upon the Java extension. Running PHP as a servlet enables PHP
- to utilize the existing JVM and threads from the servlet engine, and
- provides direct access to the servlet request and response objects.
-
- Finally, the bottom of this readme contains some guidance for how to
- approach situations in which these instructions don't work on your
- machine.
-
-========================================================================
-=== JVM=Kaffe 1.0.4 (as delivered with OS), OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.library.path=/usr/lib/kaffe:/home/rubys/php4/modules
- java.class.path=/usr/share/kaffe/Klasses.jar:/home/rubys/php4/modules/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Kaffe 1.0.5 (built from source), OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.library.path=/usr/local/lib/kaffe:/home/rubys/php4/modules
- java.class.path=/usr/local/share/kaffe/Klasses.jar:/home/rubys/php4/modules/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=IBM 1.1.8, OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.class.path=/home/jdk118/lib/classes.zip:/home/rubys/php4/modules/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Blackdown 1.2.2 RC4, OS=Redhat Linux 6.1 ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.class.path=/home/rubys/php4/lib/php_java.jar
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Sun JDK 1.2.2, OS=Linux ===
-========================================================================
-
-build instructions:
-
- ./configure --with-java
-
-php.ini:
-
- [java]
- java.class.path=/home/rubys/php4/lib/php_java.jar
- java.library.path=/home/rubys/php4/modules
- extension_dir=/home/rubys/php4/modules
- extension=java.so
-
-========================================================================
-=== JVM=Sun JDK 1.1.8, OS=Windows NT 4 ===
-========================================================================
-
-build instructions:
-
- SET JAVA_HOME=D:\jdk1.1.8
- msdev ext\java\java.dsp /MAKE "java - Win32 Debug_TS"
-
-php.ini:
-
- [java]
- java.class.path="D:\jdk1.1.8\lib\classes.zip;F:\PHP4\Debug_TS\php_java.jar"
- extension=php_java.dll
-
-========================================================================
-=== JVM=Sun JDK 1.2.2, OS=Windows NT 4 ===
-========================================================================
-
-build instructions:
-
- SET JAVA_HOME=D:\jdk1.2.2
- msdev ext\java\java.dsp /MAKE "java - Win32 Debug_TS"
-
-php.ini:
-
- [java]
- java.class.path=F:\PHP4\Debug_TS\php_java.jar
- extension=php_java.dll
-
-=========================================================================
-
-Guidance for when these instructions don't work.
-
- JDK vendors don't typically document their internal workings, and are
- typically very reliant on code inside of the JAVA main program and the
- installation directory structure. For this reason, running PHP as a
- servlet is typically much easier to get working. But if for some reason
- this is not appropriate for you, and the instructions above don't work,
- then read on.
-
- The first thing to realize is that the directory structure of the JDK is
- very important. Some users (particularly on Windows) get a message about
- a DLL or shared library not being available and proceed to find that file
- and copy it into a system directory. This typically just gets you to the
- next problem - for example, it appears that many JDKs attempt to locate
- the runtime Java classes (rt.jar) in a directory relative to these system
- libraries. So unless you are inclined to copy your entire Java
- installation, you are much better adjusting your PATHs.
-
- Not documented above, but useful for many JDK's is ability to specify the
- library path via java.library.path in the php.ini. On many Unix machines,
- determining the initial value for this can be done by changing directory
- to where you find a shared library that can't be loaded (example:
- libjava.so), and executing "ld libjava.so". If you see some modules
- listed as "not found", add the necessary directories to LD_LIBRARY_PATH
- and repeat until successful. On my system, I require the following
- two directories.
-
- /home/jdk1.2.2/jre/lib/i386/native_threads
- /home/jdk1.2.2/jre/lib/i386/classic
-
- Note: this only determines the statically loaded libraries. Additional
- libraries (such as libzip.so) may be loaded dynamically. On my system,
- libzip.so is located in
-
- /home/jdk1.2.2/jre/lib/i386
-
- Another php.ini variable which may be helpful is java.home.
-
- If java.library.path doesn't work for you (it won't on any JDK 1.1
- implementations, for example), then try setting the system PATH or the
- LD_LIBRARY_PATH before starting your web server. For Apache on Linux
- systems, this can be accomplished by editing the Root's .bashrc and
- adding the necessary export LD_LIBRARY_PATH statement.
-
- If that doesn't work, try dividing an (hopefully) conquering by temporarily
- eliminating items such as Apache from the process by adjusting the
- arguments passed to the ./configure command (i.e., removing --with-apxs).
-
- If all else fails, "man dlopen" on Unix systems will give more insight on
- what the system is trying to do internally.
diff --git a/ext/rpc/java/config.m4 b/ext/rpc/java/config.m4
deleted file mode 100644
index 6ad4afbed4..0000000000
--- a/ext/rpc/java/config.m4
+++ /dev/null
@@ -1,133 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(java, for JAVA support,
-[ --with-java[=DIR] Include Java support. DIR is the JDK base install directory.
- This extension is always built as shared.])
-
-if test "$PHP_JAVA" != "no"; then
-
- pltform=`uname -s 2>/dev/null`
- java_libext=libjava.so
- case $pltform in
- AIX) java_libext=libjava.a ;;
- HP-UX) java_libext=libjava.sl ;;
- esac
-
- if test "$PHP_JAVA" = "yes"; then
- if JAVA_JAR=`which jar 2>/dev/null`; then
- JAVA_JAR="$JAVA_JAR cf"
- else
- JAVA_JAR=
- fi
- PHP_JAVAC=`which javac`
- if test -z "$PHP_JAVAC"; then
- AC_MSG_ERROR([Unable to locate the javac binary in your system path
-Either adjust your Java installation or provide the Java installation path,
-e.g. --with-java=/java expecting /java/bin/ to contain the binaries])
- fi
- PHP_JAVA=`cd \`dirname \\\`which javac\\\`\`/..;pwd`
- else
- test -x $PHP_JAVA/bin/jar && JAVA_JAR="$PHP_JAVA/bin/jar cf"
- fi
-
- # substitute zip for systems which don't have jar
- if test -z "$JAVA_JAR"; then
- JAVA_JAR='zip -q0'
- fi
-
- if test -x $PHP_JAVA/bin/javac; then
- JAVA_C=$PHP_JAVA/bin/javac
- else
- AC_MSG_ERROR([Can not find the javac binary under $PHP_JAVA/bin/])
- fi
-
- if test -d $PHP_JAVA/lib/kaffe; then
- PHP_ADD_LIBPATH($PHP_JAVA/lib)
- JAVA_CFLAGS=-DKAFFE
- JAVA_INCLUDE=-I$PHP_JAVA/include/kaffe
- JAVA_CLASSPATH=$PHP_JAVA/share/kaffe/Klasses.jar
- JAVA_LIB=kaffevm
- JAVA_LIBPATH=$PHP_JAVA/lib/kaffe
- java_libext=kaffevm
-
- test -f $PHP_JAVA/lib/$JAVA_LIB && JAVA_LIBPATH=$PHP_JAVA/lib
- test -f $PHP_JAVA/lib/kaffe/$JAVA_LIB && JAVA_LIBPATH=$PHP_JAVA/lib/kaffe
-
- # accomodate old versions of kaffe which don't support jar
- if kaffe -version 2>&1 | grep 1.0b > /dev/null; then
- JAVA_JAR='zip -q0'
- fi
-
- elif test -f $PHP_JAVA/lib/$java_libext; then
- JAVA_LIB=java
- JAVA_LIBPATH=$PHP_JAVA/lib
- JAVA_INCLUDE=-I$PHP_JAVA/include
- test -f $PHP_JAVA/lib/classes.zip && JAVA_CFLAGS=-DJNI_11
- test -f $PHP_JAVA/lib/jvm.jar && JAVA_CFLAGS=-DJNI_12
- test -f $PHP_JAVA/lib/classes.zip && JAVA_CLASSPATH=$PHP_JAVA/lib/classes.zip
- test -f $PHP_JAVA/lib/jvm.jar && JAVA_CLASSPATH=$PHP_JAVA/lib/jvm.jar
-
- for i in $PHP_JAVA/include/*; do
- test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE $i"
- done
-
- else
-
- for i in `find $PHP_JAVA/include -type d`; do
- test -f $i/jni.h && JAVA_INCLUDE=-I$i
- test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE -I$i"
- done
-
- for i in `find $PHP_JAVA/. -type d`; do
- test -f $i/classes.zip && JAVA_CFLAGS=-DJNI_11
- test -f $i/rt.jar && JAVA_CFLAGS=-DJNI_12
- test -f $i/classes.zip && JAVA_CLASSPATH=$i/classes.zip
- test -f $i/rt.jar && JAVA_CLASSPATH=$i/rt.jar
-
- if test -f $i/$java_libext; then
- JAVA_LIB=java
- JAVA_LIBPATH=$i
- test -d $i/hotspot && PHP_ADD_LIBPATH($i/hotspot)
- test -d $i/classic && PHP_ADD_LIBPATH($i/classic)
- test -d $i/server && PHP_ADD_LIBPATH($i/server)
- test -d $i/native_threads && PHP_ADD_LIBPATH($i/native_threads)
- fi
- done
-
- if test -z "$JAVA_INCLUDE"; then
- AC_MSG_RESULT(no)
- AC_MSG_ERROR(unable to find Java VM libraries)
- fi
-
- JAVA_CFLAGS="$JAVA_CFLAGS -D_REENTRANT"
- fi
-
- AC_DEFINE(HAVE_JAVA,1,[ ])
-
- if test -z "$JAVA_LIBPATH"; then
- AC_MSG_ERROR(unable to find Java VM libraries)
- fi
-
- PHP_ADD_LIBPATH($JAVA_LIBPATH)
- JAVA_CFLAGS="$JAVA_CFLAGS '-DJAVALIB=\"$JAVA_LIBPATH/$java_libext\"'"
-
- if test "$PHP_SAPI" != "servlet"; then
- PHP_NEW_EXTENSION(java, java.c, shared,, $JAVA_CFLAGS $JAVA_INCLUDE)
-
- if test "$PHP_SAPI" = "cgi"; then
- PHP_ADD_LIBRARY($JAVA_LIB)
- fi
-
- INSTALL_IT="$INSTALL_IT; \$(srcdir)/build/shtool mkdir -p -f -m 0755 \$(INSTALL_ROOT)\$(libdir)"
- INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 \$(srcdir)/ext/java/php_java.jar \$(INSTALL_ROOT)\$(libdir)"
- fi
-
- PHP_SUBST(JAVA_CLASSPATH)
- PHP_SUBST(JAVA_JAR)
- PHP_SUBST(JAVA_C)
-
- PHP_ADD_MAKEFILE_FRAGMENT
-fi
-
diff --git a/ext/rpc/java/except.php b/ext/rpc/java/except.php
deleted file mode 100644
index a7e6a79c08..0000000000
--- a/ext/rpc/java/except.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?
- $stack=new Java("java.util.Stack");
- $stack->push(1);
-
- #
- # Should succeed and print out "1"
- #
- $result = $stack->pop();
- $ex = java_last_exception_get();
- if (!$ex) print "$result\n";
-
- #
- # Should fail - note the "@" eliminates the warning
- #
- $result=@$stack->pop();
- $ex=java_last_exception_get();
- if ($ex) print $ex->toString();
-
- #
- # Reset last exception
- #
- java_last_exception_clear();
-?>
diff --git a/ext/rpc/java/java.c b/ext/rpc/java/java.c
deleted file mode 100644
index 6a0fadb675..0000000000
--- a/ext/rpc/java/java.c
+++ /dev/null
@@ -1,786 +0,0 @@
- /*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sam Ruby (rubys@us.ibm.com) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-/*
- * This module implements Zend OO syntax overloading support for Java
- * components using JNI and reflection.
- */
-
-#include "php.h"
-#include "zend_compile.h"
-#include "php_ini.h"
-#include "php_globals.h"
-
-#ifdef PHP_WIN32
- #include "win32/winutil.h"
- #define DL_ERROR php_win_err()
-#else
- #define DL_ERROR dlerror()
-#endif
-
-#include <jni.h>
-
-#include <stdio.h>
-
-#define IS_EXCEPTION 86
-
-/***************************************************************************/
-
-#ifndef KAFFE
-#ifndef JNI_11
-#ifndef JNI_12
-
-#ifdef JNI_VERSION_1_2
-#define JNI_12
-#else
-#define JNI_11
-#endif
-
-#endif
-#endif
-#endif
-
-#ifdef PHP_WIN32
-#ifdef JNI_12
-#define JAVALIB "jvm.dll"
-#else
-#define JAVALIB "javai.dll"
-#endif
-#else
-#endif
-
-/***************************************************************************/
-
-static int le_jobject = 0;
-
-static char *classpath = 0;
-static char *libpath = 0;
-static char *javahome = 0;
-static char *javalib = 0;
-
-static int iniUpdated = 0;
-static void *dl_handle = 0;
-
-ZEND_BEGIN_MODULE_GLOBALS(java)
- JavaVM *jvm;
- JNIEnv *jenv;
- jobject php_reflect;
- jclass reflect_class;
-ZEND_END_MODULE_GLOBALS(java)
-
-#ifdef ZTS
-# define JG(v) TSRMG(java_globals_id, zend_java_globals *, v)
-#else
-# define JG(v) (java_globals.v)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(java)
-
-static zend_class_entry java_class_entry;
-
-static PHP_INI_MH(OnIniUpdate)
-{
- if (new_value) *(char**)mh_arg1 = new_value;
- iniUpdated=1;
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- PHP_INI_ENTRY1("java.class.path", NULL, PHP_INI_ALL, OnIniUpdate, &classpath)
-#ifndef JNI_11
- PHP_INI_ENTRY1("java.home", NULL, PHP_INI_ALL, OnIniUpdate, &javahome)
- PHP_INI_ENTRY1("java.library.path", NULL, PHP_INI_ALL, OnIniUpdate, &libpath)
-#endif
-#ifdef JAVALIB
- PHP_INI_ENTRY1("java.library", JAVALIB, PHP_INI_ALL, OnIniUpdate, &javalib)
-#else
- PHP_INI_ENTRY1("java.library", NULL, PHP_INI_ALL, OnIniUpdate, &javalib)
-#endif
-PHP_INI_END()
-
-/***************************************************************************/
-
-/*
- * Destroy a Java Virtual Machine.
- */
-void jvm_destroy(TSRMLS_D)
-{
- if (JG(php_reflect)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), JG(php_reflect));
- if (JG(jvm)) {
- (*JG(jvm))->DetachCurrentThread(JG(jvm));
- (*JG(jvm))->DestroyJavaVM(JG(jvm));
- JG(jvm) = 0;
- }
- if (dl_handle) DL_UNLOAD(dl_handle);
- JG(php_reflect) = 0;
- JG(jenv) = 0;
-}
-
-/*
- * Create a Java Virtual Machine.
- * - class.path, home, and library.path are read out of the INI file
- * - appropriate (pre 1.1, JDK 1.1, and JDK 1.2) initialization is performed
- * - net.php.reflect class file is located
- */
-
-#ifdef JNI_12
-static void addJVMOption(JavaVMInitArgs *vm_args, char *name, char *value)
-{
- char *option = (char*) malloc(strlen(name) + strlen(value) + 1);
- strcpy(option, name);
- strcat(option, value);
- vm_args->options[vm_args->nOptions++].optionString = option;
-}
-#endif
-
-static int jvm_create(TSRMLS_D)
-{
- int rc;
- jobject local_php_reflect;
- jthrowable error;
-
- jint (JNICALL *JNI_CreateVM)(const void*, const void*, void*);
-#ifndef JNI_12
- jint (JNICALL *JNI_DefaultArgs)(void*);
-#endif
-
-#ifdef JNI_11
- JDK1_1InitArgs vm_args;
-#else
- JavaVMInitArgs vm_args;
-#ifdef JNI_12
- JavaVMOption options[3];
-#endif
-#endif
-
- iniUpdated=0;
-
- if (javalib) {
- dl_handle = DL_LOAD(javalib);
-
- if (!dl_handle) {
- php_error(E_ERROR, "Unable to load Java Library %s, error: %s",
- javalib, DL_ERROR);
- return -1;
- }
- }
-
-#ifndef JAVALIB
- if (!dl_handle)
- JNI_CreateVM = &JNI_CreateJavaVM;
- else
-#endif
-
- JNI_CreateVM = (jint (JNICALL *)(const void*, const void*, void*))
- DL_FETCH_SYMBOL(dl_handle, "JNI_CreateJavaVM");
-
- if (!JNI_CreateVM) {
- php_error(E_ERROR, "Unable to locate CreateJavaVM function");
- return -1;
- }
-
-#ifdef JNI_12
-
- vm_args.version = JNI_VERSION_1_2;
- vm_args.ignoreUnrecognized = JNI_FALSE;
- vm_args.options = options;
- vm_args.nOptions = 0;
-
- if (classpath) addJVMOption(&vm_args, "-Djava.class.path=", classpath);
- if (javahome) addJVMOption(&vm_args, "-Djava.home=", javahome);
- if (libpath) addJVMOption(&vm_args, "-Djava.library.path=", libpath);
-
-#else
-
-#ifndef JAVALIB
- if (!dl_handle)
- JNI_DefaultArgs = &JNI_GetDefaultJavaVMInitArgs;
- else
-#endif
-
- JNI_DefaultArgs = (jint (JNICALL *)(void*))
- DL_FETCH_SYMBOL(dl_handle, "JNI_GetDefaultJavaVMInitArgs");
-
- if (!JNI_DefaultArgs) {
- php_error(E_ERROR, "Unable to locate GetDefaultJavaVMInitArgs function");
- return -1;
- }
-
- vm_args.version=0x00010001;
- (*JNI_DefaultArgs)(&vm_args);
-
- if (!classpath) classpath = "";
- vm_args.classpath = classpath;
-#ifdef KAFFE
- vm_args.classhome = javahome;
- vm_args.libraryhome = libpath;
-#endif
-
-#endif
-
- rc = (*JNI_CreateVM)(&JG(jvm), &JG(jenv), &vm_args);
-
- if (rc) {
- php_error(E_ERROR, "Unable to create Java Virtual Machine");
- return rc;
- }
-
- JG(reflect_class) = (*JG(jenv))->FindClass(JG(jenv), "net/php/reflect");
- error = (*JG(jenv))->ExceptionOccurred(JG(jenv));
- if (error) {
- jclass errClass;
- jmethodID toString;
- jobject errString;
- const char *errAsUTF;
- jboolean isCopy;
- JNIEnv *jenv = JG(jenv);
- (*jenv)->ExceptionClear(jenv);
- errClass = (*jenv)->GetObjectClass(jenv, error);
- toString = (*jenv)->GetMethodID(jenv, errClass, "toString",
- "()Ljava/lang/String;");
- errString = (*jenv)->CallObjectMethod(jenv, error, toString);
- errAsUTF = (*jenv)->GetStringUTFChars(jenv, errString, &isCopy);
- php_error(E_ERROR, "%s", errAsUTF);
- if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, error, errAsUTF);
- jvm_destroy(TSRMLS_C);
- return -1;
- }
-
- local_php_reflect = (*JG(jenv))->AllocObject(JG(jenv), JG(reflect_class));
- JG(php_reflect) = (*JG(jenv))->NewGlobalRef(JG(jenv), local_php_reflect);
- return rc;
-}
-
-/***************************************************************************/
-
-static jobject _java_makeObject(pval* arg TSRMLS_DC)
-{
- JNIEnv *jenv = JG(jenv);
- jobject result;
- pval **handle;
- int type;
- jmethodID makeArg;
- jclass hashClass;
-
- switch (Z_TYPE_P(arg)) {
- case IS_STRING:
- result=(*jenv)->NewByteArray(jenv, Z_STRLEN_P(arg));
- (*jenv)->SetByteArrayRegion(jenv, (jbyteArray)result, 0,
- Z_STRLEN_P(arg), Z_STRVAL_P(arg));
- break;
-
- case IS_OBJECT:
- zend_hash_index_find(Z_OBJPROP_P(arg), 0, (void*)&handle);
- result = zend_list_find(Z_LVAL_PP(handle), &type);
- break;
-
- case IS_BOOL:
- makeArg = (*jenv)->GetMethodID(jenv, JG(reflect_class), "MakeArg",
- "(Z)Ljava/lang/Object;");
- result = (*jenv)->CallObjectMethod(jenv, JG(php_reflect), makeArg,
- (jboolean)(Z_LVAL_P(arg)));
- break;
-
- case IS_LONG:
- makeArg = (*jenv)->GetMethodID(jenv, JG(reflect_class), "MakeArg",
- "(J)Ljava/lang/Object;");
- result = (*jenv)->CallObjectMethod(jenv, JG(php_reflect), makeArg,
- (jlong)(Z_LVAL_P(arg)));
- break;
-
- case IS_DOUBLE:
- makeArg = (*jenv)->GetMethodID(jenv, JG(reflect_class), "MakeArg",
- "(D)Ljava/lang/Object;");
- result = (*jenv)->CallObjectMethod(jenv, JG(php_reflect), makeArg,
- (jdouble)(Z_DVAL_P(arg)));
- break;
-
- case IS_ARRAY:
- {
- jobject jkey, jval;
- zval **value;
- zval key;
- char *string_key;
- ulong num_key;
- jobject jold;
- jmethodID put, init;
-
- hashClass = (*jenv)->FindClass(jenv, "java/util/Hashtable");
- init = (*jenv)->GetMethodID(jenv, hashClass, "<init>", "()V");
- result = (*jenv)->NewObject(jenv, hashClass, init);
-
- put = (*jenv)->GetMethodID(jenv, hashClass, "put",
- "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
-
- /* Iterate through hash */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(arg));
- while(zend_hash_get_current_data(Z_ARRVAL_P(arg), (void**)&value) == SUCCESS) {
- jval = _java_makeObject(*value TSRMLS_CC);
-
- switch (zend_hash_get_current_key(Z_ARRVAL_P(arg), &string_key, &num_key, 0)) {
- case HASH_KEY_IS_STRING:
- Z_TYPE(key) = IS_STRING;
- Z_STRVAL(key) = string_key;
- Z_STRLEN(key) = strlen(string_key);
- jkey = _java_makeObject(&key TSRMLS_CC);
- break;
- case HASH_KEY_IS_LONG:
- Z_TYPE(key) = IS_LONG;
- Z_LVAL(key) = num_key;
- jkey = _java_makeObject(&key TSRMLS_CC);
- break;
- default: /* HASH_KEY_NON_EXISTANT */
- jkey = 0;
- }
- jold = (*jenv)->CallObjectMethod(jenv, result, put, jkey, jval);
- if (Z_TYPE_PP(value) != IS_OBJECT) (*jenv)->DeleteLocalRef(jenv, jval);
- zend_hash_move_forward(Z_ARRVAL_P(arg));
- }
-
- break;
- }
-
- default:
- result=0;
- }
-
- return result;
-}
-
-/***************************************************************************/
-
-static jobjectArray _java_makeArray(int argc, pval** argv TSRMLS_DC)
-{
- JNIEnv *jenv = JG(jenv);
-
- jclass objectClass = (*jenv)->FindClass(jenv, "java/lang/Object");
- jobjectArray result = (*jenv)->NewObjectArray(jenv, argc, objectClass, 0);
- jobject arg;
- int i;
-
- for (i=0; i<argc; i++) {
- arg = _java_makeObject(argv[i] TSRMLS_CC);
- (*jenv)->SetObjectArrayElement(jenv, result, i, arg);
- if (Z_TYPE_P(argv[i]) != IS_OBJECT) (*jenv)->DeleteLocalRef(jenv, arg);
- }
- return result;
-}
-
-
-static int checkError(pval *value)
-{
- if (Z_TYPE_P(value) == IS_EXCEPTION) {
- php_error(E_WARNING, "%s", Z_STRVAL_P(value));
- efree(Z_STRVAL_P(value));
- ZVAL_FALSE(value);
- return 1;
- };
- return 0;
-}
-
-
-/***************************************************************************/
-
-/*
- * Invoke a method on an object. If method name is "java", create a new
- * object instead.
- */
-void java_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- JNIEnv *jenv;
-
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *)
- property_reference->elements_list->tail->data;
-
- int arg_count = ZEND_NUM_ARGS();
- jlong result = 0;
- pval **arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
-
- getParametersArray(ht, arg_count, arguments);
-
- if (iniUpdated && JG(jenv)) jvm_destroy(TSRMLS_C);
- if (!JG(jenv)) jvm_create(TSRMLS_C);
- if (!JG(jenv)) return;
- jenv = JG(jenv);
-
- if (!strcmp("java", Z_STRVAL(function_name->element))) {
-
- /* construct a Java object:
- First argument is the class name. Any additional arguments will
- be treated as constructor parameters. */
-
- jmethodID co = (*jenv)->GetMethodID(jenv, JG(reflect_class), "CreateObject",
- "(Ljava/lang/String;[Ljava/lang/Object;J)V");
- jstring className;
- result = (jlong)(long)object;
-
- if (ZEND_NUM_ARGS() < 1) {
- php_error(E_ERROR, "Missing classname in new Java() call");
- return;
- }
-
- className=(*jenv)->NewStringUTF(jenv, Z_STRVAL_P(arguments[0]));
- (*jenv)->CallVoidMethod(jenv, JG(php_reflect), co,
- className, _java_makeArray(arg_count-1, arguments+1 TSRMLS_CC), result);
-
- (*jenv)->DeleteLocalRef(jenv, className);
-
- } else {
-
- pval **handle;
- int type;
- jobject obj;
- jstring method;
-
- /* invoke a method on the given object */
-
- jmethodID invoke = (*jenv)->GetMethodID(jenv, JG(reflect_class), "Invoke",
- "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;J)V");
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void**) &handle);
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- method = (*jenv)->NewStringUTF(jenv, Z_STRVAL(function_name->element));
- result = (jlong)(long)return_value;
-
- (*jenv)->CallVoidMethod(jenv, JG(php_reflect), invoke,
- obj, method, _java_makeArray(arg_count, arguments TSRMLS_CC), result);
-
- (*jenv)->DeleteLocalRef(jenv, method);
-
- }
-
- efree(arguments);
- pval_destructor(&function_name->element);
-
- checkError((pval*)(long)result);
-}
-
-/***************************************************************************/
-
-/* {{{ proto object java_last_exception_get(void)
- Get last Java exception */
-PHP_FUNCTION(java_last_exception_get)
-{
- jlong result = 0;
- jmethodID lastEx;
-
- if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
-
- result = (jlong)(long)return_value;
-
- lastEx = (*JG(jenv))->GetMethodID(JG(jenv), JG(reflect_class),
- "lastException", "(J)V");
-
- (*JG(jenv))->CallVoidMethod(JG(jenv), JG(php_reflect), lastEx, result);
-}
-
-/* }}} */
-
-/***************************************************************************/
-
-/* {{{ proto void java_last_exception_clear(void)
- Clear last java extension */
-PHP_FUNCTION(java_last_exception_clear)
-{
- jlong result = 0;
- jmethodID clearEx;
-
- if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
-
- result = (jlong)(long)return_value;
-
- clearEx = (*JG(jenv))->GetMethodID(JG(jenv), JG(reflect_class),
- "clearException", "()V");
-
- (*JG(jenv))->CallVoidMethod(JG(jenv), JG(php_reflect), clearEx);
-}
-
-/* }}} */
-
-/***************************************************************************/
-
-static pval _java_getset_property
- (zend_property_reference *property_reference, jobjectArray value TSRMLS_DC)
-{
- pval presult;
- jlong result = 0;
- pval **pobject;
- jobject obj;
- int type;
-
- /* get the property name */
- zend_llist_element *element = property_reference->elements_list->head;
- zend_overloaded_element *property=(zend_overloaded_element *)element->data;
- jstring propName;
-
- JNIEnv *jenv;
- jenv = JG(jenv);
-
- propName = (*jenv)->NewStringUTF(jenv, Z_STRVAL(property->element));
-
- /* get the object */
- zend_hash_index_find(Z_OBJPROP_P(property_reference->object),
- 0, (void **) &pobject);
- obj = zend_list_find(Z_LVAL_PP(pobject), &type);
- result = (jlong)(long) &presult;
- Z_TYPE(presult) = IS_NULL;
-
- if (!obj || (type!=le_jobject)) {
- php_error(E_ERROR,
- "Attempt to access a Java property on a non-Java object");
- } else {
- /* invoke the method */
- jmethodID gsp = (*jenv)->GetMethodID(jenv, JG(reflect_class), "GetSetProp",
- "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;J)V");
- (*jenv)->CallVoidMethod
- (jenv, JG(php_reflect), gsp, obj, propName, value, result);
- }
-
- (*jenv)->DeleteLocalRef(jenv, propName);
- pval_destructor(&property->element);
- return presult;
-}
-
-
-pval java_get_property_handler(zend_property_reference *property_reference)
-{
- pval presult;
- TSRMLS_FETCH();
-
- presult = _java_getset_property(property_reference, 0 TSRMLS_CC);
- checkError(&presult);
- return presult;
-}
-
-
-int java_set_property_handler(zend_property_reference *property_reference, pval *value)
-{
- pval presult;
- TSRMLS_FETCH();
-
- presult = _java_getset_property(property_reference, _java_makeArray(1, &value TSRMLS_CC) TSRMLS_CC);
- return checkError(&presult) ? FAILURE : SUCCESS;
-}
-
-/***************************************************************************/
-
-static void _php_java_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- void *jobject = (void *)rsrc->ptr;
-
- if (JG(jenv)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), jobject);
-}
-
-static void alloc_java_globals_ctor(zend_java_globals *java_globals TSRMLS_DC)
-{
- memset(java_globals, 0, sizeof(zend_java_globals));
-}
-
-PHP_MINIT_FUNCTION(java)
-{
- INIT_OVERLOADED_CLASS_ENTRY(java_class_entry, "java", NULL,
- java_call_function_handler,
- java_get_property_handler,
- java_set_property_handler);
-
- zend_register_internal_class(&java_class_entry TSRMLS_CC);
-
- le_jobject = zend_register_list_destructors_ex(_php_java_destructor, NULL, "java", module_number);
-
- REGISTER_INI_ENTRIES();
-
- if (!classpath) classpath = getenv("CLASSPATH");
-
- if (!libpath) {
- libpath=PG(extension_dir);
- }
-
- ZEND_INIT_MODULE_GLOBALS(java, alloc_java_globals_ctor, NULL);
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(java)
-{
- UNREGISTER_INI_ENTRIES();
- if (JG(jvm)) jvm_destroy(TSRMLS_C);
- return SUCCESS;
-}
-
-
-function_entry java_functions[] = {
- PHP_FE(java_last_exception_get, NULL)
- PHP_FE(java_last_exception_clear, NULL)
- {NULL, NULL, NULL}
-};
-
-
-static PHP_MINFO_FUNCTION(java) {
- DISPLAY_INI_ENTRIES();
-}
-
-zend_module_entry java_module_entry = {
- STANDARD_MODULE_HEADER,
- "java",
- java_functions,
- PHP_MINIT(java),
- PHP_MSHUTDOWN(java),
- NULL,
- NULL,
- PHP_MINFO(java),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_GET_MODULE(java)
-
-/***************************************************************************/
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString
- (JNIEnv *jenv, jclass self, jlong result, jbyteArray jvalue)
-{
- jboolean isCopy;
- jbyte *value = (*jenv)->GetByteArrayElements(jenv, jvalue, &isCopy);
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_STRING;
- Z_STRLEN_P(presult)=(*jenv)->GetArrayLength(jenv, jvalue);
- Z_STRVAL_P(presult)=emalloc(Z_STRLEN_P(presult)+1);
- memcpy(Z_STRVAL_P(presult), value, Z_STRLEN_P(presult));
- Z_STRVAL_P(presult)[Z_STRLEN_P(presult)]=0;
- if (isCopy) (*jenv)->ReleaseByteArrayElements(jenv, jvalue, value, 0);
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong
- (JNIEnv *jenv, jclass self, jlong result, jlong value)
-{
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_LONG;
- Z_LVAL_P(presult)=(long)value;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromDouble
- (JNIEnv *jenv, jclass self, jlong result, jdouble value)
-{
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_DOUBLE;
- Z_DVAL_P(presult)=value;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromBoolean
- (JNIEnv *jenv, jclass self, jlong result, jboolean value)
-{
- pval *presult = (pval*)(long)result;
- Z_TYPE_P(presult)=IS_BOOL;
- Z_LVAL_P(presult)=value;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromObject
- (JNIEnv *jenv, jclass self, jlong result, jobject value)
-{
- /* wrapper the java object in a pval object */
- pval *presult = (pval*)(long)result;
- pval *handle;
- TSRMLS_FETCH();
-
- if (Z_TYPE_P(presult) != IS_OBJECT) {
- object_init_ex(presult, &java_class_entry);
- presult->is_ref=1;
- presult->refcount=1;
- }
-
- ALLOC_ZVAL(handle);
- Z_TYPE_P(handle) = IS_LONG;
- Z_LVAL_P(handle) =
- zend_list_insert((*jenv)->NewGlobalRef(jenv, value), le_jobject);
- pval_copy_constructor(handle);
- INIT_PZVAL(handle);
- zend_hash_index_update(Z_OBJPROP_P(presult), 0, &handle, sizeof(pval *), NULL);
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromArray
- (JNIEnv *jenv, jclass self, jlong result)
-{
- array_init( (pval*)(long)result );
-}
-
-JNIEXPORT jlong JNICALL Java_net_php_reflect_nextElement
- (JNIEnv *jenv, jclass self, jlong array)
-{
- pval *result;
- pval *handle = (pval*)(long)array;
- ALLOC_ZVAL(result);
- zend_hash_next_index_insert(Z_ARRVAL_P(handle), &result, sizeof(zval *), NULL);
- return (jlong)(long)result;
-}
-
-JNIEXPORT jlong JNICALL Java_net_php_reflect_hashIndexUpdate
- (JNIEnv *jenv, jclass self, jlong array, jlong key)
-{
- pval *result;
- pval *handle = (pval*)(long)array;
- ALLOC_ZVAL(result);
- zend_hash_index_update(Z_ARRVAL_P(handle), (unsigned long)key,
- &result, sizeof(zval *), NULL);
- return (jlong)(long)result;
-}
-
-JNIEXPORT jlong JNICALL Java_net_php_reflect_hashUpdate
- (JNIEnv *jenv, jclass self, jlong array, jbyteArray key)
-{
- pval *result;
- pval pkey;
- pval *handle = (pval*)(long)array;
- ALLOC_ZVAL(result);
- Java_net_php_reflect_setResultFromString(jenv, self, (jlong)(long)&pkey, key);
- zend_hash_update(Z_ARRVAL_P(handle), Z_STRVAL(pkey), Z_STRLEN(pkey)+1,
- &result, sizeof(zval *), NULL);
- return (jlong)(long)result;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setException
- (JNIEnv *jenv, jclass self, jlong result, jbyteArray value)
-{
- pval *presult = (pval*)(long)result;
- Java_net_php_reflect_setResultFromString(jenv, self, result, value);
- Z_TYPE_P(presult)=IS_EXCEPTION;
-}
-
-JNIEXPORT void JNICALL Java_net_php_reflect_setEnv
- (JNIEnv *newJenv, jclass self TSRMLS_DC)
-{
- jobject local_php_reflect;
-
- iniUpdated=0;
- JG(jenv)=newJenv;
-
- if (!self) self = (*JG(jenv))->FindClass(JG(jenv), "net/php/reflect");
- JG(reflect_class) = self;
-
- if (JG(php_reflect)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), JG(php_reflect));
- local_php_reflect = (*JG(jenv))->AllocObject(JG(jenv), JG(reflect_class));
- JG(php_reflect) = (*JG(jenv))->NewGlobalRef(JG(jenv), local_php_reflect);
-}
diff --git a/ext/rpc/java/java.dsp b/ext/rpc/java/java.dsp
deleted file mode 100644
index 620ba07d77..0000000000
--- a/ext/rpc/java/java.dsp
+++ /dev/null
@@ -1,254 +0,0 @@
-# Microsoft Developer Studio Project File - Name="java" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=java - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "java.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "java.mak" CFG="java - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "java - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "java - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "java - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "java - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "java - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release"
-# PROP BASE Intermediate_Dir "..\..\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release"
-# PROP Intermediate_Dir "..\..\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_java.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug"
-# PROP BASE Intermediate_Dir "..\..\Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug"
-# PROP Intermediate_Dir "..\..\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_java.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug_TS"
-# PROP BASE Intermediate_Dir "..\..\Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "..\..\Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_java.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "java - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "..\..\Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "..\..\Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_java.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "java - Win32 Release"
-# Name "java - Win32 Debug"
-# Name "java - Win32 Debug_TS"
-# Name "java - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\java.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_java.h
-# End Source File
-# End Group
-# Begin Group "Java Files"
-
-# PROP Default_Filter "java"
-# Begin Source File
-
-SOURCE=.\reflect.java
-
-!IF "$(CFG)" == "java - Win32 Release"
-
-# Begin Custom Build
-OutDir=.\..\..\Release
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug"
-
-# Begin Custom Build
-OutDir=.\..\..\Debug
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac -g net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "java - Win32 Debug_TS"
-
-# Begin Custom Build
-OutDir=.\..\..\Debug_TS
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac -g net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "java - Win32 Release_TS"
-
-# Begin Custom Build
-OutDir=.\..\..\Release_TS
-InputPath=.\reflect.java
-
-"$(OutDir)\php_java.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy $(InputPath) net\php > nul
- echo library=php_java>net\php\reflect.properties
- $(JAVA_HOME)\bin\javac net\php\reflect.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\jtest.php
-# End Source File
-# End Target
-# End Project
diff --git a/ext/rpc/java/jawt.php b/ext/rpc/java/jawt.php
deleted file mode 100644
index 30f2235611..0000000000
--- a/ext/rpc/java/jawt.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?
-
- // This example is only intented to be run as a CGI.
-
- $frame = new Java("java.awt.Frame", "Zend");
- $button = new Java("java.awt.Button", "Hello Java world!");
- $frame->add("North", $button);
- $frame->validate();
- $frame->pack();
- $frame->visible = True;
-
- $thread = new Java("java.lang.Thread");
- $thread->sleep(10000);
-
- $frame->dispose();
-
- // Odd behavior noted with Sun JVMs:
- //
- // 1) $thread->destroy() will fail with a NoSuchMethodError exception.
- // 2) The call to (*jvm)->DestroyJVM(jvm) made when PHP terminates
- // will hang, unless _BOTH_ the calls to pack and setVisible above
- // are removed.
- //
- // Even more odd: both effects are seen with a 100% Java implementation
- // of the above!
-
-?>
diff --git a/ext/rpc/java/jver.php b/ext/rpc/java/jver.php
deleted file mode 100644
index 7015944101..0000000000
--- a/ext/rpc/java/jver.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-<?
-
- $system = new Java("java.lang.System");
- print "Java version=".$system->getProperty("java.version")." <br>\n";
- print "Java vendor=".$system->getProperty("java.vendor")." <p>\n\n";
- print "OS=".$system->getProperty("os.name")." ".
- $system->getProperty("os.version")." on ".
- $system->getProperty("os.arch")." <br>\n";
-
- $formatter = new Java("java.text.SimpleDateFormat",
- "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
-
- print $formatter->format(new Java("java.util.Date"))."\n";
-
-?>
-</html>
diff --git a/ext/rpc/java/reflect.java b/ext/rpc/java/reflect.java
deleted file mode 100644
index a9a7983ed2..0000000000
--- a/ext/rpc/java/reflect.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sam Ruby (rubys@us.ibm.com) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-package net.php;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.beans.*;
-
-public class reflect {
-
- static { loadLibrary("reflect"); }
-
- protected static void loadLibrary(String property) {
- try {
- ResourceBundle bundle = ResourceBundle.getBundle("net.php."+property);
- System.loadLibrary(bundle.getString("library"));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- //
- // Native methods
- //
- private static native void setResultFromString(long result, byte value[]);
- private static native void setResultFromLong(long result, long value);
- private static native void setResultFromDouble(long result, double value);
- private static native void setResultFromBoolean(long result, boolean value);
- private static native void setResultFromObject(long result, Object value);
- private static native void setResultFromArray(long result);
- private static native long nextElement(long array);
- private static native long hashUpdate(long array, byte key[]);
- private static native long hashIndexUpdate(long array, long key);
- private static native void setException(long result, byte value[]);
- public static native void setEnv();
-
- //
- // Helper routines which encapsulate the native methods
- //
- public static void setResult(long result, Object value) {
- if (value == null) return;
-
- if (value instanceof java.lang.String) {
-
- setResultFromString(result, ((String)value).getBytes());
-
- } else if (value instanceof java.lang.Number) {
-
- if (value instanceof java.lang.Integer ||
- value instanceof java.lang.Short ||
- value instanceof java.lang.Byte) {
- setResultFromLong(result, ((Number)value).longValue());
- } else {
- /* Float, Double, BigDecimal, BigInteger, Double, Long, ... */
- setResultFromDouble(result, ((Number)value).doubleValue());
- }
-
- } else if (value instanceof java.lang.Boolean) {
-
- setResultFromBoolean(result, ((Boolean)value).booleanValue());
-
- } else if (value.getClass().isArray()) {
-
- long length = Array.getLength(value);
- setResultFromArray(result);
- for (int i=0; i<length; i++) {
- setResult(nextElement(result), Array.get(value, i));
- }
-
- } else if (value instanceof java.util.Hashtable) {
-
- Hashtable ht = (Hashtable) value;
- setResultFromArray(result);
- for (Enumeration e = ht.keys(); e.hasMoreElements(); ) {
- Object key = e.nextElement();
- long slot;
- if (key instanceof Number &&
- !(key instanceof Double || key instanceof Float))
- slot = hashIndexUpdate(result, ((Number)key).longValue());
- else
- slot = hashUpdate(result, key.toString().getBytes());
- setResult(slot, ht.get(key));
- }
-
- } else {
-
- setResultFromObject(result, value);
-
- }
- }
-
- Throwable lastException = null;
-
- void lastException(long result) {
- setResult(result, lastException);
- }
-
- void clearException() {
- lastException = null;
- }
-
- void setException(long result, Throwable e) {
- if (e instanceof InvocationTargetException) {
- Throwable t = ((InvocationTargetException)e).getTargetException();
- if (t!=null) e=t;
- }
-
- lastException = e;
- setException(result, e.toString().getBytes());
- }
-
- //
- // Create an new instance of a given class
- //
- public void CreateObject(String name, Object args[], long result) {
- try {
- Vector matches = new Vector();
-
- Constructor cons[] = Class.forName(name).getConstructors();
- for (int i=0; i<cons.length; i++) {
- if (cons[i].getParameterTypes().length == args.length) {
- matches.addElement(cons[i]);
- }
- }
-
- Constructor selected = (Constructor)select(matches, args);
-
- if (selected == null) {
- if (args.length > 0) {
- throw new InstantiationException("No matching constructor found");
- } else {
- // for classes which have no visible constructor, return the class
- // useful for classes like java.lang.System and java.util.Calendar.
- setResult(result, Class.forName(name));
- return;
- }
- }
-
- Object coercedArgs[] = coerce(selected.getParameterTypes(), args);
- setResultFromObject(result, selected.newInstance(coercedArgs));
-
- } catch (Exception e) {
- setException(result, e);
- }
- }
-
- //
- // Select the best match from a list of methods
- //
- private static Object select(Vector methods, Object args[]) {
- if (methods.size() == 1) return methods.firstElement();
-
- Object selected = null;
- int best = Integer.MAX_VALUE;
-
- for (Enumeration e = methods.elements(); e.hasMoreElements(); ) {
- Object element = e.nextElement();
- int weight=0;
-
- Class parms[] = (element instanceof Method) ?
- ((Method)element).getParameterTypes() :
- ((Constructor)element).getParameterTypes();
-
- for (int i=0; i<parms.length; i++) {
- if (parms[i].isInstance(args[i])) {
- for (Class c=parms[i]; (c=c.getSuperclass()) != null; ) {
- if (!c.isInstance(args[i])) break;
- weight++;
- }
- } else if (parms[i].isAssignableFrom(java.lang.String.class)) {
- if (!(args[i] instanceof byte[]) && !(args[i] instanceof String))
- weight+=9999;
- } else if (parms[i].isArray()) {
- if (args[i] instanceof java.util.Hashtable)
- weight+=256;
- else
- weight+=9999;
- } else if (parms[i].isPrimitive()) {
- Class c=parms[i];
- if (args[i] instanceof Number) {
- if (c==Boolean.TYPE) weight+=5;
- if (c==Character.TYPE) weight+=4;
- if (c==Byte.TYPE) weight+=3;
- if (c==Short.TYPE) weight+=2;
- if (c==Integer.TYPE) weight++;
- if (c==Float.TYPE) weight++;
- } else if (args[i] instanceof Boolean) {
- if (c!=Boolean.TYPE) weight+=9999;
- } else if (args[i] instanceof String) {
- if (c== Character.TYPE || ((String)args[i]).length()>0)
- weight+=((String)args[i]).length();
- else
- weight+=64;
- } else {
- weight+=9999;
- }
- } else {
- weight+=9999;
- }
- }
-
- if (weight < best) {
- if (weight == 0) return element;
- best = weight;
- selected = element;
- }
- }
-
- return selected;
- }
-
- //
- // Coerce arguments when possible to conform to the argument list.
- // Java's reflection will automatically do widening conversions,
- // unfortunately PHP only supports wide formats, so to be practical
- // some (possibly lossy) conversions are required.
- //
- private static Object[] coerce(Class parms[], Object args[]) {
- Object result[] = args;
- for (int i=0; i<args.length; i++) {
- if (args[i] instanceof byte[] && !parms[i].isArray()) {
- Class c = parms[i];
- String s = new String((byte[])args[i]);
- result[i] = s;
- try {
- if (c == Boolean.TYPE) result[i]=new Boolean(s);
- if (c == Byte.TYPE) result[i]=new Byte(s);
- if (c == Short.TYPE) result[i]=new Short(s);
- if (c == Integer.TYPE) result[i]=new Integer(s);
- if (c == Float.TYPE) result[i]=new Float(s);
- if (c == Long.TYPE) result[i]=new Long(s);
- if (c == Character.TYPE && s.length()>0)
- result[i]=new Character(s.charAt(0));
- } catch (NumberFormatException n) {
- // oh well, we tried!
- }
- } else if (args[i] instanceof Number && parms[i].isPrimitive()) {
- if (result==args) result=(Object[])result.clone();
- Class c = parms[i];
- Number n = (Number)args[i];
- if (c == Boolean.TYPE) result[i]=new Boolean(0.0!=n.floatValue());
- if (c == Byte.TYPE) result[i]=new Byte(n.byteValue());
- if (c == Short.TYPE) result[i]=new Short(n.shortValue());
- if (c == Integer.TYPE) result[i]=new Integer(n.intValue());
- if (c == Float.TYPE) result[i]=new Float(n.floatValue());
- if (c == Long.TYPE && !(n instanceof Long))
- result[i]=new Long(n.longValue());
- } else if (args[i] instanceof Hashtable && parms[i].isArray()) {
- try {
- Hashtable ht = (Hashtable)args[i];
- int size = ht.size();
-
- // Verify that the keys are Long, and determine maximum
- for (Enumeration e = ht.keys(); e.hasMoreElements(); ) {
- int index = ((Long)e.nextElement()).intValue();
- if (index >= size) size = index+1;
- }
-
- Object tempArray[] = new Object[size];
- Class tempTarget[] = new Class[size];
- Class targetType = parms[i].getComponentType();
-
- // flatten the hash table into an array
- for (int j=0; j<size; j++) {
- tempArray[j] = ht.get(new Long(j));
- if (tempArray[j] == null && targetType.isPrimitive())
- throw new Exception("bail");
- tempTarget[j] = targetType;
- }
-
- // coerce individual elements into the target type
- Object coercedArray[] = coerce(tempTarget, tempArray);
-
- // copy the results into the desired array type
- Object array = Array.newInstance(targetType,size);
- for (int j=0; j<size; j++) {
- Array.set(array, j, coercedArray[j]);
- }
-
- result[i]=array;
- } catch (Exception e) {
- // leave result[i] alone...
- }
- }
- }
- return result;
- }
-
- //
- // Invoke a method on a given object
- //
- public void Invoke
- (Object object, String method, Object args[], long result)
- {
- try {
- Vector matches = new Vector();
-
- // gather
- for (Class jclass = object.getClass();;jclass=(Class)object) {
- while (!Modifier.isPublic(jclass.getModifiers())) {
- // OK, some joker gave us an instance of a non-public class
- // This often occurs in the case of enumerators
- // Substitute the first public interface in its place,
- // and barring that, try the superclass
- Class interfaces[] = jclass.getInterfaces();
- jclass=jclass.getSuperclass();
- for (int i=interfaces.length; i-->0;) {
- if (Modifier.isPublic(interfaces[i].getModifiers())) {
- jclass=interfaces[i];
- }
- }
- }
- Method methods[] = jclass.getMethods();
- for (int i=0; i<methods.length; i++) {
- if (methods[i].getName().equalsIgnoreCase(method) &&
- methods[i].getParameterTypes().length == args.length) {
- matches.addElement(methods[i]);
- }
- }
-
- // try a second time with the object itself, if it is of type Class
- if (!(object instanceof Class) || (jclass==object)) break;
- }
-
- Method selected = (Method)select(matches, args);
- if (selected == null) throw new NoSuchMethodException(method);
-
- Object coercedArgs[] = coerce(selected.getParameterTypes(), args);
- setResult(result, selected.invoke(object, coercedArgs));
-
- } catch (Exception e) {
- setException(result, e);
- }
- }
-
- //
- // Get or Set a property
- //
- public void GetSetProp
- (Object object, String prop, Object args[], long result)
- {
- try {
-
- for (Class jclass = object.getClass();;jclass=(Class)object) {
- while (!Modifier.isPublic(jclass.getModifiers())) {
- // OK, some joker gave us an instance of a non-public class
- // Substitute the first public interface in its place,
- // and barring that, try the superclass
- Class interfaces[] = jclass.getInterfaces();
- jclass=jclass.getSuperclass();
- for (int i=interfaces.length; i-->0;) {
- if (Modifier.isPublic(interfaces[i].getModifiers())) {
- jclass=interfaces[i];
- }
- }
- }
- BeanInfo beanInfo = Introspector.getBeanInfo(jclass);
- PropertyDescriptor props[] = beanInfo.getPropertyDescriptors();
- for (int i=0; i<props.length; i++) {
- if (props[i].getName().equalsIgnoreCase(prop)) {
- Method method;
- if (args!=null && args.length>0) {
- method=props[i].getWriteMethod();
- args = coerce(method.getParameterTypes(), args);
- } else {
- method=props[i].getReadMethod();
- }
- setResult(result, method.invoke(object, args));
- return;
- }
- }
-
- Field jfields[] = jclass.getFields();
- for (int i=0; i<jfields.length; i++) {
- if (jfields[i].getName().equalsIgnoreCase(prop)) {
- if (args!=null && args.length>0) {
- args = coerce(new Class[] {jfields[i].getType()}, args);
- jfields[i].set(object, args[0]);
- } else {
- setResult(result, jfields[i].get(object));
- }
- return;
- }
- }
-
- // try a second time with the object itself, if it is of type Class
- if (!(object instanceof Class) || (jclass==object)) break;
- }
-
- } catch (Exception e) {
- setException(result, e);
- }
- }
-
- //
- // Helper routines for the C implementation
- //
- public Object MakeArg(boolean b) { return new Boolean(b); }
- public Object MakeArg(long l) { return new Long(l); }
- public Object MakeArg(double d) { return new Double(d); }
-}
diff --git a/ext/rpc/layer.h b/ext/rpc/layer.h
deleted file mode 100644
index 0d77ae28a3..0000000000
--- a/ext/rpc/layer.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef LAYER_H
-#define LAYER_H
-
-#include "handler.h"
-
-RPC_DECLARE_HANDLER(com);
-
-rpc_handler_entry handler_entries[] = {
- RPC_HANDLER(com)
-};
-
-#endif /* LAYER_H */ \ No newline at end of file
diff --git a/ext/rpc/php_rpc.h b/ext/rpc/php_rpc.h
deleted file mode 100644
index be95b20940..0000000000
--- a/ext/rpc/php_rpc.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef PHP_RPC_H
-#define PHP_RPC_H
-
-#include "zend.h"
-
-extern zend_module_entry rpc_module_entry;
-#define phpext_rpc_ptr &rpc_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_RPC_API __declspec(dllexport)
-#else
-#define PHP_RPC_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-ZEND_MINIT_FUNCTION(rpc);
-ZEND_MSHUTDOWN_FUNCTION(rpc);
-ZEND_MINFO_FUNCTION(rpc);
-
-ZEND_FUNCTION(rpc_load);
-ZEND_FUNCTION(rpc_call);
-ZEND_FUNCTION(rpc_set);
-ZEND_FUNCTION(rpc_get);
-
-ZEND_BEGIN_MODULE_GLOBALS(rpc)
- int dummy;
-ZEND_END_MODULE_GLOBALS(rpc)
-
-#ifdef ZTS
-#define RPC_G(v) TSRMG(rpc_globals_id, zend_rpc_globals *, v)
-#else
-#define RPC_G(v) (rpc_globals.v)
-#endif
-
-#define phpext_rpc_ptr &rpc_module_entry
-
-#endif /* PHP_RPC_H */ \ No newline at end of file
diff --git a/ext/rpc/rpc.c b/ext/rpc/rpc.c
deleted file mode 100644
index d0fc90a49c..0000000000
--- a/ext/rpc/rpc.c
+++ /dev/null
@@ -1,847 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-
-#include "php_rpc.h"
-#include "rpc.h"
-#include "layer.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(rpc)
-
-static void rpc_globals_ctor(zend_rpc_globals * TSRMLS_DC);
-static void rpc_instance_dtor(void *);
-static void rpc_proxy_dtor(void *pDest);
-static void rpc_class_dtor(void *);
-static void rpc_string_dtor(void *);
-static void rpc_export_functions(char *, zend_class_entry *, function_entry[] TSRMLS_DC);
-static zend_object_value rpc_create_object(zend_class_entry * TSRMLS_DC);
-
-/* object handler */
-static void rpc_add_ref(zval * TSRMLS_DC);
-static void rpc_del_ref(zval * TSRMLS_DC);
-static void rpc_delete(zval * TSRMLS_DC);
-static zend_object_value rpc_clone(zval * TSRMLS_DC);
-static zval* rpc_read(zval *, zval *, int TSRMLS_DC);
-static void rpc_write(zval *, zval *, zval * TSRMLS_DC);
-static zval** rpc_get_property(zval *, zval * TSRMLS_DC);
-static zval* rpc_get(zval * TSRMLS_DC);
-static void rpc_set(zval **, zval * TSRMLS_DC);
-static int rpc_has_property(zval *, zval *, int TSRMLS_DC);
-static void rpc_unset_property(zval *, zval * TSRMLS_DC);
-static HashTable* rpc_get_properties(zval * TSRMLS_DC);
-static union _zend_function* rpc_get_method(zval *, char *, int TSRMLS_DC);
-static union _zend_function* rpc_get_constructor(zval * TSRMLS_DC);
-static zend_class_entry** rpc_get_class_entry(zval *object TSRMLS_DC);
-static int rpc_get_classname(zval *, char **, zend_uint *, int TSRMLS_DC);
-static int rpc_compare(zval *, zval * TSRMLS_DC);
-/**/
-
-/* pseudo handler */
-static void rpc_internal_get(rpc_internal *, char *, zend_uint, zval *);
-static void rpc_internal_set(rpc_internal *, char *, zend_uint, zval *);
-/**/
-
-extern zend_object_handlers rpc_proxy_handlers;
-
-static zend_object_handlers rpc_handlers = {
- rpc_add_ref,
- rpc_del_ref,
- rpc_delete,
- rpc_clone,
- rpc_read,
- rpc_write,
- rpc_get_property,
- NULL,
- rpc_get,
- rpc_set,
- rpc_has_property,
- rpc_unset_property,
- rpc_get_properties,
- rpc_get_method,
- NULL,
- rpc_get_constructor,
- rpc_get_class_entry,
- rpc_get_classname,
- rpc_compare
-};
-
-/* {{{ rpc_functions[]
- */
-function_entry rpc_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ rpc_module_entry
- */
-zend_module_entry rpc_module_entry = {
- STANDARD_MODULE_HEADER,
- "rpc",
- rpc_functions,
- ZEND_MINIT(rpc),
- ZEND_MSHUTDOWN(rpc),
- NULL,
- NULL,
- ZEND_MINFO(rpc),
- "0.1a",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-static HashTable *handlers;
-static TsHashTable *instance;
-static TsHashTable *proxy;
-static TsHashTable *classes;
-static zend_llist *classes_list;
-
-#ifdef COMPILE_DL_RPC
-ZEND_GET_MODULE(rpc);
-#endif
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-/* TODO: add module specific ini settings here */
-PHP_INI_END()
-/* }}} */
-
-static void rpc_globals_ctor(zend_rpc_globals *rpc_globals TSRMLS_DC)
-{
-}
-
-/* {{{ ZEND_MINIT_FUNCTION
- */
-ZEND_MINIT_FUNCTION(rpc)
-{
- handlers = (HashTable *) pemalloc(sizeof(HashTable), TRUE);
- instance = (TsHashTable *) pemalloc(sizeof(TsHashTable), TRUE);
- proxy = (TsHashTable *) pemalloc(sizeof(TsHashTable), TRUE);
- classes = (TsHashTable *) pemalloc(sizeof(TsHashTable), TRUE);
- classes_list = (zend_llist *) pemalloc(sizeof(zend_llist), TRUE);
-
- zend_hash_init(handlers, 0, NULL, NULL, TRUE);
- zend_ts_hash_init(instance, 0, NULL, rpc_instance_dtor, TRUE);
- zend_ts_hash_init(proxy, 0, NULL, rpc_proxy_dtor, TRUE);
- zend_ts_hash_init(classes, 0, NULL, NULL, TRUE);
- zend_llist_init(classes_list, sizeof(rpc_class_hash **), rpc_class_dtor, TRUE);
-
- FOREACH_HANDLER {
- HANDLER.rpc_handler_init();
-
- /* create a class entry for every rpc handler */
- INIT_OVERLOADED_CLASS_ENTRY((*(HANDLER.ce)),
- HANDLER.name,
- HANDLER.methods,
- NULL,
- NULL,
- NULL);
-
- HANDLER.ce->create_object = rpc_create_object;
-
- /* load all available rpc handler into a hash */
- zend_hash_add(handlers, HANDLER.name, strlen(HANDLER.name) + 1, &(HANDLER.handlers), sizeof(rpc_object_handlers *), NULL);
-
- /* register classes and functions */
- zend_register_internal_class(HANDLER.ce TSRMLS_CC);
- zend_register_functions(HANDLER.functions, NULL, MODULE_PERSISTENT TSRMLS_CC);
- }
-
- ZEND_INIT_MODULE_GLOBALS(rpc, rpc_globals_ctor, NULL);
- REGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_MSHUTDOWN_FUNCTION
- */
-ZEND_MSHUTDOWN_FUNCTION(rpc)
-{
- /* destroy instances first */
- zend_ts_hash_destroy(instance);
- zend_ts_hash_destroy(proxy);
- zend_ts_hash_destroy(classes);
-
- zend_llist_destroy(classes_list);
- zend_hash_destroy(handlers);
-
- pefree(handlers, TRUE);
- pefree(instance, TRUE);
- pefree(proxy, TRUE);
- pefree(classes, TRUE);
-
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_MINFO_FUNCTION
- */
-ZEND_MINFO_FUNCTION(rpc)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "rpc support", "enabled");
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-static void rpc_instance_dtor(void *pDest)
-{
- rpc_internal **intern;
-
- intern = (rpc_internal **) pDest;
-
- (*(*intern)->handlers)->rpc_dtor(&((*intern)->data));
-
- tsrm_mutex_free((*intern)->function_table.mx_reader);
- tsrm_mutex_free((*intern)->function_table.mx_writer);
- tsrm_mutex_free((*intern)->mx_handler);
-
- pefree(*intern, TRUE);
-}
-
-static void rpc_proxy_dtor(void *pDest)
-{
- rpc_proxy **proxy_intern;
-
- proxy_intern = (rpc_proxy **) pDest;
-
- pefree(*proxy_intern, TRUE);
-}
-
-static void rpc_class_dtor(void *pDest)
-{
- rpc_class_hash **hash;
-
- hash = (rpc_class_hash **) pDest;
-
- zend_ts_hash_destroy(&((*hash)->methods));
- zend_ts_hash_destroy(&((*hash)->properties));
-
- free((*hash)->name.str);
- pefree((*hash), TRUE);
-}
-
-static void rpc_string_dtor(void *pDest)
-{
- rpc_string **string;
-
- string = (rpc_string **) pDest;
-
- free((*string)->str);
- pefree(*string, TRUE);
-}
-
-static zend_object_value rpc_create_object(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value *zov;
- rpc_internal *intern;
-
- /* set up the object value struct */
- zov = (zend_object_value*) pemalloc(sizeof(zend_object_value), TRUE);
- zov->handlers = &rpc_handlers;
-
- /* set up the internal representation of our rpc instance */
- intern = (rpc_internal *) pemalloc(sizeof(rpc_internal), TRUE);
-
- intern->class_name = NULL;
- intern->class_name_len = 0;
- intern->ce = class_type;
- intern->refcount = 1;
- intern->clonecount = 1;
- intern->data = NULL;
- intern->pool_instances = 0;
- intern->function_table.hash = intern->ce->function_table;
- intern->function_table.reader = 0;
- intern->function_table.mx_reader = tsrm_mutex_alloc();
- intern->function_table.mx_writer = tsrm_mutex_alloc();
- intern->mx_handler = tsrm_mutex_alloc();
-
- if (zend_hash_find(handlers, class_type->name, class_type->name_length + 1, (void **) &(intern->handlers)) != SUCCESS) {
- /* TODO: exception */
- }
-
- /* store the instance in a hash and set the key as handle, thus
- * we can find it later easily
- */
- tsrm_mutex_lock(instance->mx_writer);
- {
- zov->handle = zend_hash_next_free_element(&(instance->hash));
- zend_ts_hash_next_index_insert(instance, &intern, sizeof(rpc_internal *), NULL);
- }
- tsrm_mutex_unlock(instance->mx_writer);
-
- return *zov;
-}
-
-static zend_object_value rpc_create_proxy(TSRMLS_D)
-{
- zend_object_value *zov;
- rpc_proxy *proxy_intern;
-
- /* set up the object value struct */
- zov = (zend_object_value*) pemalloc(sizeof(zend_object_value), TRUE);
- zov->handlers = &rpc_proxy_handlers;
-
- /* set up the internal representation of the proxy */
- proxy_intern = (rpc_proxy *) pemalloc(sizeof(rpc_proxy), TRUE);
-
- /* store the instance in a hash and set the key as handle, thus
- * we can find it later easily
- */
- tsrm_mutex_lock(proxy->mx_writer);
- {
- zov->handle = zend_hash_next_free_element(&(proxy->hash));
- zend_ts_hash_next_index_insert(proxy, &proxy_intern, sizeof(rpc_proxy *), NULL);
- }
- tsrm_mutex_unlock(proxy->mx_writer);
-
- return *zov;
-}
-
-/* object handler */
-
-static void rpc_add_ref(zval *object TSRMLS_DC)
-{
- GET_INTERNAL(intern);
- RPC_ADDREF(intern);
-}
-
-static void rpc_del_ref(zval *object TSRMLS_DC)
-{
- rpc_internal **intern;
-
- if (GET_INTERNAL_EX(intern, object) == SUCCESS) {
- if (RPC_REFCOUNT(intern) > 0) {
- RPC_DELREF(intern);
- }
-
- if (RPC_REFCOUNT(intern) == 0) {
- zend_ts_hash_index_del(instance, Z_OBJ_HANDLE(*object));
- }
- }
-}
-
-static void rpc_delete(zval *object TSRMLS_DC)
-{
- rpc_internal **intern;
-
- if (GET_INTERNAL_EX(intern, object) == SUCCESS) {
- if (RPC_CLONECOUNT(intern) > 0) {
- RPC_DELCLONE(intern);
- }
-
- if (RPC_CLONECOUNT(intern) == 0) {
- zend_ts_hash_index_del(instance, Z_OBJ_HANDLE_P(object));
- }
- }
-}
-
-static zend_object_value rpc_clone(zval *object TSRMLS_DC)
-{
- GET_INTERNAL(intern);
-
- /* cloning the underlaying resource is neither possible nor would it
- * make sense, therfore we return the old zend_object_value and increase
- * the clone count to not loose the clone when the original object gets
- * deleted.
- */
- RPC_ADDCLONE(intern);
-
- /* also increase the refcounter as a clone is just another reference */
- RPC_ADDREF(intern);
-
- return object->value.obj;
-}
-
-static zval* rpc_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval *return_value;
- GET_INTERNAL(intern);
-
- /* seting up the return value and decrease the refcounter as we don't
- * keep a reference to this zval.
- */
- MAKE_STD_ZVAL(return_value);
- ZVAL_DELREF(return_value);
- ZVAL_NULL(return_value);
-
- if ((*intern)->hash && Z_TYPE_P(member) == IS_LONG) {
- rpc_internal_get(*intern, NULL, Z_LVAL_P(member), return_value);
- } else if (Z_TYPE_P(member) == IS_STRING) {
- rpc_internal_get(*intern, Z_STRVAL_P(member), Z_STRLEN_P(member), return_value);
- } else {
- /* TODO: exception here */
- }
-
- return return_value;
-}
-
-static void rpc_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- GET_INTERNAL(intern);
-
- if ((*intern)->hash && Z_TYPE_P(member) == IS_LONG) {
- rpc_internal_set(*intern, NULL, Z_LVAL_P(member), value);
- } else if (Z_TYPE_P(member) == IS_STRING) {
- rpc_internal_set(*intern, Z_STRVAL_P(member), Z_STRLEN_P(member), value);
- } else {
- /* TODO: exception here */
- }
-}
-
-static zval** rpc_get_property(zval *object, zval *member TSRMLS_DC)
-{
- zval **return_value;
- GET_INTERNAL(intern);
-
- return_value = emalloc(sizeof(zval *));
- MAKE_STD_ZVAL(*return_value);
-// ZVAL_DELREF(*return_value);
- Z_TYPE_P(object) = IS_OBJECT;
- (*return_value)->value.obj = rpc_create_proxy(TSRMLS_C);
-
- return return_value;
-}
-
-static zval* rpc_get(zval *property TSRMLS_DC)
-{
- /* not yet implemented */
- return NULL;
-}
-
-static void rpc_set(zval **property, zval *value TSRMLS_DC)
-{
- /* not yet implemented */
-}
-
-static int rpc_has_property(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
-// GET_INTERNAL(intern);
-
- /* FIXME */
- return FAILURE;
-}
-
-static void rpc_unset_property(zval *object, zval *member TSRMLS_DC)
-{
-// GET_INTERNAL(intern);
- /* FIXME */
-}
-
-static HashTable* rpc_get_properties(zval *object TSRMLS_DC)
-{
-// GET_INTERNAL(intern);
-
- /* FIXME */
- return NULL;
-}
-
-static union _zend_function* rpc_get_method(zval *object, char *method, int method_len TSRMLS_DC)
-{
- zend_function *function;
- GET_INTERNAL(intern);
-
- if (zend_ts_hash_find(&((*intern)->function_table), method, method_len + 1, &function) != SUCCESS) {
- zend_internal_function *zif;
-
- zif = (zend_internal_function *) emalloc(sizeof(zend_internal_function));
- zif->arg_types = NULL;
- zif->function_name = method;
- zif->handler = ZEND_FN(rpc_call);
- zif->scope = NULL;
- zif->type = ZEND_INTERNAL_FUNCTION;
-
- /* add new method to the method table */
- zend_ts_hash_add(&((*intern)->function_table), method, method_len + 1, zif, sizeof(zend_function), &function);
- efree(zif);
- }
-
- return function;
-}
-
-static union _zend_function* rpc_get_constructor(zval *object TSRMLS_DC)
-{
- zend_function *rpc_ctor;
- GET_INTERNAL(intern);
-
- if (zend_ts_hash_find(&((*intern)->function_table), (*intern)->ce->name, (*intern)->ce->name_length + 1, &rpc_ctor) != SUCCESS) {
- zend_internal_function *zif;
-
- zif = (zend_internal_function *) emalloc(sizeof(zend_internal_function));
-
- zif->type = ZEND_INTERNAL_FUNCTION;
- zif->function_name = (*intern)->ce->name;
- zif->scope = (*intern)->ce;
- zif->arg_types = NULL;
- zif->handler = ZEND_FN(rpc_load);
-
- /* add new constructor to the method table */
- zend_ts_hash_add(&((*intern)->function_table), (*intern)->ce->name, (*intern)->ce->name_length + 1, zif, sizeof(zend_function), &rpc_ctor);
- efree(zif);
- }
-
- return rpc_ctor;
-}
-
-static zend_class_entry** rpc_get_class_entry(zval *object TSRMLS_DC)
-{
- GET_INTERNAL(intern);
-
- return &((*intern)->ce);
-}
-
-static int rpc_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
-// GET_INTERNAL(intern);
-
- /* FIXME */
- return FAILURE;
-}
-
-static int rpc_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- /* FIXME */
- return FAILURE;
-}
-
-/**/
-
-/* constructor */
-ZEND_FUNCTION(rpc_load)
-{
- zval *object = getThis();
- zval ***args, ***args_free;
- zend_uint num_args = ZEND_NUM_ARGS();
- rpc_class_hash *class_hash;
- rpc_class_hash **class_hash_find = NULL;
- rpc_internal **intern;
- rpc_string hash_val;
- int retval, append = 0;
- char *arg_types;
-
- /* check if we were called as a constructor or as a function */
- if (!object) {
- /* we were called as a function so we have to figure out which rpc layer was requested
- * and then we have to set up a zval containing the object
- */
-
- /* get class entry */
- GET_CLASS(ce);
-
- /* set up a new zval container */
- object = return_value;
-
- Z_TYPE_P(object) = IS_OBJECT;
-
- /* create a new object */
- object->value.obj = rpc_create_object(*ce TSRMLS_CC);
-
- /* now everything is set up the same way as if we were called as a constructor */
- }
-
- if (GET_INTERNAL_EX(intern, object) != SUCCESS) {
- /* TODO: exception */
- }
-
- /* fetch further parameters */
- GET_ARGS_EX(num_args, args, args_free, 1);
-
- /* if classname != integer */
- if ((zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 1 TSRMLS_CC, "l", &((*intern)->class_name_len)) != SUCCESS) ||
- /* or we have no hash function */
- !((*(*intern)->handlers)->rpc_hash) ||
- /* or integer hashing is not allowed */
- !((*(*intern)->handlers)->hash_type & HASH_AS_INT)) {
-
- /* else check for string - classname */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 1 TSRMLS_CC, "s", &((*intern)->class_name), &((*intern)->class_name_len)) != SUCCESS) {
- /* none of the two possibilities */
- /* TODO: exception */
- php_error(E_WARNING, "wrong arguments for %s()", get_active_function_name(TSRMLS_C));
- } else {
- /* hash classname if hashing function exists */
- if ((*(*intern)->handlers)->rpc_hash) {
-
- GET_CTOR_SIGNATURE(intern, hash_val, num_args, arg_types);
-
- /* check if already hashed */
- if (zend_ts_hash_find(classes, hash_val.str, hash_val.len + 1, (void **) &class_hash_find) != SUCCESS) {
- class_hash = pemalloc(sizeof(rpc_class_hash), TRUE);
-
- /* set up the cache */
- zend_ts_hash_init(&(class_hash->methods), 0, NULL, rpc_string_dtor, TRUE);
- zend_ts_hash_init(&(class_hash->properties), 0, NULL, rpc_string_dtor, TRUE);
-
-
- /* do hashing */
- if ((*(*intern)->handlers)->rpc_hash((*intern)->class_name, (*intern)->class_name_len, &(class_hash->name.str),
- &(class_hash->name.len), num_args, arg_types, CLASS) != SUCCESS) {
- /* TODO: exception */
- }
-
- /* register with non-hashed key
- * also track all instaces in a llist for destruction later on, because there might be duplicate entries in
- * the hashtable and we can't determine if a pointer references to an already freed element
- */
- zend_ts_hash_add(classes, hash_val.str, hash_val.len + 1, &class_hash, sizeof(rpc_class_hash *), (void **) &class_hash_find);
- tsrm_mutex_lock(classes->mx_writer);
- zend_llist_add_element(classes_list, class_hash_find);
- tsrm_mutex_unlock(classes->mx_writer);
-
- if (class_hash->name.str) {
- /* register string hashcode */
- zend_ts_hash_add(classes, class_hash->name.str, class_hash->name.len + 1, &class_hash, sizeof(rpc_class_hash *), NULL);
- } else if (!class_hash->name.str && ((*(*intern)->handlers)->hash_type & HASH_AS_INT)) {
- /* register int hashcode */
- zend_ts_hash_index_update(classes, class_hash->name.len, &class_hash, sizeof(rpc_class_hash *), NULL);
- }
- } else {
- class_hash = *class_hash_find;
- }
-
- FREE_SIGNATURE(hash_val, arg_types);
- }
- }
- } else {
- /* integer classname (hashcode) */
- if (zend_ts_hash_index_find(classes, (*intern)->class_name_len, (void**) &class_hash_find) != SUCCESS) {
- class_hash = pemalloc(sizeof(rpc_class_hash), TRUE);
-
- /* set up the cache */
- class_hash->name.str = NULL;
- class_hash->name.len = (*intern)->class_name_len;
-
- zend_ts_hash_init(&(class_hash->methods), 0, NULL, rpc_string_dtor, TRUE);
- zend_ts_hash_init(&(class_hash->properties), 0, NULL, rpc_string_dtor, TRUE);
-
- /* register int hashcode, we don't know more */
- zend_ts_hash_index_update(classes, class_hash->name.len, &class_hash, sizeof(rpc_class_hash *), NULL);
- } else {
- class_hash = *class_hash_find;
- }
- }
-
- /* if hash function available */
- if ((*(*intern)->handlers)->rpc_hash) {
- /* assign cache structure */
- (*intern)->hash = class_hash;
-
- /* call the rpc ctor */
- retval = (*(*intern)->handlers)->rpc_ctor(class_hash->name.str, class_hash->name.len, &((*intern)->data), num_args, args);
- } else {
- /* disable caching from now on */
- (*intern)->hash = NULL;
-
- /* call the rpc ctor */
- retval = (*(*intern)->handlers)->rpc_ctor((*intern)->class_name, (*intern)->class_name_len, &((*intern)->data), num_args, args);
- }
-
- efree(args_free);
-
- if (retval != SUCCESS) {
- /* TODO: exception */
- }
-}
-
-ZEND_FUNCTION(rpc_call)
-{
- zval *object = getThis();
- zval ***args, ***args_free;
- zend_uint num_args = ZEND_NUM_ARGS();
- char *hash = NULL, *arg_types;
- int hash_len, retval, strip = 0;
-
- /* check if we were called as a method or as a function */
- if (!object) {
- /* we were called as a function so we have to figure out which rpc layer was requested */
-
- /* get class entry */
- GET_CLASS(ce);
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 2 TSRMLS_CC, "Ol", &object, *ce, &hash_len) != SUCCESS) {
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 2 TSRMLS_CC, "Os", &object, *ce, &hash, &hash_len) != SUCCESS) {
- /* none of the two possibilities */
- /* TODO: exception */
- php_error(E_WARNING, "wrong arguments for %s()", get_active_function_name(TSRMLS_C));
- }
- }
-
- strip = 2;
- } else {
- hash = get_active_function_name(TSRMLS_C);
- hash_len = strlen(hash);
- }
-
- GET_ARGS_EX(num_args, args, args_free, strip);
-
- /* scope for internal data */
- {
- rpc_string hash_val, *method_hash, **method_hash_find;
- GET_INTERNAL(intern);
-
- method_hash = (rpc_string *) pemalloc(sizeof(rpc_string), TRUE);
- method_hash->str = hash;
- method_hash->len = hash_len;
-
- if ((*intern)->hash) {
- /* cache method table lookups */
-
- if (!hash && !((*(*intern)->handlers)->hash_type & HASH_AS_INT)) {
- /* TODO: exception */
- } else if(hash) {
- /* string passed */
- GET_METHOD_SIGNATURE(intern, method_hash, hash_val, num_args, arg_types);
-
- /* check if already hashed */
- if (zend_ts_hash_find(&((*intern)->hash->methods), hash_val.str, hash_val.len + 1, (void **) &method_hash_find) != SUCCESS) {
- if ((*(*intern)->handlers)->rpc_hash(hash, hash_len, &(method_hash->str), &(method_hash->len), num_args, arg_types, METHOD) != SUCCESS) {
- /* TODO: exception */
- }
-
- /* register with non-hashed key */
- zend_ts_hash_add(&((*intern)->hash->methods), hash_val.str, hash_val.len + 1, &method_hash, sizeof(rpc_string *), NULL);
- } else {
- pefree(method_hash, TRUE);
- method_hash = *method_hash_find;
- }
-
- FREE_SIGNATURE(hash_val, arg_types);
- }
- }
-
- /* actually this should not be neccesary, but who knows :)
- * considering possible thread implementations in future php versions
- * and srm it is better to do concurrency checks
- */
- tsrm_mutex_lock((*intern)->mx_handler);
- retval = (*(*intern)->handlers)->rpc_call(method_hash->str, method_hash->len, &((*intern)->data), &return_value, num_args, args);
- tsrm_mutex_unlock((*intern)->mx_handler);
- }
-
- efree(args_free);
-
- if (retval != SUCCESS) {
- /* TODO: exception here */
- }
-}
-
-ZEND_FUNCTION(rpc_set)
-{
- zval *object, *value;
- char *property = NULL;
- int property_len;
- rpc_internal **intern;
- /* get class entry */
- GET_CLASS(ce);
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 3 TSRMLS_CC, "Olz", &object, *ce, &property_len, &value) != SUCCESS) {
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 3 TSRMLS_CC, "Osz", &object, *ce, &property, &property_len, &value) != SUCCESS) {
- /* none of the two possibilities */
- /* TODO: exception */
- php_error(E_WARNING, "wrong arguments for %s()", get_active_function_name(TSRMLS_C));
- }
- }
-
- GET_INTERNAL_EX(intern, object);
- if (!property && !(*intern)->hash) {
- /* TODO: exception here */
- } else {
- rpc_internal_set(*intern, property, property_len, value);
- }
-}
-
-ZEND_FUNCTION(rpc_get)
-{
- zval *object;
- char *property = NULL;
- int property_len;
- rpc_internal **intern;
- /* get class entry */
- GET_CLASS(ce);
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 2 TSRMLS_CC, "Ol", &object, *ce, &property_len) != SUCCESS) {
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 2 TSRMLS_CC, "Os", &object, *ce, &property, &property_len) != SUCCESS) {
- /* none of the two possibilities */
- /* TODO: exception */
- php_error(E_WARNING, "wrong arguments for %s()", get_active_function_name(TSRMLS_C));
- }
- }
-
- GET_INTERNAL_EX(intern, object);
- if (!property && !(*intern)->hash) {
- /* TODO: exception here */
- } else {
- rpc_internal_get(*intern, property, property_len, return_value);
- }
-}
-
-static void rpc_internal_get(rpc_internal *intern, char *property, zend_uint property_len, zval *return_value)
-{
- int retval;
- rpc_string *property_hash, **property_hash_find;
-
- Z_TYPE_P(return_value) = IS_NULL;
-
- property_hash = (rpc_string *) pemalloc(sizeof(rpc_string), TRUE);
- property_hash->str = property;
- property_hash->len = property_len;
-
- if (intern->hash) {
- /* cache method table lookups */
-
- if (!property && !((*intern->handlers)->hash_type & HASH_AS_INT)) {
- /* TODO: exception */
- } else if(property) {
- /* check if already hashed */
- if (zend_ts_hash_find(&(intern->hash->properties), property, property_len + 1, (void **) &property_hash_find) != SUCCESS) {
- if ((*intern->handlers)->rpc_hash(property, property_len, &(property_hash->str), &(property_hash->len), 0, NULL, PROPERTY) != SUCCESS) {
- /* TODO: exception */
- }
-
- /* register with non-hashed key */
- zend_ts_hash_add(&(intern->hash->properties), property, property_len + 1, &property_hash, sizeof(rpc_string *), NULL);
- } else {
- pefree(property_hash, TRUE);
- property_hash = *property_hash_find;
- }
- }
- }
-
-
- tsrm_mutex_lock(intern->mx_handler);
- retval = (*intern->handlers)->rpc_get(property_hash->str, property_hash->len, return_value, intern->data);
- tsrm_mutex_unlock(intern->mx_handler);
-
- if (retval != SUCCESS) {
- /* TODO: exception here */
- }
-}
-
-static void rpc_internal_set(rpc_internal *intern, char *property, zend_uint property_len, zval *value)
-{
- int retval;
-
- tsrm_mutex_lock(intern->mx_handler);
- retval = (*intern->handlers)->rpc_set(property, property_len, value, intern->data);
- tsrm_mutex_unlock(intern->mx_handler);
-
- if (retval != SUCCESS) {
- /* TODO: exception here */
- }
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/rpc/rpc.h b/ext/rpc/rpc.h
deleted file mode 100644
index 43f6bd8ae3..0000000000
--- a/ext/rpc/rpc.h
+++ /dev/null
@@ -1,124 +0,0 @@
-#ifndef RPC_H
-#define RPC_H
-
-#define FOREACH_HANDLER for (__handler_counter=0; __handler_counter < HANDLER_COUNT; __handler_counter++)
-#define HANDLER handler_entries[__handler_counter]
-#define HANDLER_COUNT (sizeof(handler_entries) / sizeof(rpc_handler_entry))
-
-#define GET_INTERNAL(intern) rpc_internal **intern; \
- if (GET_INTERNAL_EX(intern, object) != SUCCESS) { \
- /* TODO: exception */ \
- }
-
-#define GET_INTERNAL_EX(intern, object) zend_ts_hash_index_find(instance, object->value.obj.handle, (void **) &intern)
-
-#define GET_CLASS(ce) char *key; \
- int key_len; \
- zend_class_entry **ce; \
- \
- /* the name of the rpc layer is prepended to '_load' so lets strip everything after \
- * the first '_' away from the function name \
- */ \
- key = estrdup(get_active_function_name(TSRMLS_C)); \
- key_len = strchr(key, '_') - key; \
- key[key_len] = '\0'; \
- \
- /* get the class entry for the requested rpc layer */ \
- if (zend_hash_find(CG(class_table), key, key_len + 1, (void **) &ce) != SUCCESS) { \
- efree(key); \
- /* TODO: exception here */ \
- } else { \
- efree(key); \
- }
-
-#define GET_ARGS_EX(num_args, args, args_free, strip) \
- GET_ARGS(num_args, args) \
- \
- args_free = args; \
- \
- /* strip away the first parameters */ \
- num_args -= strip; \
- args = (num_args > 0) ? &args[strip] : NULL;
-
-#define GET_ARGS(num_args, args) \
- args = (zval ***) emalloc(sizeof(zval **) * num_args); \
- \
- if (zend_get_parameters_array_ex(num_args, args) != SUCCESS) { \
- efree(args); \
- /* TODO: exception */ \
- }
-
-#define GET_CTOR_SIGNATURE(intern, hash_val, num_args, arg_types) \
- GET_SIGNATURE(intern, (*intern)->class_name, (*intern)->class_name_len, hash_val, num_args, arg_types)
-
-#define GET_METHOD_SIGNATURE(intern, method, hash_val, num_args, arg_types) \
- GET_SIGNATURE(intern, method->str, method->len, hash_val, num_args, arg_types)
-
-#define GET_SIGNATURE(intern, name, name_len, hash_val, num_args, arg_types) \
- hash_val.len = name_len; \
- \
- if ((*(*intern)->handlers)->hash_type & HASH_WITH_SIGNATURE) { \
- zend_uint _signature_counter; \
- \
- arg_types = (char *) emalloc(sizeof(char) * (num_args + 1)); \
- hash_val.len += num_args + 1; \
- \
- for (_signature_counter = 0; _signature_counter < num_args; _signature_counter++) { \
- switch (Z_TYPE_PP(args[_signature_counter])) { \
- case IS_NULL: \
- arg_types[_signature_counter] = 'n'; \
- break; \
- case IS_LONG: \
- arg_types[_signature_counter] = 'l'; \
- break; \
- case IS_DOUBLE: \
- arg_types[_signature_counter] = 'd'; \
- break; \
- case IS_STRING: \
- arg_types[_signature_counter] = 's'; \
- break; \
- case IS_ARRAY: \
- arg_types[_signature_counter] = 'a'; \
- break; \
- case IS_OBJECT: \
- arg_types[_signature_counter] = 'o'; \
- break; \
- case IS_BOOL: \
- arg_types[_signature_counter] = 'b'; \
- break; \
- case IS_RESOURCE: \
- arg_types[_signature_counter] = 'r'; \
- break; \
- default: \
- arg_types[_signature_counter] = 'u'; \
- } \
- } \
- \
- arg_types[_signature_counter] = '\0'; \
- } else { \
- arg_types = (char *) emalloc(sizeof(char)); \
- arg_types[0] = '\0'; \
- } \
- \
- hash_val.str = (char *) emalloc(sizeof(char) * (hash_val.len + 2)); \
- memcpy(hash_val.str, arg_types, num_args + 1); \
- memcpy(&hash_val.str[hash_val.len - name_len], \
- name, name_len + 1);
-
-#define FREE_SIGNATURE(hash_val, arg_types) \
- efree(arg_types); \
- efree(hash_val.str);
-
-
-
-#define RPC_REFCOUNT(intern) ((*intern)->refcount)
-#define RPC_ADDREF(intern) (++RPC_REFCOUNT(intern))
-#define RPC_DELREF(intern) (--RPC_REFCOUNT(intern))
-
-#define RPC_CLONECOUNT(intern) ((*intern)->clonecount)
-#define RPC_ADDCLONE(intern) (++RPC_CLONECOUNT(intern))
-#define RPC_DELCLONE(intern) (--RPC_CLONECOUNT(intern))
-
-static int __handler_counter;
-
-#endif \ No newline at end of file
diff --git a/ext/rpc/rpc_proxy.c b/ext/rpc/rpc_proxy.c
deleted file mode 100644
index ef1cabe0ed..0000000000
--- a/ext/rpc/rpc_proxy.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include "php.h"
-
-#include "rpc_proxy.h"
-#include "handler.h"
-
-/* object handler */
-static void rpc_proxy_add_ref(zval * TSRMLS_DC);
-static void rpc_proxy_del_ref(zval * TSRMLS_DC);
-static void rpc_proxy_delete(zval * TSRMLS_DC);
-static zend_object_value rpc_proxy_clone(zval * TSRMLS_DC);
-static zval* rpc_proxy_read(zval *, zval *, int TSRMLS_DC);
-static void rpc_proxy_write(zval *, zval *, zval * TSRMLS_DC);
-static zval** rpc_proxy_get_property(zval *, zval * TSRMLS_DC);
-static zval* rpc_proxy_get(zval * TSRMLS_DC);
-static void rpc_proxy_set(zval **, zval * TSRMLS_DC);
-static int rpc_proxy_has_property(zval *, zval *, int TSRMLS_DC);
-static void rpc_proxy_unset_property(zval *, zval * TSRMLS_DC);
-static HashTable* rpc_proxy_get_properties(zval * TSRMLS_DC);
-static union _zend_function* rpc_proxy_get_method(zval *, char *, int TSRMLS_DC);
-static union _zend_function* rpc_proxy_get_constructor(zval * TSRMLS_DC);
-static zend_class_entry** rpc_proxy_get_class_entry(zval *object TSRMLS_DC);
-static int rpc_proxy_get_classname(zval *, char **, zend_uint *, int TSRMLS_DC);
-static int rpc_proxy_compare(zval *, zval * TSRMLS_DC);
-/**/
-
-zend_object_handlers rpc_proxy_handlers = {
- rpc_proxy_add_ref,
- rpc_proxy_del_ref,
- rpc_proxy_delete,
- rpc_proxy_clone,
- rpc_proxy_read,
- rpc_proxy_write,
- rpc_proxy_get_property,
- NULL,
- rpc_proxy_get,
- rpc_proxy_set,
- rpc_proxy_has_property,
- rpc_proxy_unset_property,
- rpc_proxy_get_properties,
- rpc_proxy_get_method,
- NULL,
- rpc_proxy_get_constructor,
- rpc_proxy_get_class_entry,
- rpc_proxy_get_classname,
- rpc_proxy_compare
-};
-
-
-/* object handler */
-
-static void rpc_proxy_add_ref(zval *object TSRMLS_DC)
-{
-}
-
-static void rpc_proxy_del_ref(zval *object TSRMLS_DC)
-{
-}
-
-static void rpc_proxy_delete(zval *object TSRMLS_DC)
-{
-}
-
-static zend_object_value rpc_proxy_clone(zval *object TSRMLS_DC)
-{
-}
-
-static zval* rpc_proxy_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- return NULL;
-}
-
-static void rpc_proxy_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
-}
-
-static zval** rpc_proxy_get_property(zval *object, zval *member TSRMLS_DC)
-{
- return NULL;
-}
-
-static zval* rpc_proxy_get(zval *property TSRMLS_DC)
-{
- return NULL;
-}
-
-static void rpc_proxy_set(zval **property, zval *value TSRMLS_DC)
-{
-}
-
-static int rpc_proxy_has_property(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return NULL;
-}
-
-static void rpc_proxy_unset_property(zval *object, zval *member TSRMLS_DC)
-{
-}
-
-static HashTable* rpc_proxy_get_properties(zval *object TSRMLS_DC)
-{
- return NULL;
-}
-
-static union _zend_function* rpc_proxy_get_method(zval *object, char *method, int method_len TSRMLS_DC)
-{
- return NULL;
-}
-
-static union _zend_function* rpc_proxy_get_constructor(zval *object TSRMLS_DC)
-{
- return NULL;
-}
-
-static zend_class_entry** rpc_proxy_get_class_entry(zval *object TSRMLS_DC)
-{
- return NULL;
-}
-
-static int rpc_proxy_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
- return NULL;
-}
-
-static int rpc_proxy_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- return NULL;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/rpc/rpc_proxy.h b/ext/rpc/rpc_proxy.h
deleted file mode 100644
index 179caa988a..0000000000
--- a/ext/rpc/rpc_proxy.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef RPC_PROXY_H
-#define RPC_PROXY_H
-
-#endif \ No newline at end of file
diff --git a/ext/rpc/tests/test1.php b/ext/rpc/tests/test1.php
deleted file mode 100644
index aee876aedb..0000000000
--- a/ext/rpc/tests/test1.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-print "huhuhdsa";
-
-$rpc = new com("class", true, "huh");
-$rpc2 = new com("class", true, "hehe", 1);
-$rpc->call("blah");
-$rpc->call("heh");
-$rpc->call("blah");
-com_call($rpc, 1, "1");
-com_call($rpc, 1, "1");
-$rpc->call("blah");
-$rpc->call("blah");
-$rpc->call("blah");
-$rpc2->call("hehe");
-$rpc2->call("hehe");
-$rpc2->call("hehe");
-$rpc2->call("hehe");
-$rpc2->call("hehe");
-com_call($rpc, "call", 1);
-com_call($rpc, 1, "1");
-com_call($rpc, "call", 1);
-com_call($rpc2, "call", 1);
-com_call($rpc2, "call", 1);
-//$rpc->addref();
-
-//$clone = $rpc->__clone();
-
-//$rpc->prop = 1;
-//$a = $rpc->prop;
-
-//$a = &$rpc->prop;
-
-//delete $rpc;
-//delete $clone;
-
-$heh = com_load("heh", 1);
-$heh->knorp();
-/*delete $heh;*/
-?> \ No newline at end of file
diff --git a/ext/rpc/xmlrpc/CREDITS b/ext/rpc/xmlrpc/CREDITS
deleted file mode 100644
index cfb14faf80..0000000000
--- a/ext/rpc/xmlrpc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-xmlrpc
-Dan Libby
diff --git a/ext/rpc/xmlrpc/EXPERIMENTAL b/ext/rpc/xmlrpc/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/rpc/xmlrpc/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/rpc/xmlrpc/config.m4 b/ext/rpc/xmlrpc/config.m4
deleted file mode 100644
index 5da82a76be..0000000000
--- a/ext/rpc/xmlrpc/config.m4
+++ /dev/null
@@ -1,82 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-sinclude(ext/xmlrpc/libxmlrpc/acinclude.m4)
-sinclude(ext/xmlrpc/libxmlrpc/xmlrpc.m4)
-sinclude(libxmlrpc/acinclude.m4)
-sinclude(libxmlrpc/xmlrpc.m4)
-
-PHP_ARG_WITH(xmlrpc, for XMLRPC-EPI support,
-[ --with-xmlrpc[=DIR] Include XMLRPC-EPI support.])
-
-xmlrpc_ext_shared=$ext_shared
-
-PHP_ARG_WITH(expat-dir, libexpat dir for XMLRPC-EPI,
-[ --with-expat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI.])
-
-if test "$PHP_XMLRPC" != "no"; then
-
- PHP_SUBST(XMLRPC_SHARED_LIBADD)
- AC_DEFINE(HAVE_XMLRPC,1,[ ])
-
- testval=no
- for i in /usr /usr/local $PHP_EXPAT_DIR $XMLRPC_DIR; do
- if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then
- AC_DEFINE(HAVE_LIBEXPAT2,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(expat, $i/lib, XMLRPC_SHARED_LIBADD)
- PHP_ADD_INCLUDE($i/include)
- testval=yes
- fi
- done
-
- if test "$testval" = "no"; then
- AC_MSG_ERROR(XML-RPC support requires libexpat. Use --with-expat-dir=<DIR>)
- fi
-
- if test "$PHP_ICONV" = "no"; then
- PHP_ICONV=yes
- fi
- PHP_SETUP_ICONV(XMLRPC_SHARED_LIBADD, [], [
- AC_MSG_ERROR([iconv not found, in order to build xmlrpc you need the iconv library])
- ])
-fi
-
-
-if test "$PHP_XMLRPC" = "yes"; then
- XMLRPC_CHECKS
- PHP_NEW_EXTENSION(xmlrpc,xmlrpc-epi-php.c libxmlrpc/base64.c \
- libxmlrpc/simplestring.c libxmlrpc/xml_to_dandarpc.c \
- libxmlrpc/xmlrpc_introspection.c libxmlrpc/encodings.c \
- libxmlrpc/system_methods.c libxmlrpc/xml_to_xmlrpc.c \
- libxmlrpc/queue.c libxmlrpc/xml_element.c libxmlrpc/xmlrpc.c \
- libxmlrpc/xml_to_soap.c,$xmlrpc_ext_shared,,
- -I@ext_srcdir@/libxmlrpc -DVERSION="0.50")
- PHP_ADD_BUILD_DIR($ext_builddir/libxmlrpc)
- XMLRPC_MODULE_TYPE=builtin
-
-elif test "$PHP_XMLRPC" != "no"; then
-
- if test -r $PHP_XMLRPC/include/xmlrpc.h; then
- XMLRPC_DIR=$PHP_XMLRPC
- else
- AC_MSG_CHECKING(for XMLRPC-EPI in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/xmlrpc.h; then
- XMLRPC_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$XMLRPC_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the XMLRPC-EPI distribution)
- fi
-
- PHP_ADD_INCLUDE($XMLRPC_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(xmlrpc, $XMLRPC_DIR/lib, XMLRPC_SHARED_LIBADD)
-
-fi
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/README b/ext/rpc/xmlrpc/libxmlrpc/README
deleted file mode 100644
index 323edfa671..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/README
+++ /dev/null
@@ -1,17 +0,0 @@
-organization of this directory is moving towards this approach:
-
-<module>.h -- public API and data types
-<module>_private.h -- protected API and data types
-<module>.c -- implementation and private API / types
-
-The rules are:
-.c files may include *_private.h.
-.h files may not include *_private.h
-
-This allows us to have a nicely encapsulated C api with opaque data types and private functions
-that are nonetheless shared between source files without redundant extern declarations..
-
-
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/acinclude.m4 b/ext/rpc/xmlrpc/libxmlrpc/acinclude.m4
deleted file mode 100644
index 07bf4f0b07..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/acinclude.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# Local macros for automake & autoconf
-
-AC_DEFUN(XMLRPC_FUNCTION_CHECKS,[
-
-# Standard XMLRPC list
-AC_CHECK_FUNCS( \
- strtoul strtoull snprintf \
- strstr strpbrk strerror\
- memcpy memmove)
-
-])
-
-AC_DEFUN(XMLRPC_HEADER_CHECKS,[
-AC_HEADER_STDC
-AC_CHECK_HEADERS(xmlparse.h xmltok.h stdlib.h strings.h string.h)
-])
-
-AC_DEFUN(XMLRPC_TYPE_CHECKS,[
-
-AC_REQUIRE([AC_C_CONST])
-AC_REQUIRE([AC_C_INLINE])
-AC_CHECK_SIZEOF(char, 1)
-
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_TYPE_UID_T
-
-
-])
diff --git a/ext/rpc/xmlrpc/libxmlrpc/base64.c b/ext/rpc/xmlrpc/libxmlrpc/base64.c
deleted file mode 100644
index 03c88a2b3c..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/base64.c
+++ /dev/null
@@ -1,193 +0,0 @@
-static const char rcsid[] = "#(@) $Id$";
-
-/*
-
- Encode or decode file as MIME base64 (RFC 1341)
-
- by John Walker
- http://www.fourmilab.ch/
-
- This program is in the public domain.
-
-*/
-#include <stdio.h>
-
-/* ENCODE -- Encode binary file into base64. */
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "base64.h"
-
-static unsigned char dtable[512];
-
-void buffer_new(struct buffer_st *b)
-{
- b->length = 512;
- b->data = malloc(sizeof(char)*(b->length));
- b->data[0] = 0;
- b->ptr = b->data;
- b->offset = 0;
-}
-
-void buffer_add(struct buffer_st *b, char c)
-{
- *(b->ptr++) = c;
- b->offset++;
- if (b->offset == b->length) {
- b->length += 512;
- b->data = realloc(b->data, b->length);
- b->ptr = b->data + b->offset;
- }
-}
-
-void buffer_delete(struct buffer_st *b)
-{
- free(b->data);
- b->length = 0;
- b->offset = 0;
- b->ptr = NULL;
- b->data = NULL;
-}
-
-void base64_encode(struct buffer_st *b, const char *source, int length)
-{
- int i, hiteof = 0;
- int offset = 0;
- int olen;
- char *dest;
-
- olen = 0;
-
- buffer_new(b);
-
- /* Fill dtable with character encodings. */
-
- for (i = 0; i < 26; i++) {
- dtable[i] = 'A' + i;
- dtable[26 + i] = 'a' + i;
- }
- for (i = 0; i < 10; i++) {
- dtable[52 + i] = '0' + i;
- }
- dtable[62] = '+';
- dtable[63] = '/';
-
- while (!hiteof) {
- unsigned char igroup[3], ogroup[4];
- int c, n;
-
- igroup[0] = igroup[1] = igroup[2] = 0;
- for (n = 0; n < 3; n++) {
- c = *(source++);
- offset++;
- if (offset > length) {
- hiteof = 1;
- break;
- }
- igroup[n] = (unsigned char) c;
- }
- if (n > 0) {
- ogroup[0] = dtable[igroup[0] >> 2];
- ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)];
- ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)];
- ogroup[3] = dtable[igroup[2] & 0x3F];
-
- /* Replace characters in output stream with "=" pad
- characters if fewer than three characters were
- read from the end of the input stream. */
-
- if (n < 3) {
- ogroup[3] = '=';
- if (n < 2) {
- ogroup[2] = '=';
- }
- }
- for (i = 0; i < 4; i++) {
- buffer_add(b, ogroup[i]);
- if (!(b->offset % 72)) {
- // buffer_add(b, '\r');
- buffer_add(b, '\n');
- }
- }
- }
- }
- // buffer_add(b, '\r');
- buffer_add(b, '\n');
-}
-
-void base64_decode(struct buffer_st *bfr, const char *source, int length)
-{
- int i;
- int offset = 0;
- int endoffile;
- int count;
-
- buffer_new(bfr);
-
- for (i = 0; i < 255; i++) {
- dtable[i] = 0x80;
- }
- for (i = 'A'; i <= 'Z'; i++) {
- dtable[i] = 0 + (i - 'A');
- }
- for (i = 'a'; i <= 'z'; i++) {
- dtable[i] = 26 + (i - 'a');
- }
- for (i = '0'; i <= '9'; i++) {
- dtable[i] = 52 + (i - '0');
- }
- dtable['+'] = 62;
- dtable['/'] = 63;
- dtable['='] = 0;
-
- endoffile = 0;
-
- /*CONSTANTCONDITION*/
- while (1) {
- unsigned char a[4], b[4], o[3];
-
- for (i = 0; i < 4; i++) {
- int c;
- while (1) {
- c = *(source++);
- offset++;
- if (offset > length) endoffile = 1;
- if (isspace(c) || c == '\n' || c == '\r') continue;
- break;
- }
-
- if (endoffile) {
- /*
- if (i > 0) {
- fprintf(stderr, "Input file incomplete.\n");
- exit(1);
- }
- */
- return;
- }
-
- if (dtable[c] & 0x80) {
- /*
- fprintf(stderr, "Offset %i length %i\n", offset, length);
- fprintf(stderr, "character '%c:%x:%c' in input file.\n", c, c, dtable[c]);
- exit(1);
- */
- i--;
- continue;
- }
- a[i] = (unsigned char) c;
- b[i] = (unsigned char) dtable[c];
- }
- o[0] = (b[0] << 2) | (b[1] >> 4);
- o[1] = (b[1] << 4) | (b[2] >> 2);
- o[2] = (b[2] << 6) | b[3];
- i = a[2] == '=' ? 1 : (a[3] == '=' ? 2 : 3);
- count = 0;
- while (count < i) {
- buffer_add(bfr, o[count++]);
- }
- if (i < 3) {
- return;
- }
- }
-}
diff --git a/ext/rpc/xmlrpc/libxmlrpc/base64.h b/ext/rpc/xmlrpc/libxmlrpc/base64.h
deleted file mode 100644
index 4cf156ad1e..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/base64.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-
- Encode or decode file as MIME base64 (RFC 1341)
-
- by John Walker
- http://www.fourmilab.ch/
-
- This program is in the public domain.
-
-*/
-
-
-struct buffer_st {
- char *data;
- int length;
- char *ptr;
- int offset;
-};
-
-void buffer_new(struct buffer_st *b);
-void buffer_add(struct buffer_st *b, char c);
-void buffer_delete(struct buffer_st *b);
-
-void base64_encode(struct buffer_st *b, const char *source, int length);
-void base64_decode(struct buffer_st *b, const char *source, int length);
-
-/*
-#define DEBUG_MALLOC
- */
-
-#ifdef DEBUG_MALLOC
-void *_malloc_real(size_t s, char *file, int line);
-void _free_real(void *p, char *file, int line);
-
-#define malloc(s) _malloc_real(s,__FILE__,__LINE__)
-#define free(p) _free_real(p, __FILE__,__LINE__)
-#endif
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/encodings.c b/ext/rpc/xmlrpc/libxmlrpc/encodings.c
deleted file mode 100644
index 9999b96c88..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/encodings.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-#include <errno.h>
-
-#ifdef HAVE_GICONV_H
-#include <giconv.h>
-#else
-#include <iconv.h>
-#endif
-
-#include "encodings.h"
-
-static char* convert(const char* src, int src_len, int *new_len, const char* from_enc, const char* to_enc) {
- char* outbuf = 0;
-
- if(src && src_len && from_enc && to_enc) {
- int outlenleft = src_len;
- int outlen = src_len;
- int inlenleft = src_len;
- iconv_t ic = iconv_open(to_enc, from_enc);
- char* src_ptr = (char*)src;
- char* out_ptr = 0;
-
- if(ic != (iconv_t)-1) {
- size_t st;
- outbuf = (char*)malloc(outlen + 1);
-
- if(outbuf) {
- out_ptr = (char*)outbuf;
- while(inlenleft) {
- st = iconv(ic, &src_ptr, &inlenleft, &out_ptr, &outlenleft);
- if(st == -1) {
- if(errno == E2BIG) {
- int diff = out_ptr - outbuf;
- outlen += inlenleft;
- outlenleft += inlenleft;
- outbuf = (char*)realloc(outbuf, outlen + 1);
- if(!outbuf) {
- break;
- }
- out_ptr = outbuf + diff;
- }
- else {
- free(outbuf);
- outbuf = 0;
- break;
- }
- }
- }
- }
- iconv_close(ic);
- }
- outlen -= outlenleft;
-
- if(new_len) {
- *new_len = outbuf ? outlen : 0;
- }
- if(outbuf) {
- outbuf[outlen] = 0;
- }
- }
- return outbuf;
-}
-
-/* returns a new string that must be freed */
-char* utf8_encode(const char *s, int len, int *newlen, const char* encoding)
-{
- return convert(s, len, newlen, encoding, "UTF-8");
-}
-
-/* returns a new string, possibly decoded */
-char* utf8_decode(const char *s, int len, int *newlen, const char* encoding)
-{
- return convert(s, len, newlen, "UTF-8", encoding);
-}
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/encodings.h b/ext/rpc/xmlrpc/libxmlrpc/encodings.h
deleted file mode 100644
index 486360b1be..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/encodings.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef __ENCODINGS__H
-#define __ENCODINGS__H
-
-/* these defines are for legacy purposes. */
-#define encoding_utf_8 "UTF-8"
-typedef const char* ENCODING_ID;
-#define utf8_get_encoding_id_string(desired_enc) ((const char*)desired_enc)
-#define utf8_get_encoding_id_from_string(id_string) ((ENCODING_ID)id_string)
-
-char* utf8_encode(const char *s, int len, int *newlen, ENCODING_ID encoding);
-char* utf8_decode(const char *s, int len, int *newlen, ENCODING_ID encoding);
-
-#endif /* __ENCODINGS__H */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/queue.c b/ext/rpc/xmlrpc/libxmlrpc/queue.c
deleted file mode 100644
index ecef90caf6..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/queue.c
+++ /dev/null
@@ -1,981 +0,0 @@
-static const char rcsid[] = "#(@) $Id$";
-
-/*
- * Date last modified: Jan 2001
- * Modifications by Dan Libby (dan@libby.com), including:
- * - various fixes, null checks, etc
- * - addition of Q_Iter funcs, macros
- */
-
-
-/*-**************************************************************
- *
- * File : q.c
- *
- * Author: Peter Yard [1993.01.02] -- 02 Jan 1993
- *
- * Disclaimer: This code is released to the public domain.
- *
- * Description:
- * Generic double ended queue (Deque pronounced DEK) for handling
- * any data types, with sorting.
- *
- * By use of various functions in this module the caller
- * can create stacks, queues, lists, doubly linked lists,
- * sorted lists, indexed lists. All lists are dynamic.
- *
- * It is the responsibility of the caller to malloc and free
- * memory for insertion into the queue. A pointer to the object
- * is used so that not only can any data be used but various kinds
- * of data can be pushed on the same queue if one so wished e.g.
- * various length string literals mixed with pointers to structures
- * or integers etc.
- *
- * Enhancements:
- * A future improvement would be the option of multiple "cursors"
- * so that multiple locations could occur in the one queue to allow
- * placemarkers and additional flexibility. Perhaps even use queue
- * itself to have a list of cursors.
- *
- * Usage:
- *
- * /x init queue x/
- * queue q;
- * Q_Init(&q);
- *
- * To create a stack :
- *
- * Q_PushHead(&q, &mydata1); /x push x/
- * Q_PushHead(&q, &mydata2);
- * .....
- * data_ptr = Q_PopHead(&q); /x pop x/
- * .....
- * data_ptr = Q_Head(&q); /x top of stack x/
- *
- * To create a FIFO:
- *
- * Q_PushHead(&q, &mydata1);
- * .....
- * data_ptr = Q_PopTail(&q);
- *
- * To create a double list:
- *
- * data_ptr = Q_Head(&q);
- * ....
- * data_ptr = Q_Next(&q);
- * data_ptr = Q_Tail(&q);
- * if (Q_IsEmpty(&q)) ....
- * .....
- * data_ptr = Q_Previous(&q);
- *
- * To create a sorted list:
- *
- * Q_PushHead(&q, &mydata1); /x push x/
- * Q_PushHead(&q, &mydata2);
- * .....
- * if (!Q_Sort(&q, MyFunction))
- * .. error ..
- *
- * /x fill in key field of mydata1.
- * * NB: Q_Find does linear search
- * x/
- *
- * if (Q_Find(&q, &mydata1, MyFunction))
- * {
- * /x found it, queue cursor now at correct record x/
- * /x can retrieve with x/
- * data_ptr = Q_Get(&q);
- *
- * /x alter data , write back with x/
- * Q_Put(&q, data_ptr);
- * }
- *
- * /x Search with binary search x/
- * if (Q_Seek(&q, &mydata, MyFunction))
- * /x etc x/
- *
- *
- ****************************************************************/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdlib.h>
-#include "queue.h"
-
-
-static void QuickSort(void *list[], int low, int high,
- int (*Comp)(const void *, const void *));
-static int Q_BSearch(queue *q, void *key,
- int (*Comp)(const void *, const void *));
-
-/* The index: a pointer to pointers */
-
-static void **index;
-static datanode **posn_index;
-
-
-/***
- *
- ** function : Q_Init
- *
- ** purpose : Initialise queue object and pointers.
- *
- ** parameters : 'queue' pointer.
- *
- ** returns : True_ if init successful else False_
- *
- ** comments :
- ***/
-
-int Q_Init(queue *q)
-{
- if(q) {
- q->head = q->tail = NULL;
- q->cursor = q->head;
- q->size = 0;
- q->sorted = False_;
- }
-
- return True_;
-}
-
-/***
- *
- ** function : Q_AtHead
- *
- ** purpose : tests if cursor is at head of queue
- *
- ** parameters : 'queue' pointer.
- *
- ** returns : boolean - True_ is at head else False_
- *
- ** comments :
- *
- ***/
-
-int Q_AtHead(queue *q)
-{
- return(q && q->cursor == q->head);
-}
-
-
-/***
- *
- ** function : Q_AtTail
- *
- ** purpose : boolean test if cursor at tail of queue
- *
- ** parameters : 'queue' pointer to test.
- *
- ** returns : True_ or False_
- *
- ** comments :
- *
- ***/
-
-int Q_AtTail(queue *q)
-{
- return(q && q->cursor == q->tail);
-}
-
-
-/***
- *
- ** function : Q_IsEmpty
- *
- ** purpose : test if queue has nothing in it.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : True_ if IsEmpty queue, else False_
- *
- ** comments :
- *
- ***/
-
-inline int Q_IsEmpty(queue *q)
-{
- return(!q || q->size == 0);
-}
-
-/***
- *
- ** function : Q_Size
- *
- ** purpose : return the number of elements in the queue
- *
- ** parameters : queue pointer
- *
- ** returns : number of elements
- *
- ** comments :
- *
- ***/
-
-int Q_Size(queue *q)
-{
- return q ? q->size : 0;
-}
-
-
-/***
- *
- ** function : Q_Head
- *
- ** purpose : position queue cursor to first element (head) of queue.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : pointer to data at head. If queue is IsEmpty returns NULL
- *
- ** comments :
- *
- ***/
-
-void *Q_Head(queue *q)
-{
- if(Q_IsEmpty(q))
- return NULL;
-
- q->cursor = q->head;
-
- return q->cursor->data;
-}
-
-
-/***
- *
- ** function : Q_Tail
- *
- ** purpose : locate cursor at tail of queue.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : pointer to data at tail , if queue IsEmpty returns NULL
- *
- ** comments :
- *
- ***/
-
-void *Q_Tail(queue *q)
-{
- if(Q_IsEmpty(q))
- return NULL;
-
- q->cursor = q->tail;
-
- return q->cursor->data;
-}
-
-
-/***
- *
- ** function : Q_PushHead
- *
- ** purpose : put a data pointer at the head of the queue
- *
- ** parameters : 'queue' pointer, void pointer to the data.
- *
- ** returns : True_ if success else False_ if unable to push data.
- *
- ** comments :
- *
- ***/
-
-int Q_PushHead(queue *q, void *d)
-{
- if(q && d) {
- node *n;
- datanode *p;
-
- p = malloc(sizeof(datanode));
- if(p == NULL)
- return False_;
-
- n = q->head;
-
- q->head = (node*)p;
- q->head->prev = NULL;
-
- if(q->size == 0) {
- q->head->next = NULL;
- q->tail = q->head;
- }
- else {
- q->head->next = (datanode*)n;
- n->prev = q->head;
- }
-
- q->head->data = d;
- q->size++;
-
- q->cursor = q->head;
-
- q->sorted = False_;
-
- return True_;
- }
- return False_;
-}
-
-
-
-/***
- *
- ** function : Q_PushTail
- *
- ** purpose : put a data element pointer at the tail of the queue
- *
- ** parameters : queue pointer, pointer to the data
- *
- ** returns : True_ if data pushed, False_ if data not inserted.
- *
- ** comments :
- *
- ***/
-
-int Q_PushTail(queue *q, void *d)
-{
- if(q && d) {
- node *p;
- datanode *n;
-
- n = malloc(sizeof(datanode));
- if(n == NULL)
- return False_;
-
- p = q->tail;
- q->tail = (node *)n;
-
- if(q->size == 0) {
- q->tail->prev = NULL;
- q->head = q->tail;
- }
- else {
- q->tail->prev = (datanode *)p;
- p->next = q->tail;
- }
-
- q->tail->next = NULL;
-
- q->tail->data = d;
- q->cursor = q->tail;
- q->size++;
-
- q->sorted = False_;
-
- return True_;
- }
-}
-
-
-
-/***
- *
- ** function : Q_PopHead
- *
- ** purpose : remove and return the top element at the head of the
- * queue.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element or NULL if queue is IsEmpty.
- *
- ** comments :
- *
- ***/
-
-void *Q_PopHead(queue *q)
-{
- datanode *n;
- void *d;
-
- if(Q_IsEmpty(q))
- return NULL;
-
- d = q->head->data;
- n = q->head->next;
- free(q->head);
-
- q->size--;
-
- if(q->size == 0)
- q->head = q->tail = q->cursor = NULL;
- else {
- q->head = (node *)n;
- q->head->prev = NULL;
- q->cursor = q->head;
- }
-
- q->sorted = False_;
-
- return d;
-}
-
-
-/***
- *
- ** function : Q_PopTail
- *
- ** purpose : remove element from tail of queue and return data.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element that was at tail. NULL if queue
- * IsEmpty.
- *
- ** comments :
- *
- ***/
-
-void *Q_PopTail(queue *q)
-{
- datanode *p;
- void *d;
-
- if(Q_IsEmpty(q))
- return NULL;
-
- d = q->tail->data;
- p = q->tail->prev;
- free(q->tail);
- q->size--;
-
- if(q->size == 0)
- q->head = q->tail = q->cursor = NULL;
- else {
- q->tail = (node *)p;
- q->tail->next = NULL;
- q->cursor = q->tail;
- }
-
- q->sorted = False_;
-
- return d;
-}
-
-
-
-/***
- *
- ** function : Q_Next
- *
- ** purpose : Move to the next element in the queue without popping
- *
- ** parameters : queue pointer.
- *
- ** returns : pointer to data element of new element or NULL if end
- * of the queue.
- *
- ** comments : This uses the cursor for the current position. Q_Next
- * only moves in the direction from the head of the queue
- * to the tail.
- ***/
-
-void *Q_Next(queue *q)
-{
- if(!q)
- return NULL;
-
- if(!q->cursor || q->cursor->next == NULL)
- return NULL;
-
- q->cursor = (node *)q->cursor->next;
-
- return q->cursor->data ;
-}
-
-
-
-/***
- *
- ** function : Q_Previous
- *
- ** purpose : Opposite of Q_Next. Move to next element closer to the
- * head of the queue.
- *
- ** parameters : pointer to queue
- *
- ** returns : pointer to data of new element else NULL if queue IsEmpty
- *
- ** comments : Makes cursor move towards the head of the queue.
- *
- ***/
-
-void *Q_Previous(queue *q)
-{
- if(!q)
- return NULL;
-
- if(q->cursor->prev == NULL)
- return NULL;
-
- q->cursor = (node *)q->cursor->prev;
-
- return q->cursor->data;
-}
-
-
-void *Q_Iter_Del(queue *q, q_iter iter)
-{
- void *d;
- datanode *n, *p;
-
- if(!q)
- return NULL;
-
- if(iter == NULL)
- return NULL;
-
- if(iter == (q_iter)q->head)
- return Q_PopHead(q);
-
- if(iter == (q_iter)q->tail)
- return Q_PopTail(q);
-
- n = ((node*)iter)->next;
- p = ((node*)iter)->prev;
- d = ((node*)iter)->data;
-
- free(iter);
-
- if(p) {
- p->next = n;
- }
- if (q->cursor == (node*)iter) {
- if (p) {
- q->cursor = p;
- } else {
- q->cursor = n;
- }
- }
-
-
- if (n != NULL) {
- n->prev = p;
- }
-
- q->size--;
-
- q->sorted = False_;
-
- return d;
-}
-
-
-
-/***
- *
- ** function : Q_DelCur
- *
- ** purpose : Delete the current queue element as pointed to by
- * the cursor.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element.
- *
- ** comments : WARNING! It is the responsibility of the caller to
- * free any memory. Queue cannot distinguish between
- * pointers to literals and malloced memory.
- *
- ***/
-
-void *Q_DelCur(queue* q) {
- if(q) {
- return Q_Iter_Del(q, (q_iter)q->cursor);
- }
- return 0;
-}
-
-
-/***
- *
- ** function : Q_Destroy
- *
- ** purpose : Free all queue resources
- *
- ** parameters : queue pointer
- *
- ** returns : null.
- *
- ** comments : WARNING! It is the responsibility of the caller to
- * free any memory. Queue cannot distinguish between
- * pointers to literals and malloced memory.
- *
- ***/
-
-void Q_Destroy(queue *q)
-{
- while(!Q_IsEmpty(q)) {
- Q_PopHead(q);
- }
-}
-
-
-/***
- *
- ** function : Q_Get
- *
- ** purpose : get the pointer to the data at the cursor location
- *
- ** parameters : queue pointer
- *
- ** returns : data element pointer
- *
- ** comments :
- *
- ***/
-
-void *Q_Get(queue *q)
-{
- if(!q)
- return NULL;
-
- if(q->cursor == NULL)
- return NULL;
- return q->cursor->data;
-}
-
-
-
-/***
- *
- ** function : Q_Put
- *
- ** purpose : replace pointer to data with new pointer to data.
- *
- ** parameters : queue pointer, data pointer
- *
- ** returns : boolean- True_ if successful, False_ if cursor at NULL
- *
- ** comments :
- *
- ***/
-
-int Q_Put(queue *q, void *data)
-{
- if(q && data) {
- if(q->cursor == NULL)
- return False_;
-
- q->cursor->data = data;
- return True_;
- }
- return False_;
-}
-
-
-/***
- *
- ** function : Q_Find
- *
- ** purpose : Linear search of queue for match with key in *data
- *
- ** parameters : queue pointer q, data pointer with data containing key
- * comparison function here called Comp.
- *
- ** returns : True_ if found , False_ if not in queue.
- *
- ** comments : Useful for small queues that are constantly changing
- * and would otherwise need constant sorting with the
- * Q_Seek function.
- * For description of Comp see Q_Sort.
- * Queue cursor left on position found item else at end.
- *
- ***/
-
-int Q_Find(queue *q, void *data,
- int (*Comp)(const void *, const void *))
-{
- void *d;
-
- if (q == NULL) {
- return False_;
- }
-
- d = Q_Head(q);
- do {
- if(Comp(d, data) == 0)
- return True_;
- d = Q_Next(q);
- } while(!Q_AtTail(q));
-
- if(Comp(d, data) == 0)
- return True_;
-
- return False_;
-}
-
-/*======== Sorted Queue and Index functions ========= */
-
-
-static void QuickSort(void *list[], int low, int high,
- int (*Comp)(const void *, const void *))
-{
- int flag = 1, i, j;
- void *key, *temp;
-
- if(low < high) {
- i = low;
- j = high + 1;
-
- key = list[ low ];
-
- while(flag) {
- i++;
- while(Comp(list[i], key) < 0)
- i++;
-
- j--;
- while(Comp(list[j], key) > 0)
- j--;
-
- if(i < j) {
- temp = list[i];
- list[i] = list[j];
- list[j] = temp;
- }
- else flag = 0;
- }
-
- temp = list[low];
- list[low] = list[j];
- list[j] = temp;
-
- QuickSort(list, low, j-1, Comp);
- QuickSort(list, j+1, high, Comp);
- }
-}
-
-
-/***
- *
- ** function : Q_Sort
- *
- ** purpose : sort the queue and allow index style access.
- *
- ** parameters : queue pointer, comparison function compatible with
- * with 'qsort'.
- *
- ** returns : True_ if sort succeeded. False_ if error occurred.
- *
- ** comments : Comp function supplied by caller must return
- * -1 if data1 < data2
- * 0 if data1 == data2
- * +1 if data1 > data2
- *
- * for Comp(data1, data2)
- *
- * If queue is already sorted it frees the memory of the
- * old index and starts again.
- *
- ***/
-
-int Q_Sort(queue *q, int (*Comp)(const void *, const void *))
-{
- int i;
- void *d;
- datanode *dn;
-
- /* if already sorted free memory for tag array */
-
- if(q->sorted) {
- free(index);
- free(posn_index);
- q->sorted = False_;
- }
-
- /* Now allocate memory of array, array of pointers */
-
- index = malloc(q->size * sizeof(q->cursor->data));
- if(index == NULL)
- return False_;
-
- posn_index = malloc(q->size * sizeof(q->cursor));
- if(posn_index == NULL) {
- free(index);
- return False_;
- }
-
- /* Walk queue putting pointers into array */
-
- d = Q_Head(q);
- for(i=0; i < q->size; i++) {
- index[i] = d;
- posn_index[i] = q->cursor;
- d = Q_Next(q);
- }
-
- /* Now sort the index */
-
- QuickSort(index, 0, q->size - 1, Comp);
-
- /* Rearrange the actual queue into correct order */
-
- dn = q->head;
- i = 0;
- while(dn != NULL) {
- dn->data = index[i++];
- dn = dn->next;
- }
-
- /* Re-position to original element */
-
- if(d != NULL)
- Q_Find(q, d, Comp);
- else Q_Head(q);
-
- q->sorted = True_;
-
- return True_;
-}
-
-
-/***
- *
- ** function : Q_BSearch
- *
- ** purpose : binary search of queue index for node containing key
- *
- ** parameters : queue pointer 'q', data pointer of key 'key',
- * Comp comparison function.
- *
- ** returns : integer index into array of node pointers,
- * or -1 if not found.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- *
- ***/
-
-static int Q_BSearch( queue *q, void *key,
- int (*Comp)(const void *, const void*))
-{
- int low, mid, hi, val;
-
- low = 0;
- hi = q->size - 1;
-
- while(low <= hi) {
- mid = (low + hi) / 2;
- val = Comp(key, index[ mid ]);
-
- if(val < 0)
- hi = mid - 1;
-
- else if(val > 0)
- low = mid + 1;
-
- else /* Success */
- return mid;
- }
-
- /* Not Found */
-
- return -1;
-}
-
-
-/***
- *
- ** function : Q_Seek
- *
- ** purpose : use index to locate data according to key in 'data'
- *
- ** parameters : queue pointer 'q', data pointer 'data', Comp comparison
- * function.
- *
- ** returns : pointer to data or NULL if could not find it or could
- * not sort queue.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- *
- ***/
-
-void *Q_Seek(queue *q, void *data, int (*Comp)(const void *, const void *))
-{
- int idx;
-
- if (q == NULL) {
- return NULL;
- }
-
- if(!q->sorted) {
- if(!Q_Sort(q, Comp))
- return NULL;
- }
-
- idx = Q_BSearch(q, data, Comp);
-
- if(idx < 0)
- return NULL;
-
- q->cursor = posn_index[idx];
-
- return index[idx];
-}
-
-
-
-/***
- *
- ** function : Q_Insert
- *
- ** purpose : Insert an element into an indexed queue
- *
- ** parameters : queue pointer 'q', data pointer 'data', Comp comparison
- * function.
- *
- ** returns : pointer to data or NULL if could not find it or could
- * not sort queue.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- * WARNING! This code can be very slow since each new
- * element means a new Q_Sort. Should only be used for
- * the insertion of the odd element ,not the piecemeal
- * building of an entire queue.
- ***/
-
-int Q_Insert(queue *q, void *data, int (*Comp)(const void *, const void *))
-{
- if (q == NULL) {
- return False_;
- }
-
- Q_PushHead(q, data);
-
- if(!Q_Sort(q, Comp))
- return False_;
-
- return True_;
-}
-
-/* read only funcs for iterating through queue. above funcs modify queue */
-q_iter Q_Iter_Head(queue *q) {
- return q ? (q_iter)q->head : NULL;
-}
-
-q_iter Q_Iter_Tail(queue *q) {
- return q ? (q_iter)q->tail : NULL;
-}
-
-q_iter Q_Iter_Next(q_iter qi) {
- return qi ? (q_iter)((node*)qi)->next : NULL;
-}
-
-q_iter Q_Iter_Prev(q_iter qi) {
- return qi ? (q_iter)((node*)qi)->prev : NULL;
-}
-
-void * Q_Iter_Get(q_iter qi) {
- return qi ? ((node*)qi)->data : NULL;
-}
-
-int Q_Iter_Put(q_iter qi, void* data) {
- if(qi) {
- ((node*)qi)->data = data;
- return True_;
- }
- return False_;
-}
diff --git a/ext/rpc/xmlrpc/libxmlrpc/queue.h b/ext/rpc/xmlrpc/libxmlrpc/queue.h
deleted file mode 100644
index e850b57e6c..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/queue.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Date last modified: Jan 2001
- * Modifications by Dan Libby (dan@libby.com), including:
- * - various fixes, null checks, etc
- * - addition of Q_Iter funcs, macros
- */
-
-/*
- * File : q.h
- *
- * Peter Yard 02 Jan 1993.
- *
- * Disclaimer: This code is released to the public domain.
- */
-
-#ifndef Q__H
-#define Q__H
-
-#ifndef False_
- #define False_ 0
-#endif
-
-#ifndef True_
- #define True_ 1
-#endif
-
-typedef struct nodeptr datanode;
-
-typedef struct nodeptr {
- void *data ;
- datanode *prev, *next ;
-} node ;
-
-/* For external use with Q_Iter* funcs */
-typedef struct nodeptr* q_iter;
-
-typedef struct {
- node *head, *tail, *cursor;
- int size, sorted, item_deleted;
-} queue;
-
-typedef struct {
- void *dataptr;
- node *loc ;
-} index_elt ;
-
-
-int Q_Init(queue *q);
-void Q_Destroy(queue *q);
-int Q_IsEmpty(queue *q);
-int Q_Size(queue *q);
-int Q_AtHead(queue *q);
-int Q_AtTail(queue *q);
-int Q_PushHead(queue *q, void *d);
-int Q_PushTail(queue *q, void *d);
-void *Q_Head(queue *q);
-void *Q_Tail(queue *q);
-void *Q_PopHead(queue *q);
-void *Q_PopTail(queue *q);
-void *Q_Next(queue *q);
-void *Q_Previous(queue *q);
-void *Q_DelCur(queue *q);
-void *Q_Get(queue *q);
-int Q_Put(queue *q, void *data);
-int Q_Sort(queue *q, int (*Comp)(const void *, const void *));
-int Q_Find(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-void *Q_Seek(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-int Q_Insert(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-
-/* read only funcs for iterating through queue. above funcs modify queue */
-q_iter Q_Iter_Head(queue *q);
-q_iter Q_Iter_Tail(queue *q);
-q_iter Q_Iter_Next(q_iter qi);
-q_iter Q_Iter_Prev(q_iter qi);
-void* Q_Iter_Get(q_iter qi);
-int Q_Iter_Put(q_iter qi, void* data); // not read only! here for completeness.
-void* Q_Iter_Del(queue *q, q_iter iter); // not read only! here for completeness.
-
-/* Fast (macro'd) versions of above */
-#define Q_Iter_Head_F(q) (q ? (q_iter)((queue*)q)->head : NULL)
-#define Q_Iter_Tail_F(q) (q ? (q_iter)((queue*)q)->tail : NULL)
-#define Q_Iter_Next_F(qi) (qi ? (q_iter)((node*)qi)->next : NULL)
-#define Q_Iter_Prev_F(qi) (qi ? (q_iter)((node*)qi)->prev : NULL)
-#define Q_Iter_Get_F(qi) (qi ? ((node*)qi)->data : NULL)
-
-#endif /* Q__H */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/simplestring.c b/ext/rpc/xmlrpc/libxmlrpc/simplestring.c
deleted file mode 100644
index 7ce68d3410..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/simplestring.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-#define SIMPLESTRING_INCR 32
-
-/****h* ABOUT/simplestring
- * NAME
- * simplestring
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 06/2000
- * HISTORY
- * 10/15/2000 -- danda -- adding robodoc documentation
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * This code was written primarily for xmlrpc, but has found some other uses.
- *
- * simplestring is, as the name implies, a simple API for dealing with C strings.
- * Why would I write yet another string API? Because I couldn't find any that were
- * a) free / GPL, b) simple/lightweight, c) fast, not doing unneccesary strlens all
- * over the place. So. It is simple, and it seems to work, and it is pretty fast.
- *
- * Oh, and it is also binary safe, ie it can handle strings with embedded NULLs,
- * so long as the real length is passed in.
- *
- * And the masses rejoiced.
- *
- * BUGS
- * there must be some.
- ******/
-
-
-#include "simplestring.h"
-
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-/*----------------------**
-* Begin String Functions *
-*-----------------------*/
-
-/****f* FUNC/simplestring_init
- * NAME
- * simplestring_init
- * SYNOPSIS
- * void simplestring_init(simplestring* string)
- * FUNCTION
- * initialize string
- * INPUTS
- * string - pointer to a simplestring struct that will be initialized
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_free ()
- * simplestring_clear ()
- * SOURCE
- */
-void simplestring_init(simplestring* string) {
- memset(string, 0, sizeof(simplestring));
-}
-/******/
-
-static void simplestring_init_str(simplestring* string) {
- string->str = (char*)malloc(SIMPLESTRING_INCR);
- if(string->str) {
- string->str[0] = 0;
- string->len = 0;
- string->size = SIMPLESTRING_INCR;
- }
- else {
- string->size = 0;
- }
-}
-
-/****f* FUNC/simplestring_clear
- * NAME
- * simplestring_clear
- * SYNOPSIS
- * void simplestring_clear(simplestring* string)
- * FUNCTION
- * clears contents of a string
- * INPUTS
- * string - the string value to clear
- * RESULT
- * void
- * NOTES
- * This function is very fast as it does not de-allocate any memory.
- * SEE ALSO
- *
- * SOURCE
- */
-void simplestring_clear(simplestring* string) {
- if(string->str) {
- string->str[0] = 0;
- }
- string->len = 0;
-}
-/******/
-
-/****f* FUNC/simplestring_free
- * NAME
- * simplestring_free
- * SYNOPSIS
- * void simplestring_free(simplestring* string)
- * FUNCTION
- * frees contents of a string, if any. Does *not* free the simplestring struct itself.
- * INPUTS
- * string - value containing string to be free'd
- * RESULT
- * void
- * NOTES
- * caller is responsible for allocating and freeing simplestring* struct itself.
- * SEE ALSO
- * simplestring_init ()
- * SOURCE
- */
-void simplestring_free(simplestring* string) {
- if(string && string->str) {
- my_free(string->str);
- string->len = 0;
- }
-}
-/******/
-
-/****f* FUNC/simplestring_addn
- * NAME
- * simplestring_addn
- * SYNOPSIS
- * void simplestring_addn(simplestring* string, const char* add, int add_len)
- * FUNCTION
- * copies n characters from source to target string
- * INPUTS
- * target - target string
- * source - source string
- * add_len - number of characters to copy
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_add ()
- * SOURCE
- */
-void simplestring_addn(simplestring* target, const char* source, int add_len) {
- if(target && source) {
- if(!target->str) {
- simplestring_init_str(target);
- }
- if(target->len + add_len + 1 > target->size) {
- /* newsize is current length + new length */
- int newsize = target->len + add_len + 1;
- int incr = target->size * 2;
-
- /* align to SIMPLESTRING_INCR increments */
- newsize = newsize - (newsize % incr) + incr;
- target->str = (char*)realloc(target->str, newsize);
-
- target->size = target->str ? newsize : 0;
- }
-
- if(target->str) {
- if(add_len) {
- memcpy(target->str + target->len, source, add_len);
- }
- target->len += add_len;
- target->str[target->len] = 0; /* null terminate */
- }
- }
-}
-/******/
-
-/****f* FUNC/simplestring_add
- * NAME
- * simplestring_add
- * SYNOPSIS
- * void simplestring_add(simplestring* string, const char* add)
- * FUNCTION
- * appends a string of unknown length from source to target
- * INPUTS
- * target - the target string to append to
- * source - the source string of unknown length
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_addn ()
- * SOURCE
- */
-void simplestring_add(simplestring* target, const char* source) {
- if(target && source) {
- simplestring_addn(target, source, strlen(source));
- }
-}
-/******/
-
-
-/*----------------------
-* End String Functions *
-*--------------------**/
diff --git a/ext/rpc/xmlrpc/libxmlrpc/simplestring.h b/ext/rpc/xmlrpc/libxmlrpc/simplestring.h
deleted file mode 100644
index a891ba6d78..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/simplestring.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef __SIMPLESTRING_H__
- #define __SIMPLESTRING_H__
-
-/*-********************************
-* begin simplestring header stuff *
-**********************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /****s* struct/simplestring
- * NAME
- * simplestring
- * NOTES
- * represents a string efficiently for fast appending, etc.
- * SOURCE
- */
-typedef struct _simplestring {
- char* str; /* string buf */
- int len; /* length of string/buf */
- int size; /* size of allocated buffer */
-} simplestring;
-/******/
-
-#ifndef NULL
- #define NULL 0
-#endif
-
-void simplestring_init(simplestring* string);
-void simplestring_clear(simplestring* string);
-void simplestring_free(simplestring* string);
-void simplestring_addn(simplestring* string, const char* add, int add_len);
-
-#ifdef __cplusplus
-}
-#endif
-
-/*-******************************
-* end simplestring header stuff *
-********************************/
-
-#endif /* __SIMPLESTRING_H__ */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/system_methods.c b/ext/rpc/xmlrpc/libxmlrpc/system_methods.c
deleted file mode 100644
index 742b837143..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/system_methods.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-/****h* ABOUT/system_methods
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * HISTORY
- * 4/28/2001 -- danda -- adding system.multicall and separating out system methods.
- * TODO
- * NOTES
- *******/
-
-
-#include "queue.h"
-#include "xmlrpc.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include "system_methods_private.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-static const char* xsm_introspection_xml =
-"<?xml version='1.0' ?>"
-
-"<introspection version='1.0'>"
- "<typeList>"
-
- "<typeDescription name='system.value' basetype='struct' desc='description of a value'>"
- "<value type='string' name='name' optional='yes'>value identifier</value>"
- "<value type='string' name='type'>value&apos;s xmlrpc or user-defined type</value>"
- "<value type='string' name='description'>value&apos;s textual description</value> "
- "<value type='boolean' name='optional'>true if value is optional, else it is required</value> "
- "<value type='any' name='member' optional='yes'>a child of this element. n/a for scalar types</value> "
- "</typeDescription>"
-
- "<typeDescription name='system.valueList' basetype='array' desc='list of value descriptions'>"
- "<value type='system.value'/>"
- "</typeDescription>"
-
- "<typeDescription name='system.stringList' basetype='array' desc='list of strings'>"
- "<value type='string'/>"
- "</typeDescription>"
-
-
- "</typeList>"
-
- "<methodList>"
-
- "<!-- system.describeMethods -->"
- "<methodDescription name='system.describeMethods'>"
- "<author>Dan Libby</author>"
- "<purpose>fully describes the methods and types implemented by this XML-RPC server.</purpose>"
- "<version>1.1</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='array' name='methodList' optional='yes' desc='a list of methods to be described. if omitted, all are described.'>"
- "<value type='string'>a valid method name</value>"
- "</value>"
- "</params>"
- "<returns>"
- "<value type='struct' desc='contains methods list and types list'>"
- "<value type='array' name='methodList' desc='a list of methods'>"
- "<value type='struct' desc='representation of a single method'>"
- "<value type='string' name='name'>method name</value>"
- "<value type='string' name='version' optional='yes'>method version</value>"
- "<value type='string' name='author' optional='yes'>method author</value>"
- "<value type='string' name='purpose' optional='yes'>method purpose</value>"
- "<value type='array' name='signatures' desc='list of method signatures'>"
- "<value type='struct' desc='representation of a single signature'>"
- "<value type='system.valueList' name='params' optional='yes'>parameter list</value>"
- "<value type='system.valueList' name='returns' optional='yes'>return value list</value>"
- "</value>"
- "</value>"
- "<value type='system.stringList' name='bugs' optional='yes'>list of known bugs</value>"
- "<value type='system.stringList' name='errors' optional='yes'>list of possible errors and error codes</value>"
- "<value type='system.stringList' name='examples' optional='yes'>list of examples</value>"
- "<value type='system.stringList' name='history' optional='yes'>list of modifications</value>"
- "<value type='system.stringList' name='notes' optional='yes'>list of notes</value>"
- "<value type='system.stringList' name='see' optional='yes'>see also. list of related methods</value>"
- "<value type='system.stringList' name='todo' optional='yes'>list of unimplemented features</value>"
- "</value>"
- "</value>"
- "<value type='array' name='typeList' desc='a list of type descriptions. Typically used for referencing complex types'>"
- "<value type='system.value'>a type description</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.listMethods -->"
- "<methodDescription name='system.listMethods'>"
- "<author>Dan Libby</author>"
- "<purpose>enumerates the methods implemented by this XML-RPC server.</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<returns>"
- "<value type='array' desc='an array of strings'>"
- "<value type='string'>name of a method implemented by the server.</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.describeMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.methodHelp -->"
- "<methodDescription name='system.methodHelp'>"
- "<author>Dan Libby</author>"
- "<purpose>provides documentation string for a single method</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='string' name='methodName'>name of the method for which documentation is desired</value>"
- "</params>"
- "<returns>"
- "<value type='string'>help text if defined for the method passed, otherwise an empty string</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.methodSignature -->"
- "<methodDescription name='system.methodSignature'>"
- "<author>Dan Libby</author>"
- "<purpose>provides 1 or more signatures for a single method</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='string' name='methodName'>name of the method for which documentation is desired</value>"
- "</params>"
- "<returns>"
- "<value type='array' desc='a list of arrays, each representing a signature'>"
- "<value type='array' desc='a list of strings. the first element represents the method return value. subsequent elements represent parameters.'>"
- "<value type='string'>a string indicating the xmlrpc type of a value. one of: string, int, double, base64, datetime, array, struct</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.multiCall -->"
- "<methodDescription name='system.multiCall'>"
- "<author>Dan Libby</author>"
- "<purpose>executes multiple methods in sequence and returns the results</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='array' name='methodList' desc='an array of method call structs'>"
- "<value type='struct' desc='a struct representing a single method call'>"
- "<value type='string' name='methodName' desc='name of the method to be executed'/>"
- "<value type='array' name='params' desc='an array representing the params to a method. sub-elements should match method signature'/>"
- "</value>"
- "</value>"
- "</params>"
- "<returns>"
- "<value type='array' desc='an array of method responses'>"
- "<value type='array' desc='an array containing a single value, which is the method&apos;s response'/>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.getCapabilities -->"
- "<methodDescription name='system.getCapabilities'>"
- "<author>Dan Libby</author>"
- "<purpose>returns a list of capabilities supported by this server</purpose>"
- "<version>1.0</version>"
- "<notes><item>spec url: http://groups.yahoo.com/group/xml-rpc/message/2897</item></notes>"
- "<signatures>"
- "<signature>"
- "<returns>"
- "<value type='struct' desc='list of capabilities, each with a unique key defined by the capability&apos;s spec'>"
- "<value type='struct' desc='definition of a single capability'>"
- "<value type='string' name='specURL'>www address of the specification defining this capability</value>"
- "<value type='int' name='specVersion'>version of the spec that this server's implementation conforms to</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "</methodList>"
-"</introspection>";
-
-
-/* forward declarations for static (non public, non api) funcs */
-static XMLRPC_VALUE xsm_system_multicall_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xsm_system_get_capabilities_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-
-/*-*******************
-* System Methods API *
-*********************/
-
-static void xsm_lazy_doc_methods_cb(XMLRPC_SERVER server, void* userData) {
- XMLRPC_VALUE xDesc = XMLRPC_IntrospectionCreateDescription(xsm_introspection_xml, NULL);
- XMLRPC_ServerAddIntrospectionData(server, xDesc);
- XMLRPC_CleanupValue(xDesc);
-}
-
-void xsm_register(XMLRPC_SERVER server) {
- xi_register_system_methods(server);
-
- XMLRPC_ServerRegisterMethod(server, xsm_token_system_multicall, xsm_system_multicall_cb);
- XMLRPC_ServerRegisterMethod(server, xsm_token_system_get_capabilities, xsm_system_get_capabilities_cb);
-
- /* callback for documentation generation should it be requested */
- XMLRPC_ServerRegisterIntrospectionCallback(server, xsm_lazy_doc_methods_cb);
-}
-
-XMLRPC_VALUE xsm_system_multicall_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xArray = XMLRPC_VectorRewind(XMLRPC_RequestGetData(input));
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(0, xmlrpc_vector_array);
-
- if (xArray) {
- XMLRPC_VALUE xMethodIter = XMLRPC_VectorRewind(xArray);
-
- while (xMethodIter) {
- XMLRPC_REQUEST request = XMLRPC_RequestNew();
- if(request) {
- const char* methodName = XMLRPC_VectorGetStringWithID(xMethodIter, "methodName");
- XMLRPC_VALUE params = XMLRPC_VectorGetValueWithID(xMethodIter, "params");
-
- if(methodName && params) {
- XMLRPC_VALUE xRandomArray = XMLRPC_CreateVector(0, xmlrpc_vector_array);
- XMLRPC_RequestSetMethodName(request, methodName);
- XMLRPC_RequestSetData(request, params);
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
-
- XMLRPC_AddValueToVector(xRandomArray,
- XMLRPC_ServerCallMethod(server, request, userData));
-
- XMLRPC_AddValueToVector(xReturn, xRandomArray);
- }
- XMLRPC_RequestFree(request, 1);
- }
- xMethodIter = XMLRPC_VectorNext(xArray);
- }
- }
- return xReturn;
-}
-
-
-XMLRPC_VALUE xsm_system_get_capabilities_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(0, xmlrpc_vector_struct);
- XMLRPC_VALUE xFaults = XMLRPC_CreateVector("faults_interop", xmlrpc_vector_struct);
- XMLRPC_VALUE xIntro = XMLRPC_CreateVector("introspection", xmlrpc_vector_struct);
-
- /* support for fault spec */
- XMLRPC_VectorAppendString(xFaults, "specURL", "http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php", 0);
- XMLRPC_VectorAppendInt(xFaults, "specVersion", 20010516);
-
- /* support for introspection spec */
- XMLRPC_VectorAppendString(xIntro, "specURL", "http://xmlrpc-epi.sourceforge.net/specs/rfc.introspection.php", 0);
- XMLRPC_VectorAppendInt(xIntro, "specVersion", 20010516);
-
- XMLRPC_AddValuesToVector(xReturn,
- xFaults,
- xIntro,
- NULL);
-
- return xReturn;
-
-}
-
-/*-***********************
-* End System Methods API *
-*************************/
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/system_methods_private.h b/ext/rpc/xmlrpc/libxmlrpc/system_methods_private.h
deleted file mode 100644
index 72408fd3c4..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/system_methods_private.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Dan Libby, Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-
-#ifndef __SYSTEM_METHODS_PRIVATE_H
-/*
- * Avoid include redundancy.
- */
-#define __SYSTEM_METHODS_PRIVATE_H
-
-/*----------------------------------------------------------------------------
- * system_methods_private.h
- *
- * Purpose:
- * define non-public system.* methods
- * Comments:
- * xsm = xmlrpc system methods
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-#define xsm_token_system_multicall "system.multiCall"
-#define xsm_token_system_get_capabilities "system.getCapabilities"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-void xsm_register(XMLRPC_SERVER server);
-int xsm_is_system_method(XMLRPC_Callback cb);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __SYSTEM_METHODS_PRIVATE_H */
-
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_element.c b/ext/rpc/xmlrpc/libxmlrpc/xml_element.c
deleted file mode 100644
index 2625e99913..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_element.c
+++ /dev/null
@@ -1,714 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-
-/****h* ABOUT/xml_element
- * NAME
- * xml_element
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 06/2000
- * HISTORY
- * 10/15/2000 -- danda -- adding robodoc documentation
- * TODO
- * Nicer external API. Get rid of macros. Make opaque types, etc.
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * This code incorporates ideas from expat-ensor from http://xml.ensor.org.
- *
- * It was coded primarily to act as a go-between for expat and xmlrpc. To this
- * end, it stores xml elements, their sub-elements, and their attributes in an
- * in-memory tree. When expat is done parsing, the tree can be walked, thus
- * retrieving the values. The code can also be used to build a tree via API then
- * write out the tree to a buffer, thus "serializing" the xml.
- *
- * It turns out this is useful for other purposes, such as parsing config files.
- * YMMV.
- *
- * Some Features:
- * - output option for xml escaping data. Choices include no escaping, entity escaping,
- * or CDATA sections.
- * - output option for character encoding. Defaults to (none) utf-8.
- * - output option for verbosity/readability. ultra-compact, newlines, pretty/level indented.
- *
- * BUGS
- * there must be some.
- ******/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#include "xml_element.h"
-#include "queue.h"
-#include "expat.h"
-#include "encodings.h"
-
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-#define XML_DECL_START "<?xml"
-#define XML_DECL_START_LEN sizeof(XML_DECL_START) - 1
-#define XML_DECL_VERSION "version='1.0'"
-#define XML_DECL_VERSION_LEN sizeof(XML_DECL_VERSION) - 1
-#define XML_DECL_ENCODING_ATTR "encoding"
-#define XML_DECL_ENCODING_ATTR_LEN sizeof(XML_DECL_ENCODING_ATTR) - 1
-#define XML_DECL_ENCODING_DEFAULT "utf-8"
-#define XML_DECL_ENCODING_DEFAULT_LEN sizeof(XML_DECL_ENCODING_DEFAULT) - 1
-#define XML_DECL_END "?>"
-#define XML_DECL_END_LEN sizeof(XML_DECL_END) - 1
-#define START_TOKEN_BEGIN "<"
-#define START_TOKEN_BEGIN_LEN sizeof(START_TOKEN_BEGIN) - 1
-#define START_TOKEN_END ">"
-#define START_TOKEN_END_LEN sizeof(START_TOKEN_END) - 1
-#define EMPTY_START_TOKEN_END "/>"
-#define EMPTY_START_TOKEN_END_LEN sizeof(EMPTY_START_TOKEN_END) - 1
-#define END_TOKEN_BEGIN "</"
-#define END_TOKEN_BEGIN_LEN sizeof(END_TOKEN_BEGIN) - 1
-#define END_TOKEN_END ">"
-#define END_TOKEN_END_LEN sizeof(END_TOKEN_END) - 1
-#define ATTR_DELIMITER "\""
-#define ATTR_DELIMITER_LEN sizeof(ATTR_DELIMITER) - 1
-#define CDATA_BEGIN "<![CDATA["
-#define CDATA_BEGIN_LEN sizeof(CDATA_BEGIN) - 1
-#define CDATA_END "]]>"
-#define CDATA_END_LEN sizeof(CDATA_END) - 1
-#define EQUALS "="
-#define EQUALS_LEN sizeof(EQUALS) - 1
-#define WHITESPACE " "
-#define WHITESPACE_LEN sizeof(WHITESPACE) - 1
-#define NEWLINE "\n"
-#define NEWLINE_LEN sizeof(NEWLINE) - 1
-#define MAX_VAL_BUF 144
-#define SCALAR_STR "SCALAR"
-#define SCALAR_STR_LEN sizeof(SCALAR_STR) - 1
-#define VECTOR_STR "VECTOR"
-#define VECTOR_STR_LEN sizeof(VECTOR_STR) - 1
-#define RESPONSE_STR "RESPONSE"
-#define RESPONSE_STR_LEN sizeof(RESPONSE_STR) - 1
-
-
-/*-----------------------------
-- Begin xml_element Functions -
------------------------------*/
-
-/****f* xml_element/xml_elem_free_non_recurse
- * NAME
- * xml_elem_free_non_recurse
- * SYNOPSIS
- * void xml_elem_free_non_recurse(xml_element* root)
- * FUNCTION
- * free a single xml element. child elements will not be freed.
- * INPUTS
- * root - the element to free
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_free ()
- * xml_elem_new ()
- * SOURCE
- */
-void xml_elem_free_non_recurse(xml_element* root) {
- if(root) {
- xml_element_attr* attrs = Q_Head(&root->attrs);
- while(attrs) {
- my_free(attrs->key);
- my_free(attrs->val);
- my_free(attrs);
- attrs = Q_Next(&root->attrs);
- }
-
- Q_Destroy(&root->children);
- Q_Destroy(&root->attrs);
- my_free((char*)root->name);
- simplestring_free(&root->text);
- my_free(root);
- }
-}
-/******/
-
-/****f* xml_element/xml_elem_free
- * NAME
- * xml_elem_free
- * SYNOPSIS
- * void xml_elem_free(xml_element* root)
- * FUNCTION
- * free an xml element and all of its child elements
- * INPUTS
- * root - the root of an xml tree you would like to free
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_free_non_recurse ()
- * xml_elem_new ()
- * SOURCE
- */
-void xml_elem_free(xml_element* root) {
- if(root) {
- xml_element* kids = Q_Head(&root->children);
- while(kids) {
- xml_elem_free(kids);
- kids = Q_Next(&root->children);
- }
- xml_elem_free_non_recurse(root);
- }
-}
-/******/
-
-/****f* xml_element/xml_elem_new
- * NAME
- * xml_elem_new
- * SYNOPSIS
- * xml_element* xml_elem_new()
- * FUNCTION
- * allocates and initializes a new xml_element
- * INPUTS
- * none
- * RESULT
- * xml_element* or NULL. NULL indicates an out-of-memory condition.
- * NOTES
- * SEE ALSO
- * xml_elem_free ()
- * xml_elem_free_non_recurse ()
- * SOURCE
- */
-xml_element* xml_elem_new() {
- xml_element* elem = calloc(1, sizeof(xml_element));
- if(elem) {
- Q_Init(&elem->children);
- Q_Init(&elem->attrs);
- simplestring_init(&elem->text);
-
- /* init empty string in case we don't find any char data */
- simplestring_addn(&elem->text, "", 0);
- }
- return elem;
-}
-/******/
-
-static int xml_elem_writefunc(int (*fptr)(void *data, const char *text, int size), const char *text, void *data, int len)
-{
- return fptr && text ? fptr(data, text, len ? len : strlen(text)) : 0;
-}
-
-
-
-static int create_xml_escape(char *pString, unsigned char c)
-{
- int counter = 0;
-
- pString[counter++] = '&';
- pString[counter++] = '#';
- if(c >= 100) {
- pString[counter++] = c / 100 + '0';
- c = c % 100;
- }
- if(c >= 10) {
- pString[counter++] = c / 10 + '0';
- c = c % 10;
- }
- pString[counter++] = c + '0';
- pString[counter++] = ';';
- return counter;
-}
-
-#define non_ascii(c) (c > 127)
-#define non_print(c) (!isprint(c))
-#define markup(c) (c == '&' || c == '\"' || c == '>' || c == '<')
-#define entity_length(c) ( (c >= 100) ? 3 : ((c >= 10) ? 2 : 1) ) + 3; /* "&#" + c + ";" */
-
-/*
- * xml_elem_entity_escape
- *
- * Purpose:
- * escape reserved xml chars and non utf-8 chars as xml entities
- * Comments:
- * The return value may be a new string, or null if no
- * conversion was performed. In the latter case, *newlen will
- * be 0.
- * Flags (to escape)
- * xml_elem_no_escaping = 0x000,
- * xml_elem_entity_escaping = 0x002, // escape xml special chars as entities
- * xml_elem_non_ascii_escaping = 0x008, // escape chars above 127
- * xml_elem_cdata_escaping = 0x010, // wrap in cdata
- */
-static char* xml_elem_entity_escape(const char* buf, int old_len, int *newlen, XML_ELEM_ESCAPING flags) {
- char *pRetval = 0;
- int iNewBufLen=0;
-
-#define should_escape(c, flag) ( ((flag & xml_elem_markup_escaping) && markup(c)) || \
- ((flag & xml_elem_non_ascii_escaping) && non_ascii(c)) || \
- ((flag & xml_elem_non_print_escaping) && non_print(c)) )
-
- if(buf && *buf) {
- const unsigned char *bufcopy;
- char *NewBuffer;
- int ToBeXmlEscaped=0;
- int iLength;
- bufcopy = buf;
- iLength= old_len ? old_len : strlen(buf);
- while(*bufcopy) {
- if( should_escape(*bufcopy, flags) ) {
- /* the length will increase by length of xml escape - the character length */
- iLength += entity_length(*bufcopy);
- ToBeXmlEscaped=1;
- }
- bufcopy++;
- }
-
- if(ToBeXmlEscaped) {
-
- NewBuffer= malloc(iLength+1);
- if(NewBuffer) {
- bufcopy=buf;
- while(*bufcopy) {
- if(should_escape(*bufcopy, flags)) {
- iNewBufLen += create_xml_escape(NewBuffer+iNewBufLen,*bufcopy);
- }
- else {
- NewBuffer[iNewBufLen++]=*bufcopy;
- }
- bufcopy++;
- }
- NewBuffer[iNewBufLen] = 0;
- pRetval = NewBuffer;
- }
- }
- }
-
- if(newlen) {
- *newlen = iNewBufLen;
- }
-
- return pRetval;
-}
-
-
-static void xml_element_serialize(xml_element *el, int (*fptr)(void *data, const char *text, int size), void *data, XML_ELEM_OUTPUT_OPTIONS options, int depth)
-{
- int i;
- static STRUCT_XML_ELEM_OUTPUT_OPTIONS default_opts = {xml_elem_pretty, xml_elem_markup_escaping | xml_elem_non_print_escaping, XML_DECL_ENCODING_DEFAULT};
- static char whitespace[] = " "
- " "
- " ";
- depth++;
-
- if(!el) {
- fprintf(stderr, "Nothing to write\n");
- return;
- }
- if(!options) {
- options = &default_opts;
- }
-
- /* print xml declaration if at root level */
- if(depth == 1) {
- xml_elem_writefunc(fptr, XML_DECL_START, data, XML_DECL_START_LEN);
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_VERSION, data, XML_DECL_VERSION_LEN);
- if(options->encoding && *options->encoding) {
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_ENCODING_ATTR, data, XML_DECL_ENCODING_ATTR_LEN);
- xml_elem_writefunc(fptr, EQUALS, data, EQUALS_LEN);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- xml_elem_writefunc(fptr, options->encoding, data, 0);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- }
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_END, data, XML_DECL_END_LEN);
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
- }
-
- if(options->verbosity == xml_elem_pretty && depth > 2) {
- xml_elem_writefunc(fptr, whitespace, data, depth - 2);
- }
- /* begin element */
- xml_elem_writefunc(fptr,START_TOKEN_BEGIN, data, START_TOKEN_BEGIN_LEN);
- if(el->name) {
- xml_elem_writefunc(fptr, el->name, data, 0);
-
- /* write attrs, if any */
- if(Q_Size(&el->attrs)) {
- xml_element_attr* iter = Q_Head(&el->attrs);
- while( iter ) {
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, iter->key, data, 0);
- xml_elem_writefunc(fptr, EQUALS, data, EQUALS_LEN);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- xml_elem_writefunc(fptr, iter->val, data, 0);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
-
- iter = Q_Next(&el->attrs);
- }
- }
- }
- else {
- xml_elem_writefunc(fptr, "None", data, 0);
- }
- /* if no text and no children, use abbreviated form, eg: <foo/> */
- if(!el->text.len && !Q_Size(&el->children)) {
- xml_elem_writefunc(fptr, EMPTY_START_TOKEN_END, data, EMPTY_START_TOKEN_END_LEN);
- }
- /* otherwise, print element contents */
- else {
- xml_elem_writefunc(fptr, START_TOKEN_END, data, START_TOKEN_END_LEN);
-
- /* print text, if any */
- if(el->text.len) {
- char* escaped_str = el->text.str;
- int buflen = el->text.len;
-
- if(options->escaping && options->escaping != xml_elem_cdata_escaping) {
- escaped_str = xml_elem_entity_escape(el->text.str, buflen, &buflen, options->escaping );
- if(!escaped_str) {
- escaped_str = el->text.str;
- }
- }
-
- if(options->escaping & xml_elem_cdata_escaping) {
- xml_elem_writefunc(fptr, CDATA_BEGIN, data, CDATA_BEGIN_LEN);
- }
-
- xml_elem_writefunc(fptr, escaped_str, data, buflen);
-
- if(escaped_str != el->text.str) {
- my_free(escaped_str);
- }
-
- if(options->escaping & xml_elem_cdata_escaping) {
- xml_elem_writefunc(fptr, CDATA_END, data, CDATA_END_LEN);
- }
- }
- /* no text, so print child elems */
- else {
- xml_element *kids = Q_Head(&el->children);
- i = 0;
- while( kids ) {
- if(i++ == 0) {
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
- }
- xml_element_serialize(kids, fptr, data, options, depth);
- kids = Q_Next(&el->children);
- }
- if(i) {
- if(options->verbosity == xml_elem_pretty && depth > 2) {
- xml_elem_writefunc(fptr, whitespace, data, depth - 2);
- }
- }
- }
-
- xml_elem_writefunc(fptr, END_TOKEN_BEGIN, data, END_TOKEN_BEGIN_LEN);
- xml_elem_writefunc(fptr,el->name ? el->name : "None", data, 0);
- xml_elem_writefunc(fptr, END_TOKEN_END, data, END_TOKEN_END_LEN);
- }
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
-}
-
-/* print buf to file */
-static file_out_fptr(void *f, const char *text, int size)
-{
- fputs(text, (FILE *)f);
-}
-
-/* print buf to simplestring */
-static simplestring_out_fptr(void *f, const char *text, int size)
-{
- simplestring* buf = (simplestring*)f;
- if(buf) {
- simplestring_addn(buf, text, size);
- }
-}
-
-/****f* xml_element/xml_elem_serialize_to_string
- * NAME
- * xml_elem_serialize_to_string
- * SYNOPSIS
- * void xml_element_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len)
- * FUNCTION
- * writes element tree as XML into a newly allocated buffer
- * INPUTS
- * el - root element of tree
- * options - options determining how output is written. see XML_ELEM_OUTPUT_OPTIONS
- * buf_len - length of returned buffer, if not null.
- * RESULT
- * char* or NULL. Must be free'd by caller.
- * NOTES
- * SEE ALSO
- * xml_elem_serialize_to_stream ()
- * xml_elem_parse_buf ()
- * SOURCE
- */
-char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len)
-{
- simplestring buf;
- simplestring_init(&buf);
-
- xml_element_serialize(el, simplestring_out_fptr, (void *)&buf, options, 0);
-
- if(buf_len) {
- *buf_len = buf.len;
- }
-
- return buf.str;
-}
-/******/
-
-/****f* xml_element/xml_elem_serialize_to_stream
- * NAME
- * xml_elem_serialize_to_stream
- * SYNOPSIS
- * void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options)
- * FUNCTION
- * writes element tree as XML into a stream (typically an opened file)
- * INPUTS
- * el - root element of tree
- * output - stream handle
- * options - options determining how output is written. see XML_ELEM_OUTPUT_OPTIONS
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_serialize_to_string ()
- * xml_elem_parse_buf ()
- * SOURCE
- */
-void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options)
-{
- xml_element_serialize(el, file_out_fptr, (void *)output, options, 0);
-}
-/******/
-
-/*--------------------------*
-* End xml_element Functions *
-*--------------------------*/
-
-
-/*----------------------
-* Begin Expat Handlers *
-*---------------------*/
-
-typedef struct _xml_elem_data {
- xml_element* root;
- xml_element* current;
- XML_ELEM_INPUT_OPTIONS input_options;
- int needs_enc_conversion;
-} xml_elem_data;
-
-
-/* expat start of element handler */
-static void startElement(void *userData, const char *name, const char **attrs)
-{
- int i;
- xml_element *c;
- xml_elem_data* mydata = (xml_elem_data*)userData;
- const char** p = attrs;
-
- if(mydata) {
- c = mydata->current;
-
- mydata->current = xml_elem_new();
- mydata->current->name = (char*)strdup(name);
- mydata->current->parent = c;
-
- /* init attrs */
- while(p && *p) {
- xml_element_attr* attr = malloc(sizeof(xml_element_attr));
- if(attr) {
- attr->key = strdup(*p);
- attr->val = strdup(*(p+1));
- Q_PushTail(&mydata->current->attrs, attr);
-
- p += 2;
- }
- }
- }
-}
-
-/* expat end of element handler */
-static void endElement(void *userData, const char *name)
-{
- xml_elem_data* mydata = (xml_elem_data*)userData;
-
- if(mydata && mydata->current && mydata->current->parent) {
- Q_PushTail(&mydata->current->parent->children, mydata->current);
-
- mydata->current = mydata->current->parent;
- }
-}
-
-/* expat char data handler */
-static void charHandler(void *userData,
- const char *s,
- int len)
-{
- xml_elem_data* mydata = (xml_elem_data*)userData;
- if(mydata && mydata->current) {
-
- /* Check if we need to decode utf-8 parser output to another encoding */
- if(mydata->needs_enc_conversion && mydata->input_options->encoding) {
- char* add_text = utf8_decode(s, len, &len, mydata->input_options->encoding);
- if(add_text) {
- simplestring_addn(&mydata->current->text, add_text, len);
- free(add_text);
- return;
- }
- }
- simplestring_addn(&mydata->current->text, s, len);
- }
-}
-/******/
-
-/*-------------------*
-* End Expat Handlers *
-*-------------------*/
-
-/*-------------------*
-* xml_elem_parse_buf *
-*-------------------*/
-
-/****f* xml_element/xml_elem_parse_buf
- * NAME
- * xml_elem_parse_buf
- * SYNOPSIS
- * xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error)
- * FUNCTION
- * parse a buffer containing XML into an xml_element in-memory tree
- * INPUTS
- * in_buf - buffer containing XML document
- * len - length of buffer
- * options - input options. optional
- * error - error result data. optional. check if result is null.
- * RESULT
- * void
- * NOTES
- * The returned data must be free'd by caller
- * SEE ALSO
- * xml_elem_serialize_to_string ()
- * xml_elem_free ()
- * SOURCE
- */
-xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error)
-{
- xml_element* xReturn = NULL;
- char buf[100] = "";
- static STRUCT_XML_ELEM_INPUT_OPTIONS default_opts = {encoding_utf_8};
-
- if(!options) {
- options = &default_opts;
- }
-
- if(in_buf) {
- XML_Parser parser;
- xml_elem_data mydata = {0};
-
- parser = XML_ParserCreate(NULL);
-
- mydata.root = xml_elem_new();
- mydata.current = mydata.root;
- mydata.input_options = options;
- mydata.needs_enc_conversion = options->encoding && strcmp(options->encoding, encoding_utf_8);
-
- XML_SetElementHandler(parser, startElement, endElement);
- XML_SetCharacterDataHandler(parser, charHandler);
-
- /* pass the xml_elem_data struct along */
- XML_SetUserData(parser, (void*)&mydata);
-
- if(!len) {
- len = strlen(in_buf);
- }
-
- /* parse the XML */
- if(XML_Parse(parser, in_buf, len, 1) == 0) {
- enum XML_Error err_code = XML_GetErrorCode(parser);
- int line_num = XML_GetCurrentLineNumber(parser);
- int col_num = XML_GetCurrentColumnNumber(parser);
- long byte_idx = XML_GetCurrentByteIndex(parser);
- int byte_total = XML_GetCurrentByteCount(parser);
- const char * error_str = XML_ErrorString(err_code);
- if(byte_idx >= 0) {
- snprintf(buf,
- sizeof(buf),
- "\n\tdata beginning %i before byte index: %s\n",
- byte_idx > 10 ? 10 : byte_idx,
- in_buf + (byte_idx > 10 ? byte_idx - 10 : byte_idx));
- }
-
- fprintf(stderr, "expat reports error code %i\n"
- "\tdescription: %s\n"
- "\tline: %i\n"
- "\tcolumn: %i\n"
- "\tbyte index: %i\n"
- "\ttotal bytes: %i\n%s ",
- err_code, error_str, line_num,
- col_num, byte_idx, byte_total, buf);
-
-
- /* error condition */
- if(error) {
- error->parser_code = (long)err_code;
- error->line = line_num;
- error->column = col_num;
- error->byte_index = byte_idx;
- error->parser_error = error_str;
- }
- }
- else {
- xReturn = (xml_element*)Q_Head(&mydata.root->children);
- }
-
- XML_ParserFree(parser);
-
-
- xml_elem_free_non_recurse(mydata.root);
- }
-
- return xReturn;
-}
-
-/******/
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_element.h b/ext/rpc/xmlrpc/libxmlrpc/xml_element.h
deleted file mode 100644
index cfe7ca2483..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_element.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef __XML_ELEMENT_H__
- #define __XML_ELEMENT_H__
-
-/* includes */
-#include <stdio.h>
-#include "queue.h"
-#include "simplestring.h"
-#include "encodings.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****d* enum/XML_ELEM_VERBOSITY
- * NAME
- * XML_ELEM_VERBOSITY
- * NOTES
- * verbosity/readability options for generated xml
- * SEE ALSO
- * XML_ELEM_OUTPUT_OPTIONS
- * SOURCE
- */
-typedef enum _xml_elem_verbosity {
- xml_elem_no_white_space, /* compact xml with no white space */
- xml_elem_newlines_only, /* add newlines for enhanced readability */
- xml_elem_pretty /* add newlines and indent accordint to depth */
-} XML_ELEM_VERBOSITY;
-/******/
-
-
-/****d* enum/XML_ELEM_ESCAPING
- * NAME
- * XML_ELEM_ESCAPING
- * NOTES
- * xml escaping options for generated xml
- * SEE ALSO
- * XML_ELEM_OUTPUT_OPTIONS
- * SOURCE
- */
-typedef enum _xml_elem_escaping {
- xml_elem_no_escaping = 0x000,
- xml_elem_markup_escaping = 0x002, /* entity escape xml special chars */
- xml_elem_non_ascii_escaping = 0x008, /* entity escape chars above 127 */
- xml_elem_non_print_escaping = 0x010, /* entity escape non print (illegal) chars */
- xml_elem_cdata_escaping = 0x020, /* wrap in cdata section */
-} XML_ELEM_ESCAPING;
-/******/
-
-
-/****s* struct/XML_ELEM_OUTPUT_OPTIONS
- * NAME
- * XML_ELEM_OUTPUT_OPTIONS
- * NOTES
- * defines various output options
- * SOURCE
- */
-typedef struct _xml_output_options {
- XML_ELEM_VERBOSITY verbosity; /* length/verbosity of xml */
- XML_ELEM_ESCAPING escaping; /* how to escape special chars */
- const char* encoding; /* <?xml encoding="<encoding>" ?> */
-} STRUCT_XML_ELEM_OUTPUT_OPTIONS, *XML_ELEM_OUTPUT_OPTIONS;
-/******/
-
-/****s* struct/XML_ELEM_INPUT_OPTIONS
- * NAME
- * XML_ELEM_INPUT_OPTIONS
- * NOTES
- * defines various input options
- * SOURCE
- */
-typedef struct _xml_input_options {
- ENCODING_ID encoding; /* which encoding to use. */
-} STRUCT_XML_ELEM_INPUT_OPTIONS, *XML_ELEM_INPUT_OPTIONS;
-/******/
-
-/****s* struct/XML_ELEM_ERROR
- * NAME
- * XML_ELEM_ERROR
- * NOTES
- * defines an xml parser error
- * SOURCE
- */
-typedef struct _xml_elem_error {
- int parser_code;
- const char* parser_error;
- long line;
- long column;
- long byte_index;
-} STRUCT_XML_ELEM_ERROR, *XML_ELEM_ERROR;
-/******/
-
-
-/*-************************
-* begin xml element stuff *
-**************************/
-
-/****s* struct/xml_elem_attr
- * NAME
- * xml_elem_attr
- * NOTES
- * representation of an xml attribute, foo="bar"
- * SOURCE
- */
-typedef struct _xml_element_attr {
- char* key; /* attribute key */
- char* val; /* attribute value */
-} xml_element_attr;
-/******/
-
-/****s* struct/xml_elem_attr
- * NAME
- * xml_elem_attr
- * NOTES
- * representation of an xml element, eg <candidate name="Harry Browne" party="Libertarian"/>
- * SOURCE
- */
-typedef struct _xml_element {
- const char* name; /* element identifier */
- simplestring text; /* text contained between element begin/end pairs */
- struct _xml_element* parent; /* element's parent */
-
- queue attrs; /* attribute list */
- queue children; /* child element list */
-} xml_element;
-/******/
-
-void xml_elem_free(xml_element* root);
-void xml_elem_free_non_recurse(xml_element* root);
-xml_element* xml_elem_new(void);
-char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len);
-void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options);
-xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error);
-
-/*-**********************
-* end xml element stuff *
-************************/
-
-/*-**********************
-* Begin xml_element API *
-************************/
-
-/****d* VALUE/XMLRPC_MACROS
- * NAME
- * Some Helpful Macros
- * NOTES
- * Some macros for making life easier. Should be self-explanatory.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * SOURCE
- */
-#define xml_elem_next_element(el) ((el) ? (xml_element *)Q_Next(&el->children) : NULL)
-#define xml_elem_head_element(el) ((el) ? (xml_element *)Q_Head(&el->children) : NULL)
-#define xml_elem_next_attr(el) ((el) ? (xml_element_attr *)Q_Next(&el->attrs) : NULL)
-#define xml_elem_head_attr(el) ((el) ? (xml_element_attr *)Q_Head(&el->attrs) : NULL)
-#define xml_elem_get_name(el) (char *)((el) ? el->name : NULL)
-#define xml_elem_get_val(el) (char *)((el) ? el->text.str : NULL)
-/******/
-
-
-/*-********************
-* End xml_element API *
-**********************/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_ELEMENT_H__ */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.c b/ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.c
deleted file mode 100644
index b51d991723..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_dandarpc.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define ELEM_METHODCALL "methodCall"
-#define ELEM_METHODNAME "methodName"
-#define ELEM_METHODRESPONSE "methodResponse"
-#define ELEM_ROOT "simpleRPC"
-
-#define ATTR_ARRAY "array"
-#define ATTR_BASE64 "base64"
-#define ATTR_BOOLEAN "boolean"
-#define ATTR_DATETIME "dateTime.iso8601"
-#define ATTR_DOUBLE "double"
-#define ATTR_ID "id"
-#define ATTR_INT "int"
-#define ATTR_MIXED "mixed"
-#define ATTR_SCALAR "scalar"
-#define ATTR_STRING "string"
-#define ATTR_STRUCT "struct"
-#define ATTR_TYPE "type"
-#define ATTR_VECTOR "vector"
-#define ATTR_VERSION "version"
-
-#define VAL_VERSION_0_9 "0.9"
-
-
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC_VALUE xCurrent, xml_element* el) {
- if(!xCurrent) {
- xCurrent = XMLRPC_CreateValueEmpty();
- }
-
- if(el->name) {
- const char* id = NULL;
- const char* type = NULL;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
-
- while(attr_iter) {
- if(!strcmp(attr_iter->key, ATTR_ID)) {
- id = attr_iter->val;
- }
- if(!strcmp(attr_iter->key, ATTR_TYPE)) {
- type = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- if(id) {
- XMLRPC_SetValueID_Case(xCurrent, id, 0, xmlrpc_case_exact);
- }
-
- if(!strcmp(el->name, ATTR_SCALAR)) {
- if(!type || !strcmp(type, ATTR_STRING)) {
- XMLRPC_SetValueString(xCurrent, el->text.str, el->text.len);
- }
- else if(!strcmp(type, ATTR_INT)) {
- XMLRPC_SetValueInt(xCurrent, atoi(el->text.str));
- }
- else if(!strcmp(type, ATTR_BOOLEAN)) {
- XMLRPC_SetValueBoolean(xCurrent, atoi(el->text.str));
- }
- else if(!strcmp(type, ATTR_DOUBLE)) {
- XMLRPC_SetValueDouble(xCurrent, atof(el->text.str));
- }
- else if(!strcmp(type, ATTR_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(xCurrent, el->text.str);
- }
- else if(!strcmp(type, ATTR_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- }
- else if(!strcmp(el->name, ATTR_VECTOR)) {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
-
- if(!type || !strcmp(type, ATTR_MIXED)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_mixed);
- }
- else if(!strcmp(type, ATTR_ARRAY)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_array);
- }
- else if(!strcmp(type, ATTR_STRUCT)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_struct);
- }
- while( iter ) {
- XMLRPC_VALUE xNext = XMLRPC_CreateValueEmpty();
- xml_element_to_DANDARPC_REQUEST_worker(request, xNext, iter);
- XMLRPC_AddValueToVector(xCurrent, xNext);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- while( iter ) {
- xml_element_to_DANDARPC_REQUEST_worker(request, xCurrent, iter);
- iter = (xml_element*)Q_Next(&el->children);
- }
-
- if(!strcmp(el->name, ELEM_METHODCALL)) {
- if(request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
- }
- }
- else if(!strcmp(el->name, ELEM_METHODRESPONSE)) {
- if(request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_response);
- }
- }
- else if(!strcmp(el->name, ELEM_METHODNAME)) {
- if(request) {
- XMLRPC_RequestSetMethodName(request, el->text.str);
- }
- }
- }
- }
- return xCurrent;
-}
-
-XMLRPC_VALUE xml_element_to_DANDARPC_VALUE(xml_element* el)
-{
- return xml_element_to_DANDARPC_REQUEST_worker(NULL, NULL, el);
-}
-
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if(request) {
- return XMLRPC_RequestSetData(request, xml_element_to_DANDARPC_REQUEST_worker(request, NULL, el));
- }
- return NULL;
-}
-
-xml_element* DANDARPC_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE node) {
-#define BUF_SIZE 512
- xml_element* root = NULL;
- if(node) {
- char buf[BUF_SIZE];
- const char* id = XMLRPC_GetValueID(node);
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(node);
- XMLRPC_REQUEST_OUTPUT_OPTIONS output = XMLRPC_RequestGetOutputOptions(request);
- int bNoAddType = (type == xmlrpc_string && request && output && output->xml_elem_opts.verbosity == xml_elem_no_white_space);
- xml_element* elem_val = xml_elem_new();
- const char* pAttrType = NULL;
-
- xml_element_attr* attr_type = bNoAddType ? NULL : malloc(sizeof(xml_element_attr));
-
- if(attr_type) {
- attr_type->key = strdup(ATTR_TYPE);
- attr_type->val = 0;
- Q_PushTail(&elem_val->attrs, attr_type);
- }
-
- elem_val->name = (type == xmlrpc_vector) ? strdup(ATTR_VECTOR) : strdup(ATTR_SCALAR);
-
- if(id && *id) {
- xml_element_attr* attr_id = malloc(sizeof(xml_element_attr));
- if(attr_id) {
- attr_id->key = strdup(ATTR_ID);
- attr_id->val = strdup(id);
- Q_PushTail(&elem_val->attrs, attr_id);
- }
- }
-
- switch(type) {
- case xmlrpc_string:
- pAttrType = ATTR_STRING;
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_int:
- pAttrType = ATTR_INT;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_boolean:
- pAttrType = ATTR_BOOLEAN;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_double:
- pAttrType = ATTR_DOUBLE;
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_datetime:
- pAttrType = ATTR_DATETIME;
- simplestring_add(&elem_val->text, XMLRPC_GetValueDateTime_ISO8601(node));
- break;
- case xmlrpc_base64:
- {
- struct buffer_st buf;
- pAttrType = ATTR_BASE64;
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- case xmlrpc_vector:
- {
- XMLRPC_VECTOR_TYPE my_type = XMLRPC_GetVectorType(node);
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
-
- switch(my_type) {
- case xmlrpc_vector_array:
- pAttrType = ATTR_ARRAY;
- break;
- case xmlrpc_vector_mixed:
- pAttrType = ATTR_MIXED;
- break;
- case xmlrpc_vector_struct:
- pAttrType = ATTR_STRUCT;
- break;
- default:
- break;
- }
-
- /* recurse through sub-elements */
- while( xIter ) {
- xml_element* next_el = DANDARPC_to_xml_element_worker(request, xIter);
- if(next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
- break;
- default:
- break;
- }
- if(pAttrType && attr_type && !bNoAddType) {
- attr_type->val = strdup(pAttrType);
- }
- root = elem_val;
- }
- return root;
-}
-
-xml_element* DANDARPC_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return DANDARPC_to_xml_element_worker(NULL, node);
-}
-
-xml_element* DANDARPC_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* wrapper = NULL;
- xml_element* root = NULL;
- if(request) {
- XMLRPC_REQUEST_TYPE request_type = XMLRPC_RequestGetRequestType(request);
- const char* pStr = NULL;
- xml_element_attr* version = malloc(sizeof(xml_element_attr));
- version->key = strdup(ATTR_VERSION);
- version->val = strdup(VAL_VERSION_0_9);
-
- wrapper = xml_elem_new();
-
- if(request_type == xmlrpc_request_response) {
- pStr = ELEM_METHODRESPONSE;
- }
- else if(request_type == xmlrpc_request_call) {
- pStr = ELEM_METHODCALL;
- }
- if(pStr) {
- wrapper->name = strdup(pStr);
- }
-
- root = xml_elem_new();
- root->name = strdup(ELEM_ROOT);
- Q_PushTail(&root->attrs, version);
- Q_PushTail(&root->children, wrapper);
-
- pStr = XMLRPC_RequestGetMethodName(request);
-
- if(pStr) {
- xml_element* method = xml_elem_new();
- method->name = strdup(ELEM_METHODNAME);
- simplestring_add(&method->text, pStr);
- Q_PushTail(&wrapper->children, method);
- }
- Q_PushTail(&wrapper->children,
- DANDARPC_to_xml_element_worker(request, XMLRPC_RequestGetData(request)));
- }
- return root;
-}
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.h b/ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.h
deleted file mode 100644
index 6facb55778..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_to_dandarpc.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef XML_TO_DANDARPC_H
- #define XML_TO_DANDARPC_H
-
-#include "time.h"
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_DANDARPC_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* DANDARPC_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* DANDARPC_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_DANDARPC_H */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.c b/ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.c
deleted file mode 100644
index fada389fb6..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.c
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
-*/
-
-
-/************************************************************************
-* TODO: *
-* - [SOAP-ENC:position] read sparse arrays (and write?) *
-* - [SOAP-ENC:offset] read partially transmitted arrays (and write?) *
-* - read "flattened" multi-dimensional arrays. (don't bother writing) *
-* *
-* BUGS: *
-* - does not read schema. thus only knows soap pre-defined types. *
-* - references (probably) do not work. untested. *
-* - does not expose SOAP-ENV:Header to application at all. *
-* - does not use namespaces correctly, thus: *
-* - namespaces are hard-coded in comparison tokens *
-* - if a sender uses another namespace identifer, it will break *
-************************************************************************/
-
-
-static const char rcsid[] = "#(@) $Id:";
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_soap.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define TOKEN_ANY "xsd:ur-type"
-#define TOKEN_ARRAY "SOAP-ENC:Array"
-#define TOKEN_ARRAY_TYPE "SOAP-ENC:arrayType"
-#define TOKEN_BASE64 "SOAP-ENC:base64"
-#define TOKEN_BOOLEAN "xsd:boolean"
-#define TOKEN_DATETIME "xsd:timeInstant"
-#define TOKEN_DOUBLE "xsd:double"
-#define TOKEN_FLOAT "xsd:float"
-#define TOKEN_ID "id"
-#define TOKEN_INT "xsd:int"
-#define TOKEN_NULL "xsi:null"
-#define TOKEN_STRING "xsd:string"
-#define TOKEN_STRUCT "xsd:struct"
-#define TOKEN_TYPE "xsi:type"
-#define TOKEN_FAULT "SOAP-ENV:Fault"
-#define TOKEN_MUSTUNDERSTAND "SOAP-ENV:mustUnderstand"
-#define TOKEN_ACTOR "SOAP-ENV:actor"
-#define TOKEN_ACTOR_NEXT "http://schemas.xmlsoap.org/soap/actor/next"
-
-#define TOKEN_XMLRPC_FAULTCODE "faultCode"
-#define TOKEN_XMLRPC_FAULTSTRING "faultString"
-#define TOKEN_SOAP_FAULTCODE "faultcode"
-#define TOKEN_SOAP_FAULTSTRING "faultstring"
-#define TOKEN_SOAP_FAULTDETAILS "details"
-#define TOKEN_SOAP_FAULTACTOR "actor"
-
-
-// determine if a string represents a soap type, as used in
-// element names
-static inline int is_soap_type(const char* soap_type) {
- return(strstr(soap_type, "SOAP-ENC:") || strstr(soap_type, "xsd:")) ? 1 : 0;
-}
-
-/* utility func to generate a new attribute. possibly should be in xml_element.c?? */
-static xml_element_attr* new_attr(const char* key, const char* val) {
- xml_element_attr* attr = malloc(sizeof(xml_element_attr));
- if (attr) {
- attr->key = key ? strdup(key) : NULL;
- attr->val = val ? strdup(val) : NULL;
- }
- return attr;
-}
-
-struct array_info {
- char kids_type[30];
- unsigned long size;
- /* ... ? */
-};
-
-
-/* parses soap arrayType attribute to generate an array_info structure.
- * TODO: should deal with sparse, flattened, & multi-dimensional arrays
- */
-static struct array_info* parse_array_type_info(const char* array_type) {
- struct array_info* ai = NULL;
- if (array_type) {
- ai = (struct array_info*)calloc(1, sizeof(struct array_info));
- if (ai) {
- char buf[128], *p;
- snprintf(buf, sizeof(buf), "%s", array_type);
- p = strchr(buf, '[');
- if (p) {
- *p = 0;
- }
- strcpy(ai->kids_type, buf);
- }
- }
- return ai;
-}
-
-/* performs heuristics on an xmlrpc_vector_array to determine
- * appropriate soap arrayType string.
- */
-static const char* get_array_soap_type(XMLRPC_VALUE node) {
- XMLRPC_VALUE_TYPE_EASY type = xmlrpc_type_none;
-
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- int loopCount = 0;
- const char* soapType = TOKEN_ANY;
-
- type = XMLRPC_GetValueTypeEasy(xIter);
- xIter = XMLRPC_VectorNext(node);
-
- while (xIter) {
- /* 50 seems like a decent # of loops. That will likely
- * cover most cases. Any more and we start to sacrifice
- * performance.
- */
- if ( (XMLRPC_GetValueTypeEasy(xIter) != type) || loopCount >= 50) {
- type = xmlrpc_type_none;
- break;
- }
- loopCount ++;
-
- xIter = XMLRPC_VectorNext(node);
- }
- switch (type) {
- case xmlrpc_type_none:
- soapType = TOKEN_ANY;
- break;
- case xmlrpc_type_empty:
- soapType = TOKEN_NULL;
- break;
- case xmlrpc_type_int:
- soapType = TOKEN_INT;
- break;
- case xmlrpc_type_double:
- soapType = TOKEN_DOUBLE;
- break;
- case xmlrpc_type_boolean:
- soapType = TOKEN_BOOLEAN;
- break;
- case xmlrpc_type_string:
- soapType = TOKEN_STRING;
- break;
- case xmlrpc_type_base64:
- soapType = TOKEN_BASE64;
- break;
- case xmlrpc_type_datetime:
- soapType = TOKEN_DATETIME;
- break;
- case xmlrpc_type_struct:
- soapType = TOKEN_STRUCT;
- break;
- case xmlrpc_type_array:
- soapType = TOKEN_ARRAY;
- break;
- case xmlrpc_type_mixed:
- soapType = TOKEN_STRUCT;
- break;
- }
- return soapType;
-}
-
-/* determines wether a node is a fault or not, and of which type:
- * 0 = not a fault,
- * 1 = xmlrpc style fault
- * 2 = soap style fault.
- */
-static inline int get_fault_type(XMLRPC_VALUE node) {
- if (XMLRPC_VectorGetValueWithID(node, TOKEN_XMLRPC_FAULTCODE) &&
- XMLRPC_VectorGetValueWithID(node, TOKEN_XMLRPC_FAULTSTRING)) {
- return 1;
- }
- else if (XMLRPC_VectorGetValueWithID(node, TOKEN_SOAP_FAULTCODE) &&
- XMLRPC_VectorGetValueWithID(node, TOKEN_SOAP_FAULTSTRING)) {
- return 2;
- }
- return 0;
-}
-
-/* input: an XMLRPC_VALUE representing a fault struct in xml-rpc style.
- * output: an XMLRPC_VALUE representing a fault struct in soap style,
- * with xmlrpc codes mapped to soap codes, and all other values preserved.
- * note that the returned value is a completely new value, and must be freed.
- * the input value is untouched.
- */
-static XMLRPC_VALUE gen_fault_xmlrpc(XMLRPC_VALUE node, xml_element* el_target) {
- XMLRPC_VALUE xDup = XMLRPC_DupValueNew(node);
- XMLRPC_VALUE xCode = XMLRPC_VectorGetValueWithID(xDup, TOKEN_XMLRPC_FAULTCODE);
- XMLRPC_VALUE xStr = XMLRPC_VectorGetValueWithID(xDup, TOKEN_XMLRPC_FAULTSTRING);
-
- XMLRPC_SetValueID(xCode, TOKEN_SOAP_FAULTCODE, 0);
- XMLRPC_SetValueID(xStr, TOKEN_SOAP_FAULTSTRING, 0);
-
- /* rough mapping of xmlrpc fault codes to soap codes */
- switch (XMLRPC_GetValueInt(xCode)) {
- case -32700: // "parse error. not well formed",
- case -32701: // "parse error. unsupported encoding"
- case -32702: // "parse error. invalid character for encoding"
- case -32600: // "server error. invalid xml-rpc. not conforming to spec."
- case -32601: // "server error. requested method not found"
- case -32602: // "server error. invalid method parameters"
- XMLRPC_SetValueString(xCode, "SOAP-ENV:Client", 0);
- break;
- case -32603: // "server error. internal xml-rpc error"
- case -32500: // "application error"
- case -32400: // "system error"
- case -32300: // "transport error
- XMLRPC_SetValueString(xCode, "SOAP-ENV:Server", 0);
- break;
- }
- return xDup;
-}
-
-// returns a new XMLRPC_VALUE representing a soap fault, comprised of a struct with four keys.
-static XMLRPC_VALUE gen_soap_fault(const char* fault_code, const char* fault_string,
- const char* actor, const char* details) {
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(TOKEN_FAULT, xmlrpc_vector_struct);
- XMLRPC_AddValuesToVector(xReturn,
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTCODE, fault_code, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTSTRING, fault_string, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTACTOR, actor, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTDETAILS, details, 0),
- NULL);
- return xReturn;
-}
-
-/* translates xml soap dom to native data structures. recursive. */
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST_worker(XMLRPC_REQUEST request,
- XMLRPC_VALUE xParent,
- struct array_info* parent_array,
- XMLRPC_VALUE xCurrent,
- xml_element* el,
- int depth) {
- XMLRPC_REQUEST_TYPE rtype = xmlrpc_request_none;
-
- // no current element on first call
- if (!xCurrent) {
- xCurrent = XMLRPC_CreateValueEmpty();
- }
-
- // increment recursion depth guage
- depth ++;
-
- // safety first. must have a valid element
- if (el && el->name) {
- const char* id = NULL;
- const char* type = NULL, *arrayType=NULL, *actor = NULL;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
- int b_must_understand = 0;
-
- // in soap, types may be specified in either element name -or- with xsi:type attribute.
- if (is_soap_type(el->name)) {
- type = el->name;
- }
- // if our parent node, by definition a vector, is not an array, then
- // our element name must be our key identifier.
- else if (XMLRPC_GetVectorType(xParent) != xmlrpc_vector_array) {
- id = el->name;
- if(!strcmp(id, "item")) {
- }
- }
-
- // iterate through element attributes, pick out useful stuff.
- while (attr_iter) {
- // element's type
- if (!strcmp(attr_iter->key, TOKEN_TYPE)) {
- type = attr_iter->val;
- }
- // array type
- else if (!strcmp(attr_iter->key, TOKEN_ARRAY_TYPE)) {
- arrayType = attr_iter->val;
- }
- // must understand, sometimes present in headers.
- else if (!strcmp(attr_iter->key, TOKEN_MUSTUNDERSTAND)) {
- b_must_understand = strchr(attr_iter->val, '1') ? 1 : 0;
- }
- // actor, used in conjuction with must understand.
- else if (!strcmp(attr_iter->key, TOKEN_ACTOR)) {
- actor = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- // check if caller says we must understand something in a header.
- if (b_must_understand) {
- // is must understand actually indended for us?
- // BUG: spec says we should also determine if actor is our URL, but
- // we do not have that information.
- if (!actor || !strcmp(actor, TOKEN_ACTOR_NEXT)) {
- // TODO: implement callbacks or other mechanism for applications
- // to "understand" these headers. For now, we just bail if we
- // get a mustUnderstand header intended for us.
- XMLRPC_RequestSetError(request,
- gen_soap_fault("SOAP-ENV:MustUnderstand",
- "SOAP Must Understand Error",
- "", ""));
- return xCurrent;
- }
- }
-
- // set id (key) if one was found.
- if (id) {
- XMLRPC_SetValueID_Case(xCurrent, id, 0, xmlrpc_case_exact);
- }
-
- // according to soap spec,
- // depth 1 = Envelope, 2 = Header, Body & Fault, 3 = methodcall or response.
- if (depth == 3) {
- const char* methodname = el->name;
- char* p = NULL;
-
- // BUG: we determine request or response type using presence of "Response" in element name.
- // According to spec, this is only recommended, not required. Apparently, implementations
- // are supposed to know the type of action based on state, which strikes me as a bit lame.
- // Anyway, we don't have that state info, thus we use Response as a heuristic.
- rtype =
-#ifdef strcasestr
- strcasestr(el->name, "response") ? xmlrpc_request_response : xmlrpc_request_call;
-#else
- strstr(el->name, "esponse") ? xmlrpc_request_response : xmlrpc_request_call;
-#endif
- XMLRPC_RequestSetRequestType(request, rtype);
-
- // Get methodname. strip xml namespace crap.
- p = strchr(el->name, ':');
- if (p) {
- methodname = p + 1;
- }
- if (rtype == xmlrpc_request_call) {
- XMLRPC_RequestSetMethodName(request, methodname);
- }
- }
-
-
- // Next, we begin to convert actual values.
- // if no children, then must be a scalar value.
- if (!Q_Size(&el->children)) {
- if (!type && parent_array && parent_array->kids_type[0]) {
- type = parent_array->kids_type;
- }
- if (!type || !strcmp(type, TOKEN_STRING)) {
- XMLRPC_SetValueString(xCurrent, el->text.str, el->text.len);
- }
- else if (!strcmp(type, TOKEN_INT)) {
- XMLRPC_SetValueInt(xCurrent, atoi(el->text.str));
- }
- else if (!strcmp(type, TOKEN_BOOLEAN)) {
- XMLRPC_SetValueBoolean(xCurrent, atoi(el->text.str));
- }
- else if (!strcmp(type, TOKEN_DOUBLE) ||
- !strcmp(type, TOKEN_FLOAT)) {
- XMLRPC_SetValueDouble(xCurrent, atof(el->text.str));
- }
- else if (!strcmp(type, TOKEN_NULL)) {
- // already an empty val. do nothing.
- }
- else if (!strcmp(type, TOKEN_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(xCurrent, el->text.str);
- }
- else if (!strcmp(type, TOKEN_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- }
- // Element has children, thus a vector, or "compound type" in soap-speak.
- else {
- struct array_info* ai = NULL;
- xml_element* iter = (xml_element*)Q_Head(&el->children);
-
- if (!type || !strcmp(type, TOKEN_STRUCT)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_struct);
- }
- else if (!strcmp(type, TOKEN_ARRAY) || arrayType != NULL) {
- // determine magic associated with soap array type.
- // this is passed down as we recurse, so our children have access to the info.
- ai = parse_array_type_info(arrayType); // alloc'ed ai free'd below.
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_array);
- }
- else {
- // mixed is probably closest thing we have to compound type.
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_mixed);
- }
- // Recurse, adding values as we go. Check for error during recursion
- // and if found, bail. this short-circuits us out of the recursion.
- while ( iter && !XMLRPC_RequestGetError(request) ) {
- XMLRPC_VALUE xNext = NULL;
- // top level elements don't actually represent values, so we just pass the
- // current value along until we are deep enough.
- if ( depth <= 2 ||
- (rtype == xmlrpc_request_response && depth <= 3) ) {
- xml_element_to_SOAP_REQUEST_worker(request, NULL, ai, xCurrent, iter, depth);
- }
- // ready to do some actual de-serialization. create a new empty value and
- // pass that along to be init'd, then add it to our current vector.
- else {
- xNext = XMLRPC_CreateValueEmpty();
- xml_element_to_SOAP_REQUEST_worker(request, xCurrent, ai, xNext, iter, depth);
- XMLRPC_AddValueToVector(xCurrent, xNext);
- }
- iter = (xml_element*)Q_Next(&el->children);
- }
- // cleanup
- if (ai) {
- free(ai);
- }
- }
- }
- return xCurrent;
-}
-
-// Convert soap xml dom to XMLRPC_VALUE, sans request info. untested.
-XMLRPC_VALUE xml_element_to_SOAP_VALUE(xml_element* el)
-{
- return xml_element_to_SOAP_REQUEST_worker(NULL, NULL, NULL, NULL, el, 0);
-}
-
-// Convert soap xml dom to XMLRPC_REQUEST
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if (request) {
- return XMLRPC_RequestSetData(request, xml_element_to_SOAP_REQUEST_worker(request, NULL, NULL, NULL, el, 0));
- }
- return NULL;
-}
-
-
-/* translates data structures to soap/xml. recursive */
-xml_element* SOAP_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE node) {
-#define BUF_SIZE 128
- xml_element* elem_val = NULL;
- if (node) {
- int bFreeNode = 0; /* sometimes we may need to free 'node' variable */
- char buf[BUF_SIZE];
- XMLRPC_VALUE_TYPE_EASY type = XMLRPC_GetValueTypeEasy(node);
- char* pName = NULL, *pAttrType = NULL;
-
- // create our return value element
- elem_val = xml_elem_new();
-
- switch (type) {
- case xmlrpc_type_struct:
- case xmlrpc_type_mixed:
- case xmlrpc_type_array:
- if (type == xmlrpc_type_array) {
- // array's are _very_ special in soap.
- // TODO: Should handle sparse/partial arrays here.
-
- // determine soap array type.
- const char* type = get_array_soap_type(node);
- xml_element_attr* attr_array_type = NULL;
-
- // specify array kids type and array size.
- snprintf(buf, sizeof(buf), "%s[%i]", type, XMLRPC_VectorSize(node));
- attr_array_type = new_attr(TOKEN_ARRAY_TYPE, buf);
-
- Q_PushTail(&elem_val->attrs, attr_array_type);
-
- pAttrType = TOKEN_ARRAY;
- }
- // check for fault, which is a rather special case.
- // (can't these people design anything consistent/simple/elegant?)
- else if (type == xmlrpc_type_struct) {
- int fault_type = get_fault_type(node);
- if (fault_type) {
- if (fault_type == 1) {
- // gen fault from xmlrpc style fault codes
- // notice that we get a new node, which must be freed herein.
- node = gen_fault_xmlrpc(node, elem_val);
- bFreeNode = 1;
- }
- pName = TOKEN_FAULT;
- }
- }
-
- {
- /* recurse through sub-elements */
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- while ( xIter ) {
- xml_element* next_el = SOAP_to_xml_element_worker(request, xIter);
- if (next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
-
- break;
-
- // handle scalar types
- case xmlrpc_type_empty:
- pAttrType = TOKEN_NULL;
- break;
- case xmlrpc_type_string:
- pAttrType = TOKEN_STRING;
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_type_int:
- pAttrType = TOKEN_INT;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_boolean:
- pAttrType = TOKEN_BOOLEAN;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_double:
- pAttrType = TOKEN_DOUBLE;
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_datetime:
- {
- time_t tt = XMLRPC_GetValueDateTime(node);
- struct tm *tm = localtime (&tt);
- pAttrType = TOKEN_DATETIME;
- if(strftime (buf, BUF_SIZE, "%Y-%m-%dT%H:%M:%SZ", tm)) {
- simplestring_add(&elem_val->text, buf);
- }
- }
- break;
- case xmlrpc_type_base64:
- {
- struct buffer_st buf;
- pAttrType = TOKEN_BASE64;
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- break;
- default:
- break;
- }
-
- // determining element's name is a bit tricky, due to soap semantics.
- if (!pName) {
- // if the value's type is known...
- if (pAttrType) {
- // see if it has an id (key). If so, use that as name,
- // and type as an attribute.
- pName = (char*)XMLRPC_GetValueID(node);
- if (pName) {
- Q_PushTail(&elem_val->attrs, new_attr(TOKEN_TYPE, pAttrType));
- }
-
- // otherwise, use the type as the name.
- else {
- pName = pAttrType;
- }
- }
- // if the value's type is not known... (a rare case?)
- else {
- // see if it has an id (key). otherwise, default to generic "item"
- pName = (char*)XMLRPC_GetValueID(node);
- if (!pName) {
- pName = "item";
- }
- }
- }
- elem_val->name = strdup(pName);
-
- // cleanup
- if (bFreeNode) {
- XMLRPC_CleanupValue(node);
- }
- }
- return elem_val;
-}
-
-// convert XMLRPC_VALUE to soap xml dom. untested.
-xml_element* SOAP_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return SOAP_to_xml_element_worker(NULL, node);
-}
-
-// convert XMLRPC_REQUEST to soap xml dom.
-xml_element* SOAP_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* root = xml_elem_new();
-
- // safety first.
- if (root) {
- xml_element* body = xml_elem_new();
- root->name = strdup("SOAP-ENV:Envelope");
-
- /* silly namespace stuff */
- Q_PushTail(&root->attrs, new_attr("xmlns:SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"));
- Q_PushTail(&root->attrs, new_attr("xmlns:xsi", "http://www.w3.org/1999/XMLSchema-instance"));
- Q_PushTail(&root->attrs, new_attr("xmlns:xsd", "http://www.w3.org/1999/XMLSchema"));
- Q_PushTail(&root->attrs, new_attr("xmlns:SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"));
- Q_PushTail(&root->attrs, new_attr("xmlns:si", "http://soapinterop.org/xsd"));
- Q_PushTail(&root->attrs, new_attr("xmlns:ns6", "http://testuri.org"));
- Q_PushTail(&root->attrs, new_attr("SOAP-ENV:encodingStyle", "http://schemas.xmlsoap.org/soap/encoding/"));
-
- //Q_PushHead(&root->attrs, new_attr("xmlns:ks", "http://kitchen.sink.org/soap/everything/under/sun"));
- // JUST KIDDING!! :-) ----> -------------------------------------------------
-
- if (body) {
- // go ahead and serialize first...
- xml_element* el_serialized =
- SOAP_to_xml_element_worker(request,
- XMLRPC_RequestGetData(request));
-
- /* check for fault, in which case, there is no intermediate element */
- if (el_serialized && !strcmp(el_serialized->name, TOKEN_FAULT)) {
- Q_PushTail(&body->children, el_serialized);
- }
- // usual case: not a fault. Add Response element in between.
- else {
- xml_element* rpc = xml_elem_new();
-
- if (rpc) {
- const char* methodname = XMLRPC_RequestGetMethodName(request);
- XMLRPC_REQUEST_TYPE rtype = XMLRPC_RequestGetRequestType(request);
-
- // if we are making a request, we want to use the methodname as is.
- if (rtype == xmlrpc_request_call) {
- if (methodname) {
- rpc->name = strdup(methodname);
- }
- }
- // if it's a response, we append "Response". Also, given xmlrpc-epi
- // API/architecture, it's likely that we don't have a methodname for
- // the response, so we have to check that.
- else {
- char buf[128];
- snprintf(buf, sizeof(buf), "%s%s",
- methodname ? methodname : "",
- "Response");
-
- rpc->name = strdup(buf);
- }
-
- // add serialized data to method call/response.
- // add method call/response to body element
- if (rpc->name) {
- if(el_serialized) {
- if(Q_Size(&el_serialized->children) && rtype == xmlrpc_request_call) {
- xml_element* iter = (xml_element*)Q_Head(&el_serialized->children);
- while(iter) {
- Q_PushTail(&rpc->children, iter);
- iter = (xml_element*)Q_Next(&el_serialized->children);
- }
- xml_elem_free_non_recurse(el_serialized);
- }
- else {
- Q_PushTail(&rpc->children, el_serialized);
- }
- }
-
- Q_PushTail(&body->children, rpc);
- }
- else {
- // no method name?!
- // TODO: fault here...?
- }
- }
- }
- body->name = strdup("SOAP-ENV:Body");
- Q_PushTail(&root->children, body);
- }
- }
-
- return root;
-}
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.h b/ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.h
deleted file mode 100644
index 9ae9308b22..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_to_soap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef XML_TO_SOAP_H
- #define XML_TO_SOAP_H
-
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_SOAP_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* SOAP_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* SOAP_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_XMLRPC_H */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.c b/ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
deleted file mode 100644
index 8bace4dab6..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_xmlrpc.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define ELEM_ARRAY "array"
-#define ELEM_BASE64 "base64"
-#define ELEM_BOOLEAN "boolean"
-#define ELEM_DATA "data"
-#define ELEM_DATETIME "dateTime.iso8601"
-#define ELEM_DOUBLE "double"
-#define ELEM_FAULT "fault"
-#define ELEM_FAULTCODE "faultCode"
-#define ELEM_FAULTSTRING "faultString"
-#define ELEM_I4 "i4"
-#define ELEM_INT "int"
-#define ELEM_MEMBER "member"
-#define ELEM_METHODCALL "methodCall"
-#define ELEM_METHODNAME "methodName"
-#define ELEM_METHODRESPONSE "methodResponse"
-#define ELEM_NAME "name"
-#define ELEM_PARAM "param"
-#define ELEM_PARAMS "params"
-#define ELEM_STRING "string"
-#define ELEM_STRUCT "struct"
-#define ELEM_VALUE "value"
-
-
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC_VALUE parent_vector, XMLRPC_VALUE current_val, xml_element* el) {
- if (!current_val) {
- /* This should only be the case for the first element */
- current_val = XMLRPC_CreateValueEmpty();
- }
-
- if (el->name) {
- if (!strcmp(el->name, ELEM_DATA) /* should be ELEM_ARRAY, but there is an extra level. weird */
- || ((!strcmp(el->name, ELEM_PARAMS)) &&
- (XMLRPC_RequestGetRequestType(request) == xmlrpc_request_call)) /* this "PARAMS" concept is silly. dave?! */
- || !strcmp(el->name, ELEM_FAULT)) { /* so is this "FAULT" nonsense. */
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_array);
-
- while (iter) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else if (!strcmp(el->name, ELEM_STRUCT)) {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_struct);
-
- while ( iter ) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else if (!strcmp(el->name, ELEM_STRING) ||
- (!strcmp(el->name, ELEM_VALUE) && Q_Size(&el->children) == 0)) {
- XMLRPC_SetValueString(current_val, el->text.str, el->text.len);
- }
- else if (!strcmp(el->name, ELEM_NAME)) {
- XMLRPC_SetValueID_Case(current_val, el->text.str, 0, xmlrpc_case_exact);
- }
- else if (!strcmp(el->name, ELEM_INT) || !strcmp(el->name, ELEM_I4)) {
- XMLRPC_SetValueInt(current_val, atoi(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_BOOLEAN)) {
- XMLRPC_SetValueBoolean(current_val, atoi(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_DOUBLE)) {
- XMLRPC_SetValueDouble(current_val, atof(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(current_val, el->text.str);
- }
- else if (!strcmp(el->name, ELEM_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(current_val, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- else {
- xml_element* iter;
-
- if (!strcmp(el->name, ELEM_METHODCALL)) {
- if (request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
- }
- }
- else if (!strcmp(el->name, ELEM_METHODRESPONSE)) {
- if (request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_response);
- }
- }
- else if (!strcmp(el->name, ELEM_METHODNAME)) {
- if (request) {
- XMLRPC_RequestSetMethodName(request, el->text.str);
- }
- }
-
- iter = (xml_element*)Q_Head(&el->children);
- while ( iter ) {
- xml_element_to_XMLRPC_REQUEST_worker(request, parent_vector,
- current_val, iter);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- }
- return current_val;
-}
-
-XMLRPC_VALUE xml_element_to_XMLRPC_VALUE(xml_element* el)
-{
- return xml_element_to_XMLRPC_REQUEST_worker(NULL, NULL, NULL, el);
-}
-
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if (request) {
- return XMLRPC_RequestSetData(request, xml_element_to_XMLRPC_REQUEST_worker(request, NULL, NULL, el));
- }
- return NULL;
-}
-
-xml_element* XMLRPC_to_xml_element_worker(XMLRPC_VALUE current_vector, XMLRPC_VALUE node,
- XMLRPC_REQUEST_TYPE request_type, int depth) {
-#define BUF_SIZE 512
- xml_element* root = NULL;
- if (node) {
- char buf[BUF_SIZE];
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(node);
- XMLRPC_VECTOR_TYPE vtype = XMLRPC_GetVectorType(node);
- xml_element* elem_val = xml_elem_new();
-
- /* special case for when root element is not an array */
- if (depth == 0 &&
- !(type == xmlrpc_vector &&
- vtype == xmlrpc_vector_array &&
- request_type == xmlrpc_request_call) ) {
- int bIsFault = (vtype == xmlrpc_vector_struct && XMLRPC_VectorGetValueWithID(node, ELEM_FAULTCODE));
-
- xml_element* next_el = XMLRPC_to_xml_element_worker(NULL, node, request_type, depth + 1);
- if (next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- elem_val->name = strdup(bIsFault ? ELEM_FAULT : ELEM_PARAMS);
- }
- else {
- switch (type) {
- case xmlrpc_empty: // treat null value as empty string in xmlrpc.
- case xmlrpc_string:
- elem_val->name = strdup(ELEM_STRING);
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_int:
- elem_val->name = strdup(ELEM_INT);
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_boolean:
- elem_val->name = strdup(ELEM_BOOLEAN);
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_double:
- elem_val->name = strdup(ELEM_DOUBLE);
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_datetime:
- elem_val->name = strdup(ELEM_DATETIME);
- simplestring_add(&elem_val->text, XMLRPC_GetValueDateTime_ISO8601(node));
- break;
- case xmlrpc_base64:
- {
- struct buffer_st buf;
- elem_val->name = strdup(ELEM_BASE64);
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- case xmlrpc_vector:
- {
- XMLRPC_VECTOR_TYPE my_type = XMLRPC_GetVectorType(node);
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- xml_element* root_vector_elem = elem_val;
-
- switch (my_type) {
- case xmlrpc_vector_array:
- {
- if(depth == 0) {
- elem_val->name = strdup(ELEM_PARAMS);
- }
- else {
- /* Hi my name is Dave and I like to make things as confusing
- * as possible, thus I will throw in this 'data' element
- * where it absolutely does not belong just so that people
- * cannot code arrays and structs in a similar and straight
- * forward manner. Have a good day.
- *
- * GRRRRRRRRR!
- */
- xml_element* data = xml_elem_new();
- data->name = strdup(ELEM_DATA);
-
- elem_val->name = strdup(ELEM_ARRAY);
- Q_PushTail(&elem_val->children, data);
- root_vector_elem = data;
- }
- }
- break;
- case xmlrpc_vector_mixed: /* not officially supported */
- case xmlrpc_vector_struct:
- elem_val->name = strdup(ELEM_STRUCT);
- break;
- default:
- break;
- }
-
- /* recurse through sub-elements */
- while ( xIter ) {
- xml_element* next_el = XMLRPC_to_xml_element_worker(node, xIter, request_type, depth + 1);
- if (next_el) {
- Q_PushTail(&root_vector_elem->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
- break;
- default:
- break;
- }
- }
-
- {
- XMLRPC_VECTOR_TYPE vtype = XMLRPC_GetVectorType(current_vector);
-
- if (depth == 1) {
- xml_element* value = xml_elem_new();
- value->name = strdup(ELEM_VALUE);
-
- /* yet another hack for the "fault" crap */
- if (XMLRPC_VectorGetValueWithID(node, ELEM_FAULTCODE)) {
- root = value;
- }
- else {
- xml_element* param = xml_elem_new();
- param->name = strdup(ELEM_PARAM);
-
- Q_PushTail(&param->children, value);
-
- root = param;
- }
- Q_PushTail(&value->children, elem_val);
- }
- else if (vtype == xmlrpc_vector_struct || vtype == xmlrpc_vector_mixed) {
- xml_element* member = xml_elem_new();
- xml_element* name = xml_elem_new();
- xml_element* value = xml_elem_new();
-
- member->name = strdup(ELEM_MEMBER);
- name->name = strdup(ELEM_NAME);
- value->name = strdup(ELEM_VALUE);
-
- simplestring_add(&name->text, XMLRPC_GetValueID(node));
-
- Q_PushTail(&member->children, name);
- Q_PushTail(&member->children, value);
- Q_PushTail(&value->children, elem_val);
-
- root = member;
- }
- else if (vtype == xmlrpc_vector_array) {
- xml_element* value = xml_elem_new();
-
- value->name = strdup(ELEM_VALUE);
-
- Q_PushTail(&value->children, elem_val);
-
- root = value;
- }
- else if (vtype == xmlrpc_vector_none) {
- /* no parent. non-op */
- root = elem_val;
- }
- else {
- xml_element* value = xml_elem_new();
-
- value->name = strdup(ELEM_VALUE);
-
- Q_PushTail(&value->children, elem_val);
-
- root = value;
- }
- }
- }
- return root;
-}
-
-xml_element* XMLRPC_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return XMLRPC_to_xml_element_worker(NULL, node, xmlrpc_request_none, 0);
-}
-
-xml_element* XMLRPC_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* wrapper = NULL;
- if (request) {
- const char* pStr = NULL;
- XMLRPC_REQUEST_TYPE request_type = XMLRPC_RequestGetRequestType(request);
- XMLRPC_VALUE xParams = XMLRPC_RequestGetData(request);
-
- wrapper = xml_elem_new();
-
- if (request_type == xmlrpc_request_call) {
- pStr = ELEM_METHODCALL;
- }
- else if (request_type == xmlrpc_request_response) {
- pStr = ELEM_METHODRESPONSE;
- }
- if (pStr) {
- wrapper->name = strdup(pStr);
- }
-
- if(request_type == xmlrpc_request_call) {
- pStr = XMLRPC_RequestGetMethodName(request);
-
- if (pStr) {
- xml_element* method = xml_elem_new();
- method->name = strdup(ELEM_METHODNAME);
- simplestring_add(&method->text, pStr);
- Q_PushTail(&wrapper->children, method);
- }
- }
- if (xParams) {
- Q_PushTail(&wrapper->children,
- XMLRPC_to_xml_element_worker(NULL, XMLRPC_RequestGetData(request), XMLRPC_RequestGetRequestType(request), 0));
- }
- else {
- /* Despite the spec, the xml-rpc list folk want me to send an empty params element */
- xml_element* params = xml_elem_new();
- params->name = strdup(ELEM_PARAMS);
- Q_PushTail(&wrapper->children, params);
- }
- }
- return wrapper;
-}
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.h b/ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.h
deleted file mode 100644
index 234a153460..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xml_to_xmlrpc.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef XML_TO_XMLRPC_H
- #define XML_TO_XMLRPC_H
-
-#include "time.h"
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_XMLRPC_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* XMLRPC_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* XMLRPC_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_XMLRPC_H */
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.c b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.c
deleted file mode 100644
index cfac12d496..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.c
+++ /dev/null
@@ -1,2798 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-/****h* ABOUT/xmlrpc
- * NAME
- * XMLRPC_VALUE
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 9/1999 - 10/2000
- * HISTORY
- * 09/1999 -- danda -- Initial API, before I even knew of standard XMLRPC vocab. Response only.
- * 06/2000 -- danda -- played with expat-ensor from www.ensor.org. Cool, but some flaws.
- * 07/2000 -- danda -- wrote new implementation to be compatible with xmlrpc standard and
- * incorporated some ideas from ensor, most notably the separation of
- * xml dom from xmlrpc api.
- * 08/2000 -- danda -- support for two vocabularies: danda-rpc and xml-rpc
- * 08/2000 -- danda -- PHP C extension that uses XMLRPC
- * 10/15/2000 -- danda -- adding robodoc documentation
- * TODO
- * Server method introspection. (Enumerate available methods, describe I/O)
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * Welcome to XMLRPC. For more info on the specification and history, see
- * http://www.xmlrpc.org.
- *
- * This code aims to be a full-featured C implementation of XMLRPC. It does not
- * have any networking code. Rather, it is intended to be plugged into apps
- * or libraries with existing networking facilities, eg PHP, apache, perl, mozilla,
- * home-brew application servers, etc.
- *
- * Usage Paradigm:
- * The user of this library will typically be implementing either an XMLRPC server,
- * an XMLRPC client, or both. The client will use the library to build an in-memory
- * representation of a request, and then serialize (encode) that request into XML. The
- * client will then send the XML to the server via external mechanism. The server will
- * de-serialize the XML back into an binary representation, call the appropriate registered
- * method -- thereby generating a response. The response will be serialized into XML and
- * sent back to the client. The client will de-serialize it into memory, and can
- * iterate through the results via API.
- *
- * Both the request and the response may consist of arbitrarily long, arbitrarily nested
- * values. The values may be one of several types, as defined by XMLRPC_VALUE_TYPE.
- *
- * Features and Architecture:
- * - The XML parsing (xml_element.c) is completely independent of the XMLRPC api. In fact,
- * it can be used as a standalone dom implementation.
- * - Because of this, the same XMLRPC data can be serialized into multiple xml vocabularies.
- * It is simply a matter of writing a transport. So far, two transports have been defined.
- * The default xmlrpc vocab (xml_to_xmlrpc.c), and simple-rpc (xml_to_dandarpc.c) which is
- * proprietary, but imho more readable, and nice for proprietary legacy reasons.
- * - Various output options, including: xml escaping via CDATA or entity, case folding,
- * vocab version, and character encoding.
- * - One to One mapping between C structures and actual values, unlike ensor which forces
- * one to understand the arcana of the xmlrpc vocab.
- * - support for mixed indexed/keyed vector types, making it more compatible with
- * languages such as PHP.
- * - quite speedy compared to implementations written in interpreted languages. Also, uses
- * intelligent string handling, so not many strlen() calls, etc.
- * - comprehensive API for manipulation of values
- *******/
-
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <time.h>
-
-#include "queue.h"
-#include "xmlrpc.h"
-#include "expat.h"
-#include "base64.h"
-
-#include "xml_to_xmlrpc.h"
-#include "xml_to_dandarpc.h"
-#include "xml_to_soap.h"
-#include "xml_element.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-
-
-
-/*-*********************
-* Begin Time Functions *
-***********************/
-
-static int date_from_ISO8601 (const char *text, time_t * value) {
- struct tm tm;
- int n;
- int i;
- time_t t;
- char buf[18];
-
- if (strchr (text, '-')) {
- char *p = (char *) text, *p2 = buf;
- while (p && *p) {
- if (*p != '-') {
- *p2 = *p;
- p2++;
- }
- p++;
- }
- text = buf;
- }
-
-
- tm.tm_isdst = -1;
-
- if(strlen(text) < 17) {
- return -1;
- }
-
- n = 1000;
- tm.tm_year = 0;
- for(i = 0; i < 4; i++) {
- tm.tm_year += (text[i]-'0')*n;
- n /= 10;
- }
- n = 10;
- tm.tm_mon = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_mon += (text[i+4]-'0')*n;
- n /= 10;
- }
- tm.tm_mon --;
-
- n = 10;
- tm.tm_mday = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_mday += (text[i+6]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_hour = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_hour += (text[i+9]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_min = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_min += (text[i+12]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_sec = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_sec += (text[i+15]-'0')*n;
- n /= 10;
- }
-
- tm.tm_year -= 1900;
-
- *value = mktime(&tm);
-
- return 0;
-
-}
-
-static int date_to_ISO8601 (time_t value, char *buf, int length) {
- struct tm *tm;
- tm = localtime(&value);
-#if 0 // TODO: soap seems to favor this method. xmlrpc the latter.
- return strftime (buf, length, "%Y-%m-%dT%H:%M:%SZ", tm);
-#else
- return strftime(buf, length, "%Y%m%dT%H:%M:%S", tm);
-#endif
-}
-
-/*-*******************
-* End Time Functions *
-*********************/
-
-
-/*-***************************
-* Begin XMLRPC_REQUEST funcs *
-*****************************/
-
-/****f* REQUEST/XMLRPC_RequestNew
- * NAME
- * XMLRPC_RequestNew
- * SYNOPSIS
- * XMLRPC_REQUEST XMLRPC_RequestNew()
- * FUNCTION
- * Creates a new XMLRPC_Request data struct
- * INPUTS
- * none
- * SEE ALSO
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-XMLRPC_REQUEST XMLRPC_RequestNew() {
- XMLRPC_REQUEST xRequest = calloc(1, sizeof(STRUCT_XMLRPC_REQUEST));
- if(xRequest) {
- simplestring_init(&xRequest->methodName);
- }
- return xRequest;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestFree
- * NAME
- * XMLRPC_RequestFree
- * SYNOPSIS
- * void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO)
- * FUNCTION
- * Free XMLRPC Request and all sub-values
- * INPUTS
- * request -- previously allocated request struct
- * bFreeIO -- 1 = also free request value data, if any, 0 = ignore.
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO) {
- if(request) {
- simplestring_free(&request->methodName);
-
- if(request->io && bFreeIO) {
- XMLRPC_CleanupValue(request->io);
- }
- if(request->error) {
- XMLRPC_CleanupValue(request->error);
- }
- my_free(request);
- }
-}
-
-/*******/
-
-/* Set Method Name to call */
-/****f* REQUEST/XMLRPC_RequestSetMethodName
- * NAME
- * XMLRPC_RequestSetMethodName
- * SYNOPSIS
- * const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName)
- * FUNCTION
- * Set name of method to call with this request.
- * INPUTS
- * request -- previously allocated request struct
- * methodName -- name of method
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetMethodName ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName) {
- if(request) {
- simplestring_clear(&request->methodName);
- simplestring_add(&request->methodName, methodName);
- return request->methodName.str;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetMethodName
- * NAME
- * XMLRPC_RequestGetMethodName
- * SYNOPSIS
- * const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request)
- * FUNCTION
- * Get name of method called by this request
- * INPUTS
- * request -- previously allocated request struct
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetMethodName ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request) {
- return request ? request->methodName.str : NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestSetRequestType
- * NAME
- * XMLRPC_RequestSetRequestType
- * SYNOPSIS
- * XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type)
- * FUNCTION
- * A request struct may be allocated by a caller or by xmlrpc
- * in response to a request. This allows setting the
- * request type.
- * INPUTS
- * request -- previously allocated request struct
- * type -- request type [xmlrpc_method_call | xmlrpc_method_response]
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetRequestType ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType (XMLRPC_REQUEST request,
- XMLRPC_REQUEST_TYPE type) {
- if(request) {
- request->request_type = type;
- return request->request_type;
- }
- return xmlrpc_request_none;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetRequestType
- * NAME
- * XMLRPC_RequestGetRequestType
- * SYNOPSIS
- * XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request)
- * FUNCTION
- * A request struct may be allocated by a caller or by xmlrpc
- * in response to a request. This allows setting the
- * request type.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * type -- request type [xmlrpc_method_call | xmlrpc_method_response]
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetRequestType ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request) {
- return request ? request->request_type : xmlrpc_request_none;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestSetData
- * NAME
- * XMLRPC_RequestSetData
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data)
- * FUNCTION
- * Associates a block of xmlrpc data with the request. The
- * data is *not* copied. A pointer is kept. The caller
- * should be careful not to doubly free the data value,
- * which may optionally be free'd by XMLRPC_RequestFree().
- * INPUTS
- * request -- previously allocated request struct
- * data -- previously allocated data struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetData ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data) {
- if(request && data) {
- if (request->io) {
- XMLRPC_CleanupValue (request->io);
- }
- request->io = XMLRPC_CopyValue(data);
- return request->io;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetData
- * NAME
- * XMLRPC_RequestGetData
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request)
- * FUNCTION
- * Returns data associated with request, if any.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetData ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request) {
- return request ? request->io : NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestSetError
- * NAME
- * XMLRPC_RequestSetError
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestSetError(XMLRPC_REQUEST request, XMLRPC_VALUE error)
- * FUNCTION
- * Associates a block of xmlrpc data, representing an error
- * condition, with the request.
- * INPUTS
- * request -- previously allocated request struct
- * error -- previously allocated error code or struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * NOTES
- * This is a private function for usage by internals only.
- * SEE ALSO
- * XMLRPC_RequestGetError ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestSetError (XMLRPC_REQUEST request, XMLRPC_VALUE error) {
- if (request && error) {
- if (request->error) {
- XMLRPC_CleanupValue (request->error);
- }
- request->error = XMLRPC_CopyValue (error);
- return request->error;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetError
- * NAME
- * XMLRPC_RequestGetError
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestGetError(XMLRPC_REQUEST request)
- * FUNCTION
- * Returns error data associated with request, if any.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_VALUE -- pointer to error value stored, or NULL
- * NOTES
- * This is a private function for usage by internals only.
- * SEE ALSO
- * XMLRPC_RequestSetError ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestGetError (XMLRPC_REQUEST request) {
- return request ? request->error : NULL;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestSetOutputOptions
- * NAME
- * XMLRPC_RequestSetOutputOptions
- * SYNOPSIS
- * XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output)
- * FUNCTION
- * Sets output options used for generating XML. The output struct
- * is copied, and may be freed by the caller.
- * INPUTS
- * request -- previously allocated request struct
- * output -- output options struct initialized by caller
- * RESULT
- * XMLRPC_REQUEST_OUTPUT_OPTIONS -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetOutputOptions ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * SOURCE
- */
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output) {
- if(request && output) {
- memcpy (&request->output, output,
- sizeof (STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS));
- return &request->output;
- }
- return NULL;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestGetOutputOptions
- * NAME
- * XMLRPC_RequestGetOutputOptions
- * SYNOPSIS
- * XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request)
- * FUNCTION
- * Gets a pointer to output options used for generating XML.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_REQUEST_OUTPUT_OPTIONS -- pointer to options stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetOutputOptions ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * SOURCE
- */
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request) {
- return request ? &request->output : NULL;
-}
-
-/*******/
-
-/*-*************************
-* End XMLRPC_REQUEST funcs *
-***************************/
-
-
-/*-***************************
-* Begin Serializiation funcs *
-*****************************/
-
-/****f* SERIALIZE/XMLRPC_VALUE_ToXML
- * NAME
- * XMLRPC_VALUE_ToXML
- * SYNOPSIS
- * char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val)
- * FUNCTION
- * encode XMLRPC_VALUE into XML buffer. Note that the generated
- * buffer will not contain a methodCall.
- * INPUTS
- * val -- previously allocated XMLRPC_VALUE
- * buf_len -- length of returned buffer, if not null
- * RESULT
- * char* -- newly allocated buffer containing XML.
- * It is the caller's responsibility to free it.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_VALUE_FromXML ()
- * XMLRPC_Free ()
- * XMLRPC_VALUE
- * SOURCE
- */
-char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len) {
- xml_element *root_elem = XMLRPC_VALUE_to_xml_element(val);
- char* pRet = NULL;
-
- if(root_elem) {
- pRet = xml_elem_serialize_to_string(root_elem, NULL, buf_len);
- xml_elem_free(root_elem);
- }
- return pRet;
-}
-
-/*******/
-
-/****f* SERIALIZE/XMLRPC_REQUEST_ToXML
- * NAME
- * XMLRPC_REQUEST_ToXML
- * SYNOPSIS
- * char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request)
- * FUNCTION
- * encode XMLRPC_REQUEST into XML buffer
- * INPUTS
- * request -- previously allocated XMLRPC_REQUEST
- * buf_len -- size of returned buf, if not null
- * RESULT
- * char* -- newly allocated buffer containing XML.
- * It is the caller's responsibility to free it.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_REQUEST_FromXML ()
- * XMLRPC_Free ()
- * XMLRPC_VALUE_ToXML ()
- * XMLRPC_REQUEST
- * SOURCE
- */
-char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int* buf_len) {
- char* pRet = NULL;
- if (request) {
- xml_element *root_elem = NULL;
- if (request->output.version == xmlrpc_version_simple) {
- root_elem = DANDARPC_REQUEST_to_xml_element (request);
- }
- else if (request->output.version == xmlrpc_version_1_0) {
- root_elem = XMLRPC_REQUEST_to_xml_element (request);
- }
- else if (request->output.version == xmlrpc_version_soap_1_1) {
- root_elem = SOAP_REQUEST_to_xml_element (request);
- }
-
- if(root_elem) {
- pRet =
- xml_elem_serialize_to_string (root_elem,
- &request->output.xml_elem_opts,
- buf_len);
- xml_elem_free(root_elem);
- }
- }
- return pRet;
-}
-
-/*******/
-
-/****f* SERIALIZE/XMLRPC_VALUE_FromXML
- * NAME
- * XMLRPC_VALUE_FromXML
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int le
- * FUNCTION
- * Retrieve XMLRPC_VALUE from XML buffer. Note that this will
- * ignore any methodCall. See XMLRPC_REQUEST_FromXML
- * INPUTS
- * in_buf -- character buffer containing XML
- * len -- length of buffer
- * RESULT
- * XMLRPC_VALUE -- newly allocated data, or NULL if error. Should
- * be free'd by caller.
- * SEE ALSO
- * XMLRPC_VALUE_ToXML ()
- * XMLRPC_REQUEST_FromXML ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VALUE_FromXML (const char *in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options) {
- XMLRPC_VALUE xResponse = NULL;
- XMLRPC_REQUEST req = XMLRPC_REQUEST_FromXML(in_buf, len, in_options);
-
- if(req) {
- xResponse = req->io;
- XMLRPC_RequestFree(req, 0);
- }
- return xResponse;
-}
-
-/*******/
-
-/* map parser errors to standard xml-rpc errors */
-static XMLRPC_VALUE map_expat_errors(XML_ELEM_ERROR error) {
- XMLRPC_VALUE xReturn = NULL;
- if(error) {
- XMLRPC_ERROR_CODE code;
- char buf[1024];
- snprintf(buf, sizeof(buf),
- "error occurred at line %i, column %i, byte index %i",
- error->line, error->column, error->byte_index);
-
- /* expat specific errors */
- switch(error->parser_code) {
- case XML_ERROR_UNKNOWN_ENCODING:
- code = xmlrpc_error_parse_unknown_encoding;
- break;
- case XML_ERROR_INCORRECT_ENCODING:
- code = xmlrpc_error_parse_bad_encoding;
- break;
- default:
- code = xmlrpc_error_parse_xml_syntax;
- break;
- }
- xReturn = XMLRPC_UtilityCreateFault(code, buf);
- }
- return xReturn;
-}
-
-/****f* SERIALIZE/XMLRPC_REQUEST_FromXML
- * NAME
- * XMLRPC_REQUEST_FromXML
- * SYNOPSIS
- * XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int le
- * FUNCTION
- * Retrieve XMLRPC_REQUEST from XML buffer
- * INPUTS
- * in_buf -- character buffer containing XML
- * len -- length of buffer
- * RESULT
- * XMLRPC_REQUEST -- newly allocated data, or NULL if error. Should
- * be free'd by caller.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_VALUE_FromXML ()
- * XMLRPC_REQUEST
- * SOURCE
- */
-XMLRPC_REQUEST XMLRPC_REQUEST_FromXML (const char *in_buf, int len,
- XMLRPC_REQUEST_INPUT_OPTIONS in_options) {
- XMLRPC_REQUEST request = XMLRPC_RequestNew();
- STRUCT_XML_ELEM_ERROR error = {0};
-
- if(request) {
- xml_element *root_elem =
- xml_elem_parse_buf (in_buf, len,
- (in_options ? &in_options->xml_elem_opts : NULL),
- &error);
-
- if(root_elem) {
- if(!strcmp(root_elem->name, "simpleRPC")) {
- request->output.version = xmlrpc_version_simple;
- xml_element_to_DANDARPC_REQUEST(request, root_elem);
- }
- else if (!strcmp (root_elem->name, "SOAP-ENV:Envelope")) {
- request->output.version = xmlrpc_version_soap_1_1;
- xml_element_to_SOAP_REQUEST (request, root_elem);
- }
- else {
- request->output.version = xmlrpc_version_1_0;
- xml_element_to_XMLRPC_REQUEST(request, root_elem);
- }
- xml_elem_free(root_elem);
- }
- else {
- if(error.parser_error) {
- XMLRPC_RequestSetError (request, map_expat_errors (&error));
- }
- }
- }
-
- return request;
-}
-
-/*******/
-
-/*-************************
-* End Serialization Funcs *
-**************************/
-
-
-
-/****f* VALUE/XMLRPC_CreateValueEmpty
- * NAME
- * XMLRPC_CreateValueEmpty
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueEmpty ()
- * FUNCTION
- * Create an XML value to be used/modified elsewhere.
- * INPUTS
- * RESULT
- * XMLRPC_VALUE. The new value, or NULL on failure.
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueEmpty() {
- XMLRPC_VALUE v = calloc(1, sizeof(STRUCT_XMLRPC_VALUE));
- if(v) {
-#ifdef XMLRPC_DEBUG_REFCOUNT
- printf ("calloc'd 0x%x\n", v);
-#endif
- v->type = xmlrpc_empty;
- simplestring_init(&v->id);
- simplestring_init(&v->str);
- }
- return v;
-}
-
-static const char* get_string(const char* buf, int bDup) {
- if(bDup) {
- return strdup(buf);
- }
- return buf;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueID_Case
- * NAME
- * XMLRPC_SetValueID_Case
- * SYNOPSIS
- * const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case)
- * FUNCTION
- * Assign an ID (key) to an XMLRPC value.
- * INPUTS
- * value The xml value who's ID we will set.
- * id The desired new id.
- * len length of id string if known, or 0 if unknown.
- * id_case one of XMLRPC_CASE
- * RESULT
- * const char* pointer to the newly allocated id string, or NULL
- * SEE ALSO
- * XMLRPC_SetValueID ()
- * XMLRPC_GetValueID ()
- * XMLRPC_VALUE
- * XMLRPC_CASE
- * SOURCE
- */
-const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case) {
- const char* pRetval = NULL;
- if(value) {
- if(id) {
- simplestring_clear(&value->id);
- (len > 0) ? simplestring_addn(&value->id, id, len) :
- simplestring_add(&value->id, id);
-
- /* upper or lower case string in place if required. could be a seperate func. */
- if(id_case == xmlrpc_case_lower || id_case == xmlrpc_case_upper) {
- int i;
- for(i = 0; i < value->id.len; i++) {
- value->id.str[i] =
- (id_case ==
- xmlrpc_case_lower) ? tolower (value->id.
- str[i]) : toupper (value->
- id.
- str[i]);
- }
- }
-
- pRetval = value->id.str;
-
-#ifdef XMLRPC_DEBUG_REFCOUNT
- printf("set value id: %s\n", pRetval);
-#endif
- }
- }
-
- return pRetval;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueString
- * NAME
- * XMLRPC_SetValueString
- * SYNOPSIS
- * const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* val, int len)
- * FUNCTION
- * Assign a string value to an XMLRPC_VALUE, and set it to type xmlrpc_string
- * INPUTS
- * value The xml value who's ID we will set.
- * val The desired new string val.
- * len length of val string if known, or 0 if unknown.
- * RESULT
- * const char* pointer to the newly allocated value string, or NULL
- * SEE ALSO
- * XMLRPC_GetValueString ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* val, int len) {
- char *pRetval = NULL;
- if(value && val) {
- simplestring_clear(&value->str);
- (len > 0) ? simplestring_addn(&value->str, val, len) :
- simplestring_add(&value->str, val);
- value->type = xmlrpc_string;
- pRetval = (char *)value->str.str;
- }
-
- return pRetval;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueInt
- * NAME
- * XMLRPC_SetValueInt
- * SYNOPSIS
- * void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val)
- * FUNCTION
- * Assign an int value to an XMLRPC_VALUE, and set it to type xmlrpc_int
- * INPUTS
- * value The xml value who's ID we will set.
- * val The desired new integer value
- * RESULT
- * SEE ALSO
- * XMLRPC_GetValueInt ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val) {
- if(value) {
- value->type = xmlrpc_int;
- value->i = val;
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueBoolean
- * NAME
- * XMLRPC_SetValueBoolean
- * SYNOPSIS
- * void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val)
- * FUNCTION
- * Assign a boolean value to an XMLRPC_VALUE, and set it to type xmlrpc_boolean
- * INPUTS
- * value The xml value who's value we will set.
- * val The desired new boolean value. [0 | 1]
- * RESULT
- * SEE ALSO
- * XMLRPC_GetValueBoolean ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val) {
- if(value) {
- value->type = xmlrpc_boolean;
- value->i = val ? 1 : 0;
- }
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_SetIsVector
- * NAME
- * XMLRPC_SetIsVector
- * SYNOPSIS
- * int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type)
- * FUNCTION
- * Set the XMLRPC_VALUE to be a vector (list) type. The vector may be one of
- * [xmlrpc_array | xmlrpc_struct | xmlrpc_mixed]. An array has only index values.
- * A struct has key/val pairs. Mixed allows both index and key/val combinations.
- * INPUTS
- * value The xml value who's vector type we will set
- * type New type of vector as enumerated by XMLRPC_VECTOR_TYPE
- * RESULT
- * int 1 if successful, 0 otherwise
- * SEE ALSO
- * XMLRPC_GetValueType ()
- * XMLRPC_GetVectorType ()
- * XMLRPC_VALUE
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type) {
- int bSuccess = 0;
-
- if (value) {
- // we can change the type so long as nothing is currently stored.
- if(value->type == xmlrpc_vector) {
- if(value->v) {
- if(!Q_Size(value->v->q)) {
- value->v->type = type;
- }
- }
- }
- else {
- value->v = calloc(1, sizeof(STRUCT_XMLRPC_VECTOR));
- if(value->v) {
- value->v->q = (queue*)malloc(sizeof(queue));
- if(value->v->q) {
- Q_Init(value->v->q);
- value->v->type = type;
- value->type = xmlrpc_vector;
- bSuccess = 1;
- }
- }
- }
- }
-
- return bSuccess;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_CreateVector
- * NAME
- * XMLRPC_CreateVector
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type)
- * FUNCTION
- * Create a new vector and optionally set an id.
- * INPUTS
- * id The id of the vector, or NULL
- * type New type of vector as enumerated by XMLRPC_VECTOR_TYPE
- * RESULT
- * XMLRPC_VALUE The new vector, or NULL on failure.
- * SEE ALSO
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_SetIsVector ()
- * XMLRPC_GetValueType ()
- * XMLRPC_GetVectorType ()
- * XMLRPC_VALUE
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type) {
- XMLRPC_VALUE val = NULL;
-
- val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_VECTOR *pSIV = NULL;
-
- if(XMLRPC_SetIsVector(val, type)) {
- if(id) {
- const char *pSVI = NULL;
-
- pSVI = XMLRPC_SetValueID(val, id, 0);
- if(NULL == pSVI) {
- val = NULL;
- }
- }
- }
- else {
- val = NULL;
- }
- }
- return val;
-}
-
-/*******/
-
-
-/* Not yet implemented.
- *
- * This should use a hash to determine if a given target id has already
- * been appended.
- *
- * Alternately, it could walk the entire vector, but that could be quite
- * slow for very large lists.
- */
-static int isDuplicateEntry(XMLRPC_VALUE target, XMLRPC_VALUE source) {
- return 0;
-}
-
-/****f* VECTOR/XMLRPC_AddValueToVector
- * NAME
- * XMLRPC_AddValueToVector
- * SYNOPSIS
- * int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source)
- * FUNCTION
- * Add (append) an existing XMLRPC_VALUE to a vector.
- * INPUTS
- * target The target vector
- * source The source value to append
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_AddValuesToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * NOTES
- * The function will fail and return 0 if an attempt is made to add
- * a value with an ID into a vector of type xmlrpc_vector_array. Such
- * values can only be added to xmlrpc_vector_struct.
- * SOURCE
- */
-int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source) {
- if(target && source) {
- if(target->type == xmlrpc_vector && target->v &&
- target->v->q && target->v->type != xmlrpc_vector_none) {
-
- /* guard against putting value of unknown type into vector */
- switch(source->type) {
- case xmlrpc_empty:
- case xmlrpc_base64:
- case xmlrpc_boolean:
- case xmlrpc_datetime:
- case xmlrpc_double:
- case xmlrpc_int:
- case xmlrpc_string:
- case xmlrpc_vector:
- /* Guard against putting a key/val pair into an array vector */
- if( !(source->id.len && target->v->type == xmlrpc_vector_array) ) {
- if (isDuplicateEntry (target, source)
- || Q_PushTail (target->v->q, XMLRPC_CopyValue (source))) {
- return 1;
- }
- }
- else {
- fprintf (stderr,
- "xmlrpc: attempted to add key/val pair to vector of type array\n");
- }
- break;
- default:
- fprintf (stderr,
- "xmlrpc: attempted to add value of unknown type to vector\n");
- break;
- }
- }
- }
- return 0;
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_AddValuesToVector
- * NAME
- * XMLRPC_AddValuesToVector
- * SYNOPSIS
- * XMLRPC_AddValuesToVector ( target, val1, val2, val3, val(n), 0 )
- * XMLRPC_AddValuesToVector( XMLRPC_VALUE, ... )
- * FUNCTION
- * Add (append) a series of existing XMLRPC_VALUE to a vector.
- * INPUTS
- * target The target vector
- * ... The source value(s) to append. The last item *must* be 0.
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_AddValuesToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * NOTES
- * This function may actually return failure after it has already modified
- * or added items to target. You can not trust the state of target
- * if this function returns failure.
- * SOURCE
- */
-int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...) {
- int iRetval = 0;
-
- if(target) {
- if(target->type == xmlrpc_vector) {
- XMLRPC_VALUE v = NULL;
- va_list vl;
-
- va_start(vl, target);
-
- do {
- v = va_arg(vl, XMLRPC_VALUE);
- if(v) {
- if(!XMLRPC_AddValueToVector(target, v)) {
- iRetval = 0;
- break;
- }
- }
- }
- while (v);
-
- va_end(vl);
-
- if(NULL == v) {
- iRetval = 1;
- }
- }
- }
- return iRetval;
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_VectorGetValueWithID_Case
- * NAME
- * XMLRPC_VectorGetValueWithID_Case
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case)
- * FUNCTION
- * Get value from vector matching id (key)
- * INPUTS
- * vector The source vector
- * id The key to find
- * id_case Rule for how to match key
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_SetValueID_Case ()
- * XMLRPC_VALUE
- * XMLRPC_CASE_COMPARISON
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case (XMLRPC_VALUE vector, const char *id,
- XMLRPC_CASE_COMPARISON id_case) {
- if(vector && vector->v && vector->v->q) {
- q_iter qi = Q_Iter_Head_F(vector->v->q);
-
- while(qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F(qi);
- if(xIter && xIter->id.str) {
- if(id_case == xmlrpc_case_sensitive) {
- if(!strcmp(xIter->id.str, id)) {
- return xIter;
- }
- }
- else if(id_case == xmlrpc_case_insensitive) {
- if(!strcasecmp(xIter->id.str, id)) {
- return xIter;
- }
- }
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return NULL;
-}
-
-/*******/
-
-
-int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value) {
- if(vector && vector->v && vector->v->q && value) {
- q_iter qi = Q_Iter_Head_F(vector->v->q);
-
- while(qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F(qi);
- if(xIter == value) {
- XMLRPC_CleanupValue(xIter);
- Q_Iter_Del(vector->v->q, qi);
- return 1;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return 0;
-}
-
-
-/****f* VALUE/XMLRPC_CreateValueString
- * NAME
- * XMLRPC_CreateValueString
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* val, int len)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign a string to it
- * INPUTS
- * id The id of the value, or NULL
- * val The desired new string val.
- * len length of val string if known, or 0 if unknown.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueString ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* val, int len) {
- XMLRPC_VALUE value = NULL;
- if(val) {
- value = XMLRPC_CreateValueEmpty();
- if(value) {
- XMLRPC_SetValueString(value, val, len);
- if(id) {
- XMLRPC_SetValueID(value, id, 0);
- }
- }
- }
- return value;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueInt
- * NAME
- * XMLRPC_CreateValueInt
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign an int to it
- * INPUTS
- * id The id of the value, or NULL
- * i The desired new int val.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueInt ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueInt(val, i);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueBoolean
- * NAME
- * XMLRPC_CreateValueBoolean
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int i)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign an int to it
- * INPUTS
- * id The id of the value, or NULL
- * i The desired new int val.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueBoolean ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int i) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueBoolean(val, i);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_CleanupValue
- * NAME
- * XMLRPC_CleanupValue
- * SYNOPSIS
- * void XMLRPC_CleanupValue(XMLRPC_VALUE value)
- * FUNCTION
- * Frees all memory allocated for an XMLRPC_VALUE and any of its children (if a vector)
- * INPUTS
- * value The id of the value to be cleaned up.
- * RESULT
- * void
- * NOTES
- * Normally this function will be called for the topmost vector, thus free-ing
- * all children. If a child of a vector is free'd first, results are undefined.
- * Failure to call this function *will* cause memory leaks.
- *
- * Also, this function is implemented using reference counting. Thus a value
- * may be added and freed from multiple parents so long as a reference is added
- * first using XMLRPC_CopyValue()
- * SEE ALSO
- * XMLRPC_RequestFree ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_CopyValue()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_CleanupValue(XMLRPC_VALUE value) {
- if(value) {
- if(value->iRefCount > 0) {
- value->iRefCount --;
- }
-
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf ("decremented refcount of %s, now %i\n", value->id.str,
- value->iRefCount);
- }
- else {
- printf ("decremented refcount of 0x%x, now %i\n", value,
- value->iRefCount);
- }
-#endif
-
- if(value->type == xmlrpc_vector) {
- if(value->v) {
- if(value->iRefCount == 0) {
- XMLRPC_VALUE cur = (XMLRPC_VALUE)Q_Head(value->v->q);
- while( cur ) {
- XMLRPC_CleanupValue(cur);
-
- /* Make sure some idiot didn't include a vector as a child of itself
- * and thus it would have already free'd these.
- */
- if(value->v && value->v->q) {
- cur = Q_Next(value->v->q);
- }
- else {
- break;
- }
- }
-
- Q_Destroy(value->v->q);
- my_free(value->v->q);
- my_free(value->v);
- }
- }
- }
-
-
- if(value->iRefCount == 0) {
-
- /* guard against freeing invalid types */
- switch(value->type) {
- case xmlrpc_empty:
- case xmlrpc_base64:
- case xmlrpc_boolean:
- case xmlrpc_datetime:
- case xmlrpc_double:
- case xmlrpc_int:
- case xmlrpc_string:
- case xmlrpc_vector:
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf("free'd %s\n", value->id.str);
- }
- else {
- printf("free'd 0x%x\n", value);
- }
-#endif
- simplestring_free(&value->id);
- simplestring_free(&value->str);
-
- memset(value, 0, sizeof(STRUCT_XMLRPC_VALUE));
- my_free(value);
- break;
- default:
- fprintf (stderr,
- "xmlrpc: attempted to free value of invalid type\n");
- break;
- }
- }
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueDateTime
- * NAME
- * XMLRPC_SetValueDateTime
- * SYNOPSIS
- * void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time)
- * FUNCTION
- * Assign time value to XMLRPC_VALUE
- * INPUTS
- * value The target XMLRPC_VALUE
- * time The desired new unix time value (time_t)
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_SetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time) {
- if(value) {
- char timeBuf[30];
- value->type = xmlrpc_datetime;
- value->i = time;
-
- timeBuf[0] = 0;
-
- date_to_ISO8601(time, timeBuf, sizeof(timeBuf));
-
- if(timeBuf[0]) {
- simplestring_clear(&value->str);
- simplestring_add(&value->str, timeBuf);
- }
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CopyValue
- * NAME
- * XMLRPC_CopyValue
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value)
- * FUNCTION
- * Make a copy (reference) of an XMLRPC_VALUE
- * INPUTS
- * value The target XMLRPC_VALUE
- * RESULT
- * XMLRPC_VALUE -- address of the copy
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_DupValueNew ()
- * NOTES
- * This function is implemented via reference counting, so the
- * returned value is going to be the same as the passed in value.
- * The value must be freed the same number of times it is copied
- * or there will be a memory leak.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value) {
- if(value) {
- value->iRefCount ++;
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf ("incremented refcount of %s, now %i\n", value->id.str,
- value->iRefCount);
- }
- else {
- printf ("incremented refcount of 0x%x, now %i\n", value,
- value->iRefCount);
- }
-#endif
- }
- return value;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_DupValueNew
- * NAME
- * XMLRPC_DupValueNew
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE value)
- * FUNCTION
- * Make a duplicate (non reference) of an XMLRPC_VALUE with newly allocated mem.
- * INPUTS
- * value The source XMLRPC_VALUE to duplicate
- * RESULT
- * XMLRPC_VALUE -- address of the duplicate value
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_CopyValue ()
- * NOTES
- * Use this when function when you need to modify the contents of
- * the copied value seperately from the original.
- *
- * this function is recursive, thus the value and all of its children
- * (if any) will be duplicated.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_DupValueNew (XMLRPC_VALUE xSource) {
- XMLRPC_VALUE xReturn = NULL;
- if (xSource) {
- xReturn = XMLRPC_CreateValueEmpty ();
- if (xSource->id.len) {
- XMLRPC_SetValueID (xReturn, xSource->id.str, xSource->id.len);
- }
-
- switch (xSource->type) {
- case xmlrpc_int:
- case xmlrpc_boolean:
- XMLRPC_SetValueInt (xReturn, xSource->i);
- break;
- case xmlrpc_string:
- case xmlrpc_base64:
- XMLRPC_SetValueString (xReturn, xSource->str.str, xSource->str.len);
- break;
- case xmlrpc_datetime:
- XMLRPC_SetValueDateTime (xReturn, xSource->i);
- break;
- case xmlrpc_double:
- XMLRPC_SetValueDouble (xReturn, xSource->d);
- break;
- case xmlrpc_vector:
- {
- q_iter qi = Q_Iter_Head_F (xSource->v->q);
- XMLRPC_SetIsVector (xReturn, xSource->v->type);
-
- while (qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F (qi);
- XMLRPC_AddValueToVector (xReturn, XMLRPC_DupValueNew (xIter));
- qi = Q_Iter_Next_F (qi);
- }
- }
- break;
- }
- }
- return xReturn;
-}
-
-/*******/
-
-
-
-/****f* VALUE/XMLRPC_CreateValueDateTime
- * NAME
- * XMLRPC_CreateValueDateTime
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time)
- * FUNCTION
- * Create new datetime value from time_t
- * INPUTS
- * id id of the new value, or NULL
- * time The desired unix time value (time_t)
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_SetValueDateTime ()
- * XMLRPC_CreateValueDateTime_ISO8601 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDateTime(val, time);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueDateTime_ISO8601
- * NAME
- * XMLRPC_SetValueDateTime_ISO8601
- * SYNOPSIS
- * void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s)
- * FUNCTION
- * Set datetime value from IS08601 encoded string
- * INPUTS
- * value The target XMLRPC_VALUE
- * s The desired new time value
- * RESULT
- * void
- * BUGS
- * This function currently attempts to convert the time string to a valid unix time
- * value before passing it. Behavior when the string is invalid or out of range
- * is not well defined, but will probably result in Jan 1, 1970 (0) being passed.
- * SEE ALSO
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s) {
- if(value) {
- time_t time_val = 0;
- if(s) {
- date_from_ISO8601(s, &time_val);
- XMLRPC_SetValueDateTime(value, time_val);
- }
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueDateTime_ISO8601
- * NAME
- * XMLRPC_CreateValueDateTime_ISO8601
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s)
- * FUNCTION
- * Create datetime value from IS08601 encoded string
- * INPUTS
- * id The id of the new value, or NULL
- * s The desired new time value
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL if no value created.
- * BUGS
- * See XMLRPC_SetValueDateTime_ISO8601 ()
- * SEE ALSO
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_SetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDateTime_ISO8601(val, s);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueBase64
- * NAME
- * XMLRPC_SetValueBase64
- * SYNOPSIS
- * void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len)
- * FUNCTION
- * Set base64 value. Base64 is useful for transferring binary data, such as an image.
- * INPUTS
- * value The target XMLRPC_VALUE
- * s The desired new binary value
- * len The length of s, or NULL. If buffer is not null terminated, len *must* be passed.
- * RESULT
- * void
- * NOTES
- * Data is set/stored/retrieved as passed in, but is base64 encoded for XML transfer, and
- * decoded on the other side. This is transparent to the caller.
- * SEE ALSO
- * XMLRPC_GetValueBase64 ()
- * XMLRPC_CreateValueBase64 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len) {
- if(value && s) {
- simplestring_clear(&value->str);
- (len > 0) ? simplestring_addn(&value->str, s, len) :
- simplestring_add(&value->str, s);
- value->type = xmlrpc_base64;
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_CreateValueBase64
- * NAME
- * XMLRPC_CreateValueBase64
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len)
- * FUNCTION
- * Create base64 value. Base64 is useful for transferring binary data, such as an image.
- * INPUTS
- * id id of the new value, or NULL
- * s The desired new binary value
- * len The length of s, or NULL. If buffer is not null terminated, len *must* be passed.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL if error
- * NOTES
- * See XMLRPC_SetValueBase64 ()
- * SEE ALSO
- * XMLRPC_GetValueBase64 ()
- * XMLRPC_SetValueBase64 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueBase64(val, s, len);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueDouble
- * NAME
- * XMLRPC_SetValueDouble
- * SYNOPSIS
- * void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val)
- * FUNCTION
- * Set double (floating point) value.
- * INPUTS
- * value The target XMLRPC_VALUE
- * val The desired new double value
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val) {
- if(value) {
- value->type = xmlrpc_double;
- value->d = val;
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueDouble
- * NAME
- * XMLRPC_CreateValueDouble
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d)
- * FUNCTION
- * Create double (floating point) value.
- * INPUTS
- * id id of the newly created value, or NULL
- * d The desired new double value
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDouble(val, d);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueString
- * NAME
- * XMLRPC_GetValueString
- * SYNOPSIS
- * const char* XMLRPC_GetValueString(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve string value
- * INPUTS
- * value source XMLRPC_VALUE of type xmlrpc_string
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_SetValueString ()
- * XMLRPC_GetValueType ()
- * XMLRPC_VALUE
- * SOURCE
- */
-const char* XMLRPC_GetValueString(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_string) ? value->str.str : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueStringLen
- * NAME
- * XMLRPC_GetValueStringLen
- * SYNOPSIS
- * int XMLRPC_GetValueStringLen(XMLRPC_VALUE value)
- * FUNCTION
- * determine length of string value
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_string
- * RESULT
- * length of string, or 0
- * NOTES
- * SEE ALSO
- * XMLRPC_SetValueString ()
- * XMLRPC_GetValueString ()
- * SOURCE
- */
-int XMLRPC_GetValueStringLen(XMLRPC_VALUE value) {
- return ((value) ? value->str.len : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueInt
- * NAME
- * XMLRPC_GetValueInt
- * SYNOPSIS
- * int XMLRPC_GetValueInt(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve integer value.
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_int
- * RESULT
- * integer value or 0 if value is not valid int
- * NOTES
- * use XMLRPC_GetValueType () to be sure if 0 is real return value or not
- * SEE ALSO
- * XMLRPC_SetValueInt ()
- * XMLRPC_CreateValueInt ()
- * SOURCE
- */
-int XMLRPC_GetValueInt(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_int) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueBoolean
- * NAME
- * XMLRPC_GetValueBoolean
- * SYNOPSIS
- * int XMLRPC_GetValueBoolean(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve boolean value.
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_boolean
- * RESULT
- * boolean value or 0 if value is not valid boolean
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueBoolean ()
- * XMLRPC_CreateValueBoolean ()
- * SOURCE
- */
-int XMLRPC_GetValueBoolean(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_boolean) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDouble
- * NAME
- * XMLRPC_GetValueDouble
- * SYNOPSIS
- * double XMLRPC_GetValueDouble(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve double value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_double
- * RESULT
- * double value or 0 if value is not valid double.
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * SOURCE
- */
-double XMLRPC_GetValueDouble(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_double) ? value->d : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueBase64
- * NAME
- * XMLRPC_GetValueBase64
- * SYNOPSIS
- * const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve binary value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_base64
- * RESULT
- * pointer to binary value or 0 if value is not valid.
- * SEE ALSO
- * XMLRPC_SetValueBase64 ()
- * XMLRPC_CreateValueBase64 ()
- * NOTES
- * Call XMLRPC_GetValueStringLen() to retrieve real length of binary data. strlen()
- * will not be accurate, as returned data may contain embedded nulls.
- * SOURCE
- */
-const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_base64) ? value->str.str : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDateTime
- * NAME
- * XMLRPC_GetValueDateTime
- * SYNOPSIS
- * time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve time_t value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_datetime
- * RESULT
- * time_t value or 0 if value is not valid datetime.
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueDateTime ()
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * SOURCE
- */
-time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value) {
- return (time_t)((value && value->type == xmlrpc_datetime) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDateTime_IOS8601
- * NAME
- * XMLRPC_GetValueDateTime_IOS8601
- * SYNOPSIS
- * const char* XMLRPC_GetValueDateTime_IOS8601(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve ISO8601 formatted time value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_datetime
- * RESULT
- * const char* value or 0 if value is not valid datetime.
- * SEE ALSO
- * XMLRPC_SetValueDateTime_IOS8601 ()
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_CreateValueDateTime_IOS8601 ()
- * SOURCE
- */
-const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_datetime) ? value->str.str : 0);
-}
-
-/*******/
-
-/* Get ID (key) of value or NULL */
-/****f* VALUE/XMLRPC_GetValueID
- * NAME
- * XMLRPC_GetValueID
- * SYNOPSIS
- * const char* XMLRPC_GetValueID(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve id (key) of value
- * INPUTS
- * XMLRPC_VALUE of any type
- * RESULT
- * const char* pointer to id of value, or NULL
- * NOTES
- * SEE ALSO
- * XMLRPC_SetValueID()
- * XMLRPC_CreateValueEmpty()
- * SOURCE
- */
-const char* XMLRPC_GetValueID(XMLRPC_VALUE value) {
- return (const char*)((value && value->id.len) ? value->id.str : 0);
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_VectorSize
- * NAME
- * XMLRPC_VectorSize
- * SYNOPSIS
- * int XMLRPC_VectorSize(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve size of vector
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * count of items in vector
- * NOTES
- * This is a cheap operation even on large vectors. Vector size is
- * maintained by queue during add/remove ops.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * SOURCE
- */
-int XMLRPC_VectorSize(XMLRPC_VALUE value) {
- int size = 0;
- if(value && value->type == xmlrpc_vector && value->v) {
- size = Q_Size(value->v->q);
- }
- return size;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_VectorRewind
- * NAME
- * XMLRPC_VectorRewind
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value)
- * FUNCTION
- * reset vector to first item
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * first XMLRPC_VALUE in list, or NULL if empty or error.
- * NOTES
- * Be careful to rewind any vector passed in to you if you expect to
- * iterate through the entire list.
- * SEE ALSO
- * XMLRPC_VectorNext ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value) {
- XMLRPC_VALUE xReturn = NULL;
- if(value && value->type == xmlrpc_vector && value->v) {
- xReturn = (XMLRPC_VALUE)Q_Head(value->v->q);
- }
- return xReturn;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_VectorNext
- * NAME
- * XMLRPC_VectorNext
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value)
- * FUNCTION
- * Iterate vector to next item in list.
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * Next XMLRPC_VALUE in vector, or NULL if at end.
- * NOTES
- * SEE ALSO
- * XMLRPC_VectorRewind ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value) {
- XMLRPC_VALUE xReturn = NULL;
- if(value && value->type == xmlrpc_vector && value->v) {
- xReturn = (XMLRPC_VALUE)Q_Next(value->v->q);
- }
- return xReturn;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueType
- * NAME
- * XMLRPC_GetValueType
- * SYNOPSIS
- * XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE value)
- * FUNCTION
- * determine data type of the XMLRPC_VALUE
- * INPUTS
- * XMLRPC_VALUE target of query
- * RESULT
- * data type of value as enumerated by XMLRPC_VALUE_TYPE
- * NOTES
- * all values are of type xmlrpc_empty until set.
- * Deprecated for public use. See XMLRPC_GetValueTypeEasy
- * SEE ALSO
- * XMLRPC_SetValue*
- * XMLRPC_CreateValue*
- * XMLRPC_Append*
- * XMLRPC_GetValueTypeEasy ()
- * SOURCE
- */
-XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE value) {
- return value ? value->type : xmlrpc_empty;
-}
-
-/*******/
-
-/* Vector type accessor */
-/****f* VALUE/XMLRPC_GetVectorType
- * NAME
- * XMLRPC_GetVectorType
- * SYNOPSIS
- * XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE value)
- * FUNCTION
- * determine vector type of the XMLRPC_VALUE
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * vector type of value as enumerated by XMLRPC_VECTOR_TYPE.
- * xmlrpc_none if not a value.
- * NOTES
- * xmlrpc_none is returned if value is not a vector
- * Deprecated for public use. See XMLRPC_GetValueTypeEasy
- * SEE ALSO
- * XMLRPC_SetIsVector ()
- * XMLRPC_GetValueType ()
- * XMLRPC_GetValueTypeEasy ()
- * SOURCE
- */
-XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE value) {
- return(value && value->v) ? value->v->type : xmlrpc_none;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueTypeEasy
- * NAME
- * XMLRPC_GetValueTypeEasy
- * SYNOPSIS
- * XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE value)
- * FUNCTION
- * determine data type of the XMLRPC_VALUE. includes vector types.
- * INPUTS
- * XMLRPC_VALUE target of query
- * RESULT
- * data type of value as enumerated by XMLRPC_VALUE_TYPE_EASY
- * xmlrpc_type_none if not a value.
- * NOTES
- * all values are of type xmlrpc_type_empty until set.
- * SEE ALSO
- * XMLRPC_SetValue*
- * XMLRPC_CreateValue*
- * XMLRPC_Append*
- * SOURCE
- */
-XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy (XMLRPC_VALUE value) {
- if (value) {
- switch (value->type) {
- case xmlrpc_vector:
- switch (value->v->type) {
- case xmlrpc_vector_none:
- return xmlrpc_type_none;
- case xmlrpc_vector_struct:
- return xmlrpc_type_struct;
- case xmlrpc_vector_mixed:
- return xmlrpc_type_mixed;
- case xmlrpc_vector_array:
- return xmlrpc_type_array;
- }
- default:
- /* evil cast, but we know they are the same */
- return(XMLRPC_VALUE_TYPE_EASY) value->type;
- }
- }
- return xmlrpc_none;
-}
-
-/*******/
-
-
-
-/*-*******************
-* Begin Server Funcs *
-*********************/
-
-
-/****f* VALUE/XMLRPC_ServerCreate
- * NAME
- * XMLRPC_ServerCreate
- * SYNOPSIS
- * XMLRPC_SERVER XMLRPC_ServerCreate()
- * FUNCTION
- * Allocate/Init XMLRPC Server Resources.
- * INPUTS
- * none
- * RESULT
- * newly allocated XMLRPC_SERVER
- * NOTES
- * SEE ALSO
- * XMLRPC_ServerDestroy ()
- * XMLRPC_GetGlobalServer ()
- * SOURCE
- */
-XMLRPC_SERVER XMLRPC_ServerCreate() {
- XMLRPC_SERVER server = calloc(1, sizeof(STRUCT_XMLRPC_SERVER));
- if(server) {
- Q_Init(&server->methodlist);
- Q_Init(&server->docslist);
-
- /* register system methods */
- xsm_register(server);
- }
- return server;
-}
-
-/*******/
-
-/* Return global server. Not locking! Not Thread Safe! */
-/****f* VALUE/XMLRPC_GetGlobalServer
- * NAME
- * XMLRPC_GetGlobalServer
- * SYNOPSIS
- * XMLRPC_SERVER XMLRPC_GetGlobalServer()
- * FUNCTION
- * Allocates a global (process-wide) server, or returns pointer if pre-existing.
- * INPUTS
- * none
- * RESULT
- * pointer to global server, or 0 if error.
- * NOTES
- * ***WARNING*** This function is not thread safe. It is included only for the very lazy.
- * Multi-threaded programs that use this may experience problems.
- * BUGS
- * There is currently no way to cleanup the global server gracefully.
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * SOURCE
- */
-XMLRPC_SERVER XMLRPC_GetGlobalServer() {
- static XMLRPC_SERVER xsServer = 0;
- if(!xsServer) {
- xsServer = XMLRPC_ServerCreate();
- }
- return xsServer;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_ServerDestroy
- * NAME
- * XMLRPC_ServerDestroy
- * SYNOPSIS
- * void XMLRPC_ServerDestroy(XMLRPC_SERVER server)
- * FUNCTION
- * Free Server Resources
- * INPUTS
- * server The server to be free'd
- * RESULT
- * void
- * NOTES
- * This frees the server struct and any methods that have been added.
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * SOURCE
- */
-void XMLRPC_ServerDestroy(XMLRPC_SERVER server) {
- if(server) {
- doc_method* dm = Q_Head(&server->docslist);
- server_method* sm = Q_Head(&server->methodlist);
- while( dm ) {
- my_free(dm);
- dm = Q_Next(&server->docslist);
- }
- while( sm ) {
- if(sm->name) {
- my_free(sm->name);
- }
- if(sm->desc) {
- XMLRPC_CleanupValue(sm->desc);
- }
- my_free(sm);
- sm = Q_Next(&server->methodlist);
- }
- if(server->xIntrospection) {
- XMLRPC_CleanupValue(server->xIntrospection);
- }
-
- Q_Destroy(&server->methodlist);
- Q_Destroy(&server->docslist);
- my_free(server);
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_ServerRegisterMethod
- * NAME
- * XMLRPC_ServerRegisterMethod
- * SYNOPSIS
- * void XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb)
- * FUNCTION
- * Register new XMLRPC method with server
- * INPUTS
- * server The XMLRPC_SERVER to register the method with
- * name public name of the method
- * cb C function that implements the method
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * A C function must be registered for every "method" that the server recognizes. The
- * method name is equivalent to <methodCall><name> method name </name></methodCall> in the
- * XML syntax.
- * SEE ALSO
- * XMLRPC_ServerFindMethod ()
- * XMLRPC_ServerCallMethod ()
- * SOURCE
- */
-int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb) {
- if(server && name && cb) {
-
- server_method* sm = malloc(sizeof(server_method));
-
- if(sm) {
- sm->name = strdup(name);
- sm->method = cb;
- sm->desc = NULL;
-
- return Q_PushTail(&server->methodlist, sm);
- }
- }
- return 0;
-}
-
-/*******/
-
-inline server_method* find_method(XMLRPC_SERVER server, const char* name) {
- server_method* sm;
-
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
-
- while( qi ) {
- sm = Q_Iter_Get_F(qi);
- if(sm && !strcmp(sm->name, name)) {
- return sm;
- }
- qi = Q_Iter_Next_F(qi);
- }
- return NULL;
-}
-
-
-const char* type_to_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype) {
- switch(type) {
- case xmlrpc_none:
- return "none";
- case xmlrpc_empty:
- return "empty";
- case xmlrpc_base64:
- return "base64";
- case xmlrpc_boolean:
- return "boolean";
- case xmlrpc_datetime:
- return "datetime";
- case xmlrpc_double:
- return "double";
- case xmlrpc_int:
- return "int";
- case xmlrpc_string:
- return "string";
- case xmlrpc_vector:
- switch(vtype) {
- case xmlrpc_vector_none:
- return "none";
- case xmlrpc_vector_array:
- return "array";
- case xmlrpc_vector_mixed:
- return "mixed vector (struct)";
- case xmlrpc_vector_struct:
- return "struct";
- }
- }
-}
-
-/****f* VALUE/XMLRPC_ServerFindMethod
- * NAME
- * XMLRPC_ServerFindMethod
- * SYNOPSIS
- * XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName)
- * FUNCTION
- * retrieve C callback associated with a given method name.
- * INPUTS
- * server The XMLRPC_SERVER the method is registered with
- * callName the method to find
- * RESULT
- * previously registered XMLRPC_Callback, or NULL
- * NOTES
- * Typically, this is used to determine if a requested method exists, without actually calling it.
- * SEE ALSO
- * XMLRPC_ServerCallMethod ()
- * XMLRPC_ServerRegisterMethod ()
- * SOURCE
- */
-XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName) {
- if(server && callName) {
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm && !strcmp(sm->name, callName)) {
- return sm->method;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return NULL;
-}
-
-/*******/
-
-
-/* Call method specified in request */
-/****f* VALUE/XMLRPC_ServerCallMethod
- * NAME
- * XMLRPC_ServerCallMethod
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData)
- * FUNCTION
- *
- * INPUTS
- * server The XMLRPC_SERVER the method is registered with
- * request the request to handle
- * userData any additional data to pass to the C callback, or NULL
- * RESULT
- * XMLRPC_VALUE allocated by the callback, or NULL
- * NOTES
- * It is typically the caller's responsibility to free the returned value.
- *
- * Often the caller will want to serialize the result as XML, via
- * XMLRPC_VALUE_To_XML () or XMLRPC_REQUEST_To_XML ()
- * SEE ALSO
- * XMLRPC_ServerFindMethod ()
- * XMLRPC_ServerRegisterMethod ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData) {
- XMLRPC_VALUE xReturn = NULL;
-
- /* check for error set during request parsing / generation */
- if(request && request->error) {
- xReturn = XMLRPC_CopyValue(request->error);
- }
- else if (server && request) {
- XMLRPC_Callback cb =
- XMLRPC_ServerFindMethod (server, request->methodName.str);
- if(cb) {
- xReturn = cb(server, request, userData);
- }
- else {
- xReturn =
- XMLRPC_UtilityCreateFault (xmlrpc_error_unknown_method,
- request->methodName.str);
- }
- }
- return xReturn;
-}
-
-/*******/
-
-/*-*****************
-* End server funcs *
-*******************/
-
-
-/*-***********************************
-* Begin XMLRPC General Options funcs *
-*************************************/
-
-/* For options used by XMLRPC_VALUE funcs that otherwise do not have
- * parameters for options. Kind of gross. :(
- */
-typedef struct _xmlrpc_options {
- XMLRPC_CASE id_case;
- XMLRPC_CASE_COMPARISON id_case_compare;
-}
-STRUCT_XMLRPC_OPTIONS, *XMLRPC_OPTIONS;
-
-static XMLRPC_OPTIONS XMLRPC_GetDefaultOptions() {
- static STRUCT_XMLRPC_OPTIONS options = {
- xmlrpc_case_exact,
- xmlrpc_case_sensitive
- };
- return &options;
-}
-
-/****f* VALUE/XMLRPC_GetDefaultIdCase
- * NAME
- * XMLRPC_GetDefaultIdCase
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_GetDefaultIdCase()
- * FUNCTION
- * Gets default case options used by XMLRPC_VALUE funcs
- * INPUTS
- * none
- * RESULT
- * XMLRPC_CASE
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_SetDefaultIdCase ()
- * SOURCE
- */
-XMLRPC_CASE XMLRPC_GetDefaultIdCase() {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- return options->id_case;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetDefaultIdCase
- * NAME
- * XMLRPC_SetDefaultIdCase
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case)
- * FUNCTION
- * Sets default case options used by XMLRPC_VALUE funcs
- * INPUTS
- * id_case case options as enumerated by XMLRPC_CASE
- * RESULT
- * XMLRPC_CASE -- newly set option
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_GetDefaultIdCase ()
- * SOURCE
- */
-XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case) {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- options->id_case = id_case;
- return options->id_case;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetDefaultIdCaseComparison
- * NAME
- * XMLRPC_GetDefaultIdCaseComparison
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_GetDefaultIdCaseComparison( )
- * FUNCTION
- * Gets default case comparison options used by XMLRPC_VALUE funcs
- * INPUTS
- * none
- * RESULT
- * XMLRPC_CASE_COMPARISON default
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_SetDefaultIdCaseComparison ()
- * SOURCE
- */
-XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison() {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- return options->id_case_compare;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetDefaultIdCaseComparison
- * NAME
- * XMLRPC_SetDefaultIdCaseComparison
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_SetDefaultIdCaseComparison( XMLRPC_CASE_COMPARISON id_case_compare )
- * FUNCTION
- * Gets default case comparison options used by XMLRPC_VALUE funcs
- * INPUTS
- * id_case_compare case comparison rule to set as default
- * RESULT
- * XMLRPC_CASE_COMPARISON newly set default
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_GetDefaultIdCaseComparison ()
- * SOURCE
- */
-XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case_compare) {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- options->id_case_compare = id_case_compare;
- return options->id_case_compare;
-}
-
-/*******/
-
-/*-*********************************
-* End XMLRPC General Options funcs *
-***********************************/
-
-
-/*-******************
-* Utility API funcs *
-********************/
-
-/****f* UTILITY/XMLRPC_UtilityCreateFault
- * NAME
- * XMLRPC_UtilityCreateFault
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_UtilityCreateFault( int fault_code, const char* fault_string )
- * FUNCTION
- * generates a struct containing a string member with id "faultString" and an int member
- * with id "faultCode". When using the xmlrpc xml serialization, these will be translated
- * to <fault><value><struct>... format.
- * INPUTS
- * fault_code application specific error code. can be 0.
- * fault_string application specific error string. cannot be null.
- * RESULT
- * XMLRPC_VALUE a newly created struct vector representing the error, or null on error.
- * NOTES
- * This is a utility function. xmlrpc "faults" are not directly represented in this xmlrpc
- * API or data structures. It is the author's view, that this API is intended for simple
- * data types, and a "fault" is a complex data type consisting of multiple simple data
- * types. This function is provided for convenience only, the same result could be
- * achieved directly by the application.
- *
- * This function now supports some "standardized" fault codes, as specified at.
- * http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php.
- * If one of these fault codes is received, the description string will automatically
- * be prefixed with a standard error string and 2 newlines.
- *
- * The actual transformation between this complex type and the xml "<fault>" element takes
- * place in the xmlrpc to xml serialization layer. This step is not performed when using the
- * simplerpc serialization, meaning that there will be no "<fault>" element in that
- * serialization. There will simply be a standard struct with 2 child elements.
- * imho, the "<fault>" element is unnecessary and/or out of place as part of the standard API.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string) {
- XMLRPC_VALUE xOutput = NULL;
-
- char* string = NULL;
- simplestring description;
- simplestring_init(&description);
-
- switch (fault_code) {
- case xmlrpc_error_parse_xml_syntax:
- string = xmlrpc_error_parse_xml_syntax_str;
- break;
- case xmlrpc_error_parse_unknown_encoding:
- string = xmlrpc_error_parse_unknown_encoding_str;
- break;
- case xmlrpc_error_parse_bad_encoding:
- string = xmlrpc_error_parse_bad_encoding_str;
- break;
- case xmlrpc_error_invalid_xmlrpc:
- string = xmlrpc_error_invalid_xmlrpc_str;
- break;
- case xmlrpc_error_unknown_method:
- string = xmlrpc_error_unknown_method_str;
- break;
- case xmlrpc_error_invalid_params:
- string = xmlrpc_error_invalid_params_str;
- break;
- case xmlrpc_error_internal_server:
- string = xmlrpc_error_internal_server_str;
- break;
- case xmlrpc_error_application:
- string = xmlrpc_error_application_str;
- break;
- case xmlrpc_error_system:
- string = xmlrpc_error_system_str;
- break;
- case xmlrpc_error_transport:
- string = xmlrpc_error_transport_str;
- break;
- }
-
- simplestring_add(&description, string);
-
- if(string && fault_string) {
- simplestring_add(&description, "\n\n");
- }
- simplestring_add(&description, fault_string);
-
-
- if(description.len) {
- xOutput = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
-
- XMLRPC_VectorAppendString (xOutput, "faultString", description.str,
- description.len);
- XMLRPC_VectorAppendInt(xOutput, "faultCode", fault_code);
- }
-
- simplestring_free(&description);
-
- return xOutput;
-}
-
-/*******/
-
-
-/****f* UTILITY/XMLRPC_Free
- * NAME
- * XMLRPC_Free
- * SYNOPSIS
- * void XMLRPC_Free(void* mem)
- * FUNCTION
- * frees a block of memory allocated by xmlrpc.
- * INPUTS
- * mem memory to free
- * RESULT
- * void
- * NOTES
- * Useful for OS's where memory must be free'd
- * in the same library in which it is allocated.
- * SOURCE
- */
-void XMLRPC_Free(void* mem) {
- my_free(mem);
-}
-
-/*******/
-
-
-/****f* UTILITY/XMLRPC_GetVersionString
- * NAME
- * XMLRPC_GetVersionString
- * SYNOPSIS
- * const char* XMLRPC_GetVersionString()
- * FUNCTION
- * returns library version string
- * INPUTS
- *
- * RESULT
- * const char*
- * NOTES
- * SOURCE
- */
-const char* XMLRPC_GetVersionString() {
- return XMLRPC_VERSION_STR;
-}
-
-/*******/
-
-
-/*-**********************
-* End Utility API funcs *
-************************/
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.h b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.h
deleted file mode 100644
index bcfa46fadc..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef XMLRPC_ALREADY_INCLUDED
-#define XMLRPC_ALREADY_INCLUDED 1
-
-/* includes */
-#include "xml_element.h"
-#include <time.h> /* for time_t */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* allow version to be specified via compile line define */
-#ifndef XMLRPC_LIB_VERSION
- #define XMLRPC_LIB_VERSION "0.50"
-#endif
-
-/* this number, representing the date, must be increased each time the API changes */
-#define XMLRPC_API_NO 20010721
-
-/* this string should be changed with each packaged release */
-#define XMLRPC_VERSION_STR "xmlrpc-epi v. " XMLRPC_LIB_VERSION
-
-/* where to find more info. shouldn't need to change much */
-#define XMLRPC_HOME_PAGE_STR "http://xmlprc-epi.sourceforge.net/"
-
-
-/****d* VALUE/XMLRPC_VALUE_TYPE
- * NAME
- * XMLRPC_VALUE_TYPE
- * NOTES
- * Defines data types for XMLRPC_VALUE
- * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
- * SEE ALSO
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VALUE_TYPE {
- xmlrpc_none, /* not a value */
- xmlrpc_empty, /* empty value, eg NULL */
- xmlrpc_base64, /* base64 value, eg binary data */
- xmlrpc_boolean, /* boolean [0 | 1] */
- xmlrpc_datetime, /* datetime [ISO8601 | time_t] */
- xmlrpc_double, /* double / floating point */
- xmlrpc_int, /* integer */
- xmlrpc_string, /* string */
- xmlrpc_vector /* vector, aka list, array */
-} XMLRPC_VALUE_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_VECTOR_TYPE
- * NAME
- * XMLRPC_VECTOR_TYPE
- * NOTES
- * Defines data types for XMLRPC_VECTOR.
- * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
- * SEE ALSO
- * XMLRPC_VALUE_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VECTOR_TYPE {
- xmlrpc_vector_none, /* not an array */
- xmlrpc_vector_array, /* no values may have key names */
- xmlrpc_vector_mixed, /* some values may have key names */
- xmlrpc_vector_struct /* all values must have key names */
-} XMLRPC_VECTOR_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_VALUE_TYPE_EASY
- * NAME
- * XMLRPC_VALUE_TYPE_EASY
- * NOTES
- * Defines data types for XMLRPC_VALUE, including vector types.
- * SEE ALSO
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VALUE_TYPE_EASY {
- xmlrpc_type_none, /* not a value */
- xmlrpc_type_empty, /* empty value, eg NULL */
- xmlrpc_type_base64, /* base64 value, eg binary data */
- xmlrpc_type_boolean, /* boolean [0 | 1] */
- xmlrpc_type_datetime, /* datetime [ISO8601 | time_t] */
- xmlrpc_type_double, /* double / floating point */
- xmlrpc_type_int, /* integer */
- xmlrpc_type_string, /* string */
-/* -- IMPORTANT: identical to XMLRPC_VALUE_TYPE to this point. -- */
- xmlrpc_type_array, /* vector array */
- xmlrpc_type_mixed, /* vector mixed */
- xmlrpc_type_struct /* vector struct */
-} XMLRPC_VALUE_TYPE_EASY;
-/*******/
-
-
-/****d* VALUE/XMLRPC_REQUEST_TYPE
- * NAME
- * XMLRPC_REQUEST_TYPE
- * NOTES
- * Defines data types for XMLRPC_REQUEST
- * SEE ALSO
- * XMLRPC_VALUE_TYPE
- * XMLRPC_VECTOR_TYPE
- * SOURCE
- */
-typedef enum _xmlrpc_request_type {
- xmlrpc_request_none, /* not a valid request */
- xmlrpc_request_call, /* calling/invoking a method */
- xmlrpc_request_response, /* responding to a method call */
-} XMLRPC_REQUEST_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_ERROR_CODE
- * NAME
- * XMLRPC_ERROR_CODE
- * NOTES
- * All existing error codes
- * SEE ALSO
- * XMLRPC_REQUEST_ERROR
- * SOURCE
- */
-typedef enum _xmlrpc_error_code {
- xmlrpc_error_none = 0, /* not an error */
- xmlrpc_error_parse_xml_syntax = -32700,
- xmlrpc_error_parse_unknown_encoding = -32701,
- xmlrpc_error_parse_bad_encoding = -32702,
- xmlrpc_error_invalid_xmlrpc = -32600,
- xmlrpc_error_unknown_method = -32601,
- xmlrpc_error_invalid_params = -32602,
- xmlrpc_error_internal_server = -32603,
- xmlrpc_error_application = -32500,
- xmlrpc_error_system = -32400,
- xmlrpc_error_transport = -32300
-} XMLRPC_ERROR_CODE;
-/******/
-
-#define xmlrpc_error_parse_xml_syntax_str "parse error. not well formed."
-#define xmlrpc_error_parse_unknown_encoding_str "parse error. unknown encoding"
-#define xmlrpc_error_parse_bad_encoding_str "parse error. invalid character for encoding"
-#define xmlrpc_error_invalid_xmlrpc_str "server error. xml-rpc not conforming to spec"
-#define xmlrpc_error_unknown_method_str "server error. method not found."
-#define xmlrpc_error_invalid_params_str "server error. invalid method parameters"
-#define xmlrpc_error_internal_server_str "server error. internal xmlrpc library error"
-#define xmlrpc_error_application_str "application error."
-#define xmlrpc_error_system_str "system error."
-#define xmlrpc_error_transport_str "transport error."
-
-
-
-/****d* VALUE/XMLRPC_VERSION
- * NAME
- * XMLRPC_VERSION
- * NOTES
- * Defines xml vocabulary used for generated xml
- * SEE ALSO
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * XMLRPC_REQUEST_To_XML ()
- * SOURCE
- */
-typedef enum _xmlrpc_version {
- xmlrpc_version_none, /* not a recognized vocabulary */
- xmlrpc_version_1_0, /* xmlrpc 1.0 standard vocab */
- xmlrpc_version_simple = 2, /* alt more readable vocab */
- xmlrpc_version_danda = 2, /* same as simple. legacy */
- xmlrpc_version_soap_1_1 = 3 /* SOAP. version 1.1 */
-} XMLRPC_VERSION;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST_OUTPUT_OPTIONS
- * NAME
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * NOTES
- * Defines output options for generated xml
- * SEE ALSO
- * XMLRPC_VERSION
- * XML_ELEM_OUTPUT_OPTIONS
- * XMLRPC_REQUEST_To_XML ()
- * SOURCE
- */
-typedef struct _xmlrpc_request_output_options {
- STRUCT_XML_ELEM_OUTPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
- XMLRPC_VERSION version; /* xml vocabulary to use */
-} STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS, *XMLRPC_REQUEST_OUTPUT_OPTIONS;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST_INPUT_OPTIONS
- * NAME
- * XMLRPC_REQUEST_INPUT_OPTIONS
- * NOTES
- * Defines options for reading in xml data
- * SEE ALSO
- * XMLRPC_VERSION
- * XML_ELEM_INPUT_OPTIONS
- * XMLRPC_REQUEST_From_XML ()
- * SOURCE
- */
-typedef struct _xmlrpc_request_input_options {
- STRUCT_XML_ELEM_INPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
-} STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS, *XMLRPC_REQUEST_INPUT_OPTIONS;
-/******/
-
-/****s* VALUE/XMLRPC_ERROR
- * NAME
- * XMLRPC_ERROR
- * NOTES
- * For the reporting and handling of errors
- * SOURCE
- */
-typedef struct _xmlrpc_error {
- XMLRPC_ERROR_CODE code;
- STRUCT_XML_ELEM_ERROR xml_elem_error; /* xml_element errors (parser errors) */
-} STRUCT_XMLRPC_ERROR, *XMLRPC_ERROR;
-/******/
-
-
-/****d* VALUE/XMLRPC_CASE_COMPARISON
- * NAME
- * XMLRPC_CASE_COMPARISON
- * NOTES
- * Defines case comparison options for XMLRPC_VALUE/VECTOR API's
- * SEE ALSO
- * XMLRPC_CASE
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef enum _xmlrpc_case_comparison {
- xmlrpc_case_insensitive, /* use case-insensitive compare */
- xmlrpc_case_sensitive /* use case-sensitive compare */
-} XMLRPC_CASE_COMPARISON;
-/******/
-
-/****d* VALUE/XMLRPC_CASE
- * NAME
- * XMLRPC_CASE
- * NOTES
- * Defines case behavior when setting IDs in XMLRPC_VALUE API's
- * SEE ALSO
- * XMLRPC_CASE_COMPARISON
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef enum _xmlrpc_case {
- xmlrpc_case_exact, /* leave case alone */
- xmlrpc_case_lower, /* lower-case id */
- xmlrpc_case_upper /* upper-case id */
-} XMLRPC_CASE;
-/******/
-
-/* if you don't like these defaults, you can set them with XMLRPC_SetDefaultIdCase*() */
-#define XMLRPC_DEFAULT_ID_CASE XMLRPC_GetDefaultIdCase()
-#define XMLRPC_DEFAULT_ID_CASE_SENSITIVITY XMLRPC_GetDefaultIdCaseComparison()
-
-/* opaque (non-public) types. defined locally in xmlrpc.c */
-typedef struct _xmlrpc_request* XMLRPC_REQUEST;
-typedef struct _xmlrpc_server* XMLRPC_SERVER;
-typedef struct _xmlrpc_value* XMLRPC_VALUE;
-
-/****d* VALUE/XMLRPC_Callback
- * NAME
- * XMLRPC_Callback
- * NOTES
- * Function prototype for user defined method handlers (callbacks).
- * SEE ALSO
- * XMLRPC_ServerRegisterMethod ()
- * XMLRPC_ServerCallMethod ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef XMLRPC_VALUE (*XMLRPC_Callback)(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-/******/
-
-/* ID Case Defaults */
-XMLRPC_CASE XMLRPC_GetDefaultIdCase(void);
-XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case);
-XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison(void);
-XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case);
-
-/* Vector manipulation */
-int XMLRPC_VectorSize(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value);
-int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type);
-int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source);
-int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...);
-int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case);
-
-
-/* Create values */
-XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int truth);
-XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len);
-XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time);
-XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s);
-XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double f);
-XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i);
-XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* s, int len);
-XMLRPC_VALUE XMLRPC_CreateValueEmpty(void);
-XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type);
-
-/* Cleanup values */
-void XMLRPC_CleanupValue(XMLRPC_VALUE value);
-
-/* Copy values */
-XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE xSource);
-
-/* Set Values */
-void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time);
-void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s);
-void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val);
-void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val);
-void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val);
-const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* s, int len);
-void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len);
-const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case);
-#define XMLRPC_SetValueID(value, id, len) XMLRPC_SetValueID_Case(value, id, len, XMLRPC_DEFAULT_ID_CASE)
-
-/* Get Values */
-const char* XMLRPC_GetValueString(XMLRPC_VALUE value);
-int XMLRPC_GetValueStringLen(XMLRPC_VALUE value);
-int XMLRPC_GetValueInt(XMLRPC_VALUE value);
-int XMLRPC_GetValueBoolean(XMLRPC_VALUE value);
-double XMLRPC_GetValueDouble(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value);
-time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueID(XMLRPC_VALUE value);
-
-/* Type introspection */
-XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE v);
-XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE v);
-XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE v);
-
-/* Parsing and Creating XML */
-XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
-XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
-char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int *buf_len);
-char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len);
-
-/* Request manipulation funcs */
-const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName);
-const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request);
-XMLRPC_REQUEST XMLRPC_RequestNew(void);
-void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO);
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output);
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request);
-XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data);
-XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request);
-XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type);
-XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request);
-
-/* Server Creation/Destruction; Method Registration and Invocation */
-XMLRPC_SERVER XMLRPC_ServerCreate(void);
-XMLRPC_SERVER XMLRPC_GetGlobalServer(void); /* better to use XMLRPC_ServerCreate if you can */
-void XMLRPC_ServerDestroy(XMLRPC_SERVER server);
-int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb);
-XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName);
-XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData);
-
-#include "xmlrpc_introspection.h"
-
-/* Public Utility funcs */
-XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string);
-void XMLRPC_Free(void* mem);
-const char* XMLRPC_GetVersionString(void);
-
-/****d* VALUE/XMLRPC_MACROS
- * NAME
- * Some Helpful Macros
- * NOTES
- * Some macros for making life easier. Should be self-explanatory.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * SOURCE
- */
-
-/* Append values to vector */
-#define XMLRPC_VectorAppendString(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueString(id, s, len))
-#define XMLRPC_VectorAppendBase64(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBase64(id, s, len))
-#define XMLRPC_VectorAppendDateTime(vector, id, time) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime(id, time))
-#define XMLRPC_VectorAppendDateTime_ISO8601(vector, id, s) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime_ISO8601(id, s))
-#define XMLRPC_VectorAppendDouble(vector, id, f) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDouble(id, f))
-#define XMLRPC_VectorAppendInt(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueInt(id, i))
-#define XMLRPC_VectorAppendBoolean(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBoolean(id, i))
-
-/* Get named values from vector */
-#define XMLRPC_VectorGetValueWithID(vector, id) XMLRPC_VectorGetValueWithID_Case(vector, id, XMLRPC_DEFAULT_ID_CASE_SENSITIVITY)
-#define XMLRPC_VectorGetStringWithID(vector, id) XMLRPC_GetValueString(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetBase64WithID(vector, id) XMLRPC_GetValueBase64(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetDateTimeWithID(vector, id) XMLRPC_GetValueDateTime(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetDoubleWithID(vector, id) XMLRPC_GetValueDouble(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetIntWithID(vector, id) XMLRPC_GetValueInt(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetBooleanWithID(vector, id) XMLRPC_GetValueBoolean(XMLRPC_VectorGetValueWithID(vector, id))
-
-/******/
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XMLRPC_ALREADY_INCLUDED */
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.m4 b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.m4
deleted file mode 100644
index e89c245f02..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-AC_DEFUN(XMLRPC_CHECKS,[
-
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AC_PROG_LN_S])
-AC_REQUIRE([AC_PROG_RANLIB])
-
-AC_DEFINE(UNDEF_THREADS_HACK,,[ ])
-
-XMLRPC_HEADER_CHECKS
-XMLRPC_TYPE_CHECKS
-XMLRPC_FUNCTION_CHECKS
-])
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.c b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.c
deleted file mode 100644
index d9251b2709..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-/****h* ABOUT/xmlrpc_introspection
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * HISTORY
- * 4/10/2001 -- danda -- initial introspection support
- * TODO
- * NOTES
- *******/
-
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include "queue.h"
-#include "xmlrpc.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-/* forward declarations for static (non public, non api) funcs */
-static XMLRPC_VALUE xi_system_describe_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_list_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_method_signature_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_method_help_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-
-
-/*-**********************************
-* Introspection Callbacks (methods) *
-************************************/
-
-/* iterates through a list of structs and finds the one with key "name" matching
- * needle. slow, would benefit from a struct key hash.
- */
-inline XMLRPC_VALUE find_named_value(XMLRPC_VALUE list, const char* needle) {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(list);
- while(xIter) {
- const char* name = XMLRPC_VectorGetStringWithID(xIter, xi_token_name);
- if(name && !strcmp(name, needle)) {
- return xIter;
- }
- xIter = XMLRPC_VectorNext(list);
- }
- return NULL;
-}
-
-
-/* iterates through docs callbacks and calls any that have not yet been called */
-static void check_docs_loaded(XMLRPC_SERVER server, void* userData) {
- if(server) {
- q_iter qi = Q_Iter_Head_F(&server->docslist);
- while( qi ) {
- doc_method* dm = Q_Iter_Get_F(qi);
- if(dm && !dm->b_called) {
- dm->method(server, userData);
- dm->b_called = 1;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
-}
-
-
-/* utility function for xi_system_describe_methods_cb */
-inline void describe_method(XMLRPC_SERVER server, XMLRPC_VALUE vector, const char* method) {
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm) {
- XMLRPC_AddValueToVector(vector, sm->desc);
- }
- }
-}
-
-
-
-/* system.describeMethods() callback */
-static XMLRPC_VALUE xi_system_describe_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xParams = XMLRPC_VectorRewind(XMLRPC_RequestGetData(input));
- XMLRPC_VALUE xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- XMLRPC_VALUE xMethodList = XMLRPC_CreateVector("methodList", xmlrpc_vector_array);
- XMLRPC_VALUE xTypeList = NULL;
- int bAll = 1;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- xTypeList = XMLRPC_VectorGetValueWithID(server->xIntrospection, "typeList");
-
- XMLRPC_AddValueToVector(xResponse, xTypeList);
- XMLRPC_AddValueToVector(xResponse, xMethodList);
-
- /* check if we have any param */
- if(xParams) {
- /* check if string or vector (1 or n) */
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(xParams);
- if(type == xmlrpc_string) {
- /* just one. spit it out. */
- describe_method(server, xMethodList, XMLRPC_GetValueString(xParams));
- bAll = 0;
- }
- else if(type == xmlrpc_vector) {
- /* multiple. spit all out */
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(xParams);
- while(xIter) {
- describe_method(server, xMethodList, XMLRPC_GetValueString(xIter));
- xIter = XMLRPC_VectorNext(xParams);
- }
- bAll = 0;
- }
- }
-
- /* otherwise, default to sending all methods */
- if(bAll) {
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm) {
- XMLRPC_AddValueToVector(xMethodList, sm->desc);
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
-
- return xResponse;
-}
-
-/* this complies with system.listMethods as defined at http://xmlrpc.usefulinc.com/doc/reserved.html */
-static XMLRPC_VALUE xi_system_list_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
-
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm) {
- XMLRPC_VectorAppendString(xResponse, 0, sm->name, 0);
- }
- qi = Q_Iter_Next_F(qi);
- }
- return xResponse;
-}
-
-/* this complies with system.methodSignature as defined at
- * http://xmlrpc.usefulinc.com/doc/sysmethodsig.html
- */
-static XMLRPC_VALUE xi_system_method_signature_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- const char* method = XMLRPC_GetValueString(XMLRPC_VectorRewind(XMLRPC_RequestGetData(input)));
- XMLRPC_VALUE xResponse = NULL;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm && sm->desc) {
- XMLRPC_VALUE xTypesArray = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
- XMLRPC_VALUE xIter, xParams, xSig, xSigIter;
- const char* type;
-
- /* array of possible signatures. */
- xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
-
- /* find first signature */
- xSig = XMLRPC_VectorGetValueWithID(sm->desc, xi_token_signatures);
- xSigIter = XMLRPC_VectorRewind( xSig );
-
- /* iterate through sigs */
- while(xSigIter) {
- /* first type is the return value */
- type = XMLRPC_VectorGetStringWithID(XMLRPC_VectorRewind(
- XMLRPC_VectorGetValueWithID(xSigIter, xi_token_returns)),
- xi_token_type);
- XMLRPC_AddValueToVector(xTypesArray,
- XMLRPC_CreateValueString(NULL,
- type ? type : type_to_str(xmlrpc_none, 0),
- 0));
-
- /* the rest are parameters */
- xParams = XMLRPC_VectorGetValueWithID(xSigIter, xi_token_params);
- xIter = XMLRPC_VectorRewind(xParams);
-
- /* iter through params, adding to types array */
- while(xIter) {
- XMLRPC_AddValueToVector(xTypesArray,
- XMLRPC_CreateValueString(NULL,
- XMLRPC_VectorGetStringWithID(xIter, xi_token_type),
- 0));
- xIter = XMLRPC_VectorNext(xParams);
- }
-
- /* add types for this signature */
- XMLRPC_AddValueToVector(xResponse, xTypesArray);
-
- xSigIter = XMLRPC_VectorNext( xSig );
- }
- }
- }
-
- return xResponse;
-}
-
-/* this complies with system.methodHelp as defined at
- * http://xmlrpc.usefulinc.com/doc/sysmethhelp.html
- */
-static XMLRPC_VALUE xi_system_method_help_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- const char* method = XMLRPC_GetValueString(XMLRPC_VectorRewind(XMLRPC_RequestGetData(input)));
- XMLRPC_VALUE xResponse = NULL;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm && sm->desc) {
- const char* help = XMLRPC_VectorGetStringWithID(sm->desc, xi_token_purpose);
-
- /* returns a documentation string, or empty string */
- xResponse = XMLRPC_CreateValueString(NULL, help ? help : xi_token_empty, 0);
- }
- }
-
- return xResponse;
-}
-
-/*-**************************************
-* End Introspection Callbacks (methods) *
-****************************************/
-
-
-/*-************************
-* Introspection Utilities *
-**************************/
-
-/* performs registration of introspection methods */
-void xi_register_system_methods(XMLRPC_SERVER server) {
- XMLRPC_ServerRegisterMethod(server, xi_token_system_list_methods, xi_system_list_methods_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_method_help, xi_system_method_help_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_method_signature, xi_system_method_signature_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_describe_methods, xi_system_describe_methods_cb);
-}
-
-/* describe a value (param, return, type) */
-static XMLRPC_VALUE describeValue_worker(const char* type, const char* id, const char* desc, int optional, const char* default_val, XMLRPC_VALUE sub_params) {
- XMLRPC_VALUE xParam = NULL;
- if(id || desc) {
- xParam = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- XMLRPC_VectorAppendString(xParam, xi_token_name, id, 0);
- XMLRPC_VectorAppendString(xParam, xi_token_type, type, 0);
- XMLRPC_VectorAppendString(xParam, xi_token_description, desc, 0);
- if(optional != 2) {
- XMLRPC_VectorAppendInt(xParam, xi_token_optional, optional);
- }
- if(optional == 1 && default_val) {
- XMLRPC_VectorAppendString(xParam, xi_token_default, default_val, 0);
- }
- XMLRPC_AddValueToVector(xParam, sub_params);
- }
- return xParam;
-}
-
-
-/* convert an xml tree conforming to spec <url tbd> to XMLRPC_VALUE
- * suitable for use with XMLRPC_ServerAddIntrospectionData
- */
-XMLRPC_VALUE xml_element_to_method_description(xml_element* el, XMLRPC_ERROR err) {
- XMLRPC_VALUE xReturn = NULL;
-
- if(el->name) {
- const char* name = NULL;
- const char* type = NULL;
- const char* basetype = NULL;
- const char* desc = NULL;
- const char* def = NULL;
- int optional = 0;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
-
- /* grab element attributes up front to save redundant while loops */
- while(attr_iter) {
- if(!strcmp(attr_iter->key, "name")) {
- name = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "type")) {
- type = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "basetype")) {
- basetype = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "desc")) {
- desc = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "optional")) {
- if(attr_iter->val && !strcmp(attr_iter->val, "yes")) {
- optional = 1;
- }
- }
- else if(!strcmp(attr_iter->key, "default")) {
- def = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- /* value and typeDescription behave about the same */
- if(!strcmp(el->name, "value") || !strcmp(el->name, "typeDescription")) {
- XMLRPC_VALUE xSubList = NULL;
- const char* ptype = !strcmp(el->name, "value") ? type : basetype;
- if(ptype) {
- if(Q_Size(&el->children) &&
- !strcmp(ptype, "array") || !strcmp(ptype, "struct") || !strcmp(ptype, "mixed")) {
- xSubList = XMLRPC_CreateVector("member", xmlrpc_vector_array);
-
- if(xSubList) {
- xml_element* elem_iter = Q_Head(&el->children);
- while(elem_iter) {
- XMLRPC_AddValueToVector(xSubList,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
- }
- xReturn = describeValue_worker(ptype, name, (desc ? desc : (xSubList ? NULL : el->text.str)), optional, def, xSubList);
- }
- }
-
- /* these three kids are about equivalent */
- else if(!strcmp(el->name, "params") ||
- !strcmp(el->name, "returns") ||
- !strcmp(el->name, "signature")) {
- if(Q_Size(&el->children)) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(!strcmp(el->name, "signature") ? NULL : el->name, xmlrpc_vector_struct);
-
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
- }
-
-
- else if(!strcmp(el->name, "methodDescription")) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
-
- XMLRPC_VectorAppendString(xReturn, xi_token_name, name, 0);
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
-
- /* items are slightly special */
- else if(!strcmp(el->name, "item")) {
- xReturn = XMLRPC_CreateValueString(name, el->text.str, el->text.len);
- }
-
- /* sure. we'll let any ol element with children through */
- else if(Q_Size(&el->children)) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(el->name, xmlrpc_vector_mixed);
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
-
- /* or anything at all really, so long as its got some text.
- * no reason being all snotty about a spec, right?
- */
- else if(el->name && el->text.len) {
- xReturn = XMLRPC_CreateValueString(el->name, el->text.str, el->text.len);
- }
- }
-
- return xReturn;
-}
-
-/*-****************************
-* End Introspection Utilities *
-******************************/
-
-
-
-/*-******************
-* Introspection API *
-********************/
-
-
-/****f* VALUE/XMLRPC_IntrospectionCreateDescription
- * NAME
- * XMLRPC_IntrospectionCreateDescription
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR err)
- * FUNCTION
- * converts raw xml describing types and methods into an
- * XMLRPC_VALUE suitable for use with XMLRPC_ServerAddIntrospectionData()
- * INPUTS
- * xml - xml data conforming to introspection spec at <url tbd>
- * err - optional pointer to error struct. filled in if error occurs and not NULL.
- * RESULT
- * XMLRPC_VALUE - newly created value, or NULL if fatal error.
- * BUGS
- * Currently does little or no validation of xml.
- * Only parse errors are currently reported in err, not structural errors.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR err) {
- XMLRPC_VALUE xReturn = NULL;
- xml_element* root = xml_elem_parse_buf(xml, 0, 0, err ? &err->xml_elem_error : NULL);
-
- if(root) {
- xReturn = xml_element_to_method_description(root, err);
-
- xml_elem_free(root);
- }
-
- return xReturn;
-
-}
-/*******/
-
-
-/****f* SERVER/XMLRPC_ServerAddIntrospectionData
- * NAME
- * XMLRPC_ServerAddIntrospectionData
- * SYNOPSIS
- * int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc)
- * FUNCTION
- * updates server with additional introspection data
- * INPUTS
- * server - target server
- * desc - introspection data, should be a struct generated by
- * XMLRPC_IntrospectionCreateDescription ()
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * - function will fail if neither typeList nor methodList key is present in struct.
- * - if method or type already exists, it will be replaced.
- * - desc is never freed by the server. caller is responsible for cleanup.
- * BUGS
- * - horribly slow lookups. prime candidate for hash improvements.
- * - uglier and more complex than I like to see for API functions.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * XMLRPC_ServerRegisterIntrospectionCallback ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc) {
- int bSuccess = 0;
- if(server && desc) {
- XMLRPC_VALUE xNewTypes = XMLRPC_VectorGetValueWithID(desc, "typeList");
- XMLRPC_VALUE xNewMethods = XMLRPC_VectorGetValueWithID(desc, "methodList");
- XMLRPC_VALUE xServerTypes = XMLRPC_VectorGetValueWithID(server->xIntrospection, "typeList");
-
- if(xNewMethods) {
- XMLRPC_VALUE xMethod = XMLRPC_VectorRewind(xNewMethods);
-
- while(xMethod) {
- const char* name = XMLRPC_VectorGetStringWithID(xMethod, xi_token_name);
- server_method* sm = find_method(server, name);
-
- if(sm) {
- if(sm->desc) {
- XMLRPC_CleanupValue(sm->desc);
- }
- sm->desc = XMLRPC_CopyValue(xMethod);
- bSuccess = 1;
- }
-
- xMethod = XMLRPC_VectorNext(xNewMethods);
- }
- }
- if(xNewTypes) {
- if(!xServerTypes) {
- if(!server->xIntrospection) {
- server->xIntrospection = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- }
-
- XMLRPC_AddValueToVector(server->xIntrospection, xNewTypes);
- bSuccess = 1;
- }
- else {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(xNewTypes);
- while(xIter) {
- /* get rid of old values */
- XMLRPC_VALUE xPrev = find_named_value(xServerTypes, XMLRPC_VectorGetStringWithID(xIter, xi_token_name));
- if(xPrev) {
- XMLRPC_VectorRemoveValue(xServerTypes, xPrev);
- }
- XMLRPC_AddValueToVector(xServerTypes, xIter);
- bSuccess = 1;
- xIter = XMLRPC_VectorNext(xNewTypes);
- }
- }
- }
- }
- return bSuccess;
-}
-/*******/
-
-
-/****f* SERVER/XMLRPC_ServerRegisterIntrospectionCallback
- * NAME
- * XMLRPC_ServerRegisterIntrospectionCallback
- * SYNOPSIS
- * int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb)
- * FUNCTION
- * registers a callback for lazy generation of introspection data
- * INPUTS
- * server - target server
- * cb - callback that will generate introspection data
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * parsing xml and generating introspection data is fairly expensive, thus a
- * server may wish to wait until this data is actually requested before generating
- * it. Any number of callbacks may be registered at any time. A given callback
- * will only ever be called once, the first time an introspection request is
- * processed after the time of callback registration.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * XMLRPC_IntrospectionCreateDescription ()
- * SOURCE
- */
-int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb) {
- int bSuccess = 0;
- if(server && cb) {
-
- doc_method* dm = calloc(1, sizeof(doc_method));
-
- if(dm) {
- dm->method = cb;
- dm->b_called = 0;
-
- if(Q_PushTail(&server->docslist, dm)) {
- bSuccess = 1;
- }
- else {
- my_free(dm);
- }
- }
- }
- return 0;
-}
-/*******/
-
-/*-**********************
-* End Introspection API *
-************************/
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.h b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.h
deleted file mode 100644
index 656e441b96..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only public (official API) things should be in this file. Anything else
- * should go in <group>_private.h, or in the appropriate .c file.
- */
-
-
-#ifndef __XI_INTROSPECTION_H
-/*
- * Avoid include redundancy.
- */
-#define __XI_INTROSPECTION_H
-
-/*----------------------------------------------------------------------------
- * xmlrpc_introspection.h
- *
- * Purpose:
- * define public introspection API
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
- #define xi_token_params "params"
- #define xi_token_returns "returns"
- #define xi_token_related "related"
- #define xi_token_sub "sub"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
- /****d* VALUE/XMLRPC_IntrospectionCallback
- * NAME
- * XMLRPC_IntrospectionCallback
- * NOTES
- * Function prototype for lazy documentation generation (not generated until requested).
- * SOURCE
- */
-typedef void (*XMLRPC_IntrospectionCallback)(XMLRPC_SERVER server, void* userData);
-/******/
-
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR error);
-int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc);
-int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __XI_INTROSPECTION_H */
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h
deleted file mode 100644
index 7b97fa7ed7..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Dan Libby, Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-
-#ifndef __XI_INTROSPECTION_PRIVATE_H
-/*
- * Avoid include redundancy.
- */
-#define __XI_INTROSPECTION_PRIVATE_H
-
-/*----------------------------------------------------------------------------
- * xmlrpc_introspection_private.h
- *
- * Purpose:
- * define non-public introspection routines
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-#define xi_token_default "default"
-#define xi_token_description "description"
-#define xi_token_name "name"
-#define xi_token_optional "optional"
-#define xi_token_params "params"
-#define xi_token_purpose "purpose"
-#define xi_token_returns "returns"
-#define xi_token_signatures "signatures"
-#define xi_token_type "type"
-#define xi_token_version "version"
-#define xi_token_empty ""
-#define xi_token_system_describe_methods "system.describeMethods"
-#define xi_token_system_list_methods "system.listMethods"
-#define xi_token_system_method_help "system.methodHelp"
-#define xi_token_system_method_signature "system.methodSignature"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-typedef struct _doc_method {
- XMLRPC_IntrospectionCallback method;
- int b_called;
-} doc_method;
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-void xi_register_system_methods(XMLRPC_SERVER server);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __XI_INTROSPECTION_PRIVATE_H */
-
-
-
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_private.h b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_private.h
deleted file mode 100644
index afb1cd2479..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_private.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-#ifndef XMLRPC_PRIVATE_ALREADY_INCLUDED
-/*
- * Avoid include redundancy.
- */
-#define XMLRPC_PRIVATE_ALREADY_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*----------------------------------------------------------------------------
- * xmlrpc_private.h
- *
- * Purpose:
- * define non-public intra-library routines & data
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
-/* Some of these are typedef'd in xmlrpc.h for public use */
-
-typedef struct _xmlrpc_vector* XMLRPC_VECTOR;
-
-/****s* VALUE/XMLRPC_VALUE
- * NAME
- * XMLRPC_VALUE
- * NOTES
- * A value of variable data type. The most important object in this API. :)
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- * SEE ALSO
- * XMLRPC_REQUEST
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-typedef struct _xmlrpc_value {
- XMLRPC_VALUE_TYPE type; /* data type of this value */
- XMLRPC_VECTOR v; /* vector type specific info */
- simplestring str; /* string value buffer */
- simplestring id; /* id of this value. possibly empty. */
- int i; /* integer value. */
- double d; /* double value */
- int iRefCount; /* So we know when we can delete the value . */
-} STRUCT_XMLRPC_VALUE;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST
- * NAME
- * XMLRPC_REQUEST
- * NOTES
- * Internal representation of an XML request.
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- *
- * SEE ALSO
- * XMLRPC_VALUE
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-typedef struct _xmlrpc_request {
- XMLRPC_VALUE io; /* data associated with this request */
- simplestring methodName; /* name of method being called */
- XMLRPC_REQUEST_TYPE request_type; /* type of request */
- STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS output; /* xml output options */
- XMLRPC_VALUE error; /* error codes */
-} STRUCT_XMLRPC_REQUEST;
-/******/
-
-/* Vector type. Used by XMLRPC_VALUE. Never visible to users of the API. */
-typedef struct _xmlrpc_vector {
- XMLRPC_VECTOR_TYPE type; /* vector type */
- queue *q; /* list of child values */
-} STRUCT_XMLRPC_VECTOR;
-/******/
-
-/****s* VALUE/XMLRPC_SERVER
- * NAME
- * XMLRPC_SERVER
- * NOTES
- * internal representation of an xmlrpc server
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- *
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * XMLRPC_ServerDestroy ()
- * SOURCE
- */
-typedef struct _xmlrpc_server {
- queue methodlist; /* list of callback methods */
- queue docslist; /* list of introspection callbacks */
- XMLRPC_VALUE xIntrospection;
-} STRUCT_XMLRPC_SERVER;
-/******/
-
-typedef struct _server_method {
- char* name;
- XMLRPC_VALUE desc;
- XMLRPC_Callback method;
-} server_method;
-
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-extern server_method* find_method(XMLRPC_SERVER server, const char* name);
-const char* type_to_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* XMLRPC_PRIVATE_ALREADY_INCLUDED */
-
diff --git a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_win32.h b/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_win32.h
deleted file mode 100644
index 58c54bbb80..0000000000
--- a/ext/rpc/xmlrpc/libxmlrpc/xmlrpc_win32.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _XMLRPC_WIN32_H
-#define _XMLRPC_WIN32_H
-/* just some things needed to compile win32 */
-#include <windows.h>
-#include <stdlib.h>
-#define inline __inline
-#define snprintf _snprintf
-#define strcasecmp(s1, s2) stricmp(s1, s2)
-
-
-#endif \ No newline at end of file
diff --git a/ext/rpc/xmlrpc/php_xmlrpc.h b/ext/rpc/xmlrpc/php_xmlrpc.h
deleted file mode 100644
index bdf76b0cbf..0000000000
--- a/ext/rpc/xmlrpc/php_xmlrpc.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- This file is part of, or distributed with, libXMLRPC - a C library for
- xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* auto-generated portions of this file are also subject to the php license */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Dan Libby |
- +----------------------------------------------------------------------+
- */
-
-#ifndef _PHP_XMLRPC_H
-#define _PHP_XMLRPC_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if 1 /* HAVE_XMLRPC */
-
-extern zend_module_entry xmlrpc_module_entry;
-#define phpext_xmlrpc_ptr &xmlrpc_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XMLRPC_API __declspec(dllexport)
-#else
-#define PHP_XMLRPC_API
-#endif
-
-PHP_MINIT_FUNCTION(xmlrpc);
-PHP_MSHUTDOWN_FUNCTION(xmlrpc);
-PHP_RINIT_FUNCTION(xmlrpc);
-PHP_RSHUTDOWN_FUNCTION(xmlrpc);
-PHP_MINFO_FUNCTION(xmlrpc);
-
-PHP_FUNCTION(xmlrpc_encode);
-PHP_FUNCTION(xmlrpc_decode);
-PHP_FUNCTION(xmlrpc_decode_request);
-PHP_FUNCTION(xmlrpc_encode_request);
-PHP_FUNCTION(xmlrpc_get_type);
-PHP_FUNCTION(xmlrpc_set_type);
-PHP_FUNCTION(xmlrpc_server_create);
-PHP_FUNCTION(xmlrpc_server_destroy);
-PHP_FUNCTION(xmlrpc_server_register_method);
-PHP_FUNCTION(xmlrpc_server_call_method);
-PHP_FUNCTION(xmlrpc_parse_method_descriptions);
-PHP_FUNCTION(xmlrpc_server_add_introspection_data);
-PHP_FUNCTION(xmlrpc_server_register_introspection_callback);
-
-/* Fill in this structure and use entries in it
- for thread safety instead of using true globals.
-*/
-typedef struct {
- int x; /* fix error in msvc, cannot have empty structs */
-} zend_xmlrpc_globals;
-
-/* In every function that needs to use variables in zend_xmlrpc_globals,
- do call XMLRPCLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as XMLRPCG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#else
-
-#define phpext_xmlrpc_ptr NULL
-
-#endif
-
-#endif /* _PHP_XMLRPC_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/rpc/xmlrpc/xmlrpc-epi-php.c b/ext/rpc/xmlrpc/xmlrpc-epi-php.c
deleted file mode 100644
index 103ca28dd2..0000000000
--- a/ext/rpc/xmlrpc/xmlrpc-epi-php.c
+++ /dev/null
@@ -1,1464 +0,0 @@
-/*
- This file is part of, or distributed with, libXMLRPC - a C library for
- xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* auto-generated portions of this file are also subject to the php license */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Dan Libby |
- +----------------------------------------------------------------------+
- */
-
-/**********************************************************************
-* BUGS: *
-* - when calling a php user function, there appears to be no way to *
-* distinguish between a return value of null, and no return value *
-* at all. The xml serialization layer(s) will then return a value *
-* of null, when the right thing may be no value at all. (SOAP) *
-**********************************************************************/
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-#include "php_xmlrpc.h"
-#ifndef PHP_WIN32
-#include "php_config.h"
-#endif
-#include "xmlrpc.h"
-
-#define PHP_EXT_VERSION "0.50"
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined. */
-
-ZEND_DECLARE_MODULE_GLOBALS(xmlrpc)
-
-static int le_xmlrpc_server;
-
-function_entry xmlrpc_functions[] = {
- PHP_FE(xmlrpc_encode, NULL)
- PHP_FE(xmlrpc_decode, NULL)
- PHP_FE(xmlrpc_decode_request, NULL)
- PHP_FE(xmlrpc_encode_request, NULL)
- PHP_FE(xmlrpc_get_type, NULL)
- PHP_FE(xmlrpc_set_type, NULL)
- PHP_FE(xmlrpc_server_create, NULL)
- PHP_FE(xmlrpc_server_destroy, NULL)
- PHP_FE(xmlrpc_server_register_method, NULL)
- PHP_FE(xmlrpc_server_call_method, NULL)
- PHP_FE(xmlrpc_parse_method_descriptions, NULL)
- PHP_FE(xmlrpc_server_add_introspection_data, NULL)
- PHP_FE(xmlrpc_server_register_introspection_callback, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry xmlrpc_module_entry = {
- STANDARD_MODULE_HEADER,
- "xmlrpc",
- xmlrpc_functions,
- PHP_MINIT(xmlrpc),
- PHP_MSHUTDOWN(xmlrpc),
- PHP_RINIT(xmlrpc), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(xmlrpc), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(xmlrpc),
- PHP_EXT_VERSION,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_XMLRPC
-ZEND_GET_MODULE(xmlrpc)
-#endif
-
-/*******************************
-* local structures and defines *
-*******************************/
-
-/* per server data */
-typedef struct _xmlrpc_server_data {
- zval* method_map;
- zval* introspection_map;
- XMLRPC_SERVER server_ptr;
-} xmlrpc_server_data;
-
-
-/* how to format output */
-typedef struct _php_output_options {
- int b_php_out;
- int b_auto_version;
- STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS xmlrpc_out;
-} php_output_options;
-
-/* data passed to C callback */
-typedef struct _xmlrpc_callback_data {
- zval* xmlrpc_method;
- zval* php_function;
- zval* caller_params;
- zval* return_data;
- xmlrpc_server_data* server;
- char php_executed;
-} xmlrpc_callback_data;
-
-/* output options */
-#define OUTPUT_TYPE_KEY "output_type"
-#define OUTPUT_TYPE_KEY_LEN (sizeof(OUTPUT_TYPE_KEY) - 1)
-#define OUTPUT_TYPE_VALUE_PHP "php"
-#define OUTPUT_TYPE_VALUE_XML "xml"
-
-#define VERBOSITY_KEY "verbosity"
-#define VERBOSITY_KEY_LEN (sizeof(VERBOSITY_KEY) - 1)
-#define VERBOSITY_VALUE_NO_WHITE_SPACE "no_white_space"
-#define VERBOSITY_VALUE_NEWLINES_ONLY "newlines_only"
-#define VERBOSITY_VALUE_PRETTY "pretty"
-
-#define ESCAPING_KEY "escaping"
-#define ESCAPING_KEY_LEN (sizeof(ESCAPING_KEY) - 1)
-#define ESCAPING_VALUE_CDATA "cdata"
-#define ESCAPING_VALUE_NON_ASCII "non-ascii"
-#define ESCAPING_VALUE_NON_PRINT "non-print"
-#define ESCAPING_VALUE_MARKUP "markup"
-
-#define VERSION_KEY "version"
-#define VERSION_KEY_LEN (sizeof(VERSION_KEY) - 1)
-#define VERSION_VALUE_SIMPLE "simple"
-#define VERSION_VALUE_XMLRPC "xmlrpc"
-#define VERSION_VALUE_SOAP11 "soap 1.1"
-#define VERSION_VALUE_AUTO "auto"
-
-#define ENCODING_KEY "encoding"
-#define ENCODING_KEY_LEN (sizeof(ENCODING_KEY) - 1)
-#define ENCODING_DEFAULT "iso-8859-1"
-
-/* value types */
-#define OBJECT_TYPE_ATTR "xmlrpc_type"
-#define OBJECT_VALUE_ATTR "scalar"
-
-
-
-/***********************
-* forward declarations *
-***********************/
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue);
-static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data);
-int sset_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-zval* decode_request_worker(zval* xml_in, zval* encoding_in, zval* method_name_out);
-const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
-XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str);
-XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str);
-int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-
-/*********************
-* startup / shutdown *
-*********************/
-
-static void destroy_server_data(xmlrpc_server_data *server)
-{
- if (server) {
- XMLRPC_ServerDestroy(server->server_ptr);
-
- zval_dtor(server->method_map);
- FREE_ZVAL(server->method_map);
-
- zval_dtor(server->introspection_map);
- FREE_ZVAL(server->introspection_map);
-
- efree(server);
- }
-}
-
-/* called when server is being destructed. either when xmlrpc_server_destroy
- * is called, or when request ends. */
-static void xmlrpc_server_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- if (rsrc && rsrc->ptr) {
- destroy_server_data((xmlrpc_server_data*) rsrc->ptr);
- }
-}
-
-/* module init */
-PHP_MINIT_FUNCTION(xmlrpc)
-{
- le_xmlrpc_server = zend_register_list_destructors_ex(xmlrpc_server_destructor, NULL, "xmlrpc server", module_number);
-
- return SUCCESS;
-}
-
-/* module shutdown */
-PHP_MSHUTDOWN_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request start */
-PHP_RINIT_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request end */
-PHP_RSHUTDOWN_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* display info in phpinfo() */
-PHP_MINFO_FUNCTION(xmlrpc)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "core library version", XMLRPC_GetVersionString());
- php_info_print_table_row(2, "php extension version", PHP_EXT_VERSION);
- php_info_print_table_row(2, "author", "Dan Libby");
- php_info_print_table_row(2, "homepage", "http://xmlrpc-epi.sourceforge.net");
- php_info_print_table_row(2, "open sourced by", "Epinions.com");
- php_info_print_table_end();
-}
-
-/*******************
-* random utilities *
-*******************/
-
-/* Utility functions for adding data types to arrays, with or without key (assoc, non-assoc).
- * Could easily be further generalized to work with objects.
- */
-#if 0
-static int add_long(zval* list, char* id, int num) {
- if(id) return add_assoc_long(list, id, num);
- else return add_next_index_long(list, num);
-}
-
-static int add_double(zval* list, char* id, double num) {
- if(id) return add_assoc_double(list, id, num);
- else return add_next_index_double(list, num);
-}
-
-static int add_string(zval* list, char* id, char* string, int duplicate) {
- if(id) return add_assoc_string(list, id, string, duplicate);
- else return add_next_index_string(list, string, duplicate);
-}
-
-static int add_stringl(zval* list, char* id, char* string, uint length, int duplicate) {
- if(id) return add_assoc_stringl(list, id, string, length, duplicate);
- else return add_next_index_stringl(list, string, length, duplicate);
-}
-
-#endif
-
-static int add_zval(zval* list, const char* id, zval** val)
-{
- if (list && val) {
- if (id) {
- return zend_hash_update(Z_ARRVAL_P(list), (char*) id, strlen(id) + 1, (void *) val, sizeof(zval **), NULL);
- } else {
- return zend_hash_next_index_insert(Z_ARRVAL_P(list), (void *) val, sizeof(zval **), NULL);
- }
- }
- /* what is the correct return on error? */
- return 0;
-}
-
-#if ZEND_MODULE_API_NO >= 20001222
-#define my_zend_hash_get_current_key(ht, my_key, num_index) zend_hash_get_current_key(ht, my_key, num_index, 0)
-#else
-#define my_zend_hash_get_current_key(ht, my_key, num_index) zend_hash_get_current_key(ht, my_key, num_index)
-#endif
-
-
-/*************************
-* input / output options *
-*************************/
-
-/* parse an array (user input) into output options suitable for use by xmlrpc engine
- * and determine whether to return data as xml or php vars */
-static void set_output_options(php_output_options* options, zval* output_opts)
-{
- if (options) {
-
- /* defaults */
- options->b_php_out = 0;
- options->b_auto_version = 1;
- options->xmlrpc_out.version = xmlrpc_version_1_0;
- options->xmlrpc_out.xml_elem_opts.encoding = ENCODING_DEFAULT;
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping | xml_elem_non_ascii_escaping | xml_elem_non_print_escaping;
-
- if (output_opts && Z_TYPE_P(output_opts) == IS_ARRAY) {
- zval** val;
-
- /* type of output (xml/php) */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), OUTPUT_TYPE_KEY, OUTPUT_TYPE_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_PHP)) {
- options->b_php_out = 1;
- } else if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_XML)) {
- options->b_php_out = 0;
- }
- }
- }
-
- /* verbosity of generated xml */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERBOSITY_KEY, VERBOSITY_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NO_WHITE_SPACE)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_no_white_space;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NEWLINES_ONLY)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_newlines_only;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_PRETTY)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
- }
- }
- }
-
- /* version of xml to output */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERSION_KEY, VERSION_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- options->b_auto_version = 0;
- if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_XMLRPC)) {
- options->xmlrpc_out.version = xmlrpc_version_1_0;
- } else if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_SIMPLE)) {
- options->xmlrpc_out.version = xmlrpc_version_simple;
- } else if (!strcmp((*val)->value.str.val, VERSION_VALUE_SOAP11)) {
- options->xmlrpc_out.version = xmlrpc_version_soap_1_1;
- } else { /* if(!strcmp((*val)->value.str.val, VERSION_VALUE_AUTO)) { */
- options->b_auto_version = 1;
- }
- }
- }
-
- /* encoding code set */
- if(zend_hash_find(Z_ARRVAL_P(output_opts),
- ENCODING_KEY, ENCODING_KEY_LEN + 1,
- (void**)&val) == SUCCESS) {
- if(Z_TYPE_PP(val) == IS_STRING) {
- options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_PP(val));
- }
- }
-
- /* escaping options */
- if(zend_hash_find(Z_ARRVAL_P(output_opts),
- ESCAPING_KEY, ESCAPING_KEY_LEN + 1,
- (void**)&val) == SUCCESS) {
- /* multiple values allowed. check if array */
- if(Z_TYPE_PP(val) == IS_ARRAY) {
- zval** iter_val;
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(val));
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping;
- while(1) {
- if(zend_hash_get_current_data(Z_ARRVAL_PP(val), (void**)&iter_val) == SUCCESS) {
- if(Z_TYPE_PP(iter_val) == IS_STRING && Z_STRVAL_PP(iter_val)) {
- if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping;
- }
- }
- }
- else {
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(val));
- }
- }
- /* else, check for single value */
- else if(Z_TYPE_PP(val) == IS_STRING) {
- if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping;
- }
- }
- }
- }
- }
-}
-
-
-/******************
-* encode / decode *
-******************/
-
-/* php arrays have no distinction between array and struct types.
- * they even allow mixed. Thus, we determine the type by iterating
- * through the entire array and figuring out each element.
- * room for some optimation here if we stop after a specific # of elements.
- */
-static XMLRPC_VECTOR_TYPE determine_vector_type (HashTable *ht)
-{
- int bArray = 0, bStruct = 0, bMixed = 0;
- unsigned long num_index;
- char* my_key;
-
- zend_hash_internal_pointer_reset(ht);
- while(1) {
- int res = my_zend_hash_get_current_key(ht, &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(bStruct) {
- bMixed = 1;
- break;
- }
- bArray = 1;
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(bArray) {
- bMixed = 1;
- break;
- }
- bStruct = 1;
- }
-
- zend_hash_move_forward(ht);
- }
- return bMixed ? xmlrpc_vector_mixed : (bStruct ? xmlrpc_vector_struct : xmlrpc_vector_array);
-}
-
-/* recursively convert php values into xmlrpc values */
-static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int depth)
-{
- XMLRPC_VALUE xReturn = NULL;
- if(in_val) {
- zval* val = NULL;
- XMLRPC_VALUE_TYPE type = get_zval_xmlrpc_type(in_val, &val);
- if(val) {
- switch(type) {
- case xmlrpc_base64:
- if(Z_TYPE_P(val) == IS_NULL) {
- xReturn = XMLRPC_CreateValueEmpty();
- XMLRPC_SetValueID(xReturn, key, 0);
- }
- else {
- xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
- }
- break;
- case xmlrpc_datetime:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueDateTime_ISO8601(key, Z_STRVAL_P(val));
- break;
- case xmlrpc_boolean:
- convert_to_boolean(val);
- xReturn = XMLRPC_CreateValueBoolean(key, Z_LVAL_P(val));
- break;
- case xmlrpc_int:
- convert_to_long(val);
- xReturn = XMLRPC_CreateValueInt(key, Z_LVAL_P(val));
- break;
- case xmlrpc_double:
- convert_to_double(val);
- xReturn = XMLRPC_CreateValueDouble(key, Z_DVAL_P(val));
- break;
- case xmlrpc_string:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueString(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
- break;
- case xmlrpc_vector:
- {
- unsigned long num_index;
- zval** pIter;
- char* my_key;
-
- convert_to_array(val);
-
- xReturn = XMLRPC_CreateVector(key, determine_vector_type(Z_ARRVAL_P(val)));
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
- while(1) {
- int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val), &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++));
- }
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++));
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(val));
- }
- }
- break;
- default:
- break;
- }
- }
- }
- return xReturn;
-}
-
-static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val)
-{
- return PHP_to_XMLRPC_worker(NULL, root_val, 0);
-}
-
-/* recursively convert xmlrpc values into php values */
-static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
-{
- zval* elem = NULL;
- const char* pStr;
-
- if(el) {
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(el);
-
- MAKE_STD_ZVAL(elem); /* init. very important. spent a frustrating day finding this out. */
-
- switch(type) {
- case xmlrpc_empty:
- Z_TYPE_P(elem) = IS_NULL;
- break;
- case xmlrpc_string:
- pStr = XMLRPC_GetValueString(el);
- if(pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- }
- break;
- case xmlrpc_int:
- Z_LVAL_P(elem) = XMLRPC_GetValueInt(el);
- Z_TYPE_P(elem) = IS_LONG;
- break;
- case xmlrpc_boolean:
- Z_LVAL_P(elem) = XMLRPC_GetValueBoolean(el);
- Z_TYPE_P(elem) = IS_BOOL;
- break;
- case xmlrpc_double:
- Z_DVAL_P(elem) = XMLRPC_GetValueDouble(el);
- Z_TYPE_P(elem) = IS_DOUBLE;
- break;
- case xmlrpc_datetime:
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(XMLRPC_GetValueDateTime_ISO8601(el), Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- break;
- case xmlrpc_base64:
- pStr = XMLRPC_GetValueBase64(el);
- if(pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- }
- break;
- case xmlrpc_vector:
- if(array_init(elem) == SUCCESS) {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(el);
-
- while( xIter ) {
- zval* val = XMLRPC_to_PHP(xIter);
- if(val) {
- add_zval(elem, XMLRPC_GetValueID(xIter), &val);
- }
- xIter = XMLRPC_VectorNext(el);
- }
- }
- break;
- default:
- break;
- }
- set_zval_xmlrpc_type(elem, type);
- }
- return elem;
-}
-
-/* {{{ proto string xmlrpc_encode_request(string method, mixed params)
- Generates XML for a method request */
-PHP_FUNCTION(xmlrpc_encode_request)
-{
- XMLRPC_REQUEST xRequest = NULL;
- zval* method, *vals, *out_opts;
- char* outBuf;
- php_output_options out;
-
- if( !(ARG_COUNT(ht) == 2 || ARG_COUNT(ht) == 3) ||
- getParameters(ht, ARG_COUNT(ht), &method, &vals, &out_opts) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- set_output_options(&out, (ARG_COUNT(ht) == 3) ? out_opts : 0);
-
-
- if(return_value_used) {
- xRequest = XMLRPC_RequestNew();
-
- if(xRequest) {
- XMLRPC_RequestSetOutputOptions(xRequest, &out.xmlrpc_out);
- if(Z_TYPE_P(method) == IS_NULL) {
- XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_response);
- }
- else {
- XMLRPC_RequestSetMethodName(xRequest, Z_STRVAL_P(method));
- XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_call);
- }
- if(Z_TYPE_P(vals) != IS_NULL) {
- XMLRPC_RequestSetData(xRequest, PHP_to_XMLRPC(vals));
- }
-
- outBuf = XMLRPC_REQUEST_ToXML(xRequest, 0);
- if(outBuf) {
- RETVAL_STRING(outBuf, 1);
- free(outBuf);
- }
- XMLRPC_RequestFree(xRequest, 1);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string xmlrpc_encode(mixed value)
- Generates XML for a PHP value */
-PHP_FUNCTION(xmlrpc_encode)
-{
- XMLRPC_VALUE xOut = NULL;
- zval* arg1;
- char* outBuf;
-
- if( !(ARG_COUNT(ht) == 1) ||
- getParameters(ht, ARG_COUNT(ht), &arg1) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- if( return_value_used ) {
- /* convert native php type to xmlrpc type */
- xOut = PHP_to_XMLRPC(arg1);
-
- /* generate raw xml from xmlrpc data */
- outBuf = XMLRPC_VALUE_ToXML(xOut, 0);
-
- if(xOut) {
- if(outBuf) {
- RETVAL_STRING(outBuf, 1);
- free(outBuf);
- }
- /* cleanup */
- XMLRPC_CleanupValue(xOut);
- }
- }
-}
-/* }}} */
-
-
-zval* decode_request_worker (zval* xml_in, zval* encoding_in, zval* method_name_out)
-{
- zval* retval = NULL;
- XMLRPC_REQUEST response;
- STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
- opts.xml_elem_opts.encoding = encoding_in ? utf8_get_encoding_id_from_string(Z_STRVAL_P(encoding_in)) : ENCODING_DEFAULT;
-
- /* generate XMLRPC_REQUEST from raw xml */
- response = XMLRPC_REQUEST_FromXML(Z_STRVAL_P(xml_in), Z_STRLEN_P(xml_in), &opts);
- if(response) {
- /* convert xmlrpc data to native php types */
- retval = XMLRPC_to_PHP(XMLRPC_RequestGetData(response));
-
- if(XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
- if(method_name_out) {
- convert_to_string(method_name_out);
- Z_TYPE_P(method_name_out) = IS_STRING;
- Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
- Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
- }
- }
-
- /* dust, sweep, and mop */
- XMLRPC_RequestFree(response, 1);
- }
- return retval;
-}
-
-/* {{{ proto array xmlrpc_decode_request(string xml, string& method [, string encoding])
- Decodes XML into native PHP types */
-PHP_FUNCTION(xmlrpc_decode_request)
-{
- zval* xml, *method, *encoding = NULL;
-
- if( !(ARG_COUNT(ht) == 2 || ARG_COUNT(ht) == 3) || getParameters(ht, ARG_COUNT(ht), &xml, &method, &encoding) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-#if ZEND_MODULE_API_NO < 20010901
- if (!ParameterPassedByReference(ht,2)) {
- zend_error(E_WARNING,"second argument to xmlrpc_decode_request() passed by value, expecting reference");
- }
-#endif
-
- convert_to_string(xml);
- convert_to_string(method);
- if(ARG_COUNT(ht) == 3) {
- convert_to_string(encoding);
- }
-
- if(return_value_used) {
- zval* retval = decode_request_worker(xml, encoding, method);
- if(retval) {
- *return_value = *retval;
- zval_copy_ctor(return_value);
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto array xmlrpc_decode(string xml [, string encoding])
- Decodes XML into native PHP types */
-PHP_FUNCTION(xmlrpc_decode)
-{
- zval* arg1, *arg2 = NULL;
-
- if( !(ARG_COUNT(ht) == 1 || ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- convert_to_string(arg1);
- if(ARG_COUNT(ht) == 2) {
- convert_to_string(arg2);
- }
-
- if(return_value_used) {
- zval* retval = decode_request_worker(arg1, arg2, NULL);
- if(retval) {
- *return_value = *retval;
- FREE_ZVAL(retval);
- }
- }
-}
-/* }}} */
-
-
-/*************************
-* server related methods *
-*************************/
-
-/* {{{ proto handle xmlrpc_server_create(void)
- Creates an xmlrpc server */
-PHP_FUNCTION(xmlrpc_server_create)
-{
- if(ARG_COUNT(ht) != 0) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- if(return_value_used) {
- zval *method_map, *introspection_map;
- MAKE_STD_ZVAL(method_map);
- MAKE_STD_ZVAL(introspection_map);
-
- if(array_init(method_map) == SUCCESS && array_init(introspection_map) == SUCCESS) {
- /* allocate server data. free'd in destroy_server_data() */
- xmlrpc_server_data *server = emalloc(sizeof(xmlrpc_server_data));
-
- if(server) {
- server->method_map = method_map;
- server->introspection_map = introspection_map;
- server->server_ptr = XMLRPC_ServerCreate();
-
- XMLRPC_ServerRegisterIntrospectionCallback(server->server_ptr, php_xmlrpc_introspection_callback);
-
- /* store for later use */
- ZEND_REGISTER_RESOURCE(return_value,server, le_xmlrpc_server);
- }
- }
- }
-}
-
-/* {{{ proto void xmlrpc_server_destroy(handle server)
- Destroys server resources */
-PHP_FUNCTION(xmlrpc_server_destroy)
-{
- zval* arg1;
- int bSuccess = FAILURE;
-
- if(ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- if(Z_TYPE_P(arg1) == IS_RESOURCE) {
- int type;
-
- xmlrpc_server_data *server = zend_list_find(Z_LVAL_P(arg1), &type);
-
- if(server && type == le_xmlrpc_server) {
- bSuccess = zend_list_delete(Z_LVAL_P(arg1));
-
- /* called by hashtable destructor
- * destroy_server_data(server);
- */
- }
- }
- RETVAL_LONG(bSuccess == SUCCESS);
-}
-
-
-/* called by xmlrpc C engine as method handler for all registered methods.
- * it then calls the corresponding PHP function to handle the method.
- */
-static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRequest, void* data)
-{
- xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- zval* xmlrpc_params;
- zval* callback_params[3];
- TSRMLS_FETCH();
-
- /* convert xmlrpc to native php types */
- xmlrpc_params = XMLRPC_to_PHP(XMLRPC_RequestGetData(xRequest));
-
- /* setup data hoojum */
- callback_params[0] = pData->xmlrpc_method;
- callback_params[1] = xmlrpc_params;
- callback_params[2] = pData->caller_params;
-
- /* Use same C function for all methods */
-
- /* php func prototype: function user_func($method_name, $xmlrpc_params, $user_params) */
- call_user_function(CG(function_table), NULL, pData->php_function, pData->return_data, 3, callback_params TSRMLS_CC);
-
- pData->php_executed = 1;
-
- zval_dtor(xmlrpc_params);
- FREE_ZVAL(xmlrpc_params);
-
- return NULL;
-}
-
-/* called by the C server when it first receives an introspection request. We pass this on to
- * our PHP listeners, if any
- */
-static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data)
-{
- zval *retval_ptr, **php_function;
- zval* callback_params[1];
- xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(retval_ptr);
- Z_TYPE_P(retval_ptr) = IS_NULL;
-
- /* setup data hoojum */
- callback_params[0] = pData->caller_params;
-
- /* loop through and call all registered callbacks */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(pData->server->introspection_map));
- while(1) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(pData->server->introspection_map),
- (void**)&php_function) == SUCCESS) {
-
- /* php func prototype: function string user_func($user_params) */
- if(call_user_function(CG(function_table), NULL, *php_function,
- retval_ptr, 1, callback_params TSRMLS_CC) == SUCCESS) {
- XMLRPC_VALUE xData;
- STRUCT_XMLRPC_ERROR err = {0};
-
- /* return value should be a string */
- convert_to_string(retval_ptr);
-
- xData = XMLRPC_IntrospectionCreateDescription(Z_STRVAL_P(retval_ptr), &err);
-
- if(xData) {
- if(!XMLRPC_ServerAddIntrospectionData(server, xData)) {
- zend_error(E_WARNING, "Unable to add introspection data returned from %s(), improper element structure", Z_STRVAL_PP(php_function));
- }
- XMLRPC_CleanupValue(xData);
- }
- else {
- /* could not create description */
- if(err.xml_elem_error.parser_code) {
- zend_error(E_WARNING, "xml parse error: [line %i, column %i, message: %s] Unable to add introspection data returned from %s()",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error, Z_STRVAL_PP(php_function));
- }
- else {
- zend_error(E_WARNING, "Unable to add introspection data returned from %s()",
- Z_STRVAL_PP(php_function));
- }
- }
- }
- else {
- /* user func failed */
- zend_error(E_WARNING, "Error calling user introspection callback: %s()", Z_STRVAL_PP(php_function));
- }
- }
- else {
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(pData->server->introspection_map));
- }
-
- /* so we don't call the same callbacks ever again */
- zend_hash_clean(Z_ARRVAL_P(pData->server->introspection_map));
-}
-
-/* {{{ proto boolean xmlrpc_server_register_method(handle server, string method_name, string function)
- Register a PHP function to handle method matching method_name */
-PHP_FUNCTION(xmlrpc_server_register_method)
-{
- zval* method_key, *method_name, *handle, *method_name_save;
- int type;
- xmlrpc_server_data* server;
-
- /* get some params. should be 3 */
- if( !(ARG_COUNT(ht) == 3) || getParameters(ht, ARG_COUNT(ht), &handle, &method_key, &method_name) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* register with C engine. every method just calls our standard callback,
- * and it then dispatches to php as necessary
- */
- if(XMLRPC_ServerRegisterMethod(server->server_ptr, Z_STRVAL_P(method_key), php_xmlrpc_callback)) {
- /* save for later use */
- MAKE_STD_ZVAL(method_name_save);
- *method_name_save = *method_name;
- zval_copy_ctor(method_name_save);
-
- /* register our php method */
- add_zval(server->method_map, Z_STRVAL_P(method_key), &method_name_save);
-
- RETURN_BOOL(1);
- }
- }
- RETURN_BOOL(0);
-}
-
-
-/* {{{ proto boolean xmlrpc_server_register_introspection_callback(handle server, string function)
- Register a PHP function to generate documentation */
-PHP_FUNCTION(xmlrpc_server_register_introspection_callback)
-{
- zval* method_name, *handle, *method_name_save;
- int type;
- xmlrpc_server_data* server;
-
- /* get some params. should be 2 */
- if( !(ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &handle, &method_name) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if(type == le_xmlrpc_server) {
- {
- /* save for later use */
- MAKE_STD_ZVAL(method_name_save);
- *method_name_save = *method_name;
- zval_copy_ctor(method_name_save);
-
- /* register our php method */
- add_zval(server->introspection_map, NULL, &method_name_save);
-
- RETURN_BOOL(1);
- }
- }
- RETURN_BOOL(0);
-}
-
-
-/* this function is itchin for a re-write */
-
-/* {{{ proto mixed xmlrpc_server_call_method(handle server, string xml, mixed user_data [, array output_options])
- Parses XML requests and call methods */
-PHP_FUNCTION(xmlrpc_server_call_method)
-{
- xmlrpc_callback_data data = {0};
- XMLRPC_REQUEST xRequest;
- STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS input_opts;
- xmlrpc_server_data* server;
- zval *rawxml, *caller_params, *handle, *output_opts;
- int type;
- php_output_options out;
-
- /* get params. 3 or 4 params ok */
- if(ARG_COUNT(ht) == 4) {
- if(getParameters(ht, ARG_COUNT(ht), &handle, &rawxml, &caller_params, &output_opts) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- /* user output options */
- set_output_options(&out, output_opts);
- }
- else if(ARG_COUNT(ht) == 3) {
- if(getParameters(ht, ARG_COUNT(ht), &handle, &rawxml, &caller_params) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
- /* user output options */
- set_output_options(&out, NULL);
- }
- else {
- WRONG_PARAM_COUNT;
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* HACK: use output encoding for now */
- input_opts.xml_elem_opts.encoding = utf8_get_encoding_id_from_string(out.xmlrpc_out.xml_elem_opts.encoding);
-
- /* generate an XMLRPC_REQUEST from the raw xml input */
- xRequest = XMLRPC_REQUEST_FromXML(Z_STRVAL_P(rawxml), Z_STRLEN_P(rawxml), &input_opts);
-
- if(xRequest) {
- const char* methodname = XMLRPC_RequestGetMethodName(xRequest);
- zval** php_function;
- XMLRPC_VALUE xAnswer = NULL;
- MAKE_STD_ZVAL(data.xmlrpc_method); /* init. very important. spent a frustrating day finding this out. */
- MAKE_STD_ZVAL(data.return_data);
- Z_TYPE_P(data.return_data) = IS_NULL; /* in case value is never init'd, we don't dtor to think it is a string or something */
- Z_TYPE_P(data.xmlrpc_method) = IS_NULL;
-
- if (!methodname) {
- methodname = "";
- }
-
- /* setup some data to pass to the callback function */
- Z_STRVAL_P(data.xmlrpc_method) = estrdup(methodname);
- Z_STRLEN_P(data.xmlrpc_method) = strlen(methodname);
- Z_TYPE_P(data.xmlrpc_method) = IS_STRING;
- data.caller_params = caller_params;
- data.php_executed = 0;
- data.server = server;
-
- /* check if the called method has been previous registered */
- if(zend_hash_find(Z_ARRVAL_P(server->method_map),
- Z_STRVAL_P(data.xmlrpc_method),
- Z_STRLEN_P(data.xmlrpc_method) + 1,
- (void**)&php_function) == SUCCESS) {
-
- data.php_function = *php_function;
- }
-
- /* We could just call the php method directly ourselves at this point, but we do this
- * with a C callback in case the xmlrpc library ever implements some cool usage stats,
- * or somesuch.
- */
- xAnswer = XMLRPC_ServerCallMethod(server->server_ptr, xRequest, &data);
- if(xAnswer) {
- if(out.b_php_out) {
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
- data.return_data = XMLRPC_to_PHP(xAnswer);
- }
- }
- else if(data.php_executed) {
- if(!out.b_php_out) {
- xAnswer = PHP_to_XMLRPC(data.return_data);
- }
- }
-
- /* should we return data as xml? */
- if(!out.b_php_out) {
- XMLRPC_REQUEST xResponse = XMLRPC_RequestNew();
- if(xResponse) {
- char* outBuf = 0;
- int buf_len = 0;
-
- /* automagically determine output serialization type from request type */
- if (out.b_auto_version) {
- XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
- if (opts) {
- out.xmlrpc_out.version = opts->version;
- }
- }
-
- /* automagically determine output serialization type from request type */
- if (out.b_auto_version) {
- XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
- if (opts) {
- out.xmlrpc_out.version = opts->version;
- }
- }
- /* set some required request hoojum */
- XMLRPC_RequestSetOutputOptions(xResponse, &out.xmlrpc_out);
- XMLRPC_RequestSetRequestType(xResponse, xmlrpc_request_response);
- XMLRPC_RequestSetData(xResponse, xAnswer);
- XMLRPC_RequestSetMethodName(xResponse, methodname);
-
- /* generate xml */
- outBuf = XMLRPC_REQUEST_ToXML(xResponse, &buf_len);
- if(outBuf) {
- RETVAL_STRINGL(outBuf, buf_len, 1);
- free(outBuf);
- }
- /* cleanup after ourselves. what a sty! */
- XMLRPC_RequestFree(xResponse, 0);
- }
- }
- /* or as native php types? */
- else {
- *return_value = *data.return_data;
- zval_copy_ctor(return_value);
- }
-
- /* cleanup after ourselves. what a sty! */
- zval_dtor(data.xmlrpc_method);
- FREE_ZVAL(data.xmlrpc_method);
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
-
- if(xAnswer) {
- XMLRPC_CleanupValue(xAnswer);
- }
-
- XMLRPC_RequestFree(xRequest, 1);
- }
- }
-}
-
-
-/* {{{ proto int xmlrpc_server_add_introspection_data(handle server, array desc)
- Adds introspection documentation */
-PHP_FUNCTION(xmlrpc_server_add_introspection_data)
-{
- zval *handle, *desc;
- int type;
- xmlrpc_server_data* server;
-
- /* get some params. should be 2 */
- if ( !(ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &handle, &desc) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if (type == le_xmlrpc_server) {
- XMLRPC_VALUE xDesc = PHP_to_XMLRPC(desc);
- if (xDesc) {
- int retval = XMLRPC_ServerAddIntrospectionData(server->server_ptr, xDesc);
- XMLRPC_CleanupValue(xDesc);
- RETURN_LONG(retval);
- }
- }
- RETURN_LONG(0);
-}
-
-
-/* {{{ proto array xmlrpc_parse_method_descriptions(string xml)
- Decodes XML into a list of method descriptions */
-PHP_FUNCTION(xmlrpc_parse_method_descriptions)
-{
- zval* arg1, *retval;
-
- if( !(ARG_COUNT(ht) == 1) || getParameters(ht, ARG_COUNT(ht), &arg1) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- convert_to_string(arg1);
-
- if(return_value_used) {
- STRUCT_XMLRPC_ERROR err = {0};
- XMLRPC_VALUE xVal = XMLRPC_IntrospectionCreateDescription(Z_STRVAL_P(arg1), &err);
- if(xVal) {
- retval = XMLRPC_to_PHP(xVal);
-
- if(retval) {
- *return_value = *retval;
- zval_copy_ctor(return_value);
- }
- /* dust, sweep, and mop */
- XMLRPC_CleanupValue(xVal);
- }
- else {
- /* could not create description */
- if(err.xml_elem_error.parser_code) {
- zend_error(E_WARNING, "xml parse error: [line %i, column %i, message: %s] Unable to create introspection data",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error);
- }
- else {
- zend_error(E_WARNING, "Invalid xml structure. Unable to create introspection data");
- }
-
- zend_error(E_WARNING, "xml parse error. no method description created");
- }
- }
-}
-
-
-/************
-* type data *
-************/
-
-#define XMLRPC_TYPE_COUNT 9
-#define XMLRPC_VECTOR_TYPE_COUNT 4
-#define TYPE_STR_MAP_SIZE (XMLRPC_TYPE_COUNT + XMLRPC_VECTOR_TYPE_COUNT)
-
-/* return a string matching a given xmlrpc type */
-static const char** get_type_str_mapping(void)
-{
- static const char* str_mapping[TYPE_STR_MAP_SIZE];
- static int first = 1;
- if (first) {
- /* warning. do not add/delete without changing size define */
- str_mapping[xmlrpc_none] = "none";
- str_mapping[xmlrpc_empty] = "empty";
- str_mapping[xmlrpc_base64] = "base64";
- str_mapping[xmlrpc_boolean] = "boolean";
- str_mapping[xmlrpc_datetime] = "datetime";
- str_mapping[xmlrpc_double] = "double";
- str_mapping[xmlrpc_int] = "int";
- str_mapping[xmlrpc_string] = "string";
- str_mapping[xmlrpc_vector] = "vector";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_none] = "none";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_array] = "array";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_mixed] = "mixed";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_struct] = "struct";
- first = 0;
- }
- return (const char**)str_mapping;
-}
-
-/* map an xmlrpc type to a string */
-const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype)
-{
- const char** str_mapping = get_type_str_mapping();
-
- if (vtype == xmlrpc_vector_none) {
- return str_mapping[type];
- } else {
- return str_mapping[XMLRPC_TYPE_COUNT + vtype];
- }
-}
-
-/* map a string to an xmlrpc type */
-XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str)
-{
- const char** str_mapping = get_type_str_mapping();
- int i;
-
- if (str) {
- for (i = 0; i < XMLRPC_TYPE_COUNT; i++) {
- if (!strcmp(str_mapping[i], str)) {
- return (XMLRPC_VALUE_TYPE) i;
- }
- }
- }
- return xmlrpc_none;
-}
-
-/* map a string to an xmlrpc vector type */
-XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str)
-{
- const char** str_mapping = get_type_str_mapping();
- int i;
-
- if (str) {
- for (i = XMLRPC_TYPE_COUNT; i < TYPE_STR_MAP_SIZE; i++) {
- if (!strcmp(str_mapping[i], str)) {
- return (XMLRPC_VECTOR_TYPE) (i - XMLRPC_TYPE_COUNT);
- }
- }
- }
- return xmlrpc_none;
-}
-
-
-/* set a given value to a particular type.
- * note: this only works on strings, and only for date and base64,
- * which do not have native php types. black magic lies herein.
- */
-int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type)
-{
- int bSuccess = FAILURE;
-
- /* we only really care about strings because they can represent
- * base64 and datetime. all other types have corresponding php types
- */
- if (Z_TYPE_P(value) == IS_STRING) {
- if (type == xmlrpc_base64 || type == xmlrpc_datetime) {
- const char* typestr = xmlrpc_type_as_str(type, xmlrpc_vector_none);
- zval* type;
-
- MAKE_STD_ZVAL(type);
-
- Z_TYPE_P(type) = IS_STRING;
- Z_STRVAL_P(type) = estrdup(typestr);
- Z_STRLEN_P(type) = strlen(typestr);
-
- convert_to_object(value);
- bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL);
- }
- }
-
- return bSuccess;
-}
-
-/* return xmlrpc type of a php value */
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue)
-{
- XMLRPC_VALUE_TYPE type = xmlrpc_none;
-
- if (value) {
- switch (Z_TYPE_P(value)) {
- case IS_NULL:
- type = xmlrpc_base64;
- break;
- #ifndef BOOL_AS_LONG
-
- /* Right thing to do, but it breaks some legacy code. */
- case IS_BOOL:
- type = xmlrpc_boolean;
- break;
- #else
- case IS_BOOL:
- #endif
- case IS_LONG:
- case IS_RESOURCE:
- type = xmlrpc_int;
- break;
- case IS_DOUBLE:
- type = xmlrpc_double;
- break;
- case IS_CONSTANT:
- type = xmlrpc_string;
- break;
- case IS_STRING:
- type = xmlrpc_string;
- break;
- case IS_ARRAY:
- case IS_CONSTANT_ARRAY:
- type = xmlrpc_vector;
- break;
- case IS_OBJECT:
- {
- zval** attr;
- type = xmlrpc_vector;
-
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void**) &attr) == SUCCESS) {
- if (Z_TYPE_PP(attr) == IS_STRING) {
- type = xmlrpc_str_as_type(Z_STRVAL_PP(attr));
- }
- }
- break;
- }
- }
-
- /* if requested, return an unmolested (magic removed) copy of the value */
- if (newvalue) {
- zval** val;
-
- if ((type == xmlrpc_base64 && Z_TYPE_P(value) != IS_NULL) || type == xmlrpc_datetime) {
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_VALUE_ATTR, sizeof(OBJECT_VALUE_ATTR), (void**) &val) == SUCCESS) {
- *newvalue = *val;
- }
- } else {
- *newvalue = value;
- }
- }
- }
-
- return type;
-}
-
-
-/* {{{ proto bool xmlrpc_set_type(string value, string type)
- Sets xmlrpc type, base64 or datetime, for a PHP string value */
-PHP_FUNCTION(xmlrpc_set_type)
-{
- zval* arg, *type;
- XMLRPC_VALUE_TYPE vtype;
-
- if (!(ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &arg, &type) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-#if ZEND_MODULE_API_NO < 20010901
- if (!ParameterPassedByReference(ht,1)) {
- zend_error(E_WARNING,"first argument to xmlrpc_set_type() passed by value, expecting reference");
- }
-#endif
-
- convert_to_string(type);
- vtype = xmlrpc_str_as_type(Z_STRVAL_P(type));
- if (vtype != xmlrpc_none) {
- if (set_zval_xmlrpc_type(arg, vtype) == SUCCESS) {
- RETURN_TRUE;
- }
- } else {
- zend_error(E_WARNING,"invalid type '%s' passed to xmlrpc_set_type()", Z_STRVAL_P(type));
- }
- RETURN_FALSE;
-}
-
-/* {{{ proto string xmlrpc_get_type(mixed value)
- Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings */
-PHP_FUNCTION(xmlrpc_get_type)
-{
- zval* arg;
- XMLRPC_VALUE_TYPE type;
- XMLRPC_VECTOR_TYPE vtype = xmlrpc_vector_none;
-
- if (!(ARG_COUNT(ht) == 1) || getParameters(ht, ARG_COUNT(ht), &arg) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- type = get_zval_xmlrpc_type(arg, 0);
- if (type == xmlrpc_vector) {
- vtype = determine_vector_type(Z_ARRVAL_P(arg));
- }
-
- RETURN_STRING((char*) xmlrpc_type_as_str(type, vtype), 1);
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
diff --git a/ext/rpc/xmlrpc/xmlrpc.dsp b/ext/rpc/xmlrpc/xmlrpc.dsp
deleted file mode 100644
index f5164ae3da..0000000000
--- a/ext/rpc/xmlrpc/xmlrpc.dsp
+++ /dev/null
@@ -1,211 +0,0 @@
-# Microsoft Developer Studio Project File - Name="xmlrpc" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xmlrpc - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xmlrpc.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xmlrpc.mak" CFG="xmlrpc - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xmlrpc - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xmlrpc - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xmlrpc - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libxmlrpc" /I "..\xml\expat" /D HAVE_XMLRPC=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D ZTS=1 /D COMPILE_DL_XMLRPC=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "_DEBUG"
-# ADD RSC /l 0x1009 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 iconv.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_xmlrpc.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "xmlrpc - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libxmlrpc" /I "..\xml\expat" /D HAVE_XMLRPC=1 /D "ZEND_WIN32" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D ZTS=1 /D COMPILE_DL_XMLRPC=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "NDEBUG"
-# ADD RSC /l 0x1009 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 iconv.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xmlrpc.dll" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "xmlrpc - Win32 Debug_TS"
-# Name "xmlrpc - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=".\xmlrpc-epi-php.c"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_xmlrpc.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Group "libxmlrpc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\libxmlrpc\base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\encodings.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\encodings.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\queue.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\queue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\simplestring.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\simplestring.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\system_methods.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\system_methods_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_element.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_element.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_dandarpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_dandarpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_soap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_soap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_xmlrpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_xmlrpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_private.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/satellite/CREDITS b/ext/satellite/CREDITS
deleted file mode 100644
index 766ed2e151..0000000000
--- a/ext/satellite/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Satellite (CORBA)
-David Eriksson
diff --git a/ext/satellite/EXPERIMENTAL b/ext/satellite/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/satellite/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/satellite/README b/ext/satellite/README
deleted file mode 100644
index d19d60eccf..0000000000
--- a/ext/satellite/README
+++ /dev/null
@@ -1,8 +0,0 @@
-$Id$
-
-Satellite has been moved to PEAR, The PHP Extension and Application Repository.
-
-It is located in /pear/PECL/satellite/
-
-See http://pear.php.net/faq.php#faq-6 for information about installing a C module from PEAR.
-
diff --git a/ext/session/CREDITS b/ext/session/CREDITS
deleted file mode 100644
index 79659c7035..0000000000
--- a/ext/session/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sessions
-Sascha Schumann, Andrei Zmievski
diff --git a/ext/session/config.m4 b/ext/session/config.m4
deleted file mode 100644
index 7259849c79..0000000000
--- a/ext/session/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mm,for mm support,
-[ --with-mm[=DIR] Include mm support for session storage])
-
-PHP_ARG_ENABLE(session, whether to enable PHP sessions,
-[ --disable-session Disable session support], yes)
-
-if test "$PHP_MM" != "no"; then
- for i in /usr/local /usr $PHP_MM; do
- if test -f "$i/include/mm.h"; then
- MM_DIR=$i
- fi
- done
-
- if test -z "$MM_DIR" ; then
- AC_MSG_ERROR(cannot find mm library)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(mm, $MM_DIR/lib, SESSION_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MM_DIR/include)
- AC_DEFINE(HAVE_LIBMM, 1, [Whether you have libmm])
- PHP_MODULE_PTR(phpext_ps_mm_ptr)
-fi
-
-if test "$PHP_SESSION" != "no"; then
- AC_CHECK_FUNCS(pread pwrite)
- PHP_MISSING_PWRITE_DECL
- PHP_MISSING_PREAD_DECL
- PHP_NEW_EXTENSION(session, session.c mod_files.c mod_mm.c mod_user.c, $ext_shared)
- PHP_SUBST(SESSION_SHARED_LIBADD)
- AC_DEFINE(HAVE_PHP_SESSION,1,[ ])
-fi
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
deleted file mode 100644
index fca2df393e..0000000000
--- a/ext/session/mod_files.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#if HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#if HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifdef PHP_WIN32
-#include "win32/readdir.h"
-#endif
-#include <time.h>
-
-#include <fcntl.h>
-#include <errno.h>
-
-#include "php_session.h"
-#include "mod_files.h"
-#include "ext/standard/flock_compat.h"
-
-#define FILE_PREFIX "sess_"
-
-typedef struct {
- int fd;
- char *lastkey;
- char *basedir;
- size_t basedir_len;
- size_t dirdepth;
- size_t st_size;
-} ps_files;
-
-ps_module ps_mod_files = {
- PS_MOD(files)
-};
-
-static int ps_files_valid_key(const char *key)
-{
- size_t len;
- const char *p;
- char c;
- int ret = 1;
-
- for (p = key; (c = *p); p++) {
- /* valid characters are a..z,A..Z,0..9 */
- if (!((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- (c >= '0' && c <= '9'))) {
- ret = 0;
- break;
- }
- }
-
- len = p - key;
-
- if (len == 0)
- ret = 0;
-
- return ret;
-}
-
-static char *ps_files_path_create(char *buf, size_t buflen, ps_files *data, const char *key)
-{
- size_t key_len;
- const char *p;
- int i;
- int n;
-
- key_len = strlen(key);
- if (key_len <= data->dirdepth || buflen <
- (strlen(data->basedir) + 2 * data->dirdepth + key_len + 5 + sizeof(FILE_PREFIX)))
- return NULL;
- p = key;
- memcpy(buf, data->basedir, data->basedir_len);
- n = data->basedir_len;
- buf[n++] = PHP_DIR_SEPARATOR;
- for (i = 0; i < (int)data->dirdepth; i++) {
- buf[n++] = *p++;
- buf[n++] = PHP_DIR_SEPARATOR;
- }
- memcpy(buf + n, FILE_PREFIX, sizeof(FILE_PREFIX) - 1);
- n += sizeof(FILE_PREFIX) - 1;
- memcpy(buf + n, key, key_len);
- n += key_len;
- buf[n] = '\0';
-
- return buf;
-}
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-static void ps_files_close(ps_files *data)
-{
- if (data->fd != -1) {
- close(data->fd);
- data->fd = -1;
- }
-}
-
-static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
-{
- char buf[MAXPATHLEN];
-
- if (data->fd < 0 || !data->lastkey || strcmp(key, data->lastkey)) {
- if (data->lastkey) {
- efree(data->lastkey);
- data->lastkey = NULL;
- }
-
- ps_files_close(data);
-
- if (!ps_files_valid_key(key) ||
- !ps_files_path_create(buf, sizeof(buf), data, key))
- return;
-
- data->lastkey = estrdup(key);
-
- data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 0600);
-
- if (data->fd != -1) {
- flock(data->fd, LOCK_EX);
-
-#ifdef F_SETFD
- if (fcntl(data->fd, F_SETFD, 1)) {
- php_error(E_WARNING, "fcntl(%d, F_SETFD, 1) failed: %s (%d)", data->fd, strerror(errno), errno);
- }
-#endif
- } else {
- php_error(E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf,
- strerror(errno), errno);
- }
- }
-}
-
-static int ps_files_cleanup_dir(const char *dirname, int maxlifetime TSRMLS_DC)
-{
- DIR *dir;
- char dentry[sizeof(struct dirent) + MAXPATHLEN];
- struct dirent *entry = (struct dirent *) &dentry;
- struct stat sbuf;
- char buf[MAXPATHLEN];
- time_t now;
- int nrdels = 0;
- size_t dirname_len;
-
- dir = opendir(dirname);
- if (!dir) {
- php_error(E_NOTICE, "ps_files_cleanup_dir: opendir(%s) failed: %s (%d)\n", dirname, strerror(errno), errno);
- return (0);
- }
-
- time(&now);
-
- dirname_len = strlen(dirname);
-
- /* Prepare buffer (dirname never changes) */
- memcpy(buf, dirname, dirname_len);
- buf[dirname_len] = PHP_DIR_SEPARATOR;
-
- while (php_readdir_r(dir, (struct dirent *) dentry, &entry) == 0 && entry) {
- /* does the file start with our prefix? */
- if (!strncmp(entry->d_name, FILE_PREFIX, sizeof(FILE_PREFIX) - 1)) {
- size_t entry_len;
-
- entry_len = strlen(entry->d_name);
- /* does it fit into our buffer? */
- if (entry_len + dirname_len + 2 < MAXPATHLEN) {
- /* create the full path.. */
- memcpy(buf + dirname_len + 1, entry->d_name, entry_len);
- /* NUL terminate it and */
- buf[dirname_len + entry_len + 1] = '\0';
- /* check whether its last access was more than maxlifet ago */
- if (VCWD_STAT(buf, &sbuf) == 0 &&
- (now - sbuf.st_atime) > maxlifetime) {
- VCWD_UNLINK(buf);
- nrdels++;
- }
- }
- }
- }
-
- closedir(dir);
-
- return (nrdels);
-}
-
-#define PS_FILES_DATA ps_files *data = PS_GET_MOD_DATA()
-
-PS_OPEN_FUNC(files)
-{
- ps_files *data;
- char *p;
-
- data = ecalloc(sizeof(*data), 1);
- PS_SET_MOD_DATA(data);
-
- data->fd = -1;
- if ((p = strchr(save_path, ';'))) {
- data->dirdepth = (size_t) strtol(save_path, NULL, 10);
- save_path = p + 1;
- }
- data->basedir_len = strlen(save_path);
- data->basedir = estrndup(save_path, data->basedir_len);
-
- return SUCCESS;
-}
-
-PS_CLOSE_FUNC(files)
-{
- PS_FILES_DATA;
-
- ps_files_close(data);
-
- if (data->lastkey)
- efree(data->lastkey);
- efree(data->basedir);
- efree(data);
- *mod_data = NULL;
-
- return SUCCESS;
-}
-
-PS_READ_FUNC(files)
-{
- long n;
- struct stat sbuf;
- PS_FILES_DATA;
-
- ps_files_open(data, key TSRMLS_CC);
- if (data->fd < 0)
- return FAILURE;
-
- if (fstat(data->fd, &sbuf))
- return FAILURE;
-
- data->st_size = *vallen = sbuf.st_size;
- *val = emalloc(sbuf.st_size);
-
-#ifdef HAVE_PREAD
- n = pread(data->fd, *val, sbuf.st_size, 0);
-#else
- lseek(data->fd, 0, SEEK_SET);
- n = read(data->fd, *val, sbuf.st_size);
-#endif
- if (n != sbuf.st_size) {
- efree(*val);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PS_WRITE_FUNC(files)
-{
- long n;
- PS_FILES_DATA;
-
- ps_files_open(data, key TSRMLS_CC);
- if (data->fd < 0)
- return FAILURE;
-
- /*
- * truncate file, if the amount of new data is smaller than
- * the existing data set.
- */
-
- if (vallen < (int)data->st_size)
- ftruncate(data->fd, 0);
-
-#ifdef HAVE_PWRITE
- n = pwrite(data->fd, val, vallen, 0);
-#else
- lseek(data->fd, 0, SEEK_SET);
- n = write(data->fd, val, vallen);
-#endif
-
- if (n != vallen) {
- php_error(E_WARNING, "write failed: %s (%d)", strerror(errno), errno);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PS_DESTROY_FUNC(files)
-{
- char buf[MAXPATHLEN];
- PS_FILES_DATA;
-
- if (!ps_files_path_create(buf, sizeof(buf), data, key))
- return FAILURE;
-
- ps_files_close(data);
-
- if (VCWD_UNLINK(buf) == -1) {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PS_GC_FUNC(files)
-{
- PS_FILES_DATA;
-
- /* we don't perform any cleanup, if dirdepth is larger than 0.
- we return SUCCESS, since all cleanup should be handled by
- an external entity (i.e. find -ctime x | xargs rm) */
-
- if (data->dirdepth == 0)
- *nrdels = ps_files_cleanup_dir(data->basedir, maxlifetime TSRMLS_CC);
-
- return SUCCESS;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/session/mod_files.h b/ext/session/mod_files.h
deleted file mode 100644
index b95ec9c940..0000000000
--- a/ext/session/mod_files.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef MOD_FILES_H
-#define MOD_FILES_H
-
-extern ps_module ps_mod_files;
-#define ps_files_ptr &ps_mod_files
-
-PS_FUNCS(files);
-
-#endif
diff --git a/ext/session/mod_files.sh b/ext/session/mod_files.sh
deleted file mode 100644
index 4d6a681d9c..0000000000
--- a/ext/session/mod_files.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /bin/sh
-
-if test "$2" = ""; then
- echo "usage: $0 basedir depth"
- exit 1
-fi
-
-if test "$2" = "0"; then
- exit 0
-fi
-
-for i in a b c d e f 0 1 2 3 4 5 6 7 8 9; do
- newpath="$1/$i"
- mkdir $newpath || exit 1
- sh $0 $newpath `expr $2 - 1`
-done
diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c
deleted file mode 100644
index 1f05b4b733..0000000000
--- a/ext/session/mod_mm.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef HAVE_LIBMM
-
-#include <unistd.h>
-#include <mm.h>
-#include <time.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#include "php_session.h"
-#include "mod_mm.h"
-#include "SAPI.h"
-
-#ifdef ZTS
-# error mm is not thread-safe
-#endif
-
-#define PS_MM_FILE "session_mm_"
-
-/* For php_uint32 */
-#include "ext/standard/basic_functions.h"
-
-/*
- * this list holds all data associated with one session
- */
-
-typedef struct ps_sd {
- struct ps_sd *next;
- php_uint32 hv; /* hash value of key */
- time_t ctime; /* time of last change */
- void *data;
- size_t datalen; /* amount of valid data */
- size_t alloclen; /* amount of allocated memory for data */
- char key[1]; /* inline key */
-} ps_sd;
-
-typedef struct {
- MM *mm;
- ps_sd **hash;
- php_uint32 hash_max;
- php_uint32 hash_cnt;
- pid_t owner;
-} ps_mm;
-
-static ps_mm *ps_mm_instance = NULL;
-
-#if 0
-#define ps_mm_debug(a) printf a
-#else
-#define ps_mm_debug(a)
-#endif
-
-static inline php_uint32 ps_sd_hash(const char *data, int len)
-{
- php_uint32 h;
- const char *e = data + len;
-
- for (h = 2166136261U; data < e; ) {
- h *= 16777619;
- h ^= *data++;
- }
-
- return h;
-}
-
-static void hash_split(ps_mm *data)
-{
- php_uint32 nmax;
- ps_sd **nhash;
- ps_sd **ohash, **ehash;
- ps_sd *ps, *next;
-
- nmax = ((data->hash_max + 1) << 1) - 1;
- nhash = mm_calloc(data->mm, nmax + 1, sizeof(*data->hash));
-
- if (!nhash) {
- /* no further memory to expand hash table */
- return;
- }
-
- ehash = data->hash + data->hash_max + 1;
- for (ohash = data->hash; ohash < ehash; ohash++) {
- for (ps = *ohash; ps; ps = next) {
- next = ps->next;
- ps->next = nhash[ps->hv & nmax];
- nhash[ps->hv & nmax] = ps;
- }
- }
- mm_free(data->mm, data->hash);
-
- data->hash = nhash;
- data->hash_max = nmax;
-}
-
-static ps_sd *ps_sd_new(ps_mm *data, const char *key)
-{
- php_uint32 hv, slot;
- ps_sd *sd;
- int keylen;
-
- keylen = strlen(key);
-
- sd = mm_malloc(data->mm, sizeof(ps_sd) + keylen);
- if (!sd) {
- php_error(E_WARNING, "mm_malloc failed, avail %d, err %s", mm_available(data->mm), mm_error());
- return NULL;
- }
-
- hv = ps_sd_hash(key, keylen);
- slot = hv & data->hash_max;
-
- sd->ctime = 0;
- sd->hv = hv;
- sd->data = NULL;
- sd->alloclen = sd->datalen = 0;
-
- memcpy(sd->key, key, keylen + 1);
-
- sd->next = data->hash[slot];
- data->hash[slot] = sd;
-
- data->hash_cnt++;
-
- if (!sd->next) {
- if (data->hash_cnt >= data->hash_max)
- hash_split(data);
- }
-
- ps_mm_debug(("inserting %s(%p) into slot %d\n", key, sd, slot));
-
- return sd;
-}
-
-static void ps_sd_destroy(ps_mm *data, ps_sd *sd)
-{
- php_uint32 slot;
-
- slot = ps_sd_hash(sd->key, strlen(sd->key)) & data->hash_max;
-
- if (data->hash[slot] == sd)
- data->hash[slot] = sd->next;
- else {
- ps_sd *prev;
-
- /* There must be some entry before the one we want to delete */
- for (prev = data->hash[slot]; prev->next != sd; prev = prev->next);
- prev->next = sd->next;
- }
-
- data->hash_cnt--;
- if (sd->data)
- mm_free(data->mm, sd->data);
- mm_free(data->mm, sd);
-}
-
-static ps_sd *ps_sd_lookup(ps_mm *data, const char *key, int rw)
-{
- php_uint32 hv, slot;
- ps_sd *ret, *prev;
-
- hv = ps_sd_hash(key, strlen(key));
- slot = hv & data->hash_max;
-
- for (prev = NULL, ret = data->hash[slot]; ret; prev = ret, ret = ret->next)
- if (ret->hv == hv && !strcmp(ret->key, key))
- break;
-
- if (ret && rw && ret != data->hash[slot]) {
- /* Move the entry to the top of the linked list */
-
- if (prev)
- prev->next = ret->next;
- ret->next = data->hash[slot];
- data->hash[slot] = ret;
- }
-
- ps_mm_debug(("lookup(%s): ret=%p,hv=%u,slot=%d\n", key, ret, hv, slot));
-
- return ret;
-}
-
-ps_module ps_mod_mm = {
- PS_MOD(mm)
-};
-
-#define PS_MM_DATA ps_mm *data = PS_GET_MOD_DATA()
-
-static int ps_mm_initialize(ps_mm *data, const char *path)
-{
- data->owner = getpid();
- data->mm = mm_create(0, path);
- if (!data->mm) {
- return FAILURE;
- }
-
- data->hash_cnt = 0;
- data->hash_max = 511;
- data->hash = mm_calloc(data->mm, data->hash_max + 1, sizeof(ps_sd *));
- if (!data->hash) {
- mm_destroy(data->mm);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static void ps_mm_destroy(ps_mm *data)
-{
- int h;
- ps_sd *sd, *next;
-
- /* This function is called during each module shutdown,
- but we must not release the shared memory pool, when
- an Apache child dies! */
- if (data->owner != getpid()) return;
-
- for (h = 0; h < data->hash_max + 1; h++)
- for (sd = data->hash[h]; sd; sd = next) {
- next = sd->next;
- ps_sd_destroy(data, sd);
- }
-
- mm_free(data->mm, data->hash);
- mm_destroy(data->mm);
- free(data);
-}
-
-PHP_MINIT_FUNCTION(ps_mm)
-{
- int save_path_len = strlen(PS(save_path));
- int mod_name_len = strlen(sapi_module.name);
- char *ps_mm_path, euid[30];
- int ret;
-
- ps_mm_instance = calloc(sizeof(*ps_mm_instance), 1);
- if (!ps_mm_instance)
- return FAILURE;
-
- if (!sprintf(euid,"%d", geteuid()))
- return FAILURE;
-
- /* Directory + '/' + File + Module Name + Effective UID + \0 */
- ps_mm_path = do_alloca(save_path_len+1+sizeof(PS_MM_FILE)+mod_name_len+strlen(euid)+1);
-
- memcpy(ps_mm_path, PS(save_path), save_path_len + 1);
- if (save_path_len > 0 && ps_mm_path[save_path_len - 1] != DEFAULT_SLASH) {
- ps_mm_path[save_path_len] = DEFAULT_SLASH;
- ps_mm_path[save_path_len+1] = '\0';
- }
- strcat(ps_mm_path, PS_MM_FILE);
- strcat(ps_mm_path, sapi_module.name);
- strcat(ps_mm_path, euid);
-
- ret = ps_mm_initialize(ps_mm_instance, ps_mm_path);
-
- free_alloca(ps_mm_path);
-
- if (ret != SUCCESS) {
- free(ps_mm_instance);
- ps_mm_instance = NULL;
- return FAILURE;
- }
-
- php_session_register_module(&ps_mod_mm);
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(ps_mm)
-{
- if (ps_mm_instance) {
- ps_mm_destroy(ps_mm_instance);
- return SUCCESS;
- }
- return FAILURE;
-}
-
-PS_OPEN_FUNC(mm)
-{
- ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance));
-
- if (!ps_mm_instance)
- return FAILURE;
-
- PS_SET_MOD_DATA(ps_mm_instance);
-
- return SUCCESS;
-}
-
-PS_CLOSE_FUNC(mm)
-{
- PS_SET_MOD_DATA(NULL);
-
- return SUCCESS;
-}
-
-PS_READ_FUNC(mm)
-{
- PS_MM_DATA;
- ps_sd *sd;
- int ret = FAILURE;
-
- mm_lock(data->mm, MM_LOCK_RD);
-
- sd = ps_sd_lookup(data, key, 0);
- if (sd) {
- *vallen = sd->datalen;
- *val = emalloc(sd->datalen + 1);
- memcpy(*val, sd->data, sd->datalen);
- (*val)[sd->datalen] = '\0';
- ret = SUCCESS;
- }
-
- mm_unlock(data->mm);
-
- return ret;
-}
-
-PS_WRITE_FUNC(mm)
-{
- PS_MM_DATA;
- ps_sd *sd;
-
- mm_lock(data->mm, MM_LOCK_RW);
-
- sd = ps_sd_lookup(data, key, 1);
- if (!sd) {
- sd = ps_sd_new(data, key);
- ps_mm_debug(("new entry for %s\n", key));
- }
-
- if (sd) {
- if (vallen >= sd->alloclen) {
- if (data->mm)
- mm_free(data->mm, sd->data);
- sd->alloclen = vallen + 1;
- sd->data = mm_malloc(data->mm, sd->alloclen);
-
- if (!sd->data) {
- ps_sd_destroy(data, sd);
- php_error(E_WARNING, "cannot allocate new data segment");
- sd = NULL;
- }
- }
- if (sd) {
- sd->datalen = vallen;
- memcpy(sd->data, val, vallen);
- time(&sd->ctime);
- }
- }
-
- mm_unlock(data->mm);
-
- return sd ? SUCCESS : FAILURE;
-}
-
-PS_DESTROY_FUNC(mm)
-{
- PS_MM_DATA;
- ps_sd *sd;
-
- mm_lock(data->mm, MM_LOCK_RW);
-
- sd = ps_sd_lookup(data, key, 0);
- if (sd)
- ps_sd_destroy(data, sd);
-
- mm_unlock(data->mm);
-
- return SUCCESS;
-}
-
-PS_GC_FUNC(mm)
-{
- PS_MM_DATA;
- time_t limit;
- ps_sd **ohash, **ehash;
- ps_sd *sd, *next;
-
- *nrdels = 0;
- ps_mm_debug(("gc\n"));
-
- time(&limit);
-
- limit -= maxlifetime;
-
- mm_lock(data->mm, MM_LOCK_RW);
-
- ehash = data->hash + data->hash_max + 1;
- for (ohash = data->hash; ohash < ehash; ohash++)
- for (sd = *ohash; sd; sd = next) {
- next = sd->next;
- if (sd->ctime < limit) {
- ps_mm_debug(("purging %s\n", sd->key));
- ps_sd_destroy(data, sd);
- (*nrdels)++;
- }
- }
-
- mm_unlock(data->mm);
-
- return SUCCESS;
-}
-
-zend_module_entry php_session_mm_module = {
- STANDARD_MODULE_HEADER,
- "session mm",
- NULL,
- PHP_MINIT(ps_mm), PHP_MSHUTDOWN(ps_mm),
- NULL, NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/session/mod_mm.h b/ext/session/mod_mm.h
deleted file mode 100644
index 39df1a73cd..0000000000
--- a/ext/session/mod_mm.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef MOD_MM_H
-#define MOD_MM_H
-
-#ifdef HAVE_LIBMM
-
-#include "php_session.h"
-
-extern ps_module ps_mod_mm;
-#define ps_mm_ptr &ps_mod_mm
-
-extern zend_module_entry php_session_mm_module;
-#define phpext_ps_mm_ptr &php_session_mm_module
-
-PS_FUNCS(mm);
-
-#else
-
-#define ps_mm_ptr NULL
-#define phpext_ps_mm_ptr NULL
-
-#endif
-
-#endif
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
deleted file mode 100644
index 970f1ef7c0..0000000000
--- a/ext/session/mod_user.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_session.h"
-#include "mod_user.h"
-
-ps_module ps_mod_user = {
- PS_MOD(user)
-};
-
-#define SESS_ZVAL_LONG(val, a) \
-{ \
- MAKE_STD_ZVAL(a); \
- Z_TYPE_P(a) = IS_LONG; \
- Z_LVAL_P(a) = val; \
-}
-
-#define SESS_ZVAL_STRING(vl, a) \
-{ \
- int len = strlen(vl); \
- MAKE_STD_ZVAL(a); \
- Z_TYPE_P(a) = IS_STRING; \
- Z_STRLEN_P(a) = len; \
- Z_STRVAL_P(a) = estrndup(vl, len); \
-}
-
-#define SESS_ZVAL_STRINGN(vl, ln, a) \
-{ \
- MAKE_STD_ZVAL(a); \
- Z_TYPE_P(a) = IS_STRING; \
- Z_STRLEN_P(a) = ln; \
- Z_STRVAL_P(a) = estrndup(vl, ln); \
-}
-
-
-static zval *ps_call_handler(zval *func, int argc, zval **argv TSRMLS_DC)
-{
- int i;
- zval *retval = NULL;
-
- MAKE_STD_ZVAL(retval);
- if (call_user_function(EG(function_table), NULL, func, retval,
- argc, argv TSRMLS_CC) == FAILURE) {
- zval_ptr_dtor(&retval);
- retval = NULL;
- }
-
- for (i = 0; i < argc; i++) {
- zval_ptr_dtor(&argv[i]);
- }
-
- return retval;
-}
-
-#define STDVARS \
- zval *retval; \
- int ret = FAILURE; \
- ps_user *mdata = PS_GET_MOD_DATA(); \
- if (!mdata) \
- return FAILURE
-
-#define PSF(a) mdata->name.ps_##a
-
-#define FINISH \
- if (retval) { \
- convert_to_long(retval); \
- ret = Z_LVAL_P(retval); \
- zval_ptr_dtor(&retval); \
- } \
- return ret
-
-PS_OPEN_FUNC(user)
-{
- zval *args[2];
- STDVARS;
-
- SESS_ZVAL_STRING(save_path, args[0]);
- SESS_ZVAL_STRING(session_name, args[1]);
-
- retval = ps_call_handler(PSF(open), 2, args TSRMLS_CC);
-
- FINISH;
-}
-
-PS_CLOSE_FUNC(user)
-{
- int i;
- STDVARS;
-
- retval = ps_call_handler(PSF(close), 0, NULL TSRMLS_CC);
-
- for (i = 0; i < 6; i++)
- zval_ptr_dtor(&mdata->names[i]);
- efree(mdata);
-
- PS_SET_MOD_DATA(NULL);
-
- FINISH;
-}
-
-PS_READ_FUNC(user)
-{
- zval *args[1];
- STDVARS;
-
- SESS_ZVAL_STRING(key, args[0]);
-
- retval = ps_call_handler(PSF(read), 1, args TSRMLS_CC);
-
- if (retval) {
- if (Z_TYPE_P(retval) == IS_STRING) {
- *val = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- *vallen = Z_STRLEN_P(retval);
- ret = SUCCESS;
- }
- zval_ptr_dtor(&retval);
- }
-
- return ret;
-}
-
-PS_WRITE_FUNC(user)
-{
- zval *args[2];
- STDVARS;
-
- SESS_ZVAL_STRING(key, args[0]);
- SESS_ZVAL_STRINGN(val, vallen, args[1]);
-
- retval = ps_call_handler(PSF(write), 2, args TSRMLS_CC);
-
- FINISH;
-}
-
-PS_DESTROY_FUNC(user)
-{
- zval *args[1];
- STDVARS;
-
- SESS_ZVAL_STRING(key, args[0]);
-
- retval = ps_call_handler(PSF(destroy), 1, args TSRMLS_CC);
-
- FINISH;
-}
-
-PS_GC_FUNC(user)
-{
- zval *args[1];
- STDVARS;
-
- SESS_ZVAL_LONG(maxlifetime, args[0]);
-
- retval = ps_call_handler(PSF(gc), 1, args TSRMLS_CC);
-
- FINISH;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/session/mod_user.h b/ext/session/mod_user.h
deleted file mode 100644
index c50734a444..0000000000
--- a/ext/session/mod_user.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef MOD_USER_H
-#define MOD_USER_H
-
-typedef union {
- zval *names[6];
- struct {
- zval *ps_open;
- zval *ps_close;
- zval *ps_read;
- zval *ps_write;
- zval *ps_destroy;
- zval *ps_gc;
- } name;
-} ps_user;
-
-extern ps_module ps_mod_user;
-#define ps_user_ptr &ps_mod_user
-
-PS_FUNCS(user);
-
-#endif
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
deleted file mode 100644
index c458b11b56..0000000000
--- a/ext/session/php_session.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SESSION_H
-#define PHP_SESSION_H
-
-#include "ext/standard/php_var.h"
-
-#define PHP_SESSION_API 20020330
-
-#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name TSRMLS_DC
-#define PS_CLOSE_ARGS void **mod_data TSRMLS_DC
-#define PS_READ_ARGS void **mod_data, const char *key, char **val, int *vallen TSRMLS_DC
-#define PS_WRITE_ARGS void **mod_data, const char *key, const char *val, const int vallen TSRMLS_DC
-#define PS_DESTROY_ARGS void **mod_data, const char *key TSRMLS_DC
-#define PS_GC_ARGS void **mod_data, int maxlifetime, int *nrdels TSRMLS_DC
-#define PS_CREATE_SID_ARGS void **mod_data, int *newlen TSRMLS_DC
-
-/* default create id function */
-char *php_session_create_id(PS_CREATE_SID_ARGS);
-
-typedef struct ps_module_struct {
- const char *name;
- int (*open)(PS_OPEN_ARGS);
- int (*close)(PS_CLOSE_ARGS);
- int (*read)(PS_READ_ARGS);
- int (*write)(PS_WRITE_ARGS);
- int (*destroy)(PS_DESTROY_ARGS);
- int (*gc)(PS_GC_ARGS);
- char *(*create_sid)(PS_CREATE_SID_ARGS);
-} ps_module;
-
-#define PS_GET_MOD_DATA() *mod_data
-#define PS_SET_MOD_DATA(a) *mod_data = (a)
-
-#define PS_OPEN_FUNC(x) int ps_open_##x(PS_OPEN_ARGS)
-#define PS_CLOSE_FUNC(x) int ps_close_##x(PS_CLOSE_ARGS)
-#define PS_READ_FUNC(x) int ps_read_##x(PS_READ_ARGS)
-#define PS_WRITE_FUNC(x) int ps_write_##x(PS_WRITE_ARGS)
-#define PS_DESTROY_FUNC(x) int ps_delete_##x(PS_DESTROY_ARGS)
-#define PS_GC_FUNC(x) int ps_gc_##x(PS_GC_ARGS)
-#define PS_CREATE_SID_FUNC(x) char *ps_create_sid_##x(PS_CREATE_SID_ARGS)
-
-#define PS_FUNCS(x) \
- PS_OPEN_FUNC(x); \
- PS_CLOSE_FUNC(x); \
- PS_READ_FUNC(x); \
- PS_WRITE_FUNC(x); \
- PS_DESTROY_FUNC(x); \
- PS_GC_FUNC(x); \
- PS_CREATE_SID_FUNC(x)
-
-#define PS_MOD(x) \
- #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
- ps_delete_##x, ps_gc_##x, php_session_create_id
-
-/* SID enabled module handler definitions */
-#define PS_FUNCS_SID(x) \
- PS_OPEN_FUNC(x); \
- PS_CLOSE_FUNC(x); \
- PS_READ_FUNC(x); \
- PS_WRITE_FUNC(x); \
- PS_DESTROY_FUNC(x); \
- PS_GC_FUNC(x); \
- PS_CREATE_SID_FUNC(x)
-
-#define PS_MOD_SID(x) \
- #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
- ps_delete_##x, ps_gc_##x, ps_create_sid_##x
-
-typedef enum {
- php_session_disabled,
- php_session_none,
- php_session_active
-} php_session_status;
-
-typedef struct _php_ps_globals {
- char *save_path;
- char *session_name;
- char *id;
- char *extern_referer_chk;
- char *entropy_file;
- char *cache_limiter;
- long entropy_length;
- long cookie_lifetime;
- char *cookie_path;
- char *cookie_domain;
- zend_bool cookie_secure;
- ps_module *mod;
- void *mod_data;
- HashTable vars;
- php_session_status session_status;
- long gc_probability;
- long gc_maxlifetime;
- int module_number;
- long cache_expire;
- const struct ps_serializer_struct *serializer;
- zval *http_session_vars;
- zend_bool auto_start;
- zend_bool use_cookies;
- zend_bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
- zend_bool apply_trans_sid; /* whether or not to enable trans-sid for the current request */
-} php_ps_globals;
-
-typedef php_ps_globals zend_ps_globals;
-
-extern zend_module_entry session_module_entry;
-#define phpext_session_ptr &session_module_entry
-
-PHP_FUNCTION(session_name);
-PHP_FUNCTION(session_module_name);
-PHP_FUNCTION(session_save_path);
-PHP_FUNCTION(session_id);
-PHP_FUNCTION(session_decode);
-PHP_FUNCTION(session_register);
-PHP_FUNCTION(session_unregister);
-PHP_FUNCTION(session_is_registered);
-PHP_FUNCTION(session_encode);
-PHP_FUNCTION(session_start);
-PHP_FUNCTION(session_destroy);
-PHP_FUNCTION(session_unset);
-PHP_FUNCTION(session_set_save_handler);
-PHP_FUNCTION(session_cache_expire);
-PHP_FUNCTION(session_cache_limiter);
-PHP_FUNCTION(session_set_cookie_params);
-PHP_FUNCTION(session_get_cookie_params);
-PHP_FUNCTION(session_write_close);
-
-#ifdef ZTS
-#define PS(v) TSRMG(ps_globals_id, php_ps_globals *, v)
-#else
-#define PS(v) (ps_globals.v)
-#endif
-
-#define PS_SERIALIZER_ENCODE_ARGS char **newstr, int *newlen TSRMLS_DC
-#define PS_SERIALIZER_DECODE_ARGS const char *val, int vallen TSRMLS_DC
-
-typedef struct ps_serializer_struct {
- const char *name;
- int (*encode)(PS_SERIALIZER_ENCODE_ARGS);
- int (*decode)(PS_SERIALIZER_DECODE_ARGS);
-} ps_serializer;
-
-#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x
-#define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x
-
-#define PS_SERIALIZER_ENCODE_FUNC(x) \
- int PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS)
-#define PS_SERIALIZER_DECODE_FUNC(x) \
- int PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)
-
-#define PS_SERIALIZER_FUNCS(x) \
- PS_SERIALIZER_ENCODE_FUNC(x); \
- PS_SERIALIZER_DECODE_FUNC(x)
-
-#define PS_SERIALIZER_ENTRY(x) \
- { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) }
-
-PHPAPI void session_adapt_url(const char *, size_t, char **, size_t * TSRMLS_DC);
-
-void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC);
-int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC);
-
-PHPAPI int php_session_register_module(ps_module *);
-
-PHPAPI int php_session_register_serializer(const char *name,
- int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
- int (*decode)(PS_SERIALIZER_DECODE_ARGS));
-
-PHPAPI void php_session_set_id(char *id TSRMLS_DC);
-PHPAPI void php_session_start(TSRMLS_D);
-
-#define PS_ADD_VARL(name,namelen) \
- zend_hash_add_empty_element(&PS(vars), name, namelen + 1)
-
-#define PS_ADD_VAR(name) PS_ADD_VARL(name, strlen(name))
-
-#define PS_DEL_VARL(name,namelen) \
- zend_hash_del(&PS(vars), name, namelen+1); \
- if (PS(http_session_vars)) { \
- zend_hash_del(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1); \
- }
-
-
-#define PS_ENCODE_VARS \
- char *key; \
- uint key_length; \
- ulong num_key; \
- zval **struc;
-
-#define PS_ENCODE_LOOP(code) \
- for (zend_hash_internal_pointer_reset(&PS(vars)); \
- zend_hash_get_current_key_ex(&PS(vars), &key, &key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \
- zend_hash_move_forward(&PS(vars))) { \
- key_length--; \
- if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \
- code; \
- } \
- }
-
-ZEND_EXTERN_MODULE_GLOBALS(ps);
-
-void php_session_auto_start(void *data);
-void php_session_shutdown(void *data);
-
-#endif
diff --git a/ext/session/session.c b/ext/session/session.c
deleted file mode 100644
index 849725a4c4..0000000000
--- a/ext/session/session.c
+++ /dev/null
@@ -1,1489 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#else
-#include <sys/time.h>
-#endif
-
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "php_ini.h"
-#include "SAPI.h"
-#include "php_session.h"
-#include "ext/standard/md5.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/datetime.h"
-#include "ext/standard/php_lcg.h"
-#include "ext/standard/url_scanner_ex.h"
-#include "ext/standard/php_rand.h" /* for RAND_MAX */
-#include "ext/standard/info.h"
-
-#include "ext/standard/php_smart_str.h"
-
-#include "mod_files.h"
-#include "mod_user.h"
-
-/* {{{ session_functions[]
- */
-function_entry session_functions[] = {
- PHP_FE(session_name, NULL)
- PHP_FE(session_module_name, NULL)
- PHP_FE(session_save_path, NULL)
- PHP_FE(session_id, NULL)
- PHP_FE(session_decode, NULL)
- PHP_FE(session_register, NULL)
- PHP_FE(session_unregister, NULL)
- PHP_FE(session_is_registered, NULL)
- PHP_FE(session_encode, NULL)
- PHP_FE(session_start, NULL)
- PHP_FE(session_destroy, NULL)
- PHP_FE(session_unset, NULL)
- PHP_FE(session_set_save_handler, NULL)
- PHP_FE(session_cache_limiter, NULL)
- PHP_FE(session_cache_expire, NULL)
- PHP_FE(session_set_cookie_params, NULL)
- PHP_FE(session_get_cookie_params, NULL)
- PHP_FE(session_write_close, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(ps);
-
-static ps_module *_php_find_ps_module(char *name TSRMLS_DC);
-static const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC);
-
-static PHP_INI_MH(OnUpdateSaveHandler)
-{
- PS(mod) = _php_find_ps_module(new_value TSRMLS_CC);
-/*
- * Following lines are commented out to prevent bogus error message at
- * start up. i.e. Save handler modules are not initilzied before Session
- * module.
- */
-
-#if 0
- if(!PS(mod)) {
- php_error(E_ERROR,"Cannot find save handler %s",new_value);
- }
-#endif
- return SUCCESS;
-}
-
-
-static PHP_INI_MH(OnUpdateSerializer)
-{
- PS(serializer) = _php_find_ps_serializer(new_value TSRMLS_CC);
-/*
- * Following lines are commented out to prevent bogus error message at
- * start up. i.e. Serializer modules are not initilzied before Session
- * module.
- */
-
-#if 0
- if(!PS(serializer)) {
- php_error(E_ERROR,"Cannot find serialization handler %s",new_value);
- }
-#endif
- return SUCCESS;
-}
-
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("session.save_path", "/tmp", PHP_INI_ALL, OnUpdateString, save_path, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.name", "PHPSESSID", PHP_INI_ALL, OnUpdateString, session_name, php_ps_globals, ps_globals)
- PHP_INI_ENTRY("session.save_handler", "files", PHP_INI_ALL, OnUpdateSaveHandler)
- STD_PHP_INI_BOOLEAN("session.auto_start", "0", PHP_INI_ALL, OnUpdateBool, auto_start, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.gc_probability", "1", PHP_INI_ALL, OnUpdateInt, gc_probability, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.gc_maxlifetime", "1440", PHP_INI_ALL, OnUpdateInt, gc_maxlifetime, php_ps_globals, ps_globals)
- PHP_INI_ENTRY("session.serialize_handler", "php", PHP_INI_ALL, OnUpdateSerializer)
- STD_PHP_INI_ENTRY("session.cookie_lifetime", "0", PHP_INI_ALL, OnUpdateInt, cookie_lifetime, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cookie_path", "/", PHP_INI_ALL, OnUpdateString, cookie_path, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cookie_domain", "", PHP_INI_ALL, OnUpdateString, cookie_domain, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.cookie_secure", "", PHP_INI_ALL, OnUpdateBool, cookie_secure, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.use_cookies", "1", PHP_INI_ALL, OnUpdateBool, use_cookies, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.referer_check", "", PHP_INI_ALL, OnUpdateString, extern_referer_chk, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.entropy_file", "", PHP_INI_ALL, OnUpdateString, entropy_file, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.entropy_length", "0", PHP_INI_ALL, OnUpdateInt, entropy_length, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cache_limiter", "nocache", PHP_INI_ALL, OnUpdateString, cache_limiter, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cache_expire", "180", PHP_INI_ALL, OnUpdateInt, cache_expire, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.use_trans_sid", "1", PHP_INI_ALL, OnUpdateBool, use_trans_sid, php_ps_globals, ps_globals)
- /* Commented out until future discussion */
- /* PHP_INI_ENTRY("session.encode_sources", "globals,track", PHP_INI_ALL, NULL) */
-PHP_INI_END()
-/* }}} */
-
-PS_SERIALIZER_FUNCS(php);
-PS_SERIALIZER_FUNCS(php_binary);
-
-#define MAX_SERIALIZERS 10
-
-static ps_serializer ps_serializers[MAX_SERIALIZERS + 1] = {
- PS_SERIALIZER_ENTRY(php),
- PS_SERIALIZER_ENTRY(php_binary)
-};
-
-#define MAX_MODULES 10
-
-static ps_module *ps_modules[MAX_MODULES + 1] = {
- ps_files_ptr,
- ps_user_ptr
-};
-
-PHPAPI int php_session_register_serializer(const char *name,
- int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
- int (*decode)(PS_SERIALIZER_DECODE_ARGS))
-{
- int ret = -1;
- int i;
-
- for (i = 0; i < MAX_SERIALIZERS; i++) {
- if (ps_serializers[i].name == NULL) {
- ps_serializers[i].name = name;
- ps_serializers[i].encode = encode;
- ps_serializers[i].decode = decode;
- ps_serializers[i + 1].name = NULL;
- ret = 0;
- break;
- }
- }
-
- return ret;
-}
-
-PHPAPI int php_session_register_module(ps_module *ptr)
-{
- int ret = -1;
- int i;
-
- for (i = 0; i < MAX_MODULES; i++) {
- if (!ps_modules[i]) {
- ps_modules[i] = ptr;
- ret = 0;
- break;
- }
- }
-
- return ret;
-}
-
-PHP_MINIT_FUNCTION(session);
-PHP_RINIT_FUNCTION(session);
-PHP_MSHUTDOWN_FUNCTION(session);
-PHP_RSHUTDOWN_FUNCTION(session);
-PHP_MINFO_FUNCTION(session);
-
-static void php_rinit_session_globals(TSRMLS_D);
-static void php_rshutdown_session_globals(TSRMLS_D);
-static zend_bool php_session_destroy(TSRMLS_D);
-
-zend_module_entry session_module_entry = {
- STANDARD_MODULE_HEADER,
- "session",
- session_functions,
- PHP_MINIT(session), PHP_MSHUTDOWN(session),
- PHP_RINIT(session), PHP_RSHUTDOWN(session),
- PHP_MINFO(session),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_SESSION
-ZEND_GET_MODULE(session)
-#endif
-
-typedef struct {
- char *name;
- void (*func)(TSRMLS_D);
-} php_session_cache_limiter_t;
-
-#define CACHE_LIMITER(name) _php_cache_limiter_##name
-#define CACHE_LIMITER_FUNC(name) static void CACHE_LIMITER(name)(TSRMLS_D)
-#define CACHE_LIMITER_ENTRY(name) { #name, CACHE_LIMITER(name) },
-
-#define ADD_COOKIE(a) sapi_add_header(a, strlen(a), 1);
-
-#define MAX_STR 512
-
-void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC)
-{
- if (PG(register_globals)) {
- zval **old_symbol;
- if (zend_hash_find(&EG(symbol_table),name,namelen+1,(void *)&old_symbol) == SUCCESS) {
- /*
- There where old one, we need to replace it accurately.
- hash_update in zend_set_hash_symbol is not good, because
- it will leave referenced variables (such as local instances
- of a global variable) dangling.
-
- BTW: if you use register_globals references between
- session-vars won't work because of this very reason!
- */
-
-
- REPLACE_ZVAL_VALUE(old_symbol,state_val,1);
-
- /* the following line will muck with the reference-table used for
- * unserialisation
- */
-
- PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash,state_val,*old_symbol);
-
- zend_set_hash_symbol(*old_symbol, name, namelen, 1, 1, Z_ARRVAL_P(PS(http_session_vars)));
- } else {
- zend_set_hash_symbol(state_val, name, namelen, 1, 2, Z_ARRVAL_P(PS(http_session_vars)), &EG(symbol_table));
- }
- } else {
- zend_set_hash_symbol(state_val, name, namelen, 0, 1, Z_ARRVAL_P(PS(http_session_vars)));
- }
-}
-
-int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC)
-{
- if (PS(http_session_vars)) {
- if (zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1, (void **) state_var)==SUCCESS) {
- return SUCCESS;
- }
- } else if (!PG(register_globals)) {
- /* register_globals is disabled, but we don't have http_session_vars */
- return HASH_KEY_NON_EXISTANT;
- }
- return zend_hash_find(&EG(symbol_table), name, namelen+1, (void **) state_var);
-}
-
-#define PS_BIN_NR_OF_BITS 8
-#define PS_BIN_UNDEF (1<<(PS_BIN_NR_OF_BITS-1))
-#define PS_BIN_MAX (PS_BIN_UNDEF-1)
-
-PS_SERIALIZER_ENCODE_FUNC(php_binary)
-{
- smart_str buf = {0};
- php_serialize_data_t var_hash;
- PS_ENCODE_VARS;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
-
- PS_ENCODE_LOOP(
- if (key_length > PS_BIN_MAX) continue;
- smart_str_appendc(&buf, (unsigned char) key_length);
- smart_str_appendl(&buf, key, key_length);
-
- php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
- } else {
- if (key_length > PS_BIN_MAX) continue;
- smart_str_appendc(&buf, (unsigned char) (key_length & PS_BIN_UNDEF));
- smart_str_appendl(&buf, key, key_length);
- );
-
- if (newlen) *newlen = buf.len;
- *newstr = buf.c;
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
- return SUCCESS;
-}
-
-PS_SERIALIZER_DECODE_FUNC(php_binary)
-{
- const char *p;
- char *name;
- const char *endptr = val + vallen;
- zval *current;
- int namelen;
- int has_value;
- php_unserialize_data_t var_hash;
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
-
- for (p = val; p < endptr; ) {
- namelen = *p & (~PS_BIN_UNDEF);
- has_value = *p & PS_BIN_UNDEF ? 0 : 1;
-
- name = estrndup(p + 1, namelen);
-
- p += namelen + 1;
-
- if (has_value) {
- MAKE_STD_ZVAL(current);
- if (php_var_unserialize(&current, &p, endptr, &var_hash TSRMLS_CC)) {
- php_set_session_var(name, namelen, current, &var_hash TSRMLS_CC);
- }
- zval_ptr_dtor(&current);
- }
- PS_ADD_VARL(name, namelen);
- efree(name);
- }
-
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
- return SUCCESS;
-}
-
-#define PS_DELIMITER '|'
-#define PS_UNDEF_MARKER '!'
-
-PS_SERIALIZER_ENCODE_FUNC(php)
-{
- smart_str buf = {0};
- php_serialize_data_t var_hash;
- PS_ENCODE_VARS;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
-
- PS_ENCODE_LOOP(
- smart_str_appendl(&buf, key, (unsigned char) key_length);
- smart_str_appendc(&buf, PS_DELIMITER);
-
- php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
- } else {
- smart_str_appendc(&buf, PS_UNDEF_MARKER);
- smart_str_appendl(&buf, key, key_length);
- smart_str_appendc(&buf, PS_DELIMITER);
- );
-
- if (newlen) *newlen = buf.len;
- *newstr = buf.c;
-
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
- return SUCCESS;
-}
-
-PS_SERIALIZER_DECODE_FUNC(php)
-{
- const char *p, *q;
- char *name;
- const char *endptr = val + vallen;
- zval *current;
- int namelen;
- int has_value;
- php_unserialize_data_t var_hash;
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
-
- p = val;
-
- while (p < endptr) {
- q = p;
- while (*q != PS_DELIMITER)
- if (++q >= endptr) goto break_outer_loop;
-
- if (p[0] == PS_UNDEF_MARKER) {
- p++;
- has_value = 0;
- } else {
- has_value = 1;
- }
-
- namelen = q - p;
- name = estrndup(p, namelen);
- q++;
-
- if (has_value) {
- MAKE_STD_ZVAL(current);
- if (php_var_unserialize(&current, &q, endptr, &var_hash TSRMLS_CC)) {
- php_set_session_var(name, namelen, current, &var_hash TSRMLS_CC);
- }
- zval_ptr_dtor(&current);
- }
- PS_ADD_VARL(name, namelen);
- efree(name);
-
- p = q;
- }
-break_outer_loop:
-
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
- return SUCCESS;
-}
-
-static void php_session_track_init(TSRMLS_D)
-{
- zval **old_vars = NULL;
-
- if (zend_hash_find(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), (void **)&old_vars) == SUCCESS && Z_TYPE_PP(old_vars) == IS_ARRAY) {
- PS(http_session_vars) = *old_vars;
- zend_hash_clean(Z_ARRVAL_P(PS(http_session_vars)));
- } else {
- if(old_vars) {
- zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"));
- zend_hash_del(&EG(symbol_table), "_SESSION", sizeof("_SESSION"));
- }
- MAKE_STD_ZVAL(PS(http_session_vars));
- array_init(PS(http_session_vars));
- PS(http_session_vars)->refcount = 2;
- PS(http_session_vars)->is_ref = 1;
- zend_hash_update(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), &PS(http_session_vars), sizeof(zval *), NULL);
- zend_hash_update(&EG(symbol_table), "_SESSION", sizeof("_SESSION"), &PS(http_session_vars), sizeof(zval *), NULL);
- }
-}
-
-static char *php_session_encode(int *newlen TSRMLS_DC)
-{
- char *ret = NULL;
-
- if (PS(serializer)->encode(&ret, newlen TSRMLS_CC) == FAILURE)
- ret = NULL;
-
- return ret;
-}
-
-static void php_session_decode(const char *val, int vallen TSRMLS_DC)
-{
- if (PS(serializer)->decode(val, vallen TSRMLS_CC) == FAILURE) {
- php_session_destroy(TSRMLS_C);
- php_error(E_WARNING, "Failed to decode session object. Session has been destroyed.");
- }
-}
-
-static char hexconvtab[] = "0123456789abcdef";
-
-char *php_session_create_id(PS_CREATE_SID_ARGS)
-{
- PHP_MD5_CTX context;
- unsigned char digest[16];
- char buf[256];
- struct timeval tv;
- int i;
- int j = 0;
- unsigned char c;
-
- gettimeofday(&tv, NULL);
- PHP_MD5Init(&context);
-
- sprintf(buf, "%ld%ld%0.8f", tv.tv_sec, tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
- PHP_MD5Update(&context, buf, strlen(buf));
-
- if (PS(entropy_length) > 0) {
- int fd;
-
- fd = VCWD_OPEN(PS(entropy_file), O_RDONLY);
- if (fd >= 0) {
- unsigned char buf[2048];
- int n;
- int to_read = PS(entropy_length);
-
- while (to_read > 0) {
- n = read(fd, buf, MIN(to_read, sizeof(buf)));
- if (n <= 0) break;
- PHP_MD5Update(&context, buf, n);
- to_read -= n;
- }
- close(fd);
- }
- }
-
- PHP_MD5Final(digest, &context);
-
- for (i = 0; i < 16; i++) {
- c = digest[i];
- buf[j++] = hexconvtab[c >> 4];
- buf[j++] = hexconvtab[c & 15];
- }
- buf[j] = '\0';
-
- if (newlen)
- *newlen = j;
- return estrdup(buf);
-}
-
-static void php_session_initialize(TSRMLS_D)
-{
- char *val;
- int vallen;
-
- /* Open session handler first */
- if (PS(mod)->open(&PS(mod_data), PS(save_path), PS(session_name) TSRMLS_CC) == FAILURE) {
- php_error(E_ERROR, "Failed to initialize session module");
- return;
- }
-
- /* If there is no ID, use session module to create one */
- if (!PS(id))
- PS(id) = PS(mod)->create_sid(&PS(mod_data), NULL TSRMLS_CC);
-
- /* Read data */
- /* Question: if you create a SID here, should you also try to read data?
- * I'm not sure, but while not doing so will remove one session operation
- * it could prove usefull for those sites which wish to have "default"
- * session information
- */
- php_session_track_init(TSRMLS_C);
- if (PS(mod)->read(&PS(mod_data), PS(id), &val, &vallen TSRMLS_CC) == SUCCESS) {
- php_session_decode(val, vallen TSRMLS_CC);
- efree(val);
- }
-}
-
-static void php_session_save_current_state(TSRMLS_D)
-{
- char *val;
- int vallen;
- int ret = FAILURE;
- char *variable;
- uint variable_len;
- ulong num_key;
- HashPosition pos;
-
- if (!PG(register_globals) && !PS(http_session_vars)) {
- return;
- }
-
- if (PS(http_session_vars)) {
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(PS(http_session_vars)), &pos);
- zend_hash_get_current_key_ex(Z_ARRVAL_P(PS(http_session_vars)), &variable, &variable_len, &num_key, 0, &pos) == HASH_KEY_IS_STRING;
- zend_hash_move_forward_ex(Z_ARRVAL_P(PS(http_session_vars)),&pos)) {
- PS_ADD_VARL(variable,variable_len-1);
- }
- }
-
- if (PS(mod_data)) {
- val = php_session_encode(&vallen TSRMLS_CC);
- if (val) {
- ret = PS(mod)->write(&PS(mod_data), PS(id), val, vallen TSRMLS_CC);
- efree(val);
- } else {
- ret = PS(mod)->write(&PS(mod_data), PS(id), "", 0 TSRMLS_CC);
- }
- }
-
- if (ret == FAILURE)
- php_error(E_WARNING, "Failed to write session data (%s). Please "
- "verify that the current setting of session.save_path "
- "is correct (%s)",
- PS(mod)->name,
- PS(save_path));
-
-
- if (PS(mod_data))
- PS(mod)->close(&PS(mod_data) TSRMLS_CC);
-}
-
-static char *month_names[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-static char *week_days[] = {
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
-};
-
-static void strcpy_gmt(char *ubuf, time_t *when)
-{
- char buf[MAX_STR];
- struct tm tm;
- int n;
-
- php_gmtime_r(when, &tm);
-
- n = sprintf(buf, "%s, %d %s %d %02d:%02d:%02d GMT", /* SAFE */
- week_days[tm.tm_wday], tm.tm_mday,
- month_names[tm.tm_mon], tm.tm_year + 1900,
- tm.tm_hour, tm.tm_min,
- tm.tm_sec);
- memcpy(ubuf, buf, n);
- ubuf[n] = '\0';
-}
-
-static void last_modified(TSRMLS_D)
-{
- const char *path;
- struct stat sb;
- char buf[MAX_STR + 1];
-
- path = SG(request_info).path_translated;
- if (path) {
- if (VCWD_STAT(path, &sb) == -1) {
- return;
- }
-
-#define LAST_MODIFIED "Last-Modified: "
- memcpy(buf, LAST_MODIFIED, sizeof(LAST_MODIFIED) - 1);
- strcpy_gmt(buf + sizeof(LAST_MODIFIED) - 1, &sb.st_mtime);
- ADD_COOKIE(buf);
- }
-}
-
-CACHE_LIMITER_FUNC(public)
-{
- char buf[MAX_STR + 1];
- struct timeval tv;
- time_t now;
-
- gettimeofday(&tv, NULL);
- now = tv.tv_sec + PS(cache_expire) * 60;
-#define EXPIRES "Expires: "
- memcpy(buf, EXPIRES, sizeof(EXPIRES) - 1);
- strcpy_gmt(buf + sizeof(EXPIRES) - 1, &now);
- ADD_COOKIE(buf);
-
- sprintf(buf, "Cache-Control: public, max-age=%ld", PS(cache_expire) * 60); /* SAFE */
- ADD_COOKIE(buf);
-
- last_modified(TSRMLS_C);
-}
-
-CACHE_LIMITER_FUNC(private_no_expire)
-{
- char buf[MAX_STR + 1];
-
- sprintf(buf, "Cache-Control: private, max-age=%ld, pre-check=%ld", PS(cache_expire) * 60, PS(cache_expire) * 60); /* SAFE */
- ADD_COOKIE(buf);
-
- last_modified(TSRMLS_C);
-}
-
-CACHE_LIMITER_FUNC(private)
-{
- ADD_COOKIE("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
- CACHE_LIMITER(private_no_expire)(TSRMLS_C);
-}
-
-CACHE_LIMITER_FUNC(nocache)
-{
- ADD_COOKIE("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
- /* For HTTP/1.1 conforming clients and the rest (MSIE 5) */
- ADD_COOKIE("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
- /* For HTTP/1.0 conforming clients */
- ADD_COOKIE("Pragma: no-cache");
-}
-
-static php_session_cache_limiter_t php_session_cache_limiters[] = {
- CACHE_LIMITER_ENTRY(public)
- CACHE_LIMITER_ENTRY(private)
- CACHE_LIMITER_ENTRY(private_no_expire)
- CACHE_LIMITER_ENTRY(nocache)
- {0}
-};
-
-static int php_session_cache_limiter(TSRMLS_D)
-{
- php_session_cache_limiter_t *lim;
-
- if (SG(headers_sent)) {
- char *output_start_filename = php_get_output_start_filename(TSRMLS_C);
- int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
-
- if (output_start_filename) {
- php_error(E_WARNING, "Cannot send session cache limiter - headers already sent (output started at %s:%d)",
- output_start_filename, output_start_lineno);
- } else {
- php_error(E_WARNING, "Cannot send session cache limiter - headers already sent");
- }
- return (-2);
- }
-
- for (lim = php_session_cache_limiters; lim->name; lim++) {
- if (!strcasecmp(lim->name, PS(cache_limiter))) {
- lim->func(TSRMLS_C);
- return (0);
- }
- }
-
- return (-1);
-}
-
-#define COOKIE_SET_COOKIE "Set-Cookie: "
-#define COOKIE_EXPIRES "; expires="
-#define COOKIE_PATH "; path="
-#define COOKIE_DOMAIN "; domain="
-#define COOKIE_SECURE "; secure"
-
-static void php_session_send_cookie(TSRMLS_D)
-{
- smart_str ncookie = {0};
- char *date_fmt = NULL;
-
- if (SG(headers_sent)) {
- char *output_start_filename = php_get_output_start_filename(TSRMLS_C);
- int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
-
- if (output_start_filename) {
- php_error(E_WARNING, "Cannot send session cookie - headers already sent by (output started at %s:%d)",
- output_start_filename, output_start_lineno);
- } else {
- php_error(E_WARNING, "Cannot send session cookie - headers already sent");
- }
- return;
- }
-
- smart_str_appends(&ncookie, COOKIE_SET_COOKIE);
- smart_str_appends(&ncookie, PS(session_name));
- smart_str_appendc(&ncookie, '=');
- smart_str_appends(&ncookie, PS(id));
-
- if (PS(cookie_lifetime) > 0) {
- struct timeval tv;
-
- gettimeofday(&tv, NULL);
- date_fmt = php_std_date(tv.tv_sec + PS(cookie_lifetime));
-
- smart_str_appends(&ncookie, COOKIE_EXPIRES);
- smart_str_appends(&ncookie, date_fmt);
- efree(date_fmt);
- }
-
- if (PS(cookie_path)[0]) {
- smart_str_appends(&ncookie, COOKIE_PATH);
- smart_str_appends(&ncookie, PS(cookie_path));
- }
-
- if (PS(cookie_domain)[0]) {
- smart_str_appends(&ncookie, COOKIE_DOMAIN);
- smart_str_appends(&ncookie, PS(cookie_domain));
- }
-
- if (PS(cookie_secure)) {
- smart_str_appends(&ncookie, COOKIE_SECURE);
- }
-
- smart_str_0(&ncookie);
-
- sapi_add_header(ncookie.c, ncookie.len, 0);
-}
-
-static ps_module *_php_find_ps_module(char *name TSRMLS_DC)
-{
- ps_module *ret = NULL;
- ps_module **mod;
- int i;
-
- for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++)
- if (*mod && !strcasecmp(name, (*mod)->name)) {
- ret = *mod;
- break;
- }
-
- return ret;
-}
-
-static const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC)
-{
- const ps_serializer *ret = NULL;
- const ps_serializer *mod;
-
- for (mod = ps_serializers; mod->name; mod++)
- if (!strcasecmp(name, mod->name)) {
- ret = mod;
- break;
- }
-
- return ret;
-}
-
-#define PPID2SID \
- convert_to_string((*ppid)); \
- PS(id) = estrndup(Z_STRVAL_PP(ppid), Z_STRLEN_PP(ppid))
-
-PHPAPI void php_session_start(TSRMLS_D)
-{
- zval **ppid;
- zval **data;
- char *p;
- int send_cookie = 1;
- int define_sid = 1;
- int module_number = PS(module_number);
- int nrand;
- int lensess;
-
- PS(apply_trans_sid) = PS(use_trans_sid);
-
- if (PS(session_status) != php_session_none)
- return;
-
- lensess = strlen(PS(session_name));
-
-
- /*
- * Cookies are preferred, because initially
- * cookie and get variables will be available.
- */
-
- if (!PS(id)) {
- if (zend_hash_find(&EG(symbol_table), "_COOKIE",
- sizeof("_COOKIE"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
- lensess + 1, (void **) &ppid) == SUCCESS) {
- PPID2SID;
- PS(apply_trans_sid) = 0;
- send_cookie = 0;
- define_sid = 0;
- }
-
- if (!PS(id) &&
- zend_hash_find(&EG(symbol_table), "_GET",
- sizeof("_GET"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
- lensess + 1, (void **) &ppid) == SUCCESS) {
- PPID2SID;
- send_cookie = 0;
- }
-
- if (!PS(id) &&
- zend_hash_find(&EG(symbol_table), "_POST",
- sizeof("_POST"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
- lensess + 1, (void **) &ppid) == SUCCESS) {
- PPID2SID;
- send_cookie = 0;
- }
- }
-
- /* check the REQUEST_URI symbol for a string of the form
- '<session-name>=<session-id>' to allow URLs of the form
- http://yoursite/<session-name>=<session-id>/script.php */
-
- if (!PS(id) &&
- zend_hash_find(&EG(symbol_table), "REQUEST_URI",
- sizeof("REQUEST_URI"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_STRING &&
- (p = strstr(Z_STRVAL_PP(data), PS(session_name))) &&
- p[lensess] == '=') {
- char *q;
-
- p += lensess + 1;
- if ((q = strpbrk(p, "/?\\")))
- PS(id) = estrndup(p, q - p);
- }
-
- /* check whether the current request was referred to by
- an external site which invalidates the previously found id */
-
- if (PS(id) &&
- PS(extern_referer_chk)[0] != '\0' &&
- zend_hash_find(&EG(symbol_table), "HTTP_REFERER",
- sizeof("HTTP_REFERER"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_STRING &&
- Z_STRLEN_PP(data) != 0 &&
- strstr(Z_STRVAL_PP(data), PS(extern_referer_chk)) == NULL) {
- efree(PS(id));
- PS(id) = NULL;
- send_cookie = 1;
- if (PS(use_trans_sid))
- PS(apply_trans_sid) = 1;
- }
-
- php_session_initialize(TSRMLS_C);
-
- if (!PS(use_cookies) && send_cookie) {
- if (PS(use_trans_sid))
- PS(apply_trans_sid) = 1;
- send_cookie = 0;
- }
-
- if (send_cookie) {
- php_session_send_cookie(TSRMLS_C);
- }
-
-
- if (define_sid) {
- smart_str var = {0};
-
- smart_str_appendl(&var, PS(session_name), lensess);
- smart_str_appendc(&var, '=');
- smart_str_appends(&var, PS(id));
- smart_str_0(&var);
- REGISTER_STRINGL_CONSTANT("SID", var.c, var.len, 0);
- } else {
- REGISTER_STRINGL_CONSTANT("SID", empty_string, 0, 0);
- }
-
- PS(session_status) = php_session_active;
- if (PS(apply_trans_sid)) {
- php_url_scanner_add_var(PS(session_name), strlen(PS(session_name)), PS(id), strlen(PS(id)), 0 TSRMLS_CC);
- }
-
- php_session_cache_limiter(TSRMLS_C);
-
- if (PS(mod_data) && PS(gc_probability) > 0) {
- int nrdels = -1;
-
- nrand = (int) (100.0*php_combined_lcg(TSRMLS_C));
- if (nrand < PS(gc_probability)) {
- PS(mod)->gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels TSRMLS_CC);
-#if 0
- if (nrdels != -1)
- php_error(E_NOTICE, "purged %d expired session objects\n", nrdels);
-#endif
- }
- }
-}
-
-static zend_bool php_session_destroy(TSRMLS_D)
-{
- zend_bool retval = SUCCESS;
-
- if (PS(session_status) != php_session_active) {
- php_error(E_WARNING, "Trying to destroy uninitialized session");
- return FAILURE;
- }
-
- if (PS(mod)->destroy(&PS(mod_data), PS(id) TSRMLS_CC) == FAILURE) {
- retval = FAILURE;
- php_error(E_WARNING, "Session object destruction failed");
- }
-
- php_rshutdown_session_globals(TSRMLS_C);
- php_rinit_session_globals(TSRMLS_C);
-
- return retval;
-}
-
-
-/* {{{ proto void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure]]])
- Set session cookie parameters */
-PHP_FUNCTION(session_set_cookie_params)
-{
- zval **lifetime, **path, **domain, **secure;
-
- if (!PS(use_cookies))
- return;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &lifetime, &path, &domain, &secure) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(lifetime);
- PS(cookie_lifetime) = Z_LVAL_PP(lifetime);
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_string_ex(path);
- zend_alter_ini_entry("session.cookie_path", sizeof("session.cookie_path"), Z_STRVAL_PP(path), Z_STRLEN_PP(path), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_string_ex(domain);
- zend_alter_ini_entry("session.cookie_domain", sizeof("session.cookie_domain"), Z_STRVAL_PP(domain), Z_STRLEN_PP(domain), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(secure);
- zend_alter_ini_entry("session.cookie_secure", sizeof("session.cookie_secure"), Z_BVAL_PP(secure)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array session_get_cookie_params(void)
- Return the session cookie parameters */
-PHP_FUNCTION(session_get_cookie_params)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Cannot initialize return value from session_get_cookie_parameters");
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "lifetime", PS(cookie_lifetime));
- add_assoc_string(return_value, "path", PS(cookie_path), 1);
- add_assoc_string(return_value, "domain", PS(cookie_domain), 1);
- add_assoc_bool(return_value, "secure", PS(cookie_secure));
-}
-/* }}} */
-
-/* {{{ proto string session_name([string newname])
- Return the current session name. If newname is given, the session name is replaced with newname */
-PHP_FUNCTION(session_name)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = estrdup(PS(session_name));
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- zend_alter_ini_entry("session.name", sizeof("session.name"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto string session_module_name([string newname])
- Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname */
-PHP_FUNCTION(session_module_name)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = safe_estrdup(PS(mod)->name);
-
- if (ac == 1) {
- ps_module *tempmod;
-
- convert_to_string_ex(p_name);
- tempmod = _php_find_ps_module(Z_STRVAL_PP(p_name) TSRMLS_CC);
- if (tempmod) {
- if (PS(mod_data))
- PS(mod)->close(&PS(mod_data) TSRMLS_CC);
- PS(mod) = tempmod;
- PS(mod_data) = NULL;
- } else {
- efree(old);
- php_error(E_ERROR, "Cannot find named PHP session module (%s)",
- Z_STRVAL_PP(p_name));
- RETURN_FALSE;
- }
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)
- Sets user-level functions */
-PHP_FUNCTION(session_set_save_handler)
-{
- zval **args[6];
- int i;
- ps_user *mdata;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_array_ex(6, args) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (PS(session_status) != php_session_none)
- RETURN_FALSE;
-
- zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), "user", sizeof("user")-1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-
- mdata = emalloc(sizeof(*mdata));
-
- for (i = 0; i < 6; i++) {
- ZVAL_ADDREF(*args[i]);
- mdata->names[i] = *args[i];
- }
-
- PS(mod_data) = (void *) mdata;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string session_save_path([string newname])
- Return the current save path passed to module_name. If newname is given, the save path is replaced with newname */
-PHP_FUNCTION(session_save_path)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = estrdup(PS(save_path));
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- zend_alter_ini_entry("session.save_path", sizeof("session.save_path"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto string session_id([string newid])
- Return the current session id. If newid is given, the session id is replaced with newid */
-PHP_FUNCTION(session_id)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old = empty_string;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (PS(id))
- old = estrdup(PS(id));
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- if (PS(id)) efree(PS(id));
- PS(id) = estrndup(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto string session_cache_limiter([string new_cache_limiter])
- Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter */
-PHP_FUNCTION(session_cache_limiter)
-{
- zval **p_cache_limiter;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_cache_limiter) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = estrdup(PS(cache_limiter));
-
- if (ac == 1) {
- convert_to_string_ex(p_cache_limiter);
- zend_alter_ini_entry("session.cache_limiter", sizeof("session.cache_limiter"), Z_STRVAL_PP(p_cache_limiter), Z_STRLEN_PP(p_cache_limiter), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto int session_cache_expire([int new_cache_expire])
- Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire */
-PHP_FUNCTION(session_cache_expire)
-{
- zval **p_cache_expire;
- int ac = ZEND_NUM_ARGS();
- long old;
-
- old = PS(cache_expire);
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_cache_expire) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (ac == 1) {
- convert_to_long_ex(p_cache_expire);
- PS(cache_expire) = Z_LVAL_PP(p_cache_expire);
- }
-
- RETVAL_LONG(old);
-}
-/* }}} */
-
-/* {{{ static void php_register_var(zval** entry TSRMLS_DC) */
-static void php_register_var(zval** entry TSRMLS_DC)
-{
- zval **value;
-
- if (Z_TYPE_PP(entry) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(entry));
-
- while (zend_hash_get_current_data(Z_ARRVAL_PP(entry), (void**)&value) == SUCCESS) {
- php_register_var(value TSRMLS_CC);
- zend_hash_move_forward(Z_ARRVAL_PP(entry));
- }
- } else {
- convert_to_string_ex(entry);
-
- if ((strcmp(Z_STRVAL_PP(entry), "HTTP_SESSION_VARS") != 0) ||
- (strcmp(Z_STRVAL_PP(entry), "_SESSION") != 0)) {
- PS_ADD_VARL(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry));
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool session_register(mixed var_names [, mixed ...])
- Adds varname(s) to the list of variables which are freezed at the session end */
-PHP_FUNCTION(session_register)
-{
- zval ***args;
- int argc = ZEND_NUM_ARGS();
- int i;
-
- if (argc <= 0)
- RETURN_FALSE
- else
- args = (zval ***)emalloc(argc * sizeof(zval **));
-
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- if (PS(session_status) == php_session_none)
- php_session_start(TSRMLS_C);
-
- for (i = 0; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) == IS_ARRAY)
- SEPARATE_ZVAL(args[i]);
- php_register_var(args[i] TSRMLS_CC);
- }
-
- efree(args);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_unregister(string varname)
- Removes varname from the list of variables which are freezed at the session end */
-PHP_FUNCTION(session_unregister)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
-
- if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(p_name);
-
- PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_is_registered(string varname)
- Checks if a variable is registered in session */
-PHP_FUNCTION(session_is_registered)
-{
- zval **p_name;
- zval *p_var;
- int ac = ZEND_NUM_ARGS();
-
- if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(p_name);
-
- if (zend_hash_find(&PS(vars), Z_STRVAL_PP(p_name),
- Z_STRLEN_PP(p_name)+1, (void **)&p_var) == SUCCESS)
- RETURN_TRUE
- else
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string session_encode(void)
- Serializes the current setup and returns the serialized representation */
-PHP_FUNCTION(session_encode)
-{
- int len;
- char *enc;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- enc = php_session_encode(&len TSRMLS_CC);
- RETVAL_STRINGL(enc, len, 0);
-}
-/* }}} */
-
-/* {{{ proto bool session_decode(string data)
- Deserializes data and reinitializes the variables */
-PHP_FUNCTION(session_decode)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(str);
-
- php_session_decode(Z_STRVAL_PP(str), Z_STRLEN_PP(str) TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto bool session_start(void)
- Begin session - reinitializes freezed variables, registers browsers etc */
-PHP_FUNCTION(session_start)
-{
- /* skipping check for non-zero args for performance reasons here ?*/
- php_session_start(TSRMLS_C);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_destroy(void)
- Destroy the current session and all data associated with it */
-PHP_FUNCTION(session_destroy)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (php_session_destroy(TSRMLS_C) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto void session_unset(void)
- Unset all registered variables */
-PHP_FUNCTION(session_unset)
-{
- zval **tmp;
- char *variable;
- ulong num_key;
-
- if (PS(session_status) == php_session_none)
- RETURN_FALSE;
-
- if (PG(register_globals)) {
- for (zend_hash_internal_pointer_reset(&PS(vars));
- zend_hash_get_current_key(&PS(vars), &variable, &num_key, 0) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(&PS(vars))) {
- if (zend_hash_find(&EG(symbol_table), variable, strlen(variable) + 1, (void **) &tmp)
- == SUCCESS)
- zend_hash_del(&EG(symbol_table), variable, strlen(variable) + 1);
- }
- }
-
- /* Clean $HTTP_SESSION_VARS. */
- zend_hash_clean(Z_ARRVAL_P(PS(http_session_vars)));
-}
-/* }}} */
-
-PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC)
-{
- if (PS(apply_trans_sid) && (PS(session_status) == php_session_active)) {
- *new = php_url_scanner_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC);
- }
-}
-
-static void php_rinit_session_globals(TSRMLS_D)
-{
- zend_hash_init(&PS(vars), 0, NULL, NULL, 0);
- PS(id) = NULL;
- PS(session_status) = php_session_none;
- PS(mod_data) = NULL;
- PS(http_session_vars) = NULL;
-}
-
-static void php_rshutdown_session_globals(TSRMLS_D)
-{
- if (PS(mod_data)) {
- PS(mod)->close(&PS(mod_data) TSRMLS_CC);
- }
- if (PS(id)) {
- efree(PS(id));
- }
- zend_hash_destroy(&PS(vars));
-}
-
-
-PHP_RINIT_FUNCTION(session)
-{
- php_rinit_session_globals(TSRMLS_C);
-
- if (PS(mod) == NULL) {
- char *value;
-
- value = zend_ini_string("session.save_handler", sizeof("session.save_handler"), 0);
- if (value) {
- PS(mod) = _php_find_ps_module(value TSRMLS_CC);
- }
-
- if (!PS(mod)) {
- /* current status is unusable */
- PS(session_status) = php_session_disabled;
- return SUCCESS;
- }
- }
-
- if (PS(auto_start)) {
- php_session_start(TSRMLS_C);
- }
-
- return SUCCESS;
-}
-
-static void php_session_flush(TSRMLS_D)
-{
- if(PS(session_status)==php_session_active) {
- php_session_save_current_state(TSRMLS_C);
- PS(session_status)=php_session_none;
- }
-}
-
-/* {{{ proto void session_write_close(void)
- Write session data and end session */
-PHP_FUNCTION(session_write_close)
-{
- php_session_flush(TSRMLS_C);
-}
-
-PHP_RSHUTDOWN_FUNCTION(session)
-{
- php_session_flush(TSRMLS_C);
- php_rshutdown_session_globals(TSRMLS_C);
- return SUCCESS;
-}
-/* }}} */
-
-
-PHP_MINIT_FUNCTION(session)
-{
-#ifdef ZTS
- php_ps_globals *ps_globals;
-
- ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals), NULL, NULL);
- ps_globals = ts_resource(ps_globals_id);
-#endif
-
- zend_register_auto_global("_SESSION", sizeof("_SESSION")-1 TSRMLS_CC);
-
- PS(module_number) = module_number; /* if we really need this var we need to init it in zts mode as well! */
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(session)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(session)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Session Support", "enabled" );
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/session/tests/001.phpt b/ext/session/tests/001.phpt
deleted file mode 100644
index ab598415e7..0000000000
--- a/ext/session/tests/001.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Session Object Serialization
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-
-ini_set("register_globals", 1);
-
-class foo {
- var $bar = "ok";
-
- function method() { $this->yes = "done"; }
-}
-
-$baz = new foo;
-$baz->method();
-
-$arr[3] = new foo;
-$arr[3]->method();
-
-session_register("baz");
-session_register("arr");
-
-print session_encode()."\n";
-
-session_destroy();
---GET--
---POST--
---EXPECT--
-baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";s:4:"done";}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";s:4:"done";}}
diff --git a/ext/session/tests/002.phpt b/ext/session/tests/002.phpt
deleted file mode 100644
index 80e72a6ef7..0000000000
--- a/ext/session/tests/002.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-session_unset() without any session
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-session_unset();
-print "ok\n";
---GET--
---POST--
---EXPECT--
-ok
diff --git a/ext/session/tests/003.phpt b/ext/session/tests/003.phpt
deleted file mode 100644
index fec4bcad5e..0000000000
--- a/ext/session/tests/003.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-Session Object Deserialization
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-
-ini_set("register_globals", 1);
-
-class foo {
- var $bar = "ok";
- function method() { $this->yes++; }
-}
-
-session_id("abtest");
-session_start();
-session_decode('baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}');
-
-$baz->method();
-$arr[3]->method();
-
-var_dump($baz);
-var_dump($arr);
-session_destroy();
---EXPECT--
-object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- &object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
diff --git a/ext/session/tests/004.phpt b/ext/session/tests/004.phpt
deleted file mode 100644
index afcb6d14d2..0000000000
--- a/ext/session/tests/004.phpt
+++ /dev/null
@@ -1,108 +0,0 @@
---TEST--
-session_set_save_handler test
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-error_reporting(~E_NOTICE);
-ini_set("register_globals", 1);
-
-class handler {
- var $data = 'baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}';
- function open($save_path, $session_name)
- {
- print "OPEN: $session_name\n";
- return true;
- }
- function close()
- {
- return true;
- }
- function read($key)
- {
- print "READ: $key\n";
- return $GLOBALS["hnd"]->data;
- }
-
- function write($key, $val)
- {
- print "WRITE: $key, $val\n";
- $GLOBALS["hnd"]->data = $val;
- return true;
- }
-
- function destroy($key)
- {
- print "DESTROY: $key\n";
- return true;
- }
-
- function gc() { return true; }
-}
-
-$hnd = new handler;
-
-class foo {
- var $bar = "ok";
- function method() { $this->yes++; }
-}
-
-ob_start();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-
-session_id("abtest");
-session_start();
-$baz->method();
-$arr[3]->method();
-
-var_dump($baz);
-var_dump($arr);
-
-session_write_close();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-session_start();
-
-var_dump($baz);
-var_dump($arr);
-
-session_destroy();
-?>
---EXPECT--
-OPEN: PHPSESSID
-READ: abtest
-object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- &object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
-WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}}
-OPEN: PHPSESSID
-READ: abtest
-object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
-DESTROY: abtest
diff --git a/ext/session/tests/005.phpt b/ext/session/tests/005.phpt
deleted file mode 100644
index f85a62d115..0000000000
--- a/ext/session/tests/005.phpt
+++ /dev/null
@@ -1,144 +0,0 @@
---TEST--
-Custom save handler, multiple session_start()s, complex data structure test.
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-
-ini_set("register_globals", 1);
-
-error_reporting(E_ALL & ~E_NOTICE);
-
-class handler {
- var $data = 'baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}';
- function open($save_path, $session_name)
- {
- print "OPEN: $session_name\n";
- return true;
- }
- function close()
- {
- print "CLOSE\n";
- return true;
- }
- function read($key)
- {
- print "READ: $key\n";
- return $GLOBALS["hnd"]->data;
- }
-
- function write($key, $val)
- {
- print "WRITE: $key, $val\n";
- $GLOBALS["hnd"]->data = $val;
- return true;
- }
-
- function destroy($key)
- {
- print "DESTROY: $key\n";
- return true;
- }
-
- function gc() { return true; }
-}
-
-$hnd = new handler;
-
-class foo {
- var $bar = "ok";
- function method() { $this->yes++; }
-}
-
-ob_start();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-
-session_id("abtest");
-session_start();
-$baz->method();
-$arr[3]->method();
-
-var_dump($baz);
-var_dump($arr);
-
-session_write_close();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-session_start();
-$baz->method();
-$arr[3]->method();
-
-
-$c = 123;
-session_register("c");
-var_dump($baz); var_dump($arr); var_dump($c);
-
-session_write_close();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-session_start();
-var_dump($baz); var_dump($arr); var_dump($c);
-
-session_destroy();
-?>
---EXPECT--
-OPEN: PHPSESSID
-READ: abtest
-object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- &object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
-WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}}
-CLOSE
-OPEN: PHPSESSID
-READ: abtest
-object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
-}
-array(1) {
- [3]=>
- &object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
- }
-}
-int(123)
-WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123;
-CLOSE
-OPEN: PHPSESSID
-READ: abtest
-object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
-}
-array(1) {
- [3]=>
- object(foo)(2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
- }
-}
-int(123)
-DESTROY: abtest
-CLOSE
diff --git a/ext/session/tests/006.phpt b/ext/session/tests/006.phpt
deleted file mode 100644
index 3db2e5f21d..0000000000
--- a/ext/session/tests/006.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-References between variables in sessions
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-
-ini_set("register_globals", 1);
-
-ob_start();
-session_id("abtest");
-session_start();
-
-class a {
- var $test = "hallo";
-}
-
-class b {
- var $a;
- function b(&$a) {
- $this->a = &$a;
- }
-}
-
-$a = new a();
-$b = new b($a);
-
-echo "original values:\n";
-var_dump($a,$b);
-
-session_register("a");
-session_register("b");
-session_write_close();
-
-session_unregister("a");
-session_unregister("b");
-
-session_start();
-
-echo "values after session:\n";
-var_dump($a,$b);
-?>
---EXPECT--
-original values:
-object(a)(1) {
- ["test"]=>
- string(5) "hallo"
-}
-object(b)(1) {
- ["a"]=>
- &object(a)(1) {
- ["test"]=>
- string(5) "hallo"
- }
-}
-values after session:
-object(a)(1) {
- ["test"]=>
- string(5) "hallo"
-}
-object(b)(1) {
- ["a"]=>
- &object(a)(1) {
- ["test"]=>
- string(5) "hallo"
- }
-}
diff --git a/ext/session/tests/skipif.inc b/ext/session/tests/skipif.inc
deleted file mode 100644
index 29e2bb4cd4..0000000000
--- a/ext/session/tests/skipif.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-if (PHP_SAPI != 'cgi') {
- die("skip\n");
-}
-if (!extension_loaded("session") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("session$dlext");
-}
-if (!extension_loaded("session")) {
- die("skip\n");
-}
-?> \ No newline at end of file
diff --git a/ext/shmop/CREDITS b/ext/shmop/CREDITS
deleted file mode 100644
index caab89e208..0000000000
--- a/ext/shmop/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Shared Memory Operations
-Slava Poliakov, Ilia Alshanetsky
diff --git a/ext/shmop/README b/ext/shmop/README
deleted file mode 100644
index d1cc5abc2b..0000000000
--- a/ext/shmop/README
+++ /dev/null
@@ -1,69 +0,0 @@
-last update Jan 2, 2002 (hackie@prohost.org/ilia@prohost.org)
-
-Shared Memory Operations Extension to PHP4
-
- While developing a search deamon we needed a php based front end
- to communicate the deamon via SHM. PHP already had a shared memory
- extention (sysvshm) written by Christian Cartus <cartus@atrior.de>,
- unfortunatly this extention was designed with PHP only in mind and
- offers high level features which are extremly bothersome for basic SHM
- we had in mind. After spending a day trying to reverse engineer and figure
- out the format of sysvshm we decided that it would be much easier to
- add our own extention to php for simple SHM operations, we were right :)).
-
-the functions are:
-
-int shmop_open(int key, string flags, int mode, int size)
-
- key - the key of/for the shared memory block
- flags - 4 flags are avalible
- a for read only access (sets SHM_RDONLY)
- w for read & write access
- c create or open an existing segment (sets IPC_CREATE)
- n create a new segment and fail if one already exists under same name (sets IPC_CREATE|IPC_EXCL)
- (the n flag is mostly useful for security perpouses, so that you don't end up opening a faked segment
- if someone guesses your key)
- mode - acsess mode same as for a file (0644) for example
- size - size of the block in bytes
-
- returns an indentifier
-
-
-char shmop_read(int shmid, int start, int count)
-
- shmid - shmid from which to read
- start - offset from which to start reading
- count - how many bytes to read
-
- returns the data read
-
-int shmop_write(int shmid, string data, int offset)
-
- shmid - shmid from which to read
- data - string to put into shared memory
- offset - offset in shm to write from
-
- returns bytes written
-
-int shmop_size(int shmid)
-
- shmid - shmid for which to return the size
-
- returns the size in bytes of the shm segment
-
-
-int shmop_delete(int shmid)
-
- marks the segment for deletion, the segment will be deleted when all processes mapping it will detach
-
- shmid - shmid which to mark for deletion
-
- returns 1 if all ok, zero on failure
-
-int shmop_close(int shmid)
-
- shmid - shmid which to close
-
- returns zero
-
-
diff --git a/ext/shmop/config.m4 b/ext/shmop/config.m4
deleted file mode 100644
index 6c1709d715..0000000000
--- a/ext/shmop/config.m4
+++ /dev/null
@@ -1,8 +0,0 @@
-dnl $Id$
-PHP_ARG_ENABLE(shmop, whether to enable shmop support,
-[ --enable-shmop Enable shmop support])
-
-if test "$PHP_SHMOP" != "no"; then
- AC_DEFINE(HAVE_SHMOP, 1, [ ])
- PHP_NEW_EXTENSION(shmop, shmop.c, $ext_shared)
-fi
diff --git a/ext/shmop/php_shmop.h b/ext/shmop/php_shmop.h
deleted file mode 100644
index 5ea935a1f3..0000000000
--- a/ext/shmop/php_shmop.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Slava Poliakov <slavapl@mailandnews.com> |
- | Ilia Alshanetsky <iliaa@home.com> |
- +----------------------------------------------------------------------+
- */
-#ifndef PHP_SHMOP_H
-#define PHP_SHMOP_H
-
-#if HAVE_SHMOP
-
-extern zend_module_entry shmop_module_entry;
-#define phpext_shmop_ptr &shmop_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_SHMOP_API __declspec(dllexport)
-#else
-#define PHP_SHMOP_API
-#endif
-
-PHP_MINIT_FUNCTION(shmop);
-PHP_MSHUTDOWN_FUNCTION(shmop);
-PHP_RINIT_FUNCTION(shmop);
-PHP_RSHUTDOWN_FUNCTION(shmop);
-PHP_MINFO_FUNCTION(shmop);
-
-PHP_FUNCTION(shmop_open);
-PHP_FUNCTION(shmop_read);
-PHP_FUNCTION(shmop_close);
-PHP_FUNCTION(shmop_size);
-PHP_FUNCTION(shmop_write);
-PHP_FUNCTION(shmop_delete);
-
-#ifdef PHP_WIN32
-typedef int key_t;
-#endif
-
-struct php_shmop
-{
- int shmid;
- key_t key;
- int shmflg;
- int shmatflg;
- char *addr;
- int size;
-};
-
-typedef struct {
- int le_shmop;
-} php_shmop_globals;
-
-#ifdef ZTS
-#define SHMOPG(v) TSRMG(shmop_globals_id, php_shmop_globals *, v)
-#else
-#define SHMOPG(v) (shmop_globals.v)
-#endif
-
-#else
-
-#define phpext_shmop_ptr NULL
-
-#endif
-
-#endif /* PHP_SHMOP_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/shmop/shmop.c b/ext/shmop/shmop.c
deleted file mode 100644
index ebce1afa78..0000000000
--- a/ext/shmop/shmop.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Slava Poliakov <hackie@prohost.org> |
- | Ilia Alshanetsky <ilia@prohost.org> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_shmop.h"
-# ifndef PHP_WIN32
-# include <sys/ipc.h>
-# include <sys/shm.h>
-#else
-#include "tsrm_win32.h"
-#endif
-
-
-#if HAVE_SHMOP
-
-#include "ext/standard/info.h"
-
-#ifdef ZTS
-int shmop_globals_id;
-#else
-php_shmop_globals shmop_globals;
-#endif
-
-int shm_type;
-
-/* {{{ shmop_functions[]
- */
-function_entry shmop_functions[] = {
- PHP_FE(shmop_open, NULL)
- PHP_FE(shmop_read, NULL)
- PHP_FE(shmop_close, NULL)
- PHP_FE(shmop_size, NULL)
- PHP_FE(shmop_write, NULL)
- PHP_FE(shmop_delete, NULL)
- {NULL, NULL, NULL} /* Must be the last line in shmop_functions[] */
-};
-/* }}} */
-
-/* {{{ shmop_module_entry
- */
-zend_module_entry shmop_module_entry = {
- STANDARD_MODULE_HEADER,
- "shmop",
- shmop_functions,
- PHP_MINIT(shmop),
- PHP_MSHUTDOWN(shmop),
- NULL,
- NULL,
- PHP_MINFO(shmop),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SHMOP
-ZEND_GET_MODULE(shmop)
-#endif
-
-/* {{{ rsclean
- */
-static void rsclean(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- struct php_shmop *shmop = (struct php_shmop *)rsrc->ptr;
-
- shmdt(shmop->addr);
- efree(shmop);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(shmop)
-{
- shm_type = zend_register_list_destructors_ex(rsclean, NULL, "shmop", module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(shmop)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(shmop)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "shmop support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto int shmop_open (int key, int flags, int mode, int size)
- gets and attaches a shared memory segment */
-PHP_FUNCTION(shmop_open)
-{
- zval **key, **flags, **mode, **size;
- struct php_shmop *shmop;
- struct shmid_ds shm;
- int rsid;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &key, &flags, &mode, &size) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(key);
- convert_to_string_ex(flags);
- convert_to_long_ex(mode);
- convert_to_long_ex(size);
-
- shmop = emalloc(sizeof(struct php_shmop));
- memset(shmop, 0, sizeof(struct php_shmop));
-
- shmop->key = (*key)->value.lval;
- shmop->shmflg |= (*mode)->value.lval;
-
- if( (*flags)->value.str.len != 1 ) {
- php_error(E_WARNING, "shmop_open: invalid flag");
- RETURN_FALSE;
- }
-
- switch( (*flags)->value.str.val[0] )
- {
- case 'a':
- shmop->shmatflg |= SHM_RDONLY;
- break;
- case 'c':
- shmop->shmflg |= IPC_CREAT;
- shmop->size = (*size)->value.lval;
- break;
- case 'n':
- shmop->shmflg |= (IPC_CREAT|IPC_EXCL);
- shmop->size = (*size)->value.lval;
- break;
- case 'w':
- /* noop
- shm segment is being opened for read & write
- will fail if segment does not exist
- */
- break;
- default:
- php_error(E_WARNING, "shmop_open: invalid access mode");
- efree(shmop);
- RETURN_FALSE;
- }
-
- shmop->shmid = shmget(shmop->key, shmop->size, shmop->shmflg);
- if (shmop->shmid == -1) {
- php_error(E_WARNING, "shmop_open: unable to attach or create shm segment");
- efree(shmop);
- RETURN_FALSE;
- }
-
- if (shmctl(shmop->shmid, IPC_STAT, &shm)) {
- efree(shmop);
- php_error(E_WARNING, "shmop_open: unable to get shm segment information");
- RETURN_FALSE;
- }
-
- shmop->addr = shmat(shmop->shmid, 0, shmop->shmatflg);
- if (shmop->addr == (char*) -1) {
- efree(shmop);
- php_error(E_WARNING, "shmop_open: unable to attach to shm segment");
- RETURN_FALSE;
- }
-
- shmop->size = shm.shm_segsz;
-
- rsid = zend_list_insert(shmop, shm_type);
- RETURN_LONG(rsid);
-}
-/* }}} */
-
-/* {{{ proto string shmop_read (int shmid, int start, int count)
- reads from a shm segment */
-PHP_FUNCTION(shmop_read)
-{
- zval **shmid, **start, **count;
- struct php_shmop *shmop;
- int type;
- char *startaddr;
- int bytes;
- char *return_string;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &shmid, &start, &count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(shmid);
- convert_to_long_ex(start);
- convert_to_long_ex(count);
-
- shmop = zend_list_find((*shmid)->value.lval, &type);
-
- if (!shmop) {
- php_error(E_WARNING, "shmop_read: can't find this segment");
- RETURN_FALSE;
- }
-
- if ((*start)->value.lval < 0 || (*start)->value.lval > shmop->size) {
- php_error(E_WARNING, "shmop_read: start is out of range");
- RETURN_FALSE;
- }
-
- if (((*start)->value.lval+(*count)->value.lval) > shmop->size) {
- php_error(E_WARNING, "shmop_read: count is out of range");
- RETURN_FALSE;
- }
-
- if ((*count)->value.lval < 0 ){
- php_error(E_WARNING, "shmop_read: count is out of range");
- RETURN_FALSE;
- }
-
- startaddr = shmop->addr + (*start)->value.lval;
- bytes = (*count)->value.lval ? (*count)->value.lval : shmop->size-(*start)->value.lval;
-
- return_string = emalloc(bytes+1);
- memcpy(return_string, startaddr, bytes);
- return_string[bytes] = 0;
-
- RETURN_STRINGL(return_string, bytes, 0);
-}
-/* }}} */
-
-/* {{{ proto void shmop_close (int shmid)
- closes a shared memory segment */
-PHP_FUNCTION(shmop_close)
-{
- zval **shmid;
- struct php_shmop *shmop;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &shmid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- shmop = zend_list_find((*shmid)->value.lval, &type);
-
- if (!shmop) {
- php_error(E_WARNING, "shmop_close: no such shmid");
- RETURN_FALSE;
- }
- zend_list_delete((*shmid)->value.lval);
-}
-/* }}} */
-
-/* {{{ proto int shmop_size (int shmid)
- returns the shm size */
-PHP_FUNCTION(shmop_size)
-{
- zval **shmid;
- struct php_shmop *shmop;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &shmid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(shmid);
-
- shmop = zend_list_find((*shmid)->value.lval, &type);
-
- if (!shmop) {
- php_error(E_WARNING, "shmop_size: no such segment");
- RETURN_FALSE;
- }
-
- RETURN_LONG(shmop->size);
-}
-/* }}} */
-
-/* {{{ proto int shmop_write (int shmid, string data, int offset)
- writes to a shared memory segment */
-PHP_FUNCTION(shmop_write)
-{
- zval **shmid, **data, **offset;
- struct php_shmop *shmop;
- int type;
- int writesize;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &shmid, &data, &offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(shmid);
- convert_to_string_ex(data);
- convert_to_long_ex(offset);
-
- shmop = zend_list_find((*shmid)->value.lval, &type);
-
- if (!shmop) {
- php_error(E_WARNING, "shmop_write: error no such segment");
- RETURN_FALSE;
- }
-
- if( (shmop->shmatflg&SHM_RDONLY) == SHM_RDONLY ) {
- php_error(E_WARNING, "shmop_write: trying to write to a read only segment");
- RETURN_FALSE;
- }
-
- if ( (*offset)->value.lval > shmop->size ) {
- php_error(E_WARNING, "shmop_write: offset out of range");
- RETURN_FALSE;
- }
-
- writesize = ((*data)->value.str.len<shmop->size-(*offset)->value.lval) ? (*data)->value.str.len : shmop->size-(*offset)->value.lval;
- memcpy(shmop->addr+(*offset)->value.lval, (*data)->value.str.val, writesize);
-
- RETURN_LONG(writesize);
-}
-/* }}} */
-
-/* {{{ proto bool shmop_delete (int shmid)
- mark segment for deletion */
-PHP_FUNCTION(shmop_delete)
-{
- zval **shmid;
- struct php_shmop *shmop;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &shmid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(shmid);
-
- shmop = zend_list_find((*shmid)->value.lval, &type);
-
- if (!shmop) {
- php_error(E_WARNING, "shmop_delete: error no such segment");
- RETURN_FALSE;
- }
-
- if (shmctl(shmop->shmid, IPC_RMID, NULL)) {
- php_error(E_WARNING, "shmop_delete: can't mark segment for deletion (are you the owner?)");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif /* HAVE_SHMOP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/shmop/shmop.dsp b/ext/shmop/shmop.dsp
deleted file mode 100644
index 4915c64f1c..0000000000
--- a/ext/shmop/shmop.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="shmop" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=shmop - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "shmop.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "shmop.mak" CFG="shmop - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "shmop - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "shmop - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "shmop - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SHMOP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\ZEND" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D "NDEBUG" /D "PHP_EXPORTS" /D "HAVE_SHMOP" /D COMPILE_DL_SHMOP=1 /D ZEND_DEBUG=0 /D "ZTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_shmop.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "shmop - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SHMOP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\ZEND" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_EXPORTS" /D "COMPILE_DL_SHMOP" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SHMOP=1 /D ZTS=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_shmop.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "shmop - Win32 Release_TS"
-# Name "shmop - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\shmop.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_shmop.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/skeleton/CREDITS b/ext/skeleton/CREDITS
deleted file mode 100644
index 58fc71019a..0000000000
--- a/ext/skeleton/CREDITS
+++ /dev/null
@@ -1 +0,0 @@
-extname \ No newline at end of file
diff --git a/ext/skeleton/EXPERIMENTAL b/ext/skeleton/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/skeleton/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/skeleton/create_stubs b/ext/skeleton/create_stubs
deleted file mode 100755
index 43939ed736..0000000000
--- a/ext/skeleton/create_stubs
+++ /dev/null
@@ -1,282 +0,0 @@
-#!/usr/bin/awk -f
-
-function gobble(s, x)
-{
- sub(/^ /, "", line)
- match(line, "^" "(" s ")")
- x = substr(line, 1, RLENGTH)
- line = substr(line, RLENGTH+1)
- return x
-}
-
-function convert(i, j, t)
-{
- type = argtypes[i,j]
- name = argnames[i,j]
- opt = optionals[i,j]
- tabs = x = ""
-
- for (i = 0; i < t; i++) { tabs = tabs "\t" }
-
- if (type == "int" || type == "long") {
- longs = longs "\tlong " name ";\n"
- } else if (type == "bool" || type == "boolean") {
- bools = bools "\tzend_bool " name ";\n"
- } else if (type == "double" || type == "float") {
- doubles = doubles "\tdouble " name ";\n"
- } else if (type == "string") {
- strings = strings "\tchar *" name " = NULL;\n"
- ints = ints "\tint " name "_len;\n"
- } else if (type == "array" || type == "object" || type == "mixed") {
- zvals = zvals "\tzval *" name " = NULL;\n"
- } else if (type == "resource" || type == "handle") {
- zvals = zvals "\tzval *" name " = NULL;\n"
- resources = resources "\tif (" name ") {\n" \
- "\t\tZEND_FETCH_RESOURCE(???, ???, " name ", " name "_id, \"???\", ???_rsrc_id);\n\t}\n"
- ints = ints "\tint " name "_id = -1;\n"
- }
-}
-
-function comment(s)
-{
- if (i_know_what_to_do_shut_up_i_dont_need_your_help_mode) {
- return
- } else {
- return s
- }
-}
-
-BEGIN {
- name = "[_A-Za-z][_A-Za-z0-9]*"
- type = "int|long|double|float|string|bool|boolean|array|object|resource|handle|mixed|void"
- spec = "l|l|d|d|s|b|b|a|o|r|r|z|"
- num_funcs = 0
-
-# create a map from type name to the spec
- split(type, type_array, "\|")
- split(spec, spec_array, "\|")
- for (i in type_array) {
- spec_map[type_array[i]] = spec_array[i]
- }
-
- if (xml && xml != "yes") {
- xmldoc = xml
- } else {
- xmldoc = extname "/" extname ".xml"
- }
-
-
- xmlhead = "<?xml version='1.0' encoding='iso-8859-1'?>\n" \
- "<!-- $Revision$ -->\n" \
- " <reference id=\"ref." extname "\">\n" \
- " <title> functions</title>\n" \
- " <titleabbrev></titleabbrev>\n\n" \
- " <partintro>\n" \
- " &warn.experimental;\n" \
- " <para>\n" \
- " </para>\n" \
- " </partintro>\n\n";
-
- xmlfoot = " </reference>\n\n" \
- "<!-- Keep this comment at the end of the file\n" \
- "Local variables:\n" \
- "mode: sgml\n" \
- "sgml-omittag:t\n" \
- "sgml-shorttag:t\n" \
- "sgml-minimize-attributes:nil\n" \
- "sgml-always-quote-attributes:t\n" \
- "sgml-indent-step:1\n" \
- "sgml-indent-data:t\n" \
- "indent-tabs-mode:nil\n" \
- "sgml-parent-document:nil\n" \
- "sgml-default-dtd-file:\"../../manual.ced\"\n" \
- "sgml-exposed-tags:nil\n" \
- "sgml-local-catalogs:nil\n" \
- "sgml-local-ecat-files:nil\n" \
- "End:\n" \
- "vim600: syn=xml fen fdm=syntax fdl=2 si\n" \
- "vim: et tw=78 syn=sgml\n" \
- "vi: ts=1 sw=1\n" \
- "-->\n"
-}
-
-{
- args_max = args_min = optional = i = spec_opt = 0
- line = $0
- spec_str = "\""
-
- func_type = gobble(type);
- func_name = gobble(name);
-
- if (gobble("\\(")) {
- if (gobble("\\[")) optional = 1
- while (arg_type = gobble(type)) {
- arg_name = gobble(name)
- if(arg_type == "void") {
- args_max = 0;
- args_min = 0;
- break;
- } else {
- argtypes[num_funcs,args_max] = arg_type
- argnames[num_funcs,args_max] = arg_name
-
- args_max++
- if (optional) {
- if (!spec_opt) {
- spec_str = spec_str "|"
- spec_opt = 1
- }
- optionals[num_funcs,i] = optional
- } else {
- args_min++
- }
- spec_str = spec_str spec_map[arg_type]
-
- if (x = gobble("\\[")) {
- optional++
- }
-
- y = gobble(",")
- if (!x && y && optional) {
- grouped_optional_param[num_funcs,i] = 1
- }
- i++
- }
- }
- }
-
-# if (x = gobble("\\)")) {
- gobble("\\]* *)")
- sub(/^[ \t]+/, "", line)
- fcomments[num_funcs] = line
-# }
-
- spec_str = spec_str "\""
-
- funcs[num_funcs] = func_name
- types[num_funcs] = func_type
- maxargs[num_funcs] = args_max
- minargs[num_funcs] = args_min
- specs[num_funcs] = spec_str
- spec_opts[num_funcs] = spec_opt
-
- num_funcs++
-}
-
-END {
- if (xml) print xmlhead > xmldoc
- for (i = 0; i < num_funcs; i++) {
- compareargc = maxargs[i] - minargs[i]
- closefetch = fetchargs = zvals = xmlparams = funcvals = resources = handleargs = closeopts = ""
- ints = longs = doubles = strings = bools = zvals = ""
-
- proto = "/* {{{ proto " types[i] " " funcs[i] "("
-
- refid = funcs[i]
- gsub(/_/, "-", refid)
- xmlstr = " <refentry id=\"function." refid "\">\n" \
- " <refnamediv>\n" \
- " <refname>" funcs[i] "</refname>\n" \
- " <refpurpose>" fcomments[i] "</refpurpose>\n" \
- " </refnamediv>\n" \
- " <refsect1>\n" \
- " <title>Description</title>\n" \
- " <funcsynopsis>\n" \
- " <funcprototype>\n" \
- " <funcdef>" types[i] " <function>" funcs[i] "</function></funcdef>\n"
-
- if (maxargs[i]>0) {
- fetchargs = "\tif (zend_parse_parameters("
- ints = ints "\tint argc = ZEND_NUM_ARGS();\n"
- fetchargs = fetchargs "argc TSRMLS_CC, " specs[i]
- } else {
- fetchargs = fetchargs "\tif (ZEND_NUM_ARGS() != 0) {\n\t\tWRONG_PARAM_COUNT;\n\t}"
- xmlparams = xmlparams " <void/>\n"
- }
-
- for (j = 0; j < maxargs[i]; j++) {
-
- fetchargs = fetchargs ", "
-
- fetchargs = fetchargs "&" argnames[i,j]
- if (argtypes[i,j] == "string") {
- fetchargs = fetchargs ", &" argnames[i,j] "_len"
- }
-
- xmlparams = xmlparams " <paramdef>" argtypes[i,j]
- if (j > minargs[i]-1) {
- if (!grouped_optional_param[i,j-1]) {
- if (j > 0) proto = proto " "
- proto = proto "["
- closeopts = closeopts "]"
- }
- xmlparams = xmlparams "\n <parameter><optional>" \
- argnames[i,j] \
- "</optional></parameter>\n </paramdef>\n"
- } else {
- xmlparams = xmlparams \
- " <parameter>" \
- argnames[i,j] \
- "</parameter></paramdef>\n"
- }
-
- if (j > 0) proto = proto ", "
- proto = proto argtypes[i,j] " " argnames[i,j]
-
- convert(i, j, 1)
- }
-
- proto = proto closeopts ")\n " fcomments[i] " */\nPHP_FUNCTION(" funcs[i] ")\n{"
- if (maxargs[i]>0) {
- fetchargs = fetchargs ") == FAILURE)" closefetch " \n\t\treturn;\n"
- }
- funcvals = strings ints longs doubles bools zvals
- xmlstr = xmlstr xmlparams \
- " </funcprototype>\n" \
- " </funcsynopsis>\n" \
- " &warn.experimental.func;\n" \
- " <para>\n" \
- " &warn.undocumented.func;\n" \
- " </para>\n" \
- " </refsect1>\n" \
- " </refentry>\n"
-
- print proto > stubfile
- if (funcvals) print funcvals > stubfile
- if (fetchargs) print fetchargs > stubfile
- if (resources) {
- print resources > stubfile
- if (!stubs) print "" > extname "/function_warning"
- }
- if (!i_know_what_to_do_shut_up_i_dont_need_your_help_mode) {
- print "\tphp_error(E_WARNING, \"" funcs[i] ": not yet implemented\");" > stubfile
- }
- print "}\n/* }}} */\n" > stubfile
-
- if (stubs) {
- h_stubs = h_stubs "PHP_FUNCTION(" funcs[i] ");\n"
- c_stubs = c_stubs "\tPHP_FE(" funcs[i] ",\tNULL)\n"
- } else {
- print "PHP_FUNCTION(" funcs[i] ");" > extname "/function_declarations"
- print "\tPHP_FE(" funcs[i] ",\tNULL)" > extname "/function_entries"
- }
-
- if (xml) print xmlstr > xmldoc
- }
-
- if (stubs) {
- print "\n/* ----------------------------------------------------------- */\n" > stubfile
- print c_stubs > stubfile
- print "\n/* ----------------------------------------------------------- */\n" > stubfile
- print h_stubs > stubfile
- }
-
- if (xml) print xmlfoot > xmldoc
-}
-
-#
-# Local variables:
-# tab-width: 2
-# c-basic-offset: 2
-# End:
-
diff --git a/ext/skeleton/php_skeleton.h b/ext/skeleton/php_skeleton.h
deleted file mode 100644
index 77cb8f3bd5..0000000000
--- a/ext/skeleton/php_skeleton.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* __header_here__ */
-
-#ifndef PHP_EXTNAME_H
-#define PHP_EXTNAME_H
-
-extern zend_module_entry extname_module_entry;
-#define phpext_extname_ptr &extname_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_EXTNAME_API __declspec(dllexport)
-#else
-#define PHP_EXTNAME_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(extname);
-PHP_MSHUTDOWN_FUNCTION(extname);
-PHP_RINIT_FUNCTION(extname);
-PHP_RSHUTDOWN_FUNCTION(extname);
-PHP_MINFO_FUNCTION(extname);
-
-PHP_FUNCTION(confirm_extname_compiled); /* For testing, remove later. */
-/* __function_declarations_here__ */
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(extname)
- int global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(extname)
-*/
-
-/* In every utility function you add that needs to use variables
- in php_extname_globals, call TSRM_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMLS_CC
- after the last function argument and declare your utility function
- with TSRMLS_DC after the last declared argument. Always refer to
- the globals in your function as EXTNAME_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define EXTNAME_G(v) TSRMG(extname_globals_id, zend_extname_globals *, v)
-#else
-#define EXTNAME_G(v) (extname_globals.v)
-#endif
-
-#endif /* PHP_EXTNAME_H */
-
-/* __footer_here__ */
diff --git a/ext/skeleton/skeleton.c b/ext/skeleton/skeleton.c
deleted file mode 100644
index 40e7ef76e2..0000000000
--- a/ext/skeleton/skeleton.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* __header_here__ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_extname.h"
-
-/* If you declare any globals in php_extname.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(extname)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_extname;
-
-/* {{{ extname_functions[]
- *
- * Every user visible function must have an entry in extname_functions[].
- */
-function_entry extname_functions[] = {
- PHP_FE(confirm_extname_compiled, NULL) /* For testing, remove later. */
- /* __function_entries_here__ */
- {NULL, NULL, NULL} /* Must be the last line in extname_functions[] */
-};
-/* }}} */
-
-/* {{{ extname_module_entry
- */
-zend_module_entry extname_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "extname",
- extname_functions,
- PHP_MINIT(extname),
- PHP_MSHUTDOWN(extname),
- PHP_RINIT(extname), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(extname), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(extname),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_EXTNAME
-ZEND_GET_MODULE(extname)
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("extname.global_value", "42", PHP_INI_ALL, OnUpdateInt, global_value, zend_extname_globals, extname_globals)
- STD_PHP_INI_ENTRY("extname.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_extname_globals, extname_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-/* {{{ php_extname_init_globals
- */
-/* Uncomment this function if you have INI entries
-static void php_extname_init_globals(zend_extname_globals *extname_globals)
-{
- extname_globals->global_value = 0;
- extname_globals->global_string = NULL;
-}
-*/
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(extname)
-{
- /* If you have INI entries, uncomment these lines
- ZEND_INIT_MODULE_GLOBALS(extname, php_extname_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(extname)
-{
- /* uncomment this line if you have INI entries
- UNREGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(extname)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(extname)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(extname)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "extname support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-
-/* Remove the following function when you have succesfully modified config.m4
- so that your module can be compiled into PHP, it exists only for testing
- purposes. */
-
-/* Every user-visible function in PHP should document itself in the source */
-/* {{{ proto string confirm_extname_compiled(string arg)
- Return a string to confirm that the module is compiled in */
-PHP_FUNCTION(confirm_extname_compiled)
-{
- char *arg = NULL;
- int arg_len, len;
- char string[256];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
- return;
- }
-
- len = sprintf(string, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "extname", arg);
- RETURN_STRINGL(string, len, 1);
-}
-/* }}} */
-/* The previous line is meant for vim and emacs, so it can correctly fold and
- unfold functions in source code. See the corresponding marks just before
- function definition, where the functions purpose is also documented. Please
- follow this convention for the convenience of others editing your code.
-*/
-
-/* __function_stubs_here__ */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/skeleton/skeleton.php b/ext/skeleton/skeleton.php
deleted file mode 100644
index 6774d63624..0000000000
--- a/ext/skeleton/skeleton.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?
-if(!extension_loaded('extname')) {
- dl('extname.so');
-}
-$module = 'extname';
-$functions = get_extension_funcs($module);
-echo "Functions available in the test extension:<br>\n";
-foreach($functions as $func) {
- echo $func."<br>\n";
-}
-echo "<br>\n";
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/skeleton/tests/001.phpt b/ext/skeleton/tests/001.phpt
deleted file mode 100644
index cf40e4e1a5..0000000000
--- a/ext/skeleton/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for extname presence
---SKIPIF--
-<?php if (!extension_loaded("extname")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "extname extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-extname extension is available \ No newline at end of file
diff --git a/ext/snmp/CREDITS b/ext/snmp/CREDITS
deleted file mode 100644
index 2c90dc12ab..0000000000
--- a/ext/snmp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SNMP
-Rasmus Lerdorf
diff --git a/ext/snmp/config.m4 b/ext/snmp/config.m4
deleted file mode 100644
index 53ab48b86d..0000000000
--- a/ext/snmp/config.m4
+++ /dev/null
@@ -1,84 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(snmp,for SNMP support,
-[ --with-snmp[=DIR] Include SNMP support.])
-
- if test "$PHP_SNMP" != "no"; then
-
- if test "$PHP_SNMP" = "yes"; then
- for i in /usr/include /usr/local/include; do
- test -f $i/snmp.h && SNMP_INCDIR=$i
- test -f $i/ucd-snmp/snmp.h && SNMP_INCDIR=$i/ucd-snmp
- test -f $i/snmp/snmp.h && SNMP_INCDIR=$i/snmp
- test -f $i/snmp/include/ucd-snmp/snmp.h && SNMP_INCDIR=$i/snmp/include/ucd-snmp
- done
- for i in /usr /usr/snmp /usr/local /usr/local/snmp; do
- test -f $i/lib/libsnmp.a -o -f $i/lib/libsnmp.$SHLIB_SUFFIX_NAME && SNMP_LIBDIR=$i/lib
- done
- else
- SNMP_INCDIR=$PHP_SNMP/include
- test -d $PHP_SNMP/include/ucd-snmp && SNMP_INCDIR=$PHP_SNMP/include/ucd-snmp
- SNMP_LIBDIR=$PHP_SNMP/lib
- fi
-
- if test -z "$SNMP_INCDIR"; then
- AC_MSG_ERROR(snmp.h not found. Check your SNMP installation.)
- elif test -z "$SNMP_LIBDIR"; then
- AC_MSG_ERROR(libsnmp not found. Check your SNMP installation.)
- fi
-
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$SNMP_INCDIR
- AC_CHECK_HEADERS(default_store.h)
- if test "$ac_cv_header_default_store_h" = "yes"; then
- AC_MSG_CHECKING(for OpenSSL support in SNMP libraries)
- AC_EGREP_CPP(yes,[
- #include <ucd-snmp-config.h>
- #if USE_OPENSSL
- yes
- #endif
- ],[
- SNMP_SSL=yes
- ],[
- SNMP_SSL=no
- ])
- fi
- CPPFLAGS=$old_CPPFLAGS
- AC_MSG_RESULT($SNMP_SSL)
-
- if test "$SNMP_SSL" = "yes"; then
- if test "$PHP_OPENSSL" != "no"; then
- PHP_ADD_LIBRARY(ssl, 1, SNMP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(crypto,1, SNMP_SHARED_LIBADD)
- else
- AC_MSG_ERROR(The UCD-SNMP in this system is built with SSL support.
-
- Add --with-openssl<=DIR> to your configure line.)
- fi
- fi
-
- AC_CHECK_LIB(kstat, kstat_read, [ PHP_ADD_LIBRARY(kstat,,SNMP_SHARED_LIBADD) ])
-
- AC_DEFINE(HAVE_SNMP,1,[ ])
- PHP_ADD_INCLUDE($SNMP_INCDIR)
- PHP_ADD_LIBRARY_WITH_PATH(snmp, $SNMP_LIBDIR, SNMP_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(snmp, snmp.c, $ext_shared)
- PHP_SUBST(SNMP_SHARED_LIBADD)
- fi
-
-
-AC_MSG_CHECKING(whether to enable UCD SNMP hack)
-AC_ARG_ENABLE(ucd-snmp-hack,
-[ --enable-ucd-snmp-hack Enable UCD SNMP hack],[
- if test "$enableval" = "yes" ; then
- AC_DEFINE(UCD_SNMP_HACK, 1, [ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h
deleted file mode 100644
index f4a07e6718..0000000000
--- a/ext/snmp/php_snmp.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-+----------------------------------------------------------------------+
-| PHP Version 4 |
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2002 The PHP Group |
-+----------------------------------------------------------------------+
-| This source file is subject to version 2.02 of the PHP license, |
-| that is bundled with this package in the file LICENSE, and is |
-| available at through the world-wide-web at |
-| http://www.php.net/license/2_02.txt. |
-| If you did not receive a copy of the PHP license and are unable to |
-| obtain it through the world-wide-web, please send a note to |
-| license@php.net so we can mail you a copy immediately. |
-+----------------------------------------------------------------------+
-| Authors: Rasmus Lerdorf <rasmus@php.net> |
-| Mike Jackson <mhjack@tscnet.com> |
-| Steven Lawrance <slawrance@technologist.com> |
-+----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-#ifndef PHP_SNMP_H
-#define PHP_SNMP_H
-
-#if HAVE_SNMP
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-extern zend_module_entry snmp_module_entry;
-#define snmp_module_ptr &snmp_module_entry
-
-PHP_MINIT_FUNCTION(snmp);
-PHP_FUNCTION(snmpget);
-PHP_FUNCTION(snmpwalk);
-PHP_FUNCTION(snmprealwalk);
-PHP_FUNCTION(snmp_get_quick_print);
-PHP_FUNCTION(snmp_set_quick_print);
-PHP_FUNCTION(snmpset);
-PHP_MINFO_FUNCTION(snmp);
-#else
-
-#define snmp_module_ptr NULL
-
-#endif /* HAVE_SNMP */
-
-#define phpext_snmp_ptr snmp_module_ptr
-
-#endif /* PHP_SNMP_H */
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
deleted file mode 100644
index 394950643c..0000000000
--- a/ext/snmp/snmp.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
-+----------------------------------------------------------------------+
-| PHP Version 4 |
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2002 The PHP Group |
-+----------------------------------------------------------------------+
-| This source file is subject to version 2.02 of the PHP license, |
-| that is bundled with this package in the file LICENSE, and is |
-| available at through the world-wide-web at |
-| http://www.php.net/license/2_02.txt. |
-| If you did not receive a copy of the PHP license and are unable to |
-| obtain it through the world-wide-web, please send a note to |
-| license@php.net so we can mail you a copy immediately. |
-+----------------------------------------------------------------------+
-| Authors: Rasmus Lerdorf <rasmus@php.net> |
-| Mike Jackson <mhjack@tscnet.com> |
-| Steven Lawrance <slawrance@technologist.com> |
-+----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_snmp.h"
-#include <sys/types.h>
-#ifdef PHP_WIN32
-#include <winsock.h>
-#include <errno.h>
-#include <process.h>
-#include "win32/time.h"
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#ifndef _OSD_POSIX
-#include <sys/errno.h>
-#else
-#include <errno.h> /* BS2000/OSD uses <errno.h>, not <sys/errno.h> */
-#endif
-#include <netdb.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SNMP
-
-#ifndef __P
-#ifdef __GNUC__
-#define __P(args) args
-#else
-#define __P(args) ()
-#endif
-#endif
-
-#ifdef HAVE_DEFAULT_STORE_H
-#include "default_store.h"
-#endif
-#include "asn1.h"
-#include "snmp_api.h"
-#include "snmp_client.h"
-#include "snmp_impl.h"
-#include "snmp.h"
-#include "parse.h"
-#include "mib.h"
-#include "version.h"
-
-/* ucd-snmp 3.3.1 changed the name of a few #defines... They've been changed back to the original ones in 3.5.3! */
-#ifndef SNMP_MSG_GET
-#define SNMP_MSG_GET GET_REQ_MSG
-#define SNMP_MSG_GETNEXT GETNEXT_REQ_MSG
-#endif
-
-void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st);
-
-/* constant - can be shared among threads */
-static oid objid_mib[] = {1, 3, 6, 1, 2, 1};
-
-/* {{{ snmp_functions[]
- */
-function_entry snmp_functions[] = {
- PHP_FE(snmpget, NULL)
- PHP_FE(snmpwalk, NULL)
- PHP_FE(snmprealwalk, NULL)
- PHP_FALIAS(snmpwalkoid, snmprealwalk, NULL)
- PHP_FE(snmp_get_quick_print, NULL)
- PHP_FE(snmp_set_quick_print, NULL)
- PHP_FE(snmpset, NULL)
- {NULL,NULL,NULL}
-};
-/* }}} */
-
-/* {{{ snmp_module_entry
- */
-zend_module_entry snmp_module_entry = {
- STANDARD_MODULE_HEADER,
- "snmp",
- snmp_functions,
- PHP_MINIT(snmp),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(snmp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SNMP
-ZEND_GET_MODULE(snmp)
-#endif
-
-/* THREAD_LS snmp_module php_snmp_module; - may need one of these at some point */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(snmp)
-{
- init_mib();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(snmp)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "UCD-SNMP Support", "enabled");
- php_info_print_table_row(2, "UCD-SNMP Version", VersionInfo);
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_snmp
-*
-* Generic SNMP object fetcher
-*
-* st=1 snmpget() - query an agent and return a single value.
-* st=2 snmpwalk() - walk the mib and return a single dimensional array
-* containing the values.
-* st=3 snmprealwalk() and snmpwalkoid() - walk the mib and return an
-* array of oid,value pairs.
-* st=5-8 ** Reserved **
-* st=11 snmpset() - query an agent and set a single value
-*
-*/
-static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st)
-{
- zval **a1, **a2, **a3, **a4, **a5, **a6, **a7;
- struct snmp_session session, *ss;
- struct snmp_pdu *pdu=NULL, *response;
- struct variable_list *vars;
- char *objid;
- oid name[MAX_NAME_LEN];
- int name_length;
- int status, count,rootlen=0,gotroot=0;
- oid root[MAX_NAME_LEN];
- char buf[2048];
- char buf2[2048];
- int keepwalking=1;
- long timeout=SNMP_DEFAULT_TIMEOUT;
- long retries=SNMP_DEFAULT_RETRIES;
- int myargc = ZEND_NUM_ARGS();
- char type = (char) 0;
- char *value = (char *) 0;
- char hostname[MAX_NAME_LEN];
- int remote_port = 161;
- char *pptr;
-
- if (myargc < 3 || myargc > 7 ||
- zend_get_parameters_ex(myargc, &a1, &a2, &a3, &a4, &a5, &a6, &a7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(a1);
- convert_to_string_ex(a2);
- convert_to_string_ex(a3);
-
- if (st == 11) {
- if (myargc < 5) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(a4);
- convert_to_string_ex(a5);
-
- if(myargc > 5) {
- convert_to_long_ex(a6);
- timeout = Z_LVAL_PP(a6);
- }
-
- if(myargc > 6) {
- convert_to_long_ex(a7);
- retries = Z_LVAL_PP(a7);
- }
-
- type = Z_STRVAL_PP(a4)[0];
- value = Z_STRVAL_PP(a5);
- } else {
- if(myargc > 3) {
- convert_to_long_ex(a4);
- timeout = Z_LVAL_PP(a4);
- }
-
- if(myargc > 4) {
- convert_to_long_ex(a5);
- retries = Z_LVAL_PP(a5);
- }
- }
-
- objid = Z_STRVAL_PP(a3);
-
- if (st >= 2) { /* walk */
- rootlen = MAX_NAME_LEN;
- if (strlen(objid)) { /* on a walk, an empty string means top of tree - no error */
- if (read_objid(objid, root, &rootlen)) {
- gotroot = 1;
- } else {
- php_error(E_WARNING,"Invalid object identifier: %s\n", objid);
- }
- }
-
- if (!gotroot) {
- memmove((char *) root, (char *) objid_mib, sizeof(objid_mib));
- rootlen = sizeof(objid_mib) / sizeof(oid);
- gotroot = 1;
- }
- }
-
- memset(&session, 0, sizeof(struct snmp_session));
-
- strcpy (hostname, Z_STRVAL_PP(a1));
- if ((pptr = strchr (hostname, ':'))) {
- remote_port = strtol (pptr + 1, NULL, 0);
- *pptr = 0;
- }
-
- session.peername = hostname;
- session.remote_port = remote_port;
- session.version = SNMP_VERSION_1;
- /*
- * FIXME: potential memory leak
- * This is a workaround for an "artifact" (Mike Slifcak)
- * in (at least) ucd-snmp 3.6.1 which frees
- * memory it did not allocate
- */
-#ifdef UCD_SNMP_HACK
- session.community = (u_char *)strdup(Z_STRVAL_PP(a2)); /* memory freed by SNMP library, strdup NOT estrdup */
-#else
- session.community = (u_char *)Z_STRVAL_PP(a2);
-#endif
- session.community_len = Z_STRLEN_PP(a2);
- session.retries = retries;
- session.timeout = timeout;
-
- session.authenticator = NULL;
- snmp_synch_setup(&session);
-
- if ((ss = snmp_open(&session)) == NULL) {
- php_error(E_WARNING,"Could not open snmp\n");
- RETURN_FALSE;
- }
-
- if (st >= 2) {
- memmove((char *)name, (char *)root, rootlen * sizeof(oid));
- name_length = rootlen;
- switch(st) {
- case 2:
- case 3:
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Cannot prepare result array");
- snmp_close(ss);
- RETURN_FALSE;
- }
- break;
- default:
- RETVAL_TRUE;
- break;
- }
- }
-
- while (keepwalking) {
- keepwalking = 0;
- if (st == 1) {
- pdu = snmp_pdu_create(SNMP_MSG_GET);
- name_length = MAX_NAME_LEN;
- if (!read_objid(objid, name, &name_length)) {
- php_error(E_WARNING,"Invalid object identifier: %s\n", objid);
- snmp_close(ss);
- RETURN_FALSE;
- }
- snmp_add_null_var(pdu, name, name_length);
- } else if (st == 11) {
- pdu = snmp_pdu_create(SNMP_MSG_SET);
- if (snmp_add_var(pdu, name, name_length, type, value)) {
- php_error(E_WARNING,"Could not add variable: %s\n", name);
- snmp_close(ss);
- RETURN_FALSE;
- }
- } else if (st >= 2) {
- pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
- snmp_add_null_var(pdu, name, name_length);
- }
-
-retry:
- status = snmp_synch_response(ss, pdu, &response);
- if (status == STAT_SUCCESS) {
- if (response->errstat == SNMP_ERR_NOERROR) {
- for (vars = response->variables; vars; vars = vars->next_variable) {
- if (st >= 2 && st != 11 &&
- (vars->name_length < rootlen || memcmp(root, vars->name, rootlen * sizeof(oid)))) {
- continue; /* not part of this subtree */
- }
-
- if (st != 11) {
- sprint_value((struct sbuf *)buf,vars->name, vars->name_length, vars);
- }
-
- if (st == 1) {
- RETVAL_STRING(buf,1);
- } else if (st == 2) {
- add_next_index_string(return_value,buf,1); /* Add to returned array */
- } else if (st == 3) {
- sprint_objid((struct sbuf *)buf2, vars->name, vars->name_length);
- add_assoc_string(return_value,buf2,buf,1);
- }
- if (st >= 2 && st != 11) {
- if (Z_TYPE_P(vars) != SNMP_ENDOFMIBVIEW &&
- Z_TYPE_P(vars) != SNMP_NOSUCHOBJECT && Z_TYPE_P(vars) != SNMP_NOSUCHINSTANCE) {
- memmove((char *)name, (char *)vars->name,vars->name_length * sizeof(oid));
- name_length = vars->name_length;
- keepwalking = 1;
- }
- }
- }
- } else {
- if (st != 2 || response->errstat != SNMP_ERR_NOSUCHNAME) {
- php_error(E_WARNING,"Error in packet.\nReason: %s\n", snmp_errstring(response->errstat));
- if (response->errstat == SNMP_ERR_NOSUCHNAME) {
- for (count=1, vars = response->variables; vars && count != response->errindex;
- vars = vars->next_variable, count++);
- if (vars) {
- sprint_objid((struct sbuf *)buf,vars->name, vars->name_length);
- }
- php_error(E_WARNING,"This name does not exist: %s\n",buf);
- }
- if (st == 1) {
- if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) {
- goto retry;
- }
- } else if (st == 11) {
- if ((pdu = snmp_fix_pdu(response, SNMP_MSG_SET)) != NULL) {
- goto retry;
- }
- } else if (st >= 2) {
- if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GETNEXT)) != NULL) {
- goto retry;
- }
- }
- snmp_close(ss);
- RETURN_FALSE;
- }
- }
- } else if (status == STAT_TIMEOUT) {
- php_error(E_WARNING,"No Response from %s\n", Z_STRVAL_PP(a1));
- snmp_close(ss);
- RETURN_FALSE;
- } else { /* status == STAT_ERROR */
- php_error(E_WARNING,"An error occurred, Quitting...\n");
- snmp_close(ss);
- RETURN_FALSE;
- }
- if (response) {
- snmp_free_pdu(response);
- }
- } /* keepwalking */
- snmp_close(ss);
-}
-/* }}} */
-
-/* {{{ proto string snmpget(string host, string community, string object_id [, int timeout [, int retries]])
- Fetch a SNMP object */
-PHP_FUNCTION(snmpget)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])
- Return all objects under the specified object id */
-PHP_FUNCTION(snmpwalk)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,2);
-}
-/* }}} */
-
-/* {{{ proto array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])
- Return all objects including their respective object id withing the specified one */
-PHP_FUNCTION(snmprealwalk)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,3);
-}
-/* }}} */
-
-/* {{{ proto bool snmp_get_quick_print(void)
- Return the current status of quick_print */
-PHP_FUNCTION(snmp_get_quick_print)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(snmp_get_quick_print() ? 1 : 0);
-}
-/* }}} */
-
-/* {{{ proto void snmp_set_quick_print(int quick_print)
- Return all objects including their respective object id withing the specified one */
-PHP_FUNCTION(snmp_set_quick_print)
-{
- int argc = ZEND_NUM_ARGS();
- long a1;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
- return;
- }
-
- snmp_set_quick_print((int)a1);
-}
-/* }}} */
-
-/* {{{ proto int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])
- Set the value of a SNMP object */
-PHP_FUNCTION(snmpset)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,11);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/snmp/snmp.dsp b/ext/snmp/snmp.dsp
deleted file mode 100644
index ed016a4257..0000000000
--- a/ext/snmp/snmp.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="snmp" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=snmp - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "snmp.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "snmp.mak" CFG="snmp - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "snmp - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "snmp - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "snmp - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_SNMP" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SNMP_EXPORTS" /D "COMPILE_DL_SNMP" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SNMP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib libsnmp.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_snmp.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "snmp - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_SNMP" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SNMP_EXPORTS" /D "COMPILE_DL_SNMP" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SNMP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib libsnmp.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_snmp.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "snmp - Win32 Release_TS"
-# Name "snmp - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\snmp.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_snmp.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/snmp/winsnmp.c b/ext/snmp/winsnmp.c
deleted file mode 100644
index 3a70948255..0000000000
--- a/ext/snmp/winsnmp.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
-Created from the snmputil sample in the Microsoft SDK for NT
-*/
-
-#include "php.h"
-#if COMPILE_DL
-#include "../phpdl.h"
-#include "functions/dl.h"
-#endif
-#include "php_snmp.h"
-#include <sys/types.h>
-
-#include <windows.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <malloc.h>
-
-#if HAVE_SNMP
-
-#include <snmp.h>
-#include <mgmtapi.h>
-
-/* {{{ snmp_functions[]
- */
-function_entry snmp_functions[] = {
- {"snmpget", php3_snmpget, NULL},
- {"snmpwalk", php3_snmpwalk, NULL},
- {NULL,NULL,NULL}
-};
-/* }}} */
-
-/* {{{ snmp_module_entry
- */
-zend_module_entry snmp_module_entry = {
- STANDARD_MODULE_HEADER,
- "SNMP",
- snmp_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#if COMPILE_DL
-DLEXPORT zend_module_entry *get_module() { return &snmp_module_entry; }
-#endif
-
-#define GET 1
-#define WALK 2
-#define GETNEXT 3
-
-#define TIMEOUT 6000 /* milliseconds */
-#define RETRIES 3
-
-/* {{{ _php_snmp
- */
-void _php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
- pval *a1, *a2, *a3;
- INT operation;
- LPSTR agent;
- LPSTR community;
- RFC1157VarBindList variableBindings;
- LPSNMP_MGR_SESSION session;
-
- INT timeout = TIMEOUT;
- INT retries = RETRIES;
-
- BYTE requestType;
- AsnInteger errorStatus;
- AsnInteger errorIndex;
- AsnObjectIdentifier oid;
- char *chkPtr = NULL;
-
- if (getParameters(ht, 3, &a1, &a2, &a3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(a1);
- convert_to_string(a2);
- convert_to_string(a3);
-
- agent=Z_STRVAL_P(a1);
- community=Z_STRVAL_P(a2);
- operation=st;
- SnmpMgrStrToOid(Z_STRVAL_P(a3), &oid);
-
-/*
- I've limited this to only one oid, but we can create a
- list of oid's here, and expand the function to take multiple
- oid's
-*/
- variableBindings.list->name = oid;
- variableBindings.list->value.asnType = ASN_NULL;
- variableBindings.len = 1;
-
-/* Establish a SNMP session to communicate with the remote agent. The
- community, communications timeout, and communications retry count
- for the session are also required.
-*/
- if ((session = SnmpMgrOpen(agent, community, timeout, retries)) == NULL){
- php_error(E_WARNING,"error on SnmpMgrOpen %d\n", GetLastError());
- }
-
- /* Determine and perform the requested operation.*/
- if (operation == GET || operation == GETNEXT){
- /* Get and GetNext are relatively simple operations to perform.
- Simply initiate the request and process the result and/or
- possible error conditions. */
-
- if (operation == GET){
- requestType = ASN_RFC1157_GETREQUEST;
- } else {
- requestType = ASN_RFC1157_GETNEXTREQUEST;
- }
-
- /* Request that the API carry out the desired operation.*/
- if (!SnmpMgrRequest(session, requestType, &variableBindings,
- &errorStatus, &errorIndex)){
- /* The API is indicating an error. */
- php_error(E_WARNING,"error on SnmpMgrRequest %d\n", GetLastError());
- } else {
- /* The API succeeded, errors may be indicated from the remote
- agent. */
- if (errorStatus > 0){
- php_error(E_WARNING,"Error: errorStatus=%d, errorIndex=%d\n",
- errorStatus, errorIndex);
- } else {
- /* Display the resulting variable bindings.*/
- UINT i;
- char *str = NULL;
-
- for(i=0; i < variableBindings.len; i++)
- {
- SnmpMgrOidToStr(&variableBindings.list[i].name, &str);
- php_printf("Variable = %s\n", str);
- if (str) SNMP_free(str);
-
- php_printf("Value = ");
- SnmpUtilPrintAsnAny(&variableBindings.list[i].value);
-
- php_printf("\n");
- } /* end for() */
- }
- }
-
- /* Free the variable bindings that have been allocated.*/
- SnmpUtilVarBindListFree(&variableBindings);
- }
- else if (operation == WALK)
- {
- /* Walk is a common term used to indicate that all MIB variables
- under a given OID are to be traversed and displayed. This is
- a more complex operation requiring tests and looping in addition
- to the steps for get/getnext above. */
- AsnObjectIdentifier root;
- AsnObjectIdentifier tempOid;
-
- SnmpUtilOidCpy(&root, &variableBindings.list[0].name);
- requestType = ASN_RFC1157_GETNEXTREQUEST;
-
- while(1)
- {
- if (!SnmpMgrRequest(session, requestType, &variableBindings,
- &errorStatus, &errorIndex)){
- /* The API is indicating an error.*/
- php_error(E_WARNING,"error on SnmpMgrRequest %d\n", GetLastError());
- break;
- }
- else
- {
- /* The API succeeded, errors may be indicated from the remote
- agent.
- Test for end of subtree or end of MIB. */
- if (errorStatus == SNMP_ERRORSTATUS_NOSUCHNAME ||
- SnmpUtilOidNCmp(&variableBindings.list[0].name,
- &root, root.idLength))
- {
- PUTS("End of MIB subtree.\n\n");
- break;
- }
-
- /* Test for general error conditions or sucesss. */
- if (errorStatus > 0){
- php_error(E_ERROR,"Error: errorStatus=%d, errorIndex=%d \n",
- errorStatus, errorIndex);
- break;
- }
- else
- {
- /* Display resulting variable binding for this iteration. */
- char *str = NULL;
-
- SnmpMgrOidToStr(&variableBindings.list[0].name, &str);
- php_printf("Variable = %s\n", str);
- if (str) SNMP_free(str);
-
- php_printf("Value = ");
- SnmpUtilPrintAsnAny(&variableBindings.list[0].value);
-
- php_printf("\n");
- }
- } /* end if () */
- /* Prepare for the next iteration. Make sure returned oid is
- preserved and the returned value is freed.
- */
- SnmpUtilOidCpy(&tempOid, &variableBindings.list[0].name);
- SnmpUtilVarBindFree(&variableBindings.list[0]);
- SnmpUtilOidCpy(&variableBindings.list[0].name, &tempOid);
- variableBindings.list[0].value.asnType = ASN_NULL;
- SnmpUtilOidFree(&tempOid);
- } /* end while() */
- /* Free the variable bindings that have been allocated.*/
- SnmpUtilVarBindListFree(&variableBindings);
- SnmpUtilOidFree(&root);
- } /* end if (operation) */
-
-
- /* Close SNMP session with the remote agent.*/
- if (!SnmpMgrClose(session)){
- php_error(E_WARNING,"error on SnmpMgrClose %d\n", GetLastError());
- }
-}
-/* }}} */
-
-/* {{{ php3_snmpget
- */
-DLEXPORT void php3_snmpget(INTERNAL_FUNCTION_PARAMETERS) {
- _php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ php3_snmpwalk
- */
-DLEXPORT void php3_snmpwalk(INTERNAL_FUNCTION_PARAMETERS) {
- _php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,2);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/sockets/CREDITS b/ext/sockets/CREDITS
deleted file mode 100644
index 2be7552d79..0000000000
--- a/ext/sockets/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sockets
-Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene
diff --git a/ext/sockets/EXPERIMENTAL b/ext/sockets/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/sockets/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/sockets/config.m4 b/ext/sockets/config.m4
deleted file mode 100644
index cdfa985aef..0000000000
--- a/ext/sockets/config.m4
+++ /dev/null
@@ -1,21 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(sockets, whether to enable sockets support,
-[ --enable-sockets Enable sockets support])
-
-if test "$PHP_SOCKETS" != "no"; then
-
- AC_CHECK_FUNCS([hstrerror])
- AC_CHECK_HEADERS([netdb.h netinet/tcp.h sys/un.h errno.h])
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
- ], [static struct msghdr tp; int n = (int) tp.msg_flags; return n],
- [AC_DEFINE(MISSING_MSGHDR_MSGFLAGS, 1, [ ])]
- )
- AC_DEFINE([HAVE_SOCKETS], 1, [ ])
-
- PHP_NEW_EXTENSION([sockets], [sockets.c], [$ext_shared])
-fi
diff --git a/ext/sockets/php_sockets.h b/ext/sockets/php_sockets.h
deleted file mode 100644
index b7f47f5072..0000000000
--- a/ext/sockets/php_sockets.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SOCKETS_H
-#define PHP_SOCKETS_H
-
-/* $Id$ */
-
-#if HAVE_SOCKETS
-
-extern zend_module_entry sockets_module_entry;
-#define phpext_sockets_ptr &sockets_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_SOCKETS_API __declspec(dllexport)
-#include <winsock.h>
-#else
-#define PHP_SOCKETS_API
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#endif
-
-PHP_MINIT_FUNCTION(sockets);
-PHP_MINFO_FUNCTION(sockets);
-
-PHP_FUNCTION(socket_iovec_alloc);
-PHP_FUNCTION(socket_iovec_free);
-PHP_FUNCTION(socket_iovec_set);
-PHP_FUNCTION(socket_iovec_fetch);
-PHP_FUNCTION(socket_iovec_add);
-PHP_FUNCTION(socket_iovec_delete);
-PHP_FUNCTION(socket_select);
-PHP_FUNCTION(socket_create_listen);
-PHP_FUNCTION(socket_create_pair);
-PHP_FUNCTION(socket_accept);
-PHP_FUNCTION(socket_set_nonblock);
-PHP_FUNCTION(socket_set_block);
-PHP_FUNCTION(socket_listen);
-PHP_FUNCTION(socket_close);
-PHP_FUNCTION(socket_write);
-PHP_FUNCTION(socket_read);
-PHP_FUNCTION(socket_getsockname);
-PHP_FUNCTION(socket_getpeername);
-PHP_FUNCTION(socket_create);
-PHP_FUNCTION(socket_connect);
-PHP_FUNCTION(socket_strerror);
-PHP_FUNCTION(socket_bind);
-PHP_FUNCTION(socket_recv);
-PHP_FUNCTION(socket_send);
-PHP_FUNCTION(socket_recvfrom);
-PHP_FUNCTION(socket_sendto);
-PHP_FUNCTION(socket_recvmsg);
-PHP_FUNCTION(socket_sendmsg);
-PHP_FUNCTION(socket_readv);
-PHP_FUNCTION(socket_writev);
-PHP_FUNCTION(socket_get_option);
-PHP_FUNCTION(socket_set_option);
-PHP_FUNCTION(socket_shutdown);
-PHP_FUNCTION(socket_last_error);
-PHP_FUNCTION(socket_clear_error);
-
-typedef struct php_iovec {
- struct iovec *iov_array;
- unsigned int count;
-} php_iovec_t;
-
-#ifndef PHP_WIN32
-typedef int SOCKET;
-#endif
-
-typedef struct {
- SOCKET bsd_socket;
- int type;
- int error;
-} php_socket;
-
-typedef struct {
- zend_bool use_system_read;
-} php_sockets_globals;
-
-/* Prototypes */
-int open_listen_sock(php_socket **php_sock, int port, int backlog TSRMLS_DC);
-int accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC);
-int php_read(int bsd_socket, void *buf, int maxlen);
-
-ZEND_BEGIN_MODULE_GLOBALS(sockets)
- int last_error;
-ZEND_END_MODULE_GLOBALS(sockets)
-
-#ifdef ZTS
-#define SOCKETS_G(v) TSRMG(sockets_globals_id, zend_sockets_globals *, v)
-#else
-#define SOCKETS_G(v) (sockets_globals.v)
-#endif
-
-#else
-#define phpext_sockets_ptr NULL
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
diff --git a/ext/sockets/php_sockets_win.c b/ext/sockets/php_sockets_win.c
deleted file mode 100644
index 374d03b35b..0000000000
--- a/ext/sockets/php_sockets_win.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef PHP_WIN32
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "php.h"
-#include "php_sockets.h"
-#include "php_sockets_win.h"
-
-ssize_t readv(SOCKET sock, const struct iovec *iov, int iovcnt) {
- size_t bytes, remain, len, pos = 0;
- ssize_t retval;
- int i;
- char *buffer = NULL;
-
- for(bytes=0, i=0; i<iovcnt; i++) {
- bytes += iov[i].iov_len;
- }
-
- buffer = (char*)emalloc(bytes);
- if (buffer == NULL) {
- return -1;
- }
-
- retval = recv(sock, buffer, bytes, 0);
- if(retval < 0) {
- efree(buffer);
- return retval;
- }
-
- remain = bytes = (size_t) retval;
-
- for(i=0; i<iovcnt; i++) {
- len = ((unsigned int)iov[i].iov_len < remain) ? iov[i].iov_len : remain;
- memcpy(iov[i].iov_base, buffer+pos, len);
- pos += len;
- remain -= len;
- }
-
- efree(buffer);
- return bytes;
-}
-
-ssize_t writev(SOCKET sock, const struct iovec *iov, int iovcnt) {
- size_t bytes, pos = 0;
- ssize_t retval;
- int i;
- char *buffer = NULL;
-
- for(bytes=0, i=0; i<iovcnt; i++) {
- bytes += iov[i].iov_len;
- }
-
- buffer = (char*)emalloc(bytes);
-
- if(buffer == NULL) {
- return -1;
- }
-
- for(i=0; i<iovcnt; i++) {
- memcpy(buffer+pos, iov[i].iov_base, iov[i].iov_len);
- pos += iov[i].iov_len;
- }
-
- retval = send(sock, buffer, bytes, 0);
- efree(buffer);
-
- return retval;
-}
-
-ssize_t recvmsg(SOCKET sock, struct msghdr *msg, int flags) {
- set_errno(WSAEOPNOTSUPP);
- return -1;
-}
-
-ssize_t sendmsg(SOCKET sock, struct msghdr *msg, int flags) {
- set_errno(WSAEOPNOTSUPP);
- return -1;
-}
-
-int socketpair(int domain, int type, int protocol, SOCKET sock[2]) {
- struct sockaddr_in address;
- SOCKET redirect;
- int size = sizeof(address);
-
- if(domain != AF_INET) {
- set_errno(WSAENOPROTOOPT);
- return -1;
- }
-
-
- sock[0] = socket(domain, type, protocol);
- address.sin_addr.s_addr = INADDR_ANY;
- address.sin_family = AF_INET;
- address.sin_port = 0;
-
- bind(sock[0], (struct sockaddr*)&address, sizeof(address));
- if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) {
-
- }
-
- listen(sock[0], 2);
- sock[1] = socket(domain, type, protocol);
- address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-
- connect(sock[1], (struct sockaddr*)&address, sizeof(address));
- redirect = accept(sock[0],(struct sockaddr*)&address, &size);
-
- close(sock[0]);
- sock[0] = redirect;
-
- if(sock[0] == INVALID_SOCKET ) {
- close(sock[0]);
- close(sock[1]);
- set_errno(WSAECONNABORTED);
- return -1;
- }
-
- return 0;
-}
-
-int inet_aton(const char *cp, struct in_addr *inp) {
- inp->s_addr = inet_addr(cp);
-
- if (inp->s_addr == INADDR_NONE) {
- return 0;
- }
-
- return 1;
-}
-
-int fcntl(int fd, int cmd, ...) {
- va_list va;
- int retval, io, mode;
-
- va_start(va, cmd);
-
- switch(cmd) {
- case F_GETFL:
- case F_SETFD:
- case F_GETFD:
- default:
- retval = -1;
- break;
-
- case F_SETFL:
- io = va_arg(va, int);
- mode = io == O_NONBLOCK ? 1 : 0;
- retval = ioctlsocket(fd, io, &mode);
- break;
- }
-
- va_end(va);
- return retval;
-}
-#endif \ No newline at end of file
diff --git a/ext/sockets/php_sockets_win.h b/ext/sockets/php_sockets_win.h
deleted file mode 100644
index c89ef40d1e..0000000000
--- a/ext/sockets/php_sockets_win.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef PHP_WIN32
-
-#define F_SETFL 0
-#define F_GETFL 1
-#define F_SETFD 2
-#define F_GETFD 3
-
-#define O_NONBLOCK FIONBIO
-
-#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-#define ECONNRESET WSAECONNRESET
-
-#ifdef errno
-#undef errno
-#endif
-
-#define errno WSAGetLastError()
-#define h_errno WSAGetLastError()
-#define set_errno(a) WSASetLastError(a)
-#define set_h_errno(a) WSASetLastError(a)
-#define close(a) closesocket(a)
-#define CMSG_DATA(cmsg) ((cmsg)->cmsg_data)
-
-typedef int ssize_t;
-
-struct sockaddr_un {
- short sun_family;
- char sun_path[108];
-};
-
-struct iovec {
- char * iov_base;
- int iov_len;
-};
-
-struct msghdr {
- void* msg_name;
- socklen_t msg_namelen;
- struct iovec* msg_iov;
- int msg_iovlen;
- void* msg_control;
- socklen_t msg_controllen;
- int msg_flags;
-};
-
-struct cmsghdr {
- socklen_t cmsg_len;
- int cmsg_level;
- int cmsg_type;
- unsigned char cmsg_data[];
-};
-
-ssize_t readv(SOCKET sock, const struct iovec *iov, int iovcnt);
-ssize_t writev(SOCKET sock, const struct iovec *iov, int iovcnt);
-ssize_t recvmsg(SOCKET sock, struct msghdr *msg, int flags);
-ssize_t sendmsg(SOCKET sock, struct msghdr *msg, int flags);
-int socketpair(int domain, int type, int protocol, SOCKET sock[2]);
-int inet_aton(const char *cp, struct in_addr *inp);
-int fcntl(int fd, int cmd, ...);
-
-#endif
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
deleted file mode 100644
index 015cc099c4..0000000000
--- a/ext/sockets/sockets.c
+++ /dev/null
@@ -1,1994 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | Jason Greene <jason@php.net> |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SOCKETS
-
-#define _XOPEN_SOURCE_EXTENDED
-#define _XPG4_2
-#define __EXTENSIONS__
-
-#include "php_network.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-
-#ifndef PHP_WIN32
-# include "php_sockets.h"
-# include <sys/types.h>
-# include <sys/socket.h>
-# include <netdb.h>
-# include <netinet/in.h>
-# include <netinet/tcp.h>
-# include <sys/un.h>
-# include <arpa/inet.h>
-# include <sys/time.h>
-# include <unistd.h>
-# include <errno.h>
-# include <fcntl.h>
-# include <signal.h>
-# include <sys/uio.h>
-# define IS_INVALID_SOCKET(a) (a->bsd_socket < 0)
-# define set_errno(a) (errno = a)
-# define set_h_errno(a) (h_errno = a)
-#else /* windows */
-# include <winsock.h>
-# include "php_sockets.h"
-# include "php_sockets_win.h"
-# define IS_INVALID_SOCKET(a) (a->bsd_socket == INVALID_SOCKET)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(sockets)
-
-#ifndef MSG_WAITALL
-#ifdef LINUX
-#define MSG_WAITALL 0x00000100
-#else
-#define MSG_WAITALL 0x00000000
-#endif
-#endif
-
-#ifndef SUN_LEN
-#define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
-#endif
-
-#ifndef PF_INET
-#define PF_INET AF_INET
-#endif
-
-
-#define PHP_NORMAL_READ 0x0001
-#define PHP_BINARY_READ 0x0002
-
-#define PHP_SOCKET_ERROR(socket,msg,errn) socket->error = errn; \
- SOCKETS_G(last_error) = errn; \
- php_error(E_WARNING, "%s() %s [%d]: %s", \
- get_active_function_name(TSRMLS_C), msg, errn, php_strerror(errn))
-
-static int le_iov;
-#define le_iov_name "Socket I/O vector"
-static int le_socket;
-#define le_socket_name "Socket"
-
-static unsigned char first_through_third_args_force_ref[] =
-{3, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE};
-
-static unsigned char second_and_third_args_force_ref[] =
-{3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE};
-
-static unsigned char second_arg_of_four_force_ref[] =
-{4, BYREF_NONE, BYREF_FORCE, BYREF_NONE, BYREF_NONE};
-
-static unsigned char fourth_arg_force_ref[] =
-{4, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE};
-
-static unsigned char second_fifth_and_sixth_args_force_ref[] =
-{6, BYREF_NONE, BYREF_FORCE, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE};
-
-static unsigned char third_through_seventh_args_force_ref[] =
-{7, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE};
-
-/* {{{ sockets_functions[]
- */
-function_entry sockets_functions[] = {
- PHP_FE(socket_iovec_alloc, NULL)
- PHP_FE(socket_iovec_free, NULL)
- PHP_FE(socket_iovec_set, NULL)
- PHP_FE(socket_iovec_fetch, NULL)
- PHP_FE(socket_iovec_add, NULL)
- PHP_FE(socket_iovec_delete, NULL)
- PHP_FE(socket_select, first_through_third_args_force_ref)
- PHP_FE(socket_create, NULL)
- PHP_FE(socket_create_listen, NULL)
- PHP_FE(socket_create_pair, fourth_arg_force_ref)
- PHP_FE(socket_accept, NULL)
- PHP_FE(socket_set_nonblock, NULL)
- PHP_FE(socket_set_block, NULL)
- PHP_FE(socket_listen, NULL)
- PHP_FE(socket_close, NULL)
- PHP_FE(socket_write, NULL)
- PHP_FE(socket_read, NULL)
- PHP_FE(socket_getsockname, second_and_third_args_force_ref)
- PHP_FE(socket_getpeername, second_and_third_args_force_ref)
- PHP_FE(socket_connect, NULL)
- PHP_FE(socket_strerror, NULL)
- PHP_FE(socket_bind, NULL)
- PHP_FE(socket_recv, second_arg_of_four_force_ref)
- PHP_FE(socket_send, NULL)
- PHP_FE(socket_recvfrom, second_fifth_and_sixth_args_force_ref)
- PHP_FE(socket_sendto, NULL)
- PHP_FE(socket_recvmsg, third_through_seventh_args_force_ref)
- PHP_FE(socket_sendmsg, NULL)
- PHP_FE(socket_readv, NULL)
- PHP_FE(socket_writev, NULL)
- PHP_FE(socket_get_option, NULL)
- PHP_FE(socket_set_option, NULL)
- PHP_FE(socket_shutdown, NULL)
- PHP_FE(socket_last_error, NULL)
- PHP_FE(socket_clear_error, NULL)
-
- /* for downwards compatability */
- PHP_FALIAS(socket_getopt, socket_get_option, NULL)
- PHP_FALIAS(socket_setopt, socket_set_option, NULL)
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry sockets_module_entry = {
- STANDARD_MODULE_HEADER,
- "sockets",
- sockets_functions,
- PHP_MINIT(sockets),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(sockets),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_SOCKETS
-ZEND_GET_MODULE(sockets)
-#endif
-
-/* inet_ntop should be used instead of inet_ntoa */
-int inet_ntoa_lock = 0;
-
-static void destroy_iovec(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- unsigned int i;
- php_iovec_t *iov = (php_iovec_t *) rsrc->ptr;
-
- if (iov->count && iov->iov_array) {
- for (i = 0; i < iov->count; i++) {
- efree(iov->iov_array[i].iov_base);
- }
-
- efree(iov->iov_array);
- efree(iov);
- }
-}
-
-static void destroy_socket(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_socket *php_sock = (php_socket *) rsrc->ptr;
-
- close(php_sock->bsd_socket);
- efree(php_sock);
-}
-
-static char *php_strerror(int error);
-
-int open_listen_sock(php_socket **php_sock, int port, int backlog TSRMLS_DC)
-{
- struct sockaddr_in la;
- struct hostent *hp;
- php_socket *sock = (php_socket*)emalloc(sizeof(php_socket));
-
- *php_sock = sock;
-
-#ifndef PHP_WIN32
- if ((hp = gethostbyname("0.0.0.0")) == NULL) {
-#else
- if ((hp = gethostbyname("localhost")) == NULL) {
-#endif
- efree(sock);
- return 0;
- }
-
- memcpy((char *) &la.sin_addr, hp->h_addr, hp->h_length);
- la.sin_family = hp->h_addrtype;
- la.sin_port = htons((unsigned short) port);
-
- sock->bsd_socket = socket(PF_INET, SOCK_STREAM, 0);
-
- if (IS_INVALID_SOCKET(sock)) {
- PHP_SOCKET_ERROR(sock, "unable to create listening socket", errno);
- efree(sock);
- return 0;
- }
-
- sock->type = PF_INET;
-
- if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) < 0) {
- PHP_SOCKET_ERROR(sock, "unable to bind to given adress", errno);
- close(sock->bsd_socket);
- efree(sock);
- return 0;
- }
-
- if (listen(sock->bsd_socket, backlog) < 0) {
- PHP_SOCKET_ERROR(sock, "unable to listen on socket", errno);
- close(sock->bsd_socket);
- efree(sock);
- return 0;
- }
-
- return 1;
-}
-
-int accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC)
-{
- socklen_t salen;
- php_socket *out_sock = (php_socket*)emalloc(sizeof(php_socket));
-
- *new_sock = out_sock;
- salen = sizeof(*la);
-
- out_sock->bsd_socket = accept(in_sock->bsd_socket, la, &salen);
-
- if (IS_INVALID_SOCKET(out_sock)) {
- PHP_SOCKET_ERROR(out_sock, "unable to accept incoming connection", errno);
- efree(out_sock);
- return 0;
- }
-
- return 1;
-}
-
-/* {{{ php_read -- wrapper around read() so that it only reads to a \r or \n. */
-int php_read(int bsd_socket, void *buf, int maxlen)
-{
- int m = 0, n = 0;
- int no_read = 0;
- int nonblock = 0;
- char *t = (char *) buf;
-
- m = fcntl(bsd_socket, F_GETFL);
- if (m < 0) {
- return m;
- }
-
- nonblock = (m & O_NONBLOCK);
- m = 0;
-
- set_errno(0);
-
- while (*t != '\n' && *t != '\r' && n < maxlen) {
- if (m > 0) {
- t++;
- n++;
- } else if (m == 0) {
- no_read++;
- if (nonblock && no_read >= 2) {
- return n;
- /* The first pass, m always is 0, so no_read becomes 1
- * in the first pass. no_read becomes 2 in the second pass,
- * and if this is nonblocking, we should return.. */
- }
-
- if (no_read > 200) {
- set_errno(ECONNRESET);
- return -1;
- }
- }
-
- if (n < maxlen) {
- m = read(bsd_socket, (void *) t, 1);
- }
-
- if (errno != 0 && errno != ESPIPE && errno != EAGAIN) {
- return -1;
- }
-
- set_errno(0);
- }
-
- if (n < maxlen) {
- n++;
- /* The only reasons it makes it to here is
- * if '\n' or '\r' are encountered. So, increase
- * the return by 1 to make up for the lack of the
- * '\n' or '\r' in the count (since read() takes
- * place at the end of the loop..) */
- }
-
- return n;
-}
-/* }}} */
-
-static char *php_strerror(int error) {
- const char *buf;
-
-#ifndef PHP_WIN32
- if (error < -10000) {
- error = -error - 10000;
-
-#ifdef HAVE_HSTRERROR
- buf = hstrerror(error);
-#else
- {
- static char buf[100];
- sprintf(buf, "Host lookup error %d", error);
- }
-#endif
- } else {
- buf = strerror(error);
- }
-#else
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL);
-#endif
-
- return (buf ? (char *) buf : "");
-}
-
-/* Sets addr by hostname, or by ip in string form (AF_INET) */
-int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock TSRMLS_DC) {
- struct in_addr tmp;
- struct hostent *host_entry;
-
- if (inet_aton(string, &tmp)) {
- sin->sin_addr.s_addr = tmp.s_addr;
- } else {
- if (! (host_entry = gethostbyname(string))) {
- /* Note: < -10000 indicates a host lookup error */
- PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno));
- return 0;
- }
- if (host_entry->h_addrtype != AF_INET) {
- php_error(E_WARNING, "%s() Host lookup failed: Non AF_INET domain returned on AF_INET socket", get_active_function_name(TSRMLS_C));
- return 0;
- }
- memcpy(&(sin->sin_addr.s_addr), host_entry->h_addr_list[0], host_entry->h_length);
- }
-
- return 1;
-}
-
-
-static void php_sockets_init_globals(zend_sockets_globals *sockets_globals TSRMLS_DC)
-{
- sockets_globals->last_error = 0;
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sockets)
-{
- struct protoent *pe;
-
- ZEND_INIT_MODULE_GLOBALS(sockets, php_sockets_init_globals, NULL);
-
- le_socket = zend_register_list_destructors_ex(destroy_socket, NULL, le_socket_name, module_number);
- le_iov = zend_register_list_destructors_ex(destroy_iovec, NULL, le_iov_name, module_number);
-
- REGISTER_LONG_CONSTANT("AF_UNIX", AF_UNIX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("AF_INET", AF_INET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_STREAM", SOCK_STREAM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_DGRAM", SOCK_DGRAM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_RAW", SOCK_RAW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_SEQPACKET",SOCK_SEQPACKET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_RDM", SOCK_RDM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_OOB", MSG_OOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_WAITALL", MSG_WAITALL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_PEEK", MSG_PEEK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_DONTROUTE", MSG_DONTROUTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_DEBUG", SO_DEBUG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_REUSEADDR", SO_REUSEADDR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_KEEPALIVE", SO_KEEPALIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_DONTROUTE", SO_DONTROUTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_LINGER", SO_LINGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_BROADCAST", SO_BROADCAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_OOBINLINE", SO_OOBINLINE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_SNDBUF", SO_SNDBUF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_RCVBUF", SO_RCVBUF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_SNDLOWAT", SO_SNDLOWAT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_RCVLOWAT", SO_RCVLOWAT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_SNDTIMEO", SO_SNDTIMEO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_RCVTIMEO", SO_RCVTIMEO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_TYPE", SO_TYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_ERROR", SO_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOL_SOCKET", SOL_SOCKET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOMAXCONN", SOMAXCONN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PHP_NORMAL_READ", PHP_NORMAL_READ, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PHP_BINARY_READ", PHP_BINARY_READ, CONST_CS | CONST_PERSISTENT);
-
- if ((pe = getprotobyname("tcp"))) {
- REGISTER_LONG_CONSTANT("SOL_TCP", pe->p_proto, CONST_CS | CONST_PERSISTENT);
- }
-
- if ((pe = getprotobyname("udp"))) {
- REGISTER_LONG_CONSTANT("SOL_UDP", pe->p_proto, CONST_CS | CONST_PERSISTENT);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(sockets)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Sockets Support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-int php_sock_array_to_fd_set(zval *sock_array, fd_set *fds, SOCKET *max_fd TSRMLS_DC) {
- zval **element;
- php_socket *php_sock;
-
- if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0;
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(sock_array));
- zend_hash_get_current_data(Z_ARRVAL_P(sock_array), (void **) &element) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(sock_array))) {
-
- php_sock = (php_socket*) zend_fetch_resource(element TSRMLS_CC, -1, le_socket_name, NULL, 1, le_socket);
- if (!php_sock) continue; /* If element is not a resource, skip it */
-
- FD_SET(php_sock->bsd_socket, fds);
- if (php_sock->bsd_socket > *max_fd) {
- *max_fd = php_sock->bsd_socket;
- }
- }
-
- return 1;
-}
-
-int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds TSRMLS_DC) {
- zval **element;
- zval **dest_element;
- php_socket *php_sock;
- HashTable *new_hash;
- if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0;
-
- ALLOC_HASHTABLE(new_hash);
- zend_hash_init(new_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(sock_array));
- zend_hash_get_current_data(Z_ARRVAL_P(sock_array), (void **) &element) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(sock_array))) {
-
- php_sock = (php_socket*) zend_fetch_resource(element TSRMLS_CC, -1, le_socket_name, NULL, 1, le_socket);
- if (!php_sock) continue; /* If element is not a resource, skip it */
-
- if (FD_ISSET(php_sock->bsd_socket, fds)) {
- /* Add fd to new array */
- zend_hash_next_index_insert(new_hash, (void *)element, sizeof(zval *), (void **)&dest_element);
- if (dest_element) zval_add_ref(dest_element);
- }
- }
-
- /* Destroy old array, add new one */
- zend_hash_destroy(Z_ARRVAL_P(sock_array));
- efree(Z_ARRVAL_P(sock_array));
-
- zend_hash_internal_pointer_reset(new_hash);
- Z_ARRVAL_P(sock_array) = new_hash;
-
- return 1;
-}
-
-
-/* {{{ proto int socket_select(array &read_fds, array &write_fds, &array except_fds, int tv_sec[, int tv_usec])
- Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec */
-PHP_FUNCTION(socket_select)
-{
- zval *r_array, *w_array, *e_array, *sec;
- struct timeval tv;
- struct timeval *tv_p = NULL;
- fd_set rfds, wfds, efds;
- SOCKET max_fd = 0;
- int retval, sets = 0, usec = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!a!a!z!|l", &r_array, &w_array, &e_array, &sec, &usec) == FAILURE)
- return;
-
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- FD_ZERO(&efds);
-
- if (r_array != NULL) sets += php_sock_array_to_fd_set(r_array, &rfds, &max_fd TSRMLS_CC);
- if (w_array != NULL) sets += php_sock_array_to_fd_set(w_array, &wfds, &max_fd TSRMLS_CC);
- if (e_array != NULL) sets += php_sock_array_to_fd_set(e_array, &efds, &max_fd TSRMLS_CC);
-
- if (!sets) {
- php_error(E_WARNING, "%s() no resource arrays were passed to select", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- /* If seconds is not set to null, build the timeval, else we wait indefinitely */
- if (sec != NULL) {
- convert_to_long_ex(&sec);
- tv.tv_sec = Z_LVAL_P(sec);
- tv.tv_usec = usec;
- tv_p = &tv;
- }
-
- retval = select(max_fd+1, &rfds, &wfds, &efds, tv_p);
-
- if (retval == -1) {
- SOCKETS_G(last_error) = errno;
- php_error(E_WARNING, "%s() %s [%d]: %s", get_active_function_name(TSRMLS_C), "unable to select", errno, php_strerror(errno));
- RETURN_FALSE;
- }
-
- if (r_array != NULL) php_sock_array_from_fd_set(r_array, &rfds TSRMLS_CC);
- if (w_array != NULL) php_sock_array_from_fd_set(w_array, &wfds TSRMLS_CC);
- if (e_array != NULL) php_sock_array_from_fd_set(e_array, &efds TSRMLS_CC);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto resource socket_create_listen(int port[, int backlog])
- Opens a socket on port to accept connections */
-PHP_FUNCTION(socket_create_listen)
-{
- php_socket *php_sock;
- int port, backlog = 128;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &port, &backlog) == FAILURE)
- return;
-
- if (!open_listen_sock(&php_sock, port, backlog TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, php_sock, le_socket);
-}
-/* }}} */
-
-/* {{{ proto resource socket_accept(resource socket)
- Accepts a connection on the listening socket fd */
-PHP_FUNCTION(socket_accept)
-{
- zval *arg1;
- php_socket *php_sock, *new_sock;
- struct sockaddr_in sa;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (!accept_connect(php_sock, &new_sock, (struct sockaddr *) &sa TSRMLS_CC)) {
- php_error(E_WARNING, "%s() unable to accept socket connection [%d]: %s",
- get_active_function_name(TSRMLS_C), errno, php_strerror(errno));
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, new_sock, le_socket);
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_nonblock(resource socket)
- Sets nonblocking mode on a socket resource */
-PHP_FUNCTION(socket_set_nonblock)
-{
- zval *arg1;
- php_socket *php_sock;
- int flags;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- flags = fcntl(php_sock->bsd_socket, F_GETFL);
-
- /* Safely append non blocking to other flags unless the get fails.
- * Note: This does not abort on failure becuse getfl will always fail
- * under the current win32 code. */
- if (flags > -1) flags |= O_NONBLOCK;
- else flags = O_NONBLOCK;
-
- if (fcntl(php_sock->bsd_socket, F_SETFL, flags) > -1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_block(resource socket)
- Sets blocking mode on a socket resource */
-PHP_FUNCTION(socket_set_block)
-{
- zval *arg1;
- php_socket *php_sock;
- int flags;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- flags = fcntl(php_sock->bsd_socket, F_GETFL);
-
- /* Safely remove blocking from flags unless the get fails.
- * Note: This does not abort on failure becuse getfl will always fail
- * under the current win32 code. */
- if (flags > -1) flags &= ~O_NONBLOCK;
- else flags = 0;
-
- if (fcntl(php_sock->bsd_socket, F_SETFL, flags) > -1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_listen(resource socket[, int backlog])
- Sets the maximum number of connections allowed to be waited for on the socket specified by fd */
-PHP_FUNCTION(socket_listen)
-{
- zval *arg1;
- php_socket *php_sock;
- int backlog = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &arg1, &backlog) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (listen(php_sock->bsd_socket, backlog) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to listen on socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void socket_close(resource socket)
- Closes a file descriptor */
-PHP_FUNCTION(socket_close)
-{
- zval *arg1;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
- zend_list_delete(Z_RESVAL_P(arg1));
-}
-/* }}} */
-
-/* {{{ proto int socket_write(resource socket, string buf[, int length])
- Writes the buffer to the socket resource, length is optional */
-PHP_FUNCTION(socket_write)
-{
- zval *arg1;
- php_socket *php_sock;
- int retval, str_len, length;
- char *str;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &arg1, &str, &str_len, &length) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (ZEND_NUM_ARGS() < 4) {
- length = str_len;
- }
-
-#ifndef PHP_WIN32
- retval = write(php_sock->bsd_socket, str, MIN(length, str_len));
-#else
- retval = send(php_sock->bsd_socket, str, min(length, str_len), 0);
-#endif
-
- if (retval < 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-typedef int (*read_func)(int, void *, int);
-
-/* {{{ proto string socket_read(resource socket, int length [, int type])
- Reads a maximum of length bytes from socket */
-PHP_FUNCTION(socket_read)
-{
- zval *arg1;
- php_socket *php_sock;
- read_func read_function = (read_func) read;
- char *tmpbuf;
- int retval, length, type = PHP_BINARY_READ;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|l", &arg1, &length, &type) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (type == PHP_NORMAL_READ) {
- read_function = (read_func) php_read;
- }
-
- tmpbuf = emalloc(length + 1);
-
-#ifndef PHP_WIN32
- retval = (*read_function)(php_sock->bsd_socket, tmpbuf, length);
-#else
- retval = recv(php_sock->bsd_socket, tmpbuf, length, 0);
-#endif
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to read from socket", errno);
- efree(tmpbuf);
- RETURN_FALSE;
- }
-
- tmpbuf = erealloc(tmpbuf, retval + 1);
- tmpbuf[ retval ] = '\0' ;
-
- RETURN_STRINGL(tmpbuf, retval, 0);
-}
-/* }}} */
-
-/* {{{ proto bool socket_getsockname(resource socket, string &addr[, int &port])
- Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type. */
-PHP_FUNCTION(socket_getsockname)
-{
- zval *arg1, *addr, *port = NULL;
- php_sockaddr_storage sa_storage;
- php_socket *php_sock;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
- struct sockaddr_un *s_un;
- char *addr_string;
- socklen_t salen = sizeof(php_sockaddr_storage);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|z", &arg1, &addr, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- sa = (struct sockaddr *) &sa_storage;
-
- if (getsockname(php_sock->bsd_socket, sa, &salen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket name", errno);
- RETURN_FALSE;
- }
-
- switch (sa->sa_family) {
- case AF_INET:
- sin = (struct sockaddr_in *) sa;
- while (inet_ntoa_lock == 1);
- inet_ntoa_lock = 1;
- addr_string = inet_ntoa(sin->sin_addr);
- inet_ntoa_lock = 0;
-
- zval_dtor(addr);
- ZVAL_STRING(addr, addr_string, 1);
-
- if (port != NULL) {
- zval_dtor(port);
- ZVAL_LONG(port, htons(sin->sin_port));
- }
- RETURN_TRUE;
-
- case AF_UNIX:
- s_un = (struct sockaddr_un *) sa;
-
- zval_dtor(addr);
- ZVAL_STRING(addr, s_un->sun_path, 1);
- RETURN_TRUE;
-
- default:
- php_error(E_WARNING, "%s() Unsupported address family %d",
- get_active_function_name(TSRMLS_C), sa->sa_family);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool socket_getpeername(resource socket, string &addr[, int &port])
- Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type. */
-PHP_FUNCTION(socket_getpeername)
-{
- zval *arg1, *arg2, *arg3 = NULL;
- php_sockaddr_storage sa_storage;
- php_socket *php_sock;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
- struct sockaddr_un *s_un;
- char *addr_string;
- socklen_t salen = sizeof(php_sockaddr_storage);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|z", &arg1, &arg2, &arg3) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- sa = (struct sockaddr *) &sa_storage;
-
- if (getpeername(php_sock->bsd_socket, sa, &salen) < 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve peer name", errno);
- RETURN_FALSE;
- }
-
- switch (sa->sa_family) {
- case AF_INET:
- sin = (struct sockaddr_in *) sa;
- while (inet_ntoa_lock == 1);
- inet_ntoa_lock = 1;
- addr_string = inet_ntoa(sin->sin_addr);
- inet_ntoa_lock = 0;
-
- zval_dtor(arg2);
- ZVAL_STRING(arg2, addr_string, 1);
-
- if (arg3 != NULL) {
- zval_dtor(arg3);
- ZVAL_LONG(arg3, htons(sin->sin_port));
- }
-
- RETURN_TRUE;
-
- case AF_UNIX:
- s_un = (struct sockaddr_un *) sa;
-
- zval_dtor(arg2);
- ZVAL_STRING(arg2, s_un->sun_path, 1);
- RETURN_TRUE;
-
- default:
- php_error(E_WARNING, "%s() Unsupported address family %d",
- get_active_function_name(TSRMLS_C), sa->sa_family);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource socket_create(int domain, int type, int protocol)
- Creates an endpoint for communication in the domain specified by domain, of type specified by type */
-PHP_FUNCTION(socket_create)
-{
- int arg1, arg2, arg3;
- php_socket *php_sock = (php_socket*)emalloc(sizeof(php_socket));
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &arg1, &arg2, &arg3) == FAILURE) {
- efree(php_sock);
- return;
- }
-
- if (arg1 != AF_UNIX && arg1 != AF_INET) {
- php_error(E_WARNING, "%s() invalid socket domain [%d] specified for argument 1, assuming AF_INET", get_active_function_name(TSRMLS_C), arg1);
- arg1 = AF_INET;
- }
-
- if (arg2 > 10) {
- php_error(E_WARNING, "%s() invalid socket type [%d] specified for argument 2, assuming SOCK_STREAM", get_active_function_name(TSRMLS_C), arg2);
- arg2 = SOCK_STREAM;
- }
-
- php_sock->bsd_socket = socket(arg1, arg2, arg3);
- php_sock->type = arg1;
-
- if (IS_INVALID_SOCKET(php_sock)) {
- SOCKETS_G(last_error) = errno;
- php_error(E_WARNING, "%s() Unable to create socket [%d]: %s",
- get_active_function_name(TSRMLS_C), errno, php_strerror(errno));
- efree(php_sock);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, php_sock, le_socket);
-}
-/* }}} */
-
-/* {{{ proto bool socket_connect(resource socket, string addr [, int port])
- Opens a connection to addr:port on the socket specified by socket */
-PHP_FUNCTION(socket_connect)
-{
- zval *arg1;
- php_socket *php_sock;
- struct sockaddr_in sin;
- struct sockaddr_un s_un;
- char *addr;
- int retval, addr_len, port;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &arg1, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- switch(php_sock->type) {
- case AF_INET:
- if (ZEND_NUM_ARGS() != 3) {
- php_error(E_WARNING, "%s() Socket of type AF_INET requires 3 arguments",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- sin.sin_family = AF_INET;
- sin.sin_port = htons((unsigned short int)port);
-
- if (! php_set_inet_addr(&sin, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = connect(php_sock->bsd_socket, (struct sockaddr *)&sin, sizeof(struct sockaddr_in));
- break;
-
- case AF_UNIX:
- s_un.sun_family = AF_UNIX;
- snprintf(s_un.sun_path, 108, "%s", addr);
- retval = connect(php_sock->bsd_socket, (struct sockaddr *) &s_un, SUN_LEN(&s_un));
- break;
-
- default:
- php_error(E_WARNING, "%s() Unsupported socket type %d",
- get_active_function_name(TSRMLS_C), php_sock->type);
- RETURN_FALSE;
- }
-
- if (retval != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to connect", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string socket_strerror(int errno)
- Returns a string describing an error */
-PHP_FUNCTION(socket_strerror)
-{
- int arg1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &arg1) == FAILURE)
- return;
-
- RETURN_STRING(php_strerror(arg1), 1);
-}
-/* }}} */
-
-/* {{{ proto bool socket_bind(resource socket, string addr [, int port])
- Binds an open socket to a listening port, port is only specified in AF_INET family. */
-PHP_FUNCTION(socket_bind)
-{
- zval *arg1;
- php_sockaddr_storage sa_storage;
- struct sockaddr *sock_type = (struct sockaddr*) &sa_storage;
- php_socket *php_sock;
- char *addr;
- int addr_len, port = 0;
- long retval = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &arg1, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- switch(php_sock->type) {
- case AF_UNIX:
- {
- struct sockaddr_un *sa = (struct sockaddr_un *) sock_type;
- memset(sa, 0, sizeof(sa_storage));
- sa->sun_family = AF_UNIX;
- snprintf(sa->sun_path, 108, "%s", addr);
- retval = bind(php_sock->bsd_socket, (struct sockaddr *) sa, SUN_LEN(sa));
- break;
- }
-
- case AF_INET:
- {
- struct sockaddr_in *sa = (struct sockaddr_in *) sock_type;
-
- memset(sa, 0, sizeof(sa_storage)); /* Apparently, Mac OSX needs this */
-
- sa->sin_family = AF_INET;
- sa->sin_port = htons((unsigned short) port);
-
- if (! php_set_inet_addr(sa, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = bind(php_sock->bsd_socket, (struct sockaddr *)sa, sizeof(struct sockaddr_in));
- break;
- }
-
- default:
- php_error(E_WARNING, "%s() unsupported socket type '%d', must be AF_UNIX or AF_INET", get_active_function_name(TSRMLS_C), php_sock->type);
- RETURN_FALSE;
- }
-
- if (retval != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to bind address", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource socket_iovec_alloc(int num_vectors [, int ...])
- Builds a 'struct iovec' for use with sendmsg, recvmsg, writev, and readv */
-/* First parameter is number of vectors, each additional parameter is the
- length of the vector to create.
- */
-PHP_FUNCTION(socket_iovec_alloc)
-{
- zval ***args = (zval ***)NULL;
- php_iovec_t *vector;
- struct iovec *vector_array;
- int i, j, num_vectors, argc = ZEND_NUM_ARGS();
-
- args = emalloc(argc*sizeof(zval**));
-
- if (argc < 1 || zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(args[0]);
- num_vectors = Z_LVAL_PP(args[0]);
-
- vector_array = emalloc(sizeof(struct iovec)*(num_vectors+1));
-
- for (i = 0, j = 1; i < num_vectors; i++, j++) {
- convert_to_long_ex(args[j]);
-
- vector_array[i].iov_base = (char*)emalloc(Z_LVAL_PP(args[j]));
- vector_array[i].iov_len = Z_LVAL_PP(args[j]);
- }
-
- vector = emalloc(sizeof(php_iovec_t));
- vector->iov_array = vector_array;
- vector->count = num_vectors;
-
- ZEND_REGISTER_RESOURCE(return_value, vector, le_iov);
-}
-/* }}} */
-
-/* {{{ proto string socket_iovec_fetch(resource iovec, int iovec_position)
- Returns the data held in the iovec specified by iovec_id[iovec_position] */
-PHP_FUNCTION(socket_iovec_fetch)
-{
- zval *iovec_id;
- php_iovec_t *vector;
- unsigned int iovec_position;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &iovec_id, &iovec_position) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &iovec_id, -1, le_iov_name, le_iov);
-
- if (iovec_position > vector->count) {
- php_error(E_WARNING, "%s() can't access a vector position past the amount of vectors set in the array", get_active_function_name(TSRMLS_C));
- RETURN_EMPTY_STRING();
- }
-
- RETURN_STRINGL(vector->iov_array[iovec_position].iov_base, vector->iov_array[iovec_position].iov_len, 1);
-}
-/* }}} */
-
-/* {{{ proto bool socket_iovec_set(resource iovec, int iovec_position, string new_val)
- Sets the data held in iovec_id[iovec_position] to new_val */
-PHP_FUNCTION(socket_iovec_set)
-{
- zval *iovec_id;
- php_iovec_t *vector;
- int new_val_len;
- unsigned int iovec_position;
- char *new_val;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &iovec_id, &iovec_position, &new_val, &new_val_len) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &iovec_id, -1, le_iov_name, le_iov);
-
- if (iovec_position > vector->count) {
- php_error(E_WARNING, "%s() can't access a vector position outside of the vector array bounds", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (vector->iov_array[iovec_position].iov_base) {
- efree(vector->iov_array[iovec_position].iov_base);
- }
-
- vector->iov_array[iovec_position].iov_base = estrdup(new_val);
- vector->iov_array[iovec_position].iov_len = strlen(new_val);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_iovec_add(resource iovec, int iov_len)
- Adds a new vector to the scatter/gather array */
-PHP_FUNCTION(socket_iovec_add)
-{
- zval *iovec_id;
- php_iovec_t *vector;
- struct iovec *vector_array;
- int iov_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &iovec_id, &iov_len) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &iovec_id, -1, le_iov_name, le_iov);
-
- vector_array = (struct iovec*)emalloc(sizeof(struct iovec) * (vector->count + 2));
- memcpy(vector_array, vector->iov_array, sizeof(struct iovec) * vector->count);
-
- vector_array[vector->count].iov_base = (char*)emalloc(iov_len);
- vector_array[vector->count].iov_len = iov_len;
- efree(vector->iov_array);
- vector->iov_array = vector_array;
- vector->count++;
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool socket_iovec_delete(resource iovec, int iov_pos)
- Deletes a vector from an array of vectors */
-PHP_FUNCTION(socket_iovec_delete)
-{
- zval *iovec_id;
- php_iovec_t *vector;
- struct iovec *vector_array;
- unsigned int i, iov_pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &iovec_id, &iov_pos) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &iovec_id, -1, le_iov_name, le_iov);
-
- if (iov_pos > vector->count) {
- php_error(E_WARNING, "%s() can't delete an IO vector that is out of array bounds", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- vector_array = emalloc(vector->count * sizeof(struct iovec));
-
- for (i = 0; i < vector->count; i++) {
- if (i < iov_pos) {
- memcpy(&(vector->iov_array[i]), &(vector_array[i]), sizeof(struct iovec));
- } else if (i > iov_pos) {
- memcpy(&(vector->iov_array[i]), &(vector_array[i - 1]), sizeof(struct iovec));
- }
- }
-
- efree(vector->iov_array);
- vector->iov_array = vector_array;
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool socket_iovec_free(resource iovec)
- Frees the iovec specified by iovec_id */
-PHP_FUNCTION(socket_iovec_free)
-{
- zval *iovec_id;
- php_iovec_t *vector;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &iovec_id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &iovec_id, -1, le_iov_name, le_iov);
-
- zend_list_delete(Z_RESVAL_P(iovec_id));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_readv(resource socket, resource iovec_id)
- Reads from an fd, using the scatter-gather array defined by iovec_id */
-PHP_FUNCTION(socket_readv)
-{
- zval *arg1, *arg2;
- php_iovec_t *vector;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &arg1, &arg2) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &arg2, -1, le_iov_name, le_iov);
-
- if (readv(php_sock->bsd_socket, vector->iov_array, vector->count) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to read from socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_writev(resource socket, resource iovec_id)
- Writes to a file descriptor, fd, using the scatter-gather array defined by iovec_id */
-PHP_FUNCTION(socket_writev)
-{
- zval *arg1, *arg2;
- php_iovec_t *vector;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &arg1, &arg2) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
- ZEND_FETCH_RESOURCE(vector, php_iovec_t *, &arg2, -1, le_iov_name, le_iov);
-
- if (writev(php_sock->bsd_socket, vector->iov_array, vector->count) != 0) {
- PHP_SOCKET_ERROR(php_sock, "Unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int socket_recv(resource socket, string &buf, int len, int flags)
- Receives data from a connected socket */
-PHP_FUNCTION(socket_recv)
-{
- zval *php_sock_res, *buf;
- char *recv_buf;
- php_socket *php_sock;
- int retval, len, flags;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzll", &php_sock_res, &buf, &len, &flags) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &php_sock_res, -1, le_socket_name, le_socket);
-
- recv_buf = emalloc(len + 1);
- memset(recv_buf, 0, len + 1);
-
- if ((retval = recv(php_sock->bsd_socket, recv_buf, len, flags)) < 1) {
- efree(recv_buf);
-
- zval_dtor(buf);
- Z_TYPE_P(buf) = IS_NULL;
- } else {
- recv_buf[retval] = '\0';
-
- /* Rebuild buffer zval */
- zval_dtor(buf);
-
- Z_STRVAL_P(buf) = recv_buf;
- Z_STRLEN_P(buf) = retval;
- Z_TYPE_P(buf) = IS_STRING;
- }
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to read from socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int socket_send(resource socket, string buf, int len, int flags)
- Sends data to a connected socket */
-PHP_FUNCTION(socket_send)
-{
- zval *arg1;
- php_socket *php_sock;
- int buf_len, len, flags, retval;
- char *buf;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsll", &arg1, &buf, &buf_len, &len, &flags) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- retval = send(php_sock->bsd_socket, buf, (buf_len < len ? buf_len : len), flags);
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])
- Receives data from a socket, connected or not */
-PHP_FUNCTION(socket_recvfrom)
-{
- zval *arg1, *arg2, *arg5, *arg6 = NULL;
- php_socket *php_sock;
- struct sockaddr_un s_un;
- struct sockaddr_in sin;
- socklen_t slen;
- int retval, arg3, arg4;
- char *recv_buf, *address;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzllz|z", &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- recv_buf = emalloc(arg3 + 2);
- memset(recv_buf, 0, arg3 + 2);
-
- switch (php_sock->type) {
- case AF_UNIX:
- slen = sizeof(s_un);
- s_un.sun_family = AF_UNIX;
- retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&s_un, (socklen_t *)&slen);
-
- if (retval < 0) {
- efree(recv_buf);
- PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
- RETURN_FALSE;
- }
-
- zval_dtor(arg2);
- zval_dtor(arg5);
-
- ZVAL_STRING(arg2, recv_buf, 0);
- ZVAL_STRING(arg5, s_un.sun_path, 1);
- break;
-
- case AF_INET:
- slen = sizeof(sin);
- sin.sin_family = AF_INET;
-
- if (arg6 == NULL) {
- WRONG_PARAM_COUNT;
- }
-
- retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin, (socklen_t *)&slen);
-
- if (retval < 0) {
- efree(recv_buf);
- PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
- RETURN_FALSE;
- }
-
- zval_dtor(arg2);
- zval_dtor(arg5);
- zval_dtor(arg6);
-
- address = inet_ntoa(sin.sin_addr);
-
- ZVAL_STRING(arg2, recv_buf, 0);
- ZVAL_STRING(arg5, address ? address : "0.0.0.0", 1);
- ZVAL_LONG(arg6, ntohs(sin.sin_port));
- break;
-
- default:
- php_error(E_WARNING, "%s() Unsupported socket type %d",
- get_active_function_name(TSRMLS_C), php_sock->type);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])
- Sends a message to a socket, whether it is connected or not */
-PHP_FUNCTION(socket_sendto)
-{
- zval *arg1;
- php_socket *php_sock;
- struct sockaddr_un s_un;
- struct sockaddr_in sin;
- int retval, buf_len, len, flags, addr_len, port = 0;
- char *buf, *addr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rslls|l", &arg1, &buf, &buf_len, &len, &flags, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
-
- switch (php_sock->type) {
- case AF_UNIX:
- memset(&s_un, 0, sizeof(s_un));
- s_un.sun_family = AF_UNIX;
- snprintf(s_un.sun_path, 108, "%s", addr);
-
- retval = sendto(php_sock->bsd_socket, buf, (len > buf_len) ? buf_len : len, flags, (struct sockaddr *) &s_un, SUN_LEN(&s_un));
- break;
-
- case AF_INET:
- if (ZEND_NUM_ARGS() != 6) {
- WRONG_PARAM_COUNT;
- }
-
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = htons((unsigned short) port);
-
- if (! php_set_inet_addr(&sin, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = sendto(php_sock->bsd_socket, buf, (len > buf_len) ? buf_len : len, flags, (struct sockaddr *) &sin, sizeof(sin));
- break;
-
- default:
- php_error(E_WARNING, "%s() Unsupported socket type %d",
- get_active_function_name(TSRMLS_C), php_sock->type);
- RETURN_FALSE;
- }
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto bool socket_recvmsg(resource socket, resource iovec, array &control, int &controllen, int &flags, string &addr [, int &port])
- Used to receive messages on a socket, whether connection-oriented or not */
-PHP_FUNCTION(socket_recvmsg)
-{
- zval *arg1, *arg2, *arg3, *arg4, *arg5, *arg6, *arg7 = NULL;
- php_iovec_t *iov;
- struct msghdr hdr;
- php_sockaddr_storage sa_storage;
- php_socket *php_sock;
- struct cmsghdr *ctl_buf;
- struct sockaddr *sa = (struct sockaddr *) &sa_storage;
- struct sockaddr_in *sin = (struct sockaddr_in *) sa;
- struct sockaddr_un *s_un = (struct sockaddr_un *) sa;
- socklen_t salen = sizeof(sa_storage);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrzzzz|z", &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
- ZEND_FETCH_RESOURCE(iov, php_iovec_t *, &arg2, -1, le_iov_name, le_iov);
-
- if (getsockname(php_sock->bsd_socket, sa, &salen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to receive message", errno);
- RETURN_FALSE;
- }
-
- ctl_buf = (Z_LVAL_P(arg4) > sizeof(struct cmsghdr)) ? (struct cmsghdr*)emalloc(Z_LVAL_P(arg4)) : NULL;
-
- switch (sa->sa_family) {
- case AF_INET:
-
- if (arg7 == NULL) {
- efree(ctl_buf);
- WRONG_PARAM_COUNT;
- }
-
- memset(sa, 0, sizeof(sa_storage));
- hdr.msg_name = sin;
- hdr.msg_namelen = sizeof(sa_storage);
- hdr.msg_iov = iov->iov_array;
- hdr.msg_iovlen = iov->count;
-
- hdr.msg_control = ctl_buf ? ctl_buf : NULL;
- hdr.msg_controllen = ctl_buf ? Z_LVAL_P(arg4) : 0;
-#ifndef MISSING_MSGHDR_MSGFLAGS
- hdr.msg_flags = 0;
-#endif
-
- if (recvmsg(php_sock->bsd_socket, &hdr, Z_LVAL_P(arg5)) < 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to receive message", errno);
- RETURN_FALSE;
- } else {
- struct cmsghdr *mhdr = (struct cmsghdr *) hdr.msg_control;
-
- zval_dtor(arg3);
- zval_dtor(arg4);
- zval_dtor(arg5);
- zval_dtor(arg6);
- zval_dtor(arg7);
-
- ZVAL_LONG(arg4, hdr.msg_controllen);
-#ifndef MISSING_MSGHDR_MSGFLAGS
- ZVAL_LONG(arg5, hdr.msg_flags);
-#endif
- ZVAL_LONG(arg7, ntohs(sin->sin_port));
-
- if (array_init(arg3) == FAILURE) {
- php_error(E_WARNING, "%s() cannot intialize array", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (mhdr != NULL) {
- add_assoc_long(arg3, "cmsg_level", mhdr->cmsg_level);
- add_assoc_long(arg3, "cmsg_type", mhdr->cmsg_type);
- add_assoc_string(arg3, "cmsg_data", CMSG_DATA(mhdr), 1);
- }
-
- {
- char *tmp = inet_ntoa(sin->sin_addr);
- if (tmp == NULL) {
- ZVAL_STRING(arg6, "0.0.0.0", 1);
- } else {
- ZVAL_STRING(arg6, tmp, 1);
- }
- }
-
- RETURN_TRUE;
- }
-
- case AF_UNIX:
- memset(sa, 0, sizeof(sa_storage));
- hdr.msg_name = s_un;
- hdr.msg_namelen = sizeof(struct sockaddr_un);
- hdr.msg_iov = iov->iov_array;
- hdr.msg_iovlen = iov->count;
-
- if (ctl_buf) {
- hdr.msg_control = ctl_buf;
- hdr.msg_controllen = Z_LVAL_P(arg4);
- } else {
- hdr.msg_control = NULL;
- hdr.msg_controllen = 0;
- }
-#ifndef MISSING_MSGHDR_MSGFLAGS
- hdr.msg_flags = 0;
-#endif
-
-
- if (recvmsg(php_sock->bsd_socket, &hdr, Z_LVAL_P(arg5)) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to receive message", errno);
- RETURN_FALSE;
- } else {
- struct cmsghdr *mhdr = (struct cmsghdr *) hdr.msg_control;
-
- if (mhdr != NULL) {
-
- zval_dtor(arg3);
- zval_dtor(arg4);
- zval_dtor(arg5);
- zval_dtor(arg6);
-
- ZVAL_LONG(arg4, hdr.msg_controllen);
-#ifndef MISSING_MSGHDR_MSGFLAGS
- ZVAL_LONG(arg5, hdr.msg_flags);
-#endif
-
- if (array_init(arg3) == FAILURE) {
- php_error(E_WARNING, "%s() cannot initialize return value", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- add_assoc_long(arg3, "cmsg_level", mhdr->cmsg_level);
- add_assoc_long(arg3, "cmsg_type", mhdr->cmsg_type);
- add_assoc_string(arg3, "cmsg_data", CMSG_DATA(mhdr), 1);
- }
-
-
- ZVAL_STRING(arg6, s_un->sun_path, 1);
- RETURN_TRUE;
- }
-
- default:
- php_error(E_WARNING, "%s() Unsupported address family %d",
- get_active_function_name(TSRMLS_C), sa->sa_family);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool socket_sendmsg(resource socket, resource iovec, int flags, string addr [, int port])
- Sends a message to a socket, regardless of whether it is connection-oriented or not */
-PHP_FUNCTION(socket_sendmsg)
-{
- zval *arg1, *arg2;
- php_iovec_t *iov;
- php_socket *php_sock;
- struct sockaddr sa;
- char *addr;
- socklen_t salen;
- int flags, addr_len, port;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrls|l", &arg1, &arg2, &flags, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
- ZEND_FETCH_RESOURCE(iov, php_iovec_t *, &arg2, -1, le_iov_name, le_iov);
-
- salen = sizeof(sa);
- if (getsockname(php_sock->bsd_socket, &sa, &salen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to send messge", errno);
- RETURN_FALSE;
- }
-
- switch(sa.sa_family) {
- case AF_INET:
- {
- struct msghdr hdr;
- struct sockaddr_in *sin = (struct sockaddr_in *) &sa;
-
- set_h_errno(0);
- set_errno(0);
-
- memset(&hdr, 0, sizeof(hdr));
- hdr.msg_name = &sa;
- hdr.msg_namelen = sizeof(sa);
- hdr.msg_iov = iov->iov_array;
- hdr.msg_iovlen = iov->count;
-
- memset(sin, 0, sizeof(sa));
-
- sin->sin_family = AF_INET;
- sin->sin_port = htons((unsigned short)port);
-
- if (! php_set_inet_addr(sin, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (sendmsg(php_sock->bsd_socket, &hdr, flags) == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to send message", errno);
- }
-
- RETURN_TRUE;
- }
-
- case AF_UNIX:
- {
- struct msghdr hdr;
- struct sockaddr_un *s_un = (struct sockaddr_un *) &sa;
-
- set_errno(0);
-
- hdr.msg_name = s_un;
- hdr.msg_iov = iov->iov_array;
- hdr.msg_iovlen = iov->count;
-
- snprintf(s_un->sun_path, 108, "%s", addr);
-
- hdr.msg_namelen = SUN_LEN(s_un);
-
- if (sendmsg(php_sock->bsd_socket, &hdr, flags) == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to send message", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- default:
- php_error(E_WARNING, "%s() Unsupported address family %d",
- get_active_function_name(TSRMLS_C), sa.sa_family);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed socket_get_option(resource socket, int level, int optname)
- Gets socket options for the socket */
-PHP_FUNCTION(socket_get_option)
-{
- zval *arg1;
- struct linger linger_val;
- struct timeval tv;
- socklen_t optlen;
- php_socket *php_sock;
- int other_val, level, optname;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &arg1, &level, &optname) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- switch(optname) {
- case SO_LINGER:
- optlen = sizeof(linger_val);
-
- if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&linger_val, &optlen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "l_onoff", linger_val.l_onoff);
- add_assoc_long(return_value, "l_linger", linger_val.l_linger);
-
- break;
- case SO_RCVTIMEO:
- case SO_SNDTIMEO:
- optlen = sizeof(tv);
-
- if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&tv, &optlen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "sec", tv.tv_sec);
- add_assoc_long(return_value, "usec", tv.tv_usec);
-
- break;
- default:
- optlen = sizeof(other_val);
-
- if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&other_val, &optlen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(other_val);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_option(resource socket, int level, int optname, int|array optval)
- Sets socket options for the socket */
-PHP_FUNCTION(socket_set_option)
-{
- zval *arg1, *arg4;
- struct linger lv;
- struct timeval tv;
- php_socket *php_sock;
- int ov, optlen, retval, level, optname;
- void *opt_ptr;
-
- HashTable *opt_ht;
- zval **l_onoff, **l_linger;
- zval **sec, **usec;
-
- /* key name constants */
- char *l_onoff_key = "l_onoff";
- char *l_linger_key = "l_linger";
- char *sec_key = "sec";
- char *usec_key = "usec";
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllz", &arg1, &level, &optname, &arg4) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- set_errno(0);
-
- switch (optname) {
- case SO_LINGER:
- convert_to_array_ex(&arg4);
- opt_ht = HASH_OF(arg4);
-
- if (zend_hash_find(opt_ht, l_onoff_key, strlen(l_onoff_key) + 1, (void **)&l_onoff) == FAILURE) {
- php_error(E_WARNING, "%s() no key \"%s\" passed in optval", get_active_function_name(TSRMLS_C), l_onoff_key);
- RETURN_FALSE;
- }
- if (zend_hash_find(opt_ht, l_linger_key, strlen(l_linger_key) + 1, (void **)&l_linger) == FAILURE) {
- php_error(E_WARNING, "%s() no key \"%s\" passed in optval", get_active_function_name(TSRMLS_C), l_linger_key);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(l_onoff);
- convert_to_long_ex(l_linger);
-
- lv.l_onoff = (unsigned short)Z_LVAL_PP(l_onoff);
- lv.l_linger = (unsigned short)Z_LVAL_PP(l_linger);
-
- optlen = sizeof(lv);
- opt_ptr = &lv;
- break;
- case SO_RCVTIMEO:
- case SO_SNDTIMEO:
- convert_to_array_ex(&arg4);
- opt_ht = HASH_OF(arg4);
-
- if (zend_hash_find(opt_ht, sec_key, strlen(sec_key) + 1, (void **)&sec) == FAILURE) {
- php_error(E_WARNING, "%s() no key \"%s\" passed in optval", get_active_function_name(TSRMLS_C), sec_key);
- RETURN_FALSE;
- }
- if (zend_hash_find(opt_ht, usec_key, strlen(usec_key) + 1, (void **)&usec) == FAILURE) {
- php_error(E_WARNING, "%s() no key \"%s\" passed in optval", get_active_function_name(TSRMLS_C), usec_key);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(sec);
- convert_to_long_ex(usec);
- tv.tv_sec = Z_LVAL_PP(sec);
- tv.tv_usec = Z_LVAL_PP(usec);
-
- optlen = sizeof(tv);
- opt_ptr = &tv;
- break;
- default:
- convert_to_long_ex(&arg4);
- ov = Z_LVAL_P(arg4);
-
- optlen = sizeof(ov);
- opt_ptr = &ov;
- break;
- }
-
- retval = setsockopt(php_sock->bsd_socket, level, optname, opt_ptr, optlen);
-
- if (retval != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to set socket option", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_create_pair(int domain, int type, int protocol, array &fd)
- Creates a pair of indistinguishable sockets and stores them in fds. */
-PHP_FUNCTION(socket_create_pair)
-{
- zval *retval[2], *fds_array_zval;
- php_socket *php_sock[2];
- SOCKET fds_array[2];
- int domain, type, protocol;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllz", &domain, &type, &protocol, &fds_array_zval) == FAILURE)
- return;
-
- php_sock[0] = (php_socket*)emalloc(sizeof(php_socket));
- php_sock[1] = (php_socket*)emalloc(sizeof(php_socket));
-
- if (domain != AF_INET && domain != AF_UNIX) {
- php_error(E_WARNING, "%s() invalid socket domain [%d] specified for argument 1, assuming AF_INET", get_active_function_name(TSRMLS_C), domain);
- domain = AF_INET;
- }
-
- if (type > 10) {
- php_error(E_WARNING, "%s() invalid socket type [%d] specified for argument 2, assuming SOCK_STREAM", get_active_function_name(TSRMLS_C), type);
- type = SOCK_STREAM;
- }
-
- if (socketpair(domain, type, protocol, fds_array) != 0) {
- SOCKETS_G(last_error) = errno;
- php_error(E_WARNING, "%s() unable to create socket pair [%d]: %s", get_active_function_name(TSRMLS_C), errno, php_strerror(errno));
- efree(php_sock[0]);
- efree(php_sock[1]);
- RETURN_FALSE;
- }
-
- zval_dtor(fds_array_zval);
- if (array_init(fds_array_zval) == FAILURE) {
- php_error(E_WARNING, "%s() can't initialize array for 4th argument", get_active_function_name(TSRMLS_C));
- efree(php_sock[0]);
- efree(php_sock[1]);
- RETURN_FALSE;
- }
-
- MAKE_STD_ZVAL(retval[0]);
- MAKE_STD_ZVAL(retval[1]);
-
- php_sock[0]->bsd_socket = fds_array[0];
- php_sock[1]->bsd_socket = fds_array[1];
- php_sock[0]->type = domain;
- php_sock[1]->type = domain;
-
- ZEND_REGISTER_RESOURCE(retval[0], php_sock[0], le_socket);
- ZEND_REGISTER_RESOURCE(retval[1], php_sock[1], le_socket);
-
- add_index_zval(fds_array_zval, 0, retval[0]);
- add_index_zval(fds_array_zval, 1, retval[1]);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_shutdown(resource socket[, int how])
- Shuts down a socket for receiving, sending, or both. */
-PHP_FUNCTION(socket_shutdown)
-{
- zval *arg1;
- int how_shutdown = 2;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &arg1, &how_shutdown) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket);
-
- if (shutdown(php_sock->bsd_socket, how_shutdown) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to shutdown socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int socket_last_error(resource socket)
- Returns the last error on the socket */
-PHP_FUNCTION(socket_last_error)
-{
- zval *arg1 = NULL;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg1) == FAILURE)
- return;
-
- if (arg1) {
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket);
- RETVAL_LONG(php_sock->error);
- } else {
- RETVAL_LONG(SOCKETS_G(last_error));
- }
-}
-/* }}} */
-
-/* {{{ proto void socket_clear_error([resource socket])
- Clears the error on the socket or the last error code. */
-PHP_FUNCTION(socket_clear_error)
-{
- zval *arg1 = NULL;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg1) == FAILURE)
- return;
-
- if (arg1) {
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket);
- php_sock->error = 0;
- } else {
- SOCKETS_G(last_error) = 0;
- }
-
- return;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/sockets/sockets.dsp b/ext/sockets/sockets.dsp
deleted file mode 100644
index c4c8a658f3..0000000000
--- a/ext/sockets/sockets.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sockets" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=sockets - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "sockets.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "sockets.mak" CFG="sockets - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "sockets - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "sockets - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "sockets - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SOCKETS_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_SOCKETS" /D ZTS=1 /D HAVE_SOCKETS=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_sockets.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /debug
-
-!ELSEIF "$(CFG)" == "sockets - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SOCKETS_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_SOCKETS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SOCKETS=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_sockets.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "sockets - Win32 Release_TS"
-# Name "sockets - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_sockets_win.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sockets.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_sockets.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_sockets_win.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/sockets/sockets.php b/ext/sockets/sockets.php
deleted file mode 100644
index 3bb624cd57..0000000000
--- a/ext/sockets/sockets.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'sockets';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled in PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/standard/CREDITS b/ext/standard/CREDITS
deleted file mode 100644
index 4021b08860..0000000000
--- a/ext/standard/CREDITS
+++ /dev/null
@@ -1,3 +0,0 @@
-Assert
-Thies C. Arntzen
-
diff --git a/ext/standard/Makefile.frag b/ext/standard/Makefile.frag
deleted file mode 100644
index d48cf2fd18..0000000000
--- a/ext/standard/Makefile.frag
+++ /dev/null
@@ -1,9 +0,0 @@
-
-$(srcdir)/parsedate.c: $(srcdir)/parsedate.y
-
-$(srcdir)/var_unserializer.c: $(srcdir)/var_unserializer.re
- re2c -b $(srcdir)/var_unserializer.re > $@
-
-$(srcdir)/url_scanner_ex.c: $(srcdir)/url_scanner_ex.re
- re2c -b $(srcdir)/url_scanner_ex.re > $@
-
diff --git a/ext/standard/aggregation.c b/ext/standard/aggregation.c
deleted file mode 100644
index cea8c8138d..0000000000
--- a/ext/standard/aggregation.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "basic_functions.h"
-#include "aggregation.h"
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-#include "ext/pcre/php_pcre.h"
-#endif
-
-static void aggregation_info_dtor(aggregation_info *info)
-{
- /* FIXME: This is here to make it compile with Engine 2 but part of this module will need rewriting */
-
-#ifndef ZEND_ENGINE_2
- destroy_zend_class(info->new_ce);
- efree(info->new_ce);
-#else
- /* FIXME: In ZE2, there seems to be an issue with refcounts or something between
- * this class entry and the original; there are problems when destroying the
- * function table.
- * Skipping deleting here will prevent a segfault but will leak
- * the class name, the static_members hash and the ce itself.
- * */
-
- /* destroy_zend_class(&info->new_ce); */
-#endif
- zval_ptr_dtor(&info->aggr_members);
-
-}
-
-/* {{{ static zval* array_to_hash */
-static zval *array_to_hash(zval *array)
-{
- zval *hash, **entry;
- char *name_lc;
-
- /*
- * Well, this just transposes the array, popularly known as flipping it, or
- * giving it the finger.
- */
- MAKE_STD_ZVAL(hash);
- array_init(hash);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(array));
- zend_hash_get_current_data(Z_ARRVAL_P(array), (void**)&entry) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(array))) {
- if (Z_TYPE_PP(entry) == IS_STRING) {
- /*
- * I hate case-insensitivity. Die, die, die.
- */
- name_lc = estrndup(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry));
- zend_str_tolower(name_lc, Z_STRLEN_PP(entry));
- add_assoc_bool_ex(hash, name_lc, Z_STRLEN_PP(entry)+1, 1);
- efree(name_lc);
- }
- }
-
- return hash;
-}
-/* }}} */
-
-
-/* {{{ static void aggregate_methods() */
-static void aggregate_methods(zend_class_entry *ce, zend_class_entry *from_ce, int aggr_type, zval *aggr_filter, zend_bool exclude, zval *aggr_methods TSRMLS_DC)
-{
- HashPosition pos;
- zend_function *function;
- char *func_name;
- uint func_name_len;
- ulong num_key;
- zval *list_hash = NULL;
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- pcre *re = NULL;
- pcre_extra *re_extra = NULL;
- int re_options = 0;
-#endif
-
- /*
- * Flip the array for easy lookup, or compile the regexp.
- */
- if (aggr_type == AGGREGATE_BY_LIST) {
- list_hash = array_to_hash(aggr_filter);
- }
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- else if (aggr_type == AGGREGATE_BY_REGEXP) {
- if ((re = pcre_get_compiled_regex(Z_STRVAL_P(aggr_filter), &re_extra, &re_options)) == NULL) {
- return;
- }
- }
-#endif
-
- /*
- * "Just because it's not nice doesn't mean it's not miraculous."
- * -- _Interesting Times_, Terry Pratchett
- */
-
- /*
- * Aggregating by list without exclusion can be done more efficiently if we
- * iterate through the list and check against function table instead of the
- * other way around.
- */
- if (aggr_type != AGGREGATE_BY_LIST || exclude) {
- zend_hash_internal_pointer_reset_ex(&from_ce->function_table, &pos);
- while (zend_hash_get_current_data_ex(&from_ce->function_table, (void**)&function, &pos) == SUCCESS) {
- zend_hash_get_current_key_ex(&from_ce->function_table, &func_name, &func_name_len, &num_key, 0, &pos);
-
- /* We do not aggregate:
- * 1. constructors */
- if (!strncmp(func_name, from_ce->name, MIN(func_name_len-1, from_ce->name_length)) ||
- /* 2. private methods (heh, like we really have them) */
- func_name[0] == '_' ||
- /* 3. explicitly excluded methods */
- (aggr_type == AGGREGATE_BY_LIST && zend_hash_exists(Z_ARRVAL_P(list_hash), func_name, func_name_len))
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- ||
- /* 4. methods matching regexp as modified by the exclusion flag */
- (aggr_type == AGGREGATE_BY_REGEXP && (pcre_exec(re, re_extra, func_name, func_name_len-1, 0, 0, NULL, 0) < 0) ^ exclude) == 1
-#endif
- ) {
- zend_hash_move_forward_ex(&from_ce->function_table, &pos);
- continue;
- }
-
- /*
- * This is where the magic happens.
- */
- if (zend_hash_add(&ce->function_table, func_name, func_name_len,
- (void*)function, sizeof(zend_function), NULL) == SUCCESS) {
-
- add_next_index_stringl(aggr_methods, func_name, func_name_len-1, 1);
- }
-
- zend_hash_move_forward_ex(&from_ce->function_table, &pos);
- }
- } else {
- /*
- * This is just like above except the other way around.
- */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(list_hash));
- while (zend_hash_get_current_key_ex(Z_ARRVAL_P(list_hash), &func_name, &func_name_len, &num_key, 0, NULL) == HASH_KEY_IS_STRING) {
- if (!strncmp(func_name, from_ce->name, MIN(func_name_len-1, from_ce->name_length)) ||
- func_name[0] == '_' ||
- zend_hash_find(&from_ce->function_table, func_name, func_name_len, (void**)&function) == FAILURE) {
- zend_hash_move_forward(Z_ARRVAL_P(list_hash));
- continue;
- }
-
- if (zend_hash_add(&ce->function_table, func_name, func_name_len,
- (void*)function, sizeof(zend_function), NULL) == SUCCESS) {
- add_next_index_stringl(aggr_methods, func_name, func_name_len-1, 1);
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(list_hash));
- }
- }
-
- if (list_hash) {
- zval_ptr_dtor(&list_hash);
- }
-}
-/* }}} */
-
-
-/* {{{ static void aggregate_properties() */
-static void aggregate_properties(zval *obj, zend_class_entry *from_ce, int aggr_type, zval *aggr_filter, zend_bool exclude, zval *aggr_props TSRMLS_DC)
-{
- HashPosition pos;
- zval **prop;
- char *prop_name;
- uint prop_name_len;
- ulong num_key;
- zval *list_hash = NULL;
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- pcre *re = NULL;
- pcre_extra *re_extra = NULL;
- int re_options = 0;
-#endif
-
- if (!from_ce->constants_updated) {
- zend_hash_apply_with_argument(&from_ce->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
- from_ce->constants_updated = 1;
- }
-
- /*
- * Flip the array for easy lookup, or compile the regexp.
- */
- if (aggr_type == AGGREGATE_BY_LIST) {
- list_hash = array_to_hash(aggr_filter);
- }
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- else if (aggr_type == AGGREGATE_BY_REGEXP) {
- if ((re = pcre_get_compiled_regex(Z_STRVAL_P(aggr_filter), &re_extra, &re_options)) == NULL) {
- return;
- }
- }
-#endif
-
- /*
- * "Just because it's not nice doesn't mean it's not miraculous."
- * -- _Interesting Times_, Terry Pratchett
- */
-
- /*
- * Aggregating by list without exclusion can be done more efficiently if we
- * iterate through the list and check against default properties table
- * instead of the other way around.
- */
- if (aggr_type != AGGREGATE_BY_LIST || exclude) {
- zend_hash_internal_pointer_reset_ex(&from_ce->default_properties, &pos);
- while (zend_hash_get_current_data_ex(&from_ce->default_properties, (void**)&prop, &pos) == SUCCESS) {
- zend_hash_get_current_key_ex(&from_ce->default_properties, &prop_name, &prop_name_len, &num_key, 0, &pos);
-
- /* We do not aggregate:
- * 1. private properties (heh, like we really have them) */
- if (prop_name[0] == '_' ||
- /* 2. explicitly excluded properties */
- (aggr_type == AGGREGATE_BY_LIST && zend_hash_exists(Z_ARRVAL_P(list_hash), prop_name, prop_name_len))
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- ||
- /* 3. properties matching regexp as modified by the exclusion flag */
- (aggr_type == AGGREGATE_BY_REGEXP && (pcre_exec(re, re_extra, prop_name, prop_name_len-1, 0, 0, NULL, 0) < 0) ^ exclude) == 1
-#endif
- ) {
- zend_hash_move_forward_ex(&from_ce->default_properties, &pos);
- continue;
- }
-
- /*
- * This is where the magic happens.
- */
- if (zend_hash_add(Z_OBJPROP_P(obj), prop_name, prop_name_len,
- (void*)prop, sizeof(zval *), NULL) == SUCCESS) {
- zval_add_ref(prop);
- add_next_index_stringl(aggr_props, prop_name, prop_name_len-1, 1);
- }
-
- zend_hash_move_forward_ex(&from_ce->default_properties, &pos);
- }
- } else {
- /*
- * This is just like above except the other way around.
- */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(list_hash));
- while (zend_hash_get_current_key_ex(Z_ARRVAL_P(list_hash), &prop_name, &prop_name_len, &num_key, 0, NULL) == HASH_KEY_IS_STRING) {
- if (prop_name[0] == '_' ||
- zend_hash_find(&from_ce->default_properties, prop_name, prop_name_len, (void**)&prop) == FAILURE) {
- zend_hash_move_forward(Z_ARRVAL_P(list_hash));
- continue;
- }
-
- if (zend_hash_add(Z_OBJPROP_P(obj), prop_name, prop_name_len,
- (void*)prop, sizeof(zval *), NULL) == SUCCESS) {
- zval_add_ref(prop);
- add_next_index_stringl(aggr_props, prop_name, prop_name_len-1, 1);
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(list_hash));
- }
- }
-
- if (list_hash) {
- zval_ptr_dtor(&list_hash);
- }
-}
-/* }}} */
-
-
-/* {{{ static void aggregate() */
-static void aggregate(INTERNAL_FUNCTION_PARAMETERS, int aggr_what, int aggr_type)
-{
- /* Incoming parameters. */
- zval *obj, *aggr_list = NULL;
- char *class_name, *class_name_lc, *aggr_regexp;
- int class_name_len, aggr_regexp_len;
- zend_bool exclude = 0;
-
- /* Other variables. */
- zval **aggr_members, z_aggr_regexp;
- zend_class_entry *ce, *new_ce;
- zend_function tmp_zend_function;
- aggregation_info aggr_info_new, *aggr_info = &aggr_info_new;
- zval *aggr_methods_new, **aggr_methods = &aggr_methods_new;
- zval *aggr_props_new, **aggr_props = &aggr_props_new;
- zval *aggr_filter = NULL;
- int zpp_result = FAILURE;
-
- /*
- * Ah, the beauty of the new parameter parsing API. Almost as good as Heidi Klum.
- */
- switch (aggr_type) {
- case AGGREGATE_ALL:
- zpp_result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "os", &obj,
- &class_name, &class_name_len);
- break;
-
- case AGGREGATE_BY_LIST:
- zpp_result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "osa|b", &obj,
- &class_name, &class_name_len,
- &aggr_list, &exclude);
- break;
-
- case AGGREGATE_BY_REGEXP:
- zpp_result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oss|b", &obj,
- &class_name, &class_name_len,
- &aggr_regexp, &aggr_regexp_len, &exclude);
- ZVAL_STRINGL(&z_aggr_regexp, aggr_regexp, aggr_regexp_len, 0);
- break;
- }
-
- if (zpp_result == FAILURE) {
- return;
- }
-
- /*
- * Case-insensitivity is like that last freaking mutant from horror movies:
- * irradiated, blown in half, its eyes melting in their sockets, yet still
- * dragging itself closer and closer to you until it's pulverized into
- * microscopic pieces via some last-minute contrivance. And even then you
- * are not sure that it's finally dead. But that's just how I feel.
- */
- class_name_lc = estrndup(class_name, class_name_len);
- zend_str_tolower(class_name_lc, class_name_len);
- if (zend_hash_find(EG(class_table), class_name_lc,
- class_name_len+1, (void **)&ce) == FAILURE) {
- php_error(E_WARNING, "%s() expects parameter 2 to be a valid class name, '%s' given\n", get_active_function_name(TSRMLS_C), class_name);
- efree(class_name_lc);
- return;
- }
-#ifdef ZEND_ENGINE_2
- ce = *(zend_class_entry**)ce;
-#endif
-
- /*
- * And God said, Let there be light; and there was light. But only once.
- */
- if (!BG(aggregation_table)) {
- BG(aggregation_table) = (HashTable *) emalloc(sizeof(HashTable));
- zend_hash_init(BG(aggregation_table), 5, NULL, (dtor_func_t) aggregation_info_dtor, 0);
- }
-
- /*
- * Digging deep in the rabbit hole with a long object.. and coming up
- * more empty than the imagination of whoever made "Battlefield Earth".
- */
- if (zend_hash_index_find(BG(aggregation_table), (long)obj, (void**)&aggr_info) == FAILURE) {
- zval *tmp;
-
- /*
- * You are not expected to understand this.
- */
- new_ce = emalloc(sizeof(zend_class_entry));
- new_ce->type = ZEND_USER_CLASS;
- new_ce->name = estrndup(Z_OBJCE_P(obj)->name, Z_OBJCE_P(obj)->name_length);
- new_ce->name_length = Z_OBJCE_P(obj)->name_length;
- new_ce->parent = Z_OBJCE_P(obj)->parent;
-#ifdef ZEND_ENGINE_2
- new_ce->refcount = 1;
-#else
- new_ce->refcount = (int *) emalloc(sizeof(int));
- *new_ce->refcount = 1;
-#endif
- new_ce->constants_updated = Z_OBJCE_P(obj)->constants_updated;
- zend_hash_init(&new_ce->function_table, 10, NULL, ZEND_FUNCTION_DTOR, 0);
- zend_hash_init(&new_ce->default_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(&new_ce->function_table, &Z_OBJCE_P(obj)->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function));
- zend_hash_copy(&new_ce->default_properties, &Z_OBJCE_P(obj)->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
-#ifdef ZEND_ENGINE_2
- ALLOC_HASHTABLE(new_ce->static_members);
- zend_hash_init(new_ce->static_members, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(new_ce->static_members, Z_OBJCE_P(obj)->static_members, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- zend_hash_init(&new_ce->constants_table, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(&new_ce->constants_table, &Z_OBJCE_P(obj)->constants_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- zend_hash_init(&new_ce->class_table, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(&new_ce->class_table, &Z_OBJCE_P(obj)->class_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- zend_hash_init(&new_ce->private_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(&new_ce->private_properties, &Z_OBJCE_P(obj)->private_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- new_ce->constructor = Z_OBJCE_P(obj)->constructor;
- new_ce->destructor = Z_OBJCE_P(obj)->destructor;
- new_ce->clone = Z_OBJCE_P(obj)->clone;
-#endif
- new_ce->builtin_functions = Z_OBJCE_P(obj)->builtin_functions;
- new_ce->handle_function_call = Z_OBJCE_P(obj)->handle_function_call;
- new_ce->handle_property_get = Z_OBJCE_P(obj)->handle_property_get;
- new_ce->handle_property_set = Z_OBJCE_P(obj)->handle_property_set;
-
- /*
- * Okay, that was kind of exhausting. Let's invoke programmer virtue #1
- * and stuff this where it belongs so we don't have to work so hard next
- * time.
- */
- /* OBJECT FIXME!! won't work with non-standard objects */
- (Z_OBJ_P(obj))->ce = new_ce;
- aggr_info_new.new_ce = new_ce;
- MAKE_STD_ZVAL(aggr_info_new.aggr_members);
- array_init(aggr_info_new.aggr_members);
-
- zend_hash_index_update(BG(aggregation_table), (long)obj,
- (void *)&aggr_info_new, sizeof(aggregation_info), NULL);
-
- } else {
- /*
- * Seek and ye shall find.
- */
- new_ce = aggr_info->new_ce;
- }
-
- /*
- * This should be easy to understand. If not, ask Rasmus about it at his
- * next tutorial.
- */
- if (zend_hash_find(Z_ARRVAL_P(aggr_info->aggr_members), class_name_lc,
- class_name_len+1, (void **)&aggr_members) == FAILURE) {
- zval *tmp;
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- MAKE_STD_ZVAL(aggr_methods_new);
- array_init(aggr_methods_new);
- MAKE_STD_ZVAL(aggr_props_new);
- array_init(aggr_props_new);
- add_assoc_zval_ex(tmp, "methods", sizeof("methods"), aggr_methods_new);
- add_assoc_zval_ex(tmp, "properties", sizeof("properties"), aggr_props_new);
-
- zend_hash_add(Z_ARRVAL_P(aggr_info->aggr_members), class_name_lc,
- class_name_len+1, &tmp, sizeof(zval *), NULL);
- } else {
- zend_hash_find(Z_ARRVAL_PP(aggr_members), "methods", sizeof("methods"), (void**)&aggr_methods);
- zend_hash_find(Z_ARRVAL_PP(aggr_members), "properties", sizeof("properties"), (void**)&aggr_props);
- }
-
- if (aggr_type == AGGREGATE_BY_LIST) {
- aggr_filter = aggr_list;
- } else if (aggr_type == AGGREGATE_BY_REGEXP) {
- aggr_filter = &z_aggr_regexp;
- }
-
- if (aggr_what == AGGREGATE_METHODS || aggr_what == AGGREGATE_ALL) {
- aggregate_methods(new_ce, ce, aggr_type, aggr_filter, exclude, *aggr_methods TSRMLS_CC);
- }
-
- if (aggr_what == AGGREGATE_PROPERTIES || aggr_what == AGGREGATE_ALL) {
- aggregate_properties(obj, ce, aggr_type, aggr_filter, exclude, *aggr_props TSRMLS_CC);
- }
-
- /*
- * Yes, we have to clean up after monsters. Tsk-tsk.
- */
- efree(class_name_lc);
-}
-/* }}} */
-
-
-/* {{{ proto void aggregate(object obj, string class)
- */
-PHP_FUNCTION(aggregate)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_ALL, AGGREGATE_ALL);
-}
-/* }}} */
-
-
-/* {{{ proto void aggregate_methods(object obj, string class)
- */
-PHP_FUNCTION(aggregate_methods)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_METHODS, AGGREGATE_ALL);
-}
-/* }}} */
-
-
-/* {{{ proto void aggregate_methods_by_list(object obj, string class, array method_list [, bool exclude])
- */
-PHP_FUNCTION(aggregate_methods_by_list)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_METHODS, AGGREGATE_BY_LIST);
-}
-/* }}} */
-
-
-/* {{{ proto void aggregate_properties(object obj, string class)
- */
-PHP_FUNCTION(aggregate_properties)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_PROPERTIES, AGGREGATE_ALL);
-}
-/* }}} */
-
-
-/* {{{ proto void aggregate_properties_by_list(object obj, string class, array props_list [, bool exclude])
- */
-PHP_FUNCTION(aggregate_properties_by_list)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_PROPERTIES, AGGREGATE_BY_LIST);
-}
-/* }}} */
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-/* {{{ proto void aggregate_methods_by_regexp(object obj, string class, string regexp [, bool exclude])
- */
-PHP_FUNCTION(aggregate_methods_by_regexp)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_METHODS, AGGREGATE_BY_REGEXP);
-}
-/* }}} */
-
-
-/* {{{ proto void aggregate_properties_by_regexp(object obj, string class, string regexp [, bool exclude])
- */
-PHP_FUNCTION(aggregate_properties_by_regexp)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_PROPERTIES, AGGREGATE_BY_REGEXP);
-}
-/* }}} */
-#endif
-
-
-/* {{{ proto array aggregation_info(object obj)
- */
-PHP_FUNCTION(aggregation_info)
-{
- zval *obj;
- aggregation_info *aggr_info;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj) == FAILURE) {
- return;
- }
-
- if (!BG(aggregation_table) ||
- zend_hash_index_find(BG(aggregation_table), (long)obj, (void**)&aggr_info) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = *aggr_info->aggr_members;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-
-/* {{{ proto void deaggregate(object obj [, string class])
- */
-PHP_FUNCTION(deaggregate)
-{
- zval *obj;
- char *class_name = NULL, *class_name_lc;
- int class_name_len;
- aggregation_info *aggr_info;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|s", &obj,
- &class_name, &class_name_len) == FAILURE) {
- return;
- }
-
- if (!BG(aggregation_table) ||
- zend_hash_index_find(BG(aggregation_table), (long)obj, (void**)&aggr_info) == FAILURE) {
- return;
- }
-
- if (class_name) {
- zval **aggr_members,
- **aggr_methods,
- **aggr_props,
- **method, **prop;
-
- class_name_lc = estrndup(class_name, class_name_len);
- zend_str_tolower(class_name_lc, class_name_len);
-
- if (zend_hash_find(Z_ARRVAL_P(aggr_info->aggr_members), class_name_lc,
- class_name_len+1, (void **)&aggr_members) == FAILURE) {
- efree(class_name_lc);
- return;
- }
-
- zend_hash_find(Z_ARRVAL_PP(aggr_members), "methods", sizeof("methods"), (void**)&aggr_methods);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(aggr_methods));
- zend_hash_get_current_data(Z_ARRVAL_PP(aggr_methods), (void**)&method) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_PP(aggr_methods))) {
- zend_hash_del(&Z_OBJCE_P(obj)->function_table, Z_STRVAL_PP(method), Z_STRLEN_PP(method)+1);
- }
-
- zend_hash_find(Z_ARRVAL_PP(aggr_members), "properties", sizeof("properties"), (void**)&aggr_props);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(aggr_props));
- zend_hash_get_current_data(Z_ARRVAL_PP(aggr_props), (void**)&prop) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_PP(aggr_props))) {
- zend_hash_del(Z_OBJPROP_P(obj), Z_STRVAL_PP(prop), Z_STRLEN_PP(prop)+1);
- }
-
- zend_hash_del(Z_ARRVAL_P(aggr_info->aggr_members), class_name_lc, class_name_len+1);
-
- efree(class_name_lc);
- } else {
- zend_class_entry *orig_ce;
- zval **aggr_members;
- zval **aggr_props, **prop;
-
- if (zend_hash_find(EG(class_table), Z_OBJCE_P(obj)->name,
- Z_OBJCE_P(obj)->name_length+1, (void **)&orig_ce) == FAILURE) {
- php_error(E_WARNING, "internal deaggregation error");
- return;
- }
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(aggr_info->aggr_members));
- zend_hash_get_current_data(Z_ARRVAL_P(aggr_info->aggr_members), (void **)&aggr_members) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(aggr_info->aggr_members))) {
- zend_hash_find(Z_ARRVAL_PP(aggr_members), "properties", sizeof("properties"), (void**)&aggr_props);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(aggr_props));
- zend_hash_get_current_data(Z_ARRVAL_PP(aggr_props), (void**)&prop) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_PP(aggr_props))) {
- zend_hash_del(Z_OBJPROP_P(obj), Z_STRVAL_PP(prop), Z_STRLEN_PP(prop)+1);
- }
- }
-
- /* OBJECT FIXME!! won't work with non-standard objects */
- (Z_OBJ_P(obj))->ce = orig_ce;
- zend_hash_index_del(BG(aggregation_table), (long)obj);
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/aggregation.h b/ext/standard/aggregation.h
deleted file mode 100644
index 551782fdfe..0000000000
--- a/ext/standard/aggregation.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef AGGREGATION_H
-#define AGGREGATION_H
-
-#define AGGREGATE_ALL 0
-
-#define AGGREGATE_METHODS 1
-#define AGGREGATE_PROPERTIES 2
-
-#define AGGREGATE_BY_LIST 1
-#define AGGREGATE_BY_REGEXP 2
-
-/*
- * Data structure that is stored in aggregation_table hashtable for each object.
- */
-typedef struct {
- zend_class_entry *new_ce;
- zval *aggr_members;
-} aggregation_info;
-
-PHP_FUNCTION(aggregate);
-PHP_FUNCTION(aggregate_methods);
-PHP_FUNCTION(aggregate_methods_by_list);
-PHP_FUNCTION(aggregate_methods_by_regexp);
-PHP_FUNCTION(aggregate_properties);
-PHP_FUNCTION(aggregate_properties_by_list);
-PHP_FUNCTION(aggregate_properties_by_regexp);
-PHP_FUNCTION(aggregate);
-PHP_FUNCTION(deaggregate);
-PHP_FUNCTION(aggregation_info);
-
-#endif /* AGGREGATION_H */
diff --git a/ext/standard/array.c b/ext/standard/array.c
deleted file mode 100644
index a1c9154d43..0000000000
--- a/ext/standard/array.c
+++ /dev/null
@@ -1,3374 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Andrei Zmievski <andrei@php.net> |
- | Stig Venaas <venaas@php.net> |
- | Jason Greene <jason@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_ini.h"
-#include <stdarg.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include <stdio.h>
-#if HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#ifdef PHP_WIN32
-#include "win32/unistd.h"
-#endif
-#include "zend_globals.h"
-#include "php_globals.h"
-#include "php_array.h"
-#include "basic_functions.h"
-#include "php_string.h"
-#include "php_rand.h"
-#include "php_smart_str.h"
-
-#ifdef ZTS
-int array_globals_id;
-#else
-php_array_globals array_globals;
-#endif
-
-#define EXTR_OVERWRITE 0
-#define EXTR_SKIP 1
-#define EXTR_PREFIX_SAME 2
-#define EXTR_PREFIX_ALL 3
-#define EXTR_PREFIX_INVALID 4
-#define EXTR_PREFIX_IF_EXISTS 5
-#define EXTR_IF_EXISTS 6
-
-#define SORT_REGULAR 0
-#define SORT_NUMERIC 1
-#define SORT_STRING 2
-
-#define SORT_DESC 3
-#define SORT_ASC 4
-
-#define CASE_LOWER 0
-#define CASE_UPPER 1
-
-#define COUNT_NORMAL 0
-#define COUNT_RECURSIVE 1
-
-PHP_MINIT_FUNCTION(array)
-{
-#ifdef ZTS
- ts_allocate_id(&array_globals_id, sizeof(php_array_globals), NULL, NULL);
-#endif
-
- REGISTER_LONG_CONSTANT("EXTR_OVERWRITE", EXTR_OVERWRITE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_SKIP", EXTR_SKIP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_SAME", EXTR_PREFIX_SAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_ALL", EXTR_PREFIX_ALL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_INVALID", EXTR_PREFIX_INVALID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_IF_EXISTS", EXTR_PREFIX_IF_EXISTS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_IF_EXISTS", EXTR_IF_EXISTS, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SORT_ASC", SORT_ASC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SORT_DESC", SORT_DESC, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SORT_REGULAR", SORT_REGULAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SORT_NUMERIC", SORT_NUMERIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SORT_STRING", SORT_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CASE_LOWER", CASE_LOWER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CASE_UPPER", CASE_UPPER, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("COUNT_NORMAL", COUNT_NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("COUNT_RECURSIVE", COUNT_RECURSIVE, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(array)
-{
-#ifdef ZTS
- ts_free_id(array_globals_id);
-#endif
-
- return SUCCESS;
-}
-
-static void set_compare_func(int sort_type TSRMLS_DC)
-{
- switch (sort_type) {
- case SORT_NUMERIC:
- ARRAYG(compare_func) = numeric_compare_function;
- break;
-
- case SORT_STRING:
- ARRAYG(compare_func) = string_compare_function;
- break;
-
- case SORT_REGULAR:
- default:
- ARRAYG(compare_func) = compare_function;
- break;
- }
-}
-
-static int array_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- zval result;
- zval first;
- zval second;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- if (f->nKeyLength == 0) {
- Z_TYPE(first) = IS_LONG;
- Z_LVAL(first) = f->h;
- } else {
- Z_TYPE(first) = IS_STRING;
- Z_STRVAL(first) = f->arKey;
- Z_STRLEN(first) = f->nKeyLength-1;
- }
-
- if (s->nKeyLength == 0) {
- Z_TYPE(second) = IS_LONG;
- Z_LVAL(second) = s->h;
- } else {
- Z_TYPE(second) = IS_STRING;
- Z_STRVAL(second) = s->arKey;
- Z_STRLEN(second) = s->nKeyLength-1;
- }
-
- if (ARRAYG(compare_func)(&result, &first, &second TSRMLS_CC) == FAILURE) {
- return 0;
- }
-
- if (Z_TYPE(result) == IS_DOUBLE) {
- if (Z_DVAL(result) < 0) {
- return -1;
- } else if (Z_DVAL(result) > 0) {
- return 1;
- } else {
- return 0;
- }
- }
-
- convert_to_long(&result);
-
- if (Z_LVAL(result) < 0) {
- return -1;
- } else if (Z_LVAL(result) > 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int array_reverse_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_key_compare(a, b TSRMLS_CC) * -1;
-}
-
-/* {{{ proto bool krsort(array array_arg [, int sort_flags])
- Sort an array by key value in reverse order */
-PHP_FUNCTION(krsort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_reverse_key_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ksort(array array_arg [, int sort_flags])
- Sort an array by key */
-PHP_FUNCTION(ksort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_key_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-static int php_count_recursive(zval *array, long mode TSRMLS_DC)
-{
- long cnt = 0;
- zval **element;
- HashTable *target_hash;
-
- target_hash = HASH_OF(array);
-
- if (Z_TYPE_P(array) == IS_ARRAY)
- {
- cnt += zend_hash_num_elements(target_hash);
- if (mode == COUNT_RECURSIVE) {
- HashPosition pos;
-
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(array), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(array), (void **) &element, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(array), &pos)) {
- cnt += php_count_recursive(*element, COUNT_RECURSIVE TSRMLS_CC);
- }
- }
- }
-
- return cnt;
-}
-
-/* {{{ proto int count(mixed var [, int mode])
- Count the number of elements in a variable (usually an array) */
-PHP_FUNCTION(count)
-{
- zval *array;
- long mode = COUNT_NORMAL;
-
- if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE)
- return;
-
- switch (Z_TYPE_P(array)) {
- case IS_NULL:
- RETURN_LONG(0);
- break;
- case IS_ARRAY:
- RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC));
- break;
- default:
- RETURN_LONG(1);
- break;
- }
-}
-/* }}} */
-
-/* Numbers are always smaller than strings int this function as it
- * anyway doesn't make much sense to compare two different data types.
- * This keeps it consistant and simple.
- *
- * This is not correct any more, depends on what compare_func is set to.
- */
-static int array_data_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- pval result;
- pval *first;
- pval *second;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- first = *((pval **) f->pData);
- second = *((pval **) s->pData);
-
- if (ARRAYG(compare_func)(&result, first, second TSRMLS_CC) == FAILURE) {
- return 0;
- }
-
- if (Z_TYPE(result) == IS_DOUBLE) {
- if (Z_DVAL(result) < 0) {
- return -1;
- } else if (Z_DVAL(result) > 0) {
- return 1;
- } else {
- return 0;
- }
- }
-
- convert_to_long(&result);
-
- if (Z_LVAL(result) < 0) {
- return -1;
- } else if (Z_LVAL(result) > 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int array_reverse_data_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_data_compare(a, b TSRMLS_CC)*-1;
-}
-
-static int array_natural_general_compare(const void *a, const void *b, int fold_case)
-{
- Bucket *f, *s;
- zval *fval, *sval;
- zval first, second;
- int result;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- fval = *((pval **) f->pData);
- sval = *((pval **) s->pData);
- first = *fval;
- second = *sval;
- if (Z_TYPE_P(fval) != IS_STRING) {
- zval_copy_ctor(&first);
- convert_to_string(&first);
- }
- if (Z_TYPE_P(sval) != IS_STRING) {
- zval_copy_ctor(&first);
- convert_to_string(&second);
- }
-
- result = strnatcmp_ex(Z_STRVAL(first), Z_STRLEN(first),
- Z_STRVAL(second), Z_STRLEN(second), fold_case);
-
- if (Z_TYPE_P(fval) != IS_STRING)
- zval_dtor(&first);
- if (Z_TYPE_P(sval) != IS_STRING)
- zval_dtor(&second);
-
- return result;
-}
-
-static int array_natural_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_natural_general_compare(a, b, 0);
-}
-
-static int array_natural_case_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_natural_general_compare(a, b, 1);
-}
-
-static void php_natsort(INTERNAL_FUNCTION_PARAMETERS, int fold_case)
-{
- zval **array;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in %s() call",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- if (fold_case) {
- if (zend_hash_sort(target_hash, zend_qsort, array_natural_case_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
- }
- } else {
- if (zend_hash_sort(target_hash, zend_qsort, array_natural_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
- }
- }
-
- RETURN_TRUE;
-}
-
-
-/* {{{ proto void natsort(array array_arg)
- Sort an array using natural sort */
-PHP_FUNCTION(natsort)
-{
- php_natsort(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto void natcasesort(array array_arg)
- Sort an array using case-insensitive natural sort */
-PHP_FUNCTION(natcasesort)
-{
- php_natsort(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto bool asort(array array_arg [, int sort_flags])
- Sort an array and maintain index association */
-PHP_FUNCTION(asort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_data_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool arsort(array array_arg [, int sort_flags])
- Sort an array in reverse order and maintain index association */
-PHP_FUNCTION(arsort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_reverse_data_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool sort(array array_arg [, int sort_flags])
- Sort an array */
-PHP_FUNCTION(sort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_data_compare, 1 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool rsort(array array_arg [, int sort_flags])
- Sort an array in reverse order */
-PHP_FUNCTION(rsort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_reverse_data_compare, 1 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-static int array_user_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- zval **args[2];
- zval *retval_ptr;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- args[0] = (zval **) f->pData;
- args[1] = (zval **) s->pData;
-
- if (call_user_function_ex(EG(function_table), NULL, *BG(user_compare_func_name), &retval_ptr, 2, args, 0, NULL TSRMLS_CC)==SUCCESS
- && retval_ptr) {
- long retval;
-
- convert_to_long_ex(&retval_ptr);
- retval = Z_LVAL_P(retval_ptr);
- zval_ptr_dtor(&retval_ptr);
- return retval;
- } else {
- return 0;
- }
-}
-
-/* {{{ proto bool usort(array array_arg, string cmp_function)
- Sort an array by values using a user-defined comparison function */
-PHP_FUNCTION(usort)
-{
- zval **array;
- zval **old_compare_func;
- HashTable *target_hash;
-
- old_compare_func = BG(user_compare_func_name);
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array, &BG(user_compare_func_name)) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in usort() call");
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 1 TSRMLS_CC) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- BG(user_compare_func_name) = old_compare_func;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool uasort(array array_arg, string cmp_function)
- Sort an array with a user-defined comparison function and maintain index association */
-PHP_FUNCTION(uasort)
-{
- zval **array;
- zval **old_compare_func;
- HashTable *target_hash;
-
- old_compare_func = BG(user_compare_func_name);
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array, &BG(user_compare_func_name)) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in uasort() call");
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 0 TSRMLS_CC) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- BG(user_compare_func_name) = old_compare_func;
- RETURN_TRUE;
-}
-/* }}} */
-
-static int array_user_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- pval key1, key2;
- pval *args[2];
- pval retval;
- int status;
-
- args[0] = &key1;
- args[1] = &key2;
- INIT_PZVAL(&key1);
- INIT_PZVAL(&key2);
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- if (f->nKeyLength) {
- Z_STRVAL(key1) = estrndup(f->arKey, f->nKeyLength);
- Z_STRLEN(key1) = f->nKeyLength-1;
- Z_TYPE(key1) = IS_STRING;
- } else {
- Z_LVAL(key1) = f->h;
- Z_TYPE(key1) = IS_LONG;
- }
- if (s->nKeyLength) {
- Z_STRVAL(key2) = estrndup(s->arKey, s->nKeyLength);
- Z_STRLEN(key2) = s->nKeyLength-1;
- Z_TYPE(key2) = IS_STRING;
- } else {
- Z_LVAL(key2) = s->h;
- Z_TYPE(key2) = IS_LONG;
- }
-
- status = call_user_function(EG(function_table), NULL, *BG(user_compare_func_name), &retval, 2, args TSRMLS_CC);
-
- zval_dtor(&key1);
- zval_dtor(&key2);
-
- if (status==SUCCESS) {
- convert_to_long(&retval);
- return Z_LVAL(retval);
- } else {
- return 0;
- }
-}
-
-/* {{{ proto bool uksort(array array_arg, string cmp_function)
- Sort an array by keys using a user-defined comparison function */
-PHP_FUNCTION(uksort)
-{
- zval **array;
- zval **old_compare_func;
- HashTable *target_hash;
-
- old_compare_func = BG(user_compare_func_name);
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array, &BG(user_compare_func_name)) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in uksort() call");
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- if (zend_hash_sort(target_hash, zend_qsort, array_user_key_compare, 0 TSRMLS_CC) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- BG(user_compare_func_name) = old_compare_func;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed end(array array_arg)
- Advances array argument's internal pointer to the last element and return it */
-PHP_FUNCTION(end)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Variable passed to end() is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_end(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed prev(array array_arg)
- Move array argument's internal pointer to the previous element and return it */
-PHP_FUNCTION(prev)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Variable passed to prev() is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_move_backwards(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed next(array array_arg)
- Move array argument's internal pointer to the next element and return it */
-PHP_FUNCTION(next)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Variable passed to next() is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_move_forward(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed reset(array array_arg)
- Set array argument's internal pointer to the first element and return it */
-PHP_FUNCTION(reset)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Variable passed to reset() is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed current(array array_arg)
- Return the element currently pointed to by the internal array pointer */
-PHP_FUNCTION(current)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Variable passed to current() is not an array or object");
- RETURN_FALSE;
- }
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
- *return_value = **entry;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-/* {{{ proto mixed key(array array_arg)
- Return the key of the element currently pointed to by the internal array pointer */
-PHP_FUNCTION(key)
-{
- pval **array;
- char *string_key;
- ulong num_key;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Variable passed to key() is not an array or object");
- RETURN_FALSE;
- }
- switch (zend_hash_get_current_key(target_hash, &string_key, &num_key, 1)) {
- case HASH_KEY_IS_STRING:
- RETVAL_STRING(string_key, 0);
- break;
- case HASH_KEY_IS_LONG:
- RETVAL_LONG(num_key);
- break;
- case HASH_KEY_NON_EXISTANT:
- return;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])
- Return the lowest value in an array or a series of arguments */
-PHP_FUNCTION(min)
-{
- int argc=ZEND_NUM_ARGS();
- pval **result;
-
- if (argc<=0) {
- php_error(E_WARNING, "min: must be passed at least 1 value");
- RETURN_NULL();
- }
- set_compare_func(SORT_REGULAR TSRMLS_CC);
- if (argc == 1) {
- pval **arr;
-
- if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) {
- WRONG_PARAM_COUNT;
- }
- if (zend_hash_minmax(Z_ARRVAL_PP(arr), array_data_compare, 0, (void **) &result TSRMLS_CC)==SUCCESS) {
- *return_value = **result;
- zval_copy_ctor(return_value);
- } else {
- php_error(E_WARNING, "min: array must contain at least 1 element");
- RETURN_FALSE;
- }
- } else {
- pval ***args = (pval ***) emalloc(sizeof(pval **)*ZEND_NUM_ARGS());
- pval **min, result;
- int i;
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)==FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- min = args[0];
-
- for (i=1; i<ZEND_NUM_ARGS(); i++) {
- is_smaller_function(&result, *args[i], *min TSRMLS_CC);
- if (Z_LVAL(result) == 1) {
- min = args[i];
- }
- }
-
- *return_value = **min;
- zval_copy_ctor(return_value);
-
- efree(args);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])
- Return the highest value in an array or a series of arguments */
-PHP_FUNCTION(max)
-{
- int argc=ZEND_NUM_ARGS();
- pval **result;
-
- if (argc<=0) {
- php_error(E_WARNING, "max: must be passed at least 1 value");
- RETURN_NULL();
- }
- set_compare_func(SORT_REGULAR TSRMLS_CC);
- if (argc == 1) {
- pval **arr;
-
- if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) {
- WRONG_PARAM_COUNT;
- }
- if (zend_hash_minmax(Z_ARRVAL_PP(arr), array_data_compare, 1, (void **) &result TSRMLS_CC)==SUCCESS) {
- *return_value = **result;
- zval_copy_ctor(return_value);
- } else {
- php_error(E_WARNING, "max: array must contain at least 1 element");
- RETURN_FALSE;
- }
- } else {
- pval ***args = (pval ***) emalloc(sizeof(pval **)*ZEND_NUM_ARGS());
- pval **max, result;
- int i;
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)==FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- max = args[0];
-
- for (i=1; i<ZEND_NUM_ARGS(); i++) {
- is_smaller_or_equal_function(&result, *args[i], *max TSRMLS_CC);
- if (Z_LVAL(result) == 0) {
- max = args[i];
- }
- }
-
- *return_value = **max;
- zval_copy_ctor(return_value);
-
- efree(args);
- }
-}
-/* }}} */
-
-static int php_array_walk(HashTable *target_hash, zval **userdata TSRMLS_DC)
-{
- zval **args[3], /* Arguments to userland function */
- *retval_ptr, /* Return value - unused */
- *key; /* Entry key */
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- /* Allocate space for key */
- MAKE_STD_ZVAL(key);
-
- /* Set up known arguments */
- args[1] = &key;
- args[2] = userdata;
-
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
-
- /* Iterate through hash */
- while(zend_hash_get_current_data_ex(target_hash, (void **)&args[0], &pos) == SUCCESS) {
- /* Set up the key */
- if (zend_hash_get_current_key_ex(target_hash, &string_key, &string_key_len, &num_key, 0, &pos) == HASH_KEY_IS_LONG) {
- Z_TYPE_P(key) = IS_LONG;
- Z_LVAL_P(key) = num_key;
- } else {
- Z_TYPE_P(key) = IS_STRING;
- Z_STRVAL_P(key) = string_key;
- Z_STRLEN_P(key) = string_key_len-1;
- }
-
- /* Call the userland function */
- if (call_user_function_ex(EG(function_table), NULL, *BG(array_walk_func_name),
- &retval_ptr, userdata ? 3 : 2, args, 0, NULL TSRMLS_CC) == SUCCESS) {
-
- zval_ptr_dtor(&retval_ptr);
- } else
- php_error(E_WARNING, "Unable to call %s() - function does not exist",
- (*BG(array_walk_func_name))->value.str.val);
-
- zend_hash_move_forward_ex(target_hash, &pos);
- }
- efree(key);
-
- return 0;
-}
-
-/* {{{ proto bool array_walk(array input, string funcname [, mixed userdata])
- Apply a user function to every member of an array */
-PHP_FUNCTION(array_walk)
-{
- int argc;
- zval **array,
- **userdata = NULL,
- **old_walk_func_name;
- HashTable *target_hash;
-
- argc = ZEND_NUM_ARGS();
- old_walk_func_name = BG(array_walk_func_name);
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &array, &BG(array_walk_func_name), &userdata) == FAILURE) {
- BG(array_walk_func_name) = old_walk_func_name;
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in %s() call",
- get_active_function_name(TSRMLS_C));
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(BG(array_walk_func_name)) != IS_ARRAY &&
- Z_TYPE_PP(BG(array_walk_func_name)) != IS_STRING) {
- php_error(E_WARNING, "Wrong syntax for function name in %s() call",
- get_active_function_name(TSRMLS_C));
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_FALSE;
- }
- php_array_walk(target_hash, userdata TSRMLS_CC);
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
- * 0 = return boolean
- * 1 = return key
- */
-static void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
-{
- zval **value, /* value to check for */
- **array, /* array to check in */
- **strict, /* strict comparison or not */
- **entry, /* pointer to array entry */
- res; /* comparison result */
- HashTable *target_hash; /* array hashtable */
- HashPosition pos; /* hash iterator */
- ulong num_key;
- uint str_key_len;
- char *string_key;
- int (*is_equal_func)(zval *, zval *, zval * TSRMLS_DC) = is_equal_function;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &value, &array, &strict) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(value) == IS_OBJECT) {
- php_error(E_WARNING, "Wrong datatype for first argument in call to %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(array) != IS_ARRAY) {
- php_error(E_WARNING, "Wrong datatype for second argument in call to %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() == 3) {
- convert_to_boolean_ex(strict);
- if (Z_LVAL_PP(strict)) {
- is_equal_func = is_identical_function;
- }
- }
-
- target_hash = HASH_OF(*array);
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
- while(zend_hash_get_current_data_ex(target_hash, (void **)&entry, &pos) == SUCCESS) {
- is_equal_func(&res, *value, *entry TSRMLS_CC);
- if (Z_LVAL(res)) {
- if (behavior==0) {
- RETURN_TRUE;
- } else {
- /* Return current key */
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &str_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- RETURN_STRINGL(string_key, str_key_len-1, 1);
- break;
- case HASH_KEY_IS_LONG:
- RETURN_LONG(num_key);
- break;
- }
- }
- }
-
- zend_hash_move_forward_ex(target_hash, &pos);
- }
-
- RETURN_FALSE;
-}
-
-
-/* {{{ proto bool in_array(mixed needle, array haystack [, bool strict])
- Checks if the given value exists in the array */
-PHP_FUNCTION(in_array)
-{
- php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed array_search(mixed needle, array haystack [, bool strict])
- Searches the array for a given value and returns the corresponding key if successful */
-PHP_FUNCTION(array_search)
-{
- php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-static int php_valid_var_name(char *var_name)
-{
- int len, i;
-
- if (!var_name)
- return 0;
-
- len = strlen(var_name);
-
- if (!isalpha((int)var_name[0]) && var_name[0] != '_')
- return 0;
-
- if (len > 1) {
- for(i=1; i<len; i++) {
- if (!isalnum((int)var_name[i]) && var_name[i] != '_') {
- return 0;
- }
- }
- }
-
- return 1;
-}
-
-
-/* {{{ proto int extract(array var_array [, int extract_type [, string prefix]])
- Imports variables into symbol table from an array */
-PHP_FUNCTION(extract)
-{
- zval **var_array, **z_extract_type, **prefix;
- zval **entry, *data;
- char *var_name;
- smart_str final_name = {0};
- ulong num_key;
- uint var_name_len;
- int var_exists, extract_type, key_type, count = 0;
- HashPosition pos;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &var_array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- extract_type = EXTR_OVERWRITE;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &var_array, &z_extract_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(z_extract_type);
- extract_type = Z_LVAL_PP(z_extract_type);
- if (extract_type > EXTR_SKIP && extract_type <= EXTR_PREFIX_IF_EXISTS) {
- php_error(E_WARNING, "%s() expects a prefix to be specified",
- get_active_function_name(TSRMLS_C));
- return;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &var_array, &z_extract_type, &prefix) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(z_extract_type);
- extract_type = Z_LVAL_PP(z_extract_type);
- convert_to_string_ex(prefix);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_IF_EXISTS) {
- php_error(E_WARNING, "Unknown extract type in call to %s()",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- if (Z_TYPE_PP(var_array) != IS_ARRAY) {
- php_error(E_WARNING, "%s() expects first argument to be an array",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(var_array), &pos);
- while(zend_hash_get_current_data_ex(Z_ARRVAL_PP(var_array), (void **)&entry, &pos) == SUCCESS) {
- key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(var_array), &var_name, &var_name_len, &num_key, 0, &pos);
- var_exists = 0;
-
- if (key_type == HASH_KEY_IS_STRING) {
- var_name_len--;
- var_exists = zend_hash_exists(EG(active_symbol_table), var_name, var_name_len + 1);
- } else if (extract_type == EXTR_PREFIX_ALL || extract_type == EXTR_PREFIX_INVALID) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_append_long(&final_name, num_key);
- } else {
- zend_hash_move_forward_ex(Z_ARRVAL_PP(var_array), &pos);
- continue;
- }
-
- switch (extract_type) {
- case EXTR_IF_EXISTS:
- if (!var_exists) break;
- /* break omitted intentionally */
-
- case EXTR_OVERWRITE:
- smart_str_appendl(&final_name, var_name, var_name_len);
- break;
-
- case EXTR_PREFIX_IF_EXISTS:
- if (var_exists) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_appendl(&final_name, var_name, var_name_len);
- }
- break;
-
- case EXTR_PREFIX_SAME:
- if (!var_exists)
- smart_str_appendl(&final_name, var_name, var_name_len);
- /* break omitted intentionally */
-
- case EXTR_PREFIX_ALL:
- if (final_name.len == 0) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_appendl(&final_name, var_name, var_name_len);
- }
- break;
-
- case EXTR_PREFIX_INVALID:
- if (final_name.len == 0) {
- if (!php_valid_var_name(var_name)) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_appendl(&final_name, var_name, var_name_len);
- } else
- smart_str_appendl(&final_name, var_name, var_name_len);
- }
- break;
-
- default:
- if (!var_exists)
- smart_str_appendl(&final_name, var_name, var_name_len);
- break;
- }
-
- if (final_name.len) {
- smart_str_0(&final_name);
- if (php_valid_var_name(final_name.c)) {
- MAKE_STD_ZVAL(data);
- *data = **entry;
- zval_copy_ctor(data);
-
- ZEND_SET_SYMBOL(EG(active_symbol_table), final_name.c, data);
-
- count++;
- }
- final_name.len = 0;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(var_array), &pos);
- }
-
- smart_str_free(&final_name);
-
- RETURN_LONG(count);
-}
-/* }}} */
-
-
-static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_value, zval *entry)
-{
- zval **value_ptr, *value, *data;
-
- if (Z_TYPE_P(entry) == IS_STRING) {
- if (zend_hash_find(eg_active_symbol_table, Z_STRVAL_P(entry),
- Z_STRLEN_P(entry)+1, (void **)&value_ptr) != FAILURE) {
- value = *value_ptr;
- ALLOC_ZVAL(data);
- *data = *value;
- zval_copy_ctor(data);
- INIT_PZVAL(data);
-
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_P(entry),
- Z_STRLEN_P(entry)+1, &data, sizeof(zval *), NULL);
- }
- }
- else if (Z_TYPE_P(entry) == IS_ARRAY) {
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(entry), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(entry), (void**)&value_ptr, &pos) == SUCCESS) {
- value = *value_ptr;
-
- php_compact_var(eg_active_symbol_table, return_value, value);
- zend_hash_move_forward_ex(Z_ARRVAL_P(entry), &pos);
- }
- }
-}
-
-
-/* {{{ proto array compact(mixed var_names [, mixed ...])
- Creates a hash containing variables and their values */
-PHP_FUNCTION(compact)
-{
- zval ***args; /* function arguments array */
- int i;
-
- args = (zval ***)emalloc(ZEND_NUM_ARGS() * sizeof(zval **));
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
-
- for (i=0; i<ZEND_NUM_ARGS(); i++) {
- php_compact_var(EG(active_symbol_table), return_value, *args[i]);
- }
-
- efree(args);
-}
-/* }}} */
-
-/* {{{ proto array array_fill(int start_key, int num, mixed val)
- Create an array containing num elements starting with index start_key each initialized to val */
-PHP_FUNCTION(array_fill)
-{
- zval **start_key, **num, **val, *newval;
- long i;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &start_key, &num, &val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* allocate an array for return */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(start_key)) {
- case IS_STRING:
- case IS_LONG:
- case IS_DOUBLE:
- if(PZVAL_IS_REF(*val)) {
- SEPARATE_ZVAL(val);
- }
- convert_to_long_ex(start_key);
- zval_add_ref(val);
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(start_key), val, sizeof(val), NULL);
- break;
- default:
- php_error(E_WARNING, "Wrong datatype for start key in array_init()");
- RETURN_FALSE;
- break;
- }
-
- convert_to_long_ex(num);
- i = Z_LVAL_PP(num) - 1;
- if(i<0) {
- php_error(E_WARNING, "Number of elements must be positive in array_init()");
- RETURN_FALSE;
- }
- newval = *val;
- while(i--) {
- if(!(i%62000)) {
- MAKE_STD_ZVAL(newval);
- *newval = **val;
- zval_copy_ctor(newval);
- }
- zval_add_ref(&newval);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &newval, sizeof(zval *), NULL);
- }
-}
-/* }}} */
-
-/* {{{ proto array range(mixed low, mixed high)
- Create an array containing the range of integers or characters from low to high (inclusive) */
-PHP_FUNCTION(range)
-{
- zval **zlow, **zhigh;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zlow, &zhigh) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* allocate an array for return */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if(Z_TYPE_PP(zlow)==IS_STRING && Z_TYPE_PP(zhigh)==IS_STRING) {
- char *low, *high;
- convert_to_string_ex(zlow);
- convert_to_string_ex(zhigh);
- low = Z_STRVAL_PP(zlow);
- high = Z_STRVAL_PP(zhigh);
- if(*low>*high) {
- for (; *low >= *high; (*low)--) {
- add_next_index_stringl(return_value, low, 1, 1);
- }
- } else {
- for (; *low <= *high; (*low)++) {
- add_next_index_stringl(return_value, low, 1, 1);
- }
- }
- } else {
- int low, high;
- convert_to_long_ex(zlow);
- convert_to_long_ex(zhigh);
- low = Z_LVAL_PP(zlow);
- high = Z_LVAL_PP(zhigh);
- if(low>high) {
- for (; low >= high; low--) {
- add_next_index_long(return_value, low);
- }
- } else {
- for (; low <= high; low++) {
- add_next_index_long(return_value, low);
- }
- }
- }
-}
-/* }}} */
-
-
-static int array_data_shuffle(const void *a, const void *b TSRMLS_DC)
-{
- return (php_rand(TSRMLS_C) % 2) ? 1 : -1;
-}
-
-
-/* {{{ proto bool shuffle(array array_arg)
- Randomly shuffle the contents of an array */
-PHP_FUNCTION(shuffle)
-{
- zval *array;
-
- if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
- RETURN_FALSE;
- }
- if (zend_hash_sort(Z_ARRVAL_PP(&array), (sort_func_t)php_mergesort, array_data_shuffle, 1 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* HashTable* php_splice(HashTable *in_hash, int offset, int length,
- zval ***list, int list_count, HashTable **removed) */
-HashTable* php_splice(HashTable *in_hash, int offset, int length,
- zval ***list, int list_count, HashTable **removed)
-{
- HashTable *out_hash = NULL; /* Output hashtable */
- int num_in, /* Number of entries in the input hashtable */
- pos, /* Current position in the hashtable */
- i; /* Loop counter */
- Bucket *p; /* Pointer to hash bucket */
- zval *entry; /* Hash entry */
-
- /* If input hash doesn't exist, we have nothing to do */
- if (!in_hash)
- return NULL;
-
- /* Get number of entries in the input hash */
- num_in = zend_hash_num_elements(in_hash);
-
- /* Clamp the offset.. */
- if (offset > num_in)
- offset = num_in;
- else if (offset < 0 && (offset=num_in+offset) < 0)
- offset = 0;
-
- /* ..and the length */
- if (length < 0)
- length = num_in-offset+length;
- else if(offset+length > num_in)
- length = num_in-offset;
-
- /* Create and initialize output hash */
- ALLOC_HASHTABLE(out_hash);
- zend_hash_init(out_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- /* Start at the beginning of the input hash and copy
- entries to output hash until offset is reached */
- for (pos=0, p=in_hash->pListHead; pos<offset && p ; pos++, p=p->pListNext) {
- /* Get entry and increase reference count */
- entry = *((zval **)p->pData);
- entry->refcount++;
-
- /* Update output hash depending on key type */
- if (p->nKeyLength)
- zend_hash_update(out_hash, p->arKey, p->nKeyLength, &entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
- }
-
- /* If hash for removed entries exists, go until offset+length
- and copy the entries to it */
- if (removed != NULL) {
- for( ; pos<offset+length && p; pos++, p=p->pListNext) {
- entry = *((zval **)p->pData);
- entry->refcount++;
- if (p->nKeyLength)
- zend_hash_update(*removed, p->arKey, p->nKeyLength, &entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(*removed, &entry, sizeof(zval *), NULL);
- }
- } else /* otherwise just skip those entries */
- for( ; pos<offset+length && p; pos++, p=p->pListNext);
-
- /* If there are entries to insert.. */
- if (list != NULL) {
- /* ..for each one, create a new zval, copy entry into it
- and copy it into the output hash */
- for (i=0; i<list_count; i++) {
- entry = *list[i];
- if (entry->refcount>=1000) {
- zval *tmp = (zval *) emalloc(sizeof(zval));
-
- *tmp = *entry;
- zval_copy_ctor(tmp);
- tmp->refcount = 1;
- tmp->is_ref = 0;
- entry = tmp;
- } else {
- entry->refcount++;
- }
- zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
- }
- }
-
- /* Copy the remaining input hash entries to the output hash */
- for ( ; p ; p=p->pListNext) {
- entry = *((zval **)p->pData);
- entry->refcount++;
- if (p->nKeyLength)
- zend_hash_update(out_hash, p->arKey, p->nKeyLength, &entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
- }
-
- zend_hash_internal_pointer_reset(out_hash);
- return out_hash;
-}
-/* }}} */
-
-
-/* {{{ proto int array_push(array stack, mixed var [, mixed ...])
- Pushes elements onto the end of the array */
-PHP_FUNCTION(array_push)
-{
- zval ***args, /* Function arguments array */
- *stack, /* Input array */
- *new_var; /* Variable to be pushed */
- int i, /* Loop counter */
- argc; /* Number of function arguments */
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Get first argument and check that it's an array */
- stack = *args[0];
- if (Z_TYPE_P(stack) != IS_ARRAY) {
- php_error(E_WARNING, "First argument to array_push() needs to be an array");
- efree(args);
- RETURN_FALSE;
- }
-
- /* For each subsequent argument, make it a reference, increase refcount,
- and add it to the end of the array */
- for (i=1; i<argc; i++) {
- new_var = *args[i];
- new_var->refcount++;
-
- zend_hash_next_index_insert(Z_ARRVAL_P(stack), &new_var, sizeof(zval *), NULL);
- }
-
- /* Clean up and return the number of values in the stack */
- efree(args);
- RETVAL_LONG(zend_hash_num_elements(Z_ARRVAL_P(stack)));
-}
-/* }}} */
-
-
-/* {{{ void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int which_end) */
-static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
-{
- zval **stack, /* Input stack */
- **val; /* Value to be popped */
- HashTable *new_hash; /* New stack */
-
- /* Get the arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &stack) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(stack) != IS_ARRAY) {
- php_error(E_WARNING, "The argument needs to be an array");
- return;
- }
-
- if (zend_hash_num_elements(Z_ARRVAL_PP(stack)) == 0) {
- return;
- }
-
- /* Get the first or last value and copy it into the return value */
- if (off_the_end)
- zend_hash_internal_pointer_end(Z_ARRVAL_PP(stack));
- else
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
- zend_hash_get_current_data(Z_ARRVAL_PP(stack), (void **)&val);
- *return_value = **val;
- zval_copy_ctor(return_value);
- INIT_PZVAL(return_value);
-
- /* Delete the first or last value */
- new_hash = php_splice(Z_ARRVAL_PP(stack), (off_the_end) ? -1 : 0, 1, NULL, 0, NULL);
- zend_hash_destroy(Z_ARRVAL_PP(stack));
- efree(Z_ARRVAL_PP(stack));
- Z_ARRVAL_PP(stack) = new_hash;
-}
-/* }}} */
-
-
-/* {{{ proto mixed array_pop(array stack)
- Pops an element off the end of the array */
-PHP_FUNCTION(array_pop)
-{
- _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto mixed array_shift(array stack)
- Pops an element off the beginning of the array */
-PHP_FUNCTION(array_shift)
-{
- _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto int array_unshift(array stack, mixed var [, mixed ...])
- Pushes elements onto the beginning of the array */
-PHP_FUNCTION(array_unshift)
-{
- zval ***args, /* Function arguments array */
- *stack; /* Input stack */
- HashTable *new_hash; /* New hashtable for the stack */
- int argc; /* Number of function arguments */
-
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Get first argument and check that it's an array */
- stack = *args[0];
- if (Z_TYPE_P(stack) != IS_ARRAY) {
- php_error(E_WARNING, "First argument to array_unshift() needs to be an array");
- efree(args);
- RETURN_FALSE;
- }
-
- /* Use splice to insert the elements at the beginning. Destroy old
- hashtable and replace it with new one */
- new_hash = php_splice(Z_ARRVAL_P(stack), 0, 0, &args[1], argc-1, NULL);
- zend_hash_destroy(Z_ARRVAL_P(stack));
- efree(Z_ARRVAL_P(stack));
- Z_ARRVAL_P(stack) = new_hash;
-
- /* Clean up and return the number of elements in the stack */
- efree(args);
- RETVAL_LONG(zend_hash_num_elements(Z_ARRVAL_P(stack)));
-}
-/* }}} */
-
-
-/* {{{ proto array array_splice(array input, int offset [, int length [, array replacement]])
- Removes the elements designated by offset and length and replace them with supplied array */
-PHP_FUNCTION(array_splice)
-{
- zval ***args, /* Function arguments array */
- *array, /* Input array */
- ***repl = NULL; /* Replacement elements */
- HashTable *new_hash = NULL; /* Output array's hash */
- Bucket *p; /* Bucket used for traversing hash */
- int argc, /* Number of function arguments */
- i,
- offset,
- length,
- repl_num = 0; /* Number of replacement elements */
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 4) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Get first argument and check that it's an array */
- array = *args[0];
- if (Z_TYPE_P(array) != IS_ARRAY) {
- php_error(E_WARNING, "First argument to array_splice() should be an array");
- efree(args);
- return;
- }
-
- /* Get the next two arguments. If length is omitted,
- it's assumed to be until the end of the array */
- convert_to_long_ex(args[1]);
- offset = Z_LVAL_PP(args[1]);
- if (argc > 2) {
- convert_to_long_ex(args[2]);
- length = Z_LVAL_PP(args[2]);
- } else
- length = zend_hash_num_elements(Z_ARRVAL_P(array));
-
- if (argc == 4) {
- /* Make sure the last argument, if passed, is an array */
- convert_to_array_ex(args[3]);
-
- /* Create the array of replacement elements */
- repl_num = zend_hash_num_elements(Z_ARRVAL_PP(args[3]));
- repl = (zval ***)emalloc(repl_num * sizeof(zval **));
- for (p=Z_ARRVAL_PP(args[3])->pListHead, i=0; p; p=p->pListNext, i++) {
- repl[i] = ((zval **)p->pData);
- }
- }
-
- /* Initialize return value */
- array_init(return_value);
-
- /* Perform splice */
- new_hash = php_splice(Z_ARRVAL_P(array), offset, length,
- repl, repl_num,
- &Z_ARRVAL_P(return_value));
-
- /* Replace input array's hashtable with the new one */
- zend_hash_destroy(Z_ARRVAL_P(array));
- efree(Z_ARRVAL_P(array));
- Z_ARRVAL_P(array) = new_hash;
-
- /* Clean up */
- if (argc == 4)
- efree(repl);
- efree(args);
-}
-/* }}} */
-
-
-/* {{{ proto array array_slice(array input, int offset [, int length])
- Returns elements specified by offset and length */
-PHP_FUNCTION(array_slice)
-{
- zval **input, /* Input array */
- **offset, /* Offset to get elements from */
- **length, /* How many elements to get */
- **entry; /* An array entry */
- int offset_val, /* Value of the offset argument */
- length_val, /* Value of the length argument */
- num_in, /* Number of elements in the input array */
- pos, /* Current position in the array */
- argc; /* Number of function arguments */
-
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition hpos;
-
-
- /* Get the arguments and do error-checking */
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &input, &offset, &length)) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "First argument to array_slice() should be an array");
- return;
- }
-
- /* Make sure offset and length are integers and assume
- we want all entries from offset to the end if length
- is not passed */
- convert_to_long_ex(offset);
- offset_val = Z_LVAL_PP(offset);
- if (argc == 3) {
- convert_to_long_ex(length);
- length_val = Z_LVAL_PP(length);
- } else
- length_val = zend_hash_num_elements(Z_ARRVAL_PP(input));
-
- /* Initialize returned array */
- array_init(return_value);
-
- /* Get number of entries in the input hash */
- num_in = zend_hash_num_elements(Z_ARRVAL_PP(input));
-
- /* Clamp the offset.. */
- if (offset_val > num_in)
- return;
- else if (offset_val < 0 && (offset_val=num_in+offset_val) < 0)
- offset_val = 0;
-
- /* ..and the length */
- if (length_val < 0)
- length_val = num_in-offset_val+length_val;
- else if(offset_val+length_val > num_in)
- length_val = num_in-offset_val;
-
- if (length_val == 0)
- return;
-
- /* Start at the beginning and go until we hit offset */
- pos = 0;
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &hpos);
- while(pos < offset_val &&
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &hpos) == SUCCESS) {
- pos++;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &hpos);
- }
-
- /* Copy elements from input array to the one that's returned */
- while(pos < offset_val+length_val &&
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &hpos) == SUCCESS) {
-
- (*entry)->refcount++;
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &hpos)) {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key, string_key_len,
- entry, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value),
- entry, sizeof(zval *), NULL);
- break;
- }
- pos++;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &hpos);
- }
-}
-/* }}} */
-
-
-PHPAPI void php_array_merge(HashTable *dest, HashTable *src, int recursive)
-{
- zval **src_entry,
- **dest_entry;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(src, &pos);
- while(zend_hash_get_current_data_ex(src, (void **)&src_entry, &pos) == SUCCESS) {
- switch (zend_hash_get_current_key_ex(src, &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- if (recursive &&
- zend_hash_find(dest, string_key, string_key_len,
- (void **)&dest_entry) == SUCCESS) {
- convert_to_array_ex(dest_entry);
- convert_to_array_ex(src_entry);
- php_array_merge(Z_ARRVAL_PP(dest_entry),
- Z_ARRVAL_PP(src_entry), recursive);
- } else {
- (*src_entry)->refcount++;
-
- zend_hash_update(dest, string_key, strlen(string_key)+1,
- src_entry, sizeof(zval *), NULL);
- }
- break;
-
- case HASH_KEY_IS_LONG:
- (*src_entry)->refcount++;
- zend_hash_next_index_insert(dest, src_entry, sizeof(zval *), NULL);
- break;
- }
-
- zend_hash_move_forward_ex(src, &pos);
- }
-}
-
-static void php_array_merge_wrapper(INTERNAL_FUNCTION_PARAMETERS, int recursive)
-{
- zval ***args = NULL;
- int argc,
- i;
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
-
- for (i=0; i<argc; i++) {
- SEPARATE_ZVAL(args[i]);
- convert_to_array_ex(args[i]);
- php_array_merge(Z_ARRVAL_P(return_value), Z_ARRVAL_PP(args[i]), recursive);
- }
-
- efree(args);
-}
-
-
-/* {{{ proto array array_merge(array arr1, array arr2 [, array ...])
- Merges elements from passed arrays into one array */
-PHP_FUNCTION(array_merge)
-{
- php_array_merge_wrapper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto array array_merge_recursive(array arr1, array arr2 [, array ...])
- Recursively merges elements from passed arrays into one array */
-PHP_FUNCTION(array_merge_recursive)
-{
- php_array_merge_wrapper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto array array_keys(array input [, mixed search_value])
- Return just the keys from the input array, optionally only for the specified search_value */
-PHP_FUNCTION(array_keys)
-{
- zval **input, /* Input array */
- **search_value, /* Value to search for */
- **entry, /* An entry in the input array */
- res, /* Result of comparison */
- *new_val; /* New value */
- int add_key; /* Flag to indicate whether a key should be added */
- char *string_key; /* String key */
- uint string_key_len;
- ulong num_key; /* Numeric key */
- HashPosition pos;
-
- search_value = NULL;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &search_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "First argument to array_keys() should be an array");
- return;
- }
-
- /* Initialize return array */
- array_init(return_value);
- add_key = 1;
-
- /* Go through input array and add keys to the return array */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while(zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
- if (search_value != NULL) {
- is_equal_function(&res, *search_value, *entry TSRMLS_CC);
- add_key = zval_is_true(&res);
- }
-
- if (add_key) {
- MAKE_STD_ZVAL(new_val);
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 1, &pos)) {
- case HASH_KEY_IS_STRING:
- Z_TYPE_P(new_val) = IS_STRING;
- Z_STRVAL_P(new_val) = string_key;
- Z_STRLEN_P(new_val) = string_key_len-1;
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &new_val,
- sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- Z_TYPE_P(new_val) = IS_LONG;
- Z_LVAL_P(new_val) = num_key;
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &new_val,
- sizeof(zval *), NULL);
- break;
- }
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_values(array input)
- Return just the values from the input array */
-PHP_FUNCTION(array_values)
-{
- zval **input, /* Input array */
- **entry; /* An entry in the input array */
- HashPosition pos;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &input) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "Argument to array_values() should be an array");
- return;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Go through input array and add values to the return array */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while(zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
-
- (*entry)->refcount++;
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), entry,
- sizeof(zval *), NULL);
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_count_values(array input)
- Return the value as key and the frequency of that value in input as value */
-PHP_FUNCTION(array_count_values)
-{
- zval **input, /* Input array */
- **entry; /* An entry in the input array */
- zval **tmp;
- HashTable *myht;
- HashPosition pos;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &input) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "Argument to array_count_values() should be an array");
- return;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Go through input array and add values to the return array */
- myht = Z_ARRVAL_PP(input);
- zend_hash_internal_pointer_reset_ex(myht, &pos);
- while (zend_hash_get_current_data_ex(myht, (void **)&entry, &pos) == SUCCESS) {
- if (Z_TYPE_PP(entry) == IS_LONG) {
- if (zend_hash_index_find(Z_ARRVAL_P(return_value),
- Z_LVAL_PP(entry),
- (void**)&tmp) == FAILURE) {
- zval *data;
- MAKE_STD_ZVAL(data);
- Z_TYPE_P(data) = IS_LONG;
- Z_LVAL_P(data) = 1;
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), &data, sizeof(data), NULL);
- } else {
- Z_LVAL_PP(tmp)++;
- }
- } else if (Z_TYPE_PP(entry) == IS_STRING) {
- if (zend_hash_find(Z_ARRVAL_P(return_value),
- Z_STRVAL_PP(entry),
- Z_STRLEN_PP(entry)+1,
- (void**)&tmp) == FAILURE) {
- zval *data;
- MAKE_STD_ZVAL(data);
- Z_TYPE_P(data) = IS_LONG;
- Z_LVAL_P(data) = 1;
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &data, sizeof(data), NULL);
- } else {
- Z_LVAL_PP(tmp)++;
- }
- } else {
- php_error(E_WARNING, "Can only count STRING and INTEGER values!");
- }
-
- zend_hash_move_forward_ex(myht, &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_reverse(array input [, bool preserve keys])
- Return input as a new array with the order of the entries reversed */
-PHP_FUNCTION(array_reverse)
-{
- zval **input, /* Input array */
- **z_preserve_keys, /* Flag: whether to preserve keys */
- **entry; /* An entry in the input array */
- char *string_key;
- uint string_key_len;
- ulong num_key;
- zend_bool preserve_keys = 0;
- HashPosition pos;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &z_preserve_keys) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "Argument to array_reverse() should be an array");
- return;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_boolean_ex(z_preserve_keys);
- preserve_keys = Z_BVAL_PP(z_preserve_keys);
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- zend_hash_internal_pointer_end_ex(Z_ARRVAL_PP(input), &pos);
- while(zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
- (*entry)->refcount++;
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key, string_key_len,
- entry, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- if (preserve_keys)
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key,
- entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value),
- entry, sizeof(zval *), NULL);
- break;
- }
-
- zend_hash_move_backwards_ex(Z_ARRVAL_PP(input), &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_pad(array input, int pad_size, mixed pad_value)
- Returns a copy of input array padded with pad_value to size pad_size */
-PHP_FUNCTION(array_pad)
-{
- zval **input; /* Input array */
- zval **pad_size; /* Size to pad to */
- zval **pad_value; /* Padding value obviously */
- zval ***pads; /* Array to pass to splice */
- HashTable *new_hash; /* Return value from splice */
- int input_size; /* Size of the input array */
- int pad_size_abs; /* Absolute value of pad_size */
- int num_pads; /* How many pads do we need */
- int do_pad; /* Whether we should do padding at all */
- int i;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &input, &pad_size, &pad_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure arguments are of the proper type */
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "Argument to %s() should be an array",
- get_active_function_name(TSRMLS_C));
- return;
- }
- convert_to_long_ex(pad_size);
-
- /* Do some initial calculations */
- input_size = zend_hash_num_elements(Z_ARRVAL_PP(input));
- pad_size_abs = abs(Z_LVAL_PP(pad_size));
- do_pad = (input_size >= pad_size_abs) ? 0 : 1;
-
- /* Copy the original array */
- *return_value = **input;
- zval_copy_ctor(return_value);
-
- /* If no need to pad, no need to continue */
- if (!do_pad)
- return;
-
- /* Populate the pads array */
- num_pads = pad_size_abs - input_size;
- pads = (zval ***)emalloc(num_pads * sizeof(zval **));
- for (i = 0; i < num_pads; i++)
- pads[i] = pad_value;
-
- /* Pad on the right or on the left */
- if (Z_LVAL_PP(pad_size) > 0)
- new_hash = php_splice(Z_ARRVAL_P(return_value), input_size, 0, pads, num_pads, NULL);
- else
- new_hash = php_splice(Z_ARRVAL_P(return_value), 0, 0, pads, num_pads, NULL);
-
-
- /* Copy the result hash into return value */
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- Z_ARRVAL_P(return_value) = new_hash;
-
- /* Clean up */
- efree(pads);
-}
-/* }}} */
-
-/* {{{ proto array array_flip(array input)
- Return array with key <-> value flipped */
-PHP_FUNCTION(array_flip)
-{
- zval **array, **entry, *data;
- HashTable *target_hash;
- char *string_key;
- uint str_key_len;
- ulong num_key;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in array_flip() call");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
- while (zend_hash_get_current_data_ex(target_hash, (void **)&entry, &pos) == SUCCESS) {
- MAKE_STD_ZVAL(data);
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &str_key_len, &num_key, 1, &pos)) {
- case HASH_KEY_IS_STRING:
- Z_STRVAL_P(data) = string_key;
- Z_STRLEN_P(data) = str_key_len-1;
- Z_TYPE_P(data) = IS_STRING;
- break;
- case HASH_KEY_IS_LONG:
- Z_TYPE_P(data) = IS_LONG;
- Z_LVAL_P(data) = num_key;
- break;
- }
-
- if (Z_TYPE_PP(entry) == IS_LONG) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), &data, sizeof(data), NULL);
- } else if (Z_TYPE_PP(entry) == IS_STRING) {
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &data, sizeof(data), NULL);
- } else {
- zval_ptr_dtor(&data); /* will free also zval structure */
- php_error(E_WARNING, "Can only flip STRING and INTEGER values!");
- }
-
- zend_hash_move_forward_ex(target_hash, &pos);
- }
-}
-/* }}} */
-
-/* {{{ proto array array_change_key_case(array input [, int case=CASE_LOWER])
- Retuns an array with all string keys lowercased [or uppercased] */
-PHP_FUNCTION(array_change_key_case)
-{
- zval **array, **entry, **to_upper;
- char *string_key;
- char *new_key;
- uint str_key_len;
- ulong num_key;
- ulong change_to_upper=0;
-
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &to_upper) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_long_ex(to_upper);
- change_to_upper = Z_LVAL_PP(to_upper);
- }
-
- if (Z_TYPE_PP(array) != IS_ARRAY) {
- php_error(E_WARNING, "Wrong datatype in array_change_key_case() call");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(array), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(array), (void **)&entry, &pos) == SUCCESS) {
- (*entry)->refcount++;
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(array), &string_key, &str_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, sizeof(entry), NULL);
- break;
- case HASH_KEY_IS_STRING:
- new_key=estrndup(string_key,str_key_len);
- if (change_to_upper)
- php_strtoupper(new_key, str_key_len - 1);
- else
- php_strtolower(new_key, str_key_len - 1);
- zend_hash_update(Z_ARRVAL_P(return_value), new_key, str_key_len, entry, sizeof(entry), NULL);
- efree(new_key);
- break;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(array), &pos);
- }
-}
-/* }}} */
-
-/* {{{ proto array array_unique(array input)
- Removes duplicate values from array */
-PHP_FUNCTION(array_unique)
-{
- zval **array;
- HashTable *target_hash;
- Bucket **arTmp, **cmpdata, **lastkept;
- Bucket *p;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in array_unique() call");
- RETURN_FALSE;
- }
-
- /* copy the argument array */
- *return_value = **array;
- zval_copy_ctor(return_value);
-
- if (target_hash->nNumOfElements <= 1) /* nothing to do */
- return;
-
- /* create and sort array with pointers to the target_hash buckets */
- arTmp = (Bucket **) pemalloc((target_hash->nNumOfElements + 1) * sizeof(Bucket *), target_hash->persistent);
- if (!arTmp)
- RETURN_FALSE;
- for (i = 0, p = target_hash->pListHead; p; i++, p = p->pListNext)
- arTmp[i] = p;
- arTmp[i] = NULL;
- set_compare_func(SORT_STRING TSRMLS_CC);
- zend_qsort((void *) arTmp, i, sizeof(Bucket *), array_data_compare TSRMLS_CC);
-
- /* go through the sorted array and delete duplicates from the copy */
- lastkept = arTmp;
- for (cmpdata = arTmp + 1; *cmpdata; cmpdata++) {
- if (array_data_compare(lastkept, cmpdata TSRMLS_CC)) {
- lastkept = cmpdata;
- } else {
- p = *cmpdata;
- if (p->nKeyLength)
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- else
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- }
- }
- pefree(arTmp, target_hash->persistent);
-}
-/* }}} */
-
-/* {{{ proto array array_intersect(array arr1, array arr2 [, array ...])
- Returns the entries of arr1 that have values which are present in all the other arguments */
-PHP_FUNCTION(array_intersect)
-{
- zval ***args = NULL;
- HashTable *hash;
- int argc, i, c = 0;
- Bucket ***lists, **list, ***ptrs, *p;
-
- /* Get the argument count and check it */
- argc = ARG_COUNT(ht);
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- /* for each argument, create and sort list with pointers to the hash buckets */
- lists = (Bucket ***)emalloc(argc * sizeof(Bucket **));
- ptrs = (Bucket ***)emalloc(argc * sizeof(Bucket **));
- set_compare_func(SORT_STRING TSRMLS_CC);
- for (i=0; i<argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error(E_WARNING, "Argument #%d to array_intersect() is not an array", i+1);
- argc = i; /* only free up to i-1 */
- goto out;
- }
- hash = HASH_OF(*args[i]);
- list = (Bucket **) pemalloc((hash->nNumOfElements + 1) * sizeof(Bucket *), hash->persistent);
- if (!list)
- RETURN_FALSE;
- lists[i] = list;
- ptrs[i] = list;
- for (p = hash->pListHead; p; p = p->pListNext)
- *list++ = p;
- *list = NULL;
- zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket *), array_data_compare TSRMLS_CC);
- }
-
- /* copy the argument array */
- *return_value = **args[0];
- zval_copy_ctor(return_value);
-
- /* go through the lists and look for common values */
- while (*ptrs[0]) {
- for (i=1; i<argc; i++) {
- while (*ptrs[i] && (0 < (c = array_data_compare(ptrs[0], ptrs[i] TSRMLS_CC))))
- ptrs[i]++;
- if (!*ptrs[i]) {
- /* delete any values corresponding to remains of ptrs[0] */
- /* and exit */
- for (;;) {
- p = *ptrs[0]++;
- if (!p)
- goto out;
- if (p->nKeyLength)
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- else
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- }
- }
- if (c)
- break;
- ptrs[i]++;
- }
- if (c) {
- /* Value of ptrs[0] not in all arguments, delete all entries */
- /* with value < value of ptrs[i] */
- for (;;) {
- p = *ptrs[0];
- if (p->nKeyLength)
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- else
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- if (!*++ptrs[0])
- goto out;
- if (0 <= array_data_compare(ptrs[0], ptrs[i] TSRMLS_CC))
- break;
- }
- } else {
- /* ptrs[0] is present in all the arguments */
- /* Skip all entries with same value as ptrs[0] */
- for (;;) {
- if (!*++ptrs[0])
- goto out;
- if (array_data_compare(ptrs[0]-1, ptrs[0] TSRMLS_CC))
- break;
- }
- }
- }
-
-out:
- for (i=0; i<argc; i++) {
- hash = HASH_OF(*args[i]);
- pefree(lists[i], hash->persistent);
- }
- efree(ptrs);
- efree(lists);
- efree(args);
-}
-/* }}} */
-
-/* {{{ proto array array_diff(array arr1, array arr2 [, array ...])
- Returns the entries of arr1 that have values which are not present in any of the others arguments */
-PHP_FUNCTION(array_diff)
-{
- zval ***args = NULL;
- HashTable *hash;
- int argc, i, c;
- Bucket ***lists, **list, ***ptrs, *p;
-
- /* Get the argument count and check it */
- argc = ARG_COUNT(ht);
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- /* for each argument, create and sort list with pointers to the hash buckets */
- lists = (Bucket ***)emalloc(argc * sizeof(Bucket **));
- ptrs = (Bucket ***)emalloc(argc * sizeof(Bucket **));
- set_compare_func(SORT_STRING TSRMLS_CC);
- for (i=0; i<argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error(E_WARNING, "Argument #%d to array_diff() is not an array", i+1);
- argc = i; /* only free up to i-1 */
- goto out;
- }
- hash = HASH_OF(*args[i]);
- list = (Bucket **) pemalloc((hash->nNumOfElements + 1) * sizeof(Bucket *), hash->persistent);
- if (!list)
- RETURN_FALSE;
- lists[i] = list;
- ptrs[i] = list;
- for (p = hash->pListHead; p; p = p->pListNext)
- *list++ = p;
- *list = NULL;
- zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket *), array_data_compare TSRMLS_CC);
- }
-
- /* copy the argument array */
- *return_value = **args[0];
- zval_copy_ctor(return_value);
-
- /* go through the lists and look for values of ptr[0]
- that are not in the others */
- while (*ptrs[0]) {
- c = 1;
- for (i=1; i<argc; i++) {
- while (*ptrs[i] && (0 < (c = array_data_compare(ptrs[0], ptrs[i] TSRMLS_CC))))
- ptrs[i]++;
- if (!c) {
- if (*ptrs[i])
- ptrs[i]++;
- break;
- }
- }
- if (!c) {
- /* ptrs[0] in one of the other arguments */
- /* delete all entries with value as ptrs[0] */
- for (;;) {
- p = *ptrs[0];
- if (p->nKeyLength)
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- else
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- if (!*++ptrs[0])
- goto out;
- if (array_data_compare(ptrs[0]-1, ptrs[0] TSRMLS_CC))
- break;
- }
- } else {
- /* ptrs[0] in none of the other arguments */
- /* skip all entries with value as ptrs[0] */
- for (;;) {
- if (!*++ptrs[0])
- goto out;
- if (array_data_compare(ptrs[0]-1, ptrs[0] TSRMLS_CC))
- break;
- }
- }
- }
-out:
- for (i=0; i<argc; i++) {
- hash = HASH_OF(*args[i]);
- pefree(lists[i], hash->persistent);
- }
- efree(ptrs);
- efree(lists);
- efree(args);
-}
-/* }}} */
-
-#define MULTISORT_ORDER 0
-#define MULTISORT_TYPE 1
-#define MULTISORT_LAST 2
-
-int multisort_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket** ab = *(Bucket ***)a;
- Bucket** bb = *(Bucket ***)b;
- int r;
- int result = 0;
- zval temp;
-
- r = 0;
- do {
- set_compare_func(ARRAYG(multisort_flags)[MULTISORT_TYPE][r] TSRMLS_CC);
-
- ARRAYG(compare_func)(&temp, *((zval **)ab[r]->pData), *((zval **)bb[r]->pData) TSRMLS_CC);
- result = ARRAYG(multisort_flags)[MULTISORT_ORDER][r] * Z_LVAL(temp);
- if (result != 0)
- return result;
- r++;
- } while (ab[r] != NULL);
- return result;
-}
-
-#define MULTISORT_ABORT \
- for (k = 0; k < MULTISORT_LAST; k++) \
- efree(ARRAYG(multisort_flags)[k]); \
- efree(arrays); \
- efree(args); \
- RETURN_FALSE;
-
-/* {{{ proto bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
- Sort multiple arrays at once similar to how ORDER BY clause works in SQL */
-PHP_FUNCTION(array_multisort)
-{
- zval*** args;
- zval*** arrays;
- Bucket*** indirect;
- Bucket* p;
- HashTable* hash;
- int argc;
- int array_size;
- int num_arrays = 0;
- int parse_state[MULTISORT_LAST]; /* 0 - flag not allowed
- 1 - flag allowed */
- int sort_order = SORT_ASC;
- int sort_type = SORT_REGULAR;
- int i, k;
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate space for storing pointers to input arrays and sort flags. */
- arrays = (zval ***)ecalloc(argc, sizeof(zval **));
- for (i = 0; i < MULTISORT_LAST; i++) {
- parse_state[i] = 0;
- ARRAYG(multisort_flags)[i] = (int *)ecalloc(argc, sizeof(int));
- }
-
- /* Here we go through the input arguments and parse them. Each one can
- be either an array or a sort flag which follows an array. If not
- specified, the sort flags defaults to SORT_ASC and SORT_REGULAR
- accordingly. There can't be two sort flags of the same type after an
- array, and the very first argument has to be an array.
- */
- for (i = 0; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) == IS_ARRAY) {
- /* We see the next array, so we update the sort flags of
- the previous array and reset the sort flags. */
- if (i > 0) {
- ARRAYG(multisort_flags)[MULTISORT_ORDER][num_arrays-1] = sort_order;
- ARRAYG(multisort_flags)[MULTISORT_TYPE][num_arrays-1] = sort_type;
- sort_order = SORT_ASC;
- sort_type = SORT_REGULAR;
- }
- arrays[num_arrays++] = args[i];
-
- /* Next one may be an array or a list of sort flags. */
- for (k = 0; k < MULTISORT_LAST; k++)
- parse_state[k] = 1;
- } else if (Z_TYPE_PP(args[i]) == IS_LONG) {
- switch (Z_LVAL_PP(args[i])) {
- case SORT_ASC:
- case SORT_DESC:
- /* flag allowed here */
- if (parse_state[MULTISORT_ORDER] == 1) {
- /* Save the flag and make sure then next arg is not the current flag. */
- sort_order = Z_LVAL_PP(args[i]) == SORT_DESC ? -1 : 1;
- parse_state[MULTISORT_ORDER] = 0;
- } else {
- php_error(E_WARNING, "Argument %i to %s() is expected to be an array or sorting flag that has not already been specified", i+1, get_active_function_name(TSRMLS_C));
- MULTISORT_ABORT;
- }
- break;
-
- case SORT_REGULAR:
- case SORT_NUMERIC:
- case SORT_STRING:
- /* flag allowed here */
- if (parse_state[MULTISORT_TYPE] == 1) {
- /* Save the flag and make sure then next arg is not the current flag. */
- sort_type = Z_LVAL_PP(args[i]);
- parse_state[MULTISORT_TYPE] = 0;
- } else {
- php_error(E_WARNING, "Argument %i to %s() is expected to be an array or sorting flag that has not already been specified", i+1, get_active_function_name(TSRMLS_C));
- MULTISORT_ABORT;
- }
- break;
-
- default:
- php_error(E_WARNING, "Argument %i to %s() is an unknown sort flag", i+1,
- get_active_function_name(TSRMLS_C));
- MULTISORT_ABORT;
- break;
-
- }
- } else {
- php_error(E_WARNING, "Argument %i to %s() is expected to be an array or a sort flag", i+1, get_active_function_name(TSRMLS_C));
- MULTISORT_ABORT;
- }
- }
- /* Take care of the last array sort flags. */
- ARRAYG(multisort_flags)[MULTISORT_ORDER][num_arrays-1] = sort_order;
- ARRAYG(multisort_flags)[MULTISORT_TYPE][num_arrays-1] = sort_type;
-
- /* Make sure the arrays are of the same size. */
- array_size = zend_hash_num_elements(Z_ARRVAL_PP(arrays[0]));
- for (i = 0; i < num_arrays; i++) {
- if (zend_hash_num_elements(Z_ARRVAL_PP(arrays[i])) != array_size) {
- php_error(E_WARNING, "Array sizes are inconsistent");
- MULTISORT_ABORT;
- }
- }
-
- /* If all arrays are empty or have only one entry,
- we don't need to do anything. */
- if (array_size <= 1) {
- for (k = 0; k < MULTISORT_LAST; k++)
- efree(ARRAYG(multisort_flags)[k]);
- efree(arrays);
- efree(args);
- RETURN_TRUE;
- }
-
- /* Create the indirection array. This array is of size MxN, where
- M is the number of entries in each input array and N is the number
- of the input arrays + 1. The last column is NULL to indicate the end
- of the row.
- */
- indirect = (Bucket ***)emalloc(array_size * sizeof(Bucket **));
- for (i = 0; i < array_size; i++)
- indirect[i] = (Bucket **)emalloc((num_arrays+1) * sizeof(Bucket *));
-
- for (i = 0; i < num_arrays; i++) {
- k = 0;
- for (p = Z_ARRVAL_PP(arrays[i])->pListHead; p; p = p->pListNext, k++) {
- indirect[k][i] = p;
- }
- }
- for (k = 0; k < array_size; k++)
- indirect[k][num_arrays] = NULL;
-
- /* Do the actual sort magic - bada-bim, bada-boom. */
- zend_qsort(indirect, array_size, sizeof(Bucket **), multisort_compare TSRMLS_CC);
-
- /* Restructure the arrays based on sorted indirect - this is mostly
- taken from zend_hash_sort() function. */
- HANDLE_BLOCK_INTERRUPTIONS();
- for (i = 0; i < num_arrays; i++) {
- hash = Z_ARRVAL_PP(arrays[i]);
- hash->pListHead = indirect[0][i];;
- hash->pListTail = NULL;
- hash->pInternalPointer = hash->pListHead;
-
- for (k = 0; k < array_size; k++) {
- if (hash->pListTail) {
- hash->pListTail->pListNext = indirect[k][i];
- }
- indirect[k][i]->pListLast = hash->pListTail;
- indirect[k][i]->pListNext = NULL;
- hash->pListTail = indirect[k][i];
- }
-
- p = hash->pListHead;
- k = 0;
- while (p != NULL) {
- if (p->nKeyLength == 0)
- p->h = k++;
- p = p->pListNext;
- }
- hash->nNextFreeElement = array_size;
- zend_hash_rehash(hash);
- }
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- /* Clean up. */
- for (i = 0; i < array_size; i++)
- efree(indirect[i]);
- efree(indirect);
- for (k = 0; k < MULTISORT_LAST; k++)
- efree(ARRAYG(multisort_flags)[k]);
- efree(arrays);
- efree(args);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto mixed array_rand(array input [, int num_req])
- Return key/keys for random entry/entries in the array */
-PHP_FUNCTION(array_rand)
-{
- zval **input, **num_req;
- long randval;
- int num_req_val, num_avail, key_type;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &num_req) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- zend_error(E_WARNING, "Argument to %s() has to be an array",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- num_avail = zend_hash_num_elements(Z_ARRVAL_PP(input));
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_long_ex(num_req);
- num_req_val = Z_LVAL_PP(num_req);
- if (num_req_val <= 0 || num_req_val > num_avail) {
- zend_error(E_WARNING, "Second argument to %s() has to be between 1 and the number of elements in the array", get_active_function_name(TSRMLS_C));
- return;
- }
- } else
- num_req_val = 1;
-
- /* Make the return value an array only if we need to pass back more than one
- result. */
- if (num_req_val > 1)
- array_init(return_value);
-
- /* We can't use zend_hash_index_find() because the array may have string keys or gaps. */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while (num_req_val && (key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) != HASH_KEY_NON_EXISTANT) {
-
-#ifdef HAVE_RANDOM
- randval = random();
-#else
-#ifdef HAVE_LRAND48
- randval = lrand48();
-#else
- randval = rand();
-#endif
-#endif
-
- if ((double)(randval/(PHP_RAND_MAX+1.0)) < (double)num_req_val/(double)num_avail) {
- /* If we are returning a single result, just do it. */
- if (Z_TYPE_P(return_value) != IS_ARRAY) {
- if (key_type == HASH_KEY_IS_STRING) {
- RETURN_STRINGL(string_key, string_key_len-1, 1);
- } else {
- RETURN_LONG(num_key);
- }
- } else {
- /* Append the result to the return value. */
- if (key_type == HASH_KEY_IS_STRING)
- add_next_index_stringl(return_value, string_key, string_key_len-1, 1);
- else
- add_next_index_long(return_value, num_key);
- }
- num_req_val--;
- }
- num_avail--;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-
- if (num_req_val == num_avail) {
- if (zend_hash_sort(Z_ARRVAL_P(return_value), (sort_func_t)php_mergesort, array_data_shuffle, 1 TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto mixed array_sum(array input)
- Returns the sum of the array entries */
-
-PHP_FUNCTION(array_sum)
-{
- zval **input,
- **entry,
- entry_n;
- int argc = ZEND_NUM_ARGS();
- HashPosition pos;
- double dval;
-
- if (argc != 1 || zend_get_parameters_ex(argc, &input) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "The argument to %s() should be an array",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- ZVAL_LONG(return_value, 0);
-
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos)) {
-
- if (Z_TYPE_PP(entry) == IS_ARRAY || Z_TYPE_PP(entry) == IS_OBJECT)
- continue;
-
- entry_n = **entry;
- zval_copy_ctor(&entry_n);
- convert_scalar_to_number(&entry_n TSRMLS_CC);
-
- if (Z_TYPE(entry_n) == IS_LONG && Z_TYPE_P(return_value) == IS_LONG) {
- dval = (double)Z_LVAL_P(return_value) + (double)Z_LVAL(entry_n);
- if ( (double)LONG_MIN <= dval && dval <= (double)LONG_MAX ) {
- Z_LVAL_P(return_value) += Z_LVAL(entry_n);
- continue;
- }
- }
- convert_to_double(return_value);
- convert_to_double(&entry_n);
- Z_DVAL_P(return_value) += Z_DVAL(entry_n);
- }
-}
-
-/* }}} */
-
-/* {{{ proto mixed array_reduce(array input, mixed callback [, int initial])
- Iteratively reduce the array to a single value via the callback. */
-PHP_FUNCTION(array_reduce)
-{
- zval **input, **callback, **initial;
- zval **args[2];
- zval **operand;
- zval *result = NULL;
- zval *retval;
- char *callback_name;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &callback, &initial) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "%s() expects argument 1 to be an array",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- if (!zend_is_callable(*callback, 0, &callback_name)) {
- php_error(E_WARNING, "%s() expects argument 2, '%s', to be a valid callback",
- get_active_function_name(TSRMLS_C), callback_name);
- efree(callback_name);
- return;
- }
- efree(callback_name);
-
- if (ZEND_NUM_ARGS() > 2) {
- result = *initial;
- zval_add_ref(&result);
- }
-
- if (zend_hash_num_elements(Z_ARRVAL_PP(input)) == 0) {
- if (result) {
- *return_value = *result;
- zval_copy_ctor(return_value);
- }
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&operand, &pos) == SUCCESS) {
- if (result) {
- args[0] = &result;
- args[1] = operand;
- if (call_user_function_ex(EG(function_table), NULL, *callback, &retval, 2, args, 0, NULL TSRMLS_CC) == SUCCESS && retval) {
- zval_ptr_dtor(&result);
- result = retval;
- } else {
- php_error(E_WARNING, "%s() had an error invoking the reduction callback", get_active_function_name(TSRMLS_C));
- return;
- }
- } else {
- result = *operand;
- zval_add_ref(&result);
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-
- *return_value = *result;
- zval_copy_ctor(return_value);
- zval_ptr_dtor(&result);
-}
-/* }}} */
-
-
-/* {{{ proto array array_filter(array input [, mixed callback])
- Filters elements from the array via the callback. */
-PHP_FUNCTION(array_filter)
-{
- zval **input, **callback = NULL;
- zval **operand;
- zval **args[1];
- zval *retval = NULL;
- char *callback_name;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &callback) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error(E_WARNING, "%s() expects argument 1 to be an array",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- if (!zend_is_callable(*callback, 0, &callback_name)) {
- php_error(E_WARNING, "%s() expects argument 2, '%s', to be a valid callback",
- get_active_function_name(TSRMLS_C), callback_name);
- efree(callback_name);
- return;
- }
- efree(callback_name);
- }
-
- array_init(return_value);
- if (zend_hash_num_elements(Z_ARRVAL_PP(input)) == 0)
- return;
-
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&operand, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos)) {
-
- if (callback) {
- args[0] = operand;
- if (call_user_function_ex(EG(function_table), NULL, *callback, &retval, 1, args, 0, NULL TSRMLS_CC) == SUCCESS && retval) {
- if (!zend_is_true(retval)) {
- zval_ptr_dtor(&retval);
- continue;
- } else
- zval_ptr_dtor(&retval);
- } else {
- php_error(E_WARNING, "%s() had an error invoking the filter callback", get_active_function_name(TSRMLS_C));
- return;
- }
- } else if (!zend_is_true(*operand))
- continue;
-
- zval_add_ref(operand);
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key,
- string_key_len, operand, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key,
- operand, sizeof(zval *), NULL);
- break;
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_map(mixed callback, array input1 [, array input2 ,...])
- Applies the callback to the elements in given arrays. */
-PHP_FUNCTION(array_map)
-{
- zval ***args = NULL;
- zval ***params;
- zval *callback;
- zval *result, *null;
- HashPosition *array_pos;
- char *callback_name;
- int i, k, maxlen = 0;
- int *array_len;
-
- if (ZEND_NUM_ARGS() < 2) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***)emalloc(ZEND_NUM_ARGS() * sizeof(zval **));
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- callback = *args[0];
- if (Z_TYPE_P(callback) != IS_NULL) {
- if (!zend_is_callable(callback, 0, &callback_name)) {
- php_error(E_WARNING, "%s() expects argument 1, '%s', to be either NULL or a valid callback", get_active_function_name(TSRMLS_C), callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- }
-
- /* Allocate array sizes and iterators. */
- array_len = (int*)emalloc((ZEND_NUM_ARGS()-1) * sizeof(int));
- array_pos = (HashPosition*)emalloc((ZEND_NUM_ARGS()-1) * sizeof(HashPosition));
-
- /* Check that arrays are indeed arrays and calculate maximum size. */
- for (i = 0; i < ZEND_NUM_ARGS()-1; i++) {
- if (Z_TYPE_PP(args[i+1]) != IS_ARRAY) {
- php_error(E_WARNING, "%s() expects argument %d to be an array",
- get_active_function_name(TSRMLS_C), i + 2);
- efree(array_len);
- efree(args);
- return;
- }
- array_len[i] = zend_hash_num_elements(Z_ARRVAL_PP(args[i+1]));
- if (array_len[i] > maxlen)
- maxlen = array_len[i];
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(args[i+1]), &array_pos[i]);
- }
-
- /* Short-circuit: if no callback and only one array, just return it. */
- if (Z_TYPE_P(callback) == IS_NULL && ZEND_NUM_ARGS() == 2) {
- *return_value = **args[1];
- zval_copy_ctor(return_value);
- efree(array_len);
- efree(array_pos);
- efree(args);
- return;
- }
-
- array_init(return_value);
- params = (zval ***)emalloc((ZEND_NUM_ARGS()-1) * sizeof(zval **));
- MAKE_STD_ZVAL(null);
- ZVAL_NULL(null);
-
- /* We iterate through all the arrays at once. */
- for (k = 0; k < maxlen; k++) {
- uint str_key_len;
- ulong num_key;
- char *str_key;
- int key_type;
-
- /*
- * If no callback, the result will be an array, consisting of current
- * entries from all arrays.
- */
- if (Z_TYPE_P(callback) == IS_NULL) {
- MAKE_STD_ZVAL(result);
- array_init(result);
- }
-
- for (i = 0; i < ZEND_NUM_ARGS()-1; i++) {
- /*
- * If this array still hash elements, add the current one to the
- * parameter list, otherwise use null value.
- */
- if (k < array_len[i]) {
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(args[i+1]), (void **)&params[i], &array_pos[i]);
-
- /*
- * It is safe to store only last value of key type, because
- * this loop will run just once if there is only 1 array.
- */
- if (ZEND_NUM_ARGS() == 2) {
- key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(args[1]), &str_key, &str_key_len, &num_key, 0, &array_pos[i]);
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(args[i+1]), &array_pos[i]);
- } else {
- if (Z_TYPE_P(callback) == IS_NULL)
- zval_add_ref(&null);
- params[i] = &null;
- }
-
- if (Z_TYPE_P(callback) == IS_NULL)
- add_next_index_zval(result, *params[i]);
- }
-
- if (Z_TYPE_P(callback) != IS_NULL) {
- if (!call_user_function_ex(EG(function_table), NULL, callback, &result, ZEND_NUM_ARGS()-1, params, 0, NULL TSRMLS_CC) == SUCCESS && result) {
- php_error(E_WARNING, "%s() had an error invoking the map callback", get_active_function_name(TSRMLS_C));
- efree(array_len);
- efree(args);
- efree(array_pos);
- zval_dtor(return_value);
- RETURN_NULL();
- }
- }
-
- if (ZEND_NUM_ARGS() > 2) {
- add_next_index_zval(return_value, result);
- } else {
- if (key_type == HASH_KEY_IS_STRING)
- add_assoc_zval_ex(return_value, str_key, str_key_len, result);
- else
- add_index_zval(return_value, num_key, result);
- }
- }
-
- zval_ptr_dtor(&null);
- efree(params);
- efree(array_len);
- efree(array_pos);
- efree(args);
-}
-/* }}} */
-
-
-/* {{{ proto bool array_key_exists(mixed key, array search)
- Checks if the given key or index exists in the array */
-PHP_FUNCTION(array_key_exists)
-{
- zval **key, /* key to check for */
- **array; /* array to check in */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &key, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(array) != IS_ARRAY && Z_TYPE_PP(array) != IS_OBJECT) {
- php_error(E_WARNING, "Wrong datatype for second argument in call to %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- switch (Z_TYPE_PP(key)) {
- case IS_STRING:
- if (zend_hash_exists(HASH_OF(*array), Z_STRVAL_PP(key), Z_STRLEN_PP(key)+1)) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-
- case IS_LONG:
- if (zend_hash_index_exists(HASH_OF(*array), Z_LVAL_PP(key))) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-
- default:
- php_error(E_WARNING, "Wrong datatype for first argument in call to %s", get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto array array_chunk(array input, int size [, bool preserve_keys])
- Split array into chunks */
-PHP_FUNCTION(array_chunk)
-{
- int argc = ZEND_NUM_ARGS(), key_type;
- long size, current = 0;
- char *str_key;
- uint str_key_len;
- ulong num_key;
- zend_bool preserve_keys = 0;
- zval *input = NULL;
- zval *chunk = NULL;
- zval **entry;
- HashPosition pos;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "al|b", &input, &size,
- &preserve_keys) == FAILURE)
- return;
-
- /* Do bounds checking for size parameter. */
- if (size < 1) {
- php_error(E_WARNING, "%s() expects the size parameter to be > 0",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(input), (void**)&entry, &pos) == SUCCESS) {
- /* If new chunk, create and initialize it. */
- if (!chunk) {
- MAKE_STD_ZVAL(chunk);
- array_init(chunk);
- }
-
- /* Add entry to the chunk, preserving keys if necessary. */
- zval_add_ref(entry);
-
- if (preserve_keys) {
- key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(input), &str_key,
- &str_key_len, &num_key, 0, &pos);
- if (key_type == HASH_KEY_IS_STRING) {
- add_assoc_zval_ex(chunk, str_key, str_key_len, *entry);
- } else {
- add_index_zval(chunk, num_key, *entry);
- }
- } else {
- add_next_index_zval(chunk, *entry);
- }
-
- /*
- * If reached the chunk size, add it to the result array, and reset the
- * pointer.
- */
- if (!(++current % size)) {
- add_next_index_zval(return_value, chunk);
- chunk = NULL;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(input), &pos);
- }
-
- /* Add the final chunk if there is one. */
- if (chunk) {
- add_next_index_zval(return_value, chunk);
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/assert.c b/ext/standard/assert.c
deleted file mode 100644
index be6db3731c..0000000000
--- a/ext/standard/assert.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes/startup/misc */
-
-#include "php.h"
-#include "php_assert.h"
-#include "php_ini.h"
-
-typedef struct {
- long active;
- long bail;
- long warning;
- long quiet_eval;
- zval *callback;
-} php_assert_globals;
-
-#ifdef ZTS
-#define ASSERTG(v) TSRMG(assert_globals_id, php_assert_globals *, v)
-int assert_globals_id;
-#else
-#define ASSERTG(v) (assert_globals.v)
-php_assert_globals assert_globals;
-#endif
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-enum {
- ASSERT_ACTIVE=1,
- ASSERT_CALLBACK,
- ASSERT_BAIL,
- ASSERT_WARNING,
- ASSERT_QUIET_EVAL
-};
-
-static PHP_INI_MH(OnChangeCallback)
-{
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- }
-
- MAKE_STD_ZVAL(ASSERTG(callback));
-
- if (new_value) {
- ZVAL_STRINGL(ASSERTG(callback), new_value, new_value_length, 1);
- } else {
- ZVAL_EMPTY_STRING(ASSERTG(callback));
- }
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("assert.active", "1", PHP_INI_ALL, OnUpdateInt, active, php_assert_globals, assert_globals)
- STD_PHP_INI_ENTRY("assert.bail", "0", PHP_INI_ALL, OnUpdateInt, bail, php_assert_globals, assert_globals)
- STD_PHP_INI_ENTRY("assert.warning", "1", PHP_INI_ALL, OnUpdateInt, warning, php_assert_globals, assert_globals)
- PHP_INI_ENTRY ("assert.callback", NULL, PHP_INI_ALL, OnChangeCallback)
- STD_PHP_INI_ENTRY("assert.quiet_eval", "0", PHP_INI_ALL, OnUpdateInt, quiet_eval, php_assert_globals, assert_globals)
-PHP_INI_END()
-
-static void php_assert_init_globals(php_assert_globals *assert_globals_p TSRMLS_DC)
-{
- ASSERTG(callback) = NULL;
-}
-
-PHP_MINIT_FUNCTION(assert)
-{
-#ifdef ZTS
- ts_allocate_id(&assert_globals_id, sizeof(php_assert_globals), (ts_allocate_ctor) php_assert_init_globals, NULL);
-#else
- php_assert_init_globals(&assert_globals TSRMLS_CC);
-#endif
-
- REGISTER_INI_ENTRIES();
-
- REGISTER_LONG_CONSTANT("ASSERT_ACTIVE", ASSERT_ACTIVE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", ASSERT_CALLBACK, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_BAIL", ASSERT_BAIL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_WARNING", ASSERT_WARNING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_QUIET_EVAL", ASSERT_QUIET_EVAL, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(assert)
-{
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- }
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(assert)
-{
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- ASSERTG(callback) = NULL;
- }
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(assert)
-{
- DISPLAY_INI_ENTRIES();
-}
-
-/* }}} */
-/* {{{ internal functions */
-/* }}} */
-/* {{{ proto int assert(string|bool assertion)
- Checks if assertion is false */
-
-PHP_FUNCTION(assert)
-{
- zval **assertion;
- int val;
- char *myeval = NULL;
- char *compiled_string_description;
-
- if (! ASSERTG(active)) {
- RETURN_TRUE;
- }
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &assertion) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(assertion) == IS_STRING) {
- zval retval;
- int old_error_reporting = 0; /* shut up gcc! */
-
- myeval = Z_STRVAL_PP(assertion);
-
- if (ASSERTG(quiet_eval)) {
- old_error_reporting = EG(error_reporting);
- EG(error_reporting) = 0;
- }
-
- compiled_string_description = zend_make_compiled_string_description("assert code" TSRMLS_CC);
- if (zend_eval_string(myeval, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
- efree(compiled_string_description);
- zend_error(E_ERROR, "Failure evaluating code:\n%s\n", myeval);
- /* zend_error() does not return in this case. */
- }
- efree(compiled_string_description);
-
- if (ASSERTG(quiet_eval)) {
- EG(error_reporting) = old_error_reporting;
- }
-
- convert_to_boolean(&retval);
- val = Z_LVAL(retval);
- } else {
- convert_to_boolean_ex(assertion);
- val = Z_LVAL_PP(assertion);
- }
-
- if (val) {
- RETURN_TRUE;
- }
-
- if (ASSERTG(callback)) {
- zval *args[3];
- zval *retval;
- int i;
- uint lineno = zend_get_executed_lineno(TSRMLS_C);
- char *filename = zend_get_executed_filename(TSRMLS_C);
-
- MAKE_STD_ZVAL(args[0]);
- MAKE_STD_ZVAL(args[1]);
- MAKE_STD_ZVAL(args[2]);
-
- ZVAL_STRING(args[0], SAFE_STRING(filename), 1);
- ZVAL_LONG (args[1], lineno);
- ZVAL_STRING(args[2], SAFE_STRING(myeval), 1);
-
- MAKE_STD_ZVAL(retval);
- ZVAL_FALSE(retval);
-
- /* XXX do we want to check for error here? */
- call_user_function(CG(function_table), NULL, ASSERTG(callback), retval, 3, args TSRMLS_CC);
-
- for (i = 0; i <= 2; i++) {
- zval_ptr_dtor(&(args[i]));
- }
- zval_ptr_dtor(&retval);
- }
-
- if (ASSERTG(warning)) {
- if (myeval) {
- php_error(E_WARNING, "Assertion \"%s\" failed", myeval);
- } else {
- php_error(E_WARNING, "Assertion failed");
- }
- }
-
- if (ASSERTG(bail)) {
- zend_bailout();
- }
-}
-
-/* }}} */
-/* {{{ proto mixed assert_options(int what [, mixed value])
- Set/get the various assert flags */
-
-PHP_FUNCTION(assert_options)
-{
- pval **what, **value;
- int oldint;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &what, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(what);
-
- switch (Z_LVAL_PP(what)) {
- case ASSERT_ACTIVE:
- oldint = ASSERTG(active);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(active) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_BAIL:
- oldint = ASSERTG(bail);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(bail) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_QUIET_EVAL:
- oldint = ASSERTG(quiet_eval);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(quiet_eval) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_WARNING:
- oldint = ASSERTG(warning);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(warning) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_CALLBACK:
- if (ac == 2) {
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- }
- ASSERTG(callback) = *value;
- zval_add_ref(value);
- }
- RETURN_TRUE;
- break;
-
- default:
- php_error(E_WARNING, "Unknown value %d.", Z_LVAL_PP(what));
- break;
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/base64.c b/ext/standard/base64.c
deleted file mode 100644
index de4adcae58..0000000000
--- a/ext/standard/base64.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <string.h>
-
-#include "php.h"
-#include "base64.h"
-
-/* {{{ */
-static const char base64_table[] =
- { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0'
- };
-
-static const char base64_pad = '=';
-
-static const short base64_reverse_table[256] = {
- -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, 62, -1, -1, -1, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -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, -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, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-};
-/* }}} */
-
-/* {{{ */
-unsigned char *php_base64_encode(const unsigned char *str, int length, int *ret_length) {
- const unsigned char *current = str;
- int i = 0;
- unsigned char *result = (unsigned char *)emalloc(((length + 3 - length % 3) * 4 / 3 + 1) * sizeof(char));
-
- while (length > 2) { /* keep going until we have less than 24 bits */
- result[i++] = base64_table[current[0] >> 2];
- result[i++] = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
- result[i++] = base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)];
- result[i++] = base64_table[current[2] & 0x3f];
-
- current += 3;
- length -= 3; /* we just handle 3 octets of data */
- }
-
- /* now deal with the tail end of things */
- if (length != 0) {
- result[i++] = base64_table[current[0] >> 2];
- if (length > 1) {
- result[i++] = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
- result[i++] = base64_table[(current[1] & 0x0f) << 2];
- result[i++] = base64_pad;
- }
- else {
- result[i++] = base64_table[(current[0] & 0x03) << 4];
- result[i++] = base64_pad;
- result[i++] = base64_pad;
- }
- }
- if(ret_length) {
- *ret_length = i;
- }
- result[i] = '\0';
- return result;
-}
-/* }}} */
-
-/* {{{ */
-/* generate reverse table (do not set index 0 to 64)
-static unsigned short base64_reverse_table[256];
-#define rt base64_reverse_table
-void php_base64_init() {
- char *s = emalloc(10240), *sp;
- char *chp;
- short idx;
-
- for(ch = 0; ch < 256; ch++) {
- chp = strchr(base64_table, ch);
- if(ch && chp) {
- idx = chp - base64_table;
- if (idx >= 64) idx = -1;
- rt[ch] = idx;
- } else {
- rt[ch] = -1;
- }
- }
- sp = s;
- sprintf(sp, "static const short base64_reverse_table[256] = {\n");
- for(ch =0; ch < 256;) {
- sp = s+strlen(s);
- sprintf(sp, "\t% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,\n", rt[ch+0], rt[ch+1], rt[ch+2], rt[ch+3], rt[ch+4], rt[ch+5], rt[ch+6], rt[ch+7], rt[ch+8], rt[ch+9], rt[ch+10], rt[ch+11], rt[ch+12], rt[ch+13], rt[ch+14], rt[ch+15]);
- ch += 16;
- }
- sprintf(sp, "};");
- php_error(E_NOTICE,"reverse_table:\n%s", s);
- efree(s);
-}
-*/
-/* }}} */
-
-/* {{{ */
-/* as above, but backwards. :) */
-unsigned char *php_base64_decode(const unsigned char *str, int length, int *ret_length) {
- const unsigned char *current = str;
- int ch, i = 0, j = 0, k;
- /* this sucks for threaded environments */
- unsigned char *result;
-
- result = (unsigned char *)emalloc(length + 1);
- if (result == NULL) {
- return NULL;
- }
-
- /* run through the whole string, converting as we go */
- while ((ch = *current++) != '\0') {
- if (ch == base64_pad) break;
-
- /* When Base64 gets POSTed, all pluses are interpreted as spaces.
- This line changes them back. It's not exactly the Base64 spec,
- but it is completely compatible with it (the spec says that
- spaces are invalid). This will also save many people considerable
- headache. - Turadg Aleahmad <turadg@wise.berkeley.edu>
- */
-
- if (ch == ' ') ch = '+';
-
- ch = base64_reverse_table[ch];
- if (ch < 0) continue;
-
- switch(i % 4) {
- case 0:
- result[j] = ch << 2;
- break;
- case 1:
- result[j++] |= ch >> 4;
- result[j] = (ch & 0x0f) << 4;
- break;
- case 2:
- result[j++] |= ch >>2;
- result[j] = (ch & 0x03) << 6;
- break;
- case 3:
- result[j++] |= ch;
- break;
- }
- i++;
- }
-
- k = j;
- /* mop things up if we ended on a boundary */
- if (ch == base64_pad) {
- switch(i % 4) {
- case 0:
- case 1:
- efree(result);
- return NULL;
- case 2:
- k++;
- case 3:
- result[k++] = 0;
- }
- }
- if(ret_length) {
- *ret_length = j;
- }
- result[j] = '\0';
- return result;
-}
-/* }}} */
-
-/* {{{ proto string base64_encode(string str)
- Encodes string using MIME base64 algorithm */
-PHP_FUNCTION(base64_encode)
-{
- char *str;
- unsigned char *result;
- int str_len, ret_length;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- result = php_base64_encode(str, str_len, &ret_length);
- if (result != NULL) {
- RETVAL_STRINGL(result, ret_length, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto string base64_decode(string str)
- Decodes string using MIME base64 algorithm */
-PHP_FUNCTION(base64_decode)
-{
- char *str;
- unsigned char *result;
- int str_len, ret_length;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- result = php_base64_decode(str, str_len, &ret_length);
- if (result != NULL) {
- RETVAL_STRINGL(result, ret_length, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vimo<600: sw=4 ts=4
- */
diff --git a/ext/standard/base64.h b/ext/standard/base64.h
deleted file mode 100644
index 4f44c79691..0000000000
--- a/ext/standard/base64.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef BASE64_H
-#define BASE64_H
-
-PHP_FUNCTION(base64_decode);
-PHP_FUNCTION(base64_encode);
-
-extern unsigned char *php_base64_encode(const unsigned char *, int, int *);
-extern unsigned char *php_base64_decode(const unsigned char *, int, int *);
-
-#endif /* BASE64_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
deleted file mode 100644
index be97f01373..0000000000
--- a/ext/standard/basic_functions.c
+++ /dev/null
@@ -1,2591 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_streams.h"
-#include "php_main.h"
-#include "php_globals.h"
-#include "php_ini.h"
-#include "internal_functions_registry.h"
-#include "php_standard.h"
-#include "php_math.h"
-#include "php_incomplete_class.h"
-#include "ext/standard/info.h"
-#include "ext/session/php_session.h"
-#include "zend_operators.h"
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include <stdio.h>
-#include <netdb.h>
-
-#if HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#if HAVE_SYS_MMAN_H
-# include <sys/mman.h>
-#endif
-
-#include "safe_mode.h"
-
-#ifdef PHP_WIN32
-# include "win32/unistd.h"
-#endif
-
-#include "zend_globals.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_ticks.h"
-
-
-#ifdef ZTS
-int basic_globals_id;
-#else
-php_basic_globals basic_globals;
-#endif
-
-
-#include "php_fopen_wrappers.h"
-
-static unsigned char second_and_third_args_force_ref[] = { 3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
-static unsigned char second_args_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
-static unsigned char third_and_fourth_args_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
-static unsigned char third_and_rest_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE_REST };
-
-typedef struct _php_shutdown_function_entry {
- zval **arguments;
- int arg_count;
-} php_shutdown_function_entry;
-
-typedef struct _user_tick_function_entry {
- zval **arguments;
- int arg_count;
-} user_tick_function_entry;
-
-/* some prototypes for local functions */
-static void user_shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry);
-static void user_tick_function_dtor(user_tick_function_entry *tick_function_entry);
-
-/* Demo code. Enable only if you need this. */
-#define ENABLE_TEST_CLASS 0
-
-#if ENABLE_TEST_CLASS
-void test_class_startup(void);
-pval test_class_get_property(zend_property_reference *property_reference);
-int test_class_set_property(zend_property_reference *property_reference, pval *value);
-void test_class_call_function(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
-
-pval test_class_get_property(zend_property_reference *property_reference)
-{
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Reading a property from a OverloadedTestClass object:\n");
-
- for (element = property_reference->elements_list->head; element; element = element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
-
- switch (Z_TYPE_P(overloaded_property)) {
-
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
-
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
-
- switch (Z_TYPE(overloaded_property->element)) {
-
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
-
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-
-int test_class_set_property(zend_property_reference *property_reference, pval * value)
-{
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a OverloadedTestClass object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element = property_reference->elements_list->head; element; element = element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
-
- switch (Z_TYPE_P(overloaded_property)) {
-
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
-
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
-
- switch (Z_TYPE(overloaded_property->element)) {
-
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
-
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
- return 0;
-}
-
-void test_class_call_function(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Invoking a method on OverloadedTestClass object:\n");
-
- for (element = property_reference->elements_list->head; element; element = element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
-
- switch (Z_TYPE_P(overloaded_property)) {
-
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
-
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
-
- case OE_IS_METHOD:
- printf("Overloaded method: ");
- }
-
- switch (Z_TYPE(overloaded_property->element)) {
-
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
-
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- printf("%d arguments\n", ZEND_NUM_ARGS());
- RETVAL_STRING("testing", 1);
-}
-
-void test_class_startup(void)
-{
- zend_class_entry test_class_entry;
- TSRMLS_FETCH();
-
- INIT_OVERLOADED_CLASS_ENTRY(test_class_entry,
- "OverloadedTestClass",
- NULL, test_class_call_function,
- test_class_get_property,
- test_class_set_property);
-
- zend_register_internal_class(&test_class_entry TSRMLS_CC);
-}
-#endif
-
-
-function_entry basic_functions[] = {
- PHP_FE(constant, NULL)
- PHP_FE(bin2hex, NULL)
- PHP_FE(sleep, NULL)
- PHP_FE(usleep, NULL)
- PHP_FE(time, NULL)
- PHP_FE(mktime, NULL)
- PHP_FE(gmmktime, NULL)
-
-#if HAVE_STRFTIME
- PHP_FE(strftime, NULL)
- PHP_FE(gmstrftime, NULL)
-#endif
-
- PHP_FE(strtotime, NULL)
- PHP_FE(date, NULL)
- PHP_FE(gmdate, NULL)
- PHP_FE(getdate, NULL)
- PHP_FE(localtime, NULL)
- PHP_FE(checkdate, NULL)
-
- PHP_FE(flush, NULL)
- PHP_FE(wordwrap, NULL)
- PHP_FE(htmlspecialchars, NULL)
- PHP_FE(htmlentities, NULL)
- PHP_FE(html_entity_decode, NULL)
- PHP_FE(get_html_translation_table, NULL)
- PHP_NAMED_FE(md5,php_if_md5, NULL)
- PHP_NAMED_FE(md5_file,php_if_md5_file, NULL)
- PHP_NAMED_FE(crc32,php_if_crc32, NULL)
-
- PHP_FE(iptcparse, NULL)
- PHP_FE(iptcembed, NULL)
- PHP_FE(getimagesize, second_args_force_ref)
-
- PHP_FE(phpinfo, NULL)
- PHP_FE(phpversion, NULL)
- PHP_FE(phpcredits, NULL)
- PHP_FE(php_logo_guid, NULL)
- PHP_FE(zend_logo_guid, NULL)
- PHP_FE(php_sapi_name, NULL)
- PHP_FE(php_uname, NULL)
-
- PHP_FE(strnatcmp, NULL)
- PHP_FE(strnatcasecmp, NULL)
- PHP_FE(substr_count, NULL)
- PHP_FE(strspn, NULL)
- PHP_FE(strcspn, NULL)
- PHP_FE(strtok, NULL)
- PHP_FE(strtoupper, NULL)
- PHP_FE(strtolower, NULL)
- PHP_FE(strpos, NULL)
- PHP_FE(strrpos, NULL)
- PHP_FE(strrev, NULL)
- PHP_FE(hebrev, NULL)
- PHP_FE(hebrevc, NULL)
- PHP_FE(nl2br, NULL)
- PHP_FE(basename, NULL)
- PHP_FE(dirname, NULL)
- PHP_FE(pathinfo, NULL)
- PHP_FE(stripslashes, NULL)
- PHP_FE(stripcslashes, NULL)
- PHP_FE(strstr, NULL)
- PHP_FE(stristr, NULL)
- PHP_FE(strrchr, NULL)
-
-#ifdef HAVE_STRCOLL
- PHP_FE(strcoll, NULL)
-#endif
-
- PHP_FE(substr, NULL)
- PHP_FE(substr_replace, NULL)
- PHP_FE(quotemeta, NULL)
- PHP_FE(ucfirst, NULL)
- PHP_FE(ucwords, NULL)
- PHP_FE(strtr, NULL)
- PHP_FE(addslashes, NULL)
- PHP_FE(addcslashes, NULL)
- PHP_FE(rtrim, NULL)
- PHP_FE(str_replace, NULL)
- PHP_FE(str_repeat, NULL)
- PHP_FE(count_chars, NULL)
- PHP_FE(chunk_split, NULL)
- PHP_FE(trim, NULL)
- PHP_FE(ltrim, NULL)
- PHP_FE(strip_tags, NULL)
- PHP_FE(similar_text, third_arg_force_ref)
- PHP_FE(explode, NULL)
- PHP_FE(implode, NULL)
- PHP_FE(setlocale, NULL)
- PHP_FE(localeconv, NULL)
-
-#if HAVE_NL_LANGINFO
- PHP_FE(nl_langinfo, NULL)
-#endif
-
- PHP_FE(soundex, NULL)
- PHP_FE(levenshtein, NULL)
- PHP_FE(chr, NULL)
- PHP_FE(ord, NULL)
- PHP_FE(parse_str, second_arg_force_ref)
- PHP_FE(str_pad, NULL)
- PHP_FALIAS(chop, rtrim, NULL)
- PHP_FALIAS(strchr, strstr, NULL)
- PHP_NAMED_FE(sprintf, PHP_FN(user_sprintf), NULL)
- PHP_NAMED_FE(printf, PHP_FN(user_printf), NULL)
- PHP_FE(vprintf, NULL)
- PHP_FE(vsprintf, NULL)
- PHP_FE(sscanf, third_and_rest_force_ref)
- PHP_FE(fscanf, third_and_rest_force_ref)
- PHP_FE(parse_url, NULL)
- PHP_FE(urlencode, NULL)
- PHP_FE(urldecode, NULL)
- PHP_FE(rawurlencode, NULL)
- PHP_FE(rawurldecode, NULL)
-
-#ifdef HAVE_SYMLINK
- PHP_FE(readlink, NULL)
- PHP_FE(linkinfo, NULL)
- PHP_FE(symlink, NULL)
- PHP_FE(link, NULL)
-#endif
-
- PHP_FE(unlink, NULL)
- PHP_FE(exec, second_and_third_args_force_ref)
- PHP_FE(system, second_arg_force_ref)
- PHP_FE(escapeshellcmd, NULL)
- PHP_FE(escapeshellarg, NULL)
- PHP_FE(passthru, second_arg_force_ref)
- PHP_FE(shell_exec, NULL)
- PHP_FE(proc_open, third_arg_force_ref)
- PHP_FE(proc_close, NULL)
-
- PHP_FE(rand, NULL)
- PHP_FE(srand, NULL)
- PHP_FE(getrandmax, NULL)
- PHP_FE(mt_rand, NULL)
- PHP_FE(mt_srand, NULL)
- PHP_FE(mt_getrandmax, NULL)
-
-#if HAVE_GETSERVBYNAME
- PHP_FE(getservbyname, NULL)
-#endif
-
-#if HAVE_GETSERVBYPORT
- PHP_FE(getservbyport, NULL)
-#endif
-
-#if HAVE_GETPROTOBYNAME
- PHP_FE(getprotobyname, NULL)
-#endif
-
-#if HAVE_GETPROTOBYNUMBER
- PHP_FE(getprotobynumber, NULL)
-#endif
-
- PHP_FE(gethostbyaddr, NULL)
- PHP_FE(gethostbyname, NULL)
- PHP_FE(gethostbynamel, NULL)
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32))
- PHP_FE(checkdnsrr, NULL)
- PHP_FE(getmxrr,second_and_third_args_force_ref)
-#endif
-
- PHP_FE(getmyuid, NULL)
- PHP_FE(getmygid, NULL)
- PHP_FE(getmypid, NULL)
- PHP_FE(getmyinode, NULL)
- PHP_FE(getlastmod, NULL)
-
- PHP_FE(base64_decode, NULL)
- PHP_FE(base64_encode, NULL)
-
- PHP_FE(abs, NULL)
- PHP_FE(ceil, NULL)
- PHP_FE(floor, NULL)
- PHP_FE(round, NULL)
- PHP_FE(sin, NULL)
- PHP_FE(cos, NULL)
- PHP_FE(tan, NULL)
- PHP_FE(asin, NULL)
- PHP_FE(acos, NULL)
- PHP_FE(atan, NULL)
- PHP_FE(atan2, NULL)
- PHP_FE(sinh, NULL)
- PHP_FE(cosh, NULL)
- PHP_FE(tanh, NULL)
-
-#ifndef PHP_WIN32
- PHP_FE(asinh, NULL)
- PHP_FE(acosh, NULL)
- PHP_FE(atanh, NULL)
- PHP_FE(expm1, NULL)
- PHP_FE(log1p, NULL)
-#endif
-
- PHP_FE(pi, NULL)
- PHP_FE(is_finite, NULL)
- PHP_FE(is_nan, NULL)
- PHP_FE(is_infinite, NULL)
- PHP_FE(pow, NULL)
- PHP_FE(exp, NULL)
- PHP_FE(log, NULL)
- PHP_FE(log10, NULL)
- PHP_FE(sqrt, NULL)
- PHP_FE(hypot, NULL)
- PHP_FE(deg2rad, NULL)
- PHP_FE(rad2deg, NULL)
- PHP_FE(bindec, NULL)
- PHP_FE(hexdec, NULL)
- PHP_FE(octdec, NULL)
- PHP_FE(decbin, NULL)
- PHP_FE(decoct, NULL)
- PHP_FE(dechex, NULL)
- PHP_FE(base_convert, NULL)
- PHP_FE(number_format, NULL)
- PHP_FE(fmod, NULL)
- PHP_FE(ip2long, NULL)
- PHP_FE(long2ip, NULL)
-
- PHP_FE(getenv, NULL)
-#ifdef HAVE_PUTENV
- PHP_FE(putenv, NULL)
-#endif
-
- PHP_FE(microtime, NULL)
- PHP_FE(gettimeofday, NULL)
-
-#ifdef HAVE_GETRUSAGE
- PHP_FE(getrusage, NULL)
-#endif
-
- PHP_FE(uniqid, NULL)
- PHP_FE(quoted_printable_decode, NULL)
- PHP_FE(convert_cyr_string, NULL)
- PHP_FE(get_current_user, NULL)
- PHP_FE(set_time_limit, NULL)
- PHP_FE(get_cfg_var, NULL)
- PHP_FALIAS(magic_quotes_runtime, set_magic_quotes_runtime, NULL)
- PHP_FE(set_magic_quotes_runtime, NULL)
- PHP_FE(get_magic_quotes_gpc, NULL)
- PHP_FE(get_magic_quotes_runtime, NULL)
-
- PHP_FE(import_request_variables, NULL)
- PHP_FE(error_log, NULL)
- PHP_FE(call_user_func, NULL)
- PHP_FE(call_user_func_array, NULL)
- PHP_FE(call_user_method, second_arg_force_ref)
- PHP_FE(call_user_method_array, second_arg_force_ref)
- PHP_FE(serialize, NULL)
- PHP_FE(unserialize, NULL)
-
- PHP_FE(var_dump, NULL)
- PHP_FE(var_export, NULL)
- PHP_FE(debug_zval_dump, NULL)
- PHP_FE(print_r, NULL)
-
- PHP_FE(register_shutdown_function, NULL)
- PHP_FE(register_tick_function, NULL)
- PHP_FE(unregister_tick_function, NULL)
-
- PHP_FE(highlight_file, NULL)
- PHP_FALIAS(show_source, highlight_file, NULL)
- PHP_FE(highlight_string, NULL)
-
- PHP_FE(ini_get, NULL)
- PHP_FE(ini_get_all, NULL)
- PHP_FE(ini_set, NULL)
- PHP_FALIAS(ini_alter, ini_set, NULL)
- PHP_FE(ini_restore, NULL)
-
- PHP_FE(setcookie, NULL)
- PHP_FE(header, NULL)
- PHP_FE(headers_sent, NULL)
-
- PHP_FE(connection_aborted, NULL)
- PHP_FE(connection_status, NULL)
- PHP_FE(ignore_user_abort, NULL)
- PHP_FE(parse_ini_file, NULL)
- PHP_FE(is_uploaded_file, NULL)
- PHP_FE(move_uploaded_file, NULL)
-
- /* functions from type.c */
- PHP_FE(intval, NULL)
- PHP_FE(floatval, NULL)
- PHP_FALIAS(doubleval, floatval, NULL)
- PHP_FE(strval, NULL)
- PHP_FE(gettype, NULL)
- PHP_FE(settype, first_arg_force_ref)
- PHP_FE(is_null, NULL)
- PHP_FE(is_resource, NULL)
- PHP_FE(is_bool, NULL)
- PHP_FE(is_long, NULL)
- PHP_FE(is_float, NULL)
- PHP_FALIAS(is_int, is_long, NULL)
- PHP_FALIAS(is_integer, is_long, NULL)
- PHP_FALIAS(is_double, is_float, NULL)
- PHP_FALIAS(is_real, is_float, NULL)
- PHP_FE(is_numeric, NULL)
- PHP_FE(is_string, NULL)
- PHP_FE(is_array, NULL)
- PHP_FE(is_object, NULL)
- PHP_FE(is_scalar, NULL)
- PHP_FE(is_callable, third_arg_force_ref)
-
- /* functions from reg.c */
- PHP_FE(ereg, third_arg_force_ref)
- PHP_FE(ereg_replace, NULL)
- PHP_FE(eregi, third_arg_force_ref)
- PHP_FE(eregi_replace, NULL)
- PHP_FE(split, NULL)
- PHP_FE(spliti, NULL)
- PHP_FALIAS(join, implode, NULL)
- PHP_FE(sql_regcase, NULL)
-
- /* functions from dl.c */
- PHP_FE(dl, NULL)
-
- /* functions from file.c */
- PHP_FE(pclose, NULL)
- PHP_FE(popen, NULL)
- PHP_FE(readfile, NULL)
- PHP_FE(rewind, NULL)
- PHP_FE(rmdir, NULL)
- PHP_FE(umask, NULL)
- PHP_FE(fclose, NULL)
- PHP_FE(feof, NULL)
- PHP_FE(fgetc, NULL)
- PHP_FE(fgets, NULL)
- PHP_FE(fgetss, NULL)
- PHP_FE(fread, NULL)
- PHP_STATIC_FE("fopen", php_if_fopen, NULL)
- PHP_FE(fpassthru, NULL)
- PHP_STATIC_FE("ftruncate", php_if_ftruncate, NULL)
- PHP_STATIC_FE("fstat", php_if_fstat, NULL)
- PHP_FE(fseek, NULL)
- PHP_FE(ftell, NULL)
- PHP_FE(fflush, NULL)
- PHP_FE(fwrite, NULL)
- PHP_FALIAS(fputs, fwrite, NULL)
- PHP_FE(mkdir, NULL)
- PHP_FE(rename, NULL)
- PHP_FE(copy, NULL)
- PHP_FE(tempnam, NULL)
- PHP_STATIC_FE("tmpfile", php_if_tmpfile, NULL)
- PHP_FE(file, NULL)
- PHP_FE(file_get_contents, NULL)
- PHP_FE(stream_context_create, NULL)
- PHP_FE(stream_context_set_params, NULL)
- PHP_FE(stream_context_set_option, NULL)
- PHP_FE(stream_context_get_options, NULL)
- PHP_FE(fgetcsv, NULL)
- PHP_FE(flock, NULL)
- PHP_FE(get_meta_tags, NULL)
- PHP_FE(set_file_buffer, NULL)
-
- /* set_socket_blocking() is deprecated,
- use socket_set_blocking() instead
- */
- PHP_FE(set_socket_blocking, NULL)
- PHP_FE(socket_set_blocking, NULL)
-
- PHP_FE(file_get_wrapper_data, NULL)
- PHP_FE(file_register_wrapper, NULL)
-
-#if HAVE_SYS_TIME_H
- PHP_FE(socket_set_timeout, NULL)
-#endif
-
- PHP_FE(socket_get_status, NULL)
-
-#if (!defined(PHP_WIN32) && !defined(__BEOS__) && HAVE_REALPATH) || defined(ZTS)
- PHP_FE(realpath, NULL)
-#endif
-
-#ifdef HAVE_FNMATCH
- PHP_FE(fnmatch, NULL)
-#endif
-
- /* functions from fsock.c */
- PHP_FE(fsockopen, third_and_fourth_args_force_ref)
- PHP_FE(pfsockopen, third_and_fourth_args_force_ref)
-
- /* functions from pack.c */
- PHP_FE(pack, NULL)
- PHP_FE(unpack, NULL)
-
- /* functions from browscap.c */
- PHP_FE(get_browser, NULL)
-
-#if HAVE_CRYPT
- /* functions from crypt.c */
- PHP_FE(crypt, NULL)
-#endif
-
- /* functions from dir.c */
- PHP_FE(opendir, NULL)
- PHP_FE(closedir, NULL)
- PHP_FE(chdir, NULL)
-
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
- PHP_FE(chroot, NULL)
-#endif
-
- PHP_FE(getcwd, NULL)
- PHP_FE(rewinddir, NULL)
- PHP_STATIC_FE("readdir", php_if_readdir, NULL)
- PHP_FALIAS(dir, getdir, NULL)
-#ifdef HAVE_GLOB
- PHP_FE(glob, NULL)
-#endif
- /* functions from filestat.c */
- PHP_FE(fileatime, NULL)
- PHP_FE(filectime, NULL)
- PHP_FE(filegroup, NULL)
- PHP_FE(fileinode, NULL)
- PHP_FE(filemtime, NULL)
- PHP_FE(fileowner, NULL)
- PHP_FE(fileperms, NULL)
- PHP_FE(filesize, NULL)
- PHP_FE(filetype, NULL)
- PHP_FE(file_exists, NULL)
- PHP_FE(is_writable, NULL)
- PHP_FALIAS(is_writeable, is_writable, NULL)
- PHP_FE(is_readable, NULL)
- PHP_FE(is_executable, NULL)
- PHP_FE(is_file, NULL)
- PHP_FE(is_dir, NULL)
- PHP_FE(is_link, NULL)
- PHP_STATIC_FE("stat", php_if_stat, NULL)
- PHP_STATIC_FE("lstat", php_if_lstat, NULL)
- PHP_FE(chown, NULL)
- PHP_FE(chgrp, NULL)
- PHP_FE(chmod, NULL)
-#if HAVE_UTIME
- PHP_FE(touch, NULL)
-#endif
- PHP_FE(clearstatcache, NULL)
- PHP_FE(disk_total_space, NULL)
- PHP_FE(disk_free_space, NULL)
- PHP_FALIAS(diskfreespace, disk_free_space, NULL)
-
- /* functions from mail.c */
-#ifdef HAVE_SENDMAIL
- PHP_FE(mail, NULL)
- PHP_FE(ezmlm_hash, NULL)
-#endif
-
- /* functions from syslog.c */
-#ifdef HAVE_SYSLOG_H
- PHP_FE(openlog, NULL)
- PHP_FE(syslog, NULL)
- PHP_FE(closelog, NULL)
- PHP_FE(define_syslog_variables, NULL)
-#endif
-
- /* functions from lcg.c */
- PHP_FE(lcg_value, NULL)
-
- /* functions from metaphone.c */
- PHP_FE(metaphone, NULL)
-
- /* functions from output.c */
- PHP_FE(ob_start, NULL)
- PHP_FE(ob_flush, NULL)
- PHP_FE(ob_clean, NULL)
- PHP_FE(ob_end_flush, NULL)
- PHP_FE(ob_end_clean, NULL)
- PHP_FE(ob_get_length, NULL)
- PHP_FE(ob_get_level, NULL)
- PHP_FE(ob_get_status, NULL)
- PHP_FE(ob_get_contents, NULL)
- PHP_FE(ob_implicit_flush, NULL)
-
- /* functions from array.c */
- PHP_FE(ksort, first_arg_force_ref)
- PHP_FE(krsort, first_arg_force_ref)
- PHP_FE(natsort, first_arg_force_ref)
- PHP_FE(natcasesort, first_arg_force_ref)
- PHP_FE(asort, first_arg_force_ref)
- PHP_FE(arsort, first_arg_force_ref)
- PHP_FE(sort, first_arg_force_ref)
- PHP_FE(rsort, first_arg_force_ref)
- PHP_FE(usort, first_arg_force_ref)
- PHP_FE(uasort, first_arg_force_ref)
- PHP_FE(uksort, first_arg_force_ref)
- PHP_FE(shuffle, first_arg_force_ref)
- PHP_FE(array_walk, first_arg_force_ref)
- PHP_FE(count, NULL)
- PHP_FE(end, first_arg_force_ref)
- PHP_FE(prev, first_arg_force_ref)
- PHP_FE(next, first_arg_force_ref)
- PHP_FE(reset, first_arg_force_ref)
- PHP_FE(current, first_arg_force_ref)
- PHP_FE(key, first_arg_force_ref)
- PHP_FE(min, NULL)
- PHP_FE(max, NULL)
- PHP_FE(in_array, NULL)
- PHP_FE(array_search, NULL)
- PHP_FE(extract, NULL)
- PHP_FE(compact, NULL)
- PHP_FE(array_fill, NULL)
- PHP_FE(range, NULL)
- PHP_FE(array_multisort, NULL)
- PHP_FE(array_push, first_arg_force_ref)
- PHP_FE(array_pop, first_arg_force_ref)
- PHP_FE(array_shift, first_arg_force_ref)
- PHP_FE(array_unshift, first_arg_force_ref)
- PHP_FE(array_splice, first_arg_force_ref)
- PHP_FE(array_slice, NULL)
- PHP_FE(array_merge, NULL)
- PHP_FE(array_merge_recursive, NULL)
- PHP_FE(array_keys, NULL)
- PHP_FE(array_values, NULL)
- PHP_FE(array_count_values, NULL)
- PHP_FE(array_reverse, NULL)
- PHP_FE(array_reduce, NULL)
- PHP_FE(array_pad, NULL)
- PHP_FE(array_flip, NULL)
- PHP_FE(array_change_key_case, NULL)
- PHP_FE(array_rand, NULL)
- PHP_FE(array_unique, NULL)
- PHP_FE(array_intersect, NULL)
- PHP_FE(array_diff, NULL)
- PHP_FE(array_sum, NULL)
- PHP_FE(array_filter, NULL)
- PHP_FE(array_map, NULL)
- PHP_FE(array_chunk, NULL)
- PHP_FE(array_key_exists, NULL)
-
- /* aliases from array.c */
- PHP_FALIAS(pos, current, first_arg_force_ref)
- PHP_FALIAS(sizeof, count, NULL)
- PHP_FALIAS(key_exists, array_key_exists, NULL)
-
- /* functions from assert.c */
- PHP_FE(assert, NULL)
- PHP_FE(assert_options, NULL)
-
- /* functions from versioning.c */
- PHP_FE(version_compare, NULL)
-
- /* functions from ftok.c*/
-#if HAVE_SYSVSEM || HAVE_SYSVSHM || HAVE_SHMOP
- PHP_FE(ftok, NULL)
-#endif
-
- PHP_FE(str_rot13, NULL)
-
- /* functions from aggregate.c */
- PHP_FE(aggregate, first_arg_force_ref)
- PHP_FE(aggregate_methods, first_arg_force_ref)
- PHP_FE(aggregate_methods_by_list, first_arg_force_ref)
- PHP_FE(aggregate_properties, first_arg_force_ref)
- PHP_FE(aggregate_properties_by_list, first_arg_force_ref)
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- PHP_FE(aggregate_methods_by_regexp, first_arg_force_ref)
- PHP_FE(aggregate_properties_by_regexp, first_arg_force_ref)
-#endif
- PHP_FE(deaggregate, first_arg_force_ref)
- PHP_FE(aggregation_info, first_arg_force_ref)
-
- PHP_FE(output_add_rewrite_var, NULL)
- PHP_FE(output_reset_rewrite_vars, NULL)
-
- {NULL, NULL, NULL}
-};
-
-
-static PHP_INI_MH(OnUpdateSafeModeProtectedEnvVars)
-{
- char *protected_vars, *protected_var;
- char *token_buf;
- int dummy = 1;
-
- protected_vars = estrndup(new_value, new_value_length);
- zend_hash_clean(&BG(sm_protected_env_vars));
-
- protected_var = php_strtok_r(protected_vars, ", ", &token_buf);
- while (protected_var) {
- zend_hash_update(&BG(sm_protected_env_vars), protected_var, strlen(protected_var), &dummy, sizeof(int), NULL);
- protected_var = php_strtok_r(NULL, ", ", &token_buf);
- }
- efree(protected_vars);
- return SUCCESS;
-}
-
-
-static PHP_INI_MH(OnUpdateSafeModeAllowedEnvVars)
-{
- if (BG(sm_allowed_env_vars)) {
- free(BG(sm_allowed_env_vars));
- }
- BG(sm_allowed_env_vars) = zend_strndup(new_value, new_value_length);
- return SUCCESS;
-}
-
-
-PHP_INI_BEGIN()
- PHP_INI_ENTRY_EX("safe_mode_protected_env_vars", SAFE_MODE_PROTECTED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeProtectedEnvVars, NULL)
- PHP_INI_ENTRY_EX("safe_mode_allowed_env_vars", SAFE_MODE_ALLOWED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeAllowedEnvVars, NULL)
-PHP_INI_END()
-
-
-zend_module_entry basic_functions_module = {
- STANDARD_MODULE_HEADER,
- "standard", /* extension name */
- basic_functions, /* function list */
- PHP_MINIT(basic), /* process startup */
- PHP_MSHUTDOWN(basic), /* process shutdown */
- PHP_RINIT(basic), /* request startup */
- PHP_RSHUTDOWN(basic), /* request shutdown */
- PHP_MINFO(basic), /* extension info */
- PHP_VERSION, /* extension version */
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#if defined(HAVE_PUTENV)
-static void php_putenv_destructor(putenv_entry *pe)
-{
- if (pe->previous_value) {
- putenv(pe->previous_value);
- } else {
-# if HAVE_UNSETENV
- unsetenv(pe->key);
-# else
- char **env;
-
- for (env = environ; env != NULL && *env != NULL; env++) {
- if (!strncmp(*env, pe->key, pe->key_len) && (*env)[pe->key_len] == '=') { /* found it */
- *env = "";
- break;
- }
- }
-# endif
- }
- efree(pe->putenv_string);
- efree(pe->key);
-}
-#endif
-
-
-static void basic_globals_ctor(php_basic_globals *basic_globals_p TSRMLS_DC)
-{
- BG(next) = NULL;
- BG(left) = -1;
- BG(user_tick_functions) = NULL;
- BG(aggregation_table) = NULL;
- zend_hash_init(&BG(sm_protected_env_vars), 5, NULL, NULL, 1);
- BG(sm_allowed_env_vars) = NULL;
-
- memset(&BG(url_adapt_state), 0, sizeof(BG(url_adapt_state)));
- memset(&BG(url_adapt_state_ex), 0, sizeof(BG(url_adapt_state_ex)));
-
-#ifdef PHP_WIN32
- CoInitialize(NULL);
-#endif
-
- BG(incomplete_class) = php_create_incomplete_class(TSRMLS_C);
-}
-
-
-static void basic_globals_dtor(php_basic_globals *basic_globals_p TSRMLS_DC)
-{
- zend_hash_destroy(&BG(sm_protected_env_vars));
- if (BG(sm_allowed_env_vars)) {
- free(BG(sm_allowed_env_vars));
- }
-#ifdef PHP_WIN32
- CoUninitialize();
-#endif
-}
-
-
-PHP_MINIT_FUNCTION(basic)
-{
-#ifdef ZTS
- ts_allocate_id(&basic_globals_id, sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);
-#else
- basic_globals_ctor(&basic_globals TSRMLS_CC);
-#endif
-
- REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CONNECTION_NORMAL", PHP_CONNECTION_NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("INI_USER", ZEND_INI_USER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INI_ALL", ZEND_INI_ALL, CONST_CS | CONST_PERSISTENT);
-
-#define REGISTER_MATH_CONSTANT(x) REGISTER_DOUBLE_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
- REGISTER_MATH_CONSTANT(M_E);
- REGISTER_MATH_CONSTANT(M_LOG2E);
- REGISTER_MATH_CONSTANT(M_LOG10E);
- REGISTER_MATH_CONSTANT(M_LN2);
- REGISTER_MATH_CONSTANT(M_LN10);
- REGISTER_MATH_CONSTANT(M_PI);
- REGISTER_MATH_CONSTANT(M_PI_2);
- REGISTER_MATH_CONSTANT(M_PI_4);
- REGISTER_MATH_CONSTANT(M_1_PI);
- REGISTER_MATH_CONSTANT(M_2_PI);
- REGISTER_MATH_CONSTANT(M_2_SQRTPI);
- REGISTER_MATH_CONSTANT(M_SQRT2);
- REGISTER_MATH_CONSTANT(M_SQRT1_2);
-
-#if ENABLE_TEST_CLASS
- test_class_startup();
-#endif
-
- REGISTER_INI_ENTRIES();
-
- register_phpinfo_constants(INIT_FUNC_ARGS_PASSTHRU);
- register_html_constants(INIT_FUNC_ARGS_PASSTHRU);
- register_string_constants(INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_MINIT(regex) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(file) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(pack) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(browscap) (INIT_FUNC_ARGS_PASSTHRU);
-
-#if defined(HAVE_LOCALECONV) && defined(ZTS)
- PHP_MINIT(localeconv) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
-#if defined(HAVE_NL_LANGINFO)
- PHP_MINIT(nl_langinfo) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
-#if HAVE_CRYPT
- PHP_MINIT(crypt) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
- PHP_MINIT(lcg) (INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_MINIT(dir) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(syslog) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(array) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(assert) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(url_scanner_ex) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(proc_open) (INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_MINIT(user_streams) (INIT_FUNC_ARGS_PASSTHRU);
-
- php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);
-# if HAVE_OPENSSL_EXT
- php_register_url_stream_wrapper("https", &php_stream_http_wrapper TSRMLS_CC);
-# endif
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(basic)
-{
-#ifdef ZTS
- ts_free_id(basic_globals_id);
-#else
- basic_globals_dtor(&basic_globals TSRMLS_CC);
-#endif
-
- php_unregister_url_stream_wrapper("http" TSRMLS_CC);
- php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);
- php_unregister_url_stream_wrapper("php" TSRMLS_CC);
-# if HAVE_OPENSSL_EXT
- php_unregister_url_stream_wrapper("https" TSRMLS_CC);
-# endif
-
- UNREGISTER_INI_ENTRIES();
-
- PHP_MSHUTDOWN(regex) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(browscap) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(array) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(assert) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(url_scanner_ex) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(file) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#if defined(HAVE_LOCALECONV) && defined(ZTS)
- PHP_MSHUTDOWN(localeconv) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(basic)
-{
- memset(BG(strtok_table), 0, 256);
- BG(strtok_string) = NULL;
- BG(strtok_zval) = NULL;
- BG(locale_string) = NULL;
- BG(user_compare_func_name) = NULL;
- BG(array_walk_func_name) = NULL;
-#ifdef HAVE_MMAP
- BG(mmap_file) = NULL;
-#endif
- BG(page_uid) = -1;
- BG(page_gid) = -1;
- BG(page_inode) = -1;
- BG(page_mtime) = -1;
-#ifdef HAVE_PUTENV
- if (zend_hash_init(&BG(putenv_ht), 1, NULL, (void (*)(void *)) php_putenv_destructor, 0) == FAILURE) {
- return FAILURE;
- }
-#endif
- BG(user_shutdown_function_names) = NULL;
-
-#if HAVE_CRYPT
- PHP_RINIT(crypt) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
- PHP_RINIT(lcg) (INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_RINIT(filestat) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_RINIT(syslog) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_RINIT(dir) (INIT_FUNC_ARGS_PASSTHRU);
- PHP_RINIT(url_scanner_ex) (INIT_FUNC_ARGS_PASSTHRU);
-
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(basic)
-{
- if (BG(strtok_zval)) {
- zval_ptr_dtor(&BG(strtok_zval));
- }
- BG(strtok_string) = NULL;
- BG(strtok_zval) = NULL;
-#ifdef HAVE_PUTENV
- zend_hash_destroy(&BG(putenv_ht));
-#endif
-
- /* Check if locale was changed and change it back
- to the value in startup environment */
- if (BG(locale_string) != NULL) {
- setlocale(LC_ALL, "C");
- setlocale(LC_CTYPE, "");
- }
- STR_FREE(BG(locale_string));
-
- PHP_RSHUTDOWN(fsock) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_RSHUTDOWN(filestat) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_RSHUTDOWN(syslog) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_RSHUTDOWN(assert) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_RSHUTDOWN(url_scanner_ex) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
-
- if (BG(user_tick_functions)) {
- zend_llist_destroy(BG(user_tick_functions));
- efree(BG(user_tick_functions));
- BG(user_tick_functions) = NULL;
- }
-
- if (BG(aggregation_table)) {
- zend_hash_destroy(BG(aggregation_table));
- efree(BG(aggregation_table));
- BG(aggregation_table) = NULL;
- }
-
-#ifdef HAVE_MMAP
- if (BG(mmap_file)) {
- munmap(BG(mmap_file), BG(mmap_len));
- }
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(basic)
-{
- php_info_print_table_start();
- PHP_MINFO(regex) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
- PHP_MINFO(dl) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
- PHP_MINFO(mail) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
- php_info_print_table_end();
- PHP_MINFO(assert) (ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
-}
-
-
-/* {{{ proto mixed constant(string const_name)
- Given the name of a constant this function will return the constants associated value */
-PHP_FUNCTION(constant)
-{
- zval **const_name;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &const_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(const_name);
-
- if (!zend_get_constant(Z_STRVAL_PP(const_name), Z_STRLEN_PP(const_name), return_value TSRMLS_CC)) {
- php_error(E_WARNING, "Couldn't find constant %s", Z_STRVAL_PP(const_name));
- RETURN_NULL();
- }
-}
-/* }}} */
-
-/* {{{ proto int ip2long(string ip_address)
- Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address */
-PHP_FUNCTION(ip2long)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(str);
-
- RETURN_LONG(ntohl(inet_addr(Z_STRVAL_PP(str))));
-}
-/* }}} */
-
-/* {{{ proto string long2ip(int proper_address)
- Converts an (IPv4) Internet network address into a string in Internet standard dotted format */
-PHP_FUNCTION(long2ip)
-{
- zval **num;
- unsigned long n;
- struct in_addr myaddr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(num);
-
- n = strtoul(Z_STRVAL_PP(num), NULL, 0);
-
- myaddr.s_addr = htonl(n);
- RETURN_STRING(inet_ntoa(myaddr), 1);
-}
-/* }}} */
-
-
-/********************
- * System Functions *
- ********************/
-
-/* {{{ proto string getenv(string varname)
- Get the value of an environment variable */
-PHP_FUNCTION(getenv)
-{
- char *ptr, *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
- ptr = sapi_getenv(str, str_len TSRMLS_CC);
- if (! ptr) {
- ptr = getenv(str);
- }
- if (ptr) {
- RETURN_STRING(ptr, 1);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_PUTENV
-/* {{{ proto bool putenv(string setting)
- Set the value of an environment variable */
-PHP_FUNCTION(putenv)
-{
- pval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (Z_STRVAL_PP(str) && *(Z_STRVAL_PP(str))) {
- char *p, **env;
- putenv_entry pe;
-
- pe.putenv_string = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- pe.key = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */
- *p = '\0';
- }
- pe.key_len = strlen(pe.key);
-
- if (PG(safe_mode)) {
- /* Check the protected list */
- if (zend_hash_exists(&BG(sm_protected_env_vars), pe.key, pe.key_len)) {
- php_error(E_WARNING, "Safe Mode: Cannot override protected environment variable '%s'", pe.key);
- efree(pe.putenv_string);
- efree(pe.key);
- RETURN_FALSE;
- }
-
- /* Check the allowed list */
- if (BG(sm_allowed_env_vars) && *BG(sm_allowed_env_vars)) {
- char *allowed_env_vars = estrdup(BG(sm_allowed_env_vars));
- char *allowed_prefix = strtok(allowed_env_vars, ", ");
- zend_bool allowed = 0;
-
- while (allowed_prefix) {
- if (!strncmp(allowed_prefix, pe.key, strlen(allowed_prefix))) {
- allowed = 1;
- break;
- }
- allowed_prefix = strtok(NULL, ", ");
- }
- efree(allowed_env_vars);
- if (!allowed) {
- php_error(E_WARNING, "Safe Mode: Cannot set environment variable '%s' - it's not in the allowed list", pe.key);
- efree(pe.putenv_string);
- efree(pe.key);
- RETURN_FALSE;
- }
- }
- }
-
- zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1);
-
- /* find previous value */
- pe.previous_value = NULL;
- for (env = environ; env != NULL && *env != NULL; env++) {
- if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */
- pe.previous_value = *env;
- break;
- }
- }
-
- if (putenv(pe.putenv_string) == 0) { /* success */
- zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len+1, (void **) &pe, sizeof(putenv_entry), NULL);
-#ifdef HAVE_TZSET
- if (!strncmp(pe.key, "TZ", 2)) {
- tzset();
- }
-#endif
- RETURN_TRUE;
- } else {
- efree(pe.putenv_string);
- efree(pe.key);
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto void flush(void)
- Flush the output buffer */
-PHP_FUNCTION(flush)
-{
- sapi_flush(TSRMLS_C);
-}
-/* }}} */
-
-/* {{{ proto void sleep(int seconds)
- Delay for a given number of seconds */
-PHP_FUNCTION(sleep)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(num);
- php_sleep(Z_LVAL_PP(num));
-}
-/* }}} */
-
-/* {{{ proto void usleep(int micro_seconds)
- Delay for a given number of micro seconds */
-PHP_FUNCTION(usleep)
-{
-#if HAVE_USLEEP
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
- usleep(Z_LVAL_PP(num));
-#endif
-}
-/* }}} */
-
-/* {{{ proto string get_current_user(void)
- Get the name of the owner of the current PHP script */
-PHP_FUNCTION(get_current_user)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING(php_get_current_user(), 1);
-}
-/* }}} */
-
-/* {{{ proto string get_cfg_var(string option_name)
- Get the value of a PHP configuration option */
-PHP_FUNCTION(get_cfg_var)
-{
- pval **varname;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &varname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
-
- if (cfg_get_string(Z_STRVAL_PP(varname), &value) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_STRING(value, 1);
-}
-/* }}} */
-
-/* {{{ proto bool set_magic_quotes_runtime(int new_setting)
- Set the current active configuration setting of magic_quotes_runtime and return previous */
-PHP_FUNCTION(set_magic_quotes_runtime)
-{
- pval **new_setting;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_setting) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_boolean_ex(new_setting);
-
- PG(magic_quotes_runtime) = (zend_bool) Z_LVAL_PP(new_setting);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int get_magic_quotes_runtime(void)
- Get the current active configuration setting of magic_quotes_runtime */
-PHP_FUNCTION(get_magic_quotes_runtime)
-{
- RETURN_LONG(PG(magic_quotes_runtime));
-}
-
-/* }}} */
-
-/* {{{ proto int get_magic_quotes_gpc(void)
- Get the current active configuration setting of magic_quotes_gpc */
-PHP_FUNCTION(get_magic_quotes_gpc)
-{
- RETURN_LONG(PG(magic_quotes_gpc));
-}
-/* }}} */
-
-/*
- 1st arg = error message
- 2nd arg = error option
- 3rd arg = optional parameters (email address or tcp address)
- 4th arg = used for additional headers if email
-
-error options:
- 0 = send to php_error_log (uses syslog or file depending on ini setting)
- 1 = send via email to 3rd parameter 4th option = additional headers
- 2 = send via tcp/ip to 3rd parameter (name or ip:port)
- 3 = save to file in 3rd parameter
-*/
-
-/* {{{ proto bool error_log(string message, int message_type [, string destination] [, string extra_headers])
- Send an error message somewhere */
-PHP_FUNCTION(error_log)
-{
- pval **string, **erropt = NULL, **option = NULL, **emailhead = NULL;
- int opt_err = 0;
- char *message, *opt = NULL, *headers = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &string) == FAILURE) {
- php_error(E_WARNING, "Invalid argument 1 in error_log");
- RETURN_FALSE;
- }
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &string, &erropt) == FAILURE) {
- php_error(E_WARNING, "Invalid arguments in error_log");
- RETURN_FALSE;
- }
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &string, &erropt, &option) ==
- FAILURE) {
- php_error(E_WARNING, "Invalid arguments in error_log");
- RETURN_FALSE;
- }
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- convert_to_string_ex(option);
- opt = Z_STRVAL_PP(option);
- break;
-
- case 4:
- if (zend_get_parameters_ex
- (4, &string, &erropt, &option, &emailhead) == FAILURE) {
- php_error(E_WARNING, "Invalid arguments in error_log");
- RETURN_FALSE;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(string);
- message = Z_STRVAL_PP(string);
-
- if (erropt != NULL) {
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- }
-
- if (option != NULL) {
- convert_to_string_ex(option);
- opt = Z_STRVAL_PP(option);
- }
-
- if (emailhead != NULL) {
- convert_to_string_ex(emailhead);
- headers = Z_STRVAL_PP(emailhead);
- }
-
- if (_php_error_log(opt_err, message, opt, headers TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC)
-{
- php_stream *stream = NULL;
-
- switch (opt_err) {
-
- case 1: /*send an email */
- {
-#if HAVE_SENDMAIL
- if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) {
- return FAILURE;
- }
-#else
- php_error(E_WARNING, "Mail option not available!");
- return FAILURE;
-#endif
- }
- break;
-
- case 2: /*send to an address */
- php_error(E_WARNING, "TCP/IP option not available!");
- return FAILURE;
- break;
-
- case 3: /*save to a file */
- stream = php_stream_open_wrapper(opt, "a", IGNORE_URL | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- if (!stream)
- return FAILURE;
- php_stream_write(stream, message, strlen(message));
- php_stream_close(stream);
- break;
-
- default:
- php_log_err(message TSRMLS_CC);
- break;
- }
- return SUCCESS;
-}
-
-/* {{{ proto mixed call_user_func(string function_name [, mixed parmeter] [, mixed ...])
- Call a user function which is the first parameter */
-PHP_FUNCTION(call_user_func)
-{
- zval ***params;
- zval *retval_ptr;
- char *name;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- params = emalloc(sizeof(zval **) * argc);
-
- if (zend_get_parameters_array_ex(argc, params) == FAILURE) {
- efree(params);
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(params[0]) != IS_STRING && Z_TYPE_PP(params[0]) != IS_ARRAY) {
- SEPARATE_ZVAL(params[0]);
- convert_to_string_ex(params[0]);
- }
-
- if (!zend_is_callable(*params[0], 0, &name)) {
- php_error(E_WARNING, "%s() expects first argument, '%s', to be a valid callback", get_active_function_name(TSRMLS_C), name);
- efree(name);
- efree(params);
- RETURN_NULL();
- }
-
- if (call_user_function_ex(EG(function_table), NULL, *params[0], &retval_ptr, argc-1, params+1, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error(E_WARNING, "Unable to call %s()", name);
- }
-
- efree(name);
- efree(params);
-}
-/* }}} */
-
-/* {{{ proto mixed call_user_func_array(string function_name, array parameters)
- Call a user function which is the first parameter with the arguments contained in array */
-PHP_FUNCTION(call_user_func_array)
-{
- zval ***func_params, **func, **params;
- zval *retval_ptr;
- HashTable *func_params_ht;
- char *name;
- int count;
- int current = 0;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &func, &params) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- SEPARATE_ZVAL(params);
- convert_to_array_ex(params);
-
- if (Z_TYPE_PP(func) != IS_STRING && Z_TYPE_PP(func) != IS_ARRAY) {
- SEPARATE_ZVAL(func);
- convert_to_string_ex(func);
- }
-
- if (!zend_is_callable(*func, 0, &name)) {
- php_error(E_WARNING, "%s() expects first argument, '%s', to be a valid callback", get_active_function_name(TSRMLS_C), name);
- efree(name);
- RETURN_NULL();
- }
-
- func_params_ht = Z_ARRVAL_PP(params);
-
- count = zend_hash_num_elements(func_params_ht);
- func_params = emalloc(sizeof(zval **) * count);
-
- for (zend_hash_internal_pointer_reset(func_params_ht);
- zend_hash_get_current_data(func_params_ht, (void **) &func_params[current]) == SUCCESS;
- zend_hash_move_forward(func_params_ht)
- ) {
- current++;
- }
-
- if (call_user_function_ex(EG(function_table), NULL, *func, &retval_ptr, count, func_params, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error(E_WARNING, "Unable to call %s()", name);
- }
-
- efree(name);
- efree(func_params);
-}
-/* }}} */
-
-#define _CUM_DEPREC "The %s() function is deprecated, use the call_user_func variety with the array(&$obj, \"method\") syntax instead"
-
-/* {{{ proto mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])
- Call a user method on a specific object or class */
-PHP_FUNCTION(call_user_method)
-{
- zval ***params;
- zval *retval_ptr;
- int arg_count = ZEND_NUM_ARGS();
-
- php_error(E_NOTICE, _CUM_DEPREC, "call_user_method");
-
- if (arg_count < 2) {
- WRONG_PARAM_COUNT;
- }
- params = (zval ***) emalloc(sizeof(zval **) * arg_count);
-
- if (zend_get_parameters_array_ex(arg_count, params) == FAILURE) {
- efree(params);
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(params[1]) != IS_OBJECT && Z_TYPE_PP(params[1]) != IS_STRING) {
- php_error(E_WARNING, "2nd argument is not an object or class name\n");
- efree(params);
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(params[0]);
- convert_to_string(*params[0]);
-
- if (call_user_function_ex(EG(function_table), params[1], *params[0], &retval_ptr, arg_count-2, params+2, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error(E_WARNING, "Unable to call %s()", Z_STRVAL_PP(params[0]));
- }
- efree(params);
-}
-/* }}} */
-
-/* {{{ proto mixed call_user_method_array(string method_name, mixed object, array params)
- Call a user method on a specific object or class using a parameter array */
-PHP_FUNCTION(call_user_method_array)
-{
- zval **method_name, **obj, **params, ***method_args = NULL, *retval_ptr;
- HashTable *params_ar;
- int num_elems, element = 0;
-
- php_error(E_NOTICE, _CUM_DEPREC, "call_user_method_array");
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &method_name, &obj, &params) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(obj) != IS_OBJECT && Z_TYPE_PP(obj) != IS_STRING) {
- php_error(E_WARNING, "2nd argument is not an object or class name\n");
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(method_name);
- SEPARATE_ZVAL(params);
- convert_to_string_ex(method_name);
- convert_to_array_ex(params);
-
- params_ar = HASH_OF(*params);
- num_elems = zend_hash_num_elements(params_ar);
- method_args = (zval ***) emalloc(sizeof(zval **) *num_elems);
-
- for (zend_hash_internal_pointer_reset(params_ar);
- zend_hash_get_current_data(params_ar, (void **) &(method_args[element])) == SUCCESS;
- zend_hash_move_forward(params_ar)
- ) {
- element++;
- }
-
- if (call_user_function_ex(EG(function_table), obj, *method_name, &retval_ptr, num_elems, method_args, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error(E_WARNING, "Unable to call %s()", Z_STRVAL_PP(method_name));
- }
-
- efree(method_args);
-}
-/* }}} */
-
-
-void user_shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry)
-{
- int i;
-
- for (i = 0; i < shutdown_function_entry->arg_count; i++) {
- zval_ptr_dtor(&shutdown_function_entry->arguments[i]);
- }
- efree(shutdown_function_entry->arguments);
-}
-
-void user_tick_function_dtor(user_tick_function_entry *tick_function_entry)
-{
- int i;
-
- for (i = 0; i < tick_function_entry->arg_count; i++) {
- zval_ptr_dtor(&tick_function_entry->arguments[i]);
- }
- efree(tick_function_entry->arguments);
-}
-
-static int user_shutdown_function_call(php_shutdown_function_entry *shutdown_function_entry TSRMLS_DC)
-{
- zval retval;
-
- if (call_user_function( EG(function_table), NULL,
- shutdown_function_entry->arguments[0],
- &retval,
- shutdown_function_entry->arg_count - 1,
- shutdown_function_entry->arguments + 1
- TSRMLS_CC ) == SUCCESS ) {
- zval_dtor(&retval);
-
- } else {
- php_error(E_WARNING, "Unable to call %s() - function does not exist", Z_STRVAL_P(shutdown_function_entry->arguments[0]));
- }
- return 0;
-}
-
-static void user_tick_function_call(user_tick_function_entry *tick_fe TSRMLS_DC)
-{
- zval retval;
- zval *function = tick_fe->arguments[0];
-
- if (call_user_function( EG(function_table), NULL,
- function,
- &retval,
- tick_fe->arg_count - 1,
- tick_fe->arguments+1
- TSRMLS_CC) == SUCCESS) {
- zval_dtor(&retval);
-
- } else {
- zval **obj, **method;
-
- if (Z_TYPE_P(function) == IS_STRING) {
- php_error(E_WARNING, "Unable to call %s() - function does not exist", Z_STRVAL_P(function));
- } else if ( Z_TYPE_P(function) == IS_ARRAY
- && zend_hash_index_find(Z_ARRVAL_P(function), 0, (void **) &obj) == SUCCESS
- && zend_hash_index_find(Z_ARRVAL_P(function), 1, (void **) &method) == SUCCESS
- && Z_TYPE_PP(obj) == IS_OBJECT
- && Z_TYPE_PP(method) == IS_STRING ) {
- php_error(E_WARNING, "Unable to call %s::%s() - function does not exist", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method));
- } else {
- php_error(E_WARNING, "Unable to call tick function");
- }
- }
-}
-
-static void run_user_tick_functions(int tick_count)
-{
- TSRMLS_FETCH();
-
- zend_llist_apply(BG(user_tick_functions), (llist_apply_func_t) user_tick_function_call TSRMLS_CC);
-}
-
-static int user_tick_function_compare(user_tick_function_entry * tick_fe1, user_tick_function_entry * tick_fe2)
-{
- zval *func1 = tick_fe1->arguments[0];
- zval *func2 = tick_fe2->arguments[0];
- TSRMLS_FETCH();
-
- if (Z_TYPE_P(func1) == IS_STRING && Z_TYPE_P(func2) == IS_STRING) {
- return (zend_binary_zval_strcmp(func1, func2) == 0);
- } else if (Z_TYPE_P(func1) == IS_ARRAY && Z_TYPE_P(func2) == IS_ARRAY) {
- zval result;
- zend_compare_arrays(&result, func1, func2 TSRMLS_CC);
- return (Z_LVAL(result) == 0);
- } else {
- return 0;
- }
-}
-
-void php_call_shutdown_functions(void)
-{
- TSRMLS_FETCH();
-
- if (BG(user_shutdown_function_names))
- zend_try {
- zend_hash_apply(BG(user_shutdown_function_names), (apply_func_t) user_shutdown_function_call TSRMLS_CC);
- memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf));
- zend_hash_destroy(BG(user_shutdown_function_names));
- efree(BG(user_shutdown_function_names));
- }
- zend_end_try();
-}
-
-/* {{{ proto void register_shutdown_function(string function_name)
- Register a user-level function to be called on request termination */
-PHP_FUNCTION(register_shutdown_function)
-{
- php_shutdown_function_entry shutdown_function_entry;
- int i;
-
- shutdown_function_entry.arg_count = ZEND_NUM_ARGS();
-
- if (shutdown_function_entry.arg_count < 1) {
- WRONG_PARAM_COUNT;
- }
-
- shutdown_function_entry.arguments = (pval **) emalloc(sizeof(pval *) *shutdown_function_entry.arg_count);
-
- if (zend_get_parameters_array(ht, shutdown_function_entry.arg_count, shutdown_function_entry.arguments) == FAILURE) {
- RETURN_FALSE;
- }
- if (!BG(user_shutdown_function_names)) {
- ALLOC_HASHTABLE(BG(user_shutdown_function_names));
- zend_hash_init(BG(user_shutdown_function_names), 0, NULL, (void (*)(void *)) user_shutdown_function_dtor, 0);
- }
-
- for (i = 0; i < shutdown_function_entry.arg_count; i++) {
- shutdown_function_entry.arguments[i]->refcount++;
- }
- zend_hash_next_index_insert(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry), NULL);
-}
-/* }}} */
-
-
-ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini)
-{
- syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
- syntax_highlighter_ini->highlight_default = INI_STR("highlight.default");
- syntax_highlighter_ini->highlight_html = INI_STR("highlight.html");
- syntax_highlighter_ini->highlight_keyword = INI_STR("highlight.keyword");
- syntax_highlighter_ini->highlight_string = INI_STR("highlight.string");
-}
-
-/* {{{ proto bool highlight_file(string file_name [, bool return] )
- Syntax highlight a source file */
-PHP_FUNCTION(highlight_file)
-{
- zval *filename;
- zend_syntax_highlighter_ini syntax_highlighter_ini;
- zend_bool i = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &filename, &i) == FAILURE) {
- return;
- }
- convert_to_string(filename);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_P(filename), NULL, CHECKUID_ALLOW_ONLY_FILE))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_P(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (i) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- php_get_highlight_struct(&syntax_highlighter_ini);
-
- if (highlight_file(Z_STRVAL_P(filename), &syntax_highlighter_ini TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (i) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool highlight_string(string string [, bool return] )
- Syntax highlight a string or optionally return it */
-PHP_FUNCTION(highlight_string)
-{
- zval *expr;
- zend_syntax_highlighter_ini syntax_highlighter_ini;
- char *hicompiled_string_description;
- zend_bool i = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &expr, &i) == FAILURE) {
- return;
- }
- convert_to_string(expr);
-
- if (i) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- php_get_highlight_struct(&syntax_highlighter_ini);
-
- hicompiled_string_description = zend_make_compiled_string_description("highlighted code" TSRMLS_CC);
-
- if (highlight_string(expr, &syntax_highlighter_ini, hicompiled_string_description TSRMLS_CC) == FAILURE) {
- efree(hicompiled_string_description);
- RETURN_FALSE;
- }
- efree(hicompiled_string_description);
-
- if (i) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ini_get(string varname)
- Get a configuration option */
-PHP_FUNCTION(ini_get)
-{
- pval **varname;
- char *str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &varname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
-
- str = php_ini_string(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, 0);
-
- if (!str) {
- RETURN_FALSE;
- }
-
- RETURN_STRING(str, 1);
-}
-/* }}} */
-
-
-static int php_ini_get_option(zend_ini_entry *ini_entry, int num_args, va_list args, zend_hash_key *hash_key)
-{
- zval *ini_array = va_arg(args, zval *);
- int module_number = va_arg(args, int);
- zval *option;
-
- if(module_number != 0 && ini_entry->module_number != module_number) {
- return 0;
- }
-
- if (hash_key->nKeyLength == 0 || hash_key->arKey[0] != 0) {
-
- MAKE_STD_ZVAL(option);
- array_init(option);
-
- if(ini_entry->orig_value) {
- add_assoc_stringl(option, "global_value", ini_entry->orig_value, ini_entry->orig_value_length, 1);
- } else if (ini_entry->value) {
- add_assoc_stringl(option, "global_value", ini_entry->value, ini_entry->value_length, 1);
- } else {
- add_assoc_null(option, "global_value");
- }
-
- if(ini_entry->value) {
- add_assoc_stringl(option, "local_value", ini_entry->value, ini_entry->value_length, 1);
- } else {
- add_assoc_null(option, "local_value");
- }
-
- add_assoc_long(option, "access", ini_entry->modifyable);
-
- add_assoc_zval_ex(ini_array, ini_entry->name, ini_entry->name_length, option);
- }
- return 0;
-}
-
-/* {{{ proto array ini_get_all([string extension])
- Get all configuration options */
-PHP_FUNCTION(ini_get_all)
-{
- char *extname = NULL;
- int extname_len = 0, extnumber = 0;
- zend_module_entry *module;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &extname, &extname_len) == FAILURE) {
- return;
- }
-
- zend_ini_sort_entries(TSRMLS_C);
-
- if(extname) {
- if (zend_hash_find(&module_registry, extname, extname_len+1, (void **) &module) == FAILURE) {
- php_error(E_WARNING, "Unable to find extension '%s'", extname);
- RETURN_FALSE;
- }
- extnumber = module->module_number;
- }
-
- array_init(return_value);
- zend_hash_apply_with_arguments(&EG(ini_directives), (apply_func_args_t) php_ini_get_option, 2, return_value, extnumber TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string ini_set(string varname, string newvalue)
- Set a configuration option, returns false on error and the old value of the configuration option on success */
-PHP_FUNCTION(ini_set)
-{
- pval **varname, **new_value;
- char *old_value;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &varname, &new_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
- convert_to_string_ex(new_value);
-
- old_value = php_ini_string(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, 0);
-
- /* copy to return here, because alter might free it! */
- if (old_value) {
- RETVAL_STRING(old_value, 1);
- } else {
- RETVAL_FALSE;
- }
-
- if (zend_alter_ini_entry(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, Z_STRVAL_PP(new_value), Z_STRLEN_PP(new_value),
- PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ini_restore(string varname)
- Restore the value of a configuration option specified by varname */
-PHP_FUNCTION(ini_restore)
-{
- pval **varname;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &varname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
-
- zend_restore_ini_entry(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, PHP_INI_STAGE_RUNTIME);
-}
-/* }}} */
-
-/* {{{ proto bool print_r(mixed var)
- Prints out information about the specified variable */
-PHP_FUNCTION(print_r)
-{
- pval **expr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &expr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- zend_print_pval_r(*expr, 0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* This should go back to PHP */
-
-/* {{{ proto int connection_aborted(void)
- Returns true if client disconnected */
-PHP_FUNCTION(connection_aborted)
-{
- RETURN_LONG(PG(connection_status) & PHP_CONNECTION_ABORTED);
-}
-/* }}} */
-
-/* {{{ proto int connection_status(void)
- Returns the connection status bitfield */
-PHP_FUNCTION(connection_status)
-{
- RETURN_LONG(PG(connection_status));
-}
-/* }}} */
-
-/* {{{ proto int ignore_user_abort(boolean value)
- Set whether we want to ignore a user abort event or not */
-PHP_FUNCTION(ignore_user_abort)
-{
- pval **arg;
- int old_setting;
-
- old_setting = PG(ignore_user_abort);
- switch (ZEND_NUM_ARGS()) {
-
- case 0:
- break;
-
- case 1:
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_boolean_ex(arg);
- PG(ignore_user_abort) = (zend_bool) Z_LVAL_PP(arg);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- RETURN_LONG(old_setting);
-}
-/* }}} */
-
-#if HAVE_GETSERVBYNAME
-/* {{{ proto int getservbyname(string service, string protocol)
- Returns port associated with service. Protocol must be "tcp" or "udp" */
-PHP_FUNCTION(getservbyname)
-{
- pval **name, **proto;
- struct servent *serv;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &proto) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- convert_to_string_ex(proto);
-
- serv = getservbyname(Z_STRVAL_PP(name), Z_STRVAL_PP(proto));
-
- if (serv == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(ntohs(serv->s_port));
-}
-/* }}} */
-#endif
-
-#if HAVE_GETSERVBYPORT
-/* {{{ proto string getservbyport(int port, string protocol)
- Returns service name associated with port. Protocol must be "tcp" or "udp" */
-PHP_FUNCTION(getservbyport)
-{
- pval **port, **proto;
- struct servent *serv;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &port, &proto) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(port);
- convert_to_string_ex(proto);
-
- serv = getservbyport(htons((unsigned short) Z_LVAL_PP(port)), Z_STRVAL_PP(proto));
-
- if (serv == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_STRING(serv->s_name, 1);
-}
-/* }}} */
-#endif
-
-#if HAVE_GETPROTOBYNAME
-/* {{{ proto int getprotobyname(string name)
- Returns protocol number associated with name as per /etc/protocols */
-PHP_FUNCTION(getprotobyname)
-{
- pval **name;
- struct protoent *ent;
-
- if (ZEND_NUM_ARGS() != 1
- || zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(name);
-
- ent = getprotobyname(Z_STRVAL_PP(name));
-
- if (ent == NULL) {
- Z_LVAL_P(return_value) = -1;
- Z_TYPE_P(return_value) = IS_LONG;
- return;
- }
-
- RETURN_LONG(ent->p_proto);
-}
-/* }}} */
-#endif
-
-#if HAVE_GETPROTOBYNUMBER
-/* {{{ proto string getprotobynumber(int proto)
- Returns protocol name associated with protocol number proto */
-PHP_FUNCTION(getprotobynumber)
-{
- pval **proto;
- struct protoent *ent;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &proto) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(proto);
-
- ent = getprotobynumber(Z_LVAL_PP(proto));
-
- if (ent == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_STRING(ent->p_name, 1);
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])
- Registers a tick callback function */
-PHP_FUNCTION(register_tick_function)
-{
- user_tick_function_entry tick_fe;
- int i;
-
- tick_fe.arg_count = ZEND_NUM_ARGS();
- if (tick_fe.arg_count < 1) {
- WRONG_PARAM_COUNT;
- }
-
- tick_fe.arguments = (zval **) emalloc(sizeof(zval *) * tick_fe.arg_count);
-
- if (zend_get_parameters_array(ht, tick_fe.arg_count, tick_fe.arguments) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(tick_fe.arguments[0]) != IS_ARRAY)
- convert_to_string_ex(&tick_fe.arguments[0]);
-
- if (!BG(user_tick_functions)) {
- BG(user_tick_functions) = (zend_llist *) emalloc(sizeof(zend_llist));
- zend_llist_init(BG(user_tick_functions),
- sizeof(user_tick_function_entry),
- (llist_dtor_func_t) user_tick_function_dtor, 0);
- php_add_tick_function(run_user_tick_functions);
- }
-
- for (i = 0; i < tick_fe.arg_count; i++) {
- tick_fe.arguments[i]->refcount++;
- }
-
- zend_llist_add_element(BG(user_tick_functions), &tick_fe);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void unregister_tick_function(string function_name)
- Unregisters a tick callback function */
-PHP_FUNCTION(unregister_tick_function)
-{
- zval **function;
- user_tick_function_entry tick_fe;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &function)) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(function) != IS_ARRAY) {
- convert_to_string_ex(function);
- }
-
- tick_fe.arguments = (zval **) emalloc(sizeof(zval *));
- tick_fe.arguments[0] = *function;
- tick_fe.arg_count = 1;
- zend_llist_del_element(BG(user_tick_functions), &tick_fe, (int (*)(void *, void *)) user_tick_function_compare);
- efree(tick_fe.arguments);
-}
-/* }}} */
-
-/* {{{ proto bool is_uploaded_file(string path)
- Check if file was created by rfc1867 upload */
-PHP_FUNCTION(is_uploaded_file)
-{
- zval **path;
-
- if (!SG(rfc1867_uploaded_files)) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &path) != SUCCESS) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(path);
-
- if (zend_hash_exists(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool move_uploaded_file(string path, string new_path)
- Move a file if and only if it was created by an upload */
-PHP_FUNCTION(move_uploaded_file)
-{
- zval **path, **new_path;
- zend_bool successful = 0;
-
- if (!SG(rfc1867_uploaded_files)) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &path, &new_path) != SUCCESS) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(path);
- convert_to_string_ex(new_path);
-
- if (!zend_hash_exists(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1)) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(new_path), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(new_path) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- VCWD_UNLINK(Z_STRVAL_PP(new_path));
- if (rename(Z_STRVAL_PP(path), Z_STRVAL_PP(new_path)) == 0) {
- successful = 1;
- } else
- if (php_copy_file(Z_STRVAL_PP(path), Z_STRVAL_PP(new_path) TSRMLS_CC) == SUCCESS) {
- VCWD_UNLINK(Z_STRVAL_PP(path));
- successful = 1;
- }
-
- if (successful) {
- zend_hash_del(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1);
- } else {
- php_error(E_WARNING, "Unable to move '%s' to '%s'", Z_STRVAL_PP(path), Z_STRVAL_PP(new_path));
- }
- RETURN_BOOL(successful);
-}
-/* }}} */
-
-
-static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, zval *arr)
-{
- zval *element;
-
- switch (callback_type) {
-
- case ZEND_INI_PARSER_ENTRY:
- if(!arg2) {
- /* bare string - nothing to do */
- break;
- }
- ALLOC_ZVAL(element);
- *element = *arg2;
- zval_copy_ctor(element);
- INIT_PZVAL(element);
- zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &element, sizeof(zval *), NULL);
- break;
-
- case ZEND_INI_PARSER_SECTION:
- break;
- }
-}
-
-static void php_ini_parser_cb_with_sections(zval *arg1, zval *arg2, int callback_type, zval *arr)
-{
- zval *element;
- TSRMLS_FETCH();
-
- switch (callback_type) {
-
- case ZEND_INI_PARSER_ENTRY:
- {
- zval *active_arr;
-
- if(!arg2) {
- /* bare string - nothing to do */
- break;
- }
-
- if (BG(active_ini_file_section)) {
- active_arr = BG(active_ini_file_section);
- } else {
- active_arr = arr;
- }
- ALLOC_ZVAL(element);
- *element = *arg2;
- zval_copy_ctor(element);
- INIT_PZVAL(element);
- zend_hash_update(Z_ARRVAL_P(active_arr), Z_STRVAL_P(arg1),
- Z_STRLEN_P(arg1)+1, &element,
- sizeof(zval *), NULL);
- }
- break;
-
- case ZEND_INI_PARSER_SECTION:
- MAKE_STD_ZVAL(BG(active_ini_file_section));
- array_init(BG(active_ini_file_section));
- zend_hash_update( Z_ARRVAL_P(arr),
- Z_STRVAL_P(arg1),
- Z_STRLEN_P(arg1)+1,
- &BG(active_ini_file_section),
- sizeof(zval *), NULL);
- break;
- }
-}
-
-
-/* {{{ proto array parse_ini_file(string filename [, boolean process_sections])
- Parse configuration file */
-PHP_FUNCTION(parse_ini_file)
-{
- zval **filename, **process_sections;
- zend_file_handle fh;
- zend_ini_parser_cb_t ini_parser_cb;
-
- switch (ARG_COUNT(ht)) {
-
- case 1:
- if (zend_get_parameters_ex(1, &filename) == FAILURE) {
- RETURN_FALSE;
- }
- ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &filename, &process_sections) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_boolean_ex(process_sections);
-
- if (Z_BVAL_PP(process_sections)) {
- TSRMLS_FETCH();
-
- BG(active_ini_file_section) = NULL;
- ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
- } else {
- ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
- }
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- convert_to_string_ex(filename);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_ONLY_FILE))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- fh.handle.fp = VCWD_FOPEN(Z_STRVAL_PP(filename), "r");
- if (!fh.handle.fp) {
- php_error(E_WARNING, "Cannot open '%s' for reading", Z_STRVAL_PP(filename));
- return;
- }
- Z_TYPE(fh) = ZEND_HANDLE_FP;
- fh.filename = Z_STRVAL_PP(filename);
- array_init(return_value);
- zend_parse_ini_file(&fh, 0, ini_parser_cb, return_value);
-}
-/* }}} */
-
-static int copy_request_variable(void *pDest, int num_args, va_list args, zend_hash_key *hash_key)
-{
- char *prefix, *new_key;
- uint prefix_len, new_key_len;
- zval **var = (zval **) pDest;
- TSRMLS_FETCH();
-
- if (num_args != 2) {
- return 0;
- }
-
- prefix = va_arg(args, char *);
- prefix_len = va_arg(args, uint);
-
- new_key_len = prefix_len + hash_key->nKeyLength;
- new_key = (char *) emalloc(new_key_len);
-
- memcpy(new_key, prefix, prefix_len);
- memcpy(new_key+prefix_len, hash_key->arKey, hash_key->nKeyLength);
-
- ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), new_key, new_key_len, *var, 0, 1);
-
- efree(new_key);
- return 0;
-}
-
-/* {{{ proto bool import_request_variables(string types [, string prefix])
- Import GET/POST/Cookie variables into the global scope */
-PHP_FUNCTION(import_request_variables)
-{
- zval **z_types, **z_prefix;
- char *types, *prefix;
- uint prefix_len;
- char *p;
-
- switch (ZEND_NUM_ARGS()) {
-
- case 1:
- if (zend_get_parameters_ex(1, &z_types) == FAILURE) {
- RETURN_FALSE;
- }
- prefix = "";
- prefix_len = 0;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &z_types, &z_prefix) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(z_prefix);
- prefix = Z_STRVAL_PP(z_prefix);
- prefix_len = Z_STRLEN_PP(z_prefix);
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (prefix_len == 0) {
- zend_error(E_NOTICE, "No prefix specified in %s() - possible security hazard", get_active_function_name(TSRMLS_C));
- }
-
- convert_to_string_ex(z_types);
- types = Z_STRVAL_PP(z_types);
-
- for (p = types; p && *p; p++) {
- switch (*p) {
-
- case 'g':
- case 'G':
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- break;
-
- case 'p':
- case 'P':
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_FILES]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- break;
-
- case 'c':
- case 'C':
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- break;
- }
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
-
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
deleted file mode 100644
index 7b3d83d764..0000000000
--- a/ext/standard/basic_functions.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef BASIC_FUNCTIONS_H
-#define BASIC_FUNCTIONS_H
-
-#include <sys/stat.h>
-
-#include "zend_highlight.h"
-
-#include "url_scanner.h"
-#include "url_scanner_ex.h"
-
-extern zend_module_entry basic_functions_module;
-#define basic_functions_module_ptr &basic_functions_module
-
-PHP_MINIT_FUNCTION(basic);
-PHP_MSHUTDOWN_FUNCTION(basic);
-PHP_RINIT_FUNCTION(basic);
-PHP_RSHUTDOWN_FUNCTION(basic);
-PHP_MINFO_FUNCTION(basic);
-
-PHP_FUNCTION(constant);
-PHP_FUNCTION(toggle_short_open_tag);
-PHP_FUNCTION(sleep);
-PHP_FUNCTION(usleep);
-PHP_FUNCTION(flush);
-PHP_FUNCTION(ip2long);
-PHP_FUNCTION(long2ip);
-
-/* system functions */
-PHP_FUNCTION(getenv);
-PHP_FUNCTION(putenv);
-
-PHP_FUNCTION(get_current_user);
-PHP_FUNCTION(set_time_limit);
-
-PHP_FUNCTION(get_cfg_var);
-PHP_FUNCTION(set_magic_quotes_runtime);
-PHP_FUNCTION(get_magic_quotes_runtime);
-PHP_FUNCTION(get_magic_quotes_gpc);
-
-PHP_FUNCTION(import_request_variables);
-
-PHP_FUNCTION(error_log);
-
-PHP_FUNCTION(call_user_func);
-PHP_FUNCTION(call_user_func_array);
-PHP_FUNCTION(call_user_method);
-PHP_FUNCTION(call_user_method_array);
-
-PHP_FUNCTION(register_shutdown_function);
-PHP_FUNCTION(highlight_file);
-PHP_FUNCTION(highlight_string);
-ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini);
-
-PHP_FUNCTION(ini_get);
-PHP_FUNCTION(ini_get_all);
-PHP_FUNCTION(ini_set);
-PHP_FUNCTION(ini_restore);
-
-PHP_FUNCTION(print_r);
-
-PHP_FUNCTION(connection_aborted);
-PHP_FUNCTION(connection_status);
-PHP_FUNCTION(ignore_user_abort);
-
-PHP_FUNCTION(getservbyname);
-PHP_FUNCTION(getservbyport);
-PHP_FUNCTION(getprotobyname);
-PHP_FUNCTION(getprotobynumber);
-
-PHP_NAMED_FUNCTION(php_if_crc32);
-
-PHP_FUNCTION(register_tick_function);
-PHP_FUNCTION(unregister_tick_function);
-
-PHP_FUNCTION(is_uploaded_file);
-PHP_FUNCTION(move_uploaded_file);
-
-/* From the INI parser */
-PHP_FUNCTION(parse_ini_file);
-
-PHP_FUNCTION(str_rot13);
-
-#ifdef PHP_WIN32
-typedef unsigned int php_stat_len;
-#else
-typedef int php_stat_len;
-#endif
-
-PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC);
-
-#if SIZEOF_INT == 4
-/* Most 32-bit and 64-bit systems have 32-bit ints */
-typedef unsigned int php_uint32;
-typedef signed int php_int32;
-#elif SIZEOF_LONG == 4
-/* 16-bit systems? */
-typedef unsigned long php_uint32;
-typedef signed int php_int32;
-#else
-#error Need type which holds 32 bits
-#endif
-
-#define MT_N (624)
-
-typedef struct {
- HashTable *user_shutdown_function_names;
- HashTable putenv_ht;
- zval *strtok_zval;
- char *strtok_string;
- char *locale_string;
- char *strtok_last;
- char strtok_table[256];
- ulong strtok_len;
- char str_ebuf[40];
- zval **array_walk_func_name;
- zval **user_compare_func_name;
- zend_llist *user_tick_functions;
-
- zval *active_ini_file_section;
-
- HashTable sm_protected_env_vars;
- char *sm_allowed_env_vars;
-
- /* pageinfo.c */
- long page_uid;
- long page_gid;
- long page_inode;
- long page_mtime;
-
- /* filestat.c */
- char *CurrentStatFile;
- php_stat_len CurrentStatLength;
- struct stat sb;
- struct stat lsb;
-
- /* rand.c */
- php_uint32 state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */
- php_uint32 *next; /* next random value is computed from here */
- int left; /* can *next++ this many times before reloading */
-
- unsigned int rand_seed; /* Seed for rand(), in ts version */
-
- zend_bool rand_is_seeded; /* Whether rand() has been seeded */
- zend_bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */
-
- /* syslog.c */
- int syslog_started;
- char *syslog_device;
-
- /* var.c */
- zend_class_entry *incomplete_class;
-
- /* url_scanner.c */
- url_adapt_state_t url_adapt_state;
- /* url_scanner_ex.re */
- url_adapt_state_ex_t url_adapt_state_ex;
-
-#ifdef HAVE_MMAP
- void *mmap_file;
- size_t mmap_len;
-#endif
-
- HashTable *aggregation_table;
-} php_basic_globals;
-
-#ifdef ZTS
-#define BG(v) TSRMG(basic_globals_id, php_basic_globals *, v)
-extern int basic_globals_id;
-#else
-#define BG(v) (basic_globals.v)
-extern php_basic_globals basic_globals;
-#endif
-
-#if HAVE_PUTENV
-typedef struct {
- char *putenv_string;
- char *previous_value;
- char *key;
- int key_len;
-} putenv_entry;
-#endif
-
-/* Values are comma-delimited
- */
-#define SAFE_MODE_PROTECTED_ENV_VARS "LD_LIBRARY_PATH"
-#define SAFE_MODE_ALLOWED_ENV_VARS "PHP_"
-
-#endif /* BASIC_FUNCTIONS_H */
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
deleted file mode 100644
index 8c696c5fad..0000000000
--- a/ext/standard/browscap.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_regex.h"
-#include "php_browscap.h"
-#include "php_ini.h"
-
-#include "zend_globals.h"
-
-static HashTable browser_hash;
-static zval *current_section;
-
-#define DEFAULT_SECTION_NAME "Default Browser Capability Settings"
-
-/* OBJECTS_FIXME: This whole extension needs going through. The use of objects looks pretty broken here */
-
-static void browscap_entry_dtor(zval *pvalue)
-{
- if (Z_TYPE_P(pvalue) == IS_OBJECT) {
- zend_hash_destroy(Z_OBJPROP_P(pvalue));
- free(Z_OBJPROP_P(pvalue));
- }
-}
-
-/* {{{ convert_browscap_pattern
- */
-static void convert_browscap_pattern(zval *pattern)
-{
- register int i, j;
- char *t;
-
- for (i=0; i<Z_STRLEN_P(pattern); i++) {
- if (Z_STRVAL_P(pattern)[i]=='*' || Z_STRVAL_P(pattern)[i]=='?' || Z_STRVAL_P(pattern)[i]=='.') {
- break;
- }
- }
-
- if (i==Z_STRLEN_P(pattern)) { /* no wildcards */
- Z_STRVAL_P(pattern) = zend_strndup(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern));
- return;
- }
-
- t = (char *) malloc(Z_STRLEN_P(pattern)*2);
-
- for (i=0, j=0; i<Z_STRLEN_P(pattern); i++, j++) {
- switch (Z_STRVAL_P(pattern)[i]) {
- case '?':
- t[j] = '.';
- break;
- case '*':
- t[j++] = '.';
- t[j] = '*';
- break;
- case '.':
- t[j++] = '\\';
- t[j] = '.';
- break;
- default:
- t[j] = Z_STRVAL_P(pattern)[i];
- break;
- }
- }
- t[j]=0;
- Z_STRVAL_P(pattern) = t;
- Z_STRLEN_P(pattern) = j;
-}
-/* }}} */
-
-/* {{{ php_browscap_parser_cb
- */
-static void php_browscap_parser_cb(zval *arg1, zval *arg2, int callback_type, void *arg)
-{
- switch (callback_type) {
- case ZEND_INI_PARSER_ENTRY:
- if (current_section) {
- zval *new_property;
- char *new_key;
-
- new_property = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(new_property);
- Z_STRVAL_P(new_property) = Z_STRLEN_P(arg2)?zend_strndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2)):"";
- Z_STRLEN_P(new_property) = Z_STRLEN_P(arg2);
- Z_TYPE_P(new_property) = IS_STRING;
-
- new_key = zend_strndup(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
- zend_str_tolower(new_key, Z_STRLEN_P(arg1));
- zend_hash_update(Z_OBJPROP_P(current_section), new_key, Z_STRLEN_P(arg1)+1, &new_property, sizeof(zval *), NULL);
- free(new_key);
- }
- break;
- case ZEND_INI_PARSER_SECTION: {
- zval *processed;
- HashTable *section_properties;
- TSRMLS_FETCH();
-
- /*printf("'%s' (%d)\n",$1.value.str.val,$1.value.str.len+1);*/
- current_section = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(current_section);
- processed = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(processed);
-
- section_properties = (HashTable *) malloc(sizeof(HashTable));
- _object_and_properties_init(current_section, ZEND_STANDARD_CLASS_DEF_PTR, section_properties ZEND_FILE_LINE_CC TSRMLS_CC);
-
- zend_hash_init(section_properties, 0, NULL, (dtor_func_t) browscap_entry_dtor, 1);
- zend_hash_update(&browser_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void *) &current_section, sizeof(zval *), NULL);
-
- Z_STRVAL_P(processed) = Z_STRVAL_P(arg1);
- Z_STRLEN_P(processed) = Z_STRLEN_P(arg1);
- Z_TYPE_P(processed) = IS_STRING;
- convert_browscap_pattern(processed);
- zend_hash_update(section_properties, "browser_name_pattern", sizeof("browser_name_pattern"), (void *) &processed, sizeof(zval *), NULL);
- }
- break;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(browscap)
-{
- char *browscap = INI_STR("browscap");
-
- if (browscap) {
- zend_file_handle fh;
-
- if (zend_hash_init(&browser_hash, 0, NULL, (dtor_func_t) browscap_entry_dtor, 1)==FAILURE) {
- return FAILURE;
- }
-
- fh.handle.fp = VCWD_FOPEN(browscap, "r");
- if (!fh.handle.fp) {
- php_error(E_CORE_WARNING, "Cannot open '%s' for reading", browscap);
- return FAILURE;
- }
- fh.filename = browscap;
- Z_TYPE(fh) = ZEND_HANDLE_FP;
- zend_parse_ini_file(&fh, 1, (zend_ini_parser_cb_t) php_browscap_parser_cb, &browser_hash);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(browscap)
-{
- if (INI_STR("browscap")) {
- zend_hash_destroy(&browser_hash);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ browser_reg_compare
- */
-static int browser_reg_compare(zval **browser, int num_args, va_list args, zend_hash_key *key)
-{
- zval **browser_name;
- regex_t r;
- char *lookup_browser_name = va_arg(args, char *);
- zval **found_browser_entry = va_arg(args, zval **);
-
- if (*found_browser_entry) { /* already found */
- return 0;
- }
- if(zend_hash_find(Z_OBJPROP_PP(browser), "browser_name_pattern", sizeof("browser_name_pattern"), (void **) &browser_name) == FAILURE) {
- return 0;
- }
-
- if (!strchr(Z_STRVAL_PP(browser_name),'*')) {
- return 0;
- }
- if (regcomp(&r, Z_STRVAL_PP(browser_name), REG_NOSUB)!=0) {
- return 0;
- }
- if (regexec(&r, lookup_browser_name, 0, NULL, 0)==0) {
- *found_browser_entry = *browser;
- }
- regfree(&r);
- return 0;
-}
-/* }}} */
-
-/* {{{ proto object get_browser(string browser_name)
- Get information about the capabilities of a browser */
-PHP_FUNCTION(get_browser)
-{
- zval **agent_name, **agent;
- zval *found_browser_entry, *tmp_copy;
- char *lookup_browser_name;
-
- if (!INI_STR("browscap")) {
- RETURN_FALSE;
- }
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- if (!PG(http_globals)[TRACK_VARS_SERVER]
- || zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "HTTP_USER_AGENT", sizeof("HTTP_USER_AGENT"), (void **) &agent_name)==FAILURE) {
- zend_error(E_WARNING, "HTTP_USER_AGENT variable is not set, cannot determine user agent name");
- RETURN_FALSE;
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &agent_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(agent_name);
-
- if (zend_hash_find(&browser_hash, Z_STRVAL_PP(agent_name), Z_STRLEN_PP(agent_name)+1, (void **) &agent)==FAILURE) {
- lookup_browser_name = Z_STRVAL_PP(agent_name);
- found_browser_entry = NULL;
- zend_hash_apply_with_arguments(&browser_hash, (apply_func_args_t) browser_reg_compare, 2, lookup_browser_name, &found_browser_entry);
-
- if (found_browser_entry) {
- agent = &found_browser_entry;
- } else if (zend_hash_find(&browser_hash, DEFAULT_SECTION_NAME, sizeof(DEFAULT_SECTION_NAME), (void **) &agent)==FAILURE) {
- RETURN_FALSE;
- }
- }
-
- object_init(return_value);
- zend_hash_copy(Z_OBJPROP_P(return_value), Z_OBJPROP_PP(agent), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *));
-
- while (zend_hash_find(Z_OBJPROP_PP(agent), "parent", sizeof("parent"), (void **) &agent_name)==SUCCESS) {
-
- if (zend_hash_find(&browser_hash, Z_STRVAL_PP(agent_name), Z_STRLEN_PP(agent_name)+1, (void **)&agent)==FAILURE) {
- break;
- }
-
- zend_hash_merge(Z_OBJPROP_P(return_value), Z_OBJPROP_PP(agent), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *), 0);
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/config.m4 b/ext/standard/config.m4
deleted file mode 100644
index 99a062483c..0000000000
--- a/ext/standard/config.m4
+++ /dev/null
@@ -1,244 +0,0 @@
-dnl $Id$ -*- sh -*-
-
-divert(3)dnl
-
-dnl
-dnl Check if flush should be called explicitly after buffered io
-dnl
-AC_DEFUN(AC_FLUSH_IO,[
- AC_CACHE_CHECK([whether flush should be called explicitly after a bufferered io], ac_cv_flush_io,[
- AC_TRY_RUN( [
-#include <stdio.h>
-#include <stdlib.h>
-
-int main(int argc, char **argv)
-{
- char *filename = tmpnam(NULL);
- char buffer[64];
- int result = 0;
-
- FILE *fp = fopen(filename, "wb");
- if (NULL == fp)
- return 0;
- fputs("line 1\n", fp);
- fputs("line 2\n", fp);
- fclose(fp);
-
- fp = fopen(filename, "rb+");
- if (NULL == fp)
- return 0;
- fgets(buffer, sizeof(buffer), fp);
- fputs("line 3\n", fp);
- rewind(fp);
- fgets(buffer, sizeof(buffer), fp);
- if (0 != strcmp(buffer, "line 1\n"))
- result = 1;
- fgets(buffer, sizeof(buffer), fp);
- if (0 != strcmp(buffer, "line 3\n"))
- result = 1;
- fclose(fp);
- unlink(filename);
-
- exit(result);
-}
-],[
- ac_cv_flush_io=no
-],[
- ac_cv_flush_io=yes
-],[
- ac_cv_flush_io=no
-])])
- if test "$ac_cv_flush_io" = "yes"; then
- AC_DEFINE(HAVE_FLUSHIO, 1, [Define if flush should be called explicitly after a buffered io.])
- fi
-])
-
-dnl
-dnl Check for crypt() capabilities
-dnl
-AC_DEFUN(AC_CRYPT_CAP,[
-
- AC_CACHE_CHECK(for standard DES crypt, ac_cv_crypt_des,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- exit (strcmp((char *)crypt("rasmuslerdorf","rl"),"rl.3StKT.4T8M"));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_des=yes
- ],[
- ac_cv_crypt_des=no
- ],[
- ac_cv_crypt_des=yes
- ])
- ])
- if test "$ac_cv_crypt_des" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_STD_DES_CRYPT, $ac_result, [Whether the system supports standard DES salt])
-
- AC_CACHE_CHECK(for extended DES crypt, ac_cv_crypt_ext_des,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- exit (strcmp((char *)crypt("rasmuslerdorf","_J9..rasm"),"_J9..rasmBYk8r9AiWNc"));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_ext_des=yes
- ],[
- ac_cv_crypt_ext_des=no
- ],[
- ac_cv_crypt_ext_des=no
- ])
- ])
- if test "$ac_cv_crypt_ext_des" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_EXT_DES_CRYPT, $ac_result, [Whether the system supports extended DES salt])
-
- AC_CACHE_CHECK(for MD5 crypt, ac_cv_crypt_md5,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- char salt[15], answer[40];
-
- salt[0]='$'; salt[1]='1'; salt[2]='$';
- salt[3]='r'; salt[4]='a'; salt[5]='s';
- salt[6]='m'; salt[7]='u'; salt[8]='s';
- salt[9]='l'; salt[10]='e'; salt[11]='$';
- salt[12]='\0';
- strcpy(answer,salt);
- strcat(answer,"rISCgZzpwk3UhDidwXvin0");
- exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_md5=yes
- ],[
- ac_cv_crypt_md5=no
- ],[
- ac_cv_crypt_md5=no
- ])
- ])
- if test "$ac_cv_crypt_md5" = "yes"; then
- ac_result=1
- else
- if test "$ac_cv_crypt_des" != "yes"; then
- PHP_DEBUG_MACRO(debug.log)
- fi
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_MD5_CRYPT, $ac_result, [Whether the system supports MD5 salt])
-
- AC_CACHE_CHECK(for Blowfish crypt, ac_cv_crypt_blowfish,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- char salt[30], answer[70];
-
- salt[0]='$'; salt[1]='2'; salt[2]='a'; salt[3]='$'; salt[4]='0'; salt[5]='7'; salt[6]='$'; salt[7]='\0';
- strcat(salt,"rasmuslerd............");
- strcpy(answer,salt);
- strcpy(&answer[29],"nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra");
- exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_blowfish=yes
- ],[
- ac_cv_crypt_blowfish=no
- ],[
- ac_cv_crypt_blowfish=no
- ])
- ])
- if test "$ac_cv_crypt_blowfish" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_BLOWFISH_CRYPT, $ac_result, [Whether the system supports BlowFish salt])
-])
-
-AC_CHECK_FUNC(dlopen, [AC_DEFINE(HAVE_LIBDL,1,[ ])])
-
-dnl AC_CHECK_LIB(pam, pam_start, [
-dnl EXTRA_LIBS="$EXTRA_LIBS -lpam"
-dnl AC_DEFINE(HAVE_LIBPAM,1,[ ]) ], [])
-
-AC_CHECK_FUNCS(getcwd getwd)
-
-AC_CRYPT_CAP
-AC_FLUSH_IO
-
-divert(5)dnl
-
-AC_ARG_WITH(regex,
-[ --with-regex=TYPE regex library type: system, apache, php. Default: php
- WARNING: Do NOT use unless you know what you are doing!],
-[
- case $withval in
- system)
- if test "$PHP_SAPI" = "apache" || test "$PHP_SAPI" = "apache2filter"; then
- REGEX_TYPE=php
- else
- REGEX_TYPE=system
- fi
- ;;
- apache)
- REGEX_TYPE=apache
- ;;
- php)
- REGEX_TYPE=php
- ;;
- *)
- REGEX_TYPE=php
- AC_MSG_WARN(Invalid regex library type. Using default value: php)
- ;;
- esac
-],[
- REGEX_TYPE=php
-])
-
-AC_CHECK_FUNCS(fnmatch glob)
-
-if test "$PHP_SAPI" = "cgi"; then
- AC_DEFINE(ENABLE_CHROOT_FUNC, 1, [Whether to enable chroot() function])
-fi
-
-PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c crypt.c cyr_convert.c datetime.c \
- dir.c dl.c dns.c exec.c file.c filestat.c flock_compat.c \
- formatted_print.c fsock.c head.c html.c image.c info.c iptc.c lcg.c \
- link.c mail.c math.c md5.c metaphone.c microtime.c pack.c pageinfo.c \
- parsedate.c quot_print.c rand.c reg.c soundex.c string.c scanf.c \
- syslog.c type.c uniqid.c url.c url_scanner.c var.c versioning.c assert.c \
- strnatcmp.c levenshtein.c incomplete_class.c url_scanner_ex.c \
- ftp_fopen_wrapper.c http_fopen_wrapper.c php_fopen_wrapper.c credits.c \
- var_unserializer.c ftok.c aggregation.c)
-
-PHP_ADD_MAKEFILE_FRAGMENT
diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c
deleted file mode 100644
index eb94021e99..0000000000
--- a/ext/standard/crc32.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "basic_functions.h"
-#include "crc32.h"
-
-/* {{{ proto string crc32(string str)
- Calculate the crc32 polynomial of a string */
-PHP_NAMED_FUNCTION(php_if_crc32)
-{
- unsigned int crc = ~0;
- char *p;
- int len, nr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &p, &nr) == FAILURE) {
- return;
- }
-
- len = 0 ;
- for (len += nr; nr--; ++p) {
- CRC32(crc, *p);
- }
- RETVAL_LONG(~crc);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/crc32.h b/ext/standard/crc32.h
deleted file mode 100644
index ad245ea700..0000000000
--- a/ext/standard/crc32.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- * This code implements the AUTODIN II polynomial
- * The variable corresponding to the macro argument "crc" should
- * be an unsigned long.
- * Oroginal code by Spencer Garrett <srg@quick.com>
- */
-
-#define CRC32(crc, ch) (crc = (crc >> 8) ^ crc32tab[(crc ^ (ch)) & 0xff])
-
-/* generated using the AUTODIN II polynomial
- * x^32 + x^26 + x^23 + x^22 + x^16 +
- * x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
- */
-
-static const unsigned int crc32tab[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,
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/credits.c b/ext/standard/credits.c
deleted file mode 100644
index be77473d65..0000000000
--- a/ext/standard/credits.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "info.h"
-
-#define CREDIT_LINE(module, authors) php_info_print_table_row(2, module, authors)
-
-/* {{{ php_print_credits
- */
-PHPAPI void php_print_credits(int flag)
-{
- TSRMLS_FETCH();
-
- if (flag & PHP_CREDITS_FULLPAGE) {
- PUTS("<html><head><title>PHP Credits</title></head><body>\n");
- }
-
- php_info_print_style();
-
- PUTS("<h1 align=\"center\">PHP 4 Credits</h1>\n");
-
- if (flag & PHP_CREDITS_GROUP) {
- /* Group */
-
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP Group");
- php_info_print_table_row(1, "Thies C. Arntzen, Stig Bakken, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_GENERAL) {
- /* Design & Concept */
- php_info_print_table_start();
- php_info_print_table_header(1, "Language Design & Concept");
- php_info_print_table_row(1, "Andi Gutmans, Rasmus Lerdorf, Zeev Suraski");
- php_info_print_table_end();
-
- /* PHP 4 Language */
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "PHP 4 Authors");
- php_info_print_table_header(2, "Contribution", "Authors");
- CREDIT_LINE("Zend Scripting Language Engine", "Andi Gutmans, Zeev Suraski");
- CREDIT_LINE("Extension Module API", "Andi Gutmans, Zeev Suraski, Andrei Zmievski");
- CREDIT_LINE("UNIX Build and Modularization", "Stig Bakken, Sascha Schumann");
- CREDIT_LINE("Win32 Port", "Shane Caraveo, Zeev Suraski");
- CREDIT_LINE("Server API (SAPI) Abstraction Layer", "Andi Gutmans, Shane Caraveo, Zeev Suraski");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_SAPI) {
- /* SAPI Modules */
-
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "SAPI Modules");
- php_info_print_table_header(2, "Contribution", "Authors");
-#include "credits_sapi.h"
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_MODULES) {
- /* Modules */
-
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "Module Authors");
- php_info_print_table_header(2, "Module", "Authors");
-#include "credits_ext.h"
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_DOCS) {
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP Documentation Team");
- php_info_print_table_row(1, "Jouni Ahto, Alexander Aulbach, Stig Bakken, Rasmus Lerdorf, Egon Schmid, Lars Torben Wilson, Jim Winstead");
- php_info_print_table_row(1, "Edited by: Stig Bakken and Egon Schmid");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_QA) {
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP Quality Assurance Team");
- php_info_print_table_row(1, "Andre Langhorst, Derick Rethans, Hellekin O. Wolf, Jalal Pushman, James Moore, Jani Taskinen, Joey Smith, Olivier Cahagne, Phil Driscoll, Sebastian Bergmann, Zak Greant");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_WEB) {
- /* Website Team */
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP Website Team");
- php_info_print_table_row(1, "Gabor Hojtsy, Colin Viebrock, Jim Winstead");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_FULLPAGE) {
- PUTS("</body></html>\n");
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/credits.h b/ext/standard/credits.h
deleted file mode 100644
index 26bd43c26a..0000000000
--- a/ext/standard/credits.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef CREDITS_H
-#define CREDITS_H
-
-#ifndef HAVE_CREDITS_DEFS
-#define HAVE_CREDITS_DEFS
-
-#define PHP_CREDITS_GROUP (1<<0)
-#define PHP_CREDITS_GENERAL (1<<1)
-#define PHP_CREDITS_SAPI (1<<2)
-#define PHP_CREDITS_MODULES (1<<3)
-#define PHP_CREDITS_DOCS (1<<4)
-#define PHP_CREDITS_FULLPAGE (1<<5)
-#define PHP_CREDITS_QA (1<<6)
-#define PHP_CREDITS_WEB (1<<7)
-#define PHP_CREDITS_ALL 0xFFFFFFFF
-
-#endif /* HAVE_CREDITS_DEFS */
-
-PHPAPI void php_print_credits(int flag);
-
-#endif
diff --git a/ext/standard/credits_ext.h b/ext/standard/credits_ext.h
deleted file mode 100644
index e92ac845c1..0000000000
--- a/ext/standard/credits_ext.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- DO NOT EDIT THIS FILE!
-
- it has been automaticaly created by php4/scripts/credits from
- the information found in the various php4/ext/.../CREDITS and
- php4/sapi/.../CREDITS files
-
- if you want to change an entry you have to edit the appropriate
- CREDITS file instead
-
-*/
-
-CREDIT_LINE("aspell", "Rasmus Lerdorf");
-CREDIT_LINE("Assert", "Thies C. Arntzen");
-CREDIT_LINE("BC Math", "Andi Gutmans");
-CREDIT_LINE("bz2", "Sterling Hughes");
-CREDIT_LINE("Calendar", "Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong");
-CREDIT_LINE("ccvs", "Brendan W. McAdams, Doug DeJulio");
-CREDIT_LINE("cpdf", "Uwe Steinmann");
-CREDIT_LINE("crack", "Alexander Feldman");
-CREDIT_LINE("ctype", "Hartmut Holzgraefe");
-CREDIT_LINE("CURL", "Sterling Hughes");
-CREDIT_LINE("CyberCash", "Evan Klinger");
-CREDIT_LINE("Cyrus", "Sterling Hughes");
-CREDIT_LINE("DBA", "Sascha Schumann");
-CREDIT_LINE("dBase", "Jim Winstead");
-CREDIT_LINE("DBM", "Rasmus Lerdorf, Jim Winstead");
-CREDIT_LINE("dbplus", "Hartmut Holzgraefe");
-CREDIT_LINE("dbx (database abstraction)", "Marc Boeren, Rui Hirokawa, Frank M. Kromann");
-CREDIT_LINE("domxml", "Uwe Steinmann");
-CREDIT_LINE("dotnet", "Sam Ruby");
-CREDIT_LINE("EXIF", "Rasmus Lerdorf, Marcus Boerger");
-CREDIT_LINE("FBSQL", "Frank M. Kromann");
-CREDIT_LINE("FDF", "Uwe Steinmann");
-CREDIT_LINE("FilePro", "Chad Robinson");
-CREDIT_LINE("FRIBIDI", "Onn Ben-Zvi");
-CREDIT_LINE("FTP", "Andrew Skalski");
-CREDIT_LINE("GD imaging", "Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto");
-CREDIT_LINE("GetText", "Alex Plotnick");
-CREDIT_LINE("GNU GMP support", "Stanislav Malyshev");
-CREDIT_LINE("HyperWave", "Uwe Steinmann");
-CREDIT_LINE("icap", "Mark Musone");
-CREDIT_LINE("IMAP", "Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky");
-CREDIT_LINE("Informix", "Danny Heijl, Christian Cartus");
-CREDIT_LINE("Ingres II", "David Hénot");
-CREDIT_LINE("InterBase", "Jouni Ahto, Andrew Avdeev");
-CREDIT_LINE("IRCG", "Sascha Schumann");
-CREDIT_LINE("Java", "Sam Ruby");
-CREDIT_LINE("LDAP", "Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas");
-CREDIT_LINE("Mailparse MIME parsing and manipulation functions", "Wez Furlong");
-CREDIT_LINE("MCAL", "Mark Musone, Chuck Hagenbuch");
-CREDIT_LINE("mcrypt", "Sascha Schumann, Derick Rethans");
-CREDIT_LINE("mhash", "Sascha Schumann");
-CREDIT_LINE("MING", "Dave Hayden");
-CREDIT_LINE("mnoGoSearch", "Alex Barkov, Ramil Kalimullin, Sergey Kartashoff");
-CREDIT_LINE("MS SQL", "Frank M. Kromann");
-CREDIT_LINE("msession", "Mark L. Woodward");
-CREDIT_LINE("mSQL", "Zeev Suraski");
-CREDIT_LINE("Multibyte (Japanese) String Functions", "Tsukada Takuya");
-CREDIT_LINE("MySQL", "Zeev Suraski");
-CREDIT_LINE("ncurses", "Hartmut Holzgraefe");
-CREDIT_LINE("OCI8", "Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson");
-CREDIT_LINE("ODBC", "Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky");
-CREDIT_LINE("OpenSSL", "Stig Venaas, Wez Furlong, Sascha Kettler");
-CREDIT_LINE("Oracle", "Stig Bakken, Mitch Golden, Rasmus Lerdorf, Andreas Karajannis, Thies C. Arntzen");
-CREDIT_LINE("Ovrimos", "Nikos Mavroyanopoulos");
-CREDIT_LINE("pcntl", "Jason Greene");
-CREDIT_LINE("PDF", "Uwe Steinmann, Rainer Schaaf");
-CREDIT_LINE("Perl Compatible Regexps", "Andrei Zmievski");
-CREDIT_LINE("Posix", "Kristian Köhntopp");
-CREDIT_LINE("PostgreSQL", "Jouni Ahto, Zeev Suraski, Yasuo Ohgaki");
-CREDIT_LINE("Pspell", "Vlad Krupin");
-CREDIT_LINE("qtdom", "Jan Borsodi");
-CREDIT_LINE("Readline", "Thies C. Arntzen");
-CREDIT_LINE("Recode", "Kristian Köhntopp");
-CREDIT_LINE("Satellite (CORBA)", "David Eriksson");
-CREDIT_LINE("Sessions", "Sascha Schumann, Andrei Zmievski");
-CREDIT_LINE("Shared Memory Operations", "Slava Poliakov, Ilia Alshanetsky");
-CREDIT_LINE("SNMP", "Rasmus Lerdorf");
-CREDIT_LINE("Sockets", "Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene");
-CREDIT_LINE("SWF", "Sterling Hughes");
-CREDIT_LINE("Sybase-CT", "Zeev Suraski, Tom May");
-CREDIT_LINE("Sybase-DB", "Zeev Suraski");
-CREDIT_LINE("System V Semaphores", "Tom May");
-CREDIT_LINE("System V Shared Memory", "Christian Cartus");
-CREDIT_LINE("tokenizer", "Andrei Zmievski");
-CREDIT_LINE("User-space object overloading", "Andrei Zmievski");
-CREDIT_LINE("Verisign Payflow Pro", "John Donagher, David Croft");
-CREDIT_LINE("Vpopmail", "David Croft, Boian Bonev");
-CREDIT_LINE("W32API", "James Moore");
-CREDIT_LINE("WDDX", "Andrei Zmievski");
-CREDIT_LINE("Win32 COM", "Zeev Suraski, Harald Radi, Alan Brown");
-CREDIT_LINE("XML", "Stig Bakken, Thies C. Arntzen");
-CREDIT_LINE("xmlrpc", "Dan Libby");
-CREDIT_LINE("YAZ", "Adam Dickmeiss");
-CREDIT_LINE("Yellow Pages", "Stephanie Wehner, Fredrik Ohrn");
-CREDIT_LINE("Zip", "Sterling Hughes");
-CREDIT_LINE("Zlib", "Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti");
diff --git a/ext/standard/credits_sapi.h b/ext/standard/credits_sapi.h
deleted file mode 100644
index af50040a33..0000000000
--- a/ext/standard/credits_sapi.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- DO NOT EDIT THIS FILE!
-
- it has been automaticaly created by php4/scripts/credits from
- the information found in the various php4/ext/.../CREDITS and
- php4/sapi/.../CREDITS files
-
- if you want to change an entry you have to edit the appropriate
- CREDITS file instead
-
-*/
-
-CREDIT_LINE("AOLserver", "Sascha Schumann");
-CREDIT_LINE("Apache 1.3", "Rasmus Lerdorf, Zeev Suraski, Stig Bakken, David Sklar");
-CREDIT_LINE("Apache 2.0", "Sascha Schumann, Aaron Bannert");
-CREDIT_LINE("Caudium / Roxen", "David Hedbor");
-CREDIT_LINE("CGI", "Rasmus Lerdorf, Stig Bakken");
-CREDIT_LINE("CLI", "Rasmus Lerdorf, Stig Bakken, Edin Kadribasic");
-CREDIT_LINE("fastcgi", "Ben Mansell");
-CREDIT_LINE("fhttpd", "Alex Belits");
-CREDIT_LINE("ISAPI", "Andi Gutmans, Zeev Suraski");
-CREDIT_LINE("Java Servlet", "Sam Ruby");
-CREDIT_LINE("NSAPI", "Jayakumar Muthukumarasamy");
-CREDIT_LINE("phttpd", "Thies C. Arntzen");
-CREDIT_LINE("pi3web", "Holger Zimmermann");
-CREDIT_LINE("thttpd", "Sascha Schumann");
-CREDIT_LINE("tux", "Sascha Schumann");
-CREDIT_LINE("WebJames", "Alex Waugh");
diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c
deleted file mode 100644
index 9e0719fa79..0000000000
--- a/ext/standard/crypt.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Bakken <ssb@gaurdian.no> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-#include <stdlib.h>
-
-#include "php.h"
-
-#if HAVE_CRYPT
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-#if TM_IN_SYS_TIME
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <process.h>
-extern char *crypt(char *__key, char *__salt);
-#endif
-
-#include "php_lcg.h"
-#include "php_crypt.h"
-#include "php_rand.h"
-
-/*
- The capabilities of the crypt() function is determined by the test programs
- run by configure from aclocal.m4. They will set PHP_STD_DES_CRYPT,
- PHP_EXT_DES_CRYPT, PHP_MD5_CRYPT and PHP_BLOWFISH_CRYPT as appropriate
- for the target platform
-*/
-#if PHP_STD_DES_CRYPT
-#define PHP_MAX_SALT_LEN 2
-#endif
-
-#if PHP_EXT_DES_CRYPT
-#undef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 9
-#endif
-
-#if PHP_MD5_CRYPT
-#undef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 12
-#endif
-
-#if PHP_BLOWFISH_CRYPT
-#undef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 60
-#endif
-
- /*
- * If the configure-time checks fail, we provide DES.
- * XXX: This is a hack. Fix the real problem
- */
-
-#ifndef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 2
-#undef PHP_STD_DES_CRYPT
-#define PHP_STD_DES_CRYPT 1
-#endif
-
-
-#define PHP_CRYPT_RAND php_rand(TSRMLS_C)
-
-static int php_crypt_rand_seeded=0;
-
-PHP_MINIT_FUNCTION(crypt)
-{
- REGISTER_LONG_CONSTANT("CRYPT_SALT_LENGTH", PHP_MAX_SALT_LEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_STD_DES", PHP_STD_DES_CRYPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_EXT_DES", PHP_EXT_DES_CRYPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_MD5", PHP_MD5_CRYPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_BLOWFISH", PHP_BLOWFISH_CRYPT, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(crypt)
-{
- if(!php_crypt_rand_seeded) {
- php_srand(time(0) * getpid() * (unsigned long) (php_combined_lcg(TSRMLS_C) * 10000.0) TSRMLS_CC);
- php_crypt_rand_seeded=1;
- }
- return SUCCESS;
-}
-
-
-static unsigned char itoa64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-static void php_to64(char *s, long v, int n)
-{
- while (--n >= 0) {
- *s++ = itoa64[v&0x3f];
- v >>= 6;
- }
-}
-
-/* {{{ proto string crypt(string str [, string salt])
- Encrypt a string */
-PHP_FUNCTION(crypt)
-{
- char salt[PHP_MAX_SALT_LEN+1];
- char *str, *salt_in = NULL;
- int str_len, salt_in_len;
-
- salt[0]=salt[PHP_MAX_SALT_LEN]='\0';
- /* This will produce suitable results if people depend on DES-encryption
- available (passing always 2-character salt). At least for glibc6.1 */
- memset(&salt[1], '$', PHP_MAX_SALT_LEN-1);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &str, &str_len,
- &salt_in, &salt_in_len) == FAILURE) {
- return;
- }
-
- if (salt_in) {
- memcpy(salt, salt_in, MIN(PHP_MAX_SALT_LEN, salt_in_len));
- }
-
- /* The automatic salt generation only covers standard DES and md5-crypt */
- if(!*salt) {
-#if PHP_MD5_CRYPT
- strcpy(salt, "$1$");
- php_to64(&salt[3], PHP_CRYPT_RAND, 4);
- php_to64(&salt[7], PHP_CRYPT_RAND, 4);
- strcpy(&salt[11], "$");
-#elif PHP_STD_DES_CRYPT
- php_to64(&salt[0], PHP_CRYPT_RAND, 2);
- salt[2] = '\0';
-#endif
- }
-
- RETVAL_STRING(crypt(str, salt), 1);
-}
-/* }}} */
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/cyr_convert.c b/ext/standard/cyr_convert.c
deleted file mode 100644
index 9eab83e546..0000000000
--- a/ext/standard/cyr_convert.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kirill Maximov <kir@rus.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-
-#include "php.h"
-#include "cyr_convert.h"
-
-#include <stdio.h>
-
-/*****************************************************************************
-* This is codetables for different Cyrillic charsets (relative to koi8-r).
-* Each table contains data for 128-255 symbols from ASCII table.
-* First 256 symbols are for conversion from koi8-r to corresponding charset,
-* second 256 symbols are for reverse conversion, from charset to koi8-r.
-*
-* Here we have the following tables:
-* _cyr_win1251 - for windows-1251 charset
-* _cyr_iso88595 - for iso8859-5 charset
-* _cyr_cp866 - for x-cp866 charset
-* _cyr_mac - for x-mac-cyrillic charset
-*
-*****************************************************************************/
-
-typedef unsigned char _cyr_charset_table[512];
-
-/* {{{ const static _cyr_charset_table _cyr_win1251
- */
-const static _cyr_charset_table _cyr_win1251 = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
-46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
-154,174,190,46,159,189,46,46,179,191,180,157,46,46,156,183,
-46,46,182,166,173,46,46,158,163,152,164,155,46,46,46,167,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,184,186,32,179,191,32,32,32,32,32,180,162,32,
-32,32,32,168,170,32,178,175,32,32,32,32,32,165,161,169,
-254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
-239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
-222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
-207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218,
-},
-_cyr_cp866 = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-35,35,35,124,124,124,124,43,43,124,124,43,43,43,43,43,
-43,45,45,124,45,43,124,124,43,43,45,45,124,45,43,45,
-45,45,45,43,43,43,43,43,43,43,43,35,35,124,124,35,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
-179,163,180,164,183,167,190,174,32,149,158,32,152,159,148,154,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-205,186,213,241,243,201,32,245,187,212,211,200,190,32,247,198,
-199,204,181,240,242,185,32,244,203,207,208,202,216,32,246,32,
-238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,
-175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,
-158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
-143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154,
-},
-_cyr_iso88595 = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,179,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
-32,163,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,241,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,161,32,32,32,32,32,32,32,32,32,32,32,32,
-238,208,209,230,212,213,228,211,229,216,217,218,219,220,221,222,
-223,239,224,225,226,227,214,210,236,235,215,232,237,233,231,234,
-206,176,177,198,180,181,196,179,197,184,185,186,187,188,189,190,
-191,207,192,193,194,195,182,178,204,203,183,200,205,201,199,202,
-},
-_cyr_mac = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
-176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
-128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
-144,145,146,147,148,149,150,151,152,153,154,155,156,179,163,209,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,255,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
-208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
-160,161,162,222,164,165,166,167,168,169,170,171,172,173,174,175,
-176,177,178,221,180,181,182,183,184,185,186,187,188,189,190,191,
-254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
-239,223,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
-158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
-143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154,
-};
-/* }}} */
-
-/* {{{ php_convert_cyr_string
-* This is the function that performs real in-place conversion of the string
-* between charsets.
-* Parameters:
-* str - string to be converted
-* from,to - one-symbol label of source and destination charset
-* The following symbols are used as labels:
-* k - koi8-r
-* w - windows-1251
-* i - iso8859-5
-* a - x-cp866
-* d - x-cp866
-* m - x-mac-cyrillic
-*****************************************************************************/
-static char * php_convert_cyr_string(unsigned char *str, int length, char from, char to)
-{
- const unsigned char *from_table, *to_table;
- unsigned char tmp;
- int i;
-
- from_table = NULL;
- to_table = NULL;
-
- switch (toupper(from))
- {
- case 'W':
- from_table = _cyr_win1251;
- break;
- case 'A':
- case 'D':
- from_table = _cyr_cp866;
- break;
- case 'I':
- from_table = _cyr_iso88595;
- break;
- case 'M':
- from_table = _cyr_mac;
- break;
- case 'K':
- break;
- default:
- php_error(E_WARNING, "Unknown source charset: %c", from);
- break;
- }
-
- switch (toupper(to))
- {
- case 'W':
- to_table = _cyr_win1251;
- break;
- case 'A':
- case 'D':
- to_table = _cyr_cp866;
- break;
- case 'I':
- to_table = _cyr_iso88595;
- break;
- case 'M':
- to_table = _cyr_mac;
- break;
- case 'K':
- break;
- default:
- php_error(E_WARNING, "Unknown destination charset: %c", to);
- break;
- }
-
-
- if (!str)
- return (char *)str;
-
- for( i = 0; i<length; i++)
- {
- tmp = (from_table == NULL)? str[i] : from_table[ str[i] ];
- str[i] = (to_table == NULL) ? tmp : to_table[tmp + 256];
- }
- return (char *)str;
-}
-/* }}} */
-
-/* {{{ proto string convert_cyr_string(string str, string from, string to)
- Convert from one Cyrillic character set to another */
-PHP_FUNCTION(convert_cyr_string)
-{
- pval **str_arg, **fr_cs, **to_cs;
- unsigned char *str;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&str_arg,&fr_cs, &to_cs)==FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str_arg);
- convert_to_string_ex(fr_cs);
- convert_to_string_ex(to_cs);
-
- str = (unsigned char*) estrndup(Z_STRVAL_PP(str_arg), Z_STRLEN_PP(str_arg));
-
- php_convert_cyr_string(str, Z_STRLEN_PP(str_arg), Z_STRVAL_PP(fr_cs)[0], Z_STRVAL_PP(to_cs)[0]);
- RETVAL_STRING((char *)str, 0)
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/cyr_convert.h b/ext/standard/cyr_convert.h
deleted file mode 100644
index aa176a3614..0000000000
--- a/ext/standard/cyr_convert.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kirill Maximov <kir@rus.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef CYR_CONVERT_H
-#define CYR_CONVERT_H
-
-PHP_FUNCTION(convert_cyr_string);
-
-#endif /* CYR_CONVERT_H */
-
-
-
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
deleted file mode 100644
index d7fc392dcd..0000000000
--- a/ext/standard/datetime.c
+++ /dev/null
@@ -1,854 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-
-#include "php.h"
-#include "zend_operators.h"
-#include "datetime.h"
-#include "php_globals.h"
-
-#include <time.h>
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#include <stdio.h>
-
-#include "php_parsedate.h"
-
-char *mon_full_names[] =
-{
- "January", "February", "March", "April",
- "May", "June", "July", "August",
- "September", "October", "November", "December"
-};
-char *mon_short_names[] =
-{
- "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-char *day_full_names[] =
-{
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
-};
-char *day_short_names[] =
-{
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-};
-
-#if !defined(HAVE_TM_ZONE) && !defined(_TIMEZONE) && !defined(HAVE_DECLARED_TIMEZONE)
-extern time_t timezone;
-extern int daylight;
-#endif
-
-static int phpday_tab[2][12] =
-{
- {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
- {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
-};
-
-#define isleap(year) (((year%4) == 0 && (year%100)!=0) || (year%400)==0)
-
-/* {{{ proto int time(void)
- Return current UNIX timestamp */
-PHP_FUNCTION(time)
-{
- RETURN_LONG((long)time(NULL));
-}
-/* }}} */
-
-/* {{{ php_mktime
- */
-void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
- pval **arguments[7];
- struct tm *ta, tmbuf;
- time_t t;
- int i, gmadjust, seconds, arg_count = ZEND_NUM_ARGS();
- int is_dst = -1;
-
- if (arg_count > 7 || zend_get_parameters_array_ex(arg_count, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* convert supplied arguments to longs */
- for (i = 0; i < arg_count; i++) {
- convert_to_long_ex(arguments[i]);
- }
- t = time(NULL);
-#ifdef HAVE_TZSET
- tzset();
-#endif
- /*
- ** Set default time parameters with local time values,
- ** EVEN when some GMT time parameters are specified!
- ** This may give strange result, with PHP gmmktime(0, 0, 0),
- ** which is assumed to return GMT midnight time
- ** for today (in localtime), so that the result time may be
- ** AFTER or BEFORE the current time.
- ** May be we should initialize tn using gmtime(), so that
- ** default parameters for PHP gmmktime would be the current
- ** GMT time values...
- */
- ta = php_localtime_r(&t, &tmbuf);
-
- /* Let DST be unknown. mktime() should compute the right value
- ** and behave correctly. Unless the user overrides this.
- */
- ta->tm_isdst = -1;
-
- /*
- ** Now change date values with supplied parameters.
- */
- switch(arg_count) {
- case 7:
- ta->tm_isdst = is_dst = Z_LVAL_PP(arguments[6]);
- /* fall-through */
- case 6:
- /* special case:
- a zero in year, month and day is considered illegal
- as it would be interpreted as 30.11.1999 otherwise
- */
- if ( ( Z_LVAL_PP(arguments[5])==0)
- &&(Z_LVAL_PP(arguments[4])==0)
- &&(Z_LVAL_PP(arguments[3])==0)
- ) {
- RETURN_LONG(-1);
- }
-
- /*
- ** Accept parameter in range 0..1000 interpreted as 1900..2900
- ** (if 100 is given, it means year 2000)
- ** or in range 1001..9999 interpreted as is (this will store
- ** negative tm_year for years in range 1001..1899)
- ** This function is then Y2K ready, and accepts a wide range of
- ** dates including the whole gregorian calendar.
- ** But it cannot represent ancestral dates prior to year 1001.
- ** Additionally, input parameters of 0..70 are mapped to 100..170
- */
- if (Z_LVAL_PP(arguments[5]) < 70)
- ta->tm_year = Z_LVAL_PP(arguments[5]) + 100;
- else
- ta->tm_year = Z_LVAL_PP(arguments[5])
- - ((Z_LVAL_PP(arguments[5]) > 1000) ? 1900 : 0);
- /* fall-through */
- case 5:
- ta->tm_mday = Z_LVAL_PP(arguments[4]);
- /* fall-through */
- case 4:
- ta->tm_mon = Z_LVAL_PP(arguments[3]) - 1;
- /* fall-through */
- case 3:
- ta->tm_sec = Z_LVAL_PP(arguments[2]);
- /* fall-through */
- case 2:
- ta->tm_min = Z_LVAL_PP(arguments[1]);
- /* fall-through */
- case 1:
- ta->tm_hour = Z_LVAL_PP(arguments[0]);
- /* fall-through */
- case 0:
- break;
- }
-
- seconds = mktime(ta);
- if (is_dst == -1)
- is_dst = ta->tm_isdst;
-
- if (gm) {
-#if HAVE_TM_GMTOFF
- /*
- ** mktime(ta) very nicely just filled ta->tm_gmtoff with
- ** the exactly right value for adjustment if we want GMT.
- */
- gmadjust = ta->tm_gmtoff;
-#else
- /*
- ** If correcting for daylight savings time, we set the adjustment to
- ** the value of timezone - 3600 seconds.
- */
-#ifdef __CYGWIN__
- gmadjust = -(is_dst ? _timezone - 3600 : _timezone);
-#else
- gmadjust = -(is_dst ? timezone - 3600 : timezone);
-#endif
-#endif
- seconds += gmadjust;
- }
-
- RETURN_LONG(seconds);
-}
-/* }}} */
-
-/* {{{ proto int mktime(int hour, int min, int sec, int mon, int day, int year)
- Get UNIX timestamp for a date */
-PHP_FUNCTION(mktime)
-{
- php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int gmmktime(int hour, int min, int sec, int mon, int day, int year)
- Get UNIX timestamp for a GMT date */
-PHP_FUNCTION(gmmktime)
-{
- php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_date
- */
-static void
-php_date(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
- pval **format, **timestamp;
- time_t the_time;
- struct tm *ta, tmbuf;
- int i, size = 0, length, h, beat, fd, wd, yd, wk;
- char tmp_buff[32];
-#if !HAVE_TM_GMTOFF
- long tzone;
- char *tname[2]= {"GMT Standard Time", "BST"};
-#endif
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &format) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- the_time = time(NULL);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &format, &timestamp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(timestamp);
- the_time = Z_LVAL_PP(timestamp);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(format);
-
- if (gm) {
- ta = php_gmtime_r(&the_time, &tmbuf);
-#if !HAVE_TM_GMTOFF
- tzone = 0;
-#endif
- } else {
- ta = php_localtime_r(&the_time, &tmbuf);
-#if !HAVE_TM_GMTOFF
-#ifdef __CYGWIN__
- tzone = _timezone;
-#else
- tzone = timezone;
-#endif
- tname[0] = tzname[0];
-#endif
- }
-
- if (!ta) { /* that really shouldn't happen... */
- php_error(E_WARNING, "unexpected error in date()");
- RETURN_FALSE;
- }
- for (i = 0; i < Z_STRLEN_PP(format); i++) {
- switch (Z_STRVAL_PP(format)[i]) {
- case 'r': /* rfc822 format */
- size += 31;
- break;
- case 'U': /* seconds since the epoch */
- size += 10;
- break;
- case 'F': /* month, textual, full */
- case 'l': /* day (of the week), textual */
- size += 28;
- break;
- case 'T': /* timezone name */
-#if HAVE_TM_ZONE
- size += strlen(ta->tm_zone);
-#elif HAVE_TZNAME
- size += strlen(tname[0]);
-#endif
- break;
- case 'Z': /* timezone offset in seconds */
- size += 6;
- break;
- case 'O': /* GMT offset in [+-]HHMM format */
- size += 5;
- break;
- case 'Y': /* year, numeric, 4 digits */
- size += 4;
- break;
- case 'M': /* month, textual, 3 letters */
- case 'D': /* day, textual, 3 letters */
- case 'z': /* day of the year, 1 to 366 */
- case 'B': /* Swatch Beat, 3 digits */
- size += 3;
- break;
- case 'y': /* year, numeric, 2 digits */
- case 'm': /* month, numeric */
- case 'n': /* month, numeric, no leading zeroes */
- case 'd': /* day of the month, numeric */
- case 'j': /* day of the month, numeric, no leading zeros */
- case 'H': /* hour, numeric, 24 hour format */
- case 'h': /* hour, numeric, 12 hour format */
- case 'G': /* hour, numeric, 24 hour format, no leading zeroes */
- case 'g': /* hour, numeric, 12 hour format, no leading zeroes */
- case 'i': /* minutes, numeric */
- case 's': /* seconds, numeric */
- case 'A': /* AM/PM */
- case 'a': /* am/pm */
- case 'S': /* standard english suffix for the day of the month (e.g. 3rd, 2nd, etc) */
- case 't': /* days in current month */
- case 'W': /* ISO-8601 week number of year, weeks starting on Monday */
- size += 2;
- break;
- case '\\':
- if(i < Z_STRLEN_PP(format)-1) {
- i++;
- }
- size ++;
- break;
- case 'L': /* boolean for leap year */
- case 'w': /* day of the week, numeric */
- case 'I': /* DST? */
- default:
- size++;
- break;
- }
- }
-
- Z_STRVAL_P(return_value) = (char *) emalloc(size + 1);
- Z_STRVAL_P(return_value)[0] = '\0';
-
- for (i = 0; i < Z_STRLEN_PP(format); i++) {
- switch (Z_STRVAL_PP(format)[i]) {
- case '\\':
- if(i < Z_STRLEN_PP(format)-1) {
- char ch[2];
- ch[0]=Z_STRVAL_PP(format)[i+1];
- ch[1]='\0';
- strcat(Z_STRVAL_P(return_value), ch);
- i++;
- }
- break;
- case 'U': /* seconds since the epoch */
- sprintf(tmp_buff, "%ld", (long)the_time); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'F': /* month, textual, full */
- strcat(Z_STRVAL_P(return_value), mon_full_names[ta->tm_mon]);
- break;
- case 'l': /* day (of the week), textual, full */
- strcat(Z_STRVAL_P(return_value), day_full_names[ta->tm_wday]);
- break;
- case 'Y': /* year, numeric, 4 digits */
- sprintf(tmp_buff, "%d", ta->tm_year + 1900); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'M': /* month, textual, 3 letters */
- strcat(Z_STRVAL_P(return_value), mon_short_names[ta->tm_mon]);
- break;
- case 'D': /* day (of the week), textual, 3 letters */
- strcat(Z_STRVAL_P(return_value), day_short_names[ta->tm_wday]);
- break;
- case 'z': /* day (of the year) */
- sprintf(tmp_buff, "%d", ta->tm_yday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'y': /* year, numeric, 2 digits */
- sprintf(tmp_buff, "%02d", ((ta->tm_year)%100)); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'm': /* month, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_mon + 1); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'n': /* month, numeric, no leading zeros */
- sprintf(tmp_buff, "%d", ta->tm_mon + 1); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'd': /* day of the month, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_mday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'j':
- sprintf(tmp_buff, "%d", ta->tm_mday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'H': /* hour, numeric, 24 hour format */
- sprintf(tmp_buff, "%02d", ta->tm_hour); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'h': /* hour, numeric, 12 hour format */
- h = ta->tm_hour % 12; if (h==0) h = 12;
- sprintf(tmp_buff, "%02d", h); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'G': /* hour, numeric, 24 hour format, no leading zeros */
- sprintf(tmp_buff, "%d", ta->tm_hour); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'g': /* hour, numeric, 12 hour format, no leading zeros */
- h = ta->tm_hour % 12; if (h==0) h = 12;
- sprintf(tmp_buff, "%d", h); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'i': /* minutes, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_min); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 's': /* seconds, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_sec); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'A': /* AM/PM */
- strcat(Z_STRVAL_P(return_value), (ta->tm_hour >= 12 ? "PM" : "AM"));
- break;
- case 'a': /* am/pm */
- strcat(Z_STRVAL_P(return_value), (ta->tm_hour >= 12 ? "pm" : "am"));
- break;
- case 'S': /* standard english suffix, e.g. 2nd/3rd for the day of the month */
- if (ta->tm_mday >= 10 && ta->tm_mday <= 19) {
- strcat(Z_STRVAL_P(return_value), "th");
- } else {
- switch (ta->tm_mday % 10) {
- case 1:
- strcat(Z_STRVAL_P(return_value), "st");
- break;
- case 2:
- strcat(Z_STRVAL_P(return_value), "nd");
- break;
- case 3:
- strcat(Z_STRVAL_P(return_value), "rd");
- break;
- default:
- strcat(Z_STRVAL_P(return_value), "th");
- break;
- }
- }
- break;
- case 't': /* days in current month */
- sprintf(tmp_buff, "%2d", phpday_tab[isleap((ta->tm_year+1900))][ta->tm_mon] );
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'w': /* day of the week, numeric EXTENSION */
- sprintf(tmp_buff, "%01d", ta->tm_wday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'O': /* GMT offset in [+-]HHMM format */
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%c%02d%02d", (ta->tm_gmtoff < 0) ? '-' : '+', abs(ta->tm_gmtoff / 3600), abs( ta->tm_gmtoff % 3600));
-#else
- sprintf(tmp_buff, "%c%02d%02d", ((ta->tm_isdst ? tzone - 3600:tzone)>0)?'-':'+', abs((ta->tm_isdst ? tzone - 3600 : tzone) / 3600), abs((ta->tm_isdst ? tzone - 3600 : tzone) % 3600));
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'Z': /* timezone offset in seconds */
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%ld", ta->tm_gmtoff);
-#else
- sprintf(tmp_buff, "%ld", ta->tm_isdst ? -(tzone- 3600) : -tzone);
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'L': /* boolean for leapyear */
- sprintf(tmp_buff, "%d", (isleap((ta->tm_year+1900)) ? 1 : 0 ) );
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'T': /* timezone name */
-#if HAVE_TM_ZONE
- strcat(Z_STRVAL_P(return_value), ta->tm_zone);
-#elif HAVE_TZNAME
- strcat(Z_STRVAL_P(return_value), tname[0]);
-#endif
- break;
- case 'B': /* Swatch Beat a.k.a. Internet Time */
- beat = (((((long)the_time)-(((long)the_time) -
- ((((long)the_time) % 86400) + 3600))) * 10) / 864);
- while (beat < 0) {
- beat += 1000;
- }
- beat = beat % 1000;
- sprintf(tmp_buff, "%03d", beat); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'I':
- sprintf(tmp_buff, "%d", ta->tm_isdst);
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'r':
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%3s, %2d %3s %04d %02d:%02d:%02d %c%02d%02d",
- day_short_names[ta->tm_wday],
- ta->tm_mday,
- mon_short_names[ta->tm_mon],
- ta->tm_year + 1900,
- ta->tm_hour,
- ta->tm_min,
- ta->tm_sec,
- (ta->tm_gmtoff < 0) ? '-' : '+',
- abs(ta->tm_gmtoff / 3600),
- abs( ta->tm_gmtoff % 3600)
- );
-#else
- sprintf(tmp_buff, "%3s, %2d %3s %04d %02d:%02d:%02d %c%02d%02d",
- day_short_names[ta->tm_wday],
- ta->tm_mday,
- mon_short_names[ta->tm_mon],
- ta->tm_year + 1900,
- ta->tm_hour,
- ta->tm_min,
- ta->tm_sec,
- ((ta->tm_isdst ? tzone - 3600 : tzone) > 0) ? '-' : '+',
- abs((ta->tm_isdst ? tzone - 3600 : tzone) / 3600),
- abs((ta->tm_isdst ? tzone - 3600 : tzone) % 3600)
- );
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'W': /* ISO-8601 week number of year, weeks starting on Monday */
- wd = ta->tm_wday==0 ? 7 : ta->tm_wday;
- yd = ta->tm_yday + 1;
- fd = (7 + (wd - yd) % 7 ) % 7;
- wk = ( (yd + fd - 1) / 7 ) + 1;
- if (fd>3) {
- wk--;
- }
- sprintf(tmp_buff, "%d", wk); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
-
- default:
- length = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value)[length] = Z_STRVAL_PP(format)[i];
- Z_STRVAL_P(return_value)[length + 1] = '\0';
- break;
- }
- }
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto string date(string format [, int timestamp])
- Format a local time/date */
-PHP_FUNCTION(date)
-{
- php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string gmdate(string format [, int timestamp])
- Format a GMT/UTC date/time */
-PHP_FUNCTION(gmdate)
-{
- php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto array localtime([int timestamp [, bool associative_array]])
- Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array */
-PHP_FUNCTION(localtime)
-{
- zval **timestamp_arg, **assoc_array_arg;
- struct tm *ta, tmbuf;
- time_t timestamp;
- int assoc_array = 0;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count < 0 || arg_count > 2 ||
- zend_get_parameters_ex(arg_count, &timestamp_arg, &assoc_array_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (arg_count) {
- case 0:
- timestamp = (long)time(NULL);
- break;
- case 1:
- convert_to_long_ex(timestamp_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- break;
- case 2:
- convert_to_long_ex(timestamp_arg);
- convert_to_long_ex(assoc_array_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- assoc_array = Z_LVAL_PP(assoc_array_arg);
- break;
- }
- if (NULL == (ta = php_localtime_r(&timestamp, &tmbuf))) {
- php_error(E_WARNING, "%s(): invalid local time",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Cannot prepare return array from localtime");
- RETURN_FALSE;
- }
-
- if (assoc_array) {
- add_assoc_long(return_value, "tm_sec", ta->tm_sec);
- add_assoc_long(return_value, "tm_min", ta->tm_min);
- add_assoc_long(return_value, "tm_hour", ta->tm_hour);
- add_assoc_long(return_value, "tm_mday", ta->tm_mday);
- add_assoc_long(return_value, "tm_mon", ta->tm_mon);
- add_assoc_long(return_value, "tm_year", ta->tm_year);
- add_assoc_long(return_value, "tm_wday", ta->tm_wday);
- add_assoc_long(return_value, "tm_yday", ta->tm_yday);
- add_assoc_long(return_value, "tm_isdst", ta->tm_isdst);
- } else {
- add_next_index_long(return_value, ta->tm_sec);
- add_next_index_long(return_value, ta->tm_min);
- add_next_index_long(return_value, ta->tm_hour);
- add_next_index_long(return_value, ta->tm_mday);
- add_next_index_long(return_value, ta->tm_mon);
- add_next_index_long(return_value, ta->tm_year);
- add_next_index_long(return_value, ta->tm_wday);
- add_next_index_long(return_value, ta->tm_yday);
- add_next_index_long(return_value, ta->tm_isdst);
- }
-}
-/* }}} */
-
-/* {{{ proto array getdate([int timestamp])
- Get date/time information */
-PHP_FUNCTION(getdate)
-{
- pval **timestamp_arg;
- struct tm *ta, tmbuf;
- time_t timestamp;
-
- if (ZEND_NUM_ARGS() == 0) {
- timestamp = time(NULL);
- } else if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &timestamp_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long_ex(timestamp_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- }
-
- ta = php_localtime_r(&timestamp, &tmbuf);
- if (!ta) {
- php_error(E_WARNING, "Cannot perform date calculation");
- return;
- }
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- return;
- }
- add_assoc_long(return_value, "seconds", ta->tm_sec);
- add_assoc_long(return_value, "minutes", ta->tm_min);
- add_assoc_long(return_value, "hours", ta->tm_hour);
- add_assoc_long(return_value, "mday", ta->tm_mday);
- add_assoc_long(return_value, "wday", ta->tm_wday);
- add_assoc_long(return_value, "mon", ta->tm_mon + 1);
- add_assoc_long(return_value, "year", ta->tm_year + 1900);
- add_assoc_long(return_value, "yday", ta->tm_yday);
- add_assoc_string(return_value, "weekday", day_full_names[ta->tm_wday], 1);
- add_assoc_string(return_value, "month", mon_full_names[ta->tm_mon], 1);
- add_index_long(return_value, 0, timestamp);
-}
-/* }}} */
-
-/* {{{ php_std_date
- Return date string in standard format for http headers */
-char *php_std_date(time_t t)
-{
- struct tm *tm1, tmbuf;
- char *str;
- TSRMLS_FETCH();
-
- tm1 = php_gmtime_r(&t, &tmbuf);
- str = emalloc(81);
- if (PG(y2k_compliance)) {
- snprintf(str, 80, "%s, %02d-%s-%04d %02d:%02d:%02d GMT",
- day_short_names[tm1->tm_wday],
- tm1->tm_mday,
- mon_short_names[tm1->tm_mon],
- tm1->tm_year+1900,
- tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
- } else {
- snprintf(str, 80, "%s, %02d-%s-%02d %02d:%02d:%02d GMT",
- day_short_names[tm1->tm_wday],
- tm1->tm_mday,
- mon_short_names[tm1->tm_mon],
- ((tm1->tm_year)%100),
- tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
- }
-
- str[79]=0;
- return (str);
-}
-/* }}} */
-
-/* {{{ proto bool checkdate(int month, int day, int year)
- Returns true(1) if it is a valid date in gregorian calendar */
-PHP_FUNCTION(checkdate)
-{
- pval **month, **day, **year;
- int m, d, y, res=0;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &month, &day, &year) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if(Z_TYPE_PP(year) == IS_STRING) {
- res = is_numeric_string(Z_STRVAL_PP(year), Z_STRLEN_PP(year), NULL, NULL, 0);
- if(res!=IS_LONG && res !=IS_DOUBLE) {
- RETURN_FALSE;
- }
- }
- convert_to_long_ex(day);
- convert_to_long_ex(month);
- convert_to_long_ex(year);
- y = Z_LVAL_PP(year);
- m = Z_LVAL_PP(month);
- d = Z_LVAL_PP(day);
-
- if (y < 1 || y > 32767) {
- RETURN_FALSE;
- }
- if (m < 1 || m > 12) {
- RETURN_FALSE;
- }
- if (d < 1 || d > phpday_tab[isleap(y)][m - 1]) {
- RETURN_FALSE;
- }
- RETURN_TRUE; /* True : This month, day, year arguments are valid */
-}
-/* }}} */
-
-#if HAVE_STRFTIME
-/* {{{ _php_strftime
- */
-void _php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
- pval **format_arg, **timestamp_arg;
- char *format, *buf;
- time_t timestamp;
- struct tm *ta, tmbuf;
- int max_reallocs = 5;
- size_t buf_len=64, real_len;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &format_arg)==FAILURE) {
- RETURN_FALSE;
- }
- time(&timestamp);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &format_arg, &timestamp_arg)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(timestamp_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(format_arg);
- if (Z_STRLEN_PP(format_arg)==0) {
- RETURN_FALSE;
- }
- if (timestamp < 0) {
- RETURN_FALSE;
- }
- format = Z_STRVAL_PP(format_arg);
- if (gm) {
- ta = php_gmtime_r(&timestamp, &tmbuf);
- } else {
- ta = php_localtime_r(&timestamp, &tmbuf);
- }
-
- buf = (char *) emalloc(buf_len);
- while ((real_len=strftime(buf, buf_len, format, ta))==buf_len || real_len==0) {
- buf_len *= 2;
- buf = (char *) erealloc(buf, buf_len);
- if(!--max_reallocs) break;
- }
-
- if(real_len && real_len != buf_len) {
- buf = (char *) erealloc(buf, real_len+1);
- RETURN_STRINGL(buf, real_len, 0);
- }
- efree(buf);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string strftime(string format [, int timestamp])
- Format a local time/date according to locale settings */
-PHP_FUNCTION(strftime)
-{
- _php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string gmstrftime(string format [, int timestamp])
- Format a GMT/UCT time/date according to locale settings */
-PHP_FUNCTION(gmstrftime)
-{
- _php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-#endif
-
-/* {{{ proto int strtotime(string time, int now)
- Convert string representation of date and time to a timestamp */
-PHP_FUNCTION(strtotime)
-{
- zval **z_time, **z_now;
- int argc;
- time_t now;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &z_time, &z_now)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(z_time);
- if (Z_STRLEN_PP(z_time) == 0)
- php_error (E_NOTICE, "strtotime() called with empty time parameter");
- if (argc == 2) {
- convert_to_long_ex(z_now);
- now = Z_LVAL_PP(z_now);
- RETURN_LONG(php_parse_date(Z_STRVAL_PP(z_time), &now));
- } else {
- RETURN_LONG(php_parse_date(Z_STRVAL_PP(z_time), NULL));
- }
-}
-/* }}} */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/datetime.h b/ext/standard/datetime.h
deleted file mode 100644
index d8ec4c5e32..0000000000
--- a/ext/standard/datetime.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef DATETIME_H
-#define DATETIME_H
-
-PHP_FUNCTION(time);
-PHP_FUNCTION(mktime);
-PHP_FUNCTION(gmmktime);
-PHP_FUNCTION(date);
-PHP_FUNCTION(gmdate);
-PHP_FUNCTION(localtime);
-PHP_FUNCTION(getdate);
-PHP_FUNCTION(checkdate);
-#if HAVE_STRFTIME
-PHP_FUNCTION(strftime);
-PHP_FUNCTION(gmstrftime);
-#endif
-PHP_FUNCTION(strtotime);
-
-extern char *php_std_date(time_t t);
-void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm);
-#if HAVE_STRFTIME
-void _php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm);
-#endif
-
-#endif /* DATETIME_H */
diff --git a/ext/standard/dir.c b/ext/standard/dir.c
deleted file mode 100644
index 2f768a3d0e..0000000000
--- a/ext/standard/dir.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes/startup/misc */
-
-#include "php.h"
-#include "fopen_wrappers.h"
-#include "file.h"
-#include "php_dir.h"
-
-#ifdef HAVE_DIRENT_H
-# include <dirent.h>
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-
-#ifdef PHP_WIN32
-#include "win32/readdir.h"
-#endif
-
-#ifdef HAVE_GLOB
-#ifndef PHP_WIN32
-#include <glob.h>
-#else
-#include "win32/glob.h"
-#endif
-#endif
-
-typedef struct {
- int default_dir;
-} php_dir_globals;
-
-#ifdef ZTS
-#define DIRG(v) TSRMG(dir_globals_id, php_dir_globals *, v)
-int dir_globals_id;
-#else
-#define DIRG(v) (dir_globals.v)
-php_dir_globals dir_globals;
-#endif
-
-#if 0
-typedef struct {
- int id;
- DIR *dir;
-} php_dir;
-
-static int le_dirp;
-#endif
-
-static zend_class_entry *dir_class_entry_ptr;
-
-#define FETCH_DIRP() \
- if (ZEND_NUM_ARGS() == 0) { \
- myself = getThis(); \
- if (myself) { \
- if (zend_hash_find(Z_OBJPROP_P(myself), "handle", sizeof("handle"), (void **)&tmp) == FAILURE) { \
- php_error(E_WARNING, "unable to find my handle property"); \
- RETURN_FALSE; \
- } \
- ZEND_FETCH_RESOURCE(dirp, php_stream *, tmp, -1, "Directory", php_file_le_stream()); \
- } else { \
- ZEND_FETCH_RESOURCE(dirp, php_stream *, 0, DIRG(default_dir), "Directory", php_file_le_stream()); \
- } \
- } else if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &id) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } else { \
- ZEND_FETCH_RESOURCE(dirp, php_stream *, id,-1, "Directory", php_file_le_stream()); \
- }
-
-static zend_function_entry php_dir_class_functions[] = {
- PHP_FALIAS(close, closedir, NULL)
- PHP_FALIAS(rewind, rewinddir, NULL)
- PHP_STATIC_FE("read", php_if_readdir, NULL)
- {NULL, NULL, NULL}
-};
-
-
-static void php_set_default_dir(int id TSRMLS_DC)
-{
- if (DIRG(default_dir)!=-1) {
- zend_list_delete(DIRG(default_dir));
- }
-
- if (id != -1) {
- zend_list_addref(id);
- }
-
- DIRG(default_dir) = id;
-}
-
-PHP_RINIT_FUNCTION(dir)
-{
- DIRG(default_dir) = -1;
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(dir)
-{
- static char tmpstr[2];
- zend_class_entry dir_class_entry;
-
- INIT_CLASS_ENTRY(dir_class_entry, "Directory", php_dir_class_functions);
- dir_class_entry_ptr = zend_register_internal_class(&dir_class_entry TSRMLS_CC);
-
-#ifdef ZTS
- ts_allocate_id(&dir_globals_id, sizeof(php_dir_globals), NULL, NULL);
-#endif
- tmpstr[0] = DEFAULT_SLASH;
- tmpstr[1] = '\0';
- REGISTER_STRING_CONSTANT("DIRECTORY_SEPARATOR", tmpstr, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-/* }}} */
-/* {{{ internal functions */
-
-static void _php_do_opendir(INTERNAL_FUNCTION_PARAMETERS, int createobject)
-{
- pval **arg;
- php_stream *dirp;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- dirp = php_stream_opendir(Z_STRVAL_PP(arg), ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-
- if (dirp == NULL) {
- RETURN_FALSE;
- }
-
- php_set_default_dir(dirp->rsrc_id TSRMLS_CC);
-
- if (createobject) {
- object_init_ex(return_value, dir_class_entry_ptr);
- add_property_stringl(return_value, "path", Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), 1);
- add_property_resource(return_value, "handle", dirp->rsrc_id);
- zend_list_addref(dirp->rsrc_id); /* might not be needed */
- php_stream_auto_cleanup(dirp); /* so we don't get warnings under debug */
- } else {
- php_stream_to_zval(dirp, return_value);
- }
-}
-
-/* }}} */
-/* {{{ proto mixed opendir(string path)
- Open a directory and return a dir_handle */
-
-PHP_FUNCTION(opendir)
-{
- _php_do_opendir(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-
-/* }}} */
-/* {{{ proto class dir(string directory)
- Directory class with properties, handle and class and methods read, rewind and close */
-
-PHP_FUNCTION(getdir)
-{
- _php_do_opendir(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-/* {{{ proto void closedir([resource dir_handle])
- Close directory connection identified by the dir_handle */
-
-PHP_FUNCTION(closedir)
-{
- pval **id, **tmp, *myself;
- php_stream *dirp;
-
- FETCH_DIRP();
-
- zend_list_delete(dirp->rsrc_id);
-
- if (dirp->rsrc_id == DIRG(default_dir)) {
- php_set_default_dir(-1 TSRMLS_CC);
- }
-}
-
-/* }}} */
-
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
-/* {{{ proto bool chroot(string directory)
- Change root directory */
-
-PHP_FUNCTION(chroot)
-{
- char *str;
- int ret, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
- ret = chroot(str);
-
- if (ret != 0) {
- php_error(E_WARNING, "chroot: %s (errno %d)", strerror(errno), errno);
- RETURN_FALSE;
- }
-
- ret = chdir("/");
-
- if (ret != 0) {
- php_error(E_WARNING, "chdir: %s (errno %d)", strerror(errno), errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-#endif
-
-/* {{{ proto bool chdir(string directory)
- Change the current directory */
-
-PHP_FUNCTION(chdir)
-{
- char *str;
- int ret, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && !php_checkuid(str, NULL, CHECKUID_ALLOW_ONLY_FILE)) {
- RETURN_FALSE;
- }
- ret = VCWD_CHDIR(str);
-
- if (ret != 0) {
- php_error(E_WARNING, "ChDir: %s (errno %d)", strerror(errno), errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-/* {{{ proto mixed getcwd(void)
- Gets the current directory */
-
-PHP_FUNCTION(getcwd)
-{
- char path[MAXPATHLEN];
- char *ret=NULL;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
-#if HAVE_GETCWD
- ret = VCWD_GETCWD(path, MAXPATHLEN);
-#elif HAVE_GETWD
- ret = VCWD_GETWD(path);
-/*
- * #warning is not ANSI C
- * #else
- * #warning no proper getcwd support for your site
- */
-#endif
-
- if (ret) {
- RETURN_STRING(path, 1);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto void rewinddir([resource dir_handle])
- Rewind dir_handle back to the start */
-
-PHP_FUNCTION(rewinddir)
-{
- pval **id, **tmp, *myself;
- php_stream *dirp;
-
- FETCH_DIRP();
-
- php_stream_rewinddir(dirp);
-}
-/* }}} */
-
-/* {{{ proto string readdir([resource dir_handle])
- Read directory entry from dir_handle */
-
-PHP_NAMED_FUNCTION(php_if_readdir)
-{
- pval **id, **tmp, *myself;
- php_stream *dirp;
- php_stream_dirent entry;
-
- FETCH_DIRP();
-
- if (php_stream_readdir(dirp, &entry)) {
- RETURN_STRINGL(entry.d_name, strlen(entry.d_name), 1);
- }
- RETURN_FALSE;
-}
-
-/* }}} */
-
-#ifdef HAVE_GLOB
-/* {{{ proto array glob(string pattern [, int flags])
- */
-PHP_FUNCTION(glob)
-{
- char *pattern = NULL;
- int pattern_len;
- long flags = 0;
- glob_t globbuf;
- int n, ret;
-
- if (PG(safe_mode)) {
- php_error(E_WARNING, "%s() SAFE MODE Restriction in effect, function is disabled",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &pattern, &pattern_len, &flags) == FAILURE)
- return;
-
- globbuf.gl_offs = 0;
- if (0 != (ret = glob(pattern, flags, NULL, &globbuf))) {
-#ifdef GLOB_NOMATCH
- if (GLOB_NOMATCH == ret) {
- /* Linux handles no matches as an error condition, but FreeBSD
- * doesn't. This ensure that if no match is found, an empty array
- * is always returned so it can be used with worrying in e.g.
- * foreach() */
- array_init(return_value);
- return;
- }
-#endif
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (n = 0; n < globbuf.gl_pathc; n++) {
- add_next_index_string(return_value, globbuf.gl_pathv[n], 1);
- }
- globfree(&globbuf);
-}
-/* }}} */
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/dl.c b/ext/standard/dl.c
deleted file mode 100644
index 6152f56deb..0000000000
--- a/ext/standard/dl.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Brian Schaffner <brian@tool.net> |
- | Shane Caraveo <shane@caraveo.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "dl.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "SAPI.h"
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-#if defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H
-#include <stdlib.h>
-#include <stdio.h>
-
-#if HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#ifdef PHP_WIN32
-#include "win32/param.h"
-#include "win32/winutil.h"
-#define GET_DL_ERROR() php_win_err()
-#else
-#include <sys/param.h>
-#define GET_DL_ERROR() DL_ERROR()
-#endif
-
-#endif /* defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H */
-
-
-/* {{{ proto int dl(string extension_filename)
- Load a PHP extension at runtime */
-PHP_FUNCTION(dl)
-{
- pval **file;
-
-#ifdef ZTS
- if ((strcmp(sapi_module.name, "cgi")!=0) && (strcmp(sapi_module.name, "cli")!=0)) {
- php_error(E_ERROR, "dl() is not supported in multithreaded Web servers - use extension statements in your php.ini");
- }
-#endif
-
- /* obtain arguments */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(file);
-
- if (!PG(enable_dl)) {
- php_error(E_ERROR, "Dynamically loaded extentions aren't enabled.");
- } else if (PG(safe_mode)) {
- php_error(E_ERROR, "Dynamically loaded extensions aren't allowed when running in SAFE MODE.");
- } else {
- php_dl(*file, MODULE_TEMPORARY, return_value TSRMLS_CC);
- EG(full_tables_cleanup) = 1;
- }
-}
-
-/* }}} */
-
-
-#if defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H
-
-#ifdef ZTS
-#define USING_ZTS 1
-#else
-#define USING_ZTS 0
-#endif
-
-/* {{{ php_dl
- */
-void php_dl(pval *file, int type, pval *return_value TSRMLS_DC)
-{
- void *handle;
- char *libpath;
- zend_module_entry *module_entry, *tmp;
- zend_module_entry *(*get_module)(void);
- int error_type;
- char *extension_dir;
-
- if (type==MODULE_PERSISTENT) {
- /* Use the configuration hash directly, the INI mechanism is not yet initialized */
- if (cfg_get_string("extension_dir", &extension_dir)==FAILURE) {
- extension_dir = PHP_EXTENSION_DIR;
- }
- } else {
- extension_dir = PG(extension_dir);
- }
-
- if (type==MODULE_TEMPORARY) {
- error_type = E_WARNING;
- } else {
- error_type = E_CORE_WARNING;
- }
-
- if (extension_dir && extension_dir[0]){
- int extension_dir_len = strlen(extension_dir);
-
- libpath = emalloc(extension_dir_len+Z_STRLEN_P(file)+2);
-
- if (IS_SLASH(extension_dir[extension_dir_len-1])) {
- sprintf(libpath, "%s%s", extension_dir, Z_STRVAL_P(file)); /* SAFE */
- } else {
- sprintf(libpath, "%s/%s", extension_dir, Z_STRVAL_P(file)); /* SAFE */
- }
- } else {
- libpath = estrndup(Z_STRVAL_P(file), Z_STRLEN_P(file));
- }
-
- /* load dynamic symbol */
- handle = DL_LOAD(libpath);
- if (!handle) {
- php_error(error_type, "Unable to load dynamic library '%s' - %s", libpath, GET_DL_ERROR());
- efree(libpath);
- RETURN_FALSE;
- }
-
- efree(libpath);
-
-
- get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, "get_module");
-
- /*
- * some OS prepend _ to symbol names while their dynamic linker
- * does not do that automatically. Thus we check manually for
- * _get_module.
- */
-
- if (!get_module)
- get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, "_get_module");
-
- if (!get_module) {
- DL_UNLOAD(handle);
- php_error(error_type, "Invalid library (maybe not a PHP library) '%s' ", Z_STRVAL_P(file));
- RETURN_FALSE;
- }
- module_entry = get_module();
- if ((module_entry->zend_debug != ZEND_DEBUG) || (module_entry->zts != USING_ZTS)
- || (module_entry->zend_api != ZEND_MODULE_API_NO)) {
- /* Check for pre-4.1.0 module which has a slightly different module_entry structure :( */
- struct pre_4_1_0_module_entry {
- char *name;
- zend_function_entry *functions;
- int (*module_startup_func)(INIT_FUNC_ARGS);
- int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);
- int (*request_startup_func)(INIT_FUNC_ARGS);
- int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
- void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
- int (*global_startup_func)(void);
- int (*global_shutdown_func)(void);
- int globals_id;
- int module_started;
- unsigned char type;
- void *handle;
- int module_number;
- unsigned char zend_debug;
- unsigned char zts;
- unsigned int zend_api;
- };
-
- char *name;
- int zend_api;
- unsigned char zend_debug, zts;
-
- if(( ((struct pre_4_1_0_module_entry *)module_entry)->zend_api > 20000000)
- &&(((struct pre_4_1_0_module_entry *)module_entry)->zend_api < 20010901)) {
- name = ((struct pre_4_1_0_module_entry *)module_entry)->name;
- zend_api = ((struct pre_4_1_0_module_entry *)module_entry)->zend_api;
- zend_debug = ((struct pre_4_1_0_module_entry *)module_entry)->zend_debug;
- zts = ((struct pre_4_1_0_module_entry *)module_entry)->zts;
- } else {
- name = module_entry->name;
- zend_api = module_entry->zend_api;
- zend_debug = module_entry->zend_debug;
- zts = module_entry->zts;
- }
-
- php_error(error_type,
- "%s: Unable to initialize module\n"
- "Module compiled with module API=%d, debug=%d, thread-safety=%d\n"
- "PHP compiled with module API=%d, debug=%d, thread-safety=%d\n"
- "These options need to match\n",
- name, zend_api, zend_debug, zts,
- ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS);
- DL_UNLOAD(handle);
- RETURN_FALSE;
- }
- Z_TYPE_P(module_entry) = type;
- module_entry->module_number = zend_next_free_module();
- if (module_entry->module_startup_func) {
- if (module_entry->module_startup_func(type, module_entry->module_number TSRMLS_CC)==FAILURE) {
- php_error(error_type, "%s: Unable to initialize module", module_entry->name);
- DL_UNLOAD(handle);
- RETURN_FALSE;
- }
- }
- zend_register_module(module_entry);
-
- if ((type == MODULE_TEMPORARY) && module_entry->request_startup_func) {
- if (module_entry->request_startup_func(type, module_entry->module_number TSRMLS_CC)) {
- php_error(error_type, "%s: Unable to initialize module", module_entry->name);
- DL_UNLOAD(handle);
- RETURN_FALSE;
- }
- }
-
- /* update the .request_started property... */
- if (zend_hash_find(&module_registry, module_entry->name, strlen(module_entry->name)+1, (void **) &tmp)==FAILURE) {
- php_error(error_type, "%s: Loaded module got lost", module_entry->name);
- RETURN_FALSE;
- }
- tmp->handle = handle;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-PHP_MINFO_FUNCTION(dl)
-{
- php_info_print_table_row(2, "Dynamic Library Support", "enabled");
-}
-
-#else
-
-void php_dl(pval *file, int type, pval *return_value TSRMLS_DC)
-{
- php_error(E_WARNING, "Cannot dynamically load %s - dynamic modules are not supported", Z_STRVAL_P(file));
- RETURN_FALSE;
-}
-
-PHP_MINFO_FUNCTION(dl)
-{
- PUTS("Dynamic Library support not available<br />.\n");
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/dl.h b/ext/standard/dl.h
deleted file mode 100644
index 64887f3115..0000000000
--- a/ext/standard/dl.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Brian Schaffner <brian@tool.net> |
- | Shane Caraveo <shane@caraveo.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef DL_H
-#define DL_H
-
-void php_dl(pval *file,int type,pval *return_value TSRMLS_DC);
-
-
-/* dynamic loading functions */
-PHP_FUNCTION(dl);
-
-PHP_MINFO_FUNCTION(dl);
-
-#endif /* DL_H */
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
deleted file mode 100644
index f2efa21867..0000000000
--- a/ext/standard/dns.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes
- */
-#include "php.h"
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef PHP_WIN32
-#if HAVE_LIBBIND
-#ifndef WINNT
-#define WINNT 1
-#endif
-/* located in www.php.net/extra/bindlib.zip */
-#if HAVE_ARPA_INET_H
-#include "arpa/inet.h"
-#endif
-#include "netdb.h"
-#if HAVE_ARPA_NAMESERV_H
-#include "arpa/nameser.h"
-#endif
-#if HAVE_RESOLV_H
-#include "resolv.h"
-#endif
-#endif
-#include <winsock.h>
-#else
-#include <netinet/in.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <netdb.h>
-#ifdef _OSD_POSIX
-#undef STATUS
-#undef T_UNSPEC
-#endif
-#if HAVE_ARPA_NAMESER_H
-#include <arpa/nameser.h>
-#endif
-#if HAVE_RESOLV_H
-#include <resolv.h>
-#endif
-#endif
-
-#include "dns.h"
-/* }}} */
-
-static char *php_gethostbyaddr(char *ip);
-static char *php_gethostbyname(char *name);
-
-/* {{{ proto string gethostbyaddr(string ip_address)
- Get the Internet host name corresponding to a given IP address */
-PHP_FUNCTION(gethostbyaddr)
-{
- zval **arg;
- char *addr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg);
-
- addr = php_gethostbyaddr(Z_STRVAL_PP(arg));
-
- if(addr == NULL) {
-#if HAVE_IPV6 && !defined(__MacOSX__)
-/* MacOSX at this time has support for IPv6, but not inet_pton()
- * so disabling IPv6 until further notice. MacOSX 10.1.2 (kalowsky) */
- php_error(E_WARNING, "Address is not a valid IPv4 or IPv6 address");
-#else
- php_error(E_WARNING, "Address is not in a.b.c.d form");
-#endif
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(addr, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_gethostbyaddr
- */
-static char *php_gethostbyaddr(char *ip)
-{
-#if HAVE_IPV6 && !defined(__MacOSX__)
-/* MacOSX at this time has support for IPv6, but not inet_pton()
- * so disabling IPv6 until further notice. MacOSX 10.1.2 (kalowsky) */
- struct in6_addr addr6;
-#endif
- struct in_addr addr;
- struct hostent *hp;
-
-#if HAVE_IPV6 && !defined(__MacOSX__)
-/* MacOSX at this time has support for IPv6, but not inet_pton()
- * so disabling IPv6 until further notice. MacOSX 10.1.2 (kalowsky) */
- if (inet_pton(AF_INET6, ip, &addr6)) {
- hp = gethostbyaddr((char *) &addr6, sizeof(addr6), AF_INET6);
- } else if (inet_pton(AF_INET, ip, &addr)) {
- hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
- } else {
- return NULL;
- }
-#else
- addr.s_addr = inet_addr(ip);
-
- if (addr.s_addr == -1) {
- return NULL;
- }
-
- hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
-#endif
-
- if (!hp) {
- return estrdup(ip);
- }
-
- return estrdup(hp->h_name);
-}
-/* }}} */
-
-/* {{{ proto string gethostbyname(string hostname)
- Get the IP address corresponding to a given Internet host name */
-PHP_FUNCTION(gethostbyname)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg);
-
- RETVAL_STRING(php_gethostbyname(Z_STRVAL_PP(arg)), 0);
-}
-/* }}} */
-
-/* {{{ proto array gethostbynamel(string hostname)
- Return a list of IP addresses that a given hostname resolves to. */
-PHP_FUNCTION(gethostbynamel)
-{
- zval **arg;
- struct hostent *hp;
- struct in_addr in;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(arg);
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- hp = gethostbyname(Z_STRVAL_PP(arg));
- if (hp == NULL || hp->h_addr_list == NULL) {
- RETURN_FALSE;
- }
-
- for (i = 0 ; hp->h_addr_list[i] != 0 ; i++) {
- in = *(struct in_addr *) hp->h_addr_list[i];
- add_next_index_string(return_value, inet_ntoa(in), 1);
- }
-}
-/* }}} */
-
-/* {{{ php_gethostbyname
- */
-static char *php_gethostbyname(char *name)
-{
- struct hostent *hp;
- struct in_addr in;
-
- hp = gethostbyname(name);
-
- if (!hp || !hp->h_addr_list) {
- return estrdup(name);
- }
-
- memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr));
-
- return estrdup(inet_ntoa(in));
-}
-/* }}} */
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32))
-
-/* {{{ proto int checkdnsrr(string host [, string type])
- Check DNS records corresponding to a given Internet host name or IP address */
-PHP_FUNCTION(checkdnsrr)
-{
- zval **arg1, **arg2;
- int type, i;
-#ifndef MAXPACKET
-#define MAXPACKET 8192 /* max packet size used internally by BIND */
-#endif
- u_char ans[MAXPACKET];
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- type = T_MX;
- convert_to_string_ex(arg1);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- if ( !strcasecmp("A", Z_STRVAL_PP(arg2)) ) type = T_A;
- else if ( !strcasecmp("NS", Z_STRVAL_PP(arg2)) ) type = T_NS;
- else if ( !strcasecmp("MX", Z_STRVAL_PP(arg2)) ) type = T_MX;
- else if ( !strcasecmp("PTR", Z_STRVAL_PP(arg2)) ) type = T_PTR;
- else if ( !strcasecmp("ANY", Z_STRVAL_PP(arg2)) ) type = T_ANY;
- else if ( !strcasecmp("SOA", Z_STRVAL_PP(arg2)) ) type = T_SOA;
- else if ( !strcasecmp("CNAME", Z_STRVAL_PP(arg2)) ) type = T_CNAME;
- else {
- php_error(E_WARNING, "Type '%s' not supported", Z_STRVAL_PP(arg2));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- i = res_search(Z_STRVAL_PP(arg1), C_IN, type, ans, sizeof(ans));
- if ( i < 0 ) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#ifndef HFIXEDSZ
-#define HFIXEDSZ 12 /* fixed data in header <arpa/nameser.h> */
-#endif /* HFIXEDSZ */
-
-#ifndef QFIXEDSZ
-#define QFIXEDSZ 4 /* fixed data in query <arpa/nameser.h> */
-#endif /* QFIXEDSZ */
-
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 256
-#endif /* MAXHOSTNAMELEN */
-
-/* {{{ proto int getmxrr(string hostname, array mxhosts [, array weight])
- Get MX records corresponding to a given Internet host name */
-PHP_FUNCTION(getmxrr)
-{
- pval *host, *mx_list, *weight_list;
- int need_weight = 0;
- int count, qdc;
- u_short type, weight;
- u_char ans[MAXPACKET];
- char buf[MAXHOSTNAMELEN];
- HEADER *hp;
- u_char *cp, *end;
- int i;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters(ht, 2, &host, &mx_list) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters(ht, 3, &host, &mx_list, &weight_list) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- need_weight = 1;
- pval_destructor(weight_list); /* start with clean array */
- if ( array_init(weight_list) == FAILURE ) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string( host );
- pval_destructor(mx_list); /* start with clean array */
- if ( array_init(mx_list) == FAILURE ) {
- RETURN_FALSE;
- }
-
- /* Go! */
- i = res_search(Z_STRVAL_P(host), C_IN, T_MX, (u_char *)&ans, sizeof(ans));
- if ( i < 0 ) {
- RETURN_FALSE;
- }
- if ( i > sizeof(ans) ) i = sizeof(ans);
- hp = (HEADER *)&ans;
- cp = (u_char *)&ans + HFIXEDSZ;
- end = (u_char *)&ans +i;
- for ( qdc = ntohs((unsigned short)hp->qdcount); qdc--; cp += i + QFIXEDSZ) {
- if ( (i = dn_skipname(cp, end)) < 0 ) {
- RETURN_FALSE;
- }
- }
- count = ntohs((unsigned short)hp->ancount);
- while ( --count >= 0 && cp < end ) {
- if ( (i = dn_skipname(cp, end)) < 0 ) {
- RETURN_FALSE;
- }
- cp += i;
- GETSHORT(type, cp);
- cp += INT16SZ + INT32SZ;
- GETSHORT(i, cp);
- if ( type != T_MX ) {
- cp += i;
- continue;
- }
- GETSHORT(weight, cp);
- if ( (i = dn_expand(ans, end, cp, buf, sizeof(buf)-1)) < 0 ) {
- RETURN_FALSE;
- }
- cp += i;
- add_next_index_string(mx_list, buf, 1);
- if ( need_weight ) {
- add_next_index_long(weight_list, weight);
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/dns.h b/ext/standard/dns.h
deleted file mode 100644
index e3f1cc461a..0000000000
--- a/ext/standard/dns.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef DNS_H
-#define DNS_H
-
-PHP_FUNCTION(gethostbyaddr);
-PHP_FUNCTION(gethostbyname);
-PHP_FUNCTION(gethostbynamel);
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32))
-PHP_FUNCTION(checkdnsrr);
-PHP_FUNCTION(getmxrr);
-#endif
-
-#ifndef INT16SZ
-#define INT16SZ 2
-#endif
-
-#ifndef INT32SZ
-#define INT32SZ 4
-#endif
-
-#endif /* DNS_H */
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
deleted file mode 100644
index 839d09a7a1..0000000000
--- a/ext/standard/exec.c
+++ /dev/null
@@ -1,1008 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-#include <ctype.h>
-#include "php_string.h"
-#include "safe_mode.h"
-#include "ext/standard/head.h"
-#include "ext/standard/file.h"
-#include "exec.h"
-#include "php_globals.h"
-#include "SAPI.h"
-
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-/* {{{ php_make_safe_mode_command */
-static int php_make_safe_mode_command(char *cmd, char **safecmd TSRMLS_DC)
-{
- int lcmd, larg0, ldir, len, overflow_limit;
- char *space, *sep, *arg0;
-
- if (!PG(safe_mode)) {
- *safecmd = estrdup(cmd);
- return SUCCESS;
- }
-
- lcmd = strlen(cmd);
- ldir = strlen(PG(safe_mode_exec_dir));
- len = lcmd + ldir + 2;
- overflow_limit = len;
-
- arg0 = emalloc(len);
-
- strcpy(arg0, cmd);
-
- space = strchr(arg0, ' ');
- if (space) {
- *space = '\0';
- }
- larg0 = strlen(arg0);
-
- if (strstr(arg0, "..")) {
- zend_error(E_WARNING, "No '..' components allowed in path");
- efree(arg0);
- return FAILURE;
- }
-
- *safecmd = emalloc(len);
- strcpy(*safecmd, PG(safe_mode_exec_dir));
- overflow_limit -= ldir;
-
- sep = strrchr(arg0, PHP_DIR_SEPARATOR);
- if (sep) {
- strcat(*safecmd, sep);
- overflow_limit -= strlen(sep);
- } else {
- strcat(*safecmd, "/");
- strcat(*safecmd, arg0);
- overflow_limit -= larg0 + 1;
- }
- if (space) {
- strncat(*safecmd, cmd + larg0, overflow_limit);
- }
- efree(arg0);
- arg0 = php_escape_shell_cmd(*safecmd);
- efree(*safecmd);
- *safecmd = arg0;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_Exec
- * If type==0, only last line of output is returned (exec)
- * If type==1, all lines will be printed and last lined returned (system)
- * If type==2, all lines will be saved to given array (exec with &$array)
- * If type==3, output will be printed binary, no lines will be saved or returned (passthru)
- *
- */
-int php_Exec(int type, char *cmd, pval *array, pval *return_value TSRMLS_DC)
-{
- FILE *fp;
- char *buf, *tmp=NULL;
- int buflen = 0;
- int t, l, output=1;
- int overflow_limit, lcmd, ldir;
- char *b, *c, *d=NULL;
- php_stream *stream = NULL;
-#if PHP_SIGCHILD
- void (*sig_handler)();
-#endif
-
- buf = (char *) emalloc(EXEC_INPUT_BUF);
- if (!buf) {
- php_error(E_WARNING, "Unable to emalloc %d bytes for exec buffer", EXEC_INPUT_BUF);
- return -1;
- }
- buflen = EXEC_INPUT_BUF;
-
- if (PG(safe_mode)) {
- lcmd = strlen(cmd);
- ldir = strlen(PG(safe_mode_exec_dir));
- l = lcmd + ldir + 2;
- overflow_limit = l;
- c = strchr(cmd, ' ');
- if (c) *c = '\0';
- if (strstr(cmd, "..")) {
- php_error(E_WARNING, "No '..' components allowed in path");
- efree(buf);
- return -1;
- }
- d = emalloc(l);
- strcpy(d, PG(safe_mode_exec_dir));
- overflow_limit -= ldir;
- b = strrchr(cmd, PHP_DIR_SEPARATOR);
- if (b) {
- strcat(d, b);
- overflow_limit -= strlen(b);
- } else {
- strcat(d, "/");
- strcat(d, cmd);
- overflow_limit-=(strlen(cmd)+1);
- }
- if (c) {
- *c = ' ';
- strncat(d, c, overflow_limit);
- }
- tmp = php_escape_shell_cmd(d);
- efree(d);
- d = tmp;
-#if PHP_SIGCHILD
- sig_handler = signal (SIGCHLD, SIG_DFL);
-#endif
-#ifdef PHP_WIN32
- fp = VCWD_POPEN(d, "rb");
-#else
- fp = VCWD_POPEN(d, "r");
-#endif
- if (!fp) {
- php_error(E_WARNING, "Unable to fork [%s]", d);
- efree(d);
- efree(buf);
-#if PHP_SIGCHILD
- signal (SIGCHLD, sig_handler);
-#endif
- return -1;
- }
-
- } else { /* not safe_mode */
-#if PHP_SIGCHILD
- sig_handler = signal (SIGCHLD, SIG_DFL);
-#endif
-#ifdef PHP_WIN32
- fp = VCWD_POPEN(cmd, "rb");
-#else
- fp = VCWD_POPEN(cmd, "r");
-#endif
- if (!fp) {
- php_error(E_WARNING, "Unable to fork [%s]", cmd);
- efree(buf);
-#if PHP_SIGCHILD
- signal (SIGCHLD, sig_handler);
-#endif
- return -1;
- }
- }
- buf[0] = '\0';
- if (type==2) {
- if (Z_TYPE_P(array) != IS_ARRAY) {
- pval_destructor(array);
- array_init(array);
- }
- }
-
- /* we register the resource so that case of an aborted connection the
- * fd gets pclosed
- */
-
- stream = php_stream_fopen_from_pipe(fp, "rb");
-
- if (type != 3) {
- l=0;
- while ( !feof(fp) || l != 0 ) {
- l = 0;
- /* Read a line or fill the buffer, whichever comes first */
- do {
- if ( buflen <= (l+1) ) {
- buf = erealloc(buf, buflen + EXEC_INPUT_BUF);
- if ( buf == NULL ) {
- php_error(E_WARNING, "Unable to erealloc %d bytes for exec buffer",
- buflen + EXEC_INPUT_BUF);
-#if PHP_SIGCHILD
- signal (SIGCHLD, sig_handler);
-#endif
- return -1;
- }
- buflen += EXEC_INPUT_BUF;
- }
-
- if ( fgets(&(buf[l]), buflen - l, fp) == NULL ) {
- /* eof */
- break;
- }
- l += strlen(&(buf[l]));
- } while ( (l > 0) && (buf[l-1] != '\n') );
-
- if ( feof(fp) && (l == 0) ) {
- break;
- }
-
-
- if (type == 1) {
- if (output) PUTS(buf);
- sapi_flush(TSRMLS_C);
- }
- else if (type == 2) {
- /* strip trailing whitespaces */
- l = strlen(buf);
- t = l;
- while (l-- && isspace((int)buf[l]));
- if (l < t) {
- buf[l + 1] = '\0';
- }
- add_next_index_string(array, buf, 1);
- }
- }
-
- /* strip trailing spaces */
- l = strlen(buf);
- t = l;
- while (l && isspace((int)buf[l - 1])) {
- l--;
- }
- if (l < t) buf[l] = '\0';
-
- /* Return last line from the shell command */
- if (PG(magic_quotes_runtime)) {
- int len;
-
- tmp = php_addslashes(buf, 0, &len, 0 TSRMLS_CC);
- RETVAL_STRINGL(tmp, len, 0);
- } else {
- RETVAL_STRINGL(buf, l, 1);
- }
- } else {
- int b, i;
-
- while ((b = fread(buf, 1, buflen, fp)) > 0) {
- for (i = 0; i < b; i++)
- if (output) (void)PUTC(buf[i]);
- }
- }
-
- FG(pclose_ret) = php_stream_close(stream);
-
-#if HAVE_SYS_WAIT_H
- if (WIFEXITED(FG(pclose_ret))) {
- FG(pclose_ret) = WEXITSTATUS(FG(pclose_ret));
- }
-#endif
-#if PHP_SIGCHILD
- signal (SIGCHLD, sig_handler);
-#endif
- if (d) {
- efree(d);
- }
- efree(buf);
- return FG(pclose_ret);
-}
-/* }}} */
-
-/* {{{ proto string exec(string command [, array output [, int return_value]])
- Execute an external program */
-PHP_FUNCTION(exec)
-{
- pval **arg1, **arg2, **arg3;
- int arg_count = ZEND_NUM_ARGS();
- int ret;
-
- if (arg_count > 3 || zend_get_parameters_ex(arg_count, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (arg_count) {
- case 1:
- ret = php_Exec(0, Z_STRVAL_PP(arg1), NULL, return_value TSRMLS_CC);
- break;
- case 2:
- ret = php_Exec(2, Z_STRVAL_PP(arg1), *arg2, return_value TSRMLS_CC);
- break;
- case 3:
- ret = php_Exec(2, Z_STRVAL_PP(arg1), *arg2, return_value TSRMLS_CC);
- Z_TYPE_PP(arg3) = IS_LONG;
- Z_LVAL_PP(arg3)=ret;
- break;
- }
-}
-
-/* }}} */
-
-/* {{{ proto int system(string command [, int return_value])
- Execute an external program and display output */
-PHP_FUNCTION(system)
-{
- pval **arg1, **arg2;
- int arg_count = ZEND_NUM_ARGS();
- int ret;
-
- if (arg_count > 2 || zend_get_parameters_ex(arg_count, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (arg_count) {
- case 1:
- ret = php_Exec(1, Z_STRVAL_PP(arg1), NULL, return_value TSRMLS_CC);
- break;
- case 2:
- ret = php_Exec(1, Z_STRVAL_PP(arg1), NULL, return_value TSRMLS_CC);
- Z_TYPE_PP(arg2) = IS_LONG;
- Z_LVAL_PP(arg2)=ret;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto void passthru(string command [, int return_value])
- Execute an external program and display raw output */
-PHP_FUNCTION(passthru)
-{
- pval **arg1, **arg2;
- int arg_count = ZEND_NUM_ARGS();
- int ret;
-
- if (arg_count > 2 || zend_get_parameters_ex(arg_count, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (arg_count) {
- case 1:
- ret = php_Exec(3, Z_STRVAL_PP(arg1), NULL, return_value TSRMLS_CC);
- break;
- case 2:
- ret = php_Exec(3, Z_STRVAL_PP(arg1), NULL, return_value TSRMLS_CC);
- Z_TYPE_PP(arg2) = IS_LONG;
- Z_LVAL_PP(arg2)=ret;
- break;
- }
-}
-/* }}} */
-
-/* {{{ php_escape_shell_cmd
- Escape all chars that could possibly be used to
- break out of a shell command
-
- This function emalloc's a string and returns the pointer.
- Remember to efree it when done with it.
-
- *NOT* safe for binary strings
-*/
-char *php_escape_shell_cmd(char *str) {
- register int x, y, l;
- char *cmd;
-
- l = strlen(str);
- cmd = emalloc(2 * l + 1);
-
- for (x = 0, y = 0; x < l; x++) {
- switch (str[x]) {
- case '#': /* This is character-set independent */
- case '&':
- case ';':
- case '`':
- case '\'':
- case '"':
- case '|':
- case '*':
- case '?':
- case '~':
- case '<':
- case '>':
- case '^':
- case '(':
- case ')':
- case '[':
- case ']':
- case '{':
- case '}':
- case '$':
- case '\\':
- case '\x0A': /* excluding these two */
- case '\xFF':
- cmd[y++] = '\\';
- /* fall-through */
- default:
- cmd[y++] = str[x];
-
- }
- }
- cmd[y] = '\0';
- return cmd;
-}
-/* }}} */
-
-/* {{{ php_escape_shell_arg
- */
-char *php_escape_shell_arg(char *str) {
- int x, y, l;
- char *cmd;
-
- y = 0;
- l = strlen(str);
-
- cmd = emalloc(4 * l + 3); /* worst case */
-
- cmd[y++] = '\'';
-
- for (x = 0; x < l; x++) {
- switch (str[x]) {
- case '\'':
- cmd[y++] = '\'';
- cmd[y++] = '\\';
- cmd[y++] = '\'';
- /* fall-through */
- default:
- cmd[y++] = str[x];
- }
- }
- cmd[y++] = '\'';
- cmd[y] = '\0';
- return cmd;
-}
-/* }}} */
-
-/* {{{ proto string escapeshellcmd(string command)
- Escape shell metacharacters */
-PHP_FUNCTION(escapeshellcmd)
-{
- pval **arg1;
- char *cmd = NULL;
-
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- if (Z_STRLEN_PP(arg1)) {
- cmd = php_escape_shell_cmd(Z_STRVAL_PP(arg1));
- RETVAL_STRING(cmd, 1);
- efree(cmd);
- }
-}
-/* }}} */
-
-/* {{{ proto string escapeshellarg(string arg)
- Quote and escape an argument for use in a shell command */
-PHP_FUNCTION(escapeshellarg)
-{
- pval **arg1;
- char *cmd = NULL;
-
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- if (Z_STRLEN_PP(arg1)) {
- cmd = php_escape_shell_arg(Z_STRVAL_PP(arg1));
- RETVAL_STRING(cmd, 1);
- efree(cmd);
- }
-}
-/* }}} */
-
-/* {{{ proto string shell_exec(string cmd)
- Use pclose() for FILE* that has been opened via popen() */
-PHP_FUNCTION(shell_exec)
-{
- FILE *in;
- int readbytes, total_readbytes=0, allocated_space;
- pval **cmd;
- char *ret;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (PG(safe_mode)) {
- php_error(E_WARNING, "Cannot execute using backquotes in safe mode");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(cmd);
-#ifdef PHP_WIN32
- if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) {
-#else
- if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) {
-#endif
- php_error(E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd));
- RETURN_FALSE;
- }
- allocated_space = EXEC_INPUT_BUF;
- ret = (char *) emalloc(allocated_space);
- while (1) {
- readbytes = fread(ret+total_readbytes, 1, EXEC_INPUT_BUF, in);
- if (readbytes<=0) {
- break;
- }
- total_readbytes += readbytes;
- allocated_space = total_readbytes+EXEC_INPUT_BUF;
- ret = (char *) erealloc(ret, allocated_space);
- }
- pclose(in);
-
- RETVAL_STRINGL(ret, total_readbytes, 0);
- Z_STRVAL_P(return_value)[total_readbytes] = '\0';
-}
-/* }}} */
-
-/* {{{ proc_open resource management */
-static int le_proc_open;
-
-static void proc_open_rsrc_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-#ifdef PHP_WIN32
- HANDLE child;
- DWORD wstatus;
-
- child = (HANDLE)rsrc->ptr;
- WaitForSingleObject(child, INFINITE);
- GetExitCodeProcess(child, &wstatus);
- FG(pclose_ret) = wstatus;
-#else
-# if HAVE_SYS_WAIT
- int wstatus;
- pid_t child, wait_pid;
-
- child = (pid_t)rsrc->ptr;
-
- do {
- wait_pid = waitpid(child, &wstatus, 0);
- } while (wait_pid == -1 && errno = EINTR);
-
- if (wait_pid == -1)
- FG(pclose_ret) = -1;
- else
- FG(pclose_ret) = wstatus;
-# else
- FG(pclose_ret) = -1;
-# endif
-#endif
-}
-
-PHP_MINIT_FUNCTION(proc_open)
-{
- le_proc_open = zend_register_list_destructors_ex(proc_open_rsrc_dtor, NULL, "process", module_number);
- return SUCCESS;
-}
-
-/* }}} */
-
-/* {{{ proto int proc_close(resource process)
- close a process opened by proc_open */
-PHP_FUNCTION(proc_close)
-{
- zval *proc;
- void *child;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &proc) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(child, void *, &proc, -1, "process", le_proc_open);
-
- zend_list_delete(Z_LVAL_P(proc));
- RETURN_LONG(FG(pclose_ret));
-}
-/* }}} */
-
-/* {{{ handy definitions for portability/readability */
-#ifdef PHP_WIN32
-typedef HANDLE descriptor_t;
-# define pipe(pair) (CreatePipe(&pair[0], &pair[1], &security, 2048L) ? 0 : -1)
-
-# define COMSPEC_NT "cmd.exe"
-# define COMSPEC_9X "command.com"
-
-static inline HANDLE dup_handle(HANDLE src, BOOL inherit, BOOL closeorig)
-{
- HANDLE copy, self = GetCurrentProcess();
-
- if (!DuplicateHandle(self, src, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS |
- (closeorig ? DUPLICATE_CLOSE_SOURCE : 0)))
- return NULL;
- return copy;
-}
-
-
-static inline HANDLE dup_fd_as_handle(int fd)
-{
- return dup_handle((HANDLE)_get_osfhandle(fd), TRUE, FALSE);
-}
-
-# define close_descriptor(fd) CloseHandle(fd)
-#else
-typedef int descriptor_t;
-# define close_descriptor(fd) close(fd)
-
-#endif
-
-#define DESC_PIPE 1
-#define DESC_FILE 2
-#define DESC_PARENT_MODE_WRITE 8
-
-struct php_proc_open_descriptor_item {
- int index; /* desired fd number in child process */
- descriptor_t parentend, childend; /* fds for pipes in parent/child */
- int mode; /* mode for proc_open code */
- int mode_flags; /* mode flags for opening fds */
-};
-/* }}} */
-
-/* {{{ proto resource proc_open(string command, array descriptorspec, array &pipes)
- Run a process with more control over it's file descriptors */
-PHP_FUNCTION(proc_open)
-{
-#define MAX_DESCRIPTORS 16
-
- char *command;
- long command_len;
- zval *descriptorspec;
- zval *pipes;
- int ndesc = 0;
- int i;
- zval **descitem = NULL;
- HashPosition pos;
- struct php_proc_open_descriptor_item descriptors[MAX_DESCRIPTORS];
-#ifdef PHP_WIN32
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- BOOL newprocok;
- HANDLE child;
- SECURITY_ATTRIBUTES security;
- char *command_with_cmd;
-#else
- pid_t child;
-#endif
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "saz/", &command,
- &command_len, &descriptorspec, &pipes) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_make_safe_mode_command(command, &command TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- command_len = strlen(command);
-
- memset(descriptors, 0, sizeof(descriptors));
-
-#ifdef PHP_WIN32
- /* we use this to allow the child to inherit handles */
- memset(&security, 0, sizeof(security));
- security.nLength = sizeof(security);
- security.bInheritHandle = TRUE;
- security.lpSecurityDescriptor = NULL;
-#endif
-
- /* walk the descriptor spec and set up files/pipes */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(descriptorspec), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(descriptorspec), (void **)&descitem, &pos) == SUCCESS) {
- char *str_index;
- ulong nindex;
- zval **ztype;
-
- str_index = NULL;
- zend_hash_get_current_key_ex(Z_ARRVAL_P(descriptorspec), &str_index, NULL, &nindex, 0, &pos);
-
- if (str_index) {
- zend_error(E_WARNING, "%s(): descriptor spec must be an integer indexed array",
- get_active_function_name(TSRMLS_C));
- goto exit_fail;
- }
-
- descriptors[ndesc].index = nindex;
-
- if (Z_TYPE_PP(descitem) == IS_RESOURCE) {
- /* should be a stream - try and dup the descriptor */
- php_stream *stream;
- int fd;
-
- ZEND_FETCH_RESOURCE(stream, php_stream *, descitem, -1, "File-Handle", php_file_le_stream());
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_FD, (void **)&fd, REPORT_ERRORS)) {
- goto exit_fail;
- }
-
-#ifdef PHP_WIN32
- descriptors[ndesc].childend = dup_fd_as_handle(fd);
- if (descriptors[ndesc].childend == NULL) {
- zend_error(E_WARNING, "%s(): unable to dup File-Handle for descriptor %d",
- get_active_function_name(TSRMLS_C), nindex);
- goto exit_fail;
- }
-#else
- descriptors[ndesc].childend = dup(fd);
- if (descriptors[ndesc].childend < 0) {
- zend_error(E_WARNING, "%s(): unable to dup File-Handle for descriptor %d - %s",
- get_active_function_name(TSRMLS_C), nindex, strerror(errno));
- goto exit_fail;
- }
-#endif
- descriptors[ndesc].mode = DESC_FILE;
-
- } else if (Z_TYPE_PP(descitem) != IS_ARRAY) {
- zend_error(E_WARNING, "%s(): descriptor item must be either an array or a File-Handle",
- get_active_function_name(TSRMLS_C));
- goto exit_fail;
- } else {
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 0, (void **)&ztype) == SUCCESS) {
- convert_to_string_ex(ztype);
- } else {
- php_error (E_WARNING, "%s(): Missing handle qualifier in array",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(ztype));
- goto exit_fail;
- }
-
- if (strcmp(Z_STRVAL_PP(ztype), "pipe") == 0) {
- descriptor_t newpipe[2];
- zval **zmode;
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 1, (void **)&zmode) == SUCCESS) {
- convert_to_string_ex(zmode);
- } else {
- php_error (E_WARNING, "%s(): Missing mode parameter for 'pipe'",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(ztype));
- goto exit_fail;
- }
-
- descriptors[ndesc].mode = DESC_PIPE;
-
- if (0 != pipe(newpipe)) {
- zend_error(E_WARNING, "%s(): unable to create pipe %s",
- get_active_function_name(TSRMLS_C), strerror(errno));
- goto exit_fail;
- }
-
- if (strcmp(Z_STRVAL_PP(zmode), "w") != 0) {
- descriptors[ndesc].parentend = newpipe[1];
- descriptors[ndesc].childend = newpipe[0];
- descriptors[ndesc].mode |= DESC_PARENT_MODE_WRITE;
- } else {
- descriptors[ndesc].parentend = newpipe[0];
- descriptors[ndesc].childend = newpipe[1];
- }
-#ifdef PHP_WIN32
- /* don't let the child inherit the parent side of the pipe */
- descriptors[ndesc].parentend = dup_handle(descriptors[ndesc].parentend, FALSE, TRUE);
-#endif
- descriptors[ndesc].mode_flags = descriptors[ndesc].mode & DESC_PARENT_MODE_WRITE ? O_WRONLY : O_RDONLY;
-#ifdef PHP_WIN32
- if (Z_STRLEN_PP(zmode) >= 2 && Z_STRVAL_PP(zmode)[1] == 'b')
- descriptors[ndesc].mode_flags |= O_BINARY;
-#endif
-
-
-
- } else if (strcmp(Z_STRVAL_PP(ztype), "file") == 0) {
- zval **zfile, **zmode;
- int fd;
- php_stream *stream;
- size_t old_size = FG(def_chunk_size);
-
- descriptors[ndesc].mode = DESC_FILE;
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 1, (void **)&zfile) == SUCCESS) {
- convert_to_string_ex(zfile);
- } else {
- php_error (E_WARNING, "%s(): Missing file name parameter for 'file'",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(ztype));
- goto exit_fail;
- }
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 2, (void **)&zmode) == SUCCESS) {
- convert_to_string_ex(zmode);
- } else {
- php_error (E_WARNING, "%s(): Missing mode parameter for 'file'",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(ztype));
- goto exit_fail;
- }
-
- /* try a wrapper */
-
- FG(def_chunk_size) = 1;
- stream = php_stream_open_wrapper(Z_STRVAL_PP(zfile), Z_STRVAL_PP(zmode),
- ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
- FG(def_chunk_size) = old_size;
-
- /* force into an fd */
- if (stream == NULL || FAILURE == php_stream_cast(stream,
- PHP_STREAM_CAST_RELEASE|PHP_STREAM_AS_FD,
- (void **)&fd, REPORT_ERRORS)) {
- goto exit_fail;
- }
-
-#ifdef PHP_WIN32
- descriptors[ndesc].childend = (HANDLE)_get_osfhandle(fd);
-#else
- descriptors[ndesc].childend = fd;
-#endif
-
- } else {
- zend_error(E_WARNING, "%s(): %s is not a valid descriptor spec/mode",
- get_active_function_name(TSRMLS_C), Z_STRVAL_PP(ztype));
- goto exit_fail;
- }
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(descriptorspec), &pos);
- if (++ndesc == MAX_DESCRIPTORS)
- break;
- }
-
-#ifdef PHP_WIN32
- memset(&si, 0, sizeof(si));
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESTDHANDLES;
-
- si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
- si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
- si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
-
- /* redirect stdin/stdout/stderr if requested */
- for (i = 0; i < ndesc; i++) {
- switch(descriptors[i].index) {
- case 0:
- si.hStdInput = descriptors[i].childend;
- break;
- case 1:
- si.hStdOutput = descriptors[i].childend;
- break;
- case 2:
- si.hStdError = descriptors[i].childend;
- break;
- }
- }
-
-
- memset(&pi, 0, sizeof(pi));
-
- command_with_cmd = emalloc(command_len + sizeof(COMSPEC_9X) + 1 + sizeof(" /c "));
- sprintf(command_with_cmd, "%s /c %s", GetVersion() < 0x80000000 ? COMSPEC_NT : COMSPEC_9X, command);
- newprocok = CreateProcess(NULL, command_with_cmd, &security, &security, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
- efree(command_with_cmd);
-
- if (FALSE == newprocok) {
- zend_error(E_WARNING, "%s(): CreateProcess failed", get_active_function_name(TSRMLS_C));
- goto exit_fail;
- }
-
- child = pi.hProcess;
- CloseHandle(pi.hThread);
-
-#else
- /* the unix way */
-
- child = fork();
-
- if (child == 0) {
- /* this is the child process */
-
- /* close those descriptors that we just opened for the parent stuff,
- * dup new descriptors into required descriptors and close the original
- * cruft */
- for (i = 0; i < ndesc; i++) {
- switch (descriptors[i].mode & ~DESC_PARENT_MODE_WRITE) {
- case DESC_PIPE:
- close(descriptors[i].parentend);
- break;
- }
- if (dup2(descriptors[i].childend, descriptors[i].index) < 0)
- perror("dup2");
- if (descriptors[i].childend != descriptors[i].index)
- close(descriptors[i].childend);
- }
-
- execl("/bin/sh", "sh", "-c", command, NULL);
- _exit(127);
-
- } else if (child < 0) {
- /* failed to fork() */
-
- /* clean up all the descriptors */
- for (i = 0; i < ndesc; i++) {
- close(descriptors[i].childend);
- close(descriptors[i].parentend);
- }
-
- zend_error(E_WARNING, "%s(): fork failed - %s",
- get_active_function_name(TSRMLS_C),
- strerror(errno)
- );
-
- goto exit_fail;
-
- }
-#endif
- /* we forked/spawned and this is the parent */
-
- efree(command);
- array_init(pipes);
-
- /* clean up all the child ends and then open streams on the parent
- * ends, where appropriate */
- for (i = 0; i < ndesc; i++) {
- FILE *fp;
- char *mode_string;
- php_stream *stream;
-
- close_descriptor(descriptors[i].childend);
-
- switch (descriptors[i].mode & ~DESC_PARENT_MODE_WRITE) {
- case DESC_PIPE:
- switch(descriptors[i].mode_flags) {
-#ifdef PHP_WIN32
- case O_WRONLY|O_BINARY:
- mode_string = "wb";
- break;
- case O_RDONLY|O_BINARY:
- mode_string = "rb";
- break;
-#endif
- case O_WRONLY:
- mode_string = "w";
- break;
- case O_RDONLY:
- mode_string = "r";
- break;
- }
-#ifdef PHP_WIN32
- fp = _fdopen(_open_osfhandle((long)descriptors[i].parentend,
- descriptors[i].mode_flags), mode_string);
-#else
- fp = fdopen(descriptors[i].parentend, mode_string);
-#endif
- if (fp) {
- stream = php_stream_fopen_from_file(fp, mode_string);
- if (stream) {
- zval *retfp;
-
- MAKE_STD_ZVAL(retfp);
- php_stream_to_zval(stream, retfp);
- add_index_zval(pipes, descriptors[i].index, retfp);
- }
- }
- break;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, (void*)child, le_proc_open);
- return;
-
-exit_fail:
- efree(command);
- RETURN_FALSE;
-
-
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/exec.h b/ext/standard/exec.h
deleted file mode 100644
index 3f53895517..0000000000
--- a/ext/standard/exec.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef EXEC_H
-#define EXEC_H
-
-PHP_FUNCTION(system);
-PHP_FUNCTION(exec);
-PHP_FUNCTION(escapeshellcmd);
-PHP_FUNCTION(escapeshellarg);
-PHP_FUNCTION(passthru);
-PHP_FUNCTION(shell_exec);
-PHP_FUNCTION(proc_open);
-PHP_FUNCTION(proc_close);
-PHP_MINIT_FUNCTION(proc_open);
-
-char *php_escape_shell_cmd(char *);
-char *php_escape_shell_arg(char *);
-int php_Exec(int type, char *cmd, pval *array, pval *return_value TSRMLS_DC);
-
-#endif /* EXEC_H */
diff --git a/ext/standard/file.c b/ext/standard/file.c
deleted file mode 100644
index f50640dd12..0000000000
--- a/ext/standard/file.c
+++ /dev/null
@@ -1,2282 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@fast.no> |
- | Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | PHP 4.0 patches by Thies C. Arntzen (thies@thieso.net) |
- | PHP streams by Wez Furlong (wez@thebrainroom.com) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
-
-/* {{{ includes */
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/flock_compat.h"
-#include "ext/standard/exec.h"
-#include "ext/standard/php_filestat.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/basic_functions.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef PHP_WIN32
-#include <windows.h>
-#include <winsock.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#include "win32/winutil.h"
-#else
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-#include "ext/standard/head.h"
-#include "safe_mode.h"
-#include "php_string.h"
-#include "file.h"
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include "fsock.h"
-#include "fopen_wrappers.h"
-#include "php_streams.h"
-#include "php_globals.h"
-
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#if MISSING_FCLOSE_DECL
-extern int fclose(FILE *);
-#endif
-
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *) -1)
-#endif
-
-#include "scanf.h"
-#include "zend_API.h"
-
-#ifdef ZTS
-int file_globals_id;
-#else
-php_file_globals file_globals;
-#endif
-
-#ifdef HAVE_FNMATCH
-#include <fnmatch.h>
-#endif
-
-/* }}} */
-/* {{{ ZTS-stuff / Globals / Prototypes */
-
-/* sharing globals is *evil* */
-static int le_stream = FAILURE;
-static int le_stream_context = FAILURE;
-
-/* }}} */
-/* {{{ Module-Stuff */
-
-static ZEND_RSRC_DTOR_FUNC(file_context_dtor)
-{
- php_stream_context_free((php_stream_context*)rsrc->ptr);
-}
-
-static void _file_stream_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_stream *stream = (php_stream*)rsrc->ptr;
- /* the stream might be a pipe, so set the return value for pclose */
- FG(pclose_ret) = php_stream_free(stream, PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_RSRC_DTOR);
-}
-
-PHPAPI int php_file_le_stream(void)
-{
- return le_stream;
-}
-
-static void file_globals_ctor(php_file_globals *file_globals_p TSRMLS_DC)
-{
- zend_hash_init(&FG(ht_persistent_socks), 0, NULL, NULL, 1);
- FG(pclose_ret) = 0;
- FG(def_chunk_size) = PHP_SOCK_CHUNK_SIZE;
-}
-
-
-static void file_globals_dtor(php_file_globals *file_globals_p TSRMLS_DC)
-{
- zend_hash_destroy(&FG(ht_persistent_socks));
-}
-
-
-PHP_MINIT_FUNCTION(file)
-{
- le_stream = zend_register_list_destructors_ex(_file_stream_dtor, NULL, "stream", module_number);
- le_stream_context = zend_register_list_destructors_ex(file_context_dtor, NULL, "stream-context", module_number);
-
-#ifdef ZTS
- ts_allocate_id(&file_globals_id, sizeof(php_file_globals), (ts_allocate_ctor) file_globals_ctor, (ts_allocate_dtor) file_globals_dtor);
-#else
- file_globals_ctor(&file_globals TSRMLS_CC);
-#endif
-
- REGISTER_LONG_CONSTANT("SEEK_SET", SEEK_SET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SEEK_CUR", SEEK_CUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SEEK_END", SEEK_END, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_SH", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_EX", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_UN", 3, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_NB", 4, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_CONNECT", PHP_STREAM_NOTIFY_CONNECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_REQUIRED", PHP_STREAM_NOTIFY_AUTH_REQUIRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_RESULT", PHP_STREAM_NOTIFY_AUTH_RESULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_MIME_TYPE_IS", PHP_STREAM_NOTIFY_MIME_TYPE_IS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FILE_SIZE_IS", PHP_STREAM_NOTIFY_FILE_SIZE_IS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_REDIRECTED", PHP_STREAM_NOTIFY_REDIRECTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_PROGRESS", PHP_STREAM_NOTIFY_PROGRESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FAILURE", PHP_STREAM_NOTIFY_FAILURE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_INFO", PHP_STREAM_NOTIFY_SEVERITY_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_WARN", PHP_STREAM_NOTIFY_SEVERITY_WARN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_ERR", PHP_STREAM_NOTIFY_SEVERITY_ERR, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-PHP_MSHUTDOWN_FUNCTION(file)
-{
-#ifndef ZTS
- file_globals_dtor(&file_globals TSRMLS_CC);
-#endif
- return SUCCESS;
-}
-
-
-
-/* {{{ proto bool flock(resource fp, int operation [, int wouldblock])
- Portable file locking */
-
-static int flock_values[] = { LOCK_SH, LOCK_EX, LOCK_UN };
-
-PHP_FUNCTION(flock)
-{
- zval **arg1, **arg2, **arg3;
- int type, fd, act, ret, arg_count = ZEND_NUM_ARGS();
- void *what;
-
- if (arg_count > 3 || zend_get_parameters_ex(arg_count, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- if (php_stream_cast((php_stream*)what, PHP_STREAM_AS_FD, (void*)&fd, 1) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(arg2);
-
- act = Z_LVAL_PP(arg2) & 3;
- if (act < 1 || act > 3) {
- php_error(E_WARNING, "Illegal operation argument");
- RETURN_FALSE;
- }
-
- /* flock_values contains all possible actions
- if (arg2 & 4) we won't block on the lock */
- act = flock_values[act - 1] | (Z_LVAL_PP(arg2) & 4 ? LOCK_NB : 0);
- if ((ret=flock(fd, act)) == -1) {
- RETURN_FALSE;
- }
- if(ret == -1 && errno == EWOULDBLOCK && arg_count == 3) {
- ZVAL_LONG(*arg3, 1);
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#define PHP_META_UNSAFE ".\\+*?[^]$() "
-
-/* {{{ proto array get_meta_tags(string filename [, bool use_include_path])
- Extracts all meta tag content attributes from a file and returns an array */
-
-PHP_FUNCTION(get_meta_tags)
-{
- char *filename;
- int filename_len;
- zend_bool use_include_path = 0;
- int in_tag = 0, done = 0;
- int looking_for_val = 0, have_name = 0, have_content = 0;
- int saw_name = 0, saw_content = 0;
- char *name = NULL, *value = NULL, *temp = NULL;
- php_meta_tags_token tok, tok_last;
- php_meta_tags_data md;
-
- /* Initiailize our structure */
- memset(&md, 0, sizeof(md));
-
- /* Parse arguments */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b",
- &filename, &filename_len, &use_include_path) == FAILURE) {
- return;
- }
-
- php_stream_open_wrapper(filename, "rb", 0, NULL);
-
- md.stream = php_stream_open_wrapper(filename, "rb",
- use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
-
-
-
- if (!md.stream) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- tok_last = TOK_EOF;
-
- while (!done && (tok = php_next_meta_token(&md TSRMLS_CC)) != TOK_EOF) {
- if (tok == TOK_ID) {
- if (tok_last == TOK_OPENTAG) {
- md.in_meta = !strcasecmp("meta", md.token_data);
- } else if (tok_last == TOK_SLASH && in_tag) {
- if (strcasecmp("head", md.token_data) == 0) {
- /* We are done here! */
- done = 1;
- }
- } else if (tok_last == TOK_EQUAL && looking_for_val) {
- if (saw_name) {
- /* Get the NAME attr (Single word attr, non-quoted) */
- temp = name = estrndup(md.token_data, md.token_len);
-
- while (temp && *temp) {
- if (strchr(PHP_META_UNSAFE, *temp)) {
- *temp = '_';
- }
- temp++;
- }
-
- have_name = 1;
- } else if (saw_content) {
- /* Get the CONTENT attr (Single word attr, non-quoted) */
- if (PG(magic_quotes_runtime)) {
- value = php_addslashes(md.token_data, 0, &md.token_len, 0 TSRMLS_CC);
- } else {
- value = estrndup(md.token_data, md.token_len);
- }
-
- have_content = 1;
- }
-
- looking_for_val = 0;
- } else {
- if (md.in_meta) {
- if (strcasecmp("name", md.token_data) == 0) {
- saw_name = 1;
- saw_content = 0;
- looking_for_val = 1;
- } else if (strcasecmp("content", md.token_data) == 0) {
- saw_name = 0;
- saw_content = 1;
- looking_for_val = 1;
- }
- }
- }
- } else if (tok == TOK_STRING && tok_last == TOK_EQUAL && looking_for_val) {
- if (saw_name) {
- /* Get the NAME attr (Quoted single/double) */
- temp = name = estrndup(md.token_data, md.token_len);
-
- while (temp && *temp) {
- if (strchr(PHP_META_UNSAFE, *temp)) {
- *temp = '_';
- }
- temp++;
- }
-
- have_name = 1;
- } else if (saw_content) {
- /* Get the CONTENT attr (Single word attr, non-quoted) */
- if (PG(magic_quotes_runtime)) {
- value = php_addslashes(md.token_data, 0, &md.token_len, 0 TSRMLS_CC);
- } else {
- value = estrndup(md.token_data, md.token_len);
- }
-
- have_content = 1;
- }
-
- looking_for_val = 0;
- } else if (tok == TOK_OPENTAG) {
- if (looking_for_val) {
- looking_for_val = 0;
- have_name = saw_name = 0;
- have_content = saw_content = 0;
- }
- in_tag = 1;
- } else if (tok == TOK_CLOSETAG) {
- if (have_name) {
- /* For BC */
- php_strtolower(name, strlen(name));
- if (have_content) {
- add_assoc_string(return_value, name, value, 0);
- } else {
- add_assoc_string(return_value, name, empty_string, 0);
- }
-
- efree(name);
- } else if (have_content) {
- efree(value);
- }
-
- name = value = NULL;
-
- /* Reset all of our flags */
- in_tag = looking_for_val = 0;
- have_name = saw_name = 0;
- have_content = saw_content = 0;
- md.in_meta = 0;
- }
-
- tok_last = tok;
-
- if (md.token_data)
- efree(md.token_data);
-
- md.token_data = NULL;
- }
-
- php_stream_close(md.stream);
-}
-
-/* }}} */
-
-/* {{{ proto string file_get_contents(string filename [, bool use_include_path])
- Read the entire file into a string */
-PHP_FUNCTION(file_get_contents)
-{
- char *filename;
- int filename_len;
- char *contents;
- zend_bool use_include_path = 0;
- php_stream *stream;
- int len, newlen;
-
- /* Parse arguments */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b",
- &filename, &filename_len, &use_include_path) == FAILURE) {
- return;
- }
-
- stream = php_stream_open_wrapper(filename, "rb",
- use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
- if (!stream) {
- RETURN_FALSE;
- }
-
- /* uses mmap if possible */
- if ((len = php_stream_copy_to_mem(stream, &contents, PHP_STREAM_COPY_ALL, 0)) > 0) {
-
- if (PG(magic_quotes_runtime)) {
- contents = php_addslashes(contents, len, &newlen, 1 TSRMLS_CC); /* 1 = free source string */
- len = newlen;
- }
-
- RETVAL_STRINGL(contents, len, 0);
- } else {
- RETVAL_FALSE;
- }
-
- php_stream_close(stream);
-
-}
-/* }}} */
-
-/* {{{ proto array file(string filename [, bool use_include_path])
- Read entire file into an array */
-
-#define PHP_FILE_BUF_SIZE 80
-
-PHP_FUNCTION(file)
-{
- char *filename;
- int filename_len;
- char *slashed, *target_buf;
- register int i = 0;
- int target_len, len;
- zend_bool use_include_path = 0;
- zend_bool reached_eof = 0;
- php_stream *stream;
-
- /* Parse arguments */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b",
- &filename, &filename_len, &use_include_path) == FAILURE) {
- return;
- }
-
- stream = php_stream_open_wrapper(filename, "rb",
- use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
- if (!stream) {
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Now loop through the file and do the magic quotes thing if needed */
- target_len = 0;
- target_buf = NULL;
- while (1) {
- if (!target_buf) {
- target_buf = (char *) emalloc(PHP_FILE_BUF_SIZE+1);
- target_buf[PHP_FILE_BUF_SIZE] = 0; /* avoid overflows */
- } else {
- target_buf = (char *) erealloc(target_buf, target_len+PHP_FILE_BUF_SIZE+1);
- target_buf[target_len+PHP_FILE_BUF_SIZE] = 0; /* avoid overflows */
- }
- if (php_stream_gets(stream, target_buf+target_len, PHP_FILE_BUF_SIZE)==NULL) {
- if (target_len==0) {
- efree(target_buf);
- break;
- } else {
- reached_eof = 1;
- }
- }
- if (!reached_eof) {
- target_len += strlen(target_buf+target_len);
- if (target_buf[target_len-1] != '\n') {
- continue;
- }
- }
- if (PG(magic_quotes_runtime)) {
- slashed = php_addslashes(target_buf, target_len, &len, 1 TSRMLS_CC); /* 1 = free source string */
- add_index_stringl(return_value, i++, slashed, len, 0);
- } else {
- target_buf = erealloc(target_buf, target_len+1); /* do we really want to do that? */
- add_index_stringl(return_value, i++, target_buf, target_len, 0);
- }
- if (reached_eof) {
- break;
- }
- target_buf = NULL;
- target_len = 0;
- }
- php_stream_close(stream);
-}
-/* }}} */
-
-/* {{{ proto string tempnam(string dir, string prefix)
- Create a unique filename in a directory */
-PHP_FUNCTION(tempnam)
-{
- pval **arg1, **arg2;
- char *d;
- char *opened_path;
- char p[64];
- FILE *fp;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- d = estrndup(Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1));
- strlcpy(p, Z_STRVAL_PP(arg2), sizeof(p));
-
- if ((fp = php_open_temporary_file(d, p, &opened_path TSRMLS_CC))) {
- fclose(fp);
- RETVAL_STRING(opened_path, 0);
- } else {
- RETVAL_FALSE;
- }
- efree(d);
-}
-/* }}} */
-
-/* {{{ proto resource tmpfile(void)
- Create a temporary file that will be deleted automatically after use */
-PHP_NAMED_FUNCTION(php_if_tmpfile)
-{
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- stream = php_stream_fopen_tmpfile();
-
- if (stream) {
- php_stream_to_zval(stream, return_value);
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource file_get_wrapper_data(resource fp)
- */
-PHP_FUNCTION(file_get_wrapper_data)
-{
- zval **arg1;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- stream = (php_stream*)zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", NULL, 1, le_stream);
- ZEND_VERIFY_RESOURCE(stream);
-
- if (stream->wrapperdata) {
- *return_value = *(stream->wrapperdata);
- zval_copy_ctor(return_value);
- }
- else
- RETURN_FALSE;
-
-}
-/* }}} */
-
-/* {{{ stream_context related functions */
-static void user_space_stream_notifier(php_stream_context *context, int notifycode, int severity,
- char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr TSRMLS_DC)
-{
- zval *callback = (zval*)context->notifier->ptr;
- zval *retval = NULL;
- zval zvs[6];
- zval *ps[6];
- zval **ptps[6];
- int i;
-
- for (i = 0; i < 6; i++) {
- INIT_ZVAL(zvs[i]);
- ps[i] = &zvs[i];
- ptps[i] = &ps[i];
- }
-
- ZVAL_LONG(ps[0], notifycode);
- ZVAL_LONG(ps[1], severity);
- if (xmsg) {
- ZVAL_STRING(ps[2], xmsg, 0);
- } else {
- ZVAL_NULL(ps[2]);
- }
- ZVAL_LONG(ps[3], xcode);
- ZVAL_LONG(ps[4], bytes_sofar);
- ZVAL_LONG(ps[5], bytes_max);
-
- if (FAILURE == call_user_function_ex(EG(function_table), NULL, callback, &retval, 6, ptps, 0, NULL TSRMLS_CC)) {
- zend_error(E_WARNING, "failed to call user notifier");
- }
- if (retval)
- zval_ptr_dtor(&retval);
-}
-
-static int parse_context_options(php_stream_context *context, zval *options)
-{
- HashPosition pos, opos;
- zval **wval, **oval;
- char *wkey, *okey;
- int wkey_len, okey_len;
- int ret = SUCCESS;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(options), &pos);
- while (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_P(options), (void**)&wval, &pos)) {
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_P(options), &wkey, &wkey_len, NULL, 0, &pos)
- && Z_TYPE_PP(wval) == IS_ARRAY) {
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(wval), &opos);
- while (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(wval), (void**)&oval, &opos)) {
-
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_PP(wval), &okey, &okey_len, NULL, 0, &opos)) {
- ZVAL_ADDREF(*oval);
- php_stream_context_set_option(context, wkey, okey, *oval);
- }
- zend_hash_move_forward_ex(Z_ARRVAL_PP(wval), &opos);
- }
-
- } else {
- zend_error(E_WARNING, "options should have the form [\"wrappername\"][\"optionname\"] = $value");
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(options), &pos);
- }
-
- return ret;
-}
-
-static int parse_context_params(php_stream_context *context, zval *params)
-{
- int ret = SUCCESS;
- zval **tmp;
-
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "notification", sizeof("notification"), (void**)&tmp)) {
-
- if (context->notifier) {
- php_stream_notification_free(context->notifier);
- context->notifier = NULL;
- }
-
- context->notifier = php_stream_notification_alloc();
- context->notifier->func = user_space_stream_notifier;
- context->notifier->ptr = *tmp;
- ZVAL_ADDREF(*tmp);
- }
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "options", sizeof("options"), (void**)&tmp)) {
- parse_context_options(context, *tmp);
- }
-
- return ret;
-}
-
-/* given a zval which is either a stream or a context, return the underlying
- * stream_context. If it is a stream that does not have a context assigned, it
- * will create and assign a context and return that. */
-static php_stream_context *decode_context_param(zval *contextresource TSRMLS_DC) {
- php_stream_context *context = NULL; void *what; int type;
-
- what = zend_fetch_resource(&contextresource TSRMLS_CC, -1, "Stream-Context", &type, 2, le_stream_context, le_stream);
-
- if (what && type == le_stream) {
- php_stream *stream = (php_stream*)what;
- context = stream->context;
- if (context == NULL)
- context = stream->context = php_stream_context_alloc();
- } else if (what && type == le_stream_context) {
- context = (php_stream_context*)what;
- }
- return context;
-}
-/* }}} */
-
-/* {{{ proto array stream_context_get_options(resource context|resource stream)
- Retrieve options for a stream/wrapper/context */
-PHP_FUNCTION(stream_context_get_options)
-{
- zval *zcontext;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
- context = decode_context_param(zcontext TSRMLS_CC);
- ZEND_VERIFY_RESOURCE(context);
-
- array_init(return_value);
- *return_value = *context->options;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)
- Set an option for a wrapper */
-PHP_FUNCTION(stream_context_set_option)
-{
- zval *options = NULL, *zcontext = NULL, *zvalue = NULL;
- php_stream_context *context;
- char *wrappername, *optionname;
- long wrapperlen, optionlen;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "rssz", &zcontext, &wrappername, &wrapperlen,
- &optionname, &optionlen, &zvalue) == FAILURE) {
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "ra", &zcontext, &options) == FAILURE) {
- zend_error(E_WARNING, "%s() called with wrong number or type of parameters; please RTM",
- get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
- }
-
- /* figure out where the context is coming from exactly */
- context = decode_context_param(zcontext TSRMLS_CC);
- ZEND_VERIFY_RESOURCE(context);
-
- if (options) {
- /* handle the array syntax */
- RETVAL_BOOL(parse_context_options(context, options) == SUCCESS);
- } else {
- ZVAL_ADDREF(zvalue);
- php_stream_context_set_option(context, wrappername, optionname, zvalue);
- RETVAL_TRUE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto bool stream_context_set_params(resource context|resource stream, array options)
- Set parameters for a file context */
-PHP_FUNCTION(stream_context_set_params)
-{
- zval *params, *zcontext;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &zcontext, &params) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = decode_context_param(zcontext TSRMLS_CC);
- ZEND_VERIFY_RESOURCE(context);
-
- RETVAL_BOOL(parse_context_params(context, params) == SUCCESS);
-}
-/* }}} */
-
-/* {{{ proto resource stream_context_create([array options])
- Create a file context and optionally set parameters */
-PHP_FUNCTION(stream_context_create)
-{
- zval *params = NULL;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a", &params) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_alloc();
-
- if (params)
- parse_context_options(context, params);
-
- ZEND_REGISTER_RESOURCE(return_value, context, le_stream_context);
-}
-/* }}} */
-
-/* {{{ proto resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
- Open a file or a URL and return a file pointer */
-PHP_NAMED_FUNCTION(php_if_fopen)
-{
- char *filename, *mode;
- int filename_len, mode_len;
- zend_bool use_include_path = 0;
- zval *zcontext = NULL;
- php_stream *stream;
- php_stream_context *context = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|br", &filename, &filename_len,
- &mode, &mode_len, &use_include_path, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
- if (zcontext) {
- context = (php_stream_context*)zend_fetch_resource(&zcontext TSRMLS_CC, -1, "Stream-Context", NULL, 1, le_stream_context);
- ZEND_VERIFY_RESOURCE(context);
- }
-
- stream = php_stream_open_wrapper_ex(filename, mode,
- use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL, context);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- php_stream_to_zval(stream, return_value);
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool fclose(resource fp)
- Close an open file pointer */
-PHPAPI PHP_FUNCTION(fclose)
-{
- zval **arg1;
- int type;
- void *what;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- zend_list_delete(Z_LVAL_PP(arg1));
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto resource popen(string command, string mode)
- Execute a command and open either a read or a write pipe to it */
-
-PHP_FUNCTION(popen)
-{
- zval **arg1, **arg2;
- FILE *fp;
- char *p, *tmp = NULL;
- char *b, buf[1024];
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- p = estrndup(Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
- if (PG(safe_mode)){
- b = strchr(Z_STRVAL_PP(arg1), ' ');
- if (!b) {
- b = strrchr(Z_STRVAL_PP(arg1), '/');
- } else {
- char *c;
- c = Z_STRVAL_PP(arg1);
- while((*b != '/') && (b != c)) {
- b--;
- }
- if (b == c) {
- b = NULL;
- }
- }
- if (b) {
- snprintf(buf, sizeof(buf), "%s%s", PG(safe_mode_exec_dir), b);
- } else {
- snprintf(buf, sizeof(buf), "%s/%s", PG(safe_mode_exec_dir), Z_STRVAL_PP(arg1));
- }
-
- tmp = php_escape_shell_cmd(buf);
- fp = VCWD_POPEN(tmp, p);
- efree(tmp);
-
- if (!fp) {
- php_error(E_WARNING, "popen(\"%s\", \"%s\") - %s", buf, p, strerror(errno));
- RETURN_FALSE;
- }
- } else {
- fp = VCWD_POPEN(Z_STRVAL_PP(arg1), p);
- if (!fp) {
- php_error(E_WARNING, "popen(\"%s\", \"%s\") - %s", Z_STRVAL_PP(arg1), p, strerror(errno));
- efree(p);
- RETURN_FALSE;
- }
- }
- stream = php_stream_fopen_from_pipe(fp, p);
-
- if (stream == NULL) {
- zend_error(E_WARNING, "popen(\"%s\", \"%s\"): %s", Z_STRVAL_PP(arg1), p, strerror(errno));
- RETVAL_FALSE;
- } else {
- php_stream_to_zval(stream, return_value);
- }
-
- efree(p);
-}
-/* }}} */
-
-/* {{{ proto int pclose(resource fp)
- Close a file pointer opened by popen() */
-PHP_FUNCTION(pclose)
-{
- zval **arg1;
- void *what;
- int type;
-
- if (ARG_COUNT(ht) != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- zend_list_delete(Z_LVAL_PP(arg1));
- RETURN_LONG(FG(pclose_ret));
-}
-/* }}} */
-
-/* {{{ proto bool feof(resource fp)
- Test for end-of-file on a file pointer */
-PHPAPI PHP_FUNCTION(feof)
-{
- zval **arg1;
- int type;
- void *what;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- if (type == le_stream) {
- if (php_stream_eof((php_stream *) what)) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* TODO: move to main/network.c */
-PHPAPI int php_set_sock_blocking(int socketd, int block)
-{
- int ret = SUCCESS;
- int flags;
- int myflag = 0;
-
-#ifdef PHP_WIN32
- /* with ioctlsocket, a non-zero sets nonblocking, a zero sets blocking */
- flags = !block;
- if (ioctlsocket(socketd, FIONBIO, &flags)==SOCKET_ERROR){
- php_error(E_WARNING, "%s", WSAGetLastError());
- ret = FALSE;
- }
-#else
- flags = fcntl(socketd, F_GETFL);
-#ifdef O_NONBLOCK
- myflag = O_NONBLOCK; /* POSIX version */
-#elif defined(O_NDELAY)
- myflag = O_NDELAY; /* old non-POSIX version */
-#endif
- if (!block) {
- flags |= myflag;
- } else {
- flags &= ~myflag;
- }
- fcntl(socketd, F_SETFL, flags);
-#endif
- return ret;
-}
-
-/* {{{ proto bool socket_set_blocking(resource socket, int mode)
- Set blocking/non-blocking mode on a socket */
-PHP_FUNCTION(socket_set_blocking)
-{
- zval **arg1, **arg2;
- int block, type;
- int socketd = 0;
- void *what;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- convert_to_long_ex(arg2);
- block = Z_LVAL_PP(arg2);
-
- if (php_stream_is((php_stream*)what, PHP_STREAM_IS_SOCKET)) {
- /* TODO: check if the blocking mode is changed elsewhere, and see if we
- * can integrate these calls into php_stream_sock_set_blocking */
- if (FAILURE == php_stream_cast((php_stream *) what, PHP_STREAM_AS_SOCKETD, (void *) &socketd, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- if (php_set_sock_blocking(socketd, block) == FAILURE)
- RETURN_FALSE;
-
- php_stream_sock_set_blocking((php_stream*)what, block == 0 ? 0 : 1 TSRMLS_CC);
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/* {{{ proto bool set_socket_blocking(resource socket, int mode)
- Set blocking/non-blocking mode on a socket */
-PHP_FUNCTION(set_socket_blocking)
-{
- php_error(E_NOTICE, "set_socket_blocking() is deprecated, use socket_set_blocking() instead");
- PHP_FN(socket_set_blocking)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_timeout(int socket_descriptor, int seconds, int microseconds)
- Set timeout on socket read to seconds + microseonds */
-PHP_FUNCTION(socket_set_timeout)
-{
-#if HAVE_SYS_TIME_H
- zval **socket, **seconds, **microseconds;
- int type;
- void *what;
- struct timeval t;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &socket, &seconds, &microseconds)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(socket TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- convert_to_long_ex(seconds);
- t.tv_sec = Z_LVAL_PP(seconds);
-
- if (ZEND_NUM_ARGS() == 3) {
- convert_to_long_ex(microseconds);
- t.tv_usec = Z_LVAL_PP(microseconds) % 1000000;
- t.tv_sec += Z_LVAL_PP(microseconds) / 1000000;
- }
- else
- t.tv_usec = 0;
-
- if (php_stream_is((php_stream*)what, PHP_STREAM_IS_SOCKET)) {
- php_stream_sock_set_timeout((php_stream*)what, &t TSRMLS_CC);
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-#endif /* HAVE_SYS_TIME_H */
-}
-
-/* }}} */
-
-
-/* {{{ proto array socket_get_status(resource socket_descriptor)
- Return an array describing socket status */
-PHP_FUNCTION(socket_get_status)
-{
- zval **socket;
- int type;
- void *what;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &socket) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(socket TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- array_init(return_value);
-
- if (php_stream_is((php_stream*)what, PHP_STREAM_IS_SOCKET)) {
-
- php_netstream_data_t *sock = PHP_NETSTREAM_DATA_FROM_STREAM((php_stream*)what);
-
- add_assoc_bool(return_value, "timed_out", sock->timeout_event);
- add_assoc_bool(return_value, "blocked", sock->is_blocked);
- add_assoc_bool(return_value, "eof", sock->eof);
- add_assoc_long(return_value, "unread_bytes", sock->writepos - sock->readpos);
-
- }
- else {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto string fgets(resource fp[, int length])
- Get a line from file pointer */
-PHPAPI PHP_FUNCTION(fgets)
-{
- zval **arg1, **arg2;
- int len = 1024, type;
- char *buf;
- void *what;
- int argc = ZEND_NUM_ARGS();
-
- if (argc<1 || argc>2 || zend_get_parameters_ex(argc, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- if (argc>1) {
- convert_to_long_ex(arg2);
- len = Z_LVAL_PP(arg2);
- }
-
- if (len < 0) {
- php_error(E_WARNING, "length parameter to fgets() may not be negative");
- RETURN_FALSE;
- }
-
- buf = emalloc(sizeof(char) * (len + 1));
- /* needed because recv doesnt put a null at the end*/
- memset(buf, 0, len+1);
-
- if (php_stream_gets((php_stream *) what, buf, len) == NULL)
- goto exit_failed;
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(buf, 0, &Z_STRLEN_P(return_value), 1 TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_STRING(return_value, buf, 0);
- /* resize buffer if it's much larger than the result */
- if (Z_STRLEN_P(return_value) < len / 2) {
- Z_STRVAL_P(return_value) = erealloc(buf, Z_STRLEN_P(return_value) + 1);
- }
- }
- return;
-
-exit_failed:
- RETVAL_FALSE;
- efree(buf);
-}
-/* }}} */
-
-/* {{{ proto string fgetc(resource fp)
- Get a character from file pointer */
-PHPAPI PHP_FUNCTION(fgetc)
-{
- zval **arg1;
- int type;
- char *buf;
- void *what;
- int result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- buf = emalloc(2 * sizeof(char));
-
- result = php_stream_getc((php_stream*)what);
-
- if (result == EOF) {
- efree(buf);
- RETVAL_FALSE;
- } else {
- buf[0] = result;
- buf[1] = '\0';
-
- RETURN_STRINGL(buf, 1, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto string fgetss(resource fp, int length [, string allowable_tags])
- Get a line from file pointer and strip HTML tags */
-PHPAPI PHP_FUNCTION(fgetss)
-{
- zval **fd, **bytes, **allow=NULL;
- int len, type;
- char *buf;
- php_stream *stream;
- char *allowed_tags=NULL;
- int allowed_tags_len=0;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fd, &bytes) == FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &fd, &bytes, &allow) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(allow);
- allowed_tags = Z_STRVAL_PP(allow);
- allowed_tags_len = Z_STRLEN_PP(allow);
- break;
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- stream = zend_fetch_resource(fd TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(stream);
-
- convert_to_long_ex(bytes);
- len = Z_LVAL_PP(bytes);
- if (len < 0) {
- php_error(E_WARNING, "length parameter to fgetss() may not be negative");
- RETURN_FALSE;
- }
-
- buf = emalloc(sizeof(char) * (len + 1));
- /*needed because recv doesnt set null char at end*/
- memset(buf, 0, len + 1);
-
- if (php_stream_gets(stream, buf, len) == NULL) {
- efree(buf);
- RETURN_FALSE;
- }
-
- /* strlen() can be used here since we are doing it on the return of an fgets() anyway */
- php_strip_tags(buf, strlen(buf), &stream->fgetss_state, allowed_tags, allowed_tags_len);
-
- RETURN_STRING(buf, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed fscanf(string str, string format [, string ...])
- Implements a mostly ANSI compatible fscanf() */
-PHP_FUNCTION(fscanf)
-{
- int result;
- zval **file_handle, **format_string;
- int len, type;
- char *buf;
- void *what;
-
- zval ***args;
- int argCount;
-
- argCount = ZEND_NUM_ARGS();
- if (argCount < 2) {
- WRONG_PARAM_COUNT;
- }
- args = (zval ***)emalloc(argCount * sizeof(zval **));
- if (!args || (zend_get_parameters_array_ex(argCount, args) == FAILURE)) {
- efree( args );
- WRONG_PARAM_COUNT;
- }
-
- file_handle = args[0];
- format_string = args[1];
-
- what = zend_fetch_resource(file_handle TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
-
- /*
- * we can't do a ZEND_VERIFY_RESOURCE(what), otherwise we end up
- * with a leak if we have an invalid filehandle. This needs changing
- * if the code behind ZEND_VERIFY_RESOURCE changed. - cc
- */
- if (!what) {
- efree(args);
- RETURN_FALSE;
- }
-
- len = SCAN_MAX_FSCANF_BUFSIZE;
-
- buf = emalloc(len + 1);
- /* needed because recv doesnt put a null at the end*/
- memset(buf, 0, len+1);
-
- if (php_stream_gets((php_stream *) what, buf, len) == NULL) {
- efree(buf);
- RETURN_FALSE;
- }
-
- convert_to_string_ex(format_string);
- result = php_sscanf_internal(buf, Z_STRVAL_PP(format_string),
- argCount, args, 2, &return_value TSRMLS_CC);
- efree(args);
- efree(buf);
- if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
- WRONG_PARAM_COUNT
- }
-
-
-}
-/* }}} */
-
-/* {{{ proto int fwrite(resource fp, string str [, int length])
- Binary-safe file write */
-PHPAPI PHP_FUNCTION(fwrite)
-{
- zval **arg1, **arg2, **arg3=NULL;
- int ret, type;
- int num_bytes;
- void *what;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(arg2);
- num_bytes = Z_STRLEN_PP(arg2);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- num_bytes = MIN(Z_LVAL_PP(arg3), Z_STRLEN_PP(arg2));
- break;
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- if (!arg3 && PG(magic_quotes_runtime)) {
- zval_copy_ctor(*arg2);
- php_stripslashes(Z_STRVAL_PP(arg2), &num_bytes TSRMLS_CC);
- }
-
- ret = php_stream_write((php_stream *) what, Z_STRVAL_PP(arg2), num_bytes);
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto bool fflush(resource fp)
- Flushes output */
-PHPAPI PHP_FUNCTION(fflush)
-{
- zval **arg1;
- int ret, type;
- void *what;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- ret = php_stream_flush((php_stream *) what);
- if (ret) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int set_file_buffer(resource fp, int buffer)
- Set file write buffer */
-PHP_FUNCTION(set_file_buffer)
-{
- zval **arg1, **arg2;
- int ret, type, buff;
- php_stream *stream;
- FILE * fp;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- stream = (php_stream*)zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(stream);
- if (!php_stream_is(stream, PHP_STREAM_IS_STDIO) || FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)&fp, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(arg2);
- buff = Z_LVAL_PP(arg2);
-
- /* if buff is 0 then set to non-buffered */
- if (buff == 0){
- ret = setvbuf(fp, NULL, _IONBF, 0);
- } else {
- ret = setvbuf(fp, NULL, _IOFBF, buff);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto bool rewind(resource fp)
- Rewind the position of a file pointer */
-PHPAPI PHP_FUNCTION(rewind)
-{
- zval **arg1;
- void *what;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- if (-1 == php_stream_rewind((php_stream*)what)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftell(resource fp)
- Get file pointer's read/write position */
-PHPAPI PHP_FUNCTION(ftell)
-{
- zval **arg1;
- void *what;
- long ret;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- ret = php_stream_tell((php_stream*)what);
- if (ret == -1) {
- RETURN_FALSE;
- }
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto int fseek(resource fp, int offset [, int whence])
- Seek on a file pointer */
-PHPAPI PHP_FUNCTION(fseek)
-{
- zval **arg1, **arg2, **arg3;
- int argcount = ZEND_NUM_ARGS(), whence = SEEK_SET;
- void *what;
- int type;
-
- if (argcount < 2 || argcount > 3 ||
- zend_get_parameters_ex(argcount, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- convert_to_long_ex(arg2);
- if (argcount > 2) {
- convert_to_long_ex(arg3);
- whence = Z_LVAL_PP(arg3);
- }
-
- RETURN_LONG(php_stream_seek((php_stream*)what, Z_LVAL_PP(arg2), whence));
-}
-
-/* }}} */
-/* {{{ proto bool mkdir(string pathname[, int mode])
- Create a directory */
-
-PHP_FUNCTION(mkdir)
-{
- int dir_len, ret;
- long mode = 0777;
- char *dir;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &dir, &dir_len, &mode) == FAILURE) {
- return;
- }
-
- if (PG(safe_mode) &&(!php_checkuid(dir, NULL, CHECKUID_ALLOW_ONLY_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(dir TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_MKDIR(dir, (mode_t)mode);
- if (ret < 0) {
- php_error(E_WARNING, "mkdir() failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool rmdir(string dirname)
- Remove a directory */
-PHP_FUNCTION(rmdir)
-{
- zval **arg1;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(arg1), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg1) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_RMDIR(Z_STRVAL_PP(arg1));
- if (ret < 0) {
- php_error(E_WARNING, "rmdir() failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int readfile(string filename [, int use_include_path])
- Output a file or a URL */
-PHP_FUNCTION(readfile)
-{
- zval **arg1, **arg2;
- int size=0;
- int use_include_path=0;
- php_stream *stream;
-
- /* check args */
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
- use_include_path = Z_LVAL_PP(arg2);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb",
- use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
- if (stream) {
- size = php_stream_passthru(stream);
- php_stream_close(stream);
- RETURN_LONG(size);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-
-/* {{{ proto int umask([int mask])
- Return or change the umask */
-PHP_FUNCTION(umask)
-{
- pval **arg1;
- int oldumask;
- int arg_count = ZEND_NUM_ARGS();
-
- oldumask = umask(077);
-
- if (arg_count == 0) {
- umask(oldumask);
- } else {
- if (arg_count > 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- umask(Z_LVAL_PP(arg1));
- }
-
- /* XXX we should maybe reset the umask after each request! */
-
- RETURN_LONG(oldumask);
-}
-
-/* }}} */
-
-
-/* {{{ proto int fpassthru(resource fp)
- Output all remaining data from a file pointer */
-
-PHPAPI PHP_FUNCTION(fpassthru)
-{
- zval **arg1;
- int size, type;
- void *what;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- size = php_stream_passthru((php_stream*)what);
- RETURN_LONG(size);
-}
-/* }}} */
-
-/* {{{ proto bool rename(string old_name, string new_name)
- Rename a file */
-PHP_FUNCTION(rename)
-{
- zval **old_arg, **new_arg;
- char *old_name, *new_name;
- int ret;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &old_arg, &new_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(old_arg);
- convert_to_string_ex(new_arg);
-
- old_name = Z_STRVAL_PP(old_arg);
- new_name = Z_STRVAL_PP(new_arg);
-
- if (PG(safe_mode) &&(!php_checkuid(old_name, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(old_name TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_RENAME(old_name, new_name);
-
- if (ret == -1) {
- php_error(E_WARNING, "rename() failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool unlink(string filename)
- Delete a file */
-PHP_FUNCTION(unlink)
-{
- zval **filename;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_UNLINK(Z_STRVAL_PP(filename));
- if (ret == -1) {
- php_error(E_WARNING, "unlink() failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
- /* Clear stat cache */
- PHP_FN(clearstatcache)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftruncate(resource fp, int size)
- Truncate file to 'size' length */
-PHP_NAMED_FUNCTION(php_if_ftruncate)
-{
- zval **fp , **size;
- short int ret;
- int type;
- void *what;
- int fd;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fp, &size) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- what = zend_fetch_resource(fp TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(what);
-
- convert_to_long_ex(size);
-
- if (php_stream_is((php_stream*)what, PHP_STREAM_IS_SOCKET)) {
- php_error(E_WARNING, "can't truncate sockets!");
- RETURN_FALSE;
- }
- if (SUCCESS == php_stream_cast((php_stream*)what, PHP_STREAM_AS_FD, (void*)&fd, 1)) {
- ret = ftruncate(fd, Z_LVAL_PP(size));
- RETURN_LONG(ret + 1);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int fstat(resource fp)
- Stat() on a filehandle */
-PHP_NAMED_FUNCTION(php_if_fstat)
-{
- zval **fp;
- zval *stat_dev, *stat_ino, *stat_mode, *stat_nlink, *stat_uid, *stat_gid, *stat_rdev,
- *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, *stat_blocks;
- int type;
- php_stream *stream;
- php_stream_statbuf stat_ssb;
-
- char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev",
- "size", "atime", "mtime", "ctime", "blksize", "blocks"};
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- stream = (php_stream *) zend_fetch_resource(fp TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(stream);
-
- if (php_stream_stat(stream, &stat_ssb)) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- MAKE_LONG_ZVAL_INCREF(stat_dev, stat_ssb.sb.st_dev);
- MAKE_LONG_ZVAL_INCREF(stat_ino, stat_ssb.sb.st_ino);
- MAKE_LONG_ZVAL_INCREF(stat_mode, stat_ssb.sb.st_mode);
- MAKE_LONG_ZVAL_INCREF(stat_nlink, stat_ssb.sb.st_nlink);
- MAKE_LONG_ZVAL_INCREF(stat_uid, stat_ssb.sb.st_uid);
- MAKE_LONG_ZVAL_INCREF(stat_gid, stat_ssb.sb.st_gid);
-#ifdef HAVE_ST_RDEV
- MAKE_LONG_ZVAL_INCREF(stat_rdev, stat_ssb.sb.st_rdev);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_rdev, -1);
-#endif
- MAKE_LONG_ZVAL_INCREF(stat_size, stat_ssb.sb.st_size);
- MAKE_LONG_ZVAL_INCREF(stat_atime, stat_ssb.sb.st_atime);
- MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_ssb.sb.st_mtime);
- MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_ssb.sb.st_ctime);
-#ifdef HAVE_ST_BLKSIZE
- MAKE_LONG_ZVAL_INCREF(stat_blksize, stat_ssb.sb.st_blksize);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blksize,-1);
-#endif
-#ifdef HAVE_ST_BLOCKS
- MAKE_LONG_ZVAL_INCREF(stat_blocks, stat_ssb.sb.st_blocks);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blocks,-1);
-#endif
- /* Store numeric indexes in propper order */
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_dev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ino, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mode, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_nlink, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_uid, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_gid, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_rdev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_size, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_atime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mtime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ctime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blksize, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blocks, sizeof(zval *), NULL);
-
- /* Store string indexes referencing the same zval*/
- zend_hash_update(HASH_OF(return_value), stat_sb_names[0], strlen(stat_sb_names[0])+1, (void *)&stat_dev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[1], strlen(stat_sb_names[1])+1, (void *)&stat_ino, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[2], strlen(stat_sb_names[2])+1, (void *)&stat_mode, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[3], strlen(stat_sb_names[3])+1, (void *)&stat_nlink, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[4], strlen(stat_sb_names[4])+1, (void *)&stat_uid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[5], strlen(stat_sb_names[5])+1, (void *)&stat_gid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[6], strlen(stat_sb_names[6])+1, (void *)&stat_rdev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[7], strlen(stat_sb_names[7])+1, (void *)&stat_size, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[8], strlen(stat_sb_names[8])+1, (void *)&stat_atime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[9], strlen(stat_sb_names[9])+1, (void *)&stat_mtime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[10], strlen(stat_sb_names[10])+1, (void *)&stat_ctime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[11], strlen(stat_sb_names[11])+1, (void *)&stat_blksize, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[12], strlen(stat_sb_names[12])+1, (void *)&stat_blocks, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ proto bool copy(string source_file, string destination_file)
- Copy a file */
-PHP_FUNCTION(copy)
-{
- zval **source, **target;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &source, &target) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(source);
- convert_to_string_ex(target);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(source), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(source) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(target), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(target) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (php_copy_file(Z_STRVAL_PP(source), Z_STRVAL_PP(target) TSRMLS_CC)==SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_copy_file
- */
-PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC)
-{
- php_stream *srcstream = NULL, *deststream = NULL;
- int ret = FAILURE;
-
- srcstream = php_stream_open_wrapper(src, "rb",
- ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
-
- deststream = php_stream_open_wrapper(dest, "wb",
- ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
-
- if (srcstream && deststream)
- ret = php_stream_copy_to_stream(srcstream, deststream, PHP_STREAM_COPY_ALL) == 0 ? FAILURE : SUCCESS;
-
- if (srcstream)
- php_stream_close(srcstream);
- if (deststream)
- php_stream_close(deststream);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ proto string fread(resource fp, int length)
- Binary-safe file read */
-PHPAPI PHP_FUNCTION(fread)
-{
- zval **arg1, **arg2;
- int len, type;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- stream = (php_stream*)zend_fetch_resource(arg1 TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(stream);
-
- convert_to_long_ex(arg2);
- len = Z_LVAL_PP(arg2);
- if (len < 0) {
- php_error(E_WARNING, "length parameter to fread() may not be negative");
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = emalloc(len + 1);
- Z_STRLEN_P(return_value) = php_stream_read(stream, Z_STRVAL_P(return_value), len);
-
- /* needed because recv/read/gzread doesnt put a null at the end*/
- Z_STRVAL_P(return_value)[Z_STRLEN_P(return_value)] = 0;
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(Z_STRVAL_P(return_value),
- Z_STRLEN_P(return_value), &Z_STRLEN_P(return_value), 1 TSRMLS_CC);
- }
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto array fgetcsv(resource fp, int length [, string delimiter [, string enclosure]])
- Get line from file pointer and parse for CSV fields */
-PHP_FUNCTION(fgetcsv)
-{
- char *temp, *tptr, *bptr, *lineEnd;
- char delimiter = ','; /* allow this to be set as parameter */
- char enclosure = '"'; /* allow this to be set as parameter */
-
- /* first section exactly as php_fgetss */
-
- zval **fd, **bytes, **p_delim, **p_enclosure;
- int len, type;
- char *buf;
- php_stream *stream;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fd, &bytes) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &fd, &bytes, &p_delim) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(p_delim);
- /* Make sure that there is at least one character in string */
- if (Z_STRLEN_PP(p_delim) < 1) {
- php_error(E_WARNING, "%s() 3rd parameter must be a character",
- get_active_function_name(TSRMLS_C));
- return;
- }
- /* use first character from string */
- delimiter = Z_STRVAL_PP(p_delim)[0];
- break;
-
- case 4:
- if (zend_get_parameters_ex(4, &fd, &bytes, &p_delim, &p_enclosure) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(p_delim);
- /* Make sure that there is at least one character in string */
- if (Z_STRLEN_PP(p_delim) < 1) {
- php_error(E_WARNING, "%s() 3rd parameter must be a character",
- get_active_function_name(TSRMLS_C));
- return;
- }
- /* use first character from string */
- delimiter = Z_STRVAL_PP(p_delim)[0];
-
- convert_to_string_ex(p_enclosure);
- /* Make sure that there is at least one character in string */
- if (Z_STRLEN_PP(p_enclosure) < 1) {
- php_error(E_WARNING, "%s() 4th parameter must be a character",
- get_active_function_name(TSRMLS_C));
- return;
- }
- /* use first character from string */
- enclosure = Z_STRVAL_PP(p_enclosure)[0];
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- stream = (php_stream*)zend_fetch_resource(fd TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream);
- ZEND_VERIFY_RESOURCE(stream);
-
- convert_to_long_ex(bytes);
- len = Z_LVAL_PP(bytes);
- if (len < 0) {
- php_error(E_WARNING, "length parameter to fgetcsv() may not be negative");
- RETURN_FALSE;
- }
-
- buf = emalloc(len + 1);
- /* needed because recv/read/gzread doesnt set null char at end */
- memset(buf, 0, len + 1);
-
- if (php_stream_gets(stream, buf, len) == NULL) {
- efree(buf);
- RETURN_FALSE;
- }
-
- /* Now into new section that parses buf for delimiter/enclosure fields */
-
- /* Strip trailing space from buf, saving end of line in case required for enclosure field */
-
- lineEnd = emalloc(len + 1);
- bptr = buf;
- tptr = buf + strlen(buf) -1;
- while ( isspace((int) *tptr) && (*tptr!=delimiter) && (tptr > bptr) ) tptr--;
- tptr++;
- strcpy(lineEnd, tptr);
-
- /* add single space - makes it easier to parse trailing null field */
- *tptr++ = ' ';
- *tptr = 0;
-
- /* reserve workspace for building each individual field */
-
- temp = emalloc(len); /* unlikely but possible! */
- tptr = temp;
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Main loop to read CSV fields */
- /* NB this routine will return a single null entry for a blank line */
-
- do {
- /* 1. Strip any leading space */
- while(isspace((int) *bptr) && (*bptr!=delimiter)) bptr++;
- /* 2. Read field, leaving bptr pointing at start of next field */
- if (*bptr == enclosure) {
- /* 2A. handle enclosure delimited field */
- bptr++; /* move on to first character in field */
- while (*bptr) {
- if (*bptr == enclosure) {
- /* handle the enclosure */
- if ( *(bptr+1) == '"') {
- /* embedded enclosure */
- *tptr++ = *bptr; bptr +=2;
- } else {
- /* must be end of string - skip to start of next field or end */
- while ( (*bptr != delimiter) && *bptr ) bptr++;
- if (*bptr == delimiter) bptr++;
- *tptr=0; /* terminate temporary string */
- break; /* .. from handling this field - resumes at 3. */
- }
- } else {
- /* normal character */
- *tptr++ = *bptr++;
-
- if (*bptr == 0) { /* embedded line end? */
- *(tptr-1)=0; /* remove space character added on reading line */
- strcat(temp, lineEnd); /* add the embedded line end to the field */
-
- /* read a new line from input, as at start of routine */
- memset(buf, 0, len+1);
-
- if (php_stream_gets(stream, buf, len) == NULL) {
- efree(lineEnd);
- efree(temp);
- efree(buf);
- zval_ptr_dtor(&return_value);
- RETURN_FALSE;
- }
-
- bptr = buf;
- tptr = buf + strlen(buf) -1;
- while (isspace((int) *tptr) && (*tptr!=delimiter) && (tptr > bptr))
- tptr--;
- tptr++;
- strcpy(lineEnd, tptr);
- *tptr++ = ' ';
- *tptr = 0;
-
- tptr = temp; /* reset temp pointer to end of field as read so far */
- while (*tptr)
- tptr++;
- }
- }
- }
- } else {
- /* 2B. Handle non-enclosure field */
- while ((*bptr != delimiter) && *bptr)
- *tptr++ = *bptr++;
- *tptr=0; /* terminate temporary string */
-
- if (strlen(temp)) {
- tptr--;
- while (isspace((int)*tptr) && (*tptr!=delimiter))
- *tptr-- = 0; /* strip any trailing spaces */
- }
-
- if (*bptr == delimiter)
- bptr++;
- }
-
- /* 3. Now pass our field back to php */
- add_next_index_string(return_value, temp, 1);
- tptr = temp;
- } while (*bptr);
-
- efree(lineEnd);
- efree(temp);
- efree(buf);
-}
-/* }}} */
-
-
-#if (!defined(PHP_WIN32) && !defined(__BEOS__) && HAVE_REALPATH) || defined(ZTS)
-/* {{{ proto string realpath(string path)
- Return the resolved path */
-PHP_FUNCTION(realpath)
-{
- zval **path;
- char resolved_path_buff[MAXPATHLEN];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &path) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(path);
-
- if (VCWD_REALPATH(Z_STRVAL_PP(path), resolved_path_buff)) {
- RETURN_STRING(resolved_path_buff, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* See http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2 */
-#define PHP_META_HTML401_CHARS "-_.:"
-
-/* {{{ php_next_meta_token
- Tokenizes an HTML file for get_meta_tags */
-php_meta_tags_token php_next_meta_token(php_meta_tags_data *md TSRMLS_DC)
-{
- int ch = 0, compliment;
- char buff[META_DEF_BUFSIZE + 1];
-
- memset((void *)buff, 0, META_DEF_BUFSIZE + 1);
-
- while (md->ulc || (!php_stream_eof(md->stream) && (ch = php_stream_getc(md->stream)))) {
- if(php_stream_eof(md->stream))
- break;
-
- if (md->ulc) {
- ch = md->lc;
- md->ulc = 0;
- }
-
- switch (ch) {
- case '<':
- return TOK_OPENTAG;
- break;
- case '>':
- return TOK_CLOSETAG;
- break;
- case '=':
- return TOK_EQUAL;
- break;
- case '/':
- return TOK_SLASH;
- break;
- case '\'':
- case '"':
- compliment = ch;
- md->token_len = 0;
- while (!php_stream_eof(md->stream) &&
- (ch = php_stream_getc(md->stream)) &&
- ch != compliment && ch != '<' && ch != '>') {
-
- buff[(md->token_len)++] = ch;
-
- if (md->token_len == META_DEF_BUFSIZE)
- break;
- }
-
- if (ch == '<' || ch == '>') {
- /* Was just an apostrohpe */
- md->ulc = 1;
- md->lc = ch;
- }
-
- /* We don't need to alloc unless we are in a meta tag */
- if (md->in_meta) {
- md->token_data = (char *) emalloc(md->token_len + 1);
- memcpy(md->token_data, buff, md->token_len+1);
- }
-
- return TOK_STRING;
- break;
- case '\n':
- case '\r':
- case '\t':
- break;
- case ' ':
- return TOK_SPACE;
- break;
- default:
- if (isalnum(ch)) {
- md->token_len = 0;
- buff[(md->token_len)++] = ch;
- while (!php_stream_eof(md->stream) &&
- (ch = php_stream_getc(md->stream)) &&
- (isalnum(ch) || strchr(PHP_META_HTML401_CHARS, ch))) {
-
- buff[(md->token_len)++] = ch;
-
- if (md->token_len == META_DEF_BUFSIZE)
- break;
- }
-
- /* This is ugly, but we have to replace ungetc */
- if (!isalpha(ch) && ch != '-') {
- md->ulc = 1;
- md->lc = ch;
- }
-
- md->token_data = (char *) emalloc(md->token_len + 1);
- memcpy(md->token_data, buff, md->token_len+1);
-
- return TOK_ID;
- } else {
- return TOK_OTHER;
- }
- break;
- }
- }
-
- return TOK_EOF;
-}
-
-/* }}} */
-
-#ifdef HAVE_FNMATCH
-/* {{{ proto bool fnmatch(string pattern, string filename [, int flags])
- Match filename against pattern */
-PHP_FUNCTION(fnmatch)
-{
- char *pattern = NULL;
- char *filename = NULL;
- int argc = ZEND_NUM_ARGS();
- int pattern_len;
- int filename_len;
- long flags=0;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "ss|l",
- &pattern, &pattern_len,
- &filename, &filename_len,
- &flags)
- == FAILURE)
- return;
-
- RETURN_BOOL( ! fnmatch( pattern, filename, flags ));
-}
-/* }}} */
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/file.h b/ext/standard/file.h
deleted file mode 100644
index e861bd88e6..0000000000
--- a/ext/standard/file.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.30 1999-06-16 [ssb] */
-
-#ifndef FILE_H
-#define FILE_H
-
-PHP_MINIT_FUNCTION(file);
-PHP_MSHUTDOWN_FUNCTION(file);
-
-PHP_FUNCTION(tempnam);
-PHP_NAMED_FUNCTION(php_if_tmpfile);
-PHP_NAMED_FUNCTION(php_if_fopen);
-PHPAPI PHP_FUNCTION(fclose);
-PHP_FUNCTION(popen);
-PHP_FUNCTION(pclose);
-PHPAPI PHP_FUNCTION(feof);
-PHPAPI PHP_FUNCTION(fread);
-PHPAPI PHP_FUNCTION(fgetc);
-PHPAPI PHP_FUNCTION(fgets);
-PHP_FUNCTION(fscanf);
-PHPAPI PHP_FUNCTION(fgetss);
-PHP_FUNCTION(fgetcsv);
-PHPAPI PHP_FUNCTION(fwrite);
-PHPAPI PHP_FUNCTION(fflush);
-PHPAPI PHP_FUNCTION(rewind);
-PHPAPI PHP_FUNCTION(ftell);
-PHPAPI PHP_FUNCTION(fseek);
-PHP_FUNCTION(mkdir);
-PHP_FUNCTION(rmdir);
-PHPAPI PHP_FUNCTION(fpassthru);
-PHP_FUNCTION(readfile);
-PHP_FUNCTION(umask);
-PHP_FUNCTION(rename);
-PHP_FUNCTION(unlink);
-PHP_FUNCTION(copy);
-PHP_FUNCTION(file);
-PHP_FUNCTION(file_get_contents);
-PHP_FUNCTION(set_socket_blocking); /* deprecated */
-PHP_FUNCTION(socket_set_blocking);
-PHP_FUNCTION(socket_set_timeout);
-PHP_FUNCTION(socket_get_status);
-PHP_FUNCTION(set_file_buffer);
-PHP_FUNCTION(get_meta_tags);
-PHP_FUNCTION(flock);
-PHP_FUNCTION(fd_set);
-PHP_FUNCTION(fd_isset);
-PHP_FUNCTION(select);
-#if (!defined(PHP_WIN32) && !defined(__BEOS__) && HAVE_REALPATH) || defined(ZTS)
-PHP_FUNCTION(realpath);
-PHP_FUNCTION(fnmatch);
-#endif
-PHP_NAMED_FUNCTION(php_if_ftruncate);
-PHP_NAMED_FUNCTION(php_if_fstat);
-
-PHP_FUNCTION(file_get_wrapper_data);
-PHP_FUNCTION(file_register_wrapper);
-PHP_FUNCTION(stream_context_create);
-PHP_FUNCTION(stream_context_set_params);
-PHP_FUNCTION(stream_context_set_option);
-PHP_FUNCTION(stream_context_get_options);
-PHP_MINIT_FUNCTION(user_streams);
-
-PHPAPI int php_set_sock_blocking(int socketd, int block);
-PHPAPI int php_file_le_stream(void);
-PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC);
-
-#define META_DEF_BUFSIZE 8192
-
-typedef enum _php_meta_tags_token {
- TOK_EOF = 0,
- TOK_OPENTAG,
- TOK_CLOSETAG,
- TOK_SLASH,
- TOK_EQUAL,
- TOK_SPACE,
- TOK_ID,
- TOK_STRING,
- TOK_OTHER
-} php_meta_tags_token;
-
-typedef struct _php_meta_tags_data {
- php_stream *stream;
- int ulc;
- int lc;
- char *input_buffer;
- char *token_data;
- int token_len;
- int in_meta;
-} php_meta_tags_data;
-
-php_meta_tags_token php_next_meta_token(php_meta_tags_data * TSRMLS_DC);
-
-typedef struct {
- int pclose_ret;
- HashTable ht_persistent_socks;
- size_t def_chunk_size;
-} php_file_globals;
-
-#ifdef ZTS
-#define FG(v) TSRMG(file_globals_id, php_file_globals *, v)
-extern int file_globals_id;
-#else
-#define FG(v) (file_globals.v)
-extern php_file_globals file_globals;
-#endif
-
-
-#endif /* FILE_H */
-
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
deleted file mode 100644
index 84ed8a6f63..0000000000
--- a/ext/standard/filestat.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include "php_globals.h"
-
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <time.h>
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if HAVE_SYS_VFS_H
-# include <sys/vfs.h>
-#endif
-
-#ifdef OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
-# include <sys/statvfs.h>
-#elif defined(HAVE_SYS_STATFS_H) && defined(HAVE_STATFS)
-# include <sys/statfs.h>
-#elif defined(HAVE_SYS_MOUNT_H) && defined(HAVE_STATFS)
-# include <sys/mount.h>
-#endif
-
-#if HAVE_PWD_H
-# ifdef PHP_WIN32
-# include "win32/pwd.h"
-# else
-# include <pwd.h>
-# endif
-#endif
-
-#if HAVE_GRP_H
-# ifdef PHP_WIN32
-# include "win32/grp.h"
-# else
-# include <grp.h>
-# endif
-#endif
-
-#if HAVE_UTIME
-# ifdef PHP_WIN32
-# include <sys/utime.h>
-# else
-# include <utime.h>
-# endif
-#endif
-
-#include "basic_functions.h"
-#include "php_filestat.h"
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR)
-#endif
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG)
-#endif
-#ifndef S_ISLNK
-#define S_ISLNK(mode) (((mode)&S_IFMT) == S_IFLNK)
-#endif
-
-#define S_IXROOT ( S_IXUSR | S_IXGRP | S_IXOTH )
-
-/* Switches for various filestat functions: */
-#define FS_PERMS 0
-#define FS_INODE 1
-#define FS_SIZE 2
-#define FS_OWNER 3
-#define FS_GROUP 4
-#define FS_ATIME 5
-#define FS_MTIME 6
-#define FS_CTIME 7
-#define FS_TYPE 8
-#define FS_IS_W 9
-#define FS_IS_R 10
-#define FS_IS_X 11
-#define FS_IS_FILE 12
-#define FS_IS_DIR 13
-#define FS_IS_LINK 14
-#define FS_EXISTS 15
-#define FS_LSTAT 16
-#define FS_STAT 17
-
-
-PHP_RINIT_FUNCTION(filestat)
-{
- BG(CurrentStatFile)=NULL;
- BG(CurrentStatLength)=0;
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(filestat)
-{
- if (BG(CurrentStatFile)) {
- efree (BG(CurrentStatFile));
- }
- return SUCCESS;
-}
-
-/* {{{ proto float disk_total_space(string path)
- Get total disk space for filesystem that path is on */
-PHP_FUNCTION(disk_total_space)
-{
- pval **path;
-#ifdef WINDOWS
- double bytestotal;
-
- HINSTANCE kernel32;
- FARPROC gdfse;
- typedef BOOL (WINAPI *gdfse_func)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
- gdfse_func func;
-
- /* These are used by GetDiskFreeSpaceEx, if available. */
- ULARGE_INTEGER FreeBytesAvailableToCaller;
- ULARGE_INTEGER TotalNumberOfBytes;
- ULARGE_INTEGER TotalNumberOfFreeBytes;
-
- /* These are used by GetDiskFreeSpace otherwise. */
- DWORD SectorsPerCluster;
- DWORD BytesPerSector;
- DWORD NumberOfFreeClusters;
- DWORD TotalNumberOfClusters;
-
-#else /* not - WINDOWS */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- struct statvfs buf;
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- struct statfs buf;
-#endif
- double bytestotal = 0;
-#endif /* WINDOWS */
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &path)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(path);
-
- if (php_check_open_basedir(Z_STRVAL_PP(path) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-#ifdef WINDOWS
- /* GetDiskFreeSpaceEx is only available in NT and Win95 post-OSR2,
- so we have to jump through some hoops to see if the function
- exists. */
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- gdfse = GetProcAddress(kernel32, "GetDiskFreeSpaceExA");
- /* It's available, so we can call it. */
- if (gdfse) {
- func = (gdfse_func)gdfse;
- if (func(Z_STRVAL_PP(path),
- &FreeBytesAvailableToCaller,
- &TotalNumberOfBytes,
- &TotalNumberOfFreeBytes) == 0) RETURN_FALSE;
-
- /* i know - this is ugly, but i works <thies@thieso.net> */
- bytestotal = TotalNumberOfBytes.HighPart *
- (double) (((unsigned long)1) << 31) * 2.0 +
- TotalNumberOfBytes.LowPart;
- }
- /* If it's not available, we just use GetDiskFreeSpace */
- else {
- if (GetDiskFreeSpace(Z_STRVAL_PP(path),
- &SectorsPerCluster, &BytesPerSector,
- &NumberOfFreeClusters, &TotalNumberOfClusters) == 0) RETURN_FALSE;
- bytestotal = (double)TotalNumberOfClusters * (double)SectorsPerCluster * (double)BytesPerSector;
- }
- }
- else {
- php_error(E_WARNING, "Unable to load kernel32.dll");
- RETURN_FALSE;
- }
-
-#elif defined(OS2)
- {
- FSALLOCATE fsinfo;
- char drive = Z_STRVAL_PP(path)[0] & 95;
-
- if (DosQueryFSInfo( drive ? drive - 64 : 0, FSIL_ALLOC, &fsinfo, sizeof( fsinfo ) ) == 0)
- bytestotal = (double)fsinfo.cbSector * fsinfo.cSectorUnit * fsinfo.cUnit;
- }
-#else /* WINDOWS, OS/2 */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- if (statvfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- if (buf.f_frsize) {
- bytestotal = (((double)buf.f_blocks) * ((double)buf.f_frsize));
- } else {
- bytestotal = (((double)buf.f_blocks) * ((double)buf.f_bsize));
- }
-
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- if (statfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- bytestotal = (((double)buf.f_bsize) * ((double)buf.f_blocks));
-#endif
-#endif /* WINDOWS */
-
- RETURN_DOUBLE(bytestotal);
-}
-/* }}} */
-
-/* {{{ proto float disk_free_space(string path)
- Get free disk space for filesystem that path is on */
-PHP_FUNCTION(disk_free_space)
-{
- pval **path;
-#ifdef WINDOWS
- double bytesfree;
-
- HINSTANCE kernel32;
- FARPROC gdfse;
- typedef BOOL (WINAPI *gdfse_func)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
- gdfse_func func;
-
- /* These are used by GetDiskFreeSpaceEx, if available. */
- ULARGE_INTEGER FreeBytesAvailableToCaller;
- ULARGE_INTEGER TotalNumberOfBytes;
- ULARGE_INTEGER TotalNumberOfFreeBytes;
-
- /* These are used by GetDiskFreeSpace otherwise. */
- DWORD SectorsPerCluster;
- DWORD BytesPerSector;
- DWORD NumberOfFreeClusters;
- DWORD TotalNumberOfClusters;
-
-#else /* not - WINDOWS */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- struct statvfs buf;
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- struct statfs buf;
-#endif
- double bytesfree = 0;
-#endif /* WINDOWS */
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &path)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(path);
-
- if (php_check_open_basedir(Z_STRVAL_PP(path) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-#ifdef WINDOWS
- /* GetDiskFreeSpaceEx is only available in NT and Win95 post-OSR2,
- so we have to jump through some hoops to see if the function
- exists. */
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- gdfse = GetProcAddress(kernel32, "GetDiskFreeSpaceExA");
- /* It's available, so we can call it. */
- if (gdfse) {
- func = (gdfse_func)gdfse;
- if (func(Z_STRVAL_PP(path),
- &FreeBytesAvailableToCaller,
- &TotalNumberOfBytes,
- &TotalNumberOfFreeBytes) == 0) RETURN_FALSE;
-
- /* i know - this is ugly, but i works <thies@thieso.net> */
- bytesfree = FreeBytesAvailableToCaller.HighPart *
- (double) (((unsigned long)1) << 31) * 2.0 +
- FreeBytesAvailableToCaller.LowPart;
- }
- /* If it's not available, we just use GetDiskFreeSpace */
- else {
- if (GetDiskFreeSpace(Z_STRVAL_PP(path),
- &SectorsPerCluster, &BytesPerSector,
- &NumberOfFreeClusters, &TotalNumberOfClusters) == 0) RETURN_FALSE;
- bytesfree = (double)NumberOfFreeClusters * (double)SectorsPerCluster * (double)BytesPerSector;
- }
- }
- else {
- php_error(E_WARNING, "Unable to load kernel32.dll");
- RETURN_FALSE;
- }
-
-#elif defined(OS2)
- {
- FSALLOCATE fsinfo;
- char drive = Z_STRVAL_PP(path)[0] & 95;
-
- if (DosQueryFSInfo( drive ? drive - 64 : 0, FSIL_ALLOC, &fsinfo, sizeof( fsinfo ) ) == 0)
- bytesfree = (double)fsinfo.cbSector * fsinfo.cSectorUnit * fsinfo.cUnitAvail;
- }
-#else /* WINDOWS, OS/2 */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- if (statvfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- if (buf.f_frsize) {
- bytesfree = (((double)buf.f_bavail) * ((double)buf.f_frsize));
- } else {
- bytesfree = (((double)buf.f_bavail) * ((double)buf.f_bsize));
- }
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- if (statfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- bytesfree = (((double)buf.f_bsize) * ((double)buf.f_bavail));
-#endif
-#endif /* WINDOWS */
-
- RETURN_DOUBLE(bytesfree);
-}
-/* }}} */
-
-/* {{{ proto bool chgrp(string filename, mixed group)
- Change file group */
-PHP_FUNCTION(chgrp)
-{
-#ifndef WINDOWS
- pval **filename, **group;
- gid_t gid;
- struct group *gr=NULL;
- int ret;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &filename, &group)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
- if (Z_TYPE_PP(group) == IS_STRING) {
- gr = getgrnam(Z_STRVAL_PP(group));
- if (!gr) {
- php_error(E_WARNING, "unable to find gid for %s",
- Z_STRVAL_PP(group));
- RETURN_FALSE;
- }
- gid = gr->gr_gid;
- } else {
- convert_to_long_ex(group);
- gid = Z_LVAL_PP(group);
- }
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_CHOWN(Z_STRVAL_PP(filename), -1, gid);
- if (ret == -1) {
- php_error(E_WARNING, "chgrp failed: %s", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool chown (string filename, mixed user)
- Change file owner */
-PHP_FUNCTION(chown)
-{
-#ifndef WINDOWS
- pval **filename, **user;
- int ret;
- uid_t uid;
- struct passwd *pw = NULL;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &filename, &user)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
- if (Z_TYPE_PP(user) == IS_STRING) {
- pw = getpwnam(Z_STRVAL_PP(user));
- if (!pw) {
- php_error(E_WARNING, "unable to find uid for %s",
- Z_STRVAL_PP(user));
- RETURN_FALSE;
- }
- uid = pw->pw_uid;
- } else {
- convert_to_long_ex(user);
- uid = Z_LVAL_PP(user);
- }
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_CHOWN(Z_STRVAL_PP(filename), uid, -1);
- if (ret == -1) {
- php_error(E_WARNING, "chown failed: %s", strerror(errno));
- RETURN_FALSE;
- }
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool chmod(string filename, int mode)
- Change file mode */
-PHP_FUNCTION(chmod)
-{
- pval **filename, **mode;
- int ret;
- mode_t imode;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &filename, &mode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
- convert_to_long_ex(mode);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- imode = (mode_t) Z_LVAL_PP(mode);
- /* in safe mode, do not allow to setuid files.
- Setuiding files could allow users to gain privileges
- that safe mode doesn't give them.
- */
- if(PG(safe_mode))
- imode &= 0777;
-
- ret = VCWD_CHMOD(Z_STRVAL_PP(filename), imode);
- if (ret == -1) {
- php_error(E_WARNING, "chmod failed: %s", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_UTIME
-/* {{{ proto bool touch(string filename [, int time [, int atime]])
- Set modification time of file */
-PHP_FUNCTION(touch)
-{
- pval **filename, **filetime, **fileatime;
- int ret;
- struct stat sb;
- FILE *file;
- struct utimbuf newtimebuf;
- struct utimbuf *newtime = NULL;
- int ac = ZEND_NUM_ARGS();
-
- newtime = &newtimebuf;
-
- if (ac == 1 && zend_get_parameters_ex(1, &filename) != FAILURE) {
-#ifndef HAVE_UTIME_NULL
- newtime->modtime = newtime->actime = time(NULL);
-#endif
- } else if (ac == 2 && zend_get_parameters_ex(2, &filename, &filetime) != FAILURE) {
- convert_to_long_ex(filetime);
- newtime->actime = time(NULL);
- newtime->modtime = newtime->actime = Z_LVAL_PP(filetime);
- } else if (ac == 3 && zend_get_parameters_ex(3, &filename, &filetime, &fileatime) != FAILURE) {
- convert_to_long_ex(fileatime);
- convert_to_long_ex(filetime);
- newtime->actime = Z_LVAL_PP(fileatime);
- newtime->modtime = Z_LVAL_PP(filetime);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- /* create the file if it doesn't exist already */
- ret = VCWD_STAT(Z_STRVAL_PP(filename), &sb);
- if (ret == -1) {
- file = VCWD_FOPEN(Z_STRVAL_PP(filename), "w");
- if (file == NULL) {
- php_error(E_WARNING, "unable to create file %s because %s", Z_STRVAL_PP(filename), strerror(errno));
- RETURN_FALSE;
- }
- fclose(file);
- }
-
- ret = VCWD_UTIME(Z_STRVAL_PP(filename), newtime);
- if (ret == -1) {
- php_error(E_WARNING, "utime failed: %s", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto void clearstatcache(void)
- Clear file stat cache */
-PHP_FUNCTION(clearstatcache)
-{
- if (BG(CurrentStatFile)) {
- efree(BG(CurrentStatFile));
- BG(CurrentStatFile) = NULL;
- }
-}
-/* }}} */
-
-#define IS_LINK_OPERATION(__t) ((__t) == FS_TYPE || (__t) == FS_IS_LINK || (__t) == FS_LSTAT)
-#define IS_EXISTS_CHECK(__t) ((__t) == FS_EXISTS || (__t) == FS_IS_W || (__t) == FS_IS_R || (__t) == FS_IS_X || (__t) == FS_IS_FILE || (__t) == FS_IS_DIR || (__t) == FS_IS_LINK)
-
-/* {{{ php_stat
- */
-static void php_stat(const char *filename, php_stat_len filename_length, int type, pval *return_value TSRMLS_DC)
-{
- zval *stat_dev, *stat_ino, *stat_mode, *stat_nlink, *stat_uid, *stat_gid, *stat_rdev,
- *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, *stat_blocks;
- struct stat *stat_sb;
- int rmask=S_IROTH, wmask=S_IWOTH, xmask=S_IXOTH; /* access rights defaults to other */
- char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev",
- "size", "atime", "mtime", "ctime", "blksize", "blocks"};
-
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- stat_sb = &BG(sb);
-
- if (!BG(CurrentStatFile) || strcmp(filename, BG(CurrentStatFile))) {
- if (!BG(CurrentStatFile) || filename_length > BG(CurrentStatLength)) {
- if (BG(CurrentStatFile)) {
- efree(BG(CurrentStatFile));
- }
- BG(CurrentStatLength) = filename_length;
- BG(CurrentStatFile) = estrndup(filename, filename_length);
- } else {
- memcpy(BG(CurrentStatFile), filename, filename_length+1);
- }
-#if HAVE_SYMLINK
- BG(lsb).st_mode = 0; /* mark lstat buf invalid */
-#endif
- if (VCWD_STAT(BG(CurrentStatFile), &BG(sb)) == -1) {
- if (!IS_LINK_OPERATION(type) && (!IS_EXISTS_CHECK(type) || errno != ENOENT)) { /* fileexists() test must print no error */
- php_error(E_WARNING, "stat failed for %s (errno=%d - %s)", BG(CurrentStatFile), errno, strerror(errno));
- }
- efree(BG(CurrentStatFile));
- BG(CurrentStatFile) = NULL;
- if (!IS_LINK_OPERATION(type)) { /* Don't require success for link operation */
- RETURN_FALSE;
- }
- }
- }
-
-#if HAVE_SYMLINK
- if (IS_LINK_OPERATION(type) && !BG(lsb).st_mode) {
- /* do lstat if the buffer is empty */
- if (VCWD_LSTAT(filename, &BG(lsb)) == -1) {
- if (!IS_EXISTS_CHECK(type) || errno != ENOENT) { /* fileexists() test must print no error */
- php_error(E_WARNING, "lstat failed for %s (errno=%d - %s)", BG(CurrentStatFile), errno, strerror(errno));
- }
- RETURN_FALSE;
- }
- }
-#endif
-
-
- if (type >= FS_IS_W && type <= FS_IS_X) {
- if(BG(sb).st_uid==getuid()) {
- rmask=S_IRUSR;
- wmask=S_IWUSR;
- xmask=S_IXUSR;
- } else if(BG(sb).st_gid==getgid()) {
- rmask=S_IRGRP;
- wmask=S_IWGRP;
- xmask=S_IXGRP;
- } else {
- int groups, n, i;
- gid_t *gids;
-
- groups = getgroups(0, NULL);
- if(groups) {
- gids=(gid_t *)emalloc(groups*sizeof(gid_t));
- n=getgroups(groups, gids);
- for(i=0;i<n;i++){
- if(BG(sb).st_gid==gids[i]) {
- rmask=S_IRGRP;
- wmask=S_IWGRP;
- xmask=S_IXGRP;
- break;
- }
- }
- efree(gids);
- }
- }
- }
-
- switch (type) {
- case FS_PERMS:
- RETURN_LONG((long)BG(sb).st_mode);
- case FS_INODE:
- RETURN_LONG((long)BG(sb).st_ino);
- case FS_SIZE:
- RETURN_LONG((long)BG(sb).st_size);
- case FS_OWNER:
- RETURN_LONG((long)BG(sb).st_uid);
- case FS_GROUP:
- RETURN_LONG((long)BG(sb).st_gid);
- case FS_ATIME:
- RETURN_LONG((long)BG(sb).st_atime);
- case FS_MTIME:
- RETURN_LONG((long)BG(sb).st_mtime);
- case FS_CTIME:
- RETURN_LONG((long)BG(sb).st_ctime);
- case FS_TYPE:
-#if HAVE_SYMLINK
- if (S_ISLNK(BG(lsb).st_mode)) {
- RETURN_STRING("link", 1);
- }
-#endif
- switch(BG(sb).st_mode&S_IFMT) {
- case S_IFIFO: RETURN_STRING("fifo", 1);
- case S_IFCHR: RETURN_STRING("char", 1);
- case S_IFDIR: RETURN_STRING("dir", 1);
- case S_IFBLK: RETURN_STRING("block", 1);
- case S_IFREG: RETURN_STRING("file", 1);
-#if defined(S_IFSOCK) && !defined(ZEND_WIN32)&&!defined(__BEOS__)
- case S_IFSOCK: RETURN_STRING("socket", 1);
-#endif
- }
- php_error(E_WARNING, "Unknown file type (%d)", BG(sb).st_mode&S_IFMT);
- RETURN_STRING("unknown", 1);
- case FS_IS_W:
- if (getuid()==0) {
- RETURN_TRUE; /* root */
- }
- RETURN_BOOL((BG(sb).st_mode & wmask) != 0);
- case FS_IS_R:
- if (getuid()==0) {
- RETURN_TRUE; /* root */
- }
- RETURN_BOOL((BG(sb).st_mode&rmask)!=0);
- case FS_IS_X:
- if (getuid()==0) {
- xmask = S_IXROOT; /* root */
- }
- RETURN_BOOL((BG(sb).st_mode&xmask)!=0 && !S_ISDIR(BG(sb).st_mode));
- case FS_IS_FILE:
- RETURN_BOOL(S_ISREG(BG(sb).st_mode));
- case FS_IS_DIR:
- RETURN_BOOL(S_ISDIR(BG(sb).st_mode));
- case FS_IS_LINK:
-#if HAVE_SYMLINK
- RETURN_BOOL(S_ISLNK(BG(lsb).st_mode));
-#else
- RETURN_FALSE;
-#endif
- case FS_EXISTS:
- RETURN_TRUE; /* the false case was done earlier */
- case FS_LSTAT:
-#if HAVE_SYMLINK
- stat_sb = &BG(lsb);
-#endif
- /* FALLTHROUGH */
- case FS_STAT:
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- MAKE_LONG_ZVAL_INCREF(stat_dev, stat_sb->st_dev);
- MAKE_LONG_ZVAL_INCREF(stat_ino, stat_sb->st_ino);
- MAKE_LONG_ZVAL_INCREF(stat_mode, stat_sb->st_mode);
- MAKE_LONG_ZVAL_INCREF(stat_nlink, stat_sb->st_nlink);
- MAKE_LONG_ZVAL_INCREF(stat_uid, stat_sb->st_uid);
- MAKE_LONG_ZVAL_INCREF(stat_gid, stat_sb->st_gid);
-#ifdef HAVE_ST_RDEV
- MAKE_LONG_ZVAL_INCREF(stat_rdev, stat_sb->st_rdev);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_rdev, -1);
-#endif
- MAKE_LONG_ZVAL_INCREF(stat_size, stat_sb->st_size);
- MAKE_LONG_ZVAL_INCREF(stat_atime, stat_sb->st_atime);
- MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_sb->st_mtime);
- MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_sb->st_ctime);
-#ifdef HAVE_ST_BLKSIZE
- MAKE_LONG_ZVAL_INCREF(stat_blksize, stat_sb->st_blksize);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blksize,-1);
-#endif
-#ifdef HAVE_ST_BLOCKS
- MAKE_LONG_ZVAL_INCREF(stat_blocks, stat_sb->st_blocks);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blocks,-1);
-#endif
- /* Store numeric indexes in propper order */
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_dev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ino, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mode, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_nlink, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_uid, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_gid, sizeof(zval *), NULL);
-
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_rdev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_size, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_atime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mtime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ctime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blksize, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blocks, sizeof(zval *), NULL);
-
- /* Store string indexes referencing the same zval*/
- zend_hash_update(HASH_OF(return_value), stat_sb_names[0], strlen(stat_sb_names[0])+1, (void *) &stat_dev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[1], strlen(stat_sb_names[1])+1, (void *) &stat_ino, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[2], strlen(stat_sb_names[2])+1, (void *) &stat_mode, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[3], strlen(stat_sb_names[3])+1, (void *) &stat_nlink, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[4], strlen(stat_sb_names[4])+1, (void *) &stat_uid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[5], strlen(stat_sb_names[5])+1, (void *) &stat_gid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[6], strlen(stat_sb_names[6])+1, (void *) &stat_rdev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[7], strlen(stat_sb_names[7])+1, (void *) &stat_size, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[8], strlen(stat_sb_names[8])+1, (void *) &stat_atime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[9], strlen(stat_sb_names[9])+1, (void *) &stat_mtime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[10], strlen(stat_sb_names[10])+1, (void *) &stat_ctime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[11], strlen(stat_sb_names[11])+1, (void *) &stat_blksize, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[12], strlen(stat_sb_names[12])+1, (void *) &stat_blocks, sizeof(zval *), NULL);
-
- return;
- }
- php_error(E_WARNING, "didn't understand stat call");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* another quickie macro to make defining similar functions easier */
-#define FileFunction(name, funcnum) \
-void name(INTERNAL_FUNCTION_PARAMETERS) { \
- pval **filename; \
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_string_ex(filename); \
- php_stat(Z_STRVAL_PP(filename), (php_stat_len) Z_STRLEN_PP(filename), funcnum, return_value TSRMLS_CC); \
-}
-
-/* {{{ proto int fileperms(string filename)
- Get file permissions */
-FileFunction(PHP_FN(fileperms), FS_PERMS)
-/* }}} */
-
-/* {{{ proto int fileinode(string filename)
- Get file inode */
-FileFunction(PHP_FN(fileinode), FS_INODE)
-/* }}} */
-
-/* {{{ proto int filesize(string filename)
- Get file size */
-FileFunction(PHP_FN(filesize), FS_SIZE)
-/* }}} */
-
-/* {{{ proto int fileowner(string filename)
- Get file owner */
-FileFunction(PHP_FN(fileowner), FS_OWNER)
-/* }}} */
-
-/* {{{ proto int filegroup(string filename)
- Get file group */
-FileFunction(PHP_FN(filegroup), FS_GROUP)
-/* }}} */
-
-/* {{{ proto int fileatime(string filename)
- Get last access time of file */
-FileFunction(PHP_FN(fileatime), FS_ATIME)
-/* }}} */
-
-/* {{{ proto int filemtime(string filename)
- Get last modification time of file */
-FileFunction(PHP_FN(filemtime), FS_MTIME)
-/* }}} */
-
-/* {{{ proto int filectime(string filename)
- Get inode modification time of file */
-FileFunction(PHP_FN(filectime), FS_CTIME)
-/* }}} */
-
-/* {{{ proto string filetype(string filename)
- Get file type */
-FileFunction(PHP_FN(filetype), FS_TYPE)
-/* }}} */
-
-/* {{{ proto bool is_writable(string filename)
- Returns true if file can be written */
-FileFunction(PHP_FN(is_writable), FS_IS_W)
-/* }}} */
-
-/* {{{ proto bool is_readable(string filename)
- Returns true if file can be read */
-FileFunction(PHP_FN(is_readable), FS_IS_R)
-/* }}} */
-
-/* {{{ proto bool is_executable(string filename)
- Returns true if file is executable */
-FileFunction(PHP_FN(is_executable), FS_IS_X)
-/* }}} */
-
-/* {{{ proto bool is_file(string filename)
- Returns true if file is a regular file */
-FileFunction(PHP_FN(is_file), FS_IS_FILE)
-/* }}} */
-
-/* {{{ proto bool is_dir(string filename)
- Returns true if file is directory */
-FileFunction(PHP_FN(is_dir), FS_IS_DIR)
-/* }}} */
-
-/* {{{ proto bool is_link(string filename)
- Returns true if file is symbolic link */
-FileFunction(PHP_FN(is_link), FS_IS_LINK)
-/* }}} */
-
-/* {{{ proto bool file_exists(string filename)
- Returns true if filename exists */
-FileFunction(PHP_FN(file_exists), FS_EXISTS)
-/* }}} */
-
-/* {{{ proto array lstat(string filename)
- Give information about a file or symbolic link */
-FileFunction(php_if_lstat, FS_LSTAT)
-/* }}} */
-
-/* {{{ proto array stat(string filename)
- Give information about a file */
-FileFunction(php_if_stat, FS_STAT)
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/flock_compat.c b/ext/standard/flock_compat.c
deleted file mode 100644
index 7cec78dbe9..0000000000
--- a/ext/standard/flock_compat.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <php.h>
-#include <errno.h>
-#include "ext/standard/flock_compat.h"
-
-#if HAVE_STRUCT_FLOCK
-#include <unistd.h>
-#include <fcntl.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <windows.h>
-#include <io.h>
-#endif
-
-#ifndef HAVE_FLOCK
-int flock(int fd, int operation)
-#if HAVE_STRUCT_FLOCK
-{
- struct flock flck;
- int ret;
-
- flck.l_start = flck.l_len = 0;
- flck.l_whence = SEEK_SET;
-
- if (operation & LOCK_SH)
- flck.l_type = F_RDLCK;
- else if (operation & LOCK_EX)
- flck.l_type = F_WRLCK;
- else if (operation & LOCK_UN)
- flck.l_type = F_UNLCK;
- else {
- errno = EINVAL;
- return -1;
- }
-
- ret = fcntl(fd, operation & LOCK_NB ? F_SETLK : F_SETLKW, &flck);
-
- if (operation & LOCK_NB && ret == -1 &&
- (errno == EACCES || errno == EAGAIN))
- errno = EWOULDBLOCK;
-
- if (ret != -1) ret = 0;
-
- return ret;
-}
-#elif defined(PHP_WIN32)
-/*
- * Program: Unix compatibility routines
- *
- * Author: Mark Crispin
- * Networks and Distributed Computing
- * Computing & Communications
- * University of Washington
- * Administration Building, AG-44
- * Seattle, WA 98195
- * Internet: MRC@CAC.Washington.EDU
- *
- * Date: 14 September 1996
- * Last Edited: 14 August 1997
- *
- * Copyright 1997 by the University of Washington
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appears in all copies and that both the
- * above copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the University of Washington not be
- * used in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. This software is made available
- * "as is", and
- * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
- * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN
- * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT
- * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* DEDICATION
-
- * This file is dedicated to my dog, Unix, also known as Yun-chan and
- * Unix J. Terwilliker Jehosophat Aloysius Monstrosity Animal Beast. Unix
- * passed away at the age of 11 1/2 on September 14, 1996, 12:18 PM PDT, after
- * a two-month bout with cirrhosis of the liver.
- *
- * He was a dear friend, and I miss him terribly.
- *
- * Lift a leg, Yunie. Luv ya forever!!!!
- */
-{
- HANDLE hdl = (HANDLE) _get_osfhandle(fd);
- DWORD low = 1, high = 0;
- OVERLAPPED offset =
- {0, 0, 0, 0, NULL};
- if (hdl < 0)
- return -1; /* error in file descriptor */
- /* bug for bug compatible with Unix */
- UnlockFileEx(hdl, 0, low, high, &offset);
- switch (operation & ~LOCK_NB) { /* translate to LockFileEx() op */
- case LOCK_EX: /* exclusive */
- if (LockFileEx(hdl, LOCKFILE_EXCLUSIVE_LOCK +
- ((operation & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_SH: /* shared */
- if (LockFileEx(hdl, ((operation & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_UN: /* unlock */
- return 0; /* always succeeds */
- default: /* default */
- break;
- }
- /* Under Win32 MT library, errno is not a variable but a function call,
- * which cannot be assigned to.
- */
-#if !defined(PHP_WIN32)
- errno = EINVAL; /* bad call */
-#endif
- return -1;
-}
-#else
-#warning no proper flock support for your site
-{
- errno = 0;
- return 0;
-}
-#endif
-#endif /* !defined(HAVE_FLOCK) */
-
-#if !(HAVE_INET_ATON)
-/* {{{ inet_aton
- * Check whether "cp" is a valid ascii representation
- * of an Internet address and convert to a binary address.
- * Returns 1 if the address is valid, 0 if not.
- * This replaces inet_addr, the return value from which
- * cannot distinguish between failure and a local broadcast address.
- */
-int inet_aton(const char *cp, struct in_addr *ap)
-{
- int dots = 0;
- register unsigned long acc = 0, addr = 0;
-
- do {
- register char cc = *cp;
-
- switch (cc) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- acc = acc * 10 + (cc - '0');
- break;
-
- case '.':
- if (++dots > 3) {
- return 0;
- }
- /* Fall through */
-
- case '\0':
- if (acc > 255) {
- return 0;
- }
- addr = addr << 8 | acc;
- acc = 0;
- break;
-
- default:
- return 0;
- }
- } while (*cp++) ;
-
- /* Normalize the address */
- if (dots < 3) {
- addr <<= 8 * (3 - dots) ;
- }
-
- /* Store it if requested */
- if (ap) {
- ap->s_addr = htonl(addr);
- }
-
- return 1;
-}
-/* }}} */
-#endif /* !HAVE_INET_ATON */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/flock_compat.h b/ext/standard/flock_compat.h
deleted file mode 100644
index d352f5116e..0000000000
--- a/ext/standard/flock_compat.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef FLOCK_COMPAT_H
-#define FLOCK_COMPAT_H
-
-#ifndef HAVE_FLOCK
-# define LOCK_SH 1
-# define LOCK_EX 2
-# define LOCK_NB 4
-# define LOCK_UN 8
-int flock(int fd, int operation);
-#endif
-
-#ifdef PHP_WIN32
-#define EWOULDBLOCK WSAEWOULDBLOCK
-# define fsync _commit
-# define ftruncate(a, b) chsize(a, b)
-#endif /* defined(PHP_WIN32) */
-
-#if !HAVE_INET_ATON
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-extern int inet_aton(const char *, struct in_addr *);
-#endif
-
-#endif /* FLOCK_COMPAT_H */
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c
deleted file mode 100644
index 7a11b3a5f0..0000000000
--- a/ext/standard/formatted_print.c
+++ /dev/null
@@ -1,720 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <math.h> /* modf() */
-#include "php.h"
-#include "ext/standard/head.h"
-#include "php_string.h"
-#include "zend_execute.h"
-#include <stdio.h>
-
-#define ALIGN_LEFT 0
-#define ALIGN_RIGHT 1
-#define ADJ_WIDTH 1
-#define ADJ_PRECISION 2
-#define NUM_BUF_SIZE 500
-#define NDIG 80
-#define FLOAT_DIGITS 6
-#define FLOAT_PRECISION 6
-#define MAX_FLOAT_DIGITS 38
-#define MAX_FLOAT_PRECISION 40
-
-#if 0
-/* trick to control varargs functions through cpp */
-# define PRINTF_DEBUG(arg) php_printf arg
-#else
-# define PRINTF_DEBUG(arg)
-#endif
-
-static char hexchars[] = "0123456789abcdef";
-static char HEXCHARS[] = "0123456789ABCDEF";
-
-
-/*
- * cvt.c - IEEE floating point formatting routines for FreeBSD
- * from GNU libc-4.6.27
- */
-
-/*
- * php_convert_to_decimal converts to decimal
- * the number of digits is specified by ndigit
- * decpt is set to the position of the decimal point
- * sign is set to 0 for positive, 1 for negative
- */
-static char *php_convert_to_decimal(double arg, int ndigits, int *decpt, int *sign, int eflag)
-{
- register int r2;
- double fi, fj;
- register char *p, *p1;
- /*THREADX*/
-#ifndef THREAD_SAFE
- static char cvt_buf[NDIG];
-#endif
-
- if (ndigits >= NDIG - 1)
- ndigits = NDIG - 2;
- r2 = 0;
- *sign = 0;
- p = &cvt_buf[0];
- if (arg < 0) {
- *sign = 1;
- arg = -arg;
- }
- arg = modf(arg, &fi);
- p1 = &cvt_buf[NDIG];
- /*
- * Do integer part
- */
- if (fi != 0) {
- p1 = &cvt_buf[NDIG];
- while (fi != 0) {
- fj = modf(fi / 10, &fi);
- *--p1 = (int) ((fj + .03) * 10) + '0';
- r2++;
- }
- while (p1 < &cvt_buf[NDIG])
- *p++ = *p1++;
- } else if (arg > 0) {
- while ((fj = arg * 10.0) < 0.9999999) {
- arg = fj;
- r2--;
- }
- }
- p1 = &cvt_buf[ndigits];
- if (eflag == 0)
- p1 += r2;
- *decpt = r2;
- if (p1 < &cvt_buf[0]) {
- cvt_buf[0] = '\0';
- return (cvt_buf);
- }
- while (p <= p1 && p < &cvt_buf[NDIG]) {
- arg *= 10;
- arg = modf(arg, &fj);
- *p++ = (int) fj + '0';
- }
- if (p1 >= &cvt_buf[NDIG]) {
- cvt_buf[NDIG - 1] = '\0';
- return (cvt_buf);
- }
- p = p1;
- *p1 += 5;
- while (*p1 > '9') {
- *p1 = '0';
- if (p1 > cvt_buf)
- ++ * --p1;
- else {
- *p1 = '1';
- (*decpt)++;
- if (eflag == 0) {
- if (p > cvt_buf)
- *p = '0';
- p++;
- }
- }
- }
- *p = '\0';
- return (cvt_buf);
-}
-
-
-inline static void
-php_sprintf_appendchar(char **buffer, int *pos, int *size, char add TSRMLS_DC)
-{
- if ((*pos + 1) >= *size) {
- *size <<= 1;
- PRINTF_DEBUG(("%s: ereallocing buffer to %d bytes\n", get_active_function_name(TSRMLS_C), *size));
- *buffer = erealloc(*buffer, *size);
- }
- PRINTF_DEBUG(("sprintf: appending '%c', pos=\n", add, *pos));
- (*buffer)[(*pos)++] = add;
-}
-
-
-inline static void
-php_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,
- int min_width, int max_width, char padding,
- int alignment, int len, int sign, int expprec)
-{
- register int npad;
-
- npad = min_width - MIN(len, (expprec ? max_width : len));
-
- if (npad < 0) {
- npad = 0;
- }
-
- PRINTF_DEBUG(("sprintf: appendstring(%x, %d, %d, \"%s\", %d, '%c', %d)\n",
- *buffer, *pos, *size, add, min_width, padding, alignment));
- if ((max_width == 0) && (! expprec)) {
- max_width = MAX(min_width, len);
- }
- if ((*pos + max_width) >= *size) {
- while ((*pos + max_width) >= *size) {
- *size <<= 1;
- }
- PRINTF_DEBUG(("sprintf ereallocing buffer to %d bytes\n", *size));
- *buffer = erealloc(*buffer, *size);
- }
- if (alignment == ALIGN_RIGHT) {
- if (sign && padding=='0') {
- (*buffer)[(*pos)++] = '-';
- add++;
- len--;
- }
- while (npad-- > 0) {
- (*buffer)[(*pos)++] = padding;
- }
- }
- PRINTF_DEBUG(("sprintf: appending \"%s\"\n", add));
- memcpy(&(*buffer)[*pos], add, MIN(max_width, len)+1);
- *pos += MIN(max_width, len);
- if (alignment == ALIGN_LEFT) {
- while (npad--) {
- (*buffer)[(*pos)++] = padding;
- }
- }
-}
-
-
-inline static void
-php_sprintf_appendint(char **buffer, int *pos, int *size, long number,
- int width, char padding, int alignment)
-{
- char numbuf[NUM_BUF_SIZE];
- register unsigned long magn, nmagn;
- register unsigned int i = NUM_BUF_SIZE - 1, neg = 0;
-
- PRINTF_DEBUG(("sprintf: appendint(%x, %x, %x, %d, %d, '%c', %d)\n",
- *buffer, pos, size, number, width, padding, alignment));
- if (number < 0) {
- neg = 1;
- magn = ((unsigned long) -(number + 1)) + 1;
- } else {
- magn = (unsigned long) number;
- }
-
- /* Can't right-pad 0's on integers */
- if(alignment==0 && padding=='0') padding=' ';
-
- numbuf[i] = '\0';
-
- do {
- nmagn = magn / 10;
-
- numbuf[--i] = (unsigned char)(magn - (nmagn * 10)) + '0';
- magn = nmagn;
- }
- while (magn > 0 && i > 0);
- if (neg) {
- numbuf[--i] = '-';
- }
- PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n",
- number, &numbuf[i], i));
- php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i,
- neg, 0);
-}
-
-inline static void
-php_sprintf_appenduint(char **buffer, int *pos, int *size,
- unsigned long number,
- int width, char padding, int alignment)
-{
- char numbuf[NUM_BUF_SIZE];
- register unsigned long magn, nmagn;
- register unsigned int i = NUM_BUF_SIZE - 1;
-
- PRINTF_DEBUG(("sprintf: appenduint(%x, %x, %x, %d, %d, '%c', %d)\n",
- *buffer, pos, size, number, width, padding, alignment));
- magn = (unsigned int) number;
-
- /* Can't right-pad 0's on integers */
- if (alignment == 0 && padding == '0') padding = ' ';
-
- numbuf[i] = '\0';
-
- do {
- nmagn = magn / 10;
-
- numbuf[--i] = (unsigned char)(magn - (nmagn * 10)) + '0';
- magn = nmagn;
- }
- while (magn > 0 && i > 0);
- PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n", number, &numbuf[i], i));
- php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i, 0, 0);
-}
-
-inline static void
-php_sprintf_appenddouble(char **buffer, int *pos,
- int *size, double number,
- int width, char padding,
- int alignment, int precision,
- int adjust, char fmt)
-{
- char numbuf[NUM_BUF_SIZE];
- char *cvt;
- register int i = 0, j = 0;
- int sign, decpt;
-
- PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n",
- *buffer, pos, size, number, width, padding, alignment, fmt));
- if ((adjust & ADJ_PRECISION) == 0) {
- precision = FLOAT_PRECISION;
- } else if (precision > MAX_FLOAT_PRECISION) {
- precision = MAX_FLOAT_PRECISION;
- }
-
- if (zend_isnan(number)) {
- sign = (number<0);
- php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding,
- alignment, precision, sign, 0);
- return;
- }
-
- if (zend_isinf(number)) {
- sign = (number<0);
- php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding,
- alignment, precision, sign, 0);
- return;
- }
-
- cvt = php_convert_to_decimal(number, precision, &decpt, &sign, (fmt == 'e'));
-
- if (sign) {
- numbuf[i++] = '-';
- }
-
- if (fmt == 'f') {
- if (decpt <= 0) {
- numbuf[i++] = '0';
- if (precision > 0) {
- int k = precision;
- numbuf[i++] = '.';
- while ((decpt++ < 0) && k--) {
- numbuf[i++] = '0';
- }
- }
- } else {
- while (decpt-- > 0)
- numbuf[i++] = cvt[j++];
- if (precision > 0)
- numbuf[i++] = '.';
- }
- } else {
- numbuf[i++] = cvt[j++];
- if (precision > 0)
- numbuf[i++] = '.';
- }
-
- while (cvt[j]) {
- numbuf[i++] = cvt[j++];
- }
-
- numbuf[i] = '\0';
-
- if (precision > 0) {
- width += (precision + 1);
- }
- php_sprintf_appendstring(buffer, pos, size, numbuf, width, 0, padding,
- alignment, i, sign, 0);
-}
-
-
-inline static void
-php_sprintf_append2n(char **buffer, int *pos, int *size, long number,
- int width, char padding, int alignment, int n,
- char *chartable, int expprec)
-{
- char numbuf[NUM_BUF_SIZE];
- register unsigned long num;
- register unsigned int i = NUM_BUF_SIZE - 1;
- register int andbits = (1 << n) - 1;
-
- PRINTF_DEBUG(("sprintf: append2n(%x, %x, %x, %d, %d, '%c', %d, %d, %x)\n",
- *buffer, pos, size, number, width, padding, alignment, n,
- chartable));
- PRINTF_DEBUG(("sprintf: append2n 2^%d andbits=%x\n", n, andbits));
-
- num = (unsigned long) number;
- numbuf[i] = '\0';
-
- do {
- numbuf[--i] = chartable[(num & andbits)];
- num >>= n;
- }
- while (num > 0);
-
- php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i,
- 0, expprec);
-}
-
-
-inline static long
-php_sprintf_getnumber(char *buffer, int *pos)
-{
- char *endptr;
- register long num = strtol(&buffer[*pos], &endptr, 10);
- register int i = 0;
-
- if (endptr != NULL) {
- i = (endptr - &buffer[*pos]);
- }
- PRINTF_DEBUG(("sprintf_getnumber: number was %d bytes long\n", i));
- *pos += i;
- return num;
-}
-
-/* {{{ php_formatted_print
- * New sprintf implementation for PHP.
- *
- * Modifiers:
- *
- * " " pad integers with spaces
- * "-" left adjusted field
- * n field size
- * "."n precision (floats only)
- *
- * Type specifiers:
- *
- * "%" literal "%", modifiers are ignored.
- * "b" integer argument is printed as binary
- * "c" integer argument is printed as a single character
- * "d" argument is an integer
- * "f" the argument is a float
- * "o" integer argument is printed as octal
- * "s" argument is a string
- * "x" integer argument is printed as lowercase hexadecimal
- * "X" integer argument is printed as uppercase hexadecimal
- *
- */
-static char *
-php_formatted_print(int ht, int *len, int use_array TSRMLS_DC)
-{
- zval ***args, **z_format, **array;
- int argc, size = 240, inpos = 0, outpos = 0, temppos;
- int alignment, width, precision, currarg, adjusting, argnum;
- char *format, *result, padding;
-
- argc = ZEND_NUM_ARGS();
-
- if (use_array) {
- int i = 1;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(argc, &z_format, &array) == FAILURE) {
- WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
- }
- SEPARATE_ZVAL(array);
- convert_to_array_ex(array);
- argc = 1 + zend_hash_num_elements(Z_ARRVAL_PP(array));
- args = (zval ***)emalloc(argc * sizeof(zval *));
- args[0] = z_format;
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(array));
- zend_hash_get_current_data(Z_ARRVAL_PP(array), (void **)&args[i++]) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_PP(array)));
- } else {
- if (argc < 1) {
- WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
- }
-
- args = (zval ***)emalloc(argc * sizeof(zval *));
-
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
- }
- }
- convert_to_string_ex(args[0]);
- format = Z_STRVAL_PP(args[0]);
- result = emalloc(size);
-
- currarg = 1;
-
- while (inpos<Z_STRLEN_PP(args[0])) {
- int expprec = 0;
-
- PRINTF_DEBUG(("sprintf: format[%d]='%c'\n", inpos, format[inpos]));
- PRINTF_DEBUG(("sprintf: outpos=%d\n", outpos));
- if (format[inpos] != '%') {
- php_sprintf_appendchar(&result, &outpos, &size, format[inpos++] TSRMLS_CC);
- } else if (format[inpos + 1] == '%') {
- php_sprintf_appendchar(&result, &outpos, &size, '%' TSRMLS_CC);
- inpos += 2;
- } else {
- if (currarg >= argc && format[inpos + 1] != '%') {
- efree(result);
- efree(args);
- php_error(E_WARNING, "%s(): too few arguments", get_active_function_name(TSRMLS_C));
- return NULL;
- }
- /* starting a new format specifier, reset variables */
- alignment = ALIGN_RIGHT;
- adjusting = 0;
- padding = ' ';
- inpos++; /* skip the '%' */
-
- PRINTF_DEBUG(("sprintf: first looking at '%c', inpos=%d\n",
- format[inpos], inpos));
- if (isascii((int)format[inpos]) && !isalpha((int)format[inpos])) {
- /* first look for argnum */
- temppos = inpos;
- while (isdigit((int)format[temppos])) temppos++;
- if (format[temppos] == '$') {
- argnum = php_sprintf_getnumber(format, &inpos);
-
- if (argnum == 0) {
- efree(result);
- efree(args);
- php_error(E_WARNING, "%s(): zero is not a valid argument number", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- inpos++; /* skip the '$' */
- } else {
- argnum = currarg++;
- }
- if (argnum >= argc) {
- efree(result);
- efree(args);
- php_error(E_WARNING, "%s(): too few arguments", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- /* after argnum comes modifiers */
- PRINTF_DEBUG(("sprintf: looking for modifiers\n"
- "sprintf: now looking at '%c', inpos=%d\n",
- format[inpos], inpos));
- for (;; inpos++) {
- if (format[inpos] == ' ' || format[inpos] == '0') {
- padding = format[inpos];
- } else if (format[inpos] == '-') {
- alignment = ALIGN_LEFT;
- /* space padding, the default */
- } else if (format[inpos] == '\'') {
- padding = format[++inpos];
- } else {
- PRINTF_DEBUG(("sprintf: end of modifiers\n"));
- break;
- }
- }
- PRINTF_DEBUG(("sprintf: padding='%c'\n", padding));
- PRINTF_DEBUG(("sprintf: alignment=%s\n",
- (alignment == ALIGN_LEFT) ? "left" : "right"));
-
-
- /* after modifiers comes width */
- if (isdigit((int)format[inpos])) {
- PRINTF_DEBUG(("sprintf: getting width\n"));
- width = php_sprintf_getnumber(format, &inpos);
- adjusting |= ADJ_WIDTH;
- } else {
- width = 0;
- }
- PRINTF_DEBUG(("sprintf: width=%d\n", width));
-
- /* after width and argnum comes precision */
- if (format[inpos] == '.') {
- inpos++;
- PRINTF_DEBUG(("sprintf: getting precision\n"));
- if (isdigit((int)format[inpos])) {
- precision = php_sprintf_getnumber(format, &inpos);
- adjusting |= ADJ_PRECISION;
- expprec = 1;
- } else {
- precision = 0;
- }
- } else {
- precision = 0;
- }
- PRINTF_DEBUG(("sprintf: precision=%d\n", precision));
- } else {
- width = precision = 0;
- argnum = currarg++;
- }
-
- if (format[inpos] == 'l') {
- inpos++;
- }
- PRINTF_DEBUG(("sprintf: format character='%c'\n", format[inpos]));
- /* now we expect to find a type specifier */
- switch (format[inpos]) {
- case 's':
- convert_to_string_ex(args[argnum]);
- php_sprintf_appendstring(&result, &outpos, &size,
- Z_STRVAL_PP(args[argnum]),
- width, precision, padding,
- alignment,
- Z_STRLEN_PP(args[argnum]),
- 0, expprec);
- break;
-
- case 'd':
- convert_to_long_ex(args[argnum]);
- php_sprintf_appendint(&result, &outpos, &size,
- Z_LVAL_PP(args[argnum]),
- width, padding, alignment);
- break;
-
- case 'u':
- convert_to_long_ex(args[argnum]);
- php_sprintf_appenduint(&result, &outpos, &size,
- Z_LVAL_PP(args[argnum]),
- width, padding, alignment);
- break;
-
- case 'e':
- case 'f':
- /* XXX not done */
- convert_to_double_ex(args[argnum]);
- php_sprintf_appenddouble(&result, &outpos, &size,
- Z_DVAL_PP(args[argnum]),
- width, padding, alignment,
- precision, adjusting,
- format[inpos]);
- break;
-
- case 'c':
- convert_to_long_ex(args[argnum]);
- php_sprintf_appendchar(&result, &outpos, &size,
- (char) Z_LVAL_PP(args[argnum]) TSRMLS_CC);
- break;
-
- case 'o':
- convert_to_long_ex(args[argnum]);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_PP(args[argnum]),
- width, padding, alignment, 3,
- hexchars, expprec);
- break;
-
- case 'x':
- convert_to_long_ex(args[argnum]);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_PP(args[argnum]),
- width, padding, alignment, 4,
- hexchars, expprec);
- break;
-
- case 'X':
- convert_to_long_ex(args[argnum]);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_PP(args[argnum]),
- width, padding, alignment, 4,
- HEXCHARS, expprec);
- break;
-
- case 'b':
- convert_to_long_ex(args[argnum]);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_PP(args[argnum]),
- width, padding, alignment, 1,
- hexchars, expprec);
- break;
-
- case '%':
- php_sprintf_appendchar(&result, &outpos, &size, '%' TSRMLS_CC);
-
- break;
- default:
- break;
- }
- inpos++;
- }
- }
-
- efree(args);
-
- /* possibly, we have to make sure we have room for the terminating null? */
- result[outpos]=0;
- *len = outpos;
- return result;
-}
-/* }}} */
-
-/* {{{ proto string sprintf(string format [, mixed arg1 [, mixed ...]])
- Return a formatted string */
-PHP_FUNCTION(user_sprintf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 0 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(result, len, 1);
- efree(result);
-}
-/* }}} */
-
-/* {{{ proto string vsprintf(string format, array args)
- Return a formatted string */
-PHP_FUNCTION(vsprintf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 1 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(result, len, 1);
- efree(result);
-}
-/* }}} */
-
-/* {{{ proto int printf(string format [, mixed arg1 [, mixed ...]])
- Output a formatted string */
-PHP_FUNCTION(user_printf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 0 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- PHPWRITE(result, len);
- efree(result);
-}
-/* }}} */
-
-/* {{{ proto int vprintf(string format, array args)
- Output a formatted string */
-PHP_FUNCTION(vprintf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 1 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- PHPWRITE(result, len);
- efree(result);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
deleted file mode 100644
index 9d90788298..0000000000
--- a/ext/standard/fsock.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Paul Panotzki - Bunyip Information Systems |
- | Jim Winstead <jimw@php.net> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* converted to PHP Streams and moved much code to main/network.c [wez] */
-
-/* Synced with php 3.0 revision 1.121 1999-06-18 [ssb] */
-/* Synced with php 3.0 revision 1.133 1999-07-21 [sas] */
-
-#include "php.h"
-#include "php_globals.h"
-#include <stdlib.h>
-#include <stddef.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-#if defined(PHP_WIN32) || defined(__riscos__)
-#undef AF_UNIX
-#endif
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#ifndef PF_INET
-#define PF_INET AF_INET
-#endif
-
-#ifndef PF_UNIX
-#define PF_UNIX AF_UNIX
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include "base64.h"
-#include "file.h"
-#include "url.h"
-#include "fsock.h"
-
-#include "php_network.h"
-
-#ifdef ZTS
-static int fsock_globals_id;
-#endif
-
-#ifdef PHP_WIN32
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#else
-#include "build-defs.h"
-#endif
-
-/* {{{ php_lookup_hostname */
-
-/*
- * Converts a host name to an IP address.
- */
-PHPAPI int php_lookup_hostname(const char *addr, struct in_addr *in)
-{
- struct hostent *host_info;
-
- if (!inet_aton(addr, in)) {
- /* XXX NOT THREAD SAFE */
- host_info = gethostbyname(addr);
- if (host_info == 0) {
- /* Error: unknown host */
- return -1;
- }
- *in = *((struct in_addr *) host_info->h_addr);
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_fsockopen() */
-
-static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *host;
- int host_len;
- int port = -1;
- zval *zerrno = NULL, *zerrstr = NULL;
- double timeout = 60;
- unsigned long conv;
- struct timeval tv;
- char *hashkey = NULL;
- php_stream *stream = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lzzd", &host, &host_len, &port, &zerrno, &zerrstr, &timeout) == FAILURE) {
- RETURN_FALSE;
- }
-
- hashkey = emalloc(host_len + 10);
- sprintf(hashkey, "%s:%d", host, port);
-
- if (persistent && zend_hash_find(&FG(ht_persistent_socks), hashkey, strlen(hashkey) + 1,
- (void *) &stream) == SUCCESS)
- {
- efree(hashkey);
- php_stream_to_zval(stream, return_value);
- return;
- }
-
- /* prepare the timeout value for use */
- conv = (unsigned long) (timeout * 1000000.0);
- tv.tv_sec = conv / 1000000;
- tv.tv_usec = conv % 1000000;
-
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, 0);
- }
- if (zerrstr) {
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrno, "", 1);
- }
-
- if (port > 0) { /* connect to a host */
- enum php_sslflags_t { php_ssl_none, php_ssl_v23, php_ssl_tls };
- enum php_sslflags_t ssl_flags = php_ssl_none;
- struct {
- char *proto;
- int protolen;
- int socktype;
- enum php_sslflags_t ssl_flags;
- /* more flags to be added here */
- } sockmodes[] = {
- { "udp://", 6, SOCK_DGRAM, php_ssl_none },
- { "tcp://", 6, SOCK_STREAM, php_ssl_none },
- { "ssl://", 6, SOCK_STREAM, php_ssl_v23 },
- { "tls://", 6, SOCK_STREAM, php_ssl_tls },
- /* more modes to be added here */
- { NULL, 0, 0 }
- };
- int socktype = SOCK_STREAM;
- int i;
-
- for (i = 0; sockmodes[i].proto != NULL; i++) {
- if (strncmp(host, sockmodes[i].proto, sockmodes[i].protolen) == 0) {
- ssl_flags = sockmodes[i].ssl_flags;
- socktype = sockmodes[i].socktype;
- host += sockmodes[i].protolen;
- break;
- }
- }
-#if !HAVE_OPENSSL_EXT
- if (ssl_flags != php_ssl_none) {
- zend_error(E_WARNING, "%s(): no SSL support in this build", get_active_function_name(TSRMLS_C));
- }
- else
-#endif
- stream = php_stream_sock_open_host(host, (unsigned short)port, socktype, (int)timeout, persistent);
-
- if (stream == NULL) {
- zend_error(E_WARNING, "%s(): unable to connect to %s:%d",
- get_active_function_name(TSRMLS_C), host, port);
- }
-
-#if HAVE_OPENSSL_EXT
- if (stream && ssl_flags != php_ssl_none) {
- int ssl_ret = FAILURE;
- switch(ssl_flags) {
- case php_ssl_v23:
- ssl_ret = php_stream_sock_ssl_activate_with_method(stream, 1, SSLv23_client_method() TSRMLS_CC);
- break;
- case php_ssl_tls:
- ssl_ret = php_stream_sock_ssl_activate_with_method(stream, 1, TLSv1_client_method() TSRMLS_CC);
- break;
- default:
- /* unknown ?? */
- }
- if (ssl_ret == FAILURE)
- zend_error(E_WARNING, "%s(): failed to activate SSL mode %d", get_active_function_name(TSRMLS_C), ssl_flags);
- }
-#endif
-
- } else
- stream = php_stream_sock_open_unix(host, host_len, persistent, &tv);
-
- if (stream && persistent) {
- zend_hash_update(&FG(ht_persistent_socks), hashkey, strlen(hashkey) + 1,
- &stream, sizeof(stream), NULL);
- }
-
- efree(hashkey);
-
- if (stream == NULL) {
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, errno);
- }
- if (zerrstr) {
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrno, strerror(errno), 1);
- }
-
- RETURN_FALSE;
- }
-
- php_stream_to_zval(stream, return_value);
-}
-
-/* }}} */
-
-/* {{{ proto int fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
- Open Internet or Unix domain socket connection */
-PHP_FUNCTION(fsockopen)
-{
- php_fsockopen_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-/* {{{ proto int pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
- Open persistent Internet or Unix domain socket connection */
-PHP_FUNCTION(pfsockopen)
-{
- php_fsockopen_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ RSHUTDOWN_FUNCTION(fsock) */
-PHP_RSHUTDOWN_FUNCTION(fsock)
-{
- return SUCCESS;
-}
-/* }}} */
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/fsock.h b/ext/standard/fsock.h
deleted file mode 100644
index fb134e97bc..0000000000
--- a/ext/standard/fsock.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Paul Panotzki - Bunyip Information Systems |
- | Jim Winstead <jimw@php.net> |
- | Wez Furlong |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.24 1999-06-18 [ssb] */
-
-#ifndef FSOCK_H
-#define FSOCK_H
-
-#include "file.h"
-
-#include "php_network.h"
-
-PHP_FUNCTION(fsockopen);
-PHP_FUNCTION(pfsockopen);
-
-PHPAPI int php_lookup_hostname(const char *addr, struct in_addr *in);
-
-PHP_RSHUTDOWN_FUNCTION(fsock);
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim: sw=4 ts=4
- */
-#endif /* FSOCK_H */
diff --git a/ext/standard/ftok.c b/ext/standard/ftok.c
deleted file mode 100644
index 9ff67cd136..0000000000
--- a/ext/standard/ftok.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrew Sitnikov <sitnikov@infonet.ee> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-#if HAVE_SYSVSEM || HAVE_SYSVSHM || HAVE_SHMOP
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-
-/* {{{ proto int ftok(string pathname, string proj)
- Convert a pathname and a project identifier to a System V IPC key */
-PHP_FUNCTION(ftok)
-{
- pval **pathname, **proj;
-
- key_t k;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pathname, &proj) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(pathname);
- convert_to_string_ex(proj);
-
- if (Z_STRLEN_PP(pathname)==0){
- php_error(E_WARNING, "Invalid argument 1 in ftok");
- RETURN_LONG(-1);
- }
-
- if (Z_STRLEN_PP(proj)!=1){
- php_error(E_WARNING, "Invalid argument 2 in ftok");
- RETURN_LONG(-1);
- }
-
- k = ftok(Z_STRVAL_PP(pathname),Z_STRVAL_PP(proj)[0]);
-
- RETURN_LONG(k);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c
deleted file mode 100644
index f37b71e01c..0000000000
--- a/ext/standard/ftp_fopen_wrapper.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_network.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifdef PHP_WIN32
-#include <windows.h>
-#include <winsock.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#else
-#include <sys/param.h>
-#endif
-
-#include "php_standard.h"
-
-#include <sys/types.h>
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-
-#if defined(PHP_WIN32) || defined(__riscos__)
-#undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-
-#include "php_fopen_wrappers.h"
-
-
-static inline int get_ftp_result(php_stream *stream, char *buffer, size_t buffer_size TSRMLS_DC)
-{
- while (php_stream_gets(stream, buffer, buffer_size-1) &&
- !(isdigit((int) buffer[0]) && isdigit((int) buffer[1]) &&
- isdigit((int) buffer[2]) && buffer[3] == ' '));
-
- return strtol(buffer, NULL, 10);
-}
-#define GET_FTP_RESULT(stream) get_ftp_result((stream), tmp_line, sizeof(tmp_line) TSRMLS_CC)
-
-static int php_stream_ftp_stream_stat(php_stream_wrapper *wrapper,
- php_stream *stream,
- php_stream_statbuf *ssb
- TSRMLS_DC)
-{
- /* For now, we return with a failure code to prevent the underlying
- * file's details from being used instead. */
- return -1;
-}
-
-
-static php_stream_wrapper_ops ftp_stream_wops = {
- php_stream_url_wrap_ftp,
- NULL,
- php_stream_ftp_stream_stat,
- NULL
-};
-
-php_stream_wrapper php_stream_ftp_wrapper = {
- &ftp_stream_wops,
- NULL,
- 1 /* is_url */
-};
-
-
-/* {{{ php_fopen_url_wrap_ftp
- */
-php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream=NULL;
- php_url *resource=NULL;
- char tmp_line[512];
- unsigned short portno;
- char *scratch;
- int result;
- int i;
- char *tpath, *ttpath;
- size_t file_size = 0;
-
- resource = php_url_parse((char *) path);
- if (resource == NULL || resource->path == NULL)
- return NULL;
-
- /* use port 21 if one wasn't specified */
- if (resource->port == 0)
- resource->port = 21;
-
- stream = php_stream_sock_open_host(resource->host, resource->port, SOCK_STREAM, 0, 0);
- if (stream == NULL)
- goto errexit;
-
- php_stream_context_set(stream, context);
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_CONNECT, NULL, 0);
-
- /* Start talking to ftp server */
- result = GET_FTP_RESULT(stream);
- if (result > 299 || result < 200) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE, tmp_line, result);
- goto errexit;
- }
-
- /* send the user name */
- php_stream_write_string(stream, "USER ");
- if (resource->user != NULL) {
- php_raw_url_decode(resource->user, strlen(resource->user));
- php_stream_write_string(stream, resource->user);
- } else {
- php_stream_write_string(stream, "anonymous");
- }
- php_stream_write_string(stream, "\r\n");
-
- /* get the response */
- result = GET_FTP_RESULT(stream);
-
- /* if a password is required, send it */
- if (result >= 300 && result <= 399) {
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_AUTH_REQUIRED, tmp_line, 0);
-
- php_stream_write_string(stream, "PASS ");
- if (resource->pass != NULL) {
- php_raw_url_decode(resource->pass, strlen(resource->pass));
- php_stream_write_string(stream, resource->pass);
- } else {
- /* if the user has configured who they are,
- send that as the password */
- if (cfg_get_string("from", &scratch) == SUCCESS) {
- php_stream_write_string(stream, scratch);
- } else {
- php_stream_write_string(stream, "anonymous");
- }
- }
- php_stream_write_string(stream, "\r\n");
-
- /* read the response */
- result = GET_FTP_RESULT(stream);
-
- if (result > 299 || result < 200) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_AUTH_RESULT, tmp_line, result);
- } else {
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_AUTH_RESULT, tmp_line, result);
- }
- }
- if (result > 299 || result < 200)
- goto errexit;
-
- /* set the connection to be binary */
- php_stream_write_string(stream, "TYPE I\r\n");
- result = GET_FTP_RESULT(stream);
- if (result > 299 || result < 200)
- goto errexit;
-
- /* find out the size of the file (verifying it exists) */
- php_stream_write_string(stream, "SIZE ");
- php_stream_write_string(stream, resource->path);
- php_stream_write_string(stream, "\r\n");
-
- /* read the response */
- result = GET_FTP_RESULT(stream);
- if (mode[0] == 'r') {
- char *sizestr;
-
- /* when reading file, it must exist */
- if (result > 299 || result < 200) {
- errno = ENOENT;
- goto errexit;
- }
-
- sizestr = strchr(tmp_line, ' ');
- if (sizestr) {
- sizestr++;
- file_size = atoi(sizestr);
- php_stream_notify_file_size(context, file_size, tmp_line, result);
- }
- } else {
- /* when writing file, it must NOT exist */
- if (result <= 299 && result >= 200) {
- errno = EEXIST;
- goto errexit;
- }
- }
-
- /* set up the passive connection */
-
- /* We try EPSV first, needed for IPv6 and works on some IPv4 servers */
- php_stream_write_string(stream, "EPSV\r\n");
- result = GET_FTP_RESULT(stream);
-
- /* check if we got a 229 response */
- if (result != 229) {
- /* EPSV failed, let's try PASV */
- php_stream_write_string(stream, "PASV\r\n");
- result = GET_FTP_RESULT(stream);
-
- /* make sure we got a 227 response */
- if (result != 227)
- goto errexit;
-
- /* parse pasv command (129, 80, 95, 25, 13, 221) */
- tpath = tmp_line;
- /* skip over the "227 Some message " part */
- for (tpath += 4; *tpath && !isdigit((int) *tpath); tpath++);
- if (!*tpath)
- goto errexit;
- /* skip over the host ip, we just assume it's the same */
- for (i = 0; i < 4; i++) {
- for (; isdigit((int) *tpath); tpath++);
- if (*tpath != ',')
- goto errexit;
- tpath++;
- }
- /* pull out the MSB of the port */
- portno = (unsigned short) strtol(tpath, &ttpath, 10) * 256;
- if (ttpath == NULL) {
- /* didn't get correct response from PASV */
- goto errexit;
- }
- tpath = ttpath;
- if (*tpath != ',')
- goto errexit;
- tpath++;
- /* pull out the LSB of the port */
- portno += (unsigned short) strtol(tpath, &ttpath, 10);
- } else {
- /* parse epsv command (|||6446|) */
- for (i = 0, tpath = tmp_line + 4; *tpath; tpath++) {
- if (*tpath == '|') {
- i++;
- if (i == 3)
- break;
- }
- }
- if (i < 3)
- goto errexit;
- /* pull out the port */
- portno = (unsigned short) strtol(tpath + 1, &ttpath, 10);
- }
-
- if (ttpath == NULL) {
- /* didn't get correct response from EPSV/PASV */
- goto errexit;
- }
-
- if (mode[0] == 'r') {
- /* retrieve file */
- php_stream_write_string(stream, "RETR ");
- } else {
- /* store file */
- php_stream_write_string(stream, "STOR ");
- }
- if (resource->path != NULL) {
- php_stream_write_string(stream, resource->path);
- } else {
- php_stream_write_string(stream, "/");
- }
-
- /* close control connection */
- php_stream_write_string(stream, "\r\nQUIT\r\n");
- php_stream_close(stream);
-
- /* open the data channel */
- stream = php_stream_sock_open_host(resource->host, portno, SOCK_STREAM, 0, 0);
- if (stream == NULL)
- goto errexit;
-
- php_stream_context_set(stream, context);
- php_stream_notify_progress_init(context, 0, file_size);
-
- php_url_free(resource);
- return stream;
-
- errexit:
- php_url_free(resource);
- if (stream) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE, tmp_line, result);
- php_stream_close(stream);
- }
- if (tmp_line[0] != '\0')
- zend_error(E_WARNING, "FTP server reports %s", tmp_line);
- return NULL;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/head.c b/ext/standard/head.c
deleted file mode 100644
index e69905725a..0000000000
--- a/ext/standard/head.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-#include "ext/standard/php_standard.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "head.h"
-#include "SAPI.h"
-#ifdef TM_IN_SYS_TIME
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-
-#include "php_globals.h"
-#include "safe_mode.h"
-
-
-/* Implementation of the language Header() function */
-/* {{{ proto void header(string header [, bool replace])
- Sends a raw HTTP header */
-PHP_FUNCTION(header)
-{
- char *header;
- int header_len;
- zend_bool replace = 1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &header,
- &header_len, &replace) == FAILURE) {
- return;
- }
- sapi_add_header_ex(header, header_len, 1, replace TSRMLS_CC);
-}
-/* }}} */
-
-PHPAPI int php_header()
-{
- TSRMLS_FETCH();
-
- if (sapi_send_headers(TSRMLS_C)==FAILURE || SG(request_info).headers_only) {
- return 0; /* don't allow output */
- } else {
- return 1; /* allow output */
- }
-}
-
-
-PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, time_t expires, char *path, int path_len, char *domain, int domain_len, int secure TSRMLS_DC)
-{
- char *cookie, *encoded_value = NULL;
- int len=sizeof("Set-Cookie: ");
- time_t t;
- char *dt;
-
- len += name_len;
- if (value) {
- int encoded_value_len;
-
- encoded_value = php_url_encode(value, value_len, &encoded_value_len);
- len += encoded_value_len;
- }
- if (path) {
- len += path_len;
- }
- if (domain) {
- len += domain_len;
- }
- cookie = emalloc(len + 100);
-
- if (value && value_len == 0) {
- /*
- * MSIE doesn't delete a cookie when you set it to a null value
- * so in order to force cookies to be deleted, even on MSIE, we
- * pick an expiry date 1 year and 1 second in the past
- */
- t = time(NULL) - 31536001;
- dt = php_std_date(t);
- sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
- efree(dt);
- } else {
- sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
- if (expires > 0) {
- strcat(cookie, "; expires=");
- dt = php_std_date(expires);
- strcat(cookie, dt);
- efree(dt);
- }
- }
-
- if (encoded_value) {
- efree(encoded_value);
- }
-
- if (path && path_len > 0) {
- strcat(cookie, "; path=");
- strcat(cookie, path);
- }
- if (domain && domain_len > 0) {
- strcat(cookie, "; domain=");
- strcat(cookie, domain);
- }
- if (secure) {
- strcat(cookie, "; secure");
- }
-
- return sapi_add_header_ex(cookie, strlen(cookie), 0, 0 TSRMLS_CC);
-}
-
-
-/* php_set_cookie(name, value, expires, path, domain, secure) */
-/* {{{ proto bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])
- Send a cookie */
-PHP_FUNCTION(setcookie)
-{
- char *name, *value = NULL, *path = NULL, *domain = NULL;
- time_t expires = 0;
- zend_bool secure = 0;
- int name_len, value_len, path_len, domain_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slssb", &name,
- &name_len, &value, &value_len, &expires, &path,
- &path_len, &domain, &domain_len, &secure) == FAILURE) {
- return;
- }
-
- if (php_setcookie(name, name_len, value, value_len, expires, path, path_len, domain, domain_len, secure TSRMLS_CC) == SUCCESS) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int headers_sent(void)
- Returns true if headers have already been sent, false otherwise */
-PHP_FUNCTION(headers_sent)
-{
- if (ZEND_NUM_ARGS() != 0) {
- php_error(E_WARNING, "%s() expects no parameters, %d given",
- get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
- return;
- }
-
- if (SG(headers_sent)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4 * End:
- */
diff --git a/ext/standard/head.h b/ext/standard/head.h
deleted file mode 100644
index d019081121..0000000000
--- a/ext/standard/head.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef HEAD_H
-#define HEAD_H
-
-extern PHP_RINIT_FUNCTION(head);
-PHP_FUNCTION(header);
-PHP_FUNCTION(setcookie);
-PHP_FUNCTION(headers_sent);
-
-PHPAPI int php_header(void);
-PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, time_t expires, char *path, int path_len, char *domain, int domain_len, int secure TSRMLS_DC);
-
-#endif
diff --git a/ext/standard/html.c b/ext/standard/html.c
deleted file mode 100644
index cf933df0a1..0000000000
--- a/ext/standard/html.c
+++ /dev/null
@@ -1,872 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jaakko Hyvätti <jaakko.hyvatti@iki.fi> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "reg.h"
-#include "html.h"
-#include "php_string.h"
-#if HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#if HAVE_LANGINFO_H
-#include <langinfo.h>
-#endif
-
-enum entity_charset { cs_terminator, cs_8859_1, cs_cp1252,
- cs_8859_15, cs_utf_8, cs_big5, cs_gb2312,
- cs_big5hkscs, cs_sjis, cs_eucjp};
-typedef const char *entity_table_t;
-
-/* codepage 1252 is a Windows extension to iso-8859-1. */
-static entity_table_t ent_cp_1252[] = {
- NULL, NULL, "sbquo", "fnof", "bdquo", "hellip", "dagger",
- "Dagger", "circ", "permil", "Scaron", "lsaquo", "OElig",
- NULL, NULL, NULL, NULL, "lsquo", "rsquo", "ldquo", "rdquo",
- "bull", "ndash", "mdash", "tilde", "trade", "scaron", "rsaquo",
- "oelig", NULL, NULL, "Yuml"
-};
-
-static entity_table_t ent_iso_8859_1[] = {
- "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar",
- "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg",
- "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro",
- "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14",
- "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc",
- "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
- "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
- "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
- "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
- "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
- "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
- "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
- "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
- "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
- "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_iso_8859_15[] = {
- "nbsp", "iexcl", "cent", "pound", "euro", "yen", "Scaron",
- "sect", "scaron", "copy", "ordf", "laquo", "not", "shy", "reg",
- "macr", "deg", "plusmn", "sup2", "sup3", NULL, /* Zcaron */
- "micro", "para", "middot", NULL, /* zcaron */ "sup1", "ordm",
- "raquo", "OElig", "oelig", "Yuml", "iquest", "Agrave", "Aacute",
- "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
- "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
- "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
- "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
- "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
- "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
- "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
- "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
- "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
- "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_uni_338_402[] = {
- /* 338 */
- "OElig", "oelig", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- /* 352 */
- "Scaron", "scaron",
- /* 354 - 375 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 376 */
- "Yuml",
- /* 377 - 401 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 402 */
- "fnof"
-};
-
-static entity_table_t ent_uni_spacing[] = {
- /* 710 */
- "circ",
- /* 711 - 731 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 732 */
- "tilde",
-};
-
-static entity_table_t ent_uni_greek[] = {
- /* 913 */
- "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta",
- "Iota", "Kappa", "Lambda", "Mu", "Nu", "X1", "Omicron", "P1", "Rho",
- NULL, "Sigma", "Tau", "Upsilon", "Ph1", "Ch1", "Ps1", "Omega",
- /* 938 - 944 are not mapped */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta",
- "iota", "kappa", "lamda", "mu", "nu", "x1", "omicron", "p1", "rho",
- "sigmaf", "sigma", "tau", "upsilon", "ph1", "ch1", "ps1", "omega",
- /* 970 - 976 are not mapped */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "thetasym", "ups1h",
- NULL, NULL, NULL,
- "p1v"
-};
-
-static entity_table_t ent_uni_punct[] = {
- /* 8194 */
- "ensp", "emsp", NULL, NULL, NULL, NULL, NULL,
- "thinsp", NULL, NULL, "zwnj", "zwj", "lrm", "rlm",
- NULL, NULL, NULL, "ndash", "mdash", NULL, NULL, NULL,
- "lsquo", "rsquo", "sbquo", NULL, "ldquo", "rdquo", "bdquo",
- "dagger", "Dagger", "bull", NULL, NULL, NULL, "hellip",
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "permil", NULL,
- "prime", "Prime", NULL, NULL, NULL, NULL, NULL, "lsaquo", "rsaquo",
- NULL, NULL, NULL, "oline", NULL, NULL, NULL, NULL, NULL,
- "frasl"
-};
-
-static entity_table_t ent_uni_8465_8501[] = {
- /* 8465 */
- "image", NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8472 */
- "weierp", NULL, NULL, NULL,
- /* 8476 */
- "real", NULL, NULL, NULL, NULL, NULL,
- /* 8482 */
- "trade", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8501 */
- "alefsym",
-};
-
-static entity_table_t ent_uni_8592_9002[] = {
- /* 8592 */
- "larr", "uarr", "rarr", "darr", "harr",
- /* 8597 - 8628 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- /* 8629 */
- "crarr",
- /* 8630 - 8655 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- /* 8656 */
- "lArr", "uArr", "rArr", "dArr", "hArr",
- /* 8661 - 8703 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- /* 8704 */
- "forall", "part", "exist", NULL, "empty", NULL, "nabla", "isin",
- "notin", NULL, "n1", NULL, NULL, NULL, "prod", NULL, "sum", "minus",
- NULL, NULL, NULL, NULL, "lowast", NULL, NULL, "radic", NULL, NULL,
- "prop", "infin", NULL, "ang", NULL, NULL, NULL, NULL, NULL, NULL,
- "and", "or", "cap", "cup", "int", NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, "there4", NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, "sim", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "cong", NULL, NULL, "asymp",
- /* 8777 - 8799 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- /* 8800 */
- "ne", "equiv", NULL, NULL, "le", "ge",
- /* 8806 - 8833 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8834 */
- "sub", "sup", "nsub", NULL, "sube", "supe",
- /* 8840 - 8852 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8853 */
- "oplus", NULL, "otimes",
- /* 8856 - 8868 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8869 */
- "perp",
- /* 8870 - 8901 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- /* 8901 */
- "sdot",
- /* 8902 - 8967 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- /* 8968 */
- "lceil", "rceil", "lfloor", "rfloor",
- /* 8969 - 9000 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- /* 9001 */
- "lang", "rang",
-};
-
-static entity_table_t ent_uni_9674[] = {
- /* 9674 */
- "loz"
-};
-
-static entity_table_t ent_uni_9824_9830[] = {
- /* 9824 */
- "spades", NULL, NULL, "clubs", NULL, "hearts", "diams"
-};
-
-struct html_entity_map {
- enum entity_charset charset; /* charset identifier */
- unsigned short basechar; /* char code at start of table */
- unsigned short endchar; /* last char code in the table */
- entity_table_t *table; /* the table of mappings */
-};
-
-static const struct html_entity_map entity_map[] = {
- { cs_cp1252, 0x80, 0x9f, ent_cp_1252 },
- { cs_cp1252, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_8859_1, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_8859_15, 0xa0, 0xff, ent_iso_8859_15 },
- { cs_utf_8, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_utf_8, 338, 402, ent_uni_338_402 },
- { cs_utf_8, 710, 732, ent_uni_spacing },
- { cs_utf_8, 913, 982, ent_uni_greek },
- { cs_utf_8, 8194, 8260, ent_uni_punct },
- { cs_utf_8, 8465, 8501, ent_uni_8465_8501 },
- { cs_utf_8, 8592, 9002, ent_uni_8592_9002 },
- { cs_utf_8, 9674, 9674, ent_uni_9674 },
- { cs_utf_8, 9824, 9830, ent_uni_9824_9830 },
- { cs_big5, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_gb2312, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_big5hkscs, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_sjis, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_eucjp, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_terminator }
-};
-
-static const struct {
- const char *codeset;
- enum entity_charset charset;
-} charset_map[] = {
- { "ISO-8859-1", cs_8859_1 },
- { "ISO-8859-15", cs_8859_15 },
- { "utf-8", cs_utf_8 },
- { "cp1252", cs_cp1252 },
- { "BIG5", cs_big5 },
- { "GB2312", cs_gb2312 },
- { "BIG5-HKSCS", cs_big5hkscs },
- { "Shift_JIS", cs_sjis },
- { "SJIS", cs_sjis },
- { "EUCJP", cs_eucjp },
- { "EUC-JP", cs_eucjp },
- { NULL }
-};
-
-static const struct {
- unsigned short charcode;
- char *entity;
- int entitylen;
- int flags;
-} basic_entities[] = {
- { '&', "&amp;", 5, 0 },
- { '"', "&quot;", 6, ENT_HTML_QUOTE_DOUBLE },
- { '\'', "&#039;", 6, ENT_HTML_QUOTE_SINGLE },
- { '<', "&lt;", 4, 0 },
- { '>', "&gt;", 4, 0 },
- { 0, NULL, 0, 0 }
-};
-
-#define MB_RETURN { \
- *newpos = pos; \
- mbseq[mbpos] = '\0'; \
- *mbseqlen = mbpos; \
- return this_char; }
-
-#define MB_WRITE(mbchar) { \
- mbspace--; \
- if (mbspace == 0) { \
- MB_RETURN; \
- } \
- mbseq[mbpos++] = (mbchar); }
-
-/* {{{ get_next_char
- */
-inline static unsigned short get_next_char(enum entity_charset charset,
- unsigned char * str,
- int * newpos,
- unsigned char * mbseq,
- int * mbseqlen)
-{
- int pos = *newpos;
- int mbpos = 0;
- int mbspace = *mbseqlen;
- unsigned short this_char = str[pos++];
-
- if (mbspace <= 0) {
- *mbseqlen = 0;
- return this_char;
- }
-
- MB_WRITE((unsigned char)this_char);
-
- switch(charset) {
- case cs_utf_8:
- {
- unsigned long utf = 0;
- int stat = 0;
- int more = 1;
-
- /* unpack utf-8 encoding into a wide char.
- * Code stolen from the mbstring extension */
-
- do {
- if (this_char < 0x80) {
- more = 0;
- break;
- }
- else if (this_char < 0xc0) {
- switch(stat) {
- case 0x10: /* 2, 2nd */
- case 0x21: /* 3, 3rd */
- case 0x32: /* 4, 4th */
- case 0x43: /* 5, 5th */
- case 0x54: /* 6, 6th */
- /* last byte in sequence */
- more = 0;
- utf |= (this_char & 0x3f);
- this_char = (unsigned short)utf;
- break;
- case 0x20: /* 3, 2nd */
- case 0x31: /* 4, 3rd */
- case 0x42: /* 5, 4th */
- case 0x53: /* 6, 5th */
- /* penultimate char */
- utf |= ((this_char & 0x3f) << 6);
- stat++;
- break;
- case 0x30: /* 4, 2nd */
- case 0x41: /* 5, 3rd */
- case 0x52: /* 6, 4th */
- utf |= ((this_char & 0x3f) << 12);
- stat++;
- break;
- case 0x40: /* 5, 2nd */
- case 0x51:
- utf |= ((this_char & 0x3f) << 18);
- stat++;
- break;
- case 0x50: /* 6, 2nd */
- utf |= ((this_char & 0x3f) << 24);
- stat++;
- default:
- /* invalid */
- more = 0;
- }
- }
- /* lead byte */
- else if (this_char < 0xe0) {
- stat = 0x10; /* 2 byte */
- utf = (this_char & 0x1f) << 6;
- } else if (this_char < 0xf0) {
- stat = 0x20; /* 3 byte */
- utf = (this_char & 0xf) << 12;
- } else if (this_char < 0xf8) {
- stat = 0x30; /* 4 byte */
- utf = (this_char & 0x7) << 18;
- } else if (this_char < 0xfc) {
- stat = 0x40; /* 5 byte */
- utf = (this_char & 0x3) << 24;
- } else if (this_char < 0xfe) {
- stat = 0x50; /* 6 byte */
- utf = (this_char & 0x1) << 30;
- }
- else {
- /* invalid; bail */
- more = 0;
- break;
- }
- if (more)
- {
- this_char = str[pos++];
- MB_WRITE((unsigned char)this_char);
- }
- } while(more);
- }
- break;
- case cs_big5:
- case cs_gb2312:
- case cs_big5hkscs:
- {
- /* check if this is the first of a 2-byte sequence */
- if (this_char >= 0xa1 && this_char <= 0xf9) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if ((next_char >= 0x40 && next_char <= 0x73) ||
- (next_char >= 0xa1 && next_char <= 0xfe))
- {
- /* yes, this a wide char */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- }
- break;
- }
- case cs_sjis:
- {
- /* check if this is the first of a 2-byte sequence */
- if ( (this_char >= 0x81 && this_char <= 0x9f) ||
- (this_char >= 0xe0 && this_char <= 0xef)
- ) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if ((next_char >= 0x40 && next_char <= 0x7e) ||
- (next_char >= 0x80 && next_char <= 0xfc))
- {
- /* yes, this a wide char */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- }
- break;
- }
- case cs_eucjp:
- {
- /* check if this is the first of a multi-byte sequence */
- if (this_char >= 0xa1 && this_char <= 0xfe) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if (next_char >= 0xa1 && next_char <= 0xfe)
- {
- /* yes, this a jis kanji char */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- } else if (this_char == 0x8e) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if (next_char >= 0xa1 && next_char <= 0xdf)
- {
- /* JIS X 0201 kana */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- } else if (this_char == 0x8f) {
- /* peek at the next two char */
- unsigned char next_char = str[pos];
- unsigned char next2_char = str[pos+1];
- if ((next_char >= 0xa1 && next_char <= 0xfe) &&
- (next2_char >= 0xa1 && next2_char <= 0xfe))
- {
- /* JIS X 0212 hojo-kanji */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- this_char <<= 8;
- MB_WRITE(next2_char);
- this_char |= next2_char;
- pos++;
- }
-
- }
- break;
- }
- default:
- {
- break;
- }
- }
- MB_RETURN;
-}
-/* }}} */
-
-/* {{{ entity_charset determine_charset
- * returns the charset identifier based on current locale or a hint.
- * defaults to iso-8859-1 */
-static enum entity_charset determine_charset(char *charset_hint)
-{
- int i;
- enum entity_charset charset = cs_8859_1;
- int len;
-
- /* Guarantee default behaviour for backwards compatibility */
- if (charset_hint == NULL)
- return cs_8859_1;
-
- if (strlen(charset_hint) == 0) {
- /* try to detect the charset for the locale */
-#if HAVE_NL_LANGINFO && HAVE_LOCALE_H && defined(CODESET)
- charset_hint = nl_langinfo(CODESET);
-#endif
-#if HAVE_LOCALE_H
- if (charset_hint == NULL)
- {
- /* try to figure out the charset from the locale */
- char *localename;
- char *dot, *at;
-
- /* lang[_territory][.codeset][@modifier] */
- localename = setlocale(LC_CTYPE, NULL);
-
- dot = strchr(localename, '.');
- if (dot) {
- dot++;
- /* locale specifies a codeset */
- at = strchr(dot, '@');
- if (at)
- len = at - dot;
- else
- len = strlen(dot);
- charset_hint = dot;
- }
- else {
- /* no explicit name; see if the name itself
- * is the charset */
- charset_hint = localename;
- len = strlen(charset_hint);
- }
- }
- else
- len = strlen(charset_hint);
-#else
- if (charset_hint)
- len = strlen(charset_hint);
-#endif
- }
- if (charset_hint) {
- /* now walk the charset map and look for the codeset */
- for (i = 0; charset_map[i].codeset; i++) {
- if (strncasecmp(charset_hint, charset_map[i].codeset, len) == 0) {
- charset = charset_map[i].charset;
- break;
- }
- }
- }
- return charset;
-}
-/* }}} */
-
-/* {{{ php_unescape_html_entities
- */
-PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset)
-{
- int retlen;
- int j, k;
- char *replaced, *ret;
- enum entity_charset charset = determine_charset(hint_charset);
- unsigned char replacement[15];
-
- ret = estrdup(old);
- retlen = oldlen;
-
- if (all) {
- /* look for a match in the maps for this charset */
- for (j=0; entity_map[j].charset != cs_terminator; j++) {
- if (entity_map[j].charset != charset)
- continue;
-
- for (k = entity_map[j].basechar; k <= entity_map[j].endchar; k++) {
- unsigned char entity[32];
- int entity_length = 0;
-
- if (entity_map[j].table[k - entity_map[j].basechar] == NULL)
- continue;
-
-
- entity[0] = '&';
- entity_length = strlen(entity_map[j].table[k - entity_map[j].basechar]);
- strncpy(&entity[1], entity_map[j].table[k - entity_map[j].basechar], sizeof(entity) - 2);
- entity[entity_length+1] = ';';
- entity[entity_length+2] = '\0';
- entity_length += 2;
-
- /* When we have MBCS entities in the tables above, this will need to handle it */
- if (k > 0xff)
- zend_error(E_WARNING, "cannot yet handle MBCS in html_entity_decode()!");
- replacement[0] = k;
- replacement[1] = '\0';
-
- replaced = php_str_to_str(ret, retlen, entity, entity_length, replacement, 1, &retlen);
- efree(ret);
- ret = replaced;
- }
- }
- }
-
- for (j = 0; basic_entities[j].charcode != 0; j++) {
-
- if (basic_entities[j].flags && (quote_style & basic_entities[j].flags) == 0)
- continue;
-
- replacement[0] = (unsigned char)basic_entities[j].charcode;
- replacement[1] = '\0';
-
- replaced = php_str_to_str(ret, retlen, basic_entities[j].entity, basic_entities[j].entitylen, replacement, 1, &retlen);
- efree(ret);
- ret = replaced;
- }
-
- *newlen = retlen;
- return ret;
-}
-/* }}} */
-
-
-
-
-/* {{{ php_escape_html_entities
- */
-PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset)
-{
- int i, j, maxlen, len;
- char *replaced;
- enum entity_charset charset = determine_charset(hint_charset);
- int matches_map;
-
- maxlen = 2 * oldlen;
- if (maxlen < 128)
- maxlen = 128;
- replaced = emalloc (maxlen);
- len = 0;
-
- i = 0;
- while (i < oldlen) {
- unsigned char mbsequence[16]; /* allow up to 15 characters in a multibyte sequence */
- int mbseqlen = sizeof(mbsequence);
- unsigned short this_char = get_next_char(charset, old, &i, mbsequence, &mbseqlen);
-
- matches_map = 0;
-
- if (len + 9 > maxlen)
- replaced = erealloc (replaced, maxlen += 128);
-
- if (all) {
- /* look for a match in the maps for this charset */
- unsigned char *rep;
-
-
- for (j=0; entity_map[j].charset != cs_terminator; j++) {
- if (entity_map[j].charset == charset
- && this_char >= entity_map[j].basechar
- && this_char <= entity_map[j].endchar)
- {
- rep = (unsigned char*)entity_map[j].table[this_char - entity_map[j].basechar];
- if (rep == NULL) {
- /* there is no entity for this position; fall through and
- * just output the character itself */
- break;
- }
-
- matches_map = 1;
- break;
- }
- }
-
- if (matches_map) {
- replaced[len++] = '&';
- strcpy(replaced + len, rep);
- len += strlen(rep);
- replaced[len++] = ';';
- }
- }
- if (!matches_map) {
- int is_basic = 0;
-
- for (j = 0; basic_entities[j].charcode != 0; j++) {
- if ((basic_entities[j].charcode != this_char) ||
- (basic_entities[j].flags && (quote_style & basic_entities[j].flags) == 0))
- continue;
-
- memcpy(replaced + len, basic_entities[j].entity, basic_entities[j].entitylen);
- len += basic_entities[j].entitylen;
-
- is_basic = 1;
- break;
-
- }
- if (!is_basic) {
- if (this_char > 0xff) {
- /* a wide char without a named entity; pass through the original sequence */
- memcpy(replaced + len, mbsequence, mbseqlen);
- len += mbseqlen;
-
- } else
- replaced [len++] = (unsigned char)this_char;
- }
- }
- }
- replaced [len] = '\0';
- *newlen = len;
-
- return replaced;
-
-
-}
-/* }}} */
-
-/* {{{ php_html_entities
- */
-static void php_html_entities(INTERNAL_FUNCTION_PARAMETERS, int all)
-{
- char *str, *hint_charset = NULL;
- int str_len, hint_charset_len, len, quote_style = ENT_COMPAT;
- char *replaced;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", &str, &str_len,
- &quote_style, &hint_charset, &hint_charset_len) == FAILURE) {
- return;
- }
-
- replaced = php_escape_html_entities(str, str_len, &len, all, quote_style, hint_charset);
- RETVAL_STRINGL(replaced, len, 0);
-}
-/* }}} */
-
-#define HTML_SPECIALCHARS 0
-#define HTML_ENTITIES 1
-
-/* {{{ register_html_constants
- */
-void register_html_constants(INIT_FUNC_ARGS)
-{
- REGISTER_LONG_CONSTANT("HTML_SPECIALCHARS", HTML_SPECIALCHARS, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("HTML_ENTITIES", HTML_ENTITIES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("ENT_COMPAT", ENT_COMPAT, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("ENT_QUOTES", ENT_QUOTES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("ENT_NOQUOTES", ENT_NOQUOTES, CONST_PERSISTENT|CONST_CS);
-}
-/* }}} */
-
-/* {{{ proto string htmlspecialchars(string string [, int quote_style][, string charset])
- Convert special characters to HTML entities */
-PHP_FUNCTION(htmlspecialchars)
-{
- php_html_entities(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string html_entity_decode(string string [, int quote_style][, string charset])
- Convert all applicable characters to HTML entities */
-PHP_FUNCTION(html_entity_decode)
-{
- char *str, *hint_charset = NULL;
- int str_len, hint_charset_len, len, quote_style = ENT_COMPAT;
- char *replaced;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", &str, &str_len,
- &quote_style, &hint_charset, &hint_charset_len) == FAILURE) {
- return;
- }
-
- replaced = php_unescape_html_entities(str, str_len, &len, 1, quote_style, hint_charset);
- RETVAL_STRINGL(replaced, len, 0);
-}
-/* }}} */
-
-
-/* {{{ proto string htmlentities(string string [, int quote_style][, string charset])
- Convert all applicable characters to HTML entities */
-PHP_FUNCTION(htmlentities)
-{
- php_html_entities(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto array get_html_translation_table([int table [, int quote_style]])
- Returns the internal translation table used by htmlspecialchars and htmlentities */
-PHP_FUNCTION(get_html_translation_table)
-{
- int which = HTML_SPECIALCHARS, quote_style = ENT_COMPAT;
- int i, j;
- char ind[2];
- enum entity_charset charset = determine_charset(NULL);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ll", &which, &quote_style) == FAILURE) {
- return;
- }
-
- array_init(return_value);
-
- ind[1] = 0;
-
- switch (which) {
- case HTML_ENTITIES:
- for (j=0; entity_map[j].charset != cs_terminator; j++) {
- if (entity_map[j].charset != charset)
- continue;
- for (i = 0; i < entity_map[j].endchar - entity_map[j].basechar; i++)
- {
- char buffer[16];
-
- if (entity_map[j].table[i] == NULL)
- continue;
- /* what about wide chars here ?? */
- ind[0] = i + entity_map[j].basechar;
- sprintf(buffer, "&%s;", entity_map[j].table[i]);
- add_assoc_string(return_value, ind, buffer, 1);
-
- }
- }
- /* break thru */
-
- case HTML_SPECIALCHARS:
- for (j = 0; basic_entities[j].charcode != 0; j++) {
-
- if (basic_entities[j].flags && (quote_style & basic_entities[j].flags) == 0)
- continue;
-
- ind[0] = (unsigned char)basic_entities[j].charcode;
- add_assoc_string(return_value, ind, basic_entities[j].entity, 1);
- }
- break;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/html.h b/ext/standard/html.h
deleted file mode 100644
index 0f264328e9..0000000000
--- a/ext/standard/html.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef HTML_H
-#define HTML_H
-
-#define ENT_HTML_QUOTE_NONE 0
-#define ENT_HTML_QUOTE_SINGLE 1
-#define ENT_HTML_QUOTE_DOUBLE 2
-
-#define ENT_COMPAT ENT_HTML_QUOTE_DOUBLE
-#define ENT_QUOTES (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
-#define ENT_NOQUOTES ENT_HTML_QUOTE_NONE
-
-void register_html_constants(INIT_FUNC_ARGS);
-
-PHP_FUNCTION(htmlspecialchars);
-PHP_FUNCTION(htmlentities);
-PHP_FUNCTION(html_entity_decode);
-PHP_FUNCTION(get_html_translation_table);
-
-PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset);
-
-#endif /* HTML_H */
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
deleted file mode 100644
index 5ba1876e68..0000000000
--- a/ext/standard/http_fopen_wrapper.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_streams.h"
-#include "php_network.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifdef PHP_WIN32
-#include <windows.h>
-#include <winsock.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#else
-#include <sys/param.h>
-#endif
-
-#include "php_standard.h"
-
-#include <sys/types.h>
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#else
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-
-#if defined(PHP_WIN32) || defined(__riscos__)
-#undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-
-#include "php_fopen_wrappers.h"
-
-#define HTTP_HEADER_BLOCK_SIZE 1024
-
-php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource = NULL;
- int use_ssl;
- char *scratch = NULL;
- char *tmp = NULL;
- int scratch_len = 0;
- int body = 0;
- char location[HTTP_HEADER_BLOCK_SIZE];
- zval *response_header = NULL;
- int reqok = 0;
- char *http_header_line = NULL;
- char tmp_line[128];
- size_t chunk_size = 0, file_size = 0;
-
- resource = php_url_parse(path);
- if (resource == NULL)
- return NULL;
-
- use_ssl = resource->scheme && resource->scheme[4] == 's';
-
- /* choose default ports */
- if (use_ssl && resource->port == 0)
- resource->port = 443;
- else if (resource->port == 0)
- resource->port = 80;
-
- stream = php_stream_sock_open_host(resource->host, resource->port, SOCK_STREAM, 0, 0);
- if (stream == NULL)
- goto out;
-
- /* avoid buffering issues while reading header */
- if (options & STREAM_WILL_CAST)
- chunk_size = php_stream_sock_set_chunk_size(stream, 1 TSRMLS_CC);
-
- php_stream_context_set(stream, context);
-
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_CONNECT, NULL, 0);
-
-#if HAVE_OPENSSL_EXT
- if (use_ssl) {
- if (php_stream_sock_ssl_activate(stream, 1) == FAILURE) {
- if (options & REPORT_ERRORS) {
- zend_error(E_WARNING, "Unable to activate SSL mode");
- }
- php_stream_close(stream);
- stream = NULL;
- goto out;
- }
- }
-#endif
-
- scratch_len = strlen(path) + 32;
- scratch = emalloc(scratch_len);
-
- strcpy(scratch, "GET ");
-
- /* file */
- if (resource->path && *resource->path)
- strlcat(scratch, resource->path, scratch_len);
- else
- strlcat(scratch, "/", scratch_len);
-
- /* query string */
- if (resource->query) {
- strlcat(scratch, "?", scratch_len);
- strlcat(scratch, resource->query, scratch_len);
- }
-
- /* protocol version we are speaking */
- strlcat(scratch, " HTTP/1.0\r\n", scratch_len);
-
- /* send it */
- php_stream_write(stream, scratch, strlen(scratch));
-
- /* authz header if it was specified */
- if (resource->user && resource->pass) {
- /* scratch is large enough, since it was made large enough for the whole URL */
- strcpy(scratch, resource->user);
- strcat(scratch, ":");
- strcat(scratch, resource->pass);
-
- tmp = php_base64_encode((unsigned char*)scratch, strlen(scratch), NULL);
-
- if (snprintf(scratch, scratch_len, "Authorization: Basic %s\r\n", tmp) > 0) {
- php_stream_write(stream, scratch, strlen(scratch));
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_AUTH_REQUIRED, NULL, 0);
- }
-
- efree(tmp);
- tmp = NULL;
- }
-
- /* if the user has configured who they are, send a From: line */
- if (cfg_get_string("from", &tmp) == SUCCESS) {
- if (snprintf(scratch, scratch_len, "From: %s\r\n", tmp) > 0)
- php_stream_write(stream, scratch, strlen(scratch));
- }
-
- /* Send Host: header so name-based virtual hosts work */
- if ((use_ssl && resource->port != 443) || (!use_ssl && resource->port != 80)) {
- if (snprintf(scratch, scratch_len, "Host: %s:%i\r\n", resource->host, resource->port) > 0)
- php_stream_write(stream, scratch, strlen(scratch));
- }
- else if (snprintf(scratch, scratch_len, "Host: %s\r\n", resource->host) > 0)
- php_stream_write(stream, scratch, strlen(scratch));
-
- php_stream_write_string(stream, "User-Agent: PHP/" PHP_VERSION "\r\n\r\n");
-
- location[0] = '\0';
-
- MAKE_STD_ZVAL(response_header);
- array_init(response_header);
-
- if (!php_stream_eof(stream)) {
- /* get response header */
-
- if (php_stream_gets(stream, tmp_line, sizeof(tmp_line)-1) != NULL) {
- zval *http_response;
- int response_code;
-
- MAKE_STD_ZVAL(http_response);
- response_code = atoi(tmp_line + 9);
- if (response_code == 200) {
- reqok = 1;
- } else {
- switch(response_code) {
- case 403:
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_AUTH_RESULT,
- tmp_line, response_code);
- break;
- default:
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE,
- tmp_line, response_code);
- }
- }
-
- Z_STRLEN_P(http_response) = strlen(tmp_line);
- Z_STRVAL_P(http_response) = estrndup(tmp_line, Z_STRLEN_P(http_response));
- if (Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=='\n') {
- Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=0;
- Z_STRLEN_P(http_response)--;
- if (Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=='\r') {
- Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=0;
- Z_STRLEN_P(http_response)--;
- }
- }
- Z_TYPE_P(http_response) = IS_STRING;
- zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_response, sizeof(zval *), NULL);
- }
- }
-
- /* read past HTTP headers */
-
- http_header_line = emalloc(HTTP_HEADER_BLOCK_SIZE);
-
- while (!body && !php_stream_eof(stream)) {
-
- if (php_stream_gets(stream, http_header_line, HTTP_HEADER_BLOCK_SIZE-1) != NULL) {
- char *p;
- int found_eol = 0;
- int http_header_line_length;
-
- http_header_line[HTTP_HEADER_BLOCK_SIZE-1] = '\0';
- p = http_header_line;
- while(*p) {
- while(*p == '\n' || *p == '\r') {
- *p = '\0';
- p--;
- found_eol = 1;
- }
- if (found_eol)
- break;
- p++;
- }
- http_header_line_length = p-http_header_line+1;
-
- if (!strncasecmp(http_header_line, "Location: ", 10)) {
- strlcpy(location, http_header_line + 10, sizeof(location));
- } else if (!strncasecmp(http_header_line, "Content-Type: ", 14)) {
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_MIME_TYPE_IS, http_header_line + 14, 0);
- } else if (!strncasecmp(http_header_line, "Content-Length: ", 16)) {
- file_size = atoi(http_header_line + 16);
- php_stream_notify_file_size(context, file_size, http_header_line, 0);
- }
-
-
- if (http_header_line[0] == '\0')
- body = 1;
- else {
- zval *http_header;
-
- MAKE_STD_ZVAL(http_header);
-
- ZVAL_STRINGL(http_header, http_header_line, http_header_line_length, 1);
-
- zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header, sizeof(zval *), NULL);
- }
- }
- else
- break;
- }
-
- if (!reqok) {
-
- if (location[0] != '\0')
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_REDIRECTED, location, 0);
-
- php_stream_close(stream);
- stream = NULL;
-
- if (location[0] != '\0') {
-
- zval *entry, **entryp;
- char new_path[HTTP_HEADER_BLOCK_SIZE];
-
- *new_path='\0';
- if (strlen(location)<8 || (strncasecmp(location, "http://", 7) && strncasecmp(location, "https://", 8))) {
- strcpy(new_path, resource->scheme);
- strlcat(new_path, resource->host, sizeof(new_path));
- if ((use_ssl && resource->port != 443) || (!use_ssl && resource->port != 80)) {
- snprintf(new_path+strlen(new_path), sizeof(new_path)-strlen(new_path)-1, ":%d", resource->port);
- }
- if (*location != '/') {
- php_dirname(resource->path, strlen(resource->path));
- snprintf (new_path+strlen(new_path), sizeof(new_path)-strlen(new_path)-1, "%s/", resource->path);
- }
- strlcat(new_path, location, sizeof(new_path));
- }
- else {
- strlcpy(new_path, location, sizeof(new_path));
- }
- stream = php_stream_url_wrap_http(NULL, new_path, mode, options, opened_path, context STREAMS_CC TSRMLS_CC);
- if (stream && stream->wrapperdata) {
- entryp = &entry;
- MAKE_STD_ZVAL(entry);
- ZVAL_EMPTY_STRING(entry);
- zend_hash_next_index_insert(Z_ARRVAL_P(response_header), entryp, sizeof(zval *), NULL);
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream->wrapperdata));
- while (zend_hash_get_current_data(Z_ARRVAL_P(stream->wrapperdata), (void **)&entryp) == SUCCESS) {
- zval_add_ref(entryp);
- zend_hash_next_index_insert(Z_ARRVAL_P(response_header), entryp, sizeof(zval *), NULL);
- zend_hash_move_forward(Z_ARRVAL_P(stream->wrapperdata));
- }
- zval_dtor(stream->wrapperdata);
- FREE_ZVAL(stream->wrapperdata);
- }
- } else {
- if (options & REPORT_ERRORS)
- zend_error(E_WARNING, "HTTP request failed! %s", tmp_line);
- }
- }
-out:
- if (http_header_line)
- efree(http_header_line);
- if (scratch)
- efree(scratch);
- php_url_free(resource);
-
- if (stream) {
- stream->wrapperdata = response_header;
- php_stream_notify_progress_init(context, 0, file_size);
- if (options & STREAM_WILL_CAST)
- php_stream_sock_set_chunk_size(stream, chunk_size TSRMLS_CC);
- }
-
- if (response_header) {
- zval *sym;
- MAKE_STD_ZVAL(sym);
- *sym = *response_header;
- zval_copy_ctor(sym);
- ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", sym);
- }
-
- return stream;
-}
-
-static int php_stream_http_stream_stat(php_stream_wrapper *wrapper,
- php_stream *stream,
- php_stream_statbuf *ssb
- TSRMLS_DC)
-{
- /* one day, we could fill in the details based on Date: and Content-Length:
- * headers. For now, we return with a failure code to prevent the underlying
- * file's details from being used instead. */
- return -1;
-}
-
-static php_stream_wrapper_ops http_stream_wops = {
- php_stream_url_wrap_http,
- NULL,
- php_stream_http_stream_stat,
- NULL
-};
-
-php_stream_wrapper php_stream_http_wrapper = {
- &http_stream_wops,
- NULL,
- 1 /* is_url */
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/image.c b/ext/standard/image.c
deleted file mode 100644
index 2b226bd9b2..0000000000
--- a/ext/standard/image.c
+++ /dev/null
@@ -1,841 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-/*
- * Based on Daniel Schmitt's imageinfo.c which carried the following
- * Copyright notice.
- */
-
-/*
- * imageinfo.c
- *
- * Simple routines to extract image width/height data from GIF/JPEG files.
- *
- * Copyright (c) 1997 Daniel Schmitt, opal online publishing, Bonn, Germany.
- *
- * Includes code snippets from rdjpgcom.c,
- * Copyright (c) 1994-1995 Thomas G. Lane
- * from release 6a of the Independent JPEG Group's software.
- *
- * Legal status: see GNU General Public License version 2 or later.
- *
- */
-
-#include "php.h"
-#include <stdio.h>
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#include "fopen_wrappers.h"
-#include "ext/standard/fsock.h"
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include "php_image.h"
-
-#if HAVE_ZLIB
-#include "zlib.h"
-#endif
-
-/* file type markers */
-PHPAPI const char php_sig_gif[3] = {'G', 'I', 'F'};
-PHPAPI const char php_sig_psd[4] = {'8', 'B', 'P', 'S'};
-PHPAPI const char php_sig_bmp[2] = {'B', 'M'};
-PHPAPI const char php_sig_swf[3] = {'F', 'W', 'S'};
-PHPAPI const char php_sig_swc[3] = {'C', 'W', 'S'};
-PHPAPI const char php_sig_jpg[3] = {(char) 0xff, (char) 0xd8, (char) 0xff};
-PHPAPI const char php_sig_png[8] = {(char) 0x89, (char) 0x50, (char) 0x4e, (char) 0x47,
-(char) 0x0d, (char) 0x0a, (char) 0x1a, (char) 0x0a};
-PHPAPI const char php_sig_tif_ii[4] = {'I','I', (char)0x2A, (char)0x00};
-PHPAPI const char php_sig_tif_mm[4] = {'M','M', (char)0x00, (char)0x2A};
-PHPAPI const char php_sig_jpc[3] = {(char)0xFF, (char)0x4F, (char)0xff};
-
-
-/* return info as a struct, to make expansion easier */
-
-struct gfxinfo {
- unsigned int width;
- unsigned int height;
- unsigned int bits;
- unsigned int channels;
-};
-
-/* {{{ php_handle_gif
- * routine to handle GIF files. If only everything were that easy... ;} */
-static struct gfxinfo *php_handle_gif (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char a[2];
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
-
- php_stream_seek(stream, 3, SEEK_CUR);
-
- php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */
- result->width = (unsigned short)a[0] | (((unsigned short)a[1])<<8);
-
- php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */
- result->height = (unsigned short)a[0] | (((unsigned short)a[1])<<8);
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_psd
- */
-static struct gfxinfo *php_handle_psd (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char a[8];
- char temp[11];
- unsigned long in_width, in_height;
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- php_stream_read(stream, temp, sizeof(temp));
-
- if((php_stream_read(stream, a, sizeof(a))) <= 0) {
- in_height = 0;
- in_width = 0;
- } else {
- in_height = (((unsigned long) a[ 0 ]) << 24) + (((unsigned long) a[ 1 ]) << 16) + (((unsigned long) a[ 2 ]) << 8) + ((unsigned long) a[ 3 ]);
- in_width = (((unsigned long) a[ 4 ]) << 24) + (((unsigned long) a[ 5 ]) << 16) + (((unsigned long) a[ 6 ]) << 8) + ((unsigned long) a[ 7 ]);
- }
-
- result->width = (unsigned int) in_width;
- result->height = (unsigned int) in_height;
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_bmp
- */
-static struct gfxinfo *php_handle_bmp (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- char temp[15];
-
- struct {
- unsigned long in_width, in_height;
- } dim;
-
- result = (struct gfxinfo *) ecalloc (1, sizeof(struct gfxinfo));
-
- php_stream_read(stream, temp, sizeof(temp));
- php_stream_read(stream, (char*) &dim, sizeof(dim));
- result->width = dim.in_width;
- result->height = dim.in_height;
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_swf_get_bits
- * routines to handle SWF files. */
-static unsigned long int php_swf_get_bits (unsigned char* buffer, unsigned int pos, unsigned int count)
-{
- unsigned int loop;
- unsigned long int result = 0;
-
- for (loop = pos; loop < pos + count; loop++)
- {
- result = result +
- ((((buffer[loop / 8]) >> (7 - (loop % 8))) & 0x01) << (count - (loop - pos) - 1));
- }
- return result;
-}
-/* }}} */
-
-#if HAVE_ZLIB
-/* {{{ php_handle_swc
- */
-static struct gfxinfo *php_handle_swc (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
-
- long bits;
- unsigned char a[64];
- unsigned long len = 64;
- char *b;
-
- b = ecalloc (1, len + 1);
-
- result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
- php_stream_seek(stream, 5, SEEK_CUR);
-
- php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */
- uncompress (b, &len, a, sizeof(a));
-
- bits = php_swf_get_bits (b, 0, 5);
- result->width = (php_swf_get_bits (b, 5 + bits, bits) -
- php_swf_get_bits (b, 5, bits)) / 20;
- result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) -
- php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20;
- efree (b);
- return result;
-}
-/* }}} */
-#endif
-
-/* {{{ php_handle_swf
- */
-static struct gfxinfo *php_handle_swf (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- long bits;
- unsigned char a[32];
-
- result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
- php_stream_seek(stream, 5, SEEK_CUR);
-
- php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */
- bits = php_swf_get_bits (a, 0, 5);
- result->width = (php_swf_get_bits (a, 5 + bits, bits) -
- php_swf_get_bits (a, 5, bits)) / 20;
- result->height = (php_swf_get_bits (a, 5 + (3 * bits), bits) -
- php_swf_get_bits (a, 5 + (2 * bits), bits)) / 20;
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_png
- * routine to handle PNG files */
-static struct gfxinfo *php_handle_png (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned long in_width, in_height;
- unsigned char a[8];
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
-
- php_stream_seek(stream, 8, SEEK_CUR);
-
- if((php_stream_read(stream, a, sizeof(a))) <= 0) {
- in_width = 0;
- in_height = 0;
- } else {
- in_width = (((unsigned long) a[ 0 ]) << 24) + (((unsigned long) a[ 1 ]) << 16) + (((unsigned long) a[ 2 ]) << 8) + ((unsigned long) a[ 3 ]);
- in_height = (((unsigned long) a[ 4 ]) << 24) + (((unsigned long) a[ 5 ]) << 16) + (((unsigned long) a[ 6 ]) << 8) + ((unsigned long) a[ 7 ]);
- }
-
- result->width = (unsigned int) in_width;
- result->height = (unsigned int) in_height;
- return result;
-}
-/* }}} */
-
-/* routines to handle JPEG data */
-
-/* some defines for the different JPEG block types */
-#define M_SOF0 0xC0 /* Start Of Frame N */
-#define M_SOF1 0xC1 /* N indicates which compression process */
-#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */
-#define M_SOF3 0xC3
-#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */
-#define M_SOF6 0xC6
-#define M_SOF7 0xC7
-#define M_SOF9 0xC9
-#define M_SOF10 0xCA
-#define M_SOF11 0xCB
-#define M_SOF13 0xCD
-#define M_SOF14 0xCE
-#define M_SOF15 0xCF
-#define M_SOI 0xD8
-#define M_EOI 0xD9 /* End Of Image (end of datastream) */
-#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
-#define M_APP0 0xe0
-#define M_APP1 0xe1
-#define M_APP2 0xe2
-#define M_APP3 0xe3
-#define M_APP4 0xe4
-#define M_APP5 0xe5
-#define M_APP6 0xe6
-#define M_APP7 0xe7
-#define M_APP8 0xe8
-#define M_APP9 0xe9
-#define M_APP10 0xea
-#define M_APP11 0xeb
-#define M_APP12 0xec
-#define M_APP13 0xed
-#define M_APP14 0xee
-#define M_APP15 0xef
-#define M_COM 0xFE /* COMment */
-
-#define M_PSEUDO 0xFFD8 /* pseudo marker for start of image(byte 0) */
-
-/* {{{ php_read2
- */
-static unsigned short php_read2(php_stream * stream TSRMLS_DC)
-{
- unsigned char a[2];
-
- /* just return 0 if we hit the end-of-file */
- if((php_stream_read(stream, a, sizeof(a))) <= 0) return 0;
-
- return (((unsigned short) a[ 0 ]) << 8) + ((unsigned short) a[ 1 ]);
-}
-/* }}} */
-
-/* {{{ php_next_marker
- * get next marker byte from file */
-static unsigned int php_next_marker(php_stream * stream, int last_marker, int comment_correction, int ff_read TSRMLS_DC)
-{
- int a=0, marker;
-
- /* get marker byte, swallowing possible padding */
- if ( last_marker==M_COM && comment_correction) {
- /* some software does not count the length bytes of COM section */
- /* one company doing so is very much envolved in JPEG... so we accept too */
- /* by the way: some of those companies changed their code now... */
- comment_correction = 2;
- } else {
- last_marker = 0;
- comment_correction = 0;
- }
- if ( ff_read) {
- a = 1; /* already read 0xff in filetype detection */
- }
- do {
- if ((marker = php_stream_getc(stream)) == EOF)
- {
- return M_EOI;/* we hit EOF */
- }
- if ( last_marker==M_COM && comment_correction>0)
- {
- if ( marker != 0xFF)
- {
- marker = 0xff;
- comment_correction--;
- } else {
- last_marker = M_PSEUDO; /* stop skipping non 0xff for M_COM */
- }
- }
- if ( ++a > 10)
- {
- /* who knows the maxim amount of 0xff? though 7 */
- /* but found other implementations */
- return M_EOI;
- }
- } while ( marker == 0xff);
- if ( a < 2)
- {
- return M_EOI; /* at least one 0xff is needed before marker code */
- }
- if ( last_marker==M_COM && comment_correction)
- {
- return M_EOI; /* ah illegal: char after COM section not 0xFF */
- }
- return (unsigned int)marker;
-}
-/* }}} */
-
-/* {{{ php_skip_variable
- * skip over a variable-length block; assumes proper length marker */
-static void php_skip_variable(php_stream * stream TSRMLS_DC)
-{
- off_t length = ((unsigned int)php_read2(stream TSRMLS_CC));
-
- length = length-2;
- if (length)
- {
- php_stream_seek(stream, (long)length, SEEK_CUR);
- }
-}
-/* }}} */
-
-/* {{{ php_read_APP
- */
-static void php_read_APP(php_stream * stream, unsigned int marker, zval *info TSRMLS_DC)
-{
- unsigned short length;
- unsigned char *buffer;
- unsigned char markername[ 16 ];
- zval *tmp;
-
- length = php_read2(stream TSRMLS_CC);
- length -= 2; /* length includes itself */
-
- buffer = emalloc(length);
- if ( !buffer) return;
-
- if (php_stream_read(stream, buffer, (long) length) <= 0) {
- efree(buffer);
- return;
- }
-
- sprintf(markername, "APP%d", marker - M_APP0);
-
- if (zend_hash_find(Z_ARRVAL_P(info), markername, strlen(markername)+1, (void **) &tmp) == FAILURE) {
- /* XXX we onyl catch the 1st tag of it's kind! */
- add_assoc_stringl(info, markername, buffer, length, 1);
- }
-
- efree(buffer);
-}
-/* }}} */
-
-/* {{{ php_handle_jpeg
- main loop to parse JPEG structure */
-static struct gfxinfo *php_handle_jpeg (php_stream * stream, pval *info TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned int marker = M_PSEUDO;
- unsigned short length, ff_read=1;
-
- for (;;) {
- marker = php_next_marker(stream, marker, 1, ff_read TSRMLS_CC);
- ff_read = 0;
- switch (marker) {
- case M_SOF0:
- case M_SOF1:
- case M_SOF2:
- case M_SOF3:
- case M_SOF5:
- case M_SOF6:
- case M_SOF7:
- case M_SOF9:
- case M_SOF10:
- case M_SOF11:
- case M_SOF13:
- case M_SOF14:
- case M_SOF15:
- if (result == NULL) {
- /* handle SOFn block */
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- if ( !result)
- return NULL;
- length = php_read2(stream TSRMLS_CC);
- result->bits = php_stream_getc(stream);
- result->height = php_read2(stream TSRMLS_CC);
- result->width = php_read2(stream TSRMLS_CC);
- result->channels = php_stream_getc(stream);
- if (!info || length<8) /* if we don't want an extanded info -> return */
- return result;
- php_stream_seek(stream, length-8, SEEK_CUR);
- } else {
- php_skip_variable(stream TSRMLS_CC);
- }
- break;
-
- case M_APP0:
- case M_APP1:
- case M_APP2:
- case M_APP3:
- case M_APP4:
- case M_APP5:
- case M_APP6:
- case M_APP7:
- case M_APP8:
- case M_APP9:
- case M_APP10:
- case M_APP11:
- case M_APP12:
- case M_APP13:
- case M_APP14:
- case M_APP15:
- if (info) {
- php_read_APP(stream, marker, info TSRMLS_CC); /* read all the app markes... */
- } else {
- php_skip_variable(stream TSRMLS_CC);
- }
- break;
-
- case M_SOS:
- case M_EOI:
- return result; /* we're about to hit image data, or are at EOF. stop processing. */
- break;
-
- default:
- php_skip_variable(stream TSRMLS_CC); /* anything else isn't interesting */
- break;
- }
- }
-
- return result; /* perhaps image broken -> no info but size */
-}
-/* }}} */
-
-/* {{{ jpeg2000 constants
- See ext/exif for more */
-#define JC_SOC 0x4F /* Start of codestream */
-#define JC_SIZ 0x51 /* Image and tile size */
-/* }}} */
-
-/* {{{ php_read4
- */
-static unsigned int php_read4(php_stream * stream TSRMLS_DC)
-{
- unsigned char a[4];
-
- /* just return 0 if we hit the end-of-file */
- if((php_stream_read(stream, a, sizeof(a))) <= 0) return 0;
-
- return (((unsigned int)a[0]) << 24)
- + (((unsigned int)a[1]) << 16)
- + (((unsigned int)a[2]) << 8)
- + (((unsigned int)a[3]));
-}
-/* }}} */
-
-/* {{{ php_handle_tiff
- main loop to parse TIFF structure */
-static struct gfxinfo *php_handle_jpc(php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned int marker, dummy;
- unsigned short length, ff_read = 1;
-
- marker = php_next_marker(stream, 0, 0, ff_read TSRMLS_CC);
- ff_read = 0;
- if ( marker == JC_SIZ)
- {
- length = php_read2(stream TSRMLS_CC); /* Lsiz: length of segment */
- if ( length<42 || length>49191) /* read the spec */
- return NULL;
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- if ( !result)
- return NULL;
- dummy = php_read2(stream TSRMLS_CC); /* Rsiz: capabilities */
- result->height = php_read4(stream TSRMLS_CC); /* Xsiz */
- result->width = php_read4(stream TSRMLS_CC); /* Ysiz */
- dummy = php_read4(stream TSRMLS_CC); /* X0siz */
- dummy = php_read4(stream TSRMLS_CC); /* Y0siz */
- dummy = php_read4(stream TSRMLS_CC); /* XTsiz */
- dummy = php_read4(stream TSRMLS_CC); /* YTsiz */
- dummy = php_read4(stream TSRMLS_CC); /* XT0siz */
- dummy = php_read4(stream TSRMLS_CC); /* YT0siz */
- result->bits = php_read2(stream TSRMLS_CC); /* Csiz: precision in bitss */
- result->channels = 0; /* don't know yet */
- return result;
- }
- return result;
-}
-/* }}} */
-
-/* {{{ tiff constants
- */
-PHPAPI const int php_tiff_bytes_per_format[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8};
-
-/* uncompressed only */
-#define TAG_IMAGEWIDTH 0x0100
-#define TAG_IMAGEHEIGHT 0x0101
-/* compressed images only */
-#define TAG_COMP_IMAGEWIDTH 0xA002
-#define TAG_COMP_IMAGEHEIGHT 0xA003
-
-#define TAG_FMT_BYTE 1
-#define TAG_FMT_STRING 2
-#define TAG_FMT_USHORT 3
-#define TAG_FMT_ULONG 4
-#define TAG_FMT_URATIONAL 5
-#define TAG_FMT_SBYTE 6
-#define TAG_FMT_UNDEFINED 7
-#define TAG_FMT_SSHORT 8
-#define TAG_FMT_SLONG 9
-#define TAG_FMT_SRATIONAL 10
-#define TAG_FMT_SINGLE 11
-#define TAG_FMT_DOUBLE 12
-
-typedef unsigned char uchar;
-/* }}} */
-
-/* {{{ php_ifd_get16u
- * Convert a 16 bit unsigned value from file's native byte order */
-static int php_ifd_get16u(void *Short, int motorola_intel)
-{
- if (motorola_intel) {
- return (((uchar *)Short)[0] << 8) | ((uchar *)Short)[1];
- } else {
- return (((uchar *)Short)[1] << 8) | ((uchar *)Short)[0];
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get16s
- * Convert a 16 bit signed value from file's native byte order */
-static signed short php_ifd_get16s(void *Short, int motorola_intel)
-{
- return (signed short)php_ifd_get16u(Short, motorola_intel);
-}
-/* }}} */
-
-/* {{{ php_ifd_get32s
- * Convert a 32 bit signed value from file's native byte order */
-static int php_ifd_get32s(void *Long, int motorola_intel)
-{
- if (motorola_intel) {
- return ((( char *)Long)[0] << 24) | (((uchar *)Long)[1] << 16)
- | (((uchar *)Long)[2] << 8 ) | (((uchar *)Long)[3] << 0 );
- } else {
- return ((( char *)Long)[3] << 24) | (((uchar *)Long)[2] << 16)
- | (((uchar *)Long)[1] << 8 ) | (((uchar *)Long)[0] << 0 );
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get32u
- * Convert a 32 bit unsigned value from file's native byte order */
-static unsigned php_ifd_get32u(void *Long, int motorola_intel)
-{
- return (unsigned)php_ifd_get32s(Long, motorola_intel) & 0xffffffff;
-}
-/* }}} */
-
-/* {{{ php_handle_tiff
- main loop to parse TIFF structure */
-static struct gfxinfo *php_handle_tiff (php_stream * stream, pval *info, int motorola_intel TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- int i, num_entries;
- unsigned char *dir_entry;
- size_t ifd_size, dir_size, entry_value, width=0, height=0, ifd_addr;
- int entry_tag , entry_type;
- char *ifd_data, ifd_ptr[4];
-
- php_stream_read(stream, ifd_ptr, 4);
- ifd_addr = php_ifd_get32u(ifd_ptr, motorola_intel);
- php_stream_seek(stream, ifd_addr-8, SEEK_CUR);
- ifd_size = 2;
- ifd_data = emalloc(ifd_size);
- php_stream_read(stream, ifd_data, 2);
- num_entries = php_ifd_get16u(ifd_data, motorola_intel);
- dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/;
- ifd_size = dir_size;
- ifd_data = erealloc(ifd_data,ifd_size);
- php_stream_read(stream, ifd_data+2, dir_size-2);
- /* now we have the directory we can look how long it should be */
- ifd_size = dir_size;
- for(i=0;i<num_entries;i++) {
- dir_entry = ifd_data+2+i*12;
- entry_tag = php_ifd_get16u(dir_entry+0, motorola_intel);
- entry_type = php_ifd_get16u(dir_entry+2, motorola_intel);
- switch(entry_type) {
- case TAG_FMT_BYTE:
- case TAG_FMT_SBYTE:
- entry_value = (size_t)(dir_entry[8]);
- break;
- case TAG_FMT_USHORT:
- entry_value = php_ifd_get16u(dir_entry+8, motorola_intel);
- break;
- case TAG_FMT_SSHORT:
- entry_value = php_ifd_get16s(dir_entry+8, motorola_intel);
- break;
- case TAG_FMT_ULONG:
- entry_value = php_ifd_get32u(dir_entry+8, motorola_intel);
- break;
- case TAG_FMT_SLONG:
- entry_value = php_ifd_get32s(dir_entry+8, motorola_intel);
- break;
- default:
- continue;
- }
- switch(entry_tag) {
- case TAG_IMAGEWIDTH:
- case TAG_COMP_IMAGEWIDTH:
- width = entry_value;
- break;
- case TAG_IMAGEHEIGHT:
- case TAG_COMP_IMAGEHEIGHT:
- height = entry_value;
- break;
- }
- }
- efree(ifd_data);
- if ( width && height) {
- /* not the same when in for-loop */
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- result->height = height;
- result->width = width;
- return result;
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_imagetype
- detect filetype from first bytes */
-PHPAPI int php_getimagetype(php_stream * stream, char *filetype TSRMLS_DC)
-{
- char tmp[8];
-
- if ( !filetype) filetype = tmp;
- if((php_stream_read(stream, filetype, 3)) <= 0) {
- php_error(E_WARNING, "getimagesize: Read error!");
- return IMAGE_FILETYPE_UNKNOWN;
- }
-
- if (!memcmp(filetype, php_sig_gif, 3)) {
- return IMAGE_FILETYPE_GIF;
- } else if (!memcmp(filetype, php_sig_jpg, 3)) {
- return IMAGE_FILETYPE_JPEG;
- } else if (!memcmp(filetype, php_sig_png, 3)) {
- php_stream_read(stream, filetype+3, 5);
- if (!memcmp(filetype, php_sig_png, 8)) {
- return IMAGE_FILETYPE_PNG;
- } else {
- php_error(E_WARNING, "PNG file corrupted by ASCII conversion");
- return IMAGE_FILETYPE_UNKNOWN;
- }
- } else if (!memcmp(filetype, php_sig_swf, 3)) {
- return IMAGE_FILETYPE_SWF;
-#if HAVE_ZLIB
- } else if (!memcmp(filetype, php_sig_swc, 3)) {
- return IMAGE_FILETYPE_SWC;
-#endif
- } else if (!memcmp(filetype, php_sig_psd, 3)) {
- return IMAGE_FILETYPE_PSD;
- } else if (!memcmp(filetype, php_sig_bmp, 2)) {
- return IMAGE_FILETYPE_BMP;
- } else if (!memcmp(filetype, php_sig_jpc, 3)) {
- return IMAGE_FILETYPE_JPC;
- } else {
- php_stream_read(stream, filetype+3, 1);
- if (!memcmp(filetype, php_sig_tif_ii, 4)) {
- return IMAGE_FILETYPE_TIFF_II;
- } else
- if (!memcmp(filetype, php_sig_tif_mm, 4)) {
- return IMAGE_FILETYPE_TIFF_MM;
- }
- }
-
- return IMAGE_FILETYPE_UNKNOWN;
-}
-/* }}} */
-
-/* {{{ proto array getimagesize(string imagefile [, array info])
- Get the size of an image as 4-element array */
-PHP_FUNCTION(getimagesize)
-{
- zval **arg1, **info = NULL;
- int itype = 0;
- char temp[64];
- struct gfxinfo *result = NULL;
- php_stream * stream = NULL;
-
- switch(ZEND_NUM_ARGS()) {
-
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &info) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- zval_dtor(*info);
-
- if (array_init(*info) == FAILURE) {
- return;
- }
-
- convert_to_string_ex(arg1);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb", REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL);
-
- if (!stream) {
- RETURN_FALSE;
- }
-
- itype = php_getimagetype(stream, NULL TSRMLS_CC);
- switch( itype) {
- case IMAGE_FILETYPE_GIF:
- result = php_handle_gif (stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_JPEG:
- if (info) {
- result = php_handle_jpeg(stream, *info TSRMLS_CC);
- } else {
- result = php_handle_jpeg(stream, NULL TSRMLS_CC);
- }
- break;
- case IMAGE_FILETYPE_PNG:
- result = php_handle_png(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_SWF:
- result = php_handle_swf(stream TSRMLS_CC);
- break;
-#if HAVE_ZLIB
- case IMAGE_FILETYPE_SWC:
- result = php_handle_swc(stream TSRMLS_CC);
- break;
-#endif
- case IMAGE_FILETYPE_PSD:
- result = php_handle_psd(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_BMP:
- result = php_handle_bmp(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_TIFF_II:
- result = php_handle_tiff(stream, NULL, 0 TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_TIFF_MM:
- result = php_handle_tiff(stream, NULL, 1 TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_JPC:
- result = php_handle_jpc(stream TSRMLS_CC);
- break;
- default:
- case IMAGE_FILETYPE_UNKNOWN:
- break;
- }
-
- php_stream_close(stream);
-
- if (result) {
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- efree(result);
- return;
- }
- add_index_long(return_value, 0, result->width);
- add_index_long(return_value, 1, result->height);
- add_index_long(return_value, 2, itype);
- sprintf(temp, "width=\"%d\" height=\"%d\"", result->width, result->height); /* safe */
- add_index_string(return_value, 3, temp, 1);
-
- if (result->bits != 0) {
- add_assoc_long(return_value, "bits", result->bits);
- }
- if (result->channels != 0) {
- add_assoc_long(return_value, "channels", result->channels);
- }
- efree(result);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c
deleted file mode 100644
index ee49154c17..0000000000
--- a/ext/standard/incomplete_class.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#include "php.h"
-#include "basic_functions.h"
-#include "php_incomplete_class.h"
-
-#define INCOMPLETE_CLASS_MSG \
- "The script tried to execute a method or " \
- "access a property of an incomplete object. " \
- "Please ensure that the class definition <b>%s</b> of the object " \
- "you are trying to operate on was loaded _before_ " \
- "the session was started"
-
-#define INCOMPLETE_CLASS "__PHP_Incomplete_Class"
-#define MAGIC_MEMBER "__PHP_Incomplete_Class_Name"
-
-/* {{{ incomplete_class_message
- */
-static void incomplete_class_message(zend_property_reference *ref)
-{
- char buf[1024];
- char *class_name;
-
- class_name = php_lookup_class_name(ref->object, NULL, 0);
-
- if (!class_name)
- class_name = estrdup("unknown");
-
- snprintf(buf, 1023, INCOMPLETE_CLASS_MSG, class_name);
-
- efree(class_name);
-
- php_error(E_ERROR, "%s", buf);
-}
-/* }}} */
-
-/* {{{ incomplete_class_call_func
- */
-static void incomplete_class_call_func(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- incomplete_class_message(property_reference);
-}
-/* }}} */
-
-/* {{{ incomplete_class_set_property
- */
-static int incomplete_class_set_property(zend_property_reference *property_reference, zval *value)
-{
- incomplete_class_message(property_reference);
-
- /* does not reach this point */
- return (0);
-}
-/* }}} */
-
-/* {{{ incomplete_class_get_property
- */
-static zval incomplete_class_get_property(zend_property_reference *property_reference)
-{
- zval foo;
-
- incomplete_class_message(property_reference);
-
- /* does not reach this point */
- memset(&foo, 0, sizeof(zval)); /* shut warnings up */
- return (foo);
-}
-/* }}} */
-
-/* {{{ php_create_incomplete_class
- */
-zend_class_entry *php_create_incomplete_class(TSRMLS_D)
-{
- zend_class_entry incomplete_class;
-
- INIT_OVERLOADED_CLASS_ENTRY(incomplete_class, INCOMPLETE_CLASS, NULL,
- incomplete_class_call_func,
- incomplete_class_get_property,
- incomplete_class_set_property);
-
- return zend_register_internal_class(&incomplete_class TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_lookup_class_name
- */
-char *php_lookup_class_name(zval *object, size_t *nlen, zend_bool del)
-{
- zval **val;
- char *retval = NULL;
- HashTable *object_properties;
-
- object_properties = Z_OBJPROP_P(object);
-
- if (zend_hash_find(object_properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), (void **) &val) == SUCCESS) {
- retval = estrndup(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
-
- if (nlen)
- *nlen = Z_STRLEN_PP(val);
-
- if (del)
- zend_hash_del(object_properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER));
- }
-
- return (retval);
-}
-/* }}} */
-
-/* {{{ php_store_class_name
- */
-void php_store_class_name(zval *object, const char *name, size_t len)
-{
- zval *val;
-
- MAKE_STD_ZVAL(val);
-
- Z_TYPE_P(val) = IS_STRING;
- Z_STRVAL_P(val) = estrndup(name, len);
- Z_STRLEN_P(val) = len;
-
- zend_hash_update(Z_OBJPROP_P(object), MAGIC_MEMBER, sizeof(MAGIC_MEMBER), &val, sizeof(val), NULL);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/info.c b/ext/standard/info.c
deleted file mode 100644
index 5cea723348..0000000000
--- a/ext/standard/info.c
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "ext/standard/head.h"
-#include "info.h"
-#include "credits.h"
-#include "SAPI.h"
-#include <time.h>
-#include "php_main.h"
-#if !defined(PHP_WIN32)
-#include "build-defs.h"
-#endif
-#include "zend_globals.h" /* needs ELS */
-#include "zend_extensions.h"
-#include "zend_highlight.h"
-#ifdef HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-
-#define SECTION(name) PUTS("<h2 align=\"center\">" name "</h2>\n")
-
-PHPAPI extern char *php_ini_opened_path;
-
-/* {{{ _display_module_info
- */
-static int _display_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
-{
- int show_info_func = *((int *) arg);
-
- if (show_info_func && module->info_func) {
- php_printf("<h2 align=\"center\"><a name=\"module_%s\">%s</a></h2>\n", module->name, module->name);
- module->info_func(module TSRMLS_CC);
- } else if (!show_info_func && !module->info_func) {
- php_printf("<tr valign=\"baseline\" bgcolor=\"" PHP_CONTENTS_COLOR "\">");
- php_printf("<td>");
- php_printf("%s", module->name);
- php_printf("</td></tr>\n");
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_print_gpcse_array
- */
-static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC)
-{
- zval **data, **tmp, tmp2;
- char *string_key;
- uint string_len;
- ulong num_key;
-
- if (zend_hash_find(&EG(symbol_table), name, name_length+1, (void **) &data)!=FAILURE
- && (Z_TYPE_PP(data)==IS_ARRAY)) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(data));
- while (zend_hash_get_current_data(Z_ARRVAL_PP(data), (void **) &tmp) == SUCCESS) {
- PUTS("<tr valign=\"baseline\" bgcolor=\"" PHP_CONTENTS_COLOR "\">");
- PUTS("<td bgcolor=\"" PHP_ENTRY_NAME_COLOR "\"><b>");
- PUTS(name);
- PUTS("[\"");
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(data), &string_key, &string_len, &num_key, 0, NULL)) {
- case HASH_KEY_IS_STRING:
- zend_html_puts(string_key, string_len-1);
- break;
- case HASH_KEY_IS_LONG:
- php_printf("%ld", num_key);
- break;
- }
- PUTS("\"]</b></td><td>");
- if (Z_TYPE_PP(tmp) == IS_ARRAY) {
- PUTS("<pre>");
- zend_print_zval_r(*tmp, 0);
- PUTS("</pre>");
- } else if (Z_TYPE_PP(tmp) != IS_STRING) {
- tmp2 = **tmp;
- zval_copy_ctor(&tmp2);
- convert_to_string(&tmp2);
- zend_html_puts(Z_STRVAL(tmp2), Z_STRLEN(tmp2));
- zval_dtor(&tmp2);
- } else {
- zend_html_puts(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- }
- PUTS("&nbsp;</td></tr>\n");
- zend_hash_move_forward(Z_ARRVAL_PP(data));
- }
- }
-}
-/* }}} */
-
-/* {{{ php_info_print_style
- */
-void php_info_print_style(void)
-{
- php_printf("<style type=\"text/css\"><!--\n");
- php_printf("a { text-decoration: none; }\n");
- php_printf("a:hover { text-decoration: underline; }\n");
- php_printf("h1 { font-family: arial, helvetica, sans-serif; font-size: 18pt; font-weight: bold;}\n");
- php_printf("h2 { font-family: arial, helvetica, sans-serif; font-size: 14pt; font-weight: bold;}\n");
- php_printf("body, td { font-family: arial, helvetica, sans-serif; font-size: 10pt; }\n");
- php_printf("th { font-family: arial, helvetica, sans-serif; font-size: 11pt; font-weight: bold; }\n");
- php_printf("//--></style>\n");
-}
-/* }}} */
-
-/* {{{ php_get_uname
- */
-PHPAPI char *php_get_uname(char mode)
-{
- char *php_uname;
- char tmp_uname[256];
-#ifdef PHP_WIN32
- DWORD dwBuild=0;
- DWORD dwVersion = GetVersion();
- DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
- DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
-
- if (mode == 's') {
- if (dwVersion < 0x80000000) {
- php_uname = "Windows NT";
- } else {
- php_uname = "Windows 9x";
- }
- } else if (mode == 'r') {
- snprintf(tmp_uname, sizeof(tmp_uname), "%d.%d",
- dwWindowsMajorVersion, dwWindowsMinorVersion);
- php_uname = tmp_uname;
- } else if (mode == 'n') {
- // XXX HOW TO GET THIS ON WINDOWS?
- php_uname = "localhost";
- } else if (mode == 'v') {
- dwBuild = (DWORD)(HIWORD(dwVersion));
- snprintf(tmp_uname, sizeof(tmp_uname), "build %d", dwBuild);
- php_uname = tmp_uname;
- } else if (mode == 'm') {
- // XXX HOW TO GET THIS ON WINDOWS?
- php_uname = "i386";
- } else { // assume mode == 'a'
- /* Get build numbers for Windows NT or Win95 */
- if (dwVersion < 0x80000000){
- dwBuild = (DWORD)(HIWORD(dwVersion));
- snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d build %d",
- "Windows NT", "localhost",
- dwWindowsMajorVersion, dwWindowsMinorVersion, dwBuild);
- } else {
- snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d",
- "Windows 9x", "localhost",
- dwWindowsMajorVersion, dwWindowsMinorVersion);
- }
- php_uname = tmp_uname;
- }
-#else
-#ifdef HAVE_SYS_UTSNAME_H
- struct utsname buf;
- if (uname((struct utsname *)&buf) == -1) {
- php_uname = PHP_UNAME;
- } else {
- if (mode == 's') {
- php_uname = buf.sysname;
- } else if (mode == 'r') {
- php_uname = buf.release;
- } else if (mode == 'n') {
- php_uname = buf.nodename;
- } else if (mode == 'v') {
- php_uname = buf.version;
- } else if (mode == 'm') {
- php_uname = buf.machine;
- } else { // assume mode == 'a'
- snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %s %s %s",
- buf.sysname, buf.nodename, buf.release, buf.version,
- buf.machine);
- php_uname = tmp_uname;
- }
- }
-#else
- php_uname = PHP_UNAME;
-#endif
-#endif
- return estrdup(php_uname);
-}
-/* }}} */
-
-/* {{{ php_print_info
- */
-PHPAPI void php_print_info(int flag TSRMLS_DC)
-{
- char **env, *tmp1, *tmp2;
- char *php_uname;
- int expose_php = INI_INT("expose_php");
- time_t the_time;
- struct tm *ta, tmbuf;
- char php_api_no[9];
- char mod_api_no[9];
- char ext_api_no[9];
-
- the_time = time(NULL);
- ta = php_localtime_r(&the_time, &tmbuf);
-
- snprintf (php_api_no, 9, "%d", PHP_API_VERSION);
- snprintf (mod_api_no, 9, "%d", ZEND_MODULE_API_NO);
- snprintf (ext_api_no, 9, "%d", ZEND_EXTENSION_API_NO);
-
- PUTS("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html>\n");
- PUTS("<head>");
- php_info_print_style();
- PUTS("<title>phpinfo()</title></head><body>");
-
- if (flag & PHP_INFO_GENERAL) {
- char *zend_version = get_zend_version();
-
- php_uname = php_get_uname('a');
-
- php_info_print_box_start(1);
- if (expose_php) {
- PUTS("<a href=\"http://www.php.net/\"><img src=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- if ((ta->tm_mon==3) && (ta->tm_mday==1)) {
- PUTS("?="PHP_EGG_LOGO_GUID"\" border=0 align=\"right\" alt=\"Thies!\"></a>");
- } else {
- PUTS("?="PHP_LOGO_GUID"\" border=0 align=\"right\" alt=\"PHP Logo\"></a>");
- }
- }
- php_printf("<h1>PHP Version %s</h1>\n", PHP_VERSION);
- php_info_print_box_end();
- php_info_print_table_start();
- php_info_print_table_row(2, "System", php_uname );
- php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__ );
-#ifdef CONFIGURE_COMMAND
- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND );
-#endif
- if (sapi_module.pretty_name) {
- php_info_print_table_row(2, "Server API", sapi_module.pretty_name );
- }
-
-#ifdef VIRTUAL_DIR
- php_info_print_table_row(2, "Virtual Directory Support", "enabled" );
-#else
- php_info_print_table_row(2, "Virtual Directory Support", "disabled" );
-#endif
-
- php_info_print_table_row(2, "Configuration File (php.ini) Path", php_ini_opened_path?php_ini_opened_path:PHP_CONFIG_FILE_PATH);
-
- php_info_print_table_row(2, "PHP API No.", php_api_no);
- php_info_print_table_row(2, "PHP Extensions API No.", mod_api_no);
- php_info_print_table_row(2, "Zend Extensions API No.", ext_api_no);
-
-#if ZEND_DEBUG
- php_info_print_table_row(2, "Debug Build", "yes" );
-#else
- php_info_print_table_row(2, "Debug Build", "no" );
-#endif
-
-#ifdef ZTS
- php_info_print_table_row(2, "Thread Safety", "enabled" );
-#else
- php_info_print_table_row(2, "Thread Safety", "disabled" );
-#endif
-
- php_info_print_table_row(2, "PHP Streams", "enabled");
-
- php_info_print_table_end();
-
- /* Zend Engine */
- php_info_print_box_start(0);
- if (expose_php) {
- PUTS("<a href=\"http://www.zend.com/\"><img src=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- PUTS("?="ZEND_LOGO_GUID"\" border=\"0\" align=\"right\" alt=\"Zend logo\"></a>\n");
- }
- php_printf("This program makes use of the Zend Scripting Language Engine:<br />");
- zend_html_puts(zend_version, strlen(zend_version));
- php_info_print_box_end();
- efree(php_uname);
- }
-
- if ((flag & PHP_INFO_CREDITS) && expose_php) {
- php_info_print_hr();
- PUTS("<h1 align=\"center\"><a href=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- PUTS("?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000\">");
- PUTS("PHP 4 Credits");
- PUTS("</a></h1>\n");
- }
-
- zend_ini_sort_entries(TSRMLS_C);
-
- if (flag & PHP_INFO_CONFIGURATION) {
- php_info_print_hr();
- PUTS("<h1 align=\"center\">Configuration</h1>\n");
- SECTION("PHP Core\n");
- display_ini_entries(NULL);
- }
-
- if (flag & PHP_INFO_MODULES) {
- int show_info_func;
-
- show_info_func = 1;
- zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t) _display_module_info, &show_info_func TSRMLS_CC);
-
- SECTION("Additional Modules");
- php_info_print_table_start();
- show_info_func = 0;
- zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t) _display_module_info, &show_info_func TSRMLS_CC);
- php_info_print_table_end();
- }
-
- if (flag & PHP_INFO_ENVIRONMENT) {
- SECTION("Environment");
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- for (env=environ; env!=NULL && *env !=NULL; env++) {
- tmp1 = estrdup(*env);
- if (!(tmp2=strchr(tmp1,'='))) { /* malformed entry? */
- efree(tmp1);
- continue;
- }
- *tmp2 = 0;
- tmp2++;
- php_info_print_table_row(2, tmp1, tmp2);
- efree(tmp1);
- }
- php_info_print_table_end();
- }
-
- if (flag & PHP_INFO_VARIABLES) {
- pval **data;
-
- SECTION("PHP Variables");
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- if (zend_hash_find(&EG(symbol_table), "PHP_SELF", sizeof("PHP_SELF"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_SELF", Z_STRVAL_PP(data));
- }
- if (zend_hash_find(&EG(symbol_table), "PHP_AUTH_TYPE", sizeof("PHP_AUTH_TYPE"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_AUTH_TYPE", Z_STRVAL_PP(data));
- }
- if (zend_hash_find(&EG(symbol_table), "PHP_AUTH_USER", sizeof("PHP_AUTH_USER"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_AUTH_USER", Z_STRVAL_PP(data));
- }
- if (zend_hash_find(&EG(symbol_table), "PHP_AUTH_PW", sizeof("PHP_AUTH_PW"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_AUTH_PW", Z_STRVAL_PP(data));
- }
- php_print_gpcse_array("_FORM", sizeof("_FORM")-1 TSRMLS_CC);
- php_print_gpcse_array("_GET", sizeof("_GET")-1 TSRMLS_CC);
- php_print_gpcse_array("_POST", sizeof("_POST")-1 TSRMLS_CC);
- php_print_gpcse_array("_FILES", sizeof("_FILES")-1 TSRMLS_CC);
- php_print_gpcse_array("_COOKIE", sizeof("_COOKIE")-1 TSRMLS_CC);
- php_print_gpcse_array("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
- php_print_gpcse_array("_ENV", sizeof("_ENV")-1 TSRMLS_CC);
- php_info_print_table_end();
- }
-
- if (flag & PHP_INFO_LICENSE) {
- SECTION("PHP License");
- php_info_print_box_start(0);
- PUTS("<p>\n");
- PUTS("This program is free software; you can redistribute it and/or modify ");
- PUTS("it under the terms of the PHP License as published by the PHP Group ");
- PUTS("and included in the distribution in the file: LICENSE\n");
- PUTS("</p>\n");
- PUTS("<p>");
- PUTS("This program is distributed in the hope that it will be useful, ");
- PUTS("but WITHOUT ANY WARRANTY; without even the implied warranty of ");
- PUTS("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
- PUTS("</p>\n");
- PUTS("<p>");
- PUTS("If you did not receive a copy of the PHP license, or have any questions about ");
- PUTS("PHP licensing, please contact license@php.net.\n");
- PUTS("</p>\n");
- php_info_print_box_end();
- }
-
- PUTS("</body></html>");
-}
-/* }}} */
-
-
-PHPAPI void php_info_print_table_start()
-{
- php_printf("<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"600\" bgcolor=\"#000000\" align=\"center\">\n");
-}
-
-PHPAPI void php_info_print_table_end()
-{
- php_printf("</table><br />\n");
-
-}
-
-PHPAPI void php_info_print_box_start(int flag)
-{
- php_info_print_table_start();
- if (flag) {
- php_printf("<tr valign=\"middle\" bgcolor=\"" PHP_HEADER_COLOR "\"><td align=\"left\">\n");
- } else {
- php_printf("<tr valign=\"top\" bgcolor=\"" PHP_CONTENTS_COLOR "\"><td align=\"left\">\n");
- }
-}
-
-PHPAPI void php_info_print_box_end()
-{
- php_printf("</td></tr>\n");
- php_info_print_table_end();
-}
-
-PHPAPI void php_info_print_hr()
-{
- php_printf("<hr noshade size=\"1\" width=\"600\">\n");
-}
-
-PHPAPI void php_info_print_table_colspan_header(int num_cols, char *header)
-{
- php_printf("<tr bgcolor=\"" PHP_HEADER_COLOR "\"><th colspan=\"%d\">%s</th></tr>\n", num_cols, header );
-}
-
-/* {{{ php_info_print_table_header
- */
-PHPAPI void php_info_print_table_header(int num_cols, ...)
-{
- int i;
- va_list row_elements;
- char *row_element;
-
- va_start(row_elements, num_cols);
-
- php_printf("<tr valign=\"middle\" bgcolor=\"" PHP_HEADER_COLOR "\">");
- for (i=0; i<num_cols; i++) {
- row_element = va_arg(row_elements, char *);
- if (!row_element || !*row_element) {
- row_element = "&nbsp;";
- }
- php_printf("<th>%s</th>", row_element);
- }
- php_printf("</tr>\n");
-
- va_end(row_elements);
-}
-/* }}} */
-
-/* {{{ php_info_print_table_row
- */
-PHPAPI void php_info_print_table_row(int num_cols, ...)
-{
- int i;
- va_list row_elements;
- char *row_element;
- TSRMLS_FETCH();
-
- va_start(row_elements, num_cols);
-
- php_printf("<tr valign=\"baseline\" bgcolor=\"" PHP_CONTENTS_COLOR "\">");
- for (i=0; i<num_cols; i++) {
- php_printf("<td %s>%s",
- (i==0?"bgcolor=\"" PHP_ENTRY_NAME_COLOR "\" ":"align=\"left\""),
- (i==0?"<b>":""));
-
- row_element = va_arg(row_elements, char *);
- if (!row_element || !*row_element) {
- php_printf("&nbsp;");
- } else {
- zend_html_puts(row_element, strlen(row_element));
- }
-
- php_printf("%s</td>", (i==0?"</b>":""));
- }
- php_printf("</tr>\n");
-
- va_end(row_elements);
-}
-/* }}} */
-
-/* {{{ register_phpinfo_constants
- */
-void register_phpinfo_constants(INIT_FUNC_ARGS)
-{
- REGISTER_LONG_CONSTANT("INFO_GENERAL", PHP_INFO_GENERAL, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_CREDITS", PHP_INFO_CREDITS, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_CONFIGURATION", PHP_INFO_CONFIGURATION, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_MODULES", PHP_INFO_MODULES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_ENVIRONMENT", PHP_INFO_ENVIRONMENT, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_VARIABLES", PHP_INFO_VARIABLES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_LICENSE", PHP_INFO_LICENSE, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_ALL", PHP_INFO_ALL, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_GROUP", PHP_CREDITS_GROUP, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_GENERAL", PHP_CREDITS_GENERAL, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_SAPI", PHP_CREDITS_SAPI, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_MODULES", PHP_CREDITS_MODULES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_DOCS", PHP_CREDITS_DOCS, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_FULLPAGE", PHP_CREDITS_FULLPAGE, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_QA", PHP_CREDITS_QA, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_ALL", PHP_CREDITS_ALL, CONST_PERSISTENT|CONST_CS);
-}
-/* }}} */
-
-/* {{{ proto void phpinfo([int what])
- Output a page of useful information about PHP and the current request */
-PHP_FUNCTION(phpinfo)
-{
- int argc = ZEND_NUM_ARGS();
- long flag;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|l", &flag) == FAILURE) {
- return;
- }
-
- if(!argc) {
- flag = PHP_INFO_ALL;
- }
-
- /* Andale! Andale! Yee-Hah! */
- php_start_ob_buffer(NULL, 4096, 0 TSRMLS_CC);
- php_print_info(flag TSRMLS_CC);
- php_end_ob_buffer(1, 0 TSRMLS_CC);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string phpversion([string extension])
- Return the current PHP version */
-PHP_FUNCTION(phpversion)
-{
- zval **arg;
- int argc = ZEND_NUM_ARGS();
-
- if (argc == 0) {
- RETURN_STRING(PHP_VERSION, 1);
- } else if (argc == 1 && zend_get_parameters_ex(1, &arg) == SUCCESS) {
- char *version;
- convert_to_string_ex(arg);
- version = zend_get_module_version(Z_STRVAL_PP(arg));
- if (version == NULL) {
- RETURN_FALSE;
- }
- RETURN_STRING(version, 1);
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void phpcredits([int flag])
- Prints the list of people who've contributed to the PHP project */
-PHP_FUNCTION(phpcredits)
-{
- int argc = ZEND_NUM_ARGS();
- long flag;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|l", &flag) == FAILURE) {
- return;
- }
-
- if(!argc) {
- flag = PHP_CREDITS_ALL;
- }
-
- php_print_credits(flag);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string php_logo_guid(void)
- Return the special ID used to request the PHP logo in phpinfo screens*/
-PHP_FUNCTION(php_logo_guid)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRINGL(PHP_LOGO_GUID, sizeof(PHP_LOGO_GUID)-1, 1);
-}
-/* }}} */
-
-/* {{{ proto string php_egg_logo_guid(void)
- Return the special ID used to request the PHP logo in phpinfo screens*/
-PHP_FUNCTION(php_egg_logo_guid)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRINGL(PHP_EGG_LOGO_GUID, sizeof(PHP_EGG_LOGO_GUID)-1, 1);
-}
-/* }}} */
-
-/* {{{ proto string zend_logo_guid(void)
- Return the special ID used to request the Zend logo in phpinfo screens*/
-PHP_FUNCTION(zend_logo_guid)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRINGL(ZEND_LOGO_GUID, sizeof(ZEND_LOGO_GUID)-1, 1);
-}
-/* }}} */
-
-/* {{{ proto string php_sapi_name(void)
- Return the current SAPI module name */
-PHP_FUNCTION(php_sapi_name)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (sapi_module.name) {
- RETURN_STRING(sapi_module.name, 1);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string php_uname(void)
- Return information about the system PHP was built on */
-PHP_FUNCTION(php_uname)
-{
- char *mode = "a";
- int modelen;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &mode, &modelen) == FAILURE) {
- return;
- }
- RETURN_STRING(php_get_uname(*mode), 0);
-}
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/info.h b/ext/standard/info.h
deleted file mode 100644
index 7e7c7ebf4b..0000000000
--- a/ext/standard/info.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef INFO_H
-#define INFO_H
-
-#define PHP_ENTRY_NAME_COLOR "#ccccff"
-#define PHP_CONTENTS_COLOR "#cccccc"
-#define PHP_HEADER_COLOR "#9999cc"
-
-#define PHP_INFO_GENERAL (1<<0)
-#define PHP_INFO_CREDITS (1<<1)
-#define PHP_INFO_CONFIGURATION (1<<2)
-#define PHP_INFO_MODULES (1<<3)
-#define PHP_INFO_ENVIRONMENT (1<<4)
-#define PHP_INFO_VARIABLES (1<<5)
-#define PHP_INFO_LICENSE (1<<6)
-#define PHP_INFO_ALL 0xFFFFFFFF
-
-#ifndef HAVE_CREDITS_DEFS
-#define HAVE_CREDITS_DEFS
-
-#define PHP_CREDITS_GROUP (1<<0)
-#define PHP_CREDITS_GENERAL (1<<1)
-#define PHP_CREDITS_SAPI (1<<2)
-#define PHP_CREDITS_MODULES (1<<3)
-#define PHP_CREDITS_DOCS (1<<4)
-#define PHP_CREDITS_FULLPAGE (1<<5)
-#define PHP_CREDITS_QA (1<<6)
-#define PHP_CREDITS_WEB (1<<7)
-#define PHP_CREDITS_ALL 0xFFFFFFFF
-
-#endif /* HAVE_CREDITS_DEFS */
-
-#define PHP_LOGO_GUID "PHPE9568F34-D428-11d2-A769-00AA001ACF42"
-#define PHP_EGG_LOGO_GUID "PHPE9568F36-D428-11d2-A769-00AA001ACF42"
-#define ZEND_LOGO_GUID "PHPE9568F35-D428-11d2-A769-00AA001ACF42"
-#define PHP_CREDITS_GUID "PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"
-
-PHP_FUNCTION(phpversion);
-PHP_FUNCTION(phpinfo);
-PHP_FUNCTION(phpcredits);
-PHP_FUNCTION(php_logo_guid);
-PHP_FUNCTION(zend_logo_guid);
-PHP_FUNCTION(php_egg_logo_guid);
-PHP_FUNCTION(php_sapi_name);
-PHP_FUNCTION(php_uname);
-PHPAPI void php_print_info(int flag TSRMLS_DC);
-PHPAPI void php_print_style(void);
-PHPAPI void php_info_print_style(void);
-PHPAPI void php_info_print_table_colspan_header(int num_cols, char *header);
-PHPAPI void php_info_print_table_header(int num_cols, ...);
-PHPAPI void php_info_print_table_row(int num_cols, ...);
-PHPAPI void php_info_print_table_start(void);
-PHPAPI void php_info_print_table_end(void);
-PHPAPI void php_info_print_box_start(int bg);
-PHPAPI void php_info_print_box_end(void);
-PHPAPI void php_info_print_hr(void);
-
-void register_phpinfo_constants(INIT_FUNC_ARGS);
-
-#endif /* INFO_H */
diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c
deleted file mode 100644
index e94be6d875..0000000000
--- a/ext/standard/iptc.c
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * Functions to parse & compse IPTC data.
- * PhotoShop >= 3.0 can read and write textual data to JPEG files.
- * ... more to come .....
- *
- * i know, parts of this is now duplicated in image.c
- * but in this case i think it's okay!
- */
-
-/*
- * TODO:
- * - add IPTC translation table
- */
-
-#include "php.h"
-#include "php_iptc.h"
-#include "ext/standard/head.h"
-
-#include <sys/stat.h>
-
-
-/* some defines for the different JPEG block types */
-#define M_SOF0 0xC0 /* Start Of Frame N */
-#define M_SOF1 0xC1 /* N indicates which compression process */
-#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */
-#define M_SOF3 0xC3
-#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */
-#define M_SOF6 0xC6
-#define M_SOF7 0xC7
-#define M_SOF9 0xC9
-#define M_SOF10 0xCA
-#define M_SOF11 0xCB
-#define M_SOF13 0xCD
-#define M_SOF14 0xCE
-#define M_SOF15 0xCF
-#define M_SOI 0xD8
-#define M_EOI 0xD9 /* End Of Image (end of datastream) */
-#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
-#define M_APP0 0xe0
-#define M_APP1 0xe1
-#define M_APP2 0xe2
-#define M_APP3 0xe3
-#define M_APP4 0xe4
-#define M_APP5 0xe5
-#define M_APP6 0xe6
-#define M_APP7 0xe7
-#define M_APP8 0xe8
-#define M_APP9 0xe9
-#define M_APP10 0xea
-#define M_APP11 0xeb
-#define M_APP12 0xec
-#define M_APP13 0xed
-#define M_APP14 0xee
-#define M_APP15 0xef
-
-/* {{{ php_iptc_put1
- */
-static int php_iptc_put1(FILE *fp, int spool, unsigned char c, unsigned char **spoolbuf TSRMLS_DC)
-{
- if (spool > 0)
- PUTC(c);
-
- if (spoolbuf) *(*spoolbuf)++ = c;
-
- return c;
-}
-/* }}} */
-
-/* {{{ php_iptc_get1
- */
-static int php_iptc_get1(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- int c;
- char cc;
-
- c = getc(fp);
-
- if (c == EOF) return EOF;
-
- if (spool > 0) {
- cc = c;
- PUTC(cc);
- }
-
- if (spoolbuf) *(*spoolbuf)++ = c;
-
- return c;
-}
-/* }}} */
-
-/* {{{ php_iptc_read_remaining
- */
-static int php_iptc_read_remaining(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- while (php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC) != EOF) continue;
-
- return M_EOI;
-}
-/* }}} */
-
-/* {{{ php_iptc_skip_variable
- */
-static int php_iptc_skip_variable(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- unsigned int length;
- int c1, c2;
-
- if ((c1 = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC)) == EOF) return M_EOI;
-
- if ((c2 = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC)) == EOF) return M_EOI;
-
- length = (((unsigned char) c1) << 8) + ((unsigned char) c2);
-
- length -= 2;
-
- while (length--)
- if (php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC) == EOF) return M_EOI;
-
- return 0;
-}
-/* }}} */
-
-/* {{{ php_iptc_next_marker
- */
-static int php_iptc_next_marker(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- int c;
-
- /* skip unimportant stuff */
-
- c = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC);
-
- if (c == EOF) return M_EOI;
-
- while (c != 0xff) {
- if ((c = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC)) == EOF)
- return M_EOI; /* we hit EOF */
- }
-
- /* get marker byte, swallowing possible padding */
- do {
- c = php_iptc_get1(fp, 0, 0 TSRMLS_CC);
- if (c == EOF)
- return M_EOI; /* we hit EOF */
- else
- if (c == 0xff)
- php_iptc_put1(fp, spool, (unsigned char)c, spoolbuf TSRMLS_CC);
- } while (c == 0xff);
-
- return (unsigned int) c;
-}
-/* }}} */
-
-static char psheader[] = "\xFF\xED\0\0Photoshop 3.0\08BIM\x04\x04\0\0\0\0";
-
-/* {{{ proto array iptcembed(string iptcdata, string jpeg_file_name [, int spool])
- Embed binary IPTC data into a JPEG image. */
-PHP_FUNCTION(iptcembed)
-{
- zval **iptcdata, **jpeg_file, **spool_flag;
- FILE *fp;
- unsigned int marker;
- unsigned int spool = 0, done = 0, inx, len;
- unsigned char *spoolbuf=0, *poi=0;
- struct stat sb;
-
- switch(ZEND_NUM_ARGS()){
- case 3:
- if (zend_get_parameters_ex(3, &iptcdata, &jpeg_file, &spool_flag) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(iptcdata);
- convert_to_string_ex(jpeg_file);
- convert_to_long_ex(spool_flag);
- spool = Z_LVAL_PP(spool_flag);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &iptcdata, &jpeg_file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(iptcdata);
- convert_to_string_ex(jpeg_file);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(jpeg_file) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fp = VCWD_FOPEN(Z_STRVAL_PP(jpeg_file), "rb")) == 0) {
- php_error(E_WARNING, "Unable to open %s", Z_STRVAL_PP(jpeg_file));
- RETURN_FALSE;
- }
-
- len = Z_STRLEN_PP(iptcdata);
-
- if (spool < 2) {
- fstat(fileno(fp), &sb);
-
- poi = spoolbuf = emalloc(len + sizeof(psheader) + sb.st_size + 1024);
-
- if (! spoolbuf) {
- fclose(fp);
- RETURN_FALSE;
- }
- }
-
- if (php_iptc_get1(fp, spool, poi?&poi:0 TSRMLS_CC) != 0xFF) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- if (php_iptc_get1(fp, spool, poi?&poi:0 TSRMLS_CC) != 0xD8) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- while (!done) {
- marker = php_iptc_next_marker(fp, spool, poi?&poi:0 TSRMLS_CC);
-
- if (marker == M_EOI) { /* EOF */
- break;
- } else if (marker != M_APP13) {
- php_iptc_put1(fp, spool, (unsigned char)marker, poi?&poi:0 TSRMLS_CC);
- }
-
- switch (marker) {
- case M_APP13:
- /* we are going to write a new APP13 marker, so don't output the old one */
- php_iptc_skip_variable(fp, 0, 0 TSRMLS_CC);
- php_iptc_read_remaining(fp, spool, poi?&poi:0 TSRMLS_CC);
- done = 1;
- break;
-
- case M_APP0:
- /* APP0 is in each and every JPEG, so when we hit APP0 we insert our new APP13! */
- php_iptc_skip_variable(fp, spool, poi?&poi:0 TSRMLS_CC);
-
- if (len & 1) len++; /* make the length even */
-
- psheader[ 2 ] = (len+28)>>8;
- psheader[ 3 ] = (len+28)&0xff;
-
- for (inx = 0; inx < 28; inx++)
- php_iptc_put1(fp, spool, psheader[inx], poi?&poi:0 TSRMLS_CC);
-
- php_iptc_put1(fp, spool, (unsigned char)(len>>8), poi?&poi:0 TSRMLS_CC);
- php_iptc_put1(fp, spool, (unsigned char)(len&0xff), poi?&poi:0 TSRMLS_CC);
-
- for (inx = 0; inx < len; inx++)
- php_iptc_put1(fp, spool, Z_STRVAL_PP(iptcdata)[inx], poi?&poi:0 TSRMLS_CC);
- break;
-
- case M_SOS:
- /* we hit data, no more marker-inserting can be done! */
- php_iptc_read_remaining(fp, spool, poi?&poi:0 TSRMLS_CC);
- done = 1;
- break;
-
- default:
- php_iptc_skip_variable(fp, spool, poi?&poi:0 TSRMLS_CC);
- break;
- }
- }
-
- fclose(fp);
-
- if (spool < 2) {
- RETVAL_STRINGL(spoolbuf, poi - spoolbuf, 0);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto array iptcparse(string iptcdata)
- Parse binary IPTC-data into associative array */
-PHP_FUNCTION(iptcparse)
-{
- unsigned int length, inx, len, tagsfound;
- unsigned char *buffer;
- unsigned char recnum, dataset;
- unsigned char key[ 16 ];
- zval *values, **str, **element;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- inx = 0;
- length = Z_STRLEN_PP(str);
- buffer = Z_STRVAL_PP(str);
-
- tagsfound = 0; /* number of tags already found */
-
- while (inx < length) { /* find 1st tag */
- if ((buffer[inx] == 0x1c) && (buffer[inx+1] == 0x02)){
- break;
- } else {
- inx++;
- }
- }
-
- while (inx < length) {
- if (buffer[ inx++ ] != 0x1c) {
- break; /* we ran against some data which does not conform to IPTC - stop parsing! */
- }
-
- if ((inx + 4) >= length)
- break;
-
- dataset = buffer[ inx++ ];
- recnum = buffer[ inx++ ];
-
- if (buffer[ inx ] & (unsigned char) 0x80) { /* long tag */
- len = (((long) buffer[ inx + 2 ]) << 24) + (((long) buffer[ inx + 3 ]) << 16) +
- (((long) buffer[ inx + 4 ]) << 8) + (((long) buffer[ inx + 5 ]));
- inx += 6;
- } else { /* short tag */
- len = (((unsigned short) buffer[ inx ])<<8) | (unsigned short)buffer[ inx+1 ];
- inx += 2;
- }
-
- sprintf(key, "%d#%03d", (unsigned int) dataset, (unsigned int) recnum);
-
- if ((len > length) || (inx + len) > length)
- break;
-
- if (tagsfound == 0) { /* found the 1st tag - initialize the return array */
- if (array_init(return_value) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- RETURN_FALSE;
- }
- }
-
- if (zend_hash_find(Z_ARRVAL_P(return_value), key, strlen(key) + 1, (void **) &element) == FAILURE) {
- ALLOC_ZVAL(values);
- INIT_PZVAL(values);
- if (array_init(values) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- RETURN_FALSE;
- }
-
- zend_hash_update(Z_ARRVAL_P(return_value), key, strlen(key)+1, (void *) &values, sizeof(pval*), (void **) &element);
- }
-
- add_next_index_stringl(*element, buffer+inx, len, 1);
-
- inx += len;
-
- tagsfound++;
- }
-
- if (! tagsfound) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/lcg.c b/ext/standard/lcg.c
deleted file mode 100644
index 2683c789ce..0000000000
--- a/ext/standard/lcg.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_lcg.h"
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#else
-#include <sys/time.h>
-#endif
-
-#ifdef ZTS
-int lcg_globals_id;
-#else
-static php_lcg_globals lcg_globals;
-#endif
-
-
-#ifdef PHP_WIN32
-#include <process.h>
-#endif
-
-/*
- * combinedLCG() returns a pseudo random number in the range of (0, 1).
- * The function combines two CGs with periods of
- * 2^31 - 85 and 2^31 - 249. The period of this function
- * is equal to the product of both primes.
- */
-
-#define MODMULT(a, b, c, m, s) q = s/a;s=b*(s-a*q)-c*q;if(s<0)s+=m
-
-PHPAPI double php_combined_lcg(TSRMLS_D)
-{
- php_int32 q;
- php_int32 z;
-
- MODMULT(53668, 40014, 12211, 2147483563L, LCG(s1));
- MODMULT(52774, 40692, 3791, 2147483399L, LCG(s2));
-
- z = LCG(s1) - LCG(s2);
- if (z < 1) {
- z += 2147483562;
- }
-
- return z * 4.656613e-10;
-}
-
-static void lcg_seed(TSRMLS_D)
-{
- struct timeval tv;
-
- if (gettimeofday(&tv, NULL) == 0) {
- LCG(s1) = tv.tv_sec ^ (~tv.tv_usec);
- } else {
- LCG(s1) = 1;
- }
-#ifdef ZTS
- LCG(s2) = (long) tsrm_thread_id();
-#else
- LCG(s2) = (long) getpid();
-#endif
-
- LCG(seeded) = 1;
-}
-
-static void lcg_init_globals(php_lcg_globals *lcg_globals_p TSRMLS_DC)
-{
- LCG(seeded) = 0;
-}
-
-PHP_MINIT_FUNCTION(lcg)
-{
-#ifdef ZTS
- ts_allocate_id(&lcg_globals_id, sizeof(php_lcg_globals), (ts_allocate_ctor) lcg_init_globals, NULL);
-#else
- lcg_init_globals(&lcg_globals);
-#endif
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(lcg)
-{
- if (!LCG(seeded)) {
- lcg_seed(TSRMLS_C);
- }
- return SUCCESS;
-}
-
-/* {{{ proto float lcg_value()
- Returns a value from the combined linear congruential generator */
-PHP_FUNCTION(lcg_value)
-{
- RETURN_DOUBLE(php_combined_lcg(TSRMLS_C));
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/levenshtein.c b/ext/standard/levenshtein.c
deleted file mode 100644
index f5c23687cf..0000000000
--- a/ext/standard/levenshtein.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include "php_string.h"
-
-#define LEVENSHTEIN_MAX_LENTH 255
-
-/* {{{ reference_levdist
- * reference implementation, only optimized for memory usage, not speed */
-static int reference_levdist(const char *s1, int l1,
- const char *s2, int l2,
- int cost_ins, int cost_rep, int cost_del )
-{
- int *p1, *p2, *tmp;
- int i1, i2, c0, c1, c2;
-
- if(l1==0) return l2*cost_ins;
- if(l2==0) return l1*cost_del;
-
- if((l1>LEVENSHTEIN_MAX_LENTH)||(l2>LEVENSHTEIN_MAX_LENTH))
- return -1;
-
- if(!(p1=emalloc((l2+1)*sizeof(int)))) {
- return -2;
- }
- if(!(p2=emalloc((l2+1)*sizeof(int)))) {
- free(p1);
- return -2;
- }
-
- for(i2=0;i2<=l2;i2++)
- p1[i2] = i2*cost_ins;
-
- for(i1=0;i1<l1;i1++)
- {
- p2[0]=p1[0]+cost_del;
- for(i2=0;i2<l2;i2++)
- {
- c0=p1[i2]+((s1[i1]==s2[i2])?0:cost_rep);
- c1=p1[i2+1]+cost_del; if(c1<c0) c0=c1;
- c2=p2[i2]+cost_ins; if(c2<c0) c0=c2;
- p2[i2+1]=c0;
- }
- tmp=p1; p1=p2; p2=tmp;
- }
-
- c0=p1[l2];
-
- efree(p1);
- efree(p2);
-
- return c0;
-}
-/* }}} */
-
-/* {{{ custom_levdist
- */
-static int custom_levdist(char *str1, char *str2, char *callback_name)
-{
- php_error(E_WARNING, "the general Levenshtein support is not there yet");
- /* not there yet */
-
- return -1;
-}
-/* }}} */
-
-/* {{{ proto int levenshtein(string str1, string str2)
- Calculate Levenshtein distance between two strings */
-PHP_FUNCTION(levenshtein)
-{
- zval **str1, **str2, **cost_ins, **cost_rep, **cost_del, **callback_name;
- int distance=-1;
-
- switch(ZEND_NUM_ARGS()) {
- case 2: /* just two string: use maximum performance version */
- if (zend_get_parameters_ex(2, &str1, &str2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str1);
- convert_to_string_ex(str2);
-
- distance = reference_levdist(Z_STRVAL_PP(str1), Z_STRLEN_PP(str1),
- Z_STRVAL_PP(str2), Z_STRLEN_PP(str2), 1, 1, 1);
-
- break;
-
- case 5: /* more general version: calc cost by ins/rep/del weights */
- if (zend_get_parameters_ex(5, &str1, &str2, &cost_ins, &cost_rep, &cost_del) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str1);
- convert_to_string_ex(str2);
- convert_to_long_ex(cost_ins);
- convert_to_long_ex(cost_rep);
- convert_to_long_ex(cost_del);
-
- distance = reference_levdist(Z_STRVAL_PP(str1), Z_STRLEN_PP(str1),
- Z_STRVAL_PP(str2), Z_STRLEN_PP(str2),
- Z_LVAL_PP(cost_ins), Z_LVAL_PP(cost_rep),
- Z_LVAL_PP(cost_del));
-
- break;
-
- case 3: /* most general version: calc cost by user-supplied function */
- if (zend_get_parameters_ex(3, &str1, &str2, &callback_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str1);
- convert_to_string_ex(str2);
- convert_to_string_ex(callback_name);
-
- distance = custom_levdist(Z_STRVAL_PP(str1), Z_STRVAL_PP(str2),
- Z_STRVAL_PP(callback_name));
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- if(distance<0) {
- php_error(E_WARNING, "levenshtein(): argument string(s) too long");
- }
-
- RETURN_LONG(distance);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/link.c b/ext/standard/link.c
deleted file mode 100644
index 257d765909..0000000000
--- a/ext/standard/link.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_filestat.h"
-#include "php_globals.h"
-
-#ifdef HAVE_SYMLINK
-
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-#include <string.h>
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#if HAVE_GRP_H
-#ifdef PHP_WIN32
-#include "win32/grp.h"
-#else
-#include <grp.h>
-#endif
-#endif
-#include <errno.h>
-#include <ctype.h>
-
-#include "safe_mode.h"
-#include "php_link.h"
-
-/* {{{ proto string readlink(string filename)
- Return the target of a symbolic link */
-PHP_FUNCTION(readlink)
-{
- zval **filename;
- char buff[256];
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- ret = readlink(Z_STRVAL_PP(filename), buff, 255);
- if (ret == -1) {
- php_error(E_WARNING, "readlink failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
- /* Append NULL to the end of the string */
- buff[ret] = '\0';
- RETURN_STRING(buff, 1);
-}
-/* }}} */
-
-/* {{{ proto int linkinfo(string filename)
- Returns the st_dev field of the UNIX C stat structure describing the link */
-PHP_FUNCTION(linkinfo)
-{
- zval **filename;
- struct stat sb;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- ret = VCWD_LSTAT(Z_STRVAL_PP(filename), &sb);
- if (ret == -1) {
- php_error(E_WARNING, "Linkinfo failed (%s)", strerror(errno));
- RETURN_LONG(-1L);
- }
-
- RETURN_LONG((long) sb.st_dev);
-}
-/* }}} */
-
-/* {{{ proto int symlink(string target, string link)
- Create a symbolic link */
-PHP_FUNCTION(symlink)
-{
- zval **topath, **frompath;
- int ret;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &topath, &frompath) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(topath);
- convert_to_string_ex(frompath);
-
- if (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(topath), NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (!strncasecmp(Z_STRVAL_PP(topath), "http://", 7) || !strncasecmp(Z_STRVAL_PP(topath), "ftp://", 6)) {
- php_error(E_WARNING, "Unable to symlink to a URL");
- RETURN_FALSE;
- }
-
- ret = symlink(Z_STRVAL_PP(topath), Z_STRVAL_PP(frompath));
- if (ret == -1) {
- php_error(E_WARNING, "Symlink failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int link(string target, string link)
- Create a hard link */
-PHP_FUNCTION(link)
-{
- zval **topath, **frompath;
- int ret;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &topath, &frompath) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(topath);
- convert_to_string_ex(frompath);
-
- if (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(topath), NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (!strncasecmp(Z_STRVAL_PP(topath), "http://", 7) || !strncasecmp(Z_STRVAL_PP(topath), "ftp://", 6)) {
- php_error(E_WARNING, "Unable to link to a URL");
- RETURN_FALSE;
- }
-
- ret = link(Z_STRVAL_PP(topath), Z_STRVAL_PP(frompath));
- if (ret == -1) {
- php_error(E_WARNING, "Link failed (%s)", strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
deleted file mode 100644
index 4aae220074..0000000000
--- a/ext/standard/mail.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-#include "php.h"
-#include "ext/standard/info.h"
-#if !defined(PHP_WIN32)
-#include "build-defs.h"
-#if HAVE_SYSEXITS_H
-#include <sysexits.h>
-#endif
-#if HAVE_SYS_SYSEXITS_H
-#include <sys/sysexits.h>
-#endif
-#endif
-#include "php_mail.h"
-#include "php_ini.h"
-#include "safe_mode.h"
-#include "exec.h"
-
-#if HAVE_SENDMAIL
-#ifdef PHP_WIN32
-#include "win32/sendmail.h"
-#endif
-
-/* {{{ proto int ezmlm_hash(string addr)
- Calculate EZMLM list hash value. */
-PHP_FUNCTION(ezmlm_hash)
-{
- char *str=NULL;
- unsigned long h = 5381L;
- int j, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &str, &str_len) == FAILURE) {
- return;
- }
-
- for (j=0; j<str_len; j++) {
- h = (h + (h<<5)) ^ (unsigned long) (unsigned char) tolower(str[j]);
- }
-
- h = (h%53);
-
- RETURN_LONG((int) h);
-}
-/* }}} */
-
-/* {{{ proto int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
- Send an email message */
-PHP_FUNCTION(mail)
-{
- char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL, *extra_cmd=NULL;
- int to_len,message_len,headers_len,subject_len,extra_cmd_len;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|ss",
- &to, &to_len,
- &subject, &subject_len,
- &message, &message_len,
- &headers, &headers_len,
- &extra_cmd, &extra_cmd_len
- ) == FAILURE) {
- return;
- }
-
- for(to_len--;to_len;to_len--) {
- if(!isspace(to[to_len]))break;
- to[to_len]='\0';
- }
-
- for(subject_len--;subject_len;subject_len--) {
- if(!isspace(subject[subject_len]))break;
- subject[subject_len]='\0';
- }
-
- if(extra_cmd)
- extra_cmd = php_escape_shell_arg(extra_cmd);
-
- if (php_mail(to, subject, message, headers, extra_cmd TSRMLS_CC)) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-
- if (extra_cmd) efree (extra_cmd);
-}
-/* }}} */
-
-/* {{{ php_mail
- */
-PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC)
-{
-#ifdef PHP_WIN32
- int tsm_err;
- char *tsm_errmsg = NULL;
-#endif
- FILE *sendmail;
- int ret;
- char *sendmail_path = INI_STR("sendmail_path");
- char *sendmail_cmd = NULL;
-
- if (!sendmail_path) {
-#ifdef PHP_WIN32
- /* handle old style win smtp sending */
- if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, headers, subject, to, message) == FAILURE) {
- if (tsm_errmsg) {
- php_error(E_WARNING, "%s() %s", get_active_function_name(TSRMLS_C), tsm_errmsg);
- efree(tsm_errmsg);
- } else {
- php_error(E_WARNING, "%s() %s", get_active_function_name(TSRMLS_C), GetSMErrorText(tsm_err));
- }
- return 0;
- }
- return 1;
-#else
- return 0;
-#endif
- }
- if (extra_cmd != NULL) {
- sendmail_cmd = emalloc (strlen (sendmail_path) + strlen (extra_cmd) + 2);
- strcpy (sendmail_cmd, sendmail_path);
- strcat (sendmail_cmd, " ");
- strcat (sendmail_cmd, extra_cmd);
- } else {
- sendmail_cmd = sendmail_path;
- }
-
-#ifdef PHP_WIN32
- sendmail = popen(sendmail_cmd, "wb");
-#else
- /* Since popen() doesn't indicate if the internal fork() doesn't work
- * (e.g. the shell can't be executed) we explicitely set it to 0 to be
- * sure we don't catch any older errno value. */
- errno = 0;
- sendmail = popen(sendmail_cmd, "w");
-#endif
- if (extra_cmd != NULL)
- efree (sendmail_cmd);
-
- if (sendmail) {
-#ifndef PHP_WIN32
- if (EACCES == errno) {
- php_error(E_WARNING, "%s() permission denied; unable to execute shell to run mail delivery binary",
- get_active_function_name(TSRMLS_C));
- pclose(sendmail);
- return 0;
- }
-#endif
- fprintf(sendmail, "To: %s\n", to);
- fprintf(sendmail, "Subject: %s\n", subject);
- if (headers != NULL) {
- fprintf(sendmail, "%s\n", headers);
- }
- fprintf(sendmail, "\n%s\n", message);
- ret = pclose(sendmail);
-#ifdef PHP_WIN32
- if (ret == -1)
-#else
-#if defined(EX_TEMPFAIL)
- if ((ret != EX_OK)&&(ret != EX_TEMPFAIL))
-#else
- if (ret != EX_OK)
-#endif
-#endif
- {
- return 0;
- } else {
- return 1;
- }
- } else {
- php_error(E_WARNING, "%s() could not execute mail delivery program",
- get_active_function_name(TSRMLS_C));
- return 0;
- }
-
- return 1; /* never reached */
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mail)
-{
- char *sendmail_path = INI_STR("sendmail_path");
-
-#ifdef PHP_WIN32
- if (!sendmail_path) {
- php_info_print_table_row(2, "Internal Sendmail Support for Windows", "enabled");
- } else {
- php_info_print_table_row(2, "Path to sendmail", sendmail_path);
- }
-#else
- php_info_print_table_row(2, "Path to sendmail", sendmail_path);
-#endif
-}
-/* }}} */
-
-#else
-
-PHP_FUNCTION(mail) {}
-PHP_MINFO_FUNCTION(mail) {}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/math.c b/ext/standard/math.c
deleted file mode 100644
index 4ca710d235..0000000000
--- a/ext/standard/math.c
+++ /dev/null
@@ -1,1068 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Jim Winstead <jimw@php.net> |
- | Stig Sæther Bakken <ssb@fast.no> |
- | Zeev Suraski <zeev@zend.com> |
- | PHP 4.0 patches by Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_math.h"
-
-#include <math.h>
-#include <float.h>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-/* {{{ proto int abs(int number)
- Return the absolute value of the number */
-
-PHP_FUNCTION(abs)
-{
- zval **value;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters_ex(1, &value)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_scalar_to_number_ex(value);
-
- if (Z_TYPE_PP(value) == IS_DOUBLE) {
- RETURN_DOUBLE(fabs(Z_DVAL_PP(value)));
- } else if (Z_TYPE_PP(value) == IS_LONG) {
- if (Z_LVAL_PP(value) == LONG_MIN) {
- RETURN_DOUBLE(-(double)LONG_MIN);
- } else {
- RETURN_LONG(Z_LVAL_PP(value) < 0 ? -Z_LVAL_PP(value) : Z_LVAL_PP(value));
- }
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-/* {{{ proto float ceil(float number)
- Returns the next highest integer value of the number */
-PHP_FUNCTION(ceil)
-{
- zval **value;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters_ex(1, &value)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_scalar_to_number_ex(value);
-
- if (Z_TYPE_PP(value) == IS_DOUBLE) {
- RETURN_DOUBLE(ceil(Z_DVAL_PP(value)));
- } else if (Z_TYPE_PP(value) == IS_LONG) {
- convert_to_double_ex(value);
- RETURN_DOUBLE(Z_DVAL_PP(value));
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-/* {{{ proto float floor(float number)
- Returns the next lowest integer value from the number */
-PHP_FUNCTION(floor)
-{
- zval **value;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters_ex(1, &value)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_scalar_to_number_ex(value);
-
- if (Z_TYPE_PP(value) == IS_DOUBLE) {
- RETURN_DOUBLE(floor(Z_DVAL_PP(value)));
- } else if (Z_TYPE_PP(value) == IS_LONG) {
- convert_to_double_ex(value);
- RETURN_DOUBLE(Z_DVAL_PP(value));
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-
-/* {{{ proto float round(float number [, int precision])
- Returns the number rounded to specified precision */
-PHP_FUNCTION(round)
-{
- zval **value, **precision;
- int places = 0;
- double f, return_val;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &value, &precision) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(precision);
- places = (int) Z_LVAL_PP(precision);
- }
-
- convert_scalar_to_number_ex(value);
-
- switch (Z_TYPE_PP(value)) {
- case IS_LONG:
- /* Simple case - long that doesn't need to be rounded. */
- if (places >= 0) {
- RETURN_DOUBLE((double) Z_LVAL_PP(value));
- }
- /* break omitted intentionally */
-
- case IS_DOUBLE:
- return_val = (Z_TYPE_PP(value) == IS_LONG) ?
- (double)Z_LVAL_PP(value) : Z_DVAL_PP(value);
-
- f = pow(10.0, (double) places);
-
- return_val *= f;
- if (return_val >= 0.0)
- return_val = floor(return_val + 0.5);
- else
- return_val = ceil(return_val - 0.5);
- return_val /= f;
-
- RETURN_DOUBLE(return_val);
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-/* {{{ proto float sin(float number)
- Returns the sine of the number in radians */
-
-PHP_FUNCTION(sin)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = sin(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float cos(float number)
- Returns the cosine of the number in radians */
-
-PHP_FUNCTION(cos)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = cos(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-/* {{{ proto float tan(float number)
- Returns the tangent of the number in radians */
-PHP_FUNCTION(tan)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = tan(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float asin(float number)
- Returns the arc sine of the number in radians */
-
-PHP_FUNCTION(asin)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = asin(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float acos(float number)
- Return the arc cosine of the number in radians */
-
-PHP_FUNCTION(acos)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = acos(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float atan(float number)
- Returns the arc tangent of the number in radians */
-
-PHP_FUNCTION(atan)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = atan(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float atan2(float y, float x)
- Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x */
-
-PHP_FUNCTION(atan2)
-{
- zval **num1, **num2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &num1, &num2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num1);
- convert_to_double_ex(num2);
- Z_DVAL_P(return_value) = atan2(Z_DVAL_PP(num1), Z_DVAL_PP(num2));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float sinh(float number)
- Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2 */
-
-PHP_FUNCTION(sinh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = sinh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float cosh(float number)
- Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2 */
-
-PHP_FUNCTION(cosh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = cosh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-/* {{{ proto float tanh(float number)
- Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number) */
-PHP_FUNCTION(tanh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = tanh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-#ifndef PHP_WIN32
-/* {{{ proto float asinh(float number)
- Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number */
-
-PHP_FUNCTION(asinh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = asinh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float acosh(float number)
- Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number */
-
-PHP_FUNCTION(acosh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = acosh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float atanh(float number)
- Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number */
-
-PHP_FUNCTION(atanh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = atanh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-#endif
-
-/* {{{ proto float pi(void)
- Returns an approximation of pi */
-
-PHP_FUNCTION(pi)
-{
- Z_DVAL_P(return_value) = M_PI;
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-
-/* {{{ proto bool is_finite(float val)
- Returns whether argument is finite */
-PHP_FUNCTION(is_finite)
-{
- double dval;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dval) == FAILURE) {
- return;
- }
- RETURN_BOOL(zend_finite(dval));
-}
-/* }}} */
-
-/* {{{ proto bool is_infinite(float val)
- Returns whether argument is infinite */
-PHP_FUNCTION(is_infinite)
-{
- double dval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dval) == FAILURE) {
- return;
- }
- RETURN_BOOL(zend_isinf(dval));
-}
-/* }}} */
-
-/* {{{ proto bool is_nan(float val)
- Returns whether argument is not a number */
-PHP_FUNCTION(is_nan)
-{
- double dval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dval) == FAILURE) {
- return;
- }
- RETURN_BOOL(zend_isnan(dval));
-}
-/* }}} */
-
-/* {{{ proto number pow(number base, number exponent)
- Returns base raised to the power of exponent. Returns integer result when possible */
-PHP_FUNCTION(pow)
-{
- zval *zbase, *zexp;
- double dval;
- zend_bool wantlong;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z/", &zbase, &zexp) == FAILURE) {
- return;
- }
-
- /* make sure we're dealing with numbers */
- convert_scalar_to_number(zbase TSRMLS_CC);
- convert_scalar_to_number(zexp TSRMLS_CC);
-
- /* if both base and exponent were longs, we'll try to get a long out */
- wantlong = Z_TYPE_P(zbase) == IS_LONG
- && Z_TYPE_P(zexp ) == IS_LONG && Z_LVAL_P(zexp) >= 0;
-
- convert_to_double(zbase);
- convert_to_double(zexp);
-
- /* go ahead and calculate things. */
- dval = pow(Z_DVAL_P(zbase),Z_DVAL_P(zexp));
-
- /* if we wanted a long, and dval < LONG_MAX, it must be a long. */
- if (wantlong && zend_finite(dval) && dval <= (double)LONG_MAX) {
- RETURN_LONG((long)dval);
- }
-
- /* otherwise just return the double. */
- RETURN_DOUBLE(dval);
-}
-/* }}} */
-
-/* {{{ proto float exp(float number)
- Returns e raised to the power of the number */
-
-PHP_FUNCTION(exp)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = exp(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-
-#ifndef PHP_WIN32
-/* {{{ proto float expm1(float number)
- Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero */
-
-/*
- WARNING: this function is expermental: it could change its name or
- disappear in the next version of PHP!
-*/
-
-PHP_FUNCTION(expm1)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = expm1(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float log1p(float number)
- Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero */
-
-/*
- WARNING: this function is expermental: it could change its name or
- disappear in the next version of PHP!
-*/
-
-PHP_FUNCTION(log1p)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = log1p(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-#endif
-/* {{{ proto float log(float number)
- Returns the natural logarithm of the number */
-
-PHP_FUNCTION(log)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = log(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float log10(float number)
- Returns the base-10 logarithm of the number */
-
-PHP_FUNCTION(log10)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = log10(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float sqrt(float number)
- Returns the square root of the number */
-
-PHP_FUNCTION(sqrt)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = sqrt(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-
-/* {{{ proto float hypot(float num1, float num2)
- Returns sqrt(num1*num1 + num2*num2) */
-
-/*
- WARNING: this function is expermental: it could change its name or
- disappear in the next version of PHP!
-*/
-
-PHP_FUNCTION(hypot)
-{
- zval **num1, **num2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &num1, &num2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num1);
- convert_to_double_ex(num2);
- Z_DVAL_P(return_value) = hypot(Z_DVAL_PP(num1), Z_DVAL_PP(num2));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-/* {{{ proto float deg2rad(float number)
- Converts the number in degrees to the radian equivalent */
-
-PHP_FUNCTION(deg2rad)
-{
- zval **deg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &deg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(deg);
- RETVAL_DOUBLE((Z_DVAL_PP(deg) / 180.0) * M_PI);
-}
-
-/* }}} */
-/* {{{ proto float rad2deg(float number)
- Converts the radian number to the equivalent number in degrees */
-
-PHP_FUNCTION(rad2deg)
-{
- zval **rad;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &rad) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(rad);
- RETVAL_DOUBLE((Z_DVAL_PP(rad) / M_PI) * 180);
-}
-
-/* }}} */
-/* {{{ _php_math_basetolong */
-
-/*
- * Convert a string representation of a base(2-36) number to a long.
- */
-PHPAPI long
-_php_math_basetolong(zval *arg, int base) {
- long num = 0, digit, onum;
- int i;
- char c, *s;
-
- if (Z_TYPE_P(arg) != IS_STRING || base < 2 || base > 36) {
- return 0;
- }
-
- s = Z_STRVAL_P(arg);
-
- for (i = Z_STRLEN_P(arg); i > 0; i--) {
- c = *s++;
-
- digit = (c >= '0' && c <= '9') ? c - '0'
- : (c >= 'A' && c <= 'Z') ? c - 'A' + 10
- : (c >= 'a' && c <= 'z') ? c - 'a' + 10
- : base;
-
- if (digit >= base) {
- continue;
- }
-
- onum = num;
- num = num * base + digit;
- if (num > onum)
- continue;
-
- php_error(E_WARNING, "base_to_long: number '%s' is too big to fit in long", s);
- return LONG_MAX;
- }
-
- return num;
-}
-
-/* }}} */
-/* {{{ _php_math_longtobase */
-
-/* {{{ _php_math_basetozval */
-
-/*
- * Convert a string representation of a base(2-36) number to a zval.
- */
-PHPAPI int
-_php_math_basetozval(zval *arg, int base, zval *ret) {
- long num = 0, digit, onum;
- double fnum;
- int i;
- int mode = 0;
- char c, *s;
-
- if (Z_TYPE_P(arg) != IS_STRING || base < 2 || base > 36) {
- return FAILURE;
- }
-
- s = Z_STRVAL_P(arg);
-
- for (i = Z_STRLEN_P(arg); i > 0; i--) {
- c = *s++;
-
- digit = (c >= '0' && c <= '9') ? c - '0'
- : (c >= 'A' && c <= 'Z') ? c - 'A' + 10
- : (c >= 'a' && c <= 'z') ? c - 'a' + 10
- : base;
-
- if (digit >= base)
- continue;
-
- switch (mode) {
- case 0: /* Integer */
- onum = num;
- num = num * base + digit;
-
- if (num > onum)
- break; /* No overflow, continue */
-
- fnum = onum;
- mode = 1;
- /* fall-through */
- case 1: /* Float */
- fnum = fnum * base + digit;
- }
- }
-
- if (mode == 1) {
- ZVAL_DOUBLE(ret, fnum);
- } else {
- ZVAL_LONG(ret, num);
- }
- return SUCCESS;
-}
-
-/* }}} */
-/* {{{ _php_math_longtobase */
-
-/*
- * Convert a long to a string containing a base(2-36) representation of
- * the number.
- */
-PHPAPI char *
-_php_math_longtobase(zval *arg, int base)
-{
- static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
- char buf[(sizeof(unsigned long) << 3) + 1];
- char *ptr, *end;
- unsigned long value;
-
- if (Z_TYPE_P(arg) != IS_LONG || base < 2 || base > 36) {
- return empty_string;
- }
-
- value = Z_LVAL_P(arg);
-
- end = ptr = buf + sizeof(buf) - 1;
- *ptr = '\0';
-
- do {
- *--ptr = digits[value % base];
- value /= base;
- } while (ptr > buf && value);
-
- return estrndup(ptr, end - ptr);
-}
-
-/* }}} */
-/* {{{ _php_math_zvaltobase */
-
-/*
- * Convert a zval to a string containing a base(2-36) representation of
- * the number.
- */
-PHPAPI char *
-_php_math_zvaltobase(zval *arg, int base)
-{
- static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-
- if ((Z_TYPE_P(arg) != IS_LONG && Z_TYPE_P(arg) != IS_DOUBLE) || base < 2 || base > 36) {
- return empty_string;
- }
-
- if (Z_TYPE_P(arg) == IS_DOUBLE) {
- double fvalue = floor(Z_DVAL_P(arg)); /* floor it just in case */
- char *ptr, *end;
- char buf[(sizeof(double) << 3) + 1];
-
- end = ptr = buf + sizeof(buf) - 1;
- *ptr = '\0';
-
- do {
- *--ptr = digits[(int) fmod(fvalue, base)];
- fvalue /= base;
- } while (ptr > buf && fabs(fvalue) >= 1);
-
- return estrndup(ptr, end - ptr);
- }
-
- return _php_math_longtobase(arg, base);
-}
-
-/* }}} */
-/* {{{ proto int bindec(string binary_number)
- Returns the decimal equivalent of the binary number */
-
-PHP_FUNCTION(bindec)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
- if(_php_math_basetozval(*arg, 2, return_value) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto int hexdec(string hexadecimal_number)
- Returns the decimal equivalent of the hexadecimal number */
-
-PHP_FUNCTION(hexdec)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if(_php_math_basetozval(*arg, 16, return_value) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto int octdec(string octal_number)
- Returns the decimal equivalent of an octal string */
-
-PHP_FUNCTION(octdec)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if(_php_math_basetozval(*arg, 8, return_value) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto string decbin(int decimal_number)
- Returns a string containing a binary representation of the number */
-
-PHP_FUNCTION(decbin)
-{
- zval **arg;
- char *result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
-
- result = _php_math_longtobase(*arg, 2);
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRLEN_P(return_value) = strlen(result);
- Z_STRVAL_P(return_value) = result;
-}
-
-/* }}} */
-/* {{{ proto string decoct(int decimal_number)
- Returns a string containing an octal representation of the given number */
-
-PHP_FUNCTION(decoct)
-{
- zval **arg;
- char *result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
-
- result = _php_math_longtobase(*arg, 8);
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRLEN_P(return_value) = strlen(result);
- Z_STRVAL_P(return_value) = result;
-}
-
-/* }}} */
-/* {{{ proto string dechex(int decimal_number)
- Returns a string containing a hexadecimal representation of the given number */
-
-PHP_FUNCTION(dechex)
-{
- zval **arg;
- char *result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
-
- result = _php_math_longtobase(*arg, 16);
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRLEN_P(return_value) = strlen(result);
- Z_STRVAL_P(return_value) = result;
-}
-
-/* }}} */
-/* {{{ proto string base_convert(string number, int frombase, int tobase)
- Converts a number in a string from any base <= 36 to any base <= 36 */
-
-PHP_FUNCTION(base_convert)
-{
- zval **number, **frombase, **tobase, temp;
- char *result;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &number, &frombase, &tobase) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(number);
- convert_to_long_ex(frombase);
- convert_to_long_ex(tobase);
- if (Z_LVAL_PP(frombase) < 2 || Z_LVAL_PP(frombase) > 36) {
- php_error(E_WARNING, "base_convert: invalid `from base' (%d)", Z_LVAL_PP(frombase));
- RETURN_FALSE;
- }
- if (Z_LVAL_PP(tobase) < 2 || Z_LVAL_PP(tobase) > 36) {
- php_error(E_WARNING, "base_convert: invalid `to base' (%d)", Z_LVAL_PP(tobase));
- RETURN_FALSE;
- }
-
- if(_php_math_basetozval(*number, Z_LVAL_PP(frombase), &temp) != SUCCESS) {
- RETURN_FALSE;
- }
- result = _php_math_zvaltobase(&temp, Z_LVAL_PP(tobase));
- RETVAL_STRING(result, 0);
-}
-
-/* }}} */
-/* {{{ _php_math_number_format */
-
-PHPAPI char *_php_math_number_format(double d, int dec, char dec_point, char thousand_sep)
-{
- char *tmpbuf, *resbuf;
- char *s, *t; /* source, target */
- int tmplen, reslen=0;
- int count=0;
- int is_negative=0;
-
- if (d<0) {
- is_negative=1;
- d = -d;
- }
- dec = MAX(0, dec);
- tmpbuf = (char *) emalloc(1+DBL_MAX_10_EXP+1+dec+1);
-
- tmplen=sprintf(tmpbuf, "%.*f", dec, d);
-
- if (!isdigit((int)tmpbuf[0])) {
- return tmpbuf;
- }
-
- if (dec) {
- reslen = dec+1 + (tmplen-dec-1) + ((thousand_sep) ? (tmplen-1-dec-1)/3 : 0);
- } else {
- reslen = tmplen+((thousand_sep) ? (tmplen-1)/3 : 0);
- }
- if (is_negative) {
- reslen++;
- }
- resbuf = (char *) emalloc(reslen+1);
-
- s = tmpbuf+tmplen-1;
- t = resbuf+reslen;
- *t-- = 0;
-
- if (dec) {
- while (isdigit((int)*s)) {
- *t-- = *s--;
- }
- *t-- = dec_point; /* copy that dot */
- s--;
- }
-
- while(s>=tmpbuf) {
- *t-- = *s--;
- if (thousand_sep && (++count%3)==0 && s>=tmpbuf) {
- *t-- = thousand_sep;
- }
- }
- if (is_negative) {
- *t-- = '-';
- }
- efree(tmpbuf);
- return resbuf;
-}
-
-/* }}} */
-/* {{{ proto string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])
- Formats a number with grouped thousands */
-
-PHP_FUNCTION(number_format)
-{
- zval **num, **dec, **t_s, **d_p;
- char thousand_sep=',', dec_point='.';
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &num)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_double_ex(num);
- RETURN_STRING(_php_math_number_format(Z_DVAL_PP(num), 0, dec_point, thousand_sep), 0);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &num, &dec)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_double_ex(num);
- convert_to_long_ex(dec);
- RETURN_STRING(_php_math_number_format(Z_DVAL_PP(num), Z_LVAL_PP(dec), dec_point, thousand_sep), 0);
- break;
- case 4:
- if (zend_get_parameters_ex(4, &num, &dec, &d_p, &t_s)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_double_ex(num);
- convert_to_long_ex(dec);
- convert_to_string_ex(d_p);
- convert_to_string_ex(t_s);
- if (Z_STRLEN_PP(d_p)==1) {
- dec_point=Z_STRVAL_PP(d_p)[0];
- }
- if (Z_STRLEN_PP(t_s)==1) {
- thousand_sep=Z_STRVAL_PP(t_s)[0];
- } else if(Z_STRLEN_PP(t_s)==0) {
- thousand_sep=0;
- }
- RETURN_STRING(_php_math_number_format(Z_DVAL_PP(num), Z_LVAL_PP(dec), dec_point, thousand_sep), 0);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto float fmod(float x, float y)
- Returns the remainder of dividing x by y as a float */
-PHP_FUNCTION(fmod)
-{
- double num1, num2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &num1, &num2) == FAILURE) {
- return;
- }
-
- Z_DVAL_P(return_value) = fmod(num1, num2);
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/md5.c b/ext/standard/md5.c
deleted file mode 100644
index 9021506003..0000000000
--- a/ext/standard/md5.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Lachlan Roche |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- * md5.c - Copyright 1997 Lachlan Roche
- * md5_file() added by Alessandro Astarita <aleast@capri.it>
- */
-
-#include <stdio.h>
-#include "php.h"
-
-#include "md5.h"
-
-PHPAPI void make_digest(char *md5str, unsigned char *digest)
-{
- int i;
-
- for (i = 0; i < 16; i++) {
- sprintf(md5str, "%02x", digest[i]);
- md5str += 2;
- }
-
- *md5str = '\0';
-}
-
-/* {{{ proto string md5(string str)
- Calculate the md5 hash of a string */
-PHP_NAMED_FUNCTION(php_if_md5)
-{
- zval **arg;
- char md5str[33];
- PHP_MD5_CTX context;
- unsigned char digest[16];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- md5str[0] = '\0';
- PHP_MD5Init(&context);
- PHP_MD5Update(&context, Z_STRVAL_PP(arg), Z_STRLEN_PP(arg));
- PHP_MD5Final(digest, &context);
- make_digest(md5str, digest);
- RETVAL_STRING(md5str, 1);
-}
-/* }}} */
-
-/* {{{ proto string md5_file(string filename)
- Calculate the md5 hash of given filename */
-PHP_NAMED_FUNCTION(php_if_md5_file)
-{
- zval **arg;
- char md5str[33];
- unsigned char buf[1024];
- unsigned char digest[16];
- PHP_MD5_CTX context;
- int n;
- FILE *fp;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(arg), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fp = VCWD_FOPEN(Z_STRVAL_PP(arg), "rb")) == NULL) {
- php_error(E_WARNING, "md5_file(): Unable to open file");
- RETURN_FALSE;
- }
-
- PHP_MD5Init(&context);
-
- while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) {
- PHP_MD5Update(&context, buf, n);
- }
-
- PHP_MD5Final(digest, &context);
-
- if (ferror(fp)) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- fclose(fp);
-
- make_digest(md5str, digest);
-
- RETVAL_STRING(md5str, 1);
-}
-/* }}} */
-
-/*
- * The remaining code is the reference MD5 code (md5c.c) from rfc1321
- */
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-/* Constants for MD5Transform routine.
- */
-
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform(php_uint32[4], const unsigned char[64]);
-static void Encode(unsigned char *, php_uint32 *, unsigned int);
-static void Decode(php_uint32 *, const unsigned char *, unsigned int);
-
-static unsigned char PADDING[64] =
-{
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
- Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-/* {{{ PHP_MD5Init
- * MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-PHPAPI void PHP_MD5Init(PHP_MD5_CTX * context)
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.
- */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-/* }}} */
-
-/* {{{ PHP_MD5Update
- MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-PHPAPI void PHP_MD5Update(PHP_MD5_CTX * context, const unsigned char *input,
- unsigned int inputLen)
-{
- unsigned int i, index, partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((php_uint32) inputLen << 3))
- < ((php_uint32) inputLen << 3))
- context->count[1]++;
- context->count[1] += ((php_uint32) inputLen >> 29);
-
- partLen = 64 - index;
-
- /* Transform as many times as possible.
- */
- if (inputLen >= partLen) {
- memcpy
- ((unsigned char*) & context->buffer[index], (unsigned char*) input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform(context->state, &input[i]);
-
- index = 0;
- } else
- i = 0;
-
- /* Buffer remaining input */
- memcpy
- ((unsigned char*) & context->buffer[index], (unsigned char*) & input[i],
- inputLen - i);
-}
-/* }}} */
-
-/* {{{ PHP_MD5Final
- MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-PHPAPI void PHP_MD5Final(unsigned char digest[16], PHP_MD5_CTX * context)
-{
- unsigned char bits[8];
- unsigned int index, padLen;
-
- /* Save number of bits */
- Encode(bits, context->count, 8);
-
- /* Pad out to 56 mod 64.
- */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- PHP_MD5Update(context, PADDING, padLen);
-
- /* Append length (before padding) */
- PHP_MD5Update(context, bits, 8);
-
- /* Store state in digest */
- Encode(digest, context->state, 16);
-
- /* Zeroize sensitive information.
- */
- memset((unsigned char*) context, 0, sizeof(*context));
-}
-/* }}} */
-
-/* {{{ MD5Transform
- * MD5 basic transformation. Transforms state based on block.
- */
-static void MD5Transform(state, block)
-php_uint32 state[4];
-const unsigned char block[64];
-{
- php_uint32 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode(x, block, 64);
-
- /* Round 1 */
- FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
- FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
- FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
- FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
- FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
- FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
- FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
- FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
- FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
- FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
- FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
- GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
- GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
- GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
- GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
- GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
- GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
- GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
- GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
- GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
- GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
- HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
- HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
- HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
- HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
- HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
- HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
- HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
- HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
- HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
- II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
- II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
- II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
- II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
- II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
- II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
- II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
- II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
- II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information. */
- memset((unsigned char*) x, 0, sizeof(x));
-}
-/* }}} */
-
-/* {{{ Encode
- Encodes input (php_uint32) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode(output, input, len)
-unsigned char *output;
-php_uint32 *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char) (input[i] & 0xff);
- output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
- output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
- output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
- }
-}
-/* }}} */
-
-/* {{{ Decode
- Decodes input (unsigned char) into output (php_uint32). Assumes len is
- a multiple of 4.
- */
-static void Decode(output, input, len)
-php_uint32 *output;
-const unsigned char *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((php_uint32) input[j]) | (((php_uint32) input[j + 1]) << 8) |
- (((php_uint32) input[j + 2]) << 16) | (((php_uint32) input[j + 3]) << 24);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/md5.h b/ext/standard/md5.h
deleted file mode 100644
index b2dd471dfe..0000000000
--- a/ext/standard/md5.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef MD5_H
-#define MD5_H
-/* MD5.H - header file for MD5C.C
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-#include "ext/standard/basic_functions.h"
-
-/* MD5 context. */
-typedef struct {
- php_uint32 state[4]; /* state (ABCD) */
- php_uint32 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} PHP_MD5_CTX;
-
-PHPAPI void make_digest(char *md5str, unsigned char *digest);
-PHPAPI void PHP_MD5Init(PHP_MD5_CTX *);
-PHPAPI void PHP_MD5Update(PHP_MD5_CTX *, const unsigned char *, unsigned int);
-PHPAPI void PHP_MD5Final(unsigned char[16], PHP_MD5_CTX *);
-
-PHP_NAMED_FUNCTION(php_if_md5);
-PHP_NAMED_FUNCTION(php_if_md5_file);
-
-#endif
diff --git a/ext/standard/metaphone.c b/ext/standard/metaphone.c
deleted file mode 100644
index c30d432e06..0000000000
--- a/ext/standard/metaphone.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- Based on CPANs "Text-Metaphone-1.96" by Michael G Schwern <schwern@pobox.com>
-*/
-
-#include "php.h"
-#include "php_metaphone.h"
-
-static int metaphone(char *word, int word_len, int max_phonemes, char **phoned_word, int traditional);
-
-PHP_FUNCTION(metaphone);
-
-/* {{{ proto string metaphone(string text, int phones)
- Break english phrases down into their phonemes */
-PHP_FUNCTION(metaphone)
-{
- char *str;
- char *result = 0;
- int phones = 0, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &str, &str_len,
- &phones) == FAILURE) {
- return;
- }
-
- if (metaphone(str, str_len, phones, &result, 1) == 0) {
- RETVAL_STRING(result, 0);
- } else {
- if (result) {
- efree(result);
- }
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- this is now the original code by Michael G Schwern:
- i've changed it just a slightly bit (use emalloc,
- get rid of includes etc)
- - thies - 13.09.1999
-*/
-
-/*----------------------------- */
-/* this used to be "metaphone.h" */
-/*----------------------------- */
-
-/* Special encodings */
-#define SH 'X'
-#define TH '0'
-
-/*----------------------------- */
-/* end of "metaphone.h" */
-/*----------------------------- */
-
-/*----------------------------- */
-/* this used to be "metachar.h" */
-/*----------------------------- */
-
-/* Metachar.h ... little bits about characters for metaphone */
-/*-- Character encoding array & accessing macros --*/
-/* Stolen directly out of the book... */
-char _codes[26] =
-{
- 1, 16, 4, 16, 9, 2, 4, 16, 9, 2, 0, 2, 2, 2, 1, 4, 0, 2, 4, 4, 1, 0, 0, 0, 8, 0
-/* a b c d e f g h i j k l m n o p q r s t u v w x y z */
-};
-
-
-#define ENCODE(c) (isalpha(c) ? _codes[((toupper(c)) - 'A')] : 0)
-
-#define isvowel(c) (ENCODE(c) & 1) /* AEIOU */
-
-/* These letters are passed through unchanged */
-#define NOCHANGE(c) (ENCODE(c) & 2) /* FJMNR */
-
-/* These form dipthongs when preceding H */
-#define AFFECTH(c) (ENCODE(c) & 4) /* CGPST */
-
-/* These make C and G soft */
-#define MAKESOFT(c) (ENCODE(c) & 8) /* EIY */
-
-/* These prevent GH from becoming F */
-#define NOGHTOF(c) (ENCODE(c) & 16) /* BDH */
-
-/*----------------------------- */
-/* end of "metachar.h" */
-/*----------------------------- */
-
-/* I suppose I could have been using a character pointer instead of
- * accesssing the array directly... */
-
-/* Look at the next letter in the word */
-#define Next_Letter (toupper(word[w_idx+1]))
-/* Look at the current letter in the word */
-#define Curr_Letter (toupper(word[w_idx]))
-/* Go N letters back. */
-#define Look_Back_Letter(n) (w_idx >= n ? toupper(word[w_idx-n]) : '\0')
-/* Previous letter. I dunno, should this return null on failure? */
-#define Prev_Letter (Look_Back_Letter(1))
-/* Look two letters down. It makes sure you don't walk off the string. */
-#define After_Next_Letter (Next_Letter != '\0' ? toupper(word[w_idx+2]) \
- : '\0')
-#define Look_Ahead_Letter(n) (toupper(Lookahead(word+w_idx, n)))
-
-
-/* Allows us to safely look ahead an arbitrary # of letters */
-/* I probably could have just used strlen... */
-static char Lookahead(char *word, int how_far)
-{
- char letter_ahead = '\0'; /* null by default */
- int idx;
- for (idx = 0; word[idx] != '\0' && idx < how_far; idx++);
- /* Edge forward in the string... */
-
- letter_ahead = word[idx]; /* idx will be either == to how_far or
- * at the end of the string
- */
- return letter_ahead;
-}
-
-
-/* phonize one letter
- * We don't know the buffers size in advance. On way to solve this is to just
- * re-allocate the buffer size. We're using an extra of 2 characters (this
- * could be one though; or more too). */
-#define Phonize(c) { \
- if (p_idx >= max_buffer_len) { \
- if (NULL == (*phoned_word = erealloc(*phoned_word, max_buffer_len + 2))) { \
- return -1; \
- } \
- max_buffer_len += 2; \
- } \
- (*phoned_word)[p_idx++] = c; \
- }
-/* Slap a null character on the end of the phoned word */
-#define End_Phoned_Word {(*phoned_word)[p_idx] = '\0';}
-/* How long is the phoned word? */
-#define Phone_Len (p_idx)
-
-/* Note is a letter is a 'break' in the word */
-#define Isbreak(c) (!isalpha(c))
-
-/* {{{ metaphone
- */
-static int metaphone(char *word, int word_len, int max_phonemes, char **phoned_word, int traditional)
-{
- int w_idx = 0; /* point in the phonization we're at. */
- int p_idx = 0; /* end of the phoned phrase */
- int max_buffer_len = 0; /* maximum length of the destination buffer */
-
-/*-- Parameter checks --*/
- /* Negative phoneme length is meaningless */
-
- if (max_phonemes < 0)
- return -1;
-
- /* Empty/null string is meaningless */
- /* Overly paranoid */
- /* assert(word != NULL && word[0] != '\0'); */
-
- if (word == NULL)
- return -1;
-
-/*-- Allocate memory for our phoned_phrase --*/
- if (max_phonemes == 0) { /* Assume largest possible */
- max_buffer_len = word_len;
- *phoned_word = emalloc(sizeof(char) * word_len + 1);
- if (!*phoned_word)
- return -1;
- } else {
- max_buffer_len = max_phonemes;
- *phoned_word = emalloc(sizeof(char) * max_phonemes + 1);
- if (!*phoned_word)
- return -1;
- }
-
-
-/*-- The first phoneme has to be processed specially. --*/
- /* Find our first letter */
- for (; !isalpha(Curr_Letter); w_idx++) {
- /* On the off chance we were given nothing but crap... */
- if (Curr_Letter == '\0') {
- End_Phoned_Word
- return SUCCESS; /* For testing */
- }
- }
-
- switch (Curr_Letter) {
- /* AE becomes E */
- case 'A':
- if (Next_Letter == 'E') {
- Phonize('E');
- w_idx += 2;
- }
- /* Remember, preserve vowels at the beginning */
- else {
- Phonize('A');
- w_idx++;
- }
- break;
- /* [GKP]N becomes N */
- case 'G':
- case 'K':
- case 'P':
- if (Next_Letter == 'N') {
- Phonize('N');
- w_idx += 2;
- }
- break;
- /* WH becomes H,
- WR becomes R
- W if followed by a vowel */
- case 'W':
- if (Next_Letter == 'H' ||
- Next_Letter == 'R') {
- Phonize(Next_Letter);
- w_idx += 2;
- } else if (isvowel(Next_Letter)) {
- Phonize('W');
- w_idx += 2;
- }
- /* else ignore */
- break;
- /* X becomes S */
- case 'X':
- Phonize('S');
- w_idx++;
- break;
- /* Vowels are kept */
- /* We did A already
- case 'A':
- case 'a':
- */
- case 'E':
- case 'I':
- case 'O':
- case 'U':
- Phonize(Curr_Letter);
- w_idx++;
- break;
- default:
- /* do nothing */
- break;
- }
-
-
-
- /* On to the metaphoning */
- for (; Curr_Letter != '\0' &&
- (max_phonemes == 0 || Phone_Len < max_phonemes);
- w_idx++) {
- /* How many letters to skip because an eariler encoding handled
- * multiple letters */
- unsigned short int skip_letter = 0;
-
-
- /* THOUGHT: It would be nice if, rather than having things like...
- * well, SCI. For SCI you encode the S, then have to remember
- * to skip the C. So the phonome SCI invades both S and C. It would
- * be better, IMHO, to skip the C from the S part of the encoding.
- * Hell, I'm trying it.
- */
-
- /* Ignore non-alphas */
- if (!isalpha(Curr_Letter))
- continue;
-
- /* Drop duplicates, except CC */
- if (Curr_Letter == Prev_Letter &&
- Curr_Letter != 'C')
- continue;
-
- switch (Curr_Letter) {
- /* B -> B unless in MB */
- case 'B':
- if (Prev_Letter != 'M')
- Phonize('B');
- break;
- /* 'sh' if -CIA- or -CH, but not SCH, except SCHW.
- * (SCHW is handled in S)
- * S if -CI-, -CE- or -CY-
- * dropped if -SCI-, SCE-, -SCY- (handed in S)
- * else K
- */
- case 'C':
- if (MAKESOFT(Next_Letter)) { /* C[IEY] */
- if (After_Next_Letter == 'A' &&
- Next_Letter == 'I') { /* CIA */
- Phonize(SH);
- }
- /* SC[IEY] */
- else if (Prev_Letter == 'S') {
- /* Dropped */
- } else {
- Phonize('S');
- }
- } else if (Next_Letter == 'H') {
- if ((!traditional) && (After_Next_Letter == 'R' || Prev_Letter == 'S')) { /* Christ, School */
- Phonize('K');
- } else {
- Phonize(SH);
- }
- skip_letter++;
- } else {
- Phonize('K');
- }
- break;
- /* J if in -DGE-, -DGI- or -DGY-
- * else T
- */
- case 'D':
- if (Next_Letter == 'G' &&
- MAKESOFT(After_Next_Letter)) {
- Phonize('J');
- skip_letter++;
- } else
- Phonize('T');
- break;
- /* F if in -GH and not B--GH, D--GH, -H--GH, -H---GH
- * else dropped if -GNED, -GN,
- * else dropped if -DGE-, -DGI- or -DGY- (handled in D)
- * else J if in -GE-, -GI, -GY and not GG
- * else K
- */
- case 'G':
- if (Next_Letter == 'H') {
- if (!(NOGHTOF(Look_Back_Letter(3)) ||
- Look_Back_Letter(4) == 'H')) {
- Phonize('F');
- skip_letter++;
- } else {
- /* silent */
- }
- } else if (Next_Letter == 'N') {
- if (Isbreak(After_Next_Letter) ||
- (After_Next_Letter == 'E' &&
- Look_Ahead_Letter(3) == 'D')) {
- /* dropped */
- } else
- Phonize('K');
- } else if (MAKESOFT(Next_Letter) &&
- Prev_Letter != 'G') {
- Phonize('J');
- } else {
- Phonize('K');
- }
- break;
- /* H if before a vowel and not after C,G,P,S,T */
- case 'H':
- if (isvowel(Next_Letter) &&
- !AFFECTH(Prev_Letter))
- Phonize('H');
- break;
- /* dropped if after C
- * else K
- */
- case 'K':
- if (Prev_Letter != 'C')
- Phonize('K');
- break;
- /* F if before H
- * else P
- */
- case 'P':
- if (Next_Letter == 'H') {
- Phonize('F');
- } else {
- Phonize('P');
- }
- break;
- /* K
- */
- case 'Q':
- Phonize('K');
- break;
- /* 'sh' in -SH-, -SIO- or -SIA- or -SCHW-
- * else S
- */
- case 'S':
- if (Next_Letter == 'I' &&
- (After_Next_Letter == 'O' ||
- After_Next_Letter == 'A')) {
- Phonize(SH);
- } else if (Next_Letter == 'H') {
- Phonize(SH);
- skip_letter++;
- } else if ((!traditional) && (Next_Letter == 'C' && Look_Ahead_Letter(2) == 'H' && Look_Ahead_Letter(3) == 'W')) {
- Phonize(SH);
- skip_letter += 2;
- } else {
- Phonize('S');
- }
- break;
- /* 'sh' in -TIA- or -TIO-
- * else 'th' before H
- * else T
- */
- case 'T':
- if (Next_Letter == 'I' &&
- (After_Next_Letter == 'O' ||
- After_Next_Letter == 'A')) {
- Phonize(SH);
- } else if (Next_Letter == 'H') {
- Phonize(TH);
- skip_letter++;
- } else {
- Phonize('T');
- }
- break;
- /* F */
- case 'V':
- Phonize('F');
- break;
- /* W before a vowel, else dropped */
- case 'W':
- if (isvowel(Next_Letter))
- Phonize('W');
- break;
- /* KS */
- case 'X':
- Phonize('K');
- Phonize('S');
- break;
- /* Y if followed by a vowel */
- case 'Y':
- if (isvowel(Next_Letter))
- Phonize('Y');
- break;
- /* S */
- case 'Z':
- Phonize('S');
- break;
- /* No transformation */
- case 'F':
- case 'J':
- case 'L':
- case 'M':
- case 'N':
- case 'R':
- Phonize(Curr_Letter);
- break;
- default:
- /* nothing */
- break;
- } /* END SWITCH */
-
- w_idx += skip_letter;
- } /* END FOR */
-
- End_Phoned_Word;
-
- return 0;
-} /* END metaphone */
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/microtime.c b/ext/standard/microtime.c
deleted file mode 100644
index 5d6da7c2fa..0000000000
--- a/ext/standard/microtime.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Paul Panotzki - Bunyip Information Systems |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#else
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-
-#include "microtime.h"
-
-#define NUL '\0'
-#define MICRO_IN_SEC 1000000.00
-
-/* {{{ proto string microtime(void)
- Returns a string containing the current time in seconds and microseconds */
-PHP_FUNCTION(microtime)
-{
-#ifdef HAVE_GETTIMEOFDAY
- struct timeval tp;
- long sec = 0L;
- double msec = 0.0;
- char ret[100];
-
- if (gettimeofday((struct timeval *) &tp, (NUL)) == 0) {
- msec = (double) (tp.tv_usec / MICRO_IN_SEC);
- sec = tp.tv_sec;
-
- if (msec >= 1.0) msec -= (long) msec;
- snprintf(ret, 100, "%.8f %ld", msec, sec);
- RETVAL_STRING(ret,1);
- } else
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array gettimeofday(void)
- Returns the current time as array */
-PHP_FUNCTION(gettimeofday)
-{
-#ifdef HAVE_GETTIMEOFDAY
- struct timeval tp;
- struct timezone tz;
-
- memset(&tp, 0, sizeof(tp));
- memset(&tz, 0, sizeof(tz));
- if(gettimeofday(&tp, &tz) == 0) {
- array_init(return_value);
- add_assoc_long(return_value, "sec", tp.tv_sec);
- add_assoc_long(return_value, "usec", tp.tv_usec);
- add_assoc_long(return_value, "minuteswest", tz.tz_minuteswest);
- add_assoc_long(return_value, "dsttime", tz.tz_dsttime);
- return;
- } else
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_GETRUSAGE
-/* {{{ proto array getrusage([int who])
- Returns an array of usage statistics */
-PHP_FUNCTION(getrusage)
-{
- struct rusage usg;
- int ac = ZEND_NUM_ARGS();
- pval **pwho;
- int who = RUSAGE_SELF;
-
- if(ac == 1 &&
- zend_get_parameters_ex(ac, &pwho) != FAILURE) {
- convert_to_long_ex(pwho);
- if(Z_LVAL_PP(pwho) == 1)
- who = RUSAGE_CHILDREN;
- }
-
- memset(&usg, 0, sizeof(usg));
- if(getrusage(who, &usg) == -1) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-#define PHP_RUSAGE_PARA(a) \
- add_assoc_long(return_value, #a, usg.a)
-#if !defined( _OSD_POSIX) && !defined(__BEOS__) /* BS2000 has only a few fields in the rusage struct */
- PHP_RUSAGE_PARA(ru_oublock);
- PHP_RUSAGE_PARA(ru_inblock);
- PHP_RUSAGE_PARA(ru_msgsnd);
- PHP_RUSAGE_PARA(ru_msgrcv);
- PHP_RUSAGE_PARA(ru_maxrss);
- PHP_RUSAGE_PARA(ru_ixrss);
- PHP_RUSAGE_PARA(ru_idrss);
- PHP_RUSAGE_PARA(ru_minflt);
- PHP_RUSAGE_PARA(ru_majflt);
- PHP_RUSAGE_PARA(ru_nsignals);
- PHP_RUSAGE_PARA(ru_nvcsw);
- PHP_RUSAGE_PARA(ru_nivcsw);
-#endif /*_OSD_POSIX*/
- PHP_RUSAGE_PARA(ru_utime.tv_usec);
- PHP_RUSAGE_PARA(ru_utime.tv_sec);
- PHP_RUSAGE_PARA(ru_stime.tv_usec);
- PHP_RUSAGE_PARA(ru_stime.tv_sec);
-#undef PHP_RUSAGE_PARA
-}
-#endif /* HAVE_GETRUSAGE */
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/microtime.h b/ext/standard/microtime.h
deleted file mode 100644
index 9ce3825104..0000000000
--- a/ext/standard/microtime.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Paul Panotzki - Bunyip Information Systems |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef MICROTIME_H
-#define MICROTIME_H
-
-PHP_FUNCTION(microtime);
-PHP_FUNCTION(gettimeofday);
-PHP_FUNCTION(getrusage);
-
-#endif /* MICROTIME_H */
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
deleted file mode 100644
index 029e621212..0000000000
--- a/ext/standard/pack.c
+++ /dev/null
@@ -1,903 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Chris Schneider <cschneid@relog.ch> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef PHP_WIN32
-#include <windows.h>
-#include <winsock.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#else
-#include <sys/param.h>
-#endif
-#include "ext/standard/head.h"
-#include "safe_mode.h"
-#include "php_string.h"
-#include "pack.h"
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#include "fsock.h"
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-/* Whether machine is little endian */
-char machine_little_endian;
-
-/* Mapping of byte from char (8bit) to long for machine endian */
-static int byte_map[1];
-
-/* Mappings of bytes from int (machine dependant) to int for machine endian */
-static int int_map[sizeof(int)];
-
-/* Mappings of bytes from shorts (16bit) for all endian environments */
-static int machine_endian_short_map[2];
-static int big_endian_short_map[2];
-static int little_endian_short_map[2];
-
-/* Mappings of bytes from longs (32bit) for all endian environments */
-static int machine_endian_long_map[4];
-static int big_endian_long_map[4];
-static int little_endian_long_map[4];
-
-/* {{{ php_pack
- */
-static void php_pack(zval **val, int size, int *map, char *output)
-{
- int i;
- char *v;
-
- convert_to_long_ex(val);
- v = (char *) &Z_LVAL_PP(val);
-
- for (i = 0; i < size; i++) {
- *output++ = v[map[i]];
- }
-}
-/* }}} */
-
-/* pack() idea stolen from Perl (implemented formats behave the same as there)
- * Implemented formats are A, a, h, H, c, C, s, S, i, I, l, L, n, N, f, d, x, X, @.
- */
-/* {{{ proto string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])
- Takes one or more arguments and packs them into a binary string according to the format argument */
-PHP_FUNCTION(pack)
-{
- zval ***argv;
- int argc, i;
- int currentarg;
- char *format;
- int formatlen;
- char *formatcodes;
- int *formatargs;
- int formatcount = 0;
- int outputpos = 0, outputsize = 0;
- char *output;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- argv = emalloc(argc * sizeof(zval **));
-
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- efree(argv);
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(argv[0]);
- format = Z_STRVAL_PP(argv[0]);
- formatlen = Z_STRLEN_PP(argv[0]);
-
- /* We have a maximum of <formatlen> format codes to deal with */
- formatcodes = emalloc(formatlen * sizeof(*formatcodes));
- formatargs = emalloc(formatlen * sizeof(*formatargs));
- currentarg = 1;
-
- /* Preprocess format into formatcodes and formatargs */
- for (i = 0; i < formatlen; formatcount++) {
- char code = format[i++];
- int arg = 1;
-
- /* Handle format arguments if any */
- if (i < formatlen) {
- char c = format[i];
-
- if (c == '*') {
- arg = -1;
- i++;
- }
- else if (c >= '0' && c <= '9') {
- arg = atoi(&format[i]);
-
- while (format[i] >= '0' && format[i] <= '9' && i < formatlen) {
- i++;
- }
- }
- }
-
- /* Handle special arg '*' for all codes and check argv overflows */
- switch ((int) code) {
- /* Never uses any args */
- case 'x':
- case 'X':
- case '@':
- if (arg < 0) {
- php_error(E_WARNING, "pack type %c: '*' ignored", code);
- arg = 1;
- }
- break;
-
- /* Always uses one arg */
- case 'a':
- case 'A':
- case 'h':
- case 'H':
- if (currentarg >= argc) {
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- php_error(E_WARNING, "pack type %c: not enough arguments", code);
- RETURN_FALSE;
- }
-
- if (arg < 0) {
- arg = Z_STRLEN_PP(argv[currentarg]);
- }
-
- currentarg++;
- break;
-
- /* Use as many args as specified */
- case 'c':
- case 'C':
- case 's':
- case 'S':
- case 'i':
- case 'I':
- case 'l':
- case 'L':
- case 'n':
- case 'N':
- case 'v':
- case 'V':
- case 'f':
- case 'd':
- if (arg < 0) {
- arg = argc - currentarg;
- }
-
- currentarg += arg;
-
- if (currentarg > argc) {
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- php_error(E_WARNING, "pack type %c: too few arguments", code);
- RETURN_FALSE;
- }
- break;
-
- default:
- php_error(E_WARNING, "pack type %c: unknown format code", code);
- RETURN_FALSE;
- }
-
- formatcodes[formatcount] = code;
- formatargs[formatcount] = arg;
- }
-
- if (currentarg < argc) {
- php_error(E_WARNING, "pack %d arguments unused", (argc - currentarg));
- }
-
- /* Calculate output length and upper bound while processing*/
- for (i = 0; i < formatcount; i++) {
- int code = (int) formatcodes[i];
- int arg = formatargs[i];
-
- switch ((int) code) {
- case 'h':
- case 'H':
- outputpos += (arg + 1) / 2; /* 4 bit per arg */
- break;
-
- case 'a':
- case 'A':
- case 'c':
- case 'C':
- case 'x':
- outputpos += arg; /* 8 bit per arg */
- break;
-
- case 's':
- case 'S':
- case 'n':
- case 'v':
- outputpos += arg * 2; /* 16 bit per arg */
- break;
-
- case 'i':
- case 'I':
- outputpos += arg * sizeof(int);
- break;
-
- case 'l':
- case 'L':
- case 'N':
- case 'V':
- outputpos += arg * 4; /* 32 bit per arg */
- break;
-
- case 'f':
- outputpos += arg * sizeof(float);
- break;
-
- case 'd':
- outputpos += arg * sizeof(double);
- break;
-
- case 'X':
- outputpos -= arg;
-
- if (outputpos < 0) {
- php_error(E_WARNING, "pack type %c: outside of string", code);
- outputpos = 0;
- }
- break;
-
- case '@':
- outputpos = arg;
- break;
- }
-
- if (outputsize < outputpos) {
- outputsize = outputpos;
- }
- }
-
- output = emalloc(outputsize + 1);
- outputpos = 0;
- currentarg = 1;
-
- /* Do actual packing */
- for (i = 0; i < formatcount; i++) {
- int code = (int) formatcodes[i];
- int arg = formatargs[i];
- zval **val;
-
- switch ((int) code) {
- case 'a':
- case 'A':
- memset(&output[outputpos], (code == 'a') ? '\0' : ' ', arg);
- val = argv[currentarg++];
- convert_to_string_ex(val);
- memcpy(&output[outputpos], Z_STRVAL_PP(val),
- (Z_STRLEN_PP(val) < arg) ? Z_STRLEN_PP(val) : arg);
- outputpos += arg;
- break;
-
- case 'h':
- case 'H': {
- int nibbleshift = (code == 'h') ? 0 : 4;
- int first = 1;
- char *v;
-
- val = argv[currentarg++];
- convert_to_string_ex(val);
- v = Z_STRVAL_PP(val);
- outputpos--;
- if(arg > Z_STRLEN_PP(val)) {
- php_error(E_WARNING, "pack type %c: not enough characters in string", code);
- arg = Z_STRLEN_PP(val);
- }
-
- while (arg-- > 0) {
- char n = *v++;
-
- if (n >= '0' && n <= '9') {
- n -= '0';
- } else if (n >= 'A' && n <= 'F') {
- n -= ('A' - 10);
- } else if (n >= 'a' && n <= 'f') {
- n -= ('a' - 10);
- } else {
- php_error(E_WARNING, "pack type %c: illegal hex digit %c", code, n);
- n = 0;
- }
-
- if (first--) {
- output[++outputpos] = 0;
- } else {
- first = 1;
- }
-
- output[outputpos] |= (n << nibbleshift);
- nibbleshift = (nibbleshift + 4) & 7;
- }
-
- outputpos++;
- break;
- }
-
- case 'c':
- case 'C':
- while (arg-- > 0) {
- php_pack(argv[currentarg++], 1, byte_map, &output[outputpos]);
- outputpos++;
- }
- break;
-
- case 's':
- case 'S':
- case 'n':
- case 'v': {
- int *map = machine_endian_short_map;
-
- if (code == 'n') {
- map = big_endian_short_map;
- } else if (code == 'v') {
- map = little_endian_short_map;
- }
-
- while (arg-- > 0) {
- php_pack(argv[currentarg++], 2, map, &output[outputpos]);
- outputpos += 2;
- }
- break;
- }
-
- case 'i':
- case 'I':
- while (arg-- > 0) {
- php_pack(argv[currentarg++], sizeof(int), int_map, &output[outputpos]);
- outputpos += sizeof(int);
- }
- break;
-
- case 'l':
- case 'L':
- case 'N':
- case 'V': {
- int *map = machine_endian_long_map;
-
- if (code == 'N') {
- map = big_endian_long_map;
- } else if (code == 'V') {
- map = little_endian_long_map;
- }
-
- while (arg-- > 0) {
- php_pack(argv[currentarg++], 4, map, &output[outputpos]);
- outputpos += 4;
- }
- break;
- }
-
- case 'f': {
- float v;
-
- while (arg-- > 0) {
- val = argv[currentarg++];
- convert_to_double_ex(val);
- v = (float) Z_DVAL_PP(val);
- memcpy(&output[outputpos], &v, sizeof(v));
- outputpos += sizeof(v);
- }
- break;
- }
-
- case 'd': {
- double v;
-
- while (arg-- > 0) {
- val = argv[currentarg++];
- convert_to_double_ex(val);
- v = (double) Z_DVAL_PP(val);
- memcpy(&output[outputpos], &v, sizeof(v));
- outputpos += sizeof(v);
- }
- break;
- }
-
- case 'x':
- memset(&output[outputpos], '\0', arg);
- outputpos += arg;
- break;
-
- case 'X':
- outputpos -= arg;
-
- if (outputpos < 0) {
- outputpos = 0;
- }
- break;
-
- case '@':
- if (arg > outputpos) {
- memset(&output[outputpos], '\0', arg - outputpos);
- }
- outputpos = arg;
- break;
- }
- }
-
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- output[outputpos] = '\0';
- RETVAL_STRINGL(output, outputpos, 1);
- efree(output);
-}
-/* }}} */
-
-/* {{{ php_unpack
- */
-static long php_unpack(char *data, int size, int issigned, int *map)
-{
- long result;
- char *cresult = (char *) &result;
- int i;
-
- result = issigned ? -1 : 0;
-
- for (i = 0; i < size; i++) {
- cresult[map[i]] = *data++;
- }
-
- return result;
-}
-/* }}} */
-
-/* unpack() is based on Perl's unpack(), but is modified a bit from there.
- * Rather than depending on error-prone ordered lists or syntactically
- * unpleasant pass-by-reference, we return an object with named paramters
- * (like *_fetch_object()). Syntax is "f[repeat]name/...", where "f" is the
- * formatter char (like pack()), "[repeat]" is the optional repeater argument,
- * and "name" is the name of the variable to use.
- * Example: "c2chars/nints" will return an object with fields
- * chars1, chars2, and ints.
- * Numeric pack types will return numbers, a and A will return strings,
- * f and d will return doubles.
- * Implemented formats are A, a, h, H, c, C, s, S, i, I, l, L, n, N, f, d, x, X, @.
- */
-/* {{{ proto array unpack(string format, string input)
- Unpack binary string into named array elements according to format argument */
-PHP_FUNCTION(unpack)
-{
- zval **formatarg;
- zval **inputarg;
- char *format;
- char *input;
- int formatlen;
- int inputpos, inputlen;
- int i;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &formatarg, &inputarg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(formatarg);
- convert_to_string_ex(inputarg);
-
- format = Z_STRVAL_PP(formatarg);
- formatlen = Z_STRLEN_PP(formatarg);
- input = Z_STRVAL_PP(inputarg);
- inputlen = Z_STRLEN_PP(inputarg);
- inputpos = 0;
-
- if (array_init(return_value) == FAILURE)
- return;
-
- while (formatlen-- > 0) {
- char type = *(format++);
- char c;
- int arg = 1;
- char *name;
- int namelen;
- int size=0;
-
- /* Handle format arguments if any */
- if (formatlen > 0) {
- c = *format;
-
- if (c >= '0' && c <= '9') {
- arg = atoi(format);
-
- while (formatlen > 0 && *format >= '0' && *format <= '9') {
- format++;
- formatlen--;
- }
- } else if (c == '*') {
- arg = -1;
- format++;
- formatlen--;
- }
- }
-
- /* Get of new value in array */
- name = format;
-
- while (formatlen > 0 && *format != '/') {
- formatlen--;
- format++;
- }
-
- namelen = format - name;
-
- if (namelen > 200)
- namelen = 200;
-
- switch ((int) type) {
- /* Never use any input */
- case 'X':
- size = -1;
- break;
-
- case '@':
- size = 0;
- break;
-
- case 'a':
- case 'A':
- size = arg;
- arg = 1;
- break;
-
- case 'h':
- case 'H':
- size = (arg > 0) ? arg / 2 : arg;
- arg = 1;
- break;
-
- /* Use 1 byte of input */
- case 'c':
- case 'C':
- case 'x':
- size = 1;
- break;
-
- /* Use 2 bytes of input */
- case 's':
- case 'S':
- case 'n':
- case 'v':
- size = 2;
- break;
-
- /* Use sizeof(int) bytes of input */
- case 'i':
- case 'I':
- size = sizeof(int);
- break;
-
- /* Use 4 bytes of input */
- case 'l':
- case 'L':
- case 'N':
- case 'V':
- size = 4;
- break;
-
- /* Use sizeof(float) bytes of input */
- case 'f':
- size = sizeof(float);
- break;
-
- /* Use sizeof(double) bytes of input */
- case 'd':
- size = sizeof(double);
- break;
- }
-
- /* Do actual unpacking */
- for (i = 0; i != arg; i++ ) {
- /* Space for name + number, safe as namelen is ensured <= 200 */
- char n[256];
-
- if (arg != 1) {
- /* Need to add element number to name */
- sprintf(n, "%.*s%d", namelen, name, i + 1);
- } else {
- /* Truncate name to next format code or end of string */
- sprintf(n, "%.*s", namelen, name);
- }
-
- if ((inputpos + size) <= inputlen) {
- switch ((int) type) {
- case 'a':
- case 'A': {
- char pad = (type == 'a') ? '\0' : ' ';
- int len = inputlen - inputpos; /* Remaining string */
-
- /* If size was given take minimum of len and size */
- if ((size >= 0) && (len > size)) {
- len = size;
- }
-
- size = len;
-
- /* Remove padding chars from unpacked data */
- while (--len >= 0) {
- if (input[inputpos + len] != pad)
- break;
- }
-
- add_assoc_stringl(return_value, n, &input[inputpos], len + 1, 1);
- break;
- }
-
- case 'h':
- case 'H': {
- int len = (inputlen - inputpos) * 2; /* Remaining */
- int nibbleshift = (type == 'h') ? 0 : 4;
- int first = 1;
- char *buf;
- int ipos, opos;
-
- /* If size was given take minimum of len and size */
- if (size >= 0 && len > (size * 2)) {
- len = size * 2;
- }
-
- buf = emalloc(len + 1);
-
- for (ipos = opos = 0; opos < len; opos++) {
- char c = (input[inputpos + ipos] >> nibbleshift) & 0xf;
-
- if (c < 10) {
- c += '0';
- } else {
- c += 'a' - 10;
- }
-
- buf[opos] = c;
- nibbleshift = (nibbleshift + 4) & 7;
-
- if (first-- == 0) {
- ipos++;
- first = 1;
- }
- }
-
- buf[len] = '\0';
- add_assoc_stringl(return_value, n, buf, len, 1);
- efree(buf);
- break;
- }
-
- case 'c':
- case 'C': {
- int issigned = (type == 'c') ? (input[inputpos] & 0x80) : 0;
- long v = php_unpack(&input[inputpos], 1, issigned, byte_map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 's':
- case 'S':
- case 'n':
- case 'v': {
- long v;
- int issigned = 0;
- int *map = machine_endian_short_map;
-
- if (type == 's') {
- issigned = input[inputpos + (machine_little_endian ? 1 : 0)] & 0x80;
- } else if (type == 'n') {
- map = big_endian_short_map;
- } else if (type == 'v') {
- map = little_endian_short_map;
- }
-
- v = php_unpack(&input[inputpos], 2, issigned, map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 'i':
- case 'I': {
- long v;
- int issigned = 0;
-
- if (type == 'i') {
- issigned = input[inputpos + (machine_little_endian ? (sizeof(int) - 1) : 0)] & 0x80;
- }
-
- v = php_unpack(&input[inputpos], sizeof(int), issigned, int_map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 'l':
- case 'L':
- case 'N':
- case 'V': {
- int issigned = 0;
- int *map = machine_endian_long_map;
- long v;
-
- if (type == 'l') {
- issigned = input[inputpos + (machine_little_endian ? 3 : 0)] & 0x80;
- } else if (type == 'N') {
- map = big_endian_long_map;
- } else if (type == 'V') {
- map = little_endian_long_map;
- }
-
- v = php_unpack(&input[inputpos], 4, issigned, map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 'f': {
- float v;
-
- memcpy(&v, &input[inputpos], sizeof(float));
- add_assoc_double(return_value, n, (double)v);
- break;
- }
-
- case 'd': {
- double v;
-
- memcpy(&v, &input[inputpos], sizeof(double));
- add_assoc_double(return_value, n, v);
- break;
- }
-
- case 'x':
- /* Do nothing with input, just skip it */
- break;
-
- case 'X':
- if (inputpos < size) {
- inputpos = -size;
- i = arg - 1; /* Break out of for loop */
-
- if (arg >= 0) {
- php_error(E_WARNING, "pack type %c: outside of string", type);
- }
- }
- break;
-
- case '@':
- if (arg <= inputlen) {
- inputpos = arg;
- } else {
- php_error(E_WARNING, "pack type %c: outside of string", type);
- }
-
- i = arg - 1; /* Done, break out of for loop */
- break;
- }
-
- inputpos += size;
- } else if (arg < 0) {
- /* Reached end of input for '*' repeater */
- break;
- } else {
- php_error(E_WARNING, "pack type %c: not enough input, need %d, have %d", type, size, inputlen - inputpos);
- RETURN_FALSE;
- }
- }
-
- formatlen--; /* Skip '/' separator, does no harm if inputlen == 0 */
- format++;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pack)
-{
- int machine_endian_check = 1;
- int i;
-
- machine_little_endian = ((char *)&machine_endian_check)[0];
-
- if (machine_little_endian) {
- /* Where to get lo to hi bytes from */
- byte_map[0] = 0;
-
- for (i = 0; i < sizeof(int); i++) {
- int_map[i] = i;
- }
-
- machine_endian_short_map[0] = 0;
- machine_endian_short_map[1] = 1;
- big_endian_short_map[0] = 1;
- big_endian_short_map[1] = 0;
- little_endian_short_map[0] = 0;
- little_endian_short_map[1] = 1;
-
- machine_endian_long_map[0] = 0;
- machine_endian_long_map[1] = 1;
- machine_endian_long_map[2] = 2;
- machine_endian_long_map[3] = 3;
- big_endian_long_map[0] = 3;
- big_endian_long_map[1] = 2;
- big_endian_long_map[2] = 1;
- big_endian_long_map[3] = 0;
- little_endian_long_map[0] = 0;
- little_endian_long_map[1] = 1;
- little_endian_long_map[2] = 2;
- little_endian_long_map[3] = 3;
- }
- else {
- zval val;
- int size = sizeof(Z_LVAL(val));
- Z_LVAL(val)=0; /*silence a warning*/
-
- /* Where to get hi to lo bytes from */
- byte_map[0] = size - 1;
-
- for (i = 0; i < sizeof(int); i++) {
- int_map[i] = size - (sizeof(int) - i);
- }
-
- machine_endian_short_map[0] = size - 2;
- machine_endian_short_map[1] = size - 1;
- big_endian_short_map[0] = size - 2;
- big_endian_short_map[1] = size - 1;
- little_endian_short_map[0] = size - 1;
- little_endian_short_map[1] = size - 2;
-
- machine_endian_long_map[0] = size - 4;
- machine_endian_long_map[1] = size - 3;
- machine_endian_long_map[2] = size - 2;
- machine_endian_long_map[3] = size - 1;
- big_endian_long_map[0] = size - 4;
- big_endian_long_map[1] = size - 3;
- big_endian_long_map[2] = size - 2;
- big_endian_long_map[3] = size - 1;
- little_endian_long_map[0] = size - 1;
- little_endian_long_map[1] = size - 2;
- little_endian_long_map[2] = size - 3;
- little_endian_long_map[3] = size - 4;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/pack.h b/ext/standard/pack.h
deleted file mode 100644
index cd6ec673c1..0000000000
--- a/ext/standard/pack.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PACK_H
-#define PACK_H
-
-PHP_MINIT_FUNCTION(pack);
-PHP_FUNCTION(pack);
-PHP_FUNCTION(unpack);
-
-#endif /* PACK_H */
diff --git a/ext/standard/pageinfo.c b/ext/standard/pageinfo.c
deleted file mode 100644
index e1ea9c54f2..0000000000
--- a/ext/standard/pageinfo.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "pageinfo.h"
-#include "SAPI.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-#ifdef PHP_WIN32
-#include <process.h>
-#endif
-
-#include "ext/standard/basic_functions.h"
-
-/* {{{ php_statpage
- */
-PHPAPI void php_statpage(TSRMLS_D)
-{
- struct stat *pstat;
-
- pstat = sapi_get_stat(TSRMLS_C);
-
- if (BG(page_uid)==-1 || BG(page_gid)==-1) {
- if(pstat) {
- BG(page_uid) = pstat->st_uid;
- BG(page_gid) = pstat->st_gid;
- BG(page_inode) = pstat->st_ino;
- BG(page_mtime) = pstat->st_mtime;
- }
- }
-}
-/* }}} */
-
-/* {{{ php_getuid
- */
-long php_getuid(void)
-{
- TSRMLS_FETCH();
-
- php_statpage(TSRMLS_C);
- return (BG(page_uid));
-}
-/* }}} */
-
-long php_getgid(void)
-{
- TSRMLS_FETCH();
-
- php_statpage(TSRMLS_C);
- return (BG(page_gid));
-}
-
-/* {{{ proto int getmyuid(void)
- Get PHP script owner's UID */
-PHP_FUNCTION(getmyuid)
-{
- long uid;
-
- uid = php_getuid();
- if (uid < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(uid);
- }
-}
-/* }}} */
-
-/* {{{ proto int getmygid(void)
- Get PHP script owner's GID */
-PHP_FUNCTION(getmygid)
-{
- long gid;
-
- gid = php_getgid();
- if (gid < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(gid);
- }
-}
-/* }}} */
-
-/* {{{ proto int getmypid(void)
- Get current process ID */
-PHP_FUNCTION(getmypid)
-{
- int pid;
-
- pid = getpid();
- if (pid < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG((long) pid);
- }
-}
-/* }}} */
-
-/* {{{ proto int getmyinode(void)
- Get the inode of the current script being parsed */
-PHP_FUNCTION(getmyinode)
-{
- php_statpage(TSRMLS_C);
- if (BG(page_inode) < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(BG(page_inode));
- }
-}
-/* }}} */
-
-PHPAPI long php_getlastmod(TSRMLS_D)
-{
- php_statpage(TSRMLS_C);
- return BG(page_mtime);
-}
-
-/* {{{ proto int getlastmod(void)
- Get time of last page modification */
-PHP_FUNCTION(getlastmod)
-{
- long lm = php_getlastmod(TSRMLS_C);
- if (lm < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(lm);
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/pageinfo.h b/ext/standard/pageinfo.h
deleted file mode 100644
index b70d8c63b5..0000000000
--- a/ext/standard/pageinfo.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PAGEINFO_H
-#define PAGEINFO_H
-
-PHP_FUNCTION(getmyuid);
-PHP_FUNCTION(getmygid);
-PHP_FUNCTION(getmypid);
-PHP_FUNCTION(getmyinode);
-PHP_FUNCTION(getlastmod);
-
-PHPAPI void php_statpage(TSRMLS_D);
-PHPAPI long php_getlastmod(TSRMLS_D);
-extern long php_getuid(void);
-extern long php_getgid(void);
-
-#endif
diff --git a/ext/standard/parsedate.y b/ext/standard/parsedate.y
deleted file mode 100644
index 7112b611b7..0000000000
--- a/ext/standard/parsedate.y
+++ /dev/null
@@ -1,1041 +0,0 @@
-%{
-/*
-** Originally written by Steven M. Bellovin <smb@research.att.com> while
-** at the University of North Carolina at Chapel Hill. Later tweaked by
-** a couple of people on Usenet. Completely overhauled by Rich $alz
-** <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
-**
-** This code is in the public domain and has no copyright.
-*/
-
-#include "php.h"
-
-#ifdef PHP_WIN32
-#include <malloc.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <time.h>
-#include <ctype.h>
-
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#ifdef PHP_WIN32
-# include "win32/time.h"
-#endif
-
-#include "php_parsedate.h"
-
-#if HAVE_STDLIB_H
-# include <stdlib.h> /* for `free'; used by Bison 1.27 */
-#endif
-
-#if defined(_HPUX_SOURCE)
-#include <alloca.h>
-#endif
-
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
-#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
-#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
-
-/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
- - Its arg may be any int or unsigned int; it need not be an unsigned char.
- - It's guaranteed to evaluate its argument exactly once.
- - It's typically faster.
- Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
- only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless
- it's important to use the locale's definition of `digit' even when the
- host does not conform to Posix. */
-#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
-
-#if defined (STDC_HEADERS) || defined (USG)
-# include <string.h>
-#endif
-
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(x)
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-/* Some old versions of bison generate parsers that use bcopy.
- That loses on systems that don't provide the function, so we have
- to redefine it here. */
-#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
-# define bcopy(from, to, len) memcpy ((to), (from), (len))
-#endif
-
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
- as well as gratuitiously global symbol names, so we can have multiple
- yacc generated parsers in the same program. Note that these are only
- the variables produced by yacc. If other parser generators (bison,
- byacc, etc) produce additional global names that conflict at link time,
- then those parser generators need to be fixed instead of adding those
- names to this list. */
-
-#define yymaxdepth php_gd_maxdepth
-#define yyparse php_gd_parse
-#define yylex php_gd_lex
-#define yyerror php_gd_error
-#define yylval php_gd_lval
-#define yychar php_gd_char
-#define yydebug php_gd_debug
-#define yypact php_gd_pact
-#define yyr1 php_gd_r1
-#define yyr2 php_gd_r2
-#define yydef php_gd_def
-#define yychk php_gd_chk
-#define yypgo php_gd_pgo
-#define yyact php_gd_act
-#define yyexca php_gd_exca
-#define yyerrflag php_gd_errflag
-#define yynerrs php_gd_nerrs
-#define yyps php_gd_ps
-#define yypv php_gd_pv
-#define yys php_gd_s
-#define yy_yys php_gd_yys
-#define yystate php_gd_state
-#define yytmp php_gd_tmp
-#define yyv php_gd_v
-#define yy_yyv php_gd_yyv
-#define yyval php_gd_val
-#define yylloc php_gd_lloc
-#define yyreds php_gd_reds /* With YYDEBUG defined */
-#define yytoks php_gd_toks /* With YYDEBUG defined */
-#define yylhs php_gd_yylhs
-#define yylen php_gd_yylen
-#define yydefred php_gd_yydefred
-#define yydgoto php_gd_yydgoto
-#define yysindex php_gd_yysindex
-#define yyrindex php_gd_yyrindex
-#define yygindex php_gd_yygindex
-#define yytable php_gd_yytable
-#define yycheck php_gd_yycheck
-
-static int yylex ();
-static int yyerror ();
-
-#define EPOCH 1970
-#define HOUR(x) ((x) * 60)
-
-#define MAX_BUFF_LEN 128 /* size of buffer to read the date into */
-
-/*
-** An entry in the lexical lookup table.
-*/
-typedef struct _TABLE {
- const char *name;
- int type;
- int value;
-} TABLE;
-
-
-/*
-** Meridian: am, pm, or 24-hour style.
-*/
-typedef enum _MERIDIAN {
- MERam, MERpm, MER24
-} MERIDIAN;
-
-
-/*
-** Global variables. We could get rid of most of these by using a good
-** union as the yacc stack. (This routine was originally written before
-** yacc had the %union construct.) Maybe someday; right now we only use
-** the %union very rarely.
-*/
-static const char *yyInput;
-static int yyDayOrdinal;
-static int yyDayNumber;
-static int yyHaveDate;
-static int yyHaveDay;
-static int yyHaveRel;
-static int yyHaveTime;
-static int yyHaveZone;
-static int yyTimezone;
-static int yyDay;
-static int yyHour;
-static int yyMinutes;
-static int yyMonth;
-static int yySeconds;
-static int yyYear;
-static MERIDIAN yyMeridian;
-static int yyRelDay;
-static int yyRelHour;
-static int yyRelMinutes;
-static int yyRelMonth;
-static int yyRelSeconds;
-static int yyRelYear;
-
-%}
-
-/* This grammar has 14 shift/reduce conflicts. */
-%expect 14
-
-%union {
- int Number;
- enum _MERIDIAN Meridian;
-}
-
-%token tAGO tDAY tDAY_UNIT tDAYZONE tDST tHOUR_UNIT tID
-%token tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT
-%token tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
-
-%type <Number> tDAY tDAY_UNIT tDAYZONE tHOUR_UNIT tMINUTE_UNIT
-%type <Number> tMONTH tMONTH_UNIT
-%type <Number> tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
-%type <Meridian> tMERIDIAN o_merid
-
-%%
-
-spec : /* NULL */
- | spec item
- ;
-
-item : time {
- yyHaveTime++;
- }
- | zone {
- yyHaveZone++;
- }
- | date {
- yyHaveDate++;
- }
- | day {
- yyHaveDay++;
- }
- | rel {
- yyHaveRel++;
- }
- | number
- ;
-
-time : tUNUMBER tMERIDIAN {
- yyHour = $1;
- yyMinutes = 0;
- yySeconds = 0;
- yyMeridian = $2;
- }
- | tUNUMBER ':' tUNUMBER o_merid {
- yyHour = $1;
- yyMinutes = $3;
- yySeconds = 0;
- yyMeridian = $4;
- }
- | tUNUMBER ':' tUNUMBER tSNUMBER {
- yyHour = $1;
- yyMinutes = $3;
- yyMeridian = MER24;
- yyHaveZone++;
- yyTimezone = ($4 < 0
- ? -$4 % 100 + (-$4 / 100) * 60
- : - ($4 % 100 + ($4 / 100) * 60));
- }
- | tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
- yyHour = $1;
- yyMinutes = $3;
- yySeconds = $5;
- yyMeridian = $6;
- }
- | tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER {
- /* ISO 8601 format. hh:mm:ss[+-][0-9]{2}([0-9]{2})?. */
- yyHour = $1;
- yyMinutes = $3;
- yySeconds = $5;
- yyMeridian = MER24;
- yyHaveZone++;
- if ($6 <= -100 || $6 >= 100) {
- yyTimezone = -$6 % 100 + (-$6 / 100) * 60;
- } else {
- yyTimezone = -$6 * 60;
- }
- }
- ;
-
-zone : tZONE {
- yyTimezone = $1;
- }
- | tDAYZONE {
- yyTimezone = $1 - 60;
- }
- |
- tZONE tDST {
- yyTimezone = $1 - 60;
- }
- ;
-
-day : tDAY {
- yyDayOrdinal = 1;
- yyDayNumber = $1;
- }
- | tDAY ',' {
- yyDayOrdinal = 1;
- yyDayNumber = $1;
- }
- | tUNUMBER tDAY {
- yyDayOrdinal = $1;
- yyDayNumber = $2;
- }
- ;
-
-date : tUNUMBER '/' tUNUMBER {
- yyMonth = $1;
- yyDay = $3;
- }
- | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
- /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
- The goal in recognizing YYYY/MM/DD is solely to support legacy
- machine-generated dates like those in an RCS log listing. If
- you want portability, use the ISO 8601 format. */
- if ($1 >= 1000)
- {
- yyYear = $1;
- yyMonth = $3;
- yyDay = $5;
- }
- else
- {
- yyMonth = $1;
- yyDay = $3;
- yyYear = $5;
- }
- }
- | tUNUMBER tSNUMBER tSNUMBER {
- /* ISO 8601 format. yyyy-mm-dd. */
- yyYear = $1;
- yyMonth = -$2;
- yyDay = -$3;
- }
- | tUNUMBER tMONTH tSNUMBER {
- /* e.g. 17-JUN-1992. */
- yyDay = $1;
- yyMonth = $2;
- yyYear = -$3;
- }
- | tMONTH tUNUMBER tUNUMBER {
- yyMonth = $1;
- yyDay = $2;
- yyYear = $3;
- }
- | tMONTH tUNUMBER {
- yyMonth = $1;
- yyDay = $2;
- }
- | tMONTH tUNUMBER ',' tUNUMBER {
- yyMonth = $1;
- yyDay = $2;
- yyYear = $4;
- }
- | tUNUMBER tMONTH {
- yyMonth = $2;
- yyDay = $1;
- }
- | tUNUMBER tMONTH tUNUMBER {
- yyMonth = $2;
- yyDay = $1;
- yyYear = $3;
- }
- ;
-
-rel : relunit tAGO {
- yyRelSeconds = -yyRelSeconds;
- yyRelMinutes = -yyRelMinutes;
- yyRelHour = -yyRelHour;
- yyRelDay = -yyRelDay;
- yyRelMonth = -yyRelMonth;
- yyRelYear = -yyRelYear;
- }
- | relunit
- ;
-
-relunit : tUNUMBER tYEAR_UNIT {
- yyRelYear += $1 * $2;
- }
- | tSNUMBER tYEAR_UNIT {
- yyRelYear += $1 * $2;
- }
- | tYEAR_UNIT {
- yyRelYear += $1;
- }
- | tUNUMBER tMONTH_UNIT {
- yyRelMonth += $1 * $2;
- }
- | tSNUMBER tMONTH_UNIT {
- yyRelMonth += $1 * $2;
- }
- | tMONTH_UNIT {
- yyRelMonth += $1;
- }
- | tUNUMBER tDAY_UNIT {
- yyRelDay += $1 * $2;
- }
- | tSNUMBER tDAY_UNIT {
- yyRelDay += $1 * $2;
- }
- | tDAY_UNIT {
- yyRelDay += $1;
- }
- | tUNUMBER tHOUR_UNIT {
- yyRelHour += $1 * $2;
- }
- | tSNUMBER tHOUR_UNIT {
- yyRelHour += $1 * $2;
- }
- | tHOUR_UNIT {
- yyRelHour += $1;
- }
- | tUNUMBER tMINUTE_UNIT {
- yyRelMinutes += $1 * $2;
- }
- | tSNUMBER tMINUTE_UNIT {
- yyRelMinutes += $1 * $2;
- }
- | tMINUTE_UNIT {
- yyRelMinutes += $1;
- }
- | tUNUMBER tSEC_UNIT {
- yyRelSeconds += $1 * $2;
- }
- | tSNUMBER tSEC_UNIT {
- yyRelSeconds += $1 * $2;
- }
- | tSEC_UNIT {
- yyRelSeconds += $1;
- }
- ;
-
-number : tUNUMBER
- {
- if (yyHaveTime && yyHaveDate && !yyHaveRel)
- yyYear = $1;
- else
- {
- if ($1>10000)
- {
- yyHaveDate++;
- yyDay= ($1)%100;
- yyMonth= ($1/100)%100;
- yyYear = $1/10000;
- }
- else
- {
- yyHaveTime++;
- if ($1 < 100)
- {
- yyHour = $1;
- yyMinutes = 0;
- }
- else
- {
- yyHour = $1 / 100;
- yyMinutes = $1 % 100;
- }
- yySeconds = 0;
- yyMeridian = MER24;
- }
- }
- }
- ;
-
-o_merid : /* NULL */
- {
- $$ = MER24;
- }
- | tMERIDIAN
- {
- $$ = $1;
- }
- ;
-
-%%
-
-time_t get_date (char *p, time_t *now);
-
-#ifndef PHP_WIN32
-extern struct tm *gmtime();
-extern struct tm *localtime();
-extern time_t mktime();
-#endif
-
-/* Month and day table. */
-static TABLE const MonthDayTable[] = {
- { "january", tMONTH, 1 },
- { "february", tMONTH, 2 },
- { "march", tMONTH, 3 },
- { "april", tMONTH, 4 },
- { "may", tMONTH, 5 },
- { "june", tMONTH, 6 },
- { "july", tMONTH, 7 },
- { "august", tMONTH, 8 },
- { "september", tMONTH, 9 },
- { "sept", tMONTH, 9 },
- { "october", tMONTH, 10 },
- { "november", tMONTH, 11 },
- { "december", tMONTH, 12 },
- { "sunday", tDAY, 0 },
- { "monday", tDAY, 1 },
- { "tuesday", tDAY, 2 },
- { "tues", tDAY, 2 },
- { "wednesday", tDAY, 3 },
- { "wednes", tDAY, 3 },
- { "thursday", tDAY, 4 },
- { "thur", tDAY, 4 },
- { "thurs", tDAY, 4 },
- { "friday", tDAY, 5 },
- { "saturday", tDAY, 6 },
- { NULL, 0, 0 }
-};
-
-/* Time units table. */
-static TABLE const UnitsTable[] = {
- { "year", tYEAR_UNIT, 1 },
- { "month", tMONTH_UNIT, 1 },
- { "fortnight", tDAY_UNIT, 14 },
- { "week", tDAY_UNIT, 7 },
- { "day", tDAY_UNIT, 1 },
- { "hour", tHOUR_UNIT, 1 },
- { "minute", tMINUTE_UNIT, 1 },
- { "min", tMINUTE_UNIT, 1 },
- { "second", tSEC_UNIT, 1 },
- { "sec", tSEC_UNIT, 1 },
- { NULL, 0, 0 }
-};
-
-/* Assorted relative-time words. */
-static TABLE const OtherTable[] = {
- { "tomorrow", tDAY_UNIT, 1 },
- { "yesterday", tDAY_UNIT, -1 },
- { "today", tDAY_UNIT, 0 },
- { "now", tDAY_UNIT, 0 },
- { "last", tUNUMBER, -1 },
- { "this", tMINUTE_UNIT, 0 },
- { "next", tUNUMBER, 1 },
- { "first", tUNUMBER, 1 },
-/* { "second", tUNUMBER, 2 }, */
- { "third", tUNUMBER, 3 },
- { "fourth", tUNUMBER, 4 },
- { "fifth", tUNUMBER, 5 },
- { "sixth", tUNUMBER, 6 },
- { "seventh", tUNUMBER, 7 },
- { "eighth", tUNUMBER, 8 },
- { "ninth", tUNUMBER, 9 },
- { "tenth", tUNUMBER, 10 },
- { "eleventh", tUNUMBER, 11 },
- { "twelfth", tUNUMBER, 12 },
- { "ago", tAGO, 1 },
- { NULL, 0, 0 }
-};
-
-/* The timezone table. */
-static TABLE const TimezoneTable[] = {
- { "gmt", tZONE, HOUR ( 0) }, /* Greenwich Mean */
- { "ut", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */
- { "utc", tZONE, HOUR ( 0) },
- { "wet", tZONE, HOUR ( 0) }, /* Western European */
- { "bst", tDAYZONE, HOUR ( 0) }, /* British Summer */
- { "wat", tZONE, HOUR ( 1) }, /* West Africa */
- { "at", tZONE, HOUR ( 2) }, /* Azores */
-#if 0
- /* For completeness. BST is also British Summer, and GST is
- * also Guam Standard. */
- { "bst", tZONE, HOUR ( 3) }, /* Brazil Standard */
- { "gst", tZONE, HOUR ( 3) }, /* Greenland Standard */
-#endif
-#if 0
- { "nft", tZONE, HOUR (3.5) }, /* Newfoundland */
- { "nst", tZONE, HOUR (3.5) }, /* Newfoundland Standard */
- { "ndt", tDAYZONE, HOUR (3.5) }, /* Newfoundland Daylight */
-#endif
- { "ast", tZONE, HOUR ( 4) }, /* Atlantic Standard */
- { "adt", tDAYZONE, HOUR ( 4) }, /* Atlantic Daylight */
- { "est", tZONE, HOUR ( 5) }, /* Eastern Standard */
- { "edt", tDAYZONE, HOUR ( 5) }, /* Eastern Daylight */
- { "cst", tZONE, HOUR ( 6) }, /* Central Standard */
- { "cdt", tDAYZONE, HOUR ( 6) }, /* Central Daylight */
- { "mst", tZONE, HOUR ( 7) }, /* Mountain Standard */
- { "mdt", tDAYZONE, HOUR ( 7) }, /* Mountain Daylight */
- { "pst", tZONE, HOUR ( 8) }, /* Pacific Standard */
- { "pdt", tDAYZONE, HOUR ( 8) }, /* Pacific Daylight */
- { "yst", tZONE, HOUR ( 9) }, /* Yukon Standard */
- { "ydt", tDAYZONE, HOUR ( 9) }, /* Yukon Daylight */
- { "hst", tZONE, HOUR (10) }, /* Hawaii Standard */
- { "hdt", tDAYZONE, HOUR (10) }, /* Hawaii Daylight */
- { "cat", tZONE, HOUR (10) }, /* Central Alaska */
- { "akst", tZONE, HOUR (10) }, /* Alaska Standard */
- { "akdt", tZONE, HOUR (10) }, /* Alaska Daylight */
- { "ahst", tZONE, HOUR (10) }, /* Alaska-Hawaii Standard */
- { "nt", tZONE, HOUR (11) }, /* Nome */
- { "idlw", tZONE, HOUR (12) }, /* International Date Line West */
- { "cet", tZONE, -HOUR (1) }, /* Central European */
- { "met", tZONE, -HOUR (1) }, /* Middle European */
- { "mewt", tZONE, -HOUR (1) }, /* Middle European Winter */
- { "mest", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
- { "mesz", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
- { "swt", tZONE, -HOUR (1) }, /* Swedish Winter */
- { "sst", tDAYZONE, -HOUR (1) }, /* Swedish Summer */
- { "fwt", tZONE, -HOUR (1) }, /* French Winter */
- { "fst", tDAYZONE, -HOUR (1) }, /* French Summer */
- { "eet", tZONE, -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */
- { "bt", tZONE, -HOUR (3) }, /* Baghdad, USSR Zone 2 */
-#if 0
- { "it", tZONE, -HOUR (3.5) },/* Iran */
-#endif
- { "zp4", tZONE, -HOUR (4) }, /* USSR Zone 3 */
- { "zp5", tZONE, -HOUR (5) }, /* USSR Zone 4 */
-#if 0
- { "ist", tZONE, -HOUR (5.5) },/* Indian Standard */
-#endif
- { "zp6", tZONE, -HOUR (6) }, /* USSR Zone 5 */
-#if 0
- /* For completeness. NST is also Newfoundland Standard, and SST is
- * also Swedish Summer. */
- { "nst", tZONE, -HOUR (6.5) },/* North Sumatra */
- { "sst", tZONE, -HOUR (7) }, /* South Sumatra, USSR Zone 6 */
-#endif /* 0 */
- { "wast", tZONE, -HOUR (7) }, /* West Australian Standard */
- { "wadt", tDAYZONE, -HOUR (7) }, /* West Australian Daylight */
-#if 0
- { "jt", tZONE, -HOUR (7.5) },/* Java (3pm in Cronusland!) */
-#endif
- { "cct", tZONE, -HOUR (8) }, /* China Coast, USSR Zone 7 */
- { "jst", tZONE, -HOUR (9) }, /* Japan Standard, USSR Zone 8 */
-#if 0
- { "cast", tZONE, -HOUR (9.5) },/* Central Australian Standard */
- { "cadt", tDAYZONE, -HOUR (9.5) },/* Central Australian Daylight */
-#endif
- { "east", tZONE, -HOUR (10) }, /* Eastern Australian Standard */
- { "eadt", tDAYZONE, -HOUR (10) }, /* Eastern Australian Daylight */
- { "gst", tZONE, -HOUR (10) }, /* Guam Standard, USSR Zone 9 */
- { "nzt", tZONE, -HOUR (12) }, /* New Zealand */
- { "nzst", tZONE, -HOUR (12) }, /* New Zealand Standard */
- { "nzdt", tDAYZONE, -HOUR (12) }, /* New Zealand Daylight */
- { "idle", tZONE, -HOUR (12) }, /* International Date Line East */
- { NULL, 0, 0 }
-};
-
-/* Military timezone table. */
-static TABLE const MilitaryTable[] = {
- { "a", tZONE, HOUR ( 1) },
- { "b", tZONE, HOUR ( 2) },
- { "c", tZONE, HOUR ( 3) },
- { "d", tZONE, HOUR ( 4) },
- { "e", tZONE, HOUR ( 5) },
- { "f", tZONE, HOUR ( 6) },
- { "g", tZONE, HOUR ( 7) },
- { "h", tZONE, HOUR ( 8) },
- { "i", tZONE, HOUR ( 9) },
- { "k", tZONE, HOUR ( 10) },
- { "l", tZONE, HOUR ( 11) },
- { "m", tZONE, HOUR ( 12) },
- { "n", tZONE, HOUR (- 1) },
- { "o", tZONE, HOUR (- 2) },
- { "p", tZONE, HOUR (- 3) },
- { "q", tZONE, HOUR (- 4) },
- { "r", tZONE, HOUR (- 5) },
- { "s", tZONE, HOUR (- 6) },
- { "t", tZONE, HOUR (- 7) },
- { "u", tZONE, HOUR (- 8) },
- { "v", tZONE, HOUR (- 9) },
- { "w", tZONE, HOUR (-10) },
- { "x", tZONE, HOUR (-11) },
- { "y", tZONE, HOUR (-12) },
- { "z", tZONE, HOUR ( 0) },
- { NULL, 0, 0 }
-};
-
-
-
-
-/* ARGSUSED */
-static int
-yyerror (s)
- char *s ATTRIBUTE_UNUSED;
-{
- return 0;
-}
-
-static int
-ToHour (Hours, Meridian)
- int Hours;
- MERIDIAN Meridian;
-{
- switch (Meridian)
- {
- case MER24:
- if (Hours < 0 || Hours > 23)
- return -1;
- return Hours;
- case MERam:
- if (Hours < 1 || Hours > 12)
- return -1;
- if (Hours == 12)
- Hours = 0;
- return Hours;
- case MERpm:
- if (Hours < 1 || Hours > 12)
- return -1;
- if (Hours == 12)
- Hours = 0;
- return Hours + 12;
- default:
- abort ();
- }
- /* NOTREACHED */
-}
-
-static int
-ToYear (Year)
- int Year;
-{
- if (Year < 0)
- Year = -Year;
-
- /* XPG4 suggests that years 00-68 map to 2000-2068, and
- years 69-99 map to 1969-1999. */
- if (Year < 69)
- Year += 2000;
- else if (Year < 100)
- Year += 1900;
-
- return Year;
-}
-
-static int
-LookupWord (buff)
- char *buff;
-{
- register char *p;
- register char *q;
- register const TABLE *tp;
- int i;
- int abbrev;
-
- /* Make it lowercase. */
- for (p = buff; *p; p++)
- if (ISUPPER ((unsigned char) *p))
- *p = tolower (*p);
-
- if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
- {
- yylval.Meridian = MERam;
- return tMERIDIAN;
- }
- if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
- {
- yylval.Meridian = MERpm;
- return tMERIDIAN;
- }
-
- /* See if we have an abbreviation for a month. */
- if (strlen (buff) == 3)
- abbrev = 1;
- else if (strlen (buff) == 4 && buff[3] == '.')
- {
- abbrev = 1;
- buff[3] = '\0';
- }
- else
- abbrev = 0;
-
- for (tp = MonthDayTable; tp->name; tp++)
- {
- if (abbrev)
- {
- if (strncmp (buff, tp->name, 3) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
- }
- else if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
- }
-
- for (tp = TimezoneTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
-
- if (strcmp (buff, "dst") == 0)
- return tDST;
-
- for (tp = UnitsTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
-
- /* Strip off any plural and try the units table again. */
- i = strlen (buff) - 1;
- if (buff[i] == 's')
- {
- buff[i] = '\0';
- for (tp = UnitsTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
- buff[i] = 's'; /* Put back for "this" in OtherTable. */
- }
-
- for (tp = OtherTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
-
- /* Military timezones. */
- if (buff[1] == '\0' && ISALPHA ((unsigned char) *buff))
- {
- for (tp = MilitaryTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
- }
-
- /* Drop out any periods and try the timezone table again. */
- for (i = 0, p = q = buff; *q; q++)
- if (*q != '.')
- *p++ = *q;
- else
- i++;
- *p = '\0';
- if (i)
- for (tp = TimezoneTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- yylval.Number = tp->value;
- return tp->type;
- }
-
- return tID;
-}
-
-static int
-yylex ()
-{
- register unsigned char c;
- register char *p;
- char buff[20];
- int Count;
- int sign;
-
- for (;;)
- {
- while (ISSPACE ((unsigned char) *yyInput))
- yyInput++;
-
- if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
- {
- if (c == '-' || c == '+')
- {
- sign = c == '-' ? -1 : 1;
- if (!ISDIGIT (*++yyInput))
- /* skip the '-' sign */
- continue;
- }
- else
- sign = 0;
- for (yylval.Number = 0; ISDIGIT (c = *yyInput++);)
- yylval.Number = 10 * yylval.Number + c - '0';
- yyInput--;
- if (sign < 0)
- yylval.Number = -yylval.Number;
- /* Ignore ordinal suffixes on numbers */
- c = *yyInput;
- if (c == 's' || c == 'n' || c == 'r' || c == 't') {
- c = *++yyInput;
- if (c == 't' || c == 'd' || c == 'h') {
- yyInput++;
- } else {
- yyInput--;
- }
- }
- return sign ? tSNUMBER : tUNUMBER;
- }
- if (ISALPHA (c))
- {
- for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';)
- if (p < &buff[sizeof buff - 1])
- *p++ = c;
- *p = '\0';
- yyInput--;
- return LookupWord (buff);
- }
- if (c != '(')
- return *yyInput++;
- Count = 0;
- do
- {
- c = *yyInput++;
- if (c == '\0')
- return c;
- if (c == '(')
- Count++;
- else if (c == ')')
- Count--;
- }
- while (Count > 0);
- }
-}
-
-#define TM_YEAR_ORIGIN 1900
-
-/* Yield A - B, measured in seconds. */
-static long
-difftm (struct tm *a, struct tm *b)
-{
- int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
- int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
- long days = (
- /* difference in day of year */
- a->tm_yday - b->tm_yday
- /* + intervening leap days */
- + ((ay >> 2) - (by >> 2))
- - (ay / 100 - by / 100)
- + ((ay / 100 >> 2) - (by / 100 >> 2))
- /* + difference in years * 365 */
- + (long) (ay - by) * 365
- );
- return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
- + (a->tm_min - b->tm_min))
- + (a->tm_sec - b->tm_sec));
-}
-
-time_t php_parse_date(char *p, time_t *now)
-{
- struct tm tm, tm0, *tmp;
- time_t Start;
-
- yyInput = p;
- Start = now ? *now : time ((time_t *) NULL);
- tmp = localtime (&Start);
- if (!tmp)
- return -1;
- yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
- yyMonth = tmp->tm_mon + 1;
- yyDay = tmp->tm_mday;
- yyHour = tmp->tm_hour;
- yyMinutes = tmp->tm_min;
- yySeconds = tmp->tm_sec;
- tm.tm_isdst = tmp->tm_isdst;
- yyMeridian = MER24;
- yyRelSeconds = 0;
- yyRelMinutes = 0;
- yyRelHour = 0;
- yyRelDay = 0;
- yyRelMonth = 0;
- yyRelYear = 0;
- yyHaveDate = 0;
- yyHaveDay = 0;
- yyHaveRel = 0;
- yyHaveTime = 0;
- yyHaveZone = 0;
-
- if (yyparse ()
- || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1)
- return -1;
-
- tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear;
- tm.tm_mon = yyMonth - 1 + yyRelMonth;
- tm.tm_mday = yyDay + yyRelDay;
- if (yyHaveTime || (yyHaveRel && !yyHaveDate && !yyHaveDay))
- {
- tm.tm_hour = ToHour (yyHour, yyMeridian);
- if (tm.tm_hour < 0)
- return -1;
- tm.tm_min = yyMinutes;
- tm.tm_sec = yySeconds;
- }
- else
- {
- tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
- }
- tm.tm_hour += yyRelHour;
- tm.tm_min += yyRelMinutes;
- tm.tm_sec += yyRelSeconds;
-
- /* Let mktime deduce tm_isdst if we have an absolute timestamp,
- or if the relative timestamp mentions days, months, or years. */
- if (yyHaveDate | yyHaveDay | yyHaveTime | yyRelDay | yyRelMonth | yyRelYear)
- tm.tm_isdst = -1;
-
- tm0 = tm;
-
- Start = mktime (&tm);
-
- if (Start == (time_t) -1)
- {
-
- /* Guard against falsely reporting errors near the time_t boundaries
- when parsing times in other time zones. For example, if the min
- time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
- of UTC, then the min localtime value is 1970-01-01 08:00:00; if
- we apply mktime to 1970-01-01 00:00:00 we will get an error, so
- we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
- zone by 24 hours to compensate. This algorithm assumes that
- there is no DST transition within a day of the time_t boundaries. */
- if (yyHaveZone)
- {
- tm = tm0;
- if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
- {
- tm.tm_mday++;
- yyTimezone -= 24 * 60;
- }
- else
- {
- tm.tm_mday--;
- yyTimezone += 24 * 60;
- }
- Start = mktime (&tm);
- }
-
- if (Start == (time_t) -1)
- return Start;
- }
-
- if (yyHaveDay && !yyHaveDate)
- {
- tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7
- + 7 * (yyDayOrdinal - (0 < yyDayOrdinal)));
- Start = mktime (&tm);
- if (Start == (time_t) -1)
- return Start;
- }
-
- if (yyHaveZone)
- {
- long delta;
- struct tm *gmt = gmtime (&Start);
- if (!gmt)
- return -1;
- delta = yyTimezone * 60L + difftm (&tm, gmt);
- if ((Start + delta < Start) != (delta < 0))
- return -1; /* time_t overflow */
- Start += delta;
- }
-
- return Start;
-}
diff --git a/ext/standard/php_array.h b/ext/standard/php_array.h
deleted file mode 100644
index 96c05a7a37..0000000000
--- a/ext/standard/php_array.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ARRAY_H
-#define PHP_ARRAY_H
-
-PHP_MINIT_FUNCTION(array);
-PHP_MSHUTDOWN_FUNCTION(array);
-
-PHP_FUNCTION(ksort);
-PHP_FUNCTION(krsort);
-PHP_FUNCTION(natsort);
-PHP_FUNCTION(natcasesort);
-PHP_FUNCTION(asort);
-PHP_FUNCTION(arsort);
-PHP_FUNCTION(sort);
-PHP_FUNCTION(rsort);
-PHP_FUNCTION(usort);
-PHP_FUNCTION(uasort);
-PHP_FUNCTION(uksort);
-PHP_FUNCTION(array_walk);
-PHP_FUNCTION(count);
-PHP_FUNCTION(end);
-PHP_FUNCTION(prev);
-PHP_FUNCTION(next);
-PHP_FUNCTION(reset);
-PHP_FUNCTION(current);
-PHP_FUNCTION(key);
-PHP_FUNCTION(min);
-PHP_FUNCTION(max);
-PHP_FUNCTION(in_array);
-PHP_FUNCTION(array_search);
-PHP_FUNCTION(extract);
-PHP_FUNCTION(compact);
-PHP_FUNCTION(array_fill);
-PHP_FUNCTION(range);
-PHP_FUNCTION(shuffle);
-PHP_FUNCTION(array_multisort);
-PHP_FUNCTION(array_push);
-PHP_FUNCTION(array_pop);
-PHP_FUNCTION(array_shift);
-PHP_FUNCTION(array_unshift);
-PHP_FUNCTION(array_splice);
-PHP_FUNCTION(array_slice);
-PHP_FUNCTION(array_merge);
-PHP_FUNCTION(array_merge_recursive);
-PHP_FUNCTION(array_keys);
-PHP_FUNCTION(array_values);
-PHP_FUNCTION(array_count_values);
-PHP_FUNCTION(array_reverse);
-PHP_FUNCTION(array_reduce);
-PHP_FUNCTION(array_pad);
-PHP_FUNCTION(array_flip);
-PHP_FUNCTION(array_change_key_case);
-PHP_FUNCTION(array_rand);
-PHP_FUNCTION(array_unique);
-PHP_FUNCTION(array_intersect);
-PHP_FUNCTION(array_diff);
-PHP_FUNCTION(array_sum);
-PHP_FUNCTION(array_filter);
-PHP_FUNCTION(array_map);
-PHP_FUNCTION(array_key_exists);
-PHP_FUNCTION(array_chunk);
-
-HashTable* php_splice(HashTable *, int, int, zval ***, int, HashTable **);
-PHPAPI void php_array_merge(HashTable *dest, HashTable *src, int recursive);
-int multisort_compare(const void *a, const void *b TSRMLS_DC);
-
-typedef struct {
- int *multisort_flags[2];
- int (*compare_func)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-} php_array_globals;
-
-#ifdef ZTS
-#define ARRAYG(v) TSRMG(array_globals_id, php_array_globals *, v)
-extern int array_globals_id;
-#else
-#define ARRAYG(v) (array_globals.v)
-extern php_array_globals array_globals;
-#endif
-
-#endif /* PHP_ARRAY_H */
diff --git a/ext/standard/php_assert.h b/ext/standard/php_assert.h
deleted file mode 100644
index 6d74f50e7e..0000000000
--- a/ext/standard/php_assert.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ASSERT_H
-#define PHP_ASSERT_H
-
-PHP_MINIT_FUNCTION(assert);
-PHP_MSHUTDOWN_FUNCTION(assert);
-PHP_RINIT_FUNCTION(assert);
-PHP_RSHUTDOWN_FUNCTION(assert);
-PHP_MINFO_FUNCTION(assert);
-PHP_FUNCTION(assert);
-PHP_FUNCTION(assert_options);
-
-#endif /* PHP_ASSERT_H */
diff --git a/ext/standard/php_browscap.h b/ext/standard/php_browscap.h
deleted file mode 100644
index 7f1f29a38f..0000000000
--- a/ext/standard/php_browscap.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BROWSCAP_H
-#define PHP_BROWSCAP_H
-
-PHP_MINIT_FUNCTION(browscap);
-PHP_MSHUTDOWN_FUNCTION(browscap);
-
-PHP_FUNCTION(get_browser);
-
-#endif /* PHP_BROWSCAP_H */
diff --git a/ext/standard/php_crypt.h b/ext/standard/php_crypt.h
deleted file mode 100644
index 5cf4421d2e..0000000000
--- a/ext/standard/php_crypt.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Bakken <ssb@gaurdian.no> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_CRYPT_H
-#define PHP_CRYPT_H
-
-PHP_FUNCTION(crypt);
-#if HAVE_CRYPT
-PHP_MINIT_FUNCTION(crypt);
-PHP_RINIT_FUNCTION(crypt);
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h
deleted file mode 100644
index f95f3afa52..0000000000
--- a/ext/standard/php_dir.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_DIR_H
-#define PHP_DIR_H
-
-/* directory functions */
-PHP_MINIT_FUNCTION(dir);
-PHP_RINIT_FUNCTION(dir);
-PHP_FUNCTION(opendir);
-PHP_FUNCTION(closedir);
-PHP_FUNCTION(chdir);
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
-PHP_FUNCTION(chroot);
-#endif
-PHP_FUNCTION(getcwd);
-PHP_FUNCTION(rewinddir);
-PHP_NAMED_FUNCTION(php_if_readdir);
-PHP_FUNCTION(getdir);
-PHP_FUNCTION(glob);
-
-#endif /* PHP_DIR_H */
diff --git a/ext/standard/php_ext_syslog.h b/ext/standard/php_ext_syslog.h
deleted file mode 100644
index 036e3e8c8e..0000000000
--- a/ext/standard/php_ext_syslog.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_EXT_SYSLOG_H
-#define PHP_EXT_SYSLOG_H
-
-#ifdef HAVE_SYSLOG_H
-
-#include "php_syslog.h"
-
-PHP_MINIT_FUNCTION(syslog);
-PHP_RINIT_FUNCTION(syslog);
-PHP_RSHUTDOWN_FUNCTION(syslog);
-
-PHP_FUNCTION(openlog);
-PHP_FUNCTION(syslog);
-PHP_FUNCTION(closelog);
-PHP_FUNCTION(define_syslog_variables);
-
-#endif
-
-#endif /* PHP_EXT_SYSLOG_H */
diff --git a/ext/standard/php_filestat.h b/ext/standard/php_filestat.h
deleted file mode 100644
index 62cd4f57b9..0000000000
--- a/ext/standard/php_filestat.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FILESTAT_H
-#define PHP_FILESTAT_H
-
-PHP_RINIT_FUNCTION(filestat);
-PHP_RSHUTDOWN_FUNCTION(filestat);
-
-PHP_FUNCTION(clearstatcache);
-PHP_FUNCTION(fileatime);
-PHP_FUNCTION(filectime);
-PHP_FUNCTION(filegroup);
-PHP_FUNCTION(fileinode);
-PHP_FUNCTION(filemtime);
-PHP_FUNCTION(fileowner);
-PHP_FUNCTION(fileperms);
-PHP_FUNCTION(filesize);
-PHP_FUNCTION(filetype);
-PHP_FUNCTION(is_writable);
-PHP_FUNCTION(is_readable);
-PHP_FUNCTION(is_executable);
-PHP_FUNCTION(is_file);
-PHP_FUNCTION(is_dir);
-PHP_FUNCTION(is_link);
-PHP_FUNCTION(file_exists);
-PHP_NAMED_FUNCTION(php_if_stat);
-PHP_NAMED_FUNCTION(php_if_lstat);
-PHP_FUNCTION(disk_total_space);
-PHP_FUNCTION(disk_free_space);
-PHP_FUNCTION(chown);
-PHP_FUNCTION(chgrp);
-PHP_FUNCTION(chmod);
-#if HAVE_UTIME
-PHP_FUNCTION(touch);
-#endif
-PHP_FUNCTION(clearstatcache);
-
-#define MAKE_LONG_ZVAL_INCREF(name, val)\
- MAKE_STD_ZVAL(name); \
- ZVAL_LONG(name, val); \
- name->refcount++;
-
-#ifdef PHP_WIN32
-#define S_IRUSR S_IREAD
-#define S_IWUSR S_IWRITE
-#define S_IXUSR S_IEXEC
-#define S_IRGRP S_IREAD
-#define S_IWGRP S_IWRITE
-#define S_IXGRP S_IEXEC
-#define S_IROTH S_IREAD
-#define S_IWOTH S_IWRITE
-#define S_IXOTH S_IEXEC
-
-#undef getgid
-#define getgroups(a, b) 0
-#define getgid() 1
-#define getuid() 1
-#endif
-
-#endif /* PHP_FILESTAT_H */
diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c
deleted file mode 100644
index e2a9eea8b6..0000000000
--- a/ext/standard/php_fopen_wrapper.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_standard.h"
-#include "php_fopen_wrappers.h"
-
-php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- FILE * fp = NULL;
- php_stream * stream = NULL;
-
- if (!strncasecmp(path, "php://", 6))
- path += 6;
-
- if (!strcasecmp(path, "stdin")) {
- fp = fdopen(dup(STDIN_FILENO), mode);
- } else if (!strcasecmp(path, "stdout")) {
- fp = fdopen(dup(STDOUT_FILENO), mode);
- } else if (!strcasecmp(path, "stderr")) {
- fp = fdopen(dup(STDERR_FILENO), mode);
- }
- /* TODO: implement php://output as a stream to write to the current output buffer ? */
-
- if (fp) {
- stream = php_stream_fopen_from_file(fp, mode);
- if (stream == NULL)
- fclose(fp);
- }
- return stream;
-}
-
-static php_stream_wrapper_ops php_stdio_wops = {
- php_stream_url_wrap_php,
- NULL,
- NULL,
- NULL
-};
-
-php_stream_wrapper php_stream_php_wrapper = {
- &php_stdio_wops,
- NULL,
- 0, /* is_url */
-};
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/php_fopen_wrappers.h b/ext/standard/php_fopen_wrappers.h
deleted file mode 100644
index d06d430d42..0000000000
--- a/ext/standard/php_fopen_wrappers.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FOPEN_WRAPPERS_H
-#define PHP_FOPEN_WRAPPERS_H
-
-php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-php_stream *php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-extern php_stream_wrapper php_stream_http_wrapper;
-extern php_stream_wrapper php_stream_ftp_wrapper;
-extern php_stream_wrapper php_stream_php_wrapper;
-
-#endif
diff --git a/ext/standard/php_ftok.h b/ext/standard/php_ftok.h
deleted file mode 100644
index c3d44c7233..0000000000
--- a/ext/standard/php_ftok.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrew Sitnikov <sitnikov@infonet.ee> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FTOK_H
-#define PHP_FTOK_H
-
-#if HAVE_SYSVSEM || HAVE_SYSVSHM || HAVE_SHMOP
-
-PHP_FUNCTION(ftok);
-
-#endif
-
-#endif /* PHP_FTOK_H */
diff --git a/ext/standard/php_image.h b/ext/standard/php_image.h
deleted file mode 100644
index a33c60759f..0000000000
--- a/ext/standard/php_image.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_IMAGE_H
-#define PHP_IMAGE_H
-
-PHP_FUNCTION(getimagesize);
-
-/* {{{ enum image_filetype
- This enum is used to have ext/standard/image.c and ext/exif/exif.c use
- the same constants for file types.
-*/
-typedef enum
-{ IMAGE_FILETYPE_UNKNOWN=0,
- IMAGE_FILETYPE_GIF=1,
- IMAGE_FILETYPE_JPEG,
- IMAGE_FILETYPE_PNG,
- IMAGE_FILETYPE_SWF,
- IMAGE_FILETYPE_PSD,
- IMAGE_FILETYPE_BMP,
- IMAGE_FILETYPE_TIFF_II, /* intel */
- IMAGE_FILETYPE_TIFF_MM, /* motorola */
- IMAGE_FILETYPE_JPC,
- IMAGE_FILETYPE_JP2,
- IMAGE_FILETYPE_JPX,
- IMAGE_FILETYPE_JB2,
- IMAGE_FILETYPE_SWC
-} image_filetype;
-/* }}} */
-
-PHPAPI int php_getimagetype(php_stream *stream, char *filetype TSRMLS_DC);
-
-#endif /* PHP_IMAGE_H */
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h
deleted file mode 100644
index 90ab2a17c9..0000000000
--- a/ext/standard/php_incomplete_class.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_INCOMPLETE_CLASS_H
-#define PHP_INCOMPLETE_CLASS_H
-
-#include "ext/standard/basic_functions.h"
-
-#define PHP_IC_ENTRY \
- BG(incomplete_class)
-
-#define PHP_SET_CLASS_ATTRIBUTES(struc) \
- /* OBJECTS_FIXME: Fix for new object model */ \
- if (Z_OBJCE_P(struc) == BG(incomplete_class)) { \
- class_name = php_lookup_class_name(struc, &name_len, 1); \
- free_class_name = 1; \
- } else { \
- class_name = Z_OBJCE_P(struc)->name; \
- name_len = Z_OBJCE_P(struc)->name_length; \
- }
-
-#define PHP_CLEANUP_CLASS_ATTRIBUTES() \
- if (free_class_name) efree(class_name)
-
-#define PHP_CLASS_ATTRIBUTES \
- char *class_name; \
- size_t name_len; \
- zend_bool free_class_name = 0 \
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-zend_class_entry *php_create_incomplete_class(TSRMLS_D);
-
-char *php_lookup_class_name(zval *object, size_t *nlen, zend_bool del);
-void php_store_class_name(zval *object, const char *name, size_t len);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif
diff --git a/ext/standard/php_iptc.h b/ext/standard/php_iptc.h
deleted file mode 100644
index 1261fd6ebe..0000000000
--- a/ext/standard/php_iptc.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_IPTC_H
-#define PHP_IPTC_H
-
-PHP_FUNCTION(iptcparse);
-PHP_FUNCTION(iptcembed);
-
-#endif /* PHP_IPTC_H */
diff --git a/ext/standard/php_lcg.h b/ext/standard/php_lcg.h
deleted file mode 100644
index 4251c860f0..0000000000
--- a/ext/standard/php_lcg.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LCG_H
-#define PHP_LCG_H
-
-#include "ext/standard/basic_functions.h"
-
-typedef struct {
- php_int32 s1;
- php_int32 s2;
- int seeded;
-} php_lcg_globals;
-
-PHPAPI double php_combined_lcg(TSRMLS_D);
-PHP_FUNCTION(lcg_value);
-
-PHP_MINIT_FUNCTION(lcg);
-PHP_RINIT_FUNCTION(lcg);
-
-#ifdef ZTS
-#define LCG(v) TSRMG(lcg_globals_id, php_lcg_globals *, v)
-#else
-#define LCG(v) (lcg_globals.v)
-#endif
-
-#endif
diff --git a/ext/standard/php_link.h b/ext/standard/php_link.h
deleted file mode 100644
index 010df5192f..0000000000
--- a/ext/standard/php_link.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LINK_H
-#define PHP_LINK_H
-
-#ifdef HAVE_SYMLINK
-
-PHP_FUNCTION(link);
-PHP_FUNCTION(readlink);
-PHP_FUNCTION(linkinfo);
-PHP_FUNCTION(symlink);
-
-#endif
-
-#endif /* PHP_LINK_H */
diff --git a/ext/standard/php_mail.h b/ext/standard/php_mail.h
deleted file mode 100644
index b96c85a936..0000000000
--- a/ext/standard/php_mail.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_MAIL_H
-#define PHP_MAIL_H
-
-#if HAVE_SENDMAIL
-
-PHP_FUNCTION(mail);
-PHP_FUNCTION(ezmlm_hash);
-PHP_MINFO_FUNCTION(mail);
-PHPAPI extern int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC);
-
-#endif
-
-#endif /* PHP_MAIL_H */
diff --git a/ext/standard/php_math.h b/ext/standard/php_math.h
deleted file mode 100644
index a53b50727e..0000000000
--- a/ext/standard/php_math.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Jim Winstead <jimw@php.net> |
- | Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_MATH_H
-#define PHP_MATH_H
-
-PHPAPI char *_php_math_number_format(double, int, char , char);
-
-PHP_FUNCTION(sin);
-PHP_FUNCTION(cos);
-PHP_FUNCTION(tan);
-PHP_FUNCTION(asin);
-PHP_FUNCTION(acos);
-PHP_FUNCTION(atan);
-PHP_FUNCTION(atan2);
-PHP_FUNCTION(pi);
-PHP_FUNCTION(exp);
-PHP_FUNCTION(log);
-PHP_FUNCTION(log10);
-PHP_FUNCTION(is_finite);
-PHP_FUNCTION(is_infinite);
-PHP_FUNCTION(is_nan);
-PHP_FUNCTION(pow);
-PHP_FUNCTION(sqrt);
-PHP_FUNCTION(srand);
-PHP_FUNCTION(rand);
-PHP_FUNCTION(getrandmax);
-PHP_FUNCTION(mt_srand);
-PHP_FUNCTION(mt_rand);
-PHP_FUNCTION(mt_getrandmax);
-PHP_FUNCTION(abs);
-PHP_FUNCTION(ceil);
-PHP_FUNCTION(floor);
-PHP_FUNCTION(round);
-PHP_FUNCTION(decbin);
-PHP_FUNCTION(dechex);
-PHP_FUNCTION(decoct);
-PHP_FUNCTION(bindec);
-PHP_FUNCTION(hexdec);
-PHP_FUNCTION(octdec);
-PHP_FUNCTION(base_convert);
-PHP_FUNCTION(number_format);
-PHP_FUNCTION(fmod);
-PHP_FUNCTION(deg2rad);
-PHP_FUNCTION(rad2deg);
-
- /*
- WARNING: these functions are expermental: they could change their names or
- disappear in the next version of PHP!
- */
-PHP_FUNCTION(hypot);
-PHP_FUNCTION(expm1);
-PHP_FUNCTION(log1p);
-
-
-PHP_FUNCTION(sinh);
-PHP_FUNCTION(cosh);
-PHP_FUNCTION(tanh);
-PHP_FUNCTION(asinh);
-PHP_FUNCTION(acosh);
-PHP_FUNCTION(atanh);
-
-#include <math.h>
-
-#ifndef M_E
-#define M_E 2.7182818284590452354 /* e */
-#endif
-
-#ifndef M_LOG2E
-#define M_LOG2E 1.4426950408889634074 /* log_2 e */
-#endif
-
-#ifndef M_LOG10E
-#define M_LOG10E 0.43429448190325182765 /* log_10 e */
-#endif
-
-#ifndef M_LN2
-#define M_LN2 0.69314718055994530942 /* log_e 2 */
-#endif
-
-#ifndef M_LN10
-#define M_LN10 2.30258509299404568402 /* log_e 10 */
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846 /* pi */
-#endif
-
-#ifndef M_PI_2
-#define M_PI_2 1.57079632679489661923 /* pi/2 */
-#endif
-
-#ifndef M_PI_4
-#define M_PI_4 0.78539816339744830962 /* pi/4 */
-#endif
-
-#ifndef M_1_PI
-#define M_1_PI 0.31830988618379067154 /* 1/pi */
-#endif
-
-#ifndef M_2_PI
-#define M_2_PI 0.63661977236758134308 /* 2/pi */
-#endif
-
-#ifndef M_SQRTPI
-#define M_SQRTPI 1.77245385090551602729 /* sqrt(pi) */
-#endif
-
-#ifndef M_2_SQRTPI
-#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
-#endif
-
-#ifndef M_LNPI
-#define M_LNPI 1.14472988584940017414 /* ln(pi) */
-#endif
-
-#ifndef M_EULER
-#define M_EULER 0.57721566490153286061 /* Euler constant */
-#endif
-
-#ifndef M_SQRT2
-#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
-#endif
-
-#ifndef M_SQRT1_2
-#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
-#endif
-
-#ifndef M_SQRT3
-#define M_SQRT3 1.73205080756887729352 /* sqrt(3) */
-#endif
-
-#endif /* PHP_MATH_H */
diff --git a/ext/standard/php_metaphone.h b/ext/standard/php_metaphone.h
deleted file mode 100644
index 4dbe29b30b..0000000000
--- a/ext/standard/php_metaphone.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_METAPHONE_H
-#define PHP_METAPHONE_H
-
-PHP_FUNCTION(metaphone);
-
-#endif
diff --git a/ext/standard/php_parsedate.h b/ext/standard/php_parsedate.h
deleted file mode 100644
index 3e4bebe982..0000000000
--- a/ext/standard/php_parsedate.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_PARSEDATE_H
-#define PHP_PARSEDATE_H
-
-#include <time.h>
-
-time_t php_parse_date(char *p, time_t *now);
-
-#endif
diff --git a/ext/standard/php_rand.h b/ext/standard/php_rand.h
deleted file mode 100644
index 996257cc1b..0000000000
--- a/ext/standard/php_rand.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Pedro Melo <melo@ip.pt> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | Based on code from: Shawn Cokus <Cokus@math.washington.edu> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_RAND_H
-#define PHP_RAND_H
-
-#include <stdlib.h>
-#include "basic_functions.h"
-
-/* System Rand functions */
-#ifndef RAND_MAX
-#define RAND_MAX (1<<15)
-#endif
-
-#if HAVE_LRAND48
-#define PHP_RAND_MAX 2147483647
-#else
-#define PHP_RAND_MAX RAND_MAX
-#endif
-
-/* MT Rand */
-#define PHP_MT_RAND_MAX ((long) (0x7FFFFFFF)) /* (1<<31) - 1 */
-
-PHPAPI void php_srand(long seed TSRMLS_DC);
-PHPAPI long php_rand(TSRMLS_D);
-PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC);
-PHPAPI php_uint32 php_mt_rand(TSRMLS_D);
-
-#endif /* PHP_RAND_H */
diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h
deleted file mode 100644
index d05e615fe7..0000000000
--- a/ext/standard/php_smart_str.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SMART_STR_H
-#define PHP_SMART_STR_H
-
-#include "php_smart_str_public.h"
-
-#include <stdlib.h>
-#include <zend.h>
-
-#define smart_str_0(x) do { if ((x)->c) { (x)->c[(x)->len] = '\0'; } } while (0)
-
-#ifndef SMART_STR_PREALLOC
-#define SMART_STR_PREALLOC 128
-#endif
-
-#define smart_str_alloc(d, n, what) {\
- if (!d->c) d->len = d->a = 0; \
- newlen = d->len + n; \
- if (newlen >= d->a) {\
- d->c = perealloc(d->c, newlen + SMART_STR_PREALLOC + 1, what); \
- d->a = newlen + SMART_STR_PREALLOC; \
- }\
-}
-
-#define smart_str_appends_ex(dest, src, what) smart_str_appendl_ex(dest, src, strlen(src), what)
-#define smart_str_appends(dest, src) smart_str_appendl(dest, src, strlen(src))
-
-#define smart_str_appendc(dest, c) smart_str_appendc_ex(dest, c, 0)
-#define smart_str_free(s) smart_str_free_ex(s, 0)
-#define smart_str_appendl(dest, src, len) smart_str_appendl_ex(dest, src, len, 0)
-#define smart_str_append(dest, src) smart_str_append_ex(dest, src, 0)
-#define smart_str_append_long(dest, val) smart_str_append_long_ex(dest, val, 0)
-#define smart_str_append_unsigned(dest, val) smart_str_append_unsigned_ex(dest, val, 0)
-
-static inline void smart_str_appendc_ex(smart_str *dest, char c, int what)
-{
- size_t newlen;
-
- smart_str_alloc(dest, 1, what);
- dest->len = newlen;
- dest->c[dest->len - 1] = c;
-}
-
-
-static inline void smart_str_free_ex(smart_str *s, int what)
-{
- if (s->c) {
- pefree(s->c, what);
- s->c = NULL;
- }
- s->a = s->len = 0;
-}
-
-static inline void smart_str_appendl_ex(smart_str *dest, const char *src, size_t len, int what)
-{
- size_t newlen;
-
- smart_str_alloc(dest, len, what);
- memcpy(dest->c + dest->len, src, len);
- dest->len = newlen;
-}
-
-/* buf points to the END of the buffer */
-static inline char *smart_str_print_unsigned(char *buf, unsigned long num)
-{
- char *p = buf;
-
- *p = '\0';
- do {
- *--p = (char)(num % 10) + '0';
- num /= 10;
- } while (num > 0);
-
- return p;
-}
-
-/* buf points to the END of the buffer */
-static inline char *smart_str_print_long(char *buf, long num)
-{
- char *p;
-
- if (num < 0) {
- /* this might cause problems when dealing with LONG_MIN
- and machines which don't support long long. Works
- flawlessly on 32bit x86 */
- p = smart_str_print_unsigned(buf, -num);
- *--p = '-';
- } else {
- p = smart_str_print_unsigned(buf, num);
- }
-
- return p;
-}
-
-static inline void smart_str_append_long_ex(smart_str *dest, long num, int type)
-{
- char buf[32];
- char *p = smart_str_print_long(buf + sizeof(buf) - 1, num);
- smart_str_appendl_ex(dest, p, (buf + sizeof(buf) - 1) - p, type);
-}
-
-static inline void smart_str_append_unsigned_ex(smart_str *dest, long num, int type)
-{
- char buf[32];
- char *p = smart_str_print_unsigned(buf + sizeof(buf) - 1, num);
- smart_str_appendl_ex(dest, p, (buf + sizeof(buf) - 1) - p, type);
-}
-
-static inline void smart_str_append_ex(smart_str *dest, smart_str *src, int what)
-{
- smart_str_appendl_ex(dest, src->c, src->len, what);
-}
-
-static inline void smart_str_setl(smart_str *dest, const char *src, size_t len)
-{
- dest->len = len;
- dest->a = len + 1;
- dest->c = (char *) src;
-}
-
-static inline void smart_str_sets(smart_str *dest, const char *src)
-{
- smart_str_setl(dest, src, strlen(src));
-}
-
-#endif
diff --git a/ext/standard/php_smart_str_public.h b/ext/standard/php_smart_str_public.h
deleted file mode 100644
index b118afb8a7..0000000000
--- a/ext/standard/php_smart_str_public.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SMART_STR_PUBLIC_H
-#define PHP_SMART_STR_PUBLIC_H
-
-#include <sys/types.h>
-
-typedef struct {
- char *c;
- size_t len;
- size_t a;
-} smart_str;
-
-#endif
diff --git a/ext/standard/php_standard.h b/ext/standard/php_standard.h
deleted file mode 100644
index 383a7c42b1..0000000000
--- a/ext/standard/php_standard.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "basic_functions.h"
-#include "php_math.h"
-#include "php_string.h"
-#include "base64.h"
-#include "php_dir.h"
-#include "dns.h"
-#include "reg.h"
-#include "php_mail.h"
-#include "md5.h"
-#include "html.h"
-#include "exec.h"
-#include "file.h"
-#include "php_ext_syslog.h"
-#include "php_filestat.h"
-#include "php_browscap.h"
-#include "pack.h"
-#include "datetime.h"
-#include "microtime.h"
-#include "url.h"
-#include "pageinfo.h"
-#include "cyr_convert.h"
-#include "php_link.h"
-#include "fsock.h"
-#include "php_image.h"
-#include "php_iptc.h"
-#include "info.h"
-#include "uniqid.h"
-#include "php_var.h"
-#include "quot_print.h"
-#include "dl.h"
-#include "php_crypt.h"
-#include "head.h"
-#include "php_lcg.h"
-#include "php_metaphone.h"
-#include "php_output.h"
-#include "php_array.h"
-#include "php_assert.h"
-#include "php_versioning.h"
-#include "php_ftok.h"
-#include "php_type.h"
-#include "aggregation.h"
-
-#define phpext_standard_ptr basic_functions_module_ptr
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h
deleted file mode 100644
index 8dfbb4704a..0000000000
--- a/ext/standard/php_string.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */
-
-#ifndef PHP_STRING_H
-#define PHP_STRING_H
-
-PHP_FUNCTION(strspn);
-PHP_FUNCTION(strcspn);
-PHP_FUNCTION(str_replace);
-PHP_FUNCTION(rtrim);
-PHP_FUNCTION(trim);
-PHP_FUNCTION(ltrim);
-PHP_FUNCTION(soundex);
-PHP_FUNCTION(levenshtein);
-
-PHP_FUNCTION(count_chars);
-PHP_FUNCTION(wordwrap);
-PHP_FUNCTION(explode);
-PHP_FUNCTION(implode);
-PHP_FUNCTION(strtok);
-PHP_FUNCTION(strtoupper);
-PHP_FUNCTION(strtolower);
-PHP_FUNCTION(basename);
-PHP_FUNCTION(dirname);
-PHP_FUNCTION(pathinfo);
-PHP_FUNCTION(strstr);
-PHP_FUNCTION(strpos);
-PHP_FUNCTION(strrpos);
-PHP_FUNCTION(strrchr);
-PHP_FUNCTION(substr);
-PHP_FUNCTION(quotemeta);
-PHP_FUNCTION(ucfirst);
-PHP_FUNCTION(ucwords);
-PHP_FUNCTION(strtr);
-PHP_FUNCTION(strrev);
-PHP_FUNCTION(hebrev);
-PHP_FUNCTION(hebrevc);
-PHP_FUNCTION(user_sprintf);
-PHP_FUNCTION(user_printf);
-PHP_FUNCTION(vprintf);
-PHP_FUNCTION(vsprintf);
-PHP_FUNCTION(addcslashes);
-PHP_FUNCTION(addslashes);
-PHP_FUNCTION(stripcslashes);
-PHP_FUNCTION(stripslashes);
-PHP_FUNCTION(chr);
-PHP_FUNCTION(ord);
-PHP_FUNCTION(nl2br);
-PHP_FUNCTION(setlocale);
-PHP_FUNCTION(localeconv);
-PHP_FUNCTION(nl_langinfo);
-PHP_FUNCTION(stristr);
-PHP_FUNCTION(chunk_split);
-PHP_FUNCTION(parse_str);
-PHP_FUNCTION(bin2hex);
-PHP_FUNCTION(similar_text);
-PHP_FUNCTION(strip_tags);
-PHP_FUNCTION(str_repeat);
-PHP_FUNCTION(substr_replace);
-PHP_FUNCTION(strnatcmp);
-PHP_FUNCTION(strnatcasecmp);
-PHP_FUNCTION(substr_count);
-PHP_FUNCTION(str_pad);
-PHP_FUNCTION(sscanf);
-#ifdef HAVE_STRCOLL
-PHP_FUNCTION(strcoll);
-#endif
-
-
-#if defined(HAVE_LOCALECONV) && defined(ZTS)
-PHP_MINIT_FUNCTION(localeconv);
-PHP_MSHUTDOWN_FUNCTION(localeconv);
-#endif
-#if HAVE_NL_LANGINFO
-PHP_MINIT_FUNCTION(nl_langinfo);
-#endif
-
-#define strnatcmp(a, b) \
- strnatcmp_ex(a, strlen(a), b, strlen(b), 0)
-#define strnatcasecmp(a, b) \
- strnatcmp_ex(a, strlen(a), b, strlen(b), 1)
-PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case);
-
-PHPAPI char *php_strtoupper(char *s, size_t len);
-PHPAPI char *php_strtolower(char *s, size_t len);
-PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen);
-PHPAPI char *php_addslashes(char *str, int length, int *new_length, int freeit TSRMLS_DC);
-PHPAPI char *php_addcslashes(char *str, int length, int *new_length, int freeit, char *what, int wlength TSRMLS_DC);
-PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC);
-PHPAPI void php_stripcslashes(char *str, int *len);
-PHPAPI char *php_basename(char *str, size_t len , char *suffix, size_t sufflen);
-PHPAPI void php_dirname(char *str, int len);
-PHPAPI char *php_stristr(unsigned char *s, unsigned char *t, size_t s_len, size_t t_len);
-PHPAPI char *php_str_to_str(char *haystack, int length, char *needle,
- int needle_len, char *str, int str_len, int *_new_length);
-PHPAPI void php_trim(zval **str, zval *return_value, int mode TSRMLS_DC);
-PHPAPI void php_trim2(zval **str, zval **what, zval *return_value, int mode TSRMLS_DC);
-PHPAPI void php_strip_tags(char *rbuf, int len, int *state, char *allow, int allow_len);
-
-PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, pval *result);
-
-PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value);
-PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit);
-
-static inline char *
-php_memnstr(char *haystack, char *needle, int needle_len, char *end)
-{
- char *p = haystack;
- char first = *needle;
-
- /* let end point to the last character where needle may start */
- end -= needle_len;
-
- while (p <= end) {
- while (*p != first)
- if (++p > end)
- return NULL;
- if (memcmp(p, needle, needle_len) == 0)
- return p;
- p++;
- }
- return NULL;
-}
-
-PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end);
-PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end);
-
-#ifndef HAVE_STRERROR
-PHPAPI char *php_strerror(int errnum);
-#define strerror php_strerror
-#endif
-
-void register_string_constants(INIT_FUNC_ARGS);
-int php_charmask(unsigned char *input, int len, char *mask TSRMLS_DC);
-
-#endif /* PHP_STRING_H */
diff --git a/ext/standard/php_type.h b/ext/standard/php_type.h
deleted file mode 100644
index 9a3c57e1a5..0000000000
--- a/ext/standard/php_type.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_TYPE_H
-#define PHP_TYPE_H
-
-PHP_FUNCTION(intval);
-PHP_FUNCTION(floatval);
-PHP_FUNCTION(strval);
-PHP_FUNCTION(gettype);
-PHP_FUNCTION(settype);
-PHP_FUNCTION(is_null);
-PHP_FUNCTION(is_resource);
-PHP_FUNCTION(is_bool);
-PHP_FUNCTION(is_long);
-PHP_FUNCTION(is_float);
-PHP_FUNCTION(is_numeric);
-PHP_FUNCTION(is_string);
-PHP_FUNCTION(is_array);
-PHP_FUNCTION(is_object);
-PHP_FUNCTION(is_scalar);
-PHP_FUNCTION(is_callable);
-
-#endif
diff --git a/ext/standard/php_var.h b/ext/standard/php_var.h
deleted file mode 100644
index 50bd124d61..0000000000
--- a/ext/standard/php_var.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jani Lehtimäki <jkl@njet.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_VAR_H
-#define PHP_VAR_H
-
-#include "ext/standard/php_smart_str_public.h"
-
-PHP_FUNCTION(var_dump);
-PHP_FUNCTION(var_export);
-PHP_FUNCTION(debug_zval_dump);
-PHP_FUNCTION(serialize);
-PHP_FUNCTION(unserialize);
-
-void php_var_dump(zval **struc, int level TSRMLS_DC);
-void php_var_export(zval **struc, int level TSRMLS_DC);
-void php_debug_zval_dump(zval **struc, int level TSRMLS_DC);
-
-/* typdef HashTable php_serialize_data_t; */
-#define php_serialize_data_t HashTable
-
-struct php_unserialize_data {
- void *first;
-};
-
-typedef struct php_unserialize_data php_unserialize_data_t;
-
-PHPAPI void php_var_serialize(smart_str *buf, zval **struc, php_serialize_data_t *var_hash TSRMLS_DC);
-PHPAPI int php_var_unserialize(zval **rval, const char **p, const char *max, php_unserialize_data_t *var_hash TSRMLS_DC);
-
-#define PHP_VAR_SERIALIZE_INIT(var_hash) \
- zend_hash_init(&(var_hash), 10, NULL, NULL, 0)
-#define PHP_VAR_SERIALIZE_DESTROY(var_hash) \
- zend_hash_destroy(&(var_hash))
-
-#define PHP_VAR_UNSERIALIZE_INIT(var_hash) \
- (var_hash).first = 0
-#define PHP_VAR_UNSERIALIZE_DESTROY(var_hash) \
- var_destroy(&(var_hash))
-
-void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval **nzval);
-void var_destroy(php_unserialize_data_t *var_hash);
-
-#define PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash, ozval, nzval) \
- var_replace((var_hash), (ozval), &(nzval))
-
-PHPAPI zend_class_entry *php_create_empty_class(char *class_name, int len);
-
-#endif /* PHP_VAR_H */
diff --git a/ext/standard/php_versioning.h b/ext/standard/php_versioning.h
deleted file mode 100644
index 3aed3b52e2..0000000000
--- a/ext/standard/php_versioning.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_VERSIONING_H
-#define PHP_VERSIONING_H
-
-#include "ext/standard/basic_functions.h"
-
-PHPAPI char *php_canonicalize_version(const char *);
-PHPAPI int php_version_compare(const char *, const char *);
-PHP_FUNCTION(version_compare);
-
-#endif
diff --git a/ext/standard/quot_print.c b/ext/standard/quot_print.c
deleted file mode 100644
index 4d369ae902..0000000000
--- a/ext/standard/quot_print.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kirill Maximov <kir@actimind.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-
-#include "php.h"
-#include "quot_print.h"
-
-#include <stdio.h>
-
-/*
-* Converting HEX char to INT value
-*/
-static char php_hex2int(int c)
-{
- if (isdigit(c)) {
- return c - '0';
- }
- else if (c >= 'A' && c <= 'F') {
- return c - 'A' + 10;
- }
- else if (c >= 'a' && c <= 'f') {
- return c - 'a' + 10;
- }
- else {
- return -1;
- }
-}
-
-/*
-*
-* Decoding Quoted-printable string.
-*
-*/
-/* {{{ proto string quoted_printable_decode(string str)
- Convert a quoted-printable string to an 8 bit string */
-PHP_FUNCTION(quoted_printable_decode)
-{
- pval **arg1;
- char *str_in, *str_out;
- int i = 0, j = 0, k;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- if (Z_STRLEN_PP(arg1) == 0) {
- /* shortcut */
- RETURN_EMPTY_STRING();
- }
-
- str_in = Z_STRVAL_PP(arg1);
- str_out = emalloc(Z_STRLEN_PP(arg1) + 1);
- while (str_in[i]) {
- switch (str_in[i]) {
- case '=':
- if (str_in[i + 1] && str_in[i + 2] &&
- isxdigit((int) str_in[i + 1]) &&
- isxdigit((int) str_in[i + 1]))
- {
- str_out[j++] = (php_hex2int((int) str_in[i + 1]) << 4)
- + php_hex2int((int) str_in[i + 2]);
- i += 3;
- } else /* check for soft line break according to RFC 2045*/ {
- k = 1;
- while (str_in[i + k] && ((str_in[i + k] == 32) || (str_in[i + k] == 9))) {
- /* Possibly, skip spaces/tabs at the end of line */
- k++;
- }
- if (!str_in[i + k]) {
- /* End of line reached */
- i += k;
- }
- else if ((str_in[i + k] == 13) && (str_in[i + k + 1] == 10)) {
- /* CRLF */
- i += k + 2;
- }
- else if ((str_in[i + k] == 13) || (str_in[i + k] == 10)) {
- /* CR or LF */
- i += k + 1;
- }
- else {
- str_out[j++] = str_in[i++];
- }
- }
- break;
- default:
- str_out[j++] = str_in[i++];
- }
- }
- str_out[j] = '\0';
-
- RETVAL_STRINGL(str_out, j, 0);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/quot_print.h b/ext/standard/quot_print.h
deleted file mode 100644
index b954affb65..0000000000
--- a/ext/standard/quot_print.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Kirill Maximov (kir@rus.net) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef QUOT_PRINT_H
-#define QUOT_PRINT_H
-
-PHP_FUNCTION(quoted_printable_decode);
-
-#endif /* QUOT_PRINT_H */
diff --git a/ext/standard/rand.c b/ext/standard/rand.c
deleted file mode 100644
index 3386eb6a6a..0000000000
--- a/ext/standard/rand.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Pedro Melo <melo@ip.pt> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | Based on code from: Shawn Cokus <Cokus@math.washington.edu> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdlib.h>
-
-#ifdef PHP_WIN32
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# endif
-# include <windows.h>
-#endif
-
-#include "php.h"
-#include "php_math.h"
-#include "php_rand.h"
-#include "php_lcg.h"
-
-#include "basic_functions.h"
-
-
-/* SYSTEM RAND FUNCTIONS */
-
-/* {{{ php_srand
- */
-PHPAPI void php_srand(long seed TSRMLS_DC)
-{
-#ifdef ZTS
- BG(rand_seed) = (unsigned int) seed;
-#else
-# if defined(HAVE_SRANDOM)
- srandom((unsigned int) seed);
-# elif defined(HAVE_SRAND48)
- srand48(seed);
-# else
- srand((unsigned int) seed);
-# endif
-#endif
-}
-/* }}} */
-
-/* {{{ php_rand
- */
-PHPAPI long php_rand(TSRMLS_D)
-{
- long ret;
-
-#ifdef ZTS
- ret = php_rand_r(&BG(rand_seed));
-#else
-# if defined(HAVE_RANDOM)
- ret = random();
-# elif defined(HAVE_LRAND48)
- ret = lrand48();
-# else
- ret = rand();
-# endif
-#endif
-
- return ret;
-}
-/* }}} */
-
-
-/* MT RAND FUNCTIONS */
-
-/*
- This is the ``Mersenne Twister'' random number generator MT19937, which
- generates pseudorandom integers uniformly distributed in 0..(2^32 - 1)
- starting from any odd seed in 0..(2^32 - 1). This version is a recode
- by Shawn Cokus (Cokus@math.washington.edu) on March 8, 1998 of a version by
- Takuji Nishimura (who had suggestions from Topher Cooper and Marc Rieffel in
- July-August 1997).
-
- Effectiveness of the recoding (on Goedel2.math.washington.edu, a DEC Alpha
- running OSF/1) using GCC -O3 as a compiler: before recoding: 51.6 sec. to
- generate 300 million random numbers; after recoding: 24.0 sec. for the same
- (i.e., 46.5% of original time), so speed is now about 12.5 million random
- number generations per second on this machine.
-
- According to the URL <http://www.math.keio.ac.jp/~matumoto/emt.html>
- (and paraphrasing a bit in places), the Mersenne Twister is ``designed
- with consideration of the flaws of various existing generators,'' has
- a period of 2^19937 - 1, gives a sequence that is 623-dimensionally
- equidistributed, and ``has passed many stringent tests, including the
- die-hard test of G. Marsaglia and the load test of P. Hellekalek and
- S. Wegenkittl.'' It is efficient in memory usage (typically using 2506
- to 5012 bytes of static data, depending on data type sizes, and the code
- is quite short as well). It generates random numbers in batches of 624
- at a time, so the caching and pipelining of modern systems is exploited.
- It is also divide- and mod-free.
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published by
- the Free Software Foundation (either version 2 of the License or, at your
- option, any later version). This library is distributed in the hope that
- it will be useful, but WITHOUT ANY WARRANTY, without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU Library General Public License for more details. You should have
- received a copy of the GNU Library General Public License along with this
- library; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place, Suite 330, Boston, MA 02111-1307, USA.
-
- The code as Shawn received it included the following notice:
-
- Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. When
- you use this, send an e-mail to <matumoto@math.keio.ac.jp> with
- an appropriate reference to your work.
-
- It would be nice to CC: <Cokus@math.washington.edu> when you write.
-
-
-
- php_uint32 must be an unsigned integer type capable of holding at least 32
- bits; exactly 32 should be fastest, but 64 is better on an Alpha with
- GCC at -O3 optimization so try your options and see what's best for you
-
- Melo: we should put some ifdefs here to catch those alphas...
-*/
-#define N MT_N /* length of state vector */
-#define M (397) /* a period parameter */
-#define K (0x9908B0DFU) /* a magic constant */
-#define hiBit(u) ((u) & 0x80000000U) /* mask all but highest bit of u */
-#define loBit(u) ((u) & 0x00000001U) /* mask all but lowest bit of u */
-#define loBits(u) ((u) & 0x7FFFFFFFU) /* mask the highest bit of u */
-#define mixBits(u, v) (hiBit(u)|loBits(v)) /* move hi bit of u to hi bit of v */
-
-/* {{{ php_mt_srand
- */
-PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC)
-{
- /*
- We initialize state[0..(N-1)] via the generator
-
- x_new = (69069 * x_old) mod 2^32
-
- from Line 15 of Table 1, p. 106, Sec. 3.3.4 of Knuth's
- _The Art of Computer Programming_, Volume 2, 3rd ed.
-
- Notes (SJC): I do not know what the initial state requirements
- of the Mersenne Twister are, but it seems this seeding generator
- could be better. It achieves the maximum period for its modulus
- (2^30) iff x_initial is odd (p. 20-21, Sec. 3.2.1.2, Knuth); if
- x_initial can be even, you have sequences like 0, 0, 0, ...;
- 2^31, 2^31, 2^31, ...; 2^30, 2^30, 2^30, ...; 2^29, 2^29 + 2^31,
- 2^29, 2^29 + 2^31, ..., etc. so I force seed to be odd below.
-
-
- Even if x_initial is odd, if x_initial is 1 mod 4 then
-
- the lowest bit of x is always 1,
- the next-to-lowest bit of x is always 0,
- the 2nd-from-lowest bit of x alternates ... 0 1 0 1 0 1 0 1 ... ,
- the 3rd-from-lowest bit of x 4-cycles ... 0 1 1 0 0 1 1 0 ... ,
- the 4th-from-lowest bit of x has the 8-cycle ... 0 0 0 1 1 1 1 0 ... ,
- ...
-
- and if x_initial is 3 mod 4 then
-
- the lowest bit of x is always 1,
- the next-to-lowest bit of x is always 1,
- the 2nd-from-lowest bit of x alternates ... 0 1 0 1 0 1 0 1 ... ,
- the 3rd-from-lowest bit of x 4-cycles ... 0 0 1 1 0 0 1 1 ... ,
- the 4th-from-lowest bit of x has the 8-cycle ... 0 0 1 1 1 1 0 0 ... ,
- ...
-
- The generator's potency (min. s>=0 with (69069-1)^s = 0 mod 2^32) is
- 16, which seems to be alright by p. 25, Sec. 3.2.1.3 of Knuth. It
- also does well in the dimension 2..5 spectral tests, but it could be
- better in dimension 6 (Line 15, Table 1, p. 106, Sec. 3.3.4, Knuth).
-
- Note that the random number user does not see the values generated
- here directly since reloadMT() will always munge them first, so maybe
- none of all of this matters. In fact, the seed values made here could
- even be extra-special desirable if the Mersenne Twister theory says
- so-- that's why the only change I made is to restrict to odd seeds.
- */
-
- register php_uint32 x = (seed | 1U) & 0xFFFFFFFFU, *s = BG(state);
- register int j;
-
- for (BG(left) = 0, *s++ = x, j = N; --j;
- *s++ = (x *= 69069U) & 0xFFFFFFFFU);
-}
-/* }}} */
-
-/* {{{ php_mt_reload
- */
-static php_uint32 php_mt_reload(TSRMLS_D)
-{
- register php_uint32 *p0 = BG(state), *p2 = BG(state) + 2, *pM = BG(state) + M, s0, s1;
- register int j;
-
- if (BG(left) < -1)
- php_mt_srand(4357U TSRMLS_CC);
-
- BG(left) = N - 1, BG(next) = BG(state) + 1;
-
- for (s0 = BG(state)[0], s1 = BG(state)[1], j = N - M + 1; --j; s0 = s1, s1 = *p2++)
- *p0++ = *pM++ ^ (mixBits(s0, s1) >> 1) ^ (loBit(s1) ? K : 0U);
-
- for (pM = BG(state), j = M; --j; s0 = s1, s1 = *p2++)
- *p0++ = *pM++ ^ (mixBits(s0, s1) >> 1) ^ (loBit(s1) ? K : 0U);
-
- s1 = BG(state)[0], *p0 = *pM ^ (mixBits(s0, s1) >> 1) ^ (loBit(s1) ? K : 0U);
- s1 ^= (s1 >> 11);
- s1 ^= (s1 << 7) & 0x9D2C5680U;
- s1 ^= (s1 << 15) & 0xEFC60000U;
-
- return s1 ^ (s1 >> 18);
-}
-/* }}} */
-
-/* {{{ php_mt_rand
- */
-PHPAPI php_uint32 php_mt_rand(TSRMLS_D)
-{
- php_uint32 y;
-
- if (--BG(left) < 0)
- return php_mt_reload(TSRMLS_C);
-
- y = *BG(next)++;
- y ^= (y >> 11);
- y ^= (y << 7) & 0x9D2C5680U;
- y ^= (y << 15) & 0xEFC60000U;
-
- return y ^ (y >> 18);
-}
-/* }}} */
-
-#ifdef PHP_WIN32
-#define GENERATE_SEED() ((long) (time(0) * GetCurrentProcessId() * 1000000 * php_combined_lcg(TSRMLS_C)))
-#else
-#define GENERATE_SEED() ((long) (time(0) * getpid() * 1000000 * php_combined_lcg(TSRMLS_C)))
-#endif
-
-/* {{{ proto void srand([int seed])
- Seeds random number generator */
-PHP_FUNCTION(srand)
-{
- long seed;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &seed) == FAILURE)
- return;
-
- if (ZEND_NUM_ARGS() == 0)
- seed = GENERATE_SEED();
-
- php_srand(seed TSRMLS_CC);
- BG(rand_is_seeded) = 1;
-}
-/* }}} */
-
-/* {{{ proto void mt_srand([int seed])
- Seeds Mersenne Twister random number generator */
-PHP_FUNCTION(mt_srand)
-{
- long seed;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &seed) == FAILURE)
- return;
-
- if (ZEND_NUM_ARGS() == 0)
- seed = GENERATE_SEED();
-
- php_mt_srand(seed TSRMLS_CC);
- BG(mt_rand_is_seeded) = 1;
-}
-/* }}} */
-
-
-/*
- * A bit of tricky math here. We want to avoid using a modulus because
- * that simply tosses the high-order bits and might skew the distribution
- * of random values over the range. Instead we map the range directly.
- *
- * We need to map the range from 0...M evenly to the range a...b
- * Let n = the random number and n' = the mapped random number
- *
- * Then we have: n' = a + n(b-a)/M
- *
- * We have a problem here in that only n==M will get mapped to b which
- # means the chances of getting b is much much less than getting any of
- # the other values in the range. We can fix this by increasing our range
- # artifically and using:
- #
- # n' = a + n(b-a+1)/M
- *
- # Now we only have a problem if n==M which would cause us to produce a
- # number of b+1 which would be bad. So we bump M up by one to make sure
- # this will never happen, and the final algorithm looks like this:
- #
- # n' = a + n(b-a+1)/(M+1)
- *
- * -RL
- */
-#define RAND_RANGE(__n, __min, __max, __tmax) \
- (__n) = (__min) + (long) ((double) ((__max) - (__min) + 1.0) * ((__n) / ((__tmax) + 1.0)))
-
-/* {{{ proto int rand([int min, int max])
- Returns a random number */
-PHP_FUNCTION(rand)
-{
- long min;
- long max;
- long number;
- int argc = ZEND_NUM_ARGS();
-
- if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
- return;
-
- if (!BG(rand_is_seeded)) {
- php_srand(GENERATE_SEED() TSRMLS_CC);
- }
-
- number = php_rand(TSRMLS_C);
- if (argc == 2) {
- RAND_RANGE(number, min, max, PHP_RAND_MAX);
- }
-
- RETURN_LONG(number);
-}
-/* }}} */
-
-/* {{{ proto int mt_rand([int min, int max])
- Returns a random number from Mersenne Twister */
-PHP_FUNCTION(mt_rand)
-{
- long min;
- long max;
- long number;
- int argc = ZEND_NUM_ARGS();
-
- if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
- return;
-
- if (!BG(mt_rand_is_seeded)) {
- php_mt_srand(GENERATE_SEED() TSRMLS_CC);
- }
-
- /*
- * Melo: hmms.. randomMT() returns 32 random bits...
- * Yet, the previous php_rand only returns 31 at most.
- * So I put a right shift to loose the lsb. It *seems*
- * better than clearing the msb.
- * Update:
- * I talked with Cokus via email and it won't ruin the algorithm
- */
- number = (long) (php_mt_rand(TSRMLS_C) >> 1);
- if (argc == 2) {
- RAND_RANGE(number, min, max, PHP_MT_RAND_MAX);
- }
-
- RETURN_LONG(number);
-}
-/* }}} */
-
-/* {{{ proto int getrandmax(void)
- Returns the maximum value a random number can have */
-PHP_FUNCTION(getrandmax)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(PHP_RAND_MAX);
-}
-/* }}} */
-
-/* {{{ proto int mt_getrandmax(void)
- Returns the maximum value a random number from Mersenne Twister can have */
-PHP_FUNCTION(mt_getrandmax)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- /*
- * Melo: it could be 2^^32 but we only use 2^^31 to maintain
- * compatibility with the previous php_rand
- */
- RETURN_LONG(PHP_MT_RAND_MAX); /* 2^^31 */
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/reg.c b/ext/standard/reg.c
deleted file mode 100644
index 0335347b39..0000000000
--- a/ext/standard/reg.c
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Jaakko Hyvätti <jaakko@hyvatti.iki.fi> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-#include "php_string.h"
-#include "reg.h"
-#include "ext/standard/info.h"
-
-#ifdef ZTS
-int reg_globals_id;
-#else
-static php_reg_globals reg_globals;
-#endif
-
-typedef struct {
- regex_t preg;
- int cflags;
-} reg_cache;
-
-/* {{{ _php_regcomp
- */
-static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
-{
- int r = 0;
- int patlen = strlen(pattern);
- reg_cache *rc = NULL;
- TSRMLS_FETCH();
-
- if(zend_hash_find(&REG(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == FAILURE ||
- rc->cflags != cflags) {
- r = regcomp(preg, pattern, cflags);
- if(!r) {
- reg_cache rcp;
-
- rcp.cflags = cflags;
- memcpy(&rcp.preg, preg, sizeof(*preg));
- zend_hash_update(&REG(ht_rc), (char *) pattern, patlen+1,
- (void *) &rcp, sizeof(rcp), NULL);
- }
- } else {
- memcpy(preg, &rc->preg, sizeof(*preg));
- }
-
- return r;
-}
-/* }}} */
-
-static void _free_reg_cache(reg_cache *rc)
-{
- regfree(&rc->preg);
-}
-
-#undef regfree
-#define regfree(a);
-#undef regcomp
-#define regcomp(a, b, c) _php_regcomp(a, b, c)
-
-static void php_reg_init_globals(php_reg_globals *reg_globals TSRMLS_DC)
-{
- zend_hash_init(&reg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_reg_cache, 1);
-}
-
-PHP_MINIT_FUNCTION(regex)
-{
-#ifdef ZTS
- ts_allocate_id(&reg_globals_id, sizeof(php_reg_globals), (ts_allocate_ctor) php_reg_init_globals, NULL);
-#else
- php_reg_init_globals(&reg_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(regex)
-{
- zend_hash_destroy(&REG(ht_rc));
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(regex)
-{
-#if HSREGEX
- php_info_print_table_row(2, "Regex Library", "Bundled library enabled");
-#else
- php_info_print_table_row(2, "Regex Library", "System library enabled");
-#endif
-}
-
-
-/* {{{ php_reg_eprint
- * php_reg_eprint - convert error number to name
- */
-static void php_reg_eprint(int err, regex_t *re) {
- char *buf = NULL, *message = NULL;
- size_t len;
- size_t buf_len;
-
-#ifdef REG_ITOA
- /* get the length of the message */
- buf_len = regerror(REG_ITOA | err, re, NULL, 0);
- if (buf_len) {
- buf = (char *)emalloc(buf_len * sizeof(char));
- if (!buf) return; /* fail silently */
- /* finally, get the error message */
- regerror(REG_ITOA | err, re, buf, buf_len);
- }
-#else
- buf_len = 0;
-#endif
- len = regerror(err, re, NULL, 0);
- if (len) {
- message = (char *)emalloc((buf_len + len + 2) * sizeof(char));
- if (!message) {
- return; /* fail silently */
- }
- if (buf_len) {
- snprintf(message, buf_len, "%s: ", buf);
- buf_len += 1; /* so pointer math below works */
- }
- /* drop the message into place */
- regerror(err, re, message + buf_len, len);
-
- php_error(E_WARNING, "%s", message);
- }
-
- STR_FREE(buf);
- STR_FREE(message);
-}
-/* }}} */
-
-/* {{{ php_ereg
- */
-static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **regex, /* Regular expression */
- **findin, /* String to apply expression to */
- **array = NULL; /* Optional register array */
- regex_t re;
- regmatch_t *subs;
- int err, match_len, string_len;
- uint i;
- int copts = 0;
- off_t start, end;
- char *buf = NULL;
- char *string = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &regex, &findin, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (icase)
- copts |= REG_ICASE;
-
- if (argc == 2)
- copts |= REG_NOSUB;
-
- /* compile the regular expression from the supplied regex */
- if (Z_TYPE_PP(regex) == IS_STRING) {
- err = regcomp(&re, Z_STRVAL_PP(regex), REG_EXTENDED | copts);
- } else {
- /* we convert numbers to integers and treat them as a string */
- if (Z_TYPE_PP(regex) == IS_DOUBLE)
- convert_to_long_ex(regex); /* get rid of decimal places */
- convert_to_string_ex(regex);
- /* don't bother doing an extended regex with just a number */
- err = regcomp(&re, Z_STRVAL_PP(regex), copts);
- }
-
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- /* make a copy of the string we're looking in */
- convert_to_string_ex(findin);
- string = estrndup(Z_STRVAL_PP(findin), Z_STRLEN_PP(findin));
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
- if (!subs) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg");
- RETURN_FALSE;
- }
-
- /* actually execute the regular expression */
- err = regexec(&re, string, re.re_nsub+1, subs, 0);
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- efree(subs);
- RETURN_FALSE;
- }
- match_len = 1;
-
- if (array && err != REG_NOMATCH) {
- match_len = (int) (subs[0].rm_eo - subs[0].rm_so);
- string_len = Z_STRLEN_PP(findin) + 1;
-
- buf = emalloc(string_len);
- if (!buf) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg");
- regfree(&re);
- efree(subs);
- RETURN_FALSE;
- }
-
- zval_dtor(*array); /* start with clean array */
- array_init(*array);
-
- for (i = 0; i <= re.re_nsub; i++) {
- start = subs[i].rm_so;
- end = subs[i].rm_eo;
- if (start != -1 && end > 0 && start < string_len && end < string_len && start < end) {
- add_index_stringl(*array, i, string+start, end-start, 1);
- } else {
- add_index_bool(*array, i, 0);
- }
- }
- efree(buf);
- }
-
- efree(subs);
- efree(string);
- if (err == REG_NOMATCH) {
- RETVAL_FALSE;
- } else {
- if (match_len == 0)
- match_len = 1;
- RETVAL_LONG(match_len);
- }
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto int ereg(string pattern, string string [, array registers])
- Regular expression match */
-PHP_FUNCTION(ereg)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int eregi(string pattern, string string [, array registers])
- Case-insensitive regular expression match */
-PHP_FUNCTION(eregi)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_reg_replace
- * this is the meat and potatoes of regex replacement! */
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended)
-{
- regex_t re;
- regmatch_t *subs;
-
- char *buf, /* buf is where we build the replaced string */
- *nbuf, /* nbuf is used when we grow the buffer */
- *walkbuf; /* used to walk buf when replacing backrefs */
- const char *walk; /* used to walk replacement string for backrefs */
- int buf_len;
- int pos, tmp, string_len, new_l;
- int err, copts = 0;
-
- string_len = strlen(string);
-
- if (icase)
- copts = REG_ICASE;
- if (extended)
- copts |= REG_EXTENDED;
-
- err = regcomp(&re, pattern, copts);
- if (err) {
- php_reg_eprint(err, &re);
- return ((char *) -1);
- }
-
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
- if (!subs) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg_replace");
- return ((char *) -1);
- }
-
- /* start with a buffer that is twice the size of the stringo
- we're doing replacements in */
- buf_len = 2 * string_len + 1;
- buf = emalloc(buf_len * sizeof(char));
- if (!buf) {
- php_error(E_WARNING, "Unable to allocate memory in php_ereg_replace");
- efree(subs);
- regfree(&re);
- return ((char *) -1);
- }
-
- err = pos = 0;
- buf[0] = '\0';
- while (!err) {
- err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0));
-
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- efree(subs);
- efree(buf);
- regfree(&re);
- return ((char *) -1);
- }
-
- if (!err) {
- /* backref replacement is done in two passes:
- 1) find out how long the string will be, and allocate buf
- 2) copy the part before match, replacement and backrefs to buf
-
- Jaakko Hyvätti <Jaakko.Hyvatti@iki.fi>
- */
-
- new_l = strlen(buf) + subs[0].rm_so; /* part before the match */
- walk = replace;
- while (*walk)
- if ('\\' == *walk
- && '0' <= walk[1] && '9' >= walk[1]
- && subs[walk[1] - '0'].rm_so > -1
- && subs[walk[1] - '0'].rm_eo > -1) {
- new_l += subs[walk[1] - '0'].rm_eo
- - subs[walk[1] - '0'].rm_so;
- walk += 2;
- } else {
- new_l++;
- walk++;
- }
-
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = emalloc(buf_len);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- tmp = strlen(buf);
- /* copy the part of the string before the match */
- strncat(buf, &string[pos], subs[0].rm_so);
-
- /* copy replacement and backrefs */
- walkbuf = &buf[tmp + subs[0].rm_so];
- walk = replace;
- while (*walk)
- if ('\\' == *walk
- && '0' <= walk[1] && '9' >= walk[1]
- && subs[walk[1] - '0'].rm_so > -1
- && subs[walk[1] - '0'].rm_eo > -1
- /* this next case shouldn't happen. it does. */
- && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) {
- tmp = subs[walk[1] - '0'].rm_eo
- - subs[walk[1] - '0'].rm_so;
- memcpy (walkbuf,
- &string[pos + subs[walk[1] - '0'].rm_so],
- tmp);
- walkbuf += tmp;
- walk += 2;
- } else
- *walkbuf++ = *walk++;
- *walkbuf = '\0';
-
- /* and get ready to keep looking for replacements */
- if (subs[0].rm_so == subs[0].rm_eo) {
- if (subs[0].rm_so + pos >= string_len)
- break;
- new_l = strlen (buf) + 1;
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = emalloc(buf_len * sizeof(char));
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- pos += subs[0].rm_eo + 1;
- buf [new_l-1] = string [pos-1];
- buf [new_l] = '\0';
- } else {
- pos += subs[0].rm_eo;
- }
- } else { /* REG_NOMATCH */
- new_l = strlen(buf) + strlen(&string[pos]);
- if (new_l + 1 > buf_len) {
- buf_len = new_l + 1; /* now we know exactly how long it is */
- nbuf = emalloc(buf_len * sizeof(char));
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- /* stick that last bit of string on our output */
- strcat(buf, &string[pos]);
- }
- }
-
- /* don't want to leak memory .. */
- efree(subs);
- regfree(&re);
-
- /* whew. */
- return (buf);
-}
-/* }}} */
-
-/* {{{ php_ereg_replace
- */
-static void php_ereg_replace(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **arg_pattern,
- **arg_replace,
- **arg_string;
- char *pattern;
- char *string;
- char *replace;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg_pattern, &arg_replace, &arg_string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg_pattern) == IS_STRING) {
- if (Z_STRVAL_PP(arg_pattern) && Z_STRLEN_PP(arg_pattern))
- pattern = estrndup(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern));
- else
- pattern = empty_string;
- } else {
- convert_to_long_ex(arg_pattern);
- pattern = emalloc(2);
- pattern[0] = (char) Z_LVAL_PP(arg_pattern);
- pattern[1] = '\0';
- }
-
- if (Z_TYPE_PP(arg_replace) == IS_STRING) {
- if (Z_STRVAL_PP(arg_replace) && Z_STRLEN_PP(arg_replace))
- replace = estrndup(Z_STRVAL_PP(arg_replace), Z_STRLEN_PP(arg_replace));
- else
- replace = empty_string;
- } else {
- convert_to_long_ex(arg_replace);
- replace = emalloc(2);
- replace[0] = (char) Z_LVAL_PP(arg_replace);
- replace[1] = '\0';
- }
-
- convert_to_string_ex(arg_string);
- if (Z_STRVAL_PP(arg_string) && Z_STRLEN_PP(arg_string))
- string = estrndup(Z_STRVAL_PP(arg_string), Z_STRLEN_PP(arg_string));
- else
- string = empty_string;
-
- /* do the actual work */
- ret = php_reg_replace(pattern, replace, string, icase, 1);
- if (ret == (char *) -1) {
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(ret, 1);
- STR_FREE(ret);
- }
-
- STR_FREE(string);
- STR_FREE(replace);
- STR_FREE(pattern);
-}
-/* }}} */
-
-/* {{{ proto string ereg_replace(string pattern, string replacement, string string)
- Replace regular expression */
-PHP_FUNCTION(ereg_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string eregi_replace(string pattern, string replacement, string string)
- Case insensitive replace regular expression */
-PHP_FUNCTION(eregi_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_split
- */
-static void php_split(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- zval **spliton, **str, **arg_count = NULL;
- regex_t re;
- regmatch_t subs[1];
- char *strp, *endp;
- int err, size, count = -1, copts = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &spliton, &str, &arg_count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 2) {
- convert_to_long_ex(arg_count);
- count = Z_LVAL_PP(arg_count);
- }
-
- if (icase)
- copts = REG_ICASE;
-
- convert_to_string_ex(spliton);
- convert_to_string_ex(str);
-
- strp = Z_STRVAL_PP(str);
- endp = strp + Z_STRLEN_PP(str);
-
- err = regcomp(&re, Z_STRVAL_PP(spliton), REG_EXTENDED | copts);
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- regfree(&re);
- RETURN_FALSE;
- }
-
- /* churn through str, generating array entries as we go */
- while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) {
- if (subs[0].rm_so == 0 && subs[0].rm_eo) {
- /* match is at start of string, return empty string */
- add_next_index_stringl(return_value, empty_string, 0, 1);
- /* skip ahead the length of the regex match */
- strp += subs[0].rm_eo;
- } else if (subs[0].rm_so == 0 && subs[0].rm_eo == 0) {
- /* No more matches */
- regfree(&re);
- php_error(E_WARNING, "Invalid Regular Expression to split()");
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- } else {
- /* On a real match */
-
- /* make a copy of the substring */
- size = subs[0].rm_so;
-
- /* add it to the array */
- add_next_index_stringl(return_value, strp, size, 1);
-
- /* point at our new starting point */
- strp = strp + subs[0].rm_eo;
- }
-
- /* if we're only looking for a certain number of points,
- stop looking once we hit it */
- if (count != -1) {
- count--;
- }
- }
-
- /* see if we encountered an error */
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- }
-
- /* otherwise we just have one last element to add to the array */
- size = endp - strp;
-
- add_next_index_stringl(return_value, strp, size, 1);
-
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto array split(string pattern, string string [, int limit])
- Split string into array by regular expression */
-PHP_FUNCTION(split)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array spliti(string pattern, string string [, int limit])
- Split string into array by regular expression case-insensitive */
-
-PHP_FUNCTION(spliti)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-
-/* {{{ proto string sql_regcase(string string)
- Make regular expression for case insensitive match */
-PHPAPI PHP_FUNCTION(sql_regcase)
-{
- zval **string;
- char *tmp;
- unsigned char c;
- register int i, j;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &string)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(string);
-
- tmp = emalloc((Z_STRLEN_PP(string) * 4) + 1);
-
- for (i = j = 0; i < Z_STRLEN_PP(string); i++) {
- c = (unsigned char) Z_STRVAL_PP(string)[i];
- if(isalpha(c)) {
- tmp[j++] = '[';
- tmp[j++] = toupper(c);
- tmp[j++] = tolower(c);
- tmp[j++] = ']';
- } else {
- tmp[j++] = c;
- }
- }
- tmp[j] = 0;
-
- RETVAL_STRINGL(tmp, j, 1);
- efree(tmp);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/reg.h b/ext/standard/reg.h
deleted file mode 100644
index 38c99837e0..0000000000
--- a/ext/standard/reg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#ifndef REG_H
-#define REG_H
-
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended);
-
-PHP_FUNCTION(ereg);
-PHP_FUNCTION(eregi);
-PHP_FUNCTION(eregi_replace);
-PHP_FUNCTION(ereg_replace);
-PHP_FUNCTION(split);
-PHP_FUNCTION(spliti);
-PHPAPI PHP_FUNCTION(sql_regcase);
-
-typedef struct {
- HashTable ht_rc;
-} php_reg_globals;
-
-PHP_MINIT_FUNCTION(regex);
-PHP_MSHUTDOWN_FUNCTION(regex);
-PHP_MINFO_FUNCTION(regex);
-
-
-#ifdef ZTS
-#define REG(v) TSRMG(reg_globals_id, php_reg_globals *, v)
-#else
-#define REG(v) (reg_globals.v)
-#endif
-
-#endif /* REG_H */
diff --git a/ext/standard/scanf.c b/ext/standard/scanf.c
deleted file mode 100644
index 3f5a11bc2b..0000000000
--- a/ext/standard/scanf.c
+++ /dev/null
@@ -1,1253 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Clayton Collie <clcollie@mindspring.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- scanf.c --
-
- This file contains the base code which implements sscanf and by extension
- fscanf. Original code is from TCL8.3.0 and bears the following copyright
-
-
-
- This software is copyrighted by the Regents of the University of
- California, Sun Microsystems, Inc., Scriptics Corporation,
- and other parties. The following terms apply to all files associated
- with the software unless explicitly disclaimed in individual files.
-
- The authors hereby grant permission to use, copy, modify, distribute,
- and license this software and its documentation for any purpose, provided
- that existing copyright notices are retained in all copies and that this
- notice is included verbatim in any distributions. No written agreement,
- license, or royalty fee is required for any of the authorized uses.
- Modifications to this software may be copyrighted by their authors
- and need not follow the licensing terms described here, provided that
- the new terms are clearly indicated on the first page of each file where
- they apply.
-
- IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
- FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
- DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
- IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
- NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
- MODIFICATIONS.
-
- GOVERNMENT USE: If you are acquiring this software on behalf of the
- U.S. government, the Government shall have only "Restricted Rights"
- in the software and related documentation as defined in the Federal
- Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
- are acquiring the software on behalf of the Department of Defense, the
- software shall be classified as "Commercial Computer Software" and the
- Government shall have only "Restricted Rights" as defined in Clause
- 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
- authors grant the U.S. Government and others acting in its behalf
- permission to use and distribute the software in accordance with the
- terms specified in this license.
-
- */
-
-#include <stdio.h>
-#include <limits.h>
-#include <ctype.h>
-#include "php.h"
-#include "php_variables.h"
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#include "zend_execute.h"
-#include "zend_operators.h"
-#include "php_globals.h"
-#include "basic_functions.h"
-#include "scanf.h"
-
-/*
- * Flag values used internally by [f|s]canf.
- */
-
-#define SCAN_NOSKIP 0x1 /* Don't skip blanks. */
-#define SCAN_SUPPRESS 0x2 /* Suppress assignment. */
-#define SCAN_UNSIGNED 0x4 /* Read an unsigned value. */
-#define SCAN_WIDTH 0x8 /* A width value was supplied. */
-
-#define SCAN_SIGNOK 0x10 /* A +/- character is allowed. */
-#define SCAN_NODIGITS 0x20 /* No digits have been scanned. */
-#define SCAN_NOZERO 0x40 /* No zero digits have been scanned. */
-#define SCAN_XOK 0x80 /* An 'x' is allowed. */
-#define SCAN_PTOK 0x100 /* Decimal point is allowed. */
-#define SCAN_EXPOK 0x200 /* An exponent is allowed. */
-
-#define UCHAR(x) (zend_uchar)(x)
-
-
-
-/*
- * The following structure contains the information associated with
- * a character set.
- */
-
-typedef struct CharSet {
- int exclude; /* 1 if this is an exclusion set. */
- int nchars;
- char *chars;
- int nranges;
- struct Range {
- char start;
- char end;
- } *ranges;
-} CharSet;
-
-/*
- * Declarations for functions used only in this file.
- */
-
-static char *BuildCharSet(CharSet *cset, char *format);
-static int CharInSet(CharSet *cset, int ch);
-static void ReleaseCharSet(CharSet *cset);
-static inline void scan_set_error_return(int numVars, pval **return_value);
-
-
-/* {{{ BuildCharSet
- *----------------------------------------------------------------------
- *
- * BuildCharSet --
- *
- * This function examines a character set format specification
- * and builds a CharSet containing the individual characters and
- * character ranges specified.
- *
- * Results:
- * Returns the next format position.
- *
- * Side effects:
- * Initializes the charset.
- *
- *----------------------------------------------------------------------
- */
-static char * BuildCharSet(CharSet *cset, char *format)
-{
- char *ch, start;
- int nranges;
- char *end;
-
- memset(cset, 0, sizeof(CharSet));
-
- ch = format;
- if (*ch == '^') {
- cset->exclude = 1;
- ch = ++format;
- }
- end = format + 1; /* verify this - cc */
-
- /*
- * Find the close bracket so we can overallocate the set.
- */
-
- if (*ch == ']') {
- ch = end++;
- }
- nranges = 0;
- while (*ch != ']') {
- if (*ch == '-') {
- nranges++;
- }
- ch = end++;
- }
-
- cset->chars = (char *) emalloc(sizeof(char) * (end - format - 1));
- if (nranges > 0) {
- cset->ranges = (struct Range *) emalloc(sizeof(struct Range)*nranges);
- } else {
- cset->ranges = NULL;
- }
-
- /*
- * Now build the character set.
- */
-
- cset->nchars = cset->nranges = 0;
- ch = format++;
- start = *ch;
- if (*ch == ']' || *ch == '-') {
- cset->chars[cset->nchars++] = *ch;
- ch = format++;
- }
- while (*ch != ']') {
- if (*format == '-') {
- /*
- * This may be the first character of a range, so don't add
- * it yet.
- */
-
- start = *ch;
- } else if (*ch == '-') {
- /*
- * Check to see if this is the last character in the set, in which
- * case it is not a range and we should add the previous character
- * as well as the dash.
- */
-
- if (*format == ']') {
- cset->chars[cset->nchars++] = start;
- cset->chars[cset->nchars++] = *ch;
- } else {
- ch = format++;
-
- /*
- * Check to see if the range is in reverse order.
- */
-
- if (start < *ch) {
- cset->ranges[cset->nranges].start = start;
- cset->ranges[cset->nranges].end = *ch;
- } else {
- cset->ranges[cset->nranges].start = *ch;
- cset->ranges[cset->nranges].end = start;
- }
- cset->nranges++;
- }
- } else {
- cset->chars[cset->nchars++] = *ch;
- }
- ch = format++;
- }
- return format;
-}
-/* }}} */
-
-/* {{{ CharInSet
- *----------------------------------------------------------------------
- *
- * CharInSet --
- *
- * Check to see if a character matches the given set.
- *
- * Results:
- * Returns non-zero if the character matches the given set.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-static int CharInSet(CharSet *cset, int c)
-{
- char ch = (char) c;
- int i, match = 0;
-
- for (i = 0; i < cset->nchars; i++) {
- if (cset->chars[i] == ch) {
- match = 1;
- break;
- }
- }
- if (!match) {
- for (i = 0; i < cset->nranges; i++) {
- if ((cset->ranges[i].start <= ch)
- && (ch <= cset->ranges[i].end)) {
- match = 1;
- break;
- }
- }
- }
- return (cset->exclude ? !match : match);
-}
-/* }}} */
-
-/* {{{ ReleaseCharSet
- *----------------------------------------------------------------------
- *
- * ReleaseCharSet --
- *
- * Free the storage associated with a character set.
- *
- * Results:
- * None.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-static void ReleaseCharSet(CharSet *cset)
-{
- efree((char *)cset->chars);
- if (cset->ranges) {
- efree((char *)cset->ranges);
- }
-}
-/* }}} */
-
-/* {{{ ValidateFormat
- *----------------------------------------------------------------------
- *
- * ValidateFormat --
- *
- * Parse the format string and verify that it is properly formed
- * and that there are exactly enough variables on the command line.
- *
- * Results:
- * FAILURE or SUCCESS.
- *
- * Side effects:
- * May set php_error based on abnormal conditions.
- *
- * Parameters :
- * format The format string.
- * numVars The number of variables passed to the scan command.
- * totalSubs The number of variables that will be required.
- *
- *----------------------------------------------------------------------
-*/
-PHPAPI int ValidateFormat(char *format, int numVars, int *totalSubs)
-{
-#define STATIC_LIST_SIZE 16
- int gotXpg, gotSequential, value, i, flags;
- char *end, *ch = NULL;
- int staticAssign[STATIC_LIST_SIZE];
- int *nassign = staticAssign;
- int objIndex, xpgSize, nspace = STATIC_LIST_SIZE;
- TSRMLS_FETCH();
-
- /*
- * Initialize an array that records the number of times a variable
- * is assigned to by the format string. We use this to detect if
- * a variable is multiply assigned or left unassigned.
- */
-
- if (numVars > nspace) {
- nassign = (int*)emalloc(sizeof(int) * numVars);
- nspace = numVars;
- }
- for (i = 0; i < nspace; i++) {
- nassign[i] = 0;
- }
-
- xpgSize = objIndex = gotXpg = gotSequential = 0;
-
- while (*format != '\0') {
- ch = format++;
- flags = 0;
-
- if (*ch != '%') {
- continue;
- }
- ch = format++;
- if (*ch == '%') {
- continue;
- }
- if (*ch == '*') {
- flags |= SCAN_SUPPRESS;
- ch = format++;
- goto xpgCheckDone;
- }
-
- if ( isdigit( (int)*ch ) ) {
- /*
- * Check for an XPG3-style %n$ specification. Note: there
- * must not be a mixture of XPG3 specs and non-XPG3 specs
- * in the same format string.
- */
-
- value = strtoul(format-1, &end, 10);
- if (*end != '$') {
- goto notXpg;
- }
- format = end+1;
- ch = format++;
- gotXpg = 1;
- if (gotSequential) {
- goto mixedXPG;
- }
- objIndex = value - 1;
- if ((objIndex < 0) || (numVars && (objIndex >= numVars))) {
- goto badIndex;
- } else if (numVars == 0) {
- /*
- * In the case where no vars are specified, the user can
- * specify %9999$ legally, so we have to consider special
- * rules for growing the assign array. 'value' is
- * guaranteed to be > 0.
- */
-
- /* set a lower artificial limit on this
- * in the interest of security and resource friendliness
- * 255 arguments should be more than enough. - cc
- */
- if (value > SCAN_MAX_ARGS) {
- goto badIndex;
- }
-
- xpgSize = (xpgSize > value) ? xpgSize : value;
- }
- goto xpgCheckDone;
- }
-
- notXpg:
- gotSequential = 1;
- if (gotXpg) {
- mixedXPG:
- php_error(E_WARNING,
- "cannot mix \"%\" and \"%n$\" conversion specifiers in %s", get_active_function_name(TSRMLS_C) );
- goto error;
- }
-
- xpgCheckDone:
- /*
- * Parse any width specifier.
- */
-
- if (isdigit(UCHAR(*ch))) {
- value = strtoul(format-1, &format, 10);
- flags |= SCAN_WIDTH;
- ch = format++;
- }
-
- /*
- * Ignore size specifier.
- */
-
- if ((*ch == 'l') || (*ch == 'L') || (*ch == 'h')) {
- ch = format++;
- }
-
- if (!(flags & SCAN_SUPPRESS) && numVars && (objIndex >= numVars)) {
- goto badIndex;
- }
-
- /*
- * Handle the various field types.
- */
-
- switch (*ch) {
- case 'n':
- case 'd':
- case 'D':
- case 'i':
- case 'o':
- case 'x':
- case 'X':
- case 'u':
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 's':
- break;
- case 'c':
- /* we differ here with the TCL implementation in allowing for */
- /* a character width specification, to be more consistent with */
- /* ANSI. since Zend auto allocates space for vars, this is no */
- /* problem - cc */
- /*
- if (flags & SCAN_WIDTH) {
- php_error(E_WARNING, "field width may not be specified in %c conversion");
- goto error;
- }
- */
- break;
- case '[':
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- if (*ch == '^') {
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- }
- if (*ch == ']') {
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- }
- while (*ch != ']') {
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- }
- break;
- badSet:
- php_error(E_WARNING, "unmatched [ in format string");
- goto error;
- default:
- {
- php_error(E_WARNING, "bad scan conversion character \"%c\"", ch);
- goto error;
- }
- }
- if (!(flags & SCAN_SUPPRESS)) {
- if (objIndex >= nspace) {
- /*
- * Expand the nassign buffer. If we are using XPG specifiers,
- * make sure that we grow to a large enough size. xpgSize is
- * guaranteed to be at least one larger than objIndex.
- */
- value = nspace;
- if (xpgSize) {
- nspace = xpgSize;
- } else {
- nspace += STATIC_LIST_SIZE;
- }
- if (nassign == staticAssign) {
- nassign = (void *)emalloc(nspace * sizeof(int));
- for (i = 0; i < STATIC_LIST_SIZE; ++i) {
- nassign[i] = staticAssign[i];
- }
- } else {
- nassign = (void *)erealloc((void *)nassign, nspace * sizeof(int));
- }
- for (i = value; i < nspace; i++) {
- nassign[i] = 0;
- }
- }
- nassign[objIndex]++;
- objIndex++;
- }
- } /* while (*format != '\0') */
-
- /*
- * Verify that all of the variable were assigned exactly once.
- */
-
- if (numVars == 0) {
- if (xpgSize) {
- numVars = xpgSize;
- } else {
- numVars = objIndex;
- }
- }
- if (totalSubs) {
- *totalSubs = numVars;
- }
- for (i = 0; i < numVars; i++) {
- if (nassign[i] > 1) {
- php_error(E_WARNING, "variable is assigned by multiple \"%n$\" conversion specifiers");
- goto error;
- } else if (!xpgSize && (nassign[i] == 0)) {
- /*
- * If the space is empty, and xpgSize is 0 (means XPG wasn't
- * used, and/or numVars != 0), then too many vars were given
- */
- php_error(E_WARNING, "variable is not assigned by any conversion specifiers");
- goto error;
- }
- }
-
- if (nassign != staticAssign) {
- efree((char *)nassign);
- }
- return SCAN_SUCCESS;
-
- badIndex:
- if (gotXpg) {
- php_error(E_WARNING, "\"%n$\" argument index out of range");
- } else {
- php_error(E_WARNING, "different numbers of variable names and field specifiers");
- }
-
- error:
- if (nassign != staticAssign) {
- efree((char *)nassign);
- }
- return SCAN_ERROR_INVALID_FORMAT;
-#undef STATIC_LIST_SIZE
-}
-/* }}} */
-
-/* {{{ php_sscanf_internal
- * This is the internal function which does processing on behalf of
- * both sscanf() and fscanf()
- *
- * parameters :
- * string literal string to be processed
- * format format string
- * argCount total number of elements in the args array
- * args arguments passed in from user function (f|s)scanf
- * varStart offset (in args) of 1st variable passed in to (f|s)scanf
- * return_value set with the results of the scan
- */
-
-PHPAPI int php_sscanf_internal( char *string, char *format,
- int argCount, zval ***args,
- int varStart, pval **return_value TSRMLS_DC)
-{
- int numVars, nconversions, totalVars = -1;
- int i, value, result;
- int objIndex;
- char *end, *baseString;
- zval **current;
- char op = 0;
- int base = 0;
- int underflow = 0;
- size_t width;
- long (*fn)() = NULL;
- char *ch, sch;
- int flags;
- char buf[64]; /* Temporary buffer to hold scanned
- * number strings before they are
- * passed to strtoul. */
-
-
- /* do some sanity checking */
- if ((varStart > argCount) || (varStart < 0)){
- varStart = SCAN_MAX_ARGS + 1;
- }
- numVars = argCount - varStart;
- if (numVars < 0) {
- numVars = 0;
- }
-
-#if 0
- zend_printf("<br>in sscanf_internal : <br> string is \"%s\", format = \"%s\"<br> NumVars = %d. VarStart = %d<br>-------------------------<br>",
- string, format, numVars, varStart);
-#endif
- /*
- * Check for errors in the format string.
- */
- if (ValidateFormat(format, numVars, &totalVars) != SCAN_SUCCESS) {
- scan_set_error_return( numVars, return_value );
- return SCAN_ERROR_INVALID_FORMAT;
- }
-
- objIndex = numVars ? varStart : 0;
-
- /*
- * If any variables are passed, make sure they are all passed by reference
- */
- if (numVars) {
- for (i = varStart;i < argCount;i++){
- if ( ! PZVAL_IS_REF( *args[ i ] ) ) {
- php_error(E_WARNING, "Parameter %d to %s() must be passed by reference",
- i, get_active_function_name(TSRMLS_C));
- scan_set_error_return(numVars, return_value);
- return SCAN_ERROR_VAR_PASSED_BYVAL;
- }
- }
- }
-
-
- /*
- * Allocate space for the result objects. Only happens when no variables
- * are specified
- */
-
- if (!numVars) {
- /* allocate an array for return */
- if (array_init(*return_value) == FAILURE) {
- scan_set_error_return(0, return_value);
- return FAILURE;
- }
- for (i = 0; i < totalVars; i++) {
- if (add_next_index_null(*return_value) == FAILURE) {
- scan_set_error_return(0, return_value);
- return FAILURE;
- }
- }
- }
-
- baseString = string;
-
- /*
- * Iterate over the format string filling in the result objects until
- * we reach the end of input, the end of the format string, or there
- * is a mismatch.
- */
-
- nconversions = 0;
- /* note ! - we need to limit the loop for objIndex to keep it in bounds */
-
- while (*format != '\0') {
-
- ch = format++;
-
- flags = 0;
-
- /*
- * If we see whitespace in the format, skip whitespace in the string.
- */
-
- if ( isspace( (int)*ch ) ) {
- sch = *string;
- while ( isspace( (int)sch ) ) {
- if (*string == '\0') {
- goto done;
- }
- string++;
- sch = *string;
- }
- continue;
- }
-
- if (*ch != '%') {
- literal:
- if (*string == '\0') {
- underflow = 1;
- goto done;
- }
- sch = *string;
- string++;
- if (*ch != sch) {
- goto done;
- }
- continue;
- }
-
- ch = format++;
- if (*ch == '%') {
- goto literal;
- }
-
- /*
- * Check for assignment suppression ('*') or an XPG3-style
- * assignment ('%n$').
- */
-
- if (*ch == '*') {
- flags |= SCAN_SUPPRESS;
- ch = format++;
- } else if ( isdigit(UCHAR(*ch))) {
- value = strtoul(format-1, &end, 10);
- if (*end == '$') {
- format = end+1;
- ch = format++;
- objIndex = varStart + value;
- }
- }
-
- /*
- * Parse any width specifier.
- */
-
- if ( isdigit(UCHAR(*ch))) {
- width = strtoul(format-1, &format, 10);
- ch = format++;
- } else {
- width = 0;
- }
-
- /*
- * Ignore size specifier.
- */
-
- if ((*ch == 'l') || (*ch == 'L') || (*ch == 'h')) {
- ch = format++;
- }
-
- /*
- * Handle the various field types.
- */
-
- switch (*ch) {
- case 'n':
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- current = args[objIndex++];
- convert_to_long( *current );
- ZVAL_STRINGL( *current, string, end-string, 1);
- } else {
- add_index_long(*return_value, objIndex++, string - baseString);
- }
- }
- nconversions++;
- continue;
-
- case 'd':
- case 'D':
- op = 'i';
- base = 10;
- fn = (long (*)())strtol;
- break;
- case 'i':
- op = 'i';
- base = 0;
- fn = (long (*)())strtol;
- break;
- case 'o':
- op = 'i';
- base = 8;
- fn = (long (*)())strtol;
- break;
- case 'x':
- op = 'i';
- base = 16;
- fn = (long (*)())strtol;
- break;
- case 'u':
- op = 'i';
- base = 10;
- flags |= SCAN_UNSIGNED;
- fn = (long (*)())strtoul;
- break;
-
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- op = 'f';
- break;
-
- case 's':
- op = 's';
- break;
-
- case 'c':
- op = 's';
- flags |= SCAN_NOSKIP;
- /*-cc-*/
- if (0 == width) {
- width = 1;
- }
- /*-cc-*/
- break;
- case '[':
- op = '[';
- flags |= SCAN_NOSKIP;
- break;
- } /* switch */
-
- /*
- * At this point, we will need additional characters from the
- * string to proceed.
- */
-
- if (*string == '\0') {
- underflow = 1;
- goto done;
- }
-
- /*
- * Skip any leading whitespace at the beginning of a field unless
- * the format suppresses this behavior.
- */
-
- if (!(flags & SCAN_NOSKIP)) {
- while (*string != '\0') {
- sch = *string;
- if (! isspace((int)sch) ) {
- break;
- }
- string++;
- }
- if (*string == '\0') {
- underflow = 1;
- goto done;
- }
- }
-
- /*
- * Perform the requested scanning operation.
- */
-
- switch (op) {
- case 'c':
- case 's':
- /*
- * Scan a string up to width characters or whitespace.
- */
-
- if (width == 0) {
- width = (size_t) ~0;
- }
- end = string;
- while (*end != '\0') {
- sch = *end;
- if ( isspace( (int)sch ) ) {
- break;
- }
- end++;
- if (--width == 0) {
- break;
- }
- }
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- current = args[objIndex++];
- convert_to_string( *current );
- ZVAL_STRINGL( *current, string, end-string, 1);
- } else {
- add_index_stringl( *return_value, objIndex++, string, end-string, 1);
- }
- }
- string = end;
- break;
-
- case '[': {
- CharSet cset;
-
- if (width == 0) {
- width = (size_t) ~0;
- }
- end = string;
-
- format = BuildCharSet(&cset, format);
- while (*end != '\0') {
- sch = *end;
- if (!CharInSet(&cset, (int)sch)) {
- break;
- }
- end++;
- if (--width == 0) {
- break;
- }
- }
- ReleaseCharSet(&cset);
-
- if (string == end) {
- /*
- * Nothing matched the range, stop processing
- */
- goto done;
- }
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- current = args[objIndex++];
- convert_to_string( *current );
- ZVAL_STRINGL( *current, string, end-string, 1);
- } else {
- add_index_stringl(*return_value, objIndex++, string, end-string, 1);
- }
- }
- string = end;
-
- break;
- }
- /*
- case 'c':
- / Scan a single character./
-
- sch = *string;
- string++;
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- char __buf[2];
- __buf[0] = sch;
- __buf[1] = '\0';;
- current = args[objIndex++];
- convert_to_string_ex( current );
- ZVAL_STRINGL( *current, __buf, 1, 1);
- } else {
- add_index_stringl(*return_value, objIndex++, &sch, 1, 1);
- }
- }
- break;
- */
- case 'i':
- /*
- * Scan an unsigned or signed integer.
- */
-
- /*-cc-*/
- buf[0] = '\0';
- /*-cc-*/
- if ((width == 0) || (width > sizeof(buf) - 1)) {
- width = sizeof(buf) - 1;
- }
-
- flags |= SCAN_SIGNOK | SCAN_NODIGITS | SCAN_NOZERO;
- for (end = buf; width > 0; width--) {
- switch (*string) {
- /*
- * The 0 digit has special meaning at the beginning of
- * a number. If we are unsure of the base, it
- * indicates that we are in base 8 or base 16 (if it is
- * followed by an 'x').
- */
- case '0':
- /*-cc-*/
- if (base == 16) {
- flags |= SCAN_XOK;
- }
- /*-cc-*/
- if (base == 0) {
- base = 8;
- flags |= SCAN_XOK;
- }
- if (flags & SCAN_NOZERO) {
- flags &= ~(SCAN_SIGNOK | SCAN_NODIGITS | SCAN_NOZERO);
- } else {
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- }
- goto addToInt;
-
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- if (base == 0) {
- base = 10;
- }
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- goto addToInt;
-
- case '8': case '9':
- if (base == 0) {
- base = 10;
- }
- if (base <= 8) {
- break;
- }
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- goto addToInt;
-
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- if (base <= 10) {
- break;
- }
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- goto addToInt;
-
- case '+': case '-':
- if (flags & SCAN_SIGNOK) {
- flags &= ~SCAN_SIGNOK;
- goto addToInt;
- }
- break;
-
- case 'x': case 'X':
- if ((flags & SCAN_XOK) && (end == buf+1)) {
- base = 16;
- flags &= ~SCAN_XOK;
- goto addToInt;
- }
- break;
- }
-
- /*
- * We got an illegal character so we are done accumulating.
- */
-
- break;
-
- addToInt:
- /*
- * Add the character to the temporary buffer.
- */
- *end++ = *string++;
- if (*string == '\0') {
- break;
- }
- }
-
- /*
- * Check to see if we need to back up because we only got a
- * sign or a trailing x after a 0.
- */
-
- if (flags & SCAN_NODIGITS) {
- if (*string == '\0') {
- underflow = 1;
- }
- goto done;
- } else if (end[-1] == 'x' || end[-1] == 'X') {
- end--;
- string--;
- }
-
-
- /*
- * Scan the value from the temporary buffer. If we are
- * returning a large unsigned value, we have to convert it back
- * to a string since PHP only supports signed values.
- */
-
- if (!(flags & SCAN_SUPPRESS)) {
- *end = '\0';
- value = (int) (*fn)(buf, NULL, base);
- if ((flags & SCAN_UNSIGNED) && (value < 0)) {
- sprintf(buf, "%u", value); /* INTL: ISO digit */
- if (numVars) {
- /* change passed value type to string */
- current = args[objIndex++];
- convert_to_string( *current );
- ZVAL_STRING( *current, buf, 1 );
- } else {
- add_index_string(*return_value, objIndex++, buf, 1);
- }
- } else {
- if (numVars) {
- current = args[objIndex++];
- convert_to_long( *current );
- Z_LVAL(**current) = value;
- } else {
- add_index_long(*return_value, objIndex++, value);
- }
- }
- }
-
- break;
-
- case 'f':
- /*
- * Scan a floating point number
- */
- buf[0] = '\0'; /* call me pedantic */
- if ((width == 0) || (width > sizeof(buf) - 1)) {
- width = sizeof(buf) - 1;
- }
- flags |= SCAN_SIGNOK | SCAN_NODIGITS | SCAN_PTOK | SCAN_EXPOK;
- for (end = buf; width > 0; width--) {
- switch (*string) {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- case '8': case '9':
- flags &= ~(SCAN_SIGNOK | SCAN_NODIGITS);
- goto addToFloat;
- case '+': case '-':
- if (flags & SCAN_SIGNOK) {
- flags &= ~SCAN_SIGNOK;
- goto addToFloat;
- }
- break;
- case '.':
- if (flags & SCAN_PTOK) {
- flags &= ~(SCAN_SIGNOK | SCAN_PTOK);
- goto addToFloat;
- }
- break;
- case 'e': case 'E':
- /*
- * An exponent is not allowed until there has
- * been at least one digit.
- */
-
- if ((flags & (SCAN_NODIGITS | SCAN_EXPOK)) == SCAN_EXPOK) {
- flags = (flags & ~(SCAN_EXPOK|SCAN_PTOK))
- | SCAN_SIGNOK | SCAN_NODIGITS;
- goto addToFloat;
- }
- break;
- }
-
- /*
- * We got an illegal character so we are done accumulating.
- */
-
- break;
-
- addToFloat:
- /*
- * Add the character to the temporary buffer.
- */
-
- *end++ = *string++;
- if (*string == '\0') {
- break;
- }
- }
-
- /*
- * Check to see if we need to back up because we saw a
- * trailing 'e' or sign.
- */
-
- if (flags & SCAN_NODIGITS) {
- if (flags & SCAN_EXPOK) {
- /*
- * There were no digits at all so scanning has
- * failed and we are done.
- */
- if (*string == '\0') {
- underflow = 1;
- }
- goto done;
- }
-
- /*
- * We got a bad exponent ('e' and maybe a sign).
- */
-
- end--;
- string--;
- if (*end != 'e' && *end != 'E') {
- end--;
- string--;
- }
- }
-
- /*
- * Scan the value from the temporary buffer.
- */
-
- if (!(flags & SCAN_SUPPRESS)) {
- double dvalue;
- *end = '\0';
- dvalue = strtod(buf, NULL);
- if (numVars) {
- current = args[objIndex++];
- convert_to_double( *current );
- Z_DVAL_PP( current ) = dvalue;
- } else {
- add_index_double( *return_value, objIndex++, dvalue );
- }
- }
- break;
- } /* switch (op) */
- nconversions++;
- } /* while (*format != '\0') */
-
- done:
- result = SCAN_SUCCESS;
-
- if (underflow && (0==nconversions)) {
- scan_set_error_return( numVars, return_value );
- result = SCAN_ERROR_EOF;
- } else if (numVars) {
- convert_to_long( *return_value );
- Z_LVAL_PP(return_value) = nconversions;
- } else if (nconversions < totalVars) {
- /* to do : not all elements converted. we need to prune the list - cc
- */
- }
-
- return result;
-}
-/* }}} */
-
-/* the compiler choked when i tried to make this a macro */
-static inline void scan_set_error_return(int numVars, pval **return_value)
-{
- if (numVars) {
- Z_TYPE_PP(return_value) = IS_LONG;
- Z_LVAL_PP(return_value) = SCAN_ERROR_EOF; /* EOF marker */
- } else {
- /* pval_destructor( *return_value ); */
- /* convert_to_null calls destructor */
- convert_to_null( *return_value );
- }
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/scanf.h b/ext/standard/scanf.h
deleted file mode 100644
index 275c5e51a0..0000000000
--- a/ext/standard/scanf.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Clayton Collie <clcollie@mindspring.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef SCANF_H
-#define SCANF_H
-
-
-#define SCAN_MAX_ARGS 0xFF /* Maximum number of variable which can be */
- /* passed to (f|s)scanf. This is an artifical */
- /* upper limit to keep resources in check and */
- /* minimize the possibility of exploits */
-
-#define SCAN_MAX_FSCANF_BUFSIZE 512 /* Max input buffer allocated for fscanf */
-#define SCAN_SUCCESS SUCCESS
-#define SCAN_ERROR_EOF -1 /* indicates premature termination of scan */
- /* can be caused by bad parameters or format*/
- /* string. */
-#define SCAN_ERROR_INVALID_FORMAT (SCAN_ERROR_EOF - 1)
-#define SCAN_ERROR_VAR_PASSED_BYVAL (SCAN_ERROR_INVALID_FORMAT - 1)
-#define SCAN_ERROR_WRONG_PARAM_COUNT (SCAN_ERROR_VAR_PASSED_BYVAL - 1)
-#define SCAN_ERROR_INTERNAL (SCAN_ERROR_WRONG_PARAM_COUNT - 1)
-
-
-/*
- * The following are here solely for the benefit of the scanf type functions
- * e.g. fscanf
- */
-PHPAPI int ValidateFormat(char *format, int numVars, int *totalVars);
-PHPAPI int php_sscanf_internal(char *string,char *format,int argCount,zval ***args,
- int varStart, pval **return_value TSRMLS_DC);
-
-
-#endif /* SCANF_H */
diff --git a/ext/standard/soundex.c b/ext/standard/soundex.c
deleted file mode 100644
index 116f69a461..0000000000
--- a/ext/standard/soundex.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Bjørn Borud - Guardian Networks AS <borud@guardian.no> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include "php_string.h"
-
-/* Simple soundex algorithm as described by Knuth in TAOCP, vol 3 */
-/* {{{ proto string soundex(string str)
- Calculate the soundex key of a string */
-PHP_FUNCTION(soundex)
-{
- char *str;
- int i, _small, str_len, code, last;
- char soundex[4 + 1];
-
- static char soundex_table[26] =
- {0, /* A */
- '1', /* B */
- '2', /* C */
- '3', /* D */
- 0, /* E */
- '1', /* F */
- '2', /* G */
- 0, /* H */
- 0, /* I */
- '2', /* J */
- '2', /* K */
- '4', /* L */
- '5', /* M */
- '5', /* N */
- 0, /* O */
- '1', /* P */
- '2', /* Q */
- '6', /* R */
- '2', /* S */
- '3', /* T */
- 0, /* U */
- '1', /* V */
- 0, /* W */
- '2', /* X */
- 0, /* Y */
- '2'}; /* Z */
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- if (str_len == 0) {
- RETURN_FALSE;
- }
-
- /* build soundex string */
- last = -1;
- for (i = 0, _small = 0; i < str_len && _small < 4; i++) {
- /* convert chars to upper case and strip non-letter chars */
- /* BUG: should also map here accented letters used in non */
- /* English words or names (also found in English text!): */
- /* esstsett, thorn, n-tilde, c-cedilla, s-caron, ... */
- code = toupper(str[i]);
- if (code >= 'A' && code <= 'Z') {
- if (_small == 0) {
- /* remember first valid char */
- soundex[_small++] = code;
- last = soundex_table[code - 'A'];
- }
- else {
- /* ignore sequences of consonants with same soundex */
- /* code in trail, and vowels unless they separate */
- /* consonant letters */
- code = soundex_table[code - 'A'];
- if (code != last) {
- if (code != 0) {
- soundex[_small++] = code;
- }
- last = code;
- }
- }
- }
- }
- /* pad with '0' and terminate with 0 ;-) */
- while (_small < 4) {
- soundex[_small++] = '0';
- }
- soundex[_small] = '\0';
-
- RETURN_STRINGL(soundex, _small, 1);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/string.c b/ext/standard/string.c
deleted file mode 100644
index 87e57ce90d..0000000000
--- a/ext/standard/string.c
+++ /dev/null
@@ -1,3937 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Sæther Bakken <ssb@fast.no> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
-
-#include <stdio.h>
-#include "php.h"
-#include "reg.h"
-#include "php_string.h"
-#include "php_variables.h"
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#ifdef HAVE_LANGINFO_H
-# include <langinfo.h>
-#endif
-#include "scanf.h"
-#include "zend_API.h"
-#include "zend_execute.h"
-#include "php_globals.h"
-#include "basic_functions.h"
-#include "php_smart_str.h"
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#define STR_PAD_LEFT 0
-#define STR_PAD_RIGHT 1
-#define STR_PAD_BOTH 2
-#define PHP_PATHINFO_DIRNAME 1
-#define PHP_PATHINFO_BASENAME 2
-#define PHP_PATHINFO_EXTENSION 4
-#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION)
-
-/* {{{ register_string_constants
- */
-void register_string_constants(INIT_FUNC_ARGS)
-{
- REGISTER_LONG_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT);
-
-#ifdef HAVE_LOCALECONV
- /* If last members of struct lconv equal CHAR_MAX, no grouping is done */
-
-/* This is bad, but since we are going to be hardcoding in the POSIX stuff anyway... */
-# ifndef HAVE_LIMITS_H
-# define CHAR_MAX 127
-# endif
-
- REGISTER_LONG_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_CS | CONST_PERSISTENT);
-#endif
-
-#ifdef HAVE_LOCALE_H
- REGISTER_LONG_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_TIME", LC_TIME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_ALL", LC_ALL, CONST_CS | CONST_PERSISTENT);
-# ifdef LC_MESSAGES
- REGISTER_LONG_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_CS | CONST_PERSISTENT);
-# endif
-#endif
-
-}
-/* }}} */
-
-int php_tag_find(char *tag, int len, char *set);
-
-/* this is read-only, so it's ok */
-static char hexconvtab[] = "0123456789abcdef";
-
-/* localeconv mutex */
-#ifdef ZTS
-static MUTEX_T locale_mutex = NULL;
-#endif
-
-/* {{{ php_bin2hex
- */
-static char *php_bin2hex(const unsigned char *old, const size_t oldlen, size_t *newlen)
-{
- register unsigned char *result = NULL;
- size_t i, j;
-
- result = (char *) emalloc(oldlen * 2 * sizeof(char) + 1);
- if(!result) {
- return result;
- }
-
- for(i = j = 0; i < oldlen; i++) {
- result[j++] = hexconvtab[old[i] >> 4];
- result[j++] = hexconvtab[old[i] & 15];
- }
- result[j] = '\0';
-
- if (newlen)
- *newlen = oldlen * 2 * sizeof(char);
-
- return result;
-}
-/* }}} */
-
-#ifdef HAVE_LOCALECONV
-/* {{{ localeconv_r
- * glibc's localeconv is not reentrant, so lets make it so ... sorta */
-struct lconv *localeconv_r(struct lconv *out)
-{
- struct lconv *res;
-
-# ifdef ZTS
- tsrm_mutex_lock( locale_mutex );
-# endif
-
- /* localeconv doesn't return an error condition */
- res = localeconv();
-
- *out = *res;
-
-# ifdef ZTS
- tsrm_mutex_unlock( locale_mutex );
-# endif
-
- return out;
-}
-/* }}} */
-
-# ifdef ZTS
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(localeconv)
-{
- locale_mutex = tsrm_mutex_alloc();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(localeconv)
-{
- tsrm_mutex_free( locale_mutex );
- locale_mutex = NULL;
- return SUCCESS;
-}
-/* }}} */
-# endif
-#endif
-
-/* {{{ proto string bin2hex(string data)
- Converts the binary representation of data to hex */
-PHP_FUNCTION(bin2hex)
-{
- zval **data;
- char *result;
- size_t newlen;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &data) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(data);
-
- result = php_bin2hex(Z_STRVAL_PP(data), Z_STRLEN_PP(data), &newlen);
-
- if (!result) {
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(result, newlen, 0);
-}
-/* }}} */
-
-/* {{{ proto int strspn(string str, string mask)
- Finds length of initial segment consisting entirely of characters found in mask */
-PHP_FUNCTION(strspn)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
-
- RETURN_LONG(php_strspn(Z_STRVAL_PP(s1), Z_STRVAL_PP(s2),
- Z_STRVAL_PP(s1) + Z_STRLEN_PP(s1),
- Z_STRVAL_PP(s2) + Z_STRLEN_PP(s2)));
-}
-/* }}} */
-
-/* {{{ proto int strcspn(string str, string mask)
- Finds length of initial segment consisting entirely of characters not found in mask */
-PHP_FUNCTION(strcspn)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
-
- RETURN_LONG(php_strcspn(Z_STRVAL_PP(s1), Z_STRVAL_PP(s2),
- Z_STRVAL_PP(s1) + Z_STRLEN_PP(s1),
- Z_STRVAL_PP(s2) + Z_STRLEN_PP(s2)));
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(nl_langinfo) */
-#if HAVE_NL_LANGINFO
-PHP_MINIT_FUNCTION(nl_langinfo)
-{
-#define REGISTER_NL_LANGINFO_CONSTANT(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
-#ifdef ABDAY_1
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_1);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_2);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_3);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_4);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_5);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_6);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_7);
-#endif
-#ifdef DAY_1
- REGISTER_NL_LANGINFO_CONSTANT(DAY_1);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_2);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_3);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_4);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_5);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_6);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_7);
-#endif
-#ifdef ABMON_1
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_1);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_2);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_3);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_4);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_5);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_6);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_7);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_8);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_9);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_10);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_11);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_12);
-#endif
-#ifdef MON_1
- REGISTER_NL_LANGINFO_CONSTANT(MON_1);
- REGISTER_NL_LANGINFO_CONSTANT(MON_2);
- REGISTER_NL_LANGINFO_CONSTANT(MON_3);
- REGISTER_NL_LANGINFO_CONSTANT(MON_4);
- REGISTER_NL_LANGINFO_CONSTANT(MON_5);
- REGISTER_NL_LANGINFO_CONSTANT(MON_6);
- REGISTER_NL_LANGINFO_CONSTANT(MON_7);
- REGISTER_NL_LANGINFO_CONSTANT(MON_8);
- REGISTER_NL_LANGINFO_CONSTANT(MON_9);
- REGISTER_NL_LANGINFO_CONSTANT(MON_10);
- REGISTER_NL_LANGINFO_CONSTANT(MON_11);
- REGISTER_NL_LANGINFO_CONSTANT(MON_12);
-#endif
-#ifdef AM_STR
- REGISTER_NL_LANGINFO_CONSTANT(AM_STR);
-#endif
-#ifdef PM_STR
- REGISTER_NL_LANGINFO_CONSTANT(PM_STR);
-#endif
-#ifdef D_T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(D_T_FMT);
-#endif
-#ifdef D_FMT
- REGISTER_NL_LANGINFO_CONSTANT(D_FMT);
-#endif
-#ifdef T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(T_FMT);
-#endif
-#ifdef T_FMT_AMPM
- REGISTER_NL_LANGINFO_CONSTANT(T_FMT_AMPM);
-#endif
-#ifdef ERA
- REGISTER_NL_LANGINFO_CONSTANT(ERA);
-#endif
-#ifdef ERA_YEAR
- REGISTER_NL_LANGINFO_CONSTANT(ERA_YEAR);
-#endif
-#ifdef ERA_D_T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(ERA_D_T_FMT);
-#endif
-#ifdef ERA_D_FMT
- REGISTER_NL_LANGINFO_CONSTANT(ERA_D_FMT);
-#endif
-#ifdef ERA_T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(ERA_T_FMT);
-#endif
-#ifdef ALT_DIGITS
- REGISTER_NL_LANGINFO_CONSTANT(ALT_DIGITS);
-#endif
-#ifdef INT_CURR_SYMBOL
- REGISTER_NL_LANGINFO_CONSTANT(INT_CURR_SYMBOL);
-#endif
-#ifdef CURRENCY_SYMBOL
- REGISTER_NL_LANGINFO_CONSTANT(CURRENCY_SYMBOL);
-#endif
-#ifdef CRNCYSTR
- REGISTER_NL_LANGINFO_CONSTANT(CRNCYSTR);
-#endif
-#ifdef MON_DECIMAL_POINT
- REGISTER_NL_LANGINFO_CONSTANT(MON_DECIMAL_POINT);
-#endif
-#ifdef MON_THOUSANDS_SEP
- REGISTER_NL_LANGINFO_CONSTANT(MON_THOUSANDS_SEP);
-#endif
-#ifdef MON_GROUPING
- REGISTER_NL_LANGINFO_CONSTANT(MON_GROUPING);
-#endif
-#ifdef POSITIVE_SIGN
- REGISTER_NL_LANGINFO_CONSTANT(POSITIVE_SIGN);
-#endif
-#ifdef NEGATIVE_SIGN
- REGISTER_NL_LANGINFO_CONSTANT(NEGATIVE_SIGN);
-#endif
-#ifdef INT_FRAC_DIGITS
- REGISTER_NL_LANGINFO_CONSTANT(INT_FRAC_DIGITS);
-#endif
-#ifdef FRAC_DIGITS
- REGISTER_NL_LANGINFO_CONSTANT(FRAC_DIGITS);
-#endif
-#ifdef P_CS_PRECEDES
- REGISTER_NL_LANGINFO_CONSTANT(P_CS_PRECEDES);
-#endif
-#ifdef P_SEP_BY_SPACE
- REGISTER_NL_LANGINFO_CONSTANT(P_SEP_BY_SPACE);
-#endif
-#ifdef N_CS_PRECEDES
- REGISTER_NL_LANGINFO_CONSTANT(N_CS_PRECEDES);
-#endif
-#ifdef N_SEP_BY_SPACE
- REGISTER_NL_LANGINFO_CONSTANT(N_SEP_BY_SPACE);
-#endif
-#ifdef P_SIGN_POSN
- REGISTER_NL_LANGINFO_CONSTANT(P_SIGN_POSN);
-#endif
-#ifdef N_SIGN_POSN
- REGISTER_NL_LANGINFO_CONSTANT(N_SIGN_POSN);
-#endif
-#ifdef DECIMAL_POINT
- REGISTER_NL_LANGINFO_CONSTANT(DECIMAL_POINT);
-#endif
-#ifdef RADIXCHAR
- REGISTER_NL_LANGINFO_CONSTANT(RADIXCHAR);
-#endif
-#ifdef THOUSANDS_SEP
- REGISTER_NL_LANGINFO_CONSTANT(THOUSANDS_SEP);
-#endif
-#ifdef THOUSEP
- REGISTER_NL_LANGINFO_CONSTANT(THOUSEP);
-#endif
-#ifdef GROUPING
- REGISTER_NL_LANGINFO_CONSTANT(GROUPING);
-#endif
-#ifdef YESEXPR
- REGISTER_NL_LANGINFO_CONSTANT(YESEXPR);
-#endif
-#ifdef NOEXPR
- REGISTER_NL_LANGINFO_CONSTANT(NOEXPR);
-#endif
-#ifdef YESSTR
- REGISTER_NL_LANGINFO_CONSTANT(YESSTR);
-#endif
-#ifdef NOSTR
- REGISTER_NL_LANGINFO_CONSTANT(NOSTR);
-#endif
-#ifdef CODESET
- REGISTER_NL_LANGINFO_CONSTANT(CODESET);
-#endif
-#undef REGISTER_NL_LANGINFO_CONSTANT
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string nl_langinfo(int item)
- Query language and locale information */
-PHP_FUNCTION(nl_langinfo)
-{
- zval **item;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &item) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(item);
-
- value = nl_langinfo(Z_LVAL_PP(item));
- if (value == NULL) {
- RETURN_FALSE;
- }
- else {
- RETURN_STRING(value, 1);
- }
-}
-#endif
-/* }}} */
-
-#ifdef HAVE_STRCOLL
-/* {{{ proto int strcoll(string str1, string str2)
- Compares two strings using the current locale */
-PHP_FUNCTION(strcoll)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
-
- RETURN_LONG(strcoll((const char *) Z_STRVAL_PP(s1),
- (const char *) Z_STRVAL_PP(s2)));
-}
-/* }}} */
-#endif
-
-/* {{{ php_charmask
- * Fills a 256-byte bytemask with input. You can specify a range like 'a..z',
- * it needs to be incrementing.
- * Returns: FAILURE/SUCCESS wether the input was correct (i.e. no range errors)
- */
-int php_charmask(unsigned char *input, int len, char *mask TSRMLS_DC)
-{
- unsigned char *end;
- unsigned char c;
- int result = SUCCESS;
-
- memset(mask, 0, 256);
- for (end=input+len; input<end; input++) {
- c=*input;
- if (input+3<end && input[1] == '.' && input[2] == '.'
- && input[3] >= c) {
- memset(mask+c, 1, input[3] - c + 1);
- input+=3;
- } else if (input+1<end && input[0] == '.' && input[1] == '.') {
- /* Error, try to be as helpful as possible:
- (a range ending/starting with '.' won't be captured here) */
- if (end-len>=input) { /* there was no 'left' char */
- php_error(E_WARNING, "Invalid '..'-range passed to %s(), no character to the left of '..'", get_active_function_name(TSRMLS_C));
- result = FAILURE;
- continue;
- }
- if (input+2>=end) { /* there is no 'right' char */
- php_error(E_WARNING, "Invalid '..'-range passed to %s(), no character to the right of '..'", get_active_function_name(TSRMLS_C));
- result = FAILURE;
- continue;
- }
- if (input[-1] > input[2]) { /* wrong order */
- php_error(E_WARNING, "Invalid '..'-range passed to %s(), '..'-range needs to be incrementing", get_active_function_name(TSRMLS_C));
- result = FAILURE;
- continue;
- }
- /* FIXME: better error (a..b..c is the only left possibility?) */
- php_error(E_WARNING, "Invalid '..'-range passed to %s()", get_active_function_name(TSRMLS_C));
- result = FAILURE;
- continue;
- } else {
- mask[c]=1;
- }
- }
- return result;
-}
-/* }}} */
-
-/* {{{ php_trim
- Compatibility function, ports old-API to new one. (DEPRECATED)
-*/
-void php_trim(zval **str, zval *return_value, int mode TSRMLS_DC)
-{
- php_trim2(str, NULL, return_value, mode TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_trim2
- */
-PHPAPI void php_trim2(zval **str, zval **what, zval *return_value, int mode TSRMLS_DC)
-/* mode 1 : trim left
- mode 2 : trim right
- mode 3 : trim left and right
-
- what indicates which chars are to be trimmed. NULL->default (' \t\n\r\v\0')
-*/
-{
- register int i;
- int len = Z_STRLEN_PP(str);
- int trimmed = 0;
- char *c = Z_STRVAL_PP(str);
- char mask[256];
-
- if (what) {
- php_charmask(Z_STRVAL_PP(what), Z_STRLEN_PP(what), mask TSRMLS_CC);
- } else {
- php_charmask(" \n\r\t\v\0", 6, mask TSRMLS_CC);
- }
-
- if (mode & 1) {
- for (i = 0; i < len; i++) {
- if (mask[(unsigned char)c[i]]) {
- trimmed++;
- } else {
- break;
- }
- }
- len -= trimmed;
- c += trimmed;
- }
- if (mode & 2) {
- for (i = len - 1; i >= 0; i--) {
- if (mask[(unsigned char)c[i]]) {
- len--;
- } else {
- break;
- }
- }
- }
- RETVAL_STRINGL(c, len, 1);
-}
-/* }}} */
-
-/* {{{ proto string chop(string str [, string character_mask])
- An alias for rtrim */
-/* }}} */
-
-/* {{{ proto string rtrim(string str [, string character_mask])
- Removes trailing whitespace */
-PHP_FUNCTION(rtrim)
-{
- zval **str;
- zval **what = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 ||
- zend_get_parameters_ex(argc, &str, &what) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- if (argc > 1) {
- convert_to_string_ex(what);
- }
-
- php_trim2(str, what, return_value, 2 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string trim(string str [, string character_mask])
- Strips whitespace from the beginning and end of a string */
-PHP_FUNCTION(trim)
-{
- zval **str;
- zval **what = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 ||
- zend_get_parameters_ex(argc, &str, &what) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- if (argc > 1) {
- convert_to_string_ex(what);
- }
-
- php_trim2(str, what, return_value, 3 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string ltrim(string str [, string character_mask])
- Strips whitespace from the beginning of a string */
-PHP_FUNCTION(ltrim)
-{
- zval **str;
- zval **what = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 ||
- zend_get_parameters_ex(argc, &str, &what) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- if (argc > 1) {
- convert_to_string_ex(what);
- }
-
- php_trim2(str, what, return_value, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string wordwrap(string str [, int width [, string break [, int cut]]])
- Wraps buffer to selected number of characters using string break char */
-PHP_FUNCTION(wordwrap)
-{
- const char *text, *breakchar = "\n";
- char *newtext;
- int textlen, breakcharlen = 1, newtextlen;
- long current = 0, laststart = 0, lastspace = 0;
- long linelength = 75;
- zend_bool docut = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lsb", &text, &textlen, &linelength, &breakchar, &breakcharlen, &docut) == FAILURE) {
- return;
- }
-
- if (textlen == 0)
- RETURN_FALSE;
-
- if (linelength == 0 && docut) {
- php_error(E_WARNING, "%s() can't force cut when width is zero",get_active_function_name(TSRMLS_C));
- RETURN_FALSE;
- }
-
- /* Special case for a single-character break as it needs no
- additional storage space */
- if (breakcharlen == 1 && !docut) {
- newtext = estrndup(text, textlen);
-
- laststart = lastspace = 0;
- for (current = 0; current < textlen; current++) {
- if (text[current] == breakchar[0]) {
- laststart = lastspace = current;
- }
- else if (text[current] == ' ') {
- if (current - laststart >= linelength) {
- newtext[current] = breakchar[0];
- laststart = current;
- }
- lastspace = current;
- }
- else if (current - laststart >= linelength
- && laststart != lastspace) {
- newtext[lastspace] = breakchar[0];
- laststart = lastspace;
- }
- }
-
- RETURN_STRINGL(newtext, textlen, 0);
- }
- else {
- /* Multiple character line break or forced cut */
- if (linelength > 0) {
- newtextlen = textlen + (textlen/linelength + 1) * breakcharlen + 1;
- }
- else {
- newtextlen = textlen * (breakcharlen + 1) + 1;
- }
- newtext = emalloc(newtextlen);
-
- /* now keep track of the actual new text length */
- newtextlen = 0;
-
- laststart = lastspace = 0;
- for (current = 0; current < textlen; current++) {
- /* when we hit an existing break, copy to new buffer, and
- * fix up laststart and lastspace */
- if (text[current] == breakchar[0]
- && current + breakcharlen < textlen
- && !strncmp(text+current, breakchar, breakcharlen)) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart+breakcharlen);
- newtextlen += current-laststart+breakcharlen;
- current += breakcharlen - 1;
- laststart = lastspace = current + 1;
- }
- /* if it is a space, check if it is at the line boundary,
- * copy and insert a break, or just keep track of it */
- else if (text[current] == ' ') {
- if (current - laststart >= linelength) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart);
- newtextlen += current - laststart;
- memcpy(newtext+newtextlen, breakchar, breakcharlen);
- newtextlen += breakcharlen;
- laststart = current + 1;
- }
- lastspace = current;
- }
- /* if we are cutting, and we've accumulated enough
- * characters, and we haven't see a space for this line,
- * copy and insert a break. */
- else if (current - laststart >= linelength
- && docut && laststart >= lastspace) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart);
- newtextlen += current - laststart;
- memcpy(newtext+newtextlen, breakchar, breakcharlen);
- newtextlen += breakcharlen;
- laststart = lastspace = current;
- }
- /* if the current word puts us over the linelength, copy
- * back up until the last space, insert a break, and move
- * up the laststart */
- else if (current - laststart >= linelength
- && laststart < lastspace) {
- memcpy(newtext+newtextlen, text+laststart, lastspace-laststart);
- newtextlen += lastspace - laststart;
- memcpy(newtext+newtextlen, breakchar, breakcharlen);
- newtextlen += breakcharlen;
- laststart = lastspace = lastspace + 1;
- }
- }
-
- /* copy over any stragglers */
- if (laststart != current) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart);
- newtextlen += current - laststart;
- }
-
- newtext[newtextlen] = '\0';
-
- RETURN_STRINGL(newtext, newtextlen, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_explode
- */
-PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit)
-{
- char *p1, *p2, *endp;
-
- endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);
-
- p1 = Z_STRVAL_P(str);
- p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);
-
- if (p2 == NULL) {
- add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);
- } else {
- do {
- add_next_index_stringl(return_value, p1, p2 - p1, 1);
- p1 = p2 + Z_STRLEN_P(delim);
- } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL &&
- (limit == -1 || --limit > 1));
-
- if (p1 <= endp)
- add_next_index_stringl(return_value, p1, endp-p1, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto array explode(string separator, string str [, int limit])
- Splits a string on string separator and return array of components */
-PHP_FUNCTION(explode)
-{
- zval **str, **delim, **zlimit = NULL;
- int limit = -1;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &delim, &str, &zlimit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_string_ex(delim);
-
- if (argc > 2) {
- convert_to_long_ex(zlimit);
- limit = Z_LVAL_PP(zlimit);
- }
-
- if (! Z_STRLEN_PP(delim)) {
- php_error(E_WARNING, "Empty delimiter");
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (limit == 0 || limit == 1) {
- add_index_stringl(return_value, 0, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- } else {
- php_explode(*delim, *str, return_value, limit);
- }
-}
-/* }}} */
-
-/* {{{ proto string join(array src, string glue)
- An alias for implode */
-/* }}} */
-
-/* {{{ php_implode
- */
-PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value)
-{
- zval **tmp;
- char *tmp_str;
- int len = 0, count = 0, target = 0;
- HashPosition pos;
-
- /* convert everything to strings, and calculate length */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **) &tmp, &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
- len += Z_STRLEN_PP(tmp);
- if (count > 0) {
- len += Z_STRLEN_P(delim);
- }
-
- count++;
- zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
- }
-
- /* do it */
- tmp_str = (char *) emalloc(len + 1);
- tmp_str[0] = 0;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **) &tmp, &pos) == SUCCESS) {
- count--;
- memcpy(tmp_str + target, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- target += Z_STRLEN_PP(tmp);
- if (count > 0) {
- memcpy(tmp_str + target, Z_STRVAL_P(delim), Z_STRLEN_P(delim));
- target += Z_STRLEN_P(delim);
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
- }
- tmp_str[len] = 0;
-
- RETURN_STRINGL(tmp_str, len, 0);
-}
-/* }}} */
-
-/* {{{ proto string implode(array src, string glue)
- Joins array elements placing glue string between items and return one string */
-PHP_FUNCTION(implode)
-{
- zval **arg1, **arg2, *delim, *arr;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg1) == IS_ARRAY) {
- SEPARATE_ZVAL(arg1);
- arr = *arg1;
- convert_to_string_ex(arg2);
- delim = *arg2;
- } else if (Z_TYPE_PP(arg2) == IS_ARRAY) {
- SEPARATE_ZVAL(arg2)
- arr = *arg2;
- convert_to_string_ex(arg1);
- delim = *arg1;
- } else {
- php_error(E_WARNING, "Bad arguments to %s()",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- php_implode(delim, arr, return_value);
-}
-/* }}} */
-
-#define STRTOK_TABLE(p) BG(strtok_table)[(unsigned char) *p]
-
-/* {{{ proto string strtok([string str,] string token)
- Tokenize a string */
-PHP_FUNCTION(strtok)
-{
- zval **args[2];
- zval **tok, **str;
- char *token;
- char *token_end;
- char *p;
- char *pe;
- int skipped = 0;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE)
- WRONG_PARAM_COUNT;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- tok = args[0];
- break;
- case 2:
- str = args[0];
- tok = args[1];
- convert_to_string_ex(str);
-
- zval_add_ref(str);
- if (BG(strtok_zval))
- zval_ptr_dtor(&BG(strtok_zval));
- BG(strtok_zval) = *str;
-
- BG(strtok_last) = BG(strtok_string) = Z_STRVAL_PP(str);
- BG(strtok_len) = Z_STRLEN_PP(str);
- break;
- }
-
- p = BG(strtok_last); /* Where we start to search */
- pe = BG(strtok_string) + BG(strtok_len);
-
- if (!p || p >= pe)
- RETURN_FALSE;
-
- convert_to_string_ex(tok);
-
- token = Z_STRVAL_PP(tok);
- token_end = token + Z_STRLEN_PP(tok);
-
- while (token < token_end)
- STRTOK_TABLE(token++) = 1;
-
- /* Skip leading delimiters */
- while (STRTOK_TABLE(p))
- {
- if (++p >= pe) {
- /* no other chars left */
- BG(strtok_last) = NULL;
- RETVAL_FALSE;
- goto restore;
- }
- skipped++;
- }
-
- /* We know at this place that *p is no delimiter, so skip it */
- while (++p < pe)
- if (STRTOK_TABLE(p))
- goto return_token;
-
- if (p - BG(strtok_last)) {
-return_token:
- RETVAL_STRINGL(BG(strtok_last) + skipped, (p - BG(strtok_last)) - skipped, 1);
- BG(strtok_last) = p + 1;
- } else {
- RETVAL_FALSE;
- BG(strtok_last) = NULL;
- }
-
- /* Restore table -- usually faster then memset'ing the table
- on every invocation */
-restore:
- token = Z_STRVAL_PP(tok);
-
- while (token < token_end)
- STRTOK_TABLE(token++) = 0;
-}
-/* }}} */
-
-/* {{{ php_strtoupper
- */
-PHPAPI char *php_strtoupper(char *s, size_t len)
-{
- char *c;
- int ch;
- size_t i;
-
- c = s;
- for (i=0; i<len; i++) {
- ch = toupper((unsigned char)*c);
- *c++ = ch;
- }
- return s;
-}
-/* }}} */
-
-/* {{{ proto string strtoupper(string str)
- Makes a string uppercase */
-PHP_FUNCTION(strtoupper)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- *return_value = **arg;
- zval_copy_ctor(return_value);
- php_strtoupper(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
-}
-/* }}} */
-
-/* {{{ php_strtolower
- */
-PHPAPI char *php_strtolower(char *s, size_t len)
-{
- register int ch;
- char *c;
- size_t i;
-
- c = s;
- for (i=0; i<len; i++) {
- ch = tolower((unsigned char)*c);
- *c++ = ch;
- }
- return s;
-}
-/* }}} */
-
-/* {{{ proto string strtolower(string str)
- Makes a string lowercase */
-PHP_FUNCTION(strtolower)
-{
- zval **str;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- *return_value = **str;
- zval_copy_ctor(return_value);
- ret = php_strtolower(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
-}
-/* }}} */
-
-/* {{{ php_basename
- */
-PHPAPI char *php_basename(char *s, size_t len, char *suffix, size_t sufflen)
-{
- char *ret=NULL, *c, *p=NULL, buf='\0', *p2=NULL, buf2='\0';
- c = s + len - 1;
-
- /* do suffix removal as the unix command does */
- if(suffix && (len > sufflen)) {
- if(!strncmp(suffix, c-sufflen+1, sufflen)) {
- c -= sufflen;
- buf2 = *(c + 1); /* Save overwritten char */
- *(c + 1) = '\0'; /* overwrite char */
- p2 = c + 1; /* Save pointer to overwritten char */
- }
- }
-
-
- /* strip trailing slashes */
- while (*c == '/'
-#ifdef PHP_WIN32
- || (*c == '\\' && !IsDBCSLeadByte(*(c-1)))
-#endif
- )
- c--;
- if(c < s+len-1) {
- buf = *(c + 1); /* Save overwritten char */
- *(c + 1) = '\0'; /* overwrite char */
- p = c + 1; /* Save pointer to overwritten char */
- }
-
- if ((c = strrchr(s, '/'))
-#ifdef PHP_WIN32
- || ((c = strrchr(s, '\\')) && !IsDBCSLeadByte(*(c-1)))
-#endif
- ) {
- ret = estrdup(c + 1);
- } else {
- ret = estrdup(s);
- }
- if(buf) *p = buf;
- if(buf2) *p2 = buf2;
- return (ret);
-}
-/* }}} */
-
-/* {{{ proto string basename(string path [, string suffix])
- Returns the filename component of the path */
-PHP_FUNCTION(basename)
-{
- char *ret;
- char *string, *suffix = NULL;
- int string_len, suffix_len = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &string, &string_len, &suffix, &suffix_len) == FAILURE) {
- return;
- }
-
- ret = php_basename(string, string_len, suffix, suffix_len);
- RETURN_STRING(ret, 0);
-}
-/* }}} */
-
-/* {{{ php_dirname
- Returns directory name component of path */
-PHPAPI void php_dirname(char *path, int len)
-{
- register char *end = path + len - 1;
-
-#ifdef PHP_WIN32
- /* Note that on Win32 CWD is per drive (heritage from CP/M).
- * This means dirname("c:foo") maps to "c:." or "c:" - which means CWD on C: drive.
- */
- if ((2 <= len) && isalpha(path[0]) && (':' == path[1])) {
- /* Skip over the drive spec (if any) so as not to change */
- path += 2;
- if (2 == len) {
- /* Return "c:" on Win32 for dirname("c:").
- * It would be more consistent to return "c:."
- * but that would require making the string *longer*.
- */
- return;
- }
- }
-#endif
-
- if (len <= 0) {
- /* Illegal use of this function */
- return;
- }
-
- /* Strip trailing slashes */
- while (end >= path && IS_SLASH_P(end)) {
- end--;
- }
- if (end < path) {
- /* The path only contained slashes */
- path[0] = DEFAULT_SLASH;
- path[1] = '\0';
- return;
- }
-
- /* Strip filename */
- while (end >= path && !IS_SLASH_P(end)) {
- end--;
- }
- if (end < path) {
- /* No slash found, therefore return '.' */
- path[0] = '.';
- path[1] = '\0';
- return;
- }
-
- /* Strip slashes which came before the file name */
- while (end >= path && IS_SLASH_P(end)) {
- end--;
- }
- if (end < path) {
- path[0] = DEFAULT_SLASH;
- path[1] = '\0';
- return;
- }
- *(end+1) = '\0';
-}
-/* }}} */
-
-/* {{{ proto string dirname(string path)
- Returns the directory name component of the path */
-PHP_FUNCTION(dirname)
-{
- zval **str;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ret = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- php_dirname(ret, Z_STRLEN_PP(str));
-
- RETURN_STRING(ret, 0);
-}
-/* }}} */
-
-/* {{{ proto array pathinfo(string path)
- Returns information about a certain string */
-PHP_FUNCTION(pathinfo)
-{
- zval *tmp;
- char *path, *ret;
- int path_len;
- int opt = PHP_PATHINFO_ALL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &path, &path_len, &opt) == FAILURE) {
- return;
- }
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- if ((opt & PHP_PATHINFO_DIRNAME) == PHP_PATHINFO_DIRNAME) {
- ret = estrndup(path, path_len);
- php_dirname(ret, path_len);
- if (*ret)
- add_assoc_string(tmp, "dirname", ret, 1);
- efree(ret);
- }
-
- if ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME) {
- ret = php_basename(path, path_len, NULL, 0);
- add_assoc_string(tmp, "basename", ret, 0);
- }
-
- if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
- char *p;
- int idx;
- int ret_len;
- int have_basename = ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME);
-
- /* Have we alrady looked up the basename? */
- if (!have_basename) {
- ret = php_basename(path, path_len, NULL, 0);
- }
-
- ret_len = strlen(ret);
-
- p = strrchr(ret, '.');
-
- if (p) {
- idx = p - ret;
- add_assoc_stringl(tmp, "extension", ret + idx + 1, ret_len - idx - 1, 1);
- }
-
- if (!have_basename) {
- efree(ret);
- }
- }
-
- if (opt == PHP_PATHINFO_ALL) {
- *return_value = *tmp;
- } else {
- zval **element;
- if (zend_hash_get_current_data(Z_ARRVAL_P(tmp), (void **) &element) == SUCCESS) {
- *return_value = **element;
- } else {
- ZVAL_EMPTY_STRING(return_value);
- }
- }
-
- zval_copy_ctor(return_value);
- zval_dtor(tmp);
- efree(tmp);
-}
-/* }}} */
-
-/* {{{ php_stristr
- * case insensitve strstr */
-PHPAPI char *php_stristr(unsigned char *s, unsigned char *t,
- size_t s_len, size_t t_len)
-{
- php_strtolower(s, s_len);
- php_strtolower(t, t_len);
- return php_memnstr(s, t, t_len, s + s_len);
-}
-/* }}} */
-
-/* {{{ php_strspn
- */
-PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end)
-{
- register const char *p = s1, *spanp;
- register char c = *p;
-
-cont:
- for (spanp = s2; p != s1_end && spanp != s2_end;)
- if (*spanp++ == c) {
- c = *(++p);
- goto cont;
- }
- return (p - s1);
-}
-/* }}} */
-
-/* {{{ php_strcspn
- */
-PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end)
-{
- register const char *p, *spanp;
- register char c = *s1;
-
- for (p = s1;;) {
- spanp = s2;
- do {
- if (*spanp == c || p == s1_end)
- return p - s1;
- } while (spanp++ < s2_end);
- c = *++p;
- }
- /* NOTREACHED */
-}
-/* }}} */
-
-/* {{{ proto string stristr(string haystack, string needle)
- Finds first occurrence of a string within another, case insensitive */
-PHP_FUNCTION(stristr)
-{
- zval **haystack, **needle;
- char *found = NULL;
- int found_offset;
- char *haystack_orig;
- char needle_char[2];
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- SEPARATE_ZVAL(haystack);
- SEPARATE_ZVAL(needle);
-
- convert_to_string_ex(haystack);
-
- if (!Z_STRLEN_PP(needle)) {
- php_error(E_WARNING, "Empty Delimiter");
- RETURN_FALSE;
- }
-
- haystack_orig = estrndup(Z_STRVAL_PP(haystack), Z_STRLEN_PP(haystack));
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- if (!Z_STRLEN_PP(needle)) {
- php_error(E_WARNING, "Empty Delimiter");
- RETURN_FALSE;
- }
-
- found = php_stristr(Z_STRVAL_PP(haystack), Z_STRVAL_PP(needle),
- Z_STRLEN_PP(haystack), Z_STRLEN_PP(needle));
- }
- else {
- convert_to_long_ex(needle);
- needle_char[0] = (char) Z_LVAL_PP(needle);
- needle_char[1] = 0;
-
- found = php_stristr(Z_STRVAL_PP(haystack), needle_char,
- Z_STRLEN_PP(haystack), 1);
- }
-
- if (found) {
- found_offset = found - Z_STRVAL_PP(haystack);
- RETVAL_STRINGL(haystack_orig + found_offset,
- Z_STRLEN_PP(haystack) - found_offset,
- 1);
- } else {
- RETVAL_FALSE;
- }
-
- efree(haystack_orig);
-}
-/* }}} */
-
-/* {{{ proto string strstr(string haystack, string needle)
- Finds first occurrence of a string within another */
-PHP_FUNCTION(strstr)
-{
- zval **haystack, **needle;
- char *found = NULL;
- char needle_char[2];
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(haystack);
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- if (!Z_STRLEN_PP(needle)) {
- php_error(E_WARNING, "Empty Delimiter");
- RETURN_FALSE;
- }
-
- found = php_memnstr(Z_STRVAL_PP(haystack),
- Z_STRVAL_PP(needle),
- Z_STRLEN_PP(needle),
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- }
- else {
- convert_to_long_ex(needle);
- needle_char[0] = (char) Z_LVAL_PP(needle);
- needle_char[1] = 0;
-
- found = php_memnstr(Z_STRVAL_PP(haystack),
- needle_char, 1,
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- }
-
- if (found) {
- RETURN_STRING(found, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string strchr(string haystack, string needle)
- An alias for strstr */
-/* }}} */
-
-/* {{{ proto int strpos(string haystack, string needle [, int offset])
- Finds position of first occurrence of a string within another */
-PHP_FUNCTION(strpos)
-{
- zval **haystack, **needle, **z_offset;
- char *found = NULL;
- char needle_char[2];
- int offset = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &haystack, &needle, &z_offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(haystack);
-
- if (argc > 2) {
- convert_to_long_ex(z_offset);
- offset = Z_LVAL_PP(z_offset);
- }
-
- if (offset < 0 || offset > Z_STRLEN_PP(haystack)) {
- php_error(E_WARNING, "Offset not contained in string");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- if (!Z_STRLEN_PP(needle)) {
- php_error(E_WARNING, "Empty Delimiter");
- RETURN_FALSE;
- }
-
- found = php_memnstr(Z_STRVAL_PP(haystack) + offset,
- Z_STRVAL_PP(needle),
- Z_STRLEN_PP(needle),
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- }
- else {
- convert_to_long_ex(needle);
- needle_char[0] = (char) Z_LVAL_PP(needle);
- needle_char[1] = 0;
-
- found = php_memnstr(Z_STRVAL_PP(haystack) + offset,
- needle_char, 1,
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- }
-
- if (found) {
- RETURN_LONG(found - Z_STRVAL_PP(haystack));
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int strrpos(string haystack, string needle)
- Finds position of last occurrence of a character in a string within another */
-PHP_FUNCTION(strrpos)
-{
- zval **haystack, **needle;
- char *found = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(haystack);
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- found = strrchr(Z_STRVAL_PP(haystack), *Z_STRVAL_PP(needle));
- }
- else {
- convert_to_long_ex(needle);
- found = strrchr(Z_STRVAL_PP(haystack), (char) Z_LVAL_PP(needle));
- }
-
- if (found) {
- RETURN_LONG(Z_STRLEN_PP(haystack) - strlen(found));
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string strrchr(string haystack, string needle)
- Finds the last occurrence of a character in a string within another */
-PHP_FUNCTION(strrchr)
-{
- zval **haystack, **needle;
- char *found = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) ==
- FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(haystack);
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- found = strrchr(Z_STRVAL_PP(haystack), *Z_STRVAL_PP(needle));
- }
- else {
- convert_to_long_ex(needle);
- found = strrchr(Z_STRVAL_PP(haystack), (char) Z_LVAL_PP(needle));
- }
-
- if (found) {
- RETURN_STRING(found, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_chunk_split
- */
-static char *php_chunk_split(char *src, int srclen, char *end, int endlen,
- int chunklen, int *destlen)
-{
- char *dest;
- char *p, *q;
- int chunks; /* complete chunks! */
- int restlen;
-
- chunks = srclen / chunklen;
- restlen = srclen - chunks * chunklen; /* srclen % chunklen */
-
- dest = emalloc((srclen + (chunks + 1) * endlen + 1) * sizeof(char));
-
- for(p = src, q = dest; p < (src + srclen - chunklen + 1); ) {
- memcpy(q, p, chunklen);
- q += chunklen;
- memcpy(q, end, endlen);
- q += endlen;
- p += chunklen;
- }
-
- if(restlen) {
- memcpy(q, p, restlen);
- q += restlen;
- memcpy(q, end, endlen);
- q += endlen;
- }
-
- *q = '\0';
- if (destlen) {
- *destlen = q - dest;
- }
-
- return(dest);
-}
-/* }}} */
-
-/* {{{ proto string chunk_split(string str [, int chunklen [, string ending]])
- Returns split line */
-PHP_FUNCTION(chunk_split)
-{
- zval **p_str, **p_chunklen, **p_ending;
- char *result;
- char *end = "\r\n";
- int endlen = 2;
- int chunklen = 76;
- int result_len;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 3 ||
- zend_get_parameters_ex(argc, &p_str, &p_chunklen, &p_ending) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(p_str);
-
- if (argc > 1) {
- convert_to_long_ex(p_chunklen);
- chunklen = Z_LVAL_PP(p_chunklen);
- }
-
- if (argc > 2) {
- convert_to_string_ex(p_ending);
- end = Z_STRVAL_PP(p_ending);
- endlen = Z_STRLEN_PP(p_ending);
- }
-
- if (chunklen <= 0) {
- php_error(E_WARNING, "Chunk length should be greater than zero");
- RETURN_FALSE;
- }
-
- if (!Z_STRLEN_PP(p_str)) {
- RETURN_EMPTY_STRING();
- }
-
- result = php_chunk_split(Z_STRVAL_PP(p_str), Z_STRLEN_PP(p_str),
- end, endlen, chunklen, &result_len);
- if (result) {
- RETURN_STRINGL(result, result_len, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string substr(string str, int start [, int length])
- Returns part of a string */
-PHP_FUNCTION(substr)
-{
- zval **str, **from, **len;
- int l;
- int f;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &str, &from, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_long_ex(from);
-
- if (argc > 2) {
- convert_to_long_ex(len);
- l = Z_LVAL_PP(len);
- }
- else {
- l = Z_STRLEN_PP(str);
- }
-
- f = Z_LVAL_PP(from);
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (f < 0) {
- f = Z_STRLEN_PP(str) + f;
- if (f < 0) {
- f = 0;
- }
- }
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (l < 0) {
- l = (Z_STRLEN_PP(str) - f) + l;
- if (l < 0) {
- l = 0;
- }
- }
-
- if (f >= Z_STRLEN_PP(str)) {
- RETURN_FALSE;
- }
-
- if((f + l) > Z_STRLEN_PP(str)) {
- l = Z_STRLEN_PP(str) - f;
- }
-
- RETURN_STRINGL(Z_STRVAL_PP(str) + f, l, 1);
-}
-/* }}} */
-
-/* {{{ proto string substr_replace(string str, string repl, int start [, int length])
- Replaces part of a string with another string */
-PHP_FUNCTION(substr_replace)
-{
- zval **str;
- zval **from;
- zval **len;
- zval **repl;
- char *result;
- int result_len;
- int l;
- int f;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 4 ||
- zend_get_parameters_ex(argc, &str, &repl, &from, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_string_ex(repl);
- convert_to_long_ex(from);
-
- if (argc > 3) {
- convert_to_long_ex(len);
- l = Z_LVAL_PP(len);
- }
- else {
- l = Z_STRLEN_PP(str);
- }
-
- f = Z_LVAL_PP(from);
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (f < 0) {
- f = Z_STRLEN_PP(str) + f;
- if (f < 0) {
- f = 0;
- }
- } else if (f > Z_STRLEN_PP(str))
- f = Z_STRLEN_PP(str);
-
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (l < 0) {
- l = (Z_STRLEN_PP(str) - f) + l;
- if (l < 0) {
- l = 0;
- }
- }
-
- if((f + l) > Z_STRLEN_PP(str)) {
- l = Z_STRLEN_PP(str) - f;
- }
-
- result_len = Z_STRLEN_PP(str) - l + Z_STRLEN_PP(repl);
- result = ecalloc(result_len + 1, sizeof(char *));
-
- memcpy(result, Z_STRVAL_PP(str), f);
- memcpy(&result[f], Z_STRVAL_PP(repl), Z_STRLEN_PP(repl));
- memcpy(&result[f + Z_STRLEN_PP(repl)], Z_STRVAL_PP(str) + f + l,
- Z_STRLEN_PP(str) - f - l);
-
- RETURN_STRINGL(result, result_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string quotemeta(string str)
- Quotes meta characters */
-PHP_FUNCTION(quotemeta)
-{
- zval **arg;
- char *str, *old;
- char *old_end;
- char *p, *q;
- char c;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- old = Z_STRVAL_PP(arg);
- old_end = Z_STRVAL_PP(arg) + Z_STRLEN_PP(arg);
-
- if (old == old_end) {
- RETURN_FALSE;
- }
-
- str = emalloc(2 * Z_STRLEN_PP(arg) + 1);
-
- for(p = old, q = str; p != old_end; p++) {
- c = *p;
- switch(c) {
- case '.':
- case '\\':
- case '+':
- case '*':
- case '?':
- case '[':
- case '^':
- case ']':
- case '$':
- case '(':
- case ')':
- *q++ = '\\';
- /* break is missing _intentionally_ */
- default:
- *q++ = c;
- }
- }
- *q = 0;
-
- RETURN_STRINGL(erealloc(str, q - str + 1), q - str, 0);
-}
-/* }}} */
-
-/* {{{ proto int ord(string character)
- Returns ASCII value of character */
-PHP_FUNCTION(ord)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- RETURN_LONG((unsigned char) Z_STRVAL_PP(str)[0]);
-}
-/* }}} */
-
-/* {{{ proto string chr(int ascii)
- Converts ASCII code to a character */
-PHP_FUNCTION(chr)
-{
- zval **num;
- char temp[2];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
-
- temp[0] = (char) Z_LVAL_PP(num);
- temp[1] = 0;
-
- RETVAL_STRINGL(temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto string ucfirst(string str)
- Makes a string's first character uppercase */
-PHP_FUNCTION(ucfirst)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (!Z_STRLEN_PP(str)) {
- RETURN_FALSE;
- }
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- *Z_STRVAL_P(return_value) = toupper((unsigned char) *Z_STRVAL_P(return_value));
-}
-/* }}} */
-
-/* {{{ proto string ucwords(string str)
- Uppercase the first character of every word in a string */
-PHP_FUNCTION(ucwords)
-{
- zval **str;
- register char *r, *r_end;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (!Z_STRLEN_PP(str)) {
- RETURN_FALSE;
- }
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- r = Z_STRVAL_P(return_value);
-
- *r = toupper((unsigned char) *r);
- for (r_end = r + Z_STRLEN_P(return_value) - 1; r < r_end; ) {
- if (isspace((int) *r++)) {
- *r = toupper((unsigned char) *r);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_strtr
- */
-PHPAPI char *php_strtr(char *str, int len, char *str_from,
- char *str_to, int trlen)
-{
- int i;
- unsigned char xlat[256];
-
- if ((trlen < 1) || (len < 1)) {
- return str;
- }
-
- for (i = 0; i < 256; xlat[i] = i, i++);
-
- for (i = 0; i < trlen; i++) {
- xlat[(unsigned char) str_from[i]] = str_to[i];
- }
-
- for (i = 0; i < len; i++) {
- str[i] = xlat[(unsigned char) str[i]];
- }
-
- return str;
-}
-/* }}} */
-
-/* {{{ php_strtr_array
- */
-static void php_strtr_array(zval *return_value, char *str, int slen, HashTable *hash)
-{
- zval **entry;
- char *string_key;
- uint string_key_len;
- zval **trans;
- zval ctmp;
- ulong num_key;
- int minlen = 128*1024;
- int maxlen = 0, pos, len, found;
- char *key;
- HashPosition hpos;
- smart_str result = {0};
-
- zend_hash_internal_pointer_reset_ex(hash, &hpos);
- while (zend_hash_get_current_data_ex(hash, (void **)&entry, &hpos) == SUCCESS) {
- switch (zend_hash_get_current_key_ex(hash, &string_key, &string_key_len, &num_key, 0, &hpos)) {
- case HASH_KEY_IS_STRING:
- len = string_key_len-1;
- if (len > maxlen) maxlen = len;
- if (len < minlen) minlen = len;
- break;
-
- case HASH_KEY_IS_LONG:
- Z_TYPE(ctmp) = IS_LONG;
- Z_LVAL(ctmp) = num_key;
-
- convert_to_string(&ctmp);
- len = Z_STRLEN(ctmp);
- zval_dtor(&ctmp);
-
- if (len > maxlen) maxlen = len;
- if (len < minlen) minlen = len;
- break;
- }
- zend_hash_move_forward_ex(hash, &hpos);
- }
-
- key = emalloc(maxlen+1);
- pos = 0;
-
- while (pos < slen) {
- if ((pos + maxlen) > slen) {
- maxlen = slen - pos;
- }
-
- found = 0;
- memcpy(key, str+pos, maxlen);
-
- for (len = maxlen; len >= minlen; len--) {
- key[len] = 0;
-
- if (zend_hash_find(hash, key, len+1, (void**)&trans) == SUCCESS) {
- char *tval;
- int tlen;
- zval tmp;
-
- if (Z_TYPE_PP(trans) != IS_STRING) {
- tmp = **trans;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- tval = Z_STRVAL(tmp);
- tlen = Z_STRLEN(tmp);
- } else {
- tval = Z_STRVAL_PP(trans);
- tlen = Z_STRLEN_PP(trans);
- }
-
- smart_str_appendl(&result, tval, tlen);
- pos += len;
- found = 1;
-
- if (Z_TYPE_PP(trans) != IS_STRING) {
- zval_dtor(&tmp);
- }
- break;
- }
- }
-
- if (! found) {
- smart_str_appendc(&result, str[pos++]);
- }
- }
-
- efree(key);
- smart_str_0(&result);
- RETVAL_STRINGL(result.c, result.len, 0);
-}
-/* }}} */
-
-/* {{{ proto string strtr(string str, string from, string to)
- Translates characters in str using given translation tables */
-PHP_FUNCTION(strtr)
-{ /* strtr(STRING, FROM, TO) */
- zval **str, **from, **to;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &str, &from, &to) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 2 && Z_TYPE_PP(from) != IS_ARRAY) {
- php_error(E_WARNING, "arg2 must be passed an array");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(str);
-
- /* shortcut for empty string */
- if(Z_STRLEN_PP(str) == 0) {
- RETURN_EMPTY_STRING();
- }
-
- if (ac == 2) {
- php_strtr_array(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), HASH_OF(*from));
- } else {
- convert_to_string_ex(from);
- convert_to_string_ex(to);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
-
- php_strtr(Z_STRVAL_P(return_value),
- Z_STRLEN_P(return_value),
- Z_STRVAL_PP(from),
- Z_STRVAL_PP(to),
- MIN(Z_STRLEN_PP(from), Z_STRLEN_PP(to)));
- }
-}
-/* }}} */
-
-/* {{{ proto string strrev(string str)
- Reverse a string */
-PHP_FUNCTION(strrev)
-{
- zval **str;
- int i, len;
- char c;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &str)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- len = Z_STRLEN_P(return_value);
-
- for (i = 0; i < len - 1 - i; i++) {
- c = Z_STRVAL_P(return_value)[i];
- Z_STRVAL_P(return_value)[i] = Z_STRVAL_P(return_value)[len - 1 - i];
- Z_STRVAL_P(return_value)[len - 1 - i] = c;
- }
-}
-/* }}} */
-
-/* {{{ php_similar_str
- */
-static void php_similar_str(const char *txt1, int len1, const char *txt2,
- int len2, int *pos1, int *pos2, int *max)
-{
- char *p, *q;
- char *end1 = (char *) txt1 + len1;
- char *end2 = (char *) txt2 + len2;
- int l;
-
- *max = 0;
- for (p = (char *) txt1; p < end1; p++) {
- for (q = (char *) txt2; q < end2; q++) {
- for (l = 0; (p + l < end1) && (q + l < end2) && (p[l] == q[l]);
- l++);
- if (l > *max) {
- *max = l;
- *pos1 = p - txt1;
- *pos2 = q - txt2;
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ php_similar_char
- */
-static int php_similar_char(const char *txt1, int len1,
- const char *txt2, int len2)
-{
- int sum;
- int pos1, pos2, max;
-
- php_similar_str(txt1, len1, txt2, len2, &pos1, &pos2, &max);
- if ((sum = max)) {
- if (pos1 && pos2)
- sum += php_similar_char(txt1, pos1, txt2, pos2);
- if ((pos1 + max < len1) && (pos2 + max < len2))
- sum += php_similar_char(txt1 + pos1 + max, len1 - pos1 - max,
- txt2 + pos2 + max, len2 - pos2 - max);
- }
-
- return sum;
-}
-/* }}} */
-
-/* {{{ proto int similar_text(string str1, string str2 [, float percent])
- Calculates the similarity between two strings */
-PHP_FUNCTION(similar_text)
-{
- zval **t1, **t2, **percent;
- int ac = ZEND_NUM_ARGS();
- int sim;
-
- if (ac < 2 || ac > 3 ||
- zend_get_parameters_ex(ac, &t1, &t2, &percent) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(t1);
- convert_to_string_ex(t2);
- if (ac > 2) {
- convert_to_double_ex(percent);
- }
-
- if (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2) == 0) {
- if(ac > 2) {
- Z_DVAL_PP(percent) = 0;
- }
-
- RETURN_LONG(0);
- }
-
- sim = php_similar_char(Z_STRVAL_PP(t1), Z_STRLEN_PP(t1),
- Z_STRVAL_PP(t2), Z_STRLEN_PP(t2));
- if (ac > 2) {
- Z_DVAL_PP(percent) = sim * 200.0 / (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2));
- }
-
- RETURN_LONG(sim);
-}
-/* }}} */
-
-/* {{{ php_stripslashes
- *
- * be careful, this edits the string in-place */
-PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC)
-{
- char *s, *t;
- int l;
- char escape_char='\\';
-
-
- if (len != NULL) {
- l = *len;
- } else {
- l = strlen(str);
- }
- s = str;
- t = str;
-
- if (PG(magic_quotes_sybase)) {
- while (l > 0) {
- if(*t=='\'') {
- if((l>0) && (t[1]=='\'')) {
- t++;
- if (len != NULL)
- (*len)--;
- l--;
- }
- }
- *s++ = *t++;
- l--;
- }
- *s = '\0';
-
- return;
- }
-
- while (l > 0) {
- if (*t == escape_char) {
- t++; /* skip the slash */
- if (len != NULL)
- (*len)--;
- l--;
- if (l > 0) {
- if(*t=='0') {
- *s++='\0';
- t++;
- } else {
- *s++ = *t++; /* preserve the next character */
- }
- l--;
- }
- } else {
- if (s != t)
- *s++ = *t++;
- else {
- s++;
- t++;
- }
- l--;
- }
- }
- if (s != t) {
- *s = '\0';
- }
-}
-/* }}} */
-
-/* {{{ proto string addcslashes(string str, string charlist)
- Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\n', '\r', '\t' etc...) */
-PHP_FUNCTION(addcslashes)
-{
- zval **str, **what;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &str, &what) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_string_ex(what);
-
- if (Z_STRLEN_PP(str) == 0) {
- RETURN_EMPTY_STRING();
- }
-
- if (Z_STRLEN_PP(what) == 0) {
- RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- }
-
- RETURN_STRING(php_addcslashes(Z_STRVAL_PP(str),
- Z_STRLEN_PP(str),
- &Z_STRLEN_P(return_value), 0,
- Z_STRVAL_PP(what),
- Z_STRLEN_PP(what) TSRMLS_CC),
- 0);
-}
-/* }}} */
-
-/* {{{ proto string addslashes(string str)
- Escapes single quote, double quotes and backslash characters in a string with backslashes */
-PHP_FUNCTION(addslashes)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (Z_STRLEN_PP(str) == 0) {
- RETURN_EMPTY_STRING();
- }
-
- RETURN_STRING(php_addslashes(Z_STRVAL_PP(str),
- Z_STRLEN_PP(str),
- &Z_STRLEN_P(return_value), 0
- TSRMLS_CC),
- 0);
-}
-/* }}} */
-
-/* {{{ proto string stripcslashes(string str)
- Strips backslashes from a string. Uses C-style conventions */
-PHP_FUNCTION(stripcslashes)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- php_stripcslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value));
-}
-/* }}} */
-
-/* {{{ proto string stripslashes(string str)
- Strips backslashes from a string */
-PHP_FUNCTION(stripslashes)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- php_stripslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value) TSRMLS_CC);
-}
-/* }}} */
-
-#ifndef HAVE_STRERROR
-/* {{{ php_strerror
- */
-char *php_strerror(int errnum)
-{
- extern int sys_nerr;
- extern char *sys_errlist[];
- TSRMLS_FETCH();
-
- if ((unsigned int)errnum < sys_nerr) return(sys_errlist[errnum]);
- (void)sprintf(BG(str_ebuf), "Unknown error: %d", errnum);
- return(BG(str_ebuf));
-}
-/* }}} */
-#endif
-
-/* {{{ php_stripcslashes
- */
-PHPAPI void php_stripcslashes(char *str, int *len)
-{
- char *source, *target, *end;
- int nlen = *len, i;
- char numtmp[4];
-
- for (source=str, end=str+nlen, target=str; source<end; source++) {
- if (*source == '\\' && source+1<end) {
- source++;
- switch (*source) {
- case 'n': *target++='\n'; nlen--; break;
- case 'r': *target++='\r'; nlen--; break;
- case 'a': *target++='\a'; nlen--; break;
- case 't': *target++='\t'; nlen--; break;
- case 'v': *target++='\v'; nlen--; break;
- case 'b': *target++='\b'; nlen--; break;
- case 'f': *target++='\f'; nlen--; break;
- case '\\': *target++='\\'; nlen--; break;
- case 'x': if (source+1<end && isxdigit((int)(*(source+1)))) {
- numtmp[0] = *++source;
- if (source+1<end && isxdigit((int)(*(source+1)))) {
- numtmp[1] = *++source;
- numtmp[2] = '\0';
- nlen-=3;
- } else {
- numtmp[1] = '\0';
- nlen-=2;
- }
- *target++=(char)strtol(numtmp, NULL, 16);
- break;
- }
- /* break is left intentionally */
- default: i=0;
- while (source<end && *source>='0' && *source<='7' && i<3) {
- numtmp[i++] = *source++;
- }
- if (i) {
- numtmp[i]='\0';
- *target++=(char)strtol(numtmp, NULL, 8);
- nlen-=i;
- source--;
- } else {
- *target++=*source;
- nlen--;
- }
- }
- } else {
- *target++=*source;
- }
- }
-
- if(nlen != 0) {
- *target='\0';
- }
-
- *len = nlen;
-}
-/* }}} */
-
-/* {{{ php_addcslashes
- */
-PHPAPI char *php_addcslashes(char *str, int length, int *new_length, int should_free, char *what, int wlength TSRMLS_DC)
-{
- char flags[256];
- char *new_str = emalloc((length?length:(length=strlen(str)))*4+1);
- char *source, *target;
- char *end;
- char c;
- int newlen;
-
- if (!wlength) {
- wlength = strlen(what);
- }
-
- if (!length) {
- length = strlen(str);
- }
-
- php_charmask(what, wlength, flags TSRMLS_CC);
-
- for (source=str, end=source+length, target=new_str; (c=*source) || source<end; source++) {
- if (flags[(unsigned char)c]) {
- if ((unsigned char)c<32 || (unsigned char)c>126) {
- *target++ = '\\';
- switch (c) {
- case '\n': *target++ = 'n'; break;
- case '\t': *target++ = 't'; break;
- case '\r': *target++ = 'r'; break;
- case '\a': *target++ = 'a'; break;
- case '\v': *target++ = 'v'; break;
- case '\b': *target++ = 'b'; break;
- case '\f': *target++ = 'f'; break;
- default: target += sprintf(target, "%03o", (unsigned char)c);
- }
- continue;
- }
- *target++ = '\\';
- }
- *target++ = c;
- }
- *target = 0;
- newlen = target-new_str;
- if (target-new_str<length*4) {
- new_str = erealloc(new_str, newlen+1);
- }
- if (new_length) {
- *new_length = newlen;
- }
- if (should_free) {
- STR_FREE(str);
- }
- return new_str;
-}
-/* }}} */
-
-/* {{{ php_addslashes
- */
-PHPAPI char *php_addslashes(char *str, int length, int *new_length, int should_free TSRMLS_DC)
-{
- /* maximum string length, worst case situation */
- char *new_str;
- char *source, *target;
- char *end;
- char c;
-
- if (!str) {
- *new_length = 0;
- return str;
- }
- new_str = (char *) emalloc((length?length:(length=strlen(str)))*2+1);
- if (PG(magic_quotes_sybase)) {
- for (source=str, end=source+length, target=new_str; source<end; source++) {
- c = *source;
- switch(c) {
- case '\0':
- *target++ = '\\';
- *target++ = '0';
- break;
- case '\'':
- *target++ = '\'';
- *target++ = '\'';
- break;
- default:
- *target++ = c;
- break;
- }
- }
- }
- else {
- for (source=str, end=source+length, target=new_str; source<end; source++) {
- c = *source;
- switch(c) {
- case '\0':
- *target++ = '\\';
- *target++ = '0';
- break;
- case '\'':
- case '\"':
- case '\\':
- *target++ = '\\';
- /* break is missing *intentionally* */
- default:
- *target++ = c;
- break;
- }
- }
- }
- *target = 0;
- if (new_length) {
- *new_length = target - new_str;
- }
- if (should_free) {
- STR_FREE(str);
- }
- return new_str;
-}
-/* }}} */
-
-#define _HEB_BLOCK_TYPE_ENG 1
-#define _HEB_BLOCK_TYPE_HEB 2
-#define isheb(c) (((((unsigned char) c)>=224) && (((unsigned char) c)<=250)) ? 1 : 0)
-#define _isblank(c) (((((unsigned char) c)==' ' || ((unsigned char) c)=='\t')) ? 1 : 0)
-#define _isnewline(c) (((((unsigned char) c)=='\n' || ((unsigned char) c)=='\r')) ? 1 : 0)
-
-/* {{{ php_char_to_str
- */
-PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, zval *result)
-{
- int char_count = 0;
- int replaced = 0;
- char *source, *target, *tmp, *source_end=str+len, *tmp_end = NULL;
-
- for (source=str; source<source_end; source++) {
- if (*source==from) {
- char_count++;
- }
- }
-
- if (char_count==0) {
- ZVAL_STRINGL(result, str, len, 1);
- return 0;
- }
-
- Z_STRLEN_P(result) = len + (char_count * (to_len - 1));
- Z_STRVAL_P(result) = target = emalloc(Z_STRLEN_P(result) + 1);
- Z_TYPE_P(result) = IS_STRING;
-
- for (source = str; source < source_end; source++) {
- if (*source == from) {
- replaced = 1;
- for (tmp = to, tmp_end = tmp+to_len; tmp < tmp_end; tmp++) {
- *target = *tmp;
- target++;
- }
- } else {
- *target = *source;
- target++;
- }
- }
- *target = 0;
- return replaced;
-}
-/* }}} */
-
-/* {{{ boyer_str_to_str */
-static char *boyer_str_to_str(char *haystack, int length,
- char *needle, int needle_len, char *str,
- int str_len, int *new_length)
-{
- char *p, *pe, *cursor, *end, *r;
- int off;
- char jump_table[256];
- smart_str result = {0};
-
- /*
- * We implement only the first half of the Boyer-Moore algorithm,
- * because the second half is too expensive to compute during run-time.
- * TODO: Split matching into compile-/match-stage.
- */
-
- /* Prepare the jump_table which contains the skip offsets */
- memset(jump_table, needle_len, 256);
-
- off = needle_len - 1;
-
- /* Calculate the default start where each comparison starts */
- pe = needle + off;
-
- /* Assign skip offsets based on the pattern */
- for (p = needle; p <= pe; p++)
- jump_table[(unsigned char) *p] = off--;
-
- /* Start to look at the first possible position for the pattern */
- cursor = haystack + needle_len - 1;
-
- /* The cursor must not cross this limit */
- end = haystack + length;
-
- /* Start to copy at haystack */
- r = haystack;
-
-nextiter:
- while (cursor < end) {
- p = pe; /* Compare from right to left */
- while (*p == *cursor) {
- if (--p < needle) { /* Found the pattern */
-
- /* Append whatever was not matched */
- smart_str_appendl(&result, r, cursor - r);
-
- /* Append replacement string */
- smart_str_appendl(&result, str, str_len);
-
- /* Update copy pointer */
- r = cursor + needle_len;
-
- /* needle_len was substracted from cursor for
- * this comparison, add it back. Also add
- * needle_len - 1 which is the default search
- * offset.
- */
- cursor += (needle_len << 1) - 1;
-
- /* Next iteration */
- goto nextiter;
- }
- cursor--;
- }
-
- cursor += jump_table[(unsigned char) *cursor];
- }
-
- if (r < end) /* Copy the remaining data */
- smart_str_appendl(&result, r, end - r);
-
- smart_str_0(&result); /* NUL-ify result */
-
- if (new_length)
- *new_length = result.len;
-
- return result.c;
-}
-/* }}} */
-
-/* {{{ php_str_to_str
- */
-PHPAPI char *php_str_to_str(char *haystack, int length,
- char *needle, int needle_len, char *str, int str_len, int *_new_length)
-{
- char *p;
- char *r;
- char *end = haystack + length;
- smart_str result = {0};
-
- for (p = haystack;
- (r = php_memnstr(p, needle, needle_len, end));
- p = r + needle_len) {
- smart_str_appendl(&result, p, r - p);
- smart_str_appendl(&result, str, str_len);
- }
-
- if (p < end)
- smart_str_appendl(&result, p, end - p);
-
- smart_str_0(&result);
-
- if (_new_length)
- *_new_length = result.len;
-
- return result.c;
-}
-/* }}} */
-
-/* {{{ php_str_replace_in_subject
- */
-static void php_str_replace_in_subject(zval *search, zval *replace, zval **subject, zval *result, int boyer)
-{
- zval **search_entry,
- **replace_entry = NULL,
- temp_result;
- char *replace_value = NULL;
- int replace_len = 0;
- char *(*str_to_str)(char *, int, char *, int, char *, int, int *);
-
- str_to_str = boyer ? boyer_str_to_str : php_str_to_str;
-
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(subject);
- Z_TYPE_P(result) = IS_STRING;
- if (Z_STRLEN_PP(subject) == 0) {
- ZVAL_STRINGL(result, empty_string, 0, 1);
- return;
- }
-
- /* If search is an array */
- if (Z_TYPE_P(search) == IS_ARRAY) {
- /* Duplicate subject string for repeated replacement */
- *result = **subject;
- zval_copy_ctor(result);
- INIT_PZVAL(result);
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(search));
-
- if (Z_TYPE_P(replace) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(replace));
- } else {
- /* Set replacement value to the passed one */
- replace_value = Z_STRVAL_P(replace);
- replace_len = Z_STRLEN_P(replace);
- }
-
- /* For each entry in the search array, get the entry */
- while (zend_hash_get_current_data(Z_ARRVAL_P(search), (void **) &search_entry) == SUCCESS) {
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(search_entry);
- if(Z_STRLEN_PP(search_entry) == 0) {
- zend_hash_move_forward(Z_ARRVAL_P(search));
- continue;
- }
-
- /* If replace is an array. */
- if (Z_TYPE_P(replace) == IS_ARRAY) {
- /* Get current entry */
- if (zend_hash_get_current_data(Z_ARRVAL_P(replace), (void **)&replace_entry) == SUCCESS) {
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(replace_entry);
-
- /* Set replacement value to the one we got from array */
- replace_value = Z_STRVAL_PP(replace_entry);
- replace_len = Z_STRLEN_PP(replace_entry);
-
- zend_hash_move_forward(Z_ARRVAL_P(replace));
- } else {
- /* We've run out of replacement strings, so use an empty one. */
- replace_value = empty_string;
- replace_len = 0;
- }
- }
-
- if(Z_STRLEN_PP(search_entry) == 1) {
- php_char_to_str(Z_STRVAL_P(result),
- Z_STRLEN_P(result),
- Z_STRVAL_PP(search_entry)[0],
- replace_value,
- replace_len,
- &temp_result);
- } else if (Z_STRLEN_PP(search_entry) > 1) {
- Z_STRVAL(temp_result) = str_to_str(Z_STRVAL_P(result), Z_STRLEN_P(result),
- Z_STRVAL_PP(search_entry), Z_STRLEN_PP(search_entry),
- replace_value, replace_len, &Z_STRLEN(temp_result));
- }
-
- efree(Z_STRVAL_P(result));
- Z_STRVAL_P(result) = Z_STRVAL(temp_result);
- Z_STRLEN_P(result) = Z_STRLEN(temp_result);
-
- if (Z_STRLEN_P(result) == 0) {
- return;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(search));
- }
- } else {
- if (Z_STRLEN_P(search) == 1) {
- php_char_to_str(Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject),
- Z_STRVAL_P(search)[0],
- Z_STRVAL_P(replace),
- Z_STRLEN_P(replace),
- result);
- } else if (Z_STRLEN_P(search) > 1) {
- Z_STRVAL_P(result) = str_to_str(Z_STRVAL_PP(subject), Z_STRLEN_PP(subject),
- Z_STRVAL_P(search), Z_STRLEN_P(search),
- Z_STRVAL_P(replace), Z_STRLEN_P(replace), &Z_STRLEN_P(result));
- } else {
- *result = **subject;
- zval_copy_ctor(result);
- INIT_PZVAL(result);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto mixed str_replace(mixed search, mixed replace, mixed subject [, bool boyer])
- Replaces all occurrences of search in haystack with replace */
-PHP_FUNCTION(str_replace)
-{
- zval **subject, **search, **replace, **subject_entry, **pboyer;
- zval *result;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- int boyer = 0;
-
- if(ZEND_NUM_ARGS() < 3 ||
- ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &search,
- &replace, &subject, &pboyer) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 4:
- convert_to_boolean_ex(pboyer);
- if (Z_BVAL_PP(pboyer))
- boyer = 1;
- break;
- }
-
- SEPARATE_ZVAL(search);
- SEPARATE_ZVAL(replace);
- SEPARATE_ZVAL(subject);
-
- /* Make sure we're dealing with strings and do the replacement. */
- if (Z_TYPE_PP(search) != IS_ARRAY) {
- convert_to_string_ex(search);
- convert_to_string_ex(replace);
- } else if (Z_TYPE_PP(replace) != IS_ARRAY)
- convert_to_string_ex(replace);
-
- /* if subject is an array */
- if (Z_TYPE_PP(subject) == IS_ARRAY) {
- array_init(return_value);
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(subject));
-
- /* For each subject entry, convert it to string, then perform replacement
- and add the result to the return_value array. */
- while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) == SUCCESS) {
- MAKE_STD_ZVAL(result);
- php_str_replace_in_subject(*search, *replace, subject_entry, result, boyer);
- /* Add to return array */
- switch(zend_hash_get_current_key_ex(Z_ARRVAL_PP(subject), &string_key,
- &string_key_len, &num_key, 0, NULL)) {
- case HASH_KEY_IS_STRING:
- add_assoc_zval_ex(return_value, string_key, string_key_len, result);
- break;
-
- case HASH_KEY_IS_LONG:
- add_index_zval(return_value, num_key, result);
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(subject));
- }
- } else { /* if subject is not an array */
- php_str_replace_in_subject(*search, *replace, subject, return_value, boyer);
- }
-}
-/* }}} */
-
-/* {{{ php_hebrev
- *
- * Converts Logical Hebrew text (Hebrew Windows style) to Visual text
- * Cheers/complaints/flames - Zeev Suraski <zeev@php.net>
- */
-static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
-{
- zval **str, **max_chars_per_line;
- char *heb_str, *tmp, *target, *broken_str;
- int block_start, block_end, block_type, block_length, i;
- long max_chars=0;
- int begin, end, char_count, orig_begin;
-
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &str)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &str, &max_chars_per_line)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(max_chars_per_line);
- max_chars = Z_LVAL_PP(max_chars_per_line);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(str);
-
- if (Z_STRLEN_PP(str)==0) {
- RETURN_FALSE;
- }
-
- tmp = Z_STRVAL_PP(str);
- block_start=block_end=0;
-
- heb_str = (char *) emalloc(Z_STRLEN_PP(str)+1);
- target = heb_str+Z_STRLEN_PP(str);
- *target = 0;
- target--;
-
- block_length=0;
-
- if (isheb(*tmp)) {
- block_type = _HEB_BLOCK_TYPE_HEB;
- } else {
- block_type = _HEB_BLOCK_TYPE_ENG;
- }
-
- do {
- if (block_type==_HEB_BLOCK_TYPE_HEB) {
- while((isheb((int)*(tmp+1)) || _isblank((int)*(tmp+1)) || ispunct((int)*(tmp+1)) || (int)*(tmp+1)=='\n' ) && block_end<Z_STRLEN_PP(str)-1) {
- tmp++;
- block_end++;
- block_length++;
- }
- for (i=block_start; i<=block_end; i++) {
- *target = Z_STRVAL_PP(str)[i];
- switch (*target) {
- case '(':
- *target = ')';
- break;
- case ')':
- *target = '(';
- break;
- case '[':
- *target = ']';
- break;
- case ']':
- *target = '[';
- break;
- case '{':
- *target = '}';
- break;
- case '}':
- *target = '{';
- break;
- case '<':
- *target = '>';
- break;
- case '>':
- *target = '<';
- break;
- case '\\':
- *target = '/';
- break;
- case '/':
- *target = '\\';
- break;
- default:
- break;
- }
- target--;
- }
- block_type = _HEB_BLOCK_TYPE_ENG;
- } else {
- while(!isheb(*(tmp+1)) && (int)*(tmp+1)!='\n' && block_end<Z_STRLEN_PP(str)-1) {
- tmp++;
- block_end++;
- block_length++;
- }
- while ((_isblank((int)*tmp) || ispunct((int)*tmp)) && *tmp!='/' && *tmp!='-' && block_end>block_start) {
- tmp--;
- block_end--;
- }
- for (i=block_end; i>=block_start; i--) {
- *target = Z_STRVAL_PP(str)[i];
- target--;
- }
- block_type = _HEB_BLOCK_TYPE_HEB;
- }
- block_start=block_end+1;
- } while(block_end<Z_STRLEN_PP(str)-1);
-
-
- broken_str = (char *) emalloc(Z_STRLEN_PP(str)+1);
- begin=end=Z_STRLEN_PP(str)-1;
- target = broken_str;
-
- while (1) {
- char_count=0;
- while ((!max_chars || char_count<max_chars) && begin>0) {
- char_count++;
- begin--;
- if (begin<=0 || _isnewline(heb_str[begin])) {
- while(begin>0 && _isnewline(heb_str[begin-1])) {
- begin--;
- char_count++;
- }
- break;
- }
- }
- if (char_count==max_chars) { /* try to avoid breaking words */
- int new_char_count=char_count, new_begin=begin;
-
- while (new_char_count>0) {
- if (_isblank(heb_str[new_begin]) || _isnewline(heb_str[new_begin])) {
- break;
- }
- new_begin++;
- new_char_count--;
- }
- if (new_char_count>0) {
- char_count=new_char_count;
- begin=new_begin;
- }
- }
- orig_begin=begin;
-
- if (_isblank(heb_str[begin])) {
- heb_str[begin]='\n';
- }
- while (begin<=end && _isnewline(heb_str[begin])) { /* skip leading newlines */
- begin++;
- }
- for (i=begin; i<=end; i++) { /* copy content */
- *target = heb_str[i];
- target++;
- }
- for (i=orig_begin; i<=end && _isnewline(heb_str[i]); i++) {
- *target = heb_str[i];
- target++;
- }
- begin=orig_begin;
-
- if (begin<=0) {
- *target = 0;
- break;
- }
- begin--;
- end=begin;
- }
- efree(heb_str);
-
- if (convert_newlines) {
- php_char_to_str(broken_str, Z_STRLEN_PP(str),'\n', "<br />\n", 7, return_value);
- efree(broken_str);
- } else {
- Z_STRVAL_P(return_value) = broken_str;
- Z_STRLEN_P(return_value) = Z_STRLEN_PP(str);
- Z_TYPE_P(return_value) = IS_STRING;
- }
-}
-/* }}} */
-
-/* {{{ proto string hebrev(string str [, int max_chars_per_line])
- Converts logical Hebrew text to visual text */
-PHP_FUNCTION(hebrev)
-{
- php_hebrev(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string hebrevc(string str [, int max_chars_per_line])
- Converts logical Hebrew text to visual text with newline conversion */
-PHP_FUNCTION(hebrevc)
-{
- php_hebrev(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto string nl2br(string str)
- Converts newlines to HTML line breaks */
-
-/* maybe const, but will it break some archaic compiler? */
-static int jumps[3][3]={
- {0,2,1,},
- {0,0,1,},
- {0,2,0,},
-};
-static int acts[3][3]={
- {0,0,0,},
- {1,3,1,},
- {2,2,4,},
-};
-static char *strs[4]={"\n","\r","\n\r","\r\n",};
-
-PHP_FUNCTION(nl2br)
-{
- /* in brief this inserts <br /> before matched regexp \n\r?|\r\n? */
- zval **zstr;
- char *tmp, *str;
- int new_length, length;
- char *p, *end, *target;
- int repl_cnt = 0;
-
- int state = 0;
- /* 0 - initial; 1 - \r found; 2 - \n found; */
-
- int action;
- /* actions:
- 0 - do nothing; 1 - replace \n; 2 - replace \r
- 3 - replace \n\r; 4 - replace \r\n;
- */
-
- int ichar;
- /* letters read from input scanner:
- 0 - any char different from \n or \r, even end of stream;
- 1 - \r; 2 - \n
- */
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(zstr);
-
- str = Z_STRVAL_PP(zstr);
- length = Z_STRLEN_PP(zstr);
- end = str + length;
-
- /* it is really faster to scan twice and allocate mem once insted scanning once
- and constantly reallocing */
- for (p = str; p <= end; p++) {
- /* when p == end assume any char and take the last pending action */
- if (p == end)
- ichar = 0;
- else
- ichar = (*p == '\n') ? 2 : ((*p == '\r') ? 1 : 0);
-
- action = acts[state][ichar];
- state = jumps[state][ichar];
- if (action)
- repl_cnt++;
- }
-
- if (repl_cnt == 0) {
- RETURN_STRINGL(str, length, 1);
- }
-
- new_length = length + repl_cnt * 6;
- tmp = target = emalloc(new_length + 1);
-
- /* reinit state machine */
- state = 0;
- for (p = str; p <= end; p++) {
- /* when p == end assume any char and take the last pending action */
- if (p == end)
- ichar = 0;
- else
- ichar = (*p == '\n') ? 2 : ((*p == '\r') ? 1 : 0);
- action = acts[state][ichar];
- state = jumps[state][ichar];
- if (action) {
- *target++ = '<';
- *target++ = 'b';
- *target++ = 'r';
- *target++ = ' ';
- *target++ = '/';
- *target++ = '>';
- *target++ = strs[action - 1][0];
- if (action > 2)
- *target++ = strs[action - 1][1];
- }
- if (!ichar && p < end)
- *target++ = *p;
- }
-
- *target = 0;
-
- RETURN_STRINGL(tmp, new_length, 0);
-}
-/* }}} */
-
-
-/* {{{ proto string strip_tags(string str [, string allowable_tags])
- Strips HTML and PHP tags from a string */
-PHP_FUNCTION(strip_tags)
-{
- char *buf;
- zval **str, **allow=NULL;
- char *allowed_tags=NULL;
- int allowed_tags_len=0;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if(zend_get_parameters_ex(1, &str)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if(zend_get_parameters_ex(2, &str, &allow)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(allow);
- allowed_tags = Z_STRVAL_PP(allow);
- allowed_tags_len = Z_STRLEN_PP(allow);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(str);
- buf = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- php_strip_tags(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len);
- RETURN_STRING(buf, 0);
-}
-/* }}} */
-
-/* {{{ proto string setlocale(mixed category, string locale)
- Set locale information */
-PHP_FUNCTION(setlocale)
-{
- zval **pcategory, **plocale;
- zval *category, *locale;
- int cat;
- char *loc, *retval;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pcategory, &plocale)==FAILURE)
- WRONG_PARAM_COUNT;
-#ifdef HAVE_SETLOCALE
- convert_to_string_ex(plocale);
- locale = *plocale;
-
- if (Z_TYPE_PP(pcategory) == IS_LONG) {
- convert_to_long_ex(pcategory);
- cat = Z_LVAL_PP(pcategory);
- } else { /* FIXME: The following behaviour should be removed. */
- php_error(E_NOTICE, "Passing locale category name as string is deprecated. Use the LC_* -constants instead.");
- convert_to_string_ex(pcategory);
- category = *pcategory;
-
- if (!strcasecmp ("LC_ALL", Z_STRVAL_P(category)))
- cat = LC_ALL;
- else if (!strcasecmp ("LC_COLLATE", Z_STRVAL_P(category)))
- cat = LC_COLLATE;
- else if (!strcasecmp ("LC_CTYPE", Z_STRVAL_P(category)))
- cat = LC_CTYPE;
-#ifdef LC_MESSAGES
- else if (!strcasecmp ("LC_MESSAGES", Z_STRVAL_P(category)))
- cat = LC_MESSAGES;
-#endif
- else if (!strcasecmp ("LC_MONETARY", Z_STRVAL_P(category)))
- cat = LC_MONETARY;
- else if (!strcasecmp ("LC_NUMERIC", Z_STRVAL_P(category)))
- cat = LC_NUMERIC;
- else if (!strcasecmp ("LC_TIME", Z_STRVAL_P(category)))
- cat = LC_TIME;
- else {
- php_error(E_WARNING, "Invalid locale category name %s, must be one of LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC or LC_TIME", Z_STRVAL_P(category));
- RETURN_FALSE;
- }
- }
- if (!strcmp ("0", Z_STRVAL_P(locale))) {
- loc = NULL;
- } else {
- loc = Z_STRVAL_P(locale);
- }
-
- retval = setlocale (cat, loc);
- if (retval) {
- /* Remember if locale was changed */
- if (loc) {
- STR_FREE(BG(locale_string));
- BG(locale_string) = estrdup(retval);
- }
-
- RETVAL_STRING(retval, 1);
- return;
- }
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto void parse_str(string encoded_string [, array result])
- Parses GET/POST/COOKIE data and sets global variables */
-PHP_FUNCTION(parse_str)
-{
- zval **arg;
- zval **arrayArg;
- zval *sarg;
- char *res = NULL;
- int argCount;
- int old_rg;
-
- argCount = ARG_COUNT(ht);
- if(argCount < 1 || argCount > 2 || zend_get_parameters_ex(argCount, &arg, &arrayArg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
- sarg = *arg;
- if (Z_STRVAL_P(sarg) && *Z_STRVAL_P(sarg)) {
- res = estrndup(Z_STRVAL_P(sarg), Z_STRLEN_P(sarg));
- }
-
- old_rg = PG(register_globals);
- if(argCount == 1) {
- PG(register_globals) = 1;
- php_treat_data(PARSE_STRING, res, NULL TSRMLS_CC);
- } else {
- PG(register_globals) = 0;
- /* Clear out the array that was passed in. */
- zval_dtor(*arrayArg);
- array_init(*arrayArg);
-
- php_treat_data(PARSE_STRING, res, *arrayArg TSRMLS_CC);
- }
- PG(register_globals) = old_rg;
-}
-/* }}} */
-
-#define PHP_TAG_BUF_SIZE 1023
-
-/* {{{ php_tag_find
- *
- * Check if tag is in a set of tags
- *
- * states:
- *
- * 0 start tag
- * 1 first non-whitespace char seen
- */
-int php_tag_find(char *tag, int len, char *set) {
- char c, *n, *t;
- int state=0, done=0;
- char *norm = emalloc(len+1);
-
- n = norm;
- t = tag;
- c = tolower(*t);
- /*
- normalize the tag removing leading and trailing whitespace
- and turn any <a whatever...> into just <a> and any </tag>
- into <tag>
- */
- if (!len) {
- return 0;
- }
- while(!done) {
- switch(c) {
- case '<':
- *(n++) = c;
- break;
- case '>':
- done =1;
- break;
- default:
- if(!isspace((int)c)) {
- if(state==0) {
- state=1;
- if(c!='/') *(n++) = c;
- } else {
- *(n++) = c;
- }
- } else {
- if(state==1) done=1;
- }
- break;
- }
- c = tolower(*(++t));
- }
- *(n++) = '>';
- *n = '\0';
- if(strstr(set, norm)) {
- done=1;
- } else {
- done=0;
- }
- efree(norm);
- return done;
-}
-/* }}} */
-
-/* {{{ php_strip_tags
-
- A simple little state-machine to strip out html and php tags
-
- State 0 is the output state, State 1 means we are inside a
- normal html tag and state 2 means we are inside a php tag.
-
- The state variable is passed in to allow a function like fgetss
- to maintain state across calls to the function.
-
- lc holds the last significant character read and br is a bracket
- counter.
-
- When an allow string is passed in we keep track of the string
- in state 1 and when the tag is closed check it against the
- allow string to see if we should allow it.
-
- swm: Added ability to strip <?xml tags without assuming it PHP
- code.
-*/
-PHPAPI void php_strip_tags(char *rbuf, int len, int *stateptr, char *allow, int allow_len)
-{
- char *tbuf, *buf, *p, *tp, *rp, c, lc;
- int br, i=0;
- int state = 0;
-
- if (stateptr)
- state = *stateptr;
-
- buf = estrndup(rbuf, len);
- c = *buf;
- lc = '\0';
- p = buf;
- rp = rbuf;
- br = 0;
- if(allow) {
- php_strtolower(allow, allow_len);
- tbuf = emalloc(PHP_TAG_BUF_SIZE+1);
- tp = tbuf;
- } else {
- tbuf = tp = NULL;
- }
-
- while(i<len) {
- switch (c) {
- case '<':
- if (state == 0) {
- lc = '<';
- state = 1;
- if(allow) {
- *(tp++) = '<';
- }
- }
- break;
-
- case '(':
- if (state == 2) {
- if (lc != '\"') {
- lc = '(';
- br++;
- }
- } else if (allow && state == 1) {
- *(tp++) = c;
- } else if (state == 0) {
- *(rp++) = c;
- }
- break;
-
- case ')':
- if (state == 2) {
- if (lc != '\"') {
- lc = ')';
- br--;
- }
- } else if (allow && state == 1) {
- *(tp++) = c;
- } else if (state == 0) {
- *(rp++) = c;
- }
- break;
-
- case '>':
- if (state == 1) {
- lc = '>';
- state = 0;
- if(allow) {
- *(tp++) = '>';
- *tp='\0';
- if(php_tag_find(tbuf, tp-tbuf, allow)) {
- memcpy(rp, tbuf, tp-tbuf);
- rp += tp-tbuf;
- }
- tp = tbuf;
- }
- } else if (state == 2) {
- if (!br && lc != '\"' && *(p-1)=='?') {
- state = 0;
- tp = tbuf;
- }
- } else {
- *(rp++) = c;
- }
- break;
-
- case '\"':
- if (state == 2) {
- if (lc == '\"') {
- lc = '\0';
- } else if (lc != '\\') {
- lc = '\"';
- }
- } else if (state == 0) {
- *(rp++) = c;
- } else if (allow && state == 1) {
- *(tp++) = c;
- }
- break;
-
- case '?':
-
- if (state==1 && *(p-1)=='<') {
- br=0;
- state=2;
- break;
- }
-
- case 'l':
-
- /* swm: If we encounter '<?xml' then we shouldn't be in
- * state == 2 (PHP). Switch back to HTML.
- */
-
- if(state == 2 && *(p-1) == 'm' && *(p-2) == 'x') {
- state = 1;
- break;
- }
-
- /* fall-through */
- default:
- if (state == 0) {
- *(rp++) = c;
- } else if(allow && state == 1) {
- *(tp++) = c;
- if( (tp-tbuf)>=PHP_TAG_BUF_SIZE ) { /* no buffer overflows */
- tp = tbuf;
- }
- }
- break;
- }
- c = *(++p);
- i++;
- }
- *rp = '\0';
- efree(buf);
- if(allow) efree(tbuf);
- if (stateptr)
- *stateptr = state;
-}
-/* }}} */
-
-/* {{{ proto string str_repeat(string input, int mult)
- Returns the input string repeat mult times */
-PHP_FUNCTION(str_repeat)
-{
- zval **input_str; /* Input string */
- zval **mult; /* Multiplier */
- char *result; /* Resulting string */
- int result_len; /* Length of the resulting string */
- int i;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &input_str, &mult) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure we're dealing with proper types */
- convert_to_string_ex(input_str);
- convert_to_long_ex(mult);
-
- if (Z_LVAL_PP(mult) < 0) {
- php_error(E_WARNING, "Second argument to %s() has to be greater than or equal to 0",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- /* Don't waste our time if it's empty */
- if (Z_STRLEN_PP(input_str) == 0)
- RETURN_STRINGL(empty_string, 0, 1);
-
- /* ... or if the multiplier is zero */
- if (Z_LVAL_PP(mult) == 0)
- RETURN_STRINGL(empty_string, 0, 1);
-
- /* Initialize the result string */
- result_len = Z_STRLEN_PP(input_str) * Z_LVAL_PP(mult);
- result = (char *)emalloc(result_len + 1);
-
- /* Copy the input string into the result as many times as necessary */
- for (i=0; i<Z_LVAL_PP(mult); i++) {
- memcpy(result + Z_STRLEN_PP(input_str) * i,
- Z_STRVAL_PP(input_str),
- Z_STRLEN_PP(input_str));
- }
- result[result_len] = '\0';
-
- RETURN_STRINGL(result, result_len, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed count_chars(string input [, int mode])
- Returns info about what characters are used in input */
-PHP_FUNCTION(count_chars)
-{
- zval **input, **mode;
- int chars[256];
- int ac=ZEND_NUM_ARGS();
- int mymode=0;
- unsigned char *buf;
- int len, inx;
- char retstr[256];
- int retlen=0;
-
- if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &input, &mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(input);
-
- if (ac == 2) {
- convert_to_long_ex(mode);
- mymode = Z_LVAL_PP(mode);
-
- if (mymode < 0 || mymode > 4) {
- php_error(E_WARNING, "unknown mode");
- RETURN_FALSE;
- }
- }
-
- len = Z_STRLEN_PP(input);
- buf = (unsigned char *) Z_STRVAL_PP(input);
- memset((void*) chars, 0, sizeof(chars));
-
- while (len > 0) {
- chars[*buf]++;
- buf++;
- len--;
- }
-
- if (mymode < 3) {
- array_init(return_value);
- }
-
- for (inx=0; inx < 256; inx++) {
- switch (mymode) {
- case 0:
- add_index_long(return_value, inx, chars[inx]);
- break;
- case 1:
- if (chars[inx] != 0) {
- add_index_long(return_value, inx, chars[inx]);
- }
- break;
- case 2:
- if (chars[inx] == 0) {
- add_index_long(return_value, inx, chars[inx]);
- }
- break;
- case 3:
- if (chars[inx] != 0) {
- retstr[retlen++] = inx;
- }
- break;
- case 4:
- if (chars[inx] == 0) {
- retstr[retlen++] = inx;
- }
- break;
- }
- }
-
- if (mymode >= 3 && mymode <= 4) {
- RETURN_STRINGL(retstr, retlen, 1);
- }
-}
-/* }}} */
-
-/* {{{ php_strnatcmp
- */
-static void php_strnatcmp(INTERNAL_FUNCTION_PARAMETERS, int fold_case)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
-
- RETURN_LONG(strnatcmp_ex(Z_STRVAL_PP(s1), Z_STRLEN_PP(s1),
- Z_STRVAL_PP(s2), Z_STRLEN_PP(s2),
- fold_case));
-}
-/* }}} */
-
-/* {{{ proto int strnatcmp(string s1, string s2)
- Returns the result of string comparison using 'natural' algorithm */
-PHP_FUNCTION(strnatcmp)
-{
- php_strnatcmp(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array localeconv(void)
- Returns numeric formatting information based on the current locale */
-PHP_FUNCTION(localeconv)
-{
- zval *grouping, *mon_grouping;
- int len, i;
-
- MAKE_STD_ZVAL(grouping);
- MAKE_STD_ZVAL(mon_grouping);
-
- /* We don't need no stinkin' parameters... */
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (array_init(grouping) == FAILURE || array_init(mon_grouping) == FAILURE) {
- RETURN_FALSE;
- }
-
-#ifdef HAVE_LOCALECONV
- {
- struct lconv currlocdata;
-
- localeconv_r( &currlocdata );
-
- /* Grab the grouping data out of the array */
- len = strlen(currlocdata.grouping);
-
- for (i=0;i<len;i++) {
- add_index_long(grouping, i, currlocdata.grouping[i]);
- }
-
- /* Grab the monetary grouping data out of the array */
- len = strlen(currlocdata.mon_grouping);
-
- for (i=0;i<len;i++) {
- add_index_long(mon_grouping, i, currlocdata.mon_grouping[i]);
- }
-
- add_assoc_string(return_value, "decimal_point", currlocdata.decimal_point, 1);
- add_assoc_string(return_value, "thousands_sep", currlocdata.thousands_sep, 1);
- add_assoc_string(return_value, "int_curr_symbol", currlocdata.int_curr_symbol, 1);
- add_assoc_string(return_value, "currency_symbol", currlocdata.currency_symbol, 1);
- add_assoc_string(return_value, "mon_decimal_point", currlocdata.mon_decimal_point, 1);
- add_assoc_string(return_value, "mon_thousands_sep", currlocdata.mon_thousands_sep, 1);
- add_assoc_string(return_value, "positive_sign", currlocdata.positive_sign, 1);
- add_assoc_string(return_value, "negative_sign", currlocdata.negative_sign, 1);
- add_assoc_long( return_value, "int_frac_digits", currlocdata.int_frac_digits );
- add_assoc_long( return_value, "frac_digits", currlocdata.frac_digits );
- add_assoc_long( return_value, "p_cs_precedes", currlocdata.p_cs_precedes );
- add_assoc_long( return_value, "p_sep_by_space", currlocdata.p_sep_by_space );
- add_assoc_long( return_value, "n_cs_precedes", currlocdata.n_cs_precedes );
- add_assoc_long( return_value, "n_sep_by_space", currlocdata.n_sep_by_space );
- add_assoc_long( return_value, "p_sign_posn", currlocdata.p_sign_posn );
- add_assoc_long( return_value, "n_sign_posn", currlocdata.n_sign_posn );
- }
-#else
- /* Ok, it doesn't look like we have locale info floating around, so I guess it
- wouldn't hurt to just go ahead and return the POSIX locale information? */
-
- add_index_long(grouping, 0, -1);
- add_index_long(mon_grouping, 0, -1);
-
- add_assoc_string(return_value, "decimal_point", "\x2E", 1);
- add_assoc_string(return_value, "thousands_sep", "", 1);
- add_assoc_string(return_value, "int_curr_symbol", "", 1);
- add_assoc_string(return_value, "currency_symbol", "", 1);
- add_assoc_string(return_value, "mon_decimal_point", "\x2E", 1);
- add_assoc_string(return_value, "mon_thousands_sep", "", 1);
- add_assoc_string(return_value, "positive_sign", "", 1);
- add_assoc_string(return_value, "negative_sign", "", 1);
- add_assoc_long( return_value, "int_frac_digits", CHAR_MAX );
- add_assoc_long( return_value, "frac_digits", CHAR_MAX );
- add_assoc_long( return_value, "p_cs_precedes", CHAR_MAX );
- add_assoc_long( return_value, "p_sep_by_space", CHAR_MAX );
- add_assoc_long( return_value, "n_cs_precedes", CHAR_MAX );
- add_assoc_long( return_value, "n_sep_by_space", CHAR_MAX );
- add_assoc_long( return_value, "p_sign_posn", CHAR_MAX );
- add_assoc_long( return_value, "n_sign_posn", CHAR_MAX );
-#endif
-
- zend_hash_update(Z_ARRVAL_P(return_value), "grouping", 9, &grouping, sizeof(zval *), NULL);
- zend_hash_update(Z_ARRVAL_P(return_value), "mon_grouping", 13, &mon_grouping, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ proto int strnatcasecmp(string s1, string s2)
- Returns the result of case-insensitive string comparison using 'natural' algorithm */
-PHP_FUNCTION(strnatcasecmp)
-{
- php_strnatcmp(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int substr_count(string haystack, string needle)
- Returns the number of times a substring occurs in the string */
-PHP_FUNCTION(substr_count)
-{
- zval **haystack, **needle;
- int i, length, count = 0;
- char *p, *endp, cmp;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(haystack);
- convert_to_string_ex(needle);
-
- if (Z_STRLEN_PP(needle) == 0) {
- php_error(E_WARNING, "Empty substring");
- RETURN_FALSE;
- } else if (Z_STRLEN_PP(needle) == 1) {
- /* Special optimized case to avoid calls to php_memnstr(). */
- for (i = 0, p = Z_STRVAL_PP(haystack),
- length = Z_STRLEN_PP(haystack), cmp = Z_STRVAL_PP(needle)[0];
- i < length; i++) {
- if (p[i] == cmp) {
- count++;
- }
- }
- } else {
- p = Z_STRVAL_PP(haystack);
- endp = p + Z_STRLEN_PP(haystack);
- while (p <= endp) {
- if( (p = php_memnstr(p, Z_STRVAL_PP(needle), Z_STRLEN_PP(needle), endp)) != NULL ) {
- p += Z_STRLEN_PP(needle);
- count++;
- } else {
- break;
- }
- }
- }
-
- RETURN_LONG(count);
-}
-/* }}} */
-
-/* {{{ proto string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])
- Returns input string padded on the left or right to specified length with pad_string */
-PHP_FUNCTION(str_pad)
-{
- /* Input arguments */
- zval **input, /* Input string */
- **pad_length, /* Length to pad to */
- **pad_string, /* Padding string */
- **pad_type; /* Padding type (left/right/both) */
-
- /* Helper variables */
- int num_pad_chars; /* Number of padding characters (total - input size) */
- char *result = NULL; /* Resulting string */
- int result_len = 0; /* Length of the resulting string */
- char *pad_str_val = " "; /* Pointer to padding string */
- int pad_str_len = 1; /* Length of the padding string */
- int pad_type_val = STR_PAD_RIGHT; /* The padding type value */
- int i, left_pad=0, right_pad=0;
-
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &pad_length, &pad_string, &pad_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Perform initial conversion to expected data types. */
- convert_to_string_ex(input);
- convert_to_long_ex(pad_length);
-
- num_pad_chars = Z_LVAL_PP(pad_length) - Z_STRLEN_PP(input);
-
- /* If resulting string turns out to be shorter than input string,
- we simply copy the input and return. */
- if (num_pad_chars < 0) {
- *return_value = **input;
- zval_copy_ctor(return_value);
- return;
- }
-
- /* Setup the padding string values if specified. */
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_string_ex(pad_string);
- if (Z_STRLEN_PP(pad_string) == 0) {
- php_error(E_WARNING, "Padding string cannot be empty in %s()",
- get_active_function_name(TSRMLS_C));
- return;
- }
- pad_str_val = Z_STRVAL_PP(pad_string);
- pad_str_len = Z_STRLEN_PP(pad_string);
-
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(pad_type);
- pad_type_val = Z_LVAL_PP(pad_type);
- if (pad_type_val < STR_PAD_LEFT || pad_type_val > STR_PAD_BOTH) {
- php_error(E_WARNING, "Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s()", get_active_function_name(TSRMLS_C));
- return;
- }
- }
- }
-
- result = (char *)emalloc(Z_STRLEN_PP(input) + num_pad_chars + 1);
-
- /* We need to figure out the left/right padding lengths. */
- switch (pad_type_val) {
- case STR_PAD_RIGHT:
- left_pad = 0;
- right_pad = num_pad_chars;
- break;
-
- case STR_PAD_LEFT:
- left_pad = num_pad_chars;
- right_pad = 0;
- break;
-
- case STR_PAD_BOTH:
- left_pad = num_pad_chars / 2;
- right_pad = num_pad_chars - left_pad;
- break;
- }
-
- /* First we pad on the left. */
- for (i = 0; i < left_pad; i++)
- result[result_len++] = pad_str_val[i % pad_str_len];
-
- /* Then we copy the input string. */
- memcpy(result + result_len, Z_STRVAL_PP(input), Z_STRLEN_PP(input));
- result_len += Z_STRLEN_PP(input);
-
- /* Finally, we pad on the right. */
- for (i = 0; i < right_pad; i++)
- result[result_len++] = pad_str_val[i % pad_str_len];
-
- result[result_len] = '\0';
-
- RETURN_STRINGL(result, result_len, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed sscanf(string str, string format [, string ...])
- Implements an ANSI C compatible sscanf */
-PHP_FUNCTION(sscanf)
-{
- zval ***args;
- int result;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***) emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(args[0]);
- convert_to_string_ex(args[1]);
-
- result = php_sscanf_internal(Z_STRVAL_PP(args[0]),
- Z_STRVAL_PP(args[1]),
- argc, args,
- 2, &return_value TSRMLS_CC);
- efree(args);
-
- if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto string str_rot13(string str)
- Perform the rot13 transform on a string */
-PHP_FUNCTION(str_rot13)
-{
- char *str;
- int str_len;
- static char xfrom[] = "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- static char xto[] = "nopqrstuvwxyzabcdefghijklm"
- "NOPQRSTUVWXYZABCDEFGHIJKLM";
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &str, &str_len) == FAILURE) {
- return;
- }
-
- php_strtr(str, str_len, xfrom, xto, 52);
- RETURN_STRINGL(str, str_len, 1);
-}
-/* }}} */
-
-
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/standard/strnatcmp.c b/ext/standard/strnatcmp.c
deleted file mode 100644
index 4e5500be14..0000000000
--- a/ext/standard/strnatcmp.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- mode: c; c-file-style: "k&r" -*-
-
- Modified for PHP by Andrei Zmievski <andrei@ispi.net>
-
- strnatcmp.c -- Perform 'natural order' comparisons of strings in C.
- Copyright (C) 2000 by Martin Pool <mbp@humbug.org.au>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include <ctype.h>
-#include <string.h>
-#include <assert.h>
-#include <stdio.h>
-
-#include "php.h"
-#include "php_string.h"
-
-#if defined(__GNUC__)
-# define UNUSED __attribute__((__unused__))
-#else
-# define UNUSED
-#endif
-
-#if 0
-static char const *version UNUSED =
- "$Id$";
-#endif
-/* {{{ compare_right
- */
-static int
-compare_right(char const **a, char const *aend, char const **b, char const *bend)
-{
- int bias = 0;
-
- /* The longest run of digits wins. That aside, the greatest
- value wins, but we can't know that it will until we've scanned
- both numbers to know that they have the same magnitude, so we
- remember it in BIAS. */
- for(;; (*a)++, (*b)++) {
- if ((*a == aend || !isdigit((int)**a)) &&
- (*b == bend || !isdigit((int)**b)))
- return bias;
- else if (*a == aend || !isdigit((int)**a))
- return -1;
- else if (*b == bend || !isdigit((int)**b))
- return +1;
- else if (**a < **b) {
- if (!bias)
- bias = -1;
- } else if (**a > **b) {
- if (!bias)
- bias = +1;
- }
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ compare_left
- */
-static int
-compare_left(char const **a, char const *aend, char const **b, char const *bend)
-{
- /* Compare two left-aligned numbers: the first to have a
- different value wins. */
- for(;; (*a)++, (*b)++) {
- if ((*a == aend || !isdigit((int)**a)) &&
- (*b == bend || !isdigit((int)**b)))
- return 0;
- else if (*a == aend || !isdigit((int)**a))
- return -1;
- else if (*b == bend || !isdigit((int)**b))
- return +1;
- else if (**a < **b)
- return -1;
- else if (**a > **b)
- return +1;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ strnatcmp_ex
- */
-PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case)
-{
- char ca, cb;
- char const *ap, *bp;
- char const *aend = a + a_len,
- *bend = b + b_len;
- int fractional, result;
-
- if (a_len == 0 || b_len == 0)
- return a_len - b_len;
-
- ap = a;
- bp = b;
- while (1) {
- ca = *ap; cb = *bp;
-
- /* skip over leading spaces or zeros */
- while (isspace((int)ca))
- ca = *++ap;
-
- while (isspace((int)cb))
- cb = *++bp;
-
- /* process run of digits */
- if (isdigit((int)ca) && isdigit((int)cb)) {
- fractional = (ca == '0' || cb == '0');
-
- if (fractional)
- result = compare_left(&ap, aend, &bp, bend);
- else
- result = compare_right(&ap, aend, &bp, bend);
-
- if (result != 0)
- return result;
- else if (ap == aend && bp == bend)
- /* End of the strings. Let caller sort them out. */
- return 0;
- else {
- /* Keep on comparing from the current point. */
- ca = *ap; cb = *bp;
- }
- }
-
- if (fold_case) {
- ca = toupper(ca);
- cb = toupper(cb);
- }
-
- if (ca < cb)
- return -1;
- else if (ca > cb)
- return +1;
-
- ++ap; ++bp;
- if (ap == aend && bp == bend)
- /* The strings compare the same. Perhaps the caller
- will want to call strcmp to break the tie. */
- return 0;
- else if (ap == aend)
- return -1;
- else if (bp == bend)
- return 1;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/syslog.c b/ext/standard/syslog.c
deleted file mode 100644
index c62f65c631..0000000000
--- a/ext/standard/syslog.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef HAVE_SYSLOG_H
-#include "php_ini.h"
-#include "zend_globals.h"
-
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include <stdio.h>
-#include "basic_functions.h"
-#include "php_ext_syslog.h"
-
-static void start_syslog(TSRMLS_D);
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(syslog)
-{
- /* error levels */
- REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */
- REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */
- REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_CS | CONST_PERSISTENT); /* critical conditions */
- REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_CS | CONST_PERSISTENT);
- /* facility: type of program logging the message */
- REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_CS | CONST_PERSISTENT); /* generic user level */
- REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_CS | CONST_PERSISTENT); /* log to email */
- REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_CS | CONST_PERSISTENT); /* other system daemons */
- REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_CS | CONST_PERSISTENT);
-#ifdef LOG_NEWS
- /* No LOG_NEWS on HP-UX */
- REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_CS | CONST_PERSISTENT); /* usenet new */
-#endif
-#ifdef LOG_UUCP
- /* No LOG_UUCP on HP-UX */
- REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef LOG_CRON
- /* apparently some systems don't have this one */
- REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef LOG_AUTHPRIV
- /* AIX doesn't have LOG_AUTHPRIV */
- REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_CS | CONST_PERSISTENT);
-#endif
-#if !defined(PHP_WIN32)
- REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_CS | CONST_PERSISTENT);
-#endif
- /* options */
- REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_CS | CONST_PERSISTENT);
-#ifdef LOG_NOWAIT
- REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef LOG_PERROR
- /* AIX doesn't have LOG_PERROR */
- REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_CS | CONST_PERSISTENT); /*log to stderr*/
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-PHP_RINIT_FUNCTION(syslog)
-{
- if (INI_INT("define_syslog_variables")) {
- start_syslog(TSRMLS_C);
- } else {
- BG(syslog_started)=0;
- }
- BG(syslog_device)=NULL;
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(syslog)
-{
- if (BG(syslog_device)) {
- efree(BG(syslog_device));
- }
- return SUCCESS;
-}
-
-/* {{{ start_syslog
- */
-static void start_syslog(TSRMLS_D)
-{
- /* error levels */
- SET_VAR_LONG("LOG_EMERG", LOG_EMERG); /* system unusable */
- SET_VAR_LONG("LOG_ALERT", LOG_ALERT); /* immediate action required */
- SET_VAR_LONG("LOG_CRIT", LOG_CRIT); /* critical conditions */
- SET_VAR_LONG("LOG_ERR", LOG_ERR);
- SET_VAR_LONG("LOG_WARNING", LOG_WARNING);
- SET_VAR_LONG("LOG_NOTICE", LOG_NOTICE);
- SET_VAR_LONG("LOG_INFO", LOG_INFO);
- SET_VAR_LONG("LOG_DEBUG", LOG_DEBUG);
- /* facility: type of program logging the message */
- SET_VAR_LONG("LOG_KERN", LOG_KERN);
- SET_VAR_LONG("LOG_USER", LOG_USER); /* generic user level */
- SET_VAR_LONG("LOG_MAIL", LOG_MAIL); /* log to email */
- SET_VAR_LONG("LOG_DAEMON", LOG_DAEMON); /* other system daemons */
- SET_VAR_LONG("LOG_AUTH", LOG_AUTH);
- SET_VAR_LONG("LOG_SYSLOG", LOG_SYSLOG);
- SET_VAR_LONG("LOG_LPR", LOG_LPR);
-#ifdef LOG_NEWS
- /* No LOG_NEWS on HP-UX */
- SET_VAR_LONG("LOG_NEWS", LOG_NEWS); /* usenet new */
-#endif
-#ifdef LOG_UUCP
- /* No LOG_UUCP on HP-UX */
- SET_VAR_LONG("LOG_UUCP", LOG_UUCP);
-#endif
-#ifdef LOG_CRON
- /* apparently some systems don't have this one */
- SET_VAR_LONG("LOG_CRON", LOG_CRON);
-#endif
-#ifdef LOG_AUTHPRIV
- /* AIX doesn't have LOG_AUTHPRIV */
- SET_VAR_LONG("LOG_AUTHPRIV", LOG_AUTHPRIV);
-#endif
-#if !defined(PHP_WIN32)
- SET_VAR_LONG("LOG_LOCAL0", LOG_LOCAL0);
- SET_VAR_LONG("LOG_LOCAL1", LOG_LOCAL1);
- SET_VAR_LONG("LOG_LOCAL2", LOG_LOCAL2);
- SET_VAR_LONG("LOG_LOCAL3", LOG_LOCAL3);
- SET_VAR_LONG("LOG_LOCAL4", LOG_LOCAL4);
- SET_VAR_LONG("LOG_LOCAL5", LOG_LOCAL5);
- SET_VAR_LONG("LOG_LOCAL6", LOG_LOCAL6);
- SET_VAR_LONG("LOG_LOCAL7", LOG_LOCAL7);
-#endif
- /* options */
- SET_VAR_LONG("LOG_PID", LOG_PID);
- SET_VAR_LONG("LOG_CONS", LOG_CONS);
- SET_VAR_LONG("LOG_ODELAY", LOG_ODELAY);
- SET_VAR_LONG("LOG_NDELAY", LOG_NDELAY);
-#ifdef LOG_NOWAIT
- /* BeOS doesn't have LOG_NOWAIT */
- SET_VAR_LONG("LOG_NOWAIT", LOG_NOWAIT);
-#endif
-#ifdef LOG_PERROR
- /* AIX doesn't have LOG_PERROR */
- SET_VAR_LONG("LOG_PERROR", LOG_PERROR); /*log to stderr*/
-#endif
-
- BG(syslog_started)=1;
-}
-/* }}} */
-
-/* {{{ proto void define_syslog_variables(void)
- Initializes all syslog-related variables */
-PHP_FUNCTION(define_syslog_variables)
-{
- if (ZEND_NUM_ARGS() != 0) {
- php_error(E_WARNING, "%s() expects no parameters, %d given",
- get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
- return;
- }
-
- if (!BG(syslog_started)) {
- start_syslog(TSRMLS_C);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openlog(string ident, int option, int facility)
- Open connection to system logger */
-/*
- ** OpenLog("nettopp", $LOG_PID, $LOG_LOCAL1);
- ** Syslog($LOG_EMERG, "help me!")
- ** CloseLog();
- */
-PHP_FUNCTION(openlog)
-{
- char *ident;
- long option, facility;
- int ident_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll", &ident,
- &ident_len, &option, &facility) == FAILURE) {
- return;
- }
- if (BG(syslog_device)) {
- efree(BG(syslog_device));
- }
- BG(syslog_device) = estrndup(ident, ident_len);
- openlog(BG(syslog_device), option, facility);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool closelog(void)
- Close connection to system logger */
-PHP_FUNCTION(closelog)
-{
- if (ZEND_NUM_ARGS() != 0) {
- php_error(E_WARNING, "%s() expects no parameters, %d given",
- get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
- return;
- }
-
- closelog();
- if (BG(syslog_device)) {
- efree(BG(syslog_device));
- BG(syslog_device)=NULL;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool syslog(int priority, string message)
- Generate a system log message */
-PHP_FUNCTION(syslog)
-{
- long priority;
- char *message;
- int message_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &priority,
- &message, &message_len) == FAILURE) {
- return;
- }
-
- /*
- * CAVEAT: if the message contains patterns such as "%s",
- * this will cause problems.
- */
-
- php_syslog(priority, "%.500s", message);
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/tests/aggregation/aggregate.lib b/ext/standard/tests/aggregation/aggregate.lib
deleted file mode 100644
index 3799285f75..0000000000
--- a/ext/standard/tests/aggregation/aggregate.lib
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-class simple {
- var $simple_prop = 100;
-
- function simple()
- {
- print "I'm alive!\n";
- }
-}
-
-class helper {
- var $my_prop = 5;
- var $your_prop = array('init' => PHP_VERSION);
- var $our_prop = '****';
- var $_priv_prop = null;
-
- function helper()
- {
- print "just trying to help\n";
- }
-
- function do_this()
- {
- print "I'm helping!\n";
- }
-
- function do_that()
- {
- print "I'm aggregating!\n";
- }
-
- function just_another_method()
- {
- print "yep, that's me\n";
- }
-
- function _private()
- {
- print "Don't touch me!\n";
- }
-
- function __wakeup()
- {
- }
-}
-
-class mixin {
- var $simple_prop = true;
- var $mix = true;
-
- function mix_it()
- {
- print "mixing\n";
- }
-}
-
-class moby {
- function mix_it()
- {
- print "I'm redundant!\n";
- }
-}
-
-?>
diff --git a/ext/standard/tests/aggregation/aggregate.phpt b/ext/standard/tests/aggregation/aggregate.phpt
deleted file mode 100644
index 46aa9133b6..0000000000
--- a/ext/standard/tests/aggregation/aggregate.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-aggregating everything
---FILE--
-<?php
-
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate($obj, 'helper');
-$obj->do_this();
-$obj->do_that();
-print $obj->our_prop;
-
-?>
---EXPECT--
-I'm alive!
-I'm helping!
-I'm aggregating!
-****
diff --git a/ext/standard/tests/aggregation/aggregate_methods.phpt b/ext/standard/tests/aggregation/aggregate_methods.phpt
deleted file mode 100644
index b612881c59..0000000000
--- a/ext/standard/tests/aggregation/aggregate_methods.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-aggregating all methods
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate_methods($obj, 'mixin');
-$obj->mix_it();
-print $obj->simple_prop."\n";
-print implode(',', get_class_methods($obj))."\n";
-print implode(',', array_keys(get_object_vars($obj)))."\n";
-aggregate_methods($obj, 'moby');
-$obj->mix_it();
-
-?>
---EXPECT--
-I'm alive!
-mixing
-100
-simple,mix_it
-simple_prop
-mixing
diff --git a/ext/standard/tests/aggregation/aggregate_methods_by_list.phpt b/ext/standard/tests/aggregation/aggregate_methods_by_list.phpt
deleted file mode 100644
index 312a57d1b2..0000000000
--- a/ext/standard/tests/aggregation/aggregate_methods_by_list.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-aggregating methods specified in the list
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate_methods_by_list($obj, 'helper', array('just_another_method'));
-print implode(',', get_class_methods($obj))."\n";
-$obj2 = new simple();
-aggregate_methods_by_list($obj2, 'helper', array('just_another_method'), true);
-print implode(',', get_class_methods($obj2))."\n";
-$obj->just_another_method();
-?>
---EXPECT--
-I'm alive!
-simple,just_another_method
-I'm alive!
-simple,do_this,do_that
-yep, that's me
diff --git a/ext/standard/tests/aggregation/aggregate_methods_by_regexp.phpt b/ext/standard/tests/aggregation/aggregate_methods_by_regexp.phpt
deleted file mode 100644
index 6525e50cff..0000000000
--- a/ext/standard/tests/aggregation/aggregate_methods_by_regexp.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-aggregating methods matching regular expression
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate_methods_by_regexp($obj, 'helper', '/^do/');
-print implode(',', get_class_methods($obj))."\n";
-$obj2 = new simple();
-aggregate_methods_by_regexp($obj2, 'helper', '/^do/', true);
-print implode(',', get_class_methods($obj2))."\n";
-?>
---EXPECT--
-I'm alive!
-simple,do_this,do_that
-I'm alive!
-simple,just_another_method
diff --git a/ext/standard/tests/aggregation/aggregate_properties.phpt b/ext/standard/tests/aggregation/aggregate_properties.phpt
deleted file mode 100644
index 2a976c71a7..0000000000
--- a/ext/standard/tests/aggregation/aggregate_properties.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-aggregating all default properties
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate_properties($obj, 'mixin');
-print implode(',', array_keys(get_object_vars($obj)))."\n";
-print $obj->simple_prop."\n";
-print implode(',', get_class_methods($obj))."\n";
-?>
---EXPECT--
-I'm alive!
-simple_prop,mix
-100
-simple
diff --git a/ext/standard/tests/aggregation/aggregate_properties_by_list.phpt b/ext/standard/tests/aggregation/aggregate_properties_by_list.phpt
deleted file mode 100644
index fa12d36bcb..0000000000
--- a/ext/standard/tests/aggregation/aggregate_properties_by_list.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-aggregating default properties specified in the list
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate_properties_by_list($obj, 'helper', array('my_prop', 'our_prop'));
-print implode(',', array_keys(get_object_vars($obj)))."\n";
-$obj2 = new simple();
-aggregate_properties_by_list($obj2, 'helper', array('my_prop'), true);
-print implode(',', array_keys(get_object_vars($obj2)))."\n";
-?>
---EXPECT--
-I'm alive!
-simple_prop,my_prop,our_prop
-I'm alive!
-simple_prop,your_prop,our_prop
diff --git a/ext/standard/tests/aggregation/aggregate_properties_by_regexp.phpt b/ext/standard/tests/aggregation/aggregate_properties_by_regexp.phpt
deleted file mode 100644
index 6c1606505a..0000000000
--- a/ext/standard/tests/aggregation/aggregate_properties_by_regexp.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-aggregating default properties matching regular expression
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate_properties_by_regexp($obj, 'helper', '/^my/');
-print implode(',', array_keys(get_object_vars($obj)))."\n";
-$obj2 = new simple();
-aggregate_properties_by_regexp($obj2, 'helper', '/^my/', true);
-print implode(',', array_keys(get_object_vars($obj2)))."\n";
-?>
---EXPECT--
-I'm alive!
-simple_prop,my_prop
-I'm alive!
-simple_prop,your_prop,our_prop
diff --git a/ext/standard/tests/aggregation/aggregation_info.phpt b/ext/standard/tests/aggregation/aggregation_info.phpt
deleted file mode 100644
index 8dd943cbcc..0000000000
--- a/ext/standard/tests/aggregation/aggregation_info.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-retrieving aggregation info
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate($obj, 'mixin');
-print_r(aggregation_info($obj));
-?>
---EXPECT--
-I'm alive!
-Array
-(
- [mixin] => Array
- (
- [methods] => Array
- (
- [0] => mix_it
- )
-
- [properties] => Array
- (
- [0] => mix
- )
-
- )
-
-)
diff --git a/ext/standard/tests/aggregation/deaggregate.phpt b/ext/standard/tests/aggregation/deaggregate.phpt
deleted file mode 100644
index 5c551d75bd..0000000000
--- a/ext/standard/tests/aggregation/deaggregate.phpt
+++ /dev/null
@@ -1,72 +0,0 @@
---TEST--
-deaggreating
---POST--
---GET--
---FILE--
-<?php
-include "ext/standard/tests/aggregation/aggregate.lib";
-
-$obj = new simple();
-aggregate($obj, 'helper');
-aggregate($obj, 'mixin');
-print_r(aggregation_info($obj));
-deaggregate($obj, 'helper');
-print_r(aggregation_info($obj));
-deaggregate($obj);
-var_dump(aggregation_info($obj));
-?>
---EXPECT--
-I'm alive!
-Array
-(
- [helper] => Array
- (
- [methods] => Array
- (
- [0] => do_this
- [1] => do_that
- [2] => just_another_method
- )
-
- [properties] => Array
- (
- [0] => my_prop
- [1] => your_prop
- [2] => our_prop
- )
-
- )
-
- [mixin] => Array
- (
- [methods] => Array
- (
- [0] => mix_it
- )
-
- [properties] => Array
- (
- [0] => mix
- )
-
- )
-
-)
-Array
-(
- [mixin] => Array
- (
- [methods] => Array
- (
- [0] => mix_it
- )
-
- [properties] => Array
- (
- [0] => mix
- )
-
- )
-
-)
-bool(false)
diff --git a/ext/standard/tests/array/001.phpt b/ext/standard/tests/array/001.phpt
deleted file mode 100644
index 7bec465e6f..0000000000
--- a/ext/standard/tests/array/001.phpt
+++ /dev/null
@@ -1,153 +0,0 @@
---TEST--
-Test array_merge and array_walk
---POST--
---GET--
---FILE--
-<?php
-require('ext/standard/tests/array/data.inc');
-/*
-** Create sample arrays
-** Test alpha, numeric (decimal, hex, octal) and special data
-**
-**
-*/
-
-/* Helper function to build testing arrays */
-function make_nested_array ($depth, $breadth, $function = NULL, $args = array ()) {
- for ($x = 0; $x < $breadth; ++$x) {
- if (NULL === $function) {
- $array = array (0);
- } else {
- $array = array (call_user_func_array ($function, $args));
- }
- for ($y = 1; $y < $depth; ++$y) {
- $array[0] = array ($array[0]);
- }
- $temp[$x] = $array;
- }
- return $temp;
-}
-
-/* Nested array */
-$data2 = make_nested_array (3, 3);
-$data = array_merge($data, $data2);
-
-var_dump ($data);
-
-function echo_kv ($value, $key) {
- var_dump ($key);
- var_dump ($value);
-}
-
-echo " -- Testing array_walk() -- \n";
-array_walk ($data, 'echo_kv');
-
-?>
---EXPECT--
-array(10) {
- [0]=>
- string(3) "PHP"
- [1]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [3]=>
- string(4) "test"
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [4]=>
- float(-0.33333333333333)
- [5]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
- }
- [6]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
- }
- [7]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
- }
-}
- -- Testing array_walk() --
-int(0)
-string(3) "PHP"
-int(1)
-string(27) "PHP: Hypertext Preprocessor"
-int(2)
-string(4) "Test"
-string(4) "test"
-int(27)
-int(3)
-string(4) "test"
-string(11) "-2147483648"
-array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
-}
-int(4)
-float(-0.33333333333333)
-int(5)
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
-}
-int(6)
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
-}
-int(7)
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
-} \ No newline at end of file
diff --git a/ext/standard/tests/array/002.phpt b/ext/standard/tests/array/002.phpt
deleted file mode 100644
index cf1fec4bca..0000000000
--- a/ext/standard/tests/array/002.phpt
+++ /dev/null
@@ -1,570 +0,0 @@
---TEST--
-Test arsort, asort, krsort, ksort, rsort, and sort
---POST--
---GET--
---FILE--
-<?php
-require('ext/standard/tests/array/data.inc');
-
-function test_sort ($sort_function, $data) {
- echo "\n -- Testing $sort_function() -- \n";
- echo "No second argument:\n";
- $sort_function ($data);
- var_dump ($data);
- echo "Using SORT_REGULAR:\n";
- $sort_function ($data, SORT_REGULAR);
- var_dump ($data);
- echo "Using SORT_NUMERIC:\n";
- $sort_function ($data, SORT_NUMERIC);
- var_dump ($data);
- echo "Using SORT_STRING\n";
- $sort_function ($data, SORT_STRING);
- var_dump ($data);
-}
-
-foreach (array ('arsort', 'asort', 'krsort', 'ksort', 'rsort', 'sort') as $test_function) {
- test_sort ($test_function, $data);
-}
-
-?>
---EXPECT--
-
- -- Testing arsort() --
-No second argument:
-array(7) {
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [2147483647]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- [-2147483648]=>
- float(-0.33333333333333)
-}
-Using SORT_REGULAR:
-array(7) {
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [2147483647]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- [-2147483648]=>
- float(-0.33333333333333)
-}
-Using SORT_NUMERIC:
-array(7) {
- ["test"]=>
- int(27)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [2147483647]=>
- string(4) "test"
- [-2147483648]=>
- float(-0.33333333333333)
-}
-Using SORT_STRING
-array(7) {
- [2147483647]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [-2147483648]=>
- float(-0.33333333333333)
-}
-
- -- Testing asort() --
-No second argument:
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [2147483647]=>
- string(4) "test"
- ["test"]=>
- int(27)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_REGULAR:
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [2147483647]=>
- string(4) "test"
- ["test"]=>
- int(27)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_NUMERIC:
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- [2147483647]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
-}
-Using SORT_STRING
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- ["test"]=>
- int(27)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [2147483647]=>
- string(4) "test"
-}
-
- -- Testing krsort() --
-No second argument:
-array(7) {
- [2147483647]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [-2147483648]=>
- float(-0.33333333333333)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_REGULAR:
-array(7) {
- [2147483647]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [0]=>
- string(3) "PHP"
- ["test"]=>
- int(27)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [-2147483648]=>
- float(-0.33333333333333)
-}
-Using SORT_NUMERIC:
-array(7) {
- [2147483647]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [-2147483648]=>
- float(-0.33333333333333)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_STRING
-array(7) {
- ["test"]=>
- int(27)
- [5]=>
- string(4) "Test"
- [2147483647]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [-2147483648]=>
- float(-0.33333333333333)
-}
-
- -- Testing ksort() --
-No second argument:
-array(7) {
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [-2147483648]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- ["test"]=>
- int(27)
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2147483647]=>
- string(4) "test"
-}
-Using SORT_REGULAR:
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2147483647]=>
- string(4) "test"
-}
-Using SORT_NUMERIC:
-array(7) {
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [-2147483648]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- ["test"]=>
- int(27)
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2147483647]=>
- string(4) "test"
-}
-Using SORT_STRING
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2147483647]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
-}
-
- -- Testing rsort() --
-No second argument:
-array(7) {
- [0]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [1]=>
- int(27)
- [2]=>
- string(4) "test"
- [3]=>
- string(4) "Test"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(3) "PHP"
- [6]=>
- float(-0.33333333333333)
-}
-Using SORT_REGULAR:
-array(7) {
- [0]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [1]=>
- int(27)
- [2]=>
- string(4) "test"
- [3]=>
- string(4) "Test"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(3) "PHP"
- [6]=>
- float(-0.33333333333333)
-}
-Using SORT_NUMERIC:
-array(7) {
- [0]=>
- int(27)
- [1]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [2]=>
- string(3) "PHP"
- [3]=>
- string(27) "PHP: Hypertext Preprocessor"
- [4]=>
- string(4) "Test"
- [5]=>
- string(4) "test"
- [6]=>
- float(-0.33333333333333)
-}
-Using SORT_STRING
-array(7) {
- [0]=>
- string(4) "test"
- [1]=>
- string(4) "Test"
- [2]=>
- string(27) "PHP: Hypertext Preprocessor"
- [3]=>
- string(3) "PHP"
- [4]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [5]=>
- int(27)
- [6]=>
- float(-0.33333333333333)
-}
-
- -- Testing sort() --
-No second argument:
-array(7) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- string(3) "PHP"
- [2]=>
- string(27) "PHP: Hypertext Preprocessor"
- [3]=>
- string(4) "Test"
- [4]=>
- string(4) "test"
- [5]=>
- int(27)
- [6]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_REGULAR:
-array(7) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- string(3) "PHP"
- [2]=>
- string(27) "PHP: Hypertext Preprocessor"
- [3]=>
- string(4) "Test"
- [4]=>
- string(4) "test"
- [5]=>
- int(27)
- [6]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_NUMERIC:
-array(7) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- string(4) "test"
- [2]=>
- string(4) "Test"
- [3]=>
- string(27) "PHP: Hypertext Preprocessor"
- [4]=>
- string(3) "PHP"
- [5]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [6]=>
- int(27)
-}
-Using SORT_STRING
-array(7) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- int(27)
- [2]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [3]=>
- string(3) "PHP"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [6]=>
- string(4) "test"
-}
diff --git a/ext/standard/tests/array/003.phpt b/ext/standard/tests/array/003.phpt
deleted file mode 100644
index 7ea9a18df5..0000000000
--- a/ext/standard/tests/array/003.phpt
+++ /dev/null
@@ -1,98 +0,0 @@
---TEST--
-Test usort, uksort and uasort
---POST--
---GET--
---FILE--
-<?php
-require('ext/standard/tests/array/data.inc');
-
-function cmp ($a, $b) {
- is_array ($a)
- and $a = array_sum ($a);
- is_array ($b)
- and $b = array_sum ($b);
- return strcmp ($a, $b);
-}
-
-echo " -- Testing uasort() -- \n";
-uasort ($data, 'cmp');
-var_dump ($data);
-
-
-echo "\n -- Testing uksort() -- \n";
-uksort ($data, 'cmp');
-var_dump ($data);
-
-echo "\n -- Testing usort() -- \n";
-usort ($data, 'cmp');
-var_dump ($data);
-?>
---EXPECT--
- -- Testing uasort() --
-array(7) {
- [-2147483648]=>
- float(-0.33333333333333)
- ["-2147483648"]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(0)
- }
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [2147483647]=>
- string(4) "test"
-}
-
- -- Testing uksort() --
-array(7) {
- ["-2147483648"]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(0)
- }
- [-2147483648]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2147483647]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
-}
-
- -- Testing usort() --
-array(7) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(0)
- }
- [2]=>
- int(27)
- [3]=>
- string(3) "PHP"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [6]=>
- string(4) "test"
-}
diff --git a/ext/standard/tests/array/004.phpt b/ext/standard/tests/array/004.phpt
deleted file mode 100644
index e3ad1d6948..0000000000
--- a/ext/standard/tests/array/004.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-Test natsort and natcasesort
---POST--
---GET--
---FILE--
-<?php
-$data = array(
- 'Test1',
- 'teST2'=>0,
- 5=>'test2',
- 'abc'=>'test10',
- 'test21'
-);
-
-var_dump($data);
-
-natsort($data);
-var_dump($data);
-
-natcasesort($data);
-var_dump($data);
-?>
---EXPECT--
-array(5) {
- [0]=>
- string(5) "Test1"
- ["teST2"]=>
- int(0)
- [5]=>
- string(5) "test2"
- ["abc"]=>
- string(6) "test10"
- [6]=>
- string(6) "test21"
-}
-array(5) {
- ["teST2"]=>
- int(0)
- [0]=>
- string(5) "Test1"
- [5]=>
- string(5) "test2"
- ["abc"]=>
- string(6) "test10"
- [6]=>
- string(6) "test21"
-}
-array(5) {
- ["teST2"]=>
- int(0)
- [0]=>
- string(5) "Test1"
- [5]=>
- string(5) "test2"
- ["abc"]=>
- string(6) "test10"
- [6]=>
- string(6) "test21"
-} \ No newline at end of file
diff --git a/ext/standard/tests/array/array_search.phpt b/ext/standard/tests/array/array_search.phpt
deleted file mode 100644
index 03c03cb2bc..0000000000
--- a/ext/standard/tests/array/array_search.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-search_array and in_array (including bug 13567)
---POST--
---GET--
---FILE--
-<?php
-
-$arr1 = array('a','b','c');
-$arr2 = array();
-$arr3 = array('c','key'=>'d');
-$arr4 = array("a\0b"=>'e','key'=>'d', 'f');
-
-$tests = <<<TESTS
-FALSE === in_array(123, \$arr1)
-FALSE === array_search(123, \$arr1)
-TRUE === in_array('a', \$arr1)
-0 === array_search('a', \$arr1)
-"a\\0b"=== array_search('e', \$arr4)
-'key'=== array_search('d', \$arr4)
-TESTS;
-
-include('tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/standard/tests/array/count_recursive.phpt b/ext/standard/tests/array/count_recursive.phpt
deleted file mode 100644
index 1dcd845eaa..0000000000
--- a/ext/standard/tests/array/count_recursive.phpt
+++ /dev/null
@@ -1,54 +0,0 @@
---TEST--
-count
---POST--
---GET--
---FILE--
-<?php
-print "Testing NULL...\n";
-$arr = NULL;
-print "COUNT_NORMAL: should be 0, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 0, is ".count($arr, COUNT_RECURSIVE)."\n";
-
-print "Testing arrays...\n";
-$arr = array(1, array(3, 4, array(6, array(8))));
-print "COUNT_NORMAL: should be 2, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 8, is ".count($arr, COUNT_RECURSIVE)."\n";
-
-print "Testing hashes...\n";
-$arr = array("a" => 1, "b" => 2, array("c" => 3, array("d" => 5)));
-print "COUNT_NORMAL: should be 3, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 6, is ".count($arr, COUNT_RECURSIVE)."\n";
-
-print "Testing strings...\n";
-print "COUNT_NORMAL: should be 1, is ".count("string", COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 1, is ".count("string", COUNT_RECURSIVE)."\n";
-
-print "Testing various types with no second argument.\n";
-print "COUNT_NORMAL: should be 1, is ".count("string")."\n";
-print "COUNT_NORMAL: should be 2, is ".count(array("a", array("b")))."\n";
-
-$arr = array('a'=>array(NULL, NULL, NULL), 1=>array(NULL=>1, 1=>NULL),
- array(array(array(array(array(NULL))))));
-print "Testing really cool arrays ;)\n";
-print "COUNT_NORMAL: should be 3, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 13, is ".count($arr, COUNT_RECURSIVE)."\n";
-?>
---EXPECT--
-Testing NULL...
-COUNT_NORMAL: should be 0, is 0
-COUNT_RECURSIVE: should be 0, is 0
-Testing arrays...
-COUNT_NORMAL: should be 2, is 2
-COUNT_RECURSIVE: should be 8, is 8
-Testing hashes...
-COUNT_NORMAL: should be 3, is 3
-COUNT_RECURSIVE: should be 6, is 6
-Testing strings...
-COUNT_NORMAL: should be 1, is 1
-COUNT_RECURSIVE: should be 1, is 1
-Testing various types with no second argument.
-COUNT_NORMAL: should be 1, is 1
-COUNT_NORMAL: should be 2, is 2
-Testing really cool arrays ;)
-COUNT_NORMAL: should be 3, is 3
-COUNT_RECURSIVE: should be 13, is 13
diff --git a/ext/standard/tests/array/data.inc b/ext/standard/tests/array/data.inc
deleted file mode 100644
index b700a701a9..0000000000
--- a/ext/standard/tests/array/data.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$tmp = pow(2,64);
-$data = array(
- 'PHP',
- 17=>'PHP: Hypertext Preprocessor',
- 5=>'Test',
- 'test'=>27,
- 2147483647=>'test',
- "-2147483648"=>array('banana', 'orange'),
- 'monkey',
- $tmp=>-1/3
-);
-?>
diff --git a/ext/standard/tests/assert/assert.phpt b/ext/standard/tests/assert/assert.phpt
deleted file mode 100644
index 21924902a8..0000000000
--- a/ext/standard/tests/assert/assert.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-assert()
---POST--
---GET--
---FILE--
-<?php
-function a($file,$line,$myev)
-{
- echo "assertion failed $line,\"$myev\"\n";
-}
-
-class a
-{
- function assert($file,$line,$myev)
- {
- echo "class assertion failed $line,\"$myev\"\n";
- }
-}
-
-assert_options(ASSERT_ACTIVE,1);
-assert_options(ASSERT_QUIET_EVAL,1);
-assert_options(ASSERT_WARNING,0);
-
-$a = 0;
-
-assert_options(ASSERT_CALLBACK,"a");
-assert('$a != 0');
-
-assert_options(ASSERT_CALLBACK,array("a","assert"));
-assert('$a != 0');
-
-$obj = new a();
-assert_options(ASSERT_CALLBACK,array(&$obj,"assert"));
-assert('$a != 0');
-?>
---EXPECT--
-assertion failed 22,"$a != 0"
-class assertion failed 25,"$a != 0"
-class assertion failed 29,"$a != 0"
diff --git a/ext/standard/tests/file/001.phpt b/ext/standard/tests/file/001.phpt
deleted file mode 100644
index 8b4ff87850..0000000000
--- a/ext/standard/tests/file/001.phpt
+++ /dev/null
@@ -1,150 +0,0 @@
---TEST--
-File type functions
---POST--
---GET--
---FILE--
-<?php
-chdir(dirname(__FILE__));
-@unlink('test.file');
-@unlink('test.link');
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-fclose (fopen('test.file', 'w'));
-chmod ('test.file', 0744);
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-sleep (2);
-symlink('test.file','test.link');
-if (file_exists('test.link')) {
- echo "test.link exists\n";
-} else {
- echo "test.link does not exist\n";
-}
-if (is_link('test.file')) {
- echo "test.file is a symlink\n";
-} else {
- echo "test.file is not a symlink\n";
-}
-if (is_link('test.link')) {
- echo "test.link is a symlink\n";
-} else {
- echo "test.link is not a symlink\n";
-}
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-$s = stat ('test.file');
-$ls = lstat ('test.file');
-for ($i = 0; $i <= 12; $i++) {
- if ($ls[$i] != $s[$i]) {
- echo "test.file lstat and stat differ at element $i\n";
- }
-}
-$s = stat ('test.link');
-$ls = lstat ('test.link');
-for ($i = 0; $i <= 11; $i++) {
- if ($ls[$i] != $s[$i]) {
- if ($i != 6 && $i != 11) echo "test.link lstat and stat differ at element $i\n";
- }
-}
-echo "test.file is " . filetype('test.file') . "\n";
-echo "test.link is " . filetype('test.link') . "\n";
-printf ("test.file permissions are 0%o\n", 0777 & fileperms('test.file'));
-echo "test.file size is " . filesize('test.file') . "\n";
-if (is_writeable('test.file')) {
- echo "test.file is writeable\n";
-} else {
- echo "test.file is not writeable\n";
-}
-if (is_readable('test.file')) {
- echo "test.file is readable\n";
-} else {
- echo "test.file is not readable\n";
-}
-if (is_executable('test.file')) {
- echo "test.file is executable\n";
-} else {
- echo "test.file is not executable\n";
-}
-chmod ('test.file', 0644);
-clearstatcache();
-if (is_executable('test.file')) {
- echo "test.file is executable\n";
-} else {
- echo "test.file is not executable\n";
-}
-if (is_file('test.file')) {
- echo "test.file is a regular file\n";
-} else {
- echo "test.file is not a regular file\n";
-}
-if (is_file('test.link')) {
- echo "test.link is a regular file\n";
-} else {
- echo "test.link is not a regular file\n";
-}
-if (is_dir('test.link')) {
- echo "test.link is a directory\n";
-} else {
- echo "test.link is not a directory\n";
-}
-if (is_dir('../file')) {
- echo "../file is a directory\n";
-} else {
- echo "../file is not a directory\n";
-}
-if (is_dir('test.file')) {
- echo "test.file is a directory\n";
-} else {
- echo "test.file is not a directory\n";
-}
-unlink('test.file');
-unlink('test.link');
-if (file_exists('test.file')) {
- echo "test.file exists (cached)\n";
-} else {
- echo "test.file does not exist\n";
-}
-clearstatcache();
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-?>
---EXPECT--
-test.file does not exist
-test.file exists
-test.link exists
-test.file is not a symlink
-test.link is a symlink
-test.file exists
-test.link lstat and stat differ at element 1
-test.link lstat and stat differ at element 2
-test.link lstat and stat differ at element 7
-test.link lstat and stat differ at element 8
-test.link lstat and stat differ at element 9
-test.link lstat and stat differ at element 10
-test.file is file
-test.link is link
-test.file permissions are 0744
-test.file size is 0
-test.file is writeable
-test.file is readable
-test.file is executable
-test.file is not executable
-test.file is a regular file
-test.link is a regular file
-test.link is not a directory
-../file is a directory
-test.file is not a directory
-test.file does not exist
-test.file does not exist
diff --git a/ext/standard/tests/file/002.phpt b/ext/standard/tests/file/002.phpt
deleted file mode 100644
index 4642bac366..0000000000
--- a/ext/standard/tests/file/002.phpt
+++ /dev/null
@@ -1,54 +0,0 @@
---TEST--
-File/Stream functions
---POST--
---GET--
---FILE--
-<?php
-
-$data = <<<EOD
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-EOD;
-
-$name = tempnam("./ext/standard/tests/file/", "php");
-$fp = fopen($name, "w");
-fwrite($fp, $data);
-fclose($fp);
-
-//readfile($name);
-echo file_get_contents($name);
-
-unlink($name);
-
-?>
---EXPECT--
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
diff --git a/ext/standard/tests/file/003.inc b/ext/standard/tests/file/003.inc
deleted file mode 100644
index 01a7be876d..0000000000
--- a/ext/standard/tests/file/003.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-$funcs = array(
- 'is_writable',
- 'is_readable',
- 'is_executable',
- 'is_file',
- 'file_exists',
-);
-
-$filename="";
-
-foreach ($funcs as $test) {
- $bb = $test($filename);
- var_dump($bb);
- clearstatcache();
-}
-
-$filename="run-tests.php";
-
-foreach ($funcs as $test) {
- $bb = $test($filename);
- var_dump($bb);
- clearstatcache();
-}
-
-?>
diff --git a/ext/standard/tests/file/003.phpt b/ext/standard/tests/file/003.phpt
deleted file mode 100644
index 33b9fd2cdb..0000000000
--- a/ext/standard/tests/file/003.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-is_*() and file_exists() return values are boolean.
---POST--
---GET--
---FILE--
-<?php require '003.inc' ?>
---EXPECT--
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
diff --git a/ext/standard/tests/general_functions/001.phpt b/ext/standard/tests/general_functions/001.phpt
deleted file mode 100644
index ee6d32f7f8..0000000000
--- a/ext/standard/tests/general_functions/001.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-sprintf() function
---POST--
---GET--
---FILE--
-<?php
-
-$agent = sprintf("%.5s", "James Bond, 007");
-
-echo("sprintf string truncate test: ");
-if ($agent == "James") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf padding and align test: ");
-$test = sprintf("abc%04d %-20s%c", 20, "fisketur", 33);
-if ($test == "abc0020 fisketur !") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf octal and hex test: ");
-$test = sprintf("%4o %4x %4X %0"."8x", 128, 1024, 49151, 3457925);
-if ($test == " 200 400 BFFF 0034c385") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf octal binary test: ");
-$test = sprintf("%b", 3457925);
-if ($test == "1101001100001110000101") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf float test: ");
-$test = sprintf("%0"."06.2f", 10000/3.0);
-if ($test == "003333.33") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-?>
---EXPECT--
-sprintf string truncate test: passed
-sprintf padding and align test: passed
-sprintf octal and hex test: passed
-sprintf octal binary test: passed
-sprintf float test: passed
diff --git a/ext/standard/tests/general_functions/002.phpt b/ext/standard/tests/general_functions/002.phpt
deleted file mode 100644
index 8ab1a72f07..0000000000
--- a/ext/standard/tests/general_functions/002.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-quoted_printable_decode() function test
---POST--
---GET--
---FILE--
-<?php echo quoted_printable_decode("=FAwow-factor=C1=d0=D5=DD=C5=CE=CE=D9=C5=0A=
-=20=D4=cf=D2=C7=CF=D7=D9=C5=
-=20=
-=D0=
-=D2=CF=C5=CB=D4=D9"); ?>
---EXPECT--
-úwow-factorÁÐÕÝÅÎÎÙÅ
- ÔÏÒÇÏ×ÙÅ ÐÒÏÅËÔÙ
diff --git a/ext/standard/tests/general_functions/003.phpt b/ext/standard/tests/general_functions/003.phpt
deleted file mode 100644
index 141b4d7052..0000000000
--- a/ext/standard/tests/general_functions/003.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-levenshtein() function test
---POST--
---GET--
---FILE--
-<?php
-
-function test_me($title,$expect,$text1,$text2,$cost1=0,$cost2=0,$cost3=0) {
-
- if($cost1==0)
- $result=levenshtein($text1,$text2);
- else
- $result=levenshtein($text1,$text2,$cost1,$cost2,$cost3);
-
- if($result==$expect) return 0;
-
- echo "$title: result is $result instead of $expect ";
- echo "for '$text1'/'$text2' ";
- if($cost1) echo "($cost1:$cost2:$cost3)";
- echo "\n";
-
- return 1;
-}
-
-$n=0;
-
-$n += test_me("equal" , 0, "12345", "12345");
-$n += test_me("1st empty" , 3, "", "xzy");
-$n += test_me("2nd empty" , 3, "xzy", "");
-$n += test_me("both empty" , 0, "", "");
-$n += test_me("1 char" , 1, "1", "2");
-$n += test_me("2 char swap", 2, "12", "21");
-
-$n += test_me("inexpensive delete", 2, "2121", "11", 2, 1, 1);
-$n += test_me("expensive delete" , 10, "2121", "11", 2, 1, 5);
-$n += test_me("inexpensive insert", 2, "11", "2121", 1, 1, 1);
-$n += test_me("expensive insert" , 10, "11", "2121", 5, 1, 1);
-
-$n += test_me("expensive replace" , 3, "111", "121", 2, 3, 2);
-$n += test_me("very expensive replace", 4, "111", "121", 2, 9, 2);
-
-$n += test_me("bug #7368", 2, "13458", "12345");
-$n += test_me("bug #7368", 2, "1345", "1234");
-
-$n += test_me("bug #6562", 1, "debugg", "debug");
-$n += test_me("bug #6562", 1, "ddebug", "debug");
-$n += test_me("bug #6562", 2, "debbbug", "debug");
-$n += test_me("bug #6562", 1, "debugging", "debuging");
-
-$n += test_me("bug #16473", 2, "a", "bc");
-$n += test_me("bug #16473", 2, "xa", "xbc");
-$n += test_me("bug #16473", 2, "xax", "xbcx");
-$n += test_me("bug #16473", 2, "ax", "bcx");
-
-
-echo ($n==0)?"all passed\n":"$n failed\n";
-
-?>
---EXPECT--
-all passed
diff --git a/ext/standard/tests/general_functions/004.data b/ext/standard/tests/general_functions/004.data
deleted file mode 100644
index 5dd0832842..0000000000
--- a/ext/standard/tests/general_functions/004.data
+++ /dev/null
@@ -1,4 +0,0 @@
-name value comment
-true 1 boolean true
-false 0 boolean false
-empty nothing
diff --git a/ext/standard/tests/general_functions/004.phpt b/ext/standard/tests/general_functions/004.phpt
deleted file mode 100644
index 3bd1fb1eac..0000000000
--- a/ext/standard/tests/general_functions/004.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-fgetcsv() with tab delimited fields (BUG #8258)
---POST--
---GET--
---FILE--
-<?php
-chdir(dirname(__FILE__));
-$fp=fopen("004.data","r");
-while($a=fgetcsv($fp,100,"\t")) {
- echo join(",",$a)."\n";
-}
-fclose($fp);
-?>
---EXPECT--
-name,value,comment
-true,1,boolean true
-false,0,boolean false
-empty,,nothing
diff --git a/ext/standard/tests/general_functions/005.phpt b/ext/standard/tests/general_functions/005.phpt
deleted file mode 100644
index 329d46e764..0000000000
--- a/ext/standard/tests/general_functions/005.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-is_scalar() function test
---POST--
---GET--
---FILE--
-<?php
-class foo {}
-var_dump (is_scalar (TRUE));
-var_dump (is_scalar (1));
-var_dump (is_scalar (1.0));
-var_dump (is_scalar ("Hi!"));
-var_dump (is_scalar (NULL));
-var_dump (is_scalar (array ()));
-var_dump (is_scalar (new foo()));
-var_dump (is_scalar (opendir('.')));
-?>
---EXPECT--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
diff --git a/ext/standard/tests/general_functions/006.phpt b/ext/standard/tests/general_functions/006.phpt
deleted file mode 100644
index 9db1ca3280..0000000000
--- a/ext/standard/tests/general_functions/006.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-quoted_printable_decode() function test with CR/LF
---POST--
---GET--
---FILE--
-<?php echo quoted_printable_decode("=FAwow-factor=C1=D0=D5=DD=C5=CE=CE=D9=C5=0A=
-=20=D4=CF=D2=C7=CF=D7=D9=C5=
-=20=
-=D0=
-=D2=CF=C5=CB=D4=D9"); ?>
---EXPECT--
-úwow-factorÁÐÕÝÅÎÎÙÅ
- ÔÏÒÇÏ×ÙÅ ÐÒÏÅËÔÙ
diff --git a/ext/standard/tests/general_functions/proc_open.phpt b/ext/standard/tests/general_functions/proc_open.phpt
deleted file mode 100644
index af275fe6bb..0000000000
--- a/ext/standard/tests/general_functions/proc_open.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-proc_open
---SKIPIF--
-<?php # vim:syn=php
-if (!is_executable("/bin/cat")) echo "skip";
-?>
---POST--
---GET--
---FILE--
-<?php
-$ds = array(
- 0 => array("pipe", "r"),
- 1 => array("pipe", "w"),
- 2 => array("pipe", "w")
- );
-
-$cat = proc_open(
- "/bin/cat",
- $ds,
- $pipes
- );
-
-proc_close($cat);
-
-echo "I didn't segfault!\n";
-
-?>
---EXPECT--
-I didn't segfault!
diff --git a/ext/standard/tests/math/abs.phpt b/ext/standard/tests/math/abs.phpt
deleted file mode 100644
index e4e5587897..0000000000
--- a/ext/standard/tests/math/abs.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Simple math tests
---POST--
---GET--
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
-$tests = <<<TESTS
- 1 === abs(-1)
- 1.5 === abs(-1.5)
- 1 === abs("-1")
- 1.5 === abs("-1.5")
--LONG_MIN+1 === abs(LONG_MIN-1)
--LONG_MIN === abs(LONG_MIN)
--(LONG_MIN+1) === abs(LONG_MIN+1)
-TESTS;
-
-include('tests/quicktester.inc');
---EXPECT--
-1,1,0,0
-OK
diff --git a/ext/standard/tests/math/floorceil.phpt b/ext/standard/tests/math/floorceil.phpt
deleted file mode 100644
index 2098e0af7c..0000000000
--- a/ext/standard/tests/math/floorceil.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Tests for floor en ceil
---POST--
---GET--
---FILE--
-<?php
- $a = ceil (-0); $b = ceil (-0.5); $c = ceil (-1);
- $d = ceil (-1.5); $e = ceil (-1.8); $f = ceil (-2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-
- $a = ceil (0); $b = ceil (0.5); $c = ceil (1);
- $d = ceil (1.5); $e = ceil (1.8); $f = ceil (2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-
- $a = floor (-0); $b = floor (-0.5); $c = floor (-1);
- $d = floor (-1.5); $e = floor (-1.8); $f = floor (-2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-
- $a = floor (0); $b = floor (0.5); $c = floor (1);
- $d = floor (1.5); $e = floor (1.8); $f = floor (2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-?>
---EXPECT--
-float(0)
-float(-0)
-float(-1)
-float(-1)
-float(-1)
-float(-2)
-float(0)
-float(1)
-float(1)
-float(2)
-float(2)
-float(3)
-float(0)
-float(-1)
-float(-1)
-float(-2)
-float(-2)
-float(-3)
-float(0)
-float(0)
-float(1)
-float(1)
-float(1)
-float(2)
diff --git a/ext/standard/tests/math/pow.phpt b/ext/standard/tests/math/pow.phpt
deleted file mode 100644
index 12170f4f3a..0000000000
--- a/ext/standard/tests/math/pow.phpt
+++ /dev/null
@@ -1,151 +0,0 @@
---TEST--
-Various pow() tests
---POST--
---GET--
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
-$tests = <<<TESTS
- 0.25 === pow(-2,-2)
--0.5 === pow(-2,-1)
- 1 === pow(-2, 0)
--2 === pow(-2, 1)
- 4 === pow(-2, 2)
- 1.0 === pow(-1,-2)
--1.0 === pow(-1,-1)
- 1 === pow(-1, 0)
--1 === pow(-1, 1)
- 1 === pow(-1, 2)
- TRUE === is_infinite(pow(0,-2))
- TRUE === is_infinite(pow(0,-1))
- 1 === pow( 0, 0)
- 0 === pow( 0, 1)
- 0 === pow( 0, 2)
- 1.0 === pow( 1,-2)
- 1.0 === pow( 1,-1)
- 1 === pow( 1, 0)
- 1 === pow( 1, 1)
- 1 === pow( 1, 2)
- 0.25 === pow( 2,-2)
- 0.5 === pow( 2,-1)
- 1 === pow( 2, 0)
- 2 === pow( 2, 1)
- 4 === pow( 2, 2)
- 0.25 === pow(-2,-2.0)
--0.5 === pow(-2,-1.0)
- 1.0 === pow(-2, 0.0)
--2.0 === pow(-2, 1.0)
- 4.0 === pow(-2, 2.0)
- 1.0 === pow(-1,-2.0)
--1.0 === pow(-1,-1.0)
- 1.0 === pow(-1, 0.0)
--1.0 === pow(-1, 1.0)
- 1.0 === pow(-1, 2.0)
- TRUE === is_infinite(pow(0,-2.0))
- TRUE === is_infinite(pow(0,-1.0))
- 1.0 === pow( 0, 0.0)
- 0.0 === pow( 0, 1.0)
- 0.0 === pow( 0, 2.0)
- 1.0 === pow( 1,-2.0)
- 1.0 === pow( 1,-1.0)
- 1.0 === pow( 1, 0.0)
- 1.0 === pow( 1, 1.0)
- 1.0 === pow( 1, 2.0)
- 0.25 === pow( 2,-2.0)
- 0.5 === pow( 2,-1.0)
- 1.0 === pow( 2, 0.0)
- 2.0 === pow( 2, 1.0)
- 4.0 === pow( 2, 2.0)
- 2147483648 === pow(2,31)
--2147483648 ~== pow(-2,31)
- 1000000000 === pow(10,9)
- 100000000 === pow(-10,8)
- 1 === pow(-1,1443279822)
--1 === pow(-1,1443279821)
-sqrt(2) ~== pow(2,1/2)
- 0.25 === pow(-2.0,-2.0)
--0.5 === pow(-2.0,-1.0)
- 1.0 === pow(-2.0, 0.0)
--2.0 === pow(-2.0, 1.0)
- 4.0 === pow(-2.0, 2.0)
- 1.0 === pow(-1.0,-2.0)
--1.0 === pow(-1.0,-1.0)
- 1.0 === pow(-1.0, 0.0)
--1.0 === pow(-1.0, 1.0)
- 1.0 === pow(-1.0, 2.0)
- TRUE === is_infinite(pow(0.0,-2.0))
- TRUE === is_infinite(pow(0.0,-1.0))
- 1.0 === pow( 0.0, 0.0)
- 0.0 === pow( 0.0, 1.0)
- 0.0 === pow( 0.0, 2.0)
- 1.0 === pow( 1.0,-2.0)
- 1.0 === pow( 1.0,-1.0)
- 1.0 === pow( 1.0, 0.0)
- 1.0 === pow( 1.0, 1.0)
- 1.0 === pow( 1.0, 2.0)
- 0.25 === pow( 2.0,-2.0)
- 0.5 === pow( 2.0,-1.0)
- 1.0 === pow( 2.0, 0.0)
- 2.0 === pow( 2.0, 1.0)
- 4.0 === pow( 2.0, 2.0)
- 0.25 === pow(-2.0,-2)
--0.5 === pow(-2.0,-1)
- 1.0 === pow(-2.0, 0)
--2.0 === pow(-2.0, 1)
- 4.0 === pow(-2.0, 2)
- 1.0 === pow(-1.0,-2)
--1.0 === pow(-1.0,-1)
- 1.0 === pow(-1.0, 0)
--1.0 === pow(-1.0, 1)
- 1.0 === pow(-1.0, 2)
- TRUE === is_infinite(pow( 0.0,-2))
- TRUE === is_infinite(pow( 0.0,-1))
- 1.0 === pow( 0.0, 0)
- 0.0 === pow( 0.0, 1)
- 0.0 === pow( 0.0, 2)
- 1.0 === pow( 1.0,-2)
- 1.0 === pow( 1.0,-1)
- 1.0 === pow( 1.0, 0)
- 1.0 === pow( 1.0, 1)
- 1.0 === pow( 1.0, 2)
- 0.25 === pow( 2.0,-2)
- 0.5 === pow( 2.0,-1)
- 1.0 === pow( 2.0, 0)
- 2.0 === pow( 2.0, 1)
- 4.0 === pow( 2.0, 2)
- 2.0 === pow( 4, 0.5)
- 2.0 === pow( 4.0, 0.5)
- 3.0 === pow( 27, 1/3)
- 3.0 === pow(27.0, 1/3)
- 0.5 === pow( 4, -0.5)
- 0.5 === pow( 4.0, -0.5)
-LONG_MAX-1 === pow(LONG_MAX-1,1)
-LONG_MIN+1 === pow(LONG_MIN+1,1)
-(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2)
-(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2)
-(float)(LONG_MAX-1) === pow(LONG_MAX-1,1.0)
-(float)(LONG_MIN+1) === pow(LONG_MIN+1,1.0)
-(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2.0)
-(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2.0)
-LONG_MAX === pow(LONG_MAX,1)
-LONG_MIN === pow(LONG_MIN,1)
-LONG_MAX*LONG_MAX ~== pow(LONG_MAX,2)
-LONG_MIN*LONG_MIN ~== pow(LONG_MIN,2)
-(float)LONG_MAX === pow(LONG_MAX,1.0)
-(float)LONG_MIN === pow(LONG_MIN,1.0)
-LONG_MAX*LONG_MAX ~== pow(LONG_MAX,2.0)
-LONG_MIN*LONG_MIN ~== pow(LONG_MIN,2.0)
-TESTS;
-
- echo "On failure, please mail result to php-dev@lists.php.net\n";
- include('tests/quicktester.inc');
-
---EXPECT--
-1,1,0,0
-On failure, please mail result to php-dev@lists.php.net
-OK
diff --git a/ext/standard/tests/math/round.phpt b/ext/standard/tests/math/round.phpt
deleted file mode 100644
index 49eabed606..0000000000
--- a/ext/standard/tests/math/round.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-Simple math tests
---POST--
---GET--
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
-$tests = <<<TESTS
--1 ~== ceil(-1.5)
- 2 ~== ceil( 1.5)
--2 ~== floor(-1.5)
- 1 ~== floor(1.5)
- LONG_MIN ~== ceil(LONG_MIN - 0.5)
- LONG_MIN+1 ~== ceil(LONG_MIN + 0.5)
- LONG_MIN-1 ~== round(LONG_MIN - 0.6)
- LONG_MIN ~== round(LONG_MIN - 0.4)
- LONG_MIN ~== round(LONG_MIN + 0.4)
- LONG_MIN+1 ~== round(LONG_MIN + 0.6)
- LONG_MIN-1 ~== floor(LONG_MIN - 0.5)
- LONG_MIN ~== floor(LONG_MIN + 0.5)
- LONG_MAX ~== ceil(LONG_MAX - 0.5)
- LONG_MAX+1 ~== ceil(LONG_MAX + 0.5)
- LONG_MAX-1 ~== round(LONG_MAX - 0.6)
- LONG_MAX ~== round(LONG_MAX - 0.4)
- LONG_MAX ~== round(LONG_MAX + 0.4)
- LONG_MAX+1 ~== round(LONG_MAX + 0.6)
- LONG_MAX-1 ~== floor(LONG_MAX - 0.5)
- LONG_MAX ~== floor(LONG_MAX + 0.5)
-TESTS;
-
-include('tests/quicktester.inc');
---EXPECT--
-1,1,0,0
-OK
diff --git a/ext/standard/tests/reg/001.phpt b/ext/standard/tests/reg/001.phpt
deleted file mode 100644
index f63c252518..0000000000
--- a/ext/standard/tests/reg/001.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-RegReplace test 1
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def",$a)?>
---EXPECT--
-abcdef
diff --git a/ext/standard/tests/reg/002.phpt b/ext/standard/tests/reg/002.phpt
deleted file mode 100644
index a9b7aaa00a..0000000000
--- a/ext/standard/tests/reg/002.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-RegReplace test 2
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","",$a)?>
---EXPECT--
-abc
diff --git a/ext/standard/tests/reg/003.phpt b/ext/standard/tests/reg/003.phpt
deleted file mode 100644
index edd9c05969..0000000000
--- a/ext/standard/tests/reg/003.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-ereg_replace single-quote test
---POST--
---GET--
---FILE--
-<?php $a="\\'test";
- echo ereg_replace("\\\\'","'",$a)
-?>
---EXPECT--
-'test
diff --git a/ext/standard/tests/reg/004.phpt b/ext/standard/tests/reg/004.phpt
deleted file mode 100644
index 1f60ff4900..0000000000
--- a/ext/standard/tests/reg/004.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-simple ereg test
---POST--
---GET--
---FILE--
-<?php $a="This is a nice and simple string";
- if (ereg(".*nice and simple.*",$a)) {
- echo "ok\n";
- }
- if (!ereg(".*doesn't exist.*",$a)) {
- echo "ok\n";
- }
-?>
---EXPECT--
-ok
-ok
diff --git a/ext/standard/tests/reg/005.phpt b/ext/standard/tests/reg/005.phpt
deleted file mode 100644
index 78c0a0912a..0000000000
--- a/ext/standard/tests/reg/005.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Test Regular expression register support in ereg
---POST--
---GET--
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg(".*(is).*(is).*",$a,$registers);
- echo "\n";
- echo $registers[0];
- echo "\n";
- echo $registers[1];
- echo "\n";
- echo $registers[2];
- echo "\n";
-?>
---EXPECT--
-32
-This is a nice and simple string
-is
-is
diff --git a/ext/standard/tests/reg/006.phpt b/ext/standard/tests/reg/006.phpt
deleted file mode 100644
index 50b6dbfd3a..0000000000
--- a/ext/standard/tests/reg/006.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Test ereg_replace of start-of-line
---POST--
---GET--
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg_replace("^This","That",$a);
-?>
---EXPECT--
-That is a nice and simple string
diff --git a/ext/standard/tests/reg/007.phpt b/ext/standard/tests/reg/007.phpt
deleted file mode 100644
index b2646f842f..0000000000
--- a/ext/standard/tests/reg/007.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Test empty result buffer in reg_replace
---POST--
---GET--
---FILE--
-<?php
- $a="abcd";
- $b=ereg_replace("abcd","",$a);
- echo "strlen(\$b)=".strlen($b);
-?>
---EXPECT--
-strlen($b)=0
diff --git a/ext/standard/tests/reg/008.phpt b/ext/standard/tests/reg/008.phpt
deleted file mode 100644
index db61d1ca07..0000000000
--- a/ext/standard/tests/reg/008.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Test back-references in regular expressions
---POST--
---GET--
---FILE--
-<?php
- echo ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123");
-?>
---EXPECT--
-123 abc +-|=
diff --git a/ext/standard/tests/reg/009.phpt b/ext/standard/tests/reg/009.phpt
deleted file mode 100644
index 4996ef4c97..0000000000
--- a/ext/standard/tests/reg/009.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Test split()
---POST--
---GET--
---FILE--
-<?php
- $a=split("[[:space:]]","this is a
-test");
- echo count($a) . "\n";
- for ($i = 0; $i < count($a); $i++) {
- echo $a[$i] . "\n";
- }
-?>
---EXPECT--
-4
-this
-is
-a
-test
diff --git a/ext/standard/tests/reg/010.phpt b/ext/standard/tests/reg/010.phpt
deleted file mode 100644
index 30d28fd02f..0000000000
--- a/ext/standard/tests/reg/010.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Long back references
---POST--
---GET--
---FILE--
-<?php $a="abc122222222223";
- echo ereg_replace("1(2*)3","\\1def\\1",$a)?>
---EXPECT--
-abc2222222222def2222222222
diff --git a/ext/standard/tests/reg/011.phpt b/ext/standard/tests/reg/011.phpt
deleted file mode 100644
index 4eda774f58..0000000000
--- a/ext/standard/tests/reg/011.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-\0 back reference
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\0ghi",$a)?>
---EXPECT--
-abcdef123ghi
diff --git a/ext/standard/tests/reg/012.phpt b/ext/standard/tests/reg/012.phpt
deleted file mode 100644
index d5342c7436..0000000000
--- a/ext/standard/tests/reg/012.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-nonexisting back reference
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123",'def\1ghi',$a)?>
---EXPECT--
-abcdef\1ghi
diff --git a/ext/standard/tests/reg/013.phpt b/ext/standard/tests/reg/013.phpt
deleted file mode 100644
index ec3329fa7c..0000000000
--- a/ext/standard/tests/reg/013.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-escapes in replace string
---POST--
---GET--
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\g\\\\hi\\",$a)?>
---EXPECT--
-abcdef\g\\hi\
diff --git a/ext/standard/tests/reg/014.phpt b/ext/standard/tests/reg/014.phpt
deleted file mode 100644
index ec4d19ed0e..0000000000
--- a/ext/standard/tests/reg/014.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-backreferences not replaced recursively
---POST--
---GET--
---FILE--
-<?php $a="a\\2bxc";
- echo ereg_replace("a(.*)b(.*)c","\\1",$a)?>
---EXPECT--
-\2
diff --git a/ext/standard/tests/reg/015.phpt b/ext/standard/tests/reg/015.phpt
deleted file mode 100644
index 961a60fa76..0000000000
--- a/ext/standard/tests/reg/015.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-replace empty matches
---POST--
---GET--
---FILE--
-<?php echo ereg_replace("^","z","abc123")?>
---EXPECT--
-zabc123
diff --git a/ext/standard/tests/reg/016.phpt b/ext/standard/tests/reg/016.phpt
deleted file mode 100644
index a24816f182..0000000000
--- a/ext/standard/tests/reg/016.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-test backslash handling in regular expressions
---POST--
---GET--
---FILE--
-<?php echo ereg_replace('\?',"abc","?123?")?>
---EXPECT--
-abc123abc
diff --git a/ext/standard/tests/serialize/001.phpt b/ext/standard/tests/serialize/001.phpt
deleted file mode 100644
index ab8ac99c53..0000000000
--- a/ext/standard/tests/serialize/001.phpt
+++ /dev/null
@@ -1,115 +0,0 @@
---TEST--
-serialize()/unserialize()/var_dump()
---POST--
---GET--
---FILE--
-<?php
-class t
-{
- function t()
- {
- $this->a = "hallo";
- }
-}
-
-class s
-{
- function s()
- {
- $this->a = "hallo";
- $this->b = "php";
- $this->c = "world";
- }
-
- function __sleep()
- {
- echo "__sleep called\n";
- return array("a","c");
- }
-
- function __wakeup()
- {
- echo "__wakeup called\n";
- }
-}
-
-
-echo serialize(NULL)."\n";
-echo serialize((bool) true)."\n";
-echo serialize((bool) false)."\n";
-echo serialize(1)."\n";
-echo serialize(0)."\n";
-echo serialize(-1)."\n";
-echo serialize(2147483647)."\n";
-echo serialize(-2147483647)."\n";
-echo serialize(1.123456789)."\n";
-echo serialize(1.0)."\n";
-echo serialize(0.0)."\n";
-echo serialize(-1.0)."\n";
-echo serialize(-1.123456789)."\n";
-echo serialize("hallo")."\n";
-echo serialize(array(1,1.1,"hallo",NULL,true,array()))."\n";
-
-$t = new t();
-$data = serialize($t);
-echo "$data\n";
-$t = unserialize($data);
-var_dump($t);
-
-$t = new s();
-$data = serialize($t);
-echo "$data\n";
-$t = unserialize($data);
-var_dump($t);
-
-$a = array("a" => "test");
-$a[ "b" ] = &$a[ "a" ];
-var_dump($a);
-$data = serialize($a);
-echo "$data\n";
-$a = unserialize($data);
-var_dump($a);
-?>
---EXPECT--
-N;
-b:1;
-b:0;
-i:1;
-i:0;
-i:-1;
-i:2147483647;
-i:-2147483647;
-d:1.123456789;
-d:1;
-d:0;
-d:-1;
-d:-1.123456789;
-s:5:"hallo";
-a:6:{i:0;i:1;i:1;d:1.1;i:2;s:5:"hallo";i:3;N;i:4;b:1;i:5;a:0:{}}
-O:1:"t":1:{s:1:"a";s:5:"hallo";}
-object(t)(1) {
- ["a"]=>
- string(5) "hallo"
-}
-__sleep called
-O:1:"s":2:{s:1:"a";s:5:"hallo";s:1:"c";s:5:"world";}
-__wakeup called
-object(s)(2) {
- ["a"]=>
- string(5) "hallo"
- ["c"]=>
- string(5) "world"
-}
-array(2) {
- ["a"]=>
- &string(4) "test"
- ["b"]=>
- &string(4) "test"
-}
-a:2:{s:1:"a";s:4:"test";s:1:"b";R:2;}
-array(2) {
- ["a"]=>
- &string(4) "test"
- ["b"]=>
- &string(4) "test"
-}
diff --git a/ext/standard/tests/serialize/002.phpt b/ext/standard/tests/serialize/002.phpt
deleted file mode 100644
index 7b83c28a63..0000000000
--- a/ext/standard/tests/serialize/002.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-serialize() (Bug #14293)
---POST--
---GET--
---FILE--
-<?php
-class t
-{
- function t()
- {
- $this->a = 'hello';
- }
-
- function __sleep()
- {
- echo "__sleep called\n";
- return array('a','b');
- }
-}
-
-$t = new t();
-$data = serialize($t);
-echo "$data\n";
-$t = unserialize($data);
-var_dump($t);
-
-?>
---EXPECT--
-__sleep called
-O:1:"t":2:{s:1:"a";s:5:"hello";s:1:"b";N;}
-object(t)(2) {
- ["a"]=>
- string(5) "hello"
- ["b"]=>
- NULL
-}
diff --git a/ext/standard/tests/strings/strtr.phpt b/ext/standard/tests/strings/strtr.phpt
deleted file mode 100644
index 2cab3a4317..0000000000
--- a/ext/standard/tests/strings/strtr.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-strtr() function
---POST--
---GET--
---FILE--
-<?php
-$trans = array("hello" => "hi", "hi" => "hello","a" => "A","world" => "planet");
-echo strtr("# hi all, I said hello world! #", $trans) . "\n";
-?>
---EXPECT--
-# hello All, I sAid hi planet! #
diff --git a/ext/standard/tests/strings/trim.phpt b/ext/standard/tests/strings/trim.phpt
deleted file mode 100644
index 9e9143ca13..0000000000
--- a/ext/standard/tests/strings/trim.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-trim() function
---POST--
---GET--
---FILE--
-<?php
-
-$tests = <<<TESTS
-'ABC' === trim('ABC')
-'ABC' === ltrim('ABC')
-'ABC' === rtrim('ABC')
-'ABC' === trim(" \\0\\t\\nABC \\0\\t\\n")
-"ABC \\0\\t\\n" === ltrim(" \\0\\t\\nABC \\0\\t\\n")
-" \\0\\t\\nABC" === rtrim(" \\0\\t\\nABC \\0\\t\\n")
-" \\0\\t\\nABC \\0\\t\\n" === trim(" \\0\\t\\nABC \\0\\t\\n",'')
-" \\0\\t\\nABC \\0\\t\\n" === ltrim(" \\0\\t\\nABC \\0\\t\\n",'')
-" \\0\\t\\nABC \\0\\t\\n" === rtrim(" \\0\\t\\nABC \\0\\t\\n",'')
-"ABC\\x50\\xC1" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC0")
-"ABC\\x50" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC1")
-"ABC" === trim("ABC\\x50\\xC1\\x60\\x90","\\x50..\\xC1")
-"ABC\\x50\\xC1" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC0")
-"ABC\\x50" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC1")
-"ABC" === trim("ABC\\x50\\xC1\\x60\\x90","\\x50..\\xC1")
-TESTS;
-
-include('tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/standard/tests/strings/wordwrap.phpt b/ext/standard/tests/strings/wordwrap.phpt
deleted file mode 100644
index 3fc8f1d880..0000000000
--- a/ext/standard/tests/strings/wordwrap.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-wordwrap() function
---POST--
---GET--
---FILE--
-<?php
-
-$tests = <<<TESTS
-"12345 12345 12345 12345" === wordwrap("12345 12345 12345 12345")
-"12345 12345\\n1234567890\\n1234567890" === wordwrap("12345 12345 1234567890 1234567890",12)
-"12345\\n12345\\n12345\\n12345" === wordwrap("12345 12345 12345 12345",0)
-"12345ab12345ab12345ab12345" === wordwrap("12345 12345 12345 12345",0,"ab")
-"12345 12345ab1234567890ab1234567890" === wordwrap("12345 12345 1234567890 1234567890",12,"ab")
-"123ab123ab123" === wordwrap("123ab123ab123", 3, "ab")
-"123ab123ab123" === wordwrap("123ab123ab123", 5, "ab")
-"123ab 123ab123" === wordwrap("123 123ab123", 3, "ab")
-"123ab123ab123" === wordwrap("123 123ab123", 5, "ab")
-"123 123ab123" === wordwrap("123 123 123", 10, "ab")
-
-"123ab123ab123" === wordwrap("123ab123ab123", 3, "ab", 1)
-"123ab123ab123" === wordwrap("123ab123ab123", 5, "ab", 1)
-"123ab 12ab3ab123" === wordwrap("123 123ab123", 3, "ab", 1)
-"123 ab123ab123" === wordwrap("123 123ab123", 5, "ab", 1)
-"123 123ab 123" === wordwrap("123 123 123", 8, "ab", 1)
-"123 ab12345 ab123" === wordwrap("123 12345 123", 8, "ab", 1)
-"1ab2ab3ab4" === wordwrap("1234", 1, "ab", 1)
-
-"12345|12345|67890" === wordwrap("12345 1234567890", 5, "|", 1)
-
-"123|==1234567890|==123" === wordwrap("123 1234567890 123", 10, "|==", 1)
-
-TESTS;
-
-include('tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/standard/tests/time/001.phpt b/ext/standard/tests/time/001.phpt
deleted file mode 100644
index 0f08cb21bb..0000000000
--- a/ext/standard/tests/time/001.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-microtime() function
---POST--
---GET--
---FILE--
-<?php
-$passed = 0;
-$failed = 0;
-$last = 0;
-
-set_time_limit(0);
-
-for ($i=1;$i<=100000;$i++) {
- list($micro,$time)=explode(" ",microtime());
- $add=$micro+$time;
- $add<$last ? $failed++: $passed++;
- $last=$add;
-}
-echo "Passed: ".$passed."\n";
-echo "Failed: ".$failed."\n";
-?>
---EXPECT--
-Passed: 100000
-Failed: 0 \ No newline at end of file
diff --git a/ext/standard/tests/time/002.phpt b/ext/standard/tests/time/002.phpt
deleted file mode 100644
index eba00b074b..0000000000
--- a/ext/standard/tests/time/002.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-strtotime() function
---POST--
---GET--
---FILE--
-<?php
- $dates = array (
- "1999-10-13",
- "Oct 13 1999",
- "2000-01-19",
- "Jan 19 2000",
- "2001-12-21",
- "Dec 21 2001",
- "2001-12-21 12:16",
- "Dec 21 2001 12:16",
- "Dec 21 12:16",
- "2001-10-22 21:19:58",
- "2001-10-22 21:19:58-02",
- "2001-10-22 21:19:58-0213",
- "2001-10-22 21:19:58+02",
- "2001-10-22 21:19:58+0213"
- );
-
- putenv ("TZ=GMT");
- foreach ($dates as $date) {
- echo date ("Y-m-d H:i:s\n", strtotime ($date));
- }
-
- putenv ("TZ=Europe/Amsterdam");
- foreach ($dates as $date) {
- echo date ("Y-m-d H:i:s\n", strtotime ($date));
- }
-?>
---EXPECT--
-1999-10-13 00:00:00
-1999-10-13 00:00:00
-2000-01-19 00:00:00
-2000-01-19 00:00:00
-2001-12-21 00:00:00
-2001-12-21 00:00:00
-2001-12-21 12:16:00
-2001-12-21 12:16:00
-1969-12-31 23:59:59
-2001-10-22 21:19:58
-2001-10-22 23:19:58
-2001-10-22 23:32:58
-2001-10-22 19:19:58
-2001-10-22 19:06:58
-1999-10-13 00:00:00
-1999-10-13 00:00:00
-2000-01-19 00:00:00
-2000-01-19 00:00:00
-2001-12-21 00:00:00
-2001-12-21 00:00:00
-2001-12-21 12:16:00
-2001-12-21 12:16:00
-1970-01-01 00:59:59
-2001-10-22 21:19:58
-2001-10-23 01:19:58
-2001-10-23 01:32:58
-2001-10-22 21:19:58
-2001-10-22 21:06:58
diff --git a/ext/standard/tests/versioning/version_compare.phpt b/ext/standard/tests/versioning/version_compare.phpt
deleted file mode 100644
index 6ef49ba777..0000000000
--- a/ext/standard/tests/versioning/version_compare.phpt
+++ /dev/null
@@ -1,600 +0,0 @@
---TEST--
-version_compare test
---FILE--
-<?php
-
-print "TESTING COMPARE\n";
-$special_forms = array("-dev", "a1", "b1", "RC1", "", "pl1");
-$operators = array(
- "lt", "<",
- "le", "<=",
- "gt", ">",
- "ge", ">=",
- "eq", "=", "==",
- "ne", "<>", "!="
-);
-test("1", "2");
-test("10", "2");
-test("1.0", "1.1");
-test("1.2", "1.0.1");
-foreach ($special_forms as $f1) {
- foreach ($special_forms as $f2) {
- test("1.0$f1", "1.0$f2");
- }
-}
-print "TESTING OPERATORS\n";
-foreach ($special_forms as $f1) {
- foreach ($special_forms as $f2) {
- foreach ($operators as $op) {
- $v1 = "1.0$f1";
- $v2 = "1.0$f2";
- $test = version_compare($v1, $v2, $op) ? "true" : "false";
- printf("%7s %2s %-7s : %s\n", $v1, $op, $v2, $test);
- }
- }
-}
-
-function test($v1, $v2) {
- $compare = version_compare($v1, $v2);
- switch ($compare) {
- case -1:
- print "$v1 < $v2\n";
- break;
- case 1:
- print "$v1 > $v2\n";
- break;
- case 0:
- default:
- print "$v1 = $v2\n";
- break;
- }
-}
-
-?>
---EXPECT--
-TESTING COMPARE
-1 < 2
-10 > 2
-1.0 < 1.1
-1.2 > 1.0.1
-1.0-dev = 1.0-dev
-1.0-dev < 1.0a1
-1.0-dev < 1.0b1
-1.0-dev < 1.0RC1
-1.0-dev < 1.0
-1.0-dev < 1.0pl1
-1.0a1 > 1.0-dev
-1.0a1 = 1.0a1
-1.0a1 < 1.0b1
-1.0a1 < 1.0RC1
-1.0a1 < 1.0
-1.0a1 < 1.0pl1
-1.0b1 > 1.0-dev
-1.0b1 > 1.0a1
-1.0b1 = 1.0b1
-1.0b1 < 1.0RC1
-1.0b1 < 1.0
-1.0b1 < 1.0pl1
-1.0RC1 > 1.0-dev
-1.0RC1 > 1.0a1
-1.0RC1 > 1.0b1
-1.0RC1 = 1.0RC1
-1.0RC1 < 1.0
-1.0RC1 < 1.0pl1
-1.0 > 1.0-dev
-1.0 > 1.0a1
-1.0 > 1.0b1
-1.0 > 1.0RC1
-1.0 = 1.0
-1.0 < 1.0pl1
-1.0pl1 > 1.0-dev
-1.0pl1 > 1.0a1
-1.0pl1 > 1.0b1
-1.0pl1 > 1.0RC1
-1.0pl1 > 1.0
-1.0pl1 = 1.0pl1
-TESTING OPERATORS
-1.0-dev lt 1.0-dev : false
-1.0-dev < 1.0-dev : false
-1.0-dev le 1.0-dev : true
-1.0-dev <= 1.0-dev : true
-1.0-dev gt 1.0-dev : false
-1.0-dev > 1.0-dev : false
-1.0-dev ge 1.0-dev : true
-1.0-dev >= 1.0-dev : true
-1.0-dev eq 1.0-dev : true
-1.0-dev = 1.0-dev : true
-1.0-dev == 1.0-dev : true
-1.0-dev ne 1.0-dev : false
-1.0-dev <> 1.0-dev : false
-1.0-dev != 1.0-dev : false
-1.0-dev lt 1.0a1 : true
-1.0-dev < 1.0a1 : true
-1.0-dev le 1.0a1 : true
-1.0-dev <= 1.0a1 : true
-1.0-dev gt 1.0a1 : false
-1.0-dev > 1.0a1 : false
-1.0-dev ge 1.0a1 : false
-1.0-dev >= 1.0a1 : false
-1.0-dev eq 1.0a1 : false
-1.0-dev = 1.0a1 : false
-1.0-dev == 1.0a1 : false
-1.0-dev ne 1.0a1 : true
-1.0-dev <> 1.0a1 : true
-1.0-dev != 1.0a1 : true
-1.0-dev lt 1.0b1 : true
-1.0-dev < 1.0b1 : true
-1.0-dev le 1.0b1 : true
-1.0-dev <= 1.0b1 : true
-1.0-dev gt 1.0b1 : false
-1.0-dev > 1.0b1 : false
-1.0-dev ge 1.0b1 : false
-1.0-dev >= 1.0b1 : false
-1.0-dev eq 1.0b1 : false
-1.0-dev = 1.0b1 : false
-1.0-dev == 1.0b1 : false
-1.0-dev ne 1.0b1 : true
-1.0-dev <> 1.0b1 : true
-1.0-dev != 1.0b1 : true
-1.0-dev lt 1.0RC1 : true
-1.0-dev < 1.0RC1 : true
-1.0-dev le 1.0RC1 : true
-1.0-dev <= 1.0RC1 : true
-1.0-dev gt 1.0RC1 : false
-1.0-dev > 1.0RC1 : false
-1.0-dev ge 1.0RC1 : false
-1.0-dev >= 1.0RC1 : false
-1.0-dev eq 1.0RC1 : false
-1.0-dev = 1.0RC1 : false
-1.0-dev == 1.0RC1 : false
-1.0-dev ne 1.0RC1 : true
-1.0-dev <> 1.0RC1 : true
-1.0-dev != 1.0RC1 : true
-1.0-dev lt 1.0 : true
-1.0-dev < 1.0 : true
-1.0-dev le 1.0 : true
-1.0-dev <= 1.0 : true
-1.0-dev gt 1.0 : false
-1.0-dev > 1.0 : false
-1.0-dev ge 1.0 : false
-1.0-dev >= 1.0 : false
-1.0-dev eq 1.0 : false
-1.0-dev = 1.0 : false
-1.0-dev == 1.0 : false
-1.0-dev ne 1.0 : true
-1.0-dev <> 1.0 : true
-1.0-dev != 1.0 : true
-1.0-dev lt 1.0pl1 : true
-1.0-dev < 1.0pl1 : true
-1.0-dev le 1.0pl1 : true
-1.0-dev <= 1.0pl1 : true
-1.0-dev gt 1.0pl1 : false
-1.0-dev > 1.0pl1 : false
-1.0-dev ge 1.0pl1 : false
-1.0-dev >= 1.0pl1 : false
-1.0-dev eq 1.0pl1 : false
-1.0-dev = 1.0pl1 : false
-1.0-dev == 1.0pl1 : false
-1.0-dev ne 1.0pl1 : true
-1.0-dev <> 1.0pl1 : true
-1.0-dev != 1.0pl1 : true
- 1.0a1 lt 1.0-dev : false
- 1.0a1 < 1.0-dev : false
- 1.0a1 le 1.0-dev : false
- 1.0a1 <= 1.0-dev : false
- 1.0a1 gt 1.0-dev : true
- 1.0a1 > 1.0-dev : true
- 1.0a1 ge 1.0-dev : true
- 1.0a1 >= 1.0-dev : true
- 1.0a1 eq 1.0-dev : false
- 1.0a1 = 1.0-dev : false
- 1.0a1 == 1.0-dev : false
- 1.0a1 ne 1.0-dev : true
- 1.0a1 <> 1.0-dev : true
- 1.0a1 != 1.0-dev : true
- 1.0a1 lt 1.0a1 : false
- 1.0a1 < 1.0a1 : false
- 1.0a1 le 1.0a1 : true
- 1.0a1 <= 1.0a1 : true
- 1.0a1 gt 1.0a1 : false
- 1.0a1 > 1.0a1 : false
- 1.0a1 ge 1.0a1 : true
- 1.0a1 >= 1.0a1 : true
- 1.0a1 eq 1.0a1 : true
- 1.0a1 = 1.0a1 : true
- 1.0a1 == 1.0a1 : true
- 1.0a1 ne 1.0a1 : false
- 1.0a1 <> 1.0a1 : false
- 1.0a1 != 1.0a1 : false
- 1.0a1 lt 1.0b1 : true
- 1.0a1 < 1.0b1 : true
- 1.0a1 le 1.0b1 : true
- 1.0a1 <= 1.0b1 : true
- 1.0a1 gt 1.0b1 : false
- 1.0a1 > 1.0b1 : false
- 1.0a1 ge 1.0b1 : false
- 1.0a1 >= 1.0b1 : false
- 1.0a1 eq 1.0b1 : false
- 1.0a1 = 1.0b1 : false
- 1.0a1 == 1.0b1 : false
- 1.0a1 ne 1.0b1 : true
- 1.0a1 <> 1.0b1 : true
- 1.0a1 != 1.0b1 : true
- 1.0a1 lt 1.0RC1 : true
- 1.0a1 < 1.0RC1 : true
- 1.0a1 le 1.0RC1 : true
- 1.0a1 <= 1.0RC1 : true
- 1.0a1 gt 1.0RC1 : false
- 1.0a1 > 1.0RC1 : false
- 1.0a1 ge 1.0RC1 : false
- 1.0a1 >= 1.0RC1 : false
- 1.0a1 eq 1.0RC1 : false
- 1.0a1 = 1.0RC1 : false
- 1.0a1 == 1.0RC1 : false
- 1.0a1 ne 1.0RC1 : true
- 1.0a1 <> 1.0RC1 : true
- 1.0a1 != 1.0RC1 : true
- 1.0a1 lt 1.0 : true
- 1.0a1 < 1.0 : true
- 1.0a1 le 1.0 : true
- 1.0a1 <= 1.0 : true
- 1.0a1 gt 1.0 : false
- 1.0a1 > 1.0 : false
- 1.0a1 ge 1.0 : false
- 1.0a1 >= 1.0 : false
- 1.0a1 eq 1.0 : false
- 1.0a1 = 1.0 : false
- 1.0a1 == 1.0 : false
- 1.0a1 ne 1.0 : true
- 1.0a1 <> 1.0 : true
- 1.0a1 != 1.0 : true
- 1.0a1 lt 1.0pl1 : true
- 1.0a1 < 1.0pl1 : true
- 1.0a1 le 1.0pl1 : true
- 1.0a1 <= 1.0pl1 : true
- 1.0a1 gt 1.0pl1 : false
- 1.0a1 > 1.0pl1 : false
- 1.0a1 ge 1.0pl1 : false
- 1.0a1 >= 1.0pl1 : false
- 1.0a1 eq 1.0pl1 : false
- 1.0a1 = 1.0pl1 : false
- 1.0a1 == 1.0pl1 : false
- 1.0a1 ne 1.0pl1 : true
- 1.0a1 <> 1.0pl1 : true
- 1.0a1 != 1.0pl1 : true
- 1.0b1 lt 1.0-dev : false
- 1.0b1 < 1.0-dev : false
- 1.0b1 le 1.0-dev : false
- 1.0b1 <= 1.0-dev : false
- 1.0b1 gt 1.0-dev : true
- 1.0b1 > 1.0-dev : true
- 1.0b1 ge 1.0-dev : true
- 1.0b1 >= 1.0-dev : true
- 1.0b1 eq 1.0-dev : false
- 1.0b1 = 1.0-dev : false
- 1.0b1 == 1.0-dev : false
- 1.0b1 ne 1.0-dev : true
- 1.0b1 <> 1.0-dev : true
- 1.0b1 != 1.0-dev : true
- 1.0b1 lt 1.0a1 : false
- 1.0b1 < 1.0a1 : false
- 1.0b1 le 1.0a1 : false
- 1.0b1 <= 1.0a1 : false
- 1.0b1 gt 1.0a1 : true
- 1.0b1 > 1.0a1 : true
- 1.0b1 ge 1.0a1 : true
- 1.0b1 >= 1.0a1 : true
- 1.0b1 eq 1.0a1 : false
- 1.0b1 = 1.0a1 : false
- 1.0b1 == 1.0a1 : false
- 1.0b1 ne 1.0a1 : true
- 1.0b1 <> 1.0a1 : true
- 1.0b1 != 1.0a1 : true
- 1.0b1 lt 1.0b1 : false
- 1.0b1 < 1.0b1 : false
- 1.0b1 le 1.0b1 : true
- 1.0b1 <= 1.0b1 : true
- 1.0b1 gt 1.0b1 : false
- 1.0b1 > 1.0b1 : false
- 1.0b1 ge 1.0b1 : true
- 1.0b1 >= 1.0b1 : true
- 1.0b1 eq 1.0b1 : true
- 1.0b1 = 1.0b1 : true
- 1.0b1 == 1.0b1 : true
- 1.0b1 ne 1.0b1 : false
- 1.0b1 <> 1.0b1 : false
- 1.0b1 != 1.0b1 : false
- 1.0b1 lt 1.0RC1 : true
- 1.0b1 < 1.0RC1 : true
- 1.0b1 le 1.0RC1 : true
- 1.0b1 <= 1.0RC1 : true
- 1.0b1 gt 1.0RC1 : false
- 1.0b1 > 1.0RC1 : false
- 1.0b1 ge 1.0RC1 : false
- 1.0b1 >= 1.0RC1 : false
- 1.0b1 eq 1.0RC1 : false
- 1.0b1 = 1.0RC1 : false
- 1.0b1 == 1.0RC1 : false
- 1.0b1 ne 1.0RC1 : true
- 1.0b1 <> 1.0RC1 : true
- 1.0b1 != 1.0RC1 : true
- 1.0b1 lt 1.0 : true
- 1.0b1 < 1.0 : true
- 1.0b1 le 1.0 : true
- 1.0b1 <= 1.0 : true
- 1.0b1 gt 1.0 : false
- 1.0b1 > 1.0 : false
- 1.0b1 ge 1.0 : false
- 1.0b1 >= 1.0 : false
- 1.0b1 eq 1.0 : false
- 1.0b1 = 1.0 : false
- 1.0b1 == 1.0 : false
- 1.0b1 ne 1.0 : true
- 1.0b1 <> 1.0 : true
- 1.0b1 != 1.0 : true
- 1.0b1 lt 1.0pl1 : true
- 1.0b1 < 1.0pl1 : true
- 1.0b1 le 1.0pl1 : true
- 1.0b1 <= 1.0pl1 : true
- 1.0b1 gt 1.0pl1 : false
- 1.0b1 > 1.0pl1 : false
- 1.0b1 ge 1.0pl1 : false
- 1.0b1 >= 1.0pl1 : false
- 1.0b1 eq 1.0pl1 : false
- 1.0b1 = 1.0pl1 : false
- 1.0b1 == 1.0pl1 : false
- 1.0b1 ne 1.0pl1 : true
- 1.0b1 <> 1.0pl1 : true
- 1.0b1 != 1.0pl1 : true
- 1.0RC1 lt 1.0-dev : false
- 1.0RC1 < 1.0-dev : false
- 1.0RC1 le 1.0-dev : false
- 1.0RC1 <= 1.0-dev : false
- 1.0RC1 gt 1.0-dev : true
- 1.0RC1 > 1.0-dev : true
- 1.0RC1 ge 1.0-dev : true
- 1.0RC1 >= 1.0-dev : true
- 1.0RC1 eq 1.0-dev : false
- 1.0RC1 = 1.0-dev : false
- 1.0RC1 == 1.0-dev : false
- 1.0RC1 ne 1.0-dev : true
- 1.0RC1 <> 1.0-dev : true
- 1.0RC1 != 1.0-dev : true
- 1.0RC1 lt 1.0a1 : false
- 1.0RC1 < 1.0a1 : false
- 1.0RC1 le 1.0a1 : false
- 1.0RC1 <= 1.0a1 : false
- 1.0RC1 gt 1.0a1 : true
- 1.0RC1 > 1.0a1 : true
- 1.0RC1 ge 1.0a1 : true
- 1.0RC1 >= 1.0a1 : true
- 1.0RC1 eq 1.0a1 : false
- 1.0RC1 = 1.0a1 : false
- 1.0RC1 == 1.0a1 : false
- 1.0RC1 ne 1.0a1 : true
- 1.0RC1 <> 1.0a1 : true
- 1.0RC1 != 1.0a1 : true
- 1.0RC1 lt 1.0b1 : false
- 1.0RC1 < 1.0b1 : false
- 1.0RC1 le 1.0b1 : false
- 1.0RC1 <= 1.0b1 : false
- 1.0RC1 gt 1.0b1 : true
- 1.0RC1 > 1.0b1 : true
- 1.0RC1 ge 1.0b1 : true
- 1.0RC1 >= 1.0b1 : true
- 1.0RC1 eq 1.0b1 : false
- 1.0RC1 = 1.0b1 : false
- 1.0RC1 == 1.0b1 : false
- 1.0RC1 ne 1.0b1 : true
- 1.0RC1 <> 1.0b1 : true
- 1.0RC1 != 1.0b1 : true
- 1.0RC1 lt 1.0RC1 : false
- 1.0RC1 < 1.0RC1 : false
- 1.0RC1 le 1.0RC1 : true
- 1.0RC1 <= 1.0RC1 : true
- 1.0RC1 gt 1.0RC1 : false
- 1.0RC1 > 1.0RC1 : false
- 1.0RC1 ge 1.0RC1 : true
- 1.0RC1 >= 1.0RC1 : true
- 1.0RC1 eq 1.0RC1 : true
- 1.0RC1 = 1.0RC1 : true
- 1.0RC1 == 1.0RC1 : true
- 1.0RC1 ne 1.0RC1 : false
- 1.0RC1 <> 1.0RC1 : false
- 1.0RC1 != 1.0RC1 : false
- 1.0RC1 lt 1.0 : true
- 1.0RC1 < 1.0 : true
- 1.0RC1 le 1.0 : true
- 1.0RC1 <= 1.0 : true
- 1.0RC1 gt 1.0 : false
- 1.0RC1 > 1.0 : false
- 1.0RC1 ge 1.0 : false
- 1.0RC1 >= 1.0 : false
- 1.0RC1 eq 1.0 : false
- 1.0RC1 = 1.0 : false
- 1.0RC1 == 1.0 : false
- 1.0RC1 ne 1.0 : true
- 1.0RC1 <> 1.0 : true
- 1.0RC1 != 1.0 : true
- 1.0RC1 lt 1.0pl1 : true
- 1.0RC1 < 1.0pl1 : true
- 1.0RC1 le 1.0pl1 : true
- 1.0RC1 <= 1.0pl1 : true
- 1.0RC1 gt 1.0pl1 : false
- 1.0RC1 > 1.0pl1 : false
- 1.0RC1 ge 1.0pl1 : false
- 1.0RC1 >= 1.0pl1 : false
- 1.0RC1 eq 1.0pl1 : false
- 1.0RC1 = 1.0pl1 : false
- 1.0RC1 == 1.0pl1 : false
- 1.0RC1 ne 1.0pl1 : true
- 1.0RC1 <> 1.0pl1 : true
- 1.0RC1 != 1.0pl1 : true
- 1.0 lt 1.0-dev : false
- 1.0 < 1.0-dev : false
- 1.0 le 1.0-dev : false
- 1.0 <= 1.0-dev : false
- 1.0 gt 1.0-dev : true
- 1.0 > 1.0-dev : true
- 1.0 ge 1.0-dev : true
- 1.0 >= 1.0-dev : true
- 1.0 eq 1.0-dev : false
- 1.0 = 1.0-dev : false
- 1.0 == 1.0-dev : false
- 1.0 ne 1.0-dev : true
- 1.0 <> 1.0-dev : true
- 1.0 != 1.0-dev : true
- 1.0 lt 1.0a1 : false
- 1.0 < 1.0a1 : false
- 1.0 le 1.0a1 : false
- 1.0 <= 1.0a1 : false
- 1.0 gt 1.0a1 : true
- 1.0 > 1.0a1 : true
- 1.0 ge 1.0a1 : true
- 1.0 >= 1.0a1 : true
- 1.0 eq 1.0a1 : false
- 1.0 = 1.0a1 : false
- 1.0 == 1.0a1 : false
- 1.0 ne 1.0a1 : true
- 1.0 <> 1.0a1 : true
- 1.0 != 1.0a1 : true
- 1.0 lt 1.0b1 : false
- 1.0 < 1.0b1 : false
- 1.0 le 1.0b1 : false
- 1.0 <= 1.0b1 : false
- 1.0 gt 1.0b1 : true
- 1.0 > 1.0b1 : true
- 1.0 ge 1.0b1 : true
- 1.0 >= 1.0b1 : true
- 1.0 eq 1.0b1 : false
- 1.0 = 1.0b1 : false
- 1.0 == 1.0b1 : false
- 1.0 ne 1.0b1 : true
- 1.0 <> 1.0b1 : true
- 1.0 != 1.0b1 : true
- 1.0 lt 1.0RC1 : false
- 1.0 < 1.0RC1 : false
- 1.0 le 1.0RC1 : false
- 1.0 <= 1.0RC1 : false
- 1.0 gt 1.0RC1 : true
- 1.0 > 1.0RC1 : true
- 1.0 ge 1.0RC1 : true
- 1.0 >= 1.0RC1 : true
- 1.0 eq 1.0RC1 : false
- 1.0 = 1.0RC1 : false
- 1.0 == 1.0RC1 : false
- 1.0 ne 1.0RC1 : true
- 1.0 <> 1.0RC1 : true
- 1.0 != 1.0RC1 : true
- 1.0 lt 1.0 : false
- 1.0 < 1.0 : false
- 1.0 le 1.0 : true
- 1.0 <= 1.0 : true
- 1.0 gt 1.0 : false
- 1.0 > 1.0 : false
- 1.0 ge 1.0 : true
- 1.0 >= 1.0 : true
- 1.0 eq 1.0 : true
- 1.0 = 1.0 : true
- 1.0 == 1.0 : true
- 1.0 ne 1.0 : false
- 1.0 <> 1.0 : false
- 1.0 != 1.0 : false
- 1.0 lt 1.0pl1 : true
- 1.0 < 1.0pl1 : true
- 1.0 le 1.0pl1 : true
- 1.0 <= 1.0pl1 : true
- 1.0 gt 1.0pl1 : false
- 1.0 > 1.0pl1 : false
- 1.0 ge 1.0pl1 : false
- 1.0 >= 1.0pl1 : false
- 1.0 eq 1.0pl1 : false
- 1.0 = 1.0pl1 : false
- 1.0 == 1.0pl1 : false
- 1.0 ne 1.0pl1 : true
- 1.0 <> 1.0pl1 : true
- 1.0 != 1.0pl1 : true
- 1.0pl1 lt 1.0-dev : false
- 1.0pl1 < 1.0-dev : false
- 1.0pl1 le 1.0-dev : false
- 1.0pl1 <= 1.0-dev : false
- 1.0pl1 gt 1.0-dev : true
- 1.0pl1 > 1.0-dev : true
- 1.0pl1 ge 1.0-dev : true
- 1.0pl1 >= 1.0-dev : true
- 1.0pl1 eq 1.0-dev : false
- 1.0pl1 = 1.0-dev : false
- 1.0pl1 == 1.0-dev : false
- 1.0pl1 ne 1.0-dev : true
- 1.0pl1 <> 1.0-dev : true
- 1.0pl1 != 1.0-dev : true
- 1.0pl1 lt 1.0a1 : false
- 1.0pl1 < 1.0a1 : false
- 1.0pl1 le 1.0a1 : false
- 1.0pl1 <= 1.0a1 : false
- 1.0pl1 gt 1.0a1 : true
- 1.0pl1 > 1.0a1 : true
- 1.0pl1 ge 1.0a1 : true
- 1.0pl1 >= 1.0a1 : true
- 1.0pl1 eq 1.0a1 : false
- 1.0pl1 = 1.0a1 : false
- 1.0pl1 == 1.0a1 : false
- 1.0pl1 ne 1.0a1 : true
- 1.0pl1 <> 1.0a1 : true
- 1.0pl1 != 1.0a1 : true
- 1.0pl1 lt 1.0b1 : false
- 1.0pl1 < 1.0b1 : false
- 1.0pl1 le 1.0b1 : false
- 1.0pl1 <= 1.0b1 : false
- 1.0pl1 gt 1.0b1 : true
- 1.0pl1 > 1.0b1 : true
- 1.0pl1 ge 1.0b1 : true
- 1.0pl1 >= 1.0b1 : true
- 1.0pl1 eq 1.0b1 : false
- 1.0pl1 = 1.0b1 : false
- 1.0pl1 == 1.0b1 : false
- 1.0pl1 ne 1.0b1 : true
- 1.0pl1 <> 1.0b1 : true
- 1.0pl1 != 1.0b1 : true
- 1.0pl1 lt 1.0RC1 : false
- 1.0pl1 < 1.0RC1 : false
- 1.0pl1 le 1.0RC1 : false
- 1.0pl1 <= 1.0RC1 : false
- 1.0pl1 gt 1.0RC1 : true
- 1.0pl1 > 1.0RC1 : true
- 1.0pl1 ge 1.0RC1 : true
- 1.0pl1 >= 1.0RC1 : true
- 1.0pl1 eq 1.0RC1 : false
- 1.0pl1 = 1.0RC1 : false
- 1.0pl1 == 1.0RC1 : false
- 1.0pl1 ne 1.0RC1 : true
- 1.0pl1 <> 1.0RC1 : true
- 1.0pl1 != 1.0RC1 : true
- 1.0pl1 lt 1.0 : false
- 1.0pl1 < 1.0 : false
- 1.0pl1 le 1.0 : false
- 1.0pl1 <= 1.0 : false
- 1.0pl1 gt 1.0 : true
- 1.0pl1 > 1.0 : true
- 1.0pl1 ge 1.0 : true
- 1.0pl1 >= 1.0 : true
- 1.0pl1 eq 1.0 : false
- 1.0pl1 = 1.0 : false
- 1.0pl1 == 1.0 : false
- 1.0pl1 ne 1.0 : true
- 1.0pl1 <> 1.0 : true
- 1.0pl1 != 1.0 : true
- 1.0pl1 lt 1.0pl1 : false
- 1.0pl1 < 1.0pl1 : false
- 1.0pl1 le 1.0pl1 : true
- 1.0pl1 <= 1.0pl1 : true
- 1.0pl1 gt 1.0pl1 : false
- 1.0pl1 > 1.0pl1 : false
- 1.0pl1 ge 1.0pl1 : true
- 1.0pl1 >= 1.0pl1 : true
- 1.0pl1 eq 1.0pl1 : true
- 1.0pl1 = 1.0pl1 : true
- 1.0pl1 == 1.0pl1 : true
- 1.0pl1 ne 1.0pl1 : false
- 1.0pl1 <> 1.0pl1 : false
- 1.0pl1 != 1.0pl1 : false
diff --git a/ext/standard/type.c b/ext/standard/type.c
deleted file mode 100644
index cf6ba48867..0000000000
--- a/ext/standard/type.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-/* {{{ proto string gettype(mixed var)
- Returns the type of the variable */
-PHP_FUNCTION(gettype)
-{
- pval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_NULL:
- RETVAL_STRING("NULL", 1);
- break;
-
- case IS_BOOL:
- RETVAL_STRING("boolean", 1);
- break;
-
- case IS_LONG:
- RETVAL_STRING("integer", 1);
- break;
-
- case IS_RESOURCE:
- RETVAL_STRING("resource", 1);
- break;
-
- case IS_DOUBLE:
- RETVAL_STRING("double", 1);
- break;
-
- case IS_STRING:
- RETVAL_STRING("string", 1);
- break;
-
- case IS_ARRAY:
- RETVAL_STRING("array", 1);
- break;
-
- case IS_OBJECT:
- RETVAL_STRING("object", 1);
- /*
- {
- char *result;
- int res_len;
-
- res_len = sizeof("object of type ")-1 + Z_OBJCE_P(arg)->name_length;
- result = (char *) emalloc(res_len+1);
- sprintf(result, "object of type %s", Z_OBJCE_P(arg)->name);
- RETVAL_STRINGL(result, res_len, 0);
- }
- */
- break;
-
- default:
- RETVAL_STRING("unknown type", 1);
- }
-}
-/* }}} */
-
-/* {{{ proto bool settype(mixed var, string type)
- Set the type of the variable */
-PHP_FUNCTION(settype)
-{
- pval **var, **type;
- char *new_type;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &var, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(type);
- new_type = Z_STRVAL_PP(type);
-
- if (!strcasecmp(new_type, "integer")) {
- convert_to_long(*var);
- } else if (!strcasecmp(new_type, "int")) {
- convert_to_long(*var);
- } else if (!strcasecmp(new_type, "float")) {
- convert_to_double(*var);
- } else if (!strcasecmp(new_type, "double")) { /* deprecated */
- convert_to_double(*var);
- } else if (!strcasecmp(new_type, "string")) {
- convert_to_string(*var);
- } else if (!strcasecmp(new_type, "array")) {
- convert_to_array(*var);
- } else if (!strcasecmp(new_type, "object")) {
- convert_to_object(*var);
- } else if (!strcasecmp(new_type, "bool")) {
- convert_to_boolean(*var);
- } else if (!strcasecmp(new_type, "boolean")) {
- convert_to_boolean(*var);
- } else if (!strcasecmp(new_type, "null")) {
- convert_to_null(*var);
- } else if (!strcasecmp(new_type, "resource")) {
- php_error(E_WARNING, "settype: cannot convert to resource type");
- RETURN_FALSE;
- } else {
- php_error(E_WARNING, "settype: invalid type");
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int intval(mixed var [, int base])
- Get the integer value of a variable using the optional base for the conversion */
-PHP_FUNCTION(intval)
-{
- pval **num, **arg_base;
- int base;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- base = 10;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_base);
- base = Z_LVAL_PP(arg_base);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_long_base(return_value, base);
-}
-/* }}} */
-
-/* {{{ proto float floatval(mixed var)
- Get the float value of a variable */
-PHP_FUNCTION(floatval)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_double(return_value);
-}
-/* }}} */
-
-/* {{{ proto string strval(mixed var)
- Get the string value of a variable */
-PHP_FUNCTION(strval)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_string(return_value);
-}
-/* }}} */
-
-static void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- pval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(arg) == type) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-
-/* {{{ proto bool is_null(mixed var)
- Returns true if variable is null */
-PHP_FUNCTION(is_null)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
-}
-/* }}} */
-
-/* {{{ proto bool is_resource(mixed var)
- Returns true if variable is a resource */
-PHP_FUNCTION(is_resource)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_RESOURCE);
-}
-/* }}} */
-
-/* {{{ proto bool is_bool(mixed var)
- Returns true if variable is a boolean */
-PHP_FUNCTION(is_bool)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_BOOL);
-}
-/* }}} */
-
-/* {{{ proto bool is_long(mixed var)
- Returns true if variable is a long (integer) */
-PHP_FUNCTION(is_long)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_LONG);
-}
-/* }}} */
-
-/* {{{ proto bool is_float(mixed var)
- Returns true if variable is float point*/
-PHP_FUNCTION(is_float)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_DOUBLE);
-}
-/* }}} */
-
-/* {{{ proto bool is_string(mixed var)
- Returns true if variable is a string */
-PHP_FUNCTION(is_string)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_STRING);
-}
-/* }}} */
-
-/* {{{ proto bool is_array(mixed var)
- Returns true if variable is an array */
-PHP_FUNCTION(is_array)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_ARRAY);
-}
-/* }}} */
-
-/* {{{ proto bool is_object(mixed var)
- Returns true if variable is an object */
-PHP_FUNCTION(is_object)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_OBJECT);
-}
-/* }}} */
-
-/* {{{ proto bool is_numeric(mixed value)
- Returns true if value is a number or a numeric string */
-PHP_FUNCTION(is_numeric)
-{
- zval **arg;
- int result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_LONG:
- case IS_DOUBLE:
- RETURN_TRUE;
- break;
-
- case IS_STRING:
- result = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), NULL, NULL, 0);
- if (result == IS_LONG || result == IS_DOUBLE) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool is_scalar(mixed value)
- Returns true if value is a scalar */
-PHP_FUNCTION(is_scalar)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_BOOL:
- case IS_DOUBLE:
- case IS_LONG:
- case IS_STRING:
- RETURN_TRUE;
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool is_callable(mixed var [, bool syntax_only [, string callable_name]])
- Returns true if var is callable. */
-PHP_FUNCTION(is_callable)
-{
- zval **var, **syntax_only, **callable_name;
- char *name;
- zend_bool retval;
- zend_bool syntax = 0;
- int argc=ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &var, &syntax_only, &callable_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 1) {
- convert_to_boolean_ex(syntax_only);
- syntax = Z_BVAL_PP(syntax_only);
- }
-
- if (argc > 2) {
- retval = zend_is_callable(*var, syntax, &name);
- zval_dtor(*callable_name);
- ZVAL_STRING(*callable_name, name, 0);
- } else {
- retval = zend_is_callable(*var, syntax, NULL);
- }
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/uniqid.c b/ext/standard/uniqid.c
deleted file mode 100644
index c7a6bd58a7..0000000000
--- a/ext/standard/uniqid.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include <stdio.h>
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#else
-#include <sys/time.h>
-#endif
-
-#include "php_lcg.h"
-#include "uniqid.h"
-
-/* {{{ proto string uniqid(string prefix [, bool more_entropy])
- Generates a unique ID */
-PHP_FUNCTION(uniqid)
-{
-#ifdef HAVE_GETTIMEOFDAY
- char *prefix;
- zend_bool more_entropy = 0;
- char uniqid[138];
- int sec, usec, argc, prefix_len;
- struct timeval tv;
-
- argc = ZEND_NUM_ARGS();
- if (zend_parse_parameters(argc TSRMLS_CC, "s|b", &prefix, &prefix_len,
- &more_entropy)) {
- return;
- }
-
- /* Do some bounds checking since we are using a char array. */
- if (prefix_len > 114) {
- php_error(E_WARNING, "The prefix to uniqid should not be more than 114 characters.");
- return;
- }
-#if HAVE_USLEEP && !defined(PHP_WIN32)
- if (!more_entropy) {
- usleep(1);
- }
-#endif
- gettimeofday((struct timeval *) &tv, (struct timezone *) NULL);
- sec = (int) tv.tv_sec;
- usec = (int) (tv.tv_usec % 1000000);
-
- /* The max value usec can have is 0xF423F, so we use only five hex
- * digits for usecs.
- */
- if (more_entropy) {
- sprintf(uniqid, "%s%08x%05x%.8f", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
- } else {
- sprintf(uniqid, "%s%08x%05x", prefix, sec, usec);
- }
-
- RETURN_STRING(uniqid, 1);
-#endif
-}
-/* }}} */
-
-function_entry uniqid_functions[] = {
- PHP_FE(uniqid, NULL)
- {NULL, NULL, NULL}
-};
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/uniqid.h b/ext/standard/uniqid.h
deleted file mode 100644
index 352a75ff82..0000000000
--- a/ext/standard/uniqid.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef UNIQID_H
-#define UNIQID_H
-
-PHP_FUNCTION(uniqid);
-
-#endif /* UNIQID_H */
diff --git a/ext/standard/url.c b/ext/standard/url.c
deleted file mode 100644
index 4a897d3d11..0000000000
--- a/ext/standard/url.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-
-#include "php.h"
-
-#include "url.h"
-#ifdef _OSD_POSIX
-#ifndef APACHE
-#error On this EBCDIC platform, PHP is only supported as an Apache module.
-#else /*APACHE*/
-#ifndef CHARSET_EBCDIC
-#define CHARSET_EBCDIC /* this machine uses EBCDIC, not ASCII! */
-#endif
-#include "ebcdic.h"
-#endif /*APACHE*/
-#endif /*_OSD_POSIX*/
-
-/* {{{ free_url
- */
-PHPAPI void php_url_free(php_url *theurl)
-{
- if (theurl->scheme)
- efree(theurl->scheme);
- if (theurl->user)
- efree(theurl->user);
- if (theurl->pass)
- efree(theurl->pass);
- if (theurl->host)
- efree(theurl->host);
- if (theurl->path)
- efree(theurl->path);
- if (theurl->query)
- efree(theurl->query);
- if (theurl->fragment)
- efree(theurl->fragment);
- efree(theurl);
-}
-/* }}} */
-
-/* {{{ php_url_parse
- */
-PHPAPI php_url *php_url_parse(char *str)
-{
- regex_t re;
- regmatch_t subs[11];
- int err;
- int length = strlen(str);
- char *result;
- php_url *ret = ecalloc(1, sizeof(php_url));
-
- /* from Appendix B of draft-fielding-url-syntax-09,
- http://www.ics.uci.edu/~fielding/url/url.txt */
- err = regcomp(&re, "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?", REG_EXTENDED);
- if (err) {
- /*php_error(E_WARNING, "Unable to compile regex: %d\n", err);*/
- efree(ret);
- return NULL;
- }
- err = regexec(&re, str, 10, subs, 0);
- if (err) {
- /*php_error(E_WARNING, "Error with regex\n");*/
- efree(ret);
- regfree(&re);
- return NULL;
- }
- /* no processing necessary on the scheme */
- if (subs[2].rm_so != -1 && subs[2].rm_so <= length) {
- ret->scheme = estrndup(str + subs[2].rm_so, subs[2].rm_eo - subs[2].rm_so);
- }
-
- /* the path to the resource */
- if (subs[5].rm_so != -1 && subs[5].rm_so <= length) {
- ret->path = estrndup(str + subs[5].rm_so, subs[5].rm_eo - subs[5].rm_so);
- }
-
- /* the query part */
- if (subs[7].rm_so != -1 && subs[7].rm_so <= length) {
- ret->query = estrndup(str + subs[7].rm_so, subs[7].rm_eo - subs[7].rm_so);
- }
-
- /* the fragment */
- if (subs[9].rm_so != -1 && subs[9].rm_so <= length) {
- ret->fragment = estrndup(str + subs[9].rm_so, subs[9].rm_eo - subs[9].rm_so);
- }
-
- /* extract the username, pass, and port from the hostname */
- if (subs[4].rm_so != -1 && subs[4].rm_so <= length) {
-
- int cerr;
- /* extract username:pass@host:port from regex results */
- result = estrndup(str + subs[4].rm_so, subs[4].rm_eo - subs[4].rm_so);
- length = strlen(result);
-
- regfree(&re); /* free the old regex */
-
- if (length) {
- if ((cerr=regcomp(&re, "^(([^@:]+)(:([^@:]+))?@)?((\\[([^]]+)\\])|([^:@]+))(:([^:@]+))?", REG_EXTENDED))
- || (err=regexec(&re, result, 11, subs, 0))) {
- STR_FREE(ret->scheme);
- STR_FREE(ret->path);
- STR_FREE(ret->query);
- STR_FREE(ret->fragment);
- efree(ret);
- efree(result);
- /*php_error(E_WARNING, "Unable to compile regex: %d\n", err);*/
- if (!cerr) regfree(&re);
- return NULL;
- }
- /* now deal with all of the results */
- if (subs[2].rm_so != -1 && subs[2].rm_so < length) {
- ret->user = estrndup(result + subs[2].rm_so, subs[2].rm_eo - subs[2].rm_so);
- }
- if (subs[4].rm_so != -1 && subs[4].rm_so < length) {
- ret->pass = estrndup(result + subs[4].rm_so, subs[4].rm_eo - subs[4].rm_so);
- }
- if (subs[7].rm_so != -1 && subs[7].rm_so < length) {
- ret->host = estrndup(result + subs[7].rm_so, subs[7].rm_eo - subs[7].rm_so);
- } else if (subs[8].rm_so != -1 && subs[8].rm_so < length) {
- ret->host = estrndup(result + subs[8].rm_so, subs[8].rm_eo - subs[8].rm_so);
- }
- if (subs[10].rm_so != -1 && subs[10].rm_so < length) {
- ret->port = (unsigned short) strtol(result + subs[10].rm_so, NULL, 10);
- }
- }
- efree(result);
- }
- else if (ret->scheme && !strcmp(ret->scheme, "http")) {
- STR_FREE(ret->scheme);
- STR_FREE(ret->path);
- STR_FREE(ret->query);
- STR_FREE(ret->fragment);
- efree(ret);
- regfree(&re);
- return NULL;
- }
- regfree(&re);
- return ret;
-}
-/* }}} */
-
-/* {{{ proto array parse_url(string url)
- Parse a URL and return its components */
-PHP_FUNCTION(parse_url)
-{
- char *str;
- int str_len;
- php_url *resource;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
-
- resource = php_url_parse(str);
- if (resource == NULL) {
- php_error(E_WARNING, "unable to parse url (%s)", str);
- RETURN_FALSE;
- }
-
- /* allocate an array for return */
- array_init(return_value);
-
- /* add the various elements to the array */
- if (resource->scheme != NULL)
- add_assoc_string(return_value, "scheme", resource->scheme, 1);
- if (resource->host != NULL)
- add_assoc_string(return_value, "host", resource->host, 1);
- if (resource->port != 0)
- add_assoc_long(return_value, "port", resource->port);
- if (resource->user != NULL)
- add_assoc_string(return_value, "user", resource->user, 1);
- if (resource->pass != NULL)
- add_assoc_string(return_value, "pass", resource->pass, 1);
- if (resource->path != NULL)
- add_assoc_string(return_value, "path", resource->path, 1);
- if (resource->query != NULL)
- add_assoc_string(return_value, "query", resource->query, 1);
- if (resource->fragment != NULL)
- add_assoc_string(return_value, "fragment", resource->fragment, 1);
-
- php_url_free(resource);
-}
-/* }}} */
-
-/* {{{ php_htoi
- */
-static int php_htoi(char *s)
-{
- int value;
- int c;
-
- c = s[0];
- if (isupper(c))
- c = tolower(c);
- value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
-
- c = s[1];
- if (isupper(c))
- c = tolower(c);
- value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
-
- return (value);
-}
-/* }}} */
-
-/* rfc1738:
-
- ...The characters ";",
- "/", "?", ":", "@", "=" and "&" are the characters which may be
- reserved for special meaning within a scheme...
-
- ...Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
- reserved characters used for their reserved purposes may be used
- unencoded within a URL...
-
- For added safety, we only leave -_. unencoded.
- */
-
-static unsigned char hexchars[] = "0123456789ABCDEF";
-
-/* {{{ php_url_encode
- */
-PHPAPI char *php_url_encode(char *s, int len, int *new_length)
-{
- register int x, y;
- unsigned char *str;
-
- str = (unsigned char *) emalloc(3 * len + 1);
- for (x = 0, y = 0; len--; x++, y++) {
- str[y] = (unsigned char) s[x];
- if (str[y] == ' ') {
- str[y] = '+';
-#ifndef CHARSET_EBCDIC
- } else if ((str[y] < '0' && str[y] != '-' && str[y] != '.') ||
- (str[y] < 'A' && str[y] > '9') ||
- (str[y] > 'Z' && str[y] < 'a' && str[y] != '_') ||
- (str[y] > 'z')) {
- str[y++] = '%';
- str[y++] = hexchars[(unsigned char) s[x] >> 4];
- str[y] = hexchars[(unsigned char) s[x] & 15];
- }
-#else /*CHARSET_EBCDIC*/
- } else if (!isalnum(str[y]) && strchr("_-.", str[y]) == NULL) {
- /* Allow only alphanumeric chars and '_', '-', '.'; escape the rest */
- str[y++] = '%';
- str[y++] = hexchars[os_toascii[(unsigned char) s[x]] >> 4];
- str[y] = hexchars[os_toascii[(unsigned char) s[x]] & 0x0F];
- }
-#endif /*CHARSET_EBCDIC*/
- }
- str[y] = '\0';
- if (new_length) {
- *new_length = y;
- }
- return ((char *) str);
-}
-/* }}} */
-
-/* {{{ proto string urlencode(string str)
- URL-encodes string */
-PHP_FUNCTION(urlencode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = php_url_encode(in_str, in_str_len, &out_str_len);
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string urldecode(string str)
- Decodes URL-encoded string */
-PHP_FUNCTION(urldecode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = estrndup(in_str, in_str_len);
- out_str_len = php_url_decode(out_str, in_str_len);
-
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ php_url_decode
- */
-PHPAPI int php_url_decode(char *str, int len)
-{
- char *dest = str;
- char *data = str;
-
- while (len--) {
- if (*data == '+')
- *dest = ' ';
- else if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1)) && isxdigit((int) *(data + 2))) {
-#ifndef CHARSET_EBCDIC
- *dest = (char) php_htoi(data + 1);
-#else
- *dest = os_toebcdic[(char) php_htoi(data + 1)];
-#endif
- data += 2;
- len -= 2;
- } else
- *dest = *data;
- data++;
- dest++;
- }
- *dest = '\0';
- return dest - str;
-}
-/* }}} */
-
-/* {{{ php_raw_url_encode
- */
-PHPAPI char *php_raw_url_encode(char *s, int len, int *new_length)
-{
- register int x, y;
- unsigned char *str;
-
- str = (unsigned char *) emalloc(3 * len + 1);
- for (x = 0, y = 0; len--; x++, y++) {
- str[y] = (unsigned char) s[x];
-#ifndef CHARSET_EBCDIC
- if ((str[y] < '0' && str[y] != '-' && str[y] != '.') ||
- (str[y] < 'A' && str[y] > '9') ||
- (str[y] > 'Z' && str[y] < 'a' && str[y] != '_') ||
- (str[y] > 'z')) {
- str[y++] = '%';
- str[y++] = hexchars[(unsigned char) s[x] >> 4];
- str[y] = hexchars[(unsigned char) s[x] & 15];
-#else /*CHARSET_EBCDIC*/
- if (!isalnum(str[y]) && strchr("_-.", str[y]) != NULL) {
- str[y++] = '%';
- str[y++] = hexchars[os_toascii[(unsigned char) s[x]] >> 4];
- str[y] = hexchars[os_toascii[(unsigned char) s[x]] & 15];
-#endif /*CHARSET_EBCDIC*/
- }
- }
- str[y] = '\0';
- if (new_length) {
- *new_length = y;
- }
- return ((char *) str);
-}
-/* }}} */
-
-/* {{{ proto string rawurlencode(string str)
- URL-encodes string */
-PHP_FUNCTION(rawurlencode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = php_raw_url_encode(in_str, in_str_len, &out_str_len);
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string rawurldecode(string str)
- Decodes URL-encodes string */
-PHP_FUNCTION(rawurldecode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = estrndup(in_str, in_str_len);
- out_str_len = php_raw_url_decode(out_str, in_str_len);
-
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ php_raw_url_decode
- */
-PHPAPI int php_raw_url_decode(char *str, int len)
-{
- char *dest = str;
- char *data = str;
-
- while (len--) {
- if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1)) && isxdigit((int) *(data + 2))) {
-#ifndef CHARSET_EBCDIC
- *dest = (char) php_htoi(data + 1);
-#else
- *dest = os_toebcdic[(char) php_htoi(data + 1)];
-#endif
- data += 2;
- len -= 2;
- } else
- *dest = *data;
- data++;
- dest++;
- }
- *dest = '\0';
- return dest - str;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/url.h b/ext/standard/url.h
deleted file mode 100644
index b81aa68d2b..0000000000
--- a/ext/standard/url.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef URL_H
-#define URL_H
-
-typedef struct php_url {
- char *scheme;
- char *user;
- char *pass;
- char *host;
- unsigned short port;
- char *path;
- char *query;
- char *fragment;
-} php_url;
-
-PHPAPI void php_url_free(php_url *theurl);
-PHPAPI php_url *php_url_parse(char *str);
-PHPAPI int php_url_decode(char *str, int len); /* return value: length of decoded string */
-PHPAPI int php_raw_url_decode(char *str, int len); /* return value: length of decoded string */
-PHPAPI char *php_url_encode(char *s, int len, int *new_length);
-PHPAPI char *php_raw_url_encode(char *s, int len, int *new_length);
-
-PHP_FUNCTION(parse_url);
-PHP_FUNCTION(urlencode);
-PHP_FUNCTION(urldecode);
-PHP_FUNCTION(rawurlencode);
-PHP_FUNCTION(rawurldecode);
-
-#endif /* URL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/url_scanner.c b/ext/standard/url_scanner.c
deleted file mode 100644
index fe4b6d9c3f..0000000000
--- a/ext/standard/url_scanner.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-
-#include "php_globals.h"
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "basic_functions.h"
-#include "url_scanner.h"
-
-#ifndef BUFSIZE
-#define BUFSIZE 256
-#endif
-
-int php_url_scanner_activate(TSRMLS_D)
-{
- url_adapt(NULL,0,NULL,NULL);
- return SUCCESS;
-}
-
-
-int php_url_scanner_deactivate(TSRMLS_D)
-{
- url_adapt(NULL,0,NULL,NULL);
- return SUCCESS;
-}
-
-/* {{{ url_attr_addon
- */
-static char *url_attr_addon(const char *tag,const char *attr,const char *val,const char *buf)
-{
- int flag = 0;
- TSRMLS_FETCH();
-
- if(!strcasecmp(tag,"a") && !strcasecmp(attr,"href")) {
- flag = 1;
- } else if(!strcasecmp(tag,"area" ) && !strcasecmp(attr,"href" )) {
- flag = 1;
- } else if(!strcasecmp(tag,"form" ) && !strcasecmp(attr,"action" )) {
- flag = 1;
- } else if(!strcasecmp(tag,"frame") && !strcasecmp(attr,"source" )) {
- flag = 1;
- } else if(!strcasecmp(tag,"img" ) && !strcasecmp(attr,"action" )) {
- flag = 1;
- }
- if(flag) {
- if(!strstr(val,buf)&&!strchr(val,':'))
- {
- char *result = (char *)emalloc(strlen(buf)+strlen(PG(arg_separator).output)+1);
- int n;
-
- if(strchr(val,'?')) {
- strcpy(result,PG(arg_separator).output);
- n=strlen(PG(arg_separator).output);
- } else {
- *result='?';
- n=1;
- }
- strcpy(result+n,buf);
- return result;
- }
- }
- return NULL;
-}
-/* }}} */
-
-#define US BG(url_adapt_state)
-
-/* {{{ url_adapt_ext
- */
-char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *val, size_t *newlen)
-{
- char buf[1024];
-
- snprintf(buf, sizeof(buf)-1, "%s=%s", name, val);
-
- return url_adapt(src, srclen, buf, newlen);
-}
-/* }}} */
-
-/* {{{ url_adapt
- */
-char *url_adapt(const char *src, size_t srclen, const char *data, size_t *newlen)
-{
- char *out,*outp;
- int maxl,n;
- TSRMLS_FETCH();
-
- if(src==NULL) {
- US.state=STATE_NORMAL;
- if(US.tag) { efree(US.tag); US.tag =NULL; }
- if(US.attr) { efree(US.attr); US.attr=NULL; }
- if(US.val) { efree(US.val); US.val =NULL; }
- return NULL;
- }
-
- if(srclen==0)
- srclen=strlen(src);
-
- out=malloc(srclen+1);
- maxl=srclen;
- n=srclen;
-
- *newlen=0;
- outp=out;
-
- while(n--) {
- switch(US.state) {
- case STATE_NORMAL:
- if(*src=='<')
- US.state=STATE_TAG_START;
- break;
-
- case STATE_TAG_START:
- if(! isalnum(*src))
- US.state=STATE_NORMAL;
- US.state=STATE_TAG;
- US.ml=BUFSIZE;
- US.p=US.tag=erealloc(US.tag,US.ml);
- *(US.p)++=*src;
- US.l=1;
- break;
-
- case STATE_TAG:
- if(isalnum(*src)) {
- *(US.p)++ = *src;
- US.l++;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.tag=erealloc(US.tag,US.ml);
- US.p = US.tag+US.l;
- }
- } else if (isspace(*src)) {
- US.state = STATE_IN_TAG;
- *US.p='\0';
- US.tag=erealloc(US.tag,US.l);
- } else {
- US.state = STATE_NORMAL;
- efree(US.tag);
- US.tag=NULL;
- }
- break;
-
- case STATE_IN_TAG:
- if(isalnum(*src)) {
- US.state=STATE_TAG_ATTR;
- US.ml=BUFSIZE;
- US.p=US.attr=erealloc(US.attr,US.ml);
- *(US.p)++=*src;
- US.l=1;
- } else if (! isspace(*src)) {
- US.state = STATE_NORMAL;
- efree(US.tag);
- US.tag=NULL;
- }
- break;
-
- case STATE_TAG_ATTR:
- if(isalnum(*src)) {
- *US.p++=*src;
- ++US.l;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.attr=erealloc(US.attr,US.ml);
- US.p = US.attr+US.l;
- }
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.attr=erealloc(US.attr,US.ml);
- US.p = US.attr+US.l;
- }
- } else if(isspace(*src)||(*src=='=')){
- US.state=STATE_TAG_IS;
- *US.p=0;
- US.attr=erealloc(US.attr,US.l);
- } else if(*src=='>') {
- US.state=STATE_NORMAL;
- } else {
- efree(US.attr);
- US.attr=NULL;
- US.state=STATE_IN_TAG;
- }
- break;
-
- case STATE_TAG_IS:
- case STATE_TAG_IS2:
- if(*src=='>'){
- US.state=STATE_NORMAL;
- if(! (US.attr_done)) {
- char *p;
- p=url_attr_addon(US.tag,US.attr,"",data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(*src=='#') {
- if(! (US.attr_done)) {
- char *p;
- US.attr_done=1;
- p=url_attr_addon(US.tag,US.attr,"#",data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(!isspace(*src)&&(*src!='=')) {
- US.ml=BUFSIZE;
- US.p=US.val=erealloc(US.val,US.ml);
- US.l=0;
- US.attr_done=0;
- if((*src=='"')||(*src=='\'')) {
- US.state=STATE_TAG_QVAL2;
- US.delim=*src;
- } else {
- US.state=STATE_TAG_VAL;
- *US.p++=*src;
- US.l++;
- }
- }
- break;
-
-
- case STATE_TAG_QVAL2:
- if(*src=='#') {
- if(! (US.attr_done)) {
- char *p;
- US.attr_done=1;
- *US.p='\0';
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(*src==US.delim) {
- US.state=STATE_IN_TAG;
- *US.p='\0';
- if(! (US.attr_done)) {
- char *p;
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- break;
- } else if(*src=='\\') {
- US.state=STATE_TAG_QVAL2b;
- } else if (*src=='>') {
- US.state=STATE_NORMAL;
- }
-
- *US.p++=*src;
- ++US.l;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.val=erealloc(US.val,US.ml);
- US.p = US.val+US.l;
- }
-
- break;
-
- case STATE_TAG_QVAL2b:
- US.state=STATE_TAG_QVAL2;
- *US.p++=*src;
- ++US.l;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.val=erealloc(US.val,US.ml);
- US.p = US.val+US.l;
- }
- break;
-
- case STATE_TAG_VAL:
- case STATE_TAG_VAL2:
- if(*src=='#') {
- if(! (US.attr_done)) {
- char *p;
- US.attr_done=1;
- *US.p='\0';
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(isspace(*src)||(*src=='>')) {
- US.state=(*src=='>')?STATE_NORMAL:STATE_IN_TAG;
- *US.p='\0';
- if(! (US.attr_done)) {
- char *p;
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else {
- *US.p++=*src;
- US.l++;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.val=erealloc(US.val,US.ml);
- US.p = US.val+US.l;
- }
- }
- break;
- }
-
- *outp++=*src++;
- *newlen+=1;
- }
- *outp='\0';
- return out;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/url_scanner.h b/ext/standard/url_scanner.h
deleted file mode 100644
index 5642fcffaf..0000000000
--- a/ext/standard/url_scanner.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef URI_SCANNER_H
-#define URI_SCANNER_H
-
-int php_url_scanner_activate(TSRMLS_D);
-int php_url_scanner_deactivate(TSRMLS_D);
-
-char *url_adapt(const char *src, size_t srclen, const char *data, size_t *newlen);
-
-enum url_state {
- STATE_NORMAL,
- STATE_TAG_START,
- STATE_TAG,
- STATE_IN_TAG,
- STATE_TAG_ATTR,
- STATE_TAG_IS,
- STATE_TAG_IS2,
- STATE_TAG_VAL,
- STATE_TAG_VAL2,
- STATE_TAG_QVAL1,
- STATE_TAG_QVAL2,
- STATE_TAG_QVAL2b
-};
-
-typedef struct url_adapt_struct {
- enum url_state state;
- char *tag;
- char *attr;
- char *val;
- char delim;
- char *p;
- int l, ml;
- int attr_done;
-} url_adapt_state_t;
-
-#endif
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c
deleted file mode 100644
index 9ec1458788..0000000000
--- a/ext/standard/url_scanner_ex.c
+++ /dev/null
@@ -1,971 +0,0 @@
-/* Generated by re2c 0.5 on Wed May 8 08:08:09 2002 */
-#line 1 "/home/rasmus/php4/ext/standard/url_scanner_ex.re"
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "php_ini.h"
-#include "php_globals.h"
-#define STATE_TAG SOME_OTHER_STATE_TAG
-#include "basic_functions.h"
-#include "url.h"
-#undef STATE_TAG
-
-#define url_scanner url_scanner_ex
-
-#include "php_smart_str.h"
-
-static PHP_INI_MH(OnUpdateTags)
-{
- url_adapt_state_ex_t *ctx;
- char *key;
- char *lasts;
- char *tmp;
-
- ctx = &BG(url_adapt_state_ex);
-
- tmp = estrndup(new_value, new_value_length);
-
- if (ctx->tags)
- zend_hash_destroy(ctx->tags);
- else
- ctx->tags = malloc(sizeof(HashTable));
-
- zend_hash_init(ctx->tags, 0, NULL, NULL, 1);
-
- for (key = php_strtok_r(tmp, ",", &lasts);
- key;
- key = php_strtok_r(NULL, ",", &lasts)) {
- char *val;
-
- val = strchr(key, '=');
- if (val) {
- char *q;
- int keylen;
-
- *val++ = '\0';
- for (q = key; *q; q++)
- *q = tolower(*q);
- keylen = q - key;
- /* key is stored withOUT NUL
- val is stored WITH NUL */
- zend_hash_add(ctx->tags, key, keylen, val, strlen(val)+1, NULL);
- }
- }
-
- efree(tmp);
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("url_rewriter.tags", "a=href,area=href,frame=src,form=fakeentry", PHP_INI_ALL, OnUpdateTags, url_adapt_state_ex, php_basic_globals, basic_globals)
-PHP_INI_END()
-
-#line 91
-
-
-#define YYFILL(n) goto done
-#define YYCTYPE unsigned char
-#define YYCURSOR p
-#define YYLIMIT q
-#define YYMARKER r
-
-static inline void append_modified_url(smart_str *url, smart_str *dest, smart_str *url_app, const char *separator)
-{
- register const char *p, *q;
- const char *bash = NULL;
- const char *sep = "?";
-
- q = (p = url->c) + url->len;
-
-scan:
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 128, 128, 128, 128, 0,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- };
- goto yy0;
-yy1: ++YYCURSOR;
-yy0:
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) goto yy8;
- if(yych <= '9') goto yy6;
- if(yych >= ';') goto yy4;
-yy2: yych = *++YYCURSOR;
-yy3:
-#line 109
- { smart_str_append(dest, url); return; }
-yy4: yych = *++YYCURSOR;
-yy5:
-#line 110
- { sep = separator; goto scan; }
-yy6: yych = *++YYCURSOR;
-yy7:
-#line 111
- { bash = p - 1; goto done; }
-yy8: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy9: if(yybm[0+yych] & 128) goto yy8;
-yy10:
-#line 112
- { goto scan; }
-}
-#line 113
-
-done:
-
- /* Don't modify URLs of the format "#mark" */
- if (bash && bash - url->c == 0) {
- smart_str_append(dest, url);
- return;
- }
-
- if (bash)
- smart_str_appendl(dest, url->c, bash - url->c);
- else
- smart_str_append(dest, url);
-
- smart_str_appends(dest, sep);
- smart_str_append(dest, url_app);
-
- if (bash)
- smart_str_appendl(dest, bash, q - bash);
-}
-
-
-#undef YYFILL
-#undef YYCTYPE
-#undef YYCURSOR
-#undef YYLIMIT
-#undef YYMARKER
-
-static inline void tag_arg(url_adapt_state_ex_t *ctx, char quotes, char type TSRMLS_DC)
-{
- char f = 0;
-
- if (strncasecmp(ctx->arg.c, ctx->lookup_data, ctx->arg.len) == 0)
- f = 1;
-
- if (quotes)
- smart_str_appendc(&ctx->result, type);
- if (f) {
- append_modified_url(&ctx->val, &ctx->result, &ctx->url_app, PG(arg_separator).output);
- } else {
- smart_str_append(&ctx->result, &ctx->val);
- }
- if (quotes)
- smart_str_appendc(&ctx->result, type);
-}
-
-enum {
- STATE_PLAIN = 0,
- STATE_TAG,
- STATE_NEXT_ARG,
- STATE_ARG,
- STATE_BEFORE_VAL,
- STATE_VAL
-};
-
-#define YYFILL(n) goto stop
-#define YYCTYPE unsigned char
-#define YYCURSOR xp
-#define YYLIMIT end
-#define YYMARKER q
-#define STATE ctx->state
-
-#define STD_PARA url_adapt_state_ex_t *ctx, char *start, char *YYCURSOR TSRMLS_DC
-#define STD_ARGS ctx, start, xp TSRMLS_CC
-
-static inline void passthru(STD_PARA)
-{
- smart_str_appendl(&ctx->result, start, YYCURSOR - start);
-}
-
-static inline void handle_form(STD_PARA)
-{
- if (ctx->form_app.len > 0
- && ctx->tag.len == 4
- && strncasecmp(ctx->tag.c, "form", 4) == 0) {
- smart_str_append(&ctx->result, &ctx->form_app);
- }
-}
-
-/*
- * HANDLE_TAG copies the HTML Tag and checks whether we
- * have that tag in our table. If we might modify it,
- * we continue to scan the tag, otherwise we simply copy the complete
- * HTML stuff to the result buffer.
- */
-
-static inline void handle_tag(STD_PARA)
-{
- int ok = 0;
- int i;
-
- ctx->tag.len = 0;
- smart_str_appendl(&ctx->tag, start, YYCURSOR - start);
- for (i = 0; i < ctx->tag.len; i++)
- ctx->tag.c[i] = tolower(ctx->tag.c[i]);
- if (zend_hash_find(ctx->tags, ctx->tag.c, ctx->tag.len, (void **) &ctx->lookup_data) == SUCCESS)
- ok = 1;
- STATE = ok ? STATE_NEXT_ARG : STATE_PLAIN;
-}
-
-static inline void handle_arg(STD_PARA)
-{
- ctx->arg.len = 0;
- smart_str_appendl(&ctx->arg, start, YYCURSOR - start);
-}
-
-static inline void handle_val(STD_PARA, char quotes, char type)
-{
- smart_str_setl(&ctx->val, start + quotes, YYCURSOR - start - quotes * 2);
- tag_arg(ctx, quotes, type TSRMLS_CC);
-}
-
-#ifdef SCANNER_DEBUG
-#define scdebug(x) printf x
-#else
-#define scdebug(x)
-#endif
-
-static inline void xx_mainloop(url_adapt_state_ex_t *ctx, const char *newdata, size_t newlen TSRMLS_DC)
-{
- char *end, *q;
- char *xp;
- char *start;
- int rest;
-
- smart_str_appendl(&ctx->buf, newdata, newlen);
-
- YYCURSOR = ctx->buf.c;
- YYLIMIT = ctx->buf.c + ctx->buf.len;
-
- switch (STATE) {
- case STATE_PLAIN: goto state_plain;
- case STATE_TAG: goto state_tag;
- case STATE_NEXT_ARG: goto state_next_arg;
- case STATE_ARG: goto state_arg;
- case STATE_BEFORE_VAL: goto state_before_val;
- case STATE_VAL: goto state_val;
- }
-
-
-state_plain_begin:
- STATE = STATE_PLAIN;
-
-state_plain:
- start = YYCURSOR;
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 0, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- };
- goto yy11;
-yy12: ++YYCURSOR;
-yy11:
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) goto yy15;
-yy13: yych = *++YYCURSOR;
-yy14:
-#line 259
- { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
-yy15: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy16: if(yybm[0+yych] & 128) goto yy15;
-yy17:
-#line 260
- { passthru(STD_ARGS); goto state_plain; }
-}
-#line 261
-
-
-state_tag:
- start = YYCURSOR;
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
- goto yy18;
-yy19: ++YYCURSOR;
-yy18:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy22;
- if(yych <= 'Z') goto yy20;
- if(yych <= '`') goto yy22;
- if(yych >= '{') goto yy22;
-yy20: yych = *++YYCURSOR;
- goto yy25;
-yy21:
-#line 266
- { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
-yy22: yych = *++YYCURSOR;
-yy23:
-#line 267
- { passthru(STD_ARGS); goto state_plain_begin; }
-yy24: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy25: if(yybm[0+yych] & 128) goto yy24;
- goto yy21;
-}
-#line 268
-
-
-state_next_arg_begin:
- STATE = STATE_NEXT_ARG;
-
-state_next_arg:
- start = YYCURSOR;
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
- goto yy26;
-yy27: ++YYCURSOR;
-yy26:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '='){
- if(yych <= '\v'){
- if(yych <= '\b') goto yy34;
- goto yy30;
- } else {
- if(yych == ' ') goto yy30;
- goto yy34;
- }
- } else {
- if(yych <= 'Z'){
- if(yych <= '>') goto yy28;
- if(yych <= '@') goto yy34;
- goto yy32;
- } else {
- if(yych <= '`') goto yy34;
- if(yych <= 'z') goto yy32;
- goto yy34;
- }
- }
-yy28: yych = *++YYCURSOR;
-yy29:
-#line 276
- { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
-yy30: yych = *++YYCURSOR;
- goto yy37;
-yy31:
-#line 277
- { passthru(STD_ARGS); goto state_next_arg; }
-yy32: yych = *++YYCURSOR;
-yy33:
-#line 278
- { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
-yy34: yych = *++YYCURSOR;
-yy35:
-#line 279
- { passthru(STD_ARGS); goto state_plain_begin; }
-yy36: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy37: if(yybm[0+yych] & 128) goto yy36;
- goto yy31;
-}
-#line 280
-
-
-state_arg:
- start = YYCURSOR;
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
- goto yy38;
-yy39: ++YYCURSOR;
-yy38:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy42;
- if(yych <= 'Z') goto yy40;
- if(yych <= '`') goto yy42;
- if(yych >= '{') goto yy42;
-yy40: yych = *++YYCURSOR;
- goto yy45;
-yy41:
-#line 285
- { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
-yy42: yych = *++YYCURSOR;
-yy43:
-#line 286
- { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
-yy44: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy45: if(yybm[0+yych] & 128) goto yy44;
- goto yy41;
-}
-#line 287
-
-
-state_before_val:
- start = YYCURSOR;
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
- goto yy46;
-yy47: ++YYCURSOR;
-yy46:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych == ' ') goto yy48;
- if(yych == '=') goto yy50;
- goto yy52;
-yy48: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
-yy49:
-#line 293
- { --YYCURSOR; goto state_next_arg_begin; }
-yy50: yych = *++YYCURSOR;
- goto yy54;
-yy51:
-#line 292
- { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
-yy52: yych = *++YYCURSOR;
- goto yy49;
-yy53: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy54: if(yybm[0+yych] & 128) goto yy53;
- goto yy51;
-yy55: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy56: if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
-yy57: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy49;
- }
-}
-#line 294
-
-
-
-state_val:
- start = YYCURSOR;
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 192, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 192, 224, 64, 224, 224, 224, 224, 128,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 0, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- };
- goto yy58;
-yy59: ++YYCURSOR;
-yy58:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '!'){
- if(yych <= '\n'){
- if(yych <= '\t') goto yy63;
- goto yy65;
- } else {
- if(yych == ' ') goto yy65;
- goto yy63;
- }
- } else {
- if(yych <= '\''){
- if(yych <= '"') goto yy60;
- if(yych <= '&') goto yy63;
- goto yy62;
- } else {
- if(yych == '>') goto yy65;
- goto yy63;
- }
- }
-yy60: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '>') goto yy74;
-yy61:
-#line 303
- { passthru(STD_ARGS); goto state_next_arg_begin; }
-yy62: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '>') goto yy61;
- goto yy69;
-yy63: yych = *++YYCURSOR;
- goto yy67;
-yy64:
-#line 302
- { handle_val(STD_ARGS, 0, '"'); goto state_next_arg_begin; }
-yy65: yych = *++YYCURSOR;
- goto yy61;
-yy66: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy67: if(yybm[0+yych] & 32) goto yy66;
- goto yy64;
-yy68: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy69: if(yybm[0+yych] & 64) goto yy68;
- if(yych <= '=') goto yy71;
-yy70: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy61;
- }
-yy71: yych = *++YYCURSOR;
-yy72:
-#line 301
- { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
-yy73: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy74: if(yybm[0+yych] & 128) goto yy73;
- if(yych >= '>') goto yy70;
-yy75: yych = *++YYCURSOR;
-yy76:
-#line 300
- { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
-}
-#line 304
-
-
-stop:
- rest = YYLIMIT - start;
- scdebug(("stopped in state %d at pos %d (%d:%c) %d\n", STATE, YYCURSOR - ctx->buf.c, *YYCURSOR, *YYCURSOR, rest));
- /* XXX: Crash avoidance. Need to work with reporter to figure out what goes wrong */
- if (rest < 0) rest = 0;
-
- if (rest) memmove(ctx->buf.c, start, rest);
- ctx->buf.len = rest;
-}
-
-char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC)
-{
- smart_str surl = {0};
- smart_str buf = {0};
- smart_str url_app = {0};
-
- smart_str_setl(&surl, url, urllen);
-
- smart_str_appends(&url_app, name);
- smart_str_appendc(&url_app, '=');
- smart_str_appends(&url_app, value);
-
- append_modified_url(&surl, &buf, &url_app, PG(arg_separator).output);
-
- smart_str_0(&buf);
- if (newlen) *newlen = buf.len;
-
- smart_str_free(&url_app);
-
- return buf.c;
-}
-
-
-static char *url_adapt_ext(const char *src, size_t srclen, size_t *newlen, zend_bool do_flush TSRMLS_DC)
-{
- url_adapt_state_ex_t *ctx;
- char *retval;
-
- ctx = &BG(url_adapt_state_ex);
-
- xx_mainloop(ctx, src, srclen TSRMLS_CC);
-
- *newlen = ctx->result.len;
- if (!ctx->result.c) {
- smart_str_appendl(&ctx->result, "", 0);
- }
- smart_str_0(&ctx->result);
- if (do_flush) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- *newlen += ctx->buf.len;
- smart_str_free(&ctx->buf);
- }
- retval = ctx->result.c;
- ctx->result.c = NULL;
- ctx->result.len = 0;
- return retval;
-}
-
-int php_url_scanner_ex_activate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- memset(ctx, 0, ((size_t) &((url_adapt_state_ex_t *)0)->tags));
-
- return SUCCESS;
-}
-
-int php_url_scanner_ex_deactivate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- smart_str_free(&ctx->result);
- smart_str_free(&ctx->buf);
- smart_str_free(&ctx->tag);
- smart_str_free(&ctx->arg);
-
- return SUCCESS;
-}
-
-static void php_url_scanner_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
-{
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- *handled_output = url_adapt_ext(output, output_len, handled_output_len, (zend_bool) (mode&PHP_OUTPUT_HANDLER_END ? 1 : 0) TSRMLS_CC);
- } else {
- *handled_output = NULL;
- }
-}
-
-int php_url_scanner_add_var(char *name, int name_len, char *value, int value_len, int urlencode TSRMLS_DC)
-{
- char *encoded;
- int encoded_len;
- smart_str val;
-
- if (! BG(url_adapt_state_ex).active) {
- int chunk_size = 4096; /* XXX where should we get chunk_size from? */
-
- php_url_scanner_ex_activate(TSRMLS_C);
- php_start_ob_buffer(NULL, chunk_size, 1 TSRMLS_CC);
- php_ob_set_internal_handler(php_url_scanner_output_handler, chunk_size, estrdup("URL-Rewriter"), 1 TSRMLS_CC);
- BG(url_adapt_state_ex).active = 1;
- }
-
-
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output);
- }
-
- if (urlencode) {
- encoded = php_url_encode(value, value_len, &encoded_len);
- smart_str_setl(&val, encoded, encoded_len);
- } else {
- smart_str_setl(&val, value, value_len);
- }
-
- smart_str_appendl(&BG(url_adapt_state_ex).url_app, name, name_len);
- smart_str_appendc(&BG(url_adapt_state_ex).url_app, '=');
- smart_str_append(&BG(url_adapt_state_ex).url_app, &val);
-
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "<input type=\"hidden\" name=\"");
- smart_str_appendl(&BG(url_adapt_state_ex).form_app, name, name_len);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" value=\"");
- smart_str_append(&BG(url_adapt_state_ex).form_app, &val);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" />");
-
- if (urlencode)
- efree(encoded);
-
- return SUCCESS;
-}
-
-int php_url_scanner_reset_vars(TSRMLS_D)
-{
- BG(url_adapt_state_ex).form_app.len = 0;
- BG(url_adapt_state_ex).url_app.len = 0;
-
- return FAILURE;
-}
-
-PHP_MINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).tags = NULL;
-
- BG(url_adapt_state_ex).form_app.c = BG(url_adapt_state_ex).url_app.c = 0;
- BG(url_adapt_state_ex).form_app.len = BG(url_adapt_state_ex).url_app.len = 0;
-
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(url_scanner)
-{
- UNREGISTER_INI_ENTRIES();
- zend_hash_destroy(BG(url_adapt_state_ex).tags);
- free(BG(url_adapt_state_ex).tags);
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).active = 0;
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(url_scanner)
-{
- if (BG(url_adapt_state_ex).active) {
- php_url_scanner_ex_deactivate(TSRMLS_C);
- BG(url_adapt_state_ex).active = 0;
- }
-
- smart_str_free(&BG(url_adapt_state_ex).form_app);
- smart_str_free(&BG(url_adapt_state_ex).url_app);
-
- return SUCCESS;
-}
diff --git a/ext/standard/url_scanner_ex.h b/ext/standard/url_scanner_ex.h
deleted file mode 100644
index 469c249aed..0000000000
--- a/ext/standard/url_scanner_ex.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef URL_SCANNER_EX_H
-#define URL_SCANNER_EX_H
-
-PHP_MINIT_FUNCTION(url_scanner_ex);
-PHP_MSHUTDOWN_FUNCTION(url_scanner_ex);
-
-PHP_RINIT_FUNCTION(url_scanner_ex);
-PHP_RSHUTDOWN_FUNCTION(url_scanner_ex);
-
-char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC);
-
-int php_url_scanner_add_var(char *name, int name_len, char *value, int value_len, int urlencode TSRMLS_DC);
-int php_url_scanner_reset_vars(TSRMLS_D);
-
-int php_url_scanner_ex_activate(TSRMLS_D);
-int php_url_scanner_ex_deactivate(TSRMLS_D);
-
-#include "php_smart_str_public.h"
-
-typedef struct {
- /* Used by the mainloop of the scanner */
- smart_str tag; /* read only */
- smart_str arg; /* read only */
- smart_str val; /* read only */
- smart_str buf;
-
- /* The result buffer */
- smart_str result;
-
- /* The data which is appended to each relative URL/FORM */
- smart_str form_app, url_app;
-
- int active;
-
- char *lookup_data;
- int state;
-
- /* Everything above is zeroed in RINIT */
- HashTable *tags;
-} url_adapt_state_ex_t;
-
-typedef struct {
- smart_str var;
- smart_str val;
-} url_adapt_var_t;
-
-#endif
diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re
deleted file mode 100644
index 8d4bff7f69..0000000000
--- a/ext/standard/url_scanner_ex.re
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "php_ini.h"
-#include "php_globals.h"
-#define STATE_TAG SOME_OTHER_STATE_TAG
-#include "basic_functions.h"
-#include "url.h"
-#undef STATE_TAG
-
-#define url_scanner url_scanner_ex
-
-#include "php_smart_str.h"
-
-static PHP_INI_MH(OnUpdateTags)
-{
- url_adapt_state_ex_t *ctx;
- char *key;
- char *lasts;
- char *tmp;
-
- ctx = &BG(url_adapt_state_ex);
-
- tmp = estrndup(new_value, new_value_length);
-
- if (ctx->tags)
- zend_hash_destroy(ctx->tags);
- else
- ctx->tags = malloc(sizeof(HashTable));
-
- zend_hash_init(ctx->tags, 0, NULL, NULL, 1);
-
- for (key = php_strtok_r(tmp, ",", &lasts);
- key;
- key = php_strtok_r(NULL, ",", &lasts)) {
- char *val;
-
- val = strchr(key, '=');
- if (val) {
- char *q;
- int keylen;
-
- *val++ = '\0';
- for (q = key; *q; q++)
- *q = tolower(*q);
- keylen = q - key;
- /* key is stored withOUT NUL
- val is stored WITH NUL */
- zend_hash_add(ctx->tags, key, keylen, val, strlen(val)+1, NULL);
- }
- }
-
- efree(tmp);
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("url_rewriter.tags", "a=href,area=href,frame=src,form=fakeentry", PHP_INI_ALL, OnUpdateTags, url_adapt_state_ex, php_basic_globals, basic_globals)
-PHP_INI_END()
-
-/*!re2c
-any = [\000-\377];
-N = (any\[<]);
-alpha = [a-zA-Z];
-*/
-
-#define YYFILL(n) goto done
-#define YYCTYPE unsigned char
-#define YYCURSOR p
-#define YYLIMIT q
-#define YYMARKER r
-
-static inline void append_modified_url(smart_str *url, smart_str *dest, smart_str *url_app, const char *separator)
-{
- register const char *p, *q;
- const char *bash = NULL;
- const char *sep = "?";
-
- q = (p = url->c) + url->len;
-
-scan:
-/*!re2c
- ":" { smart_str_append(dest, url); return; }
- "?" { sep = separator; goto scan; }
- "#" { bash = p - 1; goto done; }
- (any\[:?#])+ { goto scan; }
-*/
-done:
-
- /* Don't modify URLs of the format "#mark" */
- if (bash && bash - url->c == 0) {
- smart_str_append(dest, url);
- return;
- }
-
- if (bash)
- smart_str_appendl(dest, url->c, bash - url->c);
- else
- smart_str_append(dest, url);
-
- smart_str_appends(dest, sep);
- smart_str_append(dest, url_app);
-
- if (bash)
- smart_str_appendl(dest, bash, q - bash);
-}
-
-
-#undef YYFILL
-#undef YYCTYPE
-#undef YYCURSOR
-#undef YYLIMIT
-#undef YYMARKER
-
-static inline void tag_arg(url_adapt_state_ex_t *ctx, char quotes, char type TSRMLS_DC)
-{
- char f = 0;
-
- if (strncasecmp(ctx->arg.c, ctx->lookup_data, ctx->arg.len) == 0)
- f = 1;
-
- if (quotes)
- smart_str_appendc(&ctx->result, type);
- if (f) {
- append_modified_url(&ctx->val, &ctx->result, &ctx->url_app, PG(arg_separator).output);
- } else {
- smart_str_append(&ctx->result, &ctx->val);
- }
- if (quotes)
- smart_str_appendc(&ctx->result, type);
-}
-
-enum {
- STATE_PLAIN = 0,
- STATE_TAG,
- STATE_NEXT_ARG,
- STATE_ARG,
- STATE_BEFORE_VAL,
- STATE_VAL
-};
-
-#define YYFILL(n) goto stop
-#define YYCTYPE unsigned char
-#define YYCURSOR xp
-#define YYLIMIT end
-#define YYMARKER q
-#define STATE ctx->state
-
-#define STD_PARA url_adapt_state_ex_t *ctx, char *start, char *YYCURSOR TSRMLS_DC
-#define STD_ARGS ctx, start, xp TSRMLS_CC
-
-static inline void passthru(STD_PARA)
-{
- smart_str_appendl(&ctx->result, start, YYCURSOR - start);
-}
-
-static inline void handle_form(STD_PARA)
-{
- if (ctx->form_app.len > 0
- && ctx->tag.len == 4
- && strncasecmp(ctx->tag.c, "form", 4) == 0) {
- smart_str_append(&ctx->result, &ctx->form_app);
- }
-}
-
-/*
- * HANDLE_TAG copies the HTML Tag and checks whether we
- * have that tag in our table. If we might modify it,
- * we continue to scan the tag, otherwise we simply copy the complete
- * HTML stuff to the result buffer.
- */
-
-static inline void handle_tag(STD_PARA)
-{
- int ok = 0;
- int i;
-
- ctx->tag.len = 0;
- smart_str_appendl(&ctx->tag, start, YYCURSOR - start);
- for (i = 0; i < ctx->tag.len; i++)
- ctx->tag.c[i] = tolower(ctx->tag.c[i]);
- if (zend_hash_find(ctx->tags, ctx->tag.c, ctx->tag.len, (void **) &ctx->lookup_data) == SUCCESS)
- ok = 1;
- STATE = ok ? STATE_NEXT_ARG : STATE_PLAIN;
-}
-
-static inline void handle_arg(STD_PARA)
-{
- ctx->arg.len = 0;
- smart_str_appendl(&ctx->arg, start, YYCURSOR - start);
-}
-
-static inline void handle_val(STD_PARA, char quotes, char type)
-{
- smart_str_setl(&ctx->val, start + quotes, YYCURSOR - start - quotes * 2);
- tag_arg(ctx, quotes, type TSRMLS_CC);
-}
-
-#ifdef SCANNER_DEBUG
-#define scdebug(x) printf x
-#else
-#define scdebug(x)
-#endif
-
-static inline void xx_mainloop(url_adapt_state_ex_t *ctx, const char *newdata, size_t newlen TSRMLS_DC)
-{
- char *end, *q;
- char *xp;
- char *start;
- int rest;
-
- smart_str_appendl(&ctx->buf, newdata, newlen);
-
- YYCURSOR = ctx->buf.c;
- YYLIMIT = ctx->buf.c + ctx->buf.len;
-
- switch (STATE) {
- case STATE_PLAIN: goto state_plain;
- case STATE_TAG: goto state_tag;
- case STATE_NEXT_ARG: goto state_next_arg;
- case STATE_ARG: goto state_arg;
- case STATE_BEFORE_VAL: goto state_before_val;
- case STATE_VAL: goto state_val;
- }
-
-
-state_plain_begin:
- STATE = STATE_PLAIN;
-
-state_plain:
- start = YYCURSOR;
-/*!re2c
- "<" { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
- N+ { passthru(STD_ARGS); goto state_plain; }
-*/
-
-state_tag:
- start = YYCURSOR;
-/*!re2c
- alpha+ { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
- any { passthru(STD_ARGS); goto state_plain_begin; }
-*/
-
-state_next_arg_begin:
- STATE = STATE_NEXT_ARG;
-
-state_next_arg:
- start = YYCURSOR;
-/*!re2c
- ">" { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
- [ \v\t\n]+ { passthru(STD_ARGS); goto state_next_arg; }
- alpha { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
- any { passthru(STD_ARGS); goto state_plain_begin; }
-*/
-
-state_arg:
- start = YYCURSOR;
-/*!re2c
- alpha+ { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
- any { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
-*/
-
-state_before_val:
- start = YYCURSOR;
-/*!re2c
- [ ]* "=" [ ]* { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
- any { --YYCURSOR; goto state_next_arg_begin; }
-*/
-
-
-state_val:
- start = YYCURSOR;
-/*!re2c
- ["] (any\[">])* ["] { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
- ['] (any\['>])* ['] { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
- (any\[ \n>"'])+ { handle_val(STD_ARGS, 0, '"'); goto state_next_arg_begin; }
- any { passthru(STD_ARGS); goto state_next_arg_begin; }
-*/
-
-stop:
- rest = YYLIMIT - start;
- scdebug(("stopped in state %d at pos %d (%d:%c) %d\n", STATE, YYCURSOR - ctx->buf.c, *YYCURSOR, *YYCURSOR, rest));
- /* XXX: Crash avoidance. Need to work with reporter to figure out what goes wrong */
- if (rest < 0) rest = 0;
-
- if (rest) memmove(ctx->buf.c, start, rest);
- ctx->buf.len = rest;
-}
-
-char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC)
-{
- smart_str surl = {0};
- smart_str buf = {0};
- smart_str url_app = {0};
-
- smart_str_setl(&surl, url, urllen);
-
- smart_str_appends(&url_app, name);
- smart_str_appendc(&url_app, '=');
- smart_str_appends(&url_app, value);
-
- append_modified_url(&surl, &buf, &url_app, PG(arg_separator).output);
-
- smart_str_0(&buf);
- if (newlen) *newlen = buf.len;
-
- smart_str_free(&url_app);
-
- return buf.c;
-}
-
-
-static char *url_adapt_ext(const char *src, size_t srclen, size_t *newlen, zend_bool do_flush TSRMLS_DC)
-{
- url_adapt_state_ex_t *ctx;
- char *retval;
-
- ctx = &BG(url_adapt_state_ex);
-
- xx_mainloop(ctx, src, srclen TSRMLS_CC);
-
- *newlen = ctx->result.len;
- if (!ctx->result.c) {
- smart_str_appendl(&ctx->result, "", 0);
- }
- smart_str_0(&ctx->result);
- if (do_flush) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- *newlen += ctx->buf.len;
- smart_str_free(&ctx->buf);
- }
- retval = ctx->result.c;
- ctx->result.c = NULL;
- ctx->result.len = 0;
- return retval;
-}
-
-int php_url_scanner_ex_activate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- memset(ctx, 0, ((size_t) &((url_adapt_state_ex_t *)0)->tags));
-
- return SUCCESS;
-}
-
-int php_url_scanner_ex_deactivate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- smart_str_free(&ctx->result);
- smart_str_free(&ctx->buf);
- smart_str_free(&ctx->tag);
- smart_str_free(&ctx->arg);
-
- return SUCCESS;
-}
-
-static void php_url_scanner_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
-{
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- *handled_output = url_adapt_ext(output, output_len, handled_output_len, (zend_bool) (mode&PHP_OUTPUT_HANDLER_END ? 1 : 0) TSRMLS_CC);
- } else {
- *handled_output = NULL;
- }
-}
-
-int php_url_scanner_add_var(char *name, int name_len, char *value, int value_len, int urlencode TSRMLS_DC)
-{
- char *encoded;
- int encoded_len;
- smart_str val;
-
- if (! BG(url_adapt_state_ex).active) {
- int chunk_size = 4096; /* XXX where should we get chunk_size from? */
-
- php_url_scanner_ex_activate(TSRMLS_C);
- php_start_ob_buffer(NULL, chunk_size, 1 TSRMLS_CC);
- php_ob_set_internal_handler(php_url_scanner_output_handler, chunk_size, estrdup("URL-Rewriter"), 1 TSRMLS_CC);
- BG(url_adapt_state_ex).active = 1;
- }
-
-
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output);
- }
-
- if (urlencode) {
- encoded = php_url_encode(value, value_len, &encoded_len);
- smart_str_setl(&val, encoded, encoded_len);
- } else {
- smart_str_setl(&val, value, value_len);
- }
-
- smart_str_appendl(&BG(url_adapt_state_ex).url_app, name, name_len);
- smart_str_appendc(&BG(url_adapt_state_ex).url_app, '=');
- smart_str_append(&BG(url_adapt_state_ex).url_app, &val);
-
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "<input type=\"hidden\" name=\"");
- smart_str_appendl(&BG(url_adapt_state_ex).form_app, name, name_len);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" value=\"");
- smart_str_append(&BG(url_adapt_state_ex).form_app, &val);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" />");
-
- if (urlencode)
- efree(encoded);
-
- return SUCCESS;
-}
-
-int php_url_scanner_reset_vars(TSRMLS_D)
-{
- BG(url_adapt_state_ex).form_app.len = 0;
- BG(url_adapt_state_ex).url_app.len = 0;
-
- return FAILURE;
-}
-
-PHP_MINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).tags = NULL;
-
- BG(url_adapt_state_ex).form_app.c = BG(url_adapt_state_ex).url_app.c = 0;
- BG(url_adapt_state_ex).form_app.len = BG(url_adapt_state_ex).url_app.len = 0;
-
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(url_scanner)
-{
- UNREGISTER_INI_ENTRIES();
- zend_hash_destroy(BG(url_adapt_state_ex).tags);
- free(BG(url_adapt_state_ex).tags);
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).active = 0;
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(url_scanner)
-{
- if (BG(url_adapt_state_ex).active) {
- php_url_scanner_ex_deactivate(TSRMLS_C);
- BG(url_adapt_state_ex).active = 0;
- }
-
- smart_str_free(&BG(url_adapt_state_ex).form_app);
- smart_str_free(&BG(url_adapt_state_ex).url_app);
-
- return SUCCESS;
-}
diff --git a/ext/standard/var.c b/ext/standard/var.c
deleted file mode 100644
index 10aee69b14..0000000000
--- a/ext/standard/var.c
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Jani Lehtimäki <jkl@njet.net> |
- | Thies C. Arntzen <thies@thieso.net> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id: var.c
- 1.111 2001/08/06 13:36:08 thies Exp $ */
-
-
-/* {{{ includes
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "php.h"
-#include "php_string.h"
-#include "php_var.h"
-#include "php_smart_str.h"
-#include "basic_functions.h"
-#include "php_incomplete_class.h"
-
-#define COMMON ((*struc)->is_ref ? "&" : "")
-#define Z_REFCOUNT_PP(a) ((*a)->refcount)
-
-/* }}} */
-/* {{{ php_var_dump */
-
-static int php_array_element_dump(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength==0) { /* numeric key */
- php_printf("%*c[%ld]=>\n", level + 1, ' ', hash_key->h);
- } else { /* string key */
- php_printf("%*c[\"%s\"]=>\n", level + 1, ' ', hash_key->arKey);
- }
- php_var_dump(zv, level + 2 TSRMLS_CC);
- return 0;
-}
-
-void php_var_dump(zval **struc, int level TSRMLS_DC)
-{
- HashTable *myht = NULL;
- zend_object *object = NULL;
-
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- php_printf("%sbool(%s)\n", COMMON, Z_LVAL_PP(struc)?"true":"false");
- break;
- case IS_NULL:
- php_printf("%sNULL\n", COMMON);
- break;
- case IS_LONG:
- php_printf("%sint(%ld)\n", COMMON, Z_LVAL_PP(struc));
- break;
- case IS_DOUBLE:
- php_printf("%sfloat(%.*G)\n", COMMON, (int) EG(precision), Z_DVAL_PP(struc));
- break;
- case IS_STRING:
- php_printf("%sstring(%d) \"", COMMON, Z_STRLEN_PP(struc));
- PHPWRITE(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
- PUTS("\"\n");
- break;
- case IS_ARRAY:
- myht = Z_ARRVAL_PP(struc);
- if (++((*struc)->value.ht->nApplyCount) > 1) {
- PUTS("*RECURSION*\n");
- (*struc)->value.ht->nApplyCount = 0;
- break;
- }
- php_printf("%sarray(%d) {\n", COMMON, zend_hash_num_elements(myht));
- goto head_done;
- case IS_OBJECT:
- object = Z_OBJ_PP(struc);
- if (++object->properties->nApplyCount > 1) {
- PUTS("*RECURSION*\n");
- object->properties->nApplyCount = 0;
- return;
- }
- myht = Z_OBJPROP_PP(struc);
- php_printf("%sobject(%s)(%d) {\n", COMMON, Z_OBJCE_PP(struc)->name, zend_hash_num_elements(myht));
-head_done:
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_array_element_dump, 1, level);
- if (Z_TYPE_PP(struc) == IS_ARRAY) {
- (*struc)->value.ht->nApplyCount--;
- }
- else {
- object->properties->nApplyCount--;
- }
- if (level > 1) {
- php_printf("%*c", level-1, ' ');
- }
- PUTS("}\n");
- break;
- case IS_RESOURCE: {
- char *type_name;
-
- type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC);
- php_printf("%sresource(%ld) of type (%s)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown");
- break;
- }
- default:
- php_printf("%sUNKNOWN:0\n", COMMON);
- break;
- }
-}
-
-/* }}} */
-
-
-
-/* {{{ proto void var_dump(mixed var)
- Dumps a string representation of variable to output */
-PHP_FUNCTION(var_dump)
-{
- zval ***args;
- int argc;
- int i;
-
- argc = ZEND_NUM_ARGS();
-
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (ZEND_NUM_ARGS() == 0 || zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- for (i=0; i<argc; i++)
- php_var_dump(args[i], 1 TSRMLS_CC);
-
- efree(args);
-}
-/* }}} */
-
-/* {{{ debug_zval_dump */
-
-static int zval_array_element_dump(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength==0) { /* numeric key */
- php_printf("%*c[%ld]=>\n", level + 1, ' ', hash_key->h);
- } else { /* string key */
- php_printf("%*c[\"%s\"]=>\n", level + 1, ' ', hash_key->arKey);
- }
- php_debug_zval_dump(zv, level + 2 TSRMLS_CC);
- return 0;
-}
-
-void php_debug_zval_dump(zval **struc, int level TSRMLS_DC)
-{
- HashTable *myht = NULL;
-
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- php_printf("%sbool(%s) refcount(%u)\n", COMMON, Z_LVAL_PP(struc)?"true":"false", Z_REFCOUNT_PP(struc));
- break;
- case IS_NULL:
- php_printf("%sNULL refcount(%u)\n", COMMON, Z_REFCOUNT_PP(struc));
- break;
- case IS_LONG:
- php_printf("%slong(%ld) refcount(%u)\n", COMMON, Z_LVAL_PP(struc), Z_REFCOUNT_PP(struc));
- break;
- case IS_DOUBLE:
- php_printf("%sdouble(%.*G) refcount(%u)\n", COMMON, (int) EG(precision), Z_DVAL_PP(struc), Z_REFCOUNT_PP(struc));
- break;
- case IS_STRING:
- php_printf("%sstring(%d) \"", COMMON, Z_STRLEN_PP(struc));
- PHPWRITE(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
- php_printf("\" refcount(%u)\n", Z_REFCOUNT_PP(struc));
- break;
- case IS_ARRAY:
- myht = Z_ARRVAL_PP(struc);
- php_printf("%sarray(%d) refcount(%u){\n", COMMON, zend_hash_num_elements(myht), Z_REFCOUNT_PP(struc));
- goto head_done;
- case IS_OBJECT:
- myht = Z_OBJPROP_PP(struc);
- php_printf("%sobject(%s)(%d) refcount(%u){\n", COMMON, Z_OBJCE_PP(struc)->name, zend_hash_num_elements(myht), Z_REFCOUNT_PP(struc));
-head_done:
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) zval_array_element_dump, 1, level);
- if (level > 1) {
- php_printf("%*c", level-1, ' ');
- }
- PUTS("}\n");
- break;
- case IS_RESOURCE: {
- char *type_name;
-
- type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC);
- php_printf("%sresource(%ld) of type (%s) refcount(%u)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown", Z_REFCOUNT_PP(struc));
- break;
- }
- default:
- php_printf("%sUNKNOWN:0\n", COMMON);
- break;
- }
-}
-
-/* }}} */
-
-/* {{{ proto void debug_zval_dump(mixed var)
- Dumps a string representation of an internal zend value to output. */
-PHP_FUNCTION(debug_zval_dump)
-{
- zval ***args;
- int argc;
- int i;
-
- argc = ZEND_NUM_ARGS();
-
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (ZEND_NUM_ARGS() == 0 || zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- for (i=0; i<argc; i++)
- php_debug_zval_dump(args[i], 1 TSRMLS_CC);
-
- efree(args);
-}
-/* }}} */
-
-
-/* {{{ php_var_export */
-
-static int php_array_element_export(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength==0) { /* numeric key */
- php_printf("%*c%ld => ", level + 1, ' ', hash_key->h);
- } else { /* string key */
- php_printf("%*c'%s' => ", level + 1, ' ', hash_key->arKey);
- }
- php_var_export(zv, level + 2 TSRMLS_CC);
- PUTS (",\n");
- return 0;
-}
-
-static int php_object_element_export(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength != 0) {
- php_printf("%*cvar $%s = ", level + 1, ' ', hash_key->arKey);
- }
- php_var_export(zv, level + 2 TSRMLS_CC);
- PUTS (";\n");
- return 0;
-}
-
-void php_var_export(zval **struc, int level TSRMLS_DC)
-{
- HashTable *myht;
- char* tmp_str;
- int tmp_len;
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- php_printf("%s", Z_LVAL_PP(struc) ? "true" : "false");
- break;
- case IS_NULL:
- php_printf("NULL");
- break;
- case IS_LONG:
- php_printf("%ld", Z_LVAL_PP(struc));
- break;
- case IS_DOUBLE:
- php_printf("%.*G", (int) EG(precision), Z_DVAL_PP(struc));
- break;
- case IS_STRING:
- tmp_str = php_addcslashes(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc), &tmp_len, 0, "'\\", 2 TSRMLS_CC);
- PUTS ("'");
- PHPWRITE(tmp_str, tmp_len);
- PUTS ("'");
- efree (tmp_str);
- break;
- case IS_ARRAY:
- myht = Z_ARRVAL_PP(struc);
- if (level > 1) {
- php_printf("\n%*c", level - 1, ' ');
- }
- PUTS ("array (\n");
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_array_element_export, 1, level);
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
- PUTS(")");
- break;
- case IS_OBJECT:
- myht = Z_OBJPROP_PP(struc);
- if (level > 1) {
- php_printf("\n%*c", level - 1, ' ');
- }
- php_printf ("class %s {\n", Z_OBJCE_PP(struc)->name);
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_object_element_export, 1, level);
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
- PUTS("}");
- break;
- default:
- PUTS ("NULL");
- break;
- }
-}
-
-/* }}} */
-
-
-/* {{{ proto mixed var_export(mixed var [, bool return])
- Outputs or returns a string representation of a variable */
-PHP_FUNCTION(var_export)
-{
- zval *var;
- zend_bool i = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &var, &i) == FAILURE) {
- return;
- }
-
- if (i) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- php_var_export(&var, 1 TSRMLS_CC);
-
- if (i) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- }
-}
-/* }}} */
-
-
-
-/* {{{ php_var_serialize */
-
-static void php_var_serialize_intern(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC);
-
-static inline int php_add_var_hash(HashTable *var_hash, zval *var, void *var_old)
-{
- ulong var_no;
- char id[32], *p;
- register int len;
-
- /* relies on "(long)" being a perfect hash function for data pointers */
- p = smart_str_print_long(id + sizeof(id) - 1, (long) var);
- len = id + sizeof(id) - 1 - p;
-
- if (var_old && zend_hash_find(var_hash, p, len, var_old) == SUCCESS) {
- if (!var->is_ref) {
- /* we still need to bump up the counter, since non-refs will
- be counted separately by unserializer */
- var_no = -1;
- zend_hash_next_index_insert(var_hash, &var_no, sizeof(var_no), NULL);
- }
- return FAILURE;
- }
-
- /* +1 because otherwise hash will think we are trying to store NULL pointer */
- var_no = zend_hash_num_elements(var_hash) + 1;
- zend_hash_add(var_hash, p, len, &var_no, sizeof(var_no), NULL);
- return SUCCESS;
-}
-
-static inline void php_var_serialize_long(smart_str *buf, long val)
-{
- smart_str_appendl(buf, "i:", 2);
- smart_str_append_long(buf, val);
- smart_str_appendc(buf, ';');
-}
-
-static inline void php_var_serialize_string(smart_str *buf, char *str, int len)
-{
- smart_str_appendl(buf, "s:", 2);
- smart_str_append_long(buf, len);
- smart_str_appendl(buf, ":\"", 2);
- smart_str_appendl(buf, str, len);
- smart_str_appendl(buf, "\";", 2);
-}
-
-static inline void php_var_serialize_class_name(smart_str *buf, zval **struc TSRMLS_DC)
-{
- PHP_CLASS_ATTRIBUTES;
-
- PHP_SET_CLASS_ATTRIBUTES(*struc);
- smart_str_appendl(buf, "O:", 2);
- smart_str_append_long(buf, name_len);
- smart_str_appendl(buf, ":\"", 2);
- smart_str_appendl(buf, class_name, name_len);
- smart_str_appendl(buf, "\":", 2);
- PHP_CLEANUP_CLASS_ATTRIBUTES();
-}
-
-static void php_var_serialize_class(smart_str *buf, zval **struc, zval *retval_ptr, HashTable *var_hash TSRMLS_DC)
-{
- int count;
-
- php_var_serialize_class_name(buf, struc TSRMLS_CC);
- /* count after serializing name, since php_var_serialize_class_name
- changes the count if the variable is incomplete class */
- count = zend_hash_num_elements(HASH_OF(retval_ptr));
- smart_str_append_long(buf, count);
- smart_str_appendl(buf, ":{", 2);
-
- if (count > 0) {
- char *key;
- zval **d, **name;
- ulong index;
- HashPosition pos;
- int i;
- zval nval, *nvalp;
-
- ZVAL_NULL(&nval);
- nvalp = &nval;
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(retval_ptr), &pos);
-
- for (;; zend_hash_move_forward_ex(HASH_OF(retval_ptr), &pos)) {
- i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), &key, NULL,
- &index, 0, &pos);
-
- if (i == HASH_KEY_NON_EXISTANT)
- break;
-
- zend_hash_get_current_data_ex(HASH_OF(retval_ptr),
- (void **) &name, &pos);
-
- if (Z_TYPE_PP(name) != IS_STRING) {
- php_error(E_NOTICE, "__sleep should return an array only "
- "containing the names of instance-variables to "
- "serialize.");
- /* we should still add element even if it's not OK,
- since we already wrote the length of the array before */
- smart_str_appendl(buf,"s:0:\"\";N;", 9);
- continue;
- }
-
- php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name));
-
- if (zend_hash_find(Z_OBJPROP_PP(struc), Z_STRVAL_PP(name),
- Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) {
- php_var_serialize_intern(buf, d, var_hash TSRMLS_CC);
- } else {
- php_var_serialize_intern(buf, &nvalp, var_hash TSRMLS_CC);
- }
- }
- }
- smart_str_appendc(buf, '}');
-}
-
-
-static void php_var_serialize_intern(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC)
-{
- int i;
- ulong *var_already;
- HashTable *myht;
-
- if(var_hash
- && php_add_var_hash(var_hash, *struc, (void *) &var_already) == FAILURE
- && (*struc)->is_ref) {
- smart_str_appendl(buf, "R:", 2);
- smart_str_append_long(buf, *var_already);
- smart_str_appendc(buf, ';');
- return;
- }
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- smart_str_appendl(buf, "b:", 2);
- smart_str_append_long(buf, Z_LVAL_PP(struc));
- smart_str_appendc(buf, ';');
- return;
-
- case IS_NULL:
- smart_str_appendl(buf, "N;", 2);
- return;
-
- case IS_LONG:
- php_var_serialize_long(buf, Z_LVAL_PP(struc));
- return;
-
- case IS_DOUBLE: {
- char s[256];
- ulong slen;
-
- slen = sprintf(s, "d:%.*G;", (int) EG(precision), Z_DVAL_PP(struc));
- smart_str_appendl(buf, s, slen);
- return;
- }
-
- case IS_STRING:
- php_var_serialize_string(buf, Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
- return;
-
- case IS_OBJECT: {
- zval *retval_ptr = NULL;
- zval fname;
- int res;
-
- INIT_PZVAL(&fname);
- ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0);
- res = call_user_function_ex(CG(function_table), struc, &fname,
- &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
-
- if (res == SUCCESS) {
- if (retval_ptr) {
- if (HASH_OF(retval_ptr)) {
- php_var_serialize_class(buf, struc, retval_ptr,
- var_hash TSRMLS_CC);
- } else {
- php_error(E_NOTICE, "__sleep should return an array only "
- "containing the names of instance-variables to "
- "serialize.");
- }
-
- zval_ptr_dtor(&retval_ptr);
- }
- return;
- }
- if (retval_ptr)
- zval_ptr_dtor(&retval_ptr);
- /* fall-through */
- }
- case IS_ARRAY:
- myht = HASH_OF(*struc);
- if (Z_TYPE_PP(struc) == IS_ARRAY) {
- smart_str_appendl(buf, "a:", 2);
- } else {
- php_var_serialize_class_name(buf, struc TSRMLS_CC);
- }
- /* count after serializing name, since php_var_serialize_class_name
- changes the count if the variable is incomplete class */
- i = zend_hash_num_elements(myht);
- smart_str_append_long(buf, i);
- smart_str_appendl(buf, ":{", 2);
- if (i > 0) {
- char *key;
- zval **data;
- ulong index;
- uint key_len;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(myht, &pos);
- for (;; zend_hash_move_forward_ex(myht, &pos)) {
- i = zend_hash_get_current_key_ex(myht, &key, &key_len,
- &index, 0, &pos);
- if (i == HASH_KEY_NON_EXISTANT)
- break;
-
- switch (i) {
- case HASH_KEY_IS_LONG:
- php_var_serialize_long(buf, index);
- break;
- case HASH_KEY_IS_STRING:
- php_var_serialize_string(buf, key, key_len - 1);
- break;
- }
-
- /* we should still add element even if it's not OK,
- since we already wrote the length of the array before */
- if (zend_hash_get_current_data_ex(myht,
- (void **) &data, &pos) != SUCCESS
- || !data
- || data == struc) {
- smart_str_appendl(buf, "N;", 2);
- } else {
- php_var_serialize_intern(buf, data, var_hash TSRMLS_CC);
- }
- }
- }
- smart_str_appendc(buf, '}');
- return;
- default:
- smart_str_appendl(buf, "i:0;", 4);
- return;
- }
-}
-
-PHPAPI void php_var_serialize(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC)
-{
- php_var_serialize_intern(buf, struc, var_hash TSRMLS_CC);
- smart_str_0(buf);
-}
-
-/* }}} */
-
-/* {{{ proto string serialize(mixed variable)
- Returns a string representation of variable (which can later be unserialized) */
-PHP_FUNCTION(serialize)
-{
- zval **struc;
- php_serialize_data_t var_hash;
- smart_str buf = {0};
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &struc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRVAL_P(return_value) = NULL;
- Z_STRLEN_P(return_value) = 0;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
- if (buf.c) {
- RETURN_STRINGL(buf.c, buf.len, 0);
- } else {
- RETURN_NULL();
- }
-}
-
-/* }}} */
-/* {{{ proto mixed unserialize(string variable_representation)
- Takes a string representation of variable and recreates it */
-
-
-PHP_FUNCTION(unserialize)
-{
- zval **buf;
- php_unserialize_data_t var_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &buf) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(buf) == IS_STRING) {
- const char *p = Z_STRVAL_PP(buf);
-
- if (Z_STRLEN_PP(buf) == 0) {
- RETURN_FALSE;
- }
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if (!php_var_unserialize(&return_value, &p, p + Z_STRLEN_PP(buf), &var_hash TSRMLS_CC)) {
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- zval_dtor(return_value);
- php_error(E_NOTICE, "unserialize() failed at offset %d of %d bytes", p - Z_STRVAL_PP(buf), Z_STRLEN_PP(buf));
- RETURN_FALSE;
- }
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- } else {
- php_error(E_NOTICE, "argument passed to unserialize() is not an string");
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
deleted file mode 100644
index 428321d366..0000000000
--- a/ext/standard/var_unserializer.c
+++ /dev/null
@@ -1,768 +0,0 @@
-/* Generated by re2c 0.5 on Sun Apr 28 19:47:31 2002 */
-#line 1 "var_unserializer.re"
-#include "php.h"
-#include "ext/standard/php_var.h"
-#include "php_incomplete_class.h"
-
-/* {{{ reference-handling for unserializer: var_* */
-#define VAR_ENTRIES_MAX 1024
-
-typedef struct {
- zval *data[VAR_ENTRIES_MAX];
- int used_slots;
- void *next;
-} var_entries;
-
-static inline void var_push(php_unserialize_data_t *var_hashx, zval **rval)
-{
- var_entries *var_hash = var_hashx->first, *prev = NULL;
-
- while (var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- prev = var_hash;
- var_hash = var_hash->next;
- }
-
- if (!var_hash) {
- var_hash = emalloc(sizeof(var_entries));
- var_hash->used_slots = 0;
- var_hash->next = 0;
-
- if (!var_hashx->first)
- var_hashx->first = var_hash;
- else
- prev->next = var_hash;
- }
-
- var_hash->data[var_hash->used_slots++] = *rval;
-}
-
-void var_replace(php_unserialize_data_t *var_hashx, zval *ozval, zval **nzval)
-{
- int i;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- for (i = 0; i < var_hash->used_slots; i++) {
- if (var_hash->data[i] == ozval) {
- var_hash->data[i] = *nzval;
- return;
- }
- }
- var_hash = var_hash->next;
- }
-}
-
-static int var_access(php_unserialize_data_t *var_hashx, int id, zval ***store)
-{
- var_entries *var_hash = var_hashx->first;
-
- while (id >= VAR_ENTRIES_MAX && var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- var_hash = var_hash->next;
- id -= VAR_ENTRIES_MAX;
- }
-
- if (!var_hash) return !SUCCESS;
-
- if (id >= var_hash->used_slots) return !SUCCESS;
-
- *store = &var_hash->data[id];
-
- return SUCCESS;
-}
-
-void var_destroy(php_unserialize_data_t *var_hashx)
-{
- void *next;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- next = var_hash->next;
- efree(var_hash);
- var_hash = next;
- }
-}
-
-/* }}} */
-
-#define YYFILL(n) do { } while (0)
-#define YYCTYPE unsigned char
-#define YYCURSOR cursor
-#define YYLIMIT limit
-#define YYMARKER marker
-
-
-#line 97
-
-
-
-
-static inline int parse_iv2(const char *p, const char **q)
-{
- char cursor;
- int result = 0;
- int neg = 0;
-
- switch (*p) {
- case '-':
- neg++;
- /* fall-through */
- case '+':
- p++;
- }
-
- while (1) {
- cursor = *p;
- if (cursor >= '0' && cursor <= '9') {
- result = result * 10 + cursor - '0';
- } else {
- break;
- }
- p++;
- }
- if (q) *q = p;
- if (neg) return -result;
- return result;
-}
-
-static inline int parse_iv(const char *p)
-{
- return parse_iv2(p, NULL);
-}
-
-#define UNSERIALIZE_PARAMETER zval **rval, const char **p, const char *max, php_unserialize_data_t *var_hash TSRMLS_DC
-#define UNSERIALIZE_PASSTHRU rval, p, max, var_hash TSRMLS_CC
-
-static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, int elements)
-{
- while (elements-- > 0) {
- zval *key, *data;
-
- ALLOC_INIT_ZVAL(key);
-
- if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- return 0;
- }
-
- ALLOC_INIT_ZVAL(data);
-
- if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- zval_dtor(data);
- FREE_ZVAL(data);
- return 0;
- }
-
- switch (Z_TYPE_P(key)) {
- case IS_LONG:
- zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data), NULL);
- break;
- case IS_STRING:
- zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data, sizeof(data), NULL);
- break;
-
- }
-
- zval_dtor(key);
- FREE_ZVAL(key);
- }
-
- return 1;
-}
-
-static inline int finish_nested_data(UNSERIALIZE_PARAMETER)
-{
- if (*((*p)++) == '}')
- return 1;
-
-#if SOMETHING_NEW_MIGHT_LEAD_TO_CRASH_ENABLE_IF_YOU_ARE_BRAVE
- zval_ptr_dtor(rval);
-#endif
- return 0;
-}
-
-static inline int object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
-{
- int elements;
-
- elements = parse_iv2((*p) + 2, p);
-
- (*p) += 2;
-
- object_init_ex(*rval, ce);
- return elements;
-}
-
-static inline int object_common2(UNSERIALIZE_PARAMETER, int elements)
-{
- zval *retval_ptr = NULL;
- zval fname;
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_PP(rval), elements)) {
- return 0;
- }
-
- INIT_PZVAL(&fname);
- ZVAL_STRINGL(&fname, "__wakeup", sizeof("__wakeup") - 1, 0);
- call_user_function_ex(CG(function_table), rval, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
-
- if (retval_ptr)
- zval_ptr_dtor(&retval_ptr);
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-
-}
-
-PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
-{
- const unsigned char *cursor, *limit, *marker, *start;
- zval **rval_ref;
-
- limit = cursor = *p;
-
- if (var_hash && cursor[0] != 'R') {
- var_push(var_hash, rval);
- }
-
- start = cursor;
-
-
-
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
- goto yy0;
-yy1: ++YYCURSOR;
-yy0:
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- if(yych <= 'd'){
- if(yych <= 'R'){
- if(yych <= 'N'){
- if(yych <= 'M') goto yy15;
- goto yy5;
- } else {
- if(yych <= 'O') goto yy12;
- if(yych <= 'Q') goto yy15;
- goto yy3;
- }
- } else {
- if(yych <= 'a'){
- if(yych <= '`') goto yy15;
- goto yy10;
- } else {
- if(yych <= 'b') goto yy6;
- if(yych <= 'c') goto yy15;
- goto yy8;
- }
- }
- } else {
- if(yych <= 'r'){
- if(yych <= 'i'){
- if(yych <= 'h') goto yy15;
- goto yy7;
- } else {
- if(yych == 'o') goto yy11;
- goto yy15;
- }
- } else {
- if(yych <= '|'){
- if(yych <= 's') goto yy9;
- goto yy15;
- } else {
- if(yych <= '}') goto yy13;
- if(yych <= '\277') goto yy15;
- }
- }
- }
-yy2: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy4;
- }
-yy3: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy75;
-yy4:
-#line 404
- { return 0; }
-yy5: yych = *++YYCURSOR;
- if(yych == ';') goto yy73;
- goto yy4;
-yy6: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy67;
- goto yy4;
-yy7: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy61;
- goto yy4;
-yy8: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy44;
- goto yy4;
-yy9: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy37;
- goto yy4;
-yy10: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy30;
- goto yy4;
-yy11: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy23;
- goto yy4;
-yy12: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy16;
- goto yy4;
-yy13: yych = *++YYCURSOR;
-yy14:
-#line 398
- {
- /* this is the case where we have less data than planned */
- zend_error(E_NOTICE, "Unexpected end of serialized data");
- return 0; /* not sure if it should be 0 or 1 here? */
-}
-yy15: yych = *++YYCURSOR;
- goto yy4;
-yy16: yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) goto yy18;
- if(yych == '+') goto yy17;
- if(yych != '-') goto yy2;
-yy17: yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) goto yy18;
- goto yy2;
-yy18: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy19: if(yybm[0+yych] & 128) goto yy18;
- if(yych != ':') goto yy2;
-yy20: yych = *++YYCURSOR;
- if(yych != '"') goto yy2;
-yy21: yych = *++YYCURSOR;
-yy22:
-#line 330
- {
- int len;
- int elements;
- int len2;
- char *class_name;
- zend_class_entry *ce;
- int incomplete_class = 0;
-
- zval *user_func;
- zval *retval_ptr;
- zval **args[1];
- zval *arg_func_name;
-
- INIT_PZVAL(*rval);
- len2 = len = parse_iv(start + 2);
- if (len == 0)
- return 0;
-
- class_name = estrndup(YYCURSOR, len);
- YYCURSOR += len;
-
- while (len-- > 0) {
- if (class_name[len] >= 'A' && class_name[len] <= 'Z') {
- class_name[len] = class_name[len] - 'A' + 'a';
- }
- }
-
- if (zend_hash_find(CG(class_table), class_name, len2 + 1, (void **) &ce) != SUCCESS) {
- if ((PG(unserialize_callback_func) == NULL) || (PG(unserialize_callback_func)[0] == '\0')) {
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- } else {
- MAKE_STD_ZVAL(user_func);
- ZVAL_STRING(user_func, PG(unserialize_callback_func), 1);
-
- args[0] = &arg_func_name;
- MAKE_STD_ZVAL(arg_func_name);
- ZVAL_STRING(arg_func_name, class_name, 1);
-
- if (call_user_function_ex(CG(function_table), NULL, user_func, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) != SUCCESS) {
- zend_error(E_WARNING, "'unserialize_callback_func' defined (%s) but not found", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- } else {
- if (zend_hash_find(CG(class_table), class_name, len2 + 1, (void **) &ce) != SUCCESS) {
- zend_error(E_WARNING, "'unserialize_callback_func' (%s) hasn't defined the class it was called for", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- } else
- efree(class_name);
- }
- }
- } else
- efree(class_name);
-
- *p = YYCURSOR;
- elements = object_common1(UNSERIALIZE_PASSTHRU, ce);
-
- if (incomplete_class) {
- php_store_class_name(*rval, class_name, len2);
- efree(class_name);
- }
-
- return object_common2(UNSERIALIZE_PASSTHRU, elements);
-}
-yy23: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy24;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy25;
- goto yy2;
- }
-yy24: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy25: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy26: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy25;
- if(yych >= ';') goto yy2;
-yy27: yych = *++YYCURSOR;
- if(yych != '"') goto yy2;
-yy28: yych = *++YYCURSOR;
-yy29:
-#line 322
- {
-
- INIT_PZVAL(*rval);
-
- return object_common2(UNSERIALIZE_PASSTHRU,
- object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
-}
-yy30: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy31;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy32;
- goto yy2;
- }
-yy31: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy32: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy33: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy32;
- if(yych >= ';') goto yy2;
-yy34: yych = *++YYCURSOR;
- if(yych != '{') goto yy2;
-yy35: yych = *++YYCURSOR;
-yy36:
-#line 304
- {
- int elements = parse_iv(start + 2);
-
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- Z_TYPE_PP(rval) = IS_ARRAY;
- ALLOC_HASHTABLE(Z_ARRVAL_PP(rval));
-
- zend_hash_init(Z_ARRVAL_PP(rval), elements + 1, NULL, ZVAL_PTR_DTOR, 0);
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_ARRVAL_PP(rval), elements)) {
- return 0;
- }
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-}
-yy37: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy38;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy39;
- goto yy2;
- }
-yy38: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy39: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy40: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy39;
- if(yych >= ';') goto yy2;
-yy41: yych = *++YYCURSOR;
- if(yych != '"') goto yy2;
-yy42: yych = *++YYCURSOR;
-yy43:
-#line 284
- {
- int len;
- char *str;
-
- len = parse_iv(start + 2);
-
- if (len == 0) {
- str = empty_string;
- } else {
- str = estrndup(YYCURSOR, len);
- }
-
- YYCURSOR += len + 2;
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- ZVAL_STRINGL(*rval, str, len, 0);
- return 1;
-}
-yy44: yych = *++YYCURSOR;
- if(yych <= '-'){
- if(yych == '+') goto yy45;
- if(yych <= ',') goto yy2;
- } else {
- if(yych <= '.') goto yy48;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy46;
- goto yy2;
- }
-yy45: yych = *++YYCURSOR;
- if(yych == '.') goto yy48;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy46: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy47: if(yych <= '/'){
- if(yych == '.') goto yy58;
- goto yy2;
- } else {
- if(yych <= '9') goto yy46;
- if(yych == ';') goto yy51;
- goto yy2;
- }
-yy48: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy49: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy50: if(yych <= ';'){
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy49;
- if(yych <= ':') goto yy2;
- } else {
- if(yych <= 'E'){
- if(yych <= 'D') goto yy2;
- goto yy53;
- } else {
- if(yych == 'e') goto yy53;
- goto yy2;
- }
- }
-yy51: yych = *++YYCURSOR;
-yy52:
-#line 277
- {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_DOUBLE(*rval, atof(start + 2));
- return 1;
-}
-yy53: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy54;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy55;
- goto yy2;
- }
-yy54: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych == '+') goto yy57;
- goto yy2;
- } else {
- if(yych <= '-') goto yy57;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- }
-yy55: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy56: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy55;
- if(yych == ';') goto yy51;
- goto yy2;
-yy57: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy55;
- goto yy2;
-yy58: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy59: ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
-yy60: if(yych <= ';'){
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy59;
- if(yych <= ':') goto yy2;
- goto yy51;
- } else {
- if(yych <= 'E'){
- if(yych <= 'D') goto yy2;
- goto yy53;
- } else {
- if(yych == 'e') goto yy53;
- goto yy2;
- }
- }
-yy61: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy62;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy63;
- goto yy2;
- }
-yy62: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy63: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy64: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy63;
- if(yych != ';') goto yy2;
-yy65: yych = *++YYCURSOR;
-yy66:
-#line 270
- {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_LONG(*rval, parse_iv(start + 2));
- return 1;
-}
-yy67: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy68;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy69;
- goto yy2;
- }
-yy68: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy69: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy70: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy69;
- if(yych != ';') goto yy2;
-yy71: yych = *++YYCURSOR;
-yy72:
-#line 263
- {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_BOOL(*rval, parse_iv(start + 2));
- return 1;
-}
-yy73: yych = *++YYCURSOR;
-yy74:
-#line 256
- {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_NULL(*rval);
- return 1;
-}
-yy75: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- } else {
- if(yych <= '-') goto yy76;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy77;
- goto yy2;
- }
-yy76: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
-yy77: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy78: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy77;
- if(yych != ';') goto yy2;
-yy79: yych = *++YYCURSOR;
-yy80:
-#line 237
- {
- int id;
-
- *p = YYCURSOR;
- if (!var_hash) return 0;
-
- id = parse_iv(start + 2) - 1;
- if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {
- return 0;
- }
-
- zval_ptr_dtor(rval);
- *rval = *rval_ref;
- (*rval)->refcount++;
- (*rval)->is_ref = 1;
-
- return 1;
-}
-}
-#line 406
-
-
- return 0;
-}
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
deleted file mode 100644
index 859809e3aa..0000000000
--- a/ext/standard/var_unserializer.re
+++ /dev/null
@@ -1,407 +0,0 @@
-#include "php.h"
-#include "ext/standard/php_var.h"
-#include "php_incomplete_class.h"
-
-/* {{{ reference-handling for unserializer: var_* */
-#define VAR_ENTRIES_MAX 1024
-
-typedef struct {
- zval *data[VAR_ENTRIES_MAX];
- int used_slots;
- void *next;
-} var_entries;
-
-static inline void var_push(php_unserialize_data_t *var_hashx, zval **rval)
-{
- var_entries *var_hash = var_hashx->first, *prev = NULL;
-
- while (var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- prev = var_hash;
- var_hash = var_hash->next;
- }
-
- if (!var_hash) {
- var_hash = emalloc(sizeof(var_entries));
- var_hash->used_slots = 0;
- var_hash->next = 0;
-
- if (!var_hashx->first)
- var_hashx->first = var_hash;
- else
- prev->next = var_hash;
- }
-
- var_hash->data[var_hash->used_slots++] = *rval;
-}
-
-void var_replace(php_unserialize_data_t *var_hashx, zval *ozval, zval **nzval)
-{
- int i;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- for (i = 0; i < var_hash->used_slots; i++) {
- if (var_hash->data[i] == ozval) {
- var_hash->data[i] = *nzval;
- return;
- }
- }
- var_hash = var_hash->next;
- }
-}
-
-static int var_access(php_unserialize_data_t *var_hashx, int id, zval ***store)
-{
- var_entries *var_hash = var_hashx->first;
-
- while (id >= VAR_ENTRIES_MAX && var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- var_hash = var_hash->next;
- id -= VAR_ENTRIES_MAX;
- }
-
- if (!var_hash) return !SUCCESS;
-
- if (id >= var_hash->used_slots) return !SUCCESS;
-
- *store = &var_hash->data[id];
-
- return SUCCESS;
-}
-
-void var_destroy(php_unserialize_data_t *var_hashx)
-{
- void *next;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- next = var_hash->next;
- efree(var_hash);
- var_hash = next;
- }
-}
-
-/* }}} */
-
-#define YYFILL(n) do { } while (0)
-#define YYCTYPE unsigned char
-#define YYCURSOR cursor
-#define YYLIMIT limit
-#define YYMARKER marker
-
-
-/*!re2c
-iv = [+-]? [0-9]+;
-nv = [+-]? ([0-9]* "." [0-9]+|[0-9]+ "." [0-9]+);
-nvexp = nv [eE] [+-]? iv;
-any = [\000-\277];
-*/
-
-
-
-static inline int parse_iv2(const char *p, const char **q)
-{
- char cursor;
- int result = 0;
- int neg = 0;
-
- switch (*p) {
- case '-':
- neg++;
- /* fall-through */
- case '+':
- p++;
- }
-
- while (1) {
- cursor = *p;
- if (cursor >= '0' && cursor <= '9') {
- result = result * 10 + cursor - '0';
- } else {
- break;
- }
- p++;
- }
- if (q) *q = p;
- if (neg) return -result;
- return result;
-}
-
-static inline int parse_iv(const char *p)
-{
- return parse_iv2(p, NULL);
-}
-
-#define UNSERIALIZE_PARAMETER zval **rval, const char **p, const char *max, php_unserialize_data_t *var_hash TSRMLS_DC
-#define UNSERIALIZE_PASSTHRU rval, p, max, var_hash TSRMLS_CC
-
-static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, int elements)
-{
- while (elements-- > 0) {
- zval *key, *data;
-
- ALLOC_INIT_ZVAL(key);
-
- if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- return 0;
- }
-
- ALLOC_INIT_ZVAL(data);
-
- if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- zval_dtor(data);
- FREE_ZVAL(data);
- return 0;
- }
-
- switch (Z_TYPE_P(key)) {
- case IS_LONG:
- zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data), NULL);
- break;
- case IS_STRING:
- zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data, sizeof(data), NULL);
- break;
-
- }
-
- zval_dtor(key);
- FREE_ZVAL(key);
- }
-
- return 1;
-}
-
-static inline int finish_nested_data(UNSERIALIZE_PARAMETER)
-{
- if (*((*p)++) == '}')
- return 1;
-
-#if SOMETHING_NEW_MIGHT_LEAD_TO_CRASH_ENABLE_IF_YOU_ARE_BRAVE
- zval_ptr_dtor(rval);
-#endif
- return 0;
-}
-
-static inline int object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
-{
- int elements;
-
- elements = parse_iv2((*p) + 2, p);
-
- (*p) += 2;
-
- object_init_ex(*rval, ce);
- return elements;
-}
-
-static inline int object_common2(UNSERIALIZE_PARAMETER, int elements)
-{
- zval *retval_ptr = NULL;
- zval fname;
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_PP(rval), elements)) {
- return 0;
- }
-
- INIT_PZVAL(&fname);
- ZVAL_STRINGL(&fname, "__wakeup", sizeof("__wakeup") - 1, 0);
- call_user_function_ex(CG(function_table), rval, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
-
- if (retval_ptr)
- zval_ptr_dtor(&retval_ptr);
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-
-}
-
-PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
-{
- const unsigned char *cursor, *limit, *marker, *start;
- zval **rval_ref;
-
- limit = cursor = *p;
-
- if (var_hash && cursor[0] != 'R') {
- var_push(var_hash, rval);
- }
-
- start = cursor;
-
-
-
-/*!re2c
-
-"R:" iv ";" {
- int id;
-
- *p = YYCURSOR;
- if (!var_hash) return 0;
-
- id = parse_iv(start + 2) - 1;
- if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {
- return 0;
- }
-
- zval_ptr_dtor(rval);
- *rval = *rval_ref;
- (*rval)->refcount++;
- (*rval)->is_ref = 1;
-
- return 1;
-}
-
-"N;" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_NULL(*rval);
- return 1;
-}
-
-"b:" iv ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_BOOL(*rval, parse_iv(start + 2));
- return 1;
-}
-
-"i:" iv ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_LONG(*rval, parse_iv(start + 2));
- return 1;
-}
-
-"d:" (iv | nv | nvexp) ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_DOUBLE(*rval, atof(start + 2));
- return 1;
-}
-
-"s:" iv ":" ["] {
- int len;
- char *str;
-
- len = parse_iv(start + 2);
-
- if (len == 0) {
- str = empty_string;
- } else {
- str = estrndup(YYCURSOR, len);
- }
-
- YYCURSOR += len + 2;
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- ZVAL_STRINGL(*rval, str, len, 0);
- return 1;
-}
-
-"a:" iv ":" "{" {
- int elements = parse_iv(start + 2);
-
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- Z_TYPE_PP(rval) = IS_ARRAY;
- ALLOC_HASHTABLE(Z_ARRVAL_PP(rval));
-
- zend_hash_init(Z_ARRVAL_PP(rval), elements + 1, NULL, ZVAL_PTR_DTOR, 0);
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_ARRVAL_PP(rval), elements)) {
- return 0;
- }
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-}
-
-"o:" iv ":" ["] {
-
- INIT_PZVAL(*rval);
-
- return object_common2(UNSERIALIZE_PASSTHRU,
- object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
-}
-
-"O:" iv ":" ["] {
- int len;
- int elements;
- int len2;
- char *class_name;
- zend_class_entry *ce;
- int incomplete_class = 0;
-
- zval *user_func;
- zval *retval_ptr;
- zval **args[1];
- zval *arg_func_name;
-
- INIT_PZVAL(*rval);
- len2 = len = parse_iv(start + 2);
- if (len == 0)
- return 0;
-
- class_name = estrndup(YYCURSOR, len);
- YYCURSOR += len;
-
- while (len-- > 0) {
- if (class_name[len] >= 'A' && class_name[len] <= 'Z') {
- class_name[len] = class_name[len] - 'A' + 'a';
- }
- }
-
- if (zend_hash_find(CG(class_table), class_name, len2 + 1, (void **) &ce) != SUCCESS) {
- if ((PG(unserialize_callback_func) == NULL) || (PG(unserialize_callback_func)[0] == '\0')) {
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- } else {
- MAKE_STD_ZVAL(user_func);
- ZVAL_STRING(user_func, PG(unserialize_callback_func), 1);
-
- args[0] = &arg_func_name;
- MAKE_STD_ZVAL(arg_func_name);
- ZVAL_STRING(arg_func_name, class_name, 1);
-
- if (call_user_function_ex(CG(function_table), NULL, user_func, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) != SUCCESS) {
- zend_error(E_WARNING, "'unserialize_callback_func' defined (%s) but not found", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- } else {
- if (zend_hash_find(CG(class_table), class_name, len2 + 1, (void **) &ce) != SUCCESS) {
- zend_error(E_WARNING, "'unserialize_callback_func' (%s) hasn't defined the class it was called for", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- } else
- efree(class_name);
- }
- }
- } else
- efree(class_name);
-
- *p = YYCURSOR;
- elements = object_common1(UNSERIALIZE_PASSTHRU, ce);
-
- if (incomplete_class) {
- php_store_class_name(*rval, class_name, len2);
- efree(class_name);
- }
-
- return object_common2(UNSERIALIZE_PASSTHRU, elements);
-}
-
-"}" {
- /* this is the case where we have less data than planned */
- zend_error(E_NOTICE, "Unexpected end of serialized data");
- return 0; /* not sure if it should be 0 or 1 here? */
-}
-
-any { return 0; }
-
-*/
-
- return 0;
-}
diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c
deleted file mode 100644
index bb601a4f31..0000000000
--- a/ext/standard/versioning.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include "php.h"
-#include "php_versioning.h"
-
-#define sign(n) ((n)<0?-1:((n)>0?1:0))
-
-/* {{{ php_canonicalize_version() */
-
-PHPAPI char *
-php_canonicalize_version(const char *version)
-{
- int len = strlen(version);
- char *buf = emalloc(len * 2 + 1), *q, lp, lq;
- const char *p;
-
- if (len == 0) {
- *buf = '\0';
- return buf;
- }
-
- p = version;
- q = buf;
- *q++ = lp = *p++;
- lq = '\0';
- while (*p) {
-/* s/[-_+]/./g;
- * s/([^\d\.])([^\D\.])/$1.$2/g;
- * s/([^\D\.])([^\d\.])/$1.$2/g;
- */
-#define isdigdot(x) (isdigit(x)||(x)=='.')
-#define isspecialver(x) ((x)=='-'||(x)=='_'||(x)=='+')
-
- lq = *(q - 1);
- if ((isdigdot(*p) != isdigdot(lp) || isspecialver(*p)) &&
- (lq != '.' && *p != '.')) {
- lq = *q;
- *q++ = '.';
- }
- *q++ = lp = *p++;
- }
- *q++ = '\0';
- return buf;
-}
-
-/* }}} */
-/* {{{ compare_special_version_forms() */
-
-static int
-compare_special_version_forms(const char *form1, const char *form2)
-{
- int i, found1 = -1, found2 = -1;
- char **pp;
- static char *special_forms[] = {
- "dev",
- "a",
- "b",
- "RC",
- "#N#",
- "pl",
- NULL
- };
-
- for (pp = special_forms, i = 0; *pp != NULL; pp++, i++) {
- if (strncmp(form1, *pp, strlen(*pp)) == 0) {
- found1 = i;
- break;
- }
- }
- for (pp = special_forms, i = 0; *pp != NULL; pp++, i++) {
- if (strncmp(form2, *pp, strlen(*pp)) == 0) {
- found2 = i;
- break;
- }
- }
- return sign(found1 - found2);
-}
-
-/* }}} */
-/* {{{ php_version_compare() */
-
-PHPAPI int
-php_version_compare(const char *orig_ver1, const char *orig_ver2)
-{
- char *ver1;
- char *ver2;
- char *p1, *p2, *n1, *n2;
- long l1, l2;
- int compare = 0;
-
- if (!*orig_ver1 || !*orig_ver2) {
- if (!*orig_ver1 && !*orig_ver2) {
- return 0;
- } else {
- return *orig_ver1 ? 1 : -1;
- }
- }
- ver1 = php_canonicalize_version(orig_ver1);
- ver2 = php_canonicalize_version(orig_ver2);
- p1 = n1 = ver1;
- p2 = n2 = ver2;
- while (*p1 && *p2 && n1 && n2) {
- if ((n1 = strchr(p1, '.')) != NULL) {
- *n1 = '\0';
- }
- if ((n2 = strchr(p2, '.')) != NULL) {
- *n2 = '\0';
- }
- if (isdigit(*p1) && isdigit(*p2)) {
- /* compare element numerically */
- l1 = strtol(p1, NULL, 10);
- l2 = strtol(p2, NULL, 10);
- compare = sign(l1 - l2);
- } else if (!isdigit(*p1) && !isdigit(*p2)) {
- /* compare element names */
- compare = compare_special_version_forms(p1, p2);
- } else {
- /* mix of names and numbers */
- if (isdigit(*p1)) {
- compare = compare_special_version_forms("#N#", p2);
- } else {
- compare = compare_special_version_forms(p1, "#N#");
- }
- }
- if (compare != 0) {
- break;
- }
- if (n1 != NULL) {
- p1 = n1 + 1;
- }
- if (n2 != NULL) {
- p2 = n2 + 1;
- }
- }
- if (compare == 0) {
- if (n1 != NULL) {
- if (isdigit(*p1)) {
- compare = 1;
- } else {
- compare = php_version_compare(p1, "#N#");
- }
- } else if (n2 != NULL) {
- if (isdigit(*p2)) {
- compare = -1;
- } else {
- compare = php_version_compare("#N#", p2);
- }
- }
- }
- efree(ver1);
- efree(ver2);
- return compare;
-}
-
-/* }}} */
-/* {{{ do_version_compare() */
-
-/* {{{ proto int version_compare(string ver1, string ver2 [, string oper])
- Compares two "PHP-standardized" version number strings */
-
-PHP_FUNCTION(version_compare)
-{
- char *v1, *v2, *op;
- int v1_len, v2_len, op_len;
- int compare, argc;
-
- argc = ZEND_NUM_ARGS();
- if (zend_parse_parameters(argc TSRMLS_CC, "ss|s", &v1, &v1_len, &v2,
- &v2_len, &op, &op_len) == FAILURE) {
- return;
- }
- compare = php_version_compare(v1, v2);
- if (argc == 2) {
- RETURN_LONG(compare);
- }
- if (!strncmp(op, "<", op_len) || !strncmp(op, "lt", op_len)) {
- RETURN_BOOL(compare == -1);
- }
- if (!strncmp(op, "<=", op_len) || !strncmp(op, "le", op_len)) {
- RETURN_BOOL(compare != 1);
- }
- if (!strncmp(op, ">", op_len) || !strncmp(op, "gt", op_len)) {
- RETURN_BOOL(compare == 1);
- }
- if (!strncmp(op, ">=", op_len) || !strncmp(op, "ge", op_len)) {
- RETURN_BOOL(compare != -1);
- }
- if (!strncmp(op, "==", op_len) || !strncmp(op, "=", op_len) || !strncmp(op, "eq", op_len)) {
- RETURN_BOOL(compare == 0);
- }
- if (!strncmp(op, "!=", op_len) || !strncmp(op, "<>", op_len) || !strncmp(op, "ne", op_len)) {
- RETURN_BOOL(compare != 0);
- }
- RETURN_NULL();
-}
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/swf/CREDITS b/ext/swf/CREDITS
deleted file mode 100644
index a215076e37..0000000000
--- a/ext/swf/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SWF
-Sterling Hughes
diff --git a/ext/swf/config.m4 b/ext/swf/config.m4
deleted file mode 100644
index 69f90e12a7..0000000000
--- a/ext/swf/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(swf, for libswf support,
-[ --with-swf[=DIR] Include swf support])
-
-if test "$PHP_SWF" != "no"; then
- if test -r $PHP_SWF/lib/libswf.a; then
- SWF_DIR=$PHP_SWF
- else
- AC_MSG_CHECKING(for libswf in default path)
- for i in /usr/local /usr; do
- if test -r $i/lib/libswf.a; then
- SWF_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$SWF_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libswf distribution -
- swf.h should be <swf-dir>/include and
- libswf.a should be in <swf-dir>/lib)
- fi
-
- PHP_ADD_INCLUDE($SWF_DIR/include)
-
- PHP_SUBST(SWF_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(swf, $SWF_DIR/lib, SWF_SHARED_LIBADD)
- AC_DEFINE(HAVE_SWF,1,[ ])
-
- PHP_NEW_EXTENSION(swf, swf.c, $ext_shared)
-fi
diff --git a/ext/swf/php_swf.h b/ext/swf/php_swf.h
deleted file mode 100644
index 5f1837344f..0000000000
--- a/ext/swf/php_swf.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SWF_H
-#define PHP_SWF_H
-
-#if HAVE_SWF
-
-extern zend_module_entry swf_module_entry;
-#define swf_module_ptr &swf_module_entry
-
-PHP_MINIT_FUNCTION(swf);
-PHP_MINFO_FUNCTION(swf);
-PHP_RINIT_FUNCTION(swf);
-void php_swf_define(INTERNAL_FUNCTION_PARAMETERS, int opt);
-void php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAMETERS, int opt);
-void php_swf_geo_same(INTERNAL_FUNCTION_PARAMETERS, int opt);
-PHP_FUNCTION(swf_openfile);
-PHP_FUNCTION(swf_closefile);
-PHP_FUNCTION(swf_labelframe);
-PHP_FUNCTION(swf_showframe);
-PHP_FUNCTION(swf_setframe);
-PHP_FUNCTION(swf_getframe);
-PHP_FUNCTION(swf_mulcolor);
-PHP_FUNCTION(swf_addcolor);
-PHP_FUNCTION(swf_placeobject);
-PHP_FUNCTION(swf_modifyobject);
-PHP_FUNCTION(swf_removeobject);
-PHP_FUNCTION(swf_nextid);
-PHP_FUNCTION(swf_startdoaction);
-PHP_FUNCTION(swf_enddoaction);
-PHP_FUNCTION(swf_actiongotoframe);
-PHP_FUNCTION(swf_actiongeturl);
-PHP_FUNCTION(swf_actionnextframe);
-PHP_FUNCTION(swf_actionprevframe);
-PHP_FUNCTION(swf_actionplay);
-PHP_FUNCTION(swf_actionstop);
-PHP_FUNCTION(swf_actiontogglequality);
-PHP_FUNCTION(swf_actionwaitforframe);
-PHP_FUNCTION(swf_actionsettarget);
-PHP_FUNCTION(swf_actiongotolabel);
-PHP_FUNCTION(swf_defineline);
-PHP_FUNCTION(swf_definerect);
-PHP_FUNCTION(swf_definepoly);
-PHP_FUNCTION(swf_startshape);
-PHP_FUNCTION(swf_shapelinesolid);
-PHP_FUNCTION(swf_shapefilloff);
-PHP_FUNCTION(swf_shapefillsolid);
-PHP_FUNCTION(swf_shapefillbitmapclip);
-PHP_FUNCTION(swf_shapefillbitmaptile);
-PHP_FUNCTION(swf_shapemoveto);
-PHP_FUNCTION(swf_shapelineto);
-PHP_FUNCTION(swf_shapecurveto);
-PHP_FUNCTION(swf_shapecurveto3);
-PHP_FUNCTION(swf_shapearc);
-PHP_FUNCTION(swf_endshape);
-PHP_FUNCTION(swf_definefont);
-PHP_FUNCTION(swf_setfont);
-PHP_FUNCTION(swf_fontsize);
-PHP_FUNCTION(swf_fontslant);
-PHP_FUNCTION(swf_fonttracking);
-PHP_FUNCTION(swf_getfontinfo);
-PHP_FUNCTION(swf_definetext);
-PHP_FUNCTION(swf_textwidth);
-PHP_FUNCTION(swf_definebitmap);
-PHP_FUNCTION(swf_getbitmapinfo);
-PHP_FUNCTION(swf_startsymbol);
-PHP_FUNCTION(swf_endsymbol);
-PHP_FUNCTION(swf_startbutton);
-PHP_FUNCTION(swf_addbuttonrecord);
-PHP_FUNCTION(swf_oncondition);
-PHP_FUNCTION(swf_endbutton);
-PHP_FUNCTION(swf_viewport);
-PHP_FUNCTION(swf_ortho);
-PHP_FUNCTION(swf_ortho2);
-PHP_FUNCTION(swf_perspective);
-PHP_FUNCTION(swf_polarview);
-PHP_FUNCTION(swf_lookat);
-PHP_FUNCTION(swf_pushmatrix);
-PHP_FUNCTION(swf_popmatrix);
-PHP_FUNCTION(swf_scale);
-PHP_FUNCTION(swf_translate);
-PHP_FUNCTION(swf_rotate);
-PHP_FUNCTION(swf_posround);
-
-
-ZEND_BEGIN_MODULE_GLOBALS(swf)
- int use_file;
- char *tmpfile_name;
-ZEND_END_MODULE_GLOBALS(swf)
-
-#ifdef ZTS
-#define SWFG(v) TSRMG(swf_globals_id, zend_swf_globals *, v)
-#else
-#define SWFG(v) (swf_globals.v)
-#endif
-
-#else
-#define swf_module_ptr NULL
-#endif /* HAVE_FLASH */
-#define phpext_swf_ptr swf_module_ptr
-#endif /* _PHP_FLASH_H */
diff --git a/ext/swf/swf.c b/ext/swf/swf.c
deleted file mode 100644
index 9a5c792c3f..0000000000
--- a/ext/swf/swf.c
+++ /dev/null
@@ -1,1267 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SWF
-#include <stdio.h>
-#include <swf.h>
-#include "ext/standard/info.h"
-#include "php_open_temporary_file.h"
-#include "php_swf.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(swf)
-
-/* {{{ swf_functions[]
- */
-function_entry swf_functions[] = {
- PHP_FE(swf_openfile, NULL)
- PHP_FE(swf_closefile, NULL)
- PHP_FE(swf_labelframe, NULL)
- PHP_FE(swf_showframe, NULL)
- PHP_FE(swf_setframe, NULL)
- PHP_FE(swf_getframe, NULL)
- PHP_FE(swf_mulcolor, NULL)
- PHP_FE(swf_addcolor, NULL)
- PHP_FE(swf_placeobject, NULL)
- PHP_FE(swf_modifyobject, NULL)
- PHP_FE(swf_removeobject, NULL)
- PHP_FE(swf_nextid, NULL)
- PHP_FE(swf_startdoaction, NULL)
- PHP_FE(swf_enddoaction, NULL)
- PHP_FE(swf_actiongotoframe, NULL)
- PHP_FE(swf_actiongeturl, NULL)
- PHP_FE(swf_actionnextframe, NULL)
- PHP_FE(swf_actionprevframe, NULL)
- PHP_FE(swf_actionplay, NULL)
- PHP_FE(swf_actionstop, NULL)
- PHP_FE(swf_actiontogglequality, NULL)
- PHP_FE(swf_actionwaitforframe, NULL)
- PHP_FE(swf_actionsettarget, NULL)
- PHP_FE(swf_actiongotolabel, NULL)
- PHP_FE(swf_defineline, NULL)
- PHP_FE(swf_definerect, NULL)
- PHP_FE(swf_definepoly, NULL)
- PHP_FE(swf_startshape, NULL)
- PHP_FE(swf_shapelinesolid, NULL)
- PHP_FE(swf_shapefilloff, NULL)
- PHP_FE(swf_shapefillsolid, NULL)
- PHP_FE(swf_shapefillbitmapclip, NULL)
- PHP_FE(swf_shapefillbitmaptile, NULL)
- PHP_FE(swf_shapemoveto, NULL)
- PHP_FE(swf_shapelineto, NULL)
- PHP_FE(swf_shapecurveto, NULL)
- PHP_FE(swf_shapecurveto3, NULL)
- PHP_FE(swf_shapearc, NULL)
- PHP_FE(swf_endshape, NULL)
- PHP_FE(swf_definefont, NULL)
- PHP_FE(swf_setfont, NULL)
- PHP_FE(swf_fontsize, NULL)
- PHP_FE(swf_fontslant, NULL)
- PHP_FE(swf_fonttracking, NULL)
- PHP_FE(swf_getfontinfo, NULL)
- PHP_FE(swf_definetext, NULL)
- PHP_FE(swf_textwidth, NULL)
- PHP_FE(swf_definebitmap, NULL)
- PHP_FE(swf_getbitmapinfo, NULL)
- PHP_FE(swf_startsymbol, NULL)
- PHP_FE(swf_endsymbol, NULL)
- PHP_FE(swf_startbutton, NULL)
- PHP_FE(swf_addbuttonrecord, NULL)
- PHP_FE(swf_oncondition, NULL)
- PHP_FE(swf_endbutton, NULL)
- PHP_FE(swf_viewport, NULL)
- PHP_FE(swf_ortho, NULL)
- PHP_FE(swf_ortho2, NULL)
- PHP_FE(swf_perspective, NULL)
- PHP_FE(swf_polarview, NULL)
- PHP_FE(swf_lookat, NULL)
- PHP_FE(swf_pushmatrix, NULL)
- PHP_FE(swf_popmatrix, NULL)
- PHP_FE(swf_scale, NULL)
- PHP_FE(swf_translate, NULL)
- PHP_FE(swf_rotate, NULL)
- PHP_FE(swf_posround, NULL)
- {NULL,NULL,NULL}
-};
-/* }}} */
-
-/* {{{ swf_module_entry
- */
-zend_module_entry swf_module_entry = {
- STANDARD_MODULE_HEADER,
- "swf",
- swf_functions,
- PHP_MINIT(swf),
- NULL,
- PHP_RINIT(swf),
- NULL,
- PHP_MINFO(swf),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SWF
-ZEND_GET_MODULE(swf)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(swf)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "swf support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ _swf_init_globals
- */
-static void _swf_init_globals(zend_swf_globals *sg)
-{
- memset(sg, 0, sizeof(zend_swf_globals));
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(swf)
-{
- ZEND_INIT_MODULE_GLOBALS(swf, _swf_init_globals, NULL);
-
- REGISTER_LONG_CONSTANT("MOD_COLOR", MOD_COLOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MOD_MATRIX", MOD_MATRIX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("TYPE_PUSHBUTTON", TYPE_PUSHBUTTON, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("TYPE_MENUBUTTON", TYPE_MENUBUTTON, CONST_CS | CONST_PERSISTENT);
- REGISTER_DOUBLE_CONSTANT("BSHitTest", BSHitTest, CONST_CS | CONST_PERSISTENT);
- REGISTER_DOUBLE_CONSTANT("BSDown", BSDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_DOUBLE_CONSTANT("BSOver", BSOver, CONST_CS | CONST_PERSISTENT);
- REGISTER_DOUBLE_CONSTANT("BSUp", BSUp, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OverDowntoIdle", OverDowntoIdle, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IdletoOverDown", IdletoOverDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OutDowntoIdle", OutDowntoIdle, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OutDowntoOverDown", OutDowntoOverDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OverDowntoOutDown", OverDowntoOutDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OverUptoOverDown", OverUptoOverDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OverUptoIdle", OverUptoIdle, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IdletoOverUp", IdletoOverUp, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ButtonEnter", ButtonEnter, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ButtonExit", ButtonExit, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MenuEnter", MenuEnter, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MenuExit", MenuExit, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(swf)
-{
- SWFG(use_file) = 0;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto void swf_openfile(string name, float xsize, float ysize, float framerate, float r, float g, float b)
- Create a Shockwave Flash file given by name, with width xsize and height ysize at a frame rate of framerate and a background color specified by a red value of r, green value of g and a blue value of b */
-PHP_FUNCTION(swf_openfile)
-{
- zval **name, **sizeX, **sizeY, **frameRate, **r, **g, **b;
- char *na, *tmpna;
- zend_bool free_na;
-
- if (ZEND_NUM_ARGS() != 7 ||
- zend_get_parameters_ex(7, &name, &sizeX, &sizeY, &frameRate, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(name);
- convert_to_double_ex(sizeX);
- convert_to_double_ex(sizeY);
- convert_to_double_ex(frameRate);
- convert_to_double_ex(r);
- convert_to_double_ex(g);
- convert_to_double_ex(b);
-
-
- tmpna = Z_STRVAL_PP(name);
-
- if (strcasecmp("php://stdout", tmpna) == 0) {
- FILE *fp;
-
- fp = php_open_temporary_file(NULL, "php_swf_stdout", &na TSRMLS_CC);
- if (!fp) {
- free_na = 0;
- RETURN_FALSE;
- }
- VCWD_UNLINK((const char *)na);
- fclose(fp);
- free_na = 1;
- SWFG(use_file) = 0;
- } else {
- na = tmpna;
- SWFG(use_file) = 1;
- }
-
-#ifdef VIRTUAL_DIR
- if (virtual_filepath(na, &tmpna TSRMLS_CC)) {
- if (free_na) {
- efree(na);
- }
- return;
- }
- if (free_na) {
- efree(na);
- }
- na = tmpna;
-#endif
- if (!SWFG(use_file))
- SWFG(tmpfile_name) = na;
-
- swf_openfile(na,(float)Z_DVAL_PP(sizeX), (float)Z_DVAL_PP(sizeY),
- (float)Z_DVAL_PP(frameRate), (float)Z_DVAL_PP(r),
- (float)Z_DVAL_PP(g), (float)Z_DVAL_PP(b));
-#ifdef VIRTUAL_DIR
- free(na);
-#endif
-}
-/* }}} */
-
-/* {{{ proto void swf_closefile(void)
- Close a Shockwave flash file that was opened with swf_openfile */
-PHP_FUNCTION(swf_closefile)
-{
- swf_closefile();
-
- if (!SWFG(use_file)) {
- FILE *f;
- char buf[4096];
- int b;
-
- if ((f = VCWD_FOPEN(SWFG(tmpfile_name), "r")) == NULL) {
- php_error(E_WARNING, "Cannot create temporary file for stdout support with SWF");
- RETURN_NULL();
- }
-
- while ((b = fread(buf, 1, sizeof(buf), f)) > 0)
- php_write(buf, b TSRMLS_CC);
-
- fclose(f);
-
- VCWD_UNLINK((const char *)SWFG(tmpfile_name));
- efree(SWFG(tmpfile_name));
- }
-}
-/* }}} */
-
-/* {{{ proto void swf_labelframe(string name)
- Adds string name to the current frame */
-PHP_FUNCTION(swf_labelframe)
-{
- zval **name;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- swf_labelframe(Z_STRVAL_PP(name));
-}
-/* }}} */
-
-/* {{{ proto void swf_showframe(void)
- Finish the current frame */
-PHP_FUNCTION(swf_showframe)
-{
- swf_showframe();
-}
-/* }}} */
-
-/* {{{ proto void swf_setframe(int frame_number)
- Set the current frame number to the number given by frame_number */
-PHP_FUNCTION(swf_setframe)
-{
- zval **frameno;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &frameno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(frameno);
-
- swf_setframe(Z_LVAL_PP(frameno));
-}
-/* }}} */
-
-/* {{{ proto int swf_getframe(void)
- Returns the current frame */
-PHP_FUNCTION(swf_getframe)
-{
- RETURN_LONG(swf_getframe());
-}
-/* }}} */
-
-/* {{{ col_swf
- */
-void col_swf(INTERNAL_FUNCTION_PARAMETERS, int opt) {
- zval **r, **g, **b, **a;
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(r);
- convert_to_double_ex(g);
- convert_to_double_ex(b);
- convert_to_double_ex(a);
- if (opt) {
- swf_addcolor((float)Z_DVAL_PP(r), (float)Z_DVAL_PP(g), (float)Z_DVAL_PP(b), (float)Z_DVAL_PP(a));
- } else {
- swf_mulcolor((float)Z_DVAL_PP(r), (float)Z_DVAL_PP(g), (float)Z_DVAL_PP(b), (float)Z_DVAL_PP(a));
- }
-}
-/* }}} */
-
-/* {{{ proto void swf_mulcolor(float r, float g, float b, float a)
- Sets the global multiply color to the rgba value specified */
-PHP_FUNCTION(swf_mulcolor)
-{
- col_swf(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto void swf_addcolor(float r, float g, float b, float a)
- Set the global add color to the rgba value specified */
-PHP_FUNCTION(swf_addcolor)
-{
- col_swf(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void swf_placeobject(int objid, int depth)
- Places the object, objid, in the current frame at depth, depth */
-PHP_FUNCTION(swf_placeobject)
-{
- zval **objid, **depth;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &objid, &depth) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(objid);
- convert_to_long_ex(depth);
- swf_placeobject(Z_LVAL_PP(objid), Z_LVAL_PP(depth));
-}
-/* }}} */
-
-/* {{{ proto void swf_modifyobject(int depth, int how)
- Updates the position and/or color of the object */
-PHP_FUNCTION(swf_modifyobject)
-{
- zval **depth, **how;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &depth, &how) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(depth);
- convert_to_long_ex(how);
-
- swf_modifyobject(Z_LVAL_PP(depth), Z_LVAL_PP(how));
-}
-/* }}} */
-
-/* {{{ proto void swf_removeobject(int depth)
- Removes the object at the specified depth */
-PHP_FUNCTION(swf_removeobject)
-{
- zval **depth;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &depth) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(depth);
-
- swf_removeobject(Z_LVAL_PP(depth));
-}
-/* }}} */
-
-/* {{{ proto int swf_nextid(void)
- Returns a free objid */
-PHP_FUNCTION(swf_nextid)
-{
- RETURN_LONG(swf_nextid());
-}
-/* }}} */
-
-/* {{{ proto void swf_startdoaction(void)
- Starts the description of an action list for the current frame */
-PHP_FUNCTION(swf_startdoaction)
-{
- swf_startdoaction();
-}
-/* }}} */
-
-/* {{{ proto void swf_enddoaction(void)
- Ends the list of actions to perform for the current frame */
-PHP_FUNCTION(swf_enddoaction)
-{
- swf_enddoaction();
-}
-/* }}} */
-
-/* {{{ proto void swf_actiongotoframe(int frame_number)
- Causes the Flash movie to display the specified frame, frame_number, and then stop. */
-PHP_FUNCTION(swf_actiongotoframe)
-{
- zval **frameno;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &frameno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(frameno);
-
- swf_actionGotoFrame(Z_LVAL_PP(frameno));
-}
-/* }}} */
-
-/* {{{ proto void swf_actiongeturl(string url, string target)
- Gets the specified url */
-PHP_FUNCTION(swf_actiongeturl)
-{
- zval **url, **target;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &url, &target) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(url);
- convert_to_string_ex(target);
-
- swf_actionGetURL(Z_STRVAL_PP(url), Z_STRVAL_PP(target));
-}
-/* }}} */
-
-/* {{{ proto void swf_actionnextframe(void)
- Goes foward one frame */
-PHP_FUNCTION(swf_actionnextframe)
-{
- swf_actionNextFrame();
-}
-/* }}} */
-
-/* {{{ proto void swf_actionprevframe(void)
- Goes backward one frame */
-PHP_FUNCTION(swf_actionprevframe)
-{
- swf_actionPrevFrame();
-}
-/* }}} */
-
-/* {{{ proto void swf_actionplay(void)
- Starts playing the Flash movie from the current frame */
-PHP_FUNCTION(swf_actionplay)
-{
- swf_actionPlay();
-}
-/* }}} */
-
-/* {{{ proto void swf_actionstop(void)
- Stops playing the Flash movie at the current frame */
-PHP_FUNCTION(swf_actionstop)
-{
- swf_actionStop();
-}
-/* }}} */
-
-/* {{{ proto void swf_actiontogglequality(void)
- Toggles between high and low quality */
-PHP_FUNCTION(swf_actiontogglequality)
-{
- swf_actionToggleQuality();
-}
-/* }}} */
-
-/* {{{ proto void swf_actionwaitforframe(int frame, int skipcount)
- If the specified frame has not been loaded, skip the specified number of actions in the action list */
-PHP_FUNCTION(swf_actionwaitforframe)
-{
- zval **frame, **skipcount;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &frame, &skipcount) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(frame);
- convert_to_long_ex(skipcount);
- swf_actionWaitForFrame(Z_LVAL_PP(frame), Z_LVAL_PP(skipcount));
-}
-/* }}} */
-
-/* {{{ proto void swf_actionsettarget(string target)
- Sets the context for actions */
-PHP_FUNCTION(swf_actionsettarget)
-{
- zval **target;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &target) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(target);
- swf_actionSetTarget(Z_STRVAL_PP(target));
-}
-/* }}} */
-
-/* {{{ proto void swf_actiongotolabel(string label)
- Causes the flash movie to display the frame with the given label and then stop */
-PHP_FUNCTION(swf_actiongotolabel)
-{
- zval **label;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &label) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(label);
- swf_actionGoToLabel(Z_STRVAL_PP(label));
-}
-/* }}} */
-
-/* {{{ php_swf_define
- */
-void php_swf_define(INTERNAL_FUNCTION_PARAMETERS, int opt)
-{
- zval **objid, **x1, **y1, **x2, **y2, **width;
- if (ZEND_NUM_ARGS() != 6 ||
- zend_get_parameters_ex(6, &objid, &x1, &y1, &x2, &y2, &width) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(objid);
- convert_to_double_ex(x1);
- convert_to_double_ex(y1);
- convert_to_double_ex(x2);
- convert_to_double_ex(y2);
- convert_to_double_ex(width);
-
- if (opt) {
- swf_defineline(Z_LVAL_PP(objid), (float)Z_DVAL_PP(x1), (float)Z_DVAL_PP(y1),
- (float)Z_DVAL_PP(x2), (float)Z_DVAL_PP(y2), (float)Z_DVAL_PP(width));
- } else {
- swf_definerect(Z_LVAL_PP(objid), (float)Z_DVAL_PP(x1), (float)Z_DVAL_PP(y1),
- (float)Z_DVAL_PP(x2), (float)Z_DVAL_PP(y2), (float)Z_DVAL_PP(width));
- }
-}
-/* }}} */
-
-/* {{{ proto void swf_defineline(int objid, float x1, float y1, float x2, float y2, float width)
- Create a line with object id, objid, starting from x1, y1 and going to x2, y2 with width, width */
-PHP_FUNCTION(swf_defineline)
-{
- php_swf_define(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void swf_definerect(int objid, float x1, float y1, float x2, float y2, float width)
- Create a rectangle with object id, objid, the upper lefthand coordinate is given by x1, y1 the bottom right coordinate is x2, y2 and with is the width of the line */
-PHP_FUNCTION(swf_definerect)
-{
- php_swf_define(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto void swf_definepoly(int obj_id, array coords, int npoints, float width)
- Define a Polygon from an array of x,y coordinates, coords. */
-PHP_FUNCTION(swf_definepoly)
-{
- zval **obj_id, **coordinates, **NumPoints, **width, **var;
- int npoints, i;
- float coords[256][2];
-
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &obj_id, &coordinates, &NumPoints, &width) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(obj_id);
- convert_to_long_ex(NumPoints);
- convert_to_double_ex(width);
-
- if (Z_TYPE_PP(coordinates) != IS_ARRAY) {
- return;
- php_error(E_WARNING, "Wrong datatype of second argument to swf_definepoly");
- }
-
- npoints = Z_LVAL_PP(NumPoints);
- for (i = 0; i < npoints; i++)
- {
- if (zend_hash_index_find(Z_ARRVAL_PP(coordinates), (i * 2), (void **)&var) == SUCCESS) {
- SEPARATE_ZVAL(var);
- convert_to_double_ex(var);
- coords[i][0] = (float)Z_DVAL_PP(var);
- }
-
- if (zend_hash_index_find(Z_ARRVAL_PP(coordinates), (i * 2) + 1, (void **)&var) == SUCCESS) {
- SEPARATE_ZVAL(var);
- convert_to_double_ex(var);
- coords[i][1] = (float)Z_DVAL_PP(var);
- }
-
- }
- swf_definepoly(Z_LVAL_PP(obj_id), coords, npoints, (float)Z_DVAL_PP(width));
-}
-/* }}} */
-
-/* {{{ proto void swf_startshape(int objid)
- Initialize a new shape with object id, objid */
-PHP_FUNCTION(swf_startshape)
-{
- zval **objid;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &objid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(objid);
- swf_startshape(Z_LVAL_PP(objid));
-}
-/* }}} */
-
-/* {{{ proto void swf_shapelinesolid(float r, float g, float b, float a, float width)
- Create a line with color defined by rgba, and a width of width */
-PHP_FUNCTION(swf_shapelinesolid)
-{
- zval **r, **g, **b, **a, **width;
- if (ZEND_NUM_ARGS() != 5 ||
- zend_get_parameters_ex(5, &r, &g, &b, &a, &width) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(r);
- convert_to_double_ex(g);
- convert_to_double_ex(b);
- convert_to_double_ex(a);
- convert_to_double_ex(width);
- swf_shapelinesolid((float)Z_DVAL_PP(r), (float)Z_DVAL_PP(g), (float)Z_DVAL_PP(b), (float)Z_DVAL_PP(a),
- (float)Z_DVAL_PP(width));
-}
-/* }}} */
-
-/* {{{ proto void swf_shapefilloff(void)
- Turns off filling */
-PHP_FUNCTION(swf_shapefilloff)
-{
- swf_shapefilloff();
-}
-/* }}} */
-
-/* {{{ proto void swf_shapefillsolid(float r, float g, float b, float a)
- Sets the current fill style to a solid fill with the specified rgba color */
-PHP_FUNCTION(swf_shapefillsolid)
-{
- zval **r, **g, **b, **a;
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(r);
- convert_to_double_ex(g);
- convert_to_double_ex(b);
- convert_to_double_ex(a);
-
- swf_shapefillsolid((float)Z_DVAL_PP(r), (float)Z_DVAL_PP(g), (float)Z_DVAL_PP(b), (float)Z_DVAL_PP(a));
-}
-/* }}} */
-
-/* {{{ php_swf_fill_bitmap
- */
-void php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAMETERS, int opt)
-{
- zval **bitmapid;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &bitmapid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(bitmapid);
-
- if (opt) {
- swf_shapefillbitmapclip(Z_LVAL_PP(bitmapid));
- } else {
- swf_shapefillbitmaptile(Z_LVAL_PP(bitmapid));
- }
-}
-/* }}} */
-
-/* {{{ proto void swf_shapefillbitmapclip(int bitmapid)
- Sets the current fill mode to clipped bitmap fill. Pixels from the previously defined bitmapid will be used to fill areas */
-PHP_FUNCTION(swf_shapefillbitmapclip)
-{
- php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void swf_shapefillbitmaptile(int bitmapid)
- Sets the current fill mode to tiled bitmap fill. Pixels from the previously defined bitmapid will be used to fill areas */
-PHP_FUNCTION(swf_shapefillbitmaptile)
-{
- php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ php_swf_shape
- */
-void php_swf_shape(INTERNAL_FUNCTION_PARAMETERS, int opt)
-{
- zval **x, **y;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
-
- if (opt) {
- swf_shapemoveto((float)Z_DVAL_PP(x), (float)Z_DVAL_PP(y));
- } else {
- swf_shapelineto((float)Z_DVAL_PP(x), (float)Z_DVAL_PP(y));
- }
-}
-/* }}} */
-
-/* {{{ proto void swf_shapemoveto(float x, float y)
- swf_shapemoveto moves the current position to the given x,y. */
-PHP_FUNCTION(swf_shapemoveto)
-{
- php_swf_shape(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void swf_shapelineto(float x, float y)
- Draws a line from the current position to x,y, the current position is then set to x,y */
-PHP_FUNCTION(swf_shapelineto)
-{
- php_swf_shape(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto void swf_shapecurveto(float x1, float y1, float x2, float y2)
- Draws a quadratic bezier curve starting at the current position using x1, y1 as an off curve control point and using x2, y2 as the end point. The current position is then set to x2, y2. */
-PHP_FUNCTION(swf_shapecurveto)
-{
- zval **x1, **y1, **x2, **y2;
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &x1, &y1, &x2, &y2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x1);
- convert_to_double_ex(y1);
- convert_to_double_ex(x2);
- convert_to_double_ex(y2);
-
- swf_shapecurveto((float)Z_DVAL_PP(x1), (float)Z_DVAL_PP(y1), (float)Z_DVAL_PP(x2), (float)Z_DVAL_PP(y2));
-}
-/* }}} */
-
-/* {{{ proto void swf_shapecurveto3(float x1, float y1, float x2, float y2, float x3, float y3)
- Draws a cubic bezier curve starting at the current position using x1, y1 and x2, y2 as off curve control points and using x3,y3 as the end point. The current position is then sent to x3, y3 */
-PHP_FUNCTION(swf_shapecurveto3)
-{
- zval **x1, **y1, **x2, **y2, **x3, **y3;
- if (ZEND_NUM_ARGS() != 6 ||
- zend_get_parameters_ex(6, &x1, &y1, &x2, &y2, &x3, &y3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x1);
- convert_to_double_ex(y1);
- convert_to_double_ex(x2);
- convert_to_double_ex(y2);
- convert_to_double_ex(x3);
- convert_to_double_ex(y3);
-
- swf_shapecurveto3((float)Z_DVAL_PP(x1), (float)Z_DVAL_PP(y1), (float)Z_DVAL_PP(x2), (float)Z_DVAL_PP(y2),
- (float)Z_DVAL_PP(x3), (float)Z_DVAL_PP(y3));
-}
-/* }}} */
-
-/* {{{ proto void swf_shapearc(float x, float y, float r, float ang1, float ang2)
- Draws a circular arc from ang1 to ang2. The center of the circle is given by x, and y. r specifies the radius of the arc */
-PHP_FUNCTION(swf_shapearc)
-{
- zval **x, **y, **r, **ang1, **ang2;
- if (ZEND_NUM_ARGS() != 5 ||
- zend_get_parameters_ex(5, &x, &y, &r, &ang1, &ang2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- convert_to_double_ex(r);
- convert_to_double_ex(ang1);
- convert_to_double_ex(ang2);
-
- swf_shapearc((float)Z_DVAL_PP(x), (float)Z_DVAL_PP(y), (float)Z_DVAL_PP(r), (float)Z_DVAL_PP(ang1),
- (float)Z_DVAL_PP(ang2));
-}
-/* }}} */
-
-/* {{{ proto void swf_endshape(void)
- Completes the definition of the current shape */
-PHP_FUNCTION(swf_endshape)
-{
- swf_endshape();
-}
-/* }}} */
-
-/* {{{ proto void swf_definefont(int fontid, string name)
- Defines a font. name specifies the PostScript name of the font to use. This font also becomes the current font. */
-PHP_FUNCTION(swf_definefont)
-{
- zval **fontid, **name;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &fontid, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(fontid);
- convert_to_string_ex(name);
-
- swf_definefont(Z_LVAL_PP(fontid), Z_STRVAL_PP(name));
-}
-/* }}} */
-
-/* {{{ proto void swf_setfont(int fontid)
- Sets fontid to the current font */
-PHP_FUNCTION(swf_setfont)
-{
- zval **fontid;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &fontid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(fontid);
- swf_setfont(Z_LVAL_PP(fontid));
-}
-/* }}} */
-
-/* {{{ proto void swf_fontsize(float height)
- Sets the current font's height to the value specified by height */
-PHP_FUNCTION(swf_fontsize)
-{
- zval **height;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(height);
-
- swf_fontsize((float)Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swf_fontslant(float slant)
- Set the current font slant to the angle indicated by slant */
-PHP_FUNCTION(swf_fontslant)
-{
- zval **slant;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &slant) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(slant);
-
- swf_fontslant((float)Z_DVAL_PP(slant));
-}
-/* }}} */
-
-/* {{{ proto void swf_fonttracking(track)
- Sets the current font tracking to the specified value, track */
-PHP_FUNCTION(swf_fonttracking)
-{
- zval **track;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &track) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(track);
- swf_fonttracking((float)Z_DVAL_PP(track));
-}
-/* }}} */
-
-/* {{{ proto array swf_getfontinfo(void)
- Get information about the current font */
-PHP_FUNCTION(swf_getfontinfo)
-{
- float A_height, x_height;
- swf_getfontinfo(&A_height, &x_height);
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Cannot initialize return value from swf_getfontinfo");
- RETURN_FALSE;
- }
- add_assoc_double(return_value, "Aheight", A_height);
- add_assoc_double(return_value, "xheight", x_height);
-}
-/* }}} */
-
-/* {{{ proto void swf_definetext(int objid, string str, int docCenter)
- defines a text string using the current font, current fontsize and current font slant. If docCenter is 1, the word is centered in x */
-PHP_FUNCTION(swf_definetext)
-{
- zval **objid, **str, **docCenter;
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &objid, &str, &docCenter) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(objid);
- convert_to_string_ex(str);
- convert_to_long_ex(docCenter);
-
- swf_definetext(Z_LVAL_PP(objid), Z_STRVAL_PP(str), Z_LVAL_PP(docCenter));
-}
-/* }}} */
-
-/* {{{ proto void swf_textwidth(string str)
- Calculates the width of a string, str, using the current fontsize & current font */
-PHP_FUNCTION(swf_textwidth)
-{
- zval **str;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- RETURN_DOUBLE((double)swf_textwidth(Z_STRVAL_PP(str)));
-}
-/* }}} */
-
-/* {{{ proto void swf_definebitmap(int objid, string imgname)
- Defines a bitmap given the name of a .gif .rgb .jpeg or .fi image. The image will be converted into Flash jpeg or Flash color map format */
-PHP_FUNCTION(swf_definebitmap)
-{
- zval **objid, **imgname;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &objid, &imgname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(objid);
- convert_to_string_ex(imgname);
-
- swf_definebitmap(Z_LVAL_PP(objid), Z_STRVAL_PP(imgname));
-}
-/* }}} */
-
-/* {{{ proto array swf_getbitmapinfo(int bitmapid)
- Returns an array of information about a bitmap specified by bitmapid */
-PHP_FUNCTION(swf_getbitmapinfo)
-{
- zval **bitmapid;
- int size, width, height;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &bitmapid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(bitmapid);
-
- size = swf_getbitmapinfo(Z_LVAL_PP(bitmapid), &width, &height);
- if (array_init(return_value) == FAILURE) {
- php_error(E_WARNING, "Cannot initialize return value from swf_getbitmapinfo");
- RETURN_FALSE;
- }
-
- add_assoc_long(return_value, "size", size);
- add_assoc_long(return_value, "width", width);
- add_assoc_long(return_value, "height", height);
-}
-/* }}} */
-
-/* {{{ proto void swf_startsymbol(int objid)
- Create a new symbol with object id, objid */
-PHP_FUNCTION(swf_startsymbol)
-{
- zval **objid;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &objid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(objid);
-
- swf_startsymbol(Z_LVAL_PP(objid));
-}
-/* }}} */
-
-/* {{{ proto void swf_endsymbol(void)
- End the current symbol */
-PHP_FUNCTION(swf_endsymbol)
-{
- swf_endsymbol();
-}
-/* }}} */
-
-/* {{{ proto void swf_startbutton(int objid, int type)
- Start a button with an object id, objid and a type of either TYPE_MENUBUTTON or TYPE_PUSHBUTTON */
-PHP_FUNCTION(swf_startbutton)
-{
- zval **objid, **type;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &objid, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(objid);
- convert_to_long_ex(type);
-
- swf_startbutton(Z_LVAL_PP(objid), Z_LVAL_PP(type)); /* TYPE_MENUBUTTON, TYPE_PUSHBUTTON */
-}
-/* }}} */
-
-/* {{{ proto void swf_addbuttonrecord(int state, int objid, int depth)
- Controls the location, appearance and active area of the current button */
-PHP_FUNCTION(swf_addbuttonrecord)
-{
- zval **state, **objid, **depth;
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &state, &objid, &depth) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(state);
- convert_to_long_ex(objid);
- convert_to_long_ex(depth);
-
- swf_addbuttonrecord(Z_LVAL_PP(state), Z_LVAL_PP(objid), Z_LVAL_PP(depth));
-}
-/* }}} */
-
-/* {{{ proto void swf_oncondition(int transitions)
- Describes a transition used to trigger an action list */
-PHP_FUNCTION(swf_oncondition)
-{
- zval **transitions;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &transitions) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(transitions);
-
- swf_oncondition(Z_LVAL_PP(transitions));
-}
-/* }}} */
-
-/* {{{ proto void swf_endbutton(void)
- Complete the definition of the current button */
-PHP_FUNCTION(swf_endbutton)
-{
- swf_endbutton();
-}
-/* }}} */
-
-/* {{{ php_swf_geo_same
- */
-void php_swf_geo_same(INTERNAL_FUNCTION_PARAMETERS, int opt)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- if (ZEND_NUM_ARGS() != 4 ||
- zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(arg1);
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-
- if (opt == 0) {
- swf_viewport(Z_DVAL_PP(arg1), Z_DVAL_PP(arg2), Z_DVAL_PP(arg3),
- Z_DVAL_PP(arg4));
- } else if (opt == 1) {
- swf_ortho2(Z_DVAL_PP(arg1), Z_DVAL_PP(arg2), Z_DVAL_PP(arg3),
- Z_DVAL_PP(arg4));
- } else if (opt == 2) {
- swf_polarview(Z_DVAL_PP(arg1), Z_DVAL_PP(arg2), Z_DVAL_PP(arg3),
- Z_DVAL_PP(arg4));
- } else if (opt == 3) {
- swf_perspective(Z_DVAL_PP(arg1), Z_DVAL_PP(arg2), Z_DVAL_PP(arg3),
- Z_DVAL_PP(arg4));
- }
-}
-/* }}} */
-
-/* {{{ proto void swf_viewport(float xmin, float xmax, float ymin, float ymax)
- Selects an area on the drawing surface for future drawing */
-PHP_FUNCTION(swf_viewport)
-{
- php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto void swf_ortho2(float xmin, float xmax, float ymin, float ymax)
- Defines a 2-D orthographic mapping of user coordinates onto the current viewport */
-PHP_FUNCTION(swf_ortho2)
-{
- php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void swf_ortho(float xmin, float xmax, float ymin, float ymax, float zmin, float zmax)
- Defines an orthographic mapping of user coordinates onto the current viewport */
-PHP_FUNCTION(swf_ortho)
-{
- zval **xmin, **xmax, **ymin, **ymax, **zmin, **zmax;
- if (ZEND_NUM_ARGS() != 6 ||
- zend_get_parameters_ex(6, &xmin, &xmax, &ymin, &ymax, &zmin, &zmax) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(xmin);
- convert_to_double_ex(xmax);
- convert_to_double_ex(ymin);
- convert_to_double_ex(ymax);
- convert_to_double_ex(zmin);
- convert_to_double_ex(zmax);
-
- swf_ortho(Z_DVAL_PP(xmin), Z_DVAL_PP(xmax),
- Z_DVAL_PP(ymin), Z_DVAL_PP(ymax),
- Z_DVAL_PP(zmin), Z_DVAL_PP(zmax));
-}
-/* }}} */
-
-/* {{{ proto void swf_polarview(float dist, float azimuth, float incidence, float twist)
- Defines he viewer's position in polar coordinates */
-PHP_FUNCTION(swf_polarview)
-{
- php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto void swf_perspective(float fovy, float aspect, float near, float far)
- Define a perspective projection transformation. */
-PHP_FUNCTION(swf_perspective)
-{
- php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ proto void swf_lookat(float vx, float vy, float vz, float px, float py, float pz, float twist)
- Defines a viewing transformation by giving the view position vx, vy, vz, and the coordinates of a reference point in the scene at px, py, pz. Twist controls a rotation along the viewer's z axis */
-PHP_FUNCTION(swf_lookat)
-{
- zval **vx, **vy, **vz, **px, **py, **pz, **twist;
- if (ZEND_NUM_ARGS() != 7 ||
- zend_get_parameters_ex(7, &vx, &vy, &vz, &px, &py, &pz, &twist) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(vx);
- convert_to_double_ex(vy);
- convert_to_double_ex(vz);
- convert_to_double_ex(px);
- convert_to_double_ex(py);
- convert_to_double_ex(pz);
- convert_to_double_ex(twist);
-
- swf_lookat(Z_DVAL_PP(vx), Z_DVAL_PP(vy), Z_DVAL_PP(vz),
- Z_DVAL_PP(px), Z_DVAL_PP(py), Z_DVAL_PP(pz), Z_DVAL_PP(twist));
-}
-/* }}} */
-
-/* {{{ proto void swf_pushmatrix(void)
- Push the current transformation matrix onto the stack */
-PHP_FUNCTION(swf_pushmatrix)
-{
- swf_pushmatrix();
-}
-/* }}} */
-
-/* {{{ proto void swf_popmatrix(void)
- Restore a previous transformation matrix */
-PHP_FUNCTION(swf_popmatrix)
-{
- swf_popmatrix();
-}
-/* }}} */
-
-/* {{{ proto void swf_scale(float x, float y, float z)
- Scale the current transformation */
-PHP_FUNCTION(swf_scale)
-{
- zval **x, **y, **z;
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &x, &y, &z) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- convert_to_double_ex(z);
-
- swf_scale(Z_DVAL_PP(x), Z_DVAL_PP(y), Z_DVAL_PP(z));
-}
-/* }}} */
-
-/* {{{ proto void swf_translate(float x, float y, float z)
- Translate the current transformation */
-PHP_FUNCTION(swf_translate)
-{
- zval **x, **y, **z;
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &x, &y, &z) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- convert_to_double_ex(z);
-
- swf_translate(Z_DVAL_PP(x), Z_DVAL_PP(y), Z_DVAL_PP(z));
-}
-/* }}} */
-
-/* {{{ proto void swf_rotate(float angle, string axis)
- Rotate the current transformation by the given angle about x, y, or z axis. The axis may be 'x', 'y', or 'z' */
-PHP_FUNCTION(swf_rotate)
-{
- zval **angle, **axis;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &angle, &axis) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(angle);
- convert_to_string_ex(axis);
-
- swf_rotate(Z_DVAL_PP(angle), (char)(Z_STRVAL_PP(axis))[0]);
-}
-/* }}} */
-
-/* {{{ proto void swf_posround(int doit)
- This enables or disables rounding of the translation when objects are places or moved */
-PHP_FUNCTION(swf_posround)
-{
- zval **doit;
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &doit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(doit);
-
- swf_posround(Z_LVAL_PP(doit));
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/sybase/CREDITS b/ext/sybase/CREDITS
deleted file mode 100644
index 632dcce0ca..0000000000
--- a/ext/sybase/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sybase-DB
-Zeev Suraski
diff --git a/ext/sybase/config.m4 b/ext/sybase/config.m4
deleted file mode 100644
index 5d0c25f73f..0000000000
--- a/ext/sybase/config.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(sybase,for Sybase support,
-[ --with-sybase[=DIR] Include Sybase-DB support. DIR is the Sybase home
- directory, defaults to /home/sybase.])
-
-
-if test "$PHP_SYBASE" != "no"; then
- if test "$PHP_SYBASE" = "yes"; then
- SYBASE_INCDIR=/home/sybase/include
- SYBASE_LIBDIR=/home/sybase/lib
- else
- SYBASE_INCDIR=$PHP_SYBASE/include
- SYBASE_LIBDIR=$PHP_SYBASE/lib
- fi
- PHP_ADD_INCLUDE($SYBASE_INCDIR)
- PHP_ADD_LIBRARY_WITH_PATH(sybdb, $SYBASE_LIBDIR, SYBASE_SHARED_LIBADD)
- PHP_NEW_EXTENSION(sybase, php_sybase_db.c, $ext_shared)
- AC_CHECK_LIB(dnet_stub, dnet_addr,
- [ PHP_ADD_LIBRARY_WITH_PATH(dnet_stub,,SYBASE_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBDNET_STUB,1,[ ])
- ])
- AC_DEFINE(HAVE_SYBASE,1,[ ])
- AC_CHECK_LIB(sybdb, tdsdbopen,
- [ AC_DEFINE(PHP_SYBASE_DBOPEN,tdsdbopen,[ ])
- AC_DEFINE(DBMFIX,1,[ ]) ],
- [ AC_DEFINE(PHP_SYBASE_DBOPEN,dbopen,[ ]) ])
-fi
diff --git a/ext/sybase/php_sybase_db.c b/ext/sybase/php_sybase_db.c
deleted file mode 100644
index 93ab6e3dff..0000000000
--- a/ext/sybase/php_sybase_db.c
+++ /dev/null
@@ -1,1429 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- | php_sybase_get_column_content_with_type() based on code by: |
- | Muhammad A Muquit <MA_Muquit@fccc.edu> |
- | Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_sybase_db.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-
-#if HAVE_SYBASE
-
-#include <sybfront.h>
-#include <sybdb.h>
-#include <syberror.h>
-
-#if BROKEN_SYBASE_PCONNECTS
-#include "http_log.h"
-#endif
-
-/* Moved these structures/defines into the .c file (or into a *private* header),
- because leaving them in php_sybase_db.h caused namespace pollution in
- main/internal_functions.c. */
-
-#define coltype(j) dbcoltype(sybase_ptr->link,j)
-#define intcol(i) ((int) *(DBINT *) dbdata(sybase_ptr->link,i))
-#define smallintcol(i) ((int) *(DBSMALLINT *) dbdata(sybase_ptr->link,i))
-#define tinyintcol(i) ((int) *(DBTINYINT *) dbdata(sybase_ptr->link,i))
-#define anyintcol(j) (coltype(j)==SYBINT4?intcol(j):(coltype(j)==SYBINT2?smallintcol(j):tinyintcol(j)))
-#define charcol(i) ((DBCHAR *) dbdata(sybase_ptr->link,i))
-#define floatcol(i) ((float) *(DBFLT8 *) dbdata(sybase_ptr->link,i))
-
-typedef struct sybase_link_struct sybase_link;
-
-struct sybase_link_struct {
- LOGINREC *login;
- DBPROCESS *link;
- int valid;
-};
-
-#define SYBASE_ROWS_BLOCK 128
-
-typedef struct {
- char *name,*column_source;
- int max_length, numeric;
- int type;
-} sybase_field;
-
-typedef struct {
- pval ***data;
- sybase_field *fields;
- sybase_link *sybase_ptr;
- int cur_row,cur_field;
- int num_rows,num_fields;
-} sybase_result;
-
-
-function_entry sybase_functions[] = {
- PHP_FE(sybase_connect, NULL)
- PHP_FE(sybase_pconnect, NULL)
- PHP_FE(sybase_close, NULL)
- PHP_FE(sybase_select_db, NULL)
- PHP_FE(sybase_query, NULL)
- PHP_FE(sybase_free_result, NULL)
- PHP_FE(sybase_get_last_message, NULL)
- PHP_FE(sybase_num_rows, NULL)
- PHP_FE(sybase_num_fields, NULL)
- PHP_FE(sybase_fetch_row, NULL)
- PHP_FE(sybase_fetch_array, NULL)
- PHP_FE(sybase_fetch_object, NULL)
- PHP_FE(sybase_data_seek, NULL)
- PHP_FE(sybase_fetch_field, NULL)
- PHP_FE(sybase_field_seek, NULL)
- PHP_FE(sybase_result, NULL)
- PHP_FE(sybase_affected_rows, NULL)
- PHP_FE(sybase_min_error_severity, NULL)
- PHP_FE(sybase_min_message_severity, NULL)
- PHP_FALIAS(mssql_connect, sybase_connect, NULL)
- PHP_FALIAS(mssql_pconnect, sybase_pconnect, NULL)
- PHP_FALIAS(mssql_close, sybase_close, NULL)
- PHP_FALIAS(mssql_select_db, sybase_select_db, NULL)
- PHP_FALIAS(mssql_query, sybase_query, NULL)
- PHP_FALIAS(mssql_free_result, sybase_free_result, NULL)
- PHP_FALIAS(mssql_get_last_message, sybase_get_last_message, NULL)
- PHP_FALIAS(mssql_num_rows, sybase_num_rows, NULL)
- PHP_FALIAS(mssql_num_fields, sybase_num_fields, NULL)
- PHP_FALIAS(mssql_fetch_row, sybase_fetch_row, NULL)
- PHP_FALIAS(mssql_fetch_array, sybase_fetch_array, NULL)
- PHP_FALIAS(mssql_fetch_object, sybase_fetch_object, NULL)
- PHP_FALIAS(mssql_data_seek, sybase_data_seek, NULL)
- PHP_FALIAS(mssql_fetch_field, sybase_fetch_field, NULL)
- PHP_FALIAS(mssql_field_seek, sybase_field_seek, NULL)
- PHP_FALIAS(mssql_result, sybase_result, NULL)
- PHP_FALIAS(mssql_affected_rows, sybase_affected_rows, NULL)
- PHP_FALIAS(mssql_min_error_severity, sybase_min_error_severity, NULL)
- PHP_FALIAS(mssql_min_message_severity, sybase_min_message_severity, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry sybase_module_entry = {
- STANDARD_MODULE_HEADER,
- "sybase", sybase_functions, PHP_MINIT(sybase), PHP_MSHUTDOWN(sybase), PHP_RINIT(sybase), PHP_RSHUTDOWN(sybase), PHP_MINFO(sybase), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_SYBASE
-ZEND_GET_MODULE(sybase)
-#endif
-
-THREAD_LS sybase_module php_sybase_module;
-
-
-#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING,"Sybase: A link to the server could not be established"); RETURN_FALSE; } }
-
-
-static void php_sybase_get_column_content(sybase_link *sybase_ptr,int offset,pval **result_ptr, int column_type);
-
-/* error handler */
-static int php_sybase_error_handler(DBPROCESS *dbproc,int severity,int dberr,
- int oserr,char *dberrstr,char *oserrstr)
-{
- if (severity >= php_sybase_module.min_error_severity) {
- php_error(E_WARNING,"Sybase error: %s (severity %d)",dberrstr,severity);
- }
- return INT_CANCEL;
-}
-
-/* message handler */
-static int php_sybase_message_handler(DBPROCESS *dbproc,DBINT msgno,int msgstate,
- int severity,char *msgtext,char *srvname,
- char *procname,DBUSMALLINT line)
-{
- if (severity >= php_sybase_module.min_message_severity) {
- php_error(E_WARNING,"Sybase message: %s (severity %d)",msgtext,severity);
- }
- STR_FREE(php_sybase_module.server_message);
- php_sybase_module.server_message = estrdup(msgtext);
- return 0;
-}
-
-
-static int _clean_invalid_results(list_entry *le TSRMLS_DC)
-{
- if (Z_TYPE_P(le) == php_sybase_module.le_result) {
- sybase_link *sybase_ptr = ((sybase_result *) le->ptr)->sybase_ptr;
-
- if (!sybase_ptr->valid) {
- return 1;
- }
- }
- return 0;
-}
-
-
-static void _free_sybase_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_result *result = (sybase_result *)rsrc->ptr;
- int i,j;
-
- if (result->data) {
- for (i=0; i<result->num_rows; i++) {
- for (j=0; j<result->num_fields; j++) {
- zval_ptr_dtor(&result->data[i][j]);
- }
- efree(result->data[i]);
- }
- efree(result->data);
- }
-
- if (result->fields) {
- for (i=0; i<result->num_fields; i++) {
- STR_FREE(result->fields[i].name);
- STR_FREE(result->fields[i].column_source);
- }
- efree(result->fields);
- }
- efree(result);
-}
-
-
-static void _close_sybase_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
-
- sybase_ptr->valid = 0;
-
- /*
- this can cause crashes in the current model.
- if the resource gets destroyed via destroy_resource_list() resource_list
- will *not* be in a consistent state. thies@thieso.net
- */
-
- zend_hash_apply(&EG(regular_list), (apply_func_t) _clean_invalid_results TSRMLS_CC);
- dbclose(sybase_ptr->link);
- dbloginfree(sybase_ptr->login);
- efree(sybase_ptr);
- php_sybase_module.num_links--;
-}
-
-
-static void _close_sybase_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
-
- dbclose(sybase_ptr->link);
- dbloginfree(sybase_ptr->login);
- free(sybase_ptr);
- php_sybase_module.num_persistent--;
- php_sybase_module.num_links--;
-}
-
-
-PHP_MINIT_FUNCTION(sybase)
-{
- char *interface_file;
-
- if (dbinit()==FAIL) {
- return FAILURE;
- }
- dberrhandle((EHANDLEFUNC) php_sybase_error_handler);
- dbmsghandle((MHANDLEFUNC) php_sybase_message_handler);
-
- if (cfg_get_string("sybase.interface_file",&interface_file)==SUCCESS) {
- dbsetifile(interface_file);
- }
- if (cfg_get_long("sybase.allow_persistent",&php_sybase_module.allow_persistent)==FAILURE) {
- php_sybase_module.allow_persistent=1;
- }
- if (cfg_get_long("sybase.max_persistent",&php_sybase_module.max_persistent)==FAILURE) {
- php_sybase_module.max_persistent=-1;
- }
- if (cfg_get_long("sybase.max_links",&php_sybase_module.max_links)==FAILURE) {
- php_sybase_module.max_links=-1;
- }
- if (cfg_get_long("sybase.min_error_severity",&php_sybase_module.cfg_min_error_severity)==FAILURE) {
- php_sybase_module.cfg_min_error_severity=10;
- }
- if (cfg_get_long("sybase.min_message_severity",&php_sybase_module.cfg_min_message_severity)==FAILURE) {
- php_sybase_module.cfg_min_message_severity=10;
- }
- if (cfg_get_long("sybase.compatability_mode",&php_sybase_module.compatability_mode)==FAILURE) {
- php_sybase_module.compatability_mode = 0;
- }
-
- php_sybase_module.num_persistent=0;
- php_sybase_module.le_link = zend_register_list_destructors_ex(_close_sybase_link, NULL, "sybase-db link", module_number);
- php_sybase_module.le_plink = zend_register_list_destructors_ex(NULL, _close_sybase_plink, "sybase-db link persistent", module_number);
- php_sybase_module.le_result = zend_register_list_destructors_ex(_free_sybase_result, NULL, "sybase-db result", module_number);
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(sybase)
-{
- php_sybase_module.default_link=-1;
- php_sybase_module.num_links = php_sybase_module.num_persistent;
- php_sybase_module.appname = estrndup("PHP 4.0",7);
- php_sybase_module.server_message = empty_string;
- php_sybase_module.min_error_severity = php_sybase_module.cfg_min_error_severity;
- php_sybase_module.min_message_severity = php_sybase_module.cfg_min_message_severity;
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(sybase)
-{
- dbexit();
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(sybase)
-{
- efree(php_sybase_module.appname);
- STR_FREE(php_sybase_module.server_message);
- return SUCCESS;
-}
-
-static void php_sybase_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
-{
- char *user=NULL,*passwd=NULL,*host=NULL,*charset=NULL,*appname=NULL;
- char *hashed_details;
- int hashed_details_length;
- sybase_link sybase,*sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- hashed_details_length=6+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- strcpy(hashed_details,"sybase___");
- break;
- case 1: {
- pval *yyhost;
-
- if (getParameters(ht, 1, &yyhost)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- host = Z_STRVAL_P(yyhost);
- hashed_details_length = Z_STRLEN_P(yyhost)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s____",Z_STRVAL_P(yyhost));
- }
- break;
- case 2: {
- pval *yyhost,*yyuser;
-
- if (getParameters(ht, 2, &yyhost, &yyuser)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s___",Z_STRVAL_P(yyhost),Z_STRVAL_P(yyuser));
- }
- break;
- case 3: {
- pval *yyhost,*yyuser,*yypasswd;
-
- if (getParameters(ht, 3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- convert_to_string(yypasswd);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd = Z_STRVAL_P(yypasswd);
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+Z_STRLEN_P(yypasswd)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s_%s__",Z_STRVAL_P(yyhost),Z_STRVAL_P(yyuser),Z_STRVAL_P(yypasswd)); /* SAFE */
- }
- break;
- case 4: {
- pval *yyhost,*yyuser,*yypasswd,*yycharset;
-
- if (getParameters(ht, 4, &yyhost, &yyuser, &yypasswd, &yycharset) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- convert_to_string(yypasswd);
- convert_to_string(yycharset);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd = Z_STRVAL_P(yypasswd);
- charset = Z_STRVAL_P(yycharset);
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+Z_STRLEN_P(yypasswd)+Z_STRLEN_P(yycharset)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s_%s_%s_",Z_STRVAL_P(yyhost),Z_STRVAL_P(yyuser),Z_STRVAL_P(yypasswd),Z_STRVAL_P(yycharset)); /* SAFE */
- }
- break;
- case 5: {
- pval *yyhost,*yyuser,*yypasswd,*yycharset, *yyappname;
-
- if (getParameters(ht, 5, &yyhost, &yyuser, &yypasswd, &yycharset, &yyappname) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- convert_to_string(yypasswd);
- convert_to_string(yycharset);
- convert_to_string(yyappname);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd = Z_STRVAL_P(yypasswd);
- charset = Z_STRVAL_P(yycharset);
- appname = Z_STRVAL_P(yyappname);
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+Z_STRLEN_P(yypasswd)+Z_STRLEN_P(yycharset)+Z_STRLEN_P(yyappname)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s_%s_%s_%s",Z_STRVAL_P(yyhost),Z_STRVAL_P(yyuser),Z_STRVAL_P(yypasswd),Z_STRVAL_P(yycharset),Z_STRVAL_P(yyappname)); /* SAFE */
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- /* set a DBLOGIN record */
- if ((sybase.login=dblogin())==NULL) {
- php_error(E_WARNING,"Sybase: Unable to allocate login record");
- RETURN_FALSE;
- }
-
- if (user) {
- DBSETLUSER(sybase.login,user);
- }
- if (passwd) {
- DBSETLPWD(sybase.login,passwd);
- }
- if (charset) {
- DBSETLCHARSET(sybase.login,charset);
- }
- if (appname) {
- DBSETLAPP(sybase.login,appname);
- } else {
- DBSETLAPP(sybase.login,php_sybase_module.appname);
- }
-
- sybase.valid = 1;
-
- if (!php_sybase_module.allow_persistent) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (php_sybase_module.max_links!=-1 && php_sybase_module.num_links>=php_sybase_module.max_links) {
- php_error(E_WARNING,"Sybase: Too many open links (%d)",php_sybase_module.num_links);
- efree(hashed_details);
- dbloginfree(sybase.login);
- RETURN_FALSE;
- }
- if (php_sybase_module.max_persistent!=-1 && php_sybase_module.num_persistent>=php_sybase_module.max_persistent) {
- php_error(E_WARNING,"Sybase: Too many open persistent links (%d)",php_sybase_module.num_persistent);
- efree(hashed_details);
- dbloginfree(sybase.login);
- RETURN_FALSE;
- }
- /* create the link */
- if ((sybase.link=PHP_SYBASE_DBOPEN(sybase.login,host))==FAIL) {
- /*php_error(E_WARNING,"Sybase: Unable to connect to server: %s",sybase_error(sybase));*/
- efree(hashed_details);
- dbloginfree(sybase.login);
- RETURN_FALSE;
- }
-
- if (dbsetopt(sybase.link,DBBUFFER,"2",-1)==FAIL) {
- efree(hashed_details);
- dbloginfree(sybase.login);
- dbclose(sybase.link);
- RETURN_FALSE;
- }
-
- /* hash it up */
- sybase_ptr = (sybase_link *) malloc(sizeof(sybase_link));
- memcpy(sybase_ptr,&sybase,sizeof(sybase_link));
- Z_TYPE(new_le) = php_sybase_module.le_plink;
- new_le.ptr = sybase_ptr;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry),NULL)==FAILURE) {
- free(sybase_ptr);
- efree(hashed_details);
- dbloginfree(sybase.login);
- RETURN_FALSE;
- }
- php_sybase_module.num_persistent++;
- php_sybase_module.num_links++;
- } else { /* we do */
- if (Z_TYPE_P(le) != php_sybase_module.le_plink) {
- php_error(E_WARNING,"Sybase: Hashed persistent link is not a Sybase link!");
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) le->ptr;
- /* test that the link hasn't died */
- if (DBDEAD(sybase_ptr->link)==TRUE) {
- if ((sybase_ptr->link=PHP_SYBASE_DBOPEN(sybase_ptr->login,host))==FAIL) {
- /*php_error(E_WARNING,"Sybase: Link to server lost, unable to reconnect");*/
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (dbsetopt(sybase_ptr->link,DBBUFFER,"2",-1)==FAIL) {
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- }
- Z_LVAL_P(return_value) = zend_list_insert(sybase_ptr,php_sybase_module.le_plink);
- Z_TYPE_P(return_value) = IS_LONG;
- } else { /* non persistent */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual sybase link sits.
- * if it doesn't, open a new sybase link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),hashed_details,hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==php_sybase_module.le_link || type==php_sybase_module.le_plink)) {
- Z_LVAL_P(return_value) = php_sybase_module.default_link = link;
- Z_TYPE_P(return_value) = IS_LONG;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (php_sybase_module.max_links!=-1 && php_sybase_module.num_links>=php_sybase_module.max_links) {
- php_error(E_WARNING,"Sybase: Too many open links (%d)",php_sybase_module.num_links);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if ((sybase.link=PHP_SYBASE_DBOPEN(sybase.login,host))==NULL) {
- /*php_error(E_WARNING,"Sybase: Unable to connect to server: %s",sybase_error(sybase));*/
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (dbsetopt(sybase.link,DBBUFFER,"2",-1)==FAIL) {
- efree(hashed_details);
- dbloginfree(sybase.login);
- dbclose(sybase.link);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- sybase_ptr = (sybase_link *) emalloc(sizeof(sybase_link));
- memcpy(sybase_ptr,&sybase,sizeof(sybase_link));
- Z_LVAL_P(return_value) = zend_list_insert(sybase_ptr,php_sybase_module.le_link);
- Z_TYPE_P(return_value) = IS_LONG;
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- php_sybase_module.num_links++;
- }
- efree(hashed_details);
- php_sybase_module.default_link=Z_LVAL_P(return_value);
-}
-
-
-static int php_sybase_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (php_sybase_module.default_link==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
- }
- return php_sybase_module.default_link;
-}
-
-
-/* {{{ proto int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open Sybase server connection */
-PHP_FUNCTION(sybase_connect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open persistent Sybase connection */
-PHP_FUNCTION(sybase_pconnect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_close([int link_id])
- Close Sybase connection */
-PHP_FUNCTION(sybase_close)
-{
- pval *sybase_link_index;
- int id,type;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_sybase_module.default_link;
- break;
- case 1:
- if (getParameters(ht, 1, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(sybase_link_index);
- id = Z_LVAL_P(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- zend_list_find(id,&type);
- if (type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink) {
- php_error(E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- zend_list_delete(id);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_select_db(string database [, int link_id])
- Select Sybase database */
-PHP_FUNCTION(sybase_select_db)
-{
- pval *db,*sybase_link_index;
- int id,type;
- sybase_link *sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(sybase_link_index);
- id = Z_LVAL_P(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- CHECK_LINK(id);
-
- sybase_ptr = (sybase_link *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink) {
- php_error(E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- convert_to_string(db);
-
- if (dbuse(sybase_ptr->link,Z_STRVAL_P(db))==FAIL) {
- /*php_error(E_WARNING,"Sybase: Unable to select database: %s",sybase_error(sybase));*/
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-
-static void php_sybase_get_column_content(sybase_link *sybase_ptr,int offset,pval **result_ptr, int column_type)
-{
- zval *result;
-
- ALLOC_INIT_ZVAL(result);
- *result_ptr = result;
-
- if (dbdatlen(sybase_ptr->link,offset) == 0) {
- ZVAL_FALSE(result);
- return;
- }
-
- switch (column_type)
- {
- case SYBINT2:
- case SYBINT4: {
- Z_LVAL_P(result) = (long) anyintcol(offset);
- Z_TYPE_P(result) = IS_LONG;
- break;
- }
- case SYBCHAR:
- case SYBTEXT: {
- int length;
- char *data = charcol(offset);
-
- length=dbdatlen(sybase_ptr->link,offset);
- while (length>0 && charcol(offset)[length-1] == ' ') { /* nuke trailing whitespace */
- length--;
- }
- Z_STRVAL_P(result) = estrndup(data,length);
- Z_STRLEN_P(result) = length;
- Z_TYPE_P(result) = IS_STRING;
- break;
- }
- /*case SYBFLT8:*/
- case SYBREAL: {
- Z_DVAL_P(result) = (double) floatcol(offset);
- Z_TYPE_P(result) = IS_DOUBLE;
- break;
- }
- default: {
- if (dbwillconvert(coltype(offset),SYBCHAR)) {
- char *res_buf;
- int res_length = dbdatlen(sybase_ptr->link,offset);
- register char *p;
-
- switch (coltype(offset)) {
- case SYBBINARY:
- case SYBVARBINARY:
- case SYBCHAR:
- case SYBVARCHAR:
- case SYBTEXT:
- case SYBIMAGE:
- break;
- default:
- /* take no chances, no telling how big the result would really be */
- res_length += 20;
- break;
- }
-
- res_buf = (char *) emalloc(res_length+1);
- memset(res_buf,' ',res_length+1); /* XXX i'm sure there's a better way
- but i don't have sybase here to test
- 991105 thies@thieso.net */
- dbconvert(NULL,coltype(offset),dbdata(sybase_ptr->link,offset), res_length,SYBCHAR,res_buf,-1);
-
- /* get rid of trailing spaces */
- p = res_buf + res_length;
- while (*p == ' ') {
- p--;
- res_length--;
- }
- *(++p) = 0; /* put a trailing NULL */
-
- Z_STRLEN_P(result) = res_length;
- Z_STRVAL_P(result) = res_buf;
- Z_TYPE_P(result) = IS_STRING;
- } else {
- php_error(E_WARNING,"Sybase: column %d has unknown data type (%d)", offset, coltype(offset));
- ZVAL_FALSE(result);
- }
- }
- }
-}
-
-
-/* {{{ proto int sybase_query(string query [, int link_id])
- Send Sybase query */
-PHP_FUNCTION(sybase_query)
-{
- pval *query,*sybase_link_index;
- int id,type,retvalue;
- sybase_link *sybase_ptr;
- sybase_result *result;
- int num_fields;
- int blocks_initialized=1;
- int i,j;
- int *column_types;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_sybase_module.default_link;
- break;
- case 2:
- if (getParameters(ht, 2, &query, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(sybase_link_index);
- id = Z_LVAL_P(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- sybase_ptr = (sybase_link *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink) {
- php_error(E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- convert_to_string(query);
- if (dbcmd(sybase_ptr->link,Z_STRVAL_P(query))==FAIL) {
- /*php_error(E_WARNING,"Sybase: Unable to set query");*/
- RETURN_FALSE;
- }
- if (dbsqlexec(sybase_ptr->link)==FAIL || dbresults(sybase_ptr->link)==FAIL) {
- /*php_error(E_WARNING,"Sybase: Query failed");*/
- RETURN_FALSE;
- }
-
- /* The following is more or less the equivalent of mysql_store_result().
- * fetch all rows from the server into the row buffer, thus:
- * 1) Being able to fire up another query without explicitly reading all rows
- * 2) Having numrows accessible
- */
-
- retvalue=dbnextrow(sybase_ptr->link);
-
- if (retvalue==FAIL) {
- RETURN_FALSE;
- }
-
- num_fields = dbnumcols(sybase_ptr->link);
- if (num_fields<=0) {
- RETURN_TRUE;
- }
-
- column_types = (int *) emalloc(sizeof(int) * num_fields);
- for (i=0; i<num_fields; i++) {
- column_types[i] = coltype(i+1);
- }
-
- result = (sybase_result *) emalloc(sizeof(sybase_result));
- result->data = (pval ***) emalloc(sizeof(pval **)*SYBASE_ROWS_BLOCK);
- result->sybase_ptr = sybase_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
- result->num_fields = num_fields;
-
- i=0;
- while (retvalue!=FAIL && retvalue!=NO_MORE_ROWS) {
- result->num_rows++;
- if (result->num_rows > blocks_initialized*SYBASE_ROWS_BLOCK) {
- result->data = (pval ***) erealloc(result->data,sizeof(pval **)*SYBASE_ROWS_BLOCK*(++blocks_initialized));
- }
- result->data[i] = (pval **) emalloc(sizeof(pval *)*num_fields);
- for (j=1; j<=num_fields; j++) {
- php_sybase_get_column_content(sybase_ptr, j, &result->data[i][j-1], column_types[j-1]);
- if (!php_sybase_module.compatability_mode) {
- zval *cur_value = result->data[i][j-1];
-
- convert_to_string(cur_value);
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(cur_value) = php_addslashes(Z_STRVAL_P(cur_value), Z_STRLEN_P(cur_value), &Z_STRLEN_P(cur_value),0 TSRMLS_CC);
- }
- }
- }
- retvalue=dbnextrow(sybase_ptr->link);
- dbclrbuf(sybase_ptr->link,DBLASTROW(sybase_ptr->link)-1);
- i++;
- }
- result->num_rows = DBCOUNT(sybase_ptr->link);
-
- result->fields = (sybase_field *) emalloc(sizeof(sybase_field)*num_fields);
- j=0;
- for (i=0; i<num_fields; i++) {
- char *fname = dbcolname(sybase_ptr->link,i+1);
- char computed_buf[16];
-
- if (*fname) {
- result->fields[i].name = estrdup(fname);
- } else {
- if (j>0) {
- snprintf(computed_buf,16,"computed%d",j);
- } else {
- strcpy(computed_buf,"computed");
- }
- result->fields[i].name = estrdup(computed_buf);
- j++;
- }
- result->fields[i].max_length = dbcollen(sybase_ptr->link,i+1);
- result->fields[i].column_source = estrdup(dbcolsource(sybase_ptr->link,i+1));
- if (!result->fields[i].column_source) {
- result->fields[i].column_source = empty_string;
- }
- Z_TYPE(result->fields[i]) = column_types[i];
- /* set numeric flag */
- switch (column_types[i]) {
- case SYBINT2:
- case SYBINT4:
- case SYBFLT8:
- case SYBREAL:
- result->fields[i].numeric = 1;
- break;
- case SYBCHAR:
- case SYBTEXT:
- default:
- result->fields[i].numeric = 0;
- break;
- }
- }
- efree(column_types);
- Z_LVAL_P(return_value) = zend_list_insert(result,php_sybase_module.le_result);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_free_result(int result)
- Free result memory */
-PHP_FUNCTION(sybase_free_result)
-{
- pval *sybase_result_index;
- sybase_result *result;
- int type;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(sybase_result_index);
- if (Z_LVAL_P(sybase_result_index)==0) {
- RETURN_FALSE;
- }
- result = (sybase_result *) zend_list_find(Z_LVAL_P(sybase_result_index),&type);
-
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",Z_LVAL_P(sybase_result_index));
- RETURN_FALSE;
- }
- zend_list_delete(Z_LVAL_P(sybase_result_index));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-
-/* {{{ proto string sybase_get_last_message(void)
- Returns the last message from server (over min_message_severity) */
-PHP_FUNCTION(sybase_get_last_message)
-{
- RETURN_STRING(php_sybase_module.server_message,1);
-}
-/* }}} */
-
-/* {{{ proto int sybase_num_rows(int result)
- Get number of rows in result */
-PHP_FUNCTION(sybase_num_rows)
-{
- pval *result_index;
- int type,id;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(result_index);
- id = Z_LVAL_P(result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = result->num_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int sybase_num_fields(int result)
- Get number of fields in result */
-PHP_FUNCTION(sybase_num_fields)
-{
- pval *result_index;
- int type,id;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(result_index);
- id = Z_LVAL_P(result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = result->num_fields;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_row(int result)
- Get row as enumerated array */
-PHP_FUNCTION(sybase_fetch_row)
-{
- pval *sybase_result_index;
- int type,i,id;
- sybase_result *result;
- pval *field_content;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(sybase_result_index);
- id = Z_LVAL_P(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (i=0; i<result->num_fields; i++) {
- ZVAL_ADDREF(result->data[result->cur_row][i]);
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL);
- }
- result->cur_row++;
-}
-/* }}} */
-
-
-static void php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS)
-{
- pval *sybase_result_index;
- sybase_result *result;
- int type;
- int i;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(sybase_result_index);
- result = (sybase_result *) zend_list_find(Z_LVAL_P(sybase_result_index),&type);
-
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",Z_LVAL_P(sybase_result_index));
- RETURN_FALSE;
- }
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- for (i=0; i<result->num_fields; i++) {
- ZVAL_ADDREF(result->data[result->cur_row][i]);
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL);
- ZVAL_ADDREF(result->data[result->cur_row][i]);
- zend_hash_update(Z_ARRVAL_P(return_value), result->fields[i].name, strlen(result->fields[i].name)+1, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL);
- }
- result->cur_row++;
-}
-
-
-/* {{{ proto object sybase_fetch_object(int result)
- Fetch row as object */
-PHP_FUNCTION(sybase_fetch_object)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- Z_TYPE_P(return_value)=IS_OBJECT;
- Z_OBJPROP_P(return_value) = Z_ARRVAL_P(return_value);
- Z_OBJCE_P(return_value) = ZEND_STANDARD_CLASS_DEF_PTR;
- }
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_array(int result)
- Fetch row as array */
-PHP_FUNCTION(sybase_fetch_array)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_data_seek(int result, int offset)
- Move internal row pointer */
-PHP_FUNCTION(sybase_data_seek)
-{
- pval *sybase_result_index,*offset;
- int type,id;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(sybase_result_index);
- id = Z_LVAL_P(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- convert_to_long(offset);
- if (Z_LVAL_P(offset)<0 || Z_LVAL_P(offset)>=result->num_rows) {
- php_error(E_WARNING,"Sybase: Bad row offset");
- RETURN_FALSE;
- }
-
- result->cur_row = Z_LVAL_P(offset);
- RETURN_TRUE;
-}
-/* }}} */
-
-static char *php_sybase_get_field_name(int type)
-{
- switch (type) {
- case SYBBINARY:
- case SYBVARBINARY:
- return "blob";
- break;
- case SYBCHAR:
- case SYBVARCHAR:
- case SYBTEXT:
- return "string";
- case SYBDATETIME:
- case SYBDATETIME4:
- case SYBDATETIMN:
- return "datetime";
- break;
- case SYBDECIMAL:
- case SYBFLT8:
- case SYBFLTN:
- case SYBREAL:
- case SYBNUMERIC:
- return "real";
- break;
- case SYBINT1:
- case SYBINT2:
- case SYBINT4:
- case SYBINTN:
- return "int";
- break;
- case SYBMONEY:
- case SYBMONEY4:
- case SYBMONEYN:
- return "money";
- break;
- case SYBBIT:
- return "bit";
- break;
- case SYBIMAGE:
- return "image";
- break;
- default:
- return "unknown";
- break;
- }
-}
-
-
-/* {{{ proto object sybase_fetch_field(int result [, int offset])
- Get field information */
-PHP_FUNCTION(sybase_fetch_field)
-{
- pval *sybase_result_index,*offset;
- int type,id,field_offset;
- sybase_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(offset);
- field_offset = Z_LVAL_P(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_long(sybase_result_index);
- id = Z_LVAL_P(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error(E_WARNING,"Sybase: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- if (object_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- add_property_string(return_value, "name",result->fields[field_offset].name, 1);
- add_property_long(return_value, "max_length",result->fields[field_offset].max_length);
- add_property_string(return_value, "column_source",result->fields[field_offset].column_source, 1);
- add_property_long(return_value, "numeric", result->fields[field_offset].numeric);
- add_property_string(return_value, "type", php_sybase_get_field_name(Z_TYPE(result->fields[field_offset])), 1);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_field_seek(int result, int offset)
- Set field offset */
-PHP_FUNCTION(sybase_field_seek)
-{
- pval *sybase_result_index,*offset;
- int type,id,field_offset;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(sybase_result_index);
- id = Z_LVAL_P(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- convert_to_long(offset);
- field_offset = Z_LVAL_P(offset);
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- php_error(E_WARNING,"Sybase: Bad column offset");
- RETURN_FALSE;
- }
-
- result->cur_field = field_offset;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string sybase_result(int result, int row, mixed field)
- Get result data */
-PHP_FUNCTION(sybase_result)
-{
- pval *row, *field, *sybase_result_index;
- int id,type,field_offset=0;
- sybase_result *result;
-
-
- if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &sybase_result_index, &row, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(sybase_result_index);
- id = Z_LVAL_P(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error(E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- convert_to_long(row);
- if (Z_LVAL_P(row)<0 || Z_LVAL_P(row)>=result->num_rows) {
- php_error(E_WARNING,"Sybase: Bad row offset (%d)",Z_LVAL_P(row));
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_P(field)) {
- case IS_STRING: {
- int i;
-
- for (i=0; i<result->num_fields; i++) {
- if (!strcasecmp(result->fields[i].name,Z_STRVAL_P(field))) {
- field_offset = i;
- break;
- }
- }
- if (i>=result->num_fields) { /* no match found */
- php_error(E_WARNING,"Sybase: %s field not found in result",Z_STRVAL_P(field));
- RETURN_FALSE;
- }
- break;
- }
- default:
- convert_to_long(field);
- field_offset = Z_LVAL_P(field);
- if (field_offset<0 || field_offset>=result->num_fields) {
- php_error(E_WARNING,"Sybase: Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
-
- *return_value = *result->data[Z_LVAL_P(row)][field_offset];
- pval_copy_constructor(return_value);
-}
-/* }}} */
-
-
-/* {{{ proto int sybase_affected_rows([int link_id])
- Get number of affected rows in last query */
-PHP_FUNCTION(sybase_affected_rows)
-{
- pval *sybase_link_index = NULL;
- sybase_link *sybase_ptr = NULL;
- int id = 0;
- int type = 0;
-
- switch(ZEND_NUM_ARGS())
- {
- case 0:
- {
- id = php_sybase_module.default_link;
- }
- break;
-
- case 1:
- {
- if (getParameters(ht, 1, &sybase_link_index)==FAILURE)
- {
- RETURN_FALSE;
- }
-
- convert_to_long(sybase_link_index);
- id = Z_LVAL_P(sybase_link_index);
- }
- break;
-
- default:
- {
- WRONG_PARAM_COUNT;
- }
- break;
- }
-
- sybase_ptr = (sybase_link *)zend_list_find(id, &type);
-
- if(type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink)
- {
- php_error(E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = DBCOUNT(sybase_ptr->link);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-
-PHP_MINFO_FUNCTION(sybase)
-{
- char maxp[32], maxl[32];
-
- if (php_sybase_module.max_persistent==-1) {
- snprintf(maxp, 31, "%ld/unlimited", php_sybase_module.num_persistent );
- } else {
- snprintf(maxp, 31, "%ld/%ld", php_sybase_module.num_persistent, php_sybase_module.max_persistent);
- }
- maxp[31]=0;
-
- if (php_sybase_module.max_links==-1) {
- snprintf(maxl, 31, "%ld/unlimited", php_sybase_module.num_links );
- } else {
- snprintf(maxl, 31, "%ld/%ld", php_sybase_module.num_links, php_sybase_module.max_links);
- }
- maxl[31]=0;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "Sybase Support", "enabled");
- php_info_print_table_row(2, "Allow Persistent Links", (php_sybase_module.allow_persistent?"Yes":"No") );
- php_info_print_table_row(2, "Persistent Links", maxp);
- php_info_print_table_row(2, "Total Links", maxl);
- php_info_print_table_row(2, "Application Name", php_sybase_module.appname );
- php_info_print_table_row(2, "Client API Version", dbversion() );
- php_info_print_table_end();
-
-}
-
-
-/* {{{ proto void sybase_min_error_severity(int severity)
- Sets the minimum error severity */
-PHP_FUNCTION(sybase_min_error_severity)
-{
- pval *severity;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(severity);
- php_sybase_module.min_error_severity = Z_LVAL_P(severity);
-}
-/* }}} */
-
-/* {{{ proto void sybase_min_message_severity(int severity)
- Sets the minimum message severity */
-PHP_FUNCTION(sybase_min_message_severity)
-{
- pval *severity;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(severity);
- php_sybase_module.min_message_severity = Z_LVAL_P(severity);
-}
-/* }}} */
-
-#endif
diff --git a/ext/sybase/php_sybase_db.h b/ext/sybase/php_sybase_db.h
deleted file mode 100644
index a2d17748f2..0000000000
--- a/ext/sybase/php_sybase_db.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYBASE_DB_H
-#define PHP_SYBASE_DB_H
-
-#if HAVE_SYBASE
-
-extern zend_module_entry sybase_module_entry;
-#define sybase_module_ptr &sybase_module_entry
-
-PHP_MINIT_FUNCTION(sybase);
-PHP_RINIT_FUNCTION(sybase);
-PHP_MSHUTDOWN_FUNCTION(sybase);
-PHP_RSHUTDOWN_FUNCTION(sybase);
-PHP_MINFO_FUNCTION(sybase);
-PHP_FUNCTION(sybase_connect);
-PHP_FUNCTION(sybase_pconnect);
-PHP_FUNCTION(sybase_close);
-PHP_FUNCTION(sybase_select_db);
-PHP_FUNCTION(sybase_query);
-PHP_FUNCTION(sybase_free_result);
-PHP_FUNCTION(sybase_get_last_message);
-PHP_FUNCTION(sybase_num_rows);
-PHP_FUNCTION(sybase_num_fields);
-PHP_FUNCTION(sybase_fetch_row);
-PHP_FUNCTION(sybase_fetch_array);
-PHP_FUNCTION(sybase_fetch_object);
-PHP_FUNCTION(sybase_data_seek);
-PHP_FUNCTION(sybase_affected_rows);
-PHP_FUNCTION(sybase_result);
-PHP_FUNCTION(sybase_field_seek);
-PHP_FUNCTION(sybase_min_error_severity);
-PHP_FUNCTION(sybase_min_message_severity);
-
-PHP_FUNCTION(sybase_db_query);
-PHP_FUNCTION(sybase_list_fields);
-PHP_FUNCTION(sybase_fetch_lengths);
-PHP_FUNCTION(sybase_fetch_field);
-PHP_FUNCTION(sybase_field_seek);
-PHP_FUNCTION(sybase_free_result);
-PHP_FUNCTION(sybase_field_name);
-PHP_FUNCTION(sybase_field_table);
-PHP_FUNCTION(sybase_field_len);
-PHP_FUNCTION(sybase_field_type);
-PHP_FUNCTION(sybase_field_flags);
-
-
-typedef struct {
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- char *appname;
- char *server_message;
- int le_link,le_plink,le_result;
- long min_error_severity,min_message_severity;
- long cfg_min_error_severity,cfg_min_message_severity;
- long compatability_mode;
-} sybase_module;
-
-extern sybase_module php_sybase_module;
-
-#else
-
-#define sybase_module_ptr NULL
-
-#endif
-
-#define phpext_sybase_ptr sybase_module_ptr
-
-#endif /* PHP_SYBASE_DB_H */
diff --git a/ext/sybase_ct/CREDITS b/ext/sybase_ct/CREDITS
deleted file mode 100644
index 4816351f8a..0000000000
--- a/ext/sybase_ct/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sybase-CT
-Zeev Suraski, Tom May
diff --git a/ext/sybase_ct/config.m4 b/ext/sybase_ct/config.m4
deleted file mode 100644
index eb8f529ca5..0000000000
--- a/ext/sybase_ct/config.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(sybase-ct, for Sybase-CT support,
-[ --with-sybase-ct[=DIR] Include Sybase-CT support. DIR is the Sybase home
- directory. Defaults to /home/sybase.])
-
-if test "$PHP_SYBASE_CT" != "no"; then
- AC_DEFINE(HAVE_SYBASE_CT,1,[ ])
- PHP_NEW_EXTENSION(sybase_ct, php_sybase_ct.c, $ext_shared)
- PHP_SUBST(SYBASE_CT_SHARED_LIBADD)
-
- if test "$PHP_SYBASE_CT" = "yes"; then
- SYBASE_CT_INCDIR=/home/sybase/include
- SYBASE_CT_LIBDIR=/home/sybase/lib
- else
- SYBASE_CT_INCDIR=$PHP_SYBASE_CT/include
- SYBASE_CT_LIBDIR=$PHP_SYBASE_CT/lib
- fi
-
- if test -f $SYBASE_CT_INCDIR/ctpublic.h; then
- PHP_ADD_INCLUDE($SYBASE_CT_INCDIR)
- else
- AC_MSG_ERROR([ctpublic.h missing!])
- fi
-
- PHP_ADD_LIBPATH($SYBASE_CT_LIBDIR, SYBASE_CT_SHARED_LIBADD)
- if test -f $SYBASE_CT_INCDIR/tds.h; then
- PHP_ADD_LIBRARY(ct,, SYBASE_CT_SHARED_LIBADD)
- SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lct"
- else
- PHP_ADD_LIBRARY(cs,, SYBASE_CT_SHARED_LIBADD)
- PHP_ADD_LIBRARY(ct,, SYBASE_CT_SHARED_LIBADD)
- PHP_ADD_LIBRARY(comn,, SYBASE_CT_SHARED_LIBADD)
- PHP_ADD_LIBRARY(intl,, SYBASE_CT_SHARED_LIBADD)
-
- SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lcs -lct -lcomn -lintl"
-
- PHP_CHECK_LIBRARY(tcl, netg_errstr, [
- PHP_ADD_LIBRARY(tcl,,SYBASE_CT_SHARED_LIBADD)
- ],[
- PHP_ADD_LIBRARY(sybtcl,,SYBASE_CT_SHARED_LIBADD)
- ],[
- $SYBASE_CT_LIBS
- ])
-
- PHP_CHECK_LIBRARY(insck, insck__getVdate, [PHP_ADD_LIBRARY(insck,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR])
- PHP_CHECK_LIBRARY(insck, bsd_tcp, [PHP_ADD_LIBRARY(insck,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR])
- fi
-fi
diff --git a/ext/sybase_ct/php_sybase_ct.c b/ext/sybase_ct/php_sybase_ct.c
deleted file mode 100644
index 75f5d3f28f..0000000000
--- a/ext/sybase_ct/php_sybase_ct.c
+++ /dev/null
@@ -1,1715 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Tom May <tom@go2net.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_sybase_ct.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-#include "php_ini.h"
-
-/* True globals, no need for thread safety */
-static int le_link, le_plink, le_result;
-
-#if HAVE_SYBASE_CT
-
-function_entry sybase_functions[] = {
- PHP_FE(sybase_connect, NULL)
- PHP_FE(sybase_pconnect, NULL)
- PHP_FE(sybase_close, NULL)
- PHP_FE(sybase_select_db, NULL)
- PHP_FE(sybase_query, NULL)
- PHP_FE(sybase_free_result, NULL)
- PHP_FE(sybase_get_last_message, NULL)
- PHP_FE(sybase_num_rows, NULL)
- PHP_FE(sybase_num_fields, NULL)
- PHP_FE(sybase_fetch_row, NULL)
- PHP_FE(sybase_fetch_array, NULL)
- PHP_FE(sybase_fetch_object, NULL)
- PHP_FE(sybase_data_seek, NULL)
- PHP_FE(sybase_fetch_field, NULL)
- PHP_FE(sybase_field_seek, NULL)
- PHP_FE(sybase_result, NULL)
- PHP_FE(sybase_affected_rows, NULL)
- PHP_FE(sybase_min_client_severity, NULL)
- PHP_FE(sybase_min_server_severity, NULL)
-
- PHP_FALIAS(mssql_connect, sybase_connect, NULL)
- PHP_FALIAS(mssql_pconnect, sybase_pconnect, NULL)
- PHP_FALIAS(mssql_close, sybase_close, NULL)
- PHP_FALIAS(mssql_select_db, sybase_select_db, NULL)
- PHP_FALIAS(mssql_query, sybase_query, NULL)
- PHP_FALIAS(mssql_free_result, sybase_free_result, NULL)
- PHP_FALIAS(mssql_get_last_message, sybase_get_last_message,NULL)
- PHP_FALIAS(mssql_num_rows, sybase_num_rows, NULL)
- PHP_FALIAS(mssql_num_fields, sybase_num_fields, NULL)
- PHP_FALIAS(mssql_fetch_row, sybase_fetch_row, NULL)
- PHP_FALIAS(mssql_fetch_array, sybase_fetch_array, NULL)
- PHP_FALIAS(mssql_fetch_object, sybase_fetch_object, NULL)
- PHP_FALIAS(mssql_data_seek, sybase_data_seek, NULL)
- PHP_FALIAS(mssql_fetch_field, sybase_fetch_field, NULL)
- PHP_FALIAS(mssql_field_seek, sybase_field_seek, NULL)
- PHP_FALIAS(mssql_result, sybase_result, NULL)
- PHP_FALIAS(mssql_affected_rows, sybase_affected_rows, NULL)
- PHP_FALIAS(mssql_min_client_severity, sybase_min_client_severity, NULL)
- PHP_FALIAS(mssql_min_server_severity, sybase_min_server_severity, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry sybase_module_entry = {
- STANDARD_MODULE_HEADER,
- "sybase_ct", sybase_functions, PHP_MINIT(sybase), PHP_MSHUTDOWN(sybase), PHP_RINIT(sybase), PHP_RSHUTDOWN(sybase), PHP_MINFO(sybase), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(sybase)
-/* static CS_CONTEXT *context; */
-
-#ifdef COMPILE_DL_SYBASE_CT
-ZEND_GET_MODULE(sybase)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(sybase)
-
-#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING, "Sybase: A link to the server could not be established"); RETURN_FALSE; } }
-
-
-static int _clean_invalid_results(list_entry *le TSRMLS_DC)
-{
- if (Z_TYPE_P(le) == le_result) {
- sybase_link *sybase_ptr = ((sybase_result *) le->ptr)->sybase_ptr;
-
- if (!sybase_ptr->valid) {
- return 1;
- }
- }
- return 0;
-}
-
-
-static void _free_sybase_result(sybase_result *result)
-{
- int i, j;
-
- if (result->data) {
- for (i=0; i<result->num_rows; i++) {
- for (j=0; j<result->num_fields; j++) {
- pval_destructor(&result->data[i][j]);
- }
- efree(result->data[i]);
- }
- efree(result->data);
- }
-
- if (result->fields) {
- for (i=0; i<result->num_fields; i++) {
- STR_FREE(result->fields[i].name);
- STR_FREE(result->fields[i].column_source);
- }
- efree(result->fields);
- }
-
- efree(result);
-}
-
-static void php_free_sybase_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_result *result = (sybase_result *)rsrc->ptr;
-
- _free_sybase_result(result);
-}
-
-static void _close_sybase_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
- CS_INT con_status;
-
- sybase_ptr->valid = 0;
-
- zend_hash_apply(&EG(regular_list), (apply_func_t) _clean_invalid_results TSRMLS_CC);
-
- /* Non-persistent connections will always be connected or we wouldn't
- * get here, but since we want to check the death status anyway
- * we might as well double-check the connect status.
- */
- if (ct_con_props(sybase_ptr->connection, CS_GET, CS_CON_STATUS,
- &con_status, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to get connection status on close");
- /* Assume the worst. */
- con_status = CS_CONSTAT_CONNECTED | CS_CONSTAT_DEAD;
- }
- if (con_status & CS_CONSTAT_CONNECTED) {
- if ((con_status & CS_CONSTAT_DEAD) || ct_close(sybase_ptr->connection, CS_UNUSED)!=CS_SUCCEED) {
- ct_close(sybase_ptr->connection, CS_FORCE_CLOSE);
- }
- }
-
- ct_con_drop(sybase_ptr->connection);
- efree(sybase_ptr);
- SybCtG(num_links)--;
-}
-
-
-static void _close_sybase_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
- CS_INT con_status;
-
- /* Persistent connections may have been closed before a failed
- * reopen attempt.
- */
- if (ct_con_props(sybase_ptr->connection, CS_GET, CS_CON_STATUS,
- &con_status, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to get connection status on close");
- /* Assume the worst. */
- con_status = CS_CONSTAT_CONNECTED | CS_CONSTAT_DEAD;
- }
- if (con_status & CS_CONSTAT_CONNECTED) {
- if ((con_status & CS_CONSTAT_DEAD) || ct_close(sybase_ptr->connection, CS_UNUSED)!=CS_SUCCEED) {
- ct_close(sybase_ptr->connection, CS_FORCE_CLOSE);
- }
- }
-
- ct_con_drop(sybase_ptr->connection);
- free(sybase_ptr);
- SybCtG(num_persistent)--;
- SybCtG(num_links)--;
-}
-
-
-static CS_RETCODE CS_PUBLIC _client_message_handler(CS_CONTEXT *context, CS_CONNECTION *connection, CS_CLIENTMSG *errmsg)
-{
- TSRMLS_FETCH();
-
- if (CS_SEVERITY(errmsg->msgnumber) >= SybCtG(min_client_severity)) {
- php_error(E_WARNING, "Sybase: Client message: %s (severity %d)", errmsg->msgstring, CS_SEVERITY(errmsg->msgnumber));
- }
- STR_FREE(SybCtG(server_message));
- SybCtG(server_message) = estrdup(errmsg->msgstring);
-
-
- /* If this is a timeout message, return CS_FAIL to cancel the
- * operation and mark the connection as dead.
- */
- if (CS_SEVERITY(errmsg->msgnumber) == CS_SV_RETRY_FAIL &&
- CS_NUMBER(errmsg->msgnumber) == 63 &&
- CS_ORIGIN(errmsg->msgnumber) == 2 &&
- CS_LAYER(errmsg->msgnumber) == 1)
- {
- return CS_FAIL;
- }
-
- return CS_SUCCEED;
-}
-
-
-static CS_RETCODE CS_PUBLIC _server_message_handler(CS_CONTEXT *context, CS_CONNECTION *connection, CS_SERVERMSG *srvmsg)
-{
- TSRMLS_FETCH();
-
- if (srvmsg->severity >= SybCtG(min_server_severity)) {
- php_error(E_WARNING, "Sybase: Server message: %s (severity %d, procedure %s)",
- srvmsg->text, srvmsg->severity, ((srvmsg->proclen>0) ? srvmsg->proc : "N/A"));
- }
- STR_FREE(SybCtG(server_message));
- SybCtG(server_message) = estrdup(srvmsg->text);
-
- /* If this is a deadlock message, set the connection's deadlock flag
- * so we will retry the request. Sorry about the bare constant here,
- * but it's not defined anywhere and it's a "well-known" number.
- */
- if (srvmsg->msgnumber == 1205) {
- sybase_link *sybase;
-
- if (ct_con_props(connection, CS_GET, CS_USERDATA, &sybase, CS_SIZEOF(sybase), NULL)==CS_SUCCEED) {
- sybase->deadlock = 1;
- }
- else {
- /* oh well */
- }
- }
-
- return CS_SUCCEED;
-}
-
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("sybct.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY_EX("sybct.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_sybase_globals, sybase_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("sybct.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_sybase_globals, sybase_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("sybct.min_server_severity", "10", PHP_INI_ALL, OnUpdateInt, min_server_severity, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY("sybct.min_client_severity", "10", PHP_INI_ALL, OnUpdateInt, min_client_severity, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY("sybct.hostname", NULL, PHP_INI_ALL, OnUpdateString, hostname, zend_sybase_globals, sybase_globals)
-PHP_INI_END()
-
-
-static void php_sybase_init_globals(zend_sybase_globals *sybase_globals)
-{
- long timeout;
-
- if (cs_ctx_alloc(CTLIB_VERSION, &sybase_globals->context)!=CS_SUCCEED || ct_init(sybase_globals->context, CTLIB_VERSION)!=CS_SUCCEED) {
- return;
- }
-
- /* Initialize message handlers */
- if (ct_callback(sybase_globals->context, NULL, CS_SET, CS_SERVERMSG_CB, (CS_VOID *)_server_message_handler)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to set server message handler");
- }
-
- if (ct_callback(sybase_globals->context, NULL, CS_SET, CS_CLIENTMSG_CB, (CS_VOID *)_client_message_handler)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to set client message handler");
- }
-
- /* Set datetime conversion format to "Nov 3 1998 8:06PM".
- * This is the default format for the ct-lib that comes with
- * Sybase ASE 11.5.1 for Solaris, but the Linux libraries that
- * come with 11.0.3.3 default to "03/11/98" which is singularly
- * useless. This levels the playing field for all platforms.
- */
- {
- CS_INT dt_convfmt = CS_DATES_SHORT;
- if (cs_dt_info(sybase_globals->context, CS_SET, NULL, CS_DT_CONVFMT, CS_UNUSED, &dt_convfmt, sizeof(dt_convfmt), NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to set datetime conversion format");
- }
- }
-
- /* Set the login and command timeouts. These are per-context and
- * can't be set with ct_con_props(), so set them globally from
- * their config values if requested. The defaults are 1 minute
- * for CS_LOGIN_TIMEOUT and CS_NO_LIMIT for CS_TIMEOUT. The latter
- * especially is fairly useless for web applications.
- * Note that depite some noise in the documentation about using
- * signals to implement timeouts, they are actually implemented
- * by using poll() or select() on Solaris and Linux.
- */
- if (cfg_get_long("sybct.login_timeout", &timeout)==SUCCESS) {
- CS_INT cs_login_timeout = timeout;
- if (ct_config(sybase_globals->context, CS_SET, CS_LOGIN_TIMEOUT, &cs_login_timeout, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to set login timeoutt");
- }
- }
- if (cfg_get_long("sybct.timeout", &timeout)==SUCCESS) {
- CS_INT cs_timeout = timeout;
- if (ct_config(sybase_globals->context, CS_SET, CS_TIMEOUT, &cs_timeout, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to set timeout");
- }
- }
- sybase_globals->num_persistent=0;
-}
-
-
-static void php_sybase_destroy_globals(zend_sybase_globals *sybase_globals)
-{
- ct_exit(sybase_globals->context, CS_UNUSED);
- cs_ctx_drop(sybase_globals->context);
-}
-
-PHP_MINIT_FUNCTION(sybase)
-{
- ZEND_INIT_MODULE_GLOBALS(sybase, php_sybase_init_globals, php_sybase_destroy_globals);
-
- REGISTER_INI_ENTRIES();
-
- le_link = zend_register_list_destructors_ex(_close_sybase_link, NULL, "sybase-ct link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_sybase_plink, "sybase-ct link persistent", module_number);
- le_result = zend_register_list_destructors_ex(php_free_sybase_result, NULL, "sybase-ct result", module_number);
-
- return SUCCESS;
-}
-
-
-
-PHP_RINIT_FUNCTION(sybase)
-{
- SybCtG(default_link)=-1;
- SybCtG(num_links) = SybCtG(num_persistent);
- SybCtG(appname) = estrndup("PHP 4.0", 7);
- SybCtG(server_message) = empty_string;
- return SUCCESS;
-}
-
-
-
-PHP_MSHUTDOWN_FUNCTION(sybase)
-{
- UNREGISTER_INI_ENTRIES();
-#if 0
- ct_exit(context, CS_UNUSED);
- cs_ctx_drop(context);
-#endif
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(sybase)
-{
- efree(SybCtG(appname));
- STR_FREE(SybCtG(server_message));
- return SUCCESS;
-}
-
-
-static int php_sybase_do_connect_internal(sybase_link *sybase, char *host, char *user, char *passwd, char *charset, char *appname)
-{
- CS_LOCALE *tmp_locale;
- TSRMLS_FETCH();
-
- /* set a CS_CONNECTION record */
- if (ct_con_alloc(SybCtG(context), &sybase->connection)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to allocate connection record");
- return 0;
- }
-
- /* Note - this saves a copy of sybase, not a pointer to it. */
- if (ct_con_props(sybase->connection, CS_SET, CS_USERDATA, &sybase, CS_SIZEOF(sybase), NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to set userdata");
- ct_con_drop(sybase->connection);
- return 0;
- }
-
- if (user) {
- ct_con_props(sybase->connection, CS_SET, CS_USERNAME, user, CS_NULLTERM, NULL);
- }
- if (passwd) {
- ct_con_props(sybase->connection, CS_SET, CS_PASSWORD, passwd, CS_NULLTERM, NULL);
- }
- if (appname) {
- ct_con_props(sybase->connection, CS_SET, CS_APPNAME, appname, CS_NULLTERM, NULL);
- } else {
- ct_con_props(sybase->connection, CS_SET, CS_APPNAME, SybCtG(appname), CS_NULLTERM, NULL);
- }
-
- if (SybCtG(hostname)) {
- ct_con_props(sybase->connection, CS_SET, CS_HOSTNAME, SybCtG(hostname), CS_NULLTERM, NULL);
- }
-
- if (charset) {
- if (cs_loc_alloc(SybCtG(context), &tmp_locale)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to allocate locale information.");
- } else {
- if (cs_locale(SybCtG(context), CS_SET, tmp_locale, CS_LC_ALL, NULL, CS_NULLTERM, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to load default locale data.");
- } else {
- if (cs_locale(SybCtG(context), CS_SET, tmp_locale, CS_SYB_CHARSET, charset, CS_NULLTERM, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to update character set.");
- } else {
- if (ct_con_props(sybase->connection, CS_SET, CS_LOC_PROP, tmp_locale, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to update connection properties.");
- }
- }
- }
- }
- }
-
- sybase->valid = 1;
- sybase->dead = 0;
-
- /* create the link */
- if (ct_connect(sybase->connection, host, CS_NULLTERM)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to connect");
- ct_con_drop(sybase->connection);
- return 0;
- }
-
- if (ct_cmd_alloc(sybase->connection, &sybase->cmd)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to allocate command record");
- ct_close(sybase->connection, CS_UNUSED);
- ct_con_drop(sybase->connection);
- return 0;
- }
-
- return 1;
-}
-
-
-static void php_sybase_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user, *passwd, *host, *charset, *appname;
- char *hashed_details;
- int hashed_details_length;
- sybase_link *sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- host=user=passwd=charset=appname=NULL;
- hashed_details_length=6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- strcpy(hashed_details, "sybase_____");
- break;
- case 1: {
- pval *yyhost;
-
- if (getParameters(ht, 1, &yyhost)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- host = Z_STRVAL_P(yyhost);
- user=passwd=charset=appname=NULL;
- hashed_details_length = Z_STRLEN_P(yyhost)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s____", Z_STRVAL_P(yyhost));
- }
- break;
- case 2: {
- pval *yyhost, *yyuser;
-
- if (getParameters(ht, 2, &yyhost, &yyuser)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd=charset=appname=NULL;
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s___", Z_STRVAL_P(yyhost), Z_STRVAL_P(yyuser));
- }
- break;
- case 3: {
- pval *yyhost, *yyuser, *yypasswd;
-
- if (getParameters(ht, 3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- convert_to_string(yypasswd);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd = Z_STRVAL_P(yypasswd);
- charset=appname=NULL;
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+Z_STRLEN_P(yypasswd)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s_%s__", Z_STRVAL_P(yyhost), Z_STRVAL_P(yyuser), Z_STRVAL_P(yypasswd));
- }
- break;
- case 4: {
- pval *yyhost, *yyuser, *yypasswd, *yycharset;
-
- if (getParameters(ht, 4, &yyhost, &yyuser, &yypasswd, &yycharset) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- convert_to_string(yypasswd);
- convert_to_string(yycharset);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd = Z_STRVAL_P(yypasswd);
- charset = Z_STRVAL_P(yycharset);
- appname=NULL;
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+Z_STRLEN_P(yypasswd)+Z_STRLEN_P(yycharset)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s_%s_%s_", Z_STRVAL_P(yyhost), Z_STRVAL_P(yyuser), Z_STRVAL_P(yypasswd), Z_STRVAL_P(yycharset));
- }
- break;
- case 5: {
- pval *yyhost, *yyuser, *yypasswd, *yycharset, *yyappname;
-
- if (getParameters(ht, 5, &yyhost, &yyuser, &yypasswd, &yycharset, &yyappname) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- convert_to_string(yyuser);
- convert_to_string(yypasswd);
- convert_to_string(yycharset);
- convert_to_string(yyappname);
- host = Z_STRVAL_P(yyhost);
- user = Z_STRVAL_P(yyuser);
- passwd = Z_STRVAL_P(yypasswd);
- charset = Z_STRVAL_P(yycharset);
- appname = Z_STRVAL_P(yyappname);
- hashed_details_length = Z_STRLEN_P(yyhost)+Z_STRLEN_P(yyuser)+Z_STRLEN_P(yypasswd)+Z_STRLEN_P(yycharset)+Z_STRLEN_P(yyappname)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s_%s_%s_%s", Z_STRVAL_P(yyhost), Z_STRVAL_P(yyuser), Z_STRVAL_P(yypasswd), Z_STRVAL_P(yycharset), Z_STRVAL_P(yyappname));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- if (!SybCtG(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (SybCtG(max_links)!=-1 && SybCtG(num_links)>=SybCtG(max_links)) {
- php_error(E_WARNING, "Sybase: Too many open links (%d)", SybCtG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (SybCtG(max_persistent)!=-1 && SybCtG(num_persistent)>=SybCtG(max_persistent)) {
- php_error(E_WARNING, "Sybase: Too many open persistent links (%d)", SybCtG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) malloc(sizeof(sybase_link));
- if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, charset, appname)) {
- free(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = sybase_ptr;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- ct_close(sybase_ptr->connection, CS_UNUSED);
- ct_con_drop(sybase_ptr->connection);
- free(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
- SybCtG(num_persistent)++;
- SybCtG(num_links)++;
- } else { /* we do */
- CS_INT con_status;
-
- if (Z_TYPE_P(le) != le_plink) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) le->ptr;
-
- /* If the link has died, close it and overwrite it with a new one. */
-
- if (ct_con_props(sybase_ptr->connection, CS_GET, CS_CON_STATUS,
- &con_status, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error(E_WARNING, "Sybase: Unable to get connection status");
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (!(con_status & CS_CONSTAT_CONNECTED) || (con_status & CS_CONSTAT_DEAD) || sybase_ptr->dead) {
- sybase_link sybase;
-
- if (con_status & CS_CONSTAT_CONNECTED) {
- ct_close(sybase_ptr->connection, CS_FORCE_CLOSE);
- }
- /* Create a new connection, then replace the old
- * connection. If we fail to create a new connection,
- * put the old one back so there will be a connection,
- * even if it is a non-functional one. This is because
- * code may still be holding an id for this connection
- * so we can't free the CS_CONNECTION.
- * (This is actually totally hokey, it would be better
- * to just ct_con_drop() the connection and set
- * sybase_ptr->connection to NULL, then test it for
- * NULL before trying to use it elsewhere . . .)
- */
- memcpy(&sybase, sybase_ptr, sizeof(sybase_link));
- if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, charset, appname)) {
- memcpy(sybase_ptr, &sybase, sizeof(sybase_link));
- efree(hashed_details);
- RETURN_FALSE;
- }
- ct_con_drop(sybase.connection); /* drop old connection */
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, sybase_ptr, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual sybase link sits.
- * if it doesn't, open a new sybase link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1, (void **) &index_ptr)==SUCCESS) {
- int type, link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = SybCtG(default_link) = link;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- }
- }
- if (SybCtG(max_links)!=-1 && SybCtG(num_links)>=SybCtG(max_links)) {
- php_error(E_WARNING, "Sybase: Too many open links (%d)", SybCtG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) emalloc(sizeof(sybase_link));
- if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, charset, appname)) {
- efree(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, sybase_ptr, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1, (void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- ct_close(sybase_ptr->connection, CS_UNUSED);
- ct_con_drop(sybase_ptr->connection);
- efree(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
- SybCtG(num_links)++;
- }
- efree(hashed_details);
- SybCtG(default_link)=Z_LVAL_P(return_value);
- zend_list_addref(SybCtG(default_link));
-}
-
-
-static int php_sybase_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (SybCtG(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return SybCtG(default_link);
-}
-
-
-/* {{{ proto int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open Sybase server connection */
-PHP_FUNCTION(sybase_connect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-
-/* }}} */
-
-/* {{{ proto int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open persistent Sybase connection */
-PHP_FUNCTION(sybase_pconnect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-
-
-/* {{{ proto bool sybase_close([int link_id])
- Close Sybase connection */
-PHP_FUNCTION(sybase_close)
-{
- pval *sybase_link_index = 0;
- int id;
- sybase_link *sybase_ptr;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = SybCtG(default_link);
- break;
- case 1:
- if (getParameters(ht, 1, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_P(sybase_link_index));
- }
-
- if (id!=-1
- || (sybase_link_index && Z_RESVAL_P(sybase_link_index)==SybCtG(default_link))) {
- zend_list_delete(SybCtG(default_link));
- SybCtG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-
-static int exec_cmd(sybase_link *sybase_ptr, char *cmdbuf)
-{
- CS_RETCODE retcode;
- CS_INT restype;
- int failure=0;
-
- /* Fail if we already marked this connection dead. */
-
- if (sybase_ptr->dead) {
- return FAILURE;
- }
-
- /*
- ** Get a command handle, store the command string in it, and
- ** send it to the server.
- */
-
- if (ct_command(sybase_ptr->cmd, CS_LANG_CMD, cmdbuf, CS_NULLTERM, CS_UNUSED)!=CS_SUCCEED) {
- sybase_ptr->dead = 1;
- return FAILURE;
- }
- if (ct_send(sybase_ptr->cmd)!=CS_SUCCEED) {
- sybase_ptr->dead = 1;
- return FAILURE;
- }
-
- while ((retcode = ct_results(sybase_ptr->cmd, &restype))==CS_SUCCEED) {
- switch ((int) restype) {
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE:
- break;
-
- case CS_CMD_FAIL:
- failure=1;
- break;
-
- case CS_STATUS_RESULT:
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
- break;
-
- default:
- failure=1;
- break;
- }
- if (failure) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- return FAILURE;
- }
- }
-
- switch (retcode) {
- case CS_END_RESULTS:
- return SUCCESS;
- break;
-
- case CS_FAIL:
- /* Hopefully this either cleans up the connection, or the
- * connection ends up marked dead so it will be reopened
- * if it is persistent. We may want to do
- * ct_close(CS_FORCE_CLOSE) if ct_cancel() fails; see the
- * doc for ct_results()==CS_FAIL.
- */
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- /* Don't take chances with the vagaries of ct-lib. Mark it
- * dead ourselves.
- */
- sybase_ptr->dead = 1;
- return FAILURE;
-
- default:
- return FAILURE;
- }
-}
-
-
-/* {{{ proto bool sybase_select_db(string database [, int link_id])
- Select Sybase database */
-PHP_FUNCTION(sybase_select_db)
-{
- pval *db, *sybase_link_index;
- int id;
- char *cmdbuf;
- sybase_link *sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- convert_to_string(db);
- cmdbuf = (char *) emalloc(sizeof("use ")+Z_STRLEN_P(db)+1);
- sprintf(cmdbuf, "use %s", Z_STRVAL_P(db)); /* SAFE */
-
- if (exec_cmd(sybase_ptr, cmdbuf)==FAILURE) {
- efree(cmdbuf);
- RETURN_FALSE;
- } else {
- efree(cmdbuf);
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-
-
-static sybase_result * php_sybase_fetch_result_set (sybase_link *sybase_ptr)
-{
- int num_fields;
- sybase_result *result;
- char **tmp_buffer;
- CS_INT *lengths;
- CS_SMALLINT *indicators;
- unsigned char *numerics;
- CS_INT *types;
- CS_DATAFMT *datafmt;
- int i, j, retcode;
- int blocks_initialized=1;
-
- /* The following is more or less the equivalent of mysql_store_result().
- * fetch all rows from the server into the row buffer, thus:
- * 1) Being able to fire up another query without explicitly reading all rows
- * 2) Having numrows accessible
- */
-
- if (ct_res_info(sybase_ptr->cmd, CS_NUMDATA, &num_fields, CS_UNUSED, NULL)!=CS_SUCCEED) {
- return NULL;
- }
-
- result = (sybase_result *) emalloc(sizeof(sybase_result));
- result->data = (pval **) emalloc(sizeof(pval *)*SYBASE_ROWS_BLOCK);
- result->fields = NULL;
- result->sybase_ptr = sybase_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
- result->num_fields = num_fields;
-
- tmp_buffer = (char **) emalloc(sizeof(char *)*num_fields);
- lengths = (CS_INT *) emalloc(sizeof(CS_INT)*num_fields);
- indicators = (CS_SMALLINT *) emalloc(sizeof(CS_INT)*num_fields);
- datafmt = (CS_DATAFMT *) emalloc(sizeof(CS_DATAFMT)*num_fields);
- numerics = (unsigned char *) emalloc(sizeof(unsigned char)*num_fields);
- types = (CS_INT *) emalloc(sizeof(CS_INT)*num_fields);
-
-
- for (i=0; i<num_fields; i++) {
- ct_describe(sybase_ptr->cmd, i+1, &datafmt[i]);
- types[i] = datafmt[i].datatype;
- switch (datafmt[i].datatype) {
- case CS_CHAR_TYPE:
- case CS_VARCHAR_TYPE:
- case CS_TEXT_TYPE:
- case CS_IMAGE_TYPE:
- datafmt[i].maxlength++;
- numerics[i] = 0;
- break;
- case CS_BINARY_TYPE:
- case CS_VARBINARY_TYPE:
- datafmt[i].maxlength *= 2;
- datafmt[i].maxlength++;
- numerics[i] = 0;
- break;
- case CS_BIT_TYPE:
- case CS_TINYINT_TYPE:
- datafmt[i].maxlength = 4;
- numerics[i] = 1;
- break;
- case CS_SMALLINT_TYPE:
- datafmt[i].maxlength = 7;
- numerics[i] = 1;
- break;
- case CS_INT_TYPE:
- datafmt[i].maxlength = 12;
- numerics[i] = 1;
- break;
- case CS_REAL_TYPE:
- case CS_FLOAT_TYPE:
- datafmt[i].maxlength = 24;
- numerics[i] = 1;
- break;
- case CS_MONEY_TYPE:
- case CS_MONEY4_TYPE:
- datafmt[i].maxlength = 24;
- numerics[i] = 0;
- break;
- case CS_DATETIME_TYPE:
- case CS_DATETIME4_TYPE:
- datafmt[i].maxlength = 30;
- numerics[i] = 0;
- break;
- case CS_NUMERIC_TYPE:
- case CS_DECIMAL_TYPE:
- datafmt[i].maxlength = datafmt[i].precision + 3;
- numerics[i] = 1;
- break;
- default:
- datafmt[i].maxlength++;
- numerics[i] = 0;
- break;
- }
- tmp_buffer[i] = (char *)emalloc(datafmt[i].maxlength);
- datafmt[i].datatype = CS_CHAR_TYPE;
- datafmt[i].format = CS_FMT_NULLTERM;
- ct_bind(sybase_ptr->cmd, i+1, &datafmt[i], tmp_buffer[i], &lengths[i], &indicators[i]);
- }
-
- while ((retcode=ct_fetch(sybase_ptr->cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, NULL))==CS_SUCCEED
- || retcode==CS_ROW_FAIL) {
- /*
- if (retcode==CS_ROW_FAIL) {
- php_error(E_WARNING, "Sybase: Error reading row %d", result->num_rows);
- }
- */
- i = result->num_rows++;
- if (result->num_rows > blocks_initialized*SYBASE_ROWS_BLOCK) {
- result->data = (pval **) erealloc(result->data, sizeof(pval *)*SYBASE_ROWS_BLOCK*(++blocks_initialized));
- }
- result->data[i] = (pval *) emalloc(sizeof(pval)*num_fields);
- for (j=0; j<num_fields; j++) {
- if (indicators[j] == -1) { /* null value */
- ZVAL_FALSE(&result->data[i][j]);
- } else {
- Z_STRLEN(result->data[i][j]) = lengths[j]-1; /* we don't need the NULL in the length */
- Z_STRVAL(result->data[i][j]) = estrndup(tmp_buffer[j], lengths[j]);
- Z_TYPE(result->data[i][j]) = IS_STRING;
- }
- }
- }
-
- if (retcode != CS_END_DATA) {
- _free_sybase_result(result);
- result = NULL;
- } else {
- result->fields = (sybase_field *) emalloc(sizeof(sybase_field)*num_fields);
- j=0;
- for (i=0; i<num_fields; i++) {
- char computed_buf[16];
-
- if (datafmt[i].namelen>0) {
- result->fields[i].name = estrndup(datafmt[i].name, datafmt[i].namelen);
- } else {
- if (j>0) {
- snprintf(computed_buf, 16, "computed%d", j);
- } else {
- strcpy(computed_buf, "computed");
- }
- result->fields[i].name = estrdup(computed_buf);
- j++;
- }
- result->fields[i].column_source = empty_string;
- result->fields[i].max_length = datafmt[i].maxlength-1;
- result->fields[i].numeric = numerics[i];
- Z_TYPE(result->fields[i]) = types[i];
- }
- }
-
- efree(datafmt);
- efree(lengths);
- efree(indicators);
- efree(numerics);
- efree(types);
- for (i=0; i<num_fields; i++) {
- efree(tmp_buffer[i]);
- }
- efree(tmp_buffer);
-
- return result;
-}
-
-
-/* {{{ proto int sybase_query(string query [, int link_id])
- Send Sybase query */
-PHP_FUNCTION(sybase_query)
-{
- pval **query, **sybase_link_index=NULL;
- int id;
- sybase_link *sybase_ptr;
- sybase_result *result;
- CS_INT restype;
- CS_RETCODE retcode;
- enum {
- Q_RESULT, /* Success with results. */
- Q_SUCCESS, /* Success but no results. */
- Q_FAILURE, /* Failure, no results. */
- } status;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = SybCtG(default_link);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
-
- /* Fail if we already marked this connection dead. */
-
- if (sybase_ptr->dead) {
- RETURN_FALSE;
- }
-
- /* Repeat until we don't deadlock. */
-
- for (;;) {
- result = NULL;
- sybase_ptr->deadlock = 0;
- sybase_ptr->affected_rows = 0;
-
- /* On Solaris 11.5, ct_command() can be moved outside the
- * loop, but not on Linux 11.0.
- */
- if (ct_command(sybase_ptr->cmd, CS_LANG_CMD, Z_STRVAL_PP(query), CS_NULLTERM, CS_UNUSED)!=CS_SUCCEED) {
- /* If this didn't work, the connection is screwed but
- * ct-lib might not set CS_CONSTAT_DEAD. So set our own
- * flag. This happens sometimes when the database is restarted
- * and/or its machine is rebooted, and ct_command() returns
- * CS_BUSY for some reason.
- */
- sybase_ptr->dead = 1;
- RETURN_FALSE;
- }
-
- if (ct_send(sybase_ptr->cmd)!=CS_SUCCEED) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- sybase_ptr->dead = 1;
- RETURN_FALSE;
- }
-
- /* Use the first result set or succeed/fail status and discard the
- * others. Applications really shouldn't be making calls that
- * return multiple result sets, but if they do then we need to
- * properly read or cancel them or the connection will become
- * unusable.
- */
- if (ct_results(sybase_ptr->cmd, &restype)!=CS_SUCCEED) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- sybase_ptr->dead = 1;
- RETURN_FALSE;
- }
-
- switch ((int) restype) {
- case CS_CMD_FAIL:
- default:
- status = Q_FAILURE;
- break;
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE: {
- CS_INT row_count;
- if (ct_res_info(sybase_ptr->cmd, CS_ROW_COUNT, &row_count, CS_UNUSED, NULL)==CS_SUCCEED) {
- sybase_ptr->affected_rows = (long)row_count;
- }
- }
- /* Fall through */
- case CS_COMPUTEFMT_RESULT:
- case CS_ROWFMT_RESULT:
- case CS_DESCRIBE_RESULT:
- case CS_MSG_RESULT:
- status = Q_SUCCESS;
- break;
- case CS_COMPUTE_RESULT:
- case CS_CURSOR_RESULT:
- case CS_PARAM_RESULT:
- case CS_ROW_RESULT:
- case CS_STATUS_RESULT:
- result = php_sybase_fetch_result_set(sybase_ptr);
- if (result == NULL) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- sybase_ptr->dead = 1;
- RETURN_FALSE;
- }
- status = Q_RESULT;
- break;
- }
-
- /* The only restype we should get now is CS_CMD_DONE, possibly
- * followed by a CS_STATUS_RESULT/CS_CMD_SUCCEED/CS_CMD_DONE
- * sequence if the command was a stored procedure call. But we
- * still need to read and discard unexpected results. We might
- * want to return a failure in this case because the application
- * won't be getting all the results it asked for.
- */
- while ((retcode = ct_results(sybase_ptr->cmd, &restype))==CS_SUCCEED) {
- switch ((int) restype) {
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE:
- break;
-
- case CS_CMD_FAIL:
- status = Q_FAILURE;
- break;
-
- case CS_COMPUTE_RESULT:
- case CS_CURSOR_RESULT:
- case CS_PARAM_RESULT:
- case CS_ROW_RESULT:
- /* Unexpected results, cancel them. */
- case CS_STATUS_RESULT:
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
- break;
-
- default:
- status = Q_FAILURE;
- break;
- }
- if (status == Q_FAILURE) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- }
- }
-
- switch (retcode) {
- case CS_END_RESULTS:
- /* Normal. */
- break;
-
- case CS_FAIL:
- /* Hopefully this either cleans up the connection, or the
- * connection ends up marked dead so it will be reopened
- * if it is persistent. We may want to do
- * ct_close(CS_FORCE_CLOSE) if ct_cancel() fails; see the
- * doc for ct_results()==CS_FAIL.
- */
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- /* Don't take chances with the vagaries of ct-lib. Mark it
- * dead ourselves.
- */
- sybase_ptr->dead = 1;
- case CS_CANCELED:
- default:
- status = Q_FAILURE;
- break;
- }
-
- /* If query completed without deadlock, break out of the loop.
- * Sometimes deadlock results in failures and sometimes not,
- * it seems to depend on the server flavor. But we want to
- * retry all deadlocks.
- */
- if (sybase_ptr->dead || sybase_ptr->deadlock == 0) {
- break;
- }
-
- /* Get rid of any results we may have fetched. This happens:
- * e.g., our result set may be a stored procedure status which
- * is returned even if the stored procedure deadlocks. As an
- * optimization, we could try not to fetch results in known
- * deadlock conditions, but deadlock is (should be) rare.
- */
- if (result != NULL) {
- _free_sybase_result(result);
- }
- }
-
- if (status == Q_SUCCESS) {
- RETURN_TRUE;
- }
-
- if (status == Q_FAILURE) {
- if (result != NULL) {
- _free_sybase_result(result);
- }
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-
-/* }}} */
-
-/* {{{ proto bool sybase_free_result(int result)
- Free result memory */
-PHP_FUNCTION(sybase_free_result)
-{
- pval *sybase_result_index;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_P(sybase_result_index)==IS_RESOURCE
- && Z_LVAL_P(sybase_result_index)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- zend_list_delete(Z_LVAL_P(sybase_result_index));
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string sybase_get_last_message(void)
- Returns the last message from server (over min_message_severity) */
-PHP_FUNCTION(sybase_get_last_message)
-{
- RETURN_STRING(SybCtG(server_message), 1);
-}
-/* }}} */
-
-/* {{{ proto int sybase_num_rows(int result)
- Get number of rows in result */
-PHP_FUNCTION(sybase_num_rows)
-{
- pval *sybase_result_index;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- Z_LVAL_P(return_value) = result->num_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto int sybase_num_fields(int result)
- Get number of fields in result */
-PHP_FUNCTION(sybase_num_fields)
-{
- pval *sybase_result_index;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- Z_LVAL_P(return_value) = result->num_fields;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto array sybase_fetch_row(int result)
- Get row as enumerated array */
-PHP_FUNCTION(sybase_fetch_row)
-{
- pval *sybase_result_index;
- int i;
- sybase_result *result;
- pval *field_content;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (i=0; i<result->num_fields; i++) {
- ALLOC_ZVAL(field_content);
- *field_content = result->data[result->cur_row][i];
- INIT_PZVAL(field_content);
- pval_copy_constructor(field_content);
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &field_content, sizeof(pval* ), NULL);
- }
- result->cur_row++;
-}
-
-/* }}} */
-
-static void php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS)
-{
- pval *sybase_result_index;
- sybase_result *result;
- int i;
- pval *tmp;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
-
- for (i=0; i<result->num_fields; i++) {
- ALLOC_ZVAL(tmp);
- *tmp = result->data[result->cur_row][i];
- INIT_PZVAL(tmp);
- if (PG(magic_quotes_runtime) && Z_TYPE_P(tmp) == IS_STRING) {
- Z_STRVAL_P(tmp) = php_addslashes(Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), &Z_STRLEN_P(tmp), 0 TSRMLS_CC);
- } else {
- pval_copy_constructor(tmp);
- }
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &tmp, sizeof(pval *), NULL);
- tmp->refcount++;
- zend_hash_update(Z_ARRVAL_P(return_value), result->fields[i].name, strlen(result->fields[i].name)+1, (void *) &tmp, sizeof(pval *), NULL);
- }
- result->cur_row++;
-}
-
-
-/* {{{ proto object sybase_fetch_object(int result)
- Fetch row as object */
-PHP_FUNCTION(sybase_fetch_object)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_array(int result)
- Fetch row as array */
-PHP_FUNCTION(sybase_fetch_array)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_data_seek(int result, int offset)
- Move internal row pointer */
-PHP_FUNCTION(sybase_data_seek)
-{
- pval *sybase_result_index, *offset;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- convert_to_long(offset);
- if (Z_LVAL_P(offset)<0 || Z_LVAL_P(offset)>=result->num_rows) {
- php_error(E_WARNING, "Sybase: Bad row offset");
- RETURN_FALSE;
- }
-
- result->cur_row = Z_LVAL_P(offset);
- RETURN_TRUE;
-}
-/* }}} */
-
-static char *php_sybase_get_field_name(CS_INT type)
-{
- switch (type) {
- case CS_CHAR_TYPE:
- case CS_VARCHAR_TYPE:
- case CS_TEXT_TYPE:
- return "string";
- break;
- case CS_IMAGE_TYPE:
- return "image";
- break;
- case CS_BINARY_TYPE:
- case CS_VARBINARY_TYPE:
- return "blob";
- break;
- case CS_BIT_TYPE:
- return "bit";
- break;
- case CS_TINYINT_TYPE:
- case CS_SMALLINT_TYPE:
- case CS_INT_TYPE:
- return "int";
- break;
- case CS_REAL_TYPE:
- case CS_FLOAT_TYPE:
- case CS_NUMERIC_TYPE:
- case CS_DECIMAL_TYPE:
- return "real";
- break;
- case CS_MONEY_TYPE:
- case CS_MONEY4_TYPE:
- return "money";
- break;
- case CS_DATETIME_TYPE:
- case CS_DATETIME4_TYPE:
- return "datetime";
- break;
- default:
- return "unknown";
- break;
- }
-}
-
-
-/* {{{ proto object sybase_fetch_field(int result [, int offset])
- Get field information */
-PHP_FUNCTION(sybase_fetch_field)
-{
- pval *sybase_result_index, *offset;
- int field_offset;
- sybase_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &sybase_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(offset);
- field_offset = Z_LVAL_P(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error(E_WARNING, "Sybase: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- if (object_init(return_value)==FAILURE) {
- RETURN_FALSE;
- }
- add_property_string(return_value, "name", result->fields[field_offset].name, 1);
- add_property_long(return_value, "max_length", result->fields[field_offset].max_length);
- add_property_string(return_value, "column_source", result->fields[field_offset].column_source, 1);
- add_property_long(return_value, "numeric", result->fields[field_offset].numeric);
- add_property_string(return_value, "type", php_sybase_get_field_name(Z_TYPE(result->fields[field_offset])), 1);
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_field_seek(int result, int offset)
- Set field offset */
-PHP_FUNCTION(sybase_field_seek)
-{
- pval *sybase_result_index, *offset;
- int field_offset;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- convert_to_long(offset);
- field_offset = Z_LVAL_P(offset);
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- php_error(E_WARNING, "Sybase: Bad column offset");
- RETURN_FALSE;
- }
-
- result->cur_field = field_offset;
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto string sybase_result(int result, int row, mixed field)
- Get result data */
-PHP_FUNCTION(sybase_result)
-{
- pval *row, *field, *sybase_result_index;
- int field_offset=0;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &sybase_result_index, &row, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
- convert_to_long(row);
- if (Z_LVAL_P(row)<0 || Z_LVAL_P(row)>=result->num_rows) {
- php_error(E_WARNING, "Sybase: Bad row offset (%d)", Z_LVAL_P(row));
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_P(field)) {
- case IS_STRING: {
- int i;
-
- for (i=0; i<result->num_fields; i++) {
- if (!strcasecmp(result->fields[i].name, Z_STRVAL_P(field))) {
- field_offset = i;
- break;
- }
- }
- if (i>=result->num_fields) { /* no match found */
- php_error(E_WARNING, "Sybase: %s field not found in result", Z_STRVAL_P(field));
- RETURN_FALSE;
- }
- break;
- }
- default:
- convert_to_long(field);
- field_offset = Z_LVAL_P(field);
- if (field_offset<0 || field_offset>=result->num_fields) {
- php_error(E_WARNING, "Sybase: Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
-
- *return_value = result->data[Z_LVAL_P(row)][field_offset];
- pval_copy_constructor(return_value);
-}
-/* }}} */
-
-
-/* {{{ proto int sybase_affected_rows([int link_id])
- Get number of affected rows in last query */
-PHP_FUNCTION(sybase_affected_rows)
-{
- pval *sybase_link_index;
- sybase_link *sybase_ptr;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 1:
- if (getParameters(ht, 1, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- Z_LVAL_P(return_value) = sybase_ptr->affected_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-PHP_MINFO_FUNCTION(sybase)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Sybase_CT Support", "enabled" );
- sprintf(buf, "%ld", SybCtG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", SybCtG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_row(2, "Application Name", SybCtG(appname));
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-
-/* {{{ proto void sybase_min_client_severity(int severity)
- Sets minimum client severity */
-PHP_FUNCTION(sybase_min_client_severity)
-{
- pval *severity;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(severity);
- SybCtG(min_client_severity) = Z_LVAL_P(severity);
-}
-/* }}} */
-
-
-/* {{{ proto void sybase_min_server_severity(int severity)
- Sets minimum server severity */
-PHP_FUNCTION(sybase_min_server_severity)
-{
- pval *severity;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(severity);
- SybCtG(min_server_severity) = Z_LVAL_P(severity);
-}
-/* }}} */
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/sybase_ct/php_sybase_ct.h b/ext/sybase_ct/php_sybase_ct.h
deleted file mode 100644
index 9176fcebf3..0000000000
--- a/ext/sybase_ct/php_sybase_ct.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYBASE_CT_H
-#define PHP_SYBASE_CT_H
-
-#if HAVE_SYBASE_CT
-
-#define CTLIB_VERSION CS_VERSION_100
-
-extern zend_module_entry sybase_module_entry;
-#define sybase_module_ptr &sybase_module_entry
-
-PHP_MINIT_FUNCTION(sybase);
-PHP_MSHUTDOWN_FUNCTION(sybase);
-PHP_RINIT_FUNCTION(sybase);
-PHP_RSHUTDOWN_FUNCTION(sybase);
-PHP_MINFO_FUNCTION(sybase);
-
-PHP_FUNCTION(sybase_connect);
-PHP_FUNCTION(sybase_pconnect);
-PHP_FUNCTION(sybase_close);
-PHP_FUNCTION(sybase_select_db);
-PHP_FUNCTION(sybase_query);
-PHP_FUNCTION(sybase_free_result);
-PHP_FUNCTION(sybase_get_last_message);
-PHP_FUNCTION(sybase_num_rows);
-PHP_FUNCTION(sybase_num_fields);
-PHP_FUNCTION(sybase_fetch_row);
-PHP_FUNCTION(sybase_fetch_array);
-PHP_FUNCTION(sybase_fetch_object);
-PHP_FUNCTION(sybase_data_seek);
-PHP_FUNCTION(sybase_result);
-PHP_FUNCTION(sybase_affected_rows);
-PHP_FUNCTION(sybase_field_seek);
-PHP_FUNCTION(sybase_min_client_severity);
-PHP_FUNCTION(sybase_min_server_severity);
-PHP_FUNCTION(sybase_fetch_field);
-
-
-#include <ctpublic.h>
-
-ZEND_BEGIN_MODULE_GLOBALS(sybase)
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- char *appname;
- char *hostname;
- char *server_message;
- long min_server_severity, min_client_severity;
- CS_CONTEXT *context;
-ZEND_END_MODULE_GLOBALS(sybase)
-
-typedef struct {
- CS_CONNECTION *connection;
- CS_COMMAND *cmd;
- int valid;
- int deadlock;
- int dead;
- long affected_rows;
-} sybase_link;
-
-#define SYBASE_ROWS_BLOCK 128
-
-typedef struct {
- char *name,*column_source;
- int max_length, numeric;
- CS_INT type;
-} sybase_field;
-
-typedef struct {
- pval **data;
- sybase_field *fields;
- sybase_link *sybase_ptr;
- int cur_row,cur_field;
- int num_rows,num_fields;
-} sybase_result;
-
-
-#ifdef ZTS
-# define SybCtG(v) TSRMG(sybase_globals_id, zend_sybase_globals *, v)
-#else
-# define SybCtG(v) (sybase_globals.v)
-#endif
-
-#else
-
-#define sybase_module_ptr NULL
-
-#endif
-
-#define phpext_sybase_ct_ptr sybase_module_ptr
-
-#endif /* PHP_SYBASE_CT_H */
diff --git a/ext/sybase_ct/sybase_ct.dsp b/ext/sybase_ct/sybase_ct.dsp
deleted file mode 100644
index f1a1abf4d1..0000000000
--- a/ext/sybase_ct/sybase_ct.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sybase_ct" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=sybase_ct - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "sybase_ct.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "sybase_ct.mak" CFG="sybase_ct - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "sybase_ct - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "sybase_ct - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "sybase_ct - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D HAVE_SYBASE_CT=1 /D ZTS=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libct.lib libcs.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_sybase_ct.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "sybase_ct - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SYBASE_CT=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_sybase_ct.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "sybase_ct - Win32 Release_TS"
-# Name "sybase_ct - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_sybase_ct.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_sybase_ct.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/sysvmsg/CREDITS b/ext/sysvmsg/CREDITS
deleted file mode 100644
index 6b150d5301..0000000000
--- a/ext/sysvmsg/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-System V Message based IPC
-Wez Furlong
diff --git a/ext/sysvmsg/EXPERIMENTAL b/ext/sysvmsg/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/sysvmsg/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/sysvmsg/config.m4 b/ext/sysvmsg/config.m4
deleted file mode 100644
index 7f0e4d31ad..0000000000
--- a/ext/sysvmsg/config.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-dnl $Id$
-
-PHP_ARG_ENABLE(sysvmsg,whether to enable System V IPC support,
-[ --enable-sysvmsg Enable sysvmsg support])
-
-if test "$PHP_SYSVMSG" != "no"; then
- AC_DEFINE(HAVE_SYSVMSG, 1, [ ])
- PHP_NEW_EXTENSION(sysvmsg, sysvmsg.c, $ext_shared)
-fi
diff --git a/ext/sysvmsg/php_sysvmsg.h b/ext/sysvmsg/php_sysvmsg.h
deleted file mode 100644
index 3d78bc051a..0000000000
--- a/ext/sysvmsg/php_sysvmsg.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SYSVMSG_H
-#define PHP_SYSVMSG_H
-
-#if HAVE_SYSVMSG
-
-extern zend_module_entry sysvmsg_module_entry;
-#define phpext_sysvmsg_ptr &sysvmsg_module_entry
-
-#ifndef __USE_GNU
-/* we want to use mtype instead of __mtype */
-#define __USE_GNU
-#endif
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(sysvmsg);
-PHP_MSHUTDOWN_FUNCTION(sysvmsg);
-PHP_RINIT_FUNCTION(sysvmsg);
-PHP_RSHUTDOWN_FUNCTION(sysvmsg);
-PHP_MINFO_FUNCTION(sysvmsg);
-
-PHP_FUNCTION(msg_get_queue);
-PHP_FUNCTION(msg_remove_queue);
-PHP_FUNCTION(msg_stat_queue);
-PHP_FUNCTION(msg_set_queue);
-PHP_FUNCTION(msg_send);
-PHP_FUNCTION(msg_receive);
-
-typedef struct {
- key_t key;
- long id;
-} sysvmsg_queue_t;
-
-#endif /* HAVE_SYSVMSG */
-
-#endif /* PHP_SYSVMSG_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/sysvmsg/sysvmsg.c b/ext/sysvmsg/sysvmsg.c
deleted file mode 100644
index 808af81570..0000000000
--- a/ext/sysvmsg/sysvmsg.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_sysvmsg.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/php_smart_str.h"
-
-/* True global resources - no need for thread safety here */
-static int le_sysvmsg;
-
-static unsigned char sixth_arg_force_ref[] = { 6, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-static unsigned char msg_receive_args_force_ref[] = { 8, BYREF_NONE, BYREF_NONE, BYREF_FORCE,
- BYREF_NONE, BYREF_FORCE, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-
-/* {{{ sysvmsg_functions[]
- *
- * Every user visible function must have an entry in sysvmsg_functions[].
- */
-function_entry sysvmsg_functions[] = {
- PHP_FE(msg_get_queue, NULL)
- PHP_FE(msg_send, sixth_arg_force_ref)
- PHP_FE(msg_receive, msg_receive_args_force_ref)
- PHP_FE(msg_remove_queue, NULL)
- PHP_FE(msg_stat_queue, NULL)
- PHP_FE(msg_set_queue, NULL)
- {NULL, NULL, NULL} /* Must be the last line in sysvmsg_functions[] */
-};
-/* }}} */
-
-/* {{{ sysvmsg_module_entry
- */
-zend_module_entry sysvmsg_module_entry = {
- STANDARD_MODULE_HEADER,
- "sysvmsg",
- sysvmsg_functions,
- PHP_MINIT(sysvmsg),
- PHP_MSHUTDOWN(sysvmsg),
- NULL,
- NULL,
- PHP_MINFO(sysvmsg),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SYSVMSG
-ZEND_GET_MODULE(sysvmsg)
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("sysvmsg.value", "42", PHP_INI_ALL, OnUpdateInt, global_value, zend_sysvmsg_globals, sysvmsg_globals)
- STD_PHP_INI_ENTRY("sysvmsg.string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_sysvmsg_globals, sysvmsg_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-static void sysvmsg_release(zend_rsrc_list_entry *rsrc)
-{
- sysvmsg_queue_t * mq = (sysvmsg_queue_t*)rsrc->ptr;
- efree(mq);
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sysvmsg)
-{
- le_sysvmsg = zend_register_list_destructors_ex(sysvmsg_release, NULL, "sysvmsg queue", module_number);
- REGISTER_LONG_CONSTANT("MSG_IPC_NOWAIT", IPC_NOWAIT, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("MSG_NOERROR", MSG_NOERROR, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("MSG_EXCEPT", MSG_EXCEPT, CONST_PERSISTENT|CONST_CS);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(sysvmsg)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(sysvmsg)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "sysvmsg support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision$");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto array msg_set_queue(resource queue, array data)
- Set information for a message queue */
-PHP_FUNCTION(msg_set_queue)
-{
- zval *queue, *data;
- sysvmsg_queue_t *mq = NULL;
- struct msqid_ds stat;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &queue, &data) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (msgctl(mq->id, IPC_STAT, &stat) == 0) {
- zval **item;
-
- /* now pull out members of data and set them in the stat buffer */
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.uid",
- sizeof("msg_perm.uid"), (void**)&item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_perm.uid = Z_LVAL_PP(item);
- }
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.gid",
- sizeof("msg_perm.gid"), (void**)&item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_perm.gid = Z_LVAL_PP(item);
- }
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.mode",
- sizeof("msg_perm.mode"), (void**)&item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_perm.mode = Z_LVAL_PP(item);
- }
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_qbytes",
- sizeof("msg_qbytes"), (void**)&item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_qbytes = Z_LVAL_PP(item);
- }
- if (msgctl(mq->id, IPC_SET, &stat) == 0) {
- RETVAL_TRUE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array msg_stat_queue(resource queue)
- Returns information about a message queue */
-PHP_FUNCTION(msg_stat_queue)
-{
- zval *queue;
- sysvmsg_queue_t *mq = NULL;
- struct msqid_ds stat;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &queue) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (msgctl(mq->id, IPC_STAT, &stat) == 0) {
- array_init(return_value);
-
- add_assoc_long(return_value, "msg_perm.uid", stat.msg_perm.uid);
- add_assoc_long(return_value, "msg_perm.gid", stat.msg_perm.gid);
- add_assoc_long(return_value, "msg_perm.mode", stat.msg_perm.mode);
- add_assoc_long(return_value, "msg_stime", stat.msg_stime);
- add_assoc_long(return_value, "msg_rtime", stat.msg_rtime);
- add_assoc_long(return_value, "msg_ctime", stat.msg_ctime);
- add_assoc_long(return_value, "msg_qnum", stat.msg_qnum);
- add_assoc_long(return_value, "msg_qbytes", stat.msg_qbytes);
- add_assoc_long(return_value, "msg_lspid", stat.msg_lspid);
- add_assoc_long(return_value, "msg_lrpid", stat.msg_lrpid);
- }
-}
-/* }}} */
-
-/* {{{ proto resource msg_get_queue(long key [, long perms])
- Attach to a message queue */
-PHP_FUNCTION(msg_get_queue)
-{
- long key;
- long perms = 0666;
- sysvmsg_queue_t *mq;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &key, &perms) == FAILURE) {
- return;
- }
-
- mq = (sysvmsg_queue_t *)emalloc(sizeof(sysvmsg_queue_t));
-
- mq->key = key;
- mq->id = msgget(key, 0);
- if (mq->id < 0) {
- /* doesn't already exist; create it */
- mq->id = msgget(key, IPC_CREAT|IPC_EXCL|perms);
- if (mq->id < 0) {
- zend_error(E_WARNING, "%s: msgget() failed for key 0x%x: %s",
- get_active_function_name(TSRMLS_C), key, strerror(errno));
- efree(mq);
- RETURN_FALSE;
- }
- }
- RETVAL_RESOURCE(zend_list_insert(mq, le_sysvmsg));
-}
-/* }}} */
-
-/* {{{ proto bool msg_remove_queue(resource queue)
- Destroy the queue */
-PHP_FUNCTION(msg_remove_queue)
-{
- zval *queue;
- sysvmsg_queue_t *mq = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &queue) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (msgctl(mq->id, IPC_RMID, NULL) == 0) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed msg_receive(resource queue, long desiredmsgtype, long &msgtype, long maxsize, mixed message [[, bool unserialize=true][, long flags=0[, long errorcode]]]
- Send a message of type msgtype (must be > 0) to a message queue */
-PHP_FUNCTION(msg_receive)
-{
- zval *out_message, *queue, *out_msgtype, *zerrcode = NULL;
- long desiredmsgtype, maxsize, flags = 0;
- zend_bool do_unserialize = 1;
- sysvmsg_queue_t *mq = NULL;
- struct msgbuf *messagebuffer = NULL; /* buffer to transmit */
- int result;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlzlz|blz",
- &queue, &desiredmsgtype, &out_msgtype, &maxsize,
- &out_message, &do_unserialize, &flags, &zerrcode) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- messagebuffer = (struct msgbuf*)emalloc(sizeof(struct msgbuf) + maxsize);
-
- result = msgrcv(mq->id, messagebuffer, maxsize, desiredmsgtype, flags);
-
- zval_dtor(out_msgtype);
- zval_dtor(out_message);
- ZVAL_LONG(out_msgtype, 0);
- ZVAL_FALSE(out_message);
-
- if (zerrcode) {
- zval_dtor(zerrcode);
- ZVAL_LONG(zerrcode, 0);
- }
-
- if (result >= 0) {
- /* got it! */
- ZVAL_LONG(out_msgtype, messagebuffer->mtype);
-
- if (do_unserialize) {
- php_unserialize_data_t var_hash;
- zval *tmp = NULL;
- const char *p = (const char*)messagebuffer->mtext;
-
- MAKE_STD_ZVAL(tmp);
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if (!php_var_unserialize(&tmp, &p, p + result, &var_hash TSRMLS_CC)) {
- zend_error(E_WARNING, "%s(): message corrupted", get_active_function_name(TSRMLS_C));
- RETVAL_FALSE;
- }
- REPLACE_ZVAL_VALUE(&out_message, tmp, 0);
- FREE_ZVAL(tmp);
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- } else {
- ZVAL_STRINGL(out_message, messagebuffer->mtext, result, 1);
- }
- RETVAL_TRUE;
- } else if (zerrcode) {
- ZVAL_LONG(zerrcode, errno);
- }
- efree(messagebuffer);
-}
-/* }}} */
-
-/* {{{ proto bool msg_send(resource queue, long msgtype, mixed message [[, bool serialize=true][, bool blocking=true][, long errorcode]])
- Send a message of type msgtype (must be > 0) to a message queue */
-PHP_FUNCTION(msg_send)
-{
- zval *message, *queue, *zerror=NULL;
- long msgtype;
- zend_bool do_serialize = 1, blocking = 1;
- sysvmsg_queue_t * mq = NULL;
- struct msgbuf * messagebuffer = NULL; /* buffer to transmit */
- int result;
- int message_len = 0;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz|bbz",
- &queue, &msgtype, &message, &do_serialize, &blocking, &zerror) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t*, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (do_serialize) {
- smart_str msg_var = {0};
- php_serialize_data_t var_hash;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&msg_var, &message, &var_hash TSRMLS_CC);
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
- /* NB: msgbuf is 1 char bigger than a long, so there is no need to
- * allocate the extra byte. */
- messagebuffer = emalloc(sizeof(struct msgbuf) + msg_var.len);
- memcpy(messagebuffer->mtext, msg_var.c, msg_var.len + 1);
- message_len = msg_var.len;
- smart_str_free(&msg_var);
- } else {
- convert_to_string_ex(&message);
- messagebuffer = emalloc(sizeof(struct msgbuf) + Z_STRLEN_P(message));
- memcpy(messagebuffer->mtext, Z_STRVAL_P(message), Z_STRLEN_P(message) + 1);
- message_len = Z_STRLEN_P(message);
- }
-
- /* set the message type */
- messagebuffer->mtype = msgtype;
-
- result = msgsnd(mq->id, messagebuffer, message_len, blocking ? 0 : IPC_NOWAIT);
-
- efree(messagebuffer);
-
- if (result == -1) {
- zend_error(E_WARNING, "%s(): msgsnd failed: %s",
- get_active_function_name(TSRMLS_C), strerror(errno));
- if (zerror) {
- ZVAL_LONG(zerror, errno);
- }
- } else {
- RETVAL_TRUE;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 tw=78 fdm=marker
- * vim<600: noet sw=4 ts=4 tw=78
- */
diff --git a/ext/sysvmsg/tests/001.phpt b/ext/sysvmsg/tests/001.phpt
deleted file mode 100644
index bc1691316b..0000000000
--- a/ext/sysvmsg/tests/001.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-send/receive serialized message.
---SKIPIF--
-<?php // vim600:syn=php
-if (!extension_loaded("sysvmsg")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-$key = ftok("./ext/sysvmsg/tests/001.phpt", "p");
-$q = msg_get_queue($key);
-msg_send($q, 1, "hello") or print "FAIL\n";
-$type = null;
-if (msg_receive($q, 0, $type, 1024, $message)) {
- echo "TYPE: $type\n";
- echo "DATA: $message\n";
-}
-if (!msg_remove_queue($q)) {
- echo "BAD: queue removal failed\n";
-}
-?>
---EXPECT--
-TYPE: 1
-DATA: hello
diff --git a/ext/sysvsem/CREDITS b/ext/sysvsem/CREDITS
deleted file mode 100644
index 45232809f0..0000000000
--- a/ext/sysvsem/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-System V Semaphores
-Tom May
diff --git a/ext/sysvsem/config.m4 b/ext/sysvsem/config.m4
deleted file mode 100644
index 0b635d6dde..0000000000
--- a/ext/sysvsem/config.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(sysvsem,whether to enable System V semaphore support,
-[ --enable-sysvsem Enable System V semaphore support.])
-
-if test "$PHP_SYSVSEM" != "no"; then
- PHP_NEW_EXTENSION(sysvsem, sysvsem.c, $ext_shared)
- AC_DEFINE(HAVE_SYSVSEM, 1, [ ])
- AC_CACHE_CHECK(for union semun,php_cv_semun,
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
- ],
- [union semun x;],
- [
- php_cv_semun=yes
- ],[
- php_cv_semun=no
- ])
- )
- if test "$php_cv_semun" = "yes"; then
- AC_DEFINE(HAVE_SEMUN, 1, [ ])
- else
- AC_DEFINE(HAVE_SEMUN, 0, [ ])
- fi
-fi
diff --git a/ext/sysvsem/php_sysvsem.h b/ext/sysvsem/php_sysvsem.h
deleted file mode 100644
index 28533d1a38..0000000000
--- a/ext/sysvsem/php_sysvsem.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Tom May <tom@go2net.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYSVSEM_H
-#define PHP_SYSVSEM_H
-
-#if HAVE_SYSVSEM
-
-extern zend_module_entry sysvsem_module_entry;
-#define sysvsem_module_ptr &sysvsem_module_entry
-
-PHP_MINIT_FUNCTION(sysvsem);
-PHP_FUNCTION(sem_get);
-PHP_FUNCTION(sem_acquire);
-PHP_FUNCTION(sem_release);
-PHP_FUNCTION(sem_remove);
-
-typedef struct {
- int le_sem;
-} sysvsem_module;
-
-typedef struct {
- int id; /* For error reporting. */
- int key; /* For error reporting. */
- int semid; /* Returned by semget(). */
- int count; /* Acquire count for auto-release. */
- int auto_release; /* flag that says to auto-release. */
-} sysvsem_sem;
-
-extern sysvsem_module php_sysvsem_module;
-
-#else
-
-#define sysvsem_module_ptr NULL
-
-#endif
-
-#define phpext_sysvsem_ptr sysvsem_module_ptr
-
-#endif /* PHP_SYSVSEM_H */
diff --git a/ext/sysvsem/sysvsem.c b/ext/sysvsem/sysvsem.c
deleted file mode 100644
index edc0ac340b..0000000000
--- a/ext/sysvsem/sysvsem.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Tom May <tom@go2net.com> |
- | Gavin Sherry <gavin@linuxworld.com.au> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Latest update build anc tested on Linux 2.2.14
- *
- * This has been built and tested on Solaris 2.6 and Linux 2.1.122.
- * It may not compile or execute correctly on other systems.
- *
- * sas: Works for me on Linux 2.0.36 and FreeBSD 3.0-current
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SYSVSEM
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <errno.h>
-
-#include "php_sysvsem.h"
-
-#if !HAVE_SEMUN
-
-union semun {
- int val; /* value for SETVAL */
- struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */
- unsigned short int *array; /* array for GETALL, SETALL */
- struct seminfo *__buf; /* buffer for IPC_INFO */
-};
-
-#undef HAVE_SEMUN
-#define HAVE_SEMUN 1
-
-#endif
-
-/* {{{ sysvsem_functions[]
- */
-function_entry sysvsem_functions[] = {
- PHP_FE(sem_get, NULL)
- PHP_FE(sem_acquire, NULL)
- PHP_FE(sem_release, NULL)
- PHP_FE(sem_remove, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ sysvsem_module_entry
- */
-zend_module_entry sysvsem_module_entry = {
- STANDARD_MODULE_HEADER,
- "sysvsem", sysvsem_functions, PHP_MINIT(sysvsem), NULL, NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SYSVSEM
-ZEND_GET_MODULE(sysvsem)
-#endif
-
-
-THREAD_LS sysvsem_module php_sysvsem_module;
-
-/* Semaphore functions using System V semaphores. Each semaphore
- * actually consists of three semaphores allocated as a unit under the
- * same key. Semaphore 0 (SYSVSEM_SEM) is the actual semaphore, it is
- * initialized to max_acquire and decremented as processes acquire it.
- * The value of semaphore 1 (SYSVSEM_USAGE) is a count of the number
- * of processes using the semaphore. After calling semget(), if a
- * process finds that the usage count is 1, it will set the value of
- * SYSVSEM_SEM to max_acquire. This allows max_acquire to be set and
- * track the PHP code without having a global init routine or external
- * semaphore init code. Except see the bug regarding a race condition
- * php_sysvsem_get(). Semaphore 2 (SYSVSEM_SETVAL) serializes the
- * calls to GETVAL SYSVSEM_USAGE and SETVAL SYSVSEM_SEM. It can be
- * acquired only when it is zero.
- */
-
-#define SYSVSEM_SEM 0
-#define SYSVSEM_USAGE 1
-#define SYSVSEM_SETVAL 2
-
-/* {{{ release_sysvsem_sem
- */
-static void release_sysvsem_sem(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sysvsem_sem *sem_ptr = (sysvsem_sem *)rsrc->ptr;
- struct sembuf sop[2];
- int opcount = 1;
-/*
- * if count == -1, semaphore has been removed
- * Need better way to handle this
- */
-
- if(sem_ptr->count == -1 || !sem_ptr->auto_release) {
- return;
- }
- /* Decrement the usage count. */
-
- sop[0].sem_num = SYSVSEM_USAGE;
- sop[0].sem_op = -1;
- sop[0].sem_flg = SEM_UNDO;
-
- /* Release the semaphore if it has been acquired but not released. */
-
- if (sem_ptr->count) {
- php_error(E_WARNING, "Releasing SysV semaphore id %d key 0x%x in request cleanup", sem_ptr->id, sem_ptr->key);
-
- sop[1].sem_num = SYSVSEM_SEM;
- sop[1].sem_op = sem_ptr->count;
- sop[1].sem_flg = SEM_UNDO;
-
- opcount++;
- }
- if (semop(sem_ptr->semid, sop, opcount) == -1) {
- php_error(E_WARNING, "semop() failed in release_sysvsem_sem for key 0x%x: %s", sem_ptr->key, strerror(errno));
- }
-
- efree(sem_ptr);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sysvsem)
-{
- php_sysvsem_module.le_sem = zend_register_list_destructors_ex(release_sysvsem_sem, NULL, "sysvsem", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-#define SETVAL_WANTS_PTR
-
-#if defined(_AIX)
-#undef SETVAL_WANTS_PTR
-#endif
-
-/* {{{ proto int sem_get(int key [, int max_acquire [, int perm [, int auto_release]])
- Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously */
-PHP_FUNCTION(sem_get)
-{
- int key, max_acquire, perm, auto_release = 1;
- int semid;
- struct sembuf sop[3];
- int count;
- sysvsem_sem *sem_ptr;
-#if HAVE_SEMUN
- union semun un;
-#endif
-
- max_acquire = 1;
- perm = 0666;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &key, &max_acquire, &perm, &auto_release)) {
- RETURN_FALSE;
- }
-
- /* Get/create the semaphore. Note that we rely on the semaphores
- * being zeroed when they are created. Despite the fact that
- * the(?) Linux semget() man page says they are not initialized,
- * the kernel versions 2.0.x and 2.1.z do in fact zero them.
- */
-
- semid = semget(key, 3, perm|IPC_CREAT);
- if (semid == -1) {
- php_error(E_WARNING, "semget() failed for key 0x%x: %s", key, strerror(errno));
- RETURN_FALSE;
- }
-
- /* Find out how many processes are using this semaphore. Note
- * that on Linux (at least) there is a race condition here because
- * semaphore undo on process exit is not atomic, so we could
- * acquire SYSVSEM_SETVAL before a crashed process has decremented
- * SYSVSEM_USAGE in which case count will be greater than it
- * should be and we won't set max_acquire. Fortunately this
- * doesn't actually matter in practice.
- */
-
- /* Wait for sem 1 to be zero . . . */
-
- sop[0].sem_num = SYSVSEM_SETVAL;
- sop[0].sem_op = 0;
- sop[0].sem_flg = 0;
-
- /* . . . and increment it so it becomes non-zero . . . */
-
- sop[1].sem_num = SYSVSEM_SETVAL;
- sop[1].sem_op = 1;
- sop[1].sem_flg = SEM_UNDO;
-
- /* . . . and increment the usage count. */
-
- sop[2].sem_num = SYSVSEM_USAGE;
- sop[2].sem_op = 1;
- sop[2].sem_flg = SEM_UNDO;
- while (semop(semid, sop, 3) == -1) {
- if (errno != EINTR) {
- php_error(E_WARNING, "semop() failed acquiring SYSVSEM_SETVAL for key 0x%x: %s", key, strerror(errno));
- break;
- }
- }
-
- /* Get the usage count. */
-#if HAVE_SEMUN
- count = semctl(semid, SYSVSEM_USAGE, GETVAL, un);
-#else
- count = semctl(semid, SYSVSEM_USAGE, GETVAL, NULL);
-#endif
- if (count == -1) {
- php_error(E_WARNING, "semctl(GETVAL) failed for key 0x%x: %s", key, strerror(errno));
- }
-
- /* If we are the only user, then take this opportunity to set the max. */
-
- if (count == 1) {
-#if HAVE_SEMUN
- /* This is correct for Linux which has union semun. */
- union semun semarg;
- semarg.val = max_acquire;
- if (semctl(semid, SYSVSEM_SEM, SETVAL, semarg) == -1) {
- php_error(E_WARNING, "semctl(SETVAL) failed for key 0x%x: %s", key, strerror(errno));
- }
-#elif defined(SETVAL_WANTS_PTR)
- /* This is correct for Solaris 2.6 which does not have union semun. */
- if (semctl(semid, SYSVSEM_SEM, SETVAL, &max_acquire) == -1) {
- php_error(E_WARNING, "semctl(SETVAL) failed for key 0x%x: %s", key, strerror(errno));
- }
-#else
- /* This works for i.e. AIX */
- if (semctl(semid, SYSVSEM_SEM, SETVAL, max_acquire) == -1) {
- php_error(E_WARNING, "semctl(SETVAL) failed for key 0x%x: %s", key, strerror(errno));
- }
-#endif
- }
-
- /* Set semaphore 1 back to zero. */
-
- sop[0].sem_num = SYSVSEM_SETVAL;
- sop[0].sem_op = -1;
- sop[0].sem_flg = SEM_UNDO;
- while (semop(semid, sop, 1) == -1) {
- if (errno != EINTR) {
- php_error(E_WARNING, "semop() failed releasing SYSVSEM_SETVAL for key 0x%x: %s", key, strerror(errno));
- break;
- }
- }
-
- sem_ptr = (sysvsem_sem *) emalloc(sizeof(sysvsem_sem));
- sem_ptr->key = key;
- sem_ptr->semid = semid;
- sem_ptr->count = 0;
- sem_ptr->auto_release = auto_release;
-
- Z_LVAL_P(return_value) = zend_list_insert(sem_ptr, php_sysvsem_module.le_sem);
- Z_TYPE_P(return_value) = IS_LONG;
-
- sem_ptr->id = (int)Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ php_sysvsem_semop
- */
-static void php_sysvsem_semop(INTERNAL_FUNCTION_PARAMETERS, int acquire)
-{
- pval **arg_id;
- int id, type;
- sysvsem_sem *sem_ptr;
- struct sembuf sop;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg_id)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg_id);
- id = (int)Z_LVAL_PP(arg_id);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- sem_ptr = (sysvsem_sem *) zend_list_find(id, &type);
- if (type!=php_sysvsem_module.le_sem) {
- php_error(E_WARNING, "%d is not a SysV semaphore index", id);
- RETURN_FALSE;
- }
-
- if (!acquire && sem_ptr->count == 0) {
- php_error(E_WARNING, "SysV semaphore index %d (key 0x%x) is not currently acquired", id, sem_ptr->key);
- RETURN_FALSE;
- }
-
- sop.sem_num = SYSVSEM_SEM;
- sop.sem_op = acquire ? -1 : 1;
- sop.sem_flg = SEM_UNDO;
-
- while (semop(sem_ptr->semid, &sop, 1) == -1) {
- if (errno != EINTR) {
- php_error(E_WARNING, "semop(%s) failed for key 0x%x: %s",
- acquire ? "acquire" : "release", sem_ptr->key, strerror(errno));
- RETURN_FALSE;
- }
- }
-
- sem_ptr->count -= acquire ? -1 : 1;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int sem_acquire(int id)
- Acquires the semaphore with the given id, blocking if necessary */
-PHP_FUNCTION(sem_acquire)
-{
- php_sysvsem_semop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int sem_release(int id)
- Releases the semaphore with the given id */
-PHP_FUNCTION(sem_release)
-{
- php_sysvsem_semop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int sem_remove(int id)
- Removes semaphore from Unix systems */
-
-/*
- * contributed by Gavin Sherry gavin@linuxworld.com.au
- * Fri Mar 16 00:50:13 EST 2001
- */
-
-PHP_FUNCTION(sem_remove)
-{
- pval **arg_id;
- int id,type;
- sysvsem_sem *sem_ptr;
-#if HAVE_SEMUN
- union semun un;
- struct semid_ds buf;
-#endif
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_id);
-
- id = Z_LVAL_PP(arg_id);
-
- sem_ptr = (sysvsem_sem *) zend_list_find(id, &type);
-
- if (type!=php_sysvsem_module.le_sem) {
- php_error(E_WARNING, "%d is not a SysV semaphore index", id);
- RETURN_FALSE;
- }
-
-#if HAVE_SEMUN
- un.buf = &buf;
- if(semctl(sem_ptr->semid, 0, IPC_STAT, &un) < 0) {
-#else
- if(semctl(sem_ptr->semid, 0, IPC_STAT, NULL) < 0) {
-#endif
- php_error(E_WARNING, "%d is not a existing SysV Semaphore Id", id);
- RETURN_FALSE;
- }
-
-#if HAVE_SEMUN
- if(semctl(sem_ptr->semid, 0, IPC_RMID, &un) < 0) {
-#else
- if(semctl(sem_ptr->semid, 0, IPC_RMID, NULL) < 0) {
-#endif
- php_error(E_WARNING, "sem_remove() failed for id %d: %s", id, strerror(errno));
- RETURN_FALSE;
- }
-
- /* let release_sysvsem_sem know we have removed
- * the semaphore to avoid issues with releasing.
- */
-
- sem_ptr->count = -1;
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#endif /* HAVE_SYSVSEM */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/sysvshm/CREDITS b/ext/sysvshm/CREDITS
deleted file mode 100644
index 65a30ceb0c..0000000000
--- a/ext/sysvshm/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-System V Shared Memory
-Christian Cartus
diff --git a/ext/sysvshm/config.m4 b/ext/sysvshm/config.m4
deleted file mode 100644
index 671d050463..0000000000
--- a/ext/sysvshm/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(sysvshm,whether to enable System V shared memory support,
-[ --enable-sysvshm Enable the System V shared memory support.])
-
-if test "$PHP_SYSVSHM" != "no"; then
- AC_DEFINE(HAVE_SYSVSHM, 1, [ ])
- PHP_NEW_EXTENSION(sysvshm, sysvshm.c, $ext_shared)
-fi
diff --git a/ext/sysvshm/php_sysvshm.h b/ext/sysvshm/php_sysvshm.h
deleted file mode 100644
index c7ebd1232e..0000000000
--- a/ext/sysvshm/php_sysvshm.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Christian Cartus <cartus@atrior.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYSVSHM_H
-#define PHP_SYSVSHM_H
-
-#if HAVE_SYSVSHM
-
-extern zend_module_entry sysvshm_module_entry;
-#define sysvshm_module_ptr &sysvshm_module_entry
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-
-typedef struct {
- int le_shm;
- long init_mem;
-} sysvshm_module;
-
-
-typedef struct {
- long key;
- long length;
- long next;
- char mem;
-} sysvshm_chunk;
-
-
-typedef struct {
- char magic[8];
- long start;
- long end;
- long free;
- long total;
-} sysvshm_chunk_head;
-
-
-typedef struct {
- key_t key; /* Key set by user */
- long id; /* Returned by shmget. */
- sysvshm_chunk_head *ptr; /* memoryaddress of shared memory */
-} sysvshm_shm;
-
-
-
-PHP_MINIT_FUNCTION(sysvshm);
-PHP_FUNCTION(shm_attach);
-PHP_FUNCTION(shm_detach);
-PHP_FUNCTION(shm_remove);
-PHP_FUNCTION(shm_put_var);
-PHP_FUNCTION(shm_get_var);
-PHP_FUNCTION(shm_remove_var);
-int php_put_shm_data(sysvshm_chunk_head *ptr,long key,char *data, long len);
-long php_check_shm_data(sysvshm_chunk_head *ptr, long key);
-int php_remove_shm_data(sysvshm_chunk_head *ptr, long shm_varpos);
-
-extern sysvshm_module php_sysvshm;
-
-#else
-
-#define sysvshm_module_ptr NULL
-
-#endif
-
-#define phpext_sysvshm_ptr sysvshm_module_ptr
-
-#endif /* PHP_SYSVSHM_H */
diff --git a/ext/sysvshm/sysvshm.c b/ext/sysvshm/sysvshm.c
deleted file mode 100644
index 1d6b399298..0000000000
--- a/ext/sysvshm/sysvshm.c
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Christian Cartus <cartus@atrior.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* This has been built and tested on Linux 2.2.14
- *
- * This has been built and tested on Solaris 2.6.
- * It may not compile or execute correctly on other systems.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SYSVSHM
-
-#include <errno.h>
-
-#include "php_sysvshm.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/php_smart_str.h"
-
-/* {{{ sysvshm_functions[]
- */
-function_entry sysvshm_functions[] = {
- PHP_FE(shm_attach, NULL)
- PHP_FE(shm_remove, NULL)
- PHP_FE(shm_detach, NULL)
- PHP_FE(shm_put_var, NULL)
- PHP_FE(shm_get_var, NULL)
- PHP_FE(shm_remove_var, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ sysvshm_module_entry
- */
-zend_module_entry sysvshm_module_entry = {
- STANDARD_MODULE_HEADER,
- "sysvshm", sysvshm_functions,
- PHP_MINIT(sysvshm), NULL,
- NULL, NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SYSVSHM
-ZEND_GET_MODULE(sysvshm)
-#endif
-
-#undef shm_ptr /* undefine AIX-specific macro */
-
-THREAD_LS sysvshm_module php_sysvshm;
-
-/* {{{ php_release_sysvshm
- */
-static void php_release_sysvshm(zend_rsrc_list_entry *rsrc)
-{
- sysvshm_shm *shm_ptr = (sysvshm_shm *)rsrc->ptr;
- shmdt((void*)shm_ptr->ptr);
- efree(shm_ptr);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sysvshm)
-{
- php_sysvshm.le_shm = zend_register_list_destructors_ex(php_release_sysvshm, NULL, "sysvshm", module_number);
- if (cfg_get_long("sysvshm.init_mem",
- &php_sysvshm.init_mem)==FAILURE) {
- php_sysvshm.init_mem=10000;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int shm_attach(int key [, int memsize [, int perm]])
- Creates or open a shared memory segment */
-PHP_FUNCTION(shm_attach)
-{
- pval **arg_key,**arg_size,**arg_flag;
- long shm_size,shm_flag;
- sysvshm_shm *shm_list_ptr;
- char *shm_ptr;
- sysvshm_chunk_head *chunk_ptr;
- key_t shm_key = (key_t) 0;
- long shm_id,list_id;
- int ac = ZEND_NUM_ARGS();
-
- shm_flag = 0666;
- shm_size = php_sysvshm.init_mem;
-
- if(ac < 1 || ac > 3 || zend_get_parameters_ex(ac, &arg_key, &arg_size, &arg_flag) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 3:
- convert_to_long_ex(arg_flag);
- shm_flag = Z_LVAL_PP(arg_flag);
- case 2:
- convert_to_long_ex(arg_size);
- shm_size= Z_LVAL_PP(arg_size);
- case 1:
- convert_to_long_ex(arg_key);
- shm_key = Z_LVAL_PP(arg_key);
- }
-
- if((shm_list_ptr = (sysvshm_shm *) emalloc(sizeof(sysvshm_shm)))==NULL) {
- php_error(E_WARNING, "shm_attach() failed for key 0x%x: cannot allocate internal listelement", shm_key);
- RETURN_FALSE;
- }
-
- /* get the id from a specified key or create new shared memory */
- if((shm_id=shmget(shm_key,0,0))<0) {
- if(shm_size<sizeof(sysvshm_chunk_head)) {
- php_error(E_WARNING, "shm_attach() failed for key 0x%x: memorysize too small", shm_key);
- RETURN_FALSE;
- }
- if((shm_id=shmget(shm_key,shm_size,shm_flag|IPC_CREAT|IPC_EXCL))<0) {
- php_error(E_WARNING, "shmget() failed for key 0x%x: %s", shm_key, strerror(errno));
- RETURN_FALSE;
- }
- }
-
- if((shm_ptr = shmat(shm_id,NULL,0))==(void *)-1) {
- php_error(E_WARNING, "shmget() failed for key 0x%x: %s", shm_key, strerror(errno));
- RETURN_FALSE;
- }
-
- /* check if shm is already initialized */
- chunk_ptr= (sysvshm_chunk_head*) shm_ptr;
- if(strcmp((char*)&(chunk_ptr->magic),"PHP_SM")!=0) {
- strcpy((char*)&(chunk_ptr->magic),"PHP_SM");
- chunk_ptr->start=sizeof(sysvshm_chunk_head);
- chunk_ptr->end=chunk_ptr->start;
- chunk_ptr->total=shm_size;
- chunk_ptr->free=shm_size-chunk_ptr->end;
- }
-
-
- shm_list_ptr->key = shm_key;
- shm_list_ptr->id = shm_id;
- shm_list_ptr->ptr = chunk_ptr;
- list_id = zend_list_insert(shm_list_ptr, php_sysvshm.le_shm);
- RETURN_LONG(list_id);
-}
-/* }}} */
-
-/* {{{ proto int shm_detach(int shm_identifier)
- Disconnects from shared memory segment */
-PHP_FUNCTION(shm_detach)
-{
- pval **arg_id;
- long id;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
-
- id = Z_LVAL_PP(arg_id);
-
- zend_list_delete(id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int shm_remove(int shm_identifier)
- Removes shared memory from Unix systems */
-
-PHP_FUNCTION(shm_remove)
-{
- pval **arg_id;
- long id;
- int type;
- sysvshm_shm *shm_list_ptr;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
-
- id = Z_LVAL_PP(arg_id);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
-
- if (!shm_list_ptr) {
- php_error(E_WARNING, "The parameter is not a valid shm_indentifier");
- RETURN_FALSE;
- }
-
- if(shmctl(shm_list_ptr->id,IPC_RMID,NULL)<0) {
- php_error(E_WARNING, "shm_remove() failed for key 0x%x, id %i: %s", shm_list_ptr->key, id,strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int shm_put_var(int shm_identifier, int variable_key, mixed variable)
- Inserts or updates a variable in shared memory */
-PHP_FUNCTION(shm_put_var)
-{
- pval **arg_id, **arg_key, **arg_var;
- long key, id;
- sysvshm_shm *shm_list_ptr;
- int type;
- smart_str shm_var = {0};
- int ret;
- php_serialize_data_t var_hash;
-
- if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg_id, &arg_key,&arg_var) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- convert_to_long_ex(arg_key);
- key = Z_LVAL_PP(arg_key);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
- if (type!=php_sysvshm.le_shm) {
- php_error(E_WARNING, "%d is not a SysV shared memory index", id);
- RETURN_FALSE;
- }
-
- /* setup string-variable and serialize */
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&shm_var,arg_var,&var_hash TSRMLS_CC);
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
- /* insert serialized variable into shared memory */
- ret=php_put_shm_data(shm_list_ptr->ptr,key,shm_var.c,shm_var.len);
-
- /* free string */
- smart_str_free(&shm_var);
-
- if(ret==-1) {
- php_error(E_WARNING, "not enough shared memory left");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed shm_get_var(int id, int variable_key)
- Returns a variable from shared memory */
-PHP_FUNCTION(shm_get_var)
-{
- pval **arg_id, **arg_key;
- long key, id;
- sysvshm_shm *shm_list_ptr;
- int type;
- char *shm_data;
- long shm_varpos;
- sysvshm_chunk *shm_var;
- php_unserialize_data_t var_hash;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg_id, &arg_key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- convert_to_long_ex(arg_key);
- key = Z_LVAL_PP(arg_key);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
- if (type!=php_sysvshm.le_shm) {
- php_error(E_WARNING, "%d is not a SysV shared memory index", id);
- RETURN_FALSE;
- }
-
- /* setup string-variable and serialize */
- /* get serialized variable from shared memory */
- shm_varpos=php_check_shm_data((shm_list_ptr->ptr),key);
-
- if(shm_varpos<0) {
- php_error(E_WARNING, "variable key %d doesn't exist", key);
- RETURN_FALSE;
- }
- shm_var=(sysvshm_chunk*)((char*)shm_list_ptr->ptr+shm_varpos);
- shm_data=&shm_var->mem;
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if(php_var_unserialize(&return_value, (const char **) &shm_data, shm_data+shm_var->length,&var_hash TSRMLS_CC)!=1) {
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- php_error(E_WARNING, "variable data in shared memory is corruped");
- RETURN_FALSE;
- }
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-}
-/* }}} */
-
-/* {{{ proto int shm_remove_var(int id, int variable_key)
- Removes variable from shared memory */
-PHP_FUNCTION(shm_remove_var)
-{
- pval **arg_id, **arg_key;
- long key, id;
- sysvshm_shm *shm_list_ptr;
- int type;
- long shm_varpos;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg_id, &arg_key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- convert_to_long_ex(arg_key);
- key = Z_LVAL_PP(arg_key);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
- if (type!=php_sysvshm.le_shm) {
- php_error(E_WARNING, "%d is not a SysV shared memory index", id);
- RETURN_FALSE;
- }
-
- shm_varpos=php_check_shm_data((shm_list_ptr->ptr),key);
-
- if(shm_varpos<0) {
- php_error(E_WARNING, "variable key %d doesn't exist", key);
- RETURN_FALSE;
- }
- php_remove_shm_data((shm_list_ptr->ptr),shm_varpos);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_put_shm_data
- * inserts an ascii-string into shared memory */
-int php_put_shm_data(sysvshm_chunk_head *ptr,long key,char *data, long len) {
- sysvshm_chunk* shm_var;
- long total_size;
- long shm_varpos;
-
- total_size=((long)(len+sizeof(sysvshm_chunk)-1)/4)*4+4; /* 4-byte alligment */
-
- if((shm_varpos=php_check_shm_data(ptr,key))>0) {
- php_remove_shm_data(ptr, shm_varpos);
- }
-
- if(ptr->free<total_size) {
- return -1; /* not enough memeory */
- }
-
- shm_var=(sysvshm_chunk*)((char *)ptr+ptr->end);
- shm_var->key=key;
- shm_var->length=len;
- shm_var->next=total_size;
- memcpy(&(shm_var->mem),data,len);
- ptr->end+=total_size;
- ptr->free-=total_size;
- return 0;
-}
-/* }}} */
-
-/* {{{ php_check_shm_data
- */
-long php_check_shm_data(sysvshm_chunk_head *ptr, long key) {
- long pos;
- sysvshm_chunk *shm_var;
-
- pos=ptr->start;
-
- for(;;) {
- if(pos>=ptr->end) {
- return -1;
- }
- shm_var=(sysvshm_chunk*)((char*)ptr+pos);
- if(shm_var->key==key) {
- return pos;
- }
- pos+=shm_var->next;
- }
- return -1;
-}
-/* }}} */
-
-/* {{{ php_remove_shm_data
- */
-int php_remove_shm_data(sysvshm_chunk_head *ptr, long shm_varpos) {
- sysvshm_chunk *chunk_ptr, *next_chunk_ptr;
- long memcpy_len;
-
- chunk_ptr=(sysvshm_chunk*)((char*)ptr+shm_varpos);
- next_chunk_ptr=(sysvshm_chunk*)((char*)ptr+shm_varpos+chunk_ptr->next);
-
- memcpy_len=ptr->end-shm_varpos-chunk_ptr->next;
- ptr->free+=chunk_ptr->next;
- ptr->end-=chunk_ptr->next;
- if(memcpy_len>0)
- memcpy(chunk_ptr,next_chunk_ptr,memcpy_len);
- return 0;
-}
-/* }}} */
-
-#endif /* HAVE_SYSVSHM */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/tokenizer/CREDITS b/ext/tokenizer/CREDITS
deleted file mode 100644
index c2879dd4ee..0000000000
--- a/ext/tokenizer/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-tokenizer
-Andrei Zmievski
diff --git a/ext/tokenizer/EXPERIMENTAL b/ext/tokenizer/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/tokenizer/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/tokenizer/Makefile.frag b/ext/tokenizer/Makefile.frag
deleted file mode 100644
index a612d6819f..0000000000
--- a/ext/tokenizer/Makefile.frag
+++ /dev/null
@@ -1 +0,0 @@
-$(builddir)/tokenizer.lo: Zend/zend_language_parser.h
diff --git a/ext/tokenizer/config.m4 b/ext/tokenizer/config.m4
deleted file mode 100644
index eed403626e..0000000000
--- a/ext/tokenizer/config.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension tokenizer
-
-dnl Otherwise use enable:
-
-PHP_ARG_ENABLE(tokenizer, whether to enable tokenizer support,
-[ --disable-tokenizer Disable tokenizer support], yes)
-
-if test "$PHP_TOKENIZER" != "no"; then
- PHP_NEW_EXTENSION(tokenizer, tokenizer.c, $ext_shared)
- PHP_ADD_MAKEFILE_FRAGMENT
-fi
diff --git a/ext/tokenizer/php_tokenizer.h b/ext/tokenizer/php_tokenizer.h
deleted file mode 100644
index 8c55480397..0000000000
--- a/ext/tokenizer/php_tokenizer.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_TOKENIZER_H
-#define PHP_TOKENIZER_H
-
-extern zend_module_entry tokenizer_module_entry;
-#define phpext_tokenizer_ptr &tokenizer_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_TOKENIZER_API __declspec(dllexport)
-#else
-#define PHP_TOKENIZER_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(tokenizer);
-PHP_MSHUTDOWN_FUNCTION(tokenizer);
-PHP_RINIT_FUNCTION(tokenizer);
-PHP_RSHUTDOWN_FUNCTION(tokenizer);
-PHP_MINFO_FUNCTION(tokenizer);
-
-PHP_FUNCTION(confirm_tokenizer_compiled); /* For testing, remove later. */
-PHP_FUNCTION(token_get_all);
-PHP_FUNCTION(token_name);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(tokenizer)
- int global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(tokenizer)
-*/
-
-/* In every utility function you add that needs to use variables
- in php_tokenizer_globals, call TSRM_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMG_CC
- after the last function argument and declare your utility function
- with TSRMG_DC after the last declared argument. Always refer to
- the globals in your function as TOKENIZER_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define TOKENIZER_G(v) TSRMG(tokenizer_globals_id, zend_tokenizer_globals *, v)
-#else
-#define TOKENIZER_G(v) (tokenizer_globals.v)
-#endif
-
-#endif /* PHP_TOKENIZER_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
deleted file mode 100644
index 1c589faecb..0000000000
--- a/ext/tokenizer/tokenizer.c
+++ /dev/null
@@ -1,518 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_tokenizer.h"
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-typedef unsigned int yy_size_t;
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
- };
-
-#include "zend.h"
-#include "zend_language_scanner.h"
-#include "zend_language_parser.h"
-
-#define zendtext LANG_SCNG(yy_text)
-#define zendleng LANG_SCNG(yy_leng)
-/* If you declare any globals in php_tokenizer.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(tokenizer)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_tokenizer;
-
-/* {{{ tokenizer_functions[]
- *
- * Every user visible function must have an entry in tokenizer_functions[].
- */
-function_entry tokenizer_functions[] = {
- PHP_FE(token_get_all, NULL)
- PHP_FE(token_name, NULL)
- {NULL, NULL, NULL} /* Must be the last line in tokenizer_functions[] */
-};
-/* }}} */
-
-/* {{{ tokenizer_module_entry
- */
-zend_module_entry tokenizer_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "tokenizer",
- tokenizer_functions,
- PHP_MINIT(tokenizer),
- PHP_MSHUTDOWN(tokenizer),
- PHP_RINIT(tokenizer), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(tokenizer), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(tokenizer),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_TOKENIZER
-ZEND_GET_MODULE(tokenizer)
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("tokenizer.global_value", "42", PHP_INI_ALL, OnUpdateInt, global_value, zend_tokenizer_globals, tokenizer_globals)
- STD_PHP_INI_ENTRY("tokenizer.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_tokenizer_globals, tokenizer_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-/* {{{ php_tokenizer_init_globals
- */
-/* Uncomment this function if you have INI entries
-static void php_tokenizer_init_globals(zend_tokenizer_globals *tokenizer_globals)
-{
- tokenizer_globals->global_value = 0;
- tokenizer_globals->global_string = NULL;
-}
-*/
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(tokenizer)
-{
- /* If you have INI entries, uncomment these lines
- ZEND_INIT_MODULE_GLOBALS(tokenizer, php_tokenizer_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- */
-
- REGISTER_LONG_CONSTANT("T_INCLUDE", T_INCLUDE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INCLUDE_ONCE", T_INCLUDE_ONCE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EVAL", T_EVAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_REQUIRE", T_REQUIRE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_REQUIRE_ONCE", T_REQUIRE_ONCE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LOGICAL_OR", T_LOGICAL_OR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LOGICAL_XOR", T_LOGICAL_XOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LOGICAL_AND", T_LOGICAL_AND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PRINT", T_PRINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PLUS_EQUAL", T_PLUS_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_MINUS_EQUAL", T_MINUS_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_MUL_EQUAL", T_MUL_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DIV_EQUAL", T_DIV_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONCAT_EQUAL", T_CONCAT_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_MOD_EQUAL", T_MOD_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_AND_EQUAL", T_AND_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OR_EQUAL", T_OR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BOOLEAN_OR", T_BOOLEAN_OR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BOOLEAN_AND", T_BOOLEAN_AND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_EQUAL", T_IS_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_NOT_EQUAL", T_IS_NOT_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_IDENTICAL", T_IS_IDENTICAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_NOT_IDENTICAL", T_IS_NOT_IDENTICAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_SMALLER_OR_EQUAL", T_IS_SMALLER_OR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_GREATER_OR_EQUAL", T_IS_GREATER_OR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SL", T_SL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SR", T_SR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INC", T_INC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INT_CAST", T_INT_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOUBLE_CAST", T_DOUBLE_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STRING_CAST", T_STRING_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ARRAY_CAST", T_ARRAY_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OBJECT_CAST", T_OBJECT_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BOOL_CAST", T_BOOL_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_UNSET_CAST", T_UNSET_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EXIT", T_EXIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IF", T_IF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ELSEIF", T_ELSEIF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ELSE", T_ELSE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDIF", T_ENDIF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LNUMBER", T_LNUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DNUMBER", T_DNUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STRING", T_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STRING_VARNAME", T_STRING_VARNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_VARIABLE", T_VARIABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_NUM_STRING", T_NUM_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INLINE_HTML", T_INLINE_HTML, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CHARACTER", T_CHARACTER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BAD_CHARACTER", T_BAD_CHARACTER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENCAPSED_AND_WHITESPACE", T_ENCAPSED_AND_WHITESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONSTANT_ENCAPSED_STRING", T_CONSTANT_ENCAPSED_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ECHO", T_ECHO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DO", T_DO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_WHILE", T_WHILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDWHILE", T_ENDWHILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FOR", T_FOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDFOR", T_ENDFOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FOREACH", T_FOREACH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDFOREACH", T_ENDFOREACH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DECLARE", T_DECLARE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDDECLARE", T_ENDDECLARE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_AS", T_AS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SWITCH", T_SWITCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDSWITCH", T_ENDSWITCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CASE", T_CASE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DEFAULT", T_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BREAK", T_BREAK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONTINUE", T_CONTINUE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OLD_FUNCTION", T_OLD_FUNCTION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FUNCTION", T_FUNCTION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONST", T_CONST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_RETURN", T_RETURN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_USE", T_USE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_GLOBAL", T_GLOBAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STATIC", T_STATIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_VAR", T_VAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_UNSET", T_UNSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ISSET", T_ISSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EMPTY", T_EMPTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLASS", T_CLASS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EXTENDS", T_EXTENDS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OBJECT_OPERATOR", T_OBJECT_OPERATOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOUBLE_ARROW", T_DOUBLE_ARROW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LIST", T_LIST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ARRAY", T_ARRAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLASS_C", T_CLASS_C, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FUNC_C", T_FUNC_C, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LINE", T_LINE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FILE", T_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_COMMENT", T_COMMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ML_COMMENT", T_ML_COMMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OPEN_TAG", T_OPEN_TAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OPEN_TAG_WITH_ECHO", T_OPEN_TAG_WITH_ECHO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLOSE_TAG", T_CLOSE_TAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_WHITESPACE", T_WHITESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_START_HEREDOC", T_START_HEREDOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_END_HEREDOC", T_END_HEREDOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOLLAR_OPEN_CURLY_BRACES", T_DOLLAR_OPEN_CURLY_BRACES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CURLY_OPEN", T_CURLY_OPEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PAAMAYIM_NEKUDOTAYIM", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(tokenizer)
-{
- /* uncomment this line if you have INI entries
- UNREGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(tokenizer)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(tokenizer)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(tokenizer)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Tokenizer Support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-static void tokenize(zval *return_value TSRMLS_DC)
-{
- zval token;
- zval *keyword;
- int token_type;
- zend_bool destroy;
-
- array_init(return_value);
-
- ZVAL_NULL(&token);
- while ((token_type = lex_scan(&token TSRMLS_CC))) {
- destroy = 1;
- switch (token_type) {
- case T_OPEN_TAG:
- case T_OPEN_TAG_WITH_ECHO:
- case T_WHITESPACE:
- case T_COMMENT:
- case T_CLOSE_TAG:
- destroy = 0;
- break;
- }
-
- if (token_type >= 256) {
- MAKE_STD_ZVAL(keyword);
- array_init(keyword);
- add_next_index_long(keyword, token_type);
- add_next_index_stringl(keyword, zendtext, zendleng, 1);
- add_next_index_zval(return_value, keyword);
- } else {
- add_next_index_stringl(return_value, zendtext, zendleng, 1);
- }
- if (destroy && Z_TYPE(token) != IS_NULL) {
- zval_dtor(&token);
- }
- ZVAL_NULL(&token);
- }
-}
-
-static char *
-get_token_type_name(int token_type)
-{
- switch (token_type) {
- case T_INCLUDE: return "T_INCLUDE";
- case T_INCLUDE_ONCE: return "T_INCLUDE_ONCE";
- case T_EVAL: return "T_EVAL";
- case T_REQUIRE: return "T_REQUIRE";
- case T_REQUIRE_ONCE: return "T_REQUIRE_ONCE";
- case T_LOGICAL_OR: return "T_LOGICAL_OR";
- case T_LOGICAL_XOR: return "T_LOGICAL_XOR";
- case T_LOGICAL_AND: return "T_LOGICAL_AND";
- case T_PRINT: return "T_PRINT";
- case T_PLUS_EQUAL: return "T_PLUS_EQUAL";
- case T_MINUS_EQUAL: return "T_MINUS_EQUAL";
- case T_MUL_EQUAL: return "T_MUL_EQUAL";
- case T_DIV_EQUAL: return "T_DIV_EQUAL";
- case T_CONCAT_EQUAL: return "T_CONCAT_EQUAL";
- case T_MOD_EQUAL: return "T_MOD_EQUAL";
- case T_AND_EQUAL: return "T_AND_EQUAL";
- case T_OR_EQUAL: return "T_OR_EQUAL";
- case T_XOR_EQUAL: return "T_XOR_EQUAL";
- case T_SL_EQUAL: return "T_SL_EQUAL";
- case T_SR_EQUAL: return "T_SR_EQUAL";
- case T_BOOLEAN_OR: return "T_BOOLEAN_OR";
- case T_BOOLEAN_AND: return "T_BOOLEAN_AND";
- case T_IS_EQUAL: return "T_IS_EQUAL";
- case T_IS_NOT_EQUAL: return "T_IS_NOT_EQUAL";
- case T_IS_IDENTICAL: return "T_IS_IDENTICAL";
- case T_IS_NOT_IDENTICAL: return "T_IS_NOT_IDENTICAL";
- case T_IS_SMALLER_OR_EQUAL: return "T_IS_SMALLER_OR_EQUAL";
- case T_IS_GREATER_OR_EQUAL: return "T_IS_GREATER_OR_EQUAL";
- case T_SL: return "T_SL";
- case T_SR: return "T_SR";
- case T_INC: return "T_INC";
- case T_DEC: return "T_DEC";
- case T_INT_CAST: return "T_INT_CAST";
- case T_DOUBLE_CAST: return "T_DOUBLE_CAST";
- case T_STRING_CAST: return "T_STRING_CAST";
- case T_ARRAY_CAST: return "T_ARRAY_CAST";
- case T_OBJECT_CAST: return "T_OBJECT_CAST";
- case T_BOOL_CAST: return "T_BOOL_CAST";
- case T_UNSET_CAST: return "T_UNSET_CAST";
- case T_NEW: return "T_NEW";
- case T_EXIT: return "T_EXIT";
- case T_IF: return "T_IF";
- case T_ELSEIF: return "T_ELSEIF";
- case T_ELSE: return "T_ELSE";
- case T_ENDIF: return "T_ENDIF";
- case T_LNUMBER: return "T_LNUMBER";
- case T_DNUMBER: return "T_DNUMBER";
- case T_STRING: return "T_STRING";
- case T_STRING_VARNAME: return "T_STRING_VARNAME";
- case T_VARIABLE: return "T_VARIABLE";
- case T_NUM_STRING: return "T_NUM_STRING";
- case T_INLINE_HTML: return "T_INLINE_HTML";
- case T_CHARACTER: return "T_CHARACTER";
- case T_BAD_CHARACTER: return "T_BAD_CHARACTER";
- case T_ENCAPSED_AND_WHITESPACE: return "T_ENCAPSED_AND_WHITESPACE";
- case T_CONSTANT_ENCAPSED_STRING: return "T_CONSTANT_ENCAPSED_STRING";
- case T_ECHO: return "T_ECHO";
- case T_DO: return "T_DO";
- case T_WHILE: return "T_WHILE";
- case T_ENDWHILE: return "T_ENDWHILE";
- case T_FOR: return "T_FOR";
- case T_ENDFOR: return "T_ENDFOR";
- case T_FOREACH: return "T_FOREACH";
- case T_ENDFOREACH: return "T_ENDFOREACH";
- case T_DECLARE: return "T_DECLARE";
- case T_ENDDECLARE: return "T_ENDDECLARE";
- case T_AS: return "T_AS";
- case T_SWITCH: return "T_SWITCH";
- case T_ENDSWITCH: return "T_ENDSWITCH";
- case T_CASE: return "T_CASE";
- case T_DEFAULT: return "T_DEFAULT";
- case T_BREAK: return "T_BREAK";
- case T_CONTINUE: return "T_CONTINUE";
- case T_OLD_FUNCTION: return "T_OLD_FUNCTION";
- case T_FUNCTION: return "T_FUNCTION";
- case T_CONST: return "T_CONST";
- case T_RETURN: return "T_RETURN";
- case T_USE: return "T_USE";
- case T_GLOBAL: return "T_GLOBAL";
- case T_STATIC: return "T_STATIC";
- case T_VAR: return "T_VAR";
- case T_UNSET: return "T_UNSET";
- case T_ISSET: return "T_ISSET";
- case T_EMPTY: return "T_EMPTY";
- case T_CLASS: return "T_CLASS";
- case T_EXTENDS: return "T_EXTENDS";
- case T_OBJECT_OPERATOR: return "T_OBJECT_OPERATOR";
- case T_DOUBLE_ARROW: return "T_DOUBLE_ARROW";
- case T_LIST: return "T_LIST";
- case T_ARRAY: return "T_ARRAY";
- case T_CLASS_C: return "T_CLASS_C";
- case T_FUNC_C: return "T_FUNC_C";
- case T_LINE: return "T_LINE";
- case T_FILE: return "T_FILE";
- case T_COMMENT: return "T_COMMENT";
- case T_ML_COMMENT: return "T_ML_COMMENT";
- case T_OPEN_TAG: return "T_OPEN_TAG";
- case T_OPEN_TAG_WITH_ECHO: return "T_OPEN_TAG_WITH_ECHO";
- case T_CLOSE_TAG: return "T_CLOSE_TAG";
- case T_WHITESPACE: return "T_WHITESPACE";
- case T_START_HEREDOC: return "T_START_HEREDOC";
- case T_END_HEREDOC: return "T_END_HEREDOC";
- case T_DOLLAR_OPEN_CURLY_BRACES: return "T_DOLLAR_OPEN_CURLY_BRACES";
- case T_CURLY_OPEN: return "T_CURLY_OPEN";
- case T_PAAMAYIM_NEKUDOTAYIM: return "T_DOUBLE_COLON";
- }
- return "UNKNOWN";
-}
-
-/* {{{ proto array token_get_all(string source)
- */
-PHP_FUNCTION(token_get_all)
-{
- char *source = NULL;
- int argc = ZEND_NUM_ARGS();
- int source_len;
- zval source_z;
- zend_lex_state original_lex_state;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "s", &source, &source_len) == FAILURE)
- return;
-
- ZVAL_STRINGL(&source_z, source, source_len, 1);
- zend_save_lexical_state(&original_lex_state TSRMLS_CC);
-
- if (zend_prepare_string_for_scanning(&source_z, "" TSRMLS_CC) == FAILURE) {
- RETURN_EMPTY_STRING();
- }
-
- tokenize(return_value TSRMLS_CC);
-
- zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
- zval_dtor(&source_z);
-}
-/* }}} */
-
-/* {{{ proto string token_name(int type)
- */
-PHP_FUNCTION(token_name)
-{
- int argc = ZEND_NUM_ARGS();
- long type;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "l", &type) == FAILURE) {
- return;
- }
- RETVAL_STRING(get_token_type_name(type), 1);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/tokenizer/tokenizer.dsp b/ext/tokenizer/tokenizer.dsp
deleted file mode 100644
index a131efe8a2..0000000000
--- a/ext/tokenizer/tokenizer.dsp
+++ /dev/null
@@ -1,108 +0,0 @@
-# Microsoft Developer Studio Project File - Name="tokenizer" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=tokenizer - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "tokenizer.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "tokenizer.mak" CFG="tokenizer - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "tokenizer - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "tokenizer - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "tokenizer - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOKENIZER_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_TOKENIZER" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_TOKENIZER=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_tokenizer.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "tokenizer - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOKENIZER_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_TOKENIZER" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_TOKENIZER=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_tokenizer.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "tokenizer - Win32 Release_TS"
-# Name "tokenizer - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\tokenizer.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_tokenizer.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/tokenizer/tokenizer.php b/ext/tokenizer/tokenizer.php
deleted file mode 100644
index c13063c628..0000000000
--- a/ext/tokenizer/tokenizer.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-if(!extension_loaded('tokenizer')) {
- dl('tokenizer.so');
-}
-
-$fp = fopen('php://stdin', 'r');
-while (!feof($fp)) {
- $content .= fread($fp, 4096);
-}
-fclose($fp);
-
-$tokens = token_get_all($content);
-
-$count = count($tokens);
-$state = 0;
-for ($i = 0; $i < $count; $i++) {
- $token = $tokens[$i];
- if (is_array($token)) {
- if ($state == 1 && $token[0] == T_STRING) {
- $token[1] = preg_replace('!([a-z])([A-Z])!e', '"$1_".strtolower("$2")', $token[1]);
- $state = 0;
- } else if ($token[0] == T_FUNCTION) {
- $state = 1;
- }
- $chunk = $token[1];
- } else {
- $chunk = $token;
- }
- $output .= $chunk;
-}
-
-print $output;
-
-?>
diff --git a/ext/vpopmail/CREDITS b/ext/vpopmail/CREDITS
deleted file mode 100644
index ed89afbb5f..0000000000
--- a/ext/vpopmail/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Vpopmail
-David Croft, Boian Bonev
diff --git a/ext/vpopmail/EXPERIMENTAL b/ext/vpopmail/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/vpopmail/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/vpopmail/README b/ext/vpopmail/README
deleted file mode 100644
index a47c9b0f56..0000000000
--- a/ext/vpopmail/README
+++ /dev/null
@@ -1,194 +0,0 @@
-Minimum Survial Readme
-
-VPOPMAIL SPECIFIC ISSUES
--------------------------------------------------------------------------------
-
-assume
- qmail is installed in /var/qmail
- vpopmail in ~vpopmail
- qmail-send runs as qmails
-
-
-different parts of vpopmail require certain user id (uid) and
-group id (gid) in order to operate normally.
-
-brief list with requirements:
-
-adddomain
-deldomain
-addaliasdomain
- read/write permissions on
- /var/qmail/users/ assing, assign.lock, cdb
-
- read/write permissions on
- /var/qmail/control/*
-
- singnal qmail-send with SIGHUP (uid==qmails or root)
-
- read/write permissions on
- ~vpopmail/domains
-
- optionally read/write to cdb vpopmail databases
-
-adduser
-deluser
- read/write permissions on
- ~vpopmail/domains/<givendomain> (or the default domain)
-
- optionally read/write to cdb vpopmail databases
-
-passwd
- optionally read/write on
- ~vpopmail/domains/<givendomain>/<givenuser>
- (only when sqwebmail is configured)
-
-setuserquota
- optionally read/write to cdb vpopmail databases
-
-auth_user
- optionally read from cdb vpopmail databases
-
-POSSIBLE SCENARIOS
--------------------------------------------------------------------------------
-
-php is in cgi mode
-
- command line invocation
-
- web server cgi invocation
-
-php is web server module
-
-
-in command line mode the php interpreter may be run from vpopmail uid to
-administer users, etc. or as root to add/del domains - this is the easiest case
-
-in cgi mode proper uid may be provided eighter by suid php interpreter or
-using cgi exec wrapper. the same restrictions as in command line mode apply
-
-the web server module mode is the most powerful and works much faster that cgi.
-in this mode more restrictions apply because web server's uid at least must
-be able to read/write the directories of the manages domains.
-
-first scenario only allows web scripts to manage certain domains. security
-may be compromised if there are user webs under the same web server
-with allowed script execution.
-
-second scenario is to setup web server and vpopmail under the same uid/gid.
-thus allowing only user management in all domains.
-
-third scenario extends second with the ability to manage domains. generally
-from security reasons it is not a good idea to run such a system on a server
-with shell users - vpopmail's domain admin tools must be suid root to work
-properly and most users will be able to add/delete domains.
-
-it is not considered a good idea to run web servers as root. hence the need
-to suid vpopmail domain management tools and exec them insted using native api.
-native api for domains is only suitable for cgi/command line mode, when php is
-run through suid root wrapper or suid itself.
-
-almost all scenarios lack secutiry in different ways - eighter powerful tools
-get suid root or parts of vpopmail setup become useable by any system user
-or web users with cgi/php access may utilize vpopmail api for mail management.
-
-perhapse the most secure solution is to run a separate apache server under
-the vpopmail user and chmod 700 ~vpopmail/bin.
-
-FREQUENTLY USED CONFIGURATION STEPS
--------------------------------------------------------------------------------
-
-changing existing vpopmail uid/gid is possible but not easy -
-take these into account:
-
-#1 - backup your setup, mail and configuration!
-
- stop qmail-send before doing any changes
- else your mail in process may get bounced or
- deleted or delivered to a default destination or...
-
- stop pop3/imap remote/local users - while changing uids
- users cannot check their mail
-
- you may leave smtp - qmail-inject will take care
- no matter vpopmail setup is broken (if and only
- if you have stopped qmail-send)
-
- in rc.d scripts tcpserver uid/gid may need to be changed
-
- reconfiguring vpopmail:
- ./configure ....your opts plus new uid/gid....
-
- remember to
- make clean all install
- in vpopmail src tree; clean is needed if vpopmail has already been
- configured with another uid/gid - vpopmail's dependencies are not
- intact after reconfigure
-
- after these steps change the uid/gid in
- /var/qmail/users/assign
- compile the assign file. the dummies way is to
- vadddomain mydummy.domain aaaa
- vdeldomain mydummy.domain
-
- suid root vadddomain, vdeldomain and vaddaliasdomain
- (this is only needed for domain management in web server module)
- cd ~vpopmail/bin
- chown 0.0 vadddomain vdeldomain vaddaliasdomain
- chmod +s vadddomain vdeldomain vaddaliasdomain
-
- optionally secure ~vpopmail/bin
- (beware these programs may be exploitable or at least used)
- chmod 700 ~vpopmail/bin
-
- run qmail-send
- /bin/csh -cf '/var/qmail/rc &'
-
- run pop3 tcpserver or what you are using
-
- verify your setup
-
-#2 verify php vpopmail module and configuration
-
- for web server module and cgi setups create a phpinfo page:
-
- <?php phpinfo() ?>
-
- for command line mode run
- php -i
-
- check for vpopmail section in result
-
- verify that php euid/egid match vpopmail's
-
- in setups where only certain domain users will be administrated
- verify that php euid/egid can access their respective directories
-
-FUNCTION PROTOTYPES
--------------------------------------------------------------------------------
-
-bool vpopmail_add_domain(string domain, string dir, int uid, int gid)
-bool vpopmail_del_domain(string domain)
-bool vpopmail_add_alias_domain(string domain, string aliasdomain)
-bool vpopmail_add_domain_ex(string domain, string passwd [, string quota [, string bounce [, bool apop]]])
-bool vpopmail_del_domain_ex(string domain)
-bool vpopmail_add_alias_domain_ex(string olddomain, string newdomain)
-bool vpopmail_add_user(string user, string domain, string password[, string gecos[, bool apop]])
-bool vpopmail_del_user(string user, string domain)
-bool vpopmail_passwd(string user, string domain, string password)
-bool vpopmail_set_user_quota(string user, string domain, string quota)
-bool vpopmail_auth_user(string user, string domain, string password[, string apop])
-bool vpopmail_alias_add(string user, string domain, string alias)
-bool vpopmail_alias_del(string user, string domain)
-bool vpopmail_alias_del_domain(string domain)
-array vpopmail_alias_get(string alias, string domain)
-string vpopmail_error(void)
-
-
-CONTACT INFO
--------------------------------------------------------------------------------
-
-your comments, fixes and stuff are welcome
-Boian Bonev <boian@bonev.com>
-
-$Id$
-
diff --git a/ext/vpopmail/config.m4 b/ext/vpopmail/config.m4
deleted file mode 100644
index 65ff8a85d2..0000000000
--- a/ext/vpopmail/config.m4
+++ /dev/null
@@ -1,94 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(vpopmail, for vpopmail support,
-[ --with-vpopmail[=DIR] Include vpopmail support.])
-
-if test "$PHP_VPOPMAIL" != "no"; then
- AC_MSG_CHECKING(for vpopmail install directory)
- for i in /usr/include/vpopmail /usr/include /usr ~vpopmail /home/vpopmail /home/popmail /var/qmail/vpopmail /var/qmail/popmail $PHP_VPOPMAIL; do
- if test -r $i/vpopmail.h; then
- VPOPMAIL_INC_DIR=$i
- VPOPMAIL_DIR=$i
- elif test -r $i/include/vpopmail.h; then
- VPOPMAIL_INC_DIR=$i/include
- VPOPMAIL_DIR=$i
- fi
-
- if test -r $i/libvpopmail.a; then
- VPOPMAIL_LIB_DIR=$i
- elif test -r $i/lib/libvpopmail.a; then
- VPOPMAIL_LIB_DIR=$i/lib
- fi
-
- if test -x $i/vadddomain; then
- VPOPMAIL_BIN_DIR=$i
- elif test -x $i/bin/vadddomain; then
- VPOPMAIL_BIN_DIR=$i/bin
- fi
- done
-
- for i in "$VPOPMAIL_INC_DIR/vpopmail.h" "$VPOPMAIL_INC_DIR/vpopmail_config.h" "$VPOPMAIL_LIB_DIR/libvpopmail.a"; do
- if test ! -r "$i"; then
- AC_MSG_ERROR(Could not find '$i'. Please make sure you have vpopmail installed. Use
-./configure --with-vpopmail=<vpopmail-home-dir> if necessary)
- fi
- done
-
- for i in "$VPOPMAIL_BIN_DIR/vadddomain" "$VPOPMAIL_BIN_DIR/vaddaliasdomain" "$VPOPMAIL_BIN_DIR/vdeldomain" ; do
- if test ! -x "$i"; then
- AC_MSG_ERROR(Could not find '$i' or binary not executeable under current user.
-Please make sure you have vpopmail properly installed.
-Use ./configure --with-vpopmail=<vpopmail-home-dir> if necessary)
- fi
- done
-
- AC_MSG_RESULT($VPOPMAIL_DIR)
-
- dnl newer versions of vpopmail have include/vauth.h defining valias functions
- if test -r $VPOPMAIL_INC_DIR/vauth.h; then
- AC_DEFINE(HAVE_VPOPMAIL_VAUTH,1,[Whether vpopmail has vauth.h])
- fi
- dnl check for valias functions in the -lvpopmail
- PHP_CHECK_LIBRARY(vpopmail, valias_select, [
- AC_DEFINE(HAVE_VPOPMAIL_VALIAS,1,[Whether vpopmail has valias support])
- ],[],[
- -L$VPOPMAIL_LIB_DIR
- ])
-
- PHP_ADD_INCLUDE($VPOPMAIL_INC_DIR)
-
- PHP_SUBST(VPOPMAIL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(vpopmail, $VPOPMAIL_LIB_DIR, VPOPMAIL_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_VPOPMAIL,1,[Whether you have vpopmail])
- AC_DEFINE_UNQUOTED(VPOPMAIL_BIN_DIR,"$VPOPMAIL_BIN_DIR",[vpopmail bin path])
-
- dnl Detect if we have vpopmail >= 5.2 to accomodate C-API changes
- dnl
- dnl The current table is:
- dnl
- dnl PHP API VPOPMAIL VERSION
- dnl 1 < 5.2
- dnl 2 >= 5.2
- vpopmail_internal_api=1
- version=`grep VERSION $VPOPMAIL_INC_DIR/vpopmail_config.h`
- if test -n "$version"; then
- version_major=`echo "$version" | tr "\"#." " " | awk '{print $3}'`
- version_minor=`echo "$version" | tr "\"#." " " | awk '{print $4}'`
- if test $version_major -ge 5; then
- if test $version_major -eq 5; then
- if test $version_minor -ge 2; then
- vpopmail_internal_api=2
- fi
- fi
- if test $version_major -gt 5; then
- vpopmail_internal_api=2
- fi
- fi
- fi
- AC_DEFINE_UNQUOTED(HAVE_VPOPMAIL_API,$vpopmail_internal_api,[Interal definition for vpopmail API changes])
-
- PHP_NEW_EXTENSION(vpopmail, php_vpopmail.c, $ext_shared)
-fi
diff --git a/ext/vpopmail/php_vpopmail.c b/ext/vpopmail/php_vpopmail.c
deleted file mode 100644
index 83e5b41936..0000000000
--- a/ext/vpopmail/php_vpopmail.c
+++ /dev/null
@@ -1,938 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: David Croft <david@infotrek.co.uk> |
- | Boian Bonev <boian@bonev.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* TODO: move to config.m4 when support for old versions is ready or just
- * don't support rather old vpopmail. current version must bail out if
- * incompat option is specified and work for minimal params
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#undef VPOPMAIL_IS_REALLY_OLD
-
-#include <errno.h>
-#include <signal.h>
-#include "php.h"
-#include "php_ini.h"
-#include "php_vpopmail.h"
-
-#if HAVE_VPOPMAIL
-
-#include "ext/standard/exec.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(vpopmail)
-
-/* keep this as the last include in order to destroy VERSION/PACKAGE only for the rest of the code */
-
-#undef VERSION
-#undef PACKAGE
-#include "vpopmail_config.h"
-#include "vpopmail.h"
-#if HAVE_VPOPMAIL_VAUTH
-#include "vauth.h"
-#endif
-
-
-/* vpopmail does not export this, argh! */
-#define MAX_BUFF 500
-
-/* Function table */
-
-function_entry vpopmail_functions[] = {
- /* domain management - lib call */
- PHP_FE(vpopmail_add_domain, NULL)
- PHP_FE(vpopmail_del_domain, NULL)
- PHP_FE(vpopmail_add_alias_domain, NULL)
- /* domain management - exec */
- PHP_FE(vpopmail_add_domain_ex, NULL)
- PHP_FE(vpopmail_del_domain_ex, NULL)
- PHP_FE(vpopmail_add_alias_domain_ex, NULL)
- /* user management */
- PHP_FE(vpopmail_add_user, NULL)
- PHP_FE(vpopmail_del_user, NULL)
- PHP_FE(vpopmail_passwd, NULL)
- PHP_FE(vpopmail_set_user_quota, NULL)
- PHP_FE(vpopmail_auth_user, NULL)
- /* alias management */
-#if HAVE_VPOPMAIL_VALIAS
- PHP_FE(vpopmail_alias_add, NULL)
- PHP_FE(vpopmail_alias_del, NULL)
-#ifdef VALIAS
- PHP_FE(vpopmail_alias_del_domain, NULL)
-#endif
- PHP_FE(vpopmail_alias_get, NULL)
- PHP_FE(vpopmail_alias_get_all, NULL)
-#endif
- /* error handling */
- PHP_FE(vpopmail_error, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry vpopmail_module_entry = {
- STANDARD_MODULE_HEADER,
- "vpopmail",
- vpopmail_functions,
- PHP_MINIT(vpopmail),
- PHP_MSHUTDOWN(vpopmail),
- PHP_RINIT(vpopmail),
- PHP_RSHUTDOWN(vpopmail),
- PHP_MINFO(vpopmail),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_VPOPMAIL
-ZEND_GET_MODULE(vpopmail)
-#endif
-
-
-PHP_INI_BEGIN()
- /*STD_PHP_INI_ENTRY("vpopmail.directory", "", PHP_INI_ALL, OnUpdateString, directory, php_vpopmail_globals, vpopmail_globals)*/
-PHP_INI_END()
-
-
-PHP_MINIT_FUNCTION(vpopmail)
-{
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(vpopmail)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(vpopmail)
-{
- VPOPMAILG(vpopmail_open) = 0;
- VPOPMAILG(vpopmail_errno) = 0;
-
- return SUCCESS;
-}
-
-/* nasty but... */
-void vclose();
-/* ...we need this */
-
-PHP_RSHUTDOWN_FUNCTION(vpopmail)
-{
- if (VPOPMAILG(vpopmail_open) != 0) {
- vclose();
- }
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(vpopmail)
-{
- char ids[64];
-
- sprintf(ids, "%d/%d %d/%d/%d/%d", VPOPMAILUID, VPOPMAILGID, getuid(), getgid(), geteuid(), getegid());
-
- php_info_print_table_start();
- php_info_print_table_header(2, "vpopmail support", "enabled");
- php_info_print_table_row(2, "vpopmail version", VERSION);
- php_info_print_table_row(2, "vpopmail uid/gid php uid/gid/euid/egid", ids);
- php_info_print_table_row(2, "vpopmail dir", VPOPMAILDIR);
- php_info_print_table_row(2, "vpopmail vadddomain", VPOPMAIL_BIN_DIR VPOPMAIL_ADDD);
- php_info_print_table_row(2, "vpopmail vdeldomain", VPOPMAIL_BIN_DIR VPOPMAIL_DELD);
- php_info_print_table_row(2, "vpopmail vaddaliasdomain", VPOPMAIL_BIN_DIR VPOPMAIL_ADAD);
-#if HAVE_VPOPMAIL_VALIAS
- php_info_print_table_row(2, "vpopmail valias support", "Enabled");
-#else
- php_info_print_table_row(2, "vpopmail valias support", "Not supported by vpopmail");
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-/*
- * Domain management functions - library call
- */
-
-/* {{{ proto bool vpopmail_add_domain(string domain, string dir, int uid, int gid)
- Adds a new virtual domain */
-PHP_FUNCTION(vpopmail_add_domain)
-{
- zval **domain;
- zval **dir;
- zval **uid;
- zval **gid;
- int retval;
-
- if (ZEND_NUM_ARGS() != 4
- || zend_get_parameters_ex(4, &domain, &dir, &uid, &gid) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(domain);
- convert_to_string_ex(dir);
- convert_to_long_ex(uid);
- convert_to_long_ex(gid);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = vadddomain(Z_STRVAL_PP(domain),
-#ifdef VPOPMAIL_IS_REALLY_OLD
- 0
-#else
- Z_STRVAL_PP(dir),
- Z_LVAL_PP(uid),
- Z_LVAL_PP(gid)
-#endif
- );
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_del_domain(string domain)
- Deletes a virtual domain */
-PHP_FUNCTION(vpopmail_del_domain)
-{
- zval **domain;
- int retval;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &domain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(domain);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = vdeldomain(Z_STRVAL_PP(domain));
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_add_alias_domain(string domain, string aliasdomain)
- Adds an alias for a virtual domain */
-PHP_FUNCTION(vpopmail_add_alias_domain)
-{
- zval **domain;
- zval **aliasdomain;
- char *tmpstr;
- char Dir[156];
- char TmpBuf1[300];
- char TmpBuf2[300];
- int uid, gid;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain, &aliasdomain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(domain);
- convert_to_string_ex(aliasdomain);
-
- php_strtolower(Z_STRVAL_PP(domain), Z_STRLEN_PP(domain));
- php_strtolower(Z_STRVAL_PP(aliasdomain), Z_STRLEN_PP(aliasdomain));
-
- TSRMLS_FETCH();
- VPOPMAILG(vpopmail_open) = 1;
-
- tmpstr = vget_assign(Z_STRVAL_PP(domain), Dir, 156, &uid, &gid);
-
- if (tmpstr == NULL) {
- php_error(E_WARNING, "vpopmail_add_alias_domain error: existing domain %s was not found", Z_STRVAL_PP(domain));
- VPOPMAILG(vpopmail_errno) = 1;
- RETURN_FALSE;
- }
-
- tmpstr = strstr(Dir, "/domains");
- *tmpstr = 0;
-
- sprintf(TmpBuf1, "%s/domains/%s", Dir, Z_STRVAL_PP(aliasdomain));
- sprintf(TmpBuf2, "%s/domains/%s", Dir, Z_STRVAL_PP(domain));
-
- if (symlink(TmpBuf2, TmpBuf1) != 0) {
- php_error(E_WARNING, "vpopmail_add_alias_domain error: could not symlink domains: %s", strerror(errno));
- VPOPMAILG(vpopmail_errno) = 1;
- RETURN_FALSE;
- }
-
-#if (!defined(HAVE_VPOPMAIL_API) || HAVE_VPOPMAIL_API == 1)
- if (add_domain_assign(Z_STRVAL_PP(aliasdomain), Dir, uid, gid) != 1) {
-#else
- if (add_domain_assign(Z_STRVAL_PP(aliasdomain), Z_STRVAL_PP(domain), Dir, uid, gid) != 1) {
-#endif
- php_error(E_WARNING, "vpopmail_addaliasdomain could not add domain to control files");
- VPOPMAILG(vpopmail_errno) = 1;
- RETURN_FALSE;
- }
-
- signal_process("qmail-send", SIGHUP);
-
- VPOPMAILG(vpopmail_errno) = 0;
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- * Domain management functions - exec
- */
-
-/* {{{ proto bool vpopmail_add_domain_ex(string domain, string passwd [, string quota [, string bounce [, bool apop]]])
- Adds a new virtual domain */
-PHP_FUNCTION(vpopmail_add_domain_ex)
-{
- zval **domain, **passwd, **quota, **bounce, **apop;
- int retval,len=0,argc=ZEND_NUM_ARGS(),is_bounce_email;
- int fr_bounce=0,fr_quota=0;
- char *cmd,*escdomain="",*escpasswd="",*escquota="",*escbounce="",*escapop="";
-
- if (argc < 2 || argc > 5 || zend_get_parameters_ex(argc, &domain, &passwd, &quota, &bounce, &apop) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 5:
- convert_to_long_ex(apop);
- escapop=Z_BVAL_PP(apop)?"1":"0";
- /* Fall-through. */
- case 4:
- fr_bounce=1;
- convert_to_string_ex(bounce);
- escbounce=php_escape_shell_cmd(Z_STRVAL_PP(bounce));
- if (!escbounce) {
- php_error(E_WARNING,"vpopmail_adddomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- /* Fall-through. */
- case 3:
- fr_quota=1;
- convert_to_string_ex(quota);
- escquota=php_escape_shell_cmd(Z_STRVAL_PP(quota));
- if (!escquota) {
- php_error(E_WARNING,"vpopmail_adddomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- /* Fall-through. */
- case 2:
- convert_to_string_ex(passwd);
- convert_to_string_ex(domain);
- break;
- }
-
- escdomain=php_escape_shell_cmd(Z_STRVAL_PP(domain));
- escpasswd=php_escape_shell_cmd(Z_STRVAL_PP(passwd));
- if (!escdomain||!escpasswd) {
- if (fr_quota)
- efree(escquota);
- if (fr_bounce)
- efree(escbounce);
- php_error(E_WARNING,"vpopmail_adddomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- len+=strlen(VPOPMAIL_BIN_DIR);
- len+=strlen(VPOPMAIL_ADDD);
- if (*escquota)
- len+=strlen("-q ")+strlen(escquota)+strlen(" ");
- if (*escbounce) {
- if (strchr(Z_STRVAL_PP(bounce),'@')) {
- is_bounce_email=1;
- len+=strlen("-e ")+strlen(escbounce)+strlen(" ");
- } else {
- is_bounce_email=0;
- len+=strlen("-b ");
- }
- }
- if (*escapop)
- len+=strlen("-a ");
- len+=strlen(escdomain)+strlen(" ");
- len+=strlen(escpasswd)+strlen(" ");
- len++;
- cmd=emalloc(len);
- if (!cmd) {
- if (fr_quota)
- efree(escquota);
- if (fr_bounce)
- efree(escbounce);
- efree(escdomain);
- efree(escpasswd);
- php_error(E_WARNING,"vpopmail_adddomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- strcpy(cmd,VPOPMAIL_BIN_DIR VPOPMAIL_ADDD);
- if (*escquota) {
- strcat(cmd,"-q ");
- strcat(cmd,escquota);
- strcat(cmd," ");
- }
- if (*escbounce) {
- if (is_bounce_email) {
- strcat(cmd,"-e ");
- strcat(cmd,escbounce);
- strcat(cmd," ");
- } else {
- strcat(cmd,"-b ");
- }
- }
- if (*escapop)
- strcat(cmd,"-a ");
- strcat(cmd,escdomain);
- strcat(cmd," ");
- strcat(cmd,escpasswd);
- retval=php_Exec(0,cmd,NULL,return_value TSRMLS_CC);
- efree(cmd);
- efree(escdomain);
- efree(escpasswd);
- if (fr_quota)
- efree(escquota);
- if (fr_bounce)
- efree(escbounce);
-
- if (retval!=VA_SUCCESS) {
- php_error(E_WARNING,"vpopmail_add_domain_ex error: %d", retval);
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- } else {
- VPOPMAILG(vpopmail_errno)=0;
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_del_domain_ex(string domain)
- Deletes a virtual domain */
-PHP_FUNCTION(vpopmail_del_domain_ex)
-{
- zval **domain;
- int retval=-1;
- char *cmd,*escdomain;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &domain) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
-
- escdomain=php_escape_shell_cmd(Z_STRVAL_PP(domain));
- if (!escdomain) {
- php_error(E_WARNING,"vpopmail_del_domain_ex error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- cmd=emalloc(strlen(VPOPMAIL_BIN_DIR)+strlen(VPOPMAIL_DELD)+strlen(escdomain)+1);
- if (!cmd) {
- efree(escdomain);
- php_error(E_WARNING,"vpopmail_del_domain_ex error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- sprintf(cmd,VPOPMAIL_BIN_DIR VPOPMAIL_DELD"%s",escdomain);
- retval=php_Exec(0,cmd,NULL,return_value TSRMLS_CC);
- efree(escdomain);
- efree(cmd);
-
- if (retval!=VA_SUCCESS) {
- php_error(E_WARNING,"vpopmail_del_domain_ex error: %d", retval);
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- } else {
- VPOPMAILG(vpopmail_errno)=0;
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_add_alias_domain_ex(string olddomain, string newdomain)
- Adds an alias to an existing virtual domain */
-PHP_FUNCTION(vpopmail_add_alias_domain_ex)
-{
- zval **olddomain, **newdomain;
- int retval;
- char *cmd,*escolddomain,*escnewdomain;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &olddomain, &newdomain) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(olddomain);
- convert_to_string_ex(newdomain);
- escnewdomain=php_escape_shell_cmd(Z_STRVAL_PP(newdomain));
- if (!escnewdomain) {
- php_error(E_WARNING,"vpopmail_addaliasdomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- escolddomain=php_escape_shell_cmd(Z_STRVAL_PP(olddomain));
- if (!escolddomain) {
- efree(escnewdomain);
- php_error(E_WARNING,"vpopmail_addaliasdomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
-
- cmd=emalloc(strlen(VPOPMAIL_BIN_DIR VPOPMAIL_ADAD)+strlen(escolddomain)+strlen(" ")+strlen(escnewdomain)+1);
- if (!cmd) {
- efree(escnewdomain);
- efree(escolddomain);
- php_error(E_WARNING,"vpopmail_addaliasdomain error: cannot alloc");
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- }
- sprintf(cmd,"%s%s %s",VPOPMAIL_BIN_DIR VPOPMAIL_ADAD,escolddomain,escnewdomain);
- retval=php_Exec(0,cmd,NULL,return_value TSRMLS_CC);
- efree(cmd);
- efree(escnewdomain);
- efree(escolddomain);
-
- if (retval!=VA_SUCCESS) {
- php_error(E_WARNING,"vpopmail_addaliasdomain error: %d", retval);
- VPOPMAILG(vpopmail_errno)=1;
- RETURN_FALSE;
- } else {
- VPOPMAILG(vpopmail_errno)=0;
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/*
- * User management functions
- */
-
-/* {{{ proto bool vpopmail_add_user(string user, string domain, string password[, string gecos[, bool apop]])
- Adds a new user to the specified virtual domain */
-PHP_FUNCTION(vpopmail_add_user)
-{
- zval **user;
- zval **domain;
- zval **password;
- zval **gecos;
- zval **apop;
- int is_apop = 0;
- char *the_gecos = "";
- int retval;
-
- if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 5
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &user, &domain, &password, &gecos, &apop) == FAILURE)
- WRONG_PARAM_COUNT;
-
- switch (ZEND_NUM_ARGS()) {
- case 5:
- convert_to_boolean_ex(apop);
- is_apop = (Z_BVAL_PP(apop) ? 1 : 0);
- /* fall through */
-
- case 4:
- convert_to_string_ex(gecos);
- the_gecos = Z_STRVAL_PP(gecos);
- /* fall through */
-
- default:
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
- convert_to_string_ex(password);
- }
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = vadduser(Z_STRVAL_PP(user),
- Z_STRVAL_PP(domain),
- Z_STRVAL_PP(password),
- the_gecos,
- is_apop);
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_del_user(string user, string domain)
- Deletes a user from a virtual domain */
-PHP_FUNCTION(vpopmail_del_user)
-{
- zval **user;
- zval **domain;
- int retval;
-
- if (ZEND_NUM_ARGS() != 2
- || zend_get_parameters_ex(2, &user, &domain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = vdeluser(Z_STRVAL_PP(user),
- Z_STRVAL_PP(domain));
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_passwd(string user, string domain, string password)
- Changes user's password */
-PHP_FUNCTION(vpopmail_passwd)
-{
- zval **user;
- zval **domain;
- zval **password;
- zval **apop;
- int is_apop = 0;
- int retval;
-
- if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 4
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &user, &domain, &password, &apop) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_boolean_ex(apop);
- is_apop = (Z_BVAL_PP(apop) ? 1 : 0);
- }
-
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
- convert_to_string_ex(password);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = vpasswd(Z_STRVAL_PP(user),
- Z_STRVAL_PP(domain),
- Z_STRVAL_PP(password),
- is_apop);
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_set_user_quota(string user, string domain, string quota)
- Sets user's quota */
-PHP_FUNCTION(vpopmail_set_user_quota)
-{
- zval **user;
- zval **domain;
- zval **quota;
- int retval;
-
- if (ZEND_NUM_ARGS() != 3
- || zend_get_parameters_ex(3, &user, &domain, &quota) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
- convert_to_string_ex(quota);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = vsetuserquota(Z_STRVAL_PP(user),
- Z_STRVAL_PP(domain),
- Z_STRVAL_PP(quota));
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_auth_user(string user, string domain, string password[, string apop])
- Attempts to validate a username/domain/password. Returns true/false */
-PHP_FUNCTION(vpopmail_auth_user)
-{
- zval **user;
- zval **domain;
- zval **password;
- zval **apop;
- /* indeed we do not care of contents; newer vpopmail versions use struct vpasswd instead passwd */
- void *retval;
- int argc=ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 4
- || zend_get_parameters_ex(argc, &user, &domain, &password, &apop) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (argc > 3)
- convert_to_string_ex(apop);
-
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
- convert_to_string_ex(password);
-
- VPOPMAILG(vpopmail_open) = 1;
- VPOPMAILG(vpopmail_errno) = 0;
-
- retval = vauth_user(Z_STRVAL_PP(user),
- Z_STRVAL_PP(domain),
- Z_STRVAL_PP(password),
- (argc>3)?Z_STRVAL_PP(apop):"");
-
- /*
- * we do not set vpopmail_errno here - it is considered auth_user cannot fail; insted it does not auth
- * this is a vpopmail's api limitation - there is no error return form vauth_user
- */
-
- if (retval == NULL) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-
-#if HAVE_VPOPMAIL_VALIAS
-
-/*
- * Alias management functions
- */
-
-
-/* {{{ proto bool vpopmail_alias_add(string user, string domain, string alias)
- Inserts a virtual alias */
-PHP_FUNCTION(vpopmail_alias_add)
-{
- zval **user;
- zval **domain;
- zval **alias;
- int retval;
-
- if (ZEND_NUM_ARGS() != 3
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &user, &domain, &alias) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
- convert_to_string_ex(alias);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = valias_insert(Z_STRVAL_PP(user),
- Z_STRVAL_PP(domain),
- Z_STRVAL_PP(alias));
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool vpopmail_alias_del(string user, string domain)
- Deletes all virtual aliases of a given user */
-PHP_FUNCTION(vpopmail_alias_del)
-{
- zval **user;
- zval **domain;
- int retval;
-
- if (ZEND_NUM_ARGS() != 2
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &user, &domain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(user);
- convert_to_string_ex(domain);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = valias_delete(Z_STRVAL_PP(user), Z_STRVAL_PP(domain));
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#ifdef VALIAS
-/* {{{ proto bool vpopmail_alias_del_domain(string domain)
- Deletes all virtual aliases of a given domain */
-PHP_FUNCTION(vpopmail_alias_del_domain)
-{
- zval **domain;
- int retval;
-
- if (ZEND_NUM_ARGS() != 1
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &domain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(domain);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- retval = valias_delete_domain(Z_STRVAL_PP(domain));
-
- VPOPMAILG(vpopmail_errno)=retval;
-
- if (retval == VA_SUCCESS) {
- RETURN_TRUE;
- } else {
- php_error(E_WARNING, "vpopmail error: %s", verror(retval));
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto array vpopmail_alias_get(string alias, string domain)
- Returns all lines of an alias for a given domain */
-PHP_FUNCTION(vpopmail_alias_get)
-{
- zval **alias;
- zval **domain;
- int retval;
- char *talias;
-
- if (ZEND_NUM_ARGS() != 2
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &alias, &domain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(alias);
- convert_to_string_ex(domain);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- if (array_init(return_value)!=SUCCESS) {
- zend_error(E_ERROR,"unable to create array");
- RETURN_FALSE;
- }
-
- talias=valias_select(Z_STRVAL_PP(alias), Z_STRVAL_PP(domain));
- while (talias) {
- add_next_index_string(return_value,talias,1);
- talias=valias_select_next();
- }
-}
-/* }}} */
-
-/* {{{ proto array vpopmail_alias_get_all(string domain)
- Returns all lines of all aliases for a given domain */
-PHP_FUNCTION(vpopmail_alias_get_all)
-{
- zval **domain;
- int retval;
- char *talias;
- char tpath[1024];
- char ppath[1024]="";
- zval *tarr;
-
- if (ZEND_NUM_ARGS() != 1
- || zend_get_parameters_ex(ZEND_NUM_ARGS(), &domain) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(domain);
-
- VPOPMAILG(vpopmail_open) = 1;
-
- if (array_init(return_value)!=SUCCESS) {
- zend_error(E_ERROR,"unable to create array");
- RETURN_FALSE;
- }
-
- talias=valias_select_all(tpath, Z_STRVAL_PP(domain));
- while (talias) {
- if (strcmp(ppath,tpath)) {
- MAKE_STD_ZVAL(tarr);
- if (array_init(tarr)!=SUCCESS) {
- zend_error(E_ERROR,"unable to create array");
- RETURN_FALSE;
- }
- add_assoc_zval(return_value,tpath,tarr);
- strcpy(ppath,tpath);
- }
- add_next_index_string(tarr,talias,1);
- talias=valias_select_all_next(tpath);
- }
-}
-/* }}} */
-
-#endif
-
-/*
- * Error handling helper
- */
-
-/* {{{ proto string vpopmail_error(void)
- Returns text message for last vpopmail error */
-PHP_FUNCTION(vpopmail_error)
-{
- if (ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- RETURN_STRING(verror(VPOPMAILG(vpopmail_errno)),1);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/vpopmail/php_vpopmail.h b/ext/vpopmail/php_vpopmail.h
deleted file mode 100644
index 442f84c53a..0000000000
--- a/ext/vpopmail/php_vpopmail.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: David Croft <david@infotrek.co.uk> |
- | Boian Bonev <boian@bonev.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_VPOPMAIL_H
-#define PHP_VPOPMAIL_H
-
-#if HAVE_VPOPMAIL
-
-extern zend_module_entry vpopmail_module_entry;
-#define phpext_vpopmail_ptr &vpopmail_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_VPOPMAIL_API __declspec(dllexport)
-#else
-#define PHP_VPOPMAIL_API
-#endif
-
-PHP_MINIT_FUNCTION(vpopmail);
-PHP_MSHUTDOWN_FUNCTION(vpopmail);
-PHP_RINIT_FUNCTION(vpopmail);
-PHP_RSHUTDOWN_FUNCTION(vpopmail);
-PHP_MINFO_FUNCTION(vpopmail);
-
-/* domain management - lib call */
-PHP_FUNCTION(vpopmail_add_domain);
-PHP_FUNCTION(vpopmail_del_domain);
-PHP_FUNCTION(vpopmail_add_alias_domain);
-/* domain management - exec */
-PHP_FUNCTION(vpopmail_add_domain_ex);
-PHP_FUNCTION(vpopmail_del_domain_ex);
-PHP_FUNCTION(vpopmail_add_alias_domain_ex);
-/* user management */
-PHP_FUNCTION(vpopmail_add_user);
-PHP_FUNCTION(vpopmail_del_user);
-PHP_FUNCTION(vpopmail_passwd);
-PHP_FUNCTION(vpopmail_set_user_quota);
-PHP_FUNCTION(vpopmail_auth_user);
-/* alias management */
-#if HAVE_VPOPMAIL_VALIAS
-PHP_FUNCTION(vpopmail_alias_add);
-PHP_FUNCTION(vpopmail_alias_del);
-PHP_FUNCTION(vpopmail_alias_del_domain);
-PHP_FUNCTION(vpopmail_alias_get);
-PHP_FUNCTION(vpopmail_alias_get_all);
-#endif
-/* error handling */
-PHP_FUNCTION(vpopmail_error);
-
-/* defines for vpopmail command line tool names */
-#define VPOPMAIL_ADDD "/vadddomain "
-#define VPOPMAIL_DELD "/vdeldomain "
-#define VPOPMAIL_ADAD "/vaddaliasdomain "
-
-ZEND_BEGIN_MODULE_GLOBALS(vpopmail)
- int vpopmail_open;
- int vpopmail_errno;
-ZEND_END_MODULE_GLOBALS(vpopmail)
-
-#ifdef ZTS
-#define VPOPMAILG(v) TSRMG(vpopmail_globals_id, zend_vpopmail_globals *, v)
-#else
-#define VPOPMAILG(v) (vpopmail_globals.v)
-#endif
-
-#else
-
-#define phpext_vpopmail_ptr NULL
-
-#endif
-
-#endif /* PHP_VPOPMAIL_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/w32api/CREDITS b/ext/w32api/CREDITS
deleted file mode 100644
index 8d55cfc6b2..0000000000
--- a/ext/w32api/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-W32API
-James Moore
diff --git a/ext/w32api/EXPERIMENTAL b/ext/w32api/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/w32api/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/w32api/README b/ext/w32api/README
deleted file mode 100644
index 0e77cfe750..0000000000
--- a/ext/w32api/README
+++ /dev/null
@@ -1,49 +0,0 @@
-Win 32 API Extension
-====================
-/* $Revision$ */
-
-This extension is a generic extension api to dll's. This was originally written to allow access to the Win32 API from PHP. Although you can also access other functions exported via other DLL's.
-
-An example of getting the amount of time the system has been running and displaying it in a message box:
-
-========================== Example.php =====================================
-<?php
-
- dl("php_w32api.dll");
-
- w32api_register_function("kernel32.dll",
- "GetTickCount",
- W32_LONG);
-
- w32api_register_function("User32.dll",
- "MessageBoxA",
- W32_LONG);
-
- $ticks = w32api_invoke_function("GetTickCount");
-
- $secs = floor($ticks / 1000);
- $mins = floor($secs / 60);
- $hours = floor($mins / 60);
-
- $str = sprintf("You have been using your computer for:".
- "\r\n %d Milliseconds, or \r\n %d Seconds".
- "or \r\n %d mins or\r\n %d hours %d mins.",
- $ticks,
- $secs,
- $mins,
- $hours,
- $mins - ($hours*60));
-
- w32api_invoke_function("MessageBoxA",
- NULL,
- $str,
- "Uptime Information",
- MB_OK);
-?>
-============================================================================
-
-Currently supported types are generic PHP types (strings, bools, doubles, longs and null's) others will be added as and when I can figure out the best way of converting between types.
-
-Thanks to Ton Plooy for the base code for the generic calling function.
-
-- James Moore <jmoore@php.net>
diff --git a/ext/w32api/TODO b/ext/w32api/TODO
deleted file mode 100644
index 76b2562d9b..0000000000
--- a/ext/w32api/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
- TODO
- ====
- - ByVal and ByRef Passing.
- - Better type checking.
- - Fix Mem leaks.
diff --git a/ext/w32api/examples/uptime.php b/ext/w32api/examples/uptime.php
deleted file mode 100644
index 973a52d1a2..0000000000
--- a/ext/w32api/examples/uptime.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/**
- * A little example that registers MessageBoxA and GetTickCount then using
- * these two API functions tells you how long you computer has been
- * running
- */
- /**
- * Define constants needed
- * Taken from Visual Studio/Tools/Winapi/WIN32API.txt
- */
-
- define("MB_OK", 0);
-
-
- dl("php_w32api.dll");
-
- w32api_register_function("kernel32.dll",
- "GetTickCount",
- "long");
-
- w32api_register_function("User32.dll",
- "MessageBoxA",
- "long");
-
- $ticks = GetTickCount();
-
- $secs = floor($ticks / 1000);
- $mins = floor($secs / 60);
- $hours = floor($mins / 60);
-
- $str = sprintf("You have been using your computer for:".
- "\r\n %d Milliseconds, or \r\n %d Seconds".
- "or \r\n %d mins or\r\n %d hours %d mins.",
- $ticks,
- $secs,
- $mins,
- $hours,
- $mins - ($hours*60));
-
- MessageBoxA(NULL,
- $str,
- "Uptime Information",
- MB_OK);
-?>
diff --git a/ext/w32api/php_w32api.h b/ext/w32api/php_w32api.h
deleted file mode 100644
index cbe52234ea..0000000000
--- a/ext/w32api/php_w32api.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
- /* $Id$ */
-
-#if HAVE_W32API
-
-#ifndef PHP_W32API_H
-#define PHP_W32API_H
-
-extern zend_module_entry w32api_module_entry;
-#define phpext_w32api_ptr &w32api_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_W32API_API __declspec(dllexport)
-#else
-#define PHP_W32API_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(w32api)
- HashTable *regfuncs; // HashTable of Registered function handles
- HashTable *libraries; // HashTable holding pointers to the libariers
- HashTable *types; // Handles for users' types
- int le_dynaparm; // Resource handle
- DWORD call_type; // Type of call we use when calling a DLL.
-ZEND_END_MODULE_GLOBALS(w32api)
-
-#ifdef ZTS
-#define W32_G(v) TSRMG(w32api_globals_id, zend_w32api_globals *, v)
-#else
-#define W32_G(v) (w32api_globals.v)
-#endif
-
-#define W32_REG_CONST(cname) REGISTER_LONG_CONSTANT(#cname, cname, CONST_CS | CONST_PERSISTENT);
-
-#define DC_MICROSOFT 0x0000 // Default
-#define DC_BORLAND 0x0001 // Borland compat
-#define DC_CALL_CDECL 0x0010 // __cdecl
-#define DC_CALL_STD 0x0020 // __stdcall
-#define DC_RETVAL_MATH4 0x0100 // Return value in ST
-#define DC_RETVAL_MATH8 0x0200 // Return value in ST
-
-#define DC_CALL_STD_BO (DC_CALL_STD | DC_BORLAND)
-#define DC_CALL_STD_MS (DC_CALL_STD | DC_MICROSOFT)
-#define DC_CALL_STD_M8 (DC_CALL_STD | DC_RETVAL_MATH8)
-
-#define DC_FLAG_ARGPTR 0x00000002
-
-typedef struct W32APIFE {
- FARPROC fp; // Pointer to the function
- char *rettype; // return value type
- int retvaltype; // if complex = 1 if simple = 0
-} W32APIFE;
-
-typedef struct _field {
- char *fname; // Fields name
- char *type; // Type of field
- int fsize; // size of field
-} field;
-
-typedef struct runtime_struct {
- char *name; // structs name
- long size; // structs size
- void *fields; // pointer to an array of fields
-} runtime_struct;
-
-#pragma pack(1) // Set struct packing to one byte
-
-typedef union RESULT { // Various result types
- int Int; // Generic four-byte type
- long Long; // Four-byte long
- void *Pointer; // 32-bit pointer
- float Float; // Four byte real
- double Double; // 8-byte real
- __int64 int64; // big int (64-bit)
-} RESULT;
-
-
-typedef struct DYNAPARM {
- DWORD dwFlags; // Parameter flags
- int nWidth; // Byte width
- union { //
- DWORD dwArg; // 4-byte argument
- void *pArg; // Pointer to argument
- };
-} DYNAPARM;
-
-
-PHP_W32API_API RESULT php_w32api_dynamic_dll_call(
- int Flags,
- DWORD lpFunction,
- int nArgs,
- DYNAPARM Param[],
- LPVOID pRet,
- int nRetSize
- );
-
-static void php_w32api_init_globals(zend_w32api_globals *w32api_globals);
-static void php_w32api_dtor_libary(void *data);
-static void php_w32api_unload_libraries();
-
-PHP_MINFO_FUNCTION(w32api);
-PHP_MINIT_FUNCTION(w32api);
-PHP_MSHUTDOWN_FUNCTION(w32api);
-
-PHP_FUNCTION(w32api_register_function);
-PHP_FUNCTION(w32api_invoke_function);
-PHP_FUNCTION(w32api_deftype);
-PHP_FUNCTION(w32api_init_dtype);
-PHP_FUNCTION(w32api_set_call_method);
-
-static void register_constants(int module_number);
-static void w32api_free_dynaparm(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-void get_arg_pointer(zval **value, void ** argument);
-DYNAPARM w32api_convert_zval_to_dynparam(zval ** carg TSRMLS_DC);
-
-#endif /* PHP_W32API_H */
-#endif /* HAVE_W32API */ \ No newline at end of file
diff --git a/ext/w32api/test_dll/dll_test.h b/ext/w32api/test_dll/dll_test.h
deleted file mode 100644
index a0d84c86c7..0000000000
--- a/ext/w32api/test_dll/dll_test.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef _TEST_DLL_H
-#define _TEST_DLL_H
-
-#define TEST_DLL_API __declspec(dllexport)
-
-typedef struct _name {
- char *fname;
- char *lname;
-} name;
-
-TEST_DLL_API void print_names(name *n);
-
-#endif _TEST_DLL_H \ No newline at end of file
diff --git a/ext/w32api/test_dll/test.php b/ext/w32api/test_dll/test.php
deleted file mode 100644
index 9f85acaf03..0000000000
--- a/ext/w32api/test_dll/test.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
- dl("php_w32api.dll");
-
- w32api_register_function("test_dll.dll", "print_names", "long");
- w32api_deftype("name", "string", "fname", "string", "lname");
- $rsrc = w32api_init_dtype("name", "James", "Moore");
- print_names($rsrc);
-
-?>
diff --git a/ext/w32api/test_dll/test_dll.c b/ext/w32api/test_dll/test_dll.c
deleted file mode 100644
index c455cc30fd..0000000000
--- a/ext/w32api/test_dll/test_dll.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <stdio.h>
-#include "dll_test.h"
-
-/**
- * Test DLL for w32api functions. Functions below are used to test
- * Various parts of the extension.
- */
-
-/* Test for complex type passing */
-TEST_DLL_API void print_names(name *n)
-{
- printf("%s %s", n->fname, n->lname);
-} \ No newline at end of file
diff --git a/ext/w32api/test_dll/test_dll.def b/ext/w32api/test_dll/test_dll.def
deleted file mode 100644
index 7ffba76950..0000000000
--- a/ext/w32api/test_dll/test_dll.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORTS
- print_name \ No newline at end of file
diff --git a/ext/w32api/test_dll/test_dll.dsp b/ext/w32api/test_dll/test_dll.dsp
deleted file mode 100644
index 945dc7efc1..0000000000
--- a/ext/w32api/test_dll/test_dll.dsp
+++ /dev/null
@@ -1,110 +0,0 @@
-# Microsoft Developer Studio Project File - Name="test_dll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=test_dll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "test_dll.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "test_dll.mak" CFG="test_dll - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "test_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "test_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "test_dll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TEST_DLL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TEST_DLL_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-
-!ELSEIF "$(CFG)" == "test_dll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TEST_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /Gz /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TEST_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "test_dll - Win32 Release"
-# Name "test_dll - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\test_dll.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dll_test.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/w32api/test_dll/test_dll.dsw b/ext/w32api/test_dll/test_dll.dsw
deleted file mode 100644
index e22c7b49ee..0000000000
--- a/ext/w32api/test_dll/test_dll.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "test_dll"=.\test_dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/ext/w32api/w32api.c b/ext/w32api/w32api.c
deleted file mode 100644
index 89190d3175..0000000000
--- a/ext/w32api/w32api.c
+++ /dev/null
@@ -1,899 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if HAVE_W32API
-#include <stdio.h>
-#include <stdlib.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_w32api.h"
-
-/* {{{ w32api_functions[]
- */
-function_entry w32api_functions[] = {
- PHP_FE(w32api_register_function, NULL)
- PHP_FE(w32api_deftype, NULL)
- PHP_FE(w32api_init_dtype, NULL)
- PHP_FE(w32api_set_call_method, NULL)
- PHP_FE(w32api_invoke_function, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ w32api_module_entry
- */
-zend_module_entry w32api_module_entry = {
- STANDARD_MODULE_HEADER,
- "w32api",
- w32api_functions,
- PHP_MINIT(w32api),
- PHP_MSHUTDOWN(w32api),
- NULL,
- NULL,
- PHP_MINFO(w32api),
- "0.1", /* Replace with version number for your extension */
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(w32api)
-
-#ifdef COMPILE_DL_W32API
-ZEND_GET_MODULE(w32api)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(w32api)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Win32 API Support", "enabled" );
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(w32api)
-{
- ZEND_INIT_MODULE_GLOBALS(w32api, php_w32api_init_globals, NULL);
- register_constants(module_number);
-
- W32_G(le_dynaparm) = zend_register_list_destructors_ex(w32api_free_dynaparm, NULL, "dynaparm", module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(w32api)
-{
- if(W32_G(regfuncs))
- {
- FREE_HASHTABLE(W32_G(regfuncs));
- }
-
- if(W32_G(libraries))
- {
- php_w32api_unload_libraries();
- FREE_HASHTABLE(W32_G(libraries));
- }
-
- if(W32_G(libraries))
- {
- FREE_HASHTABLE(W32_G(types));
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ DYNAPARM dtor */
-static void w32api_free_dynaparm(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- DYNAPARM *dparam;
-
- dparam = (DYNAPARM *)rsrc->ptr;
-
- if(dparam->pArg)
- efree(dparam->pArg);
-
- efree(dparam);
-}
-/* }}} */
-
-/* {{{ */
-static void php_w32api_unload_libraries()
-{
- TSRMLS_FETCH();
- zend_hash_destroy(W32_G(libraries));
-}
-/* }}} */
-
-/* {{{ */
-static void php_w32api_dtor_library(void *data)
-{
- FreeLibrary((HINSTANCE)data);
-}
-/* }}} */
-
-/* {{{ */
-static void php_w32api_init_globals(zend_w32api_globals *w32api_globals)
-{
- TSRMLS_FETCH();
-
- w32api_globals->regfuncs = NULL;
- w32api_globals->libraries = NULL;
- w32api_globals->types = NULL;
- w32api_globals->call_type = DC_CALL_STD;
-
- ALLOC_HASHTABLE(W32_G(regfuncs));
- zend_hash_init(W32_G(regfuncs), 1, NULL, NULL, 1);
-
- ALLOC_HASHTABLE(W32_G(libraries));
- zend_hash_init(W32_G(libraries), 1, NULL, php_w32api_dtor_library, 1);
-
- ALLOC_HASHTABLE(W32_G(types));
- zend_hash_init(W32_G(types), 5, NULL, NULL, 1);
-
-}
-/* }}} */
-
-/* {{{ */
-static void register_constants(int module_number)
-{
- TSRMLS_FETCH();
-
- W32_REG_CONST(DC_MICROSOFT)
- W32_REG_CONST(DC_BORLAND)
- W32_REG_CONST(DC_CALL_CDECL)
- W32_REG_CONST(DC_CALL_STD)
- W32_REG_CONST(DC_RETVAL_MATH4)
- W32_REG_CONST(DC_RETVAL_MATH8)
- W32_REG_CONST(DC_CALL_STD_BO)
- W32_REG_CONST(DC_CALL_STD_MS)
- W32_REG_CONST(DC_CALL_STD_M8)
- W32_REG_CONST(DC_FLAG_ARGPTR)
-
-}
-/* }}} */
-
-/* {{{ proto void w32api_set_call_method(int method)
- Sets the calling method used */
-PHP_FUNCTION(w32api_set_call_method)
-{
- zval **method;
-
- if(zend_get_parameters_ex(1, &method) == FAILURE)
- {
- WRONG_PARAM_COUNT
- }
-
- switch((*method)->value.lval)
- {
- case DC_CALL_CDECL:
- W32_G(call_type) = DC_CALL_CDECL;
- break;
- default:
- W32_G(call_type) = DC_CALL_STD;
- break;
- }
-
- RETURN_TRUE
-
-}
-/* }}} */
-
-/* {{{ proto bool w32api_register_function(string libary, string function_name)
- Registers function function_name from library with PHP */
-PHP_FUNCTION(w32api_register_function)
-{
- HINSTANCE hinstLib;
- FARPROC ProcAdd;
- W32APIFE *fe;
- BOOL fRunTimeLinkSuccess = FALSE;
- zval **libname, **funcname, **retval_type;
- void *tmp;
- runtime_struct *rst;
-
- if(zend_get_parameters_ex(3, &libname, &funcname, &retval_type) == FAILURE)
- {
- WRONG_PARAM_COUNT
- }
-
- convert_to_string_ex(libname);
- convert_to_string_ex(funcname);
- convert_to_string_ex(retval_type);
-
- fe = (W32APIFE *)emalloc(sizeof(W32APIFE));
- fe->retvaltype = 0;
- //TODO: Check library isnt alreay loaded
-
- hinstLib = LoadLibrary((*libname)->value.str.val);
-
- if(hinstLib == NULL)
- {
- php_error(E_WARNING, "Could not load dynamic link library %s", (*libname)->value.str.val);
- RETURN_FALSE
- }
-
- zend_hash_add(W32_G(libraries),
- (*libname)->value.str.val,
- strlen((*libname)->value.str.val),
- &hinstLib,
- sizeof(HINSTANCE),
- NULL);
-
- //TODO: Check function handle isnt already loaded
-
- ProcAdd = (FARPROC) GetProcAddress(hinstLib, (*funcname)->value.str.val);
-
- if(ProcAdd == NULL)
- {
- php_error(E_WARNING, "Could not get handle for function %s", (*funcname)->value.str.val);
- RETURN_FALSE
- }
-
- fe->fp = ProcAdd;
-
- if(!strcmp((*retval_type)->value.str.val, "long"))
- {
- fe->rettype = malloc(5*sizeof(char));
- fe->rettype = strdup("long\0");
- }
- else if (!strcmp((*retval_type)->value.str.val, "int"))
- {
- fe->rettype = malloc(4*sizeof(char));
- fe->rettype = strdup("long\0");
- }
- else if (!strcmp((*retval_type)->value.str.val, "string"))
- {
- fe->rettype = malloc(7*sizeof(char));
- fe->rettype = strdup("string\0");
- }
- else if (!strcmp((*retval_type)->value.str.val, "byte"))
- {
- fe->rettype = malloc(5*sizeof(char));
- fe->rettype = strdup("byte\0");
- }
- else if (!strcmp((*retval_type)->value.str.val, "double"))
- {
- fe->rettype = malloc(7*sizeof(char));
- fe->rettype = strdup("double\0");
- }
- else if (!strcmp((*retval_type)->value.str.val, "bool"))
- {
- fe->rettype = malloc(5*sizeof(char));
- fe->rettype = strdup("bool\0");
- }
- else
- {
- /**
- * this could be a userdef'd type so lets
- * search the ht for that.
- */
- if(zend_hash_find(W32_G(types), (*retval_type)->value.str.val, (*retval_type)->value.str.len, (void **) &tmp) == FAILURE)
- {
- php_error(E_WARNING, "Unknown type %s", (*retval_type)->value.str.val);
- RETURN_FALSE;
- }
- rst = tmp;
- fe->rettype = malloc(sizeof(char) * strlen(rst->name) + 1);
- memcpy(fe->rettype, rst->name, strlen(rst->name) + 1);
- fe->retvaltype = 1;
- }
-
- if(zend_hash_add(W32_G(regfuncs), php_strtolower((*funcname)->value.str.val, (*funcname)->value.str.len), (*funcname)->value.str.len, fe, sizeof(W32APIFE), NULL) == FAILURE)
- {
- php_error(E_WARNING, "Could not register function %s into hash");
- RETURN_FALSE;
- }
-
- /**
- * We now need to add the function into the global namespace, the best way to do this is
- * to register it as a new module then it will definatly be removed on shutdown
- */
- {
- zend_module_entry *temp_module_entry;
- char *fname;
- function_entry *tmp_functions;
-
- tmp_functions = malloc(sizeof(function_entry) * 2);
- fname = malloc((*funcname)->value.str.len + 1);
- memcpy(fname, (*funcname)->value.str.val, (*funcname)->value.str.len + 1);
-
- tmp_functions[0].fname = php_strtolower(fname, (*funcname)->value.str.len);
- tmp_functions[0].handler = zif_w32api_invoke_function;
- tmp_functions[0].func_arg_types = NULL;
- tmp_functions[1].fname = NULL;
- tmp_functions[1].handler = NULL;
- tmp_functions[1].func_arg_types = NULL;
-
-
- temp_module_entry = malloc(sizeof(zend_module_entry));
- temp_module_entry->size = sizeof(zend_module_entry);
- temp_module_entry->zend_api = ZEND_MODULE_API_NO;
- temp_module_entry->zend_debug = ZEND_DEBUG;
- temp_module_entry->zts = USING_ZTS;
- temp_module_entry->name = fname;
- temp_module_entry->functions = tmp_functions;
- temp_module_entry->module_startup_func = temp_module_entry->module_shutdown_func =
- temp_module_entry->request_startup_func = temp_module_entry->request_shutdown_func = NULL;
- temp_module_entry->info_func = NULL;
- temp_module_entry->version = NULL;
- temp_module_entry->global_startup_func = temp_module_entry->global_shutdown_func = NULL;
- temp_module_entry->globals_id = 0;
- temp_module_entry->module_started = 0;
- temp_module_entry->type = 0;
- temp_module_entry->handle = NULL;
- temp_module_entry->module_number = 0;
-
- if(zend_register_module(temp_module_entry) != SUCCESS)
- {
- php_error(E_WARNING, "could not register function %s into the function table", (*funcname)->value.str.val);
- RETURN_FALSE
- }
-
-
- }
-
-
-
- RETURN_TRUE
-};
-/* }}} */
-
-/* {{{ proto mixed w32api_invoke_function(string funcname, ....)
- Invokes function funcname with the arguments passed after the function name */
-PHP_FUNCTION(w32api_invoke_function)
-{
- zval ***args = (zval ***)NULL;
- void *tmp;
- W32APIFE *fe;
- char *funcname;
- int argc = ZEND_NUM_ARGS();
- runtime_struct *rst;
- RESULT retval;
- DYNAPARM *Param, *drval;
- LPVOID pVParam;
- int VParamsz;
- int i;
-
- args = emalloc(argc * sizeof(zval **));
- Param = (DYNAPARM *)emalloc((argc) * sizeof(DYNAPARM));
-
- if(zend_get_parameters_array_ex(argc, args) == FAILURE)
- {
- WRONG_PARAM_COUNT
- }
-
- funcname = get_active_function_name(TSRMLS_C);
-
- if(zend_hash_find(W32_G(regfuncs), funcname, strlen(funcname), (void **) &tmp) == FAILURE)
- {
- php_error(E_WARNING, "Could not find function handle for function %s", funcname);
- RETURN_FALSE;
- }
-
- fe = (W32APIFE *)tmp;
-
- // Build the DYNPARAM array.
- for(i = 0; i < (argc); i++)
- {
- Param[i] = w32api_convert_zval_to_dynparam(args[(i)] TSRMLS_CC);
- }
-
-
- /**
- * We need to check the return type, if its a complex return type then we need to sort out pVParam and
- * VParamsz and pass them as the last two parameters of the call to the invoke of the function.
- */
- if(fe->retvaltype) // Complex return type
- {
- tmp = NULL;
- if(zend_hash_find(W32_G(types), fe->rettype, strlen(fe->rettype), (void **) &tmp) == FAILURE)
- {
- php_error(E_WARNING, "Unknown type %s", fe->rettype);
- RETURN_FALSE;
- }
- rst = tmp;
- VParamsz = rst->size;
- pVParam = malloc(rst->size);
- }
- else
- {
- pVParam = NULL;
- VParamsz = 0;
- }
-
- retval = php_w32api_dynamic_dll_call(W32_G(call_type), (ulong)(fe->fp), (argc), Param, pVParam, VParamsz);
-
- if(!strcmp(fe->rettype, "long"))
- {
- RETURN_LONG(retval.Long);
- }
- else if (!strcmp(fe->rettype, "int"))
- {
- RETURN_LONG(retval.Int);
- }
- else if (!strcmp(fe->rettype, "string"))
- {
- RETURN_STRING(retval.Pointer, 1);
- }
- else if (!strcmp(fe->rettype, "byte"))
- {
- php_error(E_WARNING, "byte return values are not supported right now");
- RETURN_FALSE;
- }
- else if (!strcmp(fe->rettype, "double"))
- {
- RETURN_DOUBLE(retval.Double);
- }
- else if (!strcmp(fe->rettype, "bool"))
- {
- if(retval.Int)
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
- }
- else
- {
- /**
- * This is returned in pRet, we need to get type and build a DYNAPARM for
- * the return value and return the RESOURCE.
- */
-
- drval = malloc(sizeof(DYNAPARM));
- drval->pArg = pVParam;
- drval->nWidth = VParamsz;
- drval->dwFlags = 0;
- ZEND_REGISTER_RESOURCE(return_value, drval, W32_G(le_dynaparm));
- }
-
-}
-/* }}} */
-
-/* {{{ Dynamic calling of dll functions by pushing onto the stack manually. */
-PHP_W32API_API RESULT php_w32api_dynamic_dll_call( int Flags, DWORD lpFunction,
- int nArgs, DYNAPARM Param[],
- LPVOID pRet, int nRetSize)
-{
- /**
- * Here we dont know the function we are calling or the arguments
- * it expects so we must do quite a lot of work, normally done by
- * the compiler ourselves, this is far easier to do it Assembly than
- * in C.. here goes (jmoore - 05/11/2001).
- *
- * Based on the code by Ton Plooy <tonp@xs4all.nl>
- * See Also MSFT KB Article ID: Q171729 for more background.
- *
- * We will support two calling mechanisms, __stdcall and __cdecl(WINAPIV).
- */
- RESULT Res = { 0 };
- int i, nInd, nSize;
- DWORD dwEAX, dwEDX, dwVal, *pStack, dwStSize = 0;
- BYTE *pArg;
-
- _asm {
- mov pStack, esp
- sub esp, 0x100
- }
-
- for (i = nArgs; i > 0; i--) {
- nInd = i - 1;
- nSize = (Param[nInd].nWidth + 3) / 4 * 4;
- pArg = (BYTE *)Param[nInd].pArg + nSize - 4;
- dwStSize += (DWORD)nSize;
- while (nSize > 0) {
- if (Param[nInd].dwFlags & DC_FLAG_ARGPTR) {
- dwVal = *(DWORD *)pArg;
- pArg -= 4;
- }
- else {
-
- dwVal = Param[nInd].dwArg;
- }
-
- pStack--;
- *pStack = dwVal;
- nSize -= 4;
- }
- }
-
- if((pRet != NULL) && ((Flags & DC_BORLAND) || (nRetSize > 8)))
- {
- dwStSize += 4;
- pStack--;
- *pStack = (DWORD)pRet;
- }
-
- _asm {
- add esp, 0x100
- sub esp, dwStSize
- call [lpFunction]
- mov dwEAX, eax
- mov dwEDX, edx
- }
-
- if (Flags & DC_CALL_CDECL) {
- _asm add esp, dwStSize
- }
-
- if (Flags & DC_RETVAL_MATH4) {
- _asm fstp dword ptr [Res]
- }
- else if (Flags & DC_RETVAL_MATH8) {
- _asm fstp qword ptr [Res]
- }
- else if (pRet == NULL) {
- _asm{
- mov eax, [dwEAX]
- mov DWORD PTR [Res], eax
- mov edx, [dwEDX]
- mov DWORD PTR [Res + 4], edx
- }
- }
- else if (((Flags & DC_BORLAND) == 0) && (nRetSize <= 8)) {
- // Microsoft optimized less than 8-bytes structure passing
- _asm {
- mov ecx, DWORD PTR [pRet]
- mov eax, [dwEAX]
- mov DWORD PTR [ecx], eax
- mov edx, [dwEDX]
- mov DWORD PTR [ecx + 4], edx
- }
- }
- return Res;
-}
-/* }}} */
-
-/* {{{ Conversion function for zvals to dynparams */
-DYNAPARM w32api_convert_zval_to_dynparam(zval ** carg TSRMLS_DC)
-{
- DYNAPARM dparam, *tparam;
- dparam.dwFlags = 0;
-
- switch((*carg)->type)
- {
- case IS_RESOURCE:
- tparam = (DYNAPARM *) zend_fetch_resource(carg TSRMLS_CC, -1, "dynaparm", NULL, 1, W32_G(le_dynaparm));
- if(!tparam)
- {
- php_error(E_ERROR, "Error when fetching argument");
- }
- dparam = *tparam;
- break;
- case IS_LONG:
- dparam.nWidth = sizeof(long);
- dparam.dwArg = (*carg)->value.lval;
- break;
- case IS_DOUBLE:
- dparam.nWidth = sizeof(float);
- dparam.pArg = &(*carg)->value.dval;
- dparam.dwFlags = DC_FLAG_ARGPTR;
- break;
- case IS_STRING:
- dparam.nWidth = sizeof(char *);
- dparam.pArg = (*carg)->value.str.val;
- break;
- case IS_BOOL:
- dparam.nWidth = sizeof(BOOL);
- dparam.dwArg = ((*carg)->value.lval == 0)?FALSE:TRUE;
- break;
- case IS_NULL:
- dparam.nWidth = sizeof(void *);
- dparam.pArg = NULL;
- break;
- default:
- php_error(E_ERROR, "Cant convert variable to type dynparam");
- }
-
- return dparam;
-}
-/* }}} */
-
-/**
- * Typedef functions, We need to be flexible about what types we are going
- * to pass and retrive from functions in the win32 api. this means we need
- * to be able to create structs of any different type at runtime. We can do
- * this in asm. For example:
- *
- * typedef struct james {
- * char firstname[81];
- * char lastname[81];
- * }
- *
- * An instance of the above struct (lets call this instance iJames. iJames
- * is a pointer to the first letter of firstname (the base address), firstname
- * then fills the following 81 bytes (some of these may be empty), lastname is
- * at the offset iJames+81,
- *
- * |- 81 Bytes -|- 81 Bytes -|
- * +------//------+------//------+
- * | James\0 | Moore\0 |
- * +------//------+------//------+
- * ^ ^
- * iJames iJames[81]
- *
- * We could store a value in ax in this field by
- * the assembly command:
- *
- * move ac iJames[81]
- *
- * Unions are easy in asm as the length of memory they use is equal to the size
- * of their largest member. For example:
- *
- * typedef union foo {
- * int i;
- * char j;
- * }
- *
- * The length of an int might be 4 bytes, the length of a char might be 1 byte.
- * So if we create an instance of foo called bar then it would have the following
- * layout in memory:
- *
- * +---+------------+
- * | ¦ |
- * +---+------------+
- * ^^^^^
- * Memory area for char
- * ^^^^^^^^^^^^^^^^^^
- * Memory area for int
- *
- * Therefore even if there was only a char held in this section and the union was within
- * a struct the next offset would still be base address + 4 not +1 so we need to deal
- * with this too.
- *
- * When defining types the user can call the w32api_deftype() function, this takes 2n+1 args where
- * n is the number of members the type has. The first argument is the name of the struct struct
- * after that is the type of the member followed by the members name (in pairs).
- *
- *
- * James Moore <jmoore@php.net> 6/11/2001
- *
- */
-
-/* {{{ proto int w32api_deftype(string typename, string member1_type, string member1_name, ...)
- Defines a type for use with other w32api_functions. */
-PHP_FUNCTION(w32api_deftype)
-{
- zval ***args;
- int argc = ZEND_NUM_ARGS();
- int i;
- runtime_struct *rst, *orst;
- void *tmp;
- field *fields, *ptr;
-
- args = (zval ***)emalloc(sizeof(zval **) * argc);
- rst = malloc(sizeof(runtime_struct));
-
- ptr = (field *)emalloc(sizeof(field) *((argc-1)/2));
-
- fields = ptr;
-
- if((zend_get_parameters_array_ex(argc, args) == FAILURE) || ((argc % 2) != 1))
- {
- WRONG_PARAM_COUNT
- }
-
- for(i=2; i<argc; i++)
- {
- convert_to_string_ex(args[i]);
- }
-
- convert_to_string_ex(args[0]);
-
- rst->name = (*args[0])->value.str.val;
- rst->size = 0;
-
- /**
- * We now take each parameter pair and fill out the field struct
- * for each parameter pair.
- */
- for(i=1; i<argc; i += 2)
- {
- ptr->type = malloc((*args[i])->value.str.len + 1);
- memcpy(ptr->type, (*args[i])->value.str.val, (*args[i])->value.str.len + 1);
-
- ptr->fname = malloc((*args[i+1])->value.str.len + 1);
- memcpy(ptr->fname, (*args[i+1])->value.str.val, (*args[i+1])->value.str.len + 1);
-
- ptr->fsize = 0;
-
- if(!strcmp(ptr->type, "long"))
- {
- ptr->fsize = sizeof(long);
- }
- else if (!strcmp(ptr->type, "int"))
- {
- ptr->fsize = sizeof(int);
- }
- else if (!strcmp(ptr->type, "string"))
- {
- ptr->fsize = sizeof(char *);
- }
- else if (!strcmp(ptr->type, "byte"))
- {
- ptr->fsize = 1;
- }
- else if (!strcmp(ptr->type, "double"))
- {
- ptr->fsize = sizeof(double);
- }
- else if (!strcmp(ptr->type, "bool"))
- {
- ptr->fsize = sizeof(BOOL);
- }
- else
- {
- /**
- * this could be a userdef'd type so lets
- * search the ht for that.
- */
- if(zend_hash_find(W32_G(types), ptr->type, strlen(ptr->type), (void **) &tmp) == FAILURE)
- {
- php_error(E_WARNING, "Unknown type %s", ptr->type);
- RETURN_FALSE;
- }
- orst = tmp;
- ptr->fsize = orst->size;
- }
-
- rst->size += ptr->fsize;
- ptr++;
- }
-
- rst->fields = fields;
-
- if(zend_hash_add(W32_G(types), rst->name, strlen(rst->name), rst, sizeof(runtime_struct), NULL) == FAILURE)
- {
- php_error(E_WARNING, "Error registering type %s", rst->name);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto resource w32api_init_dtype(string typename, mixed val1, mixed val2);
- Creates an instance to the data type typename and fills it with the values val1, val2, the function
- then returns a DYNAPARM which can be passed when invoking a function as a parameter.*/
-PHP_FUNCTION(w32api_init_dtype)
-{
- DYNAPARM *dparam, *tparam;
- void *rtstruct, *tmp;
- runtime_struct *rst;
- field *ptr;
- char *m;
- zval ***args;
- zval **curarg;
- int i, j,argc = ZEND_NUM_ARGS();
-
- args = emalloc(sizeof(zval **) * argc);
- dparam = emalloc(sizeof(DYNAPARM));
-
- if(zend_get_parameters_array_ex(argc, args) != SUCCESS)
- {
- WRONG_PARAM_COUNT
- }
-
- convert_to_string_ex(args[0]);
-
- if(zend_hash_find(W32_G(types), (*args[0])->value.str.val, (*args[0])->value.str.len, (void **)&tmp) == FAILURE)
- {
- php_error(E_WARNING, "Unknown type %s",(*args[0])->value.str.val);
- RETURN_FALSE
- }
-
- rst = (runtime_struct *)tmp;
-
- rtstruct = emalloc(rst->size);
- rtstruct = memset(rtstruct, 0, rst->size);
- tmp = rtstruct;
- curarg = args[1];
- ptr = rst->fields;
-
- i = 0;
- j = (argc-1);
-
- while(i<j)
- {
- if(!strcmp(ptr->type, "long"))
- {
- convert_to_long_ex(curarg);
- memcpy(tmp, &(*curarg)->value.lval, ptr->fsize);
- }
- else if (!strcmp(ptr->type, "int"))
- {
- convert_to_long_ex(curarg);
- memcpy(tmp, &(*curarg)->value.lval, ptr->fsize);
- }
- else if (!strcmp(ptr->type, "string"))
- {
- convert_to_string_ex(curarg);
- m = emalloc(sizeof(char) * (*curarg)->value.str.len + 1);
- memcpy(m, (*curarg)->value.str.val, (*curarg)->value.str.len + 1);
- memcpy(tmp, &m, ptr->fsize);
- }
- else if (!strcmp(ptr->type, "byte"))
- {
- /* use Lower order bytes */
- convert_to_long_ex(curarg);
- memcpy(tmp, &(*curarg)->value.lval, ptr->fsize);
- }
- else if (!strcmp(ptr->type, "double"))
- {
- convert_to_double_ex(curarg);
- memcpy(tmp, &(*curarg)->value.dval, ptr->fsize);
- }
- else if (!strcmp(ptr->type, "bool"))
- {
- convert_to_boolean_ex(curarg);
- memcpy(tmp, &(*curarg)->value.lval, ptr->fsize);
- }
- else
- {
- /**
- * OK we have a user type here, we need to treat the param
- * as a resource and fetch the DYNAPARM its contained in
- * then copy the contents of its LPVOID pointer into our
- * memory space.
- */
- ZEND_FETCH_RESOURCE(tparam, DYNAPARM *, curarg, -1, "dynaparm", W32_G(le_dynaparm));
- memcpy(tmp, tparam->pArg, ptr->fsize);
- }
-
- /**
- * We need somthing that is 1 byte
- */
- (char)tmp += ptr->fsize;
- (void *)tmp;
-
- curarg++;
- ptr++;
- i++;
- }
-
- dparam->dwFlags = 0;
- dparam->nWidth = rst->size;
- dparam->pArg = rtstruct;
-
- ZEND_REGISTER_RESOURCE(return_value, dparam, W32_G(le_dynaparm));
-
-}
-/* }}} */
-
-
-#endif /* HAVE_W32API */
diff --git a/ext/w32api/w32api.dsp b/ext/w32api/w32api.dsp
deleted file mode 100644
index 8910cfb929..0000000000
--- a/ext/w32api/w32api.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="w32api" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=w32api - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "w32api.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "w32api.mak" CFG="w32api - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "w32api - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "w32api - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "w32api - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_W32API" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /ZI /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D HAVE_W32API=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "W32API_EXPORTS" /D "COMPILE_DL_W32API" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_w32api.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "w32api - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_W32API" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D "_LIB" /D "__WIN32__" /D "USE_TLS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=1 /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "W32API_EXPORTS" /D "COMPILE_DL_W32API" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_W32API=1 /FAcs /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# SUBTRACT MTL /Oicf
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_w32api.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "w32api - Win32 Release_TS"
-# Name "w32api - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\w32api.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_w32api.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/wddx/CREDITS b/ext/wddx/CREDITS
deleted file mode 100644
index 4c98513048..0000000000
--- a/ext/wddx/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-WDDX
-Andrei Zmievski
diff --git a/ext/wddx/config.m4 b/ext/wddx/config.m4
deleted file mode 100644
index 856af34f52..0000000000
--- a/ext/wddx/config.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(wddx,whether to enable WDDX support,
-[ --enable-wddx Enable WDDX support.])
-
-if test "$PHP_WDDX" != "no"; then
- if test "$ext_shared" != "yes" && test "$enable_xml" = "no"; then
- AC_MSG_WARN(Activating XML)
- enable_xml=yes
- fi
- AC_DEFINE(HAVE_WDDX, 1, [ ])
- PHP_NEW_EXTENSION(wddx, wddx.c, $ext_shared)
-fi
diff --git a/ext/wddx/php_wddx.h b/ext/wddx/php_wddx.h
deleted file mode 100644
index a1de64e712..0000000000
--- a/ext/wddx/php_wddx.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_WDDX_H
-#define PHP_WDDX_H
-
-#if HAVE_WDDX
-
-#include <expat.h>
-
-extern zend_module_entry wddx_module_entry;
-#define wddx_module_ptr &wddx_module_entry
-
-PHP_FUNCTION(wddx_serialize_value);
-PHP_FUNCTION(wddx_serialize_vars);
-PHP_FUNCTION(wddx_packet_start);
-PHP_FUNCTION(wddx_packet_end);
-PHP_FUNCTION(wddx_add_vars);
-PHP_FUNCTION(wddx_deserialize);
-
-#else
-
-#define wddx_module_ptr NULL
-
-#endif /* HAVE_WDDX */
-
-#define phpext_wddx_ptr wddx_module_ptr
-
-#endif /* !PHP_WDDX_H */
diff --git a/ext/wddx/php_wddx_api.h b/ext/wddx/php_wddx_api.h
deleted file mode 100644
index ce4b3f5b90..0000000000
--- a/ext/wddx/php_wddx_api.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@ispi.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_WDDX_API_H
-#define PHP_WDDX_API_H
-
-#include "ext/standard/php_smart_str.h"
-
-#define WDDX_ARRAY_S "<array length='%d'>"
-#define WDDX_ARRAY_E "</array>"
-#define WDDX_BINARY_S "<binary>"
-#define WDDX_BINARY_E "</binary>"
-#define WDDX_BOOLEAN "<boolean value='%s'/>"
-#define WDDX_CHAR "<char code='%02X'/>"
-#define WDDX_COMMENT_S "<comment>"
-#define WDDX_COMMENT_E "</comment>"
-#define WDDX_DATA_S "<data>"
-#define WDDX_DATA_E "</data>"
-#define WDDX_HEADER "<header/>"
-#define WDDX_HEADER_S "<header>"
-#define WDDX_HEADER_E "</header>"
-#define WDDX_NULL "<null/>"
-#define WDDX_NUMBER "<number>%s</number>"
-#define WDDX_PACKET_S "<wddxPacket version='1.0'>"
-#define WDDX_PACKET_E "</wddxPacket>"
-#define WDDX_STRING_S "<string>"
-#define WDDX_STRING_E "</string>"
-#define WDDX_STRUCT_S "<struct>"
-#define WDDX_STRUCT_E "</struct>"
-#define WDDX_VAR_S "<var name='%s'>"
-#define WDDX_VAR_E "</var>"
-
-#define php_wddx_add_chunk(packet, str) smart_str_appends(packet, str)
-#define php_wddx_add_chunk_ex(packet, str, len) smart_str_appendl(packet, str, len)
-#define php_wddx_add_chunk_static(packet, str) smart_str_appendl(packet, str, sizeof(str)-1)
-
-typedef smart_str wddx_packet;
-
-wddx_packet* php_wddx_constructor(void);
-void php_wddx_destructor(wddx_packet *packet);
-
-void php_wddx_packet_start(wddx_packet *packet, char *comment, int comment_len);
-void php_wddx_packet_end(wddx_packet *packet);
-
-void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name_len);
-int php_wddx_deserialize_ex(char *, int, zval *return_value);
-#define php_wddx_gather(packet) estrndup(packet->c, packet->len)
-
-#endif /* PHP_WDDX_API_H */
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
deleted file mode 100644
index d23e65098e..0000000000
--- a/ext/wddx/wddx.c
+++ /dev/null
@@ -1,1305 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_wddx.h"
-
-#if HAVE_WDDX
-
-#include "php_wddx_api.h"
-#define PHP_XML_INTERNAL
-#include "ext/xml/php_xml.h"
-#include "ext/standard/php_incomplete_class.h"
-#include "ext/standard/base64.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/html.h"
-#include "ext/standard/php_string.h"
-
-#define WDDX_BUF_LEN 256
-#define PHP_CLASS_NAME_VAR "php_class_name"
-
-#define EL_ARRAY "array"
-#define EL_BINARY "binary"
-#define EL_BOOLEAN "boolean"
-#define EL_CHAR "char"
-#define EL_CHAR_CODE "code"
-#define EL_NULL "null"
-#define EL_NUMBER "number"
-#define EL_PACKET "wddxPacket"
-#define EL_STRING "string"
-#define EL_STRUCT "struct"
-#define EL_VALUE "value"
-#define EL_VAR "var"
-#define EL_NAME "name"
-#define EL_VERSION "version"
-#define EL_RECORDSET "recordset"
-#define EL_FIELD "field"
-
-#define php_wddx_deserialize(a,b) \
- php_wddx_deserialize_ex((a)->value.str.val, (a)->value.str.len, (b))
-
-#define SET_STACK_VARNAME \
- if (stack->varname) { \
- ent.varname = estrdup(stack->varname); \
- efree(stack->varname); \
- stack->varname = NULL; \
- } else \
- ent.varname = NULL; \
-
-static int le_wddx;
-
-typedef struct {
- zval *data;
- enum {
- ST_ARRAY,
- ST_BOOLEAN,
- ST_NULL,
- ST_NUMBER,
- ST_STRING,
- ST_BINARY,
- ST_STRUCT,
- ST_RECORDSET,
- ST_FIELD
- } type;
- char *varname;
-} st_entry;
-
-typedef struct {
- int top, max;
- char *varname;
- zend_bool done;
- void **elements;
-} wddx_stack;
-
-
-static void php_wddx_process_data(void *user_data, const char *s, int len);
-
-/* {{{ wddx_functions[]
- */
-function_entry wddx_functions[] = {
- PHP_FE(wddx_serialize_value, NULL)
- PHP_FE(wddx_serialize_vars, NULL)
- PHP_FE(wddx_packet_start, NULL)
- PHP_FE(wddx_packet_end, NULL)
- PHP_FE(wddx_add_vars, NULL)
- PHP_FE(wddx_deserialize, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-PHP_MINIT_FUNCTION(wddx);
-PHP_MINFO_FUNCTION(wddx);
-
-/* {{{ wddx_module_entry
- */
-zend_module_entry wddx_module_entry = {
- STANDARD_MODULE_HEADER,
- "wddx",
- wddx_functions,
- PHP_MINIT(wddx),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(wddx),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ wddx_stack_init
- */
-static int wddx_stack_init(wddx_stack *stack)
-{
- stack->top = 0;
- stack->elements = (void **) emalloc(sizeof(void **) * STACK_BLOCK_SIZE);
- if (!stack->elements) {
- return FAILURE;
- } else {
- stack->max = STACK_BLOCK_SIZE;
- stack->varname = NULL;
- stack->done = 0;
- return SUCCESS;
- }
-}
-/* }}} */
-
-/* {{{ wddx_stack_push
- */
-static int wddx_stack_push(wddx_stack *stack, void *element, int size)
-{
- if (stack->top >= stack->max) { /* we need to allocate more memory */
- stack->elements = (void **) erealloc(stack->elements,
- (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE)));
- if (!stack->elements) {
- return FAILURE;
- }
- }
- stack->elements[stack->top] = (void *) emalloc(size);
- memcpy(stack->elements[stack->top], element, size);
- return stack->top++;
-}
-/* }}} */
-
-/* {{{ wddx_stack_top
- */
-static int wddx_stack_top(wddx_stack *stack, void **element)
-{
- if (stack->top > 0) {
- *element = stack->elements[stack->top - 1];
- return SUCCESS;
- } else {
- *element = NULL;
- return FAILURE;
- }
-}
-/* }}} */
-
-/* {{{ wddx_stack_is_empty
- */
-static int wddx_stack_is_empty(wddx_stack *stack)
-{
- if (stack->top == 0) {
- return 1;
- } else {
- return 0;
- }
-}
-/* }}} */
-
-/* {{{ wddx_stack_destroy
- */
-static int wddx_stack_destroy(wddx_stack *stack)
-{
- register int i;
-
- if (stack->elements) {
- for (i = 0; i < stack->top; i++) {
- if (((st_entry *)stack->elements[i])->data)
- {
- zval_ptr_dtor(&((st_entry *)stack->elements[i])->data);
- }
- if (((st_entry *)stack->elements[i])->varname)
- efree(((st_entry *)stack->elements[i])->varname);
- efree(stack->elements[i]);
- }
- efree(stack->elements);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ release_wddx_packet_rsrc
- */
-static void release_wddx_packet_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- smart_str *str = (smart_str *)rsrc->ptr;
- smart_str_free(str);
- efree(str);
-}
-/* }}} */
-
-#include "ext/session/php_session.h"
-
-#if HAVE_PHP_SESSION
-/* {{{ PS_SERIALIZER_ENCODE_FUNC
- */
-PS_SERIALIZER_ENCODE_FUNC(wddx)
-{
- wddx_packet *packet;
- PS_ENCODE_VARS;
-
- packet = php_wddx_constructor();
- if (!packet)
- return FAILURE;
-
- php_wddx_packet_start(packet, NULL, 0);
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-
- PS_ENCODE_LOOP(
- php_wddx_serialize_var(packet, *struc, key, key_length);
- );
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- php_wddx_packet_end(packet);
- *newstr = php_wddx_gather(packet);
- php_wddx_destructor(packet);
-
- if (newlen)
- *newlen = strlen(*newstr);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PS_SERIALIZER_DECODE_FUNC
- */
-PS_SERIALIZER_DECODE_FUNC(wddx)
-{
- zval *retval;
- zval **ent;
- char *key;
- uint key_length;
- char tmp[128];
- ulong idx;
- int hash_type;
- int ret;
-
- if (vallen == 0)
- return SUCCESS;
-
- MAKE_STD_ZVAL(retval);
-
- if ((ret = php_wddx_deserialize_ex((char *)val, vallen, retval)) == SUCCESS) {
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(retval));
- zend_hash_get_current_data(Z_ARRVAL_P(retval), (void **) &ent) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(retval))) {
- hash_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(retval), &key, &key_length, &idx, 0, NULL);
-
- switch (hash_type) {
- case HASH_KEY_IS_LONG:
- sprintf(tmp, "%ld", idx);
- key = tmp;
- /* fallthru */
- case HASH_KEY_IS_STRING:
- php_set_session_var(key, key_length-1, *ent, NULL TSRMLS_CC);
- PS_ADD_VAR(key);
- }
- }
- }
-
- zval_ptr_dtor(&retval);
-
- return ret;
-}
-/* }}} */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(wddx)
-{
- le_wddx = zend_register_list_destructors_ex(release_wddx_packet_rsrc, NULL, "wddx", module_number);
-
-#if HAVE_PHP_SESSION
- php_session_register_serializer("wddx",
- PS_SERIALIZER_ENCODE_NAME(wddx),
- PS_SERIALIZER_DECODE_NAME(wddx));
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(wddx)
-{
- php_info_print_table_start();
-#if HAVE_PHP_SESSION
- php_info_print_table_header(2, "WDDX Support", "enabled" );
- php_info_print_table_row(2, "WDDX Session Serializer", "enabled" );
-#else
- php_info_print_table_row(2, "WDDX Support", "enabled" );
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_wddx_packet_start
- */
-void php_wddx_packet_start(wddx_packet *packet, char *comment, int comment_len)
-{
- php_wddx_add_chunk_static(packet, WDDX_PACKET_S);
- if (comment) {
- php_wddx_add_chunk_static(packet, WDDX_HEADER_S);
- php_wddx_add_chunk_static(packet, WDDX_COMMENT_S);
- php_wddx_add_chunk_ex(packet, comment, comment_len);
- php_wddx_add_chunk_static(packet, WDDX_COMMENT_E);
- php_wddx_add_chunk_static(packet, WDDX_HEADER_E);
- } else
- php_wddx_add_chunk_static(packet, WDDX_HEADER);
- php_wddx_add_chunk_static(packet, WDDX_DATA_S);
-}
-/* }}} */
-
-/* {{{ php_wddx_packet_end
- */
-void php_wddx_packet_end(wddx_packet *packet)
-{
- php_wddx_add_chunk_static(packet, WDDX_DATA_E);
- php_wddx_add_chunk_static(packet, WDDX_PACKET_E);
-}
-/* }}} */
-
-#define FLUSH_BUF() \
- if (l > 0) { \
- php_wddx_add_chunk_ex(packet, buf, l); \
- l = 0; \
- }
-
-/* {{{ php_wddx_serialize_string
- */
-static void php_wddx_serialize_string(wddx_packet *packet, zval *var)
-{
- char *buf,
- *p,
- *vend,
- control_buf[WDDX_BUF_LEN];
- int l;
-
- php_wddx_add_chunk_static(packet, WDDX_STRING_S);
-
- if (Z_STRLEN_P(var) > 0) {
- l = 0;
- vend = Z_STRVAL_P(var) + Z_STRLEN_P(var);
- buf = (char *)emalloc(Z_STRLEN_P(var) + 1);
-
- for(p = Z_STRVAL_P(var); p != vend; p++) {
- switch (*p) {
- case '<':
- FLUSH_BUF();
- php_wddx_add_chunk_static(packet, "&lt;");
- break;
-
- case '&':
- FLUSH_BUF();
- php_wddx_add_chunk_static(packet, "&amp;");
- break;
-
- case '>':
- FLUSH_BUF();
- php_wddx_add_chunk_static(packet, "&gt;");
- break;
-
- default:
- if (iscntrl((int)*p)) {
- FLUSH_BUF();
- sprintf(control_buf, WDDX_CHAR, *p);
- php_wddx_add_chunk(packet, control_buf);
- } else
- buf[l++] = *p;
- break;
- }
- }
-
- FLUSH_BUF();
- efree(buf);
- }
-
- php_wddx_add_chunk_static(packet, WDDX_STRING_E);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_number
- */
-static void php_wddx_serialize_number(wddx_packet *packet, zval *var)
-{
- char tmp_buf[WDDX_BUF_LEN];
- zval tmp;
-
- tmp = *var;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- sprintf(tmp_buf, WDDX_NUMBER, Z_STRVAL(tmp));
- zval_dtor(&tmp);
-
- php_wddx_add_chunk(packet, tmp_buf);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_boolean
- */
-static void php_wddx_serialize_boolean(wddx_packet *packet, zval *var)
-{
- char tmp_buf[WDDX_BUF_LEN];
-
- sprintf(tmp_buf, WDDX_BOOLEAN, Z_LVAL_P(var) ? "true" : "false");
- php_wddx_add_chunk(packet, tmp_buf);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_unset
- */
-static void php_wddx_serialize_unset(wddx_packet *packet)
-{
- php_wddx_add_chunk_static(packet, WDDX_NULL);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_object
- */
-static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
-{
-/* OBJECTS_FIXME */
- zval **ent, *fname, **varname;
- zval *retval = NULL;
- char *key;
- ulong idx;
- char tmp_buf[WDDX_BUF_LEN];
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(fname);
- ZVAL_STRING(fname, "__sleep", 1);
-
- /*
- * We try to call __sleep() method on object. It's supposed to return an
- * array of property names to be serialized.
- */
- if (call_user_function_ex(CG(function_table), &obj, fname, &retval, 0, 0, 1, NULL TSRMLS_CC) == SUCCESS) {
- if (retval && HASH_OF(retval)) {
- PHP_CLASS_ATTRIBUTES;
-
- PHP_SET_CLASS_ATTRIBUTES(obj);
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
- sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
- php_wddx_add_chunk(packet, tmp_buf);
- php_wddx_add_chunk_static(packet, WDDX_STRING_S);
- php_wddx_add_chunk_ex(packet, class_name, name_len);
- php_wddx_add_chunk_static(packet, WDDX_STRING_E);
- php_wddx_add_chunk_static(packet, WDDX_VAR_E);
-
- PHP_CLEANUP_CLASS_ATTRIBUTES();
-
- for (zend_hash_internal_pointer_reset(HASH_OF(retval));
- zend_hash_get_current_data(HASH_OF(retval), (void **)&varname) == SUCCESS;
- zend_hash_move_forward(HASH_OF(retval))) {
- if (Z_TYPE_PP(varname) != IS_STRING) {
- php_error(E_NOTICE, "__sleep should return an array only containing the names of instance-variables to serialize.");
- continue;
- }
-
- if (zend_hash_find(HASH_OF(obj), Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, (void **)&ent) == SUCCESS) {
- php_wddx_serialize_var(packet, *ent, Z_STRVAL_PP(varname), Z_STRLEN_PP(varname));
- }
- }
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- }
- } else {
- uint key_len;
-
- PHP_CLASS_ATTRIBUTES;
-
- PHP_SET_CLASS_ATTRIBUTES(obj);
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
- sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
- php_wddx_add_chunk(packet, tmp_buf);
- php_wddx_add_chunk_static(packet, WDDX_STRING_S);
- php_wddx_add_chunk_ex(packet, class_name, name_len);
- php_wddx_add_chunk_static(packet, WDDX_STRING_E);
- php_wddx_add_chunk_static(packet, WDDX_VAR_E);
-
- PHP_CLEANUP_CLASS_ATTRIBUTES();
-
- for (zend_hash_internal_pointer_reset(HASH_OF(obj));
- zend_hash_get_current_data(HASH_OF(obj), (void**)&ent) == SUCCESS;
- zend_hash_move_forward(HASH_OF(obj))) {
- if (*ent == obj)
- continue;
-
- if (zend_hash_get_current_key_ex(HASH_OF(obj), &key, &key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
- php_wddx_serialize_var(packet, *ent, key, key_len);
- } else {
- key_len = sprintf(tmp_buf, "%ld", idx);
- php_wddx_serialize_var(packet, *ent, tmp_buf, key_len);
- }
- }
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- }
-
- zval_dtor(fname);
- FREE_ZVAL(fname);
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_array
- */
-static void php_wddx_serialize_array(wddx_packet *packet, zval *arr)
-{
- zval **ent;
- char *key;
- uint key_len;
- int is_struct = 0, ent_type;
- ulong idx;
- HashTable *target_hash;
- char tmp_buf[WDDX_BUF_LEN];
- ulong ind = 0;
- int type;
- TSRMLS_FETCH();
-
- target_hash = HASH_OF(arr);
-
- for (zend_hash_internal_pointer_reset(target_hash);
- zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS;
- zend_hash_move_forward(target_hash)) {
-
- type = zend_hash_get_current_key(target_hash, &key, &idx, 0);
-
- if (type == HASH_KEY_IS_STRING) {
- is_struct = 1;
- break;
- }
-
- if (idx != ind) {
- is_struct = 1;
- break;
- }
-
- ind++;
- }
-
- if (is_struct) {
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
- } else {
- sprintf(tmp_buf, WDDX_ARRAY_S, zend_hash_num_elements(target_hash));
- php_wddx_add_chunk(packet, tmp_buf);
- }
-
- for (zend_hash_internal_pointer_reset(target_hash);
- zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS;
- zend_hash_move_forward(target_hash)) {
- if (*ent == arr)
- continue;
-
- if (is_struct) {
- ent_type = zend_hash_get_current_key_ex(target_hash, &key, &key_len, &idx, 0, NULL);
-
- if (ent_type == HASH_KEY_IS_STRING) {
- php_wddx_serialize_var(packet, *ent, key, key_len);
- } else {
- key_len = sprintf(tmp_buf, "%ld", idx);
- php_wddx_serialize_var(packet, *ent, tmp_buf, key_len);
- }
- } else
- php_wddx_serialize_var(packet, *ent, NULL, 0);
- }
-
- if (is_struct) {
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- } else {
- php_wddx_add_chunk_static(packet, WDDX_ARRAY_E);
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_var
- */
-void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name_len)
-{
- char tmp_buf[WDDX_BUF_LEN];
- char *name_esc;
- int name_esc_len;
-
- if (name) {
- name_esc = php_escape_html_entities(name, name_len, &name_esc_len, 0, ENT_QUOTES, NULL);
- sprintf(tmp_buf, WDDX_VAR_S, name_esc);
- php_wddx_add_chunk(packet, tmp_buf);
- efree(name_esc);
- }
-
- switch(Z_TYPE_P(var)) {
- case IS_STRING:
- php_wddx_serialize_string(packet, var);
- break;
-
- case IS_LONG:
- case IS_DOUBLE:
- php_wddx_serialize_number(packet, var);
- break;
-
- case IS_BOOL:
- php_wddx_serialize_boolean(packet, var);
- break;
-
- case IS_NULL:
- php_wddx_serialize_unset(packet);
- break;
-
- case IS_ARRAY:
- php_wddx_serialize_array(packet, var);
- break;
-
- case IS_OBJECT:
- php_wddx_serialize_object(packet, var);
- break;
- }
-
- if (name) {
- php_wddx_add_chunk_static(packet, WDDX_VAR_E);
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_add_var
- */
-static void php_wddx_add_var(wddx_packet *packet, zval *name_var)
-{
- zval **val;
- HashTable *target_hash;
- TSRMLS_FETCH();
-
- if (Z_TYPE_P(name_var) == IS_STRING)
- {
- if (zend_hash_find(EG(active_symbol_table), Z_STRVAL_P(name_var),
- Z_STRLEN_P(name_var)+1, (void**)&val) != FAILURE) {
- php_wddx_serialize_var(packet, *val, Z_STRVAL_P(name_var), Z_STRLEN_P(name_var));
- }
- }
- else if (Z_TYPE_P(name_var) == IS_ARRAY || Z_TYPE_P(name_var) == IS_OBJECT)
- {
- target_hash = HASH_OF(name_var);
-
- zend_hash_internal_pointer_reset(target_hash);
-
- while(zend_hash_get_current_data(target_hash, (void**)&val) == SUCCESS) {
- php_wddx_add_var(packet, *val);
-
- zend_hash_move_forward(target_hash);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_push_element
- */
-static void php_wddx_push_element(void *user_data, const char *name, const char **atts)
-{
- st_entry ent;
- wddx_stack *stack = (wddx_stack *)user_data;
-
- if (!strcmp(name, EL_PACKET)) {
- int i;
-
- for (i=0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_VERSION)) {
- /* nothing for now */
- }
- }
- } else if (!strcmp(name, EL_STRING)) {
- ent.type = ST_STRING;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_STRING;
- Z_STRVAL_P(ent.data) = empty_string;
- Z_STRLEN_P(ent.data) = 0;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_BINARY)) {
- ent.type = ST_BINARY;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_STRING;
- Z_STRVAL_P(ent.data) = empty_string;
- Z_STRLEN_P(ent.data) = 0;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_CHAR)) {
- int i;
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_CHAR_CODE) && atts[++i] && atts[i][0]) {
- char tmp_buf[2];
-
- sprintf(tmp_buf, "%c", (char)strtol(atts[i], NULL, 16));
- php_wddx_process_data(user_data, tmp_buf, strlen(tmp_buf));
- break;
- }
- }
- } else if (!strcmp(name, EL_NUMBER)) {
- ent.type = ST_NUMBER;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_LONG;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_BOOLEAN)) {
- int i;
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_VALUE) && atts[++i] && atts[i][0]) {
- ent.type = ST_BOOLEAN;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_BOOL;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- php_wddx_process_data(user_data, atts[i], strlen(atts[i]));
- break;
- }
- }
- } else if (!strcmp(name, EL_NULL)) {
- ent.type = ST_NULL;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- ZVAL_NULL(ent.data);
-
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_ARRAY)) {
- ent.type = ST_ARRAY;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- array_init(ent.data);
- INIT_PZVAL(ent.data);
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_STRUCT)) {
- ent.type = ST_STRUCT;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- array_init(ent.data);
- INIT_PZVAL(ent.data);
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_VAR)) {
- int i;
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
- char *decoded;
- int decoded_len;
- decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
- stack->varname = decoded;
- break;
- }
- }
- } else if (!strcmp(name, EL_RECORDSET)) {
- int i;
-
- ent.type = ST_RECORDSET;
- SET_STACK_VARNAME;
- MAKE_STD_ZVAL(ent.data);
- array_init(ent.data);
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], "fieldNames") && atts[++i] && atts[i][0]) {
- zval *tmp;
- char *key;
- char *p1, *p2, *endp;
- char *decoded;
- int decoded_len;
-
- decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
- endp = (char *)decoded + decoded_len;
- p1 = (char *)decoded;
- while ((p2 = php_memnstr(p1, ",", sizeof(",")-1, endp)) != NULL) {
- key = estrndup(p1, p2 - p1);
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- add_assoc_zval_ex(ent.data, key, p2 - p1 + 1, tmp);
- p1 = p2 + sizeof(",")-1;
- efree(key);
- }
-
- if (p1 <= endp) {
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- add_assoc_zval_ex(ent.data, p1, endp - p1 + 1, tmp);
- }
-
- efree(decoded);
- break;
- }
- }
-
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_FIELD)) {
- int i;
- st_entry ent;
-
- ent.type = ST_FIELD;
- ent.varname = NULL;
- ent.data = NULL;
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
- char *decoded;
- int decoded_len;
- st_entry *recordset;
- zval **field;
-
- decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
- if (wddx_stack_top(stack, (void**)&recordset) == SUCCESS &&
- recordset->type == ST_RECORDSET &&
- zend_hash_find(Z_ARRVAL_P(recordset->data), decoded, decoded_len+1, (void**)&field) == SUCCESS) {
- ent.data = *field;
- }
-
- efree(decoded);
- break;
- }
- }
-
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_pop_element
- */
-static void php_wddx_pop_element(void *user_data, const char *name)
-{
- st_entry *ent1, *ent2;
- wddx_stack *stack = (wddx_stack *)user_data;
- HashTable *target_hash;
- zend_class_entry *ce;
- zval *obj;
- zval *tmp;
- TSRMLS_FETCH();
-
-/* OBJECTS_FIXME */
- if (stack->top == 0)
- return;
-
- if (!strcmp(name, EL_STRING) || !strcmp(name, EL_NUMBER) ||
- !strcmp(name, EL_BOOLEAN) || !strcmp(name, EL_NULL) ||
- !strcmp(name, EL_ARRAY) || !strcmp(name, EL_STRUCT) ||
- !strcmp(name, EL_RECORDSET) || !strcmp(name, EL_BINARY)) {
- wddx_stack_top(stack, (void**)&ent1);
-
- if (!strcmp(name, EL_BINARY)) {
- int new_len=0;
- unsigned char *new_str;
-
- new_str = php_base64_decode(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data), &new_len);
- STR_FREE(Z_STRVAL_P(ent1->data));
- Z_STRVAL_P(ent1->data) = new_str;
- Z_STRLEN_P(ent1->data) = new_len;
- }
-
- /* Call __wakeup() method on the object. */
- if (Z_TYPE_P(ent1->data) == IS_OBJECT) {
- zval *fname, *retval = NULL;
-
- MAKE_STD_ZVAL(fname);
- ZVAL_STRING(fname, "__wakeup", 1);
-
- call_user_function_ex(NULL, &ent1->data, fname, &retval, 0, 0, 0, NULL TSRMLS_CC);
-
- zval_dtor(fname);
- FREE_ZVAL(fname);
- if (retval)
- zval_ptr_dtor(&retval);
- }
-
- if (stack->top > 1) {
- stack->top--;
- wddx_stack_top(stack, (void**)&ent2);
-
- /* if non-existent field */
- if (ent2->type == ST_FIELD && ent2->data == NULL) {
- zval_ptr_dtor(&ent1->data);
- efree(ent1);
- return;
- }
-
- if (Z_TYPE_P(ent2->data) == IS_ARRAY || Z_TYPE_P(ent2->data) == IS_OBJECT) {
- target_hash = HASH_OF(ent2->data);
-
- if (ent1->varname) {
- if (!strcmp(ent1->varname, PHP_CLASS_NAME_VAR) &&
- Z_TYPE_P(ent1->data) == IS_STRING && Z_STRLEN_P(ent1->data)) {
- zend_bool incomplete_class = 0;
-
- zend_str_tolower(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data));
- if (zend_hash_find(EG(class_table), Z_STRVAL_P(ent1->data),
- Z_STRLEN_P(ent1->data)+1, (void **) &ce)==FAILURE) {
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- }
-
- /* Initialize target object */
- MAKE_STD_ZVAL(obj);
- INIT_PZVAL(obj);
- object_init_ex(obj, ce);
-
- /* Merge current hashtable with object's default properties */
- zend_hash_merge(Z_OBJPROP_P(obj),
- Z_ARRVAL_P(ent2->data),
- (void (*)(void *)) zval_add_ref,
- (void *) &tmp, sizeof(zval *), 0);
-
- if (incomplete_class) {
- php_store_class_name(obj, Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data));
- }
-
- /* Clean up old array entry */
- zval_ptr_dtor(&ent2->data);
-
- /* Set stack entry to point to the newly created object */
- ent2->data = obj;
-
- /* Clean up class name var entry */
- zval_ptr_dtor(&ent1->data);
- } else
- zend_hash_update(target_hash,
- ent1->varname, strlen(ent1->varname)+1,
- &ent1->data, sizeof(zval *), NULL);
- efree(ent1->varname);
- } else {
- zend_hash_next_index_insert(target_hash,
- &ent1->data,
- sizeof(zval *), NULL);
- }
- }
- efree(ent1);
- } else
- stack->done = 1;
- } else if (!strcmp(name, EL_VAR) && stack->varname) {
- efree(stack->varname);
- } else if (!strcmp(name, EL_FIELD)) {
- st_entry *ent;
- wddx_stack_top(stack, (void **)&ent);
- efree(ent);
- stack->top--;
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_process_data
- */
-static void php_wddx_process_data(void *user_data, const char *s, int len)
-{
- st_entry *ent;
- wddx_stack *stack = (wddx_stack *)user_data;
- char *decoded;
- int decoded_len;
- TSRMLS_FETCH();
-
- if (!wddx_stack_is_empty(stack) && !stack->done) {
- wddx_stack_top(stack, (void**)&ent);
- switch (Z_TYPE_P(ent)) {
- case ST_STRING:
- decoded = xml_utf8_decode(s, len, &decoded_len, "ISO-8859-1");
-
- if (Z_STRLEN_P(ent->data) == 0) {
- Z_STRVAL_P(ent->data) = estrndup(decoded, decoded_len);
- Z_STRLEN_P(ent->data) = decoded_len;
- } else {
- Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data),
- Z_STRLEN_P(ent->data) + decoded_len + 1);
- strncpy(Z_STRVAL_P(ent->data)+Z_STRLEN_P(ent->data), decoded, decoded_len);
- Z_STRLEN_P(ent->data) += decoded_len;
- Z_STRVAL_P(ent->data)[Z_STRLEN_P(ent->data)] = '\0';
- }
-
- efree(decoded);
- break;
-
- case ST_BINARY:
- if (Z_STRLEN_P(ent->data) == 0) {
- Z_STRVAL_P(ent->data) = estrndup(s, len + 1);
- } else {
- Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data), Z_STRLEN_P(ent->data) + len + 1);
- memcpy(Z_STRVAL_P(ent->data) + Z_STRLEN_P(ent->data), s, len);
- }
- Z_STRLEN_P(ent->data) += len;
- Z_STRVAL_P(ent->data)[Z_STRLEN_P(ent->data)] = '\0';
- break;
-
- case ST_NUMBER:
- Z_TYPE_P(ent->data) = IS_STRING;
- Z_STRLEN_P(ent->data) = len;
- Z_STRVAL_P(ent->data) = estrndup(s, len);
- convert_scalar_to_number(ent->data TSRMLS_CC);
- break;
-
- case ST_BOOLEAN:
- if (!strcmp(s, "true"))
- Z_LVAL_P(ent->data) = 1;
- else if (!strcmp(s, "false"))
- Z_LVAL_P(ent->data) = 0;
- else {
- stack->top--;
- zval_ptr_dtor(&ent->data);
- if (ent->varname)
- efree(ent->varname);
- efree(ent);
- }
- break;
-
- default:
- break;
- }
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_deserialize_ex
- */
-int php_wddx_deserialize_ex(char *value, int vallen, zval *return_value)
-{
- wddx_stack stack;
- XML_Parser parser;
- st_entry *ent;
- int retval;
-
- wddx_stack_init(&stack);
- parser = XML_ParserCreate("ISO-8859-1");
-
- XML_SetUserData(parser, &stack);
- XML_SetElementHandler(parser, php_wddx_push_element, php_wddx_pop_element);
- XML_SetCharacterDataHandler(parser, php_wddx_process_data);
-
- XML_Parse(parser, value, vallen, 1);
-
- XML_ParserFree(parser);
-
- if (stack.top == 1) {
- wddx_stack_top(&stack, (void**)&ent);
- *return_value = *(ent->data);
- zval_copy_ctor(return_value);
- retval = SUCCESS;
- } else
- retval = FAILURE;
-
- wddx_stack_destroy(&stack);
-
- return retval;
-}
-/* }}} */
-
-/* {{{ proto string wddx_serialize_value(mixed var [, string comment])
- Creates a new packet and serializes the given value */
-PHP_FUNCTION(wddx_serialize_value)
-{
- zval *var;
- char *comment = NULL;
- int comment_len = 0;
- wddx_packet *packet;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s",
- &var, &comment, &comment_len) == FAILURE)
- return;
-
- packet = php_wddx_constructor();
- if (!packet) {
- RETURN_FALSE;
- }
-
- php_wddx_packet_start(packet, comment, comment_len);
- php_wddx_serialize_var(packet, var, NULL, 0);
- php_wddx_packet_end(packet);
-
- ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
- smart_str_free(packet);
- efree(packet);
-}
-/* }}} */
-
-/* {{{ proto string wddx_serialize_vars(mixed var_name [, mixed ...])
- Creates a new packet and serializes given variables into a struct */
-PHP_FUNCTION(wddx_serialize_vars)
-{
- int argc, i;
- wddx_packet *packet;
- zval ***args;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1) {
- php_error(E_WARNING, "%s() requires at least 1 argument, 0 given",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- packet = php_wddx_constructor();
- if (!packet) {
- RETURN_FALSE;
- }
-
- php_wddx_packet_start(packet, NULL, 0);
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-
- for (i=0; i<argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT)
- convert_to_string_ex(args[i]);
- php_wddx_add_var(packet, *args[i]);
- }
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- php_wddx_packet_end(packet);
-
- efree(args);
-
- ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
- smart_str_free(packet);
- efree(packet);
-}
-/* }}} */
-
-/* {{{ php_wddx_constructor
- */
-wddx_packet *php_wddx_constructor(void)
-{
- smart_str *packet;
-
- packet = (smart_str *)emalloc(sizeof(smart_str));
- packet->c = NULL;
-
- return packet;
-}
-/* }}} */
-
-/* {{{ php_wddx_destructor
- */
-void php_wddx_destructor(wddx_packet *packet)
-{
- smart_str_free(packet);
- efree(packet);
-}
-/* }}} */
-
-/* {{{ proto int wddx_packet_start([string comment])
- Starts a WDDX packet with optional comment and returns the packet id */
-PHP_FUNCTION(wddx_packet_start)
-{
- char *comment = NULL;
- int comment_len = 0;
- wddx_packet *packet;
-
- comment = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &comment, &comment_len) == FAILURE)
- return;
-
- packet = php_wddx_constructor();
- if (!packet) {
- RETURN_FALSE;
- }
-
- php_wddx_packet_start(packet, comment, comment_len);
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-
- ZEND_REGISTER_RESOURCE(return_value, packet, le_wddx);
-}
-/* }}} */
-
-/* {{{ proto string wddx_packet_end(int packet_id)
- Ends specified WDDX packet and returns the string containing the packet */
-PHP_FUNCTION(wddx_packet_end)
-{
- zval *packet_id;
- wddx_packet *packet = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &packet_id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(packet, wddx_packet *, &packet_id, -1, "WDDX packet ID", le_wddx);
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
-
- php_wddx_packet_end(packet);
-
- ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
-
- zend_list_delete(Z_LVAL_P(packet_id));
-}
-/* }}} */
-
-/* {{{ proto int wddx_add_vars(int packet_id, mixed var_names [, mixed ...])
- Serializes given variables and adds them to packet given by packet_id */
-PHP_FUNCTION(wddx_add_vars)
-{
- int argc, i;
- zval ***args;
- zval **packet_id;
- wddx_packet *packet = NULL;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- php_error(E_WARNING, "%s() requires at least 2 arguments, %d given",
- get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
- return;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)emalloc(argc * sizeof(zval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- packet_id = args[0];
-
- packet = (wddx_packet *)zend_fetch_resource(packet_id TSRMLS_CC, -1, "WDDX packet ID", NULL, 1, le_wddx);
- if (!packet)
- {
- efree(args);
- RETURN_FALSE;
- }
-
- for (i=1; i<argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT)
- convert_to_string_ex(args[i]);
- php_wddx_add_var(packet, (*args[i]));
- }
-
- efree(args);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed wddx_deserialize(string packet)
- Deserializes given packet and returns a PHP value */
-PHP_FUNCTION(wddx_deserialize)
-{
- char *packet;
- int packet_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &packet, &packet_len) == FAILURE)
- return;
-
- if (packet_len == 0)
- return;
-
- php_wddx_deserialize_ex(packet, packet_len, return_value);
-}
-/* }}} */
-
-#endif /* HAVE_LIBEXPAT */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/xml/CREDITS b/ext/xml/CREDITS
deleted file mode 100644
index 9f781a8c9c..0000000000
--- a/ext/xml/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-XML
-Stig Bakken, Thies C. Arntzen
diff --git a/ext/xml/config.m4 b/ext/xml/config.m4
deleted file mode 100644
index 244bff7579..0000000000
--- a/ext/xml/config.m4
+++ /dev/null
@@ -1,48 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl Fallback for --with-xml[=DIR]
-dnl PHP_ARG_WITH(xml,[],enable_xml=$withval)
-
-AC_C_BIGENDIAN
-
-if test "$ac_cv_c_bigendian" = "yes"; then
- order=21
-else
- order=12
-fi
-
-PHP_ARG_WITH(expat-dir, external libexpat install dir,
-[ --with-expat-dir=DIR XML: external libexpat install dir])
-
-PHP_ARG_ENABLE(xml,whether to enable XML support,
-[ --disable-xml Disable XML support using bundled expat lib], yes)
-
-if test "$PHP_XML" = "yes"; then
- AC_DEFINE(HAVE_LIBEXPAT, 1, [ ])
-if test "$PHP_EXPAT_DIR" = "no"; then
-
- AC_DEFINE(HAVE_LIBEXPAT_BUNDLED, 1, [ ])
- PHP_NEW_EXTENSION(xml, xml.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c, $ext_shared,,-DXML_BYTE_ORDER=$order)
- PHP_ADD_INCLUDE($ext_srcdir/expat)
- PHP_ADD_BUILD_DIR($ext_builddir/expat)
-else
-
- PHP_NEW_EXTENSION(xml, xml.c, $ext_shared)
-
- for i in $PHP_XML $PHP_EXPAT_DIR; do
- if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME ; then
- EXPAT_DIR=$i
- fi
- done
-
- if test -z "$EXPAT_DIR"; then
- AC_MSG_ERROR(not found. Please reinstall the expat distribution.)
- fi
-
- PHP_ADD_INCLUDE($EXPAT_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(expat, $EXPAT_DIR/lib, EXPAT_SHARED_LIBADD)
- PHP_SUBST(EXPAT_SHARED_LIBADD)
-fi
-fi
diff --git a/ext/xml/expat/Changes b/ext/xml/expat/Changes
deleted file mode 100644
index aeb874694a..0000000000
--- a/ext/xml/expat/Changes
+++ /dev/null
@@ -1,46 +0,0 @@
-Release 1.95.2 Fri Jul 27 2001
- - Nore changes to make MSVC happy with the build; add a single
- workspace to support both the library and xmlwf applicatiion.
- - Added a Windows installer for Windows users; includes
- xmlwf.exe.
- - Added compile-time constants that can be used to determine the
- Expat version
- - Removed a lot of GNU-specific dependencies to aide portability
- among the various Unix flavors.
- - Fix the UTF-8 BOM bug.
- - Cleaned up warning messages for several compilers.
- - Added the -Wall, -Wstrict-prototypes options for GCC.
-Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000
- - Changes to get expat to build under Microsoft compiler
- - Removed all aborts and instead return an UNEXPECTED_STATE error.
- - Fixed a bug where a stray '%' in an entity value would cause an
- abort.
- - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for
- finding this oversight.
- - Changed default patterns in lib/Makefile.in to fit non-GNU makes
- Thanks to robin@unrated.net for reporting and providing an
- account to test on.
- - The reference had the wrong label for XML_SetStartNamespaceDecl.
- Reported by an anonymous user.
-Release 1.95.0 Fri Sep 29 2000
- - XML_ParserCreate_MM
- Allows you to set a memory management suite to replace the
- standard malloc,realloc, and free.
- - XML_SetReturnNSTriplet
- If you turn this feature on when namespace processing is in
- effect, then qualified, prefixed element and attribute names
- are returned as "uri|name|prefix" where '|' is whatever
- separator character is used in namespace processing.
- - Merged in features from perl-expat
- o XML_SetElementDeclHandler
- o XML_SetAttlistDeclHandler
- o XML_SetXmlDeclHandler
- o XML_SetEntityDeclHandler
- o StartDoctypeDeclHandler takes 3 additional parameters:
- sysid, pubid, has_internal_subset
- o Many paired handler setters (like XML_SetElementHandler)
- now have corresponding individual handler setters
- o XML_GetInputContext for getting the input context of
- the current parse position.
- - Added reference material
- - Packaged into a distribution that builds a sharable library
diff --git a/ext/xml/expat/README b/ext/xml/expat/README
deleted file mode 100644
index 15bcdccb50..0000000000
--- a/ext/xml/expat/README
+++ /dev/null
@@ -1,72 +0,0 @@
-
- Expat, Release 1.95.2
-
-This is expat, a C library for parsing XML, written by James Clark.
-Expat is a stream-oriented XML parser. This means that you register
-handlers with the parser before starting the parse. These handlers
-are called when the parser discovers the associated structures in the
-document being parsed. A start tag is an example of the kind of
-structures for which you may register handlers.
-
-Windows users should use the expat_win32bin package, which includes
-both precompiled libraries and executalbes, and source code for
-developers.
-
-Expat is free software. You may copy, distribute, and modify it under
-the terms of the License contained in the file COPYING distributed
-with this package. This license is the same as the MIT/X Consortium
-license.
-
-Versions of expat that have an odd minor version (the middle number in
-the release above), are development releases and should be considered
-as beta software. Releases with even minor version numbers are
-intended to be production grade software.
-
-To build expat, you first run the configuration shell script in the
-top level distribution directory:
-
- ./configure
-
-There are many options which you may provide to configure (which you
-can discover by running configure with the --help option). But the
-one of most interest is the one that sets the installation directory.
-By default, the configure script will set things up to install
-libexpat into /usr/local/lib, expat.h into /usr/local/include, and
-xmlwf into /usr/local/bin. If, for example, you'd prefer to install
-into /home/me/mystuff/lib, /home/me/mystuff/include, and
-/home/me/mystuff/bin, you can tell configure about that with:
-
- ./configure --prefix=/home/me/mystuff
-
-After running the configure script, the "make" command will build
-things and "make install" will install things into their proper
-location. Note that you need to have write permission into the
-directories into which things will be installed.
-
-When building for use with C++, you may need to add additional
-compiler flags to support proper interaction with exceptions. This
-can be done by setting the CFLAGS environment variable. For example,
-when using GCC, you can use:
-
- CFLAGS=-fexceptions ./configure
-
-Note for Solaris users: The "ar" command is usually located in
-"/usr/ccs/bin", which is not in the default PATH. You will need to
-add this to your path for the "make" command, and probably also switch
-to GNU make (the "make" found in /usr/ccs/bin does not seem to work
-properly -- appearantly it does not understand .PHONY directives). If
-you're using ksh or bash, use this command to build:
-
- PATH=/usr/ccs/bin:$PATH make
-
-A reference manual is available in the file doc/reference.html in this
-distribution.
-
-The homepage for this project is http://expat.sourceforge.net/. There
-are links there to connect you to the bug reports page. If you need
-to report a bug when you don't have access to a browser, you may also
-send a bug report by email to expat-bugs@lists.sourceforge.net.
-
-Discussion related to the direction of future expat development takes
-place on expat-discuss@lists.sourceforge.net. Archives of this list
-may be found at http://www.geocrawler.com/redir-sf.php3?list=expat-discuss.
diff --git a/ext/xml/expat/README.php b/ext/xml/expat/README.php
deleted file mode 100644
index 187ef60be8..0000000000
--- a/ext/xml/expat/README.php
+++ /dev/null
@@ -1,11 +0,0 @@
-this is the PHP-bundled version of expat 1.95.1
-
-changes from the original version:
-- include <php_config.h> instead of <config.h>
-- include "php_compat.h" for namespace protection
-- hardcode version in xmlparse.c
-- stripped off all unneded files
-
-
-thies@thieso.net, 11th May, 2001
-
diff --git a/ext/xml/expat/ascii.h b/ext/xml/expat/ascii.h
deleted file mode 100644
index 6376b1f311..0000000000
--- a/ext/xml/expat/ascii.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#define ASCII_A 0x41
-#define ASCII_B 0x42
-#define ASCII_C 0x43
-#define ASCII_D 0x44
-#define ASCII_E 0x45
-#define ASCII_F 0x46
-#define ASCII_G 0x47
-#define ASCII_H 0x48
-#define ASCII_I 0x49
-#define ASCII_J 0x4A
-#define ASCII_K 0x4B
-#define ASCII_L 0x4C
-#define ASCII_M 0x4D
-#define ASCII_N 0x4E
-#define ASCII_O 0x4F
-#define ASCII_P 0x50
-#define ASCII_Q 0x51
-#define ASCII_R 0x52
-#define ASCII_S 0x53
-#define ASCII_T 0x54
-#define ASCII_U 0x55
-#define ASCII_V 0x56
-#define ASCII_W 0x57
-#define ASCII_X 0x58
-#define ASCII_Y 0x59
-#define ASCII_Z 0x5A
-
-#define ASCII_a 0x61
-#define ASCII_b 0x62
-#define ASCII_c 0x63
-#define ASCII_d 0x64
-#define ASCII_e 0x65
-#define ASCII_f 0x66
-#define ASCII_g 0x67
-#define ASCII_h 0x68
-#define ASCII_i 0x69
-#define ASCII_j 0x6A
-#define ASCII_k 0x6B
-#define ASCII_l 0x6C
-#define ASCII_m 0x6D
-#define ASCII_n 0x6E
-#define ASCII_o 0x6F
-#define ASCII_p 0x70
-#define ASCII_q 0x71
-#define ASCII_r 0x72
-#define ASCII_s 0x73
-#define ASCII_t 0x74
-#define ASCII_u 0x75
-#define ASCII_v 0x76
-#define ASCII_w 0x77
-#define ASCII_x 0x78
-#define ASCII_y 0x79
-#define ASCII_z 0x7A
-
-#define ASCII_0 0x30
-#define ASCII_1 0x31
-#define ASCII_2 0x32
-#define ASCII_3 0x33
-#define ASCII_4 0x34
-#define ASCII_5 0x35
-#define ASCII_6 0x36
-#define ASCII_7 0x37
-#define ASCII_8 0x38
-#define ASCII_9 0x39
-
-#define ASCII_TAB 0x09
-#define ASCII_SPACE 0x20
-#define ASCII_EXCL 0x21
-#define ASCII_QUOT 0x22
-#define ASCII_AMP 0x26
-#define ASCII_APOS 0x27
-#define ASCII_MINUS 0x2D
-#define ASCII_PERIOD 0x2E
-#define ASCII_COLON 0x3A
-#define ASCII_SEMI 0x3B
-#define ASCII_LT 0x3C
-#define ASCII_EQUALS 0x3D
-#define ASCII_GT 0x3E
-#define ASCII_LSQB 0x5B
-#define ASCII_RSQB 0x5D
-#define ASCII_UNDERSCORE 0x5F
diff --git a/ext/xml/expat/asciitab.h b/ext/xml/expat/asciitab.h
deleted file mode 100644
index eb445cc52c..0000000000
--- a/ext/xml/expat/asciitab.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML,
-/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML,
-/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM,
-/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS,
-/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS,
-/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL,
-/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI,
-/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST,
-/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB,
-/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT,
-/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER,
diff --git a/ext/xml/expat/expat.h b/ext/xml/expat/expat.h
deleted file mode 100644
index 7114c0c220..0000000000
--- a/ext/xml/expat/expat.h
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
-Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#ifndef XmlParse_INCLUDED
-#define XmlParse_INCLUDED 1
-
-#include <stdlib.h>
-#include "php_compat.h"
-
-#ifndef XMLPARSEAPI
-# if defined(__declspec) && !defined(__BEOS__)
-# define XMLPARSEAPI(type) __declspec(dllimport) type __cdecl
-# else
-# define XMLPARSEAPI(type) type
-# endif
-#endif /* not defined XMLPARSEAPI */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void *XML_Parser;
-
-/* Information is UTF-8 encoded. */
-typedef char XML_Char;
-typedef char XML_LChar;
-
-enum XML_Content_Type {
- XML_CTYPE_EMPTY = 1,
- XML_CTYPE_ANY,
- XML_CTYPE_MIXED,
- XML_CTYPE_NAME,
- XML_CTYPE_CHOICE,
- XML_CTYPE_SEQ
-};
-
-enum XML_Content_Quant {
- XML_CQUANT_NONE,
- XML_CQUANT_OPT,
- XML_CQUANT_REP,
- XML_CQUANT_PLUS
-};
-
-/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be
- XML_CQUANT_NONE, and the other fields will be zero or NULL.
- If type == XML_CTYPE_MIXED, then quant will be NONE or REP and
- numchildren will contain number of elements that may be mixed in
- and children point to an array of XML_Content cells that will be
- all of XML_CTYPE_NAME type with no quantification.
-
- If type == XML_CTYPE_NAME, then the name points to the name, and
- the numchildren field will be zero and children will be NULL. The
- quant fields indicates any quantifiers placed on the name.
-
- CHOICE and SEQ will have name NULL, the number of children in
- numchildren and children will point, recursively, to an array
- of XML_Content cells.
-
- The EMPTY, ANY, and MIXED types will only occur at top level.
-*/
-
-typedef struct XML_cp XML_Content;
-
-struct XML_cp {
- enum XML_Content_Type type;
- enum XML_Content_Quant quant;
- XML_Char * name;
- unsigned int numchildren;
- XML_Content * children;
-};
-
-
-/* This is called for an element declaration. See above for
- description of the model argument. It's the caller's responsibility
- to free model when finished with it.
-*/
-
-typedef void (*XML_ElementDeclHandler) (void *userData,
- const XML_Char *name,
- XML_Content *model);
-
-XMLPARSEAPI(void)
-XML_SetElementDeclHandler(XML_Parser parser,
- XML_ElementDeclHandler eldecl);
-
-/*
- The Attlist declaration handler is called for *each* attribute. So
- a single Attlist declaration with multiple attributes declared will
- generate multiple calls to this handler. The "default" parameter
- may be NULL in the case of the "#IMPLIED" or "#REQUIRED" keyword.
- The "isrequired" parameter will be true and the default value will
- be NULL in the case of "#REQUIRED". If "isrequired" is true and
- default is non-NULL, then this is a "#FIXED" default.
- */
-
-typedef void (*XML_AttlistDeclHandler) (void *userData,
- const XML_Char *elname,
- const XML_Char *attname,
- const XML_Char *att_type,
- const XML_Char *dflt,
- int isrequired);
-
-XMLPARSEAPI(void)
-XML_SetAttlistDeclHandler(XML_Parser parser,
- XML_AttlistDeclHandler attdecl);
-
-
- /* The XML declaration handler is called for *both* XML declarations and
- text declarations. The way to distinguish is that the version parameter
- will be null for text declarations. The encoding parameter may be null
- for XML declarations. The standalone parameter will be -1, 0, or 1
- indicating respectively that there was no standalone parameter in
- the declaration, that it was given as no, or that it was given as yes.
- */
-
-typedef void (*XML_XmlDeclHandler) (void *userData,
- const XML_Char *version,
- const XML_Char *encoding,
- int standalone);
-
-XMLPARSEAPI(void)
-XML_SetXmlDeclHandler(XML_Parser parser,
- XML_XmlDeclHandler xmldecl);
-
-
-typedef struct {
- void *(*malloc_fcn)(size_t size);
- void *(*realloc_fcn)(void *ptr, size_t size);
- void (*free_fcn)(void *ptr);
-} XML_Memory_Handling_Suite;
-
-/* Constructs a new parser; encoding is the encoding specified by the
-external protocol or null if there is none specified. */
-
-XMLPARSEAPI(XML_Parser)
-XML_ParserCreate(const XML_Char *encoding);
-
-/* Constructs a new parser and namespace processor. Element type
-names and attribute names that belong to a namespace will be expanded;
-unprefixed attribute names are never expanded; unprefixed element type
-names are expanded only if there is a default namespace. The expanded
-name is the concatenation of the namespace URI, the namespace
-separator character, and the local part of the name. If the namespace
-separator is '\0' then the namespace URI and the local part will be
-concatenated without any separator. When a namespace is not declared,
-the name and prefix will be passed through without expansion. */
-
-XMLPARSEAPI(XML_Parser)
-XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator);
-
-
-/* Constructs a new parser using the memory management suit referred to
- by memsuite. If memsuite is NULL, then use the standard library memory
- suite. If namespaceSeparator is non-NULL it creates a parser with
- namespace processing as described above. The character pointed at
- will serve as the namespace separator.
-
- All further memory operations used for the created parser will come from
- the given suite.
-*/
-
-XMLPARSEAPI(XML_Parser)
-XML_ParserCreate_MM(const XML_Char *encoding,
- const XML_Memory_Handling_Suite *memsuite,
- const XML_Char *namespaceSeparator);
-
-/* atts is array of name/value pairs, terminated by 0;
- names and values are 0 terminated. */
-
-typedef void (*XML_StartElementHandler)(void *userData,
- const XML_Char *name,
- const XML_Char **atts);
-
-typedef void (*XML_EndElementHandler)(void *userData,
- const XML_Char *name);
-
-
-/* s is not 0 terminated. */
-typedef void (*XML_CharacterDataHandler)(void *userData,
- const XML_Char *s,
- int len);
-
-/* target and data are 0 terminated */
-typedef void (*XML_ProcessingInstructionHandler)(void *userData,
- const XML_Char *target,
- const XML_Char *data);
-
-/* data is 0 terminated */
-typedef void (*XML_CommentHandler)(void *userData, const XML_Char *data);
-
-typedef void (*XML_StartCdataSectionHandler)(void *userData);
-typedef void (*XML_EndCdataSectionHandler)(void *userData);
-
-/* This is called for any characters in the XML document for
-which there is no applicable handler. This includes both
-characters that are part of markup which is of a kind that is
-not reported (comments, markup declarations), or characters
-that are part of a construct which could be reported but
-for which no handler has been supplied. The characters are passed
-exactly as they were in the XML document except that
-they will be encoded in UTF-8. Line boundaries are not normalized.
-Note that a byte order mark character is not passed to the default handler.
-There are no guarantees about how characters are divided between calls
-to the default handler: for example, a comment might be split between
-multiple calls. */
-
-typedef void (*XML_DefaultHandler)(void *userData,
- const XML_Char *s,
- int len);
-
-/* This is called for the start of the DOCTYPE declaration, before
- any DTD or internal subset is parsed. */
-
-typedef void (*XML_StartDoctypeDeclHandler)(void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid,
- int has_internal_subset);
-
-/* This is called for the start of the DOCTYPE declaration when the
-closing > is encountered, but after processing any external subset. */
-typedef void (*XML_EndDoctypeDeclHandler)(void *userData);
-
-/* This is called for entity declarations. The is_parameter_entity
- argument will be non-zero if the entity is a parameter entity, zero
- otherwise.
-
- For internal entities (<!ENTITY foo "bar">), value will
- be non-null and systemId, publicID, and notationName will be null.
- The value string is NOT null terminated; the length is provided in
- the value_length argument. Since it is legal to have zero-length
- values, do not use this argument to test for internal entities.
-
- For external entities, value will be null and systemId will be non-null.
- The publicId argument will be null unless a public identifier was
- provided. The notationName argument will have a non-null value only
- for unparsed entity declarations.
-*/
-
-typedef void (*XML_EntityDeclHandler) (void *userData,
- const XML_Char *entityName,
- int is_parameter_entity,
- const XML_Char *value,
- int value_length,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName);
-
-XMLPARSEAPI(void)
-XML_SetEntityDeclHandler(XML_Parser parser,
- XML_EntityDeclHandler handler);
-
-/* OBSOLETE -- OBSOLETE -- OBSOLETE
- This handler has been superceded by the EntityDeclHandler above.
- It is provided here for backward compatibility.
-This is called for a declaration of an unparsed (NDATA)
-entity. The base argument is whatever was set by XML_SetBase.
-The entityName, systemId and notationName arguments will never be null.
-The other arguments may be. */
-
-typedef void (*XML_UnparsedEntityDeclHandler)(void *userData,
- const XML_Char *entityName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName);
-
-/* This is called for a declaration of notation.
-The base argument is whatever was set by XML_SetBase.
-The notationName will never be null. The other arguments can be. */
-
-typedef void (*XML_NotationDeclHandler)(void *userData,
- const XML_Char *notationName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId);
-
-/* When namespace processing is enabled, these are called once for
-each namespace declaration. The call to the start and end element
-handlers occur between the calls to the start and end namespace
-declaration handlers. For an xmlns attribute, prefix will be null.
-For an xmlns="" attribute, uri will be null. */
-
-typedef void (*XML_StartNamespaceDeclHandler)(void *userData,
- const XML_Char *prefix,
- const XML_Char *uri);
-
-typedef void (*XML_EndNamespaceDeclHandler)(void *userData,
- const XML_Char *prefix);
-
-/* This is called if the document is not standalone (it has an
-external subset or a reference to a parameter entity, but does not
-have standalone="yes"). If this handler returns 0, then processing
-will not continue, and the parser will return a
-XML_ERROR_NOT_STANDALONE error. */
-
-typedef int (*XML_NotStandaloneHandler)(void *userData);
-
-/* This is called for a reference to an external parsed general entity.
-The referenced entity is not automatically parsed.
-The application can parse it immediately or later using
-XML_ExternalEntityParserCreate.
-The parser argument is the parser parsing the entity containing the reference;
-it can be passed as the parser argument to XML_ExternalEntityParserCreate.
-The systemId argument is the system identifier as specified in the entity
-declaration; it will not be null.
-The base argument is the system identifier that should be used as the base for
-resolving systemId if systemId was relative; this is set by XML_SetBase;
-it may be null.
-The publicId argument is the public identifier as specified in the entity
-declaration, or null if none was specified; the whitespace in the public
-identifier will have been normalized as required by the XML spec.
-The context argument specifies the parsing context in the format
-expected by the context argument to
-XML_ExternalEntityParserCreate; context is valid only until the handler
-returns, so if the referenced entity is to be parsed later, it must be copied.
-The handler should return 0 if processing should not continue because of
-a fatal error in the handling of the external entity.
-In this case the calling parser will return an
-XML_ERROR_EXTERNAL_ENTITY_HANDLING error.
-Note that unlike other handlers the first argument is the parser, not
-userData. */
-
-typedef int (*XML_ExternalEntityRefHandler)(XML_Parser parser,
- const XML_Char *context,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId);
-
-/* This structure is filled in by the XML_UnknownEncodingHandler
-to provide information to the parser about encodings that are unknown
-to the parser.
-The map[b] member gives information about byte sequences
-whose first byte is b.
-If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar
-value c.
-If map[b] is -1, then the byte sequence is malformed.
-If map[b] is -n, where n >= 2, then b is the first byte of an n-byte
-sequence that encodes a single Unicode scalar value.
-The data member will be passed as the first argument to the convert function.
-The convert function is used to convert multibyte sequences;
-s will point to a n-byte sequence where map[(unsigned char)*s] == -n.
-The convert function must return the Unicode scalar value
-represented by this byte sequence or -1 if the byte sequence is malformed.
-The convert function may be null if the encoding is a single-byte encoding,
-that is if map[b] >= -1 for all bytes b.
-When the parser is finished with the encoding, then if release is not null,
-it will call release passing it the data member;
-once release has been called, the convert function will not be called again.
-
-Expat places certain restrictions on the encodings that are supported
-using this mechanism.
-
-1. Every ASCII character that can appear in a well-formed XML document,
-other than the characters
-
- $@\^`{}~
-
-must be represented by a single byte, and that byte must be the
-same byte that represents that character in ASCII.
-
-2. No character may require more than 4 bytes to encode.
-
-3. All characters encoded must have Unicode scalar values <= 0xFFFF, (i.e.,
-characters that would be encoded by surrogates in UTF-16 are not
-allowed). Note that this restriction doesn't apply to the built-in
-support for UTF-8 and UTF-16.
-
-4. No Unicode character may be encoded by more than one distinct sequence
-of bytes. */
-
-typedef struct {
- int map[256];
- void *data;
- int (*convert)(void *data, const char *s);
- void (*release)(void *data);
-} XML_Encoding;
-
-/* This is called for an encoding that is unknown to the parser.
-The encodingHandlerData argument is that which was passed as the
-second argument to XML_SetUnknownEncodingHandler.
-The name argument gives the name of the encoding as specified in
-the encoding declaration.
-If the callback can provide information about the encoding,
-it must fill in the XML_Encoding structure, and return 1.
-Otherwise it must return 0.
-If info does not describe a suitable encoding,
-then the parser will return an XML_UNKNOWN_ENCODING error. */
-
-typedef int (*XML_UnknownEncodingHandler)(void *encodingHandlerData,
- const XML_Char *name,
- XML_Encoding *info);
-
-XMLPARSEAPI(void)
-XML_SetElementHandler(XML_Parser parser,
- XML_StartElementHandler start,
- XML_EndElementHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartElementHandler(XML_Parser, XML_StartElementHandler);
-
-XMLPARSEAPI(void)
-XML_SetEndElementHandler(XML_Parser, XML_EndElementHandler);
-
-XMLPARSEAPI(void)
-XML_SetCharacterDataHandler(XML_Parser parser,
- XML_CharacterDataHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetProcessingInstructionHandler(XML_Parser parser,
- XML_ProcessingInstructionHandler handler);
-XMLPARSEAPI(void)
-XML_SetCommentHandler(XML_Parser parser,
- XML_CommentHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start,
- XML_EndCdataSectionHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start);
-
-XMLPARSEAPI(void)
-XML_SetEndCdataSectionHandler(XML_Parser parser,
- XML_EndCdataSectionHandler end);
-
-/* This sets the default handler and also inhibits expansion of
-internal entities. The entity reference will be passed to the default
-handler. */
-
-XMLPARSEAPI(void)
-XML_SetDefaultHandler(XML_Parser parser,
- XML_DefaultHandler handler);
-
-/* This sets the default handler but does not inhibit expansion of
-internal entities. The entity reference will not be passed to the
-default handler. */
-
-XMLPARSEAPI(void)
-XML_SetDefaultHandlerExpand(XML_Parser parser,
- XML_DefaultHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start,
- XML_EndDoctypeDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start);
-
-XMLPARSEAPI(void)
-XML_SetEndDoctypeDeclHandler(XML_Parser parser,
- XML_EndDoctypeDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
- XML_UnparsedEntityDeclHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetNotationDeclHandler(XML_Parser parser,
- XML_NotationDeclHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start,
- XML_EndNamespaceDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start);
-
-XMLPARSEAPI(void)
-XML_SetEndNamespaceDeclHandler(XML_Parser parser,
- XML_EndNamespaceDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetNotStandaloneHandler(XML_Parser parser,
- XML_NotStandaloneHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetExternalEntityRefHandler(XML_Parser parser,
- XML_ExternalEntityRefHandler handler);
-
-/* If a non-null value for arg is specified here, then it will be passed
-as the first argument to the external entity ref handler instead
-of the parser object. */
-XMLPARSEAPI(void)
-XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg);
-
-XMLPARSEAPI(void)
-XML_SetUnknownEncodingHandler(XML_Parser parser,
- XML_UnknownEncodingHandler handler,
- void *encodingHandlerData);
-
-/* This can be called within a handler for a start element, end element,
-processing instruction or character data. It causes the corresponding
-markup to be passed to the default handler. */
-XMLPARSEAPI(void)
-XML_DefaultCurrent(XML_Parser parser);
-
-/* If do_nst is non-zero, and namespace processing is in effect, and
- a name has a prefix (i.e. an explicit namespace qualifier) then
- that name is returned as a triplet in a single
- string separated by the separator character specified when the parser
- was created: URI + sep + local_name + sep + prefix.
-
- If do_nst is zero, then namespace information is returned in the
- default manner (URI + sep + local_name) whether or not the names
- has a prefix.
-*/
-
-XMLPARSEAPI(void)
-XML_SetReturnNSTriplet(XML_Parser parser, int do_nst);
-
-/* This value is passed as the userData argument to callbacks. */
-XMLPARSEAPI(void)
-XML_SetUserData(XML_Parser parser, void *userData);
-
-/* Returns the last value set by XML_SetUserData or null. */
-#define XML_GetUserData(parser) (*(void **)(parser))
-
-/* This is equivalent to supplying an encoding argument
-to XML_ParserCreate. It must not be called after XML_Parse
-or XML_ParseBuffer. */
-
-XMLPARSEAPI(int)
-XML_SetEncoding(XML_Parser parser, const XML_Char *encoding);
-
-/* If this function is called, then the parser will be passed
-as the first argument to callbacks instead of userData.
-The userData will still be accessible using XML_GetUserData. */
-
-XMLPARSEAPI(void)
-XML_UseParserAsHandlerArg(XML_Parser parser);
-
-/* Sets the base to be used for resolving relative URIs in system
-identifiers in declarations. Resolving relative identifiers is left
-to the application: this value will be passed through as the base
-argument to the XML_ExternalEntityRefHandler, XML_NotationDeclHandler
-and XML_UnparsedEntityDeclHandler. The base argument will be copied.
-Returns zero if out of memory, non-zero otherwise. */
-
-XMLPARSEAPI(int)
-XML_SetBase(XML_Parser parser, const XML_Char *base);
-
-XMLPARSEAPI(const XML_Char *)
-XML_GetBase(XML_Parser parser);
-
-/* Returns the number of the attribute/value pairs passed in last call
-to the XML_StartElementHandler that were specified in the start-tag
-rather than defaulted. Each attribute/value pair counts as 2; thus
-this correspondds to an index into the atts array passed to the
-XML_StartElementHandler. */
-
-XMLPARSEAPI(int)
-XML_GetSpecifiedAttributeCount(XML_Parser parser);
-
-/* Returns the index of the ID attribute passed in the last call to
-XML_StartElementHandler, or -1 if there is no ID attribute. Each
-attribute/value pair counts as 2; thus this correspondds to an index
-into the atts array passed to the XML_StartElementHandler. */
-
-XMLPARSEAPI(int)
-XML_GetIdAttributeIndex(XML_Parser parser);
-
-/* Parses some input. Returns 0 if a fatal error is detected.
-The last call to XML_Parse must have isFinal true;
-len may be zero for this call (or any other). */
-XMLPARSEAPI(int)
-XML_Parse(XML_Parser parser, const char *s, int len, int isFinal);
-
-XMLPARSEAPI(void *)
-XML_GetBuffer(XML_Parser parser, int len);
-
-XMLPARSEAPI(int)
-XML_ParseBuffer(XML_Parser parser, int len, int isFinal);
-
-/* Creates an XML_Parser object that can parse an external general
-entity; context is a '\0'-terminated string specifying the parse
-context; encoding is a '\0'-terminated string giving the name of the
-externally specified encoding, or null if there is no externally
-specified encoding. The context string consists of a sequence of
-tokens separated by formfeeds (\f); a token consisting of a name
-specifies that the general entity of the name is open; a token of the
-form prefix=uri specifies the namespace for a particular prefix; a
-token of the form =uri specifies the default namespace. This can be
-called at any point after the first call to an
-ExternalEntityRefHandler so longer as the parser has not yet been
-freed. The new parser is completely independent and may safely be
-used in a separate thread. The handlers and userData are initialized
-from the parser argument. Returns 0 if out of memory. Otherwise
-returns a new XML_Parser object. */
-XMLPARSEAPI(XML_Parser)
-XML_ExternalEntityParserCreate(XML_Parser parser,
- const XML_Char *context,
- const XML_Char *encoding);
-
-enum XML_ParamEntityParsing {
- XML_PARAM_ENTITY_PARSING_NEVER,
- XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE,
- XML_PARAM_ENTITY_PARSING_ALWAYS
-};
-
-/* Controls parsing of parameter entities (including the external DTD
-subset). If parsing of parameter entities is enabled, then references
-to external parameter entities (including the external DTD subset)
-will be passed to the handler set with
-XML_SetExternalEntityRefHandler. The context passed will be 0.
-Unlike external general entities, external parameter entities can only
-be parsed synchronously. If the external parameter entity is to be
-parsed, it must be parsed during the call to the external entity ref
-handler: the complete sequence of XML_ExternalEntityParserCreate,
-XML_Parse/XML_ParseBuffer and XML_ParserFree calls must be made during
-this call. After XML_ExternalEntityParserCreate has been called to
-create the parser for the external parameter entity (context must be 0
-for this call), it is illegal to make any calls on the old parser
-until XML_ParserFree has been called on the newly created parser. If
-the library has been compiled without support for parameter entity
-parsing (ie without XML_DTD being defined), then
-XML_SetParamEntityParsing will return 0 if parsing of parameter
-entities is requested; otherwise it will return non-zero. */
-
-XMLPARSEAPI(int)
-XML_SetParamEntityParsing(XML_Parser parser,
- enum XML_ParamEntityParsing parsing);
-
-enum XML_Error {
- XML_ERROR_NONE,
- XML_ERROR_NO_MEMORY,
- XML_ERROR_SYNTAX,
- XML_ERROR_NO_ELEMENTS,
- XML_ERROR_INVALID_TOKEN,
- XML_ERROR_UNCLOSED_TOKEN,
- XML_ERROR_PARTIAL_CHAR,
- XML_ERROR_TAG_MISMATCH,
- XML_ERROR_DUPLICATE_ATTRIBUTE,
- XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
- XML_ERROR_PARAM_ENTITY_REF,
- XML_ERROR_UNDEFINED_ENTITY,
- XML_ERROR_RECURSIVE_ENTITY_REF,
- XML_ERROR_ASYNC_ENTITY,
- XML_ERROR_BAD_CHAR_REF,
- XML_ERROR_BINARY_ENTITY_REF,
- XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
- XML_ERROR_MISPLACED_XML_PI,
- XML_ERROR_UNKNOWN_ENCODING,
- XML_ERROR_INCORRECT_ENCODING,
- XML_ERROR_UNCLOSED_CDATA_SECTION,
- XML_ERROR_EXTERNAL_ENTITY_HANDLING,
- XML_ERROR_NOT_STANDALONE,
- XML_ERROR_UNEXPECTED_STATE
-};
-
-/* If XML_Parse or XML_ParseBuffer have returned 0, then XML_GetErrorCode
-returns information about the error. */
-
-XMLPARSEAPI(enum XML_Error)
-XML_GetErrorCode(XML_Parser parser);
-
-/* These functions return information about the current parse location.
-They may be called when XML_Parse or XML_ParseBuffer return 0;
-in this case the location is the location of the character at which
-the error was detected.
-They may also be called from any other callback called to report
-some parse event; in this the location is the location of the first
-of the sequence of characters that generated the event. */
-
-XMLPARSEAPI(int) XML_GetCurrentLineNumber(XML_Parser parser);
-XMLPARSEAPI(int) XML_GetCurrentColumnNumber(XML_Parser parser);
-XMLPARSEAPI(long) XML_GetCurrentByteIndex(XML_Parser parser);
-
-/* Return the number of bytes in the current event.
-Returns 0 if the event is in an internal entity. */
-
-XMLPARSEAPI(int)
-XML_GetCurrentByteCount(XML_Parser parser);
-
-/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets
- the integer pointed to by offset to the offset within this buffer
- of the current parse position, and sets the integer pointed to by size
- to the size of this buffer (the number of input bytes). Otherwise
- returns a null pointer. Also returns a null pointer if a parse isn't
- active.
-
- NOTE: The character pointer returned should not be used outside
- the handler that makes the call. */
-
-XMLPARSEAPI(const char *)
-XML_GetInputContext(XML_Parser parser,
- int *offset,
- int *size);
-
-/* For backwards compatibility with previous versions. */
-#define XML_GetErrorLineNumber XML_GetCurrentLineNumber
-#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber
-#define XML_GetErrorByteIndex XML_GetCurrentByteIndex
-
-/* Frees memory used by the parser. */
-XMLPARSEAPI(void)
-XML_ParserFree(XML_Parser parser);
-
-/* Returns a string describing the error. */
-XMLPARSEAPI(const XML_LChar *)
-XML_ErrorString(int code);
-
-/* Return a string containing the version number of this expat */
-XMLPARSEAPI(const XML_LChar *)
-XML_ExpatVersion(void);
-
-typedef struct {
- int major;
- int minor;
- int micro;
-} XML_Expat_Version;
-
-/* Return an XML_Expat_Version structure containing numeric version
- number information for this version of expat */
-
-XMLPARSEAPI(XML_Expat_Version)
-XML_ExpatVersionInfo(void);
-
-#define XML_MAJOR_VERSION 1
-#define XML_MINOR_VERSION 95
-#define XML_MICRO_VERSION 2
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XmlParse_INCLUDED */
diff --git a/ext/xml/expat/iasciitab.h b/ext/xml/expat/iasciitab.h
deleted file mode 100644
index 55dbc398b8..0000000000
--- a/ext/xml/expat/iasciitab.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */
-/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML,
-/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML,
-/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM,
-/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS,
-/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS,
-/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL,
-/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI,
-/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST,
-/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB,
-/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT,
-/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER,
diff --git a/ext/xml/expat/latin1tab.h b/ext/xml/expat/latin1tab.h
deleted file mode 100644
index 178b1d186d..0000000000
--- a/ext/xml/expat/latin1tab.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER,
-/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME,
-/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER,
-/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
diff --git a/ext/xml/expat/nametab.h b/ext/xml/expat/nametab.h
deleted file mode 100644
index b05e62c77a..0000000000
--- a/ext/xml/expat/nametab.h
+++ /dev/null
@@ -1,150 +0,0 @@
-static const unsigned namingBitmap[] = {
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE,
-0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF,
-0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF,
-0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,
-0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,
-0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,
-0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,
-0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,
-0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF,
-0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000,
-0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060,
-0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003,
-0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003,
-0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000,
-0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001,
-0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003,
-0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000,
-0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003,
-0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003,
-0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000,
-0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000,
-0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF,
-0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB,
-0x40000000, 0xF580C900, 0x00000007, 0x02010800,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF,
-0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF,
-0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF,
-0x00000000, 0x00004C40, 0x00000000, 0x00000000,
-0x00000007, 0x00000000, 0x00000000, 0x00000000,
-0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF,
-0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF,
-0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000,
-0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE,
-0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF,
-0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,
-0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003,
-0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,
-0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,
-0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,
-0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,
-0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF,
-0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF,
-0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF,
-0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF,
-0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF,
-0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0,
-0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1,
-0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3,
-0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80,
-0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3,
-0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3,
-0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000,
-0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000,
-0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF,
-0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x1FFF0000, 0x00000002,
-0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF,
-0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF,
-};
-static const unsigned char nmstrtPages[] = {
-0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00,
-0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
-0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-static const unsigned char namePages[] = {
-0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00,
-0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
-0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
-0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
diff --git a/ext/xml/expat/utf8tab.h b/ext/xml/expat/utf8tab.h
deleted file mode 100644
index 9e3b6b83eb..0000000000
--- a/ext/xml/expat/utf8tab.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-
-/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4,
-/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM,
diff --git a/ext/xml/expat/winconfig.h b/ext/xml/expat/winconfig.h
deleted file mode 100644
index 77b1ece8ca..0000000000
--- a/ext/xml/expat/winconfig.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*================================================================
-** Copyright 2000, Clark Cooper
-** All rights reserved.
-**
-** This is free software. You are permitted to copy, distribute, or modify
-** it under the terms of the MIT/X license (contained in the COPYING file
-** with this distribution.)
-**
-**
-*/
-
-#ifndef WINCONFIG_H
-#define WINCONFIG_H
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
-#include <memory.h>
-#include <string.h>
-
-#define XML_NS 1
-#define XML_DTD 1
-#define XML_BYTE_ORDER 12
-#define XML_CONTEXT_BYTES 1024
-
-#endif /* ndef WINCONFIG_H */
diff --git a/ext/xml/expat/xmlparse.c b/ext/xml/expat/xmlparse.c
deleted file mode 100644
index 9836e9149a..0000000000
--- a/ext/xml/expat/xmlparse.c
+++ /dev/null
@@ -1,4637 +0,0 @@
-/*
-Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#include "php_compat.h"
-
-#ifdef COMPILED_FROM_DSP
-# include "winconfig.h"
-# define XMLPARSEAPI(type) __declspec(dllexport) type __cdecl
-# include "expat.h"
-# undef XMLPARSEAPI
-#else
-#include <php_config.h>
-
-#ifdef __declspec
-# define XMLPARSEAPI(type) __declspec(dllexport) type __cdecl
-#endif
-
-#include "expat.h"
-
-#ifdef __declspec
-# undef XMLPARSEAPI
-#endif
-#endif /* ndef COMPILED_FROM_DSP */
-
-#include <stddef.h>
-#include <string.h>
-
-#ifdef XML_UNICODE
-#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX
-#define XmlConvert XmlUtf16Convert
-#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding
-#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS
-#define XmlEncode XmlUtf16Encode
-#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1))
-typedef unsigned short ICHAR;
-#else
-#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX
-#define XmlConvert XmlUtf8Convert
-#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding
-#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS
-#define XmlEncode XmlUtf8Encode
-#define MUST_CONVERT(enc, s) (!(enc)->isUtf8)
-typedef char ICHAR;
-#endif
-
-
-#ifndef XML_NS
-
-#define XmlInitEncodingNS XmlInitEncoding
-#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding
-#undef XmlGetInternalEncodingNS
-#define XmlGetInternalEncodingNS XmlGetInternalEncoding
-#define XmlParseXmlDeclNS XmlParseXmlDecl
-
-#endif
-
-#ifdef XML_UNICODE_WCHAR_T
-#define XML_T(x) L ## x
-#else
-#define XML_T(x) x
-#endif
-
-/* Round up n to be a multiple of sz, where sz is a power of 2. */
-#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
-
-#include "xmltok.h"
-#include "xmlrole.h"
-
-typedef const XML_Char *KEY;
-
-typedef struct {
- KEY name;
-} NAMED;
-
-typedef struct {
- NAMED **v;
- size_t size;
- size_t used;
- size_t usedLim;
- XML_Memory_Handling_Suite *mem;
-} HASH_TABLE;
-
-typedef struct {
- NAMED **p;
- NAMED **end;
-} HASH_TABLE_ITER;
-
-#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */
-#define INIT_DATA_BUF_SIZE 1024
-#define INIT_ATTS_SIZE 16
-#define INIT_BLOCK_SIZE 1024
-#define INIT_BUFFER_SIZE 1024
-
-#define EXPAND_SPARE 24
-
-typedef struct binding {
- struct prefix *prefix;
- struct binding *nextTagBinding;
- struct binding *prevPrefixBinding;
- const struct attribute_id *attId;
- XML_Char *uri;
- int uriLen;
- int uriAlloc;
-} BINDING;
-
-typedef struct prefix {
- const XML_Char *name;
- BINDING *binding;
-} PREFIX;
-
-typedef struct {
- const XML_Char *str;
- const XML_Char *localPart;
- int uriLen;
-} TAG_NAME;
-
-typedef struct tag {
- struct tag *parent;
- const char *rawName;
- int rawNameLength;
- TAG_NAME name;
- char *buf;
- char *bufEnd;
- BINDING *bindings;
-} TAG;
-
-typedef struct {
- const XML_Char *name;
- const XML_Char *textPtr;
- int textLen;
- const XML_Char *systemId;
- const XML_Char *base;
- const XML_Char *publicId;
- const XML_Char *notation;
- char open;
- char is_param;
-} ENTITY;
-
-typedef struct {
- enum XML_Content_Type type;
- enum XML_Content_Quant quant;
- const XML_Char * name;
- int firstchild;
- int lastchild;
- int childcnt;
- int nextsib;
-} CONTENT_SCAFFOLD;
-
-typedef struct block {
- struct block *next;
- int size;
- XML_Char s[1];
-} BLOCK;
-
-typedef struct {
- BLOCK *blocks;
- BLOCK *freeBlocks;
- const XML_Char *end;
- XML_Char *ptr;
- XML_Char *start;
- XML_Memory_Handling_Suite *mem;
-} STRING_POOL;
-
-/* The XML_Char before the name is used to determine whether
-an attribute has been specified. */
-typedef struct attribute_id {
- XML_Char *name;
- PREFIX *prefix;
- char maybeTokenized;
- char xmlns;
-} ATTRIBUTE_ID;
-
-typedef struct {
- const ATTRIBUTE_ID *id;
- char isCdata;
- const XML_Char *value;
-} DEFAULT_ATTRIBUTE;
-
-typedef struct {
- const XML_Char *name;
- PREFIX *prefix;
- const ATTRIBUTE_ID *idAtt;
- int nDefaultAtts;
- int allocDefaultAtts;
- DEFAULT_ATTRIBUTE *defaultAtts;
-} ELEMENT_TYPE;
-
-typedef struct {
- HASH_TABLE generalEntities;
- HASH_TABLE elementTypes;
- HASH_TABLE attributeIds;
- HASH_TABLE prefixes;
- STRING_POOL pool;
- int complete;
- int standalone;
-#ifdef XML_DTD
- HASH_TABLE paramEntities;
-#endif /* XML_DTD */
- PREFIX defaultPrefix;
- /* === scaffolding for building content model === */
- int in_eldecl;
- CONTENT_SCAFFOLD *scaffold;
- unsigned contentStringLen;
- unsigned scaffSize;
- unsigned scaffCount;
- int scaffLevel;
- int *scaffIndex;
-} DTD;
-
-typedef struct open_internal_entity {
- const char *internalEventPtr;
- const char *internalEventEndPtr;
- struct open_internal_entity *next;
- ENTITY *entity;
-} OPEN_INTERNAL_ENTITY;
-
-typedef enum XML_Error Processor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr);
-
-static Processor prologProcessor;
-static Processor prologInitProcessor;
-static Processor contentProcessor;
-static Processor cdataSectionProcessor;
-#ifdef XML_DTD
-static Processor ignoreSectionProcessor;
-#endif /* XML_DTD */
-static Processor epilogProcessor;
-static Processor errorProcessor;
-static Processor externalEntityInitProcessor;
-static Processor externalEntityInitProcessor2;
-static Processor externalEntityInitProcessor3;
-static Processor externalEntityContentProcessor;
-
-static enum XML_Error
-handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName);
-static enum XML_Error
-processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *, const char *);
-static enum XML_Error
-initializeEncoding(XML_Parser parser);
-static enum XML_Error
-doProlog(XML_Parser parser, const ENCODING *enc, const char *s,
- const char *end, int tok, const char *next, const char **nextPtr);
-static enum XML_Error
-processInternalParamEntity(XML_Parser parser, ENTITY *entity);
-static enum XML_Error
-doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
- const char *start, const char *end, const char **endPtr);
-static enum XML_Error
-doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr);
-#ifdef XML_DTD
-static enum XML_Error
-doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr);
-#endif /* XML_DTD */
-static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s,
- TAG_NAME *tagNamePtr, BINDING **bindingsPtr);
-static
-int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr);
-
-static int
-defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *,
- int isCdata, int isId, const XML_Char *dfltValue,
- XML_Parser parser);
-
-static enum XML_Error
-storeAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *,
- STRING_POOL *);
-static enum XML_Error
-appendAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *,
- STRING_POOL *);
-static ATTRIBUTE_ID *
-getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
-static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *);
-static enum XML_Error
-storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
-static int
-reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
-static int
-reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
-static void
-reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
-
-static const XML_Char *getContext(XML_Parser parser);
-static int setContext(XML_Parser parser, const XML_Char *context);
-static void normalizePublicId(XML_Char *s);
-static int dtdInit(DTD *, XML_Parser parser);
-
-static void dtdDestroy(DTD *, XML_Parser parser);
-
-static int dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser);
-
-static int copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *,
- XML_Parser parser);
-
-#ifdef XML_DTD
-static void dtdSwap(DTD *, DTD *);
-#endif /* XML_DTD */
-
-static NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize);
-
-static void hashTableInit(HASH_TABLE *, XML_Memory_Handling_Suite *ms);
-
-static void hashTableDestroy(HASH_TABLE *);
-static void hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *);
-static NAMED *hashTableIterNext(HASH_TABLE_ITER *);
-static void poolInit(STRING_POOL *, XML_Memory_Handling_Suite *ms);
-static void poolClear(STRING_POOL *);
-static void poolDestroy(STRING_POOL *);
-static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end);
-static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end);
-
-static int poolGrow(STRING_POOL *pool);
-
-static int nextScaffoldPart(XML_Parser parser);
-static XML_Content *build_model(XML_Parser parser);
-
-static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s);
-static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n);
-static const XML_Char *poolAppendString(STRING_POOL *pool, const XML_Char *s);
-static ELEMENT_TYPE * getElementType(XML_Parser Paraser,
- const ENCODING *enc,
- const char *ptr,
- const char *end);
-
-#define poolStart(pool) ((pool)->start)
-#define poolEnd(pool) ((pool)->ptr)
-#define poolLength(pool) ((pool)->ptr - (pool)->start)
-#define poolChop(pool) ((void)--(pool->ptr))
-#define poolLastChar(pool) (((pool)->ptr)[-1])
-#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
-#define poolFinish(pool) ((pool)->start = (pool)->ptr)
-#define poolAppendChar(pool, c) \
- (((pool)->ptr == (pool)->end && !poolGrow(pool)) \
- ? 0 \
- : ((*((pool)->ptr)++ = c), 1))
-
-typedef struct {
- /* The first member must be userData so that the XML_GetUserData macro works. */
- void *m_userData;
- void *m_handlerArg;
- char *m_buffer;
- XML_Memory_Handling_Suite m_mem;
- /* first character to be parsed */
- const char *m_bufferPtr;
- /* past last character to be parsed */
- char *m_bufferEnd;
- /* allocated end of buffer */
- const char *m_bufferLim;
- long m_parseEndByteIndex;
- const char *m_parseEndPtr;
- XML_Char *m_dataBuf;
- XML_Char *m_dataBufEnd;
- XML_StartElementHandler m_startElementHandler;
- XML_EndElementHandler m_endElementHandler;
- XML_CharacterDataHandler m_characterDataHandler;
- XML_ProcessingInstructionHandler m_processingInstructionHandler;
- XML_CommentHandler m_commentHandler;
- XML_StartCdataSectionHandler m_startCdataSectionHandler;
- XML_EndCdataSectionHandler m_endCdataSectionHandler;
- XML_DefaultHandler m_defaultHandler;
- XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler;
- XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler;
- XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler;
- XML_NotationDeclHandler m_notationDeclHandler;
- XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler;
- XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler;
- XML_NotStandaloneHandler m_notStandaloneHandler;
- XML_ExternalEntityRefHandler m_externalEntityRefHandler;
- void *m_externalEntityRefHandlerArg;
- XML_UnknownEncodingHandler m_unknownEncodingHandler;
- XML_ElementDeclHandler m_elementDeclHandler;
- XML_AttlistDeclHandler m_attlistDeclHandler;
- XML_EntityDeclHandler m_entityDeclHandler;
- XML_XmlDeclHandler m_xmlDeclHandler;
- const ENCODING *m_encoding;
- INIT_ENCODING m_initEncoding;
- const ENCODING *m_internalEncoding;
- const XML_Char *m_protocolEncodingName;
- int m_ns;
- int m_ns_triplets;
- void *m_unknownEncodingMem;
- void *m_unknownEncodingData;
- void *m_unknownEncodingHandlerData;
- void (*m_unknownEncodingRelease)(void *);
- PROLOG_STATE m_prologState;
- Processor *m_processor;
- enum XML_Error m_errorCode;
- const char *m_eventPtr;
- const char *m_eventEndPtr;
- const char *m_positionPtr;
- OPEN_INTERNAL_ENTITY *m_openInternalEntities;
- int m_defaultExpandInternalEntities;
- int m_tagLevel;
- ENTITY *m_declEntity;
- const XML_Char *m_doctypeName;
- const XML_Char *m_doctypeSysid;
- const XML_Char *m_doctypePubid;
- const XML_Char *m_declAttributeType;
- const XML_Char *m_declNotationName;
- const XML_Char *m_declNotationPublicId;
- ELEMENT_TYPE *m_declElementType;
- ATTRIBUTE_ID *m_declAttributeId;
- char m_declAttributeIsCdata;
- char m_declAttributeIsId;
- DTD m_dtd;
- const XML_Char *m_curBase;
- TAG *m_tagStack;
- TAG *m_freeTagList;
- BINDING *m_inheritedBindings;
- BINDING *m_freeBindingList;
- int m_attsSize;
- int m_nSpecifiedAtts;
- int m_idAttIndex;
- ATTRIBUTE *m_atts;
- POSITION m_position;
- STRING_POOL m_tempPool;
- STRING_POOL m_temp2Pool;
- char *m_groupConnector;
- unsigned m_groupSize;
- int m_hadExternalDoctype;
- XML_Char m_namespaceSeparator;
-#ifdef XML_DTD
- enum XML_ParamEntityParsing m_paramEntityParsing;
- XML_Parser m_parentParser;
-#endif
-} Parser;
-
-#define MALLOC(s) (((Parser *)parser)->m_mem.malloc_fcn((s)))
-#define REALLOC(p,s) (((Parser *)parser)->m_mem.realloc_fcn((p),(s)))
-#define FREE(p) (((Parser *)parser)->m_mem.free_fcn((p)))
-
-#define userData (((Parser *)parser)->m_userData)
-#define handlerArg (((Parser *)parser)->m_handlerArg)
-#define startElementHandler (((Parser *)parser)->m_startElementHandler)
-#define endElementHandler (((Parser *)parser)->m_endElementHandler)
-#define characterDataHandler (((Parser *)parser)->m_characterDataHandler)
-#define processingInstructionHandler (((Parser *)parser)->m_processingInstructionHandler)
-#define commentHandler (((Parser *)parser)->m_commentHandler)
-#define startCdataSectionHandler (((Parser *)parser)->m_startCdataSectionHandler)
-#define endCdataSectionHandler (((Parser *)parser)->m_endCdataSectionHandler)
-#define defaultHandler (((Parser *)parser)->m_defaultHandler)
-#define startDoctypeDeclHandler (((Parser *)parser)->m_startDoctypeDeclHandler)
-#define endDoctypeDeclHandler (((Parser *)parser)->m_endDoctypeDeclHandler)
-#define unparsedEntityDeclHandler (((Parser *)parser)->m_unparsedEntityDeclHandler)
-#define notationDeclHandler (((Parser *)parser)->m_notationDeclHandler)
-#define startNamespaceDeclHandler (((Parser *)parser)->m_startNamespaceDeclHandler)
-#define endNamespaceDeclHandler (((Parser *)parser)->m_endNamespaceDeclHandler)
-#define notStandaloneHandler (((Parser *)parser)->m_notStandaloneHandler)
-#define externalEntityRefHandler (((Parser *)parser)->m_externalEntityRefHandler)
-#define externalEntityRefHandlerArg (((Parser *)parser)->m_externalEntityRefHandlerArg)
-#define internalEntityRefHandler (((Parser *)parser)->m_internalEntityRefHandler)
-#define unknownEncodingHandler (((Parser *)parser)->m_unknownEncodingHandler)
-#define elementDeclHandler (((Parser *)parser)->m_elementDeclHandler)
-#define attlistDeclHandler (((Parser *)parser)->m_attlistDeclHandler)
-#define entityDeclHandler (((Parser *)parser)->m_entityDeclHandler)
-#define xmlDeclHandler (((Parser *)parser)->m_xmlDeclHandler)
-#define encoding (((Parser *)parser)->m_encoding)
-#define initEncoding (((Parser *)parser)->m_initEncoding)
-#define internalEncoding (((Parser *)parser)->m_internalEncoding)
-#define unknownEncodingMem (((Parser *)parser)->m_unknownEncodingMem)
-#define unknownEncodingData (((Parser *)parser)->m_unknownEncodingData)
-#define unknownEncodingHandlerData \
- (((Parser *)parser)->m_unknownEncodingHandlerData)
-#define unknownEncodingRelease (((Parser *)parser)->m_unknownEncodingRelease)
-#define protocolEncodingName (((Parser *)parser)->m_protocolEncodingName)
-#define ns (((Parser *)parser)->m_ns)
-#define ns_triplets (((Parser *)parser)->m_ns_triplets)
-#define prologState (((Parser *)parser)->m_prologState)
-#define processor (((Parser *)parser)->m_processor)
-#define errorCode (((Parser *)parser)->m_errorCode)
-#define eventPtr (((Parser *)parser)->m_eventPtr)
-#define eventEndPtr (((Parser *)parser)->m_eventEndPtr)
-#define positionPtr (((Parser *)parser)->m_positionPtr)
-#define position (((Parser *)parser)->m_position)
-#define openInternalEntities (((Parser *)parser)->m_openInternalEntities)
-#define defaultExpandInternalEntities (((Parser *)parser)->m_defaultExpandInternalEntities)
-#define tagLevel (((Parser *)parser)->m_tagLevel)
-#define buffer (((Parser *)parser)->m_buffer)
-#define bufferPtr (((Parser *)parser)->m_bufferPtr)
-#define bufferEnd (((Parser *)parser)->m_bufferEnd)
-#define parseEndByteIndex (((Parser *)parser)->m_parseEndByteIndex)
-#define parseEndPtr (((Parser *)parser)->m_parseEndPtr)
-#define bufferLim (((Parser *)parser)->m_bufferLim)
-#define dataBuf (((Parser *)parser)->m_dataBuf)
-#define dataBufEnd (((Parser *)parser)->m_dataBufEnd)
-#define dtd (((Parser *)parser)->m_dtd)
-#define curBase (((Parser *)parser)->m_curBase)
-#define declEntity (((Parser *)parser)->m_declEntity)
-#define doctypeName (((Parser *)parser)->m_doctypeName)
-#define doctypeSysid (((Parser *)parser)->m_doctypeSysid)
-#define doctypePubid (((Parser *)parser)->m_doctypePubid)
-#define declAttributeType (((Parser *)parser)->m_declAttributeType)
-#define declNotationName (((Parser *)parser)->m_declNotationName)
-#define declNotationPublicId (((Parser *)parser)->m_declNotationPublicId)
-#define declElementType (((Parser *)parser)->m_declElementType)
-#define declAttributeId (((Parser *)parser)->m_declAttributeId)
-#define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata)
-#define declAttributeIsId (((Parser *)parser)->m_declAttributeIsId)
-#define freeTagList (((Parser *)parser)->m_freeTagList)
-#define freeBindingList (((Parser *)parser)->m_freeBindingList)
-#define inheritedBindings (((Parser *)parser)->m_inheritedBindings)
-#define tagStack (((Parser *)parser)->m_tagStack)
-#define atts (((Parser *)parser)->m_atts)
-#define attsSize (((Parser *)parser)->m_attsSize)
-#define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts)
-#define idAttIndex (((Parser *)parser)->m_idAttIndex)
-#define tempPool (((Parser *)parser)->m_tempPool)
-#define temp2Pool (((Parser *)parser)->m_temp2Pool)
-#define groupConnector (((Parser *)parser)->m_groupConnector)
-#define groupSize (((Parser *)parser)->m_groupSize)
-#define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype)
-#define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator)
-#ifdef XML_DTD
-#define parentParser (((Parser *)parser)->m_parentParser)
-#define paramEntityParsing (((Parser *)parser)->m_paramEntityParsing)
-#endif /* XML_DTD */
-
-#ifdef COMPILED_FROM_DSP
-BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID p) {
- return TRUE;
-}
-#endif /* def COMPILED_FROM_DSP */
-
-#ifdef _MSC_VER
-#ifdef _DEBUG
-Parser *asParser(XML_Parser parser)
-{
- return parser;
-}
-#endif
-#endif
-
-XML_Parser XML_ParserCreate(const XML_Char *encodingName)
-{
- return XML_ParserCreate_MM(encodingName, NULL, NULL);
-}
-
-XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep)
-{
- XML_Char tmp[2];
- *tmp = nsSep;
- return XML_ParserCreate_MM(encodingName, NULL, tmp);
-}
-
-XML_Parser
-XML_ParserCreate_MM(const XML_Char *encodingName,
- const XML_Memory_Handling_Suite *memsuite,
- const XML_Char *nameSep) {
-
- XML_Parser parser;
- static
- const XML_Char implicitContext[] = {
- XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='),
- XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'),
- XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'),
- XML_T('.'), XML_T('w'), XML_T('3'),
- XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'),
- XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'),
- XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'),
- XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'),
- XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'),
- XML_T('\0')
- };
-
-
- if (memsuite) {
- XML_Memory_Handling_Suite *mtemp;
- parser = memsuite->malloc_fcn(sizeof(Parser));
- mtemp = &(((Parser *) parser)->m_mem);
- mtemp->malloc_fcn = memsuite->malloc_fcn;
- mtemp->realloc_fcn = memsuite->realloc_fcn;
- mtemp->free_fcn = memsuite->free_fcn;
- }
- else {
- XML_Memory_Handling_Suite *mtemp;
- parser = malloc(sizeof(Parser));
- mtemp = &(((Parser *) parser)->m_mem);
- mtemp->malloc_fcn = malloc;
- mtemp->realloc_fcn = realloc;
- mtemp->free_fcn = free;
- }
-
- if (!parser)
- return parser;
- processor = prologInitProcessor;
- XmlPrologStateInit(&prologState);
- userData = 0;
- handlerArg = 0;
- startElementHandler = 0;
- endElementHandler = 0;
- characterDataHandler = 0;
- processingInstructionHandler = 0;
- commentHandler = 0;
- startCdataSectionHandler = 0;
- endCdataSectionHandler = 0;
- defaultHandler = 0;
- startDoctypeDeclHandler = 0;
- endDoctypeDeclHandler = 0;
- unparsedEntityDeclHandler = 0;
- notationDeclHandler = 0;
- startNamespaceDeclHandler = 0;
- endNamespaceDeclHandler = 0;
- notStandaloneHandler = 0;
- externalEntityRefHandler = 0;
- externalEntityRefHandlerArg = parser;
- unknownEncodingHandler = 0;
- elementDeclHandler = 0;
- attlistDeclHandler = 0;
- entityDeclHandler = 0;
- xmlDeclHandler = 0;
- buffer = 0;
- bufferPtr = 0;
- bufferEnd = 0;
- parseEndByteIndex = 0;
- parseEndPtr = 0;
- bufferLim = 0;
- declElementType = 0;
- declAttributeId = 0;
- declEntity = 0;
- doctypeName = 0;
- doctypeSysid = 0;
- doctypePubid = 0;
- declAttributeType = 0;
- declNotationName = 0;
- declNotationPublicId = 0;
- memset(&position, 0, sizeof(POSITION));
- errorCode = XML_ERROR_NONE;
- eventPtr = 0;
- eventEndPtr = 0;
- positionPtr = 0;
- openInternalEntities = 0;
- tagLevel = 0;
- tagStack = 0;
- freeTagList = 0;
- freeBindingList = 0;
- inheritedBindings = 0;
- attsSize = INIT_ATTS_SIZE;
- atts = MALLOC(attsSize * sizeof(ATTRIBUTE));
- nSpecifiedAtts = 0;
- dataBuf = MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char));
- groupSize = 0;
- groupConnector = 0;
- hadExternalDoctype = 0;
- unknownEncodingMem = 0;
- unknownEncodingRelease = 0;
- unknownEncodingData = 0;
- unknownEncodingHandlerData = 0;
- namespaceSeparator = '!';
-#ifdef XML_DTD
- parentParser = 0;
- paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
-#endif
- ns = 0;
- ns_triplets = 0;
- poolInit(&tempPool, &(((Parser *) parser)->m_mem));
- poolInit(&temp2Pool, &(((Parser *) parser)->m_mem));
- protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0;
- curBase = 0;
- if (!dtdInit(&dtd, parser) || !atts || !dataBuf
- || (encodingName && !protocolEncodingName)) {
- XML_ParserFree(parser);
- return 0;
- }
- dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE;
-
- if (nameSep) {
- XmlInitEncodingNS(&initEncoding, &encoding, 0);
- ns = 1;
- internalEncoding = XmlGetInternalEncodingNS();
- namespaceSeparator = *nameSep;
-
- if (! setContext(parser, implicitContext)) {
- XML_ParserFree(parser);
- return 0;
- }
- }
- else {
- XmlInitEncoding(&initEncoding, &encoding, 0);
- internalEncoding = XmlGetInternalEncoding();
- }
-
- return parser;
-} /* End XML_ParserCreate_MM */
-
-int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName)
-{
- if (!encodingName)
- protocolEncodingName = 0;
- else {
- protocolEncodingName = poolCopyString(&tempPool, encodingName);
- if (!protocolEncodingName)
- return 0;
- }
- return 1;
-}
-
-XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser,
- const XML_Char *context,
- const XML_Char *encodingName)
-{
- XML_Parser parser = oldParser;
- DTD *oldDtd = &dtd;
- XML_StartElementHandler oldStartElementHandler = startElementHandler;
- XML_EndElementHandler oldEndElementHandler = endElementHandler;
- XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler;
- XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler;
- XML_CommentHandler oldCommentHandler = commentHandler;
- XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler;
- XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler;
- XML_DefaultHandler oldDefaultHandler = defaultHandler;
- XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler = unparsedEntityDeclHandler;
- XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler;
- XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler;
- XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler;
- XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;
- XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler;
- XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler;
- XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler;
- XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler;
- XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler;
- XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler;
- ELEMENT_TYPE * oldDeclElementType = declElementType;
-
- void *oldUserData = userData;
- void *oldHandlerArg = handlerArg;
- int oldDefaultExpandInternalEntities = defaultExpandInternalEntities;
- void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg;
-#ifdef XML_DTD
- int oldParamEntityParsing = paramEntityParsing;
-#endif
- int oldns_triplets = ns_triplets;
-
- if (ns) {
- XML_Char tmp[2];
-
- *tmp = namespaceSeparator;
- parser = XML_ParserCreate_MM(encodingName, &((Parser *)parser)->m_mem,
- tmp);
- }
- else {
- parser = XML_ParserCreate_MM(encodingName, &((Parser *)parser)->m_mem,
- NULL);
- }
-
- if (!parser)
- return 0;
-
- startElementHandler = oldStartElementHandler;
- endElementHandler = oldEndElementHandler;
- characterDataHandler = oldCharacterDataHandler;
- processingInstructionHandler = oldProcessingInstructionHandler;
- commentHandler = oldCommentHandler;
- startCdataSectionHandler = oldStartCdataSectionHandler;
- endCdataSectionHandler = oldEndCdataSectionHandler;
- defaultHandler = oldDefaultHandler;
- unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler;
- notationDeclHandler = oldNotationDeclHandler;
- startNamespaceDeclHandler = oldStartNamespaceDeclHandler;
- endNamespaceDeclHandler = oldEndNamespaceDeclHandler;
- notStandaloneHandler = oldNotStandaloneHandler;
- externalEntityRefHandler = oldExternalEntityRefHandler;
- unknownEncodingHandler = oldUnknownEncodingHandler;
- elementDeclHandler = oldElementDeclHandler;
- attlistDeclHandler = oldAttlistDeclHandler;
- entityDeclHandler = oldEntityDeclHandler;
- xmlDeclHandler = oldXmlDeclHandler;
- declElementType = oldDeclElementType;
- userData = oldUserData;
- if (oldUserData == oldHandlerArg)
- handlerArg = userData;
- else
- handlerArg = parser;
- if (oldExternalEntityRefHandlerArg != oldParser)
- externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;
- defaultExpandInternalEntities = oldDefaultExpandInternalEntities;
- ns_triplets = oldns_triplets;
-#ifdef XML_DTD
- paramEntityParsing = oldParamEntityParsing;
- if (context) {
-#endif /* XML_DTD */
- if (!dtdCopy(&dtd, oldDtd, parser) || !setContext(parser, context)) {
- XML_ParserFree(parser);
- return 0;
- }
- processor = externalEntityInitProcessor;
-#ifdef XML_DTD
- }
- else {
- dtdSwap(&dtd, oldDtd);
- parentParser = oldParser;
- XmlPrologStateInitExternalEntity(&prologState);
- dtd.complete = 1;
- hadExternalDoctype = 1;
- }
-#endif /* XML_DTD */
- return parser;
-}
-
-static
-void destroyBindings(BINDING *bindings, XML_Parser parser)
-{
- for (;;) {
- BINDING *b = bindings;
- if (!b)
- break;
- bindings = b->nextTagBinding;
- FREE(b->uri);
- FREE(b);
- }
-}
-
-void XML_ParserFree(XML_Parser parser)
-{
- for (;;) {
- TAG *p;
- if (tagStack == 0) {
- if (freeTagList == 0)
- break;
- tagStack = freeTagList;
- freeTagList = 0;
- }
- p = tagStack;
- tagStack = tagStack->parent;
- FREE(p->buf);
- destroyBindings(p->bindings, parser);
- FREE(p);
- }
- destroyBindings(freeBindingList, parser);
- destroyBindings(inheritedBindings, parser);
- poolDestroy(&tempPool);
- poolDestroy(&temp2Pool);
-#ifdef XML_DTD
- if (parentParser) {
- if (hadExternalDoctype)
- dtd.complete = 0;
- dtdSwap(&dtd, &((Parser *)parentParser)->m_dtd);
- }
-#endif /* XML_DTD */
- dtdDestroy(&dtd, parser);
- FREE((void *)atts);
- if (groupConnector)
- FREE(groupConnector);
- if (buffer)
- FREE(buffer);
- FREE(dataBuf);
- if (unknownEncodingMem)
- FREE(unknownEncodingMem);
- if (unknownEncodingRelease)
- unknownEncodingRelease(unknownEncodingData);
- FREE(parser);
-}
-
-void XML_UseParserAsHandlerArg(XML_Parser parser)
-{
- handlerArg = parser;
-}
-
-void
-XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) {
- ns_triplets = do_nst;
-}
-
-void XML_SetUserData(XML_Parser parser, void *p)
-{
- if (handlerArg == userData)
- handlerArg = userData = p;
- else
- userData = p;
-}
-
-int XML_SetBase(XML_Parser parser, const XML_Char *p)
-{
- if (p) {
- p = poolCopyString(&dtd.pool, p);
- if (!p)
- return 0;
- curBase = p;
- }
- else
- curBase = 0;
- return 1;
-}
-
-const XML_Char *XML_GetBase(XML_Parser parser)
-{
- return curBase;
-}
-
-int XML_GetSpecifiedAttributeCount(XML_Parser parser)
-{
- return nSpecifiedAtts;
-}
-
-int XML_GetIdAttributeIndex(XML_Parser parser)
-{
- return idAttIndex;
-}
-
-void XML_SetElementHandler(XML_Parser parser,
- XML_StartElementHandler start,
- XML_EndElementHandler end)
-{
- startElementHandler = start;
- endElementHandler = end;
-}
-
-void XML_SetStartElementHandler(XML_Parser parser,
- XML_StartElementHandler start) {
- startElementHandler = start;
-}
-
-void XML_SetEndElementHandler(XML_Parser parser,
- XML_EndElementHandler end) {
- endElementHandler = end;
-}
-
-void XML_SetCharacterDataHandler(XML_Parser parser,
- XML_CharacterDataHandler handler)
-{
- characterDataHandler = handler;
-}
-
-void XML_SetProcessingInstructionHandler(XML_Parser parser,
- XML_ProcessingInstructionHandler handler)
-{
- processingInstructionHandler = handler;
-}
-
-void XML_SetCommentHandler(XML_Parser parser,
- XML_CommentHandler handler)
-{
- commentHandler = handler;
-}
-
-void XML_SetCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start,
- XML_EndCdataSectionHandler end)
-{
- startCdataSectionHandler = start;
- endCdataSectionHandler = end;
-}
-
-void XML_SetStartCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start) {
- startCdataSectionHandler = start;
-}
-
-void XML_SetEndCdataSectionHandler(XML_Parser parser,
- XML_EndCdataSectionHandler end) {
- endCdataSectionHandler = end;
-}
-
-void XML_SetDefaultHandler(XML_Parser parser,
- XML_DefaultHandler handler)
-{
- defaultHandler = handler;
- defaultExpandInternalEntities = 0;
-}
-
-void XML_SetDefaultHandlerExpand(XML_Parser parser,
- XML_DefaultHandler handler)
-{
- defaultHandler = handler;
- defaultExpandInternalEntities = 1;
-}
-
-void XML_SetDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start,
- XML_EndDoctypeDeclHandler end)
-{
- startDoctypeDeclHandler = start;
- endDoctypeDeclHandler = end;
-}
-
-void XML_SetStartDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start) {
- startDoctypeDeclHandler = start;
-}
-
-void XML_SetEndDoctypeDeclHandler(XML_Parser parser,
- XML_EndDoctypeDeclHandler end) {
- endDoctypeDeclHandler = end;
-}
-
-void XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
- XML_UnparsedEntityDeclHandler handler)
-{
- unparsedEntityDeclHandler = handler;
-}
-
-void XML_SetNotationDeclHandler(XML_Parser parser,
- XML_NotationDeclHandler handler)
-{
- notationDeclHandler = handler;
-}
-
-void XML_SetNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start,
- XML_EndNamespaceDeclHandler end)
-{
- startNamespaceDeclHandler = start;
- endNamespaceDeclHandler = end;
-}
-
-void XML_SetStartNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start) {
- startNamespaceDeclHandler = start;
-}
-
-void XML_SetEndNamespaceDeclHandler(XML_Parser parser,
- XML_EndNamespaceDeclHandler end) {
- endNamespaceDeclHandler = end;
-}
-
-
-void XML_SetNotStandaloneHandler(XML_Parser parser,
- XML_NotStandaloneHandler handler)
-{
- notStandaloneHandler = handler;
-}
-
-void XML_SetExternalEntityRefHandler(XML_Parser parser,
- XML_ExternalEntityRefHandler handler)
-{
- externalEntityRefHandler = handler;
-}
-
-void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg)
-{
- if (arg)
- externalEntityRefHandlerArg = arg;
- else
- externalEntityRefHandlerArg = parser;
-}
-
-void XML_SetUnknownEncodingHandler(XML_Parser parser,
- XML_UnknownEncodingHandler handler,
- void *data)
-{
- unknownEncodingHandler = handler;
- unknownEncodingHandlerData = data;
-}
-
-void XML_SetElementDeclHandler(XML_Parser parser,
- XML_ElementDeclHandler eldecl)
-{
- elementDeclHandler = eldecl;
-}
-
-void XML_SetAttlistDeclHandler(XML_Parser parser,
- XML_AttlistDeclHandler attdecl)
-{
- attlistDeclHandler = attdecl;
-}
-
-void XML_SetEntityDeclHandler(XML_Parser parser,
- XML_EntityDeclHandler handler)
-{
- entityDeclHandler = handler;
-}
-
-void XML_SetXmlDeclHandler(XML_Parser parser,
- XML_XmlDeclHandler handler) {
- xmlDeclHandler = handler;
-}
-
-int XML_SetParamEntityParsing(XML_Parser parser,
- enum XML_ParamEntityParsing parsing)
-{
-#ifdef XML_DTD
- paramEntityParsing = parsing;
- return 1;
-#else
- return parsing == XML_PARAM_ENTITY_PARSING_NEVER;
-#endif
-}
-
-int XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
-{
- if (len == 0) {
- if (!isFinal)
- return 1;
- positionPtr = bufferPtr;
- errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0);
- if (errorCode == XML_ERROR_NONE)
- return 1;
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return 0;
- }
-#ifndef XML_CONTEXT_BYTES
- else if (bufferPtr == bufferEnd) {
- const char *end;
- int nLeftOver;
- parseEndByteIndex += len;
- positionPtr = s;
- if (isFinal) {
- errorCode = processor(parser, s, parseEndPtr = s + len, 0);
- if (errorCode == XML_ERROR_NONE)
- return 1;
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return 0;
- }
- errorCode = processor(parser, s, parseEndPtr = s + len, &end);
- if (errorCode != XML_ERROR_NONE) {
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return 0;
- }
- XmlUpdatePosition(encoding, positionPtr, end, &position);
- nLeftOver = s + len - end;
- if (nLeftOver) {
- if (buffer == 0 || nLeftOver > bufferLim - buffer) {
- /* FIXME avoid integer overflow */
- buffer = buffer == 0 ? MALLOC(len * 2) : REALLOC(buffer, len * 2);
- /* FIXME storage leak if realloc fails */
- if (!buffer) {
- errorCode = XML_ERROR_NO_MEMORY;
- eventPtr = eventEndPtr = 0;
- processor = errorProcessor;
- return 0;
- }
- bufferLim = buffer + len * 2;
- }
- memcpy(buffer, end, nLeftOver);
- bufferPtr = buffer;
- bufferEnd = buffer + nLeftOver;
- }
- return 1;
- }
-#endif /* not defined XML_CONTEXT_BYTES */
- else {
- memcpy(XML_GetBuffer(parser, len), s, len);
- return XML_ParseBuffer(parser, len, isFinal);
- }
-}
-
-int XML_ParseBuffer(XML_Parser parser, int len, int isFinal)
-{
- const char *start = bufferPtr;
- positionPtr = start;
- bufferEnd += len;
- parseEndByteIndex += len;
- errorCode = processor(parser, start, parseEndPtr = bufferEnd,
- isFinal ? (const char **)0 : &bufferPtr);
- if (errorCode == XML_ERROR_NONE) {
- if (!isFinal)
- XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
- return 1;
- }
- else {
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return 0;
- }
-}
-
-void *XML_GetBuffer(XML_Parser parser, int len)
-{
- if (len > bufferLim - bufferEnd) {
- /* FIXME avoid integer overflow */
- int neededSize = len + (bufferEnd - bufferPtr);
-#ifdef XML_CONTEXT_BYTES
- int keep = bufferPtr - buffer;
-
- if (keep > XML_CONTEXT_BYTES)
- keep = XML_CONTEXT_BYTES;
- neededSize += keep;
-#endif /* defined XML_CONTEXT_BYTES */
- if (neededSize <= bufferLim - buffer) {
-#ifdef XML_CONTEXT_BYTES
- if (keep < bufferPtr - buffer) {
- int offset = (bufferPtr - buffer) - keep;
- memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep);
- bufferEnd -= offset;
- bufferPtr -= offset;
- }
-#else
- memmove(buffer, bufferPtr, bufferEnd - bufferPtr);
- bufferEnd = buffer + (bufferEnd - bufferPtr);
- bufferPtr = buffer;
-#endif /* not defined XML_CONTEXT_BYTES */
- }
- else {
- char *newBuf;
- int bufferSize = bufferLim - bufferPtr;
- if (bufferSize == 0)
- bufferSize = INIT_BUFFER_SIZE;
- do {
- bufferSize *= 2;
- } while (bufferSize < neededSize);
- newBuf = MALLOC(bufferSize);
- if (newBuf == 0) {
- errorCode = XML_ERROR_NO_MEMORY;
- return 0;
- }
- bufferLim = newBuf + bufferSize;
-#ifdef XML_CONTEXT_BYTES
- if (bufferPtr) {
- int keep = bufferPtr - buffer;
- if (keep > XML_CONTEXT_BYTES)
- keep = XML_CONTEXT_BYTES;
- memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep);
- FREE(buffer);
- buffer = newBuf;
- bufferEnd = buffer + (bufferEnd - bufferPtr) + keep;
- bufferPtr = buffer + keep;
- }
- else {
- bufferEnd = newBuf + (bufferEnd - bufferPtr);
- bufferPtr = buffer = newBuf;
- }
-#else
- if (bufferPtr) {
- memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr);
- FREE(buffer);
- }
- bufferEnd = newBuf + (bufferEnd - bufferPtr);
- bufferPtr = buffer = newBuf;
-#endif /* not defined XML_CONTEXT_BYTES */
- }
- }
- return bufferEnd;
-}
-
-enum XML_Error XML_GetErrorCode(XML_Parser parser)
-{
- return errorCode;
-}
-
-long XML_GetCurrentByteIndex(XML_Parser parser)
-{
- if (eventPtr)
- return parseEndByteIndex - (parseEndPtr - eventPtr);
- return -1;
-}
-
-int XML_GetCurrentByteCount(XML_Parser parser)
-{
- if (eventEndPtr && eventPtr)
- return eventEndPtr - eventPtr;
- return 0;
-}
-
-const char * XML_GetInputContext(XML_Parser parser, int *offset, int *size)
-{
-#ifdef XML_CONTEXT_BYTES
- if (eventPtr && buffer) {
- *offset = eventPtr - buffer;
- *size = bufferEnd - buffer;
- return buffer;
- }
-#endif /* defined XML_CONTEXT_BYTES */
- return (char *) 0;
-}
-
-int XML_GetCurrentLineNumber(XML_Parser parser)
-{
- if (eventPtr) {
- XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
- positionPtr = eventPtr;
- }
- return position.lineNumber + 1;
-}
-
-int XML_GetCurrentColumnNumber(XML_Parser parser)
-{
- if (eventPtr) {
- XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
- positionPtr = eventPtr;
- }
- return position.columnNumber;
-}
-
-void XML_DefaultCurrent(XML_Parser parser)
-{
- if (defaultHandler) {
- if (openInternalEntities)
- reportDefault(parser,
- internalEncoding,
- openInternalEntities->internalEventPtr,
- openInternalEntities->internalEventEndPtr);
- else
- reportDefault(parser, encoding, eventPtr, eventEndPtr);
- }
-}
-
-const XML_LChar *XML_ErrorString(int code)
-{
- static const XML_LChar *message[] = {
- 0,
- XML_T("out of memory"),
- XML_T("syntax error"),
- XML_T("no element found"),
- XML_T("not well-formed (invalid token)"),
- XML_T("unclosed token"),
- XML_T("unclosed token"),
- XML_T("mismatched tag"),
- XML_T("duplicate attribute"),
- XML_T("junk after document element"),
- XML_T("illegal parameter entity reference"),
- XML_T("undefined entity"),
- XML_T("recursive entity reference"),
- XML_T("asynchronous entity"),
- XML_T("reference to invalid character number"),
- XML_T("reference to binary entity"),
- XML_T("reference to external entity in attribute"),
- XML_T("xml processing instruction not at start of external entity"),
- XML_T("unknown encoding"),
- XML_T("encoding specified in XML declaration is incorrect"),
- XML_T("unclosed CDATA section"),
- XML_T("error in processing external entity reference"),
- XML_T("document is not standalone"),
- XML_T("unexpected parser state - please send a bug report")
- };
- if (code > 0 && code < sizeof(message)/sizeof(message[0]))
- return message[code];
- return 0;
-}
-
-const XML_LChar *
-XML_ExpatVersion(void) {
- return "1.95.2";
-}
-
-XML_Expat_Version
-XML_ExpatVersionInfo(void) {
- XML_Expat_Version version;
-
- version.major = XML_MAJOR_VERSION;
- version.minor = XML_MINOR_VERSION;
- version.micro = XML_MICRO_VERSION;
-
- return version;
-}
-
-static
-enum XML_Error contentProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- return doContent(parser, 0, encoding, start, end, endPtr);
-}
-
-static
-enum XML_Error externalEntityInitProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = initializeEncoding(parser);
- if (result != XML_ERROR_NONE)
- return result;
- processor = externalEntityInitProcessor2;
- return externalEntityInitProcessor2(parser, start, end, endPtr);
-}
-
-static
-enum XML_Error externalEntityInitProcessor2(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- const char *next;
- int tok = XmlContentTok(encoding, start, end, &next);
- switch (tok) {
- case XML_TOK_BOM:
- start = next;
- break;
- case XML_TOK_PARTIAL:
- if (endPtr) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- eventPtr = start;
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (endPtr) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- eventPtr = start;
- return XML_ERROR_PARTIAL_CHAR;
- }
- processor = externalEntityInitProcessor3;
- return externalEntityInitProcessor3(parser, start, end, endPtr);
-}
-
-static
-enum XML_Error externalEntityInitProcessor3(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- const char *next;
- int tok = XmlContentTok(encoding, start, end, &next);
- switch (tok) {
- case XML_TOK_XML_DECL:
- {
- enum XML_Error result = processXmlDecl(parser, 1, start, next);
- if (result != XML_ERROR_NONE)
- return result;
- start = next;
- }
- break;
- case XML_TOK_PARTIAL:
- if (endPtr) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- eventPtr = start;
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (endPtr) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- eventPtr = start;
- return XML_ERROR_PARTIAL_CHAR;
- }
- processor = externalEntityContentProcessor;
- tagLevel = 1;
- return doContent(parser, 1, encoding, start, end, endPtr);
-}
-
-static
-enum XML_Error externalEntityContentProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- return doContent(parser, 1, encoding, start, end, endPtr);
-}
-
-static enum XML_Error
-doContent(XML_Parser parser,
- int startTagLevel,
- const ENCODING *enc,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- *eventPP = s;
- for (;;) {
- const char *next = s; /* XmlContentTok doesn't always set the last arg */
- int tok = XmlContentTok(enc, s, end, &next);
- *eventEndPP = next;
- switch (tok) {
- case XML_TOK_TRAILING_CR:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- *eventEndPP = end;
- if (characterDataHandler) {
- XML_Char c = 0xA;
- characterDataHandler(handlerArg, &c, 1);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, end);
- if (startTagLevel == 0)
- return XML_ERROR_NO_ELEMENTS;
- if (tagLevel != startTagLevel)
- return XML_ERROR_ASYNC_ENTITY;
- return XML_ERROR_NONE;
- case XML_TOK_NONE:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- if (startTagLevel > 0) {
- if (tagLevel != startTagLevel)
- return XML_ERROR_ASYNC_ENTITY;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_NO_ELEMENTS;
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_ENTITY_REF:
- {
- const XML_Char *name;
- ENTITY *entity;
- XML_Char ch = XmlPredefinedEntityName(enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (ch) {
- if (characterDataHandler)
- characterDataHandler(handlerArg, &ch, 1);
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- name = poolStoreString(&dtd.pool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0);
- poolDiscard(&dtd.pool);
- if (!entity) {
- if (dtd.complete || dtd.standalone)
- return XML_ERROR_UNDEFINED_ENTITY;
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- if (entity->open)
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- if (entity->notation)
- return XML_ERROR_BINARY_ENTITY_REF;
- if (entity) {
- if (entity->textPtr) {
- enum XML_Error result;
- OPEN_INTERNAL_ENTITY openEntity;
- if (defaultHandler && !defaultExpandInternalEntities) {
- reportDefault(parser, enc, s, next);
- break;
- }
- entity->open = 1;
- openEntity.next = openInternalEntities;
- openInternalEntities = &openEntity;
- openEntity.entity = entity;
- openEntity.internalEventPtr = 0;
- openEntity.internalEventEndPtr = 0;
- result = doContent(parser,
- tagLevel,
- internalEncoding,
- (char *)entity->textPtr,
- (char *)(entity->textPtr + entity->textLen),
- 0);
- entity->open = 0;
- openInternalEntities = openEntity.next;
- if (result)
- return result;
- }
- else if (externalEntityRefHandler) {
- const XML_Char *context;
- entity->open = 1;
- context = getContext(parser);
- entity->open = 0;
- if (!context)
- return XML_ERROR_NO_MEMORY;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- context,
- entity->base,
- entity->systemId,
- entity->publicId))
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- poolDiscard(&tempPool);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- }
- break;
- }
- case XML_TOK_START_TAG_WITH_ATTS:
- if (!startElementHandler) {
- enum XML_Error result = storeAtts(parser, enc, s, 0, 0);
- if (result)
- return result;
- }
- /* fall through */
- case XML_TOK_START_TAG_NO_ATTS:
- {
- TAG *tag;
- if (freeTagList) {
- tag = freeTagList;
- freeTagList = freeTagList->parent;
- }
- else {
- tag = MALLOC(sizeof(TAG));
- if (!tag)
- return XML_ERROR_NO_MEMORY;
- tag->buf = MALLOC(INIT_TAG_BUF_SIZE);
- if (!tag->buf)
- return XML_ERROR_NO_MEMORY;
- tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE;
- }
- tag->bindings = 0;
- tag->parent = tagStack;
- tagStack = tag;
- tag->name.localPart = 0;
- tag->rawName = s + enc->minBytesPerChar;
- tag->rawNameLength = XmlNameLength(enc, tag->rawName);
- if (nextPtr) {
- /* Need to guarantee that:
- tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)) <= tag->bufEnd - sizeof(XML_Char) */
- if (tag->rawNameLength + (int)(sizeof(XML_Char) - 1) + (int)sizeof(XML_Char) > tag->bufEnd - tag->buf) {
- int bufSize = tag->rawNameLength * 4;
- bufSize = ROUND_UP(bufSize, sizeof(XML_Char));
- tag->buf = REALLOC(tag->buf, bufSize);
- if (!tag->buf)
- return XML_ERROR_NO_MEMORY;
- tag->bufEnd = tag->buf + bufSize;
- }
- memcpy(tag->buf, tag->rawName, tag->rawNameLength);
- tag->rawName = tag->buf;
- }
- ++tagLevel;
- if (startElementHandler) {
- enum XML_Error result;
- XML_Char *toPtr;
- for (;;) {
- const char *rawNameEnd = tag->rawName + tag->rawNameLength;
- const char *fromPtr = tag->rawName;
- int bufSize;
- if (nextPtr)
- toPtr = (XML_Char *)(tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)));
- else
- toPtr = (XML_Char *)tag->buf;
- tag->name.str = toPtr;
- XmlConvert(enc,
- &fromPtr, rawNameEnd,
- (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1);
- if (fromPtr == rawNameEnd)
- break;
- bufSize = (tag->bufEnd - tag->buf) << 1;
- tag->buf = REALLOC(tag->buf, bufSize);
- if (!tag->buf)
- return XML_ERROR_NO_MEMORY;
- tag->bufEnd = tag->buf + bufSize;
- if (nextPtr)
- tag->rawName = tag->buf;
- }
- *toPtr = XML_T('\0');
- result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings));
- if (result)
- return result;
- startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts);
- poolClear(&tempPool);
- }
- else {
- tag->name.str = 0;
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- }
- break;
- }
- case XML_TOK_EMPTY_ELEMENT_WITH_ATTS:
- if (!startElementHandler) {
- enum XML_Error result = storeAtts(parser, enc, s, 0, 0);
- if (result)
- return result;
- }
- /* fall through */
- case XML_TOK_EMPTY_ELEMENT_NO_ATTS:
- if (startElementHandler || endElementHandler) {
- const char *rawName = s + enc->minBytesPerChar;
- enum XML_Error result;
- BINDING *bindings = 0;
- TAG_NAME name;
- name.str = poolStoreString(&tempPool, enc, rawName,
- rawName + XmlNameLength(enc, rawName));
- if (!name.str)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- result = storeAtts(parser, enc, s, &name, &bindings);
- if (result)
- return result;
- poolFinish(&tempPool);
- if (startElementHandler)
- startElementHandler(handlerArg, name.str, (const XML_Char **)atts);
- if (endElementHandler) {
- if (startElementHandler)
- *eventPP = *eventEndPP;
- endElementHandler(handlerArg, name.str);
- }
- poolClear(&tempPool);
- while (bindings) {
- BINDING *b = bindings;
- if (endNamespaceDeclHandler)
- endNamespaceDeclHandler(handlerArg, b->prefix->name);
- bindings = bindings->nextTagBinding;
- b->nextTagBinding = freeBindingList;
- freeBindingList = b;
- b->prefix->binding = b->prevPrefixBinding;
- }
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- if (tagLevel == 0)
- return epilogProcessor(parser, next, end, nextPtr);
- break;
- case XML_TOK_END_TAG:
- if (tagLevel == startTagLevel)
- return XML_ERROR_ASYNC_ENTITY;
- else {
- int len;
- const char *rawName;
- TAG *tag = tagStack;
- tagStack = tag->parent;
- tag->parent = freeTagList;
- freeTagList = tag;
- rawName = s + enc->minBytesPerChar*2;
- len = XmlNameLength(enc, rawName);
- if (len != tag->rawNameLength
- || memcmp(tag->rawName, rawName, len) != 0) {
- *eventPP = rawName;
- return XML_ERROR_TAG_MISMATCH;
- }
- --tagLevel;
- if (endElementHandler && tag->name.str) {
- if (tag->name.localPart) {
- XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen;
- const XML_Char *from = tag->name.localPart;
- while ((*to++ = *from++) != 0)
- ;
- }
- endElementHandler(handlerArg, tag->name.str);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- while (tag->bindings) {
- BINDING *b = tag->bindings;
- if (endNamespaceDeclHandler)
- endNamespaceDeclHandler(handlerArg, b->prefix->name);
- tag->bindings = tag->bindings->nextTagBinding;
- b->nextTagBinding = freeBindingList;
- freeBindingList = b;
- b->prefix->binding = b->prevPrefixBinding;
- }
- if (tagLevel == 0)
- return epilogProcessor(parser, next, end, nextPtr);
- }
- break;
- case XML_TOK_CHAR_REF:
- {
- int n = XmlCharRefNumber(enc, s);
- if (n < 0)
- return XML_ERROR_BAD_CHAR_REF;
- if (characterDataHandler) {
- XML_Char buf[XML_ENCODE_MAX];
- characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf));
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- }
- break;
- case XML_TOK_XML_DECL:
- return XML_ERROR_MISPLACED_XML_PI;
- case XML_TOK_DATA_NEWLINE:
- if (characterDataHandler) {
- XML_Char c = 0xA;
- characterDataHandler(handlerArg, &c, 1);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- case XML_TOK_CDATA_SECT_OPEN:
- {
- enum XML_Error result;
- if (startCdataSectionHandler)
- startCdataSectionHandler(handlerArg);
-#if 0
- /* Suppose you doing a transformation on a document that involves
- changing only the character data. You set up a defaultHandler
- and a characterDataHandler. The defaultHandler simply copies
- characters through. The characterDataHandler does the transformation
- and writes the characters out escaping them as necessary. This case
- will fail to work if we leave out the following two lines (because &
- and < inside CDATA sections will be incorrectly escaped).
-
- However, now we have a start/endCdataSectionHandler, so it seems
- easier to let the user deal with this. */
-
- else if (characterDataHandler)
- characterDataHandler(handlerArg, dataBuf, 0);
-#endif
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- result = doCdataSection(parser, enc, &next, end, nextPtr);
- if (!next) {
- processor = cdataSectionProcessor;
- return result;
- }
- }
- break;
- case XML_TOK_TRAILING_RSQB:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- if (characterDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
- characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
- }
- else
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (XML_Char *)end - (XML_Char *)s);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, end);
- if (startTagLevel == 0) {
- *eventPP = end;
- return XML_ERROR_NO_ELEMENTS;
- }
- if (tagLevel != startTagLevel) {
- *eventPP = end;
- return XML_ERROR_ASYNC_ENTITY;
- }
- return XML_ERROR_NONE;
- case XML_TOK_DATA_CHARS:
- if (characterDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = s;
- characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
- if (s == next)
- break;
- *eventPP = s;
- }
- }
- else
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (XML_Char *)next - (XML_Char *)s);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- case XML_TOK_PI:
- if (!reportProcessingInstruction(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_COMMENT:
- if (!reportComment(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- default:
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- *eventPP = s = next;
- }
- /* not reached */
-}
-
-/* If tagNamePtr is non-null, build a real list of attributes,
-otherwise just check the attributes for well-formedness. */
-
-static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc,
- const char *attStr, TAG_NAME *tagNamePtr,
- BINDING **bindingsPtr)
-{
- ELEMENT_TYPE *elementType = 0;
- int nDefaultAtts = 0;
- const XML_Char **appAtts; /* the attribute list to pass to the application */
- int attIndex = 0;
- int i;
- int n;
- int nPrefixes = 0;
- BINDING *binding;
- const XML_Char *localPart;
-
- /* lookup the element type name */
- if (tagNamePtr) {
- elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str,0);
- if (!elementType) {
- tagNamePtr->str = poolCopyString(&dtd.pool, tagNamePtr->str);
- if (!tagNamePtr->str)
- return XML_ERROR_NO_MEMORY;
- elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, sizeof(ELEMENT_TYPE));
- if (!elementType)
- return XML_ERROR_NO_MEMORY;
- if (ns && !setElementTypePrefix(parser, elementType))
- return XML_ERROR_NO_MEMORY;
- }
- nDefaultAtts = elementType->nDefaultAtts;
- }
- /* get the attributes from the tokenizer */
- n = XmlGetAttributes(enc, attStr, attsSize, atts);
- if (n + nDefaultAtts > attsSize) {
- int oldAttsSize = attsSize;
- attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
- atts = REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE));
- if (!atts)
- return XML_ERROR_NO_MEMORY;
- if (n > oldAttsSize)
- XmlGetAttributes(enc, attStr, n, atts);
- }
- appAtts = (const XML_Char **)atts;
- for (i = 0; i < n; i++) {
- /* add the name and value to the attribute list */
- ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name,
- atts[i].name
- + XmlNameLength(enc, atts[i].name));
- if (!attId)
- return XML_ERROR_NO_MEMORY;
- /* detect duplicate attributes */
- if ((attId->name)[-1]) {
- if (enc == encoding)
- eventPtr = atts[i].name;
- return XML_ERROR_DUPLICATE_ATTRIBUTE;
- }
- (attId->name)[-1] = 1;
- appAtts[attIndex++] = attId->name;
- if (!atts[i].normalized) {
- enum XML_Error result;
- int isCdata = 1;
-
- /* figure out whether declared as other than CDATA */
- if (attId->maybeTokenized) {
- int j;
- for (j = 0; j < nDefaultAtts; j++) {
- if (attId == elementType->defaultAtts[j].id) {
- isCdata = elementType->defaultAtts[j].isCdata;
- break;
- }
- }
- }
-
- /* normalize the attribute value */
- result = storeAttributeValue(parser, enc, isCdata,
- atts[i].valuePtr, atts[i].valueEnd,
- &tempPool);
- if (result)
- return result;
- if (tagNamePtr) {
- appAtts[attIndex] = poolStart(&tempPool);
- poolFinish(&tempPool);
- }
- else
- poolDiscard(&tempPool);
- }
- else if (tagNamePtr) {
- /* the value did not need normalizing */
- appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd);
- if (appAtts[attIndex] == 0)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- }
- /* handle prefixed attribute names */
- if (attId->prefix && tagNamePtr) {
- if (attId->xmlns) {
- /* deal with namespace declarations here */
- if (!addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr))
- return XML_ERROR_NO_MEMORY;
- --attIndex;
- }
- else {
- /* deal with other prefixed names later */
- attIndex++;
- nPrefixes++;
- (attId->name)[-1] = 2;
- }
- }
- else
- attIndex++;
- }
- if (tagNamePtr) {
- int j;
- nSpecifiedAtts = attIndex;
- if (elementType->idAtt && (elementType->idAtt->name)[-1]) {
- for (i = 0; i < attIndex; i += 2)
- if (appAtts[i] == elementType->idAtt->name) {
- idAttIndex = i;
- break;
- }
- }
- else
- idAttIndex = -1;
- /* do attribute defaulting */
- for (j = 0; j < nDefaultAtts; j++) {
- const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + j;
- if (!(da->id->name)[-1] && da->value) {
- if (da->id->prefix) {
- if (da->id->xmlns) {
- if (!addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr))
- return XML_ERROR_NO_MEMORY;
- }
- else {
- (da->id->name)[-1] = 2;
- nPrefixes++;
- appAtts[attIndex++] = da->id->name;
- appAtts[attIndex++] = da->value;
- }
- }
- else {
- (da->id->name)[-1] = 1;
- appAtts[attIndex++] = da->id->name;
- appAtts[attIndex++] = da->value;
- }
- }
- }
- appAtts[attIndex] = 0;
- }
- i = 0;
- if (nPrefixes) {
- /* expand prefixed attribute names */
- for (; i < attIndex; i += 2) {
- if (appAtts[i][-1] == 2) {
- ATTRIBUTE_ID *id;
- ((XML_Char *)(appAtts[i]))[-1] = 0;
- id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, appAtts[i], 0);
- if (id->prefix->binding) {
- int j;
- const BINDING *b = id->prefix->binding;
- const XML_Char *s = appAtts[i];
- for (j = 0; j < b->uriLen; j++) {
- if (!poolAppendChar(&tempPool, b->uri[j]))
- return XML_ERROR_NO_MEMORY;
- }
- while (*s++ != ':')
- ;
- do {
- if (!poolAppendChar(&tempPool, *s))
- return XML_ERROR_NO_MEMORY;
- } while (*s++);
- if (ns_triplets) {
- tempPool.ptr[-1] = namespaceSeparator;
- s = b->prefix->name;
- do {
- if (!poolAppendChar(&tempPool, *s))
- return XML_ERROR_NO_MEMORY;
- } while (*s++);
- }
-
- appAtts[i] = poolStart(&tempPool);
- poolFinish(&tempPool);
- }
- if (!--nPrefixes)
- break;
- }
- else
- ((XML_Char *)(appAtts[i]))[-1] = 0;
- }
- }
- /* clear the flags that say whether attributes were specified */
- for (; i < attIndex; i += 2)
- ((XML_Char *)(appAtts[i]))[-1] = 0;
- if (!tagNamePtr)
- return XML_ERROR_NONE;
- for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding)
- binding->attId->name[-1] = 0;
- /* expand the element type name */
- if (elementType->prefix) {
- binding = elementType->prefix->binding;
- if (!binding)
- return XML_ERROR_NONE;
- localPart = tagNamePtr->str;
- while (*localPart++ != XML_T(':'))
- ;
- }
- else if (dtd.defaultPrefix.binding) {
- binding = dtd.defaultPrefix.binding;
- localPart = tagNamePtr->str;
- }
- else
- return XML_ERROR_NONE;
- tagNamePtr->localPart = localPart;
- tagNamePtr->uriLen = binding->uriLen;
- for (i = 0; localPart[i++];)
- ;
- n = i + binding->uriLen;
- if (n > binding->uriAlloc) {
- TAG *p;
- XML_Char *uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char));
- if (!uri)
- return XML_ERROR_NO_MEMORY;
- binding->uriAlloc = n + EXPAND_SPARE;
- memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char));
- for (p = tagStack; p; p = p->parent)
- if (p->name.str == binding->uri)
- p->name.str = uri;
- FREE(binding->uri);
- binding->uri = uri;
- }
- memcpy(binding->uri + binding->uriLen, localPart, i * sizeof(XML_Char));
- tagNamePtr->str = binding->uri;
- return XML_ERROR_NONE;
-}
-
-static
-int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr)
-{
- BINDING *b;
- int len;
- for (len = 0; uri[len]; len++)
- ;
- if (namespaceSeparator)
- len++;
- if (freeBindingList) {
- b = freeBindingList;
- if (len > b->uriAlloc) {
- b->uri = REALLOC(b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE));
- if (!b->uri)
- return 0;
- b->uriAlloc = len + EXPAND_SPARE;
- }
- freeBindingList = b->nextTagBinding;
- }
- else {
- b = MALLOC(sizeof(BINDING));
- if (!b)
- return 0;
- b->uri = MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE));
- if (!b->uri) {
- FREE(b);
- return 0;
- }
- b->uriAlloc = len + EXPAND_SPARE;
- }
- b->uriLen = len;
- memcpy(b->uri, uri, len * sizeof(XML_Char));
- if (namespaceSeparator)
- b->uri[len - 1] = namespaceSeparator;
- b->prefix = prefix;
- b->attId = attId;
- b->prevPrefixBinding = prefix->binding;
- if (*uri == XML_T('\0') && prefix == &dtd.defaultPrefix)
- prefix->binding = 0;
- else
- prefix->binding = b;
- b->nextTagBinding = *bindingsPtr;
- *bindingsPtr = b;
- if (startNamespaceDeclHandler)
- startNamespaceDeclHandler(handlerArg, prefix->name,
- prefix->binding ? uri : 0);
- return 1;
-}
-
-/* The idea here is to avoid using stack for each CDATA section when
-the whole file is parsed with one call. */
-
-static
-enum XML_Error cdataSectionProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr);
- if (start) {
- processor = contentProcessor;
- return contentProcessor(parser, start, end, endPtr);
- }
- return result;
-}
-
-/* startPtr gets set to non-null is the section is closed, and to null if
-the section is not yet closed. */
-
-static
-enum XML_Error doCdataSection(XML_Parser parser,
- const ENCODING *enc,
- const char **startPtr,
- const char *end,
- const char **nextPtr)
-{
- const char *s = *startPtr;
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- *eventPP = s;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- *eventPP = s;
- *startPtr = 0;
- for (;;) {
- const char *next;
- int tok = XmlCdataSectionTok(enc, s, end, &next);
- *eventEndPP = next;
- switch (tok) {
- case XML_TOK_CDATA_SECT_CLOSE:
- if (endCdataSectionHandler)
- endCdataSectionHandler(handlerArg);
-#if 0
- /* see comment under XML_TOK_CDATA_SECT_OPEN */
- else if (characterDataHandler)
- characterDataHandler(handlerArg, dataBuf, 0);
-#endif
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- *startPtr = next;
- return XML_ERROR_NONE;
- case XML_TOK_DATA_NEWLINE:
- if (characterDataHandler) {
- XML_Char c = 0xA;
- characterDataHandler(handlerArg, &c, 1);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- case XML_TOK_DATA_CHARS:
- if (characterDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = next;
- characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
- if (s == next)
- break;
- *eventPP = s;
- }
- }
- else
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (XML_Char *)next - (XML_Char *)s);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_PARTIAL:
- case XML_TOK_NONE:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_CDATA_SECTION;
- default:
- *eventPP = next;
- return XML_ERROR_UNEXPECTED_STATE;
- }
- *eventPP = s = next;
- }
- /* not reached */
-}
-
-#ifdef XML_DTD
-
-/* The idea here is to avoid using stack for each IGNORE section when
-the whole file is parsed with one call. */
-
-static
-enum XML_Error ignoreSectionProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, endPtr);
- if (start) {
- processor = prologProcessor;
- return prologProcessor(parser, start, end, endPtr);
- }
- return result;
-}
-
-/* startPtr gets set to non-null is the section is closed, and to null if
-the section is not yet closed. */
-
-static
-enum XML_Error doIgnoreSection(XML_Parser parser,
- const ENCODING *enc,
- const char **startPtr,
- const char *end,
- const char **nextPtr)
-{
- const char *next;
- int tok;
- const char *s = *startPtr;
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- *eventPP = s;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- *eventPP = s;
- *startPtr = 0;
- tok = XmlIgnoreSectionTok(enc, s, end, &next);
- *eventEndPP = next;
- switch (tok) {
- case XML_TOK_IGNORE_SECT:
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- *startPtr = next;
- return XML_ERROR_NONE;
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_PARTIAL:
- case XML_TOK_NONE:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */
- default:
- *eventPP = next;
- return XML_ERROR_UNEXPECTED_STATE;
- }
- /* not reached */
-}
-
-#endif /* XML_DTD */
-
-static enum XML_Error
-initializeEncoding(XML_Parser parser)
-{
- const char *s;
-#ifdef XML_UNICODE
- char encodingBuf[128];
- if (!protocolEncodingName)
- s = 0;
- else {
- int i;
- for (i = 0; protocolEncodingName[i]; i++) {
- if (i == sizeof(encodingBuf) - 1
- || (protocolEncodingName[i] & ~0x7f) != 0) {
- encodingBuf[0] = '\0';
- break;
- }
- encodingBuf[i] = (char)protocolEncodingName[i];
- }
- encodingBuf[i] = '\0';
- s = encodingBuf;
- }
-#else
- s = protocolEncodingName;
-#endif
- if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s))
- return XML_ERROR_NONE;
- return handleUnknownEncoding(parser, protocolEncodingName);
-}
-
-static enum XML_Error
-processXmlDecl(XML_Parser parser, int isGeneralTextEntity,
- const char *s, const char *next)
-{
- const char *encodingName = 0;
- const char *storedEncName = 0;
- const ENCODING *newEncoding = 0;
- const char *version = 0;
- const char *versionend;
- const char *storedversion = 0;
- int standalone = -1;
- if (!(ns
- ? XmlParseXmlDeclNS
- : XmlParseXmlDecl)(isGeneralTextEntity,
- encoding,
- s,
- next,
- &eventPtr,
- &version,
- &versionend,
- &encodingName,
- &newEncoding,
- &standalone))
- return XML_ERROR_SYNTAX;
- if (!isGeneralTextEntity && standalone == 1) {
- dtd.standalone = 1;
-#ifdef XML_DTD
- if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
- paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
-#endif /* XML_DTD */
- }
- if (xmlDeclHandler) {
- if (encodingName) {
- storedEncName = poolStoreString(&temp2Pool,
- encoding,
- encodingName,
- encodingName
- + XmlNameLength(encoding, encodingName));
- if (! storedEncName)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&temp2Pool);
- }
- if (version) {
- storedversion = poolStoreString(&temp2Pool,
- encoding,
- version,
- versionend - encoding->minBytesPerChar);
- if (! storedversion)
- return XML_ERROR_NO_MEMORY;
- }
- xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone);
- }
- else if (defaultHandler)
- reportDefault(parser, encoding, s, next);
- if (!protocolEncodingName) {
- if (newEncoding) {
- if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) {
- eventPtr = encodingName;
- return XML_ERROR_INCORRECT_ENCODING;
- }
- encoding = newEncoding;
- }
- else if (encodingName) {
- enum XML_Error result;
- if (! storedEncName) {
- storedEncName = poolStoreString(&temp2Pool,
- encoding,
- encodingName,
- encodingName
- + XmlNameLength(encoding, encodingName));
- if (! storedEncName)
- return XML_ERROR_NO_MEMORY;
- }
- result = handleUnknownEncoding(parser, storedEncName);
- poolClear(&tempPool);
- if (result == XML_ERROR_UNKNOWN_ENCODING)
- eventPtr = encodingName;
- return result;
- }
- }
-
- if (storedEncName || storedversion)
- poolClear(&temp2Pool);
-
- return XML_ERROR_NONE;
-}
-
-static enum XML_Error
-handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName)
-{
- if (unknownEncodingHandler) {
- XML_Encoding info;
- int i;
- for (i = 0; i < 256; i++)
- info.map[i] = -1;
- info.convert = 0;
- info.data = 0;
- info.release = 0;
- if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) {
- ENCODING *enc;
- unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding());
- if (!unknownEncodingMem) {
- if (info.release)
- info.release(info.data);
- return XML_ERROR_NO_MEMORY;
- }
- enc = (ns
- ? XmlInitUnknownEncodingNS
- : XmlInitUnknownEncoding)(unknownEncodingMem,
- info.map,
- info.convert,
- info.data);
- if (enc) {
- unknownEncodingData = info.data;
- unknownEncodingRelease = info.release;
- encoding = enc;
- return XML_ERROR_NONE;
- }
- }
- if (info.release)
- info.release(info.data);
- }
- return XML_ERROR_UNKNOWN_ENCODING;
-}
-
-static enum XML_Error
-prologInitProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- enum XML_Error result = initializeEncoding(parser);
- if (result != XML_ERROR_NONE)
- return result;
- processor = prologProcessor;
- return prologProcessor(parser, s, end, nextPtr);
-}
-
-static enum XML_Error
-prologProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- const char *next;
- int tok = XmlPrologTok(encoding, s, end, &next);
- return doProlog(parser, encoding, s, end, tok, next, nextPtr);
-}
-
-static enum XML_Error
-doProlog(XML_Parser parser,
- const ENCODING *enc,
- const char *s,
- const char *end,
- int tok,
- const char *next,
- const char **nextPtr)
-{
-#ifdef XML_DTD
- static const XML_Char externalSubsetName[] = { '#' , '\0' };
-#endif /* XML_DTD */
-
- const char **eventPP;
- const char **eventEndPP;
- enum XML_Content_Quant quant;
-
- if (enc == encoding) {
- eventPP = &eventPtr;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- for (;;) {
- int role;
- *eventPP = s;
- *eventEndPP = next;
- if (tok <= 0) {
- if (nextPtr != 0 && tok != XML_TOK_INVALID) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- switch (tok) {
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_NONE:
-#ifdef XML_DTD
- if (enc != encoding)
- return XML_ERROR_NONE;
- if (parentParser) {
- if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc)
- == XML_ROLE_ERROR)
- return XML_ERROR_SYNTAX;
- hadExternalDoctype = 0;
- return XML_ERROR_NONE;
- }
-#endif /* XML_DTD */
- return XML_ERROR_NO_ELEMENTS;
- default:
- tok = -tok;
- next = end;
- break;
- }
- }
- role = XmlTokenRole(&prologState, tok, s, next, enc);
- switch (role) {
- case XML_ROLE_XML_DECL:
- {
- enum XML_Error result = processXmlDecl(parser, 0, s, next);
- if (result != XML_ERROR_NONE)
- return result;
- enc = encoding;
- }
- break;
- case XML_ROLE_DOCTYPE_NAME:
- if (startDoctypeDeclHandler) {
- doctypeName = poolStoreString(&tempPool, enc, s, next);
- if (! doctypeName)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- doctypeSysid = 0;
- doctypePubid = 0;
- }
- break;
- case XML_ROLE_DOCTYPE_INTERNAL_SUBSET:
- if (startDoctypeDeclHandler) {
- startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid,
- doctypePubid, 1);
- doctypeName = 0;
- poolClear(&tempPool);
- }
- break;
-#ifdef XML_DTD
- case XML_ROLE_TEXT_DECL:
- {
- enum XML_Error result = processXmlDecl(parser, 1, s, next);
- if (result != XML_ERROR_NONE)
- return result;
- enc = encoding;
- }
- break;
-#endif /* XML_DTD */
- case XML_ROLE_DOCTYPE_PUBLIC_ID:
- if (startDoctypeDeclHandler) {
- doctypePubid = poolStoreString(&tempPool, enc, s + 1, next - 1);
- if (! doctypePubid)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- }
-#ifdef XML_DTD
- declEntity = (ENTITY *)lookup(&dtd.paramEntities,
- externalSubsetName,
- sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
-#endif /* XML_DTD */
- /* fall through */
- case XML_ROLE_ENTITY_PUBLIC_ID:
- if (!XmlIsPublicId(enc, s, next, eventPP))
- return XML_ERROR_SYNTAX;
- if (declEntity) {
- XML_Char *tem = poolStoreString(&dtd.pool,
- enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!tem)
- return XML_ERROR_NO_MEMORY;
- normalizePublicId(tem);
- declEntity->publicId = tem;
- poolFinish(&dtd.pool);
- }
- break;
- case XML_ROLE_DOCTYPE_CLOSE:
- if (doctypeName) {
- startDoctypeDeclHandler(handlerArg, doctypeName,
- doctypeSysid, doctypePubid, 0);
- poolClear(&tempPool);
- }
- if (dtd.complete && hadExternalDoctype) {
- dtd.complete = 0;
-#ifdef XML_DTD
- if (paramEntityParsing && externalEntityRefHandler) {
- ENTITY *entity = (ENTITY *)lookup(&dtd.paramEntities,
- externalSubsetName,
- 0);
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- 0,
- entity->base,
- entity->systemId,
- entity->publicId))
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- }
-#endif /* XML_DTD */
- if (!dtd.complete
- && !dtd.standalone
- && notStandaloneHandler
- && !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
- }
- if (endDoctypeDeclHandler)
- endDoctypeDeclHandler(handlerArg);
- break;
- case XML_ROLE_INSTANCE_START:
- processor = contentProcessor;
- return contentProcessor(parser, s, end, nextPtr);
- case XML_ROLE_ATTLIST_ELEMENT_NAME:
- declElementType = getElementType(parser, enc, s, next);
- if (!declElementType)
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_ROLE_ATTRIBUTE_NAME:
- declAttributeId = getAttributeId(parser, enc, s, next);
- if (!declAttributeId)
- return XML_ERROR_NO_MEMORY;
- declAttributeIsCdata = 0;
- declAttributeType = 0;
- declAttributeIsId = 0;
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_CDATA:
- declAttributeIsCdata = 1;
- declAttributeType = "CDATA";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_ID:
- declAttributeIsId = 1;
- declAttributeType = "ID";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_IDREF:
- declAttributeType = "IDREF";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_IDREFS:
- declAttributeType = "IDREFS";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_ENTITY:
- declAttributeType = "ENTITY";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES:
- declAttributeType = "ENTITIES";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN:
- declAttributeType = "NMTOKEN";
- break;
- case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS:
- declAttributeType = "NMTOKENS";
- break;
-
- case XML_ROLE_ATTRIBUTE_ENUM_VALUE:
- case XML_ROLE_ATTRIBUTE_NOTATION_VALUE:
- if (attlistDeclHandler)
- {
- char *prefix;
- if (declAttributeType) {
- prefix = "|";
- }
- else {
- prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE
- ? "NOTATION("
- : "(");
- }
- if (! poolAppendString(&tempPool, prefix))
- return XML_ERROR_NO_MEMORY;
- if (! poolAppend(&tempPool, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- declAttributeType = tempPool.start;
- }
- break;
- case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE:
- case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE:
- if (dtd.complete
- && !defineAttribute(declElementType, declAttributeId,
- declAttributeIsCdata, declAttributeIsId, 0,
- parser))
- return XML_ERROR_NO_MEMORY;
- if (attlistDeclHandler && declAttributeType) {
- if (*declAttributeType == '('
- || (*declAttributeType == 'N' && declAttributeType[1] == 'O')) {
- /* Enumerated or Notation type */
- if (! poolAppendChar(&tempPool, ')')
- || ! poolAppendChar(&tempPool, '\0'))
- return XML_ERROR_NO_MEMORY;
- declAttributeType = tempPool.start;
- poolFinish(&tempPool);
- }
- *eventEndPP = s;
- attlistDeclHandler(handlerArg, declElementType->name,
- declAttributeId->name, declAttributeType,
- 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE);
- poolClear(&tempPool);
- }
- break;
- case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE:
- case XML_ROLE_FIXED_ATTRIBUTE_VALUE:
- {
- const XML_Char *attVal;
- enum XML_Error result
- = storeAttributeValue(parser, enc, declAttributeIsCdata,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar,
- &dtd.pool);
- if (result)
- return result;
- attVal = poolStart(&dtd.pool);
- poolFinish(&dtd.pool);
- if (dtd.complete
- /* ID attributes aren't allowed to have a default */
- && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, 0, attVal, parser))
- return XML_ERROR_NO_MEMORY;
- if (attlistDeclHandler && declAttributeType) {
- if (*declAttributeType == '('
- || (*declAttributeType == 'N' && declAttributeType[1] == 'O')) {
- /* Enumerated or Notation type */
- if (! poolAppendChar(&tempPool, ')')
- || ! poolAppendChar(&tempPool, '\0'))
- return XML_ERROR_NO_MEMORY;
- declAttributeType = tempPool.start;
- poolFinish(&tempPool);
- }
- *eventEndPP = s;
- attlistDeclHandler(handlerArg, declElementType->name,
- declAttributeId->name, declAttributeType,
- attVal,
- role == XML_ROLE_FIXED_ATTRIBUTE_VALUE);
- poolClear(&tempPool);
- }
- break;
- }
- case XML_ROLE_ENTITY_VALUE:
- {
- enum XML_Error result = storeEntityValue(parser, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (declEntity) {
- declEntity->textPtr = poolStart(&dtd.pool);
- declEntity->textLen = poolLength(&dtd.pool);
- poolFinish(&dtd.pool);
- if (entityDeclHandler) {
- *eventEndPP = s;
- entityDeclHandler(handlerArg,
- declEntity->name,
- declEntity->is_param,
- declEntity->textPtr,
- declEntity->textLen,
- curBase, 0, 0, 0);
- }
- }
- else
- poolDiscard(&dtd.pool);
- if (result != XML_ERROR_NONE)
- return result;
- }
- break;
- case XML_ROLE_DOCTYPE_SYSTEM_ID:
- if (startDoctypeDeclHandler) {
- doctypeSysid = poolStoreString(&tempPool, enc, s + 1, next - 1);
- if (! doctypeSysid)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- }
- if (!dtd.standalone
-#ifdef XML_DTD
- && !paramEntityParsing
-#endif /* XML_DTD */
- && notStandaloneHandler
- && !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
- hadExternalDoctype = 1;
-#ifndef XML_DTD
- break;
-#else /* XML_DTD */
- if (!declEntity) {
- declEntity = (ENTITY *)lookup(&dtd.paramEntities,
- externalSubsetName,
- sizeof(ENTITY));
- declEntity->publicId = 0;
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
- }
- /* fall through */
-#endif /* XML_DTD */
- case XML_ROLE_ENTITY_SYSTEM_ID:
- if (declEntity) {
- declEntity->systemId = poolStoreString(&dtd.pool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!declEntity->systemId)
- return XML_ERROR_NO_MEMORY;
- declEntity->base = curBase;
- poolFinish(&dtd.pool);
- }
- break;
- case XML_ROLE_ENTITY_COMPLETE:
- if (declEntity && entityDeclHandler) {
- *eventEndPP = s;
- entityDeclHandler(handlerArg,
- declEntity->name,
- 0,0,0,
- declEntity->base,
- declEntity->systemId,
- declEntity->publicId,
- 0);
- }
- break;
- case XML_ROLE_ENTITY_NOTATION_NAME:
- if (declEntity) {
- declEntity->notation = poolStoreString(&dtd.pool, enc, s, next);
- if (!declEntity->notation)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&dtd.pool);
- if (unparsedEntityDeclHandler) {
- *eventEndPP = s;
- unparsedEntityDeclHandler(handlerArg,
- declEntity->name,
- declEntity->base,
- declEntity->systemId,
- declEntity->publicId,
- declEntity->notation);
- }
- else if (entityDeclHandler) {
- *eventEndPP = s;
- entityDeclHandler(handlerArg,
- declEntity->name,
- 0,0,0,
- declEntity->base,
- declEntity->systemId,
- declEntity->publicId,
- declEntity->notation);
- }
- }
- break;
- case XML_ROLE_GENERAL_ENTITY_NAME:
- {
- const XML_Char *name;
- if (XmlPredefinedEntityName(enc, s, next)) {
- declEntity = 0;
- break;
- }
- name = poolStoreString(&dtd.pool, enc, s, next);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- if (dtd.complete) {
- declEntity = (ENTITY *)lookup(&dtd.generalEntities, name, sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
- if (declEntity->name != name) {
- poolDiscard(&dtd.pool);
- declEntity = 0;
- }
- else {
- poolFinish(&dtd.pool);
- declEntity->publicId = 0;
- declEntity->is_param = 0;
- }
- }
- else {
- poolDiscard(&dtd.pool);
- declEntity = 0;
- }
- }
- break;
- case XML_ROLE_PARAM_ENTITY_NAME:
-#ifdef XML_DTD
- if (dtd.complete) {
- const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- declEntity = (ENTITY *)lookup(&dtd.paramEntities,
- name, sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
- if (declEntity->name != name) {
- poolDiscard(&dtd.pool);
- declEntity = 0;
- }
- else {
- poolFinish(&dtd.pool);
- declEntity->publicId = 0;
- declEntity->is_param = 1;
- }
- }
-#else /* not XML_DTD */
- declEntity = 0;
-#endif /* not XML_DTD */
- break;
- case XML_ROLE_NOTATION_NAME:
- declNotationPublicId = 0;
- declNotationName = 0;
- if (notationDeclHandler) {
- declNotationName = poolStoreString(&tempPool, enc, s, next);
- if (!declNotationName)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- }
- break;
- case XML_ROLE_NOTATION_PUBLIC_ID:
- if (!XmlIsPublicId(enc, s, next, eventPP))
- return XML_ERROR_SYNTAX;
- if (declNotationName) {
- XML_Char *tem = poolStoreString(&tempPool,
- enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!tem)
- return XML_ERROR_NO_MEMORY;
- normalizePublicId(tem);
- declNotationPublicId = tem;
- poolFinish(&tempPool);
- }
- break;
- case XML_ROLE_NOTATION_SYSTEM_ID:
- if (declNotationName && notationDeclHandler) {
- const XML_Char *systemId
- = poolStoreString(&tempPool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!systemId)
- return XML_ERROR_NO_MEMORY;
- *eventEndPP = s;
- notationDeclHandler(handlerArg,
- declNotationName,
- curBase,
- systemId,
- declNotationPublicId);
- }
- poolClear(&tempPool);
- break;
- case XML_ROLE_NOTATION_NO_SYSTEM_ID:
- if (declNotationPublicId && notationDeclHandler) {
- *eventEndPP = s;
- notationDeclHandler(handlerArg,
- declNotationName,
- curBase,
- 0,
- declNotationPublicId);
- }
- poolClear(&tempPool);
- break;
- case XML_ROLE_ERROR:
- switch (tok) {
- case XML_TOK_PARAM_ENTITY_REF:
- return XML_ERROR_PARAM_ENTITY_REF;
- case XML_TOK_XML_DECL:
- return XML_ERROR_MISPLACED_XML_PI;
- default:
- return XML_ERROR_SYNTAX;
- }
-#ifdef XML_DTD
- case XML_ROLE_IGNORE_SECT:
- {
- enum XML_Error result;
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- result = doIgnoreSection(parser, enc, &next, end, nextPtr);
- if (!next) {
- processor = ignoreSectionProcessor;
- return result;
- }
- }
- break;
-#endif /* XML_DTD */
- case XML_ROLE_GROUP_OPEN:
- if (prologState.level >= groupSize) {
- if (groupSize) {
- groupConnector = REALLOC(groupConnector, groupSize *= 2);
- if (dtd.scaffIndex)
- dtd.scaffIndex = REALLOC(dtd.scaffIndex, groupSize * sizeof(int));
- }
- else
- groupConnector = MALLOC(groupSize = 32);
- if (!groupConnector)
- return XML_ERROR_NO_MEMORY;
- }
- groupConnector[prologState.level] = 0;
- if (dtd.in_eldecl) {
- int myindex = nextScaffoldPart(parser);
- if (myindex < 0)
- return XML_ERROR_NO_MEMORY;
- dtd.scaffIndex[dtd.scaffLevel] = myindex;
- dtd.scaffLevel++;
- dtd.scaffold[myindex].type = XML_CTYPE_SEQ;
- }
- break;
- case XML_ROLE_GROUP_SEQUENCE:
- if (groupConnector[prologState.level] == '|')
- return XML_ERROR_SYNTAX;
- groupConnector[prologState.level] = ',';
- break;
- case XML_ROLE_GROUP_CHOICE:
- if (groupConnector[prologState.level] == ',')
- return XML_ERROR_SYNTAX;
- if (dtd.in_eldecl
- && ! groupConnector[prologState.level]
- && dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type != XML_CTYPE_MIXED
- ) {
- dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type = XML_CTYPE_CHOICE;
- }
- groupConnector[prologState.level] = '|';
- break;
- case XML_ROLE_PARAM_ENTITY_REF:
-#ifdef XML_DTD
- case XML_ROLE_INNER_PARAM_ENTITY_REF:
- if (paramEntityParsing
- && (dtd.complete || role == XML_ROLE_INNER_PARAM_ENTITY_REF)) {
- const XML_Char *name;
- ENTITY *entity;
- name = poolStoreString(&dtd.pool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0);
- poolDiscard(&dtd.pool);
- if (!entity) {
- /* FIXME what to do if !dtd.complete? */
- return XML_ERROR_UNDEFINED_ENTITY;
- }
- if (entity->open)
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- if (entity->textPtr) {
- enum XML_Error result;
- result = processInternalParamEntity(parser, entity);
- if (result != XML_ERROR_NONE)
- return result;
- break;
- }
- if (role == XML_ROLE_INNER_PARAM_ENTITY_REF)
- return XML_ERROR_PARAM_ENTITY_REF;
- if (externalEntityRefHandler) {
- dtd.complete = 0;
- entity->open = 1;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- 0,
- entity->base,
- entity->systemId,
- entity->publicId)) {
- entity->open = 0;
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- }
- entity->open = 0;
- if (dtd.complete)
- break;
- }
- }
-#endif /* XML_DTD */
- if (!dtd.standalone
- && notStandaloneHandler
- && !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
- dtd.complete = 0;
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
-
- /* Element declaration stuff */
-
- case XML_ROLE_ELEMENT_NAME:
- if (elementDeclHandler) {
- declElementType = getElementType(parser, enc, s, next);
- if (! declElementType)
- return XML_ERROR_NO_MEMORY;
- dtd.scaffLevel = 0;
- dtd.scaffCount = 0;
- dtd.in_eldecl = 1;
- }
- break;
-
- case XML_ROLE_CONTENT_ANY:
- case XML_ROLE_CONTENT_EMPTY:
- if (dtd.in_eldecl) {
- if (elementDeclHandler) {
- XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content));
- if (! content)
- return XML_ERROR_NO_MEMORY;
- content->quant = XML_CQUANT_NONE;
- content->name = 0;
- content->numchildren = 0;
- content->children = 0;
- content->type = ((role == XML_ROLE_CONTENT_ANY) ?
- XML_CTYPE_ANY :
- XML_CTYPE_EMPTY);
- *eventEndPP = s;
- elementDeclHandler(handlerArg, declElementType->name, content);
- }
- dtd.in_eldecl = 0;
- }
- break;
-
- case XML_ROLE_CONTENT_PCDATA:
- if (dtd.in_eldecl) {
- dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type = XML_CTYPE_MIXED;
- }
- break;
-
- case XML_ROLE_CONTENT_ELEMENT:
- quant = XML_CQUANT_NONE;
- goto elementContent;
- case XML_ROLE_CONTENT_ELEMENT_OPT:
- quant = XML_CQUANT_OPT;
- goto elementContent;
- case XML_ROLE_CONTENT_ELEMENT_REP:
- quant = XML_CQUANT_REP;
- goto elementContent;
- case XML_ROLE_CONTENT_ELEMENT_PLUS:
- quant = XML_CQUANT_PLUS;
- elementContent:
- if (dtd.in_eldecl)
- {
- ELEMENT_TYPE *el;
- const char *nxt = quant == XML_CQUANT_NONE ? next : next - 1;
- int myindex = nextScaffoldPart(parser);
- if (myindex < 0)
- return XML_ERROR_NO_MEMORY;
- dtd.scaffold[myindex].type = XML_CTYPE_NAME;
- dtd.scaffold[myindex].quant = quant;
- el = getElementType(parser, enc, s, nxt);
- if (! el)
- return XML_ERROR_NO_MEMORY;
- dtd.scaffold[myindex].name = el->name;
- dtd.contentStringLen += nxt - s + 1;
- }
- break;
-
- case XML_ROLE_GROUP_CLOSE:
- quant = XML_CQUANT_NONE;
- goto closeGroup;
- case XML_ROLE_GROUP_CLOSE_OPT:
- quant = XML_CQUANT_OPT;
- goto closeGroup;
- case XML_ROLE_GROUP_CLOSE_REP:
- quant = XML_CQUANT_REP;
- goto closeGroup;
- case XML_ROLE_GROUP_CLOSE_PLUS:
- quant = XML_CQUANT_PLUS;
- closeGroup:
- if (dtd.in_eldecl) {
- dtd.scaffLevel--;
- dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel]].quant = quant;
- if (dtd.scaffLevel == 0) {
- if (elementDeclHandler) {
- XML_Content *model = build_model(parser);
- if (! model)
- return XML_ERROR_NO_MEMORY;
- *eventEndPP = s;
- elementDeclHandler(handlerArg, declElementType->name, model);
- }
- dtd.in_eldecl = 0;
- dtd.contentStringLen = 0;
- }
- }
- break;
- /* End element declaration stuff */
-
- case XML_ROLE_NONE:
- switch (tok) {
- case XML_TOK_PI:
- if (!reportProcessingInstruction(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_COMMENT:
- if (!reportComment(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- }
- break;
- }
- if (defaultHandler) {
- switch (tok) {
- case XML_TOK_PI:
- case XML_TOK_COMMENT:
- case XML_TOK_BOM:
- case XML_TOK_XML_DECL:
-#ifdef XML_DTD
- case XML_TOK_IGNORE_SECT:
-#endif /* XML_DTD */
- case XML_TOK_PARAM_ENTITY_REF:
- break;
- default:
-#ifdef XML_DTD
- if (role != XML_ROLE_IGNORE_SECT)
-#endif /* XML_DTD */
- reportDefault(parser, enc, s, next);
- }
- }
- s = next;
- tok = XmlPrologTok(enc, s, end, &next);
- }
- /* not reached */
-}
-
-static
-enum XML_Error epilogProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- processor = epilogProcessor;
- eventPtr = s;
- for (;;) {
- const char *next;
- int tok = XmlPrologTok(encoding, s, end, &next);
- eventEndPtr = next;
- switch (tok) {
- case -XML_TOK_PROLOG_S:
- if (defaultHandler) {
- eventEndPtr = end;
- reportDefault(parser, encoding, s, end);
- }
- /* fall through */
- case XML_TOK_NONE:
- if (nextPtr)
- *nextPtr = end;
- return XML_ERROR_NONE;
- case XML_TOK_PROLOG_S:
- if (defaultHandler)
- reportDefault(parser, encoding, s, next);
- break;
- case XML_TOK_PI:
- if (!reportProcessingInstruction(parser, encoding, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_COMMENT:
- if (!reportComment(parser, encoding, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_INVALID:
- eventPtr = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (nextPtr) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- default:
- return XML_ERROR_JUNK_AFTER_DOC_ELEMENT;
- }
- eventPtr = s = next;
- }
-}
-
-#ifdef XML_DTD
-
-static enum XML_Error
-processInternalParamEntity(XML_Parser parser, ENTITY *entity)
-{
- const char *s, *end, *next;
- int tok;
- enum XML_Error result;
- OPEN_INTERNAL_ENTITY openEntity;
- entity->open = 1;
- openEntity.next = openInternalEntities;
- openInternalEntities = &openEntity;
- openEntity.entity = entity;
- openEntity.internalEventPtr = 0;
- openEntity.internalEventEndPtr = 0;
- s = (char *)entity->textPtr;
- end = (char *)(entity->textPtr + entity->textLen);
- tok = XmlPrologTok(internalEncoding, s, end, &next);
- result = doProlog(parser, internalEncoding, s, end, tok, next, 0);
- entity->open = 0;
- openInternalEntities = openEntity.next;
- return result;
-}
-
-#endif /* XML_DTD */
-
-static
-enum XML_Error errorProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- return errorCode;
-}
-
-static enum XML_Error
-storeAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata,
- const char *ptr, const char *end,
- STRING_POOL *pool)
-{
- enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool);
- if (result)
- return result;
- if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20)
- poolChop(pool);
- if (!poolAppendChar(pool, XML_T('\0')))
- return XML_ERROR_NO_MEMORY;
- return XML_ERROR_NONE;
-}
-
-static enum XML_Error
-appendAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata,
- const char *ptr, const char *end,
- STRING_POOL *pool)
-{
- for (;;) {
- const char *next;
- int tok = XmlAttributeValueTok(enc, ptr, end, &next);
- switch (tok) {
- case XML_TOK_NONE:
- return XML_ERROR_NONE;
- case XML_TOK_INVALID:
- if (enc == encoding)
- eventPtr = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_CHAR_REF:
- {
- XML_Char buf[XML_ENCODE_MAX];
- int i;
- int n = XmlCharRefNumber(enc, ptr);
- if (n < 0) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_BAD_CHAR_REF;
- }
- if (!isCdata
- && n == 0x20 /* space */
- && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
- break;
- n = XmlEncode(n, (ICHAR *)buf);
- if (!n) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_BAD_CHAR_REF;
- }
- for (i = 0; i < n; i++) {
- if (!poolAppendChar(pool, buf[i]))
- return XML_ERROR_NO_MEMORY;
- }
- }
- break;
- case XML_TOK_DATA_CHARS:
- if (!poolAppend(pool, enc, ptr, next))
- return XML_ERROR_NO_MEMORY;
- break;
- break;
- case XML_TOK_TRAILING_CR:
- next = ptr + enc->minBytesPerChar;
- /* fall through */
- case XML_TOK_ATTRIBUTE_VALUE_S:
- case XML_TOK_DATA_NEWLINE:
- if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
- break;
- if (!poolAppendChar(pool, 0x20))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_ENTITY_REF:
- {
- const XML_Char *name;
- ENTITY *entity;
- XML_Char ch = XmlPredefinedEntityName(enc,
- ptr + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (ch) {
- if (!poolAppendChar(pool, ch))
- return XML_ERROR_NO_MEMORY;
- break;
- }
- name = poolStoreString(&temp2Pool, enc,
- ptr + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0);
- poolDiscard(&temp2Pool);
- if (!entity) {
- if (dtd.complete) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_UNDEFINED_ENTITY;
- }
- }
- else if (entity->open) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- }
- else if (entity->notation) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_BINARY_ENTITY_REF;
- }
- else if (!entity->textPtr) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF;
- }
- else {
- enum XML_Error result;
- const XML_Char *textEnd = entity->textPtr + entity->textLen;
- entity->open = 1;
- result = appendAttributeValue(parser, internalEncoding, isCdata, (char *)entity->textPtr, (char *)textEnd, pool);
- entity->open = 0;
- if (result)
- return result;
- }
- }
- break;
- default:
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_UNEXPECTED_STATE;
- }
- ptr = next;
- }
- /* not reached */
-}
-
-static
-enum XML_Error storeEntityValue(XML_Parser parser,
- const ENCODING *enc,
- const char *entityTextPtr,
- const char *entityTextEnd)
-{
- STRING_POOL *pool = &(dtd.pool);
- for (;;) {
- const char *next;
- int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next);
- switch (tok) {
- case XML_TOK_PARAM_ENTITY_REF:
-#ifdef XML_DTD
- if (parentParser || enc != encoding) {
- enum XML_Error result;
- const XML_Char *name;
- ENTITY *entity;
- name = poolStoreString(&tempPool, enc,
- entityTextPtr + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0);
- poolDiscard(&tempPool);
- if (!entity) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_UNDEFINED_ENTITY;
- }
- if (entity->open) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- }
- if (entity->systemId) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_PARAM_ENTITY_REF;
- }
- entity->open = 1;
- result = storeEntityValue(parser,
- internalEncoding,
- (char *)entity->textPtr,
- (char *)(entity->textPtr + entity->textLen));
- entity->open = 0;
- if (result)
- return result;
- break;
- }
-#endif /* XML_DTD */
- eventPtr = entityTextPtr;
- return XML_ERROR_SYNTAX;
- case XML_TOK_NONE:
- return XML_ERROR_NONE;
- case XML_TOK_ENTITY_REF:
- case XML_TOK_DATA_CHARS:
- if (!poolAppend(pool, enc, entityTextPtr, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_TRAILING_CR:
- next = entityTextPtr + enc->minBytesPerChar;
- /* fall through */
- case XML_TOK_DATA_NEWLINE:
- if (pool->end == pool->ptr && !poolGrow(pool))
- return XML_ERROR_NO_MEMORY;
- *(pool->ptr)++ = 0xA;
- break;
- case XML_TOK_CHAR_REF:
- {
- XML_Char buf[XML_ENCODE_MAX];
- int i;
- int n = XmlCharRefNumber(enc, entityTextPtr);
- if (n < 0) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_BAD_CHAR_REF;
- }
- n = XmlEncode(n, (ICHAR *)buf);
- if (!n) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_BAD_CHAR_REF;
- }
- for (i = 0; i < n; i++) {
- if (pool->end == pool->ptr && !poolGrow(pool))
- return XML_ERROR_NO_MEMORY;
- *(pool->ptr)++ = buf[i];
- }
- }
- break;
- case XML_TOK_PARTIAL:
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_INVALID:
- if (enc == encoding)
- eventPtr = next;
- return XML_ERROR_INVALID_TOKEN;
- default:
- if (enc == encoding)
- eventPtr = entityTextPtr;
- return XML_ERROR_UNEXPECTED_STATE;
- }
- entityTextPtr = next;
- }
- /* not reached */
-}
-
-static void
-normalizeLines(XML_Char *s)
-{
- XML_Char *p;
- for (;; s++) {
- if (*s == XML_T('\0'))
- return;
- if (*s == 0xD)
- break;
- }
- p = s;
- do {
- if (*s == 0xD) {
- *p++ = 0xA;
- if (*++s == 0xA)
- s++;
- }
- else
- *p++ = *s++;
- } while (*s);
- *p = XML_T('\0');
-}
-
-static int
-reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
-{
- const XML_Char *target;
- XML_Char *data;
- const char *tem;
- if (!processingInstructionHandler) {
- if (defaultHandler)
- reportDefault(parser, enc, start, end);
- return 1;
- }
- start += enc->minBytesPerChar * 2;
- tem = start + XmlNameLength(enc, start);
- target = poolStoreString(&tempPool, enc, start, tem);
- if (!target)
- return 0;
- poolFinish(&tempPool);
- data = poolStoreString(&tempPool, enc,
- XmlSkipS(enc, tem),
- end - enc->minBytesPerChar*2);
- if (!data)
- return 0;
- normalizeLines(data);
- processingInstructionHandler(handlerArg, target, data);
- poolClear(&tempPool);
- return 1;
-}
-
-static int
-reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
-{
- XML_Char *data;
- if (!commentHandler) {
- if (defaultHandler)
- reportDefault(parser, enc, start, end);
- return 1;
- }
- data = poolStoreString(&tempPool,
- enc,
- start + enc->minBytesPerChar * 4,
- end - enc->minBytesPerChar * 3);
- if (!data)
- return 0;
- normalizeLines(data);
- commentHandler(handlerArg, data);
- poolClear(&tempPool);
- return 1;
-}
-
-static void
-reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end)
-{
- if (MUST_CONVERT(enc, s)) {
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- do {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = s;
- defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
- *eventPP = s;
- } while (s != end);
- }
- else
- defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s);
-}
-
-
-static int
-defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, int isCdata,
- int isId, const XML_Char *value, XML_Parser parser)
-{
- DEFAULT_ATTRIBUTE *att;
- if (value || isId) {
- /* The handling of default attributes gets messed up if we have
- a default which duplicates a non-default. */
- int i;
- for (i = 0; i < type->nDefaultAtts; i++)
- if (attId == type->defaultAtts[i].id)
- return 1;
- if (isId && !type->idAtt && !attId->xmlns)
- type->idAtt = attId;
- }
- if (type->nDefaultAtts == type->allocDefaultAtts) {
- if (type->allocDefaultAtts == 0) {
- type->allocDefaultAtts = 8;
- type->defaultAtts = MALLOC(type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE));
- }
- else {
- type->allocDefaultAtts *= 2;
- type->defaultAtts = REALLOC(type->defaultAtts,
- type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE));
- }
- if (!type->defaultAtts)
- return 0;
- }
- att = type->defaultAtts + type->nDefaultAtts;
- att->id = attId;
- att->value = value;
- att->isCdata = isCdata;
- if (!isCdata)
- attId->maybeTokenized = 1;
- type->nDefaultAtts += 1;
- return 1;
-}
-
-static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
-{
- const XML_Char *name;
- for (name = elementType->name; *name; name++) {
- if (*name == XML_T(':')) {
- PREFIX *prefix;
- const XML_Char *s;
- for (s = elementType->name; s != name; s++) {
- if (!poolAppendChar(&dtd.pool, *s))
- return 0;
- }
- if (!poolAppendChar(&dtd.pool, XML_T('\0')))
- return 0;
- prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX));
- if (!prefix)
- return 0;
- if (prefix->name == poolStart(&dtd.pool))
- poolFinish(&dtd.pool);
- else
- poolDiscard(&dtd.pool);
- elementType->prefix = prefix;
-
- }
- }
- return 1;
-}
-
-static ATTRIBUTE_ID *
-getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
-{
- ATTRIBUTE_ID *id;
- const XML_Char *name;
- if (!poolAppendChar(&dtd.pool, XML_T('\0')))
- return 0;
- name = poolStoreString(&dtd.pool, enc, start, end);
- if (!name)
- return 0;
- ++name;
- id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, name, sizeof(ATTRIBUTE_ID));
- if (!id)
- return 0;
- if (id->name != name)
- poolDiscard(&dtd.pool);
- else {
- poolFinish(&dtd.pool);
- if (!ns)
- ;
- else if (name[0] == 'x'
- && name[1] == 'm'
- && name[2] == 'l'
- && name[3] == 'n'
- && name[4] == 's'
- && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) {
- if (name[5] == '\0')
- id->prefix = &dtd.defaultPrefix;
- else
- id->prefix = (PREFIX *)lookup(&dtd.prefixes, name + 6, sizeof(PREFIX));
- id->xmlns = 1;
- }
- else {
- int i;
- for (i = 0; name[i]; i++) {
- if (name[i] == XML_T(':')) {
- int j;
- for (j = 0; j < i; j++) {
- if (!poolAppendChar(&dtd.pool, name[j]))
- return 0;
- }
- if (!poolAppendChar(&dtd.pool, XML_T('\0')))
- return 0;
- id->prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX));
- if (id->prefix->name == poolStart(&dtd.pool))
- poolFinish(&dtd.pool);
- else
- poolDiscard(&dtd.pool);
- break;
- }
- }
- }
- }
- return id;
-}
-
-#define CONTEXT_SEP XML_T('\f')
-
-static
-const XML_Char *getContext(XML_Parser parser)
-{
- HASH_TABLE_ITER iter;
- int needSep = 0;
-
- if (dtd.defaultPrefix.binding) {
- int i;
- int len;
- if (!poolAppendChar(&tempPool, XML_T('=')))
- return 0;
- len = dtd.defaultPrefix.binding->uriLen;
- if (namespaceSeparator != XML_T('\0'))
- len--;
- for (i = 0; i < len; i++)
- if (!poolAppendChar(&tempPool, dtd.defaultPrefix.binding->uri[i]))
- return 0;
- needSep = 1;
- }
-
- hashTableIterInit(&iter, &(dtd.prefixes));
- for (;;) {
- int i;
- int len;
- const XML_Char *s;
- PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter);
- if (!prefix)
- break;
- if (!prefix->binding)
- continue;
- if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
- return 0;
- for (s = prefix->name; *s; s++)
- if (!poolAppendChar(&tempPool, *s))
- return 0;
- if (!poolAppendChar(&tempPool, XML_T('=')))
- return 0;
- len = prefix->binding->uriLen;
- if (namespaceSeparator != XML_T('\0'))
- len--;
- for (i = 0; i < len; i++)
- if (!poolAppendChar(&tempPool, prefix->binding->uri[i]))
- return 0;
- needSep = 1;
- }
-
-
- hashTableIterInit(&iter, &(dtd.generalEntities));
- for (;;) {
- const XML_Char *s;
- ENTITY *e = (ENTITY *)hashTableIterNext(&iter);
- if (!e)
- break;
- if (!e->open)
- continue;
- if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
- return 0;
- for (s = e->name; *s; s++)
- if (!poolAppendChar(&tempPool, *s))
- return 0;
- needSep = 1;
- }
-
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return 0;
- return tempPool.start;
-}
-
-static
-int setContext(XML_Parser parser, const XML_Char *context)
-{
- const XML_Char *s = context;
-
- while (*context != XML_T('\0')) {
- if (*s == CONTEXT_SEP || *s == XML_T('\0')) {
- ENTITY *e;
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return 0;
- e = (ENTITY *)lookup(&dtd.generalEntities, poolStart(&tempPool), 0);
- if (e)
- e->open = 1;
- if (*s != XML_T('\0'))
- s++;
- context = s;
- poolDiscard(&tempPool);
- }
- else if (*s == '=') {
- PREFIX *prefix;
- if (poolLength(&tempPool) == 0)
- prefix = &dtd.defaultPrefix;
- else {
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return 0;
- prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&tempPool), sizeof(PREFIX));
- if (!prefix)
- return 0;
- if (prefix->name == poolStart(&tempPool)) {
- prefix->name = poolCopyString(&dtd.pool, prefix->name);
- if (!prefix->name)
- return 0;
- }
- poolDiscard(&tempPool);
- }
- for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++)
- if (!poolAppendChar(&tempPool, *context))
- return 0;
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return 0;
- if (!addBinding(parser, prefix, 0, poolStart(&tempPool), &inheritedBindings))
- return 0;
- poolDiscard(&tempPool);
- if (*context != XML_T('\0'))
- ++context;
- s = context;
- }
- else {
- if (!poolAppendChar(&tempPool, *s))
- return 0;
- s++;
- }
- }
- return 1;
-}
-
-
-static
-void normalizePublicId(XML_Char *publicId)
-{
- XML_Char *p = publicId;
- XML_Char *s;
- for (s = publicId; *s; s++) {
- switch (*s) {
- case 0x20:
- case 0xD:
- case 0xA:
- if (p != publicId && p[-1] != 0x20)
- *p++ = 0x20;
- break;
- default:
- *p++ = *s;
- }
- }
- if (p != publicId && p[-1] == 0x20)
- --p;
- *p = XML_T('\0');
-}
-
-static int dtdInit(DTD *p, XML_Parser parser)
-{
- XML_Memory_Handling_Suite *ms = &((Parser *) parser)->m_mem;
- poolInit(&(p->pool), ms);
- hashTableInit(&(p->generalEntities), ms);
- hashTableInit(&(p->elementTypes), ms);
- hashTableInit(&(p->attributeIds), ms);
- hashTableInit(&(p->prefixes), ms);
- p->complete = 1;
- p->standalone = 0;
-#ifdef XML_DTD
- hashTableInit(&(p->paramEntities), ms);
-#endif /* XML_DTD */
- p->defaultPrefix.name = 0;
- p->defaultPrefix.binding = 0;
-
- p->in_eldecl = 0;
- p->scaffIndex = 0;
- p->scaffLevel = 0;
- p->scaffold = 0;
- p->contentStringLen = 0;
- p->scaffSize = 0;
- p->scaffCount = 0;
-
- return 1;
-}
-
-#ifdef XML_DTD
-
-static void dtdSwap(DTD *p1, DTD *p2)
-{
- DTD tem;
- memcpy(&tem, p1, sizeof(DTD));
- memcpy(p1, p2, sizeof(DTD));
- memcpy(p2, &tem, sizeof(DTD));
-}
-
-#endif /* XML_DTD */
-
-static void dtdDestroy(DTD *p, XML_Parser parser)
-{
- HASH_TABLE_ITER iter;
- hashTableIterInit(&iter, &(p->elementTypes));
- for (;;) {
- ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter);
- if (!e)
- break;
- if (e->allocDefaultAtts != 0)
- FREE(e->defaultAtts);
- }
- hashTableDestroy(&(p->generalEntities));
-#ifdef XML_DTD
- hashTableDestroy(&(p->paramEntities));
-#endif /* XML_DTD */
- hashTableDestroy(&(p->elementTypes));
- hashTableDestroy(&(p->attributeIds));
- hashTableDestroy(&(p->prefixes));
- poolDestroy(&(p->pool));
- if (p->scaffIndex)
- FREE(p->scaffIndex);
- if (p->scaffold)
- FREE(p->scaffold);
-}
-
-/* Do a deep copy of the DTD. Return 0 for out of memory; non-zero otherwise.
-The new DTD has already been initialized. */
-
-static int dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser)
-{
- HASH_TABLE_ITER iter;
-
- /* Copy the prefix table. */
-
- hashTableIterInit(&iter, &(oldDtd->prefixes));
- for (;;) {
- const XML_Char *name;
- const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter);
- if (!oldP)
- break;
- name = poolCopyString(&(newDtd->pool), oldP->name);
- if (!name)
- return 0;
- if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX)))
- return 0;
- }
-
- hashTableIterInit(&iter, &(oldDtd->attributeIds));
-
- /* Copy the attribute id table. */
-
- for (;;) {
- ATTRIBUTE_ID *newA;
- const XML_Char *name;
- const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter);
-
- if (!oldA)
- break;
- /* Remember to allocate the scratch byte before the name. */
- if (!poolAppendChar(&(newDtd->pool), XML_T('\0')))
- return 0;
- name = poolCopyString(&(newDtd->pool), oldA->name);
- if (!name)
- return 0;
- ++name;
- newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID));
- if (!newA)
- return 0;
- newA->maybeTokenized = oldA->maybeTokenized;
- if (oldA->prefix) {
- newA->xmlns = oldA->xmlns;
- if (oldA->prefix == &oldDtd->defaultPrefix)
- newA->prefix = &newDtd->defaultPrefix;
- else
- newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0);
- }
- }
-
- /* Copy the element type table. */
-
- hashTableIterInit(&iter, &(oldDtd->elementTypes));
-
- for (;;) {
- int i;
- ELEMENT_TYPE *newE;
- const XML_Char *name;
- const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter);
- if (!oldE)
- break;
- name = poolCopyString(&(newDtd->pool), oldE->name);
- if (!name)
- return 0;
- newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE));
- if (!newE)
- return 0;
- if (oldE->nDefaultAtts) {
- newE->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE));
- if (!newE->defaultAtts)
- return 0;
- }
- if (oldE->idAtt)
- newE->idAtt = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0);
- newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts;
- if (oldE->prefix)
- newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0);
- for (i = 0; i < newE->nDefaultAtts; i++) {
- newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0);
- newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata;
- if (oldE->defaultAtts[i].value) {
- newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value);
- if (!newE->defaultAtts[i].value)
- return 0;
- }
- else
- newE->defaultAtts[i].value = 0;
- }
- }
-
- /* Copy the entity tables. */
- if (!copyEntityTable(&(newDtd->generalEntities),
- &(newDtd->pool),
- &(oldDtd->generalEntities), parser))
- return 0;
-
-#ifdef XML_DTD
- if (!copyEntityTable(&(newDtd->paramEntities),
- &(newDtd->pool),
- &(oldDtd->paramEntities), parser))
- return 0;
-#endif /* XML_DTD */
-
- newDtd->complete = oldDtd->complete;
- newDtd->standalone = oldDtd->standalone;
-
- /* Don't want deep copying for scaffolding */
- newDtd->in_eldecl = oldDtd->in_eldecl;
- newDtd->scaffold = oldDtd->scaffold;
- newDtd->contentStringLen = oldDtd->contentStringLen;
- newDtd->scaffSize = oldDtd->scaffSize;
- newDtd->scaffLevel = oldDtd->scaffLevel;
- newDtd->scaffIndex = oldDtd->scaffIndex;
-
- return 1;
-} /* End dtdCopy */
-
-static int copyEntityTable(HASH_TABLE *newTable,
- STRING_POOL *newPool,
- const HASH_TABLE *oldTable,
- XML_Parser parser)
-{
- HASH_TABLE_ITER iter;
- const XML_Char *cachedOldBase = 0;
- const XML_Char *cachedNewBase = 0;
-
- hashTableIterInit(&iter, oldTable);
-
- for (;;) {
- ENTITY *newE;
- const XML_Char *name;
- const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter);
- if (!oldE)
- break;
- name = poolCopyString(newPool, oldE->name);
- if (!name)
- return 0;
- newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY));
- if (!newE)
- return 0;
- if (oldE->systemId) {
- const XML_Char *tem = poolCopyString(newPool, oldE->systemId);
- if (!tem)
- return 0;
- newE->systemId = tem;
- if (oldE->base) {
- if (oldE->base == cachedOldBase)
- newE->base = cachedNewBase;
- else {
- cachedOldBase = oldE->base;
- tem = poolCopyString(newPool, cachedOldBase);
- if (!tem)
- return 0;
- cachedNewBase = newE->base = tem;
- }
- }
- }
- else {
- const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen);
- if (!tem)
- return 0;
- newE->textPtr = tem;
- newE->textLen = oldE->textLen;
- }
- if (oldE->notation) {
- const XML_Char *tem = poolCopyString(newPool, oldE->notation);
- if (!tem)
- return 0;
- newE->notation = tem;
- }
- }
- return 1;
-}
-
-#define INIT_SIZE 64
-
-static
-int keyeq(KEY s1, KEY s2)
-{
- for (; *s1 == *s2; s1++, s2++)
- if (*s1 == 0)
- return 1;
- return 0;
-}
-
-static
-unsigned long hash(KEY s)
-{
- unsigned long h = 0;
- while (*s)
- h = (h << 5) + h + (unsigned char)*s++;
- return h;
-}
-
-static
-NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize)
-{
- size_t i;
- if (table->size == 0) {
- size_t tsize;
-
- if (!createSize)
- return 0;
- tsize = INIT_SIZE * sizeof(NAMED *);
- table->v = table->mem->malloc_fcn(tsize);
- if (!table->v)
- return 0;
- memset(table->v, 0, tsize);
- table->size = INIT_SIZE;
- table->usedLim = INIT_SIZE / 2;
- i = hash(name) & (table->size - 1);
- }
- else {
- unsigned long h = hash(name);
- for (i = h & (table->size - 1);
- table->v[i];
- i == 0 ? i = table->size - 1 : --i) {
- if (keyeq(name, table->v[i]->name))
- return table->v[i];
- }
- if (!createSize)
- return 0;
- if (table->used == table->usedLim) {
- /* check for overflow */
- size_t newSize = table->size * 2;
- size_t tsize = newSize * sizeof(NAMED *);
- NAMED **newV = table->mem->malloc_fcn(tsize);
- if (!newV)
- return 0;
- memset(newV, 0, tsize);
- for (i = 0; i < table->size; i++)
- if (table->v[i]) {
- size_t j;
- for (j = hash(table->v[i]->name) & (newSize - 1);
- newV[j];
- j == 0 ? j = newSize - 1 : --j)
- ;
- newV[j] = table->v[i];
- }
- table->mem->free_fcn(table->v);
- table->v = newV;
- table->size = newSize;
- table->usedLim = newSize/2;
- for (i = h & (table->size - 1);
- table->v[i];
- i == 0 ? i = table->size - 1 : --i)
- ;
- }
- }
- table->v[i] = table->mem->malloc_fcn(createSize);
- if (!table->v[i])
- return 0;
- memset(table->v[i], 0, createSize);
- table->v[i]->name = name;
- (table->used)++;
- return table->v[i];
-}
-
-static
-void hashTableDestroy(HASH_TABLE *table)
-{
- size_t i;
- for (i = 0; i < table->size; i++) {
- NAMED *p = table->v[i];
- if (p)
- table->mem->free_fcn(p);
- }
- if (table->v)
- table->mem->free_fcn(table->v);
-}
-
-static
-void hashTableInit(HASH_TABLE *p, XML_Memory_Handling_Suite *ms)
-{
- p->size = 0;
- p->usedLim = 0;
- p->used = 0;
- p->v = 0;
- p->mem = ms;
-}
-
-static
-void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table)
-{
- iter->p = table->v;
- iter->end = iter->p + table->size;
-}
-
-static
-NAMED *hashTableIterNext(HASH_TABLE_ITER *iter)
-{
- while (iter->p != iter->end) {
- NAMED *tem = *(iter->p)++;
- if (tem)
- return tem;
- }
- return 0;
-}
-
-
-static
-void poolInit(STRING_POOL *pool, XML_Memory_Handling_Suite *ms)
-{
- pool->blocks = 0;
- pool->freeBlocks = 0;
- pool->start = 0;
- pool->ptr = 0;
- pool->end = 0;
- pool->mem = ms;
-}
-
-static
-void poolClear(STRING_POOL *pool)
-{
- if (!pool->freeBlocks)
- pool->freeBlocks = pool->blocks;
- else {
- BLOCK *p = pool->blocks;
- while (p) {
- BLOCK *tem = p->next;
- p->next = pool->freeBlocks;
- pool->freeBlocks = p;
- p = tem;
- }
- }
- pool->blocks = 0;
- pool->start = 0;
- pool->ptr = 0;
- pool->end = 0;
-}
-
-static
-void poolDestroy(STRING_POOL *pool)
-{
- BLOCK *p = pool->blocks;
- while (p) {
- BLOCK *tem = p->next;
- pool->mem->free_fcn(p);
- p = tem;
- }
- pool->blocks = 0;
- p = pool->freeBlocks;
- while (p) {
- BLOCK *tem = p->next;
- pool->mem->free_fcn(p);
- p = tem;
- }
- pool->freeBlocks = 0;
- pool->ptr = 0;
- pool->start = 0;
- pool->end = 0;
-}
-
-static
-XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end)
-{
- if (!pool->ptr && !poolGrow(pool))
- return 0;
- for (;;) {
- XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end);
- if (ptr == end)
- break;
- if (!poolGrow(pool))
- return 0;
- }
- return pool->start;
-}
-
-static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s)
-{
- do {
- if (!poolAppendChar(pool, *s))
- return 0;
- } while (*s++);
- s = pool->start;
- poolFinish(pool);
- return s;
-}
-
-static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n)
-{
- if (!pool->ptr && !poolGrow(pool))
- return 0;
- for (; n > 0; --n, s++) {
- if (!poolAppendChar(pool, *s))
- return 0;
-
- }
- s = pool->start;
- poolFinish(pool);
- return s;
-}
-
-static
-const XML_Char *poolAppendString(STRING_POOL *pool, const XML_Char *s)
-{
- while (*s) {
- if (!poolAppendChar(pool, *s))
- return 0;
- s++;
- }
- return pool->start;
-} /* End poolAppendString */
-
-static
-XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end)
-{
- if (!poolAppend(pool, enc, ptr, end))
- return 0;
- if (pool->ptr == pool->end && !poolGrow(pool))
- return 0;
- *(pool->ptr)++ = 0;
- return pool->start;
-}
-
-static
-int poolGrow(STRING_POOL *pool)
-{
- if (pool->freeBlocks) {
- if (pool->start == 0) {
- pool->blocks = pool->freeBlocks;
- pool->freeBlocks = pool->freeBlocks->next;
- pool->blocks->next = 0;
- pool->start = pool->blocks->s;
- pool->end = pool->start + pool->blocks->size;
- pool->ptr = pool->start;
- return 1;
- }
- if (pool->end - pool->start < pool->freeBlocks->size) {
- BLOCK *tem = pool->freeBlocks->next;
- pool->freeBlocks->next = pool->blocks;
- pool->blocks = pool->freeBlocks;
- pool->freeBlocks = tem;
- memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char));
- pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
- pool->start = pool->blocks->s;
- pool->end = pool->start + pool->blocks->size;
- return 1;
- }
- }
- if (pool->blocks && pool->start == pool->blocks->s) {
- int blockSize = (pool->end - pool->start)*2;
- pool->blocks = pool->mem->realloc_fcn(pool->blocks, offsetof(BLOCK, s) + blockSize * sizeof(XML_Char));
- if (!pool->blocks)
- return 0;
- pool->blocks->size = blockSize;
- pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
- pool->start = pool->blocks->s;
- pool->end = pool->start + blockSize;
- }
- else {
- BLOCK *tem;
- int blockSize = pool->end - pool->start;
- if (blockSize < INIT_BLOCK_SIZE)
- blockSize = INIT_BLOCK_SIZE;
- else
- blockSize *= 2;
- tem = pool->mem->malloc_fcn(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char));
- if (!tem)
- return 0;
- tem->size = blockSize;
- tem->next = pool->blocks;
- pool->blocks = tem;
- if (pool->ptr != pool->start)
- memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char));
- pool->ptr = tem->s + (pool->ptr - pool->start);
- pool->start = tem->s;
- pool->end = tem->s + blockSize;
- }
- return 1;
-}
-
-static int
-nextScaffoldPart(XML_Parser parser)
-{
- CONTENT_SCAFFOLD * me;
- int next;
-
- if (! dtd.scaffIndex) {
- dtd.scaffIndex = MALLOC(groupSize * sizeof(int));
- if (! dtd.scaffIndex)
- return -1;
- dtd.scaffIndex[0] = 0;
- }
-
- if (dtd.scaffCount >= dtd.scaffSize) {
- if (dtd.scaffold) {
- dtd.scaffSize *= 2;
- dtd.scaffold = (CONTENT_SCAFFOLD *) REALLOC(dtd.scaffold,
- dtd.scaffSize * sizeof(CONTENT_SCAFFOLD));
- }
- else {
- dtd.scaffSize = 32;
- dtd.scaffold = (CONTENT_SCAFFOLD *) MALLOC(dtd.scaffSize * sizeof(CONTENT_SCAFFOLD));
- }
- if (! dtd.scaffold)
- return -1;
- }
- next = dtd.scaffCount++;
- me = &dtd.scaffold[next];
- if (dtd.scaffLevel) {
- CONTENT_SCAFFOLD *parent = &dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]];
- if (parent->lastchild) {
- dtd.scaffold[parent->lastchild].nextsib = next;
- }
- if (! parent->childcnt)
- parent->firstchild = next;
- parent->lastchild = next;
- parent->childcnt++;
- }
- me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0;
- return next;
-} /* End nextScaffoldPart */
-
-static void
-build_node (XML_Parser parser,
- int src_node,
- XML_Content *dest,
- XML_Content **contpos,
- char **strpos)
-{
- dest->type = dtd.scaffold[src_node].type;
- dest->quant = dtd.scaffold[src_node].quant;
- if (dest->type == XML_CTYPE_NAME) {
- const char *src;
- dest->name = *strpos;
- src = dtd.scaffold[src_node].name;
- for (;;) {
- *(*strpos)++ = *src;
- if (! *src)
- break;
- src++;
- }
- dest->numchildren = 0;
- dest->children = 0;
- }
- else {
- unsigned int i;
- int cn;
- dest->numchildren = dtd.scaffold[src_node].childcnt;
- dest->children = *contpos;
- *contpos += dest->numchildren;
- for (i = 0, cn = dtd.scaffold[src_node].firstchild;
- i < dest->numchildren;
- i++, cn = dtd.scaffold[cn].nextsib) {
- build_node(parser, cn, &(dest->children[i]), contpos, strpos);
- }
- dest->name = 0;
- }
-} /* End build_node */
-
-static XML_Content *
-build_model (XML_Parser parser)
-{
- XML_Content *ret;
- XML_Content *cpos;
- char * str;
- int allocsize = dtd.scaffCount * sizeof(XML_Content) + dtd.contentStringLen;
-
- ret = MALLOC(allocsize);
- if (! ret)
- return 0;
-
- str = (char *) (&ret[dtd.scaffCount]);
- cpos = &ret[1];
-
- build_node(parser, 0, ret, &cpos, &str);
- return ret;
-} /* End build_model */
-
-static ELEMENT_TYPE *
-getElementType(XML_Parser parser,
- const ENCODING *enc,
- const char *ptr,
- const char *end)
-{
- const XML_Char *name = poolStoreString(&dtd.pool, enc, ptr, end);
- ELEMENT_TYPE *ret;
-
- if (! name)
- return 0;
- ret = (ELEMENT_TYPE *) lookup(&dtd.elementTypes, name, sizeof(ELEMENT_TYPE));
- if (! ret)
- return 0;
- if (ret->name != name)
- poolDiscard(&dtd.pool);
- else {
- poolFinish(&dtd.pool);
- if (!setElementTypePrefix(parser, ret))
- return 0;
- }
- return ret;
-} /* End getElementType */
diff --git a/ext/xml/expat/xmlrole.c b/ext/xml/expat/xmlrole.c
deleted file mode 100644
index 03b69e3b36..0000000000
--- a/ext/xml/expat/xmlrole.c
+++ /dev/null
@@ -1,1277 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#include "php_compat.h"
-
-static char RCSId[]
- = "$Header$";
-
-#ifdef COMPILED_FROM_DSP
-# include "winconfig.h"
-#else
-# include <php_config.h>
-#endif /* ndef COMPILED_FROM_DSP */
-
-#include "xmlrole.h"
-#include "ascii.h"
-
-/* Doesn't check:
-
- that ,| are not mixed in a model group
- content of literals
-
-*/
-
-static const char KW_ANY[] = { ASCII_A, ASCII_N, ASCII_Y, '\0' };
-static const char KW_ATTLIST[] = { ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' };
-static const char KW_CDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
-static const char KW_DOCTYPE[] = { ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' };
-static const char KW_ELEMENT[] = { ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' };
-static const char KW_EMPTY[] = { ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' };
-static const char KW_ENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' };
-static const char KW_ENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
-static const char KW_FIXED[] = { ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' };
-static const char KW_ID[] = { ASCII_I, ASCII_D, '\0' };
-static const char KW_IDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
-static const char KW_IDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
-static const char KW_IGNORE[] = { ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' };
-static const char KW_IMPLIED[] = { ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' };
-static const char KW_INCLUDE[] = { ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' };
-static const char KW_NDATA[] = { ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
-static const char KW_NMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
-static const char KW_NMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' };
-static const char KW_NOTATION[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, '\0' };
-static const char KW_PCDATA[] = { ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
-static const char KW_PUBLIC[] = { ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' };
-static const char KW_REQUIRED[] = { ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, '\0' };
-static const char KW_SYSTEM[] = { ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' };
-
-#ifndef MIN_BYTES_PER_CHAR
-#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
-#endif
-
-#ifdef XML_DTD
-#define setTopLevel(state) \
- ((state)->handler = ((state)->documentEntity \
- ? internalSubset \
- : externalSubset1))
-#else /* not XML_DTD */
-#define setTopLevel(state) ((state)->handler = internalSubset)
-#endif /* not XML_DTD */
-
-typedef int PROLOG_HANDLER(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc);
-
-static PROLOG_HANDLER
- prolog0, prolog1, prolog2,
- doctype0, doctype1, doctype2, doctype3, doctype4, doctype5,
- internalSubset,
- entity0, entity1, entity2, entity3, entity4, entity5, entity6,
- entity7, entity8, entity9,
- notation0, notation1, notation2, notation3, notation4,
- attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6,
- attlist7, attlist8, attlist9,
- element0, element1, element2, element3, element4, element5, element6,
- element7,
-#ifdef XML_DTD
- externalSubset0, externalSubset1,
- condSect0, condSect1, condSect2,
-#endif /* XML_DTD */
- declClose,
- error;
-
-static
-int common(PROLOG_STATE *state, int tok);
-
-static
-int prolog0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- state->handler = prolog1;
- return XML_ROLE_NONE;
- case XML_TOK_XML_DECL:
- state->handler = prolog1;
- return XML_ROLE_XML_DECL;
- case XML_TOK_PI:
- state->handler = prolog1;
- return XML_ROLE_NONE;
- case XML_TOK_COMMENT:
- state->handler = prolog1;
- case XML_TOK_BOM:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_OPEN:
- if (!XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_DOCTYPE))
- break;
- state->handler = doctype0;
- return XML_ROLE_NONE;
- case XML_TOK_INSTANCE_START:
- state->handler = error;
- return XML_ROLE_INSTANCE_START;
- }
- return common(state, tok);
-}
-
-static
-int prolog1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_PI:
- case XML_TOK_COMMENT:
- case XML_TOK_BOM:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_OPEN:
- if (!XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_DOCTYPE))
- break;
- state->handler = doctype0;
- return XML_ROLE_NONE;
- case XML_TOK_INSTANCE_START:
- state->handler = error;
- return XML_ROLE_INSTANCE_START;
- }
- return common(state, tok);
-}
-
-static
-int prolog2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_PI:
- case XML_TOK_COMMENT:
- return XML_ROLE_NONE;
- case XML_TOK_INSTANCE_START:
- state->handler = error;
- return XML_ROLE_INSTANCE_START;
- }
- return common(state, tok);
-}
-
-static
-int doctype0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = doctype1;
- return XML_ROLE_DOCTYPE_NAME;
- }
- return common(state, tok);
-}
-
-static
-int doctype1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = internalSubset;
- return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
- case XML_TOK_DECL_CLOSE:
- state->handler = prolog2;
- return XML_ROLE_DOCTYPE_CLOSE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = doctype3;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = doctype2;
- return XML_ROLE_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static
-int doctype2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = doctype3;
- return XML_ROLE_DOCTYPE_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static
-int doctype3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = doctype4;
- return XML_ROLE_DOCTYPE_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static
-int doctype4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = internalSubset;
- return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
- case XML_TOK_DECL_CLOSE:
- state->handler = prolog2;
- return XML_ROLE_DOCTYPE_CLOSE;
- }
- return common(state, tok);
-}
-
-static
-int doctype5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_CLOSE:
- state->handler = prolog2;
- return XML_ROLE_DOCTYPE_CLOSE;
- }
- return common(state, tok);
-}
-
-static
-int internalSubset(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_OPEN:
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_ENTITY)) {
- state->handler = entity0;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_ATTLIST)) {
- state->handler = attlist0;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_ELEMENT)) {
- state->handler = element0;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_NOTATION)) {
- state->handler = notation0;
- return XML_ROLE_NONE;
- }
- break;
- case XML_TOK_PI:
- case XML_TOK_COMMENT:
- return XML_ROLE_NONE;
- case XML_TOK_PARAM_ENTITY_REF:
- return XML_ROLE_PARAM_ENTITY_REF;
- case XML_TOK_CLOSE_BRACKET:
- state->handler = doctype5;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-#ifdef XML_DTD
-
-static
-int externalSubset0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- state->handler = externalSubset1;
- if (tok == XML_TOK_XML_DECL)
- return XML_ROLE_TEXT_DECL;
- return externalSubset1(state, tok, ptr, end, enc);
-}
-
-static
-int externalSubset1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_COND_SECT_OPEN:
- state->handler = condSect0;
- return XML_ROLE_NONE;
- case XML_TOK_COND_SECT_CLOSE:
- if (state->includeLevel == 0)
- break;
- state->includeLevel -= 1;
- return XML_ROLE_NONE;
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_BRACKET:
- break;
- case XML_TOK_NONE:
- if (state->includeLevel)
- break;
- return XML_ROLE_NONE;
- default:
- return internalSubset(state, tok, ptr, end, enc);
- }
- return common(state, tok);
-}
-
-#endif /* XML_DTD */
-
-static
-int entity0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_PERCENT:
- state->handler = entity1;
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- state->handler = entity2;
- return XML_ROLE_GENERAL_ENTITY_NAME;
- }
- return common(state, tok);
-}
-
-static
-int entity1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- state->handler = entity7;
- return XML_ROLE_PARAM_ENTITY_NAME;
- }
- return common(state, tok);
-}
-
-static
-int entity2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = entity4;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = entity3;
- return XML_ROLE_NONE;
- }
- break;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- return XML_ROLE_ENTITY_VALUE;
- }
- return common(state, tok);
-}
-
-static
-int entity3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity4;
- return XML_ROLE_ENTITY_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-
-static
-int entity4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity5;
- return XML_ROLE_ENTITY_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static
-int entity5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_ENTITY_COMPLETE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
- state->handler = entity6;
- return XML_ROLE_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static
-int entity6(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- state->handler = declClose;
- return XML_ROLE_ENTITY_NOTATION_NAME;
- }
- return common(state, tok);
-}
-
-static
-int entity7(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = entity9;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = entity8;
- return XML_ROLE_NONE;
- }
- break;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- return XML_ROLE_ENTITY_VALUE;
- }
- return common(state, tok);
-}
-
-static
-int entity8(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity9;
- return XML_ROLE_ENTITY_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static
-int entity9(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- return XML_ROLE_ENTITY_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static
-int notation0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- state->handler = notation1;
- return XML_ROLE_NOTATION_NAME;
- }
- return common(state, tok);
-}
-
-static
-int notation1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = notation3;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = notation2;
- return XML_ROLE_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static
-int notation2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = notation4;
- return XML_ROLE_NOTATION_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static
-int notation3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- return XML_ROLE_NOTATION_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static
-int notation4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- return XML_ROLE_NOTATION_SYSTEM_ID;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_NOTATION_NO_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static
-int attlist0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = attlist1;
- return XML_ROLE_ATTLIST_ELEMENT_NAME;
- }
- return common(state, tok);
-}
-
-static
-int attlist1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = attlist2;
- return XML_ROLE_ATTRIBUTE_NAME;
- }
- return common(state, tok);
-}
-
-static
-int attlist2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- {
- static const char *types[] = {
- KW_CDATA,
- KW_ID,
- KW_IDREF,
- KW_IDREFS,
- KW_ENTITY,
- KW_ENTITIES,
- KW_NMTOKEN,
- KW_NMTOKENS,
- };
- int i;
- for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++)
- if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
- state->handler = attlist8;
- return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
- }
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
- state->handler = attlist5;
- return XML_ROLE_NONE;
- }
- break;
- case XML_TOK_OPEN_PAREN:
- state->handler = attlist3;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-static
-int attlist3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NMTOKEN:
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = attlist4;
- return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
- }
- return common(state, tok);
-}
-
-static
-int attlist4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->handler = attlist8;
- return XML_ROLE_NONE;
- case XML_TOK_OR:
- state->handler = attlist3;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-static
-int attlist5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_PAREN:
- state->handler = attlist6;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-
-static
-int attlist6(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- state->handler = attlist7;
- return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
- }
- return common(state, tok);
-}
-
-static
-int attlist7(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->handler = attlist8;
- return XML_ROLE_NONE;
- case XML_TOK_OR:
- state->handler = attlist6;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-/* default value */
-static
-int attlist8(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_POUND_NAME:
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_IMPLIED)) {
- state->handler = attlist1;
- return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_REQUIRED)) {
- state->handler = attlist1;
- return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_FIXED)) {
- state->handler = attlist9;
- return XML_ROLE_NONE;
- }
- break;
- case XML_TOK_LITERAL:
- state->handler = attlist1;
- return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
- }
- return common(state, tok);
-}
-
-static
-int attlist9(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_LITERAL:
- state->handler = attlist1;
- return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
- }
- return common(state, tok);
-}
-
-static
-int element0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element1;
- return XML_ROLE_ELEMENT_NAME;
- }
- return common(state, tok);
-}
-
-static
-int element1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
- state->handler = declClose;
- return XML_ROLE_CONTENT_EMPTY;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
- state->handler = declClose;
- return XML_ROLE_CONTENT_ANY;
- }
- break;
- case XML_TOK_OPEN_PAREN:
- state->handler = element2;
- state->level = 1;
- return XML_ROLE_GROUP_OPEN;
- }
- return common(state, tok);
-}
-
-static
-int element2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_POUND_NAME:
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_PCDATA)) {
- state->handler = element3;
- return XML_ROLE_CONTENT_PCDATA;
- }
- break;
- case XML_TOK_OPEN_PAREN:
- state->level = 2;
- state->handler = element6;
- return XML_ROLE_GROUP_OPEN;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT;
- case XML_TOK_NAME_QUESTION:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_OPT;
- case XML_TOK_NAME_ASTERISK:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_REP;
- case XML_TOK_NAME_PLUS:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_PLUS;
- }
- return common(state, tok);
-}
-
-static
-int element3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE;
- case XML_TOK_CLOSE_PAREN_ASTERISK:
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE_REP;
- case XML_TOK_OR:
- state->handler = element4;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-static
-int element4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element5;
- return XML_ROLE_CONTENT_ELEMENT;
- }
- return common(state, tok);
-}
-
-static
-int element5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_PAREN_ASTERISK:
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE_REP;
- case XML_TOK_OR:
- state->handler = element4;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-static
-int element6(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_PAREN:
- state->level += 1;
- return XML_ROLE_GROUP_OPEN;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT;
- case XML_TOK_NAME_QUESTION:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_OPT;
- case XML_TOK_NAME_ASTERISK:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_REP;
- case XML_TOK_NAME_PLUS:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_PLUS;
- }
- return common(state, tok);
-}
-
-static
-int element7(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->level -= 1;
- if (state->level == 0)
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE;
- case XML_TOK_CLOSE_PAREN_ASTERISK:
- state->level -= 1;
- if (state->level == 0)
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE_REP;
- case XML_TOK_CLOSE_PAREN_QUESTION:
- state->level -= 1;
- if (state->level == 0)
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE_OPT;
- case XML_TOK_CLOSE_PAREN_PLUS:
- state->level -= 1;
- if (state->level == 0)
- state->handler = declClose;
- return XML_ROLE_GROUP_CLOSE_PLUS;
- case XML_TOK_COMMA:
- state->handler = element6;
- return XML_ROLE_GROUP_SEQUENCE;
- case XML_TOK_OR:
- state->handler = element6;
- return XML_ROLE_GROUP_CHOICE;
- }
- return common(state, tok);
-}
-
-#ifdef XML_DTD
-
-static
-int condSect0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) {
- state->handler = condSect1;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) {
- state->handler = condSect2;
- return XML_ROLE_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static
-int condSect1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = externalSubset1;
- state->includeLevel += 1;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-static
-int condSect2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = externalSubset1;
- return XML_ROLE_IGNORE_SECT;
- }
- return common(state, tok);
-}
-
-#endif /* XML_DTD */
-
-static
-int declClose(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-#if 0
-
-static
-int ignore(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_DECL_CLOSE:
- state->handler = internalSubset;
- return 0;
- default:
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-#endif
-
-static
-int error(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- return XML_ROLE_NONE;
-}
-
-static
-int common(PROLOG_STATE *state, int tok)
-{
-#ifdef XML_DTD
- if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
- return XML_ROLE_INNER_PARAM_ENTITY_REF;
-#endif
- state->handler = error;
- return XML_ROLE_ERROR;
-}
-
-void XmlPrologStateInit(PROLOG_STATE *state)
-{
- state->handler = prolog0;
-#ifdef XML_DTD
- state->documentEntity = 1;
- state->includeLevel = 0;
-#endif /* XML_DTD */
-}
-
-#ifdef XML_DTD
-
-void XmlPrologStateInitExternalEntity(PROLOG_STATE *state)
-{
- state->handler = externalSubset0;
- state->documentEntity = 0;
- state->includeLevel = 0;
-}
-
-#endif /* XML_DTD */
diff --git a/ext/xml/expat/xmlrole.h b/ext/xml/expat/xmlrole.h
deleted file mode 100644
index db3ebc8484..0000000000
--- a/ext/xml/expat/xmlrole.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#ifndef XmlRole_INCLUDED
-#define XmlRole_INCLUDED 1
-
-#include "xmltok.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
- XML_ROLE_ERROR = -1,
- XML_ROLE_NONE = 0,
- XML_ROLE_XML_DECL,
- XML_ROLE_INSTANCE_START,
- XML_ROLE_DOCTYPE_NAME,
- XML_ROLE_DOCTYPE_SYSTEM_ID,
- XML_ROLE_DOCTYPE_PUBLIC_ID,
- XML_ROLE_DOCTYPE_INTERNAL_SUBSET,
- XML_ROLE_DOCTYPE_CLOSE,
- XML_ROLE_GENERAL_ENTITY_NAME,
- XML_ROLE_PARAM_ENTITY_NAME,
- XML_ROLE_ENTITY_VALUE,
- XML_ROLE_ENTITY_SYSTEM_ID,
- XML_ROLE_ENTITY_PUBLIC_ID,
- XML_ROLE_ENTITY_COMPLETE,
- XML_ROLE_ENTITY_NOTATION_NAME,
- XML_ROLE_NOTATION_NAME,
- XML_ROLE_NOTATION_SYSTEM_ID,
- XML_ROLE_NOTATION_NO_SYSTEM_ID,
- XML_ROLE_NOTATION_PUBLIC_ID,
- XML_ROLE_ATTRIBUTE_NAME,
- XML_ROLE_ATTRIBUTE_TYPE_CDATA,
- XML_ROLE_ATTRIBUTE_TYPE_ID,
- XML_ROLE_ATTRIBUTE_TYPE_IDREF,
- XML_ROLE_ATTRIBUTE_TYPE_IDREFS,
- XML_ROLE_ATTRIBUTE_TYPE_ENTITY,
- XML_ROLE_ATTRIBUTE_TYPE_ENTITIES,
- XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN,
- XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS,
- XML_ROLE_ATTRIBUTE_ENUM_VALUE,
- XML_ROLE_ATTRIBUTE_NOTATION_VALUE,
- XML_ROLE_ATTLIST_ELEMENT_NAME,
- XML_ROLE_IMPLIED_ATTRIBUTE_VALUE,
- XML_ROLE_REQUIRED_ATTRIBUTE_VALUE,
- XML_ROLE_DEFAULT_ATTRIBUTE_VALUE,
- XML_ROLE_FIXED_ATTRIBUTE_VALUE,
- XML_ROLE_ELEMENT_NAME,
- XML_ROLE_CONTENT_ANY,
- XML_ROLE_CONTENT_EMPTY,
- XML_ROLE_CONTENT_PCDATA,
- XML_ROLE_GROUP_OPEN,
- XML_ROLE_GROUP_CLOSE,
- XML_ROLE_GROUP_CLOSE_REP,
- XML_ROLE_GROUP_CLOSE_OPT,
- XML_ROLE_GROUP_CLOSE_PLUS,
- XML_ROLE_GROUP_CHOICE,
- XML_ROLE_GROUP_SEQUENCE,
- XML_ROLE_CONTENT_ELEMENT,
- XML_ROLE_CONTENT_ELEMENT_REP,
- XML_ROLE_CONTENT_ELEMENT_OPT,
- XML_ROLE_CONTENT_ELEMENT_PLUS,
-#ifdef XML_DTD
- XML_ROLE_TEXT_DECL,
- XML_ROLE_IGNORE_SECT,
- XML_ROLE_INNER_PARAM_ENTITY_REF,
-#endif /* XML_DTD */
- XML_ROLE_PARAM_ENTITY_REF
-};
-
-typedef struct prolog_state {
- int (*handler)(struct prolog_state *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc);
- unsigned level;
-#ifdef XML_DTD
- unsigned includeLevel;
- int documentEntity;
-#endif /* XML_DTD */
-} PROLOG_STATE;
-
-void XmlPrologStateInit(PROLOG_STATE *);
-#ifdef XML_DTD
-void XmlPrologStateInitExternalEntity(PROLOG_STATE *);
-#endif /* XML_DTD */
-
-#define XmlTokenRole(state, tok, ptr, end, enc) \
- (((state)->handler)(state, tok, ptr, end, enc))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XmlRole_INCLUDED */
diff --git a/ext/xml/expat/xmltok.c b/ext/xml/expat/xmltok.c
deleted file mode 100644
index 7fcbf58d15..0000000000
--- a/ext/xml/expat/xmltok.c
+++ /dev/null
@@ -1,1568 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#include "php_compat.h"
-
-#ifdef COMPILED_FROM_DSP
-# include "winconfig.h"
-#else
-# include <php_config.h>
-#endif /* ndef COMPILED_FROM_DSP */
-
-#include "xmltok.h"
-#include "nametab.h"
-
-#ifdef XML_DTD
-#define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok)
-#else
-#define IGNORE_SECTION_TOK_VTABLE /* as nothing */
-#endif
-
-#define VTABLE1 \
- { PREFIX(prologTok), PREFIX(contentTok), \
- PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \
- { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \
- PREFIX(sameName), \
- PREFIX(nameMatchesAscii), \
- PREFIX(nameLength), \
- PREFIX(skipS), \
- PREFIX(getAtts), \
- PREFIX(charRefNumber), \
- PREFIX(predefinedEntityName), \
- PREFIX(updatePosition), \
- PREFIX(isPublicId)
-
-#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16)
-
-#define UCS2_GET_NAMING(pages, hi, lo) \
- (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F)))
-
-/* A 2 byte UTF-8 representation splits the characters 11 bits
-between the bottom 5 and 6 bits of the bytes.
-We need 8 bits to index into pages, 3 bits to add to that index and
-5 bits to generate the mask. */
-#define UTF8_GET_NAMING2(pages, byte) \
- (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \
- + ((((byte)[0]) & 3) << 1) \
- + ((((byte)[1]) >> 5) & 1)] \
- & (1 << (((byte)[1]) & 0x1F)))
-
-/* A 3 byte UTF-8 representation splits the characters 16 bits
-between the bottom 4, 6 and 6 bits of the bytes.
-We need 8 bits to index into pages, 3 bits to add to that index and
-5 bits to generate the mask. */
-#define UTF8_GET_NAMING3(pages, byte) \
- (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \
- + ((((byte)[1]) >> 2) & 0xF)] \
- << 3) \
- + ((((byte)[1]) & 3) << 1) \
- + ((((byte)[2]) >> 5) & 1)] \
- & (1 << (((byte)[2]) & 0x1F)))
-
-#define UTF8_GET_NAMING(pages, p, n) \
- ((n) == 2 \
- ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \
- : ((n) == 3 \
- ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \
- : 0))
-
-#define UTF8_INVALID3(p) \
- ((*p) == 0xED \
- ? (((p)[1] & 0x20) != 0) \
- : ((*p) == 0xEF \
- ? ((p)[1] == 0xBF && ((p)[2] == 0xBF || (p)[2] == 0xBE)) \
- : 0))
-
-#define UTF8_INVALID4(p) ((*p) == 0xF4 && ((p)[1] & 0x30) != 0)
-
-static
-int isNever(const ENCODING *enc, const char *p)
-{
- return 0;
-}
-
-static
-int utf8_isName2(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING2(namePages, (const unsigned char *)p);
-}
-
-static
-int utf8_isName3(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING3(namePages, (const unsigned char *)p);
-}
-
-#define utf8_isName4 isNever
-
-static
-int utf8_isNmstrt2(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p);
-}
-
-static
-int utf8_isNmstrt3(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p);
-}
-
-#define utf8_isNmstrt4 isNever
-
-#define utf8_isInvalid2 isNever
-
-static
-int utf8_isInvalid3(const ENCODING *enc, const char *p)
-{
- return UTF8_INVALID3((const unsigned char *)p);
-}
-
-static
-int utf8_isInvalid4(const ENCODING *enc, const char *p)
-{
- return UTF8_INVALID4((const unsigned char *)p);
-}
-
-struct normal_encoding {
- ENCODING enc;
- unsigned char type[256];
-#ifdef XML_MIN_SIZE
- int (*byteType)(const ENCODING *, const char *);
- int (*isNameMin)(const ENCODING *, const char *);
- int (*isNmstrtMin)(const ENCODING *, const char *);
- int (*byteToAscii)(const ENCODING *, const char *);
- int (*charMatches)(const ENCODING *, const char *, int);
-#endif /* XML_MIN_SIZE */
- int (*isName2)(const ENCODING *, const char *);
- int (*isName3)(const ENCODING *, const char *);
- int (*isName4)(const ENCODING *, const char *);
- int (*isNmstrt2)(const ENCODING *, const char *);
- int (*isNmstrt3)(const ENCODING *, const char *);
- int (*isNmstrt4)(const ENCODING *, const char *);
- int (*isInvalid2)(const ENCODING *, const char *);
- int (*isInvalid3)(const ENCODING *, const char *);
- int (*isInvalid4)(const ENCODING *, const char *);
-};
-
-#ifdef XML_MIN_SIZE
-
-#define STANDARD_VTABLE(E) \
- E ## byteType, \
- E ## isNameMin, \
- E ## isNmstrtMin, \
- E ## byteToAscii, \
- E ## charMatches,
-
-#else
-
-#define STANDARD_VTABLE(E) /* as nothing */
-
-#endif
-
-#define NORMAL_VTABLE(E) \
- E ## isName2, \
- E ## isName3, \
- E ## isName4, \
- E ## isNmstrt2, \
- E ## isNmstrt3, \
- E ## isNmstrt4, \
- E ## isInvalid2, \
- E ## isInvalid3, \
- E ## isInvalid4
-
-static int checkCharRefNumber(int);
-
-#include "xmltok_impl.h"
-#include "ascii.h"
-
-#ifdef XML_MIN_SIZE
-#define sb_isNameMin isNever
-#define sb_isNmstrtMin isNever
-#endif
-
-#ifdef XML_MIN_SIZE
-#define MINBPC(enc) ((enc)->minBytesPerChar)
-#else
-/* minimum bytes per character */
-#define MINBPC(enc) 1
-#endif
-
-#define SB_BYTE_TYPE(enc, p) \
- (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
-
-#ifdef XML_MIN_SIZE
-static
-int sb_byteType(const ENCODING *enc, const char *p)
-{
- return SB_BYTE_TYPE(enc, p);
-}
-#define BYTE_TYPE(enc, p) \
- (((const struct normal_encoding *)(enc))->byteType(enc, p))
-#else
-#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
-#endif
-
-#ifdef XML_MIN_SIZE
-#define BYTE_TO_ASCII(enc, p) \
- (((const struct normal_encoding *)(enc))->byteToAscii(enc, p))
-static
-int sb_byteToAscii(const ENCODING *enc, const char *p)
-{
- return *p;
-}
-#else
-#define BYTE_TO_ASCII(enc, p) (*(p))
-#endif
-
-#define IS_NAME_CHAR(enc, p, n) \
- (((const struct normal_encoding *)(enc))->isName ## n(enc, p))
-#define IS_NMSTRT_CHAR(enc, p, n) \
- (((const struct normal_encoding *)(enc))->isNmstrt ## n(enc, p))
-#define IS_INVALID_CHAR(enc, p, n) \
- (((const struct normal_encoding *)(enc))->isInvalid ## n(enc, p))
-
-#ifdef XML_MIN_SIZE
-#define IS_NAME_CHAR_MINBPC(enc, p) \
- (((const struct normal_encoding *)(enc))->isNameMin(enc, p))
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) \
- (((const struct normal_encoding *)(enc))->isNmstrtMin(enc, p))
-#else
-#define IS_NAME_CHAR_MINBPC(enc, p) (0)
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
-#endif
-
-#ifdef XML_MIN_SIZE
-#define CHAR_MATCHES(enc, p, c) \
- (((const struct normal_encoding *)(enc))->charMatches(enc, p, c))
-static
-int sb_charMatches(const ENCODING *enc, const char *p, int c)
-{
- return *p == c;
-}
-#else
-/* c is an ASCII character */
-#define CHAR_MATCHES(enc, p, c) (*(p) == c)
-#endif
-
-#define PREFIX(ident) normal_ ## ident
-#include "xmltok_impl.c"
-
-#undef MINBPC
-#undef BYTE_TYPE
-#undef BYTE_TO_ASCII
-#undef CHAR_MATCHES
-#undef IS_NAME_CHAR
-#undef IS_NAME_CHAR_MINBPC
-#undef IS_NMSTRT_CHAR
-#undef IS_NMSTRT_CHAR_MINBPC
-#undef IS_INVALID_CHAR
-
-enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */
- UTF8_cval1 = 0x00,
- UTF8_cval2 = 0xc0,
- UTF8_cval3 = 0xe0,
- UTF8_cval4 = 0xf0
-};
-
-static
-void utf8_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- char *to;
- const char *from;
- if (fromLim - *fromP > toLim - *toP) {
- /* Avoid copying partial characters. */
- for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--)
- if (((unsigned char)fromLim[-1] & 0xc0) != 0x80)
- break;
- }
- for (to = *toP, from = *fromP; from != fromLim; from++, to++)
- *to = *from;
- *fromP = from;
- *toP = to;
-}
-
-static
-void utf8_toUtf16(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- unsigned short **toP, const unsigned short *toLim)
-{
- unsigned short *to = *toP;
- const char *from = *fromP;
- while (from != fromLim && to != toLim) {
- switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) {
- case BT_LEAD2:
- *to++ = ((from[0] & 0x1f) << 6) | (from[1] & 0x3f);
- from += 2;
- break;
- case BT_LEAD3:
- *to++ = ((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f);
- from += 3;
- break;
- case BT_LEAD4:
- {
- unsigned long n;
- if (to + 1 == toLim)
- break;
- n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f);
- n -= 0x10000;
- to[0] = (unsigned short)((n >> 10) | 0xD800);
- to[1] = (unsigned short)((n & 0x3FF) | 0xDC00);
- to += 2;
- from += 4;
- }
- break;
- default:
- *to++ = *from++;
- break;
- }
- }
- *fromP = from;
- *toP = to;
-}
-
-#ifdef XML_NS
-static const struct normal_encoding utf8_encoding_ns = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#include "asciitab.h"
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-#endif
-
-static const struct normal_encoding utf8_encoding = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-
-#ifdef XML_NS
-
-static const struct normal_encoding internal_utf8_encoding_ns = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#include "iasciitab.h"
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-
-#endif
-
-static const struct normal_encoding internal_utf8_encoding = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "iasciitab.h"
-#undef BT_COLON
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-
-static
-void latin1_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- for (;;) {
- unsigned char c;
- if (*fromP == fromLim)
- break;
- c = (unsigned char)**fromP;
- if (c & 0x80) {
- if (toLim - *toP < 2)
- break;
- *(*toP)++ = ((c >> 6) | UTF8_cval2);
- *(*toP)++ = ((c & 0x3f) | 0x80);
- (*fromP)++;
- }
- else {
- if (*toP == toLim)
- break;
- *(*toP)++ = *(*fromP)++;
- }
- }
-}
-
-static
-void latin1_toUtf16(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- unsigned short **toP, const unsigned short *toLim)
-{
- while (*fromP != fromLim && *toP != toLim)
- *(*toP)++ = (unsigned char)*(*fromP)++;
-}
-
-#ifdef XML_NS
-
-static const struct normal_encoding latin1_encoding_ns = {
- { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
- {
-#include "asciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(sb_)
-};
-
-#endif
-
-static const struct normal_encoding latin1_encoding = {
- { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(sb_)
-};
-
-static
-void ascii_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- while (*fromP != fromLim && *toP != toLim)
- *(*toP)++ = *(*fromP)++;
-}
-
-#ifdef XML_NS
-
-static const struct normal_encoding ascii_encoding_ns = {
- { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 },
- {
-#include "asciitab.h"
-/* BT_NONXML == 0 */
- },
- STANDARD_VTABLE(sb_)
-};
-
-#endif
-
-static const struct normal_encoding ascii_encoding = {
- { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-/* BT_NONXML == 0 */
- },
- STANDARD_VTABLE(sb_)
-};
-
-static int unicode_byte_type(char hi, char lo)
-{
- switch ((unsigned char)hi) {
- case 0xD8: case 0xD9: case 0xDA: case 0xDB:
- return BT_LEAD4;
- case 0xDC: case 0xDD: case 0xDE: case 0xDF:
- return BT_TRAIL;
- case 0xFF:
- switch ((unsigned char)lo) {
- case 0xFF:
- case 0xFE:
- return BT_NONXML;
- }
- break;
- }
- return BT_NONASCII;
-}
-
-#define DEFINE_UTF16_TO_UTF8(E) \
-static \
-void E ## toUtf8(const ENCODING *enc, \
- const char **fromP, const char *fromLim, \
- char **toP, const char *toLim) \
-{ \
- const char *from; \
- for (from = *fromP; from != fromLim; from += 2) { \
- int plane; \
- unsigned char lo2; \
- unsigned char lo = GET_LO(from); \
- unsigned char hi = GET_HI(from); \
- switch (hi) { \
- case 0: \
- if (lo < 0x80) { \
- if (*toP == toLim) { \
- *fromP = from; \
- return; \
- } \
- *(*toP)++ = lo; \
- break; \
- } \
- /* fall through */ \
- case 0x1: case 0x2: case 0x3: \
- case 0x4: case 0x5: case 0x6: case 0x7: \
- if (toLim - *toP < 2) { \
- *fromP = from; \
- return; \
- } \
- *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \
- *(*toP)++ = ((lo & 0x3f) | 0x80); \
- break; \
- default: \
- if (toLim - *toP < 3) { \
- *fromP = from; \
- return; \
- } \
- /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \
- *(*toP)++ = ((hi >> 4) | UTF8_cval3); \
- *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \
- *(*toP)++ = ((lo & 0x3f) | 0x80); \
- break; \
- case 0xD8: case 0xD9: case 0xDA: case 0xDB: \
- if (toLim - *toP < 4) { \
- *fromP = from; \
- return; \
- } \
- plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \
- *(*toP)++ = ((plane >> 2) | UTF8_cval4); \
- *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \
- from += 2; \
- lo2 = GET_LO(from); \
- *(*toP)++ = (((lo & 0x3) << 4) \
- | ((GET_HI(from) & 0x3) << 2) \
- | (lo2 >> 6) \
- | 0x80); \
- *(*toP)++ = ((lo2 & 0x3f) | 0x80); \
- break; \
- } \
- } \
- *fromP = from; \
-}
-
-#define DEFINE_UTF16_TO_UTF16(E) \
-static \
-void E ## toUtf16(const ENCODING *enc, \
- const char **fromP, const char *fromLim, \
- unsigned short **toP, const unsigned short *toLim) \
-{ \
- /* Avoid copying first half only of surrogate */ \
- if (fromLim - *fromP > ((toLim - *toP) << 1) \
- && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \
- fromLim -= 2; \
- for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \
- *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \
-}
-
-#define SET2(ptr, ch) \
- (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8)))
-#define GET_LO(ptr) ((unsigned char)(ptr)[0])
-#define GET_HI(ptr) ((unsigned char)(ptr)[1])
-
-DEFINE_UTF16_TO_UTF8(little2_)
-DEFINE_UTF16_TO_UTF16(little2_)
-
-#undef SET2
-#undef GET_LO
-#undef GET_HI
-
-#define SET2(ptr, ch) \
- (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF)))
-#define GET_LO(ptr) ((unsigned char)(ptr)[1])
-#define GET_HI(ptr) ((unsigned char)(ptr)[0])
-
-DEFINE_UTF16_TO_UTF8(big2_)
-DEFINE_UTF16_TO_UTF16(big2_)
-
-#undef SET2
-#undef GET_LO
-#undef GET_HI
-
-#define LITTLE2_BYTE_TYPE(enc, p) \
- ((p)[1] == 0 \
- ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \
- : unicode_byte_type((p)[1], (p)[0]))
-#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1)
-#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c)
-#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
-#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
-
-#ifdef XML_MIN_SIZE
-
-static
-int little2_byteType(const ENCODING *enc, const char *p)
-{
- return LITTLE2_BYTE_TYPE(enc, p);
-}
-
-static
-int little2_byteToAscii(const ENCODING *enc, const char *p)
-{
- return LITTLE2_BYTE_TO_ASCII(enc, p);
-}
-
-static
-int little2_charMatches(const ENCODING *enc, const char *p, int c)
-{
- return LITTLE2_CHAR_MATCHES(enc, p, c);
-}
-
-static
-int little2_isNameMin(const ENCODING *enc, const char *p)
-{
- return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p);
-}
-
-static
-int little2_isNmstrtMin(const ENCODING *enc, const char *p)
-{
- return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p);
-}
-
-#undef VTABLE
-#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16
-
-#else /* not XML_MIN_SIZE */
-
-#undef PREFIX
-#define PREFIX(ident) little2_ ## ident
-#define MINBPC(enc) 2
-/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
-#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
-#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p)
-#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c)
-#define IS_NAME_CHAR(enc, p, n) 0
-#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p)
-#define IS_NMSTRT_CHAR(enc, p, n) (0)
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p)
-
-#include "xmltok_impl.c"
-
-#undef MINBPC
-#undef BYTE_TYPE
-#undef BYTE_TO_ASCII
-#undef CHAR_MATCHES
-#undef IS_NAME_CHAR
-#undef IS_NAME_CHAR_MINBPC
-#undef IS_NMSTRT_CHAR
-#undef IS_NMSTRT_CHAR_MINBPC
-#undef IS_INVALID_CHAR
-
-#endif /* not XML_MIN_SIZE */
-
-#ifdef XML_NS
-
-static const struct normal_encoding little2_encoding_ns = {
- { VTABLE, 2, 0,
-#if XML_BYTE_ORDER == 12
- 1
-#else
- 0
-#endif
- },
- {
-#include "asciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#endif
-
-static const struct normal_encoding little2_encoding = {
- { VTABLE, 2, 0,
-#if XML_BYTE_ORDER == 12
- 1
-#else
- 0
-#endif
- },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#if XML_BYTE_ORDER != 21
-
-#ifdef XML_NS
-
-static const struct normal_encoding internal_little2_encoding_ns = {
- { VTABLE, 2, 0, 1 },
- {
-#include "iasciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#endif
-
-static const struct normal_encoding internal_little2_encoding = {
- { VTABLE, 2, 0, 1 },
- {
-#define BT_COLON BT_NMSTRT
-#include "iasciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#endif
-
-
-#define BIG2_BYTE_TYPE(enc, p) \
- ((p)[0] == 0 \
- ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \
- : unicode_byte_type((p)[0], (p)[1]))
-#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1)
-#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c)
-#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
-#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1])
-
-#ifdef XML_MIN_SIZE
-
-static
-int big2_byteType(const ENCODING *enc, const char *p)
-{
- return BIG2_BYTE_TYPE(enc, p);
-}
-
-static
-int big2_byteToAscii(const ENCODING *enc, const char *p)
-{
- return BIG2_BYTE_TO_ASCII(enc, p);
-}
-
-static
-int big2_charMatches(const ENCODING *enc, const char *p, int c)
-{
- return BIG2_CHAR_MATCHES(enc, p, c);
-}
-
-static
-int big2_isNameMin(const ENCODING *enc, const char *p)
-{
- return BIG2_IS_NAME_CHAR_MINBPC(enc, p);
-}
-
-static
-int big2_isNmstrtMin(const ENCODING *enc, const char *p)
-{
- return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p);
-}
-
-#undef VTABLE
-#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16
-
-#else /* not XML_MIN_SIZE */
-
-#undef PREFIX
-#define PREFIX(ident) big2_ ## ident
-#define MINBPC(enc) 2
-/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
-#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
-#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p)
-#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c)
-#define IS_NAME_CHAR(enc, p, n) 0
-#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p)
-#define IS_NMSTRT_CHAR(enc, p, n) (0)
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p)
-
-#include "xmltok_impl.c"
-
-#undef MINBPC
-#undef BYTE_TYPE
-#undef BYTE_TO_ASCII
-#undef CHAR_MATCHES
-#undef IS_NAME_CHAR
-#undef IS_NAME_CHAR_MINBPC
-#undef IS_NMSTRT_CHAR
-#undef IS_NMSTRT_CHAR_MINBPC
-#undef IS_INVALID_CHAR
-
-#endif /* not XML_MIN_SIZE */
-
-#ifdef XML_NS
-
-static const struct normal_encoding big2_encoding_ns = {
- { VTABLE, 2, 0,
-#if XML_BYTE_ORDER == 21
- 1
-#else
- 0
-#endif
- },
- {
-#include "asciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#endif
-
-static const struct normal_encoding big2_encoding = {
- { VTABLE, 2, 0,
-#if XML_BYTE_ORDER == 21
- 1
-#else
- 0
-#endif
- },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#if XML_BYTE_ORDER != 12
-
-#ifdef XML_NS
-
-static const struct normal_encoding internal_big2_encoding_ns = {
- { VTABLE, 2, 0, 1 },
- {
-#include "iasciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#endif
-
-static const struct normal_encoding internal_big2_encoding = {
- { VTABLE, 2, 0, 1 },
- {
-#define BT_COLON BT_NMSTRT
-#include "iasciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#endif
-
-#undef PREFIX
-
-static
-int streqci(const char *s1, const char *s2)
-{
- for (;;) {
- char c1 = *s1++;
- char c2 = *s2++;
- if (ASCII_a <= c1 && c1 <= ASCII_z)
- c1 += ASCII_A - ASCII_a;
- if (ASCII_a <= c2 && c2 <= ASCII_z)
- c2 += ASCII_A - ASCII_a;
- if (c1 != c2)
- return 0;
- if (!c1)
- break;
- }
- return 1;
-}
-
-static
-void initUpdatePosition(const ENCODING *enc, const char *ptr,
- const char *end, POSITION *pos)
-{
- normal_updatePosition(&utf8_encoding.enc, ptr, end, pos);
-}
-
-static
-int toAscii(const ENCODING *enc, const char *ptr, const char *end)
-{
- char buf[1];
- char *p = buf;
- XmlUtf8Convert(enc, &ptr, end, &p, p + 1);
- if (p == buf)
- return -1;
- else
- return buf[0];
-}
-
-static
-int isSpace(int c)
-{
- switch (c) {
- case 0x20:
- case 0xD:
- case 0xA:
- case 0x9:
- return 1;
- }
- return 0;
-}
-
-/* Return 1 if there's just optional white space
-or there's an S followed by name=val. */
-static
-int parsePseudoAttribute(const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **namePtr,
- const char **nameEndPtr,
- const char **valPtr,
- const char **nextTokPtr)
-{
- int c;
- char open;
- if (ptr == end) {
- *namePtr = 0;
- return 1;
- }
- if (!isSpace(toAscii(enc, ptr, end))) {
- *nextTokPtr = ptr;
- return 0;
- }
- do {
- ptr += enc->minBytesPerChar;
- } while (isSpace(toAscii(enc, ptr, end)));
- if (ptr == end) {
- *namePtr = 0;
- return 1;
- }
- *namePtr = ptr;
- for (;;) {
- c = toAscii(enc, ptr, end);
- if (c == -1) {
- *nextTokPtr = ptr;
- return 0;
- }
- if (c == ASCII_EQUALS) {
- *nameEndPtr = ptr;
- break;
- }
- if (isSpace(c)) {
- *nameEndPtr = ptr;
- do {
- ptr += enc->minBytesPerChar;
- } while (isSpace(c = toAscii(enc, ptr, end)));
- if (c != ASCII_EQUALS) {
- *nextTokPtr = ptr;
- return 0;
- }
- break;
- }
- ptr += enc->minBytesPerChar;
- }
- if (ptr == *namePtr) {
- *nextTokPtr = ptr;
- return 0;
- }
- ptr += enc->minBytesPerChar;
- c = toAscii(enc, ptr, end);
- while (isSpace(c)) {
- ptr += enc->minBytesPerChar;
- c = toAscii(enc, ptr, end);
- }
- if (c != ASCII_QUOT && c != ASCII_APOS) {
- *nextTokPtr = ptr;
- return 0;
- }
- open = c;
- ptr += enc->minBytesPerChar;
- *valPtr = ptr;
- for (;; ptr += enc->minBytesPerChar) {
- c = toAscii(enc, ptr, end);
- if (c == open)
- break;
- if (!(ASCII_a <= c && c <= ASCII_z)
- && !(ASCII_A <= c && c <= ASCII_Z)
- && !(ASCII_0 <= c && c <= ASCII_9)
- && c != ASCII_PERIOD
- && c != ASCII_MINUS
- && c != ASCII_UNDERSCORE) {
- *nextTokPtr = ptr;
- return 0;
- }
- }
- *nextTokPtr = ptr + enc->minBytesPerChar;
- return 1;
-}
-
-static const char KW_version[] = {
- ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0'
-};
-
-static const char KW_encoding[] = {
- ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0'
-};
-
-static const char KW_standalone[] = {
- ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0'
-};
-
-static const char KW_yes[] = {
- ASCII_y, ASCII_e, ASCII_s, '\0'
-};
-
-static const char KW_no[] = {
- ASCII_n, ASCII_o, '\0'
-};
-
-static
-int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *,
- const char *,
- const char *),
- int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingName,
- const ENCODING **encoding,
- int *standalone)
-{
- const char *val = 0;
- const char *name = 0;
- const char *nameEnd = 0;
- ptr += 5 * enc->minBytesPerChar;
- end -= 2 * enc->minBytesPerChar;
- if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) || !name) {
- *badPtr = ptr;
- return 0;
- }
- if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) {
- if (!isGeneralTextEntity) {
- *badPtr = name;
- return 0;
- }
- }
- else {
- if (versionPtr)
- *versionPtr = val;
- if (versionEndPtr)
- *versionEndPtr = ptr;
- if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) {
- *badPtr = ptr;
- return 0;
- }
- if (!name) {
- if (isGeneralTextEntity) {
- /* a TextDecl must have an EncodingDecl */
- *badPtr = ptr;
- return 0;
- }
- return 1;
- }
- }
- if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) {
- int c = toAscii(enc, val, end);
- if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) {
- *badPtr = val;
- return 0;
- }
- if (encodingName)
- *encodingName = val;
- if (encoding)
- *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar);
- if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) {
- *badPtr = ptr;
- return 0;
- }
- if (!name)
- return 1;
- }
- if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) || isGeneralTextEntity) {
- *badPtr = name;
- return 0;
- }
- if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) {
- if (standalone)
- *standalone = 1;
- }
- else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) {
- if (standalone)
- *standalone = 0;
- }
- else {
- *badPtr = val;
- return 0;
- }
- while (isSpace(toAscii(enc, ptr, end)))
- ptr += enc->minBytesPerChar;
- if (ptr != end) {
- *badPtr = ptr;
- return 0;
- }
- return 1;
-}
-
-static
-int checkCharRefNumber(int result)
-{
- switch (result >> 8) {
- case 0xD8: case 0xD9: case 0xDA: case 0xDB:
- case 0xDC: case 0xDD: case 0xDE: case 0xDF:
- return -1;
- case 0:
- if (latin1_encoding.type[result] == BT_NONXML)
- return -1;
- break;
- case 0xFF:
- if (result == 0xFFFE || result == 0xFFFF)
- return -1;
- break;
- }
- return result;
-}
-
-int XmlUtf8Encode(int c, char *buf)
-{
- enum {
- /* minN is minimum legal resulting value for N byte sequence */
- min2 = 0x80,
- min3 = 0x800,
- min4 = 0x10000
- };
-
- if (c < 0)
- return 0;
- if (c < min2) {
- buf[0] = (c | UTF8_cval1);
- return 1;
- }
- if (c < min3) {
- buf[0] = ((c >> 6) | UTF8_cval2);
- buf[1] = ((c & 0x3f) | 0x80);
- return 2;
- }
- if (c < min4) {
- buf[0] = ((c >> 12) | UTF8_cval3);
- buf[1] = (((c >> 6) & 0x3f) | 0x80);
- buf[2] = ((c & 0x3f) | 0x80);
- return 3;
- }
- if (c < 0x110000) {
- buf[0] = ((c >> 18) | UTF8_cval4);
- buf[1] = (((c >> 12) & 0x3f) | 0x80);
- buf[2] = (((c >> 6) & 0x3f) | 0x80);
- buf[3] = ((c & 0x3f) | 0x80);
- return 4;
- }
- return 0;
-}
-
-int XmlUtf16Encode(int charNum, unsigned short *buf)
-{
- if (charNum < 0)
- return 0;
- if (charNum < 0x10000) {
- buf[0] = charNum;
- return 1;
- }
- if (charNum < 0x110000) {
- charNum -= 0x10000;
- buf[0] = (charNum >> 10) + 0xD800;
- buf[1] = (charNum & 0x3FF) + 0xDC00;
- return 2;
- }
- return 0;
-}
-
-struct unknown_encoding {
- struct normal_encoding normal;
- int (*convert)(void *userData, const char *p);
- void *userData;
- unsigned short utf16[256];
- char utf8[256][4];
-};
-
-int XmlSizeOfUnknownEncoding(void)
-{
- return sizeof(struct unknown_encoding);
-}
-
-static
-int unknown_isName(const ENCODING *enc, const char *p)
-{
- int c = ((const struct unknown_encoding *)enc)
- ->convert(((const struct unknown_encoding *)enc)->userData, p);
- if (c & ~0xFFFF)
- return 0;
- return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF);
-}
-
-static
-int unknown_isNmstrt(const ENCODING *enc, const char *p)
-{
- int c = ((const struct unknown_encoding *)enc)
- ->convert(((const struct unknown_encoding *)enc)->userData, p);
- if (c & ~0xFFFF)
- return 0;
- return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF);
-}
-
-static
-int unknown_isInvalid(const ENCODING *enc, const char *p)
-{
- int c = ((const struct unknown_encoding *)enc)
- ->convert(((const struct unknown_encoding *)enc)->userData, p);
- return (c & ~0xFFFF) || checkCharRefNumber(c) < 0;
-}
-
-static
-void unknown_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- char buf[XML_UTF8_ENCODE_MAX];
- for (;;) {
- const char *utf8;
- int n;
- if (*fromP == fromLim)
- break;
- utf8 = ((const struct unknown_encoding *)enc)->utf8[(unsigned char)**fromP];
- n = *utf8++;
- if (n == 0) {
- int c = ((const struct unknown_encoding *)enc)
- ->convert(((const struct unknown_encoding *)enc)->userData, *fromP);
- n = XmlUtf8Encode(c, buf);
- if (n > toLim - *toP)
- break;
- utf8 = buf;
- *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP]
- - (BT_LEAD2 - 2);
- }
- else {
- if (n > toLim - *toP)
- break;
- (*fromP)++;
- }
- do {
- *(*toP)++ = *utf8++;
- } while (--n != 0);
- }
-}
-
-static
-void unknown_toUtf16(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- unsigned short **toP, const unsigned short *toLim)
-{
- while (*fromP != fromLim && *toP != toLim) {
- unsigned short c
- = ((const struct unknown_encoding *)enc)->utf16[(unsigned char)**fromP];
- if (c == 0) {
- c = (unsigned short)((const struct unknown_encoding *)enc)
- ->convert(((const struct unknown_encoding *)enc)->userData, *fromP);
- *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP]
- - (BT_LEAD2 - 2);
- }
- else
- (*fromP)++;
- *(*toP)++ = c;
- }
-}
-
-ENCODING *
-XmlInitUnknownEncoding(void *mem,
- int *table,
- int (*convert)(void *userData, const char *p),
- void *userData)
-{
- int i;
- struct unknown_encoding *e = mem;
- for (i = 0; i < (int)sizeof(struct normal_encoding); i++)
- ((char *)mem)[i] = ((char *)&latin1_encoding)[i];
- for (i = 0; i < 128; i++)
- if (latin1_encoding.type[i] != BT_OTHER
- && latin1_encoding.type[i] != BT_NONXML
- && table[i] != i)
- return 0;
- for (i = 0; i < 256; i++) {
- int c = table[i];
- if (c == -1) {
- e->normal.type[i] = BT_MALFORM;
- /* This shouldn't really get used. */
- e->utf16[i] = 0xFFFF;
- e->utf8[i][0] = 1;
- e->utf8[i][1] = 0;
- }
- else if (c < 0) {
- if (c < -4)
- return 0;
- e->normal.type[i] = BT_LEAD2 - (c + 2);
- e->utf8[i][0] = 0;
- e->utf16[i] = 0;
- }
- else if (c < 0x80) {
- if (latin1_encoding.type[c] != BT_OTHER
- && latin1_encoding.type[c] != BT_NONXML
- && c != i)
- return 0;
- e->normal.type[i] = latin1_encoding.type[c];
- e->utf8[i][0] = 1;
- e->utf8[i][1] = (char)c;
- e->utf16[i] = c == 0 ? 0xFFFF : c;
- }
- else if (checkCharRefNumber(c) < 0) {
- e->normal.type[i] = BT_NONXML;
- /* This shouldn't really get used. */
- e->utf16[i] = 0xFFFF;
- e->utf8[i][0] = 1;
- e->utf8[i][1] = 0;
- }
- else {
- if (c > 0xFFFF)
- return 0;
- if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff))
- e->normal.type[i] = BT_NMSTRT;
- else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff))
- e->normal.type[i] = BT_NAME;
- else
- e->normal.type[i] = BT_OTHER;
- e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1);
- e->utf16[i] = c;
- }
- }
- e->userData = userData;
- e->convert = convert;
- if (convert) {
- e->normal.isName2 = unknown_isName;
- e->normal.isName3 = unknown_isName;
- e->normal.isName4 = unknown_isName;
- e->normal.isNmstrt2 = unknown_isNmstrt;
- e->normal.isNmstrt3 = unknown_isNmstrt;
- e->normal.isNmstrt4 = unknown_isNmstrt;
- e->normal.isInvalid2 = unknown_isInvalid;
- e->normal.isInvalid3 = unknown_isInvalid;
- e->normal.isInvalid4 = unknown_isInvalid;
- }
- e->normal.enc.utf8Convert = unknown_toUtf8;
- e->normal.enc.utf16Convert = unknown_toUtf16;
- return &(e->normal.enc);
-}
-
-/* If this enumeration is changed, getEncodingIndex and encodings
-must also be changed. */
-enum {
- UNKNOWN_ENC = -1,
- ISO_8859_1_ENC = 0,
- US_ASCII_ENC,
- UTF_8_ENC,
- UTF_16_ENC,
- UTF_16BE_ENC,
- UTF_16LE_ENC,
- /* must match encodingNames up to here */
- NO_ENC
-};
-
-static const char KW_ISO_8859_1[] = {
- ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0'
-};
-static const char KW_US_ASCII[] = {
- ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, '\0'
-};
-static const char KW_UTF_8[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0'
-};
-static const char KW_UTF_16[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0'
-};
-static const char KW_UTF_16BE[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, '\0'
-};
-static const char KW_UTF_16LE[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, '\0'
-};
-
-static
-int getEncodingIndex(const char *name)
-{
- static const char *encodingNames[] = {
- KW_ISO_8859_1,
- KW_US_ASCII,
- KW_UTF_8,
- KW_UTF_16,
- KW_UTF_16BE,
- KW_UTF_16LE,
- };
- int i;
- if (name == 0)
- return NO_ENC;
- for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++)
- if (streqci(name, encodingNames[i]))
- return i;
- return UNKNOWN_ENC;
-}
-
-/* For binary compatibility, we store the index of the encoding specified
-at initialization in the isUtf16 member. */
-
-#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
-#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i)
-
-/* This is what detects the encoding.
-encodingTable maps from encoding indices to encodings;
-INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding;
-state is XML_CONTENT_STATE if we're parsing an external text entity,
-and XML_PROLOG_STATE otherwise.
-*/
-
-
-static
-int initScan(const ENCODING **encodingTable,
- const INIT_ENCODING *enc,
- int state,
- const char *ptr,
- const char *end,
- const char **nextTokPtr)
-{
- const ENCODING **encPtr;
-
- if (ptr == end)
- return XML_TOK_NONE;
- encPtr = enc->encPtr;
- if (ptr + 1 == end) {
- /* only a single byte available for auto-detection */
-#ifndef XML_DTD /* FIXME */
- /* a well-formed document entity must have more than one byte */
- if (state != XML_CONTENT_STATE)
- return XML_TOK_PARTIAL;
-#endif
- /* so we're parsing an external text entity... */
- /* if UTF-16 was externally specified, then we need at least 2 bytes */
- switch (INIT_ENC_INDEX(enc)) {
- case UTF_16_ENC:
- case UTF_16LE_ENC:
- case UTF_16BE_ENC:
- return XML_TOK_PARTIAL;
- }
- switch ((unsigned char)*ptr) {
- case 0xFE:
- case 0xFF:
- case 0xEF: /* possibly first byte of UTF-8 BOM */
- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
- && state == XML_CONTENT_STATE)
- break;
- /* fall through */
- case 0x00:
- case 0x3C:
- return XML_TOK_PARTIAL;
- }
- }
- else {
- switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) {
- case 0xFEFF:
- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
- && state == XML_CONTENT_STATE)
- break;
- *nextTokPtr = ptr + 2;
- *encPtr = encodingTable[UTF_16BE_ENC];
- return XML_TOK_BOM;
- /* 00 3C is handled in the default case */
- case 0x3C00:
- if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC
- || INIT_ENC_INDEX(enc) == UTF_16_ENC)
- && state == XML_CONTENT_STATE)
- break;
- *encPtr = encodingTable[UTF_16LE_ENC];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
- case 0xFFFE:
- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
- && state == XML_CONTENT_STATE)
- break;
- *nextTokPtr = ptr + 2;
- *encPtr = encodingTable[UTF_16LE_ENC];
- return XML_TOK_BOM;
- case 0xEFBB:
- /* Maybe a UTF-8 BOM (EF BB BF) */
- /* If there's an explicitly specified (external) encoding
- of ISO-8859-1 or some flavour of UTF-16
- and this is an external text entity,
- don't look for the BOM,
- because it might be a legal data. */
- if (state == XML_CONTENT_STATE) {
- int e = INIT_ENC_INDEX(enc);
- if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC)
- break;
- }
- if (ptr + 2 == end)
- return XML_TOK_PARTIAL;
- if ((unsigned char)ptr[2] == 0xBF) {
- *nextTokPtr = ptr + 3;
- *encPtr = encodingTable[UTF_8_ENC];
- return XML_TOK_BOM;
- }
- break;
- default:
- if (ptr[0] == '\0') {
- /* 0 isn't a legal data character. Furthermore a document entity can only
- start with ASCII characters. So the only way this can fail to be big-endian
- UTF-16 if it it's an external parsed general entity that's labelled as
- UTF-16LE. */
- if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC)
- break;
- *encPtr = encodingTable[UTF_16BE_ENC];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
- }
- else if (ptr[1] == '\0') {
- /* We could recover here in the case:
- - parsing an external entity
- - second byte is 0
- - no externally specified encoding
- - no encoding declaration
- by assuming UTF-16LE. But we don't, because this would mean when
- presented just with a single byte, we couldn't reliably determine
- whether we needed further bytes. */
- if (state == XML_CONTENT_STATE)
- break;
- *encPtr = encodingTable[UTF_16LE_ENC];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
- }
- break;
- }
- }
- *encPtr = encodingTable[INIT_ENC_INDEX(enc)];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
-}
-
-
-#define NS(x) x
-#define ns(x) x
-#include "xmltok_ns.c"
-#undef NS
-#undef ns
-
-#ifdef XML_NS
-
-#define NS(x) x ## NS
-#define ns(x) x ## _ns
-
-#include "xmltok_ns.c"
-
-#undef NS
-#undef ns
-
-ENCODING *
-XmlInitUnknownEncodingNS(void *mem,
- int *table,
- int (*convert)(void *userData, const char *p),
- void *userData)
-{
- ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData);
- if (enc)
- ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON;
- return enc;
-}
-
-#endif /* XML_NS */
diff --git a/ext/xml/expat/xmltok.h b/ext/xml/expat/xmltok.h
deleted file mode 100644
index 8b02324c38..0000000000
--- a/ext/xml/expat/xmltok.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#ifndef XmlTok_INCLUDED
-#define XmlTok_INCLUDED 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The following token may be returned by XmlContentTok */
-#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of
- illegal ]]> sequence */
-/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
-#define XML_TOK_NONE -4 /* The string to be scanned is empty */
-#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan;
- might be part of CRLF sequence */
-#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
-#define XML_TOK_PARTIAL -1 /* only part of a token */
-#define XML_TOK_INVALID 0
-
-/* The following tokens are returned by XmlContentTok; some are also
- returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok */
-
-#define XML_TOK_START_TAG_WITH_ATTS 1
-#define XML_TOK_START_TAG_NO_ATTS 2
-#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
-#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
-#define XML_TOK_END_TAG 5
-#define XML_TOK_DATA_CHARS 6
-#define XML_TOK_DATA_NEWLINE 7
-#define XML_TOK_CDATA_SECT_OPEN 8
-#define XML_TOK_ENTITY_REF 9
-#define XML_TOK_CHAR_REF 10 /* numeric character reference */
-
-/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
-#define XML_TOK_PI 11 /* processing instruction */
-#define XML_TOK_XML_DECL 12 /* XML decl or text decl */
-#define XML_TOK_COMMENT 13
-#define XML_TOK_BOM 14 /* Byte order mark */
-
-/* The following tokens are returned only by XmlPrologTok */
-#define XML_TOK_PROLOG_S 15
-#define XML_TOK_DECL_OPEN 16 /* <!foo */
-#define XML_TOK_DECL_CLOSE 17 /* > */
-#define XML_TOK_NAME 18
-#define XML_TOK_NMTOKEN 19
-#define XML_TOK_POUND_NAME 20 /* #name */
-#define XML_TOK_OR 21 /* | */
-#define XML_TOK_PERCENT 22
-#define XML_TOK_OPEN_PAREN 23
-#define XML_TOK_CLOSE_PAREN 24
-#define XML_TOK_OPEN_BRACKET 25
-#define XML_TOK_CLOSE_BRACKET 26
-#define XML_TOK_LITERAL 27
-#define XML_TOK_PARAM_ENTITY_REF 28
-#define XML_TOK_INSTANCE_START 29
-
-/* The following occur only in element type declarations */
-#define XML_TOK_NAME_QUESTION 30 /* name? */
-#define XML_TOK_NAME_ASTERISK 31 /* name* */
-#define XML_TOK_NAME_PLUS 32 /* name+ */
-#define XML_TOK_COND_SECT_OPEN 33 /* <![ */
-#define XML_TOK_COND_SECT_CLOSE 34 /* ]]> */
-#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
-#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
-#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */
-#define XML_TOK_COMMA 38
-
-/* The following token is returned only by XmlAttributeValueTok */
-#define XML_TOK_ATTRIBUTE_VALUE_S 39
-
-/* The following token is returned only by XmlCdataSectionTok */
-#define XML_TOK_CDATA_SECT_CLOSE 40
-
-/* With namespace processing this is returned by XmlPrologTok
- for a name with a colon. */
-#define XML_TOK_PREFIXED_NAME 41
-
-#ifdef XML_DTD
-#define XML_TOK_IGNORE_SECT 42
-#endif /* XML_DTD */
-
-#ifdef XML_DTD
-#define XML_N_STATES 4
-#else /* not XML_DTD */
-#define XML_N_STATES 3
-#endif /* not XML_DTD */
-
-#define XML_PROLOG_STATE 0
-#define XML_CONTENT_STATE 1
-#define XML_CDATA_SECTION_STATE 2
-#ifdef XML_DTD
-#define XML_IGNORE_SECTION_STATE 3
-#endif /* XML_DTD */
-
-#define XML_N_LITERAL_TYPES 2
-#define XML_ATTRIBUTE_VALUE_LITERAL 0
-#define XML_ENTITY_VALUE_LITERAL 1
-
-/* The size of the buffer passed to XmlUtf8Encode must be at least this. */
-#define XML_UTF8_ENCODE_MAX 4
-/* The size of the buffer passed to XmlUtf16Encode must be at least this. */
-#define XML_UTF16_ENCODE_MAX 2
-
-typedef struct position {
- /* first line and first column are 0 not 1 */
- unsigned long lineNumber;
- unsigned long columnNumber;
-} POSITION;
-
-typedef struct {
- const char *name;
- const char *valuePtr;
- const char *valueEnd;
- char normalized;
-} ATTRIBUTE;
-
-struct encoding;
-typedef struct encoding ENCODING;
-
-struct encoding {
- int (*scanners[XML_N_STATES])(const ENCODING *,
- const char *,
- const char *,
- const char **);
- int (*literalScanners[XML_N_LITERAL_TYPES])(const ENCODING *,
- const char *,
- const char *,
- const char **);
- int (*sameName)(const ENCODING *,
- const char *, const char *);
- int (*nameMatchesAscii)(const ENCODING *,
- const char *, const char *, const char *);
- int (*nameLength)(const ENCODING *, const char *);
- const char *(*skipS)(const ENCODING *, const char *);
- int (*getAtts)(const ENCODING *enc, const char *ptr,
- int attsMax, ATTRIBUTE *atts);
- int (*charRefNumber)(const ENCODING *enc, const char *ptr);
- int (*predefinedEntityName)(const ENCODING *, const char *, const char *);
- void (*updatePosition)(const ENCODING *,
- const char *ptr,
- const char *end,
- POSITION *);
- int (*isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
- const char **badPtr);
- void (*utf8Convert)(const ENCODING *enc,
- const char **fromP,
- const char *fromLim,
- char **toP,
- const char *toLim);
- void (*utf16Convert)(const ENCODING *enc,
- const char **fromP,
- const char *fromLim,
- unsigned short **toP,
- const unsigned short *toLim);
- int minBytesPerChar;
- char isUtf8;
- char isUtf16;
-};
-
-/*
-Scan the string starting at ptr until the end of the next complete token,
-but do not scan past eptr. Return an integer giving the type of token.
-
-Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set.
-
-Return XML_TOK_PARTIAL when the string does not contain a complete token;
-nextTokPtr will not be set.
-
-Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr
-will be set to point to the character which made the token invalid.
-
-Otherwise the string starts with a valid token; nextTokPtr will be set to point
-to the character following the end of that token.
-
-Each data character counts as a single token, but adjacent data characters
-may be returned together. Similarly for characters in the prolog outside
-literals, comments and processing instructions.
-*/
-
-
-#define XmlTok(enc, state, ptr, end, nextTokPtr) \
- (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
-
-#define XmlPrologTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
-
-#define XmlContentTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr)
-
-#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr)
-
-#ifdef XML_DTD
-
-#define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr)
-
-#endif /* XML_DTD */
-
-/* This is used for performing a 2nd-level tokenization on
-the content of a literal that has already been returned by XmlTok. */
-
-#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
- (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
-
-#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \
- XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr)
-
-#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \
- XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
-
-#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2))
-
-#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \
- (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
-
-#define XmlNameLength(enc, ptr) \
- (((enc)->nameLength)(enc, ptr))
-
-#define XmlSkipS(enc, ptr) \
- (((enc)->skipS)(enc, ptr))
-
-#define XmlGetAttributes(enc, ptr, attsMax, atts) \
- (((enc)->getAtts)(enc, ptr, attsMax, atts))
-
-#define XmlCharRefNumber(enc, ptr) \
- (((enc)->charRefNumber)(enc, ptr))
-
-#define XmlPredefinedEntityName(enc, ptr, end) \
- (((enc)->predefinedEntityName)(enc, ptr, end))
-
-#define XmlUpdatePosition(enc, ptr, end, pos) \
- (((enc)->updatePosition)(enc, ptr, end, pos))
-
-#define XmlIsPublicId(enc, ptr, end, badPtr) \
- (((enc)->isPublicId)(enc, ptr, end, badPtr))
-
-#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \
- (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
-
-#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \
- (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim))
-
-typedef struct {
- ENCODING initEnc;
- const ENCODING **encPtr;
-} INIT_ENCODING;
-
-int XmlParseXmlDecl(int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingNamePtr,
- const ENCODING **namedEncodingPtr,
- int *standalonePtr);
-
-int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name);
-const ENCODING *XmlGetUtf8InternalEncoding(void);
-const ENCODING *XmlGetUtf16InternalEncoding(void);
-int XmlUtf8Encode(int charNumber, char *buf);
-int XmlUtf16Encode(int charNumber, unsigned short *buf);
-
-int XmlSizeOfUnknownEncoding(void);
-ENCODING *
-XmlInitUnknownEncoding(void *mem,
- int *table,
- int (*conv)(void *userData, const char *p),
- void *userData);
-
-int XmlParseXmlDeclNS(int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingNamePtr,
- const ENCODING **namedEncodingPtr,
- int *standalonePtr);
-int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name);
-const ENCODING *XmlGetUtf8InternalEncodingNS(void);
-const ENCODING *XmlGetUtf16InternalEncodingNS(void);
-ENCODING *
-XmlInitUnknownEncodingNS(void *mem,
- int *table,
- int (*conv)(void *userData, const char *p),
- void *userData);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XmlTok_INCLUDED */
diff --git a/ext/xml/expat/xmltok_impl.c b/ext/xml/expat/xmltok_impl.c
deleted file mode 100644
index 70131c0fcc..0000000000
--- a/ext/xml/expat/xmltok_impl.c
+++ /dev/null
@@ -1,1770 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-#include "php_compat.h"
-
-#ifndef IS_INVALID_CHAR
-#define IS_INVALID_CHAR(enc, ptr, n) (0)
-#endif
-
-#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (IS_INVALID_CHAR(enc, ptr, n)) { \
- *(nextTokPtr) = (ptr); \
- return XML_TOK_INVALID; \
- } \
- ptr += n; \
- break;
-
-#define INVALID_CASES(ptr, nextTokPtr) \
- INVALID_LEAD_CASE(2, ptr, nextTokPtr) \
- INVALID_LEAD_CASE(3, ptr, nextTokPtr) \
- INVALID_LEAD_CASE(4, ptr, nextTokPtr) \
- case BT_NONXML: \
- case BT_MALFORM: \
- case BT_TRAIL: \
- *(nextTokPtr) = (ptr); \
- return XML_TOK_INVALID;
-
-#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (!IS_NAME_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- ptr += n; \
- break;
-
-#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \
- case BT_NONASCII: \
- if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- case BT_NMSTRT: \
- case BT_HEX: \
- case BT_DIGIT: \
- case BT_NAME: \
- case BT_MINUS: \
- ptr += MINBPC(enc); \
- break; \
- CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \
- CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \
- CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
-
-#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- ptr += n; \
- break;
-
-#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \
- case BT_NONASCII: \
- if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- case BT_NMSTRT: \
- case BT_HEX: \
- ptr += MINBPC(enc); \
- break; \
- CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \
- CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \
- CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
-
-#ifndef PREFIX
-#define PREFIX(ident) ident
-#endif
-
-/* ptr points to character following "<!-" */
-
-static
-int PREFIX(scanComment)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr != end) {
- if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- ptr += MINBPC(enc);
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_MINUS:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_COMMENT;
- }
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "<!" */
-
-static
-int PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_MINUS:
- return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_LSQB:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_COND_SECT_OPEN;
- case BT_NMSTRT:
- case BT_HEX:
- ptr += MINBPC(enc);
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_PERCNT:
- if (ptr + MINBPC(enc) == end)
- return XML_TOK_PARTIAL;
- /* don't allow <!ENTITY% foo "whatever"> */
- switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
- case BT_S: case BT_CR: case BT_LF: case BT_PERCNT:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- /* fall through */
- case BT_S: case BT_CR: case BT_LF:
- *nextTokPtr = ptr;
- return XML_TOK_DECL_OPEN;
- case BT_NMSTRT:
- case BT_HEX:
- ptr += MINBPC(enc);
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static
-int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr)
-{
- int upper = 0;
- *tokPtr = XML_TOK_PI;
- if (end - ptr != MINBPC(enc)*3)
- return 1;
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_x:
- break;
- case ASCII_X:
- upper = 1;
- break;
- default:
- return 1;
- }
- ptr += MINBPC(enc);
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_m:
- break;
- case ASCII_M:
- upper = 1;
- break;
- default:
- return 1;
- }
- ptr += MINBPC(enc);
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_l:
- break;
- case ASCII_L:
- upper = 1;
- break;
- default:
- return 1;
- }
- if (upper)
- return 0;
- *tokPtr = XML_TOK_XML_DECL;
- return 1;
-}
-
-/* ptr points to character following "<?" */
-
-static
-int PREFIX(scanPi)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- int tok;
- const char *target = ptr;
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_CR: case BT_LF:
- if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- ptr += MINBPC(enc);
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_QUEST:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr + MINBPC(enc);
- return tok;
- }
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- return XML_TOK_PARTIAL;
- case BT_QUEST:
- if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr + MINBPC(enc);
- return tok;
- }
- /* fall through */
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-
-static
-int PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB };
- int i;
- /* CDATA[ */
- if (end - ptr < 6 * MINBPC(enc))
- return XML_TOK_PARTIAL;
- for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
- if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_CDATA_SECT_OPEN;
-}
-
-static
-int PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_NONE;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- if (n == 0)
- return XML_TOK_PARTIAL;
- end = ptr + n;
- }
- }
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_RSQB:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB))
- break;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- ptr -= MINBPC(enc);
- break;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CDATA_SECT_CLOSE;
- case BT_CR:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- case BT_LF:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- INVALID_CASES(ptr, nextTokPtr)
- default:
- ptr += MINBPC(enc);
- break;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_DATA_CHARS; \
- } \
- ptr += n; \
- break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NONXML:
- case BT_MALFORM:
- case BT_TRAIL:
- case BT_CR:
- case BT_LF:
- case BT_RSQB:
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-/* ptr points to character following "</" */
-
-static
-int PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_CR: case BT_LF:
- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S: case BT_CR: case BT_LF:
- break;
- case BT_GT:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_END_TAG;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-#ifdef XML_NS
- case BT_COLON:
- /* no need to check qname syntax here, since end-tag must match exactly */
- ptr += MINBPC(enc);
- break;
-#endif
- case BT_GT:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_END_TAG;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "&#X" */
-
-static
-int PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- case BT_HEX:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- case BT_HEX:
- break;
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CHAR_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "&#" */
-
-static
-int PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr != end) {
- if (CHAR_MATCHES(enc, ptr, ASCII_x))
- return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- break;
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CHAR_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "&" */
-
-static
-int PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_NUM:
- return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_ENTITY_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following first character of attribute name */
-
-static
-int PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
-#ifdef XML_NS
- int hadColon = 0;
-#endif
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
-#ifdef XML_NS
- case BT_COLON:
- if (hadColon) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- hadColon = 1;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- break;
-#endif
- case BT_S: case BT_CR: case BT_LF:
- for (;;) {
- int t;
-
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- t = BYTE_TYPE(enc, ptr);
- if (t == BT_EQUALS)
- break;
- switch (t) {
- case BT_S:
- case BT_LF:
- case BT_CR:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- /* fall through */
- case BT_EQUALS:
- {
- int open;
-#ifdef XML_NS
- hadColon = 0;
-#endif
- for (;;) {
-
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- open = BYTE_TYPE(enc, ptr);
- if (open == BT_QUOT || open == BT_APOS)
- break;
- switch (open) {
- case BT_S:
- case BT_LF:
- case BT_CR:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- ptr += MINBPC(enc);
- /* in attribute value */
- for (;;) {
- int t;
- if (ptr == end)
- return XML_TOK_PARTIAL;
- t = BYTE_TYPE(enc, ptr);
- if (t == open)
- break;
- switch (t) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_AMP:
- {
- int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
- if (tok <= 0) {
- if (tok == XML_TOK_INVALID)
- *nextTokPtr = ptr;
- return tok;
- }
- break;
- }
- case BT_LT:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S:
- case BT_CR:
- case BT_LF:
- break;
- case BT_SOL:
- goto sol;
- case BT_GT:
- goto gt;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- /* ptr points to closing quote */
- for (;;) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_CR: case BT_LF:
- continue;
- case BT_GT:
- gt:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_START_TAG_WITH_ATTS;
- case BT_SOL:
- sol:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- break;
- }
- break;
- }
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "<" */
-
-static
-int PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
-#ifdef XML_NS
- int hadColon;
-#endif
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_EXCL:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_MINUS:
- return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_LSQB:
- return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- case BT_QUEST:
- return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_SOL:
- return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
-#ifdef XML_NS
- hadColon = 0;
-#endif
- /* we have a start-tag */
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
-#ifdef XML_NS
- case BT_COLON:
- if (hadColon) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- hadColon = 1;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- break;
-#endif
- case BT_S: case BT_CR: case BT_LF:
- {
- ptr += MINBPC(enc);
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_GT:
- goto gt;
- case BT_SOL:
- goto sol;
- case BT_S: case BT_CR: case BT_LF:
- ptr += MINBPC(enc);
- continue;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
- }
- return XML_TOK_PARTIAL;
- }
- case BT_GT:
- gt:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_START_TAG_NO_ATTS;
- case BT_SOL:
- sol:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static
-int PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_NONE;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- if (n == 0)
- return XML_TOK_PARTIAL;
- end = ptr + n;
- }
- }
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_LT:
- return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_AMP:
- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_CR:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_CR;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- case BT_LF:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- case BT_RSQB:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_RSQB;
- if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB))
- break;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_RSQB;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- ptr -= MINBPC(enc);
- break;
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- INVALID_CASES(ptr, nextTokPtr)
- default:
- ptr += MINBPC(enc);
- break;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_DATA_CHARS; \
- } \
- ptr += n; \
- break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_RSQB:
- if (ptr + MINBPC(enc) != end) {
- if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
- ptr += MINBPC(enc);
- break;
- }
- if (ptr + 2*MINBPC(enc) != end) {
- if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) {
- ptr += MINBPC(enc);
- break;
- }
- *nextTokPtr = ptr + 2*MINBPC(enc);
- return XML_TOK_INVALID;
- }
- }
- /* fall through */
- case BT_AMP:
- case BT_LT:
- case BT_NONXML:
- case BT_MALFORM:
- case BT_TRAIL:
- case BT_CR:
- case BT_LF:
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-/* ptr points to character following "%" */
-
-static
-int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_LF: case BT_CR: case BT_PERCNT:
- *nextTokPtr = ptr;
- return XML_TOK_PERCENT;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_PARAM_ENTITY_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static
-int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_CR: case BT_LF: case BT_S:
- case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR:
- *nextTokPtr = ptr;
- return XML_TOK_POUND_NAME;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return -XML_TOK_POUND_NAME;
-}
-
-static
-int PREFIX(scanLit)(int open, const ENCODING *enc,
- const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- while (ptr != end) {
- int t = BYTE_TYPE(enc, ptr);
- switch (t) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_QUOT:
- case BT_APOS:
- ptr += MINBPC(enc);
- if (t != open)
- break;
- if (ptr == end)
- return -XML_TOK_LITERAL;
- *nextTokPtr = ptr;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S: case BT_CR: case BT_LF:
- case BT_GT: case BT_PERCNT: case BT_LSQB:
- return XML_TOK_LITERAL;
- default:
- return XML_TOK_INVALID;
- }
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static
-int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- int tok;
- if (ptr == end)
- return XML_TOK_NONE;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- if (n == 0)
- return XML_TOK_PARTIAL;
- end = ptr + n;
- }
- }
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_QUOT:
- return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_APOS:
- return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_LT:
- {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_EXCL:
- return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_QUEST:
- return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_NMSTRT:
- case BT_HEX:
- case BT_NONASCII:
- case BT_LEAD2:
- case BT_LEAD3:
- case BT_LEAD4:
- *nextTokPtr = ptr - MINBPC(enc);
- return XML_TOK_INSTANCE_START;
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- case BT_CR:
- if (ptr + MINBPC(enc) == end)
- return -XML_TOK_PROLOG_S;
- /* fall through */
- case BT_S: case BT_LF:
- for (;;) {
- ptr += MINBPC(enc);
- if (ptr == end)
- break;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S: case BT_LF:
- break;
- case BT_CR:
- /* don't split CR/LF pair */
- if (ptr + MINBPC(enc) != end)
- break;
- /* fall through */
- default:
- *nextTokPtr = ptr;
- return XML_TOK_PROLOG_S;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_PROLOG_S;
- case BT_PERCNT:
- return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_COMMA:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_COMMA;
- case BT_LSQB:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_OPEN_BRACKET;
- case BT_RSQB:
- ptr += MINBPC(enc);
- if (ptr == end)
- return -XML_TOK_CLOSE_BRACKET;
- if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
- if (ptr + MINBPC(enc) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
- *nextTokPtr = ptr + 2*MINBPC(enc);
- return XML_TOK_COND_SECT_CLOSE;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_CLOSE_BRACKET;
- case BT_LPAR:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_OPEN_PAREN;
- case BT_RPAR:
- ptr += MINBPC(enc);
- if (ptr == end)
- return -XML_TOK_CLOSE_PAREN;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_AST:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CLOSE_PAREN_ASTERISK;
- case BT_QUEST:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CLOSE_PAREN_QUESTION;
- case BT_PLUS:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CLOSE_PAREN_PLUS;
- case BT_CR: case BT_LF: case BT_S:
- case BT_GT: case BT_COMMA: case BT_VERBAR:
- case BT_RPAR:
- *nextTokPtr = ptr;
- return XML_TOK_CLOSE_PAREN;
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- case BT_VERBAR:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_OR;
- case BT_GT:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DECL_CLOSE;
- case BT_NUM:
- return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (IS_NMSTRT_CHAR(enc, ptr, n)) { \
- ptr += n; \
- tok = XML_TOK_NAME; \
- break; \
- } \
- if (IS_NAME_CHAR(enc, ptr, n)) { \
- ptr += n; \
- tok = XML_TOK_NMTOKEN; \
- break; \
- } \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NMSTRT:
- case BT_HEX:
- tok = XML_TOK_NAME;
- ptr += MINBPC(enc);
- break;
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- tok = XML_TOK_NMTOKEN;
- ptr += MINBPC(enc);
- break;
- case BT_NONASCII:
- if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
- ptr += MINBPC(enc);
- tok = XML_TOK_NAME;
- break;
- }
- if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
- ptr += MINBPC(enc);
- tok = XML_TOK_NMTOKEN;
- break;
- }
- /* fall through */
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_GT: case BT_RPAR: case BT_COMMA:
- case BT_VERBAR: case BT_LSQB: case BT_PERCNT:
- case BT_S: case BT_CR: case BT_LF:
- *nextTokPtr = ptr;
- return tok;
-#ifdef XML_NS
- case BT_COLON:
- ptr += MINBPC(enc);
- switch (tok) {
- case XML_TOK_NAME:
- if (ptr == end)
- return XML_TOK_PARTIAL;
- tok = XML_TOK_PREFIXED_NAME;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- default:
- tok = XML_TOK_NMTOKEN;
- break;
- }
- break;
- case XML_TOK_PREFIXED_NAME:
- tok = XML_TOK_NMTOKEN;
- break;
- }
- break;
-#endif
- case BT_PLUS:
- if (tok == XML_TOK_NMTOKEN) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_NAME_PLUS;
- case BT_AST:
- if (tok == XML_TOK_NMTOKEN) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_NAME_ASTERISK;
- case BT_QUEST:
- if (tok == XML_TOK_NMTOKEN) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_NAME_QUESTION;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return -tok;
-}
-
-static
-int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- const char *start;
- if (ptr == end)
- return XML_TOK_NONE;
- start = ptr;
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: ptr += n; break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_AMP:
- if (ptr == start)
- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_LT:
- /* this is for inside entity references */
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- case BT_LF:
- if (ptr == start) {
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_CR:
- if (ptr == start) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_CR;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_S:
- if (ptr == start) {
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_ATTRIBUTE_VALUE_S;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-static
-int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- const char *start;
- if (ptr == end)
- return XML_TOK_NONE;
- start = ptr;
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: ptr += n; break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_AMP:
- if (ptr == start)
- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_PERCNT:
- if (ptr == start) {
- int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc),
- end, nextTokPtr);
- return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_LF:
- if (ptr == start) {
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_CR:
- if (ptr == start) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_CR;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-#ifdef XML_DTD
-
-static
-int PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- int level = 0;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- end = ptr + n;
- }
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_LT:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
- ++level;
- ptr += MINBPC(enc);
- }
- }
- break;
- case BT_RSQB:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- ptr += MINBPC(enc);
- if (level == 0) {
- *nextTokPtr = ptr;
- return XML_TOK_IGNORE_SECT;
- }
- --level;
- }
- }
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-#endif /* XML_DTD */
-
-static
-int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
- const char **badPtr)
-{
- ptr += MINBPC(enc);
- end -= MINBPC(enc);
- for (; ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- case BT_HEX:
- case BT_MINUS:
- case BT_APOS:
- case BT_LPAR:
- case BT_RPAR:
- case BT_PLUS:
- case BT_COMMA:
- case BT_SOL:
- case BT_EQUALS:
- case BT_QUEST:
- case BT_CR:
- case BT_LF:
- case BT_SEMI:
- case BT_EXCL:
- case BT_AST:
- case BT_PERCNT:
- case BT_NUM:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- break;
- case BT_S:
- if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
- *badPtr = ptr;
- return 0;
- }
- break;
- case BT_NAME:
- case BT_NMSTRT:
- if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f))
- break;
- default:
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case 0x24: /* $ */
- case 0x40: /* @ */
- break;
- default:
- *badPtr = ptr;
- return 0;
- }
- break;
- }
- }
- return 1;
-}
-
-/* This must only be called for a well-formed start-tag or empty element tag.
-Returns the number of attributes. Pointers to the first attsMax attributes
-are stored in atts. */
-
-static
-int PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
- int attsMax, ATTRIBUTE *atts)
-{
- enum { other, inName, inValue } state = inName;
- int nAtts = 0;
- int open = 0; /* defined when state == inValue;
- initialization just to shut up compilers */
-
- for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define START_NAME \
- if (state == other) { \
- if (nAtts < attsMax) { \
- atts[nAtts].name = ptr; \
- atts[nAtts].normalized = 1; \
- } \
- state = inName; \
- }
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NONASCII:
- case BT_NMSTRT:
- case BT_HEX:
- START_NAME
- break;
-#undef START_NAME
- case BT_QUOT:
- if (state != inValue) {
- if (nAtts < attsMax)
- atts[nAtts].valuePtr = ptr + MINBPC(enc);
- state = inValue;
- open = BT_QUOT;
- }
- else if (open == BT_QUOT) {
- state = other;
- if (nAtts < attsMax)
- atts[nAtts].valueEnd = ptr;
- nAtts++;
- }
- break;
- case BT_APOS:
- if (state != inValue) {
- if (nAtts < attsMax)
- atts[nAtts].valuePtr = ptr + MINBPC(enc);
- state = inValue;
- open = BT_APOS;
- }
- else if (open == BT_APOS) {
- state = other;
- if (nAtts < attsMax)
- atts[nAtts].valueEnd = ptr;
- nAtts++;
- }
- break;
- case BT_AMP:
- if (nAtts < attsMax)
- atts[nAtts].normalized = 0;
- break;
- case BT_S:
- if (state == inName)
- state = other;
- else if (state == inValue
- && nAtts < attsMax
- && atts[nAtts].normalized
- && (ptr == atts[nAtts].valuePtr
- || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
- || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
- || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
- atts[nAtts].normalized = 0;
- break;
- case BT_CR: case BT_LF:
- /* This case ensures that the first attribute name is counted
- Apart from that we could just change state on the quote. */
- if (state == inName)
- state = other;
- else if (state == inValue && nAtts < attsMax)
- atts[nAtts].normalized = 0;
- break;
- case BT_GT:
- case BT_SOL:
- if (state != inValue)
- return nAtts;
- break;
- default:
- break;
- }
- }
- /* not reached */
-}
-
-static
-int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
-{
- int result = 0;
- /* skip &# */
- ptr += 2*MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
- for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
- int c = BYTE_TO_ASCII(enc, ptr);
- switch (c) {
- case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4:
- case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9:
- result <<= 4;
- result |= (c - ASCII_0);
- break;
- case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F:
- result <<= 4;
- result += 10 + (c - ASCII_A);
- break;
- case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f:
- result <<= 4;
- result += 10 + (c - ASCII_a);
- break;
- }
- if (result >= 0x110000)
- return -1;
- }
- }
- else {
- for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
- int c = BYTE_TO_ASCII(enc, ptr);
- result *= 10;
- result += (c - ASCII_0);
- if (result >= 0x110000)
- return -1;
- }
- }
- return checkCharRefNumber(result);
-}
-
-static
-int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end)
-{
- switch ((end - ptr)/MINBPC(enc)) {
- case 2:
- if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_l:
- return ASCII_LT;
- case ASCII_g:
- return ASCII_GT;
- }
- }
- break;
- case 3:
- if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_p))
- return ASCII_AMP;
- }
- }
- break;
- case 4:
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_q:
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_t))
- return ASCII_QUOT;
- }
- }
- break;
- case ASCII_a:
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_s))
- return ASCII_APOS;
- }
- }
- break;
- }
- }
- return 0;
-}
-
-static
-int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
-{
- for (;;) {
- switch (BYTE_TYPE(enc, ptr1)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (*ptr1++ != *ptr2++) \
- return 0;
- LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2)
-#undef LEAD_CASE
- /* fall through */
- if (*ptr1++ != *ptr2++)
- return 0;
- break;
- case BT_NONASCII:
- case BT_NMSTRT:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- case BT_HEX:
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
- if (*ptr2++ != *ptr1++)
- return 0;
- if (MINBPC(enc) > 1) {
- if (*ptr2++ != *ptr1++)
- return 0;
- if (MINBPC(enc) > 2) {
- if (*ptr2++ != *ptr1++)
- return 0;
- if (MINBPC(enc) > 3) {
- if (*ptr2++ != *ptr1++)
- return 0;
- }
- }
- }
- break;
- default:
- if (MINBPC(enc) == 1 && *ptr1 == *ptr2)
- return 1;
- switch (BYTE_TYPE(enc, ptr2)) {
- case BT_LEAD2:
- case BT_LEAD3:
- case BT_LEAD4:
- case BT_NONASCII:
- case BT_NMSTRT:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- case BT_HEX:
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
- return 0;
- default:
- return 1;
- }
- }
- }
- /* not reached */
-}
-
-static
-int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
- const char *end1, const char *ptr2)
-{
- for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
- if (ptr1 == end1)
- return 0;
- if (!CHAR_MATCHES(enc, ptr1, *ptr2))
- return 0;
- }
- return ptr1 == end1;
-}
-
-static
-int PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
-{
- const char *start = ptr;
- for (;;) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: ptr += n; break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NONASCII:
- case BT_NMSTRT:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- case BT_HEX:
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
- ptr += MINBPC(enc);
- break;
- default:
- return ptr - start;
- }
- }
-}
-
-static
-const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr)
-{
- for (;;) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_LF:
- case BT_CR:
- case BT_S:
- ptr += MINBPC(enc);
- break;
- default:
- return ptr;
- }
- }
-}
-
-static
-void PREFIX(updatePosition)(const ENCODING *enc,
- const char *ptr,
- const char *end,
- POSITION *pos)
-{
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- ptr += n; \
- break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_LF:
- pos->columnNumber = (unsigned)-1;
- pos->lineNumber++;
- ptr += MINBPC(enc);
- break;
- case BT_CR:
- pos->lineNumber++;
- ptr += MINBPC(enc);
- if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- pos->columnNumber = (unsigned)-1;
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- pos->columnNumber++;
- }
-}
-
-#undef DO_LEAD_CASE
-#undef MULTIBYTE_CASES
-#undef INVALID_CASES
-#undef CHECK_NAME_CASE
-#undef CHECK_NAME_CASES
-#undef CHECK_NMSTRT_CASE
-#undef CHECK_NMSTRT_CASES
diff --git a/ext/xml/expat/xmltok_impl.h b/ext/xml/expat/xmltok_impl.h
deleted file mode 100644
index da0ea60a65..0000000000
--- a/ext/xml/expat/xmltok_impl.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-enum {
- BT_NONXML,
- BT_MALFORM,
- BT_LT,
- BT_AMP,
- BT_RSQB,
- BT_LEAD2,
- BT_LEAD3,
- BT_LEAD4,
- BT_TRAIL,
- BT_CR,
- BT_LF,
- BT_GT,
- BT_QUOT,
- BT_APOS,
- BT_EQUALS,
- BT_QUEST,
- BT_EXCL,
- BT_SOL,
- BT_SEMI,
- BT_NUM,
- BT_LSQB,
- BT_S,
- BT_NMSTRT,
- BT_COLON,
- BT_HEX,
- BT_DIGIT,
- BT_NAME,
- BT_MINUS,
- BT_OTHER, /* known not to be a name or name start character */
- BT_NONASCII, /* might be a name or name start character */
- BT_PERCNT,
- BT_LPAR,
- BT_RPAR,
- BT_AST,
- BT_PLUS,
- BT_COMMA,
- BT_VERBAR
-};
-
-#include <stddef.h>
diff --git a/ext/xml/expat/xmltok_ns.c b/ext/xml/expat/xmltok_ns.c
deleted file mode 100644
index 3a1f897de7..0000000000
--- a/ext/xml/expat/xmltok_ns.c
+++ /dev/null
@@ -1,100 +0,0 @@
-#include "php_compat.h"
-
-const ENCODING *NS(XmlGetUtf8InternalEncoding)(void)
-{
- return &ns(internal_utf8_encoding).enc;
-}
-
-const ENCODING *NS(XmlGetUtf16InternalEncoding)(void)
-{
-#if XML_BYTE_ORDER == 12
- return &ns(internal_little2_encoding).enc;
-#elif XML_BYTE_ORDER == 21
- return &ns(internal_big2_encoding).enc;
-#else
- const short n = 1;
- return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc;
-#endif
-}
-
-static
-const ENCODING *NS(encodings)[] = {
- &ns(latin1_encoding).enc,
- &ns(ascii_encoding).enc,
- &ns(utf8_encoding).enc,
- &ns(big2_encoding).enc,
- &ns(big2_encoding).enc,
- &ns(little2_encoding).enc,
- &ns(utf8_encoding).enc /* NO_ENC */
-};
-
-static
-int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr);
-}
-
-static
-int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr);
-}
-
-int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name)
-{
- int i = getEncodingIndex(name);
- if (i == UNKNOWN_ENC)
- return 0;
- SET_INIT_ENC_INDEX(p, i);
- p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
- p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
- p->initEnc.updatePosition = initUpdatePosition;
- p->encPtr = encPtr;
- *encPtr = &(p->initEnc);
- return 1;
-}
-
-static
-const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
-{
-#define ENCODING_MAX 128
- char buf[ENCODING_MAX];
- char *p = buf;
- int i;
- XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
- if (ptr != end)
- return 0;
- *p = 0;
- if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
- return enc;
- i = getEncodingIndex(buf);
- if (i == UNKNOWN_ENC)
- return 0;
- return NS(encodings)[i];
-}
-
-int NS(XmlParseXmlDecl)(int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingName,
- const ENCODING **encoding,
- int *standalone)
-{
- return doParseXmlDecl(NS(findEncoding),
- isGeneralTextEntity,
- enc,
- ptr,
- end,
- badPtr,
- versionPtr,
- versionEndPtr,
- encodingName,
- encoding,
- standalone);
-}
diff --git a/ext/xml/php_xml.h b/ext/xml/php_xml.h
deleted file mode 100644
index c35f52dfe8..0000000000
--- a/ext/xml/php_xml.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_XML_H
-#define PHP_XML_H
-
-#ifdef HAVE_LIBEXPAT
-
-extern zend_module_entry xml_module_entry;
-#define xml_module_ptr &xml_module_entry
-
-#else
-
-#define xml_module_ptr NULL
-
-#endif
-
-#if defined(PHP_XML_INTERNAL)
-
-#include <expat.h>
-
-#ifdef PHP_WIN32
-#define PHP_XML_API __declspec(dllexport)
-#else
-#define PHP_XML_API
-#endif
-
-
-#ifdef XML_UNICODE
-#error "UTF-16 Unicode support not implemented!"
-#endif
-
-typedef struct {
- XML_Char *default_encoding;
-} php_xml_globals;
-
-typedef struct {
- int index;
- int case_folding;
- XML_Parser parser;
- XML_Char *target_encoding;
- zval *startElementHandler;
- zval *endElementHandler;
- zval *characterDataHandler;
- zval *processingInstructionHandler;
- zval *defaultHandler;
- zval *unparsedEntityDeclHandler;
- zval *notationDeclHandler;
- zval *externalEntityRefHandler;
- zval *unknownEncodingHandler;
- zval *startNamespaceDeclHandler;
- zval *endNamespaceDeclHandler;
- zval *object;
-
- zval *data;
- zval *info;
- int level;
- int toffset;
- int curtag;
- pval **ctag;
- char **ltags;
- int lastwasopen;
- int skipwhite;
-
- XML_Char *baseURI;
-} xml_parser;
-
-
-typedef struct {
- XML_Char *name;
- char (*decoding_function)(unsigned short);
- unsigned short (*encoding_function)(unsigned char);
-} xml_encoding;
-
-
-enum php_xml_option {
- PHP_XML_OPTION_CASE_FOLDING = 1,
- PHP_XML_OPTION_TARGET_ENCODING,
- PHP_XML_OPTION_SKIP_TAGSTART,
- PHP_XML_OPTION_SKIP_WHITE
-};
-
-#define RETURN_OUT_OF_MEMORY \
- php_error(E_WARNING, "Out of memory");\
- RETURN_FALSE
-
-/* for xml_parse_into_struct */
-
-#define XML_MAXLEVEL 255 /* XXX this should be dynamic */
-
-PHP_FUNCTION(xml_parser_create);
-PHP_FUNCTION(xml_parser_create_ns);
-PHP_FUNCTION(xml_set_object);
-PHP_FUNCTION(xml_set_element_handler);
-PHP_FUNCTION(xml_set_character_data_handler);
-PHP_FUNCTION(xml_set_processing_instruction_handler);
-PHP_FUNCTION(xml_set_default_handler);
-PHP_FUNCTION(xml_set_unparsed_entity_decl_handler);
-PHP_FUNCTION(xml_set_notation_decl_handler);
-PHP_FUNCTION(xml_set_external_entity_ref_handler);
-PHP_FUNCTION(xml_set_start_namespace_decl_handler);
-PHP_FUNCTION(xml_set_end_namespace_decl_handler);
-PHP_FUNCTION(xml_parse);
-PHP_FUNCTION(xml_get_error_code);
-PHP_FUNCTION(xml_error_string);
-PHP_FUNCTION(xml_get_current_line_number);
-PHP_FUNCTION(xml_get_current_column_number);
-PHP_FUNCTION(xml_get_current_byte_index);
-PHP_FUNCTION(xml_parser_free);
-PHP_FUNCTION(xml_parser_set_option);
-PHP_FUNCTION(xml_parser_get_option);
-PHP_FUNCTION(utf8_encode);
-PHP_FUNCTION(utf8_decode);
-PHP_FUNCTION(xml_parse_into_struct);
-
-PHPAPI char *_xml_zval_strdup(zval *val);
-PHPAPI char *xml_utf8_decode(const XML_Char *, int, int *, const XML_Char *);
-
-#endif /* HAVE_LIBEXPAT */
-
-#define phpext_xml_ptr xml_module_ptr
-
-#ifdef ZTS
-#define XML(v) TSRMG(xml_globals_id, php_xml_globals *, v)
-#else
-#define XML(v) (xml_globals.v)
-#endif
-
-#endif /* PHP_XML_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/xml/tests/001.phpt b/ext/xml/tests/001.phpt
deleted file mode 100644
index 156be8cc66..0000000000
--- a/ext/xml/tests/001.phpt
+++ /dev/null
@@ -1,97 +0,0 @@
---TEST--
-XML parser test, function callbacks
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-$xml_parser = xml_parser_create();
-xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
-xml_set_element_handler($xml_parser, "startElement", "endElement");
-xml_set_character_data_handler($xml_parser, "characterData");
-xml_set_processing_instruction_handler($xml_parser, "PIHandler");
-xml_set_default_handler($xml_parser, "defaultHandler");
-xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
-
-if (!($fp = @fopen("xmltest.xml", "r"))) {
- die("could not open XML input");
-}
-
-while ($data = fread($fp, 4096)) {
- if (!xml_parse($xml_parser, $data, feof($fp))) {
- die(sprintf("XML error: %s at line %d\n",
- xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser)));
- }
-}
-print "parse complete\n";
-xml_parser_free($xml_parser);
-
-function startElement($parser, $name, $attribs)
-{
- print "\{$name";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print "}";
-}
-
-function endElement($parser, $name)
-{
- print "\{/$name}";
-}
-
-function characterData($parser, $data)
-{
- print "\{CDATA[$data]}";
-}
-
-function PIHandler($parser, $target, $data)
-{
- print "\{PI[$target,$data]}";
-}
-
-function defaultHandler($parser, $data)
-{
- if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
- print "\{ENTREF[$data]}";
- } else {
- print "\{?[$data]}";
- }
-}
-
-function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
- $publicId)
-{
- print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n";
- return true;
-}
-
-?>
---GET--
---POST--
---EXPECT--
-{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
-]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
-]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
-]}{?[%incent;]}{?[
-]}{?[]]}{?[>]}{?[
-]}{ROOT ID="elem1"}{CDATA[
-]}{CDATA[ Plain text.]}{CDATA[
-]}{CDATA[ ]}{ELEM1}{CDATA[
-]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
-]}{CDATA[ ]}{ELEM2}{CDATA[
-]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
-]}{CDATA[ ]}{ELEM3}{CDATA[
-]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
-]}{CDATA[ ]}{ELEM4}{CDATA[
-]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
-]}{CDATA[ ]}{/ELEM4}{CDATA[
-]}{CDATA[ ]}{/ELEM3}{CDATA[
-]}{CDATA[ ]}{/ELEM2}{CDATA[
-]}{CDATA[ ]}{/ELEM1}{CDATA[
-]}{/ROOT}{?[
-]}parse complete
diff --git a/ext/xml/tests/002.phpt b/ext/xml/tests/002.phpt
deleted file mode 100644
index 3d1ac4cec9..0000000000
--- a/ext/xml/tests/002.phpt
+++ /dev/null
@@ -1,91 +0,0 @@
---TEST--
-XML parser test, object tuple callbacks
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-$xml_parser = xml_parser_create();
-$obj = new myclass;
-xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
-xml_set_element_handler($xml_parser, array($obj,"startElement"),
- array($obj, "endElement"));
-xml_set_character_data_handler($xml_parser, array($obj, "characterData"));
-xml_set_processing_instruction_handler($xml_parser, array($obj, "PIHandler"));
-xml_set_default_handler($xml_parser, array($obj, "defaultHandler"));
-xml_set_external_entity_ref_handler($xml_parser,
- array($obj, "externalEntityRefHandler"));
-
-if (!($fp = @fopen("xmltest.xml", "r"))) {
- die("could not open XML input");
-}
-
-while ($data = fread($fp, 4096)) {
- if (!xml_parse($xml_parser, $data, feof($fp))) {
- die(sprintf("XML error: %s at line %d\n",
- xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser)));
- }
-}
-print "parse complete\n";
-xml_parser_free($xml_parser);
-
-class myclass {
- function startElement($parser, $name, $attribs) {
- print "\{$name";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print "}";
- }
- function endElement($parser, $name) {
- print "\{/$name}";
- }
- function characterData($parser, $data) {
- print "\{CDATA[$data]}";
- }
- function PIHandler($parser, $target, $data) {
- print "\{PI[$target,$data]}";
- }
- function defaultHandler($parser, $data) {
- if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
- print "\{ENTREF[$data]}";
- } else {
- print "\{?[$data]}";
- }
- }
- function externalEntityRefHandler($parser, $openEntityNames, $base,
- $systemId, $publicId) {
- print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n";
- return true;
- }
-}
-
-?>
---GET--
---POST--
---EXPECT--
-{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
-]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
-]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
-]}{?[%incent;]}{?[
-]}{?[]]}{?[>]}{?[
-]}{ROOT ID="elem1"}{CDATA[
-]}{CDATA[ Plain text.]}{CDATA[
-]}{CDATA[ ]}{ELEM1}{CDATA[
-]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
-]}{CDATA[ ]}{ELEM2}{CDATA[
-]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
-]}{CDATA[ ]}{ELEM3}{CDATA[
-]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
-]}{CDATA[ ]}{ELEM4}{CDATA[
-]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
-]}{CDATA[ ]}{/ELEM4}{CDATA[
-]}{CDATA[ ]}{/ELEM3}{CDATA[
-]}{CDATA[ ]}{/ELEM2}{CDATA[
-]}{CDATA[ ]}{/ELEM1}{CDATA[
-]}{/ROOT}{?[
-]}parse complete
diff --git a/ext/xml/tests/003.phpt b/ext/xml/tests/003.phpt
deleted file mode 100644
index 9dab6b5ddc..0000000000
--- a/ext/xml/tests/003.phpt
+++ /dev/null
@@ -1,90 +0,0 @@
---TEST--
-XML parser test, xml_set_object callbacks
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-$xml_parser = xml_parser_create();
-$obj = new myclass;
-xml_set_object($xml_parser, $obj);
-xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
-xml_set_element_handler($xml_parser, "startElement", "endElement");
-xml_set_character_data_handler($xml_parser, "characterData");
-xml_set_processing_instruction_handler($xml_parser, "PIHandler");
-xml_set_default_handler($xml_parser, "defaultHandler");
-xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
-
-if (!($fp = @fopen("xmltest.xml", "r"))) {
- die("could not open XML input");
-}
-
-while ($data = fread($fp, 4096)) {
- if (!xml_parse($xml_parser, $data, feof($fp))) {
- die(sprintf("XML error: %s at line %d\n",
- xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser)));
- }
-}
-print "parse complete\n";
-xml_parser_free($xml_parser);
-
-class myclass {
- function startElement($parser, $name, $attribs) {
- print "\{$name";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print "}";
- }
- function endElement($parser, $name) {
- print "\{/$name}";
- }
- function characterData($parser, $data) {
- print "\{CDATA[$data]}";
- }
- function PIHandler($parser, $target, $data) {
- print "\{PI[$target,$data]}";
- }
- function defaultHandler($parser, $data) {
- if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
- print "\{ENTREF[$data]}";
- } else {
- print "\{?[$data]}";
- }
- }
- function externalEntityRefHandler($parser, $openEntityNames, $base,
- $systemId, $publicId) {
- print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n";
- return true;
- }
-}
-
-?>
---GET--
---POST--
---EXPECT--
-{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
-]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
-]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
-]}{?[%incent;]}{?[
-]}{?[]]}{?[>]}{?[
-]}{ROOT ID="elem1"}{CDATA[
-]}{CDATA[ Plain text.]}{CDATA[
-]}{CDATA[ ]}{ELEM1}{CDATA[
-]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
-]}{CDATA[ ]}{ELEM2}{CDATA[
-]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
-]}{CDATA[ ]}{ELEM3}{CDATA[
-]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
-]}{CDATA[ ]}{ELEM4}{CDATA[
-]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
-]}{CDATA[ ]}{/ELEM4}{CDATA[
-]}{CDATA[ ]}{/ELEM3}{CDATA[
-]}{CDATA[ ]}{/ELEM2}{CDATA[
-]}{CDATA[ ]}{/ELEM1}{CDATA[
-]}{/ROOT}{?[
-]}parse complete
diff --git a/ext/xml/tests/004.phpt b/ext/xml/tests/004.phpt
deleted file mode 100644
index 564c197939..0000000000
--- a/ext/xml/tests/004.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-XML parser case folding test
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-$xp = xml_parser_create();
-xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
-xml_set_element_handler($xp, "start_element", "end_element");
-$fp = fopen("xmltest.xml", "r");
-while ($data = fread($fp, 4096)) {
- xml_parse($xp, $data, feof($fp));
-}
-xml_parser_free($xp);
-$xp = xml_parser_create();
-xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, true);
-xml_set_element_handler($xp, "start_element", "end_element");
-$fp = fopen("xmltest.xml", "r");
-while ($data = fread($fp, 4096)) {
- xml_parse($xp, $data, feof($fp));
-}
-xml_parser_free($xp);
-function start_element($xp, $elem, $attribs) {
- print "<$elem";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print ">\n";
-}
-function end_element($xp, $elem) {
- print "</$elem>\n";
-}
-?>
---GET--
---POST--
---EXPECT--
-<root id="elem1">
-<elem1>
-<elem2>
-<elem3>
-<elem4>
-</elem4>
-</elem3>
-</elem2>
-</elem1>
-</root>
-<ROOT ID="elem1">
-<ELEM1>
-<ELEM2>
-<ELEM3>
-<ELEM4>
-</ELEM4>
-</ELEM3>
-</ELEM2>
-</ELEM1>
-</ROOT>
diff --git a/ext/xml/tests/006.phpt b/ext/xml/tests/006.phpt
deleted file mode 100644
index a1b339f0e0..0000000000
--- a/ext/xml/tests/006.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-UTF-8<->ISO Latin 1 encoding/decoding test
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-printf("%s -> %s\n", urlencode("æ"), urlencode(utf8_encode("æ")));
-printf("%s <- %s\n", urlencode(utf8_decode(urldecode("%C3%A6"))), "%C3%A6");
-?>
---GET--
---POST--
---EXPECT--
-%E6 -> %C3%A6
-%E6 <- %C3%A6
diff --git a/ext/xml/tests/007.phpt b/ext/xml/tests/007.phpt
deleted file mode 100644
index 1bff1dee0e..0000000000
--- a/ext/xml/tests/007.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-xml_parse_into_struct/umlauts in tags
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-function startHandler($parser,$tag,$attr) { var_dump($tag,$attr); }
-function endHandler($parser,$tag) { var_dump($tag); }
-
-$xmldata = '<?xml version="1.0" encoding="ISO-8859-1"?><äöü üäß="Üäß">ÄÖÜ</äöü>';
-$parser = xml_parser_create('ISO-8859-1');
-xml_set_element_handler($parser, "startHandler", "endHandler");
-xml_parse_into_struct($parser, $xmldata, $struct, $index);
-var_dump($struct);
-?>
---GET--
---POST--
---EXPECT--
-string(3) "ÄÖÜ"
-array(1) {
- ["ÜÄß"]=>
- string(3) "Üäß"
-}
-string(3) "ÄÖÜ"
-array(1) {
- [0]=>
- array(5) {
- ["tag"]=>
- string(3) "ÄÖÜ"
- ["type"]=>
- string(8) "complete"
- ["level"]=>
- int(1)
- ["attributes"]=>
- array(1) {
- ["ÜÄß"]=>
- string(3) "Üäß"
- }
- ["value"]=>
- string(3) "ÄÖÜ"
- }
-}
diff --git a/ext/xml/tests/inc.ent b/ext/xml/tests/inc.ent
deleted file mode 100644
index 8f86465c2a..0000000000
--- a/ext/xml/tests/inc.ent
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY included-entity "This is text included from an entity">
diff --git a/ext/xml/tests/skipif.inc b/ext/xml/tests/skipif.inc
deleted file mode 100644
index 1c33251b76..0000000000
--- a/ext/xml/tests/skipif.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-if (!extension_loaded("xml")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("xml$dlext");
-}
-if (!extension_loaded("xml")) {
- print "skip\n";
-}
-?>
diff --git a/ext/xml/tests/xmltest.xml b/ext/xml/tests/xmltest.xml
deleted file mode 100644
index c15d6ea1ab..0000000000
--- a/ext/xml/tests/xmltest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE phptest SYSTEM "notfound.dtd" [
-<!ENTITY % incent SYSTEM "inc.ent">
-%incent;
-]>
-<root id="elem1">
- Plain text.
- <elem1>
- <!-- comment -->
- <elem2>
- <![CDATA[CDATA block]]>
- <elem3>
- &included-entity;
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</root>
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
deleted file mode 100644
index ce87d36139..0000000000
--- a/ext/xml/xml.c
+++ /dev/null
@@ -1,1623 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@fast.no> |
- | Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#define PHP_XML_INTERNAL
-#include "php_xml.h"
-#include "zend_variables.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-
-#if HAVE_LIBEXPAT
-
-#ifndef PHP_WIN32
-# include "build-defs.h"
-# endif
-# include "ext/standard/head.h"
-
-/* Short-term TODO list:
- * - Implement XML_ExternalEntityParserCreate()
- * - XML_SetCommentHandler
- * - XML_SetCdataSectionHandler
- * - XML_SetParamEntityParsing
- */
-
-/* Long-term TODO list:
- * - Fix the expat library so you can install your own memory manager
- * functions
- */
-
-/* Known bugs:
- * - Weird things happen with <![CDATA[]]> sections.
- */
-
-#ifdef ZTS
-int xml_globals_id;
-#else
-PHP_XML_API php_xml_globals xml_globals;
-#endif
-
-/* {{{ dynamically loadable module stuff */
-#ifdef COMPILE_DL_XML
-ZEND_GET_MODULE(xml)
-#endif /* COMPILE_DL_XML */
-/* }}} */
-
-/* {{{ function prototypes */
-PHP_MINIT_FUNCTION(xml);
-PHP_RINIT_FUNCTION(xml);
-PHP_MSHUTDOWN_FUNCTION(xml);
-PHP_RSHUTDOWN_FUNCTION(xml);
-PHP_MINFO_FUNCTION(xml);
-
-static void xml_parser_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void xml_set_handler(zval **, zval **);
-inline static unsigned short xml_encode_iso_8859_1(unsigned char);
-inline static char xml_decode_iso_8859_1(unsigned short);
-inline static unsigned short xml_encode_us_ascii(unsigned char);
-inline static char xml_decode_us_ascii(unsigned short);
-static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *);
-static zval *xml_call_handler(xml_parser *, zval *, int, zval **);
-static zval *_xml_xmlchar_zval(const XML_Char *, int, const XML_Char *);
-static int _xml_xmlcharlen(const XML_Char *);
-static void _xml_add_to_info(xml_parser *parser,char *name);
-inline static char *_xml_decode_tag(xml_parser *parser, const char *tag);
-
-void _xml_startElementHandler(void *, const char *, const char **);
-void _xml_endElementHandler(void *, const char *);
-void _xml_characterDataHandler(void *, const XML_Char *, int);
-void _xml_processingInstructionHandler(void *, const XML_Char *, const XML_Char *);
-void _xml_defaultHandler(void *, const XML_Char *, int);
-void _xml_unparsedEntityDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-void _xml_notationDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-int _xml_externalEntityRefHandler(XML_Parser, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-
-void _xml_startNamespaceDeclHandler(void *, const XML_Char *, const XML_Char *);
-void _xml_endNamespaceDeclHandler(void *, const XML_Char *);
-/* }}} */
-
-/* {{{ extension definition structures */
-static unsigned char third_and_fourth_args_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
-
-function_entry xml_functions[] = {
- PHP_FE(xml_parser_create, NULL)
- PHP_FE(xml_parser_create_ns, NULL)
- PHP_FE(xml_set_object, second_arg_force_ref)
- PHP_FE(xml_set_element_handler, NULL)
- PHP_FE(xml_set_character_data_handler, NULL)
- PHP_FE(xml_set_processing_instruction_handler, NULL)
- PHP_FE(xml_set_default_handler, NULL)
- PHP_FE(xml_set_unparsed_entity_decl_handler, NULL)
- PHP_FE(xml_set_notation_decl_handler, NULL)
- PHP_FE(xml_set_external_entity_ref_handler, NULL)
- PHP_FE(xml_set_start_namespace_decl_handler, NULL)
- PHP_FE(xml_set_end_namespace_decl_handler, NULL)
- PHP_FE(xml_parse, NULL)
- PHP_FE(xml_parse_into_struct, third_and_fourth_args_force_ref)
- PHP_FE(xml_get_error_code, NULL)
- PHP_FE(xml_error_string, NULL)
- PHP_FE(xml_get_current_line_number, NULL)
- PHP_FE(xml_get_current_column_number, NULL)
- PHP_FE(xml_get_current_byte_index, NULL)
- PHP_FE(xml_parser_free, NULL)
- PHP_FE(xml_parser_set_option, NULL)
- PHP_FE(xml_parser_get_option, NULL)
- PHP_FE(utf8_encode, NULL)
- PHP_FE(utf8_decode, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry xml_module_entry = {
- STANDARD_MODULE_HEADER,
- "xml", /* extension name */
- xml_functions, /* extension function list */
- PHP_MINIT(xml), /* extension-wide startup function */
- PHP_MSHUTDOWN(xml), /* extension-wide shutdown function */
- PHP_RINIT(xml), /* per-request startup function */
- PHP_RSHUTDOWN(xml), /* per-request shutdown function */
- PHP_MINFO(xml), /* information function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-/* All the encoding functions are set to NULL right now, since all
- * the encoding is currently done internally by expat/xmltok.
- */
-xml_encoding xml_encodings[] = {
- { "ISO-8859-1", xml_decode_iso_8859_1, xml_encode_iso_8859_1 },
- { "US-ASCII", xml_decode_us_ascii, xml_encode_us_ascii },
- { "UTF-8", NULL, NULL },
- { NULL, NULL, NULL }
-};
-
-/* True globals, no need for thread safety */
-static int le_xml_parser;
-
-/* }}} */
-
-/* {{{ startup, shutdown and info functions */
-#ifdef ZTS
-static void php_xml_init_globals(php_xml_globals *xml_globals_p TSRMLS_DC)
-{
- XML(default_encoding) = "ISO-8859-1";
-}
-#endif
-
-PHP_MINIT_FUNCTION(xml)
-{
- le_xml_parser = zend_register_list_destructors_ex(xml_parser_dtor, NULL, "xml", module_number);
-
-#ifdef ZTS
- ts_allocate_id(&xml_globals_id, sizeof(php_xml_globals), (ts_allocate_ctor) php_xml_init_globals, NULL);
-#else
- XML(default_encoding) = "ISO-8859-1";
-#endif
-
- REGISTER_LONG_CONSTANT("XML_ERROR_NONE", XML_ERROR_NONE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_NO_MEMORY", XML_ERROR_NO_MEMORY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_SYNTAX", XML_ERROR_SYNTAX, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_NO_ELEMENTS", XML_ERROR_NO_ELEMENTS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_INVALID_TOKEN", XML_ERROR_INVALID_TOKEN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_TOKEN", XML_ERROR_UNCLOSED_TOKEN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_PARTIAL_CHAR", XML_ERROR_PARTIAL_CHAR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_TAG_MISMATCH", XML_ERROR_TAG_MISMATCH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_DUPLICATE_ATTRIBUTE", XML_ERROR_DUPLICATE_ATTRIBUTE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_JUNK_AFTER_DOC_ELEMENT", XML_ERROR_JUNK_AFTER_DOC_ELEMENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_PARAM_ENTITY_REF", XML_ERROR_PARAM_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNDEFINED_ENTITY", XML_ERROR_UNDEFINED_ENTITY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_RECURSIVE_ENTITY_REF", XML_ERROR_RECURSIVE_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_ASYNC_ENTITY", XML_ERROR_ASYNC_ENTITY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_BAD_CHAR_REF", XML_ERROR_BAD_CHAR_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_BINARY_ENTITY_REF", XML_ERROR_BINARY_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF", XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_MISPLACED_XML_PI", XML_ERROR_MISPLACED_XML_PI, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNKNOWN_ENCODING", XML_ERROR_UNKNOWN_ENCODING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_INCORRECT_ENCODING", XML_ERROR_INCORRECT_ENCODING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_CDATA_SECTION", XML_ERROR_UNCLOSED_CDATA_SECTION, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_EXTERNAL_ENTITY_HANDLING", XML_ERROR_EXTERNAL_ENTITY_HANDLING, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("XML_OPTION_CASE_FOLDING", PHP_XML_OPTION_CASE_FOLDING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_OPTION_TARGET_ENCODING", PHP_XML_OPTION_TARGET_ENCODING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_TAGSTART", PHP_XML_OPTION_SKIP_TAGSTART, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_WHITE", PHP_XML_OPTION_SKIP_WHITE, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(xml)
-{
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(xml)
-{
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(xml)
-{
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(xml)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "XML Support", "active");
- php_info_print_table_row(2, "XML Namespace Support", "active");
- php_info_print_table_row(2, "EXPAT Version",XML_ExpatVersion());
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ extension-internal functions */
-static zval *_xml_resource_zval(long value)
-{
- zval *ret;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_RESOURCE;
- Z_LVAL_P(ret) = value;
-
- zend_list_addref(value);
-
- return ret;
-}
-
-static zval *_xml_string_zval(const char *str)
-{
- zval *ret;
- int len = strlen(str);
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_STRING;
- Z_STRLEN_P(ret) = len;
- Z_STRVAL_P(ret) = estrndup(str, len);
- return ret;
-}
-
-static zval *_xml_xmlchar_zval(const XML_Char *s, int len, const XML_Char *encoding)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
-
- if (s == NULL) {
- ZVAL_FALSE(ret);
- return ret;
- }
- if (len == 0) {
- len = _xml_xmlcharlen(s);
- }
- Z_TYPE_P(ret) = IS_STRING;
- Z_STRVAL_P(ret) = xml_utf8_decode(s, len, &Z_STRLEN_P(ret), encoding);
- return ret;
-}
-/* }}} */
-
-/* {{{ xml_parser_dtor() */
-static void xml_parser_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xml_parser *parser = (xml_parser *)rsrc->ptr;
-
- /* please leave this commented - or ask thies@thieso.net before doing it (again) */
-#ifdef ZEND_ENGINE_2
- if (parser->object) {
- zval_ptr_dtor(&parser->object);
- }
-#endif
-
- if (parser->parser) {
- XML_ParserFree(parser->parser);
- }
- if (parser->ltags) {
- int inx;
- for (inx = 0; inx < parser->level; inx++)
- efree(parser->ltags[ inx ]);
- efree(parser->ltags);
- }
- if (parser->startElementHandler) {
- zval_ptr_dtor(&parser->startElementHandler);
- }
- if (parser->endElementHandler) {
- zval_ptr_dtor(&parser->endElementHandler);
- }
- if (parser->characterDataHandler) {
- zval_ptr_dtor(&parser->characterDataHandler);
- }
- if (parser->processingInstructionHandler) {
- zval_ptr_dtor(&parser->processingInstructionHandler);
- }
- if (parser->defaultHandler) {
- zval_ptr_dtor(&parser->defaultHandler);
- }
- if (parser->unparsedEntityDeclHandler) {
- zval_ptr_dtor(&parser->unparsedEntityDeclHandler);
- }
- if (parser->notationDeclHandler) {
- zval_ptr_dtor(&parser->notationDeclHandler);
- }
- if (parser->externalEntityRefHandler) {
- zval_ptr_dtor(&parser->externalEntityRefHandler);
- }
- if (parser->unknownEncodingHandler) {
- zval_ptr_dtor(&parser->unknownEncodingHandler);
- }
- if (parser->startNamespaceDeclHandler) {
- zval_ptr_dtor(&parser->startNamespaceDeclHandler);
- }
- if (parser->endNamespaceDeclHandler) {
- zval_ptr_dtor(&parser->endNamespaceDeclHandler);
- }
- if (parser->baseURI) {
- efree(parser->baseURI);
- }
-
- efree(parser);
-}
-/* }}} */
-
-/* {{{ xml_set_handler() */
-static void xml_set_handler(zval **handler, zval **data)
-{
- /* IS_ARRAY might indicate that we're using array($obj, 'method') syntax */
- if (Z_TYPE_PP(data) != IS_ARRAY) {
- convert_to_string_ex(data);
- }
-
- /* If we have already a handler, release it */
- if (*handler) {
- zval_ptr_dtor(handler);
- }
-
- zval_add_ref(data);
- *handler = *data;
-}
-/* }}} */
-
-/* {{{ xml_call_handler() */
-static zval *xml_call_handler(xml_parser *parser, zval *handler, int argc, zval **argv)
-{
- TSRMLS_FETCH();
-
- if (parser && handler) {
- zval *retval;
- int i;
- int result;
-
- MAKE_STD_ZVAL(retval);
- ZVAL_FALSE(retval);
-
- result = call_user_function(EG(function_table), &parser->object, handler, retval, argc, argv TSRMLS_CC);
-
- if (result == FAILURE) {
- zval **method;
- zval **obj;
-
- if (Z_TYPE_P(handler) == IS_STRING) {
- php_error(E_WARNING, "Unable to call handler %s()", Z_STRVAL_P(handler));
- } else if (zend_hash_index_find(Z_ARRVAL_P(handler), 0, (void **) &obj) == SUCCESS &&
- zend_hash_index_find(Z_ARRVAL_P(handler), 1, (void **) &method) == SUCCESS &&
- Z_TYPE_PP(obj) == IS_OBJECT &&
- Z_TYPE_PP(method) == IS_STRING) {
- php_error(E_WARNING, "Unable to call handler %s::%s()", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method));
- } else
- php_error(E_WARNING, "Unable to call handler");
-
- zval_dtor(retval);
- efree(retval);
- }
-
- for (i = 0; i < argc; i++) {
- zval_ptr_dtor(&(argv[i]));
- }
-
- if (result == FAILURE) {
- return NULL;
- } else {
- return retval;
- }
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ xml_encode_iso_8859_1() */
-inline static unsigned short xml_encode_iso_8859_1(unsigned char c)
-{
- return (unsigned short)c;
-}
-/* }}} */
-
-/* {{{ xml_decode_iso_8859_1() */
-inline static char xml_decode_iso_8859_1(unsigned short c)
-{
- return (char)(c > 0xff ? '?' : c);
-}
-/* }}} */
-
-/* {{{ xml_encode_us_ascii() */
-inline static unsigned short xml_encode_us_ascii(unsigned char c)
-{
- return (unsigned short)c;
-}
-/* }}} */
-
-/* {{{ xml_decode_us_ascii() */
-inline static char xml_decode_us_ascii(unsigned short c)
-{
- return (char)(c > 0x7f ? '?' : c);
-}
-/* }}} */
-
-/* {{{ xml_get_encoding() */
-static xml_encoding *xml_get_encoding(const XML_Char *name)
-{
- xml_encoding *enc = &xml_encodings[0];
-
- while (enc && enc->name) {
- if (strcasecmp(name, enc->name) == 0) {
- return enc;
- }
- enc++;
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ xml_utf8_encode */
-static XML_Char *xml_utf8_encode(const char *s, int len, int *newlen, const XML_Char *encoding)
-{
- int pos = len;
- char *newbuf;
- unsigned short c;
- unsigned short (*encoder)(unsigned char) = NULL;
- xml_encoding *enc = xml_get_encoding(encoding);
-
- *newlen = 0;
- if (enc) {
- encoder = enc->encoding_function;
- } else {
- /* If the target encoding was unknown, fail */
- return NULL;
- }
- if (encoder == NULL) {
- /* If no encoder function was specified, return the data as-is.
- */
- newbuf = emalloc(len + 1);
- memcpy(newbuf, s, len);
- *newlen = len;
- newbuf[*newlen] = '\0';
- return newbuf;
- }
- /* This is the theoretical max (will never get beyond len * 2 as long
- * as we are converting from single-byte characters, though) */
- newbuf = emalloc(len * 4 + 1);
- while (pos > 0) {
- c = encoder ? encoder((unsigned char)(*s)) : (unsigned short)(*s);
- if (c < 0x80) {
- newbuf[(*newlen)++] = (char) c;
- } else if (c < 0x800) {
- newbuf[(*newlen)++] = (0xc0 | (c >> 6));
- newbuf[(*newlen)++] = (0x80 | (c & 0x3f));
- } else if (c < 0x10000) {
- newbuf[(*newlen)++] = (0xe0 | (c >> 12));
- newbuf[(*newlen)++] = (0xc0 | ((c >> 6) & 0x3f));
- newbuf[(*newlen)++] = (0x80 | (c & 0x3f));
- } else if (c < 0x200000) {
- newbuf[(*newlen)++] = (0xf0 | (c >> 18));
- newbuf[(*newlen)++] = (0xe0 | ((c >> 12) & 0x3f));
- newbuf[(*newlen)++] = (0xc0 | ((c >> 6) & 0x3f));
- newbuf[(*newlen)++] = (0x80 | (c & 0x3f));
- }
- pos--;
- s++;
- }
- newbuf[*newlen] = 0;
- newbuf = erealloc(newbuf, (*newlen)+1);
- return newbuf;
-}
-/* }}} */
-
-/* {{{ xml_utf8_decode */
-PHPAPI char *xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encoding)
-{
- int pos = len;
- char *newbuf = emalloc(len + 1);
- unsigned short c;
- char (*decoder)(unsigned short) = NULL;
- xml_encoding *enc = xml_get_encoding(encoding);
-
- *newlen = 0;
- if (enc) {
- decoder = enc->decoding_function;
- }
- if (decoder == NULL) {
- /* If the target encoding was unknown, or no decoder function
- * was specified, return the UTF-8-encoded data as-is.
- */
- memcpy(newbuf, s, len);
- *newlen = len;
- newbuf[*newlen] = '\0';
- return newbuf;
- }
- while (pos > 0) {
- c = (unsigned char)(*s);
- if (c >= 0xf0) { /* four bytes encoded, 21 bits */
- c = ((s[0]&7)<<18) | ((s[1]&63)<<12) | ((s[2]&63)<<6) | (s[3]&63);
- s += 4;
- pos -= 4;
- } else if (c >= 0xe0) { /* three bytes encoded, 16 bits */
- c = ((s[0]&63)<<12) | ((s[1]&63)<<6) | (s[2]&63);
- s += 3;
- pos -= 3;
- } else if (c >= 0xc0) { /* two bytes encoded, 11 bits */
- c = ((s[0]&63)<<6) | (s[1]&63);
- s += 2;
- pos -= 2;
- } else {
- s++;
- pos--;
- }
- newbuf[*newlen] = decoder ? decoder(c) : c;
- ++*newlen;
- }
- if (*newlen < len) {
- newbuf = erealloc(newbuf, *newlen + 1);
- }
- newbuf[*newlen] = '\0';
- return newbuf;
-}
-/* }}} */
-
-/* {{{ _xml_xmlcharlen() */
-static int _xml_xmlcharlen(const XML_Char *s)
-{
- int len = 0;
-
- while (*s) {
- len++;
- s++;
- }
- return len;
-}
-/* }}} */
-
-/* {{{ _xml_zval_strdup() */
-PHPAPI char *_xml_zval_strdup(zval *val)
-{
- if (Z_TYPE_P(val) == IS_STRING) {
- char *buf = emalloc(Z_STRLEN_P(val) + 1);
- memcpy(buf, Z_STRVAL_P(val), Z_STRLEN_P(val));
- buf[Z_STRLEN_P(val)] = '\0';
- return buf;
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ _xml_add_to_info */
-static void _xml_add_to_info(xml_parser *parser,char *name)
-{
- zval **element, *values;
-
- if (! parser->info) {
- return;
- }
-
- if (zend_hash_find(Z_ARRVAL_P(parser->info),name,strlen(name) + 1,(void **) &element) == FAILURE) {
- MAKE_STD_ZVAL(values);
-
- if (array_init(values) == FAILURE) {
- php_error(E_ERROR, "Unable to initialize array");
- return;
- }
-
- zend_hash_update(Z_ARRVAL_P(parser->info), name, strlen(name)+1, (void *) &values, sizeof(zval*), (void **) &element);
- }
-
- add_next_index_long(*element,parser->curtag);
-
- parser->curtag++;
-}
-/* }}} */
-
-/* {{{ _xml_decode_tag() */
-static char *_xml_decode_tag(xml_parser *parser, const char *tag)
-{
- char *newstr;
- int out_len;
-
- newstr = xml_utf8_decode(tag, strlen(tag), &out_len, parser->target_encoding);
-
- if (parser->case_folding) {
- php_strtoupper(newstr, out_len);
- }
-
- return newstr;
-}
-/* }}} */
-
-/* {{{ _xml_startElementHandler() */
-void _xml_startElementHandler(void *userData, const char *name, const char **attributes)
-{
- xml_parser *parser = (xml_parser *)userData;
- const char **attrs = attributes;
- char *tag_name;
- char *att, *val;
- int val_len;
- zval *retval, *args[3];
-
- if (parser) {
- parser->level++;
-
- tag_name = _xml_decode_tag(parser, name);
-
- if (parser->startElementHandler) {
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_string_zval(tag_name);
- MAKE_STD_ZVAL(args[2]);
- array_init(args[2]);
-
- while (attributes && *attributes) {
- att = _xml_decode_tag(parser, attributes[0]);
- val = xml_utf8_decode(attributes[1], strlen(attributes[1]), &val_len, parser->target_encoding);
-
- add_assoc_stringl(args[2], att, val, val_len, 0);
-
- attributes += 2;
-
- efree(att);
- }
-
- if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-
- if (parser->data) {
- zval *tag, *atr;
- int atcnt = 0;
-
- MAKE_STD_ZVAL(tag);
- MAKE_STD_ZVAL(atr);
-
- array_init(tag);
- array_init(atr);
-
- _xml_add_to_info(parser,((char *) tag_name) + parser->toffset);
-
- add_assoc_string(tag,"tag",((char *) tag_name) + parser->toffset,1); /* cast to avoid gcc-warning */
- add_assoc_string(tag,"type","open",1);
- add_assoc_long(tag,"level",parser->level);
-
- parser->ltags[parser->level-1] = estrdup(tag_name);
- parser->lastwasopen = 1;
-
- attributes = attrs;
-
- while (attributes && *attributes) {
- att = _xml_decode_tag(parser, attributes[0]);
- val = xml_utf8_decode(attributes[1], strlen(attributes[1]), &val_len, parser->target_encoding);
-
- add_assoc_stringl(atr,att,val,val_len,0);
-
- atcnt++;
- attributes += 2;
-
- efree(att);
- }
-
- if (atcnt) {
- zend_hash_add(Z_ARRVAL_P(tag),"attributes",sizeof("attributes"),&atr,sizeof(zval*),NULL);
- } else {
- zval_dtor(atr);
- efree(atr);
- }
-
- zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),(void *) &parser->ctag);
- }
-
- efree(tag_name);
- }
-}
-/* }}} */
-
-/* {{{ _xml_endElementHandler() */
-void _xml_endElementHandler(void *userData, const char *name)
-{
- xml_parser *parser = (xml_parser *)userData;
- char *tag_name;
-
- if (parser) {
- zval *retval, *args[2];
-
- tag_name = _xml_decode_tag(parser, name);
-
- if (parser->endElementHandler) {
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_string_zval(tag_name);
-
- if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-
- if (parser->data) {
- zval *tag;
-
- if (parser->lastwasopen) {
- add_assoc_string(*(parser->ctag),"type","complete",1);
- } else {
- MAKE_STD_ZVAL(tag);
-
- array_init(tag);
-
- _xml_add_to_info(parser,((char *) tag_name) + parser->toffset);
-
- add_assoc_string(tag,"tag",((char *) tag_name) + parser->toffset,1); /* cast to avoid gcc-warning */
- add_assoc_string(tag,"type","close",1);
- add_assoc_long(tag,"level",parser->level);
-
- zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),NULL);
- }
-
- parser->lastwasopen = 0;
- }
-
- efree(tag_name);
-
- if (parser->ltags) {
- efree(parser->ltags[parser->level-1]);
- }
-
- parser->level--;
- }
-}
-/* }}} */
-
-/* {{{ _xml_characterDataHandler() */
-void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser) {
- zval *retval, *args[2];
-
- if (parser->characterDataHandler) {
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-
- if (parser->data) {
- int i;
- int doprint = 0;
-
- char *decoded_value;
- int decoded_len;
-
- decoded_value = xml_utf8_decode(s,len,&decoded_len,parser->target_encoding);
- for (i = 0; i < decoded_len; i++) {
- switch (decoded_value[i]) {
- case ' ':
- case '\t':
- case '\n':
- continue;
- default:
- doprint = 1;
- break;
- }
- if (doprint) {
- break;
- }
- }
- if (doprint || (! parser->skipwhite)) {
- if (parser->lastwasopen) {
- zval **myval;
-
- /* check if the current tag already has a value - if yes append to that! */
- if (zend_hash_find(Z_ARRVAL_PP(parser->ctag),"value",sizeof("value"),(void **) &myval) == SUCCESS) {
- int newlen = Z_STRLEN_PP(myval) + decoded_len;
- Z_STRVAL_PP(myval) = erealloc(Z_STRVAL_PP(myval),newlen+1);
- strcpy(Z_STRVAL_PP(myval) + Z_STRLEN_PP(myval),decoded_value);
- Z_STRLEN_PP(myval) += decoded_len;
- efree(decoded_value);
- } else {
- add_assoc_string(*(parser->ctag),"value",decoded_value,0);
- }
-
- } else {
- zval *tag;
-
- MAKE_STD_ZVAL(tag);
-
- array_init(tag);
-
- _xml_add_to_info(parser,parser->ltags[parser->level-1] + parser->toffset);
-
- add_assoc_string(tag,"tag",parser->ltags[parser->level-1] + parser->toffset,1);
- add_assoc_string(tag,"value",decoded_value,0);
- add_assoc_string(tag,"type","cdata",1);
- add_assoc_long(tag,"level",parser->level);
-
- zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),NULL);
- }
- } else {
- efree(decoded_value);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_processingInstructionHandler() */
-void _xml_processingInstructionHandler(void *userData, const XML_Char *target, const XML_Char *data)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->processingInstructionHandler) {
- zval *retval, *args[3];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(target, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(data, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, 3, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_defaultHandler() */
-void _xml_defaultHandler(void *userData, const XML_Char *s, int len)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->defaultHandler) {
- zval *retval, *args[2];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->defaultHandler, 2, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_unparsedEntityDeclHandler() */
-void _xml_unparsedEntityDeclHandler(void *userData,
- const XML_Char *entityName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->unparsedEntityDeclHandler) {
- zval *retval, *args[6];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(entityName, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);
- args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);
- args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);
- args[5] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, 6, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_notationDeclHandler() */
-void _xml_notationDeclHandler(void *userData,
- const XML_Char *notationName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->notationDeclHandler) {
- zval *retval, *args[5];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);
- args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);
- args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->notationDeclHandler, 5, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_externalEntityRefHandler() */
-int _xml_externalEntityRefHandler(XML_Parser parserPtr,
- const XML_Char *openEntityNames,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
-{
- xml_parser *parser = XML_GetUserData(parserPtr);
- int ret = 0; /* abort if no handler is set (should be configurable?) */
-
- if (parser && parser->externalEntityRefHandler) {
- zval *retval, *args[5];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(openEntityNames, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);
- args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);
- args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, 5, args))) {
- convert_to_long(retval);
- ret = Z_LVAL_P(retval);
- efree(retval);
- } else {
- ret = 0;
- }
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ _xml_startNamespaceDeclHandler() */
-void _xml_startNamespaceDeclHandler(void *userData,const XML_Char *prefix, const XML_Char *uri)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->startNamespaceDeclHandler) {
- zval *retval, *args[3];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(uri, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, 3, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_endNamespaceDeclHandler() */
-void _xml_endNamespaceDeclHandler(void *userData, const XML_Char *prefix)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->endNamespaceDeclHandler) {
- zval *retval, *args[2];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, 2, args))) {
- zval_dtor(retval);
- efree(retval);
- }
- }
-}
-/* }}} */
-
-/************************* EXTENSION FUNCTIONS *************************/
-
-/* {{{ proto resource xml_parser_create([string encoding])
- Create an XML parser */
-PHP_FUNCTION(xml_parser_create)
-{
- xml_parser *parser;
- int argc;
- zval **encodingArg;
- XML_Char *encoding;
- char thisfunc[] = "xml_parser_create";
-
- argc = ZEND_NUM_ARGS();
-
- if (argc > 1 || zend_get_parameters_ex(argc, &encodingArg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 1) {
- convert_to_string_ex(encodingArg);
- /* The supported encoding types are hardcoded here because
- * we are limited to the encodings supported by expat/xmltok.
- */
- if (strncasecmp(Z_STRVAL_PP(encodingArg), "ISO-8859-1",
- Z_STRLEN_PP(encodingArg)) == 0) {
- encoding = "ISO-8859-1";
- } else if (strncasecmp(Z_STRVAL_PP(encodingArg), "UTF-8",
- Z_STRLEN_PP(encodingArg)) == 0) {
- encoding = "UTF-8";
- } else if (strncasecmp(Z_STRVAL_PP(encodingArg), "US-ASCII",
- Z_STRLEN_PP(encodingArg)) == 0) {
- encoding = "US-ASCII";
- } else { /* UTF-16 not supported */
- php_error(E_WARNING, "%s: unsupported source encoding \"%s\"",
- thisfunc, Z_STRVAL_PP(encodingArg));
- RETURN_FALSE;
- }
- } else {
- encoding = XML(default_encoding);
- }
-
- parser = ecalloc(sizeof(xml_parser), 1);
- parser->parser = XML_ParserCreate(encoding);
- parser->target_encoding = encoding;
- parser->case_folding = 1;
- parser->object = NULL;
- XML_SetUserData(parser->parser, parser);
-
- ZEND_REGISTER_RESOURCE(return_value,parser,le_xml_parser);
- parser->index = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto resource xml_parser_create_ns([string encoding [, string sep]])
- Create an XML parser */
-PHP_FUNCTION(xml_parser_create_ns)
-{
- xml_parser *parser;
- int argc;
- zval **encodingArg, **sepArg;
- XML_Char *encoding, *sep;
- char thisfunc[] = "xml_parser_create";
-
- argc = ZEND_NUM_ARGS();
-
- if (argc > 2 || zend_get_parameters_ex(argc, &encodingArg, &sepArg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc >= 1) {
- convert_to_string_ex(encodingArg);
- /* The supported encoding types are hardcoded here because
- * we are limited to the encodings supported by expat/xmltok.
- */
- if (strncasecmp(Z_STRVAL_PP(encodingArg), "ISO-8859-1",
- Z_STRLEN_PP(encodingArg)) == 0) {
- encoding = "ISO-8859-1";
- } else if (strncasecmp(Z_STRVAL_PP(encodingArg), "UTF-8",
- Z_STRLEN_PP(encodingArg)) == 0) {
- encoding = "UTF-8";
- } else if (strncasecmp(Z_STRVAL_PP(encodingArg), "US-ASCII",
- Z_STRLEN_PP(encodingArg)) == 0) {
- encoding = "US-ASCII";
- } else { /* UTF-16 not supported */
- php_error(E_WARNING, "%s: unsupported source encoding \"%s\"",
- thisfunc, Z_STRVAL_PP(encodingArg));
- RETURN_FALSE;
- }
- } else {
- encoding = XML(default_encoding);
- }
-
- if (argc == 2){
- convert_to_string_ex(sepArg);
- sep = Z_STRVAL_PP(sepArg);
- } else {
- sep = ":";
- }
-
- parser = ecalloc(sizeof(xml_parser), 1);
- parser->parser = XML_ParserCreateNS(encoding, sep[0]);
- parser->target_encoding = encoding;
- parser->case_folding = 1;
- parser->object = NULL;
- XML_SetUserData(parser->parser, parser);
-
- ZEND_REGISTER_RESOURCE(return_value,parser,le_xml_parser);
- parser->index = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto int xml_set_object(resource parser, object &obj)
- Set up object which should be used for callbacks */
-PHP_FUNCTION(xml_set_object)
-{
- xml_parser *parser;
- zval **pind, **mythis;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pind, &mythis) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mythis) != IS_OBJECT) {
- php_error(E_WARNING,"arg 2 has wrong type");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);
-
- /* please leave this commented - or ask thies@thieso.net before doing it (again) */
-#ifdef ZEND_ENGINE_2
- if (parser->object) {
- zval_ptr_dtor(&parser->object);
- }
-#endif
-
- parser->object = *mythis;
-
- /* please leave this commented - or ask thies@thieso.net before doing it (again) */
-#ifdef ZEND_ENGINE_2
- zval_add_ref(&parser->object);
-#endif
-
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_element_handler(resource parser, string shdl, string ehdl)
- Set up start and end element handlers */
-PHP_FUNCTION(xml_set_element_handler)
-{
- xml_parser *parser;
- zval **pind, **shdl, **ehdl;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &pind, &shdl, &ehdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->startElementHandler, shdl);
- xml_set_handler(&parser->endElementHandler, ehdl);
- XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_character_data_handler(resource parser, string hdl)
- Set up character data handler */
-PHP_FUNCTION(xml_set_character_data_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->characterDataHandler, hdl);
- XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_processing_instruction_handler(resource parser, string hdl)
- Set up processing instruction (PI) handler */
-PHP_FUNCTION(xml_set_processing_instruction_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->processingInstructionHandler, hdl);
- XML_SetProcessingInstructionHandler(parser->parser, _xml_processingInstructionHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_default_handler(resource parser, string hdl)
- Set up default handler */
-PHP_FUNCTION(xml_set_default_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->defaultHandler, hdl);
- XML_SetDefaultHandler(parser->parser, _xml_defaultHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)
- Set up unparsed entity declaration handler */
-PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->unparsedEntityDeclHandler, hdl);
- XML_SetUnparsedEntityDeclHandler(parser->parser, _xml_unparsedEntityDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_notation_decl_handler(resource parser, string hdl)
- Set up notation declaration handler */
-PHP_FUNCTION(xml_set_notation_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->notationDeclHandler, hdl);
- XML_SetNotationDeclHandler(parser->parser, _xml_notationDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_external_entity_ref_handler(resource parser, string hdl)
- Set up external entity reference handler */
-PHP_FUNCTION(xml_set_external_entity_ref_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->externalEntityRefHandler, hdl);
- XML_SetExternalEntityRefHandler(parser->parser, _xml_externalEntityRefHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_start_namespace_decl_handler(resource parser, string hdl)
- Set up character data handler */
-PHP_FUNCTION(xml_set_start_namespace_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->startNamespaceDeclHandler, hdl);
- XML_SetStartNamespaceDeclHandler(parser->parser, _xml_startNamespaceDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_end_namespace_decl_handler(resource parser, string hdl)
- Set up character data handler */
-PHP_FUNCTION(xml_set_end_namespace_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->endNamespaceDeclHandler, hdl);
- XML_SetEndNamespaceDeclHandler(parser->parser, _xml_endNamespaceDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_parse(resource parser, string data [, int isFinal])
- Start parsing an XML document */
-PHP_FUNCTION(xml_parse)
-{
- xml_parser *parser;
- zval **pind, **data, **final;
- int argc, isFinal, ret;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &pind, &data, &final) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_string_ex(data);
-
- if (argc == 3) {
- convert_to_long_ex(final);
- isFinal = Z_LVAL_PP(final);
- } else {
- isFinal = 0;
- }
-
- ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), isFinal);
- RETVAL_LONG(ret);
-}
-
-/* }}} */
-
-/* {{{ proto int xml_parse_into_struct(resource parser, string data, array &struct, array &index)
- Parsing a XML document */
-
-PHP_FUNCTION(xml_parse_into_struct)
-{
- xml_parser *parser;
- zval **pind, **data, **xdata, **info = 0;
- int argc, ret;
-
- argc = ZEND_NUM_ARGS();
- if (zend_get_parameters_ex(4, &pind, &data, &xdata,&info) == SUCCESS) {
- zval_dtor(*info);
- array_init(*info);
- } else if (zend_get_parameters_ex(3, &pind, &data, &xdata) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_string_ex(data);
- zval_dtor(*xdata);
- array_init(*xdata);
-
- parser->data = *xdata;
- if (info)
- parser->info = *info;
- parser->level = 0;
- parser->ltags = emalloc(XML_MAXLEVEL * sizeof(char *));
-
- XML_SetDefaultHandler(parser->parser, _xml_defaultHandler);
- XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
- XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
-
- ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), 1);
-
- RETVAL_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto int xml_get_error_code(resource parser)
- Get XML parser error code */
-PHP_FUNCTION(xml_get_error_code)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG((long)XML_GetErrorCode(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto string xml_error_string(int code)
- Get XML parser error string */
-PHP_FUNCTION(xml_error_string)
-{
- zval **code;
- char *str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &code) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(code);
- str = (char *)XML_ErrorString((int)Z_LVAL_PP(code));
- if (str) {
- RETVAL_STRING(str, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int xml_get_current_line_number(resource parser)
- Get current line number for an XML parser */
-PHP_FUNCTION(xml_get_current_line_number)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto int xml_get_current_column_number(resource parser)
- Get current column number for an XML parser */
-PHP_FUNCTION(xml_get_current_column_number)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto int xml_get_current_byte_index(resource parser)
- Get current byte index for an XML parser */
-PHP_FUNCTION(xml_get_current_byte_index)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto int xml_parser_free(resource parser)
- Free an XML parser */
-PHP_FUNCTION(xml_parser_free)
-{
- zval **pind;
- xml_parser *parser;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- if (zend_list_delete(parser->index) == FAILURE) {
- RETURN_FALSE;
- }
-
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_parser_set_option(resource parser, int option, mixed value)
- Set options in an XML parser */
-PHP_FUNCTION(xml_parser_set_option)
-{
- xml_parser *parser;
- zval **pind, **opt, **val;
- char thisfunc[] = "xml_parser_set_option";
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pind, &opt, &val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_long_ex(opt);
-
- switch (Z_LVAL_PP(opt)) {
- case PHP_XML_OPTION_CASE_FOLDING:
- convert_to_long_ex(val);
- parser->case_folding = Z_LVAL_PP(val);
- break;
- case PHP_XML_OPTION_SKIP_TAGSTART:
- convert_to_long_ex(val);
- parser->toffset = Z_LVAL_PP(val);
- break;
- case PHP_XML_OPTION_SKIP_WHITE:
- convert_to_long_ex(val);
- parser->skipwhite = Z_LVAL_PP(val);
- break;
- case PHP_XML_OPTION_TARGET_ENCODING: {
- xml_encoding *enc;
- convert_to_string_ex(val);
- enc = xml_get_encoding(Z_STRVAL_PP(val));
- if (enc == NULL) {
- php_error(E_WARNING, "%s: unsupported target encoding \"%s\"",
- thisfunc, Z_STRVAL_PP(val));
- RETURN_FALSE;
- }
- parser->target_encoding = enc->name;
- break;
- }
- default:
- php_error(E_WARNING, "%s: unknown option", thisfunc);
- RETURN_FALSE;
- break;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_parser_get_option(resource parser, int option)
- Get options from an XML parser */
-PHP_FUNCTION(xml_parser_get_option)
-{
- xml_parser *parser;
- zval **pind, **opt;
- char thisfunc[] = "xml_parser_get_option";
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &opt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_long_ex(opt);
-
- switch (Z_LVAL_PP(opt)) {
- case PHP_XML_OPTION_CASE_FOLDING:
- RETURN_LONG(parser->case_folding);
- break;
- case PHP_XML_OPTION_TARGET_ENCODING:
- RETURN_STRING(parser->target_encoding, 1);
- break;
- default:
- php_error(E_WARNING, "%s: unknown option", thisfunc);
- RETURN_FALSE;
- break;
- }
-
- RETVAL_FALSE; /* never reached */
-}
-/* }}} */
-
-/* {{{ proto string utf8_encode(string data)
- Encodes an ISO-8859-1 string to UTF-8 */
-PHP_FUNCTION(utf8_encode)
-{
- zval **arg;
- XML_Char *encoded;
- int len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
- encoded = xml_utf8_encode(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &len, "ISO-8859-1");
- if (encoded == NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(encoded, len, 0);
-}
-/* }}} */
-
-/* {{{ proto string utf8_decode(string data)
- Converts a UTF-8 encoded string to ISO-8859-1 */
-PHP_FUNCTION(utf8_decode)
-{
- zval **arg;
- XML_Char *decoded;
- int len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
- decoded = xml_utf8_decode(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &len, "ISO-8859-1");
- if (decoded == NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(decoded, len, 0);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/xmlrpc/CREDITS b/ext/xmlrpc/CREDITS
deleted file mode 100644
index cfb14faf80..0000000000
--- a/ext/xmlrpc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-xmlrpc
-Dan Libby
diff --git a/ext/xmlrpc/EXPERIMENTAL b/ext/xmlrpc/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/xmlrpc/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/xmlrpc/config.m4 b/ext/xmlrpc/config.m4
deleted file mode 100644
index 5da82a76be..0000000000
--- a/ext/xmlrpc/config.m4
+++ /dev/null
@@ -1,82 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-sinclude(ext/xmlrpc/libxmlrpc/acinclude.m4)
-sinclude(ext/xmlrpc/libxmlrpc/xmlrpc.m4)
-sinclude(libxmlrpc/acinclude.m4)
-sinclude(libxmlrpc/xmlrpc.m4)
-
-PHP_ARG_WITH(xmlrpc, for XMLRPC-EPI support,
-[ --with-xmlrpc[=DIR] Include XMLRPC-EPI support.])
-
-xmlrpc_ext_shared=$ext_shared
-
-PHP_ARG_WITH(expat-dir, libexpat dir for XMLRPC-EPI,
-[ --with-expat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI.])
-
-if test "$PHP_XMLRPC" != "no"; then
-
- PHP_SUBST(XMLRPC_SHARED_LIBADD)
- AC_DEFINE(HAVE_XMLRPC,1,[ ])
-
- testval=no
- for i in /usr /usr/local $PHP_EXPAT_DIR $XMLRPC_DIR; do
- if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then
- AC_DEFINE(HAVE_LIBEXPAT2,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(expat, $i/lib, XMLRPC_SHARED_LIBADD)
- PHP_ADD_INCLUDE($i/include)
- testval=yes
- fi
- done
-
- if test "$testval" = "no"; then
- AC_MSG_ERROR(XML-RPC support requires libexpat. Use --with-expat-dir=<DIR>)
- fi
-
- if test "$PHP_ICONV" = "no"; then
- PHP_ICONV=yes
- fi
- PHP_SETUP_ICONV(XMLRPC_SHARED_LIBADD, [], [
- AC_MSG_ERROR([iconv not found, in order to build xmlrpc you need the iconv library])
- ])
-fi
-
-
-if test "$PHP_XMLRPC" = "yes"; then
- XMLRPC_CHECKS
- PHP_NEW_EXTENSION(xmlrpc,xmlrpc-epi-php.c libxmlrpc/base64.c \
- libxmlrpc/simplestring.c libxmlrpc/xml_to_dandarpc.c \
- libxmlrpc/xmlrpc_introspection.c libxmlrpc/encodings.c \
- libxmlrpc/system_methods.c libxmlrpc/xml_to_xmlrpc.c \
- libxmlrpc/queue.c libxmlrpc/xml_element.c libxmlrpc/xmlrpc.c \
- libxmlrpc/xml_to_soap.c,$xmlrpc_ext_shared,,
- -I@ext_srcdir@/libxmlrpc -DVERSION="0.50")
- PHP_ADD_BUILD_DIR($ext_builddir/libxmlrpc)
- XMLRPC_MODULE_TYPE=builtin
-
-elif test "$PHP_XMLRPC" != "no"; then
-
- if test -r $PHP_XMLRPC/include/xmlrpc.h; then
- XMLRPC_DIR=$PHP_XMLRPC
- else
- AC_MSG_CHECKING(for XMLRPC-EPI in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/xmlrpc.h; then
- XMLRPC_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$XMLRPC_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the XMLRPC-EPI distribution)
- fi
-
- PHP_ADD_INCLUDE($XMLRPC_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(xmlrpc, $XMLRPC_DIR/lib, XMLRPC_SHARED_LIBADD)
-
-fi
-
-
diff --git a/ext/xmlrpc/libxmlrpc/README b/ext/xmlrpc/libxmlrpc/README
deleted file mode 100644
index 323edfa671..0000000000
--- a/ext/xmlrpc/libxmlrpc/README
+++ /dev/null
@@ -1,17 +0,0 @@
-organization of this directory is moving towards this approach:
-
-<module>.h -- public API and data types
-<module>_private.h -- protected API and data types
-<module>.c -- implementation and private API / types
-
-The rules are:
-.c files may include *_private.h.
-.h files may not include *_private.h
-
-This allows us to have a nicely encapsulated C api with opaque data types and private functions
-that are nonetheless shared between source files without redundant extern declarations..
-
-
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/acinclude.m4 b/ext/xmlrpc/libxmlrpc/acinclude.m4
deleted file mode 100644
index 07bf4f0b07..0000000000
--- a/ext/xmlrpc/libxmlrpc/acinclude.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# Local macros for automake & autoconf
-
-AC_DEFUN(XMLRPC_FUNCTION_CHECKS,[
-
-# Standard XMLRPC list
-AC_CHECK_FUNCS( \
- strtoul strtoull snprintf \
- strstr strpbrk strerror\
- memcpy memmove)
-
-])
-
-AC_DEFUN(XMLRPC_HEADER_CHECKS,[
-AC_HEADER_STDC
-AC_CHECK_HEADERS(xmlparse.h xmltok.h stdlib.h strings.h string.h)
-])
-
-AC_DEFUN(XMLRPC_TYPE_CHECKS,[
-
-AC_REQUIRE([AC_C_CONST])
-AC_REQUIRE([AC_C_INLINE])
-AC_CHECK_SIZEOF(char, 1)
-
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_TYPE_UID_T
-
-
-])
diff --git a/ext/xmlrpc/libxmlrpc/base64.c b/ext/xmlrpc/libxmlrpc/base64.c
deleted file mode 100644
index 03c88a2b3c..0000000000
--- a/ext/xmlrpc/libxmlrpc/base64.c
+++ /dev/null
@@ -1,193 +0,0 @@
-static const char rcsid[] = "#(@) $Id$";
-
-/*
-
- Encode or decode file as MIME base64 (RFC 1341)
-
- by John Walker
- http://www.fourmilab.ch/
-
- This program is in the public domain.
-
-*/
-#include <stdio.h>
-
-/* ENCODE -- Encode binary file into base64. */
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "base64.h"
-
-static unsigned char dtable[512];
-
-void buffer_new(struct buffer_st *b)
-{
- b->length = 512;
- b->data = malloc(sizeof(char)*(b->length));
- b->data[0] = 0;
- b->ptr = b->data;
- b->offset = 0;
-}
-
-void buffer_add(struct buffer_st *b, char c)
-{
- *(b->ptr++) = c;
- b->offset++;
- if (b->offset == b->length) {
- b->length += 512;
- b->data = realloc(b->data, b->length);
- b->ptr = b->data + b->offset;
- }
-}
-
-void buffer_delete(struct buffer_st *b)
-{
- free(b->data);
- b->length = 0;
- b->offset = 0;
- b->ptr = NULL;
- b->data = NULL;
-}
-
-void base64_encode(struct buffer_st *b, const char *source, int length)
-{
- int i, hiteof = 0;
- int offset = 0;
- int olen;
- char *dest;
-
- olen = 0;
-
- buffer_new(b);
-
- /* Fill dtable with character encodings. */
-
- for (i = 0; i < 26; i++) {
- dtable[i] = 'A' + i;
- dtable[26 + i] = 'a' + i;
- }
- for (i = 0; i < 10; i++) {
- dtable[52 + i] = '0' + i;
- }
- dtable[62] = '+';
- dtable[63] = '/';
-
- while (!hiteof) {
- unsigned char igroup[3], ogroup[4];
- int c, n;
-
- igroup[0] = igroup[1] = igroup[2] = 0;
- for (n = 0; n < 3; n++) {
- c = *(source++);
- offset++;
- if (offset > length) {
- hiteof = 1;
- break;
- }
- igroup[n] = (unsigned char) c;
- }
- if (n > 0) {
- ogroup[0] = dtable[igroup[0] >> 2];
- ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)];
- ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)];
- ogroup[3] = dtable[igroup[2] & 0x3F];
-
- /* Replace characters in output stream with "=" pad
- characters if fewer than three characters were
- read from the end of the input stream. */
-
- if (n < 3) {
- ogroup[3] = '=';
- if (n < 2) {
- ogroup[2] = '=';
- }
- }
- for (i = 0; i < 4; i++) {
- buffer_add(b, ogroup[i]);
- if (!(b->offset % 72)) {
- // buffer_add(b, '\r');
- buffer_add(b, '\n');
- }
- }
- }
- }
- // buffer_add(b, '\r');
- buffer_add(b, '\n');
-}
-
-void base64_decode(struct buffer_st *bfr, const char *source, int length)
-{
- int i;
- int offset = 0;
- int endoffile;
- int count;
-
- buffer_new(bfr);
-
- for (i = 0; i < 255; i++) {
- dtable[i] = 0x80;
- }
- for (i = 'A'; i <= 'Z'; i++) {
- dtable[i] = 0 + (i - 'A');
- }
- for (i = 'a'; i <= 'z'; i++) {
- dtable[i] = 26 + (i - 'a');
- }
- for (i = '0'; i <= '9'; i++) {
- dtable[i] = 52 + (i - '0');
- }
- dtable['+'] = 62;
- dtable['/'] = 63;
- dtable['='] = 0;
-
- endoffile = 0;
-
- /*CONSTANTCONDITION*/
- while (1) {
- unsigned char a[4], b[4], o[3];
-
- for (i = 0; i < 4; i++) {
- int c;
- while (1) {
- c = *(source++);
- offset++;
- if (offset > length) endoffile = 1;
- if (isspace(c) || c == '\n' || c == '\r') continue;
- break;
- }
-
- if (endoffile) {
- /*
- if (i > 0) {
- fprintf(stderr, "Input file incomplete.\n");
- exit(1);
- }
- */
- return;
- }
-
- if (dtable[c] & 0x80) {
- /*
- fprintf(stderr, "Offset %i length %i\n", offset, length);
- fprintf(stderr, "character '%c:%x:%c' in input file.\n", c, c, dtable[c]);
- exit(1);
- */
- i--;
- continue;
- }
- a[i] = (unsigned char) c;
- b[i] = (unsigned char) dtable[c];
- }
- o[0] = (b[0] << 2) | (b[1] >> 4);
- o[1] = (b[1] << 4) | (b[2] >> 2);
- o[2] = (b[2] << 6) | b[3];
- i = a[2] == '=' ? 1 : (a[3] == '=' ? 2 : 3);
- count = 0;
- while (count < i) {
- buffer_add(bfr, o[count++]);
- }
- if (i < 3) {
- return;
- }
- }
-}
diff --git a/ext/xmlrpc/libxmlrpc/base64.h b/ext/xmlrpc/libxmlrpc/base64.h
deleted file mode 100644
index 4cf156ad1e..0000000000
--- a/ext/xmlrpc/libxmlrpc/base64.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-
- Encode or decode file as MIME base64 (RFC 1341)
-
- by John Walker
- http://www.fourmilab.ch/
-
- This program is in the public domain.
-
-*/
-
-
-struct buffer_st {
- char *data;
- int length;
- char *ptr;
- int offset;
-};
-
-void buffer_new(struct buffer_st *b);
-void buffer_add(struct buffer_st *b, char c);
-void buffer_delete(struct buffer_st *b);
-
-void base64_encode(struct buffer_st *b, const char *source, int length);
-void base64_decode(struct buffer_st *b, const char *source, int length);
-
-/*
-#define DEBUG_MALLOC
- */
-
-#ifdef DEBUG_MALLOC
-void *_malloc_real(size_t s, char *file, int line);
-void _free_real(void *p, char *file, int line);
-
-#define malloc(s) _malloc_real(s,__FILE__,__LINE__)
-#define free(p) _free_real(p, __FILE__,__LINE__)
-#endif
-
diff --git a/ext/xmlrpc/libxmlrpc/encodings.c b/ext/xmlrpc/libxmlrpc/encodings.c
deleted file mode 100644
index 9999b96c88..0000000000
--- a/ext/xmlrpc/libxmlrpc/encodings.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-#include <errno.h>
-
-#ifdef HAVE_GICONV_H
-#include <giconv.h>
-#else
-#include <iconv.h>
-#endif
-
-#include "encodings.h"
-
-static char* convert(const char* src, int src_len, int *new_len, const char* from_enc, const char* to_enc) {
- char* outbuf = 0;
-
- if(src && src_len && from_enc && to_enc) {
- int outlenleft = src_len;
- int outlen = src_len;
- int inlenleft = src_len;
- iconv_t ic = iconv_open(to_enc, from_enc);
- char* src_ptr = (char*)src;
- char* out_ptr = 0;
-
- if(ic != (iconv_t)-1) {
- size_t st;
- outbuf = (char*)malloc(outlen + 1);
-
- if(outbuf) {
- out_ptr = (char*)outbuf;
- while(inlenleft) {
- st = iconv(ic, &src_ptr, &inlenleft, &out_ptr, &outlenleft);
- if(st == -1) {
- if(errno == E2BIG) {
- int diff = out_ptr - outbuf;
- outlen += inlenleft;
- outlenleft += inlenleft;
- outbuf = (char*)realloc(outbuf, outlen + 1);
- if(!outbuf) {
- break;
- }
- out_ptr = outbuf + diff;
- }
- else {
- free(outbuf);
- outbuf = 0;
- break;
- }
- }
- }
- }
- iconv_close(ic);
- }
- outlen -= outlenleft;
-
- if(new_len) {
- *new_len = outbuf ? outlen : 0;
- }
- if(outbuf) {
- outbuf[outlen] = 0;
- }
- }
- return outbuf;
-}
-
-/* returns a new string that must be freed */
-char* utf8_encode(const char *s, int len, int *newlen, const char* encoding)
-{
- return convert(s, len, newlen, encoding, "UTF-8");
-}
-
-/* returns a new string, possibly decoded */
-char* utf8_decode(const char *s, int len, int *newlen, const char* encoding)
-{
- return convert(s, len, newlen, "UTF-8", encoding);
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/encodings.h b/ext/xmlrpc/libxmlrpc/encodings.h
deleted file mode 100644
index 486360b1be..0000000000
--- a/ext/xmlrpc/libxmlrpc/encodings.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef __ENCODINGS__H
-#define __ENCODINGS__H
-
-/* these defines are for legacy purposes. */
-#define encoding_utf_8 "UTF-8"
-typedef const char* ENCODING_ID;
-#define utf8_get_encoding_id_string(desired_enc) ((const char*)desired_enc)
-#define utf8_get_encoding_id_from_string(id_string) ((ENCODING_ID)id_string)
-
-char* utf8_encode(const char *s, int len, int *newlen, ENCODING_ID encoding);
-char* utf8_decode(const char *s, int len, int *newlen, ENCODING_ID encoding);
-
-#endif /* __ENCODINGS__H */
diff --git a/ext/xmlrpc/libxmlrpc/queue.c b/ext/xmlrpc/libxmlrpc/queue.c
deleted file mode 100644
index ecef90caf6..0000000000
--- a/ext/xmlrpc/libxmlrpc/queue.c
+++ /dev/null
@@ -1,981 +0,0 @@
-static const char rcsid[] = "#(@) $Id$";
-
-/*
- * Date last modified: Jan 2001
- * Modifications by Dan Libby (dan@libby.com), including:
- * - various fixes, null checks, etc
- * - addition of Q_Iter funcs, macros
- */
-
-
-/*-**************************************************************
- *
- * File : q.c
- *
- * Author: Peter Yard [1993.01.02] -- 02 Jan 1993
- *
- * Disclaimer: This code is released to the public domain.
- *
- * Description:
- * Generic double ended queue (Deque pronounced DEK) for handling
- * any data types, with sorting.
- *
- * By use of various functions in this module the caller
- * can create stacks, queues, lists, doubly linked lists,
- * sorted lists, indexed lists. All lists are dynamic.
- *
- * It is the responsibility of the caller to malloc and free
- * memory for insertion into the queue. A pointer to the object
- * is used so that not only can any data be used but various kinds
- * of data can be pushed on the same queue if one so wished e.g.
- * various length string literals mixed with pointers to structures
- * or integers etc.
- *
- * Enhancements:
- * A future improvement would be the option of multiple "cursors"
- * so that multiple locations could occur in the one queue to allow
- * placemarkers and additional flexibility. Perhaps even use queue
- * itself to have a list of cursors.
- *
- * Usage:
- *
- * /x init queue x/
- * queue q;
- * Q_Init(&q);
- *
- * To create a stack :
- *
- * Q_PushHead(&q, &mydata1); /x push x/
- * Q_PushHead(&q, &mydata2);
- * .....
- * data_ptr = Q_PopHead(&q); /x pop x/
- * .....
- * data_ptr = Q_Head(&q); /x top of stack x/
- *
- * To create a FIFO:
- *
- * Q_PushHead(&q, &mydata1);
- * .....
- * data_ptr = Q_PopTail(&q);
- *
- * To create a double list:
- *
- * data_ptr = Q_Head(&q);
- * ....
- * data_ptr = Q_Next(&q);
- * data_ptr = Q_Tail(&q);
- * if (Q_IsEmpty(&q)) ....
- * .....
- * data_ptr = Q_Previous(&q);
- *
- * To create a sorted list:
- *
- * Q_PushHead(&q, &mydata1); /x push x/
- * Q_PushHead(&q, &mydata2);
- * .....
- * if (!Q_Sort(&q, MyFunction))
- * .. error ..
- *
- * /x fill in key field of mydata1.
- * * NB: Q_Find does linear search
- * x/
- *
- * if (Q_Find(&q, &mydata1, MyFunction))
- * {
- * /x found it, queue cursor now at correct record x/
- * /x can retrieve with x/
- * data_ptr = Q_Get(&q);
- *
- * /x alter data , write back with x/
- * Q_Put(&q, data_ptr);
- * }
- *
- * /x Search with binary search x/
- * if (Q_Seek(&q, &mydata, MyFunction))
- * /x etc x/
- *
- *
- ****************************************************************/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdlib.h>
-#include "queue.h"
-
-
-static void QuickSort(void *list[], int low, int high,
- int (*Comp)(const void *, const void *));
-static int Q_BSearch(queue *q, void *key,
- int (*Comp)(const void *, const void *));
-
-/* The index: a pointer to pointers */
-
-static void **index;
-static datanode **posn_index;
-
-
-/***
- *
- ** function : Q_Init
- *
- ** purpose : Initialise queue object and pointers.
- *
- ** parameters : 'queue' pointer.
- *
- ** returns : True_ if init successful else False_
- *
- ** comments :
- ***/
-
-int Q_Init(queue *q)
-{
- if(q) {
- q->head = q->tail = NULL;
- q->cursor = q->head;
- q->size = 0;
- q->sorted = False_;
- }
-
- return True_;
-}
-
-/***
- *
- ** function : Q_AtHead
- *
- ** purpose : tests if cursor is at head of queue
- *
- ** parameters : 'queue' pointer.
- *
- ** returns : boolean - True_ is at head else False_
- *
- ** comments :
- *
- ***/
-
-int Q_AtHead(queue *q)
-{
- return(q && q->cursor == q->head);
-}
-
-
-/***
- *
- ** function : Q_AtTail
- *
- ** purpose : boolean test if cursor at tail of queue
- *
- ** parameters : 'queue' pointer to test.
- *
- ** returns : True_ or False_
- *
- ** comments :
- *
- ***/
-
-int Q_AtTail(queue *q)
-{
- return(q && q->cursor == q->tail);
-}
-
-
-/***
- *
- ** function : Q_IsEmpty
- *
- ** purpose : test if queue has nothing in it.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : True_ if IsEmpty queue, else False_
- *
- ** comments :
- *
- ***/
-
-inline int Q_IsEmpty(queue *q)
-{
- return(!q || q->size == 0);
-}
-
-/***
- *
- ** function : Q_Size
- *
- ** purpose : return the number of elements in the queue
- *
- ** parameters : queue pointer
- *
- ** returns : number of elements
- *
- ** comments :
- *
- ***/
-
-int Q_Size(queue *q)
-{
- return q ? q->size : 0;
-}
-
-
-/***
- *
- ** function : Q_Head
- *
- ** purpose : position queue cursor to first element (head) of queue.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : pointer to data at head. If queue is IsEmpty returns NULL
- *
- ** comments :
- *
- ***/
-
-void *Q_Head(queue *q)
-{
- if(Q_IsEmpty(q))
- return NULL;
-
- q->cursor = q->head;
-
- return q->cursor->data;
-}
-
-
-/***
- *
- ** function : Q_Tail
- *
- ** purpose : locate cursor at tail of queue.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : pointer to data at tail , if queue IsEmpty returns NULL
- *
- ** comments :
- *
- ***/
-
-void *Q_Tail(queue *q)
-{
- if(Q_IsEmpty(q))
- return NULL;
-
- q->cursor = q->tail;
-
- return q->cursor->data;
-}
-
-
-/***
- *
- ** function : Q_PushHead
- *
- ** purpose : put a data pointer at the head of the queue
- *
- ** parameters : 'queue' pointer, void pointer to the data.
- *
- ** returns : True_ if success else False_ if unable to push data.
- *
- ** comments :
- *
- ***/
-
-int Q_PushHead(queue *q, void *d)
-{
- if(q && d) {
- node *n;
- datanode *p;
-
- p = malloc(sizeof(datanode));
- if(p == NULL)
- return False_;
-
- n = q->head;
-
- q->head = (node*)p;
- q->head->prev = NULL;
-
- if(q->size == 0) {
- q->head->next = NULL;
- q->tail = q->head;
- }
- else {
- q->head->next = (datanode*)n;
- n->prev = q->head;
- }
-
- q->head->data = d;
- q->size++;
-
- q->cursor = q->head;
-
- q->sorted = False_;
-
- return True_;
- }
- return False_;
-}
-
-
-
-/***
- *
- ** function : Q_PushTail
- *
- ** purpose : put a data element pointer at the tail of the queue
- *
- ** parameters : queue pointer, pointer to the data
- *
- ** returns : True_ if data pushed, False_ if data not inserted.
- *
- ** comments :
- *
- ***/
-
-int Q_PushTail(queue *q, void *d)
-{
- if(q && d) {
- node *p;
- datanode *n;
-
- n = malloc(sizeof(datanode));
- if(n == NULL)
- return False_;
-
- p = q->tail;
- q->tail = (node *)n;
-
- if(q->size == 0) {
- q->tail->prev = NULL;
- q->head = q->tail;
- }
- else {
- q->tail->prev = (datanode *)p;
- p->next = q->tail;
- }
-
- q->tail->next = NULL;
-
- q->tail->data = d;
- q->cursor = q->tail;
- q->size++;
-
- q->sorted = False_;
-
- return True_;
- }
-}
-
-
-
-/***
- *
- ** function : Q_PopHead
- *
- ** purpose : remove and return the top element at the head of the
- * queue.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element or NULL if queue is IsEmpty.
- *
- ** comments :
- *
- ***/
-
-void *Q_PopHead(queue *q)
-{
- datanode *n;
- void *d;
-
- if(Q_IsEmpty(q))
- return NULL;
-
- d = q->head->data;
- n = q->head->next;
- free(q->head);
-
- q->size--;
-
- if(q->size == 0)
- q->head = q->tail = q->cursor = NULL;
- else {
- q->head = (node *)n;
- q->head->prev = NULL;
- q->cursor = q->head;
- }
-
- q->sorted = False_;
-
- return d;
-}
-
-
-/***
- *
- ** function : Q_PopTail
- *
- ** purpose : remove element from tail of queue and return data.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element that was at tail. NULL if queue
- * IsEmpty.
- *
- ** comments :
- *
- ***/
-
-void *Q_PopTail(queue *q)
-{
- datanode *p;
- void *d;
-
- if(Q_IsEmpty(q))
- return NULL;
-
- d = q->tail->data;
- p = q->tail->prev;
- free(q->tail);
- q->size--;
-
- if(q->size == 0)
- q->head = q->tail = q->cursor = NULL;
- else {
- q->tail = (node *)p;
- q->tail->next = NULL;
- q->cursor = q->tail;
- }
-
- q->sorted = False_;
-
- return d;
-}
-
-
-
-/***
- *
- ** function : Q_Next
- *
- ** purpose : Move to the next element in the queue without popping
- *
- ** parameters : queue pointer.
- *
- ** returns : pointer to data element of new element or NULL if end
- * of the queue.
- *
- ** comments : This uses the cursor for the current position. Q_Next
- * only moves in the direction from the head of the queue
- * to the tail.
- ***/
-
-void *Q_Next(queue *q)
-{
- if(!q)
- return NULL;
-
- if(!q->cursor || q->cursor->next == NULL)
- return NULL;
-
- q->cursor = (node *)q->cursor->next;
-
- return q->cursor->data ;
-}
-
-
-
-/***
- *
- ** function : Q_Previous
- *
- ** purpose : Opposite of Q_Next. Move to next element closer to the
- * head of the queue.
- *
- ** parameters : pointer to queue
- *
- ** returns : pointer to data of new element else NULL if queue IsEmpty
- *
- ** comments : Makes cursor move towards the head of the queue.
- *
- ***/
-
-void *Q_Previous(queue *q)
-{
- if(!q)
- return NULL;
-
- if(q->cursor->prev == NULL)
- return NULL;
-
- q->cursor = (node *)q->cursor->prev;
-
- return q->cursor->data;
-}
-
-
-void *Q_Iter_Del(queue *q, q_iter iter)
-{
- void *d;
- datanode *n, *p;
-
- if(!q)
- return NULL;
-
- if(iter == NULL)
- return NULL;
-
- if(iter == (q_iter)q->head)
- return Q_PopHead(q);
-
- if(iter == (q_iter)q->tail)
- return Q_PopTail(q);
-
- n = ((node*)iter)->next;
- p = ((node*)iter)->prev;
- d = ((node*)iter)->data;
-
- free(iter);
-
- if(p) {
- p->next = n;
- }
- if (q->cursor == (node*)iter) {
- if (p) {
- q->cursor = p;
- } else {
- q->cursor = n;
- }
- }
-
-
- if (n != NULL) {
- n->prev = p;
- }
-
- q->size--;
-
- q->sorted = False_;
-
- return d;
-}
-
-
-
-/***
- *
- ** function : Q_DelCur
- *
- ** purpose : Delete the current queue element as pointed to by
- * the cursor.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element.
- *
- ** comments : WARNING! It is the responsibility of the caller to
- * free any memory. Queue cannot distinguish between
- * pointers to literals and malloced memory.
- *
- ***/
-
-void *Q_DelCur(queue* q) {
- if(q) {
- return Q_Iter_Del(q, (q_iter)q->cursor);
- }
- return 0;
-}
-
-
-/***
- *
- ** function : Q_Destroy
- *
- ** purpose : Free all queue resources
- *
- ** parameters : queue pointer
- *
- ** returns : null.
- *
- ** comments : WARNING! It is the responsibility of the caller to
- * free any memory. Queue cannot distinguish between
- * pointers to literals and malloced memory.
- *
- ***/
-
-void Q_Destroy(queue *q)
-{
- while(!Q_IsEmpty(q)) {
- Q_PopHead(q);
- }
-}
-
-
-/***
- *
- ** function : Q_Get
- *
- ** purpose : get the pointer to the data at the cursor location
- *
- ** parameters : queue pointer
- *
- ** returns : data element pointer
- *
- ** comments :
- *
- ***/
-
-void *Q_Get(queue *q)
-{
- if(!q)
- return NULL;
-
- if(q->cursor == NULL)
- return NULL;
- return q->cursor->data;
-}
-
-
-
-/***
- *
- ** function : Q_Put
- *
- ** purpose : replace pointer to data with new pointer to data.
- *
- ** parameters : queue pointer, data pointer
- *
- ** returns : boolean- True_ if successful, False_ if cursor at NULL
- *
- ** comments :
- *
- ***/
-
-int Q_Put(queue *q, void *data)
-{
- if(q && data) {
- if(q->cursor == NULL)
- return False_;
-
- q->cursor->data = data;
- return True_;
- }
- return False_;
-}
-
-
-/***
- *
- ** function : Q_Find
- *
- ** purpose : Linear search of queue for match with key in *data
- *
- ** parameters : queue pointer q, data pointer with data containing key
- * comparison function here called Comp.
- *
- ** returns : True_ if found , False_ if not in queue.
- *
- ** comments : Useful for small queues that are constantly changing
- * and would otherwise need constant sorting with the
- * Q_Seek function.
- * For description of Comp see Q_Sort.
- * Queue cursor left on position found item else at end.
- *
- ***/
-
-int Q_Find(queue *q, void *data,
- int (*Comp)(const void *, const void *))
-{
- void *d;
-
- if (q == NULL) {
- return False_;
- }
-
- d = Q_Head(q);
- do {
- if(Comp(d, data) == 0)
- return True_;
- d = Q_Next(q);
- } while(!Q_AtTail(q));
-
- if(Comp(d, data) == 0)
- return True_;
-
- return False_;
-}
-
-/*======== Sorted Queue and Index functions ========= */
-
-
-static void QuickSort(void *list[], int low, int high,
- int (*Comp)(const void *, const void *))
-{
- int flag = 1, i, j;
- void *key, *temp;
-
- if(low < high) {
- i = low;
- j = high + 1;
-
- key = list[ low ];
-
- while(flag) {
- i++;
- while(Comp(list[i], key) < 0)
- i++;
-
- j--;
- while(Comp(list[j], key) > 0)
- j--;
-
- if(i < j) {
- temp = list[i];
- list[i] = list[j];
- list[j] = temp;
- }
- else flag = 0;
- }
-
- temp = list[low];
- list[low] = list[j];
- list[j] = temp;
-
- QuickSort(list, low, j-1, Comp);
- QuickSort(list, j+1, high, Comp);
- }
-}
-
-
-/***
- *
- ** function : Q_Sort
- *
- ** purpose : sort the queue and allow index style access.
- *
- ** parameters : queue pointer, comparison function compatible with
- * with 'qsort'.
- *
- ** returns : True_ if sort succeeded. False_ if error occurred.
- *
- ** comments : Comp function supplied by caller must return
- * -1 if data1 < data2
- * 0 if data1 == data2
- * +1 if data1 > data2
- *
- * for Comp(data1, data2)
- *
- * If queue is already sorted it frees the memory of the
- * old index and starts again.
- *
- ***/
-
-int Q_Sort(queue *q, int (*Comp)(const void *, const void *))
-{
- int i;
- void *d;
- datanode *dn;
-
- /* if already sorted free memory for tag array */
-
- if(q->sorted) {
- free(index);
- free(posn_index);
- q->sorted = False_;
- }
-
- /* Now allocate memory of array, array of pointers */
-
- index = malloc(q->size * sizeof(q->cursor->data));
- if(index == NULL)
- return False_;
-
- posn_index = malloc(q->size * sizeof(q->cursor));
- if(posn_index == NULL) {
- free(index);
- return False_;
- }
-
- /* Walk queue putting pointers into array */
-
- d = Q_Head(q);
- for(i=0; i < q->size; i++) {
- index[i] = d;
- posn_index[i] = q->cursor;
- d = Q_Next(q);
- }
-
- /* Now sort the index */
-
- QuickSort(index, 0, q->size - 1, Comp);
-
- /* Rearrange the actual queue into correct order */
-
- dn = q->head;
- i = 0;
- while(dn != NULL) {
- dn->data = index[i++];
- dn = dn->next;
- }
-
- /* Re-position to original element */
-
- if(d != NULL)
- Q_Find(q, d, Comp);
- else Q_Head(q);
-
- q->sorted = True_;
-
- return True_;
-}
-
-
-/***
- *
- ** function : Q_BSearch
- *
- ** purpose : binary search of queue index for node containing key
- *
- ** parameters : queue pointer 'q', data pointer of key 'key',
- * Comp comparison function.
- *
- ** returns : integer index into array of node pointers,
- * or -1 if not found.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- *
- ***/
-
-static int Q_BSearch( queue *q, void *key,
- int (*Comp)(const void *, const void*))
-{
- int low, mid, hi, val;
-
- low = 0;
- hi = q->size - 1;
-
- while(low <= hi) {
- mid = (low + hi) / 2;
- val = Comp(key, index[ mid ]);
-
- if(val < 0)
- hi = mid - 1;
-
- else if(val > 0)
- low = mid + 1;
-
- else /* Success */
- return mid;
- }
-
- /* Not Found */
-
- return -1;
-}
-
-
-/***
- *
- ** function : Q_Seek
- *
- ** purpose : use index to locate data according to key in 'data'
- *
- ** parameters : queue pointer 'q', data pointer 'data', Comp comparison
- * function.
- *
- ** returns : pointer to data or NULL if could not find it or could
- * not sort queue.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- *
- ***/
-
-void *Q_Seek(queue *q, void *data, int (*Comp)(const void *, const void *))
-{
- int idx;
-
- if (q == NULL) {
- return NULL;
- }
-
- if(!q->sorted) {
- if(!Q_Sort(q, Comp))
- return NULL;
- }
-
- idx = Q_BSearch(q, data, Comp);
-
- if(idx < 0)
- return NULL;
-
- q->cursor = posn_index[idx];
-
- return index[idx];
-}
-
-
-
-/***
- *
- ** function : Q_Insert
- *
- ** purpose : Insert an element into an indexed queue
- *
- ** parameters : queue pointer 'q', data pointer 'data', Comp comparison
- * function.
- *
- ** returns : pointer to data or NULL if could not find it or could
- * not sort queue.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- * WARNING! This code can be very slow since each new
- * element means a new Q_Sort. Should only be used for
- * the insertion of the odd element ,not the piecemeal
- * building of an entire queue.
- ***/
-
-int Q_Insert(queue *q, void *data, int (*Comp)(const void *, const void *))
-{
- if (q == NULL) {
- return False_;
- }
-
- Q_PushHead(q, data);
-
- if(!Q_Sort(q, Comp))
- return False_;
-
- return True_;
-}
-
-/* read only funcs for iterating through queue. above funcs modify queue */
-q_iter Q_Iter_Head(queue *q) {
- return q ? (q_iter)q->head : NULL;
-}
-
-q_iter Q_Iter_Tail(queue *q) {
- return q ? (q_iter)q->tail : NULL;
-}
-
-q_iter Q_Iter_Next(q_iter qi) {
- return qi ? (q_iter)((node*)qi)->next : NULL;
-}
-
-q_iter Q_Iter_Prev(q_iter qi) {
- return qi ? (q_iter)((node*)qi)->prev : NULL;
-}
-
-void * Q_Iter_Get(q_iter qi) {
- return qi ? ((node*)qi)->data : NULL;
-}
-
-int Q_Iter_Put(q_iter qi, void* data) {
- if(qi) {
- ((node*)qi)->data = data;
- return True_;
- }
- return False_;
-}
diff --git a/ext/xmlrpc/libxmlrpc/queue.h b/ext/xmlrpc/libxmlrpc/queue.h
deleted file mode 100644
index e850b57e6c..0000000000
--- a/ext/xmlrpc/libxmlrpc/queue.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Date last modified: Jan 2001
- * Modifications by Dan Libby (dan@libby.com), including:
- * - various fixes, null checks, etc
- * - addition of Q_Iter funcs, macros
- */
-
-/*
- * File : q.h
- *
- * Peter Yard 02 Jan 1993.
- *
- * Disclaimer: This code is released to the public domain.
- */
-
-#ifndef Q__H
-#define Q__H
-
-#ifndef False_
- #define False_ 0
-#endif
-
-#ifndef True_
- #define True_ 1
-#endif
-
-typedef struct nodeptr datanode;
-
-typedef struct nodeptr {
- void *data ;
- datanode *prev, *next ;
-} node ;
-
-/* For external use with Q_Iter* funcs */
-typedef struct nodeptr* q_iter;
-
-typedef struct {
- node *head, *tail, *cursor;
- int size, sorted, item_deleted;
-} queue;
-
-typedef struct {
- void *dataptr;
- node *loc ;
-} index_elt ;
-
-
-int Q_Init(queue *q);
-void Q_Destroy(queue *q);
-int Q_IsEmpty(queue *q);
-int Q_Size(queue *q);
-int Q_AtHead(queue *q);
-int Q_AtTail(queue *q);
-int Q_PushHead(queue *q, void *d);
-int Q_PushTail(queue *q, void *d);
-void *Q_Head(queue *q);
-void *Q_Tail(queue *q);
-void *Q_PopHead(queue *q);
-void *Q_PopTail(queue *q);
-void *Q_Next(queue *q);
-void *Q_Previous(queue *q);
-void *Q_DelCur(queue *q);
-void *Q_Get(queue *q);
-int Q_Put(queue *q, void *data);
-int Q_Sort(queue *q, int (*Comp)(const void *, const void *));
-int Q_Find(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-void *Q_Seek(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-int Q_Insert(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-
-/* read only funcs for iterating through queue. above funcs modify queue */
-q_iter Q_Iter_Head(queue *q);
-q_iter Q_Iter_Tail(queue *q);
-q_iter Q_Iter_Next(q_iter qi);
-q_iter Q_Iter_Prev(q_iter qi);
-void* Q_Iter_Get(q_iter qi);
-int Q_Iter_Put(q_iter qi, void* data); // not read only! here for completeness.
-void* Q_Iter_Del(queue *q, q_iter iter); // not read only! here for completeness.
-
-/* Fast (macro'd) versions of above */
-#define Q_Iter_Head_F(q) (q ? (q_iter)((queue*)q)->head : NULL)
-#define Q_Iter_Tail_F(q) (q ? (q_iter)((queue*)q)->tail : NULL)
-#define Q_Iter_Next_F(qi) (qi ? (q_iter)((node*)qi)->next : NULL)
-#define Q_Iter_Prev_F(qi) (qi ? (q_iter)((node*)qi)->prev : NULL)
-#define Q_Iter_Get_F(qi) (qi ? ((node*)qi)->data : NULL)
-
-#endif /* Q__H */
diff --git a/ext/xmlrpc/libxmlrpc/simplestring.c b/ext/xmlrpc/libxmlrpc/simplestring.c
deleted file mode 100644
index 7ce68d3410..0000000000
--- a/ext/xmlrpc/libxmlrpc/simplestring.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-#define SIMPLESTRING_INCR 32
-
-/****h* ABOUT/simplestring
- * NAME
- * simplestring
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 06/2000
- * HISTORY
- * 10/15/2000 -- danda -- adding robodoc documentation
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * This code was written primarily for xmlrpc, but has found some other uses.
- *
- * simplestring is, as the name implies, a simple API for dealing with C strings.
- * Why would I write yet another string API? Because I couldn't find any that were
- * a) free / GPL, b) simple/lightweight, c) fast, not doing unneccesary strlens all
- * over the place. So. It is simple, and it seems to work, and it is pretty fast.
- *
- * Oh, and it is also binary safe, ie it can handle strings with embedded NULLs,
- * so long as the real length is passed in.
- *
- * And the masses rejoiced.
- *
- * BUGS
- * there must be some.
- ******/
-
-
-#include "simplestring.h"
-
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-/*----------------------**
-* Begin String Functions *
-*-----------------------*/
-
-/****f* FUNC/simplestring_init
- * NAME
- * simplestring_init
- * SYNOPSIS
- * void simplestring_init(simplestring* string)
- * FUNCTION
- * initialize string
- * INPUTS
- * string - pointer to a simplestring struct that will be initialized
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_free ()
- * simplestring_clear ()
- * SOURCE
- */
-void simplestring_init(simplestring* string) {
- memset(string, 0, sizeof(simplestring));
-}
-/******/
-
-static void simplestring_init_str(simplestring* string) {
- string->str = (char*)malloc(SIMPLESTRING_INCR);
- if(string->str) {
- string->str[0] = 0;
- string->len = 0;
- string->size = SIMPLESTRING_INCR;
- }
- else {
- string->size = 0;
- }
-}
-
-/****f* FUNC/simplestring_clear
- * NAME
- * simplestring_clear
- * SYNOPSIS
- * void simplestring_clear(simplestring* string)
- * FUNCTION
- * clears contents of a string
- * INPUTS
- * string - the string value to clear
- * RESULT
- * void
- * NOTES
- * This function is very fast as it does not de-allocate any memory.
- * SEE ALSO
- *
- * SOURCE
- */
-void simplestring_clear(simplestring* string) {
- if(string->str) {
- string->str[0] = 0;
- }
- string->len = 0;
-}
-/******/
-
-/****f* FUNC/simplestring_free
- * NAME
- * simplestring_free
- * SYNOPSIS
- * void simplestring_free(simplestring* string)
- * FUNCTION
- * frees contents of a string, if any. Does *not* free the simplestring struct itself.
- * INPUTS
- * string - value containing string to be free'd
- * RESULT
- * void
- * NOTES
- * caller is responsible for allocating and freeing simplestring* struct itself.
- * SEE ALSO
- * simplestring_init ()
- * SOURCE
- */
-void simplestring_free(simplestring* string) {
- if(string && string->str) {
- my_free(string->str);
- string->len = 0;
- }
-}
-/******/
-
-/****f* FUNC/simplestring_addn
- * NAME
- * simplestring_addn
- * SYNOPSIS
- * void simplestring_addn(simplestring* string, const char* add, int add_len)
- * FUNCTION
- * copies n characters from source to target string
- * INPUTS
- * target - target string
- * source - source string
- * add_len - number of characters to copy
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_add ()
- * SOURCE
- */
-void simplestring_addn(simplestring* target, const char* source, int add_len) {
- if(target && source) {
- if(!target->str) {
- simplestring_init_str(target);
- }
- if(target->len + add_len + 1 > target->size) {
- /* newsize is current length + new length */
- int newsize = target->len + add_len + 1;
- int incr = target->size * 2;
-
- /* align to SIMPLESTRING_INCR increments */
- newsize = newsize - (newsize % incr) + incr;
- target->str = (char*)realloc(target->str, newsize);
-
- target->size = target->str ? newsize : 0;
- }
-
- if(target->str) {
- if(add_len) {
- memcpy(target->str + target->len, source, add_len);
- }
- target->len += add_len;
- target->str[target->len] = 0; /* null terminate */
- }
- }
-}
-/******/
-
-/****f* FUNC/simplestring_add
- * NAME
- * simplestring_add
- * SYNOPSIS
- * void simplestring_add(simplestring* string, const char* add)
- * FUNCTION
- * appends a string of unknown length from source to target
- * INPUTS
- * target - the target string to append to
- * source - the source string of unknown length
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_addn ()
- * SOURCE
- */
-void simplestring_add(simplestring* target, const char* source) {
- if(target && source) {
- simplestring_addn(target, source, strlen(source));
- }
-}
-/******/
-
-
-/*----------------------
-* End String Functions *
-*--------------------**/
diff --git a/ext/xmlrpc/libxmlrpc/simplestring.h b/ext/xmlrpc/libxmlrpc/simplestring.h
deleted file mode 100644
index a891ba6d78..0000000000
--- a/ext/xmlrpc/libxmlrpc/simplestring.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef __SIMPLESTRING_H__
- #define __SIMPLESTRING_H__
-
-/*-********************************
-* begin simplestring header stuff *
-**********************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /****s* struct/simplestring
- * NAME
- * simplestring
- * NOTES
- * represents a string efficiently for fast appending, etc.
- * SOURCE
- */
-typedef struct _simplestring {
- char* str; /* string buf */
- int len; /* length of string/buf */
- int size; /* size of allocated buffer */
-} simplestring;
-/******/
-
-#ifndef NULL
- #define NULL 0
-#endif
-
-void simplestring_init(simplestring* string);
-void simplestring_clear(simplestring* string);
-void simplestring_free(simplestring* string);
-void simplestring_addn(simplestring* string, const char* add, int add_len);
-
-#ifdef __cplusplus
-}
-#endif
-
-/*-******************************
-* end simplestring header stuff *
-********************************/
-
-#endif /* __SIMPLESTRING_H__ */
diff --git a/ext/xmlrpc/libxmlrpc/system_methods.c b/ext/xmlrpc/libxmlrpc/system_methods.c
deleted file mode 100644
index 742b837143..0000000000
--- a/ext/xmlrpc/libxmlrpc/system_methods.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-/****h* ABOUT/system_methods
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * HISTORY
- * 4/28/2001 -- danda -- adding system.multicall and separating out system methods.
- * TODO
- * NOTES
- *******/
-
-
-#include "queue.h"
-#include "xmlrpc.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include "system_methods_private.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-static const char* xsm_introspection_xml =
-"<?xml version='1.0' ?>"
-
-"<introspection version='1.0'>"
- "<typeList>"
-
- "<typeDescription name='system.value' basetype='struct' desc='description of a value'>"
- "<value type='string' name='name' optional='yes'>value identifier</value>"
- "<value type='string' name='type'>value&apos;s xmlrpc or user-defined type</value>"
- "<value type='string' name='description'>value&apos;s textual description</value> "
- "<value type='boolean' name='optional'>true if value is optional, else it is required</value> "
- "<value type='any' name='member' optional='yes'>a child of this element. n/a for scalar types</value> "
- "</typeDescription>"
-
- "<typeDescription name='system.valueList' basetype='array' desc='list of value descriptions'>"
- "<value type='system.value'/>"
- "</typeDescription>"
-
- "<typeDescription name='system.stringList' basetype='array' desc='list of strings'>"
- "<value type='string'/>"
- "</typeDescription>"
-
-
- "</typeList>"
-
- "<methodList>"
-
- "<!-- system.describeMethods -->"
- "<methodDescription name='system.describeMethods'>"
- "<author>Dan Libby</author>"
- "<purpose>fully describes the methods and types implemented by this XML-RPC server.</purpose>"
- "<version>1.1</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='array' name='methodList' optional='yes' desc='a list of methods to be described. if omitted, all are described.'>"
- "<value type='string'>a valid method name</value>"
- "</value>"
- "</params>"
- "<returns>"
- "<value type='struct' desc='contains methods list and types list'>"
- "<value type='array' name='methodList' desc='a list of methods'>"
- "<value type='struct' desc='representation of a single method'>"
- "<value type='string' name='name'>method name</value>"
- "<value type='string' name='version' optional='yes'>method version</value>"
- "<value type='string' name='author' optional='yes'>method author</value>"
- "<value type='string' name='purpose' optional='yes'>method purpose</value>"
- "<value type='array' name='signatures' desc='list of method signatures'>"
- "<value type='struct' desc='representation of a single signature'>"
- "<value type='system.valueList' name='params' optional='yes'>parameter list</value>"
- "<value type='system.valueList' name='returns' optional='yes'>return value list</value>"
- "</value>"
- "</value>"
- "<value type='system.stringList' name='bugs' optional='yes'>list of known bugs</value>"
- "<value type='system.stringList' name='errors' optional='yes'>list of possible errors and error codes</value>"
- "<value type='system.stringList' name='examples' optional='yes'>list of examples</value>"
- "<value type='system.stringList' name='history' optional='yes'>list of modifications</value>"
- "<value type='system.stringList' name='notes' optional='yes'>list of notes</value>"
- "<value type='system.stringList' name='see' optional='yes'>see also. list of related methods</value>"
- "<value type='system.stringList' name='todo' optional='yes'>list of unimplemented features</value>"
- "</value>"
- "</value>"
- "<value type='array' name='typeList' desc='a list of type descriptions. Typically used for referencing complex types'>"
- "<value type='system.value'>a type description</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.listMethods -->"
- "<methodDescription name='system.listMethods'>"
- "<author>Dan Libby</author>"
- "<purpose>enumerates the methods implemented by this XML-RPC server.</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<returns>"
- "<value type='array' desc='an array of strings'>"
- "<value type='string'>name of a method implemented by the server.</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.describeMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.methodHelp -->"
- "<methodDescription name='system.methodHelp'>"
- "<author>Dan Libby</author>"
- "<purpose>provides documentation string for a single method</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='string' name='methodName'>name of the method for which documentation is desired</value>"
- "</params>"
- "<returns>"
- "<value type='string'>help text if defined for the method passed, otherwise an empty string</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.methodSignature -->"
- "<methodDescription name='system.methodSignature'>"
- "<author>Dan Libby</author>"
- "<purpose>provides 1 or more signatures for a single method</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='string' name='methodName'>name of the method for which documentation is desired</value>"
- "</params>"
- "<returns>"
- "<value type='array' desc='a list of arrays, each representing a signature'>"
- "<value type='array' desc='a list of strings. the first element represents the method return value. subsequent elements represent parameters.'>"
- "<value type='string'>a string indicating the xmlrpc type of a value. one of: string, int, double, base64, datetime, array, struct</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.multiCall -->"
- "<methodDescription name='system.multiCall'>"
- "<author>Dan Libby</author>"
- "<purpose>executes multiple methods in sequence and returns the results</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='array' name='methodList' desc='an array of method call structs'>"
- "<value type='struct' desc='a struct representing a single method call'>"
- "<value type='string' name='methodName' desc='name of the method to be executed'/>"
- "<value type='array' name='params' desc='an array representing the params to a method. sub-elements should match method signature'/>"
- "</value>"
- "</value>"
- "</params>"
- "<returns>"
- "<value type='array' desc='an array of method responses'>"
- "<value type='array' desc='an array containing a single value, which is the method&apos;s response'/>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.getCapabilities -->"
- "<methodDescription name='system.getCapabilities'>"
- "<author>Dan Libby</author>"
- "<purpose>returns a list of capabilities supported by this server</purpose>"
- "<version>1.0</version>"
- "<notes><item>spec url: http://groups.yahoo.com/group/xml-rpc/message/2897</item></notes>"
- "<signatures>"
- "<signature>"
- "<returns>"
- "<value type='struct' desc='list of capabilities, each with a unique key defined by the capability&apos;s spec'>"
- "<value type='struct' desc='definition of a single capability'>"
- "<value type='string' name='specURL'>www address of the specification defining this capability</value>"
- "<value type='int' name='specVersion'>version of the spec that this server's implementation conforms to</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "</methodList>"
-"</introspection>";
-
-
-/* forward declarations for static (non public, non api) funcs */
-static XMLRPC_VALUE xsm_system_multicall_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xsm_system_get_capabilities_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-
-/*-*******************
-* System Methods API *
-*********************/
-
-static void xsm_lazy_doc_methods_cb(XMLRPC_SERVER server, void* userData) {
- XMLRPC_VALUE xDesc = XMLRPC_IntrospectionCreateDescription(xsm_introspection_xml, NULL);
- XMLRPC_ServerAddIntrospectionData(server, xDesc);
- XMLRPC_CleanupValue(xDesc);
-}
-
-void xsm_register(XMLRPC_SERVER server) {
- xi_register_system_methods(server);
-
- XMLRPC_ServerRegisterMethod(server, xsm_token_system_multicall, xsm_system_multicall_cb);
- XMLRPC_ServerRegisterMethod(server, xsm_token_system_get_capabilities, xsm_system_get_capabilities_cb);
-
- /* callback for documentation generation should it be requested */
- XMLRPC_ServerRegisterIntrospectionCallback(server, xsm_lazy_doc_methods_cb);
-}
-
-XMLRPC_VALUE xsm_system_multicall_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xArray = XMLRPC_VectorRewind(XMLRPC_RequestGetData(input));
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(0, xmlrpc_vector_array);
-
- if (xArray) {
- XMLRPC_VALUE xMethodIter = XMLRPC_VectorRewind(xArray);
-
- while (xMethodIter) {
- XMLRPC_REQUEST request = XMLRPC_RequestNew();
- if(request) {
- const char* methodName = XMLRPC_VectorGetStringWithID(xMethodIter, "methodName");
- XMLRPC_VALUE params = XMLRPC_VectorGetValueWithID(xMethodIter, "params");
-
- if(methodName && params) {
- XMLRPC_VALUE xRandomArray = XMLRPC_CreateVector(0, xmlrpc_vector_array);
- XMLRPC_RequestSetMethodName(request, methodName);
- XMLRPC_RequestSetData(request, params);
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
-
- XMLRPC_AddValueToVector(xRandomArray,
- XMLRPC_ServerCallMethod(server, request, userData));
-
- XMLRPC_AddValueToVector(xReturn, xRandomArray);
- }
- XMLRPC_RequestFree(request, 1);
- }
- xMethodIter = XMLRPC_VectorNext(xArray);
- }
- }
- return xReturn;
-}
-
-
-XMLRPC_VALUE xsm_system_get_capabilities_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(0, xmlrpc_vector_struct);
- XMLRPC_VALUE xFaults = XMLRPC_CreateVector("faults_interop", xmlrpc_vector_struct);
- XMLRPC_VALUE xIntro = XMLRPC_CreateVector("introspection", xmlrpc_vector_struct);
-
- /* support for fault spec */
- XMLRPC_VectorAppendString(xFaults, "specURL", "http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php", 0);
- XMLRPC_VectorAppendInt(xFaults, "specVersion", 20010516);
-
- /* support for introspection spec */
- XMLRPC_VectorAppendString(xIntro, "specURL", "http://xmlrpc-epi.sourceforge.net/specs/rfc.introspection.php", 0);
- XMLRPC_VectorAppendInt(xIntro, "specVersion", 20010516);
-
- XMLRPC_AddValuesToVector(xReturn,
- xFaults,
- xIntro,
- NULL);
-
- return xReturn;
-
-}
-
-/*-***********************
-* End System Methods API *
-*************************/
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/system_methods_private.h b/ext/xmlrpc/libxmlrpc/system_methods_private.h
deleted file mode 100644
index 72408fd3c4..0000000000
--- a/ext/xmlrpc/libxmlrpc/system_methods_private.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Dan Libby, Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-
-#ifndef __SYSTEM_METHODS_PRIVATE_H
-/*
- * Avoid include redundancy.
- */
-#define __SYSTEM_METHODS_PRIVATE_H
-
-/*----------------------------------------------------------------------------
- * system_methods_private.h
- *
- * Purpose:
- * define non-public system.* methods
- * Comments:
- * xsm = xmlrpc system methods
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-#define xsm_token_system_multicall "system.multiCall"
-#define xsm_token_system_get_capabilities "system.getCapabilities"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-void xsm_register(XMLRPC_SERVER server);
-int xsm_is_system_method(XMLRPC_Callback cb);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __SYSTEM_METHODS_PRIVATE_H */
-
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_element.c b/ext/xmlrpc/libxmlrpc/xml_element.c
deleted file mode 100644
index 2625e99913..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_element.c
+++ /dev/null
@@ -1,714 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-
-/****h* ABOUT/xml_element
- * NAME
- * xml_element
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 06/2000
- * HISTORY
- * 10/15/2000 -- danda -- adding robodoc documentation
- * TODO
- * Nicer external API. Get rid of macros. Make opaque types, etc.
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * This code incorporates ideas from expat-ensor from http://xml.ensor.org.
- *
- * It was coded primarily to act as a go-between for expat and xmlrpc. To this
- * end, it stores xml elements, their sub-elements, and their attributes in an
- * in-memory tree. When expat is done parsing, the tree can be walked, thus
- * retrieving the values. The code can also be used to build a tree via API then
- * write out the tree to a buffer, thus "serializing" the xml.
- *
- * It turns out this is useful for other purposes, such as parsing config files.
- * YMMV.
- *
- * Some Features:
- * - output option for xml escaping data. Choices include no escaping, entity escaping,
- * or CDATA sections.
- * - output option for character encoding. Defaults to (none) utf-8.
- * - output option for verbosity/readability. ultra-compact, newlines, pretty/level indented.
- *
- * BUGS
- * there must be some.
- ******/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#include "xml_element.h"
-#include "queue.h"
-#include "expat.h"
-#include "encodings.h"
-
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-#define XML_DECL_START "<?xml"
-#define XML_DECL_START_LEN sizeof(XML_DECL_START) - 1
-#define XML_DECL_VERSION "version='1.0'"
-#define XML_DECL_VERSION_LEN sizeof(XML_DECL_VERSION) - 1
-#define XML_DECL_ENCODING_ATTR "encoding"
-#define XML_DECL_ENCODING_ATTR_LEN sizeof(XML_DECL_ENCODING_ATTR) - 1
-#define XML_DECL_ENCODING_DEFAULT "utf-8"
-#define XML_DECL_ENCODING_DEFAULT_LEN sizeof(XML_DECL_ENCODING_DEFAULT) - 1
-#define XML_DECL_END "?>"
-#define XML_DECL_END_LEN sizeof(XML_DECL_END) - 1
-#define START_TOKEN_BEGIN "<"
-#define START_TOKEN_BEGIN_LEN sizeof(START_TOKEN_BEGIN) - 1
-#define START_TOKEN_END ">"
-#define START_TOKEN_END_LEN sizeof(START_TOKEN_END) - 1
-#define EMPTY_START_TOKEN_END "/>"
-#define EMPTY_START_TOKEN_END_LEN sizeof(EMPTY_START_TOKEN_END) - 1
-#define END_TOKEN_BEGIN "</"
-#define END_TOKEN_BEGIN_LEN sizeof(END_TOKEN_BEGIN) - 1
-#define END_TOKEN_END ">"
-#define END_TOKEN_END_LEN sizeof(END_TOKEN_END) - 1
-#define ATTR_DELIMITER "\""
-#define ATTR_DELIMITER_LEN sizeof(ATTR_DELIMITER) - 1
-#define CDATA_BEGIN "<![CDATA["
-#define CDATA_BEGIN_LEN sizeof(CDATA_BEGIN) - 1
-#define CDATA_END "]]>"
-#define CDATA_END_LEN sizeof(CDATA_END) - 1
-#define EQUALS "="
-#define EQUALS_LEN sizeof(EQUALS) - 1
-#define WHITESPACE " "
-#define WHITESPACE_LEN sizeof(WHITESPACE) - 1
-#define NEWLINE "\n"
-#define NEWLINE_LEN sizeof(NEWLINE) - 1
-#define MAX_VAL_BUF 144
-#define SCALAR_STR "SCALAR"
-#define SCALAR_STR_LEN sizeof(SCALAR_STR) - 1
-#define VECTOR_STR "VECTOR"
-#define VECTOR_STR_LEN sizeof(VECTOR_STR) - 1
-#define RESPONSE_STR "RESPONSE"
-#define RESPONSE_STR_LEN sizeof(RESPONSE_STR) - 1
-
-
-/*-----------------------------
-- Begin xml_element Functions -
------------------------------*/
-
-/****f* xml_element/xml_elem_free_non_recurse
- * NAME
- * xml_elem_free_non_recurse
- * SYNOPSIS
- * void xml_elem_free_non_recurse(xml_element* root)
- * FUNCTION
- * free a single xml element. child elements will not be freed.
- * INPUTS
- * root - the element to free
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_free ()
- * xml_elem_new ()
- * SOURCE
- */
-void xml_elem_free_non_recurse(xml_element* root) {
- if(root) {
- xml_element_attr* attrs = Q_Head(&root->attrs);
- while(attrs) {
- my_free(attrs->key);
- my_free(attrs->val);
- my_free(attrs);
- attrs = Q_Next(&root->attrs);
- }
-
- Q_Destroy(&root->children);
- Q_Destroy(&root->attrs);
- my_free((char*)root->name);
- simplestring_free(&root->text);
- my_free(root);
- }
-}
-/******/
-
-/****f* xml_element/xml_elem_free
- * NAME
- * xml_elem_free
- * SYNOPSIS
- * void xml_elem_free(xml_element* root)
- * FUNCTION
- * free an xml element and all of its child elements
- * INPUTS
- * root - the root of an xml tree you would like to free
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_free_non_recurse ()
- * xml_elem_new ()
- * SOURCE
- */
-void xml_elem_free(xml_element* root) {
- if(root) {
- xml_element* kids = Q_Head(&root->children);
- while(kids) {
- xml_elem_free(kids);
- kids = Q_Next(&root->children);
- }
- xml_elem_free_non_recurse(root);
- }
-}
-/******/
-
-/****f* xml_element/xml_elem_new
- * NAME
- * xml_elem_new
- * SYNOPSIS
- * xml_element* xml_elem_new()
- * FUNCTION
- * allocates and initializes a new xml_element
- * INPUTS
- * none
- * RESULT
- * xml_element* or NULL. NULL indicates an out-of-memory condition.
- * NOTES
- * SEE ALSO
- * xml_elem_free ()
- * xml_elem_free_non_recurse ()
- * SOURCE
- */
-xml_element* xml_elem_new() {
- xml_element* elem = calloc(1, sizeof(xml_element));
- if(elem) {
- Q_Init(&elem->children);
- Q_Init(&elem->attrs);
- simplestring_init(&elem->text);
-
- /* init empty string in case we don't find any char data */
- simplestring_addn(&elem->text, "", 0);
- }
- return elem;
-}
-/******/
-
-static int xml_elem_writefunc(int (*fptr)(void *data, const char *text, int size), const char *text, void *data, int len)
-{
- return fptr && text ? fptr(data, text, len ? len : strlen(text)) : 0;
-}
-
-
-
-static int create_xml_escape(char *pString, unsigned char c)
-{
- int counter = 0;
-
- pString[counter++] = '&';
- pString[counter++] = '#';
- if(c >= 100) {
- pString[counter++] = c / 100 + '0';
- c = c % 100;
- }
- if(c >= 10) {
- pString[counter++] = c / 10 + '0';
- c = c % 10;
- }
- pString[counter++] = c + '0';
- pString[counter++] = ';';
- return counter;
-}
-
-#define non_ascii(c) (c > 127)
-#define non_print(c) (!isprint(c))
-#define markup(c) (c == '&' || c == '\"' || c == '>' || c == '<')
-#define entity_length(c) ( (c >= 100) ? 3 : ((c >= 10) ? 2 : 1) ) + 3; /* "&#" + c + ";" */
-
-/*
- * xml_elem_entity_escape
- *
- * Purpose:
- * escape reserved xml chars and non utf-8 chars as xml entities
- * Comments:
- * The return value may be a new string, or null if no
- * conversion was performed. In the latter case, *newlen will
- * be 0.
- * Flags (to escape)
- * xml_elem_no_escaping = 0x000,
- * xml_elem_entity_escaping = 0x002, // escape xml special chars as entities
- * xml_elem_non_ascii_escaping = 0x008, // escape chars above 127
- * xml_elem_cdata_escaping = 0x010, // wrap in cdata
- */
-static char* xml_elem_entity_escape(const char* buf, int old_len, int *newlen, XML_ELEM_ESCAPING flags) {
- char *pRetval = 0;
- int iNewBufLen=0;
-
-#define should_escape(c, flag) ( ((flag & xml_elem_markup_escaping) && markup(c)) || \
- ((flag & xml_elem_non_ascii_escaping) && non_ascii(c)) || \
- ((flag & xml_elem_non_print_escaping) && non_print(c)) )
-
- if(buf && *buf) {
- const unsigned char *bufcopy;
- char *NewBuffer;
- int ToBeXmlEscaped=0;
- int iLength;
- bufcopy = buf;
- iLength= old_len ? old_len : strlen(buf);
- while(*bufcopy) {
- if( should_escape(*bufcopy, flags) ) {
- /* the length will increase by length of xml escape - the character length */
- iLength += entity_length(*bufcopy);
- ToBeXmlEscaped=1;
- }
- bufcopy++;
- }
-
- if(ToBeXmlEscaped) {
-
- NewBuffer= malloc(iLength+1);
- if(NewBuffer) {
- bufcopy=buf;
- while(*bufcopy) {
- if(should_escape(*bufcopy, flags)) {
- iNewBufLen += create_xml_escape(NewBuffer+iNewBufLen,*bufcopy);
- }
- else {
- NewBuffer[iNewBufLen++]=*bufcopy;
- }
- bufcopy++;
- }
- NewBuffer[iNewBufLen] = 0;
- pRetval = NewBuffer;
- }
- }
- }
-
- if(newlen) {
- *newlen = iNewBufLen;
- }
-
- return pRetval;
-}
-
-
-static void xml_element_serialize(xml_element *el, int (*fptr)(void *data, const char *text, int size), void *data, XML_ELEM_OUTPUT_OPTIONS options, int depth)
-{
- int i;
- static STRUCT_XML_ELEM_OUTPUT_OPTIONS default_opts = {xml_elem_pretty, xml_elem_markup_escaping | xml_elem_non_print_escaping, XML_DECL_ENCODING_DEFAULT};
- static char whitespace[] = " "
- " "
- " ";
- depth++;
-
- if(!el) {
- fprintf(stderr, "Nothing to write\n");
- return;
- }
- if(!options) {
- options = &default_opts;
- }
-
- /* print xml declaration if at root level */
- if(depth == 1) {
- xml_elem_writefunc(fptr, XML_DECL_START, data, XML_DECL_START_LEN);
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_VERSION, data, XML_DECL_VERSION_LEN);
- if(options->encoding && *options->encoding) {
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_ENCODING_ATTR, data, XML_DECL_ENCODING_ATTR_LEN);
- xml_elem_writefunc(fptr, EQUALS, data, EQUALS_LEN);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- xml_elem_writefunc(fptr, options->encoding, data, 0);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- }
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_END, data, XML_DECL_END_LEN);
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
- }
-
- if(options->verbosity == xml_elem_pretty && depth > 2) {
- xml_elem_writefunc(fptr, whitespace, data, depth - 2);
- }
- /* begin element */
- xml_elem_writefunc(fptr,START_TOKEN_BEGIN, data, START_TOKEN_BEGIN_LEN);
- if(el->name) {
- xml_elem_writefunc(fptr, el->name, data, 0);
-
- /* write attrs, if any */
- if(Q_Size(&el->attrs)) {
- xml_element_attr* iter = Q_Head(&el->attrs);
- while( iter ) {
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, iter->key, data, 0);
- xml_elem_writefunc(fptr, EQUALS, data, EQUALS_LEN);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- xml_elem_writefunc(fptr, iter->val, data, 0);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
-
- iter = Q_Next(&el->attrs);
- }
- }
- }
- else {
- xml_elem_writefunc(fptr, "None", data, 0);
- }
- /* if no text and no children, use abbreviated form, eg: <foo/> */
- if(!el->text.len && !Q_Size(&el->children)) {
- xml_elem_writefunc(fptr, EMPTY_START_TOKEN_END, data, EMPTY_START_TOKEN_END_LEN);
- }
- /* otherwise, print element contents */
- else {
- xml_elem_writefunc(fptr, START_TOKEN_END, data, START_TOKEN_END_LEN);
-
- /* print text, if any */
- if(el->text.len) {
- char* escaped_str = el->text.str;
- int buflen = el->text.len;
-
- if(options->escaping && options->escaping != xml_elem_cdata_escaping) {
- escaped_str = xml_elem_entity_escape(el->text.str, buflen, &buflen, options->escaping );
- if(!escaped_str) {
- escaped_str = el->text.str;
- }
- }
-
- if(options->escaping & xml_elem_cdata_escaping) {
- xml_elem_writefunc(fptr, CDATA_BEGIN, data, CDATA_BEGIN_LEN);
- }
-
- xml_elem_writefunc(fptr, escaped_str, data, buflen);
-
- if(escaped_str != el->text.str) {
- my_free(escaped_str);
- }
-
- if(options->escaping & xml_elem_cdata_escaping) {
- xml_elem_writefunc(fptr, CDATA_END, data, CDATA_END_LEN);
- }
- }
- /* no text, so print child elems */
- else {
- xml_element *kids = Q_Head(&el->children);
- i = 0;
- while( kids ) {
- if(i++ == 0) {
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
- }
- xml_element_serialize(kids, fptr, data, options, depth);
- kids = Q_Next(&el->children);
- }
- if(i) {
- if(options->verbosity == xml_elem_pretty && depth > 2) {
- xml_elem_writefunc(fptr, whitespace, data, depth - 2);
- }
- }
- }
-
- xml_elem_writefunc(fptr, END_TOKEN_BEGIN, data, END_TOKEN_BEGIN_LEN);
- xml_elem_writefunc(fptr,el->name ? el->name : "None", data, 0);
- xml_elem_writefunc(fptr, END_TOKEN_END, data, END_TOKEN_END_LEN);
- }
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
-}
-
-/* print buf to file */
-static file_out_fptr(void *f, const char *text, int size)
-{
- fputs(text, (FILE *)f);
-}
-
-/* print buf to simplestring */
-static simplestring_out_fptr(void *f, const char *text, int size)
-{
- simplestring* buf = (simplestring*)f;
- if(buf) {
- simplestring_addn(buf, text, size);
- }
-}
-
-/****f* xml_element/xml_elem_serialize_to_string
- * NAME
- * xml_elem_serialize_to_string
- * SYNOPSIS
- * void xml_element_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len)
- * FUNCTION
- * writes element tree as XML into a newly allocated buffer
- * INPUTS
- * el - root element of tree
- * options - options determining how output is written. see XML_ELEM_OUTPUT_OPTIONS
- * buf_len - length of returned buffer, if not null.
- * RESULT
- * char* or NULL. Must be free'd by caller.
- * NOTES
- * SEE ALSO
- * xml_elem_serialize_to_stream ()
- * xml_elem_parse_buf ()
- * SOURCE
- */
-char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len)
-{
- simplestring buf;
- simplestring_init(&buf);
-
- xml_element_serialize(el, simplestring_out_fptr, (void *)&buf, options, 0);
-
- if(buf_len) {
- *buf_len = buf.len;
- }
-
- return buf.str;
-}
-/******/
-
-/****f* xml_element/xml_elem_serialize_to_stream
- * NAME
- * xml_elem_serialize_to_stream
- * SYNOPSIS
- * void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options)
- * FUNCTION
- * writes element tree as XML into a stream (typically an opened file)
- * INPUTS
- * el - root element of tree
- * output - stream handle
- * options - options determining how output is written. see XML_ELEM_OUTPUT_OPTIONS
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_serialize_to_string ()
- * xml_elem_parse_buf ()
- * SOURCE
- */
-void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options)
-{
- xml_element_serialize(el, file_out_fptr, (void *)output, options, 0);
-}
-/******/
-
-/*--------------------------*
-* End xml_element Functions *
-*--------------------------*/
-
-
-/*----------------------
-* Begin Expat Handlers *
-*---------------------*/
-
-typedef struct _xml_elem_data {
- xml_element* root;
- xml_element* current;
- XML_ELEM_INPUT_OPTIONS input_options;
- int needs_enc_conversion;
-} xml_elem_data;
-
-
-/* expat start of element handler */
-static void startElement(void *userData, const char *name, const char **attrs)
-{
- int i;
- xml_element *c;
- xml_elem_data* mydata = (xml_elem_data*)userData;
- const char** p = attrs;
-
- if(mydata) {
- c = mydata->current;
-
- mydata->current = xml_elem_new();
- mydata->current->name = (char*)strdup(name);
- mydata->current->parent = c;
-
- /* init attrs */
- while(p && *p) {
- xml_element_attr* attr = malloc(sizeof(xml_element_attr));
- if(attr) {
- attr->key = strdup(*p);
- attr->val = strdup(*(p+1));
- Q_PushTail(&mydata->current->attrs, attr);
-
- p += 2;
- }
- }
- }
-}
-
-/* expat end of element handler */
-static void endElement(void *userData, const char *name)
-{
- xml_elem_data* mydata = (xml_elem_data*)userData;
-
- if(mydata && mydata->current && mydata->current->parent) {
- Q_PushTail(&mydata->current->parent->children, mydata->current);
-
- mydata->current = mydata->current->parent;
- }
-}
-
-/* expat char data handler */
-static void charHandler(void *userData,
- const char *s,
- int len)
-{
- xml_elem_data* mydata = (xml_elem_data*)userData;
- if(mydata && mydata->current) {
-
- /* Check if we need to decode utf-8 parser output to another encoding */
- if(mydata->needs_enc_conversion && mydata->input_options->encoding) {
- char* add_text = utf8_decode(s, len, &len, mydata->input_options->encoding);
- if(add_text) {
- simplestring_addn(&mydata->current->text, add_text, len);
- free(add_text);
- return;
- }
- }
- simplestring_addn(&mydata->current->text, s, len);
- }
-}
-/******/
-
-/*-------------------*
-* End Expat Handlers *
-*-------------------*/
-
-/*-------------------*
-* xml_elem_parse_buf *
-*-------------------*/
-
-/****f* xml_element/xml_elem_parse_buf
- * NAME
- * xml_elem_parse_buf
- * SYNOPSIS
- * xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error)
- * FUNCTION
- * parse a buffer containing XML into an xml_element in-memory tree
- * INPUTS
- * in_buf - buffer containing XML document
- * len - length of buffer
- * options - input options. optional
- * error - error result data. optional. check if result is null.
- * RESULT
- * void
- * NOTES
- * The returned data must be free'd by caller
- * SEE ALSO
- * xml_elem_serialize_to_string ()
- * xml_elem_free ()
- * SOURCE
- */
-xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error)
-{
- xml_element* xReturn = NULL;
- char buf[100] = "";
- static STRUCT_XML_ELEM_INPUT_OPTIONS default_opts = {encoding_utf_8};
-
- if(!options) {
- options = &default_opts;
- }
-
- if(in_buf) {
- XML_Parser parser;
- xml_elem_data mydata = {0};
-
- parser = XML_ParserCreate(NULL);
-
- mydata.root = xml_elem_new();
- mydata.current = mydata.root;
- mydata.input_options = options;
- mydata.needs_enc_conversion = options->encoding && strcmp(options->encoding, encoding_utf_8);
-
- XML_SetElementHandler(parser, startElement, endElement);
- XML_SetCharacterDataHandler(parser, charHandler);
-
- /* pass the xml_elem_data struct along */
- XML_SetUserData(parser, (void*)&mydata);
-
- if(!len) {
- len = strlen(in_buf);
- }
-
- /* parse the XML */
- if(XML_Parse(parser, in_buf, len, 1) == 0) {
- enum XML_Error err_code = XML_GetErrorCode(parser);
- int line_num = XML_GetCurrentLineNumber(parser);
- int col_num = XML_GetCurrentColumnNumber(parser);
- long byte_idx = XML_GetCurrentByteIndex(parser);
- int byte_total = XML_GetCurrentByteCount(parser);
- const char * error_str = XML_ErrorString(err_code);
- if(byte_idx >= 0) {
- snprintf(buf,
- sizeof(buf),
- "\n\tdata beginning %i before byte index: %s\n",
- byte_idx > 10 ? 10 : byte_idx,
- in_buf + (byte_idx > 10 ? byte_idx - 10 : byte_idx));
- }
-
- fprintf(stderr, "expat reports error code %i\n"
- "\tdescription: %s\n"
- "\tline: %i\n"
- "\tcolumn: %i\n"
- "\tbyte index: %i\n"
- "\ttotal bytes: %i\n%s ",
- err_code, error_str, line_num,
- col_num, byte_idx, byte_total, buf);
-
-
- /* error condition */
- if(error) {
- error->parser_code = (long)err_code;
- error->line = line_num;
- error->column = col_num;
- error->byte_index = byte_idx;
- error->parser_error = error_str;
- }
- }
- else {
- xReturn = (xml_element*)Q_Head(&mydata.root->children);
- }
-
- XML_ParserFree(parser);
-
-
- xml_elem_free_non_recurse(mydata.root);
- }
-
- return xReturn;
-}
-
-/******/
diff --git a/ext/xmlrpc/libxmlrpc/xml_element.h b/ext/xmlrpc/libxmlrpc/xml_element.h
deleted file mode 100644
index cfe7ca2483..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_element.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef __XML_ELEMENT_H__
- #define __XML_ELEMENT_H__
-
-/* includes */
-#include <stdio.h>
-#include "queue.h"
-#include "simplestring.h"
-#include "encodings.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****d* enum/XML_ELEM_VERBOSITY
- * NAME
- * XML_ELEM_VERBOSITY
- * NOTES
- * verbosity/readability options for generated xml
- * SEE ALSO
- * XML_ELEM_OUTPUT_OPTIONS
- * SOURCE
- */
-typedef enum _xml_elem_verbosity {
- xml_elem_no_white_space, /* compact xml with no white space */
- xml_elem_newlines_only, /* add newlines for enhanced readability */
- xml_elem_pretty /* add newlines and indent accordint to depth */
-} XML_ELEM_VERBOSITY;
-/******/
-
-
-/****d* enum/XML_ELEM_ESCAPING
- * NAME
- * XML_ELEM_ESCAPING
- * NOTES
- * xml escaping options for generated xml
- * SEE ALSO
- * XML_ELEM_OUTPUT_OPTIONS
- * SOURCE
- */
-typedef enum _xml_elem_escaping {
- xml_elem_no_escaping = 0x000,
- xml_elem_markup_escaping = 0x002, /* entity escape xml special chars */
- xml_elem_non_ascii_escaping = 0x008, /* entity escape chars above 127 */
- xml_elem_non_print_escaping = 0x010, /* entity escape non print (illegal) chars */
- xml_elem_cdata_escaping = 0x020, /* wrap in cdata section */
-} XML_ELEM_ESCAPING;
-/******/
-
-
-/****s* struct/XML_ELEM_OUTPUT_OPTIONS
- * NAME
- * XML_ELEM_OUTPUT_OPTIONS
- * NOTES
- * defines various output options
- * SOURCE
- */
-typedef struct _xml_output_options {
- XML_ELEM_VERBOSITY verbosity; /* length/verbosity of xml */
- XML_ELEM_ESCAPING escaping; /* how to escape special chars */
- const char* encoding; /* <?xml encoding="<encoding>" ?> */
-} STRUCT_XML_ELEM_OUTPUT_OPTIONS, *XML_ELEM_OUTPUT_OPTIONS;
-/******/
-
-/****s* struct/XML_ELEM_INPUT_OPTIONS
- * NAME
- * XML_ELEM_INPUT_OPTIONS
- * NOTES
- * defines various input options
- * SOURCE
- */
-typedef struct _xml_input_options {
- ENCODING_ID encoding; /* which encoding to use. */
-} STRUCT_XML_ELEM_INPUT_OPTIONS, *XML_ELEM_INPUT_OPTIONS;
-/******/
-
-/****s* struct/XML_ELEM_ERROR
- * NAME
- * XML_ELEM_ERROR
- * NOTES
- * defines an xml parser error
- * SOURCE
- */
-typedef struct _xml_elem_error {
- int parser_code;
- const char* parser_error;
- long line;
- long column;
- long byte_index;
-} STRUCT_XML_ELEM_ERROR, *XML_ELEM_ERROR;
-/******/
-
-
-/*-************************
-* begin xml element stuff *
-**************************/
-
-/****s* struct/xml_elem_attr
- * NAME
- * xml_elem_attr
- * NOTES
- * representation of an xml attribute, foo="bar"
- * SOURCE
- */
-typedef struct _xml_element_attr {
- char* key; /* attribute key */
- char* val; /* attribute value */
-} xml_element_attr;
-/******/
-
-/****s* struct/xml_elem_attr
- * NAME
- * xml_elem_attr
- * NOTES
- * representation of an xml element, eg <candidate name="Harry Browne" party="Libertarian"/>
- * SOURCE
- */
-typedef struct _xml_element {
- const char* name; /* element identifier */
- simplestring text; /* text contained between element begin/end pairs */
- struct _xml_element* parent; /* element's parent */
-
- queue attrs; /* attribute list */
- queue children; /* child element list */
-} xml_element;
-/******/
-
-void xml_elem_free(xml_element* root);
-void xml_elem_free_non_recurse(xml_element* root);
-xml_element* xml_elem_new(void);
-char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len);
-void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options);
-xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error);
-
-/*-**********************
-* end xml element stuff *
-************************/
-
-/*-**********************
-* Begin xml_element API *
-************************/
-
-/****d* VALUE/XMLRPC_MACROS
- * NAME
- * Some Helpful Macros
- * NOTES
- * Some macros for making life easier. Should be self-explanatory.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * SOURCE
- */
-#define xml_elem_next_element(el) ((el) ? (xml_element *)Q_Next(&el->children) : NULL)
-#define xml_elem_head_element(el) ((el) ? (xml_element *)Q_Head(&el->children) : NULL)
-#define xml_elem_next_attr(el) ((el) ? (xml_element_attr *)Q_Next(&el->attrs) : NULL)
-#define xml_elem_head_attr(el) ((el) ? (xml_element_attr *)Q_Head(&el->attrs) : NULL)
-#define xml_elem_get_name(el) (char *)((el) ? el->name : NULL)
-#define xml_elem_get_val(el) (char *)((el) ? el->text.str : NULL)
-/******/
-
-
-/*-********************
-* End xml_element API *
-**********************/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_ELEMENT_H__ */
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c b/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c
deleted file mode 100644
index b51d991723..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_dandarpc.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define ELEM_METHODCALL "methodCall"
-#define ELEM_METHODNAME "methodName"
-#define ELEM_METHODRESPONSE "methodResponse"
-#define ELEM_ROOT "simpleRPC"
-
-#define ATTR_ARRAY "array"
-#define ATTR_BASE64 "base64"
-#define ATTR_BOOLEAN "boolean"
-#define ATTR_DATETIME "dateTime.iso8601"
-#define ATTR_DOUBLE "double"
-#define ATTR_ID "id"
-#define ATTR_INT "int"
-#define ATTR_MIXED "mixed"
-#define ATTR_SCALAR "scalar"
-#define ATTR_STRING "string"
-#define ATTR_STRUCT "struct"
-#define ATTR_TYPE "type"
-#define ATTR_VECTOR "vector"
-#define ATTR_VERSION "version"
-
-#define VAL_VERSION_0_9 "0.9"
-
-
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC_VALUE xCurrent, xml_element* el) {
- if(!xCurrent) {
- xCurrent = XMLRPC_CreateValueEmpty();
- }
-
- if(el->name) {
- const char* id = NULL;
- const char* type = NULL;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
-
- while(attr_iter) {
- if(!strcmp(attr_iter->key, ATTR_ID)) {
- id = attr_iter->val;
- }
- if(!strcmp(attr_iter->key, ATTR_TYPE)) {
- type = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- if(id) {
- XMLRPC_SetValueID_Case(xCurrent, id, 0, xmlrpc_case_exact);
- }
-
- if(!strcmp(el->name, ATTR_SCALAR)) {
- if(!type || !strcmp(type, ATTR_STRING)) {
- XMLRPC_SetValueString(xCurrent, el->text.str, el->text.len);
- }
- else if(!strcmp(type, ATTR_INT)) {
- XMLRPC_SetValueInt(xCurrent, atoi(el->text.str));
- }
- else if(!strcmp(type, ATTR_BOOLEAN)) {
- XMLRPC_SetValueBoolean(xCurrent, atoi(el->text.str));
- }
- else if(!strcmp(type, ATTR_DOUBLE)) {
- XMLRPC_SetValueDouble(xCurrent, atof(el->text.str));
- }
- else if(!strcmp(type, ATTR_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(xCurrent, el->text.str);
- }
- else if(!strcmp(type, ATTR_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- }
- else if(!strcmp(el->name, ATTR_VECTOR)) {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
-
- if(!type || !strcmp(type, ATTR_MIXED)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_mixed);
- }
- else if(!strcmp(type, ATTR_ARRAY)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_array);
- }
- else if(!strcmp(type, ATTR_STRUCT)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_struct);
- }
- while( iter ) {
- XMLRPC_VALUE xNext = XMLRPC_CreateValueEmpty();
- xml_element_to_DANDARPC_REQUEST_worker(request, xNext, iter);
- XMLRPC_AddValueToVector(xCurrent, xNext);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- while( iter ) {
- xml_element_to_DANDARPC_REQUEST_worker(request, xCurrent, iter);
- iter = (xml_element*)Q_Next(&el->children);
- }
-
- if(!strcmp(el->name, ELEM_METHODCALL)) {
- if(request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
- }
- }
- else if(!strcmp(el->name, ELEM_METHODRESPONSE)) {
- if(request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_response);
- }
- }
- else if(!strcmp(el->name, ELEM_METHODNAME)) {
- if(request) {
- XMLRPC_RequestSetMethodName(request, el->text.str);
- }
- }
- }
- }
- return xCurrent;
-}
-
-XMLRPC_VALUE xml_element_to_DANDARPC_VALUE(xml_element* el)
-{
- return xml_element_to_DANDARPC_REQUEST_worker(NULL, NULL, el);
-}
-
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if(request) {
- return XMLRPC_RequestSetData(request, xml_element_to_DANDARPC_REQUEST_worker(request, NULL, el));
- }
- return NULL;
-}
-
-xml_element* DANDARPC_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE node) {
-#define BUF_SIZE 512
- xml_element* root = NULL;
- if(node) {
- char buf[BUF_SIZE];
- const char* id = XMLRPC_GetValueID(node);
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(node);
- XMLRPC_REQUEST_OUTPUT_OPTIONS output = XMLRPC_RequestGetOutputOptions(request);
- int bNoAddType = (type == xmlrpc_string && request && output && output->xml_elem_opts.verbosity == xml_elem_no_white_space);
- xml_element* elem_val = xml_elem_new();
- const char* pAttrType = NULL;
-
- xml_element_attr* attr_type = bNoAddType ? NULL : malloc(sizeof(xml_element_attr));
-
- if(attr_type) {
- attr_type->key = strdup(ATTR_TYPE);
- attr_type->val = 0;
- Q_PushTail(&elem_val->attrs, attr_type);
- }
-
- elem_val->name = (type == xmlrpc_vector) ? strdup(ATTR_VECTOR) : strdup(ATTR_SCALAR);
-
- if(id && *id) {
- xml_element_attr* attr_id = malloc(sizeof(xml_element_attr));
- if(attr_id) {
- attr_id->key = strdup(ATTR_ID);
- attr_id->val = strdup(id);
- Q_PushTail(&elem_val->attrs, attr_id);
- }
- }
-
- switch(type) {
- case xmlrpc_string:
- pAttrType = ATTR_STRING;
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_int:
- pAttrType = ATTR_INT;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_boolean:
- pAttrType = ATTR_BOOLEAN;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_double:
- pAttrType = ATTR_DOUBLE;
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_datetime:
- pAttrType = ATTR_DATETIME;
- simplestring_add(&elem_val->text, XMLRPC_GetValueDateTime_ISO8601(node));
- break;
- case xmlrpc_base64:
- {
- struct buffer_st buf;
- pAttrType = ATTR_BASE64;
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- case xmlrpc_vector:
- {
- XMLRPC_VECTOR_TYPE my_type = XMLRPC_GetVectorType(node);
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
-
- switch(my_type) {
- case xmlrpc_vector_array:
- pAttrType = ATTR_ARRAY;
- break;
- case xmlrpc_vector_mixed:
- pAttrType = ATTR_MIXED;
- break;
- case xmlrpc_vector_struct:
- pAttrType = ATTR_STRUCT;
- break;
- default:
- break;
- }
-
- /* recurse through sub-elements */
- while( xIter ) {
- xml_element* next_el = DANDARPC_to_xml_element_worker(request, xIter);
- if(next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
- break;
- default:
- break;
- }
- if(pAttrType && attr_type && !bNoAddType) {
- attr_type->val = strdup(pAttrType);
- }
- root = elem_val;
- }
- return root;
-}
-
-xml_element* DANDARPC_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return DANDARPC_to_xml_element_worker(NULL, node);
-}
-
-xml_element* DANDARPC_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* wrapper = NULL;
- xml_element* root = NULL;
- if(request) {
- XMLRPC_REQUEST_TYPE request_type = XMLRPC_RequestGetRequestType(request);
- const char* pStr = NULL;
- xml_element_attr* version = malloc(sizeof(xml_element_attr));
- version->key = strdup(ATTR_VERSION);
- version->val = strdup(VAL_VERSION_0_9);
-
- wrapper = xml_elem_new();
-
- if(request_type == xmlrpc_request_response) {
- pStr = ELEM_METHODRESPONSE;
- }
- else if(request_type == xmlrpc_request_call) {
- pStr = ELEM_METHODCALL;
- }
- if(pStr) {
- wrapper->name = strdup(pStr);
- }
-
- root = xml_elem_new();
- root->name = strdup(ELEM_ROOT);
- Q_PushTail(&root->attrs, version);
- Q_PushTail(&root->children, wrapper);
-
- pStr = XMLRPC_RequestGetMethodName(request);
-
- if(pStr) {
- xml_element* method = xml_elem_new();
- method->name = strdup(ELEM_METHODNAME);
- simplestring_add(&method->text, pStr);
- Q_PushTail(&wrapper->children, method);
- }
- Q_PushTail(&wrapper->children,
- DANDARPC_to_xml_element_worker(request, XMLRPC_RequestGetData(request)));
- }
- return root;
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h b/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h
deleted file mode 100644
index 6facb55778..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef XML_TO_DANDARPC_H
- #define XML_TO_DANDARPC_H
-
-#include "time.h"
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_DANDARPC_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* DANDARPC_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* DANDARPC_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_DANDARPC_H */
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_soap.c b/ext/xmlrpc/libxmlrpc/xml_to_soap.c
deleted file mode 100644
index fada389fb6..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_soap.c
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
-*/
-
-
-/************************************************************************
-* TODO: *
-* - [SOAP-ENC:position] read sparse arrays (and write?) *
-* - [SOAP-ENC:offset] read partially transmitted arrays (and write?) *
-* - read "flattened" multi-dimensional arrays. (don't bother writing) *
-* *
-* BUGS: *
-* - does not read schema. thus only knows soap pre-defined types. *
-* - references (probably) do not work. untested. *
-* - does not expose SOAP-ENV:Header to application at all. *
-* - does not use namespaces correctly, thus: *
-* - namespaces are hard-coded in comparison tokens *
-* - if a sender uses another namespace identifer, it will break *
-************************************************************************/
-
-
-static const char rcsid[] = "#(@) $Id:";
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_soap.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define TOKEN_ANY "xsd:ur-type"
-#define TOKEN_ARRAY "SOAP-ENC:Array"
-#define TOKEN_ARRAY_TYPE "SOAP-ENC:arrayType"
-#define TOKEN_BASE64 "SOAP-ENC:base64"
-#define TOKEN_BOOLEAN "xsd:boolean"
-#define TOKEN_DATETIME "xsd:timeInstant"
-#define TOKEN_DOUBLE "xsd:double"
-#define TOKEN_FLOAT "xsd:float"
-#define TOKEN_ID "id"
-#define TOKEN_INT "xsd:int"
-#define TOKEN_NULL "xsi:null"
-#define TOKEN_STRING "xsd:string"
-#define TOKEN_STRUCT "xsd:struct"
-#define TOKEN_TYPE "xsi:type"
-#define TOKEN_FAULT "SOAP-ENV:Fault"
-#define TOKEN_MUSTUNDERSTAND "SOAP-ENV:mustUnderstand"
-#define TOKEN_ACTOR "SOAP-ENV:actor"
-#define TOKEN_ACTOR_NEXT "http://schemas.xmlsoap.org/soap/actor/next"
-
-#define TOKEN_XMLRPC_FAULTCODE "faultCode"
-#define TOKEN_XMLRPC_FAULTSTRING "faultString"
-#define TOKEN_SOAP_FAULTCODE "faultcode"
-#define TOKEN_SOAP_FAULTSTRING "faultstring"
-#define TOKEN_SOAP_FAULTDETAILS "details"
-#define TOKEN_SOAP_FAULTACTOR "actor"
-
-
-// determine if a string represents a soap type, as used in
-// element names
-static inline int is_soap_type(const char* soap_type) {
- return(strstr(soap_type, "SOAP-ENC:") || strstr(soap_type, "xsd:")) ? 1 : 0;
-}
-
-/* utility func to generate a new attribute. possibly should be in xml_element.c?? */
-static xml_element_attr* new_attr(const char* key, const char* val) {
- xml_element_attr* attr = malloc(sizeof(xml_element_attr));
- if (attr) {
- attr->key = key ? strdup(key) : NULL;
- attr->val = val ? strdup(val) : NULL;
- }
- return attr;
-}
-
-struct array_info {
- char kids_type[30];
- unsigned long size;
- /* ... ? */
-};
-
-
-/* parses soap arrayType attribute to generate an array_info structure.
- * TODO: should deal with sparse, flattened, & multi-dimensional arrays
- */
-static struct array_info* parse_array_type_info(const char* array_type) {
- struct array_info* ai = NULL;
- if (array_type) {
- ai = (struct array_info*)calloc(1, sizeof(struct array_info));
- if (ai) {
- char buf[128], *p;
- snprintf(buf, sizeof(buf), "%s", array_type);
- p = strchr(buf, '[');
- if (p) {
- *p = 0;
- }
- strcpy(ai->kids_type, buf);
- }
- }
- return ai;
-}
-
-/* performs heuristics on an xmlrpc_vector_array to determine
- * appropriate soap arrayType string.
- */
-static const char* get_array_soap_type(XMLRPC_VALUE node) {
- XMLRPC_VALUE_TYPE_EASY type = xmlrpc_type_none;
-
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- int loopCount = 0;
- const char* soapType = TOKEN_ANY;
-
- type = XMLRPC_GetValueTypeEasy(xIter);
- xIter = XMLRPC_VectorNext(node);
-
- while (xIter) {
- /* 50 seems like a decent # of loops. That will likely
- * cover most cases. Any more and we start to sacrifice
- * performance.
- */
- if ( (XMLRPC_GetValueTypeEasy(xIter) != type) || loopCount >= 50) {
- type = xmlrpc_type_none;
- break;
- }
- loopCount ++;
-
- xIter = XMLRPC_VectorNext(node);
- }
- switch (type) {
- case xmlrpc_type_none:
- soapType = TOKEN_ANY;
- break;
- case xmlrpc_type_empty:
- soapType = TOKEN_NULL;
- break;
- case xmlrpc_type_int:
- soapType = TOKEN_INT;
- break;
- case xmlrpc_type_double:
- soapType = TOKEN_DOUBLE;
- break;
- case xmlrpc_type_boolean:
- soapType = TOKEN_BOOLEAN;
- break;
- case xmlrpc_type_string:
- soapType = TOKEN_STRING;
- break;
- case xmlrpc_type_base64:
- soapType = TOKEN_BASE64;
- break;
- case xmlrpc_type_datetime:
- soapType = TOKEN_DATETIME;
- break;
- case xmlrpc_type_struct:
- soapType = TOKEN_STRUCT;
- break;
- case xmlrpc_type_array:
- soapType = TOKEN_ARRAY;
- break;
- case xmlrpc_type_mixed:
- soapType = TOKEN_STRUCT;
- break;
- }
- return soapType;
-}
-
-/* determines wether a node is a fault or not, and of which type:
- * 0 = not a fault,
- * 1 = xmlrpc style fault
- * 2 = soap style fault.
- */
-static inline int get_fault_type(XMLRPC_VALUE node) {
- if (XMLRPC_VectorGetValueWithID(node, TOKEN_XMLRPC_FAULTCODE) &&
- XMLRPC_VectorGetValueWithID(node, TOKEN_XMLRPC_FAULTSTRING)) {
- return 1;
- }
- else if (XMLRPC_VectorGetValueWithID(node, TOKEN_SOAP_FAULTCODE) &&
- XMLRPC_VectorGetValueWithID(node, TOKEN_SOAP_FAULTSTRING)) {
- return 2;
- }
- return 0;
-}
-
-/* input: an XMLRPC_VALUE representing a fault struct in xml-rpc style.
- * output: an XMLRPC_VALUE representing a fault struct in soap style,
- * with xmlrpc codes mapped to soap codes, and all other values preserved.
- * note that the returned value is a completely new value, and must be freed.
- * the input value is untouched.
- */
-static XMLRPC_VALUE gen_fault_xmlrpc(XMLRPC_VALUE node, xml_element* el_target) {
- XMLRPC_VALUE xDup = XMLRPC_DupValueNew(node);
- XMLRPC_VALUE xCode = XMLRPC_VectorGetValueWithID(xDup, TOKEN_XMLRPC_FAULTCODE);
- XMLRPC_VALUE xStr = XMLRPC_VectorGetValueWithID(xDup, TOKEN_XMLRPC_FAULTSTRING);
-
- XMLRPC_SetValueID(xCode, TOKEN_SOAP_FAULTCODE, 0);
- XMLRPC_SetValueID(xStr, TOKEN_SOAP_FAULTSTRING, 0);
-
- /* rough mapping of xmlrpc fault codes to soap codes */
- switch (XMLRPC_GetValueInt(xCode)) {
- case -32700: // "parse error. not well formed",
- case -32701: // "parse error. unsupported encoding"
- case -32702: // "parse error. invalid character for encoding"
- case -32600: // "server error. invalid xml-rpc. not conforming to spec."
- case -32601: // "server error. requested method not found"
- case -32602: // "server error. invalid method parameters"
- XMLRPC_SetValueString(xCode, "SOAP-ENV:Client", 0);
- break;
- case -32603: // "server error. internal xml-rpc error"
- case -32500: // "application error"
- case -32400: // "system error"
- case -32300: // "transport error
- XMLRPC_SetValueString(xCode, "SOAP-ENV:Server", 0);
- break;
- }
- return xDup;
-}
-
-// returns a new XMLRPC_VALUE representing a soap fault, comprised of a struct with four keys.
-static XMLRPC_VALUE gen_soap_fault(const char* fault_code, const char* fault_string,
- const char* actor, const char* details) {
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(TOKEN_FAULT, xmlrpc_vector_struct);
- XMLRPC_AddValuesToVector(xReturn,
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTCODE, fault_code, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTSTRING, fault_string, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTACTOR, actor, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTDETAILS, details, 0),
- NULL);
- return xReturn;
-}
-
-/* translates xml soap dom to native data structures. recursive. */
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST_worker(XMLRPC_REQUEST request,
- XMLRPC_VALUE xParent,
- struct array_info* parent_array,
- XMLRPC_VALUE xCurrent,
- xml_element* el,
- int depth) {
- XMLRPC_REQUEST_TYPE rtype = xmlrpc_request_none;
-
- // no current element on first call
- if (!xCurrent) {
- xCurrent = XMLRPC_CreateValueEmpty();
- }
-
- // increment recursion depth guage
- depth ++;
-
- // safety first. must have a valid element
- if (el && el->name) {
- const char* id = NULL;
- const char* type = NULL, *arrayType=NULL, *actor = NULL;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
- int b_must_understand = 0;
-
- // in soap, types may be specified in either element name -or- with xsi:type attribute.
- if (is_soap_type(el->name)) {
- type = el->name;
- }
- // if our parent node, by definition a vector, is not an array, then
- // our element name must be our key identifier.
- else if (XMLRPC_GetVectorType(xParent) != xmlrpc_vector_array) {
- id = el->name;
- if(!strcmp(id, "item")) {
- }
- }
-
- // iterate through element attributes, pick out useful stuff.
- while (attr_iter) {
- // element's type
- if (!strcmp(attr_iter->key, TOKEN_TYPE)) {
- type = attr_iter->val;
- }
- // array type
- else if (!strcmp(attr_iter->key, TOKEN_ARRAY_TYPE)) {
- arrayType = attr_iter->val;
- }
- // must understand, sometimes present in headers.
- else if (!strcmp(attr_iter->key, TOKEN_MUSTUNDERSTAND)) {
- b_must_understand = strchr(attr_iter->val, '1') ? 1 : 0;
- }
- // actor, used in conjuction with must understand.
- else if (!strcmp(attr_iter->key, TOKEN_ACTOR)) {
- actor = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- // check if caller says we must understand something in a header.
- if (b_must_understand) {
- // is must understand actually indended for us?
- // BUG: spec says we should also determine if actor is our URL, but
- // we do not have that information.
- if (!actor || !strcmp(actor, TOKEN_ACTOR_NEXT)) {
- // TODO: implement callbacks or other mechanism for applications
- // to "understand" these headers. For now, we just bail if we
- // get a mustUnderstand header intended for us.
- XMLRPC_RequestSetError(request,
- gen_soap_fault("SOAP-ENV:MustUnderstand",
- "SOAP Must Understand Error",
- "", ""));
- return xCurrent;
- }
- }
-
- // set id (key) if one was found.
- if (id) {
- XMLRPC_SetValueID_Case(xCurrent, id, 0, xmlrpc_case_exact);
- }
-
- // according to soap spec,
- // depth 1 = Envelope, 2 = Header, Body & Fault, 3 = methodcall or response.
- if (depth == 3) {
- const char* methodname = el->name;
- char* p = NULL;
-
- // BUG: we determine request or response type using presence of "Response" in element name.
- // According to spec, this is only recommended, not required. Apparently, implementations
- // are supposed to know the type of action based on state, which strikes me as a bit lame.
- // Anyway, we don't have that state info, thus we use Response as a heuristic.
- rtype =
-#ifdef strcasestr
- strcasestr(el->name, "response") ? xmlrpc_request_response : xmlrpc_request_call;
-#else
- strstr(el->name, "esponse") ? xmlrpc_request_response : xmlrpc_request_call;
-#endif
- XMLRPC_RequestSetRequestType(request, rtype);
-
- // Get methodname. strip xml namespace crap.
- p = strchr(el->name, ':');
- if (p) {
- methodname = p + 1;
- }
- if (rtype == xmlrpc_request_call) {
- XMLRPC_RequestSetMethodName(request, methodname);
- }
- }
-
-
- // Next, we begin to convert actual values.
- // if no children, then must be a scalar value.
- if (!Q_Size(&el->children)) {
- if (!type && parent_array && parent_array->kids_type[0]) {
- type = parent_array->kids_type;
- }
- if (!type || !strcmp(type, TOKEN_STRING)) {
- XMLRPC_SetValueString(xCurrent, el->text.str, el->text.len);
- }
- else if (!strcmp(type, TOKEN_INT)) {
- XMLRPC_SetValueInt(xCurrent, atoi(el->text.str));
- }
- else if (!strcmp(type, TOKEN_BOOLEAN)) {
- XMLRPC_SetValueBoolean(xCurrent, atoi(el->text.str));
- }
- else if (!strcmp(type, TOKEN_DOUBLE) ||
- !strcmp(type, TOKEN_FLOAT)) {
- XMLRPC_SetValueDouble(xCurrent, atof(el->text.str));
- }
- else if (!strcmp(type, TOKEN_NULL)) {
- // already an empty val. do nothing.
- }
- else if (!strcmp(type, TOKEN_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(xCurrent, el->text.str);
- }
- else if (!strcmp(type, TOKEN_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- }
- // Element has children, thus a vector, or "compound type" in soap-speak.
- else {
- struct array_info* ai = NULL;
- xml_element* iter = (xml_element*)Q_Head(&el->children);
-
- if (!type || !strcmp(type, TOKEN_STRUCT)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_struct);
- }
- else if (!strcmp(type, TOKEN_ARRAY) || arrayType != NULL) {
- // determine magic associated with soap array type.
- // this is passed down as we recurse, so our children have access to the info.
- ai = parse_array_type_info(arrayType); // alloc'ed ai free'd below.
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_array);
- }
- else {
- // mixed is probably closest thing we have to compound type.
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_mixed);
- }
- // Recurse, adding values as we go. Check for error during recursion
- // and if found, bail. this short-circuits us out of the recursion.
- while ( iter && !XMLRPC_RequestGetError(request) ) {
- XMLRPC_VALUE xNext = NULL;
- // top level elements don't actually represent values, so we just pass the
- // current value along until we are deep enough.
- if ( depth <= 2 ||
- (rtype == xmlrpc_request_response && depth <= 3) ) {
- xml_element_to_SOAP_REQUEST_worker(request, NULL, ai, xCurrent, iter, depth);
- }
- // ready to do some actual de-serialization. create a new empty value and
- // pass that along to be init'd, then add it to our current vector.
- else {
- xNext = XMLRPC_CreateValueEmpty();
- xml_element_to_SOAP_REQUEST_worker(request, xCurrent, ai, xNext, iter, depth);
- XMLRPC_AddValueToVector(xCurrent, xNext);
- }
- iter = (xml_element*)Q_Next(&el->children);
- }
- // cleanup
- if (ai) {
- free(ai);
- }
- }
- }
- return xCurrent;
-}
-
-// Convert soap xml dom to XMLRPC_VALUE, sans request info. untested.
-XMLRPC_VALUE xml_element_to_SOAP_VALUE(xml_element* el)
-{
- return xml_element_to_SOAP_REQUEST_worker(NULL, NULL, NULL, NULL, el, 0);
-}
-
-// Convert soap xml dom to XMLRPC_REQUEST
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if (request) {
- return XMLRPC_RequestSetData(request, xml_element_to_SOAP_REQUEST_worker(request, NULL, NULL, NULL, el, 0));
- }
- return NULL;
-}
-
-
-/* translates data structures to soap/xml. recursive */
-xml_element* SOAP_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE node) {
-#define BUF_SIZE 128
- xml_element* elem_val = NULL;
- if (node) {
- int bFreeNode = 0; /* sometimes we may need to free 'node' variable */
- char buf[BUF_SIZE];
- XMLRPC_VALUE_TYPE_EASY type = XMLRPC_GetValueTypeEasy(node);
- char* pName = NULL, *pAttrType = NULL;
-
- // create our return value element
- elem_val = xml_elem_new();
-
- switch (type) {
- case xmlrpc_type_struct:
- case xmlrpc_type_mixed:
- case xmlrpc_type_array:
- if (type == xmlrpc_type_array) {
- // array's are _very_ special in soap.
- // TODO: Should handle sparse/partial arrays here.
-
- // determine soap array type.
- const char* type = get_array_soap_type(node);
- xml_element_attr* attr_array_type = NULL;
-
- // specify array kids type and array size.
- snprintf(buf, sizeof(buf), "%s[%i]", type, XMLRPC_VectorSize(node));
- attr_array_type = new_attr(TOKEN_ARRAY_TYPE, buf);
-
- Q_PushTail(&elem_val->attrs, attr_array_type);
-
- pAttrType = TOKEN_ARRAY;
- }
- // check for fault, which is a rather special case.
- // (can't these people design anything consistent/simple/elegant?)
- else if (type == xmlrpc_type_struct) {
- int fault_type = get_fault_type(node);
- if (fault_type) {
- if (fault_type == 1) {
- // gen fault from xmlrpc style fault codes
- // notice that we get a new node, which must be freed herein.
- node = gen_fault_xmlrpc(node, elem_val);
- bFreeNode = 1;
- }
- pName = TOKEN_FAULT;
- }
- }
-
- {
- /* recurse through sub-elements */
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- while ( xIter ) {
- xml_element* next_el = SOAP_to_xml_element_worker(request, xIter);
- if (next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
-
- break;
-
- // handle scalar types
- case xmlrpc_type_empty:
- pAttrType = TOKEN_NULL;
- break;
- case xmlrpc_type_string:
- pAttrType = TOKEN_STRING;
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_type_int:
- pAttrType = TOKEN_INT;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_boolean:
- pAttrType = TOKEN_BOOLEAN;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_double:
- pAttrType = TOKEN_DOUBLE;
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_datetime:
- {
- time_t tt = XMLRPC_GetValueDateTime(node);
- struct tm *tm = localtime (&tt);
- pAttrType = TOKEN_DATETIME;
- if(strftime (buf, BUF_SIZE, "%Y-%m-%dT%H:%M:%SZ", tm)) {
- simplestring_add(&elem_val->text, buf);
- }
- }
- break;
- case xmlrpc_type_base64:
- {
- struct buffer_st buf;
- pAttrType = TOKEN_BASE64;
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- break;
- default:
- break;
- }
-
- // determining element's name is a bit tricky, due to soap semantics.
- if (!pName) {
- // if the value's type is known...
- if (pAttrType) {
- // see if it has an id (key). If so, use that as name,
- // and type as an attribute.
- pName = (char*)XMLRPC_GetValueID(node);
- if (pName) {
- Q_PushTail(&elem_val->attrs, new_attr(TOKEN_TYPE, pAttrType));
- }
-
- // otherwise, use the type as the name.
- else {
- pName = pAttrType;
- }
- }
- // if the value's type is not known... (a rare case?)
- else {
- // see if it has an id (key). otherwise, default to generic "item"
- pName = (char*)XMLRPC_GetValueID(node);
- if (!pName) {
- pName = "item";
- }
- }
- }
- elem_val->name = strdup(pName);
-
- // cleanup
- if (bFreeNode) {
- XMLRPC_CleanupValue(node);
- }
- }
- return elem_val;
-}
-
-// convert XMLRPC_VALUE to soap xml dom. untested.
-xml_element* SOAP_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return SOAP_to_xml_element_worker(NULL, node);
-}
-
-// convert XMLRPC_REQUEST to soap xml dom.
-xml_element* SOAP_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* root = xml_elem_new();
-
- // safety first.
- if (root) {
- xml_element* body = xml_elem_new();
- root->name = strdup("SOAP-ENV:Envelope");
-
- /* silly namespace stuff */
- Q_PushTail(&root->attrs, new_attr("xmlns:SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"));
- Q_PushTail(&root->attrs, new_attr("xmlns:xsi", "http://www.w3.org/1999/XMLSchema-instance"));
- Q_PushTail(&root->attrs, new_attr("xmlns:xsd", "http://www.w3.org/1999/XMLSchema"));
- Q_PushTail(&root->attrs, new_attr("xmlns:SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"));
- Q_PushTail(&root->attrs, new_attr("xmlns:si", "http://soapinterop.org/xsd"));
- Q_PushTail(&root->attrs, new_attr("xmlns:ns6", "http://testuri.org"));
- Q_PushTail(&root->attrs, new_attr("SOAP-ENV:encodingStyle", "http://schemas.xmlsoap.org/soap/encoding/"));
-
- //Q_PushHead(&root->attrs, new_attr("xmlns:ks", "http://kitchen.sink.org/soap/everything/under/sun"));
- // JUST KIDDING!! :-) ----> -------------------------------------------------
-
- if (body) {
- // go ahead and serialize first...
- xml_element* el_serialized =
- SOAP_to_xml_element_worker(request,
- XMLRPC_RequestGetData(request));
-
- /* check for fault, in which case, there is no intermediate element */
- if (el_serialized && !strcmp(el_serialized->name, TOKEN_FAULT)) {
- Q_PushTail(&body->children, el_serialized);
- }
- // usual case: not a fault. Add Response element in between.
- else {
- xml_element* rpc = xml_elem_new();
-
- if (rpc) {
- const char* methodname = XMLRPC_RequestGetMethodName(request);
- XMLRPC_REQUEST_TYPE rtype = XMLRPC_RequestGetRequestType(request);
-
- // if we are making a request, we want to use the methodname as is.
- if (rtype == xmlrpc_request_call) {
- if (methodname) {
- rpc->name = strdup(methodname);
- }
- }
- // if it's a response, we append "Response". Also, given xmlrpc-epi
- // API/architecture, it's likely that we don't have a methodname for
- // the response, so we have to check that.
- else {
- char buf[128];
- snprintf(buf, sizeof(buf), "%s%s",
- methodname ? methodname : "",
- "Response");
-
- rpc->name = strdup(buf);
- }
-
- // add serialized data to method call/response.
- // add method call/response to body element
- if (rpc->name) {
- if(el_serialized) {
- if(Q_Size(&el_serialized->children) && rtype == xmlrpc_request_call) {
- xml_element* iter = (xml_element*)Q_Head(&el_serialized->children);
- while(iter) {
- Q_PushTail(&rpc->children, iter);
- iter = (xml_element*)Q_Next(&el_serialized->children);
- }
- xml_elem_free_non_recurse(el_serialized);
- }
- else {
- Q_PushTail(&rpc->children, el_serialized);
- }
- }
-
- Q_PushTail(&body->children, rpc);
- }
- else {
- // no method name?!
- // TODO: fault here...?
- }
- }
- }
- body->name = strdup("SOAP-ENV:Body");
- Q_PushTail(&root->children, body);
- }
- }
-
- return root;
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_soap.h b/ext/xmlrpc/libxmlrpc/xml_to_soap.h
deleted file mode 100644
index 9ae9308b22..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_soap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef XML_TO_SOAP_H
- #define XML_TO_SOAP_H
-
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_SOAP_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* SOAP_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* SOAP_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_XMLRPC_H */
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
deleted file mode 100644
index 8bace4dab6..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_xmlrpc.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define ELEM_ARRAY "array"
-#define ELEM_BASE64 "base64"
-#define ELEM_BOOLEAN "boolean"
-#define ELEM_DATA "data"
-#define ELEM_DATETIME "dateTime.iso8601"
-#define ELEM_DOUBLE "double"
-#define ELEM_FAULT "fault"
-#define ELEM_FAULTCODE "faultCode"
-#define ELEM_FAULTSTRING "faultString"
-#define ELEM_I4 "i4"
-#define ELEM_INT "int"
-#define ELEM_MEMBER "member"
-#define ELEM_METHODCALL "methodCall"
-#define ELEM_METHODNAME "methodName"
-#define ELEM_METHODRESPONSE "methodResponse"
-#define ELEM_NAME "name"
-#define ELEM_PARAM "param"
-#define ELEM_PARAMS "params"
-#define ELEM_STRING "string"
-#define ELEM_STRUCT "struct"
-#define ELEM_VALUE "value"
-
-
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC_VALUE parent_vector, XMLRPC_VALUE current_val, xml_element* el) {
- if (!current_val) {
- /* This should only be the case for the first element */
- current_val = XMLRPC_CreateValueEmpty();
- }
-
- if (el->name) {
- if (!strcmp(el->name, ELEM_DATA) /* should be ELEM_ARRAY, but there is an extra level. weird */
- || ((!strcmp(el->name, ELEM_PARAMS)) &&
- (XMLRPC_RequestGetRequestType(request) == xmlrpc_request_call)) /* this "PARAMS" concept is silly. dave?! */
- || !strcmp(el->name, ELEM_FAULT)) { /* so is this "FAULT" nonsense. */
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_array);
-
- while (iter) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else if (!strcmp(el->name, ELEM_STRUCT)) {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_struct);
-
- while ( iter ) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else if (!strcmp(el->name, ELEM_STRING) ||
- (!strcmp(el->name, ELEM_VALUE) && Q_Size(&el->children) == 0)) {
- XMLRPC_SetValueString(current_val, el->text.str, el->text.len);
- }
- else if (!strcmp(el->name, ELEM_NAME)) {
- XMLRPC_SetValueID_Case(current_val, el->text.str, 0, xmlrpc_case_exact);
- }
- else if (!strcmp(el->name, ELEM_INT) || !strcmp(el->name, ELEM_I4)) {
- XMLRPC_SetValueInt(current_val, atoi(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_BOOLEAN)) {
- XMLRPC_SetValueBoolean(current_val, atoi(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_DOUBLE)) {
- XMLRPC_SetValueDouble(current_val, atof(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(current_val, el->text.str);
- }
- else if (!strcmp(el->name, ELEM_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(current_val, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- else {
- xml_element* iter;
-
- if (!strcmp(el->name, ELEM_METHODCALL)) {
- if (request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
- }
- }
- else if (!strcmp(el->name, ELEM_METHODRESPONSE)) {
- if (request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_response);
- }
- }
- else if (!strcmp(el->name, ELEM_METHODNAME)) {
- if (request) {
- XMLRPC_RequestSetMethodName(request, el->text.str);
- }
- }
-
- iter = (xml_element*)Q_Head(&el->children);
- while ( iter ) {
- xml_element_to_XMLRPC_REQUEST_worker(request, parent_vector,
- current_val, iter);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- }
- return current_val;
-}
-
-XMLRPC_VALUE xml_element_to_XMLRPC_VALUE(xml_element* el)
-{
- return xml_element_to_XMLRPC_REQUEST_worker(NULL, NULL, NULL, el);
-}
-
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if (request) {
- return XMLRPC_RequestSetData(request, xml_element_to_XMLRPC_REQUEST_worker(request, NULL, NULL, el));
- }
- return NULL;
-}
-
-xml_element* XMLRPC_to_xml_element_worker(XMLRPC_VALUE current_vector, XMLRPC_VALUE node,
- XMLRPC_REQUEST_TYPE request_type, int depth) {
-#define BUF_SIZE 512
- xml_element* root = NULL;
- if (node) {
- char buf[BUF_SIZE];
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(node);
- XMLRPC_VECTOR_TYPE vtype = XMLRPC_GetVectorType(node);
- xml_element* elem_val = xml_elem_new();
-
- /* special case for when root element is not an array */
- if (depth == 0 &&
- !(type == xmlrpc_vector &&
- vtype == xmlrpc_vector_array &&
- request_type == xmlrpc_request_call) ) {
- int bIsFault = (vtype == xmlrpc_vector_struct && XMLRPC_VectorGetValueWithID(node, ELEM_FAULTCODE));
-
- xml_element* next_el = XMLRPC_to_xml_element_worker(NULL, node, request_type, depth + 1);
- if (next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- elem_val->name = strdup(bIsFault ? ELEM_FAULT : ELEM_PARAMS);
- }
- else {
- switch (type) {
- case xmlrpc_empty: // treat null value as empty string in xmlrpc.
- case xmlrpc_string:
- elem_val->name = strdup(ELEM_STRING);
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_int:
- elem_val->name = strdup(ELEM_INT);
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_boolean:
- elem_val->name = strdup(ELEM_BOOLEAN);
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_double:
- elem_val->name = strdup(ELEM_DOUBLE);
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_datetime:
- elem_val->name = strdup(ELEM_DATETIME);
- simplestring_add(&elem_val->text, XMLRPC_GetValueDateTime_ISO8601(node));
- break;
- case xmlrpc_base64:
- {
- struct buffer_st buf;
- elem_val->name = strdup(ELEM_BASE64);
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- case xmlrpc_vector:
- {
- XMLRPC_VECTOR_TYPE my_type = XMLRPC_GetVectorType(node);
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- xml_element* root_vector_elem = elem_val;
-
- switch (my_type) {
- case xmlrpc_vector_array:
- {
- if(depth == 0) {
- elem_val->name = strdup(ELEM_PARAMS);
- }
- else {
- /* Hi my name is Dave and I like to make things as confusing
- * as possible, thus I will throw in this 'data' element
- * where it absolutely does not belong just so that people
- * cannot code arrays and structs in a similar and straight
- * forward manner. Have a good day.
- *
- * GRRRRRRRRR!
- */
- xml_element* data = xml_elem_new();
- data->name = strdup(ELEM_DATA);
-
- elem_val->name = strdup(ELEM_ARRAY);
- Q_PushTail(&elem_val->children, data);
- root_vector_elem = data;
- }
- }
- break;
- case xmlrpc_vector_mixed: /* not officially supported */
- case xmlrpc_vector_struct:
- elem_val->name = strdup(ELEM_STRUCT);
- break;
- default:
- break;
- }
-
- /* recurse through sub-elements */
- while ( xIter ) {
- xml_element* next_el = XMLRPC_to_xml_element_worker(node, xIter, request_type, depth + 1);
- if (next_el) {
- Q_PushTail(&root_vector_elem->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
- break;
- default:
- break;
- }
- }
-
- {
- XMLRPC_VECTOR_TYPE vtype = XMLRPC_GetVectorType(current_vector);
-
- if (depth == 1) {
- xml_element* value = xml_elem_new();
- value->name = strdup(ELEM_VALUE);
-
- /* yet another hack for the "fault" crap */
- if (XMLRPC_VectorGetValueWithID(node, ELEM_FAULTCODE)) {
- root = value;
- }
- else {
- xml_element* param = xml_elem_new();
- param->name = strdup(ELEM_PARAM);
-
- Q_PushTail(&param->children, value);
-
- root = param;
- }
- Q_PushTail(&value->children, elem_val);
- }
- else if (vtype == xmlrpc_vector_struct || vtype == xmlrpc_vector_mixed) {
- xml_element* member = xml_elem_new();
- xml_element* name = xml_elem_new();
- xml_element* value = xml_elem_new();
-
- member->name = strdup(ELEM_MEMBER);
- name->name = strdup(ELEM_NAME);
- value->name = strdup(ELEM_VALUE);
-
- simplestring_add(&name->text, XMLRPC_GetValueID(node));
-
- Q_PushTail(&member->children, name);
- Q_PushTail(&member->children, value);
- Q_PushTail(&value->children, elem_val);
-
- root = member;
- }
- else if (vtype == xmlrpc_vector_array) {
- xml_element* value = xml_elem_new();
-
- value->name = strdup(ELEM_VALUE);
-
- Q_PushTail(&value->children, elem_val);
-
- root = value;
- }
- else if (vtype == xmlrpc_vector_none) {
- /* no parent. non-op */
- root = elem_val;
- }
- else {
- xml_element* value = xml_elem_new();
-
- value->name = strdup(ELEM_VALUE);
-
- Q_PushTail(&value->children, elem_val);
-
- root = value;
- }
- }
- }
- return root;
-}
-
-xml_element* XMLRPC_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return XMLRPC_to_xml_element_worker(NULL, node, xmlrpc_request_none, 0);
-}
-
-xml_element* XMLRPC_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* wrapper = NULL;
- if (request) {
- const char* pStr = NULL;
- XMLRPC_REQUEST_TYPE request_type = XMLRPC_RequestGetRequestType(request);
- XMLRPC_VALUE xParams = XMLRPC_RequestGetData(request);
-
- wrapper = xml_elem_new();
-
- if (request_type == xmlrpc_request_call) {
- pStr = ELEM_METHODCALL;
- }
- else if (request_type == xmlrpc_request_response) {
- pStr = ELEM_METHODRESPONSE;
- }
- if (pStr) {
- wrapper->name = strdup(pStr);
- }
-
- if(request_type == xmlrpc_request_call) {
- pStr = XMLRPC_RequestGetMethodName(request);
-
- if (pStr) {
- xml_element* method = xml_elem_new();
- method->name = strdup(ELEM_METHODNAME);
- simplestring_add(&method->text, pStr);
- Q_PushTail(&wrapper->children, method);
- }
- }
- if (xParams) {
- Q_PushTail(&wrapper->children,
- XMLRPC_to_xml_element_worker(NULL, XMLRPC_RequestGetData(request), XMLRPC_RequestGetRequestType(request), 0));
- }
- else {
- /* Despite the spec, the xml-rpc list folk want me to send an empty params element */
- xml_element* params = xml_elem_new();
- params->name = strdup(ELEM_PARAMS);
- Q_PushTail(&wrapper->children, params);
- }
- }
- return wrapper;
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h
deleted file mode 100644
index 234a153460..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef XML_TO_XMLRPC_H
- #define XML_TO_XMLRPC_H
-
-#include "time.h"
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_XMLRPC_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* XMLRPC_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* XMLRPC_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_XMLRPC_H */
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.c b/ext/xmlrpc/libxmlrpc/xmlrpc.c
deleted file mode 100644
index cfac12d496..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.c
+++ /dev/null
@@ -1,2798 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-/****h* ABOUT/xmlrpc
- * NAME
- * XMLRPC_VALUE
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 9/1999 - 10/2000
- * HISTORY
- * 09/1999 -- danda -- Initial API, before I even knew of standard XMLRPC vocab. Response only.
- * 06/2000 -- danda -- played with expat-ensor from www.ensor.org. Cool, but some flaws.
- * 07/2000 -- danda -- wrote new implementation to be compatible with xmlrpc standard and
- * incorporated some ideas from ensor, most notably the separation of
- * xml dom from xmlrpc api.
- * 08/2000 -- danda -- support for two vocabularies: danda-rpc and xml-rpc
- * 08/2000 -- danda -- PHP C extension that uses XMLRPC
- * 10/15/2000 -- danda -- adding robodoc documentation
- * TODO
- * Server method introspection. (Enumerate available methods, describe I/O)
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * Welcome to XMLRPC. For more info on the specification and history, see
- * http://www.xmlrpc.org.
- *
- * This code aims to be a full-featured C implementation of XMLRPC. It does not
- * have any networking code. Rather, it is intended to be plugged into apps
- * or libraries with existing networking facilities, eg PHP, apache, perl, mozilla,
- * home-brew application servers, etc.
- *
- * Usage Paradigm:
- * The user of this library will typically be implementing either an XMLRPC server,
- * an XMLRPC client, or both. The client will use the library to build an in-memory
- * representation of a request, and then serialize (encode) that request into XML. The
- * client will then send the XML to the server via external mechanism. The server will
- * de-serialize the XML back into an binary representation, call the appropriate registered
- * method -- thereby generating a response. The response will be serialized into XML and
- * sent back to the client. The client will de-serialize it into memory, and can
- * iterate through the results via API.
- *
- * Both the request and the response may consist of arbitrarily long, arbitrarily nested
- * values. The values may be one of several types, as defined by XMLRPC_VALUE_TYPE.
- *
- * Features and Architecture:
- * - The XML parsing (xml_element.c) is completely independent of the XMLRPC api. In fact,
- * it can be used as a standalone dom implementation.
- * - Because of this, the same XMLRPC data can be serialized into multiple xml vocabularies.
- * It is simply a matter of writing a transport. So far, two transports have been defined.
- * The default xmlrpc vocab (xml_to_xmlrpc.c), and simple-rpc (xml_to_dandarpc.c) which is
- * proprietary, but imho more readable, and nice for proprietary legacy reasons.
- * - Various output options, including: xml escaping via CDATA or entity, case folding,
- * vocab version, and character encoding.
- * - One to One mapping between C structures and actual values, unlike ensor which forces
- * one to understand the arcana of the xmlrpc vocab.
- * - support for mixed indexed/keyed vector types, making it more compatible with
- * languages such as PHP.
- * - quite speedy compared to implementations written in interpreted languages. Also, uses
- * intelligent string handling, so not many strlen() calls, etc.
- * - comprehensive API for manipulation of values
- *******/
-
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <time.h>
-
-#include "queue.h"
-#include "xmlrpc.h"
-#include "expat.h"
-#include "base64.h"
-
-#include "xml_to_xmlrpc.h"
-#include "xml_to_dandarpc.h"
-#include "xml_to_soap.h"
-#include "xml_element.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-
-
-
-/*-*********************
-* Begin Time Functions *
-***********************/
-
-static int date_from_ISO8601 (const char *text, time_t * value) {
- struct tm tm;
- int n;
- int i;
- time_t t;
- char buf[18];
-
- if (strchr (text, '-')) {
- char *p = (char *) text, *p2 = buf;
- while (p && *p) {
- if (*p != '-') {
- *p2 = *p;
- p2++;
- }
- p++;
- }
- text = buf;
- }
-
-
- tm.tm_isdst = -1;
-
- if(strlen(text) < 17) {
- return -1;
- }
-
- n = 1000;
- tm.tm_year = 0;
- for(i = 0; i < 4; i++) {
- tm.tm_year += (text[i]-'0')*n;
- n /= 10;
- }
- n = 10;
- tm.tm_mon = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_mon += (text[i+4]-'0')*n;
- n /= 10;
- }
- tm.tm_mon --;
-
- n = 10;
- tm.tm_mday = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_mday += (text[i+6]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_hour = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_hour += (text[i+9]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_min = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_min += (text[i+12]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_sec = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_sec += (text[i+15]-'0')*n;
- n /= 10;
- }
-
- tm.tm_year -= 1900;
-
- *value = mktime(&tm);
-
- return 0;
-
-}
-
-static int date_to_ISO8601 (time_t value, char *buf, int length) {
- struct tm *tm;
- tm = localtime(&value);
-#if 0 // TODO: soap seems to favor this method. xmlrpc the latter.
- return strftime (buf, length, "%Y-%m-%dT%H:%M:%SZ", tm);
-#else
- return strftime(buf, length, "%Y%m%dT%H:%M:%S", tm);
-#endif
-}
-
-/*-*******************
-* End Time Functions *
-*********************/
-
-
-/*-***************************
-* Begin XMLRPC_REQUEST funcs *
-*****************************/
-
-/****f* REQUEST/XMLRPC_RequestNew
- * NAME
- * XMLRPC_RequestNew
- * SYNOPSIS
- * XMLRPC_REQUEST XMLRPC_RequestNew()
- * FUNCTION
- * Creates a new XMLRPC_Request data struct
- * INPUTS
- * none
- * SEE ALSO
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-XMLRPC_REQUEST XMLRPC_RequestNew() {
- XMLRPC_REQUEST xRequest = calloc(1, sizeof(STRUCT_XMLRPC_REQUEST));
- if(xRequest) {
- simplestring_init(&xRequest->methodName);
- }
- return xRequest;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestFree
- * NAME
- * XMLRPC_RequestFree
- * SYNOPSIS
- * void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO)
- * FUNCTION
- * Free XMLRPC Request and all sub-values
- * INPUTS
- * request -- previously allocated request struct
- * bFreeIO -- 1 = also free request value data, if any, 0 = ignore.
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO) {
- if(request) {
- simplestring_free(&request->methodName);
-
- if(request->io && bFreeIO) {
- XMLRPC_CleanupValue(request->io);
- }
- if(request->error) {
- XMLRPC_CleanupValue(request->error);
- }
- my_free(request);
- }
-}
-
-/*******/
-
-/* Set Method Name to call */
-/****f* REQUEST/XMLRPC_RequestSetMethodName
- * NAME
- * XMLRPC_RequestSetMethodName
- * SYNOPSIS
- * const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName)
- * FUNCTION
- * Set name of method to call with this request.
- * INPUTS
- * request -- previously allocated request struct
- * methodName -- name of method
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetMethodName ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName) {
- if(request) {
- simplestring_clear(&request->methodName);
- simplestring_add(&request->methodName, methodName);
- return request->methodName.str;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetMethodName
- * NAME
- * XMLRPC_RequestGetMethodName
- * SYNOPSIS
- * const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request)
- * FUNCTION
- * Get name of method called by this request
- * INPUTS
- * request -- previously allocated request struct
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetMethodName ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request) {
- return request ? request->methodName.str : NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestSetRequestType
- * NAME
- * XMLRPC_RequestSetRequestType
- * SYNOPSIS
- * XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type)
- * FUNCTION
- * A request struct may be allocated by a caller or by xmlrpc
- * in response to a request. This allows setting the
- * request type.
- * INPUTS
- * request -- previously allocated request struct
- * type -- request type [xmlrpc_method_call | xmlrpc_method_response]
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetRequestType ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType (XMLRPC_REQUEST request,
- XMLRPC_REQUEST_TYPE type) {
- if(request) {
- request->request_type = type;
- return request->request_type;
- }
- return xmlrpc_request_none;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetRequestType
- * NAME
- * XMLRPC_RequestGetRequestType
- * SYNOPSIS
- * XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request)
- * FUNCTION
- * A request struct may be allocated by a caller or by xmlrpc
- * in response to a request. This allows setting the
- * request type.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * type -- request type [xmlrpc_method_call | xmlrpc_method_response]
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetRequestType ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request) {
- return request ? request->request_type : xmlrpc_request_none;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestSetData
- * NAME
- * XMLRPC_RequestSetData
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data)
- * FUNCTION
- * Associates a block of xmlrpc data with the request. The
- * data is *not* copied. A pointer is kept. The caller
- * should be careful not to doubly free the data value,
- * which may optionally be free'd by XMLRPC_RequestFree().
- * INPUTS
- * request -- previously allocated request struct
- * data -- previously allocated data struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetData ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data) {
- if(request && data) {
- if (request->io) {
- XMLRPC_CleanupValue (request->io);
- }
- request->io = XMLRPC_CopyValue(data);
- return request->io;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetData
- * NAME
- * XMLRPC_RequestGetData
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request)
- * FUNCTION
- * Returns data associated with request, if any.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetData ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request) {
- return request ? request->io : NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestSetError
- * NAME
- * XMLRPC_RequestSetError
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestSetError(XMLRPC_REQUEST request, XMLRPC_VALUE error)
- * FUNCTION
- * Associates a block of xmlrpc data, representing an error
- * condition, with the request.
- * INPUTS
- * request -- previously allocated request struct
- * error -- previously allocated error code or struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * NOTES
- * This is a private function for usage by internals only.
- * SEE ALSO
- * XMLRPC_RequestGetError ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestSetError (XMLRPC_REQUEST request, XMLRPC_VALUE error) {
- if (request && error) {
- if (request->error) {
- XMLRPC_CleanupValue (request->error);
- }
- request->error = XMLRPC_CopyValue (error);
- return request->error;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetError
- * NAME
- * XMLRPC_RequestGetError
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestGetError(XMLRPC_REQUEST request)
- * FUNCTION
- * Returns error data associated with request, if any.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_VALUE -- pointer to error value stored, or NULL
- * NOTES
- * This is a private function for usage by internals only.
- * SEE ALSO
- * XMLRPC_RequestSetError ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestGetError (XMLRPC_REQUEST request) {
- return request ? request->error : NULL;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestSetOutputOptions
- * NAME
- * XMLRPC_RequestSetOutputOptions
- * SYNOPSIS
- * XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output)
- * FUNCTION
- * Sets output options used for generating XML. The output struct
- * is copied, and may be freed by the caller.
- * INPUTS
- * request -- previously allocated request struct
- * output -- output options struct initialized by caller
- * RESULT
- * XMLRPC_REQUEST_OUTPUT_OPTIONS -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetOutputOptions ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * SOURCE
- */
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output) {
- if(request && output) {
- memcpy (&request->output, output,
- sizeof (STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS));
- return &request->output;
- }
- return NULL;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestGetOutputOptions
- * NAME
- * XMLRPC_RequestGetOutputOptions
- * SYNOPSIS
- * XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request)
- * FUNCTION
- * Gets a pointer to output options used for generating XML.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_REQUEST_OUTPUT_OPTIONS -- pointer to options stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetOutputOptions ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * SOURCE
- */
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request) {
- return request ? &request->output : NULL;
-}
-
-/*******/
-
-/*-*************************
-* End XMLRPC_REQUEST funcs *
-***************************/
-
-
-/*-***************************
-* Begin Serializiation funcs *
-*****************************/
-
-/****f* SERIALIZE/XMLRPC_VALUE_ToXML
- * NAME
- * XMLRPC_VALUE_ToXML
- * SYNOPSIS
- * char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val)
- * FUNCTION
- * encode XMLRPC_VALUE into XML buffer. Note that the generated
- * buffer will not contain a methodCall.
- * INPUTS
- * val -- previously allocated XMLRPC_VALUE
- * buf_len -- length of returned buffer, if not null
- * RESULT
- * char* -- newly allocated buffer containing XML.
- * It is the caller's responsibility to free it.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_VALUE_FromXML ()
- * XMLRPC_Free ()
- * XMLRPC_VALUE
- * SOURCE
- */
-char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len) {
- xml_element *root_elem = XMLRPC_VALUE_to_xml_element(val);
- char* pRet = NULL;
-
- if(root_elem) {
- pRet = xml_elem_serialize_to_string(root_elem, NULL, buf_len);
- xml_elem_free(root_elem);
- }
- return pRet;
-}
-
-/*******/
-
-/****f* SERIALIZE/XMLRPC_REQUEST_ToXML
- * NAME
- * XMLRPC_REQUEST_ToXML
- * SYNOPSIS
- * char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request)
- * FUNCTION
- * encode XMLRPC_REQUEST into XML buffer
- * INPUTS
- * request -- previously allocated XMLRPC_REQUEST
- * buf_len -- size of returned buf, if not null
- * RESULT
- * char* -- newly allocated buffer containing XML.
- * It is the caller's responsibility to free it.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_REQUEST_FromXML ()
- * XMLRPC_Free ()
- * XMLRPC_VALUE_ToXML ()
- * XMLRPC_REQUEST
- * SOURCE
- */
-char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int* buf_len) {
- char* pRet = NULL;
- if (request) {
- xml_element *root_elem = NULL;
- if (request->output.version == xmlrpc_version_simple) {
- root_elem = DANDARPC_REQUEST_to_xml_element (request);
- }
- else if (request->output.version == xmlrpc_version_1_0) {
- root_elem = XMLRPC_REQUEST_to_xml_element (request);
- }
- else if (request->output.version == xmlrpc_version_soap_1_1) {
- root_elem = SOAP_REQUEST_to_xml_element (request);
- }
-
- if(root_elem) {
- pRet =
- xml_elem_serialize_to_string (root_elem,
- &request->output.xml_elem_opts,
- buf_len);
- xml_elem_free(root_elem);
- }
- }
- return pRet;
-}
-
-/*******/
-
-/****f* SERIALIZE/XMLRPC_VALUE_FromXML
- * NAME
- * XMLRPC_VALUE_FromXML
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int le
- * FUNCTION
- * Retrieve XMLRPC_VALUE from XML buffer. Note that this will
- * ignore any methodCall. See XMLRPC_REQUEST_FromXML
- * INPUTS
- * in_buf -- character buffer containing XML
- * len -- length of buffer
- * RESULT
- * XMLRPC_VALUE -- newly allocated data, or NULL if error. Should
- * be free'd by caller.
- * SEE ALSO
- * XMLRPC_VALUE_ToXML ()
- * XMLRPC_REQUEST_FromXML ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VALUE_FromXML (const char *in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options) {
- XMLRPC_VALUE xResponse = NULL;
- XMLRPC_REQUEST req = XMLRPC_REQUEST_FromXML(in_buf, len, in_options);
-
- if(req) {
- xResponse = req->io;
- XMLRPC_RequestFree(req, 0);
- }
- return xResponse;
-}
-
-/*******/
-
-/* map parser errors to standard xml-rpc errors */
-static XMLRPC_VALUE map_expat_errors(XML_ELEM_ERROR error) {
- XMLRPC_VALUE xReturn = NULL;
- if(error) {
- XMLRPC_ERROR_CODE code;
- char buf[1024];
- snprintf(buf, sizeof(buf),
- "error occurred at line %i, column %i, byte index %i",
- error->line, error->column, error->byte_index);
-
- /* expat specific errors */
- switch(error->parser_code) {
- case XML_ERROR_UNKNOWN_ENCODING:
- code = xmlrpc_error_parse_unknown_encoding;
- break;
- case XML_ERROR_INCORRECT_ENCODING:
- code = xmlrpc_error_parse_bad_encoding;
- break;
- default:
- code = xmlrpc_error_parse_xml_syntax;
- break;
- }
- xReturn = XMLRPC_UtilityCreateFault(code, buf);
- }
- return xReturn;
-}
-
-/****f* SERIALIZE/XMLRPC_REQUEST_FromXML
- * NAME
- * XMLRPC_REQUEST_FromXML
- * SYNOPSIS
- * XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int le
- * FUNCTION
- * Retrieve XMLRPC_REQUEST from XML buffer
- * INPUTS
- * in_buf -- character buffer containing XML
- * len -- length of buffer
- * RESULT
- * XMLRPC_REQUEST -- newly allocated data, or NULL if error. Should
- * be free'd by caller.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_VALUE_FromXML ()
- * XMLRPC_REQUEST
- * SOURCE
- */
-XMLRPC_REQUEST XMLRPC_REQUEST_FromXML (const char *in_buf, int len,
- XMLRPC_REQUEST_INPUT_OPTIONS in_options) {
- XMLRPC_REQUEST request = XMLRPC_RequestNew();
- STRUCT_XML_ELEM_ERROR error = {0};
-
- if(request) {
- xml_element *root_elem =
- xml_elem_parse_buf (in_buf, len,
- (in_options ? &in_options->xml_elem_opts : NULL),
- &error);
-
- if(root_elem) {
- if(!strcmp(root_elem->name, "simpleRPC")) {
- request->output.version = xmlrpc_version_simple;
- xml_element_to_DANDARPC_REQUEST(request, root_elem);
- }
- else if (!strcmp (root_elem->name, "SOAP-ENV:Envelope")) {
- request->output.version = xmlrpc_version_soap_1_1;
- xml_element_to_SOAP_REQUEST (request, root_elem);
- }
- else {
- request->output.version = xmlrpc_version_1_0;
- xml_element_to_XMLRPC_REQUEST(request, root_elem);
- }
- xml_elem_free(root_elem);
- }
- else {
- if(error.parser_error) {
- XMLRPC_RequestSetError (request, map_expat_errors (&error));
- }
- }
- }
-
- return request;
-}
-
-/*******/
-
-/*-************************
-* End Serialization Funcs *
-**************************/
-
-
-
-/****f* VALUE/XMLRPC_CreateValueEmpty
- * NAME
- * XMLRPC_CreateValueEmpty
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueEmpty ()
- * FUNCTION
- * Create an XML value to be used/modified elsewhere.
- * INPUTS
- * RESULT
- * XMLRPC_VALUE. The new value, or NULL on failure.
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueEmpty() {
- XMLRPC_VALUE v = calloc(1, sizeof(STRUCT_XMLRPC_VALUE));
- if(v) {
-#ifdef XMLRPC_DEBUG_REFCOUNT
- printf ("calloc'd 0x%x\n", v);
-#endif
- v->type = xmlrpc_empty;
- simplestring_init(&v->id);
- simplestring_init(&v->str);
- }
- return v;
-}
-
-static const char* get_string(const char* buf, int bDup) {
- if(bDup) {
- return strdup(buf);
- }
- return buf;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueID_Case
- * NAME
- * XMLRPC_SetValueID_Case
- * SYNOPSIS
- * const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case)
- * FUNCTION
- * Assign an ID (key) to an XMLRPC value.
- * INPUTS
- * value The xml value who's ID we will set.
- * id The desired new id.
- * len length of id string if known, or 0 if unknown.
- * id_case one of XMLRPC_CASE
- * RESULT
- * const char* pointer to the newly allocated id string, or NULL
- * SEE ALSO
- * XMLRPC_SetValueID ()
- * XMLRPC_GetValueID ()
- * XMLRPC_VALUE
- * XMLRPC_CASE
- * SOURCE
- */
-const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case) {
- const char* pRetval = NULL;
- if(value) {
- if(id) {
- simplestring_clear(&value->id);
- (len > 0) ? simplestring_addn(&value->id, id, len) :
- simplestring_add(&value->id, id);
-
- /* upper or lower case string in place if required. could be a seperate func. */
- if(id_case == xmlrpc_case_lower || id_case == xmlrpc_case_upper) {
- int i;
- for(i = 0; i < value->id.len; i++) {
- value->id.str[i] =
- (id_case ==
- xmlrpc_case_lower) ? tolower (value->id.
- str[i]) : toupper (value->
- id.
- str[i]);
- }
- }
-
- pRetval = value->id.str;
-
-#ifdef XMLRPC_DEBUG_REFCOUNT
- printf("set value id: %s\n", pRetval);
-#endif
- }
- }
-
- return pRetval;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueString
- * NAME
- * XMLRPC_SetValueString
- * SYNOPSIS
- * const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* val, int len)
- * FUNCTION
- * Assign a string value to an XMLRPC_VALUE, and set it to type xmlrpc_string
- * INPUTS
- * value The xml value who's ID we will set.
- * val The desired new string val.
- * len length of val string if known, or 0 if unknown.
- * RESULT
- * const char* pointer to the newly allocated value string, or NULL
- * SEE ALSO
- * XMLRPC_GetValueString ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* val, int len) {
- char *pRetval = NULL;
- if(value && val) {
- simplestring_clear(&value->str);
- (len > 0) ? simplestring_addn(&value->str, val, len) :
- simplestring_add(&value->str, val);
- value->type = xmlrpc_string;
- pRetval = (char *)value->str.str;
- }
-
- return pRetval;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueInt
- * NAME
- * XMLRPC_SetValueInt
- * SYNOPSIS
- * void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val)
- * FUNCTION
- * Assign an int value to an XMLRPC_VALUE, and set it to type xmlrpc_int
- * INPUTS
- * value The xml value who's ID we will set.
- * val The desired new integer value
- * RESULT
- * SEE ALSO
- * XMLRPC_GetValueInt ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val) {
- if(value) {
- value->type = xmlrpc_int;
- value->i = val;
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueBoolean
- * NAME
- * XMLRPC_SetValueBoolean
- * SYNOPSIS
- * void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val)
- * FUNCTION
- * Assign a boolean value to an XMLRPC_VALUE, and set it to type xmlrpc_boolean
- * INPUTS
- * value The xml value who's value we will set.
- * val The desired new boolean value. [0 | 1]
- * RESULT
- * SEE ALSO
- * XMLRPC_GetValueBoolean ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val) {
- if(value) {
- value->type = xmlrpc_boolean;
- value->i = val ? 1 : 0;
- }
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_SetIsVector
- * NAME
- * XMLRPC_SetIsVector
- * SYNOPSIS
- * int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type)
- * FUNCTION
- * Set the XMLRPC_VALUE to be a vector (list) type. The vector may be one of
- * [xmlrpc_array | xmlrpc_struct | xmlrpc_mixed]. An array has only index values.
- * A struct has key/val pairs. Mixed allows both index and key/val combinations.
- * INPUTS
- * value The xml value who's vector type we will set
- * type New type of vector as enumerated by XMLRPC_VECTOR_TYPE
- * RESULT
- * int 1 if successful, 0 otherwise
- * SEE ALSO
- * XMLRPC_GetValueType ()
- * XMLRPC_GetVectorType ()
- * XMLRPC_VALUE
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type) {
- int bSuccess = 0;
-
- if (value) {
- // we can change the type so long as nothing is currently stored.
- if(value->type == xmlrpc_vector) {
- if(value->v) {
- if(!Q_Size(value->v->q)) {
- value->v->type = type;
- }
- }
- }
- else {
- value->v = calloc(1, sizeof(STRUCT_XMLRPC_VECTOR));
- if(value->v) {
- value->v->q = (queue*)malloc(sizeof(queue));
- if(value->v->q) {
- Q_Init(value->v->q);
- value->v->type = type;
- value->type = xmlrpc_vector;
- bSuccess = 1;
- }
- }
- }
- }
-
- return bSuccess;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_CreateVector
- * NAME
- * XMLRPC_CreateVector
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type)
- * FUNCTION
- * Create a new vector and optionally set an id.
- * INPUTS
- * id The id of the vector, or NULL
- * type New type of vector as enumerated by XMLRPC_VECTOR_TYPE
- * RESULT
- * XMLRPC_VALUE The new vector, or NULL on failure.
- * SEE ALSO
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_SetIsVector ()
- * XMLRPC_GetValueType ()
- * XMLRPC_GetVectorType ()
- * XMLRPC_VALUE
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type) {
- XMLRPC_VALUE val = NULL;
-
- val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_VECTOR *pSIV = NULL;
-
- if(XMLRPC_SetIsVector(val, type)) {
- if(id) {
- const char *pSVI = NULL;
-
- pSVI = XMLRPC_SetValueID(val, id, 0);
- if(NULL == pSVI) {
- val = NULL;
- }
- }
- }
- else {
- val = NULL;
- }
- }
- return val;
-}
-
-/*******/
-
-
-/* Not yet implemented.
- *
- * This should use a hash to determine if a given target id has already
- * been appended.
- *
- * Alternately, it could walk the entire vector, but that could be quite
- * slow for very large lists.
- */
-static int isDuplicateEntry(XMLRPC_VALUE target, XMLRPC_VALUE source) {
- return 0;
-}
-
-/****f* VECTOR/XMLRPC_AddValueToVector
- * NAME
- * XMLRPC_AddValueToVector
- * SYNOPSIS
- * int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source)
- * FUNCTION
- * Add (append) an existing XMLRPC_VALUE to a vector.
- * INPUTS
- * target The target vector
- * source The source value to append
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_AddValuesToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * NOTES
- * The function will fail and return 0 if an attempt is made to add
- * a value with an ID into a vector of type xmlrpc_vector_array. Such
- * values can only be added to xmlrpc_vector_struct.
- * SOURCE
- */
-int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source) {
- if(target && source) {
- if(target->type == xmlrpc_vector && target->v &&
- target->v->q && target->v->type != xmlrpc_vector_none) {
-
- /* guard against putting value of unknown type into vector */
- switch(source->type) {
- case xmlrpc_empty:
- case xmlrpc_base64:
- case xmlrpc_boolean:
- case xmlrpc_datetime:
- case xmlrpc_double:
- case xmlrpc_int:
- case xmlrpc_string:
- case xmlrpc_vector:
- /* Guard against putting a key/val pair into an array vector */
- if( !(source->id.len && target->v->type == xmlrpc_vector_array) ) {
- if (isDuplicateEntry (target, source)
- || Q_PushTail (target->v->q, XMLRPC_CopyValue (source))) {
- return 1;
- }
- }
- else {
- fprintf (stderr,
- "xmlrpc: attempted to add key/val pair to vector of type array\n");
- }
- break;
- default:
- fprintf (stderr,
- "xmlrpc: attempted to add value of unknown type to vector\n");
- break;
- }
- }
- }
- return 0;
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_AddValuesToVector
- * NAME
- * XMLRPC_AddValuesToVector
- * SYNOPSIS
- * XMLRPC_AddValuesToVector ( target, val1, val2, val3, val(n), 0 )
- * XMLRPC_AddValuesToVector( XMLRPC_VALUE, ... )
- * FUNCTION
- * Add (append) a series of existing XMLRPC_VALUE to a vector.
- * INPUTS
- * target The target vector
- * ... The source value(s) to append. The last item *must* be 0.
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_AddValuesToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * NOTES
- * This function may actually return failure after it has already modified
- * or added items to target. You can not trust the state of target
- * if this function returns failure.
- * SOURCE
- */
-int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...) {
- int iRetval = 0;
-
- if(target) {
- if(target->type == xmlrpc_vector) {
- XMLRPC_VALUE v = NULL;
- va_list vl;
-
- va_start(vl, target);
-
- do {
- v = va_arg(vl, XMLRPC_VALUE);
- if(v) {
- if(!XMLRPC_AddValueToVector(target, v)) {
- iRetval = 0;
- break;
- }
- }
- }
- while (v);
-
- va_end(vl);
-
- if(NULL == v) {
- iRetval = 1;
- }
- }
- }
- return iRetval;
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_VectorGetValueWithID_Case
- * NAME
- * XMLRPC_VectorGetValueWithID_Case
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case)
- * FUNCTION
- * Get value from vector matching id (key)
- * INPUTS
- * vector The source vector
- * id The key to find
- * id_case Rule for how to match key
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_SetValueID_Case ()
- * XMLRPC_VALUE
- * XMLRPC_CASE_COMPARISON
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case (XMLRPC_VALUE vector, const char *id,
- XMLRPC_CASE_COMPARISON id_case) {
- if(vector && vector->v && vector->v->q) {
- q_iter qi = Q_Iter_Head_F(vector->v->q);
-
- while(qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F(qi);
- if(xIter && xIter->id.str) {
- if(id_case == xmlrpc_case_sensitive) {
- if(!strcmp(xIter->id.str, id)) {
- return xIter;
- }
- }
- else if(id_case == xmlrpc_case_insensitive) {
- if(!strcasecmp(xIter->id.str, id)) {
- return xIter;
- }
- }
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return NULL;
-}
-
-/*******/
-
-
-int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value) {
- if(vector && vector->v && vector->v->q && value) {
- q_iter qi = Q_Iter_Head_F(vector->v->q);
-
- while(qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F(qi);
- if(xIter == value) {
- XMLRPC_CleanupValue(xIter);
- Q_Iter_Del(vector->v->q, qi);
- return 1;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return 0;
-}
-
-
-/****f* VALUE/XMLRPC_CreateValueString
- * NAME
- * XMLRPC_CreateValueString
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* val, int len)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign a string to it
- * INPUTS
- * id The id of the value, or NULL
- * val The desired new string val.
- * len length of val string if known, or 0 if unknown.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueString ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* val, int len) {
- XMLRPC_VALUE value = NULL;
- if(val) {
- value = XMLRPC_CreateValueEmpty();
- if(value) {
- XMLRPC_SetValueString(value, val, len);
- if(id) {
- XMLRPC_SetValueID(value, id, 0);
- }
- }
- }
- return value;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueInt
- * NAME
- * XMLRPC_CreateValueInt
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign an int to it
- * INPUTS
- * id The id of the value, or NULL
- * i The desired new int val.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueInt ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueInt(val, i);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueBoolean
- * NAME
- * XMLRPC_CreateValueBoolean
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int i)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign an int to it
- * INPUTS
- * id The id of the value, or NULL
- * i The desired new int val.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueBoolean ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int i) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueBoolean(val, i);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_CleanupValue
- * NAME
- * XMLRPC_CleanupValue
- * SYNOPSIS
- * void XMLRPC_CleanupValue(XMLRPC_VALUE value)
- * FUNCTION
- * Frees all memory allocated for an XMLRPC_VALUE and any of its children (if a vector)
- * INPUTS
- * value The id of the value to be cleaned up.
- * RESULT
- * void
- * NOTES
- * Normally this function will be called for the topmost vector, thus free-ing
- * all children. If a child of a vector is free'd first, results are undefined.
- * Failure to call this function *will* cause memory leaks.
- *
- * Also, this function is implemented using reference counting. Thus a value
- * may be added and freed from multiple parents so long as a reference is added
- * first using XMLRPC_CopyValue()
- * SEE ALSO
- * XMLRPC_RequestFree ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_CopyValue()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_CleanupValue(XMLRPC_VALUE value) {
- if(value) {
- if(value->iRefCount > 0) {
- value->iRefCount --;
- }
-
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf ("decremented refcount of %s, now %i\n", value->id.str,
- value->iRefCount);
- }
- else {
- printf ("decremented refcount of 0x%x, now %i\n", value,
- value->iRefCount);
- }
-#endif
-
- if(value->type == xmlrpc_vector) {
- if(value->v) {
- if(value->iRefCount == 0) {
- XMLRPC_VALUE cur = (XMLRPC_VALUE)Q_Head(value->v->q);
- while( cur ) {
- XMLRPC_CleanupValue(cur);
-
- /* Make sure some idiot didn't include a vector as a child of itself
- * and thus it would have already free'd these.
- */
- if(value->v && value->v->q) {
- cur = Q_Next(value->v->q);
- }
- else {
- break;
- }
- }
-
- Q_Destroy(value->v->q);
- my_free(value->v->q);
- my_free(value->v);
- }
- }
- }
-
-
- if(value->iRefCount == 0) {
-
- /* guard against freeing invalid types */
- switch(value->type) {
- case xmlrpc_empty:
- case xmlrpc_base64:
- case xmlrpc_boolean:
- case xmlrpc_datetime:
- case xmlrpc_double:
- case xmlrpc_int:
- case xmlrpc_string:
- case xmlrpc_vector:
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf("free'd %s\n", value->id.str);
- }
- else {
- printf("free'd 0x%x\n", value);
- }
-#endif
- simplestring_free(&value->id);
- simplestring_free(&value->str);
-
- memset(value, 0, sizeof(STRUCT_XMLRPC_VALUE));
- my_free(value);
- break;
- default:
- fprintf (stderr,
- "xmlrpc: attempted to free value of invalid type\n");
- break;
- }
- }
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueDateTime
- * NAME
- * XMLRPC_SetValueDateTime
- * SYNOPSIS
- * void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time)
- * FUNCTION
- * Assign time value to XMLRPC_VALUE
- * INPUTS
- * value The target XMLRPC_VALUE
- * time The desired new unix time value (time_t)
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_SetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time) {
- if(value) {
- char timeBuf[30];
- value->type = xmlrpc_datetime;
- value->i = time;
-
- timeBuf[0] = 0;
-
- date_to_ISO8601(time, timeBuf, sizeof(timeBuf));
-
- if(timeBuf[0]) {
- simplestring_clear(&value->str);
- simplestring_add(&value->str, timeBuf);
- }
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CopyValue
- * NAME
- * XMLRPC_CopyValue
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value)
- * FUNCTION
- * Make a copy (reference) of an XMLRPC_VALUE
- * INPUTS
- * value The target XMLRPC_VALUE
- * RESULT
- * XMLRPC_VALUE -- address of the copy
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_DupValueNew ()
- * NOTES
- * This function is implemented via reference counting, so the
- * returned value is going to be the same as the passed in value.
- * The value must be freed the same number of times it is copied
- * or there will be a memory leak.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value) {
- if(value) {
- value->iRefCount ++;
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf ("incremented refcount of %s, now %i\n", value->id.str,
- value->iRefCount);
- }
- else {
- printf ("incremented refcount of 0x%x, now %i\n", value,
- value->iRefCount);
- }
-#endif
- }
- return value;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_DupValueNew
- * NAME
- * XMLRPC_DupValueNew
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE value)
- * FUNCTION
- * Make a duplicate (non reference) of an XMLRPC_VALUE with newly allocated mem.
- * INPUTS
- * value The source XMLRPC_VALUE to duplicate
- * RESULT
- * XMLRPC_VALUE -- address of the duplicate value
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_CopyValue ()
- * NOTES
- * Use this when function when you need to modify the contents of
- * the copied value seperately from the original.
- *
- * this function is recursive, thus the value and all of its children
- * (if any) will be duplicated.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_DupValueNew (XMLRPC_VALUE xSource) {
- XMLRPC_VALUE xReturn = NULL;
- if (xSource) {
- xReturn = XMLRPC_CreateValueEmpty ();
- if (xSource->id.len) {
- XMLRPC_SetValueID (xReturn, xSource->id.str, xSource->id.len);
- }
-
- switch (xSource->type) {
- case xmlrpc_int:
- case xmlrpc_boolean:
- XMLRPC_SetValueInt (xReturn, xSource->i);
- break;
- case xmlrpc_string:
- case xmlrpc_base64:
- XMLRPC_SetValueString (xReturn, xSource->str.str, xSource->str.len);
- break;
- case xmlrpc_datetime:
- XMLRPC_SetValueDateTime (xReturn, xSource->i);
- break;
- case xmlrpc_double:
- XMLRPC_SetValueDouble (xReturn, xSource->d);
- break;
- case xmlrpc_vector:
- {
- q_iter qi = Q_Iter_Head_F (xSource->v->q);
- XMLRPC_SetIsVector (xReturn, xSource->v->type);
-
- while (qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F (qi);
- XMLRPC_AddValueToVector (xReturn, XMLRPC_DupValueNew (xIter));
- qi = Q_Iter_Next_F (qi);
- }
- }
- break;
- }
- }
- return xReturn;
-}
-
-/*******/
-
-
-
-/****f* VALUE/XMLRPC_CreateValueDateTime
- * NAME
- * XMLRPC_CreateValueDateTime
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time)
- * FUNCTION
- * Create new datetime value from time_t
- * INPUTS
- * id id of the new value, or NULL
- * time The desired unix time value (time_t)
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_SetValueDateTime ()
- * XMLRPC_CreateValueDateTime_ISO8601 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDateTime(val, time);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueDateTime_ISO8601
- * NAME
- * XMLRPC_SetValueDateTime_ISO8601
- * SYNOPSIS
- * void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s)
- * FUNCTION
- * Set datetime value from IS08601 encoded string
- * INPUTS
- * value The target XMLRPC_VALUE
- * s The desired new time value
- * RESULT
- * void
- * BUGS
- * This function currently attempts to convert the time string to a valid unix time
- * value before passing it. Behavior when the string is invalid or out of range
- * is not well defined, but will probably result in Jan 1, 1970 (0) being passed.
- * SEE ALSO
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s) {
- if(value) {
- time_t time_val = 0;
- if(s) {
- date_from_ISO8601(s, &time_val);
- XMLRPC_SetValueDateTime(value, time_val);
- }
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueDateTime_ISO8601
- * NAME
- * XMLRPC_CreateValueDateTime_ISO8601
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s)
- * FUNCTION
- * Create datetime value from IS08601 encoded string
- * INPUTS
- * id The id of the new value, or NULL
- * s The desired new time value
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL if no value created.
- * BUGS
- * See XMLRPC_SetValueDateTime_ISO8601 ()
- * SEE ALSO
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_SetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDateTime_ISO8601(val, s);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueBase64
- * NAME
- * XMLRPC_SetValueBase64
- * SYNOPSIS
- * void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len)
- * FUNCTION
- * Set base64 value. Base64 is useful for transferring binary data, such as an image.
- * INPUTS
- * value The target XMLRPC_VALUE
- * s The desired new binary value
- * len The length of s, or NULL. If buffer is not null terminated, len *must* be passed.
- * RESULT
- * void
- * NOTES
- * Data is set/stored/retrieved as passed in, but is base64 encoded for XML transfer, and
- * decoded on the other side. This is transparent to the caller.
- * SEE ALSO
- * XMLRPC_GetValueBase64 ()
- * XMLRPC_CreateValueBase64 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len) {
- if(value && s) {
- simplestring_clear(&value->str);
- (len > 0) ? simplestring_addn(&value->str, s, len) :
- simplestring_add(&value->str, s);
- value->type = xmlrpc_base64;
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_CreateValueBase64
- * NAME
- * XMLRPC_CreateValueBase64
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len)
- * FUNCTION
- * Create base64 value. Base64 is useful for transferring binary data, such as an image.
- * INPUTS
- * id id of the new value, or NULL
- * s The desired new binary value
- * len The length of s, or NULL. If buffer is not null terminated, len *must* be passed.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL if error
- * NOTES
- * See XMLRPC_SetValueBase64 ()
- * SEE ALSO
- * XMLRPC_GetValueBase64 ()
- * XMLRPC_SetValueBase64 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueBase64(val, s, len);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueDouble
- * NAME
- * XMLRPC_SetValueDouble
- * SYNOPSIS
- * void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val)
- * FUNCTION
- * Set double (floating point) value.
- * INPUTS
- * value The target XMLRPC_VALUE
- * val The desired new double value
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val) {
- if(value) {
- value->type = xmlrpc_double;
- value->d = val;
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueDouble
- * NAME
- * XMLRPC_CreateValueDouble
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d)
- * FUNCTION
- * Create double (floating point) value.
- * INPUTS
- * id id of the newly created value, or NULL
- * d The desired new double value
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDouble(val, d);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueString
- * NAME
- * XMLRPC_GetValueString
- * SYNOPSIS
- * const char* XMLRPC_GetValueString(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve string value
- * INPUTS
- * value source XMLRPC_VALUE of type xmlrpc_string
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_SetValueString ()
- * XMLRPC_GetValueType ()
- * XMLRPC_VALUE
- * SOURCE
- */
-const char* XMLRPC_GetValueString(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_string) ? value->str.str : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueStringLen
- * NAME
- * XMLRPC_GetValueStringLen
- * SYNOPSIS
- * int XMLRPC_GetValueStringLen(XMLRPC_VALUE value)
- * FUNCTION
- * determine length of string value
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_string
- * RESULT
- * length of string, or 0
- * NOTES
- * SEE ALSO
- * XMLRPC_SetValueString ()
- * XMLRPC_GetValueString ()
- * SOURCE
- */
-int XMLRPC_GetValueStringLen(XMLRPC_VALUE value) {
- return ((value) ? value->str.len : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueInt
- * NAME
- * XMLRPC_GetValueInt
- * SYNOPSIS
- * int XMLRPC_GetValueInt(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve integer value.
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_int
- * RESULT
- * integer value or 0 if value is not valid int
- * NOTES
- * use XMLRPC_GetValueType () to be sure if 0 is real return value or not
- * SEE ALSO
- * XMLRPC_SetValueInt ()
- * XMLRPC_CreateValueInt ()
- * SOURCE
- */
-int XMLRPC_GetValueInt(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_int) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueBoolean
- * NAME
- * XMLRPC_GetValueBoolean
- * SYNOPSIS
- * int XMLRPC_GetValueBoolean(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve boolean value.
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_boolean
- * RESULT
- * boolean value or 0 if value is not valid boolean
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueBoolean ()
- * XMLRPC_CreateValueBoolean ()
- * SOURCE
- */
-int XMLRPC_GetValueBoolean(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_boolean) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDouble
- * NAME
- * XMLRPC_GetValueDouble
- * SYNOPSIS
- * double XMLRPC_GetValueDouble(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve double value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_double
- * RESULT
- * double value or 0 if value is not valid double.
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * SOURCE
- */
-double XMLRPC_GetValueDouble(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_double) ? value->d : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueBase64
- * NAME
- * XMLRPC_GetValueBase64
- * SYNOPSIS
- * const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve binary value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_base64
- * RESULT
- * pointer to binary value or 0 if value is not valid.
- * SEE ALSO
- * XMLRPC_SetValueBase64 ()
- * XMLRPC_CreateValueBase64 ()
- * NOTES
- * Call XMLRPC_GetValueStringLen() to retrieve real length of binary data. strlen()
- * will not be accurate, as returned data may contain embedded nulls.
- * SOURCE
- */
-const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_base64) ? value->str.str : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDateTime
- * NAME
- * XMLRPC_GetValueDateTime
- * SYNOPSIS
- * time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve time_t value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_datetime
- * RESULT
- * time_t value or 0 if value is not valid datetime.
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueDateTime ()
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * SOURCE
- */
-time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value) {
- return (time_t)((value && value->type == xmlrpc_datetime) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDateTime_IOS8601
- * NAME
- * XMLRPC_GetValueDateTime_IOS8601
- * SYNOPSIS
- * const char* XMLRPC_GetValueDateTime_IOS8601(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve ISO8601 formatted time value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_datetime
- * RESULT
- * const char* value or 0 if value is not valid datetime.
- * SEE ALSO
- * XMLRPC_SetValueDateTime_IOS8601 ()
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_CreateValueDateTime_IOS8601 ()
- * SOURCE
- */
-const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_datetime) ? value->str.str : 0);
-}
-
-/*******/
-
-/* Get ID (key) of value or NULL */
-/****f* VALUE/XMLRPC_GetValueID
- * NAME
- * XMLRPC_GetValueID
- * SYNOPSIS
- * const char* XMLRPC_GetValueID(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve id (key) of value
- * INPUTS
- * XMLRPC_VALUE of any type
- * RESULT
- * const char* pointer to id of value, or NULL
- * NOTES
- * SEE ALSO
- * XMLRPC_SetValueID()
- * XMLRPC_CreateValueEmpty()
- * SOURCE
- */
-const char* XMLRPC_GetValueID(XMLRPC_VALUE value) {
- return (const char*)((value && value->id.len) ? value->id.str : 0);
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_VectorSize
- * NAME
- * XMLRPC_VectorSize
- * SYNOPSIS
- * int XMLRPC_VectorSize(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve size of vector
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * count of items in vector
- * NOTES
- * This is a cheap operation even on large vectors. Vector size is
- * maintained by queue during add/remove ops.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * SOURCE
- */
-int XMLRPC_VectorSize(XMLRPC_VALUE value) {
- int size = 0;
- if(value && value->type == xmlrpc_vector && value->v) {
- size = Q_Size(value->v->q);
- }
- return size;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_VectorRewind
- * NAME
- * XMLRPC_VectorRewind
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value)
- * FUNCTION
- * reset vector to first item
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * first XMLRPC_VALUE in list, or NULL if empty or error.
- * NOTES
- * Be careful to rewind any vector passed in to you if you expect to
- * iterate through the entire list.
- * SEE ALSO
- * XMLRPC_VectorNext ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value) {
- XMLRPC_VALUE xReturn = NULL;
- if(value && value->type == xmlrpc_vector && value->v) {
- xReturn = (XMLRPC_VALUE)Q_Head(value->v->q);
- }
- return xReturn;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_VectorNext
- * NAME
- * XMLRPC_VectorNext
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value)
- * FUNCTION
- * Iterate vector to next item in list.
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * Next XMLRPC_VALUE in vector, or NULL if at end.
- * NOTES
- * SEE ALSO
- * XMLRPC_VectorRewind ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value) {
- XMLRPC_VALUE xReturn = NULL;
- if(value && value->type == xmlrpc_vector && value->v) {
- xReturn = (XMLRPC_VALUE)Q_Next(value->v->q);
- }
- return xReturn;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueType
- * NAME
- * XMLRPC_GetValueType
- * SYNOPSIS
- * XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE value)
- * FUNCTION
- * determine data type of the XMLRPC_VALUE
- * INPUTS
- * XMLRPC_VALUE target of query
- * RESULT
- * data type of value as enumerated by XMLRPC_VALUE_TYPE
- * NOTES
- * all values are of type xmlrpc_empty until set.
- * Deprecated for public use. See XMLRPC_GetValueTypeEasy
- * SEE ALSO
- * XMLRPC_SetValue*
- * XMLRPC_CreateValue*
- * XMLRPC_Append*
- * XMLRPC_GetValueTypeEasy ()
- * SOURCE
- */
-XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE value) {
- return value ? value->type : xmlrpc_empty;
-}
-
-/*******/
-
-/* Vector type accessor */
-/****f* VALUE/XMLRPC_GetVectorType
- * NAME
- * XMLRPC_GetVectorType
- * SYNOPSIS
- * XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE value)
- * FUNCTION
- * determine vector type of the XMLRPC_VALUE
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * vector type of value as enumerated by XMLRPC_VECTOR_TYPE.
- * xmlrpc_none if not a value.
- * NOTES
- * xmlrpc_none is returned if value is not a vector
- * Deprecated for public use. See XMLRPC_GetValueTypeEasy
- * SEE ALSO
- * XMLRPC_SetIsVector ()
- * XMLRPC_GetValueType ()
- * XMLRPC_GetValueTypeEasy ()
- * SOURCE
- */
-XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE value) {
- return(value && value->v) ? value->v->type : xmlrpc_none;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueTypeEasy
- * NAME
- * XMLRPC_GetValueTypeEasy
- * SYNOPSIS
- * XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE value)
- * FUNCTION
- * determine data type of the XMLRPC_VALUE. includes vector types.
- * INPUTS
- * XMLRPC_VALUE target of query
- * RESULT
- * data type of value as enumerated by XMLRPC_VALUE_TYPE_EASY
- * xmlrpc_type_none if not a value.
- * NOTES
- * all values are of type xmlrpc_type_empty until set.
- * SEE ALSO
- * XMLRPC_SetValue*
- * XMLRPC_CreateValue*
- * XMLRPC_Append*
- * SOURCE
- */
-XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy (XMLRPC_VALUE value) {
- if (value) {
- switch (value->type) {
- case xmlrpc_vector:
- switch (value->v->type) {
- case xmlrpc_vector_none:
- return xmlrpc_type_none;
- case xmlrpc_vector_struct:
- return xmlrpc_type_struct;
- case xmlrpc_vector_mixed:
- return xmlrpc_type_mixed;
- case xmlrpc_vector_array:
- return xmlrpc_type_array;
- }
- default:
- /* evil cast, but we know they are the same */
- return(XMLRPC_VALUE_TYPE_EASY) value->type;
- }
- }
- return xmlrpc_none;
-}
-
-/*******/
-
-
-
-/*-*******************
-* Begin Server Funcs *
-*********************/
-
-
-/****f* VALUE/XMLRPC_ServerCreate
- * NAME
- * XMLRPC_ServerCreate
- * SYNOPSIS
- * XMLRPC_SERVER XMLRPC_ServerCreate()
- * FUNCTION
- * Allocate/Init XMLRPC Server Resources.
- * INPUTS
- * none
- * RESULT
- * newly allocated XMLRPC_SERVER
- * NOTES
- * SEE ALSO
- * XMLRPC_ServerDestroy ()
- * XMLRPC_GetGlobalServer ()
- * SOURCE
- */
-XMLRPC_SERVER XMLRPC_ServerCreate() {
- XMLRPC_SERVER server = calloc(1, sizeof(STRUCT_XMLRPC_SERVER));
- if(server) {
- Q_Init(&server->methodlist);
- Q_Init(&server->docslist);
-
- /* register system methods */
- xsm_register(server);
- }
- return server;
-}
-
-/*******/
-
-/* Return global server. Not locking! Not Thread Safe! */
-/****f* VALUE/XMLRPC_GetGlobalServer
- * NAME
- * XMLRPC_GetGlobalServer
- * SYNOPSIS
- * XMLRPC_SERVER XMLRPC_GetGlobalServer()
- * FUNCTION
- * Allocates a global (process-wide) server, or returns pointer if pre-existing.
- * INPUTS
- * none
- * RESULT
- * pointer to global server, or 0 if error.
- * NOTES
- * ***WARNING*** This function is not thread safe. It is included only for the very lazy.
- * Multi-threaded programs that use this may experience problems.
- * BUGS
- * There is currently no way to cleanup the global server gracefully.
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * SOURCE
- */
-XMLRPC_SERVER XMLRPC_GetGlobalServer() {
- static XMLRPC_SERVER xsServer = 0;
- if(!xsServer) {
- xsServer = XMLRPC_ServerCreate();
- }
- return xsServer;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_ServerDestroy
- * NAME
- * XMLRPC_ServerDestroy
- * SYNOPSIS
- * void XMLRPC_ServerDestroy(XMLRPC_SERVER server)
- * FUNCTION
- * Free Server Resources
- * INPUTS
- * server The server to be free'd
- * RESULT
- * void
- * NOTES
- * This frees the server struct and any methods that have been added.
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * SOURCE
- */
-void XMLRPC_ServerDestroy(XMLRPC_SERVER server) {
- if(server) {
- doc_method* dm = Q_Head(&server->docslist);
- server_method* sm = Q_Head(&server->methodlist);
- while( dm ) {
- my_free(dm);
- dm = Q_Next(&server->docslist);
- }
- while( sm ) {
- if(sm->name) {
- my_free(sm->name);
- }
- if(sm->desc) {
- XMLRPC_CleanupValue(sm->desc);
- }
- my_free(sm);
- sm = Q_Next(&server->methodlist);
- }
- if(server->xIntrospection) {
- XMLRPC_CleanupValue(server->xIntrospection);
- }
-
- Q_Destroy(&server->methodlist);
- Q_Destroy(&server->docslist);
- my_free(server);
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_ServerRegisterMethod
- * NAME
- * XMLRPC_ServerRegisterMethod
- * SYNOPSIS
- * void XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb)
- * FUNCTION
- * Register new XMLRPC method with server
- * INPUTS
- * server The XMLRPC_SERVER to register the method with
- * name public name of the method
- * cb C function that implements the method
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * A C function must be registered for every "method" that the server recognizes. The
- * method name is equivalent to <methodCall><name> method name </name></methodCall> in the
- * XML syntax.
- * SEE ALSO
- * XMLRPC_ServerFindMethod ()
- * XMLRPC_ServerCallMethod ()
- * SOURCE
- */
-int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb) {
- if(server && name && cb) {
-
- server_method* sm = malloc(sizeof(server_method));
-
- if(sm) {
- sm->name = strdup(name);
- sm->method = cb;
- sm->desc = NULL;
-
- return Q_PushTail(&server->methodlist, sm);
- }
- }
- return 0;
-}
-
-/*******/
-
-inline server_method* find_method(XMLRPC_SERVER server, const char* name) {
- server_method* sm;
-
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
-
- while( qi ) {
- sm = Q_Iter_Get_F(qi);
- if(sm && !strcmp(sm->name, name)) {
- return sm;
- }
- qi = Q_Iter_Next_F(qi);
- }
- return NULL;
-}
-
-
-const char* type_to_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype) {
- switch(type) {
- case xmlrpc_none:
- return "none";
- case xmlrpc_empty:
- return "empty";
- case xmlrpc_base64:
- return "base64";
- case xmlrpc_boolean:
- return "boolean";
- case xmlrpc_datetime:
- return "datetime";
- case xmlrpc_double:
- return "double";
- case xmlrpc_int:
- return "int";
- case xmlrpc_string:
- return "string";
- case xmlrpc_vector:
- switch(vtype) {
- case xmlrpc_vector_none:
- return "none";
- case xmlrpc_vector_array:
- return "array";
- case xmlrpc_vector_mixed:
- return "mixed vector (struct)";
- case xmlrpc_vector_struct:
- return "struct";
- }
- }
-}
-
-/****f* VALUE/XMLRPC_ServerFindMethod
- * NAME
- * XMLRPC_ServerFindMethod
- * SYNOPSIS
- * XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName)
- * FUNCTION
- * retrieve C callback associated with a given method name.
- * INPUTS
- * server The XMLRPC_SERVER the method is registered with
- * callName the method to find
- * RESULT
- * previously registered XMLRPC_Callback, or NULL
- * NOTES
- * Typically, this is used to determine if a requested method exists, without actually calling it.
- * SEE ALSO
- * XMLRPC_ServerCallMethod ()
- * XMLRPC_ServerRegisterMethod ()
- * SOURCE
- */
-XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName) {
- if(server && callName) {
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm && !strcmp(sm->name, callName)) {
- return sm->method;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return NULL;
-}
-
-/*******/
-
-
-/* Call method specified in request */
-/****f* VALUE/XMLRPC_ServerCallMethod
- * NAME
- * XMLRPC_ServerCallMethod
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData)
- * FUNCTION
- *
- * INPUTS
- * server The XMLRPC_SERVER the method is registered with
- * request the request to handle
- * userData any additional data to pass to the C callback, or NULL
- * RESULT
- * XMLRPC_VALUE allocated by the callback, or NULL
- * NOTES
- * It is typically the caller's responsibility to free the returned value.
- *
- * Often the caller will want to serialize the result as XML, via
- * XMLRPC_VALUE_To_XML () or XMLRPC_REQUEST_To_XML ()
- * SEE ALSO
- * XMLRPC_ServerFindMethod ()
- * XMLRPC_ServerRegisterMethod ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData) {
- XMLRPC_VALUE xReturn = NULL;
-
- /* check for error set during request parsing / generation */
- if(request && request->error) {
- xReturn = XMLRPC_CopyValue(request->error);
- }
- else if (server && request) {
- XMLRPC_Callback cb =
- XMLRPC_ServerFindMethod (server, request->methodName.str);
- if(cb) {
- xReturn = cb(server, request, userData);
- }
- else {
- xReturn =
- XMLRPC_UtilityCreateFault (xmlrpc_error_unknown_method,
- request->methodName.str);
- }
- }
- return xReturn;
-}
-
-/*******/
-
-/*-*****************
-* End server funcs *
-*******************/
-
-
-/*-***********************************
-* Begin XMLRPC General Options funcs *
-*************************************/
-
-/* For options used by XMLRPC_VALUE funcs that otherwise do not have
- * parameters for options. Kind of gross. :(
- */
-typedef struct _xmlrpc_options {
- XMLRPC_CASE id_case;
- XMLRPC_CASE_COMPARISON id_case_compare;
-}
-STRUCT_XMLRPC_OPTIONS, *XMLRPC_OPTIONS;
-
-static XMLRPC_OPTIONS XMLRPC_GetDefaultOptions() {
- static STRUCT_XMLRPC_OPTIONS options = {
- xmlrpc_case_exact,
- xmlrpc_case_sensitive
- };
- return &options;
-}
-
-/****f* VALUE/XMLRPC_GetDefaultIdCase
- * NAME
- * XMLRPC_GetDefaultIdCase
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_GetDefaultIdCase()
- * FUNCTION
- * Gets default case options used by XMLRPC_VALUE funcs
- * INPUTS
- * none
- * RESULT
- * XMLRPC_CASE
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_SetDefaultIdCase ()
- * SOURCE
- */
-XMLRPC_CASE XMLRPC_GetDefaultIdCase() {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- return options->id_case;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetDefaultIdCase
- * NAME
- * XMLRPC_SetDefaultIdCase
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case)
- * FUNCTION
- * Sets default case options used by XMLRPC_VALUE funcs
- * INPUTS
- * id_case case options as enumerated by XMLRPC_CASE
- * RESULT
- * XMLRPC_CASE -- newly set option
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_GetDefaultIdCase ()
- * SOURCE
- */
-XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case) {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- options->id_case = id_case;
- return options->id_case;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetDefaultIdCaseComparison
- * NAME
- * XMLRPC_GetDefaultIdCaseComparison
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_GetDefaultIdCaseComparison( )
- * FUNCTION
- * Gets default case comparison options used by XMLRPC_VALUE funcs
- * INPUTS
- * none
- * RESULT
- * XMLRPC_CASE_COMPARISON default
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_SetDefaultIdCaseComparison ()
- * SOURCE
- */
-XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison() {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- return options->id_case_compare;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetDefaultIdCaseComparison
- * NAME
- * XMLRPC_SetDefaultIdCaseComparison
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_SetDefaultIdCaseComparison( XMLRPC_CASE_COMPARISON id_case_compare )
- * FUNCTION
- * Gets default case comparison options used by XMLRPC_VALUE funcs
- * INPUTS
- * id_case_compare case comparison rule to set as default
- * RESULT
- * XMLRPC_CASE_COMPARISON newly set default
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_GetDefaultIdCaseComparison ()
- * SOURCE
- */
-XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case_compare) {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- options->id_case_compare = id_case_compare;
- return options->id_case_compare;
-}
-
-/*******/
-
-/*-*********************************
-* End XMLRPC General Options funcs *
-***********************************/
-
-
-/*-******************
-* Utility API funcs *
-********************/
-
-/****f* UTILITY/XMLRPC_UtilityCreateFault
- * NAME
- * XMLRPC_UtilityCreateFault
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_UtilityCreateFault( int fault_code, const char* fault_string )
- * FUNCTION
- * generates a struct containing a string member with id "faultString" and an int member
- * with id "faultCode". When using the xmlrpc xml serialization, these will be translated
- * to <fault><value><struct>... format.
- * INPUTS
- * fault_code application specific error code. can be 0.
- * fault_string application specific error string. cannot be null.
- * RESULT
- * XMLRPC_VALUE a newly created struct vector representing the error, or null on error.
- * NOTES
- * This is a utility function. xmlrpc "faults" are not directly represented in this xmlrpc
- * API or data structures. It is the author's view, that this API is intended for simple
- * data types, and a "fault" is a complex data type consisting of multiple simple data
- * types. This function is provided for convenience only, the same result could be
- * achieved directly by the application.
- *
- * This function now supports some "standardized" fault codes, as specified at.
- * http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php.
- * If one of these fault codes is received, the description string will automatically
- * be prefixed with a standard error string and 2 newlines.
- *
- * The actual transformation between this complex type and the xml "<fault>" element takes
- * place in the xmlrpc to xml serialization layer. This step is not performed when using the
- * simplerpc serialization, meaning that there will be no "<fault>" element in that
- * serialization. There will simply be a standard struct with 2 child elements.
- * imho, the "<fault>" element is unnecessary and/or out of place as part of the standard API.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string) {
- XMLRPC_VALUE xOutput = NULL;
-
- char* string = NULL;
- simplestring description;
- simplestring_init(&description);
-
- switch (fault_code) {
- case xmlrpc_error_parse_xml_syntax:
- string = xmlrpc_error_parse_xml_syntax_str;
- break;
- case xmlrpc_error_parse_unknown_encoding:
- string = xmlrpc_error_parse_unknown_encoding_str;
- break;
- case xmlrpc_error_parse_bad_encoding:
- string = xmlrpc_error_parse_bad_encoding_str;
- break;
- case xmlrpc_error_invalid_xmlrpc:
- string = xmlrpc_error_invalid_xmlrpc_str;
- break;
- case xmlrpc_error_unknown_method:
- string = xmlrpc_error_unknown_method_str;
- break;
- case xmlrpc_error_invalid_params:
- string = xmlrpc_error_invalid_params_str;
- break;
- case xmlrpc_error_internal_server:
- string = xmlrpc_error_internal_server_str;
- break;
- case xmlrpc_error_application:
- string = xmlrpc_error_application_str;
- break;
- case xmlrpc_error_system:
- string = xmlrpc_error_system_str;
- break;
- case xmlrpc_error_transport:
- string = xmlrpc_error_transport_str;
- break;
- }
-
- simplestring_add(&description, string);
-
- if(string && fault_string) {
- simplestring_add(&description, "\n\n");
- }
- simplestring_add(&description, fault_string);
-
-
- if(description.len) {
- xOutput = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
-
- XMLRPC_VectorAppendString (xOutput, "faultString", description.str,
- description.len);
- XMLRPC_VectorAppendInt(xOutput, "faultCode", fault_code);
- }
-
- simplestring_free(&description);
-
- return xOutput;
-}
-
-/*******/
-
-
-/****f* UTILITY/XMLRPC_Free
- * NAME
- * XMLRPC_Free
- * SYNOPSIS
- * void XMLRPC_Free(void* mem)
- * FUNCTION
- * frees a block of memory allocated by xmlrpc.
- * INPUTS
- * mem memory to free
- * RESULT
- * void
- * NOTES
- * Useful for OS's where memory must be free'd
- * in the same library in which it is allocated.
- * SOURCE
- */
-void XMLRPC_Free(void* mem) {
- my_free(mem);
-}
-
-/*******/
-
-
-/****f* UTILITY/XMLRPC_GetVersionString
- * NAME
- * XMLRPC_GetVersionString
- * SYNOPSIS
- * const char* XMLRPC_GetVersionString()
- * FUNCTION
- * returns library version string
- * INPUTS
- *
- * RESULT
- * const char*
- * NOTES
- * SOURCE
- */
-const char* XMLRPC_GetVersionString() {
- return XMLRPC_VERSION_STR;
-}
-
-/*******/
-
-
-/*-**********************
-* End Utility API funcs *
-************************/
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.h b/ext/xmlrpc/libxmlrpc/xmlrpc.h
deleted file mode 100644
index bcfa46fadc..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef XMLRPC_ALREADY_INCLUDED
-#define XMLRPC_ALREADY_INCLUDED 1
-
-/* includes */
-#include "xml_element.h"
-#include <time.h> /* for time_t */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* allow version to be specified via compile line define */
-#ifndef XMLRPC_LIB_VERSION
- #define XMLRPC_LIB_VERSION "0.50"
-#endif
-
-/* this number, representing the date, must be increased each time the API changes */
-#define XMLRPC_API_NO 20010721
-
-/* this string should be changed with each packaged release */
-#define XMLRPC_VERSION_STR "xmlrpc-epi v. " XMLRPC_LIB_VERSION
-
-/* where to find more info. shouldn't need to change much */
-#define XMLRPC_HOME_PAGE_STR "http://xmlprc-epi.sourceforge.net/"
-
-
-/****d* VALUE/XMLRPC_VALUE_TYPE
- * NAME
- * XMLRPC_VALUE_TYPE
- * NOTES
- * Defines data types for XMLRPC_VALUE
- * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
- * SEE ALSO
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VALUE_TYPE {
- xmlrpc_none, /* not a value */
- xmlrpc_empty, /* empty value, eg NULL */
- xmlrpc_base64, /* base64 value, eg binary data */
- xmlrpc_boolean, /* boolean [0 | 1] */
- xmlrpc_datetime, /* datetime [ISO8601 | time_t] */
- xmlrpc_double, /* double / floating point */
- xmlrpc_int, /* integer */
- xmlrpc_string, /* string */
- xmlrpc_vector /* vector, aka list, array */
-} XMLRPC_VALUE_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_VECTOR_TYPE
- * NAME
- * XMLRPC_VECTOR_TYPE
- * NOTES
- * Defines data types for XMLRPC_VECTOR.
- * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
- * SEE ALSO
- * XMLRPC_VALUE_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VECTOR_TYPE {
- xmlrpc_vector_none, /* not an array */
- xmlrpc_vector_array, /* no values may have key names */
- xmlrpc_vector_mixed, /* some values may have key names */
- xmlrpc_vector_struct /* all values must have key names */
-} XMLRPC_VECTOR_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_VALUE_TYPE_EASY
- * NAME
- * XMLRPC_VALUE_TYPE_EASY
- * NOTES
- * Defines data types for XMLRPC_VALUE, including vector types.
- * SEE ALSO
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VALUE_TYPE_EASY {
- xmlrpc_type_none, /* not a value */
- xmlrpc_type_empty, /* empty value, eg NULL */
- xmlrpc_type_base64, /* base64 value, eg binary data */
- xmlrpc_type_boolean, /* boolean [0 | 1] */
- xmlrpc_type_datetime, /* datetime [ISO8601 | time_t] */
- xmlrpc_type_double, /* double / floating point */
- xmlrpc_type_int, /* integer */
- xmlrpc_type_string, /* string */
-/* -- IMPORTANT: identical to XMLRPC_VALUE_TYPE to this point. -- */
- xmlrpc_type_array, /* vector array */
- xmlrpc_type_mixed, /* vector mixed */
- xmlrpc_type_struct /* vector struct */
-} XMLRPC_VALUE_TYPE_EASY;
-/*******/
-
-
-/****d* VALUE/XMLRPC_REQUEST_TYPE
- * NAME
- * XMLRPC_REQUEST_TYPE
- * NOTES
- * Defines data types for XMLRPC_REQUEST
- * SEE ALSO
- * XMLRPC_VALUE_TYPE
- * XMLRPC_VECTOR_TYPE
- * SOURCE
- */
-typedef enum _xmlrpc_request_type {
- xmlrpc_request_none, /* not a valid request */
- xmlrpc_request_call, /* calling/invoking a method */
- xmlrpc_request_response, /* responding to a method call */
-} XMLRPC_REQUEST_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_ERROR_CODE
- * NAME
- * XMLRPC_ERROR_CODE
- * NOTES
- * All existing error codes
- * SEE ALSO
- * XMLRPC_REQUEST_ERROR
- * SOURCE
- */
-typedef enum _xmlrpc_error_code {
- xmlrpc_error_none = 0, /* not an error */
- xmlrpc_error_parse_xml_syntax = -32700,
- xmlrpc_error_parse_unknown_encoding = -32701,
- xmlrpc_error_parse_bad_encoding = -32702,
- xmlrpc_error_invalid_xmlrpc = -32600,
- xmlrpc_error_unknown_method = -32601,
- xmlrpc_error_invalid_params = -32602,
- xmlrpc_error_internal_server = -32603,
- xmlrpc_error_application = -32500,
- xmlrpc_error_system = -32400,
- xmlrpc_error_transport = -32300
-} XMLRPC_ERROR_CODE;
-/******/
-
-#define xmlrpc_error_parse_xml_syntax_str "parse error. not well formed."
-#define xmlrpc_error_parse_unknown_encoding_str "parse error. unknown encoding"
-#define xmlrpc_error_parse_bad_encoding_str "parse error. invalid character for encoding"
-#define xmlrpc_error_invalid_xmlrpc_str "server error. xml-rpc not conforming to spec"
-#define xmlrpc_error_unknown_method_str "server error. method not found."
-#define xmlrpc_error_invalid_params_str "server error. invalid method parameters"
-#define xmlrpc_error_internal_server_str "server error. internal xmlrpc library error"
-#define xmlrpc_error_application_str "application error."
-#define xmlrpc_error_system_str "system error."
-#define xmlrpc_error_transport_str "transport error."
-
-
-
-/****d* VALUE/XMLRPC_VERSION
- * NAME
- * XMLRPC_VERSION
- * NOTES
- * Defines xml vocabulary used for generated xml
- * SEE ALSO
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * XMLRPC_REQUEST_To_XML ()
- * SOURCE
- */
-typedef enum _xmlrpc_version {
- xmlrpc_version_none, /* not a recognized vocabulary */
- xmlrpc_version_1_0, /* xmlrpc 1.0 standard vocab */
- xmlrpc_version_simple = 2, /* alt more readable vocab */
- xmlrpc_version_danda = 2, /* same as simple. legacy */
- xmlrpc_version_soap_1_1 = 3 /* SOAP. version 1.1 */
-} XMLRPC_VERSION;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST_OUTPUT_OPTIONS
- * NAME
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * NOTES
- * Defines output options for generated xml
- * SEE ALSO
- * XMLRPC_VERSION
- * XML_ELEM_OUTPUT_OPTIONS
- * XMLRPC_REQUEST_To_XML ()
- * SOURCE
- */
-typedef struct _xmlrpc_request_output_options {
- STRUCT_XML_ELEM_OUTPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
- XMLRPC_VERSION version; /* xml vocabulary to use */
-} STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS, *XMLRPC_REQUEST_OUTPUT_OPTIONS;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST_INPUT_OPTIONS
- * NAME
- * XMLRPC_REQUEST_INPUT_OPTIONS
- * NOTES
- * Defines options for reading in xml data
- * SEE ALSO
- * XMLRPC_VERSION
- * XML_ELEM_INPUT_OPTIONS
- * XMLRPC_REQUEST_From_XML ()
- * SOURCE
- */
-typedef struct _xmlrpc_request_input_options {
- STRUCT_XML_ELEM_INPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
-} STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS, *XMLRPC_REQUEST_INPUT_OPTIONS;
-/******/
-
-/****s* VALUE/XMLRPC_ERROR
- * NAME
- * XMLRPC_ERROR
- * NOTES
- * For the reporting and handling of errors
- * SOURCE
- */
-typedef struct _xmlrpc_error {
- XMLRPC_ERROR_CODE code;
- STRUCT_XML_ELEM_ERROR xml_elem_error; /* xml_element errors (parser errors) */
-} STRUCT_XMLRPC_ERROR, *XMLRPC_ERROR;
-/******/
-
-
-/****d* VALUE/XMLRPC_CASE_COMPARISON
- * NAME
- * XMLRPC_CASE_COMPARISON
- * NOTES
- * Defines case comparison options for XMLRPC_VALUE/VECTOR API's
- * SEE ALSO
- * XMLRPC_CASE
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef enum _xmlrpc_case_comparison {
- xmlrpc_case_insensitive, /* use case-insensitive compare */
- xmlrpc_case_sensitive /* use case-sensitive compare */
-} XMLRPC_CASE_COMPARISON;
-/******/
-
-/****d* VALUE/XMLRPC_CASE
- * NAME
- * XMLRPC_CASE
- * NOTES
- * Defines case behavior when setting IDs in XMLRPC_VALUE API's
- * SEE ALSO
- * XMLRPC_CASE_COMPARISON
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef enum _xmlrpc_case {
- xmlrpc_case_exact, /* leave case alone */
- xmlrpc_case_lower, /* lower-case id */
- xmlrpc_case_upper /* upper-case id */
-} XMLRPC_CASE;
-/******/
-
-/* if you don't like these defaults, you can set them with XMLRPC_SetDefaultIdCase*() */
-#define XMLRPC_DEFAULT_ID_CASE XMLRPC_GetDefaultIdCase()
-#define XMLRPC_DEFAULT_ID_CASE_SENSITIVITY XMLRPC_GetDefaultIdCaseComparison()
-
-/* opaque (non-public) types. defined locally in xmlrpc.c */
-typedef struct _xmlrpc_request* XMLRPC_REQUEST;
-typedef struct _xmlrpc_server* XMLRPC_SERVER;
-typedef struct _xmlrpc_value* XMLRPC_VALUE;
-
-/****d* VALUE/XMLRPC_Callback
- * NAME
- * XMLRPC_Callback
- * NOTES
- * Function prototype for user defined method handlers (callbacks).
- * SEE ALSO
- * XMLRPC_ServerRegisterMethod ()
- * XMLRPC_ServerCallMethod ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef XMLRPC_VALUE (*XMLRPC_Callback)(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-/******/
-
-/* ID Case Defaults */
-XMLRPC_CASE XMLRPC_GetDefaultIdCase(void);
-XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case);
-XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison(void);
-XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case);
-
-/* Vector manipulation */
-int XMLRPC_VectorSize(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value);
-int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type);
-int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source);
-int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...);
-int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case);
-
-
-/* Create values */
-XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int truth);
-XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len);
-XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time);
-XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s);
-XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double f);
-XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i);
-XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* s, int len);
-XMLRPC_VALUE XMLRPC_CreateValueEmpty(void);
-XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type);
-
-/* Cleanup values */
-void XMLRPC_CleanupValue(XMLRPC_VALUE value);
-
-/* Copy values */
-XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE xSource);
-
-/* Set Values */
-void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time);
-void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s);
-void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val);
-void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val);
-void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val);
-const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* s, int len);
-void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len);
-const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case);
-#define XMLRPC_SetValueID(value, id, len) XMLRPC_SetValueID_Case(value, id, len, XMLRPC_DEFAULT_ID_CASE)
-
-/* Get Values */
-const char* XMLRPC_GetValueString(XMLRPC_VALUE value);
-int XMLRPC_GetValueStringLen(XMLRPC_VALUE value);
-int XMLRPC_GetValueInt(XMLRPC_VALUE value);
-int XMLRPC_GetValueBoolean(XMLRPC_VALUE value);
-double XMLRPC_GetValueDouble(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value);
-time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueID(XMLRPC_VALUE value);
-
-/* Type introspection */
-XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE v);
-XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE v);
-XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE v);
-
-/* Parsing and Creating XML */
-XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
-XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
-char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int *buf_len);
-char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len);
-
-/* Request manipulation funcs */
-const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName);
-const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request);
-XMLRPC_REQUEST XMLRPC_RequestNew(void);
-void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO);
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output);
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request);
-XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data);
-XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request);
-XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type);
-XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request);
-
-/* Server Creation/Destruction; Method Registration and Invocation */
-XMLRPC_SERVER XMLRPC_ServerCreate(void);
-XMLRPC_SERVER XMLRPC_GetGlobalServer(void); /* better to use XMLRPC_ServerCreate if you can */
-void XMLRPC_ServerDestroy(XMLRPC_SERVER server);
-int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb);
-XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName);
-XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData);
-
-#include "xmlrpc_introspection.h"
-
-/* Public Utility funcs */
-XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string);
-void XMLRPC_Free(void* mem);
-const char* XMLRPC_GetVersionString(void);
-
-/****d* VALUE/XMLRPC_MACROS
- * NAME
- * Some Helpful Macros
- * NOTES
- * Some macros for making life easier. Should be self-explanatory.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * SOURCE
- */
-
-/* Append values to vector */
-#define XMLRPC_VectorAppendString(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueString(id, s, len))
-#define XMLRPC_VectorAppendBase64(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBase64(id, s, len))
-#define XMLRPC_VectorAppendDateTime(vector, id, time) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime(id, time))
-#define XMLRPC_VectorAppendDateTime_ISO8601(vector, id, s) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime_ISO8601(id, s))
-#define XMLRPC_VectorAppendDouble(vector, id, f) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDouble(id, f))
-#define XMLRPC_VectorAppendInt(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueInt(id, i))
-#define XMLRPC_VectorAppendBoolean(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBoolean(id, i))
-
-/* Get named values from vector */
-#define XMLRPC_VectorGetValueWithID(vector, id) XMLRPC_VectorGetValueWithID_Case(vector, id, XMLRPC_DEFAULT_ID_CASE_SENSITIVITY)
-#define XMLRPC_VectorGetStringWithID(vector, id) XMLRPC_GetValueString(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetBase64WithID(vector, id) XMLRPC_GetValueBase64(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetDateTimeWithID(vector, id) XMLRPC_GetValueDateTime(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetDoubleWithID(vector, id) XMLRPC_GetValueDouble(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetIntWithID(vector, id) XMLRPC_GetValueInt(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetBooleanWithID(vector, id) XMLRPC_GetValueBoolean(XMLRPC_VectorGetValueWithID(vector, id))
-
-/******/
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XMLRPC_ALREADY_INCLUDED */
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.m4 b/ext/xmlrpc/libxmlrpc/xmlrpc.m4
deleted file mode 100644
index e89c245f02..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-AC_DEFUN(XMLRPC_CHECKS,[
-
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AC_PROG_LN_S])
-AC_REQUIRE([AC_PROG_RANLIB])
-
-AC_DEFINE(UNDEF_THREADS_HACK,,[ ])
-
-XMLRPC_HEADER_CHECKS
-XMLRPC_TYPE_CHECKS
-XMLRPC_FUNCTION_CHECKS
-])
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c
deleted file mode 100644
index d9251b2709..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-/****h* ABOUT/xmlrpc_introspection
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * HISTORY
- * 4/10/2001 -- danda -- initial introspection support
- * TODO
- * NOTES
- *******/
-
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include "queue.h"
-#include "xmlrpc.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-/* forward declarations for static (non public, non api) funcs */
-static XMLRPC_VALUE xi_system_describe_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_list_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_method_signature_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_method_help_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-
-
-/*-**********************************
-* Introspection Callbacks (methods) *
-************************************/
-
-/* iterates through a list of structs and finds the one with key "name" matching
- * needle. slow, would benefit from a struct key hash.
- */
-inline XMLRPC_VALUE find_named_value(XMLRPC_VALUE list, const char* needle) {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(list);
- while(xIter) {
- const char* name = XMLRPC_VectorGetStringWithID(xIter, xi_token_name);
- if(name && !strcmp(name, needle)) {
- return xIter;
- }
- xIter = XMLRPC_VectorNext(list);
- }
- return NULL;
-}
-
-
-/* iterates through docs callbacks and calls any that have not yet been called */
-static void check_docs_loaded(XMLRPC_SERVER server, void* userData) {
- if(server) {
- q_iter qi = Q_Iter_Head_F(&server->docslist);
- while( qi ) {
- doc_method* dm = Q_Iter_Get_F(qi);
- if(dm && !dm->b_called) {
- dm->method(server, userData);
- dm->b_called = 1;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
-}
-
-
-/* utility function for xi_system_describe_methods_cb */
-inline void describe_method(XMLRPC_SERVER server, XMLRPC_VALUE vector, const char* method) {
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm) {
- XMLRPC_AddValueToVector(vector, sm->desc);
- }
- }
-}
-
-
-
-/* system.describeMethods() callback */
-static XMLRPC_VALUE xi_system_describe_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xParams = XMLRPC_VectorRewind(XMLRPC_RequestGetData(input));
- XMLRPC_VALUE xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- XMLRPC_VALUE xMethodList = XMLRPC_CreateVector("methodList", xmlrpc_vector_array);
- XMLRPC_VALUE xTypeList = NULL;
- int bAll = 1;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- xTypeList = XMLRPC_VectorGetValueWithID(server->xIntrospection, "typeList");
-
- XMLRPC_AddValueToVector(xResponse, xTypeList);
- XMLRPC_AddValueToVector(xResponse, xMethodList);
-
- /* check if we have any param */
- if(xParams) {
- /* check if string or vector (1 or n) */
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(xParams);
- if(type == xmlrpc_string) {
- /* just one. spit it out. */
- describe_method(server, xMethodList, XMLRPC_GetValueString(xParams));
- bAll = 0;
- }
- else if(type == xmlrpc_vector) {
- /* multiple. spit all out */
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(xParams);
- while(xIter) {
- describe_method(server, xMethodList, XMLRPC_GetValueString(xIter));
- xIter = XMLRPC_VectorNext(xParams);
- }
- bAll = 0;
- }
- }
-
- /* otherwise, default to sending all methods */
- if(bAll) {
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm) {
- XMLRPC_AddValueToVector(xMethodList, sm->desc);
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
-
- return xResponse;
-}
-
-/* this complies with system.listMethods as defined at http://xmlrpc.usefulinc.com/doc/reserved.html */
-static XMLRPC_VALUE xi_system_list_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
-
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm) {
- XMLRPC_VectorAppendString(xResponse, 0, sm->name, 0);
- }
- qi = Q_Iter_Next_F(qi);
- }
- return xResponse;
-}
-
-/* this complies with system.methodSignature as defined at
- * http://xmlrpc.usefulinc.com/doc/sysmethodsig.html
- */
-static XMLRPC_VALUE xi_system_method_signature_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- const char* method = XMLRPC_GetValueString(XMLRPC_VectorRewind(XMLRPC_RequestGetData(input)));
- XMLRPC_VALUE xResponse = NULL;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm && sm->desc) {
- XMLRPC_VALUE xTypesArray = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
- XMLRPC_VALUE xIter, xParams, xSig, xSigIter;
- const char* type;
-
- /* array of possible signatures. */
- xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
-
- /* find first signature */
- xSig = XMLRPC_VectorGetValueWithID(sm->desc, xi_token_signatures);
- xSigIter = XMLRPC_VectorRewind( xSig );
-
- /* iterate through sigs */
- while(xSigIter) {
- /* first type is the return value */
- type = XMLRPC_VectorGetStringWithID(XMLRPC_VectorRewind(
- XMLRPC_VectorGetValueWithID(xSigIter, xi_token_returns)),
- xi_token_type);
- XMLRPC_AddValueToVector(xTypesArray,
- XMLRPC_CreateValueString(NULL,
- type ? type : type_to_str(xmlrpc_none, 0),
- 0));
-
- /* the rest are parameters */
- xParams = XMLRPC_VectorGetValueWithID(xSigIter, xi_token_params);
- xIter = XMLRPC_VectorRewind(xParams);
-
- /* iter through params, adding to types array */
- while(xIter) {
- XMLRPC_AddValueToVector(xTypesArray,
- XMLRPC_CreateValueString(NULL,
- XMLRPC_VectorGetStringWithID(xIter, xi_token_type),
- 0));
- xIter = XMLRPC_VectorNext(xParams);
- }
-
- /* add types for this signature */
- XMLRPC_AddValueToVector(xResponse, xTypesArray);
-
- xSigIter = XMLRPC_VectorNext( xSig );
- }
- }
- }
-
- return xResponse;
-}
-
-/* this complies with system.methodHelp as defined at
- * http://xmlrpc.usefulinc.com/doc/sysmethhelp.html
- */
-static XMLRPC_VALUE xi_system_method_help_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- const char* method = XMLRPC_GetValueString(XMLRPC_VectorRewind(XMLRPC_RequestGetData(input)));
- XMLRPC_VALUE xResponse = NULL;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm && sm->desc) {
- const char* help = XMLRPC_VectorGetStringWithID(sm->desc, xi_token_purpose);
-
- /* returns a documentation string, or empty string */
- xResponse = XMLRPC_CreateValueString(NULL, help ? help : xi_token_empty, 0);
- }
- }
-
- return xResponse;
-}
-
-/*-**************************************
-* End Introspection Callbacks (methods) *
-****************************************/
-
-
-/*-************************
-* Introspection Utilities *
-**************************/
-
-/* performs registration of introspection methods */
-void xi_register_system_methods(XMLRPC_SERVER server) {
- XMLRPC_ServerRegisterMethod(server, xi_token_system_list_methods, xi_system_list_methods_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_method_help, xi_system_method_help_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_method_signature, xi_system_method_signature_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_describe_methods, xi_system_describe_methods_cb);
-}
-
-/* describe a value (param, return, type) */
-static XMLRPC_VALUE describeValue_worker(const char* type, const char* id, const char* desc, int optional, const char* default_val, XMLRPC_VALUE sub_params) {
- XMLRPC_VALUE xParam = NULL;
- if(id || desc) {
- xParam = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- XMLRPC_VectorAppendString(xParam, xi_token_name, id, 0);
- XMLRPC_VectorAppendString(xParam, xi_token_type, type, 0);
- XMLRPC_VectorAppendString(xParam, xi_token_description, desc, 0);
- if(optional != 2) {
- XMLRPC_VectorAppendInt(xParam, xi_token_optional, optional);
- }
- if(optional == 1 && default_val) {
- XMLRPC_VectorAppendString(xParam, xi_token_default, default_val, 0);
- }
- XMLRPC_AddValueToVector(xParam, sub_params);
- }
- return xParam;
-}
-
-
-/* convert an xml tree conforming to spec <url tbd> to XMLRPC_VALUE
- * suitable for use with XMLRPC_ServerAddIntrospectionData
- */
-XMLRPC_VALUE xml_element_to_method_description(xml_element* el, XMLRPC_ERROR err) {
- XMLRPC_VALUE xReturn = NULL;
-
- if(el->name) {
- const char* name = NULL;
- const char* type = NULL;
- const char* basetype = NULL;
- const char* desc = NULL;
- const char* def = NULL;
- int optional = 0;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
-
- /* grab element attributes up front to save redundant while loops */
- while(attr_iter) {
- if(!strcmp(attr_iter->key, "name")) {
- name = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "type")) {
- type = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "basetype")) {
- basetype = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "desc")) {
- desc = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "optional")) {
- if(attr_iter->val && !strcmp(attr_iter->val, "yes")) {
- optional = 1;
- }
- }
- else if(!strcmp(attr_iter->key, "default")) {
- def = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- /* value and typeDescription behave about the same */
- if(!strcmp(el->name, "value") || !strcmp(el->name, "typeDescription")) {
- XMLRPC_VALUE xSubList = NULL;
- const char* ptype = !strcmp(el->name, "value") ? type : basetype;
- if(ptype) {
- if(Q_Size(&el->children) &&
- !strcmp(ptype, "array") || !strcmp(ptype, "struct") || !strcmp(ptype, "mixed")) {
- xSubList = XMLRPC_CreateVector("member", xmlrpc_vector_array);
-
- if(xSubList) {
- xml_element* elem_iter = Q_Head(&el->children);
- while(elem_iter) {
- XMLRPC_AddValueToVector(xSubList,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
- }
- xReturn = describeValue_worker(ptype, name, (desc ? desc : (xSubList ? NULL : el->text.str)), optional, def, xSubList);
- }
- }
-
- /* these three kids are about equivalent */
- else if(!strcmp(el->name, "params") ||
- !strcmp(el->name, "returns") ||
- !strcmp(el->name, "signature")) {
- if(Q_Size(&el->children)) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(!strcmp(el->name, "signature") ? NULL : el->name, xmlrpc_vector_struct);
-
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
- }
-
-
- else if(!strcmp(el->name, "methodDescription")) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
-
- XMLRPC_VectorAppendString(xReturn, xi_token_name, name, 0);
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
-
- /* items are slightly special */
- else if(!strcmp(el->name, "item")) {
- xReturn = XMLRPC_CreateValueString(name, el->text.str, el->text.len);
- }
-
- /* sure. we'll let any ol element with children through */
- else if(Q_Size(&el->children)) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(el->name, xmlrpc_vector_mixed);
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
-
- /* or anything at all really, so long as its got some text.
- * no reason being all snotty about a spec, right?
- */
- else if(el->name && el->text.len) {
- xReturn = XMLRPC_CreateValueString(el->name, el->text.str, el->text.len);
- }
- }
-
- return xReturn;
-}
-
-/*-****************************
-* End Introspection Utilities *
-******************************/
-
-
-
-/*-******************
-* Introspection API *
-********************/
-
-
-/****f* VALUE/XMLRPC_IntrospectionCreateDescription
- * NAME
- * XMLRPC_IntrospectionCreateDescription
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR err)
- * FUNCTION
- * converts raw xml describing types and methods into an
- * XMLRPC_VALUE suitable for use with XMLRPC_ServerAddIntrospectionData()
- * INPUTS
- * xml - xml data conforming to introspection spec at <url tbd>
- * err - optional pointer to error struct. filled in if error occurs and not NULL.
- * RESULT
- * XMLRPC_VALUE - newly created value, or NULL if fatal error.
- * BUGS
- * Currently does little or no validation of xml.
- * Only parse errors are currently reported in err, not structural errors.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR err) {
- XMLRPC_VALUE xReturn = NULL;
- xml_element* root = xml_elem_parse_buf(xml, 0, 0, err ? &err->xml_elem_error : NULL);
-
- if(root) {
- xReturn = xml_element_to_method_description(root, err);
-
- xml_elem_free(root);
- }
-
- return xReturn;
-
-}
-/*******/
-
-
-/****f* SERVER/XMLRPC_ServerAddIntrospectionData
- * NAME
- * XMLRPC_ServerAddIntrospectionData
- * SYNOPSIS
- * int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc)
- * FUNCTION
- * updates server with additional introspection data
- * INPUTS
- * server - target server
- * desc - introspection data, should be a struct generated by
- * XMLRPC_IntrospectionCreateDescription ()
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * - function will fail if neither typeList nor methodList key is present in struct.
- * - if method or type already exists, it will be replaced.
- * - desc is never freed by the server. caller is responsible for cleanup.
- * BUGS
- * - horribly slow lookups. prime candidate for hash improvements.
- * - uglier and more complex than I like to see for API functions.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * XMLRPC_ServerRegisterIntrospectionCallback ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc) {
- int bSuccess = 0;
- if(server && desc) {
- XMLRPC_VALUE xNewTypes = XMLRPC_VectorGetValueWithID(desc, "typeList");
- XMLRPC_VALUE xNewMethods = XMLRPC_VectorGetValueWithID(desc, "methodList");
- XMLRPC_VALUE xServerTypes = XMLRPC_VectorGetValueWithID(server->xIntrospection, "typeList");
-
- if(xNewMethods) {
- XMLRPC_VALUE xMethod = XMLRPC_VectorRewind(xNewMethods);
-
- while(xMethod) {
- const char* name = XMLRPC_VectorGetStringWithID(xMethod, xi_token_name);
- server_method* sm = find_method(server, name);
-
- if(sm) {
- if(sm->desc) {
- XMLRPC_CleanupValue(sm->desc);
- }
- sm->desc = XMLRPC_CopyValue(xMethod);
- bSuccess = 1;
- }
-
- xMethod = XMLRPC_VectorNext(xNewMethods);
- }
- }
- if(xNewTypes) {
- if(!xServerTypes) {
- if(!server->xIntrospection) {
- server->xIntrospection = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- }
-
- XMLRPC_AddValueToVector(server->xIntrospection, xNewTypes);
- bSuccess = 1;
- }
- else {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(xNewTypes);
- while(xIter) {
- /* get rid of old values */
- XMLRPC_VALUE xPrev = find_named_value(xServerTypes, XMLRPC_VectorGetStringWithID(xIter, xi_token_name));
- if(xPrev) {
- XMLRPC_VectorRemoveValue(xServerTypes, xPrev);
- }
- XMLRPC_AddValueToVector(xServerTypes, xIter);
- bSuccess = 1;
- xIter = XMLRPC_VectorNext(xNewTypes);
- }
- }
- }
- }
- return bSuccess;
-}
-/*******/
-
-
-/****f* SERVER/XMLRPC_ServerRegisterIntrospectionCallback
- * NAME
- * XMLRPC_ServerRegisterIntrospectionCallback
- * SYNOPSIS
- * int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb)
- * FUNCTION
- * registers a callback for lazy generation of introspection data
- * INPUTS
- * server - target server
- * cb - callback that will generate introspection data
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * parsing xml and generating introspection data is fairly expensive, thus a
- * server may wish to wait until this data is actually requested before generating
- * it. Any number of callbacks may be registered at any time. A given callback
- * will only ever be called once, the first time an introspection request is
- * processed after the time of callback registration.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * XMLRPC_IntrospectionCreateDescription ()
- * SOURCE
- */
-int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb) {
- int bSuccess = 0;
- if(server && cb) {
-
- doc_method* dm = calloc(1, sizeof(doc_method));
-
- if(dm) {
- dm->method = cb;
- dm->b_called = 0;
-
- if(Q_PushTail(&server->docslist, dm)) {
- bSuccess = 1;
- }
- else {
- my_free(dm);
- }
- }
- }
- return 0;
-}
-/*******/
-
-/*-**********************
-* End Introspection API *
-************************/
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h
deleted file mode 100644
index 656e441b96..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only public (official API) things should be in this file. Anything else
- * should go in <group>_private.h, or in the appropriate .c file.
- */
-
-
-#ifndef __XI_INTROSPECTION_H
-/*
- * Avoid include redundancy.
- */
-#define __XI_INTROSPECTION_H
-
-/*----------------------------------------------------------------------------
- * xmlrpc_introspection.h
- *
- * Purpose:
- * define public introspection API
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
- #define xi_token_params "params"
- #define xi_token_returns "returns"
- #define xi_token_related "related"
- #define xi_token_sub "sub"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
- /****d* VALUE/XMLRPC_IntrospectionCallback
- * NAME
- * XMLRPC_IntrospectionCallback
- * NOTES
- * Function prototype for lazy documentation generation (not generated until requested).
- * SOURCE
- */
-typedef void (*XMLRPC_IntrospectionCallback)(XMLRPC_SERVER server, void* userData);
-/******/
-
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR error);
-int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc);
-int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __XI_INTROSPECTION_H */
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h
deleted file mode 100644
index 7b97fa7ed7..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Dan Libby, Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-
-#ifndef __XI_INTROSPECTION_PRIVATE_H
-/*
- * Avoid include redundancy.
- */
-#define __XI_INTROSPECTION_PRIVATE_H
-
-/*----------------------------------------------------------------------------
- * xmlrpc_introspection_private.h
- *
- * Purpose:
- * define non-public introspection routines
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-#define xi_token_default "default"
-#define xi_token_description "description"
-#define xi_token_name "name"
-#define xi_token_optional "optional"
-#define xi_token_params "params"
-#define xi_token_purpose "purpose"
-#define xi_token_returns "returns"
-#define xi_token_signatures "signatures"
-#define xi_token_type "type"
-#define xi_token_version "version"
-#define xi_token_empty ""
-#define xi_token_system_describe_methods "system.describeMethods"
-#define xi_token_system_list_methods "system.listMethods"
-#define xi_token_system_method_help "system.methodHelp"
-#define xi_token_system_method_signature "system.methodSignature"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-typedef struct _doc_method {
- XMLRPC_IntrospectionCallback method;
- int b_called;
-} doc_method;
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-void xi_register_system_methods(XMLRPC_SERVER server);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __XI_INTROSPECTION_PRIVATE_H */
-
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_private.h b/ext/xmlrpc/libxmlrpc/xmlrpc_private.h
deleted file mode 100644
index afb1cd2479..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_private.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-#ifndef XMLRPC_PRIVATE_ALREADY_INCLUDED
-/*
- * Avoid include redundancy.
- */
-#define XMLRPC_PRIVATE_ALREADY_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*----------------------------------------------------------------------------
- * xmlrpc_private.h
- *
- * Purpose:
- * define non-public intra-library routines & data
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
-/* Some of these are typedef'd in xmlrpc.h for public use */
-
-typedef struct _xmlrpc_vector* XMLRPC_VECTOR;
-
-/****s* VALUE/XMLRPC_VALUE
- * NAME
- * XMLRPC_VALUE
- * NOTES
- * A value of variable data type. The most important object in this API. :)
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- * SEE ALSO
- * XMLRPC_REQUEST
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-typedef struct _xmlrpc_value {
- XMLRPC_VALUE_TYPE type; /* data type of this value */
- XMLRPC_VECTOR v; /* vector type specific info */
- simplestring str; /* string value buffer */
- simplestring id; /* id of this value. possibly empty. */
- int i; /* integer value. */
- double d; /* double value */
- int iRefCount; /* So we know when we can delete the value . */
-} STRUCT_XMLRPC_VALUE;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST
- * NAME
- * XMLRPC_REQUEST
- * NOTES
- * Internal representation of an XML request.
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- *
- * SEE ALSO
- * XMLRPC_VALUE
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-typedef struct _xmlrpc_request {
- XMLRPC_VALUE io; /* data associated with this request */
- simplestring methodName; /* name of method being called */
- XMLRPC_REQUEST_TYPE request_type; /* type of request */
- STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS output; /* xml output options */
- XMLRPC_VALUE error; /* error codes */
-} STRUCT_XMLRPC_REQUEST;
-/******/
-
-/* Vector type. Used by XMLRPC_VALUE. Never visible to users of the API. */
-typedef struct _xmlrpc_vector {
- XMLRPC_VECTOR_TYPE type; /* vector type */
- queue *q; /* list of child values */
-} STRUCT_XMLRPC_VECTOR;
-/******/
-
-/****s* VALUE/XMLRPC_SERVER
- * NAME
- * XMLRPC_SERVER
- * NOTES
- * internal representation of an xmlrpc server
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- *
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * XMLRPC_ServerDestroy ()
- * SOURCE
- */
-typedef struct _xmlrpc_server {
- queue methodlist; /* list of callback methods */
- queue docslist; /* list of introspection callbacks */
- XMLRPC_VALUE xIntrospection;
-} STRUCT_XMLRPC_SERVER;
-/******/
-
-typedef struct _server_method {
- char* name;
- XMLRPC_VALUE desc;
- XMLRPC_Callback method;
-} server_method;
-
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-extern server_method* find_method(XMLRPC_SERVER server, const char* name);
-const char* type_to_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* XMLRPC_PRIVATE_ALREADY_INCLUDED */
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_win32.h b/ext/xmlrpc/libxmlrpc/xmlrpc_win32.h
deleted file mode 100644
index 58c54bbb80..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_win32.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _XMLRPC_WIN32_H
-#define _XMLRPC_WIN32_H
-/* just some things needed to compile win32 */
-#include <windows.h>
-#include <stdlib.h>
-#define inline __inline
-#define snprintf _snprintf
-#define strcasecmp(s1, s2) stricmp(s1, s2)
-
-
-#endif \ No newline at end of file
diff --git a/ext/xmlrpc/php_xmlrpc.h b/ext/xmlrpc/php_xmlrpc.h
deleted file mode 100644
index bdf76b0cbf..0000000000
--- a/ext/xmlrpc/php_xmlrpc.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- This file is part of, or distributed with, libXMLRPC - a C library for
- xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* auto-generated portions of this file are also subject to the php license */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Dan Libby |
- +----------------------------------------------------------------------+
- */
-
-#ifndef _PHP_XMLRPC_H
-#define _PHP_XMLRPC_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if 1 /* HAVE_XMLRPC */
-
-extern zend_module_entry xmlrpc_module_entry;
-#define phpext_xmlrpc_ptr &xmlrpc_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XMLRPC_API __declspec(dllexport)
-#else
-#define PHP_XMLRPC_API
-#endif
-
-PHP_MINIT_FUNCTION(xmlrpc);
-PHP_MSHUTDOWN_FUNCTION(xmlrpc);
-PHP_RINIT_FUNCTION(xmlrpc);
-PHP_RSHUTDOWN_FUNCTION(xmlrpc);
-PHP_MINFO_FUNCTION(xmlrpc);
-
-PHP_FUNCTION(xmlrpc_encode);
-PHP_FUNCTION(xmlrpc_decode);
-PHP_FUNCTION(xmlrpc_decode_request);
-PHP_FUNCTION(xmlrpc_encode_request);
-PHP_FUNCTION(xmlrpc_get_type);
-PHP_FUNCTION(xmlrpc_set_type);
-PHP_FUNCTION(xmlrpc_server_create);
-PHP_FUNCTION(xmlrpc_server_destroy);
-PHP_FUNCTION(xmlrpc_server_register_method);
-PHP_FUNCTION(xmlrpc_server_call_method);
-PHP_FUNCTION(xmlrpc_parse_method_descriptions);
-PHP_FUNCTION(xmlrpc_server_add_introspection_data);
-PHP_FUNCTION(xmlrpc_server_register_introspection_callback);
-
-/* Fill in this structure and use entries in it
- for thread safety instead of using true globals.
-*/
-typedef struct {
- int x; /* fix error in msvc, cannot have empty structs */
-} zend_xmlrpc_globals;
-
-/* In every function that needs to use variables in zend_xmlrpc_globals,
- do call XMLRPCLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as XMLRPCG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#else
-
-#define phpext_xmlrpc_ptr NULL
-
-#endif
-
-#endif /* _PHP_XMLRPC_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
deleted file mode 100644
index 103ca28dd2..0000000000
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ /dev/null
@@ -1,1464 +0,0 @@
-/*
- This file is part of, or distributed with, libXMLRPC - a C library for
- xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* auto-generated portions of this file are also subject to the php license */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Dan Libby |
- +----------------------------------------------------------------------+
- */
-
-/**********************************************************************
-* BUGS: *
-* - when calling a php user function, there appears to be no way to *
-* distinguish between a return value of null, and no return value *
-* at all. The xml serialization layer(s) will then return a value *
-* of null, when the right thing may be no value at all. (SOAP) *
-**********************************************************************/
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-#include "php_xmlrpc.h"
-#ifndef PHP_WIN32
-#include "php_config.h"
-#endif
-#include "xmlrpc.h"
-
-#define PHP_EXT_VERSION "0.50"
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined. */
-
-ZEND_DECLARE_MODULE_GLOBALS(xmlrpc)
-
-static int le_xmlrpc_server;
-
-function_entry xmlrpc_functions[] = {
- PHP_FE(xmlrpc_encode, NULL)
- PHP_FE(xmlrpc_decode, NULL)
- PHP_FE(xmlrpc_decode_request, NULL)
- PHP_FE(xmlrpc_encode_request, NULL)
- PHP_FE(xmlrpc_get_type, NULL)
- PHP_FE(xmlrpc_set_type, NULL)
- PHP_FE(xmlrpc_server_create, NULL)
- PHP_FE(xmlrpc_server_destroy, NULL)
- PHP_FE(xmlrpc_server_register_method, NULL)
- PHP_FE(xmlrpc_server_call_method, NULL)
- PHP_FE(xmlrpc_parse_method_descriptions, NULL)
- PHP_FE(xmlrpc_server_add_introspection_data, NULL)
- PHP_FE(xmlrpc_server_register_introspection_callback, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry xmlrpc_module_entry = {
- STANDARD_MODULE_HEADER,
- "xmlrpc",
- xmlrpc_functions,
- PHP_MINIT(xmlrpc),
- PHP_MSHUTDOWN(xmlrpc),
- PHP_RINIT(xmlrpc), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(xmlrpc), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(xmlrpc),
- PHP_EXT_VERSION,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_XMLRPC
-ZEND_GET_MODULE(xmlrpc)
-#endif
-
-/*******************************
-* local structures and defines *
-*******************************/
-
-/* per server data */
-typedef struct _xmlrpc_server_data {
- zval* method_map;
- zval* introspection_map;
- XMLRPC_SERVER server_ptr;
-} xmlrpc_server_data;
-
-
-/* how to format output */
-typedef struct _php_output_options {
- int b_php_out;
- int b_auto_version;
- STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS xmlrpc_out;
-} php_output_options;
-
-/* data passed to C callback */
-typedef struct _xmlrpc_callback_data {
- zval* xmlrpc_method;
- zval* php_function;
- zval* caller_params;
- zval* return_data;
- xmlrpc_server_data* server;
- char php_executed;
-} xmlrpc_callback_data;
-
-/* output options */
-#define OUTPUT_TYPE_KEY "output_type"
-#define OUTPUT_TYPE_KEY_LEN (sizeof(OUTPUT_TYPE_KEY) - 1)
-#define OUTPUT_TYPE_VALUE_PHP "php"
-#define OUTPUT_TYPE_VALUE_XML "xml"
-
-#define VERBOSITY_KEY "verbosity"
-#define VERBOSITY_KEY_LEN (sizeof(VERBOSITY_KEY) - 1)
-#define VERBOSITY_VALUE_NO_WHITE_SPACE "no_white_space"
-#define VERBOSITY_VALUE_NEWLINES_ONLY "newlines_only"
-#define VERBOSITY_VALUE_PRETTY "pretty"
-
-#define ESCAPING_KEY "escaping"
-#define ESCAPING_KEY_LEN (sizeof(ESCAPING_KEY) - 1)
-#define ESCAPING_VALUE_CDATA "cdata"
-#define ESCAPING_VALUE_NON_ASCII "non-ascii"
-#define ESCAPING_VALUE_NON_PRINT "non-print"
-#define ESCAPING_VALUE_MARKUP "markup"
-
-#define VERSION_KEY "version"
-#define VERSION_KEY_LEN (sizeof(VERSION_KEY) - 1)
-#define VERSION_VALUE_SIMPLE "simple"
-#define VERSION_VALUE_XMLRPC "xmlrpc"
-#define VERSION_VALUE_SOAP11 "soap 1.1"
-#define VERSION_VALUE_AUTO "auto"
-
-#define ENCODING_KEY "encoding"
-#define ENCODING_KEY_LEN (sizeof(ENCODING_KEY) - 1)
-#define ENCODING_DEFAULT "iso-8859-1"
-
-/* value types */
-#define OBJECT_TYPE_ATTR "xmlrpc_type"
-#define OBJECT_VALUE_ATTR "scalar"
-
-
-
-/***********************
-* forward declarations *
-***********************/
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue);
-static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data);
-int sset_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-zval* decode_request_worker(zval* xml_in, zval* encoding_in, zval* method_name_out);
-const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
-XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str);
-XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str);
-int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-
-/*********************
-* startup / shutdown *
-*********************/
-
-static void destroy_server_data(xmlrpc_server_data *server)
-{
- if (server) {
- XMLRPC_ServerDestroy(server->server_ptr);
-
- zval_dtor(server->method_map);
- FREE_ZVAL(server->method_map);
-
- zval_dtor(server->introspection_map);
- FREE_ZVAL(server->introspection_map);
-
- efree(server);
- }
-}
-
-/* called when server is being destructed. either when xmlrpc_server_destroy
- * is called, or when request ends. */
-static void xmlrpc_server_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- if (rsrc && rsrc->ptr) {
- destroy_server_data((xmlrpc_server_data*) rsrc->ptr);
- }
-}
-
-/* module init */
-PHP_MINIT_FUNCTION(xmlrpc)
-{
- le_xmlrpc_server = zend_register_list_destructors_ex(xmlrpc_server_destructor, NULL, "xmlrpc server", module_number);
-
- return SUCCESS;
-}
-
-/* module shutdown */
-PHP_MSHUTDOWN_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request start */
-PHP_RINIT_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request end */
-PHP_RSHUTDOWN_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* display info in phpinfo() */
-PHP_MINFO_FUNCTION(xmlrpc)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "core library version", XMLRPC_GetVersionString());
- php_info_print_table_row(2, "php extension version", PHP_EXT_VERSION);
- php_info_print_table_row(2, "author", "Dan Libby");
- php_info_print_table_row(2, "homepage", "http://xmlrpc-epi.sourceforge.net");
- php_info_print_table_row(2, "open sourced by", "Epinions.com");
- php_info_print_table_end();
-}
-
-/*******************
-* random utilities *
-*******************/
-
-/* Utility functions for adding data types to arrays, with or without key (assoc, non-assoc).
- * Could easily be further generalized to work with objects.
- */
-#if 0
-static int add_long(zval* list, char* id, int num) {
- if(id) return add_assoc_long(list, id, num);
- else return add_next_index_long(list, num);
-}
-
-static int add_double(zval* list, char* id, double num) {
- if(id) return add_assoc_double(list, id, num);
- else return add_next_index_double(list, num);
-}
-
-static int add_string(zval* list, char* id, char* string, int duplicate) {
- if(id) return add_assoc_string(list, id, string, duplicate);
- else return add_next_index_string(list, string, duplicate);
-}
-
-static int add_stringl(zval* list, char* id, char* string, uint length, int duplicate) {
- if(id) return add_assoc_stringl(list, id, string, length, duplicate);
- else return add_next_index_stringl(list, string, length, duplicate);
-}
-
-#endif
-
-static int add_zval(zval* list, const char* id, zval** val)
-{
- if (list && val) {
- if (id) {
- return zend_hash_update(Z_ARRVAL_P(list), (char*) id, strlen(id) + 1, (void *) val, sizeof(zval **), NULL);
- } else {
- return zend_hash_next_index_insert(Z_ARRVAL_P(list), (void *) val, sizeof(zval **), NULL);
- }
- }
- /* what is the correct return on error? */
- return 0;
-}
-
-#if ZEND_MODULE_API_NO >= 20001222
-#define my_zend_hash_get_current_key(ht, my_key, num_index) zend_hash_get_current_key(ht, my_key, num_index, 0)
-#else
-#define my_zend_hash_get_current_key(ht, my_key, num_index) zend_hash_get_current_key(ht, my_key, num_index)
-#endif
-
-
-/*************************
-* input / output options *
-*************************/
-
-/* parse an array (user input) into output options suitable for use by xmlrpc engine
- * and determine whether to return data as xml or php vars */
-static void set_output_options(php_output_options* options, zval* output_opts)
-{
- if (options) {
-
- /* defaults */
- options->b_php_out = 0;
- options->b_auto_version = 1;
- options->xmlrpc_out.version = xmlrpc_version_1_0;
- options->xmlrpc_out.xml_elem_opts.encoding = ENCODING_DEFAULT;
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping | xml_elem_non_ascii_escaping | xml_elem_non_print_escaping;
-
- if (output_opts && Z_TYPE_P(output_opts) == IS_ARRAY) {
- zval** val;
-
- /* type of output (xml/php) */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), OUTPUT_TYPE_KEY, OUTPUT_TYPE_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_PHP)) {
- options->b_php_out = 1;
- } else if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_XML)) {
- options->b_php_out = 0;
- }
- }
- }
-
- /* verbosity of generated xml */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERBOSITY_KEY, VERBOSITY_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NO_WHITE_SPACE)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_no_white_space;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NEWLINES_ONLY)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_newlines_only;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_PRETTY)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
- }
- }
- }
-
- /* version of xml to output */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERSION_KEY, VERSION_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- options->b_auto_version = 0;
- if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_XMLRPC)) {
- options->xmlrpc_out.version = xmlrpc_version_1_0;
- } else if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_SIMPLE)) {
- options->xmlrpc_out.version = xmlrpc_version_simple;
- } else if (!strcmp((*val)->value.str.val, VERSION_VALUE_SOAP11)) {
- options->xmlrpc_out.version = xmlrpc_version_soap_1_1;
- } else { /* if(!strcmp((*val)->value.str.val, VERSION_VALUE_AUTO)) { */
- options->b_auto_version = 1;
- }
- }
- }
-
- /* encoding code set */
- if(zend_hash_find(Z_ARRVAL_P(output_opts),
- ENCODING_KEY, ENCODING_KEY_LEN + 1,
- (void**)&val) == SUCCESS) {
- if(Z_TYPE_PP(val) == IS_STRING) {
- options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_PP(val));
- }
- }
-
- /* escaping options */
- if(zend_hash_find(Z_ARRVAL_P(output_opts),
- ESCAPING_KEY, ESCAPING_KEY_LEN + 1,
- (void**)&val) == SUCCESS) {
- /* multiple values allowed. check if array */
- if(Z_TYPE_PP(val) == IS_ARRAY) {
- zval** iter_val;
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(val));
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping;
- while(1) {
- if(zend_hash_get_current_data(Z_ARRVAL_PP(val), (void**)&iter_val) == SUCCESS) {
- if(Z_TYPE_PP(iter_val) == IS_STRING && Z_STRVAL_PP(iter_val)) {
- if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping;
- }
- }
- }
- else {
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(val));
- }
- }
- /* else, check for single value */
- else if(Z_TYPE_PP(val) == IS_STRING) {
- if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping;
- }
- }
- }
- }
- }
-}
-
-
-/******************
-* encode / decode *
-******************/
-
-/* php arrays have no distinction between array and struct types.
- * they even allow mixed. Thus, we determine the type by iterating
- * through the entire array and figuring out each element.
- * room for some optimation here if we stop after a specific # of elements.
- */
-static XMLRPC_VECTOR_TYPE determine_vector_type (HashTable *ht)
-{
- int bArray = 0, bStruct = 0, bMixed = 0;
- unsigned long num_index;
- char* my_key;
-
- zend_hash_internal_pointer_reset(ht);
- while(1) {
- int res = my_zend_hash_get_current_key(ht, &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(bStruct) {
- bMixed = 1;
- break;
- }
- bArray = 1;
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(bArray) {
- bMixed = 1;
- break;
- }
- bStruct = 1;
- }
-
- zend_hash_move_forward(ht);
- }
- return bMixed ? xmlrpc_vector_mixed : (bStruct ? xmlrpc_vector_struct : xmlrpc_vector_array);
-}
-
-/* recursively convert php values into xmlrpc values */
-static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int depth)
-{
- XMLRPC_VALUE xReturn = NULL;
- if(in_val) {
- zval* val = NULL;
- XMLRPC_VALUE_TYPE type = get_zval_xmlrpc_type(in_val, &val);
- if(val) {
- switch(type) {
- case xmlrpc_base64:
- if(Z_TYPE_P(val) == IS_NULL) {
- xReturn = XMLRPC_CreateValueEmpty();
- XMLRPC_SetValueID(xReturn, key, 0);
- }
- else {
- xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
- }
- break;
- case xmlrpc_datetime:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueDateTime_ISO8601(key, Z_STRVAL_P(val));
- break;
- case xmlrpc_boolean:
- convert_to_boolean(val);
- xReturn = XMLRPC_CreateValueBoolean(key, Z_LVAL_P(val));
- break;
- case xmlrpc_int:
- convert_to_long(val);
- xReturn = XMLRPC_CreateValueInt(key, Z_LVAL_P(val));
- break;
- case xmlrpc_double:
- convert_to_double(val);
- xReturn = XMLRPC_CreateValueDouble(key, Z_DVAL_P(val));
- break;
- case xmlrpc_string:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueString(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
- break;
- case xmlrpc_vector:
- {
- unsigned long num_index;
- zval** pIter;
- char* my_key;
-
- convert_to_array(val);
-
- xReturn = XMLRPC_CreateVector(key, determine_vector_type(Z_ARRVAL_P(val)));
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
- while(1) {
- int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val), &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++));
- }
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++));
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(val));
- }
- }
- break;
- default:
- break;
- }
- }
- }
- return xReturn;
-}
-
-static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val)
-{
- return PHP_to_XMLRPC_worker(NULL, root_val, 0);
-}
-
-/* recursively convert xmlrpc values into php values */
-static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
-{
- zval* elem = NULL;
- const char* pStr;
-
- if(el) {
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(el);
-
- MAKE_STD_ZVAL(elem); /* init. very important. spent a frustrating day finding this out. */
-
- switch(type) {
- case xmlrpc_empty:
- Z_TYPE_P(elem) = IS_NULL;
- break;
- case xmlrpc_string:
- pStr = XMLRPC_GetValueString(el);
- if(pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- }
- break;
- case xmlrpc_int:
- Z_LVAL_P(elem) = XMLRPC_GetValueInt(el);
- Z_TYPE_P(elem) = IS_LONG;
- break;
- case xmlrpc_boolean:
- Z_LVAL_P(elem) = XMLRPC_GetValueBoolean(el);
- Z_TYPE_P(elem) = IS_BOOL;
- break;
- case xmlrpc_double:
- Z_DVAL_P(elem) = XMLRPC_GetValueDouble(el);
- Z_TYPE_P(elem) = IS_DOUBLE;
- break;
- case xmlrpc_datetime:
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(XMLRPC_GetValueDateTime_ISO8601(el), Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- break;
- case xmlrpc_base64:
- pStr = XMLRPC_GetValueBase64(el);
- if(pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- }
- break;
- case xmlrpc_vector:
- if(array_init(elem) == SUCCESS) {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(el);
-
- while( xIter ) {
- zval* val = XMLRPC_to_PHP(xIter);
- if(val) {
- add_zval(elem, XMLRPC_GetValueID(xIter), &val);
- }
- xIter = XMLRPC_VectorNext(el);
- }
- }
- break;
- default:
- break;
- }
- set_zval_xmlrpc_type(elem, type);
- }
- return elem;
-}
-
-/* {{{ proto string xmlrpc_encode_request(string method, mixed params)
- Generates XML for a method request */
-PHP_FUNCTION(xmlrpc_encode_request)
-{
- XMLRPC_REQUEST xRequest = NULL;
- zval* method, *vals, *out_opts;
- char* outBuf;
- php_output_options out;
-
- if( !(ARG_COUNT(ht) == 2 || ARG_COUNT(ht) == 3) ||
- getParameters(ht, ARG_COUNT(ht), &method, &vals, &out_opts) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- set_output_options(&out, (ARG_COUNT(ht) == 3) ? out_opts : 0);
-
-
- if(return_value_used) {
- xRequest = XMLRPC_RequestNew();
-
- if(xRequest) {
- XMLRPC_RequestSetOutputOptions(xRequest, &out.xmlrpc_out);
- if(Z_TYPE_P(method) == IS_NULL) {
- XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_response);
- }
- else {
- XMLRPC_RequestSetMethodName(xRequest, Z_STRVAL_P(method));
- XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_call);
- }
- if(Z_TYPE_P(vals) != IS_NULL) {
- XMLRPC_RequestSetData(xRequest, PHP_to_XMLRPC(vals));
- }
-
- outBuf = XMLRPC_REQUEST_ToXML(xRequest, 0);
- if(outBuf) {
- RETVAL_STRING(outBuf, 1);
- free(outBuf);
- }
- XMLRPC_RequestFree(xRequest, 1);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string xmlrpc_encode(mixed value)
- Generates XML for a PHP value */
-PHP_FUNCTION(xmlrpc_encode)
-{
- XMLRPC_VALUE xOut = NULL;
- zval* arg1;
- char* outBuf;
-
- if( !(ARG_COUNT(ht) == 1) ||
- getParameters(ht, ARG_COUNT(ht), &arg1) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- if( return_value_used ) {
- /* convert native php type to xmlrpc type */
- xOut = PHP_to_XMLRPC(arg1);
-
- /* generate raw xml from xmlrpc data */
- outBuf = XMLRPC_VALUE_ToXML(xOut, 0);
-
- if(xOut) {
- if(outBuf) {
- RETVAL_STRING(outBuf, 1);
- free(outBuf);
- }
- /* cleanup */
- XMLRPC_CleanupValue(xOut);
- }
- }
-}
-/* }}} */
-
-
-zval* decode_request_worker (zval* xml_in, zval* encoding_in, zval* method_name_out)
-{
- zval* retval = NULL;
- XMLRPC_REQUEST response;
- STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
- opts.xml_elem_opts.encoding = encoding_in ? utf8_get_encoding_id_from_string(Z_STRVAL_P(encoding_in)) : ENCODING_DEFAULT;
-
- /* generate XMLRPC_REQUEST from raw xml */
- response = XMLRPC_REQUEST_FromXML(Z_STRVAL_P(xml_in), Z_STRLEN_P(xml_in), &opts);
- if(response) {
- /* convert xmlrpc data to native php types */
- retval = XMLRPC_to_PHP(XMLRPC_RequestGetData(response));
-
- if(XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
- if(method_name_out) {
- convert_to_string(method_name_out);
- Z_TYPE_P(method_name_out) = IS_STRING;
- Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
- Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
- }
- }
-
- /* dust, sweep, and mop */
- XMLRPC_RequestFree(response, 1);
- }
- return retval;
-}
-
-/* {{{ proto array xmlrpc_decode_request(string xml, string& method [, string encoding])
- Decodes XML into native PHP types */
-PHP_FUNCTION(xmlrpc_decode_request)
-{
- zval* xml, *method, *encoding = NULL;
-
- if( !(ARG_COUNT(ht) == 2 || ARG_COUNT(ht) == 3) || getParameters(ht, ARG_COUNT(ht), &xml, &method, &encoding) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-#if ZEND_MODULE_API_NO < 20010901
- if (!ParameterPassedByReference(ht,2)) {
- zend_error(E_WARNING,"second argument to xmlrpc_decode_request() passed by value, expecting reference");
- }
-#endif
-
- convert_to_string(xml);
- convert_to_string(method);
- if(ARG_COUNT(ht) == 3) {
- convert_to_string(encoding);
- }
-
- if(return_value_used) {
- zval* retval = decode_request_worker(xml, encoding, method);
- if(retval) {
- *return_value = *retval;
- zval_copy_ctor(return_value);
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto array xmlrpc_decode(string xml [, string encoding])
- Decodes XML into native PHP types */
-PHP_FUNCTION(xmlrpc_decode)
-{
- zval* arg1, *arg2 = NULL;
-
- if( !(ARG_COUNT(ht) == 1 || ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- convert_to_string(arg1);
- if(ARG_COUNT(ht) == 2) {
- convert_to_string(arg2);
- }
-
- if(return_value_used) {
- zval* retval = decode_request_worker(arg1, arg2, NULL);
- if(retval) {
- *return_value = *retval;
- FREE_ZVAL(retval);
- }
- }
-}
-/* }}} */
-
-
-/*************************
-* server related methods *
-*************************/
-
-/* {{{ proto handle xmlrpc_server_create(void)
- Creates an xmlrpc server */
-PHP_FUNCTION(xmlrpc_server_create)
-{
- if(ARG_COUNT(ht) != 0) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- if(return_value_used) {
- zval *method_map, *introspection_map;
- MAKE_STD_ZVAL(method_map);
- MAKE_STD_ZVAL(introspection_map);
-
- if(array_init(method_map) == SUCCESS && array_init(introspection_map) == SUCCESS) {
- /* allocate server data. free'd in destroy_server_data() */
- xmlrpc_server_data *server = emalloc(sizeof(xmlrpc_server_data));
-
- if(server) {
- server->method_map = method_map;
- server->introspection_map = introspection_map;
- server->server_ptr = XMLRPC_ServerCreate();
-
- XMLRPC_ServerRegisterIntrospectionCallback(server->server_ptr, php_xmlrpc_introspection_callback);
-
- /* store for later use */
- ZEND_REGISTER_RESOURCE(return_value,server, le_xmlrpc_server);
- }
- }
- }
-}
-
-/* {{{ proto void xmlrpc_server_destroy(handle server)
- Destroys server resources */
-PHP_FUNCTION(xmlrpc_server_destroy)
-{
- zval* arg1;
- int bSuccess = FAILURE;
-
- if(ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- if(Z_TYPE_P(arg1) == IS_RESOURCE) {
- int type;
-
- xmlrpc_server_data *server = zend_list_find(Z_LVAL_P(arg1), &type);
-
- if(server && type == le_xmlrpc_server) {
- bSuccess = zend_list_delete(Z_LVAL_P(arg1));
-
- /* called by hashtable destructor
- * destroy_server_data(server);
- */
- }
- }
- RETVAL_LONG(bSuccess == SUCCESS);
-}
-
-
-/* called by xmlrpc C engine as method handler for all registered methods.
- * it then calls the corresponding PHP function to handle the method.
- */
-static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRequest, void* data)
-{
- xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- zval* xmlrpc_params;
- zval* callback_params[3];
- TSRMLS_FETCH();
-
- /* convert xmlrpc to native php types */
- xmlrpc_params = XMLRPC_to_PHP(XMLRPC_RequestGetData(xRequest));
-
- /* setup data hoojum */
- callback_params[0] = pData->xmlrpc_method;
- callback_params[1] = xmlrpc_params;
- callback_params[2] = pData->caller_params;
-
- /* Use same C function for all methods */
-
- /* php func prototype: function user_func($method_name, $xmlrpc_params, $user_params) */
- call_user_function(CG(function_table), NULL, pData->php_function, pData->return_data, 3, callback_params TSRMLS_CC);
-
- pData->php_executed = 1;
-
- zval_dtor(xmlrpc_params);
- FREE_ZVAL(xmlrpc_params);
-
- return NULL;
-}
-
-/* called by the C server when it first receives an introspection request. We pass this on to
- * our PHP listeners, if any
- */
-static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data)
-{
- zval *retval_ptr, **php_function;
- zval* callback_params[1];
- xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(retval_ptr);
- Z_TYPE_P(retval_ptr) = IS_NULL;
-
- /* setup data hoojum */
- callback_params[0] = pData->caller_params;
-
- /* loop through and call all registered callbacks */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(pData->server->introspection_map));
- while(1) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(pData->server->introspection_map),
- (void**)&php_function) == SUCCESS) {
-
- /* php func prototype: function string user_func($user_params) */
- if(call_user_function(CG(function_table), NULL, *php_function,
- retval_ptr, 1, callback_params TSRMLS_CC) == SUCCESS) {
- XMLRPC_VALUE xData;
- STRUCT_XMLRPC_ERROR err = {0};
-
- /* return value should be a string */
- convert_to_string(retval_ptr);
-
- xData = XMLRPC_IntrospectionCreateDescription(Z_STRVAL_P(retval_ptr), &err);
-
- if(xData) {
- if(!XMLRPC_ServerAddIntrospectionData(server, xData)) {
- zend_error(E_WARNING, "Unable to add introspection data returned from %s(), improper element structure", Z_STRVAL_PP(php_function));
- }
- XMLRPC_CleanupValue(xData);
- }
- else {
- /* could not create description */
- if(err.xml_elem_error.parser_code) {
- zend_error(E_WARNING, "xml parse error: [line %i, column %i, message: %s] Unable to add introspection data returned from %s()",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error, Z_STRVAL_PP(php_function));
- }
- else {
- zend_error(E_WARNING, "Unable to add introspection data returned from %s()",
- Z_STRVAL_PP(php_function));
- }
- }
- }
- else {
- /* user func failed */
- zend_error(E_WARNING, "Error calling user introspection callback: %s()", Z_STRVAL_PP(php_function));
- }
- }
- else {
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(pData->server->introspection_map));
- }
-
- /* so we don't call the same callbacks ever again */
- zend_hash_clean(Z_ARRVAL_P(pData->server->introspection_map));
-}
-
-/* {{{ proto boolean xmlrpc_server_register_method(handle server, string method_name, string function)
- Register a PHP function to handle method matching method_name */
-PHP_FUNCTION(xmlrpc_server_register_method)
-{
- zval* method_key, *method_name, *handle, *method_name_save;
- int type;
- xmlrpc_server_data* server;
-
- /* get some params. should be 3 */
- if( !(ARG_COUNT(ht) == 3) || getParameters(ht, ARG_COUNT(ht), &handle, &method_key, &method_name) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* register with C engine. every method just calls our standard callback,
- * and it then dispatches to php as necessary
- */
- if(XMLRPC_ServerRegisterMethod(server->server_ptr, Z_STRVAL_P(method_key), php_xmlrpc_callback)) {
- /* save for later use */
- MAKE_STD_ZVAL(method_name_save);
- *method_name_save = *method_name;
- zval_copy_ctor(method_name_save);
-
- /* register our php method */
- add_zval(server->method_map, Z_STRVAL_P(method_key), &method_name_save);
-
- RETURN_BOOL(1);
- }
- }
- RETURN_BOOL(0);
-}
-
-
-/* {{{ proto boolean xmlrpc_server_register_introspection_callback(handle server, string function)
- Register a PHP function to generate documentation */
-PHP_FUNCTION(xmlrpc_server_register_introspection_callback)
-{
- zval* method_name, *handle, *method_name_save;
- int type;
- xmlrpc_server_data* server;
-
- /* get some params. should be 2 */
- if( !(ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &handle, &method_name) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if(type == le_xmlrpc_server) {
- {
- /* save for later use */
- MAKE_STD_ZVAL(method_name_save);
- *method_name_save = *method_name;
- zval_copy_ctor(method_name_save);
-
- /* register our php method */
- add_zval(server->introspection_map, NULL, &method_name_save);
-
- RETURN_BOOL(1);
- }
- }
- RETURN_BOOL(0);
-}
-
-
-/* this function is itchin for a re-write */
-
-/* {{{ proto mixed xmlrpc_server_call_method(handle server, string xml, mixed user_data [, array output_options])
- Parses XML requests and call methods */
-PHP_FUNCTION(xmlrpc_server_call_method)
-{
- xmlrpc_callback_data data = {0};
- XMLRPC_REQUEST xRequest;
- STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS input_opts;
- xmlrpc_server_data* server;
- zval *rawxml, *caller_params, *handle, *output_opts;
- int type;
- php_output_options out;
-
- /* get params. 3 or 4 params ok */
- if(ARG_COUNT(ht) == 4) {
- if(getParameters(ht, ARG_COUNT(ht), &handle, &rawxml, &caller_params, &output_opts) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
-
- /* user output options */
- set_output_options(&out, output_opts);
- }
- else if(ARG_COUNT(ht) == 3) {
- if(getParameters(ht, ARG_COUNT(ht), &handle, &rawxml, &caller_params) != SUCCESS) {
- WRONG_PARAM_COUNT;
- }
- /* user output options */
- set_output_options(&out, NULL);
- }
- else {
- WRONG_PARAM_COUNT;
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* HACK: use output encoding for now */
- input_opts.xml_elem_opts.encoding = utf8_get_encoding_id_from_string(out.xmlrpc_out.xml_elem_opts.encoding);
-
- /* generate an XMLRPC_REQUEST from the raw xml input */
- xRequest = XMLRPC_REQUEST_FromXML(Z_STRVAL_P(rawxml), Z_STRLEN_P(rawxml), &input_opts);
-
- if(xRequest) {
- const char* methodname = XMLRPC_RequestGetMethodName(xRequest);
- zval** php_function;
- XMLRPC_VALUE xAnswer = NULL;
- MAKE_STD_ZVAL(data.xmlrpc_method); /* init. very important. spent a frustrating day finding this out. */
- MAKE_STD_ZVAL(data.return_data);
- Z_TYPE_P(data.return_data) = IS_NULL; /* in case value is never init'd, we don't dtor to think it is a string or something */
- Z_TYPE_P(data.xmlrpc_method) = IS_NULL;
-
- if (!methodname) {
- methodname = "";
- }
-
- /* setup some data to pass to the callback function */
- Z_STRVAL_P(data.xmlrpc_method) = estrdup(methodname);
- Z_STRLEN_P(data.xmlrpc_method) = strlen(methodname);
- Z_TYPE_P(data.xmlrpc_method) = IS_STRING;
- data.caller_params = caller_params;
- data.php_executed = 0;
- data.server = server;
-
- /* check if the called method has been previous registered */
- if(zend_hash_find(Z_ARRVAL_P(server->method_map),
- Z_STRVAL_P(data.xmlrpc_method),
- Z_STRLEN_P(data.xmlrpc_method) + 1,
- (void**)&php_function) == SUCCESS) {
-
- data.php_function = *php_function;
- }
-
- /* We could just call the php method directly ourselves at this point, but we do this
- * with a C callback in case the xmlrpc library ever implements some cool usage stats,
- * or somesuch.
- */
- xAnswer = XMLRPC_ServerCallMethod(server->server_ptr, xRequest, &data);
- if(xAnswer) {
- if(out.b_php_out) {
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
- data.return_data = XMLRPC_to_PHP(xAnswer);
- }
- }
- else if(data.php_executed) {
- if(!out.b_php_out) {
- xAnswer = PHP_to_XMLRPC(data.return_data);
- }
- }
-
- /* should we return data as xml? */
- if(!out.b_php_out) {
- XMLRPC_REQUEST xResponse = XMLRPC_RequestNew();
- if(xResponse) {
- char* outBuf = 0;
- int buf_len = 0;
-
- /* automagically determine output serialization type from request type */
- if (out.b_auto_version) {
- XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
- if (opts) {
- out.xmlrpc_out.version = opts->version;
- }
- }
-
- /* automagically determine output serialization type from request type */
- if (out.b_auto_version) {
- XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
- if (opts) {
- out.xmlrpc_out.version = opts->version;
- }
- }
- /* set some required request hoojum */
- XMLRPC_RequestSetOutputOptions(xResponse, &out.xmlrpc_out);
- XMLRPC_RequestSetRequestType(xResponse, xmlrpc_request_response);
- XMLRPC_RequestSetData(xResponse, xAnswer);
- XMLRPC_RequestSetMethodName(xResponse, methodname);
-
- /* generate xml */
- outBuf = XMLRPC_REQUEST_ToXML(xResponse, &buf_len);
- if(outBuf) {
- RETVAL_STRINGL(outBuf, buf_len, 1);
- free(outBuf);
- }
- /* cleanup after ourselves. what a sty! */
- XMLRPC_RequestFree(xResponse, 0);
- }
- }
- /* or as native php types? */
- else {
- *return_value = *data.return_data;
- zval_copy_ctor(return_value);
- }
-
- /* cleanup after ourselves. what a sty! */
- zval_dtor(data.xmlrpc_method);
- FREE_ZVAL(data.xmlrpc_method);
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
-
- if(xAnswer) {
- XMLRPC_CleanupValue(xAnswer);
- }
-
- XMLRPC_RequestFree(xRequest, 1);
- }
- }
-}
-
-
-/* {{{ proto int xmlrpc_server_add_introspection_data(handle server, array desc)
- Adds introspection documentation */
-PHP_FUNCTION(xmlrpc_server_add_introspection_data)
-{
- zval *handle, *desc;
- int type;
- xmlrpc_server_data* server;
-
- /* get some params. should be 2 */
- if ( !(ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &handle, &desc) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- server = zend_list_find(Z_LVAL_P(handle), &type);
-
- if (type == le_xmlrpc_server) {
- XMLRPC_VALUE xDesc = PHP_to_XMLRPC(desc);
- if (xDesc) {
- int retval = XMLRPC_ServerAddIntrospectionData(server->server_ptr, xDesc);
- XMLRPC_CleanupValue(xDesc);
- RETURN_LONG(retval);
- }
- }
- RETURN_LONG(0);
-}
-
-
-/* {{{ proto array xmlrpc_parse_method_descriptions(string xml)
- Decodes XML into a list of method descriptions */
-PHP_FUNCTION(xmlrpc_parse_method_descriptions)
-{
- zval* arg1, *retval;
-
- if( !(ARG_COUNT(ht) == 1) || getParameters(ht, ARG_COUNT(ht), &arg1) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- convert_to_string(arg1);
-
- if(return_value_used) {
- STRUCT_XMLRPC_ERROR err = {0};
- XMLRPC_VALUE xVal = XMLRPC_IntrospectionCreateDescription(Z_STRVAL_P(arg1), &err);
- if(xVal) {
- retval = XMLRPC_to_PHP(xVal);
-
- if(retval) {
- *return_value = *retval;
- zval_copy_ctor(return_value);
- }
- /* dust, sweep, and mop */
- XMLRPC_CleanupValue(xVal);
- }
- else {
- /* could not create description */
- if(err.xml_elem_error.parser_code) {
- zend_error(E_WARNING, "xml parse error: [line %i, column %i, message: %s] Unable to create introspection data",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error);
- }
- else {
- zend_error(E_WARNING, "Invalid xml structure. Unable to create introspection data");
- }
-
- zend_error(E_WARNING, "xml parse error. no method description created");
- }
- }
-}
-
-
-/************
-* type data *
-************/
-
-#define XMLRPC_TYPE_COUNT 9
-#define XMLRPC_VECTOR_TYPE_COUNT 4
-#define TYPE_STR_MAP_SIZE (XMLRPC_TYPE_COUNT + XMLRPC_VECTOR_TYPE_COUNT)
-
-/* return a string matching a given xmlrpc type */
-static const char** get_type_str_mapping(void)
-{
- static const char* str_mapping[TYPE_STR_MAP_SIZE];
- static int first = 1;
- if (first) {
- /* warning. do not add/delete without changing size define */
- str_mapping[xmlrpc_none] = "none";
- str_mapping[xmlrpc_empty] = "empty";
- str_mapping[xmlrpc_base64] = "base64";
- str_mapping[xmlrpc_boolean] = "boolean";
- str_mapping[xmlrpc_datetime] = "datetime";
- str_mapping[xmlrpc_double] = "double";
- str_mapping[xmlrpc_int] = "int";
- str_mapping[xmlrpc_string] = "string";
- str_mapping[xmlrpc_vector] = "vector";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_none] = "none";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_array] = "array";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_mixed] = "mixed";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_struct] = "struct";
- first = 0;
- }
- return (const char**)str_mapping;
-}
-
-/* map an xmlrpc type to a string */
-const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype)
-{
- const char** str_mapping = get_type_str_mapping();
-
- if (vtype == xmlrpc_vector_none) {
- return str_mapping[type];
- } else {
- return str_mapping[XMLRPC_TYPE_COUNT + vtype];
- }
-}
-
-/* map a string to an xmlrpc type */
-XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str)
-{
- const char** str_mapping = get_type_str_mapping();
- int i;
-
- if (str) {
- for (i = 0; i < XMLRPC_TYPE_COUNT; i++) {
- if (!strcmp(str_mapping[i], str)) {
- return (XMLRPC_VALUE_TYPE) i;
- }
- }
- }
- return xmlrpc_none;
-}
-
-/* map a string to an xmlrpc vector type */
-XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str)
-{
- const char** str_mapping = get_type_str_mapping();
- int i;
-
- if (str) {
- for (i = XMLRPC_TYPE_COUNT; i < TYPE_STR_MAP_SIZE; i++) {
- if (!strcmp(str_mapping[i], str)) {
- return (XMLRPC_VECTOR_TYPE) (i - XMLRPC_TYPE_COUNT);
- }
- }
- }
- return xmlrpc_none;
-}
-
-
-/* set a given value to a particular type.
- * note: this only works on strings, and only for date and base64,
- * which do not have native php types. black magic lies herein.
- */
-int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type)
-{
- int bSuccess = FAILURE;
-
- /* we only really care about strings because they can represent
- * base64 and datetime. all other types have corresponding php types
- */
- if (Z_TYPE_P(value) == IS_STRING) {
- if (type == xmlrpc_base64 || type == xmlrpc_datetime) {
- const char* typestr = xmlrpc_type_as_str(type, xmlrpc_vector_none);
- zval* type;
-
- MAKE_STD_ZVAL(type);
-
- Z_TYPE_P(type) = IS_STRING;
- Z_STRVAL_P(type) = estrdup(typestr);
- Z_STRLEN_P(type) = strlen(typestr);
-
- convert_to_object(value);
- bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL);
- }
- }
-
- return bSuccess;
-}
-
-/* return xmlrpc type of a php value */
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue)
-{
- XMLRPC_VALUE_TYPE type = xmlrpc_none;
-
- if (value) {
- switch (Z_TYPE_P(value)) {
- case IS_NULL:
- type = xmlrpc_base64;
- break;
- #ifndef BOOL_AS_LONG
-
- /* Right thing to do, but it breaks some legacy code. */
- case IS_BOOL:
- type = xmlrpc_boolean;
- break;
- #else
- case IS_BOOL:
- #endif
- case IS_LONG:
- case IS_RESOURCE:
- type = xmlrpc_int;
- break;
- case IS_DOUBLE:
- type = xmlrpc_double;
- break;
- case IS_CONSTANT:
- type = xmlrpc_string;
- break;
- case IS_STRING:
- type = xmlrpc_string;
- break;
- case IS_ARRAY:
- case IS_CONSTANT_ARRAY:
- type = xmlrpc_vector;
- break;
- case IS_OBJECT:
- {
- zval** attr;
- type = xmlrpc_vector;
-
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void**) &attr) == SUCCESS) {
- if (Z_TYPE_PP(attr) == IS_STRING) {
- type = xmlrpc_str_as_type(Z_STRVAL_PP(attr));
- }
- }
- break;
- }
- }
-
- /* if requested, return an unmolested (magic removed) copy of the value */
- if (newvalue) {
- zval** val;
-
- if ((type == xmlrpc_base64 && Z_TYPE_P(value) != IS_NULL) || type == xmlrpc_datetime) {
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_VALUE_ATTR, sizeof(OBJECT_VALUE_ATTR), (void**) &val) == SUCCESS) {
- *newvalue = *val;
- }
- } else {
- *newvalue = value;
- }
- }
- }
-
- return type;
-}
-
-
-/* {{{ proto bool xmlrpc_set_type(string value, string type)
- Sets xmlrpc type, base64 or datetime, for a PHP string value */
-PHP_FUNCTION(xmlrpc_set_type)
-{
- zval* arg, *type;
- XMLRPC_VALUE_TYPE vtype;
-
- if (!(ARG_COUNT(ht) == 2) || getParameters(ht, ARG_COUNT(ht), &arg, &type) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-#if ZEND_MODULE_API_NO < 20010901
- if (!ParameterPassedByReference(ht,1)) {
- zend_error(E_WARNING,"first argument to xmlrpc_set_type() passed by value, expecting reference");
- }
-#endif
-
- convert_to_string(type);
- vtype = xmlrpc_str_as_type(Z_STRVAL_P(type));
- if (vtype != xmlrpc_none) {
- if (set_zval_xmlrpc_type(arg, vtype) == SUCCESS) {
- RETURN_TRUE;
- }
- } else {
- zend_error(E_WARNING,"invalid type '%s' passed to xmlrpc_set_type()", Z_STRVAL_P(type));
- }
- RETURN_FALSE;
-}
-
-/* {{{ proto string xmlrpc_get_type(mixed value)
- Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings */
-PHP_FUNCTION(xmlrpc_get_type)
-{
- zval* arg;
- XMLRPC_VALUE_TYPE type;
- XMLRPC_VECTOR_TYPE vtype = xmlrpc_vector_none;
-
- if (!(ARG_COUNT(ht) == 1) || getParameters(ht, ARG_COUNT(ht), &arg) == FAILURE) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- type = get_zval_xmlrpc_type(arg, 0);
- if (type == xmlrpc_vector) {
- vtype = determine_vector_type(Z_ARRVAL_P(arg));
- }
-
- RETURN_STRING((char*) xmlrpc_type_as_str(type, vtype), 1);
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
diff --git a/ext/xmlrpc/xmlrpc.dsp b/ext/xmlrpc/xmlrpc.dsp
deleted file mode 100644
index f5164ae3da..0000000000
--- a/ext/xmlrpc/xmlrpc.dsp
+++ /dev/null
@@ -1,211 +0,0 @@
-# Microsoft Developer Studio Project File - Name="xmlrpc" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xmlrpc - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xmlrpc.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xmlrpc.mak" CFG="xmlrpc - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xmlrpc - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xmlrpc - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xmlrpc - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libxmlrpc" /I "..\xml\expat" /D HAVE_XMLRPC=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D ZTS=1 /D COMPILE_DL_XMLRPC=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "_DEBUG"
-# ADD RSC /l 0x1009 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 iconv.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_xmlrpc.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "xmlrpc - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libxmlrpc" /I "..\xml\expat" /D HAVE_XMLRPC=1 /D "ZEND_WIN32" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D ZTS=1 /D COMPILE_DL_XMLRPC=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "NDEBUG"
-# ADD RSC /l 0x1009 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 iconv.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xmlrpc.dll" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "xmlrpc - Win32 Debug_TS"
-# Name "xmlrpc - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=".\xmlrpc-epi-php.c"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_xmlrpc.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Group "libxmlrpc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\libxmlrpc\base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\encodings.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\encodings.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\queue.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\queue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\simplestring.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\simplestring.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\system_methods.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\system_methods_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_element.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_element.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_dandarpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_dandarpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_soap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_soap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_xmlrpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_xmlrpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_private.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/xslt/README.XSLT-BACKENDS b/ext/xslt/README.XSLT-BACKENDS
deleted file mode 100644
index 5392e5826d..0000000000
--- a/ext/xslt/README.XSLT-BACKENDS
+++ /dev/null
@@ -1,284 +0,0 @@
-+------------------------------------------------------------------------------+
-| CREATING XSLT BACKENDS |
-+------------------------------------------------------------------------------+
-
- Author(s): Sterling Hughes <sterling@php.net>
-
- Introduction
- -------------------------------------------------------------------------------
- Truth be told, at this point in time there are about a zillion and two
- different XSLT libraries, each with their own unique merits and faults. If you
- provide a Sablotron extension, people will clamor for a Xalan extension, if you
- provide a Xalan extension people will clamor for a libxslt extension.
-
- In order to be as user friendly as possible, we try and provide the most
- options to the user. At the same time we must try to keep a level of
- consistency, so the user does not need to remember 15 different syntaxes, etc.
- for each XSLT extension, and when switching from XSLT backends, no changes in
- the PHP code should be necessary (akin to the concept of a database independent
- api, but with XSLT libraries).
-
- At the same time, you'll also notice that in some cases extensions seem to
- duplicate each others functionality. All extensions need code for calling
- user-defined handlers, omitting debug messages, etc. In the interests of
- laziness, we must also try to make these as minimal as possible.
-
- Therefore, I've created a processor independent api for XSLT, aka, the XSLT
- extension (but doesn't "A processor independent API for XSLT" sound cooler?).
- It defines a set of functions which every XSLT backend must provide, as well
- as a syntax which those functions must adhere to. Furthermore, the underlying
- code, provides a "library" if you will, of code that is relevant to all XSLT
- extensions.
-
- The API
- -------------------------------------------------------------------------------
- Every extension must define the following functions:
-
- - xslt_sax_create()
- - xslt_sax_set_scheme_handlers()
- - xslt_sax_set_sax_handlers()
- - xslt_sax_set_error_handler()
- - xslt_sax_set_log()
- - xslt_sax_process()
- - xslt_error()
- - xslt_errno()
- - xslt_sax_free()
-
- These functions are common or implementable with every single XSLT library that
- I've come across so far (at least every C library) and should there for be
- defined by the extension.
-
-
- resource xslt_sax_create(void)
-
- The XSLT create function allocates a new XSLT processor and returns a resource
- pointer to the XSLT processor. It also handles any initialization that the
- processor requires.
-
-
- void xslt_sax_set_scheme_handlers(resource processor, array handlers)
-
- Registers the scheme handlers for the document (aka XPath handlers), given a
- XSLT processor resource (allocated by xslt_sax_create()) and an array in the
- following format:
-
- array(
- "get_all" => function,
- "open" => function,
- "get" => function,
- "put" => function,
- "close" => function
- )
-
- Where function is either a function name or an array in the following format:
-
- array(&$obj, "method")
-
- Note: You do not need to handle the array(&$obj, "method") syntax by yourself
- as this is handled in the call_xslt_function() library function (and
- more specifically, Zend's call_user_function_ex() function.
- Note: The given array does not need to contain all of the different scheme
- handler elements (although it can), but it only needs to conform to
- the "handler" => "function" format described above.
-
- Each of the individual scheme handler functions called are in the formats
- below:
-
- string get_all(resource processor, string scheme, string rest)
- resource open(resource processor, string scheme, string rest)
- int get(resource processor, resource fp, string &data)
- int put(resource processor, resource fp, string data)
- void close(resource processor, resource fp)
-
-
- void xslt_sax_set_sax_handlers(resource processor, array handlers)
-
- Registers the SAX handlers for the document, given a XSLT processor resource
- (allocated by xslt_sax_create()) and an array in the following format:
-
- array(
- "document" => array(document_start_function,
- document_end_function),
- "element" => array(element_start_function,
- element_end_function),
- "namespace" => array(namespace_start_function,
- namespace_end_function),
- "comment" => function,
- "pi" => function,
- "character" => function
- )
-
- Where the functions follow the syntax described for the scheme handler
- functions.
-
- Each of the individual SAX handler functions are in the format below:
-
- void start_doc(resource processor)
- void end_doc(resource processor)
- void start_element(resource processor, string name, array attributes)
- void end_element(resource processor, string name)
- void start_namespace(resource processor, string prefix, string uri)
- void end_namespace(resource processor, string prefix)
- void comment(resource processor, string contents)
- void pi(resource processor, string target, string contents)
- void characters(resource processor, string contents)
-
-
- void xslt_sax_set_error_handler(resource processor, function error_handler)
-
- This function sets the user defined error handler to be called when a
- processing or any other type of error occurs. It is given a XSLT
- processor resource (allocated by xslt_sax_create()) and an error function of
- the same syntax described for the scheme handler function.
-
- The user defined error handler as the following syntax:
-
- void error(resource processor, int level, int error, array info)
-
-
- void xslt_sax_set_log(resource processor, string logname)
-
- Sets the XSLT log to record log information (processor messages, not errors).
- Its given a XSLT processor (allocated by xslt_sax_create()) and a string containing
- the name of the log file. If the string is "php://stderr" then the logging
- should go to standard error (stderr). Also the default place to send log
- messages is standard error (if no log file is set).
-
-
- mixed xslt_sax_process(resource processor,
- string xml,
- string xsl[,
- string result[,
- array arguments[,
- array parameters]]])
-
- This function performs the magic, it takes the user's data, performs the
- transformation and depending on the context either saves the result to a file
- or returns the data to the user.
-
- To understand the way the xslt_sax_process() function works, you must first
- understand the concept of "argument buffers". Argument buffers are equivalent
- to the concept of symlinks on a Unix system, take the following example:
-
- <?php
-
- /**
- * $xml contains the contents of an XML file and $xsl contains
- * the contents of an XSLT stylesheet
- */
- $args = array("/_xml" => $xml,
- "/_xsl" => $xsl);
-
- $xh = xslt_sax_create();
- $data = xslt_sax_process($xh, "arg:/_xml", "arg:/_xsl", NULL, $args);
- xslt_sax_free($xh);
-
- print( "The results of the transformation were\n" );
- print( "<br>\n<hr>\n<br>" );
- print( $data );
- print( "<br>\n<hr>\n<br>" );
- ?>
-
- See what was done? The argument buffer was declared ($args) and the different
- arguments were defined. Then when the xslt_sax_process() function was called
- instead of giving the XML filename and XSLT filename we instead gave
- "arguments", which correspond to the XML and XSLT data in the argument buffers.
-
- This concept is a bit foreign to some people, however, I find it the best way
- to handle processing xsl data. If you're still having trouble with this, try
- playing around with the sablotron backend a bit, you should be able to catch on
- pretty quickly.
-
- In order to use argument buffers, the XSLT extension provides a couple of easy
- to use API functions, you can use them as follows:
-
- {
- zval **arguments_zp;
- char **arguments_cp;
- xslt_args *arguments;
- char *types[] = { "file", "data" };
-
- /* Fetch the arguments from the user into a zval ** */
-
- /* Translate the zval array into a character array */
- xslt_make_array(&arguments_cp, arguments_zp);
-
- /* Translate the character array into an xslt_arg * structure */
- arguments = xslt_parse_arguments(arguments_cp);
-
- /* Print out the resulting xslt_arg * structure */
- php_printf("XML type: %s\n", types[arguments->xml.type]);
- php_printf("XML data: %s\n", arguments->xml.ptr);
- PUTS("\n");
- php_printf("XSLT type: %s\n", types[arguments->xsl.type]);
- php_printf("XSLT data: %s\n", arguments->xsl.ptr);
- PUTS("\n");
- php_printf("Result type: %s\n", types[arguments->result.type]);
- php_printf("Result data: %s\n", arguments->result.ptr);
- PUTS("\n");
- }
-
- You can also test the "type" field by using the XSLT_IS_FILE and XSLT_IS_DATA
- constants.
-
- Anyway back to the syntax of the xslt_process() function. The first argument
- to the xslt_process() function is a resource pointer to the XSLT processor to
- be used. The second argument is either an "argument buffer" pointing to the
- XML data or the name of a file containing the XML data. The third argument is
- either an argument buffer pointing to the XSLT data or a file containing the
- XSLT data. The fourth argument is optional, it either contains the name of the
- file to place the results of the transformation into, NULL or "arg:/_result",
- in the latter 2 cases, the results of the transformation will be returned. The
- fifth optional argument is the "argument buffer" itself, it is an associative
- PHP array of "argument_name" => "value" pairs, or NULL, if no arguments are to
- be passed. The final optional argument is a set of parameters to pass to the
- XSLT stylesheet. The parameter argument is an associative array of
- "parameter_name" => "value" pairs.
-
-
- string xslt_error(resource processor)
-
- The xslt_error() function returns the last error that occured, given a XSLT
- processor resource (allocated by xslt_sax_create()).
-
-
- int xslt_errno(resource processor)
-
- The xslt_errno() function returns the last error number that occured given a
- XSLT processor resource (allocated by xslt_sax_create()).
-
-
- void xslt_sax_free(resource processor)
-
- The xslt_free() function free's the given XSLT processor resource (allocated
- by xslt_sax_create()).
-
-
- Config.m4
- -------------------------------------------------------------------------------
-
- The XSLT extension's "magic" really occurs in the config.m4 file. Here you
- must add a couple of things in order for your backend to be enabled. Its a bit
- too complex to describe (but easy to implement and understand). Take a look at
- config.m4 (which is well commented) to see what is necessary.
-
-
- Makefile.in
- -------------------------------------------------------------------------------
-
- Simply add the source files for your backend to the LTLIBRARY_SOURCES variable
- and you're all set with this file.
-
-
- Conclusion
- -------------------------------------------------------------------------------
-
- Nobody's perfect, I'm sure I've made some mistakes while thinking this whole
- thing through and I would be glad to hear from any of you who think I'm a
- colossal moron and think you have a better way to do it. Please e-mail at
- sterling@php.net, this extension will only get better with feedback.
-
- With that said, the concepts here may take a little bit of time to sink in, I
- know I've written a whole lot. My suggestion to you, if you're planning on
- writing an XSLT backend is simply to go off and implement, taking the api
- section as a guide and making sure you match that api as closely as possible.
diff --git a/ext/xslt/config.m4 b/ext/xslt/config.m4
deleted file mode 100644
index 358e5c29c8..0000000000
--- a/ext/xslt/config.m4
+++ /dev/null
@@ -1,111 +0,0 @@
-dnl
-dnl $Id$
-dnl
-dnl +------------------------------------------------------------------------------+
-dnl | This is where the magic of the extension reallly is. Depending on what |
-dnl | backend the user chooses, this script performs the magic |
-dnl +------------------------------------------------------------------------------+
-
-PHP_ARG_ENABLE(xslt, whether to enable xslt support,
-[ --enable-xslt Enable xslt support.])
-
-PHP_ARG_WITH(xslt-sablot, for XSLT Sablotron backend,
-[ --with-xslt-sablot=DIR XSLT: Enable the sablotron backend.])
-
-PHP_ARG_WITH(expat-dir, libexpat dir for Sablotron XSL support,
-[ --with-expat-dir=DIR XSLT: libexpat dir for Sablotron])
-
-PHP_ARG_WITH(sablot-js, enable JavaScript for Sablotron,
-[ --with-sablot-js=DIR Sablotron: enable JavaScript support for Sablotron])
-
-if test "$PHP_XSLT" != "no"; then
-
- PHP_NEW_EXTENSION(xslt, xslt.c sablot.c, $ext_shared)
- PHP_SUBST(XSLT_SHARED_LIBADD)
-
- if test "$PHP_XSLT_SABLOT" != "no"; then
- XSLT_CHECK_DIR=$PHP_XSLT_SABLOT
- XSLT_TEST_FILE=/include/sablot.h
- XSLT_BACKEND_NAME=Sablotron
- XSLT_LIBNAME=sablot
- fi
-
- if test -z "$XSLT_BACKEND_NAME"; then
- AC_MSG_ERROR([No backend specified for XSLT extension.])
- fi
-
- condition="$XSLT_CHECK_DIR$XSLT_TEST_FILE"
-
- if test -r $condition; then
- XSLT_DIR=$XSLT_CHECK_DIR
- else
- AC_MSG_CHECKING(for $XSLT_BACKEND_NAME libraries in the default path)
- for i in /usr /usr/local; do
- condition="$i$XSLT_TEST_FILE"
- if test -r $condition; then
- XSLT_DIR=$i
- AC_MSG_RESULT(found $XSLT_BACKEND_NAME in $i)
- fi
- done
- fi
-
- if test -z "$XSLT_DIR"; then
- AC_MSG_ERROR([not found. Please re-install the $XSLT_BACKEND_NAME distribution.])
- fi
-
- if test "$PHP_XSLT_SABLOT" != "no"; then
- found_expat=no
- for i in $PHP_EXPAT_DIR $XSLT_DIR /usr/local /usr; do
- if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then
- AC_DEFINE(HAVE_LIBEXPAT2, 1, [ ])
- PHP_ADD_INCLUDE($i/include)
- PHP_ADD_LIBRARY_WITH_PATH(expat, $i/lib, XSLT_SHARED_LIBADD)
- found_expat=yes
- break
- fi
- done
-
- if test "$found_expat" = "no"; then
- AC_MSG_ERROR([expat not found. To build sablotron you need the expat library.])
- fi
-
- if test "$PHP_ICONV" = "no"; then
- PHP_ICONV=yes
- fi
-
- PHP_SETUP_ICONV(XSLT_SHARED_LIBADD, [], [
- AC_MSG_ERROR([iconv not found. To build sablotron you need the iconv library.])
- ])
-
- if test "$PHP_SABLOT_JS" != "no"; then
- for i in /usr/local /usr $PHP_SABLOT_JS; do
- if test -f $i/lib/libjs.a -o -f $i/lib/libjs.$SHLIB_SUFFIX_NAME; then
- PHP_SABLOT_JS_DIR=$i
- fi
- done
-
- PHP_CHECK_LIBRARY(js, JS_GetRuntime,
- [
- PHP_ADD_LIBRARY_WITH_PATH(js, $PHP_SABLOT_JS_DIR/lib, XSLT_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR([libjs not found. Please check config.log for more information.])
- ], [
- -L$PHP_SABLOT_JS_DIR/lib
- ])
- fi
-
- PHP_CHECK_LIBRARY(sablot, SablotSetEncoding,
- [
- AC_DEFINE(HAVE_SABLOT_SET_ENCODING, 1, [ ])
- ], [], [
- -L$XSLT_DIR/lib
- ])
-
- AC_DEFINE(HAVE_SABLOT_BACKEND, 1, [ ])
- fi
-
- PHP_ADD_INCLUDE($XSLT_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH($XSLT_LIBNAME, $XSLT_DIR/lib, XSLT_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_XSLT, 1, [ ])
-fi
diff --git a/ext/xslt/php_sablot.h b/ext/xslt/php_sablot.h
deleted file mode 100644
index a0304437b5..0000000000
--- a/ext/xslt/php_sablot.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_XSLT_H
-#define PHP_XSLT_H
-
-#include "php.h"
-
-#if HAVE_SABLOT_BACKEND
-
-#include "php_xslt.h"
-
-#include <sablot.h>
-
-extern zend_module_entry xslt_module_entry;
-#define phpext_xslt_ptr &xslt_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XSLT_API __declspec(dllexport)
-#else
-#define PHP_XSLT_API
-#endif
-
-#define XSLT_SCHEME(handle) ((handle)->handlers->scheme)
-#define XSLT_SAX(handle) ((handle)->handlers->sax)
-#define XSLT_ERROR(handle) ((handle)->handlers->error)
-
-#define XSLT_PROCESSOR(handle) ((handle)->processor.ptr)
-#define XSLT_CONTEXT(handle) ((handle)->processor.ctx)
-
-#define XSLT_ERRNO(handle) ((handle)->err->no)
-#define XSLT_ERRSTR(handle) ((handle)->err->str)
-#define XSLT_LOG(handle) ((handle)->err->log)
-
-#define XSLT_FUNCH_FREE(__var) if (__var) zval_ptr_dtor(&(__var));
-
-PHP_MINIT_FUNCTION(xslt);
-PHP_MINFO_FUNCTION(xslt);
-
-PHP_FUNCTION(xslt_create);
-PHP_FUNCTION(xslt_set_sax_handlers);
-PHP_FUNCTION(xslt_set_scheme_handlers);
-PHP_FUNCTION(xslt_set_error_handler);
-PHP_FUNCTION(xslt_set_base);
-PHP_FUNCTION(xslt_set_encoding);
-PHP_FUNCTION(xslt_set_log);
-PHP_FUNCTION(xslt_process);
-PHP_FUNCTION(xslt_free);
-PHP_FUNCTION(xslt_error);
-PHP_FUNCTION(xslt_errno);
-
-struct scheme_handlers {
- zval *get_all;
- zval *open;
- zval *get;
- zval *put;
- zval *close;
-};
-
-struct sax_handlers {
- zval *doc_start;
- zval *element_start;
- zval *element_end;
- zval *namespace_start;
- zval *namespace_end;
- zval *comment;
- zval *pi;
- zval *characters;
- zval *doc_end;
-};
-
-struct xslt_handlers {
- struct scheme_handlers scheme;
- struct sax_handlers sax;
- zval *error;
-};
-
-struct xslt_processor {
- SablotSituation ctx;
- SablotHandle ptr;
- long idx;
-};
-
-struct xslt_log {
- char *path;
- int fd;
- int do_log;
-};
-
-struct xslt_error {
- struct xslt_log log;
- char *str;
- int no;
-};
-
-typedef struct {
- struct xslt_processor processor;
- struct xslt_handlers *handlers;
- struct xslt_error *err;
- int cacheable;
-} php_xslt;
-
-#else
-#define phpext_xslt_ptr NULL
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/xslt/php_xslt.h b/ext/xslt/php_xslt.h
deleted file mode 100644
index 371765ed23..0000000000
--- a/ext/xslt/php_xslt.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef _PHP_XSLT_H
-#define _PHP_XSLT_H
-
-#include "php.h"
-#include "ext/standard/php_filestat.h"
-
-#ifdef HAVE_XSLT
-
-#define XSLT_OBJ(__func) (&(__func)->obj)
-#define XSLT_FUNC(__func) ((__func)->func)
-
-#define XSLT_IS_FILE 0
-#define XSLT_IS_DATA 1
-
-struct xslt_function {
- zval *obj;
- zval *func;
-};
-
-struct _xslt_argument {
- char *ptr;
- int type;
-};
-
-typedef struct {
- struct _xslt_argument xml;
- struct _xslt_argument xsl;
- struct _xslt_argument result;
-} xslt_args;
-
-extern xslt_args *xslt_parse_arguments(char *, char *, char *, char **);
-extern void xslt_free_arguments(xslt_args *);
-
-extern void xslt_assign_handler(struct xslt_function **, zval **);
-extern void xslt_free_handler(struct xslt_function *);
-extern void xslt_call_function(char *, zval *, int, zval **, zval **);
-
-extern void xslt_debug(char *, char *, ...);
-
-extern void xslt_make_array(zval **zarr, char ***carr);
-extern void xslt_free_array(char **arr);
-
-#endif
-
-#endif
diff --git a/ext/xslt/sablot.c b/ext/xslt/sablot.c
deleted file mode 100644
index f591433e2e..0000000000
--- a/ext/xslt/sablot.c
+++ /dev/null
@@ -1,1635 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_xslt.h"
-#include "php_sablot.h"
-#include "ext/standard/info.h"
-
-#if HAVE_SABLOT_BACKEND
-
-#include <sablot.h>
-#include <sdom.h>
-
-#include <string.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-/* functions relating to handlers */
-static void register_sax_handler_pair(zval **, zval **, zval **);
-
-/* Free processor */
-static void free_processor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-/* Scheme handler functions */
-static int scheme_getall(void *, SablotHandle, const char *, const char *, char **, int *);
-static int scheme_freememory(void *, SablotHandle, char *);
-static int scheme_open(void *, SablotHandle, const char *, const char *, int *);
-static int scheme_get(void *, SablotHandle, int, char *, int *);
-static int scheme_put(void *, SablotHandle, int, const char *, int *);
-static int scheme_close(void *, SablotHandle, int);
-
-/* Sax handler functions */
-static SAX_RETURN sax_startdoc(void *, SablotHandle);
-static SAX_RETURN sax_startelement(void *, SablotHandle, const char *, const char **);
-static SAX_RETURN sax_endelement(void *, SablotHandle, const char *);
-static SAX_RETURN sax_startnamespace(void *, SablotHandle, const char *, const char *);
-static SAX_RETURN sax_endnamespace(void *, SablotHandle, const char *);
-static SAX_RETURN sax_comment(void *, SablotHandle, const char *);
-static SAX_RETURN sax_pi(void *, SablotHandle, const char *, const char *);
-static SAX_RETURN sax_characters(void *, SablotHandle, const char *, int);
-static SAX_RETURN sax_enddoc(void *, SablotHandle);
-
-/* Error handlers */
-static MH_ERROR error_makecode(void *, SablotHandle, int, unsigned short, unsigned short);
-static MH_ERROR error_log(void *, SablotHandle, MH_ERROR, MH_LEVEL, char **);
-static MH_ERROR error_print(void *, SablotHandle, MH_ERROR, MH_LEVEL, char **);
-
-/* Resource related */
-#define le_xslt_name "XSLT Processor"
-static int le_xslt;
-
-/* {{{ xslt_functions[]
- */
-function_entry xslt_functions[] = {
- PHP_FE(xslt_create, NULL)
- PHP_FE(xslt_set_sax_handlers, NULL)
- PHP_FE(xslt_set_scheme_handlers, NULL)
- PHP_FE(xslt_process, NULL)
- PHP_FE(xslt_set_base, NULL)
- PHP_FE(xslt_set_log, NULL)
- PHP_FE(xslt_set_error_handler, NULL)
-#ifdef HAVE_SABLOT_SET_ENCODING
- PHP_FE(xslt_set_encoding, NULL)
-#endif
- PHP_FE(xslt_free, NULL)
-
- PHP_FE(xslt_error, NULL)
- PHP_FE(xslt_errno, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ xslt_module_entry
- */
-zend_module_entry xslt_module_entry = {
- STANDARD_MODULE_HEADER,
- "xslt",
- xslt_functions,
- PHP_MINIT(xslt),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(xslt),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_XSLT
-ZEND_GET_MODULE(xslt)
-#endif
-
-/* {{{ handler structs
- A structure containing the sax handlers, automatically
- registered whether the user defines them or not */
-static SAXHandler sax_handlers =
-{
- sax_startdoc,
- sax_startelement,
- sax_endelement,
- sax_startnamespace,
- sax_endnamespace,
- sax_comment,
- sax_pi,
- sax_characters,
- sax_enddoc
-};
-
-/* Error handlers, automatically registered */
-static MessageHandler message_handler = {
- error_makecode,
- error_log,
- error_print
-};
-
-/* Scheme handlers automatically registered */
-static SchemeHandler scheme_handler = {
- scheme_getall,
- scheme_freememory,
- scheme_open,
- scheme_get,
- scheme_put,
- scheme_close
-};
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(xslt)
-{
- le_xslt = zend_register_list_destructors_ex(free_processor, NULL, le_xslt_name, module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(xslt)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "XSLT support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto resource xslt_create(void)
- Create a new XSLT processor */
-PHP_FUNCTION(xslt_create)
-{
- php_xslt *handle; /* The php -> sablotron handle */
- SablotSituation ctx; /* Sablotron situation */
- SablotHandle processor; /* The sablotron processor */
- int error; /* The error container */
-
- /* Allocate the php-sablotron handle */
- handle = ecalloc(1, sizeof(php_xslt));
- handle->handlers = ecalloc(1, sizeof(struct xslt_handlers));
- handle->err = ecalloc(1, sizeof(struct xslt_error));
-
- XSLT_LOG(handle).path = NULL;
-
- /* Unless SAX handlers are */
- handle->cacheable = 1;
-
- /* Allocate the processor ctx */
- error = SablotCreateSituation(&ctx);
- if (error) {
- XSLT_ERRNO(handle) = error;
- RETURN_FALSE;
- }
-
- XSLT_CONTEXT(handle) = ctx;
-
- /* Allocate the actual processor itself, via sablotron */
- error = SablotCreateProcessorForSituation(XSLT_CONTEXT(handle), &processor);
- if (error) {
- XSLT_ERRNO(handle) = error;
- RETURN_FALSE;
- }
-
- /* Save the processor and set the default handlers */
- XSLT_PROCESSOR(handle) = processor;
- SablotRegHandler(XSLT_PROCESSOR(handle), HLR_SAX, (void *) &sax_handlers, (void *) handle);
- SablotRegHandler(XSLT_PROCESSOR(handle), HLR_MESSAGE, (void *) &message_handler, (void *) handle);
- SablotRegHandler(XSLT_PROCESSOR(handle), HLR_SCHEME, (void *) &scheme_handler, (void *) handle);
-
- /* Register the processor as a resource and return it to the user */
- ZEND_REGISTER_RESOURCE(return_value, handle, le_xslt);
-
- /* The resource index, save it for later use */
- handle->processor.idx = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto void xslt_set_sax_handlers(resource processor, array handlers)
- Set the SAX handlers to be called when the XML document gets processed */
-PHP_FUNCTION(xslt_set_sax_handlers)
-{
- zval **processor_p, /* Resource pointer to the php->sablotron handle */
- **sax_handlers_p, /* Pointer to the sax handlers php array */
- **handler; /* Individual handler, or handler pair */
- HashTable *sax_handlers; /* PHP array of sax handlers */
- php_xslt *handle; /* Pointer to a php_xslt handle */
- char *string_key; /* String key for the hash */
- ulong num_key; /* (unused) hash's numerical key */
- int key_type; /* The type of the current hash key */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &processor_p, &sax_handlers_p) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- handle->cacheable = 0;
-
- /* Convert the sax_handlers_p zval ** to a hash table we can process */
- sax_handlers = HASH_OF(*sax_handlers_p);
- if (!sax_handlers) {
- php_error(E_WARNING, "Expecting an array as the second argument to xslt_set_sax_handlers()");
- return;
- }
-
- /* Loop through the HashTable containing the SAX handlers */
- for (zend_hash_internal_pointer_reset(sax_handlers);
- zend_hash_get_current_data(sax_handlers, (void **) &handler) == SUCCESS;
- zend_hash_move_forward(sax_handlers)) {
-
- key_type = zend_hash_get_current_key(sax_handlers, &string_key, &num_key, 0);
- if (key_type == HASH_KEY_IS_LONG) {
- convert_to_string_ex(handler);
- php_error(E_NOTICE, "Skipping numerical index %d (with value %s) in xslt_set_sax_handlers()",
- num_key, Z_STRVAL_PP(handler));
- continue;
- }
-
- /* Document handlers (document start, document end) */
- if (!strcmp(string_key, "document")) {
- SEPARATE_ZVAL(handler);
- register_sax_handler_pair(&XSLT_SAX(handle).doc_start,
- &XSLT_SAX(handle).doc_end,
- handler);
- }
- /* Element handlers, start of an element, and end of an element */
- else if (!strcmp(string_key, "element")) {
- SEPARATE_ZVAL(handler);
- register_sax_handler_pair(&XSLT_SAX(handle).element_start,
- &XSLT_SAX(handle).element_end,
- handler);
- }
- /* Namespace handlers, start of a namespace, end of a namespace */
- else if (!strcmp(string_key, "namespace")) {
- SEPARATE_ZVAL(handler);
- register_sax_handler_pair(&XSLT_SAX(handle).namespace_start,
- &XSLT_SAX(handle).namespace_end,
- handler);
- }
- /* Comment handlers, called when a comment is reached */
- else if (!strcmp(string_key, "comment")) {
- XSLT_SAX(handle).comment = *handler;
- zval_add_ref(&XSLT_SAX(handle).comment);
- }
- /* Processing instructions handler called when processing instructions
- (<? ?>) */
- else if (!strcmp(string_key, "pi")) {
- XSLT_SAX(handle).pi = *handler;
- zval_add_ref(&XSLT_SAX(handle).pi);
- }
- /* Character handler, called when data is found */
- else if (!strcmp(string_key, "character")) {
- XSLT_SAX(handle).characters = *handler;
- zval_add_ref(&XSLT_SAX(handle).characters);
- }
- /* Invalid handler name, tsk, tsk, tsk :) */
- else {
- php_error(E_WARNING, "Invalid option to xslt_set_sax_handlers(): %s", string_key);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto void xslt_set_scheme_handlers(resource processor, array handlers)
- Set the scheme handlers for the XSLT processor */
-PHP_FUNCTION(xslt_set_scheme_handlers)
-{
- zval **processor_p, /* Resource pointer to the php->sablotron handle */
- **scheme_handlers_p, /* Pointer to the scheme handler array */
- **handler; /* Individual scheme handler */
- zval **assign_handle; /* The handler to assign to */
- HashTable *scheme_handlers; /* Scheme handler array */
- php_xslt *handle; /* php->sablotron handle */
- char *string_key; /* Hash key (string) */
- ulong num_key; /* (unused) Hash key (number) */
- int key_type; /* The type of the current key */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &processor_p, &scheme_handlers_p) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- scheme_handlers = HASH_OF(*scheme_handlers_p);
- if (!scheme_handlers) {
- php_error(E_WARNING, "2nd argument to xslt_set_scheme_handlers() must be an array");
- return;
- }
-
- /* Loop through the scheme handlers array, setting the given
- scheme handlers */
- for (zend_hash_internal_pointer_reset(scheme_handlers);
- zend_hash_get_current_data(scheme_handlers, (void **) &handler) == SUCCESS;
- zend_hash_move_forward(scheme_handlers)) {
-
- key_type = zend_hash_get_current_key(scheme_handlers, &string_key, &num_key, 0);
- if (key_type == HASH_KEY_IS_LONG) {
- php_error(E_NOTICE, "Numerical key %d (with value %s) being ignored "
- "in xslt_set_scheme_handlers()",
- num_key, Z_STRVAL_PP(handler));
- continue;
- }
-
- /* Open the URI and return the whole string */
- if (!strcmp(string_key, "get_all")) {
- assign_handle = &XSLT_SCHEME(handle).get_all;
- }
- /* Open the URI and return a handle */
- else if (!strcmp(string_key, "open")) {
- assign_handle = &XSLT_SCHEME(handle).open;
- }
- /* Retrieve data from the URI */
- else if (!strcmp(string_key, "get")) {
- assign_handle = &XSLT_SCHEME(handle).get;
- }
- /* Save data to the URI */
- else if (!strcmp(string_key, "put")) {
- assign_handle = &XSLT_SCHEME(handle).put;
- }
- /* Close the URI */
- else if (!strcmp(string_key, "close")) {
- assign_handle = &XSLT_SCHEME(handle).close;
- }
- /* Invalid handler name */
- else {
- php_error(E_WARNING, "%s() invalid option '%s', skipping",
- get_active_function_name(TSRMLS_C), string_key);
- continue;
- }
-
- *assign_handle = *handler;
- zval_add_ref(assign_handle);
- }
-}
-/* }}} */
-
-/* {{{ proto void xslt_set_error_handler(resource processor, mixed error_func)
- Set the error handler, to be called when an XSLT error happens */
-PHP_FUNCTION(xslt_set_error_handler)
-{
- zval **processor_p, /* Resource Pointer to a PHP-XSLT processor */
- **error_func; /* Name of the user defined error function */
- php_xslt *handle; /* A PHP-XSLT processor */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &processor_p, &error_func) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- XSLT_ERROR(handle) = *error_func;
- zval_add_ref(&XSLT_ERROR(handle));
-}
-/* }}} */
-
-/* {{{ proto void xslt_set_base(resource processor, string base)
- Sets the base URI for all XSLT transformations */
-PHP_FUNCTION(xslt_set_base)
-{
- zval **processor_p, /* Resource Pointer to a PHP-XSLT processor */
- **base; /* The base URI for the transformation */
- php_xslt *handle; /* A PHP-XSLT processor */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &processor_p, &base) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
- convert_to_string_ex(base);
-
- /* Set the base */
- SablotSetBase(XSLT_PROCESSOR(handle), Z_STRVAL_PP(base));
-}
-/* }}} */
-
-/* {{{ proto void xslt_set_encoding(resource processor, string encoding)
- Set the output encoding for the current stylesheet */
-PHP_FUNCTION(xslt_set_encoding)
-{
-/* The user has to explicitly compile sablotron with sablotron
- encoding functions in order for SablotSetEncoding to be
- enabled. config.m4 automatically checks for this... */
-
-#ifdef HAVE_SABLOT_SET_ENCODING
- zval **processor_p, /* Resource Pointer to a PHP-XSLT processor */
- **encoding; /* The encoding to use for the output */
- php_xslt *handle; /* A PHP-XSLT processor */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &processor_p, &encoding) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
- convert_to_string_ex(encoding);
-
- /* Set the encoding */
- SablotSetEncoding(XSLT_PROCESSOR(handle), Z_STRVAL_PP(encoding));
-#else
- php_error(E_WARNING, "Sablotron not compiled with encoding support");
-#endif
-
-}
-/* }}} */
-
-/* {{{ proto void xslt_set_log(resource processor, string logfile)
- Set the log file to write the errors to (defaults to stderr) */
-PHP_FUNCTION(xslt_set_log)
-{
- zval **processor_p, /* Resource pointer to a PHP-XSLT processor */
- **logfile; /* Path to the logfile */
- php_xslt *handle; /* A PHP-XSLT processor */
- int argc = ZEND_NUM_ARGS(); /* Argument count */
-
- if (argc < 1 || argc > 2 ||
- zend_get_parameters_ex(argc, &processor_p, &logfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- if (Z_TYPE_PP(logfile) == IS_LONG ||
- Z_TYPE_PP(logfile) == IS_BOOL ||
- Z_TYPE_PP(logfile) == IS_DOUBLE) {
- XSLT_LOG(handle).do_log = Z_LVAL_PP(logfile);
- RETURN_NULL();
- }
- else {
- convert_to_string_ex(logfile);
- }
-
- /* If the log file already exists, free it */
- if (XSLT_LOG(handle).path) {
- efree(XSLT_LOG(handle).path);
- }
-
- /* Copy the path */
- XSLT_LOG(handle).path = estrndup(Z_STRVAL_PP(logfile),
- Z_STRLEN_PP(logfile));
-}
-/* }}} */
-
-/* {{{ S_DOM *_php_sablot_dom_proc(php_xslt *, char *, size_t, zval **)
- */
-static SDOM_Document
-_php_sablot_dom_proc(php_xslt *handle, char *datap, size_t data_len, zval **args)
-{
- SDOM_Document domtree;
-
- if (!strncmp(datap, "arg:", 4)) {
- zval **data;
-
- if (zend_hash_find(Z_ARRVAL_PP(args),
- datap + 4,
- data_len - 3,
- (void **) &data) == FAILURE &&
- zend_hash_find(Z_ARRVAL_PP(args),
- datap + 5,
- data_len - 4,
- (void **) &data) == FAILURE) {
- php_error(E_WARNING, "Cannot find argument: %s", datap);
- return NULL;
- }
-
- SablotParseBuffer(XSLT_CONTEXT(handle), Z_STRVAL_PP(data), &domtree);
- }
- else {
- SablotParse(XSLT_CONTEXT(handle), datap, &domtree);
- }
-
- return domtree;
-}
-/* }}} */
-
-/* {{{ proto string xslt_process(resource processor, string xml, string xslt[, mixed result[, array args[, array params]]])
- Perform the xslt transformation */
-PHP_FUNCTION(xslt_process)
-{
- zval **processor_p; /* Resource Pointer to a PHP-XSLT processor */
- zval **xml_p; /* A zval pointer to the XML data */
- zval **xsl_p; /* A zval pointer to the XSL data */
- zval **result_p; /* A zval pointer to the transformation results */
- zval **params_p; /* A zval pointer to the XSL parameters array */
- zval **args_p; /* A zval pointer to the XSL arguments array */
- zval **data; /* Parameter data */
- php_xslt *handle; /* A PHP-XSLT processor */
- SDOM_Document xml_dom; /* XML DOM tree to SablotRunProcessorGen */
- SDOM_Document xsl_dom; /* XSL DOM tree to SablotRunProcessorGen */
- char *string_key; /* String key from xslt_process() */
- char *result; /* The result file or argument buffer */
- int argc; /* The number of arguments given */
- int error; /* Our error container */
- ulong num_key; /* Numerical key */
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 6 ||
- zend_get_parameters_ex(argc, &processor_p, &xml_p, &xsl_p,
- &result_p, &args_p, &params_p) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- /* Convert the XML and XSLT strings to S_DOM * handles */
- convert_to_string_ex(xml_p);
- convert_to_string_ex(xsl_p);
-
- xml_dom = _php_sablot_dom_proc(handle,
- Z_STRVAL_PP(xml_p),
- Z_STRLEN_PP(xml_p),
- args_p);
- if (!xml_dom) {
- RETURN_FALSE;
- }
-
- xsl_dom = _php_sablot_dom_proc(handle,
- Z_STRVAL_PP(xsl_p),
- Z_STRLEN_PP(xsl_p),
- args_p);
- if (!xsl_dom) {
- RETURN_FALSE;
- }
-
-
- SablotAddArgTree(XSLT_CONTEXT(handle),
- XSLT_PROCESSOR(handle),
- "xml",
- xml_dom);
- SablotAddArgTree(XSLT_CONTEXT(handle),
- XSLT_PROCESSOR(handle),
- "xsl",
- xsl_dom);
-
- /* Well, no result file was given or result buffer, that means (guess what?)
- * we're returning the result yipp di doo!
- */
- if (argc < 4 ||
- Z_TYPE_PP(result_p) == IS_NULL ||
- !strcmp(Z_STRVAL_PP(result_p), "arg:/result")) {
- result = "result";
- SablotAddArgBuffer(XSLT_CONTEXT(handle),
- XSLT_PROCESSOR(handle),
- result,
- NULL);
- }
- /* The result buffer to place the data into, either a file or
- * an argument buffer, etc.
- */
- else {
- convert_to_string_ex(result_p);
- result = Z_STRVAL_PP(result_p);
- }
-
- /* Add the XSLT parameters */
- if (argc > 5) {
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(params_p));
- zend_hash_get_current_data(Z_ARRVAL_PP(params_p), (void **) &data) == FAILURE;
- zend_hash_move_forward(Z_ARRVAL_PP(params_p))) {
- if (zend_hash_get_current_key(Z_ARRVAL_PP(params_p),
- &string_key,
- &num_key,
- 0) == HASH_KEY_IS_LONG) {
- php_error(E_WARNING, "Only string keys are allowed as XSLT parameters");
- RETURN_FALSE;
- }
-
- SablotAddParam(XSLT_CONTEXT(handle),
- XSLT_PROCESSOR(handle),
- string_key,
- Z_STRVAL_PP(data));
- }
- }
-
- /* Perform transformation */
- error = SablotRunProcessorGen(XSLT_CONTEXT(handle),
- XSLT_PROCESSOR(handle),
- "arg:/xsl",
- "arg:/xml",
- result);
- if (error) {
- XSLT_ERRNO(handle) = error;
- RETURN_FALSE;
- }
-
- SablotDestroyDocument(XSLT_CONTEXT(handle), xml_dom);
- SablotDestroyDocument(XSLT_CONTEXT(handle), xsl_dom);
-
- /* If the result buffer is specified, then we return the results of the XSLT
- transformation */
- if (!strcmp(result, "arg:/result")) {
- char *trans_result;
-
- /* Fetch the result buffer into trans_result */
- error = SablotGetResultArg(XSLT_PROCESSOR(handle),
- "arg:/result",
- &trans_result);
- if (error) {
- /* Save the error number */
- XSLT_ERRNO(handle) = error;
- RETURN_FALSE;
- }
-
- RETVAL_STRING(trans_result, 1);
- SablotFree(trans_result);
- }
- else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto void xslt_free(resource processor)
- Free the xslt processor up */
-PHP_FUNCTION(xslt_free)
-{
- zval **processor_p; /* Resource pointer to a php-xslt processor */
- php_xslt *handle; /* A PHP-XSLT processor */
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &processor_p) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- /* Remove the entry from the list */
- zend_list_delete(Z_LVAL_PP(processor_p));
-}
-/* }}} */
-
-/* {{{ proto int xslt_errno(resource processor)
- Error number */
-PHP_FUNCTION(xslt_errno)
-{
- zval **processor_p; /* Resource pointer to a PHP-XSLT processor */
- php_xslt *handle; /* A PHP-XSLT processor */
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &processor_p) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- RETURN_LONG(XSLT_ERRNO(handle));
-}
-/* }}} */
-
-/* {{{ proto string xslt_error(resource processor)
- Error string */
-PHP_FUNCTION(xslt_error)
-{
- zval **processor_p; /* Resource pointer to a PHP-XSLT processor */
- php_xslt *handle; /* A PHP-XSLT processor */
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &processor_p) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(handle, php_xslt *, processor_p, -1, le_xslt_name, le_xslt);
-
- if(XSLT_ERRSTR(handle)) {
- RETURN_STRING(XSLT_ERRSTR(handle), 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ free_processor()
- Free an XSLT processor */
-static void free_processor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_xslt *handle = (php_xslt *) rsrc->ptr; /* A PHP-XSLT processor */
-
- /* Free the processor */
- if (XSLT_PROCESSOR(handle)) {
- SablotUnregHandler(XSLT_PROCESSOR(handle), HLR_MESSAGE, NULL, NULL);
- SablotUnregHandler(XSLT_PROCESSOR(handle), HLR_SAX, NULL, NULL);
- SablotUnregHandler(XSLT_PROCESSOR(handle), HLR_SCHEME, NULL, NULL);
- SablotDestroyProcessor(XSLT_PROCESSOR(handle));
- }
-
- if (XSLT_CONTEXT(handle)) {
- SablotDestroySituation(XSLT_CONTEXT(handle));
- }
-
- /* Free Scheme handlers */
- XSLT_FUNCH_FREE(XSLT_SCHEME(handle).get_all);
- XSLT_FUNCH_FREE(XSLT_SCHEME(handle).open);
- XSLT_FUNCH_FREE(XSLT_SCHEME(handle).get);
- XSLT_FUNCH_FREE(XSLT_SCHEME(handle).put);
- XSLT_FUNCH_FREE(XSLT_SCHEME(handle).close);
- /* Free SAX handlers */
- XSLT_FUNCH_FREE(XSLT_SAX(handle).doc_start);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).element_start);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).element_end);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).namespace_start);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).namespace_end);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).comment);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).pi);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).characters);
- XSLT_FUNCH_FREE(XSLT_SAX(handle).doc_end);
- /* Free error handler */
- XSLT_FUNCH_FREE(XSLT_ERROR(handle));
-
- /* Free error message, if any */
- if (XSLT_ERRSTR(handle)) {
- efree(XSLT_ERRSTR(handle));
- }
-
- /* Close log file */
- if (XSLT_LOG(handle).fd) {
- close(XSLT_LOG(handle).fd);
- }
-
- /* Free log file path */
- if (XSLT_LOG(handle).path) {
- efree(XSLT_LOG(handle).path);
- }
-
- /* Free up the handle */
- efree(handle->handlers);
- efree(handle->err);
- efree(handle);
-}
-/* }}} */
-
-/* {{{ register_sax_handler_pair()
- Register a pair of sax handlers */
-static void register_sax_handler_pair(zval **handler1, zval **handler2, zval **handler)
-{
- zval **current; /* The current handler we're grabbing */
-
- /* Grab and assign handler 1 */
- if (zend_hash_index_find(Z_ARRVAL_PP(handler), 0, (void **) &current) == SUCCESS) {
- *handler1 = *current;
- zval_add_ref(handler1);
- }
- else {
- php_error(E_WARNING, "Wrong format of arguments to xslt_set_sax_handlers()");
- return;
- }
-
- /* Grab and assign handler 2 */
- if (zend_hash_index_find(Z_ARRVAL_PP(handler), 1, (void **) &current) == SUCCESS) {
- *handler2 = *current;
- zval_add_ref(handler2);
- }
- else {
- php_error(E_WARNING, "Wrong format of arguments to xslt_set_sax_handlers()");
- return;
- }
-}
-/* }}} */
-
-/* {{{ scheme_getall()
- The getall scheme handler */
-static int scheme_getall(void *user_data,
- SablotHandle proc,
- const char *scheme,
- const char *rest,
- char **buffer,
- int *byte_count)
-{
- zval *argv[3]; /* Arguments to the scheme getall function */
- zval *retval; /* Return value from the scheme getall function */
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If the scheme handler get all function doesn't
- exist, exit out */
- if (!XSLT_SCHEME(handle).get_all) {
- return 0;
- }
-
- /* Allocate and initialize */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Scheme (string)
- Argument 3: Rest (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) scheme, 1);
- ZVAL_STRING(argv[2], (char *) rest, 1);
-
- xslt_call_function("scheme get all", XSLT_SCHEME(handle).get_all,
- 3, argv, &retval);
-
- /* Save the return value in the buffer (copying it) */
- *buffer = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- *byte_count = Z_STRLEN_P(retval);
-
- /* Free return value */
- zval_ptr_dtor(&retval);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ scheme_handler_is_registered()
- Check to see if the scheme handler is registered with the user */
-static int scheme_handler_is_registered(php_xslt *handle)
-{
- /* If one of the functions is exists, then scheme
- handlers are registered */
- if (XSLT_SCHEME(handle).get_all ||
- XSLT_SCHEME(handle).open ||
- XSLT_SCHEME(handle).get ||
- XSLT_SCHEME(handle).put ||
- XSLT_SCHEME(handle).close)
- return 1;
- /* otherwise, no cigar */
- else
- return 0;
-}
-/* }}} */
-
-/* {{{ scheme_freememory()
- Called when sablotron needs to free memory related to scheme handling */
-static int scheme_freememory(void *user_data, SablotHandle proc, char *buffer)
-{
- /* If we don't have any scheme handler's registered, then emalloc() wasn't
- used, and if emalloc() wasn't then efree shouldn't be used */
- if (!scheme_handler_is_registered((php_xslt *) user_data)) {
- return 0;
- }
-
- /* Free the memory using efree() and remove it from the register */
- efree(buffer);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ scheme_open()
- Called when the URI needs to be opened */
-static int scheme_open(void *user_data,
- SablotHandle proc,
- const char *scheme,
- const char *rest,
- int *fd)
-{
- zval *argv[3]; /* Arguments to the scheme open function */
- zval *retval; /* The return value from the scheme open function */
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no open handler exists, let's exit */
- if (!XSLT_SCHEME(handle).open) {
- return 0;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- /* Argument 1: XSLT Processor (resource)
- Argument 2: Scheme (string)
- Argument 3: Rest (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) scheme, 1);
- ZVAL_STRING(argv[2], (char *) rest, 1);
-
- /* Call the function */
- xslt_call_function("scheme open", XSLT_SCHEME(handle).open,
- 3, argv, &retval);
-
- /* Return value is a resource pointer to an open file */
- *fd = Z_LVAL_P(retval);
-
- /* Free it all up */
- zval_ptr_dtor(&retval);
-
- /* return success */
- return 0;
-}
-/* }}} */
-
-/* {{{ scheme_get()
- Called when data needs to be fetched from the URI */
-static int scheme_get(void *user_data, SablotHandle proc, int fd, char *buffer, int *byte_count)
-{
- zval *argv[3]; /* Arguments to the scheme get function */
- zval *retval; /* Return value from the scheme get function */
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no get handler exists, let's exit */
- if (!XSLT_SCHEME(handle).get) {
- return 0;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- /* Argument 1: XSLT Processor (resource)
- Argument 2: File Pointer (resource)
- Argument 3: Data (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_RESOURCE(argv[1], fd);
- zend_list_addref(fd);
- ZVAL_STRINGL(argv[2], buffer, *byte_count, 0);
-
- /* Call the function */
- xslt_call_function("scheme get", XSLT_SCHEME(handle).get,
- 3, argv, &retval);
-
- /* Returns the number of bytes read */
- *byte_count = Z_LVAL_P(retval);
-
- /* Free things up */
- zval_ptr_dtor(&retval);
-
- /* return success */
- return 0;
-}
-/* }}} */
-
-/* {{{ scheme_put()
- Called when data needs to be written */
-static int scheme_put(void *user_data,
- SablotHandle proc,
- int fd,
- const char *buffer,
- int *byte_count)
-{
- zval *argv[3]; /* Arguments to the scheme put function */
- zval *retval; /* Return value from the scheme put function */
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no put handler exists, let's exit */
- if (!XSLT_SCHEME(handle).put) {
- return 0;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: File pointer (resource)
- Argument 3: Data (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_RESOURCE(argv[1], fd);
- zend_list_addref(fd);
- ZVAL_STRINGL(argv[2], (char *) buffer, *byte_count, 1);
-
- /* Call the scheme put function already */
- xslt_call_function("scheme put", XSLT_SCHEME(handle).put,
- 3, argv, &retval);
-
- /* The return value is the number of bytes written */
- *byte_count = Z_LVAL_P(retval);
-
- /* Free everything up */
- zval_ptr_dtor(&retval);
-
- /* Return success */
- return 0;
-}
-/* }}} */
-
-/* {{{ scheme_close()
- Called when its time to close the fd */
-static int scheme_close(void *user_data, SablotHandle proc, int fd)
-{
- zval *argv[2]; /* Arguments to the scheme close function*/
- zval *retval; /* Return value from the scheme close function */
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* if no close handler exists, exit */
- if (!XSLT_SCHEME(handle).close) {
- return 0;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: File pointer (resource)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_RESOURCE(argv[1], fd);
- zend_list_addref(fd);
-
- /* Call the scheme handler close function */
- xslt_call_function("scheme close", XSLT_SCHEME(handle).close,
- 2, argv, &retval);
-
- /* Free everything up */
- zval_ptr_dtor(&retval);
-
- /* Return success */
- return 0;
-}
-/* }}} */
-
-/* {{{ sax_startdoc()
- Called when the document starts to be processed */
-static SAX_RETURN sax_startdoc(void *ctx, SablotHandle proc)
-{
- zval *argv[1]; /* Arguments to the sax start doc function */
- zval *retval; /* Return value from sax start doc function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* if no document start function exists, exit */
- if (!XSLT_SAX(handle).doc_start) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
-
- /* Argument 1: XSLT processor (resource) */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
-
- /* Call the Sax start doc function */
- xslt_call_function("sax start doc", XSLT_SAX(handle).doc_start,
- 1, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_startelement()
- Called when an element is begun to be processed */
-static SAX_RETURN sax_startelement(void *ctx,
- SablotHandle proc,
- const char *name,
- const char **attr)
-{
- zval *argv[3]; /* Arguments to the sax start element function */
- zval *retval; /* Return value from the sax start element function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- char **p; /* Pointer to attributes */
- TSRMLS_FETCH();
-
- /* If no element start function is found, exit */
- if (!XSLT_SAX(handle).element_start) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
- array_init(argv[2]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Element name (string)
- Argument 3: Element attributes (array)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) name, 1);
-
- /* loop through the attributes array, copying it onto our
- php array */
- p = (char **) attr;
- while (p && *p) {
- add_assoc_string(argv[2], *p, *(p + 1), 1);
- p += 2;
- }
-
- /* Call the sax element start function */
- xslt_call_function("sax start element", XSLT_SAX(handle).element_start,
- 3, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_endelement()
- Called when an ending XML element is encountered */
-static SAX_RETURN sax_endelement(void *ctx, SablotHandle proc, const char *name)
-{
- zval *argv[2]; /* Arguments to the sax end element function */
- zval *retval; /* Return value from the sax end element function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no element end function exists, exit */
- if (!XSLT_SAX(handle).element_end) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Element name (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) name, 1);
-
- /* Call the sax end element function */
- xslt_call_function("sax end element", XSLT_SAX(handle).element_end,
- 2, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_startnamespace()
- Called at the beginning of the parsing of a new namespace */
-static SAX_RETURN sax_startnamespace(void *ctx,
- SablotHandle proc,
- const char *prefix,
- const char *uri)
-{
- zval *argv[3]; /* Arguments to the sax start namespace function */
- zval *retval; /* Return value from the sax start namespace function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* if no namespace start function exists, exit */
- if (!XSLT_SAX(handle).namespace_start) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Prefix (string)
- Argument 3: URI (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) prefix, 1);
- ZVAL_STRING(argv[2], (char *) uri, 1);
-
- /* Call the sax start namespace function */
- xslt_call_function("sax start namespace", XSLT_SAX(handle).namespace_start,
- 3, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_endnamespace()
- Called when a new namespace is finished being parsed */
-static SAX_RETURN sax_endnamespace(void *ctx, SablotHandle proc, const char *prefix)
-{
- zval *argv[2]; /* Arguments to the sax end namespace function */
- zval *retval; /* Return value from the sax end namespace function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no namespace end function exists, exit */
- if (!XSLT_SAX(handle).namespace_end) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Prefix (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) prefix, 1);
-
- /* Call the sax end namespace function */
- xslt_call_function("sax end namespace", XSLT_SAX(handle).namespace_end,
- 2, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_comment()
- Called when a comment is found */
-static SAX_RETURN sax_comment(void *ctx, SablotHandle proc, const char *contents)
-{
- zval *argv[2]; /* Arguments to the sax comment function */
- zval *retval; /* Return value from the sax comment function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* if no comment function exists, exit */
- if (!XSLT_SAX(handle).comment) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Comment contents (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) contents, 1);
-
- /* Call the sax comment function */
- xslt_call_function("sax comment", XSLT_SAX(handle).comment,
- 2, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_pi()
- Called when processing instructions are found */
-static SAX_RETURN sax_pi(void *ctx,
- SablotHandle proc,
- const char *target,
- const char *contents)
-{
- zval *argv[3]; /* Arguments to the sax processing instruction function */
- zval *retval; /* Return value from the sax processing instruction function */
- php_xslt *handle; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- handle = (php_xslt *) ctx;
-
- /* If no processing instructions function exists, exit */
- if (!XSLT_SAX(handle).pi) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Target of the pi (string)
- Argument 3: Contents of the pi (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRING(argv[1], (char *) target, 1);
- ZVAL_STRING(argv[2], (char *) contents, 1);
-
- /* Call processing instructions function */
- xslt_call_function("sax processing instructions", XSLT_SAX(handle).pi,
- 3, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_characters()
- Called when characters are come upon */
-static SAX_RETURN sax_characters(void *ctx,
- SablotHandle proc,
- const char *contents,
- int length)
-{
- zval *argv[2]; /* Arguments to the sax characters function */
- zval *retval; /* Return value to the sax characters function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no characters function exists, exit */
- if (!XSLT_SAX(handle).characters) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
-
- /* Argument 1: XSLT processor (resource)
- Argument 2: Contents (string)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_STRINGL(argv[1], (char *) contents, length, 1);
-
- /* Call characters function */
- xslt_call_function("sax characters", XSLT_SAX(handle).characters,
- 2, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-/* {{{ sax_enddoc()
- Called when the document is finished being parsed */
-static SAX_RETURN sax_enddoc(void *ctx, SablotHandle proc)
-{
- zval *argv[1]; /* Arguments to the end document function */
- zval *retval; /* Return value from the end document function */
- php_xslt *handle = (php_xslt *) ctx; /* A PHP-XSLT processor */
- TSRMLS_FETCH();
-
- /* If no end document function exists, exit */
- if (!XSLT_SAX(handle).doc_end) {
- return;
- }
-
- /* Allocate and initialize arguments */
- MAKE_STD_ZVAL(argv[0]);
-
- /* Argument 1: XSLT Processor (resource)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
-
- /* Call the function */
- xslt_call_function("sax end doc", XSLT_SAX(handle).doc_end,
- 1, argv, &retval);
-
- /* Cleanup */
- zval_ptr_dtor(&retval);
-}
-/* }}} */
-
-
-/* {{{ _error_parse()
- Parse a char ** array into an _error_fields structure */
-struct _error_fields {
- char *message;
- char *type;
- char *line;
-};
-
-static void
-_error_parse (char **fields, struct _error_fields *xse)
-{
- char *val;
- char *p;
- int pos;
- int len;
-
- /* Prep structure */
- memset(xse, 0, sizeof(struct _error_fields));
-
- while (*fields) {
- p = strchr(*fields, ':');
- if (p == NULL)
- continue;
-
- len = strlen(*fields);
-
- pos = p - *fields;
- val = estrndup(*fields + pos + 1, len - pos);
-
- if (!strncmp(*fields, "msg", MIN(3, pos+1))) {
- xse->message = val;
- }
- else if (!strncmp(*fields, "type", MIN(4, pos+1))) {
- xse->type = val;
- }
- else if (!strncmp(*fields, "line", MIN(4, pos+1))) {
- xse->line = val;
- }
-
- ++fields;
- }
-
- if (!xse->type)
- xse->type = estrdup("unknown error type");
-
- if (!xse->line)
- xse->line = estrdup("unknown line");
-
- if (!xse->message)
- xse->message = estrdup("unknown error");
-}
-/* }}} */
-
-/* {{{ _free_error_field_struct()
- Free an error field structure created by _error_parse() */
-static void
-_free_error_field_struct(struct _error_fields *xse)
-{
- if (xse->message) efree(xse->message);
- if (xse->type) efree(xse->type);
- if (xse->line) efree(xse->line);
-}
-/* }}} */
-
-/* {{{ error_makecode()
- Make the error code */
-static MH_ERROR error_makecode(void *user_data,
- SablotHandle proc,
- int severity,
- unsigned short facility,
- unsigned short code)
-{
- return 0;
-}
-/* }}} */
-
-/* {{{ error_log()
- Called when its time to log data */
-static MH_ERROR error_log(void *user_data,
- SablotHandle proc,
- MH_ERROR code,
- MH_LEVEL level,
- char **fields)
-{
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- struct _error_fields err; /* Error structure */
- char *msgbuf; /* Message buffer */
- int msgbuf_len; /* Message buffer len */
- int error = 0; /* Error container */
-
-#define msgformat "Sablotron message on line %s, level %s: %s\n"
-
- /* Skip, if logging is disabled */
- if (!XSLT_LOG(handle).do_log)
- return 0;
-
- /* parse error list into a structure */
- _error_parse(fields, &err);
-
- /* Allocate the message buf and copy the data into it */
- msgbuf_len = (sizeof(msgformat) - 6) +
- strlen(err.message) +
- strlen(err.line) +
- strlen(err.type);
- msgbuf = emalloc(msgbuf_len + 1);
- snprintf(msgbuf, msgbuf_len, msgformat, err.line, err.type, err.message);
-
- /* If the error is serious enough, copy it to our error buffer
- which will show up when someone calls the xslt_error() function */
- if (level == MH_LEVEL_WARN ||
- level == MH_LEVEL_ERROR ||
- level == MH_LEVEL_CRITICAL) {
- if (XSLT_ERRSTR(handle))
- efree(XSLT_ERRSTR(handle));
-
- XSLT_ERRSTR(handle) = estrndup(msgbuf, msgbuf_len);
- }
-
- /* If we haven't allocated and opened the file yet */
- if (!XSLT_LOG(handle).fd) {
- /* Lets open up a file */
- if (XSLT_LOG(handle).path && strcmp(XSLT_LOG(handle).path, "php://stderr")) {
- /* open for append */
- XSLT_LOG(handle).fd = open(XSLT_LOG(handle).path,
- O_WRONLY|O_CREAT|O_APPEND,
- S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR);
- if (XSLT_LOG(handle).fd == -1) {
- php_error(E_WARNING, "Cannot open log file, %s [%d]: %s",
- XSLT_LOG(handle).path, errno, strerror(errno));
- XSLT_LOG(handle).fd = 0;
- }
- }
- /* Default is stderr, or if the user provided "php://stderr" that's the
- stream */
- else {
- XSLT_LOG(handle).fd = 2;
- }
- }
-
- /* Write the error to the file */
- error = write(XSLT_LOG(handle).fd, msgbuf, msgbuf_len);
- if (error == -1) {
- php_error(E_WARNING, "Cannot write data to log file, %s, with fd, %d [%d]: %s",
- (XSLT_LOG(handle).path ? XSLT_LOG(handle).path : "stderr"),
- XSLT_LOG(handle).fd,
- errno,
- strerror(errno));
- return 0;
- }
-
- /* Cleanup */
- if (msgbuf) efree(msgbuf);
- _free_error_field_struct(&err);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ error_print()
- Print out an error message or call the error handler */
-static MH_ERROR error_print(void *user_data,
- SablotHandle proc,
- MH_ERROR code,
- MH_LEVEL level,
- char **fields)
-{
- php_xslt *handle = (php_xslt *) user_data; /* A PHP-XSLT processor */
- struct _error_fields err; /* Error field structure */
-
- _error_parse(fields, &err);
-
- if (XSLT_ERROR(handle)) {
- zval *argv[4]; /* Arguments to the error function */
- zval *retval; /* Return value from the error function */
- TSRMLS_FETCH();
-
- /* Allocate and initialize */
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
- MAKE_STD_ZVAL(argv[3]);
- array_init(argv[3]);
-
- /* Argument 1: XSLT Processor (resource)
- Argument 2: Error level (long)
- Argument 3: Error code (long)
- Argument 4: Error messages (array)
- */
- ZVAL_RESOURCE(argv[0], handle->processor.idx);
- zend_list_addref(handle->processor.idx);
- ZVAL_LONG(argv[1], level);
- ZVAL_LONG(argv[2], code);
-
- add_assoc_string_ex(argv[3], "type", sizeof("type") - 1, err.type, 0);
- add_assoc_string_ex(argv[3], "message", sizeof("message") - 1, err.message, 0);
- add_assoc_long_ex(argv[3], "line", sizeof("line") - 1, atoi(err.line));
-
- /* Call the function */
- xslt_call_function("error handler", XSLT_ERROR(handle),
- 4, argv, &retval);
-
- /* Free up */
- zval_ptr_dtor(&retval);
- }
- else {
- char *msgbuf; /* Message buffer */
- size_t msgbuf_len; /* Message buffer length */
-
-#define msgformat "Sablotron error on line %s: %s"
-
- /* If the error is not serious, exit out */
- if (code == MH_LEVEL_WARN ||
- code == MH_LEVEL_ERROR ||
- code == MH_LEVEL_CRITICAL) {
- return 0;
- }
-
- /* Allocate the message buffer and copy the data onto it */
- msgbuf_len = (sizeof(msgformat) - 4) +
- strlen(err.message) +
- strlen(err.line);
- msgbuf = emalloc(msgbuf_len + 1);
-
- snprintf(msgbuf, msgbuf_len, msgformat, err.line, err.message);
-
- /* Copy the error message onto the handle for use when
- the xslt_error function is called */
- XSLT_ERRSTR(handle) = estrndup(msgbuf, msgbuf_len);
-
- /* Output a warning */
- php_error(E_WARNING, msgbuf);
-
- /* Cleanup */
- efree(msgbuf);
- _free_error_field_struct(&err);
- }
-
- return 0;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/xslt/tests/001.phpt b/ext/xslt/tests/001.phpt
deleted file mode 100644
index 3270c3f20e..0000000000
--- a/ext/xslt/tests/001.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Check for xslt presence
---SKIPIF--
-<?php if (!extension_loaded("xslt")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "xslt extension is available";
-?>
---EXPECT--
-xslt extension is available \ No newline at end of file
diff --git a/ext/xslt/xslt.c b/ext/xslt/xslt.c
deleted file mode 100644
index 7811f865d3..0000000000
--- a/ext/xslt/xslt.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_xslt.h"
-
-#if HAVE_XSLT
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-#define XSLT_DEBUG 0
-
-/* {{{ xslt_debug()
- Output a debug message if debugging is enabled */
-extern void xslt_debug(char *function_name, char *format, ...)
-{
-#if DEBUG
- va_list argv;
- char buffer[1024];
-
- va_start(argv, format);
- vsnprintf(buffer, sizeof(buffer) - 1, format, argv);
- va_end(argv);
-
- buffer[sizeof(buffer) - 1] = '\0';
-
- php_printf("<b>XSLT Debug</b>: %s: %s<br />\n",
- function_name, buffer);
-#endif
-}
-/* }}} */
-
-/* {{{ find_xslt_argument()
- Find and return an xslt argument from the argument buffer */
-static char *_find_xslt_argument(const char **argv, const char *key)
-{
- char **ptr; /* Pointer to the passed char ** array */
- char *return_value = NULL; /* Value to return from the function */
-
- if (! argv)
- return NULL;
-
- /* Loop through the array searching for the value */
- ptr = (char **) argv;
- while (*ptr) {
- /* If we have a match, save the value and exit out */
- if (! strcmp(*ptr, key)) {
- return_value = estrdup(*ptr);
- break;
- }
-
- ++ptr;
- }
-
- return return_value;
-}
-/* }}} */
-
-/* {{{ xslt_make_array()
- Make an XSLT array (char **) from a zval array (HashTable *) */
-extern void xslt_make_array(zval **zarr, char ***carr)
-{
- zval **current;
- HashTable *arr;
- int idx = 0;
- TSRMLS_FETCH();
-
- arr = HASH_OF(*zarr);
- if (! arr) {
- php_error(E_WARNING, "Invalid argument or parameter array to %s",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- *carr = emalloc(((zend_hash_num_elements(arr) * 2) + 1) * sizeof(char *));
-
- for (zend_hash_internal_pointer_reset(arr);
- zend_hash_get_current_data(arr, (void **) &current) == SUCCESS;
- zend_hash_move_forward(arr)) {
- char *string_key = NULL;
- ulong num_key;
- int type;
-
- SEPARATE_ZVAL(current);
- convert_to_string_ex(current);
-
- type = zend_hash_get_current_key(arr, &string_key, &num_key, 0);
- if (type == HASH_KEY_IS_LONG) {
- php_error(E_WARNING, "Invalid argument or parameter array to %s",
- get_active_function_name(TSRMLS_C));
- return;
- }
-
- (*carr)[idx++] = estrdup(string_key);
- (*carr)[idx++] = estrndup(Z_STRVAL_PP(current), Z_STRLEN_PP(current));
- }
-
- (*carr)[idx] = NULL;
-}
-/* }}} */
-
-/* {{{ xslt_free_array()
- Free an xslt array built by xslt_make_array() */
-extern void xslt_free_array(char **arr)
-{
- char **ptr = arr;
-
- while (*ptr != NULL) {
- efree(*ptr);
- ptr++;
- }
-
- efree(arr);
-}
-/* }}} */
-
-/* {{{ xslt_parse_arguments()
- Parse an XSLT argument buffer */
-extern xslt_args *xslt_parse_arguments(char *xml,
- char *xsl,
- char *result,
- char **argv)
-{
- xslt_args *return_value; /* The value to return from the function */
-
- return_value = emalloc(sizeof(xslt_args));
-
- /* The xml argument */
- if (! strncasecmp(xml, "arg:", 4)) {
- char *key = xml + 5;
-
- return_value->xml.type = XSLT_IS_DATA;
- return_value->xml.ptr = _find_xslt_argument((const char **) argv,
- (const char *) key);
- }
- else {
- return_value->xml.type = XSLT_IS_FILE;
- return_value->xml.ptr = estrdup(xml);
- }
-
- /* The xslt arguments */
- if (! strncasecmp(xsl, "arg:", 4)) {
- char *key = xsl + 5;
-
- return_value->xsl.type = XSLT_IS_DATA;
- return_value->xsl.ptr = _find_xslt_argument((const char **) argv,
- (const char *) key);
- }
- else {
- return_value->xsl.type = XSLT_IS_FILE;
- return_value->xsl.ptr = estrdup(xsl);
- }
-
- /* The result argument */
- if (! strncasecmp(result, "arg:", 4)) {
- char *key = result + 5;
-
- return_value->result.type = XSLT_IS_DATA;
- return_value->result.ptr = _find_xslt_argument((const char **) argv,
- (const char *) key);
- }
- else {
- return_value->result.type = XSLT_IS_FILE;
- return_value->result.ptr = estrdup(result);
- }
-
- return return_value;
-}
-/* }}} */
-
-/* {{{ free_xslt_arguments()
- Free's an XSLT argument list returned from parse_xslt_arguments() */
-extern void xslt_free_arguments(xslt_args *to_free)
-{
- if (to_free->xml.ptr) {
- efree(to_free->xml.ptr);
- }
-
- if (to_free->xsl.ptr) {
- efree(to_free->xsl.ptr);
- }
-
- if (to_free->result.ptr) {
- efree(to_free->result.ptr);
- }
-
- efree(to_free);
-}
-/* }}} */
-
-/* {{{ call_xslt_function()
- Call an XSLT handler */
-extern void xslt_call_function(char *name,
- zval *function,
- int argc,
- zval **user_args,
- zval **retval)
-{
- zval ***argv; /* Argument container, maps around for call_user_function_ex() */
- int error; /* Error container */
- int idx; /* Idx, when looping through and free'ing the arguments */
- TSRMLS_FETCH(); /* For TS mode, fetch the executor globals */
-
- argv = emalloc(argc * sizeof(zval **));
- for (idx = 0; idx < argc; idx++) {
- argv[idx] = &user_args[idx];
- }
-
- /* Call the function */
- error = call_user_function_ex(EG(function_table),
- NULL, function,
- retval, argc, argv, 0, NULL TSRMLS_CC);
- if (error == FAILURE) {
- php_error(E_WARNING, "Cannot call the %s handler: %s",
- name, Z_STRVAL_P(function));
- }
-
- /* Cleanup arguments */
- for (idx = 0; idx < argc; idx++) {
- /* Decrease refcount and free if refcount is <= 0 */
- zval_ptr_dtor(argv[idx]);
- }
-
- efree(argv);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/xslt/xslt.dsp b/ext/xslt/xslt.dsp
deleted file mode 100644
index fd8c2dc10e..0000000000
--- a/ext/xslt/xslt.dsp
+++ /dev/null
@@ -1,115 +0,0 @@
-# Microsoft Developer Studio Project File - Name="xslt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xslt - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xslt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xslt.mak" CFG="xslt - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xslt - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xslt - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xslt - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSLT_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /D "WIN32" /D "COMPILE_DL_XSLT" /D ZTS=1 /D HAVE_XSLT=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_SABLOT_BACKEND" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib php4ts.lib sablot.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xslt.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "xslt - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSLT_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_XSLT=1 /D COMPILE_DL_XSLT=1 /D "HAVE_SABLOT_BACKEND" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib php4ts_debug.lib sablot.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_xslt.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "xslt - Win32 Release_TS"
-# Name "xslt - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\sablot.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\xslt.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_sablot.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_xslt.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/yaz/CREDITS b/ext/yaz/CREDITS
deleted file mode 100644
index e44f215df0..0000000000
--- a/ext/yaz/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-YAZ
-Adam Dickmeiss
diff --git a/ext/yaz/README b/ext/yaz/README
deleted file mode 100644
index 2ee3ac1781..0000000000
--- a/ext/yaz/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This extension implements a Z39.50 client for PHP using the YAZ toolkit.
-
-Find more information at:
- http://www.indexdata.dk/phpyaz/
- http://www.indexdata.dk/yaz/
diff --git a/ext/yaz/config.m4 b/ext/yaz/config.m4
deleted file mode 100644
index 7c41a94d66..0000000000
--- a/ext/yaz/config.m4
+++ /dev/null
@@ -1,41 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(yaz,for YAZ support,
-[ --with-yaz[=DIR] Include YAZ support (ANSI/NISO Z39.50).
- DIR is the YAZ bin install directory.])
-
-
-if test "$PHP_YAZ" != "no"; then
- yazconfig=NONE
- if test "$PHP_YAZ" = "yes"; then
- AC_PATH_PROG(yazconfig, yaz-config, NONE)
- else
- if test -r ${PHP_YAZ}/yaz-config; then
- yazconfig=${PHP_YAZ}/yaz-config
- else
- yazconfig=${PHP_YAZ}/bin/yaz-config
- fi
- fi
-
- if test -f $yazconfig; then
- AC_DEFINE(HAVE_YAZ,1,[Whether you have YAZ])
- . $yazconfig
- dir=""
- for c in $YAZLIB; do
- case $c in
- -L*)
- dir=`echo $c|cut -c 3-|sed 's%/\.libs%%g'`
- ;;
- esac
- done
- if test -n "$dir"; then
- PHP_ADD_LIBPATH($dir,YAZ_SHARED_LIBADD)
- fi
- PHP_ADD_LIBRARY_DEFER(yaz,1,YAZ_SHARED_LIBADD)
- PHP_EVAL_INCLINE($YAZINC)
- PHP_SUBST(YAZ_SHARED_LIBADD)
- PHP_NEW_EXTENSION(yaz, php_yaz.c, $ext_shared)
- fi
-fi
diff --git a/ext/yaz/php_yaz.c b/ext/yaz/php_yaz.c
deleted file mode 100644
index 18b81fc743..0000000000
--- a/ext/yaz/php_yaz.c
+++ /dev/null
@@ -1,2688 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Adam Dickmeiss <adam@indexdata.dk> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_YAZ
-#include "ext/standard/info.h"
-#include "php_yaz.h"
-
-#include <yaz/proto.h>
-#include <yaz/tcpip.h>
-#include <yaz/pquery.h>
-
-#ifndef YAZ_DATE
-#error YAZ version 1.8 or later must be used.
-#endif
-
-#include <yaz/sortspec.h>
-#include <yaz/diagbib1.h>
-#include <yaz/otherinfo.h>
-#include <yaz/marcdisp.h>
-#include <yaz/yaz-util.h>
-#include <yaz/yaz-version.h>
-#include <yaz/yaz-ccl.h>
-#include <yaz/ill.h>
-
-#define MAX_ASSOC 100
-
-typedef struct Yaz_ResultSetInfo *Yaz_ResultSet;
-typedef struct Yaz_AssociationInfo *Yaz_Association;
-typedef struct Yaz_RecordCacheInfo *Yaz_RecordCache;
-
-struct Yaz_RecordCacheInfo {
- Z_NamePlusRecordList recordList;
- Yaz_RecordCache next;
-};
-
-struct Yaz_ResultSetInfo {
- Z_Query *query;
- Z_ReferenceId *referenceId;
- ODR odr;
- int resultCount;
- Yaz_ResultSet next;
- Z_NamePlusRecordList *recordList;
- int sorted;
-};
-
-#define PHP_YAZ_SELECT_READ 1
-#define PHP_YAZ_SELECT_WRITE 2
-#define PHP_YAZ_STATE_CONNECTING 1
-#define PHP_YAZ_STATE_ESTABLISHED 2
-#define PHP_YAZ_STATE_CLOSED 3
-
-#define PHP_YAZ_ERROR_CONNECTION_LOST (-1)
-#define PHP_YAZ_ERROR_DECODE (-2)
-#define PHP_YAZ_ERROR_ENCODE (-3)
-#define PHP_YAZ_ERROR_CONNECT (-4)
-#define PHP_YAZ_ERROR_INIT (-5)
-#define PHP_YAZ_ERROR_TIMEOUT (-6)
-
-struct Yaz_AssociationInfo {
- char *host_port;
- int num_databaseNames;
- char **databaseNames;
- char *local_databases;
- COMSTACK cs;
- char *cookie_in;
- char *cookie_out;
- char *user;
- char *group;
- char *pass;
- char *proxy;
- int piggyback;
- int error;
- char *addinfo;
- Yaz_ResultSet resultSets;
- int persistent;
- int in_use;
- int order;
- int state;
- int mask_select;
- int reconnect_flag;
- char *sort_criteria;
- ODR odr_in;
- ODR odr_out;
- ODR odr_scan;
- ODR odr_es;
- Z_ScanResponse *scan_response;
- Z_ExtendedServicesResponse *es_response;
- char *buf_out;
- int len_out;
- char *buf_in;
- int len_in;
- int (*action)(Yaz_Association t);
- int resultSetStartPoint;
- int numberOfRecordsRequested;
- char *elementSetName;
- char *preferredRecordSyntax;
- char *schema;
-
- CCL_parser ccl_parser;
- char *ill_buf_out;
- int ill_len_out;
-};
-
-static Yaz_Association yaz_association_mk ()
-{
- Yaz_Association p = xmalloc (sizeof(*p));
- p->host_port = 0;
- p->num_databaseNames = 0;
- p->databaseNames = 0;
- p->local_databases = 0;
- p->cs = 0;
- p->cookie_in = 0;
- p->cookie_out = 0;
- p->user = 0;
- p->group = 0;
- p->pass = 0;
- p->proxy = 0;
- p->error = 0;
- p->addinfo = 0;
- p->resultSets = 0;
- p->in_use = 0;
- p->order = 0;
- p->state = PHP_YAZ_STATE_CLOSED;
- p->mask_select = 0;
- p->reconnect_flag = 0;
- p->odr_in = odr_createmem (ODR_DECODE);
- p->odr_out = odr_createmem (ODR_ENCODE);
- p->odr_scan = odr_createmem (ODR_ENCODE);
- p->odr_es = odr_createmem (ODR_ENCODE);
- p->scan_response = 0;
- p->es_response = 0;
- p->buf_out = 0;
- p->len_out = 0;
- p->buf_in = 0;
- p->len_in = 0;
- p->action = 0;
- p->ill_buf_out = 0;
- p->ill_len_out = 0;
- p->resultSetStartPoint = 1;
- p->numberOfRecordsRequested = 10;
- p->elementSetName = 0;
- p->preferredRecordSyntax = 0;
- p->schema = 0;
- p->ccl_parser = ccl_parser_create();
- p->ccl_parser->bibset = 0;
- p->sort_criteria = 0;
- return p;
-}
-
-static void yaz_association_destroy (Yaz_Association p)
-{
- int i;
- if (!p)
- return ;
- xfree (p->host_port);
- xfree (p->local_databases);
- for (i = 0; i<p->num_databaseNames; i++)
- xfree (p->databaseNames[i]);
- xfree (p->databaseNames);
- if (p->cs)
- cs_close (p->cs);
- xfree (p->cookie_in);
- xfree (p->cookie_out);
- xfree (p->sort_criteria);
- xfree (p->user);
- xfree (p->group);
- xfree (p->pass);
- xfree (p->proxy);
- xfree (p->addinfo);
- odr_destroy (p->odr_in);
- odr_destroy (p->odr_out);
- odr_destroy (p->odr_scan);
- odr_destroy (p->odr_es);
- /* buf_out */
- /* buf_in */
- /* action */
- xfree (p->ill_buf_out);
- xfree (p->elementSetName);
- xfree (p->preferredRecordSyntax);
- xfree (p->schema);
- ccl_qual_rm(&p->ccl_parser->bibset);
- ccl_parser_destroy(p->ccl_parser);
-}
-
-static Yaz_ResultSet yaz_resultset_mk()
-{
- ODR odr = odr_createmem (ODR_ENCODE);
- Yaz_ResultSet p = odr_malloc (odr, sizeof(*p));
-
- p->query = 0;
- p->referenceId = 0;
- p->odr = odr;
- p->resultCount = 0;
- p->next = 0;
- p->recordList = 0;
- p->sorted = 0;
- return p;
-}
-
-static void yaz_resultset_destroy (Yaz_ResultSet p)
-{
- if (!p)
- return;
- if (p->odr)
- odr_destroy (p->odr);
-}
-
-#ifdef ZTS
-static MUTEX_T yaz_mutex;
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(yaz);
-
-static Yaz_Association *shared_associations;
-static int order_associations;
-static int le_link;
-
-static unsigned char third_argument_force_ref[] = {
- 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-
-static unsigned char second_argument_force_ref[] = {
- 2, BYREF_NONE, BYREF_FORCE };
-
-function_entry yaz_functions [] = {
- PHP_FE(yaz_connect, NULL)
- PHP_FE(yaz_close, NULL)
- PHP_FE(yaz_search, NULL)
- PHP_FE(yaz_wait, second_argument_force_ref)
- PHP_FE(yaz_errno, NULL)
- PHP_FE(yaz_error, NULL)
- PHP_FE(yaz_addinfo, NULL)
- PHP_FE(yaz_hits, NULL)
- PHP_FE(yaz_record, NULL)
- PHP_FE(yaz_syntax, NULL)
- PHP_FE(yaz_element, NULL)
- PHP_FE(yaz_range, NULL)
- PHP_FE(yaz_itemorder, NULL)
- PHP_FE(yaz_scan, NULL)
- PHP_FE(yaz_scan_result, second_argument_force_ref)
- PHP_FE(yaz_es_result, NULL)
- PHP_FE(yaz_present, NULL)
- PHP_FE(yaz_ccl_conf, NULL)
- PHP_FE(yaz_ccl_parse, third_argument_force_ref)
- PHP_FE(yaz_database, NULL)
- PHP_FE(yaz_sort, NULL)
- PHP_FE(yaz_schema, NULL)
- {NULL, NULL, NULL}
-};
-
-static void get_assoc (INTERNAL_FUNCTION_PARAMETERS, pval **id,
- Yaz_Association *assocp)
-{
- Yaz_Association *as = 0;
- YAZSLS_FETCH();
-
- *assocp = 0;
-#ifdef ZTS
- tsrm_mutex_lock (yaz_mutex);
-#endif
- ZEND_FETCH_RESOURCE(as, Yaz_Association *, id, -1,
- "YAZ link", le_link);
- if (as && *as && (*as)->order == YAZSG(assoc_seq) && (*as)->in_use)
- {
- *assocp = *as;
- }
- else
- {
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- php_error(E_WARNING, "Invalid YAZ handle");
- }
-}
-
-static void release_assoc (Yaz_Association assoc)
-{
-#ifdef ZTS
- if (assoc)
- tsrm_mutex_unlock(yaz_mutex);
-#endif
-}
-static void do_close (Yaz_Association p)
-{
- p->mask_select = 0;
- p->state = PHP_YAZ_STATE_CLOSED;
- if (p->cs)
- {
- cs_close (p->cs);
- p->cs = 0;
- }
-}
-
-static void do_connect (Yaz_Association p)
-{
- void *addr;
-
- p->reconnect_flag = 0;
- p->cs = cs_create (tcpip_type, 0, PROTO_Z3950);
-
- if (p->proxy)
- addr = tcpip_strtoaddr (p->proxy);
- else
- addr = tcpip_strtoaddr (p->host_port);
- if (!addr)
- {
- do_close(p);
- p->error = PHP_YAZ_ERROR_CONNECT;
- return;
- }
- cs_connect (p->cs, addr);
- p->state = PHP_YAZ_STATE_CONNECTING;
- p->mask_select = PHP_YAZ_SELECT_READ | PHP_YAZ_SELECT_WRITE;
-}
-
-static void response_diag (Yaz_Association t, Z_DiagRec *p)
-{
- Z_DefaultDiagFormat *r;
- char *addinfo = 0;
-
- xfree (t->addinfo);
- t->addinfo = 0;
- if (p->which != Z_DiagRec_defaultFormat)
- {
- t->error = PHP_YAZ_ERROR_DECODE;
- return;
- }
- r = p->u.defaultFormat;
- switch (r->which)
- {
- case Z_DefaultDiagFormat_v2Addinfo:
- addinfo = r->u.v2Addinfo;
- break;
- case Z_DefaultDiagFormat_v3Addinfo:
- addinfo = r->u.v3Addinfo;
- break;
- }
- if (addinfo)
- t->addinfo = xstrdup (addinfo);
- t->error = *r->condition;
-}
-
-static const char *array_lookup_string(HashTable *ht, const char *idx)
-{
- pval **pvalue;
-
- if (ht && zend_hash_find(ht, (char*) idx, strlen(idx)+1,
- (void**) &pvalue) == SUCCESS)
- {
- SEPARATE_ZVAL(pvalue);
- convert_to_string(*pvalue);
- return (*pvalue)->value.str.val;
- }
- return 0;
-}
-
-static long *array_lookup_long(HashTable *ht, const char *idx)
-{
- pval **pvalue;
-
- if (ht && zend_hash_find(ht, (char*) idx, strlen(idx)+1,
- (void**) &pvalue) == SUCCESS)
- {
- SEPARATE_ZVAL(pvalue);
- convert_to_long(*pvalue);
- return &(*pvalue)->value.lval;
- }
- return 0;
-}
-
-static long *array_lookup_bool(HashTable *ht, const char *idx)
-{
- pval **pvalue;
-
- if (ht && zend_hash_find(ht, (char*) idx, strlen(idx)+1,
- (void**) &pvalue) == SUCCESS)
- {
- SEPARATE_ZVAL(pvalue);
- convert_to_boolean(*pvalue);
- return &(*pvalue)->value.lval;
- }
- return 0;
-}
-
-static int send_present (Yaz_Association t);
-static int send_sort_present (Yaz_Association t);
-static int send_sort (Yaz_Association t);
-
-static void handle_records (Yaz_Association t, Z_Records *sr,
- int present_phase)
-{
- if (sr && sr->which == Z_Records_NSD)
- {
- Z_DiagRec dr, *dr_p = &dr;
- dr.which = Z_DiagRec_defaultFormat;
- dr.u.defaultFormat = sr->u.nonSurrogateDiagnostic;
-
- response_diag (t, dr_p);
- }
- else if (sr && sr->which == Z_Records_multipleNSD)
- {
- if (sr->u.multipleNonSurDiagnostics->num_diagRecs >= 1)
- response_diag(t, sr->u.multipleNonSurDiagnostics->diagRecs[0]);
- else
- t->error = PHP_YAZ_ERROR_DECODE;
- }
- else
- {
- if (t->numberOfRecordsRequested > 0 && !t->resultSets->recordList)
- {
- int i;
-
- t->resultSets->recordList =
- odr_malloc (t->resultSets->odr,
- sizeof(*t->resultSets->recordList));
- t->resultSets->recordList->records =
- odr_malloc (t->resultSets->odr, t->numberOfRecordsRequested
- * sizeof(*t->resultSets->recordList->records));
- for (i = 0; i < t->numberOfRecordsRequested; i++)
- t->resultSets->recordList->records[i] = 0;
- if (t->numberOfRecordsRequested + t->resultSetStartPoint-1 >
- t->resultSets->resultCount)
- t->resultSets->recordList->num_records =
- t->resultSets->resultCount - t->resultSetStartPoint + 1;
- else
- t->resultSets->recordList->num_records =
- t->numberOfRecordsRequested;
- }
- if (sr && sr->which == Z_Records_DBOSD)
- {
- int j, i;
- NMEM nmem = odr_extract_mem (t->odr_in);
- Z_NamePlusRecordList *p =
- sr->u.databaseOrSurDiagnostics;
- if (t->resultSets->recordList)
- {
- for (j = 0; j < t->resultSets->recordList->num_records; j++)
- if (!t->resultSets->recordList->records[j])
- break;
- for (i = 0; i<p->num_records; i++)
- t->resultSets->recordList->records[i+j] = p->records[i];
- /* transfer our response to search_nmem .. we need it later */
- nmem_transfer (t->resultSets->odr->mem, nmem);
- nmem_destroy (nmem);
- }
- if (present_phase && p->num_records == 0)
- {
- /* present response and we didn't get any records! */
- t->error = PHP_YAZ_ERROR_DECODE;
- t->resultSets->recordList = 0;
- }
- }
- else if (present_phase)
- {
- /* present response and we didn't get any records! */
- t->error = PHP_YAZ_ERROR_DECODE;
- t->resultSets->recordList = 0;
- }
- }
-}
-
-static void search_response (Yaz_Association t, Z_SearchResponse *sr)
-{
- t->resultSets->resultCount = *sr->resultCount;
- handle_records (t, sr->records, 0);
-}
-
-static void present_response (Yaz_Association t, Z_PresentResponse *pr)
-{
- handle_records (t, pr->records, 1);
-}
-
-static void scan_response (Yaz_Association t, Z_ScanResponse *res)
-{
- NMEM nmem = odr_extract_mem (t->odr_in);
- if (res->entries && res->entries->nonsurrogateDiagnostics)
- response_diag(t, res->entries->nonsurrogateDiagnostics[0]);
- t->scan_response = res;
- nmem_transfer (t->odr_scan->mem, nmem);
- nmem_destroy (nmem);
-}
-
-static void sort_response (Yaz_Association t, Z_SortResponse *res)
-{
- if (t->resultSets)
- t->resultSets->sorted = 1;
- if (res->diagnostics && res->num_diagnostics > 0)
- response_diag (t, res->diagnostics[0]);
-}
-
-static void es_response (Yaz_Association t,
- Z_ExtendedServicesResponse *res)
-{
- NMEM nmem = odr_extract_mem (t->odr_in);
- if (res->diagnostics && res->num_diagnostics > 0)
- response_diag(t, res->diagnostics[0]);
- t->es_response = res;
- nmem_transfer (t->odr_es->mem, nmem);
- nmem_destroy (nmem);
-}
-
-static void handle_apdu (Yaz_Association t, Z_APDU *apdu)
-{
- Z_InitResponse *initrs;
-
- t->mask_select = 0;
-
- switch(apdu->which)
- {
- case Z_APDU_initResponse:
- initrs = apdu->u.initResponse;
- if (!*initrs->result)
- {
- t->error = PHP_YAZ_ERROR_INIT;
- }
- else
- {
- char *cookie =
- yaz_oi_get_string_oidval (&apdu->u.initResponse->otherInfo,
- VAL_COOKIE, 1, 0);
- if (cookie)
- {
- xfree(t->cookie_in);
- t->cookie_in = xstrdup(cookie);
- }
- if (t->action)
- (*t->action) (t);
- t->action = 0;
- }
- break;
- case Z_APDU_searchResponse:
- search_response (t, apdu->u.searchResponse);
- send_sort_present (t);
- break;
- case Z_APDU_presentResponse:
- present_response (t, apdu->u.presentResponse);
- send_present (t);
- break;
- case Z_APDU_scanResponse:
- scan_response (t, apdu->u.scanResponse);
- break;
- case Z_APDU_extendedServicesResponse:
- es_response (t, apdu->u.extendedServicesResponse);
- break;
- case Z_APDU_sortResponse:
- sort_response (t, apdu->u.sortResponse);
- send_present (t);
- break;
- case Z_APDU_close:
- do_close(t);
- if (t->reconnect_flag)
- do_connect (t);
- else
- t->error = PHP_YAZ_ERROR_CONNECTION_LOST;
- break;
- default:
- do_close (t);
- t->error = PHP_YAZ_ERROR_DECODE;
- break;
- }
-}
-
-static int do_read (Yaz_Association t)
-{
- int r;
- Z_APDU *apdu;
-
- r = cs_get (t->cs, &t->buf_in, &t->len_in);
- if (r == 1)
- return 0;
- if (r <= 0)
- {
- do_close (t);
- if (t->reconnect_flag)
- {
- do_connect (t);
- }
- else
- {
- do_close (t);
- t->error = PHP_YAZ_ERROR_CONNECTION_LOST;
- }
- }
- else
- {
- odr_reset (t->odr_in);
- odr_setbuf (t->odr_in, t->buf_in, r, 0);
- if (!z_APDU (t->odr_in, &apdu, 0, 0))
- {
- do_close (t);
- t->error = PHP_YAZ_ERROR_DECODE;
- }
- else
- {
- /* apdu_log(req, t->odr_print, apdu); */
- handle_apdu (t, apdu);
- }
- }
- return 1;
-}
-
-static int do_write_ex (Yaz_Association t, char *buf_out, int len_out)
-{
- int r;
-
- if ((r=cs_put (t->cs, buf_out, len_out)) < 0)
- {
- if (t->reconnect_flag)
- {
- do_close (t);
- do_connect (t);
- }
- else
- {
- if (t->state == PHP_YAZ_STATE_CONNECTING)
- t->error = PHP_YAZ_ERROR_CONNECT;
- else
- t->error = PHP_YAZ_ERROR_CONNECTION_LOST;
- do_close (t);
- return 1;
- }
- }
- else if (r == 1)
- {
- t->state = PHP_YAZ_STATE_ESTABLISHED;
- t->mask_select = PHP_YAZ_SELECT_READ|PHP_YAZ_SELECT_WRITE;
- }
- else
- {
- t->state = PHP_YAZ_STATE_ESTABLISHED;
- t->mask_select = PHP_YAZ_SELECT_READ;
- }
- return 0;
-}
-
-static int do_write(Yaz_Association t)
-{
- return do_write_ex (t, t->buf_out, t->len_out);
-}
-
-static int send_packet (Yaz_Association t)
-{
- return do_write_ex (t, t->ill_buf_out, t->ill_len_out);
-}
-
-static int encode_APDU(Yaz_Association t, Z_APDU *a, ODR out)
-{
- char str[120];
-
- if (a == 0)
- abort();
- sprintf (str, "send_APDU t=%p type=%d", t, a->which);
- if (t->cookie_out)
- {
- Z_OtherInformation **oi;
- yaz_oi_APDU(a, &oi);
- yaz_oi_set_string_oidval(oi, out, VAL_COOKIE, 1, t->cookie_out);
- }
- if (!z_APDU(out, &a, 0, 0))
- {
- FILE *outf = fopen("/tmp/apdu.txt", "w");
- if (outf)
- {
- ODR odr_pr = odr_createmem(ODR_PRINT);
- fprintf (outf, "a=%p\n", a);
- odr_setprint(odr_pr, outf);
- z_APDU(odr_pr, &a, 0, 0);
- odr_destroy(odr_pr);
- fclose (outf);
- }
- php_error (E_WARNING, "YAZ: Couldn't encode APDU");
- do_close (t);
- t->error = PHP_YAZ_ERROR_ENCODE;
- return -1;
- }
- return 0;
-}
-
-static int send_APDU (Yaz_Association t, Z_APDU *a)
-{
- encode_APDU(t, a, t->odr_out);
- t->buf_out = odr_getbuf(t->odr_out, &t->len_out, 0);
- odr_reset(t->odr_out);
- do_write (t);
- return 0;
-}
-
-/* set database names. Take local databases (if set); otherwise
- take databases given in ZURL (if set); otherwise use Default */
-static char **set_DatabaseNames (Yaz_Association t, int *num)
-{
- char **databaseNames;
- char *c;
- int no = 2;
- char *cp = t->local_databases;
-
- if (!cp || !*cp)
- {
- cp = strchr (t->host_port, '/');
- if (cp)
- cp++;
- }
- if (cp)
- {
- c = cp;
- while ((c = strchr(c, '+')))
- {
- c++;
- no++;
- }
- }
- else
- cp = "Default";
- databaseNames = odr_malloc (t->odr_out, no * sizeof(*databaseNames));
- no = 0;
- while (*cp)
- {
- c = strchr (cp, '+');
- if (!c)
- c = cp + strlen(cp);
- else if (c == cp)
- {
- cp++;
- continue;
- }
- /* cp ptr to first char of db name, c is char following db name */
- databaseNames[no] = odr_malloc (t->odr_out, 1+c-cp);
- memcpy (databaseNames[no], cp, c-cp);
- databaseNames[no++][c-cp] = '\0';
- cp = c;
- if (*cp)
- cp++;
- }
- databaseNames[no] = NULL;
- *num = no;
- return databaseNames;
-}
-
-static int send_search (Yaz_Association t)
-{
- Yaz_ResultSet r = t->resultSets;
- Z_APDU *apdu = zget_APDU(t->odr_out, Z_APDU_searchRequest);
- Z_SearchRequest *sreq = apdu->u.searchRequest;
-
- /* resultSetPrepare (req, t, req->cur_pa); */
- if (t->resultSetStartPoint == 1 && t->piggyback &&
- t->numberOfRecordsRequested &&
- (t->schema == 0 || *t->schema == 0) &&
- (t->sort_criteria == 0 || *t->sort_criteria == 0) )
- {
- sreq->largeSetLowerBound = odr_malloc (t->odr_out, sizeof(int));
- *sreq->largeSetLowerBound = 9999999;
- sreq->smallSetUpperBound = &t->numberOfRecordsRequested;
- sreq->mediumSetPresentNumber = &t->numberOfRecordsRequested;
- if (t->elementSetName && *t->elementSetName)
- {
- Z_ElementSetNames *esn = odr_malloc (t->odr_out, sizeof(*esn));
-
- esn->which = Z_ElementSetNames_generic;
- esn->u.generic = t->elementSetName;
- sreq->mediumSetElementSetNames = esn;
- sreq->smallSetElementSetNames = esn;
- }
- if (t->preferredRecordSyntax && *t->preferredRecordSyntax)
- sreq->preferredRecordSyntax =
- yaz_str_to_z3950oid (t->odr_out, CLASS_RECSYN,
- t->preferredRecordSyntax);
- }
- sreq->query = r->query;
- sreq->databaseNames = set_DatabaseNames (t, &sreq->num_databaseNames);
-
- send_APDU (t, apdu);
- return 1;
-}
-
-static int send_sort_present (Yaz_Association t)
-{
- if (!send_sort(t))
- return send_present (t);
- return 1;
-}
-
-static int send_present (Yaz_Association t)
-{
- Z_APDU *apdu = zget_APDU(t->odr_out, Z_APDU_presentRequest);
- Z_PresentRequest *req = apdu->u.presentRequest;
- int i = 0;
-
- if (t->error) /* don't continue on error */
- return 0;
- if (!t->resultSets) /* no result set yet? */
- return 0;
- while (t->resultSets->recordList)
- {
- if (i >= t->resultSets->recordList->num_records)
- { /* got all records ... */
- return 0;
- }
- if (!t->resultSets->recordList->records[i])
- break;
- i++;
- }
- /* got record(s) to retrieve */
-
- req->resultSetStartPoint = odr_malloc (t->odr_out, sizeof(int));
- *req->resultSetStartPoint = t->resultSetStartPoint + i;
-
- req->numberOfRecordsRequested = odr_malloc (t->odr_out, sizeof(int));
- if (t->resultSets->recordList)
- *req->numberOfRecordsRequested =
- t->resultSets->recordList->num_records - i;
- else
- *req->numberOfRecordsRequested = t->numberOfRecordsRequested;
-
- if (*req->numberOfRecordsRequested <= 0)
- return 0;
-
- if (t->preferredRecordSyntax && *t->preferredRecordSyntax)
- req->preferredRecordSyntax =
- yaz_str_to_z3950oid (t->odr_out, CLASS_RECSYN,
- t->preferredRecordSyntax);
- if (t->schema && *t->schema)
- {
- Z_RecordComposition *compo = (Z_RecordComposition *)
- odr_malloc (t->odr_out, sizeof(*compo));
-
- req->recordComposition = compo;
- compo->which = Z_RecordComp_complex;
- compo->u.complex = (Z_CompSpec *)
- odr_malloc(t->odr_out, sizeof(*compo->u.complex));
- compo->u.complex->selectAlternativeSyntax = (bool_t *)
- odr_malloc(t->odr_out, sizeof(bool_t));
- *compo->u.complex->selectAlternativeSyntax = 0;
-
- compo->u.complex->generic = (Z_Specification *)
- odr_malloc(t->odr_out, sizeof(*compo->u.complex->generic));
-
- compo->u.complex->generic->schema = (Odr_oid *)
- yaz_str_to_z3950oid (t->odr_out, CLASS_SCHEMA, t->schema);
-
- if (!compo->u.complex->generic->schema)
- {
- /* OID wasn't a schema! Try record syntax instead. */
-
- compo->u.complex->generic->schema = (Odr_oid *)
- yaz_str_to_z3950oid (t->odr_out, CLASS_RECSYN, t->schema);
- }
- if (t->elementSetName && *t->elementSetName)
- {
- compo->u.complex->generic->elementSpec = (Z_ElementSpec *)
- odr_malloc(t->odr_out, sizeof(Z_ElementSpec));
- compo->u.complex->generic->elementSpec->which =
- Z_ElementSpec_elementSetName;
- compo->u.complex->generic->elementSpec->u.elementSetName =
- odr_strdup (t->odr_out, t->elementSetName);
- }
- else
- compo->u.complex->generic->elementSpec = 0;
- compo->u.complex->num_dbSpecific = 0;
- compo->u.complex->dbSpecific = 0;
- compo->u.complex->num_recordSyntax = 0;
- compo->u.complex->recordSyntax = 0;
- }
- else if (t->elementSetName && *t->elementSetName)
- {
- Z_ElementSetNames *esn = odr_malloc (t->odr_out, sizeof(*esn));
- Z_RecordComposition *compo = odr_malloc (t->odr_out, sizeof(*compo));
-
- esn->which = Z_ElementSetNames_generic;
- esn->u.generic = t->elementSetName;
- compo->which = Z_RecordComp_simple;
- compo->u.simple = esn;
- req->recordComposition = compo;
- }
- send_APDU (t, apdu);
- return 1;
-}
-
-static int send_sort (Yaz_Association t)
-{
- if (t->error)
- return 0;
- if (!t->resultSets || t->resultSets->sorted)
- return 0;
- if (t->sort_criteria && *t->sort_criteria)
- {
- Z_APDU *apdu = zget_APDU(t->odr_out, Z_APDU_sortRequest);
- Z_SortRequest *req = apdu->u.sortRequest;
-
- req->num_inputResultSetNames = 1;
- req->inputResultSetNames = (Z_InternationalString **)
- odr_malloc (t->odr_out, sizeof(*req->inputResultSetNames));
- req->inputResultSetNames[0] = odr_strdup (t->odr_out, "default");
- req->sortedResultSetName = odr_strdup (t->odr_out, "default");
- req->sortSequence = yaz_sort_spec (t->odr_out, t->sort_criteria);
- if (!req->sortSequence)
- {
- t->resultSets->sorted = 1;
- return 0;
- }
- send_APDU (t, apdu);
- return 1;
- }
- return 0;
-}
-
-static void send_init(Yaz_Association t)
-{
- Z_APDU *apdu = zget_APDU(t->odr_out, Z_APDU_initRequest);
- Z_InitRequest *ireq = apdu->u.initRequest;
- Z_IdAuthentication *auth = odr_malloc(t->odr_out, sizeof(*auth));
- const char *auth_groupId = t->group;
- const char *auth_userId = t->user;
- const char *auth_password = t->pass;
-
- ODR_MASK_SET(ireq->options, Z_Options_search);
- ODR_MASK_SET(ireq->options, Z_Options_present);
- ODR_MASK_SET(ireq->options, Z_Options_namedResultSets);
- ODR_MASK_SET(ireq->options, Z_Options_scan);
- ODR_MASK_SET(ireq->options, Z_Options_sort);
- ODR_MASK_SET(ireq->options, Z_Options_extendedServices);
-
- ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_1);
- ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_2);
- ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_3);
-
- ireq->implementationName = "PHP/YAZ";
-
- *ireq->maximumRecordSize = 1024*1024;
- *ireq->preferredMessageSize = 1024*1024;
-
- if (auth_groupId || auth_password)
- {
-
- Z_IdPass *pass = odr_malloc(t->odr_out, sizeof(*pass));
- int i = 0;
- pass->groupId = 0;
- if (auth_groupId && *auth_groupId)
- {
- pass->groupId = odr_malloc(t->odr_out, strlen(auth_groupId)+1);
- strcpy(pass->groupId, auth_groupId);
- i++;
- }
- pass->userId = 0;
- if (auth_userId && *auth_userId)
- {
- pass->userId = odr_malloc(t->odr_out, strlen(auth_userId)+1);
- strcpy(pass->userId, auth_userId);
- i++;
- }
- pass->password = 0;
- if (auth_password && *auth_password)
- {
- pass->password = odr_malloc(t->odr_out, strlen(auth_password)+1);
- strcpy(pass->password, auth_password);
- i++;
- }
- if (i)
- {
- auth->which = Z_IdAuthentication_idPass;
- auth->u.idPass = pass;
- ireq->idAuthentication = auth;
- }
- }
- else if (auth_userId)
- {
- auth->which = Z_IdAuthentication_open;
- auth->u.open = odr_malloc(t->odr_out, strlen(auth_userId)+1);
- strcpy(auth->u.open, auth_userId);
- ireq->idAuthentication = auth;
- }
- if (t->proxy)
- yaz_oi_set_string_oidval(&ireq->otherInfo, t->odr_out,
- VAL_PROXY, 1, t->host_port);
- send_APDU (t, apdu);
-}
-
-static int do_event (int *id, int timeout)
-{
- fd_set input, output;
- int i;
- int no = 0;
- int max_fd = 0;
- struct timeval tv;
- YAZSLS_FETCH();
-
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
-
-#ifdef ZTS
- tsrm_mutex_lock (yaz_mutex);
-#endif
- FD_ZERO (&input);
- FD_ZERO (&output);
- for (i = 0; i < MAX_ASSOC; i++)
- {
- Yaz_Association p = shared_associations[i];
- int fd;
- if (!p || p->order != YAZSG(assoc_seq) || !p->cs)
- continue;
- fd = cs_fileno (p->cs);
- if (max_fd < fd)
- max_fd = fd;
- if (p->mask_select & PHP_YAZ_SELECT_READ)
- {
- FD_SET (fd, &input);
- no++;
- }
- if (p->mask_select & PHP_YAZ_SELECT_WRITE)
- {
- FD_SET (fd, &output);
- no++;
- }
- }
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- if (!no)
- return 0;
- no = select (max_fd+1, &input, &output, 0, &tv);
-#ifdef ZTS
- tsrm_mutex_lock (yaz_mutex);
-#endif
- for (i = 0; i<MAX_ASSOC; i++)
- {
- int fd;
- Yaz_Association p = shared_associations[i];
- if (!p || p->order != YAZSG(assoc_seq) || !p->cs)
- continue;
- *id = i+1;
- fd =cs_fileno(p->cs);
- if (no <= 0)
- {
- if (p->mask_select) /* only mark for those still pending */
- {
- p->error = PHP_YAZ_ERROR_TIMEOUT;
- do_close (p);
- }
- }
- else if (p->state == PHP_YAZ_STATE_CONNECTING)
- {
- if (FD_ISSET (fd, &output))
- {
- send_init(p);
- }
- else if (FD_ISSET (fd, &input))
- {
- do_close(p);
- p->error = PHP_YAZ_ERROR_CONNECT;
- }
- }
- else if (p->state == PHP_YAZ_STATE_ESTABLISHED)
- {
- if (FD_ISSET (fd, &input))
- do_read (p);
- if (p->cs && FD_ISSET (fd, &output))
- do_write (p);
- }
- else
- {
- do_close (p);
- p->error = PHP_YAZ_ERROR_CONNECTION_LOST;
- }
- }
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- return no;
-}
-
-static int strcmp_null(const char *s1, const char *s2)
-{
- if (s1 == 0 && s2 == 0)
- return 0;
- if (s1 == 0 || s2 == 0)
- return -1;
- return strcmp(s1, s2);
-}
-
-/* {{{ proto int yaz_connect(string zurl [ array options])
- Create target with given zurl. Returns positive id if successful. */
-PHP_FUNCTION(yaz_connect)
-{
- int i;
- char *cp;
- char *zurl_str;
- const char *user_str = 0, *group_str = 0, *pass_str = 0;
- const char *cookie_str = 0, *proxy_str = 0;
- int persistent = 1;
- int piggyback = 1;
- pval **zurl, **user = 0;
- Yaz_Association as;
- YAZSLS_FETCH();
-
- if (ZEND_NUM_ARGS() == 1)
- {
- if (zend_get_parameters_ex (1, &zurl) == FAILURE)
- WRONG_PARAM_COUNT;
- }
- else if (ZEND_NUM_ARGS() == 2)
- {
- if (zend_get_parameters_ex (2, &zurl, &user) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (Z_TYPE_PP(user) == IS_ARRAY)
- {
- long *persistent_val;
- long *piggyback_val;
- HashTable *ht = Z_ARRVAL_PP(user);
- user_str = array_lookup_string(ht, "user");
- group_str = array_lookup_string(ht, "group");
- pass_str = array_lookup_string(ht, "password");
- cookie_str = array_lookup_string(ht, "cookie");
- proxy_str = array_lookup_string(ht, "proxy");
- persistent_val = array_lookup_bool(ht, "persistent");
- if (persistent_val)
- persistent = *persistent_val;
- piggyback_val = array_lookup_bool(ht, "piggyback");
- if (piggyback_val)
- piggyback = *piggyback_val;
- }
- else
- {
- convert_to_string_ex (user);
- user_str = (*user)->value.str.val;
- }
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex (zurl);
- zurl_str = (*zurl)->value.str.val;
- for (cp = zurl_str; *cp && strchr("\t\n ", *cp); cp++)
- ;
- if (!*cp)
- RETURN_LONG(0);
-
- /* see if we have it already ... */
-#ifdef ZTS
- tsrm_mutex_lock (yaz_mutex);
-#endif
- for (i = 0; i<MAX_ASSOC; i++)
- {
- as = shared_associations[i];
- if (persistent && as && !as->in_use &&
- !strcmp_null (as->host_port, zurl_str) &&
- !strcmp_null (as->user, user_str) &&
- !strcmp_null (as->group, group_str) &&
- !strcmp_null (as->pass, pass_str) &&
- !strcmp_null (as->proxy, proxy_str) &&
- !strcmp_null (as->cookie_out, cookie_str))
- break;
- }
- if (i == MAX_ASSOC)
- {
- /* we didn't have it (or already in use) */
- int i0 = -1;
- int min_order = 2000000000;
- /* find completely free slot or the oldest one */
- for (i = 0; i<MAX_ASSOC && shared_associations[i]; i++)
- {
- as = shared_associations[i];
- if (persistent && !as->in_use && as->order < min_order)
- {
- min_order = as->order;
- i0 = i;
- }
- }
- if (i == MAX_ASSOC)
- {
- i = i0;
- if (i == -1)
- {
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- RETURN_LONG(0); /* no free slot */
- }
- else /* "best" free slot */
- yaz_association_destroy(shared_associations[i]);
- }
- shared_associations[i] = as = yaz_association_mk ();
- as->host_port = xstrdup (zurl_str);
- if (cookie_str)
- as->cookie_out = xstrdup (cookie_str);
- if (user_str)
- as->user = xstrdup (user_str);
- if (group_str)
- as->group = xstrdup (group_str);
- if (pass_str)
- as->pass = xstrdup (pass_str);
- if (proxy_str)
- as->proxy = xstrdup (proxy_str);
- }
- as->action = 0;
- as->in_use = 1;
- as->persistent = persistent;
- as->order = YAZSG(assoc_seq);
- as->error = 0;
- xfree (as->sort_criteria);
- as->sort_criteria = 0;
- as->piggyback = piggyback;
- as->numberOfRecordsRequested = 10;
- as->resultSetStartPoint = 1;
- xfree (as->local_databases);
- as->local_databases = 0;
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- ZEND_REGISTER_RESOURCE(return_value, &shared_associations[i], le_link);
-}
-/* }}} */
-
-/* {{{ proto int yaz_close(int id)
- Destory and close target */
-PHP_FUNCTION(yaz_close)
-{
- Yaz_Association p;
- pval **id;
- if (ZEND_NUM_ARGS() != 1)
- WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex (1, &id) == FAILURE)
- RETURN_FALSE;
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (!p)
- RETURN_FALSE;
- release_assoc (p);
- zend_list_delete ((*id)->value.lval);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int yaz_search(int id, string type, string query)
- Specify query of type for search - returns true if successful */
-PHP_FUNCTION(yaz_search)
-{
- char *query_str, *type_str;
- pval **id, **type, **query;
- Yaz_Association p;
- Yaz_ResultSet r;
- if (ZEND_NUM_ARGS() == 3)
- {
- if (zend_get_parameters_ex(3, &id, &type, &query) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (!p)
- {
- RETURN_FALSE;
- }
- p->action = 0;
- convert_to_string_ex (type);
- type_str = (*type)->value.str.val;
- convert_to_string_ex (query);
- query_str = (*query)->value.str.val;
- yaz_resultset_destroy (p->resultSets);
- r = p->resultSets = yaz_resultset_mk();
- r->query = odr_malloc (r->odr, sizeof(*r->query));
- if (!strcmp (type_str, "rpn"))
- {
- r->query->which = Z_Query_type_1;
- r->query->u.type_1 = p_query_rpn (r->odr, PROTO_Z3950, query_str);
- if (!r->query->u.type_1)
- {
- yaz_resultset_destroy(r);
- p->resultSets = 0;
- RETVAL_FALSE;
- }
- else
- {
- RETVAL_TRUE;
- }
- }
- else if (!strcmp(type_str, "ccl"))
- {
- r->query->which = Z_Query_type_2;
- r->query->u.type_2 = odr_malloc (r->odr, sizeof(*r->query->u.type_2));
- r->query->u.type_2->buf = odr_strdup(r->odr, query_str);
- r->query->u.type_2->len = strlen(query_str);
- }
- else
- {
- yaz_resultset_destroy(r);
- p->resultSets = 0;
- RETVAL_FALSE;
- }
- if (p->resultSets)
- p->action = send_search;
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_present(int id)
- Retrieve records */
-PHP_FUNCTION(yaz_present)
-{
- pval **id;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 1)
- WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(1, &id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (!p)
- {
- RETURN_FALSE;
- }
- p->action = 0;
- if (p->resultSets)
- {
- p->resultSets->recordList = 0;
- p->action = send_sort_present;
- }
- release_assoc (p);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int yaz_wait([array options])
- Process events. */
-PHP_FUNCTION(yaz_wait)
-{
- int i, id, timeout = 15;
- YAZSLS_FETCH();
-
- if (ZEND_NUM_ARGS() == 1)
- {
- long *val = 0;
- pval **pval_options = 0;
- HashTable *options_ht = 0;
- if (zend_get_parameters_ex(1, &pval_options) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(pval_options) != IS_ARRAY)
- {
- php_error(E_WARNING, "yaz_wait: Expected array parameter");
- RETURN_FALSE;
- }
- options_ht = Z_ARRVAL_PP(pval_options);
- val = array_lookup_long(options_ht, "timeout");
- if (val)
- timeout = *val;
- }
-#ifdef ZTS
- tsrm_mutex_lock (yaz_mutex);
-#endif
- for (i = 0; i<MAX_ASSOC; i++)
- {
- Yaz_Association p = shared_associations[i];
- if (!p || p->order != YAZSG(assoc_seq) || !p->action
- || p->mask_select)
- continue;
- if (!p->cs)
- {
- do_connect (p);
- }
- else
- {
- p->reconnect_flag = 1;
- (*p->action)(p);
- }
- }
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- while (do_event(&id, timeout))
- ;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int yaz_errno(int id)
- Return last error number (>0 for bib-1 diagnostic, <0 for other error, 0 for no error */
-PHP_FUNCTION(yaz_errno)
-{
- pval **id;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (!p)
- {
- RETURN_LONG(0);
- }
- RETVAL_LONG(p->error);
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto string yaz_error(int id)
- Return last error message */
-PHP_FUNCTION(yaz_error)
-{
- pval **id;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (p && p->error)
- {
- const char *msg = 0;
- if (p->error < 0)
- {
- switch (p->error)
- {
- case PHP_YAZ_ERROR_CONNECTION_LOST:
- msg = "connection lost";
- break;
- case PHP_YAZ_ERROR_DECODE:
- msg = "decoding failure";
- break;
- case PHP_YAZ_ERROR_ENCODE:
- msg = "encoding failure";
- break;
- case PHP_YAZ_ERROR_CONNECT:
- msg = "connect failed";
- break;
- case PHP_YAZ_ERROR_INIT:
- msg = "initialization failed";
- break;
- case PHP_YAZ_ERROR_TIMEOUT:
- msg = "timeout failure";
- break;
- default:
- msg = "unknown failure";
- break;
- }
- }
- else
- {
- msg = diagbib1_str (p->error);
- if (!msg)
- msg = "unknown diagnostic";
- }
- /* Not macro using because RETURN_STRING throws away const */
- return_value->value.str.len = strlen(msg);
- return_value->value.str.val =
- estrndup(msg, return_value->value.str.len);
- return_value->type = IS_STRING;
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto string yaz_addinfo(int id)
- Return additional info for last error (empty string if none) */
-PHP_FUNCTION(yaz_addinfo)
-{
- pval **id;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (p && p->error > 0 && p->addinfo && *p->addinfo)
- {
- RETVAL_STRING(p->addinfo, 1);
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_hits(int id)
- Return number of hits (result count) for last search */
-PHP_FUNCTION(yaz_hits)
-{
- pval **id;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
- if (!p || !p->resultSets)
- {
- RETVAL_LONG(0);
- }
- else
- {
- RETVAL_LONG(p->resultSets->resultCount);
- }
- release_assoc (p);
-}
-/* }}} */
-
-static Z_GenericRecord *marc_to_grs1(const char *buf, ODR o, Odr_oid *oid)
-{
- int entry_p;
- int record_length;
- int indicator_length;
- int identifier_length;
- int base_address;
- int length_data_entry;
- int length_starting;
- int length_implementation;
- int max_elements = 256;
- Z_GenericRecord *r = odr_malloc (o, sizeof(*r));
- r->elements = odr_malloc (o, sizeof(*r->elements) * max_elements);
- r->num_elements = 0;
-
- record_length = atoi_n (buf, 5);
- if (record_length < 25)
- return 0;
- indicator_length = atoi_n (buf+10, 1);
- identifier_length = atoi_n (buf+11, 1);
- base_address = atoi_n (buf+12, 5);
-
- length_data_entry = atoi_n (buf+20, 1);
- length_starting = atoi_n (buf+21, 1);
- length_implementation = atoi_n (buf+22, 1);
-
- for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
- {
- entry_p += 3+length_data_entry+length_starting;
- if (entry_p >= record_length)
- return 0;
- }
- base_address = entry_p+1;
- for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
- {
- Z_TaggedElement *tag;
- int data_length;
- int data_offset;
- int end_offset;
- int i;
- char tag_str[4];
- int identifier_flag = 1;
-
- memcpy (tag_str, buf+entry_p, 3);
- entry_p += 3;
- tag_str[3] = '\0';
-
- if ((r->num_elements + 1) >= max_elements)
- {
- Z_TaggedElement **tmp = r->elements;
-
- /* double array space, throw away old buffer (nibble memory) */
- r->elements = odr_malloc(o, sizeof(*r->elements) *
- (max_elements *= 2));
- memcpy(r->elements, tmp, r->num_elements * sizeof(*tmp));
- }
- tag = r->elements[r->num_elements++] = odr_malloc (o, sizeof(*tag));
- tag->tagType = odr_malloc(o, sizeof(*tag->tagType));
- *tag->tagType = 3;
- tag->tagOccurrence = 0;
- tag->metaData = 0;
- tag->appliedVariant = 0;
- tag->tagValue = odr_malloc (o, sizeof(*tag->tagValue));
- tag->tagValue->which = Z_StringOrNumeric_string;
- tag->tagValue->u.string = odr_strdup(o, tag_str);
-
- tag->content = odr_malloc(o, sizeof(*tag->content));
- tag->content->which = Z_ElementData_subtree;
-
- tag->content->u.subtree =
- odr_malloc (o, sizeof(*tag->content->u.subtree));
- tag->content->u.subtree->elements =
- odr_malloc (o, sizeof(*r->elements));
- tag->content->u.subtree->num_elements = 1;
-
- tag = tag->content->u.subtree->elements[0] =
- odr_malloc (o, sizeof(**tag->content->u.subtree->elements));
-
- tag->tagType = odr_malloc(o, sizeof(*tag->tagType));
- *tag->tagType = 3;
- tag->tagOccurrence = 0;
- tag->metaData = 0;
- tag->appliedVariant = 0;
- tag->tagValue = odr_malloc (o, sizeof(*tag->tagValue));
- tag->tagValue->which = Z_StringOrNumeric_string;
- tag->content = odr_malloc(o, sizeof(*tag->content));
-
- data_length = atoi_n (buf+entry_p, length_data_entry);
- entry_p += length_data_entry;
- data_offset = atoi_n (buf+entry_p, length_starting);
- entry_p += length_starting;
- i = data_offset + base_address;
- end_offset = i+data_length-1;
-
-
- if (indicator_length > 0 && indicator_length < 5)
- {
- if (buf[i + indicator_length] != ISO2709_IDFS)
- identifier_flag = 0;
- }
- else if (!memcmp (tag_str, "00", 2))
- identifier_flag = 0;
-
-
- if (identifier_flag && indicator_length)
- {
- /* indicator */
- tag->tagValue->u.string = odr_malloc(o, indicator_length+1);
- memcpy (tag->tagValue->u.string, buf + i, indicator_length);
- tag->tagValue->u.string[indicator_length] = '\0';
- i += indicator_length;
-
- tag->content->which = Z_ElementData_subtree;
-
- tag->content->u.subtree =
- odr_malloc (o, sizeof(*tag->content->u.subtree));
- tag->content->u.subtree->elements =
- odr_malloc (o, 256 * sizeof(*r->elements));
- tag->content->u.subtree->num_elements = 0;
-
- while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS
- && i < end_offset)
- {
- int i0;
- /* prepare tag */
- Z_TaggedElement *parent_tag = tag;
- Z_TaggedElement *tag = odr_malloc (o, sizeof(*tag));
-
- if (parent_tag->content->u.subtree->num_elements < 256)
- parent_tag->content->u.subtree->elements[
- parent_tag->content->u.subtree->num_elements++] = tag;
-
- tag->tagType = odr_malloc(o, sizeof(*tag->tagType));
- *tag->tagType = 3;
- tag->tagOccurrence = 0;
- tag->metaData = 0;
- tag->appliedVariant = 0;
- tag->tagValue = odr_malloc (o, sizeof(*tag->tagValue));
- tag->tagValue->which = Z_StringOrNumeric_string;
-
- /* sub field */
- tag->tagValue->u.string = odr_malloc (o, identifier_length);
- memcpy (tag->tagValue->u.string, buf+i+1, identifier_length-1);
- tag->tagValue->u.string[identifier_length-1] = '\0';
- i += identifier_length;
-
- /* data ... */
- tag->content = odr_malloc(o, sizeof(*tag->content));
- tag->content->which = Z_ElementData_string;
-
- i0 = i;
- while (buf[i] != ISO2709_RS && buf[i] != ISO2709_IDFS &&
- buf[i] != ISO2709_FS && i < end_offset)
- i++;
-
- tag->content->u.string = odr_malloc (o, i - i0 + 1);
- memcpy (tag->content->u.string, buf + i0, i - i0);
- tag->content->u.string[i - i0] = '\0';
- }
- }
- else
- {
- int i0 = i;
-
- tag->tagValue->u.string = "@";
- tag->content->which = Z_ElementData_string;
-
- while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS &&
- i < end_offset)
- i++;
- tag->content->u.string = odr_malloc (o, i - i0 +1);
- memcpy (tag->content->u.string, buf+i0, i - i0);
- tag->content->u.string[i-i0] = '\0';
- }
- }
- return r;
-}
-
-static void retval_grs1 (zval *return_value, Z_GenericRecord *p)
-{
- Z_GenericRecord *grs[20];
- int eno[20];
- int level = 0;
-
- if (array_init(return_value) == FAILURE)
- {
- RETURN_FALSE;
- }
- eno[level] = 0;
- grs[level] = p;
- while (level >= 0)
- {
- zval *my_zval;
- Z_TaggedElement *e = 0;
- Z_GenericRecord *p = grs[level];
- int i;
- char tag[256];
- int taglen = 0;
-
- if (eno[level] >= p->num_elements)
- {
- --level;
- if (level >= 0)
- eno[level]++;
- continue;
- }
- /* eno[level]++; */
-
- *tag = '\0';
- for (i = 0; i<=level; i++)
- {
- int tag_type = 3;
- e = grs[i]->elements[eno[i]];
-
- if (e->tagType)
- tag_type = *e->tagType;
-
- taglen = strlen(tag);
- sprintf (tag+taglen, "(%d,", tag_type);
- taglen = strlen(tag);
-
- if (e->tagValue->which == Z_StringOrNumeric_string)
- {
- int len = strlen(e->tagValue->u.string);
- memcpy (tag + taglen, e->tagValue->u.string, len);
- tag[taglen+len] = '\0';
- }
- else if (e->tagValue->which == Z_StringOrNumeric_numeric)
- {
- sprintf (tag + taglen, "%d", *e->tagValue->u.numeric);
- }
- taglen = strlen(tag);
- strcpy (tag + taglen, ")");
- }
- ALLOC_ZVAL(my_zval);
- array_init(my_zval);
- INIT_PZVAL(my_zval);
-
- add_next_index_string(my_zval, tag, 1);
-
- switch (e->content->which)
- {
- case Z_ElementData_string:
- add_next_index_string (my_zval, e->content->u.string, 1);
- break;
- case Z_ElementData_numeric:
- add_next_index_long (my_zval, *e->content->u.numeric);
- break;
- case Z_ElementData_trueOrFalse:
- add_next_index_long (my_zval, *e->content->u.trueOrFalse);
- break;
- case Z_ElementData_subtree:
- level++;
- grs[level] = e->content->u.subtree;
- eno[level] = -1;
- }
- zend_hash_next_index_insert (return_value->value.ht,
- (void *) &my_zval, sizeof(zval *), NULL);
- eno[level]++;
- }
-}
-
-
-/* {{{ proto string yaz_record(int id, int pos, string type)
- Return record information at given result set position */
-PHP_FUNCTION(yaz_record)
-{
- pval **pval_id, **pval_pos, **pval_type;
- Yaz_Association p;
- int pos;
- char *type;
-
- if (ZEND_NUM_ARGS() != 3)
- WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(3, &pval_id, &pval_pos, &pval_type) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-
- convert_to_long_ex(pval_pos);
- pos = (*pval_pos)->value.lval;
-
- convert_to_string_ex(pval_type);
- type = (*pval_type)->value.str.val;
-
- if (p && p->resultSets && p->resultSets->recordList &&
- pos >= p->resultSetStartPoint &&
- pos < p->resultSetStartPoint + p->resultSets->recordList->num_records)
- {
- Z_NamePlusRecord *npr;
- npr = p->resultSets->recordList->records[pos - p->resultSetStartPoint];
-
- if (npr && npr->which == Z_NamePlusRecord_databaseRecord)
- {
- Z_External *r = (Z_External *) npr->u.databaseRecord;
- oident *ent = oid_getentbyoid(r->direct_reference);
-
- if (!strcmp (type, "syntax"))
- {
- if (ent && ent->desc)
- RETVAL_STRING(ent->desc, 1);
- }
- else if (!strcmp (type, "database"))
- {
- if (npr->databaseName)
- RETVAL_STRING(npr->databaseName, 1);
- }
- else if (!strcmp (type, "string"))
- {
- if (r->which == Z_External_sutrs && ent->value == VAL_SUTRS)
- {
- RETVAL_STRINGL(r->u.sutrs->buf, r->u.sutrs->len, 1);
- }
- else if (r->which == Z_External_octet)
- {
- char *buf = (char *) (r->u.octet_aligned->buf);
- int len = r->u.octet_aligned->len;
-
- switch (ent->value)
- {
- case VAL_SOIF:
- case VAL_HTML:
- break;
- case VAL_TEXT_XML:
- case VAL_APPLICATION_XML:
- break;
- default:
- break;
- }
- RETVAL_STRINGL(buf, len, 1);
- }
- }
- else if (!strcmp (type, "array"))
- {
- if (r->which == Z_External_grs1 && ent->value == VAL_GRS1)
- {
- retval_grs1 (return_value, r->u.grs1);
- }
- else if (r->which == Z_External_octet)
- {
- char *buf = (char *) (r->u.octet_aligned->buf);
- ODR odr = odr_createmem (ODR_DECODE);
- Z_GenericRecord *rec = 0;
-
- switch (ent->value)
- {
- case VAL_SOIF:
- case VAL_HTML:
- break;
- case VAL_TEXT_XML:
- case VAL_APPLICATION_XML:
- /* text2grs1 (&buf, &len, t->odr_in, 0, 0); */
- break;
- default:
- rec = marc_to_grs1 (buf, odr, r->direct_reference);
- }
- if (rec)
- retval_grs1 (return_value, rec);
- odr_destroy (odr);
- }
- }
- }
- }
- release_assoc (p);
-}
-/* }}} */
-
-
-/* {{{ proto int yaz_syntax(int id, string syntax)
- Set record syntax for retrieval */
-PHP_FUNCTION(yaz_syntax)
-{
- pval **pval_id, **pval_syntax;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_syntax) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- convert_to_string_ex (pval_syntax);
- xfree (p->preferredRecordSyntax);
- p->preferredRecordSyntax = xstrdup ((*pval_syntax)->value.str.val);
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_element(int id, string elementsetname)
- Set Element-Set-Name for retrieval */
-PHP_FUNCTION(yaz_element)
-{
- pval **pval_id, **pval_element;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_element) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- convert_to_string_ex (pval_element);
- xfree (p->elementSetName);
- p->elementSetName = xstrdup ((*pval_element)->value.str.val);
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_schema(int id, string schema)
- Set Schema for retrieval */
-PHP_FUNCTION(yaz_schema)
-{
- pval **pval_id, **pval_element;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_element) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- convert_to_string_ex (pval_element);
- xfree (p->schema);
- p->schema = xstrdup ((*pval_element)->value.str.val);
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_range(int id, int start, int number)
- Set result set start point and number of records to request */
-
-PHP_FUNCTION(yaz_range)
-{
- pval **pval_id, **pval_start, **pval_number;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &pval_id, &pval_start, &pval_number) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- convert_to_long_ex (pval_start);
- p->resultSetStartPoint = (*pval_start)->value.lval;
- if (p->resultSetStartPoint < 1)
- p->resultSetStartPoint = 1;
- convert_to_long_ex (pval_number);
- p->numberOfRecordsRequested = (*pval_number)->value.lval;
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_sort(int id, string sortspec)
- Set result set sorting criteria */
-
-PHP_FUNCTION(yaz_sort)
-{
- pval **pval_id, **pval_criteria;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_criteria) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- convert_to_string_ex (pval_criteria);
- if (p->resultSets && p->resultSets->sorted)
- {
- if (!p->sort_criteria || strcmp (p->sort_criteria,
- (*pval_criteria)->value.str.val))
- p->resultSets->sorted = 0;
- }
- xfree (p->sort_criteria);
- p->sort_criteria = xstrdup ((*pval_criteria)->value.str.val);
- }
- release_assoc (p);
-}
-/* }}} */
-
-static const char *ill_array_lookup (void *clientData, const char *idx)
-{
- return array_lookup_string((HashTable *) clientData, idx+4);
-}
-
-static Z_External *encode_ill_request (Yaz_Association t, HashTable *ht)
-{
- ODR out = t->odr_out;
- ILL_Request *req;
- Z_External *r = 0;
- struct ill_get_ctl ctl;
-
- ctl.odr = t->odr_out;
- ctl.clientData = ht;
- ctl.f = ill_array_lookup;
-
- req = ill_get_ILLRequest(&ctl, "ill", 0);
-
- if (!ill_Request (out, &req, 0, 0))
- {
- int ill_request_size;
- char *ill_request_buf = odr_getbuf (out, &ill_request_size, 0);
- if (ill_request_buf)
- odr_setbuf (out, ill_request_buf, ill_request_size, 1);
- php_error(E_WARNING, "yaz_itemorder: Expected array parameter");
- return 0;
- }
- else
- {
- oident oid;
- int illRequest_size = 0;
- char *illRequest_buf = odr_getbuf (out, &illRequest_size, 0);
-
- oid.proto = PROTO_GENERAL;
- oid.oclass = CLASS_GENERAL;
- oid.value = VAL_ISO_ILL_1;
-
- r = (Z_External *) odr_malloc (out, sizeof(*r));
- r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid));
- r->indirect_reference = 0;
- r->descriptor = 0;
- r->which = Z_External_single;
-
- r->u.single_ASN1_type = (Odr_oct *)
- odr_malloc (out, sizeof(*r->u.single_ASN1_type));
- r->u.single_ASN1_type->buf = odr_malloc (out, illRequest_size);
- r->u.single_ASN1_type->len = illRequest_size;
- r->u.single_ASN1_type->size = illRequest_size;
- memcpy (r->u.single_ASN1_type->buf, illRequest_buf, illRequest_size);
- }
- return r;
-}
-
-static Z_ItemOrder *encode_item_order(Yaz_Association t,
- HashTable *ht)
-{
- Z_ItemOrder *req = odr_malloc (t->odr_out, sizeof(*req));
- const char *str;
-
- req->which=Z_IOItemOrder_esRequest;
- req->u.esRequest = (Z_IORequest *)
- odr_malloc(t->odr_out,sizeof(Z_IORequest));
-
- /* to keep part ... */
- req->u.esRequest->toKeep = (Z_IOOriginPartToKeep *)
- odr_malloc(t->odr_out,sizeof(Z_IOOriginPartToKeep));
- req->u.esRequest->toKeep->supplDescription = 0;
- req->u.esRequest->toKeep->contact =
- odr_malloc (t->odr_out, sizeof(*req->u.esRequest->toKeep->contact));
-
- str = array_lookup_string (ht, "contact-name");
- req->u.esRequest->toKeep->contact->name = str ?
- nmem_strdup (t->odr_out->mem, str) : 0;
-
- str = array_lookup_string (ht, "contact-phone");
- req->u.esRequest->toKeep->contact->phone = str ?
- nmem_strdup (t->odr_out->mem, str) : 0;
-
- str = array_lookup_string (ht, "contact-email");
- req->u.esRequest->toKeep->contact->email = str ?
- nmem_strdup (t->odr_out->mem, str) : 0;
-
- req->u.esRequest->toKeep->addlBilling = 0;
-
- /* not to keep part ... */
- req->u.esRequest->notToKeep = (Z_IOOriginPartNotToKeep *)
- odr_malloc(t->odr_out,sizeof(Z_IOOriginPartNotToKeep));
-
- req->u.esRequest->notToKeep->resultSetItem = (Z_IOResultSetItem *)
- odr_malloc(t->odr_out, sizeof(Z_IOResultSetItem));
- req->u.esRequest->notToKeep->resultSetItem->resultSetId = "default";
- req->u.esRequest->notToKeep->resultSetItem->item =
- (int *) odr_malloc(t->odr_out, sizeof(int));
-
- str = array_lookup_string (ht, "itemorder-item");
- *req->u.esRequest->notToKeep->resultSetItem->item =
- (str ? atoi(str) : 1);
-
- req->u.esRequest->notToKeep->itemRequest =
- encode_ill_request(t, ht);
-
- return req;
-}
-
-static Z_APDU *encode_es_itemorder (Yaz_Association t, HashTable *ht)
-{
- Z_APDU *apdu = zget_APDU(t->odr_out, Z_APDU_extendedServicesRequest);
- Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
- const char *str;
- struct oident oident;
- int oid[OID_SIZE];
- Z_External *r = odr_malloc (t->odr_out, sizeof(*r));
-
- *req->function = Z_ExtendedServicesRequest_create;
- oident.proto = PROTO_Z3950;
- oident.oclass = CLASS_EXTSERV;
- oident.value = VAL_ITEMORDER;
- req->taskSpecificParameters = r;
- r->direct_reference =
- odr_oiddup(t->odr_out, oid_ent_to_oid(&oident, oid));
- r->indirect_reference = 0;
- r->descriptor = 0;
- r->which = Z_External_itemOrder;
- r->u.itemOrder = encode_item_order (t, ht);
- req->packageType = odr_oiddup(t->odr_out, oid_ent_to_oid(&oident, oid));
-
- str = array_lookup_string(ht, "package-name");
- if (str && *str)
- req->packageName = nmem_strdup (t->odr_out->mem, str);
-
- str = array_lookup_string(ht, "user-id");
- if (str)
- req->userId = nmem_strdup (t->odr_out->mem, str);
-
- return apdu;
-}
-
-
-/* {{{ proto int yaz_itemorder(int id, array package)
- Sends Item Order request */
-
-PHP_FUNCTION(yaz_itemorder)
-{
- pval **pval_id, **pval_package;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_package) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(pval_package) != IS_ARRAY)
- {
- php_error(E_WARNING, "yaz_itemorder: Expected array parameter");
- RETURN_FALSE;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- Z_APDU *apdu;
- p->action = 0;
-
- odr_reset (p->odr_es);
- p->es_response = 0;
-
- apdu = encode_es_itemorder (p, Z_ARRVAL_PP(pval_package));
- if (apdu)
- {
- char *buf;
- encode_APDU(p, apdu, p->odr_out);
- buf = odr_getbuf(p->odr_out, &p->ill_len_out, 0);
- xfree (p->ill_buf_out);
- p->ill_buf_out = xmalloc (p->ill_len_out);
- memcpy (p->ill_buf_out, buf, p->ill_len_out);
- p->action = send_packet;
- }
- }
- release_assoc (p);
-}
-/* }}} */
-
-static Z_APDU *encode_scan (Yaz_Association t, const char *type,
- const char *query, HashTable *ht)
-{
- Z_APDU *apdu = zget_APDU(t->odr_out, Z_APDU_scanRequest);
- Z_ScanRequest *req = apdu->u.scanRequest;
- const char *val;
- if (!strcmp(type, "rpn"))
- {
- if (!(req->termListAndStartPoint =
- p_query_scan(t->odr_out, PROTO_Z3950, &req->attributeSet,
- query)))
- {
- char str[80];
- sprintf (str, "YAZ: Bad Scan query: '%.40s'", query);
- php_error (E_WARNING, str);
- return 0;
- }
- }
- else
- {
- char str[80];
- sprintf (str, "YAZ: Bad Scan query type: '%.40s'", type);
- php_error (E_WARNING, str);
- return 0;
- }
- val = array_lookup_string(ht, "number");
- if (val && *val)
- *req->numberOfTermsRequested = atoi(val);
- val = array_lookup_string(ht, "position");
- if (val && *val)
- {
- req->preferredPositionInResponse =
- odr_malloc (t->odr_out, sizeof(int));
- *req->preferredPositionInResponse = atoi(val);
- }
- val = array_lookup_string(ht, "stepsize");
- if (val && *val)
- {
- req->stepSize = odr_malloc (t->odr_out, sizeof(int));
- *req->stepSize = atoi(val);
- }
- req->databaseNames = set_DatabaseNames (t, &req->num_databaseNames);
- return apdu;
-}
-
-/* {{{ proto int yaz_scan(int id, type, query [, flags])
- Sends Scan Request */
-PHP_FUNCTION(yaz_scan)
-{
- pval **pval_id, **pval_type, **pval_query, **pval_flags = 0;
- HashTable *flags_ht = 0;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() == 3)
- {
- if (zend_get_parameters_ex(3, &pval_id, &pval_type, &pval_query) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- }
- else if (ZEND_NUM_ARGS() == 4)
- {
- if (zend_get_parameters_ex(4, &pval_id, &pval_type, &pval_query,
- &pval_flags) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(pval_flags) != IS_ARRAY)
- {
- php_error(E_WARNING, "yaz_scan: Bad flags parameter");
- RETURN_FALSE;
- }
- flags_ht = Z_ARRVAL_PP(pval_flags);
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex (pval_type);
- convert_to_string_ex (pval_query);
-
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- Z_APDU *apdu;
- p->action = 0;
- apdu = encode_scan (p, Z_STRVAL_PP(pval_type), Z_STRVAL_PP(pval_query),
- flags_ht);
- if (apdu)
- {
- char *buf;
- odr_reset(p->odr_scan);
- p->scan_response = 0;
- encode_APDU(p, apdu, p->odr_out);
- buf = odr_getbuf(p->odr_out, &p->ill_len_out, 0);
- xfree (p->ill_buf_out);
- p->ill_buf_out = xmalloc (p->ill_len_out);
- memcpy (p->ill_buf_out, buf, p->ill_len_out);
- p->action = send_packet;
- }
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_es_result(int id)
- Inspects Extended Services Result */
-PHP_FUNCTION(yaz_es_result)
-{
- pval **pval_id;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() == 1)
- {
- if (zend_get_parameters_ex(1, &pval_id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- if (array_init(return_value) == FAILURE)
- {
- RETURN_FALSE;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p && p->es_response)
- {
- int i;
- Z_ExtendedServicesResponse *res = p->es_response;
-
- if (res->taskPackage &&
- res->taskPackage->which == Z_External_extendedService)
- {
- Z_TaskPackage *taskPackage = res->taskPackage->u.extendedService;
- Odr_oct *id = taskPackage->targetReference;
-
- if (id)
- add_assoc_stringl (return_value, "targetReference",
- id->buf, id->len, 1);
- }
- }
- release_assoc (p);
-}
-
-/* }}} */
-
-/* {{{ proto int yaz_scan_result(int id, array options)
- Inspects Scan Result */
-PHP_FUNCTION(yaz_scan_result)
-{
- pval **pval_id, **pval_opt = 0;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() == 2)
- {
- if (zend_get_parameters_ex(2, &pval_id, &pval_opt) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- }
- else if (ZEND_NUM_ARGS() == 1)
- {
- if (zend_get_parameters_ex(1, &pval_id) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- if (array_init(return_value) == FAILURE)
- {
- RETURN_FALSE;
- }
- if (pval_opt && array_init(*pval_opt) == FAILURE)
- {
- RETURN_FALSE;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p && p->scan_response)
- {
- int i;
- Z_ScanResponse *res = p->scan_response;
- if (pval_opt)
- {
- if (res->numberOfEntriesReturned)
- add_assoc_long(*pval_opt, "number",
- *res->numberOfEntriesReturned);
- if (res->stepSize)
- add_assoc_long(*pval_opt, "stepsize", *res->stepSize);
- if (res->positionOfTerm)
- add_assoc_long(*pval_opt, "position", *res->positionOfTerm);
- if (res->scanStatus)
- add_assoc_long(*pval_opt, "status", *res->scanStatus);
- }
- for (i = 0; res->entries && i < res->entries->num_entries; i++)
- {
- zval *my_zval;
- ALLOC_ZVAL(my_zval);
- array_init(my_zval);
- INIT_PZVAL(my_zval);
-
- if (res->entries->entries[i]->which == Z_Entry_termInfo)
- {
- Z_TermInfo *t = res->entries->entries[i]->u.termInfo;
- add_next_index_string(my_zval, "term", 1);
-
- if (t->term->which == Z_Term_general)
- add_next_index_stringl (my_zval, t->term->u.general->buf,
- t->term->u.general->len, 1);
- else
- add_next_index_string (my_zval, "?", 1);
- add_next_index_long (my_zval, t->globalOccurrences ?
- *t->globalOccurrences : 0);
- }
- else
- add_next_index_string(my_zval, "unknown", 1);
-
- zend_hash_next_index_insert (
- return_value->value.ht, (void *) &my_zval, sizeof(zval *),
- NULL);
- }
-
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_ccl_conf(int id, array package)
- Configure CCL package */
-
-PHP_FUNCTION(yaz_ccl_conf)
-{
- pval **pval_id, **pval_package;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_package) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(pval_package) != IS_ARRAY)
- {
- php_error(E_WARNING, "yaz_ccl_conf: Expected array parameter");
- RETURN_FALSE;
- }
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- HashTable *ht = Z_ARRVAL_PP(pval_package);
- HashPosition pos;
- zval **ent;
- char *key;
-
- ccl_qual_rm(&p->ccl_parser->bibset);
- p->ccl_parser->bibset = ccl_qual_mk();
- for(zend_hash_internal_pointer_reset_ex(ht, &pos);
- zend_hash_get_current_data_ex(ht, (void**) &ent, &pos) == SUCCESS;
- zend_hash_move_forward_ex(ht, &pos))
- {
- ulong idx;
-#if PHP_API_VERSION > 20010101
- int type = zend_hash_get_current_key_ex(ht, &key, 0,
- &idx, 0, &pos);
-#else
- int type = zend_hash_get_current_key_ex(ht, &key, 0,
- &idx, &pos);
-#endif
- if (type != HASH_KEY_IS_STRING || Z_TYPE_PP(ent) != IS_STRING)
- continue;
- ccl_qual_fitem(p->ccl_parser->bibset, (*ent)->value.str.val, key);
- }
- }
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_ccl_parse(int id, string query, array res)
- Parse a CCL query */
-
-PHP_FUNCTION(yaz_ccl_parse)
-{
- pval **pval_id, **pval_query, **pval_res = 0;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &pval_id, &pval_query, &pval_res) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- pval_destructor(*pval_res);
- if (array_init(*pval_res) == FAILURE)
- {
- php_error(E_WARNING, "cannot initialize array");
- RETURN_FALSE;
- }
- convert_to_string_ex (pval_query);
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- const char *query_str = (*pval_query)->value.str.val;
- struct ccl_rpn_node *rpn;
- struct ccl_token *token_list =
- ccl_parser_tokenize(p->ccl_parser, query_str);
- rpn = ccl_parser_find(p->ccl_parser, token_list);
- ccl_token_del(token_list);
-
- add_assoc_long(*pval_res, "errorcode", p->ccl_parser->error_code);
- if (p->ccl_parser->error_code)
- {
- add_assoc_string(*pval_res, "errorstring",
- (char*) ccl_err_msg(p->ccl_parser->error_code),
- 1);
- add_assoc_long(*pval_res, "errorpos",
- p->ccl_parser->error_pos - query_str);
- RETVAL_FALSE;
- }
- else
- {
- WRBUF wrbuf_pqf = wrbuf_alloc();
- ccl_pquery(wrbuf_pqf, rpn);
- add_assoc_stringl(*pval_res, "rpn", wrbuf_buf(wrbuf_pqf),
- wrbuf_len(wrbuf_pqf),1);
- wrbuf_free(wrbuf_pqf, 1);
- RETVAL_TRUE;
- }
- ccl_rpn_delete(rpn);
- }
- else
- RETVAL_FALSE;
- release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_database (int id, string databases)
- Specify the databases within a session */
-
-PHP_FUNCTION(yaz_database)
-{
- pval **pval_id, **pval_database;
- Yaz_Association p;
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pval_id, &pval_database) ==
- FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex (pval_database);
- get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
- if (p)
- {
- xfree (p->local_databases);
- p->local_databases = xstrdup ((*pval_database)->value.str.val);
- RETVAL_TRUE;
- }
- else
- RETVAL_FALSE;
- release_assoc (p);
-}
-/* }}} */
-
-
-/* {{{ php_yaz_init_globals
- */
-static void php_yaz_init_globals(zend_yaz_globals *yaz_globals)
-{
- yaz_globals->assoc_seq = 0;
-}
-/* }}} */
-
-void yaz_close_session(Yaz_Association *as)
-{
- YAZSLS_FETCH();
-
- if (*as && (*as)->order == YAZSG(assoc_seq))
- {
- if ((*as)->persistent)
- (*as)->in_use = 0;
- else
- {
- yaz_association_destroy(*as);
- *as = 0;
- }
- }
-}
-
-static void yaz_close_link (zend_rsrc_list_entry *rsrc
-#ifdef TSRMLS_DC
- TSRMLS_DC
-#endif
-)
-{
- Yaz_Association *as = (Yaz_Association *) rsrc->ptr;
- yaz_close_session (as);
-}
-
-PHP_MINIT_FUNCTION(yaz)
-{
- int i;
- nmem_init();
-#ifdef ZTS
- yaz_mutex = tsrm_mutex_alloc();
-#endif
- ZEND_INIT_MODULE_GLOBALS(yaz, php_yaz_init_globals, NULL);
-
- le_link = zend_register_list_destructors_ex (yaz_close_link, 0,
- "YAZ link", module_number);
- order_associations = 1;
- shared_associations = xmalloc (sizeof(*shared_associations) * MAX_ASSOC);
- for (i = 0; i<MAX_ASSOC; i++)
- shared_associations[i] = 0;
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(yaz)
-{
- int i;
-
- if (shared_associations)
- {
- for (i = 0; i<MAX_ASSOC; i++)
- yaz_association_destroy (shared_associations[i]);
- xfree (shared_associations);
- shared_associations = 0;
- nmem_exit();
- }
-#ifdef ZTS
- tsrm_mutex_free (yaz_mutex);
-#endif
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(yaz)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "YAZ Support", "enabled");
- php_info_print_table_row(2, "YAZ Version", YAZ_VERSION);
- php_info_print_table_end();
-}
-
-PHP_RSHUTDOWN_FUNCTION(yaz)
-{
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(yaz)
-{
- YAZSLS_FETCH();
-#ifdef ZTS
- tsrm_mutex_lock (yaz_mutex);
-#endif
- YAZSG(assoc_seq) = order_associations++;
-#ifdef ZTS
- tsrm_mutex_unlock (yaz_mutex);
-#endif
- return SUCCESS;
-}
-
-zend_module_entry yaz_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "yaz",
- yaz_functions,
- PHP_MINIT(yaz),
- PHP_MSHUTDOWN(yaz),
- PHP_RINIT(yaz),
- PHP_RSHUTDOWN(yaz),
- PHP_MINFO(yaz),
-#if ZEND_MODULE_API_NO >= 20010901
- NO_VERSION_YET,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_YAZ
-ZEND_GET_MODULE(yaz)
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/yaz/php_yaz.h b/ext/yaz/php_yaz.h
deleted file mode 100644
index 4e6f0cb147..0000000000
--- a/ext/yaz/php_yaz.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Adam Dickmeiss <adam@indexdata.dk> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_YAZ_H
-#define PHP_YAZ_H
-
-#if HAVE_YAZ
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry yaz_module_entry;
-#define yaz_module_ptr &yaz_module_entry
-
-PHP_FUNCTION(yaz_connect);
-PHP_FUNCTION(yaz_close);
-PHP_FUNCTION(yaz_search);
-PHP_FUNCTION(yaz_wait);
-PHP_FUNCTION(yaz_errno);
-PHP_FUNCTION(yaz_error);
-PHP_FUNCTION(yaz_addinfo);
-PHP_FUNCTION(yaz_hits);
-PHP_FUNCTION(yaz_record);
-PHP_FUNCTION(yaz_syntax);
-PHP_FUNCTION(yaz_element);
-PHP_FUNCTION(yaz_range);
-PHP_FUNCTION(yaz_itemorder);
-PHP_FUNCTION(yaz_scan);
-PHP_FUNCTION(yaz_scan_result);
-PHP_FUNCTION(yaz_es_result);
-PHP_FUNCTION(yaz_present);
-PHP_FUNCTION(yaz_ccl_conf);
-PHP_FUNCTION(yaz_ccl_parse);
-PHP_FUNCTION(yaz_database);
-PHP_FUNCTION(yaz_sort);
-PHP_FUNCTION(yaz_schema);
-
-ZEND_BEGIN_MODULE_GLOBALS(yaz)
- int assoc_seq;
-ZEND_END_MODULE_GLOBALS(yaz)
-
-#ifdef ZTS
-# define YAZSLS_D zend_mysql_globals *yaz_globals
-# define YAZSLS_DC , YAZSLS_D
-# define YAZSLS_C yaz_globals
-# define YAZSLS_CC , YAZSLS_C
-# define YAZSG(v) (yaz_globals->v)
-# define YAZSLS_FETCH() zend_yaz_globals *yaz_globals = ts_resource(yaz_globals_id)
-#else
-# define YAZSLS_D
-# define YAZSLS_DC
-# define YAZSLS_C
-# define YAZSLS_CC
-# define YAZSG(v) (yaz_globals.v)
-# define YAZSLS_FETCH()
-#endif
-
-#else
-
-#define yaz_module_ptr NULL
-#endif
-
-#define phpext_yaz_ptr yaz_module_ptr
-#endif
diff --git a/ext/yaz/yaz.dsp b/ext/yaz/yaz.dsp
deleted file mode 100644
index ee9d6ee163..0000000000
--- a/ext/yaz/yaz.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="yaz" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=yaz - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "yaz.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "yaz.mak" CFG="yaz - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "yaz - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "yaz - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "yaz - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "YAZ_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_YAZ" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_YAZ=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib yaz.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_yaz.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "yaz - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "YAZ_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_YAZ" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_YAZ=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts-debug.lib yaz.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_yaz.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "yaz - Win32 Release_TS"
-# Name "yaz - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_yaz.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_yaz.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\README
-# End Source File
-# End Target
-# End Project
diff --git a/ext/yp/CREDITS b/ext/yp/CREDITS
deleted file mode 100644
index 4c52145877..0000000000
--- a/ext/yp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Yellow Pages
-Stephanie Wehner, Fredrik Ohrn
diff --git a/ext/yp/config.m4 b/ext/yp/config.m4
deleted file mode 100644
index f5f912bc58..0000000000
--- a/ext/yp/config.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(yp,whether to include YP support,
-[ --enable-yp Include YP support.])
-
-if test "$PHP_YP" != "no"; then
- AC_DEFINE(HAVE_YP,1,[ ])
- PHP_NEW_EXTENSION(yp, yp.c, $ext_shared)
- case $host_alias in
- *solaris*)
- AC_DEFINE(SOLARIS_YP,1,[ ]) ;;
- esac
-fi
diff --git a/ext/yp/php_yp.h b/ext/yp/php_yp.h
deleted file mode 100644
index ee5de6c882..0000000000
--- a/ext/yp/php_yp.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stephanie Wehner <_@r4k.net> |
- | Fredrik Ohrn |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_YP_H
-#define PHP_YP_H
-
-#if HAVE_YP
-
-#ifdef PHP_WIN32
-#define PHP_YP_API __declspec(dllexport)
-#else
-#define PHP_YP_API
-#endif
-
-extern zend_module_entry yp_module_entry;
-#define yp_module_ptr &yp_module_entry
-
-/* yp.c functions */
-PHP_FUNCTION(yp_get_default_domain);
-PHP_FUNCTION(yp_order);
-PHP_FUNCTION(yp_master);
-PHP_FUNCTION(yp_match);
-PHP_FUNCTION(yp_first);
-PHP_FUNCTION(yp_next);
-PHP_FUNCTION(yp_all);
-PHP_FUNCTION(yp_cat);
-PHP_FUNCTION(yp_errno);
-PHP_FUNCTION(yp_err_string);
-PHP_MINIT_FUNCTION(yp);
-PHP_RINIT_FUNCTION(yp);
-PHP_MINFO_FUNCTION(yp);
-
-typedef struct {
- int error;
-} php_yp_globals;
-
-#ifdef ZTS
-#define YP(v) TSRMG(yp_globals_id, php_yp_globals *, v)
-#else
-#define YP(v) (yp_globals.v)
-#endif
-
-#else
-
-#define yp_module_ptr NULL
-
-#endif /* HAVE_YP */
-
-#define phpext_yp_ptr yp_module_ptr
-
-#endif /* PHP_YP_H */
diff --git a/ext/yp/yp.c b/ext/yp/yp.c
deleted file mode 100644
index 76272da371..0000000000
--- a/ext/yp/yp.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Stephanie Wehner <_@r4k.net> |
- | Fredrik Ohrn |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-
-#if HAVE_YP
-
-#include "php_yp.h"
-
-#include <rpcsvc/ypclnt.h>
-
-/* {{{ thread safety stuff */
-
-#ifdef ZTS
-int yp_globals_id;
-#else
-PHP_YP_API php_yp_globals yp_globals;
-#endif
-
-/* }}} */
-
-function_entry yp_functions[] = {
- PHP_FE(yp_get_default_domain, NULL)
- PHP_FE(yp_order, NULL)
- PHP_FE(yp_master, NULL)
- PHP_FE(yp_match, NULL)
- PHP_FE(yp_first, NULL)
- PHP_FE(yp_next, NULL)
- PHP_FE(yp_all, NULL)
- PHP_FE(yp_cat, NULL)
- PHP_FE(yp_errno, NULL)
- PHP_FE(yp_err_string, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry yp_module_entry = {
- STANDARD_MODULE_HEADER,
- "yp",
- yp_functions,
- PHP_MINIT(yp),
- NULL,
- PHP_RINIT(yp),
- NULL,
- PHP_MINFO(yp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_YP
-ZEND_GET_MODULE(yp)
-#endif
-
-/* {{{ proto string yp_get_default_domain(void)
- Returns the domain or false */
-PHP_FUNCTION(yp_get_default_domain)
-{
- char *outdomain;
-
- if((YP(error) = yp_get_default_domain(&outdomain))) {
- php_error(E_WARNING, yperr_string (YP(error)));
- RETURN_FALSE;
- }
- RETVAL_STRING(outdomain,1);
-}
-/* }}} */
-
-/* {{{ proto int yp_order(string domain, string map)
- Returns the order number or false */
-PHP_FUNCTION(yp_order)
-{
- pval **domain, **map;
-
-#if SOLARIS_YP
- unsigned long outval;
-#else
- int outval;
-#endif
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- if((YP(error) = yp_order(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outval))) {
- php_error(E_WARNING, yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- RETVAL_LONG(outval);
-}
-/* }}} */
-
-/* {{{ proto string yp_master(string domain, string map)
- Returns the machine name of the master */
-PHP_FUNCTION(yp_master)
-{
- pval **domain, **map;
- char *outname;
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- if((YP(error) = yp_master(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outname))) {
- php_error(E_WARNING, yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- RETVAL_STRING(outname,1);
-}
-/* }}} */
-
-/* {{{ proto string yp_match(string domain, string map, string key)
- Returns the matched line or false */
-PHP_FUNCTION(yp_match)
-{
- pval **domain, **map, **key;
- char *outval;
- int outvallen;
-
- if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
- convert_to_string_ex(key);
-
- if((YP(error) = yp_match(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), Z_STRVAL_PP (key), Z_STRLEN_PP (key), &outval, &outvallen))) {
- php_error(E_WARNING, yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(outval,outvallen,1);
-}
-/* }}} */
-
-/* {{{ proto array yp_first(string domain, string map)
- Returns the first key as array with $var[$key] and the the line as the value */
-PHP_FUNCTION(yp_first)
-{
- pval **domain, **map;
- char *outval, *outkey;
- int outvallen, outkeylen;
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- if((YP(error) = yp_first(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outkey, &outkeylen, &outval, &outvallen))) {
- php_error(E_WARNING, yperr_string (YP(error)));
- RETURN_FALSE;
- }
- array_init(return_value);
- add_assoc_stringl_ex(return_value,outkey,outkeylen,outval,outvallen,1);
-
- /* Deprecated */
- add_assoc_stringl(return_value,"key",outkey,outkeylen,1);
- add_assoc_stringl(return_value,"value",outval,outvallen,1);
-}
-/* }}} */
-
-/* {{{ proto array yp_next(string domain, string map, string key)
- Returns an array with $var[$key] and the the line as the value */
-PHP_FUNCTION(yp_next)
-{
- pval **domain, **map, **key;
- char *outval, *outkey;
- int outvallen, outkeylen;
-
- if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
- convert_to_string_ex(key);
-
- if((YP(error) = yp_next(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), Z_STRVAL_PP (key), Z_STRLEN_PP (key), &outkey, &outkeylen, &outval, &outvallen))) {
- php_error(E_WARNING, yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- array_init(return_value);
- add_assoc_stringl_ex(return_value,outkey,outkeylen,outval,outvallen,1);
-}
-/* }}} */
-
-/* {{{ php_foreach_all
- */
-static int php_foreach_all (int instatus, char *inkey, int inkeylen, char *inval, int invallen, char *indata)
-{
- int r;
- zval *status, *key, *value;
- zval **args [3];
- zval *retval;
- TSRMLS_FETCH();
-
- args[0] = &status;
- args[1] = &key;
- args[2] = &value;
-
- MAKE_STD_ZVAL (status);
- ZVAL_LONG (status, ypprot_err (instatus));
-
- MAKE_STD_ZVAL (key);
- ZVAL_STRINGL (key, inkey, inkeylen, 1);
-
- MAKE_STD_ZVAL (value);
- ZVAL_STRINGL (value, inval, invallen, 1);
-
- if(call_user_function_ex(CG(function_table), NULL, *((zval **)indata), &retval, 3, args, 0, NULL TSRMLS_CC) != SUCCESS)
- {
- zend_error(E_ERROR, "Function call failed");
- return 1;
- }
-
- convert_to_long_ex(&retval);
- r = Z_LVAL_P (retval);
-
- zval_ptr_dtor(&retval);
-
- zval_ptr_dtor(&status);
- zval_ptr_dtor(&key);
- zval_ptr_dtor(&value);
-
- return r;
-}
-/* }}} */
-
-/* {{{ proto void yp_all(string domain, string map, string callback)
- Traverse the map and call a function on each entry */
-PHP_FUNCTION(yp_all)
-{
- pval **domain, **map, **php_callback;
- struct ypall_callback callback;
-
- if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&php_callback) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- callback.foreach = php_foreach_all;
- callback.data = (char *) php_callback;
-
- yp_all(Z_STRVAL_PP(domain),Z_STRVAL_PP(map),&callback);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ php_foreach_cat
- */
-static int php_foreach_cat (int instatus, char *inkey, int inkeylen, char *inval, int invallen, char *indata)
-{
- int err;
-
- err = ypprot_err (instatus);
-
- if (!err)
- {
- if (inkeylen)
- add_assoc_stringl_ex((zval *) indata,inkey,inkeylen,inval,invallen,1);
-
- return 0;
- }
-
- if (err != YPERR_NOMORE)
- {
- TSRMLS_FETCH();
-
- YP(error) = err;
- php_error(E_WARNING, yperr_string (err));
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ proto array yp_cat(string domain, string map)
- Return an array containing the entire map */
-PHP_FUNCTION(yp_cat)
-{
- pval **domain, **map;
- struct ypall_callback callback;
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- array_init(return_value);
-
- callback.foreach = php_foreach_cat;
- callback.data = (char *) return_value;
-
- yp_all(Z_STRVAL_PP(domain),Z_STRVAL_PP(map),&callback);
-}
-/* }}} */
-
-/* {{{ proto int yp_errno()
- Returns the error code from the last call or 0 if no error occured */
-PHP_FUNCTION(yp_errno)
-{
- if((ZEND_NUM_ARGS() != 0)) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG (YP(error));
-}
-/* }}} */
-
-/* {{{ proto string yp_err_string(int errorcode)
- Returns the corresponding error string for the given error code */
-PHP_FUNCTION(yp_err_string)
-{
- pval **error;
- char *string;
-
- if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1,&error) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(error);
-
- if((string = yperr_string(Z_LVAL_PP(error))) == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRING(string,1);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(yp)
-{
-#ifdef ZTS
- ts_allocate_id(&yp_globals_id, sizeof(php_yp_globals), NULL, NULL);
-#endif
-
- REGISTER_LONG_CONSTANT("YPERR_BADARGS", YPERR_BADARGS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_BADDB", YPERR_BADDB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_BUSY", YPERR_BUSY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_DOMAIN", YPERR_DOMAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_KEY", YPERR_KEY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_MAP", YPERR_MAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_NODOM", YPERR_NODOM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_NOMORE", YPERR_NOMORE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_PMAP", YPERR_PMAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_RESRC", YPERR_RESRC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_RPC", YPERR_RPC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_YPBIND", YPERR_YPBIND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_YPERR", YPERR_YPERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_YPSERV", YPERR_YPSERV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_VERS", YPERR_VERS, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-PHP_RINIT_FUNCTION(yp)
-{
- YP(error) = 0;
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(yp)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "YP Support", "enabled");
- php_info_print_table_end();
-}
-#endif /* HAVE_YP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/zip/CREDITS b/ext/zip/CREDITS
deleted file mode 100644
index be2c5a2b44..0000000000
--- a/ext/zip/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Zip
-Sterling Hughes
diff --git a/ext/zip/config.m4 b/ext/zip/config.m4
deleted file mode 100644
index f7ea725d94..0000000000
--- a/ext/zip/config.m4
+++ /dev/null
@@ -1,37 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(zip,for ZIP support,
-[ --with-zip[=DIR] Include ZIP support (requires zziplib >= 0.10.6).])
-
-if test "$PHP_ZIP" != "no"; then
- PHP_NEW_EXTENSION(zip, zip.c, $ext_shared)
- for i in $PHP_ZIP /usr/local /usr ; do
- if test -f $i/include/zzlib/zziplib.h; then
- ZZIPLIB_DIR=$i
- ZZIPLIB_INCDIR=$i/include/zzlib
- elif test -f $i/include/zziplib.h; then
- ZZIPLIB_DIR=$i
- ZZIPLIB_INCDIR=$i/include
- fi
- done
-
- if test -z "$ZZIPLIB_DIR"; then
- AC_MSG_ERROR(Cannot find libzzip)
- fi
-
- ZZIPLIB_LIBDIR=$ZZIPLIB_DIR/lib
-
- PHP_TEMP_LDFLAGS(-L$ZZIPLIB_LIBDIR,[
- AC_CHECK_LIB(zzip, zzip_open, [AC_DEFINE(HAVE_ZZIPLIB,1,[ ])],
- [AC_MSG_ERROR(zziplib module requires zzlib >= 0.10.6.)])
- ])
-
- PHP_SUBST(ZIP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(zzip, $ZZIPLIB_LIBDIR, ZIP_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($ZZIPLIB_INCDIR)
-
- PHP_FOPENCOOKIE
-fi
diff --git a/ext/zip/php_zip.h b/ext/zip/php_zip.h
deleted file mode 100644
index 58cb543730..0000000000
--- a/ext/zip/php_zip.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_ZIP_H
-#define PHP_ZIP_H
-
-#if HAVE_ZZIPLIB
-
-#include <zziplib.h>
-
-extern zend_module_entry zip_module_entry;
-#define phpext_zip_ptr &zip_module_entry
-
-#define PHP_ZZIPLIB_API
-#ifdef PHP_WIN32
-#undef PHP_ZZIPLIB_API
-#ifdef ZIP_EXPORTS
-#define PHP_ZZIPLIB_API __declspec(dllexport)
-#else
-#define PHP_ZZIPLIB_API __declspec(dllimport)
-#endif
-#endif
-
-PHP_MINIT_FUNCTION(zip);
-PHP_MINFO_FUNCTION(zip);
-
-PHP_FUNCTION(zip_open);
-PHP_FUNCTION(zip_read);
-PHP_FUNCTION(zip_close);
-PHP_FUNCTION(zip_entry_name);
-PHP_FUNCTION(zip_entry_compressedsize);
-PHP_FUNCTION(zip_entry_filesize);
-PHP_FUNCTION(zip_entry_compressionmethod);
-PHP_FUNCTION(zip_entry_open);
-PHP_FUNCTION(zip_entry_read);
-PHP_FUNCTION(zip_entry_close);
-
-typedef struct {
- ZZIP_FILE *fp;
- ZZIP_DIRENT dirent;
-} php_zzip_dirent;
-
-#else
-#define phpext_zziplib_ptr NULL
-#endif
-
-#endif /* PHP_ZZIPLIB_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/zip/tests/001.phpt b/ext/zip/tests/001.phpt
deleted file mode 100644
index 787ade9722..0000000000
--- a/ext/zip/tests/001.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Check for zziplib presence
---SKIPIF--
-<?php if (!extension_loaded("zip")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-echo "zip extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php4/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-zip extension is available
diff --git a/ext/zip/zip.c b/ext/zip/zip.c
deleted file mode 100644
index 27f72bb224..0000000000
--- a/ext/zip/zip.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_zip.h"
-
-#if HAVE_ZZIPLIB
-
-#include "ext/standard/info.h"
-#include <zziplib.h>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-static int le_zip_dir;
-#define le_zip_dir_name "Zip Directory"
-static int le_zip_entry;
-#define le_zip_entry_name "Zip Entry"
-
-/* {{{ zip_functions[]
- */
-function_entry zip_functions[] = {
- PHP_FE(zip_open, NULL)
- PHP_FE(zip_read, NULL)
- PHP_FE(zip_close, NULL)
- PHP_FE(zip_entry_name, NULL)
- PHP_FE(zip_entry_compressedsize, NULL)
- PHP_FE(zip_entry_filesize, NULL)
- PHP_FE(zip_entry_compressionmethod, NULL)
- PHP_FE(zip_entry_open, NULL)
- PHP_FE(zip_entry_read, NULL)
- PHP_FE(zip_entry_close, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ zip_module_entry
- */
-zend_module_entry zip_module_entry = {
- STANDARD_MODULE_HEADER,
- "zip",
- zip_functions,
- PHP_MINIT(zip),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(zip),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_ZIP
-ZEND_GET_MODULE(zip)
-#endif
-
-/* {{{ php_zip_free_dir
- */
-static void php_zip_free_dir(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ZZIP_DIR *z_dir = (ZZIP_DIR *) rsrc->ptr;
- zzip_closedir(z_dir);
-}
-/* }}} */
-
-/* {{{ php_zip_free_entry
- */
-static void php_zip_free_entry(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_zzip_dirent *entry = (php_zzip_dirent *) rsrc->ptr;
-
- if (entry->fp)
- zzip_close(entry->fp);
-
- efree(entry);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(zip)
-{
- le_zip_dir = zend_register_list_destructors_ex(php_zip_free_dir, NULL, le_zip_dir_name, module_number);
- le_zip_entry = zend_register_list_destructors_ex(php_zip_free_entry, NULL, le_zip_entry_name, module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(zip)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Zip support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto resource zip_open(string filename)
- Open a new zip archive for reading */
-PHP_FUNCTION(zip_open)
-{
- char *filename;
- ZZIP_DIR *archive_p = NULL;
- int filename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
- return;
- }
-
- if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- archive_p = zzip_opendir(filename);
- if (archive_p == NULL) {
- php_error(E_WARNING, "%s() Cannot open zip archive %s",
- get_active_function_name(TSRMLS_C), filename);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, archive_p, le_zip_dir);
-}
-/* }}} */
-
-/* {{{ proto resource zip_read(resource zip)
- Returns the next file in the archive */
-PHP_FUNCTION(zip_read)
-{
- zval *zzip_dp;
- ZZIP_DIR *archive_p = NULL;
- php_zzip_dirent *entry = NULL;
- int ret;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_dp) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(archive_p, ZZIP_DIR *, &zzip_dp, -1, le_zip_dir_name, le_zip_dir);
-
- entry = emalloc(sizeof(php_zzip_dirent));
- ret = zzip_dir_read(archive_p, &entry->dirent);
- if (ret == 0) {
- efree(entry);
- RETURN_FALSE;
- }
- entry->fp = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, entry, le_zip_entry);
-}
-/* }}} */
-
-/* {{{ proto void zip_close(resource zip)
- Close a Zip archive */
-PHP_FUNCTION(zip_close)
-{
- zval *zzip_dp;
- ZZIP_DIR *archive_p = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_dp) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(archive_p, ZZIP_DIR *, &zzip_dp, -1, le_zip_dir_name, le_zip_dir);
-
- zend_list_delete(Z_LVAL_P(zzip_dp));
-}
-/* }}} */
-
-/* {{{ php_zzip_get_entry
- */
-static void php_zzip_get_entry(INTERNAL_FUNCTION_PARAMETERS, int opt)
-{
- zval *zzip_ent;
- php_zzip_dirent *entry = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_ent) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, &zzip_ent, -1, le_zip_entry_name, le_zip_entry);
-
- switch (opt) {
- case 0:
- RETURN_STRING(entry->dirent.d_name, 1);
- break;
- case 1:
- RETURN_LONG(entry->dirent.d_csize);
- break;
- case 2:
- RETURN_LONG(entry->dirent.st_size);
- break;
- case 3:
- RETURN_STRING((char *) zzip_compr_str(entry->dirent.d_compr), 1);
- break;
- }
-
-}
-/* }}} */
-
-/* {{{ proto string zip_entry_name(resource zip_entry)
- Return the name given a ZZip entry */
-PHP_FUNCTION(zip_entry_name)
-{
- php_zzip_get_entry(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int zip_entry_compressedsize(resource zip_entry)
- Return the compressed size of a ZZip entry */
-PHP_FUNCTION(zip_entry_compressedsize)
-{
- php_zzip_get_entry(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int zip_entry_filesize(resource zip_entry)
- Return the actual filesize of a ZZip entry */
-PHP_FUNCTION(zip_entry_filesize)
-{
- php_zzip_get_entry(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto string zip_entry_compressionmethod(resource zip_entry)
- Return a string containing the compression method used on a particular entry */
-PHP_FUNCTION(zip_entry_compressionmethod)
-{
- php_zzip_get_entry(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ proto bool zip_entry_open(resource zip_dp, resource zip_entry, string mode)
- Open a Zip File, pointed by the resource entry */
-PHP_FUNCTION(zip_entry_open)
-{
- zval *zzip_dp;
- zval *zzip_ent;
- ZZIP_DIR *archive_p = NULL;
- php_zzip_dirent *entry = NULL;
- char *mode;
- int mode_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|s", &zzip_dp, &zzip_ent, &mode, &mode_len) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(archive_p, ZZIP_DIR *, &zzip_dp, -1, le_zip_dir_name, le_zip_dir);
- ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, &zzip_ent, -1, le_zip_entry_name, le_zip_entry);
-
- entry->fp = zzip_file_open(archive_p, entry->dirent.d_name, O_RDONLY | O_BINARY);
-
- RETURN_BOOL((int) entry->fp);
-}
-/* }}} */
-
-/* {{{ proto string zip_entry_read(resource zip_ent)
- Read X bytes from an opened zip entry */
-PHP_FUNCTION(zip_entry_read)
-{
- zval *zzip_ent;
- php_zzip_dirent *entry = NULL;
- char *buf = NULL;
- int len = 1024;
- int ret = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &zzip_ent, &len) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, &zzip_ent, -1, le_zip_entry_name, le_zip_entry);
-
- buf = emalloc(len + 1);
- ret = zzip_read(entry->fp, buf, len);
- buf[ret] = 0;
- if (ret == 0) {
- RETURN_FALSE;
- } else {
- RETURN_STRINGL(buf, ret, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto void zip_entry_close(resource zip_ent)
- Close a zip entry */
-PHP_FUNCTION(zip_entry_close)
-{
- zval *zzip_ent;
- php_zzip_dirent *entry = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_ent) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, &zzip_ent, -1, le_zip_entry_name, le_zip_entry);
-
- zend_list_delete(Z_LVAL_P(zzip_ent));
-}
-/* }}} */
-
-#endif /* HAVE_ZZIPLIB */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/zip/zip.dsp b/ext/zip/zip.dsp
deleted file mode 100644
index 4034db7d33..0000000000
--- a/ext/zip/zip.dsp
+++ /dev/null
@@ -1,108 +0,0 @@
-# Microsoft Developer Studio Project File - Name="zip" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=zip - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "zip.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "zip.mak" CFG="zip - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "zip - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "zip - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "zip - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZIP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_ZIP" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ZIP=1 /D "PHP_ZIP_EXPORTS" /D "HAVE_ZZIPLIB" /D "ZZIP_DLL" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 zziplib.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_zip.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "zip - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZIP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_ZIP" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ZIP=1 /D "PHP_ZIP_EXPORTS" /D "HAVE_ZZIPLIB" /D "ZZIP_DLL" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib zziplib.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_zip.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "zip - Win32 Release_TS"
-# Name "zip - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\zip.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_zip.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/zlib/CREDITS b/ext/zlib/CREDITS
deleted file mode 100644
index c0a47dd293..0000000000
--- a/ext/zlib/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Zlib
-Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti
diff --git a/ext/zlib/config0.m4 b/ext/zlib/config0.m4
deleted file mode 100644
index d5463d7f43..0000000000
--- a/ext/zlib/config0.m4
+++ /dev/null
@@ -1,52 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(zlib-dir,if the location of ZLIB install directory is defined,
-[ --with-zlib-dir=<DIR> Define the location of zlib install directory])
-
-PHP_ARG_WITH(zlib,for ZLIB support,
-[ --with-zlib[=DIR] Include ZLIB support (requires zlib >= 1.0.9).])
-
-if test "$PHP_ZLIB" != "no" -o "$PHP_ZLIB_DIR" != "no"; then
- PHP_NEW_EXTENSION(zlib, zlib.c zlib_fopen_wrapper.c, $ext_shared)
- PHP_SUBST(ZLIB_SHARED_LIBADD)
-
- if test "$PHP_ZLIB" != "yes" -a "$PHP_ZLIB" != "no"; then
- if test -f $PHP_ZLIB/include/zlib/zlib.h; then
- ZLIB_DIR=$PHP_ZLIB
- ZLIB_INCDIR=$ZLIB_DIR/include/zlib
- elif test -f $PHP_ZLIB/include/zlib.h; then
- ZLIB_DIR=$PHP_ZLIB
- ZLIB_INCDIR=$ZLIB_DIR/include
- fi
- else
- for i in /usr/local /usr $PHP_ZLIB_DIR; do
- if test -f $i/include/zlib/zlib.h; then
- ZLIB_DIR=$i
- ZLIB_INCDIR=$i/include/zlib
- elif test -f $i/include/zlib.h; then
- ZLIB_DIR=$i
- ZLIB_INCDIR=$i/include
- fi
- done
- fi
-
- if test -z "$ZLIB_DIR"; then
- AC_MSG_ERROR(Cannot find libz)
- fi
-
- PHP_ADD_LIBPATH($ZLIB_DIR/lib, ZLIB_SHARED_LIBADD)
-
- AC_CHECK_LIB(z, gzgets, [
- AC_DEFINE(HAVE_ZLIB,1,[ ])
- ],[
- AC_MSG_ERROR(ZLIB extension requires zlib >= 1.0.9)
- ])
-
- PHP_ZLIB_DIR=$ZLIB_DIR
- PHP_ADD_LIBRARY(z,, ZLIB_SHARED_LIBADD)
- PHP_ADD_INCLUDE($ZLIB_INCDIR)
-
- PHP_FOPENCOOKIE
-fi
diff --git a/ext/zlib/php_zlib.h b/ext/zlib/php_zlib.h
deleted file mode 100644
index 333eb1224b..0000000000
--- a/ext/zlib/php_zlib.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stefan Röhrich <sr@linux.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ZLIB_H
-#define PHP_ZLIB_H
-
-#include <zlib.h>
-
-ZEND_BEGIN_MODULE_GLOBALS(zlib)
- /* variables for transparent gzip encoding */
- int compression_coding;
- z_stream stream;
- uLong crc;
- int ob_gzhandler_status;
- int ob_gzip_coding;
- int output_compression;
- int output_compression_level;
-ZEND_END_MODULE_GLOBALS(zlib)
-
-extern zend_module_entry php_zlib_module_entry;
-#define zlib_module_ptr &php_zlib_module_entry
-
-PHP_MINIT_FUNCTION(zlib);
-PHP_MSHUTDOWN_FUNCTION(zlib);
-PHP_RINIT_FUNCTION(zlib);
-PHP_MINFO_FUNCTION(zlib);
-PHP_FUNCTION(gzopen);
-PHP_FUNCTION(readgzfile);
-PHP_FUNCTION(gzfile);
-PHP_FUNCTION(gzcompress);
-PHP_FUNCTION(gzuncompress);
-PHP_FUNCTION(gzdeflate);
-PHP_FUNCTION(gzinflate);
-PHP_FUNCTION(gzencode);
-PHP_FUNCTION(ob_gzhandler);
-
-int php_enable_output_compression(int buffer_size TSRMLS_DC);
-
-php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-extern php_stream_ops php_stream_gzio_ops;
-extern php_stream_wrapper php_stream_gzip_wrapper;
-
-#ifdef ZTS
-#define ZLIBG(v) TSRMG(zlib_globals_id, zend_zlib_globals *, v)
-#else
-#define ZLIBG(v) (zlib_globals.v)
-#endif
-
-#define phpext_zlib_ptr zlib_module_ptr
-
-#endif /* PHP_ZLIB_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/zlib/tests/001.phpt b/ext/zlib/tests/001.phpt
deleted file mode 100644
index 40b84c6f07..0000000000
--- a/ext/zlib/tests/001.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-gzdeflate()/gzinflate()
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-$original = str_repeat("hallo php",4096);
-$packed=gzdeflate($original);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzinflate($packed);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal";
-
-echo "\n";
-$original = 'aaaaaaaaaaaaaaa';
-$packed=gzdeflate($original);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzinflate($packed);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal";
-?>
---EXPECT--
-100 36864
-Strings are equal
-5 15
-Strings are equal \ No newline at end of file
diff --git a/ext/zlib/tests/002.phpt b/ext/zlib/tests/002.phpt
deleted file mode 100644
index 24ad827e32..0000000000
--- a/ext/zlib/tests/002.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-gzcompress()/gzuncompress()
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-$original = str_repeat("hallo php",4096);
-$packed=gzcompress($original);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzuncompress($packed);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal";
-?>
---EXPECT--
-106 36864
-Strings are equal
diff --git a/ext/zlib/tests/003.phpt b/ext/zlib/tests/003.phpt
deleted file mode 100644
index 254a4563ad..0000000000
--- a/ext/zlib/tests/003.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-gzencode()/base64_encode()
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---POST--
---GET--
---FILE--
-<?php
-$original = str_repeat("hallo php",4096);
-$packed=gzencode($original);
-echo strlen($packed)." ".strlen($original)."\n";
-if (strcmp(base64_encode($packed),"H4sIAAAAAAAAA+3GoQ0AQAgEsFV+NdwJEthf/R6kVU11z9tsRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERETu5gPlQAe9AJAAAA==")==0) echo "Strings are equal";
-?>
---EXPECT--
-118 36864
-Strings are equal
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
deleted file mode 100644
index f69a570b0c..0000000000
--- a/ext/zlib/zlib.c
+++ /dev/null
@@ -1,997 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stefan Röhrich <sr@linux.de> |
- | Zeev Suraski <zeev@zend.com> |
- | Jade Nicoletti <nicoletti@nns.ch> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_ini.h"
-
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef PHP_WIN32
-#include <windows.h>
-#include <winsock.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#else
-#include <sys/param.h>
-/* #include <sys/uio.h> */
-#endif
-#include "ext/standard/head.h"
-#include "safe_mode.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_zlib.h"
-#include "fopen_wrappers.h"
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#if defined(HAVE_UNISTD_H) && defined(PHP_WIN32)
-#undef HAVE_UNISTD_H
-#endif
-
-
-#ifdef COMPILE_DL_ZLIB
-#ifndef PUTS
-#define PUTS(a) php_printf("%s",a)
-#endif
-#ifndef PUTC
-#define PUTC(a) PUTS(a)
-#endif
-#ifndef PHPWRITE
-#define PHPWRITE(a,n) php_write((a),(n) TSRMLS_CC)
-#endif
-#endif
-
-#define OS_CODE 0x03 /* FIXME */
-#define CODING_GZIP 1
-#define CODING_DEFLATE 2
-#define GZIP_HEADER_LENGTH 10
-#define GZIP_FOOTER_LENGTH 8
-
-/* True globals, no need for thread safety */
-static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
-
-/* {{{ php_zlib_functions[]
- */
-function_entry php_zlib_functions[] = {
- PHP_FE(readgzfile, NULL)
- PHP_FALIAS(gzrewind, rewind, NULL)
- PHP_FALIAS(gzclose, fclose, NULL)
- PHP_FALIAS(gzeof, feof, NULL)
- PHP_FALIAS(gzgetc, fgetc, NULL)
- PHP_FALIAS(gzgets, fgets, NULL)
- PHP_FALIAS(gzgetss, fgetss, NULL)
- PHP_FALIAS(gzread, fread, NULL)
- PHP_FE(gzopen, NULL)
- PHP_FALIAS(gzpassthru, fpassthru, NULL)
- PHP_FALIAS(gzseek, fseek, NULL)
- PHP_FALIAS(gztell, ftell, NULL)
- PHP_FALIAS(gzwrite, fwrite, NULL)
- PHP_FALIAS(gzputs, fwrite, NULL)
- PHP_FE(gzfile, NULL)
- PHP_FE(gzcompress, NULL)
- PHP_FE(gzuncompress, NULL)
- PHP_FE(gzdeflate, NULL)
- PHP_FE(gzinflate, NULL)
- PHP_FE(gzencode, NULL)
- PHP_FE(ob_gzhandler, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ php_zlib_module_entry
- */
-zend_module_entry php_zlib_module_entry = {
- STANDARD_MODULE_HEADER,
- "zlib",
- php_zlib_functions,
- PHP_MINIT(zlib),
- PHP_MSHUTDOWN(zlib),
- PHP_RINIT(zlib),
- NULL,
- PHP_MINFO(zlib),
- "1.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(zlib)
-
-#ifdef COMPILE_DL_ZLIB
-ZEND_GET_MODULE(php_zlib)
-#endif
-
-/* {{{ OnUpdate_zlib_output_compression */
-static PHP_INI_MH(OnUpdate_zlib_output_compression)
-{
- char *ini_value;
-
- ini_value = php_ini_string("output_handler", sizeof("output_handler"), 0);
- if (ini_value != NULL && strlen(ini_value) != 0 &&
- new_value != NULL && strlen(new_value) != 0 ) {
- php_error(E_CORE_ERROR,"Cannot use both zlib.output_compression and output_handler together!!");
- return FAILURE;
- }
-
- OnUpdateInt(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ OnUpdate_zlib_output_compression_level */
-static PHP_INI_MH(OnUpdate_zlib_output_compression_level)
-{
- OnUpdateInt(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("zlib.output_compression", "0", PHP_INI_ALL, OnUpdate_zlib_output_compression, output_compression, zend_zlib_globals, zlib_globals)
- STD_PHP_INI_ENTRY("zlib.output_compression_level", "-1", PHP_INI_ALL, OnUpdate_zlib_output_compression_level, output_compression_level, zend_zlib_globals, zlib_globals)
-PHP_INI_END()
-
-#ifdef ZTS
-/* {{{ php_zlib_init_globals
- */
-static void php_zlib_init_globals(zend_zlib_globals *zlib_globals_p TSRMLS_DC)
-{
-}
-/* }}} */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(zlib)
-{
-#ifdef ZTS
- ts_allocate_id(&zlib_globals_id, sizeof(zend_zlib_globals), (ts_allocate_ctor) php_zlib_init_globals, NULL);
-#endif
- php_register_url_stream_wrapper("compress.zlib", &php_stream_gzip_wrapper TSRMLS_CC);
-
- REGISTER_LONG_CONSTANT("FORCE_GZIP", CODING_GZIP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FORCE_DEFLATE", CODING_DEFLATE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(zlib)
-{
- ZLIBG(ob_gzhandler_status) = 0;
- switch (ZLIBG(output_compression)) {
- case 0:
- break;
- case 1:
- php_enable_output_compression(4096 TSRMLS_CC);
- break;
- default:
- php_enable_output_compression(ZLIBG(output_compression) TSRMLS_CC);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(zlib)
-{
- php_unregister_url_stream_wrapper("zlib" TSRMLS_CC);
-
- UNREGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(zlib)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "ZLib Support", "enabled");
- php_info_print_table_row(2, "'zlib:' fopen wrapper", "enabled");
- php_info_print_table_row(2, "Compiled Version", ZLIB_VERSION );
- php_info_print_table_row(2, "Linked Version", (char *)zlibVersion() );
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ proto array gzfile(string filename [, int use_include_path])
- Read und uncompress entire .gz-file into an array */
-PHP_FUNCTION(gzfile)
-{
- pval **filename, **arg2;
- char *slashed, buf[8192];
- register int i=0;
- int use_include_path = 0;
- php_stream *stream;
-
- /* check args */
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1,&filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2,&filename,&arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
- use_include_path = Z_LVAL_PP(arg2)?USE_PATH:0;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- /* using a stream here is a bit more efficient (resource wise) than php_gzopen_wrapper */
- stream = php_stream_gzopen(NULL, Z_STRVAL_PP(filename), "rb", use_include_path|ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, NULL STREAMS_CC TSRMLS_CC);
- if (stream == NULL) {
- php_error(E_WARNING,"gzFile(\"%s\") - %s",Z_STRVAL_PP(filename),strerror(errno));
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* Now loop through the file and do the magic quotes thing if needed */
- memset(buf,0,sizeof(buf));
- while(php_stream_gets(stream, buf, sizeof(buf)-1) != NULL) {
- if (PG(magic_quotes_runtime)) {
- int len;
-
- slashed = php_addslashes(buf,0,&len,0 TSRMLS_CC); /* 0 = don't free source string */
- add_index_stringl(return_value, i++, slashed, len, 0);
- } else {
- add_index_string(return_value, i++, buf, 1);
- }
- }
- php_stream_close(stream);
-}
-/* }}} */
-
-/* {{{ proto int gzopen(string filename, string mode [, int use_include_path])
- Open a .gz-file and return a .gz-file pointer */
-PHP_FUNCTION(gzopen)
-{
- pval **arg1, **arg2, **arg3;
- php_stream *stream;
- char *p;
- int use_include_path = 0;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2,&arg1,&arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3,&arg1,&arg2,&arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg3);
- use_include_path = Z_LVAL_PP(arg3)?USE_PATH:0;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- p = estrndup(Z_STRVAL_PP(arg2),Z_STRLEN_PP(arg2));
-
- stream = php_stream_gzopen(NULL, Z_STRVAL_PP(arg1), p, use_include_path|ENFORCE_SAFE_MODE, NULL, NULL STREAMS_CC TSRMLS_CC);
- if (!stream) {
- RETURN_FALSE;
- }
- efree(p);
- php_stream_to_zval(stream, return_value);
-}
-/* }}} */
-
-/*
- * Read a file and write the ouput to stdout
- */
-/* {{{ proto int readgzfile(string filename [, int use_include_path])
- Output a .gz-file */
-PHP_FUNCTION(readgzfile)
-{
- pval **arg1, **arg2;
- php_stream * stream;
- int size;
- int use_include_path = 0;
-
-
- /* check args */
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1,&arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2,&arg1,&arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
- use_include_path = Z_LVAL_PP(arg2)?USE_PATH:0;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- stream = php_stream_gzopen(NULL, Z_STRVAL_PP(arg1), "rb", use_include_path|ENFORCE_SAFE_MODE, NULL, NULL STREAMS_CC TSRMLS_CC);
- if (!stream) {
- RETURN_FALSE;
- }
- size = php_stream_passthru(stream);
- php_stream_close(stream);
- RETURN_LONG(size);
-}
-/* }}} */
-
-/* {{{ proto string gzcompress(string data [, int level])
- Gzip-compress a string */
-PHP_FUNCTION(gzcompress)
-{
- zval **data, **zlimit = NULL;
- int limit,status;
- unsigned long l2;
- char *s2;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &data) == FAILURE)
- WRONG_PARAM_COUNT;
- limit=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &data, &zlimit) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zlimit);
- limit = Z_LVAL_PP(zlimit);
- if((limit<0)||(limit>9)) {
- php_error(E_WARNING,"gzcompress: compression level must be within 0..9");
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(data);
-
- l2 = Z_STRLEN_PP(data) + (Z_STRLEN_PP(data)/1000) + 15 + 1; /* room for \0 */
- s2 = (char *) emalloc(l2);
- if(! s2) RETURN_FALSE;
-
- if(limit>=0) {
- status = compress2(s2,&l2,Z_STRVAL_PP(data), Z_STRLEN_PP(data),limit);
- } else {
- status = compress(s2,&l2,Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- if (status==Z_OK) {
- s2 = erealloc(s2,l2 + 1);
- s2[l2] = '\0';
- RETURN_STRINGL(s2, l2, 0);
- } else {
- efree(s2);
- php_error(E_WARNING,"gzcompress: %s",zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string gzuncompress(string data, int length)
- Unzip a gzip-compressed string */
-PHP_FUNCTION(gzuncompress)
-{
- zval **data, **zlimit = NULL;
- int status,factor=1,maxfactor=16;
- unsigned long plength=0,length;
- char *s1=NULL,*s2=NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &data) == FAILURE)
- WRONG_PARAM_COUNT;
- length=0;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &data, &zlimit) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zlimit);
- if(Z_LVAL_PP(zlimit)<=0) {
- php_error(E_WARNING,"gzuncompress: length must be greater zero");
- RETURN_FALSE;
- }
- plength = Z_LVAL_PP(zlimit);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(data);
-
- /*
- zlib::uncompress() wants to know the output data length
- if none was given as a parameter
- we try from input length * 2 up to input length * 2^8
- doubling it whenever it wasn't big enough
- that should be eneugh for all real life cases
- */
- do {
- length=plength?plength:Z_STRLEN_PP(data)*(1<<factor++);
- s2 = (char *) erealloc(s1,length);
- if(! s2) { if(s1) efree(s1); RETURN_FALSE; }
- status = uncompress(s2, &length ,Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- s1=s2;
- } while((status==Z_BUF_ERROR)&&(!plength)&&(factor<maxfactor));
-
- if (status==Z_OK) {
- s2 = erealloc(s2, length + 1); /* space for \0 */
- s2[ length ] = '\0';
- RETURN_STRINGL(s2, length, 0);
- } else {
- efree(s2);
- php_error(E_WARNING,"gzuncompress: %s",zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string gzdeflate(string data [, int level])
- Gzip-compress a string */
-PHP_FUNCTION(gzdeflate)
-{
- zval **data, **zlimit = NULL;
- int level,status;
- z_stream stream;
- char *s2;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &data) == FAILURE)
- WRONG_PARAM_COUNT;
- level=Z_DEFAULT_COMPRESSION;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &data, &zlimit) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zlimit);
- level = Z_LVAL_PP(zlimit);
- if((level<0)||(level>9)) {
- php_error(E_WARNING,"gzdeflate: compression level must be within 0..9");
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(data);
-
- stream.data_type = Z_ASCII;
- stream.zalloc = (alloc_func) Z_NULL;
- stream.zfree = (free_func) Z_NULL;
- stream.opaque = (voidpf) Z_NULL;
-
- stream.next_in = (Bytef*) Z_STRVAL_PP(data);
- stream.avail_in = Z_STRLEN_PP(data);
-
- stream.avail_out = stream.avail_in + (stream.avail_in/1000) + 15 + 1; /* room for \0 */
- s2 = (char *) emalloc(stream.avail_out);
- if(!s2) RETURN_FALSE;
- stream.next_out = s2;
-
- /* init with -MAX_WBITS disables the zlib internal headers */
- status = deflateInit2(&stream, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, 0);
- if (status == Z_OK) {
-
- status = deflate(&stream, Z_FINISH);
- if (status != Z_STREAM_END) {
- deflateEnd(&stream);
- if (status == Z_OK) {
- status = Z_BUF_ERROR;
- }
- } else {
- status = deflateEnd(&stream);
- }
- }
-
- if (status==Z_OK) {
- s2 = erealloc(s2,stream.total_out+1); /* resize to buffer to the "right" size */
- s2[ stream.total_out ] = '\0';
- RETURN_STRINGL(s2, stream.total_out, 0);
- } else {
- efree(s2);
- php_error(E_WARNING,"gzdeflate: %s",zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string gzinflate(string data [, int length])
- Unzip a gzip-compressed string */
-PHP_FUNCTION(gzinflate)
-{
- zval **data, **zlimit = NULL;
- int status,factor=1,maxfactor=16;
- unsigned long plength=0,length;
- char *s1=NULL,*s2=NULL;
- z_stream stream;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &data) == FAILURE)
- WRONG_PARAM_COUNT;
- length=0;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &data, &zlimit) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zlimit);
- if(Z_LVAL_PP(zlimit)<=0) {
- php_error(E_WARNING,"gzinflate: length must be greater zero");
- RETURN_FALSE;
- }
- plength = Z_LVAL_PP(zlimit);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(data);
-
- /*
- stream.avail_out wants to know the output data length
- if none was given as a parameter
- we try from input length * 2 up to input length * 2^16
- doubling it whenever it wasn't big enough
- that should be enaugh for all real life cases
- */
-
- stream.zalloc = (alloc_func) Z_NULL;
- stream.zfree = (free_func) Z_NULL;
-
- do {
- length=plength?plength:Z_STRLEN_PP(data)*(1<<factor++);
- s2 = (char *) erealloc(s1,length);
- if(! s2) { if(s1) efree(s1); RETURN_FALSE; }
-
- stream.next_in = (Bytef*) Z_STRVAL_PP(data);
- stream.avail_in = (uInt) Z_STRLEN_PP(data) + 1; /* there is room for \0 */
-
- stream.next_out = s2;
- stream.avail_out = (uInt) length;
-
- /* init with -MAX_WBITS disables the zlib internal headers */
- status = inflateInit2(&stream, -MAX_WBITS);
- if (status == Z_OK) {
- status = inflate(&stream, Z_FINISH);
- if (status != Z_STREAM_END) {
- inflateEnd(&stream);
- if (status == Z_OK) {
- status = Z_BUF_ERROR;
- }
- } else {
- status = inflateEnd(&stream);
- }
- }
- s1=s2;
-
- } while((status==Z_BUF_ERROR)&&(!plength)&&(factor<maxfactor));
-
- if(status==Z_OK) {
- s2 = erealloc(s2, stream.total_out + 1); /* room for \0 */
- s2[ stream.total_out ] = '\0';
- RETURN_STRINGL(s2, stream.total_out, 0);
- } else {
- efree(s2);
- php_error(E_WARNING,"gzinflate: %s",zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_do_deflate
- */
-static int php_do_deflate(uint str_length, Bytef **p_buffer, uint *p_buffer_len, zend_bool do_start, zend_bool do_end TSRMLS_DC)
-{
- Bytef *buffer;
- uInt prev_outlen, outlen;
- int err;
- int start_offset = (do_start?10:0);
- int end_offset = (do_end?8:0);
-
- outlen = sizeof(char) * (str_length * 1.001 + 12) + 1; /* leave some room for a trailing \0 */
- if ((outlen+start_offset+end_offset) > *p_buffer_len) {
- buffer = (Bytef *) emalloc(outlen+start_offset+end_offset);
- } else {
- buffer = *p_buffer;
- }
-
- ZLIBG(stream).next_out = buffer+start_offset;
- ZLIBG(stream).avail_out = outlen;
-
-
- err = deflate(&ZLIBG(stream), Z_SYNC_FLUSH);
- while (err == Z_OK && !ZLIBG(stream).avail_out) {
- prev_outlen = outlen;
- outlen *= 3;
- if ((outlen+start_offset+end_offset) > *p_buffer_len) {
- buffer = erealloc(buffer, outlen+start_offset+end_offset);
- }
-
- ZLIBG(stream).next_out = buffer+start_offset + prev_outlen;
- ZLIBG(stream).avail_out = prev_outlen * 2;
-
- err = deflate(&ZLIBG(stream), Z_SYNC_FLUSH);
- }
-
- if (do_end) {
- err = deflate(&ZLIBG(stream), Z_FINISH);
- }
-
-
- *p_buffer = buffer;
- *p_buffer_len = outlen - ZLIBG(stream).avail_out;
-
- return err;
-}
-/* }}} */
-
-/* {{{ php_deflate_string
- */
-int php_deflate_string(const char *str, uint str_length, char **newstr, uint *new_length, int coding, zend_bool do_start, zend_bool do_end, int compression_level TSRMLS_DC)
-{
- int err;
-
- ZLIBG(compression_coding) = coding;
-
- if (do_start) {
- ZLIBG(stream).zalloc = Z_NULL;
- ZLIBG(stream).zfree = Z_NULL;
- ZLIBG(stream).opaque = Z_NULL;
- switch (coding) {
- case CODING_GZIP:
- /* windowBits is passed < 0 to suppress zlib header & trailer */
- if (deflateInit2(&ZLIBG(stream), compression_level, Z_DEFLATED,
- -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY)
- != Z_OK) {
- /* TODO: print out error */
- return FAILURE;
- }
-
- ZLIBG(crc) = crc32(0L, Z_NULL, 0);
- break;
- case CODING_DEFLATE:
- if (deflateInit(&ZLIBG(stream), compression_level) != Z_OK) {
- /* TODO: print out error */
- return FAILURE;
- }
- break;
- }
- }
-
-
- ZLIBG(stream).next_in = (Bytef*) str;
- ZLIBG(stream).avail_in = (uInt) str_length;
-
- if (ZLIBG(compression_coding) == 1) {
- ZLIBG(crc) = crc32(ZLIBG(crc), (const Bytef *) str, str_length);
- }
-
- err = php_do_deflate(str_length, (Bytef **) newstr, new_length, do_start, do_end TSRMLS_CC);
- /* TODO: error handling (err may be Z_STREAM_ERROR, Z_BUF_ERROR, ?) */
-
- if (do_start) {
- /* Write a very simple .gz header: */
- (*newstr)[0] = gz_magic[0];
- (*newstr)[1] = gz_magic[1];
- (*newstr)[2] = Z_DEFLATED;
- (*newstr)[3] = (*newstr)[4] = (*newstr)[5] = (*newstr)[6] = (*newstr)[7] = (*newstr)[8] = 0;
- (*newstr)[9] = OS_CODE;
- *new_length += 10;
- }
- if (do_end) {
- if (ZLIBG(compression_coding) == 1) {
- char *trailer = (*newstr)+(*new_length);
-
- /* write crc & stream.total_in in LSB order */
- trailer[0] = (char) ZLIBG(crc) & 0xFF;
- trailer[1] = (char) (ZLIBG(crc) >> 8) & 0xFF;
- trailer[2] = (char) (ZLIBG(crc) >> 16) & 0xFF;
- trailer[3] = (char) (ZLIBG(crc) >> 24) & 0xFF;
- trailer[4] = (char) ZLIBG(stream).total_in & 0xFF;
- trailer[5] = (char) (ZLIBG(stream).total_in >> 8) & 0xFF;
- trailer[6] = (char) (ZLIBG(stream).total_in >> 16) & 0xFF;
- trailer[7] = (char) (ZLIBG(stream).total_in >> 24) & 0xFF;
- trailer[8] = '\0';
- *new_length += 8;
- }
- deflateEnd(&ZLIBG(stream));
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string gzencode(string data [, int level [, int encoding_mode]])
- GZ encode a string */
-PHP_FUNCTION(gzencode)
-{
- char *data, *s2;
- int data_len;
- int level = Z_DEFAULT_COMPRESSION, coding = CODING_GZIP;
- int status;
- z_stream stream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &data, &data_len, &level, &coding) == FAILURE) {
- return;
- }
-
- if((level<-1)||(level>9)) {
- php_error(E_WARNING,"gzencode: compression level must be within -1..9");
- RETURN_FALSE;
- }
-
- if((coding!=CODING_GZIP)&&(coding!=CODING_DEFLATE)) {
- php_error(E_WARNING,"gzencode: encoding mode must be FORCE_GZIP or FORCE_DEFLATE");
- RETURN_FALSE;
- }
-
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
-
- stream.next_in = (Bytef*) data;
- stream.avail_in = data_len;
-
- stream.avail_out = stream.avail_in + (stream.avail_in/1000) + 15 + 1; /* room for \0 */
- s2 = (char *) emalloc(stream.avail_out+GZIP_HEADER_LENGTH+(coding==CODING_GZIP?GZIP_FOOTER_LENGTH:0));
- if(!s2)
- RETURN_FALSE;
-
- /* add gzip file header */
- s2[0] = gz_magic[0];
- s2[1] = gz_magic[1];
- s2[2] = Z_DEFLATED;
- s2[3] = s2[4] = s2[5] = s2[6] = s2[7] = s2[8] = 0; /* time set to 0 */
- s2[9] = OS_CODE;
-
- stream.next_out = &(s2[GZIP_HEADER_LENGTH]);
-
- switch (coding) {
- case CODING_GZIP:
- /* windowBits is passed < 0 to suppress zlib header & trailer */
- if ((status = deflateInit2(&stream, level, Z_DEFLATED,
- -MAX_WBITS, MAX_MEM_LEVEL,
- Z_DEFAULT_STRATEGY))
- != Z_OK) {
- php_error(E_WARNING,"gzencode: %s", zError(status));
- RETURN_FALSE;
- }
-
- break;
- case CODING_DEFLATE:
- if ((status = deflateInit(&stream, level)) != Z_OK) {
- php_error(E_WARNING,"gzencode: %s", zError(status));
- RETURN_FALSE;
- }
- break;
- }
-
- status = deflate(&stream, Z_FINISH);
- if (status != Z_STREAM_END) {
- deflateEnd(&stream);
- if (status == Z_OK) {
- status = Z_BUF_ERROR;
- }
- } else {
- status = deflateEnd(&stream);
- }
-
- if (status==Z_OK) {
- s2 = erealloc(s2,stream.total_out+GZIP_HEADER_LENGTH+(coding==CODING_GZIP?GZIP_FOOTER_LENGTH:0)+1); /* resize to buffer to the "right" size */
- if (coding == CODING_GZIP) {
- char *trailer = s2+(stream.total_out+GZIP_HEADER_LENGTH);
- uLong crc = crc32(0L, Z_NULL, 0);
-
- crc = crc32(crc, (const Bytef *) data, data_len);
-
- /* write crc & stream.total_in in LSB order */
- trailer[0] = (char) crc & 0xFF;
- trailer[1] = (char) (crc >> 8) & 0xFF;
- trailer[2] = (char) (crc >> 16) & 0xFF;
- trailer[3] = (char) (crc >> 24) & 0xFF;
- trailer[4] = (char) stream.total_in & 0xFF;
- trailer[5] = (char) (stream.total_in >> 8) & 0xFF;
- trailer[6] = (char) (stream.total_in >> 16) & 0xFF;
- trailer[7] = (char) (stream.total_in >> 24) & 0xFF;
- trailer[8] = '\0';
- }
- RETURN_STRINGL(s2, stream.total_out+GZIP_HEADER_LENGTH+(coding==CODING_GZIP?GZIP_FOOTER_LENGTH:0), 0);
- } else {
- efree(s2);
- php_error(E_WARNING,"gzencode: %s",zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ob_gzhandler(string str, int mode)
- Encode str based on accept-encoding setting - designed to be called from ob_start() */
-PHP_FUNCTION(ob_gzhandler)
-{
- int coding;
- zval **zv_string, **zv_mode;
- zval **data, **a_encoding;
- zend_bool return_original=0;
- zend_bool do_start, do_end;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &zv_string, &zv_mode)==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (ZLIBG(ob_gzhandler_status)==-1
- || zend_hash_find(&EG(symbol_table), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), (void **) &data)==FAILURE
- || Z_TYPE_PP(data)!=IS_ARRAY
- || zend_hash_find(Z_ARRVAL_PP(data), "HTTP_ACCEPT_ENCODING", sizeof("HTTP_ACCEPT_ENCODING"), (void **) &a_encoding)==FAILURE) {
- /* return the original string */
- *return_value = **zv_string;
- zval_copy_ctor(return_value);
- ZLIBG(ob_gzhandler_status)=-1;
- return;
- }
- convert_to_string_ex(a_encoding);
- if (php_memnstr(Z_STRVAL_PP(a_encoding), "gzip", 4, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- coding = CODING_GZIP;
- } else if(php_memnstr(Z_STRVAL_PP(a_encoding), "deflate", 7, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- coding = CODING_DEFLATE;
- } else {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(zv_mode);
- do_start = ((Z_LVAL_PP(zv_mode) & PHP_OUTPUT_HANDLER_START) ? 1 : 0);
- do_end = ((Z_LVAL_PP(zv_mode) & PHP_OUTPUT_HANDLER_END) ? 1 : 0);
- Z_STRVAL_P(return_value) = NULL;
- Z_STRLEN_P(return_value) = 0;
- if (php_deflate_string(Z_STRVAL_PP(zv_string), Z_STRLEN_PP(zv_string), &Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value), coding, do_start, do_end, ZLIBG(output_compression_level) TSRMLS_CC)==SUCCESS) {
- Z_TYPE_P(return_value) = IS_STRING;
- if (do_start) {
- switch (coding) {
- case CODING_GZIP:
- if (sapi_add_header("Content-Encoding: gzip", sizeof("Content-Encoding: gzip") - 1, 1)==FAILURE) {
- return_original = 1;
- }
- if (sapi_add_header("Vary: Accept-Encoding", sizeof("Vary: Accept-Encoding") - 1, 1)==FAILURE) {
- return_original = 1;
- }
- break;
- case CODING_DEFLATE:
- if (sapi_add_header("Content-Encoding: deflate", sizeof("Content-Encoding: deflate") - 1, 1)==FAILURE) {
- return_original = 1;
- }
- if (sapi_add_header("Vary: Accept-Encoding", sizeof("Vary: Accept-Encoding") - 1, 1)==FAILURE) {
- return_original = 1;
- }
- break;
- default:
- return_original = 1;
- break;
- }
- }
-
- if (return_original) {
- zval_dtor(return_value);
- }
-
- } else {
- return_original = 1;
- }
-
- if (return_original) {
- /* return the original string */
- *return_value = **zv_string;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ php_gzip_output_handler
- */
-static void php_gzip_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
-{
- zend_bool do_start, do_end;
-
- do_start = (mode & PHP_OUTPUT_HANDLER_START ? 1 : 0);
- do_end = (mode & PHP_OUTPUT_HANDLER_END ? 1 : 0);
- if (php_deflate_string(output, output_len, handled_output, handled_output_len, ZLIBG(ob_gzip_coding), do_start, do_end, ZLIBG(output_compression_level) TSRMLS_CC)!=SUCCESS) {
- zend_error(E_ERROR, "Compression failed");
- }
-}
-/* }}} */
-
-/* {{{ php_enable_output_compression
- */
-int php_enable_output_compression(int buffer_size TSRMLS_DC)
-{
- zval **a_encoding, **data;
-
- if (zend_hash_find(&EG(symbol_table), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), (void **) &data)==FAILURE
- || Z_TYPE_PP(data)!=IS_ARRAY
- || zend_hash_find(Z_ARRVAL_PP(data), "HTTP_ACCEPT_ENCODING", sizeof("HTTP_ACCEPT_ENCODING"), (void **) &a_encoding)==FAILURE) {
- return FAILURE;
- }
- convert_to_string_ex(a_encoding);
- if (php_memnstr(Z_STRVAL_PP(a_encoding), "gzip", 4, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- if (sapi_add_header("Content-Encoding: gzip", sizeof("Content-Encoding: gzip") - 1, 1)==FAILURE) {
- return FAILURE;
- }
- ZLIBG(ob_gzip_coding) = CODING_GZIP;
- } else if(php_memnstr(Z_STRVAL_PP(a_encoding), "deflate", 7, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- if (sapi_add_header("Content-Encoding: deflate", sizeof("Content-Encoding: deflate") - 1, 1)==FAILURE) {
- return FAILURE;
- }
- ZLIBG(ob_gzip_coding) = CODING_DEFLATE;
- } else {
- return FAILURE;
- }
-
- php_start_ob_buffer(NULL, buffer_size, 0 TSRMLS_CC);
- php_ob_set_internal_handler(php_gzip_output_handler, buffer_size*1.5, "zlib output compression", 0 TSRMLS_CC);
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/zlib/zlib.dsp b/ext/zlib/zlib.dsp
deleted file mode 100644
index 999953f306..0000000000
--- a/ext/zlib/zlib.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=zlib - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "zlib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "zlib - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "zlib - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "zlib - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ZLIB" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZLIB_EXPORTS" /D "COMPILE_DL_ZLIB" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ZLIB=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib zlib.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_zlib.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\zlib\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "zlib - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ZLIB" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZLIB_EXPORTS" /D "COMPILE_DL_ZLIB" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ZLIB=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib zlib.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_zlib.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\zlib\Debug"
-
-!ENDIF
-
-# Begin Target
-
-# Name "zlib - Win32 Release_TS"
-# Name "zlib - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\zlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zlib_fopen_wrapper.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_zlib.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c
deleted file mode 100644
index 034311b809..0000000000
--- a/ext/zlib/zlib_fopen_wrapper.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@thebrainroom.com>, based on work by: |
- | Hartmut Holzgraefe <hartmut@six.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-#define IS_EXT_MODULE
-#define _GNU_SOURCE
-
-#include "php.h"
-#include "php_zlib.h"
-#include "fopen_wrappers.h"
-
-struct php_gz_stream_data_t {
- gzFile gz_file;
- php_stream *stream;
-};
-
-static size_t php_gziop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *)stream->abstract;
-
- if (buf == NULL && count == 0) {
- if (gzeof(self->gz_file))
- return EOF;
- return 0;
- }
-
- return gzread(self->gz_file, buf, count);
-}
-
-static char *php_gziop_gets(php_stream *stream, char *buf, size_t size TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *)stream->abstract;
- return gzgets(self->gz_file, buf, size);
-}
-
-
-static size_t php_gziop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *)stream->abstract;
- return gzwrite(self->gz_file, (char*)buf, count);
-}
-
-static int php_gziop_seek(php_stream *stream, off_t offset, int whence TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *)stream->abstract;
-
- assert(self != NULL);
- if (offset == 0 && whence == SEEK_CUR)
- return gztell(self->gz_file);
-
- return gzseek(self->gz_file, offset, whence);
-}
-
-static int php_gziop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *)stream->abstract;
- int ret = EOF;
-
- if (close_handle)
- ret = gzclose(self->gz_file);
- php_stream_free(self->stream, PHP_STREAM_FREE_CLOSE | (close_handle == 0 ? PHP_STREAM_FREE_PRESERVE_HANDLE : 0));
- efree(self);
-
- return ret;
-}
-static int php_gziop_flush(php_stream *stream TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *)stream->abstract;
- return gzflush(self->gz_file, Z_SYNC_FLUSH);
-}
-
-
-php_stream_ops php_stream_gzio_ops = {
- php_gziop_write, php_gziop_read,
- php_gziop_close, php_gziop_flush,
- "ZLIB",
- php_gziop_seek, php_gziop_gets,
- NULL, NULL
-};
-
-php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, char *path, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self;
- php_stream *stream = NULL;
-
- self = emalloc(sizeof(*self));
-
- if (strncasecmp("compress.zlib://", path, 16) == 0)
- path += 16;
- else if (strncasecmp("zlib:", path, 5) == 0)
- path += 5;
-
- self->stream = php_stream_open_wrapper(path, mode, STREAM_MUST_SEEK|options, opened_path);
-
- if (self->stream) {
- int fd;
- if (SUCCESS == php_stream_cast(self->stream, PHP_STREAM_AS_FD, (void**)&fd, REPORT_ERRORS)) {
- self->gz_file = gzdopen(fd, mode);
- if (self->gz_file) {
- stream = php_stream_alloc_rel(&php_stream_gzio_ops, self, 0, mode);
- if (stream)
- return stream;
- gzclose(self->gz_file);
- }
- }
- }
- if (stream)
- php_stream_close(stream);
- if (self && self->stream)
- php_stream_close(self->stream);
- if (self)
- efree(self);
-
- return NULL;
-}
-
-static php_stream_wrapper_ops gzip_stream_wops = {
- php_stream_gzopen,
- NULL,
- NULL,
- NULL
-};
-
-php_stream_wrapper php_stream_gzip_wrapper = {
- &gzip_stream_wops,
- NULL,
- 0, /* is_url */
-};
-
-
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/zlib/zlib_win32_howto.txt b/ext/zlib/zlib_win32_howto.txt
deleted file mode 100644
index 72e767ac5e..0000000000
--- a/ext/zlib/zlib_win32_howto.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Rules for building ZLIB
------------------------
-
-The zlib project requires the folowing files:
-
-php_build\zlib\include\zlib.h
-php_build\zlib\include\zconf.h
-php_build\zlib\lib\zlibstat.lib
-
-php_build is a directory at the same level as php4.
-
-Start Visual Studio, load php_modules.dsw, select the ZLIB projects, and build
-it.
-
-
- \ No newline at end of file